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.

problem with multich_encode_decode usecase on DM8148

I am working DM8148 RDK version 3.5.

I want to modify multich_encode_decode like this: 

CAMERA(VPSSM3)
|
|
FRAMES OUT(VPSSM3)
|
|
FRAMES IN(VIDEOM3)
|
|
ENC(VIDEOM3)
|
|
BITS OUT(VIDEOM3)
|
|
BITS IN(A8)
|
|
|
|
BITS OUT(A8)
|
|
BITS IN(VIDEOM3)
|
|
DEC(VIDEOM3)
|
|
FRAMES OUT(VIDEOM3)
|
|
FRAME IN(VPSSM3)
|
|
SW MOSAIC(VPSSM3)
|
|
DISPLAY(VPSSM3)

But it didnt work and I got errors follow:

.......
Arago Project http://arago-project.org dm814x-evm ttyO0
Arago 2011.09 dm814x-evm ttyO0

[host] 0: SYSTEM: System Common Init in progress !!!
[host] 10: SYSTEM: IPC init in progress !!!
dm814x-evm login:
[host] 67: SYSTEM: CPU [DSP] syslink proc ID is [0] !!!
[host] 67: SYSTEM: CPU [VIDEO-M3] syslink proc ID is [1] !!!
[host] 67: SYSTEM: CPU [VPSS-M3] syslink proc ID is [2] !!!
[host] 67: SYSTEM: CPU [HOST] syslink proc ID is [3] !!!
[host] 67: SYSTEM: Opening MsgQ Heap [IPC_MSGQ_MSG_HEAP] ...
[host] 70: SYSTEM: Creating MsgQ [HOST_MSGQ] ...
[host] 90: SYSTEM: Creating MsgQ [HOST_ACK_MSGQ] ...
[host] 92: SYSTEM: Opening MsgQ [VIDEO-M3_MSGQ] ...
[host] 93: SYSTEM: Opening MsgQ [VPSS-M3_MSGQ] ...
[host] 95: SYSTEM: Notify register to [VIDEO-M3] line 0, event 12 ...
[host] 97: SYSTEM: Notify register to [VPSS-M3] line 0, event 12 ...
[host] 97: SYSTEM: IPC init DONE !!!
[host] 104: SYSTEM: Creating ListMP [HOST_IPC_OUT_28] in region 0 ...
[host] 107: SYSTEM: Creating ListMP [HOST_IPC_IN_28] in region 0 ...
[host] 108: SYSTEM: ListElem Shared DMA: ChannelID allocated:2
Addr = 0x405f860DMA: ChannelID allocated:3
0
[host] 109: SYSTEM: Creating ListMP [HOST_IPC_OUT_29] in region 0 ...
[host] 111: SYSTEM: Creating ListMP [HOST_IPC_IN_29] in region 0 ...
[host] 113: SYSTEM: ListElem Shared Addr = 0x40612280
[host] 115: SYSTEM: Creating ListMP [HOST_IPC_OUT_23] in region 0 ...
[host] 117: SYSTEM: Creating ListMP [HOST_IPC_IN_23] in region 0 ...
[host] 119: SYSTEM: ListElem Shared Addr = 0x4062bf00
[host] 120: SYSTEM: Creating ListMP [HOST_IPC_OUT_24] in region 0 ...
[host] 131: SYSTEM: Creating ListMP [HOST_IPC_IN_24] in region 0 ...
[host] 133: SYSTEM: ListElem Shared Addr = 0x4064b900
[host] 134: SYSTEM: Creating ListMP [HOST_IPC_OUT_25] in region 0 ...
[host] 136: SYSTEM: Creating ListMP [HOST_IPC_IN_25] in region 0 ...
[host] 137: SYSTEM: ListElem Shared Addr = 0x4066b300
[host] 138: SYSTEM: System Common Init Done !!!
[host] Vsys_allocBuf - addr = 0x4d1DMA: ChannelID allocated:4
5e000,size = 65011712
[host] MCFW_IPCBITS:App_streamSysInit:virt addr of 85000000 cir buffer is 4d15e000
##########pInfo->totalsize 63897600
[host] MemMng_memcpy_open:OSA_dmaOpen passed with ch id = 2
[host] CacheMng_MemCpy_open:OSA_dmaOpen passed with ch id = 3
Creat queue id:131076
queue id:131076
queue id:65538
[host]

