Merge "visualizer: do not apply calibration on audio routed to afe proxy"
diff --git a/visualizer/Android.mk b/visualizer/Android.mk
index 393eec3..87d4987 100644
--- a/visualizer/Android.mk
+++ b/visualizer/Android.mk
@@ -24,6 +24,7 @@
 LOCAL_SHARED_LIBRARIES := \
 	libcutils \
 	liblog \
+	libdl \
 	libtinyalsa
 
 LOCAL_MODULE_RELATIVE_PATH := soundfx
diff --git a/visualizer/offload_visualizer.c b/visualizer/offload_visualizer.c
index 94c44a5..d363b77 100644
--- a/visualizer/offload_visualizer.c
+++ b/visualizer/offload_visualizer.c
@@ -22,6 +22,7 @@
 #include <string.h>
 #include <time.h>
 #include <sys/prctl.h>
+#include <dlfcn.h>
 
 #include <cutils/list.h>
 #include <cutils/log.h>
@@ -29,6 +30,15 @@
 #include <tinyalsa/asoundlib.h>
 #include <audio_effects/effect_visualizer.h>
 
+#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 @@
     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 @@
 
     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;
 }