fix[265e]:Fix the st refernce frame err in tsvc

This is a bug caused by the mark and use of ltr frames,
when presence of multiple short temporal refenence frame,
may lead to errors in reference relationships.

Change-Id: I1962d81e39b704086a51b4e4098ba3feb64c47c6
Signed-off-by: Yanjun Liao <yanjun.liao@rock-chips.com>
This commit is contained in:
Yanjun Liao 2024-07-24 15:47:54 +08:00 committed by Herman Chen
parent 74758e7ee9
commit 86cf93a028
2 changed files with 3 additions and 4 deletions

View File

@ -63,10 +63,10 @@ MPP_RET calc_ref_pic_set_idxl0(H265eDpb *dpb, H265eSlice *slice, RK_S32 ref_idx)
}
}
RpsList->m_RefPicListModification->m_RefPicSetIdxL0[0] = 0;
RpsList->m_RefPicListModification->m_RefPicSetIdxL0[0] = ref_idx;
for (i = 0; i < numPocLtCurr; i++) {
if (poc_idx == refPicSetLtCurr[i]->poc)
RpsList->m_RefPicListModification->m_RefPicSetIdxL0[0] = i;
RpsList->m_RefPicListModification->m_RefPicSetIdxL0[0] = rps->m_numberOfPictures - rps->num_long_term_pic + i;
}
return MPP_OK;

View File

@ -169,8 +169,7 @@ void h265e_slice_set_ref_list(H265eDpbFrm *frame_list, H265eSlice *slice)
for ( rIdx = 0; rIdx < slice->m_numRefIdx[0]; rIdx++) {
cIdx = slice->m_RefPicListModification.m_refPicListModificationFlagL0 ? slice->m_RefPicListModification.m_RefPicSetIdxL0[rIdx] : (RK_U32)rIdx % numPocTotalCurr;
mpp_assert(cIdx >= 0 && cIdx < numPocTotalCurr);
slice->m_refPicList[0][rIdx] = slice->m_RefPicListModification.m_refPicListModificationFlagL0 ?
rpsCurrList0[cIdx + numPocStCurr0] : rpsCurrList0[0];
slice->m_refPicList[0][rIdx] = rpsCurrList0[cIdx];
slice->m_bIsUsedAsLongTerm[0][rIdx] = (cIdx >= numPocStCurr0 + numPocStCurr1);
}