diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index 12c147c7e9c16f56dfdaad50c2166a6185ba7bfb..d1b6722546a13585c10367e3c6e26872ef958a9a 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -368,11 +368,11 @@ typedef std::pair<int, int> TrCost; #define W0038_DB_OPT 1 ///< adaptive DB parameter selection, LoopFilterOffsetInPPS and LoopFilterDisable are set to 0 and DeblockingFilterMetric=2; #define W0038_CQP_ADJ 1 ///< chroma QP adjustment based on TL, CQPTLAdjustEnabled is set to 1; +#define JVET_M0113_M0188_QG_SIZE 1 ///< JVET-M0113/M0188 quantization groups based on area #define SHARP_LUMA_DELTA_QP 1 ///< include non-normative LCU deltaQP and normative chromaQP change #define ER_CHROMA_QP_WCG_PPS 1 ///< Chroma QP model for WCG used in Anchor 3.2 #define ENABLE_QPA 1 ///< Non-normative perceptual QP adaptation according to JVET-H0047 and JVET-K0206. Deactivated by default, activated using encoder arguments --PerceptQPA=1 --SliceChromaQPOffsetPeriodicity=1 -#define ENABLE_QPA_SUB_CTU ( 1 && ENABLE_QPA ) ///< when maximum delta-QP depth is greater than zero, use sub-CTU QPA -#define JVET_M0113_M0188_QG_SIZE 1 ///< JVET-M0113/M0188 quantization groups based on area +#define ENABLE_QPA_SUB_CTU ( !JVET_M0113_M0188_QG_SIZE && ENABLE_QPA ) ///< when maximum delta-QP depth is greater than zero, use sub-CTU QPA #define RDOQ_CHROMA 1 ///< use of RDOQ in chroma diff --git a/source/Lib/EncoderLib/EncModeCtrl.cpp b/source/Lib/EncoderLib/EncModeCtrl.cpp index 6e5020f551a5c3dd280d53c9026604bb17c3d6e9..c484979209799c54d257df5411a4038809f593d7 100644 --- a/source/Lib/EncoderLib/EncModeCtrl.cpp +++ b/source/Lib/EncoderLib/EncModeCtrl.cpp @@ -157,7 +157,12 @@ void EncModeCtrl::xGetMinMaxQP( int& minQP, int& maxQP, const CodingStructure& c minQP = Clip3( -sps.getQpBDOffset( CHANNEL_TYPE_LUMA ), MAX_QP, baseQP - deltaQP ); maxQP = Clip3( -sps.getQpBDOffset( CHANNEL_TYPE_LUMA ), MAX_QP, baseQP + deltaQP ); } +#if ENABLE_QPA_SUB_CTU + else if( qgEnableChildren ) // more splits and not the deepest QG level +#warning TODO: OR with relevant conditions, but keep compatibility with QP-RDO +#else else if( qgEnableChildren ) // more splits and not the deepest QG level +#endif { minQP = baseQP; maxQP = baseQP; @@ -169,7 +174,7 @@ void EncModeCtrl::xGetMinMaxQP( int& minQP, int& maxQP, const CodingStructure& c } #if SHARP_LUMA_DELTA_QP - if( m_pcEncCfg->getLumaLevelToDeltaQPMapping().isEnabled() ) + if (m_pcEncCfg->getLumaLevelToDeltaQPMapping().isEnabled() && (!CS::isDualITree (cs) || isLuma (partitioner.chType))) { minQP = Clip3( -sps.getQpBDOffset( CHANNEL_TYPE_LUMA ), MAX_QP, baseQP - m_lumaQPOffset ); maxQP = minQP; @@ -230,6 +235,7 @@ void EncModeCtrl::xGetMinMaxQP( int& minQP, int& maxQP, const CodingStructure& c maxQP = minQP; } #endif +#endif }