From 01154641ea74de1a5a300c43684a1d80358da1ac Mon Sep 17 00:00:00 2001 From: Yang Wang <wangyang.cs@bytedance.com> Date: Thu, 27 Apr 2023 11:28:46 +0000 Subject: [PATCH] Revert MR383 and fix --- source/Lib/CommonLib/InterPrediction.cpp | 15 +++++++++++++-- source/Lib/CommonLib/InterPrediction.h | 2 +- source/Lib/EncoderLib/EncCu.cpp | 24 +++--------------------- 3 files changed, 17 insertions(+), 24 deletions(-) diff --git a/source/Lib/CommonLib/InterPrediction.cpp b/source/Lib/CommonLib/InterPrediction.cpp index 7cc20f9cf..0464daad2 100644 --- a/source/Lib/CommonLib/InterPrediction.cpp +++ b/source/Lib/CommonLib/InterPrediction.cpp @@ -5652,7 +5652,7 @@ void InterPrediction::motionCompensationIbcGpm( CodingUnit &cu, MergeCtx &ibcGpm } #if JVET_AA0070_RRIBC -void InterPrediction::adjustIbcMergeRribcCand(PredictionUnit &pu, MergeCtx& mrgCtx, uint32_t startPos, uint32_t endPos) +void InterPrediction::adjustIbcMergeRribcCand(PredictionUnit &pu, MergeCtx& mrgCtx, uint32_t startPos, uint32_t endPos, bool* isSkipThisCand) { if (mrgCtx.numValidMergeCand <= 1) { @@ -5674,11 +5674,15 @@ void InterPrediction::adjustIbcMergeRribcCand(PredictionUnit &pu, MergeCtx& mrg for (uint32_t uiMergeCand = startPos; uiMergeCand < endPos; ++uiMergeCand) { uiCost = 0; + if (mrgCtx.mvFieldNeighbours[(uiMergeCand << 1) + 0].mv.hor == 0 && mrgCtx.mvFieldNeighbours[(uiMergeCand << 1) + 0].mv.ver == 0) + { + break; + } if (candNumNoRribc >= mrgCtx.numValidMergeCand) { break; } - if (mrgCtx.rribcFlipTypes[uiMergeCand] > 0 || (mrgCtx.mvFieldNeighbours[(uiMergeCand << 1) + 0].mv.hor == 0 && mrgCtx.mvFieldNeighbours[(uiMergeCand << 1) + 0].mv.ver == 0)) + if (mrgCtx.rribcFlipTypes[uiMergeCand] > 0) { uiCost = MAX_UINT - 1; if (noNeedSort && uiMergeCand < mrgCtx.numValidMergeCand) @@ -5696,6 +5700,13 @@ void InterPrediction::adjustIbcMergeRribcCand(PredictionUnit &pu, MergeCtx& mrg if (!noNeedSort) { updateIBCCandInfo(pu, mrgCtx, rdCandList, startPos, endPos); + if (isSkipThisCand) + { + for (int i = 0; i < mrgCtx.numValidMergeCand; i++) + { + isSkipThisCand[i] = isSkipThisCand[rdCandList[i]]; + } + } } } #endif diff --git a/source/Lib/CommonLib/InterPrediction.h b/source/Lib/CommonLib/InterPrediction.h index a97382d28..be20877b8 100644 --- a/source/Lib/CommonLib/InterPrediction.h +++ b/source/Lib/CommonLib/InterPrediction.h @@ -738,7 +738,7 @@ public: #if JVET_AC0112_IBC_GPM void motionCompensationIbcGpm(CodingUnit &cu, MergeCtx &ibcGpmMrgCtx, IntraPrediction* pcIntraPred); #if JVET_AA0070_RRIBC - void adjustIbcMergeRribcCand(PredictionUnit &pu, MergeCtx& mrgCtx, uint32_t startPos, uint32_t endPos); + void adjustIbcMergeRribcCand(PredictionUnit &pu, MergeCtx& mrgCtx, uint32_t startPos, uint32_t endPos, bool *isSkipThisCand = NULL); #endif #endif diff --git a/source/Lib/EncoderLib/EncCu.cpp b/source/Lib/EncoderLib/EncCu.cpp index 7518c89f2..97819cdd4 100644 --- a/source/Lib/EncoderLib/EncCu.cpp +++ b/source/Lib/EncoderLib/EncCu.cpp @@ -11709,12 +11709,8 @@ void EncCu::xCheckRDCostIBCModeMerge2Nx2N(CodingStructure *&tempCS, CodingStruct { mergeCtxIbcGeo = mergeCtx; #if JVET_AA0070_RRIBC - m_pcInterSearch->adjustIbcMergeRribcCand(pu, mergeCtxIbcGeo, 0, IBC_MRG_MAX_NUM_CANDS_MEM); + m_pcInterSearch->adjustIbcMergeRribcCand(pu, mergeCtxIbcGeo, 0, IBC_MRG_MAX_NUM_CANDS_MEM, isSkipThisCand); #endif - for (int i = 0; i < mergeCtx.numValidMergeCand; i++) - { - isSkipThisCand[i] = false; - } for (int i = 0; i < skipCandNum[mergeCtx.numValidMergeCand - 1]; i++) { isSkipThisCand[mergeCtx.numValidMergeCand - 1 - i] = true; @@ -11743,17 +11739,7 @@ void EncCu::xCheckRDCostIBCModeMerge2Nx2N(CodingStructure *&tempCS, CodingStruct if (pu.bv == tempBv) { numValidBv--; -#if JVET_AC0112_IBC_GPM - if (testIbcGpm) - { - ibcGpmCandNumValid++; - distParamSad.cur.buf = piRefSrch + refStride * pu.bv.getVer() + pu.bv.getHor(); - distParamSad.cur.stride = refBuf.stride; - ibcPredBuf[mergeCtx.numValidMergeCand + mergeCandIbcGpm] = m_acMergeBuffer[mergeCtx.numValidMergeCand + mergeCandIbcGpm].getBuf(localUnitArea); - ibcPredBuf[mergeCtx.numValidMergeCand + mergeCandIbcGpm].bufs[COMPONENT_Y].copyFrom(distParamSad.cur); - sadWholeBlk[mergeCtx.numValidMergeCand + mergeCandIbcGpm] = distParamSad.distFunc(distParamSad); - } -#endif + isSkipThisCand[mergeCtx.numValidMergeCand + mergeCandIbcGpm] = true; continue; } @@ -11941,12 +11927,8 @@ void EncCu::xCheckRDCostIBCModeMerge2Nx2N(CodingStructure *&tempCS, CodingStruct { mergeCtxTmIbcGeo = mergeCtxTm; #if JVET_AA0070_RRIBC - m_pcInterSearch->adjustIbcMergeRribcCand(pu, mergeCtxTmIbcGeo, 0, IBC_MRG_MAX_NUM_CANDS_MEM); + m_pcInterSearch->adjustIbcMergeRribcCand(pu, mergeCtxTmIbcGeo, 0, IBC_MRG_MAX_NUM_CANDS_MEM, isSkipThisCand + mergeCtx.numValidMergeCand); #endif - for (int i = 0; i < mergeCtxTmIbcGeo.numValidMergeCand; i++) - { - isSkipThisCand[mergeCtx.numValidMergeCand + i] = false; - } for (int i = 0; i < skipCandNumTm[mergeCtx.numValidMergeCand + mergeCtxTm.numValidMergeCand - 1]; i++) { isSkipThisCand[mergeCtx.numValidMergeCand + mergeCtxTm.numValidMergeCand - 1 - i] = true; -- GitLab