Hi,I am using DVRRDK_04.00.00.03 on my own dm8168 board.
8 channels PAL/NTSC inputs from TVP5158,now I want two video chain,one for D1,one for CIF,and my chain is:
Capture
|
Dei
|
Nsf
|
Dup
|
-----------------
| |
ipcFramesOutVpss1 Sclr
| |
ipcOutVpss ipcFrameOutVpss--------ipcFramesInDs(processLink)
| | |
ipcInVideo SYSTEM_LINK_ID_INVALID DspAlg
|
Enc
|
ipcBitsOutVideo
|
ipcBitsInHost
|
SYSTEM_LINK_ID_INVALID
and my chains config is:
captureId = SYSTEM_LINK_ID_CAPTURE;
deiId = SYSTEM_LINK_ID_DEI_HQ_0;
sclrId = SYSTEM_LINK_ID_SCLR_INST_0;
ipcFramesOutVpssId2 = SYSTEM_VPSS_LINK_ID_IPC_FRAMES_OUT_1;
dupId = SYSTEM_VPSS_LINK_ID_DUP_0;
nsfId = SYSTEM_LINK_ID_NSF_0;
ipcOutVpssId = SYSTEM_VPSS_LINK_ID_IPC_OUT_M3_0;
ipcInVideoId = SYSTEM_VIDEO_LINK_ID_IPC_IN_M3_0;
encId = SYSTEM_LINK_ID_VENC_0;
ipcBitsOutVideoId = SYSTEM_VIDEO_LINK_ID_IPC_BITS_OUT_0;
ipcBitsInHostId = SYSTEM_HOST_LINK_ID_IPC_BITS_IN_0;
ipcFramesOutVpssId = SYSTEM_VPSS_LINK_ID_IPC_FRAMES_OUT_0;
ipcFramesInDspId = SYSTEM_DSP_LINK_ID_IPC_FRAMES_IN_0;
dspAlgId = SYSTEM_LINK_ID_ALG_0 ;
capturePrm.numVipInst = 2;
capturePrm.tilerEnable = FALSE;
capturePrm.numBufsPerCh = 8;
for (vipInstId = 0; vipInstId < capturePrm.numVipInst; vipInstId++)
{
pCaptureInstPrm = &capturePrm.vipInst[vipInstId];
pCaptureInstPrm->vipInstId = SYSTEM_CAPTURE_INST_VIP0_PORTA + vipInstId;
pCaptureInstPrm->videoDecoderId = SYSTEM_DEVICE_VID_DEC_TVP5158_DRV;
pCaptureInstPrm->inDataFormat = SYSTEM_DF_YUV422P;
pCaptureInstPrm->standard = SYSTEM_STD_MUX_4CH_D1;
pCaptureInstPrm->numOutput = 1;
pCaptureOutPrm = &pCaptureInstPrm->outParams[0];
pCaptureOutPrm->dataFormat = SYSTEM_DF_YUV422I_YUYV;
pCaptureOutPrm->scEnable = FALSE;
pCaptureOutPrm->scOutWidth = 0;
pCaptureOutPrm->scOutHeight = 0;
pCaptureOutPrm->outQueId = 0;
}
for (i = 0; i < 2; i++)
{
vidDecVideoModeArgs[i].vipInstId = SYSTEM_CAPTURE_INST_VIP0_PORTA+i;
vidDecVideoModeArgs[i].deviceId = DEVICE_VID_DEC_TVP5158_DRV;
vidDecVideoModeArgs[i].numChInDevice = 4;
vidDecVideoModeArgs[i].modeParams.videoIfMode = DEVICE_CAPT_VIDEO_IF_MODE_8BIT;
vidDecVideoModeArgs[i].modeParams.videoDataFormat = SYSTEM_DF_YUV422P;
vidDecVideoModeArgs[i].modeParams.standard = SYSTEM_STD_MUX_4CH_D1;
vidDecVideoModeArgs[i].modeParams.videoCaptureMode = DEVICE_CAPT_VIDEO_CAPTURE_MODE_MULTI_CH_PIXEL_MUX_EMBEDDED_SYNC;
vidDecVideoModeArgs[i].modeParams.videoSystem = DEVICE_VIDEO_DECODER_VIDEO_SYSTEM_AUTO_DETECT;
vidDecVideoModeArgs[i].modeParams.videoCropEnable = FALSE;
vidDecVideoModeArgs[i].modeParams.videoAutoDetectTimeout = -1;
}
capturePrm.outQueParams[0].nextLink = deiId;
capturePrm.outQueParams[1].nextLink = deiId;
deiPrm.inQueParams.prevLinkId = captureId;
deiPrm.inQueParams.prevLinkQueId = 0;
deiPrm.outQueParams[DEI_LINK_OUT_QUE_VIP_SC].nextLink = nsfId;
deiPrm.enableOut[DEI_LINK_OUT_QUE_DEI_SC] = FALSE;
deiPrm.enableOut[DEI_LINK_OUT_QUE_VIP_SC] = TRUE;
deiPrm.enableOut[DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT] = FALSE;
deiPrm.tilerEnable[DEI_LINK_OUT_QUE_DEI_SC] = FALSE;
deiPrm.tilerEnable[DEI_LINK_OUT_QUE_VIP_SC] = FALSE;
deiPrm.comprEnable = FALSE;
deiPrm.setVipScYuv422Format = TRUE;
deiPrm.enableDeiForceBypass = FALSE;
deiPrm.enableLineSkipSc = FALSE;
deiPrm.inputFrameRate[DEI_LINK_OUT_QUE_VIP_SC] = 60;
deiPrm.outputFrameRate[DEI_LINK_OUT_QUE_VIP_SC] = 30;
deiPrm.inputDeiFrameRate = 60;
deiPrm.outputDeiFrameRate = 60;
nsfPrm.bypassNsf = FALSE;
nsfPrm.tilerEnable = FALSE;
nsfPrm.inQueParams.prevLinkId = deiId;
nsfPrm.numOutQue = 1;
nsfPrm.outQueParams[0].nextLink = dupId;
nsfPrm.inQueParams.prevLinkQueId = 1;
dupPrm.inQueParams.prevLinkId = nsfId;
dupPrm.inQueParams.prevLinkQueId = 0;
dupPrm.notifyNextLink = TRUE;
dupPrm.numOutQue = 2;
dupPrm.outQueParams[0].nextLink = sclrId;
dupPrm.outQueParams[1].nextLink = ipcFramesOutVpssId2;
sclrPrm.inQueParams.prevLinkId = dupId;
sclrPrm.outQueParams.nextLink = ipcFramesOutVpssId;
sclrPrm.pathId = SCLR_LINK_SC5;
sclrPrm.inQueParams.prevLinkQueId = 0;
sclrPrm.tilerEnable = FALSE;
sclrPrm.enableLineSkipSc = FALSE;
sclrPrm.inputFrameRate = 60;
sclrPrm.outputFrameRate = 60;
sclrPrm.scaleMode = SCLR_SCALE_MODE_RATIO;
sclrPrm.outScaleFactor.ratio.widthRatio.numerator = 1;
sclrPrm.outScaleFactor.ratio.widthRatio.denominator = 2;
sclrPrm.outScaleFactor.ratio.heightRatio.numerator = 1;
sclrPrm.outScaleFactor.ratio.heightRatio.denominator = 2;
ipcFramesOutVpssPrm.baseCreateParams.inQueParams.prevLinkId = sclrId;
ipcFramesOutVpssPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcFramesOutVpssPrm.baseCreateParams.notifyPrevLink = TRUE;
ipcFramesOutVpssPrm.baseCreateParams.numOutQue = 1;
ipcFramesOutVpssPrm.baseCreateParams.outQueParams[0].nextLink = SYSTEM_LINK_ID_INVALID;
ipcFramesOutVpssPrm.baseCreateParams.notifyNextLink = FALSE;
ipcFramesOutVpssPrm.baseCreateParams.processLink = ipcFramesInDspId;
ipcFramesOutVpssPrm.baseCreateParams.notifyProcessLink = TRUE;
ipcFramesOutVpssPrm.baseCreateParams.noNotifyMode = FALSE;
ipcFramesOutVpssPrm2.baseCreateParams.inQueParams.prevLinkId = dupId;
ipcFramesOutVpssPrm2.baseCreateParams.inQueParams.prevLinkQueId = 1;
ipcFramesOutVpssPrm2.baseCreateParams.notifyPrevLink = TRUE;
ipcFramesOutVpssPrm2.baseCreateParams.numOutQue = 1;
ipcFramesOutVpssPrm2.baseCreateParams.outQueParams[0].nextLink = ipcOutVpssId;
ipcFramesOutVpssPrm2.baseCreateParams.notifyNextLink = TRUE;
ipcFramesOutVpssPrm2.baseCreateParams.processLink = SYSTEM_LINK_ID_INVALID;
ipcFramesOutVpssPrm2.baseCreateParams.notifyProcessLink = FALSE;
ipcFramesOutVpssPrm2.baseCreateParams.noNotifyMode = FALSE;
ipcFramesInDspPrm.baseCreateParams.inQueParams.prevLinkId = ipcFramesOutVpssId;
ipcFramesInDspPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcFramesInDspPrm.baseCreateParams.numOutQue = 1;
ipcFramesInDspPrm.baseCreateParams.outQueParams[0].nextLink = dspAlgId;
ipcFramesInDspPrm.baseCreateParams.notifyPrevLink = TRUE;
ipcFramesInDspPrm.baseCreateParams.notifyNextLink = TRUE;
ipcFramesInDspPrm.baseCreateParams.noNotifyMode = FALSE;
dspAlgPrm.inQueParams.prevLinkId = ipcFramesInDspId;
dspAlgPrm.inQueParams.prevLinkQueId = 0;
dspAlgPrm.enableOSDAlg = TRUE;
for(chId = 0; chId < ALG_LINK_OSD_MAX_CH; chId++)
{
AlgLink_OsdChWinParams * chWinPrm = &dspAlgPrm.osdChCreateParams[chId].chDefaultParams;
dspAlgPrm.osdChCreateParams[chId].maxWidth = 720;
dspAlgPrm.osdChCreateParams[chId].maxHeight = 576;
chWinPrm->chId = chId;
chWinPrm->numWindows = 0;
}
pIpcOutVpssPrm = &(IpcOutVpssPrm);
pIpcOutVpssPrm->inQueParams.prevLinkId = ipcFramesOutVpssId2;
pIpcOutVpssPrm->inQueParams.prevLinkQueId = 0;
pIpcOutVpssPrm->numOutQue = 1;
pIpcOutVpssPrm->outQueParams[0].nextLink = ipcInVideoId;
pIpcOutVpssPrm->notifyNextLink = TRUE;
pIpcOutVpssPrm->notifyPrevLink = TRUE;
pIpcOutVpssPrm->noNotifyMode = FALSE;
pIpcInVideoPrm = &(IpcInVideoPrm);
pIpcInVideoPrm->inQueParams.prevLinkId = ipcOutVpssId;
pIpcInVideoPrm->inQueParams.prevLinkQueId = 0;
pIpcInVideoPrm->numOutQue = 1;
pIpcInVideoPrm->outQueParams[0].nextLink = encId;
pIpcInVideoPrm->notifyNextLink = TRUE;
pIpcInVideoPrm->notifyPrevLink = TRUE;
pIpcInVideoPrm->noNotifyMode = FALSE;
pEncPrm = &(EncPrm);
for(i=0;i<8;i++)
{
pEncPrm->chCreateParams[i].format = IVIDEO_H264HP;
pEncPrm->chCreateParams[i].profile = IH264_HIGH_PROFILE;
pEncPrm->chCreateParams[i].dataLayout = IVIDEO_FIELD_SEPARATED;
pEncPrm->chCreateParams[i].fieldMergeEncodeEnable = FALSE;
pEncPrm->chCreateParams[i].defaultDynamicParams.intraFrameInterval = 60;
pEncPrm->chCreateParams[i].encodingPreset = XDM_DEFAULT;
pEncPrm->chCreateParams[i].enableAnalyticinfo = 0;
pEncPrm->chCreateParams[i].rateControlPreset = IVIDEO_STORAGE;
pEncPrm->chCreateParams[i].defaultDynamicParams.inputFrameRate = 30;
pEncPrm->chCreateParams[i].defaultDynamicParams.targetBitRate = 1*1000*1000;//20000 * 1000;
pEncPrm->chCreateParams[i].defaultDynamicParams.interFrameInterval = 1;
pEncPrm->chCreateParams[i].defaultDynamicParams.mvAccuracy = IVIDENC2_MOTIONVECTOR_QUARTERPEL;
}
pEncPrm->inQueParams.prevLinkId = ipcInVideoId;
pEncPrm->inQueParams.prevLinkQueId = 0;
pEncPrm->outQueParams.nextLink = ipcBitsOutVideoId;
pIpcBitsOutVideoPrm = &(IpcBitsOutVideoPrm);
pIpcBitsOutVideoPrm->baseCreateParams.inQueParams.prevLinkId = encId;
pIpcBitsOutVideoPrm->baseCreateParams.inQueParams.prevLinkQueId = 0;
pIpcBitsOutVideoPrm->baseCreateParams.numOutQue = 1;
pIpcBitsOutVideoPrm->baseCreateParams.outQueParams[0].nextLink = ipcBitsInHostId;
pIpcBitsOutVideoPrm->baseCreateParams.noNotifyMode = TRUE;
pIpcBitsOutVideoPrm->baseCreateParams.notifyNextLink = FALSE;
pIpcBitsOutVideoPrm->baseCreateParams.notifyPrevLink = TRUE;
pIpcBitsInHostPrm = &(IpcBitsInHostPrm);
pIpcBitsInHostPrm->baseCreateParams.inQueParams.prevLinkId = ipcBitsOutVideoId;
pIpcBitsInHostPrm->baseCreateParams.inQueParams.prevLinkQueId = 0;
pIpcBitsInHostPrm->baseCreateParams.outQueParams[0].nextLink = SYSTEM_LINK_ID_INVALID;
pIpcBitsInHostPrm->baseCreateParams.noNotifyMode = TRUE;
pIpcBitsInHostPrm->baseCreateParams.notifyNextLink = FALSE;
pIpcBitsInHostPrm->baseCreateParams.notifyPrevLink = FALSE;
System_linkCreate(captureId, &capturePrm, sizeof(CaptureLink_CreateParams));
System_linkCreate(deiId,&(deiPrm), sizeof(DeiLink_CreateParams));
System_linkCreate(nsfId,&(nsfPrm), sizeof(NsfLink_CreateParams));
System_linkCreate(dupId, &dupPrm, sizeof(DupLink_CreateParams));
System_linkCreate(sclrId, &sclrPrm, sizeof(SclrLink_CreateParams));
System_linkCreate(ipcFramesOutVpssId, &ipcFramesOutVpssPrm, sizeof(ipcFramesOutVpssPrm));
System_linkCreate(ipcFramesInDspId, &ipcFramesInDspPrm, sizeof(ipcFramesInDspPrm));
System_linkCreate(dspAlgId , &dspAlgPrm, sizeof(dspAlgPrm));
System_linkCreate(ipcFramesOutVpssId2, &ipcFramesOutVpssPrm2, sizeof(ipcFramesOutVpssPrm2));
System_linkCreate(ipcOutVpssId, &IpcOutVpssPrm, sizeof(IpcLink_CreateParams));
System_linkCreate(ipcInVideoId, &IpcInVideoPrm, sizeof(IpcLink_CreateParams));
System_linkCreate(encId, &EncPrm, sizeof(EncLink_CreateParams));
System_linkCreate(ipcBitsOutVideoId, &IpcBitsOutVideoPrm, sizeof(IpcBitsOutLinkRTOS_CreateParams));
System_linkCreate(ipcBitsInHostId, &IpcBitsInHostPrm, sizeof(IpcBitsInLinkHLOS_CreateParams));
System_linkStart(ipcBitsInHostId);
System_linkStart(ipcBitsOutVideoId);
System_linkStart(encId);
System_linkStart(ipcInVideoId);
System_linkStart(ipcOutVpssId);
System_linkStart(ipcFramesOutVpssId2);
System_linkStart(ipcFramesInDspId);
System_linkStart(dspAlgId);
System_linkStart(ipcFramesOutVpssId);
System_linkStart(sclrId);
System_linkStart(dupId);
System_linkStart(nsfId);
System_linkStart(deiId);
System_linkStart(captureId);
when I run the program,It thrown exception:
!!!SLAVE CORE [VPSS-M3] DOWN!!!
SystemLink_copySlaveCoreExceptionContext:120
mmap of [0xbe020000:36864]
mmap virt addresss:0x400ac000
munmap of [0x400ac000:36864]
SystemLink_copySlaveCoreExceptionContext:127
SystemLink_handleSlaveCoreException:149
14505:!!!SLAVE CORE DOWN!!!.EXCEPTION INFO DUMP
!!HW EXCEPTION ACTIVE (0/1): [0]
!!EXCEPTION CORE NAME : [VPSS-M3]
!!EXCEPTION TASK NAME : [IPC_FRAMES_OUT1]
!!EXCEPTION LOCATION : [links_common/system/system_ipc_notify.c:69]
!!EXCEPTION INFO : [status == Notify_S_SUCCESS]
[m3vpss ] 21730: NOTIFY: Send Event to [VPSS-M3][0] failed!!! (status = -14)
[m3vpss ] 21730: Assertion @ Line: 69 in links_common/system/system_ipc_notify.c: status == Notify_S_SUCCESS : failed !!!
any sugesstions??
THX!