HEVC Test Model (HM)  HM-16.3
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-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 __TDECENTROPY__
39 #define __TDECENTROPY__
40 
41 #include "TLibCommon/CommonDef.h"
43 #include "TLibCommon/TComSlice.h"
44 #include "TLibCommon/TComPic.h"
47 
48 class TDecSbac;
49 class TDecCavlc;
50 class ParameterSetManagerDecoder;
51 class TComPrediction;
52 
55 
56 // ====================================================================================================================
57 // Class definition
58 // ====================================================================================================================
59 
62 {
63 public:
64  // Virtual list for SBAC/CAVLC
65  virtual Void resetEntropy ( TComSlice* pcSlice ) = 0;
66  virtual Void setBitstream ( TComInputBitstream* p ) = 0;
67 
68  virtual Void parseVPS ( TComVPS* pcVPS ) = 0;
69  virtual Void parseSPS ( TComSPS* pcSPS ) = 0;
70  virtual Void parsePPS ( TComPPS* pcPPS ) = 0;
71 
72  virtual Void parseSliceHeader ( TComSlice* pcSlice, ParameterSetManager *parameterSetManager) = 0;
73 
74  virtual Void parseTerminatingBit ( UInt& ruilsLast ) = 0;
75  virtual Void parseRemainingBytes( Bool noTrailingBytesExpected ) = 0;
76 
77  virtual Void parseMVPIdx ( Int& riMVPIdx ) = 0;
78 
79 public:
80  virtual Void parseSkipFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) = 0;
81  virtual Void parseCUTransquantBypassFlag( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) = 0;
82  virtual Void parseSplitFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) = 0;
83  virtual Void parseMergeFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiPUIdx ) = 0;
84  virtual Void parseMergeIndex ( TComDataCU* pcCU, UInt& ruiMergeIndex ) = 0;
85  virtual Void parsePartSize ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) = 0;
86  virtual Void parsePredMode ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) = 0;
87 
88  virtual Void parseIntraDirLumaAng( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) = 0;
89  virtual Void parseIntraDirChroma( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) = 0;
90 
91  virtual Void parseInterDir ( TComDataCU* pcCU, UInt& ruiInterDir, UInt uiAbsPartIdx ) = 0;
92  virtual Void parseRefFrmIdx ( TComDataCU* pcCU, Int& riRefFrmIdx, RefPicList eRefList ) = 0;
93  virtual Void parseMvd ( TComDataCU* pcCU, UInt uiAbsPartAddr, UInt uiPartIdx, UInt uiDepth, RefPicList eRefList ) = 0;
94 
95  virtual Void parseCrossComponentPrediction ( class TComTU &rTu, ComponentID compID ) = 0;
96 
97  virtual Void parseTransformSubdivFlag( UInt& ruiSubdivFlag, UInt uiLog2TransformBlockSize ) = 0;
98  virtual Void parseQtCbf ( TComTU &rTu, const ComponentID compID, const Bool lowestLevel ) = 0;
99  virtual Void parseQtRootCbf ( UInt uiAbsPartIdx, UInt& uiQtRootCbf ) = 0;
100 
101  virtual Void parseDeltaQP ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) = 0;
102  virtual Void parseChromaQpAdjustment( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) = 0;
103 
104  virtual Void parseIPCMInfo ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth) = 0;
105 
106  virtual Void parseCoeffNxN( class TComTU &rTu, ComponentID compID ) = 0;
107 
108  virtual Void parseTransformSkipFlags ( class TComTU &rTu, ComponentID component ) = 0;
109 
110  virtual Void parseExplicitRdpcmMode ( TComTU &rTu, ComponentID compID ) = 0;
111 
112  virtual ~TDecEntropyIf() {}
113 };
114 
117 {
118 private:
121  //UInt m_uiBakAbsPartIdx;
122  //UInt m_uiBakChromaOffset;
123  //UInt m_bakAbsPartIdxCU;
124 
125 public:
126  Void init (TComPrediction* p) {m_pcPrediction = p;}
127  Void decodePUWise ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, TComDataCU* pcSubCU );
128  Void decodeInterDirPU ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiPartIdx );
129  Void decodeRefFrmIdxPU ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiPartIdx, RefPicList eRefList );
130  Void decodeMvdPU ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiPartIdx, RefPicList eRefList );
131  Void decodeMVPIdxPU ( TComDataCU* pcSubCU, UInt uiPartAddr, UInt uiDepth, UInt uiPartIdx, RefPicList eRefList );
132 
134  Void setBitstream ( TComInputBitstream* p ) { m_pcEntropyDecoderIf->setBitstream(p); }
135  Void resetEntropy ( TComSlice* p) { m_pcEntropyDecoderIf->resetEntropy(p); }
136 
137  Void decodeVPS ( TComVPS* pcVPS ) { m_pcEntropyDecoderIf->parseVPS(pcVPS); }
138  Void decodeSPS ( TComSPS* pcSPS ) { m_pcEntropyDecoderIf->parseSPS(pcSPS); }
139  Void decodePPS ( TComPPS* pcPPS ) { m_pcEntropyDecoderIf->parsePPS(pcPPS); }
140  Void decodeSliceHeader ( TComSlice* pcSlice, ParameterSetManager *parameterSetManager) { m_pcEntropyDecoderIf->parseSliceHeader(pcSlice, parameterSetManager); }
141 
142  Void decodeTerminatingBit ( UInt& ruiIsLast ) { m_pcEntropyDecoderIf->parseTerminatingBit(ruiIsLast); }
143  Void decodeRemainingBytes( Bool noTrailingBytesExpected ) { m_pcEntropyDecoderIf->parseRemainingBytes(noTrailingBytesExpected); }
144 
146 
147 public:
148  Void decodeSplitFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
149  Void decodeSkipFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
150  Void decodeCUTransquantBypassFlag( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
151  Void decodeMergeFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiPUIdx );
152  Void decodeMergeIndex ( TComDataCU* pcSubCU, UInt uiPartIdx, UInt uiPartAddr, UInt uiDepth );
153  Void decodePredMode ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
154  Void decodePartSize ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
155 
156  Void decodeIPCMInfo ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
157 
158  Void decodePredInfo ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, TComDataCU* pcSubCU );
159 
160  Void decodeIntraDirModeLuma ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
161  Void decodeIntraDirModeChroma( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
162 
163  Void decodeQP ( TComDataCU* pcCU, UInt uiAbsPartIdx );
164  Void decodeChromaQpAdjustment( TComDataCU* pcCU, UInt uiAbsPartIdx );
165 
166 private:
167 
168  Void xDecodeTransform ( Bool& bCodeDQP, Bool& isChromaQpAdjCoded, TComTU &rTu, const Int quadtreeTULog2MinSizeInCU );
169 
170 public:
171 
172  Void decodeCoeff ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, Bool& bCodeDQP, Bool& isChromaQpAdjCoded );
173 
174 };// END CLASS DEFINITION TDecEntropy
175 
177 
178 #endif // __TDECENTROPY__
179 
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:98
virtual Void parseSliceHeader(TComSlice *pcSlice, ParameterSetManager *parameterSetManager)=0
TDecEntropyIf * getEntropyDecoder()
Definition: TDecEntropy.h:145
Void decodeSkipFlag(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth)
Definition: TDecEntropy.cpp:59
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 constants, macros and tool parameters.
virtual Void parseQtCbf(TComTU &rTu, const ComponentID compID, const Bool lowestLevel)=0
void Void
Definition: TypeDef.h:285
virtual ~TDecEntropyIf()
Definition: TDecEntropy.h:112
Void decodeMergeFlag(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiPUIdx)
Definition: TDecEntropy.cpp:78
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:297
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
TDecEntropyIf * m_pcEntropyDecoderIf
Definition: TDecEntropy.h:119
Void setBitstream(TComInputBitstream *p)
Definition: TDecEntropy.h:134
entropy decoder pure class
Definition: TDecEntropy.h:61
SBAC decoder class.
Definition: TDecSbac.h:63
Void resetEntropy(TComSlice *p)
Definition: TDecEntropy.h:135
Void setEntropyDecoder(TDecEntropyIf *p)
Definition: TDecEntropy.cpp:52
Void init(TComPrediction *p)
Definition: TDecEntropy.h:126
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:138
bool Bool
Definition: TypeDef.h:286
Void decodeIPCMInfo(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth)
PPS class.
Definition: TComSlice.h:977
Void decodeCUTransquantBypassFlag(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth)
Definition: TDecEntropy.cpp:65
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:415
virtual Void parseMergeFlag(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiPUIdx)=0
class for handling bitstream (header)
Void decodeChromaQpAdjustment(TComDataCU *pcCU, UInt uiAbsPartIdx)
TComPrediction * m_pcPrediction
Definition: TDecEntropy.h:120
Void decodeQP(TComDataCU *pcCU, UInt uiAbsPartIdx)
entropy decoder class
Definition: TDecEntropy.h:116
virtual Void parseSPS(TComSPS *pcSPS)=0
Void decodeRemainingBytes(Bool noTrailingBytesExpected)
Definition: TDecEntropy.h:143
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:139
Void decodeVPS(TComVPS *pcVPS)
Definition: TDecEntropy.h:137
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:296
Void decodeIntraDirModeChroma(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth)
ComponentID
Definition: TypeDef.h:368
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:91
Void decodeTerminatingBit(UInt &ruiIsLast)
Definition: TDecEntropy.h:142
slice header class
Definition: TComSlice.h:1198
Void decodePartSize(TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth)
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:722
Void decodeSliceHeader(TComSlice *pcSlice, ParameterSetManager *parameterSetManager)
Definition: TDecEntropy.h:140