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.

ipcFramesOutLink_tsk.c: failed



你好,我写了一个程序,采集到数据后交给DSP的OSD算法,运算后再把结果传给VPSS,然后在display中显示,但是程序运行后出现如下错误


@@@@@@@@@@@@@@@@@@@@@@@ capDIS @@@@@@@@@@@@@@@@@@@@@@@
 [m3vpss ]  29962: CAPTURE: Create in progress !!!
 [m3vpss ]  29970: CAPTURE: VIP0 PortA VID DEC 1027 (0x30): Video Standard Detect in Progress !!!
 [m3vpss ]  30072: CAPTURE: Detected video (1920x1080@30Hz, 0)!!!
 [m3vpss ]  30080: CAPTURE: VIP1 PortA VID DEC 1027 (0x31): Video Standard Detect in Progress !!!
 [m3vpss ]  30181: CAPTURE: Detecting video .....!!!
 [m3vpss ]  30282: CAPTURE: Detecting video .....!!!
 [m3vpss ]  30383: CAPTURE: Detecting video .....!!!
 [m3vpss ]  30484: CAPTURE: Detecting video .....!!!
 [m3vpss ]  30585: CAPTURE: Detecting video .....!!!
 [m3vpss ]  30686: CAPTURE: Detecting video .....!!!
 [m3vpss ] 30686 CAPTURE: VIP1 PortA use default standard 1080P60
 [m3vpss ]  30717: CAPTURE: VIP0 PortA capture mode is [16-bit, Non-mux Embedded Sync] !!!
 [m3vpss ]  31030: CAPTURE: VIP0 PortA VID DEC 1027 (0x30): 9233:0033:0001
 [m3vpss ]  31030: CAPTURE: VIP1 PortA capture mode is [16-bit, Non-mux Embedded Sync] !!!
 [m3vpss ]  31342: CAPTURE: VIP1 PortA VID DEC 1027 (0x31): 9233:0033:0001
 [m3vpss ]  UTILS: DMA: Allocated CH (TCC) = 58 (58)
 [m3vpss ] CAPTURE::HEAPID:0    USED:672
 [m3vpss ] CAPTURE::HEAPID:4    USED:137318400
 [m3vpss ]  31343: CAPTURE: Create Done !!!
 [m3vpss ] ==== Vps_sii9233aReadAviInfo ==== devAddr = 0x34
 [m3vpss ] AviInfo = 0x82,regValue[1] = 0x2,regValue[2] = 0xd
 [m3vpss ]  ===============================pAviInfo->colorSpace = 1, pAviInfo->colorImetric = 2,pAviInfo->pixelRepeat= 0
 [m3vpss ] ==== Vps_sii9233aReadAviInfo ==== devAddr = 0x35
 [m3vpss ] AviInfo = 0x0,regValue[1] = 0x0,regValue[2] = 0x0
 [m3vpss ]  32656: IPC_FRAMES_OUT   : Create in progress !!!
 [c6xdsp ]  30635: IPC_FRAMES_IN   : Create in progress !!!
 [c6xdsp ]  30635: SYSTEM: Opening ListMP [VPSS-M3_IPC_OUT_19] ...
 [c6xdsp ]  30635: SYSTEM: Opening ListMP [VPSS-M3_IPC_IN_19] ...
 [m3vpss ]  32657: IPC_FRAMES_OUT   : Create Done !!!
 [c6xdsp ]  30636: SYSTEM: Opening MsgQ [VPSS-M3_MSGQ] ...
 [c6xdsp ] IPC_FRAMES_IN:HEAPID:0       USED:304
 [c6xdsp ]  30637: IPC_FRAMES_IN   : Create Done !!!
 [c6xdsp ]  30639: ALG : Create in progress !!!
 [c6xdsp ] ALGLINK:HEAPID:0     USED:2616
 [c6xdsp ] ALGLINK:HEAPID:1     USED:5904
 [c6xdsp ]  30646: ALG : Create Done !!!
 [c6xdsp ]  30649: IPC_FRAMES_OUT   : Create in progress !!!
 [c6xdsp ]  30650: Assertion @ Line: 231 in links_common/ipcFramesOut/ipcFramesOutLink_tsk.c: pObj->createArgs.baseCreateParams.inQueParams.prevLinkQueId < pObj->inQueInfo.numQue : failed !!!

