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);
--
⑨