annotate fft.h @ 11560:8a4984c5cacc libavcodec

Define AVMediaType enum, and use it instead of enum CodecType, which is deprecated and will be dropped at the next major bump.
author stefano
date Tue, 30 Mar 2010 23:30:55 +0000
parents f468aac92300
children 052b9c58ccc4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11370
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
1 /*
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
2 * Copyright (c) 2000, 2001, 2002 Fabrice Bellard
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
3 * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
4 *
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
5 * This file is part of FFmpeg.
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
6 *
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
9 * License as published by the Free Software Foundation; either
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
11 *
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
15 * Lesser General Public License for more details.
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
16 *
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
20 */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
21
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
22 #ifndef AVCODEC_FFT_H
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
23 #define AVCODEC_FFT_H
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
24
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
25 #include <stdint.h>
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
26 #include "config.h"
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
27 #include "libavutil/mem.h"
11392
384d803faff4 Create a public API for FFT family of functions
mru
parents: 11391
diff changeset
28 #include "avfft.h"
11370
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
29
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
30 /* FFT computation */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
31
11392
384d803faff4 Create a public API for FFT family of functions
mru
parents: 11391
diff changeset
32 struct FFTContext {
11370
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
33 int nbits;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
34 int inverse;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
35 uint16_t *revtab;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
36 FFTComplex *exptab;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
37 FFTComplex *exptab1; /* only used by SSE code */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
38 FFTComplex *tmp_buf;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
39 int mdct_size; /* size of MDCT (i.e. number of input data * 2) */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
40 int mdct_bits; /* n = 2^nbits */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
41 /* pre/post rotation tables */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
42 FFTSample *tcos;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
43 FFTSample *tsin;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
44 void (*fft_permute)(struct FFTContext *s, FFTComplex *z);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
45 void (*fft_calc)(struct FFTContext *s, FFTComplex *z);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
46 void (*imdct_calc)(struct FFTContext *s, FFTSample *output, const FFTSample *input);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
47 void (*imdct_half)(struct FFTContext *s, FFTSample *output, const FFTSample *input);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
48 void (*mdct_calc)(struct FFTContext *s, FFTSample *output, const FFTSample *input);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
49 int split_radix;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
50 int permutation;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
51 #define FF_MDCT_PERM_NONE 0
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
52 #define FF_MDCT_PERM_INTERLEAVE 1
11392
384d803faff4 Create a public API for FFT family of functions
mru
parents: 11391
diff changeset
53 };
11370
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
54
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
55 #if CONFIG_HARDCODED_TABLES
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
56 #define COSTABLE_CONST const
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
57 #define SINTABLE_CONST const
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
58 #define SINETABLE_CONST const
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
59 #else
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
60 #define COSTABLE_CONST
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
61 #define SINTABLE_CONST
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
62 #define SINETABLE_CONST
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
63 #endif
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
64
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
65 #define COSTABLE(size) \
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
66 COSTABLE_CONST DECLARE_ALIGNED(16, FFTSample, ff_cos_##size)[size/2]
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
67 #define SINTABLE(size) \
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
68 SINTABLE_CONST DECLARE_ALIGNED(16, FFTSample, ff_sin_##size)[size/2]
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
69 #define SINETABLE(size) \
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
70 SINETABLE_CONST DECLARE_ALIGNED(16, float, ff_sine_##size)[size]
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
71 extern COSTABLE(16);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
72 extern COSTABLE(32);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
73 extern COSTABLE(64);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
74 extern COSTABLE(128);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
75 extern COSTABLE(256);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
76 extern COSTABLE(512);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
77 extern COSTABLE(1024);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
78 extern COSTABLE(2048);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
79 extern COSTABLE(4096);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
80 extern COSTABLE(8192);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
81 extern COSTABLE(16384);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
82 extern COSTABLE(32768);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
83 extern COSTABLE(65536);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
84 extern COSTABLE_CONST FFTSample* const ff_cos_tabs[17];
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
85
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
86 /**
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
87 * Initializes the cosine table in ff_cos_tabs[index]
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
88 * \param index index in ff_cos_tabs array of the table to initialize
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
89 */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
90 void ff_init_ff_cos_tabs(int index);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
91
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
92 extern SINTABLE(16);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
93 extern SINTABLE(32);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
94 extern SINTABLE(64);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
95 extern SINTABLE(128);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
96 extern SINTABLE(256);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
97 extern SINTABLE(512);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
98 extern SINTABLE(1024);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
99 extern SINTABLE(2048);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
100 extern SINTABLE(4096);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
101 extern SINTABLE(8192);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
102 extern SINTABLE(16384);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
103 extern SINTABLE(32768);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
104 extern SINTABLE(65536);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
105
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
106 /**
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
107 * Sets up a complex FFT.
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
108 * @param nbits log2 of the length of the input array
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
109 * @param inverse if 0 perform the forward transform, if 1 perform the inverse
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
110 */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
111 int ff_fft_init(FFTContext *s, int nbits, int inverse);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
112 void ff_fft_permute_c(FFTContext *s, FFTComplex *z);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
113 void ff_fft_calc_c(FFTContext *s, FFTComplex *z);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
114
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
115 void ff_fft_init_altivec(FFTContext *s);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
116 void ff_fft_init_mmx(FFTContext *s);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
117 void ff_fft_init_arm(FFTContext *s);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
118
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
119 /**
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
120 * Do the permutation needed BEFORE calling ff_fft_calc().
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
121 */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
122 static inline void ff_fft_permute(FFTContext *s, FFTComplex *z)
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
123 {
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
124 s->fft_permute(s, z);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
125 }
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
126 /**
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
127 * Do a complex FFT with the parameters defined in ff_fft_init(). The
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
128 * input data must be permuted before. No 1.0/sqrt(n) normalization is done.
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
129 */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
130 static inline void ff_fft_calc(FFTContext *s, FFTComplex *z)
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
131 {
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
132 s->fft_calc(s, z);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
133 }
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
134 void ff_fft_end(FFTContext *s);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
135
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
136 /* MDCT computation */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
137
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
138 static inline void ff_imdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input)
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
139 {
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
140 s->imdct_calc(s, output, input);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
141 }
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
142 static inline void ff_imdct_half(FFTContext *s, FFTSample *output, const FFTSample *input)
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
143 {
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
144 s->imdct_half(s, output, input);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
145 }
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
146
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
147 static inline void ff_mdct_calc(FFTContext *s, FFTSample *output,
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
148 const FFTSample *input)
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
149 {
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
150 s->mdct_calc(s, output, input);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
151 }
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
152
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
153 /**
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
154 * Generate a Kaiser-Bessel Derived Window.
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
155 * @param window pointer to half window
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
156 * @param alpha determines window shape
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
157 * @param n size of half window
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
158 */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
159 void ff_kbd_window_init(float *window, float alpha, int n);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
160
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
161 /**
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
162 * Generate a sine window.
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
163 * @param window pointer to half window
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
164 * @param n size of half window
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
165 */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
166 void ff_sine_window_init(float *window, int n);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
167
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
168 /**
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
169 * initialize the specified entry of ff_sine_windows
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
170 */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
171 void ff_init_ff_sine_windows(int index);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
172 extern SINETABLE( 32);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
173 extern SINETABLE( 64);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
174 extern SINETABLE( 128);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
175 extern SINETABLE( 256);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
176 extern SINETABLE( 512);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
177 extern SINETABLE(1024);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
178 extern SINETABLE(2048);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
179 extern SINETABLE(4096);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
180 extern SINETABLE_CONST float * const ff_sine_windows[13];
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
181
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
182 int ff_mdct_init(FFTContext *s, int nbits, int inverse, double scale);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
183 void ff_imdct_calc_c(FFTContext *s, FFTSample *output, const FFTSample *input);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
184 void ff_imdct_half_c(FFTContext *s, FFTSample *output, const FFTSample *input);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
185 void ff_mdct_calc_c(FFTContext *s, FFTSample *output, const FFTSample *input);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
186 void ff_mdct_end(FFTContext *s);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
187
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
188 /* Real Discrete Fourier Transform */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
189
11392
384d803faff4 Create a public API for FFT family of functions
mru
parents: 11391
diff changeset
190 struct RDFTContext {
11370
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
191 int nbits;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
192 int inverse;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
193 int sign_convention;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
194
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
195 /* pre/post rotation tables */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
196 const FFTSample *tcos;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
197 SINTABLE_CONST FFTSample *tsin;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
198 FFTContext fft;
11512
1382cfff33bb Call rdft by function pointer
mru
parents: 11392
diff changeset
199 void (*rdft_calc)(struct RDFTContext *s, FFTSample *z);
11392
384d803faff4 Create a public API for FFT family of functions
mru
parents: 11391
diff changeset
200 };
11370
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
201
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
202 /**
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
203 * Sets up a real FFT.
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
204 * @param nbits log2 of the length of the input array
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
205 * @param trans the type of transform
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
206 */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
207 int ff_rdft_init(RDFTContext *s, int nbits, enum RDFTransformType trans);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
208 void ff_rdft_end(RDFTContext *s);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
209
11532
e011e73a902b ARM: NEON optimised RDFT
mru
parents: 11518
diff changeset
210 void ff_rdft_init_arm(RDFTContext *s);
e011e73a902b ARM: NEON optimised RDFT
mru
parents: 11518
diff changeset
211
11512
1382cfff33bb Call rdft by function pointer
mru
parents: 11392
diff changeset
212 static av_always_inline void ff_rdft_calc(RDFTContext *s, FFTSample *data)
1382cfff33bb Call rdft by function pointer
mru
parents: 11392
diff changeset
213 {
1382cfff33bb Call rdft by function pointer
mru
parents: 11392
diff changeset
214 s->rdft_calc(s, data);
1382cfff33bb Call rdft by function pointer
mru
parents: 11392
diff changeset
215 }
1382cfff33bb Call rdft by function pointer
mru
parents: 11392
diff changeset
216
11370
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
217 /* Discrete Cosine Transform */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
218
11392
384d803faff4 Create a public API for FFT family of functions
mru
parents: 11391
diff changeset
219 struct DCTContext {
11370
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
220 int nbits;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
221 int inverse;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
222 RDFTContext rdft;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
223 const float *costab;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
224 FFTSample *csc2;
11518
c4d18d452f82 Call DCT by function pointer. Needed for any future ASM implementation and
vitor
parents: 11516
diff changeset
225 void (*dct_calc)(struct DCTContext *s, FFTSample *data);
11392
384d803faff4 Create a public API for FFT family of functions
mru
parents: 11391
diff changeset
226 };
11370
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
227
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
228 /**
11535
f468aac92300 Implement the discrete sine/cosine transforms DCT-I and DST-I
vitor
parents: 11532
diff changeset
229 * Sets up DCT.
f468aac92300 Implement the discrete sine/cosine transforms DCT-I and DST-I
vitor
parents: 11532
diff changeset
230 * @param nbits size of the input array:
f468aac92300 Implement the discrete sine/cosine transforms DCT-I and DST-I
vitor
parents: 11532
diff changeset
231 * (1 << nbits) for DCT-II, DCT-III and DST-I
f468aac92300 Implement the discrete sine/cosine transforms DCT-I and DST-I
vitor
parents: 11532
diff changeset
232 * (1 << nbits) + 1 for DCT-I
f468aac92300 Implement the discrete sine/cosine transforms DCT-I and DST-I
vitor
parents: 11532
diff changeset
233 *
f468aac92300 Implement the discrete sine/cosine transforms DCT-I and DST-I
vitor
parents: 11532
diff changeset
234 * @note the first element of the input of DST-I is ignored
11370
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
235 */
11535
f468aac92300 Implement the discrete sine/cosine transforms DCT-I and DST-I
vitor
parents: 11532
diff changeset
236 int ff_dct_init(DCTContext *s, int nbits, enum DCTTransformType type);
11370
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
237 void ff_dct_calc(DCTContext *s, FFTSample *data);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
238 void ff_dct_end (DCTContext *s);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
239
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
240 #endif /* AVCODEC_FFT_H */