[x265] [PATCH] rc: fix rate factor values recorded in csv
Aarthi Priya Thirumalai
aarthi at multicorewareinc.com
Fri Dec 11 15:47:15 CET 2015
pls ignore.. sending revised patch for this
On Thu, Dec 10, 2015 at 10:48 PM, Aarthi Priya Thirumalai <
aarthi at multicorewareinc.com> wrote:
> # HG changeset patch
> # User Aarthi Priya Thirumalai <aarthi at multicorewareinc.com>
> # Date 1449763621 -19800
> # Thu Dec 10 21:37:01 2015 +0530
> # Node ID 721d60a7988b85083f72832b58e5e98f42d5a678
> # Parent 33d04da2f68830ac51151cfbda8f38fb9a7e8bb9
> rc: fix rate factor values recorded in csv
>
> diff -r 33d04da2f688 -r 721d60a7988b source/encoder/ratecontrol.cpp
> --- a/source/encoder/ratecontrol.cpp Wed Dec 09 22:24:25 2015 +0530
> +++ b/source/encoder/ratecontrol.cpp Thu Dec 10 21:37:01 2015 +0530
> @@ -142,6 +142,7 @@
> rce->expectedVbv = rce2Pass->expectedVbv;
> rce->blurredComplexity = rce2Pass->blurredComplexity;
> rce->sliceType = rce2Pass->sliceType;
> + rce->qRceq = rce2Pass->qRceq;
> }
>
> } // end anonymous namespace
> @@ -509,7 +510,7 @@
> char picType;
> int e;
> char *next;
> - double qpRc, qpAq, qNoVbv;
> + double qpRc, qpAq, qNoVbv, qRceq;
> next = strstr(p, ";");
> if (next)
> *next++ = 0;
> @@ -520,8 +521,8 @@
> return false;
> }
> rce = &m_rce2Pass[frameNumber];
> - e += sscanf(p, " in:%*d out:%*d type:%c q:%lf q-aq:%lf
> q-noVbv:%lf tex:%d mv:%d misc:%d icu:%lf pcu:%lf scu:%lf",
> - &picType, &qpRc, &qpAq, &qNoVbv, &rce->coeffBits,
> + e += sscanf(p, " in:%*d out:%*d type:%c q:%lf q-aq:%lf
> q-noVbv:%lf q-Rceq:%lf tex:%d mv:%d misc:%d icu:%lf pcu:%lf scu:%lf",
> + &picType, &qpRc, &qpAq, &qNoVbv, &qRceq,
> &rce->coeffBits,
> &rce->mvBits, &rce->miscBits, &rce->iCuCount,
> &rce->pCuCount,
> &rce->skipCuCount);
> rce->keptAsRef = true;
> @@ -545,6 +546,7 @@
> rce->qpNoVbv = qNoVbv;
> rce->qpaRc = qpRc;
> rce->qpAq = qpAq;
> + rce->qRceq = qRceq;
> p = next;
> }
> X265_FREE(statsBuf);
> @@ -2239,20 +2241,32 @@
> {
> if (m_param->rc.rateControlMode == X265_RC_ABR &&
> !m_param->rc.bStatRead)
> checkAndResetABR(rce, true);
> + }
> + if (m_param->rc.rateControlMode == X265_RC_CRF)
> + {
> + double crfVal;
> + if (m_2pass || abs(curEncData.m_avgQpRc - rce->qpNoVbv) > 0.5)
> + {
> + double qpRef = curEncData.m_avgQpRc;
> + if (m_2pass)
> + {
> + double qpPrev = x265_qScale2qp(rce->qScale);
> + qpRef = abs(curEncData.m_avgQpRc - qpPrev) > 0.1 ?
> curEncData.m_avgQpRc : qpPrev;
> + }
> + double crfFactor = rce->qRceq /x265_qp2qScale(qpRef);
> + if(rce->sliceType == I_SLICE)
> + crfFactor /= m_param->rc.ipFactor;
> + else if (rce->sliceType == B_SLICE)
> + crfFactor *= m_param->rc.pbFactor;
> + double baseCplx = m_ncu * (m_param->bframes ? 120 : 80);
> + double mbtree_offset = m_param->rc.cuTree ? (1.0 -
> m_param->rc.qCompress) * 13.5 : 0;
> + crfVal = x265_qScale2qp(pow(baseCplx, 1 - m_qCompress) /
> crfFactor) - mbtree_offset;
> + }
> + else
> + crfVal = rce->sliceType == I_SLICE ? m_param->rc.rfConstant -
> m_ipOffset :
> + (rce->sliceType == B_SLICE ? m_param->rc.rfConstant +
> m_pbOffset : m_param->rc.rfConstant);
>
> - if (m_param->rc.rateControlMode == X265_RC_CRF)
> - {
> - if (int(curEncData.m_avgQpRc + 0.5) == slice->m_sliceQp)
> - curEncData.m_rateFactor = m_rateFactorConstant;
> - else
> - {
> - /* If vbv changed the frame QP recalculate the
> rate-factor */
> - double baseCplx = m_ncu * (m_param->bframes ? 120 : 80);
> - double mbtree_offset = m_param->rc.cuTree ? (1.0 -
> m_param->rc.qCompress) * 13.5 : 0;
> - curEncData.m_rateFactor = pow(baseCplx, 1 - m_qCompress) /
> - x265_qp2qScale(int(curEncData.m_avgQpRc + 0.5) +
> mbtree_offset);
> - }
> - }
> + curEncData.m_rateFactor = crfVal;
> }
>
> if (m_isAbr && !m_isAbrReset)
> @@ -2346,10 +2360,10 @@
> : rce->sliceType == P_SLICE ? 'P'
> : IS_REFERENCED(curFrame) ? 'B' : 'b';
> if (fprintf(m_statFileOut,
> - "in:%d out:%d type:%c q:%.2f q-aq:%.2f q-noVbv:%.2f
> tex:%d mv:%d misc:%d icu:%.2f pcu:%.2f scu:%.2f ;\n",
> + "in:%d out:%d type:%c q:%.2f q-aq:%.2f q-noVbv:%.2f
> q-Rceq:%.2f tex:%d mv:%d misc:%d icu:%.2f pcu:%.2f scu:%.2f ;\n",
> rce->poc, rce->encodeOrder,
> cType, curEncData.m_avgQpRc, curEncData.m_avgQpAq,
> - rce->qpNoVbv,
> + rce->qpNoVbv, rce->qRceq,
> curFrame->m_encData->m_frameStats.coeffBits,
> curFrame->m_encData->m_frameStats.mvBits,
> curFrame->m_encData->m_frameStats.miscBits,
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20151211/183c022c/attachment.html>
More information about the x265-devel
mailing list