libavcodec/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"
Go to the source code of this file.
|
Defines |
#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].
|
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.
|
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.
Define Documentation
#define BUTTERFLIES BUTTERFLIES_BIG |
#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);\
}
Definition at line 268 of file fft.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);\
}
Definition at line 220 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);\
}
Definition at line 271 of file fft.c.
Value:
static void name(FFTComplex *z, const FFTSample *wre, unsigned int n)\
{\
FFTDouble t1, t2, t3, t4, t5, t6;\
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);\
}
Definition at line 245 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);\
BUTTERFLIES(a0,a1,a2,a3)\
}
Definition at line 230 of file fft.c.
Referenced by fft16(), and fft8().
#define TRANSFORM_ZERO |
( |
a0, |
|
|
a1, |
|
|
a2, |
|
|
a3 |
|
) |
|
Function Documentation
av_cold int ff_fft_init |
( |
FFTContext * |
s, |
|
|
int |
nbits, |
|
|
int |
inverse | |
|
) |
| | |
Set up a complex FFT.
- Parameters:
-
| nbits | log2 of the length of the input array |
| inverse | if 0 perform the forward transform, if 1 perform the inverse |
Definition at line 134 of file fft.c.
av_cold void ff_init_ff_cos_tabs |
( |
int |
index |
) |
|
Initialize the cosine table in ff_cos_tabs[index].
- Parameters:
-
| index | index in ff_cos_tabs array of the table to initialize |
Definition at line 82 of file fft.c.
COSTABLE_CONST FFTSample* const FFT_NAME |
( |
ff_cos_tabs |
|
) |
|
static av_cold void fft_perm_avx |
( |
FFTContext * |
s |
) |
[static] |
static int is_second_half_of_fft32 |
( |
int |
i, |
|
|
int |
n | |
|
) |
| | [static] |
static int split_radix_permutation |
( |
int |
i, |
|
|
int |
n, |
|
|
int |
inverse | |
|
) |
| | [static] |
Variable Documentation
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().
Initial value:
{
fft4, fft8, fft16, fft32, fft64, fft128, fft256, fft512, fft1024,
fft2048, fft4096, fft8192, fft16384, fft32768, fft65536,
}
Referenced by ff_fft_calc_c().