FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Macros | Functions | Variables
fft_template.c File Reference

FFT/IFFT transforms. More...

#include <stdlib.h>
#include <string.h>
#include "libavutil/mathematics.h"
#include "fft.h"
#include "fft-internal.h"

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 (131072)
 
COSTABLE_CONST FFTSample *const FFT_NAME (ff_cos_tabs)[]
 
static void fft_permute_c (FFTContext *s, FFTComplex *z)
 
static void 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_template.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 t5
Definition: regdef.h:33
#define t6
Definition: regdef.h:34
#define t4
Definition: regdef.h:32
#define BF(a, b, c, s)
#define t2
Definition: regdef.h:30

Definition at line 466 of file fft_template.c.

Referenced by fft8().

#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 t5
Definition: regdef.h:33
#define t6
Definition: regdef.h:34
#define t4
Definition: regdef.h:32
#define BF(a, b, c, s)
#define t2
Definition: regdef.h:30

Definition at line 418 of file fft_template.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 BUTTERFLIES(a0, a1, a2, a3)
Definition: fft_template.c:466
#define a0
Definition: regdef.h:46
#define a1
Definition: regdef.h:47
#define a3
Definition: regdef.h:49
#define CMUL(dre, dim, are, aim, bre, bim)
Definition: fft-internal.h:76
#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 428 of file fft_template.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 BUTTERFLIES(a0, a1, a2, a3)
Definition: fft_template.c:466
#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 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 434 of file fft_template.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);\
}
float FFTDouble
Definition: fft.h:43
#define t1
Definition: regdef.h:29
#define t3
Definition: regdef.h:31
float FFTSample
Definition: avfft.h:35
int n
Definition: avisynth_c.h:684
#define t5
Definition: regdef.h:33
#define TRANSFORM(a0, a1, a2, a3, wre, wim)
Definition: fft_template.c:428
#define TRANSFORM_ZERO(a0, a1, a2, a3)
Definition: fft_template.c:434
int
#define t6
Definition: regdef.h:34
#define t4
Definition: regdef.h:32
#define t2
Definition: regdef.h:30
const char * name
Definition: opengl_enc.c:103

Definition at line 443 of file fft_template.c.

#define BUTTERFLIES   BUTTERFLIES_BIG

Definition at line 466 of file fft_template.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_template.c:532
int n
Definition: avisynth_c.h:684
static void fft(const int32_t in[2 *256], cplx32 out[256])
Definition: dcaenc.c:347
COSTABLE_CONST FFTSample *const FFT_NAME(ff_cos_tabs)[]

Definition at line 469 of file fft_template.c.

#define pass   pass_big

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  )
COSTABLE ( 131072  )
COSTABLE_CONST FFTSample* const FFT_NAME ( ff_cos_tabs  )

Referenced by ff_init_ff_cos_tabs(), and fft16().

static void fft_permute_c ( FFTContext s,
FFTComplex z 
)
static

Definition at line 224 of file fft_template.c.

Referenced by ff_fft_init().

static void fft_calc_c ( FFTContext s,
FFTComplex z 
)
static

Definition at line 548 of file fft_template.c.

Referenced by ff_fft_init().

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

Definition at line 79 of file fft_template.c.

Referenced by ff_fft_init(), and fft_perm_avx().

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 90 of file fft_template.c.

Referenced by ff_fft_init().

static int is_second_half_of_fft32 ( int  i,
int  n 
)
static

Definition at line 108 of file fft_template.c.

Referenced by fft_perm_avx().

static av_cold void fft_perm_avx ( FFTContext s)
static

Definition at line 120 of file fft_template.c.

Referenced by ff_fft_init().

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 142 of file fft_template.c.

av_cold void ff_fft_end ( FFTContext s)

Definition at line 239 of file fft_template.c.

static void fft4 ( FFTComplex z)
static

Definition at line 478 of file fft_template.c.

Referenced by fft16(), and fft8().

static void fft8 ( FFTComplex z)
static

Definition at line 492 of file fft_template.c.

Referenced by fft16().

static void fft16 ( FFTComplex z)
static

Definition at line 508 of file fft_template.c.

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 104 of file fft_template.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, fft131072
}
static void fft4(FFTComplex *z)
Definition: fft_template.c:478
static void fft8(FFTComplex *z)
Definition: fft_template.c:492
static void fft16(FFTComplex *z)
Definition: fft_template.c:508

Definition at line 543 of file fft_template.c.

Referenced by fft_calc_c().