Loading services/audiopolicy/common/managerdefinitions/src/AudioPolicyMix.cpp +4 −3 Original line number Diff line number Diff line Loading @@ -289,9 +289,10 @@ status_t AudioPolicyMixCollection::getOutputForAttr( continue; // skip the mix } if (flags & AUDIO_OUTPUT_FLAG_MMAP_NOIRQ) { // AAudio MMAP_NOIRQ streams cannot be routed using dynamic audio policy. ALOGD("%s: Rejecting MMAP_NOIRQ request matched to dynamic audio policy mix.", if ((flags & AUDIO_OUTPUT_FLAG_MMAP_NOIRQ) && is_mix_loopback(policyMix->mRouteFlags)) { // AAudio MMAP_NOIRQ streams cannot be routed to loopback/loopback+render // using dynamic audio policy. ALOGD("%s: Rejecting MMAP_NOIRQ request matched to loopback dynamic audio policy mix.", __func__); return INVALID_OPERATION; } Loading services/audiopolicy/tests/audiopolicymanager_tests.cpp +21 −5 Original line number Diff line number Diff line Loading @@ -1899,7 +1899,7 @@ class AudioPolicyManagerTestMMapPlaybackRerouting bool mIsBitPerfect; }; TEST_P(AudioPolicyManagerTestMMapPlaybackRerouting, MmapPlaybackStreamMatchingDapMixFails) { TEST_P(AudioPolicyManagerTestMMapPlaybackRerouting, MmapPlaybackStreamMatchingLoopbackDapMixFails) { // Add mix matching the test uid. const int testUid = 12345; const auto param = GetParam(); Loading @@ -1916,7 +1916,8 @@ TEST_P(AudioPolicyManagerTestMMapPlaybackRerouting, MmapPlaybackStreamMatchingDa &mOutputType, &mIsSpatialized, &mIsBitPerfect)); } TEST_P(AudioPolicyManagerTestMMapPlaybackRerouting, NonMmapPlaybackStreamMatchingDapMixSucceeds) { TEST_P(AudioPolicyManagerTestMMapPlaybackRerouting, NonMmapPlaybackStreamMatchingLoopbackDapMixSucceeds) { // Add mix matching the test uid. const int testUid = 12345; const auto param = GetParam(); Loading @@ -1933,15 +1934,30 @@ TEST_P(AudioPolicyManagerTestMMapPlaybackRerouting, NonMmapPlaybackStreamMatchin &mOutputType, &mIsSpatialized, &mIsBitPerfect)); } TEST_F(AudioPolicyManagerTestMMapPlaybackRerouting, MmapPlaybackStreamMatchingRenderDapMixSucceeds) { // Add render-only mix matching the test uid. const int testUid = 12345; status_t ret = addPolicyMix(MIX_TYPE_PLAYERS, MIX_ROUTE_FLAG_RENDER, AUDIO_DEVICE_OUT_SPEAKER, /*mixAddress=*/"", audioConfig, {createUidCriterion(testUid)}); ASSERT_EQ(NO_ERROR, ret); // Geting output for matching uid should succeed for mmaped stream. audio_output_flags_t outputFlags = AUDIO_OUTPUT_FLAG_MMAP_NOIRQ; ASSERT_EQ(NO_ERROR, mManager->getOutputForAttr(&attr, &mOutput, AUDIO_SESSION_NONE, &mStream, createAttributionSourceState(testUid), &audioConfig, &outputFlags, &mSelectedDeviceId, &mPortId, {}, &mOutputType, &mIsSpatialized, &mIsBitPerfect)); } INSTANTIATE_TEST_SUITE_P( MmapPlaybackRerouting, AudioPolicyManagerTestMMapPlaybackRerouting, testing::Values(DPMmapTestParam(MIX_ROUTE_FLAG_LOOP_BACK, AUDIO_DEVICE_OUT_REMOTE_SUBMIX, /*deviceAddress=*/"remote_submix_media"), DPMmapTestParam(MIX_ROUTE_FLAG_LOOP_BACK_AND_RENDER, AUDIO_DEVICE_OUT_REMOTE_SUBMIX, /*deviceAddress=*/"remote_submix_media"), DPMmapTestParam(MIX_ROUTE_FLAG_RENDER, AUDIO_DEVICE_OUT_SPEAKER, /*deviceAddress=*/""))); /*deviceAddress=*/"remote_submix_media"))); class AudioPolicyManagerTestDPMixRecordInjection : public AudioPolicyManagerTestDynamicPolicy, public testing::WithParamInterface<DPTestParam> { Loading Loading
services/audiopolicy/common/managerdefinitions/src/AudioPolicyMix.cpp +4 −3 Original line number Diff line number Diff line Loading @@ -289,9 +289,10 @@ status_t AudioPolicyMixCollection::getOutputForAttr( continue; // skip the mix } if (flags & AUDIO_OUTPUT_FLAG_MMAP_NOIRQ) { // AAudio MMAP_NOIRQ streams cannot be routed using dynamic audio policy. ALOGD("%s: Rejecting MMAP_NOIRQ request matched to dynamic audio policy mix.", if ((flags & AUDIO_OUTPUT_FLAG_MMAP_NOIRQ) && is_mix_loopback(policyMix->mRouteFlags)) { // AAudio MMAP_NOIRQ streams cannot be routed to loopback/loopback+render // using dynamic audio policy. ALOGD("%s: Rejecting MMAP_NOIRQ request matched to loopback dynamic audio policy mix.", __func__); return INVALID_OPERATION; } Loading
services/audiopolicy/tests/audiopolicymanager_tests.cpp +21 −5 Original line number Diff line number Diff line Loading @@ -1899,7 +1899,7 @@ class AudioPolicyManagerTestMMapPlaybackRerouting bool mIsBitPerfect; }; TEST_P(AudioPolicyManagerTestMMapPlaybackRerouting, MmapPlaybackStreamMatchingDapMixFails) { TEST_P(AudioPolicyManagerTestMMapPlaybackRerouting, MmapPlaybackStreamMatchingLoopbackDapMixFails) { // Add mix matching the test uid. const int testUid = 12345; const auto param = GetParam(); Loading @@ -1916,7 +1916,8 @@ TEST_P(AudioPolicyManagerTestMMapPlaybackRerouting, MmapPlaybackStreamMatchingDa &mOutputType, &mIsSpatialized, &mIsBitPerfect)); } TEST_P(AudioPolicyManagerTestMMapPlaybackRerouting, NonMmapPlaybackStreamMatchingDapMixSucceeds) { TEST_P(AudioPolicyManagerTestMMapPlaybackRerouting, NonMmapPlaybackStreamMatchingLoopbackDapMixSucceeds) { // Add mix matching the test uid. const int testUid = 12345; const auto param = GetParam(); Loading @@ -1933,15 +1934,30 @@ TEST_P(AudioPolicyManagerTestMMapPlaybackRerouting, NonMmapPlaybackStreamMatchin &mOutputType, &mIsSpatialized, &mIsBitPerfect)); } TEST_F(AudioPolicyManagerTestMMapPlaybackRerouting, MmapPlaybackStreamMatchingRenderDapMixSucceeds) { // Add render-only mix matching the test uid. const int testUid = 12345; status_t ret = addPolicyMix(MIX_TYPE_PLAYERS, MIX_ROUTE_FLAG_RENDER, AUDIO_DEVICE_OUT_SPEAKER, /*mixAddress=*/"", audioConfig, {createUidCriterion(testUid)}); ASSERT_EQ(NO_ERROR, ret); // Geting output for matching uid should succeed for mmaped stream. audio_output_flags_t outputFlags = AUDIO_OUTPUT_FLAG_MMAP_NOIRQ; ASSERT_EQ(NO_ERROR, mManager->getOutputForAttr(&attr, &mOutput, AUDIO_SESSION_NONE, &mStream, createAttributionSourceState(testUid), &audioConfig, &outputFlags, &mSelectedDeviceId, &mPortId, {}, &mOutputType, &mIsSpatialized, &mIsBitPerfect)); } INSTANTIATE_TEST_SUITE_P( MmapPlaybackRerouting, AudioPolicyManagerTestMMapPlaybackRerouting, testing::Values(DPMmapTestParam(MIX_ROUTE_FLAG_LOOP_BACK, AUDIO_DEVICE_OUT_REMOTE_SUBMIX, /*deviceAddress=*/"remote_submix_media"), DPMmapTestParam(MIX_ROUTE_FLAG_LOOP_BACK_AND_RENDER, AUDIO_DEVICE_OUT_REMOTE_SUBMIX, /*deviceAddress=*/"remote_submix_media"), DPMmapTestParam(MIX_ROUTE_FLAG_RENDER, AUDIO_DEVICE_OUT_SPEAKER, /*deviceAddress=*/""))); /*deviceAddress=*/"remote_submix_media"))); class AudioPolicyManagerTestDPMixRecordInjection : public AudioPolicyManagerTestDynamicPolicy, public testing::WithParamInterface<DPTestParam> { Loading