Ignore:
Timestamp:
26 Jan 2014, 15:40:44 (10 years ago)
Author:
hisilicon-htm
Message:

Integration of JCT3V-G0111/JCT3V-G0123: Intra SDC split

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-9.3-dev3-Hisilicon/source/Lib/TLibDecoder/TDecCu.cpp

    r792 r799  
    921921  UInt uiWidth        = pcCU->getWidth  ( 0 );
    922922  UInt uiHeight       = pcCU->getHeight ( 0 );
    923  
     923#if QC_PKU_SDC_SPLIT_G0123
     924#if QC_GENERIC_SDC_G0122
     925  TComWedgelet* dmm4Segmentation = new TComWedgelet( uiWidth, uiHeight );
     926#endif
     927#endif
     928#if QC_PKU_SDC_SPLIT_G0123
     929  UInt numParts = 1;
     930  UInt i = 0;
     931  UInt sdcDepth    = 0;
     932  TComYuv* pcRecoYuv  = m_ppcYuvReco[uiDepth];
     933  TComYuv* pcPredYuv  = m_ppcYuvReco[uiDepth];
     934  TComYuv* pcResiYuv  = m_ppcYuvResi[uiDepth];
     935
     936  UInt    uiStride = 0;
     937  Pel*    piReco;
     938  Pel*    piPred;
     939  Pel*    piResi;
     940
     941  UInt    uiZOrder;       
     942  Pel*    piRecIPred;     
     943  UInt    uiRecIPredStride;
     944
     945  UInt    uiLumaPredMode = 0; 
     946
     947#if HS_TSINGHUA_SDC_SPLIT_G0111
     948  if ((uiWidth >> pcCU->getSlice()->getSPS()->getQuadtreeTULog2MaxSize()) > 1)
     949  {
     950    numParts = uiWidth * uiWidth >> (2 * pcCU->getSlice()->getSPS()->getQuadtreeTULog2MaxSize());
     951    sdcDepth = g_aucConvertToBit[uiWidth] + 2 - pcCU->getSlice()->getSPS()->getQuadtreeTULog2MaxSize();
     952    uiWidth = uiHeight = (1 << pcCU->getSlice()->getSPS()->getQuadtreeTULog2MaxSize());
     953  }
     954#else
     955  if (uiWidth == 64)
     956  {
     957    numParts = 4;
     958    sdcDepth = 1;
     959    uiWidth = uiHeight = 32;
     960  }
     961#endif
     962
     963  for ( i = 0; i < numParts; i++ )
     964  {
     965    uiStride    = pcRecoYuv->getStride  ();
     966    piReco      = pcRecoYuv->getLumaAddr( uiAbsPartIdx );
     967    piPred      = pcPredYuv->getLumaAddr( uiAbsPartIdx );
     968    piResi      = pcResiYuv->getLumaAddr( uiAbsPartIdx );
     969
     970    uiZOrder          = pcCU->getZorderIdxInCU() + uiAbsPartIdx;
     971    piRecIPred        = pcCU->getPic()->getPicYuvRec()->getLumaAddr( pcCU->getAddr(), uiZOrder );
     972    uiRecIPredStride  = pcCU->getPic()->getPicYuvRec()->getStride  ();
     973
     974    uiLumaPredMode    = pcCU->getLumaIntraDir     ( uiAbsPartIdx );
     975
     976    AOF( uiWidth == uiHeight );
     977#else
    924978  TComYuv* pcRecoYuv  = m_ppcYuvReco[uiDepth];
    925979  TComYuv* pcPredYuv  = m_ppcYuvReco[uiDepth];
     
    936990 
    937991  UInt    uiLumaPredMode    = pcCU->getLumaIntraDir     ( uiAbsPartIdx );
    938  
     992
    939993  AOF( uiWidth == uiHeight );
    940994  AOF( uiAbsPartIdx == 0 );
    941995  AOF( pcCU->getSDCAvailable(uiAbsPartIdx) );
    942996  AOF( pcCU->getSDCFlag(uiAbsPartIdx) );
     997#endif
    943998 
    944999  //===== init availability pattern =====
    9451000  Bool  bAboveAvail = false;
    9461001  Bool  bLeftAvail  = false;
     1002#if QC_PKU_SDC_SPLIT_G0123
     1003  pcCU->getPattern()->initPattern   ( pcCU, sdcDepth, uiAbsPartIdx );
     1004  pcCU->getPattern()->initAdiPattern( pcCU, uiAbsPartIdx, sdcDepth, m_pcPrediction->getPredicBuf(), m_pcPrediction->getPredicBufWidth(), m_pcPrediction->getPredicBufHeight(), bAboveAvail, bLeftAvail );
     1005#else
    9471006  pcCU->getPattern()->initPattern   ( pcCU, 0, uiAbsPartIdx );
    9481007  pcCU->getPattern()->initAdiPattern( pcCU, uiAbsPartIdx, 0, m_pcPrediction->getPredicBuf(), m_pcPrediction->getPredicBufWidth(), m_pcPrediction->getPredicBufHeight(), bAboveAvail, bLeftAvail );
     1008#endif
     1009#if !QC_PKU_SDC_SPLIT_G0123
    9491010#if QC_GENERIC_SDC_G0122
    9501011  TComWedgelet* dmm4Segmentation = new TComWedgelet( uiWidth, uiHeight );
     1012#endif
    9511013#endif
    9521014  //===== get prediction signal =====
     
    9671029  }
    9681030#endif
    969  
     1031#if QC_PKU_SDC_SPLIT_G0123
     1032    if ( numParts > 1 )
     1033    {
     1034      for( UInt uiY = 0; uiY < uiHeight; uiY++ )
     1035      {
     1036        for( UInt uiX = 0; uiX < uiWidth; uiX++ )
     1037        {
     1038          piReco        [ uiX ] = ClipY( piPred[ uiX ] );
     1039          piRecIPred    [ uiX ] = piReco[ uiX ];
     1040        }
     1041        piPred     += uiStride;
     1042        piReco     += uiStride;
     1043        piRecIPred += uiRecIPredStride;
     1044      }
     1045    }
     1046    uiAbsPartIdx += ( (uiWidth * uiWidth) >> 4 );
     1047  }
     1048  uiAbsPartIdx = 0;
     1049
     1050  if ( numParts > 1 )
     1051  {
     1052    uiWidth = pcCU->getWidth( 0 );
     1053    uiHeight = pcCU->getHeight( 0 );
     1054  }
     1055  piReco      = pcRecoYuv->getLumaAddr( uiAbsPartIdx );
     1056  piPred      = pcPredYuv->getLumaAddr( uiAbsPartIdx );
     1057  piResi      = pcResiYuv->getLumaAddr( uiAbsPartIdx );
     1058  uiZOrder          = pcCU->getZorderIdxInCU() + uiAbsPartIdx;
     1059  piRecIPred        = pcCU->getPic()->getPicYuvRec()->getLumaAddr( pcCU->getAddr(), uiZOrder );
     1060  uiRecIPredStride  = pcCU->getPic()->getPicYuvRec()->getStride  ();
     1061#endif
    9701062  // number of segments depends on prediction mode
    9711063  UInt uiNumSegments = 1;
Note: See TracChangeset for help on using the changeset viewer.