media_codecs.xml
进行注册的。在标准的Android发行版本中,可以在此处找到一个示例media_codecs.xml
。这里。所有音视频组件都被注册为OMX
组件。
1. 编解码器注册
要注册您的视频解码器,您需要在<Decoders>
列表下添加一个新条目。为了确保您的编解码器始终被选中,请确保它在具体MIME
类型的第一条目录中列出。以下是H.264解码器的示例条目。<Decoders>
<MediaCodec name="OMX.ABC.XYZ.H264.DECODER" type="video/avc" >
<Quirk name="requires-allocate-on-input-ports" />
<Quirk name="requires-allocate-on-output-ports" />
</MediaCodec>
<MediaCodec name="OMX.google.h264.decoder" type="video/avc" />
在这里,
a. OMX.ABC.XYZ.H264.Decoder
是你组件的名称。
b. video/avc
是你组件的 MIME
类型。在此示例中,它表示一个AVC / H.264视频解码器。
c. 接下来的两个语句表示你组件的 quirks
或特殊要求。在给定的示例中,requires-allocate-on-input-ports
指示 Stagefright
框架,该组件更喜欢在所有输入端口上分配缓冲区。类似地,另一个 quirk
表示该组件也更愿意在其输出端口上进行分配。要查看系统支持的 quirks 列表,可以参考文件 OMXCodec.cpp 中的函数 OMXCodec::getComponentQuirks
。这些 quirks 转换为标志,然后由框架读取以创建和初始化组件。
在这个示例中,你的 OMX
组件是在 默认 Google 实现的视频解码器之前注册的。
注意:如果你在最终的 media_codecs.xml
文件中尝试此操作,则必须确保该条目被反映。
2. OMX核心注册
为了创建你的组件并确保调用正确的工厂方法,你可能需要向 Stagefright
框架注册你的 OMX
核心。
要注册一个新的核心,你必须创建一个名为 libstagefrighthw.so
的新库,它将位于你的最终系统中的 /system/lib
。这个库必须公开一个 createOMXPlugin
符号,该符号将被 dlsym
查找。
OMX
核心的注册如下:OMXMaster
调用 addVendorPlugin
,后者在内部调用 addPlugin("libstagefrighthw.so")
。在 addPlugin
中,将使用 createOMXPlugin
进行查找,使用它初始化其他函数指针,例如 makeComponentInstance
,destroyComponentInstance
等。
一旦初始化了 OMX
核心,你就可以在 Android 框架中运行自己的组件了。可以在此处找到 OMXMaster
的参考资料:这里。
通过这些更改,你的视频解码器已经集成到了 Android stagefright 框架中。
libstagefrighthw.so
并替换/system/lib
中的库。替换库后,您需要重新启动mediaserver
,然后就可以愉快地使用您的更改了。在下一次整体构建中,更改将自动成为构建系统和system.img
的一部分,无需您采取任何其他步骤。希望这可以帮助到您。 - Ganesh