"); //-->
在前面的博客中我们分析了GObject相关的语法以及特性,现在我们来由此分析GObject相关GstElement.
GstElement
这个结构体就是所谓的元件所对应的结构体了。在GStreamer中,最重要的概念就是元件了,与元件有关的概念都在这两个结构体里面有对应的成员。在应用程序的编写过程中,会对这个结构体里面的参数涉及比较多。所以,在初始化函数中,本身这个src插件也是一个元件,所以对于这个结构体,就是设置src元件的pads,元数据(metadata)等。对应的就是gst_element_class_add_pad_template和
gst_element_class_set_static_metadata函数。
GstBaseSrc
• 先来看它的分层结构图,
它继承于GstElement:
这个结构体中的方法比较多,而且很多都是需要重载的,所以,在初始化函数中,需要设置这个结构体里面的很多函数。如: get_caps, fixate, set_caps,decide_allocation, start, stop, query。
GstPushSrc
• 结构体和方法如下所示:
我们的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汽车 多媒体处理框架这部分的整体介绍就到这里了。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。