如何通过开源API在DSP上进行视频处理_第1页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、如何通过开源api在dsp上进行视频处理数字信号处理器()具有精彩的多媒体性能。普通而言,它们运行编所需的周期惟独通用处理器(gpp)内核的40%到50%。dsp还能提供比asic大得多的灵便性和可重配置性。但迄今为止,要在数字视频应用中运用dsp,编程人员还不得不花费较多时光精力去学习相关专用语言。不过,随着应用编程接口(api)的浮现,已不再需要学习这些专用dsp语言了。在运行于gpp上的应用中,api可以轻轻松松地充分发挥dsp的优势。开源多媒体构架在gpp上普通运行在操作系统下,是这些api的抱负对象。利用api可以卸载视频编解码器的计算负荷,大大减小dsp编程的复杂性。这种计划只要求

2、编程人员具备基本的dsp学问即可,无需编写代码来整合dsp功能与那些运行在gpp上的功能。这种优势,加上利用免费开源插件和构架提供的许多功能的能力,可以大幅度缩短新视频产品的上市时光。硬件平台的挑选在挑选运行编解码器(压缩传输或存储的数字流,再解压以供查看或编辑)的硬件平台时,开发人员有几种可选计划。asic是特地为数字视频应用而设计的,能在这类应用中提供高性能和低功耗。它的缺点流片(nre)费用很高。此外,asic若有变幻,比如改动以适应编解码标准,相关实现费用十分昂扬。另一方面,gpp内核的流片费用相对较低,针对变动举行重编程相当简单。但因为它们在执行计算密集的信号处理应用时效率低下,故在

3、应用于数字视频处理时性能较低。例如,gpp通过一系列移位和加法运算来实现乘法运算,而每一个移位和加法运算需要一个以上的时钟周期。dsp具有集上述二者之优势的潜力。不同于gpp,dsp是为数字视频应用中计算密集的信号处理应用而优化的。它具有单周期乘法器或乘法累加单元,能够加快编解码算法的执行速度。更高性能的dsp还包含有几个可以并行操作的自立执行单元,这使得它们能够每条命令执行好几个操作。此外,dsp还提供彻低的软件编程能力,包括现场重编程能力。这就让用户可以先推出mpeg-2产品,以后再升级为h.264视频编解码器。dsp在数字视频应用中的主要局限是它们通常需要采纳专用语言来编程,而认识dsp

4、的编程人员远没有认识流行的gpp架构的来得多。图1:只含解码器的范例中的多媒体框架职责和数据流程组件集成的挑战数字视频系统的开发人员还濒临着集成的挑战。数字视频系统包含了多个、解码器、编解码器、多种算法及其它软件,这些组件都必需集成到一个可执行映象(image)中,然后才干在系统上运行内容。集成全部这些组件并确保其运行协调是一件很困难的任务。不同的系统可能需要迥然不同的视频、图像、语音、音频和其他多媒体模块。手工集成每一个软件模块或算法的开发人员就被增值功能性(比如增强创新性功能)搞得头痛不已。许多数字视频开发人员都开头实行开源途径来构建软件。一种常用的计划是从开源获得软件的重要部分,而在可用

5、性和硬件集成方面充分发挥内部专业能力。开发人员经常参加开源技术开发项目,以满足特定要求并把内部开发的代码和开源代码集成在一起来创建新产品。新的api为了解决上述问题,(ti)开发出了一款api,该产品能够充分发挥开源多媒体框架中的gstreamer等dsp的优势。这款api使多媒体编程人员可以利用认识环境中的dsp编解码引擎,把数字视频编程人员从复杂的dsp编程中解放出来,让/linux开发人员得以轻松利用dsp编解码器的加速功能,无需具备相关硬件学问。该接口还能自动高效地在arm和dsp间举行工作划分,从而不再需要为运行在dsp上和运行在gpp内核上的功能间的协调而编写代码。该接口已由ti根

6、据开源社群标准以gstreamer插件的形式开发胜利。图2:gstreamer内数据通过gstbuffer结构举行表征的办法与其它几种操作系统及其相应多媒体框架所实行的办法相全都。gstreamer是一种媒体处理库,提供了某种转换过程的抽象模型,其通过管道的概念举行工作,媒体在其中根据已定义的方向从输入流到输出。gstreamer能够以一种简化编程过程的方式来提取不同媒体的操作行为,在数字视频编程社群中广受欢迎。通过gstreamer,能够编写出一种能够支持多种不同格式和网络的通用视频或音乐播放器。而且大部分操作由插件执行,并非gstreamer内核。gstreamer的基本功能性主要与注册和

7、加载插件有关,并可提供基类,这些基类定义了gstreamer类的基本功能。gstreamer过滤器源过滤器负责从从数据源猎取原始的多媒体数据以供处理,这里的数据源可以是硬盘文件(比如文件源过滤器),或cd或dvd光盘,也可以是电视接收卡或网络这种“实时”源。某些源过滤器只是容易地把原始数据传递到剖析器(parser)或分别过滤器(splitter filter),同时其它源过滤器也执行自己的剖析步骤。变换过滤器 (transform filter)接收原始数据或部分经过处理的数据,进一步处理后再传递到下一级过滤器。变换过滤器有多种类型,剖析器即是一例。这种过滤器把原始字节流分别为多个样本或帧、

