Android Media Framework(四)Non-Tunneled组件的状态转换与buffer分配过程分析

news/2025/1/21 11:57:43/文章来源:https://www.cnblogs.com/rongmiao/p/18238342

本篇将继续深入OpenMAX IL Spec,详细解析Non-tunneled(非隧道)组件的初始化、数据传递以及组件销毁过程。通过阅读本篇内容,我们应能对Non-tunneled组件的buffer分配与状态转换过程有一个清晰的了解。

1、组件初始化

以下是IL Spec给的Non-tunneled组件初始化时序图:

IL Client首先调用OMX IL Core的接口创建OMX组件,接着调用IL Core定义的宏函数操作OMX组件,详细调用过程如下:

  1. IL Client调用 OMX_GetHandle 方法创建组件,组件所有的配置与资源都被初始化,进入StateLoaded状态。IL Core调用组件的SetCallbacks方法将回调函数注册到OMX组件当中。组件创建成功,OMX_GetHandle将组件句柄返回给IL Client。
  2. 组件处于StateLoaded状态下,IL Client通过调用OMX_SetParameter函数将所需的参数设定给OMX组件。
  3. 参数设定完成后,IL Client调用OMX_SendCommand向OMX组件发送CommandStateSet命令,请求组件将状态转换为OMX_StateIdle,只有在发出此请求后,IL Client才能为OMX组件配置端口所用的buffer。
  4. 如果某个端口的buffer是由组件自己分配,那么IL Client要调用OMX_AllocateBuffer请求组件为该端口分配具有指定大小的buffer,同时还要分配出对应的buffer header。
  5. 如果某个端口需要共享IL Client的buffer,那么IL Client需要分配出buffer,再调用OMX_UseBuffer将buffer传递给OMX组件,组件接收buffer后需要分配出buffer header回传给IL Client。
  6. 组件检测到所有端口都拿到了所需的buffer,它就正式进入到StateIdle状态,并发送Callback通知IL Client状态转换请求已经完成。

阅读以上流程我们会发现,无论是用OMX_AllocateBuffer还是用OMX_UseBuffer,buffer header都是由组件分配再回传给IL Client。

2、数据传输

以下是IL Spec中的Non-tunneled组件数据传输时序图:

收到组件StateIdle状态设定完成发送的callback后,IL Client会调用OMX_SendCommand再向OMX组件发送CommandStateSet命令,请求组件将状态转换为OMX_StateExecuting,组件收到此请求不需要执行一些复杂动作(时序图没有标出这个流程),状态设置完成后组件同样会发送callback给IL Client。

组件的OMX_StateExecuting状态设定完成后,IL Client启动数据传输流程:

  1. IL Client调用OMX_FillThisBuffer将一个空的output buffer传递给OMX组件的output port;
  2. IL Client调用OMX_EmptyThisBuffer将一个写有数据的input buffer传输给OMX组件的input port;

全文阅读:Android Media Framework(四)Non-Tunneled组件的状态转换与buffer分配过程分析

image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/721746.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

庆余年第二季迅雷下载/庆余年2全集下载百度云在线观看

《庆余年2》:承前启后的豪情与智慧近年来,电视剧《庆余年》以其精彩的剧情和精湛的演技,收获了广大观众的喜爱和好评。而续集作品《庆余年2》更是在原剧的基础上迈出了更加坚实的一步。该剧不仅延续了第一季的精彩故事,同时也在新一季中增加了更多的情节和角色,带给观众更…

CF1192B Dynamic Diameter 题解

