Browse Source

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
tags/0.115.6
paul 17 years ago
parent
commit
b5b34c4403
1 changed files with 51 additions and 94 deletions
  1. +51
    -94
      drivers/alsa/alsa_driver.c

+ 51
- 94
drivers/alsa/alsa_driver.c View File

@@ -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;
}
}
}



Loading…
Cancel
Save