diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2014-02-01 17:06:24 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-02-01 17:06:24 +0100 |
commit | 388b4cf86ed5ec27d35eb5069769db12a4e31af0 (patch) | |
tree | f06775f155db20bcb7ba5f950c70bd9a787b34a1 | |
parent | f4b288a639bbda3ca244072e67b689aa4f40f2c6 (diff) | |
download | ffmpeg-388b4cf86ed5ec27d35eb5069769db12a4e31af0.tar.gz |
avcodec/vc1: factor read_bfraction() out
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavcodec/vc1.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/libavcodec/vc1.c b/libavcodec/vc1.c index 29cc84ea70..085020938a 100644 --- a/libavcodec/vc1.c +++ b/libavcodec/vc1.c @@ -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; } |