Ignore:
Timestamp:
11 Jul 2014, 03:49:39 (10 years ago)
Author:
mediatek-htm
Message:

Integration of Single Depth Mode proposed in JCT3V-I0095.
The MACRO is "MTK_SINGLE_DEPTH_MODE_I0095".

By Yi-Wen Chen (yiwen.chen@…)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-11.2-dev3-MediaTek/source/Lib/TLibDecoder/TDecSbac.cpp

    r976 r983  
    5252, m_cCUSplitFlagSCModel       ( 1,             1,               NUM_SPLIT_FLAG_CTX            , m_contextModels + m_numContextModels, m_numContextModels )
    5353, m_cCUSkipFlagSCModel        ( 1,             1,               NUM_SKIP_FLAG_CTX             , m_contextModels + m_numContextModels, m_numContextModels)
     54#if MTK_SINGLE_DEPTH_MODE_I0095
     55, m_cCUSingleDepthFlagSCModel        ( 1,             1,               NUM_SINGLEDEPTH_FLAG_CTX             , m_contextModels + m_numContextModels, m_numContextModels)
     56, m_cSingleDepthValueSCModel         ( 1,             1,               NUM_SINGLE_DEPTH_VALUE_DATA_CTX      , m_contextModels + m_numContextModels, m_numContextModels)
     57#endif
    5458, m_cCUMergeFlagExtSCModel    ( 1,             1,               NUM_MERGE_FLAG_EXT_CTX        , m_contextModels + m_numContextModels, m_numContextModels)
    5559, m_cCUMergeIdxExtSCModel     ( 1,             1,               NUM_MERGE_IDX_EXT_CTX         , m_contextModels + m_numContextModels, m_numContextModels)
     
    132136  m_cCUSplitFlagSCModel.initBuffer       ( sliceType, qp, (UChar*)INIT_SPLIT_FLAG );
    133137  m_cCUSkipFlagSCModel.initBuffer        ( sliceType, qp, (UChar*)INIT_SKIP_FLAG );
     138#if MTK_SINGLE_DEPTH_MODE_I0095
     139  m_cCUSingleDepthFlagSCModel.initBuffer        ( sliceType, qp, (UChar*)INIT_SINGLEDEPTH_FLAG );
     140  m_cSingleDepthValueSCModel.initBuffer         ( sliceType, qp, (UChar*)INIT_SINGLE_DEPTH_VALUE_DATA );
     141#endif
    134142  m_cCUMergeFlagExtSCModel.initBuffer    ( sliceType, qp, (UChar*)INIT_MERGE_FLAG_EXT );
    135143  m_cCUMergeIdxExtSCModel.initBuffer     ( sliceType, qp, (UChar*)INIT_MERGE_IDX_EXT );
     
    199207  m_cCUSplitFlagSCModel.initBuffer       ( eSliceType, iQp, (UChar*)INIT_SPLIT_FLAG );
    200208  m_cCUSkipFlagSCModel.initBuffer        ( eSliceType, iQp, (UChar*)INIT_SKIP_FLAG );
     209#if MTK_SINGLE_DEPTH_MODE_I0095
     210  m_cCUSingleDepthFlagSCModel.initBuffer        ( eSliceType, iQp, (UChar*)INIT_SINGLEDEPTH_FLAG );
     211  m_cSingleDepthValueSCModel.initBuffer         ( eSliceType, iQp, (UChar*)INIT_SINGLE_DEPTH_VALUE_DATA );
     212#endif
    201213  m_cCUMergeFlagExtSCModel.initBuffer    ( eSliceType, iQp, (UChar*)INIT_MERGE_FLAG_EXT );
    202214  m_cCUMergeIdxExtSCModel.initBuffer     ( eSliceType, iQp, (UChar*)INIT_MERGE_IDX_EXT );
     
    636648#endif
    637649}
    638 
     650#if MTK_SINGLE_DEPTH_MODE_I0095
     651Void TDecSbac::parseSingleDepthMode( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth )
     652{
     653  pcCU->setSingleDepthFlagSubParts( false,        uiAbsPartIdx, uiDepth );
     654  UInt uiSymbol = 0;
     655  m_pcTDecBinIf->decodeBin( uiSymbol, m_cCUSingleDepthFlagSCModel.get( 0, 0, 0 ) );
     656  if( uiSymbol )
     657  {
     658    pcCU->setSingleDepthFlagSubParts( true,        uiAbsPartIdx, uiDepth );
     659    pcCU->setSkipFlagSubParts( false,        uiAbsPartIdx, uiDepth );
     660    pcCU->setSDCFlagSubParts( false,        uiAbsPartIdx, uiDepth );
     661    pcCU->setPredModeSubParts( MODE_INTRA,  uiAbsPartIdx, uiDepth );
     662    pcCU->setPartSizeSubParts( SIZE_2Nx2N, uiAbsPartIdx, uiDepth );
     663    pcCU->setLumaIntraDirSubParts (DC_IDX, uiAbsPartIdx, uiDepth );
     664    pcCU->setSizeSubParts( g_uiMaxCUWidth>>uiDepth, g_uiMaxCUHeight>>uiDepth, uiAbsPartIdx, uiDepth );
     665    pcCU->setMergeFlagSubParts( false , uiAbsPartIdx, 0, uiDepth );
     666    pcCU->setTrIdxSubParts(0, uiAbsPartIdx, uiDepth);
     667    pcCU->setCbfSubParts(0, 1, 1, uiAbsPartIdx, uiDepth);
     668
     669    UInt absValDeltaDC = 0;
     670
     671    UInt uiUnaryIdx = 0;
     672    UInt uiNumCand = MTK_SINGLE_DEPTH_MODE_CANDIDATE_LIST_SIZE;
     673    if ( uiNumCand > 1 )
     674    {
     675      for( ; uiUnaryIdx < uiNumCand - 1; ++uiUnaryIdx )
     676      {
     677        UInt uiSymbol2 = 0;
     678        if ( uiUnaryIdx==0 )
     679        {
     680          m_pcTDecBinIf->decodeBin( uiSymbol2, m_cSingleDepthValueSCModel.get( 0, 0, 0 ) );
     681        }
     682        else
     683        {
     684          m_pcTDecBinIf->decodeBinEP( uiSymbol2);
     685        }
     686        if( uiSymbol2 == 0 )
     687        {
     688          break;
     689        }
     690      }
     691    }
     692    absValDeltaDC = uiUnaryIdx;
     693    pcCU->setSingleDepthValueSubParts((Pel)absValDeltaDC,uiAbsPartIdx, 0, uiDepth);
     694  }
     695}
     696
     697#endif
    639698/** parse merge flag
    640699 * \param pcCU
Note: See TracChangeset for help on using the changeset viewer.