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