MCFW_IPCBITS:App_ipcBitsRecvStreamFxn:Entered...0
[host] MCFW_IPCFRAMES:App_ipcFramesSendRecvFxn:Entered...
[host] Before System_linkControl SYSTEM_M3VPSS_CMD_GET_DISPLAYCTRL_INIT
[m3vpss ] VPS_DCTRL_INST_0
[m3vpss ] IOCTL_VPS_DCTRL_SET_VENC_OUTPUT SYSTEM_DC_VENC_DVO2
[m3vpss ] IOCTL_VPS_DCTRL_SET_VENC_OUTPUT SYSTEM_DC_VENC_HDMI
[m3vpss ] IOCTL_VPS_DCTRL_SET_VENC_OUTPUT SYSTEM_DC_VENC_SD
[m3vpss ] IOCTL_VPS_DCTRL_SET_VENC_CLK_SRC VPS_DC_VENC_HDMI | VPS_DC_VENC_DVO2
[host] [multich_encode_decode usecase] Open Socket Successfully!
[host] [multich_encode_decode usecase]-VIDEO IP_ADDR 239.62.100.14

[host] Entered IPC Bits Handler function
[host] MultiCh_createEncA8Dec:OSA_dmaOpen passed with ch id = 4
[host] 
********** ENC A8 DEC USE CASE ********
[host] 
********* Entered Encode + Decode usecase - H264 1080p @30fps Encode + H264 1080p @30fps Decode ********
[host] 240: MCFW : CPU Revision [ES2.1] !!!
[host] 240: MCFW : Detected [2x SIL1161A, 2x TVP7002 Catalog2x SIL1161A, 2x TVP7002 DVR] Board !!!
[host] 240: MCFW : Base Board Revision [REV A] !!!
[host] 240: MCFW : Daughter Card Revision [REV A] !!! 
[m3vpss ] 7767: CAMERA: Create in progress !!!
[m3vpss ] 7768: CAMERA: VIP0 PortA camera mode is [ 8-bit, Non-mux Embedded Sync] !!!
[m3vpss ] 7768: CAMERA: VIP 0: VID DEC 268436743 (0x30): bebebebe:bebebebe:8ebd60d8, AUD_STATUS -1094795586
[m3vpss ] Stream ID 0: chId = 0 VpsUtils_queCreate.
[m3vpss ] 7934: CAMERA: Create Done !!!
[m3vpss ] 8022: CAMERA: Detect video in progress !!!
[m3vpss ] 8022: CAMERA: Detect video Done !!!
[m3vpss ] 8113: Assertion @ Line: 25 in links_common/dup/dupLink_tsk.c: pObj->createArgs.numOutQue <= DUP_LINK_MAX_OUT_QUE : failed !!!
queue id:0
ApproDrvInit: 3
queue id:131076
queue id:0
queue id:32769
queue id:0
ApproDrvInit: 7
queue id:131076

....

Here my source code:

/* Camera Link */
CameraLink_CreateParams_Init(&cameraPrm);

cameraPrm.captureMode = CAMERA_LINK_CAPMODE_ISIF;
cameraPrm.numAudioChannels = 1;
cameraPrm.numVipInst = 1;
cameraPrm.tilerEnable = FALSE;
cameraPrm.vsEnable = FALSE;
//quyendv
//cameraPrm.outQueParams[0].nextLink = gDupId;
cameraPrm.outQueParams[0].nextLink = gIpcOutVpssId;
//~quyendv
cameraPrm.t2aConfig.n2A_vendor = gUI_mcfw_config.n2A_vendor;
cameraPrm.t2aConfig.n2A_mode = gUI_mcfw_config.n2A_mode;

