From 0a570e826d7cb6602219236e20a15d85ab68b073 Mon Sep 17 00:00:00 2001 From: Loren Merritt Date: Tue, 12 Aug 2008 00:36:36 +0000 Subject: [PATCH] remove mdct tmp buffer Originally committed as revision 14702 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/ac3dec.c | 4 ++-- libavcodec/ac3dec.h | 1 - libavcodec/atrac3.c | 8 +++----- libavcodec/cook.c | 4 +--- libavcodec/dsputil.h | 21 +++++++-------------- libavcodec/fft-test.c | 11 +++++------ libavcodec/i386/fft_3dn2.c | 3 +-- libavcodec/i386/fft_sse.c | 3 +-- libavcodec/mdct.c | 8 +++----- libavcodec/nellymoserdec.c | 4 +--- libavcodec/vorbis_enc.c | 2 +- libavcodec/wma.h | 1 - libavcodec/wmadec.c | 3 +-- libavcodec/wmaenc.c | 2 +- 14 files changed, 27 insertions(+), 48 deletions(-) diff --git a/libavcodec/ac3dec.c b/libavcodec/ac3dec.c index d04209d..c77130d 100644 --- a/libavcodec/ac3dec.c +++ b/libavcodec/ac3dec.c @@ -605,7 +605,7 @@ static void do_imdct_256(AC3DecodeContext *s, int chindex) } /* 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 @@ static inline void do_imdct(AC3DecodeContext *s, int channels) 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 */ diff --git a/libavcodec/ac3dec.h b/libavcodec/ac3dec.h index 76f9a9f..bf46678 100644 --- a/libavcodec/ac3dec.h +++ b/libavcodec/ac3dec.h @@ -166,7 +166,6 @@ typedef struct { 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 ///@} diff --git a/libavcodec/atrac3.c b/libavcodec/atrac3.c index 9a03bbe..a41329f 100644 --- a/libavcodec/atrac3.c +++ b/libavcodec/atrac3.c @@ -108,7 +108,6 @@ typedef struct { float outSamples[2048]; uint8_t* decoded_bytes_buffer; float tempBuf[1070]; - DECLARE_ALIGNED_16(float,mdct_tmp[512]); //@} //@{ /** extradata */ @@ -189,10 +188,9 @@ static void iqmf (float *inlo, float *inhi, unsigned int nIn, float *pOut, float * @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 @@ static void IMLT(float *pInput, float *pOutput, int odd_band, float* mdct_tmp) 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 @@ static int decodeChannelSoundUnit (ATRAC3Context *q, GetBitContext *gb, channel_ 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)); diff --git a/libavcodec/cook.c b/libavcodec/cook.c index 3a16c77..b1390e4 100644 --- a/libavcodec/cook.c +++ b/libavcodec/cook.c @@ -112,7 +112,6 @@ typedef struct cook { /* 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 @@ static void imlt_gain(COOKContext *q, float *inbuffer, 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); diff --git a/libavcodec/dsputil.h b/libavcodec/dsputil.h index 18ee43c..a0e25a6 100644 --- a/libavcodec/dsputil.h +++ b/libavcodec/dsputil.h @@ -642,10 +642,8 @@ typedef struct FFTContext { 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_kbd_window_init(float *window, float alpha, int n); 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)\ diff --git a/libavcodec/fft-test.c b/libavcodec/fft-test.c index 980dc86..1ab653f 100644 --- a/libavcodec/fft-test.c +++ b/libavcodec/fft-test.c @@ -177,7 +177,7 @@ void help(void) 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 @@ int main(int argc, char **argv) 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 @@ int main(int argc, char **argv) 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 @@ int main(int argc, char **argv) for(it=0;itnbits; diff --git a/libavcodec/i386/fft_sse.c b/libavcodec/i386/fft_sse.c index 74150f9..9246770 100644 --- a/libavcodec/i386/fft_sse.c +++ b/libavcodec/i386/fft_sse.c @@ -171,8 +171,7 @@ void ff_imdct_half_sse(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) { x86_reg j, k; long n = 1 << s->nbits; diff --git a/libavcodec/mdct.c b/libavcodec/mdct.c index 069ad5b..e8fd682 100644 --- a/libavcodec/mdct.c +++ b/libavcodec/mdct.c @@ -150,8 +150,7 @@ void ff_imdct_half(MDCTContext *s, FFTSample *output, const FFTSample *input) * @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 @@ void ff_imdct_calc(MDCTContext *s, FFTSample *output, * @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; diff --git a/libavcodec/nellymoserdec.c b/libavcodec/nellymoserdec.c index a4c74ea..8374a68 100644 --- a/libavcodec/nellymoserdec.c +++ b/libavcodec/nellymoserdec.c @@ -50,7 +50,6 @@ typedef struct NellyMoserDecodeContext { 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 @@ static void nelly_decode_block(NellyMoserDecodeContext *s, 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); diff --git a/libavcodec/vorbis_enc.c b/libavcodec/vorbis_enc.c index 5add7a9..3d63785 100644 --- a/libavcodec/vorbis_enc.c +++ b/libavcodec/vorbis_enc.c @@ -915,7 +915,7 @@ static int apply_window_and_mdct(venc_context_t * venc, signed short * audio, in } 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) { diff --git a/libavcodec/wma.h b/libavcodec/wma.h index 88b5dbf..43b5d0c 100644 --- a/libavcodec/wma.h +++ b/libavcodec/wma.h @@ -115,7 +115,6 @@ typedef struct WMACodecContext { 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 */ diff --git a/libavcodec/wmadec.c b/libavcodec/wmadec.c index fa98751..6f29c68 100644 --- a/libavcodec/wmadec.c +++ b/libavcodec/wmadec.c @@ -688,8 +688,7 @@ next: 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)); diff --git a/libavcodec/wmaenc.c b/libavcodec/wmaenc.c index b2ea90e..4558947 100644 --- a/libavcodec/wmaenc.c +++ b/libavcodec/wmaenc.c @@ -89,7 +89,7 @@ static void apply_window_and_mdct(AVCodecContext * avctx, signed short * audio, 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); } } -- 2.7.4