思路 静态 \(\text{top tree}\) 板子题。 定义 我们使用簇来表示树上的一个连通块。 可以按照如下方式定义一个簇:一个簇可以表示为三元组 \((u,v,E)\),其中 \(u,v\) 为树的节点,称为簇的界点,\(E\) 为一个边的集合,表示该簇包含的边,路径 \((u,v)\) 称作簇路径。 \(u,v\…

谈判专家迅雷BT下载[2.69GB-MKV]加长完整版[HD1280P]

《谈判专家》是由中国导演韩寒执导的一部谈判题材电影,该片于2017年上映。电影讲述了一场关于中国企业与美国公司之间的商业谈判,以及其中涉及到的诸多挑战和困境。本文将对该电影进行全面分析,从剧情、演员表现、影片风格等方面进行讨论。首先,我们来看剧情。电影《谈判专…

走走停停迅雷BT下载[DB-1280P/3.25GBMKV中字]4k高清百度云资源分享

电影《走走停停》:探寻人生的迷茫与自我救赎电影《走走停停》是一部由李安执导,由乔阿尔文主演的心灵探索之旅。这部电影以一个中年男子的迷失和自我救赎为线索,通过对人生中的停顿和挫折的描绘,引发观众对生活意义的思考。故事的主线由两个不同的时间线交织而成,一条是男…

扫黑决不放弃迅雷BT下载[MOV-5.28GB]高清完整版[HD720p/1080p]

电影《扫黑决不放弃》:坚定信念,抗击黑暗的战斗电影《扫黑决不放弃》是一部扣人心弦的动作犯罪电影,由中国著名导演李安执导,讲述了一群有志青年与黑恶势力斗争的故事。影片通过紧凑的剧情和刺激的动作场面,以及深刻的社会寓意,引发观众对正义与邪恶的思考。电影以中国大…

我才不要和你做朋友呢下载/迅雷BT下载[HD-720P/2.65GB]百度云资源

电影《我才不要和你做朋友呢》是一部由导演张华执导的青春成长电影。该片以逗趣的方式,讲述了一个关于友谊和成长的故事。影片中的角色经历了许多挑战和困难,通过彼此之间的支持和理解,他们在成长的路上逐渐成为了真正的朋友。本文将会从影片的剧情、人物塑造以及核心主题等…

初级算法01

用时:42min class Solution {public int removeDuplicates(int[] nums) {/*** 双指针,右指针遍历整个数组,左指针记录有效值*/int l = 0, r = 0;Set<Integer> s = new HashSet<Integer>();for(; r < nums.length; r++){if(s.add(nums[r])){int t = nums[l];n…

无限之环 题解

五星压行大师 \(lyh\) 表示:这是难得能让他的代码长度打破百行大关的题目(182行)。 首先,根据科技与狠活,本题可以黑白染色。源点联向白格,黑格连向汇点。 发现每个格子都可以连向四个方向,所以可以建立四个点,代表水管连到了上下左右四个方向。 设四元组 \((x,y,z,p)\…

7大系统之间的关系

7大系统之间的关系:MES(制造执行系统)、ERP(企业资源规划)、SCM(供应链管理)、WMS(仓库管理系统)、APS(高级计划和排程)、SCADA(监控控制与数据获取)、PLM(产品生命周期管理)

OpenAI正式发布第一个官方.NET版本库的测试版

尽管 Microsoft 和 OpenAI 长期以来一直是紧密相连的合作伙伴,但他们现在才开始为 .NET 开发人员发布官方 OpenAI 库,加入现有的社区库。这项工作的第一个测试版是支持 .NET 6 和 .NET Standard 2.0 的 OpenAI NuGet 包,现在是 2.0.0-beta.3 [1]版本,列出了大约 872,000 次…

玩转树莓派之系统安装篇

手头上刚好有一个树莓派4B介绍 树莓派是树莓派基金会下的一个明星产品(单板计算机),已经迭代到第五代了;它性能强大、开源、拓展性强、体积小,搞物联网开发的人基本都听说过这个玩意!笔者手上刚好有一块4B的板子,让我们一起来玩转树莓派 安装准备 硬件树莓派4B 4G内存版…

Keil uVersion 4单片机开发指南

MDK Keil uVersion 4使用教程,基于STC8H8K64U单片机1 软件安装 双击打开C51V901.exe弹出安装界面,点击Next>>点击同意协议勾选框,接着点击Next>>点击Browse...选择合适的目录,接着点击Next>>按要求填写相关信息,然后点击Next>>软件安装中,等待安…