如何在android源代码中调用我的自定义解码器
我正在尝试将我的软件HEVC解码器添加到android源代码中。我希望生成libstagefright.so文件 我提到了其他类似的问题,对我帮助不大。我无法通过以下问题或参考指南清楚地了解情况 1) 将编解码器集成到Android多媒体框架 2) 集成一个自定义解码器,在android上播放,同时显示fps 3) 如何注册OMX内核以添加新解码器 有人能帮我把一个新的自定义解码器和安卓系统集成起来吗 现在,我刚刚在SoftOMXPlugin.cpp文件中添加了media_codecs.xml和如何在android源代码中调用我的自定义解码器,android,android-ndk,android-mediaplayer,android-framework,stagefright,Android,Android Ndk,Android Mediaplayer,Android Framework,Stagefright,我正在尝试将我的软件HEVC解码器添加到android源代码中。我希望生成libstagefright.so文件 我提到了其他类似的问题,对我帮助不大。我无法通过以下问题或参考指南清楚地了解情况 1) 将编解码器集成到Android多媒体框架 2) 集成一个自定义解码器,在android上播放,同时显示fps 3) 如何注册OMX内核以添加新解码器 有人能帮我把一个新的自定义解码器和安卓系统集成起来吗 现在,我刚刚在SoftOMXPlugin.cpp文件中添加了media_codecs.xml和
{“OMX.google.h265.decoder”,“hevcdec”,“video_decoder.hevc”}
要将新格式添加到android源代码中,还需要编辑哪些其他文件?
哪些函数调用我的解码器源代码(softomxcplugin源文件调用我的解码器吗?)从您的查询和之前的讨论中,请找到将
HEVC
组件集成到Android
框架中的步骤。由于您的组件是SW
组件,因此必须将其与SoftVideoDecoderOMXComponent
集成
什么是软视频解码组件
?
在最新版本的Android
Stagefright
框架中,SW
加速编解码器使用类似于OMX
的接口集成到框架中。早些时候,情况并非如此,它本身也存在一些挑战。因此,谷歌简化了集成策略,并规定所有SW
编解码器将采用SoftOMXComponent
类接口
大多数的OMX-IL
调用都是由基类处理的,因此,新编解码器组件的实现相对简单,如下所述
我将以AVC
codec集成为例提供一个概述。强烈建议读者熟悉描述OMX IL
视频解码器组件的结构、功能和状态机的
注意:HEVC
还不是OMX IL
规范的一部分,因此,建议主要了解组件的结构和功能
创建SoftHEVC
组件
请参阅的头文件和相应的源文件
您必须实现一组类似的文件。由于一些固有的相似性,强烈建议重用AVC的整体实现
SoftHEVC.cpp
实现
SoftHEVC.h
中定义一个SoftHEVC
组件,该组件派生自SoftVideoDecoderOMXComponent
。这将确保所有的OMX
调用都由基类适当地处理构造函数中
,您可以以类似的方式初始化大多数变量。由于这是一个视频解码器组件,您必须初始化两个端口,即,输入
和输出
ctor
调用initDecoder
初始化组件。您还必须为编解码器实现类似的功能dtor
是不言自明的,因此,我将跳过对其的解释onQueueFilled
当为input
端口上的处理提供一个填充了相当于一帧的位流数据的缓冲区或为输出提供一个空闲缓冲区时,调用onQueueFilled
。这将调用主解码函数。现在,对于第一帧,与最初初始化的分辨率相比,您可能会遇到分辨率的变化。这由下一点中描述的两个场景处理
handleportsetingschanged
和handleCropRectEvent
。从输出缓冲区的角度来看,这两个事件很重要handlePortSettingsChanged
表示输出缓冲区维度相对于原始初始化大小的变化,因此,向用户提供事件回调以释放当前分配并重新分配。
handleCropRectEvent
表示与用户通信的“裁剪窗口”。通常,这不需要重新分配缓冲区onQueueFilled
中,解码成功后,将发送给调用方createSoftOMXComponent
,它创建SoftHEVC
组件,如图所示SoftOMXPlugin
中注册了数组中的组件。另外,由于HEVC
不是已知的MIME
类型,因此必须注册相同的类型。需要在MediaDefs.cpp
中进行更改,您必须在其中引入一个新条目,MEDIA\u MIMETYPE\u VIDEO\u HEVC
类似于现有格式,如AVC
,并支持在OMXCodec.cpp
和ACodec.cpp
中进行更改
通过这些步骤,我想你应该能够