[x265] [x265 - PATCH] vbv: fix incorrect target fill

Aruna Matheswaran aruna at multicorewareinc.com
Wed Sep 30 20:14:16 CEST 2020


>From e56e88cc54e6c5fc8c8997937e3b46744e9de66a Mon Sep 17 00:00:00 2001
From: Aruna <aruna at multicorewareinc.com>
Date: Wed, 30 Sep 2020 23:38:34 +0530
Subject: [PATCH] vbv: fix incorrect target fill

---
 source/encoder/ratecontrol.cpp | 8 +++++---
 source/encoder/ratecontrol.h   | 2 ++
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/source/encoder/ratecontrol.cpp b/source/encoder/ratecontrol.cpp
index 4e7d52419..515d9e543 100644
--- a/source/encoder/ratecontrol.cpp
+++ b/source/encoder/ratecontrol.cpp
@@ -356,6 +356,8 @@ bool RateControl::init(const SPS& sps)
         m_bufferFillFinal = m_bufferSize * m_param->rc.vbvBufferInit;
         m_bufferFillActual = m_bufferFillFinal;
         m_bufferExcess = 0;
+        m_minBufferFill = m_param->minVbvFullness / 100;
+        m_maxBufferFill = 1 - (m_param->maxVbvFullness / 100);
         m_initVbv = true;
     }

@@ -2380,7 +2382,7 @@ double RateControl::clipQscale(Frame* curFrame,
RateControlEntry* rce, double q)
                     {
                         finalDur = x265_clip3(0.4, 1.0, totalDuration);
                     }
-                    targetFill = X265_MIN(m_bufferFill + totalDuration *
m_vbvMaxRate * 0.5, m_bufferSize * ((m_param->minVbvFullness / 100) *
finalDur));
+                    targetFill = X265_MIN(m_bufferFill + totalDuration *
m_vbvMaxRate * 0.5, m_bufferSize * (1 - m_minBufferFill * finalDur));
                     if (bufferFillCur < targetFill)
                     {
                         q *= 1.01;
@@ -2389,7 +2391,7 @@ double RateControl::clipQscale(Frame* curFrame,
RateControlEntry* rce, double q)
                     }
                     /* Try to get the buffer not more than 80% filled, but
don't set an impossible goal. */

-                    targetFill = x265_clip3(m_bufferSize *
((m_param->maxVbvFullness / 100) * finalDur), m_bufferSize, m_bufferFill -
totalDuration * m_vbvMaxRate * 0.5);
+                    targetFill = x265_clip3(m_bufferSize * (1 -
m_maxBufferFill * finalDur), m_bufferSize, m_bufferFill - totalDuration *
m_vbvMaxRate * 0.5);
                     if ((m_isCbr || m_2pass) && bufferFillCur > targetFill
&& !m_isSceneTransition)
                     {
                         q /= 1.01;
@@ -2406,7 +2408,7 @@ double RateControl::clipQscale(Frame* curFrame,
RateControlEntry* rce, double q)
             /* Fallback to old purely-reactive algorithm: no lookahead. */
             if ((m_sliceType == P_SLICE || m_sliceType == B_SLICE ||
                     (m_sliceType == I_SLICE && m_lastNonBPictType ==
I_SLICE)) &&
-                m_bufferFill / m_bufferSize < (m_param->minVbvFullness /
100))
+                m_bufferFill / m_bufferSize < m_minBufferFill)
             {
                 q /= x265_clip3(0.5, 1.0, 2.0 * m_bufferFill /
m_bufferSize);
             }
diff --git a/source/encoder/ratecontrol.h b/source/encoder/ratecontrol.h
index 809e0c620..449cb218b 100644
--- a/source/encoder/ratecontrol.h
+++ b/source/encoder/ratecontrol.h
@@ -164,6 +164,8 @@ public:
     double m_avgPFrameQp;
     double m_bufferFillActual;
     double m_bufferExcess;
+    double m_minBufferFill;
+    double m_maxBufferFill;
     bool   m_isFirstMiniGop;
     Predictor m_pred[4];       /* Slice predictors to preidct bits for
each Slice type - I,P,Bref and B */
     int64_t m_leadingNoBSatd;
-- 
2.20.1.windows.1


-- 
Regards,
*Aruna Matheswaran,*
Video Codec Engineer,
Media & AI analytics BU,
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20200930/de1fdda1/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: x265.diff
Type: application/octet-stream
Size: 3378 bytes
Desc: not available
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20200930/de1fdda1/attachment-0001.obj>


More information about the x265-devel mailing list