Loading services/audiopolicy/common/managerdefinitions/src/IOProfile.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -78,7 +78,8 @@ bool IOProfile::isCompatibleProfile(const DeviceVector &devices, } } const uint32_t mustMatchOutputFlags = AUDIO_OUTPUT_FLAG_HW_AV_SYNC; const uint32_t mustMatchOutputFlags = AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_HW_AV_SYNC|AUDIO_OUTPUT_FLAG_MMAP_NOIRQ; if (isPlaybackThread && (((getFlags() ^ flags) & mustMatchOutputFlags) || (getFlags() & flags) != flags)) { return false; Loading services/audiopolicy/tests/audiopolicymanager_tests.cpp +13 −3 Original line number Diff line number Diff line Loading @@ -1164,7 +1164,7 @@ void AudioPolicyManagerTVTest::testHDMIPortSelection( audio_port_handle_t selectedDeviceId = AUDIO_PORT_HANDLE_NONE; audio_io_handle_t output; audio_port_handle_t portId; getOutputForAttr(&selectedDeviceId, AUDIO_FORMAT_AC3, AUDIO_CHANNEL_OUT_STEREO, 48000, getOutputForAttr(&selectedDeviceId, AUDIO_FORMAT_PCM_16_BIT, AUDIO_CHANNEL_OUT_STEREO, 48000, flags, &output, &portId); sp<SwAudioOutputDescriptor> outDesc = mManager->getOutputs().valueFor(output); ASSERT_NE(nullptr, outDesc.get()); Loading @@ -1187,13 +1187,23 @@ TEST_F(AudioPolicyManagerTVTest, Dump) { dumpToLog(); } TEST_F(AudioPolicyManagerTVTest, MatchOutputNoHwAvSync) { TEST_F(AudioPolicyManagerTVTest, MatchNoFlags) { testHDMIPortSelection(AUDIO_OUTPUT_FLAG_NONE, "primary output"); } TEST_F(AudioPolicyManagerTVTest, MatchOutputDirectNoHwAvSync) { // b/140447125: The selected port must not have HW AV Sync flag (see the config file). testHDMIPortSelection(AUDIO_OUTPUT_FLAG_DIRECT, "direct"); } TEST_F(AudioPolicyManagerTVTest, MatchOutputHwAvSync) { TEST_F(AudioPolicyManagerTVTest, MatchOutputDirectHwAvSync) { testHDMIPortSelection(static_cast<audio_output_flags_t>( AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_HW_AV_SYNC), "tunnel"); } TEST_F(AudioPolicyManagerTVTest, MatchOutputDirectMMapNoIrq) { testHDMIPortSelection(static_cast<audio_output_flags_t>( AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_MMAP_NOIRQ), "low latency"); } services/audiopolicy/tests/resources/test_tv_apm_configuration.xml +15 −10 Original line number Diff line number Diff line Loading @@ -23,30 +23,35 @@ </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> <!-- Profiles on the HDMI port are explicit for simplicity. In reality they are dynamic --> <!-- Note: a HW AV Sync port is declared before non-Sync port to test b/140447125 --> <!-- Note: ports are intentionally arranged from more specific to less specific in order to test b/140447125 for HW AV Sync, and similar "explicit matches" --> <mixPort name="tunnel" role="source" flags="AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_HW_AV_SYNC"> <profile name="" format="AUDIO_FORMAT_AC3" <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> </mixPort> <mixPort name="low latency" 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="direct" role="source" flags="AUDIO_OUTPUT_FLAG_DIRECT"> <profile name="" format="AUDIO_FORMAT_AC3" <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> </mixPort> <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> </mixPorts> <devicePorts> <devicePort tagName="Speaker" type="AUDIO_DEVICE_OUT_SPEAKER" role="sink" /> <devicePort tagName="Out Aux Digital" type="AUDIO_DEVICE_OUT_AUX_DIGITAL" role="sink" encodedFormats="AUDIO_FORMAT_AC3 AUDIO_FORMAT_IEC61937" /> <devicePort tagName="Out Aux Digital" type="AUDIO_DEVICE_OUT_AUX_DIGITAL" role="sink" /> </devicePorts> <routes> <route type="mix" sink="Speaker" sources="primary output"/> <route type="mix" sink="Out Aux Digital" sources="primary output,tunnel,direct"/> <route type="mix" sink="Out Aux Digital" sources="primary output,tunnel,direct,low latency"/> </routes> </module> </modules> Loading Loading
services/audiopolicy/common/managerdefinitions/src/IOProfile.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -78,7 +78,8 @@ bool IOProfile::isCompatibleProfile(const DeviceVector &devices, } } const uint32_t mustMatchOutputFlags = AUDIO_OUTPUT_FLAG_HW_AV_SYNC; const uint32_t mustMatchOutputFlags = AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_HW_AV_SYNC|AUDIO_OUTPUT_FLAG_MMAP_NOIRQ; if (isPlaybackThread && (((getFlags() ^ flags) & mustMatchOutputFlags) || (getFlags() & flags) != flags)) { return false; Loading
services/audiopolicy/tests/audiopolicymanager_tests.cpp +13 −3 Original line number Diff line number Diff line Loading @@ -1164,7 +1164,7 @@ void AudioPolicyManagerTVTest::testHDMIPortSelection( audio_port_handle_t selectedDeviceId = AUDIO_PORT_HANDLE_NONE; audio_io_handle_t output; audio_port_handle_t portId; getOutputForAttr(&selectedDeviceId, AUDIO_FORMAT_AC3, AUDIO_CHANNEL_OUT_STEREO, 48000, getOutputForAttr(&selectedDeviceId, AUDIO_FORMAT_PCM_16_BIT, AUDIO_CHANNEL_OUT_STEREO, 48000, flags, &output, &portId); sp<SwAudioOutputDescriptor> outDesc = mManager->getOutputs().valueFor(output); ASSERT_NE(nullptr, outDesc.get()); Loading @@ -1187,13 +1187,23 @@ TEST_F(AudioPolicyManagerTVTest, Dump) { dumpToLog(); } TEST_F(AudioPolicyManagerTVTest, MatchOutputNoHwAvSync) { TEST_F(AudioPolicyManagerTVTest, MatchNoFlags) { testHDMIPortSelection(AUDIO_OUTPUT_FLAG_NONE, "primary output"); } TEST_F(AudioPolicyManagerTVTest, MatchOutputDirectNoHwAvSync) { // b/140447125: The selected port must not have HW AV Sync flag (see the config file). testHDMIPortSelection(AUDIO_OUTPUT_FLAG_DIRECT, "direct"); } TEST_F(AudioPolicyManagerTVTest, MatchOutputHwAvSync) { TEST_F(AudioPolicyManagerTVTest, MatchOutputDirectHwAvSync) { testHDMIPortSelection(static_cast<audio_output_flags_t>( AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_HW_AV_SYNC), "tunnel"); } TEST_F(AudioPolicyManagerTVTest, MatchOutputDirectMMapNoIrq) { testHDMIPortSelection(static_cast<audio_output_flags_t>( AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_MMAP_NOIRQ), "low latency"); }
services/audiopolicy/tests/resources/test_tv_apm_configuration.xml +15 −10 Original line number Diff line number Diff line Loading @@ -23,30 +23,35 @@ </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> <!-- Profiles on the HDMI port are explicit for simplicity. In reality they are dynamic --> <!-- Note: a HW AV Sync port is declared before non-Sync port to test b/140447125 --> <!-- Note: ports are intentionally arranged from more specific to less specific in order to test b/140447125 for HW AV Sync, and similar "explicit matches" --> <mixPort name="tunnel" role="source" flags="AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_HW_AV_SYNC"> <profile name="" format="AUDIO_FORMAT_AC3" <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> </mixPort> <mixPort name="low latency" 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="direct" role="source" flags="AUDIO_OUTPUT_FLAG_DIRECT"> <profile name="" format="AUDIO_FORMAT_AC3" <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> </mixPort> <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> </mixPorts> <devicePorts> <devicePort tagName="Speaker" type="AUDIO_DEVICE_OUT_SPEAKER" role="sink" /> <devicePort tagName="Out Aux Digital" type="AUDIO_DEVICE_OUT_AUX_DIGITAL" role="sink" encodedFormats="AUDIO_FORMAT_AC3 AUDIO_FORMAT_IEC61937" /> <devicePort tagName="Out Aux Digital" type="AUDIO_DEVICE_OUT_AUX_DIGITAL" role="sink" /> </devicePorts> <routes> <route type="mix" sink="Speaker" sources="primary output"/> <route type="mix" sink="Out Aux Digital" sources="primary output,tunnel,direct"/> <route type="mix" sink="Out Aux Digital" sources="primary output,tunnel,direct,low latency"/> </routes> </module> </modules> Loading