From e756b020742edb38b5f569529b358290f6568af7 Mon Sep 17 00:00:00 2001
From: Remy Foray <remy.foray@allegrodvt.com>
Date: Wed, 18 Sep 2019 16:58:56 +0200
Subject: [PATCH] Fix call to xFlushOutput and checkNoOutputPriorPics after
 !949

---
 source/App/DecoderApp/DecApp.cpp | 11 +++++++++++
 source/Lib/DecoderLib/DecLib.cpp | 16 ++++++++++++++++
 source/Lib/DecoderLib/DecLib.h   |  2 ++
 3 files changed, 29 insertions(+)

diff --git a/source/App/DecoderApp/DecApp.cpp b/source/App/DecoderApp/DecApp.cpp
index bc9eda2f8..8177c7dbf 100644
--- a/source/App/DecoderApp/DecApp.cpp
+++ b/source/App/DecoderApp/DecApp.cpp
@@ -153,6 +153,15 @@ uint32_t DecApp::decode()
     {
       read(nalu);
 
+#if JVET_O0610_DETECT_AUD
+      if(m_cDecLib.getFirstSliceInPicture() &&
+          (nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_W_RADL ||
+           nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_N_LP))
+      {
+        xFlushOutput(pcListPic);
+      }
+#endif
+
       if ((m_iMaxTemporalLayer >= 0 && nalu.m_temporalId > m_iMaxTemporalLayer) || !isNaluWithinTargetDecLayerIdSet(&nalu) || !isNaluTheTargetLayer(&nalu))
       {
         bNewPicture = false;
@@ -237,6 +246,7 @@ uint32_t DecApp::decode()
       {
         xWriteOutput( pcListPic, nalu.m_temporalId );
       }
+#if! JVET_O0610_DETECT_AUD
 #if JVET_N0865_NONSYNTAX
       if ((bNewPicture || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_CRA || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_GDR) && m_cDecLib.getNoOutputPriorPicsFlag())
 #else
@@ -252,6 +262,7 @@ uint32_t DecApp::decode()
       {
         xFlushOutput( pcListPic );
       }
+#endif
       if (nalu.m_nalUnitType == NAL_UNIT_EOS)
       {
         xWriteOutput( pcListPic, nalu.m_temporalId );
diff --git a/source/Lib/DecoderLib/DecLib.cpp b/source/Lib/DecoderLib/DecLib.cpp
index 9a2e047d1..22225020e 100644
--- a/source/Lib/DecoderLib/DecLib.cpp
+++ b/source/Lib/DecoderLib/DecLib.cpp
@@ -1207,6 +1207,22 @@ bool DecLib::xDecodeSlice(InputNALUnit &nalu, int &iSkipFrame, int iPOCLastDispl
 
   DTRACE_UPDATE( g_trace_ctx, std::make_pair( "poc", m_apcSlicePilot->getPOC() ) );
 
+#if JVET_O0610_DETECT_AUD
+#if JVET_N0865_NONSYNTAX
+  if ((m_bFirstSliceInPicture ||
+        m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA ||
+        m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_GDR) &&
+      getNoOutputPriorPicsFlag())
+#else
+    if ((m_bFirstSliceInPicture ||
+          m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA)
+        && getNoOutputPriorPicsFlag() )
+#endif
+    {
+      checkNoOutputPriorPics(&m_cListPic);
+      setNoOutputPriorPicsFlag (false);
+    }
+#endif
 
   xUpdatePreviousTid0POC(m_apcSlicePilot);
 
diff --git a/source/Lib/DecoderLib/DecLib.h b/source/Lib/DecoderLib/DecLib.h
index 4340d90c8..af4012f60 100644
--- a/source/Lib/DecoderLib/DecLib.h
+++ b/source/Lib/DecoderLib/DecLib.h
@@ -163,6 +163,7 @@ public:
   bool  getNoOutputPriorPicsFlag () const   { return m_isNoOutputPriorPics; }
   void  setNoOutputPriorPicsFlag (bool val) { m_isNoOutputPriorPics = val; }
   void  setFirstSliceInPicture (bool val)  { m_bFirstSliceInPicture = val; }
+  bool  getFirstSliceInPicture () const  { return m_bFirstSliceInPicture; }
   bool  getFirstSliceInSequence () const   { return m_bFirstSliceInSequence; }
   void  setFirstSliceInSequence (bool val) { m_bFirstSliceInSequence = val; }
   void  setDecodedSEIMessageOutputStream(std::ostream *pOpStream) { m_pDecodedSEIOutputStream = pOpStream; }
@@ -172,6 +173,7 @@ public:
   void setDebugCTU( int debugCTU )        { m_debugCTU = debugCTU; }
   int  getDebugPOC( )               const { return m_debugPOC; };
   void setDebugPOC( int debugPOC )        { m_debugPOC = debugPOC; };
+
 protected:
   void  xUpdateRasInit(Slice* slice);
 
-- 
GitLab