diff options
author | Haynes Mathew George <hgeorge@codeaurora.org> | 2015-12-21 17:23:59 -0800 |
---|---|---|
committer | Arne Coucheron <arco68@gmail.com> | 2016-05-11 00:12:22 +0200 |
commit | fb2fb504f29ffd9295fcc24aceb0ddcb15a15c6a (patch) | |
tree | 40cdb6e568e54e7babfce0e59f9bbeb9128915d7 | |
parent | f751a0c0b1c6a92d909795d856489e7db96049c6 (diff) | |
download | hardware_qcom_audio-fb2fb504f29ffd9295fcc24aceb0ddcb15a15c6a.tar.gz hardware_qcom_audio-fb2fb504f29ffd9295fcc24aceb0ddcb15a15c6a.tar.bz2 hardware_qcom_audio-fb2fb504f29ffd9295fcc24aceb0ddcb15a15c6a.zip |
policy: Delay FM volume update to start of FM playback
Delay update of FM volume to start of FM playback.
This avoids unnecessary set_parameter calls on primary output
whenever volume changes on primary output. Unnecessary calls
on primary output can cause breaks in audio since FastMixer
will be put to HOT_IDLE more often
CRs-Fixed: 948361
Change-Id: Id614d32df7f35ac93dd029a08b10e19f64ac631e
-rw-r--r-- | policy_hal/AudioPolicyManager.cpp | 12 | ||||
-rw-r--r-- | policy_hal/AudioPolicyManager.h | 1 |
2 files changed, 10 insertions, 3 deletions
diff --git a/policy_hal/AudioPolicyManager.cpp b/policy_hal/AudioPolicyManager.cpp index d6e4872e..440d1229 100644 --- a/policy_hal/AudioPolicyManager.cpp +++ b/policy_hal/AudioPolicyManager.cpp @@ -257,15 +257,20 @@ status_t AudioPolicyManagerCustom::setDeviceConnectionStateInt(audio_devices_t d #ifdef FM_POWER_OPT // handle FM device connection state to trigger FM AFE loopback - if(device == AUDIO_DEVICE_OUT_FM && hasPrimaryOutput()) { + if (device == AUDIO_DEVICE_OUT_FM && hasPrimaryOutput()) { audio_devices_t newDevice = getNewOutputDevice(mPrimaryOutput, false /*fromCache*/); if (state == AUDIO_POLICY_DEVICE_STATE_AVAILABLE) { mPrimaryOutput->changeRefCount(AUDIO_STREAM_MUSIC, 1); newDevice = (audio_devices_t)getNewOutputDevice(mPrimaryOutput, false /*fromCache*/) | AUDIO_DEVICE_OUT_FM; + mFMIsActive = true; } else { + mFMIsActive = false; mPrimaryOutput->changeRefCount(AUDIO_STREAM_MUSIC, -1); } AudioParameter param = AudioParameter(); + float volumeDb = mPrimaryOutput->mCurVolume[AUDIO_STREAM_MUSIC]; + mPrevFMVolumeDb = volumeDb; + param.addFloat(String8("fm_volume"), Volume::DbToAmpl(volumeDb)); param.addInt(String8("handle_fm"), (int)newDevice); mpClientInterface->setParameters(mPrimaryOutput->mIoHandle, param.toString()); } @@ -983,7 +988,7 @@ status_t AudioPolicyManagerCustom::checkAndSetVolume(audio_stream_type_t stream, } #ifdef FM_POWER_OPT } else if (stream == AUDIO_STREAM_MUSIC && hasPrimaryOutput() && - outputDesc == mPrimaryOutput) { + outputDesc == mPrimaryOutput && mFMIsActive) { /* Avoid unnecessary set_parameter calls as it puts the primary outputs FastMixer in HOT_IDLE leading to breaks in audio */ if (volumeDb != mPrevFMVolumeDb) { @@ -1317,7 +1322,8 @@ AudioPolicyManagerCustom::AudioPolicyManagerCustom(AudioPolicyClientInterface *c mHdmiAudioDisabled(false), mHdmiAudioEvent(false), mPrevPhoneState(0), - mPrevFMVolumeDb(0.0f) + mPrevFMVolumeDb(0.0f), + mFMIsActive(false) { char ssr_enabled[PROPERTY_VALUE_MAX] = {0}; bool prop_ssr_enabled = false; diff --git a/policy_hal/AudioPolicyManager.h b/policy_hal/AudioPolicyManager.h index b930d47b..11d0ed97 100644 --- a/policy_hal/AudioPolicyManager.h +++ b/policy_hal/AudioPolicyManager.h @@ -127,6 +127,7 @@ private: int mPrevPhoneState; int mvoice_call_state; float mPrevFMVolumeDb; + bool mFMIsActive; }; }; |