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.

DM8127 Frame进入DSP处理后连入到VPSS问题

DM8127的设备,自己根据multich_dualstream_demo.c修改了一种解决方案,在camera与merge之间加入了DSP端的处理。

总共加入了5各部分,分别是ipcFramesOutVpss、ipcFramesInDsp、Ne(dsp端算法)、ipcFramesOutDsp、ipcFramesInVpss,前后分别与camera和merge连接。

但系统启动后出以下错误:

[m3vpss ]  9241: Assertion @ Line: 563 in links_common/ipcFramesIn/ipcFramesInLink_tsk.c: pListElem->frameBuf.phyAddr[0][0] == pFrameBuf->addr[0][0] : failed !!!

 

我的Ne(dsp)算法中一些设置如下:

typedef struct {  

    Utils_TskHndl tsk;

    NeLink_CreateParams createArgs;

    UInt32 receviedFrameCount;

    System_LinkInfo info;

    System_LinkInfo inTskInfo;

    System_LinkQueInfo inQueInfo;

    FVID2_Frame outFrames[NE_LINK_MAX_OUT_FRAMES];

    NeLink_perFrameConfig perFrameCfg[NE_LINK_MAX_OUT_FRAMES];

    FVID2_Format bufferFrameFormat;

    Utils_BufHndl outFrameQue; 

    System_FrameInfo frameInfo[NE_LINK_MAX_OUT_FRAMES];

    FVID2_FrameList outFrameList;

} NeLink_Obj;

 NE_LINK_MAX_OUT_FRAMES 为 4

算法:

Int32 NeLink_algTestFrames(NeLink_Obj *pObj)

 {

     Int32 status;

     Int32 frameId;

     UInt32 edmaWidth, edmaHeight;

     FVID2_Frame *pEmptyFrame;  

     FVID2_Frame *pFullFrame;

     FVID2_FrameList frameList;

     System_LinkInQueParams *pInQueParams;

     NeLink_CreateParams *pNeParams = &pObj->createArgs;

     pInQueParams = &pNeParams->inQueParams;

     System_getLinksFullFrames(pInQueParams->prevLinkId, pInQueParams->prevLinkQueId, &frameList);

     if (frameList.numFrames)

     {

          for (frameId = 0; frameId < frameList.numFrames; frameId++)  

         {

                   status = Utils_bufGetEmptyFrame(&pObj->outFrameQue, &pEmptyFrame,BIOS_NO_WAIT);

                   if ((status == FVID2_SOK) && (pEmptyFrame != NULL))

                   {

                          pFullFrame = frameList.frames[frameId]; 

                          edmaWidth  = pObj->inQueInfo.chInfo[0].width;

                          edmaHeight = pObj->inQueInfo.chInfo[0].height;

                          memcpy(pEmptyFrame->addr[0][0], pFullFrame->addr[0][0], edmaWidth * edmaHeight);

                          pEmptyFrame->timeStamp = pFullFrame->timeStamp;

                          /* put the buffer into full queue */

                          status = Utils_bufPutFullFrame(&pObj->outFrameQue, pEmptyFrame);

                          UTILS_assert(status == FVID2_SOK);

                          System_sendLinkCmd(pObj->createArgs.outQueParams.nextLink, SYSTEM_CMD_NEW_DATA);

               }

          }

          System_putLinksEmptyFrames(pInQueParams->prevLinkId, pInQueParams->prevLinkQueId, &frameList);

     }

     return FVID2_SOK;

}

 

Int32 NeLink_getFullFrames(Utils_TskHndl * pTsk, UInt16 queId,  FVID2_FrameList * pFrameList)

 {

      Int32 status;

      NeLink_Obj *pObj = (NeLink_Obj *) pTsk->appData;

      status = Utils_bufGetFull(&pObj->outFrameQue, pFrameList, BIOS_NO_WAIT);

      UTILS_assert(status == FVID2_SOK);

      return FVID2_SOK;

 }

 

Int32 NeLink_putEmptyFrames(Utils_TskHndl * pTsk, UInt16 queId, FVID2_FrameList * pFrameList)

 {

    UInt32 status;

    UInt32 frameId;

    FVID2_Frame *pFrame = NULL;

    NeLink_Obj *pObj = (NeLink_Obj *) pTsk->appData;

    for (frameId = 0; frameId < pFrameList->numFrames; frameId++)

    {

          pFrame = &pObj->outFrames[frameId];

          status = Utils_bufPutEmptyFrame(&pObj->outFrameQue, pFrame);

          UTILS_assert(status == FVID2_SOK);

     } 

     return FVID2_SOK;

}

 

