Clean up AudioPolicyManager and tests
Bug: 309080867
Test: atest AudioHostTest
Change-Id: I0d4713401bdc695ac9826b2713e83cd8dcf794d3
diff --git a/services/audiopolicy/common/managerdefinitions/src/AudioPolicyMix.cpp b/services/audiopolicy/common/managerdefinitions/src/AudioPolicyMix.cpp
index d1819fd..3430f4b 100644
--- a/services/audiopolicy/common/managerdefinitions/src/AudioPolicyMix.cpp
+++ b/services/audiopolicy/common/managerdefinitions/src/AudioPolicyMix.cpp
@@ -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 @@
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 @@
{
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());
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
index 3bebb11..8d955ff 100644
--- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
+++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
@@ -3825,7 +3825,6 @@
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 @@
AUDIO_HARDWARE_MODULE_ID_REMOTE_SUBMIX);
if (rSubmixModule == 0) {
res = INVALID_OPERATION;
- endResult = INVALID_OPERATION;
continue;
}
}
@@ -3847,20 +3845,25 @@
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}) {
+ 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",
- AUDIO_FORMAT_DEFAULT);
- if (res != OK) {
+ AUDIO_POLICY_DEVICE_STATE_AVAILABLE) {
+ status_t currentRes =
+ setDeviceConnectionStateInt(device,
+ AUDIO_POLICY_DEVICE_STATE_UNAVAILABLE,
+ address.c_str(),
+ "remote-submix",
+ AUDIO_FORMAT_DEFAULT);
+ 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,24 +3873,16 @@
} 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();
- }
+
+ if (res == NO_ERROR && checkOutputs) {
+ checkForDeviceAndOutputChanges();
+ updateCallAndOutputRouting();
}
return res;
}
diff --git a/services/audiopolicy/tests/audiopolicymanager_tests.cpp b/services/audiopolicy/tests/audiopolicymanager_tests.cpp
index e02c93a..afd8765 100644
--- a/services/audiopolicy/tests/audiopolicymanager_tests.cpp
+++ b/services/audiopolicy/tests/audiopolicymanager_tests.cpp
@@ -1369,6 +1369,7 @@
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 @@
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 @@
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 @@
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 @@
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);