Ignore:
Timestamp:
8 Feb 2014, 15:29:19 (10 years ago)
Author:
tech
Message:

Further fixes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-10.0rc1-dev0/source/Lib/TLibCommon/TComYuv.cpp

    r837 r840  
    647647  }
    648648}
     649#if H_3D
     650Void TComYuv::addClipPartLuma( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiTrUnitIdx, UInt uiPartSize )
     651{
     652  Int x, y;
     653
     654  Pel* pSrc0 = pcYuvSrc0->getLumaAddr( uiTrUnitIdx);
     655  Pel* pSrc1 = pcYuvSrc1->getLumaAddr( uiTrUnitIdx);
     656  Pel* pDst  = getLumaAddr( uiTrUnitIdx);
     657
     658  UInt iSrc0Stride = pcYuvSrc0->getStride();
     659  UInt iSrc1Stride = pcYuvSrc1->getStride();
     660  UInt iDstStride  = getStride();
     661  for ( y = uiPartSize-1; y >= 0; y-- )
     662  {
     663    for ( x = uiPartSize-1; x >= 0; x-- )
     664    {
     665      pDst[x] = ClipY( pSrc0[x] + pSrc1[x] );     
     666    }
     667    pSrc0 += iSrc0Stride;
     668    pSrc1 += iSrc1Stride;
     669    pDst  += iDstStride;
     670  }
     671}
     672
     673#if H_3D_ARP
     674Void TComYuv::addARP( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiAbsPartIdx, UInt uiWidth, UInt uiHeight, Bool bClip )
     675{
     676  addARPLuma   ( pcYuvSrc0, pcYuvSrc1, uiAbsPartIdx, uiWidth   , uiHeight    , bClip );
     677  addARPChroma ( pcYuvSrc0, pcYuvSrc1, uiAbsPartIdx, uiWidth>>1, uiHeight>>1 , bClip );
     678}
     679
     680Void TComYuv::addARPLuma( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiAbsPartIdx, UInt uiWidth, UInt uiHeight, Bool bClip )
     681{
     682  Int x, y;
     683
     684  Pel* pSrc0 = pcYuvSrc0->getLumaAddr( uiAbsPartIdx );
     685  Pel* pSrc1 = pcYuvSrc1->getLumaAddr( uiAbsPartIdx );
     686  Pel* pDst  = getLumaAddr( uiAbsPartIdx );
     687
     688  UInt iSrc0Stride = pcYuvSrc0->getStride();
     689  UInt iSrc1Stride = pcYuvSrc1->getStride();
     690  UInt iDstStride  = getStride();
     691  for ( y = uiHeight-1; y >= 0; y-- )
     692  {
     693    for ( x = uiWidth-1; x >= 0; x-- )
     694    {
     695      pDst[x] = pSrc0[x] + pSrc1[x];
     696      if( bClip )
     697      {
     698        pDst[x] = ClipY( pDst[x] );
     699      }
     700    }
     701    pSrc0 += iSrc0Stride;
     702    pSrc1 += iSrc1Stride;
     703    pDst  += iDstStride;
     704  }
     705}
     706
     707Void TComYuv::addARPChroma( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiAbsPartIdx, UInt uiWidth, UInt uiHeight, Bool bClip )
     708{
     709  Int x, y;
     710
     711  Pel* pSrcU0 = pcYuvSrc0->getCbAddr( uiAbsPartIdx );
     712  Pel* pSrcU1 = pcYuvSrc1->getCbAddr( uiAbsPartIdx );
     713  Pel* pSrcV0 = pcYuvSrc0->getCrAddr( uiAbsPartIdx );
     714  Pel* pSrcV1 = pcYuvSrc1->getCrAddr( uiAbsPartIdx );
     715  Pel* pDstU = getCbAddr( uiAbsPartIdx );
     716  Pel* pDstV = getCrAddr( uiAbsPartIdx );
     717
     718  UInt  iSrc0Stride = pcYuvSrc0->getCStride();
     719  UInt  iSrc1Stride = pcYuvSrc1->getCStride();
     720  UInt  iDstStride  = getCStride();
     721  for ( y = uiHeight-1; y >= 0; y-- )
     722  {
     723    for ( x = uiWidth-1; x >= 0; x-- )
     724    {
     725      pDstU[x] = pSrcU0[x] + pSrcU1[x];
     726      pDstV[x] = pSrcV0[x] + pSrcV1[x];
     727      if( bClip )
     728      {
     729        pDstU[x] = ClipC( pDstU[x] );
     730        pDstV[x] = ClipC( pDstV[x] );
     731      }
     732    }
     733
     734    pSrcU0 += iSrc0Stride;
     735    pSrcU1 += iSrc1Stride;
     736    pSrcV0 += iSrc0Stride;
     737    pSrcV1 += iSrc1Stride;
     738    pDstU  += iDstStride;
     739    pDstV  += iDstStride;
     740  }
     741}
     742
     743Void TComYuv::subtractARP( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiAbsPartIdx, UInt uiWidth , UInt uiHeight )
     744{
     745  subtractARPLuma  ( pcYuvSrc0, pcYuvSrc1,  uiAbsPartIdx, uiWidth    , uiHeight    );
     746  subtractARPChroma( pcYuvSrc0, pcYuvSrc1,  uiAbsPartIdx, uiWidth>>1 , uiHeight>>1 );
     747}
     748
     749Void TComYuv::subtractARPLuma( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiAbsPartIdx, UInt uiWidth , UInt uiHeight )
     750{
     751  Int x, y;
     752
     753  Pel* pSrc0 = pcYuvSrc0->getLumaAddr( uiAbsPartIdx );
     754  Pel* pSrc1 = pcYuvSrc1->getLumaAddr( uiAbsPartIdx );
     755  Pel* pDst  = getLumaAddr( uiAbsPartIdx );
     756
     757  Int  iSrc0Stride = pcYuvSrc0->getStride();
     758  Int  iSrc1Stride = pcYuvSrc1->getStride();
     759  Int  iDstStride  = getStride();
     760  for ( y = uiHeight-1; y >= 0; y-- )
     761  {
     762    for ( x = uiWidth-1; x >= 0; x-- )
     763    {
     764      pDst[x] = pSrc0[x] - pSrc1[x];
     765    }
     766    pSrc0 += iSrc0Stride;
     767    pSrc1 += iSrc1Stride;
     768    pDst  += iDstStride;
     769  }
     770}
     771
     772Void TComYuv::subtractARPChroma( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiAbsPartIdx, UInt uiWidth , UInt uiHeight )
     773{
     774  Int x, y;
     775
     776  Pel* pSrcU0 = pcYuvSrc0->getCbAddr( uiAbsPartIdx );
     777  Pel* pSrcU1 = pcYuvSrc1->getCbAddr( uiAbsPartIdx );
     778  Pel* pSrcV0 = pcYuvSrc0->getCrAddr( uiAbsPartIdx );
     779  Pel* pSrcV1 = pcYuvSrc1->getCrAddr( uiAbsPartIdx );
     780  Pel* pDstU  = getCbAddr( uiAbsPartIdx );
     781  Pel* pDstV  = getCrAddr( uiAbsPartIdx );
     782
     783  Int  iSrc0Stride = pcYuvSrc0->getCStride();
     784  Int  iSrc1Stride = pcYuvSrc1->getCStride();
     785  Int  iDstStride  = getCStride();
     786  for ( y = uiHeight-1; y >= 0; y-- )
     787  {
     788    for ( x = uiWidth-1; x >= 0; x-- )
     789    {
     790      pDstU[x] = pSrcU0[x] - pSrcU1[x];
     791      pDstV[x] = pSrcV0[x] - pSrcV1[x];
     792    }
     793    pSrcU0 += iSrc0Stride;
     794    pSrcU1 += iSrc1Stride;
     795    pSrcV0 += iSrc0Stride;
     796    pSrcV1 += iSrc1Stride;
     797    pDstU  += iDstStride;
     798    pDstV  += iDstStride;
     799  }
     800}
     801
     802Void TComYuv::multiplyARP( UInt uiAbsPartIdx , UInt uiWidth , UInt uiHeight , UChar dW )
     803{
     804  multiplyARPLuma( uiAbsPartIdx , uiWidth , uiHeight , dW );
     805  multiplyARPChroma( uiAbsPartIdx , uiWidth >> 1 , uiHeight >> 1 , dW );
     806}
     807
     808Void TComYuv::xxMultiplyLine( Pel* pSrcDst , UInt uiWidth , UChar dW )
     809{
     810  assert( dW == 2 );
     811  for( UInt x = 0 ; x < uiWidth ; x++ )
     812    pSrcDst[x] =  pSrcDst[x] >> 1;
     813}
     814
     815Void TComYuv::multiplyARPLuma( UInt uiAbsPartIdx , UInt uiWidth , UInt uiHeight , UChar dW )
     816{
     817  Pel* pDst  = getLumaAddr( uiAbsPartIdx );
     818  Int  iDstStride  = getStride();
     819  for ( Int y = uiHeight-1; y >= 0; y-- )
     820  {
     821    xxMultiplyLine( pDst , uiWidth , dW );
     822    pDst  += iDstStride;
     823  }
     824}
     825
     826Void TComYuv::multiplyARPChroma( UInt uiAbsPartIdx , UInt uiWidth , UInt uiHeight , UChar dW )
     827{
     828  Pel* pDstU  = getCbAddr( uiAbsPartIdx );
     829  Pel* pDstV  = getCrAddr( uiAbsPartIdx );
     830
     831  Int  iDstStride  = getCStride();
     832  for ( Int y = uiHeight-1; y >= 0; y-- )
     833  {
     834    xxMultiplyLine( pDstU , uiWidth , dW );
     835    xxMultiplyLine( pDstV , uiWidth , dW );
     836    pDstU  += iDstStride;
     837    pDstV  += iDstStride;
     838  }
     839}
     840#endif
     841#endif
     842
    649843//! \}
Note: See TracChangeset for help on using the changeset viewer.