|
|
|
@ -5581,6 +5581,7 @@ static av_cold int vc1_decode_init(AVCodecContext *avctx) |
|
|
|
|
VC1Context *v = avctx->priv_data; |
|
|
|
|
MpegEncContext *s = &v->s; |
|
|
|
|
GetBitContext gb; |
|
|
|
|
int ret; |
|
|
|
|
|
|
|
|
|
/* save the container output size for WMImage */ |
|
|
|
|
v->output_width = avctx->width; |
|
|
|
@ -5597,13 +5598,13 @@ static av_cold int vc1_decode_init(AVCodecContext *avctx) |
|
|
|
|
avctx->flags |= CODEC_FLAG_EMU_EDGE; |
|
|
|
|
v->s.flags |= CODEC_FLAG_EMU_EDGE; |
|
|
|
|
|
|
|
|
|
if (ff_vc1_init_common(v) < 0) |
|
|
|
|
return -1; |
|
|
|
|
if ((ret = ff_vc1_init_common(v)) < 0) |
|
|
|
|
return ret; |
|
|
|
|
// ensure static VLC tables are initialized
|
|
|
|
|
if (ff_msmpeg4_decode_init(avctx) < 0) |
|
|
|
|
return -1; |
|
|
|
|
if (ff_vc1_decode_init_alloc_tables(v) < 0) |
|
|
|
|
return -1; |
|
|
|
|
if ((ret = ff_msmpeg4_decode_init(avctx)) < 0) |
|
|
|
|
return ret; |
|
|
|
|
if ((ret = ff_vc1_decode_init_alloc_tables(v)) < 0) |
|
|
|
|
return ret; |
|
|
|
|
// Hack to ensure the above functions will be called
|
|
|
|
|
// again once we know all necessary settings.
|
|
|
|
|
// That this is necessary might indicate a bug.
|
|
|
|
@ -5622,8 +5623,8 @@ static av_cold int vc1_decode_init(AVCodecContext *avctx) |
|
|
|
|
|
|
|
|
|
init_get_bits(&gb, avctx->extradata, avctx->extradata_size*8); |
|
|
|
|
|
|
|
|
|
if (ff_vc1_decode_sequence_header(avctx, v, &gb) < 0) |
|
|
|
|
return -1; |
|
|
|
|
if ((ret = ff_vc1_decode_sequence_header(avctx, v, &gb)) < 0) |
|
|
|
|
return ret; |
|
|
|
|
|
|
|
|
|
count = avctx->extradata_size*8 - get_bits_count(&gb); |
|
|
|
|
if (count > 0) { |
|
|
|
@ -5657,16 +5658,16 @@ static av_cold int vc1_decode_init(AVCodecContext *avctx) |
|
|
|
|
init_get_bits(&gb, buf2, buf2_size * 8); |
|
|
|
|
switch (AV_RB32(start)) { |
|
|
|
|
case VC1_CODE_SEQHDR: |
|
|
|
|
if (ff_vc1_decode_sequence_header(avctx, v, &gb) < 0) { |
|
|
|
|
if ((ret = ff_vc1_decode_sequence_header(avctx, v, &gb)) < 0) { |
|
|
|
|
av_free(buf2); |
|
|
|
|
return -1; |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
seq_initialized = 1; |
|
|
|
|
break; |
|
|
|
|
case VC1_CODE_ENTRYPOINT: |
|
|
|
|
if (ff_vc1_decode_entry_point(avctx, v, &gb) < 0) { |
|
|
|
|
if ((ret = ff_vc1_decode_entry_point(avctx, v, &gb)) < 0) { |
|
|
|
|
av_free(buf2); |
|
|
|
|
return -1; |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
ep_initialized = 1; |
|
|
|
|
break; |
|
|
|
|