Promotion of av-userspace.lnx.2.0-00016.
CRs Change ID Subject
--------------------------------------------------------------------------------------------------------------
1019857 I25fd84b12619bf89319d62257f1ab44567d5382a hal: Add missing PCM device IDs
1019158 I33f25bf7a48870fdd32dca04fa818294b90fd70f hal: config: cobalt: Add the support for USB audio via A
1004601 Ib3ae6a2534474247ed70589c43cb258d297c4440 hal: return with error code to avoid tearing down existi
1028631 I0d01ba4c3e492fa0b78c4f5122a7c0ac5e830e9d policy_hal : Ensure direct output is not selected again
997689 I32bb809ea037f7f180d613cacacc7e3b0210d91c hal: avoid resetting to speaker if HDMI is still connect
986087 I250c9555dff2c17f94b57a14a1722bae00fe9f9b audiopolicy: check active direct output before adding DI
1009298 I3d199a2810d34a693a099e3cf4b635d5b156a317 hal: retry failed MBDRC cal level
1015140 Ib4190622f7125d1a91f0121f0bf5836a48121c5b hal: Add param for max mic count
1015140 I44e0f2162bdadd8a35df7255992c5948d474a3ed hal: Add support for unprocessed audio source
1015140 Iffafe1769577e42973562d8f72157a756ee2adf7 audio: Add support for unprocessed audio source
1015140 I4c7229230b79830a66e25cc49d80f1e7090c0212 audio: Select device based on supported mic count
1028044 993811 Iaa73d2a56e47deabe9b0cb6cd26407bec17e1abb audio: Add support for CPE AFE MAD control
1015140 Ifa120b070f4a5218f4d5ee648284928aac0cf55a hal: Add support for 3 & 4 channel recording
Change-Id: I77e3ddca4d137999ba940756e8489faf8ec156d5
CRs-Fixed: 1009298, 1004601, 1019158, 1028044, 997689, 993811, 1019857, 986087, 1028631, 1015140
diff --git a/configs/msm8937/audio_platform_info_extcodec.xml b/configs/msm8937/audio_platform_info_extcodec.xml
index 556a490..1fceb8e 100644
--- a/configs/msm8937/audio_platform_info_extcodec.xml
+++ b/configs/msm8937/audio_platform_info_extcodec.xml
@@ -53,6 +53,7 @@
<param key="spkr_1_tz_name" value="wsatz.11"/>
<param key="spkr_2_tz_name" value="wsatz.12"/>
<param key="native_audio_mode" value="src"/>
+ <param key="input_mic_max_count" value="4"/>
</config_params>
<backend_names>
diff --git a/configs/msm8937/audio_policy.conf b/configs/msm8937/audio_policy.conf
index 3e59ba2..b7b858e 100644
--- a/configs/msm8937/audio_policy.conf
+++ b/configs/msm8937/audio_policy.conf
@@ -98,7 +98,7 @@
}
surround_sound {
sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000
- channel_masks AUDIO_CHANNEL_IN_MONO|AUDIO_CHANNEL_IN_STEREO|AUDIO_CHANNEL_IN_FRONT_BACK|AUDIO_CHANNEL_IN_5POINT1
+ channel_masks AUDIO_CHANNEL_IN_MONO|AUDIO_CHANNEL_IN_STEREO|AUDIO_CHANNEL_IN_FRONT_BACK|AUDIO_CHANNEL_INDEX_MASK_3|AUDIO_CHANNEL_INDEX_MASK_4|AUDIO_CHANNEL_IN_5POINT1
formats AUDIO_FORMAT_PCM_16_BIT
devices AUDIO_DEVICE_IN_BUILTIN_MIC|AUDIO_DEVICE_IN_BACK_MIC
}
diff --git a/configs/msm8937/audio_policy_configuration.xml b/configs/msm8937/audio_policy_configuration.xml
index d0c4cdd..238c49e 100644
--- a/configs/msm8937/audio_policy_configuration.xml
+++ b/configs/msm8937/audio_policy_configuration.xml
@@ -150,7 +150,7 @@
<mixPort name="surround_sound" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_IN_5POINT1"/>
+ channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3,AUDIO_CHANNEL_INDEX_MASK_4,AUDIO_CHANNEL_IN_5POINT1"/>
</mixPort>
<mixPort name="voice_rx" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
diff --git a/configs/msm8937/mixer_paths.xml b/configs/msm8937/mixer_paths.xml
index 520c72e..96f47d0 100644
--- a/configs/msm8937/mixer_paths.xml
+++ b/configs/msm8937/mixer_paths.xml
@@ -1100,6 +1100,14 @@
<path name="adc1" />
</path>
+ <path name="unprocessed-handset-mic">
+ <path name="handset-mic" />
+ </path>
+
+ <path name="unprocessed-mic">
+ <path name="unprocessed-handset-mic" />
+ </path>
+
<path name="ADSP testfwk">
<ctl name="MI2S_DL_HL Switch" value="1" />
</path>
diff --git a/configs/msm8937/mixer_paths_mtp.xml b/configs/msm8937/mixer_paths_mtp.xml
index b5b3996..5bf3053 100644
--- a/configs/msm8937/mixer_paths_mtp.xml
+++ b/configs/msm8937/mixer_paths_mtp.xml
@@ -1235,6 +1235,14 @@
<path name="adc1" />
</path>
+ <path name="unprocessed-handset-mic">
+ <path name="handset-mic" />
+ </path>
+
+ <path name="unprocessed-mic">
+ <path name="unprocessed-handset-mic" />
+ </path>
+
<path name="ADSP testfwk">
<ctl name="MI2S_DL_HL Switch" value="1" />
</path>
diff --git a/configs/msm8937/mixer_paths_wcd9335.xml b/configs/msm8937/mixer_paths_wcd9335.xml
index 2493f3f..e579d40 100644
--- a/configs/msm8937/mixer_paths_wcd9335.xml
+++ b/configs/msm8937/mixer_paths_wcd9335.xml
@@ -2404,6 +2404,14 @@
<ctl name="MAD Input" value="DMIC0" />
</path>
+ <path name="unprocessed-handset-mic">
+ <path name="handset-mic" />
+ </path>
+
+ <path name="unprocessed-mic">
+ <path name="unprocessed-handset-mic" />
+ </path>
+
<!-- Added for ADSP testfwk -->
<path name="ADSP testfwk">
<ctl name="SLIMBUS_DL_HL Switch" value="1" />
diff --git a/configs/msm8953/audio_platform_info_extcodec.xml b/configs/msm8953/audio_platform_info_extcodec.xml
index aedf64f..d06c6be 100644
--- a/configs/msm8953/audio_platform_info_extcodec.xml
+++ b/configs/msm8953/audio_platform_info_extcodec.xml
@@ -50,6 +50,7 @@
</pcm_ids>
<config_params>
<param key="native_audio_mode" value="src"/>
+ <param key="input_mic_max_count" value="4"/>
</config_params>
<backend_names>
<device name="SND_DEVICE_OUT_HEADPHONES" backend="headphones" interface="SLIMBUS_6_RX"/>
diff --git a/configs/msm8953/audio_policy.conf b/configs/msm8953/audio_policy.conf
index 3e59ba2..b7b858e 100644
--- a/configs/msm8953/audio_policy.conf
+++ b/configs/msm8953/audio_policy.conf
@@ -98,7 +98,7 @@
}
surround_sound {
sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000
- channel_masks AUDIO_CHANNEL_IN_MONO|AUDIO_CHANNEL_IN_STEREO|AUDIO_CHANNEL_IN_FRONT_BACK|AUDIO_CHANNEL_IN_5POINT1
+ channel_masks AUDIO_CHANNEL_IN_MONO|AUDIO_CHANNEL_IN_STEREO|AUDIO_CHANNEL_IN_FRONT_BACK|AUDIO_CHANNEL_INDEX_MASK_3|AUDIO_CHANNEL_INDEX_MASK_4|AUDIO_CHANNEL_IN_5POINT1
formats AUDIO_FORMAT_PCM_16_BIT
devices AUDIO_DEVICE_IN_BUILTIN_MIC|AUDIO_DEVICE_IN_BACK_MIC
}
diff --git a/configs/msm8953/audio_policy_configuration.xml b/configs/msm8953/audio_policy_configuration.xml
index d0c4cdd..238c49e 100644
--- a/configs/msm8953/audio_policy_configuration.xml
+++ b/configs/msm8953/audio_policy_configuration.xml
@@ -150,7 +150,7 @@
<mixPort name="surround_sound" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_IN_5POINT1"/>
+ channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3,AUDIO_CHANNEL_INDEX_MASK_4,AUDIO_CHANNEL_IN_5POINT1"/>
</mixPort>
<mixPort name="voice_rx" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
diff --git a/configs/msm8953/mixer_paths.xml b/configs/msm8953/mixer_paths.xml
index 459e88d..91544a1 100644
--- a/configs/msm8953/mixer_paths.xml
+++ b/configs/msm8953/mixer_paths.xml
@@ -1104,6 +1104,14 @@
<path name="adc1" />
</path>
+ <path name="unprocessed-handset-mic">
+ <path name="handset-mic" />
+ </path>
+
+ <path name="unprocessed-mic">
+ <path name="unprocessed-handset-mic" />
+ </path>
+
<path name="ADSP testfwk">
<ctl name="MI2S_DL_HL Switch" value="1" />
</path>
diff --git a/configs/msm8953/mixer_paths_mtp.xml b/configs/msm8953/mixer_paths_mtp.xml
index 4ac5ef7..42a9e68 100644
--- a/configs/msm8953/mixer_paths_mtp.xml
+++ b/configs/msm8953/mixer_paths_mtp.xml
@@ -1240,6 +1240,14 @@
<path name="adc1" />
</path>
+ <path name="unprocessed-handset-mic">
+ <path name="handset-mic" />
+ </path>
+
+ <path name="unprocessed-mic">
+ <path name="unprocessed-handset-mic" />
+ </path>
+
<path name="ADSP testfwk">
<ctl name="MI2S_DL_HL Switch" value="1" />
</path>
diff --git a/configs/msm8953/mixer_paths_wcd9335.xml b/configs/msm8953/mixer_paths_wcd9335.xml
index 3afe808..657198f 100644
--- a/configs/msm8953/mixer_paths_wcd9335.xml
+++ b/configs/msm8953/mixer_paths_wcd9335.xml
@@ -2415,6 +2415,14 @@
<ctl name="MAD Input" value="DMIC0" />
</path>
+ <path name="unprocessed-handset-mic">
+ <path name="handset-mic" />
+ </path>
+
+ <path name="unprocessed-mic">
+ <path name="unprocessed-handset-mic" />
+ </path>
+
<!-- Added for ADSP testfwk -->
<path name="ADSP testfwk">
<ctl name="SLIMBUS_DL_HL Switch" value="1" />
diff --git a/configs/msm8953/sound_trigger_mixer_paths_wcd9330.xml b/configs/msm8953/sound_trigger_mixer_paths_wcd9330.xml
index 5587e01..b64c4ca 100644
--- a/configs/msm8953/sound_trigger_mixer_paths_wcd9330.xml
+++ b/configs/msm8953/sound_trigger_mixer_paths_wcd9330.xml
@@ -40,6 +40,7 @@
<ctl name="SLIMBUS_5_TX LSM Function" value="None" />
<ctl name="MADONOFF Switch" value="0" />
<ctl name="MAD Input" value="DMIC1" />
+ <ctl name="CPE AFE MAD Enable" value="0"/>
<path name="listen-voice-wakeup-1">
<ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
@@ -78,6 +79,7 @@
<path name="listen-cpe-handset-mic">
<ctl name="MADONOFF Switch" value="1" />
<ctl name="MAD Input" value="DMIC1" />
+ <ctl name="CPE AFE MAD Enable" value="1"/>
</path>
<path name="listen-ape-handset-mic">
diff --git a/configs/msm8953/sound_trigger_mixer_paths_wcd9335.xml b/configs/msm8953/sound_trigger_mixer_paths_wcd9335.xml
index 19a282a..aaf2981 100644
--- a/configs/msm8953/sound_trigger_mixer_paths_wcd9335.xml
+++ b/configs/msm8953/sound_trigger_mixer_paths_wcd9335.xml
@@ -44,6 +44,7 @@
<ctl name="TX13 INP MUX" value="CDC_DEC_5" />
<ctl name="AIF4_MAD Mixer SLIM TX12" value="0" />
<ctl name="AIF4_MAD Mixer SLIM TX13" value="0" />
+ <ctl name="CPE AFE MAD Enable" value="0"/>
<path name="listen-voice-wakeup-1">
<ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
@@ -84,6 +85,7 @@
<ctl name="TX13 INP MUX" value="CPE_TX_PP" />
<ctl name="AIF4_MAD Mixer SLIM TX13" value="1" />
<ctl name="MAD Input" value="DMIC0" />
+ <ctl name="CPE AFE MAD Enable" value="1"/>
</path>
<!-- path name used for low bandwidth FTRT codec interface -->
@@ -91,6 +93,7 @@
<ctl name="MADONOFF Switch" value="1" />
<ctl name="AIF4_MAD Mixer SLIM TX12" value="1" />
<ctl name="MAD Input" value="DMIC0" />
+ <ctl name="CPE AFE MAD Enable" value="1"/>
</path>
<path name="listen-ape-handset-mic">
diff --git a/configs/msm8996/audio_platform_info.xml b/configs/msm8996/audio_platform_info.xml
index 5c19064..26bc0d7 100644
--- a/configs/msm8996/audio_platform_info.xml
+++ b/configs/msm8996/audio_platform_info.xml
@@ -39,6 +39,7 @@
<!-- followed by perf lock options -->
<param key="perf_lock_opts" value="4, 0x101, 0x704, 0x20F, 0x1E01"/>
<param key="native_audio_mode" value="src"/>
+ <param key="input_mic_max_count" value="4"/>
</config_params>
<backend_names>
<device name="SND_DEVICE_OUT_HEADPHONES" backend="headphones" interface="SLIMBUS_6_RX"/>
diff --git a/configs/msm8996/audio_policy.conf b/configs/msm8996/audio_policy.conf
index 8a3bd30..641ec55 100644
--- a/configs/msm8996/audio_policy.conf
+++ b/configs/msm8996/audio_policy.conf
@@ -101,13 +101,13 @@
}
surround_sound {
sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000
- channel_masks AUDIO_CHANNEL_IN_5POINT1|AUDIO_CHANNEL_IN_MONO|AUDIO_CHANNEL_IN_STEREO|AUDIO_CHANNEL_IN_FRONT_BACK
+ channel_masks AUDIO_CHANNEL_IN_5POINT1|AUDIO_CHANNEL_IN_MONO|AUDIO_CHANNEL_IN_STEREO|AUDIO_CHANNEL_IN_FRONT_BACK|AUDIO_CHANNEL_INDEX_MASK_3|AUDIO_CHANNEL_INDEX_MASK_4
formats AUDIO_FORMAT_PCM_16_BIT
devices AUDIO_DEVICE_IN_BUILTIN_MIC|AUDIO_DEVICE_IN_BACK_MIC
}
record_24 {
sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000|96000|192000
- channel_masks AUDIO_CHANNEL_IN_MONO|AUDIO_CHANNEL_IN_STEREO|AUDIO_CHANNEL_IN_FRONT_BACK
+ channel_masks AUDIO_CHANNEL_IN_MONO|AUDIO_CHANNEL_IN_STEREO|AUDIO_CHANNEL_IN_FRONT_BACK|AUDIO_CHANNEL_INDEX_MASK_3|AUDIO_CHANNEL_INDEX_MASK_4
formats AUDIO_FORMAT_PCM_24_BIT_PACKED|AUDIO_FORMAT_PCM_8_24_BIT|AUDIO_FORMAT_PCM_FLOAT
devices AUDIO_DEVICE_IN_BUILTIN_MIC|AUDIO_DEVICE_IN_BACK_MIC|AUDIO_DEVICE_IN_WIRED_HEADSET
}
diff --git a/configs/msm8996/audio_policy_configuration.xml b/configs/msm8996/audio_policy_configuration.xml
index 3f30e32..56848ad 100644
--- a/configs/msm8996/audio_policy_configuration.xml
+++ b/configs/msm8996/audio_policy_configuration.xml
@@ -150,18 +150,18 @@
<mixPort name="surround_sound" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_IN_5POINT1"/>
+ channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3,AUDIO_CHANNEL_INDEX_MASK_4,AUDIO_CHANNEL_IN_5POINT1"/>
</mixPort>
<mixPort name="record_24" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_24_BIT_PACKED"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,96000,192000"
- channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK"/>
+ channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3,AUDIO_CHANNEL_INDEX_MASK_4"/>
<profile name="" format="AUDIO_FORMAT_PCM_8_24_BIT"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,96000,192000"
- channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK"/>
+ channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3,AUDIO_CHANNEL_INDEX_MASK_4"/>
<profile name="" format="AUDIO_FORMAT_PCM_FLOAT"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,96000,192000"
- channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK"/>
+ channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3,AUDIO_CHANNEL_INDEX_MASK_4"/>
</mixPort>
<mixPort name="voice_rx" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
diff --git a/configs/msm8996/mixer_paths.xml b/configs/msm8996/mixer_paths.xml
index 7562b3d..1a895fe 100644
--- a/configs/msm8996/mixer_paths.xml
+++ b/configs/msm8996/mixer_paths.xml
@@ -2194,6 +2194,14 @@
<ctl name="MAD Input" value="DMIC1" />
</path>
+ <path name="unprocessed-handset-mic">
+ <path name="handset-mic" />
+ </path>
+
+ <path name="unprocessed-mic">
+ <path name="unprocessed-handset-mic" />
+ </path>
+
<!-- Added for ADSP testfwk -->
<path name="ADSP testfwk">
<ctl name="SLIMBUS_DL_HL Switch" value="1" />
diff --git a/configs/msm8996/mixer_paths_tasha.xml b/configs/msm8996/mixer_paths_tasha.xml
index 9a97964..360e80b 100644
--- a/configs/msm8996/mixer_paths_tasha.xml
+++ b/configs/msm8996/mixer_paths_tasha.xml
@@ -2492,6 +2492,14 @@
<ctl name="MAD Input" value="DMIC0" />
</path>
+ <path name="unprocessed-handset-mic">
+ <path name="handset-mic" />
+ </path>
+
+ <path name="unprocessed-mic">
+ <path name="unprocessed-handset-mic" />
+ </path>
+
<!-- Added for ADSP testfwk -->
<path name="ADSP testfwk">
<ctl name="SLIMBUS_DL_HL Switch" value="1" />
diff --git a/configs/msmcobalt/audio_platform_info.xml b/configs/msmcobalt/audio_platform_info.xml
index 6bf14e2..fc86a53 100644
--- a/configs/msmcobalt/audio_platform_info.xml
+++ b/configs/msmcobalt/audio_platform_info.xml
@@ -33,6 +33,7 @@
<device name="SND_DEVICE_OUT_SPEAKER" bit_width="24"/>
</bit_width_configs>
<pcm_ids>
+ <usecase name="USECASE_AUDIO_PLAYBACK_LOW_LATENCY" type="out" id="13"/>
<usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD" type="out" id="8"/>
<usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD2" type="out" id="15"/>
<usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD3" type="out" id="16"/>
@@ -56,9 +57,10 @@
<usecase name="USECASE_QCHAT_CALL" type="out" id="-1"/>
<usecase name="USECASE_VOWLAN_CALL" type="in" id="-1"/>
<usecase name="USECASE_VOWLAN_CALL" type="out" id="-1"/>
- <usecase name="USECASE_AUDIO_SPKR_CALIB_TX" type="in" id="35"/>
<usecase name="USECASE_AUDIO_PLAYBACK_FM" type="out" id="5"/>
<usecase name="USECASE_AUDIO_PLAYBACK_FM" type="in" id="34"/>
+ <usecase name="USECASE_AUDIO_SPKR_CALIB_RX" type="out" id="5"/>
+ <usecase name="USECASE_AUDIO_SPKR_CALIB_TX" type="in" id="35"/>
</pcm_ids>
<config_params>
<param key="spkr_1_tz_name" value="wsatz.11"/>
@@ -66,6 +68,7 @@
<!-- In the below value string, first parameter indicates size -->
<!-- followed by perf lock options -->
<param key="perf_lock_opts" value="4, 0x101, 0x704, 0x20F, 0x1E01"/>
+ <param key="input_mic_max_count" value="4"/>
</config_params>
<backend_names>
<device name="SND_DEVICE_OUT_HEADPHONES" backend="headphones" interface="SLIMBUS_6_RX"/>
diff --git a/configs/msmcobalt/audio_policy.conf b/configs/msmcobalt/audio_policy.conf
index a9f4644..efd1ef3 100644
--- a/configs/msmcobalt/audio_policy.conf
+++ b/configs/msmcobalt/audio_policy.conf
@@ -94,13 +94,13 @@
}
surround_sound {
sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000
- channel_masks AUDIO_CHANNEL_IN_5POINT1|AUDIO_CHANNEL_IN_MONO|AUDIO_CHANNEL_IN_STEREO|AUDIO_CHANNEL_IN_FRONT_BACK
+ channel_masks AUDIO_CHANNEL_IN_5POINT1|AUDIO_CHANNEL_IN_MONO|AUDIO_CHANNEL_IN_STEREO|AUDIO_CHANNEL_IN_FRONT_BACK|AUDIO_CHANNEL_INDEX_MASK_3|AUDIO_CHANNEL_INDEX_MASK_4
formats AUDIO_FORMAT_PCM_16_BIT
devices AUDIO_DEVICE_IN_BUILTIN_MIC|AUDIO_DEVICE_IN_BACK_MIC
}
record_24 {
sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000|96000|192000
- channel_masks AUDIO_CHANNEL_IN_MONO|AUDIO_CHANNEL_IN_STEREO|AUDIO_CHANNEL_IN_FRONT_BACK
+ channel_masks AUDIO_CHANNEL_IN_MONO|AUDIO_CHANNEL_IN_STEREO|AUDIO_CHANNEL_IN_FRONT_BACK|AUDIO_CHANNEL_INDEX_MASK_3|AUDIO_CHANNEL_INDEX_MASK_4
formats AUDIO_FORMAT_PCM_24_BIT_PACKED|AUDIO_FORMAT_PCM_8_24_BIT
devices AUDIO_DEVICE_IN_BUILTIN_MIC|AUDIO_DEVICE_IN_BACK_MIC|AUDIO_DEVICE_IN_WIRED_HEADSET
}
diff --git a/configs/msmcobalt/audio_policy_configuration.xml b/configs/msmcobalt/audio_policy_configuration.xml
index 3f30e32..56848ad 100644
--- a/configs/msmcobalt/audio_policy_configuration.xml
+++ b/configs/msmcobalt/audio_policy_configuration.xml
@@ -150,18 +150,18 @@
<mixPort name="surround_sound" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
- channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_IN_5POINT1"/>
+ channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3,AUDIO_CHANNEL_INDEX_MASK_4,AUDIO_CHANNEL_IN_5POINT1"/>
</mixPort>
<mixPort name="record_24" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_24_BIT_PACKED"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,96000,192000"
- channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK"/>
+ channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3,AUDIO_CHANNEL_INDEX_MASK_4"/>
<profile name="" format="AUDIO_FORMAT_PCM_8_24_BIT"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,96000,192000"
- channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK"/>
+ channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3,AUDIO_CHANNEL_INDEX_MASK_4"/>
<profile name="" format="AUDIO_FORMAT_PCM_FLOAT"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,96000,192000"
- channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK"/>
+ channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3,AUDIO_CHANNEL_INDEX_MASK_4"/>
</mixPort>
<mixPort name="voice_rx" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
diff --git a/configs/msmcobalt/mixer_paths.xml b/configs/msmcobalt/mixer_paths.xml
index 7562b3d..1a895fe 100644
--- a/configs/msmcobalt/mixer_paths.xml
+++ b/configs/msmcobalt/mixer_paths.xml
@@ -2194,6 +2194,14 @@
<ctl name="MAD Input" value="DMIC1" />
</path>
+ <path name="unprocessed-handset-mic">
+ <path name="handset-mic" />
+ </path>
+
+ <path name="unprocessed-mic">
+ <path name="unprocessed-handset-mic" />
+ </path>
+
<!-- Added for ADSP testfwk -->
<path name="ADSP testfwk">
<ctl name="SLIMBUS_DL_HL Switch" value="1" />
diff --git a/configs/msmcobalt/mixer_paths_tasha.xml b/configs/msmcobalt/mixer_paths_tasha.xml
index 93d671d..f60a036 100644
--- a/configs/msmcobalt/mixer_paths_tasha.xml
+++ b/configs/msmcobalt/mixer_paths_tasha.xml
@@ -173,6 +173,28 @@
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia16" value="0" />
<ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia16" value="0" />
<ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia16" value="0" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia1" value="0" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia2" value="0" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia3" value="0" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia4" value="0" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia5" value="0" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia7" value="0" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia10" value="0" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia11" value="0" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia12" value="0" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia13" value="0" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia14" value="0" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia15" value="0" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia16" value="0" />
+ <ctl name="MultiMedia1 Mixer USB_AUDIO_TX" value="0" />
+ <ctl name="MultiMedia5 Mixer USB_AUDIO_TX" value="0" />
+ <ctl name="MultiMedia8 Mixer USB_AUDIO_TX" value="0" />
+ <ctl name="USB_AUDIO_RX Channels" value="One" />
+ <ctl name="USB_AUDIO_RX SampleRate" value="KHZ_48" />
+ <ctl name="USB_AUDIO_RX Format" value="S16_LE" />
+ <ctl name="USB_AUDIO_TX Channels" value="One" />
+ <ctl name="USB_AUDIO_TX SampleRate" value="KHZ_48" />
+ <ctl name="USB_AUDIO_TX Format" value="S16_LE" />
<ctl name="MultiMedia6 Mixer SLIM_0_TX" value="0" />
<ctl name="IIR0 INP0 MUX" value="ZERO" />
<ctl name="IIR0 INP1 MUX" value="ZERO" />
@@ -419,6 +441,8 @@
<!-- Multimode Voice1 USB headset -->
<ctl name="AFE_PCM_RX_Voice Mixer VoiceMMode1" value="0" />
<ctl name="VoiceMMode1_Tx Mixer AFE_PCM_TX_MMode1" value="0" />
+ <ctl name="USB_AUDIO_RX_Voice Mixer VoiceMMode1" value="0" />
+ <ctl name="VoiceMMode1_Tx Mixer USB_AUDIO_TX_MMode1" value="0" />
<!-- Miltimode Voice1 end-->
<!-- Multimode Voice2 -->
@@ -433,6 +457,8 @@
<!-- Multimode Voice2 USB headset -->
<ctl name="AFE_PCM_RX_Voice Mixer VoiceMMode2" value="0" />
<ctl name="VoiceMMode2_Tx Mixer AFE_PCM_TX_MMode2" value="0" />
+ <ctl name="USB_AUDIO_RX_Voice Mixer VoiceMMode2" value="0" />
+ <ctl name="VoiceMMode2_Tx Mixer USB_AUDIO_TX_MMode2" value="0" />
<!-- Multimode Voice2 end-->
<!-- Voice external ec. reference -->
@@ -466,6 +492,8 @@
<ctl name="Voip_Tx Mixer SLIM_7_TX_Voip" value="0" />
<ctl name="AFE_PCM_RX_Voice Mixer Voip" value="0" />
<ctl name="Voip_Tx Mixer AFE_PCM_TX_Voip" value="0" />
+ <ctl name="USB_AUDIO_RX_Voice Mixer Voip" value="0" />
+ <ctl name="Voip_Tx Mixer USB_AUDIO_TX_Voip" value="0" />
<!-- compress-voip-call end-->
<!-- QCHAT start -->
@@ -474,6 +502,8 @@
<ctl name="QCHAT_Tx Mixer SLIM_0_TX_QCHAT" value="0" />
<ctl name="SLIM_7_RX_Voice Mixer QCHAT" value="0" />
<ctl name="QCHAT_Tx Mixer SLIM_7_TX_QCHAT" value="0" />
+ <ctl name="USB_AUDIO_RX_Voice Mixer QCHAT" value="0" />
+ <ctl name="QCHAT_Tx Mixer USB_AUDIO_TX_QCHAT" value="0" />
<!-- QCHAT end-->
<!-- VoWLAN start -->
@@ -485,6 +515,8 @@
<ctl name="VoWLAN_Tx Mixer SLIM_7_TX_VoWLAN" value="0" />
<ctl name="AFE_PCM_RX_Voice Mixer VoWLAN" value="0" />
<ctl name="VoWLAN_Tx Mixer AFE_PCM_TX_VoWLAN" value="0" />
+ <ctl name="USB_AUDIO_RX_Voice Mixer VoWLAN" value="0" />
+ <ctl name="VoWLAN_Tx Mixer USB_AUDIO_TX_VoWLAN" value="0" />
<!-- VoWLAN end-->
<!-- Audio BTSCO -->
@@ -641,7 +673,7 @@
</path>
<path name="deep-buffer-playback usb-headphones">
- <path name="deep-buffer-playback afe-proxy" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia1" value="1" />
</path>
<path name="deep-buffer-playback speaker-and-usb-headphones">
@@ -689,7 +721,7 @@
</path>
<path name="low-latency-playback usb-headphones">
- <path name="low-latency-playback afe-proxy" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia5" value="1" />
</path>
<path name="low-latency-playback speaker-and-usb-headphones">
@@ -744,6 +776,11 @@
<path name="audio-ull-playback afe-proxy">
<ctl name="AFE_PCM_RX Audio Mixer MultiMedia3" value="1" />
</path>
+
+ <path name="audio-ull-playback usb-headphones">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia3" value="1" />
+ </path>
+
<path name="multi-channel-playback hdmi">
<ctl name="HDMI Mixer MultiMedia2" value="1" />
</path>
@@ -783,7 +820,7 @@
</path>
<path name="compress-offload-playback usb-headphones">
- <path name="compress-offload-playback afe-proxy" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia4" value="1" />
</path>
<path name="compress-offload-playback speaker-and-usb-headphones">
@@ -831,7 +868,7 @@
</path>
<path name="compress-offload-playback2 usb-headphones">
- <path name="compress-offload-playback2 afe-proxy" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia7" value="1" />
</path>
<path name="compress-offload-playback2 speaker-and-usb-headphones">
@@ -879,7 +916,7 @@
</path>
<path name="compress-offload-playback3 usb-headphones">
- <path name="compress-offload-playback3 afe-proxy" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia10" value="1" />
</path>
<path name="compress-offload-playback3 speaker-and-usb-headphones">
@@ -927,7 +964,7 @@
</path>
<path name="compress-offload-playback4 usb-headphones">
- <path name="compress-offload-playback4 afe-proxy" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia11" value="1" />
</path>
<path name="compress-offload-playback4 speaker-and-usb-headphones">
@@ -975,7 +1012,7 @@
</path>
<path name="compress-offload-playback5 usb-headphones">
- <path name="compress-offload-playback5 afe-proxy" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia12" value="1" />
</path>
<path name="compress-offload-playback5 speaker-and-usb-headphones">
@@ -1023,7 +1060,7 @@
</path>
<path name="compress-offload-playback6 usb-headphones">
- <path name="compress-offload-playback6 afe-proxy" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia13" value="1" />
</path>
<path name="compress-offload-playback6 speaker-and-usb-headphones">
@@ -1071,7 +1108,7 @@
</path>
<path name="compress-offload-playback7 usb-headphones">
- <path name="compress-offload-playback7 afe-proxy" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia14" value="1" />
</path>
<path name="compress-offload-playback7 speaker-and-usb-headphones">
@@ -1119,7 +1156,7 @@
</path>
<path name="compress-offload-playback8 usb-headphones">
- <path name="compress-offload-playback8 afe-proxy" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia15" value="1" />
</path>
<path name="compress-offload-playback8 speaker-and-usb-headphones">
@@ -1167,7 +1204,7 @@
</path>
<path name="compress-offload-playback9 usb-headphones">
- <path name="compress-offload-playback9 afe-proxy" />
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia16" value="1" />
</path>
<path name="compress-offload-playback9 speaker-and-usb-headphones">
@@ -1193,7 +1230,7 @@
</path>
<path name="audio-record usb-headset-mic">
- <ctl name="MultiMedia1 Mixer AFE_PCM_TX" value="1" />
+ <ctl name="MultiMedia1 Mixer USB_AUDIO_TX" value="1" />
</path>
<path name="audio-record bt-sco">
@@ -1223,7 +1260,7 @@
</path>
<path name="audio-record-compress usb-headset-mic">
- <ctl name="MultiMedia8 Mixer AFE_PCM_TX" value="1" />
+ <ctl name="MultiMedia8 Mixer USB_AUDIO_TX" value="1" />
</path>
<path name="low-latency-record">
@@ -1240,7 +1277,7 @@
</path>
<path name="low-latency-record usb-headset-mic">
- <ctl name="MultiMedia5 Mixer AFE_PCM_TX" value="1" />
+ <ctl name="MultiMedia5 Mixer USB_AUDIO_TX" value="1" />
</path>
<path name="low-latency-record capture-fm">
@@ -1277,8 +1314,8 @@
</path>
<path name="voice-call usb-headphones">
- <ctl name="AFE_PCM_RX_Voice Mixer CSVoice" value="1" />
- <ctl name="Voice_Tx Mixer AFE_PCM_TX_Voice" value="1" />
+ <ctl name="USB_AUDIO_RX_Voice Mixer CSVoice" value="1" />
+ <ctl name="Voice_Tx Mixer USB_AUDIO_TX_Voice" value="1" />
</path>
<path name="voice-call headphones">
@@ -1317,8 +1354,8 @@
</path>
<path name="voice2-call usb-headphones">
- <ctl name="AFE_PCM_RX_Voice Mixer Voice2" value="1" />
- <ctl name="Voice2_Tx Mixer AFE_PCM_TX_Voice2" value="1" />
+ <ctl name="USB_AUDIO_RX_Voice Mixer Voice2" value="1" />
+ <ctl name="Voice2_Tx Mixer USB_AUDIO_TX_Voice2" value="1" />
</path>
<path name="voice2-call voice-speaker-vbat">
@@ -1522,8 +1559,8 @@
</path>
<path name="volte-call usb-headphones">
- <ctl name="AFE_PCM_RX_Voice Mixer VoLTE" value="1" />
- <ctl name="VoLTE_Tx Mixer AFE_PCM_TX_VoLTE" value="1" />
+ <ctl name="USB_AUDIO_RX_Voice Mixer VoLTE" value="1" />
+ <ctl name="VoLTE_Tx Mixer USB_AUDIO_TX_VoLTE" value="1" />
</path>
<path name="volte-call voice-speaker-vbat">
@@ -1558,8 +1595,8 @@
</path>
<path name="compress-voip-call usb-headphones">
- <ctl name="AFE_PCM_RX_Voice Mixer Voip" value="1" />
- <ctl name="Voip_Tx Mixer AFE_PCM_TX_Voip" value="1" />
+ <ctl name="USB_AUDIO_RX_Voice Mixer Voip" value="1" />
+ <ctl name="Voip_Tx Mixer USB_AUDIO_TX_Voip" value="1" />
</path>
<path name="compress-voip-call voice-speaker-vbat">
@@ -1598,8 +1635,8 @@
</path>
<path name="vowlan-call usb-headphones">
- <ctl name="AFE_PCM_RX_Voice Mixer VoWLAN" value="1" />
- <ctl name="VoWLAN_Tx Mixer AFE_PCM_TX_VoWLAN" value="1" />
+ <ctl name="USB_AUDIO_RX_Voice Mixer VoWLAN" value="1" />
+ <ctl name="VoWLAN_Tx Mixer USB_AUDIO_TX_VoWLAN" value="1" />
</path>
<path name="vowlan-call voice-speaker-vbat">
@@ -1638,8 +1675,8 @@
</path>
<path name="voicemmode1-call usb-headphones">
- <ctl name="AFE_PCM_RX_Voice Mixer VoiceMMode1" value="1" />
- <ctl name="VoiceMMode1_Tx Mixer AFE_PCM_TX_MMode1" value="1" />
+ <ctl name="USB_AUDIO_RX_Voice Mixer VoiceMMode1" value="1" />
+ <ctl name="VoiceMMode1_Tx Mixer USB_AUDIO_TX_MMode1" value="1" />
</path>
<path name="voicemmode1-call voice-speaker-vbat">
@@ -1678,8 +1715,8 @@
</path>
<path name="voicemmode2-call usb-headphones">
- <ctl name="AFE_PCM_RX_Voice Mixer VoiceMMode2" value="1" />
- <ctl name="VoiceMMode2_Tx Mixer AFE_PCM_TX_MMode2" value="1" />
+ <ctl name="USB_AUDIO_RX_Voice Mixer VoiceMMode2" value="1" />
+ <ctl name="VoiceMMode2_Tx Mixer USB_AUDIO_TX_MMode2" value="1" />
</path>
<path name="voicemmode2-call voice-speaker-vbat">
@@ -2489,6 +2526,14 @@
<ctl name="MAD Input" value="DMIC0" />
</path>
+ <path name="unprocessed-handset-mic">
+ <path name="handset-mic" />
+ </path>
+
+ <path name="unprocessed-mic">
+ <path name="unprocessed-handset-mic" />
+ </path>
+
<!-- Added for ADSP testfwk -->
<path name="ADSP testfwk">
<ctl name="SLIMBUS_DL_HL Switch" value="1" />
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index ad565de..aabb656 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -268,17 +268,27 @@
static struct audio_device *adev = NULL;
static pthread_mutex_t adev_init_lock;
static unsigned int audio_device_ref_count;
+//cache last MBDRC cal step level
+static int last_known_cal_step = -1 ;
__attribute__ ((visibility ("default")))
bool audio_hw_send_gain_dep_calibration(int level) {
bool ret_val = false;
- ALOGV("%s: called ... ", __func__);
+ ALOGV("%s: called ...", __func__);
pthread_mutex_lock(&adev_init_lock);
if (adev != NULL && adev->platform != NULL) {
pthread_mutex_lock(&adev->lock);
ret_val = platform_send_gain_dep_cal(adev->platform, level);
+
+ // if cal set fails, cache level info
+ // if cal set succeds, reset known last cal set
+ if (!ret_val)
+ last_known_cal_step = level;
+ else if (last_known_cal_step != -1)
+ last_known_cal_step = -1;
+
pthread_mutex_unlock(&adev->lock);
} else {
ALOGE("%s: %s is NULL", __func__, adev == NULL ? "adev" : "adev->platform");
@@ -1263,7 +1273,7 @@
if (get_usecase_from_list(adev, in->usecase) != NULL) {
ALOGE("%s: use case assigned already in use, stream(%p)usecase(%d: %s)",
__func__, &in->stream, in->usecase, use_case_table[in->usecase]);
- goto error_config;
+ return -EINVAL;
}
in->pcm_device_id = platform_get_pcm_device_id(in->usecase, PCM_CAPTURE);
@@ -2009,6 +2019,8 @@
switch (channel_count) {
case 1:
case 2:
+ case 3:
+ case 4:
case 6:
break;
default:
@@ -2244,17 +2256,17 @@
pthread_mutex_lock(&adev->lock);
/*
- * When HDMI cable is unplugged/usb hs is disconnected the
- * music playback is paused and the policy manager sends routing=0
- * But the audioflingercontinues to write data until standby time
- * (3sec). As the HDMI core is turned off, the write gets blocked.
+ * When HDMI cable is unplugged the music playback is paused and
+ * the policy manager sends routing=0. But the audioflinger continues
+ * to write data until standby time (3sec). As the HDMI core is
+ * turned off, the write gets blocked.
* Avoid this by routing audio to speaker until standby.
*/
- if ((out->devices == AUDIO_DEVICE_OUT_AUX_DIGITAL ||
- out->devices == AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET) &&
- val == AUDIO_DEVICE_NONE) {
- if (!audio_extn_dolby_is_passthrough_stream(out))
- val = AUDIO_DEVICE_OUT_SPEAKER;
+ if ((out->devices == AUDIO_DEVICE_OUT_AUX_DIGITAL) &&
+ (val == AUDIO_DEVICE_NONE) &&
+ !audio_extn_dolby_is_passthrough_stream(out) &&
+ (platform_get_edid_info(adev->platform) != 0) /* HDMI disconnected */) {
+ val = AUDIO_DEVICE_OUT_SPEAKER;
}
/*
@@ -2548,6 +2560,12 @@
out->standby = true;
goto exit;
}
+
+ if (last_known_cal_step != -1) {
+ ALOGD("%s: retry previous failed cal level set", __func__);
+ audio_hw_send_gain_dep_calibration(last_known_cal_step);
+ }
+
if (!is_offload_usecase(out->usecase) && adev->adm_register_output_stream)
adev->adm_register_output_stream(adev->adm_data, out->handle, out->flags);
}
@@ -3985,8 +4003,10 @@
bool is_low_latency = false;
*stream_in = NULL;
- if (check_input_parameters(config->sample_rate, config->format, channel_count) != 0)
+ if (check_input_parameters(config->sample_rate, config->format, channel_count) != 0) {
+ ALOGE("%s: invalid input parameters", __func__);
return -EINVAL;
+ }
in = (struct stream_in *)calloc(1, sizeof(struct stream_in));
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index 0e85353..b39b668 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -259,6 +259,8 @@
char cvd_version[MAX_CVD_VERSION_STRING_SIZE];
char snd_card_name[MAX_SND_CARD_STRING_SIZE];
int metainfo_key;
+ int source_mic_type;
+ int max_mic_count;
};
static bool is_external_codec = false;
@@ -441,6 +443,12 @@
[SND_DEVICE_IN_SPEAKER_QMIC_NS] = "quad-mic",
[SND_DEVICE_IN_SPEAKER_QMIC_AEC_NS] = "quad-mic",
[SND_DEVICE_IN_THREE_MIC] = "three-mic",
+ [SND_DEVICE_IN_HANDSET_TMIC] = "three-mic",
+ [SND_DEVICE_IN_UNPROCESSED_MIC] = "unprocessed-mic",
+ [SND_DEVICE_IN_UNPROCESSED_STEREO_MIC] = "voice-rec-dmic-ef",
+ [SND_DEVICE_IN_UNPROCESSED_THREE_MIC] = "three-mic",
+ [SND_DEVICE_IN_UNPROCESSED_QUAD_MIC] = "quad-mic",
+ [SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC] = "headset-mic",
};
// Platform specific backend bit width table
@@ -552,7 +560,13 @@
[SND_DEVICE_IN_SPEAKER_QMIC_AEC] = 126,
[SND_DEVICE_IN_SPEAKER_QMIC_NS] = 127,
[SND_DEVICE_IN_SPEAKER_QMIC_AEC_NS] = 129,
- [SND_DEVICE_IN_THREE_MIC] = 46,
+ [SND_DEVICE_IN_THREE_MIC] = 46, /* for APSS Surround Sound Recording */
+ [SND_DEVICE_IN_HANDSET_TMIC] = 125, /* for 3mic recording with fluence */
+ [SND_DEVICE_IN_UNPROCESSED_MIC] = 143,
+ [SND_DEVICE_IN_UNPROCESSED_STEREO_MIC] = 144,
+ [SND_DEVICE_IN_UNPROCESSED_THREE_MIC] = 145,
+ [SND_DEVICE_IN_UNPROCESSED_QUAD_MIC] = 146,
+ [SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC] = 147,
};
struct name_to_index {
@@ -666,6 +680,13 @@
{TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_QMIC_AEC)},
{TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_QMIC_NS)},
{TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_QMIC_AEC_NS)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_THREE_MIC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_TMIC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_UNPROCESSED_MIC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_UNPROCESSED_STEREO_MIC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_UNPROCESSED_THREE_MIC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_UNPROCESSED_QUAD_MIC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC)},
};
static char * backend_tag_table[SND_DEVICE_MAX] = {0};
@@ -1143,7 +1164,7 @@
}
-static void set_platform_defaults()
+static void set_platform_defaults(struct platform_data * my_data)
{
int32_t dev, count = 0;
const char *MEDIA_MIMETYPE_AUDIO_ALAC = "audio/alac";
@@ -1182,6 +1203,7 @@
hw_interface_table[SND_DEVICE_OUT_SPEAKER_AND_HDMI] = strdup("SLIMBUS_0_RX-and-HDMI_RX");
hw_interface_table[SND_DEVICE_OUT_VOICE_TX] = strdup("AFE_PCM_RX");
+ my_data->max_mic_count = PLATFORM_DEFAULT_MIC_COUNT;
/*remove ALAC & APE from DSP decoder list based on software decoder availability*/
for (count = 0; count < (int32_t) (sizeof(dsp_only_decoders_mime)/sizeof(dsp_only_decoders_mime[0]));
count++) {
@@ -1521,6 +1543,27 @@
return found;
}
+static void get_source_mic_type(struct platform_data * my_data)
+{
+ // support max to mono, example if max count is 3, usecase supports Three, dual and mono mic
+ switch (my_data->max_mic_count) {
+ case 4:
+ my_data->source_mic_type |= SOURCE_QUAD_MIC;
+ case 3:
+ my_data->source_mic_type |= SOURCE_THREE_MIC;;
+ case 2:
+ my_data->source_mic_type |= SOURCE_DUAL_MIC;
+ case 1:
+ my_data->source_mic_type |= SOURCE_MONO_MIC;
+ break;
+ default:
+ ALOGE("%s: max_mic_count (%d), is not supported, setting to default",
+ __func__, my_data->max_mic_count);
+ my_data->source_mic_type = SOURCE_MONO_MIC | SOURCE_DUAL_MIC;
+ break;
+ }
+}
+
void *platform_init(struct audio_device *adev)
{
char value[PROPERTY_VALUE_MAX];
@@ -1776,7 +1819,7 @@
acdb_init_fail:
- set_platform_defaults();
+ set_platform_defaults(my_data);
/* Initialize ACDB and PCM ID's */
if (is_external_codec)
@@ -1784,6 +1827,14 @@
else
platform_info_init(PLATFORM_INFO_XML_PATH, my_data);
+ /* obtain source mic type from max mic count*/
+ get_source_mic_type(my_data);
+ ALOGD("%s: Fluence_Type(%d) max_mic_count(%d) mic_type(0x%x) fluence_in_voice_call(%d)"
+ " fluence_in_voice_rec(%d) fluence_in_spkr_mode(%d) ",
+ __func__, my_data->fluence_type, my_data->max_mic_count, my_data->source_mic_type,
+ my_data->fluence_in_voice_call, my_data->fluence_in_voice_rec,
+ my_data->fluence_in_spkr_mode);
+
/* init usb */
audio_extn_usb_init(adev);
/* update sound cards appropriately */
@@ -2957,8 +3008,8 @@
snd_device_t snd_device = SND_DEVICE_NONE;
int channel_count = popcount(channel_mask);
- ALOGV("%s: enter: out_device(%#x) in_device(%#x)",
- __func__, out_device, in_device);
+ ALOGV("%s: enter: out_device(%#x) in_device(%#x) channel_count (%d) channel_mask (0x%x)",
+ __func__, out_device, in_device, channel_count, channel_mask);
if (my_data->external_mic) {
if ((out_device != AUDIO_DEVICE_NONE) && ((mode == AUDIO_MODE_IN_CALL) ||
voice_extn_compress_voip_is_active(adev) || audio_extn_hfp_is_active(adev))) {
@@ -3004,7 +3055,8 @@
out_device & AUDIO_DEVICE_OUT_LINE) {
if (out_device & AUDIO_DEVICE_OUT_EARPIECE &&
audio_extn_should_use_handset_anc(channel_count) &&
- my_data->fluence_type != FLUENCE_NONE) {
+ my_data->fluence_type != FLUENCE_NONE &&
+ my_data->source_mic_type & SOURCE_DUAL_MIC) {
snd_device = SND_DEVICE_IN_VOICE_FLUENCE_DMIC_AANC;
adev->acdb_settings |= DMIC_FLAG;
ALOGD("Selecting AANC, Fluence combo device");
@@ -3041,7 +3093,8 @@
if (my_data->fluence_type != FLUENCE_NONE &&
my_data->fluence_in_voice_call &&
my_data->fluence_in_spkr_mode) {
- if(my_data->fluence_type & FLUENCE_QUAD_MIC) {
+ if((my_data->fluence_type & FLUENCE_QUAD_MIC) &&
+ (my_data->source_mic_type & SOURCE_QUAD_MIC)) {
adev->acdb_settings |= QMIC_FLAG;
snd_device = SND_DEVICE_IN_VOICE_SPEAKER_QMIC;
} else {
@@ -3061,26 +3114,62 @@
} else if (source == AUDIO_SOURCE_CAMCORDER) {
if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC ||
in_device & AUDIO_DEVICE_IN_BACK_MIC) {
- if (my_data->fluence_type & FLUENCE_DUAL_MIC &&
- channel_count == 2)
+ if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
+ (my_data->source_mic_type & SOURCE_DUAL_MIC) &&
+ (channel_count == 2))
snd_device = SND_DEVICE_IN_HANDSET_STEREO_DMIC;
else
snd_device = SND_DEVICE_IN_CAMCORDER_MIC;
}
} else if (source == AUDIO_SOURCE_VOICE_RECOGNITION) {
if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) {
- if (channel_count == 2) {
+ if (my_data->fluence_in_voice_rec && channel_count == 1) {
+ if ((my_data->fluence_type & FLUENCE_QUAD_MIC) &&
+ (my_data->source_mic_type & SOURCE_QUAD_MIC)) {
+ snd_device = SND_DEVICE_IN_HANDSET_QMIC;
+ } else if ((my_data->fluence_type & FLUENCE_QUAD_MIC) &&
+ (my_data->source_mic_type & SOURCE_THREE_MIC)) {
+ snd_device = SND_DEVICE_IN_HANDSET_TMIC;
+ } else if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
+ (my_data->source_mic_type & SOURCE_DUAL_MIC)) {
+ snd_device = SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE;
+ }
+ platform_set_echo_reference(adev, true, out_device);
+ } else if (((channel_mask == AUDIO_CHANNEL_IN_FRONT_BACK) ||
+ (channel_mask == AUDIO_CHANNEL_IN_STEREO)) &&
+ (my_data->source_mic_type & SOURCE_DUAL_MIC)) {
snd_device = SND_DEVICE_IN_VOICE_REC_DMIC_STEREO;
- adev->acdb_settings |= DMIC_FLAG;
- } else if (adev->active_input->enable_ns)
- snd_device = SND_DEVICE_IN_VOICE_REC_MIC_NS;
- else if (my_data->fluence_type != FLUENCE_NONE &&
- my_data->fluence_in_voice_rec) {
- snd_device = SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE;
- adev->acdb_settings |= DMIC_FLAG;
- } else {
- snd_device = SND_DEVICE_IN_VOICE_REC_MIC;
+ } else if (((int)channel_mask == AUDIO_CHANNEL_INDEX_MASK_3) &&
+ (my_data->source_mic_type & SOURCE_THREE_MIC)) {
+ snd_device = SND_DEVICE_IN_THREE_MIC;
+ } else if (((int)channel_mask == AUDIO_CHANNEL_INDEX_MASK_4) &&
+ (my_data->source_mic_type & SOURCE_QUAD_MIC)) {
+ snd_device = SND_DEVICE_IN_QUAD_MIC;
}
+ if (snd_device == SND_DEVICE_NONE) {
+ if (adev->active_input->enable_ns)
+ snd_device = SND_DEVICE_IN_VOICE_REC_MIC_NS;
+ else
+ snd_device = SND_DEVICE_IN_VOICE_REC_MIC;
+ }
+ }
+ } else if (source == AUDIO_SOURCE_UNPROCESSED) {
+ if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) {
+ if (((channel_mask == AUDIO_CHANNEL_IN_FRONT_BACK) ||
+ (channel_mask == AUDIO_CHANNEL_IN_STEREO)) &&
+ (my_data->source_mic_type & SOURCE_DUAL_MIC)) {
+ snd_device = SND_DEVICE_IN_UNPROCESSED_STEREO_MIC;
+ } else if (((int)channel_mask == AUDIO_CHANNEL_INDEX_MASK_3) &&
+ (my_data->source_mic_type & SOURCE_THREE_MIC)) {
+ snd_device = SND_DEVICE_IN_UNPROCESSED_THREE_MIC;
+ } else if (((int)channel_mask == AUDIO_CHANNEL_INDEX_MASK_4) &&
+ (my_data->source_mic_type & SOURCE_QUAD_MIC)) {
+ snd_device = SND_DEVICE_IN_UNPROCESSED_QUAD_MIC;
+ } else {
+ snd_device = SND_DEVICE_IN_UNPROCESSED_MIC;
+ }
+ } else if (in_device & AUDIO_DEVICE_IN_WIRED_HEADSET) {
+ snd_device = SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC;
}
} else if ((source == AUDIO_SOURCE_VOICE_COMMUNICATION) ||
(mode == AUDIO_MODE_IN_COMMUNICATION)) {
@@ -3092,9 +3181,11 @@
adev->active_input->enable_ns) {
if (in_device & AUDIO_DEVICE_IN_BACK_MIC) {
if (my_data->fluence_in_spkr_mode) {
- if (my_data->fluence_type & FLUENCE_QUAD_MIC) {
+ if ((my_data->fluence_type & FLUENCE_QUAD_MIC) &&
+ (my_data->source_mic_type & SOURCE_QUAD_MIC)) {
snd_device = SND_DEVICE_IN_SPEAKER_QMIC_AEC_NS;
- } else if (my_data->fluence_type & FLUENCE_DUAL_MIC) {
+ } else if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
+ (my_data->source_mic_type & SOURCE_DUAL_MIC)) {
if (my_data->fluence_mode == FLUENCE_BROADSIDE)
snd_device = SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_BROADSIDE;
else
@@ -3104,7 +3195,8 @@
} else
snd_device = SND_DEVICE_IN_SPEAKER_MIC_AEC_NS;
} else if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) {
- if (my_data->fluence_type & FLUENCE_DUAL_MIC) {
+ if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
+ (my_data->source_mic_type & SOURCE_DUAL_MIC)) {
snd_device = SND_DEVICE_IN_HANDSET_DMIC_AEC_NS;
adev->acdb_settings |= DMIC_FLAG;
} else
@@ -3117,9 +3209,11 @@
adev->active_input->enable_aec) {
if (in_device & AUDIO_DEVICE_IN_BACK_MIC) {
if (my_data->fluence_in_spkr_mode) {
- if (my_data->fluence_type & FLUENCE_QUAD_MIC) {
+ if ((my_data->fluence_type & FLUENCE_QUAD_MIC) &&
+ (my_data->source_mic_type & SOURCE_QUAD_MIC)) {
snd_device = SND_DEVICE_IN_SPEAKER_QMIC_AEC;
- } else if (my_data->fluence_type & FLUENCE_DUAL_MIC) {
+ } else if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
+ (my_data->source_mic_type & SOURCE_DUAL_MIC)) {
if (my_data->fluence_mode == FLUENCE_BROADSIDE)
snd_device = SND_DEVICE_IN_SPEAKER_DMIC_AEC_BROADSIDE;
else
@@ -3129,7 +3223,8 @@
} else
snd_device = SND_DEVICE_IN_SPEAKER_MIC_AEC;
} else if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) {
- if (my_data->fluence_type & FLUENCE_DUAL_MIC) {
+ if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
+ (my_data->source_mic_type & SOURCE_DUAL_MIC)) {
snd_device = SND_DEVICE_IN_HANDSET_DMIC_AEC;
adev->acdb_settings |= DMIC_FLAG;
} else
@@ -3142,9 +3237,11 @@
adev->active_input->enable_ns) {
if (in_device & AUDIO_DEVICE_IN_BACK_MIC) {
if (my_data->fluence_in_spkr_mode) {
- if (my_data->fluence_type & FLUENCE_QUAD_MIC) {
+ if ((my_data->fluence_type & FLUENCE_QUAD_MIC) &&
+ (my_data->source_mic_type & SOURCE_QUAD_MIC)) {
snd_device = SND_DEVICE_IN_SPEAKER_QMIC_NS;
- } else if (my_data->fluence_type & FLUENCE_DUAL_MIC) {
+ } else if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
+ (my_data->source_mic_type & SOURCE_DUAL_MIC)) {
if (my_data->fluence_mode == FLUENCE_BROADSIDE)
snd_device = SND_DEVICE_IN_SPEAKER_DMIC_NS_BROADSIDE;
else
@@ -3154,7 +3251,8 @@
} else
snd_device = SND_DEVICE_IN_SPEAKER_MIC_NS;
} else if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) {
- if (my_data->fluence_type & FLUENCE_DUAL_MIC) {
+ if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
+ (my_data->source_mic_type & SOURCE_DUAL_MIC)) {
snd_device = SND_DEVICE_IN_HANDSET_DMIC_NS;
adev->acdb_settings |= DMIC_FLAG;
} else
@@ -3170,10 +3268,15 @@
if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC &&
channel_count == 1 ) {
if(my_data->fluence_in_audio_rec) {
- if(my_data->fluence_type & FLUENCE_QUAD_MIC) {
+ if ((my_data->fluence_type & FLUENCE_QUAD_MIC) &&
+ (my_data->source_mic_type & SOURCE_QUAD_MIC)) {
snd_device = SND_DEVICE_IN_HANDSET_QMIC;
platform_set_echo_reference(adev, true, out_device);
- } else if (my_data->fluence_type & FLUENCE_DUAL_MIC) {
+ } else if ((my_data->fluence_type & FLUENCE_QUAD_MIC) &&
+ (my_data->source_mic_type & SOURCE_THREE_MIC)) {
+ snd_device = SND_DEVICE_IN_HANDSET_TMIC;
+ } else if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
+ (my_data->source_mic_type & SOURCE_DUAL_MIC)) {
snd_device = SND_DEVICE_IN_HANDSET_DMIC;
platform_set_echo_reference(adev, true, out_device);
}
@@ -3198,8 +3301,8 @@
if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) {
if (adev->active_input && (audio_extn_ssr_get_stream() == adev->active_input))
snd_device = SND_DEVICE_IN_QUAD_MIC;
- else if (my_data->fluence_type & (FLUENCE_DUAL_MIC | FLUENCE_QUAD_MIC) &&
- channel_count == 2)
+ else if ((my_data->fluence_type & (FLUENCE_DUAL_MIC | FLUENCE_QUAD_MIC)) &&
+ (channel_count == 2) && (my_data->source_mic_type & SOURCE_DUAL_MIC))
snd_device = SND_DEVICE_IN_HANDSET_STEREO_DMIC;
else
snd_device = SND_DEVICE_IN_HANDSET_MIC;
@@ -3237,7 +3340,7 @@
} else if (out_device & AUDIO_DEVICE_OUT_WIRED_HEADSET) {
snd_device = SND_DEVICE_IN_HEADSET_MIC;
} else if (out_device & AUDIO_DEVICE_OUT_SPEAKER) {
- if (channel_count > 1)
+ if ((channel_count > 1) && (my_data->source_mic_type & SOURCE_DUAL_MIC))
snd_device = SND_DEVICE_IN_SPEAKER_STEREO_DMIC;
else
snd_device = SND_DEVICE_IN_SPEAKER_MIC;
@@ -3471,6 +3574,15 @@
}
}
#endif
+
+ err = str_parms_get_str(parms, PLATFORM_MAX_MIC_COUNT,
+ value, sizeof(value));
+ if (err >= 0) {
+ str_parms_del(parms, PLATFORM_MAX_MIC_COUNT);
+ my_data->max_mic_count = atoi(value);
+ ALOGV("%s: max_mic_count %d", __func__, my_data->max_mic_count);
+ }
+
native_audio_set_params(platform, parms, value, sizeof(value));
audio_extn_spkr_prot_set_parameters(parms, value, len);
ALOGV("%s: exit with code(%d)", __func__, ret);
diff --git a/hal/msm8916/platform.h b/hal/msm8916/platform.h
index 9380561..aef905d 100644
--- a/hal/msm8916/platform.h
+++ b/hal/msm8916/platform.h
@@ -32,6 +32,13 @@
FLUENCE_BROADSIDE = 0x2,
};
+enum {
+ SOURCE_MONO_MIC = 0x1, /* Target contains 1 mic */
+ SOURCE_DUAL_MIC = 0x2, /* Target contains 2 mics */
+ SOURCE_THREE_MIC = 0x4, /* Target contains 3 mics */
+ SOURCE_QUAD_MIC = 0x8, /* Target contains 4 mics */
+};
+
#define PLATFORM_IMAGE_NAME "modem"
/*
@@ -178,6 +185,12 @@
SND_DEVICE_IN_SPEAKER_QMIC_NS,
SND_DEVICE_IN_SPEAKER_QMIC_AEC_NS,
SND_DEVICE_IN_THREE_MIC,
+ SND_DEVICE_IN_HANDSET_TMIC,
+ SND_DEVICE_IN_UNPROCESSED_MIC,
+ SND_DEVICE_IN_UNPROCESSED_STEREO_MIC,
+ SND_DEVICE_IN_UNPROCESSED_THREE_MIC,
+ SND_DEVICE_IN_UNPROCESSED_QUAD_MIC,
+ SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC,
SND_DEVICE_IN_END,
SND_DEVICE_MAX = SND_DEVICE_IN_END,
@@ -278,6 +291,9 @@
#define AFE_PROXY_PLAYBACK_PCM_DEVICE 7
#define AFE_PROXY_RECORD_PCM_DEVICE 8
+#define PLATFORM_MAX_MIC_COUNT "input_mic_max_count"
+#define PLATFORM_DEFAULT_MIC_COUNT 2
+
#define LIB_CSD_CLIENT "libcsd-client.so"
/* CSD-CLIENT related functions */
typedef int (*init_t)();
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index a84f310..49e8b5e 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -254,6 +254,8 @@
char cvd_version[MAX_CVD_VERSION_STRING_SIZE];
char snd_card_name[MAX_SND_CARD_STRING_SIZE];
int metainfo_key;
+ int source_mic_type;
+ int max_mic_count;
};
static int pcm_device_table[AUDIO_USECASE_MAX][2] = {
@@ -433,6 +435,12 @@
[SND_DEVICE_IN_SPEAKER_QMIC_NS] = "quad-mic",
[SND_DEVICE_IN_SPEAKER_QMIC_AEC_NS] = "quad-mic",
[SND_DEVICE_IN_THREE_MIC] = "three-mic",
+ [SND_DEVICE_IN_HANDSET_TMIC] = "three-mic",
+ [SND_DEVICE_IN_UNPROCESSED_MIC] = "unprocessed-mic",
+ [SND_DEVICE_IN_UNPROCESSED_STEREO_MIC] = "voice-rec-dmic-ef",
+ [SND_DEVICE_IN_UNPROCESSED_THREE_MIC] = "three-mic",
+ [SND_DEVICE_IN_UNPROCESSED_QUAD_MIC] = "quad-mic",
+ [SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC] = "headset-mic",
};
// Platform specific backend bit width table
@@ -538,7 +546,13 @@
[SND_DEVICE_IN_SPEAKER_QMIC_AEC] = 126,
[SND_DEVICE_IN_SPEAKER_QMIC_NS] = 127,
[SND_DEVICE_IN_SPEAKER_QMIC_AEC_NS] = 129,
- [SND_DEVICE_IN_THREE_MIC] = 46,
+ [SND_DEVICE_IN_THREE_MIC] = 46, /* for APSS Surround Sound Recording */
+ [SND_DEVICE_IN_HANDSET_TMIC] = 125, /* for 3mic recording with fluence */
+ [SND_DEVICE_IN_UNPROCESSED_MIC] = 143,
+ [SND_DEVICE_IN_UNPROCESSED_STEREO_MIC] = 144,
+ [SND_DEVICE_IN_UNPROCESSED_THREE_MIC] = 145,
+ [SND_DEVICE_IN_UNPROCESSED_QUAD_MIC] = 146,
+ [SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC] = 147,
};
struct name_to_index {
@@ -643,6 +657,13 @@
{TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_QMIC_AEC)},
{TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_QMIC_NS)},
{TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_QMIC_AEC_NS)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_THREE_MIC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_TMIC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_UNPROCESSED_MIC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_UNPROCESSED_STEREO_MIC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_UNPROCESSED_THREE_MIC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_UNPROCESSED_QUAD_MIC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC)},
};
static char * backend_tag_table[SND_DEVICE_MAX] = {0};
@@ -677,6 +698,8 @@
{TO_NAME_INDEX(USECASE_AUDIO_HFP_SCO)},
{TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_FM)},
{TO_NAME_INDEX(USECASE_AUDIO_RECORD_FM_VIRTUAL)},
+ {TO_NAME_INDEX(USECASE_AUDIO_SPKR_CALIB_RX)},
+ {TO_NAME_INDEX(USECASE_AUDIO_SPKR_CALIB_TX)},
};
#define NO_COLS 2
@@ -1042,7 +1065,7 @@
return plat_data->is_i2s_ext_modem;
}
-static void set_platform_defaults()
+static void set_platform_defaults(struct platform_data * my_data)
{
int32_t dev;
unsigned int count = 0;
@@ -1083,6 +1106,7 @@
hw_interface_table[SND_DEVICE_OUT_SPEAKER_AND_HDMI] = strdup("SLIMBUS_0_RX-and-HDMI_RX");
hw_interface_table[SND_DEVICE_OUT_VOICE_TX] = strdup("AFE_PCM_RX");
+ my_data->max_mic_count = PLATFORM_DEFAULT_MIC_COUNT;
/*remove ALAC & APE from DSP decoder list based on software decoder availability*/
for (count = 0; count < (int32_t)(sizeof(dsp_only_decoders_mime)/sizeof(dsp_only_decoders_mime[0]));
@@ -1319,6 +1343,27 @@
return result;
}
+static void get_source_mic_type(struct platform_data * my_data)
+{
+ // support max to mono, example if max count is 3, usecase supports Three, dual and mono mic
+ switch (my_data->max_mic_count) {
+ case 4:
+ my_data->source_mic_type |= SOURCE_QUAD_MIC;
+ case 3:
+ my_data->source_mic_type |= SOURCE_THREE_MIC;
+ case 2:
+ my_data->source_mic_type |= SOURCE_DUAL_MIC;
+ case 1:
+ my_data->source_mic_type |= SOURCE_MONO_MIC;
+ break;
+ default:
+ ALOGE("%s: max_mic_count (%d), is not supported, setting to default",
+ __func__, my_data->max_mic_count);
+ my_data->source_mic_type = SOURCE_MONO_MIC | SOURCE_DUAL_MIC;
+ break;
+ }
+}
+
void *platform_init(struct audio_device *adev)
{
char platform[PROPERTY_VALUE_MAX];
@@ -1599,7 +1644,7 @@
acdb_init_fail:
- set_platform_defaults();
+ set_platform_defaults(my_data);
/* Initialize ACDB ID's */
if (my_data->is_i2s_ext_modem)
@@ -1620,6 +1665,14 @@
my_data->csd = NULL;
}
+ /* obtain source mic type from max mic count*/
+ get_source_mic_type(my_data);
+ ALOGD("%s: Fluence_Type(%d) max_mic_count(%d) mic_type(0x%x) fluence_in_voice_call(%d)"
+ " fluence_in_voice_rec(%d) fluence_in_spkr_mode(%d) ",
+ __func__, my_data->fluence_type, my_data->max_mic_count, my_data->source_mic_type,
+ my_data->fluence_in_voice_call, my_data->fluence_in_voice_rec,
+ my_data->fluence_in_spkr_mode);
+
/* init usb */
audio_extn_usb_init(adev);
/* update sound cards appropriately */
@@ -2716,8 +2769,8 @@
snd_device_t snd_device = SND_DEVICE_NONE;
int channel_count = popcount(channel_mask);
- ALOGV("%s: enter: out_device(%#x) in_device(%#x)",
- __func__, out_device, in_device);
+ ALOGV("%s: enter: out_device(%#x) in_device(%#x) channel_count (%d) channel_mask (0x%x)",
+ __func__, out_device, in_device, channel_count, channel_mask);
if (my_data->external_mic) {
if ((out_device != AUDIO_DEVICE_NONE) && ((mode == AUDIO_MODE_IN_CALL) ||
voice_extn_compress_voip_is_active(adev) || audio_extn_hfp_is_active(adev))) {
@@ -2762,7 +2815,8 @@
out_device & AUDIO_DEVICE_OUT_LINE) {
if (out_device & AUDIO_DEVICE_OUT_EARPIECE &&
audio_extn_should_use_handset_anc(channel_count)) {
- if(my_data->fluence_type != FLUENCE_NONE) {
+ if ((my_data->fluence_type != FLUENCE_NONE) &&
+ (my_data->source_mic_type & SOURCE_DUAL_MIC)) {
snd_device = SND_DEVICE_IN_VOICE_FLUENCE_DMIC_AANC;
adev->acdb_settings |= DMIC_FLAG;
} else {
@@ -2797,7 +2851,8 @@
if (my_data->fluence_type != FLUENCE_NONE &&
my_data->fluence_in_voice_call &&
my_data->fluence_in_spkr_mode) {
- if(my_data->fluence_type & FLUENCE_QUAD_MIC) {
+ if((my_data->fluence_type & FLUENCE_QUAD_MIC) &&
+ (my_data->source_mic_type & SOURCE_QUAD_MIC)) {
snd_device = SND_DEVICE_IN_VOICE_SPEAKER_QMIC;
} else {
if (my_data->fluence_mode == FLUENCE_BROADSIDE)
@@ -2819,22 +2874,54 @@
}
} else if (source == AUDIO_SOURCE_VOICE_RECOGNITION) {
if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) {
- if (channel_count == 2) {
- snd_device = SND_DEVICE_IN_VOICE_REC_DMIC_STEREO;
- } else if (my_data->fluence_type != FLUENCE_NONE &&
- my_data->fluence_in_voice_rec) {
- if (my_data->fluence_type & FLUENCE_QUAD_MIC) {
- snd_device = SND_DEVICE_IN_HANDSET_QMIC;
- } else {
+ if (my_data->fluence_in_voice_rec && channel_count == 1) {
+ if ((my_data->fluence_type & FLUENCE_QUAD_MIC) &&
+ (my_data->source_mic_type & SOURCE_QUAD_MIC)) {
+ snd_device = SND_DEVICE_IN_HANDSET_QMIC;
+ } else if ((my_data->fluence_type & FLUENCE_QUAD_MIC) &&
+ (my_data->source_mic_type & SOURCE_THREE_MIC)) {
+ snd_device = SND_DEVICE_IN_HANDSET_TMIC;
+ } else if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
+ (my_data->source_mic_type & SOURCE_DUAL_MIC)) {
snd_device = SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE;
}
- platform_set_echo_reference(adev->platform, true, out_device);
- } else if (adev->active_input->enable_ns) {
- snd_device = SND_DEVICE_IN_VOICE_REC_MIC_NS;
- } else {
- snd_device = SND_DEVICE_IN_VOICE_REC_MIC;
+ platform_set_echo_reference(adev, true, out_device);
+ } else if (((channel_mask == AUDIO_CHANNEL_IN_FRONT_BACK) ||
+ (channel_mask == AUDIO_CHANNEL_IN_STEREO)) &&
+ (my_data->source_mic_type & SOURCE_DUAL_MIC)) {
+ snd_device = SND_DEVICE_IN_VOICE_REC_DMIC_STEREO;
+ } else if (((int)channel_mask == AUDIO_CHANNEL_INDEX_MASK_3) &&
+ (my_data->source_mic_type & SOURCE_THREE_MIC)) {
+ snd_device = SND_DEVICE_IN_THREE_MIC;
+ } else if (((int)channel_mask == AUDIO_CHANNEL_INDEX_MASK_4) &&
+ (my_data->source_mic_type & SOURCE_QUAD_MIC)) {
+ snd_device = SND_DEVICE_IN_QUAD_MIC;
+ }
+ if (snd_device == SND_DEVICE_NONE) {
+ if (adev->active_input->enable_ns)
+ snd_device = SND_DEVICE_IN_VOICE_REC_MIC_NS;
+ else
+ snd_device = SND_DEVICE_IN_VOICE_REC_MIC;
}
}
+ } else if (source == AUDIO_SOURCE_UNPROCESSED) {
+ if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) {
+ if (((channel_mask == AUDIO_CHANNEL_IN_FRONT_BACK) ||
+ (channel_mask == AUDIO_CHANNEL_IN_STEREO)) &&
+ (my_data->source_mic_type & SOURCE_DUAL_MIC)) {
+ snd_device = SND_DEVICE_IN_UNPROCESSED_STEREO_MIC;
+ } else if (((int)channel_mask == AUDIO_CHANNEL_INDEX_MASK_3) &&
+ (my_data->source_mic_type & SOURCE_THREE_MIC)) {
+ snd_device = SND_DEVICE_IN_UNPROCESSED_THREE_MIC;
+ } else if (((int)channel_mask == AUDIO_CHANNEL_INDEX_MASK_4) &&
+ (my_data->source_mic_type & SOURCE_QUAD_MIC)) {
+ snd_device = SND_DEVICE_IN_UNPROCESSED_QUAD_MIC;
+ } else {
+ snd_device = SND_DEVICE_IN_UNPROCESSED_MIC;
+ }
+ } else if (in_device & AUDIO_DEVICE_IN_WIRED_HEADSET) {
+ snd_device = SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC;
+ }
} else if (source == AUDIO_SOURCE_VOICE_COMMUNICATION) {
if (out_device & AUDIO_DEVICE_OUT_SPEAKER)
in_device = AUDIO_DEVICE_IN_BACK_MIC;
@@ -2843,9 +2930,11 @@
adev->active_input->enable_ns) {
if (in_device & AUDIO_DEVICE_IN_BACK_MIC) {
if (my_data->fluence_in_spkr_mode) {
- if (my_data->fluence_type & FLUENCE_QUAD_MIC) {
+ if ((my_data->fluence_type & FLUENCE_QUAD_MIC) &&
+ (my_data->source_mic_type & SOURCE_QUAD_MIC)) {
snd_device = SND_DEVICE_IN_SPEAKER_QMIC_AEC_NS;
- } else if (my_data->fluence_type & FLUENCE_DUAL_MIC) {
+ } else if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
+ (my_data->source_mic_type & SOURCE_DUAL_MIC)) {
if (my_data->fluence_mode == FLUENCE_BROADSIDE)
snd_device = SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_BROADSIDE;
else
@@ -2854,9 +2943,10 @@
} else
snd_device = SND_DEVICE_IN_SPEAKER_MIC_AEC_NS;
} else if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) {
- if (my_data->fluence_type & FLUENCE_DUAL_MIC) {
+ if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
+ (my_data->source_mic_type & SOURCE_DUAL_MIC))
snd_device = SND_DEVICE_IN_HANDSET_DMIC_AEC_NS;
- } else
+ else
snd_device = SND_DEVICE_IN_HANDSET_MIC_AEC_NS;
} else if (in_device & AUDIO_DEVICE_IN_WIRED_HEADSET) {
snd_device = SND_DEVICE_IN_HEADSET_MIC_FLUENCE;
@@ -2865,9 +2955,11 @@
} else if (adev->active_input->enable_aec) {
if (in_device & AUDIO_DEVICE_IN_BACK_MIC) {
if (my_data->fluence_in_spkr_mode) {
- if (my_data->fluence_type & FLUENCE_QUAD_MIC) {
+ if ((my_data->fluence_type & FLUENCE_QUAD_MIC) &&
+ (my_data->source_mic_type & SOURCE_QUAD_MIC)) {
snd_device = SND_DEVICE_IN_SPEAKER_QMIC_AEC;
- } else if (my_data->fluence_type & FLUENCE_DUAL_MIC) {
+ } else if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
+ (my_data->source_mic_type & SOURCE_DUAL_MIC)) {
if (my_data->fluence_mode == FLUENCE_BROADSIDE)
snd_device = SND_DEVICE_IN_SPEAKER_DMIC_AEC_BROADSIDE;
else
@@ -2876,9 +2968,10 @@
} else
snd_device = SND_DEVICE_IN_SPEAKER_MIC_AEC;
} else if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) {
- if (my_data->fluence_type & FLUENCE_DUAL_MIC) {
+ if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
+ (my_data->source_mic_type & SOURCE_DUAL_MIC))
snd_device = SND_DEVICE_IN_HANDSET_DMIC_AEC;
- } else
+ else
snd_device = SND_DEVICE_IN_HANDSET_MIC_AEC;
} else if (in_device & AUDIO_DEVICE_IN_WIRED_HEADSET) {
snd_device = SND_DEVICE_IN_HEADSET_MIC_FLUENCE;
@@ -2887,9 +2980,11 @@
} else if (adev->active_input->enable_ns) {
if (in_device & AUDIO_DEVICE_IN_BACK_MIC) {
if (my_data->fluence_in_spkr_mode) {
- if (my_data->fluence_type & FLUENCE_QUAD_MIC) {
+ if ((my_data->fluence_type & FLUENCE_QUAD_MIC) &&
+ (my_data->source_mic_type & SOURCE_QUAD_MIC)) {
snd_device = SND_DEVICE_IN_SPEAKER_QMIC_NS;
- } else if (my_data->fluence_type & FLUENCE_DUAL_MIC) {
+ } else if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
+ (my_data->source_mic_type & SOURCE_DUAL_MIC)) {
if (my_data->fluence_mode == FLUENCE_BROADSIDE)
snd_device = SND_DEVICE_IN_SPEAKER_DMIC_NS_BROADSIDE;
else
@@ -2898,9 +2993,10 @@
} else
snd_device = SND_DEVICE_IN_SPEAKER_MIC_NS;
} else if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) {
- if (my_data->fluence_type & FLUENCE_DUAL_MIC) {
+ if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
+ (my_data->source_mic_type & SOURCE_DUAL_MIC))
snd_device = SND_DEVICE_IN_HANDSET_DMIC_NS;
- } else
+ else
snd_device = SND_DEVICE_IN_HANDSET_MIC_NS;
} else if (in_device & AUDIO_DEVICE_IN_WIRED_HEADSET) {
snd_device = SND_DEVICE_IN_HEADSET_MIC_FLUENCE;
@@ -2913,10 +3009,15 @@
if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC &&
channel_count == 1 ) {
if(my_data->fluence_in_audio_rec) {
- if(my_data->fluence_type & FLUENCE_QUAD_MIC) {
+ if ((my_data->fluence_type & FLUENCE_QUAD_MIC) &&
+ (my_data->source_mic_type & SOURCE_QUAD_MIC)) {
snd_device = SND_DEVICE_IN_HANDSET_QMIC;
platform_set_echo_reference(adev, true, out_device);
- } else if (my_data->fluence_type & FLUENCE_DUAL_MIC) {
+ } else if ((my_data->fluence_type & FLUENCE_QUAD_MIC) &&
+ (my_data->source_mic_type & SOURCE_THREE_MIC)) {
+ snd_device = SND_DEVICE_IN_HANDSET_TMIC;
+ } else if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
+ (my_data->source_mic_type & SOURCE_DUAL_MIC)) {
snd_device = SND_DEVICE_IN_HANDSET_DMIC;
platform_set_echo_reference(adev, true, out_device);
}
@@ -2941,8 +3042,8 @@
if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) {
if (adev->active_input && (audio_extn_ssr_get_stream() == adev->active_input))
snd_device = SND_DEVICE_IN_QUAD_MIC;
- else if (my_data->fluence_type & (FLUENCE_DUAL_MIC | FLUENCE_QUAD_MIC) &&
- channel_count == 2)
+ else if ((my_data->fluence_type & (FLUENCE_DUAL_MIC | FLUENCE_QUAD_MIC)) &&
+ (channel_count == 2) && (my_data->source_mic_type & SOURCE_DUAL_MIC))
snd_device = SND_DEVICE_IN_HANDSET_STEREO_DMIC;
else
snd_device = SND_DEVICE_IN_HANDSET_MIC;
@@ -2980,10 +3081,18 @@
} else if (out_device & AUDIO_DEVICE_OUT_WIRED_HEADSET) {
snd_device = SND_DEVICE_IN_HEADSET_MIC;
} else if (out_device & AUDIO_DEVICE_OUT_SPEAKER) {
- if (channel_count == 2)
+ if ((my_data->source_mic_type & SOURCE_DUAL_MIC) &&
+ (channel_count == 2)) {
snd_device = SND_DEVICE_IN_SPEAKER_STEREO_DMIC;
- else
+ } else if ((my_data->source_mic_type & SOURCE_MONO_MIC) &&
+ (channel_count == 1)) {
+ snd_device = SND_DEVICE_IN_SPEAKER_MIC;
+ } else {
+ ALOGE("%s: something wrong: source type (%d) channel_count (%d) .."
+ " no combination found .. setting to mono", __func__,
+ my_data->source_mic_type, channel_count);
snd_device = SND_DEVICE_IN_SPEAKER_MIC;
+ }
} else if (out_device & AUDIO_DEVICE_OUT_WIRED_HEADPHONE ||
out_device & AUDIO_DEVICE_OUT_LINE) {
snd_device = SND_DEVICE_IN_HANDSET_MIC;
@@ -3426,6 +3535,14 @@
update_external_device_status(my_data, event_name, status);
}
+ err = str_parms_get_str(parms, PLATFORM_MAX_MIC_COUNT,
+ value, sizeof(value));
+ if (err >= 0) {
+ str_parms_del(parms, PLATFORM_MAX_MIC_COUNT);
+ my_data->max_mic_count = atoi(value);
+ ALOGV("%s: max_mic_count %d", __func__, my_data->max_mic_count);
+ }
+
/* handle audio calibration parameters */
set_audiocal(platform, parms, value, len);
native_audio_set_params(platform, parms, value, len);
diff --git a/hal/msm8974/platform.h b/hal/msm8974/platform.h
index 7fe7271..52f0bac 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -32,6 +32,13 @@
FLUENCE_BROADSIDE = 0x2,
};
+enum {
+ SOURCE_MONO_MIC = 0x1, /* Target contains 1 mic */
+ SOURCE_DUAL_MIC = 0x2, /* Target contains 2 mics */
+ SOURCE_THREE_MIC = 0x4, /* Target contains 3 mics */
+ SOURCE_QUAD_MIC = 0x8, /* Target contains 4 mics */
+};
+
/*
* Below are the devices for which is back end is same, SLIMBUS_0_RX.
* All these devices are handled by the internal HW codec. We can
@@ -171,6 +178,12 @@
SND_DEVICE_IN_SPEAKER_QMIC_NS,
SND_DEVICE_IN_SPEAKER_QMIC_AEC_NS,
SND_DEVICE_IN_THREE_MIC,
+ SND_DEVICE_IN_HANDSET_TMIC,
+ SND_DEVICE_IN_UNPROCESSED_MIC,
+ SND_DEVICE_IN_UNPROCESSED_STEREO_MIC,
+ SND_DEVICE_IN_UNPROCESSED_THREE_MIC,
+ SND_DEVICE_IN_UNPROCESSED_QUAD_MIC,
+ SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC,
SND_DEVICE_IN_END,
SND_DEVICE_MAX = SND_DEVICE_IN_END,
@@ -371,6 +384,9 @@
#define FM_RX_VOLUME "Internal FM RX Volume"
#endif
+#define PLATFORM_MAX_MIC_COUNT "input_mic_max_count"
+#define PLATFORM_DEFAULT_MIC_COUNT 2
+
#define LIB_CSD_CLIENT "libcsd-client.so"
/* CSD-CLIENT related functions */
typedef int (*init_t)(bool);
diff --git a/policy_hal/AudioPolicyManager.cpp b/policy_hal/AudioPolicyManager.cpp
index 839f1eb..4c15fda 100644
--- a/policy_hal/AudioPolicyManager.cpp
+++ b/policy_hal/AudioPolicyManager.cpp
@@ -1598,10 +1598,21 @@
flags = AUDIO_OUTPUT_FLAG_TTS;
}
+ // check if direct output for track offload already exits
+ bool is_track_offload_active = false;
+ for (size_t i = 0; i < mOutputs.size(); i++) {
+ sp<SwAudioOutputDescriptor> desc = mOutputs.valueAt(i);
+ if (desc->mFlags & AUDIO_OUTPUT_FLAG_DIRECT_PCM) {
+ is_track_offload_active = true;
+ ALOGD("Track offload already active");
+ break;
+ }
+ }
+
// Do offload magic here
if ((flags == AUDIO_OUTPUT_FLAG_NONE) &&
(stream == AUDIO_STREAM_MUSIC) &&
- (offloadInfo != NULL) &&
+ (offloadInfo != NULL) && !is_track_offload_active &&
((offloadInfo->usage == AUDIO_USAGE_MEDIA) || (offloadInfo->usage == AUDIO_USAGE_GAME))) {
flags = (audio_output_flags_t)(AUDIO_OUTPUT_FLAG_DIRECT_PCM);
ALOGD("AudioCustomHAL --> Force Direct Flag .. flag (0x%x)", flags);
@@ -1771,16 +1782,22 @@
// for non direct outputs, only PCM is supported
if (audio_is_linear_pcm(format)) {
- if (forced_deep) {
- flags = (audio_output_flags_t)(AUDIO_OUTPUT_FLAG_DEEP_BUFFER);
- ALOGI("setting force DEEP buffer now ");
- }
// get which output is suitable for the specified stream. The actual
// routing change will happen when startOutput() will be called
SortedVector<audio_io_handle_t> outputs = getOutputsForDevice(device, mOutputs);
// at this stage we should ignore the DIRECT flag as no direct output could be found earlier
flags = (audio_output_flags_t)(flags & ~AUDIO_OUTPUT_FLAG_DIRECT);
+
+ if (forced_deep) {
+ flags = (audio_output_flags_t)(AUDIO_OUTPUT_FLAG_DEEP_BUFFER);
+ ALOGI("setting force DEEP buffer now ");
+ } else if(flags == AUDIO_OUTPUT_FLAG_NONE) {
+ // no deep buffer playback is requested hence fallback to primary
+ flags = (audio_output_flags_t)(AUDIO_OUTPUT_FLAG_PRIMARY);
+ ALOGI("FLAG None hence request for a primary output");
+ }
+
output = selectOutput(outputs, flags, format);
}
ALOGW_IF((output == 0), "getOutput() could not find output for stream %d, samplingRate %d,"