Changeset 56 in 3DVCSoftware for trunk/source/Lib/TLibDecoder/TDecSbac.h


Ignore:
Timestamp:
11 May 2012, 21:20:17 (12 years ago)
Author:
hschwarz
Message:

updated trunk (move to HM6.1)

File:
1 edited

Legend:

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

    r42 r56  
    22 * License, included below. This software may be subject to other third party
    33 * and contributor rights, including patent rights, and no such rights are
    4  * granted under this license.
    5  *
    6  * Copyright (c) 2010-2011, ISO/IEC
     4 * granted under this license. 
     5 *
     6 * Copyright (c) 2010-2012, ITU/ISO/IEC
    77 * All rights reserved.
    88 *
     
    1515 *    this list of conditions and the following disclaimer in the documentation
    1616 *    and/or other materials provided with the distribution.
    17  *  * Neither the name of the ISO/IEC nor the names of its contributors may
     17 *  * Neither the name of the ITU/ISO/IEC nor the names of its contributors may
    1818 *    be used to endorse or promote products derived from this software without
    1919 *    specific prior written permission.
     
    3232 */
    3333
    34 
    35 
    3634/** \file     TDecSbac.h
    3735    \brief    SBAC decoder class (header)
     
    4947#include "TDecEntropy.h"
    5048#include "TDecBinCoder.h"
    51 #include "../TLibCommon/ContextTables.h"
    52 #include "../TLibCommon/ContextModel.h"
    53 #include "../TLibCommon/ContextModel3DBuffer.h"
     49#include "TLibCommon/ContextTables.h"
     50#include "TLibCommon/ContextModel.h"
     51#include "TLibCommon/ContextModel3DBuffer.h"
     52
     53//! \ingroup TLibDecoder
     54//! \{
    5455
    5556// ====================================================================================================================
     
    6970  Void  uninit                    (              )    { m_pcTDecBinIf = 0; }
    7071 
    71   Void  resetEntropy              ( TComSlice* pcSlice     );
    72   Void  setBitstream              ( TComBitstream* p       ) { m_pcBitstream = p; m_pcTDecBinIf->init( p ); }
    73  
    74   Void  setAlfCtrl                ( Bool bAlfCtrl          ) { m_bAlfCtrl = bAlfCtrl;                   }
    75   Void  setMaxAlfCtrlDepth        ( UInt uiMaxAlfCtrlDepth ) { m_uiMaxAlfCtrlDepth = uiMaxAlfCtrlDepth; }
    76  
    77 #if BITSTREAM_EXTRACTION
    78   Void  parseNalUnitHeader    ( NalUnitType& eNalUnitType, UInt& TemporalId, UInt& uiLayerId ) {}
    79 #else
    80   Void  parseNalUnitHeader    ( NalUnitType& eNalUnitType, UInt& TemporalId, Bool& bOutputFlag ) {}
    81 #endif
    82  
     72  Void load                          ( TDecSbac* pScr );
     73  Void loadContexts                  ( TDecSbac* pScr );
     74  Void xCopyFrom           ( TDecSbac* pSrc );
     75  Void xCopyContextsFrom       ( TDecSbac* pSrc );
     76#if OL_FLUSH
     77  Void decodeFlush();
     78#endif
     79
     80#if CABAC_INIT_FLAG
     81  Void  resetEntropy (TComSlice* pSlice );
     82#else
     83  Void  resetEntropywithQPandInitIDC ( Int  iQp, Int iID);
     84  Void  resetEntropy                 ( Int  iQp, Int iID      ) { resetEntropywithQPandInitIDC(iQp, iID);                                      }
     85  Void  resetEntropy                 ( TComSlice* pcSlice     ) { resetEntropywithQPandInitIDC(pcSlice->getSliceQp(), pcSlice->getCABACinitIDC());}
     86#endif
     87  Void  setBitstream              ( TComInputBitstream* p  ) { m_pcBitstream = p; m_pcTDecBinIf->init( p ); }
     88 
     89#if HHI_MPI
     90  Void  parseSPS                  ( TComSPS* pcSPS, Bool bIsDepth ) {}
     91#else
    8392  Void  parseSPS                  ( TComSPS* pcSPS         ) {}
     93#endif
     94#if TILES_OR_ENTROPY_SYNC_IDC 
     95  Void  parsePPS                  ( TComPPS* pcPPS, ParameterSetManagerDecoder *parameterSet         ) {}
     96#else
    8497  Void  parsePPS                  ( TComPPS* pcPPS         ) {}
     98#endif
     99  Void  parseAPS                  ( TComAPS* pAPS          ) {}
    85100  void parseSEI(SEImessages&) {}
    86   Void  parseSliceHeader          ( TComSlice*& rpcSlice   ) {}
     101
     102#if LCU_SYNTAX_ALF
     103  Void  parseSliceHeader          ( TComSlice*& rpcSlice, ParameterSetManagerDecoder *parameterSetManager, AlfCUCtrlInfo &alfCUCtrl, AlfParamSet& alfParamSet) {}
     104#else
     105  Void  parseSliceHeader          ( TComSlice*& rpcSlice, ParameterSetManagerDecoder *parameterSetManager, AlfCUCtrlInfo &alfCUCtrl ) {}
     106#endif
     107
    87108  Void  parseTerminatingBit       ( UInt& ruiBit );
    88   Void  parseMVPIdx               ( TComDataCU* pcCU, Int& riMVPIdx, Int iMVPNum, UInt uiAbsPartIdx, UInt uiDepth, RefPicList eRefList );
    89  
    90   Void  parseAlfFlag              ( UInt& ruiVal           );
    91   Void  parseAlfUvlc              ( UInt& ruiVal           );
    92   Void  parseAlfSvlc              ( Int&  riVal            );
    93   Void  parseAlfCtrlDepth         ( UInt& ruiAlfCtrlDepth  );
    94 #if MTK_SAO
    95   Void  parseAoFlag              ( UInt& ruiVal           );
    96   Void  parseAoUvlc              ( UInt& ruiVal           );
    97   Void  parseAoSvlc              ( Int&  riVal            );
     109#if HHI_INTER_VIEW_MOTION_PRED
     110  Void  parseMVPIdx               ( Int& riMVPIdx, Int iNumAMVPCands );
     111#else
     112  Void  parseMVPIdx               ( Int& riMVPIdx          );
     113#endif
     114 
     115#if SAO_UNIT_INTERLEAVING
     116  Void  parseSaoUvlc              ( UInt& ruiVal           );
     117  Void  parseSaoSvlc              ( Int&  riVal            );
     118  Void  parseSaoMergeLeft         ( UInt&  ruiVal, UInt uiCompIdx   );
     119  Void  parseSaoMergeUp           ( UInt&  ruiVal  );
     120  Void  parseSaoTypeIdx           ( UInt&  ruiVal  );
     121  Void  parseSaoUflc              ( UInt& ruiVal           );
     122  Void  parseSaoOneLcuInterleaving(Int rx, Int ry, SAOParam* pSaoParam, TComDataCU* pcCU, Int iCUAddrInSlice, Int iCUAddrUpInSlice, Bool bLFCrossSliceBoundaryFlag);
     123  Void  parseSaoOffset            (SaoLcuParam* psSaoLcuParam);
    98124#endif
    99125private:
     
    101127  Void  xReadUnaryMaxSymbol ( UInt& ruiSymbol, ContextModel* pcSCModel, Int iOffset, UInt uiMaxSymbol );
    102128  Void  xReadEpExGolomb     ( UInt& ruiSymbol, UInt uiCount );
    103 #if E253
    104129  Void  xReadGoRiceExGolomb ( UInt &ruiSymbol, UInt &ruiGoRiceParam );
    105130#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
    106131  Void  xReadExGolombLevel  ( UInt& ruiSymbol, ContextModel& rcSCModel  );
    107132#endif
    108 #else
    109   Void  xReadExGolombLevel  ( UInt& ruiSymbol, ContextModel& rcSCModel  );
    110 #endif
    111  
    112 #if MVD_CTX
    113   Void  xReadMvd            ( Int& riMvdComp, UInt uiAbsSumL, UInt uiAbsSumA, UInt uiCtx );
    114 #else
    115   Void  xReadMvd            ( Int& riMvdComp, UInt uiAbsSum, UInt uiCtx );
    116 #endif
    117 
    118   Void  xReadExGolombMvd    ( UInt& ruiSymbol, ContextModel* pcSCModel, UInt uiMaxBin );
    119  
    120133#if HHI_DMM_WEDGE_INTRA
    121   Void xParseWedgeFullInfo  ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
     134  Void xParseWedgeFullInfo          ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
    122135  Void xParseWedgeFullDeltaInfo     ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
    123136
     
    131144 
    132145private:
    133   TComBitstream*    m_pcBitstream;
     146  TComInputBitstream* m_pcBitstream;
    134147  TDecBinIf*        m_pcTDecBinIf;
    135148 
    136   Bool m_bAlfCtrl;
    137   UInt m_uiMaxAlfCtrlDepth;
    138  
     149  Int           m_iSliceGranularity; //!< slice granularity
     150
    139151public:
    140   Void parseAlfCtrlFlag   ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
    141 #if TSB_ALF_HEADER
    142   Void parseAlfFlagNum    ( UInt& ruiVal, UInt minValue, UInt depth );
    143152  Void parseAlfCtrlFlag   ( UInt &ruiAlfCtrlFlag );
    144 #endif
    145  
     153
     154  /// set slice granularity
     155  Void setSliceGranularity(Int iSliceGranularity)  {m_iSliceGranularity = iSliceGranularity;}
     156
     157  /// get slice granularity
     158  Int  getSliceGranularity()                       {return m_iSliceGranularity;             }
     159
    146160  Void parseSkipFlag      ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
    147161  Void parseSplitFlag     ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
    148162  Void parseMergeFlag     ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiPUIdx );
    149163  Void parseMergeIndex    ( TComDataCU* pcCU, UInt& ruiMergeIndex, UInt uiAbsPartIdx, UInt uiDepth );
    150 #if HHI_INTER_VIEW_MOTION_PRED || HHI_MPI
    151   Void parseMergeIndexMV  ( TComDataCU* pcCU, UInt& ruiMergeIndex, UInt uiAbsPartIdx, UInt uiDepth );
    152 #endif
     164#if HHI_INTER_VIEW_RESIDUAL_PRED
    153165  Void parseResPredFlag   ( TComDataCU* pcCU, Bool& rbResPredFlag, UInt uiAbsPartIdx, UInt uiDepth );
     166#endif
    154167  Void parsePartSize      ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
    155168  Void parsePredMode      ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
     
    169182  Void parseDeltaQP       ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
    170183 
    171   Void parseCbf           ( TComDataCU* pcCU, UInt uiAbsPartIdx, TextType eType, UInt uiTrDepth, UInt uiDepth ) {}
    172   Void parseBlockCbf      ( TComDataCU* pcCU, UInt uiAbsPartIdx, TextType eType, UInt uiTrDepth, UInt uiDepth, UInt uiQPartNum ) {}
    173  
    174 #if CAVLC_RQT_CBP
    175   Void parseCbfTrdiv      ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiTrDepth, UInt uiDepth, UInt& uiSubdiv ) {}
    176 #endif
    177 
    178 #if PCP_SIGMAP_SIMPLE_LAST
    179   __inline Void parseLastSignificantXY( UInt& uiPosLastX, UInt& uiPosLastY, const UInt uiWidth, const TextType eTType, const UInt uiCTXIdx, const UInt uiScanIdx );
    180 #endif
     184  Void parseIPCMInfo      ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth);
     185
     186  Void parseLastSignificantXY( UInt& uiPosLastX, UInt& uiPosLastY, Int width, Int height, TextType eTType, UInt uiScanIdx );
    181187  Void parseCoeffNxN      ( TComDataCU* pcCU, TCoeff* pcCoef, UInt uiAbsPartIdx, UInt uiWidth, UInt uiHeight, UInt uiDepth, TextType eTType );
    182   Void parseViewIdx       (Int &riViewIdx );
    183  
     188 
     189  Void readTileMarker   ( UInt& uiTileIdx, UInt uiBitsUsed );
     190  Void updateContextTables( SliceType eSliceType, Int iQp );
     191
     192  Void  parseScalingList ( TComScalingList* scalingList ) {}
     193
    184194private:
    185195  UInt m_uiLastDQpNonZero;
    186196  UInt m_uiLastQp;
    187197 
     198  ContextModel         m_contextModels[MAX_NUM_CTX_MOD];
     199  Int                  m_numContextModels;
     200  ContextModel3DBuffer m_cCUSplitFlagSCModel;
    188201  ContextModel3DBuffer m_cCUSkipFlagSCModel;
    189   ContextModel3DBuffer m_cCUSplitFlagSCModel;
    190202  ContextModel3DBuffer m_cCUMergeFlagExtSCModel;
    191203  ContextModel3DBuffer m_cCUMergeIdxExtSCModel;
    192   ContextModel3DBuffer m_cCUMVMergeIdxExtSCModel;
     204#if HHI_INTER_VIEW_RESIDUAL_PRED
    193205  ContextModel3DBuffer m_cResPredFlagSCModel;
    194   ContextModel3DBuffer m_cCUAlfCtrlFlagSCModel;
     206#endif
    195207  ContextModel3DBuffer m_cCUPartSizeSCModel;
    196208  ContextModel3DBuffer m_cCUPredModeSCModel;
    197  
     209  ContextModel3DBuffer m_cCUAlfCtrlFlagSCModel;
    198210  ContextModel3DBuffer m_cCUIntraPredSCModel;
    199 #if ADD_PLANAR_MODE
    200   ContextModel3DBuffer m_cPlanarFlagSCModel;
    201 #endif
    202211  ContextModel3DBuffer m_cCUChromaPredSCModel;
     212  ContextModel3DBuffer m_cCUDeltaQpSCModel;
    203213  ContextModel3DBuffer m_cCUInterDirSCModel;
    204214  ContextModel3DBuffer m_cCURefPicSCModel;
    205215  ContextModel3DBuffer m_cCUMvdSCModel;
    206  
     216  ContextModel3DBuffer m_cCUQtCbfSCModel;
    207217  ContextModel3DBuffer m_cCUTransSubdivFlagSCModel;
    208218  ContextModel3DBuffer m_cCUQtRootCbfSCModel;
    209   ContextModel3DBuffer m_cCUDeltaQpSCModel;
    210  
    211   ContextModel3DBuffer m_cCUQtCbfSCModel;
    212  
     219 
     220  ContextModel3DBuffer m_cCUSigCoeffGroupSCModel;
    213221  ContextModel3DBuffer m_cCUSigSCModel;
    214 #if PCP_SIGMAP_SIMPLE_LAST
    215222  ContextModel3DBuffer m_cCuCtxLastX;
    216223  ContextModel3DBuffer m_cCuCtxLastY;
    217 #else 
    218   ContextModel3DBuffer m_cCULastSCModel;
    219 #endif
    220224  ContextModel3DBuffer m_cCUOneSCModel;
    221225  ContextModel3DBuffer m_cCUAbsSCModel;
     
    226230  ContextModel3DBuffer m_cALFUvlcSCModel;
    227231  ContextModel3DBuffer m_cALFSvlcSCModel;
    228 #if MTK_SAO
    229   ContextModel3DBuffer m_cAOFlagSCModel;
    230   ContextModel3DBuffer m_cAOUvlcSCModel;
    231   ContextModel3DBuffer m_cAOSvlcSCModel;
    232 #endif
    233   ContextModel3DBuffer m_cViewIdxSCModel;
     232#if AMP_CTX
     233  ContextModel3DBuffer m_cCUAMPSCModel;
     234#else
     235  ContextModel3DBuffer m_cCUXPosiSCModel;
     236  ContextModel3DBuffer m_cCUYPosiSCModel;
     237#endif
     238  ContextModel3DBuffer m_cSaoFlagSCModel;
     239  ContextModel3DBuffer m_cSaoUvlcSCModel;
     240  ContextModel3DBuffer m_cSaoSvlcSCModel;
     241#if SAO_UNIT_INTERLEAVING
     242  ContextModel3DBuffer m_cSaoMergeLeftSCModel;
     243  ContextModel3DBuffer m_cSaoMergeUpSCModel;
     244  ContextModel3DBuffer m_cSaoTypeIdxSCModel;
     245#endif
     246
    234247#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
    235   ContextModel3DBuffer m_cIntraDMMSCModel;
    236   ContextModel3DBuffer m_cIntraWedgeSCModel;
     248  ContextModel3DBuffer m_cDmmFlagSCModel;
     249  ContextModel3DBuffer m_cDmmModeSCModel;
     250  ContextModel3DBuffer m_cDmmDataSCModel;
    237251#endif
    238252};
    239253
     254//! \}
     255
    240256#endif // !defined(AFX_TDECSBAC_H__CFCAAA19_8110_47F4_9A16_810C4B5499D5__INCLUDED_)
Note: See TracChangeset for help on using the changeset viewer.