我的程序如下

 
#include <demos/link_api_demos/common/chains.h>
#include <mcfw/interfaces/ti_venc.h>
 
  Void Chains_doubleChCapNsfEncDecSwMsDis(Chains_Ctrl *chainsCfg)
  {
   CaptureLink_CreateParams  capturePrm;
   CaptureLink_VipInstParams  *pCaptureInstPrm;
   CaptureLink_OutParams   *pCaptureOutPrm;
  printf("@@@@@@@@@@@@@@@@@@@@@@@ capDIS @@@@@@@@@@@@@@@@@@@@@@@\n");
   /* changed by chen longhu */
 
   IpcFramesInLinkRTOS_CreateParams  ipcFramesInDspPrm,ipcFramesInVpssPrm;
   IpcFramesOutLinkRTOS_CreateParams ipcFramesOutDspPrm,ipcFramesOutVpssPrm;
  
   AlgLink_CreateParams      dspAlgPrm;
 
   DisplayLink_CreateParams  displayPrm[CHAINS_SW_MS_MAX_DISPLAYS];
   UInt32 captureId, vipInstId;
   UInt32 ipcFramesOutVpssId,ipcFramesInDspId;
   UInt32 ipcFramesInVpssId,ipcFramesOutDspId;
   UInt32 dspAlgId;
   UInt32 displayId[CHAINS_SW_MS_MAX_DISPLAYS];
 
   UInt32 i;
   char ch;
 
   CHAINS_INIT_STRUCT(CaptureLink_CreateParams,capturePrm);
   CHAINS_INIT_STRUCT(IpcFramesOutLinkRTOS_CreateParams,ipcFramesOutVpssPrm);
   CHAINS_INIT_STRUCT(IpcFramesInLinkRTOS_CreateParams,ipcFramesInDspPrm);
   CHAINS_INIT_STRUCT(IpcFramesOutLinkRTOS_CreateParams,ipcFramesOutDspPrm);
   CHAINS_INIT_STRUCT(IpcFramesInLinkRTOS_CreateParams,ipcFramesInVpssPrm);

  
   CHAINS_INIT_STRUCT(AlgLink_CreateParams ,dspAlgPrm);
   for (i=0; i<CHAINS_SW_MS_MAX_DISPLAYS; i++) {
    CHAINS_INIT_STRUCT(DisplayLink_CreateParams,displayPrm[i]);
   }
   captureId    = SYSTEM_LINK_ID_CAPTURE;
   ipcFramesOutVpssId  = SYSTEM_VPSS_LINK_ID_IPC_FRAMES_OUT_0;
   ipcFramesInDspId= SYSTEM_DSP_LINK_ID_IPC_FRAMES_IN_0;
  
   ipcFramesInVpssId  = SYSTEM_VPSS_LINK_ID_IPC_FRAMES_IN_0;
   ipcFramesOutDspId= SYSTEM_DSP_LINK_ID_IPC_FRAMES_OUT_0;
  
   dspAlgId= SYSTEM_LINK_ID_ALG_0;
   displayId[0]  = SYSTEM_LINK_ID_DISPLAY_0;
   displayId[1]  = SYSTEM_LINK_ID_DISPLAY_1;
 
   capturePrm.numVipInst     = 2;
   capturePrm.tilerEnable     = FALSE;
   capturePrm.numBufsPerCh    = 16;
   capturePrm.numExtraBufs    = 0;
   capturePrm.maxBlindAreasPerCh   = 0;
   capturePrm.isPalMode     = FALSE;
   capturePrm.enableSdCrop    = FALSE;
   capturePrm.doCropInCapture    = FALSE;
 
   for(i=0; i<capturePrm.numVipInst; i++)
   {
    vipInstId = SYSTEM_CAPTURE_INST_VIP0_PORTA + 2*i;
    pCaptureInstPrm      = &capturePrm.vipInst[i];
    pCaptureInstPrm->vipInstId    = vipInstId%SYSTEM_CAPTURE_INST_MAX;
    pCaptureInstPrm->videoDecoderId  = SYSTEM_DEVICE_VID_DEC_SII9233A_DRV;
    pCaptureInstPrm->inDataFormat   = SYSTEM_DF_YUV422P;
    pCaptureInstPrm->standard    = chainsCfg->displayRes[i];
    pCaptureInstPrm->numOutput    = 1;
    pCaptureInstPrm->numChPerOutput  = 1;
    pCaptureInstPrm->frameCaptureMode  = FALSE;
    pCaptureInstPrm->fieldsMerged   = FALSE;
    pCaptureOutPrm       = &pCaptureInstPrm->outParams[0];
    pCaptureOutPrm->dataFormat    = SYSTEM_DF_YUV422I_YUYV;
    pCaptureOutPrm->scEnable    = FALSE;
    pCaptureOutPrm->scOutWidth    = chainsCfg->channelConf[i].width;
    pCaptureOutPrm->scOutHeight   = chainsCfg->channelConf[i].height;
    pCaptureOutPrm->outQueId    = 0;
   }
 
   capturePrm.outQueParams[0].nextLink  = ipcFramesOutVpssId;
   System_linkCreate(captureId, &capturePrm, sizeof(capturePrm));
   for (i=0; i<gChains_ctrl.channelNum; i++) {
    chainsCfg->displayRes[i] = capturePrm.vipInst[i].standard;
    Vsys_getResSize(chainsCfg->displayRes[i], &chainsCfg->channelConf[i].width, &chainsCfg->channelConf[i].height);
    Vsys_getResRate(chainsCfg->displayRes[i], &chainsCfg->channelConf[i].frameRate);
 
   }
 
  
   ipcFramesOutVpssPrm.baseCreateParams.inQueParams.prevLinkId = captureId;
   ipcFramesOutVpssPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
   ipcFramesOutVpssPrm.baseCreateParams.numOutQue = 1;
   ipcFramesOutVpssPrm.baseCreateParams.processLink = ipcFramesInDspId;
 
   ipcFramesOutVpssPrm.baseCreateParams.notifyProcessLink = TRUE;
   ipcFramesOutVpssPrm.baseCreateParams.notifyNextLink = TRUE;
   ipcFramesOutVpssPrm.baseCreateParams.notifyPrevLink = TRUE;
   ipcFramesOutVpssPrm.baseCreateParams.noNotifyMode = FALSE;
  
   //prevLink->processLink->nextLink
   ipcFramesInDspPrm.baseCreateParams.inQueParams.prevLinkId = ipcFramesOutVpssId;
   ipcFramesInDspPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
   ipcFramesInDspPrm.baseCreateParams.outQueParams[0].nextLink =dspAlgId;
   ipcFramesInDspPrm.baseCreateParams.numOutQue = 1;
 
   ipcFramesInDspPrm.baseCreateParams.notifyPrevLink = TRUE;
   ipcFramesInDspPrm.baseCreateParams.notifyNextLink = TRUE;
   ipcFramesInDspPrm.baseCreateParams.noNotifyMode  = FALSE;
 
 
   dspAlgPrm.enableOSDAlg = TRUE;
   dspAlgPrm.enableSCDAlg = FALSE;
   dspAlgPrm.inQueParams.prevLinkId =ipcFramesInDspId;
   dspAlgPrm.inQueParams.prevLinkQueId = 0;
   dspAlgPrm.outQueParams[0].nextLink = ipcFramesOutDspId;
   AlgLink_OsdChWinParams * chWinPrm = &dspAlgPrm.osdChCreateParams[0].chDefaultParams;
 
   /* set osd window max width and height */
   dspAlgPrm.osdChCreateParams[0].maxWidth  = 320;
   dspAlgPrm.osdChCreateParams[0].maxHeight = 64;
   chWinPrm->chId = 0;
   chWinPrm->numWindows = 0;


  
   ipcFramesOutDspPrm.baseCreateParams.inQueParams.prevLinkId = dspAlgId;
   ipcFramesOutDspPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
   ipcFramesOutDspPrm.baseCreateParams.numOutQue = 1;
   ipcFramesOutDspPrm.baseCreateParams.processLink =ipcFramesInVpssId; 
   ipcFramesOutDspPrm.baseCreateParams.notifyProcessLink = TRUE;
   ipcFramesOutDspPrm.baseCreateParams.notifyNextLink = TRUE;
   ipcFramesOutDspPrm.baseCreateParams.notifyPrevLink = TRUE;
   ipcFramesOutDspPrm.baseCreateParams.noNotifyMode = FALSE;
  
   //prevLink->processLink->nextLink
   ipcFramesInVpssPrm.baseCreateParams.inQueParams.prevLinkId = ipcFramesOutDspId;
   ipcFramesInVpssPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
   ipcFramesInVpssPrm.baseCreateParams.outQueParams[0].nextLink =displayId[0];
   ipcFramesInVpssPrm.baseCreateParams.numOutQue = 1;
   ipcFramesInVpssPrm.baseCreateParams.notifyPrevLink = TRUE;
   ipcFramesInVpssPrm.baseCreateParams.notifyNextLink = TRUE;
   ipcFramesInVpssPrm.baseCreateParams.noNotifyMode  = FALSE;
    

  
   System_linkCreate(ipcFramesOutVpssId, &ipcFramesOutVpssPrm, sizeof(ipcFramesOutVpssPrm));
   System_linkCreate(ipcFramesInDspId, &ipcFramesInDspPrm, sizeof(ipcFramesInDspPrm));
   System_linkCreate(dspAlgId, &dspAlgPrm, sizeof(dspAlgPrm));
   System_linkCreate(ipcFramesOutDspId, &ipcFramesOutDspPrm, sizeof(ipcFramesOutDspPrm));
   System_linkCreate(ipcFramesInVpssId, &ipcFramesInVpssPrm, sizeof(ipcFramesInVpssPrm));
    
   Chains_displayCtrlInit(chainsCfg->displayRes); 
   displayPrm[0].numInputQueues     = 1;
   displayPrm[0].activeQueue      = 0;
   displayPrm[0].inQueParams[0].prevLinkId  = ipcFramesInDspId;
   displayPrm[0].inQueParams[0].prevLinkQueId  = 0;
   displayPrm[0].displayRes      = chainsCfg->displayRes[0];
   displayPrm[0].forceFieldSeparatedInputMode  = FALSE;
   System_linkCreate(displayId[0], &displayPrm[0], sizeof(displayPrm[0]));
 
   Chains_memPrintHeapStatus();
   {
    System_linkStart(displayId[0]);
    System_linkStart(captureId);
    System_linkStart(dspAlgId);
    while(1)
    {
     ch = Chains_menuRunTime();
     if(ch=='0')
      break;
     if(ch=='v')
      System_linkControl(captureId, CAPTURE_LINK_CMD_FORCE_RESET, NULL, 0, TRUE);
     if(ch=='p')
      System_linkControl(captureId, CAPTURE_LINK_CMD_PRINT_ADV_STATISTICS, NULL, 0, TRUE);
    }
 
    System_linkStop(captureId);
    System_linkStop(dspAlgId);
    System_linkStop(displayId[0]);

   }
 
   System_linkDelete(captureId);
   System_linkDelete(displayId[0]);
   System_linkDelete(dspAlgId);
   System_linkDelete(ipcFramesOutVpssId);
   System_linkDelete(ipcFramesInDspId);
   System_linkDelete(ipcFramesInVpssId);
   System_linkDelete(ipcFramesOutDspId);

   Chains_displayCtrlDeInit();
 
  }
 

 

 

  • 向各位大牛求救!  帮忙分析一下原因

  •    本程序的配置是

    ipcFramesOutDspPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
    ipcFramesOutDspPrm.baseCreateParams.numOutQue = 1;

    但是我在断言提示错误前打印了变量信息为

    pObj->createArgs.baseCreateParams.inQueParams.prevLinkQueId = 0(显然是正确的)

    pObj->inQueInfo.numQue = 0 (为什么不是1了??)

     [c6xdsp ]  30650: Assertion @ Line: 231 in links_common/ipcFramesOut/ipcFramesOutLink_tsk.c: pObj->createArgs.baseCreateParams.inQueParams.prevLinkQueId < pObj->inQueInfo.numQue : failed !!!

    请问这个pObj->inQueInfo.numQue为什么不等于ipcFramesOutDspPrm.baseCreateParams.numOutQue = 1

  • 你好,我遇到了与你一样的问题,请问你的问题解决了么?

  • 看到了你在e2e上发的帖子,http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/717/p/250776/879983.aspx

    但是还是有些不明白:

    Since osd is set as processLink frame will come back to the M3VPSS after OSD is applied. ProcessLink works as below:

    Step 1

    ipcFramesOut ----send input buffer---> ipcFramesIn (ProcessLink)

     

    Step 2

    ipcFramesIn (ProcessLink) ---send input buffer ---> dspAlg[0]

     

    After dspAlg processing is complete ...

     

    Step 3

    dspAlg[0] --> Frees Input Buffer --> ipcFramesIn

    Step 4

    ipcFramesIn --> Free Input Buffer -> ipcFramesOut

    Step 5

    ipcFramesOut -> Send Input Buffer to next Link

    最后你是修改了Link的属性,还是修改了Link 的顺序呢?

    望不吝赐教!

  • 問題出在於chain link 

    原先longhu chen的chain為capture —>ipcframesVpssOut—>ipcframesDSPIn—>dspAlg(OSD)—>ipcframesDSPOut—>ipcframesVpssIn—>display

    但是因為DSP沒有next link, 因此不需要ipcframesDSPOut, ipcframesVpssIn

    chain應改為如下, 

    Capture -> IpcFramesOut -> Display

                         | -> IpcFramesInDsp -> dspAlg[0] (OSD)

    簡單的說    ipcFramesOutVpssPrm.baseCreateParams.processLink = ipcFramesInDspId;

      ipcFramesOutVpssPrm.baseCreateParams.outQueParams[0].nextLink =DisplayId;

    以上綜合longhu chen在e2e上詢問的結果得到。修改後問題解決!

    thank you