policy: avoid fallback to deep-buffer for fast requests
Avoid fallback to deep-buffer for outputs requested with fast
or raw flags.
Change-Id: I9b43f9065e59583ab84b954f2a87dbc8cc80cd16
diff --git a/policy_hal/AudioPolicyManager.cpp b/policy_hal/AudioPolicyManager.cpp
index 0e9aeae..77cbf5a 100644
--- a/policy_hal/AudioPolicyManager.cpp
+++ b/policy_hal/AudioPolicyManager.cpp
@@ -826,8 +826,11 @@
continue;
}
- if (AUDIO_OUTPUT_FLAG_FAST == mFallBackflag) {
- if (((!outputDesc->isDuplicated() &&outputDesc->mProfile->mFlags & AUDIO_OUTPUT_FLAG_PRIMARY))
+ bool isFastFallBackNeeded =
+ ((AUDIO_OUTPUT_FLAG_DEEP_BUFFER | AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD | AUDIO_OUTPUT_FLAG_DIRECT_PCM) & outputDesc->mProfile->mFlags);
+
+ if ((AUDIO_OUTPUT_FLAG_FAST == mFallBackflag) && isFastFallBackNeeded) {
+ if (((!outputDesc->isDuplicated() && outputDesc->mProfile->mFlags & AUDIO_OUTPUT_FLAG_PRIMARY))
&& prop_playback_enabled) {
ALOGD("voice_conc:calling suspendOutput on call mode for primary output");
mpClientInterface->suspendOutput(mOutputs.keyAt(i));
@@ -1615,6 +1618,11 @@
prop_voip_enabled = atoi(propValue) || !strncmp("true", propValue, 4);
}
+ bool isDeepBufferFallBackNeeded =
+ ((AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD | AUDIO_OUTPUT_FLAG_DIRECT_PCM) & flags);
+ bool isFastFallBackNeeded =
+ ((AUDIO_OUTPUT_FLAG_DEEP_BUFFER | AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD | AUDIO_OUTPUT_FLAG_DIRECT_PCM) & flags);
+
if (prop_play_enabled && mvoice_call_state) {
//check if voice call is active / running in background
if((AUDIO_MODE_IN_CALL == mEngine->getPhoneState()) ||
@@ -1629,10 +1637,12 @@
}
}
else {
- if (AUDIO_OUTPUT_FLAG_FAST == mFallBackflag) {
+ if (isFastFallBackNeeded &&
+ (AUDIO_OUTPUT_FLAG_FAST == mFallBackflag)) {
ALOGD("voice_conc:IN call mode adding ULL flags .. flags: %x ", flags );
flags = AUDIO_OUTPUT_FLAG_FAST;
- } else if (AUDIO_OUTPUT_FLAG_DEEP_BUFFER == mFallBackflag) {
+ } else if (isDeepBufferFallBackNeeded &&
+ (AUDIO_OUTPUT_FLAG_DEEP_BUFFER == mFallBackflag)) {
if (AUDIO_STREAM_MUSIC == stream) {
flags = AUDIO_OUTPUT_FLAG_DEEP_BUFFER;
ALOGD("voice_conc:IN call mode adding deep-buffer flags %x ", flags );