aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVittorio Giovara <vittorio.giovara@gmail.com>2016-11-07 17:36:20 -0500
committerVittorio Giovara <vittorio.giovara@gmail.com>2016-11-08 11:22:29 -0500
commit2fe30b4743c0f4c3bdf37b91ae534cafa85e4036 (patch)
tree744516ea95544a962c00d7d9f17a5ffc8745a4d7
parent5be21531119d7a97ebc706800d1608272ee5a507 (diff)
downloadffmpeg-2fe30b4743c0f4c3bdf37b91ae534cafa85e4036.tar.gz
hevc: Allow parsing external extradata buffers
-rw-r--r--libavcodec/hevcdec.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c
index 4dacdd7c88..d9463370bc 100644
--- a/libavcodec/hevcdec.c
+++ b/libavcodec/hevcdec.c
@@ -2698,17 +2698,15 @@ static int verify_md5(HEVCContext *s, AVFrame *frame)
return 0;
}
-static int hevc_decode_extradata(HEVCContext *s)
+static int hevc_decode_extradata(HEVCContext *s, uint8_t *buf, int length)
{
AVCodecContext *avctx = s->avctx;
GetByteContext gb;
int ret, i;
- bytestream2_init(&gb, avctx->extradata, avctx->extradata_size);
+ bytestream2_init(&gb, buf, length);
- if (avctx->extradata_size > 3 &&
- (avctx->extradata[0] || avctx->extradata[1] ||
- avctx->extradata[2] > 1)) {
+ if (length > 3 && (buf[0] || buf[1] || buf[2] > 1)) {
/* It seems the extradata is encoded as hvcC format.
* Temporarily, we support configurationVersion==0 until 14496-15 3rd
* is finalized. When finalized, configurationVersion will be 1 and we
@@ -2755,7 +2753,7 @@ static int hevc_decode_extradata(HEVCContext *s)
s->nal_length_size = nal_len_size;
} else {
s->is_nalff = 0;
- ret = decode_nal_units(s, avctx->extradata, avctx->extradata_size);
+ ret = decode_nal_units(s, buf, length);
if (ret < 0)
return ret;
}
@@ -3009,7 +3007,7 @@ static av_cold int hevc_decode_init(AVCodecContext *avctx)
return ret;
if (avctx->extradata_size > 0 && avctx->extradata) {
- ret = hevc_decode_extradata(s);
+ ret = hevc_decode_extradata(s, avctx->extradata, avctx->extradata_size);
if (ret < 0) {
hevc_decode_free(avctx);
return ret;