pass(z,TX_NAME(ff_cos_##n),n4/2);\
}
+static void fft2(FFTComplex *z)
+{
+ FFTComplex tmp;
+ BF(tmp.re, z[0].re, z[0].re, z[1].re);
+ BF(tmp.im, z[0].im, z[0].im, z[1].im);
+ z[1] = tmp;
+}
+
static void fft4(FFTComplex *z)
{
FFTSample t1, t2, t3, t4, t5, t6, t7, t8;
DECL_FFT(131072,65536,32768)
static void (* const fft_dispatch[])(FFTComplex*) = {
- fft4, fft8, fft16, fft32, fft64, fft128, fft256, fft512, fft1024,
- fft2048, fft4096, fft8192, fft16384, fft32768, fft65536, fft131072
+ NULL, fft2, fft4, fft8, fft16, fft32, fft64, fft128, fft256, fft512,
+ fft1024, fft2048, fft4096, fft8192, fft16384, fft32768, fft65536, fft131072
};
#define DECL_COMP_FFT(N) \
FFTComplex *in = _in; \
FFTComplex *out = _out; \
FFTComplex fft##N##in[N]; \
- void (*fftp)(FFTComplex *z) = fft_dispatch[av_log2(m) - 2]; \
+ void (*fftp)(FFTComplex *z) = fft_dispatch[av_log2(m)]; \
\
for (int i = 0; i < m; i++) { \
for (int j = 0; j < N; j++) \
{
FFTComplex *in = _in;
FFTComplex *out = _out;
- int m = s->m, mb = av_log2(m) - 2;
+ int m = s->m, mb = av_log2(m);
for (int i = 0; i < m; i++)
out[s->revtab[i]] = in[i];
fft_dispatch[mb](out);
const int m = s->m, len8 = N*m >> 1; \
const int *in_map = s->pfatab, *out_map = in_map + N*m; \
const FFTSample *src = _src, *in1, *in2; \
- void (*fftp)(FFTComplex *) = fft_dispatch[av_log2(m) - 2]; \
+ void (*fftp)(FFTComplex *) = fft_dispatch[av_log2(m)]; \
\
stride /= sizeof(*src); /* To convert it from bytes */ \
in1 = src; \
FFTComplex *exp = s->exptab, tmp, fft##N##in[N]; \
const int m = s->m, len4 = N*m, len3 = len4 * 3, len8 = len4 >> 1; \
const int *in_map = s->pfatab, *out_map = in_map + N*m; \
- void (*fftp)(FFTComplex *) = fft_dispatch[av_log2(m) - 2]; \
+ void (*fftp)(FFTComplex *) = fft_dispatch[av_log2(m)]; \
\
stride /= sizeof(*dst); \
\
FFTComplex *z = _dst, *exp = s->exptab;
const int m = s->m, len8 = m >> 1;
const FFTSample *src = _src, *in1, *in2;
- void (*fftp)(FFTComplex *) = fft_dispatch[av_log2(m) - 2];
+ void (*fftp)(FFTComplex *) = fft_dispatch[av_log2(m)];
stride /= sizeof(*src);
in1 = src;
FFTSample *src = _src, *dst = _dst;
FFTComplex *exp = s->exptab, tmp, *z = _dst;
const int m = s->m, len4 = m, len3 = len4 * 3, len8 = len4 >> 1;
- void (*fftp)(FFTComplex *) = fft_dispatch[av_log2(m) - 2];
+ void (*fftp)(FFTComplex *) = fft_dispatch[av_log2(m)];
stride /= sizeof(*dst);
const void *scale, uint64_t flags)
{
const int is_mdct = ff_tx_type_is_mdct(type);
- int err, n = 1, m = 1, max_ptwo = 1 << (FF_ARRAY_ELEMS(fft_dispatch) + 1);
+ int err, n = 1, m = 1, max_ptwo = 1 << (FF_ARRAY_ELEMS(fft_dispatch) - 1);
if (is_mdct)
len >>= 1;
#undef CHECK_FACTOR
/* len must be a power of two now */
- if (!(len & (len - 1)) && len >= 4 && len <= max_ptwo) {
+ if (!(len & (len - 1)) && len >= 2 && len <= max_ptwo) {
m = len;
len = 1;
}