Android 13 - Media框架(14)- OpenMax(四)

这一节继续了解 openmax 目录下的内容。

1、OMX_Core.h

1.1、OMX_BUFFERHEADERTYPE

这是一个比较关键的结构体,上层ACodec/MediaCodec用到的 buffer id、OMXNode 与 OMX component 进行 buffer 传递都是通过该结构体完成,这里将会初步了解结构体中的部分成员意义:

  • OMX_U32 nSize:结构体的大小,用的不多;
  • OMX_U8* pBuffer:指向真正存储数据的 buffer;
  • OMX_U32 nAllocLen:分配的 buffer 的字节数;
  • OMX_U32 nFilledLen:buffer中填充的数据的字节数;
  • OMX_U32 nOffset:buffer 有效数据的偏移量;
  • OMX_PTR pAppPrivate:指向应用层与之关联的 buffer;
  • OMX_PTR pPlatformPrivate:指向平台与之关联的 buffer;
  • OMX_PTR pInputPortPrivate:指向 input 端口与之关联的 buffer;
  • OMX_PTR pOutputPortPrivate:指向 output 端口与之关联的 buffer;
  • OMX_TICKS nTimeStamp:buffer 对应的 pts;
  • OMX_U32 nFlags:buffer 所携带的标志位;
  • OMX_U32 nOutputPortIndex:输出端口上的索引;
  • OMX_U32 nInputPortIndex:输入端口上的索引;

结构体中 pBuffer、pAppPrivate、pPlatformPrivate 指向的内容这里暂时不做了解,后面了解 OMXNode 时再做研究。

1.2、OMX_EVENTTYPE

这个枚举类型定义了 OMX 组件的 callback 事件:

  • OMX_EventCmdComplete:组件执行完成一个命令;
  • OMX_EventError:组件发生错误;
  • OMX_EventMark:组件检测到 buffer 标识,用的较少;
  • OMX_EventPortSettingsChanged:组件的端口设置发生变化;
  • OMX_EventBufferFlag:组件收到 EOS;
  • OMX_EventComponentResumed:组件恢复工作;
  • OMX_EventOutputRendered :用作 tunnel mode 下 pts 上传给上层
  • OMX_EventDataSpaceChanged:数据空间发生变化;
  • OMX_EventOnFirstTunnelFrameReady:tunnel mode下第一帧被解出并且准备好渲染;

1.3、OMX_CALLBACKTYPE

这个结构体定义了 OMX 组件的 callback 类型,总共包含三个函数指针:

  • EventHandler:这个方法用于通知应用层OMX组件有事件发生;
  • EmptyBufferDone:这个方法用于将 input 端口的使用完的(空的) buffer 返回给应用层;这个方法是阻塞调用的,所以应用层不应该再其他线程中填充这块buffer;
  • FillBufferDone:这个方法用于将 output 端口的填充完的(满的)buffer 返回给应用层,同样的这个方法也是阻塞调用的;

1.4 OMX_BUFFERSUPPLIERTYPE

tunnel mode 相关,暂不了解。


2、OMX_Component.h

OMX_Component 头文件下定义了一个OMX组件所必要的公有接口,这个头文件将会被组件层和应用层共同使用。

2.1、struct OMX_PARAM_PORTDEFINITIONTYPE

每个组件都会有input 和 output 两个端口,每个端口都会有一个详细的信息描述,比如端口有几个buffer、端口当前的状态等等,这些信息就用 OMX_PARAM_PORTDEFINITIONTYPE来描述,结构体中有如下内容:

  • nPortIndex:端口的索引,使用较少;
  • eDir:表示当前 port 是 input 还是 output;
  • nBufferCountActual:当前端口上实际分配的buffer的数量;
  • nBufferCountMin:当前端口最少应该分配的buffer的数量;
  • nBufferSize:端口上每个buffer的大小;
  • bEnabled:当前端口是否被使能,默认是 enabled;
  • bPopulated:当前端口的数量是否已经被充满(数量等于nBufferCountActual),disable状态下端口将不会被认为是充满的;
  • eDomain:当前端口中buffer存储的数据的类型,video数据还是audio数据,用于决定端口的format类型;
  • format:表示端口中buffer的格式,不同数据类型对应于不同的格式,这将在后续了解;
  • bBuffersContiguous:buffer是否连续;
  • nBufferAlignment:buffer的对齐方式;

