现在创建A8端进行算法处理的链路:
cap -> dup0 -> merge -> vpssout -> hostin -> hostout ->vpssin -> dis
hostin实现一个算法的回调函数,现在发现这个链路通不了。
CaptureLink_CreateParams capPrms;
DupLink_CreateParams dupPrm;
MergeLink_CreateParams mergePrm;
IpcFramesOutLinkRTOS_CreateParams ipcOutVpssPrm;
IpcFramesInLinkHLOS_CreateParams hostInPrm;
IpcFramesOutLinkHLOS_CreateParams hostOutPrm;
IpcFramesInLinkRTOS_CreateParams ipcInVpssPrm;
AppLink_CreateParams appPrms;
SwMsLink_CreateParams swmsPrms;
DisplayLink_CreateParams disPrms;
DisplayLink_CreateParams disPrms1;
IpcFramesOutLinkRTOS_CreateParams ipcFramesOutVpssToDSPPrms;
IpcFramesInLinkRTOS_CreateParams ipcFramesInDspPrms;
MULTICH_INIT_STRUCT(IpcFramesOutLinkRTOS_CreateParams,ipcOutVpssPrm);
MULTICH_INIT_STRUCT(IpcFramesInLinkHLOS_CreateParams, hostInPrm);
MULTICH_INIT_STRUCT(IpcFramesOutLinkHLOS_CreateParams,hostOutPrm);
MULTICH_INIT_STRUCT(IpcFramesInLinkRTOS_CreateParams,ipcInVpssPrm);
MULTICH_INIT_STRUCT(IpcFramesInLinkRTOS_CreateParams,ipcFramesInDspPrms);
MULTICH_INIT_STRUCT(IpcFramesOutLinkRTOS_CreateParams,ipcFramesOutVpssToDSPPrms);
MULTICH_INIT_STRUCT(SwMsLink_CreateParams ,swmsPrms);
MULTICH_INIT_STRUCT(DisplayLink_CreateParams, disPrms);
MULTICH_INIT_STRUCT(DisplayLink_CreateParams, disPrms1);
gVcapModuleContext.captureId = SYSTEM_LINK_ID_CAPTURE;
gVdisModuleContext.swMsId[0] = SYSTEM_LINK_ID_SW_MS_MULTI_INST_0;
gVdisModuleContext.displayId[0] = SYSTEM_LINK_ID_DISPLAY_0;
gVdisModuleContext.displayId[1] = SYSTEM_LINK_ID_DISPLAY_1;
gVcapModuleContext.ipcFramesOutVpssId[1] = SYSTEM_VPSS_LINK_ID_IPC_FRAMES_OUT_1;
gVcapModuleContext.ipcFramesInHostId = SYSTEM_HOST_LINK_ID_IPC_FRAMES_IN_1;
gVdisModuleContext.ipcFramesOutHostId =SYSTEM_HOST_LINK_ID_IPC_FRAMES_OUT_1;
gVdisModuleContext.ipcFramesInVpssFromHostId = SYSTEM_VPSS_LINK_ID_IPC_FRAMES_IN_1;
/* capture link init */
CaptureLink_CreateParams_Init(&capPrms);
// capPrms.outQueParams[0].nextLink = gVcapModuleContext.deiId[0];
capPrms.outQueParams[0].nextLink = lid_dup;
capPrms.numVipInst = 1;
capPrms.tilerEnable = FALSE;
capPrms.numBufsPerCh = 8;
capPrms.maxBlindAreasPerCh = 4;
capPrms.isPalMode = Vcap_isPalMode();
#if ! defined CAP_DEV_TVP5158
capPrms.doCropInCapture = FALSE;
capPrms.enableSdCrop = FALSE;
#endif
/* capture instance init */
CaptureLink_VipInstParams *prm_cap_inst = &capPrms.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->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;
#else
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
/* 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;
dupPrm.inQueParams.prevLinkId = gVcapModuleContext.captureId;
dupPrm.inQueParams.prevLinkQueId = 0;
dupPrm.numOutQue = 2;
dupPrm.outQueParams[1].nextLink = VPSS_LINK_ID_MERGE;
dupPrm.outQueParams[0].nextLink = VPSS_LINK_ID_IPC_FRAME_OUT_TO_DSP;
// Merge link
mergePrm.inQueParams[0].prevLinkId = lid_dup;
mergePrm.inQueParams[0].prevLinkQueId = DEI_LINK_OUT_QUE_VIP_SC;
mergePrm.notifyNextLink = TRUE;
mergePrm.numInQue = 1;
mergePrm.outQueParams.nextLink = gVcapModuleContext.ipcFramesOutVpssId[1];
ipcOutVpssPrm.baseCreateParams.noNotifyMode = TRUE;
ipcOutVpssPrm.baseCreateParams.notifyNextLink = TRUE;
ipcOutVpssPrm.baseCreateParams.notifyPrevLink = TRUE;
ipcOutVpssPrm.baseCreateParams.inQueParams.prevLinkId = VPSS_LINK_ID_MERGE;
ipcOutVpssPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcOutVpssPrm.baseCreateParams.outQueParams[0].nextLink = gVcapModuleContext.ipcFramesInHostId;
hostInPrm.baseCreateParams.noNotifyMode = TRUE;
hostInPrm.baseCreateParams.notifyNextLink = FALSE;
hostInPrm.baseCreateParams.notifyPrevLink = TRUE;
hostInPrm.baseCreateParams.notifyProcessLink = TRUE;
hostInPrm.baseCreateParams.inQueParams.prevLinkId = gVcapModuleContext.ipcFramesOutVpssId[1];
hostInPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
hostInPrm.baseCreateParams.outQueParams[0].nextLink = gVdisModuleContext.ipcFramesOutHostId ;
hostInPrm.cbCtx = NULL;
hostInPrm.cbFxn = save_frames1;
hostOutPrm.baseCreateParams.noNotifyMode = TRUE;
hostOutPrm.baseCreateParams.notifyNextLink = TRUE;
hostOutPrm.baseCreateParams.notifyPrevLink = TRUE;
hostOutPrm.baseCreateParams.notifyProcessLink = TRUE;
hostOutPrm.baseCreateParams.inQueParams.prevLinkId = gVcapModuleContext.ipcFramesInHostId;
hostOutPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
hostOutPrm.baseCreateParams.outQueParams[0].nextLink = gVdisModuleContext.ipcFramesInVpssFromHostId;
ipcInVpssPrm.baseCreateParams.inQueParams.prevLinkId = gVdisModuleContext.ipcFramesOutHostId;
ipcInVpssPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcInVpssPrm.baseCreateParams.notifyNextLink = TRUE;
ipcInVpssPrm.baseCreateParams.notifyPrevLink = TRUE;
ipcInVpssPrm.baseCreateParams.numOutQue = 1;
ipcInVpssPrm.baseCreateParams.outQueParams[0].nextLink = gVdisModuleContext.displayId[1];
// Display1 link init
disPrms1.inQueParams[0].prevLinkId = gVdisModuleContext.ipcFramesInVpssFromHostId;
disPrms1.inQueParams[0].prevLinkQueId = 0;
disPrms1.displayRes = VSYS_STD_1080P_60;
请问下大家,可能是哪地方存在问题