From 518bcbb6ab445e45806e74af43cde0518e98f5e2 Mon Sep 17 00:00:00 2001 From: Ravi Kumar Alamanda Date: Fri, 14 Nov 2014 16:51:10 -0800 Subject: visualizer: do not apply calibration on audio routed to afe proxy When compress offload playback is active, if the Visualizer effect is enabled, decoded PCM audio is routed to AFE Proxy port and read from it by the Visualizer wrapper library. When audio is routed to proxy port, current output device specific calibration is also being applied which is not desired. Avoid this by sending default audio calibration i.e. no post-processing to be applied the data. Change-Id: Id576c4ed7bbb482683074e3e33aa5760b7597d37 --- visualizer/offload_visualizer.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'visualizer/offload_visualizer.c') diff --git a/visualizer/offload_visualizer.c b/visualizer/offload_visualizer.c index 94c44a59..d363b778 100644 --- a/visualizer/offload_visualizer.c +++ b/visualizer/offload_visualizer.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -29,6 +30,15 @@ #include #include +#define LIB_ACDB_LOADER "libacdbloader.so" +#define ACDB_DEV_TYPE_OUT 1 +#define AFE_PROXY_ACDB_ID 45 + +static void* acdb_handle; + +typedef void (*acdb_send_audio_cal_t)(int, int); + +acdb_send_audio_cal_t acdb_send_audio_cal; enum { EFFECT_STATE_UNINITIALIZED, @@ -294,6 +304,9 @@ int configure_proxy_capture(struct mixer *mixer, int value) { const char *proxy_ctl_name = "AFE_PCM_RX Audio Mixer MultiMedia4"; struct mixer_ctl *ctl; + if (value && acdb_send_audio_cal) + acdb_send_audio_cal(AFE_PROXY_ACDB_ID, ACDB_DEV_TYPE_OUT); + ctl = mixer_get_ctl_by_name(mixer, proxy_ctl_name); if (ctl == NULL) { ALOGW("%s: could not get %s ctl", __func__, proxy_ctl_name); @@ -614,6 +627,19 @@ int visualizer_init(effect_context_t *context) set_config(context, &context->config); + if (acdb_handle == NULL) { + acdb_handle = dlopen(LIB_ACDB_LOADER, RTLD_NOW); + if (acdb_handle == NULL) { + ALOGE("%s: DLOPEN failed for %s", __func__, LIB_ACDB_LOADER); + } else { + acdb_send_audio_cal = (acdb_send_audio_cal_t)dlsym(acdb_handle, + "acdb_loader_send_audio_cal"); + if (!acdb_send_audio_cal) + ALOGE("%s: Could not find the symbol acdb_send_audio_cal from %s", + __func__, LIB_ACDB_LOADER); + } + } + return 0; } -- cgit v1.2.3