OSDN Git Service

Quant changes only once per MB so move the corresponding scale factor assignment
authorMaxim Poliakovski <max_pole@gmx.de>
Thu, 10 Jun 2010 17:31:12 +0000 (17:31 +0000)
committerMaxim Poliakovski <max_pole@gmx.de>
Thu, 10 Jun 2010 17:31:12 +0000 (17:31 +0000)
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.

Originally committed as revision 23569 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/ivi_common.c

index 6a49366..f0a3a49 100644 (file)
@@ -364,6 +364,8 @@ int ff_ivi_decode_blocks(GetBitContext *gb, IVIBandDesc *band, IVITile *tile)
 
         base_tab  = is_intra ? band->intra_base  : band->inter_base;
         scale_tab = is_intra ? band->intra_scale : band->inter_scale;
+        if (scale_tab)
+            quant = scale_tab[quant];
 
         if (!is_intra) {
             mv_x = mb->mv_x;
@@ -415,7 +417,7 @@ int ff_ivi_decode_blocks(GetBitContext *gb, IVIBandDesc *band, IVITile *tile)
                     if (IVI_DEBUG && !val)
                         av_log(NULL, AV_LOG_ERROR, "Val = 0 encountered!\n");
 
-                    q = (base_tab[pos] * scale_tab[quant]) >> 9;
+                    q = (base_tab[pos] * quant) >> 9;
                     if (q > 1)
                         val = val * q + FFSIGN(val) * (((q ^ 1) - 1) >> 1);
                     trvec[pos] = val;