<div dir="ltr">Pushed<div><br clear="all"><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>Thanks,</div><div dir="ltr"><span></span><span></span>Kalyan Goswami, PhD</div><div dir="ltr"><span style="font-size:12.8px">Video Architect @ MulticoreWare</span></div><div dir="ltr"><div><a href="http://www.multicorewareinc.com/" target="_blank">http:</a><a href="http://www.multicorewareinc.com/" style="font-size:12.8px" target="_blank">//www.multicorewareinc.com</a></div><div><span style="font-size:12.8px">+91 9884989331</span><br></div><div></div></div></div></div></div></div></div></div></div></div></div></div></div><br></div></div><br><div class="gmail_quote"><div dir="ltr">On Thu, Dec 20, 2018 at 4:33 PM <<a href="mailto:bhavna@multicorewareinc.com">bhavna@multicorewareinc.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"># HG changeset patch<br>
# User Bhavna Hariharan <<a href="mailto:bhavna@multicorewareinc.com" target="_blank">bhavna@multicorewareinc.com</a>><br>
# Date 1544770049 -19800<br>
#      Fri Dec 14 12:17:29 2018 +0530<br>
# Node ID 228dd85f3bdbb955481c06a79eddc5cf2fbbeaa1<br>
# Parent  592b83c9068d7f402c85394fcf113b767b58f08d<br>
zone: reconfigure params for FEs in round robin fashion<br>
<br>
diff -r 592b83c9068d -r 228dd85f3bdb source/encoder/analysis.cpp<br>
--- a/source/encoder/analysis.cpp       Fri Dec 14 12:04:35 2018 +0530<br>
+++ b/source/encoder/analysis.cpp       Fri Dec 14 12:17:29 2018 +0530<br>
@@ -140,6 +140,7 @@<br>
     m_slice = ctu.m_slice;<br>
     m_frame = &frame;<br>
     m_bChromaSa8d = m_param->rdLevel >= 3;<br>
+    m_param = m_frame->m_param;<br>
<br>
 #if _DEBUG || CHECKED_BUILD<br>
     invalidateContexts(0);<br>
diff -r 592b83c9068d -r 228dd85f3bdb source/encoder/api.cpp<br>
--- a/source/encoder/api.cpp    Fri Dec 14 12:04:35 2018 +0530<br>
+++ b/source/encoder/api.cpp    Fri Dec 14 12:17:29 2018 +0530<br>
@@ -94,6 +94,7 @@<br>
     Encoder* encoder = NULL;<br>
     x265_param* param = PARAM_NS::x265_param_alloc();<br>
     x265_param* latestParam = PARAM_NS::x265_param_alloc();<br>
+    x265_param* zoneParam = PARAM_NS::x265_param_alloc();<br>
     if (!param || !latestParam)<br>
         goto fail;<br>
<br>
@@ -126,6 +127,13 @@<br>
     }<br>
<br>
     encoder->create();<br>
+<br>
+    memcpy(zoneParam, param, sizeof(x265_param));<br>
+    for (int i = 0; i < param->rc.zonefileCount; i++)<br>
+    {<br>
+        encoder->configureZone(zoneParam, param->rc.zones[i].zoneParam);<br>
+    }<br>
+<br>
     /* Try to open CSV file handle */<br>
     if (encoder->m_param->csvfn)<br>
     {<br>
diff -r 592b83c9068d -r 228dd85f3bdb source/encoder/encoder.cpp<br>
--- a/source/encoder/encoder.cpp        Fri Dec 14 12:04:35 2018 +0530<br>
+++ b/source/encoder/encoder.cpp        Fri Dec 14 12:17:29 2018 +0530<br>
@@ -1000,11 +1000,11 @@<br>
         }<br>
<br>
         Frame *inFrame;<br>
