Mercurial > audlegacy-plugins
comparison src/aac/libfaad2/common.h @ 12:3da1b8942b8b trunk
[svn] - remove src/Input src/Output src/Effect src/General src/Visualization src/Container
author | nenolod |
---|---|
date | Mon, 18 Sep 2006 03:14:20 -0700 |
parents | src/Input/aac/libfaad2/common.h@13389e613d67 |
children | 550b1dd13323 |
comparison
equal
deleted
inserted
replaced
11:cff1d04026ae | 12:3da1b8942b8b |
---|---|
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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: common.h,v 1.65 2004/09/08 09:43:11 gcp Exp $ | |
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 #ifdef __ICL /* only Intel C compiler has fmath ??? */ | |
292 | |
293 #include <mathf.h> | |
294 | |
295 #define sin sinf | |
296 #define cos cosf | |
297 #define log logf | |
298 #define floor floorf | |
299 #define ceil ceilf | |
300 #define sqrt sqrtf | |
301 | |
302 #else | |
303 | |
304 #ifdef HAVE_LRINTF | |
305 # define HAS_LRINTF | |
306 # define _ISOC9X_SOURCE 1 | |
307 # define _ISOC99_SOURCE 1 | |
308 # define __USE_ISOC9X 1 | |
309 # define __USE_ISOC99 1 | |
310 #endif | |
311 | |
312 #include <math.h> | |
313 | |
314 #ifdef HAVE_SINF | |
315 # define sin sinf | |
316 #error | |
317 #endif | |
318 #ifdef HAVE_COSF | |
319 # define cos cosf | |
320 #endif | |
321 #ifdef HAVE_LOGF | |
322 # define log logf | |
323 #endif | |
324 #ifdef HAVE_EXPF | |
325 # define exp expf | |
326 #endif | |
327 #ifdef HAVE_FLOORF | |
328 # define floor floorf | |
329 #endif | |
330 #ifdef HAVE_CEILF | |
331 # define ceil ceilf | |
332 #endif | |
333 #ifdef HAVE_SQRTF | |
334 # define sqrt sqrtf | |
335 #endif | |
336 | |
337 #endif | |
338 | |
339 #endif | |
340 | |
341 #ifndef HAS_LRINTF | |
342 /* standard cast */ | |
343 #define lrintf(f) ((int32_t)(f)) | |
344 #endif | |
345 | |
346 typedef real_t complex_t[2]; | |
347 #define RE(A) A[0] | |
348 #define IM(A) A[1] | |
349 | |
350 | |
351 /* common functions */ | |
352 uint8_t cpu_has_sse(void); | |
353 uint32_t random_int(void); | |
354 uint32_t ones32(uint32_t x); | |
355 uint32_t floor_log2(uint32_t x); | |
356 uint32_t wl_min_lzc(uint32_t x); | |
357 #ifdef FIXED_POINT | |
358 #define LOG2_MIN_INF REAL_CONST(-10000) | |
359 int32_t log2_int(uint32_t val); | |
360 int32_t log2_fix(uint32_t val); | |
361 int32_t pow2_int(real_t val); | |
362 real_t pow2_fix(real_t val); | |
363 #endif | |
364 uint8_t get_sr_index(const uint32_t samplerate); | |
365 uint8_t max_pred_sfb(const uint8_t sr_index); | |
366 uint8_t max_tns_sfb(const uint8_t sr_index, const uint8_t object_type, | |
367 const uint8_t is_short); | |
368 uint32_t get_sample_rate(const uint8_t sr_index); | |
369 int8_t can_decode_ot(const uint8_t object_type); | |
370 | |
371 void *faad_malloc(size_t size); | |
372 void faad_free(void *b); | |
373 | |
374 //#define PROFILE | |
375 #ifdef PROFILE | |
376 static int64_t faad_get_ts() | |
377 { | |
378 __asm | |
379 { | |
380 rdtsc | |
381 } | |
382 } | |
383 #endif | |
384 | |
385 #ifndef M_PI | |
386 #define M_PI 3.14159265358979323846 | |
387 #endif | |
388 #ifndef M_PI_2 /* PI/2 */ | |
389 #define M_PI_2 1.57079632679489661923 | |
390 #endif | |
391 | |
392 | |
393 #ifdef __cplusplus | |
394 } | |
395 #endif | |
396 #endif |