@ -56,7 +56,7 @@ static av_cold int tgq_decode_init(AVCodecContext *avctx)
return 0 ;
}
static void tgq_decode_block ( TgqContext * s , int16_t block [ 64 ] , GetBitContext * gb )
static int tgq_decode_block ( TgqContext * s , int16_t block [ 64 ] , GetBitContext * gb )
{
const uint8_t * scantable = ff_zigzag_direct ;
int i , j , value ;
@ -64,6 +64,8 @@ static void tgq_decode_block(TgqContext *s, int16_t block[64], GetBitContext *gb
for ( i = 1 ; i < 64 ; ) {
switch ( show_bits ( gb , 3 ) ) {
case 4 :
if ( i > = 63 )
return AVERROR_INVALIDDATA ;
block [ scantable [ i + + ] ] = 0 ;
case 0 :
block [ scantable [ i + + ] ] = 0 ;
@ -73,6 +75,8 @@ static void tgq_decode_block(TgqContext *s, int16_t block[64], GetBitContext *gb
case 1 :
skip_bits ( gb , 2 ) ;
value = get_bits ( gb , 6 ) ;
if ( value > 64 - i )
return AVERROR_INVALIDDATA ;
for ( j = 0 ; j < value ; j + + )
block [ scantable [ i + + ] ] = 0 ;
break ;
@ -100,6 +104,7 @@ static void tgq_decode_block(TgqContext *s, int16_t block[64], GetBitContext *gb
}
}
block [ 0 ] + = 128 < < 4 ;
return 0 ;
}
static void tgq_idct_put_mb ( TgqContext * s , int16_t ( * block ) [ 64 ] , AVFrame * frame ,
@ -160,8 +165,11 @@ static int tgq_decode_mb(TgqContext *s, GetByteContext *gbyte,
if ( ret < 0 )
return ret ;
for ( i = 0 ; i < 6 ; i + + )
tgq_decode_block ( s , s - > block [ i ] , & gb ) ;
for ( i = 0 ; i < 6 ; i + + ) {
int ret = tgq_decode_block ( s , s - > block [ i ] , & gb ) ;
if ( ret < 0 )
return ret ;
}
tgq_idct_put_mb ( s , s - > block , frame , mb_x , mb_y ) ;
bytestream2_skip ( gbyte , mode ) ;
} else {