HEVC Test Model (HM)  HM-16.18
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
TDecEntropy.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 __TDECENTROPY__
39 #define __TDECENTROPY__
40 
41 #include "TLibCommon/CommonDef.h"
43 #include "TLibCommon/TComSlice.h"
44 #include "TLibCommon/TComPic.h"
47 #include "TDecConformance.h"
48 
49 class TDecSbac;
50 class TDecCavlc;
51 class ParameterSetManagerDecoder;
52 class TComPrediction;
53 
56 
57 // ====================================================================================================================
58 // Class definition
59 // ====================================================================================================================
60 
63 {
64 public:
65  // Virtual list for SBAC/CAVLC
66  virtual Void resetEntropy ( TComSlice* pcSlice ) = 0;
67  virtual Void setBitstream ( TComInputBitstream* p ) = 0;
68 
69  virtual Void parseVPS ( TComVPS* pcVPS ) = 0;
70  virtual Void parseSPS ( TComSPS* pcSPS ) = 0;
71  virtual Void parsePPS ( TComPPS* pcPPS ) = 0;
72 
73  virtual Void parseSliceHeader ( TComSlice* pcSlice, ParameterSetManager *parameterSetManager, const Int prevTid0POC) = 0;
74 
75  virtual Void parseTerminatingBit ( UInt& ruilsLast ) = 0;
76  virtual Void parseRemainingBytes( Bool noTrailingBytesExpected ) = 0;
77 
78  virtual Void parseMVPIdx ( Int& riMVPIdx ) = 0;
79 
80 public:
81  virtual Void parseSkipFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) = 0;
82  virtual Void parseCUTransquantBypassFlag( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) = 0;
83  virtual Void parseSplitFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) = 0;
84  virtual Void parseMergeFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiPUIdx ) = 0;
85  virtual Void parseMergeIndex ( TComDataCU* pcCU, UInt& ruiMergeIndex ) = 0;
86  virtual Void parsePartSize ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) = 0;
87  virtual Void parsePredMode ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) = 0;
88 
89  virtual Void parseIntraDirLumaAng( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) = 0;
90  virtual Void parseIntraDirChroma( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) = 0;
91 
92  virtual Void parseInterDir ( TComDataCU* pcCU, UInt& ruiInterDir, UInt uiAbsPartIdx ) = 0;
93  virtual Void parseRefFrmIdx ( TComDataCU* pcCU, Int& riRefFrmIdx, RefPicList eRefList ) = 0;
94  virtual Void parseMvd ( TComDataCU* pcCU, UInt uiAbsPartAddr, UInt uiPartIdx, UInt uiDepth, RefPicList eRefList ) = 0;
95 
96  virtual Void parseCrossComponentPrediction ( class TComTU &rTu, ComponentID compID ) = 0;
97 
98  virtual Void parseTransformSubdivFlag( UInt& ruiSubdivFlag, UInt uiLog2TransformBlockSize ) = 0;
99  virtual Void parseQtCbf ( TComTU &rTu, const ComponentID compID, const Bool lowestLevel ) = 0;
100  virtual Void parseQtRootCbf ( UInt uiAbsPartIdx, UInt& uiQtRootCbf ) = 0;
101 
102  virtual Void parseDeltaQP ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) = 0;
103  virtual Void parseChromaQpAdjustment( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) = 0;
104 
105  virtual Void parseIPCMInfo ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth) = 0;
106 
107  virtual Void parseCoeffNxN( class TComTU &rTu, ComponentID compID ) = 0;
108 
109  virtual Void parseTransformSkipFlags ( class TComTU &rTu, ComponentID component ) = 0;
110 
111  virtual Void parseExplicitRdpcmMode ( TComTU &rTu, ComponentID compID ) = 0;
112 
113  virtual ~TDecEntropyIf() {}
114 };
115 
118 {
119 private:
122 #if MCTS_ENC_CHECK
124 #endif
125  //UInt m_uiBakAbsPartIdx;
126  //UInt m_uiBakChromaOffset;
127  //UInt m_bakAbsPartIdxCU;
128 
129 public:
130 #if MCTS_ENC_CHECK
131  Void init (TComPrediction* p, TDecConformanceCheck* pConformanceCheck) {m_pcPrediction = p; m_pConformanceCheck=pConformanceCheck;}
132 #else
134 #endif
135  Void decodePUWise ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, TComDataCU* pcSubCU );
136  Void decodeInterDirPU ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiPartIdx );
137  Void decodeRefFrmIdxPU ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiPartIdx, RefPicList eRefList );
138  Void decodeMvdPU ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiPartIdx, RefPicList eRefList );
139  Void decodeMVPIdxPU ( TComDataCU* pcSubCU, UInt uiPartAddr, UInt uiDepth, UInt uiPartIdx, RefPicList eRefList );
140 
144 
148  Void decodeSliceHeader ( TComSlice* pcSlice, ParameterSetManager *parameterSetManager, const Int prevTid0POC) { m_pcEntropyDecoderIf->parseSliceHeader(pcSlice, parameterSetManager, prevTid0POC); }
149 
151  Void decodeRemainingBytes( Bool noTrailingBytesExpected ) { m_pcEntropyDecoderIf->parseRemainingBytes(noTrailingBytesExpected); }
152 
154 
155 public:
156  Void decodeSplitFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
157  Void decodeSkipFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
158  Void decodeCUTransquantBypassFlag( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
159  Void decodeMergeFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiPUIdx );
160  Void decodeMergeIndex ( TComDataCU* pcSubCU, UInt uiPartIdx, UInt uiPartAddr, UInt uiDepth );
161  Void decodePredMode ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
162  Void decodePartSize ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
163 
164  Void decodeIPCMInfo ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
165 
166  Void decodePredInfo ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, TComDataCU* pcSubCU );
167 
168  Void decodeIntraDirModeLuma ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
169  Void decodeIntraDirModeChroma( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
170 
171  Void decodeQP ( TComDataCU* pcCU, UInt uiAbsPartIdx );
172  Void decodeChromaQpAdjustment( TComDataCU* pcCU, UInt uiAbsPartIdx );
173 
174 private:
175 
176  Void xDecodeTransform ( Bool& bCodeDQP, Bool& isChromaQpAdjCoded, TComTU &rTu, const Int quadtreeTULog2MinSizeInCU );
177 
178 public:
179 
180  Void decodeCoeff ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, Bool& bCodeDQP, Bool& isChromaQpAdjCoded );
181 
182 };// END CLASS DEFINITION TDecEntropy
183 
185 
186 #endif // __TDECENTROPY__
187 
virtual Void parseTransformSubdivFlag(UInt &ruiSubdivFlag, UInt uiLog2TransformBlockSize)=0
sample adaptive offset class (header)
Void decodeRefFrmIdxPU(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiPartIdx, RefPicList eRefList)
Void decodeSplitFlag(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth)
Definition: TDecEntropy.cpp:97
TDecEntropyIf * getEntropyDecoder()
Definition: TDecEntropy.h:153
Void decodeSkipFlag(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth)
Definition: TDecEntropy.cpp:58
virtual Void parseIPCMInfo(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth)=0
CU data structure class.
Definition: TComDataCU.h:64
virtual Void parseExplicitRdpcmMode(TComTU &rTu, ComponentID compID)=0
virtual Void parseIntraDirChroma(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth)=0
Defines version information, constants and small in-line functions.
virtual Void parseQtCbf(TComTU &rTu, const ComponentID compID, const Bool lowestLevel)=0
void Void
Definition: TypeDef.h:203
virtual ~TDecEntropyIf()
Definition: TDecEntropy.h:113
Void decodeMergeFlag(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiPUIdx)
Definition: TDecEntropy.cpp:77
virtual Void parseTransformSkipFlags(class TComTU &rTu, ComponentID component)=0
virtual Void parseVPS(TComVPS *pcVPS)=0
slice header and SPS class (header)
unsigned int UInt
Definition: TypeDef.h:212
Void decodeIntraDirModeLuma(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth)
Void decodePredMode(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth)
virtual Void parseChromaQpAdjustment(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth)=0
Void decodePredInfo(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth, TComDataCU *pcSubCU)
CAVLC decoder class.
Definition: TDecCAVLC.h:56
picture class (header)
virtual Void parseMergeIndex(TComDataCU *pcCU, UInt &ruiMergeIndex)=0
virtual Void parsePredMode(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth)=0
TDecConformanceCheck * m_pConformanceCheck
Definition: TDecEntropy.h:123
TDecEntropyIf * m_pcEntropyDecoderIf
Definition: TDecEntropy.h:120
Void setBitstream(TComInputBitstream *p)
Definition: TDecEntropy.h:142
entropy decoder pure class
Definition: TDecEntropy.h:62
SBAC decoder class.
Definition: TDecSbac.h:63
Void resetEntropy(TComSlice *p)
Definition: TDecEntropy.h:143
Void setEntropyDecoder(TDecEntropyIf *p)
Definition: TDecEntropy.cpp:51
virtual Void parseMVPIdx(Int &riMVPIdx)=0
virtual Void parseDeltaQP(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth)=0
virtual Void parseCUTransquantBypassFlag(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth)=0
virtual Void parsePartSize(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth)=0
virtual Void parseSkipFlag(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth)=0
Void decodeMVPIdxPU(TComDataCU *pcSubCU, UInt uiPartAddr, UInt uiDepth, UInt uiPartIdx, RefPicList eRefList)
virtual Void parseSplitFlag(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth)=0
virtual Void parseRefFrmIdx(TComDataCU *pcCU, Int &riRefFrmIdx, RefPicList eRefList)=0
virtual Void parseIntraDirLumaAng(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth)=0
virtual Void setBitstream(TComInputBitstream *p)=0
virtual Void parseQtRootCbf(UInt uiAbsPartIdx, UInt &uiQtRootCbf)=0
Void decodeSPS(TComSPS *pcSPS)
Definition: TDecEntropy.h:146
virtual Void parseSliceHeader(TComSlice *pcSlice, ParameterSetManager *parameterSetManager, const Int prevTid0POC)=0
bool Bool
Definition: TypeDef.h:204
Void decodeIPCMInfo(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth)
PPS class.
Definition: TComSlice.h:1034
Void decodeCUTransquantBypassFlag(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth)
Definition: TDecEntropy.cpp:64
Void decodeMvdPU(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiPartIdx, RefPicList eRefList)
virtual Void parseTerminatingBit(UInt &ruilsLast)=0
RefPicList
reference list index
Definition: TypeDef.h:370
virtual Void parseMergeFlag(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiPUIdx)=0
class for handling bitstream (header)
Void decodeChromaQpAdjustment(TComDataCU *pcCU, UInt uiAbsPartIdx)
Void decodeSliceHeader(TComSlice *pcSlice, ParameterSetManager *parameterSetManager, const Int prevTid0POC)
Definition: TDecEntropy.h:148
TComPrediction * m_pcPrediction
Definition: TDecEntropy.h:121
Void decodeQP(TComDataCU *pcCU, UInt uiAbsPartIdx)
entropy decoder class
Definition: TDecEntropy.h:117
virtual Void parseSPS(TComSPS *pcSPS)=0
Void decodeRemainingBytes(Bool noTrailingBytesExpected)
Definition: TDecEntropy.h:151
Void decodePUWise(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth, TComDataCU *pcSubCU)
Void xDecodeTransform(Bool &bCodeDQP, Bool &isChromaQpAdjCoded, TComTU &rTu, const Int quadtreeTULog2MinSizeInCU)
Definition: TComTU.h:48
Void decodePPS(TComPPS *pcPPS)
Definition: TDecEntropy.h:147
Void init(TComPrediction *p, TDecConformanceCheck *pConformanceCheck)
Definition: TDecEntropy.h:131
Void decodeVPS(TComVPS *pcVPS)
Definition: TDecEntropy.h:145
Void decodeCoeff(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth, Bool &bCodeDQP, Bool &isChromaQpAdjCoded)
decode coefficients
virtual Void resetEntropy(TComSlice *pcSlice)=0
virtual Void parseInterDir(TComDataCU *pcCU, UInt &ruiInterDir, UInt uiAbsPartIdx)=0
int Int
Definition: TypeDef.h:211
Void decodeIntraDirModeChroma(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth)
ComponentID
Definition: TypeDef.h:308
virtual Void parseCrossComponentPrediction(class TComTU &rTu, ComponentID compID)=0
virtual Void parseCoeffNxN(class TComTU &rTu, ComponentID compID)=0
virtual Void parseMvd(TComDataCU *pcCU, UInt uiAbsPartAddr, UInt uiPartIdx, UInt uiDepth, RefPicList eRefList)=0
Void decodeMergeIndex(TComDataCU *pcSubCU, UInt uiPartIdx, UInt uiPartAddr, UInt uiDepth)
Definition: TDecEntropy.cpp:90
Void decodeTerminatingBit(UInt &ruiIsLast)
Definition: TDecEntropy.h:150
slice header class
Definition: TComSlice.h:1225
Void decodePartSize(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth)
Decoder conformance functions (header)
Void decodeInterDirPU(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiPartIdx)
virtual Void parsePPS(TComPPS *pcPPS)=0
virtual Void parseRemainingBytes(Bool noTrailingBytesExpected)=0
SPS class.
Definition: TComSlice.h:740