annotate fft.h @ 12530:63edd10ad4bc libavcodec tip

Try to fix crashes introduced by r25218 r25218 made assumptions about the existence of past reference frames that weren't necessarily true.
author darkshikari
date Tue, 28 Sep 2010 09:06:22 +0000
parents 00676ed9b822
children
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 *tmp_buf;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
37 int mdct_size; /* size of MDCT (i.e. number of input data * 2) */
12407
00676ed9b822 Revert unintended changes to fft.h from r24890.
alexc
parents: 12406
diff changeset
38 int mdct_bits; /* n = 2^nbits */
11370
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
39 /* pre/post rotation tables */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
40 FFTSample *tcos;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
41 FFTSample *tsin;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
42 void (*fft_permute)(struct FFTContext *s, FFTComplex *z);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
43 void (*fft_calc)(struct FFTContext *s, FFTComplex *z);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
44 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
45 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
46 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
47 int permutation;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
48 #define FF_MDCT_PERM_NONE 0
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
49 #define FF_MDCT_PERM_INTERLEAVE 1
11392
384d803faff4 Create a public API for FFT family of functions
mru
parents: 11391
diff changeset
50 };
11370
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
51
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
52 #if CONFIG_HARDCODED_TABLES
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
53 #define COSTABLE_CONST const
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
54 #define SINTABLE_CONST const
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
55 #define SINETABLE_CONST const
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
56 #else
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
57 #define COSTABLE_CONST
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
58 #define SINTABLE_CONST
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
59 #define SINETABLE_CONST
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
60 #endif
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
61
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
62 #define COSTABLE(size) \
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
63 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
64 #define SINTABLE(size) \
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
65 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
66 #define SINETABLE(size) \
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
67 SINETABLE_CONST DECLARE_ALIGNED(16, float, ff_sine_##size)[size]
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
68 extern COSTABLE(16);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
69 extern COSTABLE(32);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
70 extern COSTABLE(64);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
71 extern COSTABLE(128);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
72 extern COSTABLE(256);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
73 extern COSTABLE(512);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
74 extern COSTABLE(1024);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
75 extern COSTABLE(2048);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
76 extern COSTABLE(4096);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
77 extern COSTABLE(8192);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
78 extern COSTABLE(16384);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
79 extern COSTABLE(32768);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
80 extern COSTABLE(65536);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
81 extern COSTABLE_CONST FFTSample* const ff_cos_tabs[17];
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
82
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
83 /**
12024
fdafbcef52f5 Fix grammar errors in documentation
mru
parents: 11944
diff changeset
84 * Initialize the cosine table in ff_cos_tabs[index]
11370
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
85 * \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
86 */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
87 void ff_init_ff_cos_tabs(int index);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
88
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
89 extern SINTABLE(16);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
90 extern SINTABLE(32);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
91 extern SINTABLE(64);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
92 extern SINTABLE(128);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
93 extern SINTABLE(256);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
94 extern SINTABLE(512);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
95 extern SINTABLE(1024);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
96 extern SINTABLE(2048);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
97 extern SINTABLE(4096);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
98 extern SINTABLE(8192);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
99 extern SINTABLE(16384);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
100 extern SINTABLE(32768);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
101 extern SINTABLE(65536);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
102
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
103 /**
12024
fdafbcef52f5 Fix grammar errors in documentation
mru
parents: 11944
diff changeset
104 * Set up a complex FFT.
11370
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
105 * @param nbits log2 of the length of the input array
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
106 * @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
107 */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
108 int ff_fft_init(FFTContext *s, int nbits, int inverse);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
109 void ff_fft_permute_c(FFTContext *s, FFTComplex *z);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
110 void ff_fft_calc_c(FFTContext *s, FFTComplex *z);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
111
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
112 void ff_fft_init_altivec(FFTContext *s);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
113 void ff_fft_init_mmx(FFTContext *s);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
114 void ff_fft_init_arm(FFTContext *s);
12099
1bf322283429 SSE optimized 32-point DCT
vitor
parents: 12047
diff changeset
115 void ff_dct_init_mmx(DCTContext *s);
11370
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
116
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
117 /**
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
118 * Do the permutation needed BEFORE calling ff_fft_calc().
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 static inline void ff_fft_permute(FFTContext *s, FFTComplex *z)
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 s->fft_permute(s, 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 /**
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
125 * 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
126 * 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
127 */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
128 static inline void ff_fft_calc(FFTContext *s, FFTComplex *z)
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 s->fft_calc(s, 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 void ff_fft_end(FFTContext *s);
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 /* MDCT computation */
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 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
137 {
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
138 s->imdct_calc(s, output, 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 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
141 {
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
142 s->imdct_half(s, output, 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
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
145 static inline void ff_mdct_calc(FFTContext *s, FFTSample *output,
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
146 const FFTSample *input)
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
147 {
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
148 s->mdct_calc(s, output, 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
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
151 /**
11944
052b9c58ccc4 Remove VLA in ff_kbd_window_init, limit window size to 1024
mru
parents: 11535
diff changeset
152 * Maximum window size for ff_kbd_window_init.
052b9c58ccc4 Remove VLA in ff_kbd_window_init, limit window size to 1024
mru
parents: 11535
diff changeset
153 */
052b9c58ccc4 Remove VLA in ff_kbd_window_init, limit window size to 1024
mru
parents: 11535
diff changeset
154 #define FF_KBD_WINDOW_MAX 1024
052b9c58ccc4 Remove VLA in ff_kbd_window_init, limit window size to 1024
mru
parents: 11535
diff changeset
155
052b9c58ccc4 Remove VLA in ff_kbd_window_init, limit window size to 1024
mru
parents: 11535
diff changeset
156 /**
11370
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
157 * Generate a Kaiser-Bessel Derived Window.
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
158 * @param window pointer to half window
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
159 * @param alpha determines window shape
11944
052b9c58ccc4 Remove VLA in ff_kbd_window_init, limit window size to 1024
mru
parents: 11535
diff changeset
160 * @param n size of half window, max FF_KBD_WINDOW_MAX
11370
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 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
163
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
164 /**
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
165 * Generate a sine window.
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
166 * @param window pointer to half window
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
167 * @param n size of half window
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 void ff_sine_window_init(float *window, int n);
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 /**
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
172 * initialize the specified entry of ff_sine_windows
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
173 */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
174 void ff_init_ff_sine_windows(int index);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
175 extern SINETABLE( 32);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
176 extern SINETABLE( 64);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
177 extern SINETABLE( 128);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
178 extern SINETABLE( 256);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
179 extern SINETABLE( 512);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
180 extern SINETABLE(1024);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
181 extern SINETABLE(2048);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
182 extern SINETABLE(4096);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
183 extern SINETABLE_CONST float * const ff_sine_windows[13];
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
184
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
185 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
186 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
187 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
188 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
189 void ff_mdct_end(FFTContext *s);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
190
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
191 /* Real Discrete Fourier Transform */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
192
11392
384d803faff4 Create a public API for FFT family of functions
mru
parents: 11391
diff changeset
193 struct RDFTContext {
11370
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
194 int nbits;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
195 int inverse;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
196 int sign_convention;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
197
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
198 /* pre/post rotation tables */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
199 const FFTSample *tcos;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
200 SINTABLE_CONST FFTSample *tsin;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
201 FFTContext fft;
11512
1382cfff33bb Call rdft by function pointer
mru
parents: 11392
diff changeset
202 void (*rdft_calc)(struct RDFTContext *s, FFTSample *z);
11392
384d803faff4 Create a public API for FFT family of functions
mru
parents: 11391
diff changeset
203 };
11370
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
204
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
205 /**
12024
fdafbcef52f5 Fix grammar errors in documentation
mru
parents: 11944
diff changeset
206 * Set up a real FFT.
11370
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
207 * @param nbits log2 of the length of the input array
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
208 * @param trans the type of transform
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
209 */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
210 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
211 void ff_rdft_end(RDFTContext *s);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
212
11532
e011e73a902b ARM: NEON optimised RDFT
mru
parents: 11518
diff changeset
213 void ff_rdft_init_arm(RDFTContext *s);
e011e73a902b ARM: NEON optimised RDFT
mru
parents: 11518
diff changeset
214
11512
1382cfff33bb Call rdft by function pointer
mru
parents: 11392
diff changeset
215 static av_always_inline void ff_rdft_calc(RDFTContext *s, FFTSample *data)
1382cfff33bb Call rdft by function pointer
mru
parents: 11392
diff changeset
216 {
1382cfff33bb Call rdft by function pointer
mru
parents: 11392
diff changeset
217 s->rdft_calc(s, data);
1382cfff33bb Call rdft by function pointer
mru
parents: 11392
diff changeset
218 }
1382cfff33bb Call rdft by function pointer
mru
parents: 11392
diff changeset
219
11370
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
220 /* Discrete Cosine Transform */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
221
11392
384d803faff4 Create a public API for FFT family of functions
mru
parents: 11391
diff changeset
222 struct DCTContext {
11370
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
223 int nbits;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
224 int inverse;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
225 RDFTContext rdft;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
226 const float *costab;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
227 FFTSample *csc2;
11518
c4d18d452f82 Call DCT by function pointer. Needed for any future ASM implementation and
vitor
parents: 11516
diff changeset
228 void (*dct_calc)(struct DCTContext *s, FFTSample *data);
12026
3f3d08bb5cf8 More mp{1,2,3} 32-point DCT transform to our common DCT framework.
vitor
parents: 12024
diff changeset
229 void (*dct32)(FFTSample *out, const FFTSample *in);
11392
384d803faff4 Create a public API for FFT family of functions
mru
parents: 11391
diff changeset
230 };
11370
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
231
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
232 /**
12024
fdafbcef52f5 Fix grammar errors in documentation
mru
parents: 11944
diff changeset
233 * Set up DCT.
11535
f468aac92300 Implement the discrete sine/cosine transforms DCT-I and DST-I
vitor
parents: 11532
diff changeset
234 * @param nbits size of the input array:
f468aac92300 Implement the discrete sine/cosine transforms DCT-I and DST-I
vitor
parents: 11532
diff changeset
235 * (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
236 * (1 << nbits) + 1 for DCT-I
f468aac92300 Implement the discrete sine/cosine transforms DCT-I and DST-I
vitor
parents: 11532
diff changeset
237 *
f468aac92300 Implement the discrete sine/cosine transforms DCT-I and DST-I
vitor
parents: 11532
diff changeset
238 * @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
239 */
11535
f468aac92300 Implement the discrete sine/cosine transforms DCT-I and DST-I
vitor
parents: 11532
diff changeset
240 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
241 void ff_dct_calc(DCTContext *s, FFTSample *data);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
242 void ff_dct_end (DCTContext *s);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
243
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
244 #endif /* AVCODEC_FFT_H */