diff options
| author | Mikhail Naganov <mnaganov@google.com> | 2021-11-03 20:15:36 +0000 |
|---|---|---|
| committer | Mikhail Naganov <mnaganov@google.com> | 2021-11-12 02:29:25 +0000 |
| commit | 79ab13a1a67f1abfdabf8405f241dfd62f29ab37 (patch) | |
| tree | b89dbd22398cb855624a457685111006edb96db9 | |
| parent | 4b18fff621677efc0a8c8c0bdfc48bfca934a650 (diff) | |
audio: Fix handling of dynamic profiles in VtsHalAudioV7_0TargetTest
The profiles generator wasn't loading correctly from the Audio
Policy Manager config file profiles with unpopulated attributes,
which is typical for dynamic profiles.
Bug: 204314749
Test: atest HalAudioV7_0GeneratorTest
Change-Id: I514a4e03da165cacb5dbaaa16470130895681484
Merged-In: I514a4e03da165cacb5dbaaa16470130895681484
5 files changed, 278 insertions, 1 deletions
diff --git a/audio/core/all-versions/vts/functional/7.0/Generators.cpp b/audio/core/all-versions/vts/functional/7.0/Generators.cpp index d2ba3397a..8c92cbd16 100644 --- a/audio/core/all-versions/vts/functional/7.0/Generators.cpp +++ b/audio/core/all-versions/vts/functional/7.0/Generators.cpp @@ -102,6 +102,9 @@ std::vector<DeviceConfigParameter> generateOutputDeviceConfigParameters(bool one if (mixPort.getRole() != xsd::Role::source) continue; // not an output profile auto [flags, isOffload] = generateOutFlags(mixPort); for (const auto& profile : mixPort.getProfile()) { + if (!profile.hasFormat() || !profile.hasSamplingRates() || + !profile.hasChannelMasks()) + continue; auto configs = combineAudioConfig(profile.getChannelMasks(), profile.getSamplingRates(), profile.getFormat()); for (auto& config : configs) { @@ -231,6 +234,9 @@ std::vector<DeviceConfigParameter> generateInputDeviceConfigParameters(bool oneP std::back_inserter(flags), [](auto flag) { return toString(flag); }); } for (const auto& profile : mixPort.getProfile()) { + if (!profile.hasFormat() || !profile.hasSamplingRates() || + !profile.hasChannelMasks()) + continue; auto configs = combineAudioConfig(profile.getChannelMasks(), profile.getSamplingRates(), profile.getFormat()); for (const auto& config : configs) { diff --git a/audio/core/all-versions/vts/functional/Android.bp b/audio/core/all-versions/vts/functional/Android.bp index e446a7f2c..c576060b2 100644 --- a/audio/core/all-versions/vts/functional/Android.bp +++ b/audio/core/all-versions/vts/functional/Android.bp @@ -239,6 +239,7 @@ cc_test { data: [ "tests/apm_config_no_vx_7_0.xml", "tests/apm_config_with_vx_7_0.xml", + "tests/apm_config_b_204314749_7_0.xml", ], test_config: "tests/HalAudioV7_0GeneratorTest.xml", } diff --git a/audio/core/all-versions/vts/functional/tests/HalAudioV7_0GeneratorTest.xml b/audio/core/all-versions/vts/functional/tests/HalAudioV7_0GeneratorTest.xml index 2e794554c..3dc5b33e4 100644 --- a/audio/core/all-versions/vts/functional/tests/HalAudioV7_0GeneratorTest.xml +++ b/audio/core/all-versions/vts/functional/tests/HalAudioV7_0GeneratorTest.xml @@ -24,6 +24,7 @@ <option name="cleanup" value="true" /> <option name="push" value="apm_config_no_vx_7_0.xml->/data/local/tmp/apm_config_no_vx.xml" /> <option name="push" value="apm_config_with_vx_7_0.xml->/data/local/tmp/apm_config_with_vx.xml" /> + <option name="push" value="apm_config_b_204314749_7_0.xml->/data/local/tmp/apm_config_b_204314749_7_0.xml" /> <option name="push" value="HalAudioV7_0GeneratorTest->/data/local/tmp/HalAudioV7_0GeneratorTest" /> </target_preparer> diff --git a/audio/core/all-versions/vts/functional/tests/apm_config_b_204314749_7_0.xml b/audio/core/all-versions/vts/functional/tests/apm_config_b_204314749_7_0.xml new file mode 100644 index 000000000..5bdca9aae --- /dev/null +++ b/audio/core/all-versions/vts/functional/tests/apm_config_b_204314749_7_0.xml @@ -0,0 +1,263 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<!-- Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + 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. +--> + +<audioPolicyConfiguration version="7.0" xmlns:xi="http://www.w3.org/2001/XInclude"> + <!-- version section contains a “version” tag in the form “major.minor” e.g. version=”1.0” --> + + <!-- Global configuration Decalaration --> + <globalConfiguration speaker_drc_enabled="false"/> + + + <!-- Modules section: + There is one section per audio HW module present on the platform. + Each module section will contains two mandatory tags for audio HAL “halVersion” and “name”. + The module names are the same as in current .conf file: + “primary”, “A2DP”, “remote_submix”, “USB” + Each module will contain the following sections: + “devicePorts”: a list of device descriptors for all input and output devices accessible via this + module. + This contains both permanently attached devices and removable devices. + “mixPorts”: listing all output and input streams exposed by the audio HAL + “routes”: list of possible connections between input and output devices or between stream and + devices. + "route": is defined by an attribute: + -"type": <mux|mix> means all sources are mutual exclusive (mux) or can be mixed (mix) + -"sink": the sink involved in this route + -"sources": all the sources than can be connected to the sink via vis route + “attachedDevices”: permanently attached devices. + The attachedDevices section is a list of devices names. The names correspond to device names + defined in <devicePorts> section. + “defaultOutputDevice”: device to be used by default when no policy rule applies + --> + <modules> + <!-- Primary Audio HAL --> + <module name="primary" halVersion="3.0"> + <attachedDevices> + <item>Speaker</item> + <item>Built-In Mic</item> + <item>Built-In Back Mic</item> + <item>Echo Reference</item> + <item>Tuner</item> + </attachedDevices> + <defaultOutputDevice>Speaker</defaultOutputDevice> + <mixPorts> + <mixPort name="primary output" 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="tunnel pcm" role="source" flags="AUDIO_OUTPUT_FLAG_DIRECT AUDIO_OUTPUT_FLAG_HW_AV_SYNC"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="32000 44100 48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> + </mixPort> + <mixPort name="direct pcm" role="source" flags="AUDIO_OUTPUT_FLAG_DIRECT"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="32000 44100 48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> + </mixPort> + <mixPort name="direct output" role="source" flags="AUDIO_OUTPUT_FLAG_DIRECT"> + <profile name=""/> + </mixPort> + <mixPort name="tunnel direct output" role="source" flags="AUDIO_OUTPUT_FLAG_DIRECT AUDIO_OUTPUT_FLAG_HW_AV_SYNC"> + <profile name=""/> + </mixPort> + <mixPort name="mmap_no_irq_out" role="source" flags="AUDIO_OUTPUT_FLAG_DIRECT AUDIO_OUTPUT_FLAG_MMAP_NOIRQ"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="48000" + channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> + </mixPort> + <mixPort name="primary input" role="sink"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000" + channelMasks="AUDIO_CHANNEL_IN_MONO AUDIO_CHANNEL_IN_STEREO"/> + </mixPort> + <mixPort name="tunnel a2dp" role="source" flags="AUDIO_OUTPUT_FLAG_DIRECT AUDIO_OUTPUT_FLAG_HW_AV_SYNC"> + <profile name=""/> + </mixPort> + <mixPort name="direct a2dp" role="source" flags="AUDIO_OUTPUT_FLAG_DIRECT"> + <profile name=""/> + </mixPort> + <mixPort name="echo reference" role="sink"> + <profile name="echo_reference" format="AUDIO_FORMAT_PCM_32_BIT" + samplingRates="48000" + channelMasks="AUDIO_CHANNEL_IN_MONO AUDIO_CHANNEL_IN_STEREO"/> + </mixPort> + <mixPort name="built-in mic" role="sink"> + <profile name="" format="AUDIO_FORMAT_PCM_32_BIT" + samplingRates="16000" + channelMasks="AUDIO_CHANNEL_IN_MONO AUDIO_CHANNEL_IN_STEREO"/> + </mixPort> + <mixPort name="ble_in" role="sink"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="16000" channelMasks="AUDIO_CHANNEL_IN_MONO"/> + </mixPort> + </mixPorts> + <devicePorts> + <!-- Output devices declaration, i.e. Sink DEVICE PORT --> + <devicePort tagName="Speaker" role="sink" type="AUDIO_DEVICE_OUT_SPEAKER"> + <gains> + <gain name="gain_1" mode="AUDIO_GAIN_MODE_JOINT" + minValueMB="-10000" + maxValueMB="0" + defaultValueMB="-6000" + stepValueMB="100"/> + </gains> + </devicePort> + <devicePort tagName="HDMI Out" type="AUDIO_DEVICE_OUT_AUX_DIGITAL" role="sink"> + </devicePort> + <devicePort tagName="Tuner" role="source" type="AUDIO_DEVICE_IN_TV_TUNER"> + <gains> + <gain name="gain_1" mode="AUDIO_GAIN_MODE_JOINT" + minValueMB="-10000" + maxValueMB="0" + defaultValueMB="-6000" + stepValueMB="100"/> + </gains> + </devicePort> + <devicePort tagName="Wired Headset" type="AUDIO_DEVICE_OUT_WIRED_HEADSET" role="sink"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> + </devicePort> + <devicePort tagName="Wired Headphones" type="AUDIO_DEVICE_OUT_WIRED_HEADPHONE" role="sink"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> + </devicePort> + <devicePort tagName="BT SCO" type="AUDIO_DEVICE_OUT_BLUETOOTH_SCO" role="sink"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="8000 16000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/> + </devicePort> + <devicePort tagName="BT SCO Headset" type="AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET" role="sink"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="8000 16000" channelMasks="AUDIO_CHANNEL_OUT_MONO"/> + </devicePort> + <devicePort tagName="BT A2DP Out" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP" role="sink"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="44100" + channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> + </devicePort> + <devicePort tagName="BT A2DP Headphones" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES" role="sink"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="44100" + channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> + </devicePort> + <devicePort tagName="BT A2DP Speaker" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER" role="sink"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="44100" + channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> + </devicePort> + + <devicePort tagName="Built-In Mic" type="AUDIO_DEVICE_IN_BUILTIN_MIC" role="source" address="top"> + <profile name="" format="AUDIO_FORMAT_PCM_32_BIT" + samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000" + channelMasks="AUDIO_CHANNEL_IN_MONO AUDIO_CHANNEL_IN_STEREO AUDIO_CHANNEL_IN_FRONT_BACK"/> + </devicePort> + <devicePort tagName="Built-In Back Mic" type="AUDIO_DEVICE_IN_BACK_MIC" role="source"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000" + channelMasks="AUDIO_CHANNEL_IN_MONO AUDIO_CHANNEL_IN_STEREO AUDIO_CHANNEL_IN_FRONT_BACK"/> + </devicePort> + <devicePort tagName="Wired Headset Mic" type="AUDIO_DEVICE_IN_WIRED_HEADSET" role="source"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="8000 11025 12000 16000 22050 24000 32000 44100 48000" + channelMasks="AUDIO_CHANNEL_IN_MONO AUDIO_CHANNEL_IN_STEREO AUDIO_CHANNEL_IN_FRONT_BACK"/> + </devicePort> + <devicePort tagName="BT SCO Headset Mic" type="AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET" role="source"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="8000 16000" channelMasks="AUDIO_CHANNEL_IN_MONO"/> + </devicePort> + <devicePort tagName="Echo Reference" type="AUDIO_DEVICE_IN_ECHO_REFERENCE" role="source"> + <profile name="echo_reference" format="AUDIO_FORMAT_PCM_32_BIT" + samplingRates="48000" + channelMasks="AUDIO_CHANNEL_IN_STEREO"/> + </devicePort> + <devicePort tagName="BLE-In" type="AUDIO_DEVICE_IN_BLUETOOTH_BLE" role="source"> + <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" + samplingRates="16000" channelMasks="AUDIO_CHANNEL_IN_MONO"/> + </devicePort> + </devicePorts> + <!-- route declaration, i.e. list all available sources for a given sink --> + <routes> + <route type="mix" sink="HDMI Out" + sources="primary output,tunnel pcm,direct output,Tuner,mmap_no_irq_out,tunnel direct output"/> + <route type="mix" sink="Speaker" + sources="primary output,tunnel pcm,direct pcm,BT SCO Headset Mic,Tuner,mmap_no_irq_out"/> + <route type="mix" sink="BT SCO" + sources="primary output,BT SCO Headset Mic,Tuner,mmap_no_irq_out"/> + <route type="mix" sink="BT SCO Headset" + sources="primary output,BT SCO Headset Mic,Tuner,mmap_no_irq_out"/> + <route type="mix" sink="Wired Headset" + sources="primary output,tunnel pcm,BT SCO Headset Mic,Tuner,mmap_no_irq_out"/> + <route type="mix" sink="Wired Headphones" + sources="primary output,tunnel pcm,BT SCO Headset Mic,Tuner,mmap_no_irq_out"/> + <route type="mix" sink="primary input" + sources="Built-In Back Mic,Wired Headset Mic,BT SCO Headset Mic,Tuner"/> + <route type="mix" sink="BT A2DP Out" + sources="primary output,tunnel a2dp,direct a2dp,Tuner,mmap_no_irq_out"/> + <route type="mix" sink="BT A2DP Headphones" + sources="primary output,tunnel a2dp,direct a2dp,Tuner,mmap_no_irq_out"/> + <route type="mix" sink="BT A2DP Speaker" + sources="primary output,tunnel a2dp,direct a2dp,Tuner,mmap_no_irq_out"/> + <route type="mix" sink="echo reference" + sources="Echo Reference"/> + <route type="mix" sink="built-in mic" + sources="Built-In Mic"/> + <route type="mix" sink="ble_in" + sources="BLE-In"/> + </routes> + + </module> + + <!-- A2dp Audio HAL --> + <!-- <xi:include href="a2dp_audio_policy_configuration.xml"/> --> + + <!-- Usb Audio HAL --> + <!-- <xi:include href="usb_audio_policy_configuration.xml"/> --> + + <!-- Remote Submix Audio HAL --> + <!-- <xi:include href="r_submix_audio_policy_configuration.xml"/> --> + + <!-- Hearing aid Audio HAL --> + <!-- <xi:include href="hearing_aid_audio_policy_configuration.xml"/> --> + + <!-- MSD Audio HAL (optional) --> + <!-- <xi:include href="msd_audio_policy_configuration.xml"/> --> + + </modules> + <!-- End of Modules section --> + + <!-- Volume section --> + + <!-- <xi:include href="audio_policy_volumes.xml"/> --> + <!-- <xi:include href="default_volume_tables.xml"/> --> + + <!-- End of Volume section --> + + <!-- Surround Sound configuration --> + + <surroundSound> + <!-- Each of the listed formats gets an entry in Surround Settings dialog on TV devices. + There must be a corresponding Java ENCODING_... constant defined in AudioFormat.java, + and a display name defined in AudioFormat.toDisplayName. For the formats that don't + need a dedicated Surrond Settings dialog entry, a subformats list has to be used. --> + <formats> + <format name="AUDIO_FORMAT_AC3" /> + <format name="AUDIO_FORMAT_E_AC3" /> + <format name="AUDIO_FORMAT_E_AC3_JOC" /> + <format name="AUDIO_FORMAT_DTS" /> + </formats> + </surroundSound> + + <!-- End of Surround Sound configuration --> + +</audioPolicyConfiguration> diff --git a/audio/core/all-versions/vts/functional/tests/generators_tests.cpp b/audio/core/all-versions/vts/functional/tests/generators_tests.cpp index 583ff01fc..7caa7128e 100644 --- a/audio/core/all-versions/vts/functional/tests/generators_tests.cpp +++ b/audio/core/all-versions/vts/functional/tests/generators_tests.cpp @@ -128,5 +128,11 @@ TEST_P(GeneratorsTest, ValidateConfigs) { } // Target file names are the same for all versions, see 'HalAudioVx_0GeneratorTest.xml' test configs +// clang-format off INSTANTIATE_TEST_SUITE_P(Generators, GeneratorsTest, - ::testing::Values("apm_config_no_vx.xml", "apm_config_with_vx.xml")); + ::testing::Values("apm_config_no_vx.xml", "apm_config_with_vx.xml" +#if MAJOR_VERSION == 7 + , "apm_config_b_204314749_7_0.xml" +#endif + )); +// clang-format on |
