Changeset 1191 in 3DVCSoftware for branches/HTM-14.0-MV-draft-3/source/Lib/TLibCommon/TComYuv.cpp
- Timestamp:
- 15 Apr 2015, 11:36:33 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HTM-14.0-MV-draft-3/source/Lib/TLibCommon/TComYuv.cpp
r1179 r1191 647 647 } 648 648 } 649 #if H_3D650 Void 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_ARP674 Void 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 680 Void 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 Int iIFshift = IF_INTERNAL_PREC - g_bitDepthY;692 Int iOffSet = ( 1 << ( iIFshift - 1 ) ) + IF_INTERNAL_OFFS;693 for ( y = uiHeight-1; y >= 0; y-- )694 {695 for ( x = uiWidth-1; x >= 0; x-- )696 {697 pDst[x] = pSrc0[x] + pSrc1[x];698 if( bClip )699 {700 pDst[x] = ClipY( ( pDst[x] + iOffSet ) >> iIFshift );701 }702 }703 pSrc0 += iSrc0Stride;704 pSrc1 += iSrc1Stride;705 pDst += iDstStride;706 }707 }708 709 Void TComYuv::addARPChroma( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiAbsPartIdx, UInt uiWidth, UInt uiHeight, Bool bClip )710 {711 Int x, y;712 713 Pel* pSrcU0 = pcYuvSrc0->getCbAddr( uiAbsPartIdx );714 Pel* pSrcU1 = pcYuvSrc1->getCbAddr( uiAbsPartIdx );715 Pel* pSrcV0 = pcYuvSrc0->getCrAddr( uiAbsPartIdx );716 Pel* pSrcV1 = pcYuvSrc1->getCrAddr( uiAbsPartIdx );717 Pel* pDstU = getCbAddr( uiAbsPartIdx );718 Pel* pDstV = getCrAddr( uiAbsPartIdx );719 720 UInt iSrc0Stride = pcYuvSrc0->getCStride();721 UInt iSrc1Stride = pcYuvSrc1->getCStride();722 UInt iDstStride = getCStride();723 724 Int iIFshift = IF_INTERNAL_PREC - g_bitDepthC;725 Int iOffSet = ( 1 << ( iIFshift - 1 ) ) + IF_INTERNAL_OFFS;726 727 for ( y = uiHeight-1; y >= 0; y-- )728 {729 for ( x = uiWidth-1; x >= 0; x-- )730 {731 pDstU[x] = pSrcU0[x] + pSrcU1[x];732 pDstV[x] = pSrcV0[x] + pSrcV1[x];733 if( bClip )734 {735 pDstU[x] = ClipC( ( pDstU[x] + iOffSet ) >> iIFshift );736 pDstV[x] = ClipC( ( pDstV[x] + iOffSet ) >> iIFshift );737 }738 }739 740 pSrcU0 += iSrc0Stride;741 pSrcU1 += iSrc1Stride;742 pSrcV0 += iSrc0Stride;743 pSrcV1 += iSrc1Stride;744 pDstU += iDstStride;745 pDstV += iDstStride;746 }747 }748 749 Void TComYuv::subtractARP( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiAbsPartIdx, UInt uiWidth , UInt uiHeight )750 {751 subtractARPLuma ( pcYuvSrc0, pcYuvSrc1, uiAbsPartIdx, uiWidth , uiHeight );752 753 if (uiWidth > 8)754 subtractARPChroma( pcYuvSrc0, pcYuvSrc1, uiAbsPartIdx, uiWidth>>1 , uiHeight>>1 );755 }756 757 Void TComYuv::subtractARPLuma( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiAbsPartIdx, UInt uiWidth , UInt uiHeight )758 {759 Int x, y;760 761 Pel* pSrc0 = pcYuvSrc0->getLumaAddr( uiAbsPartIdx );762 Pel* pSrc1 = pcYuvSrc1->getLumaAddr( uiAbsPartIdx );763 Pel* pDst = getLumaAddr( uiAbsPartIdx );764 765 Int iSrc0Stride = pcYuvSrc0->getStride();766 Int iSrc1Stride = pcYuvSrc1->getStride();767 Int iDstStride = getStride();768 for ( y = uiHeight-1; y >= 0; y-- )769 {770 for ( x = uiWidth-1; x >= 0; x-- )771 {772 pDst[x] = pSrc0[x] - pSrc1[x];773 }774 pSrc0 += iSrc0Stride;775 pSrc1 += iSrc1Stride;776 pDst += iDstStride;777 }778 }779 780 Void TComYuv::subtractARPChroma( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiAbsPartIdx, UInt uiWidth , UInt uiHeight )781 {782 Int x, y;783 784 Pel* pSrcU0 = pcYuvSrc0->getCbAddr( uiAbsPartIdx );785 Pel* pSrcU1 = pcYuvSrc1->getCbAddr( uiAbsPartIdx );786 Pel* pSrcV0 = pcYuvSrc0->getCrAddr( uiAbsPartIdx );787 Pel* pSrcV1 = pcYuvSrc1->getCrAddr( uiAbsPartIdx );788 Pel* pDstU = getCbAddr( uiAbsPartIdx );789 Pel* pDstV = getCrAddr( uiAbsPartIdx );790 791 Int iSrc0Stride = pcYuvSrc0->getCStride();792 Int iSrc1Stride = pcYuvSrc1->getCStride();793 Int iDstStride = getCStride();794 for ( y = uiHeight-1; y >= 0; y-- )795 {796 for ( x = uiWidth-1; x >= 0; x-- )797 {798 pDstU[x] = pSrcU0[x] - pSrcU1[x];799 pDstV[x] = pSrcV0[x] - pSrcV1[x];800 }801 pSrcU0 += iSrc0Stride;802 pSrcU1 += iSrc1Stride;803 pSrcV0 += iSrc0Stride;804 pSrcV1 += iSrc1Stride;805 pDstU += iDstStride;806 pDstV += iDstStride;807 }808 }809 810 Void TComYuv::multiplyARP( UInt uiAbsPartIdx , UInt uiWidth , UInt uiHeight , UChar dW )811 {812 multiplyARPLuma( uiAbsPartIdx , uiWidth , uiHeight , dW );813 814 if (uiWidth > 8)815 multiplyARPChroma( uiAbsPartIdx , uiWidth >> 1 , uiHeight >> 1 , dW );816 }817 818 Void TComYuv::xxMultiplyLine( Pel* pSrcDst , UInt uiWidth , UChar dW )819 {820 assert( dW == 2 );821 for( UInt x = 0 ; x < uiWidth ; x++ )822 pSrcDst[x] = pSrcDst[x] >> 1;823 }824 825 Void TComYuv::multiplyARPLuma( UInt uiAbsPartIdx , UInt uiWidth , UInt uiHeight , UChar dW )826 {827 Pel* pDst = getLumaAddr( uiAbsPartIdx );828 Int iDstStride = getStride();829 for ( Int y = uiHeight-1; y >= 0; y-- )830 {831 xxMultiplyLine( pDst , uiWidth , dW );832 pDst += iDstStride;833 }834 }835 836 Void TComYuv::multiplyARPChroma( UInt uiAbsPartIdx , UInt uiWidth , UInt uiHeight , UChar dW )837 {838 Pel* pDstU = getCbAddr( uiAbsPartIdx );839 Pel* pDstV = getCrAddr( uiAbsPartIdx );840 841 Int iDstStride = getCStride();842 for ( Int y = uiHeight-1; y >= 0; y-- )843 {844 xxMultiplyLine( pDstU , uiWidth , dW );845 xxMultiplyLine( pDstV , uiWidth , dW );846 pDstU += iDstStride;847 pDstV += iDstStride;848 }849 }850 #endif851 #endif852 649 853 650 //! \}
Note: See TracChangeset for help on using the changeset viewer.