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

8168 scalar link处理帧率低?求助!

我对视频做了scalar处理,分为两个link进行处理,每个link两个通道,当然这两个link的裁剪比例是不同的。两个link均能收到21fps,但处理帧率只为8fps。请问为什么处理帧率会这么低?skip out FPS是什么?如图打印信息:

Ternence_Hsu:

你好;

    可以贴出你的Usecase的代码吗?

    你程序里面是不是有多个模块同时工作在一个sc的物理模块上 ?

Ternence_Hsu:

下面这个手册可以看一下:

DVRRDK_04.01.00.02/ti_tools/hdvpss/dvr_rdk_hdvpss/docs/HDVPSS_FeaturePerformanceGuide.pdf

里面介绍了hdvpss中的sc 、dei 、nsf等模块的理论值和实际性能值;

物理模块在上层的应用配置,在逻辑上可以同时使用,当个模块的性能有限,就可能出现你上面的情况,(注意swms 、dei 、sc  link )

xinpeng li:

回复 Ternence_Hsu:

Hi,Ternence Hsu

下面是usecase代码,link中有两个scalar link,pathId均为SCLR_LINK_SC5。我看文档中提到可将pathId以设置为SCLR_LINK_SEC0_SC3,但是我把另一个scalar link设置为SCLR_LINK_SEC0_SC3,scalar link就会创建失败。

