Mercurial > libavcodec.hg
comparison faad.c @ 2979:bfabfdf9ce55 libavcodec
COSMETICS: tabs --> spaces, some prettyprinting
author | diego |
---|---|
date | Thu, 22 Dec 2005 01:10:11 +0000 |
parents | ef2149182f1c |
children | 0b546eab515d |
comparison
equal
deleted
inserted
replaced
2978:403183bbb505 | 2979:bfabfdf9ce55 |
---|---|
45 #define dlopen(a) | 45 #define dlopen(a) |
46 #define dlclose(a) | 46 #define dlclose(a) |
47 #endif | 47 #endif |
48 | 48 |
49 typedef struct { | 49 typedef struct { |
50 void* handle; /* dlopen handle */ | 50 void* handle; /* dlopen handle */ |
51 void* faac_handle; /* FAAD library handle */ | 51 void* faac_handle; /* FAAD library handle */ |
52 int frame_size; | 52 int frame_size; |
53 int sample_size; | 53 int sample_size; |
54 int flags; | 54 int flags; |
55 | 55 |
56 /* faad calls */ | 56 /* faad calls */ |
57 faacDecHandle FAADAPI (*faacDecOpen)(void); | 57 faacDecHandle FAADAPI (*faacDecOpen)(void); |
58 faacDecConfigurationPtr FAADAPI (*faacDecGetCurrentConfiguration)(faacDecHandle hDecoder); | 58 faacDecConfigurationPtr FAADAPI (*faacDecGetCurrentConfiguration)(faacDecHandle hDecoder); |
59 #ifndef FAAD2_VERSION | 59 #ifndef FAAD2_VERSION |
60 int FAADAPI (*faacDecSetConfiguration)(faacDecHandle hDecoder, | 60 int FAADAPI (*faacDecSetConfiguration)(faacDecHandle hDecoder, |
61 faacDecConfigurationPtr config); | 61 faacDecConfigurationPtr config); |
62 int FAADAPI (*faacDecInit)(faacDecHandle hDecoder, | 62 int FAADAPI (*faacDecInit)(faacDecHandle hDecoder, |
63 unsigned char *buffer, | 63 unsigned char *buffer, |
64 unsigned long *samplerate, | 64 unsigned long *samplerate, |
65 unsigned long *channels); | 65 unsigned long *channels); |
66 int FAADAPI (*faacDecInit2)(faacDecHandle hDecoder, unsigned char *pBuffer, | 66 int FAADAPI (*faacDecInit2)(faacDecHandle hDecoder, unsigned char *pBuffer, |
67 unsigned long SizeOfDecoderSpecificInfo, | 67 unsigned long SizeOfDecoderSpecificInfo, |
68 unsigned long *samplerate, unsigned long *channels); | 68 unsigned long *samplerate, unsigned long *channels); |
69 int FAADAPI (*faacDecDecode)(faacDecHandle hDecoder, | 69 int FAADAPI (*faacDecDecode)(faacDecHandle hDecoder, |
70 unsigned char *buffer, | 70 unsigned char *buffer, |
71 unsigned long *bytesconsumed, | 71 unsigned long *bytesconsumed, |
72 short *sample_buffer, | 72 short *sample_buffer, |
73 unsigned long *samples); | 73 unsigned long *samples); |
74 #else | 74 #else |
75 unsigned char FAADAPI (*faacDecSetConfiguration)(faacDecHandle hDecoder, | 75 unsigned char FAADAPI (*faacDecSetConfiguration)(faacDecHandle hDecoder, |
76 faacDecConfigurationPtr config); | 76 faacDecConfigurationPtr config); |
77 long FAADAPI (*faacDecInit)(faacDecHandle hDecoder, | 77 long FAADAPI (*faacDecInit)(faacDecHandle hDecoder, |
78 unsigned char *buffer, | 78 unsigned char *buffer, |
79 unsigned long buffer_size, | 79 unsigned long buffer_size, |
80 unsigned long *samplerate, | 80 unsigned long *samplerate, |
81 unsigned char *channels); | 81 unsigned char *channels); |
82 char FAADAPI (*faacDecInit2)(faacDecHandle hDecoder, unsigned char *pBuffer, | 82 char FAADAPI (*faacDecInit2)(faacDecHandle hDecoder, unsigned char *pBuffer, |
83 unsigned long SizeOfDecoderSpecificInfo, | 83 unsigned long SizeOfDecoderSpecificInfo, |
84 unsigned long *samplerate, unsigned char *channels); | 84 unsigned long *samplerate, unsigned char *channels); |
85 void *FAADAPI (*faacDecDecode)(faacDecHandle hDecoder, | 85 void *FAADAPI (*faacDecDecode)(faacDecHandle hDecoder, |
86 faacDecFrameInfo *hInfo, | 86 faacDecFrameInfo *hInfo, |
87 unsigned char *buffer, | 87 unsigned char *buffer, |
88 unsigned long buffer_size); | 88 unsigned long buffer_size); |
89 char* FAADAPI (*faacDecGetErrorMessage)(unsigned char errcode); | 89 char* FAADAPI (*faacDecGetErrorMessage)(unsigned char errcode); |
90 #endif | 90 #endif |
91 | 91 |
92 void FAADAPI (*faacDecClose)(faacDecHandle hDecoder); | 92 void FAADAPI (*faacDecClose)(faacDecHandle hDecoder); |
93 | 93 |
94 | 94 |
110 unsigned char channels; | 110 unsigned char channels; |
111 #endif | 111 #endif |
112 int r = 0; | 112 int r = 0; |
113 | 113 |
114 if (avctx->extradata) | 114 if (avctx->extradata) |
115 r = s->faacDecInit2(s->faac_handle, (uint8_t*) avctx->extradata, | 115 r = s->faacDecInit2(s->faac_handle, (uint8_t*) avctx->extradata, |
116 avctx->extradata_size, | 116 avctx->extradata_size, |
117 &samplerate, &channels); | 117 &samplerate, &channels); |
118 // else r = s->faacDecInit(s->faac_handle ... ); | 118 // else r = s->faacDecInit(s->faac_handle ... ); |
119 | 119 |
120 if (r < 0) | 120 if (r < 0) |
121 av_log(avctx, AV_LOG_ERROR, "faacDecInit2 failed r:%d sr:%ld ch:%ld s:%d\n", | 121 av_log(avctx, AV_LOG_ERROR, "faacDecInit2 failed r:%d sr:%ld ch:%ld s:%d\n", |
122 r, samplerate, (long)channels, avctx->extradata_size); | 122 r, samplerate, (long)channels, avctx->extradata_size); |
123 avctx->sample_rate = samplerate; | 123 avctx->sample_rate = samplerate; |
124 avctx->channels = channels; | 124 avctx->channels = channels; |
125 | 125 |
126 return r; | 126 return r; |
127 } | 127 } |
139 #else | 139 #else |
140 faacDecFrameInfo frame_info; | 140 faacDecFrameInfo frame_info; |
141 void *out; | 141 void *out; |
142 #endif | 142 #endif |
143 if(buf_size == 0) | 143 if(buf_size == 0) |
144 return 0; | 144 return 0; |
145 #ifndef FAAD2_VERSION | 145 #ifndef FAAD2_VERSION |
146 out = s->faacDecDecode(s->faac_handle, | 146 out = s->faacDecDecode(s->faac_handle, |
147 (unsigned char*)buf, | 147 (unsigned char*)buf, |
148 &bytesconsumed, | 148 &bytesconsumed, |
149 data, | 149 data, |
150 &samples); | 150 &samples); |
151 samples *= s->sample_size; | 151 samples *= s->sample_size; |
152 if (data_size) | 152 if (data_size) |
153 *data_size = samples; | 153 *data_size = samples; |
154 return (buf_size < (int)bytesconsumed) | 154 return (buf_size < (int)bytesconsumed) |
155 ? buf_size : (int)bytesconsumed; | 155 ? buf_size : (int)bytesconsumed; |
156 #else | 156 #else |
157 | 157 |
158 out = s->faacDecDecode(s->faac_handle, &frame_info, (unsigned char*)buf, (unsigned long)buf_size); | 158 out = s->faacDecDecode(s->faac_handle, &frame_info, (unsigned char*)buf, (unsigned long)buf_size); |
159 | 159 |
160 if (frame_info.error > 0) { | 160 if (frame_info.error > 0) { |
161 av_log(avctx, AV_LOG_ERROR, "faac: frame decoding failed: %s\n", | 161 av_log(avctx, AV_LOG_ERROR, "faac: frame decoding failed: %s\n", |
162 s->faacDecGetErrorMessage(frame_info.error)); | 162 s->faacDecGetErrorMessage(frame_info.error)); |
163 return 0; | 163 return 0; |
164 } | 164 } |
165 | 165 |
166 frame_info.samples *= s->sample_size; | 166 frame_info.samples *= s->sample_size; |
167 memcpy(data, out, frame_info.samples); // CHECKME - can we cheat this one | 167 memcpy(data, out, frame_info.samples); // CHECKME - can we cheat this one |
168 | 168 |
169 if (data_size) | 169 if (data_size) |
170 *data_size = frame_info.samples; | 170 *data_size = frame_info.samples; |
171 | 171 |
172 return (buf_size < (int)frame_info.bytesconsumed) | 172 return (buf_size < (int)frame_info.bytesconsumed) |
173 ? buf_size : (int)frame_info.bytesconsumed; | 173 ? buf_size : (int)frame_info.bytesconsumed; |
174 #endif | 174 #endif |
175 } | 175 } |
176 | 176 |
177 static int faac_decode_end(AVCodecContext *avctx) | 177 static int faac_decode_end(AVCodecContext *avctx) |
178 { | 178 { |
194 const char* err = 0; | 194 const char* err = 0; |
195 | 195 |
196 s->handle = dlopen(libfaadname, RTLD_LAZY); | 196 s->handle = dlopen(libfaadname, RTLD_LAZY); |
197 if (!s->handle) | 197 if (!s->handle) |
198 { | 198 { |
199 av_log(avctx, AV_LOG_ERROR, "FAAD library: %s could not be opened! \n%s\n", | 199 av_log(avctx, AV_LOG_ERROR, "FAAD library: %s could not be opened! \n%s\n", |
200 libfaadname, dlerror()); | 200 libfaadname, dlerror()); |
201 return -1; | 201 return -1; |
202 } | 202 } |
203 #define dfaac(a, b) \ | 203 #define dfaac(a, b) \ |
204 do { static const char* n = "faacDec" #a; \ | 204 do { static const char* n = "faacDec" #a; \ |
205 if ((s->faacDec ## a = b dlsym( s->handle, n )) == NULL) { err = n; break; } } while(0) | 205 if ((s->faacDec ## a = b dlsym( s->handle, n )) == NULL) { err = n; break; } } while(0) |
207 #else /* !CONFIG_FAADBIN */ | 207 #else /* !CONFIG_FAADBIN */ |
208 #define dfaac(a, b) s->faacDec ## a = faacDec ## a | 208 #define dfaac(a, b) s->faacDec ## a = faacDec ## a |
209 #endif /* CONFIG_FAADBIN */ | 209 #endif /* CONFIG_FAADBIN */ |
210 | 210 |
211 // resolve all needed function calls | 211 // resolve all needed function calls |
212 dfaac(Open, (faacDecHandle FAADAPI (*)(void))); | 212 dfaac(Open, (faacDecHandle FAADAPI (*)(void))); |
213 dfaac(GetCurrentConfiguration, (faacDecConfigurationPtr | 213 dfaac(GetCurrentConfiguration, (faacDecConfigurationPtr |
214 FAADAPI (*)(faacDecHandle))); | 214 FAADAPI (*)(faacDecHandle))); |
215 #ifndef FAAD2_VERSION | 215 #ifndef FAAD2_VERSION |
216 dfaac(SetConfiguration, (int FAADAPI (*)(faacDecHandle, | 216 dfaac(SetConfiguration, (int FAADAPI (*)(faacDecHandle, |
217 faacDecConfigurationPtr))); | 217 faacDecConfigurationPtr))); |
218 | 218 |
219 dfaac(Init, (int FAADAPI (*)(faacDecHandle, unsigned char*, | 219 dfaac(Init, (int FAADAPI (*)(faacDecHandle, unsigned char*, |
220 unsigned long*, unsigned long*))); | 220 unsigned long*, unsigned long*))); |
221 dfaac(Init2, (int FAADAPI (*)(faacDecHandle, unsigned char*, | 221 dfaac(Init2, (int FAADAPI (*)(faacDecHandle, unsigned char*, |
222 unsigned long, unsigned long*, | 222 unsigned long, unsigned long*, |
223 unsigned long*))); | 223 unsigned long*))); |
224 dfaac(Close, (void FAADAPI (*)(faacDecHandle hDecoder))); | 224 dfaac(Close, (void FAADAPI (*)(faacDecHandle hDecoder))); |
225 dfaac(Decode, (int FAADAPI (*)(faacDecHandle, unsigned char*, | 225 dfaac(Decode, (int FAADAPI (*)(faacDecHandle, unsigned char*, |
226 unsigned long*, short*, unsigned long*))); | 226 unsigned long*, short*, unsigned long*))); |
227 #else | 227 #else |
228 dfaac(SetConfiguration, (unsigned char FAADAPI (*)(faacDecHandle, | 228 dfaac(SetConfiguration, (unsigned char FAADAPI (*)(faacDecHandle, |
229 faacDecConfigurationPtr))); | 229 faacDecConfigurationPtr))); |
230 dfaac(Init, (long FAADAPI (*)(faacDecHandle, unsigned char*, | 230 dfaac(Init, (long FAADAPI (*)(faacDecHandle, unsigned char*, |
231 unsigned long, unsigned long*, unsigned char*))); | 231 unsigned long, unsigned long*, unsigned char*))); |
232 dfaac(Init2, (char FAADAPI (*)(faacDecHandle, unsigned char*, | 232 dfaac(Init2, (char FAADAPI (*)(faacDecHandle, unsigned char*, |
233 unsigned long, unsigned long*, | 233 unsigned long, unsigned long*, |
234 unsigned char*))); | 234 unsigned char*))); |
235 dfaac(Decode, (void *FAADAPI (*)(faacDecHandle, faacDecFrameInfo*, | 235 dfaac(Decode, (void *FAADAPI (*)(faacDecHandle, faacDecFrameInfo*, |
236 unsigned char*, unsigned long))); | 236 unsigned char*, unsigned long))); |
237 dfaac(GetErrorMessage, (char* FAADAPI (*)(unsigned char))); | 237 dfaac(GetErrorMessage, (char* FAADAPI (*)(unsigned char))); |
238 #endif | 238 #endif |
239 #undef dfacc | 239 #undef dfacc |
240 | 240 |
241 #ifdef CONFIG_FAADBIN | 241 #ifdef CONFIG_FAADBIN |
242 break; | 242 break; |
243 } | 243 } |
244 if (err) { | 244 if (err) { |
245 dlclose(s->handle); | 245 dlclose(s->handle); |
246 av_log(avctx, AV_LOG_ERROR, "FAAD library: cannot resolve %s in %s!\n", | 246 av_log(avctx, AV_LOG_ERROR, "FAAD library: cannot resolve %s in %s!\n", |
247 err, libfaadname); | 247 err, libfaadname); |
248 return -1; | 248 return -1; |
249 } | 249 } |
250 #endif | 250 #endif |
251 | 251 |
252 s->faac_handle = s->faacDecOpen(); | 252 s->faac_handle = s->faacDecOpen(); |
258 | 258 |
259 | 259 |
260 faac_cfg = s->faacDecGetCurrentConfiguration(s->faac_handle); | 260 faac_cfg = s->faacDecGetCurrentConfiguration(s->faac_handle); |
261 | 261 |
262 if (faac_cfg) { | 262 if (faac_cfg) { |
263 switch (avctx->bits_per_sample) { | 263 switch (avctx->bits_per_sample) { |
264 case 8: av_log(avctx, AV_LOG_ERROR, "FAADlib unsupported bps %d\n", avctx->bits_per_sample); break; | 264 case 8: av_log(avctx, AV_LOG_ERROR, "FAADlib unsupported bps %d\n", avctx->bits_per_sample); break; |
265 default: | 265 default: |
266 case 16: | 266 case 16: |
267 #ifdef FAAD2_VERSION | 267 #ifdef FAAD2_VERSION |
268 faac_cfg->outputFormat = FAAD_FMT_16BIT; | 268 faac_cfg->outputFormat = FAAD_FMT_16BIT; |
269 #endif | 269 #endif |
270 s->sample_size = 2; | 270 s->sample_size = 2; |
271 break; | 271 break; |
272 case 24: | 272 case 24: |
273 #ifdef FAAD2_VERSION | 273 #ifdef FAAD2_VERSION |
274 faac_cfg->outputFormat = FAAD_FMT_24BIT; | 274 faac_cfg->outputFormat = FAAD_FMT_24BIT; |
275 #endif | 275 #endif |
276 s->sample_size = 3; | 276 s->sample_size = 3; |
277 break; | 277 break; |
278 case 32: | 278 case 32: |
279 #ifdef FAAD2_VERSION | 279 #ifdef FAAD2_VERSION |
280 faac_cfg->outputFormat = FAAD_FMT_32BIT; | 280 faac_cfg->outputFormat = FAAD_FMT_32BIT; |
281 #endif | 281 #endif |
282 s->sample_size = 4; | 282 s->sample_size = 4; |
283 break; | 283 break; |
284 } | 284 } |
285 | 285 |
286 faac_cfg->defSampleRate = (!avctx->sample_rate) ? 44100 : avctx->sample_rate; | 286 faac_cfg->defSampleRate = (!avctx->sample_rate) ? 44100 : avctx->sample_rate; |
287 faac_cfg->defObjectType = LC; | 287 faac_cfg->defObjectType = LC; |
288 } | 288 } |
289 | 289 |
290 s->faacDecSetConfiguration(s->faac_handle, faac_cfg); | 290 s->faacDecSetConfiguration(s->faac_handle, faac_cfg); |
291 | 291 |
292 faac_init_mp4(avctx); | 292 faac_init_mp4(avctx); |