专栏中心

EEPW首页 > 专栏 > 骁龙820A汽车 ADAS 分享方案介绍—GObject相关GstElement简介(三)

骁龙820A汽车 ADAS 分享方案介绍—GObject相关GstElement简介(三)

发布人:车载技术工程师 时间:2018-06-26 来源:工程师 发布文章

在前面的博客中我们分析了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汽车 多媒体处理框架这部分的整体介绍就到这里了。

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

采用数字电位器X9312

电脑小彩灯的制作

ADI在线研讨会:您不知道的关于DAC的五件事

视频 2012-06-18

AI需求给力,AMD营收及指引超预期增长,盘后冲高回落

智能计算 2025-05-07

阿联酋大学研发非侵入式血流监测 采压电传感器实现高精准度

带4Kb SPI EEPROM的CPU监控器X5043,X5045

ASIL D Linux的首次基线安全评估

接口与隔离演示

视频 2012-06-18

光程研创和采钰合作推出新世代硅基Metalens超颖透镜

《欧洲芯片法案》21世纪“皇帝的新衣”?

Μ’NS~1

资源下载 2007-02-28

英特尔宣布实现 MLPerf Client 0.6 基准测试首个全 NPU 支持

Bluetechnix演示即插即用摄像机系统

视频传输“百米”赛道,HDBaseT技术完美胜出

ADI IIC-China 2012现场花絮

视频 2012-06-18

程序书写规范

SemiDynamics详细介绍了一体化 RISC-V NPU

智能计算 2025-05-07

面向5G和GNSS的微型MEMS移动时钟发生器

中国制造2025计划正缩小中西技术差距

EDA/PCB 2025-05-07

过程控制演示

视频 2012-06-18
更多 培训课堂
更多 焦点
更多 视频

技术专区