diff --git a/codec/encoder/core/src/encoder_ext.cpp b/codec/encoder/core/src/encoder_ext.cpp index 7a68919d..fcd78d79 100644 --- a/codec/encoder/core/src/encoder_ext.cpp +++ b/codec/encoder/core/src/encoder_ext.cpp @@ -4718,7 +4718,7 @@ int32_t WelsEncoderParamAdjust (sWelsEncCtx** ppCtx, SWelsSvcCodingParam* pNewPa pOldDlpInternal->fInputFrameRate = pNewDlpInternal->fInputFrameRate; // input frame rate pOldDlpInternal->fOutputFrameRate = pNewDlpInternal->fOutputFrameRate; // output frame rate pOldDlp->iSpatialBitrate = pNewDlp->iSpatialBitrate; - + pOldDlp->iMaxSpatialBitrate = pNewDlp->iMaxSpatialBitrate; pOldDlp->uiProfileIdc = pNewDlp->uiProfileIdc; // value of profile IDC (0 for auto-detection) pOldDlp->iDLayerQp = pNewDlp->iDLayerQp; diff --git a/codec/encoder/core/src/ratectl.cpp b/codec/encoder/core/src/ratectl.cpp index 706eeb95..82b50a13 100644 --- a/codec/encoder/core/src/ratectl.cpp +++ b/codec/encoder/core/src/ratectl.cpp @@ -1331,10 +1331,20 @@ void WelsRcPictureInitGomTimeStamp (sWelsEncCtx* pEncCtx, long long uiTimeStamp int32_t iLumaQp = pWelsSvcRc->iLastCalculatedQScale; int32_t iTl = pEncCtx->uiTemporalId; SRCTemporal* pTOverRc = &pWelsSvcRc->pTemporalOverRc[iTl]; - //decide one frame bits allocated if (pEncCtx->eSliceType == I_SLICE) { if (0 == pWelsSvcRc->iIdrNum) { //iIdrNum == 0 means encoder has been initialed RcInitRefreshParameter (pEncCtx); + } + } + if (RcJudgeBitrateFpsUpdate (pEncCtx)) { + RcUpdateBitrateFps (pEncCtx); + } + if (pEncCtx->uiTemporalId == 0) { + RcUpdateTemporalZero (pEncCtx); + } + //decide one frame bits allocated + if (pEncCtx->eSliceType == I_SLICE) { + if (0 == pWelsSvcRc->iIdrNum) { //iIdrNum == 0 means encoder has been initialed RcInitIdrQp (pEncCtx); iLumaQp = pWelsSvcRc->iInitialQp; pWelsSvcRc->iTargetBits = static_cast (((double) (pDLayerParam->iSpatialBitrate) / (double) (