@ -411,7 +411,7 @@ static int decode_block(MJpegDecodeContext *s, DCTELEM *block,
/* AC coefs */
/* AC coefs */
i = 0 ;
i = 0 ;
{ OPEN_READER ( re , & s - > gb )
{ OPEN_READER ( re , & s - > gb )
for ( ; ; ) {
do {
UPDATE_CACHE ( re , & s - > gb ) ;
UPDATE_CACHE ( re , & s - > gb ) ;
GET_VLC ( code , re , & s - > gb , s - > vlcs [ 1 ] [ ac_index ] . table , 9 , 2 )
GET_VLC ( code , re , & s - > gb , s - > vlcs [ 1 ] [ ac_index ] . table , 9 , 2 )
@ -444,7 +444,7 @@ static int decode_block(MJpegDecodeContext *s, DCTELEM *block,
j = s - > scantable . permutated [ i ] ;
j = s - > scantable . permutated [ i ] ;
block [ j ] = level * quant_matrix [ j ] ;
block [ j ] = level * quant_matrix [ j ] ;
}
}
}
} while ( i < 63 ) ;
CLOSE_READER ( re , & s - > gb ) }
CLOSE_READER ( re , & s - > gb ) }
return 0 ;
return 0 ;
@ -511,6 +511,10 @@ static int decode_block_progressive(MJpegDecodeContext *s, DCTELEM *block, uint8
} else {
} else {
if ( run = = 0xF ) { // ZRL - skip 15 coefficients
if ( run = = 0xF ) { // ZRL - skip 15 coefficients
i + = 15 ;
i + = 15 ;
if ( i > = se ) {
av_log ( s - > avctx , AV_LOG_ERROR , " ZRL overflow: %d \n " , i ) ;
return - 1 ;
}
} else {
} else {
val = ( 1 < < run ) ;
val = ( 1 < < run ) ;
if ( run ) {
if ( run ) {