This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DM8148 DEI link 与 CaptureLink 数据交互的疑问

Other Parts Discussed in Thread: TVP5158, TVP7002

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