From b4f6a0ae89d21ca74af938bf7cebb8c1ce5f58ad Mon Sep 17 00:00:00 2001 From: Xiang Ma <maxiang6@huawei.com> Date: Fri, 3 Apr 2020 16:51:00 +0800 Subject: [PATCH 1/3] fix the general HRD parameters identical checking --- source/Lib/DecoderLib/DecLib.cpp | 59 ++++++++++++++++++++++++++++- source/Lib/DecoderLib/DecLib.h | 4 ++ source/Lib/DecoderLib/VLCReader.cpp | 30 --------------- source/Lib/DecoderLib/VLCReader.h | 6 --- 4 files changed, 62 insertions(+), 37 deletions(-) diff --git a/source/Lib/DecoderLib/DecLib.cpp b/source/Lib/DecoderLib/DecLib.cpp index 27e5483bd1..fe59551b3a 100644 --- a/source/Lib/DecoderLib/DecLib.cpp +++ b/source/Lib/DecoderLib/DecLib.cpp @@ -428,6 +428,8 @@ bool tryDecodePicture( Picture* pcEncPic, const int expectedPoc, const std::stri DecLib::DecLib() : m_iMaxRefPicNum(0) + , m_isFirstGeneralHrd(true) + , m_prevGeneralHrdParams() , m_associatedIRAPType(NAL_UNIT_INVALID) #if JVET_P0978_RPL_RESTRICTIONS , m_associatedIRAPDecodingOrderNumber(0) @@ -1447,7 +1449,47 @@ void DecLib::xActivateParameterSets( const int layerId ) } xCheckParameterSetConstraints(layerId); } +void DecLib::xCheckGeneralHrdParametersIdentical(const GeneralHrdParams* generalHrdParams1, const GeneralHrdParams* generalHrdParams2) +{ + bool isIdentical = true; + if ((generalHrdParams1->getNumUnitsInTick() != generalHrdParams2->getNumUnitsInTick()) + || (generalHrdParams1->getTimeScale() != generalHrdParams2->getTimeScale()) + || (generalHrdParams1->getGeneralNalHrdParametersPresentFlag() != generalHrdParams2->getGeneralNalHrdParametersPresentFlag()) + || (generalHrdParams1->getGeneralVclHrdParametersPresentFlag() != generalHrdParams2->getGeneralVclHrdParametersPresentFlag()) + || (generalHrdParams1->getGeneralSamPicTimingInAllOlsFlag() != generalHrdParams2->getGeneralSamPicTimingInAllOlsFlag()) + || (generalHrdParams1->getGeneralDecodingUnitHrdParamsPresentFlag() != generalHrdParams2->getGeneralDecodingUnitHrdParamsPresentFlag()) + || (generalHrdParams1->getGeneralDecodingUnitHrdParamsPresentFlag()?(generalHrdParams1->getTickDivisorMinus2() != generalHrdParams2->getTickDivisorMinus2()):0) + || (generalHrdParams1->getBitRateScale() != generalHrdParams2->getBitRateScale()) + || (generalHrdParams1->getCpbSizeScale() != generalHrdParams2->getCpbSizeScale()) + || (generalHrdParams1->getGeneralDecodingUnitHrdParamsPresentFlag() ? (generalHrdParams1->getCpbSizeDuScale() != generalHrdParams2->getCpbSizeDuScale()):0) + || (generalHrdParams1->getHrdCpbCntMinus1() != generalHrdParams2->getHrdCpbCntMinus1()) + ) + { + isIdentical = false; + } + CHECK(!isIdentical, "It is a requirement of bitstream conformance that the content of the general_hrd_parameters( ) syntax structure present in any VPSs or SPSs in the bitstream shall be identical"); +} +void DecLib::xCopyGeneralHrdParameters(GeneralHrdParams* generalHrdParamsDst, const GeneralHrdParams* generalHrdParamsSrc) +{ + generalHrdParamsDst->setNumUnitsInTick(generalHrdParamsSrc->getNumUnitsInTick()); + generalHrdParamsDst->setTimeScale(generalHrdParamsSrc->getTimeScale()); + generalHrdParamsDst->setGeneralNalHrdParametersPresentFlag(generalHrdParamsSrc->getGeneralNalHrdParametersPresentFlag()); + generalHrdParamsDst->setGeneralVclHrdParametersPresentFlag(generalHrdParamsSrc->getGeneralVclHrdParametersPresentFlag()); + generalHrdParamsDst->setGeneralSamPicTimingInAllOlsFlag(generalHrdParamsSrc->getGeneralSamPicTimingInAllOlsFlag()); + generalHrdParamsDst->setGeneralDecodingUnitHrdParamsPresentFlag(generalHrdParamsSrc->getGeneralDecodingUnitHrdParamsPresentFlag()); + if (generalHrdParamsDst->getGeneralDecodingUnitHrdParamsPresentFlag()) + { + generalHrdParamsDst->setTickDivisorMinus2(generalHrdParamsSrc->getTickDivisorMinus2()); + } + generalHrdParamsDst->setBitRateScale(generalHrdParamsSrc->getBitRateScale()); + generalHrdParamsDst->setCpbSizeScale(generalHrdParamsSrc->getCpbSizeScale()); + if (generalHrdParamsDst->getGeneralDecodingUnitHrdParamsPresentFlag()) + { + generalHrdParamsDst->setCpbSizeDuScale(generalHrdParamsSrc->getCpbSizeDuScale()); + } + generalHrdParamsDst->setHrdCpbCntMinus1(generalHrdParamsSrc->getHrdCpbCntMinus1()); +} void DecLib::xCheckParameterSetConstraints(const int layerId) { // Conformance checks @@ -1457,7 +1499,22 @@ void DecLib::xCheckParameterSetConstraints(const int layerId) #if JVET_Q0814_DPB const VPS *vps = slice->getVPS(); #endif - + if (((vps!=nullptr)&&(vps->getVPSGeneralHrdParamsPresentFlag()))||(sps->getGeneralHrdParametersPresentFlag())) + { + if (((vps != nullptr) && (vps->getVPSGeneralHrdParamsPresentFlag())) && (sps->getGeneralHrdParametersPresentFlag())) + { + xCheckGeneralHrdParametersIdentical(vps->getGeneralHrdParameters(),sps->getGeneralHrdParameters()); + } + if (m_isFirstGeneralHrd) + { + xCopyGeneralHrdParameters(&m_prevGeneralHrdParams, sps->getGeneralHrdParametersPresentFlag() ? sps->getGeneralHrdParameters() : vps->getGeneralHrdParameters()); + } + else + { + xCheckGeneralHrdParametersIdentical(&m_prevGeneralHrdParams, sps->getGeneralHrdParametersPresentFlag() ? sps->getGeneralHrdParameters() : vps->getGeneralHrdParameters()); + } + } + m_isFirstGeneralHrd = false; #if SPS_ID_CHECK static std::unordered_map<int, int> m_clvssSPSid; diff --git a/source/Lib/DecoderLib/DecLib.h b/source/Lib/DecoderLib/DecLib.h index c9cc7f40e0..79088fead1 100644 --- a/source/Lib/DecoderLib/DecLib.h +++ b/source/Lib/DecoderLib/DecLib.h @@ -69,6 +69,8 @@ class DecLib { private: int m_iMaxRefPicNum; + bool m_isFirstGeneralHrd; + GeneralHrdParams m_prevGeneralHrdParams; NalUnitType m_associatedIRAPType; ///< NAL unit type of the associated IRAP picture #if JVET_P0978_RPL_RESTRICTIONS @@ -274,6 +276,8 @@ protected: void xCreateUnavailablePicture(int iUnavailablePoc, bool longTermFlag, const int layerId, const bool interLayerRefPicFlag); void xActivateParameterSets( const int layerId ); void xCheckParameterSetConstraints( const int layerId ); + void xCheckGeneralHrdParametersIdentical(const GeneralHrdParams* generalHrdParams1, const GeneralHrdParams* generalHrdParams2); + void xCopyGeneralHrdParameters(GeneralHrdParams* generalHrdParamsDst, const GeneralHrdParams* generalHrdParamsSrc); void xDecodePicHeader( InputNALUnit& nalu ); bool xDecodeSlice(InputNALUnit &nalu, int &iSkipFrame, int iPOCLastDisplay); void xDecodeVPS( InputNALUnit& nalu ); diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp index c2fc987af5..418ff1c382 100644 --- a/source/Lib/DecoderLib/VLCReader.cpp +++ b/source/Lib/DecoderLib/VLCReader.cpp @@ -282,10 +282,6 @@ void FDReader::parseFillerData(InputBitstream* bs, uint32_t &fdSize) // ==================================================================================================================== HLSyntaxReader::HLSyntaxReader() -#if JVET_P0118_HRD_ASPECTS - : m_isFirstGeneralHrd(true) - , m_prevGeneralHrdParams(NULL) -#endif { } @@ -1335,32 +1331,6 @@ void HLSyntaxReader::parseGeneralHrdParameters(GeneralHrdParams *hrd) } READ_UVLC(symbol, "hrd_cpb_cnt_minus1"); hrd->setHrdCpbCntMinus1(symbol); CHECK(symbol > 31,"The value of hrd_cpb_cnt_minus1 shall be in the range of 0 to 31, inclusive"); - if (!m_isFirstGeneralHrd) - { - checkGeneralHrdParametersIdentical(hrd); - } - m_prevGeneralHrdParams = hrd; - m_isFirstGeneralHrd = false; -} -void HLSyntaxReader::checkGeneralHrdParametersIdentical(GeneralHrdParams *generalHrd) -{ - bool isIdentical = true; - if ( (generalHrd->getNumUnitsInTick()!= m_prevGeneralHrdParams->getNumUnitsInTick()) - || (generalHrd->getTimeScale()!= m_prevGeneralHrdParams->getTimeScale()) - || (generalHrd->getGeneralNalHrdParametersPresentFlag()!= m_prevGeneralHrdParams->getGeneralNalHrdParametersPresentFlag()) - || (generalHrd->getGeneralVclHrdParametersPresentFlag()!= m_prevGeneralHrdParams->getGeneralVclHrdParametersPresentFlag()) - || (generalHrd->getGeneralSamPicTimingInAllOlsFlag()!= m_prevGeneralHrdParams->getGeneralSamPicTimingInAllOlsFlag()) - || (generalHrd->getGeneralDecodingUnitHrdParamsPresentFlag()!= m_prevGeneralHrdParams->getGeneralDecodingUnitHrdParamsPresentFlag()) - || (generalHrd->getTickDivisorMinus2()!= m_prevGeneralHrdParams->getTickDivisorMinus2()) - || (generalHrd->getBitRateScale()!= m_prevGeneralHrdParams->getBitRateScale()) - || (generalHrd->getCpbSizeScale()!= m_prevGeneralHrdParams->getCpbSizeScale()) - || (generalHrd->getCpbSizeDuScale()!= m_prevGeneralHrdParams->getCpbSizeDuScale()) - || (generalHrd->getHrdCpbCntMinus1()!= m_prevGeneralHrdParams->getHrdCpbCntMinus1()) - ) - { - isIdentical = false; - } - CHECK(!isIdentical, "It is a requirement of bitstream conformance that the content of the general_hrd_parameters( ) syntax structure present in any VPSs or SPSs in the bitstream shall be identical"); } #endif #if JVET_P0118_HRD_ASPECTS diff --git a/source/Lib/DecoderLib/VLCReader.h b/source/Lib/DecoderLib/VLCReader.h index 53be7eb0b4..c51828fc9b 100644 --- a/source/Lib/DecoderLib/VLCReader.h +++ b/source/Lib/DecoderLib/VLCReader.h @@ -146,11 +146,6 @@ public: class HLSyntaxReader : public VLCReader { -#if JVET_P0118_HRD_ASPECTS -private: - bool m_isFirstGeneralHrd; - GeneralHrdParams* m_prevGeneralHrdParams; -#endif public: HLSyntaxReader(); virtual ~HLSyntaxReader(); @@ -181,7 +176,6 @@ public: void parseProfileTierLevel ( ProfileTierLevel *ptl, int maxNumSubLayersMinus1); #endif #if JVET_P0118_HRD_ASPECTS - void checkGeneralHrdParametersIdentical(GeneralHrdParams *generalHr); void parseOlsHrdParameters(GeneralHrdParams* generalHrd, OlsHrdParams *olsHrd, uint32_t firstSubLayer, uint32_t tempLevelHigh); #else void parseHrdParameters ( HRDParameters *hrd, uint32_t firstSubLayer, uint32_t tempLevelHigh ); -- GitLab From aac39c6d1062012fbaf334d77eb30880f4384cf5 Mon Sep 17 00:00:00 2001 From: Xiang Ma <maxiang6@huawei.com> Date: Mon, 6 Apr 2020 09:47:53 +0800 Subject: [PATCH 2/3] fix the copy operation. --- source/Lib/DecoderLib/DecLib.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/source/Lib/DecoderLib/DecLib.cpp b/source/Lib/DecoderLib/DecLib.cpp index fe59551b3a..d198fc3d44 100644 --- a/source/Lib/DecoderLib/DecLib.cpp +++ b/source/Lib/DecoderLib/DecLib.cpp @@ -1505,14 +1505,11 @@ void DecLib::xCheckParameterSetConstraints(const int layerId) { xCheckGeneralHrdParametersIdentical(vps->getGeneralHrdParameters(),sps->getGeneralHrdParameters()); } - if (m_isFirstGeneralHrd) - { - xCopyGeneralHrdParameters(&m_prevGeneralHrdParams, sps->getGeneralHrdParametersPresentFlag() ? sps->getGeneralHrdParameters() : vps->getGeneralHrdParameters()); - } - else + if (!m_isFirstGeneralHrd) { xCheckGeneralHrdParametersIdentical(&m_prevGeneralHrdParams, sps->getGeneralHrdParametersPresentFlag() ? sps->getGeneralHrdParameters() : vps->getGeneralHrdParameters()); } + xCopyGeneralHrdParameters(&m_prevGeneralHrdParams, sps->getGeneralHrdParametersPresentFlag() ? sps->getGeneralHrdParameters() : vps->getGeneralHrdParameters()); } m_isFirstGeneralHrd = false; #if SPS_ID_CHECK -- GitLab From 4eaa5986ef6298b7c07022dcdaeb44fce7b1ff46 Mon Sep 17 00:00:00 2001 From: Xiang Ma <maxiang6@huawei.com> Date: Wed, 8 Apr 2020 21:35:05 +0800 Subject: [PATCH 3/3] change comparison and assignment process into operator --- source/Lib/CommonLib/HRD.h | 40 +++++++++++++++++++++++++- source/Lib/DecoderLib/DecLib.cpp | 49 ++++---------------------------- source/Lib/DecoderLib/DecLib.h | 2 -- 3 files changed, 44 insertions(+), 47 deletions(-) diff --git a/source/Lib/CommonLib/HRD.h b/source/Lib/CommonLib/HRD.h index b2e7bd2970..5147df1fae 100644 --- a/source/Lib/CommonLib/HRD.h +++ b/source/Lib/CommonLib/HRD.h @@ -172,7 +172,45 @@ public: ,m_hrdCpbCntMinus1(0) #endif {} - +#if JVET_P0118_HRD_ASPECTS + bool operator==(const GeneralHrdParams& other) const + { + return (m_numUnitsInTick == other.m_numUnitsInTick + && m_timeScale == other.m_timeScale + && m_generalNalHrdParamsPresentFlag == other.m_generalNalHrdParamsPresentFlag + && m_generalVclHrdParamsPresentFlag == other.m_generalVclHrdParamsPresentFlag + && m_generalSamPicTimingInAllOlsFlag == other.m_generalSamPicTimingInAllOlsFlag + && m_generalDecodingUnitHrdParamsPresentFlag == other.m_generalDecodingUnitHrdParamsPresentFlag + && (m_generalDecodingUnitHrdParamsPresentFlag ? (m_tickDivisorMinus2 == other.m_tickDivisorMinus2): 1) + && m_bitRateScale == other.m_bitRateScale + && m_cpbSizeScale == other.m_cpbSizeScale + && (m_generalDecodingUnitHrdParamsPresentFlag ? (m_cpbSizeDuScale == other.m_cpbSizeDuScale) : 1) + && m_hrdCpbCntMinus1 == other.m_hrdCpbCntMinus1 + ); + } + + GeneralHrdParams& operator=(const GeneralHrdParams& input) + { + m_numUnitsInTick = input.m_numUnitsInTick; + m_timeScale = input.m_timeScale; + m_generalNalHrdParamsPresentFlag = input.m_generalNalHrdParamsPresentFlag; + m_generalVclHrdParamsPresentFlag = input.m_generalVclHrdParamsPresentFlag; + m_generalSamPicTimingInAllOlsFlag = input.m_generalSamPicTimingInAllOlsFlag; + m_generalDecodingUnitHrdParamsPresentFlag = input.m_generalDecodingUnitHrdParamsPresentFlag; + if (input.m_generalDecodingUnitHrdParamsPresentFlag) + { + m_tickDivisorMinus2 = input.m_tickDivisorMinus2; + } + m_bitRateScale = input.m_bitRateScale; + m_cpbSizeScale = input.m_cpbSizeScale; + if (input.m_generalDecodingUnitHrdParamsPresentFlag) + { + m_cpbSizeDuScale = input.m_cpbSizeDuScale; + } + m_hrdCpbCntMinus1 = input.m_hrdCpbCntMinus1; + return *this; + } +#endif #if JVET_P0118_HRD_ASPECTS virtual ~GeneralHrdParams() {} #else diff --git a/source/Lib/DecoderLib/DecLib.cpp b/source/Lib/DecoderLib/DecLib.cpp index d198fc3d44..baab208939 100644 --- a/source/Lib/DecoderLib/DecLib.cpp +++ b/source/Lib/DecoderLib/DecLib.cpp @@ -1449,47 +1449,6 @@ void DecLib::xActivateParameterSets( const int layerId ) } xCheckParameterSetConstraints(layerId); } -void DecLib::xCheckGeneralHrdParametersIdentical(const GeneralHrdParams* generalHrdParams1, const GeneralHrdParams* generalHrdParams2) -{ - bool isIdentical = true; - if ((generalHrdParams1->getNumUnitsInTick() != generalHrdParams2->getNumUnitsInTick()) - || (generalHrdParams1->getTimeScale() != generalHrdParams2->getTimeScale()) - || (generalHrdParams1->getGeneralNalHrdParametersPresentFlag() != generalHrdParams2->getGeneralNalHrdParametersPresentFlag()) - || (generalHrdParams1->getGeneralVclHrdParametersPresentFlag() != generalHrdParams2->getGeneralVclHrdParametersPresentFlag()) - || (generalHrdParams1->getGeneralSamPicTimingInAllOlsFlag() != generalHrdParams2->getGeneralSamPicTimingInAllOlsFlag()) - || (generalHrdParams1->getGeneralDecodingUnitHrdParamsPresentFlag() != generalHrdParams2->getGeneralDecodingUnitHrdParamsPresentFlag()) - || (generalHrdParams1->getGeneralDecodingUnitHrdParamsPresentFlag()?(generalHrdParams1->getTickDivisorMinus2() != generalHrdParams2->getTickDivisorMinus2()):0) - || (generalHrdParams1->getBitRateScale() != generalHrdParams2->getBitRateScale()) - || (generalHrdParams1->getCpbSizeScale() != generalHrdParams2->getCpbSizeScale()) - || (generalHrdParams1->getGeneralDecodingUnitHrdParamsPresentFlag() ? (generalHrdParams1->getCpbSizeDuScale() != generalHrdParams2->getCpbSizeDuScale()):0) - || (generalHrdParams1->getHrdCpbCntMinus1() != generalHrdParams2->getHrdCpbCntMinus1()) - ) - { - isIdentical = false; - } - CHECK(!isIdentical, "It is a requirement of bitstream conformance that the content of the general_hrd_parameters( ) syntax structure present in any VPSs or SPSs in the bitstream shall be identical"); -} - -void DecLib::xCopyGeneralHrdParameters(GeneralHrdParams* generalHrdParamsDst, const GeneralHrdParams* generalHrdParamsSrc) -{ - generalHrdParamsDst->setNumUnitsInTick(generalHrdParamsSrc->getNumUnitsInTick()); - generalHrdParamsDst->setTimeScale(generalHrdParamsSrc->getTimeScale()); - generalHrdParamsDst->setGeneralNalHrdParametersPresentFlag(generalHrdParamsSrc->getGeneralNalHrdParametersPresentFlag()); - generalHrdParamsDst->setGeneralVclHrdParametersPresentFlag(generalHrdParamsSrc->getGeneralVclHrdParametersPresentFlag()); - generalHrdParamsDst->setGeneralSamPicTimingInAllOlsFlag(generalHrdParamsSrc->getGeneralSamPicTimingInAllOlsFlag()); - generalHrdParamsDst->setGeneralDecodingUnitHrdParamsPresentFlag(generalHrdParamsSrc->getGeneralDecodingUnitHrdParamsPresentFlag()); - if (generalHrdParamsDst->getGeneralDecodingUnitHrdParamsPresentFlag()) - { - generalHrdParamsDst->setTickDivisorMinus2(generalHrdParamsSrc->getTickDivisorMinus2()); - } - generalHrdParamsDst->setBitRateScale(generalHrdParamsSrc->getBitRateScale()); - generalHrdParamsDst->setCpbSizeScale(generalHrdParamsSrc->getCpbSizeScale()); - if (generalHrdParamsDst->getGeneralDecodingUnitHrdParamsPresentFlag()) - { - generalHrdParamsDst->setCpbSizeDuScale(generalHrdParamsSrc->getCpbSizeDuScale()); - } - generalHrdParamsDst->setHrdCpbCntMinus1(generalHrdParamsSrc->getHrdCpbCntMinus1()); -} void DecLib::xCheckParameterSetConstraints(const int layerId) { // Conformance checks @@ -1499,19 +1458,21 @@ void DecLib::xCheckParameterSetConstraints(const int layerId) #if JVET_Q0814_DPB const VPS *vps = slice->getVPS(); #endif +#if JVET_P0118_HRD_ASPECTS if (((vps!=nullptr)&&(vps->getVPSGeneralHrdParamsPresentFlag()))||(sps->getGeneralHrdParametersPresentFlag())) { if (((vps != nullptr) && (vps->getVPSGeneralHrdParamsPresentFlag())) && (sps->getGeneralHrdParametersPresentFlag())) { - xCheckGeneralHrdParametersIdentical(vps->getGeneralHrdParameters(),sps->getGeneralHrdParameters()); + CHECK(!(*vps->getGeneralHrdParameters() == *sps->getGeneralHrdParameters()), "It is a requirement of bitstream conformance that the content of the general_hrd_parameters( ) syntax structure present in any VPSs or SPSs in the bitstream shall be identical"); } if (!m_isFirstGeneralHrd) { - xCheckGeneralHrdParametersIdentical(&m_prevGeneralHrdParams, sps->getGeneralHrdParametersPresentFlag() ? sps->getGeneralHrdParameters() : vps->getGeneralHrdParameters()); + CHECK(!(m_prevGeneralHrdParams == (sps->getGeneralHrdParametersPresentFlag() ? *sps->getGeneralHrdParameters() : *vps->getGeneralHrdParameters())), "It is a requirement of bitstream conformance that the content of the general_hrd_parameters( ) syntax structure present in any VPSs or SPSs in the bitstream shall be identical"); } - xCopyGeneralHrdParameters(&m_prevGeneralHrdParams, sps->getGeneralHrdParametersPresentFlag() ? sps->getGeneralHrdParameters() : vps->getGeneralHrdParameters()); + m_prevGeneralHrdParams = (sps->getGeneralHrdParametersPresentFlag() ? *sps->getGeneralHrdParameters() : *vps->getGeneralHrdParameters()); } m_isFirstGeneralHrd = false; +#endif #if SPS_ID_CHECK static std::unordered_map<int, int> m_clvssSPSid; diff --git a/source/Lib/DecoderLib/DecLib.h b/source/Lib/DecoderLib/DecLib.h index 79088fead1..051f3e72d5 100644 --- a/source/Lib/DecoderLib/DecLib.h +++ b/source/Lib/DecoderLib/DecLib.h @@ -276,8 +276,6 @@ protected: void xCreateUnavailablePicture(int iUnavailablePoc, bool longTermFlag, const int layerId, const bool interLayerRefPicFlag); void xActivateParameterSets( const int layerId ); void xCheckParameterSetConstraints( const int layerId ); - void xCheckGeneralHrdParametersIdentical(const GeneralHrdParams* generalHrdParams1, const GeneralHrdParams* generalHrdParams2); - void xCopyGeneralHrdParameters(GeneralHrdParams* generalHrdParamsDst, const GeneralHrdParams* generalHrdParamsSrc); void xDecodePicHeader( InputNALUnit& nalu ); bool xDecodeSlice(InputNALUnit &nalu, int &iSkipFrame, int iPOCLastDisplay); void xDecodeVPS( InputNALUnit& nalu ); -- GitLab