changeset 7546:97383e012cb9 libavcodec

remove mdct tmp buffer
author lorenm
date Tue, 12 Aug 2008 00:36:36 +0000
parents 2dca9201c400
children 8226017a65ae
files ac3dec.c ac3dec.h atrac3.c cook.c dsputil.h fft-test.c i386/fft_3dn2.c i386/fft_sse.c mdct.c nellymoserdec.c vorbis_enc.c wma.h wmadec.c wmaenc.c
diffstat 14 files changed, 27 insertions(+), 48 deletions(-) [+]
line wrap: on
line diff
--- a/ac3dec.c	Tue Aug 12 00:34:08 2008 +0000
+++ b/ac3dec.c	Tue Aug 12 00:36:36 2008 +0000
@@ -605,7 +605,7 @@
         }
 
         /* run standard IMDCT */
-        s->imdct_256.fft.imdct_calc(&s->imdct_256, o_ptr, x, s->tmp_imdct);
+        s->imdct_256.fft.imdct_calc(&s->imdct_256, o_ptr, x);
 
         /* reverse the post-rotation & reordering from standard IMDCT */
         for(k=0; k<32; k++) {
@@ -643,7 +643,7 @@
             do_imdct_256(s, ch);
         } else {
             s->imdct_512.fft.imdct_calc(&s->imdct_512, s->tmp_output,
-                                        s->transform_coeffs[ch], s->tmp_imdct);
+                                        s->transform_coeffs[ch]);
         }
         /* For the first half of the block, apply the window, add the delay
            from the previous block, and send to output */
--- a/ac3dec.h	Tue Aug 12 00:34:08 2008 +0000
+++ b/ac3dec.h	Tue Aug 12 00:36:36 2008 +0000
@@ -166,7 +166,6 @@
     DECLARE_ALIGNED_16(float, delay[AC3_MAX_CHANNELS][AC3_BLOCK_SIZE]);             ///< delay - added to the next block
     DECLARE_ALIGNED_16(float, window[AC3_BLOCK_SIZE]);                              ///< window coefficients
     DECLARE_ALIGNED_16(float, tmp_output[AC3_BLOCK_SIZE*2]);                        ///< temporary storage for output before windowing
-    DECLARE_ALIGNED_16(float, tmp_imdct[AC3_BLOCK_SIZE]);                           ///< temporary storage for imdct transform
     DECLARE_ALIGNED_16(float, output[AC3_MAX_CHANNELS][AC3_BLOCK_SIZE]);            ///< output after imdct transform and windowing
     DECLARE_ALIGNED_16(short, int_output[AC3_MAX_CHANNELS-1][AC3_BLOCK_SIZE]);      ///< final 16-bit integer output
 ///@}
--- a/atrac3.c	Tue Aug 12 00:34:08 2008 +0000
+++ b/atrac3.c	Tue Aug 12 00:36:36 2008 +0000
@@ -108,7 +108,6 @@
     float               outSamples[2048];
     uint8_t*            decoded_bytes_buffer;
     float               tempBuf[1070];
-    DECLARE_ALIGNED_16(float,mdct_tmp[512]);
     //@}
     //@{
     /** extradata */
@@ -189,10 +188,9 @@
  * @param pInput    float input
  * @param pOutput   float output
  * @param odd_band  1 if the band is an odd band
- * @param mdct_tmp  aligned temporary buffer for the mdct
  */
 
-static void IMLT(float *pInput, float *pOutput, int odd_band, float* mdct_tmp)
+static void IMLT(float *pInput, float *pOutput, int odd_band)
 {
     int     i;
 
@@ -210,7 +208,7 @@
             FFSWAP(float, pInput[i], pInput[255-i]);
     }
 
-    mdct_ctx.fft.imdct_calc(&mdct_ctx,pOutput,pInput,mdct_tmp);
+    mdct_ctx.fft.imdct_calc(&mdct_ctx,pOutput,pInput);
 
     /* Perform windowing on the output. */
     dsp.vector_fmul(pOutput,mdct_window,512);
