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 |
