Effect: Configure effect after the buffer is set.
This properly sets ACCUMULATE vs WRITE mode.
Fixes regression due to
commit f1f22e7720456d52dc3cc844a51a21216c7be4e6
Test: YouTube Music, ensure that volume doesn't increase.
Bug: 200228253
Bug: 204489508
Change-Id: Ieb309b4103cf29c8a51818135f9f83c292d7aaed
diff --git a/services/audioflinger/Effects.cpp b/services/audioflinger/Effects.cpp
index b80943e..d09c9f4 100644
--- a/services/audioflinger/Effects.cpp
+++ b/services/audioflinger/Effects.cpp
@@ -953,11 +953,7 @@
// Auxiliary effect:
// accumulates in output buffer: input buffer != output buffer
// Therefore: accumulate <=> input buffer != output buffer
- if (mConfig.inputCfg.buffer.raw != mConfig.outputCfg.buffer.raw) {
- mConfig.outputCfg.accessMode = EFFECT_BUFFER_ACCESS_ACCUMULATE;
- } else {
- mConfig.outputCfg.accessMode = EFFECT_BUFFER_ACCESS_WRITE;
- }
+ mConfig.outputCfg.accessMode = requiredEffectBufferAccessMode();
mConfig.inputCfg.mask = EFFECT_CONFIG_ALL;
mConfig.outputCfg.mask = EFFECT_CONFIG_ALL;
mConfig.inputCfg.buffer.frameCount = callback->frameCount();
@@ -2340,8 +2336,10 @@
// output buffer, otherwise to chain input buffer
if (idx_insert == size) {
if (idx_insert != 0) {
- mEffects[idx_insert-1]->configure();
- mEffects[idx_insert-1]->setOutBuffer(mInBuffer);
+ // update channel mask before setting output buffer.
+ mEffects[idx_insert - 1]->configure();
+ mEffects[idx_insert - 1]->setOutBuffer(mInBuffer); // set output buffer
+ mEffects[idx_insert - 1]->updateAccessMode(); // reconfig if neeeded.
}
effect->setOutBuffer(mOutBuffer);
} else {