Merge "msmnile_au: Enable audiocontrol service for Android U"
diff --git a/configs/atoll/audio_io_policy.conf b/configs/atoll/audio_io_policy.conf
index 996cdfe..6ff2453 100644
--- a/configs/atoll/audio_io_policy.conf
+++ b/configs/atoll/audio_io_policy.conf
@@ -76,7 +76,7 @@
}
compress_offload_24 {
flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING
- formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_PCM_24_BIT_OFFLOAD|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_PRO|AUDIO_FORMAT_AAC_ADTS_LC|AUDIO_FORMAT_AAC_ADTS_HE_V1|AUDIO_FORMAT_AAC_ADTS_HE_V2|AUDIO_FORMAT_AAC_LATM_LC|AUDIO_FORMAT_AAC_LATM_HE_V1|AUDIO_FORMAT_AAC_LATM_HE_V2
+ formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_PCM_24_BIT_OFFLOAD|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_PRO|AUDIO_FORMAT_AAC_ADTS_LC|AUDIO_FORMAT_AAC_ADTS_HE_V1|AUDIO_FORMAT_AAC_ADTS_HE_V2|AUDIO_FORMAT_VORBIS|AUDIO_FORMAT_AAC_LATM_LC|AUDIO_FORMAT_AAC_LATM_HE_V1|AUDIO_FORMAT_AAC_LATM_HE_V2
sampling_rates 44100|48000|88200|96000|176400|192000
bit_width 24
app_type 69940
diff --git a/configs/audio_vendor_product.mk b/configs/audio_vendor_product.mk
index 292e7bd..e0f394c 100644
--- a/configs/audio_vendor_product.mk
+++ b/configs/audio_vendor_product.mk
@@ -156,6 +156,7 @@
MM_AUDIO += a2b-app
MM_AUDIO += liba2bdriver
MM_AUDIO += libacdbloaderclient
+MM_AUDIO += libacdbloadersocketclient
MM_AUDIO += acdb_loader_service
MM_AUDIO += libaudiohalpluginclient
MM_AUDIO += audio_hal_plugin_service
@@ -217,14 +218,12 @@
endif
# Audio configuration file
-ifeq ($(TARGET_BOARD_PLATFORM)$(TARGET_BOARD_SUFFIX),msmnile_au)
+ifeq ($(TARGET_GVMGH_SPECIFIC), false)
-include $(TOPDIR)vendor/qcom/opensource/audio-hal/primary-hal/configs/msmnile_au/msmnile_au.mk
else ifeq ($(TARGET_BOARD_PLATFORM)$(TARGET_BOARD_SUFFIX)$(TARGET_BOARD_DERIVATIVE_SUFFIX),msmnile_au_km4)
-include $(TOPDIR)vendor/qcom/opensource/audio-hal/primary-hal/configs/msmnile_au/msmnile_au.mk
else ifeq ($(TARGET_BOARD_PLATFORM)$(TARGET_BOARD_SUFFIX)$(TARGET_BOARD_DERIVATIVE_SUFFIX),msmnile_au_ar)
-include $(TOPDIR)vendor/qcom/opensource/audio-hal/primary-hal/configs/msmnile_au/msmnile_au.mk
-else ifeq ($(TARGET_BOARD_PLATFORM)$(TARGET_BOARD_SUFFIX),msmnile_gvmq)
--include $(TOPDIR)vendor/qcom/opensource/audio-hal/primary-hal/configs/msmnile_au/msmnile_au.mk
else ifeq ($(TARGET_BOARD_PLATFORM)$(TARGET_BOARD_SUFFIX),sm6150_au)
-include $(TOPDIR)vendor/qcom/opensource/audio-hal/primary-hal/configs/msmsteppe_au/msmsteppe_au.mk
endif
diff --git a/configs/bengal/audio_io_policy.conf b/configs/bengal/audio_io_policy.conf
index 996cdfe..8bb8d8a 100644
--- a/configs/bengal/audio_io_policy.conf
+++ b/configs/bengal/audio_io_policy.conf
@@ -76,7 +76,7 @@
}
compress_offload_24 {
flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING
- formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_PCM_24_BIT_OFFLOAD|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_PRO|AUDIO_FORMAT_AAC_ADTS_LC|AUDIO_FORMAT_AAC_ADTS_HE_V1|AUDIO_FORMAT_AAC_ADTS_HE_V2|AUDIO_FORMAT_AAC_LATM_LC|AUDIO_FORMAT_AAC_LATM_HE_V1|AUDIO_FORMAT_AAC_LATM_HE_V2
+ formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_PCM_24_BIT_OFFLOAD|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_PRO|AUDIO_FORMAT_VORBIS|AUDIO_FORMAT_AAC_ADTS_LC|AUDIO_FORMAT_AAC_ADTS_HE_V1|AUDIO_FORMAT_AAC_ADTS_HE_V2|AUDIO_FORMAT_AAC_LATM_LC|AUDIO_FORMAT_AAC_LATM_HE_V1|AUDIO_FORMAT_AAC_LATM_HE_V2
sampling_rates 44100|48000|88200|96000|176400|192000
bit_width 24
app_type 69940
diff --git a/configs/common_au/audio_policy_configuration.xml b/configs/common_au/audio_policy_configuration.xml
index a851fbf..f7176dd 100644
--- a/configs/common_au/audio_policy_configuration.xml
+++ b/configs/common_au/audio_policy_configuration.xml
@@ -15,6 +15,10 @@
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+
+ Changes from Qualcomm Innovation Center are provided under the following license:
+ Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ SPDX-License-Identifier: BSD-3-Clause-Clear
-->
<audioPolicyConfiguration version="1.0" xmlns:xi="http://www.w3.org/2001/XInclude">
@@ -75,6 +79,11 @@
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</mixPort>
+ <mixPort name="carplay_48k_media" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
<mixPort name="sys_notification" role="source">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
@@ -104,18 +113,94 @@
samplingRates="48000"
channelMasks="AUDIO_CHANNEL_IN_STEREO"/>
</mixPort>
- <mixPort name="nav_guidance" role="source">
+ <mixPort name="nav_guidance" role="source"
+ flags="AUDIO_OUTPUT_FLAG_PRIMARY">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</mixPort>
+ <mixPort name="carplay_8k_navi" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="8000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_16k_navi" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="16000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_24k_navi" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="24000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_32k_navi" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="32000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_48k_navi" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
<mixPort name="phone" role="source">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</mixPort>
+ <mixPort name="carplay_8k_phone" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="8000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_16k_phone" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="16000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_24k_phone" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="24000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_32k_phone" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="32000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_48k_phone" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
<mixPort name="alerts" role="source">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</mixPort>
+ <mixPort name="carplay_8k_alerts" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="8000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_16k_alerts" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="16000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_24k_alerts" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="24000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_32k_alerts" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="32000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_48k_alerts" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
<mixPort name="front_passenger" role="source">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
@@ -177,7 +262,7 @@
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3"/>
</mixPort>
- <mixPort name="fast input" role="sink" flags="AUDIO_INPUT_FLAG_FAST">
+ <mixPort name="fast input" role="sink" maxOpenCount="2" maxActiveCount="2" flags="AUDIO_INPUT_FLAG_FAST">
<profile name="" format="AUDIO_FORMAT_PCM_8_24_BIT"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3"/>
@@ -339,15 +424,15 @@
</devicePorts>
<routes>
<route type="mix" sink="Media Bus"
- sources="media,mmap_no_irq_out"/>
+ sources="media,mmap_no_irq_out,carplay_48k_media"/>
<route type="mix" sink="Sys Notification Bus"
sources="sys_notification,carplay_8k_sys,carplay_16k_sys,carplay_24k_sys,carplay_32k_sys,carplay_48k_sys,mmap_no_irq_out"/>
<route type="mix" sink="Nav Guidance Bus"
- sources="nav_guidance,mmap_no_irq_out"/>
+ sources="nav_guidance,mmap_no_irq_out,carplay_8k_navi,carplay_16k_navi,carplay_24k_navi,carplay_32k_navi,carplay_48k_navi"/>
<route type="mix" sink="Phone Bus"
- sources="phone,mmap_no_irq_out"/>
+ sources="phone,carplay_8k_phone,carplay_16k_phone,carplay_24k_phone,carplay_32k_phone,carplay_48k_phone,mmap_no_irq_out"/>
<route type="mix" sink="Alerts Bus"
- sources="alerts"/>
+ sources="alerts,carplay_8k_alerts,carplay_16k_alerts,carplay_24k_alerts,carplay_32k_alerts,carplay_48k_alerts"/>
<route type="mix" sink="Front Passenger Bus"
sources="front_passenger,mmap_no_irq_out"/>
<route type="mix" sink="Rear Seat Bus"
diff --git a/configs/holi/audio_io_policy.conf b/configs/holi/audio_io_policy.conf
index 8141490..7f789a9 100755
--- a/configs/holi/audio_io_policy.conf
+++ b/configs/holi/audio_io_policy.conf
@@ -76,7 +76,7 @@
}
compress_offload_24 {
flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING
- formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_PCM_24_BIT_OFFLOAD|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_PRO|AUDIO_FORMAT_AAC_ADTS_LC|AUDIO_FORMAT_AAC_ADTS_HE_V1|AUDIO_FORMAT_AAC_ADTS_HE_V2|AUDIO_FORMAT_AAC_LATM_LC|AUDIO_FORMAT_AAC_LATM_HE_V1|AUDIO_FORMAT_AAC_LATM_HE_V2
+ formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_PCM_24_BIT_OFFLOAD|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_PRO|AUDIO_FORMAT_VORBIS|AUDIO_FORMAT_AAC_ADTS_LC|AUDIO_FORMAT_AAC_ADTS_HE_V1|AUDIO_FORMAT_AAC_ADTS_HE_V2|AUDIO_FORMAT_AAC_LATM_LC|AUDIO_FORMAT_AAC_LATM_HE_V1|AUDIO_FORMAT_AAC_LATM_HE_V2
sampling_rates 44100|48000|88200|96000|176400|192000
bit_width 24
app_type 69940
diff --git a/configs/kona/audio_io_policy.conf b/configs/kona/audio_io_policy.conf
index 41e2218..aa92a2a 100644
--- a/configs/kona/audio_io_policy.conf
+++ b/configs/kona/audio_io_policy.conf
@@ -76,7 +76,7 @@
}
compress_offload_24 {
flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING
- formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_PCM_24_BIT_OFFLOAD|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_PRO|AUDIO_FORMAT_AAC_ADTS_LC|AUDIO_FORMAT_AAC_ADTS_HE_V1|AUDIO_FORMAT_AAC_ADTS_HE_V2|AUDIO_FORMAT_AAC_LATM_LC|AUDIO_FORMAT_AAC_LATM_HE_V1|AUDIO_FORMAT_AAC_LATM_HE_V2
+ formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_PCM_24_BIT_OFFLOAD|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_PRO|AUDIO_FORMAT_VORBIS|AUDIO_FORMAT_AAC_ADTS_LC|AUDIO_FORMAT_AAC_ADTS_HE_V1|AUDIO_FORMAT_AAC_ADTS_HE_V2|AUDIO_FORMAT_AAC_LATM_LC|AUDIO_FORMAT_AAC_LATM_HE_V1|AUDIO_FORMAT_AAC_LATM_HE_V2
sampling_rates 44100|48000|88200|96000|176400|192000
bit_width 24
app_type 69940
diff --git a/configs/lahaina/audio_io_policy.conf b/configs/lahaina/audio_io_policy.conf
index 0932e44..7c53b2e 100644
--- a/configs/lahaina/audio_io_policy.conf
+++ b/configs/lahaina/audio_io_policy.conf
@@ -26,7 +26,7 @@
app_type 69943
}
voip_rx {
- flags AUDIO_OUTPUT_FLAG_VOIP_RX|AUDIO_OUTPUT_FLAG_DIRECT
+ flags AUDIO_OUTPUT_FLAG_VOIP_RX
formats AUDIO_FORMAT_PCM_16_BIT
sampling_rates 8000|16000|32000|48000
bit_width 16
diff --git a/configs/lahaina/audio_policy_configuration.xml b/configs/lahaina/audio_policy_configuration.xml
index d205882..e9ff009 100644
--- a/configs/lahaina/audio_policy_configuration.xml
+++ b/configs/lahaina/audio_policy_configuration.xml
@@ -20,7 +20,7 @@
<!--
Changes from Qualcomm Innovation Center are provided under the following license:
-Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted (subject to the limitations in the
@@ -195,7 +195,7 @@
samplingRates="8000,16000,48000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
</mixPort>
<mixPort name="voip_rx" role="source"
- flags="AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_VOIP_RX">
+ flags="AUDIO_OUTPUT_FLAG_VOIP_RX">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="8000,16000,32000,48000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
</mixPort>
diff --git a/configs/lito/audio_io_policy.conf b/configs/lito/audio_io_policy.conf
index 41e2218..aa92a2a 100644
--- a/configs/lito/audio_io_policy.conf
+++ b/configs/lito/audio_io_policy.conf
@@ -76,7 +76,7 @@
}
compress_offload_24 {
flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING
- formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_PCM_24_BIT_OFFLOAD|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_PRO|AUDIO_FORMAT_AAC_ADTS_LC|AUDIO_FORMAT_AAC_ADTS_HE_V1|AUDIO_FORMAT_AAC_ADTS_HE_V2|AUDIO_FORMAT_AAC_LATM_LC|AUDIO_FORMAT_AAC_LATM_HE_V1|AUDIO_FORMAT_AAC_LATM_HE_V2
+ formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_PCM_24_BIT_OFFLOAD|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_PRO|AUDIO_FORMAT_VORBIS|AUDIO_FORMAT_AAC_ADTS_LC|AUDIO_FORMAT_AAC_ADTS_HE_V1|AUDIO_FORMAT_AAC_ADTS_HE_V2|AUDIO_FORMAT_AAC_LATM_LC|AUDIO_FORMAT_AAC_LATM_HE_V1|AUDIO_FORMAT_AAC_LATM_HE_V2
sampling_rates 44100|48000|88200|96000|176400|192000
bit_width 24
app_type 69940
diff --git a/configs/msmnile_au/audio_io_policy.conf b/configs/msmnile_au/audio_io_policy.conf
index 1959c14..d02d736 100644
--- a/configs/msmnile_au/audio_io_policy.conf
+++ b/configs/msmnile_au/audio_io_policy.conf
@@ -91,7 +91,7 @@
nav_guidance {
flags AUDIO_OUTPUT_FLAG_NAV_GUIDANCE
formats AUDIO_FORMAT_PCM_16_BIT
- sampling_rates 48000
+ sampling_rates 8000|16000|24000|32000|48000
bit_width 16
app_type 69937
}
@@ -105,7 +105,7 @@
alerts {
flags AUDIO_OUTPUT_FLAG_ALERTS
formats AUDIO_FORMAT_PCM_16_BIT
- sampling_rates 48000
+ sampling_rates 8000|16000|24000|32000|48000
bit_width 16
app_type 69937
}
@@ -173,4 +173,11 @@
bit_width 24
app_type 69942
}
+ voip_tx {
+ flags AUDIO_INPUT_FLAG_VOIP_TX
+ formats AUDIO_FORMAT_PCM_16_BIT
+ sampling_rates 8000|16000|24000|32000|48000
+ bit_width 16
+ app_type 69938
+ }
}
diff --git a/configs/msmnile_au/audio_platform_info.xml b/configs/msmnile_au/audio_platform_info.xml
index f5e7fbf..232b558 100644
--- a/configs/msmnile_au/audio_platform_info.xml
+++ b/configs/msmnile_au/audio_platform_info.xml
@@ -25,6 +25,11 @@
<!-- WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -->
<!-- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -->
<!-- IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -->
+<!-- -->
+<!-- Changes from Qualcomm Innovation Center are provided under the following license: -->
+<!-- Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved. -->
+<!-- SPDX-License-Identifier: BSD-3-Clause-Clear -->
+
<audio_platform_info>
<acdb_ids>
<device name="SND_DEVICE_OUT_HANDSET" acdb_id="60"/>
@@ -105,10 +110,14 @@
<usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD7" type="out" id="24" fe="13"/>
<usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD8" type="out" id="25" fe="14"/>
<usecase name="USECASE_AUDIO_PLAYBACK_MEDIA" type="out" id="0" fe="0"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_MEDIA_LL" type="out" id="12" fe="9"/>
<usecase name="USECASE_AUDIO_PLAYBACK_SYS_NOTIFICATION" type="out" id="9" fe="4"/>
<usecase name="USECASE_AUDIO_PLAYBACK_NAV_GUIDANCE" type="out" id="1" fe="1"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_NAV_GUIDANCE_LL" type="out" id="64" fe="35"/>
<usecase name="USECASE_AUDIO_PLAYBACK_PHONE" type="out" id="12" fe="9"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_PHONE_LL" type="out" id="12" fe="9"/>
<usecase name="USECASE_AUDIO_PLAYBACK_ALERTS" type="out" id="59" fe="30"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_ALERTS_LL" type="out" id="64" fe="35"/>
<usecase name="USECASE_AUDIO_PLAYBACK_FRONT_PASSENGER" type="out" id="55" fe="22"/>
<usecase name="USECASE_AUDIO_PLAYBACK_REAR_SEAT" type="out" id="54" fe="21"/>
<usecase name="USECASE_VOICEMMODE1_CALL" type="in" id="2" fe="50"/>
@@ -119,7 +128,7 @@
<usecase name="USECASE_VOWLAN_CALL" type="out" id="-1" fe="-1"/>
<usecase name="USECASE_AUDIO_PLAYBACK_AFE_PROXY" type="out" id="5" fe="-1"/>
<usecase name="USECASE_AUDIO_RECORD_AFE_PROXY" type="in" id="6" fe="-1"/>
- <usecase name="USECASE_AUDIO_RECORD_LOW_LATENCY" type="in" id="13" fe="7"/>
+ <usecase name="USECASE_AUDIO_RECORD_LOW_LATENCY" type="in" id="60" fe="31"/>
<usecase name="USECASE_AUDIO_PLAYBACK_ULL" type="out" id="13" fe="7"/>
<usecase name="USECASE_AUDIO_PLAYBACK_VOIP" type="out" id="12" fe="9"/>
<usecase name="USECASE_AUDIO_RECORD_VOIP" type="in" id="12" fe="9"/>
@@ -144,6 +153,7 @@
<usecase name="USECASE_AUDIO_RECORD_COMPRESS2" type="in" id="31" fe="16"/>
<usecase name="USECASE_AUDIO_RECORD2" type="in" id="61" fe="32"/>
<usecase name="USECASE_AUDIO_RECORD3" type="in" id="62" fe="33"/>
+ <usecase name="USECASE_AUDIO_RECORD_LOW_LATENCY2" type="in" id="63" fe="34"/>
</pcm_ids>
<soft_volume_params>
diff --git a/configs/msmnile_au/audio_policy_configuration.xml b/configs/msmnile_au/audio_policy_configuration.xml
old mode 100755
new mode 100644
index f00e643..64f2707
--- a/configs/msmnile_au/audio_policy_configuration.xml
+++ b/configs/msmnile_au/audio_policy_configuration.xml
@@ -15,6 +15,10 @@
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+
+ Changes from Qualcomm Innovation Center are provided under the following license:
+ Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ SPDX-License-Identifier: BSD-3-Clause-Clear
-->
<audioPolicyConfiguration version="1.0" xmlns:xi="http://www.w3.org/2001/XInclude">
@@ -75,6 +79,11 @@
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</mixPort>
+ <mixPort name="carplay_48k_media" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
<mixPort name="sys_notification" role="source">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
@@ -103,14 +112,89 @@
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</mixPort>
+ <mixPort name="carplay_8k_navi" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="8000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_16k_navi" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="16000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_24k_navi" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="24000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_32k_navi" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="32000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_48k_navi" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
<mixPort name="phone" role="source">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</mixPort>
+ <mixPort name="carplay_8k_phone" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="8000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_16k_phone" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="16000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_24k_phone" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="24000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_32k_phone" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="32000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_48k_phone" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
<mixPort name="alerts" role="source">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</mixPort>
+ <mixPort name="carplay_8k_alerts" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="8000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_16k_alerts" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="16000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_24k_alerts" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="24000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_32k_alerts" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="32000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_48k_alerts" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
<mixPort name="front_passenger" role="source">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
@@ -245,7 +329,7 @@
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,96000,192000"
channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3,AUDIO_CHANNEL_INDEX_MASK_4"/>
</mixPort>
- <mixPort name="fast input" role="sink" flags="AUDIO_INPUT_FLAG_FAST">
+ <mixPort name="fast input" role="sink" maxOpenCount="2" maxActiveCount="2" flags="AUDIO_INPUT_FLAG_FAST">
<profile name="" format="AUDIO_FORMAT_PCM_8_24_BIT"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3"/>
@@ -468,15 +552,15 @@
<!-- route declaration, i.e. list all available sources for a given sink -->
<routes>
<route type="mix" sink="Media Bus"
- sources="media,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out"/>
+ sources="media,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out,carplay_48k_media"/>
<route type="mix" sink="Sys Notification Bus"
sources="sys_notification,mmap_no_irq_out,carplay_8k_sys,carplay_16k_sys,carplay_24k_sys,carplay_32k_sys,carplay_48k_sys"/>
<route type="mix" sink="Nav Guidance Bus"
- sources="nav_guidance,mmap_no_irq_out"/>
+ sources="nav_guidance,mmap_no_irq_out,carplay_8k_navi,carplay_16k_navi,carplay_24k_navi,carplay_32k_navi,carplay_48k_navi"/>
<route type="mix" sink="Phone Bus"
- sources="phone,mmap_no_irq_out"/>
+ sources="phone,mmap_no_irq_out,carplay_8k_phone,carplay_16k_phone,carplay_24k_phone,carplay_32k_phone,carplay_48k_phone"/>
<route type="mix" sink="Alerts Bus"
- sources="alerts"/>
+ sources="alerts,carplay_8k_alerts,carplay_16k_alerts,carplay_24k_alerts,carplay_32k_alerts,carplay_48k_alerts"/>
<route type="mix" sink="Front Passenger Bus"
sources="front_passenger,mmap_no_irq_out"/>
<route type="mix" sink="Rear Seat Bus"
diff --git a/configs/msmnile_au/mixer_paths_adp.xml b/configs/msmnile_au/mixer_paths_adp.xml
index 3e3c5ff..25f6c97 100644
--- a/configs/msmnile_au/mixer_paths_adp.xml
+++ b/configs/msmnile_au/mixer_paths_adp.xml
@@ -24,6 +24,10 @@
<!-- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -->
<!-- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -->
<!-- IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -->
+<!-- -->
+<!-- Changes from Qualcomm Innovation Center are provided under the following license: -->
+<!-- Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved. -->
+<!-- SPDX-License-Identifier: BSD-3-Clause-Clear -->
<mixer>
<!-- These are the initial mixer settings -->
<!-- Example commands to Enable the paired rx usecase-->
@@ -297,6 +301,11 @@
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia1" value="1" />
</path>
+ <path name="media-playback-ll">
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
+ <ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia10" value="1" />
+ </path>
+
<path name="sys-notification-playback sys-bus-out">
<ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia5" value="1" />
@@ -307,16 +316,31 @@
<ctl name="TERT_TDM_RX_1 Audio Mixer MultiMedia2" value="1" />
</path>
+ <path name="nav-guidance-playback-ll nav-bus-out">
+ <ctl name="TERT_TDM_RX_1 Channels" value="One" />
+ <ctl name="TERT_TDM_RX_1 Audio Mixer MultiMedia36" value="1" />
+ </path>
+
<path name="phone-playback phone-bus-out">
<ctl name="TERT_TDM_RX_2 Channels" value="One" />
<ctl name="TERT_TDM_RX_2 Audio Mixer MultiMedia10" value="1" />
</path>
+ <path name="phone-playback-ll phone-bus-out">
+ <ctl name="TERT_TDM_RX_2 Channels" value="One" />
+ <ctl name="TERT_TDM_RX_2 Audio Mixer MultiMedia10" value="1" />
+ </path>
+
<path name="alerts-playback alerts-bus-out">
<ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia31" value="1" />
</path>
+ <path name="alerts-playback-ll alerts-bus-out">
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
+ <ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia36" value="1" />
+ </path>
+
<path name="front-passenger-playback pax-bus-out">
<ctl name="QUAT_TDM_RX_0 Channels" value="Eight" />
<ctl name="QUAT_TDM_RX_0 Audio Mixer MultiMedia23" value="1" />
@@ -391,7 +415,17 @@
<path name="low-latency-record">
<ctl name="TERT_TDM_TX_0 Channels" value="One" />
- <ctl name="MultiMedia8 Mixer TERT_TDM_TX_0" value="1" />
+ <ctl name="MultiMedia32 Mixer TERT_TDM_TX_0" value="1" />
+ </path>
+
+ <path name="low-latency-record2">
+ <ctl name="TERT_TDM_TX_0 Channels" value="One" />
+ <ctl name="MultiMedia35 Mixer TERT_TDM_TX_0" value="1" />
+ </path>
+
+ <path name="audio-record-voip">
+ <ctl name="TERT_TDM_TX_0 Channels" value="One" />
+ <ctl name="MultiMedia10 Mixer TERT_TDM_TX_0" value="1" />
</path>
<path name="low-latency-record headset-mic">
diff --git a/configs/msmnile_au/msmnile_au.mk b/configs/msmnile_au/msmnile_au.mk
index 757ccb5..51a9832 100644
--- a/configs/msmnile_au/msmnile_au.mk
+++ b/configs/msmnile_au/msmnile_au.mk
@@ -316,8 +316,18 @@
ro.bluetooth.a2dp_offload.supported=true
# Disable A2DP offload
+ifeq ($(ENABLE_HYP), true)
+ifeq ($(TARGET_GVMGH_SPECIFIC), false)
+PRODUCT_PROPERTY_OVERRIDES += \
+persist.bluetooth.a2dp_offload.disabled=true
+else
PRODUCT_PROPERTY_OVERRIDES += \
persist.bluetooth.a2dp_offload.disabled=false
+endif
+else
+PRODUCT_PROPERTY_OVERRIDES += \
+persist.bluetooth.a2dp_offload.disabled=false
+endif
# A2DP offload DSP supported encoder list
PRODUCT_PROPERTY_OVERRIDES += \
@@ -372,12 +382,10 @@
#Enable AAudio MMAP/NOIRQ data path
#1 is AAUDIO_POLICY_NEVER so it will not try MMAP
#2 is AAUDIO_POLICY_AUTO so it will try MMAP then fallback to Legacy path
-ifneq ($(TARGET_BOARD_PLATFORM)$(TARGET_BOARD_SUFFIX), msmnile_gvmq)
PRODUCT_PROPERTY_OVERRIDES += aaudio.mmap_policy=2
#Allow EXCLUSIVE then fall back to SHARED.
PRODUCT_PROPERTY_OVERRIDES += aaudio.mmap_exclusive_policy=2
PRODUCT_PROPERTY_OVERRIDES += aaudio.hw_burst_min_usec=2000
-endif
#enable mirror-link feature
PRODUCT_PROPERTY_OVERRIDES += \
@@ -448,7 +456,8 @@
vendor.audio.feature.auto_hal.enable=true \
vendor.audio.feature.synth.enable=true \
vendor.audio.feature.powerpolicy.enable=true \
-vendor.audio.feature.concurrent_pcm_record.enable=true
+vendor.audio.feature.concurrent_pcm_record.enable=true \
+vendor.audio.feature.concurrent_low_latency_pcm_record.enable=true
ifeq ($(AUDIO_FEATURE_ENABLED_SND_MONITOR), true)
PRODUCT_ODM_PROPERTIES += \
vendor.audio.feature.snd_mon.enable=true
@@ -503,7 +512,8 @@
vendor.audio.feature.auto_hal.enable=true \
vendor.audio.feature.synth.enable=true \
vendor.audio.feature.powerpolicy.enable=true \
-vendor.audio.feature.concurrent_pcm_record.enable=true
+vendor.audio.feature.concurrent_pcm_record.enable=true \
+vendor.audio.feature.concurrent_low_latency_pcm_record.enable=true
ifeq ($(AUDIO_FEATURE_ENABLED_SND_MONITOR), true)
PRODUCT_ODM_PROPERTIES += \
vendor.audio.feature.snd_mon.enable=true
diff --git a/configs/msmsteppe_au/audio_io_policy.conf b/configs/msmsteppe_au/audio_io_policy.conf
index f7aa755..1814a84 100644
--- a/configs/msmsteppe_au/audio_io_policy.conf
+++ b/configs/msmsteppe_au/audio_io_policy.conf
@@ -91,7 +91,7 @@
nav_guidance {
flags AUDIO_OUTPUT_FLAG_NAV_GUIDANCE
formats AUDIO_FORMAT_PCM_16_BIT
- sampling_rates 48000
+ sampling_rates 8000|16000|24000|32000|48000
bit_width 16
app_type 69937
}
@@ -105,7 +105,7 @@
alerts {
flags AUDIO_OUTPUT_FLAG_ALERTS
formats AUDIO_FORMAT_PCM_16_BIT
- sampling_rates 48000
+ sampling_rates 8000|16000|24000|32000|48000
bit_width 16
app_type 69937
}
@@ -172,4 +172,11 @@
bit_width 32
app_type 69949
}
+ voip_tx {
+ flags AUDIO_INPUT_FLAG_VOIP_TX
+ formats AUDIO_FORMAT_PCM_16_BIT
+ sampling_rates 8000|16000|24000|32000|48000
+ bit_width 16
+ app_type 69938
+ }
}
diff --git a/configs/msmsteppe_au/audio_platform_info.xml b/configs/msmsteppe_au/audio_platform_info.xml
index ce989d9..d303e02 100644
--- a/configs/msmsteppe_au/audio_platform_info.xml
+++ b/configs/msmsteppe_au/audio_platform_info.xml
@@ -25,6 +25,11 @@
<!-- WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -->
<!-- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -->
<!-- IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -->
+<!-- -->
+<!-- Changes from Qualcomm Innovation Center are provided under the following license: -->
+<!-- Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved. -->
+<!-- SPDX-License-Identifier: BSD-3-Clause-Clear -->
+
<audio_platform_info>
<acdb_ids>
<device name="SND_DEVICE_OUT_HANDSET" acdb_id="60"/>
@@ -105,10 +110,14 @@
<usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD7" type="out" id="24" fe="13"/>
<usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD8" type="out" id="25" fe="14"/>
<usecase name="USECASE_AUDIO_PLAYBACK_MEDIA" type="out" id="0" fe="0"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_MEDIA_LL" type="out" id="12" fe="9"/>
<usecase name="USECASE_AUDIO_PLAYBACK_SYS_NOTIFICATION" type="out" id="9" fe="4"/>
<usecase name="USECASE_AUDIO_PLAYBACK_NAV_GUIDANCE" type="out" id="1" fe="1"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_NAV_GUIDANCE_LL" type="out" id="64" fe="35"/>
<usecase name="USECASE_AUDIO_PLAYBACK_PHONE" type="out" id="12" fe="9"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_PHONE_LL" type="out" id="12" fe="9"/>
<usecase name="USECASE_AUDIO_PLAYBACK_ALERTS" type="out" id="59" fe="30"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_ALERTS_LL" type="out" id="64" fe="35"/>
<usecase name="USECASE_AUDIO_PLAYBACK_FRONT_PASSENGER" type="out" id="55" fe="22"/>
<usecase name="USECASE_AUDIO_PLAYBACK_REAR_SEAT" type="out" id="54" fe="21"/>
<usecase name="USECASE_VOICEMMODE1_CALL" type="in" id="2" fe="50"/>
@@ -119,7 +128,7 @@
<usecase name="USECASE_VOWLAN_CALL" type="out" id="-1" fe="-1"/>
<usecase name="USECASE_AUDIO_PLAYBACK_AFE_PROXY" type="out" id="5" fe="-1"/>
<usecase name="USECASE_AUDIO_RECORD_AFE_PROXY" type="in" id="6" fe="-1"/>
- <usecase name="USECASE_AUDIO_RECORD_LOW_LATENCY" type="in" id="13" fe="7"/>
+ <usecase name="USECASE_AUDIO_RECORD_LOW_LATENCY" type="in" id="60" fe="31"/>
<usecase name="USECASE_AUDIO_PLAYBACK_ULL" type="out" id="13" fe="7"/>
<usecase name="USECASE_AUDIO_PLAYBACK_VOIP" type="out" id="12" fe="9"/>
<usecase name="USECASE_AUDIO_RECORD_VOIP" type="in" id="12" fe="9"/>
@@ -144,6 +153,7 @@
<usecase name="USECASE_AUDIO_RECORD_COMPRESS2" type="in" id="31" fe="16"/>
<usecase name="USECASE_AUDIO_RECORD2" type="in" id="61" fe="32"/>
<usecase name="USECASE_AUDIO_RECORD3" type="in" id="62" fe="33"/>
+ <usecase name="USECASE_AUDIO_RECORD_LOW_LATENCY2" type="in" id="63" fe="34"/>
</pcm_ids>
<config_params>
diff --git a/configs/msmsteppe_au/audio_policy_configuration.xml b/configs/msmsteppe_au/audio_policy_configuration.xml
index c7bf080..4306abd 100644
--- a/configs/msmsteppe_au/audio_policy_configuration.xml
+++ b/configs/msmsteppe_au/audio_policy_configuration.xml
@@ -15,6 +15,10 @@
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+
+ Changes from Qualcomm Innovation Center are provided under the following license:
+ Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ SPDX-License-Identifier: BSD-3-Clause-Clear
-->
<audioPolicyConfiguration version="1.0" xmlns:xi="http://www.w3.org/2001/XInclude">
@@ -75,6 +79,11 @@
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</mixPort>
+ <mixPort name="carplay_48k_media" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
<mixPort name="sys_notification" role="source">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
@@ -103,14 +112,89 @@
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</mixPort>
+ <mixPort name="carplay_8k_navi" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="8000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_16k_navi" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="16000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_24k_navi" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="24000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_32k_navi" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="32000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_48k_navi" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
<mixPort name="phone" role="source">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</mixPort>
+ <mixPort name="carplay_8k_phone" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="8000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_16k_phone" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="16000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_24k_phone" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="24000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_32k_phone" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="32000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_48k_phone" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
<mixPort name="alerts" role="source">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</mixPort>
+ <mixPort name="carplay_8k_alerts" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="8000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_16k_alerts" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="16000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_24k_alerts" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="24000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_32k_alerts" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="32000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_48k_alerts" role="source"
+ flags="AUDIO_OUTPUT_FLAG_FAST">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
<mixPort name="front_passenger" role="source">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
@@ -245,7 +329,7 @@
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,96000,192000"
channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3,AUDIO_CHANNEL_INDEX_MASK_4"/>
</mixPort>
- <mixPort name="fast input" role="sink" flags="AUDIO_INPUT_FLAG_FAST">
+ <mixPort name="fast input" role="sink" maxOpenCount="2" maxActiveCount="2" flags="AUDIO_INPUT_FLAG_FAST">
<profile name="" format="AUDIO_FORMAT_PCM_8_24_BIT"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3"/>
@@ -463,15 +547,15 @@
<!-- route declaration, i.e. list all available sources for a given sink -->
<routes>
<route type="mix" sink="Media Bus"
- sources="media,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out"/>
+ sources="media,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out,carplay_48k_media"/>
<route type="mix" sink="Sys Notification Bus"
sources="sys_notification,mmap_no_irq_out,carplay_8k_sys,carplay_16k_sys,carplay_24k_sys,carplay_32k_sys,carplay_48k_sys"/>
<route type="mix" sink="Nav Guidance Bus"
- sources="nav_guidance,mmap_no_irq_out"/>
+ sources="nav_guidance,mmap_no_irq_out,carplay_8k_navi,carplay_16k_navi,carplay_24k_navi,carplay_32k_navi,carplay_48k_navi"/>
<route type="mix" sink="Phone Bus"
- sources="phone,mmap_no_irq_out"/>
+ sources="phone,mmap_no_irq_out,carplay_8k_phone,carplay_16k_phone,carplay_24k_phone,carplay_32k_phone,carplay_48k_phone"/>
<route type="mix" sink="Alerts Bus"
- sources="alerts"/>
+ sources="alerts,carplay_8k_alerts,carplay_16k_alerts,carplay_24k_alerts,carplay_32k_alerts,carplay_48k_alerts"/>
<route type="mix" sink="Front Passenger Bus"
sources="front_passenger,mmap_no_irq_out"/>
<route type="mix" sink="Rear Seat Bus"
diff --git a/configs/msmsteppe_au/mixer_paths_adp.xml b/configs/msmsteppe_au/mixer_paths_adp.xml
index 760437b..eaaba98 100644
--- a/configs/msmsteppe_au/mixer_paths_adp.xml
+++ b/configs/msmsteppe_au/mixer_paths_adp.xml
@@ -25,6 +25,10 @@
<!-- WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -->
<!-- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -->
<!-- IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -->
+<!-- -->
+<!-- Changes from Qualcomm Innovation Center are provided under the following license: -->
+<!-- Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved. -->
+<!-- SPDX-License-Identifier: BSD-3-Clause-Clear -->
<mixer>
<!-- These are the initial mixer settings -->
<ctl name="MultiMedia5 Mixer AFE_PCM_TX" value="0" />
@@ -267,6 +271,11 @@
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia1" value="1" />
</path>
+ <path name="media-playback-ll">
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
+ <ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia10" value="1" />
+ </path>
+
<path name="sys-notification-playback sys-bus-out">
<ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia5" value="1" />
@@ -277,16 +286,31 @@
<ctl name="TERT_TDM_RX_1 Audio Mixer MultiMedia2" value="1" />
</path>
+ <path name="nav-guidance-playback-ll nav-bus-out">
+ <ctl name="TERT_TDM_RX_1 Channels" value="One" />
+ <ctl name="TERT_TDM_RX_1 Audio Mixer MultiMedia36" value="1" />
+ </path>
+
<path name="phone-playback phone-bus-out">
<ctl name="TERT_TDM_RX_2 Channels" value="One" />
<ctl name="TERT_TDM_RX_2 Audio Mixer MultiMedia10" value="1" />
</path>
+ <path name="phone-playback-ll phone-bus-out">
+ <ctl name="TERT_TDM_RX_2 Channels" value="One" />
+ <ctl name="TERT_TDM_RX_2 Audio Mixer MultiMedia10" value="1" />
+ </path>
+
<path name="alerts-playback alerts-bus-out">
<ctl name="TERT_TDM_RX_0 Channels" value="Six" />
<ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia31" value="1" />
</path>
+ <path name="alerts-playback-ll alerts-bus-out">
+ <ctl name="TERT_TDM_RX_0 Channels" value="Six" />
+ <ctl name="TERT_TDM_RX_0 Audio Mixer MultiMedia36" value="1" />
+ </path>
+
<path name="front-passenger-playback pax-bus-out">
<ctl name="QUAT_TDM_RX_0 Channels" value="Eight" />
<ctl name="QUAT_TDM_RX_0 Audio Mixer MultiMedia23" value="1" />
@@ -341,7 +365,17 @@
<path name="low-latency-record">
<ctl name="TERT_TDM_TX_0 Channels" value="One" />
- <ctl name="MultiMedia8 Mixer TERT_TDM_TX_0" value="1" />
+ <ctl name="MultiMedia32 Mixer TERT_TDM_TX_0" value="1" />
+ </path>
+
+ <path name="low-latency-record2">
+ <ctl name="TERT_TDM_TX_0 Channels" value="One" />
+ <ctl name="MultiMedia35 Mixer TERT_TDM_TX_0" value="1" />
+ </path>
+
+ <path name="audio-record-voip">
+ <ctl name="TERT_TDM_TX_0 Channels" value="One" />
+ <ctl name="MultiMedia10 Mixer TERT_TDM_TX_0" value="1" />
</path>
<path name="low-latency-record capture-fm">
diff --git a/configs/msmsteppe_au/msmsteppe_au.mk b/configs/msmsteppe_au/msmsteppe_au.mk
index d5c4986..d11335a 100644
--- a/configs/msmsteppe_au/msmsteppe_au.mk
+++ b/configs/msmsteppe_au/msmsteppe_au.mk
@@ -410,7 +410,8 @@
vendor.audio.feature.auto_hal.enable=true \
vendor.audio.feature.synth.enable=true \
vendor.audio.feature.powerpolicy.enable=true \
-vendor.audio.feature.concurrent_pcm_record.enable=true
+vendor.audio.feature.concurrent_pcm_record.enable=true \
+vendor.audio.feature.concurrent_low_latency_pcm_record.enable=true
else
# Non-Generic ODM varient related
PRODUCT_ODM_PROPERTIES += \
@@ -459,7 +460,8 @@
vendor.audio.feature.auto_hal.enable=true \
vendor.audio.feature.synth.enable=true \
vendor.audio.feature.powerpolicy.enable=true \
-vendor.audio.feature.concurrent_pcm_record.enable=true
+vendor.audio.feature.concurrent_pcm_record.enable=true \
+vendor.audio.feature.concurrent_low_latency_pcm_record.enable=true
endif
# for HIDL related packages
diff --git a/configs/sdm660/audio_output_policy.conf b/configs/sdm660/audio_output_policy.conf
index 921c8b8..419089c 100644
--- a/configs/sdm660/audio_output_policy.conf
+++ b/configs/sdm660/audio_output_policy.conf
@@ -19,7 +19,7 @@
app_type 69937
}
voip_rx {
- flags AUDIO_OUTPUT_FLAG_VOIP_RX|AUDIO_OUTPUT_FLAG_DIRECT
+ flags AUDIO_OUTPUT_FLAG_VOIP_RX
formats AUDIO_FORMAT_PCM_16_BIT
sampling_rates 8000|16000|32000|48000
bit_width 16
diff --git a/configs/sdm660/audio_policy_configuration.xml b/configs/sdm660/audio_policy_configuration.xml
index 5a25dad..8440944 100644
--- a/configs/sdm660/audio_policy_configuration.xml
+++ b/configs/sdm660/audio_policy_configuration.xml
@@ -20,7 +20,7 @@
<!--
Changes from Qualcomm Innovation Center are provided under the following license:
-Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted (subject to the limitations in the
@@ -187,7 +187,7 @@
samplingRates="8000,16000,48000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
</mixPort>
<mixPort name="voip_rx" role="source"
- flags="AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_VOIP_RX">
+ flags="AUDIO_OUTPUT_FLAG_VOIP_RX">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="8000,16000,32000,48000" channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO"/>
</mixPort>
diff --git a/configs/trinket/audio_io_policy.conf b/configs/trinket/audio_io_policy.conf
index d2e82a9..24e5b04 100644
--- a/configs/trinket/audio_io_policy.conf
+++ b/configs/trinket/audio_io_policy.conf
@@ -76,7 +76,7 @@
}
compress_offload_24 {
flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING
- formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_PCM_24_BIT_OFFLOAD|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_PRO|AUDIO_FORMAT_AAC_ADTS_LC|AUDIO_FORMAT_AAC_ADTS_HE_V1|AUDIO_FORMAT_AAC_ADTS_HE_V2||AUDIO_FORMAT_AAC_LATM_LC|AUDIO_FORMAT_AAC_LATM_HE_V1|AUDIO_FORMAT_AAC_LATM_HE_V2
+ formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_PCM_24_BIT_OFFLOAD|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_PRO|AUDIO_FORMAT_VORBIS|AUDIO_FORMAT_AAC_ADTS_LC|AUDIO_FORMAT_AAC_ADTS_HE_V1|AUDIO_FORMAT_AAC_ADTS_HE_V2||AUDIO_FORMAT_AAC_LATM_LC|AUDIO_FORMAT_AAC_LATM_HE_V1|AUDIO_FORMAT_AAC_LATM_HE_V2
sampling_rates 44100|48000|88200|96000|176400|192000
bit_width 24
app_type 69940
diff --git a/configure.ac b/configure.ac
index 8c318df..7fc0d3f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -52,6 +52,7 @@
[qrbx210], [TARGET_SUPPORT=qrbx210],
[qrb5165], [TARGET_SUPPORT=qrb5165],
[sdmsteppe], [TARGET_SUPPORT=sdmsteppe],
+ [qcs6490], [TARGET_SUPPORT=qcs6490],
[TARGET_SUPPORT=none])],
[TARGET_SUPPORT=none]
)
@@ -129,6 +130,12 @@
TARGET_CFLAGS+=" -DMAX_TARGET_SPECIFIC_CHANNEL_CNT=\"4\""
TARGET_CFLAGS+=" -DINCALL_STEREO_CAPTURE_ENABLED"
fi
+if (test x$TARGET_SUPPORT = xqcs6490); then
+ AC_SUBST([TARGET_PLATFORM], ["msm8974"])
+ TARGET_CFLAGS=" -DPLATFORM_LAHAINA"
+ TARGET_CFLAGS+=" -DMAX_TARGET_SPECIFIC_CHANNEL_CNT=\"4\""
+ TARGET_CFLAGS+=" -DINCALL_STEREO_CAPTURE_ENABLED"
+fi
if (test x$TARGET_SUPPORT = xmsmnile_au); then
AC_SUBST([TARGET_PLATFORM], ["msm8974"])
TARGET_CFLAGS="-DPLATFORM_MSMNILE"
diff --git a/hal/Android.mk b/hal/Android.mk
index 011196f..b28e42c 100644
--- a/hal/Android.mk
+++ b/hal/Android.mk
@@ -135,8 +135,13 @@
endif
ifeq ($(ENABLE_AUDIO_LEGACY_TECHPACK),true)
+ifeq ($(TARGET_BOARD_AUTO),true)
+ LIBRARY_TINYCOMPRESS := libqti-tinycompress
+ LIBRARY_TINYCOMPRESS_INC := $(TOP)/vendor/qcom/opensource/tinycompress/include
+else
LIBRARY_TINYCOMPRESS := libtinycompress
LIBRARY_TINYCOMPRESS_INC := external/tinycompress/include
+endif
LOCAL_CFLAGS += -DENABLE_AUDIO_LEGACY_PURE
endif
diff --git a/hal/audio_extn/Android.mk b/hal/audio_extn/Android.mk
index 8fcb307..209b2fd 100644
--- a/hal/audio_extn/Android.mk
+++ b/hal/audio_extn/Android.mk
@@ -16,8 +16,13 @@
endif
ifeq ($(ENABLE_AUDIO_LEGACY_TECHPACK),true)
+ifeq ($(TARGET_BOARD_AUTO),true)
+ LIBRARY_TINYCOMPRESS := libqti-tinycompress
+ LIBRARY_TINYCOMPRESS_INC := $(TOP)/vendor/qcom/opensource/tinycompress/include
+else
LIBRARY_TINYCOMPRESS := libtinycompress
LIBRARY_TINYCOMPRESS_INC := external/tinycompress/include
+endif
LOCAL_CFLAGS += -DENABLE_AUDIO_LEGACY_PURE
endif
#--------------------------------------------
diff --git a/hal/audio_extn/audio_extn.c b/hal/audio_extn/audio_extn.c
index b9832bb..0795649 100644
--- a/hal/audio_extn/audio_extn.c
+++ b/hal/audio_extn/audio_extn.c
@@ -239,6 +239,7 @@
static bool audio_extn_audiozoom_enabled = false;
static bool audio_extn_hifi_filter_enabled = false;
static bool audio_extn_concurrent_pcm_record_enabled = false;
+static bool audio_extn_concurrent_low_latency_pcm_record_enabled = false;
#define AUDIO_PARAMETER_KEY_AANC_NOISE_LEVEL "aanc_noise_level"
#define AUDIO_PARAMETER_KEY_ANC "anc_enabled"
@@ -3791,7 +3792,7 @@
int max_mic_count = platform_get_max_mic_count(adev->platform);
/* validate input params. Avoid updated channel mask if loopback device */
/* validate input params. Avoid updated channel mask if HDMI or loopback device */
- if ((channel_count > max_mic_count) &&
+ if ((channel_count == 6) &&
(in->format == AUDIO_FORMAT_PCM_16_BIT) &&
(!is_loopback_input_device(get_device_types(&in->device_list)))) {
switch (max_mic_count) {
@@ -5711,6 +5712,19 @@
}
// END: CONCURRENT_PCM_RECORD =================================================
+// START: CONCURRENT_LOW_LATENCY_PCM_RECORD ===============================================
+bool audio_extn_is_concurrent_low_latency_pcm_record_enabled()
+{
+ return audio_extn_concurrent_low_latency_pcm_record_enabled;
+}
+
+void concurrent_low_latency_pcm_record_feature_init(bool is_feature_enabled)
+{
+ audio_extn_concurrent_low_latency_pcm_record_enabled = is_feature_enabled;
+ ALOGD("%s: ---- Feature CONCURRENT_LOW_LATENCY_PCM_RECORD is %s----", __func__, is_feature_enabled? "ENABLED": "NOT ENABLED");
+}
+// END: CONCURRENT_LOW_LATENCY_PCM_RECORD =================================================
+
// START: COMPRESS_IN ==================================================
void compress_in_feature_init(bool is_feature_enabled)
{
@@ -6791,6 +6805,9 @@
concurrent_pcm_record_feature_init(
property_get_bool("vendor.audio.feature.concurrent_pcm_record.enable",
false));
+ concurrent_low_latency_pcm_record_feature_init(
+ property_get_bool("vendor.audio.feature.concurrent_low_latency_pcm_record.enable",
+ false));
}
void audio_extn_set_parameters(struct audio_device *adev,
diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h
index f35a9d6..256382c 100644
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -33,6 +33,11 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
+ *
+ * Changes from Qualcomm Innovation Center are provided under the following license:
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
+ *
*/
#ifndef AUDIO_EXTN_H
@@ -1482,4 +1487,5 @@
void audio_get_vendor_config_path(char* config_file_path, int path_size);
bool audio_extn_is_concurrent_pcm_record_enabled();
+bool audio_extn_is_concurrent_low_latency_pcm_record_enabled();
#endif /* AUDIO_EXTN_H */
diff --git a/hal/audio_extn/auto_hal.c b/hal/audio_extn/auto_hal.c
index 037b0e5..6f0a5d4 100644
--- a/hal/audio_extn/auto_hal.c
+++ b/hal/audio_extn/auto_hal.c
@@ -25,6 +25,10 @@
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Changes from Qualcomm Innovation Center are provided under the following license:
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
*/
#define LOG_TAG "auto_hal_extn"
/*#define LOG_NDEBUG 0*/
@@ -375,13 +379,32 @@
switch(out->car_audio_stream) {
case CAR_AUDIO_STREAM_MEDIA:
- /* media bus stream shares pcm device with deep-buffer */
- out->usecase = USECASE_AUDIO_PLAYBACK_MEDIA;
- out->config = pcm_config_media;
- out->config.period_size = fp_get_output_period_size(out->sample_rate, out->format,
+ if (out->flags == AUDIO_OUTPUT_FLAG_PRIMARY) {
+ /* media bus stream shares pcm device with deep-buffer */
+ out->usecase = USECASE_AUDIO_PLAYBACK_MEDIA;
+ out->config = pcm_config_media;
+ out->config.period_size = fp_get_output_period_size(out->sample_rate, out->format,
channels, DEEP_BUFFER_OUTPUT_PERIOD_DURATION);
- if (out->config.period_size <= 0) {
- ALOGE("Invalid configuration period size is not valid");
+ if (out->config.period_size <= 0) {
+ ALOGE("Invalid configuration period size is not valid");
+ ret = -EINVAL;
+ goto error;
+ }
+ }
+ else if (out->flags == AUDIO_OUTPUT_FLAG_FAST) {
+ out->usecase = USECASE_AUDIO_PLAYBACK_MEDIA_LL;
+ out->flags = AUDIO_OUTPUT_FLAG_MEDIA;
+ switch(out->sample_rate)
+ {
+ case 48000:
+ out->config=pcm_config_system_48KHz;
+ break;;
+ default:
+ out->config=pcm_config_system_48KHz;
+ }
+ }
+ else {
+ ALOGE("%s: Output profile flag(%#x) is not valid", __func__,out->flags);
ret = -EINVAL;
goto error;
}
@@ -418,12 +441,51 @@
out->volume_l = out->volume_r = MAX_VOLUME_GAIN;
break;
case CAR_AUDIO_STREAM_NAV_GUIDANCE:
- out->usecase = USECASE_AUDIO_PLAYBACK_NAV_GUIDANCE;
- out->config = pcm_config_media;
- out->config.period_size = fp_get_output_period_size(out->sample_rate, out->format,
+ if (out->flags == AUDIO_OUTPUT_FLAG_NONE) {
+ out->usecase = USECASE_AUDIO_PLAYBACK_NAV_GUIDANCE;
+ out->config = pcm_config_media;
+ out->config.period_size = fp_get_output_period_size(out->sample_rate, out->format,
channels, DEEP_BUFFER_OUTPUT_PERIOD_DURATION);
- if (out->config.period_size <= 0) {
- ALOGE("Invalid configuration period size is not valid");
+ if (out->config.period_size <= 0) {
+ ALOGE("Invalid configuration period size is not valid");
+ ret = -EINVAL;
+ goto error;
+ }
+ out->flags |= AUDIO_OUTPUT_FLAG_NAV_GUIDANCE;
+ }
+ else if (out->flags == AUDIO_OUTPUT_FLAG_FAST) {
+ out->usecase = USECASE_AUDIO_PLAYBACK_NAV_GUIDANCE_LL;
+ switch(out->sample_rate)
+ {
+ case 48000:
+ out->config=pcm_config_system_48KHz;
+ break;
+ case 32000:
+ out->config=pcm_config_system_32KHz;
+ break;
+ case 24000:
+ out->config=pcm_config_system_24KHz;
+ break;
+ case 16000:
+ out->config=pcm_config_system_16KHz;
+ break;
+ case 8000:
+ out->config=pcm_config_system_8KHz;
+ break;
+ default:
+ out->config = pcm_config_media;
+ out->config.period_size = fp_get_output_period_size(out->sample_rate, out->format,
+ channels, DEEP_BUFFER_OUTPUT_PERIOD_DURATION);
+ if (out->config.period_size <= 0) {
+ ALOGE("Invalid configuration period size is not valid");
+ ret = -EINVAL;
+ goto error;
+ }
+ }
+ out->flags = AUDIO_OUTPUT_FLAG_NAV_GUIDANCE;
+ }
+ else {
+ ALOGE("%s: Output profile flag(%#x) is not valid", __func__,out->flags);
ret = -EINVAL;
goto error;
}
@@ -432,7 +494,19 @@
out->volume_l = out->volume_r = MAX_VOLUME_GAIN;
break;
case CAR_AUDIO_STREAM_PHONE:
- out->usecase = USECASE_AUDIO_PLAYBACK_PHONE;
+ if (out->flags == AUDIO_OUTPUT_FLAG_NONE) {
+ out->usecase = USECASE_AUDIO_PLAYBACK_PHONE;
+ out->flags = AUDIO_OUTPUT_FLAG_PHONE;
+ }
+ else if (out->flags == AUDIO_OUTPUT_FLAG_FAST) {
+ out->usecase = USECASE_AUDIO_PLAYBACK_PHONE_LL;
+ out->flags = AUDIO_OUTPUT_FLAG_PHONE;
+ }
+ else {
+ ALOGE("%s: Output profile flag(%#x) is not valid", __func__,out->flags);
+ ret = -EINVAL;
+ goto error;
+ }
switch(out->sample_rate)
{
case 48000:
@@ -458,8 +532,39 @@
out->volume_l = out->volume_r = MAX_VOLUME_GAIN;
break;
case CAR_AUDIO_STREAM_ALERTS:
- out->usecase = USECASE_AUDIO_PLAYBACK_ALERTS;
- out->config = pcm_config_system;
+ if (out->flags == AUDIO_OUTPUT_FLAG_NONE) {
+ out->usecase = USECASE_AUDIO_PLAYBACK_ALERTS;
+ out->flags = AUDIO_OUTPUT_FLAG_ALERTS;
+ }
+ else if (out->flags == AUDIO_OUTPUT_FLAG_FAST) {
+ out->usecase = USECASE_AUDIO_PLAYBACK_ALERTS_LL;
+ out->flags = AUDIO_OUTPUT_FLAG_ALERTS;
+ }
+ else {
+ ALOGE("%s: Output profile flag(%#x) is not valid", __func__,out->flags);
+ ret = -EINVAL;
+ goto error;
+ }
+ switch(out->sample_rate)
+ {
+ case 48000:
+ out->config=pcm_config_system_48KHz;
+ break;
+ case 32000:
+ out->config=pcm_config_system_32KHz;
+ break;
+ case 24000:
+ out->config=pcm_config_system_24KHz;
+ break;
+ case 16000:
+ out->config=pcm_config_system_16KHz;
+ break;
+ case 8000:
+ out->config=pcm_config_system_8KHz;
+ break;
+ default:
+ out->config=pcm_config_system_48KHz;
+ }
if (out->flags == AUDIO_OUTPUT_FLAG_NONE)
out->flags |= AUDIO_OUTPUT_FLAG_ALERTS;
out->volume_l = out->volume_r = MAX_VOLUME_GAIN;
@@ -1019,6 +1124,7 @@
snd_device = SND_DEVICE_OUT_VOICE_SPEAKER;
break;
case USECASE_AUDIO_PLAYBACK_MEDIA:
+ case USECASE_AUDIO_PLAYBACK_MEDIA_LL:
snd_device = SND_DEVICE_OUT_BUS_MEDIA;
break;
case USECASE_AUDIO_PLAYBACK_OFFLOAD:
@@ -1069,12 +1175,15 @@
snd_device = SND_DEVICE_OUT_BUS_SYS;
break;
case USECASE_AUDIO_PLAYBACK_NAV_GUIDANCE:
+ case USECASE_AUDIO_PLAYBACK_NAV_GUIDANCE_LL:
snd_device = SND_DEVICE_OUT_BUS_NAV;
break;
case USECASE_AUDIO_PLAYBACK_PHONE:
+ case USECASE_AUDIO_PLAYBACK_PHONE_LL:
snd_device = SND_DEVICE_OUT_BUS_PHN;
break;
case USECASE_AUDIO_PLAYBACK_ALERTS:
+ case USECASE_AUDIO_PLAYBACK_ALERTS_LL:
snd_device = SND_DEVICE_OUT_BUS_ALR;
break;
case USECASE_AUDIO_PLAYBACK_FRONT_PASSENGER:
diff --git a/hal/audio_extn/auto_hal.h b/hal/audio_extn/auto_hal.h
index dfe78f2..679daf2 100644
--- a/hal/audio_extn/auto_hal.h
+++ b/hal/audio_extn/auto_hal.h
@@ -15,6 +15,11 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
+ *
+ * Changes from Qualcomm Innovation Center are provided under the following license:
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
+ *
*/
#include <audio_hw.h>
#include "platform.h"
@@ -112,10 +117,14 @@
static const audio_usecase_t bus_device_usecases[] = {
USECASE_AUDIO_PLAYBACK_MEDIA,
+ USECASE_AUDIO_PLAYBACK_MEDIA_LL,
USECASE_AUDIO_PLAYBACK_SYS_NOTIFICATION,
USECASE_AUDIO_PLAYBACK_NAV_GUIDANCE,
+ USECASE_AUDIO_PLAYBACK_NAV_GUIDANCE_LL,
USECASE_AUDIO_PLAYBACK_PHONE,
+ USECASE_AUDIO_PLAYBACK_PHONE_LL,
USECASE_AUDIO_PLAYBACK_ALERTS,
+ USECASE_AUDIO_PLAYBACK_ALERTS_LL,
USECASE_AUDIO_PLAYBACK_FRONT_PASSENGER,
USECASE_AUDIO_PLAYBACK_REAR_SEAT,
USECASE_AUDIO_RECORD_BUS,
diff --git a/hal/audio_extn/ext_hw_plugin.c b/hal/audio_extn/ext_hw_plugin.c
index 5f21c3f..8807f22 100644
--- a/hal/audio_extn/ext_hw_plugin.c
+++ b/hal/audio_extn/ext_hw_plugin.c
@@ -25,6 +25,10 @@
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* Changes from Qualcomm Innovation Center are provided under the following license:
+* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+* SPDX-License-Identifier: BSD-3-Clause-Clear
*/
#define LOG_TAG "audio_ext_hw_plugin"
@@ -175,12 +179,14 @@
case USECASE_AUDIO_PLAYBACK_OFFLOAD9:
case USECASE_AUDIO_PLAYBACK_ULL:
case USECASE_AUDIO_PLAYBACK_MEDIA:
+ case USECASE_AUDIO_PLAYBACK_MEDIA_LL:
case USECASE_AUDIO_PLAYBACK_SYS_NOTIFICATION:
*plugin_usecase = AUDIO_HAL_PLUGIN_USECASE_DEFAULT_PLAYBACK;
break;
case USECASE_AUDIO_RECORD:
case USECASE_AUDIO_RECORD_COMPRESS:
case USECASE_AUDIO_RECORD_LOW_LATENCY:
+ case USECASE_AUDIO_RECORD_LOW_LATENCY2:
case USECASE_AUDIO_RECORD_FM_VIRTUAL:
case USECASE_AUDIO_RECORD_ECHO_REF_EXT:
*plugin_usecase = AUDIO_HAL_PLUGIN_USECASE_DEFAULT_CAPTURE;
@@ -196,9 +202,11 @@
*plugin_usecase = AUDIO_HAL_PLUGIN_USECASE_CS_VOICE_CALL;
break;
case USECASE_AUDIO_PLAYBACK_NAV_GUIDANCE:
+ case USECASE_AUDIO_PLAYBACK_NAV_GUIDANCE_LL:
*plugin_usecase = AUDIO_HAL_PLUGIN_USECASE_DRIVER_SIDE_PLAYBACK;
break;
case USECASE_AUDIO_PLAYBACK_PHONE:
+ case USECASE_AUDIO_PLAYBACK_PHONE_LL:
*plugin_usecase = AUDIO_HAL_PLUGIN_USECASE_PHONE_PLAYBACK;
break;
case USECASE_AUDIO_FM_TUNER_EXT:
diff --git a/hal/audio_extn/sndmonitor.c b/hal/audio_extn/sndmonitor.c
index 5e39d37..a0bd6d3 100644
--- a/hal/audio_extn/sndmonitor.c
+++ b/hal/audio_extn/sndmonitor.c
@@ -55,6 +55,7 @@
#include <log/log.h>
#include <cutils/str_parms.h>
#include <ctype.h>
+#include <linux/version.h>
#include "audio_hw.h"
#include "audio_extn.h"
@@ -158,17 +159,20 @@
s->fd = fd; // dup?
char *state = read_state(fd);
-
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 15, 0))
if (!state) {
free(s);
return -1;
}
bool online = state && !strcmp(state, "ONLINE");
- ALOGV("card %d initial state %s %d", card, state, online);
-
if (state)
free(state);
+#else
+ bool online = atoi(state);
+#endif
+
+ ALOGV("card %d initial state %s %d", card, state, online);
s->status = online ? CARD_STATUS_ONLINE : CARD_STATUS_OFFLINE;
list_add_tail(&sndmonitor.cards, &s->node);
@@ -234,8 +238,11 @@
ALOGW("Skip over non-ADSP snd card %s", card_id);
continue;
}
-
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 15, 0))
snprintf(path, sizeof(path), "/proc/asound/card%s/state", ptr);
+#else
+ snprintf(path, sizeof(path), "/sys/kernel/snd_card/card_state");
+#endif
ALOGV("Opening sound card state : %s", path);
fd = open(path, O_RDONLY);
@@ -446,18 +453,26 @@
char rd_buf[9]={0};
card_status_t status;
- if (read(s->fd, rd_buf, 8) <= 0)
+ if (read(s->fd, rd_buf, 8) < 0) {
+ ALOGE("read card state error");
return -1;
+ }
rd_buf[8] = '\0';
lseek(s->fd, 0, SEEK_SET);
ALOGV("card num %d, new state %s", s->card, rd_buf);
-
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 15, 0))
if (strstr(rd_buf, "OFFLINE"))
status = CARD_STATUS_OFFLINE;
else if (strstr(rd_buf, "ONLINE"))
status = CARD_STATUS_ONLINE;
+#else
+ if (!atoi(rd_buf))
+ status = CARD_STATUS_OFFLINE;
+ else if (atoi(rd_buf))
+ status = CARD_STATUS_ONLINE;
+#endif
else {
ALOGE("unknown state");
return 0;
diff --git a/hal/audio_extn/utils.c b/hal/audio_extn/utils.c
index 174e43f..23ecf7a 100644
--- a/hal/audio_extn/utils.c
+++ b/hal/audio_extn/utils.c
@@ -15,6 +15,10 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
+ *
+ * Changes from Qualcomm Innovation Center are provided under the following license:
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
*/
#define LOG_TAG "audio_hw_utils"
@@ -943,10 +947,6 @@
ALOGV("%s Selected apptype: %d", __func__, usecase->stream.out->app_type_cfg.app_type);
break;
case PCM_CAPTURE:
- if (usecase->id == USECASE_AUDIO_RECORD_VOIP
- || usecase->id == USECASE_AUDIO_RECORD_VOIP_LOW_LATENCY)
- usecase->stream.in->app_type_cfg.app_type = APP_TYPE_VOIP_AUDIO;
- else
audio_extn_utils_update_stream_input_app_type_cfg(adev->platform,
&adev->streams_input_cfg_list,
&usecase->stream.in->device_list,
@@ -1368,7 +1368,9 @@
(compare_device_type(&usecase->stream.out->device_list,AUDIO_DEVICE_OUT_SPEAKER))) {
if (!((compare_device_type(&usecase->device_list, AUDIO_DEVICE_OUT_BUS)) && ((usecase->stream.out->flags &
(audio_output_flags_t)AUDIO_OUTPUT_FLAG_SYS_NOTIFICATION) || (usecase->stream.out->flags &
- (audio_output_flags_t)AUDIO_OUTPUT_FLAG_PHONE)))) {
+ (audio_output_flags_t)AUDIO_OUTPUT_FLAG_PHONE) || (usecase->stream.out->flags &
+ (audio_output_flags_t)AUDIO_OUTPUT_FLAG_NAV_GUIDANCE) || (usecase->stream.out->flags &
+ (audio_output_flags_t)AUDIO_OUTPUT_FLAG_ALERTS)))) {
/* Reset to default if no native stream is active or default device is speaker*/
usecase->stream.out->app_type_cfg.sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
}
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index df3d21a..3823ed0 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -33,6 +33,11 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
+ *
+ * Changes from Qualcomm Innovation Center are provided under the following license:
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
+ *
*/
#define LOG_TAG "audio_hw_primary"
@@ -91,6 +96,8 @@
#include <log_utils.h>
#endif
+#define SKIP_INPUT_SOURCE_PRIORITY
+
#define COMPRESS_OFFLOAD_NUM_FRAGMENTS 4
/*DIRECT PCM has same buffer sizes as DEEP Buffer*/
#define DIRECT_PCM_NUM_FRAGMENTS 2
@@ -433,6 +440,7 @@
[USECASE_AUDIO_RECORD_COMPRESS5] = "audio-record-compress5",
[USECASE_AUDIO_RECORD_COMPRESS6] = "audio-record-compress6",
[USECASE_AUDIO_RECORD_LOW_LATENCY] = "low-latency-record",
+ [USECASE_AUDIO_RECORD_LOW_LATENCY2] = "low-latency-record2",
[USECASE_AUDIO_RECORD_FM_VIRTUAL] = "fm-virtual-record",
[USECASE_AUDIO_RECORD_MMAP] = "mmap-record",
[USECASE_AUDIO_RECORD_HIFI] = "hifi-record",
@@ -489,10 +497,14 @@
[USECASE_AUDIO_A2DP_ABR_FEEDBACK] = "a2dp-abr-feedback",
[USECASE_AUDIO_PLAYBACK_MEDIA] = "media-playback",
+ [USECASE_AUDIO_PLAYBACK_MEDIA_LL] = "media-playback-ll",
[USECASE_AUDIO_PLAYBACK_SYS_NOTIFICATION] = "sys-notification-playback",
[USECASE_AUDIO_PLAYBACK_NAV_GUIDANCE] = "nav-guidance-playback",
+ [USECASE_AUDIO_PLAYBACK_NAV_GUIDANCE_LL] = "nav-guidance-playback-ll",
[USECASE_AUDIO_PLAYBACK_PHONE] = "phone-playback",
+ [USECASE_AUDIO_PLAYBACK_PHONE_LL] = "phone-playback-ll",
[USECASE_AUDIO_PLAYBACK_ALERTS] = "alerts-playback",
+ [USECASE_AUDIO_PLAYBACK_ALERTS_LL] = "alerts-playback-ll",
[USECASE_AUDIO_PLAYBACK_FRONT_PASSENGER] = "front-passenger-playback",
[USECASE_AUDIO_PLAYBACK_REAR_SEAT] = "rear-seat-playback",
[USECASE_AUDIO_FM_TUNER_EXT] = "fm-tuner-ext",
@@ -598,6 +610,11 @@
USECASE_AUDIO_RECORD3,
};
+static const audio_usecase_t low_latency_record_usecases[] = {
+ USECASE_AUDIO_RECORD_LOW_LATENCY,
+ USECASE_AUDIO_RECORD_LOW_LATENCY2,
+};
+
static struct audio_device *adev = NULL;
static pthread_mutex_t adev_init_lock = PTHREAD_MUTEX_INITIALIZER;
static unsigned int audio_device_ref_count;
@@ -679,6 +696,53 @@
ALOGV("%s: free pcm record usecase %d", __func__, uc_id);
}
+static bool is_pcm_low_latency_record_usecase(audio_usecase_t uc_id)
+{
+ unsigned int record_uc_index;
+ unsigned int num_usecase = sizeof(low_latency_record_usecases)/sizeof(low_latency_record_usecases[0]);
+ ALOGD("%s: Check low latency pcm record usecase", __func__);
+
+ for (record_uc_index = 0; record_uc_index < num_usecase; record_uc_index++) {
+ if (uc_id == low_latency_record_usecases[record_uc_index])
+ return true;
+ }
+ return false;
+}
+
+static audio_usecase_t get_low_latency_record_usecase(struct audio_device *adev)
+{
+ audio_usecase_t ret_uc = USECASE_INVALID;
+ unsigned int record_uc_index;
+ unsigned int num_usecase = sizeof(low_latency_record_usecases)/sizeof(low_latency_record_usecases[0]);
+
+ ALOGD("%s: get_low_latency_record_usecase: %d", __func__, num_usecase);
+ for (record_uc_index = 0; record_uc_index < num_usecase; record_uc_index++) {
+ if (!(adev->pcm_low_latency_record_uc_state & (0x1 << record_uc_index))) {
+ adev->pcm_low_latency_record_uc_state |= 0x1 << record_uc_index;
+ ALOGD("%s: get_low_latency_record_usecase: %d", __func__, record_uc_index);
+ ret_uc = low_latency_record_usecases[record_uc_index];
+ break;
+ }
+ }
+
+ ALOGD("%s: low latency pcm record usecase is %d", __func__, ret_uc);
+ return ret_uc;
+}
+
+static void free_low_latency_record_usecase(struct audio_device *adev,
+ audio_usecase_t uc_id)
+{
+ unsigned int record_uc_index;
+ unsigned int num_usecase = sizeof(low_latency_record_usecases)/sizeof(low_latency_record_usecases[0]);
+
+ for (record_uc_index = 0; record_uc_index < num_usecase; record_uc_index++) {
+ if (low_latency_record_usecases[record_uc_index] == uc_id) {
+ adev->pcm_low_latency_record_uc_state &= ~(0x1 << record_uc_index);
+ break;
+ }
+ }
+ ALOGD("%s: free low latency pcm record usecase %d", __func__, uc_id);
+}
static bool may_use_noirq_mode(struct audio_device *adev, audio_usecase_t uc_id,
int flags __unused)
{
@@ -1909,7 +1973,7 @@
snd_device_t d1 = uc->out_snd_device;
snd_device_t d2 = new_snd_device;
- snd_device_t ret = 0;
+ int ret = 0;
list_init(&a1);
list_init(&a2);
@@ -1930,7 +1994,7 @@
compare_devices_for_any_match(&a1 ,&a2)) {
snd_device_t d3[2];
int num_devices = 0;
- int ret = platform_split_snd_device(platform,
+ ret = platform_split_snd_device(platform,
list_length(&a1) > 1 ? d1 : d2,
&num_devices,
d3);
@@ -1976,9 +2040,6 @@
}
}
- clear_devices(&a1);
- clear_devices(&a2);
-
end:
clear_devices(&a1);
clear_devices(&a2);
@@ -2908,6 +2969,12 @@
if (USECASE_AUDIO_RECORD_FM_VIRTUAL == usecase->id)
continue;
+#ifdef SKIP_INPUT_SOURCE_PRIORITY
+ // temporary fix to resolve issue when accessing Google Assistant while FM is active.
+ if (USECASE_AUDIO_RECORD_ECHO_REF_EXT == usecase->id) {
+ continue;
+ }
+#endif
priority = source_priority(in->source);
if (priority > last_priority) {
@@ -3111,8 +3178,11 @@
}
priority_in = voip_in;
} else {
- /* get the input with the highest priority source*/
+#ifdef SKIP_INPUT_SOURCE_PRIORITY
+ ALOGD("%s: Skipping get_priority_input for use-case-id:%d(%s).", __func__, uc_id, use_case_table[uc_id]);
+#else
priority_in = get_priority_input(adev);
+#endif
if (!priority_in ||
audio_extn_auto_hal_overwrite_priority_for_auto(usecase->stream.in))
@@ -3288,7 +3358,9 @@
#ifdef PLATFORM_AUTO
if (!(compare_device_type(&usecase->device_list, AUDIO_DEVICE_OUT_BUS) && ((usecase->stream.out->flags &
(audio_output_flags_t)AUDIO_OUTPUT_FLAG_SYS_NOTIFICATION) || (usecase->stream.out->flags &
- (audio_output_flags_t)AUDIO_OUTPUT_FLAG_PHONE)))) {
+ (audio_output_flags_t)AUDIO_OUTPUT_FLAG_PHONE) || (usecase->stream.out->flags &
+ (audio_output_flags_t)AUDIO_OUTPUT_FLAG_NAV_GUIDANCE) || (usecase->stream.out->flags &
+ (audio_output_flags_t)AUDIO_OUTPUT_FLAG_ALERTS)))) {
usecase->stream.out->app_type_cfg.sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
}
#else
@@ -3444,9 +3516,20 @@
__func__, in->usecase);
return -EINVAL;
}
+#ifdef SKIP_INPUT_SOURCE_PRIORITY
+ // Skip (1)fm-virtual-record and (2)echo-reference-external from get-priority-input logic.
+ // See comment in function select_devices() before call to get_priority_input()
+ if ((in->usecase == USECASE_AUDIO_RECORD_FM_VIRTUAL || in->usecase == USECASE_AUDIO_RECORD_ECHO_REF_EXT)){
+ ALOGD("%s: Skipping get_priority_input for use-case-id:%d/%s.", __func__, in->usecase, use_case_table[in->usecase]);
+ } else {
+ priority_in = get_priority_input(adev);
+ }
+#else
priority_in = get_priority_input(adev);
+#endif
+
if (audio_extn_ext_hw_plugin_usecase_stop(adev->ext_hw_plugin, uc_info))
ALOGE("%s: failed to stop ext hw plugin", __func__);
@@ -3648,7 +3731,7 @@
in->pcm = NULL;
goto error_open;
}
- if (in->flags == AUDIO_INPUT_FLAG_FAST)
+ if (in->flags & (AUDIO_INPUT_FLAG_FAST | AUDIO_INPUT_FLAG_RAW))
register_in_stream(in);
if (in->realtime) {
ATRACE_BEGIN("pcm_in_start");
@@ -4508,7 +4591,7 @@
}
if (ret == 0) {
- if (out->flags == AUDIO_OUTPUT_FLAG_FAST)
+ if (out->flags & (AUDIO_OUTPUT_FLAG_FAST | AUDIO_OUTPUT_FLAG_RAW))
register_out_stream(out);
if (out->realtime) {
if (out->pcm == NULL || !pcm_is_ready(out->pcm)) {
@@ -7640,7 +7723,9 @@
if ((ret == 0 && voice_get_mic_mute(adev) &&
!voice_is_in_call_rec_stream(in) &&
(in->usecase != USECASE_AUDIO_RECORD_AFE_PROXY &&
- in->usecase != USECASE_AUDIO_RECORD_AFE_PROXY2)) ||
+ in->usecase != USECASE_AUDIO_RECORD_AFE_PROXY2 &&
+ in->source != AUDIO_SOURCE_FM_TUNER &&
+ !is_single_device_type_equal(&in->device_list, AUDIO_DEVICE_IN_FM_TUNER))) ||
(adev->num_va_sessions &&
in->source != AUDIO_SOURCE_VOICE_RECOGNITION &&
property_get_bool("persist.vendor.audio.va_concurrency_mute_enabled",
@@ -8377,7 +8462,14 @@
out->config.period_size = HDMI_MULTI_PERIOD_BYTES / (out->config.channels *
audio_bytes_per_sample(config->format));
out->config.format = pcm_format_from_audio_format(out->format);
- } else if ((out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) ||
+ } else if (compare_device_type(&out->device_list, AUDIO_DEVICE_OUT_BUS)) {
+ ret = audio_extn_auto_hal_open_output_stream(out);
+ if (ret) {
+ ALOGE("%s: Failed to open output stream for bus device", __func__);
+ ret = -EINVAL;
+ goto error_open;
+ }
+ }else if ((out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) ||
(out->flags == AUDIO_OUTPUT_FLAG_DIRECT)) {
pthread_mutex_lock(&adev->lock);
bool offline = (adev->card_status == CARD_STATUS_OFFLINE);
@@ -8845,14 +8937,7 @@
adev->haptics_config.channels = 1;
} else
adev->haptics_config.channels = audio_channel_count_from_out_mask(out->channel_mask & AUDIO_CHANNEL_HAPTIC_ALL);
- } else if (compare_device_type(&out->device_list, AUDIO_DEVICE_OUT_BUS)) {
- ret = audio_extn_auto_hal_open_output_stream(out);
- if (ret) {
- ALOGE("%s: Failed to open output stream for bus device", __func__);
- ret = -EINVAL;
- goto error_open;
- }
- } else {
+ } else {
/* primary path is the default path selected if no other outputs are available/suitable */
out->usecase = GET_USECASE_AUDIO_PLAYBACK_PRIMARY(use_db_as_primary);
out->config = GET_PCM_CONFIG_AUDIO_PLAYBACK_PRIMARY(use_db_as_primary);
@@ -10006,6 +10091,37 @@
#endif
in->af_period_multiplier = af_period_multiplier;
}
+
+ /* assign concurrent capture usecase if record has to caried out from
+ * actual hardware input source */
+ if (audio_extn_is_concurrent_capture_enabled() &&
+ !audio_is_virtual_input_source(in->source)) {
+ /* Acquire lock to avoid two concurrent use cases initialized to
+ same pcm record use case */
+ if (in->usecase == USECASE_AUDIO_RECORD_LOW_LATENCY) {
+ pthread_mutex_lock(&adev->lock);
+ if (!(adev->pcm_low_latency_record_uc_state)) {
+ ALOGD("%s: using USECASE_AUDIO_RECORD_LOW_LATENCY",__func__);
+ adev->pcm_low_latency_record_uc_state = 1;
+ pthread_mutex_unlock(&adev->lock);
+ } else if (audio_extn_is_concurrent_low_latency_pcm_record_enabled()) {
+ in->usecase = get_low_latency_record_usecase(adev);
+ pthread_mutex_unlock(&adev->lock);
+ } else {
+ pthread_mutex_unlock(&adev->lock);
+ /* Assign compress record use case for second record */
+ in->usecase = USECASE_AUDIO_RECORD_COMPRESS2;
+ in->flags |= AUDIO_INPUT_FLAG_COMPRESS;
+ ALOGV("%s: overriding usecase with USECASE_AUDIO_RECORD_COMPRESS2 and appending compress flag", __func__);
+ if (audio_extn_cin_applicable_stream(in)) {
+ in->sample_rate = config->sample_rate;
+ ret = audio_extn_cin_configure_input_stream(in, config);
+ if (ret)
+ goto err_open;
+ }
+ }
+ }
+ }
}
/* Additional sample rates added below must also be present
@@ -10267,6 +10383,13 @@
adev->pcm_record_uc_state = 0;
pthread_mutex_unlock(&adev->lock);
}
+ if (audio_extn_is_concurrent_low_latency_pcm_record_enabled() && is_pcm_low_latency_record_usecase(in->usecase)) {
+ free_low_latency_record_usecase(adev, in->usecase);
+ } else if (in->usecase == USECASE_AUDIO_RECORD_LOW_LATENCY) {
+ pthread_mutex_lock(&adev->lock);
+ adev->pcm_low_latency_record_uc_state = 0;
+ pthread_mutex_unlock(&adev->lock);
+ }
free(in);
*stream_in = NULL;
return ret;
@@ -10336,6 +10459,12 @@
adev->pcm_record_uc_state = 0;
}
+ if (audio_extn_is_concurrent_low_latency_pcm_record_enabled() && is_pcm_low_latency_record_usecase(in->usecase)) {
+ free_low_latency_record_usecase(adev, in->usecase);
+ } else if (in->usecase == USECASE_AUDIO_RECORD_LOW_LATENCY) {
+ adev->pcm_low_latency_record_uc_state = 0;
+ }
+
if (in->source == AUDIO_SOURCE_VOICE_COMMUNICATION) {
adev->enable_voicerx = false;
}
@@ -10975,19 +11104,6 @@
pthread_mutex_lock(&out->latch_lock);
// mute stream and switch to speaker if suspended
if (!out->a2dp_muted && !out->standby) {
- assign_devices(&devices, &out->device_list);
- reassign_device_list(&out->device_list, AUDIO_DEVICE_OUT_SPEAKER, "");
- list_for_each(node, &adev->usecase_list) {
- usecase = node_to_item(node, struct audio_usecase, list);
- if ((usecase->type != PCM_CAPTURE) && (usecase != uc_info) &&
- !is_a2dp_out_device_type(&usecase->stream.out->device_list) &&
- !is_sco_out_device_type(&usecase->stream.out->device_list) &&
- platform_check_backends_match(SND_DEVICE_OUT_SPEAKER,
- usecase->out_snd_device)) {
- assign_devices(&out->device_list, &usecase->stream.out->device_list);
- break;
- }
- }
if ((is_a2dp_out_device_type(&devices) && list_length(&devices) == 1) ||
(uc_info->out_snd_device == SND_DEVICE_OUT_BT_A2DP)) {
out->a2dp_muted = true;
@@ -11008,6 +11124,19 @@
usleep(latency * 1000);
}
}
+ assign_devices(&devices, &out->device_list);
+ reassign_device_list(&out->device_list, AUDIO_DEVICE_OUT_SPEAKER, "");
+ list_for_each(node, &adev->usecase_list) {
+ usecase = node_to_item(node, struct audio_usecase, list);
+ if ((usecase->type != PCM_CAPTURE) && (usecase != uc_info) &&
+ !is_a2dp_out_device_type(&usecase->stream.out->device_list) &&
+ !is_sco_out_device_type(&usecase->stream.out->device_list) &&
+ platform_check_backends_match(SND_DEVICE_OUT_SPEAKER,
+ usecase->out_snd_device)) {
+ assign_devices(&out->device_list, &usecase->stream.out->device_list);
+ break;
+ }
+ }
select_devices(adev, out->usecase);
ALOGD("%s: switched to device:%s and stream muted:%d", __func__,
platform_get_snd_device_name(uc_info->out_snd_device), out->a2dp_muted);
@@ -11137,6 +11266,7 @@
adev->cur_wfd_channels = 2;
adev->offload_usecases_state = 0;
adev->pcm_record_uc_state = 0;
+ adev->pcm_low_latency_record_uc_state = 0;
adev->is_channel_status_set = false;
adev->perf_lock_opts[0] = 0x101;
adev->perf_lock_opts[1] = 0x20E;
diff --git a/hal/audio_hw.h b/hal/audio_hw.h
index 058d7a2..0398df4 100644
--- a/hal/audio_hw.h
+++ b/hal/audio_hw.h
@@ -36,7 +36,7 @@
* Changes from Qualcomm Innovation Center are provided under the following license:
- * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted (subject to the limitations in the
@@ -243,6 +243,7 @@
USECASE_AUDIO_RECORD_COMPRESS5,
USECASE_AUDIO_RECORD_COMPRESS6,
USECASE_AUDIO_RECORD_LOW_LATENCY,
+ USECASE_AUDIO_RECORD_LOW_LATENCY2,
USECASE_AUDIO_RECORD_FM_VIRTUAL,
USECASE_AUDIO_RECORD_HIFI,
@@ -299,10 +300,14 @@
/* car streams usecases */
USECASE_AUDIO_PLAYBACK_MEDIA,
+ USECASE_AUDIO_PLAYBACK_MEDIA_LL,
USECASE_AUDIO_PLAYBACK_SYS_NOTIFICATION,
USECASE_AUDIO_PLAYBACK_NAV_GUIDANCE,
+ USECASE_AUDIO_PLAYBACK_NAV_GUIDANCE_LL,
USECASE_AUDIO_PLAYBACK_PHONE,
+ USECASE_AUDIO_PLAYBACK_PHONE_LL,
USECASE_AUDIO_PLAYBACK_ALERTS,
+ USECASE_AUDIO_PLAYBACK_ALERTS_LL,
USECASE_AUDIO_PLAYBACK_FRONT_PASSENGER,
USECASE_AUDIO_PLAYBACK_REAR_SEAT,
USECASE_AUDIO_RECORD_BUS,
@@ -766,6 +771,7 @@
void *extspk;
unsigned int offload_usecases_state;
unsigned int pcm_record_uc_state;
+ unsigned int pcm_low_latency_record_uc_state;
void *visualizer_lib;
int (*visualizer_start_output)(audio_io_handle_t, int);
int (*visualizer_stop_output)(audio_io_handle_t, int);
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index ce2eedd..541b00e 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -15,6 +15,10 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
+ *
+ * Changes from Qualcomm Innovation Center are provided under the following license:
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
*/
#define LOG_TAG "msm8974_platform"
@@ -488,6 +492,8 @@
[USECASE_AUDIO_RECORD_COMPRESS6] = {-1, -1, -1, -1},
[USECASE_AUDIO_RECORD_LOW_LATENCY] = {LOWLATENCY_PCM_DEVICE, LOWLATENCY_PCM_DEVICE,
MSM_FRONTEND_DAI_VOICEMMODE2, MSM_FRONTEND_DAI_VOICEMMODE2},
+ [USECASE_AUDIO_RECORD_LOW_LATENCY2] = {LOWLATENCY_PCM_DEVICE, LOWLATENCY_PCM_DEVICE,
+ MSM_FRONTEND_DAI_MULTIMEDIA35, MSM_FRONTEND_DAI_MULTIMEDIA35},
[USECASE_AUDIO_RECORD_FM_VIRTUAL] = {MULTIMEDIA2_PCM_DEVICE, MULTIMEDIA2_PCM_DEVICE,
MSM_FRONTEND_DAI_MULTIMEDIA2, MSM_FRONTEND_DAI_MULTIMEDIA2},
[USECASE_AUDIO_RECORD_HIFI] = {MULTIMEDIA2_PCM_DEVICE, MULTIMEDIA2_PCM_DEVICE,
@@ -573,14 +579,22 @@
[USECASE_AUDIO_EC_REF_LOOPBACK] = {-1, -1}, /* pcm id updated from platform info file */
[USECASE_AUDIO_PLAYBACK_MEDIA] = {MEDIA_PCM_DEVICE, MEDIA_PCM_DEVICE,
MSM_FRONTEND_DAI_MULTIMEDIA1, MSM_FRONTEND_DAI_MULTIMEDIA1},
+ [USECASE_AUDIO_PLAYBACK_MEDIA_LL] = {MEDIA_PCM_DEVICE, MEDIA_PCM_DEVICE,
+ MSM_FRONTEND_DAI_MULTIMEDIA10, MSM_FRONTEND_DAI_MULTIMEDIA10},
[USECASE_AUDIO_PLAYBACK_SYS_NOTIFICATION] = {SYS_NOTIFICATION_PCM_DEVICE, SYS_NOTIFICATION_PCM_DEVICE,
MSM_FRONTEND_DAI_MULTIMEDIA5, MSM_FRONTEND_DAI_MULTIMEDIA5},
[USECASE_AUDIO_PLAYBACK_NAV_GUIDANCE] = {NAV_GUIDANCE_PCM_DEVICE, NAV_GUIDANCE_PCM_DEVICE,
MSM_FRONTEND_DAI_MULTIMEDIA2, MSM_FRONTEND_DAI_MULTIMEDIA2},
+ [USECASE_AUDIO_PLAYBACK_NAV_GUIDANCE_LL] = {NAV_GUIDANCE_PCM_DEVICE, NAV_GUIDANCE_PCM_DEVICE,
+ MSM_FRONTEND_DAI_MULTIMEDIA36, MSM_FRONTEND_DAI_MULTIMEDIA36},
[USECASE_AUDIO_PLAYBACK_PHONE] = {PHONE_PCM_DEVICE, PHONE_PCM_DEVICE,
MSM_FRONTEND_DAI_MULTIMEDIA10, MSM_FRONTEND_DAI_MULTIMEDIA10},
+ [USECASE_AUDIO_PLAYBACK_PHONE_LL] = {PHONE_PCM_DEVICE, PHONE_PCM_DEVICE,
+ MSM_FRONTEND_DAI_MULTIMEDIA10, MSM_FRONTEND_DAI_MULTIMEDIA10},
[USECASE_AUDIO_PLAYBACK_ALERTS] = {ALERTS_PCM_DEVICE, ALERTS_PCM_DEVICE,
MSM_FRONTEND_DAI_MULTIMEDIA31, MSM_FRONTEND_DAI_MULTIMEDIA31},
+ [USECASE_AUDIO_PLAYBACK_ALERTS_LL] = {ALERTS_PCM_DEVICE, ALERTS_PCM_DEVICE,
+ MSM_FRONTEND_DAI_MULTIMEDIA36, MSM_FRONTEND_DAI_MULTIMEDIA36},
[USECASE_AUDIO_PLAYBACK_FRONT_PASSENGER] = {FRONT_PASSENGER_PCM_DEVICE, FRONT_PASSENGER_PCM_DEVICE,
MSM_FRONTEND_DAI_MULTIMEDIA23, MSM_FRONTEND_DAI_MULTIMEDIA23},
[USECASE_AUDIO_PLAYBACK_REAR_SEAT] = {REAR_SEAT_PCM_DEVICE, REAR_SEAT_PCM_DEVICE,
@@ -1487,6 +1501,7 @@
{TO_NAME_INDEX(USECASE_AUDIO_RECORD_COMPRESS5)},
{TO_NAME_INDEX(USECASE_AUDIO_RECORD_COMPRESS6)},
{TO_NAME_INDEX(USECASE_AUDIO_RECORD_LOW_LATENCY)},
+ {TO_NAME_INDEX(USECASE_AUDIO_RECORD_LOW_LATENCY2)},
{TO_NAME_INDEX(USECASE_AUDIO_RECORD_MMAP)},
{TO_NAME_INDEX(USECASE_AUDIO_RECORD_HIFI)},
{TO_NAME_INDEX(USECASE_VOICE_CALL)},
@@ -1521,10 +1536,14 @@
{TO_NAME_INDEX(USECASE_AUDIO_TRANSCODE_LOOPBACK_RX)},
{TO_NAME_INDEX(USECASE_AUDIO_TRANSCODE_LOOPBACK_TX)},
{TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_MEDIA)},
+ {TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_MEDIA_LL)},
{TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_SYS_NOTIFICATION)},
{TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_NAV_GUIDANCE)},
+ {TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_NAV_GUIDANCE_LL)},
{TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_PHONE)},
+ {TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_PHONE_LL)},
{TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_ALERTS)},
+ {TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_ALERTS_LL)},
{TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_FRONT_PASSENGER)},
{TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_REAR_SEAT)},
{TO_NAME_INDEX(USECASE_AUDIO_RECORD_VOIP_LOW_LATENCY)},
@@ -9329,10 +9348,14 @@
break;
case USECASE_AUDIO_PLAYBACK_LOW_LATENCY:
case USECASE_AUDIO_PLAYBACK_WITH_HAPTICS:
+ case USECASE_AUDIO_PLAYBACK_MEDIA_LL:
case USECASE_AUDIO_PLAYBACK_SYS_NOTIFICATION:
case USECASE_AUDIO_PLAYBACK_FRONT_PASSENGER:
+ case USECASE_AUDIO_PLAYBACK_NAV_GUIDANCE_LL:
case USECASE_AUDIO_PLAYBACK_PHONE:
+ case USECASE_AUDIO_PLAYBACK_PHONE_LL:
case USECASE_AUDIO_PLAYBACK_ALERTS:
+ case USECASE_AUDIO_PLAYBACK_ALERTS_LL:
delay = LOW_LATENCY_PLATFORM_DELAY;
break;
case USECASE_AUDIO_PLAYBACK_OFFLOAD:
@@ -12169,6 +12192,7 @@
(!strcmp(snd_card_name, "msm8953-sku4-snd-card")) ||
(!strcmp(snd_card_name, "sdm439-sku1-snd-card")) ||
(!strcmp(snd_card_name, "sdm439-snd-card-mtp")) ||
+ (!strcmp(snd_card_name, "lahaina-yupikiot-snd-card")) ||
(!strcmp(snd_card_name, "bengal-qrd-snd-card")) ||
(!strcmp(snd_card_name, "bengal-scubaqrd-snd-card")))
return 1;
diff --git a/hal/msm8974/platform.h b/hal/msm8974/platform.h
index 2b4191f..7f1e075 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -15,6 +15,10 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
+ *
+ * Changes from Qualcomm Innovation Center are provided under the following license:
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
*/
#ifndef QCOM_AUDIO_PLATFORM_H
@@ -899,6 +903,8 @@
MSM_FRONTEND_DAI_MULTIMEDIA32,
MSM_FRONTEND_DAI_MULTIMEDIA33,
MSM_FRONTEND_DAI_MULTIMEDIA34,
+ MSM_FRONTEND_DAI_MULTIMEDIA35,
+ MSM_FRONTEND_DAI_MULTIMEDIA36,
MSM_FRONTEND_DAI_VOIP,
MSM_FRONTEND_DAI_AFE_RX,
MSM_FRONTEND_DAI_AFE_TX,
diff --git a/post_proc/bundle.c b/post_proc/bundle.c
index 0dbf27b..a9f95b9 100644
--- a/post_proc/bundle.c
+++ b/post_proc/bundle.c
@@ -2,6 +2,8 @@
* Copyright (c) 2013-2017, 2019, The Linux Foundation. All rights reserved.
* Not a Contribution.
*
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
* Copyright (C) 2013 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -847,7 +849,8 @@
pReplyData == NULL ||
*replySize < (int)(sizeof(effect_param_t) + sizeof(uint32_t) + sizeof(uint16_t)) ||
// constrain memcpy below
- ((effect_param_t *)pCmdData)->psize > *replySize - sizeof(effect_param_t)) {
+ ((effect_param_t *)pCmdData)->psize > *replySize - sizeof(effect_param_t) ||
+ ((effect_param_t *)pCmdData)->psize > cmdSize - sizeof(effect_param_t)) {
status = -EINVAL;
ALOGW("EFFECT_CMD_GET_PARAM invalid command cmdSize %d *replySize %d",
cmdSize, *replySize);
diff --git a/post_proc/volume_listener.c b/post_proc/volume_listener.c
index 65575bc..cb8b02b 100644
--- a/post_proc/volume_listener.c
+++ b/post_proc/volume_listener.c
@@ -1,5 +1,7 @@
/*
* Copyright (c) 2015-2017, 2019 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -559,7 +561,7 @@
bool recompute_gain_dep_cal_Level = false;
ALOGV("cmd called EFFECT_CMD_SET_DEVICE ");
- if (p_cmd_data == NULL) {
+ if (p_cmd_data == NULL || cmd_size < sizeof(uint32_t)) {
ALOGE("%s: EFFECT_CMD_SET_DEVICE: cmd data NULL", __func__);
status = -EINVAL;
goto exit;
diff --git a/visualizer/offload_visualizer.c b/visualizer/offload_visualizer.c
index 65b5938..e2b6f59 100644
--- a/visualizer/offload_visualizer.c
+++ b/visualizer/offload_visualizer.c
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2013 The Android Open Source Project
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -1321,7 +1322,10 @@
if (pCmdData == NULL ||
cmdSize != (int)(sizeof(effect_param_t) + sizeof(uint32_t)) ||
pReplyData == NULL ||
- *replySize < (int)(sizeof(effect_param_t) + sizeof(uint32_t) + sizeof(uint32_t))) {
+ *replySize < (int)(sizeof(effect_param_t) + sizeof(uint32_t) + sizeof(uint32_t)) ||
+ // constrain memcpy below
+ ((effect_param_t *)pCmdData)->psize > *replySize - sizeof(effect_param_t) ||
+ ((effect_param_t *)pCmdData)->psize > cmdSize - sizeof(effect_param_t)) {
status = -EINVAL;
goto exit;
}
diff --git a/voice_processing/voice_processing.c b/voice_processing/voice_processing.c
index 50cb7af..2847c90 100644
--- a/voice_processing/voice_processing.c
+++ b/voice_processing/voice_processing.c
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2013 The Android Open Source Project
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -582,7 +583,8 @@
pReplyData == NULL ||
*replySize < (int)sizeof(effect_param_t) ||
// constrain memcpy below
- ((effect_param_t *)pCmdData)->psize > *replySize - sizeof(effect_param_t)) {
+ ((effect_param_t *)pCmdData)->psize > *replySize - sizeof(effect_param_t) ||
+ ((effect_param_t *)pCmdData)->psize > cmdSize - sizeof(effect_param_t)) {
ALOGV("fx_command() EFFECT_CMD_GET_PARAM invalid args");
return -EINVAL;
}