summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDhananjay Kumar <dhakumar@codeaurora.org>2015-12-15 10:51:10 +0530
committerSteve Kondik <steve@cyngn.com>2016-04-19 02:32:50 -0700
commit948d7df8dad2b5f54ba8bdb1ba492a22434f15c7 (patch)
tree39404bd14736aceb079b124c4f4583731444e966
parent9828fdc5c7183c627eccd752c731541d61311ea4 (diff)
downloadandroid_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.c16
-rw-r--r--post_proc/virtualizer.h1
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;