diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index d9d0d3b7984774324d5e6a99764d6f5f4f7d67e5..516deaedc0469bd1cfe301eefad980d09bdfdafb 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -51,6 +51,8 @@ #include <cassert> //########### place macros to be removed in next cycle below this line ############### +#define JVET_S0133_PH_SYNTAX_OVERRIDE_ENC_FIX 1 // JVET-S0133: Encoder-only fix on the override of partition constriants in PH + #define JVET_S0179_CONDITIONAL_SIGNAL_GCI 1 // JVET-S0179: Conditional signalling of GCI fields #define JVET_S0049_ASPECT4 1 // JVET-S0049 aspect 4: Constrain the value of pps_alf_info_in_ph_flag to be equal to 0 when the PH is in the SH diff --git a/source/Lib/EncoderLib/EncGOP.cpp b/source/Lib/EncoderLib/EncGOP.cpp index 2ca92dcdceda12c133a1796766ff6995a3be3ce4..b4b2044981a358d33d06b42ad417d1b877244e2e 100644 --- a/source/Lib/EncoderLib/EncGOP.cpp +++ b/source/Lib/EncoderLib/EncGOP.cpp @@ -2336,6 +2336,51 @@ void EncGOP::compressGOP( int iPOCLast, int iNumPicRcvd, PicList& rcListPic, m_uiPrevISlicePOC = pcSlice->getPOC(); m_bInitAMaxBT = true; } +#if JVET_S0133_PH_SYNTAX_OVERRIDE_ENC_FIX + bool identicalToSPS=true; + const SPS* sps =pcSlice->getSPS(); + + if (picHeader->getPicInterSliceAllowedFlag()) + { + if (picHeader->getMinQTSize(pcSlice->getSliceType()) != pcSlice->getSPS()->getMinQTSize(pcSlice->getSliceType()) || + picHeader->getMaxMTTHierarchyDepth(pcSlice->getSliceType()) != pcSlice->getSPS()->getMaxMTTHierarchyDepth() || + picHeader->getMaxBTSize(pcSlice->getSliceType()) != pcSlice->getSPS()->getMaxBTSize() || + picHeader->getMaxTTSize(pcSlice->getSliceType()) != pcSlice->getSPS()->getMaxTTSize() + ) + { + identicalToSPS=false; + } + } + + if (identicalToSPS && picHeader->getPicIntraSliceAllowedFlag()) + { + if (picHeader->getMinQTSize(I_SLICE) != sps->getMinQTSize(I_SLICE) || + picHeader->getMaxMTTHierarchyDepth(I_SLICE) != sps->getMaxMTTHierarchyDepthI() || + picHeader->getMaxBTSize(I_SLICE) != sps->getMaxBTSizeI() || + picHeader->getMaxTTSize(I_SLICE) != sps->getMaxTTSizeI() + ) + { + identicalToSPS=false; + } + + if (identicalToSPS && sps->getUseDualITree()) + { + if (picHeader->getMinQTSize(I_SLICE, CHANNEL_TYPE_CHROMA) != sps->getMinQTSize(I_SLICE, CHANNEL_TYPE_CHROMA) || + picHeader->getMaxMTTHierarchyDepth(I_SLICE, CHANNEL_TYPE_CHROMA) != sps->getMaxMTTHierarchyDepthIChroma() || + picHeader->getMaxBTSize(I_SLICE, CHANNEL_TYPE_CHROMA) != sps->getMaxBTSizeIChroma() || + picHeader->getMaxTTSize(I_SLICE, CHANNEL_TYPE_CHROMA) != sps->getMaxTTSizeIChroma() + ) + { + identicalToSPS=false; + } + } + } + + if (identicalToSPS) + { + picHeader->setSplitConsOverrideFlag(false); + } +#endif } // Slice info. refinement