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