Changeset 100 in 3DVCSoftware for trunk/source/Lib/TLibCommon/TComYuv.cpp


Ignore:
Timestamp:
9 Aug 2012, 12:53:16 (12 years ago)
Author:
tech
Message:

Adopted modifications:

  • disparity vector generation (A0097)
  • inter-view motion prediction modification (A0049)
  • simplification of disparity vector derivation (A0126)
  • region boundary chain coding (A0070)
  • residual skip intra (A0087)
  • VSO modification (A0033/A0093)

+ Clean ups + Bug fixes

Update of cfg files (A0033 modification 2)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/Lib/TLibCommon/TComYuv.cpp

    r77 r100  
    396396TComYuv::add(Int *iPUResiPredShift, PartSize uhPartitionSize,  TComYuv* pcYuvAdd, Int iWidth, Int iHeight, Bool bSubtract )
    397397{
    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 );
    400400}
    401401#else
     
    412412TComYuv::getPUXYOffset(PartSize uhPartitionSize, Int iWidth, Int iHeight, Int &iXOffset, Int &iYOffset)
    413413{
    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  }
    434434}
    435435#endif
     
    456456  for( Int iY = 0; iY < iYOffset; iY++, pDstSamples += iDstStride, pAddSamples += iAddStride )
    457457  {
    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    }
    473473  }
    474474
    475475  for( Int iY = iYOffset; iY < iHeight; iY++, pDstSamples += iDstStride, pAddSamples += iAddStride )
    476476  {
    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    }
    492492  }
    493493#else
     
    524524
    525525  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    }
    545545  }
    546546
    547547  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    }
    567567  }
    568568#else
     
    679679Void TComYuv::subtract(Int *iPUResiPredShift, PartSize uhPartitionSize, TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiTrUnitIdx, UInt uiPartSize )
    680680{
    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 );
    683683}
    684684#else
     
    713713  for ( y = uiPartSize-1; y >= iYOffset; y-- )
    714714  {
    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;
    733733  }
    734734
    735735  for ( y = iYOffset-1; y >= 0; y-- )
    736736  {
    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;
    755755  }
    756756
     
    794794  for ( y = uiPartSize-1; y >= iYOffset; y-- )
    795795  {
    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;
    819819  }
    820820
    821821  for ( y = iYOffset-1; y >= 0; y-- )
    822822  {
    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;
    846846  }
    847847#else
Note: See TracChangeset for help on using the changeset viewer.