OpenMAX_IL_1_2_0_Specification--介绍和架构

2 OpenMAX IL介绍和架构
这部分讲述OpenMAX IL的特性和框架。OpenMAX IL是一个软件接口API层,用于调用系统组件。软件接口让组件可以独自初始化以及提供统一的命令管理组件,标准的方法初始化和销毁组件。
2.1 架构概览
考虑一个系统,它需要实现四个多媒体相关的处理功能,F1, F2, F3, F4。这些功能可能来自于不同的开发商,或者是一个机构的不同小组。这些功能可能有不同的建立和关闭的步骤,也可能需要不同的方法进行配置和数据传输。OpenMAX IL API可以对这些函数进行分装,一个或者几个构成组件,API可以使不同开发商/小组开发的软件可以相互之间交换数据。
OpenMAX API接口的上一层叫做IL用户,它可以是一个多媒体框架,可以是OpenMAX AL,也可以是一个程序。IL用户通过IL核心和组件交流。IL用户可以使用OpenMAX IL核心加载/卸载组件,让两个组件进行直接通信,访问组件的方法。
IL用户总是通过IL核心和组件通信。在绝大多数情况下,这种通信是调用IL核心的宏完成的,宏可以转换成调用其中一个组件的方法。也有直接调用核心函数完成相应功能的,包括组件的穿件与销毁,查询插入的组件,组件是否被支持,建立组件间的隧道通信。
组件包含多媒体处理功能,尽管这份协议定义OpenMAX IL核心的内容,不过也给出了一些组件的定义。根据传入结构体的参数,组件可以操作四种类型的数据:音频,视频,图片,其它(比如同步的时间数据)。
通过组件句柄,OpenMAX IL组件提供一系列的组件函数访问。这些函数允许用户得到和设置组件,得到和设置端口配置参数,得到和设置组件的状态,给组件发送命令,接受消息事件,分配内存,建立与单个组件端口的通信,建立两个组件端口的通信。
OpenMAX IL协议要求每个OpenMAX IL组件至少有一个端口。尽管开发商可以提供与OpenMAX IL兼容的没有端口的组件,大多数兼容性测试需要至少一个端口。有四种类型的端口,它们分别对应传输的四种数据类型:音频,视频,媒体,其它端口。如果数据输入组件,那么该端口称为输入端口,数据从端口输出的成为输出端口。
在包含四个多媒体处理函数F1, F2, F3,F4的系统中,可能每个实现函数都提供标准的OpenMAX IL接口,实现者也可以将这些函数组合。这些功能的划分都是依据端口。图2-1展示几种可能的OpenMAX IL实现:
!!!(截图)
2.2 关键词汇表
这部分描述一些OpenMAX IL API常用的定义以及缩略词。
2.2.1 关键定义
表2-1列举一些描述OpenMAX IL API的关键定义
关键词  意义
加速组件    将一个功能进行包装运行在加速器上的组件
加速器    加速一些函数的处理的硬件设计,这种硬件也可以被称作加速硬件。注意加速器可能根本不是硬件,是跑在不同处理器上的软件。
可分配缓冲端口     一个可以给自己分配缓冲的端口
缓冲提供者     一个要求分配缓冲头的入口(比如端口,用户),调用UseBuffer或者AllocateBuffer函数。
容器    一种封装数据流和元数据的格式(比如3gp文件格式)
内容管道    一种访问OpenMAX IL外部内容的抽象手段。内容可能是一个文件,管道可能是系统文件I/O函数,抽象不仅仅局限于这种类型的内容和内容访问
组件群    组件群中的每个组件至少依赖组件中的某个组件,组件群中的组件不依赖组件群中的任一组件则此组件不属于组件群。
组件暂停    当组件缺少一个重要的资源,但是其它资源都已经准备好,此时组件被暂停,当被需要的资源重新可获得后,组件从开始被暂停的地方继续运行。
动态资源    空闲状态的被分配的组件资源,不提倡动态资源分配,仅仅在只是不知道什么时候分配资源的时候出现。
主处理器    在多核系统中控制媒体加速的处理器,通常运行在高级别的操作系统中。
IL用户    调用核心或者组件的方法的一层软件,IL用户可以是GUI程序之下的软件层,比如GStreamer,这篇文档中,程序表示任何可以调用OpenMAX IL方法的软件。
主存    主处理器和加速器共享的外部存储
不提供缓冲端口    端口是一个不提供缓冲端口,比如端口通过接收UserBuffer或者AllocateBuffer方法分配缓冲头。
OpenMAX IL组件    一个组件包装目标系统需要的功能,OpenMAX IL为函数包装提供标准的接口。
OpenMAX IL核心    特定平台的代码,主要功能是定位后加载OpenMAX IL组件到内存主存中,当程序不再使用组件时,核心也负责将组件从主存中卸载。通常来说,OpenMAX IL核心加载一个组件进入主存中后,核心不再参与程序和组件的通信。
资源管理器    一个系统中管理硬件支援的软件入口
共享端口    一个使用其它端口分配的内存的供应端口,可以两个端口可以是同一个组件。
静态资源    让组件进入空闲状态的必须资源,大部分组件资源可以归类于这种。
供应端口    一个有一些缓冲提供者的端口。
同步    平衡两个组件之间共同工作的机制
隧道    两个组件之间标准的数据通路的建立和使用
隧道端口    表示一对组件已经建立已经建立和使用标准数据通路。
2.3 系统组成
图2-2展示OpenMAX IL各种通信方式,任何一个组件可以含有任意多个数据通信的端口。只有一个输出端口的组件叫做源组件,只有一个输入端口的组件叫做写组件。完全运行于主处理器的端口叫做主组件,运行在加速器中的组件叫做加速组件。OpenMAX IL可以直接移植进入程序中,或者被移植进入多媒体框架中,从而可以完成复杂的实现。
以下介绍三种通信方式。IL用户和一个组件之间的数据缓冲交互机制称为无隧道通信,两个组件之间进行数据交互的标准方式称为隧道通信。专有通信描述了两个组件之间的直接通信,以及可以使用隧道通信方式称为专有通信。
!!!(截图)
2.3.1 组件类型
OpenMAX IL组件按照功能划分为两种:基本类型和全部类型
基础类型必须支持无隧道通信,可能支持隧道通信,但是不支持隧道通信。
全部类型是基础类型的超集,一个全部类型必须支持无隧道通信和隧道通信,可能支持专有通信。
它们两个的基本不同是是否支持隧道通信。之所以基本类型会存在,是为了简化OpenMAX IL的实现。
2.4 组件状态
每个OpenMAX IL组件会经历一系列的状态,如图2-3所示。每个组件最开始处于unloaded状态。组件通过Open MAX IL核心函数调用进入loaded状态。其它的各种状态可以直接和组件通信获取。
(截图)
通常来说,当组件处于OMX_StateIdle, OMX_StatePause, 或者OMX_StateExecuting状态时,应该已经有了它所有需要操作的资源。也有例外情况就是当组件处于OMX_StateIdle状态,它的资源分配参数还不确定时。比如,一个解码视频的组件直到检查数据流时才知道它需要多少帧,因为组件不能在OMX_StateIdle状态下进行数据流检查。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值