From 5bf78ee56fb75ab6dcecf5d32d145a617e7ca750 Mon Sep 17 00:00:00 2001 From: Naeri Park <naeri.park@lge.com> Date: Tue, 23 Jul 2019 19:58:16 +0900 Subject: [PATCH] JVET-O0414: long-term reference picture restriction for SMVD Macro: JVET_O0414_SMVD_LTRP --- JVET-O/.gitkeep | 0 source/Lib/CommonLib/TypeDef.h | 1 + source/Lib/DecoderLib/DecLib.cpp | 20 ++++++++++++++++++++ source/Lib/EncoderLib/EncGOP.cpp | 20 ++++++++++++++++++++ 4 files changed, 41 insertions(+) delete mode 100644 JVET-O/.gitkeep diff --git a/JVET-O/.gitkeep b/JVET-O/.gitkeep deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index a680e7e66a..a20a5909e9 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -50,6 +50,7 @@ #include <assert.h> #include <cassert> +#define JVET_O0414_SMVD_LTRP 1 // JVET-O0414: long-term reference picture restriction for SMVD #define JVET_O0052_TU_LEVEL_CTX_CODED_BIN_CONSTRAINT 1 // JVET-O0052 Method-1: TU-level context coded bin constraint #define JVET_O0105_ICT 1 // JVET-O0105: inter-chroma transform (ICT) as extension of joint chroma coding (JCC) diff --git a/source/Lib/DecoderLib/DecLib.cpp b/source/Lib/DecoderLib/DecLib.cpp index 95e7efab24..5df1d3ed59 100644 --- a/source/Lib/DecoderLib/DecLib.cpp +++ b/source/Lib/DecoderLib/DecLib.cpp @@ -1221,7 +1221,12 @@ bool DecLib::xDecodeSlice(InputNALUnit &nalu, int &iSkipFrame, int iPOCLastDispl for ( ref = 0; ref < pcSlice->getNumRefIdx( REF_PIC_LIST_0 ); ref++ ) { int poc = pcSlice->getRefPic( REF_PIC_LIST_0, ref )->getPOC(); +#if JVET_O0414_SMVD_LTRP + const bool bIsRefLongTerm = pcSlice->getRefPic(REF_PIC_LIST_0, ref)->longTerm; + if ( poc < currPOC && (poc > forwardPOC || refIdx0 == -1) && !bIsRefLongTerm) +#else if ( poc < currPOC && (poc > forwardPOC || refIdx0 == -1) ) +#endif { forwardPOC = poc; refIdx0 = ref; @@ -1232,7 +1237,12 @@ bool DecLib::xDecodeSlice(InputNALUnit &nalu, int &iSkipFrame, int iPOCLastDispl for ( ref = 0; ref < pcSlice->getNumRefIdx( REF_PIC_LIST_1 ); ref++ ) { int poc = pcSlice->getRefPic( REF_PIC_LIST_1, ref )->getPOC(); +#if JVET_O0414_SMVD_LTRP + const bool bIsRefLongTerm = pcSlice->getRefPic(REF_PIC_LIST_1, ref)->longTerm; + if ( poc > currPOC && (poc < backwardPOC || refIdx1 == -1) && !bIsRefLongTerm) +#else if ( poc > currPOC && (poc < backwardPOC || refIdx1 == -1) ) +#endif { backwardPOC = poc; refIdx1 = ref; @@ -1250,7 +1260,12 @@ bool DecLib::xDecodeSlice(InputNALUnit &nalu, int &iSkipFrame, int iPOCLastDispl for ( ref = 0; ref < pcSlice->getNumRefIdx( REF_PIC_LIST_0 ); ref++ ) { int poc = pcSlice->getRefPic( REF_PIC_LIST_0, ref )->getPOC(); +#if JVET_O0414_SMVD_LTRP + const bool bIsRefLongTerm = pcSlice->getRefPic(REF_PIC_LIST_0, ref)->longTerm; + if ( poc > currPOC && (poc < backwardPOC || refIdx0 == -1) && !bIsRefLongTerm) +#else if ( poc > currPOC && (poc < backwardPOC || refIdx0 == -1) ) +#endif { backwardPOC = poc; refIdx0 = ref; @@ -1261,7 +1276,12 @@ bool DecLib::xDecodeSlice(InputNALUnit &nalu, int &iSkipFrame, int iPOCLastDispl for ( ref = 0; ref < pcSlice->getNumRefIdx( REF_PIC_LIST_1 ); ref++ ) { int poc = pcSlice->getRefPic( REF_PIC_LIST_1, ref )->getPOC(); +#if JVET_O0414_SMVD_LTRP + const bool bIsRefLongTerm = pcSlice->getRefPic(REF_PIC_LIST_1, ref)->longTerm; + if ( poc < currPOC && (poc > forwardPOC || refIdx1 == -1) && !bIsRefLongTerm) +#else if ( poc < currPOC && (poc > forwardPOC || refIdx1 == -1) ) +#endif { forwardPOC = poc; refIdx1 = ref; diff --git a/source/Lib/EncoderLib/EncGOP.cpp b/source/Lib/EncoderLib/EncGOP.cpp index 6297bd7bec..48f439c5f8 100644 --- a/source/Lib/EncoderLib/EncGOP.cpp +++ b/source/Lib/EncoderLib/EncGOP.cpp @@ -1816,7 +1816,12 @@ void EncGOP::compressGOP( int iPOCLast, int iNumPicRcvd, PicList& rcListPic, for ( ref = 0; ref < pcSlice->getNumRefIdx( REF_PIC_LIST_0 ); ref++ ) { int poc = pcSlice->getRefPic( REF_PIC_LIST_0, ref )->getPOC(); +#if JVET_O0414_SMVD_LTRP + const bool bIsRefLongTerm = pcSlice->getRefPic(REF_PIC_LIST_0, ref)->longTerm; + if ( poc < currPOC && (poc > forwardPOC || refIdx0 == -1) && !bIsRefLongTerm) +#else if ( poc < currPOC && (poc > forwardPOC || refIdx0 == -1) ) +#endif { forwardPOC = poc; refIdx0 = ref; @@ -1827,7 +1832,12 @@ void EncGOP::compressGOP( int iPOCLast, int iNumPicRcvd, PicList& rcListPic, for ( ref = 0; ref < pcSlice->getNumRefIdx( REF_PIC_LIST_1 ); ref++ ) { int poc = pcSlice->getRefPic( REF_PIC_LIST_1, ref )->getPOC(); +#if JVET_O0414_SMVD_LTRP + const bool bIsRefLongTerm = pcSlice->getRefPic(REF_PIC_LIST_1, ref)->longTerm; + if ( poc > currPOC && (poc < backwardPOC || refIdx1 == -1) && !bIsRefLongTerm) +#else if ( poc > currPOC && (poc < backwardPOC || refIdx1 == -1) ) +#endif { backwardPOC = poc; refIdx1 = ref; @@ -1845,7 +1855,12 @@ void EncGOP::compressGOP( int iPOCLast, int iNumPicRcvd, PicList& rcListPic, for ( ref = 0; ref < pcSlice->getNumRefIdx( REF_PIC_LIST_0 ); ref++ ) { int poc = pcSlice->getRefPic( REF_PIC_LIST_0, ref )->getPOC(); +#if JVET_O0414_SMVD_LTRP + const bool bIsRefLongTerm = pcSlice->getRefPic(REF_PIC_LIST_0, ref)->longTerm; + if ( poc > currPOC && (poc < backwardPOC || refIdx0 == -1) && !bIsRefLongTerm) +#else if ( poc > currPOC && (poc < backwardPOC || refIdx0 == -1) ) +#endif { backwardPOC = poc; refIdx0 = ref; @@ -1856,7 +1871,12 @@ void EncGOP::compressGOP( int iPOCLast, int iNumPicRcvd, PicList& rcListPic, for ( ref = 0; ref < pcSlice->getNumRefIdx( REF_PIC_LIST_1 ); ref++ ) { int poc = pcSlice->getRefPic( REF_PIC_LIST_1, ref )->getPOC(); +#if JVET_O0414_SMVD_LTRP + const bool bIsRefLongTerm = pcSlice->getRefPic(REF_PIC_LIST_1, ref)->longTerm; + if ( poc < currPOC && (poc > forwardPOC || refIdx1 == -1) && !bIsRefLongTerm) +#else if ( poc < currPOC && (poc > forwardPOC || refIdx1 == -1) ) +#endif { forwardPOC = poc; refIdx1 = ref; -- GitLab