Android-video openMAX详解

论坛 期权论坛     
选择匿名的用户   2021-6-2 16:49   267   0
<p>本文参考: <a href="http://zhoujinjian.cc/2018/09/06/Android%20Video%20System%EF%BC%884%EF%BC%89%EF%BC%9AAndroid%20Multimedia%20-%20OpenMax%E5%AE%9E%E7%8E%B0%E5%88%86%E6%9E%90/index.html">http://zhoujinjian.cc/2018/09/06/Android%20Video%20System%EF%BC%884%EF%BC%89%EF%BC%9AAndroid%20Multimedia%20-%20OpenMax%E5%AE%9E%E7%8E%B0%E5%88%86%E6%9E%90/index.html</a></p>
<p><strong>1. 相关代码</strong></p>
<p>/hardware/qcom/media/libstagefrighthw/</p>
<ul><li>QComOMXPlugin.cpp</li><li>QComOMXMetadata.h</li><li>QComOMXPlugin.h</li></ul>
<p>/hardware/qcom/media/mm-video-v4l2/vidc/vdec/src/   (venc也是类似)</p>
<ul><li>omx_swvdec.cpp</li><li>omx_swvdec_utils.cpp</li><li>omx_vdec_extensions.hpp   </li><li>omx_vdec_v4l2.cpp</li></ul>
<p>/hardware/qcom/media/mm-core/inc/</p>
<ul><li>此处很多omx相关头文件</li></ul>
<p>/frameworks/av/media/libstagefright/omx/</p>
<ul><li>SoftOMXPlugin.cpp</li><li>OmxGraphicBufferSource.cpp</li><li>OMXMaster.cpp</li><li>OMXNodeInstance.cpp</li><li>SoftOMXComponent.cpp</li></ul>
<p>/frameworks/av/media/libstagefright/omx/1.0/</p>
<ul><li>Omx.cpp</li><li>WOmxObserver.cpp</li></ul>
<p>/frameworks/av/media/libmedia/omx/1.0/</p>
<ul><li>WOmx.cpp</li><li>WGraphicBufferSource.cpp</li><li>WOmxObserver.cpp</li></ul>
<p><strong>2. OpenMax简介</strong></p>
<p>  OpenMax是一个多媒体应用程序的框架标准。NuPlayer就是用OpenMax来做(codec)编解码的。</p>
<p>  OpenMax实际上分成三个层次,自上而下分别是,OpenMax DL(开发层),OpenMax IL(集成层)和OpenMax AL(应用层)。三个层次的内容分别如下所示:</p>
<blockquote>
<p>第一层:OpenMax DL(Development Layer,开发层)<br> OpenMax DL定义了一个API,它是音频、视频和图像功能的集合。供应商能够在一个新的处理器上实现并优化,然后编解码供应商使用它来编写更广泛的编解码器功能。它包括音频信号的处理功能,如FFT和filter,图像原始处理,如颜色空间转换、视频原始处理,以实现例如MPEG-4、H.264、MP3、AAC和JPEG等编解码器的优化。</p>
<p>第二层:OpenMax IL(Integration Layer,集成层)<br> OpenMax IL作为音频、视频和图像编解码器能与多媒体编解码器交互,并以统一的行为支持组件(例如,资源和皮肤)。这些编解码器或许是软硬件的混合体,对用户是透明的底层接口应用于嵌入式、移动设备。它提供了应用程序和媒体框架,透明的。编解码器供应商必须写私有的或者封闭的接口,集成进移动设备。IL的主要目的是使用特征集合为编解码器提供一个系统抽象,为解决多个不同媒体系统之间轻便性的问题。</p>
<p>第三层:OpenMax AL(Appliction Layer,应用层)<br> OpenMax AL API在应用程序和多媒体中间件之间提供了一个标准化接口,多媒体中间件提供服务以实现被期待的API功能。</p>
</blockquote>
<p>  实际上,openMAX的目的就是做一套标准接口,媒体应用、硬件厂商都遵循同样的接口。硬件厂商提供处理器时和openMAX一起提供,媒体应用只需遵循接口配置就可以应用于不同的硬件芯片,而不用针对各个芯片去适配。</p>
<p>  OpenMax AL和OpenMax DL应用较少,我们一般用的都是OpenMax IL层。</p>
<p><em>2.1 OpenMax IL(集成层)</em></p>
<p><img alt="" class="blockcode" height="598" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-25527611032f20b53daadc4737b20b17.png" width="871"></p>
<p>  图中的虚线中的内容是OpenMax IL层的内容,其主要实现了OpenMax IL中的各个组件(Component)。对下层,OpenMax IL可以调用OpenMax DL层的接口,也可以直接调用各种Codec实现。对上层,OpenMax IL可以给OpenMax AL 层等框架层(Middleware)调用,也可以给应用程序直接调用。</p>
<p>  </p>
<p><strong>3. OpenMax在Android中的使用情况</strong></p>
<p><img alt="" class="blockcode" height="560" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-b8d01ad16737fb84862a7cbf895cb067.png" width="826"></p>
<p> </p>
<ol><li>android系统中只用openmax来做Codec,所以android向上抽象了一层OMXCodec,提供给上层播放器用。播放器中音视频解码器mVideosource、mAudiosource都是OMXCodec的实例。</li><li>OMXCodec通过IOMX 依赖binder机制 获得 OMX服务,OMX服务 才是openmax 在android中的实现。</li><li>OMX把软编解码和硬件编解码统一看作插件的形式管理起来。</li></ol>
<p><strong>4. OpenMax的接口与实现</strong></p>
<p>4.1 OpenMax IL层接口<br>   OpenMax IL层的接口定义由若干个头文件组成,这也是实现它需要实现的内容,位于/frameworks/native/include/media/openmax/下,</p>
<p>它们的基本描述如下所示:</p>
<blockquote>
<p>OMX_Types.h:OpenMax Il的数据类型定义<br> OMX_Core.h:OpenMax IL核心的API<br> OMX_Component.h:OpenMax IL
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP