新闻  |   论坛  |   博客  |   在线研讨会
骁龙820A汽车 ADAS 分享方案介绍—多媒体处理之插件编写篇(一)
车载技术工程师 | 2018-06-26 15:12:04    阅读:744   发布文章

在之前我们介绍了多媒体处理框架相关系统的知识关于插件相关

1)在想要学习编写插件之前,最好会应用程序的编写,理解GstElement, GstPads等等结构体的知识。因为插件编写的过程中,很可能随时会用到这些结构体。
2)学习GObject的语法等知识,理解使用C是怎样模拟实现面向对
象的编程思想,理解怎么使用C语言来实现继承,多态,虚函数等
知识点。
3)学习插件编写手册,理解插件编写的规则。

插件编写的原则及文件目录分析

gstreamer的相关路径,有两个路径,如下所示:
    • /home/ybx/fsl-release-bsp/build-x11/tmp/work/imx6qsabresd-poky-linuxgnueabi/gst1.0-fsl-plugin/4.0.8-r0/gst1.0-fsl-plugins-4.0.8
    • /home/ybx/fsl-release-bsp/build-x11/tmp/work/cortexa9hf-vfp-neon-pokylinux- 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类的插件中,有sinksrc插件,在编写这些插件的过程中需要使用libs/v4l2-core里面提供的库函数。所以,核心就是查看
插件的源码及这些库函数文件。

v4l2为例,先来看看这个文件夹下有几个文件:

    gstimxv4l2allocator.c gstimxv4l2allocator.h     gstimxv4l2plugin.c
    gstimxv4l2sink.c gstimxv4l2sink.h gstimxv4l2src.c     gstimxv4l2src.h
Makefile.am Makefile.in
这几个函数的框架是这样的: gstimxv4l2plugin.c作为主入口函数文件,这个文件中会将v4l2相关的插件,通过plugin_init函数注册到系统中。需要注意的是,通过查看上面几个文件,可以看到有sinksrcallocator相关的文件,但是 allocator并不是插件,在编写sinksrc插件的时候,需要 allocator提供的函数。

首先是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);

之后就是具体查看每一个插件是怎么编写的了。
在编写插件的过程中,官方提供了一个工具来构建这个插件的基本框架,这个按照官方《插件编写手册》里面的操作即可。

关于插件的编写就是我们就介绍到这里,在接下来的博客中,我们将会对插件以及GObject的语法规则进行讨论分析。


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客