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


Ignore:
Timestamp:
18 Nov 2012, 22:11:37 (12 years ago)
Author:
tech
Message:

Reintegrated branch 4.1-dev0 Rev. 188.

File:
1 edited

Legend:

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

    r100 r189  
    3838#include "TDecSbac.h"
    3939
     40#if RWTH_SDC_DLT_B0036
     41#define GetNumDepthValues()     (pcCU->getSlice()->getSPS()->getNumDepthValues())
     42#define GetBitsPerDepthValue()  (pcCU->getSlice()->getSPS()->getBitsPerDepthValue())
     43#endif
     44
    4045//! \ingroup TLibDecoder
    4146//! \{
     
    5257, m_cCUSplitFlagSCModel       ( 1,             1,               NUM_SPLIT_FLAG_CTX            , m_contextModels + m_numContextModels, m_numContextModels )
    5358, m_cCUSkipFlagSCModel        ( 1,             1,               NUM_SKIP_FLAG_CTX             , m_contextModels + m_numContextModels, m_numContextModels)
     59#if LGE_ILLUCOMP_B0045
     60, m_cCUICFlagSCModel          ( 1,             1,               NUM_IC_FLAG_CTX               , m_contextModels + m_numContextModels, m_numContextModels)
     61#endif
    5462, m_cCUMergeFlagExtSCModel    ( 1,             1,               NUM_MERGE_FLAG_EXT_CTX        , m_contextModels + m_numContextModels, m_numContextModels)
    5563, m_cCUMergeIdxExtSCModel     ( 1,             1,               NUM_MERGE_IDX_EXT_CTX         , m_contextModels + m_numContextModels, m_numContextModels)
     
    98106, m_cDmmDataSCModel           ( 1,             1,               NUM_DMM_DATA_CTX              , m_contextModels + m_numContextModels, m_numContextModels)
    99107#endif
    100 #if LGE_EDGE_INTRA
     108#if LGE_EDGE_INTRA_A0070
    101109, m_cEdgeIntraSCModel         ( 1,             1,               NUM_EDGE_INTRA_CTX            , m_contextModels + m_numContextModels, m_numContextModels)
    102110#if LGE_EDGE_INTRA_DELTA_DC
    103111, m_cEdgeIntraDeltaDCSCModel  ( 1,             1,               NUM_EDGE_INTRA_DELTA_DC_CTX   , m_contextModels + m_numContextModels, m_numContextModels)
    104112#endif
     113#endif
     114#if RWTH_SDC_DLT_B0036
     115, m_cSDCFlagSCModel             ( 1,             1,                 SDC_NUM_FLAG_CTX           , m_contextModels + m_numContextModels, m_numContextModels)
     116, m_cSDCResidualFlagSCModel     ( 1,             2,  SDC_NUM_RESIDUAL_FLAG_CTX  , m_contextModels + m_numContextModels, m_numContextModels)
     117, m_cSDCResidualSignFlagSCModel ( 1,             2,  SDC_NUM_SIGN_FLAG_CTX      , m_contextModels + m_numContextModels, m_numContextModels)
     118, m_cSDCResidualSCModel         ( 1,             2,  SDC_NUM_RESIDUAL_CTX       , m_contextModels + m_numContextModels, m_numContextModels)
     119, m_cSDCPredModeSCModel             ( 1,             3,                 SDC_NUM_PRED_MODE_CTX     , m_contextModels + m_numContextModels, m_numContextModels)
    105120#endif
    106121{
     
    146161  m_cCUSplitFlagSCModel.initBuffer       ( sliceType, qp, (UChar*)INIT_SPLIT_FLAG );
    147162  m_cCUSkipFlagSCModel.initBuffer        ( sliceType, qp, (UChar*)INIT_SKIP_FLAG );
     163#if LGE_ILLUCOMP_B0045
     164  m_cCUICFlagSCModel.initBuffer          ( sliceType, qp, (UChar*)INIT_IC_FLAG );
     165#endif
    148166  m_cCUMergeFlagExtSCModel.initBuffer    ( sliceType, qp, (UChar*)INIT_MERGE_FLAG_EXT );
    149167  m_cCUMergeIdxExtSCModel.initBuffer     ( sliceType, qp, (UChar*)INIT_MERGE_IDX_EXT );
     
    188206
    189207  m_cCUTransSubdivFlagSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_TRANS_SUBDIV_FLAG );
    190 #if LGE_EDGE_INTRA
     208#if LGE_EDGE_INTRA_A0070
    191209  m_cEdgeIntraSCModel.initBuffer         ( sliceType, qp, (UChar*)INIT_EDGE_INTRA );
    192210#if LGE_EDGE_INTRA_DELTA_DC
     
    199217  m_cDmmModeSCModel.initBuffer           ( sliceType, qp, (UChar*)INIT_DMM_MODE );
    200218  m_cDmmDataSCModel.initBuffer           ( sliceType, qp, (UChar*)INIT_DMM_DATA );
     219#endif
     220#if RWTH_SDC_DLT_B0036
     221  m_cSDCFlagSCModel.initBuffer              ( sliceType, qp, (UChar*)INIT_SDC_FLAG );
     222  m_cSDCResidualFlagSCModel.initBuffer      ( sliceType, qp, (UChar*)INIT_SDC_RESIDUAL_FLAG );
     223  m_cSDCResidualSCModel.initBuffer          ( sliceType, qp, (UChar*)INIT_SDC_RESIDUAL );
     224  m_cSDCResidualSignFlagSCModel.initBuffer  ( sliceType, qp, (UChar*)INIT_SDC_SIGN_FLAG );
     225  m_cSDCPredModeSCModel.initBuffer              ( sliceType, qp, (UChar*)INIT_SDC_PRED_MODE );
    201226#endif
    202227 
     
    230255  m_cCUSplitFlagSCModel.initBuffer       ( eSliceType, iQp, (UChar*)INIT_SPLIT_FLAG );
    231256  m_cCUSkipFlagSCModel.initBuffer        ( eSliceType, iQp, (UChar*)INIT_SKIP_FLAG );
     257#if LGE_ILLUCOMP_B0045
     258  m_cCUICFlagSCModel.initBuffer          ( eSliceType, iQp, (UChar*)INIT_IC_FLAG );
     259#endif
    232260  m_cCUMergeFlagExtSCModel.initBuffer    ( eSliceType, iQp, (UChar*)INIT_MERGE_FLAG_EXT );
    233261  m_cCUMergeIdxExtSCModel.initBuffer     ( eSliceType, iQp, (UChar*)INIT_MERGE_IDX_EXT );
     
    276304  m_cDmmDataSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_DMM_DATA );
    277305#endif
     306#if RWTH_SDC_DLT_B0036
     307  m_cSDCFlagSCModel.initBuffer              ( eSliceType, iQp, (UChar*)INIT_SDC_FLAG );
     308  m_cSDCResidualFlagSCModel.initBuffer      ( eSliceType, iQp, (UChar*)INIT_SDC_RESIDUAL_FLAG );
     309  m_cSDCResidualSCModel.initBuffer          ( eSliceType, iQp, (UChar*)INIT_SDC_RESIDUAL );
     310  m_cSDCResidualSignFlagSCModel.initBuffer  ( eSliceType, iQp, (UChar*)INIT_SDC_SIGN_FLAG );
     311  m_cSDCPredModeSCModel.initBuffer              ( eSliceType, iQp, (UChar*)INIT_SDC_PRED_MODE );
     312#endif
    278313
    279314  m_pcTDecBinIf->start();
     
    578613}
    579614
     615#if LGE_ILLUCOMP_B0045
     616/** parse illumination compensation flag
     617 * \param pcCU
     618 * \param uiAbsPartIdx
     619 * \param uiDepth
     620 * \returns Void
     621 */
     622Void TDecSbac::parseICFlag( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth )
     623{
     624  UInt uiSymbol = 0;
     625  UInt uiCtxIC = pcCU->getCtxICFlag( uiAbsPartIdx );
     626  m_pcTDecBinIf->decodeBin( uiSymbol, m_cCUICFlagSCModel.get( 0, 0, uiCtxIC ) );
     627  DTRACE_CABAC_VL( g_nSymbolCounter++ );
     628  DTRACE_CABAC_T( "\tICFlag" );
     629  DTRACE_CABAC_T( "\tuiCtxIC: ");
     630  DTRACE_CABAC_V( uiCtxIC );
     631  DTRACE_CABAC_T( "\tuiSymbol: ");
     632  DTRACE_CABAC_V( uiSymbol );
     633  DTRACE_CABAC_T( "\n");
     634 
     635  pcCU->setICFlagSubParts( uiSymbol ? true : false , uiAbsPartIdx, 0, uiDepth );
     636}
     637#endif
     638
     639
    580640/** parse merge flag
    581641 * \param pcCU
     
    693753 
    694754  UInt uiSymbol;
    695   m_pcTDecBinIf->decodeBin( uiSymbol, m_cCUSplitFlagSCModel.get( 0, 0, pcCU->getCtxSplitFlag( uiAbsPartIdx, uiDepth ) ) );
    696   DTRACE_CABAC_VL( g_nSymbolCounter++ )
    697   DTRACE_CABAC_T( "\tSplitFlag\n" )
     755
     756#if OL_QTLIMIT_PREDCODING_B0068
     757  Bool bParseSplitFlag    = true;
     758
     759  TComSPS *sps            = pcCU->getPic()->getSlice(0)->getSPS();
     760  TComPic *pcTexture      = pcCU->getSlice()->getTexturePic();
     761  Bool bDepthMapDetect    = (pcTexture != NULL);
     762  Bool bIntraSliceDetect  = (pcCU->getSlice()->getSliceType() == I_SLICE);
     763
     764  if(bDepthMapDetect && !bIntraSliceDetect && sps->getUseQTLPC())
     765  {
     766    TComDataCU *pcTextureCU = pcTexture->getCU(pcCU->getAddr());
     767    assert(pcTextureCU->getDepth(uiAbsPartIdx) >= uiDepth);
     768    bParseSplitFlag         = (pcTextureCU->getDepth(uiAbsPartIdx) > uiDepth);
     769  }
     770
     771  if(bParseSplitFlag)
     772  {
     773#endif
     774    m_pcTDecBinIf->decodeBin( uiSymbol, m_cCUSplitFlagSCModel.get( 0, 0, pcCU->getCtxSplitFlag( uiAbsPartIdx, uiDepth ) ) );
     775    DTRACE_CABAC_VL( g_nSymbolCounter++ )
     776    DTRACE_CABAC_T( "\tSplitFlag\n" )
     777#if OL_QTLIMIT_PREDCODING_B0068
     778  }
     779  else
     780    uiSymbol = 0;
     781#endif
     782
    698783  pcCU->setDepthSubParts( uiDepth + uiSymbol, uiAbsPartIdx );
    699784 
     
    711796  UInt uiSymbol, uiMode = 0;
    712797  PartSize eMode;
     798
     799#if OL_QTLIMIT_PREDCODING_B0068
     800  Bool bParsePartSize    = true;
     801  TComSPS *sps           = pcCU->getPic()->getSlice(0)->getSPS();
     802  TComPic *pcTexture     = pcCU->getSlice()->getTexturePic();
     803  Bool bDepthMapDetect   = (pcTexture != NULL);
     804  Bool bIntraSliceDetect = (pcCU->getSlice()->getSliceType() == I_SLICE);
     805
     806  if(bDepthMapDetect && !bIntraSliceDetect && sps->getUseQTLPC())
     807  {
     808    TComDataCU *pcTextureCU = pcTexture->getCU(pcCU->getAddr());
     809    assert(pcTextureCU->getDepth(uiAbsPartIdx) >= uiDepth);
     810    if (pcTextureCU->getDepth(uiAbsPartIdx) == uiDepth && pcTextureCU->getPartitionSize( uiAbsPartIdx ) != SIZE_NxN)
     811    {
     812      bParsePartSize = false;
     813      eMode          = SIZE_2Nx2N;
     814    }
     815  }
     816#endif
    713817 
    714818  if ( pcCU->isIntra( uiAbsPartIdx ) )
    715819  {
    716     uiSymbol = 1;
    717     if( uiDepth == g_uiMaxCUDepth - g_uiAddCUDepth )
    718     {
    719       m_pcTDecBinIf->decodeBin( uiSymbol, m_cCUPartSizeSCModel.get( 0, 0, 0) );
    720     }
    721     eMode = uiSymbol ? SIZE_2Nx2N : SIZE_NxN;
     820#if OL_QTLIMIT_PREDCODING_B0068
     821    if(bParsePartSize)
     822    {
     823#endif
     824      uiSymbol = 1;
     825      if( uiDepth == g_uiMaxCUDepth - g_uiAddCUDepth )
     826      {
     827        m_pcTDecBinIf->decodeBin( uiSymbol, m_cCUPartSizeSCModel.get( 0, 0, 0) );
     828      }
     829      eMode = uiSymbol ? SIZE_2Nx2N : SIZE_NxN;
     830#if OL_QTLIMIT_PREDCODING_B0068
     831    }
     832#endif
    722833    UInt uiTrLevel = 0;   
    723834    UInt uiWidthInBit  = g_aucConvertToBit[pcCU->getWidth(uiAbsPartIdx)]+2;
     
    735846  else
    736847  {
    737     UInt uiMaxNumBits = 2;
    738     if( uiDepth == g_uiMaxCUDepth - g_uiAddCUDepth && !( pcCU->getSlice()->getSPS()->getDisInter4x4() && (g_uiMaxCUWidth>>uiDepth) == 8 && (g_uiMaxCUHeight>>uiDepth) == 8 ) )
    739     {
    740       uiMaxNumBits ++;
    741     }
    742     for ( UInt ui = 0; ui < uiMaxNumBits; ui++ )
    743     {
    744       m_pcTDecBinIf->decodeBin( uiSymbol, m_cCUPartSizeSCModel.get( 0, 0, ui) );
    745       if ( uiSymbol )
    746       {
    747         break;
    748       }
    749       uiMode++;
    750     }
    751     eMode = (PartSize) uiMode;
    752     if ( pcCU->getSlice()->getSPS()->getAMPAcc( uiDepth ) )
    753     {
    754       if (eMode == SIZE_2NxN)
    755       {
     848#if OL_QTLIMIT_PREDCODING_B0068
     849    if(bParsePartSize)
     850    {
     851#endif
     852      UInt uiMaxNumBits = 2;
     853      if( uiDepth == g_uiMaxCUDepth - g_uiAddCUDepth && !( pcCU->getSlice()->getSPS()->getDisInter4x4() && (g_uiMaxCUWidth>>uiDepth) == 8 && (g_uiMaxCUHeight>>uiDepth) == 8 ) )
     854      {
     855        uiMaxNumBits ++;
     856      }
     857      for ( UInt ui = 0; ui < uiMaxNumBits; ui++ )
     858      {
     859        m_pcTDecBinIf->decodeBin( uiSymbol, m_cCUPartSizeSCModel.get( 0, 0, ui) );
     860        if ( uiSymbol )
     861        {
     862          break;
     863        }
     864        uiMode++;
     865      }
     866      eMode = (PartSize) uiMode;
     867      if ( pcCU->getSlice()->getSPS()->getAMPAcc( uiDepth ) )
     868      {
     869        if (eMode == SIZE_2NxN)
     870        {
     871#if AMP_CTX
     872            m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUAMPSCModel.get( 0, 0, 0 ));
     873#else
     874          m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUYPosiSCModel.get( 0, 0, 0 ));
     875#endif
     876          if (uiSymbol == 0)
     877          {
     878#if AMP_CTX
     879            m_pcTDecBinIf->decodeBinEP(uiSymbol);
     880#else
     881            m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUYPosiSCModel.get( 0, 0, 1 ));
     882#endif
     883            eMode = (uiSymbol == 0? SIZE_2NxnU : SIZE_2NxnD);
     884          }
     885        }
     886        else if (eMode == SIZE_Nx2N)
     887        {
    756888#if AMP_CTX
    757889          m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUAMPSCModel.get( 0, 0, 0 ));
    758890#else
    759         m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUYPosiSCModel.get( 0, 0, 0 ));
    760 #endif
    761         if (uiSymbol == 0)
    762         {
     891          m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUXPosiSCModel.get( 0, 0, 0 ));
     892#endif
     893          if (uiSymbol == 0)
     894          {
    763895#if AMP_CTX
    764           m_pcTDecBinIf->decodeBinEP(uiSymbol);
    765 #else
    766           m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUYPosiSCModel.get( 0, 0, 1 ));
    767 #endif
    768           eMode = (uiSymbol == 0? SIZE_2NxnU : SIZE_2NxnD);
     896            m_pcTDecBinIf->decodeBinEP(uiSymbol);
     897#else
     898            m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUXPosiSCModel.get( 0, 0, 1 ));
     899#endif
     900            eMode = (uiSymbol == 0? SIZE_nLx2N : SIZE_nRx2N);
     901          }
    769902        }
    770903      }
    771       else if (eMode == SIZE_Nx2N)
    772       {
    773 #if AMP_CTX
    774         m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUAMPSCModel.get( 0, 0, 0 ));
    775 #else
    776         m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUXPosiSCModel.get( 0, 0, 0 ));
    777 #endif
    778         if (uiSymbol == 0)
    779         {
    780 #if AMP_CTX
    781           m_pcTDecBinIf->decodeBinEP(uiSymbol);
    782 #else
    783           m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUXPosiSCModel.get( 0, 0, 1 ));
    784 #endif
    785           eMode = (uiSymbol == 0? SIZE_nLx2N : SIZE_nRx2N);
    786         }
    787       }
    788     }
     904#if OL_QTLIMIT_PREDCODING_B0068
     905    }
     906#endif
    789907  }
    790908  pcCU->setPartSizeSubParts( eMode, uiAbsPartIdx, uiDepth );
     
    862980#endif
    863981
    864 #if LGE_EDGE_INTRA
     982#if LGE_EDGE_INTRA_A0070
    865983    Bool bCodeEdgeIntra = false;
    866984    if( pcCU->getSlice()->getSPS()->isDepth() )
     
    878996#endif
    879997    Int uiPredNum = pcCU->getIntraDirLumaPredictor(uiAbsPartIdx, uiPreds); 
    880 #if LGE_EDGE_INTRA
     998#if LGE_EDGE_INTRA_A0070
    881999    UInt uiCheckBit = 0;
    8821000#endif
     
    9031021
    9041022      m_pcTDecBinIf->decodeBinsEP( uiSymbol, 5 );
    905 #if LGE_EDGE_INTRA
     1023#if LGE_EDGE_INTRA_A0070
    9061024      if (bCodeEdgeIntra)
    9071025      {
     
    9391057      }
    9401058#endif
    941 #if LGE_EDGE_INTRA
     1059#if LGE_EDGE_INTRA_A0070
    9421060      if ( intraPredMode != EDGE_INTRA_IDX)
    9431061      {
     
    9471065          intraPredMode += ( intraPredMode >= uiPreds[i] );
    9481066        }
    949 #if LGE_EDGE_INTRA
    950       }
    951 #endif
    952     }
    953 
    954 #if LGE_EDGE_INTRA
     1067#if LGE_EDGE_INTRA_A0070
     1068      }
     1069#endif
     1070    }
     1071
     1072#if LGE_EDGE_INTRA_A0070
    9551073    if( intraPredMode == EDGE_INTRA_IDX )
    9561074    {
     
    20962214#endif
    20972215
    2098 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX || (LGE_EDGE_INTRA && LGE_EDGE_INTRA_DELTA_DC)
     2216#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX || (LGE_EDGE_INTRA_A0070 && LGE_EDGE_INTRA_DELTA_DC)
    20992217Void TDecSbac::xReadExGolombLevel( UInt& ruiSymbol, ContextModel& rcSCModel  )
    21002218{
     
    23552473#endif
    23562474
    2357 #if LGE_EDGE_INTRA
     2475#if LGE_EDGE_INTRA_A0070
    23582476Void TDecSbac::xParseEdgeIntraInfo( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth )
    23592477{
     
    24522570}
    24532571#endif
     2572 
     2573#if RWTH_SDC_DLT_B0036
     2574Void TDecSbac::parseSDCFlag( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth )
     2575{
     2576  assert( pcCU->getSlice()->getSPS()->isDepth() );
     2577 
     2578  UInt uiSymbol = 0;
     2579  UInt uiCtxSDCFlag = pcCU->getCtxSDCFlag( uiAbsPartIdx );
     2580  m_pcTDecBinIf->decodeBin( uiSymbol, m_cSDCFlagSCModel.get( 0, 0, uiCtxSDCFlag ) );
     2581 
     2582  if( uiSymbol == 1 )
     2583  {
     2584    pcCU->setPartSizeSubParts(SIZE_2Nx2N, uiAbsPartIdx, uiDepth);
     2585   
     2586    pcCU->setSDCFlagSubParts( true, uiAbsPartIdx, 0, uiDepth);
     2587    pcCU->setTrIdxSubParts(0, uiAbsPartIdx, uiDepth);
     2588    pcCU->setCbfSubParts(1, 1, 1, uiAbsPartIdx, uiDepth);
     2589  }
     2590}
     2591
     2592Void TDecSbac::parseSDCPredMode( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth )
     2593{
     2594  assert( pcCU->getSlice()->getSPS()->isDepth() );
     2595  assert( pcCU->getPartitionSize(uiAbsPartIdx) == SIZE_2Nx2N );
     2596 
     2597  assert( pcCU->getSDCFlag(uiAbsPartIdx) );
     2598 
     2599  UInt uiCtx            = 0;
     2600 
     2601  UInt uiMPModeIdx      = 0;
     2602 
     2603  for(Int i=0; i<RWTH_SDC_NUM_PRED_MODES-1; i++)
     2604  {
     2605    UInt uiIsMostProb = 0;
     2606    m_pcTDecBinIf->decodeBin( uiIsMostProb, m_cSDCPredModeSCModel.get( 0, i, uiCtx ) );
     2607   
     2608    if ( uiIsMostProb == 1 )
     2609      break;
     2610   
     2611    // else: get next most probable pred mode
     2612    uiMPModeIdx = (uiMPModeIdx+1)%RWTH_SDC_NUM_PRED_MODES;
     2613  }
     2614 
     2615  Int intraPredMode = g_auiSDCPredModes[uiMPModeIdx];
     2616 
     2617#if HHI_DMM_WEDGE_INTRA
     2618  if( intraPredMode == DMM_WEDGE_FULL_IDX )          { xParseWedgeFullInfo          ( pcCU, uiAbsPartIdx, uiDepth ); }
     2619  if( intraPredMode == DMM_WEDGE_PREDDIR_IDX )       { xParseWedgePredDirInfo       ( pcCU, uiAbsPartIdx, uiDepth ); }
     2620#endif
     2621 
     2622  pcCU->setLumaIntraDirSubParts((UChar)intraPredMode, uiAbsPartIdx, uiDepth);
     2623}
     2624
     2625Void TDecSbac::parseSDCResidualData ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiSegment )
     2626{
     2627  assert( pcCU->getSlice()->getSPS()->isDepth() );
     2628  assert( pcCU->getSDCFlag(uiAbsPartIdx) );
     2629  assert( uiSegment < 2 );
     2630 
     2631  UInt uiResidual = 0;
     2632  UInt uiBit      = 0;
     2633  UInt uiAbsIdx   = 0;
     2634  UInt uiSign     = 0;
     2635  Int  iIdx       = 0;
     2636 
     2637  UInt uiMaxResidualBits  = GetBitsPerDepthValue();
     2638  assert( uiMaxResidualBits <= g_uiBitDepth );
     2639 
     2640  m_pcTDecBinIf->decodeBin(uiResidual, m_cSDCResidualFlagSCModel.get( 0, uiSegment, 0 ) );
     2641 
     2642  if (uiResidual)
     2643  {
     2644    // decode residual sign bit
     2645    m_pcTDecBinIf->decodeBin(uiSign, m_cSDCResidualSignFlagSCModel.get( 0, uiSegment, 0 ) );
     2646   
     2647    // decode residual magnitude
     2648    for (Int i=0; i<uiMaxResidualBits; i++)
     2649    {
     2650      m_pcTDecBinIf->decodeBin(uiBit, m_cSDCResidualSCModel.get( 0, uiSegment, i ) );
     2651      uiAbsIdx |= uiBit << i;
     2652    }
     2653   
     2654    uiAbsIdx += 1;
     2655    iIdx =(Int)(uiSign ? -1 : 1)*uiAbsIdx;
     2656  }
     2657 
     2658  pcCU->setSDCSegmentDCOffset(iIdx, uiSegment, uiAbsPartIdx);
     2659}
     2660#endif
    24542661
    24552662//! \}
Note: See TracChangeset for help on using the changeset viewer.