comparison dsputil.h @ 7544:ee1cb5ab9f99 libavcodec

optimize imdct_half: remove tmp buffer. skip fft reinterleave pass, leaving data in a format more convenient for simd. merge post-rotate with post-reorder.
author lorenm
date Tue, 12 Aug 2008 00:33:34 +0000
parents a8a8205a9081
children 97383e012cb9
comparison
equal deleted inserted replaced
7543:f04ff5a6fb55 7544:ee1cb5ab9f99
643 void (*fft_permute)(struct FFTContext *s, FFTComplex *z); 643 void (*fft_permute)(struct FFTContext *s, FFTComplex *z);
644 void (*fft_calc)(struct FFTContext *s, FFTComplex *z); 644 void (*fft_calc)(struct FFTContext *s, FFTComplex *z);
645 void (*imdct_calc)(struct MDCTContext *s, FFTSample *output, 645 void (*imdct_calc)(struct MDCTContext *s, FFTSample *output,
646 const FFTSample *input, FFTSample *tmp); 646 const FFTSample *input, FFTSample *tmp);
647 void (*imdct_half)(struct MDCTContext *s, FFTSample *output, 647 void (*imdct_half)(struct MDCTContext *s, FFTSample *output,
648 const FFTSample *input, FFTSample *tmp); 648 const FFTSample *input);
649 } FFTContext; 649 } FFTContext;
650 650
651 int ff_fft_init(FFTContext *s, int nbits, int inverse); 651 int ff_fft_init(FFTContext *s, int nbits, int inverse);
652 void ff_fft_permute_c(FFTContext *s, FFTComplex *z); 652 void ff_fft_permute_c(FFTContext *s, FFTComplex *z);
653 void ff_fft_permute_sse(FFTContext *s, FFTComplex *z); 653 void ff_fft_permute_sse(FFTContext *s, FFTComplex *z);
694 void ff_sine_window_init(float *window, int n); 694 void ff_sine_window_init(float *window, int n);
695 695
696 int ff_mdct_init(MDCTContext *s, int nbits, int inverse); 696 int ff_mdct_init(MDCTContext *s, int nbits, int inverse);
697 void ff_imdct_calc(MDCTContext *s, FFTSample *output, 697 void ff_imdct_calc(MDCTContext *s, FFTSample *output,
698 const FFTSample *input, FFTSample *tmp); 698 const FFTSample *input, FFTSample *tmp);
699 void ff_imdct_half(MDCTContext *s, FFTSample *output, 699 void ff_imdct_half(MDCTContext *s, FFTSample *output, const FFTSample *input);
700 const FFTSample *input, FFTSample *tmp); 700 void ff_imdct_calc_3dn(MDCTContext *s, FFTSample *output,
701 const FFTSample *input, FFTSample *tmp);
702 void ff_imdct_half_3dn(MDCTContext *s, FFTSample *output, const FFTSample *input);
701 void ff_imdct_calc_3dn2(MDCTContext *s, FFTSample *output, 703 void ff_imdct_calc_3dn2(MDCTContext *s, FFTSample *output,
702 const FFTSample *input, FFTSample *tmp); 704 const FFTSample *input, FFTSample *tmp);
703 void ff_imdct_half_3dn2(MDCTContext *s, FFTSample *output, 705 void ff_imdct_half_3dn2(MDCTContext *s, FFTSample *output, const FFTSample *input);
704 const FFTSample *input, FFTSample *tmp);
705 void ff_imdct_calc_sse(MDCTContext *s, FFTSample *output, 706 void ff_imdct_calc_sse(MDCTContext *s, FFTSample *output,
706 const FFTSample *input, FFTSample *tmp); 707 const FFTSample *input, FFTSample *tmp);
707 void ff_imdct_half_sse(MDCTContext *s, FFTSample *output, 708 void ff_imdct_half_sse(MDCTContext *s, FFTSample *output, const FFTSample *input);
708 const FFTSample *input, FFTSample *tmp);
709 void ff_mdct_calc(MDCTContext *s, FFTSample *out, 709 void ff_mdct_calc(MDCTContext *s, FFTSample *out,
710 const FFTSample *input, FFTSample *tmp); 710 const FFTSample *input, FFTSample *tmp);
711 void ff_mdct_end(MDCTContext *s); 711 void ff_mdct_end(MDCTContext *s);
712 712
713 #define WRAPPER8_16(name8, name16)\ 713 #define WRAPPER8_16(name8, name16)\