[x265] [PATCH] ABR - Removed unused states, cleaned up the comments
Steve Borho
steve at borho.org
Wed Sep 18 04:37:43 CEST 2013
On Mon, Sep 16, 2013 at 1:43 PM, <aarthi at multicorewareinc.com> wrote:
> # HG changeset patch
> # User Aarthi Thirumalai
> # Date 1379356988 -19800
> # Tue Sep 17 00:13:08 2013 +0530
> # Node ID baeddbdc9ec349002f574bfc1763927f487cc88d
> # Parent 9a727efab9fa4048eed7330abe28cf7e088590fb
> ABR - Removed unused states, cleaned up the comments.
>
> Removed states that are not used in ABR or CQP rate contnrol modes.
>
Queued; I'll push this tomorrow if no-one complains
>
> diff -r 9a727efab9fa -r baeddbdc9ec3 source/encoder/ratecontrol.cpp
> --- a/source/encoder/ratecontrol.cpp Mon Sep 16 22:57:07 2013 +0530
> +++ b/source/encoder/ratecontrol.cpp Tue Sep 17 00:13:08 2013 +0530
> @@ -61,7 +61,7 @@
> ncu = (int)((param->sourceHeight * param->sourceWidth) /
> pow((int)param->maxCUSize, 2.0));
> lastNonBPictType = -1;
> baseQp = param->rc.qp;
> - qpm = qp = baseQp;
> + qp = baseQp;
>
> // heuristics- encoder specific
> qCompress = param->rc.qCompress; // tweak and test for x265.
> @@ -101,7 +101,7 @@
>
> //qstep - value set as encoder specific.
> lstep = pow(2, param->rc.qpStep / 6.0);
> - cbrDecay = 1.0;
> +
> }
>
> void RateControl::rateControlStart(TComPic* pic, Lookahead *l,
> RateControlEntry* rce)
> @@ -116,8 +116,7 @@
> lastSatd = l->getEstimatedPictureCost(pic);
> double q = qScale2qp(rateEstimateQscale(rce));
> qp = Clip3(MIN_QP, MAX_QP, (int)(q + 0.5));
> - rce->qpaRc = qpm = q;
> - rce->newQp = qp;
> + rce->qpaRc = q;
> accumPQpUpdate();
> break;
> }
> @@ -146,15 +145,14 @@
> accumPNorm *= .95;
> accumPNorm += 1;
> if (frameType == I_SLICE)
> - accumPQp += qpm + ipOffset;
> + accumPQp += qp + ipOffset;
> else
> - accumPQp += qpm;
> + accumPQp += qp;
> }
>
> double RateControl::rateEstimateQscale(RateControlEntry *rce)
> {
> double q;
> - // ratecontrol_entry_t rce = UNINIT(rce);
> int pictType = frameType;
>
> if (pictType == B_SLICE)
> @@ -207,8 +205,6 @@
> * tolerances, the bit distribution approaches that of 2pass. */
>
> double wantedBits, overflow = 1;
> - rce->pCount = ncu;
> -
> shortTermCplxSum *= 0.5;
> shortTermCplxCount *= 0.5;
> shortTermCplxSum += lastSatd / (CLIP_DURATION(frameDuration) /
> BASE_FRAME_DURATION);
> @@ -217,7 +213,6 @@
> rce->blurredComplexity = shortTermCplxSum / shortTermCplxCount;
> rce->mvBits = 0;
> rce->pictType = pictType;
> - //need to checked where it is initialized
> q = getQScale(rce, wantedBitsWindow / cplxrSum);
>
> /* ABR code can potentially be counterproductive in CBR, so just
> don't bother.
> @@ -236,7 +231,6 @@
> }
>
> if (pictType == I_SLICE && keyFrameInterval > 1
> - /* should test _next_ pict type, but that isn't decided yet */
> && lastNonBPictType != I_SLICE)
> {
> q = qp2qScale(accumPQp / accumPNorm);
> @@ -270,12 +264,10 @@
> q = Clip3(lqmin, lqmax, q);
> }
>
> - //FIXME use get_diff_limited_q() ?
> double lmin1 = lmin[pictType];
> double lmax1 = lmax[pictType];
> q = Clip3(lmin1, lmax1, q);
> - lastQScaleFor[pictType] =
> - lastQScale = q;
> + lastQScaleFor[pictType] = q;
>
> if (curFrame->getPOC() == 0)
> lastQScaleFor[P_SLICE] = q * fabs(ipFactor);
> @@ -300,12 +292,11 @@
> {
> rce->lastRceq = q;
> q /= rateFactor;
> - lastQScale = q;
> }
> return q;
> }
>
> -/* After encoding one frame, save stats and update ratecontrol state */
> +/* After encoding one frame, update ratecontrol state */
> int RateControl::rateControlEnd(int64_t bits, RateControlEntry* rce)
> {
> if (rateControlMode == X265_RC_ABR)
> @@ -320,9 +311,7 @@
> * Not perfectly accurate with B-refs, but good enough. */
> cplxrSum += bits * qp2qScale(rce->qpaRc) / (rce->lastRceq *
> fabs(pbFactor));
> }
> - cplxrSum *= cbrDecay;
> wantedBitsWindow += frameDuration * bitrate;
> - wantedBitsWindow *= cbrDecay;
> rce = NULL;
> }
> totalBits += bits;
> diff -r 9a727efab9fa -r baeddbdc9ec3 source/encoder/ratecontrol.h
> --- a/source/encoder/ratecontrol.h Mon Sep 16 22:57:07 2013 +0530
> +++ b/source/encoder/ratecontrol.h Tue Sep 17 00:13:08 2013 +0530
> @@ -35,12 +35,10 @@
> struct RateControlEntry
> {
> int pictType;
> - int pCount;
> - int newQp;
> int texBits;
> int mvBits;
> double blurredComplexity;
> - double qpaRc; /* average of macroblocks' qp before aq
> */
> + double qpaRc;
> double lastRceq;
> };
>
> @@ -54,9 +52,7 @@
> int keyFrameInterval; /* TODO: need to initialize in init */
> int qp; /* updated qp for current frame */
> int baseQp; /* CQP base QP */
> - double frameDuration; /* current frame duration in seconds */
> - double qpm; /* qp for current macroblock: precise
> double for AQ */
> -
> + double frameDuration; /* current frame duration in seconds */
> double bitrate;
> double rateTolerance;
> double qCompress;
> @@ -71,11 +67,8 @@
> int lastNonBPictType;
> double accumPQp; /* for determining I-frame quant */
> double accumPNorm;
> - double lastQScale;
> double lastQScaleFor[3]; /* last qscale for a specific pict type,
> used for max_diff & ipb factor stuff */
> double lstep;
> - double qpNoVbv; /* QP for the current frame if 1-pass VBV
> was disabled. */
> - double cbrDecay;
> double lmin[3]; /* min qscale by frame type */
> double lmax[3];
> double shortTermCplxSum;
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel
>
--
Steve Borho
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20130917/f9ff3d65/attachment-0001.html>
More information about the x265-devel
mailing list