summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Wagantall <mwagantall@cyngn.com>2016-02-16 19:15:43 -0800
committerMatt Wagantall <mwagantall@cyngn.com>2016-02-16 19:16:06 -0800
commit24c39c0d3734f99d8cf5ea4b925908e5303dd538 (patch)
treec5979a1d0b1ea39e039e57d3036b90499943c906
parent998901b1612e872630c7cae39d196cb0c7309de0 (diff)
parent80f4a45ae5f3294ec9a711cdc1ed3acc0a018d2a (diff)
downloadandroid_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.cpp32
-rw-r--r--policy_hal/AudioPolicyManager.h2
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;
};
};