From bca70b87efc40595e2bb469d63c77618872bd97b Mon Sep 17 00:00:00 2001 From: Jean-Marc Valin <jmvalin@jmvalin.ca> Date: Fri, 15 Jul 2016 10:57:21 -0400 Subject: [PATCH] Fixes opus_pcm_soft_clip() returning values slightly larger than +/-1 with -ffast-math --- src/opus.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/opus.c b/src/opus.c index b7b0ea06c..2b47cdac6 100644 --- a/src/opus.c +++ b/src/opus.c @@ -104,6 +104,10 @@ OPUS_EXPORT void opus_pcm_soft_clip(float *_x, int N, int C, float *declip_mem) /* Compute a such that maxval + a*maxval^2 = 1 */ a=(maxval-1)/(maxval*maxval); + /* Slightly boost "a" by 2^-24. This is just enough to ensure -ffast-math + does not cause output values larger than +/-1, but small enough not + to matter even for 24-bit output. */ + a += a*6e-8; if (x[i*C]>0) a = -a; /* Apply soft clipping */ -- GitLab