diff options
author | Scott Mertz <scott@cyngn.com> | 2015-11-16 15:01:11 -0800 |
---|---|---|
committer | Scott Mertz <scott@cyngn.com> | 2015-11-16 16:22:47 -0800 |
commit | 8eb0563bc46174151ef92f16a7c6273abdf31450 (patch) | |
tree | 8fb6b3366d0472adb7f27f2711ed8b1ea9388ed1 | |
parent | e995fd7d13ae3945ba1aaf8545d2b4c161b7ffc2 (diff) | |
parent | 41131c15da54847887cfcf54287b93c19604ab50 (diff) | |
download | android_hardware_qcom_audio-8eb0563bc46174151ef92f16a7c6273abdf31450.tar.gz android_hardware_qcom_audio-8eb0563bc46174151ef92f16a7c6273abdf31450.tar.bz2 android_hardware_qcom_audio-8eb0563bc46174151ef92f16a7c6273abdf31450.zip |
Merge remote-tracking branch 'caf/LA.BF64.1.2.2_rb4.7' into cm-13.0-caf-8994
Change-Id: Idee04b3a7c4685a852b853b101ecfc14b4bd74f7
-rw-r--r-- | hal/Android.mk | 4 | ||||
-rw-r--r-- | hal/audio_extn/audio_extn.c | 2 | ||||
-rw-r--r-- | hal/audio_extn/audio_extn.h | 9 | ||||
-rw-r--r-- | hal/audio_extn/fm.c | 4 | ||||
-rw-r--r-- | hal/audio_hw.c | 6 | ||||
-rw-r--r-- | hal/msm8916/platform.c | 10 | ||||
-rw-r--r-- | hal/msm8974/platform.c | 9 | ||||
-rw-r--r-- | policy_hal/Android.mk | 4 | ||||
-rw-r--r-- | policy_hal/AudioPolicyManager.cpp | 39 |
9 files changed, 53 insertions, 34 deletions
diff --git a/hal/Android.mk b/hal/Android.mk index 1fa49a1b..a124da88 100644 --- a/hal/Android.mk +++ b/hal/Android.mk @@ -74,8 +74,8 @@ ifeq ($(strip $(AUDIO_FEATURE_ENABLED_KPI_OPTIMIZE)),true) LOCAL_CFLAGS += -DKPI_OPTIMIZE_ENABLED endif -ifeq ($(strip $(AUDIO_FEATURE_ENABLED_FM)),true) - LOCAL_CFLAGS += -DFM_ENABLED +ifeq ($(strip $(AUDIO_FEATURE_ENABLED_FM_POWER_OPT)),true) + LOCAL_CFLAGS += -DFM_POWER_OPT LOCAL_SRC_FILES += audio_extn/fm.c endif diff --git a/hal/audio_extn/audio_extn.c b/hal/audio_extn/audio_extn.c index 31e45b1a..a415f479 100644 --- a/hal/audio_extn/audio_extn.c +++ b/hal/audio_extn/audio_extn.c @@ -80,7 +80,7 @@ static struct audio_extn_module aextnmod = { #define AUDIO_PARAMETER_OFFLOAD_NUM_ACTIVE "offload_num_active" #define AUDIO_PARAMETER_HPX "HPX" -#ifndef FM_ENABLED +#ifndef FM_POWER_OPT #define audio_extn_fm_set_parameters(adev, parms) (0) #else void audio_extn_fm_set_parameters(struct audio_device *adev, diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h index 7557b433..d1d995c1 100644 --- a/hal/audio_extn/audio_extn.h +++ b/hal/audio_extn/audio_extn.h @@ -59,13 +59,8 @@ #define AUDIO_OUTPUT_FLAG_INCALL_MUSIC 0x8000 #endif -#ifndef FM_ENABLED -#define AUDIO_DEVICE_OUT_FM 0x80000 -#define AUDIO_DEVICE_OUT_FM_TX 0x100000 -#define AUDIO_SOURCE_FM_RX 9 -#define AUDIO_SOURCE_FM_RX_A2DP 10 -#define AUDIO_DEVICE_IN_FM_RX (AUDIO_DEVICE_BIT_IN | 0x8000) -#define AUDIO_DEVICE_IN_FM_RX_A2DP (AUDIO_DEVICE_BIT_IN | 0x10000) +#ifndef AUDIO_DEVICE_OUT_FM_TX +#define AUDIO_DEVICE_OUT_FM_TX 0x8000000 #endif #ifndef FLAC_OFFLOAD_ENABLED diff --git a/hal/audio_extn/fm.c b/hal/audio_extn/fm.c index b6f8689f..91576cb4 100644 --- a/hal/audio_extn/fm.c +++ b/hal/audio_extn/fm.c @@ -31,7 +31,7 @@ #include <stdlib.h> #include <cutils/str_parms.h> -#ifdef FM_ENABLED +#ifdef FM_POWER_OPT #define AUDIO_PARAMETER_KEY_HANDLE_FM "handle_fm" #define AUDIO_PARAMETER_KEY_FM_VOLUME "fm_volume" @@ -283,4 +283,4 @@ void audio_extn_fm_set_parameters(struct audio_device *adev, exit: ALOGV("%s: exit", __func__); } -#endif /* FM_ENABLED end */ +#endif /* FM_POWER_OPT end */ diff --git a/hal/audio_hw.c b/hal/audio_hw.c index 13dc8c75..096d53c4 100644 --- a/hal/audio_hw.c +++ b/hal/audio_hw.c @@ -2078,9 +2078,6 @@ static int out_set_parameters(struct audio_stream *stream, const char *kvpairs) if (val != 0) { out->devices = val; - if (!out->standby) - select_devices(adev, out->usecase); - if (output_drives_call(adev, out)) { if(!voice_is_in_call(adev)) { if (adev->mode == AUDIO_MODE_IN_CALL) { @@ -2092,6 +2089,9 @@ static int out_set_parameters(struct audio_stream *stream, const char *kvpairs) voice_update_devices_for_all_voice_usecases(adev); } } + + if (!out->standby) + select_devices(adev, out->usecase); } pthread_mutex_unlock(&adev->lock); diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c index 064431ce..3da16e17 100644 --- a/hal/msm8916/platform.c +++ b/hal/msm8916/platform.c @@ -1926,9 +1926,7 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d my_data->fluence_in_audio_rec) snd_device = SND_DEVICE_IN_HANDSET_DMIC; } - } else if (source == AUDIO_SOURCE_FM_RX || - source == AUDIO_SOURCE_FM_RX_A2DP || - source == AUDIO_SOURCE_FM_TUNER) { + } else if (source == AUDIO_SOURCE_FM_TUNER) { snd_device = SND_DEVICE_IN_CAPTURE_FM; } else if (source == AUDIO_SOURCE_DEFAULT) { goto exit; @@ -1984,8 +1982,7 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d } else if (in_device & AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET || in_device & AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET) { snd_device = SND_DEVICE_IN_USB_HEADSET_MIC; - } else if (in_device & AUDIO_DEVICE_IN_FM_RX || - in_device & AUDIO_DEVICE_IN_FM_TUNER) { + } else if (in_device & AUDIO_DEVICE_IN_FM_TUNER) { snd_device = SND_DEVICE_IN_CAPTURE_FM; } else { ALOGE("%s: Unknown input device(s) %#x", __func__, in_device); @@ -2411,8 +2408,7 @@ int64_t platform_render_latency(audio_usecase_t usecase) int platform_update_usecase_from_source(int source, int usecase) { ALOGV("%s: input source :%d", __func__, source); - if (source == AUDIO_SOURCE_FM_RX_A2DP || - source == AUDIO_SOURCE_FM_TUNER) + if (source == AUDIO_SOURCE_FM_TUNER) usecase = USECASE_AUDIO_RECORD_FM_VIRTUAL; return usecase; } diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c index aa023474..b44ce976 100644 --- a/hal/msm8974/platform.c +++ b/hal/msm8974/platform.c @@ -2144,9 +2144,7 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d } } } - } else if (source == AUDIO_SOURCE_FM_RX || - source == AUDIO_SOURCE_FM_RX_A2DP|| - source == AUDIO_SOURCE_FM_TUNER) { + } else if (source == AUDIO_SOURCE_FM_TUNER) { snd_device = SND_DEVICE_IN_CAPTURE_FM; } else if (source == AUDIO_SOURCE_DEFAULT) { goto exit; @@ -2203,8 +2201,7 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d } else if (in_device & AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET || in_device & AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET) { snd_device = SND_DEVICE_IN_USB_HEADSET_MIC; - } else if (in_device & AUDIO_DEVICE_IN_FM_RX || - in_device & AUDIO_DEVICE_IN_FM_TUNER) { + } else if (in_device & AUDIO_DEVICE_IN_FM_TUNER) { snd_device = SND_DEVICE_IN_CAPTURE_FM; } else { ALOGE("%s: Unknown input device(s) %#x", __func__, in_device); @@ -2874,6 +2871,8 @@ int platform_update_usecase_from_source(int source, int usecase) { ALOGV("%s: input source :%d", __func__, source); switch(source) { + case AUDIO_SOURCE_FM_TUNER: + return USECASE_AUDIO_RECORD_FM_VIRTUAL; case AUDIO_SOURCE_VOICE_UPLINK: return USECASE_INCALL_REC_UPLINK; case AUDIO_SOURCE_VOICE_DOWNLINK: 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 b9d75054..112ab284 100644 --- a/policy_hal/AudioPolicyManager.cpp +++ b/policy_hal/AudioPolicyManager.cpp @@ -26,7 +26,6 @@ #else #define ALOGVV(a...) do { } while(0) #endif -#define MIN(a, b) ((a) < (b) ? (a) : (b)) // A device mask for all audio output devices that are considered "remote" when evaluating // active output devices in isStreamActiveRemotely() @@ -35,9 +34,6 @@ // type alone is not enough: the address must match too #define APM_AUDIO_DEVICE_MATCH_ADDRESS_ALL (AUDIO_DEVICE_IN_REMOTE_SUBMIX | \ AUDIO_DEVICE_OUT_REMOTE_SUBMIX) -// Following delay should be used if the calculated routing delay from all active -// input streams is higher than this value -#define MAX_VOICE_CALL_START_DELAY_MS 100 #include <inttypes.h> #include <math.h> @@ -254,6 +250,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)) { @@ -459,6 +472,14 @@ bool AudioPolicyManagerCustom::isOffloadSupported(const audio_offload_info_t& of ALOGV("isOffloadSupported: has_video == true, returning false"); return false; } + + const bool allowOffloadStreamingWithVideo = property_get_bool("av.streaming.offload.enable", + false /*default value*/); + if(offloadInfo.has_video && offloadInfo.is_streaming && !allowOffloadStreamingWithVideo) { + ALOGW("offload disabled by av.streaming.offload.enable = %s ", propValue ); + return false; + } + } //If duration is less than minimum value defined in property, return false @@ -843,9 +864,6 @@ void AudioPolicyManagerCustom::setPhoneState(audio_mode_t state) setStrategyMute(STRATEGY_SONIFICATION, false, desc, MUTE_TIME_MS, getDeviceForStrategy(STRATEGY_SONIFICATION, true /*fromCache*/)); } - ALOGV("Setting the delay from %dms to %dms", delayMs, - MIN(delayMs, MAX_VOICE_CALL_START_DELAY_MS)); - delayMs = MIN(delayMs, MAX_VOICE_CALL_START_DELAY_MS); } if (hasPrimaryOutput()) { @@ -1179,6 +1197,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; |