傻大方


首页 > 学习 >

基于|基于Android的OpenMAX框架研究与开发硕士学位论文( 八 )



按关键词阅读: android 基于 论文 硕士学位 开发 研究 框架 OpenMAX


在Android Opencore中实现OpenMAX IL层和标准的OpenMAX IL层的方式基本相同 , 一般需要实现以下两个环节 。
编解码驱动程序:位于Linux内核空间 , 需要 。

55、通过Linux内核调用驱动程序 , 通常使用非标准的驱动程序 。
OpenMAX IL层:根据OpenMAX IL层的标准头文件实现不同功能的组件 。
Android中还提供了OpenMAX的适配层接口(对OpenMAX IL的标准组件进行封装适配) , 它作为Android本地层接口 , 可以被Android的多媒体框架Opencore调用 。
OpenMAX IL在使用的时候 , 其数据流也有不同的处理方式:既可以经由客户端 , 也可以不经由客户端 。
Source组件到Host组件的数据流就是经过客户端的;
而Host组件到Accelerator组件的数据流就没有经过客户端 , 使用了隧道化的方式;
Accelerator组件和S 。

56、ink组件甚至可以使用私有的通讯方式 。
OpenMAX Core是辅助各个组件运行的部分 , 它通常需要完成各个组件的初始化等工作 , 在真正运行过程中 , 重点的是各个OpenMAX IL的组件 , OpenMAX Core不是重点 , 也不是标准 。
OpenMAX IL的组件是OpenMAX IL实现的核心内容 , 一个组件以输入、输出端口为接口 , 端口可以被连接到另一个组件上 。
外部对组件可以发送命令 , 还进行设置/获取参数、配置等内容 。
组件的端口可以包含缓冲区(Buffer)的队列 。
组件的处理的核心内容是:通过输入端口消耗Buffer , 通过输出端口填充Buffer , 由此多组件相联接可以构成流式的处理 。
组件的功能和其定义 。

57、的端口类型密切相关 , 通常情况下:只有一个输出端口的 , 为Source组件;
只有一个输入端口的 , 为Sink组件;
有多个输入端口 , 一个输出端口的为Mux组件;
有一个输入端口 , 多个输出端口的为DeMux组件;
输入输出端口各一个组件的为中间处理环节 , 这是最常见的组件 。
端口具体支持的数据也有不同的类型 。
例如 , 对于一个输入、输出端口各一个组件 , 其输入端口使用MP3格式的数据 , 输出端口使用PCM格式的数据 , 那么这个组件就是一个MP3解码组件 。
隧道化(Tunneled)是一个关于组件连接方式的概念 。
通过隧道化可以将不同的组件的一个输入端口和一个输出端口连接到一起 , 在这种情况下 , 两个组件的处理过程合并 , 共同处理 。


【基于|基于Android的OpenMAX框架研究与开发硕士学位论文】58、尤其对于单输入和单输出的组件 , 两个组件将作为类似一个使用 。
3.2.4 Android中的OpenMAX接口函数Android中的OMXCodec在AwesomePlayer中是充当着codec的角色 。
Stagefright 通过OpenMAX 框架实现了解码的功能 。
StageFright的核心播放器AwesomePlayer中包含了sp型的mVideoSource指针 , 初始化时指向OMXCodec的实际对象 。
OMXCodec使用了Binder机制 , 实现了远程函数调用 , 且函数调用模式于本地函数无异 , 其中IOMX作为接口类定义了OMX的大部分接口函数 。
OMX的具体实现时 , OMXMaster用于管理 。

59、OMX的插件 , OMXNodeInstance类代表OMX的具体实例 , 完成和Component的调用和交互 , 内部类CallbackDispatcher是一个主动类 , 它用于调度处理回调函数传回的消息 。
OMXNodeInstance和CallbackDispatcher一一对应 , 协同工作 , 完成不同实例的消息处理 。
OMXNodeInstance类中最重要的几个函数为:1. allocateBuffer: Client通过调用此函数让Component分配Buffer 。
2. useBuffer: Client通过此函数将已分配好的Buffer传给Component , 让其使用 。
3. freeBuffer: 。

60、 Client通过调用此函数让Component释放allocateBuffer()分配的Buffer 。
4. fillBuffer: Client通过调用此函数传递空的Buffer给Component , 让其将处理好的数据填入其中 。
此函数会调用OMX标准接口OMX_FillThisBuffer() 。
5. emptyBuffer: Client通过调用此函数传递输入Buffer给Component , 让其读取其中的数据进行编解码等处理 。
此函数会调用OMX标准接口OMX_ EmptyThisBuffer () 。
6. OnEmptyBufferDone: Component完成对输入buffer的读取后 。

61、 , 调用此回调函数 , 向Client发送EmptyBufferDone消息 。
7. OnFillBufferDone: Component完成相应处理将输出数据填入输出Buffer后 , 调用此回调函数 , 向Client发送FillBufferDone消息 。
图 3.4 OMX Codec解码序列图OMXCodec使用emptyBuffer()函数(IL层中为OMX_EmptyThisBuffer()传递未解码的buffer给component,component收到该命令后会读取input port buffer中的数据,将其组装成帧进行解码,读取buffer中的数据完成后会调用EmptyBufferDo 。


稿源:(未知)

【傻大方】网址:/a/2021/0621/0022536619.html

标题:基于|基于Android的OpenMAX框架研究与开发硕士学位论文( 八 )


上一篇:薪酬|薪酬制度范本

下一篇:党政领导|党政领导班子运行情况分析报告