source: 3DVCSoftware/branches/0.1-poznan-univ/source/Lib/TLibEncoder/TEncCu.h

Last change on this file was 2, checked in by hhi, 13 years ago

inital import

  • Property svn:eol-style set to native
File size: 4.8 KB
Line 
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
21class TEncTop;
22class TEncSbac;
23class TEncCavlc;
24class TEncSlice;
25
26// ====================================================================================================================
27// Class definition
28// ====================================================================================================================
29
30/// CU encoder class
31class TEncCu
32{
33private:
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
76public:
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 
95protected:
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
Note: See TracBrowser for help on using the repository browser.