如何在Android源代码中调用我的自定义解码器

说过了

我正在尝试将我的软件HEVC解码器添加到android源代码中。我希望生成libstagefright.so文件。

我提到过其他类似的问题,对我没有太大帮助。我无法清楚了解以下问题或参考指南。

1)将编解码器集成到Android多媒体框架。

2)集成了自定义解码器,可在android上播放并同时显示fps。

3)如何注册OMX内核以添加新的解码器。

有人可以帮助我将新的自定义解码器与Android集成的步骤。

现在,我刚刚将添加到media_codecs.xml和{ "OMX.google.h265.decoder" , "hevcdec" , "video_decoder.hevc" }SoftOMXPlugin.cpp文件中。

为了将新格式添加到android源代码中,还需要编辑其他哪些文件?哪些函数调用我的解码器源代码(softomxcplugin源文件是否调用我的解码器?)。

加内什

从您的查询和前面的讨论中,请找到将HEVC组件集成Android框架中的步骤由于您的组件是一个SW组件,因此您必须与集成SoftVideoDecoderOMXComponent

什么SoftVideoDecoderOMXComponent

Android Stagefright框架的最新版本中SW使用OMX类似接口将加速编解码器集成到框架中以前并非如此,这本身就存在一些挑战。因此,Google简化了集成策略,并要求所有SW编解码器都将使用SoftOMXComponent类似的界面。

大部分OMX IL调用由基类处理,因此,如下所述,新编解码器组件的实现相对容易。

我将以AVC编解码器集成为例进行概述。强烈建议读者熟悉OMX IL1.1.2规范描述的结构中,一个的功能和状态机OMX IL视频解码器组件。

注意: HEVC尚不是OMX IL规范的一部分,因此,建议主要是为了了解组件的结构和功能。

创建SoftHEVC组件

请参考的头文件SoftAVC.h和相应的源SoftAVC.cpp

您将必须实现一组类似的文件。AVC由于某些固有的相似性,强烈建议重用整个实现

SoftHEVC.cpp 实作

  1. 您将必须定义一个派生自SoftHEVC组件这将确保所有调用均由基类适当地处理。SoftHEVC.hSoftVideoDecoderOMXComponentOMX

  2. 你必须定义的支持表profile-level组合中找到CodecProfileLevel

  3. 在中constructor,您可以类似的方式初始化大多数变量。由于这是视频解码器组件,因此您必须初始化2个端口,即inputoutputctor调用initDecoder以初始化组件。您还必须为编解码器实现类似的功能。

  4. dtor是不言自明的,因此,我将省略其解释。

  5. onQueueFilled当提供一个填充有一帧有价值的比特流数据的缓冲区以供在input端口上处理或提供一个空闲缓冲区时,将调用output这将调用主解码功能H264SwDecDecode现在,对于第一帧,与原始初始化的分辨率相比,您可能会遇到分辨率的变化。下一步将描述两种情况。

  6. 您将观察到2个功能handlePortSettingsChangedhandleCropRectEvent从输出缓冲区的角度来看,这两个事件很重要。handlePortSettingsChanged表示与原始初始化的大小相比输出缓冲区的尺寸发生变化,因此,向用户提供了事件回调以释放当前分配并重新分配该分配。handleCropRectEvent指示已将__cropinging窗口__传达给用户。通常,这不需要缓冲区重新分配。

  7. drainOneOutputBuffer将解码的帧复制到输出端口的缓冲区,并通知调用方解码缓冲区的可用性

  8. 在中onQueueFilled,在成功解码之后,已消耗输入缓冲区也将返回给调用方。

  9. 其余功能非常简单,我觉得您可以重用大部分实现。

  10. 对于组件的注册,就必须实现createSoftOMXComponent其创建SoftHEVC组件如图所示这里

因为您已经处理了注册的组件,所以我跳过了那部分。仅供参考,我想您已经在中的kComponents数组中注册了该组件SoftOMXPlugin另外,由于HEVC不是已知MIME类型,因此您必须注册相同的类型。有将是需要改变MediaDefs.cpp,你将不得不推出新的项目,MEDIA_MIMETYPE_VIDEO_HEVC类似于像现有格式AVC和支持的变化OMXCodec.cppACodec.cpp

通过这些步骤,我认为您应该能够集成您的SW解码器并能够实现播放。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在我的自定义视频编解码器的Android应用程序中使用.so文件创建.apk文件

来自分类Dev

