我正在尝试将我的软件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 IL
1.1.2规范描述的结构中,一个的功能和状态机OMX IL
视频解码器组件。
注意: HEVC
尚不是OMX IL
规范的一部分,因此,建议主要是为了了解组件的结构和功能。
创建SoftHEVC
组件
请参考的头文件SoftAVC.h
和相应的源SoftAVC.cpp
。
您将必须实现一组类似的文件。AVC
由于某些固有的相似性,强烈建议重用整个实现。
SoftHEVC.cpp
实作
您将必须定义一个派生自的SoftHEVC
组件。这将确保所有调用均由基类适当地处理。SoftHEVC.h
SoftVideoDecoderOMXComponent
OMX
你必须定义的支持表profile
-level
组合中找到CodecProfileLevel
。
在中constructor
,您可以类似的方式初始化大多数变量。由于这是视频解码器组件,因此您必须初始化2个端口,即input
和output
。ctor
调用initDecoder
以初始化组件。您还必须为编解码器实现类似的功能。
这dtor
是不言自明的,因此,我将省略其解释。
onQueueFilled
当提供一个填充有一帧有价值的比特流数据的缓冲区以供在input
端口上处理或提供一个空闲缓冲区时,将调用output
。这将调用主解码功能H264SwDecDecode
。现在,对于第一帧,与原始初始化的分辨率相比,您可能会遇到分辨率的变化。下一步将描述两种情况。
您将观察到2个功能handlePortSettingsChanged
和handleCropRectEvent
。从输出缓冲区的角度来看,这两个事件很重要。handlePortSettingsChanged
表示与原始初始化的大小相比输出缓冲区的尺寸发生了变化,因此,向用户提供了事件回调以释放当前分配并重新分配该分配。handleCropRectEvent
指示已将__cropinging窗口__传达给用户。通常,这不需要缓冲区重新分配。
drainOneOutputBuffer
将解码的帧复制到输出端口的缓冲区,并通知调用方解码缓冲区的可用性。
其余功能非常简单,我觉得您可以重用大部分实现。
对于组件的注册,就必须实现createSoftOMXComponent
其创建SoftHEVC
组件如图所示这里。
因为您已经处理了注册的组件,所以我跳过了那部分。仅供参考,我想您已经在中的kComponents
数组中注册了该组件SoftOMXPlugin
。另外,由于HEVC
不是已知MIME
类型,因此您必须注册相同的类型。有将是需要改变MediaDefs.cpp
,你将不得不推出新的项目,MEDIA_MIMETYPE_VIDEO_HEVC
类似于像现有格式AVC
和支持的变化OMXCodec.cpp
和ACodec.cpp
。
通过这些步骤,我认为您应该能够集成您的SW
解码器并能够实现播放。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句