Android Codec 集成和 video Overlay

简介: Codec 集成和video overlay是现在FSL对android 多媒体修改的所有东西,codec library以.so的形式放在prebuilt目录下,没有源文件 。而video overlay的实现主要是使用了FSL的ipu底层库,将视频数据 直接发送到硬件,由硬件进行merge。
Codec 集成和video overlay是现在FSL对android 多媒体修改的所有东西,codec library以.so的形式放在prebuilt目录下,没有源文件 。而video overlay的实现主要是使用了FSL的ipu底层库,将视频数据 直接发送到硬件,由硬件进行merge。
A、Codec 集成

1、codec 集成方法
     首先声明一下俺说的codec集成是指将codec集成到opencore 框架中,网上看有人直接放个库然后通过jni调用,这种的方式有点扯蛋,得自己实现控制,同步,输出等一堆东西,完全是杀鸡取卵,我们就不讨论了。要把一个裸的codec放在opencore框架内有三种方式:
      a、实现一个openmax component 注册在android已存在的omx core上,或者提供自己的omx core
      b、实现一个封装了codec的PVMF 标准的 mio(media input/output)
      c、 实现一个封装codec的PVMF的Node
      三种方式都涉及到opencore一堆BT的术语,首先我们得来消化下这几个术语,不然很难有个直观的了解。因为opencore实在庞大得超出我的能力之外,所以俺只是从整体结构上看了下骨架,我是这么理解的:opencore实际包含两部分:一部分就是command管道,一个就是数据管道;command就是我们的player/author engine, 而数据的流动就是在pvmf 中进行。PVMF下面挂载的的基本组件就是Node,就是实现一个具体功能的单元,比如说file parse, codec, sink等等。前面提到的MIO实际上也是一个特殊的Node,它的功能就是media input/output 。
       engline接受上层的command,控制PVMF下的Node进行工作,而Pvplayer/author是基于engline实现的一个提供给android使用的SDK,这就是Opencore的工作原理 了。

[img][/img]
下载 (67.05 KB)
刚才

        在这里只说第一种方式,就是omx封装的方式,FSL也是采用的这种方式的提供的 HW codec library,并且提供了自己的omx core。换句话就是说FSL实现了整个/external/opencore/codecs_v2这个目录的内容,虽然这个闷骚的公司只是提供了几个.so  。我们要想实现一个完整的omx封装的codec移植得准备下面的知识 :
         /external/opencore/doc/openmax_call_sequences.pdf
         /external/opencore/doc/omx_core_integration_guide.pdf
         http://omxil.sourceforge.net/docs/modules.html
         除了这些spec和guide之外,现成的例子就是android已经封装好的omx core了,也就codecs_v2/omx里面的内容。如果有裸codec,封装成omx从技术 讲应该是不难的,基本过程就是先封装成omx,然后再封装成pv_omx,不过opemax IL层的spec很复杂,要做的工作可能比较多。
         编译好的omx library 我们可以按照FSL的方式放在prebuilt目录下面,并提供相应的配置文件,比如fslomx.cfg,在这里说一下我们封装好的library是如何被调用的。所有编译好的library最后都会被放在/system/lib目录,android会在/etc读取所有的.cfg文件,然后根据 UUID来判断是否为omx封装好的library,如果UUID匹配的话它就会到lib目录中载入相应的library。这里涉及到一个重要的文件 /opencore/external/codecs_v2/omx/omx_mastercore/src /pv_omxmastercore.cpp。由这个文件来负责当存在多个omx core的时候的处理。
         omxmastercore.cpp管理一个优先权的问题,比如说当存在多个omx core,而且每个omx core都具有一个mp3 decode component 时我们应该使用哪一个component进行解码?omxmastercore对这个选择的处理过程是这样的:
          a、根据.cfg的文件名的字母排列顺序载入.cfg文件,也就是说fslomx.cfg会比pvomx.cfg先载入
          b、根据UUID一个一个判断是否为omx封装的library,如果是的话就载入相应的library,并对omx core下所有的component进行注册
          [换句话说就是配置文件名字母靠前的会被先载入,相应component注册也会被注册在前面]

          c、omxmastercore根据应用 程序要求的role(比如mp3)及其要求的配置去注册的component中寻找满足要求的component,一旦找到就选定进行解码
          因此如果你想使用自己的codec来进行解码,必须使你的配置文件名排在前面,或者如果不需要其他的omx core的话干脆删除它的配置文件。我曾经做过一个实验,去掉fsl的codec , 51播视频就会直接卡死,如果去掉android自带的codec视频和音频都无法播放,因为fsl现在只提供了视频的硬解码,当应用程序找不到音频的解码的时候就会直接报错。从侧面来说fsl的 video codec还是很牛B的,它调用了/external/fsl_imx_lib/vpu中的接口。
          因此总的来说实现codec的移植应该是不难的,将来还可以使用偷懒的方法,也就是说只实现相应的component,把它注册到android已有的 omx core中,这个注册是在/external/opencore/codecs_v2/omx/omx_common/src /pv_omxregistry.cpp中实现的。

          除了omx封装外其他两种方式我没仔细看过,Node方式PV还没提供文档,而mio集成方式在doc里面有它的开发文档。

