Android 系统多媒体(一)- OpenMax 认识

在 Android 结构中,OpenMax IL 通常被当做多媒体引擎插件来使用,Android 最早的多媒体引擎是 OpenCore,后续版本逐渐使用 StageFright 来代替,这两种引擎可以使用 OpenMax 作为插件,主要实现编码/解码(Codec)处理。

OpenMax 主要分为三个层次,从上到下分别是 OpenMax DL(OpenMax Development Layer 开发层)、OpenMax IL(OpenMax Integration Layer 集成层)和 OpenMax AL(OpenMax Application Layer 应用层)。其中使用最多的是 OpenMax IL。

(1)OpenMax DL

OpenMax DL既然是开发层,那么它里面肯定定义了集音频、视频好图像功能的 API,这样供应闪可以在一个新的处理器上实现并优化。然后编码/解码供应商使用该法来编写更广泛的编码/解码器功能。OpenMax DL 可以处理 FFT 和 Filter 等音频信号,也可以实现颜色空间转化和处理原始视频,并且可以实现对诸如 MPEG-4、H.264、MP3、AAC 和 JPEG 等编码/解码器的优化。

(2)OpenMax IL

OpenMax IL 为集成层,它里边包含多个组件,用来处理多媒体编码/解码的交互。

(3)OpenMax AL

OpenMax AL 为应用层,那么肯定就和我们的 APP 相关了,里边存在了我们需要使用的方法。

——————————————————我是分割线————————————————————————

我们这里主要介绍的是 OpenMax IL,由于操作系统到硬件的差异和多媒体应用的差异,OpenMax DL 和 OpenMax AL 层相对较少使用。

OpenMax IL 层的解构

如上图,就是 OpenMax 的结构图,虚线部分是 OpenMax IL 层的内容,功能是实现了 OpenMax IL 中的各个组件(Component),对于下层而言,OpenMax IL 既可以调用 OpenMax DL 层的接口,也可以直接调用各种 Codec 实现,对于上层而言,OpenMax IL 既可以给 OpenMax AL 层等框架层(Meddleware)调用,也可以给应用程序直接调用。

OpenMax IL 层的主要内容包括

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

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

(3)Port:端口,组建的输入/输出接口;

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

 

如上图,是 OpenMax IL 运作流程图,OpenMax IL 层的客户端通过调用如下四个 OpenMax IL 组件来实现同一个功能。

(1)Source 组件:只有一个输出端口;

(2)Host 组件:只有一个输入端口;

(3)Accelerator 组件:具有一个输入端口,调用了硬件的编码/解码器,加速主要体现在此环节。

(4)Sink 组件:Accelerator 组件和 Sink 组件通过私有通信方式在内部连接,没有经过明确的组件端口。

在使用 OpenMax IL 时,可以由客户端处理数据流,也可以不经由客户端处理数据流。如上图所示,Source 组件到 Host 组件的数据就是经过客户端的;而 Host 组件到 Accelerator 组件的数据就没有经过客户端,使用了隧道化的方式;Accelerator 组件到 Sink 组件甚至可以使用私有的通信方式。

组件的功能和定义端口的类型有着密切的联系,在大多数情况下的联系如下:

(1)只有一个输出端口的是 Source 组件;

(2)只有一个输入端口的是 Host 组件;

(3)有多个输入端口,一个输出端口的是Mux 组件;

(4)有一个输入端口,多个输出端口的是 DeMux 组件,输入和输出各一个端口的座位中间处理环节,这是最常见的组件。

在 Android 系统中,主要使用了 OpenMax 的编码/解码器功能,使用最多的仍然是编码/解码器组件,尽管 OpenMax 也可以生成 输入、输出文件解析/构建等组件。主要是因为以下两点:

(1)输入输出环节和系统有很大关系,如果一定要使用 OpenMax 标准则会比较麻烦;

(2)文件解析/构架环节一般不需要使用硬件加速,因为编码/解码器组件最能体现硬件加速环节,所以经常使用。

在 Android 系统中,当实现 OpenMax IL 层和标准的 OpenMax IL层时需要实现如下两个环节。

(1)编码/解码器驱动程序:位于 Linux 内核空间,通过 Linux 内核 调用驱动程序,调用的驱动程序通常是非标准的驱动程序。

(2)OpenMax IL 层:根据 OpenMax IL 层的标准头文件实现不同功能的组件。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值