From b5b34c44033fee168711e11bbfdc4bb9230b9923 Mon Sep 17 00:00:00 2001 From: paul Date: Fri, 24 Oct 2008 15:58:39 +0000 Subject: [PATCH] no more dither when converting from float to 24 bit values - i am not sure how this was added to JACK but it was a mistake git-svn-id: svn+ssh://jackaudio.org/trunk/jack@3044 0c269be4-1314-0410-8aa9-9f06e86f4224 --- drivers/alsa/alsa_driver.c | 145 +++++++++++++------------------------ 1 file changed, 51 insertions(+), 94 deletions(-) diff --git a/drivers/alsa/alsa_driver.c b/drivers/alsa/alsa_driver.c index 4b40071..c56051a 100644 --- a/drivers/alsa/alsa_driver.c +++ b/drivers/alsa/alsa_driver.c @@ -233,145 +233,102 @@ alsa_driver_hw_specific (alsa_driver_t *driver, int hw_monitoring, static void alsa_driver_setup_io_function_pointers (alsa_driver_t *driver) { - if (SND_PCM_FORMAT_FLOAT_LE == driver->playback_sample_format) { - if (driver->playback_interleaved) { - driver->channel_copy = memcpy_interleave_d32_s32; + if (SND_PCM_FORMAT_FLOAT_LE == driver->playback_sample_format) { + if (driver->playback_interleaved) { + driver->channel_copy = memcpy_interleave_d32_s32; } else { driver->channel_copy = memcpy_fake; } driver->read_via_copy = sample_move_floatLE_sSs; driver->write_via_copy = sample_move_dS_floatLE; - } else { + } else { + switch (driver->playback_sample_bytes) { case 2: - if (driver->playback_interleaved) { + if (driver->playback_interleaved) { driver->channel_copy = memcpy_interleave_d16_s16; } else { driver->channel_copy = memcpy_fake; } - - switch (driver->dither) { + + switch (driver->dither) { case Rectangular: - jack_info("Rectangular dithering at 16 bits"); + jack_info("Rectangular dithering at 16 bits"); driver->write_via_copy = driver->quirk_bswap? sample_move_dither_rect_d16_sSs: sample_move_dither_rect_d16_sS; break; - - case Triangular: + + case Triangular: jack_info("Triangular dithering at 16 bits"); driver->write_via_copy = driver->quirk_bswap? sample_move_dither_tri_d16_sSs: sample_move_dither_tri_d16_sS; break; - + case Shaped: jack_info("Noise-shaped dithering at 16 bits"); - driver->write_via_copy = driver->quirk_bswap? + driver->write_via_copy = driver->quirk_bswap? sample_move_dither_shaped_d16_sSs: sample_move_dither_shaped_d16_sS; break; - + default: driver->write_via_copy = driver->quirk_bswap? sample_move_d16_sSs : - sample_move_d16_sS; + sample_move_d16_sS; break; } - break; - - case 3: + break; + + case 3: /* NO DITHER */ if (driver->playback_interleaved) { driver->channel_copy = memcpy_interleave_d24_s24; - } else { + } else { driver->channel_copy = memcpy_fake; } - - switch (driver->dither) { - case Rectangular: - jack_info("Rectangular dithering at 16 bits"); - driver->write_via_copy = driver->quirk_bswap? - sample_move_dither_rect_d24_sSs: - sample_move_dither_rect_d24_sS; - break; - - case Triangular: - jack_info("Triangular dithering at 16 bits"); - driver->write_via_copy = driver->quirk_bswap? - sample_move_dither_tri_d24_sSs: - sample_move_dither_tri_d24_sS; - break; - - case Shaped: - jack_info("Noise-shaped dithering at 16 bits"); - driver->write_via_copy = driver->quirk_bswap? - sample_move_dither_shaped_d24_sSs: - sample_move_dither_shaped_d24_sS; - break; - - default: - driver->write_via_copy = driver->quirk_bswap? - sample_move_d24_sSs: - sample_move_d24_sS; - break; - } + + driver->write_via_copy = driver->quirk_bswap? + sample_move_d24_sSs: + sample_move_d24_sS; + break; - case 4: + case 4: /* NO DITHER */ if (driver->playback_interleaved) { driver->channel_copy = memcpy_interleave_d32_s32; } else { driver->channel_copy = memcpy_fake; } - - switch (driver->dither) { - case Rectangular: - jack_info("Rectangular dithering at 16 bits"); - driver->write_via_copy = driver->quirk_bswap? - sample_move_dither_rect_d32u24_sSs: - sample_move_dither_rect_d32u24_sS; - break; - - case Triangular: - jack_info("Triangular dithering at 16 bits"); - driver->write_via_copy = driver->quirk_bswap? - sample_move_dither_tri_d32u24_sSs: - sample_move_dither_tri_d32u24_sS; - break; - - case Shaped: - jack_info("Noise-shaped dithering at 16 bits"); - driver->write_via_copy = driver->quirk_bswap? - sample_move_dither_shaped_d32u24_sSs: - sample_move_dither_shaped_d32u24_sS; - break; - - default: - driver->write_via_copy = driver->quirk_bswap? - sample_move_d32u24_sSs: - sample_move_d32u24_sS; + + driver->write_via_copy = driver->quirk_bswap? + sample_move_d32u24_sSs: + sample_move_d32u24_sS; break; - } - break; - } + + default: + jack_error ("impossible sample width (%d) discovered!", + driver->playback_sample_bytes); + exit (1); + } + } - switch (driver->capture_sample_bytes) { - case 2: - driver->read_via_copy = driver->quirk_bswap? - sample_move_dS_s16s: - sample_move_dS_s16; - break; - case 3: - driver->read_via_copy = driver->quirk_bswap? - sample_move_dS_s24s: - sample_move_dS_s24; - break; - case 4: - driver->read_via_copy = driver->quirk_bswap? - sample_move_dS_s32u24s: - sample_move_dS_s32u24; + switch (driver->capture_sample_bytes) { + case 2: + driver->read_via_copy = driver->quirk_bswap? + sample_move_dS_s16s: + sample_move_dS_s16; + break; + case 3: + driver->read_via_copy = driver->quirk_bswap? + sample_move_dS_s24s: + sample_move_dS_s24; + break; + case 4: + driver->read_via_copy = driver->quirk_bswap? + sample_move_dS_s32u24s: + sample_move_dS_s32u24; break; - } } }