欢迎访问我的blog:http://blog.thinkinside.me
关于android中openmax中hardware decoder的调用中,整合过程比较简单。主要是对OMXCodec的封装进行调用。
这里记录一下碰到的主要的问题:
1 现象:开关几次后程序出现crash。
  几台设备都有此现象,内存大的机器可以开关的次数多些,内存小的机器开关次数少。video尺寸小的可开关的次数多些,video尺寸小的可开关次数少。典型的内存泄露,而且与video decoder的解码buffer有关。经过痛苦万分的无数次打log,发现GraphicBuffer没有释放。
解决方案也简单的可以,从surface中申请的ANativewindow没有被释放。也就是
ANativeWindow_fromSurface()
....
....
ANativeWindow_release()
没有成对调用。
2 现象:播放某些流或者DTV时出现解码错误且不再恢复
  由于我们的framework和OMXCodec的调用方式,导致过早decoder退出。具体些讲,由于我们的封装接口调用OMXCodec的解码是通过read函数调用实现的。read内部会去调用tracksource->read.如果出现数据不足或者错误太多,容易导致tracksource的buffer不够。我们这时候会在tracksource的read给出数据不足的返回值。OMXcodec的封装认为收到这个错误返回值把自己的状态设置为Endofstream,之后就不再解码了。
解决方案:参考AnotherPacketSource。在tracksource read阻塞住,等新的数据填入。
3 现象:解码时卡死
这个是由于调用OMXCodec的调用为阻塞导致的。我们往codec塞数据和decode的调用都是在一个线程中。先塞数据,再decode。如果decode中出现错误数据过多或者数据不足时,按照上一个问题的解决方案,会出现等待新数据输入的过程。可是这时候在framework中decode函数无法返回,也就没有办法输入更多数据了。典型的死锁过程。
解决方案:放弃上一个方案中的阻塞方法。出现数据不足时,给OMXCodec返回一个空的MediaBuffer,并且告知没有错误发生。上面两个问题完美解决。
4 现象:无法使用overlay
使用系统默认播放器时,会有Log表明在SurfaceFlinger做doComposeSurfaces函数时使用的是HWC_OVERLAY。而我们的framework只能使用到HWC_FRAMEBUFFER。对比awesome player对OMXCodec的调用,发现调用的OMXCodec的接口,以及nativewindow的操作并没有太大区别。
最后只好从Java层开始review,终于在 MediaPlayerService::Client::setVideoSurfaceTexture中发现了native_window_api_connect(anw.get(), NATIVE_WINDOW_API_MEDIA);调用。
解决方案: 在申请好nativewindow后调用native_window_api_connect,在release nativewindow前调用native_window_api_disconnect。

