summaryrefslogtreecommitdiffstats
path: root/thirdparty/opus/opus.c
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2017-01-05 22:35:39 +0100
committerRémi Verschelde <rverschelde@gmail.com>2017-01-05 23:28:02 +0100
commit9845bdde8dc3005185dc43c493380858d717596a (patch)
tree82f7c4e18ded15007934203cef5e77c761997a3e /thirdparty/opus/opus.c
parent2ca0337f5f8564b62920087d898f8f4a580d7b3b (diff)
downloadredot-engine-9845bdde8dc3005185dc43c493380858d717596a.tar.gz
opus: Update to upstream libopus 1.1.3
Diffstat (limited to 'thirdparty/opus/opus.c')
-rw-r--r--thirdparty/opus/opus.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/thirdparty/opus/opus.c b/thirdparty/opus/opus.c
index e9ce93b308..f76f125cfa 100644
--- a/thirdparty/opus/opus.c
+++ b/thirdparty/opus/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^-22. 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*2.4e-7;
if (x[i*C]>0)
a = -a;
/* Apply soft clipping */
@@ -201,8 +205,10 @@ int opus_packet_parse_impl(const unsigned char *data, opus_int32 len,
opus_int32 pad = 0;
const unsigned char *data0 = data;
- if (size==NULL)
+ if (size==NULL || len<0)
return OPUS_BAD_ARG;
+ if (len==0)
+ return OPUS_INVALID_PACKET;
framesize = opus_packet_get_samples_per_frame(data, 48000);