OpenMax IL开发指引

【多媒体编解码】Openmax IL (一)官方文档概述 OpenMax IL 概述PS:被博客主要是对官方文档前三章的学习于记录。 官网文档请移步: https://www.khronos.org/openmax/Openmax 框架图:openmax il API概述openmax il API 是基于组件的的多媒体API,包括core API和conponent API core : 动态的加载和卸载conponent,允许用户层和conp 阅读详情

前言:

OpenMax IL参考网站:OpenMAX Overview - The Khronos Group Inc

OpenMax IL源码下载网站:Bellagio OpenMAX Integration Layer

参考文献:
https://github.com/KhronosGroup/OpenMAX-IL-Registry/tree/main/api

层次结构

OpenMax是一个多媒体应用程序的框架标准,来看一下它的层次结构:

目前要使用的是OpenMax IL(Integration Layer,集成层),这一层上承OpenMax AL(Appliction Layer,应用层)或者客户应用,简单地说就是提供SetSource,SeekTo这样的接口;下启OpenMax DL(Development Layer,开发层)或者平台的Codec,简单地说就是提供后端音效,画质,编码处理的接口。下面一幅图提供了描述。

NuPlayer就是用OpenMax来做(codec)编解码的。

OpenMax IL

Core

OpenMax IL包括Core和Component组件,Core用来初始化,加载Compoent,一旦加载完成,用户就可以直接使用IL层提供的API和组件交互;同样,用户也可以得用Core API建立Component之间的交互通道, Component之间可以不经Core API直接进行交互。Component就是功能模组,可以是sources, sinks, codecs, filters, splitters, mixers等等模块,它可以是纯软件组件,如Audio软件解码器,也可以代表硬件甚至处理器或者软硬件结合体。

Component组件

Component的参数通过关联的数据结构进行传递;状态,错误等信息用Callback函数来传递,这样设计的原因是方便进行系统异步设计。Component的数据传递是通过Port来传递的,Port代表了Component之间的一个连接关系,同时也持有维系Component之间连接关系的Buffer,有输入/输出Port之分。

 为避免死锁,Component的Command可以取消。下图是Component的通信方式:

下图是Component组件的状态变化:

每个组件的初始状态都是 UNLOADED

  1. OMX_StateIdle, OMX_StatePause or OMX_StateExecuting状态已经具备所有资源,如果需要资源的具体数量在OMX_StateIdle状态不清楚,可以推迟到需要时再分配,比如Output frame Buffer的数量和ReferFrame的数量相关,而参考帧数得在解码后才知道。而静态资源是必须在变成OMX_StateIdle之前准备好的,否则会进入WAIT FOR RESOURCES 状态。OMX_StateExecuting意味着组件正在等待接收buffer以处理数据。由OMX_StateIdle 到 OMX_StateLoaded会导致资源消失,例如Buffer丢失,所以要特别注意这一状态转换。
  2. 获取到Component Handle意味着Component由Core配置完成。Component的数据通信是非阻塞的,ports的数量被配置通信就被使能。每个port被配置特定的数据格式,并且组件也被置于正确的状态。port的通信方式各异,输入Port通过OMX_EmptyThisBuffer调用获取Buffer,常用的是用OMX_FillThisBuffer来让Input Port获取Buffer;输出Port通过OMX_FillThisBuffer 调用获取Buffer,更常用的是用OMX_FillThisBuffer让输出Port输出Buffer。port 将buffer header和buffer关联,buffer header 指向buffer中间的数据和buffer内容相关的metadata。相应的OMX_EmptyBufferDone OMX_FillBufferDone 回调函数在调用返回之前被触发。
  3. 为了Thread Safe,任何callback回调函数不可以调用Core 或者Component的API,并且callbacks函数也不允许被中断服务程序ISR调用;除此限制外,Caller无需特殊处理线程安全和同步。

Component架构如下图示意:

如下为Gstreamer中应用OMX的数据流:

下面是omx IL设计方案对比:

openmax用法 OpenMax是一个多媒体应用程序的框架标准。它自上而下分为三层,Application Layer, Integration Layer和Development Layer。应用层规定了应用程序和多媒体中间层的标准接口,使应用程序的移植性更好。集成层定义了多媒体组件的接口,使得多媒体框架能以一种统一的方式访问多媒体Codec和组件,以便在嵌入式流媒体框架中快速集成加速编解码器。开发层为Codec厂商和硬件厂商提供了一套API,使开发更加便捷。 ... 阅读详情

