Changeset 433 in 3DVCSoftware


Ignore:
Timestamp:
22 May 2013, 21:05:43 (11 years ago)
Author:
tech
Message:

Merged HTM-6.2-dev3-RWTH-Fix Rev. 415

Location:
branches/HTM-6.2-dev0/source/Lib
Files:
21 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-6.2-dev0/source/Lib/TLibCommon/ContextTables.h

    r427 r433  
    133133
    134134#if RWTH_SDC_DLT_B0036
     135#if PKU_QC_DEPTH_INTRA_UNI_D0195
     136#define DEPTH_MODE_NUM_FLAG_CTX          8
     137#define DMM_DELTA_NUM_FLAG_CTX           1
     138#else
    135139#define SDC_NUM_FLAG_CTX                 3
     140#endif
    136141#define SDC_NUM_RESIDUAL_FLAG_CTX        1
     142#if !RWTH_SDC_CTX_SIMPL_D0032
    137143#define SDC_NUM_SIGN_FLAG_CTX            1
     144#endif
     145#if LGE_CONCATENATE_D0141
     146#define SDC_NUM_RESIDUAL_CTX             1
     147#else
     148#if RWTH_SDC_CTX_SIMPL_D0032
     149#define SDC_NUM_RESIDUAL_CTX             8
     150#else
    138151#define SDC_NUM_RESIDUAL_CTX             10
     152#endif
     153#endif
    139154
    140155#define SDC_NUM_PRED_MODE_CTX            5
     
    555570
    556571#if RWTH_SDC_DLT_B0036
     572#if PKU_QC_DEPTH_INTRA_UNI_D0195
     573static const UChar INIT_DEPTHMODE_FLAG[3][DEPTH_MODE_NUM_FLAG_CTX]=
     574{
     575  {0,  0,  64,   0, CNU,   0, CNU, 0},
     576  {0, 64,   0, CNU,   0, CNU,   0, 0},
     577  {64, 0, CNU,   0, CNU,   0,   0, 0}
     578};
     579static const UChar INIT_DMMDELTA_FLAG[3][DMM_DELTA_NUM_FLAG_CTX]=
     580{
     581  {0},
     582  {0},
     583  {64}
     584};
     585#else
    557586static const Short INIT_SDC_FLAG[3][SDC_NUM_FLAG_CTX][2] =
    558587{
     
    567596  }
    568597};
    569 
     598#endif
     599
     600#if RWTH_SDC_CTX_SIMPL_D0032
     601static const UChar INIT_SDC_RESIDUAL_FLAG[3][SDC_NUM_RESIDUAL_FLAG_CTX] =
     602{
     603  {
     604    CNU
     605   
     606  },
     607  {
     608    CNU
     609  },
     610  {
     611    CNU
     612  }
     613};
     614   
     615#if LGE_CONCATENATE_D0141
     616static const UChar INIT_SDC_RESIDUAL[3][SDC_NUM_RESIDUAL_CTX] =
     617{
     618    {
     619         155
     620    },
     621    {
     622         155
     623    },
     624    {
     625        155
     626    }
     627};
     628#else
     629static const UChar INIT_SDC_RESIDUAL[3][SDC_NUM_RESIDUAL_CTX] =
     630{
     631  {
     632    CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU
     633  },
     634  {
     635    CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU
     636  },
     637  {
     638    CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU
     639  }
     640};
     641#endif
     642
     643static const UChar INIT_SDC_PRED_MODE[3][3*SDC_NUM_PRED_MODE_CTX] =
     644{
     645  {
     646    CNU,    CNU
     647    ,CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU
     648  },
     649  {
     650    CNU,    CNU
     651    ,CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU
     652  },
     653  {
     654    CNU,    CNU
     655    ,CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU
     656  }
     657};
     658#else
    570659static const Short INIT_SDC_RESIDUAL_FLAG[3][3*SDC_NUM_RESIDUAL_FLAG_CTX][2] =
    571660{
     
    645734};
    646735#endif
     736#endif
    647737
    648738//! \}
  • branches/HTM-6.2-dev0/source/Lib/TLibCommon/TComDataCU.cpp

    r427 r433  
    31963196}
    31973197
     3198#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    31983199UInt TComDataCU::getCtxSDCFlag( UInt uiAbsPartIdx )
    31993200{
     
    32123213  return uiCtx;
    32133214}
     3215#endif
    32143216
    32153217Bool TComDataCU::getSDCAvailable( UInt uiAbsPartIdx )
  • branches/HTM-6.2-dev0/source/Lib/TLibCommon/TComDataCU.h

    r427 r433  
    886886  Void          setSDCFlagSubParts  ( Bool bSDCFlag, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth );
    887887 
     888#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    888889  UInt          getCtxSDCFlag              ( UInt uiAbsPartIdx );
     890#endif
    889891 
    890892  Bool          getSDCAvailable             ( UInt uiAbsPartIdx );
  • branches/HTM-6.2-dev0/source/Lib/TLibCommon/TComPrediction.cpp

    r427 r433  
    5050#endif
    5151
     52#if HHI_DELTADC_DLT_D0035
     53#define GetDepthValue2Idx(val)     (pcCU->getSlice()->getSPS()->depthValue2idx(val))
     54#define GetIdx2DepthValue(val)     (pcCU->getSlice()->getSPS()->idx2DepthValue(val))
     55#endif
     56
    5257#if MERL_General_Fix
    5358#if MERL_VSP_C0152
     
    555560  // Do prediction
    556561  {
     562#if QC_DC_PREDICTOR_D0183
     563    Int iMean0, iMean1;
     564    getPredDCs( pbRegion, iWidth, pSrc+srcStride+1, srcStride, iMean0, iMean1 );
     565#else
    557566    //UInt uiSum0 = 0, uiSum1 = 0;
    558567    Int iSum0 = 0, iSum1 = 0;
     
    593602    iMean0 = iSum0 / iCount0; // TODO : integer op.
    594603    iMean1 = iSum1 / iCount1;
     604#endif
    595605#if LGE_EDGE_INTRA_DELTA_DC
    596606    if( bDelta )
     
    31633173}
    31643174
     3175#if QC_DC_PREDICTOR_D0183
     3176Void TComPrediction::getPredDCs( Bool* pbPattern, Int iStride, Int* piMask, Int iMaskStride, Int& riPredDC1, Int& riPredDC2 )
     3177{
     3178  Int  iDC1, iDC2;
     3179  const Int  iTR = (   iStride - 1        ) - iMaskStride;
     3180  const Int  iTM = ( ( iStride - 1 ) >> 1 ) - iMaskStride;
     3181  const Int  iLB = (   iStride - 1        ) * iMaskStride - 1;
     3182  const Int  iLM = ( ( iStride - 1 ) >> 1 ) * iMaskStride - 1;
     3183  const UInt uiBitDepth = g_uiBitDepth + g_uiBitIncrement;
     3184
     3185  Bool bL = ( pbPattern[0] != pbPattern[(iStride-1)*iStride] );
     3186  Bool bT = ( pbPattern[0] != pbPattern[(iStride-1)]         );
     3187
     3188  if( bL == bT )
     3189  {
     3190    iDC1 = bL ? ( piMask[iTR] + piMask[iLB] )>>1 : 1<<( uiBitDepth - 1 );
     3191    iDC2 =      ( piMask[ -1] + piMask[-iMaskStride] )>>1;
     3192  }
     3193  else
     3194  {
     3195    iDC1 = bL ? piMask[iLB] : piMask[iTR];
     3196    iDC2 = bL ? piMask[iTM] : piMask[iLM];
     3197  }
     3198
     3199  riPredDC1 = pbPattern[0] ? iDC1 : iDC2;
     3200  riPredDC2 = pbPattern[0] ? iDC2 : iDC1;
     3201}
     3202#else
    31653203Void TComPrediction::getWedgePredDCs( TComWedgelet* pcWedgelet, Int* piMask, Int iMaskStride, Int& riPredDC1, Int& riPredDC2, Bool bAbove, Bool bLeft )
    31663204{
     
    32403278  }
    32413279}
     3280#endif
    32423281
    32433282Void TComPrediction::calcWedgeDCs( TComWedgelet* pcWedgelet, Pel* piOrig, UInt uiStride, Int& riDC1, Int& riDC2 )
     
    36073646  Int iMaskStride = ( iWidth<<1 ) + 1;
    36083647  piMask += iMaskStride+1;
     3648#if QC_DC_PREDICTOR_D0183
     3649  getPredDCs( pcWedgelet->getPattern(), pcWedgelet->getStride(), piMask, iMaskStride, iPredDC1, iPredDC2 );
     3650#else
    36093651  getWedgePredDCs( pcWedgelet, piMask, iMaskStride, iPredDC1, iPredDC2, bAbove, bLeft );
     3652#endif
    36103653
    36113654  // assign wedge pred DCs to prediction
    3612   if( bDelta ) { assignWedgeDCs2Pred( pcWedgelet, piPred, uiStride, Clip ( iPredDC1+iDeltaDC1 ), Clip( iPredDC2+iDeltaDC2 ) ); }
    3613   else         { assignWedgeDCs2Pred( pcWedgelet, piPred, uiStride,        iPredDC1,                   iPredDC2           ); }
     3655  if( bDelta )
     3656  {
     3657#if HHI_DELTADC_DLT_D0035
     3658    assignWedgeDCs2Pred( pcWedgelet, piPred, uiStride, GetIdx2DepthValue( GetDepthValue2Idx(iPredDC1) + iDeltaDC1 ), GetIdx2DepthValue( GetDepthValue2Idx(iPredDC2) + iDeltaDC2 ) );
     3659#else
     3660    assignWedgeDCs2Pred( pcWedgelet, piPred, uiStride, Clip( iPredDC1+iDeltaDC1 ), Clip( iPredDC2+iDeltaDC2 ) );
     3661#endif
     3662  }
     3663  else
     3664  {
     3665    assignWedgeDCs2Pred( pcWedgelet, piPred, uiStride, iPredDC1, iPredDC2 );
     3666  }
    36143667}
    36153668
     
    36263679  Int iMaskStride = ( iWidth<<1 ) + 1;
    36273680  piMask += iMaskStride+1;
     3681#if QC_DC_PREDICTOR_D0183
     3682  getPredDCs( pcContourWedge->getPattern(), pcContourWedge->getStride(), piMask, iMaskStride, iPredDC1, iPredDC2 );
     3683#else
    36283684  getWedgePredDCs( pcContourWedge, piMask, iMaskStride, iPredDC1, iPredDC2, bAbove, bLeft );
     3685#endif
    36293686
    36303687  // assign wedge pred DCs to prediction
    3631   if( bDelta ) { assignWedgeDCs2Pred( pcContourWedge, piPred, uiStride, Clip ( iPredDC1+iDeltaDC1 ), Clip( iPredDC2+iDeltaDC2 ) ); }
    3632   else         { assignWedgeDCs2Pred( pcContourWedge, piPred, uiStride,        iPredDC1,                   iPredDC2           ); }
     3688  if( bDelta )
     3689  {
     3690#if HHI_DELTADC_DLT_D0035
     3691    assignWedgeDCs2Pred( pcContourWedge, piPred, uiStride, GetIdx2DepthValue( GetDepthValue2Idx(iPredDC1) + iDeltaDC1 ), GetIdx2DepthValue( GetDepthValue2Idx(iPredDC2) + iDeltaDC2 ) );
     3692#else
     3693    assignWedgeDCs2Pred( pcContourWedge, piPred, uiStride, Clip( iPredDC1+iDeltaDC1 ), Clip( iPredDC2+iDeltaDC2 ) );
     3694#endif
     3695  }
     3696  else
     3697  {
     3698    assignWedgeDCs2Pred( pcContourWedge, piPred, uiStride, iPredDC1, iPredDC2 );
     3699  }
    36333700
    36343701  pcContourWedge->destroy();
     
    38013868  Int iMaskStride = ( iWidth<<1 ) + 1;
    38023869  piMask += iMaskStride+1;
     3870#if QC_DC_PREDICTOR_D0183
     3871  getPredDCs( pcWedgelet->getPattern(), pcWedgelet->getStride(), piMask, iMaskStride, iPredDC1, iPredDC2 );
     3872#else
    38033873  getWedgePredDCs( pcWedgelet, piMask, iMaskStride, iPredDC1, iPredDC2, bAbove, bLeft );
     3874#endif
    38043875
    38053876  // assign wedge pred DCs to prediction
    3806   if( bDelta ) { assignWedgeDCs2Pred( pcWedgelet, piPred, uiStride, Clip( iPredDC1+iDeltaDC1 ), Clip( iPredDC2+iDeltaDC2 ) ); }
    3807   else         { assignWedgeDCs2Pred( pcWedgelet, piPred, uiStride, iPredDC1,           iPredDC2           ); }
     3877  if( bDelta )
     3878  {
     3879#if HHI_DELTADC_DLT_D0035
     3880    assignWedgeDCs2Pred( pcWedgelet, piPred, uiStride, GetIdx2DepthValue( GetDepthValue2Idx(iPredDC1) + iDeltaDC1 ), GetIdx2DepthValue( GetDepthValue2Idx(iPredDC2) + iDeltaDC2 ) );
     3881#else
     3882    assignWedgeDCs2Pred( pcWedgelet, piPred, uiStride, Clip( iPredDC1+iDeltaDC1 ), Clip( iPredDC2+iDeltaDC2 ) );
     3883#endif
     3884  }
     3885  else
     3886  {
     3887    assignWedgeDCs2Pred( pcWedgelet, piPred, uiStride, iPredDC1, iPredDC2 );
     3888  }
    38083889}
    38093890
     
    38363917  Int iMaskStride = ( iWidth<<1 ) + 1;
    38373918  piMask += iMaskStride+1;
     3919#if QC_DC_PREDICTOR_D0183
     3920  getPredDCs( pcWedgelet->getPattern(), pcWedgelet->getStride(), piMask, iMaskStride, iPredDC1, iPredDC2 );
     3921#else
    38383922  getWedgePredDCs( pcWedgelet, piMask, iMaskStride, iPredDC1, iPredDC2, bAbove, bLeft );
     3923#endif
    38393924
    38403925  // assign wedge pred DCs to prediction
    3841   if( bDelta ) { assignWedgeDCs2Pred( pcWedgelet, piPred, uiStride, Clip( iPredDC1+iDeltaDC1 ), Clip( iPredDC2+iDeltaDC2 ) ); }
    3842   else         { assignWedgeDCs2Pred( pcWedgelet, piPred, uiStride,       iPredDC1,                   iPredDC2             ); }
     3926  if( bDelta )
     3927  {
     3928#if HHI_DELTADC_DLT_D0035
     3929    assignWedgeDCs2Pred( pcWedgelet, piPred, uiStride, GetIdx2DepthValue( GetDepthValue2Idx(iPredDC1) + iDeltaDC1 ), GetIdx2DepthValue( GetDepthValue2Idx(iPredDC2) + iDeltaDC2 ) );
     3930#else
     3931    assignWedgeDCs2Pred( pcWedgelet, piPred, uiStride, Clip( iPredDC1+iDeltaDC1 ), Clip( iPredDC2+iDeltaDC2 ) );
     3932#endif
     3933  }
     3934  else
     3935  {
     3936    assignWedgeDCs2Pred( pcWedgelet, piPred, uiStride, iPredDC1, iPredDC2 );
     3937  }
    38433938}
    38443939
  • branches/HTM-6.2-dev0/source/Lib/TLibCommon/TComPrediction.h

    r422 r433  
    249249#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
    250250  Void  predIntraLumaDMM        ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiMode, Pel* piPred, UInt uiStride, Int iWidth, Int iHeight, Bool bAbove, Bool bLeft, Bool bEncoder );
    251 
    252251  Void  getWedgePredDCs         ( TComWedgelet* pcWedgelet, Int* piMask, Int iMaskStride, Int& riPredDC1, Int& riPredDC2, Bool bAbove, Bool bLeft );
     252#endif
    253253  Void  calcWedgeDCs            ( TComWedgelet* pcWedgelet, Pel* piOrig, UInt uiStride, Int& riDC1, Int& riDC2 );
    254254  Void  assignWedgeDCs2Pred     ( TComWedgelet* pcWedgelet, Pel* piPred,  UInt uiStride, Int   iDC1, Int   iDC2 );
  • branches/HTM-6.2-dev0/source/Lib/TLibCommon/TComWedgelet.cpp

    r296 r433  
    783783  Int deltax = x1 - x0;
    784784  Int deltay = abs(y1 - y0);
     785#if FIX_WEDGE_NOFLOAT_D0036
     786  Int error = 0;
     787  Int deltaerr = (deltay<<1);
     788#else
    785789  double error = 0.0;
    786790  double deltaerr = (double)deltay / (double)deltax;
     791#endif
    787792
    788793  Int ystep;
     
    797802
    798803    error += deltaerr;
     804#if FIX_WEDGE_NOFLOAT_D0036
     805    if( error >= deltax )
     806#else
    799807    if( error >= 0.5)
     808#endif   
    800809    {
    801810      y += ystep;
     811#if FIX_WEDGE_NOFLOAT_D0036
     812      error = error - (deltax<<1);
     813#else
    802814      error = error - 1.0;
     815#endif   
    803816    }
    804817  }
  • branches/HTM-6.2-dev0/source/Lib/TLibCommon/TypeDef.h

    r428 r433  
    5959                                              // HHI_DMM_DELTADC_Q1_C0034   JCT3V-C0034: no quantization and fast encoder search for DMM delta DC values
    6060                                              // FIX_DMM_CTX_INIT_C0034 JCT3V-C0034 fix for wrong init type of DMM contexts (UChar instead of Short)
     61#define FIX_WEDGE_NOFLOAT_D0036           1   // JCT3V-D0036: Fix for aligning SW and spec (Wedgelet segmentation line generation without float)
    6162
    6263#define LGE_EDGE_INTRA_A0070              1   // JCT3V-A0070
    6364#define LGE_DMM3_SIMP_C0044               1
     65
     66#define QC_DC_PREDICTOR_D0183             1   // JCT3V-D0183: Simplified DC predictor for depth intra modes
    6467
    6568///// ***** SDC *********
     
    6770                                              // SAIT_SDC_C0096 JCT3V-C0096: Improved Simple Depth Coding(removal of DMM2 among four SDC modes(DC, Planar, DMM1 and DMM2))
    6871                                              // FIX_SDC_ENC_C0143, JCT3V-C0143 fix for unnecessary encoder checks in case of SDC
    69 
     72#if RWTH_SDC_DLT_B0036
     73#define HHI_DELTADC_DLT_D0035             1   // JCT3V-D0035: DLT for DMM deltaDC coding
     74#define INTEL_SDC64_D0193                 1   // JCT3V-D0193: SDC binary clean up (use a 1 bit binary code to signal sdc_pred_mode when CU size is 64x64)
     75#define RWTH_SDC_CTX_SIMPL_D0032          1   // JCT3V-D0032: CABAC Context Reduction for Simplified Depth Coding
     76#define LGE_CONCATENATE_D0141                 1 // JCT3V-D0141: concatenate binarization for residual index coding
     77#endif
     78#define FIX_SDC_ENC_RD_WVSO_D0163         1   // JCT3V-D0163: fix for SDC encoder rd-cost (VSO -> WVSO)
     79
     80#define PKU_QC_DEPTH_INTRA_UNI_D0195      1   // JCT3V-D0195: unified syntax table for depth intra coding tools
     81#define MTK_SAMPLE_BASED_SDC_D0110        1   // JCT3V-D0110: sample based SDC
    7082///// ***** TMVP/AMVP *********
    7183#define TMVP_DEPTH_SWITCH                 1   // JCT3V-B0092 additional encoder option only
  • branches/HTM-6.2-dev0/source/Lib/TLibDecoder/TDecCAVLC.cpp

    r427 r433  
    24792479#endif
    24802480#if RWTH_SDC_DLT_B0036
     2481#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    24812482Void TDecCavlc::parseSDCFlag    ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth )
    24822483{
     
    24872488  assert(0);
    24882489}
     2490#endif
    24892491Void TDecCavlc::parseSDCResidualData     ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiPart )
    24902492{
  • branches/HTM-6.2-dev0/source/Lib/TLibDecoder/TDecCAVLC.h

    r427 r433  
    174174  Void parseDFSvlc         ( Int&  riVal,  const Char *pSymbolName  );
    175175#if RWTH_SDC_DLT_B0036
     176#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    176177  Void parseSDCFlag    ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
    177178  Void parseSDCPredMode    ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
     179#endif
    178180  Void parseSDCResidualData ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiPart );
    179181#endif
  • branches/HTM-6.2-dev0/source/Lib/TLibDecoder/TDecCu.cpp

    r427 r433  
    11641164      UChar ucSegment = pMask?(UChar)pMask[uiX]:0;
    11651165      assert( ucSegment < uiNumSegments );
     1166#if MTK_SAMPLE_BASED_SDC_D0110     
     1167      Pel pResiDC = apDCResiValues[ucSegment];
    11661168     
     1169      pReco    [ uiX ] = Clip( pPred[ uiX ] + pResiDC );
     1170#else
    11671171      Pel pPredVal= apDCPredValues[ucSegment];
    11681172      Pel pResiDC = apDCResiValues[ucSegment];
    11691173     
    11701174      pReco    [ uiX ] = Clip( pPredVal + pResiDC );
     1175#endif
    11711176      pRecIPred[ uiX ] = pReco[ uiX ];
    11721177    }
  • branches/HTM-6.2-dev0/source/Lib/TLibDecoder/TDecEntropy.cpp

    r427 r433  
    130130  m_pcEntropyDecoderIf->parsePredMode( pcCU, uiAbsPartIdx, uiDepth );
    131131 
     132#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    132133#if RWTH_SDC_DLT_B0036
    133134  // if B-Slice, code SDC flag later
     
    138139  }
    139140#endif
     141#endif
    140142}
    141143
    142144Void TDecEntropy::decodePartSize( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth )
    143145{
     146#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    144147#if RWTH_SDC_DLT_B0036
    145148  if( !pcCU->getSlice()->isInterB() && pcCU->isIntra(uiAbsPartIdx) && pcCU->getSDCFlag(uiAbsPartIdx)  )
     
    150153  }
    151154#endif
     155#endif
    152156 
    153157  m_pcEntropyDecoderIf->parsePartSize( pcCU, uiAbsPartIdx, uiDepth );
    154158 
     159#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    155160#if RWTH_SDC_DLT_B0036
    156161  if( pcCU->getSlice()->isInterB() && pcCU->getSlice()->getSPS()->isDepth() && pcCU->isIntra(uiAbsPartIdx) )
     
    167172  }
    168173#endif
     174#endif
    169175}
    170176
    171177Void TDecEntropy::decodePredInfo    ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, TComDataCU* pcSubCU )
    172178{
     179#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    173180#if RWTH_SDC_DLT_B0036
    174181  if( pcCU->getSDCFlag(uiAbsPartIdx) )
     
    177184    return;
    178185  }
     186#endif
    179187#endif
    180188 
     
    191199      decodeIntraDirModeLuma( pcCU, uiAbsPartIdx + uiPartOffset*2, uiDepth+1 );
    192200      decodeIntraDirModeLuma( pcCU, uiAbsPartIdx + uiPartOffset*3, uiDepth+1 );
     201#if PKU_QC_DEPTH_INTRA_UNI_D0195
     202      if(!pcCU->getSDCFlag(uiAbsPartIdx))
     203#endif
    193204      decodeIntraDirModeChroma( pcCU, uiAbsPartIdx, uiDepth );
    194205    }
     
    196207    {
    197208      decodeIntraDirModeLuma  ( pcCU, uiAbsPartIdx, uiDepth );
     209#if PKU_QC_DEPTH_INTRA_UNI_D0195
     210      if(!pcCU->getSDCFlag(uiAbsPartIdx))
     211#endif
    198212      decodeIntraDirModeChroma( pcCU, uiAbsPartIdx, uiDepth );
    199213    }
     
    852866    assert( pcCU->getCbf(uiAbsPartIdx, TEXT_CHROMA_U) == 1 );
    853867    assert( pcCU->getCbf(uiAbsPartIdx, TEXT_CHROMA_V) == 1 );
    854    
    855868    decodeSDCResidualData(pcCU, uiAbsPartIdx, uiDepth);
     869#endif
    856870    return;
    857871  }
     
    910924
    911925#if RWTH_SDC_DLT_B0036
     926#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    912927Void TDecEntropy::decodeSDCPredMode( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth )
    913928{
     
    924939  m_pcEntropyDecoderIf->parseSDCFlag(pcCU, uiAbsPartIdx, uiDepth );
    925940}
    926 
    927941Void TDecEntropy::decodeSDCResidualData( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth )
    928942{
  • branches/HTM-6.2-dev0/source/Lib/TLibDecoder/TDecEntropy.h

    r427 r433  
    140140 
    141141#if RWTH_SDC_DLT_B0036
     142#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    142143  virtual Void parseSDCFlag    ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) = 0;
    143144  virtual Void parseSDCPredMode     ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) = 0;
     145#endif
    144146  virtual Void parseSDCResidualData     ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiPart ) = 0;
    145147#endif
     
    240242 
    241243#if RWTH_SDC_DLT_B0036
     244#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    242245  Void decodeSDCPredMode( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
    243246  Void decodeSDCFlag( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
     247#endif
    244248  Void decodeSDCResidualData ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
    245249#endif
  • branches/HTM-6.2-dev0/source/Lib/TLibDecoder/TDecSbac.cpp

    r427 r433  
    3737
    3838#include "TDecSbac.h"
    39 
    40 #if RWTH_SDC_DLT_B0036
    41 #define GetNumDepthValues()     (pcCU->getSlice()->getSPS()->getNumDepthValues())
    42 #define GetBitsPerDepthValue()  (pcCU->getSlice()->getSPS()->getBitsPerDepthValue())
    43 #endif
    4439
    4540//! \ingroup TLibDecoder
     
    10398#endif
    10499#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
     100#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    105101, m_cDmmFlagSCModel           ( 1,             1,               NUM_DMM_FLAG_CTX              , m_contextModels + m_numContextModels, m_numContextModels)
    106102, m_cDmmModeSCModel           ( 1,             1,               NUM_DMM_MODE_CTX              , m_contextModels + m_numContextModels, m_numContextModels)
     103#endif
    107104, m_cDmmDataSCModel           ( 1,             1,               NUM_DMM_DATA_CTX              , m_contextModels + m_numContextModels, m_numContextModels)
    108105#endif
     
    114111#endif
    115112#if RWTH_SDC_DLT_B0036
     113#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    116114, m_cSDCFlagSCModel             ( 1,             1,                 SDC_NUM_FLAG_CTX           , m_contextModels + m_numContextModels, m_numContextModels)
     115#else
     116, m_cDepthModeModel             ( 1,             1,                 DEPTH_MODE_NUM_FLAG_CTX           , m_contextModels + m_numContextModels, m_numContextModels)
     117, m_cDmmDeltaFlagModel             ( 1,             1,                 DMM_DELTA_NUM_FLAG_CTX           , m_contextModels + m_numContextModels, m_numContextModels)
     118#endif
     119#if RWTH_SDC_CTX_SIMPL_D0032
     120, m_cSDCResidualFlagSCModel     ( 1,             1,  SDC_NUM_RESIDUAL_FLAG_CTX  , m_contextModels + m_numContextModels, m_numContextModels)
     121, m_cSDCResidualSCModel         ( 1,             1,  SDC_NUM_RESIDUAL_CTX       , m_contextModels + m_numContextModels, m_numContextModels)
     122, m_cSDCPredModeSCModel             ( 1,             3,                 SDC_NUM_PRED_MODE_CTX     , m_contextModels + m_numContextModels, m_numContextModels)
     123#else
    117124, m_cSDCResidualFlagSCModel     ( 1,             2,  SDC_NUM_RESIDUAL_FLAG_CTX  , m_contextModels + m_numContextModels, m_numContextModels)
    118125, m_cSDCResidualSignFlagSCModel ( 1,             2,  SDC_NUM_SIGN_FLAG_CTX      , m_contextModels + m_numContextModels, m_numContextModels)
    119126, m_cSDCResidualSCModel         ( 1,             2,  SDC_NUM_RESIDUAL_CTX       , m_contextModels + m_numContextModels, m_numContextModels)
    120127, m_cSDCPredModeSCModel             ( 1,             3,                 SDC_NUM_PRED_MODE_CTX     , m_contextModels + m_numContextModels, m_numContextModels)
     128#endif
    121129#endif
    122130{
     
    216224  m_uiLastDQpNonZero  = 0;
    217225#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
     226#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    218227  m_cDmmFlagSCModel.initBuffer           ( sliceType, qp, (UChar*)INIT_DMM_FLAG );
    219228  m_cDmmModeSCModel.initBuffer           ( sliceType, qp, (UChar*)INIT_DMM_MODE );
     229#endif
    220230  m_cDmmDataSCModel.initBuffer           ( sliceType, qp, (UChar*)INIT_DMM_DATA );
    221231#endif
    222232#if RWTH_SDC_DLT_B0036
     233#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    223234  m_cSDCFlagSCModel.initBuffer              ( sliceType, qp, (UChar*)INIT_SDC_FLAG );
     235#else
     236  m_cDepthModeModel.initBuffer              ( sliceType, qp, (UChar*)INIT_DEPTHMODE_FLAG );
     237  m_cDmmDeltaFlagModel.initBuffer           ( sliceType, qp, (UChar*)INIT_DMMDELTA_FLAG );
     238#endif
    224239  m_cSDCResidualFlagSCModel.initBuffer      ( sliceType, qp, (UChar*)INIT_SDC_RESIDUAL_FLAG );
    225240  m_cSDCResidualSCModel.initBuffer          ( sliceType, qp, (UChar*)INIT_SDC_RESIDUAL );
     241#if !RWTH_SDC_CTX_SIMPL_D0032
    226242  m_cSDCResidualSignFlagSCModel.initBuffer  ( sliceType, qp, (UChar*)INIT_SDC_SIGN_FLAG );
     243#endif
    227244  m_cSDCPredModeSCModel.initBuffer              ( sliceType, qp, (UChar*)INIT_SDC_PRED_MODE );
    228245#endif
     
    303320  m_cCUTransSubdivFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_TRANS_SUBDIV_FLAG );
    304321#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
     322#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    305323  m_cDmmFlagSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_DMM_FLAG );
    306324  m_cDmmModeSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_DMM_MODE );
     325#endif
    307326  m_cDmmDataSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_DMM_DATA );
    308327#endif
    309328#if RWTH_SDC_DLT_B0036
     329#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    310330  m_cSDCFlagSCModel.initBuffer              ( eSliceType, iQp, (UChar*)INIT_SDC_FLAG );
     331#else
     332  m_cDepthModeModel.initBuffer              ( eSliceType, iQp, (UChar*)INIT_DEPTHMODE_FLAG );
     333  m_cDmmDeltaFlagModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_DMMDELTA_FLAG );
     334#endif
    311335  m_cSDCResidualFlagSCModel.initBuffer      ( eSliceType, iQp, (UChar*)INIT_SDC_RESIDUAL_FLAG );
    312336  m_cSDCResidualSCModel.initBuffer          ( eSliceType, iQp, (UChar*)INIT_SDC_RESIDUAL );
     337#if !RWTH_SDC_CTX_SIMPL_D0032
    313338  m_cSDCResidualSignFlagSCModel.initBuffer  ( eSliceType, iQp, (UChar*)INIT_SDC_SIGN_FLAG );
     339#endif
    314340  m_cSDCPredModeSCModel.initBuffer              ( eSliceType, iQp, (UChar*)INIT_SDC_PRED_MODE );
    315341#endif
     
    894920}
    895921 
     922  UInt uiSymbol;
     923  if (bDmmFlag)
     924  {
     925    if (bDmmFlag)
     926    {
     927      m_pcTDecBinIf->decodeBin( uiSymbol , m_cDmmDeltaFlagModel.get(0, 0, 0) );
     928      uiDir += uiSymbol;
     929    }
     930    if (uiSymbol)
     931    {
     932      UInt uiDC;
     933      Int iDC = 0,iDC1 = 0,iDC2 = 0;
     934      for ( Int i = 0; i  <2; i++ )
     935      {
     936        xReadExGolombLevel( uiDC, m_cDmmDataSCModel.get(0, 0, 1) );
     937        iDC = uiDC;
     938        if ( uiDC )
     939        {
     940          UInt uiSign;
     941          m_pcTDecBinIf->decodeBinEP( uiSign );
     942          if ( uiSign )
     943          {
     944            iDC = -iDC;
     945          }
     946        }
     947        if ( i == 0 ) { iDC1 = iDC; }
     948        else          { iDC2 = iDC; }
     949      }
     950
     951      if( uiDir == DMM_WEDGE_FULL_D_IDX )   
     952      {
     953        pcCU->setWedgeFullDeltaDC1SubParts( iDC1, uiAbsPartIdx, uiDepth );
     954        pcCU->setWedgeFullDeltaDC2SubParts( iDC2, uiAbsPartIdx, uiDepth );
     955      }
     956      else if( uiDir == DMM_WEDGE_PREDDIR_D_IDX )
     957      {
     958        pcCU->setWedgePredDirDeltaDC1SubParts( iDC1, uiAbsPartIdx, uiDepth );
     959        pcCU->setWedgePredDirDeltaDC2SubParts( iDC2, uiAbsPartIdx, uiDepth );
     960      }
     961      else if( uiDir == DMM_WEDGE_PREDTEX_D_IDX) 
     962      {
     963        pcCU->setWedgePredTexDeltaDC1SubParts( iDC1, uiAbsPartIdx, uiDepth );
     964        pcCU->setWedgePredTexDeltaDC2SubParts( iDC2, uiAbsPartIdx, uiDepth );
     965      }
     966      else if (uiDir== DMM_CONTOUR_PREDTEX_D_IDX )
     967      {
     968        pcCU->setContourPredTexDeltaDC1SubParts( iDC1, uiAbsPartIdx, uiDepth );
     969        pcCU->setContourPredTexDeltaDC2SubParts( iDC2, uiAbsPartIdx, uiDepth );
     970      }
     971    }
     972  }
     973  else if (uiDir >= EDGE_INTRA_IDX)
     974  {
     975    m_pcTDecBinIf->decodeBin( uiSymbol, m_cEdgeIntraDeltaDCSCModel.get(0, 0, 0) );
     976    if( uiSymbol )
     977    {
     978      uiDir = EDGE_INTRA_DELTA_IDX;
     979      Int iDeltaDC = 0,iDeltaDC0 = 0,iDeltaDC1 = 0;
     980      for (Int i = 0; i<2; i++)
     981      {
     982        xReadExGolombLevel( (UInt &) iDeltaDC, m_cEdgeIntraDeltaDCSCModel.get(0, 0, 1) );
     983        if( iDeltaDC != 0 )
     984        {
     985          UInt uiSign;
     986          m_pcTDecBinIf->decodeBinEP( uiSign );
     987          if ( uiSign )
     988          {
     989            iDeltaDC = -iDeltaDC;
     990          }
     991        }
     992        if ( i == 0 ) { iDeltaDC0 = iDeltaDC; }
     993        else          { iDeltaDC1 = iDeltaDC; }
     994      }
     995
     996      pcCU->setEdgeDeltaDC0( uiAbsPartIdx, iDeltaDC0 );
     997      pcCU->setEdgeDeltaDC1( uiAbsPartIdx, iDeltaDC1 );
     998    }
     999  }
     1000  else if(bSdcFlag)//SDC mode
     1001  {
     1002    assert(pcCU->getPartitionSize(uiAbsPartIdx)!=SIZE_NxN);
     1003    pcCU->setTrIdxSubParts(0, uiAbsPartIdx, uiDepth);
     1004    pcCU->setCbfSubParts(1, 1, 1, uiAbsPartIdx, uiDepth);
     1005
     1006    UInt uiNumSegments = ( uiDir == DC_IDX || uiDir == PLANAR_IDX )? 1 : 2;
     1007    for (int uiSeg=0; uiSeg<uiNumSegments; uiSeg++)
     1008    {
     1009      parseSDCResidualData(pcCU, uiAbsPartIdx, uiDepth, uiSeg);
     1010    }
     1011  }
     1012
     1013  pcCU->setLumaIntraDirSubParts( (UChar)uiDir, uiAbsPartIdx, uiDepth );
     1014}
     1015#endif
    8961016Void TDecSbac::parseIntraDirLumaAng  ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth )
    8971017{
    8981018  UInt uiSymbol;
    8991019  Int  intraPredMode;
    900 
     1020#if PKU_QC_DEPTH_INTRA_UNI_D0195
     1021  if (pcCU->getSlice()->getSPS()->isDepth())
     1022  {
     1023    parseDepthModelingTable(pcCU, uiAbsPartIdx, uiDepth);
     1024  }
     1025  if (pcCU->getLumaIntraDir(uiAbsPartIdx)<NUM_INTRA_MODE && !pcCU->getSDCFlag(uiAbsPartIdx))
     1026  {
     1027#else
    9011028#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
    9021029  UInt uiFlag = 0;
     
    9521079    }
    9531080#endif
    954 
    9551081    Int uiPreds[3] = {-1, -1, -1};
    9561082    Int uiPredNum = pcCU->getIntraDirLumaPredictor(uiAbsPartIdx, uiPreds); 
     1083#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    9571084#if LGE_EDGE_INTRA_A0070
    9581085    UInt uiCheckBit = 0;
    9591086#endif
     1087#endif
    9601088
    9611089    m_pcTDecBinIf->decodeBin( uiSymbol, m_cCUIntraPredSCModel.get( 0, 0, 0) );
     
    9771105
    9781106      m_pcTDecBinIf->decodeBinsEP( uiSymbol, 5 );
     1107#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    9791108#if LGE_EDGE_INTRA_A0070
    9801109      if (bCodeEdgeIntra)
     
    9871116        }
    9881117      }
     1118#endif
    9891119#endif
    9901120      intraPredMode = uiSymbol;
     
    10031133        std::swap(uiPreds[1], uiPreds[2]);
    10041134      }
     1135#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    10051136#if LGE_EDGE_INTRA_A0070
    10061137      if ( intraPredMode != EDGE_INTRA_IDX)
    10071138      {
    10081139#endif
     1140#endif
    10091141        for ( Int i = 0; i < uiPredNum; i++ )
    10101142        {
    10111143          intraPredMode += ( intraPredMode >= uiPreds[i] );
    10121144        }
     1145#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    10131146#if LGE_EDGE_INTRA_A0070
    10141147      }
    10151148#endif
    1016     }
    1017 
     1149#endif
     1150    }
     1151
     1152#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    10181153#if LGE_EDGE_INTRA_A0070
    10191154    if( intraPredMode == EDGE_INTRA_IDX )
     
    10591194  }
    10601195#endif
    1061 
    10621196  pcCU->setLumaIntraDirSubParts( (UChar)intraPredMode, uiAbsPartIdx, uiDepth );
     1197#else
     1198  pcCU->setLumaIntraDirSubParts( (UChar)intraPredMode, uiAbsPartIdx, uiDepth );
     1199}
     1200#endif
    10631201}
    10641202
     
    26292767 
    26302768#if RWTH_SDC_DLT_B0036
     2769#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    26312770Void TDecSbac::parseSDCFlag( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth )
    26322771{
     
    26612800  {
    26622801    UInt uiIsMostProb = 0;
     2802#if INTEL_SDC64_D0193
     2803    if( !(pcCU->getWidth(uiAbsPartIdx) == 64 && i == 1))
     2804#endif
    26632805    m_pcTDecBinIf->decodeBin( uiIsMostProb, m_cSDCPredModeSCModel.get( 0, i, uiCtx ) );
    26642806   
     
    26792821  pcCU->setLumaIntraDirSubParts((UChar)intraPredMode, uiAbsPartIdx, uiDepth);
    26802822}
     2823#endif
    26812824
    26822825Void TDecSbac::parseSDCResidualData ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiSegment )
     
    26922835  Int  iIdx       = 0;
    26932836 
    2694   UInt uiMaxResidualBits  = GetBitsPerDepthValue();
     2837  UInt uiMaxResidualBits  = pcCU->getSlice()->getSPS()->getBitsPerDepthValue();
    26952838  assert( uiMaxResidualBits <= g_uiBitDepth );
    26962839 
     2840#if RWTH_SDC_CTX_SIMPL_D0032
     2841  m_pcTDecBinIf->decodeBin(uiResidual, m_cSDCResidualFlagSCModel.get( 0, 0, 0 ) );
     2842#else
    26972843  m_pcTDecBinIf->decodeBin(uiResidual, m_cSDCResidualFlagSCModel.get( 0, uiSegment, 0 ) );
     2844#endif
    26982845 
    26992846  if (uiResidual)
    27002847  {
    27012848    // decode residual sign bit
     2849#if RWTH_SDC_CTX_SIMPL_D0032
     2850    m_pcTDecBinIf->decodeBinEP(uiSign);
     2851#else
    27022852    m_pcTDecBinIf->decodeBin(uiSign, m_cSDCResidualSignFlagSCModel.get( 0, uiSegment, 0 ) );
     2853#endif
    27032854   
    27042855    // decode residual magnitude
     2856#if LGE_CONCATENATE_D0141
     2857    //prefix part
     2858    UInt uiCount = 0;
     2859    UInt uiNumDepthValues = pcCU->getSlice()->getSPS()->getNumDepthValues();
     2860    UInt uiPrefixThreshold = ((uiNumDepthValues * 3) >> 2);
     2861    for ( UInt ui = 0; ui < uiPrefixThreshold; ui++)
     2862    {
     2863        m_pcTDecBinIf->decodeBin( uiBit, m_cSDCResidualSCModel.get(0, 0, 0) );
     2864        if ( uiBit == 0 )
     2865            break;
     2866        else
     2867            uiCount++;
     2868    }
     2869    //suffix part
     2870    if ( uiCount == uiPrefixThreshold )
     2871    {
     2872        for ( UInt ui = 0; ui < ( (UInt)ceil( Log2(uiNumDepthValues - uiPrefixThreshold) ) ); ui++ )
     2873        {
     2874            m_pcTDecBinIf->decodeBinEP( uiBit );
     2875            uiAbsIdx |= uiBit << ui;
     2876        }
     2877        uiAbsIdx += uiCount;
     2878    }
     2879    else
     2880        uiAbsIdx = uiCount;
     2881#else
    27052882    for (Int i=0; i<uiMaxResidualBits; i++)
    27062883    {
     2884#if RWTH_SDC_CTX_SIMPL_D0032
     2885      m_pcTDecBinIf->decodeBin(uiBit, m_cSDCResidualSCModel.get( 0, 0, i ) );
     2886#else
    27072887      m_pcTDecBinIf->decodeBin(uiBit, m_cSDCResidualSCModel.get( 0, uiSegment, i ) );
     2888#endif
    27082889      uiAbsIdx |= uiBit << i;
    27092890    }
     2891#endif
    27102892   
    27112893    uiAbsIdx += 1;
  • branches/HTM-6.2-dev0/source/Lib/TLibDecoder/TDecSbac.h

    r427 r433  
    129129 
    130130#if RWTH_SDC_DLT_B0036
     131#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    131132  Void parseSDCFlag    ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
    132133  Void parseSDCPredMode    ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
     134#endif
    133135  Void parseSDCResidualData     ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiPart );
    134136#endif
     
    190192  Void parsePartSize      ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
    191193  Void parsePredMode      ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
    192  
    193194  Void parseIntraDirLumaAng( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
    194195 
     
    273274
    274275#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
     276#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    275277  ContextModel3DBuffer m_cDmmFlagSCModel;
    276278  ContextModel3DBuffer m_cDmmModeSCModel;
     279#endif
    277280  ContextModel3DBuffer m_cDmmDataSCModel;
    278281#endif
     
    285288 
    286289#if RWTH_SDC_DLT_B0036
     290#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    287291  ContextModel3DBuffer m_cSDCFlagSCModel;
     292#else
     293  ContextModel3DBuffer m_cDepthModeModel;
     294  ContextModel3DBuffer m_cDmmDeltaFlagModel;
     295#endif
    288296 
    289297  ContextModel3DBuffer m_cSDCResidualFlagSCModel;
     298#if !RWTH_SDC_CTX_SIMPL_D0032
    290299  ContextModel3DBuffer m_cSDCResidualSignFlagSCModel;
     300#endif
    291301  ContextModel3DBuffer m_cSDCResidualSCModel;
    292302 
  • branches/HTM-6.2-dev0/source/Lib/TLibEncoder/TEncCavlc.cpp

    r427 r433  
    14361436}
    14371437
    1438 Void TEncCavlc::codeIntraDirLumaAng( TComDataCU* pcCU, UInt uiAbsPartIdx )
     1438Void TEncCavlc::codeIntraDirLumaAng( TComDataCU* pcCU, UInt uiAbsPartIdx
     1439#if PKU_QC_DEPTH_INTRA_UNI_D0195
     1440                                    , Bool bSdcRD
     1441#endif
     1442                                    )
    14391443{
    14401444  assert(0);
     
    19151919
    19161920#if RWTH_SDC_DLT_B0036
     1921#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    19171922Void TEncCavlc::codeSDCFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx )
    19181923{
    19191924  assert(0);
    19201925}
    1921 
     1926#endif
    19221927Void TEncCavlc::codeSDCResidualData  ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiSegment )
    19231928{
    19241929  assert(0);
    19251930}
    1926 
     1931#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    19271932Void TEncCavlc::codeSDCPredMode ( TComDataCU* pcCU, UInt uiAbsPartIdx )
    19281933{
     
    19301935}
    19311936#endif
     1937#endif
    19321938//! \}
  • branches/HTM-6.2-dev0/source/Lib/TLibEncoder/TEncCavlc.h

    r427 r433  
    194194  Void codeQtRootCbf     ( TComDataCU* pcCU, UInt uiAbsPartIdx );
    195195 
    196   Void codeIntraDirLumaAng( TComDataCU* pcCU, UInt uiAbsPartIdx );
     196  Void codeIntraDirLumaAng( TComDataCU* pcCU, UInt uiAbsPartIdx
     197#if PKU_QC_DEPTH_INTRA_UNI_D0195
     198    , Bool bSdcRD = false
     199#endif
     200    );
    197201 
    198202  Void codeIntraDirChroma( TComDataCU* pcCU, UInt uiAbsPartIdx );
     
    220224 
    221225#if RWTH_SDC_DLT_B0036
     226#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    222227  Void codeSDCFlag          ( TComDataCU* pcCU, UInt uiAbsPartIdx );
     228#endif
    223229  Void codeSDCResidualData  ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiSegment );
     230#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    224231  Void codeSDCPredMode          ( TComDataCU* pcCU, UInt uiAbsPartIdx );
    225232#endif
     233#endif
    226234
    227235};
  • branches/HTM-6.2-dev0/source/Lib/TLibEncoder/TEncEntropy.cpp

    r427 r433  
    877877  }
    878878#endif
     879#endif
    879880}
    880881
     
    917918    }
    918919  }
     920#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    919921#if RWTH_SDC_DLT_B0036
    920922  if( !pcCU->getSlice()->isInterB() && pcCU->isIntra(uiAbsPartIdx) && pcCU->getSDCFlag(uiAbsPartIdx)  )
     
    924926  }
    925927#endif
     928#endif
    926929 
    927930  m_pcEntropyCoderIf->codePartSize( pcCU, uiAbsPartIdx, uiDepth );
    928931 
     932#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    929933#if RWTH_SDC_DLT_B0036
    930934  // code SDC flag now!
     
    940944    }
    941945  }
     946#endif
    942947#endif
    943948}
     
    12201225
    12211226// Intra direction for Luma
    1222 Void TEncEntropy::encodeIntraDirModeLuma  ( TComDataCU* pcCU, UInt uiAbsPartIdx )
    1223 {
    1224   m_pcEntropyCoderIf->codeIntraDirLumaAng( pcCU, uiAbsPartIdx );
     1227Void TEncEntropy::encodeIntraDirModeLuma  ( TComDataCU* pcCU, UInt uiAbsPartIdx
     1228#if PKU_QC_DEPTH_INTRA_UNI_D0195
     1229                                           ,Bool bSdcRD
     1230#endif
     1231                                           )
     1232{
     1233  m_pcEntropyCoderIf->codeIntraDirLumaAng( pcCU, uiAbsPartIdx
     1234#if PKU_QC_DEPTH_INTRA_UNI_D0195
     1235    ,bSdcRD
     1236#endif
     1237    );
    12251238}
    12261239
     
    12361249}
    12371250
    1238 Void TEncEntropy::encodePredInfo( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD )
     1251Void TEncEntropy::encodePredInfo( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD
     1252#if PKU_QC_DEPTH_INTRA_UNI_D0195
     1253                                 ,Bool bSdcRD
     1254#endif
     1255                                 )
    12391256{
    12401257  if( bRD )
     
    12431260  }
    12441261
     1262#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    12451263#if RWTH_SDC_DLT_B0036
    12461264  if( pcCU->getSDCFlag(uiAbsPartIdx) )
     
    12491267    return;
    12501268  }
     1269#endif
    12511270#endif
    12521271
     
    12631282      encodeIntraDirModeLuma( pcCU, uiAbsPartIdx + uiPartOffset*2 );
    12641283      encodeIntraDirModeLuma( pcCU, uiAbsPartIdx + uiPartOffset*3 );
     1284#if PKU_QC_DEPTH_INTRA_UNI_D0195
     1285      if(!pcCU->getSDCFlag(uiAbsPartIdx))
     1286#endif
    12651287      encodeIntraDirModeChroma( pcCU, uiAbsPartIdx, bRD );
    12661288    }
    12671289    else                                                              // if it is not NxN size, encode 1 intra directions
    12681290    {
    1269       encodeIntraDirModeLuma  ( pcCU, uiAbsPartIdx );
     1291      encodeIntraDirModeLuma  ( pcCU, uiAbsPartIdx
    12701292      encodeIntraDirModeChroma( pcCU, uiAbsPartIdx, bRD );
    12711293    }
     
    14651487    assert( pcCU->getCbf(uiAbsPartIdx, TEXT_CHROMA_U) == 1 );
    14661488    assert( pcCU->getCbf(uiAbsPartIdx, TEXT_CHROMA_V) == 1 );
    1467    
    14681489    encodeSDCResidualData(pcCU, uiAbsPartIdx);
     1490#endif
    14691491    return;
    14701492  }
     
    18621884
    18631885#if RWTH_SDC_DLT_B0036
     1886#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    18641887Void TEncEntropy::encodeSDCPredMode( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD )
    18651888{
     
    18811904  m_pcEntropyCoderIf->codeSDCFlag(pcCU, uiAbsPartIdx);
    18821905}
    1883 
    18841906Void TEncEntropy::encodeSDCResidualData( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD )
    18851907{
  • branches/HTM-6.2-dev0/source/Lib/TLibEncoder/TEncEntropy.h

    r427 r433  
    126126 
    127127#if RWTH_SDC_DLT_B0036
     128#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    128129  virtual Void codeSDCFlag          ( TComDataCU* pcCU, UInt uiAbsPartIdx ) = 0;
     130#endif
    129131  virtual Void codeSDCResidualData  ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiSegment ) = 0;
     132#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    130133  virtual Void codeSDCPredMode          ( TComDataCU* pcCU, UInt uiAbsPartIdx ) = 0;
     134#endif
    131135#endif
    132136 
     
    136140  virtual Void codeQtCbf         ( TComDataCU* pcCU, UInt uiAbsPartIdx, TextType eType, UInt uiTrDepth ) = 0;
    137141  virtual Void codeQtRootCbf     ( TComDataCU* pcCU, UInt uiAbsPartIdx ) = 0;
    138   virtual Void codeIntraDirLumaAng( TComDataCU* pcCU, UInt uiAbsPartIdx ) = 0;
     142  virtual Void codeIntraDirLumaAng( TComDataCU* pcCU, UInt uiAbsPartIdx
     143#if PKU_QC_DEPTH_INTRA_UNI_D0195
     144    , Bool bSdcRD = false
     145#endif
     146    ) = 0;
    139147 
    140148  virtual Void codeIntraDirChroma( TComDataCU* pcCU, UInt uiAbsPartIdx ) = 0;
     
    279287  Void encodePartSize          ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, Bool bRD = false );
    280288  Void encodeIPCMInfo          ( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD = false );
    281   Void encodePredInfo          ( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD = false );
    282   Void encodeIntraDirModeLuma  ( TComDataCU* pcCU, UInt uiAbsPartIdx );
     289  Void encodePredInfo          ( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD = false
     290#if PKU_QC_DEPTH_INTRA_UNI_D0195
     291    ,Bool bSdcRD = false
     292#endif
     293    );
     294  Void encodeIntraDirModeLuma  ( TComDataCU* pcCU, UInt uiAbsPartIdx
     295#if PKU_QC_DEPTH_INTRA_UNI_D0195
     296 ,Bool bSdcRD = false
     297#endif
     298    );
    283299 
    284300  Void encodeIntraDirModeChroma( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD = false );
     
    298314 
    299315#if RWTH_SDC_DLT_B0036
     316#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    300317  Void encodeSDCFlag          ( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD = false );
     318#endif
    301319  Void encodeSDCResidualData  ( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD = false );
     320#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    302321  Void encodeSDCPredMode   ( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD = false );
     322#endif
    303323#endif
    304324
  • branches/HTM-6.2-dev0/source/Lib/TLibEncoder/TEncSbac.cpp

    r427 r433  
    4141#include <map>
    4242#include <algorithm>
    43 
    44 #if RWTH_SDC_DLT_B0036
    45 #define GetNumDepthValues()     (pcCU->getSlice()->getSPS()->getNumDepthValues())
    46 #define GetBitsPerDepthValue()  (pcCU->getSlice()->getSPS()->getBitsPerDepthValue())
    47 #endif
    4843
    4944//! \ingroup TLibEncoder
     
    111106#endif
    112107#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
     108#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    113109, m_cDmmFlagSCModel           ( 1,             1,               NUM_DMM_FLAG_CTX              , m_contextModels + m_numContextModels, m_numContextModels)
    114110, m_cDmmModeSCModel           ( 1,             1,               NUM_DMM_MODE_CTX              , m_contextModels + m_numContextModels, m_numContextModels)
     111#endif
    115112, m_cDmmDataSCModel           ( 1,             1,               NUM_DMM_DATA_CTX              , m_contextModels + m_numContextModels, m_numContextModels)
    116113#endif
     
    122119#endif
    123120#if RWTH_SDC_DLT_B0036
     121#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    124122, m_cSDCFlagSCModel             ( 1,             1,                 SDC_NUM_FLAG_CTX           , m_contextModels + m_numContextModels, m_numContextModels)
     123#else
     124, m_cDepthModeModel             ( 1,             1,                 DEPTH_MODE_NUM_FLAG_CTX           , m_contextModels + m_numContextModels, m_numContextModels)
     125, m_cDmmDeltaFlagModel             ( 1,             1,                 DMM_DELTA_NUM_FLAG_CTX           , m_contextModels + m_numContextModels, m_numContextModels)
     126#endif
     127#if RWTH_SDC_CTX_SIMPL_D0032
     128, m_cSDCResidualFlagSCModel     ( 1,             1,  SDC_NUM_RESIDUAL_FLAG_CTX  , m_contextModels + m_numContextModels, m_numContextModels)
     129, m_cSDCResidualSCModel         ( 1,             1,  SDC_NUM_RESIDUAL_CTX       , m_contextModels + m_numContextModels, m_numContextModels)
     130, m_cSDCPredModeSCModel             ( 1,             3,                 SDC_NUM_PRED_MODE_CTX     , m_contextModels + m_numContextModels, m_numContextModels)
     131#else
    125132, m_cSDCResidualFlagSCModel     ( 1,             2,  SDC_NUM_RESIDUAL_FLAG_CTX  , m_contextModels + m_numContextModels, m_numContextModels)
    126133, m_cSDCResidualSignFlagSCModel ( 1,             2,  SDC_NUM_SIGN_FLAG_CTX      , m_contextModels + m_numContextModels, m_numContextModels)
    127134, m_cSDCResidualSCModel         ( 1,             2,  SDC_NUM_RESIDUAL_CTX       , m_contextModels + m_numContextModels, m_numContextModels)
    128135, m_cSDCPredModeSCModel             ( 1,             3,                 SDC_NUM_PRED_MODE_CTX     , m_contextModels + m_numContextModels, m_numContextModels)
     136#endif
    129137#endif
    130138{
     
    203211#endif
    204212#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
     213#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    205214  m_cDmmFlagSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_DMM_FLAG );
    206215  m_cDmmModeSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_DMM_MODE );
     216#endif
    207217  m_cDmmDataSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_DMM_DATA );
    208218#endif
     
    214224#endif
    215225#if RWTH_SDC_DLT_B0036
     226#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    216227  m_cSDCFlagSCModel.initBuffer              ( eSliceType, iQp, (UChar*)INIT_SDC_FLAG );
     228#else
     229  m_cDepthModeModel.initBuffer              ( eSliceType, iQp, (UChar*)INIT_DEPTHMODE_FLAG );
     230  m_cDmmDeltaFlagModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_DMMDELTA_FLAG );
     231#endif
    217232  m_cSDCResidualFlagSCModel.initBuffer      ( eSliceType, iQp, (UChar*)INIT_SDC_RESIDUAL_FLAG );
    218233  m_cSDCResidualSCModel.initBuffer          ( eSliceType, iQp, (UChar*)INIT_SDC_RESIDUAL );
     234#if !RWTH_SDC_CTX_SIMPL_D0032
    219235  m_cSDCResidualSignFlagSCModel.initBuffer  ( eSliceType, iQp, (UChar*)INIT_SDC_SIGN_FLAG );
     236#endif
    220237  m_cSDCPredModeSCModel.initBuffer              ( eSliceType, iQp, (UChar*)INIT_SDC_PRED_MODE );
    221238#endif
     
    369386#endif
    370387#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
     388#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    371389  m_cDmmFlagSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_DMM_FLAG );
    372390  m_cDmmModeSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_DMM_MODE );
     391#endif
    373392  m_cDmmDataSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_DMM_DATA );
    374393#endif
    375394#if RWTH_SDC_DLT_B0036
     395#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    376396  m_cSDCFlagSCModel.initBuffer              ( eSliceType, iQp, (UChar*)INIT_SDC_FLAG );
     397#else
     398  m_cDepthModeModel.initBuffer              ( eSliceType, iQp, (UChar*)INIT_DEPTHMODE_FLAG );
     399  m_cDmmDeltaFlagModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_DMMDELTA_FLAG );
     400#endif
    377401  m_cSDCResidualFlagSCModel.initBuffer      ( eSliceType, iQp, (UChar*)INIT_SDC_RESIDUAL_FLAG );
    378402  m_cSDCResidualSCModel.initBuffer          ( eSliceType, iQp, (UChar*)INIT_SDC_RESIDUAL );
     403#if !RWTH_SDC_CTX_SIMPL_D0032
    379404  m_cSDCResidualSignFlagSCModel.initBuffer  ( eSliceType, iQp, (UChar*)INIT_SDC_SIGN_FLAG );
     405#endif
    380406  m_cSDCPredModeSCModel.initBuffer              ( eSliceType, iQp, (UChar*)INIT_SDC_PRED_MODE );
    381407#endif
     
    571597}
    572598
    573 
     599#if PKU_QC_DEPTH_INTRA_UNI_D0195
     600Void TEncSbac::loadDepthMode( TEncSbac* pSrc)
     601{
     602  m_pcBinIf->copyState( pSrc->m_pcBinIf );
     603
     604  this->m_cDepthModeModel      .copyFrom( &pSrc->m_cDepthModeModel       );
     605  this->m_cDmmDeltaFlagModel   .copyFrom( &pSrc->m_cDmmDeltaFlagModel       );
     606}
     607#endif
    574608Void  TEncSbac::store( TEncSbac* pDest)
    575609{
     
    10121046}
    10131047#endif
    1014 
    1015 Void TEncSbac::codeIntraDirLumaAng( TComDataCU* pcCU, UInt uiAbsPartIdx )
     1048#if PKU_QC_DEPTH_INTRA_UNI_D0195
     1049Void TEncSbac::codeDepthIntraMode( TComDataCU* pcCU, UInt uiAbsPartIdx )
     1050{
     1051  UInt uiCodeWordTable[3][9] =    {{0, 0, 0, 2, 0,6, 0, 0, 7},{0, 2, 3, 4, 5, 6, 14, 31, 30},{0, 2, 0, 0, 0, 0, 3, 0, 0}};
     1052  UInt uiCodeWordLenTable[3][9] = {{0, 1, 0, 2, 0,3, 0, 0, 3},{2, 3, 3, 3, 3, 3,  4,  5,  5},{1, 2, 0, 0, 0, 0, 2, 0, 0}};
     1053  UInt uiDir = pcCU->getLumaIntraDir(uiAbsPartIdx);
     1054  Bool bSdcFlag = pcCU->getSDCFlag(uiAbsPartIdx);
     1055  UInt uiPuIdx = ( pcCU->getWidth(uiAbsPartIdx) == 64 )? 2 : ( ( pcCU->getPartitionSize(uiAbsPartIdx) == SIZE_NxN && pcCU->getWidth(uiAbsPartIdx) == 8 ) ? 0 : 1 );
     1056  UInt uiCodeIdx = 0;
     1057  if ( bSdcFlag )
     1058  {
     1059    switch(uiDir)
     1060    {
     1061      case PLANAR_IDX: uiCodeIdx = 0; break;
     1062      case DC_IDX:     uiCodeIdx = 6; break;
     1063      default:         uiCodeIdx = 2;
     1064    }
     1065  }
     1066  else if ( uiDir>=EDGE_INTRA_IDX )
     1067  {
     1068    uiCodeIdx = 8;
     1069  }
     1070  else if ( uiDir<NUM_INTRA_MODE ) 
     1071  {
     1072    uiCodeIdx = 1;
     1073  }
     1074  else
     1075  {
     1076    if (uiDir== DMM_WEDGE_FULL_IDX     || uiDir==DMM_WEDGE_FULL_D_IDX     )     {uiCodeIdx = 3;}
     1077    if (uiDir== DMM_CONTOUR_PREDTEX_IDX|| uiDir==DMM_CONTOUR_PREDTEX_D_IDX)     {uiCodeIdx = 4;}
     1078    if (uiDir== DMM_WEDGE_PREDTEX_IDX  || uiDir==DMM_WEDGE_PREDTEX_D_IDX  )     {uiCodeIdx = 5;}
     1079    if (uiDir== DMM_WEDGE_PREDDIR_IDX  || uiDir==DMM_WEDGE_PREDDIR_D_IDX  )     {uiCodeIdx = 7;}
     1080  }
     1081  //mode coding
     1082  for (UInt i=0; i<uiCodeWordLenTable[uiPuIdx][uiCodeIdx]; i++)
     1083  {
     1084    UInt uiBit = uiCodeWordTable[uiPuIdx][uiCodeIdx] & ( 1<<(uiCodeWordLenTable[uiPuIdx][uiCodeIdx]-i-1) );
     1085    UInt uiCtxDepthMode = uiPuIdx*3 + ( i >= 2? 2 : i );
     1086    m_pcBinIf->encodeBin( uiBit!=0 , m_cDepthModeModel.get(0, 0, uiCtxDepthMode) );
     1087  }
     1088}
     1089Void TEncSbac::codeDepthModelingTable( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bSdcRD)
     1090{
     1091  UInt uiDir = pcCU->getLumaIntraDir( uiAbsPartIdx );
     1092  Bool bSdcFlag =  pcCU->getSDCFlag(uiAbsPartIdx);
     1093  Bool bDmmFlag = (uiDir >= NUM_INTRA_MODE && uiDir < EDGE_INTRA_IDX &&(!bSdcFlag))? 1:0;
     1094
     1095  codeDepthIntraMode(pcCU,uiAbsPartIdx);
     1096 
     1097  if (uiDir >= NUM_INTRA_MODE && uiDir < EDGE_INTRA_IDX )//DMM modes or SDC DMM1
     1098  {
     1099    assert(pcCU->getWidth(uiAbsPartIdx)<64);
     1100    assert(pcCU->getWidth(uiAbsPartIdx)<64);
     1101    if( uiDir == DMM_WEDGE_FULL_IDX || uiDir == DMM_WEDGE_FULL_D_IDX)             { xCodeWedgeFullInfo     ( pcCU, uiAbsPartIdx ); }
     1102    else if( uiDir == DMM_WEDGE_PREDTEX_IDX || uiDir == DMM_WEDGE_PREDTEX_D_IDX ) { xCodeWedgePredTexInfo  ( pcCU, uiAbsPartIdx ); }
     1103    else if( uiDir == DMM_WEDGE_PREDDIR_IDX || uiDir == DMM_WEDGE_PREDDIR_D_IDX)  { xCodeWedgePredDirInfo  ( pcCU, uiAbsPartIdx ); }
     1104  }
     1105  else if(uiDir >= EDGE_INTRA_IDX)//CCM mode
     1106  {
     1107    assert(pcCU->getWidth(uiAbsPartIdx)<64);
     1108    xCodeEdgeIntraInfo( pcCU, uiAbsPartIdx );
     1109  }
     1110
     1111  if (bDmmFlag)
     1112  {
     1113    m_pcBinIf->encodeBin( (uiDir&1) , m_cDmmDeltaFlagModel.get(0, 0, 0) );
     1114    if (uiDir&1)
     1115    {
     1116      Int iDeltaDC1 = 0,iDeltaDC2 = 0;
     1117      if ( uiDir == DMM_WEDGE_FULL_D_IDX )
     1118      {
     1119        iDeltaDC1 = pcCU->getWedgeFullDeltaDC1( uiAbsPartIdx );
     1120        iDeltaDC2 = pcCU->getWedgeFullDeltaDC2( uiAbsPartIdx );
     1121      }
     1122      else if ( uiDir == DMM_WEDGE_PREDTEX_D_IDX )
     1123      {
     1124        iDeltaDC1 = pcCU->getWedgePredTexDeltaDC1( uiAbsPartIdx );
     1125        iDeltaDC2 = pcCU->getWedgePredTexDeltaDC2( uiAbsPartIdx );
     1126      }
     1127      else if ( uiDir == DMM_WEDGE_PREDDIR_D_IDX )
     1128      {
     1129        iDeltaDC1 = pcCU->getWedgePredDirDeltaDC1( uiAbsPartIdx );
     1130        iDeltaDC2 = pcCU->getWedgePredDirDeltaDC2( uiAbsPartIdx );
     1131      }
     1132      else if ( uiDir == DMM_CONTOUR_PREDTEX_D_IDX )
     1133      {
     1134        iDeltaDC1 = pcCU->getContourPredTexDeltaDC1( uiAbsPartIdx );
     1135        iDeltaDC2 = pcCU->getContourPredTexDeltaDC2( uiAbsPartIdx );
     1136
     1137      }
     1138
     1139      for ( Int i = 0; i < 2; i++ )
     1140      {
     1141        Int iDeltaDC = (i==0)? iDeltaDC1 : iDeltaDC2;
     1142        xWriteExGolombLevel( UInt( abs( iDeltaDC ) ), m_cDmmDataSCModel.get(0, 0, 1) );
     1143        if ( iDeltaDC != 0 )
     1144        {
     1145          UInt uiSign = iDeltaDC > 0 ? 0 : 1;
     1146          m_pcBinIf->encodeBinEP( uiSign );
     1147        }
     1148      }
     1149    }
     1150  }
     1151  else if (uiDir>=EDGE_INTRA_IDX)
     1152  {
     1153    m_pcBinIf->encodeBin( (uiDir == EDGE_INTRA_DELTA_IDX), m_cEdgeIntraDeltaDCSCModel.get(0, 0, 0) );
     1154    if( uiDir == EDGE_INTRA_DELTA_IDX )
     1155    {
     1156      Int iDeltaDC0 = pcCU->getEdgeDeltaDC0( uiAbsPartIdx );
     1157      Int iDeltaDC1 = pcCU->getEdgeDeltaDC1( uiAbsPartIdx );
     1158
     1159      for ( Int i = 0; i < 2; i++ )
     1160      {
     1161        Int iDeltaDC = (i==0)? iDeltaDC0 : iDeltaDC1;
     1162        xWriteExGolombLevel( UInt( abs( iDeltaDC ) ), m_cEdgeIntraDeltaDCSCModel.get(0, 0, 1) );
     1163        if ( iDeltaDC != 0 )
     1164        {
     1165          UInt uiSign = iDeltaDC > 0 ? 0 : 1;
     1166          m_pcBinIf->encodeBinEP( uiSign );
     1167        }
     1168      }
     1169    }
     1170  }
     1171  if (pcCU->getSDCFlag(uiAbsPartIdx))//SDC mode
     1172  {
     1173    assert(pcCU->getPartitionSize(uiAbsPartIdx)==SIZE_2Nx2N);
     1174    UInt uiNumSegments = ( uiDir == DC_IDX || uiDir == PLANAR_IDX )? 1 : 2;
     1175    if(!bSdcRD)
     1176    {
     1177      for (int uiSeg=0; uiSeg<uiNumSegments; uiSeg++)
     1178      {
     1179        codeSDCResidualData(pcCU, uiAbsPartIdx, uiSeg);
     1180      }
     1181    }
     1182  }
     1183}
     1184#endif
     1185Void TEncSbac::codeIntraDirLumaAng( TComDataCU* pcCU, UInt uiAbsPartIdx
     1186#if PKU_QC_DEPTH_INTRA_UNI_D0195
     1187                                   , Bool bSdcRD
     1188#endif
     1189                                   )
    10161190{
    10171191  UInt uiDir         = pcCU->getLumaIntraDir( uiAbsPartIdx );
    10181192
     1193#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    10191194#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
    10201195  if( pcCU->getSlice()->getSPS()->getUseDMM() && pcCU->getWidth( uiAbsPartIdx ) <= DMM_WEDGEMODEL_MAX_SIZE )
     
    11161291  }
    11171292#endif
    1118  
     1293#else
     1294  if (pcCU->getSlice()->getSPS()->isDepth())
     1295  {
     1296    codeDepthModelingTable(pcCU, uiAbsPartIdx, bSdcRD);
     1297  }
     1298  if (pcCU->getLumaIntraDir(uiAbsPartIdx)<NUM_INTRA_MODE && !pcCU->getSDCFlag(uiAbsPartIdx))
     1299  {
     1300#endif
    11191301  Int uiPreds[3] = {-1, -1, -1};
    11201302  Int uiPredNum = pcCU->getIntraDirLumaPredictor(uiAbsPartIdx, uiPreds); 
     
    11621344
    11631345    m_pcBinIf->encodeBinsEP( uiDir, 5 );
     1346#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    11641347#if LGE_EDGE_INTRA_A0070
    11651348  if (bCodeEdgeIntra)
    11661349    if (uiDir == 31) m_pcBinIf->encodeBinsEP(0,1);
    11671350#endif
     1351#endif
    11681352   }
     1353#if PKU_QC_DEPTH_INTRA_UNI_D0195
     1354   }
     1355#else
    11691356#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
    11701357  }
    11711358#endif
     1359#endif
     1360
    11721361  return;
    11731362}
     
    25162705
    25172706#if RWTH_SDC_DLT_B0036
     2707#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    25182708Void TEncSbac::codeSDCPredMode( TComDataCU* pcCU, UInt uiAbsPartIdx )
    25192709{
     
    25302720  {
    25312721    UInt uiBit = (uiPredMode == g_auiSDCPredModes[uiMPModeIdx]) ? 1 : 0;
     2722#if INTEL_SDC64_D0193
     2723    if( !(pcCU->getWidth(uiAbsPartIdx) == 64 && i == 1))
     2724#endif
    25322725    m_pcBinIf->encodeBin( uiBit, m_cSDCPredModeSCModel.get( 0, i, uiCtx ) );
    25332726   
     
    25562749 
    25572750}
     2751#endif
    25582752
    25592753Void TEncSbac::codeSDCResidualData ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiSegment )
     
    25692763  UInt uiSign     = segmentDCOffset < 0 ? 1 : 0;
    25702764  UInt uiAbsIdx   = abs(segmentDCOffset);
     2765#if !LGE_CONCATENATE_D0141
    25712766  UInt uiBit = 0;
    2572  
    2573   UInt uiMaxResidualBits  = GetBitsPerDepthValue();
     2767#endif
     2768 
     2769  UInt uiMaxResidualBits  = pcCU->getSlice()->getSPS()->getBitsPerDepthValue();
    25742770  assert( uiMaxResidualBits <= g_uiBitDepth );
    25752771 
    25762772  // residual flag
     2773#if RWTH_SDC_CTX_SIMPL_D0032
     2774  m_pcBinIf->encodeBin( uiResidual, m_cSDCResidualFlagSCModel.get( 0, 0, 0 ) );
     2775#else
    25772776  m_pcBinIf->encodeBin( uiResidual, m_cSDCResidualFlagSCModel.get( 0, uiSegment, 0 ) ); //TODO depthmap: more sophisticated context selection
     2777#endif
    25782778 
    25792779  if (uiResidual)
    25802780  {
    25812781    // encode sign bit of residual
     2782#if RWTH_SDC_CTX_SIMPL_D0032
     2783    m_pcBinIf->encodeBinEP( uiSign );
     2784#else
    25822785    m_pcBinIf->encodeBin( uiSign, m_cSDCResidualSignFlagSCModel.get( 0, uiSegment, 0 ) ); //TODO depthmap: more sophisticated context selection
     2786#endif
    25832787       
    2584     assert(uiAbsIdx < GetNumDepthValues());
     2788    UInt uiNumDepthValues = pcCU->getSlice()->getSPS()->getNumDepthValues();
     2789    assert(uiAbsIdx < uiNumDepthValues);
    25852790   
    25862791    // encode residual magnitude
    25872792    uiAbsIdx -= 1;
     2793#if LGE_CONCATENATE_D0141
     2794    //prefix part
     2795    if ( uiAbsIdx == 0 )
     2796        m_pcBinIf->encodeBin( 0, m_cSDCResidualSCModel.get(0, 0, 0) );
     2797    else
     2798    {
     2799        UInt l = uiAbsIdx;
     2800        UInt k = 0;
     2801        UInt uiPrefixThreshold = ((uiNumDepthValues * 3) >> 2);
     2802        while ( l > 0 && k < uiPrefixThreshold )
     2803        {
     2804            m_pcBinIf->encodeBin( 1, m_cSDCResidualSCModel.get(0, 0, 0) );
     2805            l--;
     2806            k++;
     2807        }
     2808        if ( uiAbsIdx < uiPrefixThreshold )
     2809            m_pcBinIf->encodeBin( 0, m_cSDCResidualSCModel.get(0, 0, 0) );
     2810        //suffix part
     2811        else
     2812        {
     2813            uiAbsIdx -= uiPrefixThreshold;
     2814            UInt uiSuffixLength = ( (UInt)ceil( Log2(uiNumDepthValues - uiPrefixThreshold) ) );
     2815            UInt uiBitInfo = 0;
     2816            for ( Int i = 0; i < uiSuffixLength; i++)
     2817            {
     2818                uiBitInfo = ( uiAbsIdx & ( 1 << i ) ) >> i;
     2819                m_pcBinIf->encodeBinEP( uiBitInfo);
     2820            }
     2821        }
     2822    }
     2823#else
    25882824    for (Int i=0; i<uiMaxResidualBits; i++)
    25892825    {
    25902826      uiBit = (uiAbsIdx & (1<<i))>>i;
    25912827     
     2828#if RWTH_SDC_CTX_SIMPL_D0032
     2829      m_pcBinIf->encodeBin( uiBit, m_cSDCResidualSCModel.get( 0, 0, i ) );
     2830#else
    25922831      m_pcBinIf->encodeBin( uiBit, m_cSDCResidualSCModel.get( 0, uiSegment, i ) ); //TODO depthmap: more sophisticated context selection
    2593     }
     2832#endif
     2833    }
     2834#endif
    25942835   
    25952836  }
  • branches/HTM-6.2-dev0/source/Lib/TLibEncoder/TEncSbac.h

    r427 r433  
    9292  Void  load                   ( TEncSbac* pScr  );
    9393  Void  loadIntraDirModeLuma   ( TEncSbac* pScr  );
     94#if PKU_QC_DEPTH_INTRA_UNI_D0195
     95  Void  loadDepthMode          ( TEncSbac* pSrc  );
     96#endif
    9497  Void  store                  ( TEncSbac* pDest );
    9598  Void  loadContexts           ( TEncSbac* pScr  );
     
    145148 
    146149#if RWTH_SDC_DLT_B0036
     150#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    147151  Void codeSDCFlag          ( TComDataCU* pcCU, UInt uiAbsPartIdx );
     152#endif
    148153  Void codeSDCResidualData  ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiSegment );
     154#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    149155  Void codeSDCPredMode      ( TComDataCU* pcCU, UInt uiAbsPartIdx );
     156#endif
    150157#endif
    151158
     
    233240  Void codeQtCbf               ( TComDataCU* pcCU, UInt uiAbsPartIdx, TextType eType, UInt uiTrDepth );
    234241  Void codeQtRootCbf           ( TComDataCU* pcCU, UInt uiAbsPartIdx );
    235  
    236   Void codeIntraDirLumaAng     ( TComDataCU* pcCU, UInt uiAbsPartIdx );
     242#if PKU_QC_DEPTH_INTRA_UNI_D0195
     243  Void codeDepthIntraMode      ( TComDataCU* pcCU, UInt uiAbsPartIdx );
     244  Void codeDepthModelingTable  ( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bSdcRD = false );
     245#endif
     246  Void codeIntraDirLumaAng     ( TComDataCU* pcCU, UInt uiAbsPartIdx
     247#if PKU_QC_DEPTH_INTRA_UNI_D0195
     248    , Bool bSdcRD = false
     249#endif
     250    );
    237251 
    238252  Void codeIntraDirChroma      ( TComDataCU* pcCU, UInt uiAbsPartIdx );
     
    319333
    320334#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
     335#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    321336  ContextModel3DBuffer m_cDmmFlagSCModel;
    322337  ContextModel3DBuffer m_cDmmModeSCModel;
     338#endif
    323339  ContextModel3DBuffer m_cDmmDataSCModel;
    324340#endif
     
    331347 
    332348#if RWTH_SDC_DLT_B0036
     349#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    333350  ContextModel3DBuffer m_cSDCFlagSCModel;
     351#else
     352  ContextModel3DBuffer m_cDepthModeModel;
     353  ContextModel3DBuffer m_cDmmDeltaFlagModel;
     354#endif
    334355 
    335356  ContextModel3DBuffer m_cSDCResidualFlagSCModel;
     357#if !RWTH_SDC_CTX_SIMPL_D0032
    336358  ContextModel3DBuffer m_cSDCResidualSignFlagSCModel;
     359#endif
    337360  ContextModel3DBuffer m_cSDCResidualSCModel;
    338361 
  • branches/HTM-6.2-dev0/source/Lib/TLibEncoder/TEncSearch.cpp

    r427 r433  
    912912      if( uiAbsPartIdx == 0 )
    913913      {
    914         m_pcEntropyCoder->encodeIntraDirModeLuma ( pcCU, 0 );
     914        m_pcEntropyCoder->encodeIntraDirModeLuma ( pcCU, 0
     915#if PKU_QC_DEPTH_INTRA_UNI_D0195
     916         ,true
     917#endif
     918          );
    915919      }
    916920    }
     
    17051709      UChar ucSegment = pMask?(UChar)pMask[uiX]:0;
    17061710      assert( ucSegment < uiNumSegments );
     1711#if MTK_SAMPLE_BASED_SDC_D0110     
     1712      Pel pResiDC = apDCResiValues[ucSegment];
    17071713     
     1714      pReco    [ uiX ] = Clip( pPred[ uiX ] + pResiDC );
     1715#else
    17081716      Pel pPredVal= apDCPredValues[ucSegment];
    17091717      Pel pResiDC = apDCResiValues[ucSegment];
    17101718     
    17111719      pReco    [ uiX ] = Clip( pPredVal + pResiDC );
     1720#endif
    17121721      pRecIPred[ uiX ] = pReco[ uiX ];
    17131722    }
     
    17391748  if ( m_pcRdCost->getUseVSO() )
    17401749  {
     1750#if FIX_SDC_ENC_RD_WVSO_D0163 && LGE_WVSO_A0119
     1751    if ( m_pcRdCost->getUseWVSO() )
     1752    {   
     1753      Int iDWeight = m_pcRdCost->getDWeight() * m_pcRdCost->getDWeight();
     1754      Int iVSOWeight = m_pcRdCost->getVSOWeight() * m_pcRdCost->getVSOWeight();
     1755      Dist iD = (Dist) m_pcRdCost->getDistPart( piReco, uiStride, piOrg, uiStride, uiWidth, uiHeight );
     1756      Dist iVSO = m_pcRdCost->getDistVS  ( pcCU, uiAbsPartIdx, piReco, uiStride, piOrg, uiStride, uiWidth, uiHeight, false, 0 );
     1757      ruiDist += (iDWeight * iD + iVSOWeight * iVSO) / ( iDWeight + iVSOWeight);
     1758    }
     1759    else
     1760#endif
    17411761    ruiDist = m_pcRdCost->getDistVS  ( pcCU, uiAbsPartIdx, piReco, uiStride, piOrg, uiStride, uiWidth, uiHeight, false, 0 );
    17421762  }
     
    17551775 
    17561776  // encode pred direction + residual data
    1757   m_pcEntropyCoder->encodePredInfo( pcCU, 0, true );
    1758  
     1777  m_pcEntropyCoder->encodePredInfo( pcCU, 0, true
     1778#if PKU_QC_DEPTH_INTRA_UNI_D0195
     1779    ,true
     1780#endif
     1781    );
    17591782  UInt   uiBits = m_pcEntropyCoder->getNumberOfWrittenBits();
    17601783 
     
    59976020    // Reload only contexts required for coding intra mode information
    59986021    m_pcRDGoOnSbacCoder->loadIntraDirModeLuma( m_pppcRDSbacCoder[uiDepth][CI_CURR_BEST] );
     6022#if PKU_QC_DEPTH_INTRA_UNI_D0195
     6023    m_pcRDGoOnSbacCoder->loadDepthMode( m_pppcRDSbacCoder[uiDepth][CI_CURR_BEST] );
     6024#endif
    59996025  }
    60006026 
     
    60026028 
    60036029  m_pcEntropyCoder->resetBits();
    6004   m_pcEntropyCoder->encodeIntraDirModeLuma ( pcCU, uiPartOffset);
     6030  m_pcEntropyCoder->encodeIntraDirModeLuma ( pcCU, uiPartOffset
     6031#if PKU_QC_DEPTH_INTRA_UNI_D0195
     6032    ,true
     6033#endif
     6034    );
    60056035 
    60066036  return m_pcEntropyCoder->getNumberOfWrittenBits();
     
    64126442  Int iMaskStride = ( uiWidth<<1 ) + 1;
    64136443  piMask += iMaskStride+1;
     6444#if QC_DC_PREDICTOR_D0183
     6445  getPredDCs( pcWedgelet->getPattern(), pcWedgelet->getStride(), piMask, iMaskStride, iPredDC1, iPredDC2 );
     6446#else
    64146447  getWedgePredDCs( pcWedgelet, piMask, iMaskStride, iPredDC1, iPredDC2, bAboveAvail, bLeftAvail );
     6448#endif
    64156449
    64166450  riDeltaDC1 = iDC1 - iPredDC1;
     
    65896623#endif
    65906624
     6625#if HHI_DELTADC_DLT_D0035
     6626  riDeltaDC1 = (Int)GetDepthValue2Idx( Clip(iPredDC1 + riDeltaDC1) ) - (Int)GetDepthValue2Idx( iPredDC1 );
     6627  riDeltaDC2 = (Int)GetDepthValue2Idx( Clip(iPredDC2 + riDeltaDC2) ) - (Int)GetDepthValue2Idx( iPredDC2 );
     6628#endif
    65916629}
    65926630#endif
     
    79738011
    79748012  // PredDC Calculation
     8013#if QC_DC_PREDICTOR_D0183
     8014  getPredDCs( pbRegion, uiWidth, piMask+iMaskStride+1, iMaskStride, iPredDC0, iPredDC1 );
     8015#else
    79758016  {
    79768017    UInt uiSum0 = 0;
     
    80128053    iPredDC1 = uiSum1 / uiCount1;
    80138054  }
     8055#endif
    80148056
    80158057  iDeltaDC0 = iDC0 - iPredDC0;
Note: See TracChangeset for help on using the changeset viewer.