summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimo Wischer <twischer@de.adit-jv.com>2018-11-20 15:46:43 +0100
committerFilipe Coelho <falktx@falktx.com>2019-01-17 00:56:39 +0100
commitd017e1fffeb15c9baee46220642dda5030409a02 (patch)
tree72d3f2a194622d20526a67d7bf82b5a5e349de43
parentbb99e09b99ab2c71f9a91ca0fb8cbb996df5dbc6 (diff)
downloadjack2-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.c33
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;
}
}