summaryrefslogtreecommitdiff
path: root/libaudio
diff options
context:
space:
mode:
authorEric Laurent <elaurent@google.com>2009-08-03 08:47:26 -0700
committerEric Laurent <elaurent@google.com>2009-08-03 08:52:07 -0700
commitc5993470d22166e714bf9db8dfe608c66c2c7fac (patch)
tree246cbfc8592c7866a8ce9fa10b0b09de663309ca /libaudio
parent4a301310720c49b4c931dc52ab37e79a92591d89 (diff)
downloadmsm7k-c5993470d22166e714bf9db8dfe608c66c2c7fac.tar.gz
Fix issue 2029923: DTMF tones not always routed to BT SCO.
Switch DTMF stream from/to A2DP output to/from hardware output when changing call state even if DTMF stream is not active.
Diffstat (limited to 'libaudio')
-rw-r--r--libaudio/AudioPolicyManager.cpp13
1 files changed, 7 insertions, 6 deletions
diff --git a/libaudio/AudioPolicyManager.cpp b/libaudio/AudioPolicyManager.cpp
index 15c62ba..eae3ef1 100644
--- a/libaudio/AudioPolicyManager.cpp
+++ b/libaudio/AudioPolicyManager.cpp
@@ -488,15 +488,14 @@ void AudioPolicyManager::setPhoneState(int state)
} else if (mOutputs.valueFor(mHardwareOutput)->isUsedByStrategy(STRATEGY_MEDIA)){
newDevice = getDeviceForStrategy(STRATEGY_MEDIA);
}
- else if (mA2dpOutput != 0) {
+
+ if (mA2dpOutput != 0) {
// If entering or exiting in call state, switch DTMF streams to/from A2DP output
// if necessary
uint32_t newDtmfDevice = getDeviceForStrategy(STRATEGY_DTMF);
if (state == AudioSystem::MODE_IN_CALL) {
- if (mOutputs.valueFor(mA2dpOutput)->isUsedByStrategy(STRATEGY_DTMF) &&
- AudioSystem::isA2dpDevice((AudioSystem::audio_devices)oldDtmfDevice) &&
+ if (AudioSystem::isA2dpDevice((AudioSystem::audio_devices)oldDtmfDevice) &&
!AudioSystem::isA2dpDevice((AudioSystem::audio_devices)newDtmfDevice)) {
- newDevice = newDtmfDevice;
for (int i = 0; i < (int)AudioSystem::NUM_STREAM_TYPES; i++) {
if (getStrategy((AudioSystem::stream_type)i) == STRATEGY_DTMF) {
mpClientInterface->setStreamOutput((AudioSystem::stream_type)i, mHardwareOutput);
@@ -504,10 +503,12 @@ void AudioPolicyManager::setPhoneState(int state)
mOutputs.valueFor(mA2dpOutput)->mRefCount[i]);
}
}
+ if (newDevice == 0 && mOutputs.valueFor(mA2dpOutput)->isUsedByStrategy(STRATEGY_DTMF)) {
+ newDevice = newDtmfDevice;
+ }
}
} else {
- if (mOutputs.valueFor(mHardwareOutput)->isUsedByStrategy(STRATEGY_DTMF) &&
- !AudioSystem::isA2dpDevice((AudioSystem::audio_devices)oldDtmfDevice) &&
+ if (!AudioSystem::isA2dpDevice((AudioSystem::audio_devices)oldDtmfDevice) &&
AudioSystem::isA2dpDevice((AudioSystem::audio_devices)newDtmfDevice)) {
for (int i = 0; i < (int)AudioSystem::NUM_STREAM_TYPES; i++) {
if (getStrategy((AudioSystem::stream_type)i) == STRATEGY_DTMF) {