shithub: opus

Download patch

ref: 7b317ceb12f33499b32690762d07f5f220a321fa
parent: a6d29ed5311896e72a57495c811b4633d4caaa69
author: Jean-Marc Valin <jeanmarcv@google.com>
date: Thu Jul 4 17:32:34 EDT 2024

celt_sqrt() can return 32-bit value 32768

EXTEND32() would warn that the input isn't 16-bit

--- a/celt/bands.c
+++ b/celt/bands.c
@@ -123,7 +123,7 @@
                } while (++j<eBands[i+1]<<LM);
             }
             /* We're adding one here to ensure the normalized band isn't larger than unity norm */
-            bandE[i+c*m->nbEBands] = EPSILON+VSHR32(EXTEND32(celt_sqrt(sum)),-shift);
+            bandE[i+c*m->nbEBands] = EPSILON+VSHR32(celt_sqrt(sum),-shift);
          } else {
             bandE[i+c*m->nbEBands] = EPSILON;
          }
--- a/src/opus_encoder.c
+++ b/src/opus_encoder.c
@@ -798,7 +798,7 @@
       corr = SHR32(frac_div32(mem->XY,EPSILON+MULT16_16(sqrt_xx,sqrt_yy)),16);
       /* Approximate loudness difference */
       ldiff = MULT16_16(Q15ONE, ABS16(qrrt_xx-qrrt_yy))/(EPSILON+qrrt_xx+qrrt_yy);
-      width = MULT16_16_Q15(celt_sqrt(QCONST32(1.f,30)-MULT16_16(corr,corr)), ldiff);
+      width = MULT16_16_Q15(MIN16(Q15ONE, celt_sqrt(QCONST32(1.f,30)-MULT16_16(corr,corr))), ldiff);
       /* Smoothing over one second */
       mem->smoothed_width += (width-mem->smoothed_width)/frame_rate;
       /* Peak follower */
--