Changeset 724 in 3DVCSoftware for trunk/source/Lib/TLibDecoder/TDecSbac.cpp


Ignore:
Timestamp:
30 Nov 2013, 12:29:49 (10 years ago)
Author:
tech
Message:

Merged HTM-8.2-dev0@723.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/Lib/TLibDecoder/TDecSbac.cpp

    r655 r724  
    8989#if H_3D_DIM_DMM
    9090, m_cDmm1DataSCModel          ( 1,             1,               NUM_DMM1_DATA_CTX             , m_contextModels + m_numContextModels, m_numContextModels)
     91#if !SEC_DMM3_RBC_F0147
    9192, m_cDmm3DataSCModel          ( 1,             1,               NUM_DMM3_DATA_CTX             , m_contextModels + m_numContextModels, m_numContextModels)
     93#endif
    9294#endif
    9395#if H_3D_DIM_RBC
     
    176178#if H_3D_DIM_DMM
    177179  m_cDmm1DataSCModel.initBuffer          ( sliceType, qp, (UChar*)INIT_DMM1_DATA );
     180#if !SEC_DMM3_RBC_F0147
    178181  m_cDmm3DataSCModel.initBuffer          ( sliceType, qp, (UChar*)INIT_DMM3_DATA );
     182#endif
    179183#endif
    180184#if H_3D_DIM_RBC
     
    249253#if H_3D_DIM_DMM
    250254  m_cDmm1DataSCModel.initBuffer          ( eSliceType, iQp, (UChar*)INIT_DMM1_DATA );
     255#if !SEC_DMM3_RBC_F0147
    251256  m_cDmm3DataSCModel.initBuffer          ( eSliceType, iQp, (UChar*)INIT_DMM3_DATA );
     257#endif
    252258#endif
    253259#if H_3D_DIM_RBC
     
    408414}
    409415
     416#if QC_DIM_DELTADC_UNIFY_F0132
     417Void TDecSbac::xParseDimDeltaDC( Pel& rValDeltaDC, UInt uiNumSeg )
     418{
     419  UInt absValDeltaDC = 0;
     420  xReadExGolombLevel( absValDeltaDC, m_cDdcDataSCModel.get(0, 0, 0) );
     421  rValDeltaDC = (Pel)absValDeltaDC + ( uiNumSeg > 1 ? 0 : 1 );
     422
     423  if( rValDeltaDC != 0 )
     424  {
     425    UInt uiSign;
     426    m_pcTDecBinIf->decodeBinEP( uiSign );
     427    if ( uiSign )
     428    {
     429      rValDeltaDC = -rValDeltaDC;
     430    }
     431  }
     432}
     433#else
    410434Void TDecSbac::xParseDimDeltaDC( Pel& rValDeltaDC, UInt dimType )
    411435{
     
    424448  }
    425449}
     450#endif
     451
    426452#if H_3D_DIM_DMM
    427453Void TDecSbac::xParseDmm1WedgeIdx( UInt& ruiTabIdx, Int iNumBit )
     
    435461  ruiTabIdx = uiIdx;
    436462}
    437 
     463#if !SEC_DMM3_RBC_F0147
    438464Void TDecSbac::xParseDmm3WedgeIdx( UInt& ruiIntraIdx, Int iNumBit )
    439465{
     
    446472  ruiIntraIdx = uiIdx;
    447473}
     474#endif
    448475#endif
    449476#if H_3D_DIM_RBC
     
    11401167      pcCU->setDmmWedgeTabIdxSubParts( uiTabIdx, dimType, absPartIdx, depth );
    11411168    } break;
     1169#if !SEC_DMM3_RBC_F0147
    11421170  case( DMM3_IDX ):
    11431171    {
     
    11461174      pcCU->setDmm3IntraTabIdxSubParts( uiIntraIdx, absPartIdx, depth );
    11471175    } break;
     1176#endif
    11481177  case( DMM4_IDX ): break;
    11491178#endif
     
    11571186  }
    11581187
    1159 #if H_3D_DIM_SDC
     1188#if H_3D_DIM_SDC && !QC_DIM_DELTADC_UNIFY_F0132
    11601189  if( pcCU->getSDCFlag(absPartIdx) )
    11611190  {
     
    11731202  {
    11741203#endif
     1204#if QC_DIM_DELTADC_UNIFY_F0132
     1205    if( dimType < DIM_NUM_TYPE || pcCU->getSDCFlag( absPartIdx ) )
     1206#else
    11751207    if( dimType < DIM_NUM_TYPE )
     1208#endif
    11761209    {
    11771210      UInt symbol;
     1211#if QC_DIM_DELTADC_UNIFY_F0132
     1212      UInt uiNumSegments = ( dir == PLANAR_IDX ) ? 1 : 2;
     1213
     1214      if( pcCU->getSDCFlag( absPartIdx ) )
     1215      {
     1216        assert(pcCU->getPartitionSize(absPartIdx)==SIZE_2Nx2N);
     1217        pcCU->setTrIdxSubParts(0, absPartIdx, depth);
     1218        pcCU->setCbfSubParts(1, 1, 1, absPartIdx, depth);
     1219      }
     1220
     1221      m_pcTDecBinIf->decodeBin( symbol, m_cDdcFlagSCModel.get(0, 0, uiNumSegments-1) );
     1222
     1223      if( symbol )
     1224      {
     1225        if( !pcCU->getSDCFlag( absPartIdx ) )
     1226        {
     1227          dir += symbol;
     1228        }
     1229      }
     1230      for( UInt segment = 0; segment < uiNumSegments; segment++ )
     1231      {
     1232        Pel valDeltaDC = 0;
     1233        if( symbol )
     1234        {
     1235          xParseDimDeltaDC( valDeltaDC, uiNumSegments );
     1236        }
     1237
     1238        if( pcCU->getSDCFlag( absPartIdx ) )
     1239        {
     1240          pcCU->setSDCSegmentDCOffset( valDeltaDC, segment, absPartIdx );
     1241        }
     1242        else
     1243        {
     1244          pcCU->setDimDeltaDC( dimType, segment, absPartIdx, valDeltaDC );
     1245        }
     1246      }
     1247#else
    11781248      m_pcTDecBinIf->decodeBin( symbol, m_cDdcFlagSCModel.get(0, 0, (RBC_IDX == dimType) ? 1 : 0) );
    11791249      if( symbol )
     
    11871257        }
    11881258      }
    1189     }
    1190 #if H_3D_DIM_SDC
     1259#endif
     1260    }
     1261#if H_3D_DIM_SDC && !QC_DIM_DELTADC_UNIFY_F0132
    11911262  }
    11921263#endif
     
    12181289  else if( puIdx == 0 )
    12191290  {
     1291#if SEC_DMM3_RBC_F0147
     1292    while( binNum < 1 && symbol )
     1293#else
    12201294    while( binNum < 3 && symbol )
     1295#endif
    12211296    {
    12221297      ctxDepthMode = puIdx*3 + ((binNum >= 2) ? 2 : binNum);
     
    12251300      binNum++;
    12261301    }
     1302#if SEC_DMM3_RBC_F0147
     1303    if( modeCode == 0 ) { dir = 0;                       sdcFlag = 0;}
     1304    else if( modeCode == 1 ) { dir = (2*DMM1_IDX+DIM_OFFSET); sdcFlag = 0;}
     1305#else
    12271306         if( modeCode == 0 ) { dir = 0;                       sdcFlag = 0;}
    12281307    else if( modeCode == 2 ) { dir = (2*DMM1_IDX+DIM_OFFSET); sdcFlag = 0;}
    12291308    else if( modeCode == 6 ) { dir = (2*DMM3_IDX+DIM_OFFSET); sdcFlag = 0;}
    12301309    else if( modeCode == 7 ) { dir = (2* RBC_IDX+DIM_OFFSET); sdcFlag = 0;}
     1310#endif
    12311311  }
    12321312  else
    12331313  {
     1314#if SEC_DMM3_RBC_F0147
     1315    while( binNum < 4 && symbol )
     1316    {
     1317      ctxDepthMode = puIdx*3 + ((binNum >= 2) ? 2 : binNum);
     1318      m_pcTDecBinIf->decodeBin( symbol, m_cDepthIntraModeSCModel.get(0,0,ctxDepthMode) );
     1319      modeCode = (modeCode<<1) + symbol;
     1320      binNum++;
     1321    }
     1322    if ( modeCode == 0 )        { dir =  PLANAR_IDX;             sdcFlag = 1;}
     1323    else if ( modeCode == 2 )   { dir = 5;                       sdcFlag = 0;}
     1324    else if ( modeCode == 6 )   { dir = (2*DMM1_IDX+DIM_OFFSET); sdcFlag = 1;}
     1325    else if ( modeCode == 14 )  { dir = (2*DMM1_IDX+DIM_OFFSET); sdcFlag = 0;}
     1326    else if ( modeCode == 15 )  { dir = (2*DMM4_IDX+DIM_OFFSET); sdcFlag = 0;}
     1327#else
    12341328    UInt maxBinNum = 0;
    12351329    m_pcTDecBinIf->decodeBinEP(symbol);
     
    12631357      else if ( modeCode == 3 )  { dir = (2*DMM4_IDX+DIM_OFFSET); sdcFlag = 0;}
    12641358    }
     1359#endif
    12651360  }
    12661361  pcCU->setLumaIntraDirSubParts( (UChar)dir, absPartIdx, depth );
Note: See TracChangeset for help on using the changeset viewer.