[x265] [PATCH] TComPattern: remove redundant functions used for CIP
Satoshi Nakagawa
nakagawa424 at oki.com
Wed Aug 6 05:58:07 CEST 2014
redundant functions ware to simplify non-CIP case, and to check
m_pps->bConstrainedIntraPred flag upper level.
I-slice is simplified case too.
> -----Original Message-----
> From: x265-devel [mailto:x265-devel-bounces at videolan.org] On Behalf Of
> santhoshini at multicorewareinc.com
> Sent: Tuesday, August 05, 2014 7:10 PM
> To: x265-devel at videolan.org
> Subject: [x265] [PATCH] TComPattern: remove redundant functions used for
> CIP
>
> # HG changeset patch
> # User Santhoshini Sekar <santhoshini at multicorewareinc.com>
> # Date 1407233322 -19800
> # Tue Aug 05 15:38:42 2014 +0530
> # Node ID aadca66911c2f838e5b6dba671f65a3abeafcb38
> # Parent 0d4723a0080cff763ff20ab9c516c6e082496a0b
> TComPattern: remove redundant functions used for CIP
>
> diff -r 0d4723a0080c -r aadca66911c2
> source/Lib/TLibCommon/TComPattern.cpp
> --- a/source/Lib/TLibCommon/TComPattern.cpp Tue Aug 05 01:05:47 2014
> -0500
> +++ b/source/Lib/TLibCommon/TComPattern.cpp Tue Aug 05 15:38:42 2014
> +0530
> @@ -209,24 +209,13 @@
> int partIdxStride = cu->m_pic->getNumPartInCUSize();
> partIdxLB =
> g_rasterToZscan[g_zscanToRaster[partIdxLT] + ((tuHeightInUnits - 1) *
> partIdxStride)];
>
> - if (!cu->m_slice->m_pps->bConstrainedIntraPred)
> - {
> - bNeighborFlags[leftUnits] = isAboveLeftAvailable(cu,
> partIdxLT);
> - numIntraNeighbor += (int)(bNeighborFlags[leftUnits]);
> - numIntraNeighbor += isAboveAvailable(cu, partIdxLT, partIdxRT,
> (bNeighborFlags + leftUnits + 1));
> - numIntraNeighbor += isAboveRightAvailable(cu, partIdxLT,
> partIdxRT, (bNeighborFlags + leftUnits + 1 + tuWidthInUnits));
> - numIntraNeighbor += isLeftAvailable(cu, partIdxLT, partIdxLB,
> (bNeighborFlags + leftUnits - 1));
> - numIntraNeighbor += isBelowLeftAvailable(cu, partIdxLT,
> partIdxLB, (bNeighborFlags + leftUnits - 1 - tuHeightInUnits));
> - }
> - else
> - {
> - bNeighborFlags[leftUnits] = isAboveLeftAvailableCIP(cu,
> partIdxLT);
> - numIntraNeighbor += (int)(bNeighborFlags[leftUnits]);
> - numIntraNeighbor += isAboveAvailableCIP(cu, partIdxLT,
> partIdxRT, (bNeighborFlags + leftUnits + 1));
> - numIntraNeighbor += isAboveRightAvailableCIP(cu, partIdxLT,
> partIdxRT, (bNeighborFlags + leftUnits + 1 + tuWidthInUnits));
> - numIntraNeighbor += isLeftAvailableCIP(cu, partIdxLT,
> partIdxLB, (bNeighborFlags + leftUnits - 1));
> - numIntraNeighbor += isBelowLeftAvailableCIP(cu, partIdxLT,
> partIdxLB, (bNeighborFlags + leftUnits - 1 - tuHeightInUnits));
> - }
> + bNeighborFlags[leftUnits] = isAboveLeftAvailable(cu, partIdxLT);
> + numIntraNeighbor += (int)(bNeighborFlags[leftUnits]);
> + numIntraNeighbor += isAboveAvailable(cu, partIdxLT, partIdxRT,
> (bNeighborFlags + leftUnits + 1));
> + numIntraNeighbor += isAboveRightAvailable(cu, partIdxLT,
> partIdxRT, (bNeighborFlags + leftUnits + 1 + tuWidthInUnits));
> + numIntraNeighbor += isLeftAvailable(cu, partIdxLT, partIdxLB,
> (bNeighborFlags + leftUnits - 1));
> + numIntraNeighbor += isBelowLeftAvailable(cu, partIdxLT, partIdxLB,
> (bNeighborFlags + leftUnits - 1 - tuHeightInUnits));
> +
> intraNeighbors->numIntraNeighbor = numIntraNeighbor;
> intraNeighbors->totalUnits = aboveUnits + leftUnits + 1;
> intraNeighbors->aboveUnits = aboveUnits;
> @@ -421,7 +410,10 @@
> uint32_t partAboveLeft;
> TComDataCU* pcCUAboveLeft = cu->getPUAboveLeft(partAboveLeft,
> partIdxLT);
>
> - return pcCUAboveLeft ? true : false;
> + if (!cu->m_slice->m_pps->bConstrainedIntraPred)
> + return pcCUAboveLeft ? true : false;
> + else
> + return pcCUAboveLeft &&
> pcCUAboveLeft->isIntra(partAboveLeft);
> }
>
> int TComPattern::isAboveAvailable(TComDataCU* cu, uint32_t partIdxLT,
> uint32_t partIdxRT, bool *bValidFlags) @@ -436,7 +428,7 @@
> {
> uint32_t uiPartAbove;
> TComDataCU* pcCUAbove = cu->getPUAbove(uiPartAbove,
> g_rasterToZscan[rasterPart]);
> - if (pcCUAbove)
> + if (pcCUAbove && (!cu->m_slice->m_pps->bConstrainedIntraPred
> ||
> + pcCUAbove->isIntra(uiPartAbove)))
> {
> numIntra++;
> *validFlagPtr = true;
> @@ -463,7 +455,7 @@
> {
> uint32_t partLeft;
> TComDataCU* pcCULeft = cu->getPULeft(partLeft,
> g_rasterToZscan[rasterPart]);
> - if (pcCULeft)
> + if (pcCULeft && (!cu->m_slice->m_pps->bConstrainedIntraPred
> ||
> + pcCULeft->isIntra(partLeft)))
> {
> numIntra++;
> *validFlagPtr = true;
> @@ -488,7 +480,7 @@
> {
> uint32_t uiPartAboveRight;
> TComDataCU* pcCUAboveRight =
> cu->getPUAboveRightAdi(uiPartAboveRight, partIdxRT, offset);
> - if (pcCUAboveRight)
> + if (pcCUAboveRight &&
> + (!cu->m_slice->m_pps->bConstrainedIntraPred ||
> + pcCUAboveRight->isIntra(uiPartAboveRight)))
> {
> numIntra++;
> *validFlagPtr = true;
> @@ -513,119 +505,7 @@
> {
> uint32_t uiPartBelowLeft;
> TComDataCU* pcCUBelowLeft =
> cu->getPUBelowLeftAdi(uiPartBelowLeft, partIdxLB, offset);
> - if (pcCUBelowLeft)
> - {
> - numIntra++;
> - *validFlagPtr = true;
> - }
> - else
> - {
> - *validFlagPtr = false;
> - }
> - validFlagPtr--; // opposite direction
> - }
> -
> - return numIntra;
> -}
> -
> -bool TComPattern::isAboveLeftAvailableCIP(TComDataCU* cu, uint32_t
> partIdxLT) -{
> - uint32_t partAboveLeft;
> - TComDataCU* pcCUAboveLeft = cu->getPUAboveLeft(partAboveLeft,
> partIdxLT);
> -
> - return pcCUAboveLeft && pcCUAboveLeft->isIntra(partAboveLeft);
> -}
> -
> -int TComPattern::isAboveAvailableCIP(TComDataCU* cu, uint32_t
> partIdxLT, uint32_t partIdxRT, bool *bValidFlags) -{
> - const uint32_t rasterPartBegin = g_zscanToRaster[partIdxLT];
> - const uint32_t rasterPartEnd = g_zscanToRaster[partIdxRT] + 1;
> - const uint32_t idxStep = 1;
> - bool *validFlagPtr = bValidFlags;
> - int numIntra = 0;
> -
> - for (uint32_t rasterPart = rasterPartBegin; rasterPart <
> rasterPartEnd; rasterPart += idxStep)
> - {
> - uint32_t uiPartAbove;
> - TComDataCU* pcCUAbove = cu->getPUAbove(uiPartAbove,
> g_rasterToZscan[rasterPart]);
> - if (pcCUAbove && pcCUAbove->isIntra(uiPartAbove))
> - {
> - numIntra++;
> - *validFlagPtr = true;
> - }
> - else
> - {
> - *validFlagPtr = false;
> - }
> - validFlagPtr++;
> - }
> -
> - return numIntra;
> -}
> -
> -int TComPattern::isLeftAvailableCIP(TComDataCU* cu, uint32_t
> partIdxLT, uint32_t partIdxLB, bool *bValidFlags) -{
> - const uint32_t rasterPartBegin = g_zscanToRaster[partIdxLT];
> - const uint32_t rasterPartEnd = g_zscanToRaster[partIdxLB] + 1;
> - const uint32_t idxStep = cu->m_pic->getNumPartInCUSize();
> - bool *validFlagPtr = bValidFlags;
> - int numIntra = 0;
> -
> - for (uint32_t rasterPart = rasterPartBegin; rasterPart <
> rasterPartEnd; rasterPart += idxStep)
> - {
> - uint32_t partLeft;
> - TComDataCU* pcCULeft = cu->getPULeft(partLeft,
> g_rasterToZscan[rasterPart]);
> - if (pcCULeft && pcCULeft->isIntra(partLeft))
> - {
> - numIntra++;
> - *validFlagPtr = true;
> - }
> - else
> - {
> - *validFlagPtr = false;
> - }
> - validFlagPtr--; // opposite direction
> - }
> -
> - return numIntra;
> -}
> -
> -int TComPattern::isAboveRightAvailableCIP(TComDataCU* cu, uint32_t
> partIdxLT, uint32_t partIdxRT, bool *bValidFlags) -{
> - const uint32_t numUnitsInPU = g_zscanToRaster[partIdxRT] -
> g_zscanToRaster[partIdxLT] + 1;
> - bool *validFlagPtr = bValidFlags;
> - int numIntra = 0;
> -
> - for (uint32_t offset = 1; offset <= numUnitsInPU; offset++)
> - {
> - uint32_t uiPartAboveRight;
> - TComDataCU* pcCUAboveRight =
> cu->getPUAboveRightAdi(uiPartAboveRight, partIdxRT, offset);
> - if (pcCUAboveRight &&
> pcCUAboveRight->isIntra(uiPartAboveRight))
> - {
> - numIntra++;
> - *validFlagPtr = true;
> - }
> - else
> - {
> - *validFlagPtr = false;
> - }
> - validFlagPtr++;
> - }
> -
> - return numIntra;
> -}
> -
> -int TComPattern::isBelowLeftAvailableCIP(TComDataCU* cu, uint32_t
> partIdxLT, uint32_t partIdxLB, bool *bValidFlags) -{
> - const uint32_t numUnitsInPU = (g_zscanToRaster[partIdxLB] -
> g_zscanToRaster[partIdxLT]) / cu->m_pic->getNumPartInCUSize() + 1;
> - bool *validFlagPtr = bValidFlags;
> - int numIntra = 0;
> -
> - for (uint32_t offset = 1; offset <= numUnitsInPU; offset++)
> - {
> - uint32_t uiPartBelowLeft;
> - TComDataCU* pcCUBelowLeft =
> cu->getPUBelowLeftAdi(uiPartBelowLeft, partIdxLB, offset);
> - if (pcCUBelowLeft && pcCUBelowLeft->isIntra(uiPartBelowLeft))
> + if (pcCUBelowLeft &&
> + (!cu->m_slice->m_pps->bConstrainedIntraPred ||
> + pcCUBelowLeft->isIntra(uiPartBelowLeft)))
> {
> numIntra++;
> *validFlagPtr = true;
> diff -r 0d4723a0080c -r aadca66911c2
> source/Lib/TLibCommon/TComPattern.h
> --- a/source/Lib/TLibCommon/TComPattern.h Tue Aug 05 01:05:47 2014
> -0500
> +++ b/source/Lib/TLibCommon/TComPattern.h Tue Aug 05 15:38:42 2014
> +0530
> @@ -103,12 +103,6 @@
> static int isLeftAvailable(TComDataCU* cu, uint32_t partIdxLT,
> uint32_t partIdxLB, bool* bValidFlags);
> static int isAboveRightAvailable(TComDataCU* cu, uint32_t
> partIdxLT, uint32_t partIdxRT, bool* bValidFlags);
> static int isBelowLeftAvailable(TComDataCU* cu, uint32_t
> partIdxLT, uint32_t partIdxLB, bool* bValidFlags);
> -
> - static bool isAboveLeftAvailableCIP(TComDataCU* cu, uint32_t
> partIdxLT);
> - static int isAboveAvailableCIP(TComDataCU* cu, uint32_t
> partIdxLT, uint32_t partIdxRT, bool* bValidFlags);
> - static int isLeftAvailableCIP(TComDataCU* cu, uint32_t
> partIdxLT, uint32_t partIdxLB, bool* bValidFlags);
> - static int isAboveRightAvailableCIP(TComDataCU* cu, uint32_t
> partIdxLT, uint32_t partIdxRT, bool* bValidFlags);
> - static int isBelowLeftAvailableCIP(TComDataCU* cu, uint32_t
> partIdxLT, uint32_t partIdxLB, bool* bValidFlags);
> };
> }
> //! \}
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel
More information about the x265-devel
mailing list