Void MultiCh_createVcapVencVdis()
{CaptureLink_CreateParamscapturePrm;
//DeiLink_CreateParamsdeiPrm[NUM_DEI_LINK];	xpliDupLink_CreateParamsdupPrm[NUM_DUP_LINK];	//2 dup linkSelectLink_CreateParamsselectPrm;//xpli0710SclrLink_CreateParamssclrPrm[2];//xpli0710NsfLink_CreateParamsnsfPrm;SwMsLink_CreateParamsswMsPrm;MergeLink_CreateParamsmergePrm[3];DisplayLink_CreateParamsdisplayPrm[2];IpcLink_CreateParamsipcOutVpssPrm;IpcLink_CreateParamsipcInVideoPrm;EncLink_CreateParamsencPrm;IpcBitsOutLinkRTOS_CreateParams ipcBitsOutVideoPrm;IpcBitsInLinkHLOS_CreateParamsipcBitsInHostPrm[2];//xpli 0629IpcFramesInLinkRTOS_CreateParamsipcFramesInDspPrm;IpcFramesOutLinkRTOS_CreateParams ipcFramesOutVpssPrm;AlgLink_CreateParamsdspAlgPrm;CaptureLink_VipInstParams *pCaptureInstPrm;CaptureLink_OutParams*pCaptureOutPrm;UInt32 vipInstId;UInt32 mergeId[3],selectId;UInt32 i,j;Bool tilerEnable;Bool enableTiler;MULTICH_INIT_STRUCT(IpcLink_CreateParams ,ipcOutVpssPrm);MULTICH_INIT_STRUCT(IpcLink_CreateParams ,ipcInVideoPrm);MULTICH_INIT_STRUCT(IpcBitsOutLinkRTOS_CreateParams,ipcBitsOutVideoPrm);MULTICH_INIT_STRUCT(IpcBitsInLinkHLOS_CreateParams,ipcBitsInHostPrm[0]);MULTICH_INIT_STRUCT(IpcBitsInLinkHLOS_CreateParams,ipcBitsInHostPrm[1]);MULTICH_INIT_STRUCT(EncLink_CreateParams, encPrm);MULTICH_INIT_STRUCT(DisplayLink_CreateParams,displayPrm[0]);
//MULTICH_INIT_STRUCT(DisplayLink_CreateParams,displayPrm[1]);//xpli 0629MULTICH_INIT_STRUCT(IpcFramesInLinkRTOS_CreateParams,ipcFramesInDspPrm);MULTICH_INIT_STRUCT(IpcFramesOutLinkRTOS_CreateParams,ipcFramesOutVpssPrm);MULTICH_INIT_STRUCT(AlgLink_CreateParams, dspAlgPrm);MULTICH_INIT_STRUCT(SwMsLink_CreateParams,swMsPrm);MULTICH_INIT_STRUCT(SclrLink_CreateParams, sclrPrm[0]);	//xpli0710MULTICH_INIT_STRUCT(SclrLink_CreateParams, sclrPrm[1]);	//xpli0710MultiCh_detectBoard();System_linkControl(SYSTEM_LINK_ID_M3VPSS,SYSTEM_M3VPSS_CMD_RESET_VIDEO_DEVICES,NULL,0,TRUE);System_linkControl(SYSTEM_LINK_ID_M3VIDEO,SYSTEM_COMMON_CMD_SET_CH2IVAHD_MAP_TBL,&systemVid_encDecIvaChMapTbl,sizeof(SystemVideo_Ivahd2ChMap_Tbl),TRUE);/* Disable tiler allocator for this usecase* for that tiler memory can be reused for* non-tiled allocation*/SystemTiler_disableAllocator();enableTiler= FALSE;gVcapModuleContext.captureId= SYSTEM_LINK_ID_CAPTURE;
//gVcapModuleContext.deiId[0]= SYSTEM_LINK_ID_DEI_HQ_0;	xpligVcapModuleContext.nsfId[0]= SYSTEM_LINK_ID_NSF_0;gVcapModuleContext.ipcBitsInHLOSId = SYSTEM_HOST_LINK_ID_IPC_BITS_IN_0;selectId= SYSTEM_VPSS_LINK_ID_SELECT_0;//xpli0710gVcapModuleContext.sclrId[0]= SYSTEM_LINK_ID_SCLR_INST_0;gVcapModuleContext.sclrId[1]= SYSTEM_LINK_ID_SCLR_INST_1;gVdisModuleContext.swMsId[0]= SYSTEM_LINK_ID_SW_MS_MULTI_INST_0;gVdisModuleContext.displayId[0] = SYSTEM_LINK_ID_DISPLAY_0; // ON CHIP HDMI//gVdisModuleContext.displayId[1] = SYSTEM_LINK_ID_DISPLAY_2; // ON CHIP HDMImergeId[0]= SYSTEM_VPSS_LINK_ID_MERGE_0;mergeId[1]= SYSTEM_VPSS_LINK_ID_MERGE_1;mergeId[2]= SYSTEM_VPSS_LINK_ID_MERGE_2;gVencModuleContext.encId= SYSTEM_LINK_ID_VENC_0;gVencModuleContext.ipcBitsInHLOSId= SYSTEM_HOST_LINK_ID_IPC_BITS_IN_0;gVencModuleContext.ipcBitsOutRTOSId= SYSTEM_VIDEO_LINK_ID_IPC_BITS_OUT_0;gMultiCh_VcapVencVdisObj.dupId[0]= SYSTEM_VPSS_LINK_ID_DUP_0;gMultiCh_VcapVencVdisObj.dupId[1]= SYSTEM_VPSS_LINK_ID_DUP_1;	//xpli0123gMultiCh_VcapVencVdisObj.ipcOutVpssId= SYSTEM_VPSS_LINK_ID_IPC_OUT_M3_0;gMultiCh_VcapVencVdisObj.ipcInVideoId= SYSTEM_VIDEO_LINK_ID_IPC_IN_M3_0;gVcapModuleContext.ipcFramesOutVpssToHostId= SYSTEM_VPSS_LINK_ID_IPC_FRAMES_OUT_1;gVcapModuleContext.ipcFramesInHostId= SYSTEM_HOST_LINK_ID_IPC_FRAMES_IN_0;gVdisModuleContext.ipcFramesOutHostId= SYSTEM_HOST_LINK_ID_IPC_FRAMES_OUT_0;gVdisModuleContext.ipcFramesInVpssFromHostId = SYSTEM_VPSS_LINK_ID_IPC_FRAMES_IN_0;BoolenableOsdAlgLink = TRUE;
//xpli 0629if(enableOsdAlgLink){gVcapModuleContext.dspAlgId[0] = SYSTEM_LINK_ID_ALG_0;gVcapModuleContext.ipcFramesOutVpssId[0] = SYSTEM_VPSS_LINK_ID_IPC_FRAMES_OUT_0;gVcapModuleContext.ipcFramesInDspId[0] = SYSTEM_DSP_LINK_ID_IPC_FRAMES_IN_0;}CaptureLink_CreateParams_Init(&capturePrm);capturePrm.numVipInst= 4;	//xplicapturePrm.outQueParams[0].nextLink = mergeId[0];capturePrm.outQueParams[1].nextLink = mergeId[0];capturePrm.outQueParams[2].nextLink = mergeId[0];capturePrm.outQueParams[3].nextLink = mergeId[0];
//capturePrm.outQueParams[1].nextLink = gVcapModuleContext.deiId[0];capturePrm.tilerEnable= FALSE;capturePrm.maxBlindAreasPerCh= 4;vipInstId=0;{pCaptureInstPrm= &capturePrm.vipInst[vipInstId];pCaptureInstPrm->vipInstId= SYSTEM_CAPTURE_INST_VIP0_PORTA%SYSTEM_CAPTURE_INST_MAX;pCaptureInstPrm->videoDecoderId= 0;//not usedpCaptureInstPrm->inDataFormat= SYSTEM_DF_YUV422P;pCaptureInstPrm->standard= SYSTEM_STD_1080P_30;pCaptureInstPrm->numOutput= 1;pCaptureInstPrm->videoIfMode= SYSTEM_CAPT_VIDEO_IF_MODE_8BIT;pCaptureInstPrm->videoCaptureMode= SYSTEM_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_DISCRETE_SYNC_ACTVID_VSYNC;pCaptureInstPrm->inScanFormat= SYSTEM_SF_PROGRESSIVE;pCaptureInstPrm->useAdvancedParams = FALSE;pCaptureOutPrm= &pCaptureInstPrm->outParams[0];pCaptureOutPrm->dataFormat= SYSTEM_DF_YUV422I_YUYV;pCaptureOutPrm->scEnable= FALSE;pCaptureOutPrm->scOutWidth= 0;pCaptureOutPrm->scOutHeight= 0;pCaptureOutPrm->outQueId= 0;}vipInstId=1;{pCaptureInstPrm= &capturePrm.vipInst[vipInstId];pCaptureInstPrm->vipInstId= SYSTEM_CAPTURE_INST_VIP0_PORTB%SYSTEM_CAPTURE_INST_MAX;pCaptureInstPrm->videoDecoderId= 0;//not usedpCaptureInstPrm->inDataFormat= SYSTEM_DF_YUV422P;pCaptureInstPrm->standard= SYSTEM_STD_1080P_30;pCaptureInstPrm->numOutput= 1;pCaptureInstPrm->videoIfMode= SYSTEM_CAPT_VIDEO_IF_MODE_8BIT;pCaptureInstPrm->videoCaptureMode= SYSTEM_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_DISCRETE_SYNC_ACTVID_VSYNC;pCaptureInstPrm->inScanFormat= SYSTEM_SF_PROGRESSIVE;pCaptureInstPrm->useAdvancedParams = FALSE;pCaptureOutPrm= &pCaptureInstPrm->outParams[0];pCaptureOutPrm->dataFormat= SYSTEM_DF_YUV422I_YUYV;pCaptureOutPrm->scEnable= FALSE;pCaptureOutPrm->scOutWidth= 0;pCaptureOutPrm->scOutHeight= 0;pCaptureOutPrm->outQueId= 1;}vipInstId=2;{pCaptureInstPrm= &capturePrm.vipInst[vipInstId];pCaptureInstPrm->vipInstId= SYSTEM_CAPTURE_INST_VIP1_PORTA%SYSTEM_CAPTURE_INST_MAX;pCaptureInstPrm->videoDecoderId= 0;//not usedpCaptureInstPrm->inDataFormat= SYSTEM_DF_YUV422P;pCaptureInstPrm->standard= SYSTEM_STD_1080P_30;pCaptureInstPrm->numOutput= 1;pCaptureInstPrm->videoIfMode= SYSTEM_CAPT_VIDEO_IF_MODE_8BIT;pCaptureInstPrm->videoCaptureMode= SYSTEM_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_DISCRETE_SYNC_ACTVID_VSYNC;pCaptureInstPrm->inScanFormat= SYSTEM_SF_PROGRESSIVE;pCaptureInstPrm->useAdvancedParams = FALSE;pCaptureOutPrm= &pCaptureInstPrm->outParams[0];pCaptureOutPrm->dataFormat= SYSTEM_DF_YUV422I_YUYV;pCaptureOutPrm->scEnable= FALSE;pCaptureOutPrm->scOutWidth= 0;pCaptureOutPrm->scOutHeight= 0;pCaptureOutPrm->outQueId= 2;}vipInstId=3;{pCaptureInstPrm= &capturePrm.vipInst[vipInstId];pCaptureInstPrm->vipInstId= SYSTEM_CAPTURE_INST_VIP1_PORTB%SYSTEM_CAPTURE_INST_MAX;pCaptureInstPrm->videoDecoderId= 0;//not usedpCaptureInstPrm->inDataFormat= SYSTEM_DF_YUV422P;pCaptureInstPrm->standard= SYSTEM_STD_1080P_30;pCaptureInstPrm->numOutput= 1;pCaptureInstPrm->videoIfMode= SYSTEM_CAPT_VIDEO_IF_MODE_8BIT;pCaptureInstPrm->videoCaptureMode= SYSTEM_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_DISCRETE_SYNC_ACTVID_VSYNC;pCaptureInstPrm->inScanFormat= SYSTEM_SF_PROGRESSIVE;pCaptureInstPrm->useAdvancedParams = FALSE;pCaptureOutPrm= &pCaptureInstPrm->outParams[0];pCaptureOutPrm->dataFormat= SYSTEM_DF_YUV422I_YUYV;pCaptureOutPrm->scEnable= FALSE;pCaptureOutPrm->scOutWidth= 0;pCaptureOutPrm->scOutHeight= 0;pCaptureOutPrm->outQueId= 3;}/*
**dup1 link**dup 2 video ques
**pre link is cature link
**next link is merge link
**xpli 0123*/
#if 0dupPrm[1].inQueParams.prevLinkId= gVcapModuleContext.captureId;dupPrm[1].inQueParams.prevLinkQueId = 0;dupPrm[1].notifyNextLink= TRUE;dupPrm[1].numOutQue= 4;dupPrm[1].outQueParams[0].nextLink= mergeId;dupPrm[1].outQueParams[1].nextLink= mergeId;dupPrm[1].outQueParams[2].nextLink= mergeId;dupPrm[1].outQueParams[3].nextLink= mergeId;
#endif/*
**merge link**merge 4 video ques to 1 video ques
**pre link is dup1 link
**next link is swMs link
**xpli 0123*/
#if 1mergePrm[0].numInQue= 4;mergePrm[0].inQueParams[0].prevLinkId= gVcapModuleContext.captureId;mergePrm[0].inQueParams[0].prevLinkQueId = 0;mergePrm[0].inQueParams[1].prevLinkId= gVcapModuleContext.captureId;mergePrm[0].inQueParams[1].prevLinkQueId = 1;mergePrm[0].inQueParams[2].prevLinkId= gVcapModuleContext.captureId;mergePrm[0].inQueParams[2].prevLinkQueId = 2;mergePrm[0].inQueParams[3].prevLinkId= gVcapModuleContext.captureId;mergePrm[0].inQueParams[3].prevLinkQueId = 3;mergePrm[0].notifyNextLink= TRUE;mergePrm[0].outQueParams.nextLink= gMultiCh_VcapVencVdisObj.dupId[0];
#endif#if 1dupPrm[0].inQueParams.prevLinkId= mergeId[0];dupPrm[0].inQueParams.prevLinkQueId = 0;dupPrm[0].notifyNextLink= TRUE;dupPrm[0].numOutQue= 2;dupPrm[0].outQueParams[0].nextLink= selectId;dupPrm[0].outQueParams[1].nextLink= mergeId[1];//gVdisModuleContext.displayId[1];//
#endif//xpli0710
#if 1selectPrm.inQueParams.prevLinkId = gMultiCh_VcapVencVdisObj.dupId[0];selectPrm.inQueParams.prevLinkQueId = 0;selectPrm.numOutQue = 2;selectPrm.outQueParams[0].nextLink = gVcapModuleContext.sclrId[0];selectPrm.outQueParams[1].nextLink = gVcapModuleContext.sclrId[1];selectPrm.outQueChInfo[0].numOutCh = 2;selectPrm.outQueChInfo[0].outQueId = 0;selectPrm.outQueChInfo[0].inChNum[0] = 0;selectPrm.outQueChInfo[0].inChNum[1] = 3;selectPrm.outQueChInfo[1].numOutCh = 2;selectPrm.outQueChInfo[1].outQueId = 1;selectPrm.outQueChInfo[1].inChNum[0] = 1;selectPrm.outQueChInfo[1].inChNum[1] = 2;#endif//xpli0710#if 1sclrPrm[0].enableLineSkipSc = FALSE;sclrPrm[0].inputFrameRate= 25;sclrPrm[0].outputFrameRate= 25;sclrPrm[0].inQueParams.prevLinkId= selectId;sclrPrm[0].inQueParams.prevLinkQueId = 0;sclrPrm[0].outQueParams.nextLink= mergeId[2];sclrPrm[0].scaleMode = DEI_SCALE_MODE_RATIO;sclrPrm[0].outScaleFactor.ratio.heightRatio.numerator= 1;sclrPrm[0].outScaleFactor.ratio.heightRatio.denominator = 3;sclrPrm[0].outScaleFactor.ratio.widthRatio.numerator= 1;sclrPrm[0].outScaleFactor.ratio.widthRatio.denominator= 1;sclrPrm[0].tilerEnable = FALSE; // force tiler disable;sclrPrm[0].numBufsPerCh = 4;sclrPrm[0].pathId = SCLR_LINK_SC5;//SCLR_LINK_SEC0_SC3;//SCLR_LINK_SC5;
#endif//xpli0710#if 1sclrPrm[1].enableLineSkipSc = FALSE;sclrPrm[1].inputFrameRate= 25;sclrPrm[1].outputFrameRate= 25;sclrPrm[1].inQueParams.prevLinkId= selectId;sclrPrm[1].inQueParams.prevLinkQueId = 1;sclrPrm[1].outQueParams.nextLink= mergeId[2];sclrPrm[1].scaleMode = DEI_SCALE_MODE_RATIO;sclrPrm[1].outScaleFactor.ratio.heightRatio.numerator= 1;sclrPrm[1].outScaleFactor.ratio.heightRatio.denominator = 1;sclrPrm[1].outScaleFactor.ratio.widthRatio.numerator= 87;sclrPrm[1].outScaleFactor.ratio.widthRatio.denominator= 192;sclrPrm[1].tilerEnable = FALSE; // force tiler disable;sclrPrm[1].numBufsPerCh = 4;sclrPrm[1].pathId = SCLR_LINK_SC5;//SCLR_LINK_SEC0_SC3;
#endif#if 1mergePrm[2].numInQue= 2;mergePrm[2].inQueParams[0].prevLinkId= gVcapModuleContext.sclrId[0];mergePrm[2].inQueParams[0].prevLinkQueId = 0;mergePrm[2].inQueParams[1].prevLinkId= gVcapModuleContext.sclrId[1];mergePrm[2].inQueParams[1].prevLinkQueId = 0;mergePrm[2].notifyNextLink= TRUE;mergePrm[2].outQueParams.nextLink= gVdisModuleContext.swMsId[0];
#endif#if 1swMsPrm.swMsInstId[0]= SYSTEM_SW_MS_SC_INST_VIP0_SC;swMsPrm.numSwMsInst= 1;swMsPrm.swMsInstStartWin[0]= 0;swMsPrm.swMsInstStartWin[1]= 4;//---wp1412swMsPrm.enableProcessTieWithDisplay = TRUE;VDIS_DEV vdDevId = VDIS_DEV_HDMI;swMsPrm.inQueParams.prevLinkId= mergeId[2];swMsPrm.inQueParams.prevLinkQueId= 0;swMsPrm.numOutBuf= MULTICH_NUM_SWMS_MAX_BUFFERS;swMsPrm.maxInputQueLen= SYSTEM_SW_MS_INVALID_INPUT_QUE_LEN;vdDevId = VDIS_DEV_HDMI;swMsPrm.maxOutRes= VSYS_STD_1080P_60;swMsPrm.initOutRes= gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_HDMI].resolution;swMsPrm.outQueParams.nextLink= gMultiCh_VcapVencVdisObj.dupId[1];	//----wp1412/* low cost line skip mode of scaling can be used, when tiler is off */tilerEnable = FALSE;if(tilerEnable)swMsPrm.lineSkipMode= FALSE;elseswMsPrm.lineSkipMode= TRUE;swMsPrm.enableLayoutGridDraw = gVdisModuleContext.vdisConfig.enableLayoutGridDraw;MultiCh_swMsGetDefaultLayoutPrm(vdDevId, &swMsPrm, FALSE);/* both from 0-16 chnl */displayPrm[0].inQueParams[0].prevLinkId= gMultiCh_VcapVencVdisObj.dupId[1];displayPrm[0].inQueParams[0].prevLinkQueId = 0;displayPrm[0].displayRes= swMsPrm.initOutRes;mulich_vdec_vdis_set_avsync_prm(&gMultiCh_VcapVencVdisObj.avsyncCfg[0],0,vdDevId);dupPrm[1].inQueParams.prevLinkId= gVdisModuleContext.swMsId[0];dupPrm[1].inQueParams.prevLinkQueId= 0;dupPrm[1].numOutQue= 2;dupPrm[1].outQueParams[0].nextLink= gVdisModuleContext.displayId[0];dupPrm[1].outQueParams[1].nextLink= gVcapModuleContext.ipcFramesOutVpssId[0];//mergeId[1];dupPrm[1].notifyNextLink= TRUE;#endif//xpli 0629
/* Redirect to DSP for OSD / SCD */ipcFramesOutVpssPrm.baseCreateParams.inQueParams.prevLinkId= gMultiCh_VcapVencVdisObj.dupId[1];ipcFramesOutVpssPrm.baseCreateParams.inQueParams.prevLinkQueId = 1;//0 xpliipcFramesOutVpssPrm.baseCreateParams.outQueParams[0].nextLink= mergeId[1];//ipcOutVpssId;*****xpliipcFramesOutVpssPrm.baseCreateParams.processLink= gVcapModuleContext.ipcFramesInDspId[0];ipcFramesOutVpssPrm.baseCreateParams.notifyPrevLink= TRUE;ipcFramesOutVpssPrm.baseCreateParams.notifyNextLink= TRUE;ipcFramesOutVpssPrm.baseCreateParams.notifyProcessLink= TRUE;ipcFramesOutVpssPrm.baseCreateParams.noNotifyMode= FALSE;ipcFramesOutVpssPrm.baseCreateParams.numOutQue= 1;ipcFramesInDspPrm.baseCreateParams.inQueParams.prevLinkId= gVcapModuleContext.ipcFramesOutVpssId[0];ipcFramesInDspPrm.baseCreateParams.inQueParams.prevLinkQueId= 0;ipcFramesInDspPrm.baseCreateParams.outQueParams[0].nextLink= gVcapModuleContext.dspAlgId[0];ipcFramesInDspPrm.baseCreateParams.notifyPrevLink= TRUE;ipcFramesInDspPrm.baseCreateParams.notifyNextLink= TRUE;ipcFramesInDspPrm.baseCreateParams.noNotifyMode= FALSE;ipcFramesInDspPrm.baseCreateParams.numOutQue= 1;dspAlgPrm.enableOSDAlg = TRUE;//xplidspAlgPrm.enableSCDAlg = FALSE;dspAlgPrm.inQueParams.prevLinkId = gVcapModuleContext.ipcFramesInDspId[0];dspAlgPrm.inQueParams.prevLinkQueId = 0;UInt32 chId;if(enableOsdAlgLink){for(chId = 0; chId < ALG_LINK_OSD_MAX_CH; chId++){AlgLink_OsdChWinParams * chWinPrm = &dspAlgPrm.osdChCreateParams[chId].chDefaultParams;/* set osd window max width and height */dspAlgPrm.osdChCreateParams[chId].maxWidth= EXAMPLE_OSD_WIN_MAX_WIDTH;dspAlgPrm.osdChCreateParams[chId].maxHeight = EXAMPLE_OSD_WIN_MAX_HEIGHT;chWinPrm->chId = chId;chWinPrm->numWindows = 1;//??xpli0629}}#if 1mergePrm[1].numInQue= 2;mergePrm[1].inQueParams[0].prevLinkId= gMultiCh_VcapVencVdisObj.dupId[0];mergePrm[1].inQueParams[0].prevLinkQueId = 1;mergePrm[1].inQueParams[1].prevLinkId= gVcapModuleContext.ipcFramesOutVpssId[0];mergePrm[1].inQueParams[1].prevLinkQueId = 0;//1;???mergePrm[1].notifyNextLink= TRUE;mergePrm[1].outQueParams.nextLink= gVcapModuleContext.nsfId[0];
#endifNsfLink_CreateParams_Init(&nsfPrm);nsfPrm.bypassNsf = TRUE;nsfPrm.inputFrameRate= 30;nsfPrm.outputFrameRate = 30;nsfPrm.tilerEnable= FALSE;nsfPrm.inQueParams.prevLinkId= mergeId[1];nsfPrm.inQueParams.prevLinkQueId = 0;nsfPrm.numOutQue = 1;nsfPrm.outQueParams[0].nextLink= gMultiCh_VcapVencVdisObj.ipcOutVpssId;nsfPrm.numBufsPerCh = 6;ipcOutVpssPrm.inQueParams.prevLinkId = gVcapModuleContext.nsfId[0];ipcOutVpssPrm.inQueParams.prevLinkQueId = 0;ipcOutVpssPrm.numOutQue= 1;ipcOutVpssPrm.outQueParams[0].nextLink= gMultiCh_VcapVencVdisObj.ipcInVideoId;ipcOutVpssPrm.notifyNextLink= FALSE;ipcOutVpssPrm.notifyPrevLink= TRUE;ipcOutVpssPrm.noNotifyMode= TRUE;ipcInVideoPrm.inQueParams.prevLinkId= gMultiCh_VcapVencVdisObj.ipcOutVpssId;ipcInVideoPrm.inQueParams.prevLinkQueId = 0;ipcInVideoPrm.numOutQue= 1;ipcInVideoPrm.outQueParams[0].nextLink= gVencModuleContext.encId;ipcInVideoPrm.notifyNextLink= TRUE;ipcInVideoPrm.notifyPrevLink= FALSE;ipcInVideoPrm.noNotifyMode= TRUE;ipcBitsOutVideoPrm.baseCreateParams.inQueParams.prevLinkId= gVencModuleContext.encId;ipcBitsOutVideoPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;ipcBitsOutVideoPrm.baseCreateParams.numOutQue= 1;ipcBitsOutVideoPrm.baseCreateParams.outQueParams[0].nextLink= gVencModuleContext.ipcBitsInHLOSId;MultiCh_ipcBitsInitCreateParams_BitsOutRTOS(&ipcBitsOutVideoPrm, TRUE);ipcBitsInHostPrm[0].baseCreateParams.inQueParams.prevLinkId= gVencModuleContext.ipcBitsOutRTOSId;ipcBitsInHostPrm[0].baseCreateParams.inQueParams.prevLinkQueId = 0;ipcBitsInHostPrm[0].baseCreateParams.numOutQue= 1;ipcBitsInHostPrm[0].baseCreateParams.outQueParams[0].nextLink= SYSTEM_LINK_ID_INVALID;MultiCh_ipcBitsInitCreateParams_BitsInHLOS(&ipcBitsInHostPrm[0]);encPrm.numBufPerCh[0] = 7; //D1encPrm.numBufPerCh[1] = 7; //CIF{EncLink_ChCreateParams *pLinkChPrm;EncLink_ChDynamicParams *pLinkDynPrm;VENC_CHN_DYNAMIC_PARAM_S *pDynPrm;VENC_CHN_PARAMS_S *pChPrm;/* Primary Stream Params - D1 */for (i=0; i<gVencModuleContext.vencConfig.numPrimaryChn; i++){pLinkChPrm= &encPrm.chCreateParams[i];pLinkDynPrm = &pLinkChPrm->defaultDynamicParams;pChPrm= &gVencModuleContext.vencConfig.encChannelParams[i];pDynPrm= &pChPrm->dynamicParam;pLinkChPrm->format= IVIDEO_H264HP;pLinkChPrm->profile= gVencModuleContext.vencConfig.h264Profile[i];pLinkChPrm->dataLayout= VCODEC_FIELD_SEPARATED;pLinkChPrm->fieldMergeEncodeEnable= FALSE;pLinkChPrm->enableAnalyticinfo= pChPrm->enableAnalyticinfo;pLinkChPrm->enableWaterMarking= pChPrm->enableWaterMarking;pLinkChPrm->maxBitRate= pChPrm->maxBitRate;pLinkChPrm->encodingPreset= pChPrm->encodingPreset;pLinkChPrm->rateControlPreset= pChPrm->rcType;pLinkChPrm->enableSVCExtensionFlag= pChPrm->enableSVCExtensionFlag;pLinkChPrm->numTemporalLayer= pChPrm->numTemporalLayer;pLinkDynPrm->intraFrameInterval= pDynPrm->intraFrameInterval;pLinkDynPrm->targetBitRate= pDynPrm->targetBitRate;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;}if (gVsysModuleContext.vsysConfig.enableSecondaryOut == TRUE){/* Secondary Out <CIF> Params */for (i=gVencModuleContext.vencConfig.numPrimaryChn, j=VENC_PRIMARY_CHANNELS;i<(gVencModuleContext.vencConfig.numPrimaryChn+ gVencModuleContext.vencConfig.numSecondaryChn);i++, j++){pLinkChPrm= &encPrm.chCreateParams[i];pLinkDynPrm = &pLinkChPrm->defaultDynamicParams;pChPrm= &gVencModuleContext.vencConfig.encChannelParams[j];pDynPrm= &pChPrm->dynamicParam;pLinkChPrm->format= IVIDEO_H264HP;pLinkChPrm->profile= gVencModuleContext.vencConfig.h264Profile[i];pLinkChPrm->dataLayout= VCODEC_FIELD_SEPARATED;pLinkChPrm->fieldMergeEncodeEnable= FALSE;pLinkChPrm->enableAnalyticinfo= pChPrm->enableAnalyticinfo;pLinkChPrm->enableWaterMarking= pChPrm->enableWaterMarking;pLinkChPrm->maxBitRate= pChPrm->maxBitRate;pLinkChPrm->encodingPreset= pChPrm->encodingPreset;pLinkChPrm->rateControlPreset= pChPrm->rcType;pLinkChPrm->enableSVCExtensionFlag= pChPrm->enableSVCExtensionFlag;pLinkChPrm->numTemporalLayer= pChPrm->numTemporalLayer;pLinkDynPrm->intraFrameInterval= pDynPrm->intraFrameInterval;pLinkDynPrm->targetBitRate= pDynPrm->targetBitRate;pLinkDynPrm->interFrameInterval= 1;pLinkDynPrm->mvAccuracy= IVIDENC2_MOTIONVECTOR_QUARTERPEL;pLinkDynPrm->inputFrameRate= pDynPrm->inputFrameRate;pLinkDynPrm->qpMin= pDynPrm->qpMin;pLinkDynPrm->qpMax= pDynPrm->qpMax;pLinkDynPrm->qpInit= pDynPrm->qpInit;pLinkDynPrm->vbrDuration= pDynPrm->vbrDuration;pLinkDynPrm->vbrSensitivity= pDynPrm->vbrSensitivity;pLinkChPrm->overrideInputScanFormat = TRUE;pLinkChPrm->fieldPicEncode= FALSE;}}/* MJPEGParams */if (gVsysModuleContext.vsysConfig.enableMjpegEnc == TRUE){for (i=gVencModuleContext.vencConfig.numPrimaryChn + gVencModuleContext.vencConfig.numSecondaryChn;i<(VENC_CHN_MAX); i++){pLinkChPrm= &encPrm.chCreateParams[i];pLinkDynPrm = &pLinkChPrm->defaultDynamicParams;pChPrm= &gVencModuleContext.vencConfig.encChannelParams[i];pDynPrm= &pChPrm->dynamicParam;pLinkChPrm->format= IVIDEO_MJPEG;pLinkChPrm->profile= 0;pLinkChPrm->dataLayout= VCODEC_FIELD_SEPARATED;pLinkChPrm->fieldMergeEncodeEnable = FALSE;pLinkChPrm->enableAnalyticinfo= 0;pLinkChPrm->enableWaterMarking= 0;pLinkChPrm->maxBitRate= 0;pLinkChPrm->encodingPreset= 0;pLinkChPrm->rateControlPreset= 0;pLinkChPrm->enableSVCExtensionFlag = 0;pLinkChPrm->numTemporalLayer= 0;pLinkDynPrm->intraFrameInterval= 0;pLinkDynPrm->targetBitRate= 100*1000;pLinkDynPrm->interFrameInterval= 0;pLinkDynPrm->mvAccuracy= 0;pLinkDynPrm->inputFrameRate= 1;//pDynPrm->inputFrameRate;pLinkDynPrm->qpMin= 0;pLinkDynPrm->qpMax= 0;pLinkDynPrm->qpInit= -1;pLinkDynPrm->vbrDuration= 0;pLinkDynPrm->vbrSensitivity= 0;}}encPrm.inQueParams.prevLinkId= gMultiCh_VcapVencVdisObj.ipcInVideoId;encPrm.inQueParams.prevLinkQueId= 0;encPrm.outQueParams.nextLink= gVencModuleContext.ipcBitsOutRTOSId;}capturePrm.isPalMode = Vcap_isPalMode();System_linkCreate(gVcapModuleContext.captureId, &capturePrm, sizeof(capturePrm));System_linkCreate(mergeId[0], &mergePrm[0],sizeof(mergePrm[0]));System_linkCreate(gMultiCh_VcapVencVdisObj.dupId[0], &dupPrm[0], sizeof(dupPrm[0]));System_linkCreate(selectId, &selectPrm, sizeof(selectPrm));//xpli0710System_linkCreate(gVcapModuleContext.sclrId[0], &sclrPrm[0], sizeof(sclrPrm[0]));//xpli0710System_linkCreate(gVcapModuleContext.sclrId[1], &sclrPrm[1],sizeof(sclrPrm[1]));//xpli0710System_linkCreate(mergeId[2], &mergePrm[2], sizeof(mergePrm[2]));//xpli0710System_linkCreate(gVdisModuleContext.swMsId[0], &swMsPrm, sizeof(swMsPrm));
System_linkCreate(gMultiCh_VcapVencVdisObj.dupId[1], &dupPrm[1], sizeof(dupPrm[1]));
System_linkCreate(gVdisModuleContext.displayId[0], &displayPrm[0], sizeof(displayPrm[0]));
#if 1if(enableOsdAlgLink){System_linkCreate(gVcapModuleContext.ipcFramesOutVpssId[0], &ipcFramesOutVpssPrm, sizeof(ipcFramesOutVpssPrm));System_linkCreate(gVcapModuleContext.ipcFramesInDspId[0], &ipcFramesInDspPrm, sizeof(ipcFramesInDspPrm));System_linkCreate(gVcapModuleContext.dspAlgId[0], &dspAlgPrm, sizeof(dspAlgPrm));}
#endifSystem_linkCreate(mergeId[1], &mergePrm[1], sizeof(mergePrm[1]));System_linkCreate(gVcapModuleContext.nsfId[0], &nsfPrm, sizeof(nsfPrm));System_linkCreate(gMultiCh_VcapVencVdisObj.ipcOutVpssId , &ipcOutVpssPrm , sizeof(ipcOutVpssPrm) );System_linkCreate(gMultiCh_VcapVencVdisObj.ipcInVideoId , &ipcInVideoPrm , sizeof(ipcInVideoPrm) );System_linkCreate(gVencModuleContext.encId, &encPrm, sizeof(encPrm));System_linkCreate(gVencModuleContext.ipcBitsOutRTOSId, &ipcBitsOutVideoPrm, sizeof(ipcBitsOutVideoPrm));System_linkCreate(gVencModuleContext.ipcBitsInHLOSId, &ipcBitsInHostPrm[0], sizeof(ipcBitsInHostPrm[0]));MultiCh_setDec2DispMap(VDIS_DEV_HDMI,gVcapModuleContext.vcapConfig.numChn,0,0);MultiCh_memPrintHeapStatus();System_linkStart(gVdisModuleContext.displayId[0]);	//xpliSystem_linkStart(gVencModuleContext.ipcBitsInHLOSId);System_linkStart(gVencModuleContext.ipcBitsOutRTOSId);System_linkStart(gVencModuleContext.encId);System_linkStart(gMultiCh_VcapVencVdisObj.ipcInVideoId);System_linkStart(gMultiCh_VcapVencVdisObj.ipcOutVpssId);System_linkStart(gVcapModuleContext.nsfId[0]);System_linkStart(mergeId[1]);
System_linkStart(gMultiCh_VcapVencVdisObj.dupId[1]);	//xpli
System_linkStart(gVdisModuleContext.swMsId[0]);	//xpliSystem_linkStart(gMultiCh_VcapVencVdisObj.dupId[0]);	//xpliSystem_linkStart(mergeId[0]);System_linkStart(gVcapModuleContext.captureId);
}

