在Jelly Bean之前的Android中用于H.264的硬件加速视频解码

时间:2014-06-04 10:05:16

标签: android android-ndk hardware-acceleration stagefright openmax

我正在开展视频会议项目。我们使用软件编解码器对视频帧进行编码和解码,这样可以在较低分辨率(高达320p)下正常工作。我们计划支持我们的应用程序,以获得高达720p的更高分辨率。我开始知道硬件加速可以很好地完成这项工作。

由于硬件编解码器api媒体编解码器可从Jelly Bean开始使用,我已将其用于编码和解码,并且工作正常。但我的应用程序得到2.3的支持。因此,我需要对30帧/秒的H.264帧进行硬件加速视频解码。

在研究中发现了通过修改舞台惊吓框架来使用OMX编解码器的想法。我读过H.264的硬件解码器可以从2.1获得,而编码器是从3.0开始。我已经浏览了本网站提供的许多文章和问题,并确认我可以继续。

我读过怯场建筑here -architecturehere- stagefright how it works

我读到了OMX编解码器here- use-android-hardware-decoder-with-omxcodec-in-ndk

我遇到了起步问题以及对其实施的一些困惑。我想了解一些信息。

  1. 为了在我的代码中使用OMX编解码器,我应该使用整个android源代码树构建我的项目,还是可以通过添加AOSP源代码中的一些文件来实现(如果是,那就是全部)。
  2. 我应该从头开始实现它的步骤是什么。
  3. 有人可以给我一个关于此

    的指南

    ...谢谢

1 个答案:

答案 0 :(得分:5)

描述OMXCodec在本机层中的集成的最佳示例是命令行实用程序stagefrightGingerBread本身可以观察到here。此示例显示了OMXCodec is created

的方式

需要注意的一些要点:

  1. OMXCodec的输入应建模为MediaSource,因此,您应确保您的应用程序处理此要求。可以在record utility file as DummySource中找到创建基于MediaSource的来源的示例。

  2. 解码器的输入即MediaSource应通过read方法提供数据,因此,您的应用程序应为每{{}}}次呼叫提供单独的帧。

  3. 可以使用read创建解码器以进行输出缓冲区分配。在这种情况下,如果您希望从CPU访问缓冲区,您可能应该参考this query了解更多详细信息。