mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
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 <kostya.shishkov@gmail.com>
This commit is contained in:
parent
7de9af65c7
commit
feaa40020b
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user