现代软件开发,已从上世纪的面向过程编程发展到当前的面向框架编程。软件开发经验已证明:框架话、模块化的开发方式可以极大的提高软件开发效率,提高代码质量及代码重用率。然而,在嵌入式编程中,由于长期缺乏完善的开发框架和可用的API,开发人员依旧利用C或汇编语言和底层硬件打交道,凡是亲力亲为,这必然会增加嵌入式开发的入门门槛,降低代码的重用性,甚至增加代码易集时的复制度(不过这些缺点,对于程序员来说确是好事,入门门槛高、开发复制意味着高付出高回报,不像现在桌面电脑端的开发,已经被人研究烂了,如果你不是超超超超级大牛,根本找不到一份满意的薪水)。基于这点,TI公司发布了一套DSP算法标准——TMS320 DSP Algorithm Standard,规范了DSP算法软件的开发,并提供了类似C++语言类的封装方式的算法接口,使得算法集成变得简单统一。

XDAIS标准

如果你对TMS320 DSP Algorithm Standard还陌生的话,那么如果提起另一个名字:xdais,那么就顺眼地多了。没错,我们在Codec Engine文档中经常看到的xdais,实际上就是TMS320 DSP Algorithm Standard的另一个名字。根据TI官方白皮书,xdais标准一共提供了39条规则,15条指南。这些规则和指南一共分为4个部分:

只要你的算法满足xdais标准,你也可以像笔记本上打上的“Vista Capable”那样,在算法上面打上TI的认证图标:

IALG接口

前面说了,xdais标准里含有39条标准,15个指南。这些标准、指南几乎涵盖了整个DSP开发的生命周期,例如使用TI的C语言啊,所有C6x算法必须支持低位优先啊。具体的规则可以参考《TMS320 DSP Algorithm Standard Rules and Guidelines User’s Guide》,本文不再讨论。

xdais作为一个DSP的开发框架,定义了一些接口:

  • IALG – 为算法实例对象的创建定义了独立于框架的算法接口。
  • IDMA2 – 为C64X和C5000使用统一的DMA资源处理方式的定义的算法接口
  • IDMA3 – 为C64+和C5000使用统一的DMA资源处理方式的定义的算法接口

《TMS320 DSP Algorithm Standard API Reference》指出,所有的算法都必须实现了IALG接口,IALG接口最主要的工作就是定义算法中需要使用的内存,提高片上系统内存使用效率,应用程序和xdais间工作关系如下:

这又遇到了一个问题,xdais的API是基于C的,我们知道,C是面向过程的,因此不存在面向对象里拥有的封装、继承、重构等特性,那么,我们的应用程序是如何实现接口的呢?对于这点,xdais的设计了一个名为IALG_Fxns的v-table:

开发人员只要遵循以上v-table定义的函数指针格式,实现自己的函数,就可以了。这些函数的作用大体上和函数名类似,框架的调用过程如下:

XDM标准

看到这里,有人要问了,既然TI已经有适用于DSP开发全过程的xdais标准,怎么又弄了个XDM标准出来。这里解释一下:我们知道xdais几乎涵盖了dsp开发的整个生命周期,是一个非常庞大的东西。如果里面的接口、准则、规定要开发人员一一实现的话,工作量还是很大的。因此,TI在xdais上又扩展了一个XDM标准,用来为数字信号处理提供一个轻量级的框架,总体上说,就是在XDAIS的基础上扩展了一个名为Digital Media的接口(xDM),然后根据数字图像处理的要求,提供了一个名为VISA的API集合,其底层远离,用的还是xdais的东西。

这样下来,应用层需和XDM标准打交道就变成以下形式了:

xDM接口实际上扩展了IALG接口,在其上增加了process和control方法,例如VISA API中的IVIDENC1接口的v-table定义如下:

而xDM的调用过程就变为:

VISA API

TI扩展xDM的目的,是为了为数字图像处理提供一个轻型的框架,为此,TI根据数字图像处理的分类,封装了一套名为VISA的API集合(这里的VISA,不是信用卡VISA,而是Video、Image、Speech和Audio的简称,想出这个名字的人太有才了),基本覆盖了数字信号处理的所有需求:

  • IVIDENCx :Generic interface for video encoders
  • IVIDDECx :Generic interface for video decoders
  • IAUDENCx :Generic interface for audio encoders
  • IAUDDECx :Generic interface for audio decoders
  • ISPHENCx :Generic interface for speech encoders
  • ISPHDECx :Generic interface for speech decoders
  • IIMGENCx :Generic interface for image encoders
  • IIMGENCx :Generic interface for image decoders

在Codec Engine的Algorithm Create过程中,开发一个算法程序往往是从实现这些接口开始,例如,我们要做一个H264的编码算法,需要从实现IVIDENCx开始。

这样的,我们在Codec Engine的开发领域里,DSP端开发流程如下:

