summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHaynes Mathew George <hgeorge@codeaurora.org>2015-12-21 17:23:59 -0800
committerArne Coucheron <arco68@gmail.com>2016-05-11 00:12:22 +0200
commitfb2fb504f29ffd9295fcc24aceb0ddcb15a15c6a (patch)
tree40cdb6e568e54e7babfce0e59f9bbeb9128915d7
parentf751a0c0b1c6a92d909795d856489e7db96049c6 (diff)
downloadhardware_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.cpp12
-rw-r--r--policy_hal/AudioPolicyManager.h1
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;
};
};