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.
DM8127创建deiLink失败,串口输出报错如下:
[m3vpss ] 11426: DEI : Create in progress !!!
[m3vpss ] 11443: DEI: OUT1: 0: 0xb8a70480, 720 x 480, 4 frames
[m3vpss ] 11444: Assertion @ Line: 778 in links_m3vpss/dei/deiLink_drv.c: pObj->fvidHandle != NULL : failed !!!
开发包为ipnc-rdk3.5,usecase关键代码如下:
UInt32 gCaptureId;
UInt32 gDupId;
UInt32 gIpcOutVpssId;
UInt32 gIpcInVideoId;
UInt32 gEncId;
UInt32 gIpcBitsOutVideoId;
UInt32 gIpcBitsInHLOSId;
UInt32 gIpcBitsOutHLOSId;
UInt32 gIpcBitsInVideoId;
UInt32 gDecId;
UInt32 gIpcOutVideoId;
UInt32 gIpcFramesInHLOSId;
UInt32 gIpcFramesOutVpssToHostId;
UInt32 gVpssNullId;
UInt32 gHostNullId;
UInt32 gDeiId;
UInt32 gIpcFramesOutHostId;
UInt32 gIpcFramesInVpssFromHostId;
Void MultiCh_createEncA8Dec()
{
OSA_printf("\n********** ENC A8 DEC USE CASE ********\n");
OSA_printf("\n********* Entered Encode + Decode usecase - H264 1080p @30fps Encode + H264 1080p @30fps Decode ********\n");
//******* Link_CreateParams ************************************************************//
UInt32 i;
Int32 status;
CaptureLink_CreateParams capturePrm;
DeiLink_CreateParams deiPrm;
IpcFramesOutLinkRTOS_CreateParams ipcFramesOutVpssToHostPrm;
IpcFramesInLinkHLOS_CreateParams ipcFramesInHostPrm;
IpcFramesOutLinkHLOS_CreateParams ipcFramesOutHostPrm;
IpcFramesInLinkRTOS_CreateParams ipcFramesInVpssFromHostPrm;
NullLink_CreateParams vpssNullPrm;
NullLink_CreateParams hostNullPrm;
MULTICH_INIT_STRUCT(IpcFramesOutLinkRTOS_CreateParams ,ipcFramesOutVpssToHostPrm);
MULTICH_INIT_STRUCT(DeiLink_CreateParams, deiPrm);
MULTICH_INIT_STRUCT(IpcFramesInLinkHLOS_CreateParams ,ipcFramesInHostPrm);
MULTICH_INIT_STRUCT(IpcFramesOutLinkHLOS_CreateParams ,ipcFramesOutHostPrm);
MULTICH_INIT_STRUCT(IpcFramesInLinkRTOS_CreateParams ,ipcFramesInVpssFromHostPrm);
//******* Link IDs ********************************************************************//
/* Link IDs */
gCaptureId = SYSTEM_LINK_ID_CAPTURE;
gDupId = SYSTEM_VPSS_LINK_ID_DUP_0;
gIpcFramesOutVpssToHostId = SYSTEM_VPSS_LINK_ID_IPC_FRAMES_OUT_1;
gIpcFramesInHLOSId = SYSTEM_HOST_LINK_ID_IPC_FRAMES_IN_0;
gVpssNullId = SYSTEM_VPSS_LINK_ID_NULL_0;
gHostNullId = SYSTEM_LINK_ID_NULL_0;
gDeiId = SYSTEM_LINK_ID_DEI_0;
gIpcFramesOutHostId = SYSTEM_HOST_LINK_ID_IPC_FRAMES_OUT_0;
gIpcFramesInVpssFromHostId = SYSTEM_VPSS_LINK_ID_IPC_FRAMES_IN_0;
gVcapModuleContext.captureId = gCaptureId;
gVcapModuleContext.ipcFramesOutVpssToHostId = gIpcFramesOutVpssToHostId;
gVcapModuleContext.ipcFramesInHostId = gIpcFramesInHLOSId;
//******* IPC Bits & DMA ******************************************************//
/* Semaphore for IPC Bits */
OSA_semCreate(&gIpcBitsNotifySem,1,0);
/* IPC Bits handling thread */
OSA_thrCreate(&gIpcBitsThObj.hndl, // hndl
MultiCh_ipcBitsMain, // entryFunc
IPC_BITS_TSK_PRI, // pri
IPC_BITS_TSK_STACK_SIZE, // stackSize
NULL); // prm
/* DMA for memcpy */
status = OSA_dmaInit();
if(status == 0)
{
status = OSA_dmaOpen(&gDmaHndl,OSA_DMA_MODE_NORMAL,1);
if (status != 0)
{
OSA_printf("%s:OSA_dmaOpen failed - %d\n", __func__, status);
gDmaHndl.chId = 0xFF;
}
else
{
OSA_printf("%s:OSA_dmaOpen passed with ch id = %d\n", __func__,gDmaHndl.chId);
}
}
else
{
OSA_printf("%s:OSA_dmaInit failed - %d\n", __func__, status);
gDmaHndl.chId = 0xFF;
}
//******* M3VPSS & M3VIDEO init **********************************************************//
MultiCh_detectBoard();
System_linkControl(SYSTEM_LINK_ID_M3VPSS,
SYSTEM_M3VPSS_CMD_RESET_VIDEO_DEVICES, NULL, 0, TRUE);
System_linkControl(SYSTEM_LINK_ID_M3VIDEO,
SYSTEM_COMMON_CMD_SET_CH2IVAHD_MAP_TBL,
&systemVid_encDecIvaChMapTbl,
sizeof(SystemVideo_Ivahd2ChMap_Tbl), TRUE);
//******* capture decoder & link ************************************************************//
/* video decoder */
VCAP_VIDDEC_PARAMS_S modeParams;
UInt32 numDevices = 1;
//******no use*************//
modeParams.videoIfMode = DEVICE_CAPT_VIDEO_IF_MODE_8BIT;
modeParams.videoDataFormat= SYSTEM_DF_YUV422P;
modeParams.standard = SYSTEM_STD_D1;
modeParams.videoCaptureMode = DEVICE_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_EMBEDDED_SYNC;
modeParams.videoSystem = DEVICE_VIDEO_DECODER_VIDEO_SYSTEM_AUTO_DETECT;
modeParams.videoAutoDetectTimeout = -1;
modeParams.videoCropEnable = FALSE;
OSA_printf("\n********* ----------Config Video Decoder------- ********\n\n");
Vcap_configVideoDecoder(&modeParams, numDevices);
/* capture link */
CaptureLink_CreateParams_Init(&capturePrm);
capturePrm.numVipInst = 1;
capturePrm.tilerEnable = FALSE;
capturePrm.enableSdCrop = FALSE;
capturePrm.numBufsPerCh = 6;
capturePrm.numExtraBufs = 0;
capturePrm.fakeHdMode = FALSE;
capturePrm.doCropInCapture = FALSE;
OSA_printf("capturePrm.isPalMode = %d \n", capturePrm.isPalMode);
capturePrm.isPalMode = Vcap_isPalMode();
OSA_printf("capturePrm.isPalMode = %d \n", capturePrm.isPalMode);
CaptureLink_VipInstParams *pCaptureInstPrm;
CaptureLink_OutParams *pCaptureOutPrm;
for(i=0; i<capturePrm.numVipInst; i++)
{
pCaptureInstPrm = &capturePrm.vipInst[i];////
pCaptureInstPrm->vipInstId = SYSTEM_CAPTURE_INST_VIP0_PORTA;
pCaptureInstPrm->videoDecoderId = SYSTEM_DEVICE_VID_DEC_TVP5150_DRV;
pCaptureInstPrm->inDataFormat = SYSTEM_DF_YUV422P;
pCaptureInstPrm->standard = SYSTEM_STD_D1;
pCaptureInstPrm->numOutput = 1;
pCaptureOutPrm = &pCaptureInstPrm->outParams[i];//////
pCaptureOutPrm->dataFormat = SYSTEM_DF_YUV422I_YUYV;
pCaptureOutPrm->scEnable = FALSE;
pCaptureOutPrm->scOutWidth = 0;
pCaptureOutPrm->scOutHeight = 0;
pCaptureOutPrm->outQueId = 0;
}//for(i=0; i<capturePrm.numVipInst; i++)
#ifdef YUV_FRAMES_TO_A8_ENCDEC
/* Dei link params *///dei
#if 1
DeiLink_CreateParams_Init(&deiPrm);
deiPrm.enableOut[0] = TRUE;
deiPrm.tilerEnable = FALSE;
deiPrm.comprEnable = FALSE;
deiPrm.setVipScYuv422Format = FALSE;
deiPrm.enableDeiForceBypass = FALSE;
deiPrm.inputDeiFrameRate = 50u;
deiPrm.outputDeiFrameRate = 50u;
deiPrm.outScaleFactor[0][0].scaleMode = DEI_SCALE_MODE_RATIO;
deiPrm.outScaleFactor[0][0].ratio.widthRatio.numerator = 1;
deiPrm.outScaleFactor[0][0].ratio.widthRatio.denominator = 1;
deiPrm.outScaleFactor[0][0].ratio.heightRatio.numerator = 1;
deiPrm.outScaleFactor[0][0].ratio.heightRatio.denominator = 1;
Int32 chId;
for (chId=1; chId < DEI_LINK_MAX_CH; chId++)
deiPrm.outScaleFactor[0][chId] = deiPrm.outScaleFactor[0][0];
#endif
/* Set ipcFramesOutVpss link info */
#if 1
//ipcFramesOutVpssToHostPrm.baseCreateParams.noNotifyMode = FALSE;
ipcFramesOutVpssToHostPrm.baseCreateParams.noNotifyMode = TRUE;
ipcFramesOutVpssToHostPrm.baseCreateParams.notifyNextLink = FALSE;
ipcFramesOutVpssToHostPrm.baseCreateParams.notifyPrevLink = TRUE;
ipcFramesOutVpssToHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
#endif
/* Set ipcFramesOutVpss & null link info */
#if 1
ipcFramesInHostPrm.baseCreateParams.noNotifyMode = TRUE;
ipcFramesInHostPrm.baseCreateParams.notifyNextLink = FALSE;
ipcFramesInHostPrm.baseCreateParams.notifyPrevLink = FALSE;
ipcFramesInHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcFramesInHostPrm.exportOnlyPhyAddr = TRUE;
ipcFramesInHostPrm.cbCtx = &gVcapModuleContext;
ipcFramesInHostPrm.cbFxn = Vcap_ipcFramesInCbFxn;
hostNullPrm.numInQue = 1;
hostNullPrm.inQueParams[0].prevLinkQueId = 0;
#endif
/* Set ipcFramesOutHost & ipcFramesInVpssFromHost */
#if 1
ipcFramesOutHostPrm.baseCreateParams.noNotifyMode = TRUE;
ipcFramesOutHostPrm.baseCreateParams.notifyNextLink = FALSE;
ipcFramesOutHostPrm.baseCreateParams.notifyPrevLink = FALSE;
ipcFramesOutHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcFramesInVpssFromHostPrm.baseCreateParams.noNotifyMode = TRUE;
ipcFramesInVpssFromHostPrm.baseCreateParams.notifyNextLink = TRUE;
ipcFramesInVpssFromHostPrm.baseCreateParams.notifyPrevLink = FALSE;
ipcFramesInVpssFromHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
#endif
/* Set chain */
#if 1
capturePrm.outQueParams[0].nextLink = gDeiId;
deiPrm.inQueParams.prevLinkId = gCaptureId;
deiPrm.outQueParams[0].nextLink = gIpcFramesOutVpssToHostId;
ipcFramesOutVpssToHostPrm.baseCreateParams.inQueParams.prevLinkId = gDeiId;
ipcFramesOutVpssToHostPrm.baseCreateParams.outQueParams[0].nextLink = gVcapModuleContext.ipcFramesInHostId;
ipcFramesInHostPrm.baseCreateParams.inQueParams.prevLinkId = gVcapModuleContext.ipcFramesOutVpssToHostId;
ipcFramesInHostPrm.baseCreateParams.outQueParams[0].nextLink = gHostNullId;
hostNullPrm.inQueParams[0].prevLinkId = gVcapModuleContext.ipcFramesInHostId;
#endif
#endif
//******* link create ************************************************************//
System_linkCreate(gCaptureId,&capturePrm,sizeof(CaptureLink_CreateParams));
System_linkControl(gCaptureId,CAPTURE_LINK_CMD_DETECT_VIDEO,NULL,0,TRUE);
System_linkCreate(gDupId,&dupPrm,sizeof(DupLink_CreateParams));
#ifdef YUV_FRAMES_TO_A8_ENCDEC
System_linkCreate(gDeiId, &deiPrm, sizeof(DeiLink_CreateParams));
OSA_printf("YUV_FRAMES_TO_A8_ENCDEC: before ipcFramesOutVpssToHost linkCreate ... \n\n");
System_linkCreate(gVcapModuleContext.ipcFramesOutVpssToHostId, &ipcFramesOutVpssToHostPrm, sizeof(ipcFramesOutVpssToHostPrm));
OSA_printf("YUV_FRAMES_TO_A8_ENCDEC: before ipcFramesInHostPrm linkCreate ... \n\n");
System_linkCreate(gVcapModuleContext.ipcFramesInHostId, &ipcFramesInHostPrm, sizeof(ipcFramesInHostPrm));
OSA_printf("YUV_FRAMES_TO_A8_ENCDEC: before framesProducerLinkInfo ... \n\n");
System_LinkInfo framesProducerLinkInfo;
System_linkGetInfo(gVcapModuleContext.ipcFramesInHostId,&framesProducerLinkInfo);
OSA_assert(framesProducerLinkInfo.numQue == 1);
#endif
System_linkCreate(gVpssNullId, &vpssNullPrm, sizeof(vpssNullPrm));
System_linkCreate(gHostNullId, &hostNullPrm, sizeof(hostNullPrm));
OSA_printf("USECASE SETUP DONE\n");
}
为什么deiLink会创建不成功能?哪里的参数设置有问题吗?
你好,
你创建的DEI LINK使用的是哪个SC,是否和现有的use case使用的SC有冲突?或者的是数据通路是否有冲突?
为什么要使用DEI link呢?你的输入是隔行的?
谢谢您的回复!
输入是tvp5150的解码信号,是隔行的,后来查到是deiLink的ID弄错了,两个地方赋值,最后的值为SYSTEM_LINK_ID_DEI_HQ_0,改为
SYSTEM_LINK_ID_DEI_0就可以了。