首先请问这种方式可行吗?即从Vpss拿到帧送入DSP再送回Vpss。其次就是上述算法内缺少了哪些操作导致出错?另外,有没有关于ipcFramesLink的说明?

  • 你好,

    目前IPNC软件里的dsp link是一个proces link,没有下一个link,直接返回调用的link的。建议你先参考目前有的link。下面的流程你是否能尝试?

    IPCframeout (vpss)-》ipcframein(dsp)-》DSP pocess link-》IPCframeout (vpss)-》ipcm3out(vpss)-》ipcm3in(video)

  • 您好,

    我在DSP的link中加入了nextlink的支持也是不行的吗?比如System_registerLink()之前设置了linkObj的linkGetFullFrames、linkPutEmptyFrames、getLinkInfo接口,当然这些接口是对outFrameQue队列的操作,队列在creat时也创建好了。

    另外,您所指的这个流程中,

    IPCframeout (vpss)-》ipcframein(dsp)-》DSP pocess link-》IPCframeout (vpss)-》ipcm3out(vpss)-》ipcm3in(video)。

    我不太明白dsplink之后,DSP pocess link-》IPCframeout(vpss)-》ipcm3out(vpss)-》ipcm3in(video)直接这么连接吗?还是DSP pocess link-》ipcm3out(dsp)-》ipcm3in(video)?或者别的?

  • DSPLInk是proces link直接返回调用它的linkIPCframeout(vpss)

  • 此外,如果将ipcFrameOut按照processlink的方式连接DSP,其nextlink接后续部分是否可行?

     ipcFramesOutVpssPrm.baseCreateParams.inQueParams.prevLinkId = gVcamModuleContext.cameraId;

     ipcFramesOutVpssPrm.baseCreateParams.inQueParams.prevLinkQueId = 1;

      ipcFramesOutVpssPrm.baseCreateParams.notifyPrevLink = TRUE;

     ipcFramesOutVpssPrm.baseCreateParams.numOutQue = 1;

     ipcFramesOutVpssPrm.baseCreateParams.outQueParams[0].nextLink = mergeId[CAM_STREAM_MERGE_IDX];

     ipcFramesOutVpssPrm.baseCreateParams.notifyNextLink = TRUE;

     ipcFramesOutVpssPrm.baseCreateParams.processLink = ipcFramesInDspId;            // 后接DSP

     ipcFramesOutVpssPrm.baseCreateParams.notifyProcessLink = TRUE;

     ipcFramesOutVpssPrm.baseCreateParams.noNotifyMode = FALSE;

  • 你好,

    ipcFrameout link就是用于传递frame数据的,请不要设置 ipcFramesOutVpssPrm.baseCreateParams.processLink = ipcFramesInDspId; 。请把ipcFrameout link的nextLink设置为ipcFramein (dsp)。你可以把你自己的dsp算法作为函数在dsp process link里面处理运行。

  • 您好,

    请问A8有没有对frame操作的link?我见有从A8进出的frame及bits的link通道,但没看到实际针对帧图的操作。

    如果自己添加的话,参照哪个比较容易呢?

  • Micky,我最近也在弄8127,A8那端是使用McFW API 对link进行操作控制的,在A8端有一个不完整的帧信息的存储操作。方便的话大家相互交流下,我的QQ是1967651954。谢谢

  • 你好,我就是参照上述的方式做的,运行过程之中也没有抱什么错误,就是在DSP pocess link这里的时候,发现没有数据,请问是怎么回事呢???????????

  • 你这是误导别人吗?

    “请不要设置 ipcFramesOutVpssPrm.baseCreateParams.processLink = ipcFramesInDspId; 。请把ipcFrameout link的nextLink设置为ipcFramein (dsp)。你可以把你自己的dsp算法作为函数在dsp process link里面处理运行。”


  • 亲,我的也是像你一样改的。ipcFramesOutVpss-ipcFramesInDsp-dsp端算法-ipcFramesOutDsp-ipcFramesInVpss,请问你的调通没有?

  • 亲,你这么写没有问题吗?感觉不对啊,难道dsp算法不能作为ipcframein(dsp)的nextlink吗?必须作为processlink吗?IPCframeout (vpss)-》ipcframein(dsp)-》算法-》IPCframeout (dsp)->ipcframein(vpss)这种方案不可行吗?

  • 那你的怎么调的?IPCframeout (vpss)-》ipcframein(dsp)-》算法-》IPCframeout (dsp)->ipcframein(vpss)这种方案可行吗?

  • 很久没弄了。好像是可以的哈。不需要processlink也行。

  • 你的qq多少?我加你,我的实在感觉没什么问题,但就是运行failed,我的1426118504

x 出现错误。请重试或与管理员联系。