在Android SF框架中,编解码器是通过注册的media_codecs.xml
。在标准 android 发行版中,一个例子media_codecs.xml
可以被找寻到here http://androidxref.com/4.2.2_r1/xref/development/tools/emulator/system/camera/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" />
Where,
a.OMX.ABC.XYZ.H264.Decoder
是你的组件的名称
b. video/avc
is the MIME
您的组件的类型。在这个例子中,它表示一个AVC / H.264视频解码器。
c.接下来的 2 个语句表示quirks
or 特殊要求您的组件。在给定的示例中,requires-allocate-on-input-ports
表示对Stagefright
组件更喜欢在其所有输入端口上分配缓冲区的框架。同样,另一个quirk
通知该组件也更愿意在其输出端口上进行分配。如需支持的列表quirks
系统中可以参考这个函数OMXCodec::getComponentQuirks
in OMXCodec.cpp http://androidxref.com/4.2.2_r1/xref/frameworks/av/media/libstagefright/OMXCodec.cpp#236文件。这些怪癖会转化为标志,然后框架会读取这些标志来创建和初始化组件。
在示例图中,表明您的OMX
组件先于注册default谷歌实现了视频解码器。
NOTE:如果您在终端设备上尝试此操作,则必须确保此条目反映在最终结果中media_codecs.xml
file.
2.OMX核心注册
创建您的组件并确保正确工厂方法被调用,你may have注册您的OMX
核心与Stagefright
框架。
要注册新核心,您必须创建一个名为的新库libstagefrighthw.so
它将位于/system/lib
在你的终端系统中。这个库必须公开一个createOMXPlugin
将要查看的符号dlsym
.
的注册OMX
核心是:OMXMaster
调用addVendorPlugin
它内部调用addPlugin("libstagefrighthw.so")
. In addPlugin
, the createOMXPlugin
将使用其他函数指针来查找makeComponentInstance
, destroyComponentInstance
等被初始化。
一旦OMX
core 已初始化,您已准备好在 android 框架内运行您自己的组件。参考为OMXMaster
可以被找寻到here http://androidxref.com/4.2.2_r1/xref/frameworks/av/media/libstagefright/omx/OMXMaster.cpp#46.
通过这些更改,您的视频解码器已集成到 android stagefright 框架中。