pCameraInstPrm = &cameraPrm.vipInst[0];
pCameraInstPrm->vipInstId = SYSTEM_CAMERA_INST_VP_CSI2;
pCameraInstPrm->videoDecoderId = MultiCh_getSensorId(gUI_mcfw_config.sensorId);
pCameraInstPrm->inDataFormat = SYSTEM_DF_YUV420SP_UV;
pCameraInstPrm->sensorOutWidth = 1920;
pCameraInstPrm->sensorOutHeight = 1080;
pCameraInstPrm->standard = SYSTEM_STD_1080P_30;
pCameraInstPrm->numOutput = 1;

pCameraOutPrm = &pCameraInstPrm->outParams[0];
pCameraOutPrm->dataFormat = SYSTEM_DF_YUV420SP_UV;
pCameraOutPrm->scEnable = FALSE;
pCameraOutPrm->scOutWidth = 1920;
pCameraOutPrm->scOutHeight = 1080;
pCameraOutPrm->outQueId = 0;

//quyendv
/* DUP Link */
/*
dupPrm.inQueParams.prevLinkId = gCameraId;
dupPrm.inQueParams.prevLinkQueId = 0;
dupPrm.numOutQue = 2;
dupPrm.outQueParams[0].nextLink = gIpcOutVpssId;
dupPrm.outQueParams[1].nextLink = gMergeId;
dupPrm.notifyNextLink = TRUE;
*/
//~quyendv


/* IPC FRAMES OUT VPSS Link */
//quyendv
//ipcOutVpssPrm.inQueParams.prevLinkId = gDupId;
ipcOutVpssPrm.inQueParams.prevLinkId = gCameraId;
//~quyendv
ipcOutVpssPrm.inQueParams.prevLinkQueId = 0;
ipcOutVpssPrm.numOutQue = 1;
ipcOutVpssPrm.outQueParams[0].nextLink = gIpcInVideoId;
ipcOutVpssPrm.notifyNextLink = TRUE;
ipcOutVpssPrm.notifyPrevLink = TRUE;
ipcOutVpssPrm.noNotifyMode = FALSE;

/* IPC FRAMES IN VIDEO Link */
ipcInVideoPrm.inQueParams.prevLinkId = gIpcOutVpssId;
ipcInVideoPrm.inQueParams.prevLinkQueId = 0;
ipcInVideoPrm.numOutQue = 1;
ipcInVideoPrm.outQueParams[0].nextLink = gEncId;
ipcInVideoPrm.notifyNextLink = TRUE;
ipcInVideoPrm.notifyPrevLink = TRUE;
ipcInVideoPrm.noNotifyMode = FALSE;

