audio: add separate audio Input path feature
- Separate audio input path can be set using input source of audio parameter
1. Voice Recognition
2. Camcording
3. etc.
Change-Id: I7ab3b529a8d39af412d10d2d7ab4ce111db967bb
diff --git a/alsa_sound/ALSAStreamOps.cpp b/alsa_sound/ALSAStreamOps.cpp
index 88d2db4..4c4a062 100644
--- a/alsa_sound/ALSAStreamOps.cpp
+++ b/alsa_sound/ALSAStreamOps.cpp
@@ -192,6 +192,18 @@
AudioParameter param = AudioParameter(keyValuePairs);
String8 key = String8(AudioParameter::keyRouting);
int device;
+
+#ifdef SEPERATED_AUDIO_INPUT
+ String8 key_input = String8(AudioParameter::keyInputSource);
+ int source;
+
+ if (param.getInt(key_input, source) == NO_ERROR) {
+ ALOGD("setParameters(), input_source = %d", source);
+ mParent->mALSADevice->setInput(source);
+ param.remove(key_input);
+ }
+#endif
+
if (param.getInt(key, device) == NO_ERROR) {
// Ignore routing if device is 0.
ALOGD("setParameters(): keyRouting with device %d", device);
diff --git a/alsa_sound/Android.mk b/alsa_sound/Android.mk
index dcf51c9..7cd63e6 100644
--- a/alsa_sound/Android.mk
+++ b/alsa_sound/Android.mk
@@ -17,6 +17,10 @@
LOCAL_CFLAGS += -DUSES_FLUENCE_INCALL
endif
+ifeq ($(strip $(BOARD_USES_SEPERATED_AUDIO_INPUT)),true)
+LOCAL_CFLAGS += -DSEPERATED_AUDIO_INPUT
+endif
+
LOCAL_SRC_FILES := \
AudioHardwareALSA.cpp \
AudioStreamOutALSA.cpp \
@@ -116,6 +120,10 @@
LOCAL_CFLAGS += -DUSES_FLUENCE_INCALL
endif
+ifeq ($(strip $(BOARD_USES_SEPERATED_AUDIO_INPUT)),true)
+LOCAL_CFLAGS += -DSEPERATED_AUDIO_INPUT
+endif
+
ifneq ($(ALSA_DEFAULT_SAMPLE_RATE),)
LOCAL_CFLAGS += -DALSA_DEFAULT_SAMPLE_RATE=$(ALSA_DEFAULT_SAMPLE_RATE)
endif
diff --git a/alsa_sound/AudioHardwareALSA.h b/alsa_sound/AudioHardwareALSA.h
index 0dcc672..04eea77 100644
--- a/alsa_sound/AudioHardwareALSA.h
+++ b/alsa_sound/AudioHardwareALSA.h
@@ -203,6 +203,9 @@
void (*setVocRecMode)(uint8_t);
void (*setVoLTEMicMute)(int);
void (*setVoLTEVolume)(int);
+#ifdef SEPERATED_AUDIO_INPUT
+ void (*setInput)(int);
+#endif
};
// ----------------------------------------------------------------------------
diff --git a/alsa_sound/alsa_default.cpp b/alsa_sound/alsa_default.cpp
index 6c329e8..d589f5c 100644
--- a/alsa_sound/alsa_default.cpp
+++ b/alsa_sound/alsa_default.cpp
@@ -67,6 +67,11 @@
static void s_set_voc_rec_mode(uint8_t mode);
static void s_set_volte_mic_mute(int state);
static void s_set_volte_volume(int vol);
+#ifdef SEPERATED_AUDIO_INPUT
+static void s_setInput(int);
+
+static int input_source;
+#endif
static char mic_type[25];
static char curRxUCMDevice[50];
@@ -137,6 +142,9 @@
dev->setVocRecMode = s_set_voc_rec_mode;
dev->setVoLTEMicMute = s_set_volte_mic_mute;
dev->setVoLTEVolume = s_set_volte_volume;
+#ifdef SEPERATED_AUDIO_INPUT
+ dev->setInput = s_setInput;
+#endif
*device = &dev->common;
@@ -1383,8 +1391,17 @@
return strdup(SND_USE_CASE_DEV_SSR_QUAD_MIC); /* SSR Quad MIC */
}
#endif
+#ifdef SEPERATED_AUDIO_INPUT
+ if(input_source == AUDIO_SOURCE_VOICE_RECOGNITION) {
+ ALOGV("getUCMdevice returned the VOICE_RECOGNITION UCM by input source = %d", input_source);
+ return strdup(SND_USE_CASE_DEV_VOICE_RECOGNITION ); /* VOICE RECOGNITION TX */
+ } else if(input_source == AUDIO_SOURCE_CAMCORDER) {
+ ALOGV("getUCMdevice returned the Camcorder Tx UCM by input source = %d", input_source);
+ return strdup(SND_USE_CASE_DEV_CAMCORDER_TX ); /* CAMCORDER TX */
+ }
+#endif
else {
- return strdup(SND_USE_CASE_DEV_LINE); /* BUILTIN-MIC TX */
+ return strdup(SND_USE_CASE_DEV_HANDSET); /* BUILTIN-MIC TX */
}
}
} else if (devices & AudioSystem::DEVICE_IN_AUX_DIGITAL) {
@@ -1644,4 +1661,11 @@
return err;
}
+#ifdef SEPERATED_AUDIO_INPUT
+void s_setInput(int input)
+{
+ input_source = input;
+ ALOGD("s_setInput() : input_source = %d",input_source);
+}
+#endif
}
diff --git a/libalsa-intf/msm8960_use_cases.h b/libalsa-intf/msm8960_use_cases.h
index 7e61232..44d6533 100644
--- a/libalsa-intf/msm8960_use_cases.h
+++ b/libalsa-intf/msm8960_use_cases.h
@@ -61,11 +61,11 @@
#define DEVICE_BT_SCO_TX_WB_ACDB_ID 38// BT_SCO_WB_MIC
#define DEVICE_SPEAKER_HEADSET_RX_ACDB_ID DEVICE_HEADSET_RX_ACDB_ID // Use headset calibration
#define DEVICE_HDMI_STEREO_RX_ACDB_ID 18// HDMI_SPKR
-#define DEVICE_ANC_HEADSET_STEREO_RX_ACDB_ID 26//ANC RX, same as regular headset
+#define DEVICE_ANC_HEADSET_STEREO_RX_ACDB_ID 26// ANC RX, same as regular headset
#define DEVICE_QUADMIC_ACDB_ID 19// QUADMIC_SKPR
-#define DEVICE_PROXY_RX_ACDB_ID DEVICE_HDMI_STEREO_RX_ACDB_ID
-#define DEVICE_TTY_VCO_HANDSET_TX_ACDB_ID 36 //TTY_VCO_HANDSET_MIC
-#define DEVICE_TTY_HCO_HANDSET_RX_ACDB_ID 37 //TTY_HCO_HANDSET_SPRK
+#define DEVICE_PROXY_RX_ACDB_ID DEVICE_HDMI_STEREO_RX_ACDB_ID
+#define DEVICE_TTY_VCO_HANDSET_TX_ACDB_ID 36// TTY_VCO_HANDSET_MIC
+#define DEVICE_TTY_HCO_HANDSET_RX_ACDB_ID 37// TTY_HCO_HANDSET_SPRK
#define DEVICE_HANDSET_TX_FV5_ACDB_ID 40
#define DEVICE_DUALMIC_HANDSET_TX_ENDFIRE_FV5_ACDB_ID 41
#define DEVICE_SPEAKER_TX_FV5_ACDB_ID 42
@@ -73,6 +73,8 @@
#define DEVICE_INCALL_VOICE_RECORD_STEREO_ACDB_ID 45
#define DEVICE_INCALL_MUSIC_DELIVERY_MONO_ACDB_ID 46
#define DEVICE_INCALL_VOICE_RECORD_MONO_ACDB_ID 47
+#define DEVICE_CAMCORDER_TX_ACDB_ID 61// CAMCORDER_TX
+#define DEVICE_VOICE_RECOGNITION_ACDB_ID 62// VOICE_RECOGNITION
/* mixer control type */
#define TYPE_INT 0
@@ -244,6 +246,8 @@
#define SND_USE_CASE_DEV_PROXY_RX_ANC_HEADSET "PROXY Rx ANC Headset"
#define SND_USE_CASE_DEV_PROXY_RX_SPEAKER_HEADSET "PROXY Rx Speaker Headset"
#define SND_USE_CASE_DEV_PROXY_RX_SPEAKER_ANC_HEADSET "PROXY Rx Speaker ANC Headset"
+#define SND_USE_CASE_DEV_CAMCORDER_TX "Camcorder Tx"
+#define SND_USE_CASE_DEV_VOICE_RECOGNITION "Voice Recognition"
#define SND_USE_CASE_MOD_PLAY_FM "Play FM"
#define SND_USE_CASE_MOD_CAPTURE_FM "Capture FM"