gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:48:26 25 4
gpt4 key购买 nike

我正在尝试将我的软件hevc解码器添加到android源代码中。我希望生成libstagefraght.so文件。
我提到过其他类似的问题,对我没有多大帮助。我无法清楚地了解以下问题或参考指南。
1)将编解码器集成到Android多媒体框架中。
2)集成自定义解码器,在Android上播放,同时显示FPS。
3)如何注册OMX核心以添加新解码器。
有人可以帮助我集成一个新的自定义解码器与android的步骤。
现在,我刚刚在softomxplugin.cpp文件中添加了to media_codecs.xml和{ "OMX.google.h265.decoder" , "hevcdec" , "video_decoder.hevc" }
要将新格式添加到android源代码中,还需要编辑其他哪些文件?
哪些函数调用我的解码器源代码(softomxcplugin源文件是否调用我的解码器?).

最佳答案

从您的查询和之前的讨论中,请找到将HEVC组件集成到Android框架中的步骤。因为,您的组件是一个SW组件,所以您必须集成与SoftVideoDecoderOMXComponent相同的组件。
什么是SoftVideoDecoderOMXComponent
在最新版本的AndroidStagefright框架中,使用类似SW的接口将OMX加速编解码器集成到框架中。早些时候,情况并非如此,它本身也有一些挑战。因此,google已经优化了集成策略,并要求所有的SW编解码器都将采用类似SoftOMXComponent的接口。
大多数OMX IL调用都由基类处理,因此,新编解码器组件的实现相对容易,如下所述。
我将以AVC编解码器集成为例提供一个概述。强烈建议读者熟悉OMX IL 1.1.2 specification描述OMX IL视频解码器组件的结构、功能和状态机。
注:HEVC尚未成为OMX IL规范的一部分,因此,建议主要理解组件的结构和功能。
创建SoftHEVC组件
请参阅SoftAVC.h的头文件和相应的源SoftAVC.cpp
您必须实现一组类似的文件。由于一些固有的相似性,强烈建议重用AVC中的总体实现。
SoftHEVC.cpp实施
您必须在SoftHEVC中定义一个SoftHEVC.h组件,它来自SoftVideoDecoderOMXComponent。这将确保基类适当地处理所有OMX调用。
您必须定义profile中的支持level-CodecProfileLevel组合表。
constructor中,您可以以类似的方式初始化大多数变量。由于这是一个视频解码器组件,您必须初始化2个端口,即,inputoutputctor调用initDecoder初始化组件。您还必须为编解码器实现类似的功能。
dtor是自解释的,因此,我将跳过解释。
onQueueFilled是在input端口上为处理提供一个充满一帧比特流数据的缓冲区或为output提供一个可用缓冲区时调用的。这将调用主解码函数H264SwDecDecode。现在,对于第一帧,您可能会遇到与最初初始化的分辨率相比分辨率的变化。这由下一点中描述的两个场景来处理。
您将观察到两个函数handlePortSettingsChangedhandleCropRectEvent。从输出缓冲区的角度来看,这两个事件很重要。handlePortSettingsChanged表示输出缓冲区维度与最初初始化的大小相比发生了变化,因此向用户提供事件回调,以释放当前分配并重新分配。
handleCropRectEvent表示与用户通信的裁剪窗口。通常,这不需要重新分配缓冲区。
drainOneOutputBuffer将解码帧复制到输出端口的缓冲区和解码缓冲区的notify the caller about the availability上。
onQueueFilled中,成功解码后,input buffer which has been consumed is also returned back发送给呼叫者。
其余的函数非常简单,我觉得您可以简单地重用大部分实现。
要注册组件,您必须实现createSoftOMXComponent来创建SoftHEVC组件,如here所示。
因为,您已经处理了注册的组件,所以我将跳过该部分。作为参考,我假设您已经在kComponents中的SoftOMXPlugin数组中注册了组件。另外,由于HEVC不是已知的MIME类型,因此必须注册相同的类型。需要在MediaDefs.cpp中进行更改,您必须引入一个新条目,MEDIA_MIMETYPE_VIDEO_HEVC类似于AVC等现有格式,并支持OMXCodec.cppACodec.cpp中的更改。
通过这些步骤,我认为您应该能够集成SW解码器并实现回放。

关于android - 如何在android源代码中调用我的自定义解码器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22353651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com