shithub: opus

Download patch

ref: e53c4bc59bdfb69299371c75ccd743d05dd147ae
parent: d7231dd1a9268b8efdddf1eb39e12578815080e1
author: Jean-Marc Valin <[email protected]>
date: Sat Nov 6 17:41:40 EDT 2010

Fixes a silly fixed-point scaling PLC bug

--- a/libcelt/celt.c
+++ b/libcelt/celt.c
@@ -1434,7 +1434,7 @@
          _celt_lpc(lpc+c*LPC_ORDER, ac, LPC_ORDER);
       }
       for (i=0;i<LPC_ORDER;i++)
-         mem[i] = out_mem[c][MAX_PERIOD-1-i];
+         mem[i] = ROUND16(out_mem[c][MAX_PERIOD-1-i], SIG_SHIFT);
       fir(exc, lpc+c*LPC_ORDER, exc, MAX_PERIOD, LPC_ORDER, mem);
       /*for (i=0;i<MAX_PERIOD;i++)printf("%d ", exc[i]); printf("\n");*/
       /* Check if the waveform is decaying (and if so how fast) */
@@ -1467,7 +1467,7 @@
          S1 += SHR32(MULT16_16(out_mem[c][offset+i],out_mem[c][offset+i]),8);
       }
       for (i=0;i<LPC_ORDER;i++)
-         mem[i] = out_mem[c][MAX_PERIOD-1-i];
+         mem[i] = ROUND16(out_mem[c][MAX_PERIOD-1-i], SIG_SHIFT);
       for (i=0;i<len+st->mode->overlap;i++)
          e[i] = MULT16_32_Q15(fade, e[i]);
       iir(e, lpc+c*LPC_ORDER, e, len+st->mode->overlap, LPC_ORDER, mem);