我用的软件版本是IPNC RDK 3.0。关于其中的CaptureDisplay这个usecase有些疑问。部分代码如下:
Void MultiCh_createVcapVdis()
{
CaptureLink_CreateParams capturePrm;
NsfLink_CreateParams nsfPrm;
DeiLink_CreateParams deiPrm[2];
NullSrcLink_CreateParams nullSrcPrm;
MergeLink_CreateParams mergePrm;
DupLink_CreateParams dupPrm;
static SwMsLink_CreateParams swMsPrm[VDIS_DEV_MAX];
DisplayLink_CreateParams displayPrm[VDIS_DEV_MAX];
CaptureLink_VipInstParams *pCaptureInstPrm;
CaptureLink_OutParams *pCaptureOutPrm;
VCAP_VIDDEC_PARAMS_S vidDecVideoModeArgs[NUM_CAPTURE_DEVICES];
UInt32 grpxId[VDIS_DEV_MAX];
UInt32 nullId;
UInt32 mergeId, dupId;
UInt32 deiOutQue;
UInt32 vipInstId;
UInt32 i;
UInt32 numSubChains;
Bool enableSdtv;
for (i = 0; i < VDIS_DEV_MAX; i++)
{
MULTICH_INIT_STRUCT(DisplayLink_CreateParams,displayPrm[i]);
MULTICH_INIT_STRUCT(SwMsLink_CreateParams ,swMsPrm[i]);
}
System_init();
MultiCh_detectBoard();
System_linkControl(
SYSTEM_LINK_ID_M3VPSS,
SYSTEM_M3VPSS_CMD_RESET_VIDEO_DEVICES,
NULL,
0,
TRUE
);
gVcapModuleContext.captureId = SYSTEM_LINK_ID_CAPTURE;
gVcapModuleContext.nsfId[0] = SYSTEM_LINK_ID_NSF_0;
gVcapModuleContext.deiId[0] = SYSTEM_LINK_ID_DEI_HQ_0;
gVcapModuleContext.deiId[1] = SYSTEM_LINK_ID_DEI_0;
gVcapModuleContext.nullSrcId = SYSTEM_VPSS_LINK_ID_NULL_SRC_0;
mergeId = SYSTEM_VPSS_LINK_ID_MERGE_0;
dupId = SYSTEM_VPSS_LINK_ID_DUP_0;
gVdisModuleContext.swMsId[0] = SYSTEM_LINK_ID_SW_MS_MULTI_INST_0;
gVdisModuleContext.swMsId[1] = SYSTEM_LINK_ID_SW_MS_MULTI_INST_1;
swMsPrm[0].numSwMsInst = 1;
swMsPrm[1].numSwMsInst = 1;
swMsPrm[0].swMsInstId[0] = SYSTEM_SW_MS_SC_INST_SC5;
swMsPrm[1].swMsInstId[0] = SYSTEM_SW_MS_SC_INST_SC5;
gVdisModuleContext.displayId[0] = SYSTEM_LINK_ID_DISPLAY_0; // ON CHIP HDMI
gVdisModuleContext.displayId[1] = SYSTEM_LINK_ID_DISPLAY_1; // OFF CHIP HDMI
gVdisModuleContext.displayId[2] = SYSTEM_LINK_ID_DISPLAY_2; // OFF CHIP HDMI
grpxId[0] = SYSTEM_LINK_ID_GRPX_0;
grpxId[1] = SYSTEM_LINK_ID_GRPX_1;
#if 0 /* Enabling graphics only for ON CHIP HDMI an OFF CHIP HDMI*/
grpxId[2] = SYSTEM_LINK_ID_GRPX_2;
#endif
nullId = SYSTEM_VPSS_LINK_ID_NULL_0;
numSubChains = 2;
deiOutQue = DEI_LINK_OUT_QUE_VIP_SC;
enableSdtv = FALSE;
CaptureLink_CreateParams_Init(&capturePrm);
capturePrm.numVipInst = 2 * numSubChains;
capturePrm.outQueParams[0].nextLink = gVcapModuleContext.nsfId[0];
capturePrm.tilerEnable = FALSE;
capturePrm.enableSdCrop = FALSE;
for(vipInstId=0; vipInstId<capturePrm.numVipInst; vipInstId++)
{
pCaptureInstPrm = &capturePrm.vipInst[vipInstId];
pCaptureInstPrm->vipInstId = (SYSTEM_CAPTURE_INST_VIP0_PORTA+vipInstId)%SYSTEM_CAPTURE_INST_MAX;
pCaptureInstPrm->videoDecoderId = SYSTEM_DEVICE_VID_DEC_TVP5158_DRV;
pCaptureInstPrm->inDataFormat = SYSTEM_DF_YUV422P;
pCaptureInstPrm->standard = SYSTEM_STD_MUX_4CH_D1;
pCaptureInstPrm->numOutput = 1;
pCaptureOutPrm = &pCaptureInstPrm->outParams[0];
pCaptureOutPrm->dataFormat = SYSTEM_DF_YUV422I_YUYV;
pCaptureOutPrm->scEnable = FALSE;
pCaptureOutPrm->scOutWidth = 0;
pCaptureOutPrm->scOutHeight = 0;
pCaptureOutPrm->outQueId = 0;
}
for(i = 0; i < NUM_CAPTURE_DEVICES; i++)
{
vidDecVideoModeArgs[i].videoIfMode = DEVICE_CAPT_VIDEO_IF_MODE_8BIT;
vidDecVideoModeArgs[i].videoDataFormat = SYSTEM_DF_YUV422P;
vidDecVideoModeArgs[i].standard = SYSTEM_STD_MUX_4CH_D1;
vidDecVideoModeArgs[i].videoCaptureMode =
DEVICE_CAPT_VIDEO_CAPTURE_MODE_MULTI_CH_PIXEL_MUX_EMBEDDED_SYNC;
vidDecVideoModeArgs[i].videoSystem =
DEVICE_VIDEO_DECODER_VIDEO_SYSTEM_AUTO_DETECT;
vidDecVideoModeArgs[i].videoCropEnable = FALSE;
vidDecVideoModeArgs[i].videoAutoDetectTimeout = -1;
}
Vcap_configVideoDecoder(vidDecVideoModeArgs, NUM_CAPTURE_DEVICES);
……
}
1、我的理解是IPNC 8127中应该不需要TVP7002这些解码芯片了吧,如果是这样,那代码中相关的解码器配置有什么作用呢?
2、对于capture link有如下配置:
capturePrm.numVipInst = 2 * numSubChains; // =4
这是不是说明配置了4个vip?
另外,
pCaptureInstPrm->standard = SYSTEM_STD_MUX_4CH_D1;
这是不是说明每一个vip都可以接入4路D1?如果是这样,那摄像机镜头采集得到的数据是接入到哪里的?