History

first version of post-frame skipping for rate control (not enabled)

Sijia Chen committed 11 years ago

Commit 99aaf311 parent 9be80c04 files · +113 −2Browse files

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

Unified · Split

codec/encoder/core/src/ratectl.cpp+32−1
@@ -822,6 +822,12 @@ void UpdateBufferWhenFrameSkipped (sWelsEncCtx* pEncCtx, int32_t iSpatialNum) { · 821 unmodified lines
822822
823823 }
824824 pEncCtx->iContinualSkipFrames++;
825+ if ( ( pEncCtx->iContinualSkipFrames % 3 ) == 0 ) {
826+ //output a warning when iContinualSkipFrames is large enough, which may indicate subjective quality problem
827+ //note that here iContinualSkipFrames must be >0, so the log output will be 3/6/....
828+ WelsLog (& (pEncCtx->sLogCtx), WELS_LOG_WARNING, "[Rc] iContinualSkipFrames(%d) is large",
829+ pEncCtx->iContinualSkipFrames);
830+ }
825831 }
826832 void UpdateMaxBrCheckWindowStatus (sWelsEncCtx* pEncCtx, int32_t iSpatialNum, const long long uiTimeStamp) {
827833 SSpatialPicIndex* pSpatialIndexMap = &pEncCtx->sSpatialIndexMap[0];
@@ -875,6 +881,16 @@ void UpdateMaxBrCheckWindowStatus (sWelsEncCtx* pEncCtx, int32_t iSpatialNum, co · 47 unmodified lines
875881 return;
876882 }
877883
884+bool WelsRcPostFrameSkipping (sWelsEncCtx* pCtx, const int32_t iDid, const long long uiTimeStamp) {
885+ //TODO: put in the decision of rate-control
886+ return false;
887+}
888+
889+void WelsRcPostFrameSkippedUpdate (sWelsEncCtx* pCtx, const int32_t iDid) {
890+ //TODO: do something to update buffers after post-skipping is done
891+ //let RC know post-skipping happened and adjust strategy accordingly
892+}
893+
878894 void RcVBufferCalculationPadding (sWelsEncCtx* pEncCtx) {
879895 SWelsSvcRc* pWelsSvcRc = &pEncCtx->pWelsSvcRc[pEncCtx->uiDependencyId];
880896 const int32_t kiOutputBits = pWelsSvcRc->iBitsPerFrame;
@@ -1433,6 +1449,7 @@ void WelsRcInitFuncPointers (sWelsEncCtx* pEncCtx, RC_MODES iRcMode) { · 552 unmodified lines
14331449 pRcf->pfWelsCheckSkipBasedMaxbr = NULL;
14341450 pRcf->pfWelsUpdateBufferWhenSkip = NULL;
14351451 pRcf->pfWelsUpdateMaxBrWindowStatus = NULL;
1452+ pRcf->pfWelsRcPostFrameSkipping = NULL;
14361453 break;
14371454 case RC_BUFFERBASED_MODE:
14381455 pRcf->pfWelsRcPictureInit = WelRcPictureInitBufferBasedQp;
@@ -1443,6 +1460,7 @@ void WelsRcInitFuncPointers (sWelsEncCtx* pEncCtx, RC_MODES iRcMode) { · 4 unmodified lines
14431460 pRcf->pfWelsCheckSkipBasedMaxbr = NULL;
14441461 pRcf->pfWelsUpdateBufferWhenSkip = NULL;
14451462 pRcf->pfWelsUpdateMaxBrWindowStatus = NULL;
1463+ pRcf->pfWelsRcPostFrameSkipping = NULL;
14461464 break;
14471465 case RC_BITRATE_MODE:
14481466 pRcf->pfWelsRcPictureInit = WelsRcPictureInitGom;
@@ -1453,6 +1471,18 @@ void WelsRcInitFuncPointers (sWelsEncCtx* pEncCtx, RC_MODES iRcMode) { · 4 unmodified lines
14531471 pRcf->pfWelsCheckSkipBasedMaxbr = CheckFrameSkipBasedMaxbr;
14541472 pRcf->pfWelsUpdateBufferWhenSkip = UpdateBufferWhenFrameSkipped;
14551473 pRcf->pfWelsUpdateMaxBrWindowStatus = UpdateMaxBrCheckWindowStatus;
1474+ pRcf->pfWelsRcPostFrameSkipping = WelsRcPostFrameSkipping;
1475+ break;
1476+ case RC_BITRATE_MODE_POST_SKIP:
1477+ pRcf->pfWelsRcPictureInit = WelsRcPictureInitGom;
1478+ pRcf->pfWelsRcPicDelayJudge = WelsRcFrameDelayJudge;
1479+ pRcf->pfWelsRcPictureInfoUpdate = WelsRcPictureInfoUpdateGom;
1480+ pRcf->pfWelsRcMbInit = WelsRcMbInitGom;
1481+ pRcf->pfWelsRcMbInfoUpdate = WelsRcMbInfoUpdateGom;
1482+ pRcf->pfWelsCheckSkipBasedMaxbr = CheckFrameSkipBasedMaxbr;
1483+ pRcf->pfWelsUpdateBufferWhenSkip = UpdateBufferWhenFrameSkipped;
1484+ pRcf->pfWelsUpdateMaxBrWindowStatus = UpdateMaxBrCheckWindowStatus;
1485+ pRcf->pfWelsRcPostFrameSkipping = WelsRcPostFrameSkipping;
14561486 break;
14571487 case RC_TIMESTAMP_MODE:
14581488 if (pEncCtx->pSvcParam->iUsageType == SCREEN_CONTENT_REAL_TIME) {
@@ -1471,6 +1501,7 @@ void WelsRcInitFuncPointers (sWelsEncCtx* pEncCtx, RC_MODES iRcMode) { · 12 unmodified lines
14711501 pRcf->pfWelsCheckSkipBasedMaxbr = CheckFrameSkipBasedMaxbr;
14721502 pRcf->pfWelsUpdateBufferWhenSkip = NULL;
14731503 pRcf->pfWelsUpdateMaxBrWindowStatus = NULL;
1504+ pRcf->pfWelsRcPostFrameSkipping = NULL;
14741505 InitRcModuleTimeStamp (pEncCtx);
14751506 break;
14761507 case RC_QUALITY_MODE:
@@ -1483,7 +1514,7 @@ void WelsRcInitFuncPointers (sWelsEncCtx* pEncCtx, RC_MODES iRcMode) { · 6 unmodified lines
14831514 pRcf->pfWelsCheckSkipBasedMaxbr = CheckFrameSkipBasedMaxbr;
14841515 pRcf->pfWelsUpdateBufferWhenSkip = UpdateBufferWhenFrameSkipped;
14851516 pRcf->pfWelsUpdateMaxBrWindowStatus = UpdateMaxBrCheckWindowStatus;
1486−
1517+ pRcf->pfWelsRcPostFrameSkipping = NULL;
14871518 break;
14881519 }
14891520 }

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