|
|
|
@ -613,6 +613,12 @@ static void rotate_luts(VC1Context *v) |
|
|
|
|
*v->curr_use_ic = 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int read_bfraction(VC1Context *v, GetBitContext* gb) { |
|
|
|
|
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]; |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int ff_vc1_parse_frame_header(VC1Context *v, GetBitContext* gb) |
|
|
|
|
{ |
|
|
|
|
int pqindex, lowquant, status; |
|
|
|
@ -644,8 +650,8 @@ int ff_vc1_parse_frame_header(VC1Context *v, GetBitContext* gb) |
|
|
|
|
|
|
|
|
|
v->bi_type = 0; |
|
|
|
|
if (v->s.pict_type == AV_PICTURE_TYPE_B) { |
|
|
|
|
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]; |
|
|
|
|
if (read_bfraction(v, gb) < 0) |
|
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
if (v->bfraction == 0) { |
|
|
|
|
v->s.pict_type = AV_PICTURE_TYPE_BI; |
|
|
|
|
} |
|
|
|
@ -928,8 +934,8 @@ int ff_vc1_parse_frame_header_adv(VC1Context *v, GetBitContext* gb) |
|
|
|
|
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]; |
|
|
|
|
if (read_bfraction(v, gb) < 0) |
|
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
v->frfd = (v->bfraction * v->refdist) >> 8; |
|
|
|
|
v->brfd = v->refdist - v->frfd - 1; |
|
|
|
|
if (v->brfd < 0) |
|
|
|
@ -941,8 +947,8 @@ int ff_vc1_parse_frame_header_adv(VC1Context *v, GetBitContext* gb) |
|
|
|
|
if (v->finterpflag) |
|
|
|
|
v->interpfrm = get_bits1(gb); |
|
|
|
|
if (v->s.pict_type == AV_PICTURE_TYPE_B) { |
|
|
|
|
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]; |
|
|
|
|
if (read_bfraction(v, gb) < 0) |
|
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
if (v->bfraction == 0) { |
|
|
|
|
v->s.pict_type = AV_PICTURE_TYPE_BI; /* XXX: should not happen here */ |
|
|
|
|
} |
|
|
|
@ -1186,8 +1192,8 @@ int ff_vc1_parse_frame_header_adv(VC1Context *v, GetBitContext* gb) |
|
|
|
|
break; |
|
|
|
|
case AV_PICTURE_TYPE_B: |
|
|
|
|
if (v->fcm == ILACE_FRAME) { |
|
|
|
|
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]; |
|
|
|
|
if (read_bfraction(v, gb) < 0) |
|
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
if (v->bfraction == 0) { |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|