如何在Swift中使用自定义解码器init和递增键解析JSON

来自分类Dev

榆木复杂的自定义JSON解码器

来自分类Dev

自定义 PHP json 解码器

来自分类Dev

字段级自定义解码器

来自分类Dev

如何正确创建自定义文本编解码器?

来自分类Dev

Scala 中的 DSE 5.0 自定义编解码器 - Intellij 无法编译

来自分类Dev

如何在原始源代码中添加自定义NumPy函数?

来自分类Dev

如何在Android中以编程方式完成我的自定义启动器

来自分类Dev

如何在Android中自定义微调器?

来自分类Dev

Swift-自定义解码器没有解码()函数

来自分类Dev

如何使用自定义编解码器将numpy数组另存为字节?

来自分类Dev

如何使用IE9在自定义文本编辑器中查看HTML源代码?

来自分类Dev

如何使用缺少的编解码器从源代码构建 Chromium(在 Windows 上)

来自分类Dev

如何在Jackson的自定义解串器中调用默认解串器?

来自分类Dev

如何在python中构建OneHot解码器

来自分类Dev

自定义注释的使用者在我的源代码中哪里去了?

来自分类Dev

具有自定义信息的视频编解码器

来自分类Dev

如何在Geany文本编辑器的“代码段”中创建自定义日期?

来自分类Dev

如何在Xquery的自定义重写器代码中包含Marklogic rest-api?

来自分类Dev

如何在自定义命令中重用 Laravel 控制器代码

来自分类Dev

如何在控制器中调用$ resource自定义方法

来自分类Dev

自定义插件的源代码中是否指定了目标?

来自分类Dev

如何在自定义验证中调用默认的ServerCertificateValidationCallback?

来自分类Dev

如何在流程中调用自定义方法(WinForms)

来自分类Dev

我如何在adonis /node.js中创建自定义验证器?

来自分类Dev

如何在我的自定义导航控制器中隐藏标签栏?

来自分类Dev

使用自定义对象映射器在Vertx 4.0中注册Jackson编解码器的位置在哪里

来自分类Dev

如何在Team Explorer源代码管理资源管理器子窗口中自定义工具栏?

Related 相关文章

  1. 1

    如何在我的自定义视频编解码器的Android应用程序中使用.so文件创建.apk文件

  2. 2

    如何在Swift中使用自定义解码器init和递增键解析JSON

  3. 3

    榆木复杂的自定义JSON解码器

  4. 4

    自定义 PHP json 解码器

  5. 5

    字段级自定义解码器

  6. 6

    如何正确创建自定义文本编解码器?

  7. 7

    Scala 中的 DSE 5.0 自定义编解码器 - Intellij 无法编译

  8. 8

    如何在原始源代码中添加自定义NumPy函数?

  9. 9

    如何在Android中以编程方式完成我的自定义启动器

  10. 10

    如何在Android中自定义微调器?

  11. 11

    Swift-自定义解码器没有解码()函数

  12. 12

    如何使用自定义编解码器将numpy数组另存为字节?

  13. 13

    如何使用IE9在自定义文本编辑器中查看HTML源代码?

  14. 14

    如何使用缺少的编解码器从源代码构建 Chromium(在 Windows 上)

  15. 15

    如何在Jackson的自定义解串器中调用默认解串器?

  16. 16

    如何在python中构建OneHot解码器

  17. 17

    自定义注释的使用者在我的源代码中哪里去了?

  18. 18

    具有自定义信息的视频编解码器

  19. 19

    如何在Geany文本编辑器的“代码段”中创建自定义日期?

  20. 20

    如何在Xquery的自定义重写器代码中包含Marklogic rest-api?

  21. 21

    如何在自定义命令中重用 Laravel 控制器代码

  22. 22

    如何在控制器中调用$ resource自定义方法

  23. 23

    自定义插件的源代码中是否指定了目标?

  24. 24

    如何在自定义验证中调用默认的ServerCertificateValidationCallback?

  25. 25

    如何在流程中调用自定义方法(WinForms)

  26. 26

    我如何在adonis /node.js中创建自定义验证器?

  27. 27

    如何在我的自定义导航控制器中隐藏标签栏?

  28. 28

    使用自定义对象映射器在Vertx 4.0中注册Jackson编解码器的位置在哪里

  29. 29

    如何在Team Explorer源代码管理资源管理器子窗口中自定义工具栏?

热门标签

归档