hal: reset backend sample rate if device backend is not supported
During playback, output stream sample rate mismatches with device
backend supported sample rate. And the backend sample rate is still
set to stream sample rate. This causes mute issue happens.
Fix it by resetting backend sample rate at default sample rate if
backend supported sample rate and stream sample rate are mismatched.
CRs-Fixed: 2293122
Change-Id: I72da6ff176d0558cb7635a265d5fde5a9ea3942a
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 16ac7f4..0d919ec 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -1362,9 +1362,7 @@
platform_get_snd_device_name(snd_device),
platform_get_snd_device_name(usecase->out_snd_device),
platform_check_backends_match(snd_device, usecase->out_snd_device));
- if ((usecase->type != PCM_CAPTURE) &&
- (usecase->type != VOICE_CALL) &&
- (usecase != uc_info)) {
+ if ((usecase->type != PCM_CAPTURE) && (usecase != uc_info)) {
uc_derive_snd_device = derive_playback_snd_device(adev->platform,
usecase, uc_info, snd_device);
if (((uc_derive_snd_device != usecase->out_snd_device) || force_routing) &&
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 8a71b31..3337e10 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -6254,10 +6254,11 @@
ALOGD("%s:becf: afe: napb not active - set non fractional rate",
__func__);
}
- /*ensure AFE set to 48khz when sample rate less than 44.1khz*/
- if (sample_rate < OUTPUT_SAMPLING_RATE_44100) {
- sample_rate = CODEC_BACKEND_DEFAULT_SAMPLE_RATE;
- ALOGD("%s:becf: afe: napb set sample rate to default Sample Rate(48k)",__func__);
+ /*reset sample rate to 48khz if sample rate less than 44.1khz, or device backend dose not support 44.1 khz*/
+ if ((sample_rate == OUTPUT_SAMPLING_RATE_44100 && backend_idx != HEADPHONE_44_1_BACKEND)
+ || sample_rate < OUTPUT_SAMPLING_RATE_44100) {
+ sample_rate = CODEC_BACKEND_DEFAULT_SAMPLE_RATE;
+ ALOGD("%s:becf: afe: reset sample rate to default Sample Rate(48k)",__func__);
}
}
@@ -6384,13 +6385,6 @@
/*this is populated by check_codec_backend_cfg hence set default value to false*/
backend_cfg.passthrough_enabled = false;
- /*check if the stream sample 44.1Khz rate is supported of configured device sample rate. If not
- open afe at default sample rate.
- */
- if (backend_idx != HEADPHONE_44_1_BACKEND &&
- usecase->stream.out->sample_rate == OUTPUT_SAMPLING_RATE_44100)
- backend_cfg.sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
-
/* Set Backend sampling rate to 176.4 for DSD64 and
* 352.8Khz for DSD128.
* Set Bit Width to 16
@@ -6419,9 +6413,7 @@
for (i = 0; i < num_devices; i++) {
ALOGI("%s: new_snd_devices[%d] is %d", __func__, i, new_snd_devices[i]);
if ((platform_check_codec_backend_cfg(adev, usecase, new_snd_devices[i],
- &backend_cfg)) ||
- ((usecase->out_snd_device != SND_DEVICE_NONE) &&
- !platform_check_backends_match(usecase->out_snd_device, snd_device))) {
+ &backend_cfg))) {
ret = platform_set_codec_backend_cfg(adev, new_snd_devices[i],
backend_cfg);
if (!ret) {