/*! * \brief Open decoder */ int32_t WelsOpenDecoder (PWelsDecoderContext pCtx) { // function pointers //initial MC function pointer-- int iRet = ERR_NONE; InitMcFunc (& (pCtx->sMcFunc), pCtx->uiCpuFlag); InitExpandPictureFunc (& (pCtx->sExpandPicFunc), pCtx->uiCpuFlag); AssignFuncPointerForRec (pCtx); // vlc tables InitVlcTable (&pCtx->sVlcTable); // startup memory iRet = WelsInitMemory (pCtx); if (ERR_NONE != iRet) return iRet; #ifdef LONG_TERM_REF pCtx->bParamSetsLostFlag = true; #else pCtx->bReferenceLostAtT0Flag = true; // should be true to waiting IDR at incoming AU bits following, 6/4/2010 #endif //LONG_TERM_REF pCtx->bNewSeqBegin = true; pCtx->bPrintFrameErrorTraceFlag = true; pCtx->iIgnoredErrorInfoPacketCount = 0; return iRet; }
void InitDecFuncs (PWelsDecoderContext pCtx, uint32_t uiCpuFlag) { WelsBlockFuncInit (&pCtx->sBlockFunc, uiCpuFlag); InitPredFunc (pCtx, uiCpuFlag); InitMcFunc (& (pCtx->sMcFunc), uiCpuFlag); InitExpandPictureFunc (& (pCtx->sExpandPicFunc), uiCpuFlag); DeblockingInit (&pCtx->sDeblockingFunc, uiCpuFlag); }
/*! * \brief Open decoder */ void WelsOpenDecoder (PWelsDecoderContext pCtx) { // function pointers //initial MC function pointer-- InitMcFunc (& (pCtx->sMcFunc), pCtx->uiCpuFlag); InitExpandPictureFunc (& (pCtx->sExpandPicFunc), pCtx->uiCpuFlag); AssignFuncPointerForRec (pCtx); // vlc tables InitVlcTable (&pCtx->sVlcTable); // startup memory if (ERR_NONE != WelsInitMemory (pCtx)) return; #ifdef LONG_TERM_REF pCtx->bParamSetsLostFlag = true; #else pCtx->bReferenceLostAtT0Flag = true; // should be true to waiting IDR at incoming AU bits following, 6/4/2010 #endif //LONG_TERM_REF }
/*! * \brief initialize function pointers that potentially used in Wels encoding * \param pEncCtx sWelsEncCtx* * \return successful - 0; otherwise none 0 for failed */ int32_t InitFunctionPointers (sWelsEncCtx* pEncCtx, SWelsSvcCodingParam* pParam, uint32_t uiCpuFlag) { int32_t iReturn = ENC_RETURN_SUCCESS; SWelsFuncPtrList* pFuncList = pEncCtx->pFuncList; bool bScreenContent = (SCREEN_CONTENT_REAL_TIME == pParam->iUsageType); /* Functionality utilization of CPU instructions dependency */ pFuncList->pfSetMemZeroSize8 = WelsSetMemZero_c; // confirmed_safe_unsafe_usage pFuncList->pfSetMemZeroSize64Aligned16 = WelsSetMemZero_c; // confirmed_safe_unsafe_usage pFuncList->pfSetMemZeroSize64 = WelsSetMemZero_c; // confirmed_safe_unsafe_usage #if defined(X86_ASM) if (uiCpuFlag & WELS_CPU_MMXEXT) { pFuncList->pfSetMemZeroSize8 = WelsSetMemZeroSize8_mmx; // confirmed_safe_unsafe_usage pFuncList->pfSetMemZeroSize64Aligned16 = WelsSetMemZeroSize64_mmx; // confirmed_safe_unsafe_usage pFuncList->pfSetMemZeroSize64 = WelsSetMemZeroSize64_mmx; // confirmed_safe_unsafe_usage } if (uiCpuFlag & WELS_CPU_SSE2) { pFuncList->pfSetMemZeroSize64Aligned16 = WelsSetMemZeroAligned64_sse2; // confirmed_safe_unsafe_usage } #endif//X86_ASM #if defined(HAVE_NEON) if (uiCpuFlag & WELS_CPU_NEON) { pFuncList->pfSetMemZeroSize8 = WelsSetMemZero_neon; pFuncList->pfSetMemZeroSize64Aligned16 = WelsSetMemZero_neon; pFuncList->pfSetMemZeroSize64 = WelsSetMemZero_neon; } #endif #if defined(HAVE_NEON_AARCH64) if (uiCpuFlag & WELS_CPU_NEON) { pFuncList->pfSetMemZeroSize8 = WelsSetMemZero_AArch64_neon; pFuncList->pfSetMemZeroSize64Aligned16 = WelsSetMemZero_AArch64_neon; pFuncList->pfSetMemZeroSize64 = WelsSetMemZero_AArch64_neon; } #endif InitExpandPictureFunc (& (pFuncList->sExpandPicFunc), uiCpuFlag); /* Intra_Prediction_fn*/ WelsInitIntraPredFuncs (pFuncList, uiCpuFlag); /* ME func */ WelsInitMeFunc (pFuncList, uiCpuFlag, bScreenContent); /* sad, satd, average */ WelsInitSampleSadFunc (pFuncList, uiCpuFlag); // WelsInitBGDFunc (pFuncList, pParam->bEnableBackgroundDetection); WelsInitSCDPskipFunc (pFuncList, bScreenContent && (pParam->bEnableSceneChangeDetect)); // for pfGetVarianceFromIntraVaa function ptr adaptive by CPU features, 6/7/2010 InitIntraAnalysisVaaInfo (pFuncList, uiCpuFlag); /* Motion compensation */ /*init pixel average function*/ /*get one column or row pixel when refinement*/ InitMcFunc (&pFuncList->sMcFuncs, uiCpuFlag); InitCoeffFunc (pFuncList, uiCpuFlag, pParam->iEntropyCodingModeFlag); WelsInitEncodingFuncs (pFuncList, uiCpuFlag); WelsInitReconstructionFuncs (pFuncList, uiCpuFlag); DeblockingInit (&pFuncList->pfDeblocking, uiCpuFlag); WelsBlockFuncInit (&pFuncList->pfSetNZCZero, uiCpuFlag); InitFillNeighborCacheInterFunc (pFuncList, pParam->bEnableBackgroundDetection); pFuncList->pParametersetStrategy = IWelsParametersetStrategy::CreateParametersetStrategy (pParam->eSpsPpsIdStrategy, pParam->bSimulcastAVC, pParam->iSpatialLayerNum); WELS_VERIFY_RETURN_IF (ENC_RETURN_MEMALLOCERR, (NULL == pFuncList->pParametersetStrategy)) return iReturn; }