shithub: opus

Download patch

ref: 5ab07e6b9a349c5e612890236cd1a5fd06c6b9fc
parent: fedfe91d3783b3ae9eabccd60ab32e0f3d49e453
author: Jean-Marc Valin <[email protected]>
date: Sat Nov 3 07:36:39 EDT 2012

comb_filter() bypass for the case where the gain is zero.

--- a/celt/celt.c
+++ b/celt/celt.c
@@ -639,6 +639,14 @@
          {QCONST16(0.3066406250f, 15), QCONST16(0.2170410156f, 15), QCONST16(0.1296386719f, 15)},
          {QCONST16(0.4638671875f, 15), QCONST16(0.2680664062f, 15), QCONST16(0.f, 15)},
          {QCONST16(0.7998046875f, 15), QCONST16(0.1000976562f, 15), QCONST16(0.f, 15)}};
+
+   if (g0==0 && g1==0)
+   {
+      /* OPT: Happens to work without the OPUS_MOVE(), but only because the current encoder already copies x to y */
+      if (x!=y)
+         OPUS_MOVE(y, x, N);
+      return;
+   }
    g00 = MULT16_16_Q15(g0, gains[tapset0][0]);
    g01 = MULT16_16_Q15(g0, gains[tapset0][1]);
    g02 = MULT16_16_Q15(g0, gains[tapset0][2]);
@@ -666,6 +674,13 @@
       x2=x1;
       x1=x0;
 
+   }
+   if (g1==0)
+   {
+      /* OPT: Happens to work without the OPUS_MOVE(), but only because the current encoder already copies x to y */
+      if (x!=y)
+         OPUS_MOVE(y+overlap, x+overlap, N-overlap);
+      return;
    }
    /* OPT: For machines where the movs are costly, unroll by 5 */
    for (;i<N;i++)