diff --git a/source/Lib/CommonLib/Slice.h b/source/Lib/CommonLib/Slice.h index f8206364b6554414c96668e2a7cde78ef1d9170d..aff1913a55e41a1631c055f7ee7f121473c058de 100644 --- a/source/Lib/CommonLib/Slice.h +++ b/source/Lib/CommonLib/Slice.h @@ -936,8 +936,8 @@ public: OPI() : m_olsinfopresentflag (false) , m_htidinfopresentflag (false) - , m_opiolsidx (MAX_INT) - , m_opihtidplus1 (MAX_INT) + , m_opiolsidx (-1) + , m_opihtidplus1 (-1) {}; virtual ~OPI() {}; diff --git a/source/Lib/EncoderLib/AnnexBwrite.h b/source/Lib/EncoderLib/AnnexBwrite.h index e696e68f68c43584380426beef03ce5ff2c9dc49..d9007085fbe75a4cc0b1bbaf37f9c8a4e88f5975 100644 --- a/source/Lib/EncoderLib/AnnexBwrite.h +++ b/source/Lib/EncoderLib/AnnexBwrite.h @@ -78,8 +78,14 @@ std::vector<uint32_t> writeAnnexBAccessUnit(std::ostream& out, const AccessUnit& for (AccessUnit::const_iterator it = au.begin(); it != au.end(); it++) { const NALUnitEBSP& nalu = **it; +#if JVET_S0163_ON_TARGETOLS_SUBLAYERS + const bool useLongStartCode = (it == au.begin() || nalu.m_nalUnitType == NAL_UNIT_OPI || nalu.m_nalUnitType == NAL_UNIT_DCI || nalu.m_nalUnitType == NAL_UNIT_VPS || nalu.m_nalUnitType == NAL_UNIT_SPS + || nalu.m_nalUnitType == NAL_UNIT_PPS || nalu.m_nalUnitType == NAL_UNIT_PREFIX_APS || nalu.m_nalUnitType == NAL_UNIT_SUFFIX_APS); +#else const bool useLongStartCode = (it == au.begin() || nalu.m_nalUnitType == NAL_UNIT_DCI || nalu.m_nalUnitType == NAL_UNIT_VPS || nalu.m_nalUnitType == NAL_UNIT_SPS || nalu.m_nalUnitType == NAL_UNIT_PPS || nalu.m_nalUnitType == NAL_UNIT_PREFIX_APS || nalu.m_nalUnitType == NAL_UNIT_SUFFIX_APS); +#endif + const uint32_t size = writeAnnexBNalUnit(out, nalu, useLongStartCode); annexBsizes.push_back(size); diff --git a/source/Lib/EncoderLib/EncCfg.h b/source/Lib/EncoderLib/EncCfg.h index 943f64604d45a5b295109249e6854c3fd81cb892..b4b60bab2815549fe1b411600ef8d739239e0a02 100644 --- a/source/Lib/EncoderLib/EncCfg.h +++ b/source/Lib/EncoderLib/EncCfg.h @@ -1800,8 +1800,8 @@ public: #if JVET_S0163_ON_TARGETOLS_SUBLAYERS bool getOPIEnabled() { return m_OPIEnabled; } void setOPIEnabled(bool i) { m_OPIEnabled = i; } - void setHtidPlus1(int HTid) { if (HTid != MAX_INT) { m_opi.setHtidInfoPresentFlag(true); m_opi.setOpiHtidPlus1(HTid);} } - void setTargetOlsIdx(int TOlsIdx) { if (TOlsIdx != MAX_INT) { m_opi.setOlsInfoPresentFlag(true); m_opi.setOpiOlsIdx(TOlsIdx); } } + void setHtidPlus1(int HTid) { m_opi.setHtidInfoPresentFlag(true); m_opi.setOpiHtidPlus1(HTid); } + void setTargetOlsIdx(int TOlsIdx) { m_opi.setOlsInfoPresentFlag(true); m_opi.setOpiOlsIdx(TOlsIdx); } #endif bool getDCIEnabled() { return m_DCIEnabled; } diff --git a/source/Lib/EncoderLib/EncLib.cpp b/source/Lib/EncoderLib/EncLib.cpp index c798e0bb18cc26db7d85f5677585c851c0c6d463..0b72d2c1e7abea96fa5ff56065459a99eaf0c34d 100644 --- a/source/Lib/EncoderLib/EncLib.cpp +++ b/source/Lib/EncoderLib/EncLib.cpp @@ -234,7 +234,7 @@ void EncLib::init( bool isFieldCoding, AUWriterIf* auWriterIf ) xInitVPS( sps0 ); #if JVET_S0163_ON_TARGETOLS_SUBLAYERS - xInitOPI(m_opi, sps0); + xInitOPI(m_opi); #endif xInitDCI(m_dci, sps0); #if ENABLE_SPLIT_PARALLELISM @@ -1151,15 +1151,20 @@ void EncLib::xInitVPS( const SPS& sps ) } #if JVET_S0163_ON_TARGETOLS_SUBLAYERS -void EncLib::xInitOPI(OPI& opi, const SPS& sps) +void EncLib::xInitOPI(OPI& opi) { - if (opi.getOpiOlsIdx() == MAX_INT && m_vps) + if (m_OPIEnabled && m_vps) { - opi.setOpiOlsIdx(m_vps->deriveTargetOLSIdx()); - } - if (opi.getOpiHtidPlus1() == MAX_INT && m_vps) - { - opi.setOpiHtidPlus1(m_vps->getMaxTidinTOls(opi.getOpiOlsIdx()) + 1); + if (!opi.getOlsInfoPresentFlag()) + { + opi.setOpiOlsIdx(m_vps->deriveTargetOLSIdx()); + opi.setOlsInfoPresentFlag(true); + } + if (!opi.getHtidInfoPresentFlag()) + { + opi.setOpiHtidPlus1(m_vps->getMaxTidinTOls(opi.getOpiOlsIdx()) + 1); + opi.setHtidInfoPresentFlag(true); + } } } #endif diff --git a/source/Lib/EncoderLib/EncLib.h b/source/Lib/EncoderLib/EncLib.h index 09479c49840573620da1c48973f18cd81d1f0357..61b9d9b4c12e1fa3e0c8bc2c928c9c88bd2f1c1b 100644 --- a/source/Lib/EncoderLib/EncLib.h +++ b/source/Lib/EncoderLib/EncLib.h @@ -168,7 +168,7 @@ public: protected: void xGetNewPicBuffer ( std::list<PelUnitBuf*>& rcListPicYuvRecOut, Picture*& rpcPic, int ppsId ); ///< get picture buffer which will be processed. If ppsId<0, then the ppsMap will be queried for the first match. #if JVET_S0163_ON_TARGETOLS_SUBLAYERS - void xInitOPI(OPI& opi, const SPS& sps); ///< initialize Operating point Information (OPI) from encoder options + void xInitOPI(OPI& opi); ///< initialize Operating point Information (OPI) from encoder options #endif void xInitDCI(DCI& dci, const SPS& sps); ///< initialize Decoding Capability Information (DCI) from encoder options void xInitVPS( const SPS& sps ); ///< initialize VPS from encoder options