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
822 822
823 }823 }
824 pEncCtx->iContinualSkipFrames++;824 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 }
825}831}
826void UpdateMaxBrCheckWindowStatus (sWelsEncCtx* pEncCtx, int32_t iSpatialNum, const long long uiTimeStamp) {832void UpdateMaxBrCheckWindowStatus (sWelsEncCtx* pEncCtx, int32_t iSpatialNum, const long long uiTimeStamp) {
827 SSpatialPicIndex* pSpatialIndexMap = &pEncCtx->sSpatialIndexMap[0];833 SSpatialPicIndex* pSpatialIndexMap = &pEncCtx->sSpatialIndexMap[0];
@@ -875,6 +881,16 @@ void UpdateMaxBrCheckWindowStatus (sWelsEncCtx* pEncCtx, int32_t iSpatialNum, co · 47 unmodified lines
875 return;881 return;
876}882}
877 883
884bool 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
889void 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
878void RcVBufferCalculationPadding (sWelsEncCtx* pEncCtx) {894void RcVBufferCalculationPadding (sWelsEncCtx* pEncCtx) {
879 SWelsSvcRc* pWelsSvcRc = &pEncCtx->pWelsSvcRc[pEncCtx->uiDependencyId];895 SWelsSvcRc* pWelsSvcRc = &pEncCtx->pWelsSvcRc[pEncCtx->uiDependencyId];
880 const int32_t kiOutputBits = pWelsSvcRc->iBitsPerFrame;896 const int32_t kiOutputBits = pWelsSvcRc->iBitsPerFrame;
@@ -1433,6 +1449,7 @@ void WelsRcInitFuncPointers (sWelsEncCtx* pEncCtx, RC_MODES iRcMode) { · 552 unmodified lines
1433 pRcf->pfWelsCheckSkipBasedMaxbr = NULL;1449 pRcf->pfWelsCheckSkipBasedMaxbr = NULL;
1434 pRcf->pfWelsUpdateBufferWhenSkip = NULL;1450 pRcf->pfWelsUpdateBufferWhenSkip = NULL;
1435 pRcf->pfWelsUpdateMaxBrWindowStatus = NULL;1451 pRcf->pfWelsUpdateMaxBrWindowStatus = NULL;
1452 pRcf->pfWelsRcPostFrameSkipping = NULL;
1436 break;1453 break;
1437 case RC_BUFFERBASED_MODE:1454 case RC_BUFFERBASED_MODE:
1438 pRcf->pfWelsRcPictureInit = WelRcPictureInitBufferBasedQp;1455 pRcf->pfWelsRcPictureInit = WelRcPictureInitBufferBasedQp;
@@ -1443,6 +1460,7 @@ void WelsRcInitFuncPointers (sWelsEncCtx* pEncCtx, RC_MODES iRcMode) { · 4 unmodified lines
1443 pRcf->pfWelsCheckSkipBasedMaxbr = NULL;1460 pRcf->pfWelsCheckSkipBasedMaxbr = NULL;
1444 pRcf->pfWelsUpdateBufferWhenSkip = NULL;1461 pRcf->pfWelsUpdateBufferWhenSkip = NULL;
1445 pRcf->pfWelsUpdateMaxBrWindowStatus = NULL;1462 pRcf->pfWelsUpdateMaxBrWindowStatus = NULL;
1463 pRcf->pfWelsRcPostFrameSkipping = NULL;
1446 break;1464 break;
1447 case RC_BITRATE_MODE:1465 case RC_BITRATE_MODE:
1448 pRcf->pfWelsRcPictureInit = WelsRcPictureInitGom;1466 pRcf->pfWelsRcPictureInit = WelsRcPictureInitGom;
@@ -1453,6 +1471,18 @@ void WelsRcInitFuncPointers (sWelsEncCtx* pEncCtx, RC_MODES iRcMode) { · 4 unmodified lines
1453 pRcf->pfWelsCheckSkipBasedMaxbr = CheckFrameSkipBasedMaxbr;1471 pRcf->pfWelsCheckSkipBasedMaxbr = CheckFrameSkipBasedMaxbr;
1454 pRcf->pfWelsUpdateBufferWhenSkip = UpdateBufferWhenFrameSkipped;1472 pRcf->pfWelsUpdateBufferWhenSkip = UpdateBufferWhenFrameSkipped;
1455 pRcf->pfWelsUpdateMaxBrWindowStatus = UpdateMaxBrCheckWindowStatus;1473 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;
1456 break;1486 break;
1457 case RC_TIMESTAMP_MODE:1487 case RC_TIMESTAMP_MODE:
1458 if (pEncCtx->pSvcParam->iUsageType == SCREEN_CONTENT_REAL_TIME) {1488 if (pEncCtx->pSvcParam->iUsageType == SCREEN_CONTENT_REAL_TIME) {
@@ -1471,6 +1501,7 @@ void WelsRcInitFuncPointers (sWelsEncCtx* pEncCtx, RC_MODES iRcMode) { · 12 unmodified lines
1471 pRcf->pfWelsCheckSkipBasedMaxbr = CheckFrameSkipBasedMaxbr;1501 pRcf->pfWelsCheckSkipBasedMaxbr = CheckFrameSkipBasedMaxbr;
1472 pRcf->pfWelsUpdateBufferWhenSkip = NULL;1502 pRcf->pfWelsUpdateBufferWhenSkip = NULL;
1473 pRcf->pfWelsUpdateMaxBrWindowStatus = NULL;1503 pRcf->pfWelsUpdateMaxBrWindowStatus = NULL;
1504 pRcf->pfWelsRcPostFrameSkipping = NULL;
1474 InitRcModuleTimeStamp (pEncCtx);1505 InitRcModuleTimeStamp (pEncCtx);
1475 break;1506 break;
1476 case RC_QUALITY_MODE:1507 case RC_QUALITY_MODE:
@@ -1483,7 +1514,7 @@ void WelsRcInitFuncPointers (sWelsEncCtx* pEncCtx, RC_MODES iRcMode) { · 6 unmodified lines
1483 pRcf->pfWelsCheckSkipBasedMaxbr = CheckFrameSkipBasedMaxbr;1514 pRcf->pfWelsCheckSkipBasedMaxbr = CheckFrameSkipBasedMaxbr;
1484 pRcf->pfWelsUpdateBufferWhenSkip = UpdateBufferWhenFrameSkipped;1515 pRcf->pfWelsUpdateBufferWhenSkip = UpdateBufferWhenFrameSkipped;
1485 pRcf->pfWelsUpdateMaxBrWindowStatus = UpdateMaxBrCheckWindowStatus;1516 pRcf->pfWelsUpdateMaxBrWindowStatus = UpdateMaxBrCheckWindowStatus;
1486 1517 pRcf->pfWelsRcPostFrameSkipping = NULL;
1487 break;1518 break;
1488 }1519 }
1489}1520}

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