diff --git a/audio/aidl/default/EffectContext.cpp b/audio/aidl/default/EffectContext.cpp index 553917718c..26c88b207f 100644 --- a/audio/aidl/default/EffectContext.cpp +++ b/audio/aidl/default/EffectContext.cpp @@ -63,13 +63,18 @@ void EffectContext::resetBuffer() { } void EffectContext::dupeFmqWithReopen(IEffect::OpenEffectReturn* effectRet) { + const size_t inBufferSizeInFloat = mCommon.input.frameCount * mInputFrameSize / sizeof(float); + const size_t outBufferSizeInFloat = + mCommon.output.frameCount * mOutputFrameSize / sizeof(float); + const size_t bufferSize = std::max(inBufferSizeInFloat, outBufferSizeInFloat); if (!mInputMQ) { - mInputMQ = std::make_shared(mCommon.input.frameCount * mInputFrameSize / - sizeof(float)); + mInputMQ = std::make_shared(inBufferSizeInFloat); } if (!mOutputMQ) { - mOutputMQ = std::make_shared(mCommon.output.frameCount * mOutputFrameSize / - sizeof(float)); + mOutputMQ = std::make_shared(outBufferSizeInFloat); + } + if (mWorkBuffer.size() != bufferSize) { + mWorkBuffer.resize(bufferSize); } dupeFmq(effectRet); } @@ -222,8 +227,6 @@ RetCode EffectContext::updateIOFrameSize(const Parameter::Common& common) { } if (needUpdateMq) { - mWorkBuffer.resize(std::max(common.input.frameCount * mInputFrameSize / sizeof(float), - common.output.frameCount * mOutputFrameSize / sizeof(float))); return notifyDataMqUpdate(); } return RetCode::SUCCESS;