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