Commit a0d5204c authored by Michael Niedermayer's avatar Michael Niedermayer

Merge commit 'b25e84b7'

* commit 'b25e84b7':
  hevc: check that the VCL NAL types are the same for all slice segments of a frame
Merged-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents 8a3b85f3 b25e84b7
...@@ -2208,6 +2208,7 @@ static int hevc_frame_start(HEVCContext *s) ...@@ -2208,6 +2208,7 @@ static int hevc_frame_start(HEVCContext *s)
lc->start_of_tiles_x = 0; lc->start_of_tiles_x = 0;
s->is_decoded = 0; s->is_decoded = 0;
s->first_nal_type = s->nal_unit_type;
if (s->pps->tiles_enabled_flag) if (s->pps->tiles_enabled_flag)
lc->end_of_tiles_x = s->pps->column_width[0] << s->sps->log2_ctb_size; lc->end_of_tiles_x = s->pps->column_width[0] << s->sps->log2_ctb_size;
...@@ -2332,6 +2333,13 @@ static int decode_nal_unit(HEVCContext *s, const uint8_t *nal, int length) ...@@ -2332,6 +2333,13 @@ static int decode_nal_unit(HEVCContext *s, const uint8_t *nal, int length)
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
} }
if (s->nal_unit_type != s->first_nal_type) {
av_log(s->avctx, AV_LOG_ERROR,
"Non-matching NAL types of the VCL NALUs: %d %d\n",
s->first_nal_type, s->nal_unit_type);
return AVERROR_INVALIDDATA;
}
if (!s->sh.dependent_slice_segment_flag && if (!s->sh.dependent_slice_segment_flag &&
s->sh.slice_type != I_SLICE) { s->sh.slice_type != I_SLICE) {
ret = ff_hevc_slice_rpl(s); ret = ff_hevc_slice_rpl(s);
......
...@@ -847,6 +847,8 @@ typedef struct HEVCContext { ...@@ -847,6 +847,8 @@ typedef struct HEVCContext {
HEVCNAL *nals; HEVCNAL *nals;
int nb_nals; int nb_nals;
int nals_allocated; int nals_allocated;
// type of the first VCL NAL of the current frame
enum NALUnitType first_nal_type;
// for checking the frame checksums // for checking the frame checksums
struct AVMD5 *md5_ctx; struct AVMD5 *md5_ctx;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment