ref: 38313b913d62e7f71967f51462dc0dc37f858a41
parent: d7570bfa52f9ea383680ea9eb7b4d864ecd15e4f
parent: 316ab3188210b940f61e95a42950409d151880f5
author: sijchen <[email protected]>
date: Fri Mar 18 12:07:59 EDT 2016
Merge pull request #2419 from ruil2/bitrate_update fix bitrate update issue
--- a/codec/encoder/core/src/encoder_ext.cpp
+++ b/codec/encoder/core/src/encoder_ext.cpp
@@ -4718,7 +4718,7 @@
pOldDlpInternal->fInputFrameRate = pNewDlpInternal->fInputFrameRate; // input frame rate
pOldDlpInternal->fOutputFrameRate = pNewDlpInternal->fOutputFrameRate; // output frame rate
pOldDlp->iSpatialBitrate = pNewDlp->iSpatialBitrate;
-
+ pOldDlp->iMaxSpatialBitrate = pNewDlp->iMaxSpatialBitrate;
pOldDlp->uiProfileIdc =
pNewDlp->uiProfileIdc; // value of profile IDC (0 for auto-detection)
pOldDlp->iDLayerQp = pNewDlp->iDLayerQp;
--- a/codec/encoder/core/src/ratectl.cpp
+++ b/codec/encoder/core/src/ratectl.cpp
@@ -1331,10 +1331,20 @@
int32_t iLumaQp = pWelsSvcRc->iLastCalculatedQScale;
int32_t iTl = pEncCtx->uiTemporalId;
SRCTemporal* pTOverRc = &pWelsSvcRc->pTemporalOverRc[iTl];
- //decide one frame bits allocated
if (pEncCtx->eSliceType == I_SLICE) {
if (0 == pWelsSvcRc->iIdrNum) { //iIdrNum == 0 means encoder has been initialed
RcInitRefreshParameter (pEncCtx);
+ }
+ }
+ if (RcJudgeBitrateFpsUpdate (pEncCtx)) {
+ RcUpdateBitrateFps (pEncCtx);
+ }
+ if (pEncCtx->uiTemporalId == 0) {
+ RcUpdateTemporalZero (pEncCtx);
+ }
+ //decide one frame bits allocated
+ if (pEncCtx->eSliceType == I_SLICE) {
+ if (0 == pWelsSvcRc->iIdrNum) { //iIdrNum == 0 means encoder has been initialed
RcInitIdrQp (pEncCtx);
iLumaQp = pWelsSvcRc->iInitialQp;
pWelsSvcRc->iTargetBits = static_cast<int32_t> (((double) (pDLayerParam->iSpatialBitrate) / (double) (