首页 > 其他分享 >Android Media Framework(一)OpenMAX框架简介

Android Media Framework(一)OpenMAX框架简介

时间:2024-05-28 22:45:12浏览次数:20  
标签:Media 编解码器 Framework API IL 组件 Android OMX OpenMAX

学习开源代码最快的方式是先阅读它的文档,再查看它的头文件,最后研读代码实现并进行编译调试。Android早期引入OpenMAX IL作为使用音视频编解码器的标准接口,了解Android Media框架的底层运行原理要从OMX IL开始。在这一节,我们将阅读整理OpenMAX IL Spec中的介绍和架构部分,以便对整个框架有一个初步的概念。

阅读材料openmax_il_spec_1_0.pdf可在khronos官网下载,也可在公众号后台回复ILSpec获取下载链接。

1、OMX IL简介

OpenMAX Integration Layer(OMX IL,集成层)是由Khronos Group开发的一套低层级标准接口,旨在为编解码器提供一定程度的抽象,使得嵌入式或移动设备能够统一调用音频、视频和图像编解码器,从而实现编解码器实现代码和调用代码的跨平台性。

OMX IL API由两大主要部分组成,分别是Core API和Component API。

  • OMX IL Component:在OMX IL中组件表示独立的功能模块,组件可能是source(源)、sinks(接收器)、codecs(编解码器)、filters(过滤器)或任何其他数据处理模块,组件需要依据Component API来实现。与组件之间的数据通信是通过称为端口的接口进行的,用户可以通过输入端口向组件发送数据,也可以通过输出端口接收数据。
  • OMX IL Core:Core API主要用于动态加载卸载组件,调用组件方法;

将OMX IL API封装并向上层提供高层级接口的部分被称为IL Client(客户端),IL Client使用OMX Core来加载组件,卸载组件,调用组件的方法。

为什么Android要引入OMX IL?

  • Android系统可以跑在多种类型的设备上,比如说手机、电视、平板或者是现在的车机上,这些设备会有不同的芯片,手机用的比较多的是海思、高通、联发科,电视见的比较多的是AML、RTK,这些芯片厂商会有自己编解码器的实现(VPU API),Android作为一个通用平台为了调用不同芯片的编解码器引入了OMX IL框架,各大vendor(厂商)实现OMX IL提供的接口之后,开发者就可以用统一的接口使用硬件编解码了。

2、OMX Component States

OMX IL为组件定义了一些状态,组件使用过程中会经历一系列的状态转换。OMX IL定义的状态有Unloaded、Loaded、Idle、Executing、Paused、WaitForResources、Invalid,但Android中实际用到的只有Loaded、Idle、Executing、Invalid,因此后文中我们只介绍这么多。

  • Loaded:组件创建后就会进入Loaded状态,表示组件已经加载完成。
  • Idle:组件获取到运行所需要的资源,但是还没开始处理数据,这时候处在Idle(空闲)状态。
  • Executing:组件正在运行、处理数据,这时候处在Executing状态。
  • Invalid:组件运行或配置过程中出现错误进入到Invalid状态。

3、OMX Component Architecture

spec中有一个OMX IL组件的架构图,看懂它大致就能了解一个OMX组件应该如何实现了,这里对架构图做简单描述:

  • OMX IL Client或其他组件需要使用组件句柄操作组件,组件操作可以划分为三类:
    • 参数、配置的设定与获取,这些操作是同步执行的,调用完即返回结果;
    • 命令的发送,OMX组件需要维护一个Command Queue,OMX IL API使用异步编程的思想,应用层可能会连续下发多个命令,因此使用队列处理命令事务;
    • input、output buffer的发送,input buffer填充完成后送给编解码器使用,output buffer使用完成后送给编解码器重新填充;
  • 在Android中组件会有两个端口input、output port,每个port维护有一个队列,队列中存储的是Buffer Header的指针,Buffer Header是一个结构体,指向真正的数据缓冲区。
  • OMX组件的数据输出通过Callback完成,总共有三个callback:
    • input port callback:将用完的input buffer送回给IL Client;
    • output port callback:将填充好的output buffer送回给IL Client;
    • event callback:将OMX组件生成的事件发送给IL Client;

4、Communication Behavior

