From b667252a41fbf5a3f6ea8c67fdbc03db3d748977 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Mon, 21 Mar 2016 09:00:40 +0100 Subject: h2645_parse: add support for parsing h264 --- libavcodec/h2645_parse.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'libavcodec/h2645_parse.c') diff --git a/libavcodec/h2645_parse.c b/libavcodec/h2645_parse.c index 57a78e9c2c..310b0093ca 100644 --- a/libavcodec/h2645_parse.c +++ b/libavcodec/h2645_parse.c @@ -154,9 +154,26 @@ static int hevc_parse_nal_header(H2645NAL *nal, void *logctx) return nuh_layer_id == 0; } +static int h264_parse_nal_header(H2645NAL *nal, void *logctx) +{ + GetBitContext *gb = &nal->gb; + + if (get_bits1(gb) != 0) + return AVERROR_INVALIDDATA; + + nal->ref_idc = get_bits(gb, 2); + nal->type = get_bits(gb, 5); + + av_log(logctx, AV_LOG_DEBUG, + "nal_unit_type: %d, nal_ref_idc: %d\n", + nal->type, nal->ref_idc); + + return 1; +} int ff_h2645_packet_split(H2645Packet *pkt, const uint8_t *buf, int length, - void *logctx, int is_nalff, int nal_length_size) + void *logctx, int is_nalff, int nal_length_size, + enum AVCodecID codec_id) { int consumed, ret = 0; @@ -211,7 +228,10 @@ int ff_h2645_packet_split(H2645Packet *pkt, const uint8_t *buf, int length, if (ret < 0) return ret; - ret = hevc_parse_nal_header(nal, logctx); + if (codec_id == AV_CODEC_ID_HEVC) + ret = hevc_parse_nal_header(nal, logctx); + else + ret = h264_parse_nal_header(nal, logctx); if (ret <= 0) { if (ret < 0) { av_log(logctx, AV_LOG_ERROR, "Invalid NAL unit %d, skipping.\n", -- cgit v1.2.3