diff options
author | Dhananjay Kumar <dhakumar@codeaurora.org> | 2015-10-21 12:36:19 +0530 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2015-11-01 07:51:04 -0800 |
commit | fc748cbb9fb1e2b8531f8003a0421f3005270f97 (patch) | |
tree | eb97cbc71ea8c72c72d2842ded0db3702321ce1e | |
parent | d5c974e1c7f7c1d9dbea5e064126188e44e1ba1b (diff) | |
download | hardware_qcom_audio-fc748cbb9fb1e2b8531f8003a0421f3005270f97.tar.gz hardware_qcom_audio-fc748cbb9fb1e2b8531f8003a0421f3005270f97.tar.bz2 hardware_qcom_audio-fc748cbb9fb1e2b8531f8003a0421f3005270f97.zip |
policy_hal: add support for fm device loopback
Use device connection event against AUDIO_DEVICE_OUT_FM
to configure FM device loopback.
Update primary output to get routing and volume events.
Change-Id: I5ddce36581568d377a08ea5afe470bdff4349ec7
-rw-r--r-- | policy_hal/Android.mk | 4 | ||||
-rw-r--r-- | policy_hal/AudioPolicyManager.cpp | 24 |
2 files changed, 28 insertions, 0 deletions
diff --git a/policy_hal/Android.mk b/policy_hal/Android.mk index 9f778cad..8fc1662e 100644 --- a/policy_hal/Android.mk +++ b/policy_hal/Android.mk @@ -55,6 +55,10 @@ ifeq ($(strip $(AUDIO_FEATURE_ENABLED_PROXY_DEVICE)),true) LOCAL_CFLAGS += -DAUDIO_EXTN_AFE_PROXY_ENABLED endif +ifeq ($(strip $(AUDIO_FEATURE_ENABLED_FM_POWER_OPT)),true) +LOCAL_CFLAGS += -DFM_POWER_OPT +endif + LOCAL_MODULE := libaudiopolicymanager include $(BUILD_SHARED_LIBRARY) diff --git a/policy_hal/AudioPolicyManager.cpp b/policy_hal/AudioPolicyManager.cpp index b603d354..189bf60c 100644 --- a/policy_hal/AudioPolicyManager.cpp +++ b/policy_hal/AudioPolicyManager.cpp @@ -254,6 +254,23 @@ status_t AudioPolicyManagerCustom::setDeviceConnectionStateInt(audio_devices_t d audio_devices_t newDevice = getNewOutputDevice(mPrimaryOutput, false /*fromCache*/); updateCallRouting(newDevice); } + +#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 (state == AUDIO_POLICY_DEVICE_STATE_AVAILABLE) { + mPrimaryOutput->changeRefCount(AUDIO_STREAM_MUSIC, 1); + newDevice = newDevice | AUDIO_DEVICE_OUT_FM; + } else { + mPrimaryOutput->changeRefCount(AUDIO_STREAM_MUSIC, -1); + } + AudioParameter param = AudioParameter(); + param.addInt(String8("handle_fm"), (int)newDevice); + mpClientInterface->setParameters(mPrimaryOutput->mIoHandle, param.toString()); + } +#endif /* FM_POWER_OPT end */ + for (size_t i = 0; i < mOutputs.size(); i++) { sp<SwAudioOutputDescriptor> desc = mOutputs.valueAt(i); if ((mEngine->getPhoneState() != AUDIO_MODE_IN_CALL) || (desc != mPrimaryOutput)) { @@ -1187,6 +1204,13 @@ status_t AudioPolicyManagerCustom::checkAndSetVolume(audio_stream_type_t stream, mpClientInterface->setVoiceVolume(voiceVolume, delayMs); mLastVoiceVolume = voiceVolume; } +#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); +#endif /* FM_POWER_OPT end */ } return NO_ERROR; |