Changeset 443 in 3DVCSoftware for trunk/source/Lib/TLibEncoder/TEncSbac.cpp


Ignore:
Timestamp:
26 May 2013, 15:41:34 (12 years ago)
Author:
tech
Message:
  • Reintegrated branch 6.2-dev0 rev. 442.
  • Changed version number.
  • Added coding results.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/Lib/TLibEncoder/TEncSbac.cpp

    r332 r443  
    4242#include <algorithm>
    4343
    44 #if RWTH_SDC_DLT_B0036
    45 #define GetNumDepthValues()     (pcCU->getSlice()->getSPS()->getNumDepthValues())
    46 #define GetBitsPerDepthValue()  (pcCU->getSlice()->getSPS()->getBitsPerDepthValue())
    47 #endif
    48 
    4944//! \ingroup TLibEncoder
    5045//! \{
     
    7267#if H3D_IVRP
    7368, m_cResPredFlagSCModel       ( 1,             1,               NUM_RES_PRED_FLAG_CTX         , m_contextModels + m_numContextModels, m_numContextModels)
     69#endif
     70#if QC_ARP_D0177
     71, m_cCUPUARPW                 ( 1,             1,               NUM_ARPW_CTX                 , m_contextModels + m_numContextModels, m_numContextModels)
    7472#endif
    7573, m_cCUPartSizeSCModel        ( 1,             1,               NUM_PART_SIZE_CTX             , m_contextModels + m_numContextModels, m_numContextModels)
     
    9694, m_cALFSvlcSCModel           ( 1,             1,               NUM_ALF_SVLC_CTX              , m_contextModels + m_numContextModels, m_numContextModels)
    9795, m_cCUAMPSCModel             ( 1,             1,               NUM_CU_AMP_CTX                , m_contextModels + m_numContextModels, m_numContextModels)
     96#if LGE_SAO_MIGRATION_D0091
     97, m_cSaoMergeSCModel          ( 1,             1,               NUM_SAO_MERGE_FLAG_CTX        , m_contextModels + m_numContextModels, m_numContextModels)
     98, m_cSaoTypeIdxSCModel        ( 1,             1,               NUM_SAO_TYPE_IDX_CTX          , m_contextModels + m_numContextModels, m_numContextModels)
     99#else
    98100, m_cSaoFlagSCModel           ( 1,             1,               NUM_SAO_FLAG_CTX              , m_contextModels + m_numContextModels, m_numContextModels)
    99101, m_cSaoUvlcSCModel           ( 1,             1,               NUM_SAO_UVLC_CTX              , m_contextModels + m_numContextModels, m_numContextModels)
     
    102104, m_cSaoMergeUpSCModel        ( 1,             1,               NUM_SAO_MERGE_UP_FLAG_CTX     , m_contextModels + m_numContextModels, m_numContextModels)
    103105, m_cSaoTypeIdxSCModel        ( 1,             1,               NUM_SAO_TYPE_IDX_CTX          , m_contextModels + m_numContextModels, m_numContextModels)
     106#endif
    104107#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
     108#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    105109, m_cDmmFlagSCModel           ( 1,             1,               NUM_DMM_FLAG_CTX              , m_contextModels + m_numContextModels, m_numContextModels)
    106110, m_cDmmModeSCModel           ( 1,             1,               NUM_DMM_MODE_CTX              , m_contextModels + m_numContextModels, m_numContextModels)
     111#endif
    107112, m_cDmmDataSCModel           ( 1,             1,               NUM_DMM_DATA_CTX              , m_contextModels + m_numContextModels, m_numContextModels)
    108113#endif
     
    114119#endif
    115120#if RWTH_SDC_DLT_B0036
     121#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    116122, 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
    117132, m_cSDCResidualFlagSCModel     ( 1,             2,  SDC_NUM_RESIDUAL_FLAG_CTX  , m_contextModels + m_numContextModels, m_numContextModels)
    118133, m_cSDCResidualSignFlagSCModel ( 1,             2,  SDC_NUM_SIGN_FLAG_CTX      , m_contextModels + m_numContextModels, m_numContextModels)
    119134, m_cSDCResidualSCModel         ( 1,             2,  SDC_NUM_RESIDUAL_CTX       , m_contextModels + m_numContextModels, m_numContextModels)
    120135, m_cSDCPredModeSCModel             ( 1,             3,                 SDC_NUM_PRED_MODE_CTX     , m_contextModels + m_numContextModels, m_numContextModels)
     136#endif
    121137#endif
    122138{
     
    157173#if H3D_IVRP
    158174  m_cResPredFlagSCModel.initBuffer       ( eSliceType, iQp, (UChar*)INIT_RES_PRED_FLAG );
     175#endif
     176#if QC_ARP_D0177
     177  m_cCUPUARPW.initBuffer                 ( eSliceType, iQp, (UChar*)INIT_ARPW );
    159178#endif
    160179  m_cCUPartSizeSCModel.initBuffer        ( eSliceType, iQp, (UChar*)INIT_PART_SIZE );
     
    180199  m_cALFSvlcSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_ALF_SVLC );
    181200  m_cCUTransSubdivFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_TRANS_SUBDIV_FLAG );
     201#if LGE_SAO_MIGRATION_D0091
     202  m_cSaoMergeSCModel.initBuffer          ( eSliceType, iQp, (UChar*)INIT_SAO_MERGE_FLAG );
     203  m_cSaoTypeIdxSCModel.initBuffer        ( eSliceType, iQp, (UChar*)INIT_SAO_TYPE_IDX );
     204#else
    182205  m_cSaoFlagSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_SAO_FLAG );
    183206  m_cSaoUvlcSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_SAO_UVLC );
     
    186209  m_cSaoMergeUpSCModel.initBuffer        ( eSliceType, iQp, (UChar*)INIT_SAO_MERGE_UP_FLAG );
    187210  m_cSaoTypeIdxSCModel.initBuffer        ( eSliceType, iQp, (UChar*)INIT_SAO_TYPE_IDX );
     211#endif
    188212#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
     213#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    189214  m_cDmmFlagSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_DMM_FLAG );
    190215  m_cDmmModeSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_DMM_MODE );
     216#endif
    191217  m_cDmmDataSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_DMM_DATA );
    192218#endif
     
    198224#endif
    199225#if RWTH_SDC_DLT_B0036
     226#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    200227  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
    201232  m_cSDCResidualFlagSCModel.initBuffer      ( eSliceType, iQp, (UChar*)INIT_SDC_RESIDUAL_FLAG );
    202233  m_cSDCResidualSCModel.initBuffer          ( eSliceType, iQp, (UChar*)INIT_SDC_RESIDUAL );
     234#if !RWTH_SDC_CTX_SIMPL_D0032
    203235  m_cSDCResidualSignFlagSCModel.initBuffer  ( eSliceType, iQp, (UChar*)INIT_SDC_SIGN_FLAG );
     236#endif
    204237  m_cSDCPredModeSCModel.initBuffer              ( eSliceType, iQp, (UChar*)INIT_SDC_PRED_MODE );
    205238#endif
     
    266299      curCost += m_cALFSvlcSCModel.calcCost           ( curSliceType, qp, (UChar*)INIT_ALF_SVLC );
    267300      curCost += m_cCUTransSubdivFlagSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_TRANS_SUBDIV_FLAG );
     301#if LGE_SAO_MIGRATION_D0091
     302      curCost += m_cSaoMergeSCModel.calcCost          ( curSliceType, qp, (UChar*)INIT_SAO_MERGE_FLAG );
     303      curCost += m_cSaoTypeIdxSCModel.calcCost        ( curSliceType, qp, (UChar*)INIT_SAO_TYPE_IDX );
     304#else
    268305      curCost += m_cSaoFlagSCModel.calcCost           ( curSliceType, qp, (UChar*)INIT_SAO_FLAG );
    269306      curCost += m_cSaoUvlcSCModel.calcCost           ( curSliceType, qp, (UChar*)INIT_SAO_UVLC );
     
    272309      curCost += m_cSaoMergeUpSCModel.calcCost        ( curSliceType, qp, (UChar*)INIT_SAO_MERGE_UP_FLAG );
    273310      curCost += m_cSaoTypeIdxSCModel.calcCost        ( curSliceType, qp, (UChar*)INIT_SAO_TYPE_IDX );
     311#endif
    274312
    275313      if (curCost < bestCost)
     
    310348#if H3D_IVRP
    311349  m_cResPredFlagSCModel.initBuffer       ( eSliceType, iQp, (UChar*)INIT_RES_PRED_FLAG );
     350#endif
     351#if QC_ARP_D0177
     352  m_cCUPUARPW.initBuffer                 ( eSliceType, iQp, (UChar*)INIT_ARPW );
    312353#endif
    313354  m_cCUPartSizeSCModel.initBuffer        ( eSliceType, iQp, (UChar*)INIT_PART_SIZE );
     
    333374  m_cALFSvlcSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_ALF_SVLC );
    334375  m_cCUTransSubdivFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_TRANS_SUBDIV_FLAG );
     376#if LGE_SAO_MIGRATION_D0091
     377  m_cSaoMergeSCModel.initBuffer          ( eSliceType, iQp, (UChar*)INIT_SAO_MERGE_FLAG );
     378  m_cSaoTypeIdxSCModel.initBuffer        ( eSliceType, iQp, (UChar*)INIT_SAO_TYPE_IDX );
     379#else
    335380  m_cSaoFlagSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_SAO_FLAG );
    336381  m_cSaoUvlcSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_SAO_UVLC );
     
    339384  m_cSaoMergeUpSCModel.initBuffer        ( eSliceType, iQp, (UChar*)INIT_SAO_MERGE_UP_FLAG );
    340385  m_cSaoTypeIdxSCModel.initBuffer        ( eSliceType, iQp, (UChar*)INIT_SAO_TYPE_IDX );
     386#endif
    341387#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
     388#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    342389  m_cDmmFlagSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_DMM_FLAG );
    343390  m_cDmmModeSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_DMM_MODE );
     391#endif
    344392  m_cDmmDataSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_DMM_DATA );
    345393#endif
    346394#if RWTH_SDC_DLT_B0036
     395#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    347396  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
    348401  m_cSDCResidualFlagSCModel.initBuffer      ( eSliceType, iQp, (UChar*)INIT_SDC_RESIDUAL_FLAG );
    349402  m_cSDCResidualSCModel.initBuffer          ( eSliceType, iQp, (UChar*)INIT_SDC_RESIDUAL );
     403#if !RWTH_SDC_CTX_SIMPL_D0032
    350404  m_cSDCResidualSignFlagSCModel.initBuffer  ( eSliceType, iQp, (UChar*)INIT_SDC_SIGN_FLAG );
     405#endif
    351406  m_cSDCPredModeSCModel.initBuffer              ( eSliceType, iQp, (UChar*)INIT_SDC_PRED_MODE );
    352407#endif
     
    542597}
    543598
    544 
     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
    545608Void  TEncSbac::store( TEncSbac* pDest)
    546609{
     
    840903}
    841904#endif
    842 
     905#if QC_ARP_D0177
     906Void TEncSbac::codeARPW( TComDataCU* pcCU, UInt uiAbsPartIdx )
     907{
     908  Int nW = pcCU->getARPW( uiAbsPartIdx );
     909  Int nMaxW = pcCU->getSlice()->getARPStepNum() - 1;
     910  assert( 0 <= nW && nW <= nMaxW );
     911  assert(nMaxW > 0);
     912  if( nMaxW > 0 )
     913  {
     914    Int nOffset = pcCU->getCTXARPWFlag(uiAbsPartIdx);
     915    assert( 0 <= nOffset && nOffset <= 2 );
     916    Int nBinNum = nW + ( nW != nMaxW );
     917    m_pcBinIf->encodeBin( nW != 0 , m_cCUPUARPW.get( 0, 0, 0 + nOffset ) );
     918    if( nBinNum > 1 )
     919       m_pcBinIf->encodeBin( nW == nMaxW , m_cCUPUARPW.get( 0, 0, 3 ) );
     920  }
     921}
     922#endif
    843923Void TEncSbac::codeSplitFlag   ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth )
    844924{
     
    9661046}
    9671047#endif
    968 
    969 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                                   )
    9701190{
    9711191  UInt uiDir         = pcCU->getLumaIntraDir( uiAbsPartIdx );
    9721192
     1193#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    9731194#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
    9741195  if( pcCU->getSlice()->getSPS()->getUseDMM() && pcCU->getWidth( uiAbsPartIdx ) <= DMM_WEDGEMODEL_MAX_SIZE )
     
    10701291  }
    10711292#endif
    1072  
     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
    10731301  Int uiPreds[3] = {-1, -1, -1};
    10741302  Int uiPredNum = pcCU->getIntraDirLumaPredictor(uiAbsPartIdx, uiPreds); 
     
    11161344
    11171345    m_pcBinIf->encodeBinsEP( uiDir, 5 );
     1346#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    11181347#if LGE_EDGE_INTRA_A0070
    11191348  if (bCodeEdgeIntra)
    11201349    if (uiDir == 31) m_pcBinIf->encodeBinsEP(0,1);
    11211350#endif
     1351#endif
    11221352   }
     1353#if PKU_QC_DEPTH_INTRA_UNI_D0195
     1354   }
     1355#else
    11231356#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
    11241357  }
    11251358#endif
     1359#endif
     1360
    11261361  return;
    11271362}
     
    18872122  }
    18882123}
    1889 
     2124#if LGE_SAO_MIGRATION_D0091
     2125Void TEncSbac::codeSAOSign( UInt code )
     2126{
     2127  m_pcBinIf->encodeBinEP( code );
     2128}
     2129
     2130Void TEncSbac::codeSaoMaxUvlc    ( UInt code, UInt maxSymbol )
     2131{
     2132  if (maxSymbol == 0)
     2133  {
     2134    return;
     2135  }
     2136
     2137  Int i;
     2138  Bool bCodeLast = ( maxSymbol > code );
     2139
     2140  if ( code == 0 )
     2141  {
     2142    m_pcBinIf->encodeBinEP( 0 );
     2143  }
     2144  else
     2145  {
     2146    m_pcBinIf->encodeBinEP( 1 );
     2147    for ( i=0; i<code-1; i++ )
     2148    {
     2149      m_pcBinIf->encodeBinEP( 1 );
     2150    }
     2151    if( bCodeLast )
     2152    {
     2153      m_pcBinIf->encodeBinEP( 0 );
     2154    }
     2155  }
     2156}
     2157
     2158/** Code SAO EO class or BO band position
     2159 * \param uiLength
     2160 * \param uiCode
     2161 */
     2162Void TEncSbac::codeSaoUflc       ( UInt uiLength, UInt uiCode )
     2163{
     2164   m_pcBinIf->encodeBinsEP ( uiCode, uiLength );
     2165}
     2166/** Code SAO merge flags
     2167 * \param uiCode
     2168 * \param uiCompIdx
     2169 */
     2170Void TEncSbac::codeSaoMerge       ( UInt uiCode )
     2171{
     2172  if (uiCode == 0)
     2173  {
     2174    m_pcBinIf->encodeBin(0,  m_cSaoMergeSCModel.get( 0, 0, 0 ));
     2175  }
     2176  else
     2177  {
     2178    m_pcBinIf->encodeBin(1,  m_cSaoMergeSCModel.get( 0, 0, 0 ));
     2179  }
     2180}
     2181/** Code SAO type index
     2182 * \param uiCode
     2183 */
     2184Void TEncSbac::codeSaoTypeIdx       ( UInt uiCode)
     2185{
     2186  if (uiCode == 0)
     2187  {
     2188    m_pcBinIf->encodeBin( 0, m_cSaoTypeIdxSCModel.get( 0, 0, 0 ) );
     2189  }
     2190  else
     2191  {
     2192    m_pcBinIf->encodeBin( 1, m_cSaoTypeIdxSCModel.get( 0, 0, 0 ) );
     2193    m_pcBinIf->encodeBinEP( uiCode <= 4 ? 1 : 0 ); //determine edge or band
     2194  }
     2195}
     2196#else
    18902197Void TEncSbac::codeSaoFlag       ( UInt uiCode )
    18912198{
     
    20032310  }
    20042311}
     2312#endif
    20052313/*!
    20062314 ****************************************************************************
     
    23972705
    23982706#if RWTH_SDC_DLT_B0036
     2707#if !PKU_QC_DEPTH_INTRA_UNI_D0195
    23992708Void TEncSbac::codeSDCPredMode( TComDataCU* pcCU, UInt uiAbsPartIdx )
    24002709{
     
    24112720  {
    24122721    UInt uiBit = (uiPredMode == g_auiSDCPredModes[uiMPModeIdx]) ? 1 : 0;
     2722#if INTEL_SDC64_D0193
     2723    if( !(pcCU->getWidth(uiAbsPartIdx) == 64 && i == 1))
     2724#endif
    24132725    m_pcBinIf->encodeBin( uiBit, m_cSDCPredModeSCModel.get( 0, i, uiCtx ) );
    24142726   
     
    24372749 
    24382750}
     2751#endif
    24392752
    24402753Void TEncSbac::codeSDCResidualData ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiSegment )
     
    24502763  UInt uiSign     = segmentDCOffset < 0 ? 1 : 0;
    24512764  UInt uiAbsIdx   = abs(segmentDCOffset);
     2765#if !LGE_CONCATENATE_D0141
    24522766  UInt uiBit = 0;
    2453  
    2454   UInt uiMaxResidualBits  = GetBitsPerDepthValue();
     2767#endif
     2768 
     2769  UInt uiMaxResidualBits  = pcCU->getSlice()->getSPS()->getBitsPerDepthValue();
    24552770  assert( uiMaxResidualBits <= g_uiBitDepth );
    24562771 
    24572772  // residual flag
     2773#if RWTH_SDC_CTX_SIMPL_D0032
     2774  m_pcBinIf->encodeBin( uiResidual, m_cSDCResidualFlagSCModel.get( 0, 0, 0 ) );
     2775#else
    24582776  m_pcBinIf->encodeBin( uiResidual, m_cSDCResidualFlagSCModel.get( 0, uiSegment, 0 ) ); //TODO depthmap: more sophisticated context selection
     2777#endif
    24592778 
    24602779  if (uiResidual)
    24612780  {
    24622781    // encode sign bit of residual
     2782#if RWTH_SDC_CTX_SIMPL_D0032
     2783    m_pcBinIf->encodeBinEP( uiSign );
     2784#else
    24632785    m_pcBinIf->encodeBin( uiSign, m_cSDCResidualSignFlagSCModel.get( 0, uiSegment, 0 ) ); //TODO depthmap: more sophisticated context selection
     2786#endif
    24642787       
    2465     assert(uiAbsIdx < GetNumDepthValues());
     2788    UInt uiNumDepthValues = pcCU->getSlice()->getSPS()->getNumDepthValues();
     2789    assert(uiAbsIdx < uiNumDepthValues);
    24662790   
    24672791    // encode residual magnitude
    24682792    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
    24692824    for (Int i=0; i<uiMaxResidualBits; i++)
    24702825    {
    24712826      uiBit = (uiAbsIdx & (1<<i))>>i;
    24722827     
     2828#if RWTH_SDC_CTX_SIMPL_D0032
     2829      m_pcBinIf->encodeBin( uiBit, m_cSDCResidualSCModel.get( 0, 0, i ) );
     2830#else
    24732831      m_pcBinIf->encodeBin( uiBit, m_cSDCResidualSCModel.get( 0, uiSegment, i ) ); //TODO depthmap: more sophisticated context selection
    2474     }
     2832#endif
     2833    }
     2834#endif
    24752835   
    24762836  }
Note: See TracChangeset for help on using the changeset viewer.