[x265] [PATCH] Fix in zonefile parameter reflection in Lookahead analysis
Karam Singh
karam.singh at multicorewareinc.com
Mon Aug 7 05:37:18 UTC 2023
>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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20230807/fa65b8c4/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Fix_in_zonefile_parameter_reflection_in_Lookahead_analysis.diff
Type: application/octet-stream
Size: 5934 bytes
Desc: not available
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20230807/fa65b8c4/attachment-0001.obj>
More information about the x265-devel
mailing list