From d71a0e1ac517cf312b9a96fe5ba9de04f2b9ffd4 Mon Sep 17 00:00:00 2001 From: Eric Laurent Date: Tue, 1 Mar 2011 12:18:41 -0800 Subject: Fix issue 3499926. Make sure that NumberEffectsEnabled is decremented at the same time as SamplesToExitCountBb reaches 0 in Effect_process(). Not doing so causes NumberEffectsEnabled not being decremented if Effect_setEnabled() is called after SamplesToExitCountBb reaches 0 and before next Effect_process() is called. Change-Id: Id827a301f93a5a09ecd9995a0c7d731ef526711a --- .../libeffects/lvm/wrapper/Bundle/EffectBundle.cpp | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'media/libeffects/lvm') diff --git a/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp b/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp index ebe3302..0b061db 100644 --- a/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp +++ b/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp @@ -53,6 +53,11 @@ extern "C" const struct effect_interface_s gLvmEffectInterface; namespace android { namespace { +// Flag to allow a one time init of global memory, only happens on first call ever +int LvmInitFlag = LVM_FALSE; +SessionContext GlobalSessionMemory[LVM_MAX_SESSIONS]; +int SessionIndex[LVM_MAX_SESSIONS]; + /* local functions */ #define CHECK_ARG(cond) { \ if (!(cond)) { \ @@ -61,11 +66,6 @@ namespace { } \ } -// Flag to allow a one time init of global memory, only happens on first call ever -int LvmInitFlag = LVM_FALSE; -SessionContext GlobalSessionMemory[LVM_MAX_SESSIONS]; - -int SessionIndex[LVM_MAX_SESSIONS]; // NXP SW BassBoost UUID const effect_descriptor_t gBassBoostDescriptor = { @@ -2588,9 +2588,11 @@ extern "C" int Effect_process(effect_interface_t self, pContext->pBundledContext->SamplesToExitCountBb -= outBuffer->frameCount * 2; // STEREO //LOGV("\tEffect_process: Waiting to turn off BASS_BOOST, %d samples left", // pContext->pBundledContext->SamplesToExitCountBb); - } else { + } + if(pContext->pBundledContext->SamplesToExitCountBb <= 0) { status = -ENODATA; pContext->pBundledContext->NumberEffectsEnabled--; + LOGV("\tEffect_process() this is the last frame for LVM_BASS_BOOST"); } } if ((pContext->pBundledContext->bVolumeEnabled == LVM_FALSE)&& @@ -2606,9 +2608,11 @@ extern "C" int Effect_process(effect_interface_t self, pContext->pBundledContext->SamplesToExitCountEq -= outBuffer->frameCount * 2; // STEREO //LOGV("\tEffect_process: Waiting to turn off EQUALIZER, %d samples left", // pContext->pBundledContext->SamplesToExitCountEq); - } else { + } + if(pContext->pBundledContext->SamplesToExitCountEq <= 0) { status = -ENODATA; pContext->pBundledContext->NumberEffectsEnabled--; + LOGV("\tEffect_process() this is the last frame for LVM_EQUALIZER"); } } if ((pContext->pBundledContext->bVirtualizerEnabled == LVM_FALSE)&& @@ -2618,9 +2622,11 @@ extern "C" int Effect_process(effect_interface_t self, pContext->pBundledContext->SamplesToExitCountVirt -= outBuffer->frameCount * 2;// STEREO //LOGV("\tEffect_process: Waiting for to turn off VIRTUALIZER, %d samples left", // pContext->pBundledContext->SamplesToExitCountVirt); - } else { + } + if(pContext->pBundledContext->SamplesToExitCountVirt <= 0) { status = -ENODATA; pContext->pBundledContext->NumberEffectsEnabled--; + LOGV("\tEffect_process() this is the last frame for LVM_VIRTUALIZER"); } } -- cgit v1.1