群内的朋友, TI技术同仁:
你们好!
我在8127 ipnc rdk v3.8中使用vpss的nsf时遇到了一个这样的问题,请知晓的高手点拨一下,不甚感激!!
我建立了一个很简单的链路(1920×1080),来测试nsf link,数据链路如下:
cameralink –> nsf link –> ipcFramesOut(vpss) –> ipcFramesIn(A8)
我的cameralink的参数设置如下:
CameraLink_CreateParams camPrm;
CameraLink_VipInstParams * pCamInstPrm;
CameraLink_OutParams * pCamOutPrm;
CameraLink_CreateParams_Init(&camPrm);
camPrm.outQueParams[0].nextLink = nsf_link_id;
camPrm.ispLinkId = SYSTEM_LINK_ID_INVALID;
camPrm.glbceLinkId = SYSTEM_LINK_ID_INVALID;
camPrm.captureMode = CAMERA_LINK_CAPMODE_DDR;
//camPrm.captureMode = CAMERA_LINK_CAPMODE_ISIF;
camPrm.numAudioChannels = 0;
camPrm.vsEnable = FALSE;
camPrm.useMaxFrameSize = 0;
camPrm.numVipInst = 1;
camPrm.tilerEnable = FALSE;
// CameraLink_VipInstParams
pCamInstPrm = &camPrm.vipInst[0];
pCamInstPrm->vipInstId = SYSTEM_CAMERA_INST_VP_CSI2;
pCamInstPrm->videoDecoderId = SYSTEM_DEVICE_VID_CAM_IMX290_DRV; // IMX290
pCamInstPrm->inDataFormat = SYSTEM_DF_BAYER_RAW;
pCamInstPrm->numOutput = 1;
pCamInstPrm->standard = SYSTEM_STD_1080P_60;
pCamInstPrm->sensorOutWidth = 1920;
pCamInstPrm->sensorOutHeight = 1080;
// CameraLink_OutParams
pCamOutPrm = &pCamInstPrm->outParams[0];
pCamOutPrm->scEnable = FALSE;
pCamOutPrm->dataFormat = SYSTEM_DF_YUV422I_YUYV;
pCamOutPrm->outQueId = 0;
而nsflink的代码如下:
NsfLink_CreateParams nsfPrm;
NsfLink_CreateParams_Init(&nsfPrm);
nsfPrm.enable[0] = TRUE;
nsfPrm.numOutQue = 1;
nsfPrm.bypassNsf = NSF_LINK_BYPASS_MODE_MAX;//NSF_LINK_BYPASS_SNF_TNF;// NSF_LINK_BYPASS_NONE;
nsfPrm.inputFrameRate = 60;
nsfPrm.inQueParams.prevLinkId = camera_link_id;
nsfPrm.inQueParams.prevLinkQueId = 0;
nsfPrm.nsfStrength = NSF_LINK_NF_STRENGTH_AUTO;
nsfPrm.numBufsPerCh = 6;
nsfPrm.outputFrameRate = 60;
nsfPrm.outQueParams[0].nextLink = nextLinkId;
nsfPrm.tilerEnable = FALSE;
———————————————————————————————
我发现如果在cameralink中设置成continue模式,即
camPrm.captureMode = CAMERA_LINK_CAPMODE_ISIF
数据流运行正常.而如果设置成one-shot模式,即
camPrm.captureMode = CAMERA_LINK_CAPMODE_DDR;
则在nsflink中处理完几帧就卡住了,无数据流了.
群内的高手们,能指点一二吗? 关于nsflink这个link使用要注意什么呢?
Ternence_Hsu:
这个问题应当是在cameralink 上,而不是 nsflink 的问题;
jensen zhang:
回复 Ternence_Hsu:
谢谢楼上的回答.
如果我去掉中间的nsflink, cameralink的模式不管设置成one-shot或continue都是可以的.
不知道两者有什么冲突的? 如果设置成CAMERA_LINK_CAPMODE_DDR的话,好像nsf和camera都是M2M方式
jensen zhang:
回复 jensen zhang:
期待群内朋友们的指教,卡在这个地方好几天了,非常感谢!!!
jensen zhang:
回复 jensen zhang:
今天在one-shot模式下, 在nsflink加日志测试,发现卡死在pObj->complete,即将图片送进去处理,一直得不到完成的回应.哪位高手点拨下? status = FVID2_processFrames(pObj->fvidHandleNsf, &processList);Vps_printf("%s–FVID2_processFrames() return %d\n", __func__, status); UTILS_assert(status == FVID2_SOK); Semaphore_pend(pObj->complete, BIOS_WAIT_FOREVER); status = FVID2_getProcessedFrames(pObj->fvidHandleNsf, &processList, BIOS_NO_WAIT);Vps_printf("%s–FVID2_getProcessedFrames() return %d[outFrames.numFrames:%d]\n", __func__, status, outFrameList.numFrames);
jensen zhang:
回复 jensen zhang:
群内的朋友你们好!
前面我提到的问题解决了,是因为传递进去的帧宽,高等附属信息不正确导致.
现在nsflink和isplink一起使用时还是遇到了问题,执行了6帧后数据流断了.
我目前建立的链路如下:
cameraLink –> ispLink –> nsfLink –> ipcFramesOut
对应的link的配置(关于cameralink及nsflink类似前面列出的代码)如下:
IspLink_CreateParams ispPrm; memset(&ispPrm, 0, sizeof(ispPrm)); ispPrm.inQueParams.prevLinkId = camera_link_id; ispPrm.inQueParams.prevLinkQueId = 0; ispPrm.numOutQueue = 1; ispPrm.outQueInfo[0].nextLink = nsf_link_id; ispPrm.clkDivM = 10; ispPrm.clkDivN = 20; ispPrm.vsEnable = FALSE; ispPrm.outQueuePrm[0].dataFormat = SYSTEM_DF_YUV422I_UYVY; ispPrm.outQueuePrm[0].width = 1920; ispPrm.outQueuePrm[0].height = 1080;
#define ISP_LINK_MAX_OUT_FRAMES 6
加日志调试,我发现程序执行在
Int32 IspLink_drvProcessFrames(IspLink_Obj * pObj)
{
…
status = Utils_bufPutEmptyFrame(&pObj->outFrameQue[outQueId], pDrvObj->outFrameList.frames[cnt]);
…
}
数据链路建立后,连续运行了6帧正常,当第7帧时,在如上这一句代码时,程序挂了.
感觉像内存的问题,就是不知道是哪个地方内存的问题? 群内朋友能指点一二吗? 先谢谢啦!
jensen zhang:
回复 jensen zhang:
发现使用ispLink将帧格式转换成FVID2_DF_YUV422I_UYVY, 然后接nsfLink进行处理,就出现这样的情况,不知道这样使用要注意什么呢?
jensen zhang:
回复 jensen zhang:
发现使用ispLink将帧格式转换成FVID2_DF_YUV422I_UYVY,然后接nsfLink就出现如上的问题,不知道这样使用要注意什么呢?
Ternence_Hsu:
回复 jensen zhang:
422P YUV422I_YUYV Single Buffer: Y U Y V Y U Y V