From fc5275ddfef222ef32425704593fedfbc09ea935 Mon Sep 17 00:00:00 2001 From: Timo Wischer Date: Tue, 20 Nov 2018 15:46:43 +0100 Subject: [PATCH] alsa_driver: Use float to S32 conversion if requested sample_move_d32u24_sS() converts into samples like 0x00****** but S32 format expects samples like 0x********. Therefore it will not use the full volume range when also using sample_move_d32u24_sS() for S32. Change-Id: I4afe9bd0c3b342975536f5f98fa4dadd2eaee02d Signed-off-by: Timo Wischer --- linux/alsa/alsa_driver.c | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/linux/alsa/alsa_driver.c b/linux/alsa/alsa_driver.c index 39f030ee..86c00a21 100644 --- a/linux/alsa/alsa_driver.c +++ b/linux/alsa/alsa_driver.c @@ -348,9 +348,19 @@ alsa_driver_setup_io_function_pointers (alsa_driver_t *driver) break; case 4: /* NO DITHER */ - driver->write_via_copy = driver->quirk_bswap? - sample_move_d32u24_sSs: - sample_move_d32u24_sS; + switch (driver->playback_sample_format) { + case SND_PCM_FORMAT_S24_LE: + case SND_PCM_FORMAT_S24_BE: + driver->write_via_copy = driver->quirk_bswap? + sample_move_d32u24_sSs: + sample_move_d32u24_sS; + break; + default: + driver->write_via_copy = driver->quirk_bswap? + sample_move_d32_sSs: + sample_move_d32_sS; + break; + } break; default: @@ -377,9 +387,20 @@ alsa_driver_setup_io_function_pointers (alsa_driver_t *driver) sample_move_dS_s24; break; case 4: - driver->read_via_copy = driver->quirk_bswap? - sample_move_dS_s32u24s: - sample_move_dS_s32u24; + switch (driver->playback_sample_format) { + case SND_PCM_FORMAT_S24_LE: + case SND_PCM_FORMAT_S24_BE: + driver->read_via_copy = driver->quirk_bswap? + sample_move_dS_s32u24s: + sample_move_dS_s32u24; + break; + default: + driver->read_via_copy = driver->quirk_bswap? + sample_move_dS_s32s: + sample_move_dS_s32; + break; + } + break; } }