The parser uses VLC tables initialized in vc1_common_init(), therefore we should call this function on parser init also. Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind CC: libav-stable@libav.orgtags/n0.11
| @@ -447,5 +447,6 @@ int ff_vc1_decode_entry_point(AVCodecContext *avctx, VC1Context *v, GetBitContex | |||||
| int ff_vc1_parse_frame_header (VC1Context *v, GetBitContext *gb); | int ff_vc1_parse_frame_header (VC1Context *v, GetBitContext *gb); | ||||
| int ff_vc1_parse_frame_header_adv(VC1Context *v, GetBitContext *gb); | int ff_vc1_parse_frame_header_adv(VC1Context *v, GetBitContext *gb); | ||||
| int ff_vc1_init_common(VC1Context *v); | |||||
| #endif /* AVCODEC_VC1_H */ | #endif /* AVCODEC_VC1_H */ | ||||
| @@ -188,7 +188,7 @@ static int vc1_parse_init(AVCodecParserContext *s) | |||||
| { | { | ||||
| VC1ParseContext *vpc = s->priv_data; | VC1ParseContext *vpc = s->priv_data; | ||||
| vpc->v.s.slice_context_count = 1; | vpc->v.s.slice_context_count = 1; | ||||
| return 0; | |||||
| return ff_vc1_init_common(&vpc->v); | |||||
| } | } | ||||
| AVCodecParser ff_vc1_parser = { | AVCodecParser ff_vc1_parser = { | ||||
| @@ -67,7 +67,7 @@ static const int offset_table2[9] = { 0, 1, 3, 7, 15, 31, 63, 127, 255 }; | |||||
| * @param v The VC1Context to initialize | * @param v The VC1Context to initialize | ||||
| * @return Status | * @return Status | ||||
| */ | */ | ||||
| static int vc1_init_common(VC1Context *v) | |||||
| int ff_vc1_init_common(VC1Context *v) | |||||
| { | { | ||||
| static int done = 0; | static int done = 0; | ||||
| int i = 0; | int i = 0; | ||||
| @@ -5274,7 +5274,7 @@ static av_cold int vc1_decode_init(AVCodecContext *avctx) | |||||
| avctx->idct_algo = FF_IDCT_WMV2; | avctx->idct_algo = FF_IDCT_WMV2; | ||||
| } | } | ||||
| if (vc1_init_common(v) < 0) | |||||
| if (ff_vc1_init_common(v) < 0) | |||||
| return -1; | return -1; | ||||
| ff_vc1dsp_init(&v->vc1dsp); | ff_vc1dsp_init(&v->vc1dsp); | ||||