diff --git a/Source/vision_sdk/src/links_ipu/vip_capture/captureLink_drv.c b/Source/vision_sdk/src/links_ipu/vip_capture/captureLink_drv.c index b4aa963..722e20a 100644 --- a/Source/vision_sdk/src/links_ipu/vip_capture/captureLink_drv.c +++ b/Source/vision_sdk/src/links_ipu/vip_capture/captureLink_drv.c @@ -127,7 +127,7 @@ Int32 CaptureLink_drvCreateInst(CaptureLink_Obj * pObj, UInt16 instId) Vps_VipPortConfig *pVipPortCfg; CaptureLink_OutParams *pOutPrm; System_LinkChInfo *pQueChInfo; - UInt16 queId, queChId, outId; + UInt16 queId, queChId, outId, chId; Int32 status; Int32 nRetVal = 0; Fvid2_DataFormat dataFormat; @@ -143,7 +143,7 @@ Int32 CaptureLink_drvCreateInst(CaptureLink_Obj * pObj, UInt16 instId) pVipCreateArgs->videoIfMode = pInstPrm->videoIfMode; pVipCreateArgs->videoIfWidth = pInstPrm->videoIfWidth; pVipCreateArgs->bufCaptMode = pInstPrm->bufCaptMode; - pVipCreateArgs->numCh = 1; + pVipCreateArgs->numCh = 2;//4;//1; pVipCreateArgs->numStream = pInstPrm->numStream; /* @@ -430,10 +430,12 @@ Int32 CaptureLink_drvCreateInst(CaptureLink_Obj * pObj, UInt16 instId) /* * Initialize the channel information for the next link */ + for (chId = 0; chId < pVipCreateArgs->numCh; chId++) + { queId = 0; queChId = pObj->info.queInfo[queId].numCh; - pQueChInfo = &pObj->info.queInfo[0].chInfo[queChId]; + pQueChInfo = &pObj->info.queInfo[queId].chInfo[queChId]; dataFormat = (Fvid2_DataFormat) pOutPrm->dataFormat; pQueChInfo->flags = System_Link_Ch_Info_Set_Flag_Data_Format(pQueChInfo->flags, @@ -450,15 +452,15 @@ Int32 CaptureLink_drvCreateInst(CaptureLink_Obj * pObj, UInt16 instId) pQueChInfo->flags = System_Link_Ch_Info_Set_Flag_Scan_Format(pQueChInfo->flags, pInstPrm->inParams.scanFormat); - - pVipCreateArgs->chNumMap[outId][0] = - pObj->info.queInfo[queId].numCh + pObj->fvid2DrvChNumOffset; - + + pVipCreateArgs->chNumMap[outId][chId] = Vps_captMakeChNum(pInst->instId, outId, chId); + //pObj->info.queInfo[queId].numCh + pObj->fvid2DrvChNumOffset; + pObj->info.queInfo[queId].numCh++; pObj->chToInstMap[queChId] = instId; + } } - Fvid2CbParams_init(&pInst->cbPrm); pInst->cbPrm.appData = pInst; pInst->parent = pObj; @@ -588,9 +590,13 @@ Int32 CaptureLink_drvCreate(CaptureLink_Obj * pObj, System_resetLinkMemAllocInfo(&pObj->createArgs.memAllocInfo); - status = Utils_bufCreate(&pObj->bufQue, FALSE, FALSE); - UTILS_assert(status == SYSTEM_LINK_STATUS_SOK); - pObj->info.queInfo[queId].numCh = 0; + for (queId = 0; queId < CAPTURE_LINK_MAX_OUT_QUE; queId++) + { + status = Utils_bufCreate(&pObj->bufQue, FALSE, FALSE); + UTILS_assert(status == SYSTEM_LINK_STATUS_SOK); + + pObj->info.queInfo[queId].numCh = 0; + } if (pPrm->numVipInst) { @@ -707,7 +713,7 @@ Int32 CaptureLink_drvProcessData(CaptureLink_Obj * pObj, UInt32 instId) sysBuf = pFrame->appData; - UTILS_assert(sysBuf->chNum < CAPTURE_LINK_MAX_CH_PER_OUT_QUE); + //UTILS_assert(sysBuf->chNum < CAPTURE_LINK_MAX_CH_PER_OUT_QUE); /* Setting the top or bottom field into payload->flags */ ((System_VideoFrameBuffer*) (sysBuf->payload))->flags = @@ -816,10 +822,10 @@ Int32 CaptureLink_drvPutEmptyBuffers(CaptureLink_Obj * pObj, UTILS_assert(pFrame != NULL); pFrame->perFrameCfg = NULL; - frameList.frames[0] = pFrame; + frameList.frames[idx] = pFrame; frameList.numFrames = 1; - UTILS_assert(pBuf->chNum < CAPTURE_LINK_MAX_CH_PER_OUT_QUE); + //UTILS_assert(pBuf->chNum < CAPTURE_LINK_MAX_CH_PER_OUT_QUE); instId = pObj->chToInstMap[pBuf->chNum]; @@ -1164,7 +1170,7 @@ Int32 CaptureLink_drvAllocAndQueueFrames(CaptureLink_Obj * pObj, CaptureLink_InstObj * pDrvObj) { Int32 status; - UInt32 idx,streamId, frameId; + UInt32 idx,streamId, frameId, chId; Vps_CaptVipOutInfo *pOutInfo; FVID2_Frame *frames; FVID2_FrameList frameList; @@ -1210,13 +1216,16 @@ Int32 CaptureLink_drvAllocAndQueueFrames(CaptureLink_Obj * pObj, */ for (streamId = 0U; streamId < pDrvObj->createArgs.numStream; streamId++) { + for (chId = 0U; chId < pDrvObj->createArgs.numCh; chId++) + { pOutInfo = &pDrvObj->vipPrms.outStreamInfo[streamId]; /* * base index for pDrvObj->frames[], pDrvObj->buffers[] and * pDrvObj->videoFrames[]; */ - idx = CAPTURE_LINK_MAX_CH_PER_HANDLE * numFrames * streamId; + idx = (CAPTURE_LINK_MAX_CH_PER_HANDLE * numFrames * streamId) + (numFrames * chId); + //idx = CAPTURE_LINK_MAX_CH_PER_HANDLE * numFrames * streamId; if (idx >= CAPTURE_LINK_MAX_FRAMES_PER_HANDLE) { Vps_printf(" CAPTURE: ERROR: Array out of bounds detected in" @@ -1271,7 +1280,7 @@ Int32 CaptureLink_drvAllocAndQueueFrames(CaptureLink_Obj * pObj, memset(&frames[frameId], 0, sizeof(frames[frameId])); frames[frameId].chNum = - pDrvObj->createArgs.chNumMap[streamId][0]; + pDrvObj->createArgs.chNumMap[streamId][chId]; frames[frameId].addr[0][0] = pBaseAddr; frames[frameId].addr[0][1] = pBaseAddr + cOffset; @@ -1303,7 +1312,7 @@ Int32 CaptureLink_drvAllocAndQueueFrames(CaptureLink_Obj * pObj, * shall be checked by another code checker like Klocwork. */ -#ifdef SYSTEM_VERBOSE_PRINTS +//#ifdef SYSTEM_VERBOSE_PRINTS { Vps_printf(" CAPTURE: Frame %d: FVID2 CH %d: Link CH %d: 0x%08x, 0x%08x, %d B \n", frameId, @@ -1314,7 +1323,7 @@ Int32 CaptureLink_drvAllocAndQueueFrames(CaptureLink_Obj * pObj, frameSize ); } -#endif +//#endif } /* @@ -1340,6 +1349,7 @@ Int32 CaptureLink_drvAllocAndQueueFrames(CaptureLink_Obj * pObj, UTILS_assert(status == SYSTEM_LINK_STATUS_SOK); } + } return SYSTEM_LINK_STATUS_SOK; }