h263enc: keep block_last_index always valid during advanced intra coding
authorJanne Grunau <janne-libav@jannau.net>
Tue, 10 Jun 2014 18:50:13 +0000 (20:50 +0200)
committerJanne Grunau <janne-libav@jannau.net>
Wed, 11 Jun 2014 19:28:39 +0000 (21:28 +0200)
Prevents a triggered assert during fate-vsynth{1,2}-rv20 in
dct_unquantize_h263_intra_c().

libavcodec/ituh263enc.c

index cd4ed84..5f15b2f 100644 (file)
@@ -566,10 +566,6 @@ void ff_h263_encode_mb(MpegEncContext * s,
                 else
                     level = (level - (scale>>1))/scale;
 
                 else
                     level = (level - (scale>>1))/scale;
 
-                /* AIC can change CBP */
-                if (level == 0 && s->block_last_index[i] == 0)
-                    s->block_last_index[i] = -1;
-
                 if(!s->modified_quant){
                     if (level < -127)
                         level = -127;
                 if(!s->modified_quant){
                     if (level < -127)
                         level = -127;
@@ -592,7 +588,9 @@ void ff_h263_encode_mb(MpegEncContext * s,
 
                 /* Update AC/DC tables */
                 *dc_ptr[i] = rec_intradc[i];
 
                 /* Update AC/DC tables */
                 *dc_ptr[i] = rec_intradc[i];
-                if (s->block_last_index[i] >= 0)
+                /* AIC can change CBP */
+                if (s->block_last_index[i] > 0 ||
+                    (s->block_last_index[i] == 0 && level !=0))
                     cbp |= 1 << (5 - i);
             }
         }else{
                     cbp |= 1 << (5 - i);
             }
         }else{