Mercurial > hg > forks > libbpg
comparison jctvc/TLibEncoder/TEncCu.h @ 0:772086c29cc7
Initial import.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Wed, 16 Nov 2016 11:16:33 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:772086c29cc7 |
---|---|
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-2014, 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 | |
34 /** \file TEncCu.h | |
35 \brief Coding Unit (CU) encoder class (header) | |
36 */ | |
37 | |
38 #ifndef __TENCCU__ | |
39 #define __TENCCU__ | |
40 | |
41 // Include files | |
42 #include "TLibCommon/CommonDef.h" | |
43 #include "TLibCommon/TComYuv.h" | |
44 #include "TLibCommon/TComPrediction.h" | |
45 #include "TLibCommon/TComTrQuant.h" | |
46 #include "TLibCommon/TComBitCounter.h" | |
47 #include "TLibCommon/TComDataCU.h" | |
48 | |
49 #include "TEncEntropy.h" | |
50 #include "TEncSearch.h" | |
51 #include "TEncRateCtrl.h" | |
52 //! \ingroup TLibEncoder | |
53 //! \{ | |
54 | |
55 class TEncTop; | |
56 class TEncSbac; | |
57 class TEncCavlc; | |
58 class TEncSlice; | |
59 | |
60 // ==================================================================================================================== | |
61 // Class definition | |
62 // ==================================================================================================================== | |
63 | |
64 /// CU encoder class | |
65 class TEncCu | |
66 { | |
67 private: | |
68 | |
69 TComDataCU** m_ppcBestCU; ///< Best CUs in each depth | |
70 TComDataCU** m_ppcTempCU; ///< Temporary CUs in each depth | |
71 UChar m_uhTotalDepth; | |
72 | |
73 TComYuv** m_ppcPredYuvBest; ///< Best Prediction Yuv for each depth | |
74 TComYuv** m_ppcResiYuvBest; ///< Best Residual Yuv for each depth | |
75 TComYuv** m_ppcRecoYuvBest; ///< Best Reconstruction Yuv for each depth | |
76 TComYuv** m_ppcPredYuvTemp; ///< Temporary Prediction Yuv for each depth | |
77 TComYuv** m_ppcResiYuvTemp; ///< Temporary Residual Yuv for each depth | |
78 TComYuv** m_ppcRecoYuvTemp; ///< Temporary Reconstruction Yuv for each depth | |
79 TComYuv** m_ppcOrigYuv; ///< Original Yuv for each depth | |
80 | |
81 // Data : encoder control | |
82 Bool m_bEncodeDQP; | |
83 Bool m_CodeChromaQpAdjFlag; | |
84 Int m_ChromaQpAdjIdc; | |
85 | |
86 // Access channel | |
87 TEncCfg* m_pcEncCfg; | |
88 TEncSearch* m_pcPredSearch; | |
89 TComTrQuant* m_pcTrQuant; | |
90 TComRdCost* m_pcRdCost; | |
91 | |
92 TEncEntropy* m_pcEntropyCoder; | |
93 TEncBinCABAC* m_pcBinCABAC; | |
94 | |
95 // SBAC RD | |
96 TEncSbac*** m_pppcRDSbacCoder; | |
97 TEncSbac* m_pcRDGoOnSbacCoder; | |
98 TEncRateCtrl* m_pcRateCtrl; | |
99 | |
100 public: | |
101 /// copy parameters from encoder class | |
102 Void init ( TEncTop* pcEncTop ); | |
103 | |
104 /// create internal buffers | |
105 Void create ( UChar uhTotalDepth, UInt iMaxWidth, UInt iMaxHeight, ChromaFormat chromaFormat ); | |
106 | |
107 /// destroy internal buffers | |
108 Void destroy (); | |
109 | |
110 /// CTU analysis function | |
111 Void compressCtu ( TComDataCU* pCtu ); | |
112 | |
113 /// CTU encoding function | |
114 Void encodeCtu ( TComDataCU* pCtu ); | |
115 | |
116 Int updateCtuDataISlice ( TComDataCU* pCtu, Int width, Int height ); | |
117 | |
118 protected: | |
119 Void finishCU ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ); | |
120 #if AMP_ENC_SPEEDUP | |
121 Void xCompressCU ( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, UInt uiDepth DEBUG_STRING_FN_DECLARE(sDebug), PartSize eParentPartSize = NUMBER_OF_PART_SIZES ); | |
122 #else | |
123 Void xCompressCU ( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, UInt uiDepth ); | |
124 #endif | |
125 Void xEncodeCU ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ); | |
126 | |
127 Int xComputeQP ( TComDataCU* pcCU, UInt uiDepth ); | |
128 Void xCheckBestMode ( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, UInt uiDepth DEBUG_STRING_FN_DECLARE(sParent) DEBUG_STRING_FN_DECLARE(sTest) DEBUG_STRING_PASS_INTO(Bool bAddSizeInfo=true)); | |
129 | |
130 Void xCheckRDCostMerge2Nx2N( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU DEBUG_STRING_FN_DECLARE(sDebug), Bool *earlyDetectionSkipMode ); | |
131 | |
132 #if AMP_MRG | |
133 Void xCheckRDCostInter ( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, PartSize ePartSize DEBUG_STRING_FN_DECLARE(sDebug), Bool bUseMRG = false ); | |
134 #else | |
135 Void xCheckRDCostInter ( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, PartSize ePartSize ); | |
136 #endif | |
137 | |
138 Void xCheckRDCostIntra ( TComDataCU *&rpcBestCU, | |
139 TComDataCU *&rpcTempCU, | |
140 Double &cost, | |
141 PartSize ePartSize | |
142 DEBUG_STRING_FN_DECLARE(sDebug) | |
143 ); | |
144 | |
145 Void xCheckDQP ( TComDataCU* pcCU ); | |
146 | |
147 Void xCheckIntraPCM ( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU ); | |
148 Void xCopyAMVPInfo ( AMVPInfo* pSrc, AMVPInfo* pDst ); | |
149 Void xCopyYuv2Pic (TComPic* rpcPic, UInt uiCUAddr, UInt uiAbsPartIdx, UInt uiDepth, UInt uiSrcDepth, TComDataCU* pcCU, UInt uiLPelX, UInt uiTPelY ); | |
150 Void xCopyYuv2Tmp ( UInt uhPartUnitIdx, UInt uiDepth ); | |
151 | |
152 Bool getdQPFlag () { return m_bEncodeDQP; } | |
153 Void setdQPFlag ( Bool b ) { m_bEncodeDQP = b; } | |
154 | |
155 Bool getCodeChromaQpAdjFlag() { return m_CodeChromaQpAdjFlag; } | |
156 Void setCodeChromaQpAdjFlag( Bool b ) { m_CodeChromaQpAdjFlag = b; } | |
157 | |
158 #if ADAPTIVE_QP_SELECTION | |
159 // Adaptive reconstruction level (ARL) statistics collection functions | |
160 Void xCtuCollectARLStats(TComDataCU* pCtu); | |
161 Int xTuCollectARLStats(TCoeff* rpcCoeff, TCoeff* rpcArlCoeff, Int NumCoeffInCU, Double* cSum, UInt* numSamples ); | |
162 #endif | |
163 | |
164 #if AMP_ENC_SPEEDUP | |
165 #if AMP_MRG | |
166 Void deriveTestModeAMP (TComDataCU *pcBestCU, PartSize eParentPartSize, Bool &bTestAMP_Hor, Bool &bTestAMP_Ver, Bool &bTestMergeAMP_Hor, Bool &bTestMergeAMP_Ver); | |
167 #else | |
168 Void deriveTestModeAMP (TComDataCU *pcBestCU, PartSize eParentPartSize, Bool &bTestAMP_Hor, Bool &bTestAMP_Ver); | |
169 #endif | |
170 #endif | |
171 | |
172 Void xFillPCMBuffer ( TComDataCU* pCU, TComYuv* pOrgYuv ); | |
173 }; | |
174 | |
175 //! \} | |
176 | |
177 #endif // __TENCMB__ |