This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DVRRDK350 DM816X encoder use CBR bad effective!

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?