From b618a762e80e08b1417bfc18a32058a0a213a488 Mon Sep 17 00:00:00 2001 From: Frank Bossen <fbossen@gmail.com> Date: Wed, 12 Dec 2018 21:30:22 -0500 Subject: [PATCH] JVET-L0449 Add POC signaling for IDR pictures --- source/Lib/CommonLib/TypeDef.h | 2 ++ source/Lib/DecoderLib/VLCReader.cpp | 5 +++++ source/Lib/EncoderLib/EncGOP.cpp | 6 ++++++ source/Lib/EncoderLib/VLCWriter.cpp | 7 +++++++ 4 files changed, 20 insertions(+) diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index d5731ffb..3b0affbf 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 e294274d..eb4b2991 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 deeb6651..fc22bee2 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 11b5f488..66d2a2c3 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: -- GitLab