summaryrefslogtreecommitdiffstats
path: root/services/audioflinger
diff options
context:
space:
mode:
authorEric Laurent <elaurent@google.com>2011-03-01 10:28:01 -0800
committerEric Laurent <elaurent@google.com>2011-03-01 11:42:43 -0800
commit532492cd60a3ee2613cd3d664c9f4581d9929bc5 (patch)
treeb53c6be95d7d54e1fa4ef0369ec38bcccd844055 /services/audioflinger
parentd2d38d5c937c552555aec8aa2eb9822a19b2476b (diff)
downloadframeworks_av-532492cd60a3ee2613cd3d664c9f4581d9929bc5.zip
frameworks_av-532492cd60a3ee2613cd3d664c9f4581d9929bc5.tar.gz
frameworks_av-532492cd60a3ee2613cd3d664c9f4581d9929bc5.tar.bz2
Fix issue 3388775.
Do not select A2DP output for media strategy when it is suspended because BT SCO is active. Media audio will be routed to speakers or SCO HS (depending on phone state and activity on stream VOICE_CALL) which is less confusing than not hearing anything while music progress bar is moving. Change-Id: Iff8cc1ea9bf9bde0b33035c4d91398db0934b836
Diffstat (limited to 'services/audioflinger')
-rw-r--r--services/audioflinger/AudioPolicyManagerBase.cpp12
1 files changed, 6 insertions, 6 deletions
diff --git a/services/audioflinger/AudioPolicyManagerBase.cpp b/services/audioflinger/AudioPolicyManagerBase.cpp
index bfc80db..74be4e0 100644
--- a/services/audioflinger/AudioPolicyManagerBase.cpp
+++ b/services/audioflinger/AudioPolicyManagerBase.cpp
@@ -122,12 +122,12 @@ status_t AudioPolicyManagerBase::setDeviceConnectionState(AudioSystem::audio_dev
// request routing change if necessary
uint32_t newDevice = getNewDevice(mHardwareOutput, false);
#ifdef WITH_A2DP
+ checkA2dpSuspend();
checkOutputForAllStrategies();
// A2DP outputs must be closed after checkOutputForAllStrategies() is executed
if (state == AudioSystem::DEVICE_STATE_UNAVAILABLE && AudioSystem::isA2dpDevice(device)) {
closeA2dpOutputs();
}
- checkA2dpSuspend();
#endif
updateDeviceForStrategy();
setOutputDevice(mHardwareOutput, newDevice);
@@ -269,8 +269,8 @@ void AudioPolicyManagerBase::setPhoneState(int state)
// check for device and output changes triggered by new phone state
newDevice = getNewDevice(mHardwareOutput, false);
#ifdef WITH_A2DP
- checkOutputForAllStrategies();
checkA2dpSuspend();
+ checkOutputForAllStrategies();
#endif
updateDeviceForStrategy();
@@ -378,8 +378,8 @@ void AudioPolicyManagerBase::setForceUse(AudioSystem::force_use usage, AudioSyst
// check for device and output changes triggered by new phone state
uint32_t newDevice = getNewDevice(mHardwareOutput, false);
#ifdef WITH_A2DP
- checkOutputForAllStrategies();
checkA2dpSuspend();
+ checkOutputForAllStrategies();
#endif
updateDeviceForStrategy();
setOutputDevice(mHardwareOutput, newDevice);
@@ -1624,7 +1624,7 @@ uint32_t AudioPolicyManagerBase::getDeviceForStrategy(routing_strategy strategy,
if (device) break;
#ifdef WITH_A2DP
// when not in a phone call, phone strategy should route STREAM_VOICE_CALL to A2DP
- if (!isInCall()) {
+ if (!isInCall() && !mA2dpSuspended) {
device = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_BLUETOOTH_A2DP;
if (device) break;
device = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES;
@@ -1647,7 +1647,7 @@ uint32_t AudioPolicyManagerBase::getDeviceForStrategy(routing_strategy strategy,
#ifdef WITH_A2DP
// when not in a phone call, phone strategy should route STREAM_VOICE_CALL to
// A2DP speaker when forcing to speaker output
- if (!isInCall()) {
+ if (!isInCall() && !mA2dpSuspended) {
device = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER;
if (device) break;
}
@@ -1687,7 +1687,7 @@ uint32_t AudioPolicyManagerBase::getDeviceForStrategy(routing_strategy strategy,
device2 = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_WIRED_HEADSET;
}
#ifdef WITH_A2DP
- if ((mA2dpOutput != 0) &&
+ if ((mA2dpOutput != 0) && !mA2dpSuspended &&
(strategy != STRATEGY_SONIFICATION || a2dpUsedForSonification())) {
if (device2 == 0) {
device2 = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_BLUETOOTH_A2DP;