Ignore:
Timestamp:
22 Apr 2014, 16:03:08 (10 years ago)
Author:
tech
Message:

Merged 10.2-dev2-MediaTek@930.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-10.2-dev0/source/Lib/TLibCommon/TComPrediction.cpp

    r935 r936  
    643643 
    644644  // start mapping process
     645#if !MTK_DBBP_AMP_REM_H0072
    645646  Bool bAMPAvail = uiSize > 8;
    646647  Int matchedPartSum[6][2] = {{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}}; // counter for each part size and boolean option
    647648  PartSize virtualPartSizes[6] = { SIZE_Nx2N, SIZE_2NxN, SIZE_2NxnU, SIZE_2NxnD, SIZE_nLx2N, SIZE_nRx2N };
     649#else
     650  Int matchedPartSum[2][2] = {{0,0},{0,0}}; // counter for each part size and boolean option
     651  PartSize virtualPartSizes[2] = { SIZE_Nx2N, SIZE_2NxN};
     652#endif
    648653 
    649654  UInt uiHalfSize = uiSize>>1;
     655#if !MTK_DBBP_AMP_REM_H0072
    650656  UInt uiQuarterSize = uiSize>>2;
     657#endif
    651658 
    652659  for (Int y=0; y<uiSize; y+=iSubSample)
     
    681688      }
    682689     
     690#if !MTK_DBBP_AMP_REM_H0072
    683691      if( bAMPAvail )
    684692      {
     
    723731        }
    724732      }
     733#endif
    725734    }
    726735   
     
    732741 
    733742  Int iMaxMatchSum = 0;
    734   for(Int p=0; p<6; p++)  // loop over partition sizes
     743#if !MTK_DBBP_AMP_REM_H0072
     744  for(Int p=0; p<6; p++)  // loop over partition
     745#else
     746  for(Int p=0; p<2; p++)  // loop over partition
     747#endif
    735748  {
    736749    for( Int b=0; b<=1; b++ ) // loop over boolean options
     
    842855 
    843856  UInt  uiMaskStride= MAX_CU_SIZE;
     857#if SEC_DBBP_FILTERING_H0104
     858  Pel  filSrc = 0;
     859  Pel* tmpTar = 0;
     860  tmpTar = (Pel *)xMalloc(Pel, uiWidth*uiHeight);
     861#endif
    844862 
    845863  // backup pointer
     
    855873     
    856874      // filtering
     875#if SEC_DBBP_FILTERING_H0104
     876      tmpTar[y*uiWidth+x] = piSrc[ucSegment][x];
     877#else
    857878      Bool t = (y==0)?pMaskStart[(y+1)*uiMaskStride+x]:pMaskStart[(y-1)*uiMaskStride+x];
    858879      Bool l = (x==0)?pMaskStart[y*uiMaskStride+x+1]:pMaskStart[y*uiMaskStride+x-1];
     
    862883      Bool bBlend = !((t&&l&&b&&r) || (!t&&!l&&!b&&!r));
    863884      piDst[x] = bBlend?((piSrc[0][x]+piSrc[1][x]+1)>>1):piSrc[ucSegment][x];
     885#endif
    864886    }
    865887   
    866888    piSrc[0]  += uiSrcStride;
    867889    piSrc[1]  += uiSrcStride;
     890#if !SEC_DBBP_FILTERING_H0104
    868891    piDst     += uiDstStride;
     892#endif
    869893    pMask     += uiMaskStride;
    870894  }
     895 
     896#if SEC_DBBP_FILTERING_H0104
     897  for (Int y=0; y<uiHeight; y++)
     898  {
     899    for (Int x=0; x<uiWidth; x++)
     900    {
     901      Bool t = (y==0)?pMaskStart[y*uiMaskStride+x]:pMaskStart[(y-1)*uiMaskStride+x];
     902      Bool l = (x==0)?pMaskStart[y*uiMaskStride+x]:pMaskStart[y*uiMaskStride+x-1];
     903      Bool b = (y==uiHeight-1)?pMaskStart[y*uiMaskStride+x]:pMaskStart[(y+1)*uiMaskStride+x];
     904      Bool r = (x==uiWidth-1)?pMaskStart[y*uiMaskStride+x]:pMaskStart[y*uiMaskStride+x+1];
     905      Bool c =pMaskStart[y*uiMaskStride+x];
     906
     907      Pel left, right, top, bottom;
     908      left   = (x==0)          ? tmpTar[y*uiWidth+x] : tmpTar[y*uiWidth+x-1];
     909      right  = (x==uiWidth-1)  ? tmpTar[y*uiWidth+x] : tmpTar[y*uiWidth+x+1];
     910      top    = (y==0)          ? tmpTar[y*uiWidth+x] : tmpTar[(y-1)*uiWidth+x];
     911      bottom = (y==uiHeight-1) ? tmpTar[y*uiWidth+x] : tmpTar[(y+1)*uiWidth+x];
     912
     913      if(!((l&&r&&c) || (!l&&!r&&!c)))
     914      {
     915        filSrc = Clip3( Pel( 0 ), Pel( 255 ), Pel(( left + (tmpTar[y*uiWidth+x] << 1) + right ) >> 2 ));
     916      }
     917      else
     918      {
     919        filSrc = tmpTar[y*uiWidth+x];
     920      }
     921
     922      if(!((t&&b&&c) || (!t&&!b&&!c)))
     923      {
     924        filSrc = Clip3( Pel( 0 ), Pel( 255 ), Pel(( top + (filSrc << 1) + bottom ) >> 2 ));
     925      }
     926      piDst[x] = filSrc;
     927    }
     928    piDst     += uiDstStride;
     929  }
     930  if ( tmpTar    ) { xFree(tmpTar);             tmpTar        = NULL; }
     931#endif
    871932 
    872933  // now combine chroma
     
    879940  UInt  uiWidthC        = uiWidth >> 1;
    880941  UInt  uiHeightC       = uiHeight >> 1;
     942#if SEC_DBBP_FILTERING_H0104
     943  Pel  filSrcU = 0, filSrcV = 0;
     944  Pel* tmpTarU = 0, *tmpTarV = 0;
     945  tmpTarU = (Pel *)xMalloc(Pel, uiWidthC*uiHeightC);
     946  tmpTarV = (Pel *)xMalloc(Pel, uiWidthC*uiHeightC);
     947#endif
    881948  pMask = pMaskStart;
    882949 
     
    889956     
    890957      // filtering
     958#if SEC_DBBP_FILTERING_H0104
     959      tmpTarU[y*uiWidthC+x] = piSrcU[ucSegment][x];
     960      tmpTarV[y*uiWidthC+x] = piSrcV[ucSegment][x];
     961#else
    891962      Bool t = (y==0)?pMaskStart[(y+1)*2*uiMaskStride+x*2]:pMaskStart[(y-1)*2*uiMaskStride+x*2];
    892963      Bool l = (x==0)?pMaskStart[y*2*uiMaskStride+(x+1)*2]:pMaskStart[y*2*uiMaskStride+(x-1)*2];
     
    898969      piDstU[x] = bBlend?((piSrcU[0][x]+piSrcU[1][x]+1)>>1):piSrcU[ucSegment][x];
    899970      piDstV[x] = bBlend?((piSrcV[0][x]+piSrcV[1][x]+1)>>1):piSrcV[ucSegment][x];
     971#endif
    900972    }
    901973   
     
    904976    piSrcV[0]   += uiSrcStrideC;
    905977    piSrcV[1]   += uiSrcStrideC;
     978#if !SEC_DBBP_FILTERING_H0104
    906979    piDstU      += uiDstStrideC;
    907980    piDstV      += uiDstStrideC;
     981#endif
    908982    pMask       += 2*uiMaskStride;
    909983  }
     984
     985#if SEC_DBBP_FILTERING_H0104
     986  for (Int y=0; y<uiHeightC; y++)
     987  {
     988    for (Int x=0; x<uiWidthC; x++)
     989    {
     990      Bool t = (y==0)?pMaskStart[y*2*uiMaskStride+x*2]:pMaskStart[(y-1)*2*uiMaskStride+x*2];
     991      Bool l = (x==0)?pMaskStart[y*2*uiMaskStride+x*2]:pMaskStart[y*2*uiMaskStride+(x-1)*2];
     992      Bool b = (y==uiHeightC-1)?pMaskStart[y*2*uiMaskStride+x*2]:pMaskStart[(y+1)*2*uiMaskStride+x*2];
     993      Bool r = (x==uiWidthC-1)?pMaskStart[y*2*uiMaskStride+x*2]:pMaskStart[y*2*uiMaskStride+(x+1)*2];
     994      Bool c =pMaskStart[y*2*uiMaskStride+x*2];
     995
     996      Pel leftU, rightU, topU, bottomU;
     997      leftU   = (x==0)           ? tmpTarU[y*uiWidthC+x] : tmpTarU[y*uiWidthC+x-1];
     998      rightU  = (x==uiWidthC-1)  ? tmpTarU[y*uiWidthC+x] : tmpTarU[y*uiWidthC+x+1];
     999      topU    = (y==0)           ? tmpTarU[y*uiWidthC+x] : tmpTarU[(y-1)*uiWidthC+x];
     1000      bottomU = (y==uiHeightC-1) ? tmpTarU[y*uiWidthC+x] : tmpTarU[(y+1)*uiWidthC+x];
     1001
     1002      Pel leftV, rightV, topV, bottomV;
     1003      leftV   = (x==0)           ? tmpTarV[y*uiWidthC+x] : tmpTarV[y*uiWidthC+x-1];
     1004      rightV  = (x==uiWidthC-1)  ? tmpTarV[y*uiWidthC+x] : tmpTarV[y*uiWidthC+x+1];
     1005      topV    = (y==0)           ? tmpTarV[y*uiWidthC+x] : tmpTarV[(y-1)*uiWidthC+x];
     1006      bottomV = (y==uiHeightC-1) ? tmpTarV[y*uiWidthC+x] : tmpTarV[(y+1)*uiWidthC+x];
     1007
     1008      if(!((l&&r&&c) || (!l&&!r&&!c)))
     1009      {
     1010        filSrcU = Clip3( Pel( 0 ), Pel( 255 ), Pel(( leftU + (tmpTarU[y*uiWidthC+x] << 1) + rightU ) >> 2 ));
     1011        filSrcV = Clip3( Pel( 0 ), Pel( 255 ), Pel(( leftV + (tmpTarV[y*uiWidthC+x] << 1) + rightV ) >> 2 ));
     1012      }
     1013      else
     1014      {
     1015        filSrcU = tmpTarU[y*uiWidthC+x];
     1016        filSrcV = tmpTarV[y*uiWidthC+x];
     1017      }
     1018
     1019      if(!((t&&b&&c) || (!t&&!b&&!c)))
     1020      {
     1021        filSrcU = Clip3( Pel( 0 ), Pel( 255 ), Pel(( topU + (filSrcU << 1) + bottomU ) >> 2 ));
     1022        filSrcV = Clip3( Pel( 0 ), Pel( 255 ), Pel(( topV + (filSrcV << 1) + bottomV ) >> 2 ));
     1023      }
     1024
     1025      piDstU[x] = filSrcU;
     1026      piDstV[x] = filSrcV;
     1027    }
     1028    piDstU      += uiDstStrideC;
     1029    piDstV      += uiDstStrideC;
     1030  }
     1031  if ( tmpTarU    ) { xFree(tmpTarU);             tmpTarU        = NULL; }
     1032  if ( tmpTarV    ) { xFree(tmpTarV);             tmpTarV        = NULL; }
     1033#endif
    9101034}
    9111035#endif
Note: See TracChangeset for help on using the changeset viewer.