On Thu, Apr 10, 2014 at 12:57 PM, <[email protected]> wrote:
> # HG changeset patch > # User Deepthi Nandakumar <[email protected]> > # Date 1397114813 -19800 > # Node ID 1c0f1a4ce209badcca1272f87c3917ec69ee1cc7 > # Parent 83ccf2f1453ffd91c9fd8b84b72e3d3daacba6c6 > ratecontrol: prevent one layer of non-zero I-slice qp clipping [CHANGES > OUTPUT]. > > This seems to have been an error importing RC code from x264. It could be > responsible > for error reports on I-slices (after POC 0) having much higher QP/low > visual quality. > Needs review. > > diff -r 83ccf2f1453f -r 1c0f1a4ce209 source/encoder/ratecontrol.cpp > --- a/source/encoder/ratecontrol.cpp Thu Apr 10 11:17:46 2014 +0530 > +++ b/source/encoder/ratecontrol.cpp Thu Apr 10 12:56:53 2014 +0530 > @@ -554,33 +554,34 @@ > q = x265_qp2qScale(accumPQp / accumPNorm); > q /= fabs(param->rc.ipFactor); > } > - > - if (param->rc.rateControlMode != X265_RC_CRF) > + else if(framesDone > 0) > { > - double lqmin = 0, lqmax = 0; > - if (totalBits == 0 && !isVbv) > + if (param->rc.rateControlMode != X265_RC_CRF) > { > - lqmin = x265_qp2qScale(ABR_INIT_QP_MIN) / lstep; > - lqmax = x265_qp2qScale(ABR_INIT_QP_MAX) * lstep; > - q = Clip3(lqmin, lqmax, q); > - } > - else if (totalBits > 0 || (isVbv && framesDone > 0)) > - { > - lqmin = lastQScaleFor[sliceType] / lstep; > - lqmax = lastQScaleFor[sliceType] * lstep; > - if (overflow > 1.1 && framesDone > 3) > - lqmax *= lstep; > - else if (overflow < 0.9) > - lqmin /= lstep; > - q = Clip3(lqmin, lqmax, q); > + double lqmin = 0, lqmax = 0; > + if (totalBits == 0 && !isVbv) > + { > + lqmin = x265_qp2qScale(ABR_INIT_QP_MIN) / lstep; > + lqmax = x265_qp2qScale(ABR_INIT_QP_MAX) * lstep; > + q = Clip3(lqmin, lqmax, q); > + } > The above clipping logic is not present in x264. This was consciously introduced only in x265 to clip I slice's qp along with N concurrent frames' qp when frame parallelism is enabled. If I slice's clipping is removed then we need to remove the above piece of code as well. Otherwise the frames following the I frame might have qp that gets clipped - lower than the I frame's qp. > + else if (totalBits > 0 || (isVbv && framesDone > 0)) > + { > + lqmin = lastQScaleFor[sliceType] / lstep; > + lqmax = lastQScaleFor[sliceType] * lstep; > + if (overflow > 1.1 && framesDone > 3) > + lqmax *= lstep; > + else if (overflow < 0.9) > + lqmin /= lstep; > + q = Clip3(lqmin, lqmax, q); > + } > } > } > - else > + else if (qCompress != 1 && param->rc.rateControlMode == > X265_RC_CRF) > { > - if (qCompress != 1 && framesDone == 0) > - q = x265_qp2qScale(ABR_INIT_QP) / > fabs(param->rc.ipFactor); > + q = x265_qp2qScale(ABR_INIT_QP) / fabs(param->rc.ipFactor); > } > - > + > q = Clip3(MIN_QPSCALE, MAX_MAX_QPSCALE, q); > qpNoVbv = x265_qScale2qp(q); > > _______________________________________________ > x265-devel mailing list > [email protected] > https://mailman.videolan.org/listinfo/x265-devel >
_______________________________________________ x265-devel mailing list [email protected] https://mailman.videolan.org/listinfo/x265-devel
