From 157ac815f932ac8e83a1c1e9d3e1af073a3e005a Mon Sep 17 00:00:00 2001 From: Alexandre Ratchov Date: Wed, 18 Mar 2015 12:19:00 +0100 Subject: [PATCH] Bug 1144087 - "Audio glitches on OpenBSD caused by rounding errors." r=kinetik --- media/libcubeb/src/cubeb_sndio.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/media/libcubeb/src/cubeb_sndio.c b/media/libcubeb/src/cubeb_sndio.c index 01f96346cd6..e6d531a4f18 100644 --- a/media/libcubeb/src/cubeb_sndio.c +++ b/media/libcubeb/src/cubeb_sndio.c @@ -4,6 +4,7 @@ * This program is made available under an ISC-style license. See the * accompanying file LICENSE for details. */ +#include #include #include #include @@ -49,9 +50,16 @@ float_to_s16(void *ptr, long nsamp) { int16_t *dst = ptr; float *src = ptr; + int s; - while (nsamp-- > 0) - *(dst++) = *(src++) * 32767; + while (nsamp-- > 0) { + s = lrintf(*(src++) * 32768); + if (s < -32768) + s = -32768; + else if (s > 32767) + s = 32767; + *(dst++) = s; + } } static void