Changeset 950 in 3DVCSoftware for trunk/source/Lib/TLibCommon/TComPrediction.cpp


Ignore:
Timestamp:
25 Apr 2014, 12:38:00 (10 years ago)
Author:
tech
Message:

Merged 10.2-dev0@949.

File:
1 edited

Legend:

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

    r884 r950  
    500500  Pel* pDst = piPred;
    501501  xAssignBiSegDCs( pDst, uiStride, biSegPattern, patternStride, segDC1, segDC2 );
     502#if HS_DMM_SDC_PREDICTOR_UNIFY_H0108
     503  pcCU->setDmmPredictor(segDC1, 0);
     504  pcCU->setDmmPredictor(segDC2, 1);
     505#endif
    502506
    503507#if H_3D_DIM_DMM
     
    519523      Int RefPOCL0 = pcCU->getSlice()->getRefPic(REF_PIC_LIST_0, pcCU->getCUMvField(REF_PIC_LIST_0)->getRefIdx(PartAddr))->getPOC();
    520524      Int RefPOCL1 = pcCU->getSlice()->getRefPic(REF_PIC_LIST_1, pcCU->getCUMvField(REF_PIC_LIST_1)->getRefIdx(PartAddr))->getPOC();
     525#if MTK_ALIGN_SW_WD_BI_PRED_ARP_H0085
     526      if(!pcCU->getARPW(PartAddr) && RefPOCL0 == RefPOCL1 && pcCU->getCUMvField(REF_PIC_LIST_0)->getMv(PartAddr) == pcCU->getCUMvField(REF_PIC_LIST_1)->getMv(PartAddr))
     527#else
    521528      if(RefPOCL0 == RefPOCL1 && pcCU->getCUMvField(REF_PIC_LIST_0)->getMv(PartAddr) == pcCU->getCUMvField(REF_PIC_LIST_1)->getMv(PartAddr))
     529#endif
    522530      {
    523531        return true;
     
    639647 
    640648  // start mapping process
     649#if !MTK_DBBP_AMP_REM_H0072
    641650  Bool bAMPAvail = uiSize > 8;
    642651  Int matchedPartSum[6][2] = {{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}}; // counter for each part size and boolean option
    643652  PartSize virtualPartSizes[6] = { SIZE_Nx2N, SIZE_2NxN, SIZE_2NxnU, SIZE_2NxnD, SIZE_nLx2N, SIZE_nRx2N };
     653#else
     654  Int matchedPartSum[2][2] = {{0,0},{0,0}}; // counter for each part size and boolean option
     655  PartSize virtualPartSizes[2] = { SIZE_Nx2N, SIZE_2NxN};
     656#endif
    644657 
    645658  UInt uiHalfSize = uiSize>>1;
     659#if !MTK_DBBP_AMP_REM_H0072
    646660  UInt uiQuarterSize = uiSize>>2;
     661#endif
    647662 
    648663  for (Int y=0; y<uiSize; y+=iSubSample)
     
    677692      }
    678693     
     694#if !MTK_DBBP_AMP_REM_H0072
    679695      if( bAMPAvail )
    680696      {
     
    719735        }
    720736      }
     737#endif
    721738    }
    722739   
     
    728745 
    729746  Int iMaxMatchSum = 0;
    730   for(Int p=0; p<6; p++)  // loop over partition sizes
     747#if !MTK_DBBP_AMP_REM_H0072
     748  for(Int p=0; p<6; p++)  // loop over partition
     749#else
     750  for(Int p=0; p<2; p++)  // loop over partition
     751#endif
    731752  {
    732753    for( Int b=0; b<=1; b++ ) // loop over boolean options
     
    838859 
    839860  UInt  uiMaskStride= MAX_CU_SIZE;
     861#if SEC_DBBP_FILTERING_H0104
     862  Pel  filSrc = 0;
     863  Pel* tmpTar = 0;
     864  tmpTar = (Pel *)xMalloc(Pel, uiWidth*uiHeight);
     865#endif
    840866 
    841867  // backup pointer
     
    851877     
    852878      // filtering
     879#if SEC_DBBP_FILTERING_H0104
     880      tmpTar[y*uiWidth+x] = piSrc[ucSegment][x];
     881#else
    853882      Bool t = (y==0)?pMaskStart[(y+1)*uiMaskStride+x]:pMaskStart[(y-1)*uiMaskStride+x];
    854883      Bool l = (x==0)?pMaskStart[y*uiMaskStride+x+1]:pMaskStart[y*uiMaskStride+x-1];
     
    858887      Bool bBlend = !((t&&l&&b&&r) || (!t&&!l&&!b&&!r));
    859888      piDst[x] = bBlend?((piSrc[0][x]+piSrc[1][x]+1)>>1):piSrc[ucSegment][x];
     889#endif
    860890    }
    861891   
    862892    piSrc[0]  += uiSrcStride;
    863893    piSrc[1]  += uiSrcStride;
     894#if !SEC_DBBP_FILTERING_H0104
    864895    piDst     += uiDstStride;
     896#endif
    865897    pMask     += uiMaskStride;
    866898  }
     899 
     900#if SEC_DBBP_FILTERING_H0104
     901  for (Int y=0; y<uiHeight; y++)
     902  {
     903    for (Int x=0; x<uiWidth; x++)
     904    {
     905      Bool t = (y==0)?pMaskStart[y*uiMaskStride+x]:pMaskStart[(y-1)*uiMaskStride+x];
     906      Bool l = (x==0)?pMaskStart[y*uiMaskStride+x]:pMaskStart[y*uiMaskStride+x-1];
     907      Bool b = (y==uiHeight-1)?pMaskStart[y*uiMaskStride+x]:pMaskStart[(y+1)*uiMaskStride+x];
     908      Bool r = (x==uiWidth-1)?pMaskStart[y*uiMaskStride+x]:pMaskStart[y*uiMaskStride+x+1];
     909      Bool c =pMaskStart[y*uiMaskStride+x];
     910
     911      Pel left, right, top, bottom;
     912      left   = (x==0)          ? tmpTar[y*uiWidth+x] : tmpTar[y*uiWidth+x-1];
     913      right  = (x==uiWidth-1)  ? tmpTar[y*uiWidth+x] : tmpTar[y*uiWidth+x+1];
     914      top    = (y==0)          ? tmpTar[y*uiWidth+x] : tmpTar[(y-1)*uiWidth+x];
     915      bottom = (y==uiHeight-1) ? tmpTar[y*uiWidth+x] : tmpTar[(y+1)*uiWidth+x];
     916
     917      if(!((l&&r&&c) || (!l&&!r&&!c)))
     918      {
     919        filSrc = Clip3( Pel( 0 ), Pel( 255 ), Pel(( left + (tmpTar[y*uiWidth+x] << 1) + right ) >> 2 ));
     920      }
     921      else
     922      {
     923        filSrc = tmpTar[y*uiWidth+x];
     924      }
     925
     926      if(!((t&&b&&c) || (!t&&!b&&!c)))
     927      {
     928        filSrc = Clip3( Pel( 0 ), Pel( 255 ), Pel(( top + (filSrc << 1) + bottom ) >> 2 ));
     929      }
     930      piDst[x] = filSrc;
     931    }
     932    piDst     += uiDstStride;
     933  }
     934  if ( tmpTar    ) { xFree(tmpTar);             tmpTar        = NULL; }
     935#endif
    867936 
    868937  // now combine chroma
     
    875944  UInt  uiWidthC        = uiWidth >> 1;
    876945  UInt  uiHeightC       = uiHeight >> 1;
     946#if SEC_DBBP_FILTERING_H0104
     947  Pel  filSrcU = 0, filSrcV = 0;
     948  Pel* tmpTarU = 0, *tmpTarV = 0;
     949  tmpTarU = (Pel *)xMalloc(Pel, uiWidthC*uiHeightC);
     950  tmpTarV = (Pel *)xMalloc(Pel, uiWidthC*uiHeightC);
     951#endif
    877952  pMask = pMaskStart;
    878953 
     
    885960     
    886961      // filtering
     962#if SEC_DBBP_FILTERING_H0104
     963      tmpTarU[y*uiWidthC+x] = piSrcU[ucSegment][x];
     964      tmpTarV[y*uiWidthC+x] = piSrcV[ucSegment][x];
     965#else
    887966      Bool t = (y==0)?pMaskStart[(y+1)*2*uiMaskStride+x*2]:pMaskStart[(y-1)*2*uiMaskStride+x*2];
    888967      Bool l = (x==0)?pMaskStart[y*2*uiMaskStride+(x+1)*2]:pMaskStart[y*2*uiMaskStride+(x-1)*2];
     
    894973      piDstU[x] = bBlend?((piSrcU[0][x]+piSrcU[1][x]+1)>>1):piSrcU[ucSegment][x];
    895974      piDstV[x] = bBlend?((piSrcV[0][x]+piSrcV[1][x]+1)>>1):piSrcV[ucSegment][x];
     975#endif
    896976    }
    897977   
     
    900980    piSrcV[0]   += uiSrcStrideC;
    901981    piSrcV[1]   += uiSrcStrideC;
     982#if !SEC_DBBP_FILTERING_H0104
    902983    piDstU      += uiDstStrideC;
    903984    piDstV      += uiDstStrideC;
     985#endif
    904986    pMask       += 2*uiMaskStride;
    905987  }
     988
     989#if SEC_DBBP_FILTERING_H0104
     990  for (Int y=0; y<uiHeightC; y++)
     991  {
     992    for (Int x=0; x<uiWidthC; x++)
     993    {
     994      Bool t = (y==0)?pMaskStart[y*2*uiMaskStride+x*2]:pMaskStart[(y-1)*2*uiMaskStride+x*2];
     995      Bool l = (x==0)?pMaskStart[y*2*uiMaskStride+x*2]:pMaskStart[y*2*uiMaskStride+(x-1)*2];
     996      Bool b = (y==uiHeightC-1)?pMaskStart[y*2*uiMaskStride+x*2]:pMaskStart[(y+1)*2*uiMaskStride+x*2];
     997      Bool r = (x==uiWidthC-1)?pMaskStart[y*2*uiMaskStride+x*2]:pMaskStart[y*2*uiMaskStride+(x+1)*2];
     998      Bool c =pMaskStart[y*2*uiMaskStride+x*2];
     999
     1000      Pel leftU, rightU, topU, bottomU;
     1001      leftU   = (x==0)           ? tmpTarU[y*uiWidthC+x] : tmpTarU[y*uiWidthC+x-1];
     1002      rightU  = (x==uiWidthC-1)  ? tmpTarU[y*uiWidthC+x] : tmpTarU[y*uiWidthC+x+1];
     1003      topU    = (y==0)           ? tmpTarU[y*uiWidthC+x] : tmpTarU[(y-1)*uiWidthC+x];
     1004      bottomU = (y==uiHeightC-1) ? tmpTarU[y*uiWidthC+x] : tmpTarU[(y+1)*uiWidthC+x];
     1005
     1006      Pel leftV, rightV, topV, bottomV;
     1007      leftV   = (x==0)           ? tmpTarV[y*uiWidthC+x] : tmpTarV[y*uiWidthC+x-1];
     1008      rightV  = (x==uiWidthC-1)  ? tmpTarV[y*uiWidthC+x] : tmpTarV[y*uiWidthC+x+1];
     1009      topV    = (y==0)           ? tmpTarV[y*uiWidthC+x] : tmpTarV[(y-1)*uiWidthC+x];
     1010      bottomV = (y==uiHeightC-1) ? tmpTarV[y*uiWidthC+x] : tmpTarV[(y+1)*uiWidthC+x];
     1011
     1012      if(!((l&&r&&c) || (!l&&!r&&!c)))
     1013      {
     1014        filSrcU = Clip3( Pel( 0 ), Pel( 255 ), Pel(( leftU + (tmpTarU[y*uiWidthC+x] << 1) + rightU ) >> 2 ));
     1015        filSrcV = Clip3( Pel( 0 ), Pel( 255 ), Pel(( leftV + (tmpTarV[y*uiWidthC+x] << 1) + rightV ) >> 2 ));
     1016      }
     1017      else
     1018      {
     1019        filSrcU = tmpTarU[y*uiWidthC+x];
     1020        filSrcV = tmpTarV[y*uiWidthC+x];
     1021      }
     1022
     1023      if(!((t&&b&&c) || (!t&&!b&&!c)))
     1024      {
     1025        filSrcU = Clip3( Pel( 0 ), Pel( 255 ), Pel(( topU + (filSrcU << 1) + bottomU ) >> 2 ));
     1026        filSrcV = Clip3( Pel( 0 ), Pel( 255 ), Pel(( topV + (filSrcV << 1) + bottomV ) >> 2 ));
     1027      }
     1028
     1029      piDstU[x] = filSrcU;
     1030      piDstV[x] = filSrcV;
     1031    }
     1032    piDstU      += uiDstStrideC;
     1033    piDstV      += uiDstStrideC;
     1034  }
     1035  if ( tmpTarU    ) { xFree(tmpTarU);             tmpTarU        = NULL; }
     1036  if ( tmpTarV    ) { xFree(tmpTarV);             tmpTarV        = NULL; }
     1037#endif
    9061038}
    9071039#endif
     
    12861418
    12871419    assert ( cDistparity.bDV );
    1288 
     1420   
     1421#if NTT_BUG_FIX_TK54
     1422    TComMv cNBDV = cDistparity.m_acNBDV;
     1423    pcCU->clipMv( cNBDV );
     1424   
     1425    pcPicYuvRef = pcPicYuvBaseCol->getPicYuvRec();
     1426    xPredInterLumaBlk  ( pcCU, pcPicYuvRef, uiPartAddr, &cNBDV, iWidth, iHeight, pYuvB0, bi, true );
     1427    xPredInterChromaBlk( pcCU, pcPicYuvRef, uiPartAddr, &cNBDV, iWidth, iHeight, pYuvB0, bi, true );
     1428#else
    12891429    pcPicYuvRef = pcPicYuvBaseCol->getPicYuvRec();
    12901430    xPredInterLumaBlk  ( pcCU, pcPicYuvRef, uiPartAddr, &cDistparity.m_acNBDV, iWidth, iHeight, pYuvB0, bi, true );
    12911431    xPredInterChromaBlk( pcCU, pcPicYuvRef, uiPartAddr, &cDistparity.m_acNBDV, iWidth, iHeight, pYuvB0, bi, true );
     1432#endif
    12921433   
    12931434    pcPicYuvRef = pcPicYuvBaseRef->getPicYuvRec();
     
    21872328  if (orgDC == false)
    21882329  {
     2330#if !HS_DMM_SDC_PREDICTOR_UNIFY_H0108
    21892331    if ( getDimType(uiIntraMode) == DMM1_IDX )
    21902332    {
     
    22322374    }
    22332375    else
     2376#endif
    22342377    {
    22352378      Pel* pLeftTop = pOrig;
Note: See TracChangeset for help on using the changeset viewer.