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

本篇将继续深入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分配过程分析

请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Redis】构建强韧的远程Redis连接与端口保障机制完美指南

【Redis】构建强韧的远程Redis连接与端口保障机制完美指南 大家好 我是寸铁👊 总结了【Redis】构建强韧的远程Redis连接与端口保障机制完美指南✨ 喜欢的小伙伴可以点点关注 💝 前言 在当今的软件开发领域中,远程访问和操作数据存储是极为常见…

linux常用命令及其选项

1、常用命令 1.1、ls 选项说明-a显示所有文件及目录 (包括隐藏文件)-i显示inode-A同 -a选项 ,但不列出 "." (目前目录) 及 ".." (父目录)-l列出信息详细(如文件型态、权限、拥有者、文件大小等)-R递归显示(若目录下有文件,则以下之…

Allegro导入DXF文件

阿里狗导入DXF文件 点击File–>Import–>DXF,注意DXF file那边不能使用中文路径和文件名以及非法字符,DXF units一般为mm,结构那边一般都用mm制作图,右边三个选项只需要勾选中间那个,意思是以增加的形式导入&am…

基于协调过滤算法商品推荐系统的设计

管理员账户功能包括:系统首页,个人中心,商品管理,论坛管理,商品资讯管理 前台账户功能包括:系统首页,个人中心,论坛,商品资讯,商家,商品 开发系统…

数据结构和算法一轮

前言 本文参考《2025年数据结构考研复习指导(王道论坛组编)》和相关文章,为考试前复习而写。 目录 前言 第一章线性表 1.1顺序表 1.2单链表 1.3循环链表 ​1.4双向链表 第二章栈和队列 2.1栈 2.2共享栈 2.3链栈 2.4队列 2.5循环…

基于Seatunnel最新2.3.5版本分布式集群安装部署指南(小白版)

基于Seatunnel2.3.5版本分布式集群安装部署 1.环境准备2.JDK安装3.Maven安装4.Seatunnel在master节点安装部署配置4.1.下载Seatunnel安装包4.2.解压下载好的tar.gz包4.3.下载连接器4.4.配置Seatunnel的系统环境变量4.5.配置 SeaTunnel Engine服务 JVM参数4.6.配置文件中集群相关…

前端使用轮播图的方法有哪些

前端使用轮播图的方法可以使用swiper:Swiper中文网-轮播图幻灯片js插件,H5页面前端开发 这是swiper官网,在官网里面可以找到很多轮播图的实际案例: 我们挑选可用的案例或者修改的案例,打开后打开源码,就可以获取到当前的源码了,加以调试就可以获得我们需要的结果, 例如: 上图…

1-什么是护网行动

1.什么是护网行动 2016年,公安部会同民航局、国家电网组织开展了“护网2016”网络安全攻防演习活动。同年,《网络安全法》颁布,出台网络安全演练相关规定:关键信息基础设施的运营者应“制定网络安全事件应急预案,并定期进行演练”…

训练营第三十一天 | 494.目标和474.一和零动态规划:完全背包理论基础518.零钱兑换II

494.目标和 力扣题目链接(opens new window) 难度:中等 给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S。现在你有两个符号 和 -。对于数组中的任意一个整数,你都可以从 或 -中选择一个符号添加在前面。 返回可以使…

如何提高网站排名?

提高网站排名是一个复杂的过程,涉及到多个方面的优化,包括但不限于内容质量、网站结构、用户体验、外部链接建设等,GSR这个系统,它是一种快速提升关键词排名的方案,不过它有个前提,就是你的站点在目标关键词…

OpenCV学习(4.6) 图像梯度

1.目标 在本教程中: 你会学到如何找到图像的梯度,边缘等。你会学到如下函数:**cv.Sobel(),cv.Scharr(),cv.Laplacian()** 等。 图像梯度是图像处理中的一个基本概念,它用于测量图像亮度变化的强度和方向…

php探针代码怎么写

创建php文件并输入代码,访问文件查看php版本、环境和系统配置信息,可使用ini_set()函数定制输出,但注意在生产环境中使用时要注重安全,因为它会泄露敏感信息。 PHP探针代码撰写指南 PHP探针代码是一种脚本,可提供关于…

接口的应用、 适配器设计模式

接口的应用 适配器设计模式 Inter package com.itheima.a09;public interface Inter {public abstract void show1();public abstract void show2();public abstract void show3();public abstract void show4();}InterAdapter package com.itheima.a09; //抽象 public abs…

Elastic Search(ES)Java 入门实操(2)搜索代码

上篇解释了 ES 的基本概念和分词器。Elastic Search (ES)Java 入门实操(1)下载安装、概念-CSDN博客 Elastic Search(ES)Java 入门实操(3)数据同步-CSDN博客 这篇主要演示 Java 整合…

HQL面试题练习 —— 求连续段的最后一个数及每个连续段的个数

目录 1 题目2 建表语句3 题解 题目来源:拼多多。 1 题目 有一张表t_id记录了id,id不重复,但是会存在间断,求出连续段的最后一个数及每个连续段的个数。 ----- | id | ----- | 1 | | 2 | | 3 | | 5 | | 6 | | 8 | | …

C++11:列表初始化 初始化列表initializer_list decltype关键字 左值右值 std::move

目录 前言 列表初始化 初始化列表initializer_list decltype关键字 左值和右值 move 前言 2003年C标准委员会曾经提交了一份技术勘误表(简称TC1),使得C03这个名字取代了C98成为了C11前最新的C标准名称。不过由于C03主要是对C98标准中的…

Directory Opus 13.6 可用的apk文件右键菜单脚本

// apk文件的右键经过adb安装的脚本,可以在多个设备中选择function OnClick(clickData) {try {// 检查是否选中了文件if (clickData.func.sourcetab.selected_files.count 0) {DOpus.Output("没有选中任何文件");return;}// 获取选中的文件名var selectedFile clic…

聆思CSK6大模型开发板英语评测类开源SDK详解

离线英文评测算法SDK 能力简介 CSK6 大模型开发套件可以对用户通过语音输入的英文单词进行精准识别,并对单词的发音、错读、漏读、多读等方面进行评估,进行音素级的识别,根据用户的发音给出相应的建议和纠正,帮助用户更好地掌握单…

Java学习书籍推荐

本文推荐了Java基础,并发,虚拟机学习过程中,比较好的书籍,如果大家需要视频教程,可参考【软件开发】Java学习路线 或者B站文件夹同时会收藏其他Java视频,感谢关注。 指路:Java学习-创建者&…

全光网络与传统网络架构的对比分析

随着信息技术的飞速发展,网络已经成为我们日常生活中不可或缺的一部分。在这个信息爆炸的时代,全光网络和传统网络架构作为两种主流的网络技术,各有其特点和适用范围。本文将对这两种网络架构进行详细的对比分析,帮助读者更好地了…