HEVC Test Model (HM)  HM-16.3
TEncCavlc.h
Go to the documentation of this file.
1 /* The copyright in this software is being made available under the BSD
2  * License, included below. This software may be subject to other third party
3  * and contributor rights, including patent rights, and no such rights are
4  * granted under this license.
5  *
6  * Copyright (c) 2010-2015, ITU/ISO/IEC
7  * All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions are met:
11  *
12  * * Redistributions of source code must retain the above copyright notice,
13  * this list of conditions and the following disclaimer.
14  * * Redistributions in binary form must reproduce the above copyright notice,
15  * this list of conditions and the following disclaimer in the documentation
16  * and/or other materials provided with the distribution.
17  * * Neither the name of the ITU/ISO/IEC nor the names of its contributors may
18  * be used to endorse or promote products derived from this software without
19  * specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
25  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
31  * THE POSSIBILITY OF SUCH DAMAGE.
32  */
33 
38 #ifndef __TENCCAVLC__
39 #define __TENCCAVLC__
40 
41 #if _MSC_VER > 1000
42 #pragma once
43 #endif // _MSC_VER > 1000
44 
45 #include "TLibCommon/CommonDef.h"
47 #include "TLibCommon/TComRom.h"
48 #include "TEncEntropy.h"
49 #include "SyntaxElementWriter.h"
50 
53 
54 class TEncTop;
55 
56 // ====================================================================================================================
57 // Class definition
58 // ====================================================================================================================
59 
62 {
63 public:
64  TEncCavlc();
65  virtual ~TEncCavlc();
66 
67 protected:
69 
70  Void codeShortTermRefPicSet ( const TComReferencePictureSet* pcRPS, Bool calledFromSliceHeader, Int idx );
71  Bool findMatchingLTRP ( TComSlice* pcSlice, UInt *ltrpsIndex, Int ltrpPOC, Bool usedFlag );
72 
73 public:
74 
75  Void resetEntropy ();
76  SliceType determineCabacInitIdx () { assert(0); return I_SLICE; };
77 
79  Void setSlice ( TComSlice* p ) { m_pcSlice = p; }
82  Void codeVPS ( const TComVPS* pcVPS );
83  Void codeVUI ( const TComVUI *pcVUI, const TComSPS* pcSPS );
84  Void codeSPS ( const TComSPS* pcSPS );
85  Void codePPS ( const TComPPS* pcPPS );
86  Void codeSliceHeader ( TComSlice* pcSlice );
87  Void codePTL ( const TComPTL* pcPTL, Bool profilePresentFlag, Int maxNumSubLayersMinus1);
88  Void codeProfileTier ( const ProfileTierLevel* ptl, const Bool bIsSubLayer );
89  Void codeHrdParameters ( const TComHRD *hrd, Bool commonInfPresentFlag, UInt maxNumSubLayersMinus1 );
91  Void codeTerminatingBit ( UInt uilsLast );
93 
94  Void codeMVPIdx ( TComDataCU* pcCU, UInt uiAbsPartIdx, RefPicList eRefList );
95  Void codeSAOBlkParam(SAOBlkParam& saoBlkParam, Bool* sliceEnabled, Bool leftMergeAvail, Bool aboveMergeAvail, Bool onlyEstMergeInfo = false){printf("only supported in CABAC"); assert(0); exit(-1);}
96  Void codeCUTransquantBypassFlag( TComDataCU* pcCU, UInt uiAbsPartIdx );
97  Void codeSkipFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx );
98  Void codeMergeFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx );
99  Void codeMergeIndex ( TComDataCU* pcCU, UInt uiAbsPartIdx );
100 
101  Void codeAlfCtrlFlag ( ComponentID component, UInt code ) {printf("Not supported\n"); assert(0);}
102  Void codeInterModeFlag( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiEncMode );
103  Void codeSplitFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
104 
105  Void codePartSize ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
106  Void codePredMode ( TComDataCU* pcCU, UInt uiAbsPartIdx );
107 
108  Void codeIPCMInfo ( TComDataCU* pcCU, UInt uiAbsPartIdx );
109 
110  Void codeTransformSubdivFlag( UInt uiSymbol, UInt uiCtx );
111  Void codeQtCbf ( TComTU &rTu, const ComponentID compID, const Bool lowestLevel );
112  Void codeQtRootCbf ( TComDataCU* pcCU, UInt uiAbsPartIdx );
113  Void codeQtCbfZero ( TComTU &rTu, const ChannelType chType );
115  Void codeIntraDirLumaAng( TComDataCU* pcCU, UInt absPartIdx, Bool isMultiple);
116  Void codeIntraDirChroma( TComDataCU* pcCU, UInt uiAbsPartIdx );
117  Void codeInterDir ( TComDataCU* pcCU, UInt uiAbsPartIdx );
118  Void codeRefFrmIdx ( TComDataCU* pcCU, UInt uiAbsPartIdx, RefPicList eRefList );
119  Void codeMvd ( TComDataCU* pcCU, UInt uiAbsPartIdx, RefPicList eRefList );
120 
122 
123  Void codeDeltaQP ( TComDataCU* pcCU, UInt uiAbsPartIdx );
124  Void codeChromaQpAdjustment( TComDataCU* pcCU, UInt uiAbsPartIdx );
125 
126  Void codeCoeffNxN ( TComTU &rTu, TCoeff* pcCoef, const ComponentID compID );
127  Void codeTransformSkipFlags ( TComTU &rTu, ComponentID component );
128 
129  Void estBit ( estBitsSbacStruct* pcEstBitsSbac, Int width, Int height, ChannelType chType );
130 
131  Void xCodePredWeightTable ( TComSlice* pcSlice );
132 
133  Void codeScalingList ( const TComScalingList &scalingList );
134  Void xCodeScalingList ( const TComScalingList* scalingList, UInt sizeId, UInt listId);
135  Void codeDFFlag ( UInt uiCode, const Char *pSymbolName );
136  Void codeDFSvlc ( Int iCode, const Char *pSymbolName );
137 
138  Void codeExplicitRdpcmMode( TComTU &rTu, const ComponentID compID );
139 };
140 
142 
143 #endif // !defined(AFX_TENCCAVLC_H__EE8A0B30_945B_4169_B290_24D3AD52296F__INCLUDED_)
144 
Void estBit(estBitsSbacStruct *pcEstBitsSbac, Int width, Int height, ChannelType chType)
Definition: TEncCavlc.cpp:1334
Void codeProfileTier(const ProfileTierLevel *ptl, const Bool bIsSubLayer)
Definition: TEncCavlc.cpp:1102
entropy encoder class (header)
Void codeTransformSubdivFlag(UInt uiSymbol, UInt uiCtx)
Definition: TEncCavlc.cpp:1243
UInt getNumberOfWrittenBits()
Definition: TEncCavlc.h:81
SliceType
supported slice type
Definition: TypeDef.h:343
Void setBitstream(TComBitIf *p)
Definition: TEncCavlc.h:78
CU data structure class.
Definition: TComDataCU.h:64
ChannelType
Definition: TypeDef.h:361
Void codeMvd(TComDataCU *pcCU, UInt uiAbsPartIdx, RefPicList eRefList)
Definition: TEncCavlc.cpp:1302
virtual Void resetBits()=0
Defines constants, macros and tool parameters.
Void codeSplitFlag(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth)
Definition: TEncCavlc.cpp:1238
void Void
Definition: TypeDef.h:285
Void codeSPS(const TComSPS *pcSPS)
Definition: TEncCavlc.cpp:467
Void codeExplicitRdpcmMode(TComTU &rTu, const ComponentID compID)
Definition: TEncCavlc.cpp:1508
pure virtual class for basic bit handling
Definition: TComBitStream.h:58
Void xCodePredWeightTable(TComSlice *pcSlice)
Code weighted prediction tables.
Definition: TEncCavlc.cpp:1345
global variables & functions (header)
Void codeDFSvlc(Int iCode, const Char *pSymbolName)
Definition: TEncCavlc.cpp:93
Void resetEntropy()
Definition: TEncCavlc.cpp:84
char Char
Definition: TypeDef.h:291
CAVLC encoder class.
Definition: TEncCavlc.h:61
unsigned int UInt
Definition: TypeDef.h:297
Void codeSliceFinish()
Definition: TEncCavlc.cpp:1194
virtual ~TEncCavlc()
Definition: TEncCavlc.cpp:75
Void codeIntraDirChroma(TComDataCU *pcCU, UInt uiAbsPartIdx)
Definition: TEncCavlc.cpp:1287
Void codePredMode(TComDataCU *pcCU, UInt uiAbsPartIdx)
Definition: TEncCavlc.cpp:1208
SCALING_LIST class.
Definition: TComSlice.h:150
Void xCodeScalingList(const TComScalingList *scalingList, UInt sizeId, UInt listId)
Definition: TEncCavlc.cpp:1465
Void codeSliceHeader(TComSlice *pcSlice)
Definition: TEncCavlc.cpp:719
Void codeChromaQpAdjustment(TComDataCU *pcCU, UInt uiAbsPartIdx)
Definition: TEncCavlc.cpp:1324
Void codeVPS(const TComVPS *pcVPS)
Definition: TEncCavlc.cpp:647
SliceType determineCabacInitIdx()
Definition: TEncCavlc.h:76
Void codeScalingList(const TComScalingList &scalingList)
Definition: TEncCavlc.cpp:1429
Void codeTilesWPPEntryPoint(TComSlice *pSlice)
Definition: TEncCavlc.cpp:1154
Void codeSAOBlkParam(SAOBlkParam &saoBlkParam, Bool *sliceEnabled, Bool leftMergeAvail, Bool aboveMergeAvail, Bool onlyEstMergeInfo=false)
Definition: TEncCavlc.h:95
Void codeTerminatingBit(UInt uilsLast)
Definition: TEncCavlc.cpp:1190
bool Bool
Definition: TypeDef.h:286
Void codeIntraDirLumaAng(TComDataCU *pcCU, UInt absPartIdx, Bool isMultiple)
Definition: TEncCavlc.cpp:1282
Void codeCoeffNxN(TComTU &rTu, TCoeff *pcCoef, const ComponentID compID)
Definition: TEncCavlc.cpp:1329
PPS class.
Definition: TComSlice.h:977
Int TCoeff
transform coefficient
Definition: TypeDef.h:693
Void codeInterDir(TComDataCU *pcCU, UInt uiAbsPartIdx)
Definition: TEncCavlc.cpp:1292
RefPicList
reference list index
Definition: TypeDef.h:415
Void codeShortTermRefPicSet(const TComReferencePictureSet *pcRPS, Bool calledFromSliceHeader, Int idx)
Definition: TEncCavlc.cpp:98
Void codeHrdParameters(const TComHRD *hrd, Bool commonInfPresentFlag, UInt maxNumSubLayersMinus1)
Definition: TEncCavlc.cpp:396
class for handling bitstream (header)
Void codeInterModeFlag(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiEncMode)
Definition: TEncCavlc.cpp:1223
Void codePartSize(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth)
Definition: TEncCavlc.cpp:1203
entropy encoder pure class
Definition: TEncEntropy.h:59
Void codePPS(const TComPPS *pcPPS)
Definition: TEncCavlc.cpp:155
Void codeRefFrmIdx(TComDataCU *pcCU, UInt uiAbsPartIdx, RefPicList eRefList)
Definition: TEncCavlc.cpp:1297
CAVLC encoder class (header)
Definition: TComTU.h:48
Void codeTransformSkipFlags(TComTU &rTu, ComponentID component)
Definition: TEncCavlc.cpp:1267
Void codeSkipFlag(TComDataCU *pcCU, UInt uiAbsPartIdx)
Definition: TEncCavlc.cpp:1233
Void codeDeltaQP(TComDataCU *pcCU, UInt uiAbsPartIdx)
Definition: TEncCavlc.cpp:1312
Void codeCrossComponentPrediction(TComTU &rTu, ComponentID compID)
Definition: TEncCavlc.cpp:1307
int Int
Definition: TypeDef.h:296
Void resetBits()
Definition: TEncCavlc.h:80
Void codeMVPIdx(TComDataCU *pcCU, UInt uiAbsPartIdx, RefPicList eRefList)
Definition: TEncCavlc.cpp:1198
Void codeVUI(const TComVUI *pcVUI, const TComSPS *pcSPS)
Definition: TEncCavlc.cpp:310
Void codeIPCMInfo(TComDataCU *pcCU, UInt uiAbsPartIdx)
Definition: TEncCavlc.cpp:1277
Void codeCUTransquantBypassFlag(TComDataCU *pcCU, UInt uiAbsPartIdx)
Definition: TEncCavlc.cpp:1228
encoder class
Definition: TEncTop.h:68
ComponentID
Definition: TypeDef.h:368
Void codeQtRootCbfZero(TComDataCU *pcCU)
Definition: TEncCavlc.cpp:1262
Void codeMergeFlag(TComDataCU *pcCU, UInt uiAbsPartIdx)
Definition: TEncCavlc.cpp:1213
Void codeQtRootCbf(TComDataCU *pcCU, UInt uiAbsPartIdx)
Definition: TEncCavlc.cpp:1253
Void codeQtCbf(TComTU &rTu, const ComponentID compID, const Bool lowestLevel)
Definition: TEncCavlc.cpp:1248
Void codeAlfCtrlFlag(ComponentID component, UInt code)
Definition: TEncCavlc.h:101
Reference Picture Set class.
Definition: TComSlice.h:65
slice header class
Definition: TComSlice.h:1198
Void codeMergeIndex(TComDataCU *pcCU, UInt uiAbsPartIdx)
Definition: TEncCavlc.cpp:1218
Void codePTL(const TComPTL *pcPTL, Bool profilePresentFlag, Int maxNumSubLayersMinus1)
Definition: TEncCavlc.cpp:1066
Void codeDFFlag(UInt uiCode, const Char *pSymbolName)
Definition: TEncCavlc.cpp:89
Void setSlice(TComSlice *p)
Definition: TEncCavlc.h:79
virtual UInt getNumberOfWrittenBits() const =0
Bool findMatchingLTRP(TComSlice *pcSlice, UInt *ltrpsIndex, Int ltrpPOC, Bool usedFlag)
Definition: TEncCavlc.cpp:1493
Void codeQtCbfZero(TComTU &rTu, const ChannelType chType)
Definition: TEncCavlc.cpp:1258
SPS class.
Definition: TComSlice.h:722
TComSlice * m_pcSlice
Definition: TEncCavlc.h:68