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.
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.