diff --git a/source/App/DecoderApp/DecApp.cpp b/source/App/DecoderApp/DecApp.cpp index fac984979b3d6431334c4ad0b38f01438265213b..5a0a44b1dd52d16666896a3b6aa13969dccbc32b 100644 --- a/source/App/DecoderApp/DecApp.cpp +++ b/source/App/DecoderApp/DecApp.cpp @@ -230,7 +230,11 @@ uint32_t DecApp::decode() { xWriteOutput( pcListPic, nalu.m_temporalId ); } +#if JVET_N0865_NONSYNTAX + if ((bNewPicture || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_CRA || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_GDR) && m_cDecLib.getNoOutputPriorPicsFlag()) +#else if ( (bNewPicture || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_CRA) && m_cDecLib.getNoOutputPriorPicsFlag() ) +#endif { m_cDecLib.checkNoOutputPriorPics( pcListPic ); m_cDecLib.setNoOutputPriorPicsFlag (false); @@ -247,8 +251,13 @@ uint32_t DecApp::decode() m_cDecLib.setFirstSliceInPicture (false); } // write reconstruction to file -- for additional bumping as defined in C.5.2.3 +#if JVET_N0865_GRA2GDR + if (!bNewPicture && ((nalu.m_nalUnitType >= NAL_UNIT_CODED_SLICE_TRAIL && nalu.m_nalUnitType <= NAL_UNIT_RESERVED_VCL_15) + || (nalu.m_nalUnitType >= NAL_UNIT_CODED_SLICE_IDR_W_RADL && nalu.m_nalUnitType <= NAL_UNIT_CODED_SLICE_GDR))) +#else if (!bNewPicture && ((nalu.m_nalUnitType >= NAL_UNIT_CODED_SLICE_TRAIL && nalu.m_nalUnitType <= NAL_UNIT_RESERVED_VCL_15) || (nalu.m_nalUnitType >= NAL_UNIT_CODED_SLICE_IDR_W_RADL && nalu.m_nalUnitType <= NAL_UNIT_CODED_SLICE_GRA))) +#endif { xWriteOutput( pcListPic, nalu.m_temporalId ); } diff --git a/source/App/EncoderApp/EncApp.cpp b/source/App/EncoderApp/EncApp.cpp index 666d81a9287e5b713f14229e14c96ad67970eea5..95b3519c1854ae8470fa1413a2dcac51146a0b72 100644 --- a/source/App/EncoderApp/EncApp.cpp +++ b/source/App/EncoderApp/EncApp.cpp @@ -956,6 +956,9 @@ void EncApp::rateStatsAccum(const AccessUnit& au, const std::vector<uint32_t>& a case NAL_UNIT_CODED_SLICE_IDR_W_RADL: case NAL_UNIT_CODED_SLICE_IDR_N_LP: case NAL_UNIT_CODED_SLICE_CRA: +#if JVET_N0865_NONSYNTAX + case NAL_UNIT_CODED_SLICE_GDR: +#endif case NAL_UNIT_CODED_SLICE_RADL: case NAL_UNIT_CODED_SLICE_RASL: case NAL_UNIT_DPS: diff --git a/source/App/Parcat/parcat.cpp b/source/App/Parcat/parcat.cpp index f5929cc16e344f95a8fa82925ed0dd905a5b298b..5377084bb0d0d9899b4e333a4f209ec89324cc70 100644 --- a/source/App/Parcat/parcat.cpp +++ b/source/App/Parcat/parcat.cpp @@ -218,7 +218,11 @@ const char * NALU_TYPE[] = "NAL_UNIT_CODED_SLICE_IDR_W_RADL", "NAL_UNIT_CODED_SLICE_IDR_N_LP", "NAL_UNIT_CODED_SLICE_CRA", +#if JVET_N0865_GRA2GDR + "NAL_UNIT_CODED_SLICE_GDR", +#else "NAL_UNIT_CODED_SLICE_GRA", +#endif "NAL_UNIT_UNSPECIFIED_28", "NAL_UNIT_UNSPECIFIED_29", "NAL_UNIT_UNSPECIFIED_30", diff --git a/source/Lib/CommonLib/NAL.h b/source/Lib/CommonLib/NAL.h index 475b1d79a86660327c2bba4782f2e67fe937b647..a5beeaabadcb212ac00ed47b3c68ac110d15c2b4 100644 --- a/source/Lib/CommonLib/NAL.h +++ b/source/Lib/CommonLib/NAL.h @@ -79,7 +79,11 @@ struct NALUnit || m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_W_RADL || m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_N_LP || m_nalUnitType == NAL_UNIT_CODED_SLICE_CRA +#if JVET_N0865_GRA2GDR + || m_nalUnitType == NAL_UNIT_CODED_SLICE_GDR +#else || m_nalUnitType == NAL_UNIT_CODED_SLICE_GRA +#endif || m_nalUnitType == NAL_UNIT_CODED_SLICE_RADL || m_nalUnitType == NAL_UNIT_CODED_SLICE_RASL; } @@ -98,8 +102,11 @@ struct NALUnit || m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_W_RADL || m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_N_LP || m_nalUnitType == NAL_UNIT_CODED_SLICE_CRA +#if JVET_N0865_GRA2GDR + || m_nalUnitType == NAL_UNIT_CODED_SLICE_GDR; +#else || m_nalUnitType == NAL_UNIT_CODED_SLICE_GRA; - +#endif } }; diff --git a/source/Lib/CommonLib/Rom.cpp b/source/Lib/CommonLib/Rom.cpp index 1f26dd1b538eefef56f835388ec5492efa30023a..780c87e3c8312ffe9143afb566c1015642ace86f 100644 --- a/source/Lib/CommonLib/Rom.cpp +++ b/source/Lib/CommonLib/Rom.cpp @@ -79,7 +79,11 @@ const char* nalUnitTypeToString(NalUnitType type) case NAL_UNIT_CODED_SLICE_IDR_W_RADL: return "IDR_W_RADL"; case NAL_UNIT_CODED_SLICE_IDR_N_LP: return "IDR_N_LP"; case NAL_UNIT_CODED_SLICE_CRA: return "CRA"; +#if JVET_N0865_GRA2GDR + case NAL_UNIT_CODED_SLICE_GDR: return "GDR"; +#else case NAL_UNIT_CODED_SLICE_GRA: return "GRA"; +#endif default: return "UNK"; } } diff --git a/source/Lib/CommonLib/Slice.cpp b/source/Lib/CommonLib/Slice.cpp index 25ff505ec5ccf42d50c8005322f8b1f6fa369879..eccce0e69325f31fe6c80a800f9580c084e38cc3 100644 --- a/source/Lib/CommonLib/Slice.cpp +++ b/source/Lib/CommonLib/Slice.cpp @@ -76,7 +76,11 @@ Slice::Slice() , m_pcPic ( NULL ) , m_colFromL0Flag ( true ) , m_noOutputPriorPicsFlag ( false ) +#if JVET_N0865_NONSYNTAX +, m_noIncorrectPicOutputFlag ( false ) +#else , m_noRaslOutputFlag ( false ) +#endif , m_handleCraAsCvsStartFlag ( false ) , m_colRefIdx ( 0 ) , m_maxNumMergeCand ( 0 ) diff --git a/source/Lib/CommonLib/Slice.h b/source/Lib/CommonLib/Slice.h index 84431823d571299fce027ce46fdb615aa6bd6375..d5d5476e7bd884c723d433f8010dfc2df3404d43 100644 --- a/source/Lib/CommonLib/Slice.h +++ b/source/Lib/CommonLib/Slice.h @@ -1691,7 +1691,11 @@ private: bool m_colFromL0Flag; // collocated picture from List0 flag bool m_noOutputPriorPicsFlag; +#if JVET_N0865_NONSYNTAX + bool m_noIncorrectPicOutputFlag; +#else bool m_noRaslOutputFlag; +#endif bool m_handleCraAsCvsStartFlag; uint32_t m_colRefIdx; @@ -1985,8 +1989,13 @@ public: void setNoOutputPriorPicsFlag( bool val ) { m_noOutputPriorPicsFlag = val; } bool getNoOutputPriorPicsFlag() const { return m_noOutputPriorPicsFlag; } +#if JVET_N0865_NONSYNTAX + void setNoIncorrectPicOutputFlag(bool val) { m_noIncorrectPicOutputFlag = val; } + bool getNoIncorrectPicOutputFlag() const { return m_noIncorrectPicOutputFlag; } +#else void setNoRaslOutputFlag( bool val ) { m_noRaslOutputFlag = val; } bool getNoRaslOutputFlag() const { return m_noRaslOutputFlag; } +#endif void setHandleCraAsCvsStartFlag( bool val ) { m_handleCraAsCvsStartFlag = val; } bool getHandleCraAsCvsStartFlag() const { return m_handleCraAsCvsStartFlag; } diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index e3bd268c9aabbbc64568cb2a9ba20600a18be462..26a34ac7dbe8e4e3769ec493ba21f398263b5dbb 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -281,6 +281,8 @@ #define JVET_N0100_PROPOSAL1 1 // JVET-N0100: ltrp picture signalling #define JVET_N0865_SYNTAX 1 // JVET_N0865 syntax elements +#define JVET_N0865_NONSYNTAX 1 // JVET_N0865 other than syntax parts +#define JVET_N0865_GRA2GDR 1 // Changing the name of GRA to GDR #define RPL_IN_IDR_FIX 1 // JVET_N0865 syntax elements @@ -1049,7 +1051,11 @@ enum NalUnitType NAL_UNIT_CODED_SLICE_IDR_W_RADL, // 24 NAL_UNIT_CODED_SLICE_IDR_N_LP, // 25 NAL_UNIT_CODED_SLICE_CRA, // 26 +#if JVET_N0865_GRA2GDR + NAL_UNIT_CODED_SLICE_GDR, // 27 +#else NAL_UNIT_CODED_SLICE_GRA, // 27 +#endif NAL_UNIT_UNSPECIFIED_28, // 29 NAL_UNIT_UNSPECIFIED_29, // 30 NAL_UNIT_UNSPECIFIED_30, // 31 diff --git a/source/Lib/DecoderLib/DecLib.cpp b/source/Lib/DecoderLib/DecLib.cpp index 0344af8456a3f221a4474ecb313112fd272209dc..ed55dc0844f1c6132ba947687d49b6ac4308c9ae 100644 --- a/source/Lib/DecoderLib/DecLib.cpp +++ b/source/Lib/DecoderLib/DecLib.cpp @@ -406,7 +406,11 @@ DecLib::DecLib() , m_bFirstSliceInBitstream(true) , m_lastPOCNoOutputPriorPics(-1) , m_isNoOutputPriorPics(false) +#if JVET_N0865_NONSYNTAX + , m_lastNoIncorrectPicOutputFlag(false) +#else , m_craNoRaslOutputFlag(false) +#endif , m_pDecodedSEIOutputStream(NULL) , m_decodedPictureHashSEIEnabled(false) , m_numberOfChecksumErrorsDetected(0) @@ -1135,6 +1139,11 @@ bool DecLib::xDecodeSlice(InputNALUnit &nalu, int &iSkipFrame, int iPOCLastDispl m_apcSlicePilot->setNalUnitType(nalu.m_nalUnitType); m_apcSlicePilot->setTLayer(nalu.m_temporalId); +#if JVET_N0865_NONSYNTAX + if (nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_GDR) + CHECK(nalu.m_temporalId != 0, "Current GDR picture has TemporalId not equal to 0"); +#endif + m_HLSReader.setBitstream( &nalu.getBitstream() ); m_HLSReader.parseSliceHeader( m_apcSlicePilot, &m_parameterSetManager, m_prevTid0POC ); @@ -1165,14 +1174,38 @@ bool DecLib::xDecodeSlice(InputNALUnit &nalu, int &iSkipFrame, int iPOCLastDispl m_apcSlicePilot->setAssociatedIRAPType(m_associatedIRAPType); //For inference of NoOutputOfPriorPicsFlag +#if JVET_N0865_NONSYNTAX + if (m_apcSlicePilot->getRapPicFlag() || m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_GDR) +#else if (m_apcSlicePilot->getRapPicFlag()) +#endif { +#if JVET_N0865_NONSYNTAX + if ((m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA && m_bFirstSliceInSequence) || + (m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA && m_apcSlicePilot->getHandleCraAsCvsStartFlag()) || + (m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_GDR && m_bFirstSliceInSequence)) + { + m_apcSlicePilot->setNoIncorrectPicOutputFlag(true); + } +#else if ((m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA && m_bFirstSliceInSequence) || (m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA && m_apcSlicePilot->getHandleCraAsCvsStartFlag())) { m_apcSlicePilot->setNoRaslOutputFlag(true); } +#endif //the inference for NoOutputPriorPicsFlag +#if JVET_N0865_NONSYNTAX + if (!m_bFirstSliceInBitstream && + (m_apcSlicePilot->getRapPicFlag() || m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_GDR) && + m_apcSlicePilot->getNoIncorrectPicOutputFlag()) + { + if (m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA || m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_GDR) + { + m_apcSlicePilot->setNoOutputPriorPicsFlag(true); + } + } +#else if (!m_bFirstSliceInBitstream && m_apcSlicePilot->getRapPicFlag() && m_apcSlicePilot->getNoRaslOutputFlag()) { if (m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA) @@ -1180,17 +1213,29 @@ bool DecLib::xDecodeSlice(InputNALUnit &nalu, int &iSkipFrame, int iPOCLastDispl m_apcSlicePilot->setNoOutputPriorPicsFlag(true); } } +#endif else { m_apcSlicePilot->setNoOutputPriorPicsFlag(false); } +#if JVET_N0865_NONSYNTAX + if (m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA || m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_GDR) + { + m_lastNoIncorrectPicOutputFlag = m_apcSlicePilot->getNoIncorrectPicOutputFlag(); + } +#else if(m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA) { m_craNoRaslOutputFlag = m_apcSlicePilot->getNoRaslOutputFlag(); } +#endif } +#if JVET_N0865_NONSYNTAX + if ((m_apcSlicePilot->getRapPicFlag() || m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_GDR) && m_apcSlicePilot->getNoOutputPriorPicsFlag()) +#else if (m_apcSlicePilot->getRapPicFlag() && m_apcSlicePilot->getNoOutputPriorPicsFlag()) +#endif { m_lastPOCNoOutputPriorPics = m_apcSlicePilot->getPOC(); m_isNoOutputPriorPics = true; @@ -1203,13 +1248,22 @@ bool DecLib::xDecodeSlice(InputNALUnit &nalu, int &iSkipFrame, int iPOCLastDispl //For inference of PicOutputFlag if (m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_RASL) { +#if JVET_N0865_NONSYNTAX + if (m_lastNoIncorrectPicOutputFlag) +#else if ( m_craNoRaslOutputFlag ) +#endif { m_apcSlicePilot->setPicOutputFlag(false); } } +#if JVET_N0865_NONSYNTAX + if ((m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA || m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_GDR) && + m_lastNoIncorrectPicOutputFlag) //Reset POC MSB when CRA or GDR has NoIncorrectPicOutputFlag equal to 1 +#else if (m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA && m_craNoRaslOutputFlag) //Reset POC MSB when CRA has NoRaslOutputFlag equal to 1 +#endif { PPS *pps = m_parameterSetManager.getPPS(m_apcSlicePilot->getPPSId()); CHECK(pps == 0, "No PPS present"); @@ -1668,6 +1722,9 @@ bool DecLib::decode(InputNALUnit& nalu, int& iSkipFrame, int& iPOCLastDisplay) case NAL_UNIT_CODED_SLICE_IDR_W_RADL: case NAL_UNIT_CODED_SLICE_IDR_N_LP: case NAL_UNIT_CODED_SLICE_CRA: +#if JVET_N0865_NONSYNTAX + case NAL_UNIT_CODED_SLICE_GDR: +#endif case NAL_UNIT_CODED_SLICE_RADL: case NAL_UNIT_CODED_SLICE_RASL: ret = xDecodeSlice(nalu, iSkipFrame, iPOCLastDisplay); diff --git a/source/Lib/DecoderLib/DecLib.h b/source/Lib/DecoderLib/DecLib.h index 737ae6db70f7d495c2a48c4d4b97eacf46c43b83..3646abb4a4d25b599349db9c1071d514f2a27094 100644 --- a/source/Lib/DecoderLib/DecLib.h +++ b/source/Lib/DecoderLib/DecLib.h @@ -117,7 +117,11 @@ private: bool m_bFirstSliceInBitstream; int m_lastPOCNoOutputPriorPics; bool m_isNoOutputPriorPics; +#if JVET_N0865_NONSYNTAX + bool m_lastNoIncorrectPicOutputFlag; //value of variable NoIncorrectPicOutputFlag of the last CRA / GDR pic +#else bool m_craNoRaslOutputFlag; //value of variable NoRaslOutputFlag of the last CRA pic +#endif std::ostream *m_pDecodedSEIOutputStream; int m_decodedPictureHashSEIEnabled; ///< Checksum(3)/CRC(2)/MD5(1)/disable(0) acting on decoded picture hash SEI message diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp index 107f5ed560de52800cddf78be94a51b942dfd5c1..179b828fb5030620152675c474320b441c45fef0 100644 --- a/source/Lib/DecoderLib/VLCReader.cpp +++ b/source/Lib/DecoderLib/VLCReader.cpp @@ -1936,7 +1936,11 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, ParameterSetManager *para READ_CODE(sps->getBitsForPOC(), uiCode, "slice_pic_order_cnt_lsb"); pcSlice->setPOC(uiCode); #if JVET_N0865_SYNTAX +#if JVET_N0865_GRA2GDR + if (pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_GDR) +#else if (pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_GRA) +#endif { READ_UVLC(uiCode, "recovery_poc_cnt"); int maxPicOrderCntLsb = (int) pow(2, pcSlice->getSPS()->getBitsForPOC()); @@ -1944,7 +1948,11 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, ParameterSetManager *para pcSlice->setRecoveryPocCnt(uiCode); pcSlice->setRpPicOrderCntVal(pcSlice->getPOC() + pcSlice->getRecoveryPocCnt()); } +#if JVET_N0865_GRA2GDR + if (pcSlice->getRapPicFlag() || (pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_GDR)) +#else if (pcSlice->getRapPicFlag() || (pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_GRA)) +#endif { READ_FLAG(uiCode, "no_output_of_prior_pics_flag"); pcSlice->setNoOutputPriorPicsFlag(uiCode); @@ -1993,7 +2001,11 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, ParameterSetManager *para } pcSlice->setPOC (iPOCmsb+iPOClsb); #if JVET_N0865_SYNTAX +#if JVET_N0865_GRA2GDR + if (pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_GDR) +#else if (pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_GRA) +#endif { READ_UVLC(uiCode, "recovery_poc_cnt"); int maxPicOrderCntLsb = (int) pow(2, pcSlice->getSPS()->getBitsForPOC()); @@ -2001,7 +2013,11 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, ParameterSetManager *para pcSlice->setRecoveryPocCnt(uiCode); pcSlice->setRpPicOrderCntVal(pcSlice->getPOC() + pcSlice->getRecoveryPocCnt()); } +#if JVET_N0865_GRA2GDR + if (pcSlice->getRapPicFlag() || (pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_GDR)) +#else if (pcSlice->getRapPicFlag() || (pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_GRA)) +#endif { READ_FLAG(uiCode, "no_output_of_prior_pics_flag"); pcSlice->setNoOutputPriorPicsFlag(uiCode); diff --git a/source/Lib/EncoderLib/EncGOP.cpp b/source/Lib/EncoderLib/EncGOP.cpp index 1ab5886f29c0f2dca424b5fc16d0486ead538114..4a71c7412bc9bcc510f5f1c2853764485c82ae03 100644 --- a/source/Lib/EncoderLib/EncGOP.cpp +++ b/source/Lib/EncoderLib/EncGOP.cpp @@ -2943,18 +2943,32 @@ void EncGOP::compressGOP( int iPOCLast, int iNumPicRcvd, PicList& rcListPic, OutputNALUnit nalu( pcSlice->getNalUnitType(), pcSlice->getTLayer() ); m_HLSWriter->setBitstream( &nalu.m_Bitstream ); +#if JVET_N0865_NONSYNTAX + pcSlice->setNoIncorrectPicOutputFlag(false); +#else pcSlice->setNoRaslOutputFlag(false); +#endif if (pcSlice->isIRAP()) { if (pcSlice->getNalUnitType() >= NAL_UNIT_CODED_SLICE_IDR_W_RADL && pcSlice->getNalUnitType() <= NAL_UNIT_CODED_SLICE_IDR_N_LP) { +#if JVET_N0865_NONSYNTAX + pcSlice->setNoIncorrectPicOutputFlag(true); +#else pcSlice->setNoRaslOutputFlag(true); +#endif } //the inference for NoOutputPriorPicsFlag // KJS: This cannot happen at the encoder +#if JVET_N0865_NONSYNTAX + if (!m_bFirst && (pcSlice->isIRAP() || pcSlice->getNalUnitType() >= NAL_UNIT_CODED_SLICE_GDR) && pcSlice->getNoIncorrectPicOutputFlag()) + { + if (pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA || pcSlice->getNalUnitType() >= NAL_UNIT_CODED_SLICE_GDR) +#else if (!m_bFirst && pcSlice->isIRAP() && pcSlice->getNoRaslOutputFlag()) { if (pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA) +#endif { pcSlice->setNoOutputPriorPicsFlag(true); } diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp index 08c98aca64e8dffa03c819c9bf128feee39a05a7..6e4fb930e945df4b956ba3191850480f695747ea 100644 --- a/source/Lib/EncoderLib/VLCWriter.cpp +++ b/source/Lib/EncoderLib/VLCWriter.cpp @@ -1330,13 +1330,21 @@ void HLSWriter::codeSliceHeader ( Slice* pcSlice ) int pocMask = (1 << pocBits) - 1; WRITE_CODE(pcSlice->getPOC() & pocMask, pocBits, "slice_pic_order_cnt_lsb"); #if JVET_N0865_SYNTAX +#if JVET_N0865_GRA2GDR + if (pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_GDR) +#else if (pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_GRA) +#endif { int maxPicOrderCntLsb = (int) pow(2, pcSlice->getSPS()->getBitsForPOC()); CHECK((pcSlice->getRecoveryPocCnt() < maxPicOrderCntLsb), "The value of recovery_poc_cnt exceeds (POC LSB cycle - 1)"); WRITE_UVLC(pcSlice->getRecoveryPocCnt(), "recovery_poc_cnt"); } +#if JVET_N0865_GRA2GDR + if (pcSlice->getRapPicFlag() || (pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_GDR)) +#else if (pcSlice->getRapPicFlag() || (pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_GRA)) +#endif { WRITE_FLAG(pcSlice->getNoOutputPriorPicsFlag() ? 1 : 0, "no_output_of_prior_pics_flag"); }