diff options
author | Dhananjay Kumar <dhakumar@codeaurora.org> | 2015-12-15 10:51:10 +0530 |
---|---|---|
committer | Steve Kondik <steve@cyngn.com> | 2016-04-19 02:32:50 -0700 |
commit | 948d7df8dad2b5f54ba8bdb1ba492a22434f15c7 (patch) | |
tree | 39404bd14736aceb079b124c4f4583731444e966 | |
parent | 9828fdc5c7183c627eccd752c731541d61311ea4 (diff) | |
download | android_hardware_qcom_audio-948d7df8dad2b5f54ba8bdb1ba492a22434f15c7.tar.gz android_hardware_qcom_audio-948d7df8dad2b5f54ba8bdb1ba492a22434f15c7.tar.bz2 android_hardware_qcom_audio-948d7df8dad2b5f54ba8bdb1ba492a22434f15c7.zip |
post_proc: fix inconsistency in virtualizer state from set_strength call
- Virtualizer is getting applied just by setting strength even though
it was kept disabled by client.
- Enable/disable from strength context is not able to track state set by
client, since internal state may not be same as one set by client.
- Add a separate variable to track state set by client which would help
avoid going into any such inconsistent state.
Change-Id: I4985b2d12dc0ee3f62089423e3a71d530f66027c
-rw-r--r-- | post_proc/virtualizer.c | 16 | ||||
-rw-r--r-- | post_proc/virtualizer.h | 1 |
2 files changed, 11 insertions, 6 deletions
diff --git a/post_proc/virtualizer.c b/post_proc/virtualizer.c index 1ab59278..576d6cbf 100644 --- a/post_proc/virtualizer.c +++ b/post_proc/virtualizer.c @@ -61,7 +61,8 @@ int virtualizer_set_strength(virtualizer_context_t *context, uint32_t strength) * For better user experience, explicitly disable virtualizer module * when strength is 0. */ - offload_virtualizer_set_enable_flag(&(context->offload_virt), + if (context->enabled_by_client) + offload_virtualizer_set_enable_flag(&(context->offload_virt), ((strength > 0) && !(context->temp_disabled)) ? true : false); offload_virtualizer_set_strength(&(context->offload_virt), strength); @@ -133,8 +134,7 @@ int virtualizer_force_virtualization_mode(virtualizer_context_t *context, virtualizer_context_t *virt_ctxt = (virtualizer_context_t *)context; int status = 0; bool use_virt = false; - int is_virt_enabled = - offload_virtualizer_get_enable_flag(&(virt_ctxt->offload_virt)); + int is_virt_enabled = virt_ctxt->enabled_by_client; ALOGV("%s: ctxt %p, forcedDev=0x%x enabled=%d tmpDisabled=%d", __func__, virt_ctxt, forced_device, is_virt_enabled, virt_ctxt->temp_disabled); @@ -389,7 +389,7 @@ int virtualizer_set_device(effect_context_t *context, uint32_t device) // default case unless configuration is forced if (virtualizer_is_device_supported(device) == false) { if (!virt_ctxt->temp_disabled) { - if (effect_is_active(&virt_ctxt->common)) { + if (effect_is_active(&virt_ctxt->common) && virt_ctxt->enabled_by_client) { offload_virtualizer_set_enable_flag(&(virt_ctxt->offload_virt), false); if (virt_ctxt->ctl) offload_virtualizer_send_params(virt_ctxt->ctl, @@ -401,7 +401,7 @@ int virtualizer_set_device(effect_context_t *context, uint32_t device) } } else { if (virt_ctxt->temp_disabled) { - if (effect_is_active(&virt_ctxt->common)) { + if (effect_is_active(&virt_ctxt->common) && virt_ctxt->enabled_by_client) { offload_virtualizer_set_enable_flag(&(virt_ctxt->offload_virt), true); if (virt_ctxt->ctl) offload_virtualizer_send_params(virt_ctxt->ctl, @@ -449,6 +449,7 @@ int virtualizer_init(effect_context_t *context) set_config(context, &context->config); + virt_ctxt->enabled_by_client = false; virt_ctxt->temp_disabled = false; virt_ctxt->forced_device = AUDIO_DEVICE_NONE; virt_ctxt->device = AUDIO_DEVICE_NONE; @@ -463,6 +464,7 @@ int virtualizer_enable(effect_context_t *context) ALOGV("%s", __func__); + virt_ctxt->enabled_by_client = true; if (!offload_virtualizer_get_enable_flag(&(virt_ctxt->offload_virt)) && !(virt_ctxt->temp_disabled)) { offload_virtualizer_set_enable_flag(&(virt_ctxt->offload_virt), true); @@ -479,7 +481,9 @@ int virtualizer_disable(effect_context_t *context) { virtualizer_context_t *virt_ctxt = (virtualizer_context_t *)context; - ALOGV("%s", __func__); + ALOGV("%s: ctxt %p", __func__, virt_ctxt); + + virt_ctxt->enabled_by_client = false; if (offload_virtualizer_get_enable_flag(&(virt_ctxt->offload_virt))) { offload_virtualizer_set_enable_flag(&(virt_ctxt->offload_virt), false); if (virt_ctxt->ctl) diff --git a/post_proc/virtualizer.h b/post_proc/virtualizer.h index e7b9dd03..2ecc9697 100644 --- a/post_proc/virtualizer.h +++ b/post_proc/virtualizer.h @@ -30,6 +30,7 @@ typedef struct virtualizer_context_s { // Offload vars struct mixer_ctl *ctl; + bool enabled_by_client; bool temp_disabled; audio_devices_t forced_device; audio_devices_t device; |