Mercurial > mplayer.hg
annotate libfaad2/local_changes.diff @ 32285:150de764e80b
Simplify ENCA check.
author | diego |
---|---|
date | Sun, 26 Sep 2010 20:48:15 +0000 |
parents | 3a4e51bbca62 |
children | a99c12cf3baa |
rev | line source |
---|---|
18141 | 1 --- libfaad2.orig/bits.h 2006-03-16 20:15:04.000000000 +0100 |
2 +++ libfaad2/bits.h 2006-03-16 20:37:21.000000000 +0100 | |
14858 | 3 @@ -58,7 +61,7 @@ |
32250 | 4 |
14712 | 5 #if defined (_WIN32) && !defined(_WIN32_WCE) && !defined(__MINGW32__) |
6 #define BSWAP(a) __asm mov eax,a __asm bswap eax __asm mov a, eax | |
7 -#elif defined(LINUX) || defined(DJGPP) || defined(__MINGW32__) | |
8 +#elif defined(LINUX) || defined(DJGPP) | |
9 #define BSWAP(a) __asm__ ( "bswapl %0\n" : "=r" (a) : "0" (a) ) | |
10 #else | |
11 #define BSWAP(a) \ | |
18141 | 12 --- libfaad2.orig/common.h 2006-03-16 20:15:04.000000000 +0100 |
13 +++ libfaad2/common.h 2006-03-16 20:56:56.000000000 +0100 | |
29400 | 14 @@ -32,8 +37,13 @@ |
32250 | 15 |
24023 | 16 #ifdef HAVE_CONFIG_H |
17 # include "../config.h" | |
14712 | 18 #endif |
24023 | 19 + |
14712 | 20 +/* Allow build on Cygwin*/ |
21 +#if defined(__CYGWIN__) | |
22 +#define __STRICT_ANSI__ | |
24023 | 23 +#endif |
32250 | 24 |
14712 | 25 #define INLINE __inline |
26 #if 0 //defined(_WIN32) && !defined(_WIN32_WCE) | |
27 #define ALIGN __declspec(align(16)) | |
29400 | 28 @@ -61,7 +69,7 @@ |
16249 | 29 /* Use if target platform has address generators with autoincrement */ |
30 //#define PREFER_POINTERS | |
32250 | 31 |
16249 | 32 -#ifdef _WIN32_WCE |
28578 | 33 +#if defined(_WIN32_WCE) || defined(__arm__) || defined(__avr32__) |
16249 | 34 #define FIXED_POINT |
35 #endif | |
32250 | 36 |
29400 | 37 @@ -117,6 +125,9 @@ |
14712 | 38 # ifdef MAIN_DEC |
39 # undef MAIN_DEC | |
40 # endif | |
41 +# ifdef SBR_DEC | |
42 +# undef SBR_DEC | |
43 +# endif | |
44 #endif // FIXED_POINT | |
32250 | 45 |
14712 | 46 #ifdef DRM |
29400 | 47 @@ -151,6 +162,7 @@ |
32250 | 48 |
14712 | 49 #include <stdlib.h> |
32250 | 50 |
14712 | 51 +#if 0 |
52 typedef unsigned __int64 uint64_t; | |
53 typedef unsigned __int32 uint32_t; | |
54 typedef unsigned __int16 uint16_t; | |
29400 | 55 @@ -159,5 +171,9 @@ |
14712 | 56 typedef __int32 int32_t; |
57 typedef __int16 int16_t; | |
58 typedef __int8 int8_t; | |
59 +#else | |
60 +#include <inttypes.h> | |
61 +#endif | |
62 + | |
63 typedef float float32_t; | |
32250 | 64 |
29401
f01023c524c3
Replace WORDS_BIGENDIAN by HAVE_BIGENDIAN in all internal code.
diego
parents:
29400
diff
changeset
|
65 @@ -245,7 +245,7 @@ |
f01023c524c3
Replace WORDS_BIGENDIAN by HAVE_BIGENDIAN in all internal code.
diego
parents:
29400
diff
changeset
|
66 |
f01023c524c3
Replace WORDS_BIGENDIAN by HAVE_BIGENDIAN in all internal code.
diego
parents:
29400
diff
changeset
|
67 #endif |
f01023c524c3
Replace WORDS_BIGENDIAN by HAVE_BIGENDIAN in all internal code.
diego
parents:
29400
diff
changeset
|
68 |
f01023c524c3
Replace WORDS_BIGENDIAN by HAVE_BIGENDIAN in all internal code.
diego
parents:
29400
diff
changeset
|
69 -#ifdef WORDS_BIGENDIAN |
f01023c524c3
Replace WORDS_BIGENDIAN by HAVE_BIGENDIAN in all internal code.
diego
parents:
29400
diff
changeset
|
70 +#if HAVE_BIGENDIAN |
f01023c524c3
Replace WORDS_BIGENDIAN by HAVE_BIGENDIAN in all internal code.
diego
parents:
29400
diff
changeset
|
71 #define ARCH_IS_BIG_ENDIAN |
f01023c524c3
Replace WORDS_BIGENDIAN by HAVE_BIGENDIAN in all internal code.
diego
parents:
29400
diff
changeset
|
72 #endif |
f01023c524c3
Replace WORDS_BIGENDIAN by HAVE_BIGENDIAN in all internal code.
diego
parents:
29400
diff
changeset
|
73 |
32258
b0ca20e4b5cd
Do not compile libfaad2's lrintf() implementation if __STDC_VERSION__ is set.
diego
parents:
32251
diff
changeset
|
74 @@ -317,7 +317,7 @@ |
b0ca20e4b5cd
Do not compile libfaad2's lrintf() implementation if __STDC_VERSION__ is set.
diego
parents:
32251
diff
changeset
|
75 } |
b0ca20e4b5cd
Do not compile libfaad2's lrintf() implementation if __STDC_VERSION__ is set.
diego
parents:
32251
diff
changeset
|
76 return i; |
b0ca20e4b5cd
Do not compile libfaad2's lrintf() implementation if __STDC_VERSION__ is set.
diego
parents:
32251
diff
changeset
|
77 } |
b0ca20e4b5cd
Do not compile libfaad2's lrintf() implementation if __STDC_VERSION__ is set.
diego
parents:
32251
diff
changeset
|
78 - #elif (defined(__i386__) && defined(__GNUC__)) |
b0ca20e4b5cd
Do not compile libfaad2's lrintf() implementation if __STDC_VERSION__ is set.
diego
parents:
32251
diff
changeset
|
79 + #elif (defined(__i386__) && defined(__GNUC__)) && !defined(__STDC_VERSION__) |
b0ca20e4b5cd
Do not compile libfaad2's lrintf() implementation if __STDC_VERSION__ is set.
diego
parents:
32251
diff
changeset
|
80 #define HAS_LRINTF |
b0ca20e4b5cd
Do not compile libfaad2's lrintf() implementation if __STDC_VERSION__ is set.
diego
parents:
32251
diff
changeset
|
81 // from http://www.stereopsis.com/FPU.html |
b0ca20e4b5cd
Do not compile libfaad2's lrintf() implementation if __STDC_VERSION__ is set.
diego
parents:
32251
diff
changeset
|
82 static INLINE int lrintf(float f) |
32251
33cd24340f36
Remove local HAVE_LRINTF hack; it should no longer be necessary.
diego
parents:
32250
diff
changeset
|
83 @@ -330,5 +346,7 @@ |
32250 | 84 |
14712 | 85 #else |
32250 | 86 |
14712 | 87 +#include <math.h> |
88 + | |
32251
33cd24340f36
Remove local HAVE_LRINTF hack; it should no longer be necessary.
diego
parents:
32250
diff
changeset
|
89 #ifdef HAVE_LRINTF |
14712 | 90 # define HAS_LRINTF |
29400 | 91 @@ -338,8 +356,6 @@ |
14712 | 92 # define __USE_ISOC99 1 |
93 #endif | |
32250 | 94 |
14712 | 95 - #include <math.h> |
96 - | |
97 #ifdef HAVE_SINF | |
98 # define sin sinf | |
99 #error | |
18141 | 100 --- libfaad2.orig/output.c 2006-03-16 20:15:04.000000000 +0100 |
101 +++ libfaad2/output.c 2006-04-18 19:50:26.000000000 +0200 | |
32259
3a4e51bbca62
Mark output_to_PCM_sux as static, it is not used outside of the file; fixes:
diego
parents:
32258
diff
changeset
|
102 @@ -463,9 +462,9 @@ |
16249 | 103 } |
104 } | |
32250 | 105 |
16249 | 106 -void* output_to_PCM(NeAACDecHandle hDecoder, |
32259
3a4e51bbca62
Mark output_to_PCM_sux as static, it is not used outside of the file; fixes:
diego
parents:
32258
diff
changeset
|
107 - real_t **input, void *sample_buffer, uint8_t channels, |
3a4e51bbca62
Mark output_to_PCM_sux as static, it is not used outside of the file; fixes:
diego
parents:
32258
diff
changeset
|
108 - uint16_t frame_len, uint8_t format) |
3a4e51bbca62
Mark output_to_PCM_sux as static, it is not used outside of the file; fixes:
diego
parents:
32258
diff
changeset
|
109 +static void* output_to_PCM_sux(NeAACDecHandle hDecoder, |
3a4e51bbca62
Mark output_to_PCM_sux as static, it is not used outside of the file; fixes:
diego
parents:
32258
diff
changeset
|
110 + real_t **input, void *sample_buffer, uint8_t channels, |
3a4e51bbca62
Mark output_to_PCM_sux as static, it is not used outside of the file; fixes:
diego
parents:
32258
diff
changeset
|
111 + uint16_t frame_len, uint8_t format) |
16249 | 112 { |
32259
3a4e51bbca62
Mark output_to_PCM_sux as static, it is not used outside of the file; fixes:
diego
parents:
32258
diff
changeset
|
113 uint8_t ch; |
3a4e51bbca62
Mark output_to_PCM_sux as static, it is not used outside of the file; fixes:
diego
parents:
32258
diff
changeset
|
114 uint16_t i; |
18141 | 115 @@ -554,4 +553,51 @@ |
16249 | 116 return sample_buffer; |
117 } | |
32250 | 118 |
16249 | 119 +void* output_to_PCM(NeAACDecHandle hDecoder, |
120 + real_t **input, void *sample_buffer, uint8_t channels, | |
121 + uint16_t frame_len, uint8_t format) | |
122 +{ | |
123 + int ch; | |
124 + int i; | |
125 + int16_t *short_sample_buffer = (int16_t*)sample_buffer; | |
126 + real_t *ch0 = input[hDecoder->internal_channel[0]]; | |
127 + real_t *ch1 = input[hDecoder->internal_channel[1]]; | |
128 + real_t *ch2 = input[hDecoder->internal_channel[2]]; | |
129 + real_t *ch3 = input[hDecoder->internal_channel[3]]; | |
130 + real_t *ch4 = input[hDecoder->internal_channel[4]]; | |
131 + | |
132 + if (format != FAAD_FMT_16BIT) | |
133 + return output_to_PCM_sux(hDecoder, input, sample_buffer, channels, frame_len, format); | |
134 + | |
135 + if (hDecoder->downMatrix) { | |
136 + for(i = 0; i < frame_len; i++) | |
137 + { | |
138 + int32_t tmp; | |
139 + tmp = (ch1[i] + ((ch0[i]+ch3[i])>>1) + ((ch0[i]+ch3[i])>>2) + (1<<(REAL_BITS))) >> (REAL_BITS+1); | |
140 + if ((tmp+0x8000) & ~0xffff) tmp = ~(tmp>>31)-0x8000; | |
141 + short_sample_buffer[0] = tmp; | |
142 + tmp = (ch2[i] + ((ch0[i]+ch4[i])>>1) + ((ch0[i]+ch4[i])>>2) + (1<<(REAL_BITS))) >> (REAL_BITS+1); | |
143 + if ((tmp+0x8000) & ~0xffff) tmp = ~(tmp>>31)-0x8000; | |
144 + short_sample_buffer[1] = tmp; | |
145 + short_sample_buffer += channels; | |
146 + } | |
147 + return sample_buffer; | |
148 + } | |
149 + | |
150 + /* Copy output to a standard PCM buffer */ | |
151 + for(i = 0; i < frame_len; i++) | |
152 + { | |
153 + for (ch = 0; ch < channels; ch++) | |
154 + { | |
18141 | 155 + int32_t tmp = input[hDecoder->internal_channel[ch]][i]; |
16249 | 156 + tmp += (1 << (REAL_BITS-1)); |
157 + tmp >>= REAL_BITS; | |
158 + if ((tmp+0x8000) & ~0xffff) tmp = ~(tmp>>31)-0x8000; | |
159 + *(short_sample_buffer++) = tmp; | |
160 + } | |
161 + } | |
162 + | |
163 + return sample_buffer; | |
164 +} | |
165 + | |
166 #endif | |
18141 | 167 --- libfaad2.orig/ps_dec.c 2006-03-16 20:15:04.000000000 +0100 |
168 +++ libfaad2/ps_dec.c 2006-04-18 20:29:38.000000000 +0200 | |
169 @@ -159,7 +162,7 @@ | |
32250 | 170 |
18141 | 171 /* static function declarations */ |
172 static void ps_data_decode(ps_info *ps); | |
173 -static hyb_info *hybrid_init(); | |
174 +static hyb_info *hybrid_init(void); | |
175 static void channel_filter2(hyb_info *hyb, uint8_t frame_len, const real_t *filter, | |
176 qmf_t *buffer, qmf_t **X_hybrid); | |
177 static void INLINE DCT3_4_unscaled(real_t *y, real_t *x); | |
178 @@ -189,7 +192,7 @@ | |
179 /* */ | |
32250 | 180 |
181 | |
18141 | 182 -static hyb_info *hybrid_init() |
183 +static hyb_info *hybrid_init(void) | |
184 { | |
185 uint8_t i; | |
32250 | 186 |
18141 | 187 @@ -1935,8 +1938,8 @@ |
17136 | 188 /* main Parametric Stereo decoding function */ |
189 uint8_t ps_decode(ps_info *ps, qmf_t X_left[38][64], qmf_t X_right[38][64]) | |
190 { | |
191 - qmf_t X_hybrid_left[32][32] = {{0}}; | |
192 - qmf_t X_hybrid_right[32][32] = {{0}}; | |
193 + qmf_t X_hybrid_left[32][32] = {{{0}}}; | |
194 + qmf_t X_hybrid_right[32][32] = {{{0}}}; | |
32250 | 195 |
17136 | 196 /* delta decoding of the bitstream data */ |
197 ps_data_decode(ps); | |
18141 | 198 --- libfaad2.orig/sbr_dec.c 2006-03-16 20:15:04.000000000 +0100 |
199 +++ libfaad2/sbr_dec.c 2006-04-18 20:33:57.000000000 +0200 | |
200 @@ -526,8 +529,8 @@ | |
17137 | 201 uint8_t l, k; |
202 uint8_t dont_process = 0; | |
203 uint8_t ret = 0; | |
204 - ALIGN qmf_t X_left[38][64] = {{0}}; | |
205 - ALIGN qmf_t X_right[38][64] = {{0}}; /* must set this to 0 */ | |
206 + ALIGN qmf_t X_left[38][64] = {{{0}}}; | |
207 + ALIGN qmf_t X_right[38][64] = {{{0}}}; /* must set this to 0 */ | |
32250 | 208 |
17137 | 209 if (sbr == NULL) |
210 return 20; | |
18141 | 211 --- libfaad2.orig/specrec.c 2006-03-16 20:15:04.000000000 +0100 |
212 +++ libfaad2/specrec.c 2006-04-18 20:38:09.000000000 +0200 | |
213 @@ -673,29 +673,19 @@ | |
214 /* MAIN object type prediction */ | |
215 if (hDecoder->object_type == MAIN) | |
216 { | |
217 - /* allocate the state only when needed */ | |
218 - if (hDecoder->pred_stat[channel] == NULL) | |
219 - { | |
220 - hDecoder->pred_stat[channel] = (pred_state*)faad_malloc(hDecoder->frameLength * sizeof(pred_state)); | |
221 + hDecoder->pred_stat[channel] = (pred_state*)realloc(hDecoder->pred_stat[channel], hDecoder->frameLength * sizeof(pred_state)); | |
222 reset_all_predictors(hDecoder->pred_stat[channel], hDecoder->frameLength); | |
223 - } | |
224 } | |
225 #endif | |
32250 | 226 |
18141 | 227 #ifdef LTP_DEC |
228 if (is_ltp_ot(hDecoder->object_type)) | |
229 { | |
230 - /* allocate the state only when needed */ | |
231 - if (hDecoder->lt_pred_stat[channel] == NULL) | |
232 - { | |
233 - hDecoder->lt_pred_stat[channel] = (int16_t*)faad_malloc(hDecoder->frameLength*4 * sizeof(int16_t)); | |
234 + hDecoder->lt_pred_stat[channel] = (int16_t*)realloc(hDecoder->lt_pred_stat[channel], hDecoder->frameLength*4 * sizeof(int16_t)); | |
235 memset(hDecoder->lt_pred_stat[channel], 0, hDecoder->frameLength*4 * sizeof(int16_t)); | |
236 - } | |
237 } | |
238 #endif | |
32250 | 239 |
18141 | 240 - if (hDecoder->time_out[channel] == NULL) |
241 - { | |
242 mul = 1; | |
243 #ifdef SBR_DEC | |
244 hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 0; | |
245 @@ -706,41 +696,28 @@ | |
246 hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 1; | |
247 } | |
248 #endif | |
249 - hDecoder->time_out[channel] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t)); | |
250 + hDecoder->time_out[channel] = (real_t*)realloc(hDecoder->time_out[channel], mul*hDecoder->frameLength*sizeof(real_t)); | |
251 memset(hDecoder->time_out[channel], 0, mul*hDecoder->frameLength*sizeof(real_t)); | |
252 - } | |
253 #if (defined(PS_DEC) || defined(DRM_PS)) | |
254 if (output_channels == 2) | |
255 { | |
256 - if (hDecoder->time_out[channel+1] == NULL) | |
257 - { | |
258 - hDecoder->time_out[channel+1] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t)); | |
259 + hDecoder->time_out[channel+1] = (real_t*)realloc(hDecoder->time_out[channel+1], mul*hDecoder->frameLength*sizeof(real_t)); | |
260 memset(hDecoder->time_out[channel+1], 0, mul*hDecoder->frameLength*sizeof(real_t)); | |
261 - } | |
262 } | |
263 #endif | |
32250 | 264 |
18141 | 265 - if (hDecoder->fb_intermed[channel] == NULL) |
266 - { | |
267 - hDecoder->fb_intermed[channel] = (real_t*)faad_malloc(hDecoder->frameLength*sizeof(real_t)); | |
268 + hDecoder->fb_intermed[channel] = (real_t*)realloc(hDecoder->fb_intermed[channel], hDecoder->frameLength*sizeof(real_t)); | |
269 memset(hDecoder->fb_intermed[channel], 0, hDecoder->frameLength*sizeof(real_t)); | |
270 - } | |
32250 | 271 |
18141 | 272 #ifdef SSR_DEC |
273 if (hDecoder->object_type == SSR) | |
274 { | |
275 - if (hDecoder->ssr_overlap[channel] == NULL) | |
276 - { | |
277 - hDecoder->ssr_overlap[channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t)); | |
278 - memset(hDecoder->ssr_overlap[channel], 0, 2*hDecoder->frameLength*sizeof(real_t)); | |
279 - } | |
280 - if (hDecoder->prev_fmd[channel] == NULL) | |
281 - { | |
282 uint16_t k; | |
283 - hDecoder->prev_fmd[channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t)); | |
284 + hDecoder->ssr_overlap[channel] = (real_t*)realloc(hDecoder->ssr_overlap[channel], 2*hDecoder->frameLength*sizeof(real_t)); | |
285 + memset(hDecoder->ssr_overlap[channel], 0, 2*hDecoder->frameLength*sizeof(real_t)); | |
286 + hDecoder->prev_fmd[channel] = (real_t*)realloc(hDecoder->prev_fmd[channel], 2*hDecoder->frameLength*sizeof(real_t)); | |
287 for (k = 0; k < 2*hDecoder->frameLength; k++) | |
288 hDecoder->prev_fmd[channel][k] = REAL_CONST(-1); | |
289 - } | |
290 } | |
291 #endif | |
32250 | 292 |
28722
5f24919c13ef
Fix a possible NULL-pointer crash introduced by local changes to libfaad2
reimar
parents:
28578
diff
changeset
|
293 @@ -865,22 +842,14 @@ |
32250 | 294 |
18141 | 295 /* always allocate 2 channels, PS can always "suddenly" turn up */ |
296 #if (defined(PS_DEC) || defined(DRM_PS)) | |
297 - output_channels = 2; | |
298 + output_channels = hDecoder->ps_used[hDecoder->fr_ch_ele] ? 2 : 1; | |
299 #else | |
300 output_channels = 1; | |
301 #endif | |
32250 | 302 |
18141 | 303 - if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 0) |
304 - { | |
305 - /* element_output_channels not set yet */ | |
28722
5f24919c13ef
Fix a possible NULL-pointer crash introduced by local changes to libfaad2
reimar
parents:
28578
diff
changeset
|
306 + if (hDecoder->element_alloced[hDecoder->fr_ch_ele] == 0 || |
5f24919c13ef
Fix a possible NULL-pointer crash introduced by local changes to libfaad2
reimar
parents:
28578
diff
changeset
|
307 + hDecoder->element_output_channels[hDecoder->fr_ch_ele] < output_channels) { |
18141 | 308 hDecoder->element_output_channels[hDecoder->fr_ch_ele] = output_channels; |
309 - } else if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] != output_channels) { | |
310 - /* element inconsistency */ | |
311 - return 21; | |
312 - } | |
313 - | |
314 - if (hDecoder->element_alloced[hDecoder->fr_ch_ele] == 0) | |
315 - { | |
316 retval = allocate_single_channel(hDecoder, sce->channel, output_channels); | |
317 if (retval > 0) | |
318 return retval; | |
29400 | 319 @@ -1026,11 +995,10 @@ |
18141 | 320 { |
321 return 23; | |
322 } | |
323 -#endif | |
32250 | 324 |
18141 | 325 /* copy L to R when no PS is used */ |
326 #if (defined(PS_DEC) || defined(DRM_PS)) | |
327 - if ((hDecoder->ps_used[hDecoder->fr_ch_ele] == 0)) | |
328 + if ((hDecoder->ps_used[hDecoder->fr_ch_ele] == 0) && (output_channels == 2)) | |
329 { | |
330 uint8_t ele = hDecoder->fr_ch_ele; | |
331 uint8_t ch = sce->channel; | |
29400 | 332 @@ -1040,6 +1008,7 @@ |
18141 | 333 memcpy(hDecoder->time_out[ch+1], hDecoder->time_out[ch], frame_size); |
334 } | |
335 #endif | |
336 +#endif | |
32250 | 337 |
18141 | 338 return 0; |
339 } |