[x265] [PATCH 3 of 4] limitTU : use neighbouring CUs' TU depth to limit 1st subTU's depth
bhavna at multicorewareinc.com
bhavna at multicorewareinc.com
Thu Nov 17 12:36:09 CET 2016
# HG changeset patch
# User Bhavna Hariharan <bhavna at multicorewareinc.com>
# Date 1479380469 -19800
# Thu Nov 17 16:31:09 2016 +0530
# Node ID f5d3a5aedcdf20235ec76dbf9aba516da83e8dd1
# Parent 07a4e4d785a69f719922129ca5997b12552bb4ab
limitTU : use neighbouring CUs' TU depth to limit 1st subTU's depth
diff -r 07a4e4d785a6 -r f5d3a5aedcdf source/encoder/analysis.cpp
--- a/source/encoder/analysis.cpp Thu Nov 17 12:19:38 2016 +0530
+++ b/source/encoder/analysis.cpp Thu Nov 17 16:31:09 2016 +0530
@@ -377,7 +377,7 @@
checkBestMode(md.pred[PRED_INTRA_NxN], depth);
}
- if (limitTU == X265_TU_LIMIT_NEIGH && cuGeom.log2CUSize >= 4)
+ if ((limitTU & X265_TU_LIMIT_NEIGH) && cuGeom.log2CUSize >= 4)
{
CUData* ctu = md.bestMode->cu.m_encData->getPicCTU(parentCTU.m_cuAddr);
int8_t maxTUDepth = -1;
@@ -954,7 +954,7 @@
bool skipRectAmp = false;
bool chooseMerge = false;
- if (limitTU == X265_TU_LIMIT_NEIGH && cuGeom.log2CUSize >= 4)
+ if ((limitTU & X265_TU_LIMIT_NEIGH) && cuGeom.log2CUSize >= 4)
m_maxTUDepth = loadTUDepth(cuGeom, parentCTU);
SplitData splitData[4];
@@ -1463,7 +1463,7 @@
if (m_param->rdLevel)
md.bestMode->reconYuv.copyToPicYuv(reconPic, cuAddr, cuGeom.absPartIdx);
- if (limitTU == X265_TU_LIMIT_NEIGH && cuGeom.log2CUSize >= 4)
+ if ((limitTU & X265_TU_LIMIT_NEIGH) && cuGeom.log2CUSize >= 4)
{
if (mightNotSplit)
{
@@ -1498,7 +1498,7 @@
md.pred[PRED_2Nx2N].rdCost = 0;
}
- if (limitTU == X265_TU_LIMIT_NEIGH && cuGeom.log2CUSize >= 4)
+ if ((limitTU & X265_TU_LIMIT_NEIGH) && cuGeom.log2CUSize >= 4)
m_maxTUDepth = loadTUDepth(cuGeom, parentCTU);
SplitData splitData[4];
@@ -1827,7 +1827,7 @@
if (mightSplit)
addSplitFlagCost(*md.bestMode, cuGeom.depth);
}
- if (limitTU == X265_TU_LIMIT_NEIGH && cuGeom.log2CUSize >= 4)
+ if ((limitTU & X265_TU_LIMIT_NEIGH) && cuGeom.log2CUSize >= 4)
{
if (mightNotSplit)
{
diff -r 07a4e4d785a6 -r f5d3a5aedcdf source/encoder/search.cpp
--- a/source/encoder/search.cpp Thu Nov 17 12:19:38 2016 +0530
+++ b/source/encoder/search.cpp Thu Nov 17 16:31:09 2016 +0530
@@ -2625,7 +2625,7 @@
uint32_t tuDepthRange[2];
cu.getInterTUQtDepthRange(tuDepthRange, 0);
- if (limitTU == X265_TU_LIMIT_NEIGH)
+ if (limitTU & X265_TU_LIMIT_NEIGH)
{
int maxLog2CUSize = (int)g_log2Size[m_param->maxCUSize];
m_maxTUDepth = x265_clip3(maxLog2CUSize - (int32_t)tuDepthRange[1], maxLog2CUSize - (int32_t)tuDepthRange[0], m_maxTUDepth);
@@ -2639,7 +2639,12 @@
memset(&m_cacheTU, 0, sizeof(TUInfoCache));
Cost costs;
- estimateResidualQT(interMode, cuGeom, 0, 0, *resiYuv, costs, tuDepthRange);
+ if (limitTU == X265_TU_LIMIT_DFS_NEIGH)
+ {
+ int32_t tempDepth = m_maxTUDepth;
+ m_maxTUDepth = tempDepth;
+ }
+ estimateResidualQT(interMode, cuGeom, 0, 0, *resiYuv, costs, tuDepthRange);
uint32_t tqBypass = cu.m_tqBypass[0];
if (!tqBypass)
@@ -2898,10 +2903,11 @@
uint32_t ycbf = 0, ucbf = 0, vcbf = 0;
for (uint32_t qIdx = 0, qPartIdx = absPartIdx; qIdx < 4; ++qIdx, qPartIdx += qNumParts)
{
- if (limitTU == X265_TU_LIMIT_DFS && tuDepth == 0 && qIdx == 1)
+ if (limitTU & X265_TU_LIMIT_DFS && tuDepth == 0 && qIdx == 1)
{
+ m_maxTUDepth = cu.m_tuDepth[0];
// Fetch maximum TU depth of first sub partition to limit recursion of others
- for (uint32_t i = 0; i < cuGeom.numPartitions / 4; i++)
+ for (uint32_t i = 1; i < cuGeom.numPartitions / 4; i++)
m_maxTUDepth = X265_MAX(m_maxTUDepth, cu.m_tuDepth[i]);
}
estimateResidualQT(mode, cuGeom, qPartIdx, tuDepth + 1, resiYuv, splitCost, depthRange, splitMore);
@@ -2968,7 +2974,7 @@
}
}
}
- else if (limitTU == X265_TU_LIMIT_DFS || limitTU == X265_TU_LIMIT_NEIGH)
+ else if (limitTU & X265_TU_LIMIT_DFS_NEIGH)
{
if (bCheckSplit && m_maxTUDepth >= 0)
{
More information about the x265-devel
mailing list