[x265] [PATCH 2 of 2] zone: reconfigure params for FEs in round robin fashion
Kalyan Goswami
kalyan at multicorewareinc.com
Wed Dec 26 09:33:04 CET 2018
Pushed
Thanks,
Kalyan Goswami, PhD
Video Architect @ MulticoreWare
http: <http://www.multicorewareinc.com/>//www.multicorewareinc.com
<http://www.multicorewareinc.com/>
+91 9884989331
On Thu, Dec 20, 2018 at 4:33 PM <bhavna at multicorewareinc.com> wrote:
> # HG changeset patch
> # User Bhavna Hariharan <bhavna at multicorewareinc.com>
> # Date 1544770049 -19800
> # Fri Dec 14 12:17:29 2018 +0530
> # Node ID 228dd85f3bdbb955481c06a79eddc5cf2fbbeaa1
> # Parent 592b83c9068d7f402c85394fcf113b767b58f08d
> zone: reconfigure params for FEs in round robin fashion
>
> diff -r 592b83c9068d -r 228dd85f3bdb source/encoder/analysis.cpp
> --- a/source/encoder/analysis.cpp Fri Dec 14 12:04:35 2018 +0530
> +++ b/source/encoder/analysis.cpp Fri Dec 14 12:17:29 2018 +0530
> @@ -140,6 +140,7 @@
> m_slice = ctu.m_slice;
> m_frame = &frame;
> m_bChromaSa8d = m_param->rdLevel >= 3;
> + m_param = m_frame->m_param;
>
> #if _DEBUG || CHECKED_BUILD
> invalidateContexts(0);
> diff -r 592b83c9068d -r 228dd85f3bdb source/encoder/api.cpp
> --- a/source/encoder/api.cpp Fri Dec 14 12:04:35 2018 +0530
> +++ b/source/encoder/api.cpp Fri Dec 14 12:17:29 2018 +0530
> @@ -94,6 +94,7 @@
> Encoder* encoder = NULL;
> x265_param* param = PARAM_NS::x265_param_alloc();
> x265_param* latestParam = PARAM_NS::x265_param_alloc();
> + x265_param* zoneParam = PARAM_NS::x265_param_alloc();
> if (!param || !latestParam)
> goto fail;
>
> @@ -126,6 +127,13 @@
> }
>
> encoder->create();
> +
> + memcpy(zoneParam, param, sizeof(x265_param));
> + for (int i = 0; i < param->rc.zonefileCount; i++)
> + {
> + encoder->configureZone(zoneParam, param->rc.zones[i].zoneParam);
> + }
> +
> /* Try to open CSV file handle */
> if (encoder->m_param->csvfn)
> {
> diff -r 592b83c9068d -r 228dd85f3bdb source/encoder/encoder.cpp
> --- a/source/encoder/encoder.cpp Fri Dec 14 12:04:35 2018 +0530
> +++ b/source/encoder/encoder.cpp Fri Dec 14 12:17:29 2018 +0530
> @@ -1000,11 +1000,11 @@
> }
>
> Frame *inFrame;
> + x265_param* p = (m_reconfigure || m_reconfigureRc) ?
> m_latestParam : m_param;
> if (m_dpb->m_freeList.empty())
> {
> inFrame = new Frame;
> inFrame->m_encodeStartTime = x265_mdate();
> - x265_param* p = (m_reconfigure || m_reconfigureRc) ?
> m_latestParam : m_param;
> if (inFrame->create(p, pic_in->quantOffsets))
> {
> /* the first PicYuv created is asked to generate the CU
> and block unit offset
> @@ -1437,6 +1437,12 @@
> readAnalysisFile(&frameEnc->m_analysisData,
> frameEnc->m_poc, frameEnc->m_lowres.sliceType);
> }
>
> + for (int i = 0; i < m_param->rc.zonefileCount; i++)
> + {
> + if (m_param->rc.zones[i].startFrame == frameEnc->m_poc)
> + x265_encoder_reconfig(this,
> m_param->rc.zones[i].zoneParam);
> + }
> +
> if (frameEnc->m_reconfigureRc && m_reconfigureRc)
> {
> memcpy(m_param, m_latestParam, sizeof(x265_param));
> @@ -1641,6 +1647,22 @@
> encParam->bIntraInBFrames = param->bIntraInBFrames;
> if (param->scalingLists && !encParam->scalingLists)
> encParam->scalingLists = strdup(param->scalingLists);
> +
> + encParam->rc.aqMode = param->rc.aqMode;
> + encParam->rc.aqStrength = param->rc.aqStrength;
> + encParam->noiseReductionInter = param->noiseReductionInter;
> + encParam->noiseReductionIntra = param->noiseReductionIntra;
> +
> + encParam->limitModes = param->limitModes;
> + encParam->bEnableSplitRdSkip = param->bEnableSplitRdSkip;
> + encParam->bCULossless = param->bCULossless;
> + encParam->bEnableRdRefine = param->bEnableRdRefine;
> + encParam->limitTU = param->limitTU;
> + encParam->bEnableTSkipFast = param->bEnableTSkipFast;
> + encParam->rdPenalty = param->rdPenalty;
> + encParam->dynamicRd = param->dynamicRd;
> + encParam->bEnableTransformSkip = param->bEnableTransformSkip;
> + encParam->bEnableAMP = param->bEnableAMP;
> }
> encParam->forceFlush = param->forceFlush;
> /* To add: Loop Filter/deblocking controls, transform skip, signhide
> require PPS to be resent */
> @@ -2584,6 +2606,41 @@
> pps->numRefIdxDefault[1] = 1;
> }
>
> +void Encoder::configureZone(x265_param *p, x265_param *zone)
> +{
> + p->maxNumReferences = zone->maxNumReferences;
> + p->bEnableFastIntra = zone->bEnableFastIntra;
> + p->bEnableEarlySkip = zone->bEnableEarlySkip;
> + p->bEnableRecursionSkip = zone->bEnableRecursionSkip;
> + p->searchMethod = zone->searchMethod;
> + p->searchRange = zone->searchRange;
> + p->subpelRefine = zone->subpelRefine;
> + p->rdoqLevel = zone->rdoqLevel;
> + p->rdLevel = zone->rdLevel;
> + p->bEnableRectInter = zone->bEnableRectInter;
> + p->maxNumMergeCand = zone->maxNumMergeCand;
> + p->bIntraInBFrames = zone->bIntraInBFrames;
> + p->scalingLists = strdup(zone->scalingLists);
> +
> + p->rc.aqMode = zone->rc.aqMode;
> + p->rc.aqStrength = zone->rc.aqStrength;
> + p->noiseReductionInter = zone->noiseReductionInter;
> + p->noiseReductionIntra = zone->noiseReductionIntra;
> +
> + p->limitModes = zone->limitModes;
> + p->bEnableSplitRdSkip = zone->bEnableSplitRdSkip;
> + p->bCULossless = zone->bCULossless;
> + p->bEnableRdRefine = zone->bEnableRdRefine;
> + p->limitTU = zone->limitTU;
> + p->bEnableTSkipFast = zone->bEnableTSkipFast;
> + p->rdPenalty = zone->rdPenalty;
> + p->dynamicRd = zone->dynamicRd;
> + p->bEnableTransformSkip = zone->bEnableTransformSkip;
> + p->bEnableAMP = zone->bEnableAMP;
> +
> + memcpy(zone, p, sizeof(x265_param));
> +}
> +
> void Encoder::configure(x265_param *p)
> {
> this->m_param = p;
> @@ -3226,6 +3283,12 @@
> p->crQpOffset = 4;
> }
> }
> +
> + if (m_param->rc.zonefileCount && p->bOpenGOP)
> + {
> + p->bOpenGOP = 0;
> + x265_log(p, X265_LOG_WARNING, "Zone encoding requires closed gop
> structure. Enabling closed GOP.\n");
> + }
> }
>
> void Encoder::readAnalysisFile(x265_analysis_data* analysis, int curPoc,
> const x265_picture* picIn, int paramBytes)
> diff -r 592b83c9068d -r 228dd85f3bdb source/encoder/encoder.h
> --- a/source/encoder/encoder.h Fri Dec 14 12:04:35 2018 +0530
> +++ b/source/encoder/encoder.h Fri Dec 14 12:17:29 2018 +0530
> @@ -193,6 +193,7 @@
> bool m_aborted; // fatal error detected
> bool m_reconfigure; // Encoder reconfigure in
> progress
> bool m_reconfigureRc;
> + bool m_reconfigureZone;
>
> int m_saveCtuDistortionLevel;
>
> @@ -275,6 +276,8 @@
>
> void configure(x265_param *param);
>
> + void configureZone(x265_param *p, x265_param *zone);
> +
> void updateVbvPlan(RateControl* rc);
>
> void readAnalysisFile(x265_analysis_data* analysis, int poc, int
> sliceType);
> diff -r 592b83c9068d -r 228dd85f3bdb source/encoder/slicetype.cpp
> --- a/source/encoder/slicetype.cpp Fri Dec 14 12:04:35 2018 +0530
> +++ b/source/encoder/slicetype.cpp Fri Dec 14 12:17:29 2018 +0530
> @@ -1115,6 +1115,11 @@
> frm.sliceType = m_param->bOpenGOP && m_lastKeyframe
> >= 0 ? X265_TYPE_I : X265_TYPE_IDR;
> }
> }
> + for (int i = 0; i < m_param->rc.zonefileCount; i++)
> + {
> + if (m_param->rc.zones[i].startFrame == frm.frameNum)
> + frm.sliceType = X265_TYPE_IDR;
> + }
> if ((frm.sliceType == X265_TYPE_I && frm.frameNum -
> m_lastKeyframe >= m_param->keyframeMin) || (frm.frameNum ==
> (m_param->chunkStart - 1)) || (frm.frameNum == m_param->chunkEnd))
> {
> if (m_param->bOpenGOP)
> _______________________________________________
> 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/20181226/d0d5bcac/attachment.html>
More information about the x265-devel
mailing list