您现在的位置:首页 > 博客 > Android开发 > 正文
Android利用GPU高清视频播放的分析
http://www.drovik.com/      2013-4-10 21:19:14      来源:Google搜索      点击:
    由于很多人都认为 Android 3.0 以前, Android 只用软件画图, 所以 Android 的人跑出来澄清. 虽然这篇文章已经有点久了, 正好可以呼应我上一篇的贴文. 有兴趣的人可以去看原版 Dianne Hackborn 的 Google+, . 我在这边只摘要几个重点.
    1. Android 从 1.0 版就使用硬件加速窗口的的迭加 (all window compositing to the display has been done with hardware), 当然有的时候会用软件. 下图共包含四层窗口 (windows): Wall Paper, Launcher, Menu, Status Bar. 如果使用者操作 menu, 只有 menu 会用软件重画. 而迭加 (overlay) 的部分和整张画面滑动的效果则是用硬件做.
    2. Android 3.0 开始全部由硬件加速, 4.0 也是一样. 只不过 Android 3.0 会检查 App 在 manifest 里面的 "android:handwareAccelerated="true" 这行 , 以决定是否用硬件加速. 而 Android 4.0 预设就是全部用硬件加速. 这么一来, 原本只需要局部 UI 更新的状况也不再交给比较有效率的软件来执行了; 如此一来导致了一些副作用. 
    3. 其它用硬件加速的缺点包括浪费内存, Imagination Tech 的绘图驱动程序基本上要吃掉 8MB RAM. 剩余的 RAM 变少了, 其它的背景程序就会变慢. 因此, status bar 其实不需要用 OpenGL (GPU) 来画. Android 4.0 就把这部分单独用软件处理.
    4. 苹果的 IOS 怎么做呢? 以浏览器为例, IOS 把网页的画面以 display list 的方式来画, 因此没有什么更新区域的概念, 整个页面都要重画. 这么做的优点是卷动或试放大缩小的时候不会看见破图 (artifact) – 假如画面是分成几个区块 (title) 来分别渲染的话, 就可以会有 artifact. 后者恰好就是 Android 的做法, 它比较能够对抗复杂的页面而不致于变慢, 因此光是用软件就可以在 Nexus S2 画出每秒 60 桢 (60 fps). 作者说他相信 IOS 也是用软件画的.
    5. 为了解决 GPU 不够力的问题, Android 还是有用 HW overlay, 而且把底图 (backgound) 放的比屏幕还大. 这样一来, 使用者卷动画面的时候, 底图就不需要重画, 只是改个坐标 (offset) 而已.
    6. 当我们用 CPU 画 UI 的时候, 多核心并没有帮助. 因为帮一个 app 绘制 UI 的时候, 没办法做平行处理. 这就是为什么 Android 要用 GPU 加速. 在去年年底 Galaxy S2 出来的时候, ARM 的 CPU (大约是 CA9 1GHz) 还不能画到 720×1280 的 UI (60 fps), 因此更细致的分辨率都必须仰赖 GPU 来画.
以下再补充更多的观点:
    7. Android 官网的说法: GPU 擅长放大缩小, 旋转, 平移, 但是不擅长画直线和曲线. 所以要多用其长, 少用其短.
    8. Qualcomm 说 Android 在他们的 Snapdragon 可以用 GPU 做 composition (也就是不用 HW overlay):
如果 graphic UI (user interface) 和 video 没有同步, 那么一般人脑海中的状况是这样:

Qualcomm : video 可以当作图形处理中的纹理 (texture), 所以简单多了.

分享到:
发表评论(1)
1楼 ca88亚洲城官网  发表于  2016-9-20 12:30:54
过来看看本博客,博主记得回访哦 ca88亚洲城官网 http://www.czhlcl.com/
姓名 *
评论内容 *
验证码 *图片看不清?点击重新得到验证码