fft.c File Reference

FFT/IFFT transforms. More...

#include <stdlib.h>
#include <string.h>
#include "libavutil/mathematics.h"
#include "fft.h"
#include "fft-internal.h"
Include dependency graph for fft.c:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define BUTTERFLIES(a0, a1, a2, a3)
 
#define BUTTERFLIES_BIG(a0, a1, a2, a3)
 
#define TRANSFORM(a0, a1, a2, a3, wre, wim)
 
#define TRANSFORM_ZERO(a0, a1, a2, a3)
 
#define PASS(name)
 
#define BUTTERFLIES   BUTTERFLIES_BIG
 
#define DECL_FFT(n, n2, n4)
 
#define pass   pass_big
 

Functions

 COSTABLE (16)
 
 COSTABLE (32)
 
 COSTABLE (64)
 
 COSTABLE (128)
 
 COSTABLE (256)
 
 COSTABLE (512)
 
 COSTABLE (1024)
 
 COSTABLE (2048)
 
 COSTABLE (4096)
 
 COSTABLE (8192)
 
 COSTABLE (16384)
 
 COSTABLE (32768)
 
 COSTABLE (65536)
 
COSTABLE_CONST FFTSample *const FFT_NAME (ff_cos_tabs)[]
 
static void ff_fft_permute_c (FFTContext *s, FFTComplex *z)
 
static void ff_fft_calc_c (FFTContext *s, FFTComplex *z)
 
static int split_radix_permutation (int i, int n, int inverse)
 
av_cold void ff_init_ff_cos_tabs (int index)
 Initialize the cosine table in ff_cos_tabs[index]. More...
 
static int is_second_half_of_fft32 (int i, int n)
 
static av_cold void fft_perm_avx (FFTContext *s)
 
av_cold int ff_fft_init (FFTContext *s, int nbits, int inverse)
 Set up a complex FFT. More...
 
av_cold void ff_fft_end (FFTContext *s)
 
static void fft4 (FFTComplex *z)
 
static void fft8 (FFTComplex *z)
 
static void fft16 (FFTComplex *z)
 

Variables

static const int avx_tab []
 
static void(*const fft_dispatch [])(FFTComplex *)
 

Detailed Description

FFT/IFFT transforms.

Definition in file fft.c.

Macro Definition Documentation

#define BUTTERFLIES (   a0,
  a1,
  a2,
  a3 
)
Value:
{\
BF(t3, t5, t5, t1);\
BF(a2.re, a0.re, a0.re, t5);\
BF(a3.im, a1.im, a1.im, t3);\
BF(t4, t6, t2, t6);\
BF(a3.re, a1.re, a1.re, t4);\
BF(a2.im, a0.im, a0.im, t6);\
}
#define a0
Definition: regdef.h:46
#define a1
Definition: regdef.h:47
#define a3
Definition: regdef.h:49
#define t1
Definition: regdef.h:29
#define t3
Definition: regdef.h:31
#define a2
Definition: regdef.h:48
#define BF(a, b, c, s)
Definition: dct32.c:79
#define t5
Definition: regdef.h:33
#define t6
Definition: regdef.h:34
#define t4
Definition: regdef.h:32
#define t2
Definition: regdef.h:30

Definition at line 269 of file fft.c.

Referenced by fft8().

#define BUTTERFLIES   BUTTERFLIES_BIG

Definition at line 269 of file fft.c.

#define BUTTERFLIES_BIG (   a0,
  a1,
  a2,
  a3 
)
Value:
{\
FFTSample r0=a0.re, i0=a0.im, r1=a1.re, i1=a1.im;\
BF(t3, t5, t5, t1);\
BF(a2.re, a0.re, r0, t5);\
BF(a3.im, a1.im, i1, t3);\
BF(t4, t6, t2, t6);\
BF(a3.re, a1.re, r1, t4);\
BF(a2.im, a0.im, i0, t6);\
}
#define a0
Definition: regdef.h:46
#define a1
Definition: regdef.h:47
#define a3
Definition: regdef.h:49
#define t1
Definition: regdef.h:29
#define t3
Definition: regdef.h:31
float FFTSample
Definition: avfft.h:35
#define a2
Definition: regdef.h:48
#define BF(a, b, c, s)
Definition: dct32.c:79
#define t5
Definition: regdef.h:33
#define t6
Definition: regdef.h:34
#define t4
Definition: regdef.h:32
#define t2
Definition: regdef.h:30

Definition at line 221 of file fft.c.