@@ -757,7 +755,7 @@
     for (band=0; band<4; band++) {
         /* Perform the IMDCT step without overlapping. */
         if (band <= numBands) {
-            IMLT(&(pSnd->spectrum[band*256]), pSnd->IMDCT_buf, band&1,q->mdct_tmp);
+            IMLT(&(pSnd->spectrum[band*256]), pSnd->IMDCT_buf, band&1);
         } else
             memset(pSnd->IMDCT_buf, 0, 512 * sizeof(float));
 
--- a/cook.c	Tue Aug 12 00:34:08 2008 +0000
+++ b/cook.c	Tue Aug 12 00:36:36 2008 +0000
@@ -112,7 +112,6 @@
 
     /* transform data */
     MDCTContext         mdct_ctx;
-    DECLARE_ALIGNED_16(FFTSample, mdct_tmp[1024]);  /* temporary storage for imlt */
     float*              mlt_window;
 
     /* gain buffers */
@@ -734,8 +733,7 @@
     int i;
 
     /* Inverse modified discrete cosine transform */
-    q->mdct_ctx.fft.imdct_calc(&q->mdct_ctx, q->mono_mdct_output,
-                               inbuffer, q->mdct_tmp);
+    q->mdct_ctx.fft.imdct_calc(&q->mdct_ctx, q->mono_mdct_output, inbuffer);
 
     q->imlt_window (q, buffer1, gains_ptr, previous_buffer);
 
--- a/dsputil.h	Tue Aug 12 00:34:08 2008 +0000
+++ b/dsputil.h	Tue Aug 12 00:36:36 2008 +0000
@@ -642,10 +642,8 @@
     FFTComplex *tmp_buf;
     void (*fft_permute)(struct FFTContext *s, FFTComplex *z);
     void (*fft_calc)(struct FFTContext *s, FFTComplex *z);
-    void (*imdct_calc)(struct MDCTContext *s, FFTSample *output,
-                       const FFTSample *input, FFTSample *tmp);
-    void (*imdct_half)(struct MDCTContext *s, FFTSample *output,
-                       const FFTSample *input);
+    void (*imdct_calc)(struct MDCTContext *s, FFTSample *output, const FFTSample *input);
+    void (*imdct_half)(struct MDCTContext *s, FFTSample *output, const FFTSample *input);
 } FFTContext;
 
 int ff_fft_init(FFTContext *s, int nbits, int inverse);
@@ -694,20 +692,15 @@
 void ff_sine_window_init(float *window, int n);
 
 int ff_mdct_init(MDCTContext *s, int nbits, int inverse);
-void ff_imdct_calc(MDCTContext *s, FFTSample *output,
-                const FFTSample *input, FFTSample *tmp);
+void ff_imdct_calc(MDCTContext *s, FFTSample *output, const FFTSample *input);
 void ff_imdct_half(MDCTContext *s, FFTSample *output, const FFTSample *input);
-void ff_imdct_calc_3dn(MDCTContext *s, FFTSample *output,
-                       const FFTSample *input, FFTSample *tmp);
+void ff_imdct_calc_3dn(MDCTContext *s, FFTSample *output, const FFTSample *input);
 void ff_imdct_half_3dn(MDCTContext *s, FFTSample *output, const FFTSample *input);
-void ff_imdct_calc_3dn2(MDCTContext *s, FFTSample *output,
-                        const FFTSample *input, FFTSample *tmp);
+void ff_imdct_calc_3dn2(MDCTContext *s, FFTSample *output, const FFTSample *input);
 void ff_imdct_half_3dn2(MDCTContext *s, FFTSample *output, const FFTSample *input);
-void ff_imdct_calc_sse(MDCTContext *s, FFTSample *output,
-                       const FFTSample *input, FFTSample *tmp);
+void ff_imdct_calc_sse(MDCTContext *s, FFTSample *output, const FFTSample *input);
 void ff_imdct_half_sse(MDCTContext *s, FFTSample *output, const FFTSample *input);
-void ff_mdct_calc(MDCTContext *s, FFTSample *out,
-               const FFTSample *input, FFTSample *tmp);
+void ff_mdct_calc(MDCTContext *s, FFTSample *out, const FFTSample *input);
 void ff_mdct_end(MDCTContext *s);
 
 #define WRAPPER8_16(name8, name16)\
