新闻  |   论坛  |   博客  |   在线研讨会
骁龙820A汽车 ADAS 分享方案介绍—GObject相关GstElement简介(三)
车载技术工程师 | 2018-06-26 15:54:40    阅读:860   发布文章

在前面的博客中我们分析了GObject相关的语法以及特性,现在我们来由此分析GObject相关GstElement.

GstElement

blob.png

blob.png

这个结构体就是所谓的元件所对应的结构体了。在GStreamer中,最重要的概念就是元件了,与元件有关的概念都在这两个结构体里面有对应的成员。在应用程序的编写过程中,会对这个结构体里面的参数涉及比较多。所以,在初始化函数中,本身这个src插件也是一个元件,所以对于这个结构体,就是设置src元件的pads,元数据(metadata)等。对应的就是gst_element_class_add_pad_template和
gst_element_class_set_static_metadata函数。

GstBaseSrc

• 先来看它的分层结构图,
它继承于GstElement:

blob.png

这个结构体中的方法比较多,而且很多都是需要重载的,所以,在初始化函数中,需要设置这个结构体里面的很多函数。如: get_caps, fixate, set_caps,decide_allocation, start, stop, query。

GstPushSrc

• 结构体和方法如下所示:

blob.png

blob.png

我们的GstImxV4l2Src结构体就是直接继承自这个结构体的。至此,就简单分析完class_init函数,整个.c文件就是围绕这个class_init函数来构建的,或者说,整个.c文件就是来实现这些函数指针的具体内容。

下面以gstimxv4l2src.c文件为例来分析,先来看看gst_imx_v4l2src_init函数:
static void
gst_imx_v4l2src_init (GstImxV4l2Src * v4l2src)
{
v4l2src->device = g_strdup (DEFAULT_DEVICE);
v4l2src->frame_plus = DEFAULT_FRAME_PLUS;
v4l2src->v4l2handle = NULL;
v4l2src->probed_caps = NULL;
v4l2src->old_caps = NULL;
v4l2src->pool = NULL;
v4l2src->allocator = NULL;
v4l2src->gstbuffer_in_v4l2 = NULL;
v4l2src->actual_buf_cnt = 0;
v4l2src->duration = 0;
v4l2src->stream_on = FALSE;
v4l2src->use_my_allocator = FALSE;
v4l2src->use_v4l2_memory = DEFAULT_USE_V4L2SRC_MEMORY;
v4l2src->base_time_org = GST_CLOCK_TIME_NONE;
gst_base_src_set_format (GST_BASE_SRC (v4l2src), GST_FORMAT_TIME);
gst_base_src_set_live (GST_BASE_SRC (v4l2src), TRUE);
g_print("====== IMXV4L2SRC: %s build on %s %s. ======\n", (VERSION),__DATE__,__TIME__); 
}

先来看这个函数,这个函数完成的是实例的初始化,对比对应的.h头文件,可以发现这个函数只是将GstImxV4l2Src这个结构体中的各个元素赋初值

再来看看gst_imx_v4l2src_class_init函数:

static void
gst_imx_v4l2src_class_init (GstImxV4l2SrcClass * klass)
{
GObjectClass *gobject_class;
GstElementClass *element_class;
GstBaseSrcClass *basesrc_class;
GstPushSrcClass *pushsrc_class;
gobject_class = G_OBJECT_CLASS (klass);
element_class = GST_ELEMENT_CLASS (klass);
basesrc_class = GST_BASE_SRC_CLASS (klass);
pushsrc_class = GST_PUSH_SRC_CLASS (klass);
gobject_class->finalize = (GObjectFinalizeFunc) gst_imx_v4l2src_finalize;
gobject_class->set_property = gst_imx_v4l2src_set_property;
gobject_class->get_property = gst_imx_v4l2src_get_property;
gst_imx_v4l2src_install_properties (gobject_class)

这个函数类似于C++里面的构造函数,该初始化过程只进行一次。

关于骁龙820A汽车 多媒体处理框架这部分的整体介绍就到这里了。

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

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