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.

8168 Assertion @ Line: 60 in links_common/merge/mergeLink_tsk.c: status == FVID2_SOK : failed

在板子A上做的编码和解码两路link进行merge成功的,然后再另外一个板子B(两个板子的内核不同,板子A只做一路采集,板子B做vga、2个pal、1个sdi采集)运行,现在将这板子B采集部分只做了1个sdi采集,其他的采集禁掉了,然后进行一路编码和一路解码进行merge(之前都在板子A验证过了的代码),却出现了 Assertion @ Line: 60 in links_common/merge/mergeLink_tsk.c: status == FVID2_SOK : failed。

跟踪得知merge的输入的解码link的id出错:

即merge创建时对应的解码link时,status =
System_linkGetInfo(pPrm->inQueParams[inQue].prevLinkId,
&pObj->inTskInfo[inQue]);出错了。

进一步跟踪发现在函数

Int32 System_linkGetInfo(UInt32 linkId, System_LinkInfo * info)
{
Int32 status;
UInt32 procId;
UInt32 procIdself;

procId = SYSTEM_GET_PROC_ID(linkId);

UTILS_assert(procId < SYSTEM_PROC_MAX);
procIdself = System_getSelfProcId();
// if ((procId != System_getSelfProcId()) && (procId != SYSTEM_PROC_INVALID))
Vps_printf("procId:%d procIdself: %d ======00033=============== !!!\n", procId, procIdself);
if ((procId != procIdself) && (procId != SYSTEM_PROC_INVALID))
{
status =
System_ipcMsgQSendMsg(linkId, SYSTEM_CMD_GET_INFO, info,
sizeof(*info), TRUE);
}
else
{
status = System_linkGetInfo_local(linkId, info);
}

return status;
}

串口打印 [m3vpss ] procId:0  procIdself: 2 ======00033=============== !!!

显示merge的输入解码link的procId = 0,我是将解码部分的mpscale做merge的输入,这个mpscale不是应该是M3vpss核里吗,procId = 2才对呀,为啥它会 = 0,0对应的是dsp核?

请问下link与内核有没有关系?这个问题为啥

  • 问题解决了,我的解码、编码分别由一个线程创建,是在配置mergelink参数时,传进来解码link参数时0导致mergelink创建获得的解码linkid错误,原因是解码link跑的慢造未能及时将解码linkid传递给merge参数,不仅仅是要保证在mergelink创建时其input linkid要创建,还要保证merge参数配置时也要创建好
x 出现错误。请重试或与管理员联系。