[x265] [PATCH] rc: fix buffer underflow issue in vbv
Steve Borho
steve at borho.org
Tue Mar 17 20:20:07 CET 2015
On 03/17, aarthi at multicorewareinc.com wrote:
> # HG changeset patch
> # User Aarthi Thirumalai
> # Date 1426612817 -19800
> # Tue Mar 17 22:50:17 2015 +0530
> # Node ID 638a3af86fa12132aae47ed0d4b321ce6cc36ed2
> # Parent cc579ffe4b7e0cd2b554a573ba70ff8e8c726d42
> rc: fix buffer underflow issue in vbv
queued for testing
> diff -r cc579ffe4b7e -r 638a3af86fa1 source/encoder/ratecontrol.cpp
> --- a/source/encoder/ratecontrol.cpp Tue Mar 17 11:11:32 2015 +0530
> +++ b/source/encoder/ratecontrol.cpp Tue Mar 17 22:50:17 2015 +0530
> @@ -1369,36 +1369,36 @@
>
> double qScale = x265_qp2qScale(q);
> double lmin = 0, lmax = 0;
> - if (m_isCbr)
> + if (m_isVbv)
> {
> - qScale = tuneAbrQScaleFromFeedback(qScale);
> - if (!m_isAbrReset)
> + lmin = m_lastQScaleFor[P_SLICE] / m_lstep;
> + lmax = m_lastQScaleFor[P_SLICE] * m_lstep;
> + if (m_isCbr)
> {
> - lmin = m_lastQScaleFor[P_SLICE] / m_lstep;
> - lmax = m_lastQScaleFor[P_SLICE] * m_lstep;
> - qScale = x265_clip3(lmin, lmax, qScale);
> + qScale = tuneAbrQScaleFromFeedback(qScale);
> + if (!m_isAbrReset)
> + qScale = x265_clip3(lmin, lmax, qScale);
> + q = x265_qScale2qp(qScale);
> }
> - q = x265_qScale2qp(qScale);
> + rce->qpNoVbv = q;
> + if (!m_2pass)
> + {
> + qScale = clipQscale(curFrame, rce, qScale);
> + /* clip qp to permissible range after vbv-lookahead estimation to avoid possible
> + * mispredictions by initial frame size predictors */
> + // if (m_pred[m_sliceType].count == 1)
> + // qScale = x265_clip3(lmin, lmax, qScale);
> + m_lastQScaleFor[m_sliceType] = qScale;
> + rce->frameSizePlanned = predictSize(&m_pred[m_sliceType], qScale, (double)m_currentSatd);
> + }
> + else
> + {
> + rce->frameSizePlanned = qScale2bits(rce, qScale);
> + }
> + /* Limit planned size by MinCR */
> + rce->frameSizePlanned = X265_MIN(rce->frameSizePlanned, rce->frameSizeMaximum);
> + rce->frameSizeEstimated = rce->frameSizePlanned;
> }
> - rce->qpNoVbv = q;
> - if (!m_2pass && m_isVbv)
> - {
> - qScale = clipQscale(curFrame, rce, qScale);
> - /* clip qp to permissible range after vbv-lookahead estimation to avoid possible
> - * mispredictions by initial frame size predictors */
> - if (m_pred[m_sliceType].count == 1)
> - qScale = x265_clip3(lmin, lmax, qScale);
> - m_lastQScaleFor[m_sliceType] = qScale;
> - rce->frameSizePlanned = predictSize(&m_pred[m_sliceType], qScale, (double)m_currentSatd);
> - }
> - else if (m_2pass && m_isVbv)
> - {
> - rce->frameSizePlanned = qScale2bits(rce, qScale);
> - }
> - /* Limit planned size by MinCR */
> - if (m_isVbv)
> - rce->frameSizePlanned = X265_MIN(rce->frameSizePlanned, rce->frameSizeMaximum);
> - rce->frameSizeEstimated = rce->frameSizePlanned;
> rce->newQScale = qScale;
> return qScale;
> }
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel
--
Steve Borho
More information about the x265-devel
mailing list