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/AudioPolicyInterface.h b/services/audiopolicy/AudioPolicyInterface.h
index 75e0530..4dcc6b2 100644
--- a/services/audiopolicy/AudioPolicyInterface.h
+++ b/services/audiopolicy/AudioPolicyInterface.h
@@ -71,6 +71,8 @@
API_INPUT_CONCURRENCY_NONE = 0,
API_INPUT_CONCURRENCY_CALL = (1 << 0), // Concurrency with a call
API_INPUT_CONCURRENCY_CAPTURE = (1 << 1), // Concurrency with another capture
+
+ API_INPUT_CONCURRENCY_ALL = (API_INPUT_CONCURRENCY_CALL | API_INPUT_CONCURRENCY_CAPTURE),
};
typedef uint32_t concurrency_type__mask_t;
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);
}
}