8、压缩器或解压缩器,以及格式转换器。展现过滤器(renderer filter)普通接收彻低处理过的数据,并在系统上或通过扬声器或某些外部设备举行播放。这一类过滤器还包括“file writer (文件创建器)”过滤器和网络传输过滤器,前者可以把数据保存到硬盘或其它持久稳固的存储设备上。数据处理在plug-in_chain() 或 plug-in_loop()函数中举行。该函数可能像元件缩放那么容易,也可能像真切的mp3解码器那么复杂。数据被处理后,利用一个gst_pad_push()函数从gstreamer元件(element)的源衬垫(pad)发送出去,由此把数据传递到管道链的下一个元件。g

9、streamer缓冲器在gstreamer中,缓冲器是数据传输的基本单元。gstbuffer(实例)类提供了把一个存储区定义为流媒体的一部分所必须的所有状态。经由gstbuffer结构,gstreame内部的数据表示遵循几种其它操作系统及其各自的多媒体构架所采纳的办法(比如,microsoft directshow中的媒体采样概念)。此外,还支持次级缓冲器,允许缓冲器的一小部分成为它自己的缓冲器,利用这种处理机制确保了存储空间不会过早释放。图3:复用已分配在驱动器上且在物理上是延续的缓冲的一种有效途径。缓冲器通常利用gst_buffer_new()来创建。创建好一个缓冲器之后,普通是为它分配存

10、储器,设置缓冲器数据的大小。下面给出了一个缓冲器创建的例子,该缓冲器能够保存具有给定宽度、高度和每像素位的视频帧。缓冲器创建基于davinci技术的dm644x器件上arm926的mmu(存储器管理单元)具有虚拟/物理寻址能力。然而,c64x+dsp内核只能够处理物理地址。因此,用于dsp处理的输入和输出缓冲器必需驻存在物理上延续的存储器中。虚拟到物理地址的转换由编解码引擎处理。通过复用(指针指向)某些由驱动器分配的缓冲器,可获得物理上延续的存储器,这里用法了linux中的一些技术,比如dma_alloc_coherent(),来在内核空间中分配这类存储器。由ti开发的库/内核模块cmem,允

11、许从用户空间应用来分配物理上延续的存储器。例如,我们利用前面提到的cmem驱动器来分配物理上延续的“输出”缓冲器。编解码引擎对帧举行解码,并把解码后的帧放在输出缓冲器中。接下来,指向输出缓冲器的指针被传递给fbvideosink(通过 gstbuffer)。这个videosink必需把解码后的数据memcpy(复制)到帧缓存中,然后才干显示。因为memcpy操作是一种成本很高的gpp用法,这种办法使得arm 和ddr接口的负载很重,因而增强了功耗,且效率极低。这种技术对十分小的缓冲器是可行的,但在开发人员用法d1(和更高)大小的缓冲器时,将开头降低系统性能。一种更有效的计划是复用已经驱动器分配

12、了的物理延续缓冲器,并在编解码器引擎和videosink插件之间把指向这些缓冲器的指针往返传递。幸运的是,gstreamer提供了一个便于这类交互作用的api。这个api替代计划利用gst_buffer_new()来创建新的缓冲器。当元件获知它将在哪一个源衬垫上推进数据时,就对gst_pad_alloc_buffer()函数举行调用。这允许对应的元件为调用元件的工作提供特别的“硬件”缓冲器,故而削减了系统所需的memcpys数量。视频解码器插件(变换过滤器,通过编解码器引擎api能够充分利用dsp的优势)将把从视频展现过滤器获得的缓冲器用作视频解码器和执行解码的输出缓冲器。一旦解码完成,这个输

13、出缓冲器将被推进(即指针被传递)给视频展现过滤器插件。因为解码后的图像已经存在于视频驱动存储器中,就不再需要memcpy了,在帧被显示时,视频展现过滤器将只需把目前的显示缓冲器转换为这种特定的缓冲器就可以了。av同步处理播放期间的音频/视频(av)同步处理普通需要三类决策:一是重复帧的决策。普通在媒体流的帧的显示时光比帧间隔时光更大时采纳。二是显示帧的决策。普通在媒体流的帧的显示时光在最小和最大阈值之间时采纳。三是跳帧决策。普通在帧的显示时光落后显示时光起码两个帧时采纳。这样,跳过当前帧,处理下一个帧,以期弥补下一个帧间隔。持续这样做直到下一个帧被显示或不再剩有帧可供比较。另外,管道中的全部元

14、件都用法共同的时钟,以便于这些活动的举行。幸运的是,全部这些决策都由gstreamer内核库中的音频视频sink基类来完成。这样一来,av同步的复杂性大部分都在用户那里被转移了。以插件形式开发的接口ti开发了一种gstreamer变换过滤器插件,它利用dsp来举行视频解码,运行于arm上,用法linux操作系统。ti还提供有linux外设驱动器,在驱动器接口和编解码引擎api方面符合标准开源机构的要求,后者注重了dsp编程的相当大部分的复杂性。由硬件创造商提供的api,事先已针对硬件实现做了优化。假如改用新的硬件,无需转变应用代码就可挺直替以新的驱动器。这种计划大幅度降低了视频开发的成本和交付

15、周期。硬件的计算资源以一种最优方式被执行,无需任何汇编编程。其中包括无数复杂的操作,比如dsp资源的最佳利用,和基于硬件的加速引擎;链接模式(chained mode)下增加型挺直存储器拜访(enhanced direct memory access)外设的用法,以提高数据传输效率;以及中断模式和tasklet模式的数据包处理,以灵便满足不同应用的要求。因为gstreamer是一种十分流行、广为人知的架构,它已成为数字视频开发的一种标准,在这种环境中充分利用 dsp优势的能力使得编程人员不再需要学习专用dsp编程语言。该计划还易于把dsp的功能和gpp内核上运行的典型应用的一些其他要求集成在一起。利用其他gstreamer插件,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论