ref: 4d269fc90e6f4cd493193cc09145f44cd25c474c
parent: 38e08cf7de429dbfbee120409bd8583423f26ca7
author: Jean-Marc Valin <jeanmarcv@google.com>
date: Fri Jun 6 12:08:47 EDT 2025
Saturate dc_reject() input to prevent wrap-around
--- a/src/opus_encoder.c
+++ b/src/opus_encoder.c
@@ -457,7 +457,9 @@
for (i=0;i<len;i++)
{
opus_val32 x, y;
- x = SHL32((opus_val32)in[channels*i+c], 14-RES_SHIFT);
+ /* Saturate at +6 dBFS to avoid any wrap-around. */
+ x = SATURATE((opus_val32)in[channels*i+c], (1<<16<<RES_SHIFT)-1);
+ x = SHL32(x, 14-RES_SHIFT);
y = x-hp_mem[2*c];
hp_mem[2*c] = hp_mem[2*c] + PSHR32(x - hp_mem[2*c], shift);
#ifdef ENABLE_RES24
--
⑨