注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

东月之神

在单纯的观念里面,生命就容易变得比较深刻!

 
 
 

日志

 
 
关于我

别驻足,梦想要不停追逐,别认输,熬过黑暗才有日出,要记住,成功就在下一步,路很苦,汗水是最美的书!

网易考拉推荐

OpenMax系统的结构  

2011-12-22 11:41:51|  分类: Audio/Video |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

18.1.1  OpenMax系统的结构(1)

1.OpenMax总体层次结构

OpenMax是一个多媒体应用程序的框架标准,由NVIDIA公司和Khronos在2006年推出。

OpenMax是无授权费的,跨平台的应用程序接口API,通过使媒体加速组件能够在开发、集成和编程环节中实现跨多操作系统和处理器硬件平台,提供全面的流媒体编解码器和应用程序便携化。

OpenMax的官方网站如下所示:

http://www.khronos.org/openmax/

OpenMax实际上分成三个层次,自上而下分别是,OpenMax DL(开发层),OpenMax IL(集成层)和OpenMax AL(应用层)。三个层次的内容分别如下所示。

第一层:OpenMax DL(Development Layer,开发层)

OpenMax DL定义了一个API,它是音频、视频和图像功能的集合。硅供应商能够在一个新的处理器上实现并优化,然后编解码供应商使用它来编写更广泛的编解码器功 能。它包括音频信号的处理功能,如FFT和filter,图像原始处理,如颜色空间转换、视频原始处理,以实现例如MPEG-4、H.264、MP3、 AAC和JPEG等编解码器的优化。

第二层:OpenMax IL(Integration Layer,集成层)

OpenMax IL作为音频、视频和图像编解码器能与多媒体编解码器交互,并以统一的行为支持组件(例如,资源和皮肤)。这些编解码器或许是软硬件的混合体,对用户是透 明的底层接口应用于嵌入式、移动设备。它提供了应用程序和媒体框架,透明的。S编解码器供应商必须写私有的或者封闭的接口,集成进移动设备。IL的主要目 的是使用特征集合为编解码器提供一个系统抽象,为解决多个不同媒体系统之间轻便性的问题。

第三层:OpenMax AL(Appliction Layer,应用层)

OpenMax AL API在应用程序和多媒体中间件之间提供了一个标准化接口,多媒体中间件提供服务以实现被期待的API功能。

OpenMax的三个层次如图18-2所示。

OpenMax API将会与处理器一同提供,以使库和编解码器开发者能够高速有效地利用新器件的完整加速潜能,无须担心其底层的硬件结构。该标准是针对嵌入式设备和移动 设备的多媒体软件架构。在架构底层上为多媒体的编解码和数据处理定义了一套统一的编程接口,对多媒体数据的处理功能进行系统级抽象,为用户屏蔽了底层的细 节。因此,多媒体应用程序和多媒体框架通过OpenMax IL可以以一种统一的方式来使用编解码和其他多媒体数据处理功能,具有了跨越软硬件平台的移植性。

提示:在实际的应用中,OpenMax的三个层次中使用较多的是OpenMax IL集成层,由于操作系统到硬件的差异和多媒体应用的差异,OpenMax的DL和AL层使用相对较少。

 
(点击查看大图)图18-2  OpenMax的三个层次

2.OpenMax IL层的结构

OpenMax IL目前已经成为了事实上的多媒体框架标准。嵌入式处理器或者多媒体 编解码模块的硬件生产者,通常提供标准的OpenMax IL层的软件接口,这样软件的开发者就可以基于这个层次的标准化接口进行多媒体程序的开发。

OpenMax IL的接口层次结构适中,既不是硬件编解码的接口,也不是应用程序层的接口,因此比较容易实现标准化。

OpenMax IL的层次结构如图18-3所示。




(点击查看大图)图18-3  OpenMax IL的层次结构

18.1.1  OpenMax系统的结构(2)