相关推荐

openmax实现

openmax实现 包装了,ffmpeg,libogg,libmad,写了读取,解复用,解码,slink等组件。

《Towards Open Set Deep Networks》:一文搞懂开集识别算法 OpenMax:

《Towards Open Set Deep Networks》:一文搞懂开集识别算法 OpenMax

weixin_54353432的博客 1万+

企业级智能知识库问答AI助手(大模型+Python)

智能知识问答库AI助手

usa_washington的博客 1655

OpenMax概述及与Gstreamer的对接

openmax概述,对接gstreamer

David的博客 2392

STM32 WinUSB免驱实现:从DFU模式到高速通信的实战指南

本文详细介绍了STM32 WinUSB免驱实现方案,从DFU模式到高速通信的完整实战指南。通过修改设备描述符、添加BOS描述符和实现WCID描述符集,开发者可以轻松实现即插即用的USB设备,无需额外安装驱动。文章还提供了性能优化技巧和实际应用案例,帮助开发者快速部署高效稳定的USB通信方案。

weixin_29171087的博客 422

马尔可夫网络和贝叶斯网络的一些总结

马尔可夫网络和贝叶斯网络的一些总结 最近学习了一些关于概率逻辑的知识图谱推理方法,主要就是贝叶斯网络和马尔可夫网络,在此总结一下,内容都来自网络资料,这里加入了一下个人的理解,尽量为大家避雷! 这篇文章是我目前在网络上找到的关于贝叶斯网络最清晰的介绍,大家有兴趣可以去看看 贝叶斯网络中比较重要的两部分就是贝叶斯网络的结构和条件概率表。 贝叶斯网络的结构 下面通过一个例子来介绍: 贝叶斯网的网络结...

qq_43654303的博客 4374

OpenMAX指南

文章目录一、前言二、OMX发展背景三、OMX标准四、OMX实现五、OMX组件化技术六、总结参考文献 [注] 本文提供一个OpenMAX的入门指引,着重从整体层面进行介绍,并解释重点与关键内容,对于不重要与冗余的内容将惜墨,简单的英文注释将不作翻译。如有错漏,欢迎拍砖。 一、前言 Khronos Group提出一个标准,以创造一个统一的标准接口,不同厂商与开发者可以通过该标准接口提供自身对于音视频的...

仰望星空 2555

GEE:关于遥感生态指数(RSEI)的若干疑问

本文记录了若干关于在 Google Earth Engine (GEE)平台上,计算基于主成分分析(PCA)的遥感生态指数(RSEI)的问题。并记录了解决这些问题的一些答案。问题包括,主成分分析的特征值的正负,主成分的占比,去云后空值像素的处理方法,异常值处理方法,如何看载荷等。

养乐多的博客 3417

音视频开发著作《Android音视频开发》终于发售了,先来一波签名送书福利!

经历了两年多,我的著作终于和大家见面了,写书是一件很磨练人耐力的事情,从打算写一本书开始后,心里无时不刻有一块大石头压在头顶。一来要保证专业性,二来要保证质量,同时还要兼具备怎么表达,才能让别人明白所说的意思。所以看起来没有那么简单。近年来,直播,短视频行业相关业务发展迅猛。Android音视频开发门槛相对高些,很多有特色或者核心模块基本都是NDK开发,而NDK开发很多实际上都是C/C++写的Co...

欢迎关注公众号:【码农突围】,公号后台回复9999,可以获取一份500页的LeetCode刷题笔记。 1万+

基于 YOLOv26 的陶瓷产品缺陷检测系统:智能视觉质检方案

本文提出了一种基于YOLOv26深度学习模型的陶瓷产品智能缺陷检测系统。该系统针对陶瓷生产中的裂纹、气泡、釉面缺陷等8类常见质量问题,采用YOLOv26目标检测算法实现高精度自动化检测。系统架构包含数据采集、预处理、YOLOv26检测和后处理四个模块,具有多类别分类、实时推理和强鲁棒性等技术优势。文章详细介绍了数据预处理与增强方法,并提供了Python代码实现示例。该方案可显著提升陶瓷产品质量检测效率,替代传统人工检测方式,为陶瓷制造业提供智能化质检解决方案。

一键难忘的博客 789

一文读懂5G网络整体架构(接入网+承载网+核心网)

