@ -218,17 +218,18 @@ static inline int svq3_decode_block(GetBitContext *gb, DCTELEM *block,
static const uint8_t * const scan_patterns [ 4 ] =
{ luma_dc_zigzag_scan , zigzag_scan , svq3_scan , chroma_dc_scan } ;
int run , level , sign , vlc , limit ;
int run , level , sign , limit ;
unsigned vlc ;
const int intra = 3 * type > > 2 ;
const uint8_t * const scan = scan_patterns [ type ] ;
for ( limit = ( 16 > > intra ) ; index < 16 ; index = limit , limit + = 8 ) {
for ( ; ( vlc = svq3_get_ue_golomb ( gb ) ) ! = 0 ; index + + ) {
if ( vlc < 0 )
if ( ( int ) vlc < 0 )
return - 1 ;
sign = ( vlc & 0x1 ) - 1 ;
vlc = vlc + 1 > > 1 ;
sign = ( vlc & 1 ) ? 0 : - 1 ;
vlc = vlc + 1 > > 1 ;
if ( type = = 3 ) {
if ( vlc < 3 ) {
@ -1014,7 +1015,7 @@ static int svq3_decode_frame(AVCodecContext *avctx, void *data,
H264Context * h = & svq3 - > h ;
MpegEncContext * s = & h - > s ;
int buf_size = avpkt - > size ;
int m , mb_type , left ;
int m , left ;
uint8_t * buf ;
/* special case for last picture */
@ -1109,6 +1110,7 @@ static int svq3_decode_frame(AVCodecContext *avctx, void *data,
for ( s - > mb_y = 0 ; s - > mb_y < s - > mb_height ; s - > mb_y + + ) {
for ( s - > mb_x = 0 ; s - > mb_x < s - > mb_width ; s - > mb_x + + ) {
unsigned mb_type ;
h - > mb_xy = s - > mb_x + s - > mb_y * s - > mb_stride ;
if ( ( get_bits_count ( & s - > gb ) + 7 ) > = s - > gb . size_in_bits & &
@ -1129,7 +1131,7 @@ static int svq3_decode_frame(AVCodecContext *avctx, void *data,
mb_type + = 8 ;
else if ( s - > pict_type = = AV_PICTURE_TYPE_B & & mb_type > = 4 )
mb_type + = 4 ;
if ( ( unsigned ) mb_type > 33 | | svq3_decode_mb ( svq3 , mb_type ) ) {
if ( mb_type > 33 | | svq3_decode_mb ( svq3 , mb_type ) ) {
av_log ( h - > s . avctx , AV_LOG_ERROR ,
" error while decoding MB %d %d \n " , s - > mb_x , s - > mb_y ) ;
return - 1 ;