From da9e1e514b510383da75d558ea6956087d462b50 Mon Sep 17 00:00:00 2001
From: Kammachi Sreedhar <kashyap.kammachi-sreedhar@nokia.com>
Date: Wed, 21 Oct 2020 10:29:47 +0300
Subject: [PATCH] targetOLS index in VPS bug fix

---
 source/App/DecoderApp/DecApp.cpp    |  8 --------
 source/App/DecoderApp/DecAppCfg.cpp | 23 ++++++++++++++---------
 source/App/EncoderApp/EncApp.cpp    | 15 +++++++++++++--
 source/App/EncoderApp/EncAppCfg.cpp |  4 ++--
 4 files changed, 29 insertions(+), 21 deletions(-)

diff --git a/source/App/DecoderApp/DecApp.cpp b/source/App/DecoderApp/DecApp.cpp
index bcd545e28f..95d01efe9a 100644
--- a/source/App/DecoderApp/DecApp.cpp
+++ b/source/App/DecoderApp/DecApp.cpp
@@ -148,14 +148,6 @@ uint32_t DecApp::decode()
   };
 
 #if JVET_S0163_ON_TARGETOLS_SUBLAYERS
-    if (!m_mTidExternalSet)
-    {
-      m_iMaxTemporalLayer = -1;
-    }
-    if (!m_tOlsIdxTidExternalSet)
-    {
-      m_targetOlsIdx = -1;
-    }
     m_cDecLib.setHTidExternalSetFlag(m_mTidExternalSet);
     m_cDecLib.setTOlsIdxExternalFlag(m_tOlsIdxTidExternalSet);
 #endif
diff --git a/source/App/DecoderApp/DecAppCfg.cpp b/source/App/DecoderApp/DecAppCfg.cpp
index 5d68489d9a..d96c20493f 100644
--- a/source/App/DecoderApp/DecAppCfg.cpp
+++ b/source/App/DecoderApp/DecAppCfg.cpp
@@ -89,8 +89,8 @@ bool DecAppCfg::parseCfg( int argc, char* argv[] )
   ("OutputBitDepthC,d",         m_outputBitDepth[CHANNEL_TYPE_CHROMA], 0,          "bit depth of YUV output chroma component (default: use luma output bit-depth)")
   ("OutputColourSpaceConvert",  outputColourSpaceConvert,              string(""), "Colour space conversion to apply to input 444 video. Permitted values are (empty string=UNCHANGED) " + getListOfColourSpaceConverts(false))
 #if JVET_S0163_ON_TARGETOLS_SUBLAYERS
-  ("MaxTemporalLayer,t",        m_iMaxTemporalLayer,                   MAX_INT,    "Maximum Temporal Layer to be decoded. -1 to decode all layers")
-  ("TargetOutputLayerSet,p",    m_targetOlsIdx,                        MAX_INT,    "Target output layer set index")
+  ("MaxTemporalLayer,t",        m_iMaxTemporalLayer,                   500,    "Maximum Temporal Layer to be decoded. -1 to decode all layers")
+  ("TargetOutputLayerSet,p",    m_targetOlsIdx,                        500,    "Target output layer set index")
 #else
   ("MaxTemporalLayer,t",        m_iMaxTemporalLayer,                   -1,         "Maximum Temporal Layer to be decoded. -1 to decode all layers")
   ("TargetOutputLayerSet,p",    m_targetOlsIdx,                          -1,       "Target output layer set index")
@@ -226,14 +226,22 @@ bool DecAppCfg::parseCfg( int argc, char* argv[] )
     }
   }
 #if JVET_S0163_ON_TARGETOLS_SUBLAYERS
-  if (m_iMaxTemporalLayer != MAX_INT)
+  if (m_iMaxTemporalLayer != 500)
   {
     m_mTidExternalSet = true;
   }
-  if ( m_targetOlsIdx != MAX_INT)
+  else
+  {
+    m_iMaxTemporalLayer = -1;
+  }
+  if ( m_targetOlsIdx != 500)
   {
     m_tOlsIdxTidExternalSet = true;
   }
