Merge "audio: Add audio-playback-voip bt-a2dp mixer path."
diff --git a/configs/apq8098_latv/apq8098_latv.mk b/configs/apq8098_latv/apq8098_latv.mk
old mode 100755
new mode 100644
index 493d5ce..088f3ed
--- a/configs/apq8098_latv/apq8098_latv.mk
+++ b/configs/apq8098_latv/apq8098_latv.mk
@@ -69,6 +69,7 @@
AUDIO_FEATURE_ENABLED_RAS := true
AUDIO_FEATURE_ENABLED_DYNAMIC_LOG := true
AUDIO_FEATURE_ENABLED_SND_MONITOR := true
+AUDIO_FEATURE_ENABLED_MS12_ARM := true
##AUDIO_FEATURE_FLAGS
#Audio Specific device overlays
diff --git a/configs/msm8998/audio_platform_info.xml b/configs/msm8998/audio_platform_info.xml
old mode 100644
new mode 100755
index 51c3640..e984037
--- a/configs/msm8998/audio_platform_info.xml
+++ b/configs/msm8998/audio_platform_info.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<!-- Copyright (c) 2014, 2016-2017, The Linux Foundation. All rights reserved. -->
+<!-- Copyright (c) 2014, 2016-2018, 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 -->
@@ -63,7 +63,7 @@
<usecase name="USECASE_AUDIO_RECORD_AFE_PROXY" type="in" id="7"/>
<usecase name="USECASE_AUDIO_RECORD_LOW_LATENCY" type="in" id="17" />
<usecase name="USECASE_AUDIO_PLAYBACK_ULL" type="out" id="17" />
- <usecase name="USECASE_AUDIO_PLAYBACK_EXT_DISP_SILENCE" type="out" id="27" />
+ <usecase name="USECASE_AUDIO_PLAYBACK_SILENCE" type="out" id="27" />
<usecase name="USECASE_AUDIO_PLAYBACK_MMAP" type="out" id="33" />
<usecase name="USECASE_AUDIO_RECORD_MMAP" type="in" id="33" />
</pcm_ids>
diff --git a/configs/msm8998/audio_policy.conf b/configs/msm8998/audio_policy.conf
index f275e16..6f9bdbb 100644
--- a/configs/msm8998/audio_policy.conf
+++ b/configs/msm8998/audio_policy.conf
@@ -26,21 +26,21 @@
sampling_rates 44100|48000
channel_masks AUDIO_CHANNEL_OUT_STEREO
formats AUDIO_FORMAT_PCM_16_BIT
- devices AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_FM|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
+ devices AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_FM|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_USB_HEADSET|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
flags AUDIO_OUTPUT_FLAG_FAST|AUDIO_OUTPUT_FLAG_PRIMARY
}
raw {
sampling_rates 48000
channel_masks AUDIO_CHANNEL_OUT_STEREO
formats AUDIO_FORMAT_PCM_16_BIT
- devices AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
+ devices AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_USB_HEADSET|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
flags AUDIO_OUTPUT_FLAG_FAST|AUDIO_OUTPUT_FLAG_RAW
}
deep_buffer {
sampling_rates 44100|48000
channel_masks AUDIO_CHANNEL_OUT_STEREO
formats AUDIO_FORMAT_PCM_16_BIT
- devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_FM|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
+ devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_FM|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_USB_HEADSET|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
flags AUDIO_OUTPUT_FLAG_DEEP_BUFFER
}
compress_passthrough {
@@ -54,14 +54,14 @@
sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000|64000|88200|96000|176400|192000|352800|384000
channel_masks AUDIO_CHANNEL_OUT_MONO|AUDIO_CHANNEL_OUT_STEREO|AUDIO_CHANNEL_OUT_2POINT1|AUDIO_CHANNEL_OUT_QUAD|AUDIO_CHANNEL_OUT_PENTA|AUDIO_CHANNEL_OUT_5POINT1|AUDIO_CHANNEL_OUT_6POINT1|AUDIO_CHANNEL_OUT_7POINT1
formats AUDIO_FORMAT_PCM_16_BIT|AUDIO_FORMAT_PCM_24_BIT_PACKED|AUDIO_FORMAT_PCM_8_24_BIT|AUDIO_FORMAT_PCM_32_BIT
- devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
+ devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_USB_HEADSET|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
flags AUDIO_OUTPUT_FLAG_DIRECT
}
compress_offload {
sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000|64000|88200|96000|176400|192000
channel_masks AUDIO_CHANNEL_OUT_MONO|AUDIO_CHANNEL_OUT_STEREO|AUDIO_CHANNEL_OUT_2POINT1|AUDIO_CHANNEL_OUT_QUAD|AUDIO_CHANNEL_OUT_PENTA|AUDIO_CHANNEL_OUT_5POINT1|AUDIO_CHANNEL_OUT_6POINT1|AUDIO_CHANNEL_OUT_7POINT1
formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_FLAC|AUDIO_FORMAT_ALAC|AUDIO_FORMAT_APE|AUDIO_FORMAT_AAC_LC|AUDIO_FORMAT_AAC_HE_V1|AUDIO_FORMAT_AAC_HE_V2|AUDIO_FORMAT_WMA|AUDIO_FORMAT_WMA_PRO|AUDIO_FORMAT_VORBIS|AUDIO_FORMAT_AAC_ADTS_LC|AUDIO_FORMAT_AAC_ADTS_HE_V1|AUDIO_FORMAT_AAC_ADTS_HE_V2
- devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
+ devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_USB_HEADSET|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING
}
dsd_compress_passthrough {
@@ -91,7 +91,7 @@
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
formats AUDIO_FORMAT_PCM_16_BIT|AUDIO_FORMAT_AMR_NB|AUDIO_FORMAT_AMR_WB|AUDIO_FORMAT_QCELP|AUDIO_FORMAT_EVRC|AUDIO_FORMAT_EVRCB|AUDIO_FORMAT_EVRCWB|AUDIO_FORMAT_EVRCNW
- devices AUDIO_DEVICE_IN_WIRED_HEADSET|AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET|AUDIO_DEVICE_IN_FM_TUNER|AUDIO_DEVICE_IN_VOICE_CALL|AUDIO_DEVICE_IN_USB_DEVICE
+ devices AUDIO_DEVICE_IN_WIRED_HEADSET|AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET|AUDIO_DEVICE_IN_FM_TUNER|AUDIO_DEVICE_IN_VOICE_CALL|AUDIO_DEVICE_IN_USB_DEVICE|AUDIO_DEVICE_IN_USB_HEADSET
}
surround_sound {
sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000
diff --git a/configs/msm8998/audio_policy_configuration.xml b/configs/msm8998/audio_policy_configuration.xml
index e2ec755..929e8f2 100644
--- a/configs/msm8998/audio_policy_configuration.xml
+++ b/configs/msm8998/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-2018, The Linux Foundation. All rights reserved
Not a Contribution.
-->
<!-- Copyright (C) 2015 The Android Open Source Project
@@ -274,7 +274,12 @@
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort>
+ <devicePort tagName="USB Headset Out" type="AUDIO_DEVICE_OUT_USB_HEADSET" role="sink">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
+ </devicePort>
+ <!-- Input devices declaration, i.e. Source DEVICE PORT -->
<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"
@@ -309,6 +314,13 @@
<profile name="" format="AUDIO_FORMAT_PCM_8_24_BIT"
samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort>
+ <devicePort tagName="USB Headset In" type="AUDIO_DEVICE_IN_USB_HEADSET" role="source">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
+ <profile name="" format="AUDIO_FORMAT_PCM_8_24_BIT"
+ samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
+ </devicePort>
+
</devicePorts>
<!-- route declaration, i.e. list all available sources for a given sink -->
<routes>
@@ -332,25 +344,27 @@
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out"/>
<route type="mix" sink="USB Device Out"
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out,hifi_playback"/>
+ <route type="mix" sink="USB Headset Out"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out,hifi_playback"/>
<route type="mix" sink="Telephony Tx"
sources="voice_tx"/>
<route type="mix" sink="voice_rx"
sources="Telephony Rx"/>
<route type="mix" sink="primary input"
- sources="Wired Headset Mic,BT SCO Headset Mic,FM Tuner,USB Device In,Telephony Rx"/>
+ sources="Wired Headset Mic,BT SCO Headset Mic,FM Tuner,USB Device In,USB Headset In,Telephony Rx"/>
<route type="mix" sink="surround_sound"
sources="Built-In Mic,Built-In Back Mic"/>
<route type="mix" sink="record_24"
sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic"/>
<route type="mix" sink="mmap_no_irq_in"
- sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic,USB Device In"/>
+ sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic,USB Device In,USB Headset In"/>
<route type="mix" sink="BT A2DP Out"
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload"/>
<route type="mix" sink="BT A2DP Headphones"
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload"/>
<route type="mix" sink="BT A2DP Speaker"
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload"/>
- <route type="mix" sink="hifi_input" sources="USB Device In" />
+ <route type="mix" sink="hifi_input" sources="USB Device In,USB Headset In" />
</routes>
</module>
diff --git a/configs/sdm660/audio_platform_info.xml b/configs/sdm660/audio_platform_info.xml
old mode 100644
new mode 100755
index b5aa892..5d905fb
--- a/configs/sdm660/audio_platform_info.xml
+++ b/configs/sdm660/audio_platform_info.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<!-- Copyright (c) 2014, 2016-2017, The Linux Foundation. All rights reserved. -->
+<!-- Copyright (c) 2014, 2016-2018, 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 -->
@@ -59,7 +59,7 @@
<usecase name="USECASE_AUDIO_RECORD_AFE_PROXY" type="in" id="7"/>
<usecase name="USECASE_AUDIO_RECORD_LOW_LATENCY" type="in" id="17" />
<usecase name="USECASE_AUDIO_PLAYBACK_ULL" type="out" id="17" />
- <usecase name="USECASE_AUDIO_PLAYBACK_EXT_DISP_SILENCE" type="out" id="27" />
+ <usecase name="USECASE_AUDIO_PLAYBACK_SILENCE" type="out" id="27" />
<usecase name="USECASE_AUDIO_HFP_SCO" type="in" id="12" />
<usecase name="USECASE_AUDIO_HFP_SCO_WB" type="in" id="12" />
</pcm_ids>
diff --git a/configs/sdm660/audio_platform_info_extcodec.xml b/configs/sdm660/audio_platform_info_extcodec.xml
old mode 100644
new mode 100755
index 0e65a31..cc0156b
--- a/configs/sdm660/audio_platform_info_extcodec.xml
+++ b/configs/sdm660/audio_platform_info_extcodec.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<!-- Copyright (c) 2014, 2016-2017, The Linux Foundation. All rights reserved.-->
+<!-- Copyright (c) 2014, 2016-2018, 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 -->
@@ -67,7 +67,7 @@
<usecase name="USECASE_AUDIO_RECORD_AFE_PROXY" type="in" id="7"/>
<usecase name="USECASE_AUDIO_RECORD_LOW_LATENCY" type="in" id="17" />
<usecase name="USECASE_AUDIO_PLAYBACK_ULL" type="out" id="17" />
- <usecase name="USECASE_AUDIO_PLAYBACK_EXT_DISP_SILENCE" type="out" id="27" />
+ <usecase name="USECASE_AUDIO_PLAYBACK_SILENCE" type="out" id="27" />
<usecase name="USECASE_AUDIO_HFP_SCO" type="in" id="35" />
<usecase name="USECASE_AUDIO_HFP_SCO_WB" type="in" id="35" />
</pcm_ids>
diff --git a/configs/sdm660/audio_platform_info_skush.xml b/configs/sdm660/audio_platform_info_skush.xml
old mode 100644
new mode 100755
index 76fc963..cc7bb01
--- a/configs/sdm660/audio_platform_info_skush.xml
+++ b/configs/sdm660/audio_platform_info_skush.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<!-- Copyright (c) 2014, 2016-2017, The Linux Foundation. All rights reserved. -->
+<!-- Copyright (c) 2014, 2016-2018, 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 -->
@@ -60,7 +60,7 @@
<usecase name="USECASE_AUDIO_RECORD_AFE_PROXY" type="in" id="7"/>
<usecase name="USECASE_AUDIO_RECORD_LOW_LATENCY" type="in" id="17" />
<usecase name="USECASE_AUDIO_PLAYBACK_ULL" type="out" id="17" />
- <usecase name="USECASE_AUDIO_PLAYBACK_EXT_DISP_SILENCE" type="out" id="27" />
+ <usecase name="USECASE_AUDIO_PLAYBACK_SILENCE" type="out" id="27" />
<usecase name="USECASE_AUDIO_HFP_SCO" type="in" id="12" />
<usecase name="USECASE_AUDIO_HFP_SCO_WB" type="in" id="12" />
</pcm_ids>
diff --git a/configs/sdm660/audio_policy.conf b/configs/sdm660/audio_policy.conf
index f275e16..6f9bdbb 100644
--- a/configs/sdm660/audio_policy.conf
+++ b/configs/sdm660/audio_policy.conf
@@ -26,21 +26,21 @@
sampling_rates 44100|48000
channel_masks AUDIO_CHANNEL_OUT_STEREO
formats AUDIO_FORMAT_PCM_16_BIT
- devices AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_FM|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
+ devices AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_FM|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_USB_HEADSET|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
flags AUDIO_OUTPUT_FLAG_FAST|AUDIO_OUTPUT_FLAG_PRIMARY
}
raw {
sampling_rates 48000
channel_masks AUDIO_CHANNEL_OUT_STEREO
formats AUDIO_FORMAT_PCM_16_BIT
- devices AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
+ devices AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_USB_HEADSET|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
flags AUDIO_OUTPUT_FLAG_FAST|AUDIO_OUTPUT_FLAG_RAW
}
deep_buffer {
sampling_rates 44100|48000
channel_masks AUDIO_CHANNEL_OUT_STEREO
formats AUDIO_FORMAT_PCM_16_BIT
- devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_FM|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
+ devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_FM|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_USB_HEADSET|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
flags AUDIO_OUTPUT_FLAG_DEEP_BUFFER
}
compress_passthrough {
@@ -54,14 +54,14 @@
sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000|64000|88200|96000|176400|192000|352800|384000
channel_masks AUDIO_CHANNEL_OUT_MONO|AUDIO_CHANNEL_OUT_STEREO|AUDIO_CHANNEL_OUT_2POINT1|AUDIO_CHANNEL_OUT_QUAD|AUDIO_CHANNEL_OUT_PENTA|AUDIO_CHANNEL_OUT_5POINT1|AUDIO_CHANNEL_OUT_6POINT1|AUDIO_CHANNEL_OUT_7POINT1
formats AUDIO_FORMAT_PCM_16_BIT|AUDIO_FORMAT_PCM_24_BIT_PACKED|AUDIO_FORMAT_PCM_8_24_BIT|AUDIO_FORMAT_PCM_32_BIT
- devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
+ devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_USB_HEADSET|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
flags AUDIO_OUTPUT_FLAG_DIRECT
}
compress_offload {
sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000|64000|88200|96000|176400|192000
channel_masks AUDIO_CHANNEL_OUT_MONO|AUDIO_CHANNEL_OUT_STEREO|AUDIO_CHANNEL_OUT_2POINT1|AUDIO_CHANNEL_OUT_QUAD|AUDIO_CHANNEL_OUT_PENTA|AUDIO_CHANNEL_OUT_5POINT1|AUDIO_CHANNEL_OUT_6POINT1|AUDIO_CHANNEL_OUT_7POINT1
formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_FLAC|AUDIO_FORMAT_ALAC|AUDIO_FORMAT_APE|AUDIO_FORMAT_AAC_LC|AUDIO_FORMAT_AAC_HE_V1|AUDIO_FORMAT_AAC_HE_V2|AUDIO_FORMAT_WMA|AUDIO_FORMAT_WMA_PRO|AUDIO_FORMAT_VORBIS|AUDIO_FORMAT_AAC_ADTS_LC|AUDIO_FORMAT_AAC_ADTS_HE_V1|AUDIO_FORMAT_AAC_ADTS_HE_V2
- devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
+ devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_USB_HEADSET|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING
}
dsd_compress_passthrough {
@@ -91,7 +91,7 @@
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
formats AUDIO_FORMAT_PCM_16_BIT|AUDIO_FORMAT_AMR_NB|AUDIO_FORMAT_AMR_WB|AUDIO_FORMAT_QCELP|AUDIO_FORMAT_EVRC|AUDIO_FORMAT_EVRCB|AUDIO_FORMAT_EVRCWB|AUDIO_FORMAT_EVRCNW
- devices AUDIO_DEVICE_IN_WIRED_HEADSET|AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET|AUDIO_DEVICE_IN_FM_TUNER|AUDIO_DEVICE_IN_VOICE_CALL|AUDIO_DEVICE_IN_USB_DEVICE
+ devices AUDIO_DEVICE_IN_WIRED_HEADSET|AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET|AUDIO_DEVICE_IN_FM_TUNER|AUDIO_DEVICE_IN_VOICE_CALL|AUDIO_DEVICE_IN_USB_DEVICE|AUDIO_DEVICE_IN_USB_HEADSET
}
surround_sound {
sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000
diff --git a/configs/sdm660/audio_policy_configuration.xml b/configs/sdm660/audio_policy_configuration.xml
index 418cf42..f0528c6 100644
--- a/configs/sdm660/audio_policy_configuration.xml
+++ b/configs/sdm660/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-2018, The Linux Foundation. All rights reserved
Not a Contribution.
-->
<!-- Copyright (C) 2015 The Android Open Source Project
@@ -265,7 +265,12 @@
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort>
+ <devicePort tagName="USB Headset Out" type="AUDIO_DEVICE_OUT_USB_HEADSET" role="sink">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
+ </devicePort>
+ <!-- Input devices declaration, i.e. Source DEVICE PORT -->
<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"
@@ -300,6 +305,13 @@
<profile name="" format="AUDIO_FORMAT_PCM_8_24_BIT"
samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort>
+ <devicePort tagName="USB Headset In" type="AUDIO_DEVICE_IN_USB_HEADSET" role="source">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
+ <profile name="" format="AUDIO_FORMAT_PCM_8_24_BIT"
+ samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
+ </devicePort>
+
</devicePorts>
<!-- route declaration, i.e. list all available sources for a given sink -->
<routes>
@@ -323,12 +335,14 @@
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
<route type="mix" sink="USB Device Out"
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,hifi_playback"/>
+ <route type="mix" sink="USB Headset Out"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,hifi_playback"/>
<route type="mix" sink="Telephony Tx"
sources="voice_tx"/>
<route type="mix" sink="voice_rx"
sources="Telephony Rx"/>
<route type="mix" sink="primary input"
- sources="Wired Headset Mic,BT SCO Headset Mic,FM Tuner,USB Device In,Telephony Rx"/>
+ sources="Wired Headset Mic,BT SCO Headset Mic,FM Tuner,USB Device In,USB Headset In,Telephony Rx"/>
<route type="mix" sink="surround_sound"
sources="Built-In Mic,Built-In Back Mic"/>
<route type="mix" sink="record_24"
@@ -339,7 +353,7 @@
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload"/>
<route type="mix" sink="BT A2DP Speaker"
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload"/>
- <route type="mix" sink="hifi_input" sources="USB Device In" />
+ <route type="mix" sink="hifi_input" sources="USB Device In,USB Headset In" />
</routes>
</module>
diff --git a/configs/sdm670/audio_output_policy.conf b/configs/sdm670/audio_output_policy.conf
index 52ef791..d66782e 100644
--- a/configs/sdm670/audio_output_policy.conf
+++ b/configs/sdm670/audio_output_policy.conf
@@ -82,3 +82,37 @@
app_type 69940
}
}
+
+inputs {
+ primary {
+ flags AUDIO_INPUT_FLAG_NONE
+ formats AUDIO_FORMAT_PCM_16_BIT
+ sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000
+ bit_width 16
+ app_type 69938
+ }
+ record_24bit {
+ profile none
+ flags AUDIO_INPUT_FLAG_NONE
+ formats AUDIO_FORMAT_PCM_24_BIT_PACKED
+ sampling_rates 16000|48000
+ bit_width 24
+ app_type 69945
+ }
+ record_fluence1 {
+ flags AUDIO_INPUT_FLAG_COMPRESS
+ profile record_fluence
+ formats AUDIO_FORMAT_PCM_16_BIT
+ sampling_rates 48000
+ bit_width 16
+ app_type 69944
+ }
+ record_fluence {
+ flags AUDIO_INPUT_FLAG_TIMESTAMP
+ profile record_fluence
+ formats AUDIO_FORMAT_PCM_16_BIT
+ sampling_rates 48000
+ bit_width 16
+ app_type 69944
+ }
+}
diff --git a/configs/sdm670/audio_platform_info.xml b/configs/sdm670/audio_platform_info.xml
old mode 100644
new mode 100755
index 0597623..dceed57
--- a/configs/sdm670/audio_platform_info.xml
+++ b/configs/sdm670/audio_platform_info.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<!-- Copyright (c) 2014, 2016-2017, The Linux Foundation. All rights reserved. -->
+<!-- Copyright (c) 2014, 2016-2018, 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 -->
@@ -92,7 +92,7 @@
<usecase name="USECASE_AUDIO_RECORD_AFE_PROXY" type="in" id="7"/>
<usecase name="USECASE_AUDIO_RECORD_LOW_LATENCY" type="in" id="17" />
<usecase name="USECASE_AUDIO_PLAYBACK_ULL" type="out" id="17" />
- <usecase name="USECASE_AUDIO_PLAYBACK_EXT_DISP_SILENCE" type="out" id="27" />
+ <usecase name="USECASE_AUDIO_PLAYBACK_SILENCE" type="out" id="27" />
<usecase name="USECASE_AUDIO_PLAYBACK_MMAP" type="out" id="33" />
<usecase name="USECASE_AUDIO_RECORD_MMAP" type="in" id="33" />
<usecase name="USECASE_AUDIO_HFP_SCO" type="in" id="35" />
diff --git a/configs/sdm670/audio_platform_info_intcodec.xml b/configs/sdm670/audio_platform_info_intcodec.xml
old mode 100644
new mode 100755
index b249102..8b57c52
--- a/configs/sdm670/audio_platform_info_intcodec.xml
+++ b/configs/sdm670/audio_platform_info_intcodec.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<!-- Copyright (c) 2014, 2016-2017, The Linux Foundation. All rights reserved. -->
+<!-- Copyright (c) 2014, 2016-2018, 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 -->
@@ -56,13 +56,18 @@
<usecase name="USECASE_AUDIO_RECORD_AFE_PROXY" type="in" id="7"/>
<usecase name="USECASE_AUDIO_RECORD_LOW_LATENCY" type="in" id="17" />
<usecase name="USECASE_AUDIO_PLAYBACK_ULL" type="out" id="17" />
- <usecase name="USECASE_AUDIO_PLAYBACK_EXT_DISP_SILENCE" type="out" id="27" />
+ <usecase name="USECASE_AUDIO_PLAYBACK_SILENCE" type="out" id="27" />
<usecase name="USECASE_AUDIO_PLAYBACK_MMAP" type="out" id="33" />
<usecase name="USECASE_AUDIO_RECORD_MMAP" type="in" id="33" />
<usecase name="USECASE_AUDIO_HFP_SCO" type="in" id="12" />
<usecase name="USECASE_AUDIO_HFP_SCO_WB" type="in" id="12" />
<usecase name="USECASE_AUDIO_PLAYBACK_VOIP" type="out" id="16" />
<usecase name="USECASE_AUDIO_RECORD_VOIP" type="in" id="16" />
+ <usecase name="USECASE_AUDIO_RECORD_COMPRESS2" type="in" id="41"/>
+ <usecase name="USECASE_AUDIO_RECORD_COMPRESS3" type="in" id="42"/>
+ <usecase name="USECASE_AUDIO_RECORD_COMPRESS4" type="in" id="43"/>
+ <usecase name="USECASE_AUDIO_RECORD_COMPRESS5" type="in" id="44"/>
+ <usecase name="USECASE_AUDIO_RECORD_COMPRESS6" type="in" id="45"/>
</pcm_ids>
<config_params>
<!-- In the below value string, the value indicates default mono -->
@@ -97,6 +102,7 @@
<device name="SND_DEVICE_IN_UNPROCESSED_THREE_MIC" acdb_id="145"/>
<device name="SND_DEVICE_IN_UNPROCESSED_QUAD_MIC" acdb_id="146"/>
<device name="SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC" acdb_id="147"/>
+ <device name="SND_DEVICE_IN_HANDSET_GENERIC_QMIC" acdb_id="157"/>
</acdb_ids>
<backend_names>
<device name="SND_DEVICE_OUT_HEADPHONES" backend="headphones" interface="INT0_MI2S_RX"/>
@@ -122,6 +128,7 @@
<device name="SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES_EXTERNAL_1" interface="INT4_MI2S_RX-and-INT0_MI2S_RX"/>
<device name="SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES_EXTERNAL_2" interface="INT4_MI2S_RX-and-INT0_MI2S_RX"/>
<device name="SND_DEVICE_OUT_VOICE_HANDSET" interface="INT4_MI2S_RX"/>
+ <device name="SND_DEVICE_IN_HANDSET_GENERIC_QMIC" interface="INT3_MI2S_TX"/>
<device name="SND_DEVICE_OUT_VOICE_SPEAKER" interface="INT4_MI2S_RX"/>
<device name="SND_DEVICE_OUT_VOICE_SPEAKER_VBAT" interface="INT4_MI2S_RX"/>
<device name="SND_DEVICE_OUT_VOICE_SPEAKER_2" interface="INT4_MI2S_RX"/>
diff --git a/configs/sdm670/audio_platform_info_skuw.xml b/configs/sdm670/audio_platform_info_skuw.xml
old mode 100644
new mode 100755
index 1107d4a..d8d1f78
--- a/configs/sdm670/audio_platform_info_skuw.xml
+++ b/configs/sdm670/audio_platform_info_skuw.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<!-- Copyright (c) 2014, 2016-2017, The Linux Foundation. All rights reserved. -->
+<!-- Copyright (c) 2014, 2016-2018, 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 -->
@@ -58,7 +58,7 @@
<usecase name="USECASE_AUDIO_RECORD_AFE_PROXY" type="in" id="7"/>
<usecase name="USECASE_AUDIO_RECORD_LOW_LATENCY" type="in" id="17" />
<usecase name="USECASE_AUDIO_PLAYBACK_ULL" type="out" id="17" />
- <usecase name="USECASE_AUDIO_PLAYBACK_EXT_DISP_SILENCE" type="out" id="27" />
+ <usecase name="USECASE_AUDIO_PLAYBACK_SILENCE" type="out" id="27" />
<usecase name="USECASE_AUDIO_HFP_SCO" type="in" id="12" />
<usecase name="USECASE_AUDIO_HFP_SCO_WB" type="in" id="12" />
<usecase name="USECASE_AUDIO_PLAYBACK_VOIP" type="out" id="16" />
diff --git a/configs/sdm670/audio_policy.conf b/configs/sdm670/audio_policy.conf
index f275e16..1b9b708 100644
--- a/configs/sdm670/audio_policy.conf
+++ b/configs/sdm670/audio_policy.conf
@@ -26,21 +26,21 @@
sampling_rates 44100|48000
channel_masks AUDIO_CHANNEL_OUT_STEREO
formats AUDIO_FORMAT_PCM_16_BIT
- devices AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_FM|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
+ devices AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_FM|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_USB_HEADSET|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
flags AUDIO_OUTPUT_FLAG_FAST|AUDIO_OUTPUT_FLAG_PRIMARY
}
raw {
sampling_rates 48000
channel_masks AUDIO_CHANNEL_OUT_STEREO
formats AUDIO_FORMAT_PCM_16_BIT
- devices AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
+ devices AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_USB_HEADSET|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
flags AUDIO_OUTPUT_FLAG_FAST|AUDIO_OUTPUT_FLAG_RAW
}
deep_buffer {
sampling_rates 44100|48000
channel_masks AUDIO_CHANNEL_OUT_STEREO
formats AUDIO_FORMAT_PCM_16_BIT
- devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_FM|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
+ devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_FM|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_USB_HEADSET|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
flags AUDIO_OUTPUT_FLAG_DEEP_BUFFER
}
compress_passthrough {
@@ -54,14 +54,14 @@
sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000|64000|88200|96000|176400|192000|352800|384000
channel_masks AUDIO_CHANNEL_OUT_MONO|AUDIO_CHANNEL_OUT_STEREO|AUDIO_CHANNEL_OUT_2POINT1|AUDIO_CHANNEL_OUT_QUAD|AUDIO_CHANNEL_OUT_PENTA|AUDIO_CHANNEL_OUT_5POINT1|AUDIO_CHANNEL_OUT_6POINT1|AUDIO_CHANNEL_OUT_7POINT1
formats AUDIO_FORMAT_PCM_16_BIT|AUDIO_FORMAT_PCM_24_BIT_PACKED|AUDIO_FORMAT_PCM_8_24_BIT|AUDIO_FORMAT_PCM_32_BIT
- devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
+ devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_USB_HEADSET|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
flags AUDIO_OUTPUT_FLAG_DIRECT
}
compress_offload {
sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000|64000|88200|96000|176400|192000
channel_masks AUDIO_CHANNEL_OUT_MONO|AUDIO_CHANNEL_OUT_STEREO|AUDIO_CHANNEL_OUT_2POINT1|AUDIO_CHANNEL_OUT_QUAD|AUDIO_CHANNEL_OUT_PENTA|AUDIO_CHANNEL_OUT_5POINT1|AUDIO_CHANNEL_OUT_6POINT1|AUDIO_CHANNEL_OUT_7POINT1
formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_FLAC|AUDIO_FORMAT_ALAC|AUDIO_FORMAT_APE|AUDIO_FORMAT_AAC_LC|AUDIO_FORMAT_AAC_HE_V1|AUDIO_FORMAT_AAC_HE_V2|AUDIO_FORMAT_WMA|AUDIO_FORMAT_WMA_PRO|AUDIO_FORMAT_VORBIS|AUDIO_FORMAT_AAC_ADTS_LC|AUDIO_FORMAT_AAC_ADTS_HE_V1|AUDIO_FORMAT_AAC_ADTS_HE_V2
- devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
+ devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_USB_HEADSET|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING
}
dsd_compress_passthrough {
@@ -91,7 +91,8 @@
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
formats AUDIO_FORMAT_PCM_16_BIT|AUDIO_FORMAT_AMR_NB|AUDIO_FORMAT_AMR_WB|AUDIO_FORMAT_QCELP|AUDIO_FORMAT_EVRC|AUDIO_FORMAT_EVRCB|AUDIO_FORMAT_EVRCWB|AUDIO_FORMAT_EVRCNW
- devices AUDIO_DEVICE_IN_WIRED_HEADSET|AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET|AUDIO_DEVICE_IN_FM_TUNER|AUDIO_DEVICE_IN_VOICE_CALL|AUDIO_DEVICE_IN_USB_DEVICE
+ devices AUDIO_DEVICE_IN_WIRED_HEADSET|AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET|AUDIO_DEVICE_IN_FM_TUNER|AUDIO_DEVICE_IN_VOICE_CALL|AUDIO_DEVICE_IN_USB_DEVICE|AUDIO_DEVICE_IN_USB_HEADSET
+
}
surround_sound {
sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000
diff --git a/configs/sdm670/audio_policy_configuration.xml b/configs/sdm670/audio_policy_configuration.xml
index 9bb9486..99f2eaf 100644
--- a/configs/sdm670/audio_policy_configuration.xml
+++ b/configs/sdm670/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-2018, The Linux Foundation. All rights reserved
Not a Contribution.
-->
<!-- Copyright (C) 2015 The Android Open Source Project
@@ -274,7 +274,12 @@
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort>
+ <devicePort tagName="USB Headset Out" type="AUDIO_DEVICE_OUT_USB_HEADSET" role="sink">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
+ </devicePort>
+ <!-- Input devices declaration, i.e. Source DEVICE PORT -->
<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"
@@ -309,6 +314,13 @@
<profile name="" format="AUDIO_FORMAT_PCM_8_24_BIT"
samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort>
+ <devicePort tagName="USB Headset In" type="AUDIO_DEVICE_IN_USB_HEADSET" role="source">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
+ <profile name="" format="AUDIO_FORMAT_PCM_8_24_BIT"
+ samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
+ </devicePort>
+
</devicePorts>
<!-- route declaration, i.e. list all available sources for a given sink -->
<routes>
@@ -332,25 +344,27 @@
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
<route type="mix" sink="USB Device Out"
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out,hifi_playback"/>
+ <route type="mix" sink="USB Headset Out"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out,hifi_playback"/>
<route type="mix" sink="Telephony Tx"
sources="voice_tx"/>
<route type="mix" sink="voice_rx"
sources="Telephony Rx"/>
<route type="mix" sink="primary input"
- sources="Wired Headset Mic,BT SCO Headset Mic,FM Tuner,USB Device In,Telephony Rx"/>
+ sources="Wired Headset Mic,BT SCO Headset Mic,FM Tuner,USB Device In,USB Headset In,Telephony Rx"/>
<route type="mix" sink="surround_sound"
sources="Built-In Mic,Built-In Back Mic"/>
<route type="mix" sink="record_24"
sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic"/>
<route type="mix" sink="mmap_no_irq_in"
- sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic,USB Device In"/>
+ sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic,USB Device In,USB Headset In"/>
<route type="mix" sink="BT A2DP Out"
sources="primary output,deep_buffer,direct_pcm,compressed_offload"/>
<route type="mix" sink="BT A2DP Headphones"
sources="primary output,deep_buffer,direct_pcm,compressed_offload"/>
<route type="mix" sink="BT A2DP Speaker"
sources="primary output,deep_buffer,direct_pcm,compressed_offload"/>
- <route type="mix" sink="hifi_input" sources="USB Device In" />
+ <route type="mix" sink="hifi_input" sources="USB Device In,USB Headset In" />
</routes>
</module>
diff --git a/configs/sdm670/mixer_paths_mtp.xml b/configs/sdm670/mixer_paths_mtp.xml
index 82b01a7..048e039 100644
--- a/configs/sdm670/mixer_paths_mtp.xml
+++ b/configs/sdm670/mixer_paths_mtp.xml
@@ -373,6 +373,11 @@
<ctl name="IIR1 INP3 Volume" value="53" />
<ctl name="IIR1 INP4 Volume" value="53" />
<ctl name="IIR1 INP1 MUX" value="ZERO" />
+ <ctl name="MultiMedia17 Mixer INT3_MI2S_TX" value="0" />
+ <ctl name="MultiMedia18 Mixer INT3_MI2S_TX" value="0" />
+ <ctl name="MultiMedia19 Mixer INT3_MI2S_TX" value="0" />
+ <ctl name="MultiMedia28 Mixer INT3_MI2S_TX" value="0" />
+ <ctl name="MultiMedia29 Mixer INT3_MI2S_TX" value="0" />
<!-- anc related -->
@@ -1270,6 +1275,26 @@
<ctl name="MultiMedia8 Mixer INT3_MI2S_TX" value="1" />
</path>
+ <path name="audio-record-compress2">
+ <ctl name="MultiMedia17 Mixer INT3_MI2S_TX" value="1" />
+ </path>
+
+ <path name="audio-record-compress3">
+ <ctl name="MultiMedia18 Mixer INT3_MI2S_TX" value="1" />
+ </path>
+
+ <path name="audio-record-compress4">
+ <ctl name="MultiMedia19 Mixer INT3_MI2S_TX" value="1" />
+ </path>
+
+ <path name="audio-record-compress5">
+ <ctl name="MultiMedia28 Mixer INT3_MI2S_TX" value="1" />
+ </path>
+
+ <path name="audio-record-compress6">
+ <ctl name="MultiMedia29 Mixer INT3_MI2S_TX" value="1" />
+ </path>
+
<path name="audio-record-compress bt-sco">
<ctl name="MultiMedia8 Mixer SLIM_7_TX" value="1" />
</path>
diff --git a/configs/sdm670/mixer_paths_skuw.xml b/configs/sdm670/mixer_paths_skuw.xml
index 2b3c8bb..bced57c 100644
--- a/configs/sdm670/mixer_paths_skuw.xml
+++ b/configs/sdm670/mixer_paths_skuw.xml
@@ -2624,4 +2624,25 @@
<path name="mmap-record usb-headset-mic">
<ctl name="MultiMedia16 Mixer USB_AUDIO_TX" value="1" />
</path>
+
+ <path name="hifi-playback display-port">
+ <ctl name="DISPLAY_PORT Mixer MultiMedia2" value="1" />
+ </path>
+
+ <path name="hifi-playback afe-proxy">
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia2" value="1" />
+ </path>
+
+ <path name="hifi-playback usb-headset">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia2" value="1" />
+ </path>
+
+ <path name="hifi-playback usb-headphones">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia2" value="1" />
+ </path>
+
+ <path name="hifi-record usb-headset-mic">
+ <ctl name="MultiMedia2 Mixer USB_AUDIO_TX" value="1" />
+ </path>
+
</mixer>
diff --git a/configs/sdm670/sdm670.mk b/configs/sdm670/sdm670.mk
index d34ff01..b939b09 100644
--- a/configs/sdm670/sdm670.mk
+++ b/configs/sdm670/sdm670.mk
@@ -6,6 +6,7 @@
ifneq ($(TARGET_USES_AOSP_FOR_AUDIO), true)
USE_CUSTOM_AUDIO_POLICY := 1
AUDIO_FEATURE_ENABLED_COMPRESS_CAPTURE := false
+AUDIO_FEATURE_ENABLED_COMPRESS_INPUT := true
AUDIO_FEATURE_ENABLED_COMPRESS_VOIP := false
AUDIO_FEATURE_ENABLED_DYNAMIC_ECNS := false
AUDIO_FEATURE_ENABLED_EXTN_FORMATS := true
@@ -140,8 +141,14 @@
persist.vendor.audio.fluence.voicecall=true\
persist.vendor.audio.fluence.voicerec=false\
persist.vendor.audio.fluence.speaker=true\
+persist.vendor.audio.fluence.audiorec=false\
persist.vendor.audio.fluence.tmic.enabled=false
+# Mutlirec Apptype
+PRODUCT_PROPERTY_OVERRIDES += \
+ vendor.audio.apptype.multirec.enabled=false \
+ vendor.audio.record.multiple.enabled=false
+
##speaker protection v3 switch and ADSP AFE API version
PRODUCT_PROPERTY_OVERRIDES += \
persist.vendor.audio.spv3.enable=true\
diff --git a/configs/sdm670/sound_trigger_platform_info.xml b/configs/sdm670/sound_trigger_platform_info.xml
index b9e36f5..1b8f45a 100644
--- a/configs/sdm670/sound_trigger_platform_info.xml
+++ b/configs/sdm670/sound_trigger_platform_info.xml
@@ -38,8 +38,10 @@
<!-- Below backend params must match with port used in mixer path file -->
<!-- param used to configure backend sample rate, format and channels -->
<param backend_port_name="SLIM_0_TX" />
+ <param backend_port_name="INT3_MI2S_TX" />
<!-- Param used to match and obtain device backend index -->
<param backend_dai_name="SLIMBUS_0_TX" />
+ <param backend_dai_name="INT3_MI2S_TX" />
</common_config>
<acdb_ids>
<param DEVICE_HANDSET_MIC_APE="100" />
diff --git a/configs/sdm845/audio_platform_info.xml b/configs/sdm845/audio_platform_info.xml
old mode 100644
new mode 100755
index 19ea80c..178ecfe
--- a/configs/sdm845/audio_platform_info.xml
+++ b/configs/sdm845/audio_platform_info.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<!-- Copyright (c) 2014, 2016-2017, The Linux Foundation. All rights reserved. -->
+<!-- Copyright (c) 2014, 2016-2018, 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 -->
@@ -90,7 +90,7 @@
<usecase name="USECASE_AUDIO_RECORD_AFE_PROXY" type="in" id="7"/>
<usecase name="USECASE_AUDIO_RECORD_LOW_LATENCY" type="in" id="17" />
<usecase name="USECASE_AUDIO_PLAYBACK_ULL" type="out" id="17" />
- <usecase name="USECASE_AUDIO_PLAYBACK_EXT_DISP_SILENCE" type="out" id="27" />
+ <usecase name="USECASE_AUDIO_PLAYBACK_SILENCE" type="out" id="27" />
<usecase name="USECASE_AUDIO_PLAYBACK_VOIP" type="out" id="16" />
<usecase name="USECASE_AUDIO_RECORD_VOIP" type="in" id="16" />
<usecase name="USECASE_AUDIO_PLAYBACK_MMAP" type="out" id="33" />
diff --git a/configs/sdm845/audio_policy.conf b/configs/sdm845/audio_policy.conf
index f275e16..6f9bdbb 100644
--- a/configs/sdm845/audio_policy.conf
+++ b/configs/sdm845/audio_policy.conf
@@ -26,21 +26,21 @@
sampling_rates 44100|48000
channel_masks AUDIO_CHANNEL_OUT_STEREO
formats AUDIO_FORMAT_PCM_16_BIT
- devices AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_FM|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
+ devices AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_FM|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_USB_HEADSET|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
flags AUDIO_OUTPUT_FLAG_FAST|AUDIO_OUTPUT_FLAG_PRIMARY
}
raw {
sampling_rates 48000
channel_masks AUDIO_CHANNEL_OUT_STEREO
formats AUDIO_FORMAT_PCM_16_BIT
- devices AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
+ devices AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_USB_HEADSET|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
flags AUDIO_OUTPUT_FLAG_FAST|AUDIO_OUTPUT_FLAG_RAW
}
deep_buffer {
sampling_rates 44100|48000
channel_masks AUDIO_CHANNEL_OUT_STEREO
formats AUDIO_FORMAT_PCM_16_BIT
- devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_FM|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
+ devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_FM|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_USB_HEADSET|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
flags AUDIO_OUTPUT_FLAG_DEEP_BUFFER
}
compress_passthrough {
@@ -54,14 +54,14 @@
sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000|64000|88200|96000|176400|192000|352800|384000
channel_masks AUDIO_CHANNEL_OUT_MONO|AUDIO_CHANNEL_OUT_STEREO|AUDIO_CHANNEL_OUT_2POINT1|AUDIO_CHANNEL_OUT_QUAD|AUDIO_CHANNEL_OUT_PENTA|AUDIO_CHANNEL_OUT_5POINT1|AUDIO_CHANNEL_OUT_6POINT1|AUDIO_CHANNEL_OUT_7POINT1
formats AUDIO_FORMAT_PCM_16_BIT|AUDIO_FORMAT_PCM_24_BIT_PACKED|AUDIO_FORMAT_PCM_8_24_BIT|AUDIO_FORMAT_PCM_32_BIT
- devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
+ devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_USB_HEADSET|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
flags AUDIO_OUTPUT_FLAG_DIRECT
}
compress_offload {
sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000|64000|88200|96000|176400|192000
channel_masks AUDIO_CHANNEL_OUT_MONO|AUDIO_CHANNEL_OUT_STEREO|AUDIO_CHANNEL_OUT_2POINT1|AUDIO_CHANNEL_OUT_QUAD|AUDIO_CHANNEL_OUT_PENTA|AUDIO_CHANNEL_OUT_5POINT1|AUDIO_CHANNEL_OUT_6POINT1|AUDIO_CHANNEL_OUT_7POINT1
formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_FLAC|AUDIO_FORMAT_ALAC|AUDIO_FORMAT_APE|AUDIO_FORMAT_AAC_LC|AUDIO_FORMAT_AAC_HE_V1|AUDIO_FORMAT_AAC_HE_V2|AUDIO_FORMAT_WMA|AUDIO_FORMAT_WMA_PRO|AUDIO_FORMAT_VORBIS|AUDIO_FORMAT_AAC_ADTS_LC|AUDIO_FORMAT_AAC_ADTS_HE_V1|AUDIO_FORMAT_AAC_ADTS_HE_V2
- devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
+ devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_USB_HEADSET|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING
}
dsd_compress_passthrough {
@@ -91,7 +91,7 @@
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
formats AUDIO_FORMAT_PCM_16_BIT|AUDIO_FORMAT_AMR_NB|AUDIO_FORMAT_AMR_WB|AUDIO_FORMAT_QCELP|AUDIO_FORMAT_EVRC|AUDIO_FORMAT_EVRCB|AUDIO_FORMAT_EVRCWB|AUDIO_FORMAT_EVRCNW
- devices AUDIO_DEVICE_IN_WIRED_HEADSET|AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET|AUDIO_DEVICE_IN_FM_TUNER|AUDIO_DEVICE_IN_VOICE_CALL|AUDIO_DEVICE_IN_USB_DEVICE
+ devices AUDIO_DEVICE_IN_WIRED_HEADSET|AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET|AUDIO_DEVICE_IN_FM_TUNER|AUDIO_DEVICE_IN_VOICE_CALL|AUDIO_DEVICE_IN_USB_DEVICE|AUDIO_DEVICE_IN_USB_HEADSET
}
surround_sound {
sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000
diff --git a/configs/sdm845/audio_policy_configuration.xml b/configs/sdm845/audio_policy_configuration.xml
index 024a471..25ac786 100644
--- a/configs/sdm845/audio_policy_configuration.xml
+++ b/configs/sdm845/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-2018, The Linux Foundation. All rights reserved
Not a Contribution.
-->
<!-- Copyright (C) 2015 The Android Open Source Project
@@ -274,7 +274,12 @@
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort>
+ <devicePort tagName="USB Headset Out" type="AUDIO_DEVICE_OUT_USB_HEADSET" role="sink">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
+ </devicePort>
+ <!-- Input devices declaration, i.e. Source DEVICE PORT -->
<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"
@@ -309,6 +314,13 @@
<profile name="" format="AUDIO_FORMAT_PCM_8_24_BIT"
samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort>
+ <devicePort tagName="USB Headset In" type="AUDIO_DEVICE_IN_USB_HEADSET" role="source">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
+ <profile name="" format="AUDIO_FORMAT_PCM_8_24_BIT"
+ samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
+ </devicePort>
+
</devicePorts>
<!-- route declaration, i.e. list all available sources for a given sink -->
<routes>
@@ -332,25 +344,27 @@
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
<route type="mix" sink="USB Device Out"
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out,hifi_playback"/>
+ <route type="mix" sink="USB Headset Out"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out,hifi_playback"/>
<route type="mix" sink="Telephony Tx"
sources="voice_tx"/>
<route type="mix" sink="voice_rx"
sources="Telephony Rx"/>
<route type="mix" sink="primary input"
- sources="Wired Headset Mic,BT SCO Headset Mic,FM Tuner,USB Device In,Telephony Rx"/>
+ sources="Wired Headset Mic,BT SCO Headset Mic,FM Tuner,USB Device In,USB Headset In,Telephony Rx"/>
<route type="mix" sink="surround_sound"
sources="Built-In Mic,Built-In Back Mic"/>
<route type="mix" sink="record_24"
sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic"/>
<route type="mix" sink="mmap_no_irq_in"
- sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic,USB Device In"/>
+ sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic,USB Device In,USB Headset In"/>
<route type="mix" sink="BT A2DP Out"
sources="primary output,deep_buffer,direct_pcm,compressed_offload"/>
<route type="mix" sink="BT A2DP Headphones"
sources="primary output,deep_buffer,direct_pcm,compressed_offload"/>
<route type="mix" sink="BT A2DP Speaker"
sources="primary output,deep_buffer,direct_pcm,compressed_offload"/>
- <route type="mix" sink="hifi_input" sources="USB Device In" />
+ <route type="mix" sink="hifi_input" sources="USB Device In,USB Headset In" />
</routes>
</module>
diff --git a/configs/sdm845/mixer_paths_i2s.xml b/configs/sdm845/mixer_paths_i2s.xml
index 10d5ec5..75d984f 100644
--- a/configs/sdm845/mixer_paths_i2s.xml
+++ b/configs/sdm845/mixer_paths_i2s.xml
@@ -144,11 +144,11 @@
</path>
<path name="adc2">
+ <ctl name="AIF1_CAP Mixer SLIM TX6" value="1"/>
<ctl name="MI2S_TX Channels" value="One" />
- <ctl name="AIF1_CAP Mixer SLIM TX8" value="1"/>
- <ctl name="SLIM TX8 MUX" value="DEC8" />
- <ctl name="ADC MUX8" value="AMIC" />
- <ctl name="AMIC MUX8" value="ADC2" />
+ <ctl name="SLIM TX6 MUX" value="DEC6" />
+ <ctl name="ADC MUX6" value="AMIC" />
+ <ctl name="AMIC MUX6" value="ADC2" />
</path>
<path name="dmic1">
@@ -159,14 +159,15 @@
</path>
<path name="speaker">
- <ctl name="SLIM RX3 MUX" value="AIF1_PB" />
- <ctl name="SLIM RX4 MUX" value="AIF1_PB" />
- <ctl name="QUAT_MI2S_RX Channels" value="Two" />
- <ctl name="RX1 MIX1 INP1" value="RX3" />
- <ctl name="RX2 MIX1 INP1" value="RX4" />
- <ctl name="CLASS_H_DSM MUX" value="DSM_HPHL_RX1" />
- <ctl name="HPHL DAC Switch" value="1" />
- <ctl name="COMP1 Switch" value="1" />
+ <ctl name="I2S RX0 MUX" value="AIF1_PB" />
+ <ctl name="MI2S_RX Channels" value="One" />
+ <ctl name="CDC_IF RX0 MUX" value="I2S RX0" />
+ <ctl name="RX INT8_1 MIX1 INP0" value="RX0" />
+ <ctl name="COMP8 Switch" value="1" />
+ <ctl name="SpkrRight COMP Switch" value="1" />
+ <ctl name="SpkrRight BOOST Switch" value="1" />
+ <ctl name="SpkrRight VISENSE Switch" value="1" />
+ <ctl name="SpkrRight SWR DAC_Port Switch" value="1" />
</path>
<path name="sidetone-iir">
@@ -210,11 +211,13 @@
</path>
<path name="headphones">
- <ctl name="SLIM RX2 MUX" value="AIF1_PB" />
- <ctl name="SLIM RX3 MUX" value="AIF1_PB" />
+ <ctl name="I2S RX0 MUX" value="AIF1_PB" />
+ <ctl name="I2S RX1 MUX" value="AIF1_PB" />
+ <ctl name="CDC_IF RX0 MUX" value="I2S RX0" />
+ <ctl name="CDC_IF RX1 MUX" value="I2S RX1" />
<ctl name="MI2S_RX Channels" value="Two" />
- <ctl name="RX INT1_1 MIX1 INP0" value="RX2" />
- <ctl name="RX INT2_1 MIX1 INP0" value="RX3" />
+ <ctl name="RX INT1_2 MUX" value="RX0" />
+ <ctl name="RX INT2_2 MUX" value="RX1" />
<ctl name="RX INT1 DEM MUX" value="CLSH_DSM_OUT" />
<ctl name="RX INT2 DEM MUX" value="CLSH_DSM_OUT" />
<ctl name="COMP1 Switch" value="1" />
diff --git a/configs/sdm845/sdm845.mk b/configs/sdm845/sdm845.mk
index 9d20d48..39a66a6 100644
--- a/configs/sdm845/sdm845.mk
+++ b/configs/sdm845/sdm845.mk
@@ -33,6 +33,7 @@
AUDIO_FEATURE_ENABLED_SPLIT_A2DP := true
AUDIO_FEATURE_ENABLED_3D_AUDIO := true
DOLBY_ENABLE := false
+TARGET_USES_QCOM_MM_AUDIO := true
endif
USE_XML_AUDIO_POLICY_CONF := 1
@@ -56,7 +57,6 @@
AUDIO_FEATURE_ENABLED_DEV_ARBI := false
AUDIO_FEATURE_ENABLED_DYNAMIC_LOG := true
MM_AUDIO_ENABLED_FTM := true
-TARGET_USES_QCOM_MM_AUDIO := true
AUDIO_FEATURE_ENABLED_SOURCE_TRACKING := true
AUDIO_FEATURE_ENABLED_GEF_SUPPORT := true
BOARD_SUPPORTS_QAHW := false
diff --git a/configs/sdm845/sound_trigger_mixer_paths_wcd9340.xml b/configs/sdm845/sound_trigger_mixer_paths_wcd9340.xml
index 676ae95..093002b 100644
--- a/configs/sdm845/sound_trigger_mixer_paths_wcd9340.xml
+++ b/configs/sdm845/sound_trigger_mixer_paths_wcd9340.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--- Copyright (c) 2014-2017, The Linux Foundation. All rights reserved. -->
+<!--- Copyright (c) 2014-2018, 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 -->
@@ -36,6 +36,14 @@
<ctl name="LSM6 Mixer SLIMBUS_5_TX" value="0" />
<ctl name="LSM7 Mixer SLIMBUS_5_TX" value="0" />
<ctl name="LSM8 Mixer SLIMBUS_5_TX" value="0" />
+ <ctl name="LSM1 Mixer SLIMBUS_0_TX" value="0" />
+ <ctl name="LSM2 Mixer SLIMBUS_0_TX" value="0" />
+ <ctl name="LSM3 Mixer SLIMBUS_0_TX" value="0" />
+ <ctl name="LSM4 Mixer SLIMBUS_0_TX" value="0" />
+ <ctl name="LSM5 Mixer SLIMBUS_0_TX" value="0" />
+ <ctl name="LSM6 Mixer SLIMBUS_0_TX" value="0" />
+ <ctl name="LSM7 Mixer SLIMBUS_0_TX" value="0" />
+ <ctl name="LSM8 Mixer SLIMBUS_0_TX" value="0" />
<ctl name="LSM1 Port" value="None" />
<ctl name="LSM2 Port" value="None" />
<ctl name="LSM3 Port" value="None" />
@@ -45,6 +53,7 @@
<ctl name="LSM7 Port" value="None" />
<ctl name="LSM8 Port" value="None" />
<ctl name="SLIMBUS_5_TX LSM Function" value="None" />
+ <ctl name="SLIMBUS_0_TX LSM Function" value="None" />
<ctl name="MADONOFF Switch" value="0" />
<ctl name="MAD Input" value="DMIC1" />
<ctl name="MAD_SEL MUX" value="SPE" />
@@ -89,6 +98,7 @@
<ctl name= "WDMA3 CH1 MUX" value="PORT_0" />
<ctl name= "WDMA3 CH2 MUX" value="PORT_0" />
<ctl name= "WDMA3_ON_OFF Switch" value="0" />
+ <ctl name="SLIM_0_TX Channels" value="One" />
<path name="listen-voice-wakeup-1">
<ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
@@ -193,6 +203,21 @@
<ctl name="MAD_CPE1 Switch" value="1" />
</path>
+ <path name="listen-cpe-handset-dmic">
+ <ctl name="CLK MODE" value="INTERNAL" />
+ <ctl name= "ADC MUX0" value="DMIC" />
+ <ctl name= "DMIC MUX0" value="DMIC2" />
+ <ctl name= "DEC0 Volume" value="84" />
+ <ctl name= "ADC MUX1" value="DMIC" />
+ <ctl name= "DMIC MUX1" value="DMIC0" />
+ <ctl name= "DEC1 Volume" value="84" />
+ <ctl name= "WDMA3 PORT0 MUX" value="DEC0" />
+ <ctl name= "WDMA3 PORT1 MUX" value="DEC1" />
+ <ctl name= "WDMA3 CH0 MUX" value="PORT_0" />
+ <ctl name= "WDMA3 CH1 MUX" value="PORT_1" />
+ <ctl name= "WDMA3_ON_OFF Switch" value="1" />
+ </path>
+
<path name="listen-cpe-handset-tmic">
<ctl name="CLK MODE" value="INTERNAL" />
<ctl name= "ADC MUX0" value="DMIC" />
diff --git a/configs/sdm845/sound_trigger_platform_info.xml b/configs/sdm845/sound_trigger_platform_info.xml
index e1f21a7..b017cc4 100644
--- a/configs/sdm845/sound_trigger_platform_info.xml
+++ b/configs/sdm845/sound_trigger_platform_info.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--- Copyright (c) 2013-2017, The Linux Foundation. All rights reserved. -->
+<!--- Copyright (c) 2013-2018, 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 -->
@@ -26,7 +26,11 @@
<!--- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -->
<!--- IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -->
<sound_trigger_platform_info>
- <param version="0x0101" /> <!-- this must be the first param -->
+ <param version="0x0102" /> <!-- this must be the first param -->
+<!--- Version History: -->
+<!--- 0x0101: Legacy version. -->
+<!--- 0x0102: Includes acdb_ids param with the gcs_usecase tag. This matches -->
+<!--- the gcs_usecase with the acdb device that uses it. -->
<common_config>
<param max_cpe_sessions="1" />
<param max_wdsp_sessions="2" />
@@ -50,6 +54,7 @@
<param DEVICE_HANDSET_QMIC_APE="137" />
<param DEVICE_HEADSET_MIC_CPE="139" />
<param DEVICE_HANDSET_DMIC_APE="149" />
+ <param DEVICE_HANDSET_DMIC_CPE="153" />
</acdb_ids>
<!-- Multiple sound_model_config tags can be listed, each with unique -->
<!-- vendor_uuid. The below tag represents QTI SVA engine sound model -->
@@ -72,12 +77,13 @@
<param adm_cfg_profile="NONE" />
<!-- fluence_type: "FLUENCE", "FLUENCE_DMIC", "FLUENCE_TMIC", -->
<!-- "FLUENCE_QMIC". param value is valid when adm_cfg_profile="FLUENCE"-->
- <param fluence_type="FLUENCE_QMIC" />
+ <param fluence_type="FLUENCE_DMIC" />
<!-- wdsp_fluence_type: fluence disabled: "NONE" -->
<!-- fluence enabled: "FLUENCE_DMIC", "FLUENCE_TMIC", "FLUENCE_QMIC" -->
<param wdsp_fluence_type="NONE" />
<gcs_usecase>
<param uid="0x1" />
+ <param acdb_devices="DEVICE_HANDSET_MIC_CPE, DEVICE_HANDSET_TMIC_CPE, DEVICE_HEADSET_MIC_CPE" />
<!-- module_id, instance_id, param_id -->
<param load_sound_model_ids="0x00012C0D, 0x2, 0x00012C14" />
<param confidence_levels_ids="0x00012C0D, 0x2, 0x00012C28" />
@@ -88,6 +94,7 @@
</gcs_usecase>
<gcs_usecase>
<param uid="0x2" />
+ <param acdb_devices="DEVICE_HANDSET_MIC_CPE, DEVICE_HANDSET_TMIC_CPE, DEVICE_HEADSET_MIC_CPE" />
<param load_sound_model_ids="0x00012C0D, 0x3, 0x00012C14" />
<param confidence_levels_ids="0x00012C0D, 0x3, 0x00012C28" />
<param detection_event_ids="0x00012C0D, 0x3, 0x00012C29" />
@@ -145,12 +152,13 @@
<param adm_cfg_profile="NONE" />
<!-- fluence_type: "FLUENCE", "FLUENCE_DMIC", "FLUENCE_TMIC", -->
<!-- "FLUENCE_QMIC". param value is valid when adm_cfg_profile="FLUENCE"-->
- <param fluence_type="FLUENCE_QMIC" />
+ <param fluence_type="FLUENCE_DMIC" />
<!-- wdsp_fluence_type: fluence disabled: "NONE" -->
<!-- fluence enabled: "FLUENCE_DMIC", "FLUENCE_TMIC", "FLUENCE_QMIC" -->
<param wdsp_fluence_type="NONE" />
<gcs_usecase>
<param uid="0x3" />
+ <param acdb_devices="DEVICE_HANDSET_MIC_CPE, DEVICE_HANDSET_TMIC_CPE" />
<param load_sound_model_ids="0x18000001, 0x4, 0x00012C14" />
<param confidence_levels_ids="0x18000001, 0x4, 0x00012C28" />
<param detection_event_ids="0x18000001, 0x4, 0x00012C29" />
@@ -158,6 +166,16 @@
<param read_rsp_ids="0x00020013, 0x4, 0x00020016" />
<param custom_config_ids="0x18000001, 0x4, 0x00012C20" />
</gcs_usecase>
+ <gcs_usecase>
+ <param uid="0x4" />
+ <param acdb_devices="DEVICE_HANDSET_DMIC_CPE" />
+ <param load_sound_model_ids="0x18000001, 0x5, 0x00012C14" />
+ <param confidence_levels_ids="0x18000001, 0x5, 0x00012C28" />
+ <param detection_event_ids="0x18000001, 0x5, 0x00012C29" />
+ <param read_cmd_ids="0x00020013, 0x5, 0x00020015" />
+ <param read_rsp_ids="0x00020013, 0x5, 0x00020016" />
+ <param custom_config_ids="0x18000001, 0x5, 0x00012C20" />
+ </gcs_usecase>
<!-- 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.
@@ -205,6 +223,13 @@
<param bit_width="16" />
</adm_config>
+ <adm_config>
+ <param adm_cfg_profile="FLUENCE_STEREO" />
+ <param app_type="69948" />
+ <param sample_rate="16000" />
+ <param bit_width="16" />
+ </adm_config>
+
<!-- backend_type tag defines backend type for each device -->
<!-- Default value is assumed for devices that are not listed here -->
<backend_type>
diff --git a/configure.ac b/configure.ac
index 805d00c..a84e2cd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -73,6 +73,14 @@
AC_SUBST([TARGET_PLATFORM], ["msm8974"])
TARGET_CFLAGS="-DPLATFORM_MSM8998"
fi
+if (test x$TARGET_SUPPORT = xsdxpoorwills); then
+ AC_SUBST([TARGET_PLATFORM], ["msm8974"])
+ TARGET_CFLAGS="-DPLATFORM_SDX24"
+fi
+if (test x$TARGET_SUPPORT = x8x96autogvmquintcu); then
+ AC_SUBST([TARGET_PLATFORM], ["msm8974"])
+ TARGET_CFLAGS="-DPLATFORM_MSM8996"
+fi
AC_SUBST([TARGET_CFLAGS])
AM_CONDITIONAL([QTI_AUDIO_SERVER_ENABLED],[test x$BOARD_SUPPORTS_QTI_AUDIO_SERVER = xtrue])
@@ -117,6 +125,8 @@
AM_CONDITIONAL([DTSHD_PARSER], [test x$AUDIO_FEATURE_ENABLED_DTSHD_PARSER = xtrue])
AM_CONDITIONAL([QAP], [test x$AUDIO_FEATURE_ENABLED_QAP = xtrue])
AM_CONDITIONAL([AUDIO_HW_FFV], [test x$AUDIO_FEATURE_ENABLED_FFV = xtrue])
+AM_CONDITIONAL([CUSTOM_STEREO], [test x$AUDIO_FEATURE_ENABLED_CUSTOM_STEREO = xtrue])
+AM_CONDITIONAL([RUN_KEEP_ALIVE_IN_ARM_FFV], [test x$AUDIO_FEATURE_ENABLED_KEEP_ALIVE_ARM_FFV = xtrue])
AC_CONFIG_FILES([ \
Makefile \
diff --git a/hal/Android.mk b/hal/Android.mk
index 9b320f0..96d4c6b 100644
--- a/hal/Android.mk
+++ b/hal/Android.mk
@@ -56,6 +56,8 @@
endif
endif
+LOCAL_CFLAGS += -Wno-macro-redefined
+
LOCAL_SRC_FILES := \
audio_hw.c \
voice.c \
@@ -400,4 +402,15 @@
include $(BUILD_SHARED_LIBRARY)
+LOCAL_CFLAGS += -Wno-unused-variable
+LOCAL_CFLAGS += -Wno-sign-compare
+LOCAL_CFLAGS += -Wno-unused-parameter
+LOCAL_CFLAGS += -Wno-unused-label
+LOCAL_CFLAGS += -Wno-gnu-designator
+LOCAL_CFLAGS += -Wno-typedef-redefinition
+LOCAL_CFLAGS += -Wno-shorten-64-to-32
+LOCAL_CFLAGS += -Wno-tautological-compare
+LOCAL_CFLAGS += -Wno-unused-function
+LOCAL_CFLAGS += -Wno-unused-local-typedef
+
endif
diff --git a/hal/Makefile.am b/hal/Makefile.am
index 8ab3e7c..95224d0 100644
--- a/hal/Makefile.am
+++ b/hal/Makefile.am
@@ -189,12 +189,20 @@
c_sources += audio_extn/hw_loopback.c
endif
+if RUN_KEEP_ALIVE_IN_ARM_FFV
+AM_CFLAGS += -DRUN_KEEP_ALIVE_IN_ARM_FFV
+endif
+
if AUDIO_HW_FFV
AM_CFLAGS += -DFFV_ENABLED \
-I $(PKG_CONFIG_SYSROOT_DIR)/usr/include/ffv/
c_sources += audio_extn/ffv.c
endif
+if CUSTOM_STEREO
+AM_CFLAGS += -DCUSTOM_STEREO_ENABLED
+endif
+
h_sources = audio_extn/audio_defs.h \
audio_extn/audio_extn.h \
audio_hw.h \
diff --git a/hal/acdb.c b/hal/acdb.c
index 182e513..ad67d61 100644
--- a/hal/acdb.c
+++ b/hal/acdb.c
@@ -34,7 +34,7 @@
int result = -1;
char *cvd_version = NULL;
- char *snd_card_name = NULL;
+ const char *snd_card_name = NULL;
struct mixer *mixer = NULL;
struct acdb_platform_data *my_data = NULL;
@@ -115,13 +115,14 @@
}
/* Get Sound card name */
- snd_card_name = strdup(mixer_get_name(mixer));
+ snd_card_name = mixer_get_name(mixer);
if (!snd_card_name) {
ALOGE("failed to allocate memory for snd_card_name");
result = -1;
goto cleanup;
}
+ snd_card_name = platform_get_snd_card_name_for_acdb_loader(snd_card_name);
int key = 0;
struct listnode *node = NULL;
struct meta_key_list *key_info = NULL;
@@ -160,9 +161,6 @@
if (cvd_version)
free(cvd_version);
- if (snd_card_name)
- free(snd_card_name);
-
return result;
}
diff --git a/hal/audio_extn/a2dp.c b/hal/audio_extn/a2dp.c
index c484713..91a1e15 100644
--- a/hal/audio_extn/a2dp.c
+++ b/hal/audio_extn/a2dp.c
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
+* Copyright (c) 2015-2018, 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
@@ -788,6 +788,10 @@
bool is_configured = false;
int ret = 0;
int sample_rate_backup;
+
+ if(aptx_bt_cfg == NULL)
+ return false;
+
#ifndef LINUX_ENABLED
struct aptx_enc_cfg_t aptx_dsp_cfg;
mixer_size = sizeof(struct aptx_enc_cfg_t);
@@ -798,9 +802,6 @@
sample_rate_backup = aptx_bt_cfg->sampling_rate;
#endif
- if(aptx_bt_cfg == NULL)
- return false;
-
ctl_enc_data = mixer_get_ctl_by_name(a2dp.adev->mixer, MIXER_ENC_CONFIG_BLOCK);
if (!ctl_enc_data) {
ALOGE(" ERROR a2dp encoder CONFIG data mixer control not identifed");
diff --git a/hal/audio_extn/audio_defs.h b/hal/audio_extn/audio_defs.h
old mode 100644
new mode 100755
index 2a81ba1..3921f49
--- a/hal/audio_extn/audio_defs.h
+++ b/hal/audio_extn/audio_defs.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014-2015, 2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2014-2015, 2017-2018, 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
@@ -190,6 +190,13 @@
int64_t adjust_time;
};
+/* Device playback mode passed to keep_alive_start & keep_alive_stop*/
+typedef enum {
+ KEEP_ALIVE_OUT_NONE = 0,
+ KEEP_ALIVE_OUT_PRIMARY,
+ KEEP_ALIVE_OUT_HDMI,
+} ka_mode_t;
+
/* type of asynchronous write callback events. Mutually exclusive
* event enums append those defined for stream_callback_event_t in audio.h */
typedef enum {
diff --git a/hal/audio_extn/audio_extn.c b/hal/audio_extn/audio_extn.c
old mode 100644
new mode 100755
index b3ba566..5db3706
--- a/hal/audio_extn/audio_extn.c
+++ b/hal/audio_extn/audio_extn.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
* Not a Contribution.
*
* Copyright (C) 2013 The Android Open Source Project
@@ -833,6 +833,7 @@
audio_extn_source_track_set_parameters(adev, parms);
audio_extn_fbsp_set_parameters(parms);
audio_extn_keep_alive_set_parameters(adev, parms);
+ audio_extn_passthru_set_parameters(adev, parms);
audio_extn_ext_disp_set_parameters(adev, parms);
audio_extn_qaf_set_parameters(adev, parms);
if (adev->offload_effects_set_parameters != NULL)
@@ -1253,6 +1254,7 @@
{
bool ssr_supported = false;
in->config.rate = config->sample_rate;
+ in->sample_rate = config->sample_rate;
ssr_supported = audio_extn_ssr_check_usecase(in);
if (ssr_supported) {
return audio_extn_ssr_set_usecase(in, config, update_params);
diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h
old mode 100644
new mode 100755
index 2239338..f1f45c0
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
* Not a Contribution.
*
* Copyright (C) 2013 The Android Open Source Project
@@ -221,6 +221,7 @@
#define audio_extn_usb_get_max_bit_width(p) (0)
#define audio_extn_usb_get_sup_sample_rates(t, s, l) (0)
#define audio_extn_usb_is_tunnel_supported() (0)
+#define audio_extn_usb_alive(adev) (false)
#else
void audio_extn_usb_init(void *adev);
void audio_extn_usb_deinit();
@@ -238,6 +239,7 @@
int audio_extn_usb_get_max_bit_width(bool playback);
int audio_extn_usb_get_sup_sample_rates(int type, uint32_t *sr, uint32_t l);
bool audio_extn_usb_is_tunnel_supported();
+bool audio_extn_usb_alive(int card);
#endif
#ifndef SPLIT_A2DP_ENABLED
@@ -769,15 +771,17 @@
#endif
#ifndef KEEP_ALIVE_ENABLED
-#define audio_extn_keep_alive_init(a) do {} while(0)
-#define audio_extn_keep_alive_start() do {} while(0)
-#define audio_extn_keep_alive_stop() do {} while(0)
+#define audio_extn_keep_alive_init(adev) do {} while(0)
+#define audio_extn_keep_alive_deinit() do {} while(0)
+#define audio_extn_keep_alive_start(ka_mode) do {} while(0)
+#define audio_extn_keep_alive_stop(ka_mode) do {} while(0)
#define audio_extn_keep_alive_is_active() (false)
#define audio_extn_keep_alive_set_parameters(adev, parms) (0)
#else
void audio_extn_keep_alive_init(struct audio_device *adev);
-void audio_extn_keep_alive_start();
-void audio_extn_keep_alive_stop();
+void audio_extn_keep_alive_deinit();
+void audio_extn_keep_alive_start(ka_mode_t ka_mode);
+void audio_extn_keep_alive_stop(ka_mode_t ka_mode);
bool audio_extn_keep_alive_is_active();
int audio_extn_keep_alive_set_parameters(struct audio_device *adev,
struct str_parms *parms);
diff --git a/hal/audio_extn/ffv.c b/hal/audio_extn/ffv.c
index 50b776b..027849c 100644
--- a/hal/audio_extn/ffv.c
+++ b/hal/audio_extn/ffv.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2018, 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
@@ -47,6 +47,7 @@
#include <sys/resource.h>
#include "audio_hw.h"
+#include "audio_extn.h"
#include "platform.h"
#include "platform_api.h"
@@ -323,7 +324,7 @@
{
char ffv_enabled[PROPERTY_VALUE_MAX] = "false";
- property_get("ro.qc.sdk.audio.ffv", ffv_enabled, "0");
+ property_get("ro.vendor.audio.sdk.ffv", ffv_enabled, "0");
if (!strncmp("true", ffv_enabled, 4)) {
ALOGD("%s: ffv is supported", __func__);
ffvmod.is_ffv_enabled = true;
@@ -497,7 +498,9 @@
}
ffvmod.in = in;
-
+#ifdef RUN_KEEP_ALIVE_IN_ARM_FFV
+ audio_extn_keep_alive_start(KEEP_ALIVE_OUT_PRIMARY);
+#endif
#ifdef FFV_PCM_DUMP
if (!ffvmod.fp_input) {
ALOGD("%s: Opening input dump file \n", __func__);
@@ -547,7 +550,9 @@
if (ffvmod.buffers_allocated)
deallocate_buffers();
-
+#ifdef RUN_KEEP_ALIVE_IN_ARM_FFV
+ audio_extn_keep_alive_stop(KEEP_ALIVE_OUT_PRIMARY);
+#endif
ffvmod.handle = NULL;
ffvmod.in = NULL;
ALOGV("%s: exit", __func__);
diff --git a/hal/audio_extn/keep_alive.c b/hal/audio_extn/keep_alive.c
old mode 100644
new mode 100755
index 698d8d0..0866a35
--- a/hal/audio_extn/keep_alive.c
+++ b/hal/audio_extn/keep_alive.c
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2014-2017, The Linux Foundation. All rights reserved.
+* Copyright (c) 2014-2018, 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
@@ -55,6 +55,7 @@
typedef enum {
REQUEST_WRITE,
+ REQUEST_QUIT,
} request_t;
typedef struct {
@@ -66,8 +67,11 @@
state_t state;
struct listnode cmd_list;
struct pcm *pcm;
+ struct stream_out *out;
+ ka_mode_t prev_mode;
bool done;
void * userdata;
+ audio_devices_t active_devices;
} keep_alive_t;
struct keep_alive_cmd {
@@ -89,31 +93,8 @@
};
static void * keep_alive_loop(void * context);
-
-void audio_extn_keep_alive_init(struct audio_device *adev)
-{
- ka.userdata = adev;
- ka.state = STATE_IDLE;
- ka.pcm = NULL;
-
- if (property_get_bool("audio.keep_alive.disabled", false)) {
- ALOGE("keep alive disabled");
- ka.state = STATE_DISABLED;
- return;
- }
-
- pthread_mutex_init(&ka.lock, (const pthread_mutexattr_t *) NULL);
- pthread_cond_init(&ka.cond, (const pthread_condattr_t *) NULL);
- pthread_cond_init(&ka.wake_up_cond, (const pthread_condattr_t *) NULL);
- pthread_mutex_init(&ka.sleep_lock, (const pthread_mutexattr_t *) NULL);
- list_init(&ka.cmd_list);
- if (pthread_create(&ka.thread, (const pthread_attr_t *) NULL,
- keep_alive_loop, NULL) < 0) {
- ALOGW("Failed to create keep_alive_thread");
- /* can continue without keep alive */
- ka.state = STATE_DEINIT;
- }
-}
+static int keep_alive_cleanup();
+static int keep_alive_start_l();
static void send_cmd_l(request_t r)
{
@@ -133,277 +114,275 @@
pthread_cond_signal(&ka.cond);
}
-static int close_silence_stream()
+void audio_extn_keep_alive_init(struct audio_device *adev)
{
- if (!ka.pcm)
- return -ENODEV;
-
- pcm_close(ka.pcm);
+ ka.userdata = adev;
+ ka.state = STATE_IDLE;
ka.pcm = NULL;
- return 0;
+ if (property_get_bool("audio.keep_alive.disabled", false)) {
+ ALOGE("keep alive disabled");
+ ka.state = STATE_DISABLED;
+ return;
+ }
+ ka.done = false;
+ ka.prev_mode = KEEP_ALIVE_OUT_NONE;
+ ka.active_devices = AUDIO_DEVICE_NONE;
+ pthread_mutex_init(&ka.lock, (const pthread_mutexattr_t *) NULL);
+ pthread_cond_init(&ka.cond, (const pthread_condattr_t *) NULL);
+ pthread_cond_init(&ka.wake_up_cond, (const pthread_condattr_t *) NULL);
+ pthread_mutex_init(&ka.sleep_lock, (const pthread_mutexattr_t *) NULL);
+ list_init(&ka.cmd_list);
+ if (pthread_create(&ka.thread, (const pthread_attr_t *) NULL,
+ keep_alive_loop, NULL) < 0) {
+ ALOGW("Failed to create keep_alive_thread");
+ /* can continue without keep alive */
+ ka.state = STATE_DEINIT;
+ return;
+ }
+ ALOGV("%s init done", __func__);
}
-static int open_silence_stream()
+void audio_extn_keep_alive_deinit()
{
- unsigned int flags = PCM_OUT|PCM_MONOTONIC;
+ if (ka.state == STATE_DEINIT || ka.state == STATE_DISABLED)
+ return;
+ ka.userdata = NULL;
+ ka.done = true;
+ pthread_mutex_lock(&ka.lock);
+ send_cmd_l(REQUEST_QUIT);
+ pthread_mutex_unlock(&ka.lock);
+ pthread_join(ka.thread, (void **) NULL);
+ pthread_mutex_destroy(&ka.lock);
+ pthread_cond_destroy(&ka.cond);
+ pthread_cond_destroy(&ka.wake_up_cond);
+ pthread_mutex_destroy(&ka.sleep_lock);
+ ALOGV("%s deinit done", __func__);
+}
- if (ka.pcm)
- return -EEXIST;
-
- int silence_pcm_dev_id = platform_get_pcm_device_id(USECASE_AUDIO_PLAYBACK_EXT_DISP_SILENCE,
- PCM_PLAYBACK);
-
- ALOGD("opening silence device %d", silence_pcm_dev_id);
+audio_devices_t get_device_id_from_mode(ka_mode_t ka_mode)
+{
struct audio_device * adev = (struct audio_device *)ka.userdata;
+ audio_devices_t out_device = AUDIO_DEVICE_NONE;
+ switch (ka_mode)
+ {
+ case KEEP_ALIVE_OUT_PRIMARY:
+ if (adev->primary_output) {
+ if (adev->primary_output->devices & AUDIO_DEVICE_OUT_ALL)
+ out_device = adev->primary_output->devices & AUDIO_DEVICE_OUT_ALL;
+ else
+ out_device = AUDIO_DEVICE_OUT_SPEAKER;
+ }
+ else {
+ out_device = AUDIO_DEVICE_OUT_SPEAKER;
+ }
+ break;
+
+ case KEEP_ALIVE_OUT_HDMI:
+ out_device = AUDIO_DEVICE_OUT_AUX_DIGITAL;
+ break;
+
+ default:
+ out_device = AUDIO_DEVICE_NONE;
+ }
+ return out_device;
+}
+
+void audio_extn_keep_alive_start(ka_mode_t ka_mode)
+{
+ struct audio_device * adev = (struct audio_device *)ka.userdata;
+ audio_devices_t out_devices = AUDIO_DEVICE_NONE;
+
+ pthread_mutex_lock(&ka.lock);
+ ALOGV("%s: mode %x", __func__, ka_mode);
+ if ((ka.state == STATE_DISABLED)||(ka.state == STATE_DEINIT)) {
+ ALOGE(" %s : Unexpected state %x",__func__, ka.state);
+ goto exit;
+ }
+
+ out_devices = get_device_id_from_mode(ka_mode);
+ if ((out_devices == ka.active_devices) && (ka.state == STATE_ACTIVE)) {
+ ALOGV(" %s : Already feeding silence to device %x",__func__, out_devices);
+ ka.prev_mode |= ka_mode;
+ goto exit;
+ }
+ ALOGV(" %s : active devices %x, new device %x",__func__, ka.active_devices, out_devices);
+
+ if (out_devices == AUDIO_DEVICE_NONE)
+ goto exit;
+
+ if (audio_extn_passthru_is_active()) {
+ ka.active_devices &= ~AUDIO_DEVICE_OUT_AUX_DIGITAL;
+ if(ka.active_devices == AUDIO_DEVICE_NONE)
+ goto exit;
+ }
+
+ ka.active_devices |= out_devices;
+ ka.prev_mode |= ka_mode;
+ if (ka.state == STATE_ACTIVE) {
+ ka.out->devices = ka.active_devices;
+ select_devices(adev, USECASE_AUDIO_PLAYBACK_SILENCE);
+ } else if (ka.state == STATE_IDLE) {
+ keep_alive_start_l();
+ }
+
+exit:
+ pthread_mutex_unlock(&ka.lock);
+}
+
+/* must be called with adev lock held */
+static int keep_alive_start_l()
+{
+ struct audio_device * adev = (struct audio_device *)ka.userdata;
+ unsigned int flags = PCM_OUT|PCM_MONOTONIC;
+ struct audio_usecase *usecase;
+ int rc = 0;
+
+ int silence_pcm_dev_id =
+ platform_get_pcm_device_id(USECASE_AUDIO_PLAYBACK_SILENCE,
+ PCM_PLAYBACK);
+
+ ka.done = false;
+ usecase = calloc(1, sizeof(struct audio_usecase));
+ if (usecase == NULL) {
+ ALOGE("%s: usecase is NULL", __func__);
+ rc = -ENOMEM;
+ goto exit;
+ }
+
+ ka.out = (struct stream_out *)calloc(1, sizeof(struct stream_out));
+ if (ka.out == NULL) {
+ ALOGE("%s: keep_alive out is NULL", __func__);
+ free(usecase);
+ rc = -ENOMEM;
+ goto exit;
+ }
+
+ ka.out->flags = 0;
+ ka.out->devices = ka.active_devices;
+ ka.out->dev = adev;
+ ka.out->format = AUDIO_FORMAT_PCM_16_BIT;
+ ka.out->sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
+ ka.out->channel_mask = AUDIO_CHANNEL_OUT_STEREO;
+ ka.out->supported_channel_masks[0] = AUDIO_CHANNEL_OUT_STEREO;
+ ka.out->config = silence_config;
+
+ usecase->stream.out = ka.out;
+ usecase->type = PCM_PLAYBACK;
+ usecase->id = USECASE_AUDIO_PLAYBACK_SILENCE;
+ usecase->out_snd_device = SND_DEVICE_NONE;
+ usecase->in_snd_device = SND_DEVICE_NONE;
+
+ list_add_tail(&adev->usecase_list, &usecase->list);
+ select_devices(adev, USECASE_AUDIO_PLAYBACK_SILENCE);
+
+ ALOGD("opening pcm device for silence playback %x", silence_pcm_dev_id);
ka.pcm = pcm_open(adev->snd_card, silence_pcm_dev_id,
flags, &silence_config);
- ALOGD("opened silence device %d", silence_pcm_dev_id);
if (ka.pcm == NULL || !pcm_is_ready(ka.pcm)) {
ALOGE("%s: %s", __func__, pcm_get_error(ka.pcm));
if (ka.pcm != NULL) {
pcm_close(ka.pcm);
ka.pcm = NULL;
}
- return -1;
+ goto exit;
}
- return 0;
+ send_cmd_l(REQUEST_WRITE);
+ while (ka.state != STATE_ACTIVE) {
+ pthread_cond_wait(&ka.cond, &ka.lock);
+ }
+ return rc;
+exit:
+ keep_alive_cleanup();
+ return rc;
}
-
-static int set_mixer_control(struct mixer *mixer,
- const char * mixer_ctl_name,
- const char *mixer_val)
-{
- struct mixer_ctl *ctl;
- if ((mixer == NULL) || (mixer_ctl_name == NULL) || (mixer_val == NULL)) {
- ALOGE("%s: Invalid input", __func__);
- return -EINVAL;
- }
- ALOGD("setting mixer ctl %s with value %s", mixer_ctl_name, mixer_val);
- ctl = mixer_get_ctl_by_name(mixer, mixer_ctl_name);
- if (!ctl) {
- ALOGE("%s: could not get ctl for mixer cmd - %s",
- __func__, mixer_ctl_name);
- return -EINVAL;
- }
-
- return mixer_ctl_set_enum_by_string(ctl, mixer_val);
-}
-
-/* must be called with adev lock held */
-void audio_extn_keep_alive_start()
+void audio_extn_keep_alive_stop(ka_mode_t ka_mode)
{
struct audio_device * adev = (struct audio_device *)ka.userdata;
- char mixer_ctl_name[MAX_LENGTH_MIXER_CONTROL_IN_INT];
- long app_type_cfg[MAX_LENGTH_MIXER_CONTROL_IN_INT];
- int len = 0, rc;
- struct mixer_ctl *ctl;
- int acdb_dev_id, snd_device;
- struct listnode *node;
- struct audio_usecase *usecase;
- int32_t sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
-
+ audio_devices_t out_devices;
if (ka.state == STATE_DISABLED)
return;
pthread_mutex_lock(&ka.lock);
- if (ka.state == STATE_DEINIT) {
- ALOGE(" %s : Invalid state ",__func__);
+ ALOGV("%s: mode %x", __func__, ka_mode);
+ if (ka_mode && (ka.state != STATE_ACTIVE)) {
+ ALOGV(" %s : Can't stop, keep_alive",__func__);
+ ALOGV(" %s : keep_alive is not running on device %x",__func__, get_device_id_from_mode(ka_mode));
+ ka.prev_mode |= ka_mode;
goto exit;
}
-
- if (audio_extn_passthru_is_active()) {
- ALOGE(" %s : Pass through is already active", __func__);
- goto exit;
+ out_devices = get_device_id_from_mode(ka_mode);
+ if (ka.prev_mode & ka_mode) {
+ ka.prev_mode &= ~ka_mode;
+ ka.active_devices = get_device_id_from_mode(ka.prev_mode);
}
- if (ka.state == STATE_ACTIVE) {
- ALOGV(" %s : Keep alive state is already Active",__func__ );
- goto exit;
+ if (ka.active_devices == AUDIO_DEVICE_NONE) {
+ keep_alive_cleanup();
+ } else if (ka.out->devices != ka.active_devices){
+ ka.out->devices = ka.active_devices;
+ select_devices(adev, USECASE_AUDIO_PLAYBACK_SILENCE);
}
-
- /* Dont start keep_alive if any other PCM session is routed to HDMI*/
- list_for_each(node, &adev->usecase_list) {
- usecase = node_to_item(node, struct audio_usecase, list);
- if (usecase->type == PCM_PLAYBACK &&
- usecase->devices & AUDIO_DEVICE_OUT_AUX_DIGITAL)
- goto exit;
- }
-
- ka.done = false;
-
- /*configure app type */
- int silence_pcm_dev_id = platform_get_pcm_device_id(USECASE_AUDIO_PLAYBACK_EXT_DISP_SILENCE,
- PCM_PLAYBACK);
- snprintf(mixer_ctl_name, sizeof(mixer_ctl_name),
- "Audio Stream %d App Type Cfg", silence_pcm_dev_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);
- rc = -EINVAL;
- goto exit;
- }
-
- /* Configure HDMI/DP Backend with default values, this as well
- * helps reconfigure HDMI/DP backend after passthrough.
- */
- int ext_disp_type = platform_get_ext_disp_type(adev->platform);
- switch(ext_disp_type) {
- case EXT_DISPLAY_TYPE_HDMI:
- snd_device = SND_DEVICE_OUT_HDMI;
- set_mixer_control(adev->mixer, "HDMI RX Format", "LPCM");
- set_mixer_control(adev->mixer, "HDMI_RX SampleRate", "KHZ_48");
- set_mixer_control(adev->mixer, "HDMI_RX Channels", "Two");
- break;
- case EXT_DISPLAY_TYPE_DP:
- snd_device = SND_DEVICE_OUT_DISPLAY_PORT;
- set_mixer_control(adev->mixer, "Display Port RX Format", "LPCM");
- set_mixer_control(adev->mixer, "Display Port RX SampleRate", "KHZ_48");
- set_mixer_control(adev->mixer, "Display Port RX Channels", "Two");
- break;
- default:
- ALOGE("%s: Invalid external display type:%d", __func__, ext_disp_type);
- goto exit;
- }
-
- acdb_dev_id = platform_get_snd_device_acdb_id(snd_device);
- if (acdb_dev_id < 0) {
- ALOGE("%s: Couldn't get the acdb dev id", __func__);
- rc = -EINVAL;
- goto exit;
- }
-
- sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
- app_type_cfg[len++] = platform_get_default_app_type(adev->platform);
- app_type_cfg[len++] = acdb_dev_id;
- app_type_cfg[len++] = sample_rate;
-
- ALOGI("%s:%d PLAYBACK app_type %d, acdb_dev_id %d, sample_rate %d",
- __func__, __LINE__,
- platform_get_default_app_type(adev->platform),
- acdb_dev_id, sample_rate);
- mixer_ctl_set_array(ctl, app_type_cfg, len);
-
- /*send calibration*/
- usecase = calloc(1, sizeof(struct audio_usecase));
-
- if (usecase == NULL) {
- ALOGE("%s: usecase is NULL", __func__);
- rc = -ENOMEM;
- goto exit;
- }
- usecase->type = PCM_PLAYBACK;
- usecase->out_snd_device = snd_device;
-
- platform_send_audio_calibration(adev->platform, usecase,
- platform_get_default_app_type(adev->platform), sample_rate);
-
- /*apply audio route */
- switch(ext_disp_type) {
- case EXT_DISPLAY_TYPE_HDMI:
- audio_route_apply_and_update_path(adev->audio_route, "silence-playback hdmi");
- break;
- case EXT_DISPLAY_TYPE_DP:
- audio_route_apply_and_update_path(adev->audio_route, "silence-playback display-port");
- break;
- default:
- ALOGE("%s: Invalid external display type:%d", __func__, ext_disp_type);
- goto exit;
- }
-
- if (open_silence_stream() == 0) {
- send_cmd_l(REQUEST_WRITE);
- while (ka.state != STATE_ACTIVE) {
- pthread_cond_wait(&ka.cond, &ka.lock);
- }
- }
-
exit:
pthread_mutex_unlock(&ka.lock);
}
/* must be called with adev lock held */
-void audio_extn_keep_alive_stop()
+static int keep_alive_cleanup()
{
struct audio_device * adev = (struct audio_device *)ka.userdata;
+ struct audio_usecase *uc_info;
- if (ka.state == STATE_DISABLED)
- return;
-
- pthread_mutex_lock(&ka.lock);
-
- if ((ka.state == STATE_DEINIT) || (ka.state == STATE_IDLE))
- goto exit;
+ ka.done = true;
+ if (ka.out != NULL)
+ free(ka.out);
pthread_mutex_lock(&ka.sleep_lock);
- ka.done = true;
pthread_cond_signal(&ka.wake_up_cond);
pthread_mutex_unlock(&ka.sleep_lock);
while (ka.state != STATE_IDLE) {
pthread_cond_wait(&ka.cond, &ka.lock);
}
- close_silence_stream();
+ ALOGV("%s: keep_alive state changed to %x", __func__, ka.state);
- /*apply audio route */
- int ext_disp_type = platform_get_ext_disp_type(adev->platform);
- switch(ext_disp_type) {
- case EXT_DISPLAY_TYPE_HDMI:
- audio_route_reset_and_update_path(adev->audio_route, "silence-playback hdmi");
- break;
- case EXT_DISPLAY_TYPE_DP:
- audio_route_reset_and_update_path(adev->audio_route, "silence-playback display-port");
- break;
- default:
- ALOGE("%s: Invalid external display type:%d", __func__, ext_disp_type);
+ uc_info = get_usecase_from_list(adev, USECASE_AUDIO_PLAYBACK_SILENCE);
+ if (uc_info == NULL) {
+ ALOGE("%s: Could not find keep alive usecase in the list", __func__);
+ } else {
+ disable_audio_route(adev, uc_info);
+ disable_snd_device(adev, uc_info->out_snd_device);
+ list_remove(&uc_info->list);
+ free(uc_info);
}
-
-exit:
- pthread_mutex_unlock(&ka.lock);
-}
-
-bool audio_extn_keep_alive_is_active()
-{
- return ka.state == STATE_ACTIVE;
+ pcm_close(ka.pcm);
+ ka.pcm = NULL;
+ ka.active_devices = KEEP_ALIVE_OUT_NONE;
+ return 0;
}
int audio_extn_keep_alive_set_parameters(struct audio_device *adev __unused,
- struct str_parms *parms)
+ struct str_parms *parms __unused)
{
char value[32];
- int ret;
-
+ int ret, pcm_device_id=0;
if (ka.state == STATE_DISABLED)
return 0;
- ret = str_parms_get_str(parms, AUDIO_PARAMETER_DEVICE_CONNECT, value, sizeof(value));
- if (ret >= 0) {
- int val = atoi(value);
- if (audio_is_output_devices(val) &&
- (val & AUDIO_DEVICE_OUT_AUX_DIGITAL)) {
- if (!audio_extn_passthru_is_active()) {
- ALOGV("start keep alive");
- audio_extn_keep_alive_start();
+ if ((ka.state == STATE_ACTIVE) && (ka.prev_mode & KEEP_ALIVE_OUT_PRIMARY)){
+ ret = str_parms_get_str(parms, AUDIO_PARAMETER_STREAM_ROUTING,
+ value, sizeof(value));
+ if (ret >= 0) {
+ pcm_device_id = atoi(value);
+ if(pcm_device_id > 0)
+ {
+ audio_extn_keep_alive_start(KEEP_ALIVE_OUT_PRIMARY);
}
}
}
-
- ret = str_parms_get_str(parms, AUDIO_PARAMETER_DEVICE_DISCONNECT, value,
- sizeof(value));
- if (ret >= 0) {
- int val = atoi(value);
- if (audio_is_output_devices(val) &&
- (val & AUDIO_DEVICE_OUT_AUX_DIGITAL)) {
- ALOGV("stop keep_alive");
- audio_extn_keep_alive_stop();
- }
- }
return 0;
}
-
static void * keep_alive_loop(void * context __unused)
{
struct keep_alive_cmd *cmd = NULL;
@@ -424,7 +403,11 @@
cmd = node_to_item(item, struct keep_alive_cmd, node);
list_remove(item);
- if (cmd->req != REQUEST_WRITE) {
+ if (cmd->req == REQUEST_QUIT) {
+ free(cmd);
+ pthread_mutex_unlock(&ka.lock);
+ break;
+ } else if (cmd->req != REQUEST_WRITE) {
free(cmd);
pthread_mutex_unlock(&ka.lock);
continue;
@@ -432,6 +415,7 @@
free(cmd);
ka.state = STATE_ACTIVE;
+ ALOGV("%s: state changed to %x", __func__, ka.state);
pthread_cond_signal(&ka.cond);
pthread_mutex_unlock(&ka.lock);
@@ -462,6 +446,7 @@
}
pthread_mutex_lock(&ka.lock);
ka.state = STATE_IDLE;
+ ALOGV("%s: state changed to %x", __func__, ka.state);
pthread_cond_signal(&ka.cond);
pthread_mutex_unlock(&ka.lock);
}
diff --git a/hal/audio_extn/passthru.c b/hal/audio_extn/passthru.c
old mode 100644
new mode 100755
index f8974c7..3ba2111
--- a/hal/audio_extn/passthru.c
+++ b/hal/audio_extn/passthru.c
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2014-2017, The Linux Foundation. All rights reserved.
+* Copyright (c) 2014-2018, 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
@@ -207,6 +207,8 @@
channel_count = audio_channel_count_from_out_mask(out->channel_mask);
#endif
break;
+ case AUDIO_FORMAT_IEC61937:
+ channel_count = audio_channel_count_from_out_mask(out->channel_mask);
default:
break;
}
@@ -309,8 +311,8 @@
}
if (out->devices & AUDIO_DEVICE_OUT_AUX_DIGITAL) {
- ALOGI("passthru on aux digital, start keep alive");
- audio_extn_keep_alive_start();
+ ALOGD("%s: passthru on aux digital, start keep alive", __func__);
+ audio_extn_keep_alive_start(KEEP_ALIVE_OUT_HDMI);
}
}
@@ -321,8 +323,30 @@
}
int audio_extn_passthru_set_parameters(struct audio_device *adev __unused,
- struct str_parms *parms __unused)
+ struct str_parms *parms)
{
+ char value[32];
+ int ret;
+ ret = str_parms_get_str(parms, AUDIO_PARAMETER_DEVICE_CONNECT, value, sizeof(value));
+ if (ret >= 0) {
+ int val = atoi(value);
+ if (val & AUDIO_DEVICE_OUT_AUX_DIGITAL) {
+ if (!audio_extn_passthru_is_active()) {
+ ALOGV("%s: start keep alive on aux digital", __func__);
+ audio_extn_keep_alive_start(KEEP_ALIVE_OUT_HDMI);
+ }
+ }
+ }
+
+ ret = str_parms_get_str(parms, AUDIO_PARAMETER_DEVICE_DISCONNECT, value,
+ sizeof(value));
+ if (ret >= 0) {
+ int val = atoi(value);
+ if (val & AUDIO_DEVICE_OUT_AUX_DIGITAL) {
+ ALOGV("%s: stop keep_alive on aux digital on device", __func__);
+ audio_extn_keep_alive_stop(KEEP_ALIVE_OUT_HDMI);
+ }
+ }
return 0;
}
@@ -419,18 +443,20 @@
struct audio_device *adev, struct stream_out *out,
const void *buffer __unused, size_t bytes __unused)
{
- if (audio_extn_passthru_is_passt_supported(adev, out)) {
- ALOGV("%s:PASSTHROUGH", __func__);
- out->compr_config.codec->compr_passthr = PASSTHROUGH;
- } else if (audio_extn_passthru_is_convert_supported(adev, out)) {
- ALOGV("%s:PASSTHROUGH CONVERT", __func__);
- out->compr_config.codec->compr_passthr = PASSTHROUGH_CONVERT;
- } else if (out->format == AUDIO_FORMAT_IEC61937) {
- ALOGV("%s:PASSTHROUGH IEC61937", __func__);
- out->compr_config.codec->compr_passthr = PASSTHROUGH_IEC61937;
- } else {
- ALOGV("%s:NO PASSTHROUGH", __func__);
- out->compr_config.codec->compr_passthr = LEGACY_PCM;
+ if(out->compr_config.codec != NULL) {
+ if (audio_extn_passthru_is_passt_supported(adev, out)) {
+ ALOGV("%s:PASSTHROUGH", __func__);
+ out->compr_config.codec->compr_passthr = PASSTHROUGH;
+ } else if (audio_extn_passthru_is_convert_supported(adev, out)) {
+ ALOGV("%s:PASSTHROUGH CONVERT", __func__);
+ out->compr_config.codec->compr_passthr = PASSTHROUGH_CONVERT;
+ } else if (out->format == AUDIO_FORMAT_IEC61937) {
+ ALOGV("%s:PASSTHROUGH IEC61937", __func__);
+ out->compr_config.codec->compr_passthr = PASSTHROUGH_IEC61937;
+ } else {
+ ALOGV("%s:NO PASSTHROUGH", __func__);
+ out->compr_config.codec->compr_passthr = LEGACY_PCM;
+ }
}
}
diff --git a/hal/audio_extn/soundtrigger.c b/hal/audio_extn/soundtrigger.c
index c2dee84..7ad8e9f 100644
--- a/hal/audio_extn/soundtrigger.c
+++ b/hal/audio_extn/soundtrigger.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013-2014, 2016-2017 The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2014, 2016-2018 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
@@ -135,6 +135,13 @@
list_add_tail(&st_dev->st_ses_list, &st_ses_info->list);
break;
+ case ST_EVENT_START_KEEP_ALIVE:
+ pthread_mutex_unlock(&st_dev->lock);
+ pthread_mutex_lock(&st_dev->adev->lock);
+ audio_extn_keep_alive_start(KEEP_ALIVE_OUT_PRIMARY);
+ pthread_mutex_unlock(&st_dev->adev->lock);
+ goto done;
+
case ST_EVENT_SESSION_DEREGISTER:
if (!config) {
ALOGE("%s: NULL config", __func__);
@@ -152,11 +159,20 @@
list_remove(&st_ses_info->list);
free(st_ses_info);
break;
+
+ case ST_EVENT_STOP_KEEP_ALIVE:
+ pthread_mutex_unlock(&st_dev->lock);
+ pthread_mutex_lock(&st_dev->adev->lock);
+ audio_extn_keep_alive_stop(KEEP_ALIVE_OUT_PRIMARY);
+ pthread_mutex_unlock(&st_dev->adev->lock);
+ goto done;
+
default:
ALOGW("%s: Unknown event %d", __func__, event);
break;
}
pthread_mutex_unlock(&st_dev->lock);
+done:
return status;
}
diff --git a/hal/audio_extn/usb.c b/hal/audio_extn/usb.c
index 8fa47a8..af8cc89 100644
--- a/hal/audio_extn/usb.c
+++ b/hal/audio_extn/usb.c
@@ -1133,6 +1133,13 @@
return;
}
+bool audio_extn_usb_alive(int card) {
+ char path[PATH_MAX] = {0};
+ // snprintf should never fail
+ (void) snprintf(path, sizeof(path), "/proc/asound/card%u/stream0", card);
+ return access(path, F_OK) == 0;
+}
+
void audio_extn_usb_init(void *adev)
{
if (usbmod == NULL) {
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
old mode 100644
new mode 100755
index 9422704..5716953
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
* Not a Contribution.
*
* Copyright (C) 2013 The Android Open Source Project
@@ -334,7 +334,7 @@
[USECASE_AUDIO_PLAYBACK_AFE_PROXY] = "afe-proxy-playback",
[USECASE_AUDIO_RECORD_AFE_PROXY] = "afe-proxy-record",
- [USECASE_AUDIO_PLAYBACK_EXT_DISP_SILENCE] = "silence-playback",
+ [USECASE_AUDIO_PLAYBACK_SILENCE] = "silence-playback",
/* Transcode loopback cases */
[USECASE_AUDIO_TRANSCODE_LOOPBACK] = "audio-transcode-loopback",
@@ -2316,6 +2316,12 @@
{
int ret = 0;
struct audio_usecase *uc_info;
+
+ if (in == NULL) {
+ ALOGE("%s: stream_in ptr is NULL", __func__);
+ return -EINVAL;
+ }
+
struct audio_device *adev = in->dev;
ALOGV("%s: enter: usecase(%d: %s)", __func__,
@@ -2873,7 +2879,7 @@
/* Must be called after removing the usecase from list */
if (out->devices & AUDIO_DEVICE_OUT_AUX_DIGITAL)
- audio_extn_keep_alive_start();
+ audio_extn_keep_alive_start(KEEP_ALIVE_OUT_HDMI);
if (out->ip_hdlr_handle) {
ret = audio_extn_ip_hdlr_intf_close(out->ip_hdlr_handle, true, out);
@@ -2967,7 +2973,7 @@
adev->perf_lock_opts_size);
if (out->devices & AUDIO_DEVICE_OUT_AUX_DIGITAL) {
- audio_extn_keep_alive_stop();
+ audio_extn_keep_alive_stop(KEEP_ALIVE_OUT_HDMI);
if (audio_extn_passthru_is_enabled() &&
audio_extn_passthru_is_passthrough_stream(out)) {
audio_extn_passthru_on_start(out);
@@ -3207,7 +3213,9 @@
case 32000:
case 44100:
case 48000:
+ case 88200:
case 96000:
+ case 176400:
case 192000:
break;
default:
@@ -3273,7 +3281,7 @@
return (size/(channel_count * bytes_per_sample));
}
-static uint64_t get_actual_pcm_frames_rendered(struct stream_out *out)
+static uint64_t get_actual_pcm_frames_rendered(struct stream_out *out, struct timespec *timestamp)
{
uint64_t actual_frames_rendered = 0;
size_t kernel_buffer_size = out->compr_config.fragment_size * out->compr_config.fragments;
@@ -3284,6 +3292,7 @@
int64_t platform_latency = platform_render_latency(out->usecase) *
out->sample_rate / 1000000LL;
+ pthread_mutex_lock(&out->position_query_lock);
/* not querying actual state of buffering in kernel as it would involve an ioctl call
* which then needs protection, this causes delay in TS query for pcm_offload usecase
* hence only estimate.
@@ -3292,8 +3301,14 @@
signed_frames = signed_frames / (audio_bytes_per_sample(out->format) * popcount(out->channel_mask)) - platform_latency;
- if (signed_frames > 0)
+ if (signed_frames > 0) {
actual_frames_rendered = signed_frames;
+ if (timestamp != NULL )
+ *timestamp = out->writeAt;
+ } else if (timestamp != NULL) {
+ clock_gettime(CLOCK_MONOTONIC, timestamp);
+ }
+ pthread_mutex_unlock(&out->position_query_lock);
ALOGVV("%s signed frames %lld out_written %lld kernel_buffer_size %d"
"bytes/sample %zu channel count %d", __func__,(long long int)signed_frames,
@@ -3421,7 +3436,6 @@
struct stream_out *out = (struct stream_out *)stream;
lock_output_stream(out);
-
// always send CMD_ERROR for offload streams, this
// is needed e.g. when SSR happens within compress_open
// since the stream is active, offload_callback_thread is also active.
@@ -3429,18 +3443,9 @@
stop_compressed_output_l(out);
send_offload_cmd_l(out, OFFLOAD_CMD_ERROR);
}
-
- // for compress streams , if the stream is not in standby
- // it will be triggered eventually from AF.
- bool do_standby = !out->standby &&
- !(out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD);
-
pthread_mutex_unlock(&out->lock);
- if (do_standby)
- return out_standby(&out->stream.common);
-
- return 0;
+ return out_standby(&out->stream.common);
}
/*
@@ -3568,6 +3573,15 @@
return;
}
+static int get_alive_usb_card(struct str_parms* parms) {
+ int card;
+ if ((str_parms_get_int(parms, "card", &card) >= 0) &&
+ !audio_extn_usb_alive(card)) {
+ return card;
+ }
+ return -ENODEV;
+}
+
static int out_set_parameters(struct audio_stream *stream, const char *kvpairs)
{
struct stream_out *out = (struct stream_out *)stream;
@@ -3635,6 +3649,22 @@
}
}
}
+
+ audio_devices_t new_dev = val;
+
+ // Workaround: If routing to an non existing usb device, fail gracefully
+ // The routing request will otherwise block during 10 second
+ int card;
+ if (audio_is_usb_out_device(new_dev) &&
+ (card = get_alive_usb_card(parms)) >= 0) {
+
+ ALOGW("out_set_parameters() ignoring rerouting to non existing USB card %d", card);
+ pthread_mutex_unlock(&adev->lock);
+ pthread_mutex_unlock(&out->lock);
+ ret = -ENOSYS;
+ goto routing_fail;
+ }
+
/*
* select_devices() call below switches all the usecases on the same
* backend to the new device. Refer to check_usecases_codec_backend() in
@@ -3709,6 +3739,7 @@
pthread_mutex_unlock(&adev->lock);
pthread_mutex_unlock(&out->lock);
}
+ routing_fail:
if (out == adev->primary_output) {
pthread_mutex_lock(&adev->lock);
@@ -4166,8 +4197,13 @@
else if (!is_offload_usecase(out->usecase))
bpf = audio_bytes_per_sample(out->format) *
audio_channel_count_from_out_mask(out->channel_mask);
- if (bpf != 0)
+
+ pthread_mutex_lock(&out->position_query_lock);
+ if (bpf != 0) {
out->written += bytes / bpf;
+ clock_gettime(CLOCK_MONOTONIC, &out->writeAt);
+ }
+ pthread_mutex_unlock(&out->position_query_lock);
}
static ssize_t out_write(struct audio_stream_out *stream, const void *buffer,
@@ -4492,7 +4528,7 @@
* this operation and adev_close_output_stream(where out gets reset).
*/
if (!out->non_blocking && !(out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD)) {
- *dsp_frames = get_actual_pcm_frames_rendered(out);
+ *dsp_frames = get_actual_pcm_frames_rendered(out, NULL);
ALOGVV("dsp_frames %d sampleRate %d",(int)*dsp_frames,out->sample_rate);
adjust_frames_for_device_delay(out, dsp_frames);
return 0;
@@ -4565,9 +4601,7 @@
*/
if (is_offload_usecase(out->usecase) && !out->non_blocking &&
!(out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD)) {
- *frames = get_actual_pcm_frames_rendered(out);
- /* this is the best we can do */
- clock_gettime(CLOCK_MONOTONIC, timestamp);
+ *frames = get_actual_pcm_frames_rendered(out, timestamp);
ALOGVV("frames %lld playedat %lld",(long long int)*frames,
timestamp->tv_sec * 1000000LL + timestamp->tv_nsec / 1000);
return 0;
@@ -5117,15 +5151,29 @@
err = str_parms_get_str(parms, AUDIO_PARAMETER_STREAM_ROUTING, value, sizeof(value));
if (err >= 0) {
val = atoi(value);
- if (((int)in->device != val) && (val != 0)) {
- in->device = val;
- /* If recording is in progress, change the tx device to new device */
- if (!in->standby && !in->is_st_session) {
- ALOGV("update input routing change");
- if (adev->adm_on_routing_change)
+ if (((int)in->device != val) && (val != 0) && audio_is_input_device(val) ) {
+
+ // Workaround: If routing to an non existing usb device, fail gracefully
+ // The routing request will otherwise block during 10 second
+ int card;
+ if (audio_is_usb_in_device(val) &&
+ (card = get_alive_usb_card(parms)) >= 0) {
+
+ ALOGW("in_set_parameters() ignoring rerouting to non existing USB card %d", card);
+ ret = -ENOSYS;
+ } else {
+
+ in->device = val;
+ /* If recording is in progress, change the tx device to new device */
+ if (!in->standby && !in->is_st_session) {
+ ALOGV("update input routing change");
+ // inform adm before actual routing to prevent glitches.
+ if (adev->adm_on_routing_change) {
adev->adm_on_routing_change(adev->adm_data,
in->capture_handle);
- ret = select_devices(adev, in->usecase);
+ ret = select_devices(adev, in->usecase);
+ }
+ }
}
}
}
@@ -5197,6 +5245,12 @@
size_t bytes)
{
struct stream_in *in = (struct stream_in *)stream;
+
+ if (in == NULL) {
+ ALOGE("%s: stream_in ptr is NULL", __func__);
+ return -EINVAL;
+ }
+
struct audio_device *adev = in->dev;
int ret = -1;
size_t bytes_read = 0;
@@ -5544,6 +5598,7 @@
pthread_mutex_init(&out->lock, (const pthread_mutexattr_t *) NULL);
pthread_mutex_init(&out->pre_lock, (const pthread_mutexattr_t *) NULL);
pthread_mutex_init(&out->compr_mute_lock, (const pthread_mutexattr_t *) NULL);
+ pthread_mutex_init(&out->position_query_lock, (const pthread_mutexattr_t *) NULL);
pthread_cond_init(&out->cond, (const pthread_condattr_t *) NULL);
if (devices == AUDIO_DEVICE_NONE)
@@ -5851,6 +5906,8 @@
out->is_compr_metadata_avail = false;
out->offload_state = OFFLOAD_STATE_IDLE;
out->playback_started = 0;
+ out->writeAt.tv_sec = 0;
+ out->writeAt.tv_nsec = 0;
audio_extn_dts_create_state_notifier_node(out->usecase);
@@ -6279,6 +6336,7 @@
ret = str_parms_get_str(parms, AUDIO_PARAMETER_DEVICE_CONNECT, value, sizeof(value));
if (ret >= 0) {
val = atoi(value);
+ audio_devices_t device = (audio_devices_t) val;
if (audio_is_output_device(val) &&
(val & AUDIO_DEVICE_OUT_AUX_DIGITAL)) {
ALOGV("cache new ext disp type and edid");
@@ -6289,8 +6347,7 @@
goto done;
}
platform_cache_edid(adev->platform);
- } else if (((audio_devices_t)val == AUDIO_DEVICE_OUT_USB_DEVICE) ||
- ((audio_devices_t)val == AUDIO_DEVICE_IN_USB_DEVICE)) {
+ } else if (audio_is_usb_out_device(device) || audio_is_usb_in_device(device)) {
/*
* Do not allow AFE proxy port usage by WFD source when USB headset is connected.
* Per AudioPolicyManager, USB device is higher priority than WFD.
@@ -6299,12 +6356,9 @@
* starting voice call on USB
*/
ret = str_parms_get_str(parms, "card", value, sizeof(value));
- if (ret >= 0) {
- if (audio_is_output_device(val))
- audio_extn_usb_add_device(AUDIO_DEVICE_OUT_USB_DEVICE, atoi(value));
- else
- audio_extn_usb_add_device(AUDIO_DEVICE_IN_USB_DEVICE, atoi(value));
- }
+ if (ret >= 0)
+ audio_extn_usb_add_device(device, atoi(value));
+
if (!audio_extn_usb_is_tunnel_supported()) {
ALOGV("detected USB connect .. disable proxy");
adev->allow_afe_proxy_usage = false;
@@ -6315,21 +6369,18 @@
ret = str_parms_get_str(parms, AUDIO_PARAMETER_DEVICE_DISCONNECT, value, sizeof(value));
if (ret >= 0) {
val = atoi(value);
+ audio_devices_t device = (audio_devices_t) val;
/*
* The HDMI / Displayport disconnect handling has been moved to
* audio extension to ensure that its parameters are not
* invalidated prior to updating sysfs of the disconnect event
* Invalidate will be handled by audio_extn_ext_disp_set_parameters()
*/
- if (((audio_devices_t)val == AUDIO_DEVICE_OUT_USB_DEVICE) ||
- ((audio_devices_t)val == AUDIO_DEVICE_IN_USB_DEVICE)) {
+ if (audio_is_usb_out_device(device) || audio_is_usb_in_device(device)) {
ret = str_parms_get_str(parms, "card", value, sizeof(value));
- if (ret >= 0) {
- if (audio_is_output_device(val))
- audio_extn_usb_remove_device(AUDIO_DEVICE_OUT_USB_DEVICE, atoi(value));
- else
- audio_extn_usb_remove_device(AUDIO_DEVICE_IN_USB_DEVICE, atoi(value));
- }
+ if (ret >= 0)
+ audio_extn_usb_remove_device(device, atoi(value));
+
if (!audio_extn_usb_is_tunnel_supported()) {
ALOGV("detected USB disconnect .. enable proxy");
adev->allow_afe_proxy_usage = true;
@@ -6711,6 +6762,10 @@
channel_count = audio_channel_count_from_in_mask(config->channel_mask);
} else if (config->format == AUDIO_FORMAT_DEFAULT) {
config->format = AUDIO_FORMAT_PCM_16_BIT;
+ } else if (property_get_bool("vendor.audio.capture.pcm.32bit.enable", false)
+ && config->format == AUDIO_FORMAT_PCM_32_BIT) {
+ in->config.format = PCM_FORMAT_S32_LE;
+ in->bit_width = 32;
} else if ((config->format == AUDIO_FORMAT_PCM_FLOAT) ||
(config->format == AUDIO_FORMAT_PCM_32_BIT) ||
(config->format == AUDIO_FORMAT_PCM_24_BIT_PACKED) ||
@@ -6901,6 +6956,11 @@
/* Disable echo reference while closing input stream */
platform_set_echo_reference(adev, false, AUDIO_DEVICE_NONE);
+ if (in == NULL) {
+ ALOGE("%s: audio_stream_in ptr is NULL", __func__);
+ return;
+ }
+
if (in->usecase == USECASE_COMPRESS_VOIP_CALL) {
pthread_mutex_lock(&adev->lock);
ret = voice_extn_compress_voip_close_input_stream(&stream->common);
diff --git a/hal/audio_hw.h b/hal/audio_hw.h
old mode 100644
new mode 100755
index 7885b97..0dc9115
--- a/hal/audio_hw.h
+++ b/hal/audio_hw.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
* Not a contribution.
*
* Copyright (C) 2013 The Android Open Source Project
@@ -187,7 +187,7 @@
USECASE_AUDIO_PLAYBACK_AFE_PROXY,
USECASE_AUDIO_RECORD_AFE_PROXY,
- USECASE_AUDIO_PLAYBACK_EXT_DISP_SILENCE,
+ USECASE_AUDIO_PLAYBACK_SILENCE,
USECASE_AUDIO_TRANSCODE_LOOPBACK,
@@ -274,6 +274,7 @@
pthread_mutex_t lock; /* see note below on mutex acquisition order */
pthread_mutex_t pre_lock; /* acquire before lock to avoid DOS by playback thread */
pthread_mutex_t compr_mute_lock; /* acquire before setting compress volume */
+ pthread_mutex_t position_query_lock; /* acquire before updating/getting position of track offload*/
pthread_cond_t cond;
struct pcm_config config;
struct compr_config compr_config;
@@ -304,6 +305,7 @@
pthread_t offload_thread;
struct listnode offload_cmd_list;
bool offload_thread_blocked;
+ struct timespec writeAt;
void *adsp_hdlr_stream_handle;
void *ip_hdlr_handle;
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
old mode 100644
new mode 100755
index ef23b15..930c5d4
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
* Not a Contribution.
*
* Copyright (C) 2013 The Android Open Source Project
@@ -85,6 +85,7 @@
#define PLATFORM_INFO_XML_PATH_SKUSH "/etc/audio_platform_info_skush.xml"
#define PLATFORM_INFO_XML_PATH "/etc/audio_platform_info.xml"
#define MIXER_XML_PATH_WCD9326_I2S "/etc/mixer_paths_wcd9326_i2s.xml"
+#define MIXER_XML_PATH_WCD9326_I2S_TDM "/etc/mixer_paths_wcd9326_i2s_tdm.xml"
#define MIXER_XML_PATH_WCD9330_I2S "/etc/mixer_paths_wcd9330_i2s.xml"
#define MIXER_XML_PATH_WCD9335_I2S "/etc/mixer_paths_wcd9335_i2s.xml"
#define MIXER_XML_PATH_SBC "/etc/mixer_paths_sbc.xml"
@@ -100,6 +101,7 @@
#define MIXER_XML_PATH_SKUN "/vendor/etc/mixer_paths_qrd_skun.xml"
#define PLATFORM_INFO_XML_PATH "/vendor/etc/audio_platform_info.xml"
#define MIXER_XML_PATH_WCD9326_I2S "/vendor/etc/mixer_paths_wcd9326_i2s.xml"
+#define MIXER_XML_PATH_WCD9326_I2S_TDM "/vendor/etc/mixer_paths_wcd9326_i2s_tdm.xml"
#define MIXER_XML_PATH_WCD9330_I2S "/vendor/etc/mixer_paths_wcd9330_i2s.xml"
#define MIXER_XML_PATH_WCD9335_I2S "/vendor/etc/mixer_paths_wcd9335_i2s.xml"
#define MIXER_XML_PATH_SBC "/vendor/etc/mixer_paths_sbc.xml"
@@ -383,7 +385,7 @@
AFE_PROXY_RECORD_PCM_DEVICE},
[USECASE_AUDIO_RECORD_AFE_PROXY] = {AFE_PROXY_PLAYBACK_PCM_DEVICE,
AFE_PROXY_RECORD_PCM_DEVICE},
- [USECASE_AUDIO_PLAYBACK_EXT_DISP_SILENCE] = {MULTIMEDIA9_PCM_DEVICE, -1},
+ [USECASE_AUDIO_PLAYBACK_SILENCE] = {MULTIMEDIA9_PCM_DEVICE, -1},
[USECASE_AUDIO_TRANSCODE_LOOPBACK] = {TRANSCODE_LOOPBACK_RX_DEV_ID, TRANSCODE_LOOPBACK_TX_DEV_ID},
[USECASE_AUDIO_PLAYBACK_VOIP] = {AUDIO_PLAYBACK_VOIP_PCM_DEVICE, AUDIO_PLAYBACK_VOIP_PCM_DEVICE},
[USECASE_AUDIO_RECORD_VOIP] = {AUDIO_RECORD_VOIP_PCM_DEVICE, AUDIO_RECORD_VOIP_PCM_DEVICE},
@@ -908,7 +910,7 @@
{TO_NAME_INDEX(USECASE_AUDIO_HFP_SCO)},
{TO_NAME_INDEX(USECASE_AUDIO_HFP_SCO_WB)},
{TO_NAME_INDEX(USECASE_AUDIO_SPKR_CALIB_TX)},
- {TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_EXT_DISP_SILENCE)},
+ {TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_SILENCE)},
{TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_FM)},
{TO_NAME_INDEX(USECASE_AUDIO_RECORD_FM_VIRTUAL)},
{TO_NAME_INDEX(USECASE_AUDIO_SPKR_CALIB_RX)},
@@ -940,6 +942,7 @@
{AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET , 9},
{AUDIO_DEVICE_OUT_USB_ACCESSORY , -1},
{AUDIO_DEVICE_OUT_USB_DEVICE , -1},
+ {AUDIO_DEVICE_OUT_USB_HEADSET , -1},
{AUDIO_DEVICE_OUT_REMOTE_SUBMIX , 9},
{AUDIO_DEVICE_OUT_PROXY , 9},
{AUDIO_DEVICE_OUT_FM , 7},
@@ -965,6 +968,7 @@
{AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET , 9},
{AUDIO_DEVICE_OUT_USB_ACCESSORY , -1},
{AUDIO_DEVICE_OUT_USB_DEVICE , -1},
+ {AUDIO_DEVICE_OUT_USB_HEADSET , -1},
{AUDIO_DEVICE_OUT_REMOTE_SUBMIX , 9},
{AUDIO_DEVICE_OUT_PROXY , 9},
{AUDIO_DEVICE_OUT_FM , 7},
@@ -1026,6 +1030,8 @@
sizeof("sdm660-tasha-snd-card")) ||
!strncmp(snd_card_name, "apq8009-tashalite-snd-card",
sizeof("apq8009-tashalite-snd-card")) ||
+ !strncmp(snd_card_name, "apq8009-tashalite-snd-card-tdm",
+ sizeof("apq8009-tashalite-snd-card-tdm")) ||
!strncmp(snd_card_name, "mdm9607-tomtom-i2s-snd-card",
sizeof("mdm9607-tomtom-i2s-snd-card")) ||
!strncmp(snd_card_name, "mdm-tasha-i2s-snd-card",
@@ -1401,6 +1407,13 @@
msm_device_to_be_id = msm_device_to_be_id_external_codec;
msm_be_id_array_len =
sizeof(msm_device_to_be_id_external_codec) / sizeof(msm_device_to_be_id_external_codec[0]);
+ } else if (!strncmp(snd_card_name, "apq8009-tashalite-snd-card-tdm",
+ sizeof("apq8009-tashalite-snd-card-tdm"))) {
+ strlcpy(mixer_xml_path, MIXER_XML_PATH_WCD9326_I2S_TDM,
+ MAX_MIXER_XML_PATH);
+ msm_device_to_be_id = msm_device_to_be_id_external_codec;
+ msm_be_id_array_len =
+ sizeof(msm_device_to_be_id_external_codec) / sizeof(msm_device_to_be_id_external_codec[0]);
} else if (!strncmp(snd_card_name, "mdm9607-tomtom-i2s-snd-card",
sizeof("mdm9607-tomtom-i2s-snd-card"))) {
strlcpy(mixer_xml_path, MIXER_XML_PATH_WCD9330_I2S,
@@ -1851,7 +1864,7 @@
plat_data->hw_dep_fd = fd;
}
-const char * get_snd_card_name_for_acdb_loader(const char *snd_card_name) {
+const char * platform_get_snd_card_name_for_acdb_loader(const char *snd_card_name) {
if(snd_card_name == NULL)
return NULL;
@@ -1905,7 +1918,7 @@
{
struct platform_data *my_data = (struct platform_data *)platform;
char *cvd_version = NULL;
- const char *snd_card_name, *acdb_snd_card_name;
+ const char *snd_card_name;
int result = -1;
struct listnode *node;
struct meta_key_list *key_info;
@@ -1920,21 +1933,21 @@
}
snd_card_name = mixer_get_name(my_data->adev->mixer);
- acdb_snd_card_name = get_snd_card_name_for_acdb_loader(snd_card_name);
+ snd_card_name = platform_get_snd_card_name_for_acdb_loader(snd_card_name);
if (my_data->acdb_init_v3) {
- result = my_data->acdb_init_v3(acdb_snd_card_name, cvd_version,
+ result = my_data->acdb_init_v3(snd_card_name, cvd_version,
&my_data->acdb_meta_key_list);
} else if (my_data->acdb_init) {
node = list_head(&my_data->acdb_meta_key_list);
key_info = node_to_item(node, struct meta_key_list, list);
key = key_info->cal_info.nKey;
- result = my_data->acdb_init(acdb_snd_card_name, cvd_version, key);
+ result = my_data->acdb_init(snd_card_name, cvd_version, key);
}
/* Save these variables in platform_data. These will be used
while reloading ACDB files during run time. */
strlcpy(my_data->cvd_version, cvd_version, MAX_CVD_VERSION_STRING_SIZE);
- strlcpy(my_data->snd_card_name, acdb_snd_card_name,
+ strlcpy(my_data->snd_card_name, snd_card_name,
MAX_SND_CARD_STRING_SIZE);
if (cvd_version)
@@ -2648,6 +2661,9 @@
}
}
+ /* Initialize keep alive for HDMI/loopback silence */
+ audio_extn_keep_alive_init(adev);
+
ret = audio_extn_utils_get_codec_version(snd_card_name,
my_data->adev->snd_card,
my_data->codec_version);
@@ -2683,6 +2699,8 @@
{
struct platform_data *my_data = (struct platform_data *)platform;
+ audio_extn_keep_alive_deinit();
+
if (my_data->edid_info) {
free(my_data->edid_info);
my_data->edid_info = NULL;
@@ -3904,8 +3922,10 @@
} else if (devices == (AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET |
AUDIO_DEVICE_OUT_SPEAKER)) {
snd_device = SND_DEVICE_OUT_SPEAKER_AND_USB_HEADSET;
- } else if (devices == (AUDIO_DEVICE_OUT_USB_DEVICE |
- AUDIO_DEVICE_OUT_SPEAKER)) {
+ } else if ((devices == (AUDIO_DEVICE_OUT_USB_DEVICE |
+ AUDIO_DEVICE_OUT_SPEAKER)) ||
+ (devices == (AUDIO_DEVICE_OUT_USB_HEADSET |
+ AUDIO_DEVICE_OUT_SPEAKER))){
snd_device = SND_DEVICE_OUT_SPEAKER_AND_USB_HEADSET;
} else if ((devices & AUDIO_DEVICE_OUT_SPEAKER) &&
(devices & AUDIO_DEVICE_OUT_ALL_A2DP)) {
@@ -3961,7 +3981,9 @@
} else {
snd_device = SND_DEVICE_OUT_VOICE_HEADPHONES;
}
- } else if (devices & AUDIO_DEVICE_OUT_USB_DEVICE) {
+ } else if (devices &
+ (AUDIO_DEVICE_OUT_USB_DEVICE |
+ AUDIO_DEVICE_OUT_USB_HEADSET)) {
if (snd_device == SND_DEVICE_NONE) {
snd_device = audio_extn_usb_is_capture_supported() ?
SND_DEVICE_OUT_VOICE_USB_HEADSET :
@@ -4096,7 +4118,9 @@
ALOGD("%s: setting USB hadset channel capability(2) for Proxy", __func__);
audio_extn_set_afe_proxy_channel_mixer(adev, 2);
snd_device = SND_DEVICE_OUT_USB_HEADSET;
- } else if (devices & AUDIO_DEVICE_OUT_USB_DEVICE) {
+ } else if (devices &
+ (AUDIO_DEVICE_OUT_USB_DEVICE |
+ AUDIO_DEVICE_OUT_USB_HEADSET)) {
if (audio_extn_usb_is_capture_supported())
snd_device = SND_DEVICE_OUT_USB_HEADSET;
else
@@ -4196,7 +4220,7 @@
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;
- } else if (in_device & AUDIO_DEVICE_IN_USB_DEVICE) {
+ } else if (audio_is_usb_in_device(in_device | AUDIO_DEVICE_BIT_IN)) {
snd_device = SND_DEVICE_IN_USB_HEADSET_MIC_AEC;
}
platform_set_echo_reference(adev, true, out_device);
@@ -4226,7 +4250,7 @@
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;
- } else if (in_device & AUDIO_DEVICE_IN_USB_DEVICE) {
+ } else if (audio_is_usb_in_device(in_device | AUDIO_DEVICE_BIT_IN)) {
snd_device = SND_DEVICE_IN_USB_HEADSET_MIC_AEC;
}
platform_set_echo_reference(adev, true, out_device);
@@ -4394,7 +4418,9 @@
}
} else if (out_device & AUDIO_DEVICE_OUT_TELEPHONY_TX) {
snd_device = SND_DEVICE_IN_VOICE_RX;
- } else if (out_device & AUDIO_DEVICE_OUT_USB_DEVICE) {
+ } else if (out_device &
+ (AUDIO_DEVICE_OUT_USB_DEVICE |
+ AUDIO_DEVICE_OUT_USB_HEADSET)) {
if (audio_extn_usb_is_capture_supported()) {
snd_device = SND_DEVICE_IN_VOICE_USB_HEADSET_MIC;
}
@@ -4473,7 +4499,7 @@
else
snd_device = SND_DEVICE_IN_VOICE_REC_MIC;
}
- } else if (in_device & AUDIO_DEVICE_IN_USB_DEVICE) {
+ } else if (audio_is_usb_in_device(in_device | AUDIO_DEVICE_BIT_IN)) {
snd_device = SND_DEVICE_IN_VOICE_RECOG_USB_HEADSET_MIC;
}
} else if (source == AUDIO_SOURCE_UNPROCESSED) {
@@ -4493,7 +4519,7 @@
}
} else if (in_device & AUDIO_DEVICE_IN_WIRED_HEADSET) {
snd_device = SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC;
- } else if (in_device & AUDIO_DEVICE_IN_USB_DEVICE) {
+ } else if (audio_is_usb_in_device(in_device | AUDIO_DEVICE_BIT_IN)) {
snd_device = SND_DEVICE_IN_UNPROCESSED_USB_HEADSET_MIC;
}
} else if ((source == AUDIO_SOURCE_VOICE_COMMUNICATION) ||
@@ -4572,7 +4598,7 @@
snd_device = SND_DEVICE_IN_USB_HEADSET_MIC;
} else if (in_device & AUDIO_DEVICE_IN_FM_TUNER) {
snd_device = SND_DEVICE_IN_CAPTURE_FM;
- } else if (in_device & AUDIO_DEVICE_IN_USB_DEVICE ) {
+ } else if (audio_is_usb_in_device(in_device | AUDIO_DEVICE_BIT_IN)) {
snd_device = SND_DEVICE_IN_USB_HEADSET_MIC;
} else {
ALOGE("%s: Unknown input device(s) %#x", __func__, in_device);
@@ -4609,7 +4635,9 @@
} else if (out_device & AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET ||
out_device & AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET) {
snd_device = SND_DEVICE_IN_USB_HEADSET_MIC;
- } else if (out_device & AUDIO_DEVICE_OUT_USB_DEVICE) {
+ } else if (out_device &
+ (AUDIO_DEVICE_OUT_USB_DEVICE |
+ AUDIO_DEVICE_OUT_USB_HEADSET)) {
if (audio_extn_usb_is_capture_supported())
snd_device = SND_DEVICE_IN_USB_HEADSET_MIC;
else
diff --git a/hal/msm8974/hw_info.c b/hal/msm8974/hw_info.c
index bddaf97..7b17ae4 100644
--- a/hal/msm8974/hw_info.c
+++ b/hal/msm8974/hw_info.c
@@ -210,6 +210,7 @@
SND_DEVICE_IN_SPEAKER_STEREO_DMIC,
};
+
static const snd_device_t tavil_qrd_variant_devices[] = {
SND_DEVICE_OUT_SPEAKER,
SND_DEVICE_OUT_VOICE_SPEAKER,
@@ -218,6 +219,10 @@
SND_DEVICE_OUT_VOICE_TTY_HCO_HANDSET,
};
+static const snd_device_t auto_variant_devices[] = {
+ SND_DEVICE_OUT_SPEAKER
+};
+
static void update_hardware_info_8084(struct hardware_info *hw_info, const char *snd_card_name)
{
if (!strcmp(snd_card_name, "apq8084-taiko-mtp-snd-card") ||
@@ -271,6 +276,24 @@
hw_info->snd_devices = NULL;
hw_info->num_snd_devices = 0;
strlcpy(hw_info->dev_extn, "", sizeof(hw_info->dev_extn));
+ } else if (!strcmp(snd_card_name, "apq8096-auto-snd-card")) {
+ strlcpy(hw_info->type, " dragon-board", sizeof(hw_info->type));
+ strlcpy(hw_info->name, "apq8096", sizeof(hw_info->name));
+ hw_info->snd_devices = (snd_device_t *)auto_variant_devices;
+ hw_info->num_snd_devices = ARRAY_SIZE(auto_variant_devices);
+ strlcpy(hw_info->dev_extn, "-db", sizeof(hw_info->dev_extn));
+ } else if (!strcmp(snd_card_name, "apq8096-adp-agave-snd-card")) {
+ strlcpy(hw_info->type, " agave", sizeof(hw_info->type));
+ strlcpy(hw_info->name, "apq8096", sizeof(hw_info->name));
+ hw_info->snd_devices = (snd_device_t *)auto_variant_devices;
+ hw_info->num_snd_devices = ARRAY_SIZE(auto_variant_devices);
+ strlcpy(hw_info->dev_extn, "-agave", sizeof(hw_info->dev_extn));
+ } else if (!strcmp(snd_card_name, "apq8096-adp-mmxf-snd-card")) {
+ strlcpy(hw_info->type, " mmxf", sizeof(hw_info->type));
+ strlcpy(hw_info->name, "apq8096", sizeof(hw_info->name));
+ hw_info->snd_devices = (snd_device_t *)auto_variant_devices;
+ hw_info->num_snd_devices = ARRAY_SIZE(auto_variant_devices);
+ strlcpy(hw_info->dev_extn, "-mmxf", sizeof(hw_info->dev_extn));
} else {
ALOGW("%s: Not an 8096 device", __func__);
}
@@ -558,7 +581,7 @@
} else if (strstr(snd_card_name, "sdm660") || strstr(snd_card_name, "sdm670")) {
ALOGV("Bear - variant soundcard");
update_hardware_info_bear(hw_info, snd_card_name);
- } else if (strncmp(snd_card_name, "sdx", sizeof("sdx"))) {
+ } else if (strstr(snd_card_name, "sdx")) {
ALOGV("SDX - variant soundcard");
update_hardware_info_sdx(hw_info, snd_card_name);
} else {
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
old mode 100644
new mode 100755
index a86c200..da2ccb6
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
* Not a Contribution.
*
* Copyright (C) 2013 The Android Open Source Project
@@ -63,7 +63,7 @@
#define PLATFORM_INFO_XML_PATH "/etc/audio_platform_info.xml"
#define MIXER_XML_PATH_AUXPCM "/etc/mixer_paths_auxpcm.xml"
#define MIXER_XML_PATH_I2S "/etc/mixer_paths_i2s.xml"
-#define PLATFORM_INFO_XML_PATH_I2S "/etc/audio_platform_info_i2s.xml"
+#define PLATFORM_INFO_XML_PATH_I2S "/etc/audio_platform_info_extcodec.xml"
#else
#define MIXER_XML_BASE_STRING "/vendor/etc/mixer_paths"
#define MIXER_XML_DEFAULT_PATH "/vendor/etc/mixer_paths.xml"
@@ -367,7 +367,7 @@
AFE_PROXY_RECORD_PCM_DEVICE},
[USECASE_AUDIO_RECORD_AFE_PROXY] = {AFE_PROXY_PLAYBACK_PCM_DEVICE,
AFE_PROXY_RECORD_PCM_DEVICE},
- [USECASE_AUDIO_PLAYBACK_EXT_DISP_SILENCE] = {MULTIMEDIA9_PCM_DEVICE, -1},
+ [USECASE_AUDIO_PLAYBACK_SILENCE] = {MULTIMEDIA9_PCM_DEVICE, -1},
[USECASE_AUDIO_TRANSCODE_LOOPBACK] = {TRANSCODE_LOOPBACK_RX_DEV_ID, TRANSCODE_LOOPBACK_TX_DEV_ID},
[USECASE_AUDIO_PLAYBACK_VOIP] = {AUDIO_PLAYBACK_VOIP_PCM_DEVICE, AUDIO_PLAYBACK_VOIP_PCM_DEVICE},
@@ -894,7 +894,7 @@
{TO_NAME_INDEX(USECASE_AUDIO_SPKR_CALIB_TX)},
{TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_AFE_PROXY)},
{TO_NAME_INDEX(USECASE_AUDIO_RECORD_AFE_PROXY)},
- {TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_EXT_DISP_SILENCE)},
+ {TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_SILENCE)},
};
#define NO_COLS 2
@@ -915,6 +915,7 @@
{AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET , 9},
{AUDIO_DEVICE_OUT_USB_ACCESSORY , -1},
{AUDIO_DEVICE_OUT_USB_DEVICE , -1},
+ {AUDIO_DEVICE_OUT_USB_HEADSET , -1},
{AUDIO_DEVICE_OUT_REMOTE_SUBMIX , 9},
{AUDIO_DEVICE_OUT_PROXY , 9},
{AUDIO_DEVICE_OUT_FM , 7},
@@ -940,6 +941,7 @@
{AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET , 9},
{AUDIO_DEVICE_OUT_USB_ACCESSORY , -1},
{AUDIO_DEVICE_OUT_USB_DEVICE , -1},
+ {AUDIO_DEVICE_OUT_USB_HEADSET , -1},
{AUDIO_DEVICE_OUT_REMOTE_SUBMIX , 9},
{AUDIO_DEVICE_OUT_PROXY , 9},
/* Add the correct be ids */
@@ -966,6 +968,7 @@
{AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET , 9},
{AUDIO_DEVICE_OUT_USB_ACCESSORY , -1},
{AUDIO_DEVICE_OUT_USB_DEVICE , -1},
+ {AUDIO_DEVICE_OUT_USB_HEADSET , -1},
{AUDIO_DEVICE_OUT_REMOTE_SUBMIX , 9},
{AUDIO_DEVICE_OUT_PROXY , 9},
/* Add the correct be ids */
@@ -992,6 +995,7 @@
{AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET , 9},
{AUDIO_DEVICE_OUT_USB_ACCESSORY , -1},
{AUDIO_DEVICE_OUT_USB_DEVICE , -1},
+ {AUDIO_DEVICE_OUT_USB_HEADSET , -1},
{AUDIO_DEVICE_OUT_REMOTE_SUBMIX , 9},
{AUDIO_DEVICE_OUT_PROXY , 9},
/* Add the correct be ids */
@@ -1730,7 +1734,7 @@
plat_data->hw_dep_fd = fd;
}
-const char * get_snd_card_name_for_acdb_loader(const char *snd_card_name) {
+const char * platform_get_snd_card_name_for_acdb_loader(const char *snd_card_name) {
if(snd_card_name == NULL)
return NULL;
@@ -1767,7 +1771,7 @@
}
snd_card_name = mixer_get_name(my_data->adev->mixer);
- snd_card_name = get_snd_card_name_for_acdb_loader(snd_card_name);
+ snd_card_name = platform_get_snd_card_name_for_acdb_loader(snd_card_name);
if (my_data->acdb_init_v3) {
result = my_data->acdb_init_v3(snd_card_name, cvd_version,
@@ -2061,6 +2065,7 @@
my_data->ext_disp_type = EXT_DISPLAY_TYPE_NONE;
my_data->hw_dep_fd = -1;
my_data->mono_speaker = SPKR_1;
+ my_data->speaker_lr_swap = false;
be_dai_name_table = NULL;
@@ -2491,6 +2496,9 @@
if (property_get_bool("vendor.audio.apptype.multirec.enabled", false))
my_data->use_generic_handset = true;
+ /* Initialize keep alive for HDMI/loopback silence */
+ audio_extn_keep_alive_init(adev);
+
my_data->edid_info = NULL;
free(snd_card_name);
free(snd_card_name_t);
@@ -2501,6 +2509,8 @@
{
struct platform_data *my_data = (struct platform_data *)platform;
+ audio_extn_keep_alive_deinit();
+
if (my_data->edid_info) {
free(my_data->edid_info);
my_data->edid_info = NULL;
@@ -3711,8 +3721,10 @@
} else if (devices == (AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET |
AUDIO_DEVICE_OUT_SPEAKER)) {
snd_device = SND_DEVICE_OUT_SPEAKER_AND_USB_HEADSET;
- } else if (devices == (AUDIO_DEVICE_OUT_USB_DEVICE |
- AUDIO_DEVICE_OUT_SPEAKER)) {
+ } else if ((devices == (AUDIO_DEVICE_OUT_USB_DEVICE |
+ AUDIO_DEVICE_OUT_SPEAKER)) ||
+ (devices == (AUDIO_DEVICE_OUT_USB_HEADSET |
+ AUDIO_DEVICE_OUT_SPEAKER))) {
snd_device = SND_DEVICE_OUT_SPEAKER_AND_USB_HEADSET;
} else if ((devices & AUDIO_DEVICE_OUT_SPEAKER) &&
(devices & AUDIO_DEVICE_OUT_ALL_A2DP)) {
@@ -3768,7 +3780,9 @@
} else {
snd_device = SND_DEVICE_OUT_VOICE_HEADPHONES;
}
- } else if (devices & AUDIO_DEVICE_OUT_USB_DEVICE) {
+ } else if (devices &
+ (AUDIO_DEVICE_OUT_USB_DEVICE |
+ AUDIO_DEVICE_OUT_USB_HEADSET)) {
if (voice_is_in_call(adev)) {
switch (adev->voice.tty_mode) {
case TTY_MODE_FULL:
@@ -3904,7 +3918,9 @@
ALOGD("%s: setting USB hadset channel capability(2) for Proxy", __func__);
audio_extn_set_afe_proxy_channel_mixer(adev, 2);
snd_device = SND_DEVICE_OUT_USB_HEADSET;
- } else if (devices & AUDIO_DEVICE_OUT_USB_DEVICE) {
+ } else if (devices &
+ (AUDIO_DEVICE_OUT_USB_DEVICE |
+ AUDIO_DEVICE_OUT_USB_HEADSET)) {
if (audio_extn_usb_is_capture_supported())
snd_device = SND_DEVICE_OUT_USB_HEADSET;
else
@@ -4007,7 +4023,7 @@
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;
- } else if (in_device & AUDIO_DEVICE_IN_USB_DEVICE) {
+ } else if (audio_is_usb_in_device(in_device | AUDIO_DEVICE_BIT_IN)) {
snd_device = SND_DEVICE_IN_USB_HEADSET_MIC_AEC;
}
platform_set_echo_reference(adev, true, out_device);
@@ -4041,7 +4057,7 @@
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;
- } else if (in_device & AUDIO_DEVICE_IN_USB_DEVICE) {
+ } else if (audio_is_usb_in_device(in_device | AUDIO_DEVICE_BIT_IN)) {
snd_device = SND_DEVICE_IN_USB_HEADSET_MIC_AEC;
}
platform_set_echo_reference(adev, true, out_device);
@@ -4145,7 +4161,9 @@
ALOGE("%s: Invalid TTY mode (%#x)", __func__, adev->voice.tty_mode);
}
goto exit;
- } else if (out_device & AUDIO_DEVICE_OUT_USB_DEVICE) {
+ } else if (out_device &
+ (AUDIO_DEVICE_OUT_USB_DEVICE |
+ AUDIO_DEVICE_OUT_USB_HEADSET)) {
switch (adev->voice.tty_mode) {
case TTY_MODE_FULL:
snd_device = SND_DEVICE_IN_VOICE_TTY_FULL_USB_MIC;
@@ -4242,7 +4260,9 @@
}
} else if (out_device & AUDIO_DEVICE_OUT_TELEPHONY_TX) {
snd_device = SND_DEVICE_IN_VOICE_RX;
- } else if (out_device & AUDIO_DEVICE_OUT_USB_DEVICE) {
+ } else if (out_device &
+ (AUDIO_DEVICE_OUT_USB_DEVICE |
+ AUDIO_DEVICE_OUT_USB_HEADSET)) {
if (audio_extn_usb_is_capture_supported()) {
snd_device = SND_DEVICE_IN_VOICE_USB_HEADSET_MIC;
}
@@ -4321,7 +4341,7 @@
else
snd_device = SND_DEVICE_IN_VOICE_REC_MIC;
}
- } else if (in_device & AUDIO_DEVICE_IN_USB_DEVICE) {
+ } else if (audio_is_usb_in_device(in_device | AUDIO_DEVICE_BIT_IN)) {
snd_device = SND_DEVICE_IN_VOICE_RECOG_USB_HEADSET_MIC;
}
} else if (source == AUDIO_SOURCE_UNPROCESSED) {
@@ -4341,7 +4361,7 @@
}
} else if (in_device & AUDIO_DEVICE_IN_WIRED_HEADSET) {
snd_device = SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC;
- } else if (in_device & AUDIO_DEVICE_IN_USB_DEVICE) {
+ } else if (audio_is_usb_in_device(in_device | AUDIO_DEVICE_BIT_IN)) {
snd_device = SND_DEVICE_IN_UNPROCESSED_USB_HEADSET_MIC;
}
} else if ((source == AUDIO_SOURCE_VOICE_COMMUNICATION) ||
@@ -4419,7 +4439,7 @@
snd_device = SND_DEVICE_IN_USB_HEADSET_MIC;
} else if (in_device & AUDIO_DEVICE_IN_FM_TUNER) {
snd_device = SND_DEVICE_IN_CAPTURE_FM;
- } else if (in_device & AUDIO_DEVICE_IN_USB_DEVICE ) {
+ } else if (audio_is_usb_in_device(in_device | AUDIO_DEVICE_BIT_IN)) {
snd_device = SND_DEVICE_IN_USB_HEADSET_MIC;
} else {
ALOGE("%s: Unknown input device(s) %#x", __func__, in_device);
@@ -4464,7 +4484,9 @@
} else if (out_device & AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET ||
out_device & AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET) {
snd_device = SND_DEVICE_IN_USB_HEADSET_MIC;
- } else if (out_device & AUDIO_DEVICE_OUT_USB_DEVICE) {
+ } else if (out_device &
+ (AUDIO_DEVICE_OUT_USB_DEVICE |
+ AUDIO_DEVICE_OUT_USB_HEADSET)) {
if (audio_extn_usb_is_capture_supported())
snd_device = SND_DEVICE_IN_USB_HEADSET_MIC;
else
diff --git a/hal/msm8974/platform.h b/hal/msm8974/platform.h
index c2fb810..6efeebe 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -368,11 +368,11 @@
#define PLAYBACK_OFFLOAD_DEVICE 9
// Direct_PCM
-#if defined (PLATFORM_MSM8994) || defined (PLATFORM_MSM8996) || defined (PLATFORM_APQ8084) || defined (PLATFORM_MSM8998) || defined (PLATFORM_SDM845) || defined (PLATFORM_SDM670) ||defined (PLATFORM_QCS605)
+#if defined (PLATFORM_MSM8994) || defined (PLATFORM_MSM8996) || defined (PLATFORM_APQ8084) || defined (PLATFORM_MSM8998) || defined (PLATFORM_SDM845) || defined (PLATFORM_SDM670) ||defined (PLATFORM_QCS605) ||defined (PLATFORM_SDX24)
#define PLAYBACK_OFFLOAD_DEVICE2 17
#endif
-#if defined (PLATFORM_APQ8084) || defined (PLATFORM_MSM8996) || defined (PLATFORM_MSM8998) || defined (PLATFORM_SDM845) || defined (PLATFORM_SDM670) || defined(PLATFORM_QCS605)
+#if defined (PLATFORM_APQ8084) || defined (PLATFORM_MSM8996) || defined (PLATFORM_MSM8998) || defined (PLATFORM_SDM845) || defined (PLATFORM_SDM670) || defined(PLATFORM_QCS605) || defined (PLATFORM_SDX24)
#define PLAYBACK_OFFLOAD_DEVICE3 18
#define PLAYBACK_OFFLOAD_DEVICE4 34
#define PLAYBACK_OFFLOAD_DEVICE5 35
diff --git a/hal/platform_api.h b/hal/platform_api.h
index e72c6e9..0fec452 100644
--- a/hal/platform_api.h
+++ b/hal/platform_api.h
@@ -260,4 +260,5 @@
int platform_get_mmap_data_fd(void *platform, int dev, int dir,
int *fd, uint32_t *size);
int platform_get_ec_ref_loopback_snd_device(int channel_count);
+const char * platform_get_snd_card_name_for_acdb_loader(const char *snd_card_name);
#endif // AUDIO_PLATFORM_API_H
diff --git a/mm-audio/Android.mk b/mm-audio/Android.mk
index 3885afc..5e46fc1 100644
--- a/mm-audio/Android.mk
+++ b/mm-audio/Android.mk
@@ -1,3 +1,14 @@
+LOCAL_CFLAGS += -Wno-unused-variable
+LOCAL_CFLAGS += -Wno-sign-compare
+LOCAL_CFLAGS += -Wno-unused-parameter
+LOCAL_CFLAGS += -Wno-unused-label
+LOCAL_CFLAGS += -Wno-gnu-designator
+LOCAL_CFLAGS += -Wno-typedef-redefinition
+LOCAL_CFLAGS += -Wno-shorten-64-to-32
+LOCAL_CFLAGS += -Wno-tautological-compare
+LOCAL_CFLAGS += -Wno-unused-function
+LOCAL_CFLAGS += -Wno-unused-local-typedef
+
ifeq ($(strip $(TARGET_USES_QCOM_MM_AUDIO)),true)
include $(call all-subdir-makefiles)
endif
diff --git a/mm-audio/aenc-aac/qdsp6/Android.mk b/mm-audio/aenc-aac/qdsp6/Android.mk
index b427233..00d7106 100644
--- a/mm-audio/aenc-aac/qdsp6/Android.mk
+++ b/mm-audio/aenc-aac/qdsp6/Android.mk
@@ -63,6 +63,7 @@
LOCAL_PRELINK_MODULE := false
LOCAL_SHARED_LIBRARIES := libmm-omxcore
LOCAL_SHARED_LIBRARIES += libOmxAacEnc
+LOCAL_VENDOR_MODULE := true
LOCAL_SRC_FILES := test/omx_aac_enc_test.c
include $(BUILD_EXECUTABLE)
diff --git a/mm-audio/aenc-aac/qdsp6/test/omx_aac_enc_test.c b/mm-audio/aenc-aac/qdsp6/test/omx_aac_enc_test.c
index 5239a8e..636c38b 100644
--- a/mm-audio/aenc-aac/qdsp6/test/omx_aac_enc_test.c
+++ b/mm-audio/aenc-aac/qdsp6/test/omx_aac_enc_test.c
@@ -1,5 +1,5 @@
/*--------------------------------------------------------------------------
-Copyright (c) 2010-2014, 2016-2017 The Linux Foundation. All rights reserved.
+Copyright (c) 2010-2014, 2016-2018 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 met:
@@ -271,14 +271,15 @@
int status = 0;
errno = 0;
- ptr = (char *)malloc(strlen(input) + 1);
- if (ptr == NULL) {
- DEBUG_PRINT("Low memory\n");
+
+ if (input == NULL){
+ DEBUG_PRINT("No input is given\n");
status = -1;
goto exit;
}
- if (input == NULL){
- DEBUG_PRINT("No input is given\n");
+ ptr = (char *)malloc(strlen(input) + 1);
+ if (ptr == NULL) {
+ DEBUG_PRINT("Low memory\n");
status = -1;
goto exit;
}
@@ -320,6 +321,8 @@
break;
}
exit:
+ if (ptr != NULL)
+ free(ptr);
if (status != 0)
exit(0);
return value;
diff --git a/mm-audio/aenc-amrnb/qdsp6/Android.mk b/mm-audio/aenc-amrnb/qdsp6/Android.mk
index 3fa619e..ee6b439 100644
--- a/mm-audio/aenc-amrnb/qdsp6/Android.mk
+++ b/mm-audio/aenc-amrnb/qdsp6/Android.mk
@@ -63,6 +63,7 @@
LOCAL_PRELINK_MODULE := false
LOCAL_SHARED_LIBRARIES := libmm-omxcore
LOCAL_SHARED_LIBRARIES += libOmxAmrEnc
+LOCAL_VENDOR_MODULE := true
LOCAL_SRC_FILES := test/omx_amr_enc_test.c
include $(BUILD_EXECUTABLE)
diff --git a/mm-audio/aenc-evrc/qdsp6/Android.mk b/mm-audio/aenc-evrc/qdsp6/Android.mk
index 03965cb..14a2b70 100644
--- a/mm-audio/aenc-evrc/qdsp6/Android.mk
+++ b/mm-audio/aenc-evrc/qdsp6/Android.mk
@@ -62,6 +62,7 @@
LOCAL_PRELINK_MODULE := false
LOCAL_SHARED_LIBRARIES := libmm-omxcore
LOCAL_SHARED_LIBRARIES += libOmxEvrcEnc
+LOCAL_VENDOR_MODULE := true
LOCAL_SRC_FILES := test/omx_evrc_enc_test.c
include $(BUILD_EXECUTABLE)
diff --git a/mm-audio/aenc-evrc/qdsp6/test/omx_evrc_enc_test.c b/mm-audio/aenc-evrc/qdsp6/test/omx_evrc_enc_test.c
index f9071dc..8053fa1 100644
--- a/mm-audio/aenc-evrc/qdsp6/test/omx_evrc_enc_test.c
+++ b/mm-audio/aenc-evrc/qdsp6/test/omx_evrc_enc_test.c
@@ -1,6 +1,6 @@
/*--------------------------------------------------------------------------
-Copyright (c) 2010-2014, 2017 The Linux Foundation. All rights reserved.
+Copyright (c) 2010-2014, 2017-2018 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 met:
@@ -284,14 +284,15 @@
int status = 0;
errno = 0;
- ptr = (char *)malloc(strlen(input) + 1);
- if (ptr == NULL) {
- DEBUG_PRINT("Low memory\n");
+
+ if (input == NULL){
+ DEBUG_PRINT("No input is given\n");
status = -1;
goto exit;
}
- if (input == NULL){
- DEBUG_PRINT("No input is given\n");
+ ptr = (char *)malloc(strlen(input) + 1);
+ if (ptr == NULL) {
+ DEBUG_PRINT("Low memory\n");
status = -1;
goto exit;
}
@@ -333,6 +334,8 @@
break;
}
exit:
+ if (ptr != NULL)
+ free(ptr);
if (status != 0)
exit(0);
return value;
diff --git a/mm-audio/aenc-g711/qdsp6/Android.mk b/mm-audio/aenc-g711/qdsp6/Android.mk
index 6b2b453..d2dc9d1 100644
--- a/mm-audio/aenc-g711/qdsp6/Android.mk
+++ b/mm-audio/aenc-g711/qdsp6/Android.mk
@@ -66,6 +66,7 @@
LOCAL_PRELINK_MODULE := false
LOCAL_SHARED_LIBRARIES := libmm-omxcore
LOCAL_SHARED_LIBRARIES += libOmxG711Enc
+LOCAL_VENDOR_MODULE := true
LOCAL_SRC_FILES := test/omx_g711_enc_test.c
include $(BUILD_EXECUTABLE)
diff --git a/mm-audio/aenc-qcelp13/qdsp6/Android.mk b/mm-audio/aenc-qcelp13/qdsp6/Android.mk
index f4b904a..b88c348 100644
--- a/mm-audio/aenc-qcelp13/qdsp6/Android.mk
+++ b/mm-audio/aenc-qcelp13/qdsp6/Android.mk
@@ -65,6 +65,7 @@
LOCAL_PRELINK_MODULE := false
LOCAL_SHARED_LIBRARIES := libmm-omxcore
LOCAL_SHARED_LIBRARIES += libOmxQcelp13Enc
+LOCAL_VENDOR_MODULE := true
LOCAL_SRC_FILES := test/omx_qcelp13_enc_test.c
include $(BUILD_EXECUTABLE)
diff --git a/mm-audio/aenc-qcelp13/qdsp6/test/omx_qcelp13_enc_test.c b/mm-audio/aenc-qcelp13/qdsp6/test/omx_qcelp13_enc_test.c
index 258fd2a..3aa6ff6 100644
--- a/mm-audio/aenc-qcelp13/qdsp6/test/omx_qcelp13_enc_test.c
+++ b/mm-audio/aenc-qcelp13/qdsp6/test/omx_qcelp13_enc_test.c
@@ -1,6 +1,6 @@
/*--------------------------------------------------------------------------
-Copyright (c) 2010-2014, 2017 The Linux Foundation. All rights reserved.
+Copyright (c) 2010-2014, 2017-2018 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 met:
@@ -283,14 +283,15 @@
int status = 0;
errno = 0;
- ptr = (char *)malloc(strlen(input) + 1);
- if (ptr == NULL) {
- DEBUG_PRINT("Low memory\n");
+
+ if (input == NULL){
+ DEBUG_PRINT("No input is given\n");
status = -1;
goto exit;
}
- if (input == NULL){
- DEBUG_PRINT("No input is given\n");
+ ptr = (char *)malloc(strlen(input) + 1);
+ if (ptr == NULL) {
+ DEBUG_PRINT("Low memory\n");
status = -1;
goto exit;
}
@@ -332,6 +333,8 @@
break;
}
exit:
+ if (ptr != NULL)
+ free(ptr);
if (status != 0)
exit(0);
return value;
diff --git a/post_proc/Android.mk b/post_proc/Android.mk
index 86a2ab1..9c503a6 100644
--- a/post_proc/Android.mk
+++ b/post_proc/Android.mk
@@ -3,6 +3,18 @@
include $(CLEAR_VARS)
+LOCAL_CFLAGS += -Wno-unused-variable
+LOCAL_CFLAGS += -Wno-sign-compare
+LOCAL_CFLAGS += -Wno-unused-parameter
+LOCAL_CFLAGS += -Wno-unused-label
+LOCAL_CFLAGS += -Wno-gnu-designator
+LOCAL_CFLAGS += -Wno-typedef-redefinition
+LOCAL_CFLAGS += -Wno-shorten-64-to-32
+LOCAL_CFLAGS += -Wno-tautological-compare
+LOCAL_CFLAGS += -Wno-unused-function
+LOCAL_CFLAGS += -Wno-unused-local-typedef
+LOCAL_CFLAGS += -Wno-format
+
ifeq ($(strip $(AUDIO_FEATURE_ENABLED_PROXY_DEVICE)),true)
LOCAL_CFLAGS += -DAFE_PROXY_ENABLED
endif
@@ -63,6 +75,17 @@
ifeq ($(strip $(AUDIO_FEATURE_ENABLED_HW_ACCELERATED_EFFECTS)),true)
include $(CLEAR_VARS)
+LOCAL_CFLAGS += -Wno-unused-variable
+LOCAL_CFLAGS += -Wno-sign-compare
+LOCAL_CFLAGS += -Wno-unused-parameter
+LOCAL_CFLAGS += -Wno-unused-label
+LOCAL_CFLAGS += -Wno-gnu-designator
+LOCAL_CFLAGS += -Wno-typedef-redefinition
+LOCAL_CFLAGS += -Wno-shorten-64-to-32
+LOCAL_CFLAGS += -Wno-tautological-compare
+LOCAL_CFLAGS += -Wno-unused-function
+LOCAL_CFLAGS += -Wno-unused-local-typedef
+LOCAL_CFLAGS += -Wno-format
LOCAL_SRC_FILES := EffectsHwAcc.cpp
LOCAL_C_INCLUDES := \
@@ -87,6 +110,7 @@
endif
+
################################################################################
ifneq ($(filter msm8992 msm8994 msm8996 msm8998 sdm660 sdm845 apq8098_latv sdm670 qcs605,$(TARGET_BOARD_PLATFORM)),)
@@ -94,6 +118,17 @@
include $(CLEAR_VARS)
LOCAL_CFLAGS := -DLIB_AUDIO_HAL="/vendor/lib/hw/audio.primary."$(TARGET_BOARD_PLATFORM)".so"
+LOCAL_CFLAGS += -Wno-unused-variable
+LOCAL_CFLAGS += -Wno-sign-compare
+LOCAL_CFLAGS += -Wno-unused-parameter
+LOCAL_CFLAGS += -Wno-unused-label
+LOCAL_CFLAGS += -Wno-gnu-designator
+LOCAL_CFLAGS += -Wno-typedef-redefinition
+LOCAL_CFLAGS += -Wno-shorten-64-to-32
+LOCAL_CFLAGS += -Wno-tautological-compare
+LOCAL_CFLAGS += -Wno-unused-function
+LOCAL_CFLAGS += -Wno-unused-local-typedef
+LOCAL_CFLAGS += -Wno-format
LOCAL_SRC_FILES:= \
volume_listener.c
diff --git a/qahw/inc/qahw.h b/qahw/inc/qahw.h
index b7088ed..e91fd00 100644
--- a/qahw/inc/qahw.h
+++ b/qahw/inc/qahw.h
@@ -27,8 +27,10 @@
#include <cutils/bitops.h>
#include <system/audio.h>
#include "qahw_defs.h"
+#include "qahw_effect_api.h"
__BEGIN_DECLS
+
/*
* Helper macros for module implementors.
*
@@ -473,6 +475,41 @@
/* Set audio port configuration */
int qahw_set_audio_port_config_l(qahw_module_handle_t *hw_module,
const struct audio_port_config *config);
+
+/* Audio effects API */
+qahw_effect_lib_handle_t qahw_effect_load_library_l(const char *lib_path);
+
+int32_t qahw_effect_unload_library_l(qahw_effect_lib_handle_t handle);
+
+int32_t qahw_effect_create_l(qahw_effect_lib_handle_t handle,
+ const qahw_effect_uuid_t *uuid,
+ int32_t io_handle,
+ qahw_effect_handle_t *effect_handle);
+
+int32_t qahw_effect_release_l(qahw_effect_lib_handle_t handle,
+ qahw_effect_handle_t effect_handle);
+
+int32_t qahw_effect_get_descriptor_l(qahw_effect_lib_handle_t handle,
+ const qahw_effect_uuid_t *uuid,
+ qahw_effect_descriptor_t *effect_desc);
+
+int32_t qahw_effect_get_version_l();
+
+int32_t qahw_effect_process_l(qahw_effect_handle_t self,
+ qahw_audio_buffer_t *in_buffer,
+ qahw_audio_buffer_t *out_buffer);
+
+int32_t qahw_effect_command_l(qahw_effect_handle_t self,
+ uint32_t cmd_code,
+ uint32_t cmd_size,
+ void *cmd_data,
+ uint32_t *reply_size,
+ void *reply_data);
+
+int32_t qahw_effect_process_reverse_l(qahw_effect_handle_t self,
+ qahw_audio_buffer_t *in_buffer,
+ qahw_audio_buffer_t *out_buffer);
+
#ifdef __cplusplus
}
#endif
diff --git a/qahw/src/qahw_effect.c b/qahw/src/qahw_effect.c
index 2eff79f..9bee2a1 100644
--- a/qahw/src/qahw_effect.c
+++ b/qahw/src/qahw_effect.c
@@ -39,7 +39,6 @@
#include <stdlib.h>
#include "qahw.h"
-#include "qahw_effect_api.h"
// The current effect API version.
#define QAHW_EFFECT_API_VERSION_CURRENT QAHW_EFFECT_API_VERSION_0_0
@@ -97,7 +96,7 @@
}
-qahw_effect_lib_handle_t qahw_effect_load_library(const char *lib_path) {
+qahw_effect_lib_handle_t qahw_effect_load_library_l(const char *lib_path) {
audio_effect_library_t *desc;
qahw_effect_lib_t *qahw_effect_lib;
void *handle;
@@ -175,7 +174,7 @@
}
-int32_t qahw_effect_unload_library(qahw_effect_lib_handle_t handle) {
+int32_t qahw_effect_unload_library_l(qahw_effect_lib_handle_t handle) {
qahw_effect_lib_t *qahw_effect_lib;
pthread_mutex_lock(&effect_libraries_lock);
@@ -214,7 +213,7 @@
}
-int32_t qahw_effect_create(qahw_effect_lib_handle_t handle,
+int32_t qahw_effect_create_l(qahw_effect_lib_handle_t handle,
const qahw_effect_uuid_t *uuid,
int32_t io_handle,
qahw_effect_handle_t *effect_handle) {
@@ -230,7 +229,7 @@
}
-int32_t qahw_effect_release(qahw_effect_lib_handle_t handle,
+int32_t qahw_effect_release_l(qahw_effect_lib_handle_t handle,
qahw_effect_handle_t effect_handle) {
int32_t rc = -EINVAL;
audio_effect_library_t *desc = (audio_effect_library_t *)handle;
@@ -243,7 +242,7 @@
}
-int32_t qahw_effect_get_descriptor(qahw_effect_lib_handle_t handle,
+int32_t qahw_effect_get_descriptor_l(qahw_effect_lib_handle_t handle,
const qahw_effect_uuid_t *uuid,
qahw_effect_descriptor_t *effect_desc) {
int32_t rc = -EINVAL;
@@ -257,12 +256,12 @@
}
-int32_t qahw_effect_get_version() {
+int32_t qahw_effect_get_version_l() {
return QAHW_EFFECT_API_VERSION_CURRENT;
}
-int32_t qahw_effect_process(qahw_effect_handle_t self,
+int32_t qahw_effect_process_l(qahw_effect_handle_t self,
qahw_audio_buffer_t *in_buffer,
qahw_audio_buffer_t *out_buffer) {
int32_t rc = -EINVAL;
@@ -281,7 +280,7 @@
}
-int32_t qahw_effect_command(qahw_effect_handle_t self,
+int32_t qahw_effect_command_l(qahw_effect_handle_t self,
uint32_t cmd_code,
uint32_t cmd_size,
void *cmd_data,
@@ -302,7 +301,7 @@
}
-int32_t qahw_effect_process_reverse(qahw_effect_handle_t self,
+int32_t qahw_effect_process_reverse_l(qahw_effect_handle_t self,
qahw_audio_buffer_t *in_buffer,
qahw_audio_buffer_t *out_buffer) {
int32_t rc = -EINVAL;
diff --git a/qahw_api/src/qahw_api.cpp b/qahw_api/src/qahw_api.cpp
index 8967bd6..8967e79 100644
--- a/qahw_api/src/qahw_api.cpp
+++ b/qahw_api/src/qahw_api.cpp
@@ -64,14 +64,23 @@
/* Flag to indicate qas status */
bool g_qas_died = false;
/* Count how many times hal is loaded */
-static unsigned int g_qas_load_count;
+static unsigned int g_qas_load_count = 0;
/* Store HAL handle */
qahw_module_handle_t *g_qas_handle = NULL;
+inline int qas_status(sp<Iqti_audio_server> server)
+{
+ if (server == 0) {
+ ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
+ return -1;
+ }
+ return 1;
+}
+
void death_notifier::binderDied(const wp<IBinder>& who)
{
- struct listnode *node;
- p_stream_handle *handle;
+ struct listnode *node = NULL;
+ p_stream_handle *handle = NULL;
if (g_audio_err_cb) {
ALOGD("%s %d", __func__, __LINE__);
@@ -151,10 +160,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_out_get_sample_rate(out_handle);
} else {
return -ENODEV;
@@ -170,10 +177,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_out_set_sample_rate(out_handle, rate);
} else {
return -ENODEV;
@@ -189,10 +194,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_out_get_buffer_size(out_handle);
} else {
return -ENODEV;
@@ -209,10 +212,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return (audio_channel_mask_t)(-ENODEV);
- }
+ if (qas_status(qas) == -1)
+ return (audio_channel_mask_t)(-ENODEV);
return qas->qahw_out_get_channels(out_handle);
} else {
return (audio_channel_mask_t)(-ENODEV);
@@ -228,10 +229,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return AUDIO_FORMAT_INVALID;
- }
+ if (qas_status(qas) == -1)
+ return AUDIO_FORMAT_INVALID;
return qas->qahw_out_get_format(out_handle);
} else {
return AUDIO_FORMAT_INVALID;;
@@ -247,10 +246,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_out_standby(out_handle);
} else {
return -ENODEV;
@@ -267,10 +264,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_out_set_parameters(out_handle, kv_pairs);
} else {
return -ENODEV;
@@ -287,10 +282,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return NULL;
- }
+ if (qas_status(qas) == -1)
+ return NULL;
return qas->qahw_out_get_parameters(out_handle, keys);
} else {
return NULL;
@@ -308,10 +301,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_out_set_param_data(out_handle, param_id, payload);
} else {
return -ENODEV;
@@ -329,10 +320,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_out_get_param_data(out_handle, param_id, payload);
} else {
return -ENODEV;
@@ -348,10 +337,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_out_get_latency(out_handle);
} else {
return -ENODEV;
@@ -367,10 +354,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_out_set_volume(out_handle, left, right);
} else {
return -ENODEV;
@@ -386,10 +371,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_out_write(out_handle, out_buf);
} else {
return -ENODEV;
@@ -406,10 +389,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_out_get_render_position(out_handle, dsp_frames);
} else {
return -ENODEV;
@@ -427,10 +408,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_out_set_callback(out_handle, callback, cookie);
} else {
return -ENODEV;
@@ -446,10 +425,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_out_pause(out_handle);
} else {
return -ENODEV;
@@ -465,10 +442,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_out_resume(out_handle);
} else {
return -ENODEV;
@@ -484,10 +459,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
+ if (qas_status(qas) == -1)
return -ENODEV;
- }
return qas->qahw_out_drain(out_handle, type);
} else {
return -EINVAL;
@@ -503,10 +476,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_out_flush(out_handle);
} else {
return -ENODEV;
@@ -523,10 +494,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_out_get_presentation_position(out_handle,
frames, timestamp);
} else {
@@ -544,10 +513,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_in_get_sample_rate(in_handle);
} else {
return -ENODEV;
@@ -563,10 +530,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_in_set_sample_rate(in_handle, rate);
} else {
return -ENODEV;
@@ -582,10 +547,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_in_get_buffer_size(in_handle);
} else {
return -ENODEV;
@@ -601,10 +564,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_in_get_channels(in_handle);
} else {
return -ENODEV;
@@ -620,10 +581,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return (audio_format_t)-ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return (audio_format_t)(-ENODEV);
return qas->qahw_in_get_format(in_handle);
} else {
return (audio_format_t)-ENODEV;
@@ -639,10 +598,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return (audio_format_t)-ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_in_set_format(in_handle, format);
} else {
return (audio_format_t)-ENODEV;
@@ -658,10 +615,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_in_standby(in_handle);
} else {
return -EINVAL;
@@ -677,10 +632,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_in_set_parameters(in_handle, kv_pairs);
} else {
return -ENODEV;
@@ -697,10 +650,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return NULL;
- }
+ if (qas_status(qas) == -1)
+ return NULL;
return qas->qahw_in_get_parameters(in_handle, keys);
} else {
return NULL;
@@ -716,10 +667,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_in_read(in_handle, in_buf);
} else {
return -ENODEV;
@@ -735,10 +684,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_in_get_input_frames_lost(in_handle);
} else {
return -ENODEV;
@@ -755,10 +702,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_in_get_capture_position(in_handle, frames, time);
} else {
return -ENODEV;
@@ -774,10 +719,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_init_check(hw_module);
} else {
return -ENODEV;
@@ -793,10 +736,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_set_voice_volume(hw_module, volume);
} else {
return -ENODEV;
@@ -812,10 +753,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_set_mode(hw_module, mode);;
} else {
return -ENODEV;
@@ -831,10 +770,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_set_mic_mute(hw_module, state);
} else {
return -ENODEV;
@@ -850,10 +787,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_get_mic_mute(hw_module, state);
} else {
return -ENODEV;
@@ -869,10 +804,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_set_parameters(hw_module, kv_pairs);
} else {
return -ENODEV;
@@ -889,10 +822,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return NULL;
- }
+ if (qas_status(qas) == -1)
+ return NULL;
return qas->qahw_get_parameters(hw_module, keys);;
} else {
return NULL;
@@ -910,10 +841,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_get_param_data(hw_module, param_id, payload);
} else {
return -ENODEV;
@@ -931,10 +860,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_set_param_data(hw_module, param_id, payload);
} else {
return -ENODEV;
@@ -955,10 +882,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_create_audio_patch(hw_module, num_sources,
sources, num_sinks, sinks,
handle);
@@ -979,10 +904,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_release_audio_patch(hw_module, handle);
} else {
return -ENODEV;
@@ -999,10 +922,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_get_audio_port(hw_module, port);
} else {
return -ENODEV;
@@ -1019,10 +940,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_set_audio_port_config(hw_module, config);
} else {
return -ENODEV;
@@ -1039,10 +958,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_get_input_buffer_size(hw_module, config);
} else {
return -ENODEV;
@@ -1064,10 +981,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_open_output_stream(hw_module, handle, devices,
flags, config, out_handle,
address);
@@ -1088,14 +1003,13 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_close_output_stream(out_handle);
} else {
- p_stream_handle *handle;
- struct listnode *node, *tempnode;
+ p_stream_handle *handle = NULL;
+ struct listnode *node = NULL;
+ struct listnode *tempnode = NULL;
pthread_mutex_lock(&list_lock);
list_for_each_safe(node, tempnode, &stream_list) {
handle = node_to_item(node, p_stream_handle, list);
@@ -1105,10 +1019,9 @@
ALOGD("%s %d: clear memory of handle %p &handle %p", __func__, __LINE__, handle, &handle);
handle->sh_mem_dealer.clear();
handle->sh_mem_handle.clear();
+ list_remove(node);
+ free(node_to_item(node, p_stream_handle, list));
}
- list_remove(node);
- free(node_to_item(node, p_stream_handle, list));
- ALOGD("%s %d: Freed node", __func__, __LINE__);
}
pthread_mutex_unlock(&list_lock);
return -ENODEV;
@@ -1131,10 +1044,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_open_input_stream(hw_module, handle, devices,
config, in_handle, flags,
address, source);
@@ -1154,14 +1065,13 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_close_input_stream(in_handle);
} else {
- p_stream_handle *handle;
- struct listnode *node, *tempnode;
+ p_stream_handle *handle = NULL;
+ struct listnode *node = NULL;
+ struct listnode *tempnode = NULL;
pthread_mutex_lock(&list_lock);
list_for_each_safe(node, tempnode, &stream_list) {
ALOGD("%s %d", __func__, __LINE__);
@@ -1169,13 +1079,12 @@
p_stream_handle *p_stream = (p_stream_handle *)in_handle;
if (handle != NULL && handle == p_stream) {
sh_mem_data *shmem_data = handle->shmem_data;
- ALOGD("%s %d: clear memory of handle %p &handle %p", __func__, __LINE__, handle, &handle);
+ ALOGV("%s %d: clear memory of handle %p", __func__, __LINE__, handle);
handle->sh_mem_dealer.clear();
handle->sh_mem_handle.clear();
+ list_remove(node);
+ free(node_to_item(node, p_stream_handle, list));
}
- list_remove(node);
- free(node_to_item(node, p_stream_handle, list));
- ALOGD("%s %d: Freed node", __func__, __LINE__);
}
pthread_mutex_unlock(&list_lock);
return -EINVAL;
@@ -1191,10 +1100,8 @@
if (g_binder_enabled) {
if (!g_qas_died) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
return qas->qahw_get_version();
} else {
return -ENODEV;
@@ -1208,12 +1115,11 @@
{
ALOGV("%d:%s",__LINE__, __func__);
if (g_binder_enabled) {
- if (!g_qas_died && (--g_qas_load_count == 0)) {
+ if (!g_qas_died && ((g_qas_load_count > 0) && (--g_qas_load_count == 0))) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return -ENODEV;
- }
+ if (qas_status(qas) == -1)
+ return -ENODEV;
+ pthread_mutex_destroy(&list_lock);
return qas->qahw_unload_module(hw_module);
} else {
return -ENODEV;
@@ -1232,10 +1138,8 @@
ALOGV("%d:%s: g_binder_enabled %d",__LINE__, __func__, g_binder_enabled);
if (g_binder_enabled) {
sp<Iqti_audio_server> qas = get_qti_audio_server();
- if (qas == 0) {
- ALOGE("%d:%s: invalid HAL handle",__LINE__, __func__);
- return (void*)(-ENODEV);
- }
+ if (qas_status(qas) == -1)
+ return (void*)(-ENODEV);
g_qas_handle = qas->qahw_load_module(hw_module_id);
if (g_qas_handle == NULL) {
ALOGE("%s: HAL loading failed", __func__);
@@ -1254,6 +1158,178 @@
}
return g_qas_handle;
}
+
+/* Audio effects API */
+qahw_effect_lib_handle_t qahw_effect_load_library(const char *lib_name)
+{
+ ALOGV("%d:%s",__LINE__, __func__);
+ if (g_binder_enabled) {
+ if (!g_qas_died) {
+ sp<Iqti_audio_server> qas = get_qti_audio_server();
+ if (qas_status(qas) == -1)
+ return NULL;
+ return qas->qahw_effect_load_library(lib_name);
+ } else {
+ return NULL;
+ }
+ } else {
+ return qahw_effect_load_library_l(lib_name);
+ }
+}
+
+int32_t qahw_effect_unload_library(qahw_effect_lib_handle_t handle)
+{
+ ALOGV("%d:%s",__LINE__, __func__);
+ if (g_binder_enabled) {
+ if (!g_qas_died) {
+ sp<Iqti_audio_server> qas = get_qti_audio_server();
+ if (qas_status(qas) == -1)
+ return -ENODEV;
+ return qas->qahw_effect_unload_library(handle);
+ } else {
+ return -ENODEV;
+ }
+ } else {
+ return qahw_effect_unload_library_l(handle);
+ }
+}
+
+int32_t qahw_effect_create(qahw_effect_lib_handle_t handle,
+ const qahw_effect_uuid_t *uuid,
+ int32_t io_handle,
+ qahw_effect_handle_t *effect_handle)
+{
+ ALOGV("%d:%s",__LINE__, __func__);
+ if (g_binder_enabled) {
+ if (!g_qas_died) {
+ sp<Iqti_audio_server> qas = get_qti_audio_server();
+ if (qas_status(qas) == -1)
+ return -ENODEV;
+ return qas->qahw_effect_create(handle, uuid, io_handle, effect_handle);
+ } else {
+ return -ENODEV;
+ }
+ } else {
+ return qahw_effect_create_l(handle, uuid, io_handle, effect_handle);
+ }
+}
+
+int32_t qahw_effect_release(qahw_effect_lib_handle_t handle,
+ qahw_effect_handle_t effect_handle)
+{
+ ALOGV("%d:%s",__LINE__, __func__);
+ if (g_binder_enabled) {
+ if (!g_qas_died) {
+ sp<Iqti_audio_server> qas = get_qti_audio_server();
+ if (qas_status(qas) == -1)
+ return -ENODEV;
+ return qas->qahw_effect_release(handle, effect_handle);
+ } else {
+ return -ENODEV;
+ }
+ } else {
+ return qahw_effect_release_l(handle, effect_handle);
+ }
+}
+
+int32_t qahw_effect_get_descriptor(qahw_effect_lib_handle_t handle,
+ const qahw_effect_uuid_t *uuid,
+ qahw_effect_descriptor_t *effect_desc)
+{
+ ALOGV("%d:%s",__LINE__, __func__);
+ if (g_binder_enabled) {
+ if (!g_qas_died) {
+ sp<Iqti_audio_server> qas = get_qti_audio_server();
+ if (qas_status(qas) == -1)
+ return -ENODEV;
+ return qas->qahw_effect_get_descriptor(handle, uuid, effect_desc);
+ } else {
+ return -ENODEV;
+ }
+ } else {
+ return qahw_effect_get_descriptor_l(handle, uuid, effect_desc);
+ }
+}
+
+int32_t qahw_effect_get_version()
+{
+ ALOGV("%d:%s",__LINE__, __func__);
+ if (g_binder_enabled) {
+ if (!g_qas_died) {
+ sp<Iqti_audio_server> qas = get_qti_audio_server();
+ if (qas_status(qas) == -1)
+ return -ENODEV;
+ return qas->qahw_effect_get_version();
+ } else {
+ return -ENODEV;
+ }
+ } else {
+ return qahw_effect_get_version_l();
+ }
+}
+
+int32_t qahw_effect_process(qahw_effect_handle_t self,
+ qahw_audio_buffer_t *in_buffer,
+ qahw_audio_buffer_t *out_buffer)
+{
+ ALOGV("%d:%s",__LINE__, __func__);
+ if (g_binder_enabled) {
+ if (!g_qas_died) {
+ sp<Iqti_audio_server> qas = get_qti_audio_server();
+ if (qas_status(qas) == -1)
+ return -ENODEV;
+ return qas->qahw_effect_process(self, in_buffer, out_buffer);
+ } else {
+ return -ENODEV;
+ }
+ } else {
+ return qahw_effect_process_l(self, in_buffer, out_buffer);
+ }
+}
+
+int32_t qahw_effect_command(qahw_effect_handle_t self,
+ uint32_t cmd_code,
+ uint32_t cmd_size,
+ void *cmd_data,
+ uint32_t *reply_size,
+ void *reply_data)
+{
+ ALOGV("%d:%s",__LINE__, __func__);
+ if (g_binder_enabled) {
+ if (!g_qas_died) {
+ sp<Iqti_audio_server> qas = get_qti_audio_server();
+ if (qas_status(qas) == -1)
+ return -ENODEV;
+ return qas->qahw_effect_command(self, cmd_code, cmd_size, cmd_data,
+ reply_size, reply_data);
+ } else {
+ return -ENODEV;
+ }
+ } else {
+ return qahw_effect_command_l(self, cmd_code, cmd_size, cmd_data,
+ reply_size, reply_data);
+ }
+}
+
+int32_t qahw_effect_process_reverse(qahw_effect_handle_t self,
+ qahw_audio_buffer_t *in_buffer,
+ qahw_audio_buffer_t *out_buffer)
+{
+ ALOGV("%d:%s",__LINE__, __func__);
+ if (g_binder_enabled) {
+ if (!g_qas_died) {
+ sp<Iqti_audio_server> qas = get_qti_audio_server();
+ if (qas_status(qas) == -1)
+ return -ENODEV;
+ return qas->qahw_effect_process_reverse(self, in_buffer, out_buffer);
+ } else {
+ return -ENODEV;
+ }
+ } else {
+ return qahw_effect_process_reverse_l(self, in_buffer, out_buffer);
+ }
+}
+
#else
void qahw_register_qas_death_notify_cb(audio_error_callback cb __unused, void* context __unused)
{
@@ -1524,6 +1600,78 @@
return qahw_set_param_data_l(hw_module, param_id, payload);
}
+/* Audio effects API */
+qahw_effect_lib_handle_t qahw_effect_load_library(const char *lib_path)
+{
+ ALOGV("%d:%s",__LINE__, __func__);
+ return qahw_effect_load_library_l(lib_path);
+}
+
+int32_t qahw_effect_unload_library(qahw_effect_lib_handle_t handle)
+{
+ ALOGV("%d:%s",__LINE__, __func__);
+ return qahw_effect_unload_library_l(handle);
+}
+
+int32_t qahw_effect_create(qahw_effect_lib_handle_t handle,
+ const qahw_effect_uuid_t *uuid,
+ int32_t io_handle,
+ qahw_effect_handle_t *effect_handle)
+{
+ ALOGV("%d:%s",__LINE__, __func__);
+ return qahw_effect_create_l(handle, uuid, io_handle, effect_handle);
+}
+
+int32_t qahw_effect_release(qahw_effect_lib_handle_t handle,
+ qahw_effect_handle_t effect_handle)
+{
+ ALOGV("%d:%s",__LINE__, __func__);
+ return qahw_effect_release_l(handle, effect_handle);
+}
+
+int32_t qahw_effect_get_descriptor(qahw_effect_lib_handle_t handle,
+ const qahw_effect_uuid_t *uuid,
+ qahw_effect_descriptor_t *effect_desc)
+{
+ ALOGV("%d:%s",__LINE__, __func__);
+ return qahw_effect_get_descriptor_l(handle, uuid, effect_desc);
+}
+
+int32_t qahw_effect_get_version()
+{
+ ALOGV("%d:%s",__LINE__, __func__);
+ return qahw_effect_get_version_l();
+}
+
+int32_t qahw_effect_process(qahw_effect_handle_t self,
+ qahw_audio_buffer_t *in_buffer,
+ qahw_audio_buffer_t *out_buffer)
+{
+ ALOGV("%d:%s",__LINE__, __func__);
+ return qahw_effect_process_l(self, in_buffer, out_buffer);
+}
+
+int32_t qahw_effect_command(qahw_effect_handle_t self,
+ uint32_t cmd_code,
+ uint32_t cmd_size,
+ void *cmd_data,
+ uint32_t *reply_size,
+ void *reply_data)
+{
+ ALOGV("%d:%s",__LINE__, __func__);
+ return qahw_effect_command_l(self, cmd_code, cmd_size,
+ cmd_data, reply_size, reply_data);
+}
+
+int32_t qahw_effect_process_reverse(qahw_effect_handle_t self,
+ qahw_audio_buffer_t *in_buffer,
+ qahw_audio_buffer_t *out_buffer)
+{
+ ALOGV("%d:%s",__LINE__, __func__);
+ return qahw_effect_process_reverse_l(self, in_buffer,
+ out_buffer);
+}
+
int qahw_create_audio_patch(qahw_module_handle_t *hw_module,
unsigned int num_sources,
const struct audio_port_config *sources,
diff --git a/qahw_api/test/qahw_playback_test.c b/qahw_api/test/qahw_playback_test.c
index 2469b3c..ba7f4bf 100644
--- a/qahw_api/test/qahw_playback_test.c
+++ b/qahw_api/test/qahw_playback_test.c
@@ -256,6 +256,8 @@
pthread_cond_init(&stream_param[i].write_cond, (const pthread_condattr_t *) NULL);
pthread_mutex_init(&stream_param[i].drain_lock, (const pthread_mutexattr_t *)NULL);
pthread_cond_init(&stream_param[i].drain_cond, (const pthread_condattr_t *) NULL);
+ pthread_mutex_init(&stream_param[i].input_buffer_available_lock, (const pthread_mutexattr_t *)NULL);
+ pthread_cond_init(&stream_param[i].input_buffer_available_cond, (const pthread_condattr_t *) NULL);
stream_param[i].handle = stream_handle;
stream_handle--;
@@ -264,6 +266,21 @@
pthread_cond_init(&dual_main_cond, (const pthread_condattr_t *) NULL);
}
+static void deinit_streams(void)
+{
+ int i = 0;
+ for ( i = 0; i < MAX_PLAYBACK_STREAMS; i++) {
+ pthread_cond_destroy(&stream_param[i].write_cond);
+ pthread_mutex_destroy(&stream_param[i].write_lock);
+ pthread_cond_destroy(&stream_param[i].drain_cond);
+ pthread_mutex_destroy(&stream_param[i].drain_lock);
+ pthread_cond_destroy(&stream_param[i].input_buffer_available_cond);
+ pthread_mutex_destroy(&stream_param[i].input_buffer_available_lock);
+ }
+ pthread_cond_destroy(&dual_main_cond);
+ pthread_mutex_destroy(&dual_main_lock);
+}
+
void read_kvpair(char *kvpair, char* kvpair_values, int filetype)
{
char *kvpair_type = NULL;
@@ -609,7 +626,7 @@
if (rc) {
fprintf(log_file, "stream %d: could not open output stream, error - %d \n", params->stream_index, rc);
fprintf(stderr, "stream %d: could not open output stream, error - %d \n", params->stream_index, rc);
- pthread_exit(0);
+ return NULL;
}
fprintf(log_file, "stream %d: open output stream is success, out_handle %p\n", params->stream_index, params->out_handle);
@@ -634,14 +651,14 @@
if (!(params->kvpair_values)) {
fprintf(log_file, "stream %d: error!!No metadata for the clip\n", params->stream_index);
fprintf(stderr, "stream %d: error!!No metadata for the clip\n", params->stream_index);
- pthread_exit(0);;
+ return NULL;
}
read_kvpair(kvpair, params->kvpair_values, params->filetype);
rc = qahw_out_set_parameters(params->out_handle, kvpair);
if(rc){
fprintf(log_file, "stream %d: failed to set kvpairs\n", params->stream_index);
fprintf(stderr, "stream %d: failed to set kvpairs\n", params->stream_index);
- pthread_exit(0);;
+ return NULL;
}
fprintf(log_file, "stream %d: kvpairs are set\n", params->stream_index);
break;
@@ -674,7 +691,7 @@
if (rc < 0) {
fprintf(log_file, "stream %d: could not create effect command thread!\n", params->stream_index);
fprintf(stderr, "stream %d: could not create effect command thread!\n", params->stream_index);
- pthread_exit(0);
+ return NULL;
}
fprintf(log_file, "stream %d: loading effects\n", params->stream_index);
@@ -766,7 +783,7 @@
if (data_ptr == NULL) {
fprintf(log_file, "stream %d: failed to allocate data buffer\n", params->stream_index);
fprintf(stderr, "stream %d: failed to allocate data buffer\n", params->stream_index);
- pthread_exit(0);
+ return NULL;
}
latency = qahw_out_get_latency(params->out_handle);
@@ -2600,6 +2617,7 @@
}
}
+ deinit_streams();
rc = unload_hals();
if ((log_file != stdout) && (log_file != nullptr))
diff --git a/qahw_api/test/qahw_playback_test.h b/qahw_api/test/qahw_playback_test.h
index b643c1d..66229f5 100644
--- a/qahw_api/test/qahw_playback_test.h
+++ b/qahw_api/test/qahw_playback_test.h
@@ -140,9 +140,11 @@
qahw_mix_matrix_params_t mm_params_downmix;
int mix_ctrl;
int pan_scale_ctrl;
+ pthread_cond_t input_buffer_available_cond;
+ pthread_mutex_t input_buffer_available_lock;
+ uint32_t input_buffer_available_size;
}stream_config;
-
qahw_module_handle_t * load_hal(audio_devices_t dev);
int unload_hals();
int get_wav_header_length (FILE* file_stream);
diff --git a/qahw_api/test/qap_wrapper_extn.c b/qahw_api/test/qap_wrapper_extn.c
index de79ccf..4b27674 100644
--- a/qahw_api/test/qap_wrapper_extn.c
+++ b/qahw_api/test/qap_wrapper_extn.c
@@ -790,7 +790,36 @@
primary_stream_close = true;
}
-void qap_wrapper_session_callback(qap_session_handle_t session_handle __unused, void* priv_data __unused, qap_callback_event_t event_id, int size __unused, void *data)
+void qap_wrapper_module_callback(qap_module_handle_t module_handle, void* priv_data, qap_module_callback_event_t event_id, int size, void *data)
+{
+ stream_config *p_stream_param = (stream_config*)priv_data;
+ if(p_stream_param == NULL) {
+ ALOGE("%s %d, callback handle is null.",__func__,__LINE__);
+ }
+ ALOGV("%s %d Received event id %d\n", __func__, __LINE__, event_id);
+
+ switch (event_id) {
+ case QAP_MODULE_CALLBACK_EVENT_SEND_INPUT_BUFFER:
+ {
+ if (size < sizeof(qap_send_buffer_t)) {
+ ALOGE("%s %d event id %d, wrong payload size %d\n",
+ __func__, __LINE__, event_id, size);
+ break;
+ }
+ qap_send_buffer_t *p_send_buffer_event = (qap_send_buffer_t*)data;
+ pthread_mutex_lock(&p_stream_param->input_buffer_available_lock);
+ p_stream_param->input_buffer_available_size = p_send_buffer_event->bytes_available;
+ pthread_cond_signal(&p_stream_param->input_buffer_available_cond);
+ pthread_mutex_unlock(&p_stream_param->input_buffer_available_lock);
+
+ break;
+ }
+ default:
+ break;
+ }
+}
+
+void qap_wrapper_session_callback(qap_session_handle_t session_handle __unused, void* priv_data __unused, qap_callback_event_t event_id, int size, void *data)
{
int ret = 0;
int bytes_written = 0;
@@ -1368,7 +1397,7 @@
}
}
- ret = qap_session_set_callback(qap_session_handle, &qap_wrapper_session_callback);
+ ret = qap_session_set_callback(qap_session_handle, &qap_wrapper_session_callback, NULL);
if (ret != QAP_STATUS_OK) {
fprintf(stderr, "!!!! Please specify appropriate Session\n");
return -EINVAL;
@@ -1446,22 +1475,22 @@
if (fp_input == NULL) {
fprintf(stderr, "Open File Failed for %s\n", stream_info->filename);
- pthread_exit(0);
+ return NULL;
}
qap_module_handle = stream_info->qap_module_handle;
buffer = (qap_audio_buffer_t *) calloc(1, sizeof(qap_audio_buffer_t));
if (buffer == NULL) {
fprintf(stderr, "%s::%d: Memory Alloc Error\n", __func__, __LINE__);
- pthread_exit(0);
+ return NULL;
}
buffer->common_params.data = calloc(1, FRAME_SIZE);
if (buffer->common_params.data == NULL) {
fprintf(stderr, "%s::%d: Memory Alloc Error\n", __func__, __LINE__);
- pthread_exit(0);
if (NULL != buffer) {
free( buffer);
buffer = NULL;
}
+ return NULL;
}
buffer->buffer_parms.output_buf_params.output_id = output_device_id;
fprintf(stdout, "%s::%d: output device id %d\n",
@@ -1472,13 +1501,13 @@
ret = qap_module_cmd(qap_module_handle, QAP_MODULE_CMD_START, sizeof(QAP_MODULE_CMD_START), NULL, NULL, NULL);
if (ret != QAP_STATUS_OK) {
fprintf(stderr, "START failed\n");
- pthread_exit(0);
if (NULL != buffer && NULL != buffer->common_params.data) {
free( buffer->common_params.data);
buffer->common_params.data = NULL;
free( buffer);
buffer = NULL;
}
+ return NULL;
}
do {
@@ -1556,6 +1585,7 @@
__FUNCTION__, __LINE__,bytes_read, bytes_consumed);
if (stream_info->filetype == FILE_DTS) {
if (bytes_consumed < 0) {
+#if 0
while (!is_buffer_available) {
usleep(1000);
ret = qap_module_cmd(qap_module_handle, QAP_MODULE_CMD_GET_PARAM,
@@ -1570,7 +1600,24 @@
ALOGV("%s : %d, dts clip reply_data is %d buffer availabale is %d",
__FUNCTION__, __LINE__, reply_data, is_buffer_available);
}
+#else
+ pthread_mutex_lock(&stream_info->input_buffer_available_lock);
+ stream_info->input_buffer_available_size = 0;
+ pthread_mutex_unlock(&stream_info->input_buffer_available_lock);
+ while (buffer->common_params.size > stream_info->input_buffer_available_size) {
+ ALOGV("%s %d: %s waiting for input buffer availability.",
+ __FUNCTION__, __LINE__, stream_info->filename);
+ pthread_mutex_lock(&stream_info->input_buffer_available_lock);
+ pthread_cond_wait(&stream_info->input_buffer_available_cond,
+ &stream_info->input_buffer_available_lock);
+ pthread_mutex_unlock(&stream_info->input_buffer_available_lock);
+ ALOGV("%s %d: %s input buffer available, size %lu.",
+ __FUNCTION__, __LINE__,
+ stream_info->filename,
+ stream_info->input_buffer_available_size);
+ }
+#endif
if(kpi_mode && time_index > 5) {
gettimeofday(&tcont_ts1, NULL);
data_input_st_arr[time_index] = (tcont_ts1.tv_sec) * 1000 + (tcont_ts1.tv_usec) / 1000;
@@ -1633,20 +1680,15 @@
qap_module_handle_t qap_wrapper_stream_open(void* stream_data)
{
- qap_module_config_t *input_config = NULL;
+ qap_module_config_t input_config = {0};
int ret = 0;
int i = 0;
stream_config *stream_info = (stream_config *)stream_data;
qap_module_handle_t qap_module_handle = NULL;
- input_config = (qap_module_config_t *) calloc(1, sizeof(qap_module_config_t));
- if (input_config == NULL) {
- fprintf(stderr, "%s::%d Memory Alloc Error\n", __func__, __LINE__);
- return NULL;
- }
- input_config->sample_rate = stream_info->config.sample_rate;
- input_config->channels = stream_info->channels;
- input_config->bit_width = stream_info->config.offload_info.bit_width;
+ input_config.sample_rate = stream_info->config.sample_rate;
+ input_config.channels = stream_info->channels;
+ input_config.bit_width = stream_info->config.offload_info.bit_width;
if (stream_info->filetype == FILE_DTS)
stream_info->bytes_to_read = FRAME_SIZE;
@@ -1655,18 +1697,18 @@
input_streams_count++;
if (input_streams_count == 2) {
if (stream_info->filetype == FILE_WAV) {
- input_config->flags = QAP_MODULE_FLAG_SYSTEM_SOUND;
+ input_config.flags = QAP_MODULE_FLAG_SYSTEM_SOUND;
stream_info->system_input = true;
has_system_input = true;
ALOGV("%s::%d Set Secondary System Sound Flag", __func__, __LINE__);
} else if (stream_info->filetype != FILE_WAV) {
if (stream_info->flags & AUDIO_OUTPUT_FLAG_ASSOCIATED) {
ALOGV("%s::%d Set Secondary Assoc Input Flag", __func__, __LINE__);
- input_config->flags = QAP_MODULE_FLAG_SECONDARY;
+ input_config.flags = QAP_MODULE_FLAG_SECONDARY;
stream_info->sec_input = true;
} else {
ALOGV("%s::%d Set Secondary Main Input Flag", __func__, __LINE__);
- input_config->flags = QAP_MODULE_FLAG_PRIMARY;
+ input_config.flags = QAP_MODULE_FLAG_PRIMARY;
stream_info->sec_input = true;
}
}
@@ -1674,29 +1716,31 @@
} else {
if (stream_info->filetype == FILE_WAV) {
ALOGV("%s::%d Set Secondary System Sound Flag", __func__, __LINE__);
- input_config->flags = QAP_MODULE_FLAG_SYSTEM_SOUND;
+ input_config.flags = QAP_MODULE_FLAG_SYSTEM_SOUND;
stream_info->system_input = true;
} else {
ALOGV("%s::%d Set Primary Main Input Flag", __func__, __LINE__);
- input_config->flags = QAP_MODULE_FLAG_PRIMARY;
+ input_config.flags = QAP_MODULE_FLAG_PRIMARY;
}
}
if (!encode)
- input_config->module_type = QAP_MODULE_DECODER;
+ input_config.module_type = QAP_MODULE_DECODER;
else
- input_config->module_type = QAP_MODULE_ENCODER;
+ input_config.module_type = QAP_MODULE_ENCODER;
- ret = qap_wrapper_map_input_format(stream_info->config.offload_info.format, &input_config->format);
+ ret = qap_wrapper_map_input_format(stream_info->config.offload_info.format, &input_config.format);
if (ret == -EINVAL)
return NULL;
- ret = qap_module_init(qap_session_handle, input_config, &qap_module_handle);
+ ret = qap_module_init(qap_session_handle, &input_config, &qap_module_handle);
if (qap_module_handle == NULL) {
fprintf(stderr, "%s Module Handle is Null\n", __func__);
return NULL;
}
+ qap_module_set_callback(qap_module_handle, &qap_wrapper_module_callback, stream_info);
+
primary_stream_close = false;
stream_cnt++;
return qap_module_handle;
diff --git a/visualizer/Android.mk b/visualizer/Android.mk
index d932ce0..33d1e63 100644
--- a/visualizer/Android.mk
+++ b/visualizer/Android.mk
@@ -39,4 +39,15 @@
external/tinyalsa/include \
$(call include-path-for, audio-effects)
+LOCAL_CFLAGS += -Wno-unused-variable
+LOCAL_CFLAGS += -Wno-sign-compare
+LOCAL_CFLAGS += -Wno-unused-parameter
+LOCAL_CFLAGS += -Wno-unused-label
+LOCAL_CFLAGS += -Wno-gnu-designator
+LOCAL_CFLAGS += -Wno-typedef-redefinition
+LOCAL_CFLAGS += -Wno-shorten-64-to-32
+LOCAL_CFLAGS += -Wno-tautological-compare
+LOCAL_CFLAGS += -Wno-unused-function
+LOCAL_CFLAGS += -Wno-unused-local-typedef
+
include $(BUILD_SHARED_LIBRARY)
diff --git a/voice_processing/Android.mk b/voice_processing/Android.mk
index a5ff764..8a853b6 100644
--- a/voice_processing/Android.mk
+++ b/voice_processing/Android.mk
@@ -22,4 +22,15 @@
LOCAL_CFLAGS += -fvisibility=hidden
+LOCAL_CFLAGS += -Wno-unused-variable
+LOCAL_CFLAGS += -Wno-sign-compare
+LOCAL_CFLAGS += -Wno-unused-parameter
+LOCAL_CFLAGS += -Wno-unused-label
+LOCAL_CFLAGS += -Wno-gnu-designator
+LOCAL_CFLAGS += -Wno-typedef-redefinition
+LOCAL_CFLAGS += -Wno-shorten-64-to-32
+LOCAL_CFLAGS += -Wno-tautological-compare
+LOCAL_CFLAGS += -Wno-unused-function
+LOCAL_CFLAGS += -Wno-unused-local-typedef
+
include $(BUILD_SHARED_LIBRARY)