From 074fa4df3458132ac5ec86281c7ef2f18d76abb9 Mon Sep 17 00:00:00 2001 From: Ramu Gottipati Date: Tue, 11 Sep 2018 20:05:51 +0530 Subject: [PATCH] hal: Configure backend with 24-bit for 24-bit playback - For 24bit stream backend is getting configured to 32bit which is undesirable. - To fix this, changes are done to configure backend as 24bit for 24bit stream and 32bit for 32bit stream. Change-Id: If4186d2e476c745f584903edc02818eb0af6ee12 --- hal/audio_extn/utils.c | 11 ++++++----- hal/msm8974/platform.c | 11 +++++++---- 2 files changed, 13 insertions(+), 9 deletions(-) mode change 100755 => 100644 hal/msm8974/platform.c diff --git a/hal/audio_extn/utils.c b/hal/audio_extn/utils.c index 6aab3477..7426b336 100644 --- a/hal/audio_extn/utils.c +++ b/hal/audio_extn/utils.c @@ -704,13 +704,14 @@ void audio_extn_utils_update_stream_output_app_type_cfg(void *platform, struct stream_format *sf_info; char value[PROPERTY_VALUE_MAX] = {0}; - if ((bit_width >= 24) && - (devices & AUDIO_DEVICE_OUT_SPEAKER)) { - int32_t bw = platform_get_snd_device_bit_width(SND_DEVICE_OUT_SPEAKER); - if (-ENOSYS != bw) + if (devices & AUDIO_DEVICE_OUT_SPEAKER) { + int bw = platform_get_snd_device_bit_width(SND_DEVICE_OUT_SPEAKER); + if ((-ENOSYS != bw) && (bit_width > (uint32_t)bw)) bit_width = (uint32_t)bw; + else if (-ENOSYS == bw) + bit_width = CODEC_BACKEND_DEFAULT_BIT_WIDTH; sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE; - ALOGI("%s Allowing 24-bit playback on speaker ONLY at default sampling rate", __func__); + ALOGI("%s Allowing 24 and above bits playback on speaker ONLY at default sampling rate", __func__); } property_get("vendor.audio.playback.mch.downsample",value,""); diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c old mode 100755 new mode 100644 index 313c0676..69b3f622 --- a/hal/msm8974/platform.c +++ b/hal/msm8974/platform.c @@ -6267,11 +6267,14 @@ static bool platform_check_codec_backend_cfg(struct audio_device* adev, * backend with speaker, and these devices are restricited to 48kHz. */ if (platform_check_backends_match(SND_DEVICE_OUT_SPEAKER, snd_device)) { - - if (bit_width >= 24) { - bit_width = platform_get_snd_device_bit_width(SND_DEVICE_OUT_SPEAKER); + int bw = platform_get_snd_device_bit_width(SND_DEVICE_OUT_SPEAKER); + if ((-ENOSYS != bw) && (bit_width > (uint32_t)bw)) { + bit_width = (uint32_t)bw; ALOGD("%s:becf: afe: reset bitwidth to %d (based on supported" - " value for this platform)", __func__, bit_width); + " value for this platform)", __func__, bit_width); + } else if (-ENOSYS == bw) { + bit_width = CODEC_BACKEND_DEFAULT_BIT_WIDTH; + ALOGD("%s:becf: afe: reset to default bitwidth %d", __func__, bit_width); } sample_rate = CODEC_BACKEND_DEFAULT_SAMPLE_RATE; ALOGD("%s:becf: afe: playback on codec device not supporting native playback set "