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

Commit 0783e20f authored by Marvin Ramin's avatar Marvin Ramin
Browse files

Clean up AudioPolicyManager and tests

Bug: 309080867
Test: atest AudioHostTest
Change-Id: I0d4713401bdc695ac9826b2713e83cd8dcf794d3
parent 8c2a3bfc
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);