[x265] [PATCH] Allow rc and non-rc reconfigure to occur simultaneously
Pradeep Ramachandran
pradeep at multicorewareinc.com
Fri Jul 14 13:19:00 CEST 2017
On Fri, Jul 14, 2017 at 2:11 PM, <aruna at multicorewareinc.com> wrote:
> # HG changeset patch
> # User Aruna Matheswaran <aruna at multicorewareinc.com>
> # Date 1498626859 -19800
> # Wed Jun 28 10:44:19 2017 +0530
> # Node ID 52ef1f37afc21c8fdf908ed5c9f48de48efe15c3
> # Parent 18fa144d453ebd1f47905e2656c34e45794a8966
> Allow rc and non-rc reconfigure to occur simultaneously
>
Pushed to default
>
> diff -r 18fa144d453e -r 52ef1f37afc2 source/encoder/api.cpp
> --- a/source/encoder/api.cpp Thu Jul 13 16:50:35 2017 +0530
> +++ b/source/encoder/api.cpp Wed Jun 28 10:44:19 2017 +0530
> @@ -188,7 +188,8 @@
>
> x265_param save;
> Encoder* encoder = static_cast<Encoder*>(enc);
> - if (encoder->m_reconfigure || encoder->m_reconfigureRc) /*
> Reconfigure in progress */
> + bool isReconfigureRc = encoder->isReconfigureRc(encoder->m_latestParam,
> param_in);
> + if (encoder->m_reconfigure && !isReconfigureRc ||
> encoder->m_reconfigureRc && isReconfigureRc) /* Reconfigure in progress */
> return 1;
> memcpy(&save, encoder->m_latestParam, sizeof(x265_param));
> int ret = encoder->reconfigureParam(encoder->m_latestParam,
> param_in);
> @@ -205,16 +206,22 @@
> if (encoder->m_param->bRepeatHeaders)
> {
> if (encoder->m_scalingList.parseScalingList(encoder->m_
> latestParam->scalingLists))
> + {
> + memcpy(encoder->m_latestParam, &save,
> sizeof(x265_param));
> return -1;
> + }
> encoder->m_scalingList.setupQuantMatrices(encoder->m_
> param->internalCsp);
> }
> else
> {
> x265_log(encoder->m_param, X265_LOG_ERROR, "Repeat
> headers is turned OFF, cannot reconfigure scalinglists\n");
> + memcpy(encoder->m_latestParam, &save, sizeof(x265_param));
> return -1;
> }
> }
> - if (encoder->m_reconfigureRc)
> + if (!isReconfigureRc)
> + encoder->m_reconfigure = true;
> + else if (encoder->m_reconfigureRc)
> {
> VPS saveVPS;
> memcpy(&saveVPS.ptl, &encoder->m_vps.ptl,
> sizeof(saveVPS.ptl));
> @@ -225,11 +232,11 @@
> x265_log(encoder->m_param, X265_LOG_WARNING,
> "Profile/Level/Tier has changed from %d/%d/%s to %d/%d/%s.Cannot
> reconfigure rate-control.\n",
> saveVPS.ptl.profileIdc, saveVPS.ptl.levelIdc,
> saveVPS.ptl.tierFlag ? "High" : "Main", encoder->m_vps.ptl.profileIdc,
> encoder->m_vps.ptl.levelIdc,
> encoder->m_vps.ptl.tierFlag ? "High" : "Main");
> + memcpy(encoder->m_latestParam, &save, sizeof(x265_param));
> + memcpy(&encoder->m_vps.ptl, &saveVPS.ptl,
> sizeof(saveVPS.ptl));
> encoder->m_reconfigureRc = false;
> }
> }
> - else
> - encoder->m_reconfigure = true;
> encoder->printReconfigureParams();
> }
> return ret;
> diff -r 18fa144d453e -r 52ef1f37afc2 source/encoder/encoder.cpp
> --- a/source/encoder/encoder.cpp Thu Jul 13 16:50:35 2017 +0530
> +++ b/source/encoder/encoder.cpp Wed Jun 28 10:44:19 2017 +0530
> @@ -1130,48 +1130,61 @@
>
> int Encoder::reconfigureParam(x265_param* encParam, x265_param* param)
> {
> - encParam->maxNumReferences = param->maxNumReferences; // never uses
> more refs than specified in stream headers
> - encParam->bEnableFastIntra = param->bEnableFastIntra;
> - encParam->bEnableEarlySkip = param->bEnableEarlySkip;
> - encParam->bEnableRecursionSkip = param->bEnableRecursionSkip;
> - encParam->searchMethod = param->searchMethod;
> - /* Scratch buffer prevents me_range from being increased for esa/tesa
> */
> - if (param->searchRange < encParam->searchRange)
> - encParam->searchRange = param->searchRange;
> - /* We can't switch out of subme=0 during encoding. */
> - if (encParam->subpelRefine)
> - encParam->subpelRefine = param->subpelRefine;
> - encParam->rdoqLevel = param->rdoqLevel;
> - encParam->rdLevel = param->rdLevel;
> - encParam->bEnableRectInter = param->bEnableRectInter;
> - encParam->maxNumMergeCand = param->maxNumMergeCand;
> - encParam->bIntraInBFrames = param->bIntraInBFrames;
> - if (param->scalingLists && !encParam->scalingLists)
> - encParam->scalingLists = strdup(param->scalingLists);
> - /* VBV can't be turned ON if it wasn't ON to begin with and can't be
> turned OFF if it was ON to begin with*/
> - if (param->rc.vbvMaxBitrate > 0 && param->rc.vbvBufferSize > 0 &&
> - encParam->rc.vbvMaxBitrate > 0 && encParam->rc.vbvBufferSize > 0)
> + if (isReconfigureRc(encParam, param))
> {
> - m_reconfigureRc |= encParam->rc.vbvMaxBitrate !=
> param->rc.vbvMaxBitrate;
> - m_reconfigureRc |= encParam->rc.vbvBufferSize !=
> param->rc.vbvBufferSize;
> - if (m_reconfigureRc && m_param->bEmitHRDSEI)
> - x265_log(m_param, X265_LOG_WARNING, "VBV parameters cannot be
> changed when HRD is in use.\n");
> - else
> + /* VBV can't be turned ON if it wasn't ON to begin with and can't
> be turned OFF if it was ON to begin with*/
> + if (param->rc.vbvMaxBitrate > 0 && param->rc.vbvBufferSize > 0 &&
> + encParam->rc.vbvMaxBitrate > 0 && encParam->rc.vbvBufferSize
> > 0)
> {
> - encParam->rc.vbvMaxBitrate = param->rc.vbvMaxBitrate;
> - encParam->rc.vbvBufferSize = param->rc.vbvBufferSize;
> + m_reconfigureRc |= encParam->rc.vbvMaxBitrate !=
> param->rc.vbvMaxBitrate;
> + m_reconfigureRc |= encParam->rc.vbvBufferSize !=
> param->rc.vbvBufferSize;
> + if (m_reconfigureRc && m_param->bEmitHRDSEI)
> + x265_log(m_param, X265_LOG_WARNING, "VBV parameters
> cannot be changed when HRD is in use.\n");
> + else
> + {
> + encParam->rc.vbvMaxBitrate = param->rc.vbvMaxBitrate;
> + encParam->rc.vbvBufferSize = param->rc.vbvBufferSize;
> + }
> }
> + m_reconfigureRc |= encParam->rc.bitrate != param->rc.bitrate;
> + encParam->rc.bitrate = param->rc.bitrate;
> + m_reconfigureRc |= encParam->rc.rfConstant !=
> param->rc.rfConstant;
> + encParam->rc.rfConstant = param->rc.rfConstant;
> }
> - m_reconfigureRc |= encParam->rc.bitrate != param->rc.bitrate;
> - encParam->rc.bitrate = param->rc.bitrate;
> - m_reconfigureRc |= encParam->rc.rfConstant != param->rc.rfConstant;
> - encParam->rc.rfConstant = param->rc.rfConstant;
> -
> + else
> + {
> + encParam->maxNumReferences = param->maxNumReferences; // never
> uses more refs than specified in stream headers
> + encParam->bEnableFastIntra = param->bEnableFastIntra;
> + encParam->bEnableEarlySkip = param->bEnableEarlySkip;
> + encParam->bEnableRecursionSkip = param->bEnableRecursionSkip;
> + encParam->searchMethod = param->searchMethod;
> + /* Scratch buffer prevents me_range from being increased for
> esa/tesa */
> + if (param->searchRange < encParam->searchRange)
> + encParam->searchRange = param->searchRange;
> + /* We can't switch out of subme=0 during encoding. */
> + if (encParam->subpelRefine)
> + encParam->subpelRefine = param->subpelRefine;
> + encParam->rdoqLevel = param->rdoqLevel;
> + encParam->rdLevel = param->rdLevel;
> + encParam->bEnableRectInter = param->bEnableRectInter;
> + encParam->maxNumMergeCand = param->maxNumMergeCand;
> + encParam->bIntraInBFrames = param->bIntraInBFrames;
> + if (param->scalingLists && !encParam->scalingLists)
> + encParam->scalingLists = strdup(param->scalingLists);
> + }
> /* To add: Loop Filter/deblocking controls, transform skip, signhide
> require PPS to be resent */
> /* To add: SAO, temporal MVP, AMP, TU depths require SPS to be
> resent, at every CVS boundary */
> return x265_check_params(encParam);
> }
>
> +bool Encoder::isReconfigureRc(x265_param* latestParam, x265_param*
> param_in)
> +{
> + return (latestParam->rc.vbvMaxBitrate != param_in->rc.vbvMaxBitrate
> + || latestParam->rc.vbvBufferSize != param_in->rc.vbvBufferSize
> + || latestParam->rc.bitrate != param_in->rc.bitrate
> + || latestParam->rc.rfConstant != param_in->rc.rfConstant);
> +}
> +
> void Encoder::copyCtuInfo(x265_ctu_info_t** frameCtuInfo, int poc)
> {
> uint32_t widthInCU = (m_param->sourceWidth + m_param->maxCUSize - 1)
> >> m_param->maxLog2CUSize;
> diff -r 18fa144d453e -r 52ef1f37afc2 source/encoder/encoder.h
> --- a/source/encoder/encoder.h Thu Jul 13 16:50:35 2017 +0530
> +++ b/source/encoder/encoder.h Wed Jun 28 10:44:19 2017 +0530
> @@ -201,6 +201,8 @@
>
> int reconfigureParam(x265_param* encParam, x265_param* param);
>
> + bool isReconfigureRc(x265_param* latestParam, x265_param* param_in);
> +
> void copyCtuInfo(x265_ctu_info_t** frameCtuInfo, int poc);
>
> void getStreamHeaders(NALList& list, Entropy& sbacCoder, Bitstream&
> bs);
>
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20170714/9e548eb8/attachment.html>
More information about the x265-devel
mailing list