diff --git a/libavcodec/hevc.c b/libavcodec/hevc.c index 95fff7be33..ca3226dd90 100644 --- a/libavcodec/hevc.c +++ b/libavcodec/hevc.c @@ -533,7 +533,7 @@ static int hls_slice_header(HEVCContext *s) sh->colour_plane_id = get_bits(gb, 2); if (!IS_IDR(s)) { - int poc; + int poc, pos; sh->pic_order_cnt_lsb = get_bits(gb, s->ps.sps->log2_max_poc_lsb); poc = ff_hevc_compute_poc(s, sh->pic_order_cnt_lsb); @@ -547,13 +547,12 @@ static int hls_slice_header(HEVCContext *s) s->poc = poc; sh->short_term_ref_pic_set_sps_flag = get_bits1(gb); + pos = get_bits_left(gb); if (!sh->short_term_ref_pic_set_sps_flag) { - int pos = get_bits_left(gb); ret = ff_hevc_decode_short_term_rps(gb, s->avctx, &sh->slice_rps, s->ps.sps, 1); if (ret < 0) return ret; - sh->short_term_ref_pic_set_size = pos - get_bits_left(gb); sh->short_term_rps = &sh->slice_rps; } else { int numbits, rps_idx; @@ -567,13 +566,16 @@ static int hls_slice_header(HEVCContext *s) rps_idx = numbits > 0 ? get_bits(gb, numbits) : 0; sh->short_term_rps = &s->ps.sps->st_rps[rps_idx]; } + sh->short_term_ref_pic_set_size = pos - get_bits_left(gb); + pos = get_bits_left(gb); ret = decode_lt_rps(s, &sh->long_term_rps, gb); if (ret < 0) { av_log(s->avctx, AV_LOG_WARNING, "Invalid long term RPS.\n"); if (s->avctx->err_recognition & AV_EF_EXPLODE) return AVERROR_INVALIDDATA; } + sh->long_term_ref_pic_set_size = pos - get_bits_left(gb); if (s->ps.sps->sps_temporal_mvp_enabled_flag) sh->slice_temporal_mvp_enabled_flag = get_bits1(gb); diff --git a/libavcodec/hevc.h b/libavcodec/hevc.h index 62edcf258f..1860bf5728 100644 --- a/libavcodec/hevc.h +++ b/libavcodec/hevc.h @@ -559,6 +559,7 @@ typedef struct SliceHeader { int short_term_ref_pic_set_size; ShortTermRPS slice_rps; const ShortTermRPS *short_term_rps; + int long_term_ref_pic_set_size; LongTermRPS long_term_rps; unsigned int list_entry_lx[2][32];