[x265] [PATCH] Fix in zonefile parameter reflection in Lookahead analysis
Mahesh Pittala
mahesh at multicorewareinc.com
Thu Aug 24 10:49:56 UTC 2023
Pushed to the master and Release_3.5 branches.
On Mon, Aug 7, 2023 at 11:07 AM Karam Singh <
karam.singh at multicorewareinc.com> wrote:
> From 566d10f864a9b6aee43de9148be203af6cbfb656 Mon Sep 17 00:00:00 2001
> From: Karam Singh <karam.singh at multicorewareinc.com>
> Date: Tue, 18 Jul 2023 17:48:32 +0530
> Subject: [PATCH] Fix in zonefile parameter reflection in Lookahead analysis
>
> ---
> source/encoder/slicetype.cpp | 42 ++++++++++++++++++++----------------
> 1 file changed, 23 insertions(+), 19 deletions(-)
>
> diff --git a/source/encoder/slicetype.cpp b/source/encoder/slicetype.cpp
> index 8e67c2ed4..f478f3282 100644
> --- a/source/encoder/slicetype.cpp
> +++ b/source/encoder/slicetype.cpp
> @@ -1359,32 +1359,32 @@ void Lookahead::getEstimatedPictureCost(Frame
> *curFrame)
> default:
> return;
> }
> - if (!m_param->analysisLoad || !m_param->bDisableLookahead)
> + if (!curFrame->m_param->analysisLoad ||
> !curFrame->m_param->bDisableLookahead)
> {
> X265_CHECK(curFrame->m_lowres.costEst[b - p0][p1 - b] > 0, "Slice
> cost not estimated\n")
>
> - if (m_param->rc.cuTree && !m_param->rc.bStatRead)
> + if (curFrame->m_param->rc.cuTree &&
> !curFrame->m_param->rc.bStatRead)
> /* update row satds based on cutree offsets */
> curFrame->m_lowres.satdCost = frameCostRecalculate(frames,
> p0, p1, b);
> - else if (!m_param->analysisLoad || m_param->scaleFactor ||
> m_param->bAnalysisType == HEVC_INFO)
> + else if (!curFrame->m_param->analysisLoad ||
> curFrame->m_param->scaleFactor || curFrame->m_param->bAnalysisType ==
> HEVC_INFO)
> {
> - if (m_param->rc.aqMode)
> + if (curFrame->m_param->rc.aqMode)
> curFrame->m_lowres.satdCost =
> curFrame->m_lowres.costEstAq[b - p0][p1 - b];
> else
> curFrame->m_lowres.satdCost =
> curFrame->m_lowres.costEst[b - p0][p1 - b];
> }
> - if (m_param->rc.vbvBufferSize && m_param->rc.vbvMaxBitrate)
> + if (curFrame->m_param->rc.vbvBufferSize &&
> curFrame->m_param->rc.vbvMaxBitrate)
> {
> /* aggregate lowres row satds to CTU resolution */
> curFrame->m_lowres.lowresCostForRc =
> curFrame->m_lowres.lowresCosts[b - p0][p1 - b];
> uint32_t lowresRow = 0, lowresCol = 0, lowresCuIdx = 0, sum =
> 0, intraSum = 0;
> - uint32_t scale = m_param->maxCUSize / (2 *
> X265_LOWRES_CU_SIZE);
> - uint32_t numCuInHeight = (m_param->sourceHeight +
> m_param->maxCUSize - 1) / m_param->maxCUSize;
> + uint32_t scale = curFrame->m_param->maxCUSize / (2 *
> X265_LOWRES_CU_SIZE);
> + uint32_t numCuInHeight = (curFrame->m_param->sourceHeight +
> curFrame->m_param->maxCUSize - 1) / curFrame->m_param->maxCUSize;
> uint32_t widthInLowresCu = (uint32_t)m_8x8Width,
> heightInLowresCu = (uint32_t)m_8x8Height;
> double *qp_offset = 0;
> /* Factor in qpoffsets based on Aq/Cutree in CU costs */
> - if (m_param->rc.aqMode || m_param->bAQMotion)
> - qp_offset = (frames[b]->sliceType == X265_TYPE_B ||
> !m_param->rc.cuTree) ? frames[b]->qpAqOffset : frames[b]->qpCuTreeOffset;
> + if (curFrame->m_param->rc.aqMode ||
> curFrame->m_param->bAQMotion)
> + qp_offset = (frames[b]->sliceType == X265_TYPE_B ||
> !curFrame->m_param->rc.cuTree) ? frames[b]->qpAqOffset :
> frames[b]->qpCuTreeOffset;
>
> for (uint32_t row = 0; row < numCuInHeight; row++)
> {
> @@ -1400,7 +1400,7 @@ void Lookahead::getEstimatedPictureCost(Frame
> *curFrame)
> if (qp_offset)
> {
> double qpOffset;
> - if (m_param->rc.qgSize == 8)
> + if (curFrame->m_param->rc.qgSize == 8)
> qpOffset = (qp_offset[lowresCol * 2 +
> lowresRow * widthInLowresCu * 4] +
> qp_offset[lowresCol * 2 + lowresRow *
> widthInLowresCu * 4 + 1] +
> qp_offset[lowresCol * 2 + lowresRow *
> widthInLowresCu * 4 + curFrame->m_lowres.maxBlocksInRowFullRes] +
> @@ -1411,7 +1411,7 @@ void Lookahead::getEstimatedPictureCost(Frame
> *curFrame)
> int32_t intraCuCost =
> curFrame->m_lowres.intraCost[lowresCuIdx];
> curFrame->m_lowres.intraCost[lowresCuIdx] =
> (intraCuCost * x265_exp2fix8(qpOffset) + 128) >> 8;
> }
> - if (m_param->bIntraRefresh && slice->m_sliceType
> == X265_TYPE_P)
> + if (curFrame->m_param->bIntraRefresh &&
> slice->m_sliceType == X265_TYPE_P)
> for (uint32_t x =
> curFrame->m_encData->m_pir.pirStartCol; x <=
> curFrame->m_encData->m_pir.pirEndCol; x++)
> diff +=
> curFrame->m_lowres.intraCost[lowresCuIdx] - lowresCuCost;
> curFrame->m_lowres.lowresCostForRc[lowresCuIdx] =
> lowresCuCost;
> @@ -1802,15 +1802,19 @@ void Lookahead::slicetypeDecide()
> ScopedLock lock(m_inputLock);
>
> Frame *curFrame = m_inputQueue.first();
> + if (m_param->bResetZoneConfig)
> + {
> + for (int i = 0; i < m_param->rc.zonefileCount; i++)
> + {
> + if (m_param->rc.zones[i].startFrame == curFrame->m_poc)
> + m_param = m_param->rc.zones[i].zoneParam;
> + int nextZoneStart = m_param->rc.zones[i].startFrame;
> + nextZoneStart += nextZoneStart ?
> m_param->rc.zones[i].zoneParam->radl : 0;
> + if (nextZoneStart < curFrame->m_poc + maxSearch &&
> curFrame->m_poc < nextZoneStart)
> + maxSearch = nextZoneStart - curFrame->m_poc;
> + }
> + }
> int j;
> - if (m_param->bResetZoneConfig)
> - {
> - for (int i = 0; i < m_param->rc.zonefileCount; i++)
> - {
> - if (m_param->rc.zones[i].startFrame == curFrame->m_poc)
> - m_param = m_param->rc.zones[i].zoneParam;
> - }
> - }
> for (j = 0; j < m_param->bframes + 2; j++)
> {
> if (!curFrame) break;
> --
> 2.36.0.windows.1
>
>
>
> Karam Singh
> Senior Video Codec Engineer
> MulticoreWare, India
> _______________________________________________
> 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/20230824/49b8ddd5/attachment.htm>
More information about the x265-devel
mailing list