Merge "audiopolicy: Match DIRECT and MMAP_NOIRQ flags exactly in IOProfile"

gugelfrei
TreeHugger Robot 5 years ago committed by Android (Google) Code Review
commit 0f9e1f5280

@ -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;

@ -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());
@ -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");
}

@ -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…
Cancel
Save