Turns a 16x32 multiply into a 16x16 one in celt_preemphasis().
authorJean-Marc Valin <jmvalin@jmvalin.ca>
Thu, 5 Dec 2013 18:36:48 +0000 (13:36 -0500)
committerJean-Marc Valin <jmvalin@jmvalin.ca>
Thu, 5 Dec 2013 18:36:48 +0000 (13:36 -0500)
celt/celt_encoder.c

index ffff077..859f419 100644 (file)
@@ -520,11 +520,11 @@ void celt_preemphasis(const opus_val16 * OPUS_RESTRICT pcmp, celt_sig * OPUS_RES
    {
       for (i=0;i<N;i++)
       {
-         celt_sig x;
-         x = SHL32(inp[i], SIG_SHIFT);
+         opus_val16 x;
+         x = inp[i];
          /* Apply pre-emphasis */
-         inp[i] = x + m;
-         m = - MULT16_32_Q15(coef0, x);
+         inp[i] = SHL32(x, SIG_SHIFT) - m;
+         m = SHR32(MULT16_16(coef0, x), 15-SIG_SHIFT);
       }
    }
    *mem = m;