Ignore:
Timestamp:
8 Feb 2014, 00:23:11 (10 years ago)
Author:
tech
Message:

Merged HM 13.0. (No yet checked).

File:
1 edited

Legend:

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

    r622 r837  
    44 * granted under this license. 
    55 *
    6  * Copyright (c) 2010-2013, ITU/ISO/IEC
     6* Copyright (c) 2010-2014, ITU/ISO/IEC
    77 * All rights reserved.
    88 *
     
    110110  {
    111111    ::memcpy( pDst, pSrc, sizeof(Pel)*iWidth);
    112 
    113112#if ENC_DEC_TRACE && H_MV_ENC_DEC_TRAC
    114113    if ( g_traceCopyBack && g_nSymbolCounter >= g_stopAtCounter )
     
    121120    }
    122121#endif
    123 
    124122    pDst += iDstStride;
    125123    pSrc += iSrcStride;
     
    616614    {
    617615#if DISABLING_CLIP_FOR_BIPREDME
    618       pDst[x ] = (pDst[x ]<<1) - pSrc[x ] ;
     616      pDst[x ] = 2 * pDst[x] - pSrc[x];
    619617#else
    620       pDst[x ] = Clip( (pDst[x ]<<1) - pSrc[x ] );
     618      pDst[x ] = ClipY(2 * pDst[x] - pSrc[x]);
    621619#endif
    622620    }
     
    636634    {
    637635#if DISABLING_CLIP_FOR_BIPREDME
    638       pDstU[x ] = (pDstU[x ]<<1) - pSrcU[x ] ;
    639       pDstV[x ] = (pDstV[x ]<<1) - pSrcV[x ] ;
     636      pDstU[x ] = 2 * pDstU[x] - pSrcU[x];
     637      pDstV[x ] = 2 * pDstV[x] - pSrcV[x];
    640638#else
    641       pDstU[x ] = Clip( (pDstU[x ]<<1) - pSrcU[x ] );
    642       pDstV[x ] = Clip( (pDstV[x ]<<1) - pSrcV[x ] );
     639      pDstU[x ] = ClipC(2 * pDstU[x] - pSrcU[x]);
     640      pDstV[x ] = ClipC(2 * pDstV[x] - pSrcV[x]);
    643641#endif
    644642    }
     
    649647  }
    650648}
    651 
    652 #if H_3D
    653 Void TComYuv::addClipPartLuma( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiTrUnitIdx, UInt uiPartSize )
    654 {
    655   Int x, y;
    656 
    657   Pel* pSrc0 = pcYuvSrc0->getLumaAddr( uiTrUnitIdx);
    658   Pel* pSrc1 = pcYuvSrc1->getLumaAddr( uiTrUnitIdx);
    659   Pel* pDst  = getLumaAddr( uiTrUnitIdx);
    660 
    661   UInt iSrc0Stride = pcYuvSrc0->getStride();
    662   UInt iSrc1Stride = pcYuvSrc1->getStride();
    663   UInt iDstStride  = getStride();
    664   for ( y = uiPartSize-1; y >= 0; y-- )
    665   {
    666     for ( x = uiPartSize-1; x >= 0; x-- )
    667     {
    668       pDst[x] = ClipY( pSrc0[x] + pSrc1[x] );     
    669     }
    670     pSrc0 += iSrc0Stride;
    671     pSrc1 += iSrc1Stride;
    672     pDst  += iDstStride;
    673   }
    674 }
    675 
    676 #if H_3D_ARP
    677 Void TComYuv::addARP( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiAbsPartIdx, UInt uiWidth, UInt uiHeight, Bool bClip )
    678 {
    679   addARPLuma   ( pcYuvSrc0, pcYuvSrc1, uiAbsPartIdx, uiWidth   , uiHeight    , bClip );
    680   addARPChroma ( pcYuvSrc0, pcYuvSrc1, uiAbsPartIdx, uiWidth>>1, uiHeight>>1 , bClip );
    681 }
    682 
    683 Void TComYuv::addARPLuma( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiAbsPartIdx, UInt uiWidth, UInt uiHeight, Bool bClip )
    684 {
    685   Int x, y;
    686 
    687   Pel* pSrc0 = pcYuvSrc0->getLumaAddr( uiAbsPartIdx );
    688   Pel* pSrc1 = pcYuvSrc1->getLumaAddr( uiAbsPartIdx );
    689   Pel* pDst  = getLumaAddr( uiAbsPartIdx );
    690 
    691   UInt iSrc0Stride = pcYuvSrc0->getStride();
    692   UInt iSrc1Stride = pcYuvSrc1->getStride();
    693   UInt iDstStride  = getStride();
    694   for ( y = uiHeight-1; y >= 0; y-- )
    695   {
    696     for ( x = uiWidth-1; x >= 0; x-- )
    697     {
    698       pDst[x] = pSrc0[x] + pSrc1[x];
    699       if( bClip )
    700       {
    701         pDst[x] = ClipY( pDst[x] );
    702       }
    703     }
    704     pSrc0 += iSrc0Stride;
    705     pSrc1 += iSrc1Stride;
    706     pDst  += iDstStride;
    707   }
    708 }
    709 
    710 Void TComYuv::addARPChroma( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiAbsPartIdx, UInt uiWidth, UInt uiHeight, Bool bClip )
    711 {
    712   Int x, y;
    713 
    714   Pel* pSrcU0 = pcYuvSrc0->getCbAddr( uiAbsPartIdx );
    715   Pel* pSrcU1 = pcYuvSrc1->getCbAddr( uiAbsPartIdx );
    716   Pel* pSrcV0 = pcYuvSrc0->getCrAddr( uiAbsPartIdx );
    717   Pel* pSrcV1 = pcYuvSrc1->getCrAddr( uiAbsPartIdx );
    718   Pel* pDstU = getCbAddr( uiAbsPartIdx );
    719   Pel* pDstV = getCrAddr( uiAbsPartIdx );
    720 
    721   UInt  iSrc0Stride = pcYuvSrc0->getCStride();
    722   UInt  iSrc1Stride = pcYuvSrc1->getCStride();
    723   UInt  iDstStride  = getCStride();
    724   for ( y = uiHeight-1; y >= 0; y-- )
    725   {
    726     for ( x = uiWidth-1; x >= 0; x-- )
    727     {
    728       pDstU[x] = pSrcU0[x] + pSrcU1[x];
    729       pDstV[x] = pSrcV0[x] + pSrcV1[x];
    730       if( bClip )
    731       {
    732         pDstU[x] = ClipC( pDstU[x] );
    733         pDstV[x] = ClipC( pDstV[x] );
    734       }
    735     }
    736 
    737     pSrcU0 += iSrc0Stride;
    738     pSrcU1 += iSrc1Stride;
    739     pSrcV0 += iSrc0Stride;
    740     pSrcV1 += iSrc1Stride;
    741     pDstU  += iDstStride;
    742     pDstV  += iDstStride;
    743   }
    744 }
    745 
    746 Void TComYuv::subtractARP( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiAbsPartIdx, UInt uiWidth , UInt uiHeight )
    747 {
    748   subtractARPLuma  ( pcYuvSrc0, pcYuvSrc1,  uiAbsPartIdx, uiWidth    , uiHeight    );
    749   subtractARPChroma( pcYuvSrc0, pcYuvSrc1,  uiAbsPartIdx, uiWidth>>1 , uiHeight>>1 );
    750 }
    751 
    752 Void TComYuv::subtractARPLuma( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiAbsPartIdx, UInt uiWidth , UInt uiHeight )
    753 {
    754   Int x, y;
    755 
    756   Pel* pSrc0 = pcYuvSrc0->getLumaAddr( uiAbsPartIdx );
    757   Pel* pSrc1 = pcYuvSrc1->getLumaAddr( uiAbsPartIdx );
    758   Pel* pDst  = getLumaAddr( uiAbsPartIdx );
    759 
    760   Int  iSrc0Stride = pcYuvSrc0->getStride();
    761   Int  iSrc1Stride = pcYuvSrc1->getStride();
    762   Int  iDstStride  = getStride();
    763   for ( y = uiHeight-1; y >= 0; y-- )
    764   {
    765     for ( x = uiWidth-1; x >= 0; x-- )
    766     {
    767       pDst[x] = pSrc0[x] - pSrc1[x];
    768     }
    769     pSrc0 += iSrc0Stride;
    770     pSrc1 += iSrc1Stride;
    771     pDst  += iDstStride;
    772   }
    773 }
    774 
    775 Void TComYuv::subtractARPChroma( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiAbsPartIdx, UInt uiWidth , UInt uiHeight )
    776 {
    777   Int x, y;
    778 
    779   Pel* pSrcU0 = pcYuvSrc0->getCbAddr( uiAbsPartIdx );
    780   Pel* pSrcU1 = pcYuvSrc1->getCbAddr( uiAbsPartIdx );
    781   Pel* pSrcV0 = pcYuvSrc0->getCrAddr( uiAbsPartIdx );
    782   Pel* pSrcV1 = pcYuvSrc1->getCrAddr( uiAbsPartIdx );
    783   Pel* pDstU  = getCbAddr( uiAbsPartIdx );
    784   Pel* pDstV  = getCrAddr( uiAbsPartIdx );
    785 
    786   Int  iSrc0Stride = pcYuvSrc0->getCStride();
    787   Int  iSrc1Stride = pcYuvSrc1->getCStride();
    788   Int  iDstStride  = getCStride();
    789   for ( y = uiHeight-1; y >= 0; y-- )
    790   {
    791     for ( x = uiWidth-1; x >= 0; x-- )
    792     {
    793       pDstU[x] = pSrcU0[x] - pSrcU1[x];
    794       pDstV[x] = pSrcV0[x] - pSrcV1[x];
    795     }
    796     pSrcU0 += iSrc0Stride;
    797     pSrcU1 += iSrc1Stride;
    798     pSrcV0 += iSrc0Stride;
    799     pSrcV1 += iSrc1Stride;
    800     pDstU  += iDstStride;
    801     pDstV  += iDstStride;
    802   }
    803 }
    804 
    805 Void TComYuv::multiplyARP( UInt uiAbsPartIdx , UInt uiWidth , UInt uiHeight , UChar dW )
    806 {
    807   multiplyARPLuma( uiAbsPartIdx , uiWidth , uiHeight , dW );
    808   multiplyARPChroma( uiAbsPartIdx , uiWidth >> 1 , uiHeight >> 1 , dW );
    809 }
    810 
    811 Void TComYuv::xxMultiplyLine( Pel* pSrcDst , UInt uiWidth , UChar dW )
    812 {
    813   assert( dW == 2 );
    814   for( UInt x = 0 ; x < uiWidth ; x++ )
    815     pSrcDst[x] =  pSrcDst[x] >> 1;
    816 }
    817 
    818 Void TComYuv::multiplyARPLuma( UInt uiAbsPartIdx , UInt uiWidth , UInt uiHeight , UChar dW )
    819 {
    820   Pel* pDst  = getLumaAddr( uiAbsPartIdx );
    821   Int  iDstStride  = getStride();
    822   for ( Int y = uiHeight-1; y >= 0; y-- )
    823   {
    824     xxMultiplyLine( pDst , uiWidth , dW );
    825     pDst  += iDstStride;
    826   }
    827 }
    828 
    829 Void TComYuv::multiplyARPChroma( UInt uiAbsPartIdx , UInt uiWidth , UInt uiHeight , UChar dW )
    830 {
    831   Pel* pDstU  = getCbAddr( uiAbsPartIdx );
    832   Pel* pDstV  = getCrAddr( uiAbsPartIdx );
    833 
    834   Int  iDstStride  = getCStride();
    835   for ( Int y = uiHeight-1; y >= 0; y-- )
    836   {
    837     xxMultiplyLine( pDstU , uiWidth , dW );
    838     xxMultiplyLine( pDstV , uiWidth , dW );
    839     pDstU  += iDstStride;
    840     pDstV  += iDstStride;
    841   }
    842 }
    843 #endif
    844 #endif
    845649//! \}
Note: See TracChangeset for help on using the changeset viewer.