Changeset 1214 in SHVCSoftware for branches/SHM-dev/source/Lib/TLibCommon


Ignore:
Timestamp:
8 Jul 2015, 23:35:39 (10 years ago)
Author:
seregin
Message:

macro cleanup: R0151_CGS_3D_ASYMLUT_IMPROVE

Location:
branches/SHM-dev/source/Lib/TLibCommon
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/SHM-dev/source/Lib/TLibCommon/TCom3DAsymLUT.cpp

    r1213 r1214  
    1010
    1111#if CGS_3D_ASYMLUT
    12 
    1312const Int TCom3DAsymLUT::m_nVertexIdxOffset[4][3] = { { 0 , 0 , 0 } , { 0 , 1 , 0 } , { 0 , 1 , 1 } , { 1 , 1 , 1 } };
    1413
     
    2827}
    2928
    30 Void TCom3DAsymLUT::create( Int nMaxOctantDepth , Int nInputBitDepth , Int nInputBitDepthC , Int nOutputBitDepth , Int nOutputBitDepthC , Int nMaxYPartNumLog2
    31 #if R0151_CGS_3D_ASYMLUT_IMPROVE
    32   , Int nAdaptCThresholdU , Int nAdaptCThresholdV
    33 #endif
    34   )
     29Void TCom3DAsymLUT::create( Int nMaxOctantDepth, Int nInputBitDepth, Int nInputBitDepthC, Int nOutputBitDepth, Int nOutputBitDepthC, Int nMaxYPartNumLog2, Int nAdaptCThresholdU, Int nAdaptCThresholdV )
    3530{
    3631  m_nMaxOctantDepth = nMaxOctantDepth;
     
    4439  m_nMaxPartNumLog2 = 3 * m_nMaxOctantDepth + m_nMaxYPartNumLog2;
    4540
    46   xUpdatePartitioning( nMaxOctantDepth , nMaxYPartNumLog2
    47 #if R0151_CGS_3D_ASYMLUT_IMPROVE
    48     , nAdaptCThresholdU , nAdaptCThresholdV
    49 #endif
    50     );
     41  xUpdatePartitioning( nMaxOctantDepth, nMaxYPartNumLog2, nAdaptCThresholdU, nAdaptCThresholdV );
    5142
    5243  m_nYSize = 1 << ( m_nMaxOctantDepth + m_nMaxYPartNumLog2 );
     
    7768
    7869
    79 Void TCom3DAsymLUT::xUpdatePartitioning( Int nCurOctantDepth , Int nCurYPartNumLog2
    80 #if R0151_CGS_3D_ASYMLUT_IMPROVE
    81   , Int nAdaptCThresholdU , Int nAdaptCThresholdV
    82 #endif
    83   )
     70Void TCom3DAsymLUT::xUpdatePartitioning( Int nCurOctantDepth, Int nCurYPartNumLog2, Int nAdaptCThresholdU, Int nAdaptCThresholdV  )
    8471{
    8572  assert( nCurOctantDepth <= m_nMaxOctantDepth );
     
    9481  m_nYShift2Idx = m_nInputBitDepthY - m_nCurOctantDepth - m_nCurYPartNumLog2;
    9582  m_nUShift2Idx = m_nVShift2Idx = m_nInputBitDepthC - m_nCurOctantDepth;
    96 #if R0151_CGS_3D_ASYMLUT_IMPROVE
     83
    9784  m_nMappingShift = 10 + m_nInputBitDepthY - m_nOutputBitDepthY;
    9885  m_nAdaptCThresholdU = nAdaptCThresholdU;
    9986  m_nAdaptCThresholdV = nAdaptCThresholdV;
    100 #else
    101   m_nMappingShift = m_nYShift2Idx + m_nUShift2Idx;
    102 #endif
     87
    10388  m_nMappingOffset = 1 << ( m_nMappingShift - 1 );
    10489
     
    201186 
    202187  SYUVP sPred;
    203 #if R0151_CGS_3D_ASYMLUT_IMPROVE
     188
    204189  sPred.Y = sPred.U = sPred.V = 0;
     190
    205191  if( nVertexIdx == 0 )
     192  {
    206193    sPred.Y = xGetNormCoeffOne() << ( m_nOutputBitDepthY - m_nInputBitDepthY );
     194  }
    207195  else if( nVertexIdx == 1 )
     196  {
    208197    sPred.U = xGetNormCoeffOne() << ( m_nOutputBitDepthY - m_nInputBitDepthY );
     198  }
    209199  else if( nVertexIdx == 2 )
     200  {
    210201    sPred.V = xGetNormCoeffOne() << ( m_nOutputBitDepthY - m_nInputBitDepthY );
    211 #else
    212   sPred.Y = ( yIdx + m_nVertexIdxOffset[nVertexIdx][0] ) << ( m_nYShift2Idx + m_nDeltaBitDepth );
    213   sPred.U = ( uIdx + m_nVertexIdxOffset[nVertexIdx][1] ) << ( m_nUShift2Idx + m_nDeltaBitDepthC );
    214   sPred.V = ( vIdx + m_nVertexIdxOffset[nVertexIdx][2] ) << ( m_nVShift2Idx + m_nDeltaBitDepthC );
    215 #endif
    216   return( sPred );
     202  }
     203
     204  return sPred;
    217205}
    218206
     
    221209  SCuboid***  pCuboid = pCurCuboid ? pCurCuboid : m_pCuboid ;
    222210
    223 #if R0151_CGS_3D_ASYMLUT_IMPROVE
    224211  SYUVP sPred;
    225212  if( yIdx == 0 )
     
    233220    sPred = pCuboid[yIdx-1][uIdx][vIdx].P[nVertexIdx];
    234221  }
    235 #else
    236   // PredA
    237   SYUVP sPredA = xGetCuboidVertexPredA( yIdx , uIdx , vIdx , nVertexIdx );
    238 
    239   // PredB
    240   SYUVP sPredB;
    241   memset( &sPredB , 0 , sizeof( sPredB ) );
    242   if( yIdx > 0 )
    243   {
    244     SYUVP & recNeighborP = pCuboid[yIdx-1][uIdx][vIdx].P[nVertexIdx];
    245     SYUVP sPredNeighbor = xGetCuboidVertexPredA( yIdx - 1 , uIdx , vIdx , nVertexIdx );
    246     sPredB.Y += recNeighborP.Y - sPredNeighbor.Y ;
    247     sPredB.U += recNeighborP.U - sPredNeighbor.U ;
    248     sPredB.V += recNeighborP.V - sPredNeighbor.V ;
    249 
    250     Pel min = - ( 1 << ( getOutputBitDepthY() - 2 ) );
    251     Pel max =  - min;
    252     sPredB.Y = Clip3( min , max , sPredB.Y );
    253     min = - ( 1 << ( getOutputBitDepthC() - 2 ) );
    254     max =  - min;
    255     sPredB.U = Clip3( min , max , sPredB.U );
    256     sPredB.V = Clip3( min , max , sPredB.V );
    257   }
    258 
    259   SYUVP sPred;
    260   sPred.Y = sPredA.Y + sPredB.Y;
    261   sPred.U = sPredA.U + sPredB.U;
    262   sPred.V = sPredA.V + sPredB.V;
    263 #endif
     222
    264223  return sPred ;
    265224}
     
    294253Pel TCom3DAsymLUT::xMapY( Pel y , Pel u , Pel v )
    295254{
    296 #if R0151_CGS_3D_ASYMLUT_IMPROVE
    297255  const SCuboid & rCuboid = m_pCuboid[xGetYIdx(y)][xGetUIdx(u)][xGetVIdx(v)];
    298256  Pel dstY = ( ( rCuboid.P[0].Y * y + rCuboid.P[1].Y * u + rCuboid.P[2].Y * v + m_nMappingOffset ) >> m_nMappingShift ) + rCuboid.P[3].Y;
    299 #else
    300   const SCuboid & rCuboid = m_pCuboid[y>>m_nYShift2Idx][u>>m_nUShift2Idx][v>>m_nVShift2Idx];
    301   Pel dstY = rCuboid.P[0].Y;
    302   Int deltaY = y - ( y >> m_nYShift2Idx << m_nYShift2Idx );
    303   Int deltaU = u - ( u >> m_nUShift2Idx << m_nUShift2Idx );
    304   Int deltaV = v - ( v >> m_nVShift2Idx << m_nVShift2Idx );
    305   dstY += ( Pel )( ( ( ( deltaY * ( rCuboid.P[3].Y - rCuboid.P[2].Y ) ) << m_nUShift2Idx )
    306                    + ( ( deltaU * ( rCuboid.P[1].Y - rCuboid.P[0].Y ) ) << m_nYShift2Idx )
    307                    + ( ( deltaV * ( rCuboid.P[2].Y - rCuboid.P[1].Y ) ) << m_nYShift2Idx )
    308                    + m_nMappingOffset ) >> m_nMappingShift );
    309 #endif
     257
    310258  return( dstY );
    311259}
     
    313261SYUVP TCom3DAsymLUT::xMapUV( Pel y , Pel u , Pel v )
    314262{
    315 #if R0151_CGS_3D_ASYMLUT_IMPROVE
    316263  const SCuboid & rCuboid = m_pCuboid[xGetYIdx(y)][xGetUIdx(u)][xGetVIdx(v)];
    317264  SYUVP dst;
     
    319266  dst.U = ( ( rCuboid.P[0].U * y + rCuboid.P[1].U * u + rCuboid.P[2].U * v + m_nMappingOffset ) >> m_nMappingShift ) + rCuboid.P[3].U;
    320267  dst.V = ( ( rCuboid.P[0].V * y + rCuboid.P[1].V * u + rCuboid.P[2].V * v + m_nMappingOffset ) >> m_nMappingShift ) + rCuboid.P[3].V;
    321 #else
    322   const SCuboid & rCuboid = m_pCuboid[y>>m_nYShift2Idx][u>>m_nUShift2Idx][v>>m_nVShift2Idx];
    323   SYUVP dst = rCuboid.P[0];
    324   Int deltaY = y - ( y >> m_nYShift2Idx << m_nYShift2Idx );
    325   Int deltaU = u - ( u >> m_nUShift2Idx << m_nUShift2Idx );
    326   Int deltaV = v - ( v >> m_nVShift2Idx << m_nVShift2Idx );
    327   dst.U += ( Pel )( ( ( ( deltaY * ( rCuboid.P[3].U - rCuboid.P[2].U ) ) << m_nUShift2Idx )
    328                     + ( ( deltaU * ( rCuboid.P[1].U - rCuboid.P[0].U ) ) << m_nYShift2Idx )
    329                     + ( ( deltaV * ( rCuboid.P[2].U - rCuboid.P[1].U ) ) << m_nYShift2Idx )
    330                     + m_nMappingOffset ) >> m_nMappingShift );
    331   dst.V += ( Pel )( ( ( ( deltaY * ( rCuboid.P[3].V - rCuboid.P[2].V ) ) << m_nUShift2Idx )
    332                     + ( ( deltaU * ( rCuboid.P[1].V - rCuboid.P[0].V ) ) << m_nYShift2Idx )
    333                     + ( ( deltaV * ( rCuboid.P[2].V - rCuboid.P[1].V ) ) << m_nYShift2Idx )
    334                     + m_nMappingOffset ) >> m_nMappingShift );
    335 #endif
     268
    336269  return( dst );
    337270}
     
    349282{
    350283  assert( pSrc->getMaxOctantDepth() == getMaxOctantDepth() && pSrc->getMaxYPartNumLog2() == getMaxYPartNumLog2() );
    351   xUpdatePartitioning( pSrc->getCurOctantDepth() , pSrc->getCurYPartNumLog2()
    352 #if R0151_CGS_3D_ASYMLUT_IMPROVE
    353     , pSrc->getAdaptChromaThresholdU() , pSrc->getAdaptChromaThresholdV()
    354 #endif
    355     );
     284  xUpdatePartitioning( pSrc->getCurOctantDepth(), pSrc->getCurYPartNumLog2(), pSrc->getAdaptChromaThresholdU(), pSrc->getAdaptChromaThresholdV() );
    356285  setResQuantBit( pSrc->getResQuantBit() );
    357286  xSaveCuboids( pSrc->m_pCuboid );
  • branches/SHM-dev/source/Lib/TLibCommon/TCom3DAsymLUT.h

    r1213 r1214  
    2727  virtual ~TCom3DAsymLUT();
    2828
    29   virtual Void  create( Int nMaxOctantDepth, Int nInputBitDepth, Int nInputBitDepthC, Int nOutputBitDepth, Int nOutputBitDepthC, Int nMaxYPartNumLog2, Int nAdaptCThresholdU, Int nAdaptCThresholdV );
    30   virtual Void  destroy();
     29  virtual Void create( Int nMaxOctantDepth, Int nInputBitDepth, Int nInputBitDepthC, Int nOutputBitDepth, Int nOutputBitDepthC, Int nMaxYPartNumLog2, Int nAdaptCThresholdU, Int nAdaptCThresholdV );
     30  virtual Void destroy();
    3131
    3232  Int   getMaxOctantDepth() { return m_nMaxOctantDepth; }
     
    5555  Bool  isRefLayer( UInt uiRefLayerId );
    5656
    57 #if R0151_CGS_3D_ASYMLUT_IMPROVE
    5857  Void  setAdaptChromaThresholdU( Int n ) { m_nAdaptCThresholdU = n; }
    5958  Int   getAdaptChromaThresholdU()        { return m_nAdaptCThresholdU; }
    6059  Void  setAdaptChromaThresholdV( Int n ) { m_nAdaptCThresholdV = n;  }
    6160  Int   getAdaptChromaThresholdV()        { return m_nAdaptCThresholdV; }
    62 #endif
     61
    6362#if R0179_ENC_OPT_3DLUT_SIZE
    6463  Int   getMaxYSize() { return 1<<(m_nMaxOctantDepth+m_nMaxYPartNumLog2); }
     
    108107  const static Int m_nVertexIdxOffset[4][3];
    109108  std::vector<UInt> m_vRefLayerId;
    110 #if R0151_CGS_3D_ASYMLUT_IMPROVE
     109
    111110  Int   m_nAdaptCThresholdU;
    112111  Int   m_nAdaptCThresholdV;
    113 #endif
     112
    114113#if R0164_CGS_LUT_BUGFIX_CHECK
    115114  Bool  *** m_pCuboidExplicit;
     
    125124  Void xFree3DArray( T *** &p );
    126125
    127   Void  xUpdatePartitioning( Int nCurOctantDepth , Int nCurYPartNumLog2
    128 #if R0151_CGS_3D_ASYMLUT_IMPROVE
    129     , Int nAdaptCThresholdU , Int nAdaptCThreshodV
    130 #endif
    131     );
     126  Void  xUpdatePartitioning( Int nCurOctantDepth, Int nCurYPartNumLog2, Int nAdaptCThresholdU, Int nAdaptCThreshodV );
    132127  SYUVP xGetCuboidVertexPredA( Int yIdx , Int uIdx , Int vIdx , Int nVertexIdx );
    133128  Pel   xMapY( Pel y , Pel u , Pel v );
     
    137132  Int   xGetUSize()  { return m_nUSize;  }
    138133  Int   xGetVSize()  { return m_nVSize;  }
    139 #if R0151_CGS_3D_ASYMLUT_IMPROVE
    140134  Int   xGetYIdx(Pel y)  { return( y >> m_nYShift2Idx ); }
    141135  Int   xGetUIdx(Pel u)  { return( m_nCurOctantDepth == 1 ? u >= m_nAdaptCThresholdU : u >> m_nUShift2Idx ); }
    142136  Int   xGetVIdx(Pel v)  { return( m_nCurOctantDepth == 1 ? v >= m_nAdaptCThresholdV : v >> m_nVShift2Idx ); }
    143137  Int   xGetNormCoeffOne()    { return( 1 << m_nMappingShift ); }
    144 #else
    145   Int   xGetYShift2Idx() { return m_nYShift2Idx; }
    146   Int   xGetUShift2Idx() { return m_nUShift2Idx; }
    147   Int   xGetVShift2Idx() { return m_nVShift2Idx; }
    148 #endif
    149138  SCuboid & xGetCuboid( Int yIdx , Int uIdx , Int vIdx ){ return m_pCuboid[yIdx][uIdx][vIdx];  }
    150139  Void  xSaveCuboids( SCuboid *** pSrcCuboid );
  • branches/SHM-dev/source/Lib/TLibCommon/TypeDef.h

    r1213 r1214  
    5858#if CGS_3D_ASYMLUT
    5959#define CGS_GCC_NO_VECTORIZATION         1
    60 #define R0151_CGS_3D_ASYMLUT_IMPROVE     1      ///< JCTVC-R0151: Non-uniform chroma partitioning and improved LUT coefficient coding
    6160#define R0164_CGS_LUT_BUGFIX             1      ///< JCTVC-R0164: Bug fix with LUT syntax
    6261#define R0164_CGS_LUT_BUGFIX_CHECK       0      ///< JCTVC-R0164: Add traces explicitly/non-explicitly encoded vertices and check if 3DLUT is correctly filled
Note: See TracChangeset for help on using the changeset viewer.