+        x265_param* p = (m_reconfigure || m_reconfigureRc) ? m_latestParam : m_param;<br>
         if (m_dpb->m_freeList.empty())<br>
         {<br>
             inFrame = new Frame;<br>
             inFrame->m_encodeStartTime = x265_mdate();<br>
-            x265_param* p = (m_reconfigure || m_reconfigureRc) ? m_latestParam : m_param;<br>
             if (inFrame->create(p, pic_in->quantOffsets))<br>
             {<br>
                 /* the first PicYuv created is asked to generate the CU and block unit offset<br>
@@ -1437,6 +1437,12 @@<br>
                     readAnalysisFile(&frameEnc->m_analysisData, frameEnc->m_poc, frameEnc->m_lowres.sliceType);<br>
              }<br>
<br>
+            for (int i = 0; i < m_param->rc.zonefileCount; i++)<br>
+            {<br>
+                if (m_param->rc.zones[i].startFrame == frameEnc->m_poc)<br>
+                    x265_encoder_reconfig(this, m_param->rc.zones[i].zoneParam);<br>
+            }<br>
+<br>
             if (frameEnc->m_reconfigureRc && m_reconfigureRc)<br>
             {<br>
                 memcpy(m_param, m_latestParam, sizeof(x265_param));<br>
@@ -1641,6 +1647,22 @@<br>
         encParam->bIntraInBFrames = param->bIntraInBFrames;<br>
         if (param->scalingLists && !encParam->scalingLists)<br>
             encParam->scalingLists = strdup(param->scalingLists);<br>
+<br>
+        encParam->rc.aqMode = param->rc.aqMode;<br>
+        encParam->rc.aqStrength = param->rc.aqStrength;<br>
+        encParam->noiseReductionInter = param->noiseReductionInter;<br>
+        encParam->noiseReductionIntra = param->noiseReductionIntra;<br>
+<br>
+        encParam->limitModes = param->limitModes;<br>
+        encParam->bEnableSplitRdSkip = param->bEnableSplitRdSkip;<br>
+        encParam->bCULossless = param->bCULossless;<br>
+        encParam->bEnableRdRefine = param->bEnableRdRefine;<br>
+        encParam->limitTU = param->limitTU;<br>
+        encParam->bEnableTSkipFast = param->bEnableTSkipFast;<br>
+        encParam->rdPenalty = param->rdPenalty;<br>
+        encParam->dynamicRd = param->dynamicRd;<br>
+        encParam->bEnableTransformSkip = param->bEnableTransformSkip;<br>
+        encParam->bEnableAMP = param->bEnableAMP;<br>
     }<br>
     encParam->forceFlush = param->forceFlush;<br>
     /* To add: Loop Filter/deblocking controls, transform skip, signhide require PPS to be resent */<br>
@@ -2584,6 +2606,41 @@<br>
     pps->numRefIdxDefault[1] = 1;<br>
 }<br>
<br>
+void Encoder::configureZone(x265_param *p, x265_param *zone)<br>
+{<br>
+    p->maxNumReferences = zone->maxNumReferences;<br>
+    p->bEnableFastIntra = zone->bEnableFastIntra;<br>
+    p->bEnableEarlySkip = zone->bEnableEarlySkip;<br>
+    p->bEnableRecursionSkip = zone->bEnableRecursionSkip;<br>
+    p->searchMethod = zone->searchMethod;<br>
+    p->searchRange = zone->searchRange;<br>
+    p->subpelRefine = zone->subpelRefine;<br>
+    p->rdoqLevel = zone->rdoqLevel;<br>
+    p->rdLevel = zone->rdLevel;<br>
+    p->bEnableRectInter = zone->bEnableRectInter;<br>
+    p->maxNumMergeCand = zone->maxNumMergeCand;<br>
+    p->bIntraInBFrames = zone->bIntraInBFrames;<br>
+    p->scalingLists = strdup(zone->scalingLists);<br>
+<br>
+    p->rc.aqMode = zone->rc.aqMode;<br>
+    p->rc.aqStrength = zone->rc.aqStrength;<br>
+    p->noiseReductionInter = zone->noiseReductionInter;<br>
+    p->noiseReductionIntra = zone->noiseReductionIntra;<br>
+<br>
+    p->limitModes = zone->limitModes;<br>
+    p->bEnableSplitRdSkip = zone->bEnableSplitRdSkip;<br>
+    p->bCULossless = zone->bCULossless;<br>
+    p->bEnableRdRefine = zone->bEnableRdRefine;<br>
+    p->limitTU = zone->limitTU;<br>
+    p->bEnableTSkipFast = zone->bEnableTSkipFast;<br>
+    p->rdPenalty = zone->rdPenalty;<br>
+    p->dynamicRd = zone->dynamicRd;<br>
+    p->bEnableTransformSkip = zone->bEnableTransformSkip;<br>
+    p->bEnableAMP = zone->bEnableAMP;<br>
+<br>
+    memcpy(zone, p, sizeof(x265_param));<br>
+}<br>
+<br>
 void Encoder::configure(x265_param *p)<br>
 {<br>
     this->m_param = p;<br>
@@ -3226,6 +3283,12 @@<br>
                 p->crQpOffset = 4;<br>
         }<br>
     }<br>
