Mercurial > libavcodec.hg
comparison ivi_common.c @ 11864:7204cb7dd601 libavcodec
Quant changes only once per MB so move the corresponding scale factor assignment
out of the block decoding loop. Indeo4 doesn't use any scale table but the quant
level itself as scale. Therefore access scale table only if its pointer != NULL.
author | maxim |
---|---|
date | Thu, 10 Jun 2010 17:31:12 +0000 |
parents | 1547c744b8d4 |
children | fdafbcef52f5 |
comparison
equal
deleted
inserted
replaced
11863:a12d8bdd0cac | 11864:7204cb7dd601 |
---|---|
362 | 362 |
363 quant = av_clip(band->glob_quant + mb->q_delta, 0, 23); | 363 quant = av_clip(band->glob_quant + mb->q_delta, 0, 23); |
364 | 364 |
365 base_tab = is_intra ? band->intra_base : band->inter_base; | 365 base_tab = is_intra ? band->intra_base : band->inter_base; |
366 scale_tab = is_intra ? band->intra_scale : band->inter_scale; | 366 scale_tab = is_intra ? band->intra_scale : band->inter_scale; |
367 if (scale_tab) | |
368 quant = scale_tab[quant]; | |
367 | 369 |
368 if (!is_intra) { | 370 if (!is_intra) { |
369 mv_x = mb->mv_x; | 371 mv_x = mb->mv_x; |
370 mv_y = mb->mv_y; | 372 mv_y = mb->mv_y; |
371 if (!band->is_halfpel) { | 373 if (!band->is_halfpel) { |
413 pos = band->scan[scan_pos]; | 415 pos = band->scan[scan_pos]; |
414 | 416 |
415 if (IVI_DEBUG && !val) | 417 if (IVI_DEBUG && !val) |
416 av_log(NULL, AV_LOG_ERROR, "Val = 0 encountered!\n"); | 418 av_log(NULL, AV_LOG_ERROR, "Val = 0 encountered!\n"); |
417 | 419 |
418 q = (base_tab[pos] * scale_tab[quant]) >> 9; | 420 q = (base_tab[pos] * quant) >> 9; |
419 if (q > 1) | 421 if (q > 1) |
420 val = val * q + FFSIGN(val) * (((q ^ 1) - 1) >> 1); | 422 val = val * q + FFSIGN(val) * (((q ^ 1) - 1) >> 1); |
421 trvec[pos] = val; | 423 trvec[pos] = val; |
422 col_flags[pos & col_mask] |= !!val; /* track columns containing non-zero coeffs */ | 424 col_flags[pos & col_mask] |= !!val; /* track columns containing non-zero coeffs */ |
423 }// while | 425 }// while |