这一节对port有更多的描述,port存储有组件定义的要用的buffer的最小数量,buffer可能是由OMX组件自己分配,也有可能是使用预先分配的。port中的每一个buffer都会关联到一个Buffer Header,Buffer Header除了指向缓冲区外还存储有与缓冲区关联的metadata(元数据)。

5、Tunneled Buffer Allocation and Sharing

关注公众号《青山渺渺》阅读全文,获取更多音视频开发内容

image

标签:Media,编解码器,Framework,API,IL,组件,Android,OMX,OpenMAX
From: https://www.cnblogs.com/rongmiao/p/18219130

相关文章

  • Learning Model Predictive Control for Iterative Tasks. A Data-Driven Control Fra
    LearningModelPredictiveControlforIterativeTasks.AData-DrivenControlFramework一句话MPC:在每个采用点处,根据被控对象的状态和预测模型,预测系统在未来一段时间内的状态,依据某一性能指标(成本函数)来求解最优的一组控制序列,并将这组控制序列的第一个控制作用作为输出......
  • 【DRF-07】rest-framework之版本
    1.基于url的get传参方式(不推荐)1.1:通过自定义版本控制类,获取版本fromdjango.shortcutsimportrender,HttpResponsefromrest_framework.viewsimportAPIViewclassParamVersion(object):defdetermine_version(self,request,*args,**kwargs):version......
  • 宏景eHR showmedia.jsp SQL注入漏洞复现
    0x01产品简介宏景eHR人力资源管理软件是一款人力资源管理与数字化应用相融合,满足动态化、协同化、流程化、战略化需求的软件。0x02漏洞概述宏景eHRshowmedia.jsp接口处存在SQL注入漏洞,未经过身份认证的远程攻击者可利用此漏洞执行任意SQL指令,从而窃取数据库敏感信息。0......
  • 命令启用Windows7 .NetFramework 3.5
    最近在测试某系统安装包在各个环境下的安装使用情况,在window7下使用时,安装完成iis后,发现.NetFramework3.5没有自动勾选;命令没有执行成功。通过以下命令可以在window7下打开自带的.netframework3.5.1(CMD窗口内执行)dism/online/enable-feature/featurename:NetFx3 ......
  • Android Media Framework - 开篇
    前言AndroidMedia是一块非常庞大的内容,上到APP的书写,中到播放器的实现、封装格式的了解,下到编解码组件的封装、VPUAPI的了解,每块内容的学习都需要我们下很大的功夫。此外,我们还要对相关的模块进行了解,比如AudioFlinger、SurfaceFlinger等,他们与Media相关交织共同构建了Android......
  • 【DRF-06】rest-framework之节流
    1.自定义节流类,基于用户IP限制访问频率1.1:自定义节流类importtimeVISIT_RECORD={}classVisitThrottle(BaseThrottle):'''#(1)取出访问者ip#(2)判断当前ip不在访问字典里,添加进去,并且直接返回True,表示第一次访问,在字典里,继续往下走#(3)循......
  • 基于.NET Framework 4.8.1的ASP.NET Web用Gitlab Runner调用MSBuild之后没有bin\rosl
    摘要基于.NETFramework4.8.1的传统ASP.NETWeb程序,使用GitlabRunner自动集成,在发布的网站目录下,没有bin\Roslyn文件夹。这里涉及到容易被忽视的Roslyn编译器的知识点。Roslyn是什么?在我们的ASP.NETWeb项目源代码中有什么体现?1、web.config下有配置节点一般在web.config末......
  • 接口报错.w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework
    1、报文:.w.s.m.s.DefaultHandlerExceptionResolver:Resolved[org.springframework.http.converter.HttpMessageNotReadableException:JSONparseerror:Unexpectedcharacter('''(code39)):wasexpectingdouble-quotetostartfieldname;nestedex......
  • A Simple Framework for Open-Vocabulary Segmentation and Detection
    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布!ProceedingsoftheIEEE/CVFInternationalConferenceonComputerVision.2023. Abstract  1.Introduction 2.RelatedWork 3.Method3.1.BasicLossFormulation 3.2.BridgeTaskGap:Decou......
  • .net Framework Web Api 实现多国语
    首先,在项目下创建一个Resources文件夹,在Resources文件夹中添加如下资源文件:Message.resx【默认英语】Message.ja.resx 【日语】Message.zh-Hans.resx【简体中文】Message.zh-Hant.resx 【繁体中文】在文件中添加名称和值,例如在简体中文的文件中 在日语文件中 然......