X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Ffft_template.c;h=20a62e429055d62bff5e57b471bff81f65ebca8c;hb=d6fc5dc24aa09e026c6271a7565e63798dfe46f3;hp=6c77854e411b6affdce1e7e0874e1adc6b8e6905;hpb=a959e38f7a7195d80bb2f3fe38a5af398067d2c7;p=ffmpeg diff --git a/libavcodec/fft_template.c b/libavcodec/fft_template.c index 6c77854e411..20a62e42905 100644 --- a/libavcodec/fft_template.c +++ b/libavcodec/fft_template.c @@ -261,17 +261,41 @@ av_cold int ff_fft_init(FFTContext *s, int nbits, int inverse) if (s->fft_permutation == FF_FFT_PERM_AVX) { fft_perm_avx(s); } else { - for(i=0; ifft_permutation == FF_FFT_PERM_SWAP_LSBS) - j = (j&~3) | ((j>>1)&1) | ((j<<1)&2); - k = -split_radix_permutation(i, n, s->inverse) & (n-1); - if (s->revtab) - s->revtab[k] = j; - if (s->revtab32) - s->revtab32[k] = j; - } +#define PROCESS_FFT_PERM_SWAP_LSBS(num) do {\ + for(i = 0; i < n; i++) {\ + int k;\ + j = i;\ + j = (j & ~3) | ((j >> 1) & 1) | ((j << 1) & 2);\ + k = -split_radix_permutation(i, n, s->inverse) & (n - 1);\ + s->revtab##num[k] = j;\ + } \ +} while(0); + +#define PROCESS_FFT_PERM_DEFAULT(num) do {\ + for(i = 0; i < n; i++) {\ + int k;\ + j = i;\ + k = -split_radix_permutation(i, n, s->inverse) & (n - 1);\ + s->revtab##num[k] = j;\ + } \ +} while(0); + +#define SPLIT_RADIX_PERMUTATION(num) do { \ + if (s->fft_permutation == FF_FFT_PERM_SWAP_LSBS) {\ + PROCESS_FFT_PERM_SWAP_LSBS(num) \ + } else {\ + PROCESS_FFT_PERM_DEFAULT(num) \ + }\ +} while(0); + + if (s->revtab) + SPLIT_RADIX_PERMUTATION() + if (s->revtab32) + SPLIT_RADIX_PERMUTATION(32) + +#undef PROCESS_FFT_PERM_DEFAULT +#undef PROCESS_FFT_PERM_SWAP_LSBS +#undef SPLIT_RADIX_PERMUTATION } return 0; @@ -523,9 +547,11 @@ static void name(FFTComplex *z, const FFTSample *wre, unsigned int n)\ } PASS(pass) +#if !CONFIG_SMALL #undef BUTTERFLIES #define BUTTERFLIES BUTTERFLIES_BIG PASS(pass_big) +#endif #define DECL_FFT(n,n2,n4)\ static void fft##n(FFTComplex *z)\