diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index d5731ffbf5f2fc35d4d9bd0829f95399c9a124a8..3b0affbf3cf3ff7e135109b024d2162f15146632 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -141,6 +141,8 @@ #define JVET_L0362_QG_FIX 1 // QG is the node of qtDepth + mttDepth <= maxDqpDepth #define JVET_L0362_QG_FIX_CU_REUSE 1 // fix bug on encoder cu coding info reusing fast algorithm (i.e., reuse cu info when having the same neighbor and the same qp) +#define JVET_L0449 1 // code POC value for IDRs + #ifndef JVET_B0051_NON_MPM_MODE #define JVET_B0051_NON_MPM_MODE ( 1 && JEM_TOOLS ) #endif diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp index e294274d3ee00bf5206cf865c53ca0b92a078eb9..eb4b2991e0317f5e1fdc129b3a36f9bf0c2daa3c 100644 --- a/source/Lib/DecoderLib/VLCReader.cpp +++ b/source/Lib/DecoderLib/VLCReader.cpp @@ -1462,7 +1462,12 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, ParameterSetManager *para if( pcSlice->getIdrPicFlag() ) { +#if JVET_L0449 + READ_CODE(sps->getBitsForPOC(), uiCode, "slice_pic_order_cnt_lsb"); + pcSlice->setPOC(uiCode); +#else pcSlice->setPOC(0); +#endif ReferencePictureSet* rps = pcSlice->getLocalRPS(); (*rps)=ReferencePictureSet(); pcSlice->setRPS(rps); diff --git a/source/Lib/EncoderLib/EncGOP.cpp b/source/Lib/EncoderLib/EncGOP.cpp index deeb66512b85cecf6cfc95ec7cb2d0129428f891..fc22bee21675ae92422fb55986424c62444d0771 100644 --- a/source/Lib/EncoderLib/EncGOP.cpp +++ b/source/Lib/EncoderLib/EncGOP.cpp @@ -1438,7 +1438,13 @@ void EncGOP::compressGOP( int iPOCLast, int iNumPicRcvd, PicList& rcListPic, pcPic->fieldPic = isField; #endif +#if JVET_L0449 + int pocBits = pcSlice->getSPS()->getBitsForPOC(); + int pocMask = (1 << pocBits) - 1; + pcSlice->setLastIDR(m_iLastIDR & ~pocMask); +#else pcSlice->setLastIDR(m_iLastIDR); +#endif #if HEVC_DEPENDENT_SLICES pcSlice->setSliceSegmentIdx(0); #endif diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp index 11b5f4885b02c40ae50901d2817603a7c2cf582c..66d2a2c3602d23d3e0f1e3cf6319370a6fd307d3 100644 --- a/source/Lib/EncoderLib/VLCWriter.cpp +++ b/source/Lib/EncoderLib/VLCWriter.cpp @@ -1033,10 +1033,17 @@ void HLSWriter::codeSliceHeader ( Slice* pcSlice ) WRITE_FLAG( pcSlice->getPicOutputFlag() ? 1 : 0, "pic_output_flag" ); } +#if JVET_L0449 + int pocBits = pcSlice->getSPS()->getBitsForPOC(); + int pocMask = (1 << pocBits) - 1; + WRITE_CODE(pcSlice->getPOC() & pocMask, pocBits, "slice_pic_order_cnt_lsb"); +#endif if( !pcSlice->getIdrPicFlag() ) { +#if !JVET_L0449 int picOrderCntLSB = ( pcSlice->getPOC() - pcSlice->getLastIDR() + ( 1 << pcSlice->getSPS()->getBitsForPOC() ) ) & ( ( 1 << pcSlice->getSPS()->getBitsForPOC() ) - 1 ); WRITE_CODE( picOrderCntLSB, pcSlice->getSPS()->getBitsForPOC(), "slice_pic_order_cnt_lsb" ); +#endif const ReferencePictureSet* rps = pcSlice->getRPS(); // check for bitstream restriction stating that: