diff options
author | Eric Laurent <elaurent@google.com> | 2010-12-01 16:04:09 -0800 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2010-12-01 16:04:09 -0800 |
commit | ed98a7c776e0a7a20390b3d51f8f7ab7d292a7d0 (patch) | |
tree | 52f19bf8d72fd9ef426f1fe7f065175e73803a0b /services | |
parent | 1de6ca69cc541ccdd651071c8bd5629af4e09664 (diff) | |
parent | 78d81851a8ef6691541215afb19e5bc690a4c3c0 (diff) | |
download | frameworks_base-ed98a7c776e0a7a20390b3d51f8f7ab7d292a7d0.zip frameworks_base-ed98a7c776e0a7a20390b3d51f8f7ab7d292a7d0.tar.gz frameworks_base-ed98a7c776e0a7a20390b3d51f8f7ab7d292a7d0.tar.bz2 |
am 78d81851: Merge "Fix issue 2641884: Bluetooth volume is dependent on in call volume." into gingerbread
* commit '78d81851a8ef6691541215afb19e5bc690a4c3c0':
Fix issue 2641884: Bluetooth volume is dependent on in call volume.
Diffstat (limited to 'services')
-rw-r--r-- | services/audioflinger/AudioPolicyManagerBase.cpp | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/services/audioflinger/AudioPolicyManagerBase.cpp b/services/audioflinger/AudioPolicyManagerBase.cpp index ee9297f..8d16ab4 100644 --- a/services/audioflinger/AudioPolicyManagerBase.cpp +++ b/services/audioflinger/AudioPolicyManagerBase.cpp @@ -1000,8 +1000,9 @@ AudioPolicyManagerBase::AudioPolicyManagerBase(AudioPolicyClientInterface *clien #ifdef AUDIO_POLICY_TEST Thread(false), #endif //AUDIO_POLICY_TEST - mPhoneState(AudioSystem::MODE_NORMAL), mRingerMode(0), mMusicStopTime(0), - mLimitRingtoneVolume(false), mTotalEffectsCpuLoad(0), mTotalEffectsMemory(0), + mPhoneState(AudioSystem::MODE_NORMAL), mRingerMode(0), + mMusicStopTime(0), mLimitRingtoneVolume(false), mLastVoiceVolume(-1.0f), + mTotalEffectsCpuLoad(0), mTotalEffectsMemory(0), mA2dpSuspended(false) { mpClientInterface = clientInterface; @@ -1838,29 +1839,38 @@ status_t AudioPolicyManagerBase::checkAndSetVolume(int stream, int index, audio_ } float volume = computeVolume(stream, index, output, device); - // do not set volume if the float value did not change - if (volume != mOutputs.valueFor(output)->mCurVolume[stream] || force) { + // We actually change the volume if: + // - the float value returned by computeVolume() changed + // - the force flag is set + if (volume != mOutputs.valueFor(output)->mCurVolume[stream] || + force) { mOutputs.valueFor(output)->mCurVolume[stream] = volume; LOGV("setStreamVolume() for output %d stream %d, volume %f, delay %d", output, stream, volume, delayMs); if (stream == AudioSystem::VOICE_CALL || stream == AudioSystem::DTMF || stream == AudioSystem::BLUETOOTH_SCO) { - float voiceVolume = -1.0; // offset value to reflect actual hardware volume that never reaches 0 // 1% corresponds roughly to first step in VOICE_CALL stream volume setting (see AudioService.java) volume = 0.01 + 0.99 * volume; - if (stream == AudioSystem::VOICE_CALL) { - voiceVolume = (float)index/(float)mStreams[stream].mIndexMax; - } else if (stream == AudioSystem::BLUETOOTH_SCO) { - voiceVolume = 1.0; - } - if (voiceVolume >= 0 && output == mHardwareOutput) { - mpClientInterface->setVoiceVolume(voiceVolume, delayMs); - } } mpClientInterface->setStreamVolume((AudioSystem::stream_type)stream, volume, output, delayMs); } + if (stream == AudioSystem::VOICE_CALL || + stream == AudioSystem::BLUETOOTH_SCO) { + float voiceVolume; + // Force voice volume to max for bluetooth SCO as volume is managed by the headset + if (stream == AudioSystem::VOICE_CALL) { + voiceVolume = (float)index/(float)mStreams[stream].mIndexMax; + } else { + voiceVolume = 1.0; + } + if (voiceVolume != mLastVoiceVolume && output == mHardwareOutput) { + mpClientInterface->setVoiceVolume(voiceVolume, delayMs); + mLastVoiceVolume = voiceVolume; + } + } + return NO_ERROR; } |