Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 422c6446 authored by Ján Sebechlebský's avatar Ján Sebechlebský Committed by Automerger Merge Worker
Browse files

Merge "Allow DAP render-only mix to be matched to mmap-ed stream." into udc-dev am: cabafef8

parents 3d0cf177 cabafef8
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -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;
        }
+21 −5
Original line number Diff line number Diff line
@@ -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();
@@ -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();
@@ -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> {