Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b6431802 authored by Eric Laurent's avatar Eric Laurent
Browse files

Fix device management in lvm effect bundle wrapper.

The virtualizer and bass boost effects should be disabled when
not playing throught headsets or headphones.

There is a bug in current wrapper implementation that makes that those
effects are not disabled if the effect is enabled by the user after
the headset has been removed (current logic only works if the device selection
occurs while the effect is enabled).

Change-Id: I7c66b15a0339d95fb9ed13c8320d66379725d3b6
parent 841fa374
Loading
Loading
Loading
Loading
+26 −17
Original line number Diff line number Diff line
@@ -2459,6 +2459,9 @@ int Effect_setEnabled(EffectContext *pContext, bool enabled)
    LOGV("\tEffect_setEnabled() type %d, enabled %d", pContext->EffectType, enabled);

    if (enabled) {
        // Bass boost or Virtualizer can be temporarily disabled if playing over device speaker due
        // to their nature.
        bool tempDisabled = false;
        switch (pContext->EffectType) {
            case LVM_BASS_BOOST:
                if (pContext->pBundledContext->bBassEnabled == LVM_TRUE) {
@@ -2471,6 +2474,7 @@ int Effect_setEnabled(EffectContext *pContext, bool enabled)
                pContext->pBundledContext->SamplesToExitCountBb =
                     (LVM_INT32)(pContext->pBundledContext->SamplesPerSecond*0.1);
                pContext->pBundledContext->bBassEnabled = LVM_TRUE;
                tempDisabled = pContext->pBundledContext->bBassTempDisabled;
                break;
            case LVM_EQUALIZER:
                if (pContext->pBundledContext->bEqualizerEnabled == LVM_TRUE) {
@@ -2495,6 +2499,7 @@ int Effect_setEnabled(EffectContext *pContext, bool enabled)
                pContext->pBundledContext->SamplesToExitCountVirt =
                     (LVM_INT32)(pContext->pBundledContext->SamplesPerSecond*0.1);
                pContext->pBundledContext->bVirtualizerEnabled = LVM_TRUE;
                tempDisabled = pContext->pBundledContext->bVirtualizerTempDisabled;
                break;
            case LVM_VOLUME:
                if (pContext->pBundledContext->bVolumeEnabled == LVM_TRUE) {
@@ -2508,7 +2513,9 @@ int Effect_setEnabled(EffectContext *pContext, bool enabled)
                LOGV("\tEffect_setEnabled() invalid effect type");
                return -EINVAL;
        }
        if (!tempDisabled) {
            LvmEffect_enable(pContext);
        }
    } else {
        switch (pContext->EffectType) {
            case LVM_BASS_BOOST:
@@ -3048,7 +3055,8 @@ int Effect_command(effect_handle_t self,
            uint32_t device = *(uint32_t *)pCmdData;

            if (pContext->EffectType == LVM_BASS_BOOST) {
                if((device == AUDIO_DEVICE_OUT_SPEAKER)||(device == AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT)||
                if((device == AUDIO_DEVICE_OUT_SPEAKER) ||
                        (device == AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT) ||
                        (device == AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER)){
                    LOGV("\tEFFECT_CMD_SET_DEVICE device is invalid for LVM_BASS_BOOST %d",
                          *(int32_t *)pCmdData);
@@ -3062,8 +3070,8 @@ int Effect_command(effect_handle_t self,
                        LOGV("\tEFFECT_CMD_SET_DEVICE disable LVM_BASS_BOOST %d",
                             *(int32_t *)pCmdData);
                        android::LvmEffect_disable(pContext);
                        pContext->pBundledContext->bBassTempDisabled = LVM_TRUE;
                    }
                    pContext->pBundledContext->bBassTempDisabled = LVM_TRUE;
                } else {
                    LOGV("\tEFFECT_CMD_SET_DEVICE device is valid for LVM_BASS_BOOST %d",
                         *(int32_t *)pCmdData);
@@ -3071,16 +3079,17 @@ int Effect_command(effect_handle_t self,
                    // If a device supports bassboost and the effect has been temporarily disabled
                    // previously then re-enable it

                    if(pContext->pBundledContext->bBassTempDisabled == LVM_TRUE){
                    if (pContext->pBundledContext->bBassEnabled == LVM_TRUE) {
                        LOGV("\tEFFECT_CMD_SET_DEVICE re-enable LVM_BASS_BOOST %d",
                             *(int32_t *)pCmdData);
                        android::LvmEffect_enable(pContext);
                        pContext->pBundledContext->bBassTempDisabled = LVM_FALSE;
                    }
                    pContext->pBundledContext->bBassTempDisabled = LVM_FALSE;
                }
            }
            if (pContext->EffectType == LVM_VIRTUALIZER) {
                if((device == AUDIO_DEVICE_OUT_SPEAKER)||(device == AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT)||
                if((device == AUDIO_DEVICE_OUT_SPEAKER)||
                        (device == AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT)||
                        (device == AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER)){
                    LOGV("\tEFFECT_CMD_SET_DEVICE device is invalid for LVM_VIRTUALIZER %d",
                          *(int32_t *)pCmdData);
@@ -3094,8 +3103,8 @@ int Effect_command(effect_handle_t self,
                        LOGV("\tEFFECT_CMD_SET_DEVICE disable LVM_VIRTUALIZER %d",
                              *(int32_t *)pCmdData);
                        android::LvmEffect_disable(pContext);
                        pContext->pBundledContext->bVirtualizerTempDisabled = LVM_TRUE;
                    }
                    pContext->pBundledContext->bVirtualizerTempDisabled = LVM_TRUE;
                } else {
                    LOGV("\tEFFECT_CMD_SET_DEVICE device is valid for LVM_VIRTUALIZER %d",
                          *(int32_t *)pCmdData);
@@ -3103,12 +3112,12 @@ int Effect_command(effect_handle_t self,
                    // If a device supports virtualizer and the effect has been temporarily disabled
                    // previously then re-enable it

                    if(pContext->pBundledContext->bVirtualizerTempDisabled == LVM_TRUE){
                    if(pContext->pBundledContext->bVirtualizerEnabled == LVM_TRUE){
                        LOGV("\tEFFECT_CMD_SET_DEVICE re-enable LVM_VIRTUALIZER %d",
                              *(int32_t *)pCmdData);
                        android::LvmEffect_enable(pContext);
                        pContext->pBundledContext->bVirtualizerTempDisabled = LVM_FALSE;
                    }
                    pContext->pBundledContext->bVirtualizerTempDisabled = LVM_FALSE;
                }
            }
            LOGV("\tEffect_command cmdCode Case: EFFECT_CMD_SET_DEVICE end");