gstreamer的相关路径,有两个路径,如下所示:
fsl-release-bsp/build-x11/tmp/work/imx6qsabresd-poky-linux-gnueabi/gst1.0-fsl-plugin/4.0.8-r0/gst1.0-fsl-plugins-4.0.8
fsl-release-bsp/build-x11/tmp/work/cortexa9hf-vfp-neon-poky-linux-gnueabi/gstreamer1.0/1.4.5-r0/gstreamer-1.4.5
先来看第一个目录下面:
aclocal.m4 autom4te.cache config.guess configure.ac COPYING-LGPL-2.1 gstreamer-fsl.pc.in libs Makefile.am NEWS tools
AUTHORS ChangeLog config.sub COPYING depcomp INSTALL ltmain.sh Makefile.in plugins
autogen.sh compile configure COPYING-LGPL-2 ext-includes install-sh m4 missing README
在plugins目录下面是所有的插件,如下:
aiurdemux beepdec compositor mp3enc overlay_sink v4l2 videoconvert vpu
这些目录里面是相关的插件源码。
在libs目录下面,是于插件源码相关的库函数:
allocator device-2d gstimxcommon.h gstsutils Makefile.am Makefile.in overlaycompositionmeta v4l2_core video-overlay video-tsm
在插件编写的过程中,需要使用到libs里面提供的库函数。
比如在v4l2类的插件中,有sink,src插件,在编写这些插件的过程中需要使用libs/v4l2-core里面提供的库函数。所以,核心就是查看插件的源码及这些库函数文件。
以v4l2为例,先来看看这个文件夹下有几个文件:
gstimxv4l2allocator.cgstimxv4l2allocator.h gstimxv4l2plugin.c gstimxv4l2sink.c gstimxv4l2sink.hgstimxv4l2src.c gstimxv4l2src.h Makefile.am Makefile.in
这几个函数的框架是这样的: gstimxv4l2plugin.c作为主入口函数文件,这个文件中会将v4l2相关的插件,通过plugin_init函数注册到系统中。需要注意的是,通过查看上面几个文件,可以看到有sink,src, allocator相关的文件,但是 allocator并不是插件,在编写sink, src插件的时候,需要 allocator提供的函数。
1. 首先是plugin_init函数
在这个函数中,通过gst_element_register函数来向系统中注册插件,想要注册几个插件就需要调用几次这个函数。如:
static gboolean
plugin_init (GstPlugin * plugin)
{
if (!gst_element_register (plugin, "imxv4l2sink", IMX_GST_PLUGIN_RANK,
GST_TYPE_IMX_V4L2SINK))
return FALSE;
if (!gst_element_register (plugin, "imxv4l2src", IMX_GST_PLUGIN_RANK,
GST_TYPE_IMX_V4L2SRC))
return FALSE;
return TRUE;
}
IMX_GST_PLUGIN_DEFINE (imxv4l2, "IMX SoC v4l2-based video source/sink", plugin_init);
之后就是具体查看每一个插件是怎么编写的了。
在编写插件的过程中,官方提供了一个工具来构建这个插件的基本框架,这个按照官方《插件编写手册》里面的操作即可。