ACodec 中分配buffer时会先获取 port 定义,读取端口对应的 buffer 数量,后续也可能修改端口的buffer数量,另外读取输入输出格式时就是从端口定义的format中读取的。

2.2 struct OMX_COMPONENTTYPE

我们在OMX中见到的OMX_HANDLETYPE指代的就是这里的OMX_COMPONENTTYPE,它表示一个组件的句柄,通过这个句柄我们可以调用到组件的公有方法,也可以获取到组件的私有数据块(每个组件实现的方式与细节)。组件句柄由OMX Core创建,组件加载完成后,应用层可以安全的调用组件的方法。

接下来了解这个结构体中的部分内容:

  • pComponentPrivate:指向组件的私有数据块(内部实现);
  • pApplicationPrivate:指向OMX组件的调用者(client),也就是OMXNode;
  • 公有函数指针:由OMX组件实现,给client调用。

调用一个 OMX 方法后,组件的处理流程应该是这样:

  • 调用 OMX_COMPONENTTYPE 的标准方法,传入参数为 OMX_COMPONENTTYPE 自身;
  • 标准方法实现中对内部实现 pComponentPrivate 进行处理和调用,比如说 SetCallbacks 应该会把回调函数注册给 pComponentPrivate 的一个成员。

OMX Core 创建的是一个基类对象,实际调用的是我们的子类实现,大致就是这个意思。

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

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

相关文章

SVG图片选择库组件封装及使用

需求 需求: 在项目中通常需要做菜单管理,想要让左侧菜单好看一点,一般都会选择添加图标,需要自定义选择喜欢的图标,得提供一个有选择项的图标库 延伸需求:在项目中通常可能有好几个图标选择库,可…

CentOS 系列:CentOS 7文件系统的组成

CentOS 7文件系统的组成 文件系统的组成Linux的一些重要目录文件和目录名主机名文件权限绝对路径和相对路径绝对路径相对路径 文件系统的组成 一切从根开始 文件路径中只有第一个/是根目录,后面的/是分隔符 文件名区分大小写 除斜线(/)以外,其他的字符…

ruoyi-plus使用Statistic统计组件升级element-plus

原本使用的就是gitee上lionli的ruoyi-plus版本的代码。但是在使用过程中作首页数据看板时想使用elementui的Statistic统计组件。结果在浏览器控制台报错找不到组件el-statistic 于是查看elementui的历史版本,发现是在新版中才有这个组件,旧版本是没这个组…

第六届传智杯第四题(abb)

描述 leafee 最近爱上了 abb 型语句,比如“叠词词”、“恶心心” leafee 拿到了一个只含有小写字母的字符串,她想知道有多少个 "abb" 型的子序列? 定义: abb 型字符串满足以下条件: 字符串长度为 3 。字符…

高防CDN可以起到什么作用?

高防CDN相对于普通的CDN加速,除了具备基础的加速功效外,高防CDN在每一节点上均有相应配置的防御功效,不仅具备了隐藏源站不被攻击的优势,也具备了访问加速,多节点防御的功效。随着互联网的不断发展,网络上的…

网络安全技术

网络安全概述 网络安全基础要素 机密性,完整性,可用性,可控性,可审查性 常见网络攻击和特点 1.网络监听 使用sniffer软件或主机接口设置成混杂模式,监听网络中的报文 使用加密技术防范 2.重放攻击 攻击者发送一…

【运维】hive 高可用详解: Hive MetaStore HA、hive server HA原理详解;hive高可用实现

