Changeset 56 in 3DVCSoftware for trunk/source/Lib/TLibEncoder/TEncSearch.h


Ignore:
Timestamp:
11 May 2012, 21:20:17 (12 years ago)
Author:
hschwarz
Message:

updated trunk (move to HM6.1)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/Lib/TLibEncoder/TEncSearch.h

    r42 r56  
    22 * License, included below. This software may be subject to other third party
    33 * and contributor rights, including patent rights, and no such rights are
    4  * granted under this license.
     4 * granted under this license. 
    55 *
    6  * Copyright (c) 2010-2011, ISO/IEC
     6 * Copyright (c) 2010-2012, ITU/ISO/IEC
    77 * All rights reserved.
    88 *
     
    1515 *    this list of conditions and the following disclaimer in the documentation
    1616 *    and/or other materials provided with the distribution.
    17  *  * Neither the name of the ISO/IEC nor the names of its contributors may
     17 *  * Neither the name of the ITU/ISO/IEC nor the names of its contributors may
    1818 *    be used to endorse or promote products derived from this software without
    1919 *    specific prior written permission.
     
    3232 */
    3333
    34 
    35 
    3634/** \file     TEncSearch.h
    3735    \brief    encoder search class (header)
     
    4240
    4341// Include files
    44 #include "../TLibCommon/TComYuv.h"
    45 #include "../TLibCommon/TComMotionInfo.h"
    46 #include "../TLibCommon/TComPattern.h"
    47 #include "../TLibCommon/TComPredFilter.h"
    48 #include "../TLibCommon/TComPrediction.h"
    49 #include "../TLibCommon/TComTrQuant.h"
    50 #include "../TLibCommon/TComPic.h"
    51 #include "../TLibCommon/TComWedgelet.h"
     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"
    5248#include "TEncEntropy.h"
    5349#include "TEncSbac.h"
    5450#include "TEncCfg.h"
     51
     52//! \ingroup TLibEncoder
     53//! \{
    5554
    5655class TEncCu;
     
    7069  TCoeff*         m_pcQTTempCoeffCb;
    7170  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
    7279  UChar*          m_puhQTTempTrIdx;
    7380  UChar*          m_puhQTTempCbf[3];
    7481 
    7582  TComYuv*        m_pcQTTempTComYuv;
     83  TComYuv         m_tmpYuvPred; // To be used in xGetInterPredictionError() to avoid constant memory allocation/deallocation
    7684protected:
    7785  // interface to option
     
    109117 
    110118  // AMVP cost computation
     119#if HHI_INTER_VIEW_MOTION_PRED
     120  UInt            m_auiMVPIdxCost[AMVP_MAX_NUM_CANDS+2][AMVP_MAX_NUM_CANDS+2]; //th array bounds
     121#else
    111122  // UInt            m_auiMVPIdxCost[AMVP_MAX_NUM_CANDS+1][AMVP_MAX_NUM_CANDS];
    112123  UInt            m_auiMVPIdxCost[AMVP_MAX_NUM_CANDS+1][AMVP_MAX_NUM_CANDS+1]; //th array bounds
     124#endif
    113125 
    114126public:
     
    130142 
    131143  /// sub-function for motion vector refinement used in fractional-pel accuracy
    132 #ifdef ROUNDING_CONTROL_BIPRED
    133   UInt  xPatternRefinement_Bi( TComPattern* pcPatternKey, Pel* piRef, Int iRefStride, Int iIntStep, Int iFrac, TComMv& rcMvFrac, Pel* pRefY2, Bool bRound );
    134 #endif
    135  
    136   UInt  xPatternRefinement( TComPattern* pcPatternKey, Pel* piRef, Int iRefStride, Int iIntStep, Int iFrac, TComMv& rcMvFrac );
    137  
    138 #if (!REFERENCE_SAMPLE_PADDING)
    139 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
    140   Bool predIntraLumaDirAvailable( UInt uiMode, UInt uiWidthBit, Bool bAboveAvail, Bool bLeftAvail, UInt uiWidth, UInt uiHeight, TComDataCU* pcCU, UInt uiAbsPartIdx );
    141 #else
    142   Bool predIntraLumaDirAvailable( UInt uiMode, UInt uiWidthBit, Bool bAboveAvail, Bool bLeftAvail);
    143 #endif
    144 #endif
    145 
    146 #if HHI_DMM_WEDGE_INTRA
    147   Void xSearchWedgeFullMinDist   ( TComDataCU* pcCU, UInt uiAbsPtIdx, WedgeList* pacWedgeList, Pel* piRef, UInt uiRefStride, UInt uiWidth, UInt uiHeight, UInt& ruiTabIdx );
    148   Void xSearchWedgePredDirMinDist( TComDataCU* pcCU, UInt uiAbsPtIdx, WedgeList* pacWedgeList, Pel* piRef, UInt uiRefStride, UInt uiWidth, UInt uiHeight, UInt& ruiTabIdx, Int& riWedgeDeltaEnd );
    149 #endif
    150 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
    151   Void xGetWedgeDeltaDCsMinDist  ( TComWedgelet* pcWedgelet,
    152                                    TComDataCU*   pcCU,
    153                                    UInt          uiAbsPtIdx,
    154                                    Pel*          piOrig,
    155                                    Pel*          piPredic,
    156                                    UInt          uiStride,
    157                                    UInt          uiWidth,
    158                                    UInt          uiHeight,
    159                                    Int&          riDeltaDC1,
    160                                    Int&          riDeltaDC2,
    161                                    Bool          bAbove,
    162                                    Bool          bLeft );
    163 
    164   Void xDeltaDCQuantScaleDown( TComDataCU*  pcCU, Int& riDeltaDC );
    165 #endif
    166 
     144  UInt  xPatternRefinement( TComPattern* pcPatternKey,
     145                           TComMv baseRefMv,
     146                           Int iFrac, TComMv& rcMvFrac );
    167147 
    168148  typedef struct
     
    204184                                  Dist        uiPreCalcDistC );
    205185 
    206 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
    207   Bool predIntraLumaDMMAvailable( UInt         uiMode,
    208                                   UInt         uiWidth,
    209 #if HHI_DMM_PRED_TEX && FLEX_CODING_ORDER
    210                                   UInt         uiHeight,
    211                                   Bool         bDMMAvailable34 );
    212 #else
    213                                   UInt         uiHeight );
    214 #endif
    215 #endif
    216 #if HHI_DMM_WEDGE_INTRA
    217   Void findWedgeFullMinDist     ( TComDataCU*  pcCU,
    218                                   UInt         uiAbsPtIdx,
    219                                   Pel*         piOrig,
    220                                   Pel*         piPredic,
    221                                   UInt         uiStride,
    222                                   UInt         uiWidth,
    223                                   UInt         uiHeight,
    224                                   UInt&        ruiTabIdx,
    225                                   Int&         riDeltaDC1,
    226                                   Int&         riDeltaDC2,
    227                                   Bool         bAbove,
    228                                   Bool         bLeft,
    229                                   WedgeDist    eWedgeDist );
    230   Void findWedgePredDirMinDist  ( TComDataCU*  pcCU,
    231                                   UInt         uiAbsPtIdx,
    232                                   Pel*         piOrig,
    233                                   Pel*         piPredic,
    234                                   UInt         uiStride,
    235                                   UInt         uiWidth,
    236                                   UInt         uiHeight,
    237                                   UInt&        ruiTabIdx,
    238                                   Int&         riWedgeDeltaEnd,
    239                                   Int&         riDeltaDC1,
    240                                   Int&         riDeltaDC2,
    241                                   Bool         bAbove,
    242                                   Bool         bLeft,
    243                                   WedgeDist    eWedgeDist );
    244 #endif
    245 #if HHI_DMM_PRED_TEX
    246   Void findWedgeTexMinDist      ( TComDataCU*  pcCU,
    247                                   UInt         uiAbsPtIdx,
    248                                   Pel*         piOrig,
    249                                   Pel*         piPredic,
    250                                   UInt         uiStride,
    251                                   UInt         uiWidth,
    252                                   UInt         uiHeight,
    253                                   UInt&        ruiTabIdx,
    254                                   Int&         riDeltaDC1,
    255                                   Int&         riDeltaDC2,
    256                                   Bool         bAbove,
    257                                   Bool         bLeft,
    258                                   WedgeDist    eWedgeDist,
    259                                   Pel*         piTextureRef = NULL );
    260 
    261   Void findContourPredTex       ( TComDataCU*  pcCU,
    262                                   UInt         uiAbsPtIdx,
    263                                   Pel*         piOrig,
    264                                   Pel*         piPredic,
    265                                   UInt         uiStride,
    266                                   UInt         uiWidth,
    267                                   UInt         uiHeight,
    268                                   Int&         riDeltaDC1,
    269                                   Int&         riDeltaDC2,
    270                                   Bool         bAbove,
    271                                   Bool         bLeft,
    272                                   Pel*         piTextureRef = NULL );
    273 #endif
    274186 
    275187  /// encoder estimation - inter prediction (non-skip)
     
    279191                                  TComYuv*&   rpcResiYuv,
    280192                                  TComYuv*&   rpcRecoYuv,
    281                                   Bool        bUseRes = false );
    282  
    283   /// encoder estimation - intra prediction (skip)
    284   Void predInterSkipSearch      ( TComDataCU* pcCU,
    285                                   TComYuv*    pcOrgYuv,
    286                                   TComYuv*&   rpcPredYuv,
    287                                   TComYuv*&   rpcResiYuv,
    288                                   TComYuv*&   rpcRecoYuv );
    289  
     193                                  Bool        bUseRes = false
     194#if AMP_MRG
     195                                 ,Bool        bUseMRG = false
     196#endif
     197                                );
     198 
     199#if HHI_INTER_VIEW_RESIDUAL_PRED
    290200  /// encode residual and compute rd-cost for inter mode
    291201  Void encodeResAndCalcRdInterCU( TComDataCU* pcCU,
     
    297207                                  TComYuv*&   rpcYuvResPrd,
    298208                                  Bool        bSkipRes );
    299  
     209#else
     210  /// encode residual and compute rd-cost for inter mode
     211  Void encodeResAndCalcRdInterCU( TComDataCU* pcCU,
     212                                  TComYuv*    pcYuvOrg,
     213                                  TComYuv*    pcYuvPred,
     214                                  TComYuv*&   rpcYuvResi,
     215                                  TComYuv*&   rpcYuvResiBest,
     216                                  TComYuv*&   rpcYuvRec,
     217                                  Bool        bSkipRes );
     218#endif
    300219  /// set ME search range
    301220  Void setAdaptiveSearchRange   ( Int iDir, Int iRefIdx, Int iSearchRange) { m_aaiAdaptSR[iDir][iRefIdx] = iSearchRange; }
    302221 
     222  Void xEncPCM    (TComDataCU* pcCU, UInt uiAbsPartIdx, Pel* piOrg, Pel* piPCM, Pel* piPred, Pel* piResi, Pel* piReco, UInt uiStride, UInt uiWidth, UInt uiHeight, TextType eText);
     223  Void IPCMSearch (TComDataCU* pcCU, TComYuv* pcOrgYuv, TComYuv*& rpcPredYuv, TComYuv*& rpcResiYuv, TComYuv*& rpcRecoYuv );
    303224protected:
    304225 
     
    327248                                    Bool         bLuma,
    328249                                    Bool         bChroma,
    329                                     Bool         bRealCoeff
    330                                   );
     250                                    Bool         bRealCoeff );
    331251 
    332252  Void  xIntraCodingLumaBlk       ( TComDataCU*  pcCU,
     
    336256                                    TComYuv*     pcPredYuv,
    337257                                    TComYuv*     pcResiYuv,
    338                                     Dist&        ruiDist
    339                                    );
    340 
     258                                    Dist&        ruiDist );
    341259  Void  xIntraCodingChromaBlk     ( TComDataCU*  pcCU,
    342260                                    UInt         uiTrDepth,
     
    380298 
    381299  // -------------------------------------------------------------------------------------------------------------------
     300  // DMM intra search
     301  // -------------------------------------------------------------------------------------------------------------------
     302
     303#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
     304  Bool predIntraLumaDMMAvailable  ( UInt           uiMode,
     305                                    UInt           uiWidth,
     306                                    UInt           uiHeight );
     307  Void xGetWedgeDeltaDCsMinDist   ( TComWedgelet*  pcWedgelet,
     308                                    TComDataCU*    pcCU,
     309                                    UInt           uiAbsPtIdx,
     310                                    Pel*           piOrig,
     311                                    Pel*           piPredic,
     312                                    UInt           uiStride,
     313                                    UInt           uiWidth,
     314                                    UInt           uiHeight,
     315                                    Int&           riDeltaDC1,
     316                                    Int&           riDeltaDC2,
     317                                    Bool           bAboveAvail,
     318                                    Bool           bLeftAvail );
     319#endif
     320#if HHI_DMM_WEDGE_INTRA
     321  Void findWedgeFullMinDist       ( TComDataCU*    pcCU,
     322                                    UInt           uiAbsPtIdx,
     323                                    Pel*           piOrig,
     324                                    Pel*           piPredic,
     325                                    UInt           uiStride,
     326                                    UInt           uiWidth,
     327                                    UInt           uiHeight,
     328                                    UInt&          ruiTabIdx,
     329                                    Int&           riDeltaDC1,
     330                                    Int&           riDeltaDC2,
     331                                    Bool           bAboveAvail,
     332                                    Bool           bLeftAvail );
     333  Void findWedgePredDirMinDist    ( TComDataCU*    pcCU,
     334                                    UInt           uiAbsPtIdx,
     335                                    Pel*           piOrig,
     336                                    Pel*           piPredic,
     337                                    UInt           uiStride,
     338                                    UInt           uiWidth,
     339                                    UInt           uiHeight,
     340                                    UInt&          ruiTabIdx,
     341                                    Int&           riWedgeDeltaEnd,
     342                                    Int&           riDeltaDC1,
     343                                    Int&           riDeltaDC2,
     344                                    Bool           bAboveAvail,
     345                                    Bool           bLeftAvail );
     346  Void xSearchWedgeFullMinDist    ( TComDataCU*    pcCU,
     347                                    UInt           uiAbsPtIdx,
     348                                    WedgeList*     pacWedgeList,
     349                                    Pel*           piRef,
     350                                    UInt           uiRefStride,
     351                                    UInt           uiWidth,
     352                                    UInt           uiHeight,
     353                                    UInt&          ruiTabIdx,
     354                                    Dist&          riDist );
     355  Void xSearchWedgePredDirMinDist ( TComDataCU*    pcCU,
     356                                    UInt           uiAbsPtIdx,
     357                                    WedgeList*     pacWedgeList,
     358                                    Pel*           piRef,
     359                                    UInt           uiRefStride,
     360                                    UInt           uiWidth,
     361                                    UInt           uiHeight,
     362                                    UInt&          ruiTabIdx,
     363                                    Int&           riWedgeDeltaEnd );
     364#endif
     365#if HHI_DMM_PRED_TEX
     366  Void findWedgeTexMinDist        ( TComDataCU*    pcCU,
     367                                    UInt           uiAbsPtIdx,
     368                                    Pel*           piOrig,
     369                                    Pel*           piPredic,
     370                                    UInt           uiStride,
     371                                    UInt           uiWidth,
     372                                    UInt           uiHeight,
     373                                    UInt&          ruiTabIdx,
     374                                    Int&           riDeltaDC1,
     375                                    Int&           riDeltaDC2,
     376                                    Bool           bAboveAvail,
     377                                    Bool           bLeftAvail );
     378  Void findContourPredTex         ( TComDataCU*    pcCU,
     379                                    UInt           uiAbsPtIdx,
     380                                    Pel*           piOrig,
     381                                    Pel*           piPredic,
     382                                    UInt           uiStride,
     383                                    UInt           uiWidth,
     384                                    UInt           uiHeight,
     385                                    Int&           riDeltaDC1,
     386                                    Int&           riDeltaDC2,
     387                                    Bool           bAboveAvail,
     388                                    Bool           bLeftAvail );
     389#endif
     390
     391  // -------------------------------------------------------------------------------------------------------------------
    382392  // Inter search (AMP)
    383393  // -------------------------------------------------------------------------------------------------------------------
     
    390400                                    TComMv&     rcMvPred,
    391401                                    Bool        bFilled = false
     402                                  #if H0111_MVD_L1_ZERO
     403                                  , UInt*       puiDistBiP = NULL
     404                                  #endif
    392405                                  #if ZERO_MVD_EST
    393406                                  , UInt*       puiDist = NULL
     
    431444                                    TComMvField*    pacMvField,
    432445                                    UInt&           uiMergeIndex,
    433                                     UInt&           ruiCost,
    434                                     UInt&           ruiBits,
    435                                     UChar*          puhNeighCands,
    436                                     Bool&           bValid );
     446                                    UInt&           ruiCost
     447#if CU_BASED_MRG_CAND_LIST
     448                                  , TComMvField* cMvFieldNeighbours, 
     449                                    UChar* uhInterDirNeighbours,
     450                                    Int& numValidMergeCand
     451#endif
     452                                   );
    437453  // -------------------------------------------------------------------------------------------------------------------
    438454  // motion estimation
     
    474490                                    UInt&         ruiSAD );
    475491 
    476 #ifdef ROUNDING_CONTROL_BIPRED
    477   Void xPatternSearch_Bi             ( TComPattern*  pcPatternKey,
    478                                        Pel*          piRefY,
    479                                        Int           iRefStride,
    480                                        TComMv*       pcMvSrchRngLT,
    481                                        TComMv*       pcMvSrchRngRB,
    482                                        TComMv&       rcMv,
    483                                        UInt&         ruiSAD,
    484                                        Pel*          pcRefY2,
    485                                        Bool          bRound);
    486  
    487   Void xPatternSearchFracDIF_Bi      ( TComDataCU*   pcCU,
    488                                        TComPattern*  pcPatternKey,
    489                                        Pel*          piRefY,
    490                                        Int           iRefStride,
    491                                        TComMv*       pcMvInt,
    492                                        TComMv&       rcMvHalf,
    493                                        TComMv&       rcMvQter,
    494                                        UInt&         ruiCost,
    495                                        Pel*          pcRefY2,
    496                                        Bool          bRound);
    497 #endif
    498  
    499492  Void xPatternSearch             ( TComPattern*  pcPatternKey,
    500493                                    Pel*          piRefY,
     
    513506                                    TComMv&       rcMvQter,
    514507                                    UInt&         ruiCost
     508                                   ,Bool biPred
    515509                                   );
    516510 
    517   Void xExtDIFUpSamplingH         ( TComPattern*  pcPattern, TComYuv* pcYuvExt  );
    518  
    519   Void xExtDIFUpSamplingQ         ( TComPattern* pcPatternKey,
    520                                     Pel*          piDst,
    521                                     Int           iDstStride,
    522                                     Pel*          piSrcPel,
    523                                     Int           iSrcPelStride,
    524                                     Int*          piSrc,
    525                                     Int           iSrcStride,
    526                                     UInt          uiFilter  );
    527  
     511  Void xExtDIFUpSamplingH( TComPattern* pcPattern, Bool biPred  );
     512  Void xExtDIFUpSamplingQ( TComPattern* pcPatternKey, TComMv halfPelRef, Bool biPred );
    528513 
    529514  // -------------------------------------------------------------------------------------------------------------------
     
    532517 
    533518  Void xEncodeResidualQT( TComDataCU* pcCU, UInt uiAbsPartIdx, const UInt uiDepth, Bool bSubdivAndCbf, TextType eType );
    534   Void xEstimateResidualQT( TComDataCU* pcCU, UInt uiQuadrant, UInt uiAbsPartIdx, TComYuv* pcOrg, TComYuv* pcPred, TComYuv* pcResi, const UInt uiDepth, Double &rdCost, UInt &ruiBits, Dist &ruiDist, Dist *puiZeroDist );
    535   Void xSetResidualQTData( TComDataCU* pcCU, UInt uiAbsPartIdx, TComYuv* pcResi, UInt uiDepth, Bool bSpatial );
     519#if IBDI_DISTORTION || HHI_VSO
     520  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 );
     521#else
     522  Void xEstimateResidualQT( TComDataCU* pcCU, UInt uiQuadrant, UInt uiAbsPartIdx, UInt absTUPartIdx                                , TComYuv* pcResi, const UInt uiDepth, Double &rdCost, UInt &ruiBits, Dist &ruiDist, Dist *puiZeroDist );
     523#endif
     524  Void xSetResidualQTData( TComDataCU* pcCU, UInt uiQuadrant, UInt uiAbsPartIdx,UInt absTUPartIdx, TComYuv* pcResi, UInt uiDepth, Bool bSpatial );
    536525 
    537526  UInt  xModeBitsIntra ( TComDataCU* pcCU, UInt uiMode, UInt uiPU, UInt uiPartOffset, UInt uiDepth, UInt uiInitTrDepth );
     
    550539                                   TComYuv*&     rpcYuvResi );
    551540 
    552 #ifdef WEIGHT_PRED
    553   Void  setWpScalingDistParam( TComDataCU* pcCU, Int iRefIdx0, Int iRefIdx1 , RefPicList eRefPicList );
     541  Void  setWpScalingDistParam( TComDataCU* pcCU, Int iRefIdx, RefPicList eRefPicListCur );
    554542  inline  Void  setDistParamComp( UInt uiComp )  { m_cDistParam.uiComp = uiComp; }
    555 #endif
     543 
    556544};// END CLASS DEFINITION TEncSearch
    557545
     546//! \}
    558547
    559548#endif // __TENCSEARCH__
    560 
Note: See TracChangeset for help on using the changeset viewer.