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