/* ENC link */
MULTICH_INIT_STRUCT(EncLink_CreateParams,encPrm);
{
EncLink_ChCreateParams *pLinkChPrm;
EncLink_ChDynamicParams *pLinkDynPrm;
VENC_CHN_DYNAMIC_PARAM_S *pDynPrm;
VENC_CHN_PARAMS_S *pChPrm;

for (i = 0; i < VENC_PRIMARY_CHANNELS; i++)
{
pLinkChPrm = &encPrm.chCreateParams[i];
pLinkDynPrm = &pLinkChPrm->defaultDynamicParams;

pChPrm = &gVencModuleContext.vencConfig.encChannelParams[i];
pDynPrm = &pChPrm->dynamicParam;

pLinkChPrm->format = IVIDEO_H264HP;
pLinkChPrm->profile = gVencModuleContext.vencConfig.h264Profile[i];
pLinkChPrm->dataLayout = IVIDEO_PROGRESSIVE;
pLinkChPrm->fieldMergeEncodeEnable = FALSE;
pLinkChPrm->enableAnalyticinfo = pChPrm->enableAnalyticinfo;
pLinkChPrm->maxBitRate = pChPrm->maxBitRate;
pLinkChPrm->encodingPreset = pChPrm->encodingPreset;
pLinkChPrm->rateControlPreset = IVIDEO_USER_DEFINED;
pLinkChPrm->enableHighSpeed = FALSE;
pLinkChPrm->enableWaterMarking = pChPrm->enableWaterMarking;
pLinkChPrm->StreamPreset = gUI_mcfw_config.StreamPreset[i];

pLinkDynPrm->intraFrameInterval = pDynPrm->intraFrameInterval;
pLinkDynPrm->targetBitRate = pDynPrm->targetBitRate;
pLinkDynPrm->interFrameInterval = 1;
pLinkDynPrm->mvAccuracy = IVIDENC2_MOTIONVECTOR_QUARTERPEL;
pLinkDynPrm->inputFrameRate = pDynPrm->inputFrameRate;
pLinkDynPrm->rcAlg = pDynPrm->rcAlg;
pLinkDynPrm->qpMin = pDynPrm->qpMin;
pLinkDynPrm->qpMax = pDynPrm->qpMax;
pLinkDynPrm->qpInit = pDynPrm->qpInit;
pLinkDynPrm->vbrDuration = pDynPrm->vbrDuration;
pLinkDynPrm->vbrSensitivity = pDynPrm->vbrSensitivity;

encPrm.numBufPerCh[i] = NUM_ENCODE_BUFFERS;
gVencModuleContext.encFormat[i] = pLinkChPrm->format;
}
}

encPrm.chCreateParams[0].defaultDynamicParams.inputFrameRate = 30;
encPrm.chCreateParams[1].defaultDynamicParams.inputFrameRate = 30;
encPrm.vsEnable = 0;
encPrm.isVaUseCase = 0;
encPrm.inQueParams.prevLinkId = gIpcInVideoId;
encPrm.inQueParams.prevLinkQueId = 0;

#ifdef DIR_DEC
encPrm.outQueParams.nextLink = gDecId;
#else
encPrm.outQueParams.nextLink = gIpcBitsOutVideoId;
#endif

/* IPC BITS OUT VIDEO Link */
ipcBitsOutVideoPrm.baseCreateParams.inQueParams.prevLinkId = gEncId;
ipcBitsOutVideoPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcBitsOutVideoPrm.baseCreateParams.numOutQue = 1;
ipcBitsOutVideoPrm.baseCreateParams.outQueParams[0].nextLink = gIpcBitsInHLOSId;
ipcBitsOutVideoPrm.baseCreateParams.noNotifyMode = FALSE;
ipcBitsOutVideoPrm.baseCreateParams.notifyNextLink = TRUE;
ipcBitsOutVideoPrm.baseCreateParams.notifyPrevLink = TRUE;

/* IPC BITS IN HLOS Link */
ipcBitsInHostPrm.baseCreateParams.inQueParams.prevLinkId = gIpcBitsOutVideoId;
ipcBitsInHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcBitsInHostPrm.baseCreateParams.noNotifyMode = FALSE;
ipcBitsInHostPrm.baseCreateParams.notifyNextLink = TRUE;
ipcBitsInHostPrm.baseCreateParams.notifyPrevLink = TRUE;
ipcBitsInHostPrm.cbFxn = MultiCh_ipcBitsInHostCb;
ipcBitsInHostPrm.cbCtx = NULL;

/* Link creation */
System_linkCreate(gCameraId,&cameraPrm,sizeof(CameraLink_CreateParams));
System_linkControl(gCameraId,CAMERA_LINK_CMD_DETECT_VIDEO,NULL,0,TRUE);

System_linkCreate(gDupId,&dupPrm,sizeof(DupLink_CreateParams));
System_linkCreate(gIpcOutVpssId,&ipcOutVpssPrm,sizeof(IpcLink_CreateParams));
System_linkCreate(gIpcInVideoId,&ipcInVideoPrm,sizeof(IpcLink_CreateParams));
System_linkCreate(gEncId,&encPrm,sizeof(EncLink_CreateParams));

