hal: Add support for multiples of Native sampling rate.
-Add support for multples of native sampling rate for codec
where mixing is not supported and mixing happens in DSP.
Change-Id: Ic7ae205086a31c67a034703a60d984e0f4c4b085
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 079d64c..c3f66e4 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -3455,7 +3455,7 @@
ALOGD("%s:DSD playback is supported", __func__);
my_data->is_dsd_supported = true;
my_data->is_asrc_supported = true;
- platform_set_native_support(NATIVE_AUDIO_MODE_MULTIPLE_44_1);
+ platform_set_native_support(NATIVE_AUDIO_MODE_MULTIPLE_MIX_IN_CODEC);
}
}
@@ -4133,12 +4133,14 @@
int platform_set_native_support(int na_mode)
{
if (NATIVE_AUDIO_MODE_SRC == na_mode || NATIVE_AUDIO_MODE_TRUE_44_1 == na_mode
- || NATIVE_AUDIO_MODE_MULTIPLE_44_1 == na_mode) {
+ || NATIVE_AUDIO_MODE_MULTIPLE_MIX_IN_CODEC == na_mode
+ || NATIVE_AUDIO_MODE_MULTIPLE_MIX_IN_DSP == na_mode) {
na_props.platform_na_prop_enabled = na_props.ui_na_prop_enabled = true;
na_props.na_mode = na_mode;
ALOGD("%s:napb: native audio playback enabled in (%s) mode", __func__,
((na_mode == NATIVE_AUDIO_MODE_SRC)?"SRC":
- (na_mode == NATIVE_AUDIO_MODE_TRUE_44_1)?"True":"Multiple"));
+ (na_mode == NATIVE_AUDIO_MODE_TRUE_44_1)?"True":
+ (na_mode == NATIVE_AUDIO_MODE_MULTIPLE_MIX_IN_CODEC)?"Multiple_Mix_Codec":"Multiple_Mix_DSP"));
}
else {
na_props.platform_na_prop_enabled = false;
@@ -4213,8 +4215,10 @@
mode = NATIVE_AUDIO_MODE_SRC;
else if (value && !strncmp(value, "true", sizeof("true")))
mode = NATIVE_AUDIO_MODE_TRUE_44_1;
- else if (value && !strncmp(value, "multiple", sizeof("multiple")))
- mode = NATIVE_AUDIO_MODE_MULTIPLE_44_1;
+ else if (value && !strncmp(value, "multiple_mix_codec", sizeof("multiple_mix_codec")))
+ mode = NATIVE_AUDIO_MODE_MULTIPLE_MIX_IN_CODEC;
+ else if (value && !strncmp(value, "multiple_mix_dsp", sizeof("multiple_mix_dsp")))
+ mode = NATIVE_AUDIO_MODE_MULTIPLE_MIX_IN_DSP;
else {
mode = NATIVE_AUDIO_MODE_INVALID;
ALOGE("%s:napb:native_audio_mode in platform info xml,invalid mode string",
@@ -5309,7 +5313,7 @@
} else if (NATIVE_AUDIO_MODE_SRC == na_mode &&
OUTPUT_SAMPLING_RATE_44100 == sample_rate) {
snd_device = SND_DEVICE_OUT_HEADPHONES_44_1;
- } else if (NATIVE_AUDIO_MODE_MULTIPLE_44_1 == na_mode &&
+ } else if (NATIVE_AUDIO_MODE_MULTIPLE_MIX_IN_CODEC == na_mode &&
(sample_rate % OUTPUT_SAMPLING_RATE_44100 == 0) &&
(out->format != AUDIO_FORMAT_DSD)) {
snd_device = SND_DEVICE_OUT_HEADPHONES_44_1;
@@ -7872,7 +7876,26 @@
ALOGD("%s:becf: afe: true napb active set rate to 44.1 khz",
__func__);
}
- } else if (na_mode != NATIVE_AUDIO_MODE_MULTIPLE_44_1) {
+ } else if (na_mode == NATIVE_AUDIO_MODE_MULTIPLE_MIX_IN_DSP) {
+ struct listnode *node;
+ list_for_each(node, &adev->usecase_list) {
+ struct audio_usecase *uc;
+ uc = node_to_item(node, struct audio_usecase, list);
+ struct stream_out *curr_out =
+ (struct stream_out*) uc->stream.out;
+
+ /*if native audio playback
+ * is active then it will take priority
+ */
+ if (curr_out && PCM_PLAYBACK == uc->type) {
+ if (is_offload_usecase(uc->id) &&
+ (curr_out->sample_rate % OUTPUT_SAMPLING_RATE_44100 == 0)) {
+ ALOGD("%s:napb:native stream detected %d sampling rate", __func__, curr_out->sample_rate);
+ sample_rate = curr_out->sample_rate;
+ }
+ }
+ }
+ } else if (na_mode != NATIVE_AUDIO_MODE_MULTIPLE_MIX_IN_CODEC) {
/*
* Map native sampling rates to upper limit range
* if multiple of native sampling rates are not supported.