文章目录 一. hive高可用原理说明1. Hive MetaStore HA2. hive server HA 二. hive高可用实现1. 配置2. beeline链接测试3. zookeeper相关操作 一. hive高可用原理说明 1. Hive MetaStore HA Hive元数据存储在MetaStore中,包括表的定义、分区、表的属性等信息。 hi…

软件工程 课堂测验 选择填空

系统流程图用图形符号表示系统中各个元素,表达了系统中各个元素之间的 信息流动 喷泉模型是一种以用户需求为动力,以 对象 为驱动的模型。 软件生存周期中最长的是 维护 阶段。 变换流的DFD由三部分组成,不属于其中一部分的是 事务中心 软…

前端面试灵魂提问

1.自我介绍 2.在实习中,你负责那一模块 3.any与unknow的异同 相同点:any和unkonwn 可以接受任何值 不同点:any会丢掉类型限制,可以用any 类型的变量随意做任何事情。unknown 变量会强制执行类型检查,所以在使用一个…

Python 多层级导包

假如我的项目层级结构如下,project文件夹为项目根路径: project/ ├── first/ │ ├── __init__.py │ ├── second/ │ │ ├── __init__.py │ │ └── second_test.py │ └── first_test.py └── main.py假设项目入口文…

工具及方法 - 如何阅读epub文件:使用Adobe Digital Editions

EPUB(Electronic Publication的缩写,电子出版)是一种电子图书标准,由国际数字出版论坛(IDPF)提出;其中包括3种文件格式标准(文件的扩展名为.epub),这个格式已…

【模电】晶闸管

晶闸管 结构和等效模型工作原理晶闸管的伏安特性晶闸管的主要参数额定正向平均电流 I F I\tiny F IF维持电流 I H I\tiny H IH触发电压 U G U\tiny G UG和触发电流 I G I\tiny G IG正向重复峰值电压 U D R M U\tiny DRM UDRM反向重复峰值电压 U R R M U\tiny RRM URRM 晶体闸流…

对Laxcus分布式操作系统的认知、价值、痛点解决的回答

下面是一位网友的提问,回答贴出来供大家参考,欢迎在下方留言评论。 问: Laxcus分布式操作系统有哪些与众不同的地方?它的价值在哪里?解决了哪些市场痛点?我公司现在已经使用Linux操作系统部署了一堆服务器…

设计模式-模板方法模式

定义 模板方法模式是一种行为型设计模式,它定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式。这种模式允许子类在不改变算法结构的情况下,重新定义算法的特定步骤。 模板方法模式的结构包括抽象类和具体子类。抽象类负责…

android 内存分析(待续)

/proc/meminfo memory状态解读 命令:adb shell cat /proc/meminfo内存分布log 查看方式 命令:adb shell cat /proc/meminfo 用途:可以整体的了解memory使用情况 我们说的可用memory一般以MemAvailable的数据为准。所以了解MemAvailable的组成可以帮助…

【LeetCode刷题-链表】--86.分隔链表

86.分隔链表 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; }* }*/ class…

建筑木模板厂家批发

在建筑施工中,木模板是一种常见且重要的施工材料,用于搭建混凝土浇筑的支撑结构。选择合适的建筑木模板厂家进行批发,对于施工质量和效率至关重要。本文将介绍建筑木模板厂家批发的重要性,并推荐贵港市能强优品木业作为专业的建筑…

将文件读入C中的字符数组

当您使用 C 编程语言时,您可能会遇到一些需要将文件读入字符数组的问题,例如分析每个字符的频率,或者将所有句子的每个起始词从小写转换为大写,反之亦然。该解决方案非常简单,但对于不太了解文件读取或写入的人来说可能…

MVVM 模式与 MVC 模式:构建高效应用的选择

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

世岩清上:什么是元宇宙

元宇宙是一个虚拟的数字世界,它是一种全新的互联网形式,是一个可以提供身临其境体验的虚拟世界。元宇宙融合了现实和虚拟,允许用户在这个数字空间中自由探索、创造和交互。 元宇宙的概念源于科幻小说和电影,它最早出现在1992年的…