OpenCore视频硬件加速(转)
来源:互联网 发布:网站关键词优化 编辑:程序博客网 时间:2024/05/29 19:34
=============================================================
今天在看opencore的代码时,在函数PlayerDriver::handleSetVideoSurface中有以下内容:
也就是说在创建generic video MIO之前先要尝试加载针对特定硬件的MIO库,上网找了下,有以下解析:
==============================================================
原文地址:http://www.cnmsdn.com/html/201010/1287036493ID8204.html
Android2.2之前版本的视频音频的播放默认支撑库为OpenCore。OpenCore功能非常强大,可以支持多种媒体格式,并支持扩展。当然本文将要简单介绍一下怎样对OpenCore进行视频硬件加速,以提高其视频运行效率。
OpenCore的作用简单的说就是对媒体(音频视频)数据进行解码,并输出到终端设备。音频数据解码和输出比较简单,本文重点介绍视频数据的解码和输出。为了使OpenCore的视频播放支持Android系统,谷歌定义了两套视频输出方案,一种是由硬件厂商实现硬件加速的视频输出,硬件视频输出里面可以调用硬件Overlay模块对输出的视频数据进行硬件混叠,这样输出效率会非常的高;另外一种为谷歌定义的软视频输出,该软视频输出定义为 AndroidSurfaceOutput类,这种方案中系统会调用SurfaceFilnger对输出视频数据进行混叠,该混叠为软件混叠,执行效率比较低。请看文件PlayerDriver.cpp中handleSetVideoSurface方法的代码:
可以看出如果mLibHandle不为空,则调用硬件库中的MIO(多媒体IO)工厂方法产生MIO(多媒体 IO)。如果mLibHandle为空,则用通用视频MIO(AndroidSurfaceOutput类)。如果你仔细研究 AndroidSurfaceOutput类你会发现,其底层调用的SurfaceFlinger来进行视频数据混叠,然后输出的,这部分有兴趣的朋友可以去查看代码。
那么mLibHandle那里初始化的呢?在文件PlayerDriver.cpp中PlayerDriver类的构造函数中有如下代码:
我们可以看出mLibHandle为库MIO_LIBRARY_NAME的句柄。请参考下面的代码:
// library and function name to retrieve device-specific MIOs
static const char* MIO_LIBRARY_NAME = "libopencorehw.so";
static const char* VIDEO_MIO_FACTORY_NAME = "createVideoMio";
现在我们可以非常清楚的看到如果系统中有libopencorehw.so库,则OpenCore将会调用该库中的 createVideoMio函数来创建MIO。由此我们可以知道对OpenCore的视频输出硬件加速,其实就是定义libopencorehw.so 库。
那么libopencorehw.so定义在那里呢?因为libopencorehw.so这个库是和硬件相关的,不同的硬件会有不同的实现,所以这个库可以理解成硬件适配层(HAL)的一部分。请参考《怎样实现Android系统的HAL(硬件适配层)》。由于硬件的千变万化,这里就不给实现的例子了。这样的例子非常多,大部分基于ARM芯片,你可以“依葫芦画瓢”,定制成自己平台的库。
本文简单介绍了一下OpenCore视频输出的硬件加速的原理。搞清楚视频输出硬件加速的原理,对一些进行Android移植到新硬件平台的朋友会有帮助。如有纰漏之处,请各位朋友指正。
- OpenCore视频硬件加速(转)
- Android多媒体支撑库OpenCore视频硬件加速(转)
- (转)Android多媒体支撑库OpenCore视频硬件加速
- Android多媒体支撑库OpenCore视频硬件加速(转)
- Android多媒体支撑库OpenCore视频硬件加速
- Android多媒体支撑库OpenCore视频硬件加速
- Android多媒体支撑库OpenCore视频硬件加速
- Android多媒体支撑库OpenCore视频硬件加速
- android opencore 硬件加速
- 视频工具箱和硬件加速
- OpenCore音视频同步分析
- Intel硬件加速 VS CUDA完胜 视频转码感受
- 【视频处理工程】8、关于DXVA视频解码硬件加速(1):Decoder如何调用IAMVideoAccelerator接口
- OpenCORE
- OpenCore
- 关于Linux下利用GPU对视频进行硬件加速转码的方案
- 显卡硬件加速,导致不能播放视频
- Chrome/Chromium HTML5 video 视频播放硬件加速
- Android Vold 分析(一)--system/vold/main.cpp-----mian函数分析
- 批处理
- 一种保证全局对象只创建一次的方法
- linux 面试
- 腾讯php程序员面试题目,供大家学习一下
- OpenCore视频硬件加速(转)
- JSP学习笔记
- 碎片引起的查询速度变慢
- 怎样实现Android系统的HAL(硬件适配层)(转)
- 序列化、持久化、marshalling
- SQLServer内部原理(转)
- http传送中文字符
- PHP pack() 函数 与 unpack() 函数
- 通过手机键盘将字符串转换为数字的小程序