diff options
author | Anton Khirnov <anton@khirnov.net> | 2016-03-21 16:14:31 +0100 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2016-04-24 10:06:23 +0200 |
commit | a6e27f7add2698fdd89911632b570c3d0c3f2aaa (patch) | |
tree | 8e345bf225e923c9c8fc0e68809dd28b8aa27ad7 /libavcodec/h264_parser.c | |
parent | 56b17a33f231859cbccbd741b4763617cb4ecf03 (diff) | |
download | ffmpeg-a6e27f7add2698fdd89911632b570c3d0c3f2aaa.tar.gz |
h264: factor out parsing the reference count into a separate file
This will allow decoupling the parser from the decoder.
Diffstat (limited to 'libavcodec/h264_parser.c')
-rw-r--r-- | libavcodec/h264_parser.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/libavcodec/h264_parser.c b/libavcodec/h264_parser.c index 87f6fe6706..2d39ee4a04 100644 --- a/libavcodec/h264_parser.c +++ b/libavcodec/h264_parser.c @@ -111,6 +111,7 @@ static int scan_mmco_reset(AVCodecParserContext *s) H264ParseContext *p = s->priv_data; H264Context *h = &p->h; H264SliceContext *sl = &h->slice_ctx[0]; + int list_count, ref_count[2]; sl->slice_type_nos = s->pict_type & 3; @@ -120,12 +121,13 @@ static int scan_mmco_reset(AVCodecParserContext *s) if (sl->slice_type_nos == AV_PICTURE_TYPE_B) get_bits1(&sl->gb); // direct_spatial_mv_pred - if (ff_set_ref_count(h, sl) < 0) + if (ff_h264_parse_ref_count(&list_count, ref_count, &sl->gb, &h->pps, + sl->slice_type_nos, h->picture_structure) < 0) return AVERROR_INVALIDDATA; if (sl->slice_type_nos != AV_PICTURE_TYPE_I) { int list; - for (list = 0; list < sl->list_count; list++) { + for (list = 0; list < list_count; list++) { if (get_bits1(&sl->gb)) { int index; for (index = 0; ; index++) { @@ -141,7 +143,7 @@ static int scan_mmco_reset(AVCodecParserContext *s) } else break; - if (index >= sl->ref_count[list]) { + if (index >= ref_count[list]) { av_log(h->avctx, AV_LOG_ERROR, "reference count %d overflow\n", index); return AVERROR_INVALIDDATA; @@ -153,7 +155,7 @@ static int scan_mmco_reset(AVCodecParserContext *s) if ((h->pps.weighted_pred && sl->slice_type_nos == AV_PICTURE_TYPE_P) || (h->pps.weighted_bipred_idc == 1 && sl->slice_type_nos == AV_PICTURE_TYPE_B)) - ff_h264_pred_weight_table(&sl->gb, &h->sps, sl->ref_count, sl->slice_type_nos, + ff_h264_pred_weight_table(&sl->gb, &h->sps, ref_count, sl->slice_type_nos, &sl->pwt); if (get_bits1(&sl->gb)) { // adaptive_ref_pic_marking_mode_flag |