ref: 76b488a60d1c86bd1dbe3196f0d5caa3be754268
parent: f22a9e890fb74acf3871640bf2b173fdb8665b8a
parent: b52aff7225525b466033e294f92d467cdc27df69
author: sijchen <[email protected]>
date: Mon Jul 7 13:07:37 EDT 2014
Merge pull request #1095 from ruil2/rc_fix_1 bEnableSceneChangeDetect should be true for screen content
--- a/codec/encoder/core/src/encoder_ext.cpp
+++ b/codec/encoder/core/src/encoder_ext.cpp
@@ -92,10 +92,17 @@
return ENC_RETURN_UNSUPPORTED_PARA;
}
if (pCfg->bEnableAdaptiveQuant) {
- WelsLog (pLogCtx, WELS_LOG_WARNING, "ParamValidation(), AdaptiveQuant(%d) is not supported yet for screen content, auto turned off\n",
+ WelsLog (pLogCtx, WELS_LOG_WARNING,
+ "ParamValidation(), AdaptiveQuant(%d) is not supported yet for screen content, auto turned off\n",
pCfg->bEnableAdaptiveQuant);
pCfg->bEnableAdaptiveQuant = false;
}
+ if (pCfg->bEnableSceneChangeDetect == false) {
+ pCfg->bEnableSceneChangeDetect = true;
+ WelsLog (pLogCtx, WELS_LOG_WARNING,
+ "ParamValidation(), screen change detection should be turned on,change bEnableSceneChangeDetect as true\n");
+ }
+
}
if (pCfg->iSpatialLayerNum > 1) {
int32_t iFinalWidth = pCfg->sSpatialLayers[pCfg->iSpatialLayerNum - 1].iVideoWidth;
@@ -2931,13 +2938,13 @@
}
//loop each layer to check if have skip frame when RC and frame skip enable (maxbr>0)
-bool CheckFrameSkipBasedMaxbr(sWelsEncCtx* pCtx, int32_t iSpatialNum) {
+bool CheckFrameSkipBasedMaxbr (sWelsEncCtx* pCtx, int32_t iSpatialNum) {
SSpatialPicIndex* pSpatialIndexMap = &pCtx->sSpatialIndexMap[0];
bool bSkipMustFlag = false;
if (RC_OFF_MODE != pCtx->pSvcParam->iRCMode && true == pCtx->pSvcParam->bEnableFrameSkip) {
for (int32_t i = 0; i < iSpatialNum; i++) {
- if(0 == pCtx->pSvcParam->sSpatialLayers[i].iMaxSpatialBitrate) {
+ if (0 == pCtx->pSvcParam->sSpatialLayers[i].iMaxSpatialBitrate) {
break;
}
pCtx->uiDependencyId = (uint8_t) (pSpatialIndexMap + i)->iDid;
@@ -3011,7 +3018,7 @@
}
//loop each layer to check if have skip frame when RC and frame skip enable
- if (CheckFrameSkipBasedMaxbr(pCtx, iSpatialNum)) {
+ if (CheckFrameSkipBasedMaxbr (pCtx, iSpatialNum)) {
pFbi->eFrameType = videoFrameTypeSkip;
return ENC_RETURN_SUCCESS;
}