summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorScott Mertz <scott@cyngn.com>2015-11-16 15:01:11 -0800
committerScott Mertz <scott@cyngn.com>2015-11-16 16:22:47 -0800
commit8eb0563bc46174151ef92f16a7c6273abdf31450 (patch)
tree8fb6b3366d0472adb7f27f2711ed8b1ea9388ed1
parente995fd7d13ae3945ba1aaf8545d2b4c161b7ffc2 (diff)
parent41131c15da54847887cfcf54287b93c19604ab50 (diff)
downloadhardware_qcom_audio-8eb0563bc46174151ef92f16a7c6273abdf31450.tar.gz
hardware_qcom_audio-8eb0563bc46174151ef92f16a7c6273abdf31450.tar.bz2
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.mk4
-rw-r--r--hal/audio_extn/audio_extn.c2
-rw-r--r--hal/audio_extn/audio_extn.h9
-rw-r--r--hal/audio_extn/fm.c4
-rw-r--r--hal/audio_hw.c6
-rw-r--r--hal/msm8916/platform.c10
-rw-r--r--hal/msm8974/platform.c9
-rw-r--r--policy_hal/Android.mk4
-rw-r--r--policy_hal/AudioPolicyManager.cpp39
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;