Eason Wang:

可以把你的usecase图发出来吗

Ternence_Hsu:

回复 xinpeng li:

你好, 你配置基本是这样的,

sclrPrm[0].pathId = SCLR_LINK_SC5;//SCLR_LINK_SEC0_SC3;//SCLR_LINK_SC5;
sclrPrm[1].pathId = SCLR_LINK_SC5;//SCLR_LINK_SEC0_SC3;
swMsPrm.swMsInstId[0] = SYSTEM_SW_MS_SC_INST_VIP0_SC;

你这样配置sc模块和使用1个sc模块的效果是一样的,但是你的总体性能只达到了32帧(1080P),理论应当是60帧(1080)是没有问题的; 你的m3vpss的主频配置是多少 ?

xinpeng li:

回复 Ternence_Hsu:

感谢你的回复,Ternence Hsu

       文档中提到each SC can safely do – about 170MP/s processing (in TI816x)。

       我的应用情况时4ch 1080p的scalar处理,也就是SC5要处理1920*1080*4*25=207MP/s,超过了SC5的处理能力。那么可以指定不同的SC模块进行处理吗?如何在代码中指定SC的硬件处理单元?是sclrPrm.pathId吗? 还是通过其它途径?

       另外文档中提到的DDR BW是机制?

 

祝好!

