Fixes an aliasing bug in the MDCT when the frame size isn't a multiple of 4.
authorMarcello Caramma (mcaramma) <mcaramma@cisco.com>
Mon, 24 Feb 2014 20:06:46 +0000 (15:06 -0500)
committerJean-Marc Valin <jmvalin@jmvalin.ca>
Mon, 24 Feb 2014 20:06:46 +0000 (15:06 -0500)
In that case, the yp0 and yp1 ended up aliasing for the last element,
despite being marked as restrict.

Signed-off-by: Jean-Marc Valin <jmvalin@jmvalin.ca>
celt/mdct.c

index 1634e8e..fa5098c 100644 (file)
@@ -276,8 +276,8 @@ void clt_mdct_backward(const mdct_lookup *l, kiss_fft_scalar *in, kiss_fft_scala
    /* Post-rotate and de-shuffle from both ends of the buffer at once to make
       it in-place. */
    {
    /* Post-rotate and de-shuffle from both ends of the buffer at once to make
       it in-place. */
    {
-      kiss_fft_scalar * OPUS_RESTRICT yp0 = out+(overlap>>1);
-      kiss_fft_scalar * OPUS_RESTRICT yp1 = out+(overlap>>1)+N2-2;
+      kiss_fft_scalar * yp0 = out+(overlap>>1);
+      kiss_fft_scalar * yp1 = out+(overlap>>1)+N2-2;
       const kiss_twiddle_scalar *t = &trig[0];
       /* Loop to (N4+1)>>1 to handle odd N4. When N4 is odd, the
          middle pair will be computed twice. */
       const kiss_twiddle_scalar *t = &trig[0];
       /* Loop to (N4+1)>>1 to handle odd N4. When N4 is odd, the
          middle pair will be computed twice. */