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.
This commit is contained in:
@@ -1000,8 +1000,9 @@ AudioPolicyManagerBase::AudioPolicyManagerBase(AudioPolicyClientInterface *clien
|
|||||||
#ifdef AUDIO_POLICY_TEST
|
#ifdef AUDIO_POLICY_TEST
|
||||||
Thread(false),
|
Thread(false),
|
||||||
#endif //AUDIO_POLICY_TEST
|
#endif //AUDIO_POLICY_TEST
|
||||||
mPhoneState(AudioSystem::MODE_NORMAL), mRingerMode(0), mMusicStopTime(0),
|
mPhoneState(AudioSystem::MODE_NORMAL), mRingerMode(0),
|
||||||
mLimitRingtoneVolume(false), mTotalEffectsCpuLoad(0), mTotalEffectsMemory(0),
|
mMusicStopTime(0), mLimitRingtoneVolume(false), mLastVoiceVolume(-1.0f),
|
||||||
|
mTotalEffectsCpuLoad(0), mTotalEffectsMemory(0),
|
||||||
mA2dpSuspended(false)
|
mA2dpSuspended(false)
|
||||||
{
|
{
|
||||||
mpClientInterface = clientInterface;
|
mpClientInterface = clientInterface;
|
||||||
@@ -1838,29 +1839,38 @@ status_t AudioPolicyManagerBase::checkAndSetVolume(int stream, int index, audio_
|
|||||||
}
|
}
|
||||||
|
|
||||||
float volume = computeVolume(stream, index, output, device);
|
float volume = computeVolume(stream, index, output, device);
|
||||||
// do not set volume if the float value did not change
|
// We actually change the volume if:
|
||||||
if (volume != mOutputs.valueFor(output)->mCurVolume[stream] || force) {
|
// - 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;
|
mOutputs.valueFor(output)->mCurVolume[stream] = volume;
|
||||||
LOGV("setStreamVolume() for output %d stream %d, volume %f, delay %d", output, stream, volume, delayMs);
|
LOGV("setStreamVolume() for output %d stream %d, volume %f, delay %d", output, stream, volume, delayMs);
|
||||||
if (stream == AudioSystem::VOICE_CALL ||
|
if (stream == AudioSystem::VOICE_CALL ||
|
||||||
stream == AudioSystem::DTMF ||
|
stream == AudioSystem::DTMF ||
|
||||||
stream == AudioSystem::BLUETOOTH_SCO) {
|
stream == AudioSystem::BLUETOOTH_SCO) {
|
||||||
float voiceVolume = -1.0;
|
|
||||||
// offset value to reflect actual hardware volume that never reaches 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)
|
// 1% corresponds roughly to first step in VOICE_CALL stream volume setting (see AudioService.java)
|
||||||
volume = 0.01 + 0.99 * volume;
|
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);
|
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;
|
return NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user