+  else
+  {
+    m_targetOlsIdx = -1;
+  }
 #endif
   return true;
 }
@@ -246,14 +254,11 @@ DecAppCfg::DecAppCfg()
 , m_iSkipFrame(0)
 // m_outputBitDepth array initialised below
 , m_outputColourSpaceConvert(IPCOLOURSPACE_UNCHANGED)
+, m_targetOlsIdx(0)
+, m_iMaxTemporalLayer(-1)
 #if JVET_S0163_ON_TARGETOLS_SUBLAYERS
-, m_targetOlsIdx(MAX_INT)
-, m_iMaxTemporalLayer(MAX_INT)
 , m_mTidExternalSet(false)
 , m_tOlsIdxTidExternalSet(false)
-#else
-, m_targetOlsIdx(0)
-, m_iMaxTemporalLayer(-1)
 #endif
 , m_decodedPictureHashSEIEnabled(0)
 , m_decodedNoDisplaySEIEnabled(false)
diff --git a/source/App/EncoderApp/EncApp.cpp b/source/App/EncoderApp/EncApp.cpp
index c811573fe1..160d2265be 100644
--- a/source/App/EncoderApp/EncApp.cpp
+++ b/source/App/EncoderApp/EncApp.cpp
@@ -76,7 +76,18 @@ EncApp::~EncApp()
 void EncApp::xInitLibCfg()
 {
   VPS& vps = *m_cEncLib.getVPS();
+#if JVET_S0163_ON_TARGETOLS_SUBLAYERS
+  if (m_targetOlsIdx != 500)
+  {
+    vps.m_targetOlsIdx = m_targetOlsIdx;
+  }
+  else
+  {
+    vps.m_targetOlsIdx = -1;
+  }
+#else
   vps.m_targetOlsIdx = m_targetOlsIdx;
+#endif
 
   vps.setMaxLayers( m_maxLayers );
 
@@ -1054,11 +1065,11 @@ void EncApp::xInitLibCfg()
   m_cEncLib.setOPIEnabled                                         ( m_OPIEnabled );
   if (m_OPIEnabled)
   {
-    if (m_maxTemporalLayer != MAX_INT)
+    if (m_maxTemporalLayer != 500)
     {
       m_cEncLib.setHtidPlus1                                     ( m_maxTemporalLayer + 1);
     }
-    if (m_targetOlsIdx != MAX_INT)
+    if (m_targetOlsIdx != 500)
     {
       m_cEncLib.setTargetOlsIdx                                   (m_targetOlsIdx);
     }
diff --git a/source/App/EncoderApp/EncAppCfg.cpp b/source/App/EncoderApp/EncAppCfg.cpp
index 5d58f0e44c..d5036105b2 100644
--- a/source/App/EncoderApp/EncAppCfg.cpp
+++ b/source/App/EncoderApp/EncAppCfg.cpp
@@ -1386,8 +1386,8 @@ bool EncAppCfg::parseCfg( int argc, char* argv[] )
   ( "MaxLayers",                                      m_maxLayers,                                  1, "Max number of layers" )
 #if JVET_S0163_ON_TARGETOLS_SUBLAYERS
   ( "EnableOperatingPointInformation",                m_OPIEnabled,                             false, "Enables writing of Operating Point Information (OPI)" )
-  ( "MaxTemporalLayer",                               m_maxTemporalLayer,                     MAX_INT, "Maximum temporal layer to be signalled in OPI" )
-  ( "TargetOutputLayerSet",                           m_targetOlsIdx,                         MAX_INT, "Target output layer set index to be signalled in OPI" )
+  ( "MaxTemporalLayer",                               m_maxTemporalLayer,                         500, "Maximum temporal layer to be signalled in OPI" )
+  ( "TargetOutputLayerSet",                           m_targetOlsIdx,                             500, "Target output layer set index to be signalled in OPI" )
 #else
   ( "TargetOutputLayerSet,p",                         m_targetOlsIdx,                              -1, "Target output layer set index" )
 #endif
-- 
GitLab