summaryrefslogtreecommitdiffstats
path: root/libavcodec/h2645_parse.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2016-03-21 09:00:40 +0100
committerAnton Khirnov <anton@khirnov.net>2016-03-28 09:45:04 +0200
commitb667252a41fbf5a3f6ea8c67fdbc03db3d748977 (patch)
tree74969854afe80e07011090a012ce41bdfd9b9f03 /libavcodec/h2645_parse.c
parent52ec149fbee57b6ca817049c9706212a0774a32c (diff)
downloadffmpeg-streaming-b667252a41fbf5a3f6ea8c67fdbc03db3d748977.zip
ffmpeg-streaming-b667252a41fbf5a3f6ea8c67fdbc03db3d748977.tar.gz
h2645_parse: add support for parsing h264
Diffstat (limited to 'libavcodec/h2645_parse.c')
-rw-r--r--libavcodec/h2645_parse.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/libavcodec/h2645_parse.c b/libavcodec/h2645_parse.c
index 57a78e9..310b009 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",
OpenPOWER on IntegriCloud