summaryrefslogtreecommitdiff
path: root/apps/codecs/libfaad/common.h
diff options
context:
space:
mode:
Diffstat (limited to 'apps/codecs/libfaad/common.h')
-rw-r--r--apps/codecs/libfaad/common.h425
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
32extern "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
154typedef unsigned __int64 uint64_t;
155typedef unsigned __int32 uint32_t;
156typedef unsigned __int16 uint16_t;
157typedef unsigned __int8 uint8_t;
158typedef __int64 int64_t;
159typedef __int32 int32_t;
160typedef __int16 int16_t;
161typedef __int8 int8_t;
162typedef 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... */
198typedef unsigned long long uint64_t;
199typedef unsigned long uint32_t;
200typedef unsigned short uint16_t;
201typedef unsigned char uint8_t;
202typedef long long int64_t;
203typedef long int32_t;
204typedef short int16_t;
205typedef char int8_t;
206# endif
207#endif
208#if HAVE_UNISTD_H
209# include <unistd.h>
210#endif
211
212#ifndef HAVE_FLOAT32_T
213typedef 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
223char *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
375typedef real_t complex_t[2];
376#define RE(A) A[0]
377#define IM(A) A[1]
378
379
380/* common functions */
381uint8_t cpu_has_sse(void);
382uint32_t random_int(void);
383uint32_t ones32(uint32_t x);
384uint32_t floor_log2(uint32_t x);
385uint32_t wl_min_lzc(uint32_t x);
386#ifdef FIXED_POINT
387#define LOG2_MIN_INF REAL_CONST(-10000)
388int32_t log2_int(uint32_t val);
389int32_t log2_fix(uint32_t val);
390int32_t pow2_int(real_t val);
391real_t pow2_fix(real_t val);
392#endif
393uint8_t get_sr_index(const uint32_t samplerate);
394uint8_t max_pred_sfb(const uint8_t sr_index);
395uint8_t max_tns_sfb(const uint8_t sr_index, const uint8_t object_type,
396 const uint8_t is_short);
397uint32_t get_sample_rate(const uint8_t sr_index);
398int8_t can_decode_ot(const uint8_t object_type);
399
400void *faad_malloc(size_t size);
401void faad_free(void *b);
402
403//#define PROFILE
404#ifdef PROFILE
405static 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