--- a/fft-test.c	Tue Aug 12 00:34:08 2008 +0000
+++ b/fft-test.c	Tue Aug 12 00:36:36 2008 +0000
@@ -177,7 +177,7 @@
 int main(int argc, char **argv)
 {
     FFTComplex *tab, *tab1, *tab_ref;
-    FFTSample *tabtmp, *tab2;
+    FFTSample *tab2;
     int it, i, c;
     int do_speed = 0;
     int do_mdct = 0;
@@ -214,7 +214,6 @@
     tab = av_malloc(fft_size * sizeof(FFTComplex));
     tab1 = av_malloc(fft_size * sizeof(FFTComplex));
     tab_ref = av_malloc(fft_size * sizeof(FFTComplex));
-    tabtmp = av_malloc(fft_size / 2 * sizeof(FFTSample));
     tab2 = av_malloc(fft_size * sizeof(FFTSample));
 
     if (do_mdct) {
@@ -246,12 +245,12 @@
     if (do_mdct) {
         if (do_inverse) {
             imdct_ref((float *)tab_ref, (float *)tab1, fft_nbits);
-            ff_imdct_calc(m, tab2, (float *)tab1, tabtmp);
+            ff_imdct_calc(m, tab2, (float *)tab1);
             check_diff((float *)tab_ref, tab2, fft_size);
         } else {
             mdct_ref((float *)tab_ref, (float *)tab1, fft_nbits);
 
-            ff_mdct_calc(m, tab2, (float *)tab1, tabtmp);
+            ff_mdct_calc(m, tab2, (float *)tab1);
 
             check_diff((float *)tab_ref, tab2, fft_size / 2);
         }
@@ -278,9 +277,9 @@
             for(it=0;it<nb_its;it++) {
                 if (do_mdct) {
                     if (do_inverse) {
-                        ff_imdct_calc(m, (float *)tab, (float *)tab1, tabtmp);
+                        ff_imdct_calc(m, (float *)tab, (float *)tab1);
                     } else {
-                        ff_mdct_calc(m, (float *)tab, (float *)tab1, tabtmp);
+                        ff_mdct_calc(m, (float *)tab, (float *)tab1);
                     }
                 } else {
                     memcpy(tab, tab1, fft_size * sizeof(FFTComplex));
--- a/i386/fft_3dn2.c	Tue Aug 12 00:34:08 2008 +0000
+++ b/i386/fft_3dn2.c	Tue Aug 12 00:36:36 2008 +0000
@@ -142,8 +142,7 @@
     asm volatile("femms");
 }
 
-void ff_imdct_calc_3dn2(MDCTContext *s, FFTSample *output,
-                        const FFTSample *input, FFTSample *tmp)
+void ff_imdct_calc_3dn2(MDCTContext *s, FFTSample *output, const FFTSample *input)
 {
     x86_reg j, k;
     long n = 1 << s->nbits;
--- a/i386/fft_sse.c	Tue Aug 12 00:34:08 2008 +0000
+++ b/i386/fft_sse.c	Tue Aug 12 00:36:36 2008 +0000
@@ -171,8 +171,7 @@
     );
 }
 
-void ff_imdct_calc_sse(MDCTContext *s, FFTSample *output,
-                       const FFTSample *input, FFTSample *tmp)
+void ff_imdct_calc_sse(MDCTContext *s, FFTSample *output, const FFTSample *input)
 {
     x86_reg j, k;
     long n = 1 << s->nbits;
--- a/mdct.c	Tue Aug 12 00:34:08 2008 +0000
+++ b/mdct.c	Tue Aug 12 00:36:36 2008 +0000
@@ -150,8 +150,7 @@
  * @param input N/2 samples
  * @param tmp N/2 samples
  */
-void ff_imdct_calc(MDCTContext *s, FFTSample *output,
-                   const FFTSample *input, FFTSample *tmp)
+void ff_imdct_calc(MDCTContext *s, FFTSample *output, const FFTSample *input)
 {
     int k;
     int n = 1 << s->nbits;
@@ -172,11 +171,10 @@
  * @param out N/2 samples
  * @param tmp temporary storage of N/2 samples
  */
-void ff_mdct_calc(MDCTContext *s, FFTSample *out,
-                  const FFTSample *input, FFTSample *tmp)
+void ff_mdct_calc(MDCTContext *s, FFTSample *out, const FFTSample *input)
 {
     int i, j, n, n8, n4, n2, n3;
-    FFTSample re, im, re1, im1;
+    FFTSample re, im;
     const uint16_t *revtab = s->fft.revtab;
     const FFTSample *tcos = s->tcos;
     const FFTSample *tsin = s->tsin;
--- a/nellymoserdec.c	Tue Aug 12 00:34:08 2008 +0000
+++ b/nellymoserdec.c	Tue Aug 12 00:36:36 2008 +0000
@@ -50,7 +50,6 @@
     float           scale_bias;
     DSPContext      dsp;
     MDCTContext     imdct_ctx;
-    DECLARE_ALIGNED_16(float,imdct_tmp[NELLY_BUF_LEN]);
     DECLARE_ALIGNED_16(float,imdct_out[NELLY_BUF_LEN * 2]);
 } NellyMoserDecodeContext;
 
@@ -120,8 +119,7 @@
         memset(&aptr[NELLY_FILL_LEN], 0,
                (NELLY_BUF_LEN - NELLY_FILL_LEN) * sizeof(float));
 
-        s->imdct_ctx.fft.imdct_calc(&s->imdct_ctx, s->imdct_out,
-                                    aptr, s->imdct_tmp);
+        s->imdct_ctx.fft.imdct_calc(&s->imdct_ctx, s->imdct_out, aptr);
         /* XXX: overlapping and windowing should be part of a more
            generic imdct function */
         overlap_and_window(s, s->state, aptr, s->imdct_out);
--- a/vorbis_enc.c	Tue Aug 12 00:34:08 2008 +0000
+++ b/vorbis_enc.c	Tue Aug 12 00:36:36 2008 +0000
@@ -915,7 +915,7 @@
     }
 
     for (channel = 0; channel < venc->channels; channel++) {
-        ff_mdct_calc(&venc->mdct[0], venc->coeffs + channel*window_len, venc->samples + channel*window_len*2, venc->floor/*tmp*/);
+        ff_mdct_calc(&venc->mdct[0], venc->coeffs + channel*window_len, venc->samples + channel*window_len*2);
     }
 
     if (samples) {
--- a/wma.h	Tue Aug 12 00:34:08 2008 +0000
+++ b/wma.h	Tue Aug 12 00:36:36 2008 +0000
@@ -115,7 +115,6 @@
     DECLARE_ALIGNED_16(FFTSample, output[BLOCK_MAX_SIZE * 2]);
     MDCTContext mdct_ctx[BLOCK_NB_SIZES];
     float *windows[BLOCK_NB_SIZES];
-    DECLARE_ALIGNED_16(FFTSample, mdct_tmp[BLOCK_MAX_SIZE]); ///< temporary storage for imdct
     /* output buffer for one frame and the last for IMDCT windowing */
     DECLARE_ALIGNED_16(float, frame_out[MAX_CHANNELS][BLOCK_MAX_SIZE * 2]);
     /* last frame info */
--- a/wmadec.c	Tue Aug 12 00:34:08 2008 +0000
+++ b/wmadec.c	Tue Aug 12 00:36:36 2008 +0000
@@ -688,8 +688,7 @@
         n = s->block_len;
         n4 = s->block_len / 2;
         if(s->channel_coded[ch]){
-            s->mdct_ctx[bsize].fft.imdct_calc(&s->mdct_ctx[bsize],
-                                              s->output, s->coefs[ch], s->mdct_tmp);
+            s->mdct_ctx[bsize].fft.imdct_calc(&s->mdct_ctx[bsize], s->output, s->coefs[ch]);
         }else
             memset(s->output, 0, sizeof(s->output));
 
--- a/wmaenc.c	Tue Aug 12 00:34:08 2008 +0000
+++ b/wmaenc.c	Tue Aug 12 00:36:36 2008 +0000
@@ -89,7 +89,7 @@
             s->output[i+window_len]  = audio[j] / n * win[window_len - i - 1];
             s->frame_out[channel][i] = audio[j] / n * win[i];
         }
-        ff_mdct_calc(&s->mdct_ctx[window_index], s->coefs[channel], s->output, s->mdct_tmp);
+        ff_mdct_calc(&s->mdct_ctx[window_index], s->coefs[channel], s->output);
     }
 }