From c8c6a81f0f0f0074260ee84b30df16dc480c4ee7 Mon Sep 17 00:00:00 2001 From: Mikhail Naganov Date: Wed, 26 Apr 2017 17:22:31 -0700 Subject: [PATCH] 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: Iffe3327c6eedef85151eec2b41e0aedfb7ffa6dc --- audio/effect/2.0/default/AudioBufferManager.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/audio/effect/2.0/default/AudioBufferManager.cpp b/audio/effect/2.0/default/AudioBufferManager.cpp index 603dbb8cfd..bba0c4adf9 100644 --- a/audio/effect/2.0/default/AudioBufferManager.cpp +++ b/audio/effect/2.0/default/AudioBufferManager.cpp @@ -30,7 +30,10 @@ bool AudioBufferManager::wrap(const AudioBuffer& buffer, sp* ssize_t idx = mBuffers.indexOfKey(buffer.id); if (idx >= 0) { *wrapper = mBuffers[idx].promote(); - if (*wrapper != nullptr) return true; + if (*wrapper != nullptr) { + (*wrapper)->getHalBuffer()->frameCount = buffer.frameCount; + return true; + } mBuffers.removeItemsAt(idx); } // Need to create and init a new AudioBufferWrapper.