[x265] [PATCH 4 of 5] zone: reconfigure rate control parameters

Pooja Venkatesan pooja at multicorewareinc.com
Thu Dec 20 06:39:36 CET 2018


# HG changeset patch
# User Pooja Venkatesan <pooja at multicorewareinc.com>
# Date 1544770736 -19800
#      Fri Dec 14 12:28:56 2018 +0530
# Node ID 1a62483c0b7549ef677ce2f343e9c7f1fcd45c44
# Parent  587431d49124b5e990883a919ec9eaf8b3708c34
zone: reconfigure rate control parameters

diff -r 587431d49124 -r 1a62483c0b75 source/common/param.cpp
--- a/source/common/param.cpp Fri Dec 14 12:26:15 2018 +0530
+++ b/source/common/param.cpp Fri Dec 14 12:28:56 2018 +0530
@@ -637,6 +637,21 @@
     }
     OPT("b-intra") p->bIntraInBFrames = atobool(value);
     OPT("scaling-list") p->scalingLists = strdup(value);
+    OPT("crf")
+    {
+        p->rc.rfConstant = atof(value);
+        p->rc.rateControlMode = X265_RC_CRF;
+    }
+    OPT("qp")
+    {
+        p->rc.qp = atoi(value);
+        p->rc.rateControlMode = X265_RC_CQP;
+    }
+    OPT("bitrate")
+    {
+        p->rc.bitrate = atoi(value);
+        p->rc.rateControlMode = X265_RC_ABR;
+    }
     OPT("aq-mode") p->rc.aqMode = atoi(value);
     OPT("aq-strength") p->rc.aqStrength = atof(value);
     OPT("nr-intra") p->noiseReductionIntra = atoi(value);
diff -r 587431d49124 -r 1a62483c0b75 source/encoder/encoder.cpp
--- a/source/encoder/encoder.cpp Fri Dec 14 12:26:15 2018 +0530
+++ b/source/encoder/encoder.cpp Fri Dec 14 12:28:56 2018 +0530
@@ -2643,6 +2643,16 @@
     p->bEnableTransformSkip = zone->bEnableTransformSkip;
     p->bEnableAMP = zone->bEnableAMP;

+    if (m_param->rc.rateControlMode == X265_RC_ABR)
+        p->rc.bitrate = zone->rc.bitrate;
+    if (m_param->rc.rateControlMode == X265_RC_CRF)
+        p->rc.rfConstant = zone->rc.rfConstant;
+    if (m_param->rc.rateControlMode == X265_RC_CQP)
+    {
+        p->rc.qp = zone->rc.qp;
+        p->rc.aqMode = X265_AQ_NONE;
+    }
+
     memcpy(zone, p, sizeof(x265_param));
 }

diff -r 587431d49124 -r 1a62483c0b75 source/encoder/ratecontrol.cpp
--- a/source/encoder/ratecontrol.cpp Fri Dec 14 12:26:15 2018 +0530
+++ b/source/encoder/ratecontrol.cpp Fri Dec 14 12:28:56 2018 +0530
@@ -741,6 +741,20 @@
         if (m_param->rc.rfConstantMin)
             m_rateFactorMaxDecrement = m_param->rc.rfConstant -
m_param->rc.rfConstantMin;
     }
+    if (m_param->rc.rateControlMode == X265_RC_CQP)
+    {
+        m_qp = m_param->rc.qp;
+        if (m_qp && !m_param->bLossless)
+        {
+            m_qpConstant[P_SLICE] = m_qp;
+            m_qpConstant[I_SLICE] = x265_clip3(QP_MIN, QP_MAX_MAX,
(int)(m_qp - m_ipOffset + 0.5));
+            m_qpConstant[B_SLICE] = x265_clip3(QP_MIN, QP_MAX_MAX,
(int)(m_qp + m_pbOffset + 0.5));
+        }
+        else
+        {
+            m_qpConstant[P_SLICE] = m_qpConstant[I_SLICE] =
m_qpConstant[B_SLICE] = m_qp;
+        }
+    }
     m_bitrate = m_param->rc.bitrate * 1000;
 }

@@ -1231,6 +1245,17 @@
         rce->keptAsRef = IS_REFERENCED(curFrame);
     m_predType = getPredictorType(curFrame->m_lowres.sliceType,
m_sliceType);
     rce->poc = m_curSlice->m_poc;
+
+    /* change ratecontrol stats for next zone if specified */
+    for (int i = 0; i < m_param->rc.zonefileCount; i++)
+    {
+        if (m_param->rc.zones[i].startFrame == curFrame->m_encodeOrder)
+        {
+            m_param = m_param->rc.zones[i].zoneParam;
+            reconfigureRC();
+            init(*m_curSlice->m_sps);
+        }
+    }
     if (m_param->rc.bStatRead)
     {
         X265_CHECK(rce->poc >= 0 && rce->poc < m_numEntries, "bad encode
ordinal\n");
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20181220/2776ef5e/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: x265-clean-4 (1).patch
Type: application/octet-stream
Size: 3527 bytes
Desc: not available
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20181220/2776ef5e/attachment.obj>


More information about the x265-devel mailing list