#define DECL_FFT (   n,
  n2,
  n4 
)
Value:
static void fft##n(FFTComplex *z)\
{\
fft##n2(z);\
fft##n4(z+n4*2);\
fft##n4(z+n4*3);\
pass(z,FFT_NAME(ff_cos_##n),n4/2);\
}
#define pass
Definition: fft.c:335
COSTABLE_CONST FFTSample *const FFT_NAME(ff_cos_tabs)[]
fftbuffer, N fft()

Definition at line 272 of file fft.c.

Referenced by fft16().

#define PASS (   name)
Value:
static void name(FFTComplex *z, const FFTSample *wre, unsigned int n)\
{\
int o1 = 2*n;\
int o2 = 4*n;\
int o3 = 6*n;\
const FFTSample *wim = wre+o1;\
n--;\
TRANSFORM_ZERO(z[0],z[o1],z[o2],z[o3]);\
TRANSFORM(z[1],z[o1+1],z[o2+1],z[o3+1],wre[1],wim[-1]);\
do {\
z += 2;\
wre += 2;\
wim -= 2;\
TRANSFORM(z[0],z[o1],z[o2],z[o3],wre[0],wim[0]);\
TRANSFORM(z[1],z[o1+1],z[o2+1],z[o3+1],wre[1],wim[-1]);\
} while(--n);\
}
const char * name
Definition: avisynth_c.h:675
float FFTDouble
Definition: fft.h:39
#define t1
Definition: regdef.h:29
#define t3
Definition: regdef.h:31
float FFTSample
Definition: avfft.h:35
#define TRANSFORM_ZERO(a0, a1, a2, a3)
Definition: fft.c:237
#define t5
Definition: regdef.h:33
#define t6
Definition: regdef.h:34
#define TRANSFORM(a0, a1, a2, a3, wre, wim)
Definition: fft.c:231
#define t4
Definition: regdef.h:32
#define t2
Definition: regdef.h:30

Definition at line 246 of file fft.c.

#define TRANSFORM (   a0,
  a1,
  a2,
  a3,
  wre,
  wim 
)
Value:
{\
CMUL(t1, t2, a2.re, a2.im, wre, -wim);\
CMUL(t5, t6, a3.re, a3.im, wre, wim);\
}
#define a0
Definition: regdef.h:46
#define a1
Definition: regdef.h:47
#define BUTTERFLIES(a0, a1, a2, a3)
Definition: fft.c:269
#define a3
Definition: regdef.h:49
#define CMUL(dre, dim, are, aim, bre, bim)
Definition: fft-internal.h:59
#define t1
Definition: regdef.h:29
#define a2
Definition: regdef.h:48
#define t5
Definition: regdef.h:33
#define t6
Definition: regdef.h:34
#define t2
Definition: regdef.h:30

Definition at line 231 of file fft.c.

Referenced by fft16(), and fft8().

#define TRANSFORM_ZERO (   a0,
  a1,
  a2,
  a3 
)
Value:
{\
t1 = a2.re;\
t2 = a2.im;\
t5 = a3.re;\
t6 = a3.im;\
}
#define a0
Definition: regdef.h:46
#define a1
Definition: regdef.h:47
#define BUTTERFLIES(a0, a1, a2, a3)
Definition: fft.c:269
#define a3
Definition: regdef.h:49
#define t1
Definition: regdef.h:29
#define a2
Definition: regdef.h:48
#define t5
Definition: regdef.h:33
#define t6
Definition: regdef.h:34
#define t2
Definition: regdef.h:30

Definition at line 237 of file fft.c.

Referenced by fft16().

Function Documentation

COSTABLE ( 16  )
COSTABLE ( 32  )
COSTABLE ( 64  )
COSTABLE ( 128  )
COSTABLE ( 256  )
COSTABLE ( 512  )
COSTABLE ( 1024  )
COSTABLE ( 2048  )
COSTABLE ( 4096  )
COSTABLE ( 8192  )
COSTABLE ( 16384  )
COSTABLE ( 32768  )
COSTABLE ( 65536  )
static void ff_fft_calc_c ( FFTContext s,
FFTComplex z 
)
static

Definition at line 350 of file fft.c.

Referenced by ff_fft_init().

av_cold void ff_fft_end ( FFTContext s)

Definition at line 203 of file fft.c.

av_cold int ff_fft_init ( FFTContext s,
int  nbits,
int  inverse 
)

Set up a complex FFT.

Parameters
nbitslog2 of the length of the input array
inverseif 0 perform the forward transform, if 1 perform the inverse

Definition at line 134 of file fft.c.

static void ff_fft_permute_c ( FFTContext s,
FFTComplex z 
)
static

Definition at line 193 of file fft.c.

Referenced by ff_fft_init().

av_cold void ff_init_ff_cos_tabs ( int  index)

Initialize the cosine table in ff_cos_tabs[index].

Parameters
indexindex in ff_cos_tabs array of the table to initialize

Definition at line 82 of file fft.c.

Referenced by ff_fft_init().

static void fft16 ( FFTComplex z)
static

Definition at line 311 of file fft.c.

static void fft4 ( FFTComplex z)
static

Definition at line 281 of file fft.c.

Referenced by fft16(), and fft8().

static void fft8 ( FFTComplex z)
static

Definition at line 295 of file fft.c.

Referenced by fft16().

COSTABLE_CONST FFTSample* const FFT_NAME ( ff_cos_tabs  )

Referenced by ff_init_ff_cos_tabs(), and fft16().

static av_cold void fft_perm_avx ( FFTContext s)
static

Definition at line 112 of file fft.c.

Referenced by ff_fft_init().

static int is_second_half_of_fft32 ( int  i,
int  n 
)
static

Definition at line 100 of file fft.c.

Referenced by fft_perm_avx().

static int split_radix_permutation ( int  i,
int  n,
int  inverse 
)
static

Definition at line 71 of file fft.c.

Referenced by ff_fft_init(), and fft_perm_avx().

Variable Documentation

const int avx_tab[]
static
Initial value:
= {
0, 4, 1, 5, 8, 12, 9, 13, 2, 6, 3, 7, 10, 14, 11, 15
}

Definition at line 96 of file fft.c.

Referenced by fft_perm_avx().

void(* const fft_dispatch[])(FFTComplex *)
static
Initial value:
= {
fft4, fft8, fft16, fft32, fft64, fft128, fft256, fft512, fft1024,
fft2048, fft4096, fft8192, fft16384, fft32768, fft65536,
}
static void fft4(FFTComplex *z)
Definition: fft.c:281
static void fft16(FFTComplex *z)
Definition: fft.c:311
static void fft8(FFTComplex *z)
Definition: fft.c:295

Definition at line 345 of file fft.c.

Referenced by ff_fft_calc_c().