新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 如何通过开源API在DSP上进行视频处理

如何通过开源API在DSP上进行视频处理

作者:时间:2009-07-09来源:网络收藏

本文引用地址:http://www.eepw.com.cn/article/152424.htm

新的

为了解决上述问题,德州仪器(TI)开发出了一款,该产品能够充分发挥多媒体框架中的GStreamer等的优势。这款使多媒体编程人员可以利用熟悉环境中的编解码引擎,把数字编程人员从复杂的编程中解放出来,让ARM/Linux开发人员得以轻松利用DSP编解码器的加速功能,无需具备相关硬件知识。该接口还能自动高效地在ARM和DSP间工作划分,从而不再需要为运行在DSP上和运行在GPP内核上的功能间的协调而编写代码。该接口已由TI按照社群标准以GStreamer插件的形式开发成功。


图2:GStreamer内数据GstBuffer结构表征的方法与其它几种操作系统及其相应多媒体框架所采取的方法相一致。

GStreamer是一种媒体库,提供了某种转换过程的抽象模型,其管道的概念工作,媒体在其中按照已定义的方向从输入流到输出。GStreamer能够以一种简化编程过程的方式来提取不同媒体的操作行为,在数字编程社群中广受欢迎。GStreamer,能够编写出一种能够支持多种不同格式和网络的通用或音乐播放器。而且大部分操作由插件执行,并非GStreamer内核。GStreamer的基本功能性主要与注册和加载插件有关,并可提供基类,这些基类定义了GStreamer类的基本功能。

GStreamer过滤器

源过滤器负责从从数据源获取原始的多媒体数据以供,这里的数据源可以是硬盘文件(比如文件源过滤器),或CD或DVD光盘,也可以是电视接收卡或网络这种“实时”源。某些源过滤器只是简单地把原始数据传递到剖析器(parser)或分离过滤器(splitter filter),同时其它源过滤器也执行自己的剖析步骤。变换过滤器 (Transform filter)接收原始数据或部分经过的数据,进一步处理后再传递到下一级过滤器。

变换过滤器有多种类型,剖析器即是一例。这种过滤器把原始字节流分离为多个样本或帧、压缩器或解压缩器,以及格式转换器。呈现过滤器(Renderer filter)一般接收完全处理过的数据,并在系统显示器上或通过扬声器或某些外部设备进行播放。这一类过滤器还包括“file writer (文件创建器)”过滤器和网络传输过滤器,前者可以把数据保存到硬盘或其它持久稳固的存储设备上。

数据处理在plug-in_chain() 或 plug-in_loop()函数中进行。该函数可能像元件缩放那么简单,也可能像真实的MP3解码器那么复杂。数据被处理后,利用一个gst_pad_push()函数从GStreamer元件(element)的源衬垫(pad)发送出去,由此把数据传递到管道链的下一个元件。

GStreamer缓冲器

在GStreamer中,缓冲器是数据传输的基本单元。GstBuffer(实例)类提供了把一个存储区定义为流媒体的一部分所必需的全部状态。经由GstBuffer结构,Gstreame内部的数据表示遵循几种其它操作系统及其各自的多媒体构架所采用的方法(比如,Microsoft DirectShow中的媒体采样概念)。此外,还支持次级缓冲器,允许缓冲器的一小部分成为它自己的缓冲器,利用这种处理机制确保了存储空间不会过早释放。


图3:复用已分配在驱动器上且在物理上是连续的缓冲的一种有效途径。

缓冲器通常利用gst_buffer_new()来创建。创建好一个缓冲器之后,一般是为它分配存储器,设置缓冲器数据的大小。下面给出了一个缓冲器创建的例子,该缓冲器能够保存具有给定宽度、高度和每像素位的视频帧。

缓冲器创建

基于DaVinci技术的DM644x器件上ARM926的MMU(存储器管理单元)具有虚拟/物理寻址能力。然而,C64x+DSP内核只能够处理物理地址。因此,用于DSP处理的输入和输出缓冲器必须驻存在物理上连续的存储器中。



评论


相关推荐

技术专区

关闭