summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorEric Laurent <elaurent@google.com>2014-09-24 19:08:21 -0700
committerRachad Alao <rachad@google.com>2014-09-26 23:05:10 +0000
commitb732cf5af93c33fa183769210ce9954521fb68cd (patch)
treef7b469e86dbf5fc673937a917a151c0c8daeecfb /services
parent80ec934ae7d4e3a78af87554fdb77a58f6386ba0 (diff)
downloadframeworks_av-b732cf5af93c33fa183769210ce9954521fb68cd.zip
frameworks_av-b732cf5af93c33fa183769210ce9954521fb68cd.tar.gz
frameworks_av-b732cf5af93c33fa183769210ce9954521fb68cd.tar.bz2
audio policy: favor mixed over direct output for PCM format
modify getOutputForDevice() to skip direct output selection if the request can obviously be attached to a mixed output This prevents from selecting a direct output profile that can manage stereo PCM format if a mixer output is available to reach the same device. Bug: 17628413. Change-Id: I02e9a0b02c9ae5f44ff5768ac4ed02ce84d521c5
Diffstat (limited to 'services')
-rw-r--r--services/audiopolicy/AudioPolicyManager.cpp12
1 files changed, 11 insertions, 1 deletions
diff --git a/services/audiopolicy/AudioPolicyManager.cpp b/services/audiopolicy/AudioPolicyManager.cpp
index d51ee8e..d0b990f 100644
--- a/services/audiopolicy/AudioPolicyManager.cpp
+++ b/services/audiopolicy/AudioPolicyManager.cpp
@@ -927,13 +927,21 @@ audio_io_handle_t AudioPolicyManager::getOutputForDevice(
flags = (audio_output_flags_t)(flags | AUDIO_OUTPUT_FLAG_DIRECT);
}
+ sp<IOProfile> profile;
+
+ // skip direct output selection if the request can obviously be attached to a mixed output
+ if (audio_is_linear_pcm(format) && samplingRate <= MAX_MIXER_SAMPLING_RATE &&
+ audio_channel_count_from_out_mask(channelMask) <= 2) {
+ goto non_direct_output;
+ }
+
// Do not allow offloading if one non offloadable effect is enabled. This prevents from
// creating an offloaded track and tearing it down immediately after start when audioflinger
// detects there is an active non offloadable effect.
// FIXME: We should check the audio session here but we do not have it in this context.
// This may prevent offloading in rare situations where effects are left active by apps
// in the background.
- sp<IOProfile> profile;
+
if (((flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) == 0) ||
!isNonOffloadableEffectEnabled()) {
profile = getProfileForDirectOutput(device,
@@ -1016,6 +1024,8 @@ audio_io_handle_t AudioPolicyManager::getOutputForDevice(
return output;
}
+non_direct_output:
+
// ignoring channel mask due to downmix capability in mixer
// open a non direct output