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.

关于在8127 ipnc中使用nsf的问题



群内的朋友, TI技术同仁:

    你们好!

 我在8127 ipnc rdk v3.8中使用vpss的nsf时遇到了一个这样的问题,请知晓的高手点拨一下,不甚感激!!

我建立了一个很简单的链路(1920x1080),来测试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使用要注意什么呢?

  • 这个问题应当是在cameralink 上,而不是 nsflink 的问题;

  • 谢谢楼上的回答.
    如果我去掉中间的nsflink, cameralink的模式不管设置成one-shot或continue都是可以的.
    不知道两者有什么冲突的? 如果设置成CAMERA_LINK_CAPMODE_DDR的话,好像nsf和camera都是M2M方式
  • 期待群内朋友们的指教,卡在这个地方好几天了,非常感谢!!!

  • 今天在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);

  • 群内的朋友你们好!

         前面我提到的问题解决了,是因为传递进去的帧宽,高等附属信息不正确导致.

    现在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帧时,在如上这一句代码时,程序挂了.

    感觉像内存的问题,就是不知道是哪个地方内存的问题? 群内朋友能指点一二吗? 先谢谢啦!

  • 发现使用ispLink将帧格式转换成FVID2_DF_YUV422I_UYVY, 然后接nsfLink进行处理,就出现这样的情况,不知道这样使用要注意什么呢?
  • 发现使用ispLink将帧格式转换成FVID2_DF_YUV422I_UYVY,然后接nsfLink就出现如上的问题,不知道这样使用要注意什么呢?
  • 422P YUV422I_YUYV Single Buffer: Y U Y V Y U Y V