[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