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.

Video link error

When I add my alg unit in my video link, errors happened. It is procId
  • Pls provide details on what you added and what error you are getting. It is not clear what is the issue from your description

  • The following is my video link,

    static void Multich_ffws_connect_links()
    {
     UInt32 i =0;
     
     /**Capture Link**/
     Multich_ffws_set_capture_prm(&gFFWSContext.capturePrm,2);
     gFFWSContext.capturePrm.outQueParams[0].nextLink    = gFFWSContext.dupId[0];
     MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.captureId,&gFFWSContext.capturePrm,sizeof(CaptureLink_CreateParams));

     /**Dup Link 0**/
     gFFWSContext.dupPrm[0].inQueParams.prevLinkId   = gVcapModuleContext.captureId;
     gFFWSContext.dupPrm[0].inQueParams.prevLinkQueId  = 0;
     gFFWSContext.dupPrm[0].numOutQue      = 2;
     gFFWSContext.dupPrm[0].notifyNextLink     = TRUE;
     gFFWSContext.dupPrm[0].outQueParams[0].nextLink  = gVcapModuleContext.sclrId[0];
     gFFWSContext.dupPrm[0].outQueParams[1].nextLink  = gVcapModuleContext.sclrId[1]; 
     MULTICH_FFWS_CREATE_LINK(gFFWSContext.dupId[0],&gFFWSContext.dupPrm[0],sizeof(DupLink_CreateParams));

     /**SCALAR Link PARM INIT**/
     for(i=0; i<NUM_SCALAR_LINK; i++)
     {
      //gFFWSContext.sclrPrm[iPrm].pathId     = SCLR_LINK_SEC0_SC3;
      gFFWSContext.sclrPrm[i].inQueParams.prevLinkId  = gFFWSContext.dupId[0];
         gFFWSContext.sclrPrm[i].inQueParams.prevLinkQueId = i;
         gFFWSContext.sclrPrm[i].outQueParams.nextLink  = gFFWSContext.mergeId[0];
      gFFWSContext.sclrPrm[i].cropEnable     = TRUE;
         gFFWSContext.sclrPrm[i].tilerEnable     = FALSE;
         gFFWSContext.sclrPrm[i].enableLineSkipSc   = FALSE;
         gFFWSContext.sclrPrm[i].inputFrameRate    = 25;
         gFFWSContext.sclrPrm[i].outputFrameRate    = 25;
         //gFFWSContext.sclrPrm[i].outDataFormat             = SYSTEM_DF_YUV420SP_UV;
         gFFWSContext.sclrPrm[i].scaleMode     = SCLR_SCALE_MODE_ABSOLUTE;
         gFFWSContext.sclrPrm[i].outScaleFactor.absoluteResolution.outWidth = 768;//1920;
         gFFWSContext.sclrPrm[i].outScaleFactor.absoluteResolution.outHeight = 576;//1080;
      MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.sclrId[i],&gFFWSContext.sclrPrm[i],sizeof(SclrLink_CreateParams));
     }

     /* MERGE 0 Link PARM INIT */
        gFFWSContext.mergePrm[0].numInQue                     = 2;
        gFFWSContext.mergePrm[0].inQueParams[0].prevLinkId    = gVcapModuleContext.sclrId[0];
        gFFWSContext.mergePrm[0].inQueParams[0].prevLinkQueId = 0;
        gFFWSContext.mergePrm[0].inQueParams[1].prevLinkId    = gVcapModuleContext.sclrId[1];
        gFFWSContext.mergePrm[0].inQueParams[1].prevLinkQueId = 0;
        //gFFWSContext.mergePrm[0].outQueParams.nextLink        = gVcapModuleContext.ipcFramesOutVpssId[0];
        gFFWSContext.mergePrm[0].outQueParams.nextLink        = gVcapModuleContext.deiId[0];
     //gFFWSContext.mergePrm[0].outQueParams.nextLink        = gVcapModuleContext.nsfId[0];
     gFFWSContext.mergePrm[0].notifyNextLink               = TRUE; 
     MULTICH_FFWS_CREATE_LINK(gFFWSContext.mergeId[0],&gFFWSContext.mergePrm[0],sizeof(MergeLink_CreateParams));
    #if 1
     /** DEI HQ Link*/
     gFFWSContext.deiPrm[0].inQueParams.prevLinkId   = gFFWSContext.mergeId[0];
     gFFWSContext.deiPrm[0].inQueParams.prevLinkQueId  = 0;
     Multich_ffws_set_deiHQ_prm(&gFFWSContext.deiPrm[0]);
     gFFWSContext.deiPrm[0].outQueParams[DEI_LINK_OUT_QUE_DEI_SC].nextLink = gFFWSContext.dupId[1];
     //gFFWSContext.deiPrm[0].outQueParams[DEI_LINK_OUT_QUE_DEI_SC].nextLink = gFFWSContext.mergeId[1]; 
     //gFFWSContext.deiPrm[0].outQueParams[DEI_LINK_OUT_QUE_DEI_SC].nextLink = gVdisModuleContext.swMsId[0];
     //gFFWSContext.deiPrm[0].outQueParams[0].nextLink = gVcapModuleContext.ipcFramesOutVpssId[0];
     //gFFWSContext.mergePrm[1].inQueParams[1].prevLinkId  = gVcapModuleContext.deiId[0];
     //gFFWSContext.mergePrm[1].inQueParams[1].prevLinkQueId= DEI_LINK_OUT_QUE_DEI_SC;
     MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.deiId[0],&gFFWSContext.deiPrm[0],sizeof(DeiLink_CreateParams));
    #endif

    #if 0
     /* NSF Link PARM INIT */
        MULTICH_INIT_STRUCT(NsfLink_CreateParams,gFFWSContext.nsfPrm);
        gFFWSContext.nsfPrm.bypassNsf                   = FALSE;
        gFFWSContext.nsfPrm.tilerEnable                 = FALSE;
        gFFWSContext.nsfPrm.inQueParams.prevLinkId      = gFFWSContext.mergeId[0];
        gFFWSContext.nsfPrm.inQueParams.prevLinkQueId   = 0;
        gFFWSContext.nsfPrm.numOutQue                   = 1;
        gFFWSContext.nsfPrm.outQueParams[0].nextLink    = gFFWSContext.dupId[1];
        //gFFWSContext.nsfPrm.outQueParams[0].nextLink    = gVcapModuleContext.ipcFramesOutVpssId[0];
     MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.nsfId[0],&gFFWSContext.nsfPrm,sizeof(NsfLink_CreateParams));
    #endif


    #if 1
     /**Dup Link 1*/
     gFFWSContext.dupPrm[1].inQueParams.prevLinkId   = gVcapModuleContext.deiId[0];
     //gFFWSContext.dupPrm[1].inQueParams.prevLinkId   = gVcapModuleContext.nsfId[0];
     gFFWSContext.dupPrm[1].inQueParams.prevLinkQueId  = 0;
     gFFWSContext.dupPrm[1].numOutQue      = 2;
     gFFWSContext.dupPrm[1].notifyNextLink     = TRUE;
     gFFWSContext.dupPrm[1].outQueParams[0].nextLink  = gVcapModuleContext.ipcFramesOutVpssId[0];
     //gFFWSContext.dupPrm[1].outQueParams[1].nextLink  = gVcapModuleContext.nsfId[0]; 
     gFFWSContext.dupPrm[1].outQueParams[1].nextLink  = gVcapModuleContext.ipcFramesOutVpssId[1]; 
     MULTICH_FFWS_CREATE_LINK(gFFWSContext.dupId[1],&gFFWSContext.dupPrm[1],sizeof(DupLink_CreateParams));
    #endif

     i=0;
     for(i=0; i<NUM_ALG_LINK; i++) 
     {
         IpcFramesInLinkRTOS_CreateParams_Init(&gFFWSContext.ipcFramesInDspPrm[i]);
         IpcFramesOutLinkRTOS_CreateParams_Init(&gFFWSContext.ipcFramesOutVpssPrm[i]);
         AlgLink_CreateParams_Init(&gFFWSContext.dspAlgPrm[i]);
     }

     /**Ipc Frame out vpss Link 0*/
     gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.inQueParams.prevLinkId  = gFFWSContext.dupId[1];
     //gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.inQueParams.prevLinkId  = gVcapModuleContext.nsfId[0];
     gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.inQueParams.prevLinkQueId = 0;
     gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.notifyPrevLink       = TRUE;
     gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.numOutQue        = 1;
     //gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.outQueParams[0].nextLink   = gVdisModuleContext.swMsId[0];
     gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.outQueParams[0].nextLink   = gFFWSContext.mergeId[1];
     //gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.outQueParams[0].nextLink   = gFFWSContext.dupId[1];
     gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.notifyNextLink       = TRUE;
     gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.processLink       = gVcapModuleContext.ipcFramesInDspId[0];
     gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.notifyProcessLink    = TRUE;
     MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.ipcFramesOutVpssId[0],
           &gFFWSContext.ipcFramesOutVpssPrm[0],
           sizeof(IpcFramesOutLinkRTOS_CreateParams));
     
     /**Ipc Frame in dsp Link 1*/
     gFFWSContext.ipcFramesInDspPrm[0].baseCreateParams.inQueParams.prevLinkId   = gVcapModuleContext.ipcFramesOutVpssId[0];
     gFFWSContext.ipcFramesInDspPrm[0].baseCreateParams.inQueParams.prevLinkQueId    = 0;
     gFFWSContext.ipcFramesInDspPrm[0].baseCreateParams.numOutQue        = 1;
     gFFWSContext.ipcFramesInDspPrm[0].baseCreateParams.outQueParams[0].nextLink     = gVcapModuleContext.dspAlgId[0];
     gFFWSContext.ipcFramesInDspPrm[0].baseCreateParams.notifyPrevLink       = TRUE;
     gFFWSContext.ipcFramesInDspPrm[0].baseCreateParams.notifyNextLink       = TRUE;
     gFFWSContext.ipcFramesInDspPrm[0].baseCreateParams.noNotifyMode        = FALSE;
     MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.ipcFramesInDspId[0],
           &gFFWSContext.ipcFramesInDspPrm[0],
           sizeof(IpcFramesInLinkRTOS_CreateParams));
     
     /** dsp Alg0 Link*/ 
     gFFWSContext.dspAlgPrm[0].inQueParams.prevLinkId     = gVcapModuleContext.ipcFramesInDspId[0];
     gFFWSContext.dspAlgPrm[0].inQueParams.prevLinkQueId     = 0;
     
     gFFWSContext.dspAlgPrm[0].enableCYLAlg  = TRUE;
     gFFWSContext.dspAlgPrm[0].enablePANOAlg = TRUE;
     Multich_ffws_set_alg_prm(&gFFWSContext.dspAlgPrm[0]);
     gFFWSContext.dspAlgPrm[0].outQueParams[0].nextLink     = SYSTEM_LINK_ID_INVALID;
     //OSA_printf(" %s line %d gVcapModuleContext.dspAlgId[0] %p \r\n",__func__,__LINE__,gVcapModuleContext.dspAlgId[0]);
     MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.dspAlgId[0],&gFFWSContext.dspAlgPrm[0],sizeof(AlgLink_CreateParams));

    #if 1
     /**Ipc Frame out vpss Link 1*/
     gFFWSContext.ipcFramesOutVpssPrm[1].baseCreateParams.inQueParams.prevLinkId  = gFFWSContext.dupId[1];
     //gFFWSContext.ipcFramesOutVpssPrm[1].baseCreateParams.inQueParams.prevLinkId  = gVcapModuleContext.nsfId[0];
     gFFWSContext.ipcFramesOutVpssPrm[1].baseCreateParams.inQueParams.prevLinkQueId = 1;
     gFFWSContext.ipcFramesOutVpssPrm[1].baseCreateParams.notifyPrevLink       = TRUE;
     gFFWSContext.ipcFramesOutVpssPrm[1].baseCreateParams.numOutQue        = 1;
     gFFWSContext.ipcFramesOutVpssPrm[1].baseCreateParams.outQueParams[0].nextLink   = gFFWSContext.mergeId[1];
     gFFWSContext.ipcFramesOutVpssPrm[1].baseCreateParams.notifyNextLink       = TRUE;
     gFFWSContext.ipcFramesOutVpssPrm[1].baseCreateParams.processLink       = gVcapModuleContext.ipcFramesInDspId[1];
     gFFWSContext.ipcFramesOutVpssPrm[1].baseCreateParams.notifyProcessLink    = TRUE;
       MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.ipcFramesOutVpssId[1],
           &gFFWSContext.ipcFramesOutVpssPrm[1],
           sizeof(IpcFramesOutLinkRTOS_CreateParams));

     /**Ipc Frame in dsp Link 1 */
     //gFFWSContext.selectPrms.inQueParams.prevLinkId = gVcapModuleContext.ipcFramesOutVpssId[1];
     //gFFWSContext.selectPrms.inQueParams.prevLinkQueId = 0;
     gFFWSContext.ipcFramesInDspPrm[1].baseCreateParams.inQueParams.prevLinkId   = gVcapModuleContext.ipcFramesOutVpssId[1];
     gFFWSContext.ipcFramesInDspPrm[1].baseCreateParams.inQueParams.prevLinkQueId    = 0;
     gFFWSContext.ipcFramesInDspPrm[1].baseCreateParams.numOutQue        = 1;
     gFFWSContext.ipcFramesInDspPrm[1].baseCreateParams.outQueParams[0].nextLink     = gVcapModuleContext.dspAlgId[1];
     gFFWSContext.ipcFramesInDspPrm[1].baseCreateParams.notifyPrevLink       = TRUE;
     gFFWSContext.ipcFramesInDspPrm[1].baseCreateParams.notifyNextLink       = TRUE;
     gFFWSContext.ipcFramesInDspPrm[1].baseCreateParams.noNotifyMode        = FALSE;
     MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.ipcFramesInDspId[1],
           &gFFWSContext.ipcFramesInDspPrm[1],
           sizeof(IpcFramesInLinkRTOS_CreateParams)); 

     /** dsp Alg Link 1 */
     gFFWSContext.dspAlgPrm[1].inQueParams.prevLinkId     = gVcapModuleContext.ipcFramesInDspId[1];
     gFFWSContext.dspAlgPrm[1].inQueParams.prevLinkQueId     = 0;
     //gFFWSContext.dspAlgPrm[1].enableCYLAlg = TRUE;
     //gFFWSContext.dspAlgPrm[1].enablePANOAlg = TRUE;
     //Multich_ffws_set_alg_prm(&gFFWSContext.dspAlgPrm[1]);
     gFFWSContext.dspAlgPrm[1].outQueParams[1].nextLink     = SYSTEM_LINK_ID_INVALID;
     MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.dspAlgId[1],&gFFWSContext.dspAlgPrm[1],sizeof(AlgLink_CreateParams));
    #endif

    #if 0
     /* IPC_BITS_HOSTTOVIDEO Link PARM INIT */  
        gFFWSContext.ipcBitsOutHostPrm.baseCreateParams.outQueParams[0].nextLink = gVdecModuleContext.ipcBitsInRTOSId;
        gFFWSContext.ipcBitsOutHostPrm.baseCreateParams.notifyNextLink       = FALSE;
        gFFWSContext.ipcBitsOutHostPrm.baseCreateParams.notifyPrevLink       = FALSE;
        gFFWSContext.ipcBitsOutHostPrm.baseCreateParams.noNotifyMode         = TRUE;
        gFFWSContext.ipcBitsOutHostPrm.baseCreateParams.numOutQue            = 1;
        gFFWSContext.ipcBitsOutHostPrm.inQueInfo.numCh                       = gVdecModuleContext.vdecConfig.numChn;

     for(i=0; i<gFFWSContext.ipcBitsOutHostPrm.inQueInfo.numCh; i++)
        {
            gFFWSContext.ipcBitsOutHostPrm.inQueInfo.chInfo[i].width =
                gVdecModuleContext.vdecConfig.decChannelParams[i].maxVideoWidth;

            gFFWSContext.ipcBitsOutHostPrm.inQueInfo.chInfo[i].height =
                gVdecModuleContext.vdecConfig.decChannelParams[i].maxVideoHeight;

            gFFWSContext.ipcBitsOutHostPrm.inQueInfo.chInfo[i].scanFormat =
                SYSTEM_SF_PROGRESSIVE;
           //gFFWSContext.ipcBitsOutHostPrm.numBufPerCh[iPrm] = 6;
        }
     
        gFFWSContext.ipcBitsInVideoPrm.baseCreateParams.inQueParams.prevLinkId    = gVdecModuleContext.ipcBitsOutHLOSId;
        gFFWSContext.ipcBitsInVideoPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
        gFFWSContext.ipcBitsInVideoPrm.baseCreateParams.outQueParams[0].nextLink  = gVdecModuleContext.decId;
        gFFWSContext.ipcBitsInVideoPrm.baseCreateParams.noNotifyMode              = TRUE;
        gFFWSContext.ipcBitsInVideoPrm.baseCreateParams.notifyNextLink            = TRUE;
        gFFWSContext.ipcBitsInVideoPrm.baseCreateParams.notifyPrevLink            = FALSE;
        gFFWSContext.ipcBitsInVideoPrm.baseCreateParams.numOutQue                 = 1;

     for(i=0; i<gFFWSContext.ipcBitsOutHostPrm.inQueInfo.numCh; i++)
        {
            if(gVdecModuleContext.vdecConfig.decChannelParams[i].isCodec == VDEC_CHN_H264)
                gFFWSContext.decPrm.chCreateParams[i].format                 = IVIDEO_H264HP;
            else if(gVdecModuleContext.vdecConfig.decChannelParams[i].isCodec == VDEC_CHN_MPEG4)
                gFFWSContext.decPrm.chCreateParams[i].format                 = IVIDEO_MPEG4ASP;
            else if(gVdecModuleContext.vdecConfig.decChannelParams[i].isCodec == VDEC_CHN_MJPEG)
                gFFWSContext.decPrm.chCreateParams[i].format                 = IVIDEO_MJPEG;

            gFFWSContext.decPrm.chCreateParams[i].numBufPerCh
                             = gVdecModuleContext.vdecConfig.decChannelParams[i].numBufPerCh;
            gFFWSContext.decPrm.chCreateParams[i].profile                = IH264VDEC_PROFILE_ANY;
            gFFWSContext.decPrm.chCreateParams[i].displayDelay
                             = gVdecModuleContext.vdecConfig.decChannelParams[i].displayDelay;
            gFFWSContext.decPrm.chCreateParams[i].dpbBufSizeInFrames = IH264VDEC_DPB_NUMFRAMES_AUTO;
            gFFWSContext.decPrm.chCreateParams[i].processCallLevel   = VDEC_FRAMELEVELPROCESSCALL;
            //decPrm.chCreateParams[iPrm].processCallLevel   = VDEC_FIELDLEVELPROCESSCALL;

            gFFWSContext.decPrm.chCreateParams[i].targetMaxWidth  =
                gFFWSContext.ipcBitsOutHostPrm.inQueInfo.chInfo[i].width;

            gFFWSContext.decPrm.chCreateParams[i].targetMaxHeight =
                gFFWSContext.ipcBitsOutHostPrm.inQueInfo.chInfo[i].height;

            gFFWSContext.decPrm.chCreateParams[i].defaultDynamicParams.targetFrameRate =
                gVdecModuleContext.vdecConfig.decChannelParams[i].dynamicParam.frameRate;

            gFFWSContext.decPrm.chCreateParams[i].defaultDynamicParams.targetBitRate =
                gVdecModuleContext.vdecConfig.decChannelParams[i].dynamicParam.targetBitRate;
            gFFWSContext.decPrm.chCreateParams[i].tilerEnable = FALSE;
        }

        gFFWSContext.decPrm.inQueParams.prevLinkId       = gVdecModuleContext.ipcBitsInRTOSId;
        gFFWSContext.decPrm.inQueParams.prevLinkQueId    = 0;
        gFFWSContext.decPrm.outQueParams.nextLink        = gFFWSContext.ipcOutVideoId;

        gFFWSContext.ipcOutVideoPrm.inQueParams.prevLinkId    = gVdecModuleContext.decId;
        gFFWSContext.ipcOutVideoPrm.inQueParams.prevLinkQueId = 0;
        gFFWSContext.ipcOutVideoPrm.outQueParams[0].nextLink  = gFFWSContext.ipcInVpssId;
        gFFWSContext.ipcOutVideoPrm.notifyNextLink            = TRUE;
        gFFWSContext.ipcOutVideoPrm.notifyPrevLink            = TRUE;
        gFFWSContext.ipcOutVideoPrm.numOutQue                 = 1;

        gFFWSContext.ipcInVpssPrm.inQueParams.prevLinkId    = gFFWSContext.ipcOutVideoId;
        gFFWSContext.ipcInVpssPrm.inQueParams.prevLinkQueId = 0;
        gFFWSContext.ipcInVpssPrm.notifyNextLink            = TRUE;
        gFFWSContext.ipcInVpssPrm.notifyPrevLink            = TRUE;
        gFFWSContext.ipcInVpssPrm.numOutQue                 = 1;
        gFFWSContext.ipcInVpssPrm.outQueParams[0].nextLink = gFFWSContext.mergeId[1];
    #endif


     /* MERGE 1 Link PARM INIT */
    #if 0
     gFFWSContext.mergePrm[1].numInQue                     = 3;
        gFFWSContext.mergePrm[1].inQueParams[0].prevLinkId    = gVcapModuleContext.ipcFramesOutVpssId[0];
        gFFWSContext.mergePrm[1].inQueParams[0].prevLinkQueId = 0;
        gFFWSContext.mergePrm[1].inQueParams[1].prevLinkId    = gVcapModuleContext.ipcFramesOutVpssId[1];
        gFFWSContext.mergePrm[1].inQueParams[1].prevLinkQueId = 0;
        gFFWSContext.mergePrm[1].inQueParams[2].prevLinkId    = gFFWSContext.ipcInVpssId;
        gFFWSContext.mergePrm[1].inQueParams[2].prevLinkQueId = 0;
    #else

     gFFWSContext.mergePrm[1].numInQue                     = 2;
        //gFFWSContext.mergePrm[1].inQueParams[0].prevLinkId    = gVcapModuleContext.deiId[0];
     gFFWSContext.mergePrm[1].inQueParams[0].prevLinkId    = gVcapModuleContext.ipcFramesOutVpssId[0];
     gFFWSContext.mergePrm[1].inQueParams[0].prevLinkQueId = 0;
        gFFWSContext.mergePrm[1].inQueParams[1].prevLinkId    = gVcapModuleContext.ipcFramesOutVpssId[1];
        gFFWSContext.mergePrm[1].inQueParams[1].prevLinkQueId = 0;
    #endif

     //gFFWSContext.mergePrm[1].outQueParams.nextLink        = gFFWSContext.dupId[1];
     gFFWSContext.mergePrm[1].outQueParams.nextLink        = gFFWSContext.dupId[2];
     //gFFWSContext.mergePrm[1].outQueParams.nextLink        = gVdisModuleContext.swMsId[0];
     gFFWSContext.mergePrm[1].notifyNextLink               = TRUE; 
     //gFFWSContext.mergePrm[0].outQueParams.nextLink        = gVcapModuleContext.ipcFramesOutVpssId[0];
     MULTICH_FFWS_CREATE_LINK(gFFWSContext.mergeId[1],&gFFWSContext.mergePrm[1],sizeof(MergeLink_CreateParams));


    #if 1
     /**Dup Link 2*/
     gFFWSContext.dupPrm[2].inQueParams.prevLinkId   = gFFWSContext.mergeId[1];
     gFFWSContext.dupPrm[2].inQueParams.prevLinkQueId  = 0;
     gFFWSContext.dupPrm[2].numOutQue      = 2;
     gFFWSContext.dupPrm[2].notifyNextLink     = TRUE;
     gFFWSContext.dupPrm[2].outQueParams[0].nextLink  = gVdisModuleContext.swMsId[0];
     gFFWSContext.dupPrm[2].outQueParams[1].nextLink  = gVcapModuleContext.nsfId[0];
     //gFFWSContext.dupPrm[2].outQueParams[1].nextLink  = gFFWSContext.ipcOutVpssId; 
     MULTICH_FFWS_CREATE_LINK(gFFWSContext.dupId[2],&gFFWSContext.dupPrm[2],sizeof(DupLink_CreateParams));
    #else
     /**Dup Link 2*/
     gFFWSContext.dupPrm[1].inQueParams.prevLinkId   = gVcapModuleContext.ipcFramesOutVpssId[0];
     gFFWSContext.dupPrm[1].inQueParams.prevLinkQueId  = 0;
     gFFWSContext.dupPrm[1].numOutQue      = 2;
     gFFWSContext.dupPrm[1].notifyNextLink     = TRUE;
     gFFWSContext.dupPrm[1].outQueParams[0].nextLink  = gVdisModuleContext.swMsId[0];
     gFFWSContext.dupPrm[1].outQueParams[1].nextLink  = gFFWSContext.ipcOutVpssId; 
     MULTICH_FFWS_CREATE_LINK(gFFWSContext.dupId[1],&gFFWSContext.dupPrm[1],sizeof(DupLink_CreateParams));

    #endif

     /**SW+Display */
     //gFFWSContext.swMsPrm[0].inQueParams.prevLinkId  = gFFWSContext.dupId[1];
     //gFFWSContext.swMsPrm[0].inQueParams.prevLinkId   = gVcapModuleContext.ipcFramesOutVpssId[0];//gVcapModuleContext.deiId[0];
     //gFFWSContext.swMsPrm[0].inQueParams.prevLinkId   = gFFWSContext.mergeId[1];
     gFFWSContext.swMsPrm[0].inQueParams.prevLinkId  = gFFWSContext.dupId[2];
     gFFWSContext.swMsPrm[0].inQueParams.prevLinkQueId  = 0;
     for( i = 0; i < 1; i++ )
     {
      SwMsLink_CreateParams * swMsPrm   = &gFFWSContext.swMsPrm[i];
      DisplayLink_CreateParams * displayPrm  = &gFFWSContext.displayPrm[i];
      
      UInt32 resolution = gVdisModuleContext.vdisConfig.deviceParams[i].resolution;
      UInt32 enableLayoutGridDraw = gVdisModuleContext.vdisConfig.enableLayoutGridDraw;

      Multich_ffws_set_display_prm(swMsPrm, displayPrm, resolution, enableLayoutGridDraw);

      swMsPrm->outQueParams.nextLink = gVdisModuleContext.displayId[i];

      displayPrm->inQueParams[0].prevLinkId  = gVdisModuleContext.swMsId[i];
      displayPrm->inQueParams[0].prevLinkQueId = 0;

      MULTICH_FFWS_CREATE_LINK(gVdisModuleContext.swMsId[i],swMsPrm,sizeof(SwMsLink_CreateParams));
      MULTICH_FFWS_CREATE_LINK(gVdisModuleContext.displayId[i],displayPrm,sizeof(DisplayLink_CreateParams));
     }
    #if 1 

     /* NSF Link PARM INIT */
        MULTICH_INIT_STRUCT(NsfLink_CreateParams,gFFWSContext.nsfPrm);
        gFFWSContext.nsfPrm.bypassNsf                   = FALSE;
        gFFWSContext.nsfPrm.tilerEnable                 = FALSE;
        gFFWSContext.nsfPrm.inQueParams.prevLinkId      = gFFWSContext.dupId[2];
        gFFWSContext.nsfPrm.inQueParams.prevLinkQueId   = 0;
        gFFWSContext.nsfPrm.numOutQue                   = 1;
        gFFWSContext.nsfPrm.outQueParams[0].nextLink    = gFFWSContext.ipcOutVpssId;
        //gFFWSContext.nsfPrm.outQueParams[0].nextLink    = gVcapModuleContext.ipcFramesOutVpssId[0];
     MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.nsfId[0],&gFFWSContext.nsfPrm,sizeof(NsfLink_CreateParams));
     
     /** IPC VPSS OUT Link*/
     //gFFWSContext.ipcOutVpssPrm.inQueParams.prevLinkId  = gFFWSContext.mergeId[1];
     gFFWSContext.ipcOutVpssPrm.inQueParams.prevLinkId   = gVcapModuleContext.nsfId[0];
     //gFFWSContext.ipcOutVpssPrm.inQueParams.prevLinkId   = gFFWSContext.dupId[2];
     gFFWSContext.ipcOutVpssPrm.inQueParams.prevLinkQueId = 1;
     gFFWSContext.ipcOutVpssPrm.numOutQue     = 1;
     gFFWSContext.ipcOutVpssPrm.outQueParams[0].nextLink  = gFFWSContext.ipcInVideoId;
     gFFWSContext.ipcOutVpssPrm.notifyNextLink       = FALSE;
     gFFWSContext.ipcOutVpssPrm.notifyPrevLink       = TRUE;
     gFFWSContext.ipcOutVpssPrm.noNotifyMode        = TRUE;
     MULTICH_FFWS_CREATE_LINK(gFFWSContext.ipcOutVpssId, &gFFWSContext.ipcOutVpssPrm, sizeof(IpcLink_CreateParams ));

     /**IPC IN VIDEO Link*/ 
     gFFWSContext.ipcInVideoPrm.inQueParams.prevLinkId     = gFFWSContext.ipcOutVpssId;
     gFFWSContext.ipcInVideoPrm.inQueParams.prevLinkQueId = 0;
     gFFWSContext.ipcInVideoPrm.numOutQue     = 1;  
     gFFWSContext.ipcInVideoPrm.outQueParams[0].nextLink     = gVencModuleContext.encId;
     gFFWSContext.ipcInVideoPrm.notifyNextLink       = TRUE;
     gFFWSContext.ipcInVideoPrm.notifyPrevLink       = FALSE;
     gFFWSContext.ipcInVideoPrm.noNotifyMode        = TRUE;
     MULTICH_FFWS_CREATE_LINK(gFFWSContext.ipcInVideoId, &gFFWSContext.ipcInVideoPrm, sizeof(IpcLink_CreateParams ) );
     
     /**ENC Link */
     gFFWSContext.encPrm.inQueParams.prevLinkId       = gFFWSContext.ipcInVideoId;
     gFFWSContext.encPrm.inQueParams.prevLinkQueId     = 0;
     Multich_ffws_set_enclink_prm(&gFFWSContext.encPrm);
     gFFWSContext.encPrm.outQueParams.nextLink       = gVencModuleContext.ipcBitsOutRTOSId;
     MULTICH_FFWS_CREATE_LINK(gVencModuleContext.encId,  &gFFWSContext.encPrm, sizeof( EncLink_CreateParams ));

     /**IPC BITS OUT VIDEO Link */
     gFFWSContext.ipcBitsOutVideoPrm.baseCreateParams.inQueParams.prevLinkId     = gVencModuleContext.encId;
     gFFWSContext.ipcBitsOutVideoPrm.baseCreateParams.inQueParams.prevLinkQueId  = 0;
     gFFWSContext.ipcBitsOutVideoPrm.baseCreateParams.numOutQue        = 1;
     gFFWSContext.ipcBitsOutVideoPrm.baseCreateParams.outQueParams[0].nextLink   = gVencModuleContext.ipcBitsInHLOSId;
     MultiCh_ipcBitsInitCreateParams_BitsOutRTOS( &gFFWSContext.ipcBitsOutVideoPrm, TRUE );
     MULTICH_FFWS_CREATE_LINK(gVencModuleContext.ipcBitsOutRTOSId, &gFFWSContext.ipcBitsOutVideoPrm, sizeof( IpcBitsOutLinkRTOS_CreateParams ));

     /**IPC BITS IN HOST Link */
     gFFWSContext.ipcBitsInHostPrm.baseCreateParams.inQueParams.prevLinkId  = gVencModuleContext.ipcBitsOutRTOSId;
     gFFWSContext.ipcBitsInHostPrm.baseCreateParams.inQueParams.prevLinkQueId  = 0;
     gFFWSContext.ipcBitsInHostPrm.baseCreateParams.numOutQue        = 1;
     gFFWSContext.ipcBitsInHostPrm.baseCreateParams.outQueParams[0].nextLink   = SYSTEM_LINK_ID_INVALID;
     MultiCh_ipcBitsInitCreateParams_BitsInHLOS( &gFFWSContext.ipcBitsInHostPrm );

     MULTICH_FFWS_CREATE_LINK(gVencModuleContext.ipcBitsInHLOSId,  &gFFWSContext.ipcBitsInHostPrm, sizeof( IpcBitsInLinkHLOS_CreateParams));
    #endif

    }

    The following is error.

    1771:!!!SLAVE CORE [VIDEO-M3] DOWN!!!
    SystemLink_copySlaveCoreExceptionContext:120
    mmap of [0xbe000000:36864]
    mmap virt addresss:0x40104000
    munmap of [0x40104000:36864]
    SystemLink_copySlaveCoreExceptionContext:127
     [m3video]  8072: IPC_IN_M3   : Create in progress !!!
     [m3vpss ]    7 |   7 |    0,    0 |   352 x    264 |   704 /   704 | NON-TILED   |  640,  864 |   640 x    216 |  3840 /      0 | NON-TILED   |       ON |    0 |  422|
     [m3video]  8072: SYSTEM: Opening ListMP [VPSS-M3_IPC_OUT_0] ...
     [m3vpss ]    8 |   8 |    0,    0 |   352 x    264 |   704 /   704 | NON-TILED   | 1280,  864 |   640 x    216 |  3840 /      0 | NON-TILED   |       ON |    0 |  422|
     [m3video]  8072: SYSTEM: Opening ListMP [VPSS-M3_IPC_IN_0] ...
     [m3vpss ] 
     [m3video]  8074: IPC_IN_M3   : Create Done !!!
     [m3video]  8095: ENCODE: Create in progress ... !!!
     [m3video] ENCODE: inQueInfo.numCh 4!!!
     [m3vpss ] SWMS:HEAPID:0        USED:360
     [m3video]  8149: ENCODE: Creating CH0 of 768 x 576, pitch = (1536, 1536) [PROGRESSIVE] [NON-TILED  ], bitrate = 0 Kbps ...
     [m3vpss ] SWMS:HEAPID:1        USED:43776
     [m3video]  8149: Assertion @ Line: 750 in links_m3video/iva_enc/encLink_common.c: pChAlgCreatePrm->inputChromaFormat == XDM_YUV_420SP : failed !!!
     [m3vpss ] SWMS:HEAPID:4        USED:20736000
     [m3vpss ]  8009: SWMS: Create Done !!!

    1484:!!!SLAVE CORE [VPSS-M3] DOWN!!!
    SystemLink_copySlaveCoreExceptionContext:120
    mmap of [0xbe020000:36864]
    mmap virt addresss:0x40150000
    munmap of [0x40150000:36864]
    SystemLink_copySlaveCoreExceptionContext:127
     [c6xdsp ] ALGLINK:HEAPID:0     USED:3321280
     [m3vpss ]  5682: Assertion @ Line: 56 in links_common/merge/mergeLink_tsk.c: pPrm->inQueParams[inQue].prevLinkQueId < pObj->inTskInfo[inQue].numQue : failed !!!
     [c6xdsp ] ALGLINK:HEAPID:1     USED:107544
     [c6xdsp ]  5010: ALG : Create Done !!!
     [c6xdsp ]  5054: IPC_FRAMES_IN   : Create in progress !!!
     [c6xdsp ]  5054: SYSTEM: Opening ListMP [VPSS-M3_IPC_OUT_20] ...
     [c6xdsp ]  5054: SYSTEM: Opening ListMP [VPSS-M3_IPC_IN_20] ...
     [c6xdsp ] IPC_FRAMES_IN:HEAPID:0       USED:304
     [c6xdsp ]  5055: IPC_FRAMES_IN   : Create Done !!!
     [c6xdsp ]  5076: ALG : Create in progress !!!
     [c6xdsp ]  5081: ALG : Create Done !!!

     

    The following is a test link.

    static void Multich_ffws_connect_links()
    {
     UInt32 i =0;
     
     /**Capture Link**/
     Multich_ffws_set_capture_prm(&gFFWSContext.capturePrm,2);
     gFFWSContext.capturePrm.outQueParams[0].nextLink    = gFFWSContext.dupId[0];
     MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.captureId,&gFFWSContext.capturePrm,sizeof(CaptureLink_CreateParams));

     /**Dup Link 0**/
     gFFWSContext.dupPrm[0].inQueParams.prevLinkId   = gVcapModuleContext.captureId;
     gFFWSContext.dupPrm[0].inQueParams.prevLinkQueId  = 0;
     gFFWSContext.dupPrm[0].numOutQue    = 2;
     gFFWSContext.dupPrm[0].notifyNextLink    = TRUE;
     gFFWSContext.dupPrm[0].outQueParams[0].nextLink  = gVdisModuleContext.swMsId[0];
     gFFWSContext.dupPrm[0].outQueParams[1].nextLink  = gFFWSContext.ipcOutVpssId; 
     MULTICH_FFWS_CREATE_LINK(gFFWSContext.dupId[0],&gFFWSContext.dupPrm[0],sizeof(DupLink_CreateParams));

     /**SW+Display */
     //gFFWSContext.swMsPrm[0].inQueParams.prevLinkId  = gFFWSContext.dupId[1];
     //gFFWSContext.swMsPrm[0].inQueParams.prevLinkId   = gVcapModuleContext.ipcFramesOutVpssId[0];//gVcapModuleContext.deiId[0];
     //gFFWSContext.swMsPrm[0].inQueParams.prevLinkId   = gFFWSContext.mergeId[1];
     gFFWSContext.swMsPrm[0].inQueParams.prevLinkId  = gFFWSContext.dupId[0];
     gFFWSContext.swMsPrm[0].inQueParams.prevLinkQueId  = 0;
     for( i = 0; i < 1; i++ )
     {
      SwMsLink_CreateParams * swMsPrm   = &gFFWSContext.swMsPrm[i];
      DisplayLink_CreateParams * displayPrm  = &gFFWSContext.displayPrm[i];
      
      UInt32 resolution = gVdisModuleContext.vdisConfig.deviceParams[i].resolution;
      UInt32 enableLayoutGridDraw = gVdisModuleContext.vdisConfig.enableLayoutGridDraw;

      Multich_ffws_set_display_prm(swMsPrm, displayPrm, resolution, enableLayoutGridDraw);

      swMsPrm->outQueParams.nextLink = gVdisModuleContext.displayId[i];

      displayPrm->inQueParams[0].prevLinkId  = gVdisModuleContext.swMsId[i];
      displayPrm->inQueParams[0].prevLinkQueId = 0;

      MULTICH_FFWS_CREATE_LINK(gVdisModuleContext.swMsId[i],swMsPrm,sizeof(SwMsLink_CreateParams));
      MULTICH_FFWS_CREATE_LINK(gVdisModuleContext.displayId[i],displayPrm,sizeof(DisplayLink_CreateParams));
     }
    #if 1 
     /** IPC VPSS OUT Link*/
     gFFWSContext.ipcOutVpssPrm.inQueParams.prevLinkId  = gFFWSContext.dupId[0];
     gFFWSContext.ipcOutVpssPrm.inQueParams.prevLinkQueId = 1;
     gFFWSContext.ipcOutVpssPrm.numOutQue   = 1;
     gFFWSContext.ipcOutVpssPrm.outQueParams[0].nextLink  = gFFWSContext.ipcInVideoId;
     gFFWSContext.ipcOutVpssPrm.notifyNextLink  = FALSE;
     gFFWSContext.ipcOutVpssPrm.notifyPrevLink  = TRUE;
     gFFWSContext.ipcOutVpssPrm.noNotifyMode   = TRUE;
     MULTICH_FFWS_CREATE_LINK(gFFWSContext.ipcOutVpssId, &gFFWSContext.ipcOutVpssPrm, sizeof(IpcLink_CreateParams ));

     /**IPC IN VIDEO Link*/ 
     gFFWSContext.ipcInVideoPrm.inQueParams.prevLinkId     = gFFWSContext.ipcOutVpssId;
     gFFWSContext.ipcInVideoPrm.inQueParams.prevLinkQueId = 0;
     gFFWSContext.ipcInVideoPrm.numOutQue     = 1;  
     gFFWSContext.ipcInVideoPrm.outQueParams[0].nextLink     = gVencModuleContext.encId;
     gFFWSContext.ipcInVideoPrm.notifyNextLink       = TRUE;
     gFFWSContext.ipcInVideoPrm.notifyPrevLink       = FALSE;
     gFFWSContext.ipcInVideoPrm.noNotifyMode        = TRUE;
     MULTICH_FFWS_CREATE_LINK(gFFWSContext.ipcInVideoId, &gFFWSContext.ipcInVideoPrm, sizeof(IpcLink_CreateParams ) );
     
     /**ENC Link */
     gFFWSContext.encPrm.inQueParams.prevLinkId       = gFFWSContext.ipcInVideoId;
     gFFWSContext.encPrm.inQueParams.prevLinkQueId     = 0;
     Multich_ffws_set_enclink_prm(&gFFWSContext.encPrm);
     gFFWSContext.encPrm.outQueParams.nextLink       = gVencModuleContext.ipcBitsOutRTOSId;
     MULTICH_FFWS_CREATE_LINK(gVencModuleContext.encId,  &gFFWSContext.encPrm, sizeof( EncLink_CreateParams ));

     /**IPC BITS OUT VIDEO Link */
     gFFWSContext.ipcBitsOutVideoPrm.baseCreateParams.inQueParams.prevLinkId     = gVencModuleContext.encId;
     gFFWSContext.ipcBitsOutVideoPrm.baseCreateParams.inQueParams.prevLinkQueId  = 0;
     gFFWSContext.ipcBitsOutVideoPrm.baseCreateParams.numOutQue        = 1;
     gFFWSContext.ipcBitsOutVideoPrm.baseCreateParams.outQueParams[0].nextLink   = gVencModuleContext.ipcBitsInHLOSId;
     MultiCh_ipcBitsInitCreateParams_BitsOutRTOS( &gFFWSContext.ipcBitsOutVideoPrm, TRUE );
     MULTICH_FFWS_CREATE_LINK(gVencModuleContext.ipcBitsOutRTOSId, &gFFWSContext.ipcBitsOutVideoPrm, sizeof( IpcBitsOutLinkRTOS_CreateParams ));

     /**IPC BITS IN HOST Link */
     gFFWSContext.ipcBitsInHostPrm.baseCreateParams.inQueParams.prevLinkId  = gVencModuleContext.ipcBitsOutRTOSId;
     gFFWSContext.ipcBitsInHostPrm.baseCreateParams.inQueParams.prevLinkQueId  = 0;
     gFFWSContext.ipcBitsInHostPrm.baseCreateParams.numOutQue        = 1;
     gFFWSContext.ipcBitsInHostPrm.baseCreateParams.outQueParams[0].nextLink   = SYSTEM_LINK_ID_INVALID;
     MultiCh_ipcBitsInitCreateParams_BitsInHLOS( &gFFWSContext.ipcBitsInHostPrm );

     MULTICH_FFWS_CREATE_LINK(gVencModuleContext.ipcBitsInHLOSId,  &gFFWSContext.ipcBitsInHostPrm, sizeof( IpcBitsInLinkHLOS_CreateParams));
    #endif
    }

    The error information is as following:
     104: SYSTEM: System Common Init in progress !!!
     104: SYSTEM: IPC init in progress !!!
     120: SYSTEM: CPU [DSP] syslink proc ID is [0] !!!
     120: SYSTEM: CPU [VIDEO-M3] syslink proc ID is [1] !!!
     120: SYSTEM: CPU [VPSS-M3] syslink proc ID is [2] !!!
     120: SYSTEM: CPU [HOST] syslink proc ID is [3] !!!
     120: SYSTEM: Creating MsgQ Heap [IPC_MSGQ_MSG_HEAP_3] ...
     122: SYSTEM: Creating MsgQ [HOST_MSGQ] ...
     124: SYSTEM: Creating MsgQ [HOST_ACK_MSGQ] ...
     125: SYSTEM: Opening MsgQ [DSP_MSGQ] ...
     126: SYSTEM: Opening MsgQ [VIDEO-M3_MSGQ] ...
     126: SYSTEM: Opening MsgQ [VPSS-M3_MSGQ] ...
     127: SYSTEM: Notify register to [DSP] line 0, event 15 ...
     128: SYSTEM: Notify register to [VIDEO-M3] line 0, event 15 ...
     128: SYSTEM: Notify register to [VPSS-M3] line 0, event 15 ...
     129: SYSTEM: IPC init DONE !!!
     130: SYSTEM: Creating ListMP [HOST_IPC_OUT_24] in region 0 ...
     132: SYSTEM: Creating ListMP [HOST_IPC_IN_24] in region 0 ...
     133: SYSTEM: ListElem Shared Addr = 0x41845880
     134: SYSTEM: Creating ListMP [HOST_IPC_OUT_25] in region 0 ...
     136: SYSTEM: Creating ListMP [HOST_IPC_IN_25] in region 0 ...
     138: SYSTEM: ListElem Shared Addr = 0x4187aa80
     139: SYSTEM: Creating ListMP [HOST_IPC_OUT_19] in region 0 ...
     141: SYSTEM: Creating ListMP [HOST_IPC_IN_19] in region 0 ...
     143: SYSTEM: ListElem Shared Addr = 0x418afc80
     144: SYSTEM: Creating ListMP [HOST_IPC_OUT_20] in region 0 ...
     146: SYSTEM: Creating ListMP [HOST_IPC_IN_20] in region 0 ...
     147: SYSTEM: ListElem Shared Addr = 0x418f2f80
     148: SYSTEM: Creating ListMP [HOST_IPC_OUT_21] in region 0 ...
     150: SYSTEM: Creating ListMP [HOST_IPC_IN_21] in region 0 ...
     152: SYSTEM: ListElem Shared Addr = 0x41936280
     168: SYSTEM: System Common Init Done !!!
     [host] HDMI Ctrl :Initializing
     [host] HDMI Ctrl :Initialized

     [host] Vsys_allocBuf:Vsys_allocBuf srRegId, bufsize 0 1024

     [host] Vsys_allocBuf:Vsys_allocBuf srRegId, bufsize 0 2657664

     [host]  PANO_cylChnCreate line 304 status 0

     [host] Vsys_allocBuf:Vsys_allocBuf srRegId, bufsize 0 9953816

     [host]  Pano_stitchCreat line 97 status 0

     [host] ****Entered usecase ffws <816x>

     381: MCFW  : CPU Revision [ES2.0] !!!
     [m3vpss ]  4432: CAPTURE: Create in progress !!!
     [m3vpss ]  4461: CAPTURE: VIP0 PortA capture mode is [16-bit, Non-mux Discrete Sync - HSYNC_VSYNC] !!!
     [m3vpss ]  4674: CAPTURE: VIP1 PortA capture mode is [16-bit, Non-mux Discrete Sync - ACTVID_VSYNC] !!!
     [m3vpss ]  UTILS: DMA: Allocated CH (TCC) = 58 (58)
     [m3vpss ]  UTILS: DMA: 0 of 4: Allocated PaRAM = 58 (0x49004740)
     [m3vpss ]  UTILS: DMA: 1 of 4: Allocated PaRAM = 64 (0x49004800)
     [m3vpss ]  UTILS: DMA: 2 of 4: Allocated PaRAM = 65 (0x49004820)
     [m3vpss ]  UTILS: DMA: 3 of 4: Allocated PaRAM = 66 (0x49004840)
     [m3vpss ] CAPTURE::HEAPID:0    USED:520
     [m3vpss ] CAPTURE::HEAPID:4    USED:56975360
     [m3vpss ]  4709: CAPTURE: Create Done !!!
     [m3vpss ]  4734: DUP   : Create Done !!!
     [m3vpss ]  4755: SWMS: Create in progress !!!
     [m3vpss ]  UTILS: DMA: Allocated CH (TCC) = 59 (59)
     [m3vpss ]  UTILS: DMA: 0 of 1: Allocated PaRAM = 59 (0x49004760)
     [m3vpss ]  UTILS: DMA: Allocated CH (TCC) = 60 (60)
     [m3vpss ]  UTILS: DMA: 0 of 4: Allocated PaRAM = 60 (0x49004780)
     [m3vpss ]  UTILS: DMA: 1 of 4: Allocated PaRAM = 67 (0x49004860)
     [m3vpss ]  UTILS: DMA: 2 of 4: Allocated PaRAM = 160 (0x49005400)
     [m3vpss ]  UTILS: DMA: 3 of 4: Allocated PaRAM = 161 (0x49005420)
     [m3vpss ] SWMS: instance 0, sc id 5, start win 0 end win 17
     [m3vpss ]  4859: SWMS0    : Loading Vertical Co-effs (UPSCALE)x ...
     [m3vpss ]  4860: SWMS0    : Loading Horizontal Co-effs (UPSCALE)x ...
     [m3vpss ]  4860: SWMS    : Co-effs Loading ... DONE !!!
     [m3vpss ] AVSYNC:WARNING!! Application wrongly configureddisplayID[-1]. Reseting to correct displayID[0]
     [m3vpss ]  4860: SWMS    : ******* Configuring clock 30 secs...
     [m3vpss ]  WARNING: WIN1: CH1, Channel ID is INVALID (max allowed CH ID is CH0), !!!
     [m3vpss ]  WARNING: WIN2: CH2, Channel ID is INVALID (max allowed CH ID is CH0), !!!
     [m3vpss ]  WARNING: WIN3: CH3, Channel ID is INVALID (max allowed CH ID is CH0), !!!
     [m3vpss ]  WARNING: WIN4: CH4, Channel ID is INVALID (max allowed CH ID is CH0), !!!
     [m3vpss ]  WARNING: WIN5: CH5, Channel ID is INVALID (max allowed CH ID is CH0), !!!
     [m3vpss ]  WARNING: WIN6: CH6, Channel ID is INVALID (max allowed CH ID is CH0), !!!
     [m3vpss ]  WARNING: WIN7: CH7, Channel ID is INVALID (max allowed CH ID is CH0), !!!
     [m3vpss ]  WARNING: WIN8: CH8, Channel ID is INVALID (max allowed CH ID is CH0), !!!
     [m3vpss ]  4861: SWMS0    : Loading Vertical Co-effs (12/16)x ...
     [m3vpss ]  4861: SWMS0    : Loading Horizontal Co-effs (5/16)x ...
     [m3vpss ]  4862: SWMS    : Co-effs Loading ... DONE !!!
     [m3vpss ] 
     [m3vpss ]  *** [SWMS0] Mosaic Parameters ***
     [m3vpss ] 
     [m3vpss ]  Output FPS: 30
     [m3vpss ] 
     [m3vpss ]  Win | Ch  | Input      | Input          | Input         | Input       | Output     |  Output         | Output        | Output      | Low Cost | SWMS | Data|
     [m3vpss ]  Num | Num | Start X, Y | Width x Height | Pitch Y / C   | Memory Type | Start X, Y |  Width x Height | Pitch Y / C   | Memory Type | ON / OFF | Inst | Form|
     [m3vpss ]  ------------------------------------------------------------------------------------------------------------------------------------------------------------
     [m3vpss ]    0 |   0 |    0,    0 |  1920 x    540 |  7680 /  7680 | NON-TILED   |    0,    0 |   640 x    432 |  3840 /      0 | NON-TILED   |       ON |    0 |  422|
     [m3vpss ]    1 |   1 |    0,    0 |   352 x    264 |   704 /   704 | NON-TILED   |  640,    0 |   640 x    432 |  3840 /      0 | NON-TILED   |       ON |    0 |  422|
     [m3vpss ]    2 |   2 |    0,    0 |   352 x    264 |   704 /   704 | NON-TILED   | 1280,    0 |   640 x    432 |  3840 /      0 | NON-TILED   |       ON |    0 |  422|
     [m3vpss ]    3 |   3 |    0,    0 |   352 x    264 |   704 /   704 | NON-TILED   |    0,  432 |   640 x    432 |  3840 /      0 | NON-TILED   |       ON |    0 |  422|
     [m3vpss ]    4 |   4 |    0,    0 |   352 x    264 |   704 /   704 | NON-TILED   |  640,  432 |   640 x    432 |  3840 /      0 | NON-TILED   |       ON |    0 |  422|
     [m3vpss ]    5 |   5 |    0,    0 |   352 x    264 |   704 /   704 | NON-TILED   | 1280,  432 |   640 x    432 |  3840 /      0 | NON-TILED   |       ON |    0 |  422|
     [m3vpss ]    6 |   6 |    0,    0 |   352 x    264 |   704 /   704 | NON-TILED   |    0,  864 |   640 x    216 |  3840 /      0 | NON-TILED   |       ON |    0 |  422|
     [m3vpss ]    7 |   7 |    0,    0 |   352 x    264 |   704 /   704 | NON-TILED   |  640,  864 |   640 x    216 |  3840 /      0 | NON-TILED   |       ON |    0 |  422|
     [m3vpss ]    8 |   8 |    0,    0 |   352 x    264 |   704 /   704 | NON-TILED   | 1280,  864 |   640 x    216 |  3840 /      0 | NON-TILED   |       ON |    0 |  422|
     [m3vpss ] 
     [m3vpss ] SWMS:HEAPID:0        USED:360
     [m3vpss ] SWMS:HEAPID:1        USED:47296
     [m3vpss ] SWMS:HEAPID:4        USED:20736000
     [m3vpss ]  4865: SWMS: Create Done !!!
     [m3vpss ]  4886: DISPLAY: Create in progress !!!
     [m3vpss ]  4886: DISPLAY: Create Done !!!
     [m3vpss ]  4907: IPC_OUT_M3   : Create in progress !!!
     [m3vpss ]  4908: IPC_OUT_M3   : Create Done !!!
     [m3video]  4928: IPC_IN_M3   : Create in progress !!!
     [m3video]  4928: SYSTEM: Opening ListMP [VPSS-M3_IPC_OUT_0] ...
     [m3video]  4928: SYSTEM: Opening ListMP [VPSS-M3_IPC_IN_0] ...
     [m3video]  4930: IPC_IN_M3   : Create Done !!!
     [m3video]  4951: ENCODE: Create in progress ... !!!
     [m3video] ENCODE: inQueInfo.numCh 1!!!
     [m3video]  4983: ENCODE: Creating CH0 of 1920 x 1080, pitch = (3840, 3840) [PROGRESSIVE] [NON-TILED  ], bitrate = 0 Kbps ...
     [m3video]  4983: Assertion @ Line: 750 in links_m3video/iva_enc/encLink_common.c: pChAlgCreatePrm->inputChromaFormat == XDM_YUV_420SP : failed !!!


    934:!!!SLAVE CORE [VIDEO-M3] DOWN!!!
    SystemLink_copySlaveCoreExceptionContext:120
    mmap of [0xbe000000:36864]
    mmap virt addresss:0x400b5000
    munmap of [0x400b5000:36864]
    SystemLink_copySlaveCoreExceptionContext:127

    When I modified my link, error still exist. The following is my link.

    static void Multich_ffws_connect_links()
    {
     UInt32 i =0;
     
     /**Capture Link**/
     Multich_ffws_set_capture_prm(&gFFWSContext.capturePrm,2);
     gFFWSContext.capturePrm.outQueParams[0].nextLink    = gFFWSContext.dupId[0];
     MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.captureId,&gFFWSContext.capturePrm,sizeof(CaptureLink_CreateParams));

     /**Dup Link 0**/
     gFFWSContext.dupPrm[0].inQueParams.prevLinkId   = gVcapModuleContext.captureId;
     gFFWSContext.dupPrm[0].inQueParams.prevLinkQueId  = 0;
     gFFWSContext.dupPrm[0].numOutQue      = 2;
     gFFWSContext.dupPrm[0].notifyNextLink     = TRUE;
     gFFWSContext.dupPrm[0].outQueParams[0].nextLink  = gVcapModuleContext.sclrId[0];
     gFFWSContext.dupPrm[0].outQueParams[1].nextLink  = gVcapModuleContext.sclrId[1]; 
     MULTICH_FFWS_CREATE_LINK(gFFWSContext.dupId[0],&gFFWSContext.dupPrm[0],sizeof(DupLink_CreateParams));

     /**SCALAR Link PARM INIT**/
     for(i=0; i<NUM_SCALAR_LINK; i++)
     {
      //gFFWSContext.sclrPrm[iPrm].pathId     = SCLR_LINK_SEC0_SC3;
      gFFWSContext.sclrPrm[i].inQueParams.prevLinkId  = gFFWSContext.dupId[0];
         gFFWSContext.sclrPrm[i].inQueParams.prevLinkQueId = i;
         gFFWSContext.sclrPrm[i].outQueParams.nextLink  = gFFWSContext.mergeId[0];
      gFFWSContext.sclrPrm[i].cropEnable     = TRUE;
         gFFWSContext.sclrPrm[i].tilerEnable     = FALSE;
         gFFWSContext.sclrPrm[i].enableLineSkipSc   = FALSE;
         gFFWSContext.sclrPrm[i].inputFrameRate    = 25;
         gFFWSContext.sclrPrm[i].outputFrameRate    = 25;
         //gFFWSContext.sclrPrm[i].outDataFormat             = SYSTEM_DF_YUV420SP_UV;
         gFFWSContext.sclrPrm[i].scaleMode     = SCLR_SCALE_MODE_ABSOLUTE;
         gFFWSContext.sclrPrm[i].outScaleFactor.absoluteResolution.outWidth = 768;//1920;
         gFFWSContext.sclrPrm[i].outScaleFactor.absoluteResolution.outHeight = 576;//1080;
      MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.sclrId[i],&gFFWSContext.sclrPrm[i],sizeof(SclrLink_CreateParams));
     }

     /* MERGE 0 Link PARM INIT */
        gFFWSContext.mergePrm[0].numInQue                     = 2;
        gFFWSContext.mergePrm[0].inQueParams[0].prevLinkId    = gVcapModuleContext.sclrId[0];
        gFFWSContext.mergePrm[0].inQueParams[0].prevLinkQueId = 0;
        gFFWSContext.mergePrm[0].inQueParams[1].prevLinkId    = gVcapModuleContext.sclrId[1];
        gFFWSContext.mergePrm[0].inQueParams[1].prevLinkQueId = 0;
        //gFFWSContext.mergePrm[0].outQueParams.nextLink        = gVcapModuleContext.ipcFramesOutVpssId[0];
        gFFWSContext.mergePrm[0].outQueParams.nextLink        = gVcapModuleContext.deiId[0];
     //gFFWSContext.mergePrm[0].outQueParams.nextLink        = gVcapModuleContext.nsfId[0];
     gFFWSContext.mergePrm[0].notifyNextLink               = TRUE; 
     MULTICH_FFWS_CREATE_LINK(gFFWSContext.mergeId[0],&gFFWSContext.mergePrm[0],sizeof(MergeLink_CreateParams));
    #if 1
     /** DEI HQ Link*/
     gFFWSContext.deiPrm[0].inQueParams.prevLinkId   = gFFWSContext.mergeId[0];
     gFFWSContext.deiPrm[0].inQueParams.prevLinkQueId  = 0;
     Multich_ffws_set_deiHQ_prm(&gFFWSContext.deiPrm[0]);
     gFFWSContext.deiPrm[0].outQueParams[DEI_LINK_OUT_QUE_DEI_SC].nextLink = gFFWSContext.dupId[1];
     //gFFWSContext.deiPrm[0].outQueParams[DEI_LINK_OUT_QUE_DEI_SC].nextLink = gFFWSContext.mergeId[1]; 
     //gFFWSContext.deiPrm[0].outQueParams[DEI_LINK_OUT_QUE_DEI_SC].nextLink = gVdisModuleContext.swMsId[0];
     //gFFWSContext.deiPrm[0].outQueParams[0].nextLink = gVcapModuleContext.ipcFramesOutVpssId[0];
     //gFFWSContext.mergePrm[1].inQueParams[1].prevLinkId  = gVcapModuleContext.deiId[0];
     //gFFWSContext.mergePrm[1].inQueParams[1].prevLinkQueId= DEI_LINK_OUT_QUE_DEI_SC;
     MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.deiId[0],&gFFWSContext.deiPrm[0],sizeof(DeiLink_CreateParams));
    #endif

    #if 0
     /* NSF Link PARM INIT */
        MULTICH_INIT_STRUCT(NsfLink_CreateParams,gFFWSContext.nsfPrm);
        gFFWSContext.nsfPrm.bypassNsf                   = FALSE;
        gFFWSContext.nsfPrm.tilerEnable                 = FALSE;
        gFFWSContext.nsfPrm.inQueParams.prevLinkId      = gFFWSContext.mergeId[0];
        gFFWSContext.nsfPrm.inQueParams.prevLinkQueId   = 0;
        gFFWSContext.nsfPrm.numOutQue                   = 1;
        gFFWSContext.nsfPrm.outQueParams[0].nextLink    = gFFWSContext.dupId[1];
        //gFFWSContext.nsfPrm.outQueParams[0].nextLink    = gVcapModuleContext.ipcFramesOutVpssId[0];
     MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.nsfId[0],&gFFWSContext.nsfPrm,sizeof(NsfLink_CreateParams));
    #endif


    #if 1
     /**Dup Link 1*/
     gFFWSContext.dupPrm[1].inQueParams.prevLinkId   = gVcapModuleContext.deiId[0];
     //gFFWSContext.dupPrm[1].inQueParams.prevLinkId   = gVcapModuleContext.nsfId[0];
     gFFWSContext.dupPrm[1].inQueParams.prevLinkQueId  = 0;
     gFFWSContext.dupPrm[1].numOutQue      = 2;
     gFFWSContext.dupPrm[1].notifyNextLink     = TRUE;
     gFFWSContext.dupPrm[1].outQueParams[0].nextLink  = gVcapModuleContext.ipcFramesOutVpssId[0];
     //gFFWSContext.dupPrm[1].outQueParams[1].nextLink  = gVcapModuleContext.nsfId[0]; 
     gFFWSContext.dupPrm[1].outQueParams[1].nextLink  = gVcapModuleContext.ipcFramesOutVpssId[1]; 
     MULTICH_FFWS_CREATE_LINK(gFFWSContext.dupId[1],&gFFWSContext.dupPrm[1],sizeof(DupLink_CreateParams));
    #endif

     i=0;
     for(i=0; i<NUM_ALG_LINK; i++) 
     {
         IpcFramesInLinkRTOS_CreateParams_Init(&gFFWSContext.ipcFramesInDspPrm[i]);
         IpcFramesOutLinkRTOS_CreateParams_Init(&gFFWSContext.ipcFramesOutVpssPrm[i]);
         AlgLink_CreateParams_Init(&gFFWSContext.dspAlgPrm[i]);
     }

     /**Ipc Frame out vpss Link 0*/
     gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.inQueParams.prevLinkId  = gFFWSContext.dupId[1];
     //gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.inQueParams.prevLinkId  = gVcapModuleContext.nsfId[0];
     gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.inQueParams.prevLinkQueId = 0;
     gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.notifyPrevLink       = TRUE;
     gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.numOutQue        = 1;
     //gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.outQueParams[0].nextLink   = gVdisModuleContext.swMsId[0];
     gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.outQueParams[0].nextLink   = gFFWSContext.mergeId[1];
     //gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.outQueParams[0].nextLink   = gFFWSContext.dupId[1];
     gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.notifyNextLink       = TRUE;
     gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.processLink       = gVcapModuleContext.ipcFramesInDspId[0];
     gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.notifyProcessLink    = TRUE;
     MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.ipcFramesOutVpssId[0],
           &gFFWSContext.ipcFramesOutVpssPrm[0],
           sizeof(IpcFramesOutLinkRTOS_CreateParams));
     
     /**Ipc Frame in dsp Link 1*/
     gFFWSContext.ipcFramesInDspPrm[0].baseCreateParams.inQueParams.prevLinkId   = gVcapModuleContext.ipcFramesOutVpssId[0];
     gFFWSContext.ipcFramesInDspPrm[0].baseCreateParams.inQueParams.prevLinkQueId    = 0;
     gFFWSContext.ipcFramesInDspPrm[0].baseCreateParams.numOutQue        = 1;
     gFFWSContext.ipcFramesInDspPrm[0].baseCreateParams.outQueParams[0].nextLink     = gVcapModuleContext.dspAlgId[0];
     gFFWSContext.ipcFramesInDspPrm[0].baseCreateParams.notifyPrevLink       = TRUE;
     gFFWSContext.ipcFramesInDspPrm[0].baseCreateParams.notifyNextLink       = TRUE;
     gFFWSContext.ipcFramesInDspPrm[0].baseCreateParams.noNotifyMode        = FALSE;
     MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.ipcFramesInDspId[0],
           &gFFWSContext.ipcFramesInDspPrm[0],
           sizeof(IpcFramesInLinkRTOS_CreateParams));
     
     /** dsp Alg0 Link*/ 
     gFFWSContext.dspAlgPrm[0].inQueParams.prevLinkId     = gVcapModuleContext.ipcFramesInDspId[0];
     gFFWSContext.dspAlgPrm[0].inQueParams.prevLinkQueId     = 0;
     
     gFFWSContext.dspAlgPrm[0].enableCYLAlg  = TRUE;
     gFFWSContext.dspAlgPrm[0].enablePANOAlg = TRUE;
     Multich_ffws_set_alg_prm(&gFFWSContext.dspAlgPrm[0]);
     gFFWSContext.dspAlgPrm[0].outQueParams[0].nextLink     = SYSTEM_LINK_ID_INVALID;
     //OSA_printf(" %s line %d gVcapModuleContext.dspAlgId[0] %p \r\n",__func__,__LINE__,gVcapModuleContext.dspAlgId[0]);
     MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.dspAlgId[0],&gFFWSContext.dspAlgPrm[0],sizeof(AlgLink_CreateParams));

    #if 1
     /**Ipc Frame out vpss Link 1*/
     gFFWSContext.ipcFramesOutVpssPrm[1].baseCreateParams.inQueParams.prevLinkId  = gFFWSContext.dupId[1];
     //gFFWSContext.ipcFramesOutVpssPrm[1].baseCreateParams.inQueParams.prevLinkId  = gVcapModuleContext.nsfId[0];
     gFFWSContext.ipcFramesOutVpssPrm[1].baseCreateParams.inQueParams.prevLinkQueId = 1;
     gFFWSContext.ipcFramesOutVpssPrm[1].baseCreateParams.notifyPrevLink       = TRUE;
     gFFWSContext.ipcFramesOutVpssPrm[1].baseCreateParams.numOutQue        = 1;
     gFFWSContext.ipcFramesOutVpssPrm[1].baseCreateParams.outQueParams[0].nextLink   = gFFWSContext.mergeId[1];
     gFFWSContext.ipcFramesOutVpssPrm[1].baseCreateParams.notifyNextLink       = TRUE;
     gFFWSContext.ipcFramesOutVpssPrm[1].baseCreateParams.processLink       = gVcapModuleContext.ipcFramesInDspId[1];
     gFFWSContext.ipcFramesOutVpssPrm[1].baseCreateParams.notifyProcessLink    = TRUE;
       MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.ipcFramesOutVpssId[1],
           &gFFWSContext.ipcFramesOutVpssPrm[1],
           sizeof(IpcFramesOutLinkRTOS_CreateParams));

     /**Ipc Frame in dsp Link 1 */
     //gFFWSContext.selectPrms.inQueParams.prevLinkId = gVcapModuleContext.ipcFramesOutVpssId[1];
     //gFFWSContext.selectPrms.inQueParams.prevLinkQueId = 0;
     gFFWSContext.ipcFramesInDspPrm[1].baseCreateParams.inQueParams.prevLinkId   = gVcapModuleContext.ipcFramesOutVpssId[1];
     gFFWSContext.ipcFramesInDspPrm[1].baseCreateParams.inQueParams.prevLinkQueId    = 0;
     gFFWSContext.ipcFramesInDspPrm[1].baseCreateParams.numOutQue        = 1;
     gFFWSContext.ipcFramesInDspPrm[1].baseCreateParams.outQueParams[0].nextLink     = gVcapModuleContext.dspAlgId[1];
     gFFWSContext.ipcFramesInDspPrm[1].baseCreateParams.notifyPrevLink       = TRUE;
     gFFWSContext.ipcFramesInDspPrm[1].baseCreateParams.notifyNextLink       = TRUE;
     gFFWSContext.ipcFramesInDspPrm[1].baseCreateParams.noNotifyMode        = FALSE;
     MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.ipcFramesInDspId[1],
           &gFFWSContext.ipcFramesInDspPrm[1],
           sizeof(IpcFramesInLinkRTOS_CreateParams)); 

     /** dsp Alg Link 1 */
     gFFWSContext.dspAlgPrm[1].inQueParams.prevLinkId     = gVcapModuleContext.ipcFramesInDspId[1];
     gFFWSContext.dspAlgPrm[1].inQueParams.prevLinkQueId     = 0;
     //gFFWSContext.dspAlgPrm[1].enableCYLAlg = TRUE;
     //gFFWSContext.dspAlgPrm[1].enablePANOAlg = TRUE;
     //Multich_ffws_set_alg_prm(&gFFWSContext.dspAlgPrm[1]);
     gFFWSContext.dspAlgPrm[1].outQueParams[1].nextLink     = SYSTEM_LINK_ID_INVALID;
     MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.dspAlgId[1],&gFFWSContext.dspAlgPrm[1],sizeof(AlgLink_CreateParams));
    #endif

    #if 0
     /* IPC_BITS_HOSTTOVIDEO Link PARM INIT */  
        gFFWSContext.ipcBitsOutHostPrm.baseCreateParams.outQueParams[0].nextLink = gVdecModuleContext.ipcBitsInRTOSId;
        gFFWSContext.ipcBitsOutHostPrm.baseCreateParams.notifyNextLink       = FALSE;
        gFFWSContext.ipcBitsOutHostPrm.baseCreateParams.notifyPrevLink       = FALSE;
        gFFWSContext.ipcBitsOutHostPrm.baseCreateParams.noNotifyMode         = TRUE;
        gFFWSContext.ipcBitsOutHostPrm.baseCreateParams.numOutQue            = 1;
        gFFWSContext.ipcBitsOutHostPrm.inQueInfo.numCh                       = gVdecModuleContext.vdecConfig.numChn;

     for(i=0; i<gFFWSContext.ipcBitsOutHostPrm.inQueInfo.numCh; i++)
        {
            gFFWSContext.ipcBitsOutHostPrm.inQueInfo.chInfo[i].width =
                gVdecModuleContext.vdecConfig.decChannelParams[i].maxVideoWidth;

            gFFWSContext.ipcBitsOutHostPrm.inQueInfo.chInfo[i].height =
                gVdecModuleContext.vdecConfig.decChannelParams[i].maxVideoHeight;

            gFFWSContext.ipcBitsOutHostPrm.inQueInfo.chInfo[i].scanFormat =
                SYSTEM_SF_PROGRESSIVE;
           //gFFWSContext.ipcBitsOutHostPrm.numBufPerCh[iPrm] = 6;
        }
     
        gFFWSContext.ipcBitsInVideoPrm.baseCreateParams.inQueParams.prevLinkId    = gVdecModuleContext.ipcBitsOutHLOSId;
        gFFWSContext.ipcBitsInVideoPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
        gFFWSContext.ipcBitsInVideoPrm.baseCreateParams.outQueParams[0].nextLink  = gVdecModuleContext.decId;
        gFFWSContext.ipcBitsInVideoPrm.baseCreateParams.noNotifyMode              = TRUE;
        gFFWSContext.ipcBitsInVideoPrm.baseCreateParams.notifyNextLink            = TRUE;
        gFFWSContext.ipcBitsInVideoPrm.baseCreateParams.notifyPrevLink            = FALSE;
        gFFWSContext.ipcBitsInVideoPrm.baseCreateParams.numOutQue                 = 1;

     for(i=0; i<gFFWSContext.ipcBitsOutHostPrm.inQueInfo.numCh; i++)
        {
            if(gVdecModuleContext.vdecConfig.decChannelParams[i].isCodec == VDEC_CHN_H264)
                gFFWSContext.decPrm.chCreateParams[i].format                 = IVIDEO_H264HP;
            else if(gVdecModuleContext.vdecConfig.decChannelParams[i].isCodec == VDEC_CHN_MPEG4)
                gFFWSContext.decPrm.chCreateParams[i].format                 = IVIDEO_MPEG4ASP;
            else if(gVdecModuleContext.vdecConfig.decChannelParams[i].isCodec == VDEC_CHN_MJPEG)
                gFFWSContext.decPrm.chCreateParams[i].format                 = IVIDEO_MJPEG;

            gFFWSContext.decPrm.chCreateParams[i].numBufPerCh
                             = gVdecModuleContext.vdecConfig.decChannelParams[i].numBufPerCh;
            gFFWSContext.decPrm.chCreateParams[i].profile                = IH264VDEC_PROFILE_ANY;
            gFFWSContext.decPrm.chCreateParams[i].displayDelay
                             = gVdecModuleContext.vdecConfig.decChannelParams[i].displayDelay;
            gFFWSContext.decPrm.chCreateParams[i].dpbBufSizeInFrames = IH264VDEC_DPB_NUMFRAMES_AUTO;
            gFFWSContext.decPrm.chCreateParams[i].processCallLevel   = VDEC_FRAMELEVELPROCESSCALL;
            //decPrm.chCreateParams[iPrm].processCallLevel   = VDEC_FIELDLEVELPROCESSCALL;

            gFFWSContext.decPrm.chCreateParams[i].targetMaxWidth  =
                gFFWSContext.ipcBitsOutHostPrm.inQueInfo.chInfo[i].width;

            gFFWSContext.decPrm.chCreateParams[i].targetMaxHeight =
                gFFWSContext.ipcBitsOutHostPrm.inQueInfo.chInfo[i].height;

            gFFWSContext.decPrm.chCreateParams[i].defaultDynamicParams.targetFrameRate =
                gVdecModuleContext.vdecConfig.decChannelParams[i].dynamicParam.frameRate;

            gFFWSContext.decPrm.chCreateParams[i].defaultDynamicParams.targetBitRate =
                gVdecModuleContext.vdecConfig.decChannelParams[i].dynamicParam.targetBitRate;
            gFFWSContext.decPrm.chCreateParams[i].tilerEnable = FALSE;
        }

        gFFWSContext.decPrm.inQueParams.prevLinkId       = gVdecModuleContext.ipcBitsInRTOSId;
        gFFWSContext.decPrm.inQueParams.prevLinkQueId    = 0;
        gFFWSContext.decPrm.outQueParams.nextLink        = gFFWSContext.ipcOutVideoId;

        gFFWSContext.ipcOutVideoPrm.inQueParams.prevLinkId    = gVdecModuleContext.decId;
        gFFWSContext.ipcOutVideoPrm.inQueParams.prevLinkQueId = 0;
        gFFWSContext.ipcOutVideoPrm.outQueParams[0].nextLink  = gFFWSContext.ipcInVpssId;
        gFFWSContext.ipcOutVideoPrm.notifyNextLink            = TRUE;
        gFFWSContext.ipcOutVideoPrm.notifyPrevLink            = TRUE;
        gFFWSContext.ipcOutVideoPrm.numOutQue                 = 1;

        gFFWSContext.ipcInVpssPrm.inQueParams.prevLinkId    = gFFWSContext.ipcOutVideoId;
        gFFWSContext.ipcInVpssPrm.inQueParams.prevLinkQueId = 0;
        gFFWSContext.ipcInVpssPrm.notifyNextLink            = TRUE;
        gFFWSContext.ipcInVpssPrm.notifyPrevLink            = TRUE;
        gFFWSContext.ipcInVpssPrm.numOutQue                 = 1;
        gFFWSContext.ipcInVpssPrm.outQueParams[0].nextLink = gFFWSContext.mergeId[1];
    #endif


     /* MERGE 1 Link PARM INIT */
    #if 0
     gFFWSContext.mergePrm[1].numInQue                     = 3;
        gFFWSContext.mergePrm[1].inQueParams[0].prevLinkId    = gVcapModuleContext.ipcFramesOutVpssId[0];
        gFFWSContext.mergePrm[1].inQueParams[0].prevLinkQueId = 0;
        gFFWSContext.mergePrm[1].inQueParams[1].prevLinkId    = gVcapModuleContext.ipcFramesOutVpssId[1];
        gFFWSContext.mergePrm[1].inQueParams[1].prevLinkQueId = 0;
        gFFWSContext.mergePrm[1].inQueParams[2].prevLinkId    = gFFWSContext.ipcInVpssId;
        gFFWSContext.mergePrm[1].inQueParams[2].prevLinkQueId = 0;
    #else

     gFFWSContext.mergePrm[1].numInQue                     = 2;
        //gFFWSContext.mergePrm[1].inQueParams[0].prevLinkId    = gVcapModuleContext.deiId[0];
     gFFWSContext.mergePrm[1].inQueParams[0].prevLinkId    = gVcapModuleContext.ipcFramesOutVpssId[0];
     gFFWSContext.mergePrm[1].inQueParams[0].prevLinkQueId = 0;
        gFFWSContext.mergePrm[1].inQueParams[1].prevLinkId    = gVcapModuleContext.ipcFramesOutVpssId[1];
        gFFWSContext.mergePrm[1].inQueParams[1].prevLinkQueId = 0;
    #endif

     //gFFWSContext.mergePrm[1].outQueParams.nextLink        = gFFWSContext.dupId[1];
     gFFWSContext.mergePrm[1].outQueParams.nextLink        = gFFWSContext.dupId[2];
     //gFFWSContext.mergePrm[1].outQueParams.nextLink        = gVdisModuleContext.swMsId[0];
     gFFWSContext.mergePrm[1].notifyNextLink               = TRUE; 
     //gFFWSContext.mergePrm[0].outQueParams.nextLink        = gVcapModuleContext.ipcFramesOutVpssId[0];
     MULTICH_FFWS_CREATE_LINK(gFFWSContext.mergeId[1],&gFFWSContext.mergePrm[1],sizeof(MergeLink_CreateParams));


    #if 1
     /**Dup Link 2*/
     gFFWSContext.dupPrm[2].inQueParams.prevLinkId   = gFFWSContext.mergeId[1];
     gFFWSContext.dupPrm[2].inQueParams.prevLinkQueId  = 0;
     gFFWSContext.dupPrm[2].numOutQue      = 2;
     gFFWSContext.dupPrm[2].notifyNextLink     = TRUE;
     gFFWSContext.dupPrm[2].outQueParams[0].nextLink  = gVdisModuleContext.swMsId[0];
     gFFWSContext.dupPrm[2].outQueParams[1].nextLink  = gVcapModuleContext.nsfId[0];
     //gFFWSContext.dupPrm[2].outQueParams[1].nextLink  = gFFWSContext.ipcOutVpssId; 
     MULTICH_FFWS_CREATE_LINK(gFFWSContext.dupId[2],&gFFWSContext.dupPrm[2],sizeof(DupLink_CreateParams));
    #else
     /**Dup Link 2*/
     gFFWSContext.dupPrm[1].inQueParams.prevLinkId   = gVcapModuleContext.ipcFramesOutVpssId[0];
     gFFWSContext.dupPrm[1].inQueParams.prevLinkQueId  = 0;
     gFFWSContext.dupPrm[1].numOutQue      = 2;
     gFFWSContext.dupPrm[1].notifyNextLink     = TRUE;
     gFFWSContext.dupPrm[1].outQueParams[0].nextLink  = gVdisModuleContext.swMsId[0];
     gFFWSContext.dupPrm[1].outQueParams[1].nextLink  = gFFWSContext.ipcOutVpssId; 
     MULTICH_FFWS_CREATE_LINK(gFFWSContext.dupId[1],&gFFWSContext.dupPrm[1],sizeof(DupLink_CreateParams));

    #endif

     /**SW+Display */
     //gFFWSContext.swMsPrm[0].inQueParams.prevLinkId  = gFFWSContext.dupId[1];
     //gFFWSContext.swMsPrm[0].inQueParams.prevLinkId   = gVcapModuleContext.ipcFramesOutVpssId[0];//gVcapModuleContext.deiId[0];
     //gFFWSContext.swMsPrm[0].inQueParams.prevLinkId   = gFFWSContext.mergeId[1];
     gFFWSContext.swMsPrm[0].inQueParams.prevLinkId  = gFFWSContext.dupId[2];
     gFFWSContext.swMsPrm[0].inQueParams.prevLinkQueId  = 0;
     for( i = 0; i < 1; i++ )
     {
      SwMsLink_CreateParams * swMsPrm   = &gFFWSContext.swMsPrm[i];
      DisplayLink_CreateParams * displayPrm  = &gFFWSContext.displayPrm[i];
      
      UInt32 resolution = gVdisModuleContext.vdisConfig.deviceParams[i].resolution;
      UInt32 enableLayoutGridDraw = gVdisModuleContext.vdisConfig.enableLayoutGridDraw;

      Multich_ffws_set_display_prm(swMsPrm, displayPrm, resolution, enableLayoutGridDraw);

      swMsPrm->outQueParams.nextLink = gVdisModuleContext.displayId[i];

      displayPrm->inQueParams[0].prevLinkId  = gVdisModuleContext.swMsId[i];
      displayPrm->inQueParams[0].prevLinkQueId = 0;

      MULTICH_FFWS_CREATE_LINK(gVdisModuleContext.swMsId[i],swMsPrm,sizeof(SwMsLink_CreateParams));
      MULTICH_FFWS_CREATE_LINK(gVdisModuleContext.displayId[i],displayPrm,sizeof(DisplayLink_CreateParams));
     }
    #if 1 

     /* NSF Link PARM INIT */
        MULTICH_INIT_STRUCT(NsfLink_CreateParams,gFFWSContext.nsfPrm);
        gFFWSContext.nsfPrm.bypassNsf                   = FALSE;
        gFFWSContext.nsfPrm.tilerEnable                 = FALSE;
        gFFWSContext.nsfPrm.inQueParams.prevLinkId      = gFFWSContext.dupId[2];
        gFFWSContext.nsfPrm.inQueParams.prevLinkQueId   = 0;
        gFFWSContext.nsfPrm.numOutQue                   = 1;
        gFFWSContext.nsfPrm.outQueParams[0].nextLink    = gFFWSContext.ipcOutVpssId;
        //gFFWSContext.nsfPrm.outQueParams[0].nextLink    = gVcapModuleContext.ipcFramesOutVpssId[0];
     MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.nsfId[0],&gFFWSContext.nsfPrm,sizeof(NsfLink_CreateParams));
     
     /** IPC VPSS OUT Link*/
     //gFFWSContext.ipcOutVpssPrm.inQueParams.prevLinkId  = gFFWSContext.mergeId[1];
     gFFWSContext.ipcOutVpssPrm.inQueParams.prevLinkId   = gVcapModuleContext.nsfId[0];
     //gFFWSContext.ipcOutVpssPrm.inQueParams.prevLinkId   = gFFWSContext.dupId[2];
     gFFWSContext.ipcOutVpssPrm.inQueParams.prevLinkQueId = 1;
     gFFWSContext.ipcOutVpssPrm.numOutQue     = 1;
     gFFWSContext.ipcOutVpssPrm.outQueParams[0].nextLink  = gFFWSContext.ipcInVideoId;
     gFFWSContext.ipcOutVpssPrm.notifyNextLink       = FALSE;
     gFFWSContext.ipcOutVpssPrm.notifyPrevLink       = TRUE;
     gFFWSContext.ipcOutVpssPrm.noNotifyMode        = TRUE;
     MULTICH_FFWS_CREATE_LINK(gFFWSContext.ipcOutVpssId, &gFFWSContext.ipcOutVpssPrm, sizeof(IpcLink_CreateParams ));

     /**IPC IN VIDEO Link*/ 
     gFFWSContext.ipcInVideoPrm.inQueParams.prevLinkId     = gFFWSContext.ipcOutVpssId;
     gFFWSContext.ipcInVideoPrm.inQueParams.prevLinkQueId = 0;
     gFFWSContext.ipcInVideoPrm.numOutQue     = 1;  
     gFFWSContext.ipcInVideoPrm.outQueParams[0].nextLink     = gVencModuleContext.encId;
     gFFWSContext.ipcInVideoPrm.notifyNextLink       = TRUE;
     gFFWSContext.ipcInVideoPrm.notifyPrevLink       = FALSE;
     gFFWSContext.ipcInVideoPrm.noNotifyMode        = TRUE;
     MULTICH_FFWS_CREATE_LINK(gFFWSContext.ipcInVideoId, &gFFWSContext.ipcInVideoPrm, sizeof(IpcLink_CreateParams ) );
     
     /**ENC Link */
     gFFWSContext.encPrm.inQueParams.prevLinkId       = gFFWSContext.ipcInVideoId;
     gFFWSContext.encPrm.inQueParams.prevLinkQueId     = 0;
     Multich_ffws_set_enclink_prm(&gFFWSContext.encPrm);
     gFFWSContext.encPrm.outQueParams.nextLink       = gVencModuleContext.ipcBitsOutRTOSId;
     MULTICH_FFWS_CREATE_LINK(gVencModuleContext.encId,  &gFFWSContext.encPrm, sizeof( EncLink_CreateParams ));

     /**IPC BITS OUT VIDEO Link */
     gFFWSContext.ipcBitsOutVideoPrm.baseCreateParams.inQueParams.prevLinkId     = gVencModuleContext.encId;
     gFFWSContext.ipcBitsOutVideoPrm.baseCreateParams.inQueParams.prevLinkQueId  = 0;
     gFFWSContext.ipcBitsOutVideoPrm.baseCreateParams.numOutQue        = 1;
     gFFWSContext.ipcBitsOutVideoPrm.baseCreateParams.outQueParams[0].nextLink   = gVencModuleContext.ipcBitsInHLOSId;
     MultiCh_ipcBitsInitCreateParams_BitsOutRTOS( &gFFWSContext.ipcBitsOutVideoPrm, TRUE );
     MULTICH_FFWS_CREATE_LINK(gVencModuleContext.ipcBitsOutRTOSId, &gFFWSContext.ipcBitsOutVideoPrm, sizeof( IpcBitsOutLinkRTOS_CreateParams ));

     /**IPC BITS IN HOST Link */
     gFFWSContext.ipcBitsInHostPrm.baseCreateParams.inQueParams.prevLinkId  = gVencModuleContext.ipcBitsOutRTOSId;
     gFFWSContext.ipcBitsInHostPrm.baseCreateParams.inQueParams.prevLinkQueId  = 0;
     gFFWSContext.ipcBitsInHostPrm.baseCreateParams.numOutQue        = 1;
     gFFWSContext.ipcBitsInHostPrm.baseCreateParams.outQueParams[0].nextLink   = SYSTEM_LINK_ID_INVALID;
     MultiCh_ipcBitsInitCreateParams_BitsInHLOS( &gFFWSContext.ipcBitsInHostPrm );

     MULTICH_FFWS_CREATE_LINK(gVencModuleContext.ipcBitsInHLOSId,  &gFFWSContext.ipcBitsInHostPrm, sizeof( IpcBitsInLinkHLOS_CreateParams));
    #endif

    }

    The following is my link.

  • Error information

    1771:!!!SLAVE CORE [VIDEO-M3] DOWN!!!
    SystemLink_copySlaveCoreExceptionContext:120
    mmap of [0xbe000000:36864]
    mmap virt addresss:0x40104000
    munmap of [0x40104000:36864]
    SystemLink_copySlaveCoreExceptionContext:127
    [m3video] 8072: IPC_IN_M3 : Create in progress !!!
    [m3vpss ] 7 | 7 | 0, 0 | 352 x 264 | 704 / 704 | NON-TILED | 640, 864 | 640 x 216 | 3840 / 0 | NON-TILED | ON | 0 | 422|
    [m3video] 8072: SYSTEM: Opening ListMP [VPSS-M3_IPC_OUT_0] ...
    [m3vpss ] 8 | 8 | 0, 0 | 352 x 264 | 704 / 704 | NON-TILED | 1280, 864 | 640 x 216 | 3840 / 0 | NON-TILED | ON | 0 | 422|
    [m3video] 8072: SYSTEM: Opening ListMP [VPSS-M3_IPC_IN_0] ...
    [m3vpss ]
    [m3video] 8074: IPC_IN_M3 : Create Done !!!
    [m3video] 8095: ENCODE: Create in progress ... !!!
    [m3video] ENCODE: inQueInfo.numCh 4!!!
    [m3vpss ] SWMS:HEAPID:0 USED:360
    [m3video] 8149: ENCODE: Creating CH0 of 768 x 576, pitch = (1536, 1536) [PROGRESSIVE] [NON-TILED ], bitrate = 0 Kbps ...
    [m3vpss ] SWMS:HEAPID:1 USED:43776
    [m3video] 8149: Assertion @ Line: 750 in links_m3video/iva_enc/encLink_common.c: pChAlgCreatePrm->inputChromaFormat == XDM_YUV_420SP : failed !!!
    [m3vpss ] SWMS:HEAPID:4 USED:20736000
    [m3vpss ] 8009: SWMS: Create Done !!!

    1484:!!!SLAVE CORE [VPSS-M3] DOWN!!!
    SystemLink_copySlaveCoreExceptionContext:120
    mmap of [0xbe020000:36864]
    mmap virt addresss:0x40150000
    munmap of [0x40150000:36864]
    SystemLink_copySlaveCoreExceptionContext:127
    [c6xdsp ] ALGLINK:HEAPID:0 USED:3321280
    [m3vpss ] 5682: Assertion @ Line: 56 in links_common/merge/mergeLink_tsk.c: pPrm->inQueParams[inQue].prevLinkQueId < pObj->inTskInfo[inQue].numQue : failed !!!
    [c6xdsp ] ALGLINK:HEAPID:1 USED:107544
    [c6xdsp ] 5010: ALG : Create Done !!!
    [c6xdsp ] 5054: IPC_FRAMES_IN : Create in progress !!!
    [c6xdsp ] 5054: SYSTEM: Opening ListMP [VPSS-M3_IPC_OUT_20] ...
    [c6xdsp ] 5054: SYSTEM: Opening ListMP [VPSS-M3_IPC_IN_20] ...
    [c6xdsp ] IPC_FRAMES_IN:HEAPID:0 USED:304
    [c6xdsp ] 5055: IPC_FRAMES_IN : Create Done !!!
    [c6xdsp ] 5076: ALG : Create in progress !!!
    [c6xdsp ] 5081: ALG : Create Done !!!

     

    the following is my video link and code.

    static void Multich_ffws_connect_links()
    {
    UInt32 i =0;

    /**Capture Link**/
    Multich_ffws_set_capture_prm(&gFFWSContext.capturePrm,2);
    gFFWSContext.capturePrm.outQueParams[0].nextLink = gFFWSContext.dupId[0];
    MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.captureId,&gFFWSContext.capturePrm,sizeof(CaptureLink_CreateParams));

    /**Dup Link 0**/
    gFFWSContext.dupPrm[0].inQueParams.prevLinkId = gVcapModuleContext.captureId;
    gFFWSContext.dupPrm[0].inQueParams.prevLinkQueId = 0;
    gFFWSContext.dupPrm[0].numOutQue = 2;
    gFFWSContext.dupPrm[0].notifyNextLink = TRUE;
    gFFWSContext.dupPrm[0].outQueParams[0].nextLink = gVcapModuleContext.sclrId[0];
    gFFWSContext.dupPrm[0].outQueParams[1].nextLink = gVcapModuleContext.sclrId[1];
    MULTICH_FFWS_CREATE_LINK(gFFWSContext.dupId[0],&gFFWSContext.dupPrm[0],sizeof(DupLink_CreateParams));

    /**SCALAR Link PARM INIT**/
    for(i=0; i<NUM_SCALAR_LINK; i++)
    {
    //gFFWSContext.sclrPrm[iPrm].pathId = SCLR_LINK_SEC0_SC3;
    gFFWSContext.sclrPrm[i].inQueParams.prevLinkId = gFFWSContext.dupId[0];
    gFFWSContext.sclrPrm[i].inQueParams.prevLinkQueId = i;
    gFFWSContext.sclrPrm[i].outQueParams.nextLink = gFFWSContext.mergeId[0];
    gFFWSContext.sclrPrm[i].cropEnable = TRUE;
    gFFWSContext.sclrPrm[i].tilerEnable = FALSE;
    gFFWSContext.sclrPrm[i].enableLineSkipSc = FALSE;
    gFFWSContext.sclrPrm[i].inputFrameRate = 25;
    gFFWSContext.sclrPrm[i].outputFrameRate = 25;
    //gFFWSContext.sclrPrm[i].outDataFormat = SYSTEM_DF_YUV420SP_UV;
    gFFWSContext.sclrPrm[i].scaleMode = SCLR_SCALE_MODE_ABSOLUTE;
    gFFWSContext.sclrPrm[i].outScaleFactor.absoluteResolution.outWidth = 768;//1920;
    gFFWSContext.sclrPrm[i].outScaleFactor.absoluteResolution.outHeight = 576;//1080;
    MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.sclrId[i],&gFFWSContext.sclrPrm[i],sizeof(SclrLink_CreateParams));
    }

    /* MERGE 0 Link PARM INIT */
    gFFWSContext.mergePrm[0].numInQue = 2;
    gFFWSContext.mergePrm[0].inQueParams[0].prevLinkId = gVcapModuleContext.sclrId[0];
    gFFWSContext.mergePrm[0].inQueParams[0].prevLinkQueId = 0;
    gFFWSContext.mergePrm[0].inQueParams[1].prevLinkId = gVcapModuleContext.sclrId[1];
    gFFWSContext.mergePrm[0].inQueParams[1].prevLinkQueId = 0;
    //gFFWSContext.mergePrm[0].outQueParams.nextLink = gVcapModuleContext.ipcFramesOutVpssId[0];
    //gFFWSContext.mergePrm[0].outQueParams.nextLink = gVcapModuleContext.deiId[0];
    gFFWSContext.mergePrm[0].outQueParams.nextLink = gVcapModuleContext.nsfId[0];
    gFFWSContext.mergePrm[0].notifyNextLink = TRUE;
    MULTICH_FFWS_CREATE_LINK(gFFWSContext.mergeId[0],&gFFWSContext.mergePrm[0],sizeof(MergeLink_CreateParams));
    #if 0
    /** DEI HQ Link*/
    gFFWSContext.deiPrm[0].inQueParams.prevLinkId = gFFWSContext.mergeId[0];
    gFFWSContext.deiPrm[0].inQueParams.prevLinkQueId = 0;
    Multich_ffws_set_deiHQ_prm(&gFFWSContext.deiPrm[0]);
    gFFWSContext.deiPrm[0].outQueParams[DEI_LINK_OUT_QUE_DEI_SC].nextLink = gFFWSContext.dupId[1];
    //gFFWSContext.deiPrm[0].outQueParams[DEI_LINK_OUT_QUE_DEI_SC].nextLink = gFFWSContext.mergeId[1];
    //gFFWSContext.deiPrm[0].outQueParams[DEI_LINK_OUT_QUE_DEI_SC].nextLink = gVdisModuleContext.swMsId[0];
    //gFFWSContext.deiPrm[0].outQueParams[0].nextLink = gVcapModuleContext.ipcFramesOutVpssId[0];
    //gFFWSContext.mergePrm[1].inQueParams[1].prevLinkId = gVcapModuleContext.deiId[0];
    //gFFWSContext.mergePrm[1].inQueParams[1].prevLinkQueId= DEI_LINK_OUT_QUE_DEI_SC;
    MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.deiId[0],&gFFWSContext.deiPrm[0],sizeof(DeiLink_CreateParams));
    #endif

    #if 1
    /* NSF Link PARM INIT */
    MULTICH_INIT_STRUCT(NsfLink_CreateParams,gFFWSContext.nsfPrm);
    gFFWSContext.nsfPrm.bypassNsf = FALSE;
    gFFWSContext.nsfPrm.tilerEnable = FALSE;
    gFFWSContext.nsfPrm.inQueParams.prevLinkId = gFFWSContext.mergeId[0];
    gFFWSContext.nsfPrm.inQueParams.prevLinkQueId = 0;
    gFFWSContext.nsfPrm.numOutQue = 1;
    gFFWSContext.nsfPrm.outQueParams[0].nextLink = gFFWSContext.dupId[1];
    //gFFWSContext.nsfPrm.outQueParams[0].nextLink = gVcapModuleContext.ipcFramesOutVpssId[0];
    MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.nsfId[0],&gFFWSContext.nsfPrm,sizeof(NsfLink_CreateParams));
    #endif


    #if 1
    /**Dup Link 1*/
    //gFFWSContext.dupPrm[1].inQueParams.prevLinkId = gVcapModuleContext.deiId[0];
    gFFWSContext.dupPrm[1].inQueParams.prevLinkId = gVcapModuleContext.nsfId[0];
    gFFWSContext.dupPrm[1].inQueParams.prevLinkQueId = 0;
    gFFWSContext.dupPrm[1].numOutQue = 2;
    gFFWSContext.dupPrm[1].notifyNextLink = TRUE;
    gFFWSContext.dupPrm[1].outQueParams[0].nextLink = gVcapModuleContext.ipcFramesOutVpssId[0];
    //gFFWSContext.dupPrm[1].outQueParams[1].nextLink = gVcapModuleContext.nsfId[0];
    gFFWSContext.dupPrm[1].outQueParams[1].nextLink = gVcapModuleContext.ipcFramesOutVpssId[1];
    MULTICH_FFWS_CREATE_LINK(gFFWSContext.dupId[1],&gFFWSContext.dupPrm[1],sizeof(DupLink_CreateParams));
    #endif

    i=0;
    for(i=0; i<NUM_ALG_LINK; i++)
    {
    IpcFramesInLinkRTOS_CreateParams_Init(&gFFWSContext.ipcFramesInDspPrm[i]);
    IpcFramesOutLinkRTOS_CreateParams_Init(&gFFWSContext.ipcFramesOutVpssPrm[i]);
    AlgLink_CreateParams_Init(&gFFWSContext.dspAlgPrm[i]);
    }

    /**Ipc Frame out vpss Link 0*/
    gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.inQueParams.prevLinkId = gFFWSContext.dupId[1];
    //gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.inQueParams.prevLinkId = gVcapModuleContext.nsfId[0];
    gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.inQueParams.prevLinkQueId = 0;
    gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.notifyPrevLink = TRUE;
    gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.numOutQue = 1;
    //gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.outQueParams[0].nextLink = gVdisModuleContext.swMsId[0];
    gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.outQueParams[0].nextLink = gFFWSContext.mergeId[1];
    //gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.outQueParams[0].nextLink = gFFWSContext.dupId[1];
    gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.notifyNextLink = TRUE;
    gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.processLink = gVcapModuleContext.ipcFramesInDspId[0];
    gFFWSContext.ipcFramesOutVpssPrm[0].baseCreateParams.notifyProcessLink = TRUE;
    MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.ipcFramesOutVpssId[0],
    &gFFWSContext.ipcFramesOutVpssPrm[0],
    sizeof(IpcFramesOutLinkRTOS_CreateParams));

    /**Ipc Frame in dsp Link 1*/
    gFFWSContext.ipcFramesInDspPrm[0].baseCreateParams.inQueParams.prevLinkId = gVcapModuleContext.ipcFramesOutVpssId[0];
    gFFWSContext.ipcFramesInDspPrm[0].baseCreateParams.inQueParams.prevLinkQueId = 0;
    gFFWSContext.ipcFramesInDspPrm[0].baseCreateParams.numOutQue = 1;
    gFFWSContext.ipcFramesInDspPrm[0].baseCreateParams.outQueParams[0].nextLink = gVcapModuleContext.dspAlgId[0];
    gFFWSContext.ipcFramesInDspPrm[0].baseCreateParams.notifyPrevLink = TRUE;
    gFFWSContext.ipcFramesInDspPrm[0].baseCreateParams.notifyNextLink = TRUE;
    gFFWSContext.ipcFramesInDspPrm[0].baseCreateParams.noNotifyMode = FALSE;
    MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.ipcFramesInDspId[0],
    &gFFWSContext.ipcFramesInDspPrm[0],
    sizeof(IpcFramesInLinkRTOS_CreateParams));

    /** dsp Alg0 Link*/
    gFFWSContext.dspAlgPrm[0].inQueParams.prevLinkId = gVcapModuleContext.ipcFramesInDspId[0];
    gFFWSContext.dspAlgPrm[0].inQueParams.prevLinkQueId = 0;

    gFFWSContext.dspAlgPrm[0].enableCYLAlg = TRUE;
    gFFWSContext.dspAlgPrm[0].enablePANOAlg = TRUE;
    Multich_ffws_set_alg_prm(&gFFWSContext.dspAlgPrm[0]);
    gFFWSContext.dspAlgPrm[0].outQueParams[0].nextLink = SYSTEM_LINK_ID_INVALID;
    //OSA_printf(" %s line %d gVcapModuleContext.dspAlgId[0] %p \r\n",__func__,__LINE__,gVcapModuleContext.dspAlgId[0]);
    MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.dspAlgId[0],&gFFWSContext.dspAlgPrm[0],sizeof(AlgLink_CreateParams));

    #if 1
    /**Ipc Frame out vpss Link 1*/
    gFFWSContext.ipcFramesOutVpssPrm[1].baseCreateParams.inQueParams.prevLinkId = gFFWSContext.dupId[1];
    //gFFWSContext.ipcFramesOutVpssPrm[1].baseCreateParams.inQueParams.prevLinkId = gVcapModuleContext.nsfId[0];
    gFFWSContext.ipcFramesOutVpssPrm[1].baseCreateParams.inQueParams.prevLinkQueId = 1;
    gFFWSContext.ipcFramesOutVpssPrm[1].baseCreateParams.notifyPrevLink = TRUE;
    gFFWSContext.ipcFramesOutVpssPrm[1].baseCreateParams.numOutQue = 1;
    gFFWSContext.ipcFramesOutVpssPrm[1].baseCreateParams.outQueParams[0].nextLink = gFFWSContext.mergeId[1];
    gFFWSContext.ipcFramesOutVpssPrm[1].baseCreateParams.notifyNextLink = TRUE;
    gFFWSContext.ipcFramesOutVpssPrm[1].baseCreateParams.processLink = gVcapModuleContext.ipcFramesInDspId[1];
    gFFWSContext.ipcFramesOutVpssPrm[1].baseCreateParams.notifyProcessLink = TRUE;
    MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.ipcFramesOutVpssId[1],
    &gFFWSContext.ipcFramesOutVpssPrm[1],
    sizeof(IpcFramesOutLinkRTOS_CreateParams));

    /**Ipc Frame in dsp Link 1 */
    //gFFWSContext.selectPrms.inQueParams.prevLinkId = gVcapModuleContext.ipcFramesOutVpssId[1];
    //gFFWSContext.selectPrms.inQueParams.prevLinkQueId = 0;
    gFFWSContext.ipcFramesInDspPrm[1].baseCreateParams.inQueParams.prevLinkId = gVcapModuleContext.ipcFramesOutVpssId[1];
    gFFWSContext.ipcFramesInDspPrm[1].baseCreateParams.inQueParams.prevLinkQueId = 0;
    gFFWSContext.ipcFramesInDspPrm[1].baseCreateParams.numOutQue = 1;
    gFFWSContext.ipcFramesInDspPrm[1].baseCreateParams.outQueParams[0].nextLink = gVcapModuleContext.dspAlgId[1];
    gFFWSContext.ipcFramesInDspPrm[1].baseCreateParams.notifyPrevLink = TRUE;
    gFFWSContext.ipcFramesInDspPrm[1].baseCreateParams.notifyNextLink = TRUE;
    gFFWSContext.ipcFramesInDspPrm[1].baseCreateParams.noNotifyMode = FALSE;
    MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.ipcFramesInDspId[1],
    &gFFWSContext.ipcFramesInDspPrm[1],
    sizeof(IpcFramesInLinkRTOS_CreateParams));

    /** dsp Alg Link 1 */
    gFFWSContext.dspAlgPrm[1].inQueParams.prevLinkId = gVcapModuleContext.ipcFramesInDspId[1];
    gFFWSContext.dspAlgPrm[1].inQueParams.prevLinkQueId = 0;
    //gFFWSContext.dspAlgPrm[1].enableCYLAlg = TRUE;
    //gFFWSContext.dspAlgPrm[1].enablePANOAlg = TRUE;
    //Multich_ffws_set_alg_prm(&gFFWSContext.dspAlgPrm[1]);
    gFFWSContext.dspAlgPrm[1].outQueParams[1].nextLink = SYSTEM_LINK_ID_INVALID;
    MULTICH_FFWS_CREATE_LINK(gVcapModuleContext.dspAlgId[1],&gFFWSContext.dspAlgPrm[1],sizeof(AlgLink_CreateParams));
    #endif

    #if 0
    /* IPC_BITS_HOSTTOVIDEO Link PARM INIT */
    gFFWSContext.ipcBitsOutHostPrm.baseCreateParams.outQueParams[0].nextLink = gVdecModuleContext.ipcBitsInRTOSId;
    gFFWSContext.ipcBitsOutHostPrm.baseCreateParams.notifyNextLink = FALSE;
    gFFWSContext.ipcBitsOutHostPrm.baseCreateParams.notifyPrevLink = FALSE;
    gFFWSContext.ipcBitsOutHostPrm.baseCreateParams.noNotifyMode = TRUE;
    gFFWSContext.ipcBitsOutHostPrm.baseCreateParams.numOutQue = 1;
    gFFWSContext.ipcBitsOutHostPrm.inQueInfo.numCh = gVdecModuleContext.vdecConfig.numChn;

    for(i=0; i<gFFWSContext.ipcBitsOutHostPrm.inQueInfo.numCh; i++)
    {
    gFFWSContext.ipcBitsOutHostPrm.inQueInfo.chInfo[i].width =
    gVdecModuleContext.vdecConfig.decChannelParams[i].maxVideoWidth;

    gFFWSContext.ipcBitsOutHostPrm.inQueInfo.chInfo[i].height =
    gVdecModuleContext.vdecConfig.decChannelParams[i].maxVideoHeight;

    gFFWSContext.ipcBitsOutHostPrm.inQueInfo.chInfo[i].scanFormat =
    SYSTEM_SF_PROGRESSIVE;
    //gFFWSContext.ipcBitsOutHostPrm.numBufPerCh[iPrm] = 6;
    }

    gFFWSContext.ipcBitsInVideoPrm.baseCreateParams.inQueParams.prevLinkId = gVdecModuleContext.ipcBitsOutHLOSId;
    gFFWSContext.ipcBitsInVideoPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
    gFFWSContext.ipcBitsInVideoPrm.baseCreateParams.outQueParams[0].nextLink = gVdecModuleContext.decId;
    gFFWSContext.ipcBitsInVideoPrm.baseCreateParams.noNotifyMode = TRUE;
    gFFWSContext.ipcBitsInVideoPrm.baseCreateParams.notifyNextLink = TRUE;
    gFFWSContext.ipcBitsInVideoPrm.baseCreateParams.notifyPrevLink = FALSE;
    gFFWSContext.ipcBitsInVideoPrm.baseCreateParams.numOutQue = 1;

    for(i=0; i<gFFWSContext.ipcBitsOutHostPrm.inQueInfo.numCh; i++)
    {
    if(gVdecModuleContext.vdecConfig.decChannelParams[i].isCodec == VDEC_CHN_H264)
    gFFWSContext.decPrm.chCreateParams[i].format = IVIDEO_H264HP;
    else if(gVdecModuleContext.vdecConfig.decChannelParams[i].isCodec == VDEC_CHN_MPEG4)
    gFFWSContext.decPrm.chCreateParams[i].format = IVIDEO_MPEG4ASP;
    else if(gVdecModuleContext.vdecConfig.decChannelParams[i].isCodec == VDEC_CHN_MJPEG)
    gFFWSContext.decPrm.chCreateParams[i].format = IVIDEO_MJPEG;

    gFFWSContext.decPrm.chCreateParams[i].numBufPerCh
    = gVdecModuleContext.vdecConfig.decChannelParams[i].numBufPerCh;
    gFFWSContext.decPrm.chCreateParams[i].profile = IH264VDEC_PROFILE_ANY;
    gFFWSContext.decPrm.chCreateParams[i].displayDelay
    = gVdecModuleContext.vdecConfig.decChannelParams[i].displayDelay;
    gFFWSContext.decPrm.chCreateParams[i].dpbBufSizeInFrames = IH264VDEC_DPB_NUMFRAMES_AUTO;
    gFFWSContext.decPrm.chCreateParams[i].processCallLevel = VDEC_FRAMELEVELPROCESSCALL;
    //decPrm.chCreateParams[iPrm].processCallLevel = VDEC_FIELDLEVELPROCESSCALL;

    gFFWSContext.decPrm.chCreateParams[i].targetMaxWidth =
    gFFWSContext.ipcBitsOutHostPrm.inQueInfo.chInfo[i].width;

    gFFWSContext.decPrm.chCreateParams[i].targetMaxHeight =
    gFFWSContext.ipcBitsOutHostPrm.inQueInfo.chInfo[i].height;

    gFFWSContext.decPrm.chCreateParams[i].defaultDynamicParams.targetFrameRate =
    gVdecModuleContext.vdecConfig.decChannelParams[i].dynamicParam.frameRate;

    gFFWSContext.decPrm.chCreateParams[i].defaultDynamicParams.targetBitRate =
    gVdecModuleContext.vdecConfig.decChannelParams[i].dynamicParam.targetBitRate;
    gFFWSContext.decPrm.chCreateParams[i].tilerEnable = FALSE;
    }

    gFFWSContext.decPrm.inQueParams.prevLinkId = gVdecModuleContext.ipcBitsInRTOSId;
    gFFWSContext.decPrm.inQueParams.prevLinkQueId = 0;
    gFFWSContext.decPrm.outQueParams.nextLink = gFFWSContext.ipcOutVideoId;

    gFFWSContext.ipcOutVideoPrm.inQueParams.prevLinkId = gVdecModuleContext.decId;
    gFFWSContext.ipcOutVideoPrm.inQueParams.prevLinkQueId = 0;
    gFFWSContext.ipcOutVideoPrm.outQueParams[0].nextLink = gFFWSContext.ipcInVpssId;
    gFFWSContext.ipcOutVideoPrm.notifyNextLink = TRUE;
    gFFWSContext.ipcOutVideoPrm.notifyPrevLink = TRUE;
    gFFWSContext.ipcOutVideoPrm.numOutQue = 1;

    gFFWSContext.ipcInVpssPrm.inQueParams.prevLinkId = gFFWSContext.ipcOutVideoId;
    gFFWSContext.ipcInVpssPrm.inQueParams.prevLinkQueId = 0;
    gFFWSContext.ipcInVpssPrm.notifyNextLink = TRUE;
    gFFWSContext.ipcInVpssPrm.notifyPrevLink = TRUE;
    gFFWSContext.ipcInVpssPrm.numOutQue = 1;
    gFFWSContext.ipcInVpssPrm.outQueParams[0].nextLink = gFFWSContext.mergeId[1];
    #endif


    /* MERGE 1 Link PARM INIT */
    #if 0
    gFFWSContext.mergePrm[1].numInQue = 3;
    gFFWSContext.mergePrm[1].inQueParams[0].prevLinkId = gVcapModuleContext.ipcFramesOutVpssId[0];
    gFFWSContext.mergePrm[1].inQueParams[0].prevLinkQueId = 0;
    gFFWSContext.mergePrm[1].inQueParams[1].prevLinkId = gVcapModuleContext.ipcFramesOutVpssId[1];
    gFFWSContext.mergePrm[1].inQueParams[1].prevLinkQueId = 0;
    gFFWSContext.mergePrm[1].inQueParams[2].prevLinkId = gFFWSContext.ipcInVpssId;
    gFFWSContext.mergePrm[1].inQueParams[2].prevLinkQueId = 0;
    #else

    gFFWSContext.mergePrm[1].numInQue = 2;
    //gFFWSContext.mergePrm[1].inQueParams[0].prevLinkId = gVcapModuleContext.deiId[0];
    gFFWSContext.mergePrm[1].inQueParams[0].prevLinkId = gVcapModuleContext.ipcFramesOutVpssId[0];
    gFFWSContext.mergePrm[1].inQueParams[0].prevLinkQueId = 0;
    gFFWSContext.mergePrm[1].inQueParams[1].prevLinkId = gVcapModuleContext.ipcFramesOutVpssId[1];
    gFFWSContext.mergePrm[1].inQueParams[1].prevLinkQueId = 0;
    #endif

    //gFFWSContext.mergePrm[1].outQueParams.nextLink = gFFWSContext.dupId[1];
    gFFWSContext.mergePrm[1].outQueParams.nextLink = gFFWSContext.dupId[2];
    //gFFWSContext.mergePrm[1].outQueParams.nextLink = gVdisModuleContext.swMsId[0];
    gFFWSContext.mergePrm[1].notifyNextLink = TRUE;
    //gFFWSContext.mergePrm[0].outQueParams.nextLink = gVcapModuleContext.ipcFramesOutVpssId[0];
    MULTICH_FFWS_CREATE_LINK(gFFWSContext.mergeId[1],&gFFWSContext.mergePrm[1],sizeof(MergeLink_CreateParams));


    #if 1
    /**Dup Link 2*/
    gFFWSContext.dupPrm[2].inQueParams.prevLinkId = gFFWSContext.mergeId[1];
    gFFWSContext.dupPrm[2].inQueParams.prevLinkQueId = 0;
    gFFWSContext.dupPrm[2].numOutQue = 2;
    gFFWSContext.dupPrm[2].notifyNextLink = TRUE;
    gFFWSContext.dupPrm[2].outQueParams[0].nextLink = gVdisModuleContext.swMsId[0];
    gFFWSContext.dupPrm[2].outQueParams[1].nextLink = gFFWSContext.ipcOutVpssId;
    MULTICH_FFWS_CREATE_LINK(gFFWSContext.dupId[2],&gFFWSContext.dupPrm[2],sizeof(DupLink_CreateParams));
    #else
    /**Dup Link 2*/
    gFFWSContext.dupPrm[1].inQueParams.prevLinkId = gVcapModuleContext.ipcFramesOutVpssId[0];
    gFFWSContext.dupPrm[1].inQueParams.prevLinkQueId = 0;
    gFFWSContext.dupPrm[1].numOutQue = 2;
    gFFWSContext.dupPrm[1].notifyNextLink = TRUE;
    gFFWSContext.dupPrm[1].outQueParams[0].nextLink = gVdisModuleContext.swMsId[0];
    gFFWSContext.dupPrm[1].outQueParams[1].nextLink = gFFWSContext.ipcOutVpssId;
    MULTICH_FFWS_CREATE_LINK(gFFWSContext.dupId[1],&gFFWSContext.dupPrm[1],sizeof(DupLink_CreateParams));

    #endif

    /**SW+Display */
    //gFFWSContext.swMsPrm[0].inQueParams.prevLinkId = gFFWSContext.dupId[1];
    //gFFWSContext.swMsPrm[0].inQueParams.prevLinkId = gVcapModuleContext.ipcFramesOutVpssId[0];
    //gFFWSContext.swMsPrm[0].inQueParams.prevLinkId = gFFWSContext.mergeId[1];
    gFFWSContext.swMsPrm[0].inQueParams.prevLinkId = gFFWSContext.dupId[2];
    gFFWSContext.swMsPrm[0].inQueParams.prevLinkQueId = 0;
    for( i = 0; i < 1; i++ )
    {
    SwMsLink_CreateParams * swMsPrm = &gFFWSContext.swMsPrm[i];
    DisplayLink_CreateParams * displayPrm = &gFFWSContext.displayPrm[i];

    UInt32 resolution = gVdisModuleContext.vdisConfig.deviceParams[i].resolution;
    UInt32 enableLayoutGridDraw = gVdisModuleContext.vdisConfig.enableLayoutGridDraw;

    Multich_ffws_set_display_prm(swMsPrm, displayPrm, resolution, enableLayoutGridDraw);

    swMsPrm->outQueParams.nextLink = gVdisModuleContext.displayId[i];

    displayPrm->inQueParams[0].prevLinkId = gVdisModuleContext.swMsId[i];
    displayPrm->inQueParams[0].prevLinkQueId = 0;

    MULTICH_FFWS_CREATE_LINK(gVdisModuleContext.swMsId[i],swMsPrm,sizeof(SwMsLink_CreateParams));
    MULTICH_FFWS_CREATE_LINK(gVdisModuleContext.displayId[i],displayPrm,sizeof(DisplayLink_CreateParams));
    }
    #if 1
    /** IPC VPSS OUT Link*/
    //gFFWSContext.ipcOutVpssPrm.inQueParams.prevLinkId = gFFWSContext.mergeId[1];
    //gFFWSContext.ipcOutVpssPrm.inQueParams.prevLinkId = gFFWSContext.dupId[1];
    gFFWSContext.ipcOutVpssPrm.inQueParams.prevLinkId = gFFWSContext.dupId[2];
    gFFWSContext.ipcOutVpssPrm.inQueParams.prevLinkQueId = 1;
    gFFWSContext.ipcOutVpssPrm.numOutQue = 1;
    gFFWSContext.ipcOutVpssPrm.outQueParams[0].nextLink = gFFWSContext.ipcInVideoId;
    gFFWSContext.ipcOutVpssPrm.notifyNextLink = FALSE;
    gFFWSContext.ipcOutVpssPrm.notifyPrevLink = TRUE;
    gFFWSContext.ipcOutVpssPrm.noNotifyMode = TRUE;
    MULTICH_FFWS_CREATE_LINK(gFFWSContext.ipcOutVpssId, &gFFWSContext.ipcOutVpssPrm, sizeof(IpcLink_CreateParams ));

    /**IPC IN VIDEO Link*/
    gFFWSContext.ipcInVideoPrm.inQueParams.prevLinkId = gFFWSContext.ipcOutVpssId;
    gFFWSContext.ipcInVideoPrm.inQueParams.prevLinkQueId = 0;
    gFFWSContext.ipcInVideoPrm.numOutQue = 1;
    gFFWSContext.ipcInVideoPrm.outQueParams[0].nextLink = gVencModuleContext.encId;
    gFFWSContext.ipcInVideoPrm.notifyNextLink = TRUE;
    gFFWSContext.ipcInVideoPrm.notifyPrevLink = FALSE;
    gFFWSContext.ipcInVideoPrm.noNotifyMode = TRUE;
    MULTICH_FFWS_CREATE_LINK(gFFWSContext.ipcInVideoId, &gFFWSContext.ipcInVideoPrm, sizeof(IpcLink_CreateParams ) );

    /**ENC Link */
    gFFWSContext.encPrm.inQueParams.prevLinkId = gFFWSContext.ipcInVideoId;
    gFFWSContext.encPrm.inQueParams.prevLinkQueId = 0;
    Multich_ffws_set_enclink_prm(&gFFWSContext.encPrm);
    gFFWSContext.encPrm.outQueParams.nextLink = gVencModuleContext.ipcBitsOutRTOSId;
    MULTICH_FFWS_CREATE_LINK(gVencModuleContext.encId, &gFFWSContext.encPrm, sizeof( EncLink_CreateParams ));

    /**IPC BITS OUT VIDEO Link */
    gFFWSContext.ipcBitsOutVideoPrm.baseCreateParams.inQueParams.prevLinkId = gVencModuleContext.encId;
    gFFWSContext.ipcBitsOutVideoPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
    gFFWSContext.ipcBitsOutVideoPrm.baseCreateParams.numOutQue = 1;
    gFFWSContext.ipcBitsOutVideoPrm.baseCreateParams.outQueParams[0].nextLink = gVencModuleContext.ipcBitsInHLOSId;
    MultiCh_ipcBitsInitCreateParams_BitsOutRTOS( &gFFWSContext.ipcBitsOutVideoPrm, TRUE );
    MULTICH_FFWS_CREATE_LINK(gVencModuleContext.ipcBitsOutRTOSId, &gFFWSContext.ipcBitsOutVideoPrm, sizeof( IpcBitsOutLinkRTOS_CreateParams ));

    /**IPC BITS IN HOST Link */
    gFFWSContext.ipcBitsInHostPrm.baseCreateParams.inQueParams.prevLinkId = gVencModuleContext.ipcBitsOutRTOSId;
    gFFWSContext.ipcBitsInHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
    gFFWSContext.ipcBitsInHostPrm.baseCreateParams.numOutQue = 1;
    gFFWSContext.ipcBitsInHostPrm.baseCreateParams.outQueParams[0].nextLink = SYSTEM_LINK_ID_INVALID;
    MultiCh_ipcBitsInitCreateParams_BitsInHLOS( &gFFWSContext.ipcBitsInHostPrm );

    MULTICH_FFWS_CREATE_LINK(gVencModuleContext.ipcBitsInHLOSId, &gFFWSContext.ipcBitsInHostPrm, sizeof( IpcBitsInLinkHLOS_CreateParams));
    #endif

    }

  • Encoder requires input in YUV420SP format but you have DEI DEI_SC output connected to encoder which will be YUV422I format. You will have to connect NSF to output of DEI_SC to convert to YUV420SP format.