图18-3中的虚线中的内容是OpenMax IL层的内容,其主要实现了OpenMax IL中的各个组件(Component)。对下层,OpenMax IL可以调用OpenMax DL层的接口,也可以直接调用各种Codec实现。对上层,OpenMax IL可以给OpenMax AL 层等框架层(Middleware)调用,也可以给应用程序直接调用。

OpenMax IL主要内容如下所示。

客户端(Client):OpenMax IL的调用者

组件(Component):OpenMax IL的单元,每一个组件实现一种功能

端口(Port):组件的输入输出接口

隧道化(Tunneled):让两个组件直接连接的方式

OpenMax IL的基本运作过程如图18-4所示。

 
(点击查看大图)图18-4  OpenMax IL的基本运作过程

如图18-4所示,OpenMAL IL的客户端,通过调用四个OpenMAL IL组件,实现了一个功能。四个组件分别是Source组件、Host组件、Accelerator组件和Sink组件。Source组件只有一个输出端 口;而Host组件有一个输入端口和一个输出端口;Accelerator组件具有一个输入端口,调用了硬件的编解码器,加速主要体现在这个环节上。 Accelerator组件和Sink组件通过私有通讯方式在内部进行连接,没有经过明确的组件端口。

OpenMAL IL在使用的时候,其数据流也有不同的处理方式:既可以经由客户端,也可以不经由客户端。图18-4中,Source组件到Host组件的数据流就是经过 客户端的;而Host组件到Accelerator组件的数据流就没有经过客户端,使用了隧道化的方式;Accelerator组件和Sink组件甚至可 以使用私有的通讯方式。

OpenMax Core是辅助各个组件运行的部分,它通常需要完成各个组件的初始化等工作,在真正运行过程中,重点的是各个OpenMax IL的组件,OpenMax Core不是重点,也不是标准。

OpenMAL IL的组件是OpenMax IL实现的核心内容,一个组件以输入、输出端口为接口,端口可以被连接到另一个组件上。外部对组件可以发送命令,还进行设置/获取参数、配置等内容。组件的端口可以包含缓冲区(Buffer)的队列。

组件的处理的核心内容是:通过输入端口消耗Buffer,通过输出端口填充Buffer,由此多组件相联接可以构成流式的处理。

OpenMAL IL中一个组件的结构如图18-5所示。

 
(点击查看大图)图18-5  OpenMAL IL中一个组件的结构

组件的功能和其定义的端口类型密切相关,通常情况下:只有一个输出端口的,为Source组件;只有一个输入端口的,为Sink组件;有多个输入端 口,一个输出端口的为Mux组件;有一个输入端口,多个输出端口的为DeMux组件;输入输出端口各一个组件的为中间处理环节,这是最常见的组件。

端口具体支持的数据也有不同的类型。例如,对于一个输入、输出端口各一个组件,其输入端口使用MP3格式的数据,输出端口使用PCM格式的数据,那么这个组件就是一个MP3解码组件。

隧道化(Tunneled)是一个关于组件连接方式的概念。通过隧道化可以将不同的组件的一个输入端口和一个输出端口连接到一起,在这种情况下,两个组件的处理过程合并,共同处理。尤其对于单输入和单输出的组件,两个组件将作为类似一个使用。

3.Android中OpenMax的使用情况

Android系统的一些部分对OpenMax IL层进行使用,基本使用的是标准OpenMax IL层的接口,只是进行了简单的封装。标准的OpenMax IL实现很容易以插件的形式加入到Android系统中。

Android的多媒体引擎OpenCore和StageFright都可以使用OpenMax作为多媒体编解码的插件,只是没有直接使用OpenMax IL层提供的纯C接口,而是对其进行了一定的封装。

在Android2.x版本之后,Android的框架层也对OpenMax IL层的接口进行了封装定义,甚至使用Android中的Binder IPC机制。Stagefright使用了这个层次的接口,OpenCore没有使用。

提示:OpenCore使用OpenMax IL层作为编解码插件在前,Android框架层封装OpenMax接口在后面的版本中才引入。


  评论这张
 
阅读(363)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017