@ -3398,7 +3398,7 @@ static av_cold int vc1_decode_init(AVCodecContext *avctx)
VC1Context * v = avctx - > priv_data ;
MpegEncContext * s = & v - > s ;
GetBitContext gb ;
int i ;
int i , cur_width , cur_height ;
if ( ! avctx - > extradata_size | | ! avctx - > extradata ) return - 1 ;
if ( ! ( avctx - > flags & CODEC_FLAG_GRAY ) )
@ -3419,8 +3419,8 @@ static av_cold int vc1_decode_init(AVCodecContext *avctx)
if ( vc1_init_common ( v ) < 0 ) return - 1 ;
ff_vc1dsp_init ( & v - > vc1dsp ) ;
avctx - > coded_width = avctx - > width ;
avctx - > coded_height = avctx - > height ;
cur_width = avctx - > coded_width = avctx - > width ;
cur_height = avctx - > coded_height = avctx - > height ;
if ( avctx - > codec_id = = CODEC_ID_WMV3 )
{
int count = 0 ;
@ -3491,6 +3491,19 @@ static av_cold int vc1_decode_init(AVCodecContext *avctx)
}
v - > res_sprite = ( avctx - > codec_tag = = MKTAG ( ' W ' , ' V ' , ' P ' , ' 2 ' ) ) ;
}
// Sequence header information may not have been parsed
// yet when ff_msmpeg4_decode_init was called the fist time
// above. If sequence information changes, we need to call
// it again.
if ( cur_width ! = avctx - > width | |
cur_height ! = avctx - > height ) {
MPV_common_end ( s ) ;
if ( ff_msmpeg4_decode_init ( avctx ) < 0 )
return - 1 ;
avctx - > coded_width = avctx - > width ;
avctx - > coded_height = avctx - > height ;
}
avctx - > profile = v - > profile ;
if ( v - > profile = = PROFILE_ADVANCED )
avctx - > level = v - > level ;