Merge "hal: Support for FLAC 24 bit format in offload path"
diff --git a/post_proc/bass_boost.c b/post_proc/bass_boost.c
index 1c96280..e2c6d9a 100644
--- a/post_proc/bass_boost.c
+++ b/post_proc/bass_boost.c
@@ -158,24 +158,27 @@
(device == AUDIO_DEVICE_OUT_AUX_DIGITAL) ||
(device == AUDIO_DEVICE_OUT_USB_ACCESSORY) ||
(device == AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET)) {
- if (offload_bassboost_get_enable_flag(&(bass_ctxt->offload_bass))) {
- offload_bassboost_set_enable_flag(&(bass_ctxt->offload_bass), false);
+ if (!bass_ctxt->temp_disabled) {
+ if (effect_is_active(&bass_ctxt->common)) {
+ offload_bassboost_set_enable_flag(&(bass_ctxt->offload_bass), false);
+ if (bass_ctxt->ctl)
+ offload_bassboost_send_params(bass_ctxt->ctl,
+ bass_ctxt->offload_bass,
+ OFFLOAD_SEND_BASSBOOST_ENABLE_FLAG);
+ }
bass_ctxt->temp_disabled = true;
- if (bass_ctxt->ctl)
- offload_bassboost_send_params(bass_ctxt->ctl,
- bass_ctxt->offload_bass,
- OFFLOAD_SEND_BASSBOOST_ENABLE_FLAG);
- ALOGI("%s: ctxt %p, disabled based on device", __func__, bass_ctxt);
}
+ ALOGI("%s: ctxt %p, disabled based on device", __func__, bass_ctxt);
} else {
- if (!offload_bassboost_get_enable_flag(&(bass_ctxt->offload_bass)) &&
- bass_ctxt->temp_disabled) {
- offload_bassboost_set_enable_flag(&(bass_ctxt->offload_bass), true);
+ if (bass_ctxt->temp_disabled) {
+ if (effect_is_active(&bass_ctxt->common)) {
+ offload_bassboost_set_enable_flag(&(bass_ctxt->offload_bass), true);
+ if (bass_ctxt->ctl)
+ offload_bassboost_send_params(bass_ctxt->ctl,
+ bass_ctxt->offload_bass,
+ OFFLOAD_SEND_BASSBOOST_ENABLE_FLAG);
+ }
bass_ctxt->temp_disabled = false;
- if (bass_ctxt->ctl)
- offload_bassboost_send_params(bass_ctxt->ctl,
- bass_ctxt->offload_bass,
- OFFLOAD_SEND_BASSBOOST_ENABLE_FLAG);
}
}
offload_bassboost_set_device(&(bass_ctxt->offload_bass), device);
diff --git a/post_proc/bundle.c b/post_proc/bundle.c
index a0d9fcb..0db2e37 100644
--- a/post_proc/bundle.c
+++ b/post_proc/bundle.c
@@ -186,6 +186,7 @@
int ret = 0;
struct listnode *node;
char mixer_string[128];
+ output_context_t * out_ctxt = NULL;
ALOGV("%s output %d pcm_id %d", __func__, output, pcm_id);
@@ -199,7 +200,7 @@
goto exit;
}
- output_context_t *out_ctxt = (output_context_t *)
+ out_ctxt = (output_context_t *)
malloc(sizeof(output_context_t));
if (!out_ctxt) {
ALOGE("%s fail to allocate for output context", __func__);
@@ -217,6 +218,7 @@
ALOGE("Failed to open mixer");
out_ctxt->ctl = NULL;
ret = -EINVAL;
+ free(out_ctxt);
goto exit;
} else {
out_ctxt->ctl = mixer_get_ctl_by_name(out_ctxt->mixer, mixer_string);
@@ -225,6 +227,7 @@
mixer_close(out_ctxt->mixer);
out_ctxt->mixer = NULL;
ret = -EINVAL;
+ free(out_ctxt);
goto exit;
}
}
@@ -535,12 +538,12 @@
pthread_mutex_lock(&lock);
if (!effect_exists(context)) {
- status = -EINVAL;
+ status = -ENOSYS;
goto exit;
}
if (context->state != EFFECT_STATE_ACTIVE) {
- status = -EINVAL;
+ status = -ENODATA;
goto exit;
}
@@ -560,13 +563,13 @@
pthread_mutex_lock(&lock);
if (!effect_exists(context)) {
- status = -EINVAL;
+ status = -ENOSYS;
goto exit;
}
ALOGV("%s: ctxt %p, cmd %d", __func__, context, cmdCode);
if (context == NULL || context->state == EFFECT_STATE_UNINITIALIZED) {
- status = -EINVAL;
+ status = -ENOSYS;
goto exit;
}
@@ -752,6 +755,9 @@
return 0;
}
+bool effect_is_active(effect_context_t * ctxt) {
+ return ctxt->state == EFFECT_STATE_ACTIVE;
+}
/* effect_handle_t interface implementation for offload effects */
const struct effect_interface_s effect_interface = {
diff --git a/post_proc/bundle.h b/post_proc/bundle.h
index 7ebea92..cbe7dba 100644
--- a/post_proc/bundle.h
+++ b/post_proc/bundle.h
@@ -87,4 +87,6 @@
int set_config(effect_context_t *context, effect_config_t *config);
+bool effect_is_active(effect_context_t *context);
+
#endif /* OFFLOAD_EFFECT_BUNDLE_H */
diff --git a/post_proc/reverb.c b/post_proc/reverb.c
index 81bcb97..77ae303 100644
--- a/post_proc/reverb.c
+++ b/post_proc/reverb.c
@@ -229,7 +229,7 @@
void reverb_set_density(reverb_context_t *context, int16_t density)
{
- ALOGV("%s: ctxt %p, density: %d", __func__, density, density);
+ ALOGV("%s: ctxt %p, density: %d", __func__, context, density);
context->reverb_settings.density = density;
offload_reverb_set_density(&(context->offload_reverb), density);
if (context->ctl)
diff --git a/post_proc/virtualizer.c b/post_proc/virtualizer.c
index 96828a0..9ed1ac5 100644
--- a/post_proc/virtualizer.c
+++ b/post_proc/virtualizer.c
@@ -157,24 +157,27 @@
(device == AUDIO_DEVICE_OUT_AUX_DIGITAL) ||
(device == AUDIO_DEVICE_OUT_USB_ACCESSORY) ||
(device == AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET)) {
- if (offload_virtualizer_get_enable_flag(&(virt_ctxt->offload_virt))) {
- offload_virtualizer_set_enable_flag(&(virt_ctxt->offload_virt), false);
+ if (!virt_ctxt->temp_disabled) {
+ if (effect_is_active(&virt_ctxt->common)) {
+ offload_virtualizer_set_enable_flag(&(virt_ctxt->offload_virt), false);
+ if (virt_ctxt->ctl)
+ offload_virtualizer_send_params(virt_ctxt->ctl,
+ virt_ctxt->offload_virt,
+ OFFLOAD_SEND_VIRTUALIZER_ENABLE_FLAG);
+ }
virt_ctxt->temp_disabled = true;
- if (virt_ctxt->ctl)
- offload_virtualizer_send_params(virt_ctxt->ctl,
- virt_ctxt->offload_virt,
- OFFLOAD_SEND_VIRTUALIZER_ENABLE_FLAG);
ALOGI("%s: ctxt %p, disabled based on device", __func__, virt_ctxt);
}
} else {
- if (!offload_virtualizer_get_enable_flag(&(virt_ctxt->offload_virt)) &&
- virt_ctxt->temp_disabled) {
- offload_virtualizer_set_enable_flag(&(virt_ctxt->offload_virt), true);
+ if (virt_ctxt->temp_disabled) {
+ if (effect_is_active(&virt_ctxt->common)) {
+ offload_virtualizer_set_enable_flag(&(virt_ctxt->offload_virt), true);
+ if (virt_ctxt->ctl)
+ offload_virtualizer_send_params(virt_ctxt->ctl,
+ virt_ctxt->offload_virt,
+ OFFLOAD_SEND_VIRTUALIZER_ENABLE_FLAG);
+ }
virt_ctxt->temp_disabled = false;
- if (virt_ctxt->ctl)
- offload_virtualizer_send_params(virt_ctxt->ctl,
- virt_ctxt->offload_virt,
- OFFLOAD_SEND_VIRTUALIZER_ENABLE_FLAG);
}
}
offload_virtualizer_set_device(&(virt_ctxt->offload_virt), device);
@@ -212,6 +215,7 @@
set_config(context, &context->config);
+ virt_ctxt->temp_disabled = false;
memset(&(virt_ctxt->offload_virt), 0, sizeof(struct virtualizer_params));
return 0;