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