#ifdef DIR_DEC
System_linkGetInfo(gEncId,&bitsProducerLinkInfo);
#else
System_linkCreate(gIpcBitsOutVideoId,&ipcBitsOutVideoPrm,sizeof(IpcBitsOutLinkRTOS_CreateParams));
System_linkCreate(gIpcBitsInHLOSId,&ipcBitsInHostPrm,sizeof(IpcBitsInLinkHLOS_CreateParams));
System_linkGetInfo(gIpcBitsInHLOSId,&bitsProducerLinkInfo);
#endif

/* IPC BITS OUT HLOS Link */
ipcBitsOutHostPrm.baseCreateParams.outQueParams[0].nextLink = gIpcBitsInVideoId;
ipcBitsOutHostPrm.baseCreateParams.notifyNextLink = TRUE;
ipcBitsOutHostPrm.baseCreateParams.notifyPrevLink = TRUE;
ipcBitsOutHostPrm.numBufPerCh[0] = NUM_IPC_OUT_BUFFERS;
ipcBitsOutHostPrm.inQueInfo = bitsProducerLinkInfo.queInfo[0];

/* IPC BITS IN VIDEO Link */
ipcBitsInVideoPrm.baseCreateParams.inQueParams.prevLinkId = gIpcBitsOutHLOSId;
ipcBitsInVideoPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcBitsInVideoPrm.baseCreateParams.numOutQue = 1;
ipcBitsInVideoPrm.baseCreateParams.outQueParams[0].nextLink = gDecId;
ipcBitsInVideoPrm.baseCreateParams.noNotifyMode = FALSE;
ipcBitsInVideoPrm.baseCreateParams.notifyNextLink = TRUE;
ipcBitsInVideoPrm.baseCreateParams.notifyPrevLink = TRUE;

/* DEC Link */
DecLink_CreateParams_Init(&decPrm);
for (i = 0; i < bitsProducerLinkInfo.queInfo[0].numCh; i++)
{
decPrm.chCreateParams[i].format = IVIDEO_H264HP;
decPrm.chCreateParams[i].profile = IH264VDEC_PROFILE_ANY;
decPrm.chCreateParams[i].fieldMergeDecodeEnable = FALSE;
decPrm.chCreateParams[i].targetMaxWidth = bitsProducerLinkInfo.queInfo[0].chInfo[i].width;
decPrm.chCreateParams[i].targetMaxHeight = bitsProducerLinkInfo.queInfo[0].chInfo[i].height;
decPrm.chCreateParams[i].defaultDynamicParams.targetFrameRate = encPrm.chCreateParams[i].defaultDynamicParams.inputFrameRate;
decPrm.chCreateParams[i].defaultDynamicParams.targetBitRate = gVdecModuleContext.vdecConfig.decChannelParams[i].dynamicParam.targetBitRate;

/* Max ref frames is only 2 as this is closed loop decoder */
decPrm.chCreateParams[i].dpbBufSizeInFrames = 2;
}

#ifdef DIR_DEC
decPrm.inQueParams.prevLinkId = gEncId;
#else
decPrm.inQueParams.prevLinkId = gIpcBitsInVideoId;
#endif
decPrm.inQueParams.prevLinkQueId = 0;
decPrm.outQueParams.nextLink = gIpcOutVideoId;
decPrm.tilerEnable = TILER_ENABLE;
decPrm.numBufPerPool[0] = NUM_DECODE_BUFFERS;

/* FRAMES OUT VIDEO Link */
ipcOutVideoPrm.inQueParams.prevLinkId = gDecId;
ipcOutVideoPrm.inQueParams.prevLinkQueId = 0;
ipcOutVideoPrm.numOutQue = 1;
ipcOutVideoPrm.outQueParams[0].nextLink = gIpcInVpssId;
ipcOutVideoPrm.notifyNextLink = TRUE;
ipcOutVideoPrm.notifyPrevLink = TRUE;
ipcOutVideoPrm.noNotifyMode = FALSE;