xinpeng li:

回复 Ternence_Hsu:

Hi,Ternence Hsu

      为什么这样设置效果是一样的?那具体应该怎样设置才能配置不同的SC模块,另外我的swms并不用SC功能。M3 VPSS主频250MHz。

 

祝好!

xinpeng li:

回复 Eason Wang:

已贴!

Ternence_Hsu:

回复 xinpeng li:

xinpeng li

       我的应用情况时4ch 1080p的scalar处理,也就是SC5要处理1920*1080*4*25=207MP/s,超过了SC5的处理能力。那么可以指定不同的SC模块进行处理吗?

可以指定不同的sc模块进行出来,你这个2个sc link 可以指定不同的 path id 处理;出现错误,是你配置的结构在hdvpss中有互斥的逻辑,或者数据格式有问题;

你可以借助swms或者dei 实现scale 的功能;可以指定到 sc1(dei内部)、sc2(deih内部)、sc4(vip1内)模块上面,

xinpeng li

        如何在代码中指定SC的硬件处理单元?是sclrPrm.pathId吗? 还是通过其它途径?

      对, 在scale link 中是这样的,dei 或者 swms 都可以的,具体参考代码就可以

Ternence_Hsu:

回复 xinpeng li:

xinpeng li

      为什么这样设置效果是一样的?那具体应该怎样设置才能配置不同的SC模块,另外我的swms并不用SC功能。M3 VPSS主频250MHz。

     swms 模块是可以实现scale的效果的,你也可以使用dei模块,在内部都可以实现scale 的效果,

     M3 VPSS主频 250M ,这样没有问题,正常,(如果过低会影响hdvpss中模块的性能)

赞(0)
未经允许不得转载:TI中文支持网 » 8168 scalar link处理帧率低?求助!
分享到: 更多 (0)