ref: c62e70da54203e86d40ead65b20c5ee9f67b7213
parent: 462af17a77ca91ea3b04489b2ea1d1f949b4e0a2
author: huade <[email protected]>
date: Wed Dec 21 11:20:19 EST 2016
Multi-thread-fixed:RBC#1719:remove iSliceNum in pWelsSvcRc
--- a/codec/encoder/core/inc/rc.h
+++ b/codec/encoder/core/inc/rc.h
@@ -192,7 +192,6 @@
int32_t iMaxFrameQp;
int32_t iNumberMbFrame;
int32_t iNumberMbGom;
-int32_t iSliceNum;
int32_t iGomSize;
int32_t iSkipFrameNum;
--- a/codec/encoder/core/src/ratectl.cpp
+++ b/codec/encoder/core/src/ratectl.cpp
@@ -108,12 +108,10 @@
bool bMultiSliceMode = false;
int32_t iGomRowMode0 = 1, iGomRowMode1 = 1;
for (j = 0; j < pEncCtx->pSvcParam->iSpatialLayerNum; j++) {
- SSliceCtx* pSliceCtx = &pEncCtx->ppDqLayerList[j]->sSliceEncCtx;
pWelsSvcRc = &pEncCtx->pWelsSvcRc[j];
pDLayerParam = &pEncCtx->pSvcParam->sSpatialLayers[j];
iMbWidth = (pDLayerParam->iVideoWidth >> 4);
pWelsSvcRc->iNumberMbFrame = iMbWidth * (pDLayerParam->iVideoHeight >> 4);
- pWelsSvcRc->iSliceNum = pSliceCtx->iSliceNumInFrame;
pWelsSvcRc->iRcVaryPercentage = pEncCtx->pSvcParam->iBitsVaryPercentage; // % -- for temp
pWelsSvcRc->iRcVaryRatio = pWelsSvcRc->iRcVaryPercentage;
@@ -529,7 +527,7 @@
void RcInitSliceInformation (sWelsEncCtx* pEncCtx) {
SSlice** ppSliceInLayer = pEncCtx->pCurDqLayer->ppSliceInLayer;
SWelsSvcRc* pWelsSvcRc = &pEncCtx->pWelsSvcRc[pEncCtx->uiDependencyId];
- const int32_t kiSliceNum = pWelsSvcRc->iSliceNum;
+ const int32_t kiSliceNum = pEncCtx->pCurDqLayer->iMaxSliceNum;
pWelsSvcRc->iBitsPerMb = WELS_DIV_ROUND (static_cast<int64_t> (pWelsSvcRc->iTargetBits) * INT_MULTIPLY,
pWelsSvcRc->iNumberMbFrame);
for (int32_t i = 0; i < kiSliceNum; i++) {
@@ -623,7 +621,7 @@
SSlice** ppSliceInLayer = pEncCtx->pCurDqLayer->ppSliceInLayer;
SWelsSvcRc* pWelsSvcRc = &pEncCtx->pWelsSvcRc[pEncCtx->uiDependencyId];
SRCSlicing* pSOverRc = &ppSliceInLayer[0]->sSlicingOverRc;
- const int32_t kiSliceNum = pWelsSvcRc->iSliceNum;
+ const int32_t kiSliceNum = pEncCtx->pCurDqLayer->iMaxSliceNum;
const int32_t kiGlobalQp = pEncCtx->iGlobalQp;
pWelsSvcRc->iAverageFrameQp = 0;
@@ -1137,7 +1135,8 @@
}
void WelsRcPictureInitGom (sWelsEncCtx* pEncCtx, long long uiTimeStamp) {
- SWelsSvcRc* pWelsSvcRc = &pEncCtx->pWelsSvcRc[pEncCtx->uiDependencyId];
+ SWelsSvcRc* pWelsSvcRc = &pEncCtx->pWelsSvcRc[pEncCtx->uiDependencyId];
+ const int32_t kiSliceNum = pEncCtx->pCurDqLayer->iMaxSliceNum;
pWelsSvcRc->iContinualSkipFrames = 0;
if (pEncCtx->eSliceType == I_SLICE) {
@@ -1158,7 +1157,7 @@
RcDecideTargetBits (pEncCtx);
}
//turn off GOM QP when slicenum is larger 1
- if ((pWelsSvcRc->iSliceNum > 1) || ((pEncCtx->pSvcParam->iRCMode == RC_BITRATE_MODE)
+ if ((kiSliceNum > 1) || ((pEncCtx->pSvcParam->iRCMode == RC_BITRATE_MODE)
&& (pEncCtx->eSliceType == I_SLICE))) {
pWelsSvcRc->bEnableGomQp = false;
} else