TI中文支持网
TI专业的中文技术问题搜集分享网站

8127 ipnc video内核编码如何设置为高速模式

我现在的帧率大概在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;
 

Ternence_Hsu:

你好;

 

设置高速编码模式: pLinkChPrm->enableHighSpeed   = TRUE;//FALSE

已经配置为快速编码了;

 

发现丢帧,你可以把link的状态信息打印出来,查看是哪个link没有处理过来,导致丢帧的;

bing bing:

回复 Ternence_Hsu:

你好,我直接在enc编码完成后释放,发现没有丢帧,但是通过 outvideo–》inhost       在host中释放,产生了丢帧,具体原因还不详,不知道在配置的时候有没有什么要求?

Ternence_Hsu:

回复 bing bing:

 

ipcbit 是否丢帧,你可以再统计一下; (没有遇到过这样的情况,应当是不会丢帧的,这里实际只是一个地址的传递)

这里你需要注意,输出的实际帧率,并不是你编码帧率参数的设置的值是多少; M3VIDEO的link在处理数据的过程中,没有绝对时间概念的,不是指定30帧输出实际就是输出30帧,还需要看输入数据

赞(0)
未经允许不得转载:TI中文支持网 » 8127 ipnc video内核编码如何设置为高速模式
分享到: 更多 (0)