[x265] [PATCH] rc: fixes for 2 pass + vbv to calculate frameSizePlanned accurately
Deepthi Nandakumar
deepthi at multicorewareinc.com
Tue Sep 16 13:39:28 CEST 2014
Queued with nit fixes.
On Tue, Sep 16, 2014 at 2:21 PM, <aarthi at multicorewareinc.com> wrote:
> # HG changeset patch
> # User Aarthi Thirumalai
> # Date 1410757433 -19800
> # Mon Sep 15 10:33:53 2014 +0530
> # Node ID 49c54a540cc237659416be7d5fb53241fb0094e4
> # Parent 1de67321275e70d510f0df3d5b7d4b9d391a1e66
> rc: fixes for 2 pass + vbv to calculate frameSizePlanned accurately.
>
> diff -r 1de67321275e -r 49c54a540cc2 source/encoder/encoder.cpp
> --- a/source/encoder/encoder.cpp Mon Sep 15 15:00:13 2014 +0200
> +++ b/source/encoder/encoder.cpp Mon Sep 15 10:33:53 2014 +0530
> @@ -235,13 +235,10 @@
> void Encoder::updateVbvPlan(RateControl* rc)
> {
> int encIdx, curIdx;
> -
> - curIdx = (m_curEncoder + m_param->frameNumThreads - 1) %
> m_param->frameNumThreads;
> - encIdx = (curIdx + 1) % m_param->frameNumThreads;
> - while (encIdx != curIdx)
> + for ( int i = 0; i < m_param->frameNumThreads; i++)
> {
> - FrameEncoder *encoder = &m_frameEncoder[encIdx];
> - if (encoder->m_rce.isActive)
> + FrameEncoder *encoder = &m_frameEncoder[i];
> + if (encoder->m_rce.isActive && encoder->m_rce.poc !=
> rc->m_curSlice->m_poc)
> {
> int64_t bits = (int64_t)
> X265_MAX(encoder->m_rce.frameSizeEstimated,
> encoder->m_rce.frameSizePlanned);
> rc->m_bufferFill -= bits;
> @@ -251,7 +248,6 @@
> if (rc->m_2pass)
> rc->m_predictedBits += bits;
> }
> - encIdx = (encIdx + 1) % m_param->frameNumThreads;
> }
> }
>
> diff -r 1de67321275e -r 49c54a540cc2 source/encoder/ratecontrol.cpp
> --- a/source/encoder/ratecontrol.cpp Mon Sep 15 15:00:13 2014 +0200
> +++ b/source/encoder/ratecontrol.cpp Mon Sep 15 10:33:53 2014 +0530
> @@ -1365,12 +1365,20 @@
> q += m_pbOffset;
> rce->qpNoVbv = q;
> double qScale = x265_qp2qScale(q);
> - if (m_leadingBframes > 5 && m_isVbv)
> +
> + if (!m_2pass && m_isVbv)
> {
> - qScale = clipQscale(pic, qScale);
> - m_lastQScaleFor[m_sliceType] = qScale;
> + if (m_leadingBframes > 5)
> + {
> + qScale = clipQscale(pic, qScale);
> + m_lastQScaleFor[m_sliceType] = qScale;
> + }
> + rce->frameSizePlanned = predictSize(&m_predBfromP, qScale,
> (double)m_leadingNoBSatd);
> }
> - rce->frameSizePlanned = predictSize(&m_predBfromP, qScale,
> (double)m_leadingNoBSatd);
> + else if (m_2pass && m_isVbv)
> + {
> + rce->frameSizePlanned = qScale2bits(rce, qScale);
> + }
> rce->frameSizeEstimated = rce->frameSizePlanned;
> rce->newQScale = qScale;
> return qScale;
> @@ -1400,8 +1408,7 @@
> diff = m_predictedBits - (int64_t)rce->expectedBits;
> q = rce->newQScale;
> q /= Clip3(0.5, 2.0, (double)(abrBuffer - diff) / abrBuffer);
> - if (((rce->encodeOrder + 1 - m_param->frameNumThreads) >=
> m_fps) &&
> - (m_expectedBitsSum > 0))
> + if (m_expectedBitsSum > 0)
> {
> /* Adjust quant based on the difference between
> * achieved and expected bitrate so far */
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20140916/32264f0c/attachment.html>
More information about the x265-devel
mailing list