Hello:
I use DVRRDK dm816x in my project, when encoder 8M 720P60,use CBR,have bad effective,below picture is use elecard stream eye to analysis the steam:
in the picture: P frame is bigger then I frame,it's not right
my encoder config:
in the usecase:
EncLink_CreateParams encPrm,*pEncPrm = &encPrm;
EncLink_CreateParams_Init(pEncPrm);
pEncPrm->inQueParams.prevLinkId = gRB_S2013_HD_LINK.linkId_ipcInM3Video;
pEncPrm->inQueParams.prevLinkQueId = 0;
pEncPrm->outQueParams.nextLink = gRB_S2013_HD_LINK.linkId_ipcBitsOutM3Video;
for(num=0; num<gVencModuleContext.vencConfig.numPrimaryChn; num++)
{
VENC_CHN_PARAMS_S *pCh = &gVencModuleContext.vencConfig.encChannelParams[num];
pEncPrm->chCreateParams[num].format = IVIDEO_H264HP;
pEncPrm->chCreateParams[num].profile = gVencModuleContext.vencConfig.h264Profile[num];;
pEncPrm->chCreateParams[num].dataLayout = IVIDEO_FIELD_SEPARATED;//VCODEC_FIELD_SEPARATED(4.0)->IVIDEO_FIELD_SEPARATED(3.5)
pEncPrm->chCreateParams[num].fieldMergeEncodeEnable = FALSE;
pEncPrm->chCreateParams[num].enableAnalyticinfo = FALSE;
pEncPrm->chCreateParams[num].enableWaterMarking = FALSE;
pEncPrm->chCreateParams[num].maxBitRate = pCh->maxBitRate;
pEncPrm->chCreateParams[num].encodingPreset = XDM_USER_DEFINED;
pEncPrm->chCreateParams[num].enableHighSpeed = TRUE;
pEncPrm->chCreateParams[num].rateControlPreset = IVIDEO_USER_DEFINED;//IVIDEO_LOW_DELAY;
pEncPrm->chCreateParams[num].enableSVCExtensionFlag = FALSE;
pEncPrm->chCreateParams[num].numTemporalLayer = VENC_TEMPORAL_LAYERS_1;
pEncPrm->chCreateParams[num].defaultDynamicParams.intraFrameInterval = 25;
pEncPrm->chCreateParams[num].defaultDynamicParams.inputFrameRate = 25;
pEncPrm->chCreateParams[num].defaultDynamicParams.interFrameInterval = 1;/*No B-Frame*/
pEncPrm->chCreateParams[num].defaultDynamicParams.targetBitRate = 2*1000*1000;
pEncPrm->chCreateParams[num].defaultDynamicParams.mvAccuracy = IVIDENC2_MOTIONVECTOR_QUARTERPEL;
pEncPrm->chCreateParams[num].defaultDynamicParams.rcAlg = pCh->dynamicParam.rcAlg;
pEncPrm->chCreateParams[num].defaultDynamicParams.qpInit = pCh->dynamicParam.qpInit;;
#if 1
pEncPrm->chCreateParams[num].defaultDynamicParams.qpMin = pCh->dynamicParam.qpMin;
pEncPrm->chCreateParams[num].defaultDynamicParams.qpMax = pCh->dynamicParam.qpMax;
#else
pEncPrm->chCreateParams[num].defaultDynamicParams.qpMin = 1;
/*if the bitrate is lower then the Qp num will be larger,max is 51*/
pEncPrm->chCreateParams[num].defaultDynamicParams.qpMax = 51;
#endif
pEncPrm->chCreateParams[num].defaultDynamicParams.vbrDuration = 8;
pEncPrm->chCreateParams[num].defaultDynamicParams.vbrSensitivity = 0;
pEncPrm->numBufPerCh[num] = 0;/*Use ENC Link's default setting*/
}
int the demo:
Venc_params_init(pEncPrm);
pEncPrm->numPrimaryChn = 5;
pEncPrm->numSecondaryChn = 0;
for (ChaID = 0; ChaID < pEncPrm->numPrimaryChn; ChaID++)
{
pEncPrm->h264Profile[ChaID] = VENC_CHN_HIGH_PROFILE;
pEncPrm->encChannelParams[ChaID].maxBitRate = 10 << 20;
pEncPrm->encChannelParams[ChaID].videoWidth = 1920;
pEncPrm->encChannelParams[ChaID].videoHeight = 1080;
pEncPrm->encChannelParams[ChaID].dynamicParam.qpInit = -1;
pEncPrm->encChannelParams[ChaID].dynamicParam.qpMin = 1;
pEncPrm->encChannelParams[ChaID].dynamicParam.qpMax = 51;
pEncPrm->encChannelParams[ChaID].dynamicParam.rcAlg = VENC_RATE_CTRL_CBR;
}
it's my wrong config or other reason lead this issue?