接入网重构分级(分工更细、效率更高)、承载网三段化升级(管道更宽、更智能)、核心网服务化云化(管理更灵活、成本更低)最终实现“成本最优、资源灵活、场景适配”,才能支撑自动驾驶、工业互联网、智慧城市、VR/AR等各种新场景,真正走进我们的生活。

鲸落寰宇 430

推荐新书啦《Android音视频开发》

给大家推荐一本新书《Android音视频开发》,该书作者是何俊林同学,俊林是音视频开发领域的资深开发者,我也关注了俊林的公众号和博客,经常看他的文章,受益颇多。该书由浅及...

yanzhenjieok的专栏 626

基于STM32F103的智能门禁门锁门卫系统设计

本文设计了一种基于STM32F103单片机的智能门禁系统,集成了密码、射频IC卡和指纹识别三种验证方式。系统采用模块化设计,包含MFRC522射频模块、AS608指纹模块、矩阵键盘、OLED显示和舵机控制等硬件,实现了身份验证、密码修改、IC卡/指纹管理以及安全防护功能。测试结果表明系统响应迅速(密码验证250ms、指纹验证600ms)、功耗低(待机50mA),且具备掉电密码保存功能。该系统操作简便、功能完善,适用于家庭和办公场所,具有较高实用价值。未来可扩展远程控制、人脸识别等功能以进一步提升智能化水平。

3254968421的博客 320

【有啥问啥】OpenMax算法详解:深度学习中的高效开集识别技术

OpenMax算法是一种基于深度神经网络的开集识别方法,它通过对模型输出的激活向量进行后处理,实现了对未知类别的有效识别。该算法的核心思想是利用已知类别的统计特性来推断未知类别的存在。

Chauvin的博客 7756

【YOLO系列】YOLOv4详解:模型结构、损失函数、训练方法及代码实现

摘要:YOLOv4在目标检测领域实现了精度与速度的平衡,通过CSPDarknet53骨干网络、SPP+PANet特征融合及CIoU损失函数等创新,在MS COCO数据集达到65.7% AP50,V100显卡实现62FPS实时检测。核心优化包括Mosaic数据增强、自对抗训练和解耦头结构,显著提升小目标检测和遮挡场景鲁棒性。代码实现采用CSP模块和SPP多尺度池化,兼顾计算效率与检测性能,为工业落地提供高效解决方案。(149字)

一碗白开水一 1358

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

编解码抽象层OpenMax简介

一、OpenMax相关概念 OpenMax存在背景—为多媒体硬解方案提供标准提升移植效率 随着消费者对视频、音频、语音和 3D 等应用程序在智能手机、音频和视频媒体播放器和游戏机等各种平台上的改进功能的需求不断增长,多媒体硬件平台出现了各种解决方案加速多媒体应用程序。(如具:有特定多媒体扩展功能的通用处理器、低级硬件加速器,包括 DSP 在内的多处理器架构、专用硬件视频解码器) 所有这些架构变体的主要挑战之一是开发高效的代码。尽管通常会提供编译器,但很少能从高级编程语言中挖掘整个架构的全部潜力。结果是应用程

runafterhit的博客 4154

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【算法介绍】开集识别算法 OpenMax

OpenMax是一种用于深度学习模型的,它能够在模型的输出中区分已知类别和未知类别。该算法的核心思想是利用深度神经网络的倒数第二层(全连接层)的激活向量,通过构建每个类别的平均激活向量(MAV)和距离集(D),进而使用极值理论(EVT)来拟合这些激活向量的分布,从而计算出每个测试样本属于已知类别的概率。如果一个测试样本的概率低于某个阈值,则它被认为是未知类别。

Glass_Gun的博客 3030

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

OpenMax标准介绍以及应用

OpenMAX™是一个免版税的跨平台API标准,通过支持跨多个操作系统和芯片平台开发、集成和编程加速多媒体组件,提供了全面的流媒体编解码器和应用程序可移植性。OpenMAX API将与处理器一起发布,使库和编解码器的用户能够快速有效地充分利用新处理器的加速潜力——而不管底层硬件架构如何。 OpenMAX DL(开发层)api包含一组全面的音频、视频和图像功能,可以在新的cpu、硬件引擎和dsp上实现和优化,然后用于广泛的加速编解码器功能,如MPEG-4、H.264、MP3、AAC和JPEG。OpenMAX

tugouxp的专栏 1892

