Mercurial > libavcodec.hg
comparison cavs.c @ 5243:dd11d0b32cc9 libavcodec
move dequantization into its own inline function
author | stefang |
---|---|
date | Sat, 07 Jul 2007 07:14:58 +0000 |
parents | deb5b8213d4e |
children | eeba62cd2181 |
comparison
equal
deleted
inserted
replaced
5242:deb5b8213d4e | 5243:dd11d0b32cc9 |
---|---|
497 * @param stride line stride in frame buffer | 497 * @param stride line stride in frame buffer |
498 */ | 498 */ |
499 static int decode_residual_block(AVSContext *h, GetBitContext *gb, | 499 static int decode_residual_block(AVSContext *h, GetBitContext *gb, |
500 const dec_2dvlc_t *r, int esc_golomb_order, | 500 const dec_2dvlc_t *r, int esc_golomb_order, |
501 int qp, uint8_t *dst, int stride) { | 501 int qp, uint8_t *dst, int stride) { |
502 int i,pos = -1; | 502 int i, level_code, esc_code, level, run, mask; |
503 int level_code, esc_code, level, run, mask; | 503 DCTELEM level_buf[64]; |
504 int level_buf[64]; | 504 uint8_t run_buf[64]; |
505 int run_buf[64]; | |
506 int dqm = dequant_mul[qp]; | |
507 int dqs = dequant_shift[qp]; | |
508 int dqa = 1 << (dqs - 1); | |
509 const uint8_t *scantab = h->scantable.permutated; | |
510 DCTELEM *block = h->block; | 505 DCTELEM *block = h->block; |
511 | 506 |
512 for(i=0;i<65;i++) { | 507 for(i=0;i<65;i++) { |
513 level_code = get_ue_code(gb,r->golomb_order); | 508 level_code = get_ue_code(gb,r->golomb_order); |
514 if(level_code >= ESCAPE_CODE) { | 509 if(level_code >= ESCAPE_CODE) { |
527 r += r->rltab[level_code][2]; | 522 r += r->rltab[level_code][2]; |
528 } | 523 } |
529 level_buf[i] = level; | 524 level_buf[i] = level; |
530 run_buf[i] = run; | 525 run_buf[i] = run; |
531 } | 526 } |
532 /* inverse scan and dequantization */ | 527 if(dequant(h,level_buf, run_buf, block, dequant_mul[qp], |
533 while(--i >= 0){ | 528 dequant_shift[qp], i)) |
534 pos += run_buf[i]; | 529 return -1; |
535 if(pos > 63) { | |
536 av_log(h->s.avctx, AV_LOG_ERROR, | |
537 "position out of block bounds at pic %d MB(%d,%d)\n", | |
538 h->picture.poc, h->mbx, h->mby); | |
539 return -1; | |
540 } | |
541 block[scantab[pos]] = (level_buf[i]*dqm + dqa) >> dqs; | |
542 } | |
543 h->s.dsp.cavs_idct8_add(dst,block,stride); | 530 h->s.dsp.cavs_idct8_add(dst,block,stride); |
544 return 0; | 531 return 0; |
545 } | 532 } |
546 | 533 |
547 | 534 |