From e6b1ed693ae4098e6b9eabf938fc31ec0b09b120 Mon Sep 17 00:00:00 2001 From: Loren Merritt Date: Sat, 12 Feb 2011 11:48:16 +0000 Subject: FFT: factor a shuffle out of the inner loop and merge it into fft_permute. 6% faster SSE FFT on Conroe, 2.5% on Penryn. Signed-off-by: Janne Grunau --- libavcodec/fft.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'libavcodec/fft.c') diff --git a/libavcodec/fft.c b/libavcodec/fft.c index 3fd4d279cb..eade76a516 100644 --- a/libavcodec/fft.c +++ b/libavcodec/fft.c @@ -97,6 +97,7 @@ av_cold int ff_fft_init(FFTContext *s, int nbits, int inverse) if (!s->tmp_buf) goto fail; s->inverse = inverse; + s->fft_permutation = FF_FFT_PERM_DEFAULT; s->fft_permute = ff_fft_permute_c; s->fft_calc = ff_fft_calc_c; @@ -113,8 +114,12 @@ av_cold int ff_fft_init(FFTContext *s, int nbits, int inverse) for(j=4; j<=nbits; j++) { ff_init_ff_cos_tabs(j); } - for(i=0; irevtab[-split_radix_permutation(i, n, s->inverse) & (n-1)] = i; + for(i=0; ifft_permutation == FF_FFT_PERM_SWAP_LSBS) + j = (j&~3) | ((j>>1)&1) | ((j<<1)&2); + s->revtab[-split_radix_permutation(i, n, s->inverse) & (n-1)] = j; + } return 0; fail: -- cgit v1.2.3