Mercurial > libavcodec.hg
comparison mace.c @ 2487:b09bc77eb2fb libavcodec
Stereo MACE fix by Burkhard Plaum <plaum AT ipf DOT uni-stuttgart DOT de>
Still doesn't work with our mov demuxer though...
author | mmu_man |
---|---|
date | Tue, 01 Feb 2005 15:13:27 +0000 |
parents | 141a9539e270 |
children | ef2149182f1c |
comparison
equal
deleted
inserted
replaced
2486:f2a9559db6ac | 2487:b09bc77eb2fb |
---|---|
240 | 240 |
241 /* /// "chomp3()" */ | 241 /* /// "chomp3()" */ |
242 static void chomp3(MACEContext *ctx, | 242 static void chomp3(MACEContext *ctx, |
243 uint8_t val, | 243 uint8_t val, |
244 const uint16_t tab1[], | 244 const uint16_t tab1[], |
245 const uint16_t tab2[][8]) | 245 const uint16_t tab2[][8], |
246 uint32_t numChannels) | |
246 { | 247 { |
247 short current; | 248 short current; |
248 | 249 |
249 current=(short)tab2[(ctx->index & 0x7f0) >> 4][val]; | 250 current=(short)tab2[(ctx->index & 0x7f0) >> 4][val]; |
250 if (current+ctx->lev > 32767) current=32767; | 251 if (current+ctx->lev > 32767) current=32767; |
251 else if (current+ctx->lev < -32768) current=-32767; | 252 else if (current+ctx->lev < -32768) current=-32767; |
252 else current+=ctx->lev; | 253 else current+=ctx->lev; |
253 ctx->lev=current-(current >> 3); | 254 ctx->lev=current-(current >> 3); |
254 // *ctx->outPtr++=current >> 8; | 255 // *ctx->outPtr++=current >> 8; |
255 *ctx->outPtr++=current; | 256 *ctx->outPtr=current; |
257 ctx->outPtr+=numChannels; | |
256 if ( ( ctx->index += tab1[val]-(ctx->index>>5) ) < 0 ) ctx->index = 0; | 258 if ( ( ctx->index += tab1[val]-(ctx->index>>5) ) < 0 ) ctx->index = 0; |
257 } | 259 } |
258 /* \\\ */ | 260 /* \\\ */ |
259 | 261 |
260 /* /// "Exp1to3()" */ | 262 /* /// "Exp1to3()" */ |
279 | 281 |
280 ctx->outPtr=outBuffer; | 282 ctx->outPtr=outBuffer; |
281 | 283 |
282 while (cnt>0) { | 284 while (cnt>0) { |
283 pkt=inBuffer[0]; | 285 pkt=inBuffer[0]; |
284 chomp3(ctx, pkt & 7, MACEtab1, MACEtab2); | 286 chomp3(ctx, pkt & 7, MACEtab1, MACEtab2, numChannels); |
285 chomp3(ctx,(pkt >> 3) & 3, MACEtab3, MACEtab4); | 287 chomp3(ctx,(pkt >> 3) & 3, MACEtab3, MACEtab4, numChannels); |
286 chomp3(ctx, pkt >> 5 , MACEtab1, MACEtab2); | 288 chomp3(ctx, pkt >> 5 , MACEtab1, MACEtab2, numChannels); |
287 pkt=inBuffer[1]; | 289 pkt=inBuffer[1]; |
288 chomp3(ctx, pkt & 7, MACEtab1, MACEtab2); | 290 chomp3(ctx, pkt & 7, MACEtab1, MACEtab2, numChannels); |
289 chomp3(ctx,(pkt >> 3) & 3, MACEtab3, MACEtab4); | 291 chomp3(ctx,(pkt >> 3) & 3, MACEtab3, MACEtab4, numChannels); |
290 chomp3(ctx, pkt >> 5 , MACEtab1, MACEtab2); | 292 chomp3(ctx, pkt >> 5 , MACEtab1, MACEtab2, numChannels); |
291 | 293 |
292 inBuffer+=numChannels*2; | 294 inBuffer+=numChannels*2; |
293 --cnt; | 295 --cnt; |
294 } | 296 } |
295 | 297 |
304 | 306 |
305 /* /// "chomp6()" */ | 307 /* /// "chomp6()" */ |
306 static void chomp6(MACEContext *ctx, | 308 static void chomp6(MACEContext *ctx, |
307 uint8_t val, | 309 uint8_t val, |
308 const uint16_t tab1[], | 310 const uint16_t tab1[], |
309 const uint16_t tab2[][8]) | 311 const uint16_t tab2[][8], |
312 uint32_t numChannels) | |
310 { | 313 { |
311 short current; | 314 short current; |
312 | 315 |
313 current=(short)tab2[(ctx->index & 0x7f0) >> 4][val]; | 316 current=(short)tab2[(ctx->index & 0x7f0) >> 4][val]; |
314 | 317 |
327 ctx->level=((current*ctx->factor) >> 15); | 330 ctx->level=((current*ctx->factor) >> 15); |
328 current>>=1; | 331 current>>=1; |
329 | 332 |
330 // *ctx->outPtr++=(ctx->previous+ctx->prev2-((ctx->prev2-current) >> 2)) >> 8; | 333 // *ctx->outPtr++=(ctx->previous+ctx->prev2-((ctx->prev2-current) >> 2)) >> 8; |
331 // *ctx->outPtr++=(ctx->previous+current+((ctx->prev2-current) >> 2)) >> 8; | 334 // *ctx->outPtr++=(ctx->previous+current+((ctx->prev2-current) >> 2)) >> 8; |
332 *ctx->outPtr++=(ctx->previous+ctx->prev2-((ctx->prev2-current) >> 2)); | 335 *ctx->outPtr=(ctx->previous+ctx->prev2-((ctx->prev2-current) >> 2)); |
333 *ctx->outPtr++=(ctx->previous+current+((ctx->prev2-current) >> 2)); | 336 ctx->outPtr+=numChannels; |
334 | 337 *ctx->outPtr=(ctx->previous+current+((ctx->prev2-current) >> 2)); |
338 ctx->outPtr+=numChannels; | |
335 ctx->prev2=ctx->previous; | 339 ctx->prev2=ctx->previous; |
336 ctx->previous=current; | 340 ctx->previous=current; |
337 | 341 |
338 if( ( ctx->index += tab1[val]-(ctx->index>>5) ) < 0 ) ctx->index = 0; | 342 if( ( ctx->index += tab1[val]-(ctx->index>>5) ) < 0 ) ctx->index = 0; |
339 } | 343 } |
364 ctx->outPtr=outBuffer; | 368 ctx->outPtr=outBuffer; |
365 | 369 |
366 while (cnt>0) { | 370 while (cnt>0) { |
367 pkt=*inBuffer; | 371 pkt=*inBuffer; |
368 | 372 |
369 chomp6(ctx, pkt >> 5 , MACEtab1, MACEtab2); | 373 chomp6(ctx, pkt >> 5 , MACEtab1, MACEtab2, numChannels); |
370 chomp6(ctx,(pkt >> 3) & 3, MACEtab3, MACEtab4); | 374 chomp6(ctx,(pkt >> 3) & 3, MACEtab3, MACEtab4, numChannels); |
371 chomp6(ctx, pkt & 7, MACEtab1, MACEtab2); | 375 chomp6(ctx, pkt & 7, MACEtab1, MACEtab2, numChannels); |
372 | 376 |
373 inBuffer+=numChannels; | 377 inBuffer+=numChannels; |
374 --cnt; | 378 --cnt; |
375 } | 379 } |
376 | 380 |