Merge pull request #159 from mstorsjo/frameskip-option
Add a runtime option for controlling frame skipping
This commit is contained in:
commit
ae027b83d8
@ -209,6 +209,7 @@ typedef struct {
|
|||||||
bool bEnableDenoise; // denoise control
|
bool bEnableDenoise; // denoise control
|
||||||
bool bEnableBackgroundDetection; // background detection control //VAA_BACKGROUND_DETECTION //BGD cmd
|
bool bEnableBackgroundDetection; // background detection control //VAA_BACKGROUND_DETECTION //BGD cmd
|
||||||
bool bEnableAdaptiveQuant; // adaptive quantization control
|
bool bEnableAdaptiveQuant; // adaptive quantization control
|
||||||
|
bool bEnableFrameSkip; // allow skipping frames to keep the bitrate within limits
|
||||||
bool bEnableCropPic; // enable cropping source picture. 8/25/2010
|
bool bEnableCropPic; // enable cropping source picture. 8/25/2010
|
||||||
// FALSE: Streaming Video Sharing; TRUE: Video Conferencing Meeting;
|
// FALSE: Streaming Video Sharing; TRUE: Video Conferencing Meeting;
|
||||||
bool bEnableLongTermReference; // 0: on, 1: off
|
bool bEnableLongTermReference; // 0: on, 1: off
|
||||||
|
@ -215,6 +215,8 @@ int ParseConfig (CReadConfig& cRdCfg, SWelsSvcCodingParam& pSvcParam, SFilesSet&
|
|||||||
pSvcParam.bEnableBackgroundDetection = atoi (strTag[1].c_str()) ? true : false;
|
pSvcParam.bEnableBackgroundDetection = atoi (strTag[1].c_str()) ? true : false;
|
||||||
} else if (strTag[0].compare ("EnableAdaptiveQuantization") == 0) {
|
} else if (strTag[0].compare ("EnableAdaptiveQuantization") == 0) {
|
||||||
pSvcParam.bEnableAdaptiveQuant = atoi (strTag[1].c_str()) ? true : false;
|
pSvcParam.bEnableAdaptiveQuant = atoi (strTag[1].c_str()) ? true : false;
|
||||||
|
} else if (strTag[0].compare ("EnableFrameSkip") == 0) {
|
||||||
|
pSvcParam.bEnableFrameSkip = atoi (strTag[1].c_str()) ? true : false;
|
||||||
} else if (strTag[0].compare ("EnableLongTermReference") == 0) {
|
} else if (strTag[0].compare ("EnableLongTermReference") == 0) {
|
||||||
pSvcParam.bEnableLongTermReference = atoi (strTag[1].c_str()) ? true : false;
|
pSvcParam.bEnableLongTermReference = atoi (strTag[1].c_str()) ? true : false;
|
||||||
} else if (strTag[0].compare ("LtrMarkPeriod") == 0) {
|
} else if (strTag[0].compare ("LtrMarkPeriod") == 0) {
|
||||||
@ -364,6 +366,9 @@ int ParseCommandLine (int argc, char** argv, SVCEncodingParam& sParam) {
|
|||||||
else if (!strcmp (pCmd, "-aq") && (i < argc))
|
else if (!strcmp (pCmd, "-aq") && (i < argc))
|
||||||
sParam.bEnableAdaptiveQuant = atoi (argv[i++]) ? true : false;
|
sParam.bEnableAdaptiveQuant = atoi (argv[i++]) ? true : false;
|
||||||
|
|
||||||
|
else if (!strcmp (pCmd, "-fs") && (i < argc))
|
||||||
|
sParam.bEnableFrameSkip = atoi (argv[i++]) ? true : false;
|
||||||
|
|
||||||
else if (!strcmp (pCmd, "-ltr") && (i < argc))
|
else if (!strcmp (pCmd, "-ltr") && (i < argc))
|
||||||
sParam.bEnableLongTermReference = atoi (argv[i++]) ? true : false;
|
sParam.bEnableLongTermReference = atoi (argv[i++]) ? true : false;
|
||||||
|
|
||||||
@ -464,6 +469,9 @@ int ParseCommandLine (int argc, char** argv, SWelsSvcCodingParam& pSvcParam, SFi
|
|||||||
else if (!strcmp (pCommand, "-aq") && (n < argc))
|
else if (!strcmp (pCommand, "-aq") && (n < argc))
|
||||||
pSvcParam.bEnableAdaptiveQuant = atoi (argv[n++]) ? true : false;
|
pSvcParam.bEnableAdaptiveQuant = atoi (argv[n++]) ? true : false;
|
||||||
|
|
||||||
|
else if (!strcmp (pCommand, "-fs") && (n < argc))
|
||||||
|
pSvcParam.bEnableFrameSkip = atoi (argv[n++]) ? true : false;
|
||||||
|
|
||||||
else if (!strcmp (pCommand, "-ltr") && (n < argc))
|
else if (!strcmp (pCommand, "-ltr") && (n < argc))
|
||||||
pSvcParam.bEnableLongTermReference = atoi (argv[n++]) ? true : false;
|
pSvcParam.bEnableLongTermReference = atoi (argv[n++]) ? true : false;
|
||||||
|
|
||||||
@ -666,6 +674,7 @@ int FillSpecificParameters (SVCEncodingParam& sParam) {
|
|||||||
sParam.bEnableDenoise = 0; // denoise control
|
sParam.bEnableDenoise = 0; // denoise control
|
||||||
sParam.bEnableBackgroundDetection = 1; // background detection control
|
sParam.bEnableBackgroundDetection = 1; // background detection control
|
||||||
sParam.bEnableAdaptiveQuant = 1; // adaptive quantization control
|
sParam.bEnableAdaptiveQuant = 1; // adaptive quantization control
|
||||||
|
sParam.bEnableFrameSkip = 1; // frame skipping
|
||||||
sParam.bEnableLongTermReference = 0; // long term reference control
|
sParam.bEnableLongTermReference = 0; // long term reference control
|
||||||
sParam.iLtrMarkPeriod = 30;
|
sParam.iLtrMarkPeriod = 30;
|
||||||
|
|
||||||
|
@ -175,6 +175,8 @@ bool_t bEnableSceneChangeDetect;
|
|||||||
bool_t bEnableBackgroundDetection;
|
bool_t bEnableBackgroundDetection;
|
||||||
/* adaptive quantization control */
|
/* adaptive quantization control */
|
||||||
bool_t bEnableAdaptiveQuant;
|
bool_t bEnableAdaptiveQuant;
|
||||||
|
/* frame skipping */
|
||||||
|
bool_t bEnableFrameSkip;
|
||||||
/* long term reference control */
|
/* long term reference control */
|
||||||
bool_t bEnableLongTermReference;
|
bool_t bEnableLongTermReference;
|
||||||
|
|
||||||
@ -249,6 +251,7 @@ void FillDefault (const bool_t kbEnableRc) {
|
|||||||
bEnableSceneChangeDetect = true; // scene change detection control
|
bEnableSceneChangeDetect = true; // scene change detection control
|
||||||
bEnableBackgroundDetection = true; // background detection control
|
bEnableBackgroundDetection = true; // background detection control
|
||||||
bEnableAdaptiveQuant = true; // adaptive quantization control
|
bEnableAdaptiveQuant = true; // adaptive quantization control
|
||||||
|
bEnableFrameSkip = true; // frame skipping
|
||||||
bEnableLongTermReference = false; // long term reference control
|
bEnableLongTermReference = false; // long term reference control
|
||||||
bEnableSpsPpsIdAddition = true; // pSps pPps id addition control
|
bEnableSpsPpsIdAddition = true; // pSps pPps id addition control
|
||||||
bPrefixNalAddingCtrl = true; // prefix NAL adding control
|
bPrefixNalAddingCtrl = true; // prefix NAL adding control
|
||||||
@ -306,6 +309,9 @@ int32_t ParamTranscode (SVCEncodingParam& pCodingParam, const bool_t kbEnableRc
|
|||||||
/* Adaptive quantization control */
|
/* Adaptive quantization control */
|
||||||
bEnableAdaptiveQuant = pCodingParam.bEnableAdaptiveQuant ? true : false;
|
bEnableAdaptiveQuant = pCodingParam.bEnableAdaptiveQuant ? true : false;
|
||||||
|
|
||||||
|
/* Frame skipping */
|
||||||
|
bEnableFrameSkip = pCodingParam.bEnableFrameSkip ? true : false;
|
||||||
|
|
||||||
/* Enable cropping source picture */
|
/* Enable cropping source picture */
|
||||||
bEnableCropPic = pCodingParam.bEnableCropPic ? true : false;
|
bEnableCropPic = pCodingParam.bEnableCropPic ? true : false;
|
||||||
|
|
||||||
|
@ -51,8 +51,6 @@
|
|||||||
namespace WelsSVCEnc {
|
namespace WelsSVCEnc {
|
||||||
//trace
|
//trace
|
||||||
#define GOM_TRACE_FLAG 1
|
#define GOM_TRACE_FLAG 1
|
||||||
//skip frame
|
|
||||||
#define SKIP_FRAME_FLAG 1
|
|
||||||
|
|
||||||
#define WELS_RC_DISABLE 0
|
#define WELS_RC_DISABLE 0
|
||||||
#define WELS_RC_GOM 1
|
#define WELS_RC_GOM 1
|
||||||
|
@ -812,11 +812,10 @@ void WelsRcPictureInfoUpdateGom (void* pCtx, int32_t layer_size) {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if SKIP_FRAME_FLAG
|
if (pEncCtx->pSvcParam->bEnableFrameSkip &&
|
||||||
if (pEncCtx->uiDependencyId == pEncCtx->pSvcParam->iNumDependencyLayer - 1) {
|
pEncCtx->uiDependencyId == pEncCtx->pSvcParam->iNumDependencyLayer - 1) {
|
||||||
RcVBufferCalculationSkip (pEncCtx);
|
RcVBufferCalculationSkip (pEncCtx);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
if (pEncCtx->pSvcParam->iPaddingFlag)
|
if (pEncCtx->pSvcParam->iPaddingFlag)
|
||||||
RcVBufferCalculationPadding (pEncCtx);
|
RcVBufferCalculationPadding (pEncCtx);
|
||||||
|
@ -304,7 +304,7 @@ int CWelsH264SVCEncoder::Initialize (SVCEncodingParam* argv, const INIT_TYPE iIn
|
|||||||
WelsLog (m_pEncContext, WELS_LOG_INFO, "CWelsH264SVCEncoder::Initialize, m_uiCountFrameNum= %d, m_iCspInternal= 0x%x\n",
|
WelsLog (m_pEncContext, WELS_LOG_INFO, "CWelsH264SVCEncoder::Initialize, m_uiCountFrameNum= %d, m_iCspInternal= 0x%x\n",
|
||||||
m_uiCountFrameNum, m_iCspInternal);
|
m_uiCountFrameNum, m_iCspInternal);
|
||||||
WelsLog (m_pEncContext, WELS_LOG_INFO,
|
WelsLog (m_pEncContext, WELS_LOG_INFO,
|
||||||
"coding_param->iPicWidth= %d;coding_param->iPicHeight= %d;coding_param->iTargetBitrate= %d;coding_param->iRCMode= %d;coding_param->iTemporalLayerNum= %d;coding_param->iSpatialLayerNum= %d;coding_param->fFrameRate= %.6ff;coding_param->iInputCsp= %d;coding_param->iKeyPicCodingMode= %d;coding_param->uiIntraPeriod= %d;coding_param->bEnableSpsPpsIdAddition = %d;coding_param->bPrefixNalAddingCtrl = %d;coding_param->bEnableDenoise= %d;coding_param->bEnableBackgroundDetection= %d;coding_param->bEnableAdaptiveQuant= %d;coding_param->bEnableCropPic= %d;coding_param->bEnableLongTermReference= %d;coding_param->iLtrMarkPeriod= %d;\n",
|
"coding_param->iPicWidth= %d;coding_param->iPicHeight= %d;coding_param->iTargetBitrate= %d;coding_param->iRCMode= %d;coding_param->iTemporalLayerNum= %d;coding_param->iSpatialLayerNum= %d;coding_param->fFrameRate= %.6ff;coding_param->iInputCsp= %d;coding_param->iKeyPicCodingMode= %d;coding_param->uiIntraPeriod= %d;coding_param->bEnableSpsPpsIdAddition = %d;coding_param->bPrefixNalAddingCtrl = %d;coding_param->bEnableDenoise= %d;coding_param->bEnableBackgroundDetection= %d;coding_param->bEnableAdaptiveQuant= %d;coding_param->bEnableFrameSkip= %d;coding_param->bEnableCropPic= %d;coding_param->bEnableLongTermReference= %d;coding_param->iLtrMarkPeriod= %d;\n",
|
||||||
sEncodingParam.iPicWidth,
|
sEncodingParam.iPicWidth,
|
||||||
sEncodingParam.iPicHeight,
|
sEncodingParam.iPicHeight,
|
||||||
sEncodingParam.iTargetBitrate,
|
sEncodingParam.iTargetBitrate,
|
||||||
@ -320,6 +320,7 @@ int CWelsH264SVCEncoder::Initialize (SVCEncodingParam* argv, const INIT_TYPE iIn
|
|||||||
sEncodingParam.bEnableDenoise,
|
sEncodingParam.bEnableDenoise,
|
||||||
sEncodingParam.bEnableBackgroundDetection,
|
sEncodingParam.bEnableBackgroundDetection,
|
||||||
sEncodingParam.bEnableAdaptiveQuant,
|
sEncodingParam.bEnableAdaptiveQuant,
|
||||||
|
sEncodingParam.bEnableFrameSkip,
|
||||||
sEncodingParam.bEnableCropPic,
|
sEncodingParam.bEnableCropPic,
|
||||||
sEncodingParam.bEnableLongTermReference,
|
sEncodingParam.bEnableLongTermReference,
|
||||||
sEncodingParam.iLtrMarkPeriod);
|
sEncodingParam.iLtrMarkPeriod);
|
||||||
@ -856,7 +857,7 @@ int CWelsH264SVCEncoder::SetOption (ENCODER_OPTION eOptionId, void* pOption) {
|
|||||||
WelsLog (m_pEncContext, WELS_LOG_INFO, "ENCODER_OPTION_SVC_ENCODE_PARAM, sEncodingParam.iInputCsp= 0x%x\n",
|
WelsLog (m_pEncContext, WELS_LOG_INFO, "ENCODER_OPTION_SVC_ENCODE_PARAM, sEncodingParam.iInputCsp= 0x%x\n",
|
||||||
sEncodingParam.iInputCsp);
|
sEncodingParam.iInputCsp);
|
||||||
WelsLog (m_pEncContext, WELS_LOG_INFO,
|
WelsLog (m_pEncContext, WELS_LOG_INFO,
|
||||||
"coding_param->iPicWidth= %d;coding_param->iPicHeight= %d;coding_param->iTargetBitrate= %d;coding_param->iRCMode= %d;coding_param->iPaddingFlag= %d;coding_param->iTemporalLayerNum= %d;coding_param->iSpatialLayerNum= %d;coding_param->fFrameRate= %.6ff;coding_param->iInputCsp= %d;coding_param->iKeyPicCodingMode= %d;coding_param->uiIntraPeriod= %d;coding_param->bEnableSpsPpsIdAddition = %d;coding_param->bPrefixNalAddingCtrl = %d;coding_param->bEnableDenoise= %d;coding_param->bEnableBackgroundDetection= %d;coding_param->bEnableAdaptiveQuant= %d;coding_param->bEnableCropPic= %d;coding_param->bEnableLongTermReference= %d;coding_param->iLtrMarkPeriod= %d;\n",
|
"coding_param->iPicWidth= %d;coding_param->iPicHeight= %d;coding_param->iTargetBitrate= %d;coding_param->iRCMode= %d;coding_param->iPaddingFlag= %d;coding_param->iTemporalLayerNum= %d;coding_param->iSpatialLayerNum= %d;coding_param->fFrameRate= %.6ff;coding_param->iInputCsp= %d;coding_param->iKeyPicCodingMode= %d;coding_param->uiIntraPeriod= %d;coding_param->bEnableSpsPpsIdAddition = %d;coding_param->bPrefixNalAddingCtrl = %d;coding_param->bEnableDenoise= %d;coding_param->bEnableBackgroundDetection= %d;coding_param->bEnableAdaptiveQuant= %d;coding_param->bEnableAdaptiveQuant= %d;coding_param->bEnableCropPic= %d;coding_param->bEnableLongTermReference= %d;coding_param->iLtrMarkPeriod= %d;\n",
|
||||||
sEncodingParam.iPicWidth,
|
sEncodingParam.iPicWidth,
|
||||||
sEncodingParam.iPicHeight,
|
sEncodingParam.iPicHeight,
|
||||||
sEncodingParam.iTargetBitrate,
|
sEncodingParam.iTargetBitrate,
|
||||||
@ -873,6 +874,7 @@ int CWelsH264SVCEncoder::SetOption (ENCODER_OPTION eOptionId, void* pOption) {
|
|||||||
sEncodingParam.bEnableDenoise,
|
sEncodingParam.bEnableDenoise,
|
||||||
sEncodingParam.bEnableBackgroundDetection,
|
sEncodingParam.bEnableBackgroundDetection,
|
||||||
sEncodingParam.bEnableAdaptiveQuant,
|
sEncodingParam.bEnableAdaptiveQuant,
|
||||||
|
sEncodingParam.bEnableFrameSkip,
|
||||||
sEncodingParam.bEnableCropPic,
|
sEncodingParam.bEnableCropPic,
|
||||||
sEncodingParam.bEnableLongTermReference,
|
sEncodingParam.bEnableLongTermReference,
|
||||||
sEncodingParam.iLtrMarkPeriod);
|
sEncodingParam.iLtrMarkPeriod);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user