1 | |
---|
2 | |
---|
3 | /** \file TEncCU.h |
---|
4 | \brief CU encoder class (header) |
---|
5 | */ |
---|
6 | |
---|
7 | #ifndef __TENCCU__ |
---|
8 | #define __TENCCU__ |
---|
9 | |
---|
10 | // Include files |
---|
11 | #include "../TLibCommon/CommonDef.h" |
---|
12 | #include "../TLibCommon/TComYuv.h" |
---|
13 | #include "../TLibCommon/TComPrediction.h" |
---|
14 | #include "../TLibCommon/TComTrQuant.h" |
---|
15 | #include "../TLibCommon/TComBitCounter.h" |
---|
16 | #include "../TLibCommon/TComDataCU.h" |
---|
17 | |
---|
18 | #include "TEncEntropy.h" |
---|
19 | #include "TEncSearch.h" |
---|
20 | |
---|
21 | class TEncTop; |
---|
22 | class TEncSbac; |
---|
23 | class TEncCavlc; |
---|
24 | class TEncSlice; |
---|
25 | |
---|
26 | // ==================================================================================================================== |
---|
27 | // Class definition |
---|
28 | // ==================================================================================================================== |
---|
29 | |
---|
30 | /// CU encoder class |
---|
31 | class TEncCu |
---|
32 | { |
---|
33 | private: |
---|
34 | |
---|
35 | TComDataCU** m_ppcBestCU; ///< Best CUs in each depth |
---|
36 | TComDataCU** m_ppcTempCU; ///< Temporary CUs in each depth |
---|
37 | UChar m_uhTotalDepth; |
---|
38 | |
---|
39 | TComYuv** m_ppcPredYuvBest; ///< Best Prediction Yuv for each depth |
---|
40 | TComYuv** m_ppcResiYuvBest; ///< Best Residual Yuv for each depth |
---|
41 | TComYuv** m_ppcRecoYuvBest; ///< Best Reconstruction Yuv for each depth |
---|
42 | TComYuv** m_ppcPredYuvTemp; ///< Temporary Prediction Yuv for each depth |
---|
43 | TComYuv** m_ppcResiYuvTemp; ///< Temporary Residual Yuv for each depth |
---|
44 | TComYuv** m_ppcRecoYuvTemp; ///< Temporary Reconstruction Yuv for each depth |
---|
45 | TComYuv** m_ppcOrigYuv; ///< Original Yuv for each depth |
---|
46 | TComYuv** m_ppcResPredTmp; ///< Temporary residual prediction for each depth |
---|
47 | |
---|
48 | // Data : encoder control |
---|
49 | Int m_iQp; ///< Last QP |
---|
50 | |
---|
51 | // Access channel |
---|
52 | TEncCfg* m_pcEncCfg; |
---|
53 | TEncTop* m_pcEncTop; |
---|
54 | TComPrediction* m_pcPrediction; |
---|
55 | TEncSearch* m_pcPredSearch; |
---|
56 | TComTrQuant* m_pcTrQuant; |
---|
57 | TComBitCounter* m_pcBitCounter; |
---|
58 | TComRdCost* m_pcRdCost; |
---|
59 | |
---|
60 | TEncEntropy* m_pcEntropyCoder; |
---|
61 | TEncCavlc* m_pcCavlcCoder; |
---|
62 | TEncSbac* m_pcSbacCoder; |
---|
63 | TEncBinCABAC* m_pcBinCABAC; |
---|
64 | |
---|
65 | // SBAC RD |
---|
66 | TEncSbac*** m_pppcRDSbacCoder; |
---|
67 | TEncSbac* m_pcRDGoOnSbacCoder; |
---|
68 | Bool m_bUseSBACRD; |
---|
69 | |
---|
70 | #if MW_MVI_SIGNALLING_MODE == 1 |
---|
71 | UChar *m_puhDepthSaved; |
---|
72 | UChar *m_puhWidthSaved; |
---|
73 | UChar *m_puhHeightSaved; |
---|
74 | #endif |
---|
75 | |
---|
76 | public: |
---|
77 | /// copy parameters from encoder class |
---|
78 | Void init ( TEncTop* pcEncTop ); |
---|
79 | |
---|
80 | /// create internal buffers |
---|
81 | Void create ( UChar uhTotalDepth, UInt iMaxWidth, UInt iMaxHeight ); |
---|
82 | |
---|
83 | /// destroy internal buffers |
---|
84 | Void destroy (); |
---|
85 | |
---|
86 | /// CU analysis function |
---|
87 | Void compressCU ( TComDataCU*& rpcCU ); |
---|
88 | |
---|
89 | /// CU encoding function |
---|
90 | Void encodeCU ( TComDataCU* pcCU, Bool bForceTerminate = false ); |
---|
91 | |
---|
92 | /// set QP value |
---|
93 | Void setQpLast ( Int iQp ) { m_iQp = iQp; } |
---|
94 | |
---|
95 | protected: |
---|
96 | Void xCompressCU ( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, UInt uiDepth ); |
---|
97 | Void xEncodeCU ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ); |
---|
98 | |
---|
99 | Void xCheckRDCostAMVPSkip( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU ); |
---|
100 | |
---|
101 | #if SB_INTERVIEW_SKIP |
---|
102 | Void xCheckRDCostMerge2Nx2N( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, Bool bFullyRendered ) ; |
---|
103 | #else |
---|
104 | Void xCheckRDCostMerge2Nx2N( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU ); |
---|
105 | #endif |
---|
106 | |
---|
107 | Void xCheckRDCostSkip ( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, Bool bBSkipRes ); |
---|
108 | #if SB_INTERVIEW_SKIP |
---|
109 | Void xCheckRDCostInter( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, PartSize ePartSize, Bool bFullyRendered ) ; |
---|
110 | #else |
---|
111 | Void xCheckRDCostInter ( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, PartSize ePartSize ); |
---|
112 | #endif |
---|
113 | Void xCheckRDCostIntra ( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, PartSize ePartSize ); |
---|
114 | Void xCheckBestMode ( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, UChar uhDepth ); |
---|
115 | |
---|
116 | Void xCopyAMVPInfo ( AMVPInfo* pSrc, AMVPInfo* pDst ); |
---|
117 | Void xCopyYuv2Pic ( TComPic* rpcPic, UInt uiCUAddr, UInt uiAbsZorderIdx, UInt uiDepth ); |
---|
118 | Void xCopyYuv2Tmp ( UInt uhPartUnitIdx, UInt uiDepth ); |
---|
119 | Void xAddMVISignallingBits( TComDataCU* pcCU ); |
---|
120 | #if MW_MVI_SIGNALLING_MODE == 0 |
---|
121 | Void xCheckRDCostMvInheritance( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, UChar uhTextureModeDepth, Bool bRecursiveCall ); |
---|
122 | #elif MW_MVI_SIGNALLING_MODE == 1 |
---|
123 | Void xCheckRDCostMvInheritance( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, UChar uhTextureModeDepth, Bool bSkipResidual, Bool bRecursiveCall ); |
---|
124 | Void xSaveDepthWidthHeight( TComDataCU* pcCU ); |
---|
125 | Void xRestoreDepthWidthHeight( TComDataCU* pcCU ); |
---|
126 | #endif |
---|
127 | }; |
---|
128 | |
---|
129 | |
---|
130 | #endif // __TENCMB__ |
---|
131 | |
---|