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.

mcfw在cap、enc、dis start之后无法发送命令给osd算法link(DVRRDK_03.00.00.00)



各位好,我使用dm8168+mcfw,应用中需要动态设置osd参数,在Vsys_create() 之后,调用

Vcap_setDynamicParamChn(0, &dynamicParams, VCAP_OSDWINPRM);

进行osd的参数动态设置是能起作用的,但是 Vdis_start();    Venc_start();     Vcap_start();之后再次调用

Vcap_setDynamicParamChn(0, &dynamicParams, VCAP_OSDWINPRM);

进行参数设置发现不成功,跟踪到调用了

System_linkControl(gVcapModuleContext.dspAlgId[0], ALG_LINK_OSD_CMD_SET_CHANNEL_WIN_PRM, psCapChnDynaParam->osdChWinPrm, sizeof(AlgLink_OsdChWinParams), TRUE ) ,

继续跟踪,调用了System_ipcMsgQSendMsg 进行多核间的消息传递,继续跟踪到了

status = MessageQ_put(gSystem_ipcObj.remoteProcMsgQ[procId], (MessageQ_Msg)pMsgCommon);

该函数返回的status为MessageQ_S_SUCCESS  ,因为上面的消息请求是要waitAck的,MessageQ_put后需要get他的回复消息,会继续调用
status = MessageQ_get(gSystem_ipcObj.selfAckMsgQ, (MessageQ_Msg*)&pAckMsg, timeout);

该调用的返回值status也只MessageQ_S_SUCCESS的,但pAckMsg->status值为-1,通过osdalglink中的接收消息端的打印信息表明并没有收到消息,不知道为什么核间通信会失败,而在Vdis_start();    Venc_start();     Vcap_start();之前的第一次消息却是发送成功。

调试无过,请各位给点思路,帮忙分析一下可能的原因,sdk目前版本为DVRRDK_03.00.00.00

  • 是在跑RDK里的demo还是在跑自己开发的应用程序?

    DSP上还有运行其他算法吗?

    请提供一个完整的日志信息。

  • 程序是自己写的,类似于demo程序,只是根据自己实际需要重新配置了数据流向,跟demo中使用的link的数量不一样,dsp目前只运行了osd alg,scd alg都没有使用,运行时没有什么特别的日志,只是arm端像dsp发送了消息后,无法收到回复消息,也就是MessageQ_get(gSystem_ipcObj.selfAckMsgQ, (MessageQ_Msg*)&pAckMsg, timeout);调用后pAckMsg->status值为-1,不知道是不是哪些地方可能会影响到核间的通信,osd是有显示的,说明vpss跟dsp之间的通信时正常的,因为每帧数据会有new_data的消息发给dsp的,而我amr端发送的消息却没有到达dsp

  • 1.在板子上可以运行TI demo吗?demo运行起来后,可以在Capture Settings里面修改OSD参数,这时是在Vdis_start();    Venc_start();     Vcap_start();之后的,看看是否有同样的问题。

    2.在System_ipcMsgQSendMsg中把linkId打印出来看一下是否正常,是否是正确的目的地。

  • 首先谢谢你的热心!我试过跑demo是正常的,还有的我的发送的linkid应该是对的,因为第一次都能发送过去,每次都是调用同样的函数,我怀疑是我自定义的usecase里面哪里的配置影响到通信这块了,另外怀疑是不是我的osd图像比较大,导致msgq内部分配空间失败了,我看memory_map目前预留SR0的是15兆,作用是syslink MsgQ/IPC List,而osd分配的内存也是SR0上,验证一下先

  • 看起来不关内存分配的事儿,小图片也一样 :(

  • 请先确认相应的core是否收到了msg.可以在system_link中加些log.

  • 之前就打印过细,osdalglink并没有收到消息。将usecase改回demo中所用的usecase,osdalglink就能收到消息了,通过比较usecase的不同,发现有一处不一样的地方,在demo使用的usecase中,

    ipcFramesOutVpssPrm.baseCreateParams.outQueParams[0].nextLink = gMultiCh_VcapVencVdisObj.ipcOutVpssId;

    ipcOutVpassId对应的配置参数有如下配置

    ipcOutVpssPrm.notifyPrevLink            = TRUE;

    而我的usecase中

    ipcFramesOutVpssPrm[0].baseCreateParams.outQueParams[0].nextLink = gMultiChHd_VcapVencVdisObj.mergeId[1];

    但merge这种link是没有notifyPrevLink 这个属性的,

    不知道是不是跟这个有关,难道ipcFramesOutVpssId对应的link只能接入类似ipcOutVpssId这种具有notifyPrevLink 属性的link才能正常工作?  在我配置的usecase中,数据是能正常流通的,只是无法发送消息

  • 补充一下,我的ipcFramesOutVpssPrm是在vpss核上,而它对应的nextlink mergeId[1]也是工作在vpss上,所以看起来应该也没有问题的

  • 楼主 您能指导下小弟 您的源代码是怎么编译的么。。。

    拿到个代码 根本不知道怎么编译 链接库 调试啊啥的。。玩不溜dvrrdk啊

  • 关于DVR RDK 的编译,请参考RDK包下面的DM81xx_DVR_RDK_Install_Guide.pdf

  • 多谢呀!!

    我的包里居然没有 install,quick start,releasenote 这3个pdf!!!

    我在网上下到了!~

  • ipcFramesOutVpssPrm之类的link是用来在不同的core之间交互数据的,所以用法上应该连接其他core的ipc In之类的link。

    如果你希望接下来连接merge link,一种方案是在进ipc out前先merge好,另一种是到另一个core接收下数据后再merge。

  • eric liu你好:

                      请问一下你使用什么工具追踪调试的?gdbderver?还是其他什么工具?谢谢!!!