Chinaunix首页 | 论坛 | 博客
  • 博客访问: 45392
  • 博文数量: 4
  • 博客积分: 240
  • 博客等级: 入伍新兵
  • 技术积分: 115
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-03 14:51
文章分类

全部博文(4)

文章存档

2013年(1)

2012年(3)

我的朋友

分类: 嵌入式

2012-02-17 09:06:21

DVSDK:Digital Video Software Development Kit.

描述:
  Linux 数字视频软件开发套件 (DVSDK) 使达芬奇系统集成商能够快速开发基于 Linux 的多媒体应用,它们可以轻松植入达芬奇系列的不同器件中。每个 DVSDK 都包含一套预先测试的操作系统、应用程序框架和具有示例程序的编解码器库,这些程序演示了从外设流入和流出的实时音频和视频数据的解码和编码。针对具有 DSP 内核的达芬奇器件,DVSDK 提供了完整的框架,便于开发人员轻松利用 DSP 加速编解码器,而无需对 DSP 进行编程。DVSDK 完全免费,无需任何运行版税。

  达芬奇数字视频软件开发套件 (DVSDK) 的所有版本都包含在基于达芬奇技术的器件上开始多媒体应用开发所需的所有软件组件和工具。根据ARM+DSP构架来分类的话,大体可分为ARM模块,DSP模块,交互模块和开发工具。
    
Codec Engine:
  Codec Engine是DVSDK的核心,是连接ARM和DSP或协处理器的桥梁,是介于应用层(ARM侧的应用程序)和信号处理层(DSP侧的算法)之间的软件模块。(DSPLink负责底层通信,CMEM负责内存分配)

Codec Engine主要有两部分:
  ARM端应用适配层,提供了精简的API和对应的库给应用层使用。
  DSP的算法调用层,提供了DSP算法的接口封装规范,是的所有的算法通过简单的配置就可以编译到DSP的可执行程序中。

也就是说,在TI的这套框架中只用通过Codec Engine,ARM和DSP才能进行交互并协同工作。那么Codec Engine是如何工作的呢?

Codec Engine工作流程&原理:
  参照达芬奇软件结构框图(下图),可以大致地了解Codec Engine工作流程:
  首先,ARM应用程序调用Codec Engine的VISA (Video, Image, Speech, Audio)API,VIDENC_process(a, b, c )。Codec Engine的stub (ARM侧)会把参数a, b, c以及要调用DSP侧process这个信息打包。然后通过消息队列(message queue)传递到DSP。Codec Engine的skeleton(DSP侧)会解开这个参数包,把参数a, b, c转换成DSP侧对应的参数x, y, z(比如ARM侧传递的是虚拟地址,而DSP只能认物理地址),DSP侧的server(优先级较低,负责和ARM通信的任务)会根据process这一信息创建一个DSP侧的process(x, y, x)任务最终实现VIDENC_process(a, b, c)的操作。

  应用工程师通过调用Codec Engine的API来调用和运行符合xDAIS的算法,在Davinci软件中,符合 xDAIS的音视频编解码算法(即xDM算法)的调用是通过Codec Engine的VISA API完成的。Codec Engine通过这套API为算法的执行提供了一个标准的软件架构和接口,体现在以下几个方面:
 
       1. 通过Codec Engine API调用的算法可以运行在本地(ARM侧)或者远端(DSP侧);
       2. Codec Engine可以基于ARM+DSP、DSP或ARM上运行;
       3. 无论Codec Engine运行在ARM还是DSP上,对应的Codec Engine API都是完全一致的;
       4. Codec Engine的API与操作系统无关。比如Linux、VxWorks和WinCE环境下的Codec Engine API都是完全一致的。


  Codec Engine是介于应用程序和具体算法之间的软件模块,其中的VISA API通过stub和skeleton访问Engine SPI最终调用具体的算法。因此,Codec Engine的工作是通过完成VISA API的任务来体现的。VISA API分为四部分VISA create/control/process/delete,我们以codec算法运行在DSP为例,通过VISA API的执行过程了解Codec Engine的工作原理。

  在调用VISA API之前需要在应用程序中通过Engine_open()这个Engine API把DSP的可执行程序加载到DSP的memory,同时把DSP从复位状态释放,这时DSP开始运行DSP Server的初始化程序在DSP侧创建一个优先级最低的任务RMS(Remote Management Server),RMS负责管理和维护对应到具体codec算法的Instances。如图3所示,应用程序调用VISA create API,相应的VISA create函数到Engine SPI中的Codec table中查到这个codec运行在远端DSP侧。
 
  接着Engine SPI通过OSAL(Operating System Abstraction Layer)、DSP Link把VISA create的命令传到DSP侧的RMS。RMS通过DSP侧Engine SPI的codec table找到要调用的codec算法后,就会在RMS中创建一个相应的Instance(即一个DSP/BIOS系统中的任务)。VISA create会返回一个Instance的Handle,以便于给这个Instance做后续的VISA control/process/delete提供信息。VISA delete和VISA create原理类似,只是RMS删除掉相应的codec算法的Instance和执行codec算法的任务。
              (VISA create/delete

  概括来说,VISA control用来动态的修改codec instance的属性,VISA process用来对算法的输入数据流做处理并返回一个输出数据流。应用程序在调用VISA process/control时会通过xDM Stub把传递给codec算法的参数收集起来,并且转换成DSP可以识别的物理地址。Stub把这些参数和相关的命令通过Engine SPI、OSAL和DSP Link传递到DSP侧的Instance。Instance再通过Skeleton把传递过来的参数和命令解析出来,通过DSP侧VISA control/process对codec算法执行control/process。
                 (VISA contrlo/process 

接触ARM+DSP架构和DVSDK这套框架也就短短不到半年时间,学习嵌入式也没有多长时间,学习起来也很吃力,但好在别人的帮助下完成了DM6467上的相关工作,对这套框架也有了一点点理解。
了解以上DVSDK中Codec Engine工作流程和原理后,就基本可以开始进行开发了。开发时首先要对算法进行开发,算法要符合xdais标准。DVSDK中有一个gencodecpkg工具,可以帮助生成算法包和代码的框架(这套框架是基于xDM的,是基于xdais上轻量级,更宽泛的框架,底层依然沿用的xdais)。完成算法的开发后,DVSDK中还有一个genserver工具帮助生成server包,基本框架和默认配置也都帮忙弄好了。根据自己的需要修改或添加配置就可以。包含了相应的算法后就可编译生成可在DSP端可运行的二进制文件。最后编写ARM端调用的应用程序。

参考资料:
《帮您快速入门TI的Codec Engine》
作者:德州仪器半导体技术(上海)有限公司 通用DSP 技术应用工程师 崔晶
《如何搭建达芬奇的DSP SERVER》
作者:德州仪器半导体技术(上海)有限公司 通用DSP 技术应用工程师 崔晶


理解有限,如有错误请指正!
条例不清晰不明白处,请指出以便修改!
本文图片和大部分讲解版权非本人所有!如有侵权请联系我!
阅读(3053) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:C语言 C99新增关键字

给主人留下些什么吧!~~