Merge "hal: limit 44.1 Native to tasha codecs"
diff --git a/hal/audio_extn/audio_defs.h b/hal/audio_extn/audio_defs.h
index 96b0a8b..96a7a19 100644
--- a/hal/audio_extn/audio_defs.h
+++ b/hal/audio_extn/audio_defs.h
@@ -99,4 +99,6 @@
/* Query if Proxy can be Opend */
#define AUDIO_PARAMETER_KEY_CAN_OPEN_PROXY "can_open_proxy"
+#define AUDIO_PARAMETER_IS_HW_DECODER_SESSION_ALLOWED "is_hw_dec_session_allowed"
+
#endif /* AUDIO_DEFS_H */
diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h
index fae114e..3b1d817 100644
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -103,7 +103,8 @@
#endif
#ifdef AUDIO_EXTN_FORMATS_ENABLED
-#define AUDIO_OUTPUT_BIT_WIDTH (config->offload_info.bit_width)
+#define AUDIO_OUTPUT_BIT_WIDTH ((config->offload_info.bit_width == 32) ? 24\
+ :config->offload_info.bit_width)
#else
#define AUDIO_OUTPUT_BIT_WIDTH (CODEC_BACKEND_DEFAULT_BIT_WIDTH)
#endif
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index e93e7ca..beb17b6 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -148,12 +148,12 @@
#define MAX_DSP_ONLY_DECODERS 6
char * dsp_only_decoders_mime[] = {
- "audio/x-ms-wma" /* wma*/ ,
- "audio/x-ms-wma-lossless" /* wma lossless */ ,
- "audio/x-ms-wma-pro" /* wma prop */ ,
- "audio/amr-wb-plus" /* amr wb plus */ ,
- "audio/alac" /*alac */ ,
- "audio/x-ape" /*ape */,
+ "audio/x-ms-wma" /* wma*/ ,
+ "audio/x-ms-wma-lossless" /* wma lossless */ ,
+ "audio/x-ms-wma-pro" /* wma prop */ ,
+ "audio/amr-wb-plus" /* amr wb plus */ ,
+ "audio/alac" /*alac */ ,
+ "audio/x-ape" /*ape */,
};
enum {
@@ -1301,6 +1301,10 @@
ALOGE("%s error in sending vbat adc data to acdb", __func__);
}
+ /* MAD calibration is handled by sound trigger HAL, skip here */
+ if (type == WCD9XXX_MAD_CAL)
+ continue;
+
calib.get_size = 1;
ret = acdb_loader_get_calibration(cal_name_info[type], sizeof(struct param_data),
&calib);
@@ -3524,6 +3528,8 @@
char value[512] = {0};
int ret;
char *kv_pairs = NULL;
+ char propValue[PROPERTY_VALUE_MAX]={0};
+ bool prop_playback_enabled = false;
ret = str_parms_get_str(query, AUDIO_PARAMETER_KEY_SLOWTALK,
value, sizeof(value));
@@ -3554,12 +3560,16 @@
ret = str_parms_get_str(query, AUDIO_PARAMETER_IS_HW_DECODER_SESSION_ALLOWED,
value, sizeof(value));
-
if (ret >= 0) {
int isallowed = 1; /*true*/
- if(voice_is_in_call(my_data->adev) ||
- (SND_CARD_STATE_OFFLINE == get_snd_card_state(my_data->adev))) {
+ if (property_get("voice.playback.conc.disabled", propValue, NULL)) {
+ prop_playback_enabled = atoi(propValue) ||
+ !strncmp("true", propValue, 4);
+ }
+
+ if (prop_playback_enabled && (voice_is_in_call(my_data->adev) ||
+ (SND_CARD_STATE_OFFLINE == get_snd_card_state(my_data->adev)))) {
char *decoder_mime_type = value;
//check if unsupported mime type or not
@@ -3568,7 +3578,7 @@
for (i = 0; i < sizeof(dsp_only_decoders_mime)/sizeof(dsp_only_decoders_mime[0]); i++) {
if (!strncmp(decoder_mime_type, dsp_only_decoders_mime[i],
strlen(dsp_only_decoders_mime[i]))) {
- ALOGE("Rejecting request for DSP only session from HAL during voice call/SSR state");
+ ALOGD("Rejecting request for DSP only session from HAL during voice call/SSR state");
isallowed = 0;
break;
}
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 5a89f16..d519764 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -131,6 +131,18 @@
[WCD9XXX_MBHC_CAL] = "mbhc_cal",
};
+#define AUDIO_PARAMETER_IS_HW_DECODER_SESSION_ALLOWED "is_hw_dec_session_allowed"
+
+char * dsp_only_decoders_mime[] = {
+ "audio/x-ms-wma" /* wma*/ ,
+ "audio/x-ms-wma-lossless" /* wma lossless */ ,
+ "audio/x-ms-wma-pro" /* wma prop */ ,
+ "audio/amr-wb-plus" /* amr wb plus */ ,
+ "audio/alac" /*alac */ ,
+ "audio/x-ape" /*ape */,
+};
+
+
enum {
VOICE_FEATURE_SET_DEFAULT,
VOICE_FEATURE_SET_VOLUME_BOOST
@@ -1002,6 +1014,10 @@
struct wcdcal_ioctl_buffer codec_buffer;
struct param_data calib;
+ /* MAD calibration is handled by sound trigger HAL, skip here */
+ if (type == WCD9XXX_MAD_CAL)
+ continue;
+
calib.get_size = 1;
ret = acdb_loader_get_calibration(cal_name_info[type], sizeof(struct param_data),
&calib);
@@ -3125,6 +3141,36 @@
get_audiocal(platform, query, reply);
native_audio_get_params(query, reply, value, sizeof(value));
+ ret = str_parms_get_str(query, AUDIO_PARAMETER_IS_HW_DECODER_SESSION_ALLOWED,
+ value, sizeof(value));
+ if (ret >= 0) {
+ int isallowed = 1; /*true*/
+
+ if (property_get("voice.playback.conc.disabled", propValue, NULL)) {
+ prop_playback_enabled = atoi(propValue) ||
+ !strncmp("true", propValue, 4);
+ }
+
+ if (prop_playback_enabled && (voice_is_in_call(my_data->adev) ||
+ (SND_CARD_STATE_OFFLINE == get_snd_card_state(my_data->adev)))) {
+ char *decoder_mime_type = value;
+
+ //check if unsupported mime type or not
+ if(decoder_mime_type) {
+ int i = 0;
+ for (i = 0; i < sizeof(dsp_only_decoders_mime)/sizeof(dsp_only_decoders_mime[0]); i++) {
+ if (!strncmp(decoder_mime_type, dsp_only_decoders_mime[i],
+ strlen(dsp_only_decoders_mime[i]))) {
+ ALOGD("Rejecting request for DSP only session from HAL during voice call/SSR state");
+ isallowed = 0;
+ break;
+ }
+ }
+ }
+ }
+ str_parms_add_int(reply, AUDIO_PARAMETER_IS_HW_DECODER_SESSION_ALLOWED, isallowed);
+ }
+
done:
kv_pairs = str_parms_to_str(reply);
ALOGV_IF(kv_pairs != NULL, "%s: exit: returns - %s", __func__, kv_pairs);
diff --git a/visualizer/offload_visualizer.c b/visualizer/offload_visualizer.c
index d363b77..b2f0952 100644
--- a/visualizer/offload_visualizer.c
+++ b/visualizer/offload_visualizer.c
@@ -300,20 +300,40 @@
return false;
}
-int configure_proxy_capture(struct mixer *mixer, int value) {
- const char *proxy_ctl_name = "AFE_PCM_RX Audio Mixer MultiMedia4";
+int set_control(const char* name, struct mixer *mixer, int value) {
struct mixer_ctl *ctl;
+ ctl = mixer_get_ctl_by_name(mixer, name);
+ if (ctl == NULL) {
+ ALOGW("%s: could not get %s ctl", __func__, name);
+ return -EINVAL;
+ }
+ if (mixer_ctl_set_value(ctl, 0, value) != 0) {
+ ALOGW("%s: error setting value %d on %s ", __func__, value, name);
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+int configure_proxy_capture(struct mixer *mixer, int value) {
+ int retval = 0;
+
if (value && acdb_send_audio_cal)
acdb_send_audio_cal(AFE_PROXY_ACDB_ID, ACDB_DEV_TYPE_OUT);
- ctl = mixer_get_ctl_by_name(mixer, proxy_ctl_name);
- if (ctl == NULL) {
- ALOGW("%s: could not get %s ctl", __func__, proxy_ctl_name);
- return -EINVAL;
- }
- if (mixer_ctl_set_value(ctl, 0, value) != 0)
- ALOGW("%s: error setting value %d on %s ", __func__, value, proxy_ctl_name);
+ retval = set_control("AFE_PCM_RX Audio Mixer MultiMedia4", mixer, value);
+
+ if (retval != 0)
+ return retval;
+
+ // Extending visualizer to capture for compress2 path as well.
+ // for extending it to multiple offload either this needs to be extended
+ // or need to find better solution to enable only active offload sessions
+
+ retval = set_control("AFE_PCM_RX Audio Mixer MultiMedia7", mixer, value);
+ if (retval != 0)
+ return retval;
return 0;
}