HEVC Test Model (HM)  HM-16.18
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
TEncEntropy.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-2017, 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 __TENCENTROPY__
39 #define __TENCENTROPY__
40 
41 #include "TLibCommon/TComSlice.h"
42 #include "TLibCommon/TComDataCU.h"
45 #include "TLibCommon/TComPic.h"
46 #include "TLibCommon/TComTrQuant.h"
49 
50 class TEncSbac;
51 class TEncCavlc;
52 class SEI;
53 
54 // ====================================================================================================================
55 // Class definition
56 // ====================================================================================================================
57 
60 {
61 public:
62  virtual Void resetEntropy (const TComSlice *pSlice) = 0;
63  virtual SliceType determineCabacInitIdx (const TComSlice *pSlice) = 0;
64  virtual Void setBitstream ( TComBitIf* p ) = 0;
65  virtual Void resetBits () = 0;
66  virtual UInt getNumberOfWrittenBits() = 0;
67 
68  virtual Void codeVPS ( const TComVPS* pcVPS ) = 0;
69  virtual Void codeSPS ( const TComSPS* pcSPS ) = 0;
70  virtual Void codePPS ( const TComPPS* pcPPS ) = 0;
71  virtual Void codeSliceHeader ( TComSlice* pcSlice ) = 0;
72 
73  virtual Void codeTilesWPPEntryPoint ( TComSlice* pSlice ) = 0;
74  virtual Void codeTerminatingBit ( UInt uilsLast ) = 0;
75  virtual Void codeSliceFinish () = 0;
76  virtual Void codeMVPIdx ( TComDataCU* pcCU, UInt uiAbsPartIdx, RefPicList eRefList ) = 0;
77 
78 public:
79  virtual Void codeCUTransquantBypassFlag( TComDataCU* pcCU, UInt uiAbsPartIdx ) = 0;
80  virtual Void codeSkipFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx ) = 0;
81  virtual Void codeMergeFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx ) = 0;
82  virtual Void codeMergeIndex ( TComDataCU* pcCU, UInt uiAbsPartIdx ) = 0;
83  virtual Void codeSplitFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) = 0;
84 
85  virtual Void codePartSize ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) = 0;
86  virtual Void codePredMode ( TComDataCU* pcCU, UInt uiAbsPartIdx ) = 0;
87 
88  virtual Void codeIPCMInfo ( TComDataCU* pcCU, UInt uiAbsPartIdx ) = 0;
89 
90  virtual Void codeTransformSubdivFlag( UInt uiSymbol, UInt uiCtx ) = 0;
91  virtual Void codeQtCbf ( TComTU &rTu, const ComponentID compID, const Bool lowestLevel ) = 0;
92  virtual Void codeQtRootCbf ( TComDataCU* pcCU, UInt uiAbsPartIdx ) = 0;
93  virtual Void codeQtCbfZero ( TComTU &rTu, const ChannelType chType ) = 0;
94  virtual Void codeQtRootCbfZero ( ) = 0;
95  virtual Void codeIntraDirLumaAng( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool isMultiplePU ) = 0;
96 
97  virtual Void codeIntraDirChroma( TComDataCU* pcCU, UInt uiAbsPartIdx ) = 0;
98  virtual Void codeInterDir ( TComDataCU* pcCU, UInt uiAbsPartIdx ) = 0;
99  virtual Void codeRefFrmIdx ( TComDataCU* pcCU, UInt uiAbsPartIdx, RefPicList eRefList ) = 0;
100  virtual Void codeMvd ( TComDataCU* pcCU, UInt uiAbsPartIdx, RefPicList eRefList ) = 0;
101 
102  virtual Void codeCrossComponentPrediction( TComTU &rTu, ComponentID compID ) = 0;
103 
104  virtual Void codeDeltaQP ( TComDataCU* pcCU, UInt uiAbsPartIdx ) = 0;
105  virtual Void codeChromaQpAdjustment( TComDataCU* pcCU, UInt uiAbsPartIdx ) = 0;
106  virtual Void codeCoeffNxN ( TComTU &rTu, TCoeff* pcCoef, const ComponentID compID ) = 0;
107  virtual Void codeTransformSkipFlags ( TComTU &rTu, ComponentID component ) = 0;
108  virtual Void codeSAOBlkParam (SAOBlkParam& saoBlkParam, const BitDepths &bitDepths, Bool* sliceEnabled, Bool leftMergeAvail, Bool aboveMergeAvail, Bool onlyEstMergeInfo = false) =0;
109  virtual Void estBit (estBitsSbacStruct* pcEstBitsSbac, Int width, Int height, ChannelType chType, COEFF_SCAN_TYPE scanType) = 0;
110  virtual Void codeExplicitRdpcmMode ( TComTU &rTu, const ComponentID compID ) = 0;
111 
112  virtual ~TEncEntropyIf() {}
113 };
114 
117 {
118 public:
125 
126  Void encodeSliceHeader ( TComSlice* pcSlice );
128  Void encodeTerminatingBit ( UInt uiIsLast );
131 
132 public:
133  Void encodeVPS ( const TComVPS* pcVPS);
134  // SPS
135  Void encodeSPS ( const TComSPS* pcSPS );
136  Void encodePPS ( const TComPPS* pcPPS );
137  Void encodeSplitFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, Bool bRD = false );
138  Void encodeCUTransquantBypassFlag( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD = false );
139  Void encodeSkipFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD = false );
140  Void encodePUWise ( TComDataCU* pcCU, UInt uiAbsPartIdx );
141  Void encodeInterDirPU ( TComDataCU* pcSubCU, UInt uiAbsPartIdx );
142  Void encodeRefFrmIdxPU ( TComDataCU* pcSubCU, UInt uiAbsPartIdx, RefPicList eRefList );
143  Void encodeMvdPU ( TComDataCU* pcSubCU, UInt uiAbsPartIdx, RefPicList eRefList );
144  Void encodeMVPIdxPU ( TComDataCU* pcSubCU, UInt uiAbsPartIdx, RefPicList eRefList );
145  Void encodeMergeFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx );
146  Void encodeMergeIndex ( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD = false );
147  Void encodePredMode ( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD = false );
148  Void encodePartSize ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, Bool bRD = false );
149  Void encodeIPCMInfo ( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD = false );
150  Void encodePredInfo ( TComDataCU* pcCU, UInt uiAbsPartIdx );
151  Void encodeIntraDirModeLuma ( TComDataCU* pcCU, UInt absPartIdx, Bool isMultiplePU = false );
152 
153  Void encodeIntraDirModeChroma( TComDataCU* pcCU, UInt uiAbsPartIdx );
154 
155  Void encodeTransformSubdivFlag( UInt uiSymbol, UInt uiCtx );
156  Void encodeQtCbf ( TComTU &rTu, const ComponentID compID, const Bool lowestLevel );
157 
158  Void encodeQtCbfZero ( TComTU &rTu, const ChannelType chType );
160  Void encodeQtRootCbf ( TComDataCU* pcCU, UInt uiAbsPartIdx );
161  Void encodeQP ( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD = false );
162  Void encodeChromaQpAdjustment ( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD = false );
163 
165 
166 private:
167  Void xEncodeTransform ( Bool& bCodeDQP, Bool& codeChromaQpAdj, TComTU &rTu );
168 
169 public:
170  Void encodeCoeff ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, Bool& bCodeDQP, Bool& codeChromaQpAdj );
171 
172  Void encodeCoeffNxN ( TComTU &rTu, TCoeff* pcCoef, const ComponentID compID );
173 
174  Void estimateBit ( estBitsSbacStruct* pcEstBitsSbac, Int width, Int height, ChannelType chType, COEFF_SCAN_TYPE scanType);
175 
176  Void encodeSAOBlkParam(SAOBlkParam& saoBlkParam, const BitDepths &bitDepths, Bool* sliceEnabled, Bool leftMergeAvail, Bool aboveMergeAvail){m_pcEntropyCoderIf->codeSAOBlkParam(saoBlkParam, bitDepths, sliceEnabled, leftMergeAvail, aboveMergeAvail, false);}
177 
178  static Int countNonZeroCoeffs( TCoeff* pcCoef, UInt uiSize );
179 
180 };// END CLASS DEFINITION TEncEntropy
181 
183 
184 #endif // __TENCENTROPY__
185 
virtual Void codeMVPIdx(TComDataCU *pcCU, UInt uiAbsPartIdx, RefPicList eRefList)=0
Void encodeMergeFlag(TComDataCU *pcCU, UInt uiAbsPartIdx)
encode merge flag
sample adaptive offset class (header)
Void encodeSPS(const TComSPS *pcSPS)
Definition: TEncEntropy.cpp:85
Void encodeSAOBlkParam(SAOBlkParam &saoBlkParam, const BitDepths &bitDepths, Bool *sliceEnabled, Bool leftMergeAvail, Bool aboveMergeAvail)
Definition: TEncEntropy.h:176
static Int countNonZeroCoeffs(TCoeff *pcCoef, UInt uiSize)
SliceType
supported slice type
Definition: TypeDef.h:283
CU data structure class.
Definition: TComDataCU.h:64
ChannelType
Definition: TypeDef.h:301
Void encodeMvdPU(TComDataCU *pcSubCU, UInt uiAbsPartIdx, RefPicList eRefList)
encode motion vector difference for a PU block
virtual Void codeDeltaQP(TComDataCU *pcCU, UInt uiAbsPartIdx)=0
void Void
Definition: TypeDef.h:203
virtual Void codeCrossComponentPrediction(TComTU &rTu, ComponentID compID)=0
virtual Void codeQtRootCbfZero()=0
pure virtual class for basic bit handling
Definition: TComBitStream.h:58
virtual Void codeSAOBlkParam(SAOBlkParam &saoBlkParam, const BitDepths &bitDepths, Bool *sliceEnabled, Bool leftMergeAvail, Bool aboveMergeAvail, Bool onlyEstMergeInfo=false)=0
Void encodeTransformSubdivFlag(UInt uiSymbol, UInt uiCtx)
Void encodeChromaQpAdjustment(TComDataCU *pcCU, UInt uiAbsPartIdx, Bool bRD=false)
encode chroma qp adjustment
virtual SliceType determineCabacInitIdx(const TComSlice *pSlice)=0
Void encodePredMode(TComDataCU *pcCU, UInt uiAbsPartIdx, Bool bRD=false)
encode prediction mode
virtual Void codeSkipFlag(TComDataCU *pcCU, UInt uiAbsPartIdx)=0
slice header and SPS class (header)
Void encodeSplitFlag(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth, Bool bRD=false)
encode split flag
CAVLC encoder class.
Definition: TEncCavlc.h:70
SliceType determineCabacInitIdx(const TComSlice *pSlice)
Definition: TEncEntropy.h:124
virtual Void codeRefFrmIdx(TComDataCU *pcCU, UInt uiAbsPartIdx, RefPicList eRefList)=0
Void encodeSliceHeader(TComSlice *pcSlice)
Definition: TEncEntropy.cpp:56
unsigned int UInt
Definition: TypeDef.h:212
virtual Void codeSPS(const TComSPS *pcSPS)=0
virtual Void codeExplicitRdpcmMode(TComTU &rTu, const ComponentID compID)=0
virtual Void codeCoeffNxN(TComTU &rTu, TCoeff *pcCoef, const ComponentID compID)=0
virtual Void codeCUTransquantBypassFlag(TComDataCU *pcCU, UInt uiAbsPartIdx)=0
picture class (header)
virtual Void codeVPS(const TComVPS *pcVPS)=0
virtual Void codeIPCMInfo(TComDataCU *pcCU, UInt uiAbsPartIdx)=0
virtual Void codePartSize(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth)=0
Void encodeQP(TComDataCU *pcCU, UInt uiAbsPartIdx, Bool bRD=false)
Void encodeRefFrmIdxPU(TComDataCU *pcSubCU, UInt uiAbsPartIdx, RefPicList eRefList)
encode reference frame index for a PU block
virtual Void codeTransformSkipFlags(TComTU &rTu, ComponentID component)=0
Void encodeCoeffNxN(TComTU &rTu, TCoeff *pcCoef, const ComponentID compID)
virtual Void codeTilesWPPEntryPoint(TComSlice *pSlice)=0
virtual Void codeQtCbfZero(TComTU &rTu, const ChannelType chType)=0
Void xEncodeTransform(Bool &bCodeDQP, Bool &codeChromaQpAdj, TComTU &rTu)
Void encodePUWise(TComDataCU *pcCU, UInt uiAbsPartIdx)
encode motion information for every PU block
virtual Void codeSliceFinish()=0
Void encodeCoeff(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth, Bool &bCodeDQP, Bool &codeChromaQpAdj)
encode coefficients
bool Bool
Definition: TypeDef.h:204
Void estimateBit(estBitsSbacStruct *pcEstBitsSbac, Int width, Int height, ChannelType chType, COEFF_SCAN_TYPE scanType)
Void encodeIPCMInfo(TComDataCU *pcCU, UInt uiAbsPartIdx, Bool bRD=false)
Void encodeSliceFinish()
Definition: TEncEntropy.cpp:74
virtual Void codeMvd(TComDataCU *pcCU, UInt uiAbsPartIdx, RefPicList eRefList)=0
Void encodeQtCbfZero(TComTU &rTu, const ChannelType chType)
PPS class.
Definition: TComSlice.h:1034
virtual UInt getNumberOfWrittenBits()=0
Definition: SEI.h:52
virtual Void codeMergeIndex(TComDataCU *pcCU, UInt uiAbsPartIdx)=0
entropy encoder class
Definition: TEncEntropy.h:116
virtual ~TEncEntropyIf()
Definition: TEncEntropy.h:112
virtual Void codeSliceHeader(TComSlice *pcSlice)=0
Int TCoeff
transform coefficient
Definition: TypeDef.h:250
virtual Void estBit(estBitsSbacStruct *pcEstBitsSbac, Int width, Int height, ChannelType chType, COEFF_SCAN_TYPE scanType)=0
virtual Void resetBits()=0
RefPicList
reference list index
Definition: TypeDef.h:370
COEFF_SCAN_TYPE
coefficient scanning type used in ACS
Definition: TypeDef.h:473
class for handling bitstream (header)
virtual Void codeChromaQpAdjustment(TComDataCU *pcCU, UInt uiAbsPartIdx)=0
Void resetBits()
Definition: TEncEntropy.h:121
Void encodePPS(const TComPPS *pcPPS)
Definition: TEncEntropy.cpp:79
entropy encoder pure class
Definition: TEncEntropy.h:59
virtual Void codeQtCbf(TComTU &rTu, const ComponentID compID, const Bool lowestLevel)=0
virtual Void resetEntropy(const TComSlice *pSlice)=0
Void encodeQtRootCbf(TComDataCU *pcCU, UInt uiAbsPartIdx)
Void encodeIntraDirModeChroma(TComDataCU *pcCU, UInt uiAbsPartIdx)
encode intra direction for chroma
virtual Void codeQtRootCbf(TComDataCU *pcCU, UInt uiAbsPartIdx)=0
virtual Void codeTransformSubdivFlag(UInt uiSymbol, UInt uiCtx)=0
virtual Void codeSplitFlag(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth)=0
Void encodeTilesWPPEntryPoint(TComSlice *pSlice)
Definition: TEncEntropy.cpp:62
context model class (header)
Void setEntropyCoder(TEncEntropyIf *e)
Definition: TEncEntropy.cpp:51
Void encodeInterDirPU(TComDataCU *pcSubCU, UInt uiAbsPartIdx)
Definition: TComTU.h:48
virtual Void codeIntraDirChroma(TComDataCU *pcCU, UInt uiAbsPartIdx)=0
Void encodeCrossComponentPrediction(TComTU &rTu, ComponentID compID)
virtual Void codePredMode(TComDataCU *pcCU, UInt uiAbsPartIdx)=0
Void encodeQtCbf(TComTU &rTu, const ComponentID compID, const Bool lowestLevel)
Void encodeCUTransquantBypassFlag(TComDataCU *pcCU, UInt uiAbsPartIdx, Bool bRD=false)
Definition: TEncEntropy.cpp:91
Void encodePartSize(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth, Bool bRD=false)
encode partition size
int Int
Definition: TypeDef.h:211
Void setBitstream(TComBitIf *p)
Definition: TEncEntropy.h:120
Void encodeIntraDirModeLuma(TComDataCU *pcCU, UInt absPartIdx, Bool isMultiplePU=false)
encode intra direction for luma
ComponentID
Definition: TypeDef.h:308
Void encodeMergeIndex(TComDataCU *pcCU, UInt uiAbsPartIdx, Bool bRD=false)
encode merge index
transform and quantization class (header)
Void encodeTerminatingBit(UInt uiIsLast)
Definition: TEncEntropy.cpp:67
virtual Void codeMergeFlag(TComDataCU *pcCU, UInt uiAbsPartIdx)=0
virtual Void codeIntraDirLumaAng(TComDataCU *pcCU, UInt uiAbsPartIdx, Bool isMultiplePU)=0
Void encodeQtRootCbfZero()
SBAC encoder class.
Definition: TEncSbac.h:66
Void encodePredInfo(TComDataCU *pcCU, UInt uiAbsPartIdx)
CU data structure (header)
Void encodeSkipFlag(TComDataCU *pcCU, UInt uiAbsPartIdx, Bool bRD=false)
slice header class
Definition: TComSlice.h:1225
Void encodeMVPIdxPU(TComDataCU *pcSubCU, UInt uiAbsPartIdx, RefPicList eRefList)
virtual Void setBitstream(TComBitIf *p)=0
virtual Void codeTerminatingBit(UInt uilsLast)=0
Void resetEntropy(const TComSlice *pSlice)
Definition: TEncEntropy.h:123
virtual Void codePPS(const TComPPS *pcPPS)=0
SPS class.
Definition: TComSlice.h:740
UInt getNumberOfWrittenBits()
Definition: TEncEntropy.h:122
Void encodeVPS(const TComVPS *pcVPS)
TEncEntropyIf * m_pcEntropyCoderIf
Definition: TEncEntropy.h:130
virtual Void codeInterDir(TComDataCU *pcCU, UInt uiAbsPartIdx)=0