diff options
author | Anton Khirnov <anton@khirnov.net> | 2015-07-09 18:01:08 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2015-07-12 18:15:39 +0200 |
commit | d7bebe4805193783f0b6f292f9127a75709fb7d9 (patch) | |
tree | d7736cbf7b68497f20878b9675788fac91888dee /libavcodec/hevc.c | |
parent | b11acd57326db6c2cc1475dd0bea2a06fbc85aa2 (diff) | |
download | ffmpeg-d7bebe4805193783f0b6f292f9127a75709fb7d9.tar.gz |
hevc: skip invalid/ignored NALUs when splitting the packet
There is no need to wait until actually decoding the NALU. This will
allow to get rid of the second hls_nal_unit() call later.
Diffstat (limited to 'libavcodec/hevc.c')
-rw-r--r-- | libavcodec/hevc.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/libavcodec/hevc.c b/libavcodec/hevc.c index 9b1cd66495..7080d00eb8 100644 --- a/libavcodec/hevc.c +++ b/libavcodec/hevc.c @@ -2503,13 +2503,7 @@ static int decode_nal_unit(HEVCContext *s, const HEVCNAL *nal) if (ret < 0) return ret; - ret = hls_nal_unit(s); - if (ret < 0) { - av_log(s->avctx, AV_LOG_ERROR, "Invalid NAL unit %d, skipping.\n", - s->nal_unit_type); - goto fail; - } else if (!ret) - return 0; + hls_nal_unit(s); switch (s->nal_unit_type) { case NAL_VPS: @@ -2709,12 +2703,22 @@ static int decode_nal_units(HEVCContext *s, const uint8_t *buf, int length) ret = init_get_bits8(&s->HEVClc.gb, nal->data, nal->size); if (ret < 0) goto fail; - hls_nal_unit(s); + + ret = hls_nal_unit(s); + if (ret <= 0) { + if (ret < 0) { + av_log(s->avctx, AV_LOG_ERROR, "Invalid NAL unit %d, skipping.\n", + s->nal_unit_type); + } + s->nb_nals--; + goto skip_nal; + } if (s->nal_unit_type == NAL_EOB_NUT || s->nal_unit_type == NAL_EOS_NUT) s->eos = 1; +skip_nal: buf += consumed; length -= consumed; } |