我现在的帧率大概在40左右,我用编25帧率的方式去编码,发现在video enc中,帧有丢失,通过打印,发现是buffer队列满了,没有可用的output buffer,所以导致input frame 被free。
我现在修改如下:
用编码60帧的方式去编码,发现队列还是会堵塞。
我发现有个高速模式,不知道怎么设置?
MULTICH_INIT_STRUCT(EncLink_CreateParams,encPrm);
{
EncLink_ChCreateParams *pLinkChPrm;
EncLink_ChDynamicParams *pLinkDynPrm;
VENC_CHN_DYNAMIC_PARAM_S *pDynPrm;
VENC_CHN_PARAMS_S *pChPrm;
UInt32 i;
for (i = 0; i < VENC_PRIMARY_CHANNELS; i++)
{
pLinkChPrm = &encPrm.chCreateParams[i];
pLinkDynPrm = &pLinkChPrm->defaultDynamicParams;
pChPrm = &gVencModuleContext.vencConfig.encChannelParams[i];
pDynPrm = &pChPrm->dynamicParam;
// pLinkChPrm->format = IVIDEO_MJPEG;
pLinkChPrm->format = IVIDEO_H264HP;
pLinkChPrm->profile = gVencModuleContext.vencConfig.h264Profile[i];
pLinkChPrm->dataLayout = IVIDEO_PROGRESSIVE;
pLinkChPrm->fieldMergeEncodeEnable = FALSE;
pLinkChPrm->enableAnalyticinfo = pChPrm->enableAnalyticinfo;
// pLinkChPrm->maxBitRate = pChPrm->maxBitRate;
// pLinkChPrm->maxBitRate = 4000000;
pLinkChPrm->maxBitRate = 4000000;
pLinkChPrm->encodingPreset = XDM_HIGH_SPEED;//pChPrm->encodingPreset;
pLinkChPrm->rateControlPreset = IVIDEO_USER_DEFINED;
pLinkChPrm->enableHighSpeed = TRUE;//FALSE;
pLinkChPrm->enableWaterMarking = pChPrm->enableWaterMarking;
pLinkChPrm->StreamPreset = gUI_mcfw_config.StreamPreset[i];
pLinkDynPrm->intraFrameInterval = pDynPrm->intraFrameInterval;
// pLinkDynPrm->targetBitRate = pDynPrm->targetBitRate;
// pLinkDynPrm->targetBitRate = 2000000;
pLinkDynPrm->targetBitRate = 8000000;//8000000
pLinkDynPrm->interFrameInterval = 1;
pLinkDynPrm->mvAccuracy = IVIDENC2_MOTIONVECTOR_QUARTERPEL;
pLinkDynPrm->inputFrameRate = pDynPrm->inputFrameRate;
pLinkDynPrm->rcAlg = pDynPrm->rcAlg;
pLinkDynPrm->qpMin = pDynPrm->qpMin;
pLinkDynPrm->qpMax = pDynPrm->qpMax;
pLinkDynPrm->qpInit = pDynPrm->qpInit;
pLinkDynPrm->vbrDuration = pDynPrm->vbrDuration;
pLinkDynPrm->vbrSensitivity = pDynPrm->vbrSensitivity;
encPrm.numBufPerCh[i] = NUM_ENCODE_BUFFERS;
gVencModuleContext.encFormat[i] = pLinkChPrm->format;
}
}
encPrm.chCreateParams[0].defaultDynamicParams.inputFrameRate = 60;//30;
encPrm.chCreateParams[1].defaultDynamicParams.inputFrameRate = 60;//30;
encPrm.vsEnable = 0;
encPrm.isVaUseCase = 0;
encPrm.inQueParams.prevLinkId = gIpcInVideoId;
encPrm.inQueParams.prevLinkQueId = 0;
encPrm.outQueParams.nextLink = gIpcBitsOutVideoId;
ipcBitsOutVideoPrm.baseCreateParams.inQueParams.prevLinkId = gEncId;
ipcBitsOutVideoPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcBitsOutVideoPrm.baseCreateParams.numOutQue = 1;
ipcBitsOutVideoPrm.baseCreateParams.outQueParams[0].nextLink = gIpcBitsInHLOSId;
ipcBitsOutVideoPrm.baseCreateParams.inputFrameRate = 60;//30;
ipcBitsOutVideoPrm.baseCreateParams.outputFrameRate = 60;//30;
ipcBitsOutVideoPrm.baseCreateParams.processLink = SYSTEM_LINK_ID_INVALID;