audio policy: fix capture concurrency mode checks
Capture concurrency mode indicated by policy manager
after startInput() is a bit field and should be handled as
such by startInput() in AudioPolicyInterfaceImpl.
Bug: 26994864
Change-Id: Iff093a82b8b68262abab50bc84060cf023450783
diff --git a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
index e08c952..ae5cf3d 100644
--- a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
+++ b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
@@ -353,19 +353,15 @@
status_t status = mAudioPolicyManager->startInput(input, session, &concurrency);
if (status == NO_ERROR) {
+ LOG_ALWAYS_FATAL_IF(concurrency & ~AudioPolicyInterface::API_INPUT_CONCURRENCY_ALL,
+ "startInput(): invalid concurrency type %d", (int)concurrency);
+
// enforce permission (if any) required for each type of concurrency
- switch (concurrency) {
- case AudioPolicyInterface::API_INPUT_CONCURRENCY_NONE:
- break;
- case AudioPolicyInterface::API_INPUT_CONCURRENCY_CALL:
+ if (concurrency & AudioPolicyInterface::API_INPUT_CONCURRENCY_CALL) {
//TODO: check incall capture permission
- break;
- case AudioPolicyInterface::API_INPUT_CONCURRENCY_CAPTURE:
+ }
+ if (concurrency & AudioPolicyInterface::API_INPUT_CONCURRENCY_CAPTURE) {
//TODO: check concurrent capture permission
- break;
- default:
- LOG_ALWAYS_FATAL("startInput() encountered an invalid input type %d",
- (int)concurrency);
}
}