From feaa40020b59e8abb2c70f2944a12cb068ab2850 Mon Sep 17 00:00:00 2001 From: Hendrik Leppkes Date: Fri, 13 Jan 2012 18:43:08 +0100 Subject: [PATCH] vc1: always read the bfraction element for interlaced fields Previously, it would not be read if refdist_flag was not set, however according to the spec and the reference decoder, it should always be read. Signed-off-by: Kostya Shishkov --- libavcodec/vc1.c | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/libavcodec/vc1.c b/libavcodec/vc1.c index 0a70062893..1394f2cd4b 100644 --- a/libavcodec/vc1.c +++ b/libavcodec/vc1.c @@ -894,20 +894,18 @@ int vc1_parse_frame_header_adv(VC1Context *v, GetBitContext* gb) if (v->field_mode) { if (!v->refdist_flag) v->refdist = 0; - else { - if ((v->s.pict_type != AV_PICTURE_TYPE_B) - && (v->s.pict_type != AV_PICTURE_TYPE_BI)) { - v->refdist = get_bits(gb, 2); - if (v->refdist == 3) - v->refdist += get_unary(gb, 0, 16); - } else { - v->bfraction_lut_index = get_vlc2(gb, ff_vc1_bfraction_vlc.table, VC1_BFRACTION_VLC_BITS, 1); - v->bfraction = ff_vc1_bfraction_lut[v->bfraction_lut_index]; - v->frfd = (v->bfraction * v->refdist) >> 8; - v->brfd = v->refdist - v->frfd - 1; - if (v->brfd < 0) - v->brfd = 0; - } + else if ((v->s.pict_type != AV_PICTURE_TYPE_B) && (v->s.pict_type != AV_PICTURE_TYPE_BI)) { + v->refdist = get_bits(gb, 2); + if (v->refdist == 3) + v->refdist += get_unary(gb, 0, 16); + } + if ((v->s.pict_type == AV_PICTURE_TYPE_B) || (v->s.pict_type == AV_PICTURE_TYPE_BI)) { + v->bfraction_lut_index = get_vlc2(gb, ff_vc1_bfraction_vlc.table, VC1_BFRACTION_VLC_BITS, 1); + v->bfraction = ff_vc1_bfraction_lut[v->bfraction_lut_index]; + v->frfd = (v->bfraction * v->refdist) >> 8; + v->brfd = v->refdist - v->frfd - 1; + if (v->brfd < 0) + v->brfd = 0; } goto parse_common_info; }