转载:http://my.unix-center.net/~Simon_fu/?p=748

Android2.2之前版本的视频音频的播放默认支撑库为OpenCore。OpenCore功能非常强大,可以支持多种媒体格式,并支持扩展。当然本文将要简单介绍一下怎样对OpenCore进行视频硬件加速,以提高其视频运行效率。

OpenCore的作用简单的说就是对媒体(音频视频)数据进行解码,并输出到终端设备。音频数据解码和输出比较简单,本文重点介绍视频数据的解码和输出。为了使OpenCore的视频播放支持Android系统,谷歌定义了两套视频输出方案,一种是由硬件厂商实现硬件加速的视频输出,硬件视频输出里面可以调用硬件Overlay模块对输出的视频数据进行硬件混叠,这样输出效率会非常的高;另外一种为谷歌定义的软视频输出,该软视频输出定义为AndroidSurfaceOutput类,这种方案中系统会调用SurfaceFilnger对输出视频数据进行混叠,该混叠为软件混叠,执行效率比较低。请看文件PlayerDriver.cpp中handleSetVideoSurface方法的代码:

    // attempt to load device-specific video MIO
if (mLibHandle != NULL) {
VideoMioFactory f = (VideoMioFactory) ::dlsym(mLibHandle, VIDEO_MIO_FACTORY_NAME);
if (f != NULL) {
mio = f();
}
}
// if no device-specific MIO was created, use the generic one
if (mio == NULL) {
LOGW("Using generic video MIO");
mio = new AndroidSurfaceOutput();
}

可以看出如果mLibHandle不为空,则调用硬件库中的MIO(多媒体IO)工厂方法产生MIO(多媒体IO)。如果mLibHandle为空,则用通用视频MIO(AndroidSurfaceOutput类)。如果你仔细研究AndroidSurfaceOutput类你会发现,其底层调用的SurfaceFlinger来进行视频数据混叠,然后输出的,这部分有兴趣的朋友可以去查看代码。

那么mLibHandle那里初始化的呢?在文件PlayerDriver.cpp中PlayerDriver类的构造函数中有如下代码:

    // running in emulation?
mLibHandle = NULL;
char value[PROPERTY_VALUE_MAX];
if (property_get("ro.kernel.qemu", value, 0)) {
mEmulation = true;
LOGV("Emulation mode - using software codecs");
} else {
// attempt to open h/w specific library
mLibHandle = ::dlopen(MIO_LIBRARY_NAME, RTLD_NOW);
if (mLibHandle != NULL) {
LOGV("OpenCore hardware module loaded");
} else {
LOGV("OpenCore hardware module not found");
}
}

我们可以看出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移植到新硬件平台的朋友会有帮助。如有纰漏之处,请各位朋友指正。

Android多媒体支撑库OpenCore视频硬件加速相关推荐

  1. android虚拟按键挤压布局和硬件加速

    在 别挤压的activity中的清单文件中配置 属性 android:windowSoftInputMode="adjustPan" 在 android studio中默认是开启硬 ...

  2. android 媒体库扫描,如何扫描出Android系统媒体库中视频文件

    Android系统启动时会去扫描系统文件,并将系统支持的视频文件(mp4,3gp,wmv)扫描到媒体库(MediaStore)中,下面代码演示如何获得这些文件的信息: publicstatic Lis ...

  3. Gstreamer中的视频处理与硬件加速

     点击上方"LiveVideoStack"关注我们 ▲扫描图中二维码或点击阅读原文▲了解音视频技术大会更多信息 // 编者按:Gstreamer作为一个比较流行的开源多媒体框架,其 ...

  4. Android 4.0的图形硬件加速及绘制技巧

    [51CTO独家特稿]从Android 3.0开始,Android 2D的绘制流程就设计为能够更好地支持硬件加速.使用GPU的View在Canvas上进行画的操作时都会使用硬件加速.在最新的Andro ...

  5. android 自定义view 硬件加速,Android自定义View(八) -- 硬件加速

    Android自定义View(八) – 硬件加速 今天学习自定义View部分的最有一篇:硬件加速因为无法录制GIF,所以本篇内容基本为原博 本文计划根据HenCoder系列文章进行学习,所以代码风格及 ...

  6. Android中使用硬件加速的技巧

    http://www.uzzf.com/news/2060.html 从Android 3.0开始,Android 2D的绘制流程就设计为能够更好地支持硬件加速.使用GPU的View在Canvas上进 ...

  7. Android 系统(66)---Android硬件加速相关问题总结

    Android硬件加速相关问题总结 从Android 3.0开始就支持硬件加速,充分利用GPU的特性,使得绘制View的时候更加平滑.例如在ListView(GridView)或者WebView中使用 ...

  8. FFMPEG NVIDIA硬件加速总结

    目录 1.NVDIA概述 2.FFmpeg集成到GPU 3.FFmpeg uses Video Codec SDK 4.ffmpeg对NVIDIA GPU的编译步骤 4.1configure命令 4. ...

  9. [FFMPEG硬件加速]nvidia方案

    1.目标 <1>显卡性能参数: <2>方案可行性: 2.平台信息 2.1.查看当前显卡信息 命令:  lspci |grep VGA  信息:  01:00.0 VGA com ...

最新文章

  1. 【20160924】GOCVHelper MFC增强算法(1)
  2. mysql条件填充命令_mysql的简单命令
  3. python算法与数据结构-冒泡排序算法(32)
  4. Mongodb 与 Redis 调教
  5. 简单的选项卡功能实现
  6. 最新章节 第238章 超级计算机的安排,第238章 谁敢动我们十八里铺的人?
  7. 动态添加表格点击事件
  8. oracle客观题题库,oralce题库及答案.doc
  9. JavaWeb——Mybatis逆向工程
  10. 由数据库连接池想到的----处理他人未释放的资源
  11. 中美两本有影响力数理统计学教材的对比及其启示(龚凤乾)
  12. office每次打开都提示重新配置的三种解决方法
  13. 计算机桌面图标乱了,如何解决电脑桌面图标乱跑的问题
  14. tpadmin导入数据库问题
  15. 腾讯、阿里、京东…互联网大厂2022新年礼盒长啥样?我酸了
  16. 【Spring】Spring 知识点整理及补充
  17. 谈如何用SNS做淘宝客
  18. [转帖]国产麒麟系统为何饱受争议?
  19. 有价值项目分享,缺项目可直接搜索(持续更新中)
  20. android右上、右下、左上、左下手势滑动判断

热门文章

  1. 【微信电子书制作软件】名编辑电子杂志大师教程 | 添加图形
  2. PS动作制作科技节海报设计数字人物效果
  3. 抗疫先锋 | PaaSoo 做领先的国际云通讯服务商
  4. Java解析XML数据(三)——强大的XOM之simple-xml解析
  5. 尚学堂Java300答案解析 第三章
  6. jpg转pdf文件转换器注册码
  7. 浏览器提示(KB927917)解决方案
  8. SICP学习笔记及题解---构造过程抽象(一)
  9. Acwing 238. 银河英雄传说
  10. linux Basic