source: 3DVCSoftware/branches/HTM-5.0-Sony/source/Lib/TLibEncoder/TEncSearch.h @ 368

Last change on this file since 368 was 197, checked in by sony, 12 years ago

Add DV_V_RESTRICTION_B0037 macro and two config parameters (DisparitySearchRangeRestriction, VerticalDisparitySearchRange).

It enables to restrict disparity vector range at encoder on motion search.
When users want to try the option, please set DisparitySearchRangeRestriction to 1 and set VerticalDisparitySearchRange to any positive integer value to be tested. The restriction is disabled by default.

  • Property svn:eol-style set to native
File size: 29.8 KB
Line 
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-2012, 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     TEncSearch.h
35    \brief    encoder search class (header)
36*/
37
38#ifndef __TENCSEARCH__
39#define __TENCSEARCH__
40
41// Include files
42#include "TLibCommon/TComYuv.h"
43#include "TLibCommon/TComMotionInfo.h"
44#include "TLibCommon/TComPattern.h"
45#include "TLibCommon/TComPrediction.h"
46#include "TLibCommon/TComTrQuant.h"
47#include "TLibCommon/TComPic.h"
48#include "TEncEntropy.h"
49#include "TEncSbac.h"
50#include "TEncCfg.h"
51
52//! \ingroup TLibEncoder
53//! \{
54
55class TEncCu;
56
57// ====================================================================================================================
58// Class definition
59// ====================================================================================================================
60
61/// encoder search class
62class TEncSearch : public TComPrediction
63{
64private:
65  TCoeff**        m_ppcQTTempCoeffY;
66  TCoeff**        m_ppcQTTempCoeffCb;
67  TCoeff**        m_ppcQTTempCoeffCr;
68  TCoeff*         m_pcQTTempCoeffY;
69  TCoeff*         m_pcQTTempCoeffCb;
70  TCoeff*         m_pcQTTempCoeffCr;
71#if ADAPTIVE_QP_SELECTION
72  Int**           m_ppcQTTempArlCoeffY;
73  Int**           m_ppcQTTempArlCoeffCb;
74  Int**           m_ppcQTTempArlCoeffCr;
75  Int*            m_pcQTTempArlCoeffY;
76  Int*            m_pcQTTempArlCoeffCb;
77  Int*            m_pcQTTempArlCoeffCr;
78#endif
79  UChar*          m_puhQTTempTrIdx;
80  UChar*          m_puhQTTempCbf[3];
81 
82  TComYuv*        m_pcQTTempTComYuv;
83  TComYuv         m_tmpYuvPred; // To be used in xGetInterPredictionError() to avoid constant memory allocation/deallocation
84protected:
85  // interface to option
86  TEncCfg*        m_pcEncCfg;
87 
88  // interface to classes
89  TComTrQuant*    m_pcTrQuant;
90  TComRdCost*     m_pcRdCost;
91  TEncEntropy*    m_pcEntropyCoder;
92 
93  // ME parameters
94  Int             m_iSearchRange;
95  Int             m_bipredSearchRange; // Search range for bi-prediction
96#if DV_V_RESTRICTION_B0037
97  Bool            m_bUseDisparitySearchRangeRestriction;
98  Int             m_iVerticalDisparitySearchRange;
99#endif
100  Int             m_iFastSearch;
101  Int             m_aaiAdaptSR[2][33];
102  TComMv          m_cSrchRngLT;
103  TComMv          m_cSrchRngRB;
104  TComMv          m_acMvPredictors[3];
105 
106  // RD computation
107  TEncSbac***     m_pppcRDSbacCoder;
108  TEncSbac*       m_pcRDGoOnSbacCoder;
109  Bool            m_bUseSBACRD;
110  DistParam       m_cDistParam;
111 
112  // Misc.
113  Pel*            m_pTempPel;
114  UInt*           m_puiDFilter;
115  Int             m_iMaxDeltaQP;
116 
117
118#if HHI_VSO
119  TComYuv         m_cYuvRecTemp; 
120#endif
121 
122  // AMVP cost computation
123#if HHI_INTER_VIEW_MOTION_PRED
124  UInt            m_auiMVPIdxCost[AMVP_MAX_NUM_CANDS+2][AMVP_MAX_NUM_CANDS+2]; //th array bounds
125#else
126  // UInt            m_auiMVPIdxCost[AMVP_MAX_NUM_CANDS+1][AMVP_MAX_NUM_CANDS];
127  UInt            m_auiMVPIdxCost[AMVP_MAX_NUM_CANDS+1][AMVP_MAX_NUM_CANDS+1]; //th array bounds
128#endif
129 
130public:
131  TEncSearch();
132  virtual ~TEncSearch();
133 
134  Void init(  TEncCfg*      pcEncCfg,
135            TComTrQuant*  pcTrQuant,
136            Int           iSearchRange,
137            Int           bipredSearchRange,
138#if DV_V_RESTRICTION_B0037
139            Bool          bUseDisparitySearchRangeRestriction,
140            Int           iVerticalDisparitySearchRange,
141#endif
142            Int           iFastSearch,
143            Int           iMaxDeltaQP,
144            TEncEntropy*  pcEntropyCoder,
145            TComRdCost*   pcRdCost,
146            TEncSbac***   pppcRDSbacCoder,
147            TEncSbac*     pcRDGoOnSbacCoder );
148 
149protected:
150 
151  /// sub-function for motion vector refinement used in fractional-pel accuracy
152  UInt  xPatternRefinement( TComPattern* pcPatternKey,
153                           TComMv baseRefMv,
154                           Int iFrac, TComMv& rcMvFrac );
155 
156  typedef struct
157  {
158    Pel*  piRefY;
159    Int   iYStride;
160    Int   iBestX;
161    Int   iBestY;
162    UInt  uiBestRound;
163    UInt  uiBestDistance;
164    UInt  uiBestSad;
165    UChar ucPointNr;
166  } IntTZSearchStruct;
167 
168  // sub-functions for ME
169  __inline Void xTZSearchHelp         ( TComPattern* pcPatternKey, IntTZSearchStruct& rcStruct, const Int iSearchX, const Int iSearchY, const UChar ucPointNr, const UInt uiDistance );
170  __inline Void xTZ2PointSearch       ( TComPattern* pcPatternKey, IntTZSearchStruct& rcStrukt, TComMv* pcMvSrchRngLT, TComMv* pcMvSrchRngRB );
171  __inline Void xTZ8PointSquareSearch ( TComPattern* pcPatternKey, IntTZSearchStruct& rcStrukt, TComMv* pcMvSrchRngLT, TComMv* pcMvSrchRngRB, const Int iStartX, const Int iStartY, const Int iDist );
172  __inline Void xTZ8PointDiamondSearch( TComPattern* pcPatternKey, IntTZSearchStruct& rcStrukt, TComMv* pcMvSrchRngLT, TComMv* pcMvSrchRngRB, const Int iStartX, const Int iStartY, const Int iDist );
173 
174  Void xGetInterPredictionError( TComDataCU* pcCU, TComYuv* pcYuvOrg, Int iPartIdx, UInt& ruiSAD, Bool Hadamard );
175
176public:
177  Void  preestChromaPredMode    ( TComDataCU* pcCU, 
178                                  TComYuv*    pcOrgYuv, 
179                                  TComYuv*    pcPredYuv );
180  Void  estIntraPredQT          ( TComDataCU* pcCU, 
181                                  TComYuv*    pcOrgYuv, 
182                                  TComYuv*    pcPredYuv, 
183                                  TComYuv*    pcResiYuv, 
184                                  TComYuv*    pcRecoYuv,
185                                  Dist&       ruiDistC,
186                                  Bool        bLumaOnly );
187  Void  estIntraPredChromaQT    ( TComDataCU* pcCU, 
188                                  TComYuv*    pcOrgYuv, 
189                                  TComYuv*    pcPredYuv, 
190                                  TComYuv*    pcResiYuv, 
191                                  TComYuv*    pcRecoYuv,
192                                  Dist        uiPreCalcDistC );
193 
194 
195  /// encoder estimation - inter prediction (non-skip)
196  Void predInterSearch          ( TComDataCU* pcCU,
197                                  TComYuv*    pcOrgYuv,
198#if LG_RESTRICTEDRESPRED_M24766
199                                  TComYuv*    rpcResiPredYuv,
200#endif
201                                  TComYuv*&   rpcPredYuv,
202                                  TComYuv*&   rpcResiYuv,
203                                  TComYuv*&   rpcRecoYuv,
204                                  Bool        bUseRes = false
205#if AMP_MRG
206                                 ,Bool        bUseMRG = false
207#endif
208                                );
209 
210#if HHI_INTER_VIEW_RESIDUAL_PRED
211  /// encode residual and compute rd-cost for inter mode
212  Void encodeResAndCalcRdInterCU( TComDataCU* pcCU,
213                                  TComYuv*    pcYuvOrg,
214                                  TComYuv*    pcYuvPred,
215                                  TComYuv*&   rpcYuvResi,
216                                  TComYuv*&   rpcYuvResiBest,
217                                  TComYuv*&   rpcYuvRec,
218                                  TComYuv*&   rpcYuvResPrd,
219                                  Bool        bSkipRes );
220#else
221  /// encode residual and compute rd-cost for inter mode
222  Void encodeResAndCalcRdInterCU( TComDataCU* pcCU,
223                                  TComYuv*    pcYuvOrg,
224                                  TComYuv*    pcYuvPred,
225                                  TComYuv*&   rpcYuvResi,
226                                  TComYuv*&   rpcYuvResiBest,
227                                  TComYuv*&   rpcYuvRec,
228                                  Bool        bSkipRes );
229#endif
230  /// set ME search range
231  Void setAdaptiveSearchRange   ( Int iDir, Int iRefIdx, Int iSearchRange) { m_aaiAdaptSR[iDir][iRefIdx] = iSearchRange; }
232 
233  Void xEncPCM    (TComDataCU* pcCU, UInt uiAbsPartIdx, Pel* piOrg, Pel* piPCM, Pel* piPred, Pel* piResi, Pel* piReco, UInt uiStride, UInt uiWidth, UInt uiHeight, TextType eText);
234  Void IPCMSearch (TComDataCU* pcCU, TComYuv* pcOrgYuv, TComYuv*& rpcPredYuv, TComYuv*& rpcResiYuv, TComYuv*& rpcRecoYuv );
235protected:
236 
237  // -------------------------------------------------------------------------------------------------------------------
238  // Intra search
239  // -------------------------------------------------------------------------------------------------------------------
240 
241  Void  xEncSubdivCbfQT           ( TComDataCU*  pcCU,
242                                    UInt         uiTrDepth,
243                                    UInt         uiAbsPartIdx,
244                                    Bool         bLuma,
245                                    Bool         bChroma );
246  Void  xEncCoeffQT               ( TComDataCU*  pcCU,
247                                    UInt         uiTrDepth,
248                                    UInt         uiAbsPartIdx,
249                                    TextType     eTextType,
250                                    Bool         bRealCoeff );
251  Void  xEncIntraHeader           ( TComDataCU*  pcCU,
252                                    UInt         uiTrDepth,
253                                    UInt         uiAbsPartIdx,
254                                    Bool         bLuma,
255                                    Bool         bChroma );
256  UInt  xGetIntraBitsQT           ( TComDataCU*  pcCU,
257                                    UInt         uiTrDepth,
258                                    UInt         uiAbsPartIdx,
259                                    Bool         bLuma,
260                                    Bool         bChroma,
261                                    Bool         bRealCoeff );
262 
263  Void  xIntraCodingLumaBlk       ( TComDataCU*  pcCU,
264                                    UInt         uiTrDepth,
265                                    UInt         uiAbsPartIdx,
266                                    TComYuv*     pcOrgYuv, 
267                                    TComYuv*     pcPredYuv, 
268                                    TComYuv*     pcResiYuv, 
269                                    Dist&        ruiDist
270#if LG_ZEROINTRADEPTHRESI_A0087
271                                   ,Bool        bZeroResi = false
272#endif
273                                   );
274  Void  xIntraCodingChromaBlk     ( TComDataCU*  pcCU,
275                                    UInt         uiTrDepth,
276                                    UInt         uiAbsPartIdx,
277                                    TComYuv*     pcOrgYuv, 
278                                    TComYuv*     pcPredYuv, 
279                                    TComYuv*     pcResiYuv, 
280                                    Dist&        ruiDist,
281                                    UInt         uiChromaId );
282  Void  xRecurIntraCodingQT       ( TComDataCU*  pcCU, 
283                                    UInt         uiTrDepth,
284                                    UInt         uiAbsPartIdx, 
285                                    Bool         bLumaOnly,
286                                    TComYuv*     pcOrgYuv, 
287                                    TComYuv*     pcPredYuv, 
288                                    TComYuv*     pcResiYuv, 
289                                    Dist&        ruiDistY,
290                                    Dist&        ruiDistC,
291#if HHI_RQT_INTRA_SPEEDUP
292                                    Bool         bCheckFirst,
293#endif
294                                    Double&      dRDCost
295#if LG_ZEROINTRADEPTHRESI_A0087
296                                   ,Bool         bZeroResi = false
297#endif
298                                  );
299 
300  Void  xSetIntraResultQT         ( TComDataCU*  pcCU,
301                                    UInt         uiTrDepth,
302                                    UInt         uiAbsPartIdx,
303                                    Bool         bLumaOnly,
304                                    TComYuv*     pcRecoYuv );
305 
306  Void  xRecurIntraChromaCodingQT ( TComDataCU*  pcCU, 
307                                    UInt         uiTrDepth,
308                                    UInt         uiAbsPartIdx, 
309                                    TComYuv*     pcOrgYuv, 
310                                    TComYuv*     pcPredYuv, 
311                                    TComYuv*     pcResiYuv, 
312                                    Dist&        ruiDist );
313  Void  xSetIntraResultChromaQT   ( TComDataCU*  pcCU,
314                                    UInt         uiTrDepth,
315                                    UInt         uiAbsPartIdx,
316                                    TComYuv*     pcRecoYuv );
317 
318#if RWTH_SDC_DLT_B0036
319  Void  xAnalyzeSegmentsSDC       ( Pel* pOrig,
320                                   UInt uiStride,
321                                   UInt uiSize,
322                                   Pel* rpSegMeans,
323                                   UInt uiNumSegments,
324                                   Bool* pMask,
325                                   UInt uiMaskStride );
326 
327  Void  xIntraCodingSDC           ( TComDataCU* pcCU, UInt uiAbsPartIdx, TComYuv* pcOrgYuv, TComYuv* pcPredYuv, Dist& ruiDist, Double& dRDCost, Bool bResidual );
328#endif
329 
330  // -------------------------------------------------------------------------------------------------------------------
331  // DMM intra search
332  // -------------------------------------------------------------------------------------------------------------------
333
334#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
335  Bool predIntraLumaDMMAvailable  ( UInt           uiMode, 
336                                    UInt           uiWidth, 
337                                    UInt           uiHeight );
338  Void xGetWedgeDeltaDCsMinDist   ( TComWedgelet*  pcWedgelet, 
339                                    TComDataCU*    pcCU, 
340                                    UInt           uiAbsPtIdx, 
341                                    Pel*           piOrig, 
342                                    Pel*           piPredic, 
343                                    UInt           uiStride, 
344                                    UInt           uiWidth, 
345                                    UInt           uiHeight, 
346                                    Int&           riDeltaDC1, 
347                                    Int&           riDeltaDC2, 
348                                    Bool           bAboveAvail, 
349                                    Bool           bLeftAvail );
350#endif
351
352#if LGE_EDGE_INTRA_A0070
353  Bool  xEdgePartition       ( TComDataCU* pcCU, UInt uiPartIdx, Bool bPU4x4 );
354  Bool  xCheckTerminatedEdge ( Bool* pbEdge, Int iX, Int iY, Int iWidth, Int iHeight );
355  Bool  xConstructChainCode  ( TComDataCU* pcCU, UInt uiPartIdx, Bool bPU4x4 );
356#if LGE_EDGE_INTRA_DELTA_DC
357  Void  xAssignEdgeIntraDeltaDCs( TComDataCU* pcCU, UInt uiAbsPartIdx, Pel* piOrig, UInt uiStride, Pel* piPredic, UInt uiWidth, UInt uiHeight );
358#endif
359#endif
360
361#if HHI_DMM_WEDGE_INTRA
362  Void findWedgeFullMinDist       ( TComDataCU*    pcCU, 
363                                    UInt           uiAbsPtIdx,
364                                    Pel*           piOrig,
365                                    Pel*           piPredic,
366                                    UInt           uiStride,
367                                    UInt           uiWidth,
368                                    UInt           uiHeight,
369                                    UInt&          ruiTabIdx,
370                                    Int&           riDeltaDC1,
371                                    Int&           riDeltaDC2,
372                                    Bool           bAboveAvail,
373                                    Bool           bLeftAvail );
374  Void findWedgePredDirMinDist    ( TComDataCU*    pcCU, 
375                                    UInt           uiAbsPtIdx,
376                                    Pel*           piOrig,
377                                    Pel*           piPredic,
378                                    UInt           uiStride,
379                                    UInt           uiWidth,
380                                    UInt           uiHeight,
381                                    UInt&          ruiTabIdx,
382                                    Int&           riWedgeDeltaEnd,
383                                    Int&           riDeltaDC1,
384                                    Int&           riDeltaDC2,
385                                    Bool           bAboveAvail,
386                                    Bool           bLeftAvail );
387  Void xSearchWedgeFullMinDist    ( TComDataCU*    pcCU, 
388                                    UInt           uiAbsPtIdx, 
389                                    WedgeList*     pacWedgeList, 
390                                    Pel*           piRef, 
391                                    UInt           uiRefStride, 
392                                    UInt           uiWidth, 
393                                    UInt           uiHeight, 
394                                    UInt&          ruiTabIdx, 
395                                    Dist&          riDist );
396#if HHIQC_DMMFASTSEARCH_B0039
397  Void xSearchWedgeFullMinDistFast( TComDataCU*    pcCU, 
398                                    UInt           uiAbsPtIdx, 
399                                    WedgeNodeList* pacWedgeNodeList, 
400                                    WedgeList*     pacWedgeList, 
401                                    Pel*           piRef, 
402                                    UInt           uiRefStride, 
403                                    UInt           uiWidth, 
404                                    UInt           uiHeight, 
405                                    UInt&          ruiTabIdx, 
406                                    Dist&          riDist );
407#endif
408  Void xSearchWedgePredDirMinDist ( TComDataCU*    pcCU, 
409                                    UInt           uiAbsPtIdx, 
410                                    WedgeList*     pacWedgeList, 
411                                    Pel*           piRef, 
412                                    UInt           uiRefStride, 
413                                    UInt           uiWidth, 
414                                    UInt           uiHeight, 
415                                    UInt&          ruiTabIdx, 
416                                    Int&           riWedgeDeltaEnd );
417#endif
418#if HHI_DMM_PRED_TEX
419  Void findWedgeTexMinDist        ( TComDataCU*    pcCU, 
420                                    UInt           uiAbsPtIdx,
421                                    Pel*           piOrig,
422                                    Pel*           piPredic,
423                                    UInt           uiStride,
424                                    UInt           uiWidth,
425                                    UInt           uiHeight,
426                                    UInt&          ruiTabIdx,
427                                    Int&           riDeltaDC1,
428                                    Int&           riDeltaDC2,
429                                    Bool           bAboveAvail,
430                                    Bool           bLeftAvail );
431  Void findContourPredTex         ( TComDataCU*    pcCU, 
432                                    UInt           uiAbsPtIdx,
433                                    Pel*           piOrig,
434                                    Pel*           piPredic,
435                                    UInt           uiStride,
436                                    UInt           uiWidth,
437                                    UInt           uiHeight,
438                                    Int&           riDeltaDC1,
439                                    Int&           riDeltaDC2,
440                                    Bool           bAboveAvail,
441                                    Bool           bLeftAvail );
442#endif
443
444  // -------------------------------------------------------------------------------------------------------------------
445  // Inter search (AMP)
446  // -------------------------------------------------------------------------------------------------------------------
447 
448  Void xEstimateMvPredAMVP        ( TComDataCU* pcCU,
449                                    TComYuv*    pcOrgYuv,
450                                    UInt        uiPartIdx,
451                                    RefPicList  eRefPicList,
452                                    Int         iRefIdx,
453                                    TComMv&     rcMvPred,
454                                    Bool        bFilled = false
455                                  #if H0111_MVD_L1_ZERO
456                                  , UInt*       puiDistBiP = NULL
457                                  #endif
458                                  #if ZERO_MVD_EST
459                                  , UInt*       puiDist = NULL
460                                  #endif
461                                     );
462 
463  Void xCheckBestMVP              ( TComDataCU* pcCU,
464                                    RefPicList  eRefPicList,
465                                    TComMv      cMv,
466                                    TComMv&     rcMvPred,
467                                    Int&        riMVPIdx,
468                                    UInt&       ruiBits,
469                                    UInt&       ruiCost );
470 
471  UInt xGetTemplateCost           ( TComDataCU* pcCU,
472                                    UInt        uiPartIdx,
473                                    UInt        uiPartAddr,
474                                    TComYuv*    pcOrgYuv,
475                                    TComYuv*    pcTemplateCand,
476                                    TComMv      cMvCand,
477                                    Int         iMVPIdx,
478                                    Int         iMVPNum,
479                                    RefPicList  eRefPicList,
480                                    Int         iRefIdx,
481                                    Int         iSizeX,
482                                    Int         iSizeY
483                                  #if ZERO_MVD_EST
484                                  , UInt&       ruiDist
485                                  #endif
486                                   );
487 
488 
489  Void xCopyAMVPInfo              ( AMVPInfo*   pSrc, AMVPInfo* pDst );
490  UInt xGetMvpIdxBits             ( Int iIdx, Int iNum );
491  Void xGetBlkBits                ( PartSize  eCUMode, Bool bPSlice, Int iPartIdx,  UInt uiLastMode, UInt uiBlkBit[3]);
492 
493  Void xMergeEstimation           ( TComDataCU*     pcCU,
494                                    TComYuv*        pcYuvOrg,
495#if LG_RESTRICTEDRESPRED_M24766
496                                    TComYuv*        rpcResiPredYuv, 
497#endif
498                                    Int             iPartIdx,
499                                    UInt&           uiInterDir,
500                                    TComMvField*    pacMvField,
501                                    UInt&           uiMergeIndex,
502                                    UInt&           ruiCost
503#if CU_BASED_MRG_CAND_LIST
504                                  , TComMvField* cMvFieldNeighbours, 
505                                    UChar* uhInterDirNeighbours,
506                                    Int& numValidMergeCand
507#endif
508                                   );
509  // -------------------------------------------------------------------------------------------------------------------
510  // motion estimation
511  // -------------------------------------------------------------------------------------------------------------------
512 
513  Void xMotionEstimation          ( TComDataCU*   pcCU,
514                                    TComYuv*      pcYuvOrg,
515                                    Int           iPartIdx,
516                                    RefPicList    eRefPicList,
517                                    TComMv*       pcMvPred,
518                                    Int           iRefIdxPred,
519                                    TComMv&       rcMv,
520                                    UInt&         ruiBits,
521                                    UInt&         ruiCost,
522                                    Bool          bBi = false  );
523 
524  Void xTZSearch                  ( TComDataCU*   pcCU,
525                                    TComPattern*  pcPatternKey,
526                                    Pel*          piRefY,
527                                    Int           iRefStride,
528                                    TComMv*       pcMvSrchRngLT,
529                                    TComMv*       pcMvSrchRngRB,
530                                    TComMv&       rcMv,
531                                    UInt&         ruiSAD );
532 
533#if DV_V_RESTRICTION_B0037
534  Void xSetSearchRange            ( TComDataCU*   pcCU,
535                                    TComMv&       cMvPred,
536                                    Int           iSrchRng,
537                                    TComMv&       rcMvSrchRngLT,
538                                    TComMv&       rcMvSrchRngRB,
539                                    Bool          bDispSrchRngRst,
540                                    Int           iDispVerSrchRng );
541#else
542  Void xSetSearchRange            ( TComDataCU*   pcCU,
543                                    TComMv&       cMvPred,
544                                    Int           iSrchRng,
545                                    TComMv&       rcMvSrchRngLT,
546                                    TComMv&       rcMvSrchRngRB );
547#endif
548 
549  Void xPatternSearchFast         ( TComDataCU*   pcCU,
550                                    TComPattern*  pcPatternKey,
551                                    Pel*          piRefY,
552                                    Int           iRefStride,
553                                    TComMv*       pcMvSrchRngLT,
554                                    TComMv*       pcMvSrchRngRB,
555                                    TComMv&       rcMv,
556                                    UInt&         ruiSAD );
557 
558  Void xPatternSearch             ( TComPattern*  pcPatternKey,
559                                    Pel*          piRefY,
560                                    Int           iRefStride,
561                                    TComMv*       pcMvSrchRngLT,
562                                    TComMv*       pcMvSrchRngRB,
563                                    TComMv&       rcMv,
564                                    UInt&         ruiSAD );
565 
566  Void xPatternSearchFracDIF      ( TComDataCU*   pcCU,
567                                    TComPattern*  pcPatternKey,
568                                    Pel*          piRefY,
569                                    Int           iRefStride,
570                                    TComMv*       pcMvInt,
571                                    TComMv&       rcMvHalf,
572                                    TComMv&       rcMvQter,
573                                    UInt&         ruiCost
574                                   ,Bool biPred
575                                   );
576 
577  Void xExtDIFUpSamplingH( TComPattern* pcPattern, Bool biPred  );
578  Void xExtDIFUpSamplingQ( TComPattern* pcPatternKey, TComMv halfPelRef, Bool biPred );
579 
580  // -------------------------------------------------------------------------------------------------------------------
581  // T & Q & Q-1 & T-1
582  // -------------------------------------------------------------------------------------------------------------------
583 
584  Void xEncodeResidualQT( TComDataCU* pcCU, UInt uiAbsPartIdx, const UInt uiDepth, Bool bSubdivAndCbf, TextType eType );
585#if IBDI_DISTORTION || HHI_VSO
586  Void xEstimateResidualQT( TComDataCU* pcCU, UInt uiQuadrant, UInt uiAbsPartIdx, UInt absTUPartIdx,TComYuv* pcOrg, TComYuv* pcPred, TComYuv* pcResi, const UInt uiDepth, Double &rdCost, UInt &ruiBits, Dist &ruiDist, Dist *puiZeroDist );
587#else
588  Void xEstimateResidualQT( TComDataCU* pcCU, UInt uiQuadrant, UInt uiAbsPartIdx, UInt absTUPartIdx                                , TComYuv* pcResi, const UInt uiDepth, Double &rdCost, UInt &ruiBits, Dist &ruiDist, Dist *puiZeroDist );
589#endif
590  Void xSetResidualQTData( TComDataCU* pcCU, UInt uiQuadrant, UInt uiAbsPartIdx,UInt absTUPartIdx, TComYuv* pcResi, UInt uiDepth, Bool bSpatial );
591 
592  UInt  xModeBitsIntra ( TComDataCU* pcCU, UInt uiMode, UInt uiPU, UInt uiPartOffset, UInt uiDepth, UInt uiInitTrDepth );
593  UInt  xUpdateCandList( UInt uiMode, Double uiCost, UInt uiFastCandNum, UInt * CandModeList, Double * CandCostList );
594 
595  // -------------------------------------------------------------------------------------------------------------------
596  // compute symbol bits
597  // -------------------------------------------------------------------------------------------------------------------
598 
599  Void xAddSymbolBitsInter        ( TComDataCU*   pcCU,
600                                   UInt          uiQp,
601                                   UInt          uiTrMode,
602                                   UInt&         ruiBits,
603                                   TComYuv*&     rpcYuvRec,
604                                   TComYuv*      pcYuvPred,
605                                   TComYuv*&     rpcYuvResi );
606 
607  Void  setWpScalingDistParam( TComDataCU* pcCU, Int iRefIdx, RefPicList eRefPicListCur );
608  inline  Void  setDistParamComp( UInt uiComp )  { m_cDistParam.uiComp = uiComp; }
609 
610};// END CLASS DEFINITION TEncSearch
611
612//! \}
613
614#endif // __TENCSEARCH__
Note: See TracBrowser for help on using the repository browser.