@ -461,17 +461,21 @@ static int unpack_superblocks(Vp3DecodeContext *s, GetBitContext *gb)
/* unpack the list of partially-coded superblocks */
bit = get_bits1 ( gb ) ;
/* toggle the bit because as soon as the first run length is
* fetched the bit will be toggled again */
bit ^ = 1 ;
while ( current_superblock < s - > superblock_count ) {
if ( current_run - - = = 0 ) {
bit ^ = 1 ;
current_run = get_vlc2 ( gb ,
s - > superblock_run_length_vlc . table , 6 , 2 ) ;
if ( current_run = = 33 )
s - > superblock_run_length_vlc . table , 6 , 2 ) + 1 ;
if ( current_run = = 34 )
current_run + = get_bits ( gb , 12 ) ;
if ( current_superblock + current_run > s - > superblock_count ) {
av_log ( s - > avctx , AV_LOG_ERROR , " Invalid partially coded superblock run length \n " ) ;
return - 1 ;
}
memset ( s - > superblock_coding + current_superblock , bit , current_run ) ;
current_superblock + = current_run ;
/* if any of the superblocks are not partially coded, flag
* a boolean to decode the list of fully - coded superblocks */
if ( bit = = 0 ) {
@ -482,8 +486,8 @@ static int unpack_superblocks(Vp3DecodeContext *s, GetBitContext *gb)
* superblocks */
decode_partial_blocks = 1 ;
}
}
s - > superblock_coding [ current_superblock + + ] = bit ;
bit ^ = 1 ;
}
/* unpack the list of fully coded superblocks if any of the blocks were