History

refine scc rc

ruil2 committed 12 years ago

Commit c618cb11 parent a3bdf4f6 files · +8468 −8470Browse files

Showing the changes to codec/encoder/core/src/ratectl.cpp (1 of 6 files). Show all

Unified · Split

codec/encoder/core/src/ratectl.cpp+18−19
@@ -49,13 +49,9 @@ · 48 unmodified lines
4949
5050 namespace WelsEnc {
5151
52−#define COST2BITS_INIT 0.33
53−#define COMPRESS_RATIO_I_P 3
54−#define COST2BITS_INIT_P (COST2BITS_INIT/COMPRESS_RATIO_I_P)
5552
56−
57−#define VIRTUAL_BUFFER_LOW_TH 0.1
58−#define VIRTUAL_BUFFER_HIGH_TH 2.5
53+#define VIRTUAL_BUFFER_LOW_TH 1.2
54+#define VIRTUAL_BUFFER_HIGH_TH 1.8
5955
6056 //#define _TEST_TEMP_RC_
6157 #ifdef _TEST_TEMP_RC_
@@ -520,7 +516,7 @@ void RcCalculatePictureQp (sWelsEncCtx* pEncCtx) { · 458 unmodified lines
520516 iLumaQp = WELS_DIV_ROUND (iLumaQp * INT_MULTIPLY - pEncCtx->pVaa->sAdaptiveQuantParam.iAverMotionTextureIndexToDeltaQp,
521517 INT_MULTIPLY);
522518
523− if (!((pEncCtx->pSvcParam->iRCMode == RC_BITRATE_MODE) && (pEncCtx->pSvcParam->bEnableFrameSkip == false)))
519+ if (! ((pEncCtx->pSvcParam->iRCMode == RC_BITRATE_MODE) && (pEncCtx->pSvcParam->bEnableFrameSkip == false)))
524520 iLumaQp = WELS_CLIP3 (iLumaQp, pWelsSvcRc->iMinQp, pWelsSvcRc->iMaxQp);
525521
526522 }
@@ -562,7 +558,8 @@ void RcDecideTargetBits (sWelsEncCtx* pEncCtx) { · 35 unmodified lines
562558 pWelsSvcRc->iRemainingWeights);
563559 else //this case should be not hit. needs to more test case to verify this
564560 pWelsSvcRc->iTargetBits = pWelsSvcRc->iRemainingBits;
565− if ((pWelsSvcRc->iTargetBits <= 0) && ((pEncCtx->pSvcParam->iRCMode == RC_BITRATE_MODE) && (pEncCtx->pSvcParam->bEnableFrameSkip == false))) {
561+ if ((pWelsSvcRc->iTargetBits <= 0) && ((pEncCtx->pSvcParam->iRCMode == RC_BITRATE_MODE)
562+ && (pEncCtx->pSvcParam->bEnableFrameSkip == false))) {
566563 pWelsSvcRc->iCurrentBitsLevel = BITS_EXCEEDED;
567564 }
568565 pWelsSvcRc->iTargetBits = WELS_CLIP3 (pWelsSvcRc->iTargetBits, pTOverRc->iMinBitsTl, pTOverRc->iMaxBitsTl);
@@ -689,7 +686,7 @@ void RcCalculateGomQp (sWelsEncCtx* pEncCtx, SMB* pCurMb, int32_t iSliceId) { · 120 unmodified lines
689686
690687 pSOverRc->iCalculatedQpSlice = WELS_CLIP3 (pSOverRc->iCalculatedQpSlice,
691688 pEncCtx->iGlobalQp - pWelsSvcRc->iQpRangeLowerInFrame, pEncCtx->iGlobalQp + pWelsSvcRc->iQpRangeUpperInFrame);
692− if (!((pEncCtx->pSvcParam->iRCMode == RC_BITRATE_MODE) && (pEncCtx->pSvcParam->bEnableFrameSkip == false)))
689+ if (! ((pEncCtx->pSvcParam->iRCMode == RC_BITRATE_MODE) && (pEncCtx->pSvcParam->bEnableFrameSkip == false)))
693690 pSOverRc->iCalculatedQpSlice = WELS_CLIP3 (pSOverRc->iCalculatedQpSlice, pWelsSvcRc->iMinQp, pWelsSvcRc->iMaxQp);
694691
695692 pSOverRc->iGomBitsSlice = 0;
@@ -1028,11 +1025,8 @@ void InitRcModuleScc (void* pCtx) { · 332 unmodified lines
10281025 pWelsSvcRc->iBufferFullnessSkip = 0;
10291026 pWelsSvcRc->uiLastTimeStamp = 0;
10301027
1031− SSpatialLayerConfig* pDLayerConfig = &pEncCtx->pSvcParam->sSpatialLayers[0];
1032− double dResoRatio = (pDLayerConfig->iVideoWidth * pDLayerConfig->iVideoHeight / 1024.0) / 768.0 * 0.8;
1033−
1034− pWelsSvcRc->dCost2BitsIntra = COST2BITS_INIT * dResoRatio;
1035− pWelsSvcRc->dAvgCost2Bits = COST2BITS_INIT_P * dResoRatio;
1028+ pWelsSvcRc->dCost2BitsIntra = 1;
1029+ pWelsSvcRc->dAvgCost2Bits = 1;
10361030 }
10371031 void WelRcPictureInitScc (void* pCtx) {
10381032 sWelsEncCtx* pEncCtx = (sWelsEncCtx*)pCtx;
@@ -1049,13 +1043,13 @@ void WelRcPictureInitScc (void* pCtx) { · 10 unmodified lines
10491043 int32_t iTargetBits = iBitRate * 2 - pWelsSvcRc->iBufferFullnessSkip;
10501044 iTargetBits = WELS_MAX (1, iTargetBits);
10511045 double Qstep = iFrameCplx * pWelsSvcRc->dCost2BitsIntra / iTargetBits;
1052− int32_t iQp = RcConvertQStep2Qp ((int32_t)Qstep);
1046+ int32_t iQp = RcConvertQStep2Qp ((int32_t) (Qstep * INT_MULTIPLY));
10531047
10541048 pEncCtx->iGlobalQp = WELS_CLIP3 (iQp, MIN_IDR_QP, MAX_IDR_QP);
10551049 } else {
10561050 int32_t iTargetBits = (int32_t) ((float)iBitRate / pDLayerConfig->fFrameRate); //iBitRate / 10;
10571051 double Qstep = iFrameCplx * pWelsSvcRc->dAvgCost2Bits / iTargetBits;
1058− int32_t iQp = RcConvertQStep2Qp ((int32_t)Qstep);
1052+ int32_t iQp = RcConvertQStep2Qp ((int32_t) (Qstep * INT_MULTIPLY));
10591053 iDeltaQp = iQp - iBaseQp;
10601054 if (pWelsSvcRc->iBufferFullnessSkip > iBitRate) {
10611055 if (iDeltaQp > 0) {
@@ -1108,7 +1102,7 @@ void WelsRcFrameDelayJudgeScc (void* pCtx, EVideoFrameType eFrameType, long long · 46 unmodified lines
11081102 iSentBits = WELS_MAX (iSentBits, 0);
11091103
11101104 const double dVbufferThRatio = (eFrameType == videoFrameTypeI
1111− || eFrameType == videoFrameTypeIDR) ? VIRTUAL_BUFFER_LOW_TH : VIRTUAL_BUFFER_HIGH_TH;
1105+ || eFrameType == videoFrameTypeIDR) ? VIRTUAL_BUFFER_HIGH_TH : VIRTUAL_BUFFER_LOW_TH;
11121106 const int32_t iVbufferTh = (int32_t) (iBitRate * dVbufferThRatio + 0.5);
11131107
11141108 pWelsSvcRc->iBufferFullnessSkip -= iSentBits;
@@ -1118,6 +1112,10 @@ void WelsRcFrameDelayJudgeScc (void* pCtx, EVideoFrameType eFrameType, long long · 3 unmodified lines
11181112 if (pWelsSvcRc->iBufferFullnessSkip < iVbufferTh) {
11191113 pWelsSvcRc->bSkipFlag = false;
11201114 }
1115+ if (pWelsSvcRc->bSkipFlag) {
1116+ pWelsSvcRc->iSkipFrameNum++;
1117+ WelsLog (& (pEncCtx->sLogCtx), WELS_LOG_INFO, "SCC iSkipFrameNum = %d,buffer = %d,threadhold = %d,bitrate = %d,timestamp=%d\n", pWelsSvcRc->iSkipFrameNum,pWelsSvcRc->iBufferFullnessSkip,iVbufferTh,pWelsSvcRc->iSkipFrameNum,iBitRate,uiTimeStamp);
1118+ }
11211119 pWelsSvcRc->uiLastTimeStamp = uiTimeStamp;
11221120 }
11231121
@@ -1141,7 +1139,8 @@ void WelsRcPictureInfoUpdateScc (void* pCtx, int32_t iNalSize) { · 17 unmodified lines
11411139 SVAAFrameInfoExt* pVaa = static_cast<SVAAFrameInfoExt*> (pEncCtx->pVaa);
11421140
11431141 double Qstep = RcConvertQp2QStep (pEncCtx->iGlobalQp);
1144− double dCost2Bits = (iFrameBits * Qstep) / (double) (pVaa->sComplexityScreenParam.iFrameComplexity + 1.0);
1142+ double dCost2Bits = (iFrameBits * Qstep) / (double) (pVaa->sComplexityScreenParam.iFrameComplexity + 1.0) /
1143+ INT_MULTIPLY;
11451144
11461145 if (pEncCtx->eSliceType == P_SLICE) {
11471146 pWelsSvcRc->dAvgCost2Bits = 0.95 * pWelsSvcRc->dAvgCost2Bits + 0.05 * dCost2Bits;
@@ -1185,7 +1184,7 @@ void WelsRcInitModule (void* pCtx, RC_MODES iRcMode) { · 37 unmodified lines
11851184 pRcf->pfWelsRcPictureInfoUpdate = WelsRcPictureInfoUpdateScc;
11861185 pRcf->pfWelsRcMbInit = WelsRcMbInitScc;
11871186 pRcf->pfWelsRcMbInfoUpdate = WelsRcMbInfoUpdateDisable;
1188− InitRcModuleScc(pEncCtx);
1187+ InitRcModuleScc (pEncCtx);
11891188
11901189 } else {
11911190 pRcf->pfWelsRcPictureInit = WelsRcPictureInitGom;

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