From eb357b51f275b1611ae624ec4aa4c6fa4a21e894 Mon Sep 17 00:00:00 2001 From: ruil2 Date: Mon, 12 May 2014 13:09:01 +0800 Subject: [PATCH] fix bitrate setting and add bitrate validation --- codec/console/enc/src/welsenc.cpp | 4 ++-- codec/encoder/core/src/encoder_ext.cpp | 13 +++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/codec/console/enc/src/welsenc.cpp b/codec/console/enc/src/welsenc.cpp index dba36a12..48a936cf 100644 --- a/codec/console/enc/src/welsenc.cpp +++ b/codec/console/enc/src/welsenc.cpp @@ -371,7 +371,7 @@ int ParseCommandLine (int argc, char** argv, SEncParamExt& sParam) { sParam.iRCMode = (RC_MODES) atoi (argv[i++]); else if (!strcmp (pCmd, "-tarb") && (i < argc)) - sParam.iTargetBitrate = atoi (argv[i++]); + sParam.iTargetBitrate = 1000*atoi (argv[i++]); else if (!strcmp (pCmd, "-ltarb") && (i + 1 < argc)) { int iLayer = atoi (argv[i++]); @@ -513,7 +513,7 @@ int ParseCommandLine (int argc, char** argv, SSourcePicture* pSrcPic, SEncParamE g_LevelSetting = atoi (argv[n++]); else if (!strcmp (pCommand, "-tarb") && (n < argc)) - pSvcParam.iTargetBitrate = atoi (argv[n++]); + pSvcParam.iTargetBitrate = 1000*atoi (argv[n++]); else if (!strcmp (pCommand, "-numl") && (n < argc)) { pSvcParam.iSpatialLayerNum = atoi (argv[n++]); diff --git a/codec/encoder/core/src/encoder_ext.cpp b/codec/encoder/core/src/encoder_ext.cpp index d3f41f5f..87187fbf 100644 --- a/codec/encoder/core/src/encoder_ext.cpp +++ b/codec/encoder/core/src/encoder_ext.cpp @@ -112,6 +112,19 @@ int32_t ParamValidation (SWelsSvcCodingParam* pCfg) { pCfg->fMaxFrameRate = fMaxFrameRate; } + //bitrate setting validation + if (pCfg->iRCMode != RC_OFF_MODE){ + int32_t iTotalBitrate = 0; + for (i = 0; i < pCfg->iSpatialLayerNum; ++ i) { + SDLayerParam* fDlp = &pCfg->sDependencyLayers[i]; + iTotalBitrate += fDlp->iSpatialBitrate; + } + if(iTotalBitrate > pCfg->iTargetBitrate){ + WelsLog(NULL, WELS_LOG_ERROR,"Invalid setttings in bitrate. the sum of each layer bitrate(%) is larger than total bitrate setting(%d)\n", + iTotalBitrate,pCfg->iTargetBitrate); + } + } + return ENC_RETURN_SUCCESS; }