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