Ignore:
Timestamp:
23 Jan 2014, 05:06:49 (10 years ago)
Author:
samsung-htm
Message:

Integration of JCT3V-G0101: InterSDC with multiple DC candidates

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-9.3-dev3-Samsung/source/Lib/TLibEncoder/TEncSearch.cpp

    r782 r792  
    56335633
    56345634#if H_3D_INTER_SDC
     5635#if SEC_INTER_SDC_G0101
     5636Void TEncSearch::encodeResAndCalcRdInterSDCCU( TComDataCU* pcCU, TComYuv* pcOrg, TComYuv* pcPred, TComYuv* pcResi, TComYuv* pcRec, Int uiOffest, const UInt uiDepth )
     5637#else
    56355638Void TEncSearch::encodeResAndCalcRdInterSDCCU( TComDataCU* pcCU, TComYuv* pcOrg, TComYuv* pcPred, TComYuv* pcResi, TComYuv* pcRec, const UInt uiDepth )
     5639#endif
    56365640{
    56375641  if( !pcCU->getSlice()->getIsDepth() || pcCU->isIntra( 0 ) )
     
    56475651  UInt  uiWidth      = pcCU->getWidth ( 0 );
    56485652  UInt  uiHeight     = pcCU->getHeight( 0 );
     5653#if SEC_INTER_SDC_G0101
     5654  UInt uiSegSize = 0;
     5655#else
    56495656  UChar* pMask       = pcCU->getInterSDCMask();
    56505657  memset( pMask, 0, uiWidth*uiHeight );
     
    56535660
    56545661  UInt uiSegSize[4] = { 0, 0, 0, 0 };
     5662#endif
    56555663  Pel *pPred, *pOrg;
    56565664  UInt uiPredStride = pcPred->getStride();
    56575665  UInt uiOrgStride  = pcOrg->getStride();
    56585666  UInt uiPelX, uiPelY;
     5667#if !SEC_INTER_SDC_G0101
    56595668  UInt uiPartitionSize = pcCU->getPartitionSize( 0 );
    56605669  UInt uiSegmentNum = ( uiPartitionSize == SIZE_2Nx2N ) ? 1 : ( uiPartitionSize == SIZE_NxN ? 4 : 2 );
     5670#endif
    56615671
    56625672  pPred = pcPred->getLumaAddr( 0 );
    56635673  pOrg  = pcOrg->getLumaAddr( 0 );
     5674#if SEC_INTER_SDC_G0101
     5675  Int pResDC = 0;
     5676#else
    56645677  Int pResDC[4] = { 0, 0, 0, 0};
     5678#endif
    56655679
    56665680  //calculate dc value for prediction and original signal, and calculate residual and reconstruction
     
    56695683    for( uiPelX = 0; uiPelX < uiWidth; uiPelX++ )
    56705684    {
     5685#if SEC_INTER_SDC_G0101
     5686      pResDC += (Int)( pOrg [uiPelX] - pPred[uiPelX] );
     5687      uiSegSize++;
     5688#else
    56715689      UChar uiSeg = pMask[ uiPelX + uiPelY*uiWidth ];
    56725690      pResDC[uiSeg] += (Int)( pOrg [uiPelX] - pPred[uiPelX] );
    56735691      uiSegSize[uiSeg]++;
     5692#endif
    56745693    }
    56755694    pOrg  += uiOrgStride;
     
    56775696  }
    56785697
     5698#if SEC_INTER_SDC_G0101
     5699  Int iResiOffset = ( pResDC  > 0 ? ( uiSegSize >> 1 ) : -1*( uiSegSize >> 1 ) );
     5700  pResDC          = ( pResDC + iResiOffset ) / (Int) uiSegSize;
     5701
     5702  pcCU->setSDCSegmentDCOffset( pResDC + uiOffest, 0, 0 );
     5703#else
    56795704  for( UInt uiSeg = 0; uiSeg < uiSegmentNum; uiSeg++ )
    56805705  {
     
    56875712#endif
    56885713  }
     5714#endif
    56895715
    56905716  Pel *pRec;
     
    56975723    for( uiPelX = 0; uiPelX < uiWidth; uiPelX++ )
    56985724    {
     5725#if SEC_INTER_SDC_G0101
     5726      pRec[ uiPelX ] = Clip3( 0, ( 1 << g_bitDepthY ) - 1, pPred[uiPelX] + pcCU->getSDCSegmentDCOffset(0, 0) );
     5727#else
    56995728      UChar uiSeg = pMask[ uiPelX + uiPelY*uiWidth ];
    57005729      assert( uiSeg < uiSegmentNum );
    57015730
    57025731      pRec[ uiPelX ] = Clip3( 0, ( 1 << g_bitDepthY ) - 1, pPred[uiPelX] + pResDC[uiSeg] );
     5732#endif
    57035733    }
    57045734    pPred     += uiPredStride;
     
    57455775  Bool bNonSkip = true;
    57465776#endif
     5777#if SEC_INTER_SDC_G0101
     5778  bNonSkip |= ( pcCU->getSDCSegmentDCOffset( 0, 0 ) != 0 ) ? 1 : 0;
     5779#else
    57475780  for( UInt uiSeg = 0; uiSeg < uiSegmentNum; uiSeg++ )
    57485781  {
     
    57535786#endif
    57545787  }
     5788#endif
    57555789
    57565790  if( !bNonSkip )
Note: See TracChangeset for help on using the changeset viewer.