Showing the changes to codec/encoder/core/src/encoder_ext.cpp (1 of 3 files). Show all
Unified · Split
| @@ -75,7 +75,6 @@ int32_t WelsCodeOnePicPartition (sWelsEncCtx* pCtx, · 74 unmodified lines | ||
| 75 | 75 | * \return successful - 0; otherwise none 0 for failed |
| 76 | 76 | */ |
| 77 | 77 | int32_t ParamValidation (SLogContext* pLogCtx, SWelsSvcCodingParam* pCfg) { |
| 78 | − float fMaxFrameRate = 0.0f; | |
| 79 | 78 | const float fEpsn = 0.000001f; |
| 80 | 79 | int32_t i = 0; |
| 81 | 80 | |
| @@ -128,25 +127,13 @@ int32_t ParamValidation (SLogContext* pLogCtx, SWelsSvcCodingParam* pCfg) { · 46 unmodified lines | ||
| 128 | 127 | return ENC_RETURN_INVALIDINPUT; |
| 129 | 128 | } |
| 130 | 129 | if (UINT_MAX == GetLogFactor (fDlp->fOutputFrameRate, fDlp->fInputFrameRate)) { |
| 131 | − WelsLog (pLogCtx, WELS_LOG_ERROR, | |
| 132 | − "Invalid settings in input frame rate(%.6f) and output frame rate(%.6f) of layer #%d config file: iResult of output frame rate divided by input frame rate should be power of 2(i.e,in/pOut=2^n)..", | |
| 133 | − fDlp->fInputFrameRate, fDlp->fOutputFrameRate, i); | |
| 134 | − return ENC_RETURN_INVALIDINPUT; | |
| 130 | + WelsLog (pLogCtx, WELS_LOG_WARNING, | |
| 131 | + "AUTO CORRECT: Invalid settings in input frame rate(%.6f) and output frame rate(%.6f) of layer #%d config file: iResult of output frame rate divided by input frame rate should be power of 2(i.e,in/pOut=2^n). \n Auto correcting Output Framerate to Input Framerate %f!\n", | |
| 132 | + fDlp->fInputFrameRate, fDlp->fOutputFrameRate, i, fDlp->fInputFrameRate); | |
| 133 | + fDlp->fOutputFrameRate = fDlp->fInputFrameRate; | |
| 135 | 134 | } |
| 136 | 135 | } |
| 137 | 136 | |
| 138 | − for (i = 0; i < pCfg->iSpatialLayerNum; ++ i) { | |
| 139 | − SSpatialLayerInternal* fDlp = &pCfg->sDependencyLayers[i]; | |
| 140 | − if (fDlp->fInputFrameRate > fMaxFrameRate) | |
| 141 | − fMaxFrameRate = fDlp->fInputFrameRate; | |
| 142 | − } | |
| 143 | − | |
| 144 | − if (fMaxFrameRate > fEpsn && (fMaxFrameRate - pCfg->fMaxFrameRate > fEpsn | |
| 145 | − || fMaxFrameRate - pCfg->fMaxFrameRate < -fEpsn)) { | |
| 146 | − pCfg->fMaxFrameRate = fMaxFrameRate; | |
| 147 | − } | |
| 148 | − | |
| 149 | − | |
| 150 | 137 | if ((pCfg->iRCMode != RC_OFF_MODE) && (pCfg->iRCMode != RC_QUALITY_MODE) && (pCfg->iRCMode != RC_BUFFERBASED_MODE) |
| 151 | 138 | && (pCfg->iRCMode != RC_BITRATE_MODE)) { |
| 152 | 139 | WelsLog (pLogCtx, WELS_LOG_ERROR, "ParamValidation(),Invalid iRCMode = %d", pCfg->iRCMode); |
| @@ -2026,6 +2013,11 @@ int32_t WelsInitEncoderExt (sWelsEncCtx** ppCtx, SWelsSvcCodingParam* pCodingPar · 1873 unmodified lines | ||
| 2026 | 2013 | WelsLog (pLogCtx, WELS_LOG_ERROR, "WelsInitEncoderExt(), ParamValidationExt failed return %d.", iRet); |
| 2027 | 2014 | return iRet; |
| 2028 | 2015 | } |
| 2016 | + iRet = pCodingParam->DetermineTemporalSettings(); | |
| 2017 | + if (iRet != ENC_RETURN_SUCCESS) { | |
| 2018 | + WelsLog (pLogCtx, WELS_LOG_ERROR, "WelsInitEncoderExt(), DetermineTemporalSettings failed return %d (check in/out frame rate and temporal layer setting!)", iRet); | |
| 2019 | + return iRet; | |
| 2020 | + } | |
| 2029 | 2021 | iRet = GetMultipleThreadIdc (pLogCtx, pCodingParam, iSliceNum, iCacheLineSize, uiCpuFeatureFlags); |
| 2030 | 2022 | if (iRet != 0) { |
| 2031 | 2023 | WelsLog (pLogCtx, WELS_LOG_ERROR, "WelsInitEncoderExt(), GetMultipleThreadIdc failed return %d.", iRet); |
| @@ -2045,7 +2037,6 @@ int32_t WelsInitEncoderExt (sWelsEncCtx** ppCtx, SWelsSvcCodingParam* pCodingPar · 13 unmodified lines | ||
| 2045 | 2037 | pCtx->pMemAlign = new CMemoryAlign (iCacheLineSize); |
| 2046 | 2038 | WELS_VERIFY_RETURN_PROC_IF (1, (NULL == pCtx->pMemAlign), FreeMemorySvc (&pCtx)) |
| 2047 | 2039 | |
| 2048 | − pCodingParam->DetermineTemporalSettings(); | |
| 2049 | 2040 | iRet = AllocCodingParam (&pCtx->pSvcParam, pCtx->pMemAlign); |
| 2050 | 2041 | if (iRet != 0) { |
| 2051 | 2042 | FreeMemorySvc (&pCtx); |