From c52b8783daca1c9c71ce07e08a93f8fccce53dcd Mon Sep 17 00:00:00 2001 From: Chun-Chi Chen <chunchic@qti.qualcomm.com> Date: Mon, 11 Jul 2022 05:23:34 +0000 Subject: [PATCH] Fix: Compilation error when TM_MRG=0 or TM_AMVP=0 and redundant computation when --AltGPMSplitModeCode=0 --- source/Lib/CommonLib/UnitTools.cpp | 12 +++++++++++- source/Lib/CommonLib/UnitTools.h | 4 +++- source/Lib/DecoderLib/DecCu.cpp | 8 +++++++- source/Lib/EncoderLib/EncCu.cpp | 11 ++++++++--- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/source/Lib/CommonLib/UnitTools.cpp b/source/Lib/CommonLib/UnitTools.cpp index 0d0562054..7a296cad1 100644 --- a/source/Lib/CommonLib/UnitTools.cpp +++ b/source/Lib/CommonLib/UnitTools.cpp @@ -2674,7 +2674,7 @@ uint32_t PU::getBDMVRMvdThreshold(const PredictionUnit &pu) } #endif -#if TM_MRG +#if TM_MRG || TM_AMVP uint32_t PU::getTMMvdThreshold(const PredictionUnit &pu) { uint32_t numPixels = pu.lwidth() * pu.lheight(); @@ -2691,7 +2691,9 @@ uint32_t PU::getTMMvdThreshold(const PredictionUnit &pu) return 4 << MV_FRACTIONAL_BITS_INTERNAL; } } +#endif +#if TM_MRG int PU::reorderInterMergeCandidates(const PredictionUnit &pu, MergeCtx& mrgCtx, int numCand, uint32_t mvdSimilarityThresh) { Slice& slice = *pu.cu->slice; @@ -4999,7 +5001,9 @@ void PU::getTmvpMergeCand(const PredictionUnit &pu, MergeCtx& mrgCtx) const CodingStructure &cs = *pu.cs; const Slice &slice = *pu.cs->slice; +#if TM_MRG const uint32_t mvdSimilarityThresh = 1; +#endif const uint32_t maxNumMergeCand = NUM_TMVP_CANDS; for (uint32_t ui = 0; ui < maxNumMergeCand; ++ui) { @@ -5266,7 +5270,9 @@ void PU::getNonAdjacentMergeCand(const PredictionUnit &pu, MergeCtx& mrgCtx) const CodingStructure &cs = *pu.cs; const Slice &slice = *pu.cs->slice; +#if TM_MRG const uint32_t mvdSimilarityThresh = getBDMVRMvdThreshold(pu); +#endif const uint32_t maxNumMergeCand = NUM_NON_ADJ_CANDS; for (uint32_t ui = 0; ui < maxNumMergeCand; ++ui) @@ -6043,13 +6049,17 @@ void PU::fillIBCMvpCand(PredictionUnit &pu, AMVPInfo &amvpInfo) #if JVET_Z0084_IBC_TM && TM_AMVP pInfo->maxSimilarityThreshold = (pu.cs->sps->getUseDMVDMode() && pcInter) ? PU::getTMMvdThreshold(pu) : 1; +#if TM_MRG pu.tmMergeFlag = true; +#endif #if JVET_Z0075_IBC_HMVP_ENLARGE PU::getIBCMergeCandidates(pu, mergeCtx, pu.cs->sps->getMaxNumIBCMergeCand()); #else PU::getIBCMergeCandidates(pu, mergeCtx); #endif +#if TM_MRG pu.tmMergeFlag = false; +#endif int candIdx = 0; while ((pInfo->numCand < AMVP_MAX_NUM_CANDS_MEM) && (candIdx < mergeCtx.numValidMergeCand)) diff --git a/source/Lib/CommonLib/UnitTools.h b/source/Lib/CommonLib/UnitTools.h index aff0bd881..9c318d7a9 100644 --- a/source/Lib/CommonLib/UnitTools.h +++ b/source/Lib/CommonLib/UnitTools.h @@ -173,8 +173,10 @@ namespace PU #if MULTI_PASS_DMVR || JVET_W0097_GPM_MMVD_TM uint32_t getBDMVRMvdThreshold (const PredictionUnit &pu); #endif -#if TM_MRG +#if TM_MRG || TM_AMVP uint32_t getTMMvdThreshold (const PredictionUnit &pu); +#endif +#if TM_MRG int reorderInterMergeCandidates(const PredictionUnit &pu, MergeCtx& mrgCtx, int numCand, uint32_t mvdSimilarityThresh ); #endif void getInterMergeCandidates (const PredictionUnit &pu, MergeCtx& mrgCtx, diff --git a/source/Lib/DecoderLib/DecCu.cpp b/source/Lib/DecoderLib/DecCu.cpp index b1ff32542..6abca8448 100644 --- a/source/Lib/DecoderLib/DecCu.cpp +++ b/source/Lib/DecoderLib/DecCu.cpp @@ -1976,7 +1976,11 @@ void DecCu::xDeriveCUMV( CodingUnit &cu ) if (tplAvail) { #if JVET_Z0102_NO_ARMC_FOR_ZERO_CAND - m_pcInterPred->adjustMergeCandidates(pu, mrgCtx, pu.tmMergeFlag ? pu.cs->sps->getMaxNumTMMergeCand() : pu.cs->sps->getMaxNumMergeCand()); + m_pcInterPred->adjustMergeCandidates(pu, mrgCtx, +#if TM_MRG + pu.tmMergeFlag ? pu.cs->sps->getMaxNumTMMergeCand() : +#endif + pu.cs->sps->getMaxNumMergeCand()); #else m_pcInterPred->adjustMergeCandidatesInOneCandidateGroup(pu, mrgCtx, pu.mergeIdx + 1, pu.mergeIdx); #endif @@ -2096,7 +2100,9 @@ void DecCu::xDeriveCUMV( CodingUnit &cu ) if (!cu.cs->pcv->isEncoder) #endif { +#if TM_AMVP m_pcInterPred->clearTplAmvpBuffer(); +#endif if (pu.cu->affine) { for (uint32_t uiRefListIdx = 0; uiRefListIdx < 2; uiRefListIdx++) diff --git a/source/Lib/EncoderLib/EncCu.cpp b/source/Lib/EncoderLib/EncCu.cpp index 992b7a9c1..ea38a141b 100644 --- a/source/Lib/EncoderLib/EncCu.cpp +++ b/source/Lib/EncoderLib/EncCu.cpp @@ -4922,10 +4922,13 @@ void EncCu::xCheckRDCostMergeGeoComb2Nx2N(CodingStructure *&tempCS, CodingStruct geoModeCost[idx] = (double)fracBits * sqrtLambdaFracBits; } #if JVET_Z0056_GPM_SPLIT_MODE_REORDERING - for (int idx = 0; idx < GEO_NUM_SIG_PARTMODE; idx++) + if (sps.getUseAltGPMSplitModeCode()) { - uint64_t fracBits = m_CABACEstimator->geo_mode_est(ctxStart, idx, 1); - geoSigModeCost[idx] = (double)fracBits * sqrtLambdaFracBits; + for (int idx = 0; idx < GEO_NUM_SIG_PARTMODE; idx++) + { + uint64_t fracBits = m_CABACEstimator->geo_mode_est(ctxStart, idx, 1); + geoSigModeCost[idx] = (double)fracBits * sqrtLambdaFracBits; + } } #endif for (int idx = 0; idx < maxNumMergeCandidates; idx++) @@ -5325,8 +5328,10 @@ void EncCu::xCheckRDCostMergeGeoComb2Nx2N(CodingStructure *&tempCS, CodingStruct #endif ); } +#if TM_MRG const int tmMmvdBufIdx0 = GPM_EXT_MMVD_MAX_REFINE_NUM + 1; const int tmMmvdBufIdx1 = GPM_EXT_MMVD_MAX_REFINE_NUM + 1; +#endif #endif for (int splitDir = 0; splitDir < GEO_NUM_PARTITION_MODE; splitDir++) -- GitLab