Showing the changes to codec/encoder/core/src/ratectl.cpp (1 of 9 files). Show all
Unified · Split
| @@ -999,20 +999,44 @@ void WelsRcMbInitDisable (void* pCtx, SMB* pCurMb, SSlice* pSlice) { · 998 unmodified lines | ||
| 999 | 999 | void WelsRcMbInfoUpdateDisable (void* pCtx, SMB* pCurMb, int32_t iCostLuma, SSlice* pSlice) { |
| 1000 | 1000 | } |
| 1001 | 1001 | |
| 1002 | +void WelRcPictureInitBufferBasedQp (void* pCtx) { | |
| 1003 | + sWelsEncCtx* pEncCtx = (sWelsEncCtx*)pCtx; | |
| 1004 | + SWelsSvcRc* pWelsSvcRc = &pEncCtx->pWelsSvcRc[pEncCtx->uiDependencyId]; | |
| 1005 | + SVAAFrameInfo* pVaa = static_cast<SVAAFrameInfo*> (pEncCtx->pVaa); | |
| 1002 | 1006 | |
| 1003 | −void WelsRcInitModule (void* pCtx, int32_t iModule) { | |
| 1007 | + int32_t iMinQp = MIN_SCREEN_QP; | |
| 1008 | + if (pVaa->eSceneChangeIdc == LARGE_CHANGED_SCENE) | |
| 1009 | + iMinQp = MIN_SCREEN_QP + 2; | |
| 1010 | + else if (pVaa->eSceneChangeIdc == MEDIUM_CHANGED_SCENE) | |
| 1011 | + iMinQp = MIN_SCREEN_QP + 1; | |
| 1012 | + else | |
| 1013 | + iMinQp = MIN_SCREEN_QP; | |
| 1014 | + | |
| 1015 | + pEncCtx->iGlobalQp += pEncCtx->iDropNumber; | |
| 1016 | + pEncCtx->iGlobalQp = WELS_CLIP3 (pEncCtx->iGlobalQp, MIN_SCREEN_QP, MAX_SCREEN_QP); | |
| 1017 | +} | |
| 1018 | +void WelsRcInitModule (void* pCtx, RC_MODES iRcMode) { | |
| 1004 | 1019 | sWelsEncCtx* pEncCtx = (sWelsEncCtx*)pCtx; |
| 1005 | 1020 | SWelsRcFunc* pRcf = &pEncCtx->pFuncList->pfRc; |
| 1006 | 1021 | |
| 1007 | − switch (iModule) { | |
| 1008 | − case WELS_RC_DISABLE: | |
| 1022 | + switch (iRcMode) { | |
| 1023 | + case RC_OFF_MODE: | |
| 1009 | 1024 | pRcf->pfWelsRcPictureInit = WelsRcPictureInitDisable; |
| 1010 | 1025 | pRcf->pfWelsRcPicDelayJudge = NULL; |
| 1011 | 1026 | pRcf->pfWelsRcPictureInfoUpdate = WelsRcPictureInfoUpdateDisable; |
| 1012 | 1027 | pRcf->pfWelsRcMbInit = WelsRcMbInitDisable; |
| 1013 | 1028 | pRcf->pfWelsRcMbInfoUpdate = WelsRcMbInfoUpdateDisable; |
| 1014 | 1029 | break; |
| 1015 | − case WELS_RC_GOM: | |
| 1030 | + case RC_BUFFERBASED_MODE: | |
| 1031 | + pRcf->pfWelsRcPictureInit = WelRcPictureInitBufferBasedQp; | |
| 1032 | + pRcf->pfWelsRcPicDelayJudge = NULL; | |
| 1033 | + pRcf->pfWelsRcPictureInfoUpdate = WelsRcPictureInfoUpdateDisable; | |
| 1034 | + pRcf->pfWelsRcMbInit = WelsRcMbInitDisable; | |
| 1035 | + pRcf->pfWelsRcMbInfoUpdate = WelsRcMbInfoUpdateDisable; | |
| 1036 | + break; | |
| 1037 | + case RC_QUALITY_MODE: | |
| 1038 | + case RC_BITRATE_MODE: | |
| 1039 | + case RC_LOW_BW_MODE: | |
| 1016 | 1040 | default: |
| 1017 | 1041 | pRcf->pfWelsRcPictureInit = WelsRcPictureInitGom; |
| 1018 | 1042 | pRcf->pfWelsRcPicDelayJudge = WelsRcFrameDelayJudge; |