<div dir="ltr"><div dir="ltr"><div># HG changeset patch</div><div># User Pooja Venkatesan <<a href="mailto:pooja@multicorewareinc.com">pooja@multicorewareinc.com</a>></div><div># Date 1544770736 -19800</div><div>#      Fri Dec 14 12:28:56 2018 +0530</div><div># Node ID 1a62483c0b7549ef677ce2f343e9c7f1fcd45c44</div><div># Parent  587431d49124b5e990883a919ec9eaf8b3708c34</div><div>zone: reconfigure rate control parameters</div><div><br></div><div>diff -r 587431d49124 -r 1a62483c0b75 source/common/param.cpp</div><div>--- a/source/common/param.cpp<span style="white-space:pre">     </span>Fri Dec 14 12:26:15 2018 +0530</div><div>+++ b/source/common/param.cpp<span style="white-space:pre">   </span>Fri Dec 14 12:28:56 2018 +0530</div><div>@@ -637,6 +637,21 @@</div><div>     }</div><div>     OPT("b-intra") p->bIntraInBFrames = atobool(value);</div><div>     OPT("scaling-list") p->scalingLists = strdup(value);</div><div>+    OPT("crf")</div><div>+    {</div><div>+        p->rc.rfConstant = atof(value);</div><div>+        p->rc.rateControlMode = X265_RC_CRF;</div><div>+    }</div><div>+    OPT("qp")</div><div>+    {</div><div>+        p->rc.qp = atoi(value);</div><div>+        p->rc.rateControlMode = X265_RC_CQP;</div><div>+    }</div><div>+    OPT("bitrate")</div><div>+    {</div><div>+        p->rc.bitrate = atoi(value);</div><div>+        p->rc.rateControlMode = X265_RC_ABR;</div><div>+    }</div><div>     OPT("aq-mode") p->rc.aqMode = atoi(value);</div><div>     OPT("aq-strength") p->rc.aqStrength = atof(value);</div><div>     OPT("nr-intra") p->noiseReductionIntra = atoi(value);</div><div>diff -r 587431d49124 -r 1a62483c0b75 source/encoder/encoder.cpp</div><div>--- a/source/encoder/encoder.cpp<span style="white-space:pre">        </span>Fri Dec 14 12:26:15 2018 +0530</div><div>+++ b/source/encoder/encoder.cpp<span style="white-space:pre">        </span>Fri Dec 14 12:28:56 2018 +0530</div><div>@@ -2643,6 +2643,16 @@</div><div>     p->bEnableTransformSkip = zone->bEnableTransformSkip;</div><div>     p->bEnableAMP = zone->bEnableAMP;</div><div> </div><div>+    if (m_param->rc.rateControlMode == X265_RC_ABR)</div><div>+        p->rc.bitrate = zone->rc.bitrate;</div><div>+    if (m_param->rc.rateControlMode == X265_RC_CRF)</div><div>+        p->rc.rfConstant = zone->rc.rfConstant;</div><div>+    if (m_param->rc.rateControlMode == X265_RC_CQP)</div><div>+    {</div><div>+        p->rc.qp = zone->rc.qp;</div><div>+        p->rc.aqMode = X265_AQ_NONE;</div><div>+    }</div><div>+</div><div>     memcpy(zone, p, sizeof(x265_param));</div><div> }</div><div> </div><div>diff -r 587431d49124 -r 1a62483c0b75 source/encoder/ratecontrol.cpp</div><div>--- a/source/encoder/ratecontrol.cpp<span style="white-space:pre">        </span>Fri Dec 14 12:26:15 2018 +0530</div><div>+++ b/source/encoder/ratecontrol.cpp<span style="white-space:pre">    </span>Fri Dec 14 12:28:56 2018 +0530</div><div>@@ -741,6 +741,20 @@</div><div>         if (m_param->rc.rfConstantMin)</div><div>             m_rateFactorMaxDecrement = m_param->rc.rfConstant - m_param->rc.rfConstantMin;</div><div>     }</div><div>+    if (m_param->rc.rateControlMode == X265_RC_CQP)</div><div>+    {</div><div>+        m_qp = m_param->rc.qp;</div><div>+        if (m_qp && !m_param->bLossless)</div><div>+        {</div><div>+            m_qpConstant[P_SLICE] = m_qp;</div><div>+            m_qpConstant[I_SLICE] = x265_clip3(QP_MIN, QP_MAX_MAX, (int)(m_qp - m_ipOffset + 0.5));</div><div>+            m_qpConstant[B_SLICE] = x265_clip3(QP_MIN, QP_MAX_MAX, (int)(m_qp + m_pbOffset + 0.5));</div><div>+        }</div><div>+        else</div><div>+        {</div><div>+            m_qpConstant[P_SLICE] = m_qpConstant[I_SLICE] = m_qpConstant[B_SLICE] = m_qp;</div><div>+        }</div><div>+    }</div><div>     m_bitrate = m_param->rc.bitrate * 1000;</div><div> }</div><div> </div><div>@@ -1231,6 +1245,17 @@</div><div>         rce->keptAsRef = IS_REFERENCED(curFrame);</div><div>     m_predType = getPredictorType(curFrame->m_lowres.sliceType, m_sliceType);</div><div>     rce->poc = m_curSlice->m_poc;</div><div>+</div><div>+    /* change ratecontrol stats for next zone if specified */</div><div>+    for (int i = 0; i < m_param->rc.zonefileCount; i++)</div><div>+    {</div><div>+        if (m_param->rc.zones[i].startFrame == curFrame->m_encodeOrder)</div><div>+        {</div><div>+            m_param = m_param->rc.zones[i].zoneParam;</div><div>+            reconfigureRC();</div><div>+            init(*m_curSlice->m_sps);</div><div>+        }</div><div>+    }</div><div>     if (m_param->rc.bStatRead)</div><div>     {</div><div>         X265_CHECK(rce->poc >= 0 && rce->poc < m_numEntries, "bad encode ordinal\n");</div><div><br></div></div></div>