Band quant tables should not be assigned inside band tile loop,
authorMaxim Poliakovski <max_pole@gmx.de>
Sun, 7 Mar 2010 12:12:42 +0000 (12:12 +0000)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Sun, 7 Mar 2010 12:12:42 +0000 (12:12 +0000)
one time is enough.
Patch by Maxim (max_pole, gmx de)

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

libavcodec/indeo5.c

index fa150f2..5bfa8e7 100644 (file)
@@ -568,6 +568,18 @@ static int decode_band(IVI5DecContext *ctx, int plane_num,
         return -1;
     }
 
+    if (band->blk_size == 8) {
+        band->intra_base  = &ivi5_base_quant_8x8_intra[band->quant_mat][0];
+        band->inter_base  = &ivi5_base_quant_8x8_inter[band->quant_mat][0];
+        band->intra_scale = &ivi5_scale_quant_8x8_intra[band->quant_mat][0];
+        band->inter_scale = &ivi5_scale_quant_8x8_inter[band->quant_mat][0];
+    } else {
+        band->intra_base  = ivi5_base_quant_4x4_intra;
+        band->inter_base  = ivi5_base_quant_4x4_inter;
+        band->intra_scale = ivi5_scale_quant_4x4_intra;
+        band->inter_scale = ivi5_scale_quant_4x4_inter;
+    }
+
     band->rv_map = &ctx->rvmap_tabs[band->rvmap_sel];
 
     /* apply corrections to the selected rvmap table if present */
@@ -593,18 +605,6 @@ static int decode_band(IVI5DecContext *ctx, int plane_num,
             if (result < 0)
                 break;
 
-            if (band->blk_size == 8) {
-                band->intra_base  = &ivi5_base_quant_8x8_intra[band->quant_mat][0];
-                band->inter_base  = &ivi5_base_quant_8x8_inter[band->quant_mat][0];
-                band->intra_scale = &ivi5_scale_quant_8x8_intra[band->quant_mat][0];
-                band->inter_scale = &ivi5_scale_quant_8x8_inter[band->quant_mat][0];
-            } else {
-                band->intra_base  = ivi5_base_quant_4x4_intra;
-                band->inter_base  = ivi5_base_quant_4x4_inter;
-                band->intra_scale = ivi5_scale_quant_4x4_intra;
-                band->inter_scale = ivi5_scale_quant_4x4_inter;
-            }
-
             result = ff_ivi_decode_blocks(&ctx->gb, band, tile);
             if (result < 0) {
                 av_log(avctx, AV_LOG_ERROR, "Corrupted blocks data encountered!\n");