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