add UNSPECIFIED value for max bit rate setting
This commit is contained in:
parent
810b9770fc
commit
0b2c82d92b
@ -50,6 +50,8 @@
|
|||||||
#define MAX_SLICES_NUM_TMP ( ( MAX_NAL_UNITS_IN_LAYER - SAVED_NALUNIT_NUM_TMP ) / 3 )
|
#define MAX_SLICES_NUM_TMP ( ( MAX_NAL_UNITS_IN_LAYER - SAVED_NALUNIT_NUM_TMP ) / 3 )
|
||||||
|
|
||||||
#define AUTO_REF_PIC_COUNT -1 // encoder selects the number of reference frame automatically
|
#define AUTO_REF_PIC_COUNT -1 // encoder selects the number of reference frame automatically
|
||||||
|
#define UNSPECIFIED_BIT_RATE 0 //
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
/* Errors derived from bitstream parsing */
|
/* Errors derived from bitstream parsing */
|
||||||
dsErrorFree = 0x00, /* Bitstream error-free */
|
dsErrorFree = 0x00, /* Bitstream error-free */
|
||||||
|
@ -136,7 +136,7 @@ typedef struct TagWelsSvcCodingParam: SEncParamExt {
|
|||||||
|
|
||||||
param.iComplexityMode = MEDIUM_COMPLEXITY;
|
param.iComplexityMode = MEDIUM_COMPLEXITY;
|
||||||
param.iTargetBitrate = 0; // overall target bitrate introduced in RC module
|
param.iTargetBitrate = 0; // overall target bitrate introduced in RC module
|
||||||
param.iMaxBitrate = MAX_BIT_RATE;
|
param.iMaxBitrate = UNSPECIFIED_BIT_RATE;
|
||||||
param.iMultipleThreadIdc = 1;
|
param.iMultipleThreadIdc = 1;
|
||||||
|
|
||||||
param.iLTRRefNum = 0;
|
param.iLTRRefNum = 0;
|
||||||
@ -179,7 +179,7 @@ typedef struct TagWelsSvcCodingParam: SEncParamExt {
|
|||||||
param.sSpatialLayers[iLayer].sSliceCfg.uiSliceMode = SM_SINGLE_SLICE;
|
param.sSpatialLayers[iLayer].sSliceCfg.uiSliceMode = SM_SINGLE_SLICE;
|
||||||
param.sSpatialLayers[iLayer].sSliceCfg.sSliceArgument.uiSliceSizeConstraint = 1500;
|
param.sSpatialLayers[iLayer].sSliceCfg.sSliceArgument.uiSliceSizeConstraint = 1500;
|
||||||
param.sSpatialLayers[iLayer].sSliceCfg.sSliceArgument.uiSliceNum = 1;
|
param.sSpatialLayers[iLayer].sSliceCfg.sSliceArgument.uiSliceNum = 1;
|
||||||
param.sSpatialLayers[iLayer].iMaxSpatialBitrate = MAX_BIT_RATE;
|
param.sSpatialLayers[iLayer].iMaxSpatialBitrate = UNSPECIFIED_BIT_RATE;
|
||||||
const int32_t kiLesserSliceNum = ((MAX_SLICES_NUM < MAX_SLICES_NUM_TMP) ? MAX_SLICES_NUM : MAX_SLICES_NUM_TMP);
|
const int32_t kiLesserSliceNum = ((MAX_SLICES_NUM < MAX_SLICES_NUM_TMP) ? MAX_SLICES_NUM : MAX_SLICES_NUM_TMP);
|
||||||
for (int32_t idx = 0; idx < kiLesserSliceNum; idx++)
|
for (int32_t idx = 0; idx < kiLesserSliceNum; idx++)
|
||||||
param.sSpatialLayers[iLayer].sSliceCfg.sSliceArgument.uiSliceMbNum[idx] = 960;
|
param.sSpatialLayers[iLayer].sSliceCfg.sSliceArgument.uiSliceMbNum[idx] = 960;
|
||||||
|
@ -494,6 +494,20 @@ void WelsEncoderApplyBitRate (SLogContext* pLogCtx, SWelsSvcCodingParam* pParam,
|
|||||||
pLayerParam = & (pParam->sSpatialLayers[i]);
|
pLayerParam = & (pParam->sSpatialLayers[i]);
|
||||||
fRatio = pLayerParam->iSpatialBitrate / (static_cast<float> (iOrigTotalBitrate));
|
fRatio = pLayerParam->iSpatialBitrate / (static_cast<float> (iOrigTotalBitrate));
|
||||||
pLayerParam->iSpatialBitrate = static_cast<int32_t> (pParam->iTargetBitrate * fRatio);
|
pLayerParam->iSpatialBitrate = static_cast<int32_t> (pParam->iTargetBitrate * fRatio);
|
||||||
|
if ( UNSPECIFIED_BIT_RATE != pLayerParam->iMaxSpatialBitrate && pLayerParam->iSpatialBitrate > pLayerParam->iMaxSpatialBitrate ) {
|
||||||
|
WelsLog (pLogCtx, WELS_LOG_WARNING,
|
||||||
|
"WelsEncoderApplyBitRate(), iSpatialBitrate(%d) > iMaxSpatialBitrate(%d) at Layer %d, limiting iSpatialBitrate to iMaxSpatialBitrate!",
|
||||||
|
pLayerParam->iSpatialBitrate, pLayerParam->iMaxSpatialBitrate, iLayer);
|
||||||
|
pLayerParam->iSpatialBitrate = pLayerParam->iMaxSpatialBitrate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
SSpatialLayerConfig* pLayerParam = & (pParam->sSpatialLayers[iLayer]);
|
||||||
|
if ( UNSPECIFIED_BIT_RATE != pLayerParam->iMaxSpatialBitrate && pLayerParam->iSpatialBitrate > pLayerParam->iMaxSpatialBitrate ) {
|
||||||
|
WelsLog (pLogCtx, WELS_LOG_WARNING,
|
||||||
|
"WelsEncoderApplyBitRate(), iSpatialBitrate(%d) > iMaxSpatialBitrate(%d) at Layer %d, limiting iSpatialBitrate to iMaxSpatialBitrate!",
|
||||||
|
pLayerParam->iSpatialBitrate, pLayerParam->iMaxSpatialBitrate, iLayer);
|
||||||
|
pLayerParam->iSpatialBitrate = pLayerParam->iMaxSpatialBitrate;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3005,7 +3019,7 @@ bool CheckFrameSkipBasedMaxbr (sWelsEncCtx* pCtx, int32_t iSpatialNum, EVideoFra
|
|||||||
if (pCtx->pSvcParam->bEnableFrameSkip) {
|
if (pCtx->pSvcParam->bEnableFrameSkip) {
|
||||||
if ((RC_QUALITY_MODE == pCtx->pSvcParam->iRCMode) || (RC_BITRATE_MODE == pCtx->pSvcParam->iRCMode)) {
|
if ((RC_QUALITY_MODE == pCtx->pSvcParam->iRCMode) || (RC_BITRATE_MODE == pCtx->pSvcParam->iRCMode)) {
|
||||||
for (int32_t i = 0; i < iSpatialNum; i++) {
|
for (int32_t i = 0; i < iSpatialNum; i++) {
|
||||||
if (0 == pCtx->pSvcParam->sSpatialLayers[i].iMaxSpatialBitrate) {
|
if (UNSPECIFIED_BIT_RATE == pCtx->pSvcParam->sSpatialLayers[i].iMaxSpatialBitrate) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
pCtx->uiDependencyId = (uint8_t) (pSpatialIndexMap + i)->iDid;
|
pCtx->uiDependencyId = (uint8_t) (pSpatialIndexMap + i)->iDid;
|
||||||
|
Loading…
Reference in New Issue
Block a user