History

refactor the setting of function pointer for simplification

sijchen committed 12 years ago

Commit c00bec21 parent f0c2cdd1 file · +36 −63Browse files

Showing the changes to codec/encoder/core/src/encoder_ext.cpp (1 of 1 file). Show all

Unified · Split

codec/encoder/core/src/encoder_ext.cpp+36−63
@@ -2445,77 +2445,50 @@ void WelsInitCurrentLayer (sWelsEncCtx* pCtx, · 2444 unmodified lines
24452445 }
24462446 }
24472447
2448+inline void SetFastCodingFunc(SWelsFuncPtrList* pFuncList)
2449+{
2450+ pFuncList->pfIntraFineMd = WelsMdIntraFinePartitionVaa;
2451+ pFuncList->sSampleDealingFuncs.pfMdCost = pFuncList->sSampleDealingFuncs.pfSampleSad;
2452+ pFuncList->sSampleDealingFuncs.pfIntra16x16Combined3 = pFuncList->sSampleDealingFuncs.pfIntra16x16Combined3Sad;
2453+ pFuncList->sSampleDealingFuncs.pfIntra8x8Combined3 = pFuncList->sSampleDealingFuncs.pfIntra8x8Combined3Sad;
2454+}
2455+inline void SetNormalCodingFunc(SWelsFuncPtrList* pFuncList)
2456+{
2457+ pFuncList->pfIntraFineMd = WelsMdIntraFinePartition;
2458+ pFuncList->sSampleDealingFuncs.pfMdCost = pFuncList->sSampleDealingFuncs.pfSampleSatd;
2459+ pFuncList->sSampleDealingFuncs.pfIntra16x16Combined3 =
2460+ pFuncList->sSampleDealingFuncs.pfIntra16x16Combined3Satd;
2461+ pFuncList->sSampleDealingFuncs.pfIntra8x8Combined3 =
2462+ pFuncList->sSampleDealingFuncs.pfIntra8x8Combined3Satd;
2463+ pFuncList->sSampleDealingFuncs.pfIntra4x4Combined3 =
2464+ pFuncList->sSampleDealingFuncs.pfIntra4x4Combined3Satd;
2465+}
2466+
2467+
24482468 void PreprocessSliceCoding (sWelsEncCtx* pCtx) {
24492469 SDqLayer* pCurLayer = pCtx->pCurDqLayer;
24502470 const bool kbBaseAvail = pCurLayer->bBaseLayerAvailableFlag;
2471+ const bool kbHighestSpatialLayer =
2472+ (pCtx->pSvcParam->iSpatialLayerNum == (pCurLayer->sLayerInfo.sNalHeaderExt.uiDependencyId + 1));
2473+ SWelsFuncPtrList* pFuncList = pCtx->pFuncList;
24512474
24522475 /* function pointers conditional assignment under sWelsEncCtx, layer_mb_enc_rec (in stack) is exclusive */
2476+ if (kbHighestSpatialLayer) {
2477+ SetFastCodingFunc(pFuncList);
2478+ } else {
2479+ SetNormalCodingFunc(pFuncList);
2480+ }
24532481
24542482 if (P_SLICE == pCtx->eSliceType) {
2455− if (kbBaseAvail) {
2456− if (pCtx->pSvcParam->iSpatialLayerNum == (pCurLayer->sLayerInfo.sNalHeaderExt.uiDependencyId + 1)) { //
2457− pCtx->pFuncList->pfMotionSearch = WelsMotionEstimateSearch;
2458− pCtx->pFuncList->pfCalculateSatd = NotCalculateSatdCost;
2459− pCtx->pFuncList->pfFirstIntraMode = WelsMdFirstIntraMode;
2460− pCtx->pFuncList->pfIntraFineMd = WelsMdIntraFinePartitionVaa;
2461− pCtx->pFuncList->pfInterFineMd = WelsMdInterFinePartitionVaa;
2462− pCtx->pFuncList->sSampleDealingFuncs.pfIntra8x8Combined3 = pCtx->pFuncList->sSampleDealingFuncs.pfIntra8x8Combined3Sad;
2463− pCtx->pFuncList->sSampleDealingFuncs.pfIntra16x16Combined3 =
2464− pCtx->pFuncList->sSampleDealingFuncs.pfIntra16x16Combined3Sad;
2465− pCtx->pFuncList->sSampleDealingFuncs.pfMdCost = pCtx->pFuncList->sSampleDealingFuncs.pfSampleSad;
2466− } else {
2467− pCtx->pFuncList->pfMotionSearch = WelsMotionEstimateSearch;
2468− pCtx->pFuncList->pfCalculateSatd = CalculateSatdCost;
2469− pCtx->pFuncList->pfFirstIntraMode = WelsMdFirstIntraMode;
2470− pCtx->pFuncList->pfIntraFineMd = WelsMdIntraFinePartition;
2471− pCtx->pFuncList->pfInterFineMd = WelsMdInterFinePartition;
2472− pCtx->pFuncList->sSampleDealingFuncs.pfMdCost = pCtx->pFuncList->sSampleDealingFuncs.pfSampleSatd;
2473− pCtx->pFuncList->sSampleDealingFuncs.pfIntra16x16Combined3 =
2474− pCtx->pFuncList->sSampleDealingFuncs.pfIntra16x16Combined3Satd;
2475− pCtx->pFuncList->sSampleDealingFuncs.pfIntra8x8Combined3 = pCtx->pFuncList->sSampleDealingFuncs.pfIntra8x8Combined3Satd;
2476− pCtx->pFuncList->sSampleDealingFuncs.pfIntra4x4Combined3 = pCtx->pFuncList->sSampleDealingFuncs.pfIntra4x4Combined3Satd;
2477− }
2478− pCtx->pFuncList->sSampleDealingFuncs.pfMeCost = pCtx->pFuncList->sSampleDealingFuncs.pfSampleSatd;
2479− } else {
2480− //case 3: pBase layer MD + encoding
2481− if (pCurLayer->sLayerInfo.sNalHeaderExt.uiDependencyId + 1 == pCtx->pSvcParam->iSpatialLayerNum) {
2482− pCtx->pFuncList->pfMotionSearch = WelsMotionEstimateSearch;
2483− pCtx->pFuncList->pfCalculateSatd = NotCalculateSatdCost;
2484− pCtx->pFuncList->pfFirstIntraMode = WelsMdFirstIntraMode;
2485− pCtx->pFuncList->pfIntraFineMd = WelsMdIntraFinePartitionVaa;
2486− pCtx->pFuncList->pfInterFineMd = WelsMdInterFinePartitionVaa;
2487− pCtx->pFuncList->sSampleDealingFuncs.pfMdCost = pCtx->pFuncList->sSampleDealingFuncs.pfSampleSad;
2488− pCtx->pFuncList->sSampleDealingFuncs.pfIntra16x16Combined3 =
2489− pCtx->pFuncList->sSampleDealingFuncs.pfIntra16x16Combined3Sad;
2490− pCtx->pFuncList->sSampleDealingFuncs.pfIntra8x8Combined3 = pCtx->pFuncList->sSampleDealingFuncs.pfIntra8x8Combined3Sad;
2491− } else {
2492− pCtx->pFuncList->pfMotionSearch = WelsMotionEstimateSearch;
2493− pCtx->pFuncList->pfCalculateSatd = CalculateSatdCost;
2494− pCtx->pFuncList->pfFirstIntraMode = WelsMdFirstIntraMode;
2495− pCtx->pFuncList->pfIntraFineMd = WelsMdIntraFinePartition;
2496− pCtx->pFuncList->pfInterFineMd = WelsMdInterFinePartition;
2497− pCtx->pFuncList->sSampleDealingFuncs.pfMdCost = pCtx->pFuncList->sSampleDealingFuncs.pfSampleSatd;
2498− pCtx->pFuncList->sSampleDealingFuncs.pfIntra16x16Combined3 =
2499− pCtx->pFuncList->sSampleDealingFuncs.pfIntra16x16Combined3Satd;
2500− pCtx->pFuncList->sSampleDealingFuncs.pfIntra8x8Combined3 = pCtx->pFuncList->sSampleDealingFuncs.pfIntra8x8Combined3Satd;
2501− pCtx->pFuncList->sSampleDealingFuncs.pfIntra4x4Combined3 = pCtx->pFuncList->sSampleDealingFuncs.pfIntra4x4Combined3Satd;
2502− }
2503− pCtx->pFuncList->sSampleDealingFuncs.pfMeCost = pCtx->pFuncList->sSampleDealingFuncs.pfSampleSatd;
2504− }
2505− } else if (I_SLICE == pCtx->eSliceType) {
2506− if (pCurLayer->sLayerInfo.sNalHeaderExt.uiDependencyId + 1 == pCtx->pSvcParam->iSpatialLayerNum) {
2507− pCtx->pFuncList->sSampleDealingFuncs.pfMdCost = pCtx->pFuncList->sSampleDealingFuncs.pfSampleSad;
2508− pCtx->pFuncList->sSampleDealingFuncs.pfIntra16x16Combined3 =
2509− pCtx->pFuncList->sSampleDealingFuncs.pfIntra16x16Combined3Sad;
2510− pCtx->pFuncList->sSampleDealingFuncs.pfIntra8x8Combined3 = pCtx->pFuncList->sSampleDealingFuncs.pfIntra8x8Combined3Sad;
2511− pCtx->pFuncList->pfIntraFineMd = WelsMdIntraFinePartitionVaa;
2483+ pFuncList->pfMotionSearch = WelsMotionEstimateSearch;
2484+ pFuncList->pfFirstIntraMode = WelsMdFirstIntraMode;
2485+ pFuncList->sSampleDealingFuncs.pfMeCost = pCtx->pFuncList->sSampleDealingFuncs.pfSampleSatd;
2486+ if (kbHighestSpatialLayer) {
2487+ pFuncList->pfCalculateSatd = NotCalculateSatdCost;
2488+ pFuncList->pfInterFineMd = WelsMdInterFinePartitionVaa;
25122489 } else {
2513− pCtx->pFuncList->sSampleDealingFuncs.pfMdCost = pCtx->pFuncList->sSampleDealingFuncs.pfSampleSatd;
2514− pCtx->pFuncList->sSampleDealingFuncs.pfIntra16x16Combined3 =
2515− pCtx->pFuncList->sSampleDealingFuncs.pfIntra16x16Combined3Satd;
2516− pCtx->pFuncList->sSampleDealingFuncs.pfIntra8x8Combined3 = pCtx->pFuncList->sSampleDealingFuncs.pfIntra8x8Combined3Satd;
2517− pCtx->pFuncList->sSampleDealingFuncs.pfIntra4x4Combined3 = pCtx->pFuncList->sSampleDealingFuncs.pfIntra4x4Combined3Satd;
2518− pCtx->pFuncList->pfIntraFineMd = WelsMdIntraFinePartition;
2490+ pFuncList->pfCalculateSatd = CalculateSatdCost;
2491+ pFuncList->pfInterFineMd = WelsMdInterFinePartition;
25192492 }
25202493 }
25212494 }

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t