如何构建达芬奇的DSP Server
1,Davinci的特点:ARM负责操作系统,DSP负责codec算法处理,ARM通过codec engine来调用DSP侧的codec。
codec engine: 我理解的是ARM和DSP连接的桥梁
codec server(dsp server):把不同的模块集成到一起生成DSP可执行文件,并对他们的DSP资源进行管理
PS: codec server 包含了 codec engine
2,软件系统分为三层:
1)信号处理层:在DSP侧负责处理算法,codec engine,dsp实时操作系统DSP/BIOS,与ARM的通信
2)I/O层:针对Davinci外设模块的驱动程序
3)应用层:
a,通过codec engine的VISA AIP (video, image, speech, audio) 来调用DSP侧的算法(信号处理层)。
b,通过EPSI API (easy peripheral software interface) 来访问和操作Davinci的外设(I/O层)
3,软件系统的开发步骤:
1)基于DSP侧的算法,生成算法库文件*.lib。
PS:算法必须符合xDM ( xDAIS ( eXpress DSP Algorithm Interface Standard) for Digital Media) 标准
如果不符合,就要创建自己的stub和skeleton
2)生成DSP server,即*x64p(.out)文件,即在DSP上运行的可执行文件
3)根据DSP server创建codec engine的配置文件.cfg(这和后面要说到的dsp server的配置文件.cfg是不一样的)
4)把codec包(算法包)、DSP server(用于分配资源)、codec engine(负责ARM和DSP的沟通)的配置文件,结合生成ARM的可执行文件。
总结:算法(DSP侧)->dsp server(负责分配资源,dsp侧)->codec engine配置文件(负责沟通)->前三者结合起来生成能ARM侧的可执行文件
4,codec engine是什么
1)应用层通过codec engine的API来调用、运行符合xDAIS的算法
具体来说,在这里,这个API是VISA API,这个算法是音视频编解码算法xDM
我可以理解为:不同的应用调用不同的API,不同的API调用相应的不同的算法
比如:应用层要解决“上网问题”->通过codec engine的“上网API”->调用“上网算法”
2)也就是说,codec engine通过API为算法提供一个标准的软件架构和接口。
具体表现为:
a,通过API调用的算法可在本地(ARM侧)或者远端(DSP侧)执行
b,codec engine可基于ARM+DSP、DSP、ARM上运行
c,无论codec engine在哪里运行,对应的API都一样
d,无论codec engine运行的环境是什么(linux或者别的),API都一样
我理解为:API只面向算法,算法不同,对应的API不同,不管其他外界变量如何,API不变
3)codec engine是介于应用程序和具体算法之间的软件(前面说到ARM通过codec engine来调用DSP侧的算法,这个不矛盾吧??)
在Davinci中,程序通过API调用算法
具体来说:API通过stub和skeleton访问engine SPI,engine SPI最后再调用具体算法
我理解:这个stub/skeleton就是我们需要编写的东西,是吗?
4)codec engine 的工作原理
a,应用程序调用engine_open():加载DSP可执行文件、初始化DSP server,在DSP侧创建RMS(remote management server,用于管理和维护instances(DSP/BIOS系统中的任务) )
b,应用程序调用VISA create API
这个API调用相应的VISA create 函数
这个函数在应用程序这侧(可以认为是arm侧吗?)的engine SPI的codec table查到,哦,远端DSP侧有一个这种算法哦~
于是这个函数再回到DSP侧的engine SPI的codec table查看,果然有一个这种算法
于是在RMS中建立这种算法的instance,并返回handle,便于以后的process等操作
ps:中间那两个在engine SPI查询的过程在3)中也讲到了。API是通过engine SPI 才能调用具体的算法的。
5,dsp server(codec server)是什么
1)先看下xDC(eXpress DSP Component)
它根据一套build指令build可执行文件
2)我理解的是:
dsp server自己的源文件(main.c,.tcf,.cmd)+一个package(包含了codec engine用到的一些东西)
——>通过xDC的build——>生成了DSP的可执行文件package
xDC的主要作用:系统级管理,为那些模块分配DSP资源。这些资源包括cpu cyclesmemoryDMA。
xDC的强大之处:不管前面给得是什么乱七八糟得,我都能把它们组合起来,生成一个dsp可执行的package。
xDC的工作原理:通过Framework Component来分配系统资源
FC又包括了DSK2和DMAN3
a,DSK2负责管理系统中所有xDAIS算法的memory(包括算法只要存在就会有的永久性memory和与别的算法共享的scratch memory)
b,DMAN3负责管理DMA通道号。。。(我只知道这个)