在dm8168_dvrrdk开发过程中,遇到不少的问题,同时解决了不少问题,在此做一个小小的总结。
1.系统架构
系统架构由两部分组成,app应用程序端和link链路。
(1)app应用程序端(arm端):
此端也是用户端,直接操作数据层。读取数据( 为整个link链路读入数据流 )以及存储数据( 将整个link链路处理完的数据结果通过此端进行存储 )。
(2)link链路端:
此端为底层端。它分为M3(vpss和vedio)、DSP、linux。在链路chain的搭建过程中要注意, vpss与vedio之间有专门的通信机制 ,M3、DSP与linux则为核间通信。
2.link链路创建
每个link都具有 唯一ID 号
每个link都有一个或多个输入列队,同时也有一个或多个输出列队
特定link有些特定参数。如
notifyprelink、notifynestlik、nonotifymode等:核间通信使用。
processlink:多用在alglink中,主要是具有特定的数据流向。processlink对数据做相应的处理完后,数据仍需返回给当前link。
ex: ipcframeOutVedio->processLink = alglink,即alglink处理完后返回给ipcframeOutVedio。
因此:在定义当前link时,需定义出指向上游以及下游的linkID,是承接上游的哪一个输出列队,以及自己有多少个输出列队。
链路定义好之后,需要从上至下一一调用System_linkCreate函数创建好链路。
3.linkstart
每个link需要调用System_linkStart进行开启,并且调用方式是 从下至上 。
4.问题:
(1) ListMP_GetHead(listMPInHndl) 为NULL
Answer:其下一个link没有调用ListMP_putTail(listMPInHndl),所以肯定为NULL。即释放机制没有达成,只需要在下一个link中调用释放机制即可。
(2) Venc_registerCallback
Answer:在dvrrdk4.0中,Ti_venc.c中只提供了注册回掉函数机制,但没提供消息响应机制,所以用Venc_registerCallback的同仁们请参照Ti_vcap.c中写,否则可以用Vcap_registerCallback。