diff options
Diffstat (limited to 'apps/codecs/libfaad/common.h')
-rw-r--r-- | apps/codecs/libfaad/common.h | 425 |
1 files changed, 425 insertions, 0 deletions
diff --git a/apps/codecs/libfaad/common.h b/apps/codecs/libfaad/common.h new file mode 100644 index 0000000000..efe8288b36 --- /dev/null +++ b/apps/codecs/libfaad/common.h | |||
@@ -0,0 +1,425 @@ | |||
1 | /* | ||
2 | ** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding | ||
3 | ** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com | ||
4 | ** | ||
5 | ** This program is free software; you can redistribute it and/or modify | ||
6 | ** it under the terms of the GNU General Public License as published by | ||
7 | ** the Free Software Foundation; either version 2 of the License, or | ||
8 | ** (at your option) any later version. | ||
9 | ** | ||
10 | ** This program is distributed in the hope that it will be useful, | ||
11 | ** but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | ** GNU General Public License for more details. | ||
14 | ** | ||
15 | ** You should have received a copy of the GNU General Public License | ||
16 | ** along with this program; if not, write to the Free Software | ||
17 | ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
18 | ** | ||
19 | ** Any non-GPL usage of this software or parts of this software is strictly | ||
20 | ** forbidden. | ||
21 | ** | ||
22 | ** Commercial non-GPL licensing of this software is possible. | ||
23 | ** For more info contact Ahead Software through Mpeg4AAClicense@nero.com. | ||
24 | ** | ||
25 | ** $Id$ | ||
26 | **/ | ||
27 | |||
28 | #ifndef __COMMON_H__ | ||
29 | #define __COMMON_H__ | ||
30 | |||
31 | #ifdef __cplusplus | ||
32 | extern "C" { | ||
33 | #endif | ||
34 | |||
35 | #ifdef HAVE_CONFIG_H | ||
36 | # include "../config.h" | ||
37 | #endif | ||
38 | |||
39 | #define INLINE __inline | ||
40 | #if 0 //defined(_WIN32) && !defined(_WIN32_WCE) | ||
41 | #define ALIGN __declspec(align(16)) | ||
42 | #else | ||
43 | #define ALIGN | ||
44 | #endif | ||
45 | |||
46 | #ifndef max | ||
47 | #define max(a, b) (((a) > (b)) ? (a) : (b)) | ||
48 | #endif | ||
49 | #ifndef min | ||
50 | #define min(a, b) (((a) < (b)) ? (a) : (b)) | ||
51 | #endif | ||
52 | |||
53 | /* COMPILE TIME DEFINITIONS */ | ||
54 | |||
55 | /* use double precision */ | ||
56 | /* #define USE_DOUBLE_PRECISION */ | ||
57 | /* use fixed point reals */ | ||
58 | //#define FIXED_POINT | ||
59 | //#define BIG_IQ_TABLE | ||
60 | |||
61 | /* Use if target platform has address generators with autoincrement */ | ||
62 | //#define PREFER_POINTERS | ||
63 | |||
64 | #ifdef _WIN32_WCE | ||
65 | #define FIXED_POINT | ||
66 | #endif | ||
67 | |||
68 | |||
69 | #define ERROR_RESILIENCE | ||
70 | |||
71 | |||
72 | /* Allow decoding of MAIN profile AAC */ | ||
73 | #define MAIN_DEC | ||
74 | /* Allow decoding of SSR profile AAC */ | ||
75 | //#define SSR_DEC | ||
76 | /* Allow decoding of LTP profile AAC */ | ||
77 | #define LTP_DEC | ||
78 | /* Allow decoding of LD profile AAC */ | ||
79 | #define LD_DEC | ||
80 | /* Allow decoding of scalable profiles */ | ||
81 | //#define SCALABLE_DEC | ||
82 | /* Allow decoding of Digital Radio Mondiale (DRM) */ | ||
83 | //#define DRM | ||
84 | //#define DRM_PS | ||
85 | |||
86 | /* LD can't do without LTP */ | ||
87 | #ifdef LD_DEC | ||
88 | #ifndef ERROR_RESILIENCE | ||
89 | #define ERROR_RESILIENCE | ||
90 | #endif | ||
91 | #ifndef LTP_DEC | ||
92 | #define LTP_DEC | ||
93 | #endif | ||
94 | #endif | ||
95 | |||
96 | #define ALLOW_SMALL_FRAMELENGTH | ||
97 | |||
98 | |||
99 | // Define LC_ONLY_DECODER if you want a pure AAC LC decoder (independant of SBR_DEC and PS_DEC) | ||
100 | //#define LC_ONLY_DECODER | ||
101 | #ifdef LC_ONLY_DECODER | ||
102 | #undef LD_DEC | ||
103 | #undef LTP_DEC | ||
104 | #undef MAIN_DEC | ||
105 | #undef SSR_DEC | ||
106 | #undef DRM | ||
107 | #undef ALLOW_SMALL_FRAMELENGTH | ||
108 | #undef ERROR_RESILIENCE | ||
109 | #endif | ||
110 | |||
111 | #define SBR_DEC | ||
112 | //#define SBR_LOW_POWER | ||
113 | #define PS_DEC | ||
114 | |||
115 | /* FIXED POINT: No MAIN decoding */ | ||
116 | #ifdef FIXED_POINT | ||
117 | # ifdef MAIN_DEC | ||
118 | # undef MAIN_DEC | ||
119 | # endif | ||
120 | #endif // FIXED_POINT | ||
121 | |||
122 | #ifdef DRM | ||
123 | # ifndef SCALABLE_DEC | ||
124 | # define SCALABLE_DEC | ||
125 | # endif | ||
126 | #endif | ||
127 | |||
128 | |||
129 | #ifdef FIXED_POINT | ||
130 | #define DIV_R(A, B) (((int64_t)A << REAL_BITS)/B) | ||
131 | #define DIV_C(A, B) (((int64_t)A << COEF_BITS)/B) | ||
132 | #else | ||
133 | #define DIV_R(A, B) ((A)/(B)) | ||
134 | #define DIV_C(A, B) ((A)/(B)) | ||
135 | #endif | ||
136 | |||
137 | #ifndef SBR_LOW_POWER | ||
138 | #define qmf_t complex_t | ||
139 | #define QMF_RE(A) RE(A) | ||
140 | #define QMF_IM(A) IM(A) | ||
141 | #else | ||
142 | #define qmf_t real_t | ||
143 | #define QMF_RE(A) (A) | ||
144 | #define QMF_IM(A) | ||
145 | #endif | ||
146 | |||
147 | |||
148 | /* END COMPILE TIME DEFINITIONS */ | ||
149 | |||
150 | #if defined(_WIN32) && !defined(__MINGW32__) | ||
151 | |||
152 | #include <stdlib.h> | ||
153 | |||
154 | typedef unsigned __int64 uint64_t; | ||
155 | typedef unsigned __int32 uint32_t; | ||
156 | typedef unsigned __int16 uint16_t; | ||
157 | typedef unsigned __int8 uint8_t; | ||
158 | typedef __int64 int64_t; | ||
159 | typedef __int32 int32_t; | ||
160 | typedef __int16 int16_t; | ||
161 | typedef __int8 int8_t; | ||
162 | typedef float float32_t; | ||
163 | |||
164 | |||
165 | #else | ||
166 | |||
167 | #include <stdio.h> | ||
168 | #if HAVE_SYS_TYPES_H | ||
169 | # include <sys/types.h> | ||
170 | #endif | ||
171 | #if HAVE_SYS_STAT_H | ||
172 | # include <sys/stat.h> | ||
173 | #endif | ||
174 | #if STDC_HEADERS | ||
175 | # include <stdlib.h> | ||
176 | # include <stddef.h> | ||
177 | #else | ||
178 | # if HAVE_STDLIB_H | ||
179 | # include <stdlib.h> | ||
180 | # endif | ||
181 | #endif | ||
182 | #if HAVE_STRING_H | ||
183 | # if !STDC_HEADERS && HAVE_MEMORY_H | ||
184 | # include <memory.h> | ||
185 | # endif | ||
186 | # include <string.h> | ||
187 | #endif | ||
188 | #if HAVE_STRINGS_H | ||
189 | # include <strings.h> | ||
190 | #endif | ||
191 | #if HAVE_INTTYPES_H | ||
192 | # include <inttypes.h> | ||
193 | #else | ||
194 | # if HAVE_STDINT_H | ||
195 | # include <stdint.h> | ||
196 | # else | ||
197 | /* we need these... */ | ||
198 | typedef unsigned long long uint64_t; | ||
199 | typedef unsigned long uint32_t; | ||
200 | typedef unsigned short uint16_t; | ||
201 | typedef unsigned char uint8_t; | ||
202 | typedef long long int64_t; | ||
203 | typedef long int32_t; | ||
204 | typedef short int16_t; | ||
205 | typedef char int8_t; | ||
206 | # endif | ||
207 | #endif | ||
208 | #if HAVE_UNISTD_H | ||
209 | # include <unistd.h> | ||
210 | #endif | ||
211 | |||
212 | #ifndef HAVE_FLOAT32_T | ||
213 | typedef float float32_t; | ||
214 | #endif | ||
215 | |||
216 | #if STDC_HEADERS | ||
217 | # include <string.h> | ||
218 | #else | ||
219 | # if !HAVE_STRCHR | ||
220 | # define strchr index | ||
221 | # define strrchr rindex | ||
222 | # endif | ||
223 | char *strchr(), *strrchr(); | ||
224 | # if !HAVE_MEMCPY | ||
225 | # define memcpy(d, s, n) bcopy((s), (d), (n)) | ||
226 | # define memmove(d, s, n) bcopy((s), (d), (n)) | ||
227 | # endif | ||
228 | #endif | ||
229 | |||
230 | #endif | ||
231 | |||
232 | #ifdef WORDS_BIGENDIAN | ||
233 | #define ARCH_IS_BIG_ENDIAN | ||
234 | #endif | ||
235 | |||
236 | /* FIXED_POINT doesn't work with MAIN and SSR yet */ | ||
237 | #ifdef FIXED_POINT | ||
238 | #undef MAIN_DEC | ||
239 | #undef SSR_DEC | ||
240 | #endif | ||
241 | |||
242 | |||
243 | #if defined(FIXED_POINT) | ||
244 | |||
245 | #include "fixed.h" | ||
246 | |||
247 | #elif defined(USE_DOUBLE_PRECISION) | ||
248 | |||
249 | typedef double real_t; | ||
250 | |||
251 | #include <math.h> | ||
252 | |||
253 | #define MUL_R(A,B) ((A)*(B)) | ||
254 | #define MUL_C(A,B) ((A)*(B)) | ||
255 | #define MUL_F(A,B) ((A)*(B)) | ||
256 | |||
257 | /* Complex multiplication */ | ||
258 | static INLINE void ComplexMult(real_t *y1, real_t *y2, | ||
259 | real_t x1, real_t x2, real_t c1, real_t c2) | ||
260 | { | ||
261 | *y1 = MUL_F(x1, c1) + MUL_F(x2, c2); | ||
262 | *y2 = MUL_F(x2, c1) - MUL_F(x1, c2); | ||
263 | } | ||
264 | |||
265 | #define REAL_CONST(A) ((real_t)(A)) | ||
266 | #define COEF_CONST(A) ((real_t)(A)) | ||
267 | #define Q2_CONST(A) ((real_t)(A)) | ||
268 | #define FRAC_CONST(A) ((real_t)(A)) /* pure fractional part */ | ||
269 | |||
270 | #else /* Normal floating point operation */ | ||
271 | |||
272 | typedef float real_t; | ||
273 | |||
274 | #define MUL_R(A,B) ((A)*(B)) | ||
275 | #define MUL_C(A,B) ((A)*(B)) | ||
276 | #define MUL_F(A,B) ((A)*(B)) | ||
277 | |||
278 | #define REAL_CONST(A) ((real_t)(A)) | ||
279 | #define COEF_CONST(A) ((real_t)(A)) | ||
280 | #define Q2_CONST(A) ((real_t)(A)) | ||
281 | #define FRAC_CONST(A) ((real_t)(A)) /* pure fractional part */ | ||
282 | |||
283 | /* Complex multiplication */ | ||
284 | static INLINE void ComplexMult(real_t *y1, real_t *y2, | ||
285 | real_t x1, real_t x2, real_t c1, real_t c2) | ||
286 | { | ||
287 | *y1 = MUL_F(x1, c1) + MUL_F(x2, c2); | ||
288 | *y2 = MUL_F(x2, c1) - MUL_F(x1, c2); | ||
289 | } | ||
290 | |||
291 | |||
292 | #if defined(_WIN32) && !defined(__MINGW32__) | ||
293 | #define HAS_LRINTF | ||
294 | static INLINE int lrintf(float f) | ||
295 | { | ||
296 | int i; | ||
297 | __asm | ||
298 | { | ||
299 | fld f | ||
300 | fistp i | ||
301 | } | ||
302 | return i; | ||
303 | } | ||
304 | #elif (defined(__i386__) && defined(__GNUC__)) | ||
305 | #define HAS_LRINTF | ||
306 | // from http://www.stereopsis.com/FPU.html | ||
307 | static INLINE int lrintf(float f) | ||
308 | { | ||
309 | int i; | ||
310 | __asm__ __volatile__ ( | ||
311 | "flds %1 \n\t" | ||
312 | "fistpl %0 \n\t" | ||
313 | : "=m" (i) | ||
314 | : "m" (f)); | ||
315 | return i; | ||
316 | } | ||
317 | #endif | ||
318 | |||
319 | |||
320 | #ifdef __ICL /* only Intel C compiler has fmath ??? */ | ||
321 | |||
322 | #include <mathf.h> | ||
323 | |||
324 | #define sin sinf | ||
325 | #define cos cosf | ||
326 | #define log logf | ||
327 | #define floor floorf | ||
328 | #define ceil ceilf | ||
329 | #define sqrt sqrtf | ||
330 | |||
331 | #else | ||
332 | |||
333 | #ifdef HAVE_LRINTF | ||
334 | # define HAS_LRINTF | ||
335 | # define _ISOC9X_SOURCE 1 | ||
336 | # define _ISOC99_SOURCE 1 | ||
337 | # define __USE_ISOC9X 1 | ||
338 | # define __USE_ISOC99 1 | ||
339 | #endif | ||
340 | |||
341 | #include <math.h> | ||
342 | |||
343 | #ifdef HAVE_SINF | ||
344 | # define sin sinf | ||
345 | #error | ||
346 | #endif | ||
347 | #ifdef HAVE_COSF | ||
348 | # define cos cosf | ||
349 | #endif | ||
350 | #ifdef HAVE_LOGF | ||
351 | # define log logf | ||
352 | #endif | ||
353 | #ifdef HAVE_EXPF | ||
354 | # define exp expf | ||
355 | #endif | ||
356 | #ifdef HAVE_FLOORF | ||
357 | # define floor floorf | ||
358 | #endif | ||
359 | #ifdef HAVE_CEILF | ||
360 | # define ceil ceilf | ||
361 | #endif | ||
362 | #ifdef HAVE_SQRTF | ||
363 | # define sqrt sqrtf | ||
364 | #endif | ||
365 | |||
366 | #endif | ||
367 | |||
368 | #endif | ||
369 | |||
370 | #ifndef HAS_LRINTF | ||
371 | /* standard cast */ | ||
372 | #define lrintf(f) ((int32_t)(f)) | ||
373 | #endif | ||
374 | |||
375 | typedef real_t complex_t[2]; | ||
376 | #define RE(A) A[0] | ||
377 | #define IM(A) A[1] | ||
378 | |||
379 | |||
380 | /* common functions */ | ||
381 | uint8_t cpu_has_sse(void); | ||
382 | uint32_t random_int(void); | ||
383 | uint32_t ones32(uint32_t x); | ||
384 | uint32_t floor_log2(uint32_t x); | ||
385 | uint32_t wl_min_lzc(uint32_t x); | ||
386 | #ifdef FIXED_POINT | ||
387 | #define LOG2_MIN_INF REAL_CONST(-10000) | ||
388 | int32_t log2_int(uint32_t val); | ||
389 | int32_t log2_fix(uint32_t val); | ||
390 | int32_t pow2_int(real_t val); | ||
391 | real_t pow2_fix(real_t val); | ||
392 | #endif | ||
393 | uint8_t get_sr_index(const uint32_t samplerate); | ||
394 | uint8_t max_pred_sfb(const uint8_t sr_index); | ||
395 | uint8_t max_tns_sfb(const uint8_t sr_index, const uint8_t object_type, | ||
396 | const uint8_t is_short); | ||
397 | uint32_t get_sample_rate(const uint8_t sr_index); | ||
398 | int8_t can_decode_ot(const uint8_t object_type); | ||
399 | |||
400 | void *faad_malloc(size_t size); | ||
401 | void faad_free(void *b); | ||
402 | |||
403 | //#define PROFILE | ||
404 | #ifdef PROFILE | ||
405 | static int64_t faad_get_ts() | ||
406 | { | ||
407 | __asm | ||
408 | { | ||
409 | rdtsc | ||
410 | } | ||
411 | } | ||
412 | #endif | ||
413 | |||
414 | #ifndef M_PI | ||
415 | #define M_PI 3.14159265358979323846 | ||
416 | #endif | ||
417 | #ifndef M_PI_2 /* PI/2 */ | ||
418 | #define M_PI_2 1.57079632679489661923 | ||
419 | #endif | ||
420 | |||
421 | |||
422 | #ifdef __cplusplus | ||
423 | } | ||
424 | #endif | ||
425 | #endif | ||