From 2216066879af116fbaf986fcfa87cc79fce5cc3c Mon Sep 17 00:00:00 2001 From: yonghe <yonghe@qti.qualcomm.com> Date: Thu, 30 Jul 2020 14:28:20 -0700 Subject: [PATCH] (1) move frame_only_constraint_flag and single_layer_constraint_flag outside the GCI syntax structure into the PTL syntax structure (2) rename single_layer_constraint_flag to multi_layer_enabled_flag (3) change ptl_alignment_zero_bit to ptl_reserved_zero_bit --- source/App/EncoderApp/EncApp.cpp | 18 ++++++++++++ source/App/EncoderApp/EncAppCfg.cpp | 6 ++++ source/App/EncoderApp/EncAppCfg.h | 9 +++++- source/Lib/CommonLib/ParameterSetManager.cpp | 4 +++ source/Lib/CommonLib/Slice.cpp | 9 +++++- source/Lib/CommonLib/Slice.h | 29 ++++++++++++++++---- source/Lib/CommonLib/TypeDef.h | 2 ++ source/Lib/DecoderLib/VLCReader.cpp | 21 ++++++++++++++ source/Lib/EncoderLib/EncCfg.h | 21 ++++++++++++-- source/Lib/EncoderLib/EncLib.cpp | 8 ++++++ source/Lib/EncoderLib/VLCWriter.cpp | 17 ++++++++++++ 11 files changed, 133 insertions(+), 11 deletions(-) diff --git a/source/App/EncoderApp/EncApp.cpp b/source/App/EncoderApp/EncApp.cpp index efcfbc0a0..350bbbae8 100644 --- a/source/App/EncoderApp/EncApp.cpp +++ b/source/App/EncoderApp/EncApp.cpp @@ -201,6 +201,12 @@ void EncApp::xInitLibCfg() ptls[0].setLevelIdc ( m_level ); ptls[0].setProfileIdc ( m_profile); ptls[0].setTierFlag ( m_levelTier ); +#if JVET_S0138_GCI_PTL + ptls[0].setFrameOnlyConstraintFlag ( m_frameOnlyConstraintFlag); + ptls[0].setMultiLayerEnabledFlag ( m_multiLayerEnabledFlag); + CHECK( (m_profile == Profile::MAIN_10 || m_profile == Profile::MAIN_444_10) && m_multiLayerEnabledFlag, "ptl_multilayer_enabled_flag shall be equal to 0 for Main 10 and Main 10 4:4:4 profiles"); + CHECK( !m_multiLayerEnabledFlag && m_maxLayers > 1, "There is only one layer in the CVS when ptl_multilayer_enabled_flag equal to 0"); +#endif ptls[0].setNumSubProfile ( m_numSubProfile ); for (int i = 0; i < m_numSubProfile; i++) { @@ -214,6 +220,10 @@ void EncApp::xInitLibCfg() vps.setVPSExtensionFlag ( false ); m_cEncLib.setProfile ( m_profile); m_cEncLib.setLevel ( m_levelTier, m_level); +#if JVET_S0138_GCI_PTL + m_cEncLib.setFrameOnlyConstraintFlag ( m_frameOnlyConstraintFlag); + m_cEncLib.setMultiLayerEnabledFlag ( m_multiLayerEnabledFlag); +#endif m_cEncLib.setNumSubProfile ( m_numSubProfile ); for (int i = 0; i < m_numSubProfile; i++) { @@ -252,12 +262,16 @@ void EncApp::xInitLibCfg() m_cEncLib.setPicHeaderInSliceHeaderConstraintFlag(m_picHeaderInSliceHeaderConstraintFlag); m_cEncLib.setOneSlicePerPicConstraintFlag(m_oneSlicePerPicConstraintFlag); m_cEncLib.setOneSubpicPerPicConstraintFlag(m_oneSubpicPerPicConstraintFlag); +#if !JVET_S0138_GCI_PTL m_cEncLib.setFrameOnlyConstraintFlag(m_frameOnlyConstraintFlag); +#endif m_cEncLib.setOnePictureOnlyConstraintFlag(m_onePictureOnlyConstraintFlag); m_cEncLib.setIntraOnlyConstraintFlag(m_intraOnlyConstraintFlag); m_cEncLib.setNoIdrConstraintFlag(m_noIdrConstraintFlag); m_cEncLib.setNoGdrConstraintFlag(m_noGdrConstraintFlag); +#if !JVET_S0138_GCI_PTL m_cEncLib.setSingleLayerConstraintFlag(m_singleLayerConstraintFlag); +#endif m_cEncLib.setAllLayersIndependentConstraintFlag(m_allLayersIndependentConstraintFlag); m_cEncLib.setNoQpDeltaConstraintFlag(m_bNoQpDeltaConstraintFlag); @@ -406,14 +420,18 @@ void EncApp::xInitLibCfg() { m_cEncLib.setNonPackedConstraintFlag(false); m_cEncLib.setNonProjectedConstraintFlag(false); +#if !JVET_S0138_GCI_PTL m_cEncLib.setSingleLayerConstraintFlag(false); +#endif m_cEncLib.setAllLayersIndependentConstraintFlag(false); m_cEncLib.setNoResChangeInClvsConstraintFlag(false); m_cEncLib.setOneTilePerPicConstraintFlag(false); m_cEncLib.setPicHeaderInSliceHeaderConstraintFlag(false); m_cEncLib.setOneSlicePerPicConstraintFlag(false); m_cEncLib.setOneSubpicPerPicConstraintFlag(false); +#if !JVET_S0138_GCI_PTL m_cEncLib.setFrameOnlyConstraintFlag(false); +#endif m_cEncLib.setOnePictureOnlyConstraintFlag(false); m_cEncLib.setIntraOnlyConstraintFlag(false); m_cEncLib.setMaxBitDepthConstraintIdc(16); diff --git a/source/App/EncoderApp/EncAppCfg.cpp b/source/App/EncoderApp/EncAppCfg.cpp index 0b71aa07e..9c9df95b7 100644 --- a/source/App/EncoderApp/EncAppCfg.cpp +++ b/source/App/EncoderApp/EncAppCfg.cpp @@ -765,6 +765,10 @@ bool EncAppCfg::parseCfg( int argc, char* argv[] ) ("Profile", extendedProfile, ExtendedProfileName::NONE, "Profile name to use for encoding. Use main_10, main_10_still_picture, main_444_10, main_444_10_still_picture, auto, or none") ("Level", m_level, Level::NONE, "Level limit to be used, eg 5.1, or none") ("Tier", m_levelTier, Level::MAIN, "Tier to use for interpretation of --Level (main or high only)") +#if JVET_S0138_GCI_PTL + ("FrameOnlyConstraintFlag", m_frameOnlyConstraintFlag, true, "Bitstream contains only frames") + ("MultiLayerEnabledFlag", m_multiLayerEnabledFlag, false, "Bitstream might contain more than one layer") +#endif ("SubProfile", cfg_SubProfile, cfg_SubProfile, "Sub-profile idc") ("EnableDecodingCapabilityInformation", m_DCIEnabled, false, "Enables writing of Decoding Capability Information") ("MaxBitDepthConstraint", m_bitDepthConstraint, 0u, "Bit depth to use for profile-constraint for RExt profiles. 0=automatically choose based upon other parameters") @@ -831,8 +835,10 @@ bool EncAppCfg::parseCfg( int argc, char* argv[] ) #if JVET_S0050_GCI ("VirtualBoundaryConstraintFlag", m_noVirtualBoundaryConstraintFlag, false, "Indicate that virtual boundary is deactivated") #endif +#if !JVET_S0138_GCI_PTL ("SingleLayerConstraintFlag", m_singleLayerConstraintFlag, false, "Indicate that the bitstream contains only one layer") ("FrameOnlyConstraintFlag", m_frameOnlyConstraintFlag, false, "Indicate that the bitstream contains only frames") +#endif #if !JVET_S0266_VUI_length ("NonPackedSourceConstraintFlag", m_nonPackedConstraintFlag, false, "Indicate that source does not contain frame packing") ("NonProjectedConstraintFlag", m_nonProjectedConstraintFlag, false, "Indicate that the bitstream contains projection SEI messages") diff --git a/source/App/EncoderApp/EncAppCfg.h b/source/App/EncoderApp/EncAppCfg.h index 810978a12..4dd814ed5 100644 --- a/source/App/EncoderApp/EncAppCfg.h +++ b/source/App/EncoderApp/EncAppCfg.h @@ -137,7 +137,9 @@ protected: bool m_bIntraOnlyConstraintFlag; uint32_t m_maxBitDepthConstraintIdc; int m_maxChromaFormatConstraintIdc; +#if !JVET_S0138_GCI_PTL bool m_singleLayerConstraintFlag; +#endif bool m_allLayersIndependentConstraintFlag; bool m_noMrlConstraintFlag; bool m_noIspConstraintFlag; @@ -192,6 +194,10 @@ protected: Profile::Name m_profile; Level::Tier m_levelTier; Level::Name m_level; +#if JVET_S0138_GCI_PTL + bool m_frameOnlyConstraintFlag; + bool m_multiLayerEnabledFlag; +#endif std::vector<uint32_t> m_subProfile; uint8_t m_numSubProfile; @@ -206,8 +212,9 @@ protected: bool m_picHeaderInSliceHeaderConstraintFlag; bool m_oneSlicePerPicConstraintFlag; bool m_oneSubpicPerPicConstraintFlag; +#if !JVET_S0138_GCI_PTL bool m_frameOnlyConstraintFlag; - +#endif // coding structure int m_iIntraPeriod; ///< period of I-slice (random access period) int m_iDecodingRefreshType; ///< random access type diff --git a/source/Lib/CommonLib/ParameterSetManager.cpp b/source/Lib/CommonLib/ParameterSetManager.cpp index 48118e390..389751391 100644 --- a/source/Lib/CommonLib/ParameterSetManager.cpp +++ b/source/Lib/CommonLib/ParameterSetManager.cpp @@ -151,6 +151,10 @@ ProfileTierLevel::ProfileTierLevel() , m_numSubProfile(0) , m_subProfileIdc(0) , m_levelIdc (Level::NONE) +#if JVET_S0138_GCI_PTL + , m_frameOnlyConstraintFlag(1) + , m_multiLayerEnabledFlag(0) +#endif { ::memset(m_subLayerLevelPresentFlag, 0, sizeof(m_subLayerLevelPresentFlag )); ::memset(m_subLayerLevelIdc, Level::NONE, sizeof(m_subLayerLevelIdc )); diff --git a/source/Lib/CommonLib/Slice.cpp b/source/Lib/CommonLib/Slice.cpp index 0b6b1de8d..0404573bb 100644 --- a/source/Lib/CommonLib/Slice.cpp +++ b/source/Lib/CommonLib/Slice.cpp @@ -4492,14 +4492,17 @@ bool operator == (const ConstraintInfo& op1, const ConstraintInfo& o #if !JVET_S0266_VUI_length if( op1.m_nonPackedConstraintFlag != op2.m_nonPackedConstraintFlag ) return false; #endif +#if !JVET_S0138_GCI_PTL if( op1.m_frameOnlyConstraintFlag != op2.m_frameOnlyConstraintFlag ) return false; +#endif if( op1.m_intraOnlyConstraintFlag != op2.m_intraOnlyConstraintFlag ) return false; if( op1.m_maxBitDepthConstraintIdc != op2.m_maxBitDepthConstraintIdc ) return false; 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_S0138_GCI_PTL if (op1.m_singleLayerConstraintFlag != op2.m_singleLayerConstraintFlag ) return false; +#endif 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; @@ -4561,6 +4564,10 @@ bool operator == (const ProfileTierLevel& op1, const ProfileTierLeve if (op1.m_profileIdc != op2.m_profileIdc) return false; if (op1.m_numSubProfile != op2.m_numSubProfile) return false; if (op1.m_levelIdc != op2.m_levelIdc) return false; +#if JVET_S0138_GCI_PTL + if (op1.m_frameOnlyConstraintFlag != op2.m_frameOnlyConstraintFlag) return false; + if (op1.m_multiLayerEnabledFlag != op2.m_multiLayerEnabledFlag) return false; +#endif if (op1.m_constraintInfo != op2.m_constraintInfo) return false; if (op1.m_subProfileIdc != op2.m_subProfileIdc) return false; diff --git a/source/Lib/CommonLib/Slice.h b/source/Lib/CommonLib/Slice.h index 23b108c2c..de1f09b1a 100644 --- a/source/Lib/CommonLib/Slice.h +++ b/source/Lib/CommonLib/Slice.h @@ -247,14 +247,17 @@ class ConstraintInfo bool m_picHeaderInSliceHeaderConstraintFlag; bool m_oneSlicePerPicConstraintFlag; bool m_oneSubpicPerPicConstraintFlag; +#if !JVET_S0138_GCI_PTL bool m_frameOnlyConstraintFlag; +#endif bool m_intraOnlyConstraintFlag; uint32_t m_maxBitDepthConstraintIdc; int m_maxChromaFormatConstraintIdc; bool m_onePictureOnlyConstraintFlag; bool m_lowerBitRateConstraintFlag; - +#if !JVET_S0138_GCI_PTL bool m_singleLayerConstraintFlag; +#endif bool m_allLayersIndependentConstraintFlag; bool m_noMrlConstraintFlag; bool m_noIspConstraintFlag; @@ -324,7 +327,9 @@ public: , m_picHeaderInSliceHeaderConstraintFlag(false) , m_oneSlicePerPicConstraintFlag(false) , m_oneSubpicPerPicConstraintFlag(false) +#if !JVET_S0138_GCI_PTL , m_frameOnlyConstraintFlag (false) +#endif , m_intraOnlyConstraintFlag (false) #if JVET_S0094_CHROMAFORMAT_BITDEPTH_CONSTRAINT , m_maxBitDepthConstraintIdc ( 16) @@ -335,8 +340,9 @@ public: #endif , m_onePictureOnlyConstraintFlag (false) , m_lowerBitRateConstraintFlag (false ) - +#if !JVET_S0138_GCI_PTL , m_singleLayerConstraintFlag(false) +#endif , m_allLayersIndependentConstraintFlag(false) , m_noMrlConstraintFlag(false) , m_noIspConstraintFlag(false) @@ -399,10 +405,10 @@ public: bool getNonPackedConstraintFlag() const { return m_nonPackedConstraintFlag; } void setNonPackedConstraintFlag(bool b) { m_nonPackedConstraintFlag = b; } #endif - +#if !JVET_S0138_GCI_PTL bool getFrameOnlyConstraintFlag() const { return m_frameOnlyConstraintFlag; } void setFrameOnlyConstraintFlag(bool b) { m_frameOnlyConstraintFlag = b; } - +#endif uint32_t getMaxBitDepthConstraintIdc() const { return m_maxBitDepthConstraintIdc; } void setMaxBitDepthConstraintIdc(uint32_t bitDepth) { m_maxBitDepthConstraintIdc = bitDepth; } @@ -437,9 +443,10 @@ public: bool getLowerBitRateConstraintFlag() const { return m_lowerBitRateConstraintFlag; } void setLowerBitRateConstraintFlag(bool b) { m_lowerBitRateConstraintFlag = b; } - +#if !JVET_S0138_GCI_PTL bool getSingleLayerConstraintFlag() const { return m_singleLayerConstraintFlag; } void setSingleLayerConstraintFlag(bool b) { m_singleLayerConstraintFlag = b; } +#endif bool getAllLayersIndependentConstraintFlag() const { return m_allLayersIndependentConstraintFlag; } void setAllLayersIndependentConstraintFlag(bool b) { m_allLayersIndependentConstraintFlag = b; } bool getNoMrlConstraintFlag() const { return m_noMrlConstraintFlag; } @@ -550,7 +557,10 @@ class ProfileTierLevel uint8_t m_numSubProfile; std::vector<uint32_t> m_subProfileIdc; Level::Name m_levelIdc; - +#if JVET_S0138_GCI_PTL + bool m_frameOnlyConstraintFlag; + bool m_multiLayerEnabledFlag; +#endif ConstraintInfo m_constraintInfo; bool m_subLayerLevelPresentFlag[MAX_TLAYER - 1]; Level::Name m_subLayerLevelIdc[MAX_TLAYER]; @@ -573,6 +583,13 @@ public: Level::Name getLevelIdc() const { return m_levelIdc; } void setLevelIdc(Level::Name x) { m_levelIdc = x; } +#if JVET_S0138_GCI_PTL + bool getFrameOnlyConstraintFlag() const { return m_frameOnlyConstraintFlag; } + void setFrameOnlyConstraintFlag(bool x) { m_frameOnlyConstraintFlag = x; } + + bool getMultiLayerEnabledFlag() const { return m_multiLayerEnabledFlag; } + void setMultiLayerEnabledFlag(bool x) { m_multiLayerEnabledFlag = x; } +#endif ConstraintInfo* getConstraintInfo() { return &m_constraintInfo; } const ConstraintInfo* getConstraintInfo() const { return &m_constraintInfo; } diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index c3ee47652..5044c730a 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -128,6 +128,8 @@ // Constrain the value of one_subpic_per_pic_constraint_flag, one_slice_per_pic_constraint_flag and no_aps_constraint_flag // Remove all constraints that require GCI fields to be equal to a value that imposes a constraint +#define JVET_S0138_GCI_PTL 1 // JVET-S_Notes_d9: move frame_only_constraint_flag and single_layer_constraint_flag into PTL for easy access + #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 1cc4fada1..5656e019e 100644 --- a/source/Lib/DecoderLib/VLCReader.cpp +++ b/source/Lib/DecoderLib/VLCReader.cpp @@ -2217,6 +2217,9 @@ void HLSyntaxReader::parseSPS(SPS* pcSPS) } READ_FLAG( uiCode, "field_seq_flag"); pcSPS->setFieldSeqFlag(uiCode); +#if JVET_S0138_GCI_PTL + CHECK( pcSPS->getProfileTierLevel()->getFrameOnlyConstraintFlag() && uiCode, "When ptl_frame_only_constraint_flag equal to 1 , the value of sps_field_seq_flag shall be equal to 0"); +#endif READ_FLAG( uiCode, "vui_parameters_present_flag" ); pcSPS->setVuiParametersPresentFlag(uiCode); @@ -2468,7 +2471,11 @@ void HLSyntaxReader::parseVPS(VPS* pcVPS) int cnt = 0; while (m_pcBitstream->getNumBitsUntilByteAligned()) { +#if JVET_S0138_GCI_PTL + READ_FLAG( uiCode, "vps_ptl_reserved_zero_bit"); +#else READ_FLAG( uiCode, "vps_ptl_alignment_zero_bit"); +#endif CHECK(uiCode!=0, "Alignment bit is not '0'"); cnt++; } @@ -4580,7 +4587,9 @@ void HLSyntaxReader::parseConstraintInfo(ConstraintInfo *cinfo) #if !JVET_S0266_VUI_length READ_FLAG(symbol, "general_non_packed_constraint_flag" ); cinfo->setNonPackedConstraintFlag(symbol ? true : false); #endif +#if !JVET_S0138_GCI_PTL READ_FLAG(symbol, "general_frame_only_constraint_flag" ); cinfo->setFrameOnlyConstraintFlag(symbol ? true : false); +#endif #if !JVET_S0266_VUI_length READ_FLAG(symbol, "general_non_projected_constraint_flag" ); cinfo->setNonProjectedConstraintFlag(symbol ? true : false); #endif @@ -4595,7 +4604,9 @@ 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); #endif +#if !JVET_S0138_GCI_PTL READ_FLAG(symbol, "single_layer_constraint_flag"); cinfo->setSingleLayerConstraintFlag(symbol ? true : false); +#endif READ_FLAG(symbol, "all_layers_independent_constraint_flag"); cinfo->setAllLayersIndependentConstraintFlag(symbol ? true : false); #if !JVET_S0050_GCI if (cinfo->getSingleLayerConstraintFlag()) @@ -4797,6 +4808,12 @@ void HLSyntaxReader::parseProfileTierLevel(ProfileTierLevel *ptl, bool profileTi READ_CODE( 8, symbol, "general_level_idc" ); ptl->setLevelIdc( Level::Name( symbol ) ); +#if JVET_S0138_GCI_PTL + READ_FLAG( symbol, "ptl_frame_only_constraint_flag" ); ptl->setFrameOnlyConstraintFlag(symbol); + READ_FLAG( symbol, "ptl_multilayer_enabled_flag" ); ptl->setMultiLayerEnabledFlag(symbol); + CHECK( (ptl->getProfileIdc() == Profile::MAIN_10 || ptl->getProfileIdc() == Profile::MAIN_444_10) && symbol, "ptl_multilayer_enabled_flag shall be equal to 0 for Main 10 and Main 10 4:4:4 profiles"); +#endif + if(profileTierPresentFlag) { #if JVET_S0179_CONDITIONAL_SIGNAL_GCI @@ -4818,7 +4835,11 @@ void HLSyntaxReader::parseProfileTierLevel(ProfileTierLevel *ptl, bool profileTi while (!isByteAligned()) { +#if JVET_S0138_GCI_PTL + READ_FLAG( symbol, "ptl_reserved_zero_bit" ); CHECK (symbol != 0, "ptl_reserved_zero_bit not equal to zero"); +#else READ_FLAG( symbol, "ptl_alignment_zero_bit" ); CHECK (symbol != 0, "ptl_alignment_zero_bit not equal to zero"); +#endif } for (int i = 0; i < maxNumSubLayersMinus1; i++) diff --git a/source/Lib/EncoderLib/EncCfg.h b/source/Lib/EncoderLib/EncCfg.h index f43263277..c3f2ecb1d 100644 --- a/source/Lib/EncoderLib/EncCfg.h +++ b/source/Lib/EncoderLib/EncCfg.h @@ -182,8 +182,9 @@ protected: bool m_bIntraOnlyConstraintFlag; uint32_t m_maxBitDepthConstraintIdc; int m_maxChromaFormatConstraintIdc; - +#if !JVET_S0138_GCI_PTL bool m_singleLayerConstraintFlag; +#endif bool m_allLayersIndependentConstraintFlag; bool m_noMrlConstraintFlag; bool m_noIspConstraintFlag; @@ -238,6 +239,10 @@ protected: Profile::Name m_profile; Level::Tier m_levelTier; Level::Name m_level; +#if JVET_S0138_GCI_PTL + bool m_frameOnlyConstraintFlag; + bool m_multiLayerEnabledFlag; +#endif std::vector<uint32_t> m_subProfile; uint8_t m_numSubProfile; bool m_nonPackedConstraintFlag; @@ -247,7 +252,9 @@ protected: bool m_picHeaderInSliceHeaderConstraintFlag; bool m_oneSlicePerPicConstraintFlag; bool m_oneSubpicPerPicConstraintFlag; +#if !JVET_S0138_GCI_PTL bool m_frameOnlyConstraintFlag; +#endif bool m_intraOnlyConstraintFlag; //====== Coding Structure ======== @@ -765,6 +772,12 @@ public: void setProfile(Profile::Name profile) { m_profile = profile; } void setLevel(Level::Tier tier, Level::Name level) { m_levelTier = tier; m_level = level; } +#if JVET_S0138_GCI_PTL + bool getFrameOnlyConstraintFlag() const { return m_frameOnlyConstraintFlag; } + void setFrameOnlyConstraintFlag(bool b) { m_frameOnlyConstraintFlag = b; } + bool getMultiLayerEnabledFlag() const { return m_multiLayerEnabledFlag; } + void setMultiLayerEnabledFlag(bool b) { m_multiLayerEnabledFlag = b; } +#endif void setNumSubProfile( uint8_t numSubProfile) { m_numSubProfile = numSubProfile; m_subProfile.resize(m_numSubProfile); } void setSubProfile( int i, uint32_t subProfile) { m_subProfile[i] = subProfile; } @@ -781,8 +794,10 @@ public: bool getGciPresentFlag() const { return m_gciPresentFlag; } void setGciPresentFlag(bool b) { m_gciPresentFlag = b; } #endif +#if !JVET_S0138_GCI_PTL bool getSingleLayerConstraintFlag() const { return m_singleLayerConstraintFlag; } void setSingleLayerConstraintFlag(bool bVal) { m_singleLayerConstraintFlag = bVal; } +#endif bool getAllLayersIndependentConstraintFlag() const { return m_allLayersIndependentConstraintFlag; } void setAllLayersIndependentConstraintFlag(bool bVal) { m_allLayersIndependentConstraintFlag = bVal; } bool getNoMrlConstraintFlag() const { return m_noMrlConstraintFlag; } @@ -1855,10 +1870,10 @@ public: bool getOneSubpicPerPicConstraintFlag() const { return m_oneSubpicPerPicConstraintFlag; } void setOneSubpicPerPicConstraintFlag(bool b) { m_oneSubpicPerPicConstraintFlag = b; } - +#if !JVET_S0138_GCI_PTL bool getFrameOnlyConstraintFlag() const { return m_frameOnlyConstraintFlag; } void setFrameOnlyConstraintFlag(bool b) { m_frameOnlyConstraintFlag = b; } - +#endif void setSummaryOutFilename(const std::string &s) { m_summaryOutFilename = s; } const std::string& getSummaryOutFilename() const { return m_summaryOutFilename; } void setSummaryPicFilenameBase(const std::string &s) { m_summaryPicFilenameBase = s; } diff --git a/source/Lib/EncoderLib/EncLib.cpp b/source/Lib/EncoderLib/EncLib.cpp index 2f1662b12..631765e53 100644 --- a/source/Lib/EncoderLib/EncLib.cpp +++ b/source/Lib/EncoderLib/EncLib.cpp @@ -1128,12 +1128,16 @@ void EncLib::xInitSPS( SPS& sps ) cinfo->setPicHeaderInSliceHeaderConstraintFlag(m_picHeaderInSliceHeaderConstraintFlag); cinfo->setOneSlicePerPicConstraintFlag(m_oneSlicePerPicConstraintFlag); cinfo->setOneSubpicPerPicConstraintFlag(m_oneSubpicPerPicConstraintFlag); +#if !JVET_S0138_GCI_PTL cinfo->setFrameOnlyConstraintFlag (m_frameOnlyConstraintFlag); +#endif cinfo->setOnePictureOnlyConstraintFlag(m_onePictureOnlyConstraintFlag); cinfo->setIntraOnlyConstraintFlag (m_intraOnlyConstraintFlag); cinfo->setMaxBitDepthConstraintIdc (m_maxBitDepthConstraintIdc); cinfo->setMaxChromaFormatConstraintIdc((int)m_maxChromaFormatConstraintIdc); +#if !JVET_S0138_GCI_PTL cinfo->setSingleLayerConstraintFlag (m_singleLayerConstraintFlag); +#endif cinfo->setAllLayersIndependentConstraintFlag (m_allLayersIndependentConstraintFlag); cinfo->setNoMrlConstraintFlag (m_noMrlConstraintFlag); cinfo->setNoIspConstraintFlag (m_noIspConstraintFlag); @@ -1187,6 +1191,10 @@ void EncLib::xInitSPS( SPS& sps ) profileTierLevel->setLevelIdc (m_level); profileTierLevel->setTierFlag (m_levelTier); profileTierLevel->setProfileIdc (m_profile); +#if JVET_S0138_GCI_PTL + profileTierLevel->setFrameOnlyConstraintFlag (m_frameOnlyConstraintFlag); + profileTierLevel->setMultiLayerEnabledFlag (m_multiLayerEnabledFlag); +#endif profileTierLevel->setNumSubProfile(m_numSubProfile); for (int k = 0; k < m_numSubProfile; k++) { diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp index 6deccd7f2..b3d40be91 100644 --- a/source/Lib/EncoderLib/VLCWriter.cpp +++ b/source/Lib/EncoderLib/VLCWriter.cpp @@ -1542,7 +1542,11 @@ void HLSWriter::codeVPS(const VPS* pcVPS) int cnt = 0; while (m_pcBitIf->getNumBitsUntilByteAligned()) { +#if JVET_S0138_GCI_PTL + WRITE_FLAG( 0, "vps_ptl_reserved_zero_bit"); +#else WRITE_FLAG( 0, "vps_ptl_alignment_zero_bit"); +#endif cnt++; } CHECK(cnt>=8, "More than '8' alignment bytes written"); @@ -2660,7 +2664,9 @@ void HLSWriter::codeConstraintInfo ( const ConstraintInfo* cinfo ) #if !JVET_S0266_VUI_length WRITE_FLAG(cinfo->getNonPackedConstraintFlag(), "general_non_packed_constraint_flag" ); #endif +#if !JVET_S0138_GCI_PTL WRITE_FLAG(cinfo->getFrameOnlyConstraintFlag(), "general_frame_only_constraint_flag" ); +#endif #if !JVET_S0266_VUI_length WRITE_FLAG(cinfo->getNonProjectedConstraintFlag(), "general_non_projected_constraint_flag"); #endif @@ -2674,7 +2680,9 @@ 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" ); #endif +#if !JVET_S0138_GCI_PTL WRITE_FLAG(cinfo->getSingleLayerConstraintFlag(), "single_layer_constraint_flag"); +#endif WRITE_FLAG(cinfo->getAllLayersIndependentConstraintFlag(), "all_layers_independent_constraint_flag"); WRITE_FLAG(cinfo->getNoResChangeInClvsConstraintFlag(), "no_res_change_in_clvs_constraint_flag"); WRITE_FLAG(cinfo->getOneTilePerPicConstraintFlag(), "one_tile_per_pic_constraint_flag"); @@ -2759,6 +2767,11 @@ void HLSWriter::codeProfileTierLevel ( const ProfileTierLevel* ptl, bool pro WRITE_CODE( int( ptl->getLevelIdc() ), 8, "general_level_idc" ); +#if JVET_S0138_GCI_PTL + WRITE_FLAG( ptl->getFrameOnlyConstraintFlag(), "ptl_frame_only_constraint_flag" ); + WRITE_FLAG( ptl->getMultiLayerEnabledFlag(), "ptl_multilayer_enabled_flag" ); +#endif + if(profileTierPresentFlag) { #if JVET_S0179_CONDITIONAL_SIGNAL_GCI @@ -2778,7 +2791,11 @@ void HLSWriter::codeProfileTierLevel ( const ProfileTierLevel* ptl, bool pro while (!isByteAligned()) { +#if JVET_S0138_GCI_PTL + WRITE_FLAG(0, "ptl_reserved_zero_bit"); +#else WRITE_FLAG(0, "ptl_alignment_zero_bit"); +#endif } for(int i = 0; i < maxNumSubLayersMinus1; i++) -- GitLab