shithub: opus

Download patch

ref: 4df773d092c2c7d63af2326ebc397cc84e65162e
parent: 08bcc6e46227fca01aa3de3f3512f8b692d8d36b
author: Jean-Marc Valin <jeanmarcv@google.com>
date: Tue May 6 12:41:40 EDT 2025

Improve transient_analysis() fixed-point accuracy

--- a/celt/celt_encoder.c
+++ b/celt/celt_encoder.c
@@ -259,6 +259,9 @@
            3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  2,
    };
    SAVE_STACK;
+#ifdef FIXED_POINT
+   int in_shift = IMAX(0, celt_ilog2(1+celt_maxabs32(in, C*len))-14);
+#endif
    ALLOC(tmp, len, opus_val16);
 
    *weak_transient = 0;
@@ -290,7 +293,7 @@
          float mem00;
 #endif
          opus_val32 x,y;
-         x = SHR32(in[i+c*len],SIG_SHIFT);
+         x = SHR32(in[i+c*len],in_shift);
          y = ADD32(mem0, x);
 #ifdef FIXED_POINT
          mem0 = mem1 + y - SHL32(x,1);
--