[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