audio hal: Fix multichannel playback
Correctly operate on input and output buffers in DownmixerBufferProvider
Note that playback is a bit choppy, need to investigate further.
Change-Id: I350175dcc9cc7142a1935585a8bd5e9abb1b8eb6
Test: play back a 5.1 file
diff --git a/media/libaudiohal/EffectBufferHalHidl.cpp b/media/libaudiohal/EffectBufferHalHidl.cpp
index 446d2ef..9a9535b 100644
--- a/media/libaudiohal/EffectBufferHalHidl.cpp
+++ b/media/libaudiohal/EffectBufferHalHidl.cpp
@@ -113,15 +113,25 @@
}
void EffectBufferHalHidl::update() {
- if (mExternalData == nullptr) return;
- mMemory->update();
- memcpy(mAudioBuffer.raw, mExternalData, mBufferSize);
- mMemory->commit();
+ update(mBufferSize);
}
void EffectBufferHalHidl::commit() {
+ commit(mBufferSize);
+}
+
+void EffectBufferHalHidl::update(size_t size) {
if (mExternalData == nullptr) return;
- memcpy(mExternalData, mAudioBuffer.raw, mBufferSize);
+ mMemory->update();
+ if (size > mBufferSize) size = mBufferSize;
+ memcpy(mAudioBuffer.raw, mExternalData, size);
+ mMemory->commit();
+}
+
+void EffectBufferHalHidl::commit(size_t size) {
+ if (mExternalData == nullptr) return;
+ if (size > mBufferSize) size = mBufferSize;
+ memcpy(mExternalData, mAudioBuffer.raw, size);
}
} // namespace android