audiohal: Support stateful downmixer effects
Fraunhofer's downmixer has additional buffering, this is incompatible
with how DownmixerBufferProvider used to process incomplete buffers.
Now the effects HIDL wrapper delivers frameCount updates in
audiobuffers to the server side. This fixes playback of multichannel
sound streams.
Bug: 36181621
Test: play 5.1 track from Play Music
Change-Id: I3b2cd097d61873c6ba329f1a574235ac88b21cac
diff --git a/media/libaudiohal/EffectBufferHalHidl.cpp b/media/libaudiohal/EffectBufferHalHidl.cpp
index d6a41a2..ef4097a 100644
--- a/media/libaudiohal/EffectBufferHalHidl.cpp
+++ b/media/libaudiohal/EffectBufferHalHidl.cpp
@@ -56,7 +56,8 @@
}
EffectBufferHalHidl::EffectBufferHalHidl(size_t size)
- : mBufferSize(size), mExternalData(nullptr), mAudioBuffer{0, {nullptr}} {
+ : mBufferSize(size), mFrameCountChanged(false),
+ mExternalData(nullptr), mAudioBuffer{0, {nullptr}} {
mHidlBuffer.id = makeUniqueId();
mHidlBuffer.frameCount = 0;
}
@@ -107,6 +108,13 @@
void EffectBufferHalHidl::setFrameCount(size_t frameCount) {
mHidlBuffer.frameCount = frameCount;
mAudioBuffer.frameCount = frameCount;
+ mFrameCountChanged = true;
+}
+
+bool EffectBufferHalHidl::checkFrameCountChange() {
+ bool result = mFrameCountChanged;
+ mFrameCountChanged = false;
+ return result;
}
void EffectBufferHalHidl::setExternalData(void* external) {