+<br>
+    if (m_param->rc.zonefileCount && p->bOpenGOP)<br>
+    {<br>
+        p->bOpenGOP = 0;<br>
+        x265_log(p, X265_LOG_WARNING, "Zone encoding requires closed gop structure. Enabling closed GOP.\n");<br>
+    }<br>
 }<br>
<br>
 void Encoder::readAnalysisFile(x265_analysis_data* analysis, int curPoc, const x265_picture* picIn, int paramBytes)<br>
diff -r 592b83c9068d -r 228dd85f3bdb source/encoder/encoder.h<br>
--- a/source/encoder/encoder.h  Fri Dec 14 12:04:35 2018 +0530<br>
+++ b/source/encoder/encoder.h  Fri Dec 14 12:17:29 2018 +0530<br>
@@ -193,6 +193,7 @@<br>
     bool               m_aborted;          // fatal error detected<br>
     bool               m_reconfigure;      // Encoder reconfigure in progress<br>
     bool               m_reconfigureRc;<br>
+    bool               m_reconfigureZone;<br>
<br>
     int               m_saveCtuDistortionLevel;<br>
<br>
@@ -275,6 +276,8 @@<br>
<br>
     void configure(x265_param *param);<br>
<br>
+    void configureZone(x265_param *p, x265_param *zone);<br>
+<br>
     void updateVbvPlan(RateControl* rc);<br>
<br>
     void readAnalysisFile(x265_analysis_data* analysis, int poc, int sliceType);<br>
diff -r 592b83c9068d -r 228dd85f3bdb source/encoder/slicetype.cpp<br>
--- a/source/encoder/slicetype.cpp      Fri Dec 14 12:04:35 2018 +0530<br>
+++ b/source/encoder/slicetype.cpp      Fri Dec 14 12:17:29 2018 +0530<br>
@@ -1115,6 +1115,11 @@<br>
                     frm.sliceType = m_param->bOpenGOP && m_lastKeyframe >= 0 ? X265_TYPE_I : X265_TYPE_IDR;<br>
                 }<br>
             }<br>
+            for (int i = 0; i < m_param->rc.zonefileCount; i++)<br>
+            {<br>
+                if (m_param->rc.zones[i].startFrame == frm.frameNum)<br>
+                    frm.sliceType = X265_TYPE_IDR;<br>
+            }<br>
             if ((frm.sliceType == X265_TYPE_I && frm.frameNum - m_lastKeyframe >= m_param->keyframeMin) || (frm.frameNum == (m_param->chunkStart - 1)) || (frm.frameNum == m_param->chunkEnd))<br>
             {<br>
                 if (m_param->bOpenGOP)<br>
_______________________________________________<br>
x265-devel mailing list<br>
<a href="mailto:x265-devel@videolan.org" target="_blank">x265-devel@videolan.org</a><br>
<a href="https://mailman.videolan.org/listinfo/x265-devel" rel="noreferrer" target="_blank">https://mailman.videolan.org/listinfo/x265-devel</a><br>
</blockquote></div>