mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
vc1: re-initialize tables after width/height change.
read_sequence_header can change width/height; therefore, re-initialize all tables if width/height changed Signed-off-by: Anton Khirnov <anton@khirnov.net>
This commit is contained in:
parent
1397ac0aa0
commit
7b20d35a54
@ -3398,7 +3398,7 @@ static av_cold int vc1_decode_init(AVCodecContext *avctx)
|
|||||||
VC1Context *v = avctx->priv_data;
|
VC1Context *v = avctx->priv_data;
|
||||||
MpegEncContext *s = &v->s;
|
MpegEncContext *s = &v->s;
|
||||||
GetBitContext gb;
|
GetBitContext gb;
|
||||||
int i;
|
int i, cur_width, cur_height;
|
||||||
|
|
||||||
if (!avctx->extradata_size || !avctx->extradata) return -1;
|
if (!avctx->extradata_size || !avctx->extradata) return -1;
|
||||||
if (!(avctx->flags & CODEC_FLAG_GRAY))
|
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;
|
if (vc1_init_common(v) < 0) return -1;
|
||||||
ff_vc1dsp_init(&v->vc1dsp);
|
ff_vc1dsp_init(&v->vc1dsp);
|
||||||
|
|
||||||
avctx->coded_width = avctx->width;
|
cur_width = avctx->coded_width = avctx->width;
|
||||||
avctx->coded_height = avctx->height;
|
cur_height = avctx->coded_height = avctx->height;
|
||||||
if (avctx->codec_id == CODEC_ID_WMV3)
|
if (avctx->codec_id == CODEC_ID_WMV3)
|
||||||
{
|
{
|
||||||
int count = 0;
|
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'));
|
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;
|
avctx->profile = v->profile;
|
||||||
if (v->profile == PROFILE_ADVANCED)
|
if (v->profile == PROFILE_ADVANCED)
|
||||||
avctx->level = v->level;
|
avctx->level = v->level;
|
||||||
|
Loading…
Reference in New Issue
Block a user