From c1c6855667e2123b3f6eca745ebcd6bb133eae9e Mon Sep 17 00:00:00 2001 From: theno23 Date: Sun, 18 Jan 2004 11:39:03 +0000 Subject: [PATCH] Fixed wrapping bug on non-dithered 16bit output when level = 1.0 +- 2^-15 Buf report and patch by Nick Lamb git-svn-id: svn+ssh://jackaudio.org/trunk/jack@617 0c269be4-1314-0410-8aa9-9f06e86f4224 --- drivers/alsa/memops.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/alsa/memops.c b/drivers/alsa/memops.c index 24321a1..324f686 100644 --- a/drivers/alsa/memops.c +++ b/drivers/alsa/memops.c @@ -341,18 +341,18 @@ void sample_move_dither_shaped_d24_sS (char *dst, jack_default_audio_sample_t * void sample_move_d16_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state) { - jack_default_audio_sample_t val; + int tmp; /* ALERT: signed sign-extension portability !!! */ while (nsamples--) { - val = *src; - if (val > 1.0f) { + tmp = f_round(*src * SAMPLE_MAX_16BIT); + if (tmp > SHRT_MAX) { *((short *)dst) = SHRT_MAX; - } else if (val < -1.0f) { + } else if (tmp < SHRT_MIN) { *((short *)dst) = SHRT_MIN; } else { - *((short *) dst) = (short) f_round(val * SAMPLE_MAX_16BIT); + *((short *) dst) = (short) tmp; } dst += dst_skip; src++;