TI xDAIS的深入理解相关推荐

  1. 【DSP开发】帮您快速入门 TI 的 Codec Engine

    德州仪器半导体技术(上海)有限公司 通用DSP 技术应用工程师 崔晶 德州仪器(TI)的第一颗达芬奇(DaVinci)芯片(处理器)DM6446已经问世快三年了.继DM644x之后,TI又陆续推出了D ...

  2. TI DaVinci(达芬奇)入门

    (转载来自 德州仪器半导体技术(上海)有限公司 通用DSP 技术应用工程师 崔晶 德州仪器(TI)的第一颗达芬奇(DaVinci)芯片(处理器)DM6446已经问世快三年了.继DM644x之后,TI又 ...

  3. 编译 /home/nzm/dvsdk_3_00_02_44/codec_engine_2_24/examples/ti/sdo/ce/examples/apps/video_copy 【part2】

    关键是设置 /home/nzm/dvsdk_3_00_02_44/codec_engine_2_24/examples 里的 xdcpaths.mak文件 设置好之后,先到 /home/nzm/dvs ...

  4. TI-Davinci开发系列之七DVSDK-4.03目录介绍

    接上篇博文 < TI-Davinci开发系列之六CCS5.2调试Linux内核 >, 在简单介绍了 CCS5.2 的安装及使用方法之后,接下来本文将介绍 DVSDK4.03 的目录结构,而 ...

  5. DAVINCI DM3730开发攻略——DVSDK4_03和双核CODEC机制介绍

    在上篇介绍了DM3730的开发环境,我们现在可以进入设计阶段了.再次声明:本人写这些文章只是给那些爱好DAVINCI的朋友提供一些技术上的支持,缩短大家的学习的时间,让大家有更多剩余的时间做其他有益的 ...

  6. DVSDK-Codec Engine

    http://www.ti.com.cn/general/cn/docs/gencontent.tsp?contentId=61575 德州仪器半导体技术(上海)有限公司 通用DSP 技术应用工程师 ...

  7. stm32直流电机控制—PID算法篇

    stm32直流电机控制-PID算法篇 一.常用的控制算法 1.控制系统的基本结构: 2.常用控制算法:位式控制 ①二位式控制算法 ②.具有回差的二位式控制算法 ③三位式控制算法 ④小结 二.PID控制 ...

  8. CCS7.2的下载、安装及打开CCS3.3工程文件

    1. TI CCS 集成开发环境现在已经完全免费了 CCSv7 已经不需要使用 License了. 如果使用的是 CCSv4 .CCSv5以及 CCSv6 请从 TI 官方网站下载免费的全功能 Lic ...

  9. 封装a.64p成.x64p达芬奇工具链的建立(工程编译步骤)g

    工具链是指的Linux下对程序的编译环境.在这里通过 codec_engine_1_02\examples\codecs 下的videnc_copy工程封装CCS下调试好的程序并生成videnc_co ...

最新文章

  1. python代码实现二叉树的镜像树
  2. 向基于Linux的Oracle RAC 10g集群添加新节点
  3. 基于STM32的DS1302时钟芯片驱动
  4. 模拟信号与数字信号之间的差异与比较—Vecloud微云
  5. VMware虚拟机Ubuntu系统与物理机Windows 7系统共享文件夹
  6. 全球及中国医养结合产业发展战略建议与投资价值评估报告2022版
  7. Apache 与 Nginx
  8. 软件开发---全套规范
  9. 技能UP:SAP OBYC自动记账的实例说明(含value String应用说明)
  10. 洛达项目AB152xP资料SDK相关说明
  11. iOS 13 暗黑模式的适配
  12. 海康摄像头故障处理踩坑记录
  13. waitpid使用实例
  14. linux安装monaco字体
  15. win10电脑双屏如何设置不同的桌面
  16. AOJ-AHU-OJ-675 定位赛
  17. python中append什么意_python里append是什么
  18. matplotlib plot函数使用详解
  19. 解决vim与外界的复制粘贴(不用安装插件)
  20. 印象笔记粘贴HTML,【未解决】Mac中从印象笔记中拷贝图片后去VSCode中用Paste Image无法粘贴图片:There is not a image in clipboard...

热门文章

  1. 通过CH340G驱动的Nano ATMEAG328P驱动板初步测试
  2. 第十六届全国大学生智能车竞赛创意组别-航天智慧物流
  3. 第十五届全国大学生智能汽车竞赛各分赛区国赛获奖信息
  4. 三星二级菜单_你知道三星 Galaxy 手机中的这个隐藏菜单吗?
  5. 总结 贪心算法_这几道经典例题帮你轻松搞透贪心算法
  6. matlab篮球队需要五名队员,MATLAB应用与数学欣赏.doc
  7. matlab7 mat,matlab7.0里生成的mat文件为什么用matlab6.5打不开呢?
  8. 某大学2021秋季学期Java期末考试范围概述
  9. 对话功率谱与自相关函数
  10. HAProxy客户端IP地址的透传