[x265] [PATCH] analysis: removed switch-case to read the best ref index
Steve Borho
steve at borho.org
Tue May 26 13:48:15 CEST 2015
On 05/25, ashok at multicorewareinc.com wrote:
> # HG changeset patch
> # User Ashok Kumar Mishra<ashok at multicorewareinc.com>
> # Date 1432566054 -19800
> # Mon May 25 20:30:54 2015 +0530
> # Node ID 44f4024a71b921acc99d21a4e342ebe791d8128b
> # Parent 1335a2788c60d97c68d25250f847fe6a76fb0de6
> analysis: removed switch-case to read the best ref index
>
> diff -r 1335a2788c60 -r 44f4024a71b9 source/common/cudata.h
> --- a/source/common/cudata.h Mon May 25 20:30:54 2015 +0530
> +++ b/source/common/cudata.h Mon May 25 20:30:54 2015 +0530
> @@ -222,6 +222,8 @@
> void getNeighbourMV(uint32_t puIdx, uint32_t absPartIdx, InterNeighbourMV* neighbours) const;
> void getIntraTUQtDepthRange(uint32_t tuDepthRange[2], uint32_t absPartIdx) const;
> void getInterTUQtDepthRange(uint32_t tuDepthRange[2], uint32_t absPartIdx) const;
> + uint32_t getBestRefIdx(uint32_t subPartIdx) const { return ((m_interDir[subPartIdx] & 1) << m_refIdx[0][subPartIdx]) |
> + (((m_interDir[subPartIdx] >> 1) & 1) << (m_refIdx[1][subPartIdx] + 16)); }
nice, I wonder if this needs to be declared inline or whether the
compiler is generally doing this itself.
> uint32_t getNumPartInter() const { return nbPartsTable[(int)m_partSize[0]]; }
> bool isIntra(uint32_t absPartIdx) const { return m_predMode[absPartIdx] == MODE_INTRA; }
> diff -r 1335a2788c60 -r 44f4024a71b9 source/encoder/analysis.cpp
> --- a/source/encoder/analysis.cpp Mon May 25 20:30:54 2015 +0530
> +++ b/source/encoder/analysis.cpp Mon May 25 20:30:54 2015 +0530
> @@ -853,20 +853,7 @@
> if (m_param->limitReferences & X265_REF_LIMIT_CU)
> {
> CUData& cu = md.pred[PRED_2Nx2N].cu;
> - int refMask;
> - switch (cu.m_interDir[0])
> - {
> - case 1:
> - refMask = 1 << cu.m_refIdx[0][0];
> - break;
> - case 2:
> - refMask = 1 << (cu.m_refIdx[1][0] + 16);
> - break;
> - case 3:
> - refMask = 1 << cu.m_refIdx[0][0];
> - refMask |= 1 << (cu.m_refIdx[1][0] + 16);
> - break;
> - }
> + uint32_t refMask = cu.getBestRefIdx(0);
> allSplitRefs = splitRefs[0] = splitRefs[1] = splitRefs[2] = splitRefs[3] = refMask;
> }
>
> @@ -1101,22 +1088,7 @@
> uint32_t puOffset = (g_puOffset[uint32_t(partSize)] << (g_unitSizeDepth - cu.m_cuDepth[0]) * 2) >> 4;
> refMask = 0;
> for (uint32_t puIdx = 0, subPartIdx = 0; puIdx < numPU; puIdx++, subPartIdx += puOffset)
> - {
> - uint32_t interDir = cu.m_interDir[subPartIdx];
> - switch (interDir)
> - {
> - case 1:
> - refMask |= 1 << cu.m_refIdx[0][subPartIdx];
> - break;
> - case 2:
> - refMask |= 1 << (cu.m_refIdx[1][subPartIdx] + 16);
> - break;
> - case 3:
> - refMask |= 1 << cu.m_refIdx[0][subPartIdx];
> - refMask |= 1 << (cu.m_refIdx[1][subPartIdx] + 16);
> - break;
> - }
> - }
> + refMask |= cu.getBestRefIdx(subPartIdx);
> }
>
> if (mightNotSplit)
> @@ -1254,20 +1226,7 @@
> if (m_param->limitReferences & X265_REF_LIMIT_CU)
> {
> CUData& cu = md.pred[PRED_2Nx2N].cu;
> - int refMask;
> - switch (cu.m_interDir[0])
> - {
> - case 1:
> - refMask = 1 << cu.m_refIdx[0][0];
> - break;
> - case 2:
> - refMask = 1 << (cu.m_refIdx[1][0] + 16);
> - break;
> - case 3:
> - refMask = 1 << cu.m_refIdx[0][0];
> - refMask |= 1 << (cu.m_refIdx[1][0] + 16);
> - break;
> - }
> + uint32_t refMask = cu.getBestRefIdx(0);
> allSplitRefs = splitRefs[0] = splitRefs[1] = splitRefs[2] = splitRefs[3] = refMask;
> }
>
> @@ -1390,22 +1349,7 @@
> uint32_t puOffset = (g_puOffset[uint32_t(partSize)] << (g_unitSizeDepth - cu.m_cuDepth[0]) * 2) >> 4;
> refMask = 0;
> for (uint32_t puIdx = 0, subPartIdx = 0; puIdx < numPU; puIdx++, subPartIdx += puOffset)
> - {
> - uint32_t interDir = cu.m_interDir[subPartIdx];
> - switch (interDir)
> - {
> - case 1:
> - refMask |= 1 << cu.m_refIdx[0][subPartIdx];
> - break;
> - case 2:
> - refMask |= 1 << (cu.m_refIdx[1][subPartIdx] + 16);
> - break;
> - case 3:
> - refMask |= 1 << cu.m_refIdx[0][subPartIdx];
> - refMask |= 1 << (cu.m_refIdx[1][subPartIdx] + 16);
> - break;
> - }
> - }
> + refMask |= cu.getBestRefIdx(subPartIdx);
> }
>
> /* Copy best data to encData CTU and recon */
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel
--
Steve Borho
More information about the x265-devel
mailing list