Changeset 56 in 3DVCSoftware for trunk/source/Lib/TLibEncoder/TEncSearch.h
- Timestamp:
- 11 May 2012, 21:20:17 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/Lib/TLibEncoder/TEncSearch.h
r42 r56 2 2 * License, included below. This software may be subject to other third party 3 3 * and contributor rights, including patent rights, and no such rights are 4 * granted under this license. 4 * granted under this license. 5 5 * 6 * Copyright (c) 2010-201 1,ISO/IEC6 * Copyright (c) 2010-2012, ITU/ISO/IEC 7 7 * All rights reserved. 8 8 * … … 15 15 * this list of conditions and the following disclaimer in the documentation 16 16 * and/or other materials provided with the distribution. 17 * * Neither the name of the I SO/IEC nor the names of its contributors may17 * * Neither the name of the ITU/ISO/IEC nor the names of its contributors may 18 18 * be used to endorse or promote products derived from this software without 19 19 * specific prior written permission. … … 32 32 */ 33 33 34 35 36 34 /** \file TEncSearch.h 37 35 \brief encoder search class (header) … … 42 40 43 41 // 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" 52 48 #include "TEncEntropy.h" 53 49 #include "TEncSbac.h" 54 50 #include "TEncCfg.h" 51 52 //! \ingroup TLibEncoder 53 //! \{ 55 54 56 55 class TEncCu; … … 70 69 TCoeff* m_pcQTTempCoeffCb; 71 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 72 79 UChar* m_puhQTTempTrIdx; 73 80 UChar* m_puhQTTempCbf[3]; 74 81 75 82 TComYuv* m_pcQTTempTComYuv; 83 TComYuv m_tmpYuvPred; // To be used in xGetInterPredictionError() to avoid constant memory allocation/deallocation 76 84 protected: 77 85 // interface to option … … 109 117 110 118 // 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 111 122 // UInt m_auiMVPIdxCost[AMVP_MAX_NUM_CANDS+1][AMVP_MAX_NUM_CANDS]; 112 123 UInt m_auiMVPIdxCost[AMVP_MAX_NUM_CANDS+1][AMVP_MAX_NUM_CANDS+1]; //th array bounds 124 #endif 113 125 114 126 public: … … 130 142 131 143 /// 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 ); 167 147 168 148 typedef struct … … 204 184 Dist uiPreCalcDistC ); 205 185 206 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX207 Bool predIntraLumaDMMAvailable( UInt uiMode,208 UInt uiWidth,209 #if HHI_DMM_PRED_TEX && FLEX_CODING_ORDER210 UInt uiHeight,211 Bool bDMMAvailable34 );212 #else213 UInt uiHeight );214 #endif215 #endif216 #if HHI_DMM_WEDGE_INTRA217 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 #endif245 #if HHI_DMM_PRED_TEX246 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 #endif274 186 275 187 /// encoder estimation - inter prediction (non-skip) … … 279 191 TComYuv*& rpcResiYuv, 280 192 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 290 200 /// encode residual and compute rd-cost for inter mode 291 201 Void encodeResAndCalcRdInterCU( TComDataCU* pcCU, … … 297 207 TComYuv*& rpcYuvResPrd, 298 208 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 300 219 /// set ME search range 301 220 Void setAdaptiveSearchRange ( Int iDir, Int iRefIdx, Int iSearchRange) { m_aaiAdaptSR[iDir][iRefIdx] = iSearchRange; } 302 221 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 ); 303 224 protected: 304 225 … … 327 248 Bool bLuma, 328 249 Bool bChroma, 329 Bool bRealCoeff 330 ); 250 Bool bRealCoeff ); 331 251 332 252 Void xIntraCodingLumaBlk ( TComDataCU* pcCU, … … 336 256 TComYuv* pcPredYuv, 337 257 TComYuv* pcResiYuv, 338 Dist& ruiDist 339 ); 340 258 Dist& ruiDist ); 341 259 Void xIntraCodingChromaBlk ( TComDataCU* pcCU, 342 260 UInt uiTrDepth, … … 380 298 381 299 // ------------------------------------------------------------------------------------------------------------------- 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 // ------------------------------------------------------------------------------------------------------------------- 382 392 // Inter search (AMP) 383 393 // ------------------------------------------------------------------------------------------------------------------- … … 390 400 TComMv& rcMvPred, 391 401 Bool bFilled = false 402 #if H0111_MVD_L1_ZERO 403 , UInt* puiDistBiP = NULL 404 #endif 392 405 #if ZERO_MVD_EST 393 406 , UInt* puiDist = NULL … … 431 444 TComMvField* pacMvField, 432 445 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 ); 437 453 // ------------------------------------------------------------------------------------------------------------------- 438 454 // motion estimation … … 474 490 UInt& ruiSAD ); 475 491 476 #ifdef ROUNDING_CONTROL_BIPRED477 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 #endif498 499 492 Void xPatternSearch ( TComPattern* pcPatternKey, 500 493 Pel* piRefY, … … 513 506 TComMv& rcMvQter, 514 507 UInt& ruiCost 508 ,Bool biPred 515 509 ); 516 510 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 ); 528 513 529 514 // ------------------------------------------------------------------------------------------------------------------- … … 532 517 533 518 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 ); 536 525 537 526 UInt xModeBitsIntra ( TComDataCU* pcCU, UInt uiMode, UInt uiPU, UInt uiPartOffset, UInt uiDepth, UInt uiInitTrDepth ); … … 550 539 TComYuv*& rpcYuvResi ); 551 540 552 #ifdef WEIGHT_PRED 553 Void setWpScalingDistParam( TComDataCU* pcCU, Int iRefIdx0, Int iRefIdx1 , RefPicList eRefPicList ); 541 Void setWpScalingDistParam( TComDataCU* pcCU, Int iRefIdx, RefPicList eRefPicListCur ); 554 542 inline Void setDistParamComp( UInt uiComp ) { m_cDistParam.uiComp = uiComp; } 555 #endif 543 556 544 };// END CLASS DEFINITION TEncSearch 557 545 546 //! \} 558 547 559 548 #endif // __TENCSEARCH__ 560
Note: See TracChangeset for help on using the changeset viewer.