DM8148分别对7002和5158模块同时进行视频采集,CaptureLink中有2个instance,一个用于7002,另一个用于5158,CaptureLink的下一个link就是DEI link,由于5158采集的PAL视频需要经过去隔行处理,因此CaptureLink下一个link必须是DEI link,但是由于CaptureLink中又包含了VGA的视频数据,这个是不需要去隔行处理的,然而在DEI link的参数中没有找到可以针对某个输入的CaptureLink进行使能去隔行或失能去隔行的开关变量,也就是说,CaptureLink传入DEI link的视频数据,要么全部被去隔行处理,要么被旁路处理,这就导致5158和7002采集到的视频无法同时处理,有什么好的解决方法吗?
一下为源代码:
#define CAP_DEV_TVP5158
#define CAP_DEV_ADV7611_GV7601_TVP7002_16BIT
CaptureLink_CreateParams capPrm;
DeiLink_CreateParams deiPrm;
IpcLink_CreateParams ipcOutVpssPrm;
IpcLink_CreateParams ipcInVideoPrm;
EncLink_CreateParams encPrm;
IpcBitsOutLinkRTOS_CreateParams ipcBitsOutVideoPrm;
IpcBitsInLinkHLOS_CreateParams ipcBitsInHostPrm;
DisplayLink_CreateParams disPrm;
SwMsLink_CreateParams swmsPrm;
MULTICH_INIT_STRUCT(IpcLink_CreateParams,ipcOutVpssPrm);
MULTICH_INIT_STRUCT(IpcLink_CreateParams,ipcInVideoPrm);
MULTICH_INIT_STRUCT(IpcBitsOutLinkRTOS_CreateParams,ipcBitsOutVideoPrm);
MULTICH_INIT_STRUCT(IpcBitsInLinkHLOS_CreateParams,ipcBitsInHostPrm);
MULTICH_INIT_STRUCT(EncLink_CreateParams, encPrm);
MULTICH_INIT_STRUCT(DeiLink_CreateParams, deiPrm);
MULTICH_INIT_STRUCT(DisplayLink_CreateParams, disPrm);
MULTICH_INIT_STRUCT(SwMsLink_CreateParams ,swmsPrm);
/* links in chain */
gVcapModuleContext.captureId = SYSTEM_LINK_ID_CAPTURE;
gVcapModuleContext.deiId[0] = SYSTEM_LINK_ID_DEI_0;
gVencModuleContext.encId = SYSTEM_LINK_ID_VENC_0;
gVdisModuleContext.swMsId[0] = SYSTEM_LINK_ID_SW_MS_MULTI_INST_0;
gVdisModuleContext.displayId[0] = SYSTEM_LINK_ID_DISPLAY_0; /* ON AND OFF CHIP HDMI */
gVencModuleContext.ipcBitsOutRTOSId = SYSTEM_VIDEO_LINK_ID_IPC_BITS_OUT_0;
gVencModuleContext.ipcBitsInHLOSId = SYSTEM_HOST_LINK_ID_IPC_BITS_IN_0;
UInt32 ipcOutVpssId = SYSTEM_VPSS_LINK_ID_IPC_OUT_M3_0;
UInt32 ipcInVideoId = SYSTEM_VIDEO_LINK_ID_IPC_IN_M3_0;
UInt32 mergeId = SYSTEM_VPSS_LINK_ID_MERGE_1;
/* capture link init */
CaptureLink_CreateParams_Init(&capPrm);
capPrm.outQueParams[0].nextLink = gVcapModuleContext.deiId[0];
capPrm.numVipInst = 1;
capPrm.tilerEnable = FALSE;
capPrm.numBufsPerCh = 8;
capPrm.maxBlindAreasPerCh = 4;
capPrm.isPalMode = Vcap_isPalMode();
#if ! defined CAP_DEV_TVP5158
capPrm.doCropInCapture = FALSE;
capPrm.enableSdCrop = FALSE;
#endif
/* capture instance init */
CaptureLink_VipInstParams *prm_cap_inst = &capPrm.vipInst[0];
prm_cap_inst->vipInstId = (SYSTEM_CAPTURE_INST_VIP0_PORTA + 0 ) % SYSTEM_CAPTURE_INST_MAX;
prm_cap_inst->inDataFormat = SYSTEM_DF_YUV422P;
prm_cap_inst->numOutput = 1;
#if defined CAP_DEV_TVP5158
prm_cap_inst->videoDecoderId = SYSTEM_DEVICE_VID_DEC_TVP5158_DRV;
prm_cap_inst->standard = SYSTEM_STD_MUX_4CH_D1; // set input mode as 4 input with D1 resolution
#endif
#if defined CAP_DEV_ADV7611_GV7601_TVP7002_16BIT
prm_cap_inst->standard = SYSTEM_STD_1080P_60;
prm_cap_inst->videoIfMode = DEVICE_CAPT_VIDEO_IF_MODE_16BIT;
prm_cap_inst->videoCaptureMode = DEVICE_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_EMBEDDED_SYNC;
#endif
#if defined CAP_DEV_ADV7611_8BIT
prm_cap_inst->useAdvancedParams = TRUE;
prm_cap_inst->advancedParams.pixClkEdgePol = SYSTEM_VIP_PIX_CLK_EDGE_POL_FALLING;
prm_cap_inst->standard = SYSTEM_STD_1080P_30;
prm_cap_inst->videoIfMode = DEVICE_CAPT_VIDEO_IF_MODE_8BIT;
prm_cap_inst->videoCaptureMode = DEVICE_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_EMBEDDED_SYNC;
#endif
#if defined CAP_DEV_GV7601_8BIT
prm_cap_inst->standard = SYSTEM_STD_1080P_30;
prm_cap_inst->videoIfMode = DEVICE_CAPT_VIDEO_IF_MODE_8BIT;
prm_cap_inst->videoCaptureMode = SYSTEM_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_DISCRETE_SYNC_HSYNC_VSYNC;
#endif
/* capture out init */
CaptureLink_OutParams *prm_cap_out = &prm_cap_inst->outParams[0];
prm_cap_out->scEnable = FALSE;
prm_cap_out->scOutWidth = 0;
prm_cap_out->scOutHeight = 0;
prm_cap_out->outQueId = 0;
prm_cap_out->dataFormat = SYSTEM_DF_YUV422I_YUYV;
/* DEI link */
deiPrm.inQueParams.prevLinkId = gVcapModuleContext.captureId;
deiPrm.inQueParams.prevLinkQueId = 0;
deiPrm.enableOut[DEI_LINK_OUT_QUE_DEI_SC] = TRUE;
deiPrm.enableOut[DEI_LINK_OUT_QUE_VIP_SC] = TRUE;
deiPrm.enableOut[DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT] = FALSE;
deiPrm.outQueParams[DEI_LINK_OUT_QUE_DEI_SC].nextLink = gVdisModuleContext.swMsId[0];
deiPrm.outQueParams[DEI_LINK_OUT_QUE_VIP_SC].nextLink = mergeId;
deiPrm.tilerEnable[DEI_LINK_OUT_QUE_VIP_SC] = FALSE;
deiPrm.comprEnable = FALSE;
deiPrm.setVipScYuv422Format = FALSE;
#if ! defined CAP_DEV_TVP5158
deiPrm.enableDeiForceBypass = TRUE;
#endif