audio: Add support for DSDS for incall music feature
Add support for incall-music-uplink2 usecase to enable Dual Sim
Dual Standby (DSDS) voice scenarios
Change-Id: I66947e2b505be170492d5265e91ad9cf557627cf
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 7add4fd..6611b47 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -2944,7 +2944,8 @@
adev->offload_effects_stop_output(out->handle, out->pcm_device_id);
}
- if (out->usecase == USECASE_INCALL_MUSIC_UPLINK)
+ if (out->usecase == USECASE_INCALL_MUSIC_UPLINK ||
+ out->usecase == USECASE_INCALL_MUSIC_UPLINK2)
voice_set_device_mute_flag(adev, false);
/* 1. Get and set stream specific mixer controls */
@@ -3022,6 +3023,16 @@
goto error_config;
}
+ //Update incall music usecase to reflect correct voice session
+ if (out->flags & AUDIO_OUTPUT_FLAG_INCALL_MUSIC) {
+ ret = voice_extn_check_and_set_incall_music_usecase(adev, out);
+ if (ret != 0) {
+ ALOGE("%s: Incall music delivery usecase cannot be set error:%d",
+ __func__, ret);
+ goto error_config;
+ }
+ }
+
if (out->devices & AUDIO_DEVICE_OUT_ALL_A2DP) {
if (!audio_extn_a2dp_is_ready()) {
if (out->devices & AUDIO_DEVICE_OUT_SPEAKER) {
@@ -3106,7 +3117,8 @@
select_devices(adev, out->usecase);
}
- if (out->usecase == USECASE_INCALL_MUSIC_UPLINK)
+ if (out->usecase == USECASE_INCALL_MUSIC_UPLINK ||
+ out->usecase == USECASE_INCALL_MUSIC_UPLINK2)
voice_set_device_mute_flag(adev, true);
ALOGV("%s: Opening PCM device card_id(%d) device_id(%d) format(%#x)",
@@ -4660,7 +4672,8 @@
ALOGV("%s: frames=%zu, frame_size=%zu, bytes_to_write=%zu",
__func__, frames, frame_size, bytes_to_write);
- if (out->usecase == USECASE_INCALL_MUSIC_UPLINK) {
+ if (out->usecase == USECASE_INCALL_MUSIC_UPLINK ||
+ out->usecase == USECASE_INCALL_MUSIC_UPLINK2) {
size_t channel_count = audio_channel_count_from_out_mask(out->channel_mask);
int16_t *src = (int16_t *)buffer;
int16_t *dst = (int16_t *)buffer;
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 3dbf274..4de6206 100755
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -945,6 +945,7 @@
{TO_NAME_INDEX(USECASE_AUDIO_RECORD_AFE_PROXY)},
{TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_SILENCE)},
{TO_NAME_INDEX(USECASE_INCALL_MUSIC_UPLINK)},
+ {TO_NAME_INDEX(USECASE_INCALL_MUSIC_UPLINK2)},
{TO_NAME_INDEX(USECASE_AUDIO_A2DP_ABR_FEEDBACK)},
{TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_VOIP)},
{TO_NAME_INDEX(USECASE_AUDIO_RECORD_VOIP)},
diff --git a/hal/msm8974/platform.h b/hal/msm8974/platform.h
index 28a3248..fac27d8 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -367,6 +367,8 @@
#define INCALL_MUSIC_UPLINK2_PCM_DEVICE 16
#elif PLATFORM_APQ8084
#define INCALL_MUSIC_UPLINK2_PCM_DEVICE 34
+#elif PLATFORM_MSMNILE
+#define INCALL_MUSIC_UPLINK2_PCM_DEVICE 27
#else
#define INCALL_MUSIC_UPLINK2_PCM_DEVICE 35
#endif
diff --git a/hal/voice_extn/voice_extn.c b/hal/voice_extn/voice_extn.c
index ec85259..1610319 100644
--- a/hal/voice_extn/voice_extn.c
+++ b/hal/voice_extn/voice_extn.c
@@ -597,7 +597,17 @@
int voice_extn_check_and_set_incall_music_usecase(struct audio_device *adev,
struct stream_out *out)
{
- out->usecase = USECASE_INCALL_MUSIC_UPLINK;
+ uint32_t session_id = session_id = get_session_id_with_state(adev,
+ CALL_ACTIVE);
+ if (session_id == VOICEMMODE1_VSID)
+ out->usecase = USECASE_INCALL_MUSIC_UPLINK;
+ else if (session_id == VOICEMMODE2_VSID)
+ out->usecase = USECASE_INCALL_MUSIC_UPLINK2;
+ else {
+ ALOGE("%s: Invalid session id %x", __func__, session_id);
+ out->usecase = USECASE_INCALL_MUSIC_UPLINK;
+ }
+
out->config = pcm_config_incall_music;
//FIXME: add support for MONO stream configuration when audioflinger mixer supports it
out->supported_channel_masks[0] = AUDIO_CHANNEL_OUT_STEREO;