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

Commit 0e985858 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Clean up AudioPolicyManager and tests" into main

parents e449a0e8 0783e20f
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@
#include <AudioOutputDescriptor.h>
#include <android_media_audiopolicy.h>

namespace audio_flags = android::media::audiopolicy;
namespace audiopolicy_flags = android::media::audiopolicy;

namespace android {
namespace {
@@ -193,7 +193,7 @@ status_t AudioPolicyMixCollection::registerMix(const AudioMix& mix,
                    mix.mDeviceType, mix.mDeviceAddress.c_str());
            return BAD_VALUE;
        }
        if (audio_flags::audio_mix_ownership()) {
        if (audiopolicy_flags::audio_mix_ownership()) {
            if (mix.mToken == registeredMix->mToken) {
                ALOGE("registerMix(): same mix already registered - skipping");
                return BAD_VALUE;
@@ -221,7 +221,7 @@ status_t AudioPolicyMixCollection::unregisterMix(const AudioMix& mix)
{
    for (size_t i = 0; i < size(); i++) {
        const sp<AudioPolicyMix>& registeredMix = itemAt(i);
        if (audio_flags::audio_mix_ownership()) {
        if (audiopolicy_flags::audio_mix_ownership()) {
            if (mix.mToken == registeredMix->mToken) {
                ALOGD("unregisterMix(): removing mix for dev=0x%x addr=%s",
                      mix.mDeviceType, mix.mDeviceAddress.c_str());
+17 −22
Original line number Diff line number Diff line
@@ -3825,7 +3825,6 @@ status_t AudioPolicyManager::registerPolicyMixes(const Vector<AudioMix>& mixes)
status_t AudioPolicyManager::unregisterPolicyMixes(Vector<AudioMix> mixes)
{
    ALOGV("unregisterPolicyMixes() num mixes %zu", mixes.size());
    status_t endResult = NO_ERROR;
    status_t res = NO_ERROR;
    bool checkOutputs = false;
    sp<HwModule> rSubmixModule;
@@ -3838,7 +3837,6 @@ status_t AudioPolicyManager::unregisterPolicyMixes(Vector<AudioMix> mixes)
                        AUDIO_HARDWARE_MODULE_ID_REMOTE_SUBMIX);
                if (rSubmixModule == 0) {
                    res = INVALID_OPERATION;
                    endResult = INVALID_OPERATION;
                    continue;
                }
            }
@@ -3847,20 +3845,25 @@ status_t AudioPolicyManager::unregisterPolicyMixes(Vector<AudioMix> mixes)

            if (mPolicyMixes.unregisterMix(mix) != NO_ERROR) {
                res = INVALID_OPERATION;
                endResult = INVALID_OPERATION;
                continue;
            }

            for (auto device: {AUDIO_DEVICE_IN_REMOTE_SUBMIX, AUDIO_DEVICE_OUT_REMOTE_SUBMIX}) {
                if (getDeviceConnectionState(device, address.c_str()) ==
                    AUDIO_POLICY_DEVICE_STATE_AVAILABLE) {
                    res = setDeviceConnectionStateInt(device, AUDIO_POLICY_DEVICE_STATE_UNAVAILABLE,
                                                      address.c_str(), "remote-submix",
                    status_t currentRes =
                            setDeviceConnectionStateInt(device,
                                                        AUDIO_POLICY_DEVICE_STATE_UNAVAILABLE,
                                                        address.c_str(),
                                                        "remote-submix",
                                                        AUDIO_FORMAT_DEFAULT);
                    if (res != OK) {
                    if (!audio_flags::audio_mix_ownership()) {
                        res = currentRes;
                    }
                    if (currentRes != OK) {
                        ALOGE("Error making RemoteSubmix device unavailable for mix "
                              "with type %d, address %s", device, address.c_str());
                        endResult = INVALID_OPERATION;
                        res = INVALID_OPERATION;
                    }
                }
            }
@@ -3870,25 +3873,17 @@ status_t AudioPolicyManager::unregisterPolicyMixes(Vector<AudioMix> mixes)
        } else if ((mix.mRouteFlags & MIX_ROUTE_FLAG_RENDER) == MIX_ROUTE_FLAG_RENDER) {
            if (mPolicyMixes.unregisterMix(mix) != NO_ERROR) {
                res = INVALID_OPERATION;
                endResult = INVALID_OPERATION;
                continue;
            } else {
                checkOutputs = true;
            }
        }
    }
    if (audio_flags::audio_mix_ownership()) {
        res = endResult;
        if (res == NO_ERROR && checkOutputs) {
            checkForDeviceAndOutputChanges();
            updateCallAndOutputRouting();
        }
    } else {

    if (res == NO_ERROR && checkOutputs) {
        checkForDeviceAndOutputChanges();
        updateCallAndOutputRouting();
    }
    }
    return res;
}

+5 −7
Original line number Diff line number Diff line
@@ -1369,6 +1369,7 @@ status_t AudioPolicyManagerTestDynamicPolicy::addPolicyMix(int mixType, int mixF
    AudioMix myAudioMix(matchCriteria, mixType, audioConfig, mixFlag,
            String8(mixAddress.c_str()), 0);
    myAudioMix.mDeviceType = deviceType;
    myAudioMix.mToken = sp<BBinder>::make();
    // Clear mAudioMix before add new one to make sure we don't add already exist mixes.
    mAudioMixes.clear();
    return addPolicyMix(myAudioMix);
@@ -1569,8 +1570,7 @@ TEST_F_WITH_FLAGS(
    validAudioMix.mDeviceType = AUDIO_DEVICE_OUT_REMOTE_SUBMIX;

    mAudioMixes.clear();
    mAudioMixes.add(validAudioMix);
    status_t ret = mManager->registerPolicyMixes(mAudioMixes);
    status_t ret = addPolicyMix(validAudioMix);

    ASSERT_EQ(NO_ERROR, ret);

@@ -1586,8 +1586,7 @@ TEST_F_WITH_FLAGS(
                             MIX_ROUTE_FLAG_LOOP_BACK, String8(mMixAddress.c_str()), 0);
    validAudioMix.mDeviceType = AUDIO_DEVICE_OUT_REMOTE_SUBMIX;

    mAudioMixes.add(invalidAudioMix);
    ret = mManager->registerPolicyMixes(mAudioMixes);
    ret = addPolicyMix(invalidAudioMix);

    ASSERT_EQ(INVALID_OPERATION, ret);

@@ -1614,8 +1613,7 @@ TEST_F_WITH_FLAGS(
    validAudioMix.mDeviceType = AUDIO_DEVICE_OUT_REMOTE_SUBMIX;

    mAudioMixes.clear();
    mAudioMixes.add(validAudioMix);
    status_t ret = mManager->registerPolicyMixes(mAudioMixes);
    status_t ret = addPolicyMix(validAudioMix);

    ASSERT_EQ(NO_ERROR, ret);

@@ -1629,7 +1627,7 @@ TEST_F_WITH_FLAGS(

    AudioMix invalidAudioMix(invalidMixMatchCriteria, MIX_TYPE_PLAYERS, audioConfig,
                             MIX_ROUTE_FLAG_LOOP_BACK, String8(mMixAddress.c_str()), 0);
    validAudioMix.mDeviceType = AUDIO_DEVICE_OUT_REMOTE_SUBMIX;
    invalidAudioMix.mDeviceType = AUDIO_DEVICE_OUT_REMOTE_SUBMIX;

    Vector<AudioMix> mixes;
    mixes.add(invalidAudioMix);