Improve AudioMix registration/unregistration
1) Pass through the AudioMix binder token introduced in frameworks/base
all the way to AudioPolicyManager incl. aidl conversions.
2) When AudioPolicyManager#registerPolicyMixes fails improve the
resetting logic. Only unregister policy mixes that were not already
registered before the call to registerPolicyMixes.
3) AudioPolicyManager#unregisterPolicyMixes returns an error if any
mix unregistration failed. Previously the method only returned an
error if the LAST unregistration failed.
4) AudioPolicyMix#unregisterMix matches mixes on the AudioMix binder
token instead of device type + address. This ensures AudioMixes are
uniquely identified and different policies cannot interfere with each
other.
Bug: 309080867
Test: atest AudioHostTest
Change-Id: If56134c56d77c615ed40e039aa566032b445842d
diff --git a/media/libaudioclient/PolicyAidlConversion.cpp b/media/libaudioclient/PolicyAidlConversion.cpp
index 60b08fa..a71bb18 100644
--- a/media/libaudioclient/PolicyAidlConversion.cpp
+++ b/media/libaudioclient/PolicyAidlConversion.cpp
@@ -242,6 +242,7 @@
legacy.mCbFlags = VALUE_OR_RETURN(aidl2legacy_AudioMixCallbackFlag_uint32_t_mask(aidl.cbFlags));
legacy.mAllowPrivilegedMediaPlaybackCapture = aidl.allowPrivilegedMediaPlaybackCapture;
legacy.mVoiceCommunicationCaptureAllowed = aidl.voiceCommunicationCaptureAllowed;
+ legacy.mToken = aidl.mToken;
return legacy;
}
@@ -265,6 +266,7 @@
aidl.cbFlags = VALUE_OR_RETURN(legacy2aidl_uint32_t_AudioMixCallbackFlag_mask(legacy.mCbFlags));
aidl.allowPrivilegedMediaPlaybackCapture = legacy.mAllowPrivilegedMediaPlaybackCapture;
aidl.voiceCommunicationCaptureAllowed = legacy.mVoiceCommunicationCaptureAllowed;
+ aidl.mToken = legacy.mToken;
return aidl;
}