|
|
|
@@ -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; i<n; i++) { |
|
|
|
int k; |
|
|
|
j = i; |
|
|
|
if (s->fft_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; |
|
|
|
|