diff options
author | Timo Wischer <twischer@de.adit-jv.com> | 2018-11-20 15:46:43 +0100 |
---|---|---|
committer | Filipe Coelho <falktx@falktx.com> | 2019-01-17 00:56:39 +0100 |
commit | d017e1fffeb15c9baee46220642dda5030409a02 (patch) | |
tree | 72d3f2a194622d20526a67d7bf82b5a5e349de43 | |
parent | bb99e09b99ab2c71f9a91ca0fb8cbb996df5dbc6 (diff) | |
download | jack2-d017e1fffeb15c9baee46220642dda5030409a02.tar.gz |
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.
Signed-off-by: Timo Wischer <twischer@de.adit-jv.com>
-rw-r--r-- | linux/alsa/alsa_driver.c | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/linux/alsa/alsa_driver.c b/linux/alsa/alsa_driver.c index 39be0624..8e79d52b 100644 --- a/linux/alsa/alsa_driver.c +++ b/linux/alsa/alsa_driver.c @@ -312,9 +312,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: @@ -341,9 +351,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; } } |