From 01c3b152af7a9b39ea8b4bccb579b82b225642ba Mon Sep 17 00:00:00 2001 From: Philip Cowan <cowanp@sharplabs.com> Date: Fri, 20 Sep 2019 16:13:42 -0700 Subject: [PATCH] JVET_O0181 : Add non_reference_picture_flag --- source/Lib/CommonLib/Slice.cpp | 3 +++ source/Lib/CommonLib/Slice.h | 7 +++++++ source/Lib/CommonLib/TypeDef.h | 1 + source/Lib/DecoderLib/VLCReader.cpp | 4 ++++ source/Lib/EncoderLib/VLCWriter.cpp | 4 ++++ 5 files changed, 19 insertions(+) diff --git a/source/Lib/CommonLib/Slice.cpp b/source/Lib/CommonLib/Slice.cpp index c2b577f85..43949d6fd 100644 --- a/source/Lib/CommonLib/Slice.cpp +++ b/source/Lib/CommonLib/Slice.cpp @@ -134,6 +134,9 @@ Slice::Slice() , m_scalingListAps ( nullptr ) , m_tileGroupscalingListPresentFlag ( false ) #endif +#if JVET_O0181 +, m_nonReferencePicFlag ( 0 ) +#endif { for(uint32_t i=0; i<NUM_REF_PIC_LIST_01; i++) { diff --git a/source/Lib/CommonLib/Slice.h b/source/Lib/CommonLib/Slice.h index 6c9214d17..e5fc2804b 100644 --- a/source/Lib/CommonLib/Slice.h +++ b/source/Lib/CommonLib/Slice.h @@ -1799,6 +1799,9 @@ private: APS* m_scalingListAps; bool m_tileGroupscalingListPresentFlag; #endif +#if JVET_O0181 + bool m_nonReferencePicFlag; +#endif public: Slice(); virtual ~Slice(); @@ -2140,6 +2143,10 @@ public: void setRpPicOrderCntVal(int value) { m_rpPicOrderCntVal = value; } int getRpPicOrderCntVal() const { return m_rpPicOrderCntVal; } #endif +#if JVET_O0181 + void setNonRefPictFlag(bool value) { m_nonReferencePicFlag = value; } + bool getNonRefPictFlag() const { return m_nonReferencePicFlag; } +#endif protected: Picture* xGetRefPic (PicList& rcListPic, int poc); diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index 08a49eb03..260dccbcd 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -310,6 +310,7 @@ #define JVET_O0176_PROPOSAL3 1 // JVET_O0176 check for rect_slice_flag +#define JVET_O0181 1 // JVET_O0181: non_reference_picture_flag #define HEVC_SEI 0 // SEI messages that are defined in HEVC, but not in VVC diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp index ff485320c..5e4333362 100644 --- a/source/Lib/DecoderLib/VLCReader.cpp +++ b/source/Lib/DecoderLib/VLCReader.cpp @@ -1898,6 +1898,10 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, ParameterSetManager *para #endif pcSlice->setSliceCurStartCtuTsAddr(pcSlice->getSliceCurStartBrickIdx()); +#if JVET_O0181 + READ_FLAG(uiCode, "non_reference_picture_flag"); pcSlice->setNonRefPictFlag(uiCode); +#endif + for (int i = 0; i < pps->getNumExtraSliceHeaderBits(); i++) { READ_FLAG(uiCode, "slice_reserved_flag[]"); // ignored diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp index ea6f20825..3371ddb7f 100644 --- a/source/Lib/EncoderLib/VLCWriter.cpp +++ b/source/Lib/EncoderLib/VLCWriter.cpp @@ -1363,6 +1363,10 @@ void HLSWriter::codeSliceHeader ( Slice* pcSlice ) WRITE_UVLC(pcSlice->getSliceNumBricks() - 1, "num_bricks_in_slice_minus1"); } +#if JVET_O0181 + WRITE_FLAG(pcSlice->getNonRefPictFlag() ? 0 : 1, "non_reference_picture_flag"); +#endif + for( int i = 0; i < pcSlice->getPPS()->getNumExtraSliceHeaderBits(); i++ ) { WRITE_FLAG( 0, "slice_reserved_flag[]" ); -- GitLab