Changeset 100 in 3DVCSoftware for trunk/source/Lib/TLibCommon/TComYuv.cpp
- Timestamp:
- 9 Aug 2012, 12:53:16 (13 years ago)
- File:
-
- 1 edited
-
trunk/source/Lib/TLibCommon/TComYuv.cpp (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/Lib/TLibCommon/TComYuv.cpp
r77 r100 396 396 TComYuv::add(Int *iPUResiPredShift, PartSize uhPartitionSize, TComYuv* pcYuvAdd, Int iWidth, Int iHeight, Bool bSubtract ) 397 397 { 398 addLuma (iPUResiPredShift, uhPartitionSize, pcYuvAdd, iWidth, iHeight, bSubtract );399 addChroma (iPUResiPredShift, uhPartitionSize, pcYuvAdd, iWidth>>1, iHeight>>1, bSubtract );398 addLuma (iPUResiPredShift, uhPartitionSize, pcYuvAdd, iWidth, iHeight, bSubtract ); 399 addChroma (iPUResiPredShift, uhPartitionSize, pcYuvAdd, iWidth>>1, iHeight>>1, bSubtract ); 400 400 } 401 401 #else … … 412 412 TComYuv::getPUXYOffset(PartSize uhPartitionSize, Int iWidth, Int iHeight, Int &iXOffset, Int &iYOffset) 413 413 { 414 switch(uhPartitionSize)415 {416 case SIZE_2NxN:417 iXOffset = iWidth; iYOffset = iHeight >> 1; break;418 case SIZE_2NxnU:419 iXOffset = iWidth; iYOffset = iHeight >> 2; break;420 case SIZE_2NxnD:421 iXOffset = iWidth; iYOffset = (iHeight >> 1) + (iHeight >> 2); break;422 case SIZE_Nx2N:423 iXOffset = iWidth >> 1; iYOffset = iHeight; break;424 case SIZE_nLx2N:425 iXOffset = iWidth >> 2; iYOffset = iHeight; break;426 case SIZE_nRx2N:427 iXOffset = (iWidth >> 1) + (iWidth >> 2); iYOffset = iHeight; break;428 case SIZE_NxN:429 iXOffset = iWidth >> 1; iYOffset = iHeight >> 1; break;430 default:431 assert(uhPartitionSize == SIZE_2Nx2N);432 iXOffset = iWidth; iYOffset = iHeight;break;433 }414 switch(uhPartitionSize) 415 { 416 case SIZE_2NxN: 417 iXOffset = iWidth; iYOffset = iHeight >> 1; break; 418 case SIZE_2NxnU: 419 iXOffset = iWidth; iYOffset = iHeight >> 2; break; 420 case SIZE_2NxnD: 421 iXOffset = iWidth; iYOffset = (iHeight >> 1) + (iHeight >> 2); break; 422 case SIZE_Nx2N: 423 iXOffset = iWidth >> 1; iYOffset = iHeight; break; 424 case SIZE_nLx2N: 425 iXOffset = iWidth >> 2; iYOffset = iHeight; break; 426 case SIZE_nRx2N: 427 iXOffset = (iWidth >> 1) + (iWidth >> 2); iYOffset = iHeight; break; 428 case SIZE_NxN: 429 iXOffset = iWidth >> 1; iYOffset = iHeight >> 1; break; 430 default: 431 assert(uhPartitionSize == SIZE_2Nx2N); 432 iXOffset = iWidth; iYOffset = iHeight; break; 433 } 434 434 } 435 435 #endif … … 456 456 for( Int iY = 0; iY < iYOffset; iY++, pDstSamples += iDstStride, pAddSamples += iAddStride ) 457 457 { 458 if(iPUResiPredShift[0] >= 0)459 {460 for( Int iX = 0; iX < iXOffset; iX++ )461 {462 pDstSamples[iX] += iScale * (pAddSamples[iX] >> iPUResiPredShift[0]);463 }464 }465 466 if(iPUResiPredShift[1] >= 0)467 {468 for( Int iX = iXOffset; iX < iWidth; iX++ )469 {470 pDstSamples[iX] += iScale * (pAddSamples[iX] >> iPUResiPredShift[1]);471 }472 }458 if(iPUResiPredShift[0] >= 0) 459 { 460 for( Int iX = 0; iX < iXOffset; iX++ ) 461 { 462 pDstSamples[iX] += iScale * (pAddSamples[iX] >> iPUResiPredShift[0]); 463 } 464 } 465 466 if(iPUResiPredShift[1] >= 0) 467 { 468 for( Int iX = iXOffset; iX < iWidth; iX++ ) 469 { 470 pDstSamples[iX] += iScale * (pAddSamples[iX] >> iPUResiPredShift[1]); 471 } 472 } 473 473 } 474 474 475 475 for( Int iY = iYOffset; iY < iHeight; iY++, pDstSamples += iDstStride, pAddSamples += iAddStride ) 476 476 { 477 if(iPUResiPredShift[2] >= 0)478 {479 for( Int iX = 0; iX < iXOffset; iX++ )480 {481 pDstSamples[iX] += iScale * (pAddSamples[iX] >> iPUResiPredShift[2]);482 }483 }484 485 if(iPUResiPredShift[3] >= 0)486 {487 for( Int iX = iXOffset; iX < iWidth; iX++ )488 {489 pDstSamples[iX] += iScale * (pAddSamples[iX] >> iPUResiPredShift[3]);490 }491 }477 if(iPUResiPredShift[2] >= 0) 478 { 479 for( Int iX = 0; iX < iXOffset; iX++ ) 480 { 481 pDstSamples[iX] += iScale * (pAddSamples[iX] >> iPUResiPredShift[2]); 482 } 483 } 484 485 if(iPUResiPredShift[3] >= 0) 486 { 487 for( Int iX = iXOffset; iX < iWidth; iX++ ) 488 { 489 pDstSamples[iX] += iScale * (pAddSamples[iX] >> iPUResiPredShift[3]); 490 } 491 } 492 492 } 493 493 #else … … 524 524 525 525 for( Int iY = 0; iY < iYOffset; iY++, pDstSamplesCb += iDstStride, pAddSamplesCb += iAddStride, 526 pDstSamplesCr += iDstStride, pAddSamplesCr += iAddStride )527 { 528 if(iPUResiPredShift[0] >= 0)529 {530 for( Int iX = 0; iX < iXOffset; iX++ )531 {532 pDstSamplesCb[iX] += iScale * (pAddSamplesCb[iX] >> iPUResiPredShift[0]);533 pDstSamplesCr[iX] += iScale * (pAddSamplesCr[iX] >> iPUResiPredShift[0]);534 }535 }536 537 if(iPUResiPredShift[1] >= 0)538 {539 for( Int iX = iXOffset; iX < iWidth; iX++ )540 {541 pDstSamplesCb[iX] += iScale * (pAddSamplesCb[iX] >> iPUResiPredShift[1]);542 pDstSamplesCr[iX] += iScale * (pAddSamplesCr[iX] >> iPUResiPredShift[1]);543 }544 }526 pDstSamplesCr += iDstStride, pAddSamplesCr += iAddStride ) 527 { 528 if(iPUResiPredShift[0] >= 0) 529 { 530 for( Int iX = 0; iX < iXOffset; iX++ ) 531 { 532 pDstSamplesCb[iX] += iScale * (pAddSamplesCb[iX] >> iPUResiPredShift[0]); 533 pDstSamplesCr[iX] += iScale * (pAddSamplesCr[iX] >> iPUResiPredShift[0]); 534 } 535 } 536 537 if(iPUResiPredShift[1] >= 0) 538 { 539 for( Int iX = iXOffset; iX < iWidth; iX++ ) 540 { 541 pDstSamplesCb[iX] += iScale * (pAddSamplesCb[iX] >> iPUResiPredShift[1]); 542 pDstSamplesCr[iX] += iScale * (pAddSamplesCr[iX] >> iPUResiPredShift[1]); 543 } 544 } 545 545 } 546 546 547 547 for( Int iY = iYOffset; iY < iHeight; iY++, pDstSamplesCb += iDstStride, pAddSamplesCb += iAddStride, 548 pDstSamplesCr += iDstStride, pAddSamplesCr += iAddStride )549 { 550 if(iPUResiPredShift[2] >= 0)551 {552 for( Int iX = 0; iX < iXOffset; iX++ )553 {554 pDstSamplesCb[iX] += iScale * (pAddSamplesCb[iX] >> iPUResiPredShift[2]);555 pDstSamplesCr[iX] += iScale * (pAddSamplesCr[iX] >> iPUResiPredShift[2]);556 }557 }558 559 if(iPUResiPredShift[3] >= 0)560 {561 for( Int iX = iXOffset; iX < iWidth; iX++ )562 {563 pDstSamplesCb[iX] += iScale * (pAddSamplesCb[iX] >> iPUResiPredShift[3]);564 pDstSamplesCr[iX] += iScale * (pAddSamplesCr[iX] >> iPUResiPredShift[3]);565 }566 }548 pDstSamplesCr += iDstStride, pAddSamplesCr += iAddStride ) 549 { 550 if(iPUResiPredShift[2] >= 0) 551 { 552 for( Int iX = 0; iX < iXOffset; iX++ ) 553 { 554 pDstSamplesCb[iX] += iScale * (pAddSamplesCb[iX] >> iPUResiPredShift[2]); 555 pDstSamplesCr[iX] += iScale * (pAddSamplesCr[iX] >> iPUResiPredShift[2]); 556 } 557 } 558 559 if(iPUResiPredShift[3] >= 0) 560 { 561 for( Int iX = iXOffset; iX < iWidth; iX++ ) 562 { 563 pDstSamplesCb[iX] += iScale * (pAddSamplesCb[iX] >> iPUResiPredShift[3]); 564 pDstSamplesCr[iX] += iScale * (pAddSamplesCr[iX] >> iPUResiPredShift[3]); 565 } 566 } 567 567 } 568 568 #else … … 679 679 Void TComYuv::subtract(Int *iPUResiPredShift, PartSize uhPartitionSize, TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiTrUnitIdx, UInt uiPartSize ) 680 680 { 681 subtractLuma (iPUResiPredShift, uhPartitionSize, pcYuvSrc0, pcYuvSrc1, uiTrUnitIdx, uiPartSize );682 subtractChroma(iPUResiPredShift, uhPartitionSize, pcYuvSrc0, pcYuvSrc1, uiTrUnitIdx, uiPartSize>>1 );681 subtractLuma (iPUResiPredShift, uhPartitionSize, pcYuvSrc0, pcYuvSrc1, uiTrUnitIdx, uiPartSize ); 682 subtractChroma(iPUResiPredShift, uhPartitionSize, pcYuvSrc0, pcYuvSrc1, uiTrUnitIdx, uiPartSize>>1 ); 683 683 } 684 684 #else … … 713 713 for ( y = uiPartSize-1; y >= iYOffset; y-- ) 714 714 { 715 if(iPUResiPredShift[3] >= 0)716 {717 for ( x = uiPartSize-1; x >= iXOffset; x-- )718 {719 pDst[x] = pSrc0[x] - (pSrc1[x] >> iPUResiPredShift[3]);720 }721 }722 723 if(iPUResiPredShift[2] >= 0)724 {725 for ( x = iXOffset-1; x >= 0; x-- )726 {727 pDst[x] = pSrc0[x] - (pSrc1[x] >> iPUResiPredShift[2]);728 }729 }730 pSrc0 += iSrc0Stride;731 pSrc1 += iSrc1Stride;732 pDst += iDstStride;715 if(iPUResiPredShift[3] >= 0) 716 { 717 for ( x = uiPartSize-1; x >= iXOffset; x-- ) 718 { 719 pDst[x] = pSrc0[x] - (pSrc1[x] >> iPUResiPredShift[3]); 720 } 721 } 722 723 if(iPUResiPredShift[2] >= 0) 724 { 725 for ( x = iXOffset-1; x >= 0; x-- ) 726 { 727 pDst[x] = pSrc0[x] - (pSrc1[x] >> iPUResiPredShift[2]); 728 } 729 } 730 pSrc0 += iSrc0Stride; 731 pSrc1 += iSrc1Stride; 732 pDst += iDstStride; 733 733 } 734 734 735 735 for ( y = iYOffset-1; y >= 0; y-- ) 736 736 { 737 if(iPUResiPredShift[1] >= 0)738 {739 for ( x = uiPartSize-1; x >= iXOffset; x-- )740 {741 pDst[x] = pSrc0[x] - (pSrc1[x] >> iPUResiPredShift[3]);742 }743 }744 745 if(iPUResiPredShift[0] >= 0)746 {747 for ( x = iXOffset-1; x >= 0; x-- )748 {749 pDst[x] = pSrc0[x] - (pSrc1[x] >> iPUResiPredShift[2]);750 }751 }752 pSrc0 += iSrc0Stride;753 pSrc1 += iSrc1Stride;754 pDst += iDstStride;737 if(iPUResiPredShift[1] >= 0) 738 { 739 for ( x = uiPartSize-1; x >= iXOffset; x-- ) 740 { 741 pDst[x] = pSrc0[x] - (pSrc1[x] >> iPUResiPredShift[3]); 742 } 743 } 744 745 if(iPUResiPredShift[0] >= 0) 746 { 747 for ( x = iXOffset-1; x >= 0; x-- ) 748 { 749 pDst[x] = pSrc0[x] - (pSrc1[x] >> iPUResiPredShift[2]); 750 } 751 } 752 pSrc0 += iSrc0Stride; 753 pSrc1 += iSrc1Stride; 754 pDst += iDstStride; 755 755 } 756 756 … … 794 794 for ( y = uiPartSize-1; y >= iYOffset; y-- ) 795 795 { 796 if(iPUResiPredShift[3] >= 0)797 {798 for ( x = uiPartSize-1; x >= iXOffset; x-- )799 {800 pDstU[x] = pSrcU0[x] - (pSrcU1[x]>>iPUResiPredShift[3]);801 pDstV[x] = pSrcV0[x] - (pSrcV1[x]>>iPUResiPredShift[3]);802 }803 }804 805 if(iPUResiPredShift[2] >= 0)806 {807 for ( x = iXOffset-1; x >= 0; x-- )808 {809 pDstU[x] = pSrcU0[x] - (pSrcU1[x]>>iPUResiPredShift[2]);810 pDstV[x] = pSrcV0[x] - (pSrcV1[x]>>iPUResiPredShift[2]);811 }812 }813 pSrcU0 += iSrc0Stride;814 pSrcU1 += iSrc1Stride;815 pSrcV0 += iSrc0Stride;816 pSrcV1 += iSrc1Stride;817 pDstU += iDstStride;818 pDstV += iDstStride;796 if(iPUResiPredShift[3] >= 0) 797 { 798 for ( x = uiPartSize-1; x >= iXOffset; x-- ) 799 { 800 pDstU[x] = pSrcU0[x] - (pSrcU1[x]>>iPUResiPredShift[3]); 801 pDstV[x] = pSrcV0[x] - (pSrcV1[x]>>iPUResiPredShift[3]); 802 } 803 } 804 805 if(iPUResiPredShift[2] >= 0) 806 { 807 for ( x = iXOffset-1; x >= 0; x-- ) 808 { 809 pDstU[x] = pSrcU0[x] - (pSrcU1[x]>>iPUResiPredShift[2]); 810 pDstV[x] = pSrcV0[x] - (pSrcV1[x]>>iPUResiPredShift[2]); 811 } 812 } 813 pSrcU0 += iSrc0Stride; 814 pSrcU1 += iSrc1Stride; 815 pSrcV0 += iSrc0Stride; 816 pSrcV1 += iSrc1Stride; 817 pDstU += iDstStride; 818 pDstV += iDstStride; 819 819 } 820 820 821 821 for ( y = iYOffset-1; y >= 0; y-- ) 822 822 { 823 if(iPUResiPredShift[1] >= 0)824 {825 for ( x = uiPartSize-1; x >= iXOffset; x-- )826 {827 pDstU[x] = pSrcU0[x] - (pSrcU1[x]>>iPUResiPredShift[1]);828 pDstV[x] = pSrcV0[x] - (pSrcV1[x]>>iPUResiPredShift[1]);829 }830 }831 832 if(iPUResiPredShift[0] >= 0)833 {834 for ( x = iXOffset-1; x >= 0; x-- )835 {836 pDstU[x] = pSrcU0[x] - (pSrcU1[x]>>iPUResiPredShift[0]);837 pDstV[x] = pSrcV0[x] - (pSrcV1[x]>>iPUResiPredShift[0]);838 }839 }840 pSrcU0 += iSrc0Stride;841 pSrcU1 += iSrc1Stride;842 pSrcV0 += iSrc0Stride;843 pSrcV1 += iSrc1Stride;844 pDstU += iDstStride;845 pDstV += iDstStride;823 if(iPUResiPredShift[1] >= 0) 824 { 825 for ( x = uiPartSize-1; x >= iXOffset; x-- ) 826 { 827 pDstU[x] = pSrcU0[x] - (pSrcU1[x]>>iPUResiPredShift[1]); 828 pDstV[x] = pSrcV0[x] - (pSrcV1[x]>>iPUResiPredShift[1]); 829 } 830 } 831 832 if(iPUResiPredShift[0] >= 0) 833 { 834 for ( x = iXOffset-1; x >= 0; x-- ) 835 { 836 pDstU[x] = pSrcU0[x] - (pSrcU1[x]>>iPUResiPredShift[0]); 837 pDstV[x] = pSrcV0[x] - (pSrcV1[x]>>iPUResiPredShift[0]); 838 } 839 } 840 pSrcU0 += iSrc0Stride; 841 pSrcU1 += iSrc1Stride; 842 pSrcV0 += iSrc0Stride; 843 pSrcV1 += iSrc1Stride; 844 pDstU += iDstStride; 845 pDstV += iDstStride; 846 846 } 847 847 #else
Note: See TracChangeset for help on using the changeset viewer.