From c466fac4768fbc27178e5567e007ecab9fd29029 Mon Sep 17 00:00:00 2001
From: Seungwook Hong <seungwook.hong@nokia.com>
Date: Mon, 1 Feb 2021 12:22:07 -0800
Subject: [PATCH] JVET-U0097: Force set encoding parameter for GDR

---
 source/App/EncoderApp/EncAppCfg.cpp | 94 +++++++++++++++++++----------
 1 file changed, 63 insertions(+), 31 deletions(-)

diff --git a/source/App/EncoderApp/EncAppCfg.cpp b/source/App/EncoderApp/EncAppCfg.cpp
index 5b5c09d7a5..675f9d7908 100644
--- a/source/App/EncoderApp/EncAppCfg.cpp
+++ b/source/App/EncoderApp/EncAppCfg.cpp
@@ -1505,6 +1505,69 @@ bool EncAppCfg::parseCfg( int argc, char* argv[] )
     m_iIntraPeriod = -1;
   }
 
+#if GDR_ENABLED
+  {
+    m_iDecodingRefreshType = 3;
+    m_intraQPOffset = 0;
+    m_iGOPSize = 1;
+
+    m_GOPList[0].m_POC = 1;
+    m_GOPList[0].m_sliceType = 'B';
+    m_GOPList[0].m_QPOffset = 0;
+    m_GOPList[0].m_QPOffsetModelOffset = 0;
+    m_GOPList[0].m_QPOffsetModelScale = 0;
+    m_GOPList[0].m_CbQPoffset = 0;
+    m_GOPList[0].m_CrQPoffset = 0;
+    m_GOPList[0].m_QPFactor = 1.0;
+    m_GOPList[0].m_tcOffsetDiv2 = 0;
+    m_GOPList[0].m_betaOffsetDiv2 = 0;
+    m_GOPList[0].m_CbTcOffsetDiv2 = 0;
+    m_GOPList[0].m_CbBetaOffsetDiv2 = 0;
+    m_GOPList[0].m_CrTcOffsetDiv2 = 0;
+    m_GOPList[0].m_CrBetaOffsetDiv2 = 0;
+    m_GOPList[0].m_temporalId = 0;
+
+    m_GOPList[0].m_numRefPicsActive0 = 4;
+    m_GOPList[0].m_numRefPics0 = 4;
+    m_GOPList[0].m_deltaRefPics0[0] = 1;
+    m_GOPList[0].m_deltaRefPics0[1] = 2;
+    m_GOPList[0].m_deltaRefPics0[2] = 3;
+    m_GOPList[0].m_deltaRefPics0[3] = 4;
+
+    m_GOPList[0].m_numRefPicsActive1 = 4;
+    m_GOPList[0].m_numRefPics1 = 4;
+    m_GOPList[0].m_deltaRefPics1[0] = 1;
+    m_GOPList[0].m_deltaRefPics1[1] = 2;
+    m_GOPList[0].m_deltaRefPics1[2] = 3;
+    m_GOPList[0].m_deltaRefPics1[3] = 4;
+
+    if (m_iGdrFrequency < 0)
+      m_iGdrFrequency = 2;
+
+    if (m_gdrPocStart < 0)
+    {
+      if (m_iIntraPeriod > 0)
+        m_gdrPocStart = m_iIntraPeriod;
+      else
+        m_gdrPocStart = m_iFrameRate * m_iGdrFrequency;
+    }
+
+    if (m_iGdrPeriod < 0)
+    {
+      m_iGdrPeriod = m_iFrameRate;
+    }
+
+    if (m_iIntraPeriod == -1)
+    {
+      m_iFrameRate = (m_iFrameRate == 0) ? 30 : m_iFrameRate;
+      if (m_gdrPocStart % m_iFrameRate != 0)
+        m_iIntraPeriod = -1;
+      else
+        m_iIntraPeriod = m_iFrameRate * m_iGdrFrequency;
+    }
+  }
+#endif
+
   m_bpDeltasGOPStructure = false;
   if(m_iGOPSize == 16)
   {
@@ -1605,37 +1668,6 @@ bool EncAppCfg::parseCfg( int argc, char* argv[] )
     }
   }
 
-#if GDR_ENABLED
-  {     
-    m_iDecodingRefreshType = 3;
-    
-    if (m_iGdrFrequency < 0)
-      m_iGdrFrequency = 2;
-
-    if (m_gdrPocStart < 0) 
-    {
-      if (m_iIntraPeriod > 0)
-        m_gdrPocStart = m_iIntraPeriod;
-      else
-        m_gdrPocStart = m_iFrameRate * m_iGdrFrequency;
-    }
-
-    if (m_iGdrPeriod < 0) 
-    {
-      m_iGdrPeriod = m_iFrameRate;
-    }    
-
-    if (m_iIntraPeriod == -1) 
-    {
-      m_iFrameRate = (m_iFrameRate == 0) ? 30 : m_iFrameRate;
-      if (m_gdrPocStart % m_iFrameRate != 0)
-        m_iIntraPeriod = -1;
-      else
-        m_iIntraPeriod = m_iFrameRate * m_iGdrFrequency;
-    }
-  }
-#endif
-
   g_verbosity = MsgLevel( m_verbosity );
 
 
-- 
GitLab