OpenMAX/IL: OMX IL 学习笔记【1】- 结构框架

一、OpenMax简介 OpenMAX(Open Media Acceleration的缩写,开放多媒体加速层)是一个多媒体应用程序的标准。由NVIDIA公司和Khronos™在2006年推出。 它是无授权费的、跨平台的C语言程序接口序列,这些接口对音频、视频、静态图片的常用操作进行封装。 它包括三层,自上而下分别是应用层(AL)、集成层(IL)和开发层(DL)。 OpenMAX AL:Application Layer,应用和多媒体中间层的标准接口,使得应用在多媒体接口上具有了可移植性。 OpenMAX

houxiaoni01的博客 4811

OpenMax概述

一、OpenMax简介 OpenMAX是一个多媒体应用程序的标准。由NVIDIA公司和Khronos™在2006年推出。 它是无授权费的、跨平台的C语言程序接口序列,这些接口对音频、视频、静态图片的常用操作进行封装。 它包括三层,分别是应用层(AI)、集成层(IL)和开发层(DL)。其中IL层已经成为了事实上的多媒体框架标准。嵌入式处理器或者多媒体编解码模块的硬件生产者,通常提供标准的OpenMax IL层的软件接口,这样软件的开发者就可以基于这个层次的标准化接口进行多媒体程序...

eydwyz的专栏 4097

OpenMax IL层设计分析总结

文章目录一、OpenMax的设计理念与特性点设计理念---媒体框架的抽象/可移植性/异步处理/组件组合设计特性---组件化API/方便新增解码器/方便扩展/支持动态链接/可配置二、OpenMax的设计点分析2.1 【兼容性】版本兼容性设计---组件版本号\指针函数\入参void指针2.2 【扩展性】新增组件设计---动态库新增组件2.3 【扩展性】新增组件新增私有功能 设计---扩展参数设置类型枚举2.4 【性能】异步处理性能设计---配置异步通知 / buffer轮转回调通知2.5 【编解码领域】组件间t

runafterhit的博客 1114

OpenMAX/IL: OMX IL 学习笔记【2】- 组件

OpenMAX的重点组成部分就是组件,OpenMAX通过将meida流过程中的各个模块抽象化为组件来进行耦合,在OpenMAX标准下,数据流通过组件来进行传递、处理、显示。在该篇文章里,不需要了解细致的组件内部实现机理,也不需要知道各种方法的代码实现形式(如遇少量代码形式的解析说明可暂时略过,只需要知道该段代码要完成的工作是什么即可),通过阅读该文章,需要知道的是组件是什么?它有什么用处?内部的主要组成结构是怎样的?更加细节性的介绍放到后面的文章里面介绍。 OpenMAX IL spec手册下载:ht.

houxiaoni01的博客 1833

18. Android MultiMedia框架完全解析 - OpenMAX介绍

OpenMAX IL API通过C语言致力于打造可移植媒体组件的阵列平台。这些组件可以是来源(source)、汇出(sink)、编解码器(codec)、过滤器(filter)、分离器(splitter)、混频器(mixers),或任何其他操作。 OpenMAX IL API允许用户加载,控制,连接和卸载各个组件。Android主要的多媒体引擎StageFright是通过IBinder使用Open...

吾皇的博客 3898

OpenMAX编程初识

原文链接导读: 本篇文章对OpenMAX做了一个整体的介绍与概述,说明OpenMAX是什么?可以解决什么问题?用在什么地方?以及为什么要用OpenMAX?这里并不对OpenMAX进行深入介绍(放到接下来的几篇文章里面),希望通过这篇文章可以对OpenMAX有一个大体的了解。

YellowMax 8852

OpenMAX介绍(总括)

一、OpenMax简介     OpenMAX是一个多媒体应用程序的标准。由NVIDIA公司和Khronos™在2006年推出。     它是无授权费的、跨平台的C语言程序接口序列,这些接口对音频、视频、静态图片的常用操作进行封装。     它包括三层,分别是应用层(AI)、集成层(IL)和开发层(DL)。其中IL层已经成为了事实上的多媒体框架标准。嵌入式处理器或者多媒体编解码模块的硬件生产

qq69696698的专栏 1万+
上一篇: FFMPEG优化的帧率估计分析
下一篇: 一文弄懂FFMPEG HLS & 加密HLS
Martyn哥
博客等级 码龄19年 71粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值