diff --git a/libavcodec/evc_parse.c b/libavcodec/evc_parse.c index d45f703e1c..095598e940 100644 --- a/libavcodec/evc_parse.c +++ b/libavcodec/evc_parse.c @@ -441,7 +441,7 @@ static int evc_parse_slice_header(EVCParserContext *ctx, EVCParserSliceHeader *s if(!pps) return AVERROR_INVALIDDATA; - sps = ctx->sps[slice_pic_parameter_set_id]; + sps = ctx->sps[pps->pps_seq_parameter_set_id]; if(!sps) return AVERROR_INVALIDDATA; @@ -654,7 +654,8 @@ int ff_evc_parse_nal_unit(EVCParserContext *ctx, const uint8_t *buf, int buf_siz case EVC_IDR_NUT: // Coded slice of a IDR or non-IDR picture case EVC_NOIDR_NUT: { EVCParserSliceHeader sh; - EVCParserSPS *sps; + const EVCParserSPS *sps; + const EVCParserPPS *pps; int ret; ret = evc_parse_slice_header(ctx, &sh, data, nalu_size); @@ -685,9 +686,11 @@ int ff_evc_parse_nal_unit(EVCParserContext *ctx, const uint8_t *buf, int buf_siz // POC (picture order count of the current picture) derivation // @see ISO/IEC 23094-1:2020(E) 8.3.1 Decoding process for picture order count - sps = ctx->sps[sh.slice_pic_parameter_set_id]; + pps = ctx->pps[sh.slice_pic_parameter_set_id]; + sps = ctx->sps[pps->pps_seq_parameter_set_id]; + av_assert0(sps && pps); - if (sps && sps->sps_pocs_flag) { + if (sps->sps_pocs_flag) { int PicOrderCntMsb = 0; ctx->poc.prevPicOrderCntVal = ctx->poc.PicOrderCntVal;