Changeset 840 in 3DVCSoftware for branches/HTM-10.0rc1-dev0/source/Lib/TLibCommon/TComYuv.cpp
- Timestamp:
- 8 Feb 2014, 15:29:19 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HTM-10.0rc1-dev0/source/Lib/TLibCommon/TComYuv.cpp
r837 r840 647 647 } 648 648 } 649 #if H_3D 650 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_ARP 674 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 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 707 Void 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 743 Void 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 749 Void 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 772 Void 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 802 Void 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 808 Void 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 815 Void 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 826 Void 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 649 843 //! \}
Note: See TracChangeset for help on using the changeset viewer.