summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNils Wallménius <nils@rockbox.org>2012-12-01 21:28:59 +0100
committerJean-Marc Valin <jmvalin@jmvalin.ca>2012-12-01 15:54:04 -0500
commitcacb5661b36ed8d7497a32e611fa43df916e3426 (patch)
tree8c4e3b95408ebde57ae72dbbcc166823bb16cbfa
parente0884feb36599f3b3196ca3629bb988c50dc8d26 (diff)
downloadopus-cacb5661b36ed8d7497a32e611fa43df916e3426.tar.gz
Place output of imdct post-rotate and deshuffle in out buffer to avoid copying and simplify the code.
Signed-off-by: Jean-Marc Valin <jmvalin@jmvalin.ca>
-rw-r--r--celt/mdct.c36
1 files changed, 8 insertions, 28 deletions
diff --git a/celt/mdct.c b/celt/mdct.c
index 3123908a..bfdeff38 100644
--- a/celt/mdct.c
+++ b/celt/mdct.c
@@ -256,8 +256,8 @@ void clt_mdct_backward(const mdct_lookup *l, kiss_fft_scalar *in, kiss_fft_scala
/* Post-rotate and de-shuffle */
{
kiss_fft_scalar * OPUS_RESTRICT fp = f;
- kiss_fft_scalar * OPUS_RESTRICT yp0 = f2;
- kiss_fft_scalar * OPUS_RESTRICT yp1 = f2+N2-1;
+ kiss_fft_scalar * OPUS_RESTRICT yp0 = out+overlap/2;
+ kiss_fft_scalar * OPUS_RESTRICT yp1 = out+overlap/2+N2-1;
const kiss_twiddle_scalar *t = &l->trig[0];
for(i=0;i<N4;i++)
@@ -275,24 +275,18 @@ void clt_mdct_backward(const mdct_lookup *l, kiss_fft_scalar *in, kiss_fft_scala
yp1 -= 2;
}
}
- out -= (N2-overlap)>>1;
+
/* Mirror on both sides for TDAC */
{
- kiss_fft_scalar * OPUS_RESTRICT fp1 = f2+N4-1;
- kiss_fft_scalar * OPUS_RESTRICT xp1 = out+N2-1;
- kiss_fft_scalar * OPUS_RESTRICT yp1 = out+N4-overlap/2;
+ kiss_fft_scalar * OPUS_RESTRICT xp1 = out+overlap-1;
+ kiss_fft_scalar * OPUS_RESTRICT yp1 = out;
const opus_val16 * OPUS_RESTRICT wp1 = window;
const opus_val16 * OPUS_RESTRICT wp2 = window+overlap-1;
- for(i = 0; i< N4-overlap/2; i++)
- {
- *xp1 = *fp1;
- xp1--;
- fp1--;
- }
- for(; i < N4; i++)
+
+ for(i = 0; i < overlap/2; i++)
{
kiss_fft_scalar x1, x2;
- x1 = *fp1--;
+ x1 = *xp1;
x2 = *yp1;
*yp1++ = MULT16_32_Q15(*wp2, x2) - MULT16_32_Q15(*wp1, x1);
*xp1-- = MULT16_32_Q15(*wp1, x2) + MULT16_32_Q15(*wp2, x1);
@@ -300,19 +294,5 @@ void clt_mdct_backward(const mdct_lookup *l, kiss_fft_scalar *in, kiss_fft_scala
wp2--;
}
}
- {
- kiss_fft_scalar * OPUS_RESTRICT fp2 = f2+N4;
- kiss_fft_scalar * OPUS_RESTRICT xp2 = out+N2;
- for(i = 0; i< N4-overlap/2; i++)
- {
- *xp2 = *fp2;
- xp2++;
- fp2++;
- }
- for(; i < N4; i++)
- {
- *xp2++ = *fp2++;
- }
- }
RESTORE_STACK;
}