diff options
author | Matt Wagantall <mwagantall@cyngn.com> | 2016-02-16 19:15:43 -0800 |
---|---|---|
committer | Matt Wagantall <mwagantall@cyngn.com> | 2016-02-16 19:16:06 -0800 |
commit | 24c39c0d3734f99d8cf5ea4b925908e5303dd538 (patch) | |
tree | c5979a1d0b1ea39e039e57d3036b90499943c906 | |
parent | 998901b1612e872630c7cae39d196cb0c7309de0 (diff) | |
parent | 80f4a45ae5f3294ec9a711cdc1ed3acc0a018d2a (diff) | |
download | android_hardware_qcom_audio-24c39c0d3734f99d8cf5ea4b925908e5303dd538.tar.gz android_hardware_qcom_audio-24c39c0d3734f99d8cf5ea4b925908e5303dd538.tar.bz2 android_hardware_qcom_audio-24c39c0d3734f99d8cf5ea4b925908e5303dd538.zip |
Merge tag 'LA.BF64.1.2.2-03240-8x94.0' into HEAD
"LA.BF64.1.2.2-03240-8x94.0"
Issue-Id: SAMBAR-1280
Change-Id: Ia1481c2e8726c24c721e78df680ad8851f74f02b
-rw-r--r-- | policy_hal/AudioPolicyManager.cpp | 32 | ||||
-rw-r--r-- | policy_hal/AudioPolicyManager.h | 2 |
2 files changed, 25 insertions, 9 deletions
diff --git a/policy_hal/AudioPolicyManager.cpp b/policy_hal/AudioPolicyManager.cpp index b005bfce..09747ebe 100644 --- a/policy_hal/AudioPolicyManager.cpp +++ b/policy_hal/AudioPolicyManager.cpp @@ -279,15 +279,21 @@ 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()) { - audio_devices_t newDevice = getNewOutputDevice(mPrimaryOutput, false /*fromCache*/); + if (device == AUDIO_DEVICE_OUT_FM && hasPrimaryOutput()) { + audio_devices_t newDevice = AUDIO_DEVICE_NONE; if (state == AUDIO_POLICY_DEVICE_STATE_AVAILABLE) { mPrimaryOutput->changeRefCount(AUDIO_STREAM_MUSIC, 1); - newDevice = newDevice | AUDIO_DEVICE_OUT_FM; + newDevice = (audio_devices_t)(getNewOutputDevice(mPrimaryOutput, false)|AUDIO_DEVICE_OUT_FM); + mFMIsActive = true; } else { + newDevice = (audio_devices_t)(getNewOutputDevice(mPrimaryOutput, false)); + 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()); } @@ -641,7 +647,7 @@ void AudioPolicyManagerCustom::setPhoneState(audio_mode_t state) /// Opens: can these line be executed after the switch of volume curves??? // if leaving call state, handle special case of active streams // pertaining to sonification strategy see handleIncallSonification() - if (isInCall()) { + if (isStateInCall(oldState)) { ALOGV("setPhoneState() in call state management: new state is %d", state); for (size_t j = 0; j < mOutputs.size(); j++) { audio_io_handle_t curOutput = mOutputs.keyAt(j); @@ -1225,10 +1231,16 @@ status_t AudioPolicyManagerCustom::checkAndSetVolume(audio_stream_type_t stream, } #ifdef FM_POWER_OPT } else if (stream == AUDIO_STREAM_MUSIC && hasPrimaryOutput() && - outputDesc == mPrimaryOutput) { - AudioParameter param = AudioParameter(); - param.addFloat(String8("fm_volume"), Volume::DbToAmpl(volumeDb)); - mpClientInterface->setParameters(mPrimaryOutput->mIoHandle, param.toString(), delayMs); + 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) { + mPrevFMVolumeDb = volumeDb; + AudioParameter param = AudioParameter(); + param.addFloat(String8("fm_volume"), Volume::DbToAmpl(volumeDb)); + //Double delayMs to avoid sound burst while device switch. + mpClientInterface->setParameters(mPrimaryOutput->mIoHandle, param.toString(), delayMs*2); + } #endif /* FM_POWER_OPT end */ } @@ -1949,7 +1961,9 @@ AudioPolicyManagerCustom::AudioPolicyManagerCustom(AudioPolicyClientInterface *c : AudioPolicyManager(clientInterface), mHdmiAudioDisabled(false), mHdmiAudioEvent(false), - mPrevPhoneState(0) + mPrevPhoneState(0), + 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 f70cfb00..9b4a44a4 100644 --- a/policy_hal/AudioPolicyManager.h +++ b/policy_hal/AudioPolicyManager.h @@ -145,6 +145,8 @@ private: // Used for record + playback concurrency bool mIsInputRequestOnProgress; #endif + float mPrevFMVolumeDb; + bool mFMIsActive; }; }; |