Merge "configs: Enable audio custom policy" into audio-hal.lnx.6.0
diff --git a/configs/common/audio_policy_configuration.xml b/configs/common/audio_policy_configuration.xml
index 6b8d87c..45bda7b 100644
--- a/configs/common/audio_policy_configuration.xml
+++ b/configs/common/audio_policy_configuration.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<!-- Copyright (c) 2016-2017, The Linux Foundation. All rights reserved
+<!-- Copyright (c) 2016-2017, 2019, The Linux Foundation. All rights reserved
Not a Contribution.
-->
<!-- Copyright (C) 2015 The Android Open Source Project
@@ -46,25 +46,33 @@
“defaultOutputDevice”: device to be used by default when no policy rule applies
-->
<modules>
- <!-- Primary Audio HAL -->
<module name="primary" halVersion="2.0">
<attachedDevices>
<item>Speaker</item>
+ <item>Speaker Safe</item>
+ <item>Earpiece</item>
+ <item>Telephony Tx</item>
<item>Built-In Mic</item>
<item>Built-In Back Mic</item>
+ <item>Telephony Rx</item>
</attachedDevices>
<defaultOutputDevice>Speaker</defaultOutputDevice>
<mixPorts>
- <mixPort name="primary output" role="source"
- flags="AUDIO_OUTPUT_FLAG_FAST|AUDIO_OUTPUT_FLAG_PRIMARY">
+ <mixPort name="primary output" role="source" flags="AUDIO_OUTPUT_FLAG_PRIMARY|AUDIO_OUTPUT_FLAG_FAST">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</mixPort>
- <mixPort name="deep_buffer" role="source"
- flags="AUDIO_OUTPUT_FLAG_DEEP_BUFFER">
+ <mixPort name="raw" role="source" flags="AUDIO_OUTPUT_FLAG_RAW|AUDIO_OUTPUT_FLAG_FAST">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</mixPort>
+ <mixPort name="hifi_playback" role="source" />
+ <mixPort name="deep_buffer" role="source"
+ flags="AUDIO_OUTPUT_FLAG_DEEP_BUFFER">
+ <profile name="" format="AUDIO_FORMAT_PCM_24_BIT_PACKED"
+ samplingRates="44100,48000"
+ channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
<mixPort name="compressed_offload" role="source"
flags="AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING">
<profile name="" format="AUDIO_FORMAT_MP3"
@@ -77,115 +85,182 @@
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
<profile name="" format="AUDIO_FORMAT_AAC_HE_V2"
- samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
- channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
- <profile name="" format="AUDIO_FORMAT_AAC_ADTS_LC"
- samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
- channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
- <profile name="" format="AUDIO_FORMAT_AAC_ADTS_HE_V1"
- samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
- channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
- <profile name="" format="AUDIO_FORMAT_AAC_ADTS_HE_V2"
- samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
+ samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
</mixPort>
<mixPort name="voice_tx" role="source">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
- samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/>
+ samplingRates="8000,16000,48000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="mmap_no_irq_out" role="source" flags="AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_MMAP_NOIRQ">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="voip_rx" role="source"
+ flags="AUDIO_OUTPUT_FLAG_VOIP_RX">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="8000,16000,32000,48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="incall_music_uplink" role="source"
+ flags="AUDIO_OUTPUT_FLAG_INCALL_MUSIC">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="8000,16000,48000"
+ channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</mixPort>
<mixPort name="primary input" role="sink">
- <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ <profile name="" format="AUDIO_FORMAT_PCM_8_24_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"/>
+ channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3"/>
</mixPort>
+ <mixPort name="fast input" role="sink" flags="AUDIO_INPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_8_24_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_INDEX_MASK_3"/>
+ </mixPort>
+ <mixPort name="hifi_input" role="sink" />
<mixPort name="voice_rx" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
- samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_IN_MONO"/>
+ samplingRates="8000,16000,48000" channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO"/>
+ </mixPort>
+ <mixPort name="mmap_no_irq_in" role="sink" flags="AUDIO_INPUT_FLAG_MMAP_NOIRQ">
+ <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_INDEX_MASK_3"/>
+ </mixPort>
+ <mixPort name="voip_tx" role="sink"
+ flags="AUDIO_INPUT_FLAG_VOIP_TX">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="8000,16000,32000,48000" channelMasks="AUDIO_CHANNEL_IN_MONO"/>
</mixPort>
</mixPorts>
<devicePorts>
- <!-- Output devices declaration, i.e. Sink DEVICE PORT -->
<devicePort tagName="Earpiece" type="AUDIO_DEVICE_OUT_EARPIECE" role="sink">
- <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
- samplingRates="48000" channelMasks="AUDIO_CHANNEL_IN_MONO"/>
</devicePort>
- <devicePort tagName="Speaker" role="sink" type="AUDIO_DEVICE_OUT_SPEAKER">
- <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
- samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ <devicePort tagName="Speaker" type="AUDIO_DEVICE_OUT_SPEAKER" role="sink">
</devicePort>
- <devicePort tagName="Wired Headset" type="AUDIO_DEVICE_OUT_WIRED_HEADSET" role="sink">
- <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
- samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
- </devicePort>
- <devicePort tagName="Wired Headphones" type="AUDIO_DEVICE_OUT_WIRED_HEADPHONE" role="sink">
- <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
- samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ <devicePort tagName="Speaker Safe" type="AUDIO_DEVICE_OUT_SPEAKER_SAFE" role="sink">
</devicePort>
<devicePort tagName="BT SCO" type="AUDIO_DEVICE_OUT_BLUETOOTH_SCO" role="sink">
- <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
- samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/>
</devicePort>
<devicePort tagName="BT SCO Headset" type="AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET" role="sink">
- <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
- samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/>
</devicePort>
<devicePort tagName="BT SCO Car Kit" type="AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT" role="sink">
- <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
- samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/>
</devicePort>
<devicePort tagName="Telephony Tx" type="AUDIO_DEVICE_OUT_TELEPHONY_TX" role="sink">
+ </devicePort>
+ <devicePort tagName="USB Device Out" type="AUDIO_DEVICE_OUT_USB_DEVICE" role="sink">
+ </devicePort>
+ <devicePort tagName="USB Headset Out" type="AUDIO_DEVICE_OUT_USB_HEADSET" role="sink">
+ </devicePort>
+ <devicePort tagName="BT A2DP Out" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP" role="sink"
+ encodedFormats="AUDIO_FORMAT_LDAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_AAC AUDIO_FORMAT_SBC">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
- samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/>
+ samplingRates="44100,48000,88200,96000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </devicePort>
+ <devicePort tagName="BT A2DP Headphones" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES" role="sink"
+ encodedFormats="AUDIO_FORMAT_LDAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_AAC AUDIO_FORMAT_SBC">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="44100,48000,88200,96000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </devicePort>
+ <devicePort tagName="BT A2DP Speaker" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER" role="sink"
+ encodedFormats="AUDIO_FORMAT_LDAC AUDIO_FORMAT_APTX AUDIO_FORMAT_APTX_HD AUDIO_FORMAT_AAC AUDIO_FORMAT_SBC">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="44100,48000,88200,96000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort>
<devicePort tagName="Built-In Mic" type="AUDIO_DEVICE_IN_BUILTIN_MIC" role="source">
- <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"/>
</devicePort>
<devicePort tagName="Built-In Back Mic" type="AUDIO_DEVICE_IN_BACK_MIC" role="source">
- <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"/>
- </devicePort>
- <devicePort tagName="Wired Headset Mic" type="AUDIO_DEVICE_IN_WIRED_HEADSET" role="source">
- <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"/>
</devicePort>
<devicePort tagName="BT SCO Headset Mic" type="AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET" role="source">
- <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
- samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_IN_MONO"/>
</devicePort>
<devicePort tagName="Telephony Rx" type="AUDIO_DEVICE_IN_TELEPHONY_RX" role="source">
- <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
- samplingRates="8000,16000" channelMasks="AUDIO_CHANNEL_IN_MONO"/>
+ </devicePort>
+ <!-- TODO: Enable multi-channel recording -->
+ <devicePort tagName="USB Device In" type="AUDIO_DEVICE_IN_USB_DEVICE" role="source">
+ </devicePort>
+ <devicePort tagName="USB Headset In" type="AUDIO_DEVICE_IN_USB_HEADSET" role="source">
</devicePort>
</devicePorts>
- <!-- route declaration, i.e. list all available sources for a given sink -->
<routes>
<route type="mix" sink="Earpiece"
- sources="primary output,deep_buffer,BT SCO Headset Mic"/>
+ sources="primary output,raw,deep_buffer,mmap_no_irq_out,voip_rx"/>
<route type="mix" sink="Speaker"
- sources="primary output,deep_buffer,compressed_offload,BT SCO Headset Mic,Telephony Rx"/>
- <route type="mix" sink="Wired Headset"
- sources="primary output,deep_buffer,compressed_offload,BT SCO Headset Mic,Telephony Rx"/>
- <route type="mix" sink="Wired Headphones"
- sources="primary output,deep_buffer,compressed_offload,BT SCO Headset Mic,Telephony Rx"/>
+ sources="primary output,raw,deep_buffer,compressed_offload,mmap_no_irq_out,voip_rx"/>
+ <route type="mix" sink="Speaker Safe"
+ sources="primary output,raw,deep_buffer,compressed_offload,mmap_no_irq_out,voip_rx"/>
+ <route type="mix" sink="BT SCO"
+ sources="primary output,raw,deep_buffer,voip_rx"/>
+ <route type="mix" sink="BT SCO Headset"
+ sources="primary output,raw,deep_buffer,voip_rx"/>
+ <route type="mix" sink="BT SCO Car Kit"
+ sources="primary output,raw,deep_buffer,voip_rx"/>
+ <route type="mix" sink="USB Device Out"
+ sources="primary output,raw,deep_buffer,compressed_offload,hifi_playback,mmap_no_irq_out,voip_rx"/>
+ <route type="mix" sink="USB Headset Out"
+ sources="primary output,raw,deep_buffer,compressed_offload,hifi_playback,mmap_no_irq_out,voip_rx"/>
<route type="mix" sink="Telephony Tx"
- sources="voice_tx"/>
+ sources="voice_tx,incall_music_uplink"/>
<route type="mix" sink="primary input"
- sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic,BT SCO Headset Mic"/>
+ sources="Built-In Mic,Built-In Back Mic,BT SCO Headset Mic,USB Device In,USB Headset In"/>
+ <route type="mix" sink="fast input"
+ sources="Built-In Mic,Built-In Back Mic,BT SCO Headset Mic,USB Device In,USB Headset In"/>
<route type="mix" sink="voice_rx"
sources="Telephony Rx"/>
+ <route type="mix" sink="hifi_input" sources="USB Device In,USB Headset In" />
+ <route type="mix" sink="mmap_no_irq_in"
+ sources="Built-In Mic,Built-In Back Mic,USB Device In,USB Headset In"/>
+ <route type="mix" sink="voip_tx"
+ sources="Built-In Mic,Built-In Back Mic,BT SCO Headset Mic,USB Device In,USB Headset In"/>
+ <route type="mix" sink="BT A2DP Out"
+ sources="primary output,deep_buffer,compressed_offload,voip_rx"/>
+ <route type="mix" sink="BT A2DP Headphones"
+ sources="primary output,deep_buffer,compressed_offload,voip_rx"/>
+ <route type="mix" sink="BT A2DP Speaker"
+ sources="primary output,deep_buffer,compressed_offload,voip_rx"/>
</routes>
-
</module>
- <!-- A2dp Audio HAL -->
- <xi:include href="a2dp_audio_policy_configuration.xml"/>
+ <!-- A2DP Input Audio HAL -->
+ <module name="a2dp" halVersion="2.0">
+ <mixPorts>
+ <mixPort name="a2dp input" role="sink">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="44100,48000"
+ channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO"/>
+ </mixPort>
+ </mixPorts>
+ <devicePorts>
+ <devicePort tagName="BT A2DP In" type="AUDIO_DEVICE_IN_BLUETOOTH_A2DP" role="source">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="44100,48000"
+ channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO"/>
+ </devicePort>
+ </devicePorts>
+ <routes>
+ <route type="mix" sink="a2dp input"
+ sources="BT A2DP In"/>
+ </routes>
+ </module>
<!-- Usb Audio HAL -->
- <xi:include href="usb_audio_policy_configuration.xml"/>
+ <module name="usb" halVersion="2.0">
+ <mixPorts>
+ <mixPort name="usb_accessory output" role="source">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="44100" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ </mixPorts>
+ <devicePorts>
+ <devicePort tagName="USB Host Out" type="AUDIO_DEVICE_OUT_USB_ACCESSORY" role="sink">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="44100" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </devicePort>
+ </devicePorts>
+ <routes>
+ <route type="mix" sink="USB Host Out"
+ sources="usb_accessory output"/>
+ </routes>
+ </module>
<!-- Remote Submix Audio HAL -->
<xi:include href="r_submix_audio_policy_configuration.xml"/>
diff --git a/configs/kona/kona.mk b/configs/kona/kona.mk
index 6e234fb..d4298f9 100644
--- a/configs/kona/kona.mk
+++ b/configs/kona/kona.mk
@@ -259,9 +259,17 @@
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio.hal.output.suspend.supported=true
+#Enable AAudio MMAP/NOIRQ data path
+#2 is AAUDIO_POLICY_AUTO so it will try MMAP then fallback to Legacy path
+PRODUCT_PROPERTY_OVERRIDES += aaudio.mmap_policy=2
+#Allow EXCLUSIVE then fall back to SHARED.
+PRODUCT_PROPERTY_OVERRIDES += aaudio.mmap_exclusive_policy=2
+PRODUCT_PROPERTY_OVERRIDES += aaudio.hw_burst_min_usec=2000
+
+
#enable mirror-link feature
PRODUCT_PROPERTY_OVERRIDES += \
-vendor.audio.enable.mirrorlink=true
+vendor.audio.enable.mirrorlink=false
#enable voicecall speaker stereo
PRODUCT_PROPERTY_OVERRIDES += \
@@ -286,3 +294,10 @@
vendor.qti.hardware.audiohalext@1.0 \
vendor.qti.hardware.audiohalext@1.0-impl \
vendor.qti.hardware.audiohalext-utils
+
+PRODUCT_PACKAGES_ENG += \
+ VoicePrintTest \
+ VoicePrintDemo
+
+PRODUCT_PACKAGES_DEBUG += \
+ AudioSettings
diff --git a/configs/kona/mixer_paths.xml b/configs/kona/mixer_paths.xml
index e93651c..8ebeed5 100644
--- a/configs/kona/mixer_paths.xml
+++ b/configs/kona/mixer_paths.xml
@@ -448,6 +448,14 @@
<ctl name="AUDIO_REF_EC_UL1 MUX" value="RX_CDC_DMA_RX_0" />
</path>
+ <path name="echo-reference-voip">
+ <ctl name="AUDIO_REF_EC_UL10 MUX" value="WSA_CDC_DMA_RX_0" />
+ </path>
+
+ <path name="echo-reference-voip headphones">
+ <ctl name="AUDIO_REF_EC_UL10 MUX" value="RX_CDC_DMA_RX_0" />
+ </path>
+
<path name="deep-buffer-playback">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia1" value="1" />
</path>
diff --git a/configs/kona/mixer_paths_qrd.xml b/configs/kona/mixer_paths_qrd.xml
index ce2d411..8570ac9 100644
--- a/configs/kona/mixer_paths_qrd.xml
+++ b/configs/kona/mixer_paths_qrd.xml
@@ -448,6 +448,18 @@
<ctl name="AUDIO_REF_EC_UL1 MUX" value="RX_CDC_DMA_RX_0" />
</path>
+ <path name="echo-reference-voip">
+ <ctl name="AUDIO_REF_EC_UL10 MUX" value="WSA_CDC_DMA_RX_0" />
+ </path>
+
+ <path name="echo-reference-voip handset">
+ <ctl name="AUDIO_REF_EC_UL10 MUX" value="RX_CDC_DMA_RX_0" />
+ </path>
+
+ <path name="echo-reference-voip headphones">
+ <ctl name="AUDIO_REF_EC_UL10 MUX" value="RX_CDC_DMA_RX_0" />
+ </path>
+
<path name="deep-buffer-playback">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia1" value="1" />
</path>
diff --git a/configs/kona/sound_trigger_platform_info.xml b/configs/kona/sound_trigger_platform_info.xml
index 668af5a..a2a2d20 100644
--- a/configs/kona/sound_trigger_platform_info.xml
+++ b/configs/kona/sound_trigger_platform_info.xml
@@ -48,7 +48,7 @@
<param backend_dai_name="VA_CDC_DMA_TX_0" />
<!-- Param used to indicate if SVA has dedicated SLIM ports -->
<param dedicated_sva_path="true" />
- <param disable_lpi_budget="true" />
+ <param platform_lpi_enable="true" />
</common_config>
<acdb_ids>
<param DEVICE_HANDSET_MIC_APE="100" />
@@ -70,7 +70,7 @@
<!-- QTI SVA -->
<sound_model_config>
<param vendor_uuid="68ab2d40-e860-11e3-95ef-0002a5d5c51b" />
- <param execution_type="ADSP" /> <!-- value: "ADSP" "DYNAMIC" -->
+ <param execution_type="ADSP" />
<param library="libsmwrapper.so" />
<param max_ape_phrases="20" />
<param max_ape_users="10" />
@@ -78,7 +78,6 @@
<param sample_rate="16000" />
<param bit_width="16" />
<param out_channels="1"/> <!-- Module output channels -->
- <param lpi_enable="true" />
<arm_ss_usecase>
<!-- Options are "KEYWORD_DETECTION", "USER_VERIFICATION", "CUSTOM_DETECTION" -->
@@ -148,7 +147,7 @@
<!-- QTI Music Detection !-->
<sound_model_config>
<param vendor_uuid="876c1b46-9d4d-40cc-a4fd-4d5ec7a80e47" />
- <param execution_type="ADSP" /> <!-- value: "ADSP" "DYNAMIC" -->
+ <param execution_type="ADSP" />
<param library="libsmwrapper.so" />
<param max_ape_phrases="1" />
<param max_ape_users="1" />
@@ -156,7 +155,6 @@
<param sample_rate="16000" />
<param bit_width="16" />
<param out_channels="1"/> <!-- Module output channels -->
- <param lpi_enable="true" />
<!-- Module and param ids with which the algorithm is integrated
in non-graphite firmware (note these must come after gcs params)
Extends flexibility to have different ids based on execution type.
@@ -204,7 +202,7 @@
<!-- Google Hotword -->
<sound_model_config>
<param vendor_uuid="7038ddc8-30f2-11e6-b0ac-40a8f03d3f15" />
- <param execution_type="ADSP" /> <!-- value: "WDSP" "ADSP" "DYNAMIC" -->
+ <param execution_type="ADSP" />
<param library="none" />
<param max_ape_phrases="1" />
<param max_ape_users="1" />
@@ -212,7 +210,6 @@
<param sample_rate="16000" />
<param bit_width="16" />
<param out_channels="1"/> <!-- Module output channels -->
- <param lpi_enable="true" />
<lsm_usecase>
<param capture_device="HANDSET" />
<!-- adm_cfg_profile should match with the one defined under adm_config -->
@@ -258,7 +255,7 @@
<!-- Google Music Detection -->
<sound_model_config>
<param vendor_uuid="9f6ad62a-1f0b-11e7-87c5-40a8f03d3f15" />
- <param execution_type="ADSP" /> <!-- value: "ADSP" "DYNAMIC" -->
+ <param execution_type="ADSP" />
<param library="none" />
<param max_ape_phrases="1" />
<param max_ape_users="1" />
@@ -266,7 +263,6 @@
<param sample_rate="16000" />
<param bit_width="16" />
<param out_channels="1"/> <!-- Module output channels -->
- <param lpi_enable="true" />
<lsm_usecase>
<param capture_device="HANDSET" />
<!-- adm_cfg_profile should match with the one defined under adm_config -->
diff --git a/configs/msmnile/mixer_paths_tavil.xml b/configs/msmnile/mixer_paths_tavil.xml
index cd867ff..244382e 100644
--- a/configs/msmnile/mixer_paths_tavil.xml
+++ b/configs/msmnile/mixer_paths_tavil.xml
@@ -1411,6 +1411,10 @@
<ctl name="MultiMedia8 Mixer SLIM_0_TX" value="1" />
</path>
+ <path name="audio-record-compress headset-mic">
+ <ctl name="MultiMedia8 Mixer SLIM_1_TX" value="1" />
+ </path>
+
<path name="audio-record-compress bt-sco">
<ctl name="MultiMedia8 Mixer SLIM_7_TX" value="1" />
</path>
@@ -1445,28 +1449,14 @@
<path name="audio-record-compress2 bt-sco" />
</path>
- <path name="audio-record-compress2">
- <ctl name="MultiMedia17 Mixer SLIM_0_TX" value="1" />
- </path>
-
- <path name="audio-record-compress2 usb-headset-mic">
- <ctl name="MultiMedia17 Mixer USB_AUDIO_TX" value="1" />
- </path>
-
- <path name="audio-record-compress2 bt-sco">
- <ctl name="MultiMedia17 Mixer SLIM_7_TX" value="1" />
- </path>
-
- <path name="audio-record-compress2 bt-sco-wb">
- <ctl name="BT SampleRate" value="KHZ_16" />
- <path name="audio-record-compress2 bt-sco" />
- </path>
-
-
<path name="low-latency-record">
<ctl name="MultiMedia8 Mixer SLIM_0_TX" value="1" />
</path>
+ <path name="low-latency-record headset-mic">
+ <ctl name="MultiMedia8 Mixer SLIM_1_TX" value="1" />
+ </path>
+
<path name="low-latency-record bt-sco">
<ctl name="MultiMedia8 Mixer SLIM_7_TX" value="1" />
</path>
@@ -1815,6 +1805,10 @@
<ctl name="MultiMedia10 Mixer SLIM_0_TX" value="1" />
</path>
+ <path name="audio-record-voip headset-mic">
+ <ctl name="MultiMedia10 Mixer SLIM_1_TX" value="1" />
+ </path>
+
<path name="audio-record-voip usb-headset-mic">
<ctl name="MultiMedia10 Mixer USB_AUDIO_TX" value="1" />
</path>
@@ -3015,6 +3009,10 @@
<ctl name="MultiMedia16 Mixer SLIM_0_TX" value="1" />
</path>
+ <path name="mmap-record headset-mic">
+ <ctl name="MultiMedia16 Mixer SLIM_1_TX" value="1" />
+ </path>
+
<path name="mmap-record bt-sco">
<ctl name="MultiMedia16 Mixer SLIM_7_TX" value="1" />
</path>
@@ -3052,6 +3050,10 @@
<ctl name="MultiMedia2 Mixer SLIM_0_TX" value="1" />
</path>
+ <path name="hifi-record headset-mic">
+ <ctl name="MultiMedia2 Mixer SLIM_1_TX" value="1" />
+ </path>
+
<path name="hifi-record usb-headset-mic">
<ctl name="MultiMedia2 Mixer USB_AUDIO_TX" value="1" />
</path>
diff --git a/configs/msmnile/msmnile.mk b/configs/msmnile/msmnile.mk
index 763026c..2099509 100644
--- a/configs/msmnile/msmnile.mk
+++ b/configs/msmnile/msmnile.mk
@@ -254,6 +254,13 @@
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio.hal.output.suspend.supported=true
+#Enable AAudio MMAP/NOIRQ data path
+#2 is AAUDIO_POLICY_AUTO so it will try MMAP then fallback to Legacy path
+PRODUCT_PROPERTY_OVERRIDES += aaudio.mmap_policy=2
+#Allow EXCLUSIVE then fall back to SHARED.
+PRODUCT_PROPERTY_OVERRIDES += aaudio.mmap_exclusive_policy=2
+PRODUCT_PROPERTY_OVERRIDES += aaudio.hw_burst_min_usec=2000
+
#enable mirror-link feature
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio.enable.mirrorlink=false
@@ -290,3 +297,10 @@
vendor.qti.hardware.audiohalext@1.0 \
vendor.qti.hardware.audiohalext@1.0-impl \
vendor.qti.hardware.audiohalext-utils
+
+PRODUCT_PACKAGES_ENG += \
+ VoicePrintTest \
+ VoicePrintDemo
+
+PRODUCT_PACKAGES_DEBUG += \
+ AudioSettings
diff --git a/configs/msmsteppe/msmsteppe.mk b/configs/msmsteppe/msmsteppe.mk
index 484181e..ce4a01c 100644
--- a/configs/msmsteppe/msmsteppe.mk
+++ b/configs/msmsteppe/msmsteppe.mk
@@ -263,3 +263,10 @@
android.hardware.audio@4.0-impl \
android.hardware.audio.effect@4.0 \
android.hardware.audio.effect@4.0-impl
+
+PRODUCT_PACKAGES_ENG += \
+ VoicePrintTest \
+ VoicePrintDemo
+
+PRODUCT_PACKAGES_DEBUG += \
+ AudioSettings
diff --git a/configs/sdm660/sdm660.mk b/configs/sdm660/sdm660.mk
index 523d8ff..8269cbe 100644
--- a/configs/sdm660/sdm660.mk
+++ b/configs/sdm660/sdm660.mk
@@ -267,3 +267,10 @@
android.hardware.audio@4.0-impl \
android.hardware.audio.effect@4.0 \
android.hardware.audio.effect@4.0-impl
+
+PRODUCT_PACKAGES_ENG += \
+ VoicePrintTest \
+ VoicePrintDemo
+
+PRODUCT_PACKAGES_DEBUG += \
+ AudioSettings
diff --git a/configs/sdm710/sdm710.mk b/configs/sdm710/sdm710.mk
index b11a404..62dcdb9 100644
--- a/configs/sdm710/sdm710.mk
+++ b/configs/sdm710/sdm710.mk
@@ -304,3 +304,10 @@
android.hardware.audio@4.0-impl \
android.hardware.audio.effect@4.0 \
android.hardware.audio.effect@4.0-impl
+
+PRODUCT_PACKAGES_ENG += \
+ VoicePrintTest \
+ VoicePrintDemo
+
+PRODUCT_PACKAGES_DEBUG += \
+ AudioSettings
diff --git a/configs/sdm845/sdm845.mk b/configs/sdm845/sdm845.mk
index 177b00f..928cca1 100644
--- a/configs/sdm845/sdm845.mk
+++ b/configs/sdm845/sdm845.mk
@@ -271,3 +271,10 @@
android.hardware.audio@4.0-impl \
android.hardware.audio.effect@4.0 \
android.hardware.audio.effect@4.0-impl
+
+PRODUCT_PACKAGES_ENG += \
+ VoicePrintTest \
+ VoicePrintDemo
+
+PRODUCT_PACKAGES_DEBUG += \
+ AudioSettings
diff --git a/configs/trinket/trinket.mk b/configs/trinket/trinket.mk
index bcf970f..6418c21 100644
--- a/configs/trinket/trinket.mk
+++ b/configs/trinket/trinket.mk
@@ -244,3 +244,10 @@
android.hardware.audio@4.0-impl \
android.hardware.audio.effect@4.0 \
android.hardware.audio.effect@4.0-impl
+
+PRODUCT_PACKAGES_ENG += \
+ VoicePrintTest \
+ VoicePrintDemo
+
+PRODUCT_PACKAGES_DEBUG += \
+ AudioSettings
diff --git a/hal/Android.mk b/hal/Android.mk
index 89efe54..f98f9c1 100644
--- a/hal/Android.mk
+++ b/hal/Android.mk
@@ -54,13 +54,13 @@
endif
ifneq ($(filter sdm845,$(TARGET_BOARD_PLATFORM)),)
LOCAL_CFLAGS := -DPLATFORM_SDM845
- LOCAL_CFLAGS += -DMAX_TARGET_SPECIFIC_CHANNEL_CNT="4"
+ LOCAL_CFLAGS += -DMAX_TARGET_SPECIFIC_CHANNEL_CNT="8"
LOCAL_CFLAGS += -DINCALL_MUSIC_ENABLED
LOCAL_CFLAGS += -DINCALL_STEREO_CAPTURE_ENABLED
endif
ifneq ($(filter sdm710,$(TARGET_BOARD_PLATFORM)),)
LOCAL_CFLAGS := -DPLATFORM_SDM710
- LOCAL_CFLAGS += -DMAX_TARGET_SPECIFIC_CHANNEL_CNT="4"
+ LOCAL_CFLAGS += -DMAX_TARGET_SPECIFIC_CHANNEL_CNT="8"
endif
ifneq ($(filter qcs605,$(TARGET_BOARD_PLATFORM)),)
LOCAL_CFLAGS := -DPLATFORM_QCS605
@@ -494,6 +494,7 @@
LOCAL_SHARED_LIBRARIES += vendor.qti.hardware.audiohalext@1.0
endif
+LOCAL_CFLAGS += -D_GNU_SOURCE
LOCAL_CFLAGS += -Wall -Werror
LOCAL_COPY_HEADERS_TO := mm-audio
diff --git a/hal/audio_extn/Android.mk b/hal/audio_extn/Android.mk
index 6af15b2..5c65268 100755
--- a/hal/audio_extn/Android.mk
+++ b/hal/audio_extn/Android.mk
@@ -63,7 +63,7 @@
AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
-ifneq ($(filter sdm845 sdm710 qcs605 msmnile kona $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter sdm845 sdm710 qcs605 msmnile kona lito $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
# B-family platform uses msm8974 code base
AUDIO_PLATFORM = msm8974
MULTIPLE_HW_VARIANTS_ENABLED := true
@@ -121,7 +121,7 @@
AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
-ifneq ($(filter sdm845 sdm710 msmnile kona $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter sdm845 sdm710 msmnile kona lito $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
# B-family platform uses msm8974 code base
AUDIO_PLATFORM = msm8974
MULTIPLE_HW_VARIANTS_ENABLED := true
@@ -182,7 +182,7 @@
PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
-ifneq ($(filter sdm845 sdm710 msmnile kona $(MSMSTEPPE) $(TRINKET),$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter sdm845 sdm710 msmnile kona lito $(MSMSTEPPE) $(TRINKET),$(TARGET_BOARD_PLATFORM)),)
# B-family platform uses msm8974 code base
AUDIO_PLATFORM = msm8974
endif
@@ -234,7 +234,7 @@
#--------------------------------------------
include $(CLEAR_VARS)
-ifneq ($(filter sdm845 sdm710 msmnile kona $(MSMSTEPPE) $(TRINKET),$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter sdm845 sdm710 msmnile kona lito $(MSMSTEPPE) $(TRINKET),$(TARGET_BOARD_PLATFORM)),)
# B-family platform uses msm8974 code base
AUDIO_PLATFORM = msm8974
endif
@@ -277,6 +277,7 @@
$(call include-path-for, audio-effects)
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/techpack/audio/include
+LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
LOCAL_HEADER_LIBRARIES += libhardware_headers
LOCAL_HEADER_LIBRARIES += libsystem_headers
@@ -287,7 +288,7 @@
include $(CLEAR_VARS)
-ifneq ($(filter sdm845 sdm710 msmnile kona $(MSMSTEPPE) $(TRINKET),$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter sdm845 sdm710 msmnile kona lito $(MSMSTEPPE) $(TRINKET),$(TARGET_BOARD_PLATFORM)),)
# B-family platform uses msm8974 code base
AUDIO_PLATFORM = msm8974
endif
@@ -330,6 +331,7 @@
$(call include-path-for, audio-effects)
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/techpack/audio/include
+LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
LOCAL_HEADER_LIBRARIES += libhardware_headers
LOCAL_HEADER_LIBRARIES += libsystem_headers
@@ -346,7 +348,7 @@
PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
-ifneq ($(filter sdm845 sdm710 msmnile kona $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter sdm845 sdm710 msmnile kona lito $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
# B-family platform uses msm8974 code base
AUDIO_PLATFORM = msm8974
MULTIPLE_HW_VARIANTS_ENABLED := true
diff --git a/hal/audio_extn/audio_extn.c b/hal/audio_extn/audio_extn.c
index 077ec99..f440362 100644
--- a/hal/audio_extn/audio_extn.c
+++ b/hal/audio_extn/audio_extn.c
@@ -46,6 +46,7 @@
#include <cutils/properties.h>
#include <log/log.h>
#include <unistd.h>
+
#include "audio_hw.h"
#include "audio_extn.h"
#include "voice_extn.h"
@@ -409,6 +410,25 @@
}
#endif
+/* Affine AHAL thread to CPU core */
+void audio_extn_set_cpu_affinity()
+{
+ cpu_set_t cpuset;
+ struct sched_param sched_param;
+ int policy = SCHED_FIFO, rc = 0;
+
+ ALOGV("%s: Set CPU affinity for read thread", __func__);
+ CPU_ZERO(&cpuset);
+ if (sched_setaffinity(0, sizeof(cpuset), &cpuset) != 0)
+ ALOGE("%s: CPU Affinity allocation failed for Capture thread",
+ __func__);
+
+ sched_param.sched_priority = sched_get_priority_min(policy);
+ rc = sched_setscheduler(0, policy, &sched_param);
+ if (rc != 0)
+ ALOGE("%s: Failed to set realtime priority", __func__);
+}
+
// START: VBAT =============================================================
void vbat_feature_init(bool is_feature_enabled)
{
diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h
index 079d33a..863916b 100644
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -1209,4 +1209,6 @@
bool audio_extn_is_custom_stereo_enabled();
void audio_extn_send_dual_mono_mixing_coefficients(struct stream_out *out);
+
+void audio_extn_set_cpu_affinity();
#endif /* AUDIO_EXTN_H */
diff --git a/hal/audio_extn/ffv.c b/hal/audio_extn/ffv.c
old mode 100755
new mode 100644
index a57f68c..a5b15cc
--- a/hal/audio_extn/ffv.c
+++ b/hal/audio_extn/ffv.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -45,6 +45,8 @@
#include <cutils/log.h>
#include <pthread.h>
#include <sys/resource.h>
+#include <unistd.h>
+#include <system/thread_defs.h>
#include "audio_hw.h"
#include "audio_extn.h"
@@ -599,6 +601,7 @@
int param_size = 0;
FfvStatusType status_type;
int ret = 0;
+ ffv_quadrx_use_dwnmix_param_t quad_downmix;
ALOGV("%s: entry", __func__);
/* notify library to reset AEC during each start */
@@ -620,6 +623,20 @@
return -ENOMEM;
}
+ if (in_snd_device == SND_DEVICE_IN_EC_REF_LOOPBACK_QUAD) {
+ quad_downmix.quadrx_dwnmix_enable = true;
+ ALOGD("%s: set param for 4 ch ec, handle %p", __func__, ffvmod.handle);
+ status_type = ffv_set_param_fn(ffvmod.handle,
+ (char *)&quad_downmix,
+ FFV_QUADRX_USE_DWNMIX_PARAM,
+ sizeof(ffv_quadrx_use_dwnmix_param_t));
+ if (status_type) {
+ ALOGE("%s: ERROR. ffv_set_param_fn for quad channel ec ref %d",
+ __func__, status_type);
+ return -EINVAL;
+ }
+ }
+
pthread_mutex_lock(&ffvmod.init_lock);
uc_info_tx->id = USECASE_AUDIO_EC_REF_LOOPBACK;
uc_info_tx->type = PCM_CAPTURE;
@@ -775,6 +792,8 @@
return status;
}
}
+ audio_extn_set_cpu_affinity();
+ setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_AUDIO);
ffvmod.capture_started = true;
}
diff --git a/hal/audio_extn/sndmonitor.c b/hal/audio_extn/sndmonitor.c
index ae9bb49..2bcb175 100644
--- a/hal/audio_extn/sndmonitor.c
+++ b/hal/audio_extn/sndmonitor.c
@@ -222,7 +222,8 @@
(strncasecmp(card_id, "sm", 2) != 0) &&
(strncasecmp(card_id, "trinket", 7) != 0) &&
(strncasecmp(card_id, "apq", 3) != 0) &&
- (strncasecmp(card_id, "sa", 2) != 0)) {
+ (strncasecmp(card_id, "sa", 2) != 0) &&
+ (strncasecmp(card_id, "kona", 4) != 0)) {
ALOGW("Skip over non-ADSP snd card %s", card_id);
continue;
}
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index bb4db48..13fd5d1 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -90,6 +90,7 @@
#define DIRECT_PCM_NUM_FRAGMENTS 2
#define COMPRESS_PLAYBACK_VOLUME_MAX 0x2000
#define VOIP_PLAYBACK_VOLUME_MAX 0x2000
+#define MMAP_PLAYBACK_VOLUME_MAX 0x2000
#define PCM_PLAYBACK_VOLUME_MAX 0x2000
#define DSD_VOLUME_MIN_DB (-110)
@@ -488,6 +489,7 @@
static int check_a2dp_restore_l(struct audio_device *adev, struct stream_out *out, bool restore);
static int out_set_compr_volume(struct audio_stream_out *stream, float left, float right);
+static int out_set_mmap_volume(struct audio_stream_out *stream, float left, float right);
static int out_set_voip_volume(struct audio_stream_out *stream, float left, float right);
static int out_set_pcm_volume(struct audio_stream_out *stream, float left, float right);
@@ -3308,6 +3310,7 @@
__func__, adev->snd_card, out->pcm_device_id, out->config.format);
if (out->usecase == USECASE_AUDIO_PLAYBACK_MMAP) {
+ ALOGD("%s: Starting MMAP stream", __func__);
if (out->pcm == NULL || !pcm_is_ready(out->pcm)) {
ALOGE("%s: pcm stream not ready", __func__);
goto error_open;
@@ -3317,6 +3320,7 @@
ALOGE("%s: MMAP pcm_start failed ret %d", __func__, ret);
goto error_open;
}
+ out_set_mmap_volume(&out->stream, out->volume_l, out->volume_r);
} else if (!is_offload_usecase(out->usecase)) {
unsigned int flags = PCM_OUT;
unsigned int pcm_open_retry_count = 0;
@@ -4593,6 +4597,37 @@
return db;
}
+static int out_set_mmap_volume(struct audio_stream_out *stream, float left,
+ float right)
+{
+ struct stream_out *out = (struct stream_out *)stream;
+ long volume = 0;
+ char mixer_ctl_name[128] = "";
+ struct audio_device *adev = out->dev;
+ struct mixer_ctl *ctl = NULL;
+ int pcm_device_id = platform_get_pcm_device_id(out->usecase,
+ PCM_PLAYBACK);
+
+ snprintf(mixer_ctl_name, sizeof(mixer_ctl_name),
+ "Playback %d Volume", pcm_device_id);
+ ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name);
+ if (!ctl) {
+ ALOGE("%s: Could not get ctl for mixer cmd - %s",
+ __func__, mixer_ctl_name);
+ return -EINVAL;
+ }
+ if (left != right)
+ ALOGW("%s: Left and right channel volume mismatch:%f,%f",
+ __func__, left, right);
+ volume = (long)(left * (MMAP_PLAYBACK_VOLUME_MAX*1.0));
+ if (mixer_ctl_set_value(ctl, 0, volume) < 0){
+ ALOGE("%s:ctl for mixer cmd - %s, volume %ld returned error",
+ __func__, mixer_ctl_name, volume);
+ return -EINVAL;
+ }
+ return 0;
+}
+
static int out_set_compr_volume(struct audio_stream_out *stream, float left,
float right)
{
@@ -4685,6 +4720,7 @@
int volume[2];
int ret = 0;
+ ALOGD("%s: called with left_vol=%f, right_vol=%f", __func__, left, right);
if (out->usecase == USECASE_AUDIO_PLAYBACK_MULTI_CH) {
/* only take left channel into account: the API is for stereo anyway */
out->muted = (left == 0.0f);
@@ -4713,7 +4749,7 @@
return 0;
} else {
pthread_mutex_lock(&out->compr_mute_lock);
- ALOGE("%s: compress mute %d", __func__, out->a2dp_compress_mute);
+ ALOGV("%s: compress mute %d", __func__, out->a2dp_compress_mute);
if (!out->a2dp_compress_mute)
ret = out_set_compr_volume(stream, left, right);
out->volume_l = left;
@@ -4733,6 +4769,13 @@
out->volume_l = left;
out->volume_r = right;
return ret;
+ } else if (out->usecase == USECASE_AUDIO_PLAYBACK_MMAP) {
+ ALOGV("%s: MMAP set volume called", __func__);
+ if (!out->standby)
+ ret = out_set_mmap_volume(stream, left, right);
+ out->volume_l = left;
+ out->volume_r = right;
+ return ret;
} else if (out->usecase == USECASE_AUDIO_PLAYBACK_LOW_LATENCY ||
out->usecase == USECASE_AUDIO_PLAYBACK_DEEP_BUFFER ||
out->usecase == USECASE_AUDIO_PLAYBACK_ULL) {
@@ -5094,8 +5137,6 @@
__func__, frames, frame_size, bytes_to_write);
if (out->usecase == USECASE_INCALL_MUSIC_UPLINK ||
- (out->usecase == USECASE_AUDIO_PLAYBACK_VOIP
- && !voice_extn_is_compress_voip_supported()) ||
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;
@@ -5564,8 +5605,9 @@
unsigned int frames1 = 0;
const char *step = "";
uint32_t mmap_size;
+ uint32_t buffer_size;
- ALOGV("%s", __func__);
+ ALOGD("%s", __func__);
lock_output_stream(out);
pthread_mutex_lock(&adev->lock);
@@ -5595,7 +5637,7 @@
adjust_mmap_period_count(&out->config, min_size_frames);
- ALOGV("%s: Opening PCM device card_id(%d) device_id(%d), channels %d",
+ ALOGD("%s: Opening PCM device card_id(%d) device_id(%d), channels %d",
__func__, adev->snd_card, out->pcm_device_id, out->config.channels);
out->pcm = pcm_open(adev->snd_card, out->pcm_device_id,
(PCM_OUT | PCM_MMAP | PCM_NOIRQ | PCM_MONOTONIC), &out->config);
@@ -5618,14 +5660,22 @@
goto exit;
}
info->buffer_size_frames = pcm_get_buffer_size(out->pcm);
+ buffer_size = pcm_frames_to_bytes(out->pcm, info->buffer_size_frames);
info->burst_size_frames = out->config.period_size;
ret = platform_get_mmap_data_fd(adev->platform,
out->pcm_device_id, 0 /*playback*/,
&info->shared_memory_fd,
&mmap_size);
if (ret < 0) {
- step = "get_mmap_fd";
- goto exit;
+ // Fall back to non exclusive mode
+ info->shared_memory_fd = pcm_get_poll_fd(out->pcm);
+ } else {
+ if (mmap_size < buffer_size) {
+ step = "mmap";
+ goto exit;
+ }
+ // FIXME: indicate exclusive mode support by returning a negative buffer size
+ info->buffer_size_frames *= -1;
}
memset(info->shared_memory_address, 0, pcm_frames_to_bytes(out->pcm,
info->buffer_size_frames));
@@ -5639,7 +5689,7 @@
out->standby = false;
ret = 0;
- ALOGV("%s: got mmap buffer address %p info->buffer_size_frames %d",
+ ALOGD("%s: got mmap buffer address %p info->buffer_size_frames %d",
__func__, info->shared_memory_address, info->buffer_size_frames);
exit:
@@ -5770,13 +5820,14 @@
audio_extn_cin_stop_input_stream(in);
}
- if (do_stop) {
- if (in->pcm) {
- ATRACE_BEGIN("pcm_in_close");
- pcm_close(in->pcm);
- ATRACE_END();
- in->pcm = NULL;
- }
+ if (in->pcm) {
+ ATRACE_BEGIN("pcm_in_close");
+ pcm_close(in->pcm);
+ ATRACE_END();
+ in->pcm = NULL;
+ }
+
+ if(do_stop) {
adev->enable_voicerx = false;
platform_set_echo_reference(adev, false, AUDIO_DEVICE_NONE);
status = stop_input_stream(in);
@@ -6332,6 +6383,8 @@
unsigned int offset1 = 0;
unsigned int frames1 = 0;
const char *step = "";
+ uint32_t mmap_size = 0;
+ uint32_t buffer_size = 0;
pthread_mutex_lock(&adev->lock);
ALOGV("%s in %p", __func__, in);
@@ -6387,12 +6440,27 @@
step = "begin";
goto exit;
}
- info->buffer_size_frames = pcm_get_buffer_size(in->pcm);
- info->burst_size_frames = in->config.period_size;
- info->shared_memory_fd = pcm_get_poll_fd(in->pcm);
- memset(info->shared_memory_address, 0, pcm_frames_to_bytes(in->pcm,
- info->buffer_size_frames));
+ info->buffer_size_frames = pcm_get_buffer_size(in->pcm);
+ buffer_size = pcm_frames_to_bytes(in->pcm, info->buffer_size_frames);
+ info->burst_size_frames = in->config.period_size;
+ ret = platform_get_mmap_data_fd(adev->platform,
+ in->pcm_device_id, 1 /*capture*/,
+ &info->shared_memory_fd,
+ &mmap_size);
+ if (ret < 0) {
+ // Fall back to non exclusive mode
+ info->shared_memory_fd = pcm_get_poll_fd(in->pcm);
+ } else {
+ if (mmap_size < buffer_size) {
+ step = "mmap";
+ goto exit;
+ }
+ // FIXME: indicate exclusive mode support by returning a negative buffer size
+ info->buffer_size_frames *= -1;
+ }
+
+ memset(info->shared_memory_address, 0, buffer_size);
ret = pcm_mmap_commit(in->pcm, 0, MMAP_PERIOD_SIZE);
if (ret < 0) {
@@ -7779,8 +7847,7 @@
bool valid_ch = audio_channel_count_from_in_mask(in->channel_mask) == 1;
if(!voice_extn_is_compress_voip_supported()) {
- if (valid_rate && valid_ch &&
- in->dev->mode == AUDIO_MODE_IN_COMMUNICATION) {
+ if (valid_rate && valid_ch) {
in->usecase = USECASE_AUDIO_RECORD_VOIP;
in->config = default_pcm_config_voip_copp;
in->config.period_size = VOIP_IO_BUF_SIZE(in->sample_rate,
@@ -8090,22 +8157,6 @@
pthread_mutex_lock(&adev->lock);
ret_val = audio_extn_check_and_set_multichannel_usecase(adev,
in, config, &channel_mask_updated);
-#ifdef CONCURRENT_CAPTURE_ENABLED
- /* Acquire lock to avoid two concurrent use cases initialized to
- same pcm record use case*/
-
- if(in->usecase == USECASE_AUDIO_RECORD) {
- if (!(adev->pcm_record_uc_state)) {
- ALOGV("%s: using USECASE_AUDIO_RECORD",__func__);
- adev->pcm_record_uc_state = 1;
- } else {
- /* Assign compress record use case for second record */
- in->usecase = USECASE_AUDIO_RECORD_COMPRESS2;
- in->flags |= AUDIO_INPUT_FLAG_COMPRESS;
- ALOGV("%s: overriding usecase with USECASE_AUDIO_RECORD_COMPRESS2 and appending compress flag", __func__);
- }
- }
-#endif
pthread_mutex_unlock(&adev->lock);
if (!ret_val) {
@@ -8157,6 +8208,24 @@
goto err_open;
}
}
+#ifdef CONCURRENT_CAPTURE_ENABLED
+ /* Acquire lock to avoid two concurrent use cases initialized to
+ same pcm record use case */
+
+ pthread_mutex_lock(&adev->lock);
+ if (in->usecase == USECASE_AUDIO_RECORD) {
+ if (!(adev->pcm_record_uc_state)) {
+ ALOGV("%s: using USECASE_AUDIO_RECORD",__func__);
+ adev->pcm_record_uc_state = 1;
+ } else {
+ /* Assign compress record use case for second record */
+ in->usecase = USECASE_AUDIO_RECORD_COMPRESS2;
+ in->flags |= AUDIO_INPUT_FLAG_COMPRESS;
+ ALOGV("%s: overriding usecase with USECASE_AUDIO_RECORD_COMPRESS2 and appending compress flag", __func__);
+ }
+ }
+ pthread_mutex_unlock(&adev->lock);
+#endif
}
audio_extn_utils_update_stream_input_app_type_cfg(adev->platform,
&adev->streams_input_cfg_list,
@@ -8747,6 +8816,7 @@
adev->perf_lock_opts[1] = 0x20E;
adev->perf_lock_opts_size = 2;
adev->dsp_bit_width_enforce_mode = 0;
+ adev->enable_hfp = false;
/* Loads platform specific libraries dynamically */
adev->platform = platform_init(adev);
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index adfeaa5..7b1f386 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -4764,33 +4764,31 @@
else
snd_device = SND_DEVICE_OUT_BT_SCO;
} else if (devices & (AUDIO_DEVICE_OUT_SPEAKER | AUDIO_DEVICE_OUT_SPEAKER_SAFE)) {
- if (!adev->enable_hfp) {
- snd_device = SND_DEVICE_OUT_VOICE_SPEAKER;
- } else {
- snd_device = SND_DEVICE_OUT_VOICE_SPEAKER_HFP;
- }
- } else if (devices & AUDIO_DEVICE_OUT_SPEAKER) {
- if (my_data->is_vbat_speaker || my_data->is_bcl_speaker) {
- if (hw_info_is_stereo_spkr(my_data->hw_info)) {
- if (my_data->mono_speaker == SPKR_1)
- snd_device = SND_DEVICE_OUT_VOICE_SPEAKER_VBAT;
- else
- snd_device = SND_DEVICE_OUT_VOICE_SPEAKER_2_VBAT;
- } else
+ if (my_data->is_vbat_speaker || my_data->is_bcl_speaker) {
+ if (hw_info_is_stereo_spkr(my_data->hw_info)) {
+ if (my_data->mono_speaker == SPKR_1)
snd_device = SND_DEVICE_OUT_VOICE_SPEAKER_VBAT;
- } else {
- if (hw_info_is_stereo_spkr(my_data->hw_info)) {
- if (my_data->voice_speaker_stereo)
- snd_device = SND_DEVICE_OUT_VOICE_SPEAKER_STEREO;
- else {
- if (my_data->mono_speaker == SPKR_1)
- snd_device = SND_DEVICE_OUT_VOICE_SPEAKER;
- else
- snd_device = SND_DEVICE_OUT_VOICE_SPEAKER_2;
- }
- } else
+ else
+ snd_device = SND_DEVICE_OUT_VOICE_SPEAKER_2_VBAT;
+ } else
+ snd_device = SND_DEVICE_OUT_VOICE_SPEAKER_VBAT;
+ } else {
+ if (hw_info_is_stereo_spkr(my_data->hw_info)) {
+ if (my_data->voice_speaker_stereo)
+ snd_device = SND_DEVICE_OUT_VOICE_SPEAKER_STEREO;
+ else if (adev->enable_hfp)
+ snd_device = SND_DEVICE_OUT_VOICE_SPEAKER_HFP;
+ else {
+ if (my_data->mono_speaker == SPKR_1)
snd_device = SND_DEVICE_OUT_VOICE_SPEAKER;
- }
+ else
+ snd_device = SND_DEVICE_OUT_VOICE_SPEAKER_2;
+ }
+ } else if (adev->enable_hfp)
+ snd_device = SND_DEVICE_OUT_VOICE_SPEAKER_HFP;
+ else
+ snd_device = SND_DEVICE_OUT_VOICE_SPEAKER;
+ }
} else if (devices & AUDIO_DEVICE_OUT_ALL_A2DP) {
snd_device = SND_DEVICE_OUT_BT_A2DP;
} else if (devices & AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET ||