diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index 4b254718a6255a8f1cd66d3b55f6c0abf57bf402..056594713c9a77fd9f000ad0055cdf2ff9182ab2 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -160,6 +160,8 @@ // JVET-S0195: replace one_subpic_per_pic_constraint_flag with no_subpic_info_constraint_flag and its semantics // add no_idr_rpl_constraint_flag +#define JVET_S0105_GCI_REORDER_IN_CATEGORY 1 // JVET-S0105: reorder and categorize GCI flags (assumes the following macros set to 1: JVET_S0050_GCI, JVET_S0113_S0195_GCI, JVET_S0066_GCI, JVET_S0138_GCI_PTL) + #define JVET_S0182_RPL_SIGNALLING 1 // JVET-S0182: modifications to rpl information signalling #define JVET_S0185_PROPOSAl1_PICTURE_TIMING_CLEANUP 1 // JVET-S0185: Proposal 1, put syntax element pt_cpb_removal_delay_minus1[] first, followed by similar information for sub-layers, followed by pt_dpb_output_delay diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp index c5b46369cb699f35b61ae2c29cf3bb2e60b0e329..d4f4bfd03a18e10ccd015c22c769db288f0b77e9 100644 --- a/source/Lib/DecoderLib/VLCReader.cpp +++ b/source/Lib/DecoderLib/VLCReader.cpp @@ -4650,6 +4650,92 @@ void HLSyntaxReader::parseConstraintInfo(ConstraintInfo *cinfo) if (cinfo->getGciPresentFlag()) { #endif +#if JVET_S0105_GCI_REORDER_IN_CATEGORY + /* general */ + READ_FLAG(symbol, "gci_intra_only_constraint_flag"); cinfo->setIntraOnlyConstraintFlag(symbol ? true : false); + READ_FLAG(symbol, "gci_all_layers_independent_constraint_flag"); cinfo->setAllLayersIndependentConstraintFlag(symbol ? true : false); + READ_FLAG(symbol, "gci_one_au_only_constraint_flag"); cinfo->setOnePictureOnlyConstraintFlag(symbol ? true : false); + + /* picture format */ + READ_CODE(4, symbol, "gci_sixteen_minus_max_bitdepth_constraint_idc"); cinfo->setMaxBitDepthConstraintIdc(symbol>8 ? 16 : (16 - symbol)); + CHECK(symbol>8, "gci_sixteen_minus_max_bitdepth_constraint_idc shall be in the range 0 to 8, inclusive"); + READ_CODE(2, symbol, "gci_three_minus_max_chroma_format_constraint_idc"); cinfo->setMaxChromaFormatConstraintIdc((ChromaFormat)(3 - symbol)); + + /* NAL unit type related */ + READ_FLAG(symbol, "gci_no_mixed_nalu_types_in_pic_constraint_flag"); cinfo->setNoMixedNaluTypesInPicConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_trail_constraint_flag"); cinfo->setNoTrailConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_stsa_constraint_flag"); cinfo->setNoStsaConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_rasl_constraint_flag"); cinfo->setNoRaslConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_radl_constraint_flag"); cinfo->setNoRadlConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_idr_constraint_flag"); cinfo->setNoIdrConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_cra_constraint_flag"); cinfo->setNoCraConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_gdr_constraint_flag"); cinfo->setNoGdrConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_aps_constraint_flag"); cinfo->setNoApsConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_idr_rpl_constraint_flag"); cinfo->setNoIdrRplConstraintFlag(symbol > 0 ? true : false); + + /* tile, slice, subpicture partitioning */ + READ_FLAG(symbol, "gci_one_tile_per_pic_constraint_flag"); cinfo->setOneTilePerPicConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_pic_header_in_slice_header_constraint_flag"); cinfo->setPicHeaderInSliceHeaderConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_one_slice_per_pic_constraint_flag"); cinfo->setOneSlicePerPicConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_rectangular_slice_constraint_flag"); cinfo->setNoRectSliceConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_one_slice_per_subpic_constraint_flag"); cinfo->setOneSlicePerSubpicConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_subpic_info_constraint_flag"); cinfo->setNoSubpicInfoConstraintFlag(symbol > 0 ? true : false); + + /* CTU and block partitioning */ + READ_CODE(2, symbol, "gci_three_minus_max_log2_ctu_size_constraint_idc"); cinfo->setMaxLog2CtuSizeConstraintIdc(((3 - symbol) + 5)); + READ_FLAG(symbol, "gci_no_partition_constraints_override_constraint_flag"); cinfo->setNoPartitionConstraintsOverrideConstraintFlag(symbol > 0 ? true : false); + //placeholder for gci_no_mtt_constraint_flag ==> S0058 + READ_FLAG(symbol, "gci_no_qtbtt_dual_tree_intra_constraint_flag"); cinfo->setNoQtbttDualTreeIntraConstraintFlag(symbol > 0 ? true : false); + + /* intra */ + READ_FLAG(symbol, "gci_no_palette_constraint_flag"); cinfo->setNoPaletteConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_ibc_constraint_flag"); cinfo->setNoIbcConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_isp_constraint_flag"); cinfo->setNoIspConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_mrl_constraint_flag"); cinfo->setNoMrlConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_mip_constraint_flag"); cinfo->setNoMipConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_cclm_constraint_flag"); cinfo->setNoCclmConstraintFlag(symbol > 0 ? true : false); + + /* inter */ + //placeholder for gci_no_ref_pic_resampling_constraint_flag ==> Q0114 + READ_FLAG(symbol, "gci_no_res_change_in_clvs_constraint_flag"); cinfo->setNoResChangeInClvsConstraintFlag(symbol > 0 ? true : false); + //placeholder for gci_no_weighted_prediction_constraint_flag ==> S0058 + READ_FLAG(symbol, "gci_no_ref_wraparound_constraint_flag"); cinfo->setNoRefWraparoundConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_temporal_mvp_constraint_flag"); cinfo->setNoTemporalMvpConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_sbtmvp_constraint_flag"); cinfo->setNoSbtmvpConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_amvr_constraint_flag"); cinfo->setNoAmvrConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_bdof_constraint_flag"); cinfo->setNoBdofConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_smvd_constraint_flag"); cinfo->setNoSmvdConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_dmvr_constraint_flag"); cinfo->setNoDmvrConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_mmvd_constraint_flag"); cinfo->setNoMmvdConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_affine_motion_constraint_flag"); cinfo->setNoAffineMotionConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_prof_constraint_flag"); cinfo->setNoProfConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_bcw_constraint_flag"); cinfo->setNoBcwConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_ciip_constraint_flag"); cinfo->setNoCiipConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_gpm_constraint_flag"); cinfo->setNoGeoConstraintFlag(symbol > 0 ? true : false); + + /* transform, quantization, residual */ + READ_FLAG(symbol, "gci_no_luma_transform_size_64_constraint_flag"); cinfo->setNoLumaTransformSize64ConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_transform_skip_constraint_flag"); cinfo->setNoTransformSkipConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_bdpcm_constraint_flag"); cinfo->setNoBDPCMConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_mts_constraint_flag"); cinfo->setNoMtsConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_lfnst_constraint_flag"); cinfo->setNoLfnstConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_joint_cbcr_constraint_flag"); cinfo->setNoJointCbCrConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_sbt_constraint_flag"); cinfo->setNoSbtConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_act_constraint_flag"); cinfo->setNoActConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_explicit_scaling_list_constraint_flag"); cinfo->setNoExplicitScaleListConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_dep_quant_constraint_flag"); cinfo->setNoDepQuantConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_sign_data_hiding_constraint_flag"); cinfo->setNoSignDataHidingConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_cu_qp_delta_constraint_flag"); cinfo->setNoQpDeltaConstraintFlag(symbol > 0 ? true : false); + //placeholder for gci_no_chroma_qp_offset_constraint_flag ==> R0341 + + /* loop filter */ + READ_FLAG(symbol, "gci_no_sao_constraint_flag"); cinfo->setNoSaoConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_alf_constraint_flag"); cinfo->setNoAlfConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_ccalf_constraint_flag"); cinfo->setNoCCAlfConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_lmcs_constraint_flag"); cinfo->setNoLmcsConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_ladf_constraint_flag"); cinfo->setNoLadfConstraintFlag(symbol > 0 ? true : false); + READ_FLAG(symbol, "gci_no_virtual_boundaries_constraint_flag"); cinfo->setNoVirtualBoundaryConstraintFlag(symbol > 0 ? true : false); +#else #if !JVET_S0266_VUI_length READ_FLAG(symbol, "general_non_packed_constraint_flag" ); cinfo->setNonPackedConstraintFlag(symbol ? true : false); #endif @@ -4871,6 +4957,7 @@ void HLSyntaxReader::parseConstraintInfo(ConstraintInfo *cinfo) #if JVET_S0050_GCI READ_FLAG(symbol, "no_virtual_boundaries_constraint_flag"); cinfo->setNoVirtualBoundaryConstraintFlag(symbol > 0 ? true : false); #endif +#endif #if JVET_S0179_CONDITIONAL_SIGNAL_GCI READ_CODE(8, symbol, "gci_num_reserved_bits"); uint32_t const numReservedBits = symbol; diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp index ace8479ba0803829a8e35cc5c01cf164ca029745..fa62e34cc6a977b248ba3f1506345bf642d4c9a2 100644 --- a/source/Lib/EncoderLib/VLCWriter.cpp +++ b/source/Lib/EncoderLib/VLCWriter.cpp @@ -2688,6 +2688,92 @@ void HLSWriter::codeConstraintInfo ( const ConstraintInfo* cinfo ) if (cinfo->getGciPresentFlag()) { #endif +#if JVET_S0105_GCI_REORDER_IN_CATEGORY + /* general */ + WRITE_FLAG(cinfo->getIntraOnlyConstraintFlag(), "gci_intra_only_constraint_flag"); + WRITE_FLAG(cinfo->getAllLayersIndependentConstraintFlag(), "gci_all_layers_independent_constraint_flag"); + WRITE_FLAG(cinfo->getOnePictureOnlyConstraintFlag(), "gci_one_au_only_constraint_flag"); + + /* picture format */ + WRITE_CODE(16 - cinfo->getMaxBitDepthConstraintIdc(), 4, "gci_sixteen_minus_max_bitdepth_constraint_idc"); + WRITE_CODE(3 - cinfo->getMaxChromaFormatConstraintIdc(), 2, "gci_three_minus_max_chroma_format_constraint_idc"); + + /* NAL unit type related */ + WRITE_FLAG(cinfo->getNoMixedNaluTypesInPicConstraintFlag() ? 1 : 0, "gci_no_mixed_nalu_types_in_pic_constraint_flag"); + WRITE_FLAG(cinfo->getNoTrailConstraintFlag() ? 1 : 0, "gci_no_trail_constraint_flag"); + WRITE_FLAG(cinfo->getNoStsaConstraintFlag() ? 1 : 0, "gci_no_stsa_constraint_flag"); + WRITE_FLAG(cinfo->getNoRaslConstraintFlag() ? 1 : 0, "gci_no_rasl_constraint_flag"); + WRITE_FLAG(cinfo->getNoRadlConstraintFlag() ? 1 : 0, "gci_no_radl_constraint_flag"); + WRITE_FLAG(cinfo->getNoIdrConstraintFlag() ? 1 : 0, "gci_no_idr_constraint_flag"); + WRITE_FLAG(cinfo->getNoCraConstraintFlag() ? 1 : 0, "gci_no_cra_constraint_flag"); + WRITE_FLAG(cinfo->getNoGdrConstraintFlag() ? 1 : 0, "gci_no_gdr_constraint_flag"); + WRITE_FLAG(cinfo->getNoApsConstraintFlag() ? 1 : 0, "gci_no_aps_constraint_flag"); + WRITE_FLAG(cinfo->getNoIdrRplConstraintFlag() ? 1: 0, "gci_no_idr_rpl_constraint_flag"); + + /* tile, slice, subpicture partitioning */ + WRITE_FLAG(cinfo->getOneTilePerPicConstraintFlag() ? 1 : 0, "gci_one_tile_per_pic_constraint_flag"); + WRITE_FLAG(cinfo->getPicHeaderInSliceHeaderConstraintFlag() ? 1 : 0, "gci_pic_header_in_slice_header_constraint_flag"); + WRITE_FLAG(cinfo->getOneSlicePerPicConstraintFlag() ? 1 : 0, "gci_one_slice_per_pic_constraint_flag"); + WRITE_FLAG(cinfo->getNoRectSliceConstraintFlag() ? 1 : 0, "gci_no_rectangular_slice_constraint_flag"); + WRITE_FLAG(cinfo->getOneSlicePerSubpicConstraintFlag() ? 1 : 0, "gci_one_slice_per_subpic_constraint_flag"); + WRITE_FLAG(cinfo->getNoSubpicInfoConstraintFlag() ? 1 : 0, "gci_no_subpic_info_constraint_flag"); + + + /* CTU and block partitioning */ + WRITE_CODE(3 - (cinfo->getMaxLog2CtuSizeConstraintIdc() - 5), 2, "gci_three_minus_max_log2_ctu_size_constraint_idc"); + WRITE_FLAG(cinfo->getNoPartitionConstraintsOverrideConstraintFlag() ? 1 : 0, "gci_no_partition_constraints_override_constraint_flag"); + //placeholder for gci_no_mtt_constraint_flag ==> S0058 + WRITE_FLAG(cinfo->getNoQtbttDualTreeIntraConstraintFlag() ? 1 : 0, "gci_no_qtbtt_dual_tree_intra_constraint_flag"); + + /* intra */ + WRITE_FLAG(cinfo->getNoPaletteConstraintFlag() ? 1 : 0, "gci_no_palette_constraint_flag"); + WRITE_FLAG(cinfo->getNoIbcConstraintFlag() ? 1 : 0, "gci_no_ibc_constraint_flag"); + WRITE_FLAG(cinfo->getNoIspConstraintFlag() ? 1 : 0, "gci_no_isp_constraint_flag"); + WRITE_FLAG(cinfo->getNoMrlConstraintFlag() ? 1 : 0, "gci_no_mrl_constraint_flag"); + WRITE_FLAG(cinfo->getNoMipConstraintFlag() ? 1 : 0, "gci_no_mip_constraint_flag"); + WRITE_FLAG(cinfo->getNoCclmConstraintFlag() ? 1 : 0, "gci_no_cclm_constraint_flag"); + + /* inter */ + //placeholder for gci_no_ref_pic_resampling_constraint_flag ==> Q0114 + WRITE_FLAG(cinfo->getNoResChangeInClvsConstraintFlag(), "gci_no_res_change_in_clvs_constraint_flag"); + //placeholder for gci_no_weighted_prediction_constraint_flag ==> S0058 + WRITE_FLAG(cinfo->getNoRefWraparoundConstraintFlag() ? 1 : 0, "gci_no_ref_wraparound_constraint_flag"); + WRITE_FLAG(cinfo->getNoTemporalMvpConstraintFlag() ? 1 : 0, "gci_no_temporal_mvp_constraint_flag"); + WRITE_FLAG(cinfo->getNoSbtmvpConstraintFlag() ? 1 : 0, "gci_no_sbtmvp_constraint_flag"); + WRITE_FLAG(cinfo->getNoAmvrConstraintFlag() ? 1 : 0, "gci_no_amvr_constraint_flag"); + WRITE_FLAG(cinfo->getNoBdofConstraintFlag() ? 1 : 0, "gci_no_bdof_constraint_flag"); + WRITE_FLAG(cinfo->getNoSmvdConstraintFlag() ? 1 : 0, "gci_no_smvd_constraint_flag"); + WRITE_FLAG(cinfo->getNoDmvrConstraintFlag() ? 1 : 0, "gci_no_dmvr_constraint_flag"); + WRITE_FLAG(cinfo->getNoMmvdConstraintFlag() ? 1 : 0, "gci_no_mmvd_constraint_flag"); + WRITE_FLAG(cinfo->getNoAffineMotionConstraintFlag() ? 1 : 0, "gci_no_affine_motion_constraint_flag"); + WRITE_FLAG(cinfo->getNoProfConstraintFlag() ? 1 : 0, "gci_no_prof_constraint_flag"); + WRITE_FLAG(cinfo->getNoBcwConstraintFlag() ? 1 : 0, "gci_no_bcw_constraint_flag"); + WRITE_FLAG(cinfo->getNoCiipConstraintFlag() ? 1 : 0, "gci_no_ciip_constraint_flag"); + WRITE_FLAG(cinfo->getNoGeoConstraintFlag() ? 1 : 0, "gci_no_gpm_constraint_flag"); + + /* transform, quantization, residual */ + WRITE_FLAG(cinfo->getNoLumaTransformSize64ConstraintFlag() ? 1 : 0, "gci_no_luma_transform_size_64_constraint_flag"); + WRITE_FLAG(cinfo->getNoTransformSkipConstraintFlag() ? 1 : 0, "gci_no_transform_skip_constraint_flag"); + WRITE_FLAG(cinfo->getNoBDPCMConstraintFlag() ? 1 : 0, "gci_no_bdpcm_constraint_flag"); + WRITE_FLAG(cinfo->getNoMtsConstraintFlag() ? 1 : 0, "gci_no_mts_constraint_flag"); + WRITE_FLAG(cinfo->getNoLfnstConstraintFlag() ? 1 : 0, "gci_no_lfnst_constraint_flag"); + WRITE_FLAG(cinfo->getNoJointCbCrConstraintFlag() ? 1 : 0, "gci_no_joint_cbcr_constraint_flag"); + WRITE_FLAG(cinfo->getNoSbtConstraintFlag() ? 1 : 0, "gci_no_sbt_constraint_flag"); + WRITE_FLAG(cinfo->getNoActConstraintFlag() ? 1 : 0, "gci_no_act_constraint_flag"); + WRITE_FLAG(cinfo->getNoExplicitScaleListConstraintFlag() ? 1 : 0, "gci_no_explicit_scaling_list_constraint_flag"); + WRITE_FLAG(cinfo->getNoDepQuantConstraintFlag() ? 1 : 0, "gci_no_dep_quant_constraint_flag"); + WRITE_FLAG(cinfo->getNoSignDataHidingConstraintFlag() ? 1 : 0, "gci_no_sign_data_hiding_constraint_flag"); + WRITE_FLAG(cinfo->getNoQpDeltaConstraintFlag() ? 1 : 0, "gci_no_qp_delta_constraint_flag"); + //placeholder for gci_no_chroma_qp_offset_constraint_flag ==> R0341 + + /* loop filter */ + WRITE_FLAG(cinfo->getNoSaoConstraintFlag() ? 1 : 0, "gci_no_sao_constraint_flag"); + WRITE_FLAG(cinfo->getNoAlfConstraintFlag() ? 1 : 0, "gci_no_alf_constraint_flag"); + WRITE_FLAG(cinfo->getNoCCAlfConstraintFlag() ? 1 : 0, "gci_no_ccalf_constraint_flag"); + WRITE_FLAG(cinfo->getNoLmcsConstraintFlag() ? 1 : 0, "gci_no_lmcs_constraint_flag"); + WRITE_FLAG(cinfo->getNoLadfConstraintFlag() ? 1 : 0, "gci_no_ladf_constraint_flag"); + WRITE_FLAG(cinfo->getNoVirtualBoundaryConstraintFlag() ? 1 : 0, "gci_no_virtual_boundaries_constraint_flag"); +#else #if !JVET_S0266_VUI_length WRITE_FLAG(cinfo->getNonPackedConstraintFlag(), "general_non_packed_constraint_flag" ); #endif @@ -2794,6 +2880,7 @@ void HLSWriter::codeConstraintInfo ( const ConstraintInfo* cinfo ) #if JVET_S0050_GCI WRITE_FLAG(cinfo->getNoVirtualBoundaryConstraintFlag() ? 1 : 0, "no_virtual_boundaries_constraint_flag"); #endif +#endif #if JVET_S0179_CONDITIONAL_SIGNAL_GCI //The value of gci_num_reserved_bits shall be equal to 0 in bitstreams conforming to this version of this Specification. //Other values of gci_num_reserved_bits are reserved for future use by ITU-T | ISO/IEC.