Download presentation
Presentation is loading. Please wait.
Published byEmilio Costanzo Modified 5年之前
1
outline 1. Davinci技术平台简介 2. 制定算法标准的出发点和目标 3. 算法标准的实现 4. 实例演示
2
Davinci技术平台-软件架构 ARM为主处理器:用户应用程序在ARM实现 移植操作系统OS:LINUX、WinCE……
用户用下列3个APIs来构建自己的应用程序: EPSI:Easy Peripheral Software Interface设备驱动程序 VISA:Video, Imaging, Speech and Audio应用层音/视频编解码引擎接口 xDM:xDAIS for Digital Media具体的音/视频编解码算法接口,由VISA调用 DSP为从处理器:主要用来实现视频/图像处理 ARM与DSP之间用DSP/BIOS LINK来通信 DSP主要用来实现视频/图像编解码算法xDM
3
Davinci技术平台-软件架构
4
总体开发流程框图
5
制定算法标准的出发点和目标 符合XDAIS(eXpressDSP Algorithm Interface Standard)的算法能够集成在同一个系统中,即互用 算法能够以二进制代码的方式发布 算法在使用时不需要重新编译,通过设置必要的参数和重新连接实现互用
6
制定算法标准的出发点和目标 容易实现 算法的一致性易于检测 易于代码移植 易于开发工具简化集成过程
对静态系统而言,dsp算法标准的实现只会引入很少的额外开销
7
制定算法标准的出发点和目标 DSP软件的结构
系统架构之间的差异是很大的,DSP算法要在不同的系统架构下使用,必须满足DSP算法标准对系统架构的限制很小 输入 命令 输出 状态 运行支持 算 法 算法 算 法 系统架构 系统架构 算法 系统架构定义了独立于设备的输入输出子系统,描述了算法如何与该子系统进行交互;系统他是算法与运行之间的“胶水”,将他们有机的组合起来形成dsp子系统 运行支持包括一系列函数,如:存储器复制,使能和禁止中断,实时调试辅助函数等等,他包括3部分内容:DSP/BIOS函数的一个子集,访问控制、状态寄存器的函数和标准c语言运行支持库。 算法仅处理数据,从输入缓冲取数,将处理结果放入输出缓冲。 在电信领域里出现了很多不同的系统架构,他们面向特定的应用进行了优化。 状态 运行支持
8
算法必须提供所使用的存储器资源和MIPS(million instructions per second)等性能指标
满足各种系统架构的算法 共同点有: 算法能够被c语言程序调用 算法可重用 算法独立于输入输出外设 算法必须提供所使用的存储器资源和MIPS(million instructions per second)等性能指标
9
遵循规范和建议能够使得编 程标准化,增强程序的可使 用性,但是具体的实现还得 通过接口实现!
算法标准的实现 遵循规范和建议能够使得编 程标准化,增强程序的可使 用性,但是具体的实现还得 通过接口实现! 接口可以理解为由抽象方法 和常量组成的特殊类
10
算法标准的实现 鸟 燕子 鸽子 天鹅
11
算法标准的实现 XDAIS定义的抽象接口包括两部分的内容:
IALG:定义独立于软件架构的抽象接口,完 成算法实例对象的创建。所有算法必须实 现 IDMA:定义算法使用DMA资源的接口。需要 使用DMA资源时才实现
12
算法标准的实现 DSP算法标准中,接口在头文件中定义,每 一个头文件定义一个接口。模块的头文件 所定义的接口称为实用接口,抽象接口是 由一种特殊的接口头文件定义的。除了定 义一个函数指针结构如:123_Fxns外,上 述特殊头文件与普通头文件相同。 IALG接口的主要任务是让算法定义其使用 的存储器资源,以便实现更高效的片内存 储器的利用。
13
VISA API是音/视频编解码的用户接口 VISA用来处理视频Video、图像Imaging、语音Speech、音频 Audio
编码与解码的API组相互独立,所以总有8组API: VIDENC、IMGENC、SPHENC、AUDENC VIDDEC、IMGDEC、SPHDEC、AUDDEC 每个VISA组中关键的API有: xxx_create xxx_process xxx_control xxx_delete
14
接口图例
15
算法标准的实现-抽象接口 IALG_Fxns结构中定义的函数可以分为以下 三类: 用于创建\初始化和删除实例对象的函数; 算法处理的函数;
用于控制和重定位实例对象的函数。
16
算法标准的实现-抽象接口 algActivate():在数据处理之前,实现临时存 储器的初始化
algAlloc():得到算法对象对于存储器的需求 情况 algControl():算法的控制和状态信息的提取 algDeactivate():保存所有的持久数据到非临 时存储器中 algFree():获得算法对象的存储器资源 algInit():初始化算法实例对象 algMoved():重新定位算法实例的存储器资源 algNumAlloc():返回需要分配的存储器项数目
17
算法标准的实现-抽象接口 IALG函数的调用次序 algAlloc algActivate algInit algFree
algDeavtivate ‘process’ algMoved IALG函数的调用次序
18
IALG接口程序 #define IALGFXNS \ &BINARY_LPRIS_IALG, \ NULL, \ activate
BINARY_LPRIS_alloc, \ NULL, \control NULL, \deactivate BINARY_LPRIS_free, \ BINARY_LPRIS_initObj, \ NULL, \moved NULL numAlloc
19
IIMGDEC_Fxns BINARY_LPRIS_BINARY = {
{IALGFXNS}, BINARY_LPRIS_process, }; #ifdef _LPRIS_ asm("_BINARY_LPRIS_IALG.set _BINARY_LPRIS_BINARY"); #else IALG_Fxns BINARY_LPRIS_IALG = { IALGFXNS #endif
20
源程序文件 binary_lpris. h binary_lpris_priv. h binary. c 源程序定义文件 Binary
源程序文件 binary_lpris.h binary_lpris_priv.h binary.c 源程序定义文件 Binary.xdc binary.xs Package 定义文件 Package.xdc package.xs Paceage build 文件 Package.bld Makefile 文件 makefile
Similar presentations