diff --git a/doc/software-manual.tex b/doc/software-manual.tex index 63ce2a0ebee6fc8cfd4b3b48039aac182f1ad590..f6dbde2e62b906719486344096b271e396dc4e75 100644 --- a/doc/software-manual.tex +++ b/doc/software-manual.tex @@ -1046,6 +1046,18 @@ Specifies the value of general_non_projected_constraint_flag Specifies the value of no_res_change_in_clvs_constraint_flag \\ +\Option{SingleLayerConstraintFlag} & +%\ShortOption{\None} & +\Default{false} & +Specifies the value of single_layer_constraint_flag +\\ + +\Option{AllLayersIndependentConstraintFlag} & +%\ShortOption{\None} & +\Default{false} & +Specifies the value of all_layers_independent_constraint_flag +\\ + \Option{OneTilePerPicConstraintFlag} & %\ShortOption{\None} & \Default{false} & diff --git a/source/App/EncoderApp/EncApp.cpp b/source/App/EncoderApp/EncApp.cpp index a6a2c19895f7689df735aef935131e39e6335c60..80abf2b4206d9c3969b5211abf2707ab7ddf0078 100644 --- a/source/App/EncoderApp/EncApp.cpp +++ b/source/App/EncoderApp/EncApp.cpp @@ -214,6 +214,10 @@ void EncApp::xInitLibCfg() #endif m_cEncLib.setNonPackedConstraintFlag ( m_nonPackedConstraintFlag); m_cEncLib.setNonProjectedConstraintFlag ( m_nonProjectedConstraintFlag ); +#if JVET_R0286_GCI_CLEANUP + m_cEncLib.setSingleLayerConstraintFlag ( m_singleLayerConstraintFlag ); + m_cEncLib.setAllLayersIndependentConstraintFlag ( m_allLayersIndependentConstraintFlag ); +#endif m_cEncLib.setNoResChangeInClvsConstraintFlag ( m_noResChangeInClvsConstraintFlag ); m_cEncLib.setOneTilePerPicConstraintFlag ( m_oneTilePerPicConstraintFlag ); m_cEncLib.setOneSlicePerPicConstraintFlag ( m_oneSlicePerPicConstraintFlag ); @@ -279,6 +283,19 @@ void EncApp::xInitLibCfg() m_cEncLib.setNoCraConstraintFlag ( m_iDecodingRefreshType != 1 ); m_cEncLib.setNoGdrConstraintFlag ( false ); // Not yet possible to encode GDR using config parameters m_cEncLib.setNoApsConstraintFlag ( !m_alf && !m_lmcsEnabled && m_useScalingListId == SCALING_LIST_OFF); +#if JVET_R0286_GCI_CLEANUP + m_cEncLib.setNoMrlConstraintFlag ( !m_MRL ); + m_cEncLib.setNoIspConstraintFlag ( !m_ISP ); + m_cEncLib.setNoMipConstraintFlag ( !m_MIP ); + m_cEncLib.setNoLfnstConstraintFlag ( !m_LFNST ); + m_cEncLib.setNoMmvdConstraintFlag ( !m_MMVD ); + m_cEncLib.setNoSmvdConstraintFlag ( !m_SMVD ); + m_cEncLib.setNoProfConstraintFlag ( !m_PROF ); + m_cEncLib.setNoPaletteConstraintFlag ( m_PLTMode == 1 ? false : true ); + m_cEncLib.setNoActConstraintFlag ( !m_useColorTrans ); + m_cEncLib.setNoLmcsConstraintFlag ( !m_lmcsEnabled ); +#endif + //====== Coding Structure ======== m_cEncLib.setIntraPeriod ( m_iIntraPeriod ); diff --git a/source/App/EncoderApp/EncAppCfg.cpp b/source/App/EncoderApp/EncAppCfg.cpp index 6fd2b27e3940186ac878cf983457911a70426743..ae97cc9521948afe6328a780d17bf8a2529edc03 100644 --- a/source/App/EncoderApp/EncAppCfg.cpp +++ b/source/App/EncoderApp/EncAppCfg.cpp @@ -83,6 +83,20 @@ EncAppCfg::EncAppCfg() , m_maxBitDepthConstraintIdc(0) , m_maxChromaFormatConstraintIdc(CHROMA_420) , m_bFrameConstraintFlag(false) +#if JVET_R0286_GCI_CLEANUP +, m_singleLayerConstraintFlag(false) +, m_allLayersIndependentConstraintFlag(false) +, m_noMrlConstraintFlag(false) +, m_noIspConstraintFlag(false) +, m_noMipConstraintFlag(false) +, m_noLfnstConstraintFlag(false) +, m_noMmvdConstraintFlag(false) +, m_noSmvdConstraintFlag(false) +, m_noProfConstraintFlag(false) +, m_noPaletteConstraintFlag(false) +, m_noActConstraintFlag(false) +, m_noLmcsConstraintFlag(false) +#endif , m_bNoQtbttDualTreeIntraConstraintFlag(false) , m_noPartitionConstraintsOverrideConstraintFlag(false) , m_bNoSaoConstraintFlag(false) @@ -811,6 +825,10 @@ bool EncAppCfg::parseCfg( int argc, char* argv[] ) ("NonPackedSource", m_nonPackedConstraintFlag, false, "Indicate that source does not contain frame packing") ("NonProjectedConstraintFlag", m_nonProjectedConstraintFlag, false, "Indicate that the bitstream contains projection SEI messages") ("NoResChangeInClvsConstraintFlag", m_noResChangeInClvsConstraintFlag, false, "Indicate that the picture spatial resolution does not change within any CLVS referring to the SPS") +#if JVET_R0286_GCI_CLEANUP + ("SingleLayerConstraintFlag", m_singleLayerConstraintFlag, false, "Indicate that the bitstream contains only one layer") + ("AllLayersIndependentConstraintFlag", m_allLayersIndependentConstraintFlag, false, "Indicate that all layers are independent") +#endif ("OneTilePerPicConstraintFlag", m_oneTilePerPicConstraintFlag, false, "Indicate that each picture shall contain only one tile") ("OneSlicePerPicConstraintFlag", m_oneSlicePerPicConstraintFlag, false, "Indicate that each picture shall contain only one slice") ("OneSubpicPerPicConstraintFlag", m_oneSubpicPerPicConstraintFlag, false, "Indicate that each picture shall contain only one subpicture") diff --git a/source/App/EncoderApp/EncAppCfg.h b/source/App/EncoderApp/EncAppCfg.h index 6df3159bcbcc396c5669f465012fcf5343eeb00a..8e1cb2b0934a0e29ba28b7a48c0e00bc5e307e99 100644 --- a/source/App/EncoderApp/EncAppCfg.h +++ b/source/App/EncoderApp/EncAppCfg.h @@ -135,6 +135,20 @@ protected: uint32_t m_maxBitDepthConstraintIdc; uint32_t m_maxChromaFormatConstraintIdc; bool m_bFrameConstraintFlag; +#if JVET_R0286_GCI_CLEANUP + bool m_singleLayerConstraintFlag; + bool m_allLayersIndependentConstraintFlag; + bool m_noMrlConstraintFlag; + bool m_noIspConstraintFlag; + bool m_noMipConstraintFlag; + bool m_noLfnstConstraintFlag; + bool m_noMmvdConstraintFlag; + bool m_noSmvdConstraintFlag; + bool m_noProfConstraintFlag; + bool m_noPaletteConstraintFlag; + bool m_noActConstraintFlag; + bool m_noLmcsConstraintFlag; +#endif bool m_bNoQtbttDualTreeIntraConstraintFlag; bool m_noPartitionConstraintsOverrideConstraintFlag; bool m_bNoSaoConstraintFlag; diff --git a/source/Lib/CommonLib/Slice.cpp b/source/Lib/CommonLib/Slice.cpp index fa364d63ae529eaa2a956223e82b2d52a432b237..ad2ab6661b561ad2a01f5e732a007d04b68f5bf5 100644 --- a/source/Lib/CommonLib/Slice.cpp +++ b/source/Lib/CommonLib/Slice.cpp @@ -4014,6 +4014,22 @@ bool operator == (const ConstraintInfo& op1, const ConstraintInfo& o if( op1.m_maxChromaFormatConstraintIdc != op2.m_maxChromaFormatConstraintIdc ) return false; if( op1.m_onePictureOnlyConstraintFlag != op2.m_onePictureOnlyConstraintFlag ) return false; if( op1.m_lowerBitRateConstraintFlag != op2.m_lowerBitRateConstraintFlag ) return false; + +#if JVET_R0286_GCI_CLEANUP + if (op1.m_singleLayerConstraintFlag != op2.m_singleLayerConstraintFlag ) return false; + if (op1.m_allLayersIndependentConstraintFlag != op2.m_allLayersIndependentConstraintFlag ) return false; + if (op1.m_noMrlConstraintFlag != op2.m_noMrlConstraintFlag ) return false; + if (op1.m_noIspConstraintFlag != op2.m_noIspConstraintFlag ) return false; + if (op1.m_noMipConstraintFlag != op2.m_noMipConstraintFlag ) return false; + if (op1.m_noLfnstConstraintFlag != op2.m_noLfnstConstraintFlag ) return false; + if (op1.m_noMmvdConstraintFlag != op2.m_noMmvdConstraintFlag ) return false; + if (op1.m_noSmvdConstraintFlag != op2.m_noSmvdConstraintFlag ) return false; + if (op1.m_noProfConstraintFlag != op2.m_noProfConstraintFlag ) return false; + if (op1.m_noPaletteConstraintFlag != op2.m_noPaletteConstraintFlag ) return false; + if (op1.m_noActConstraintFlag != op2.m_noActConstraintFlag ) return false; + if (op1.m_noLmcsConstraintFlag != op2.m_noLmcsConstraintFlag ) return false; +#endif + if( op1.m_noQtbttDualTreeIntraConstraintFlag != op2.m_noQtbttDualTreeIntraConstraintFlag ) return false; if( op1.m_noPartitionConstraintsOverrideConstraintFlag != op2.m_noPartitionConstraintsOverrideConstraintFlag ) return false; if( op1.m_noSaoConstraintFlag != op2.m_noSaoConstraintFlag ) return false; diff --git a/source/Lib/CommonLib/Slice.h b/source/Lib/CommonLib/Slice.h index 10455606b55acc5e6745b2b14bdcddd2ee69fd26..53a9057373a3e4f0a2dac625446d3b8191e59626 100644 --- a/source/Lib/CommonLib/Slice.h +++ b/source/Lib/CommonLib/Slice.h @@ -254,6 +254,21 @@ class ConstraintInfo bool m_onePictureOnlyConstraintFlag; bool m_lowerBitRateConstraintFlag; +#if JVET_R0286_GCI_CLEANUP + bool m_singleLayerConstraintFlag; + bool m_allLayersIndependentConstraintFlag; + bool m_noMrlConstraintFlag; + bool m_noIspConstraintFlag; + bool m_noMipConstraintFlag; + bool m_noLfnstConstraintFlag; + bool m_noMmvdConstraintFlag; + bool m_noSmvdConstraintFlag; + bool m_noProfConstraintFlag; + bool m_noPaletteConstraintFlag; + bool m_noActConstraintFlag; + bool m_noLmcsConstraintFlag; +#endif + bool m_noQtbttDualTreeIntraConstraintFlag; bool m_noPartitionConstraintsOverrideConstraintFlag; bool m_noSaoConstraintFlag; @@ -311,6 +326,22 @@ public: , m_maxChromaFormatConstraintIdc(CHROMA_420) , m_onePictureOnlyConstraintFlag (false) , m_lowerBitRateConstraintFlag (false ) + +#if JVET_R0286_GCI_CLEANUP + , m_singleLayerConstraintFlag(false) + , m_allLayersIndependentConstraintFlag(false) + , m_noMrlConstraintFlag(false) + , m_noIspConstraintFlag(false) + , m_noMipConstraintFlag(false) + , m_noLfnstConstraintFlag(false) + , m_noMmvdConstraintFlag(false) + , m_noSmvdConstraintFlag(false) + , m_noProfConstraintFlag(false) + , m_noPaletteConstraintFlag(false) + , m_noActConstraintFlag(false) + , m_noLmcsConstraintFlag(false) +#endif + , m_noQtbttDualTreeIntraConstraintFlag(false) , m_noPartitionConstraintsOverrideConstraintFlag(false) , m_noSaoConstraintFlag (false) @@ -393,6 +424,33 @@ public: bool getLowerBitRateConstraintFlag() const { return m_lowerBitRateConstraintFlag; } void setLowerBitRateConstraintFlag(bool b) { m_lowerBitRateConstraintFlag = b; } +#if JVET_R0286_GCI_CLEANUP + bool getSingleLayerConstraintFlag() const { return m_singleLayerConstraintFlag; } + void setSingleLayerConstraintFlag(bool b) { m_singleLayerConstraintFlag = b; } + bool getAllLayersIndependentConstraintFlag() const { return m_allLayersIndependentConstraintFlag; } + void setAllLayersIndependentConstraintFlag(bool b) { m_allLayersIndependentConstraintFlag = b; } + bool getNoMrlConstraintFlag() const { return m_noMrlConstraintFlag; } + void setNoMrlConstraintFlag(bool b) { m_noMrlConstraintFlag = b; } + bool getNoIspConstraintFlag() const { return m_noIspConstraintFlag; } + void setNoIspConstraintFlag(bool b) { m_noIspConstraintFlag = b; } + bool getNoMipConstraintFlag() const { return m_noMipConstraintFlag; } + void setNoMipConstraintFlag(bool b) { m_noMipConstraintFlag = b; } + bool getNoLfnstConstraintFlag() const { return m_noLfnstConstraintFlag; } + void setNoLfnstConstraintFlag(bool b) { m_noLfnstConstraintFlag = b; } + bool getNoMmvdConstraintFlag() const { return m_noMmvdConstraintFlag; } + void setNoMmvdConstraintFlag(bool b) { m_noMmvdConstraintFlag = b; } + bool getNoSmvdConstraintFlag() const { return m_noSmvdConstraintFlag; } + void setNoSmvdConstraintFlag(bool b) { m_noSmvdConstraintFlag = b; } + bool getNoProfConstraintFlag() const { return m_noProfConstraintFlag; } + void setNoProfConstraintFlag(bool b) { m_noProfConstraintFlag = b; } + bool getNoPaletteConstraintFlag() const { return m_noPaletteConstraintFlag; } + void setNoPaletteConstraintFlag(bool b) { m_noPaletteConstraintFlag = b; } + bool getNoActConstraintFlag() const { return m_noActConstraintFlag; } + void setNoActConstraintFlag(bool b) { m_noActConstraintFlag = b; } + bool getNoLmcsConstraintFlag() const { return m_noLmcsConstraintFlag; } + void setNoLmcsConstraintFlag(bool b) { m_noLmcsConstraintFlag = b; } +#endif + bool getNoQtbttDualTreeIntraConstraintFlag() const { return m_noQtbttDualTreeIntraConstraintFlag; } void setNoQtbttDualTreeIntraConstraintFlag(bool bVal) { m_noQtbttDualTreeIntraConstraintFlag = bVal; } bool getNoPartitionConstraintsOverrideConstraintFlag() const { return m_noPartitionConstraintsOverrideConstraintFlag; } diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index e7613db3e97c24df4c7d6f6dc295a15d283b47aa..86f59e9b5bbdb73a911df061ca6efa8edb6c14cf 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -73,6 +73,8 @@ #define JVET_R0334_PLT_CLEANUP 1 // JVET-R0334: Disable chroma palette for local dual tree +#define JVET_R0286_GCI_CLEANUP 1 // JVET-R0286: Sensibility constraints and general constraints on tools + #define JVET_R0090_VUI 1 // JVET-R0090: Fix parsing dependencies in VUI syntax #define JVET_R0205 1 // JVET-R0205: Condition presence of inter_layer_ref_pics_present_flag on sps_video_parameter_set_id diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp index 729676ea89623f0c48031631264cde8891508fd3..1130d0f0ead3b70e50f10b226f8c5255e725b601 100644 --- a/source/Lib/DecoderLib/VLCReader.cpp +++ b/source/Lib/DecoderLib/VLCReader.cpp @@ -4421,6 +4421,14 @@ void HLSyntaxReader::parseConstraintInfo(ConstraintInfo *cinfo) READ_CODE(4, symbol, "max_bitdepth_constraint_idc" ); cinfo->setMaxBitDepthConstraintIdc(symbol); READ_CODE(2, symbol, "max_chroma_format_constraint_idc" ); cinfo->setMaxChromaFormatConstraintIdc((ChromaFormat)symbol); +#if JVET_R0286_GCI_CLEANUP + READ_FLAG(symbol, "single_layer_constraint_flag"); cinfo->setSingleLayerConstraintFlag(symbol ? true : false); + READ_FLAG(symbol, "all_layers_independent_constraint_flag"); cinfo->setAllLayersIndependentConstraintFlag(symbol ? true : false); + if (cinfo->getSingleLayerConstraintFlag()) + { + CHECK(symbol == 0, "When single_layer_constraint_flag is equal to 1, the value of all_layers_independent_ constraint_flag shall be equal to 1"); + } +#endif READ_FLAG(symbol, "no_res_change_in_clvs_constraint_flag" ); cinfo->setNoResChangeInClvsConstraintFlag(symbol ? true : false); READ_FLAG(symbol, "one_tile_per_pic_constraint_flag" ); cinfo->setOneTilePerPicConstraintFlag(symbol ? true : false); READ_FLAG(symbol, "one_slice_per_pic_constraint_flag" ); cinfo->setOneSlicePerPicConstraintFlag(symbol ? true : false); @@ -4431,30 +4439,139 @@ void HLSyntaxReader::parseConstraintInfo(ConstraintInfo *cinfo) } READ_FLAG(symbol, "no_qtbtt_dual_tree_intra_constraint_flag" ); cinfo->setNoQtbttDualTreeIntraConstraintFlag(symbol > 0 ? true : false); +#if JVET_R0286_GCI_CLEANUP + if (cinfo->getMaxChromaFormatConstraintIdc() == 0) + { + CHECK(symbol == 0, "When max_chroma_format_constraint_idc is equal to 0, the value of no_qtbtt_dual_tree_intra_constraint_flag shall be equal to 1"); + } +#endif READ_FLAG(symbol, "no_partition_constraints_override_constraint_flag"); cinfo->setNoPartitionConstraintsOverrideConstraintFlag(symbol > 0 ? true : false); READ_FLAG(symbol, "no_sao_constraint_flag"); cinfo->setNoSaoConstraintFlag(symbol > 0 ? true : false); READ_FLAG(symbol, "no_alf_constraint_flag"); cinfo->setNoAlfConstraintFlag(symbol > 0 ? true : false); READ_FLAG(symbol, "no_ccalf_constraint_flag"); cinfo->setNoCCAlfConstraintFlag(symbol > 0 ? true : false); +#if JVET_R0286_GCI_CLEANUP + if (cinfo->getMaxChromaFormatConstraintIdc() == 0) + { + CHECK(symbol == 0, "When max_chroma_format_constraint_idc is equal to 0, the value of no_ccalf_constraint_flag shall be equal to 1"); + } +#endif READ_FLAG(symbol, "no_joint_cbcr_constraint_flag"); cinfo->setNoJointCbCrConstraintFlag(symbol > 0 ? true : false); - +#if JVET_R0286_GCI_CLEANUP + if (cinfo->getMaxChromaFormatConstraintIdc() == 0) + { + CHECK(symbol == 0, "When max_chroma_format_constraint_idc is equal to 0, the value of no_joint_cbcr_constraint_flag shall be equal to 1"); + } + READ_FLAG(symbol, "no_mrl_constraint_flag"); cinfo->setNoMrlConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "no_isp_constraint_flag"); cinfo->setNoIspConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "no_mip_constraint_flag"); cinfo->setNoMipConstraintFlag(symbol > 0 ? true : false); +#endif READ_FLAG(symbol, "no_ref_wraparound_constraint_flag"); cinfo->setNoRefWraparoundConstraintFlag(symbol > 0 ? true : false); +#if JVET_R0286_GCI_CLEANUP + if (cinfo->getIntraOnlyConstraintFlag() == 1) + { + CHECK(symbol == 0, "When intra_only_constraint_flag is equal to 1, the value of no_ref_wraparound_constraint_flag shall be equal to 1"); + } +#endif READ_FLAG(symbol, "no_temporal_mvp_constraint_flag"); cinfo->setNoTemporalMvpConstraintFlag(symbol > 0 ? true : false); +#if JVET_R0286_GCI_CLEANUP + if (cinfo->getIntraOnlyConstraintFlag() == 1) + { + CHECK(symbol == 0, "When intra_only_constraint_flag is equal to 1, the value of no_temporal_mvp_constraint_flag shall be equal to 1"); + } +#endif READ_FLAG(symbol, "no_sbtmvp_constraint_flag"); cinfo->setNoSbtmvpConstraintFlag(symbol > 0 ? true : false); +#if JVET_R0286_GCI_CLEANUP + if (cinfo->getIntraOnlyConstraintFlag() == 1) + { + CHECK(symbol == 0, "When intra_only_constraint_flag is equal to 1, the value of no_sbtmvp_constraint_flag shall be equal to 1"); + } +#endif READ_FLAG(symbol, "no_amvr_constraint_flag"); cinfo->setNoAmvrConstraintFlag(symbol > 0 ? true : false); +#if JVET_R0286_GCI_CLEANUP + if (cinfo->getIntraOnlyConstraintFlag() == 1) + { + CHECK(symbol == 0, "When intra_only_constraint_flag is equal to 1, the value of no_amvr_constraint_flag shall be equal to 1"); + } +#endif READ_FLAG(symbol, "no_bdof_constraint_flag"); cinfo->setNoBdofConstraintFlag(symbol > 0 ? true : false); +#if JVET_R0286_GCI_CLEANUP + if (cinfo->getIntraOnlyConstraintFlag() == 1) + { + CHECK(symbol == 0, "When intra_only_constraint_flag is equal to 1, the value of no_bdof_constraint_flag shall be equal to 1"); + } +#endif READ_FLAG(symbol, "no_dmvr_constraint_flag"); cinfo->setNoDmvrConstraintFlag(symbol > 0 ? true : false); +#if JVET_R0286_GCI_CLEANUP + if (cinfo->getIntraOnlyConstraintFlag() == 1) + { + CHECK(symbol == 0, "When intra_only_constraint_flag is equal to 1, the value of no_dmvr_constraint_flag shall be equal to 1"); + } +#endif READ_FLAG(symbol, "no_cclm_constraint_flag"); cinfo->setNoCclmConstraintFlag(symbol > 0 ? true : false); +#if JVET_R0286_GCI_CLEANUP + if (cinfo->getMaxChromaFormatConstraintIdc() == 0) + { + CHECK(symbol == 0, "When max_chroma_format_constraint_idc is equal to 0, the value of no_cclm_constraint_flag shall be equal to 1"); + } +#endif READ_FLAG(symbol, "no_mts_constraint_flag"); cinfo->setNoMtsConstraintFlag(symbol > 0 ? true : false); READ_FLAG(symbol, "no_sbt_constraint_flag"); cinfo->setNoSbtConstraintFlag(symbol > 0 ? true : false); +#if JVET_R0286_GCI_CLEANUP + READ_FLAG(symbol, "no_lfnst_constraint_flag"); cinfo->setNoLfnstConstraintFlag(symbol > 0 ? true : false); +#endif READ_FLAG(symbol, "no_affine_motion_constraint_flag"); cinfo->setNoAffineMotionConstraintFlag(symbol > 0 ? true : false); +#if JVET_R0286_GCI_CLEANUP + if (cinfo->getIntraOnlyConstraintFlag() == 1) + { + CHECK(symbol == 0, "When intra_only_constraint_flag is equal to 1, the value of no_affine_motion_constraint_flag shall be equal to 1"); + } + READ_FLAG(symbol, "no_mmvd_constraint_flag"); cinfo->setNoMmvdConstraintFlag(symbol > 0 ? true : false); + if (cinfo->getIntraOnlyConstraintFlag() == 1) + { + CHECK(symbol == 0, "When intra_only_constraint_flag is equal to 1, the value of no_mmvd_constraint_flag shall be equal to 1"); + } + READ_FLAG(symbol, "no_smvd_constraint_flag"); cinfo->setNoSmvdConstraintFlag(symbol > 0 ? true : false); + if (cinfo->getIntraOnlyConstraintFlag() == 1) + { + CHECK(symbol == 0, "When intra_only_constraint_flag is equal to 1, the value of no_smvd_constraint_flag shall be equal to 1"); + } + READ_FLAG(symbol, "no_prof_constraint_flag"); cinfo->setNoProfConstraintFlag(symbol > 0 ? true : false); + if (cinfo->getIntraOnlyConstraintFlag() == 1) + { + CHECK(symbol == 0, "When intra_only_constraint_flag is equal to 1, the value of no_prof_constraint_flag shall be equal to 1"); + } +#endif READ_FLAG(symbol, "no_bcw_constraint_flag"); cinfo->setNoBcwConstraintFlag(symbol > 0 ? true : false); +#if JVET_R0286_GCI_CLEANUP + if (cinfo->getIntraOnlyConstraintFlag() == 1) + { + CHECK(symbol == 0, "When intra_only_constraint_flag is equal to 1, the value of no_bcw_constraint_flag shall be equal to 1"); + } +#endif READ_FLAG(symbol, "no_ibc_constraint_flag"); cinfo->setNoIbcConstraintFlag(symbol > 0 ? true : false); READ_FLAG(symbol, "no_ciip_constraint_flag"); cinfo->setNoCiipConstraintFlag(symbol > 0 ? true : false); +#if JVET_R0286_GCI_CLEANUP + if (cinfo->getIntraOnlyConstraintFlag() == 1) + { + CHECK(symbol == 0, "When intra_only_constraint_flag is equal to 1, the value of no_ciip_constraint_flag shall be equal to 1"); + } +#endif READ_FLAG(symbol, "no_fpel_mmvd_constraint_flag"); cinfo->setNoFPelMmvdConstraintFlag(symbol > 0 ? true : false); READ_FLAG(symbol, "no_gpm_constraint_flag"); cinfo->setNoGeoConstraintFlag(symbol > 0 ? true : false); +#if JVET_R0286_GCI_CLEANUP + if (cinfo->getIntraOnlyConstraintFlag() == 1) + { + CHECK(symbol == 0, "When intra_only_constraint_flag is equal to 1, the value of no_gpm_constraint_flag shall be equal to 1"); + } +#endif READ_FLAG(symbol, "no_ladf_constraint_flag"); cinfo->setNoLadfConstraintFlag(symbol > 0 ? true : false); READ_FLAG(symbol, "no_transform_skip_constraint_flag"); cinfo->setNoTransformSkipConstraintFlag(symbol > 0 ? true : false); READ_FLAG(symbol, "no_bdpcm_constraint_flag"); cinfo->setNoBDPCMConstraintFlag(symbol > 0 ? true : false); +#if JVET_R0286_GCI_CLEANUP + READ_FLAG(symbol, "no_palette_constraint_flag"); cinfo->setNoPaletteConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "no_act_constraint_flag"); cinfo->setNoActConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "no_lmcs_constraint_flag"); cinfo->setNoLmcsConstraintFlag(symbol > 0 ? true : false); +#endif READ_FLAG(symbol, "no_qp_delta_constraint_flag"); cinfo->setNoQpDeltaConstraintFlag(symbol > 0 ? true : false); READ_FLAG(symbol, "no_dep_quant_constraint_flag"); cinfo->setNoDepQuantConstraintFlag(symbol > 0 ? true : false); READ_FLAG(symbol, "no_sign_data_hiding_constraint_flag"); cinfo->setNoSignDataHidingConstraintFlag(symbol > 0 ? true : false); diff --git a/source/Lib/EncoderLib/EncCfg.h b/source/Lib/EncoderLib/EncCfg.h index 1981916949e243bbc525b1ddbb87468f677dc3b0..8323d74c5d0038085ea2dc9db99c147cccda57d7 100644 --- a/source/Lib/EncoderLib/EncCfg.h +++ b/source/Lib/EncoderLib/EncCfg.h @@ -177,6 +177,22 @@ protected: uint32_t m_maxBitDepthConstraintIdc; uint32_t m_maxChromaFormatConstraintIdc; bool m_bFrameConstraintFlag; + +#if JVET_R0286_GCI_CLEANUP + bool m_singleLayerConstraintFlag; + bool m_allLayersIndependentConstraintFlag; + bool m_noMrlConstraintFlag; + bool m_noIspConstraintFlag; + bool m_noMipConstraintFlag; + bool m_noLfnstConstraintFlag; + bool m_noMmvdConstraintFlag; + bool m_noSmvdConstraintFlag; + bool m_noProfConstraintFlag; + bool m_noPaletteConstraintFlag; + bool m_noActConstraintFlag; + bool m_noLmcsConstraintFlag; +#endif + bool m_bNoQtbttDualTreeIntraConstraintFlag; bool m_noPartitionConstraintsOverrideConstraintFlag; bool m_bNoSaoConstraintFlag; @@ -761,6 +777,34 @@ public: void setMaxChromaFormatConstraintIdc(uint32_t u) { m_maxChromaFormatConstraintIdc = u; } bool getFrameConstraintFlag() const { return m_bFrameConstraintFlag; } void setFrameConstraintFlag(bool bVal) { m_bFrameConstraintFlag = bVal; } + +#if JVET_R0286_GCI_CLEANUP + bool getSingleLayerConstraintFlag() const { return m_singleLayerConstraintFlag; } + void setSingleLayerConstraintFlag(bool bVal) { m_singleLayerConstraintFlag = bVal; } + bool getAllLayersIndependentConstraintFlag() const { return m_allLayersIndependentConstraintFlag; } + void setAllLayersIndependentConstraintFlag(bool bVal) { m_allLayersIndependentConstraintFlag = bVal; } + bool getNoMrlConstraintFlag() const { return m_noMrlConstraintFlag; } + void setNoMrlConstraintFlag(bool bVal) { m_noMrlConstraintFlag = bVal; } + bool getNoIspConstraintFlag() const { return m_noIspConstraintFlag; } + void setNoIspConstraintFlag(bool bVal) { m_noIspConstraintFlag = bVal; } + bool getNoMipConstraintFlag() const { return m_noMipConstraintFlag; } + void setNoMipConstraintFlag(bool bVal) { m_noMipConstraintFlag = bVal; } + bool getNoLfnstConstraintFlag() const { return m_noLfnstConstraintFlag; } + void setNoLfnstConstraintFlag(bool bVal) { m_noLfnstConstraintFlag = bVal; } + bool getNoMmvdConstraintFlag() const { return m_noMmvdConstraintFlag; } + void setNoMmvdConstraintFlag(bool bVal) { m_noMmvdConstraintFlag = bVal; } + bool getNoSmvdConstraintFlag() const { return m_noSmvdConstraintFlag; } + void setNoSmvdConstraintFlag(bool bVal) { m_noSmvdConstraintFlag = bVal; } + bool getNoProfConstraintFlag() const { return m_noProfConstraintFlag; } + void setNoProfConstraintFlag(bool bVal) { m_noProfConstraintFlag = bVal; } + bool getNoPaletteConstraintFlag() const { return m_noPaletteConstraintFlag; } + void setNoPaletteConstraintFlag(bool bVal) { m_noPaletteConstraintFlag = bVal; } + bool getNoActConstraintFlag() const { return m_noActConstraintFlag; } + void setNoActConstraintFlag(bool bVal) { m_noActConstraintFlag = bVal; } + bool getNoLmcsConstraintFlag() const { return m_noLmcsConstraintFlag; } + void setNoLmcsConstraintFlag(bool bVal) { m_noLmcsConstraintFlag = bVal; } +#endif + bool getNoQtbttDualTreeIntraConstraintFlag() const { return m_bNoQtbttDualTreeIntraConstraintFlag; } void setNoQtbttDualTreeIntraConstraintFlag(bool bVal) { m_bNoQtbttDualTreeIntraConstraintFlag = bVal; } bool getNoPartitionConstraintsOverrideConstraintFlag() const { return m_noPartitionConstraintsOverrideConstraintFlag; } diff --git a/source/Lib/EncoderLib/EncLib.cpp b/source/Lib/EncoderLib/EncLib.cpp index 3c00444967eefd5f2dac66cf99323e05eb4997e4..f45be9524f29c52435611b0537e0d062977efc09 100644 --- a/source/Lib/EncoderLib/EncLib.cpp +++ b/source/Lib/EncoderLib/EncLib.cpp @@ -1068,6 +1068,20 @@ void EncLib::xInitSPS( SPS& sps ) cinfo->setIntraOnlyConstraintFlag (m_intraConstraintFlag); cinfo->setMaxBitDepthConstraintIdc (m_maxBitDepthConstraintIdc); cinfo->setMaxChromaFormatConstraintIdc((ChromaFormat)m_maxChromaFormatConstraintIdc); +#if JVET_R0286_GCI_CLEANUP + cinfo->setSingleLayerConstraintFlag (m_singleLayerConstraintFlag); + cinfo->setAllLayersIndependentConstraintFlag (m_allLayersIndependentConstraintFlag); + cinfo->setNoMrlConstraintFlag (m_noMrlConstraintFlag); + cinfo->setNoIspConstraintFlag (m_noIspConstraintFlag); + cinfo->setNoMipConstraintFlag (m_noMipConstraintFlag); + cinfo->setNoLfnstConstraintFlag (m_noLfnstConstraintFlag); + cinfo->setNoMmvdConstraintFlag (m_noMmvdConstraintFlag); + cinfo->setNoSmvdConstraintFlag (m_noSmvdConstraintFlag); + cinfo->setNoProfConstraintFlag (m_noProfConstraintFlag); + cinfo->setNoPaletteConstraintFlag (m_noPaletteConstraintFlag); + cinfo->setNoActConstraintFlag (m_noActConstraintFlag); + cinfo->setNoLmcsConstraintFlag (m_noLmcsConstraintFlag); +#endif cinfo->setNoQtbttDualTreeIntraConstraintFlag(m_bNoQtbttDualTreeIntraConstraintFlag); cinfo->setNoPartitionConstraintsOverrideConstraintFlag(m_noPartitionConstraintsOverrideConstraintFlag); cinfo->setNoSaoConstraintFlag(m_bNoSaoConstraintFlag); diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp index e6a312780b66e862edb6ef4833e2f97f787c310b..33541c23f70755de8ff99b0378e71908a37a87a8 100644 --- a/source/Lib/EncoderLib/VLCWriter.cpp +++ b/source/Lib/EncoderLib/VLCWriter.cpp @@ -2624,6 +2624,10 @@ void HLSWriter::codeConstraintInfo ( const ConstraintInfo* cinfo ) WRITE_CODE(cinfo->getMaxBitDepthConstraintIdc(), 4, "max_bitdepth_constraint_idc" ); WRITE_CODE(cinfo->getMaxChromaFormatConstraintIdc(), 2, "max_chroma_format_constraint_idc" ); +#if JVET_R0286_GCI_CLEANUP + WRITE_FLAG(cinfo->getSingleLayerConstraintFlag(), "single_layer_constraint_flag"); + WRITE_FLAG(cinfo->getAllLayersIndependentConstraintFlag(), "all_layers_independent_constraint_flag"); +#endif WRITE_FLAG(cinfo->getNoResChangeInClvsConstraintFlag(), "no_res_change_in_clvs_constraint_flag"); WRITE_FLAG(cinfo->getOneTilePerPicConstraintFlag(), "one_tile_per_pic_constraint_flag"); WRITE_FLAG(cinfo->getOneSlicePerPicConstraintFlag(), "one_slice_per_pic_constraint_flag"); @@ -2635,6 +2639,11 @@ void HLSWriter::codeConstraintInfo ( const ConstraintInfo* cinfo ) WRITE_FLAG(cinfo->getNoAlfConstraintFlag() ? 1 : 0, "no_alf_constraint_flag"); WRITE_FLAG(cinfo->getNoCCAlfConstraintFlag() ? 1 : 0, "no_ccalf_constraint_flag"); WRITE_FLAG(cinfo->getNoJointCbCrConstraintFlag() ? 1 : 0, "no_joint_cbcr_constraint_flag"); +#if JVET_R0286_GCI_CLEANUP + WRITE_FLAG(cinfo->getNoMrlConstraintFlag() ? 1 : 0, "no_mrl_constraint_flag"); + WRITE_FLAG(cinfo->getNoIspConstraintFlag() ? 1 : 0, "no_isp_constraint_flag"); + WRITE_FLAG(cinfo->getNoMipConstraintFlag() ? 1 : 0, "no_mip_constraint_flag"); +#endif WRITE_FLAG(cinfo->getNoRefWraparoundConstraintFlag() ? 1 : 0, "no_ref_wraparound_constraint_flag"); WRITE_FLAG(cinfo->getNoTemporalMvpConstraintFlag() ? 1 : 0, "no_temporal_mvp_constraint_flag"); WRITE_FLAG(cinfo->getNoSbtmvpConstraintFlag() ? 1 : 0, "no_sbtmvp_constraint_flag"); @@ -2644,7 +2653,15 @@ void HLSWriter::codeConstraintInfo ( const ConstraintInfo* cinfo ) WRITE_FLAG(cinfo->getNoCclmConstraintFlag() ? 1 : 0, "no_cclm_constraint_flag"); WRITE_FLAG(cinfo->getNoMtsConstraintFlag() ? 1 : 0, "no_mts_constraint_flag"); WRITE_FLAG(cinfo->getNoSbtConstraintFlag() ? 1 : 0, "no_sbt_constraint_flag"); +#if JVET_R0286_GCI_CLEANUP + WRITE_FLAG(cinfo->getNoLfnstConstraintFlag() ? 1 : 0, "no_lfnst_constraint_flag"); +#endif WRITE_FLAG(cinfo->getNoAffineMotionConstraintFlag() ? 1 : 0, "no_affine_motion_constraint_flag"); +#if JVET_R0286_GCI_CLEANUP + WRITE_FLAG(cinfo->getNoMmvdConstraintFlag() ? 1 : 0, "no_mmvd_constraint_flag"); + WRITE_FLAG(cinfo->getNoSmvdConstraintFlag() ? 1 : 0, "no_smvd_constraint_flag"); + WRITE_FLAG(cinfo->getNoProfConstraintFlag() ? 1 : 0, "no_prof_constraint_flag"); +#endif WRITE_FLAG(cinfo->getNoBcwConstraintFlag() ? 1 : 0, "no_bcw_constraint_flag"); WRITE_FLAG(cinfo->getNoIbcConstraintFlag() ? 1 : 0, "no_ibc_constraint_flag"); WRITE_FLAG(cinfo->getNoCiipConstraintFlag() ? 1 : 0, "no_ciip_constraint_flag"); @@ -2653,6 +2670,11 @@ void HLSWriter::codeConstraintInfo ( const ConstraintInfo* cinfo ) WRITE_FLAG(cinfo->getNoLadfConstraintFlag() ? 1 : 0, "no_ladf_constraint_flag"); WRITE_FLAG(cinfo->getNoTransformSkipConstraintFlag() ? 1 : 0, "no_transform_skip_constraint_flag"); WRITE_FLAG(cinfo->getNoBDPCMConstraintFlag() ? 1 : 0, "no_bdpcm_constraint_flag"); +#if JVET_R0286_GCI_CLEANUP + WRITE_FLAG(cinfo->getNoPaletteConstraintFlag() ? 1 : 0, "no_palette_constraint_flag"); + WRITE_FLAG(cinfo->getNoActConstraintFlag() ? 1 : 0, "no_act_constraint_flag"); + WRITE_FLAG(cinfo->getNoLmcsConstraintFlag() ? 1 : 0, "no_lmcs_constraint_flag"); +#endif WRITE_FLAG(cinfo->getNoQpDeltaConstraintFlag() ? 1 : 0, "no_qp_delta_constraint_flag"); WRITE_FLAG(cinfo->getNoDepQuantConstraintFlag() ? 1 : 0, "no_dep_quant_constraint_flag"); WRITE_FLAG(cinfo->getNoSignDataHidingConstraintFlag() ? 1 : 0, "no_sign_data_hiding_constraint_flag");