Loading services/audiopolicy/common/managerdefinitions/src/AudioPolicyMix.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading @@ -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; Loading Loading @@ -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()); Loading services/audiopolicy/managerdefault/AudioPolicyManager.cpp +17 −22 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; } } Loading @@ -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; } } } Loading @@ -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; } Loading services/audiopolicy/tests/audiopolicymanager_tests.cpp +5 −7 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading Loading
services/audiopolicy/common/managerdefinitions/src/AudioPolicyMix.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading @@ -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; Loading Loading @@ -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()); Loading
services/audiopolicy/managerdefault/AudioPolicyManager.cpp +17 −22 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; } } Loading @@ -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; } } } Loading @@ -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; } Loading
services/audiopolicy/tests/audiopolicymanager_tests.cpp +5 −7 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading