[x265] [PATCH 3 of 4] limitTU : use neighbouring CUs' TU depth to limit 1st subTU's depth
Bhavna Hariharan
bhavna at multicorewareinc.com
Fri Nov 18 05:22:36 CET 2016
There is a mistake in the first patch, please apply the latest patch.
Regards,
Bhavna Hariharan
On Fri, Nov 18, 2016 at 9:49 AM, Bhavna Hariharan <
bhavna at multicorewareinc.com> wrote:
> # HG changeset patch
> # User Bhavna Hariharan <bhavna at multicorewareinc.com>
> # Date 1479380469 -19800
> # Thu Nov 17 16:31:09 2016 +0530
> # Node ID d4425aa677c63b8486dde5bb716f9a191da6bdaa
> # Parent 07a4e4d785a69f719922129ca5997b12552bb4ab
> limitTU : use neighbouring CUs' TU depth to limit 1st subTU's depth
>
> diff -r 07a4e4d785a6 -r d4425aa677c6 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 d4425aa677c6 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,14 @@
> 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;
> + estimateResidualQT(interMode, cuGeom, 0, 0, *resiYuv, costs,
> tuDepthRange);
> + m_maxTUDepth = tempDepth;
> + }
> + else
> + estimateResidualQT(interMode, cuGeom, 0, 0, *resiYuv, costs,
> tuDepthRange);
>
> uint32_t tqBypass = cu.m_tqBypass[0];
> if (!tqBypass)
> @@ -2898,10 +2905,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 +2976,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)
> {
>
>
>
> Regards,
>
> Bhavna Hariharan
>
> On Thu, Nov 17, 2016 at 5:06 PM, <bhavna at multicorewareinc.com> wrote:
>
>> # 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->get
>> PicCTU(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)
>> {
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20161118/79cb693b/attachment-0001.html>
More information about the x265-devel
mailing list