mirror of https://git.ffmpeg.org/ffmpeg.git
avcodec/hevc_parser: Treat extradata parsing differently, as it should not contain an AU
Fixes ticket4718 Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
parent
bd48764532
commit
54882156dd
|
@ -115,7 +115,13 @@ static int parse_nal_units(AVCodecParserContext *s, const uint8_t *buf,
|
||||||
case NAL_RADL_N:
|
case NAL_RADL_N:
|
||||||
case NAL_RADL_R:
|
case NAL_RADL_R:
|
||||||
case NAL_RASL_N:
|
case NAL_RASL_N:
|
||||||
case NAL_RASL_R: hevc_parse_slice_header(s, nal, avctx); break;
|
case NAL_RASL_R:
|
||||||
|
if (buf == avctx->extradata) {
|
||||||
|
av_log(avctx, AV_LOG_ERROR, "Invalid NAL unit: %d\n", nal->type);
|
||||||
|
return AVERROR_INVALIDDATA;
|
||||||
|
}
|
||||||
|
hevc_parse_slice_header(s, nal, avctx);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -187,6 +193,7 @@ static inline int parse_nal_units(AVCodecParserContext *s, const uint8_t *buf,
|
||||||
const uint8_t *buf_end = buf + buf_size;
|
const uint8_t *buf_end = buf + buf_size;
|
||||||
int state = -1, i;
|
int state = -1, i;
|
||||||
HEVCNAL *nal;
|
HEVCNAL *nal;
|
||||||
|
int is_global = buf == avctx->extradata;
|
||||||
|
|
||||||
if (!h->HEVClc)
|
if (!h->HEVClc)
|
||||||
h->HEVClc = av_mallocz(sizeof(HEVCLocalContext));
|
h->HEVClc = av_mallocz(sizeof(HEVCLocalContext));
|
||||||
|
@ -266,6 +273,12 @@ static inline int parse_nal_units(AVCodecParserContext *s, const uint8_t *buf,
|
||||||
case NAL_IDR_W_RADL:
|
case NAL_IDR_W_RADL:
|
||||||
case NAL_IDR_N_LP:
|
case NAL_IDR_N_LP:
|
||||||
case NAL_CRA_NUT:
|
case NAL_CRA_NUT:
|
||||||
|
|
||||||
|
if (is_global) {
|
||||||
|
av_log(avctx, AV_LOG_ERROR, "Invalid NAL unit: %d\n", h->nal_unit_type);
|
||||||
|
return AVERROR_INVALIDDATA;
|
||||||
|
}
|
||||||
|
|
||||||
sh->first_slice_in_pic_flag = get_bits1(gb);
|
sh->first_slice_in_pic_flag = get_bits1(gb);
|
||||||
s->picture_structure = h->picture_struct;
|
s->picture_structure = h->picture_struct;
|
||||||
s->field_order = h->picture_struct;
|
s->field_order = h->picture_struct;
|
||||||
|
@ -354,7 +367,8 @@ static inline int parse_nal_units(AVCodecParserContext *s, const uint8_t *buf,
|
||||||
buf += consumed;
|
buf += consumed;
|
||||||
}
|
}
|
||||||
/* didn't find a picture! */
|
/* didn't find a picture! */
|
||||||
av_log(h->avctx, AV_LOG_ERROR, "missing picture in access unit\n");
|
if (!is_global)
|
||||||
|
av_log(h->avctx, AV_LOG_ERROR, "missing picture in access unit\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue