Ignore:
Timestamp:
20 Jan 2014, 04:34:18 (10 years ago)
Author:
qualcomm
Message:

integration of JCT3V-G0122 (generalize SDC to all depth intra modes) by Qualcomm.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-9.3-dev3-Qualcomm/source/Lib/TLibDecoder/TDecSbac.cpp

    r773 r781  
    8787, m_cDdcFlagSCModel           ( 1,             1,               NUM_DDC_FLAG_CTX              , m_contextModels + m_numContextModels, m_numContextModels)
    8888, m_cDdcDataSCModel           ( 1,             1,               NUM_DDC_DATA_CTX              , m_contextModels + m_numContextModels, m_numContextModels)
     89#if QC_GENERIC_SDC_G0122
     90, m_cAngleFlagSCModel         ( 1,             1,               NUM_ANGLE_FLAG_CTX            , m_contextModels + m_numContextModels, m_numContextModels)
     91, m_cIntraSdcFlagSCModel      ( 1,             1,               NUM_INTRASDC_FLAG_CTX         , m_contextModels + m_numContextModels, m_numContextModels)
     92#endif
    8993#if H_3D_DIM_DMM
    9094, m_cDmm1DataSCModel          ( 1,             1,               NUM_DMM1_DATA_CTX             , m_contextModels + m_numContextModels, m_numContextModels)
     
    170174  m_cDdcFlagSCModel.initBuffer           ( sliceType, qp, (UChar*)INIT_DDC_FLAG );
    171175  m_cDdcDataSCModel.initBuffer           ( sliceType, qp, (UChar*)INIT_DDC_DATA );
     176#if QC_GENERIC_SDC_G0122
     177  m_cAngleFlagSCModel.initBuffer         ( sliceType, qp, (UChar*)INIT_ANGLE_FLAG );
     178  m_cIntraSdcFlagSCModel.initBuffer      ( sliceType, qp, (UChar*)INIT_INTRASDC_FLAG );
     179#endif
    172180#if H_3D_DIM_DMM
    173181  m_cDmm1DataSCModel.initBuffer          ( sliceType, qp, (UChar*)INIT_DMM1_DATA );
     
    239247  m_cDdcFlagSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_DDC_FLAG );
    240248  m_cDdcDataSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_DDC_DATA );
     249#if QC_GENERIC_SDC_G0122
     250  m_cAngleFlagSCModel.initBuffer         ( eSliceType, iQp, (UChar*)INIT_ANGLE_FLAG );
     251  m_cIntraSdcFlagSCModel.initBuffer      ( eSliceType, iQp, (UChar*)INIT_INTRASDC_FLAG );
     252#endif
    241253#if H_3D_DIM_DMM
    242254  m_cDmm1DataSCModel.initBuffer          ( eSliceType, iQp, (UChar*)INIT_DMM1_DATA );
     
    925937    if( pcCU->getLumaIntraDir( absPartIdx+partOffset*j ) < NUM_INTRA_MODE )
    926938#if H_3D_DIM_SDC
     939#if QC_GENERIC_SDC_G0122
     940      if( 1 )
     941#else
    927942      if( !pcCU->getSDCFlag( absPartIdx+partOffset*j ) )
     943#endif
    928944#endif
    929945    {
     
    943959    if( pcCU->getLumaIntraDir( absPartIdx+partOffset*j ) < NUM_INTRA_MODE )
    944960#if H_3D_DIM_SDC
     961#if QC_GENERIC_SDC_G0122
     962      if( 1 )
     963#else
    945964      if( !pcCU->getSDCFlag( absPartIdx+partOffset*j ) )
     965#endif
    946966#endif
    947967    {
     
    10491069  {
    10501070    UInt symbol;
     1071#if QC_GENERIC_SDC_G0122
     1072    UInt uiNumSegments = isDimMode( dir ) ? 2 : 1;
     1073#else
    10511074    UInt uiNumSegments = ( dir == PLANAR_IDX ) ? 1 : 2;
     1075#endif
    10521076
    10531077    if( pcCU->getSDCFlag( absPartIdx ) )
     
    10891113}
    10901114
     1115#if QC_GENERIC_SDC_G0122
     1116Void TDecSbac::parseIntraDepthMode( TComDataCU* pcCU, UInt absPartIdx, UInt depth )
     1117{
     1118  UInt uiSymbol, uiIsDimMode;
     1119
     1120  if( ( pcCU->getSlice()->getSPS()->getMaxCUWidth() >> pcCU->getDepth( absPartIdx ) ) < 64 ) //DMM and HEVC intra modes are both allowed
     1121  {
     1122    m_pcTDecBinIf->decodeBin( uiSymbol, m_cAngleFlagSCModel.get( 0, 0, pcCU->getCtxAngleFlag( absPartIdx ) ) );
     1123  }
     1124  else
     1125  {
     1126    uiSymbol = 1;
     1127  }
     1128  uiIsDimMode = uiSymbol ? 0 : 1;
     1129  pcCU->setLumaIntraDirSubParts( 0, absPartIdx, depth );
     1130
     1131  if( pcCU->getPartitionSize( absPartIdx ) == SIZE_2Nx2N ) //SDC is allowed only in this case
     1132  {
     1133    m_pcTDecBinIf->decodeBin( uiSymbol, m_cIntraSdcFlagSCModel.get( 0, 0, pcCU->getCtxSDCFlag( absPartIdx ) ) );
     1134  }
     1135  else
     1136  {
     1137    uiSymbol = 0;
     1138  }
     1139
     1140  pcCU->setSDCFlagSubParts( uiSymbol, absPartIdx, depth );
     1141
     1142  //decode DMM index
     1143  if( uiIsDimMode )
     1144  {
     1145    m_pcTDecBinIf->decodeBin( uiSymbol, m_cDepthIntraModeSCModel.get( 0, 0, 0 ) );
     1146    if( !uiSymbol )
     1147    {
     1148      pcCU->setLumaIntraDirSubParts( ( 2 * DMM1_IDX + DIM_OFFSET ), absPartIdx, depth );
     1149    }
     1150    else
     1151    {
     1152      pcCU->setLumaIntraDirSubParts( ( 2 * DMM4_IDX + DIM_OFFSET ), absPartIdx, depth );
     1153    }
     1154  }
     1155}
     1156#else
    10911157Void TDecSbac::parseIntraDepthMode( TComDataCU* pcCU, UInt absPartIdx, UInt depth )
    10921158{
     
    11511217#endif
    11521218}
     1219#endif
    11531220#endif
    11541221
Note: See TracChangeset for help on using the changeset viewer.