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