From 2ddf518155747e8ef1d4dab8729a9af020b1d3d1 Mon Sep 17 00:00:00 2001 From: Frank Bossen <fbossen@gmail.com> Date: Wed, 20 Feb 2019 12:40:34 -0500 Subject: [PATCH] Add macro to disable MMVD Code was salvaged from !306 --- source/Lib/CommonLib/TypeDef.h | 2 ++ source/Lib/DecoderLib/CABACReader.cpp | 9 ++++++++- source/Lib/EncoderLib/CABACWriter.cpp | 10 ++++++++-- source/Lib/EncoderLib/EncCu.cpp | 6 ++++-- 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index d611c5ad3..d51677ed1 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -56,6 +56,8 @@ #define JVET_M0428_ENC_DB_OPT 1 // Encoder optimization with deblocking filter +#define JVET_MMVD_OFF_MACRO 0 + #define JVET_M0055_DEBUG_CTU 1 // DebugCTU encoder debug option #define JVET_M0297_32PT_MTS_ZERO_OUT 1 // 32 point MTS based on skipping high frequency coefficients diff --git a/source/Lib/DecoderLib/CABACReader.cpp b/source/Lib/DecoderLib/CABACReader.cpp index db7838562..1727e7ccd 100644 --- a/source/Lib/DecoderLib/CABACReader.cpp +++ b/source/Lib/DecoderLib/CABACReader.cpp @@ -993,9 +993,13 @@ void CABACReader::cu_skip_flag( CodingUnit& cu ) if( skip ) #endif { +#if JVET_MMVD_OFF_MACRO + cu.mmvdSkip = false; +#else unsigned mmvdSkip = m_BinDecoder.decodeBin(Ctx::MmvdFlag(0)); cu.mmvdSkip = mmvdSkip; DTRACE(g_trace_ctx, D_SYNTAX, "mmvd_cu_skip_flag() ctx=%d mmvd_skip=%d\n", 0, mmvdSkip ? 1 : 0); +#endif cu.skip = true; cu.rootCbf = false; cu.predMode = MODE_INTER; @@ -1823,12 +1827,15 @@ void CABACReader::merge_flag( PredictionUnit& pu ) return; } #endif - +#if JVET_MMVD_OFF_MACRO + pu.mmvdMergeFlag = false; +#else if (pu.mergeFlag) { pu.mmvdMergeFlag = (m_BinDecoder.decodeBin(Ctx::MmvdFlag(0))); DTRACE(g_trace_ctx, D_SYNTAX, "mmvd_merge_flag() mmvd_merge=%d pos=(%d,%d) size=%dx%d\n", pu.mmvdMergeFlag ? 1 : 0, pu.lumaPos().x, pu.lumaPos().y, pu.lumaSize().width, pu.lumaSize().height); } +#endif } diff --git a/source/Lib/EncoderLib/CABACWriter.cpp b/source/Lib/EncoderLib/CABACWriter.cpp index a9b4f7aef..ab3d37ea5 100644 --- a/source/Lib/EncoderLib/CABACWriter.cpp +++ b/source/Lib/EncoderLib/CABACWriter.cpp @@ -792,25 +792,30 @@ void CABACWriter::cu_skip_flag( const CodingUnit& cu ) unsigned ctxidx = DeriveCtx::CtxIBCFlag(cu); m_BinEncoder.encodeBin(CU::isIBC(cu) ? 1 : 0, Ctx::IBCFlag(ctxidx)); DTRACE(g_trace_ctx, D_SYNTAX, "ibc() ctx=%d cu.predMode=%d\n", ctxidx, cu.predMode); - +#if !JVET_MMVD_OFF_MACRO if (CU::isInter(cu)) { m_BinEncoder.encodeBin(cu.mmvdSkip, Ctx::MmvdFlag(0)); DTRACE(g_trace_ctx, D_SYNTAX, "mmvd_cu_skip_flag() ctx=%d mmvd_skip=%d\n", 0, cu.mmvdSkip ? 1 : 0); } +#endif } +#if !JVET_MMVD_OFF_MACRO if (cu.skip && !cu.cs->slice->getSPS()->getIBCFlag()) { m_BinEncoder.encodeBin(cu.mmvdSkip, Ctx::MmvdFlag(0)); DTRACE(g_trace_ctx, D_SYNTAX, "mmvd_cu_skip_flag() ctx=%d mmvd_skip=%d\n", 0, cu.mmvdSkip ? 1 : 0); } +#endif #else +#if !JVET_MMVD_OFF_MACRO if (cu.skip) { m_BinEncoder.encodeBin(cu.mmvdSkip, Ctx::MmvdFlag(0)); DTRACE(g_trace_ctx, D_SYNTAX, "mmvd_cu_skip_flag() ctx=%d mmvd_skip=%d\n", 0, cu.mmvdSkip ? 1 : 0); } #endif +#endif } @@ -1657,12 +1662,13 @@ void CABACWriter::merge_flag( const PredictionUnit& pu ) return; } #endif - +#if !JVET_MMVD_OFF_MACRO if (pu.mergeFlag) { m_BinEncoder.encodeBin(pu.mmvdMergeFlag, Ctx::MmvdFlag(0)); DTRACE(g_trace_ctx, D_SYNTAX, "mmvd_merge_flag() mmvd_merge=%d pos=(%d,%d) size=%dx%d\n", pu.mmvdMergeFlag ? 1 : 0, pu.lumaPos().x, pu.lumaPos().y, pu.lumaSize().width, pu.lumaSize().height); } +#endif } void CABACWriter::imv_mode( const CodingUnit& cu ) diff --git a/source/Lib/EncoderLib/EncCu.cpp b/source/Lib/EncoderLib/EncCu.cpp index 6f461e435..ccdd85eaa 100644 --- a/source/Lib/EncoderLib/EncCu.cpp +++ b/source/Lib/EncoderLib/EncCu.cpp @@ -2234,7 +2234,9 @@ void EncCu::xCheckRDCostMerge2Nx2N( CodingStructure *&tempCS, CodingStructure *& { uiBitsCand--; } +#if !JVET_MMVD_OFF_MACRO uiBitsCand++; // for mmvd_flag +#endif double cost = (double)uiSad + (double)uiBitsCand * sqrtLambdaForFirstPass; insertPos = -1; updateDoubleCandList(uiMergeCand, cost, RdModeList, candCostList, RdModeList2, (uint32_t)NUM_LUMA_MODE, uiNumMrgSATDCand, &insertPos); @@ -2380,7 +2382,7 @@ void EncCu::xCheckRDCostMerge2Nx2N( CodingStructure *&tempCS, CodingStructure *& pu.mhIntraFlag = false; m_CABACEstimator->getCtx() = ctxStart; } - +#if !JVET_MMVD_OFF_MACRO cu.mmvdSkip = true; int tempNum = 0; tempNum = MMVD_ADD_NUM; @@ -2464,7 +2466,7 @@ void EncCu::xCheckRDCostMerge2Nx2N( CodingStructure *&tempCS, CodingStructure *& swap(singleMergeTempBuffer, acMergeTempBuffer[insertPos]); } } - +#endif // Try to limit number of candidates using SATD-costs for( uint32_t i = 1; i < uiNumMrgSATDCand; i++ ) { -- GitLab