B、Video Overlay
     Android原来是video playback的输出是使用的Isurface接口,也就是说它是用surfaceflinger来实现window的合并的,SW merge必然导致播放的效率低下,而且资源消耗很高。FSL在这里实现了硬件overlay的方式来播放视频,就是使用ipu进行硬件的merge,说穿了就是把vpu解码后的数据直接送到ipu的overlay buffer。
     这里涉及到两个底层的lib,一个就是libipu.so,还一个是libvpu.so,vpu负责解码,而ipu负责显示。在这里要改变的主要是两个地方,首先要获得vpu解码后的数据,这里主要涉及到下面目录中的文件:
      /external/opencore/nodes/pvomxbasedecnode/src/pvmf_omx_basedec_node.h
      /external/opencore/nodes/pvomxbasedecnode/include/pvmf_omx_basedec_node.cpp
      /external/opencore/nodes/pvomxvideodecnode/src/pvmf_omx_
      然后就是将数据送到overlay buffer,这部分修改的内容实际上就是实现了ipu 的一个sequence,这个sequence的内容可以参照:
      /external/fsl_imx_lib/ipu/mxc_ipu_hl_lib.h
      具体的修改内容在下面几个文件:
       /android/android_surface_output.cpp
       /android/android_surface_outpur.h
目录
相关文章
|
1月前
|
移动开发 监控 安全
mPaaS常见问题之Android集成dexPatch热修复运行时候无法正常进行热更新如何解决
mPaaS(移动平台即服务,Mobile Platform as a Service)是阿里巴巴集团提供的一套移动开发解决方案,它包含了一系列移动开发、测试、监控和运营的工具和服务。以下是mPaaS常见问题的汇总,旨在帮助开发者和企业用户解决在使用mPaaS产品过程中遇到的各种挑战
|
1月前
|
Java 开发工具 Android开发
Android mk 集成app
Android mk 集成app
26 5
|
17天前
|
文字识别 Android开发 C++
Tesseract OCR集成Android Studio实现OCR识别
Tesseract OCR集成Android Studio实现OCR识别
29 0
|
1月前
|
安全 物联网 Android开发
构建未来:Android与IoT设备的无缝集成
【5月更文挑战第10天】 在数字化时代的浪潮中,智能设备与互联网的结合日益紧密。本文深入探讨了Android系统如何通过其开放性和灵活性成为连接物联网(IoT)设备的关键枢纽。我们将分析Android平台与IoT设备集成的技术途径,探索它们如何共同塑造智能家居、可穿戴技术以及工业自动化等领域的未来。文中不仅阐述了当前的发展状况,还展望了未来的发展趋势,特别是安全性和隐私保护方面的挑战及对策。
22 1
|
1月前
|
安全 Android开发 iOS开发
构建未来:安卓与iOS的无缝集成技术探索
【5月更文挑战第20天】随着智能设备的普及和技术的不断进步,安卓和iOS两大操作系统之间的界限正在逐渐模糊。本文将深入探讨如何通过最新的API、框架和工具实现安卓与iOS应用的无缝集成,以及这一趋势对开发者和用户的潜在影响。我们将从技术可行性、安全性挑战、用户体验优化等角度出发,分析当前的发展状况,并展望未来可能的技术融合路径。
|
1月前
|
存储 监控 安全
打造高效移动办公环境:Android与iOS平台的集成策略
【5月更文挑战第15天】 在数字化时代,移动办公不再是一种奢望,而是日常工作的必需。随着智能手机和平板电脑的性能提升,Android与iOS设备已成为职场人士的重要工具。本文深入探讨了如何通过技术整合,提高两大移动平台在企业环境中的协同工作能力,重点分析了各自平台上的系统集成策略、安全性考虑以及跨平台协作工具的应用。通过对现有技术的剖析与案例研究,旨在为读者提供一套实用的移动办公解决方案。
|
1月前
|
机器学习/深度学习 人工智能 TensorFlow
安卓中的人工智能:集成机器学习功能
【4月更文挑战第14天】在数字化时代,人工智能与机器学习正驱动安卓平台的技术革新。谷歌的ML Kit和TensorFlow Lite为开发者提供了便捷的集成工具,使得应用能实现图像识别、文本转换等功能,提升用户体验。尽管面临数据隐私和安全性的挑战,但随着技术进步,更强大的AI功能将预示着移动端的未来,为开发者创造更多创新机遇。
|
1月前
|
Android开发
Android 高通平台集成无源码apk示例
Android 高通平台集成无源码apk示例
33 0
|
1月前
|
Android开发
Android 集成vendor下的模块
Android 集成vendor下的模块
18 0
|
1月前
|
Android开发
Android源代码定制:Overlay目录定制|调试Overlay资源是否生效
Android源代码定制:Overlay目录定制|调试Overlay资源是否生效
36 0

热门文章

最新文章