Merge "hal: Add support for voice call over USB Headset"
diff --git a/hal/Android.mk b/hal/Android.mk
index 9d78ddc..38873cf 100644
--- a/hal/Android.mk
+++ b/hal/Android.mk
@@ -160,6 +160,10 @@
LOCAL_CFLAGS += -DQTI_FLAC_DECODER
endif
+ifeq ($(strip $(AUDIO_FEATURE_ENABLED_PCM_OFFLOAD_24)),true)
+ LOCAL_CFLAGS += -DPCM_OFFLOAD_ENABLED_24
+endif
+
ifeq ($(strip $(AUDIO_FEATURE_ENABLED_DEV_ARBI)),true)
LOCAL_CFLAGS += -DDEV_ARBI_ENABLED
LOCAL_SRC_FILES += audio_extn/dev_arbi.c
diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h
index 7bfa607..643c593 100644
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -75,9 +75,12 @@
#define AUDIO_OFFLOAD_CODEC_FLAC_MAX_BLK_SIZE "music_offload_flac_max_blk_size"
#define AUDIO_OFFLOAD_CODEC_FLAC_MIN_FRAME_SIZE "music_offload_flac_min_frame_size"
#define AUDIO_OFFLOAD_CODEC_FLAC_MAX_FRAME_SIZE "music_offload_flac_max_frame_size"
-#define PCM_OUTPUT_BIT_WIDTH (CODEC_BACKEND_DEFAULT_BIT_WIDTH)
-#else
+#endif
+
+#ifdef PCM_OFFLOAD_ENABLED_24
#define PCM_OUTPUT_BIT_WIDTH (config->offload_info.bit_width)
+#else
+#define PCM_OUTPUT_BIT_WIDTH (CODEC_BACKEND_DEFAULT_BIT_WIDTH)
#endif
#define MAX_LENGTH_MIXER_CONTROL_IN_INT (128)
diff --git a/hal/voice.c b/hal/voice.c
index 5fb0956..5bc0a4e 100644
--- a/hal/voice.c
+++ b/hal/voice.c
@@ -331,15 +331,21 @@
case SND_DEVICE_IN_VOICE_DMIC:
case SND_DEVICE_IN_AANC_HANDSET_MIC:
incall_record_device = SND_DEVICE_IN_HANDSET_MIC;
+ break;
case SND_DEVICE_IN_VOICE_SPEAKER_MIC:
case SND_DEVICE_IN_VOICE_SPEAKER_DMIC:
case SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BROADSIDE:
case SND_DEVICE_IN_VOICE_SPEAKER_QMIC:
incall_record_device = SND_DEVICE_IN_VOICE_SPEAKER_MIC;
+ break;
default:
incall_record_device = in_snd_device;
}
+ ALOGD("%s: in_snd_device(%d: %s) incall_record_device(%d: %s)", __func__,
+ in_snd_device, platform_get_snd_device_name(in_snd_device),
+ incall_record_device, platform_get_snd_device_name(incall_record_device));
+
return incall_record_device;
}
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;
}