annotate fft.h @ 12043:f9a0bd0888a4 libavcodec

mpegaudio: call ff_mpegaudiodec_init_mmx() only from float decoder The mmx code is floating-point only, and this function does not know from which decoder it is called. Without this change, the integer decoder only "works" because the size of the context struct is smaller in this case, and the mmx init function writes the function pointer outside the allocated context.
author mru
date Thu, 01 Jul 2010 23:21:17 +0000
parents 3f3d08bb5cf8
children c80c7a717156
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 /**
12024
fdafbcef52f5 Fix grammar errors in documentation
mru
parents: 11944
diff changeset
87 * Initialize the cosine table in ff_cos_tabs[index]
11370
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 /**
12024
fdafbcef52f5 Fix grammar errors in documentation
mru
parents: 11944
diff changeset
107 * Set up a complex FFT.
11370
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 /**
11944
052b9c58ccc4 Remove VLA in ff_kbd_window_init, limit window size to 1024
mru
parents: 11535
diff changeset
154 * 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
155 */
052b9c58ccc4 Remove VLA in ff_kbd_window_init, limit window size to 1024
mru
parents: 11535
diff changeset
156 #define FF_KBD_WINDOW_MAX 1024
052b9c58ccc4 Remove VLA in ff_kbd_window_init, limit window size to 1024
mru
parents: 11535
diff changeset
157
052b9c58ccc4 Remove VLA in ff_kbd_window_init, limit window size to 1024
mru
parents: 11535
diff changeset
158 /**
11370
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
159 * Generate a Kaiser-Bessel Derived Window.
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
160 * @param window pointer to half window
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
161 * @param alpha determines window shape
11944
052b9c58ccc4 Remove VLA in ff_kbd_window_init, limit window size to 1024
mru
parents: 11535
diff changeset
162 * @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
163 */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
164 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
165
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
166 /**
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
167 * Generate a sine window.
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
168 * @param window pointer to half window
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
169 * @param n size of half window
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_sine_window_init(float *window, int n);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
172
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 * initialize the specified entry of ff_sine_windows
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
175 */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
176 void ff_init_ff_sine_windows(int index);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
177 extern SINETABLE( 32);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
178 extern SINETABLE( 64);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
179 extern SINETABLE( 128);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
180 extern SINETABLE( 256);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
181 extern SINETABLE( 512);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
182 extern SINETABLE(1024);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
183 extern SINETABLE(2048);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
184 extern SINETABLE(4096);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
185 extern SINETABLE_CONST float * const ff_sine_windows[13];
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
186
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
187 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
188 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
189 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
190 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
191 void ff_mdct_end(FFTContext *s);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
192
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
193 /* Real Discrete Fourier Transform */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
194
11392
384d803faff4 Create a public API for FFT family of functions
mru
parents: 11391
diff changeset
195 struct RDFTContext {
11370
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
196 int nbits;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
197 int inverse;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
198 int sign_convention;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
199
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
200 /* pre/post rotation tables */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
201 const FFTSample *tcos;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
202 SINTABLE_CONST FFTSample *tsin;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
203 FFTContext fft;
11512
1382cfff33bb Call rdft by function pointer
mru
parents: 11392
diff changeset
204 void (*rdft_calc)(struct RDFTContext *s, FFTSample *z);
11392
384d803faff4 Create a public API for FFT family of functions
mru
parents: 11391
diff changeset
205 };
11370
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 /**
12024
fdafbcef52f5 Fix grammar errors in documentation
mru
parents: 11944
diff changeset
208 * Set up a real FFT.
11370
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
209 * @param nbits log2 of the length of the input array
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
210 * @param trans the type of transform
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
211 */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
212 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
213 void ff_rdft_end(RDFTContext *s);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
214
11532
e011e73a902b ARM: NEON optimised RDFT
mru
parents: 11518
diff changeset
215 void ff_rdft_init_arm(RDFTContext *s);
e011e73a902b ARM: NEON optimised RDFT
mru
parents: 11518
diff changeset
216
11512
1382cfff33bb Call rdft by function pointer
mru
parents: 11392
diff changeset
217 static av_always_inline void ff_rdft_calc(RDFTContext *s, FFTSample *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 s->rdft_calc(s, data);
1382cfff33bb Call rdft by function pointer
mru
parents: 11392
diff changeset
220 }
1382cfff33bb Call rdft by function pointer
mru
parents: 11392
diff changeset
221
11370
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
222 /* Discrete Cosine Transform */
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
223
11392
384d803faff4 Create a public API for FFT family of functions
mru
parents: 11391
diff changeset
224 struct DCTContext {
11370
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
225 int nbits;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
226 int inverse;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
227 RDFTContext rdft;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
228 const float *costab;
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
229 FFTSample *csc2;
11518
c4d18d452f82 Call DCT by function pointer. Needed for any future ASM implementation and
vitor
parents: 11516
diff changeset
230 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
231 void (*dct32)(FFTSample *out, const FFTSample *in);
11392
384d803faff4 Create a public API for FFT family of functions
mru
parents: 11391
diff changeset
232 };
11370
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
233
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
234 /**
12024
fdafbcef52f5 Fix grammar errors in documentation
mru
parents: 11944
diff changeset
235 * Set up DCT.
11535
f468aac92300 Implement the discrete sine/cosine transforms DCT-I and DST-I
vitor
parents: 11532
diff changeset
236 * @param nbits size of the input array:
f468aac92300 Implement the discrete sine/cosine transforms DCT-I and DST-I
vitor
parents: 11532
diff changeset
237 * (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
238 * (1 << nbits) + 1 for DCT-I
f468aac92300 Implement the discrete sine/cosine transforms DCT-I and DST-I
vitor
parents: 11532
diff changeset
239 *
f468aac92300 Implement the discrete sine/cosine transforms DCT-I and DST-I
vitor
parents: 11532
diff changeset
240 * @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
241 */
11535
f468aac92300 Implement the discrete sine/cosine transforms DCT-I and DST-I
vitor
parents: 11532
diff changeset
242 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
243 void ff_dct_calc(DCTContext *s, FFTSample *data);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
244 void ff_dct_end (DCTContext *s);
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
245
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents:
diff changeset
246 #endif /* AVCODEC_FFT_H */