[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