diff --git a/source/Lib/CommonLib/CommonDef.h b/source/Lib/CommonLib/CommonDef.h index 5c17fe4b1b18966d083e988200eec812d0c07723..60c11d9cefdd51274946e827dc39bf345ada3c40 100644 --- a/source/Lib/CommonLib/CommonDef.h +++ b/source/Lib/CommonLib/CommonDef.h @@ -1025,6 +1025,9 @@ static const int IBC_FAST_METHOD_NOINTRA_IBCCBF0 = 0x01; static const int IBC_FAST_METHOD_BUFFERBV = 0X02; static const int IBC_FAST_METHOD_ADAPTIVE_SEARCHRANGE = 0X04; #if JVET_AA0061_IBC_MBVD +#if !JVET_W0090_ARMC_TM && !JVET_Z0061_TM_OBMC && !JVET_Z0056_GPM_SPLIT_MODE_REORDERING +static const int AML_MERGE_TEMPLATE_SIZE = 1; +#endif static const int IBC_MBVD_BASE_NUM = 5; static const int IBC_MBVD_STEP_NUM = 20; // number of distance offset static const int IBC_MBVD_OFFSET_DIR = 4; // (+, 0); (-, 0); (0, +); (0, -); diff --git a/source/Lib/CommonLib/InterPrediction.cpp b/source/Lib/CommonLib/InterPrediction.cpp index ac14700e4f6ec0d3a6cadace2f8399fba9b0ddfc..e946c262c235e2c815268b748e25816dd4e6f570 100644 --- a/source/Lib/CommonLib/InterPrediction.cpp +++ b/source/Lib/CommonLib/InterPrediction.cpp @@ -236,7 +236,7 @@ InterPrediction::InterPrediction() CHECK(mvSearchIdx_bilMrg != (2 * BDMVR_INTME_RANGE + 1) * (2 * BDMVR_INTME_RANGE + 1), "this is wrong, mvSearchIdx_bilMrg != (2 * BDMVR_INTME_RANGE + 1) * (2 * BDMVR_INTME_RANGE + 1)"); #endif -#if JVET_W0090_ARMC_TM || JVET_Z0056_GPM_SPLIT_MODE_REORDERING || JVET_Z0061_TM_OBMC +#if JVET_W0090_ARMC_TM || JVET_Z0056_GPM_SPLIT_MODE_REORDERING || JVET_Z0061_TM_OBMC || JVET_AA0061_IBC_MBVD for (uint32_t ch = 0; ch < MAX_NUM_COMPONENT; ch++) { for (uint32_t tmplt = 0; tmplt < 2; tmplt++) @@ -370,7 +370,7 @@ void InterPrediction::destroy() #if MULTI_HYP_PRED m_additionalHypothesisStorage.destroy(); #endif -#if JVET_W0090_ARMC_TM || JVET_Z0056_GPM_SPLIT_MODE_REORDERING || JVET_Z0061_TM_OBMC +#if JVET_W0090_ARMC_TM || JVET_Z0056_GPM_SPLIT_MODE_REORDERING || JVET_Z0061_TM_OBMC || JVET_AA0061_IBC_MBVD for (uint32_t ch = 0; ch < MAX_NUM_COMPONENT; ch++) { for (uint32_t tmplt = 0; tmplt < 2; tmplt++) @@ -555,7 +555,7 @@ void InterPrediction::init( RdCost* pcRdCost, ChromaFormat chromaFormatIDC, cons m_pcLICRecAboveTemplate = (Pel*)xMalloc(Pel, MAX_CU_SIZE); } #endif -#if JVET_W0090_ARMC_TM || JVET_Z0056_GPM_SPLIT_MODE_REORDERING || JVET_Z0061_TM_OBMC +#if JVET_W0090_ARMC_TM || JVET_Z0056_GPM_SPLIT_MODE_REORDERING || JVET_Z0061_TM_OBMC || JVET_AA0061_IBC_MBVD for (uint32_t ch = 0; ch < MAX_NUM_COMPONENT; ch++) { for (uint32_t tmplt = 0; tmplt < 2; tmplt++) @@ -6006,6 +6006,180 @@ void InterPrediction::sortIbcMergeMbvdCandidates(PredictionUnit &pu, MergeCtx& } #endif +#if JVET_AA0061_IBC_MBVD || (JVET_W0090_ARMC_TM && JVET_Y0058_IBC_LIST_MODIFY) +bool InterPrediction::xAMLIBCGetCurBlkTemplate(PredictionUnit& pu, int nCurBlkWidth, int nCurBlkHeight) +{ + m_bAMLTemplateAvailabe[0] = xAMLIsTopTempAvailable(pu); + m_bAMLTemplateAvailabe[1] = xAMLIsLeftTempAvailable(pu); + + if (!m_bAMLTemplateAvailabe[0] && !m_bAMLTemplateAvailabe[1]) + { + return false; + } + + const Picture& currPic = *pu.cs->picture; + const CPelBuf recBuf = currPic.getRecoBuf(pu.cs->picture->blocks[COMPONENT_Y]); + /* std::vector<Pel>& invLUT = m_pcReshape->getInvLUT();*/ + + if (m_bAMLTemplateAvailabe[0]) + { + const Pel* rec = recBuf.bufAt(pu.blocks[COMPONENT_Y].pos().offset(0, -AML_MERGE_TEMPLATE_SIZE)); + PelBuf pcYBuf = PelBuf(m_acYuvCurAMLTemplate[0][0], nCurBlkWidth, AML_MERGE_TEMPLATE_SIZE); + Pel* pcY = pcYBuf.bufAt(0, 0); + for (int k = 0; k < nCurBlkWidth; k++) + { + for (int l = 0; l < AML_MERGE_TEMPLATE_SIZE; l++) + { + int recVal = rec[k + l * recBuf.stride]; + pcY[k + l * nCurBlkWidth] = recVal; + } + } + } + + if (m_bAMLTemplateAvailabe[1]) + { + PelBuf pcYBuf = PelBuf(m_acYuvCurAMLTemplate[1][0], AML_MERGE_TEMPLATE_SIZE, nCurBlkHeight); + Pel* pcY = pcYBuf.bufAt(0, 0); + const Pel* rec = recBuf.bufAt(pu.blocks[COMPONENT_Y].pos().offset(-AML_MERGE_TEMPLATE_SIZE, 0)); + for (int k = 0; k < nCurBlkHeight; k++) + { + for (int l = 0; l < AML_MERGE_TEMPLATE_SIZE; l++) + { + int recVal = rec[recBuf.stride * k + l]; + pcY[AML_MERGE_TEMPLATE_SIZE * k + l] = recVal; + } + } + } + + return true; +} + +void InterPrediction::getIBCAMLRefTemplate(PredictionUnit &pu, int nCurBlkWidth, int nCurBlkHeight) +{ + Mv mvCurr; + mvCurr = pu.bv; + const int lumaShift = 2 + MV_FRACTIONAL_BITS_DIFF; + const int horShift = (lumaShift + ::getComponentScaleX(COMPONENT_Y, pu.chromaFormat)); + const int verShift = (lumaShift + ::getComponentScaleY(COMPONENT_Y, pu.chromaFormat)); + const Picture& currPic = *pu.cs->picture; + const CPelBuf recBuf = currPic.getRecoBuf(pu.cs->picture->blocks[COMPONENT_Y]); + /* std::vector<Pel>& invLUT = m_pcReshape->getInvLUT();*/ + if (m_bAMLTemplateAvailabe[0]) + { + Mv mvTop(0, -AML_MERGE_TEMPLATE_SIZE); +#if JVET_AA0070_RRIBC + if (pu.cu->rribcFlipType == 2) + { + mvTop.setVer(nCurBlkHeight); + } +#endif + mvTop += mvCurr; + + MotionInfo miTop; + miTop.mv[0] = Mv(mvTop.hor <<horShift , mvTop.ver<< verShift); + miTop.refIdx[0] = MAX_NUM_REF; +#if JVET_AA0070_RRIBC + if (pu.cu->rribcFlipType == 2) + { + if (!PU::checkIsIBCCandidateValid(pu, miTop, true, true)) + { + mvTop.setVer(mvCurr.getVer() + nCurBlkHeight - AML_MERGE_TEMPLATE_SIZE); + } + } + else +#endif + if (!PU::checkIsIBCCandidateValid(pu, miTop)) + { + mvTop = mvCurr; + } + const Pel* rec = recBuf.bufAt(pu.blocks[COMPONENT_Y].pos().offset(mvTop.hor, mvTop.ver)); + PelBuf pcYBuf = PelBuf(m_acYuvRefAMLTemplate[0][0], nCurBlkWidth, AML_MERGE_TEMPLATE_SIZE); + Pel* pcY = pcYBuf.bufAt(0, 0); + for (int k = 0; k < nCurBlkWidth; k++) + { + for (int l = 0; l < AML_MERGE_TEMPLATE_SIZE; l++) + { +#if JVET_AA0070_RRIBC + int recVal; + if (pu.cu->rribcFlipType == 0) + { + recVal = rec[k + l * recBuf.stride]; + } + else if (pu.cu->rribcFlipType == 1) + { + recVal = rec[nCurBlkWidth - 1 - k + l * recBuf.stride]; + } + else + { + recVal = rec[k + (AML_MERGE_TEMPLATE_SIZE - 1 - l) * recBuf.stride]; + } +#else + int recVal = rec[k + l * recBuf.stride]; +#endif + pcY[k + l * nCurBlkWidth] = recVal; + } + } + } + + if (m_bAMLTemplateAvailabe[1]) + { + Mv mvLeft(-AML_MERGE_TEMPLATE_SIZE, 0); +#if JVET_AA0070_RRIBC + if (pu.cu->rribcFlipType == 1) + { + mvLeft.setHor(nCurBlkWidth); + } +#endif + mvLeft += mvCurr; + + MotionInfo miLeft; + miLeft.mv[0] = Mv(mvLeft.hor <<horShift , mvLeft.ver<< verShift); + miLeft.refIdx[0] = MAX_NUM_REF; +#if JVET_AA0070_RRIBC + if (pu.cu->rribcFlipType == 1) + { + if (!PU::checkIsIBCCandidateValid(pu, miLeft, true, false)) + { + mvLeft.setHor(mvCurr.getHor() + nCurBlkWidth - AML_MERGE_TEMPLATE_SIZE); + } + } + else +#endif + if (!PU::checkIsIBCCandidateValid(pu, miLeft)) + { + mvLeft = mvCurr; + } + PelBuf pcYBuf = PelBuf(m_acYuvRefAMLTemplate[1][0], AML_MERGE_TEMPLATE_SIZE, nCurBlkHeight); + Pel* pcY = pcYBuf.bufAt(0, 0); + const Pel* rec = recBuf.bufAt(pu.blocks[COMPONENT_Y].pos().offset( mvLeft.hor, mvLeft.ver)); + for (int k = 0; k < nCurBlkHeight; k++) + { + for (int l = 0; l < AML_MERGE_TEMPLATE_SIZE; l++) + { +#if JVET_AA0070_RRIBC + int recVal; + if (pu.cu->rribcFlipType == 0) + { + recVal = rec[recBuf.stride * k + l]; + } + else if (pu.cu->rribcFlipType == 1) + { + recVal = rec[recBuf.stride * k + AML_MERGE_TEMPLATE_SIZE - 1 - l]; + } + else + { + recVal = rec[recBuf.stride * (nCurBlkHeight - 1 - k) + l]; + } +#else + int recVal = rec[recBuf.stride * k + l]; +#endif + pcY[AML_MERGE_TEMPLATE_SIZE * k + l] = recVal; + } + } + } +} +#endif + #if JVET_J0090_MEMORY_BANDWITH_MEASURE void InterPrediction::cacheAssign( CacheModel *cache ) { @@ -7678,7 +7852,7 @@ void InterPrediction::updateCandInOneCandidateGroup(MergeCtx& mrgCtx, uint32_t* #endif #endif -#if JVET_W0090_ARMC_TM || JVET_Z0056_GPM_SPLIT_MODE_REORDERING || JVET_Z0061_TM_OBMC +#if JVET_W0090_ARMC_TM || JVET_Z0056_GPM_SPLIT_MODE_REORDERING || JVET_Z0061_TM_OBMC || JVET_AA0061_IBC_MBVD || JVET_Y0058_IBC_LIST_MODIFY bool InterPrediction::xAMLGetCurBlkTemplate(PredictionUnit& pu, int nCurBlkWidth, int nCurBlkHeight) { m_bAMLTemplateAvailabe[0] = xAMLIsTopTempAvailable(pu); @@ -8860,176 +9034,6 @@ void InterPrediction::updateIBCCandInfo(PredictionUnit &pu, MergeCtx& mrgCtx, u #endif } } -bool InterPrediction::xAMLIBCGetCurBlkTemplate(PredictionUnit& pu, int nCurBlkWidth, int nCurBlkHeight) -{ - m_bAMLTemplateAvailabe[0] = xAMLIsTopTempAvailable(pu); - m_bAMLTemplateAvailabe[1] = xAMLIsLeftTempAvailable(pu); - - if (!m_bAMLTemplateAvailabe[0] && !m_bAMLTemplateAvailabe[1]) - { - return false; - } - - const Picture& currPic = *pu.cs->picture; - const CPelBuf recBuf = currPic.getRecoBuf(pu.cs->picture->blocks[COMPONENT_Y]); - /* std::vector<Pel>& invLUT = m_pcReshape->getInvLUT();*/ - - if (m_bAMLTemplateAvailabe[0]) - { - const Pel* rec = recBuf.bufAt(pu.blocks[COMPONENT_Y].pos().offset(0, -AML_MERGE_TEMPLATE_SIZE)); - PelBuf pcYBuf = PelBuf(m_acYuvCurAMLTemplate[0][0], nCurBlkWidth, AML_MERGE_TEMPLATE_SIZE); - Pel* pcY = pcYBuf.bufAt(0, 0); - for (int k = 0; k < nCurBlkWidth; k++) - { - for (int l = 0; l < AML_MERGE_TEMPLATE_SIZE; l++) - { - int recVal = rec[k + l * recBuf.stride]; - pcY[k + l * nCurBlkWidth] = recVal; - } - } - } - - if (m_bAMLTemplateAvailabe[1]) - { - PelBuf pcYBuf = PelBuf(m_acYuvCurAMLTemplate[1][0], AML_MERGE_TEMPLATE_SIZE, nCurBlkHeight); - Pel* pcY = pcYBuf.bufAt(0, 0); - const Pel* rec = recBuf.bufAt(pu.blocks[COMPONENT_Y].pos().offset(-AML_MERGE_TEMPLATE_SIZE, 0)); - for (int k = 0; k < nCurBlkHeight; k++) - { - for (int l = 0; l < AML_MERGE_TEMPLATE_SIZE; l++) - { - int recVal = rec[recBuf.stride * k + l]; - pcY[AML_MERGE_TEMPLATE_SIZE * k + l] = recVal; - } - } - } - - return true; -} -void InterPrediction::getIBCAMLRefTemplate(PredictionUnit &pu, int nCurBlkWidth, int nCurBlkHeight) -{ - Mv mvCurr; - mvCurr = pu.bv; - const int lumaShift = 2 + MV_FRACTIONAL_BITS_DIFF; - const int horShift = (lumaShift + ::getComponentScaleX(COMPONENT_Y, pu.chromaFormat)); - const int verShift = (lumaShift + ::getComponentScaleY(COMPONENT_Y, pu.chromaFormat)); - const Picture& currPic = *pu.cs->picture; - const CPelBuf recBuf = currPic.getRecoBuf(pu.cs->picture->blocks[COMPONENT_Y]); - /* std::vector<Pel>& invLUT = m_pcReshape->getInvLUT();*/ - if (m_bAMLTemplateAvailabe[0]) - { - Mv mvTop(0, -AML_MERGE_TEMPLATE_SIZE); -#if JVET_AA0070_RRIBC - if (pu.cu->rribcFlipType == 2) - { - mvTop.setVer(nCurBlkHeight); - } -#endif - mvTop += mvCurr; - - MotionInfo miTop; - miTop.mv[0] = Mv(mvTop.hor <<horShift , mvTop.ver<< verShift); - miTop.refIdx[0] = MAX_NUM_REF; -#if JVET_AA0070_RRIBC - if (pu.cu->rribcFlipType == 2) - { - if (!PU::checkIsIBCCandidateValid(pu, miTop, true, true)) - { - mvTop.setVer(mvCurr.getVer() + nCurBlkHeight - AML_MERGE_TEMPLATE_SIZE); - } - } - else -#endif - if (!PU::checkIsIBCCandidateValid(pu, miTop)) - { - mvTop = mvCurr; - } - const Pel* rec = recBuf.bufAt(pu.blocks[COMPONENT_Y].pos().offset(mvTop.hor, mvTop.ver)); - PelBuf pcYBuf = PelBuf(m_acYuvRefAMLTemplate[0][0], nCurBlkWidth, AML_MERGE_TEMPLATE_SIZE); - Pel* pcY = pcYBuf.bufAt(0, 0); - for (int k = 0; k < nCurBlkWidth; k++) - { - for (int l = 0; l < AML_MERGE_TEMPLATE_SIZE; l++) - { -#if JVET_AA0070_RRIBC - int recVal; - if (pu.cu->rribcFlipType == 0) - { - recVal = rec[k + l * recBuf.stride]; - } - else if (pu.cu->rribcFlipType == 1) - { - recVal = rec[nCurBlkWidth - 1 - k + l * recBuf.stride]; - } - else - { - recVal = rec[k + (AML_MERGE_TEMPLATE_SIZE - 1 - l) * recBuf.stride]; - } -#else - int recVal = rec[k + l * recBuf.stride]; -#endif - pcY[k + l * nCurBlkWidth] = recVal; - } - } - } - - if (m_bAMLTemplateAvailabe[1]) - { - Mv mvLeft(-AML_MERGE_TEMPLATE_SIZE, 0); -#if JVET_AA0070_RRIBC - if (pu.cu->rribcFlipType == 1) - { - mvLeft.setHor(nCurBlkWidth); - } -#endif - mvLeft += mvCurr; - - MotionInfo miLeft; - miLeft.mv[0] = Mv(mvLeft.hor <<horShift , mvLeft.ver<< verShift); - miLeft.refIdx[0] = MAX_NUM_REF; -#if JVET_AA0070_RRIBC - if (pu.cu->rribcFlipType == 1) - { - if (!PU::checkIsIBCCandidateValid(pu, miLeft, true, false)) - { - mvLeft.setHor(mvCurr.getHor() + nCurBlkWidth - AML_MERGE_TEMPLATE_SIZE); - } - } - else -#endif - if (!PU::checkIsIBCCandidateValid(pu, miLeft)) - { - mvLeft = mvCurr; - } - PelBuf pcYBuf = PelBuf(m_acYuvRefAMLTemplate[1][0], AML_MERGE_TEMPLATE_SIZE, nCurBlkHeight); - Pel* pcY = pcYBuf.bufAt(0, 0); - const Pel* rec = recBuf.bufAt(pu.blocks[COMPONENT_Y].pos().offset( mvLeft.hor, mvLeft.ver)); - for (int k = 0; k < nCurBlkHeight; k++) - { - for (int l = 0; l < AML_MERGE_TEMPLATE_SIZE; l++) - { -#if JVET_AA0070_RRIBC - int recVal; - if (pu.cu->rribcFlipType == 0) - { - recVal = rec[recBuf.stride * k + l]; - } - else if (pu.cu->rribcFlipType == 1) - { - recVal = rec[recBuf.stride * k + AML_MERGE_TEMPLATE_SIZE - 1 - l]; - } - else - { - recVal = rec[recBuf.stride * (nCurBlkHeight - 1 - k) + l]; - } -#else - int recVal = rec[recBuf.stride * k + l]; -#endif - pcY[AML_MERGE_TEMPLATE_SIZE * k + l] = recVal; - } - } - } -} #endif #if JVET_Z0075_IBC_HMVP_ENLARGE diff --git a/source/Lib/CommonLib/InterPrediction.h b/source/Lib/CommonLib/InterPrediction.h index 5a2cb82be53edfc2aab433ac48cacb21717583be..59434fea3d9f48789ee620a01bf861b45419e0fc 100644 --- a/source/Lib/CommonLib/InterPrediction.h +++ b/source/Lib/CommonLib/InterPrediction.h @@ -329,7 +329,7 @@ protected: MotionInfo m_SubPuMiBuf[(MAX_CU_SIZE * MAX_CU_SIZE) >> (MIN_CU_LOG2 << 1)]; -#if JVET_W0090_ARMC_TM || JVET_Z0056_GPM_SPLIT_MODE_REORDERING || JVET_Z0061_TM_OBMC +#if JVET_W0090_ARMC_TM || JVET_Z0056_GPM_SPLIT_MODE_REORDERING || JVET_Z0061_TM_OBMC || JVET_AA0061_IBC_MBVD Pel* m_acYuvCurAMLTemplate[2][MAX_NUM_COMPONENT]; //0: top, 1: left bool m_bAMLTemplateAvailabe[2]; Pel* m_acYuvRefAboveTemplate[2][MAX_NUM_COMPONENT]; //0: list0, 1: list1 @@ -512,6 +512,10 @@ public: #if JVET_AA0061_IBC_MBVD void sortIbcMergeMbvdCandidates(PredictionUnit &pu, MergeCtx& mrgCtx, uint32_t * ibcMbvdLUT, uint32_t * ibcMbvdValidNum, int ibcMbvdIdx= -1); #endif +#if JVET_AA0061_IBC_MBVD || (JVET_W0090_ARMC_TM && JVET_Y0058_IBC_LIST_MODIFY) + bool xAMLIBCGetCurBlkTemplate(PredictionUnit& pu, int nCurBlkWidth, int nCurBlkHeight); + void getIBCAMLRefTemplate(PredictionUnit &pu, int nCurBlkWidth, int nCurBlkHeight); +#endif #if JVET_Y0067_ENHANCED_MMVD_MVD_SIGN_PRED #if JVET_Z0054_BLK_REF_PIC_REORDER void deriveMVDcand(const PredictionUnit& pu, RefPicList eRefPicList, std::vector<Mv>& cMvdCandList); @@ -563,7 +567,7 @@ public: #if JVET_W0090_ARMC_TM void adjustInterMergeCandidates(PredictionUnit &pu, MergeCtx& mrgCtx, int mrgCandIdx = -1); #endif -#if JVET_W0090_ARMC_TM || JVET_Z0056_GPM_SPLIT_MODE_REORDERING || JVET_Z0061_TM_OBMC +#if JVET_W0090_ARMC_TM || JVET_Z0056_GPM_SPLIT_MODE_REORDERING || JVET_Z0061_TM_OBMC || JVET_AA0061_IBC_MBVD || JVET_Y0058_IBC_LIST_MODIFY bool xAMLGetCurBlkTemplate(PredictionUnit& pu, int nCurBlkWidth, int nCurBlkHeight); bool xAMLIsTopTempAvailable(PredictionUnit& pu); bool xAMLIsLeftTempAvailable(PredictionUnit& pu); @@ -639,14 +643,13 @@ public: #if JVET_Y0058_IBC_LIST_MODIFY void adjustIBCMergeCandidates(PredictionUnit &pu, MergeCtx& mrgCtx, int mrgCandIdx = -1); void updateIBCCandInfo(PredictionUnit &pu, MergeCtx& mrgCtx, uint32_t(*RdCandList)[IBC_MRG_MAX_NUM_CANDS], int mrgCandIdx = -1); - bool xAMLIBCGetCurBlkTemplate(PredictionUnit& pu, int nCurBlkWidth, int nCurBlkHeight); - void getIBCAMLRefTemplate(PredictionUnit &pu, int nCurBlkWidth, int nCurBlkHeight); #endif #if JVET_Z0075_IBC_HMVP_ENLARGE void adjustIBCMergeCandidates(PredictionUnit &pu, MergeCtx& mrgCtx, uint32_t startPos,uint32_t endPos); void updateIBCCandInfo(PredictionUnit &pu, MergeCtx& mrgCtx, uint32_t* RdCandList, uint32_t startPos,uint32_t endPos); #endif #endif + #if JVET_Z0056_GPM_SPLIT_MODE_REORDERING template <uint8_t partIdx, bool useDefaultPelBuffer = true> void fillPartGPMRefTemplate(PredictionUnit &pu, Pel* bufTop = nullptr, Pel* bufLeft = nullptr) diff --git a/source/Lib/DecoderLib/DecCu.cpp b/source/Lib/DecoderLib/DecCu.cpp index f4875f0d2c302bb1a4129fc9d80a869c6faf4d69..bad189a68cc6b87d409563cf8a444227556fd74b 100644 --- a/source/Lib/DecoderLib/DecCu.cpp +++ b/source/Lib/DecoderLib/DecCu.cpp @@ -1972,7 +1972,13 @@ void DecCu::xDeriveCUMV( CodingUnit &cu ) { int fPosIBCBaseIdx = pu.ibcMbvdMergeIdx / IBC_MBVD_MAX_REFINE_NUM; PU::getIBCMergeCandidates(pu, mrgCtx); +#if JVET_Y0058_IBC_LIST_MODIFY && JVET_W0090_ARMC_TM +#if JVET_Z0075_IBC_HMVP_ENLARGE m_pcInterPred->adjustIBCMergeCandidates(pu, mrgCtx, 0, IBC_MRG_MAX_NUM_CANDS_MEM); +#else + m_pcInterPred->adjustIBCMergeCandidates(pu, mrgCtx); +#endif +#endif PU::getIbcMbvdMergeCandidates(pu, mrgCtx, fPosIBCBaseIdx + 1); diff --git a/source/Lib/EncoderLib/InterSearch.cpp b/source/Lib/EncoderLib/InterSearch.cpp index 890858ebdf442acb9743ce98bc47fa2bb28972c0..f30b307361332137be8e94962346c41b101758df 100644 --- a/source/Lib/EncoderLib/InterSearch.cpp +++ b/source/Lib/EncoderLib/InterSearch.cpp @@ -2137,7 +2137,7 @@ bool InterSearch::predIBCSearch(CodingUnit& cu, Partitioner& partitioner, const // prepare imv = 2 accuracy predictor info pu.cu->imv = 2; -#if JVET_Z0084_IBC_TM && TM_AMVP +#if JVET_Z0084_IBC_TM && IBC_TM_AMVP PU::fillIBCMvpCand(pu, amvpInfo4Pel[i], this); #else PU::fillIBCMvpCand(pu, amvpInfo4Pel[i]); @@ -2145,7 +2145,7 @@ bool InterSearch::predIBCSearch(CodingUnit& cu, Partitioner& partitioner, const // prepare imv = 0 accuracy predictor info pu.cu->imv = 0; -#if JVET_Z0084_IBC_TM && TM_AMVP +#if JVET_Z0084_IBC_TM && IBC_TM_AMVP PU::fillIBCMvpCand(pu, amvpInfo[i], this); #else PU::fillIBCMvpCand(pu, amvpInfo[i]);