/* FRAMES IN VPSS Link */
ipcInVpssPrm.inQueParams.prevLinkId = gIpcOutVideoId;
ipcInVpssPrm.inQueParams.prevLinkQueId = 0;
ipcInVpssPrm.numOutQue = 1;
//quyendv
//ipcInVpssPrm.outQueParams[0].nextLink = gMergeId;
ipcInVpssPrm.outQueParams[0].nextLink = gSwMsId;
//~quyendv
ipcInVpssPrm.notifyNextLink = TRUE;
ipcInVpssPrm.notifyPrevLink = TRUE;
ipcInVpssPrm.noNotifyMode = FALSE;

/* MERGE Link */
//quyendv
/*
mergePrm.numInQue = 2;
mergePrm.inQueParams[0].prevLinkId = gDupId;
mergePrm.inQueParams[0].prevLinkQueId = 1;
mergePrm.inQueParams[1].prevLinkId = gIpcInVpssId;
mergePrm.inQueParams[1].prevLinkQueId = 0;
mergePrm.outQueParams.nextLink = gSwMsId;
mergePrm.notifyNextLink = TRUE;
*/
//~quyendv

/* SW MOSAIC Link */
SwMsLink_CreateParams_Init(&swMsPrm);
swMsPrm.numSwMsInst = 1;
swMsPrm.swMsInstId[0] = SYSTEM_SW_MS_SC_INST_VIP0_SC;
swMsPrm.swMsInstStartWin[0] = 0;
//quyendv
//swMsPrm.inQueParams.prevLinkId = gMergeId;
swMsPrm.inQueParams.prevLinkId = gIpcInVpssId;
//swMsPrm.inQueParams.prevLinkQueId = 1;
swMsPrm.inQueParams.prevLinkQueId = 0;
//~quyendv
swMsPrm.outQueParams.nextLink = gDisplayId;
swMsPrm.maxInputQueLen = SYSTEM_SW_MS_DEFAULT_INPUT_QUE_LEN;
swMsPrm.maxOutRes = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_HDMI].resolution;
swMsPrm.lineSkipMode = FALSE;
swMsPrm.enableLayoutGridDraw = gVdisModuleContext.vdisConfig.enableLayoutGridDraw;
swMsPrm.enableOuputDup = FALSE;
swMsPrm.enableProcessTieWithDisplay = FALSE;
swMsPrm.outDataFormat = SYSTEM_DF_YUV422I_YUYV;

MultiCh_swMsGetDefaultLayoutPrm(SYSTEM_DC_VENC_HDMI,&swMsPrm,FALSE);

/* DISPLAY Link */
MULTICH_INIT_STRUCT(DisplayLink_CreateParams,displayPrm);
displayPrm.inQueParams[0].prevLinkId = gSwMsId;
displayPrm.inQueParams[0].prevLinkQueId = 0;
displayPrm.displayRes = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_HDMI].resolution;
displayPrm.displayId = DISPLAY_LINK_DISPLAY_SC2;

/* Link creation */
#ifndef DIR_DEC
System_linkCreate(gIpcBitsOutHLOSId,&ipcBitsOutHostPrm,sizeof(IpcBitsOutLinkHLOS_CreateParams));
System_linkCreate(gIpcBitsInVideoId,&ipcBitsInVideoPrm,sizeof(IpcBitsInLinkRTOS_CreateParams));
#endif
System_linkCreate(gDecId,&decPrm,sizeof(DecLink_CreateParams));
System_linkCreate(gIpcOutVideoId,&ipcOutVideoPrm,sizeof(IpcLink_CreateParams));
System_linkCreate(gIpcInVpssId,&ipcInVpssPrm,sizeof(IpcLink_CreateParams));
System_linkCreate(gMergeId,&mergePrm,sizeof(MergeLink_CreateParams));
System_linkCreate(gSwMsId,&swMsPrm,sizeof(SwMsLink_CreateParams));
System_linkCreate(gDisplayId,&displayPrm,sizeof(DisplayLink_CreateParams));

OSA_printf("USECASE SETUP DONE\n");
}

Could somebody help or give me information about how to resolve this problem. Thanks so much!