android openmax hardware decoder 整合记录的更多相关文章

  1. Lenovo k860i 移植Android 4.4 cm11进度记录【上篇已完结】

    2014.5.16 为了验证一下下载的CM11的源码有没有问题,决定编译一下cm官方支持的机器,手上正好有台nexus7 2012,就拿它为例测试一下在mac os x平台的整个编译过程. 1. 最开 ...

  2. Android NDK 和 OpenCV 整合开发总结(3)

    Android NDK 和 OpenCV 整合开发总结(3) http://hujiaweibujidao.github.io/blog/2013/11/18/android-ndk-and-open ...

  3. Android开发-Android Studio问题以及解决记录

    [Android开发] Android Studio问题以及解决记录   http://blog.csdn.net/niubitianping/article/details/51400721 1.真 ...

  4. 我把阿里、腾讯、字节跳动、美团等Android性能优化实战整合成了一个PDF文档

    安卓开发大军浩浩荡荡,经过近十年的发展,Android技术优化日异月新,如今Android 11.0 已经发布,Android系统性能也已经非常流畅,可以在体验上完全媲美iOS. 但是,到了各大厂商手 ...

  5. S3c6410 平台 Android系统的Wi-Fi调试记录

    硬件平台:S3c6410 操作系统:Android 网卡芯片:GH381(SDIO接口 sdio8688) 1.SDIO驱动 因为是SDIO接口,所以请先保证mmc驱动(代码在“kernel\driv ...

  6. 使用Lucene.net提升网站搜索速度整合记录

    1.随着网站数据量达到500万条的时候,发现SQL数据库如果使用LIKE语句来查询,总是占用CPU很忙,不管怎么优化,速度还是上不来; 2.经过网上收集资料,HUBBLE.net目前虽然做得不错,但需 ...

  7. Lenovo k860i 移植Android 4.4 cm11进度记录【下篇--实时更新中】

    2014.8.24 k860i的cm11的移植在中断了近两三个月之后又開始继续了,进度记录的日志上一篇已经没什么写的了,就完结掉它吧,又一次开一篇日志做下篇好了.近期的战况是,在scue同学的努力之下 ...

  8. Android UI方面的学习记录

    1,android:textAllCaps=“false” android5.0后有可能button的text显示全是大写,设置这个后才能正常显示小写 2,优化listview性能: 1,view重用 ...

  9. Android权限管理知识学习记录

    一.Android权限背景知识 在Android 6.0之前,所申请的权限只需要在AndroidManifest.xml列举就可以了,从而容易导致一些安全隐患,因此,在Android 6.0时,Goo ...

随机推荐

  1. Create My MySQL configuration by Percona

    本文地址:http://www.cnblogs.com/yhLinux/p/4013065.html https://tools.percona.com/ Percona是一款在线自动生成MySQL配 ...

  2. opengles2.0 学习笔记

    - 指定图元顶点数据(亦称顶点属性) 顶点属性有常量顶点属性,和属性数组. 常量指的是所有的顶点都公用此属性.比如单色的三角形,则颜色属性对所有的顶点都一样. 通过命令glVertexAtrrib*f ...

  3. python基础整理笔记(四)

    一. python 打开文件的方法 1. python中使用open函数打开文件,需要设定的参数包括文件的路径和打开的模式.示例如下: f = open('a.txt', 'r+') 2. f为打开文 ...

  4. 解决VS2010链接错误:LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

    网上有多种解决办法,我用最懒的一种,系统是Win7 X86,方法如下: C:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe C:\Prog ...

  5. Linux挂载磁盘

    查看 fdisk –l 挂载 mount 磁盘 目录 参考地址:http://blog.csdn.net/tianlesoftware/article/details/5642883 卸载 umoun ...

  6. Webpack使用教程六(Plugins)

    webpack可以通过插件进行功能扩展.webpack拥有很多的内置插件和第三方插件.下面以webpack自带的插件bannerPlugin为例,说明插件的简单用法.bannerPlugin可以将任何 ...

  7. javascript改变样式(cssFloat,styleFloat)

    昨天遇到一用js改变元素浮动的,当时直接写了 obj.style.float="left";结果没起作用:查了资料后才发现不能这样写,现在整理下几种样式写法 1,直接写css属性的 ...

  8. elixir 高可用系列(三) GenEvent

    概述 GenEvent 是事件处理的通用部分的抽象. 通过 GenEvent ,我们给已有的服务 动态 的添加 事件处理. GenEevent 和 GenServer 的区别 之前已经介绍了 GenS ...

  9. Android View 如何测量

    对于Android View的测量,我们一句话总结为:"给我位置和大小,我就知道您长到那里". 为了让大家更好的理解这个结论,我这里先讲一个日常生活中的小故事:不知道大家玩过&qu ...

  10. ASP.NET的一次奇遇:UserControl写成Control引发的w3wp进程崩溃

    昨天在写代码中一不小心将UserControl写成了Control,将原来应该继承自System.Web.UI.UserControl的用户控件,比如下面的BlogStats: <%@ Cont ...