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

Integration of JCT3V-G0101: InterSDC with multiple DC candidates

Location:
branches/HTM-9.3-dev3-Samsung/source/Lib/TLibEncoder
Files:
5 edited

Legend:

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

    r782 r792  
    19791979          if( rpcTempCU->getSlice()->getVPS()->getInterSDCFlag( rpcTempCU->getSlice()->getLayerIdInVps() ) && rpcTempCU->getSlice()->getIsDepth() && !uiNoResidual )
    19801980          {
     1981#if SEC_INTER_SDC_G0101
     1982            for( Int uiOffest = -2 ; uiOffest <= 2 ; uiOffest++ )
     1983            {
     1984              if( rpcTempCU != rpcTempCUPre )
     1985              {
     1986                rpcTempCU->initEstData( uhDepth, orgQP );
     1987                rpcTempCU->copyPartFrom( rpcBestCU, 0, uhDepth );
     1988              }
     1989              rpcTempCU->setSkipFlagSubParts( false, 0, uhDepth );
     1990              rpcTempCU->setTrIdxSubParts( 0, 0, uhDepth );
     1991              rpcTempCU->setCbfSubParts( 1, 1, 1, 0, uhDepth );
     1992#if H_3D_VSO //M2
     1993              if( m_pcRdCost->getUseRenModel() )
     1994              { //Reset
     1995                UInt  uiWidth     = m_ppcOrigYuv[uhDepth]->getWidth    ();
     1996                UInt  uiHeight    = m_ppcOrigYuv[uhDepth]->getHeight   ();
     1997                Pel*  piSrc       = m_ppcOrigYuv[uhDepth]->getLumaAddr ();
     1998                UInt  uiSrcStride = m_ppcOrigYuv[uhDepth]->getStride   ();
     1999                m_pcRdCost->setRenModelData( rpcTempCU, 0, piSrc, uiSrcStride, uiWidth, uiHeight );
     2000              }
     2001#endif
     2002              m_pcPredSearch->encodeResAndCalcRdInterSDCCU( rpcTempCU,
     2003                m_ppcOrigYuv[uhDepth],
     2004                ( rpcTempCU != rpcTempCUPre ) ? m_ppcPredYuvBest[uhDepth] : m_ppcPredYuvTemp[uhDepth],
     2005                m_ppcResiYuvTemp[uhDepth],
     2006                m_ppcRecoYuvTemp[uhDepth],
     2007                uiOffest,
     2008                uhDepth );
     2009
     2010              xCheckDQP( rpcTempCU );
     2011              xCheckBestMode( rpcBestCU, rpcTempCU, uhDepth );
     2012            }
     2013#else
    19812014            if( rpcTempCU != rpcTempCUPre )
    19822015            {
     
    20062039            xCheckDQP( rpcTempCU );
    20072040            xCheckBestMode( rpcBestCU, rpcTempCU, uhDepth );
     2041#endif
    20082042          }
    20092043#endif
     
    22022236  xCheckBestMode(rpcBestCU, rpcTempCU, uhDepth);
    22032237#if H_3D_INTER_SDC
     2238#if SEC_INTER_SDC_G0101 // ONLY_2NX2N_SDC
     2239  if( rpcTempCU->getSlice()->getVPS()->getInterSDCFlag( rpcTempCU->getSlice()->getLayerIdInVps() ) && rpcTempCU->getSlice()->getIsDepth() && ePartSize == SIZE_2Nx2N)
     2240#else
    22042241  if( rpcTempCU->getSlice()->getVPS()->getInterSDCFlag( rpcTempCU->getSlice()->getLayerIdInVps() ) && rpcTempCU->getSlice()->getIsDepth() )
    2205   {
     2242#endif
     2243  {
     2244#if SEC_INTER_SDC_G0101
     2245    for( Int uiOffest = -2 ; uiOffest <= 2 ; uiOffest++ )
     2246    {
     2247      if( rpcTempCU != rpcTempCUPre )
     2248      {
     2249        Int orgQP = rpcBestCU->getQP( 0 );
     2250        rpcTempCU->initEstData( uhDepth, orgQP );
     2251        rpcTempCU->copyPartFrom( rpcBestCU, 0, uhDepth );
     2252      }
     2253      rpcTempCU->setSkipFlagSubParts( false, 0, uhDepth );
     2254      rpcTempCU->setTrIdxSubParts( 0, 0, uhDepth );
     2255      rpcTempCU->setCbfSubParts( 1, 1, 1, 0, uhDepth );
     2256#if H_3D_VSO // M3
     2257      if( m_pcRdCost->getUseRenModel() )
     2258      {
     2259        UInt  uiWidth     = m_ppcOrigYuv[uhDepth]->getWidth ( );
     2260        UInt  uiHeight    = m_ppcOrigYuv[uhDepth]->getHeight( );
     2261        Pel*  piSrc       = m_ppcOrigYuv[uhDepth]->getLumaAddr( );
     2262        UInt  uiSrcStride = m_ppcOrigYuv[uhDepth]->getStride();
     2263        m_pcRdCost->setRenModelData( rpcTempCU, 0, piSrc, uiSrcStride, uiWidth, uiHeight );
     2264      }
     2265#endif
     2266
     2267      m_pcPredSearch->encodeResAndCalcRdInterSDCCU( rpcTempCU,
     2268        m_ppcOrigYuv[uhDepth],
     2269        ( rpcTempCU != rpcTempCUPre ) ? m_ppcPredYuvBest[uhDepth] : m_ppcPredYuvTemp[uhDepth],
     2270        m_ppcResiYuvTemp[uhDepth],
     2271        m_ppcRecoYuvTemp[uhDepth],
     2272        uiOffest,
     2273        uhDepth );
     2274
     2275      xCheckDQP( rpcTempCU );
     2276      xCheckBestMode(rpcBestCU, rpcTempCU, uhDepth);
     2277    }
     2278#else
    22062279    if( rpcTempCU != rpcTempCUPre )
    22072280    {
     
    22332306  xCheckDQP( rpcTempCU );
    22342307  xCheckBestMode(rpcBestCU, rpcTempCU, uhDepth);
     2308#endif
    22352309  }
    22362310#endif
  • branches/HTM-9.3-dev3-Samsung/source/Lib/TLibEncoder/TEncEntropy.cpp

    r782 r792  
    882882  }
    883883
     884#if SEC_INTER_SDC_G0101
     885  if( !pcCU->getSlice()->getIsDepth() || pcCU->getPartitionSize( uiAbsPartIdx ) != SIZE_2Nx2N || pcCU->isSkipped( uiAbsPartIdx ) )
     886#else
    884887  if( !pcCU->getSlice()->getIsDepth() || ( pcCU->isIntra( uiAbsPartIdx ) && pcCU->getPartitionSize( uiAbsPartIdx ) != SIZE_2Nx2N ) || pcCU->isSkipped( uiAbsPartIdx ) )
    885   {
    886     return;
    887   }
    888 
     888#endif
     889  {
     890    return;
     891  }
     892
     893#if SEC_INTER_SDC_G0101
     894  assert( pcCU->getPartitionSize( uiAbsPartIdx ) == SIZE_2Nx2N || ( !pcCU->isIntra( uiAbsPartIdx ) && !pcCU->isSkipped( uiAbsPartIdx ) ) );
     895#else
    889896  assert( ( pcCU->isIntra( uiAbsPartIdx ) && pcCU->getPartitionSize( uiAbsPartIdx ) == SIZE_2Nx2N ) || ( !pcCU->isIntra( uiAbsPartIdx ) && !pcCU->isSkipped( uiAbsPartIdx ) ) );
     897#endif
    890898
    891899  if( bRD )
     
    905913
    906914  if( !pcCU->getSlice()->getIsDepth() || pcCU->isIntra( uiAbsPartIdx ) || pcCU->isSkipped( uiAbsPartIdx ) )
    907   {
    908915    return;
    909916  }
  • branches/HTM-9.3-dev3-Samsung/source/Lib/TLibEncoder/TEncSbac.cpp

    r782 r792  
    22592259  else //all-zero inter SDC is not allowed
    22602260  {
     2261#if SEC_INTER_SDC_G0101
     2262    uiNumSegments = 1;
     2263#else
    22612264    PartSize cPartSize = pcCU->getPartitionSize( absPartIdx );
    2262 
    22632265    uiNumSegments = ( cPartSize == SIZE_2Nx2N ) ? 1 : ( cPartSize == SIZE_NxN ? 4 : 2 );
     2266#endif
    22642267    dimDeltaDC = 1;
    22652268  }
  • 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 )
  • branches/HTM-9.3-dev3-Samsung/source/Lib/TLibEncoder/TEncSearch.h

    r781 r792  
    219219    TComYuv* pcResi,
    220220    TComYuv* pcRec,
     221#if SEC_INTER_SDC_G0101
     222    Int      uiOffset,
     223#endif
    221224    const UInt uiDepth );
    222225#endif
Note: See TracChangeset for help on using the changeset viewer.