hal: 64KHz clips are playing mute on HDMI
- 64KHz clips are playing mute on HDMI device
- The root cause of the issue is copp is getting
configured at stream sample rate which is not
supported by ADM(DSP)
- Fix contains mapping of sample rates to the
closest match supported by HDMI device
- CRs-Fixed: 2107374
Change-Id: I918df1d7adcbbde00d82a47fc95b96d9b18fe334
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index 45b02e3..50ab6f9 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -6708,6 +6708,9 @@
} else
*sample_rate = stream_sr;
+ if (snd_device == SND_DEVICE_OUT_HDMI)
+ *sample_rate = platform_get_supported_sampling_rate_on_hdmi(stream_sr);
+
ALOGI("sn_device %d device sr %d stream sr %d copp sr %d", snd_device, device_sr, stream_sr
, *sample_rate);
@@ -7811,6 +7814,48 @@
return MAX_CODEC_BACKENDS;
}
+int platform_get_supported_sampling_rate_on_hdmi(uint32_t stream_sr)
+{
+ int sample_rate;
+ switch (stream_sr){
+ case 8000:
+ case 11025:
+ case 16000:
+ case 22050:
+ case 32000:
+ case 48000:
+ sample_rate = 48000;
+ break;
+ case 44100:
+ sample_rate = 44100;
+ break;
+ case 64000:
+ case 96000:
+ sample_rate = 96000;
+ break;
+ case 88200:
+ sample_rate = 88200;
+ break;
+ case 176400:
+ sample_rate = 176400;
+ break;
+ case 192000:
+ sample_rate = 192000;
+ break;
+ case 352800:
+ sample_rate = 352800;
+ break;
+ case 384000:
+ sample_rate = 384000;
+ break;
+ case 144000:
+ default:
+ sample_rate = 48000;
+ break;
+ }
+ return sample_rate;
+}
+
#if defined(PLATFORM_MSMFALCON)
int platform_get_mmap_data_fd(void *platform, int fe_dev, int dir, int *fd,
uint32_t *size)
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 64dde86..2f2128a 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -6739,8 +6739,10 @@
} else
*sample_rate = stream_sr;
- ALOGI("sn_device %d device sr %d stream sr %d copp sr %d", snd_device, device_sr, stream_sr
-, *sample_rate);
+ if (snd_device == SND_DEVICE_OUT_HDMI)
+ *sample_rate = platform_get_supported_sampling_rate_on_hdmi(stream_sr);
+
+ ALOGI("sn_device %d device sr %d stream sr %d copp sr %d", snd_device, device_sr, stream_sr, *sample_rate);
}
@@ -7548,6 +7550,47 @@
return MAX_CODEC_BACKENDS;
}
+int platform_get_supported_sampling_rate_on_hdmi(uint32_t stream_sr)
+{
+ int sample_rate;
+ switch (stream_sr){
+ case 8000:
+ case 11025:
+ case 16000:
+ case 22050:
+ case 32000:
+ case 48000:
+ sample_rate = 48000;
+ break;
+ case 44100:
+ sample_rate = 44100;
+ break;
+ case 64000:
+ case 96000:
+ sample_rate = 96000;
+ break;
+ case 88200:
+ sample_rate = 88200;
+ break;
+ case 176400:
+ sample_rate = 176400;
+ break;
+ case 192000:
+ sample_rate = 192000;
+ break;
+ case 352800:
+ sample_rate = 352800;
+ break;
+ case 384000:
+ sample_rate = 384000;
+ break;
+ case 144000:
+ default:
+ sample_rate = 48000;
+ break;
+ }
+ return sample_rate;
+}
#if defined (PLATFORM_MSM8998) || (PLATFORM_SDM845) || (PLATFORM_SDM670)
int platform_get_mmap_data_fd(void *platform, int fe_dev, int dir, int *fd,
diff --git a/hal/platform_api.h b/hal/platform_api.h
index 4407d2c..0674761 100644
--- a/hal/platform_api.h
+++ b/hal/platform_api.h
@@ -184,6 +184,7 @@
int platform_set_channel_allocation(void *platform, int channel_alloc);
int platform_get_edid_info(void *platform);
+int platform_get_supported_sampling_rate_on_hdmi(uint32_t stream_sr);
int platform_set_channel_map(void *platform, int ch_count, char *ch_map,
int snd_id);
int platform_set_stream_channel_map(void *platform, audio_channel_mask_t channel_mask,