专栏中心

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

骁龙820A汽车 ADAS 分享方案介绍—GObject相关解析(二)

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

接着上篇,我们本篇将会对GObject的具体语法做出简介及其分析。

g_object_new函数
blob.png

这个函数是个可变参数的函数, 第一个参数是需要创建的对象的类型, 当使用 g_object_new 来创建对象的时候,这个参数是必须的,同时它还要求这个函数所创建的对象必须是GObject的子对象. 在我们定义自己的对象时, 必须要在系统中注册自己的类型, 这里的系统指的是 glib 的系统, 即 glib 自己维护的一套数据结构. 先说一下第二个参数, 从第二个参数开始, 表示的是 object 的属性, 它们都是成对出现的,如果没有属性需要在创建对象的时候设置, 则第二个参数设置成 NULL. 如果有属性要设置, 那么最后一个参数也要设置成 NULL

Gstimxv4l2src.c架构分析---继承关系

先来看这个头文件,核心结构体是GstImxV4l2SrcGstImxV4l2SrcClass,他俩一起模拟了一个类。分别从这两个结构体中的第一个元素可以看出来它们的父类:GstPushSrc。对象分层结构如下:

blob.png

根据这个分层结构可以看出来,对于GObject系统,类都是从GObject类继承过来的,而对于GStreamer来说,它们是从GstObject开始继承的,就是这样GstObject--->GstElement--->GstBaseSrc--->GstPushSrc--->GstImxV4l2Src这样继承下来的。为什么要这样继承呢?我认为是这样的原因:因为GStreamer中已经包含有有关src相关的类(GstPushSrc),
现在需要实现一个与imx相关的src插件,就直接从 GstPushSrc继承,这样的话,如果对于相同的元素或方法,直接使用GstPushSrc中已经实现的,这样可以减少开发难度。如果对于与imx6相关的元素或方法,就重载所需
的这些方法,让它们与硬件相关。

同样,如果对于sink插件,我们同样直接继承GStreamer中sink相关的类即可,如下图所示:

blob.png

从这个图中可以看出来,sink插件是按照GstObject--->GstElement---
>GstBaseSink--->GstVideoSink--->GstImxV4l2Sink的方式继承下来的。

Gstimxv4l2src.c架构分析---初始化函数

类结构体初始化函数gst_imx_v4l2src_class_init和实例结构体初始
化函数
gst_imx_v4l2src_init
在实例结构体初始化函数gst_imx_v4l2src_init中,它只需要完成这
个类的成员的初始化即可。所以它的实现还是比较简单的,将那些元素赋初值即可。重点是类结构体初始化函数
gst_imx_v4l2src_class_init。在这个函数中,则需要根据结构体的继承关系来重载一些方法。
下面就按照这个继承关系来分析:
GstObject--->GstElement--->GstBaseSrc--->GstPushSrc---
>GstImxV4l2Src

看看它的层次结构:
blob.png

    由于GStreamer相关的结构体都是从这个GstObject中继承过来的,所以上面的层次结构中就包含了所有系统已经设置好的结构体。因为这个GstObject也是从GObject结构体中继承过来的,所以需要重载GObject这个结构体里面的set/get_property函数以及finalize析构函数。

对于struct GObjectClass:
struct GObjectClass {
GTypeClass g_type_class;
/* seldom overidden */
GObject* (*constructor) (GType type,
guint
n_construct_properties,
GObjectConstructParam *construct_properties);
/* overridable methods */
void (*set_property) (GObject     *object,    
guint     property_id,    
const GValue     *value,    
GParamSpec     *pspec);    
void (*get_property) (GObject     *object,    
guint     property_id,    
GValue     *value,    
GParamSpec     *pspec);    
void (*dispose) (GObject     *object);    
void (*finalize) (GObject     *object);    
/* seldom overidden */
void (*dispatch_properties_changed) (GObject     *object,    
guint     n_pspecs,    
GParamSpec     **pspecs);    

/* signals */
void (*notify) (GObject *object,
GParamSpec *pspec);
/* called when done constructing */
void (*constructed) (GObject *object);
};

关于GObject这部分的语法特性我们就分析到这里,在接下来的博客中,我们将回归GstElement,我们来由此继续讨论与Gst相关的特性。



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

关键词:

相关推荐

据报道,美光退出为华为瞄准韩国消费级SSD市场打开了大门

网络与存储 2025-12-15

美国代工厂首个真正制造的3D芯片,采用碳纳米管晶体管和内存集成于单芯片上——未来器件的能量延迟产物性能有望提升多达1000倍

中国价值164亿美元芯片巨型合并破裂,Hygon与Sugon取消交易

嵌入式系统 2025-12-15

POWERPCB中用的BMP2ASC程序

实现Stratix III FPGA和1,067-Mbps DDR3存储器的接口

视频 2010-03-17

中国GPU首次公开募股浪潮加剧:MetaX超越摩尔线索,吸引散户投资者兴趣

嵌入式系统 2025-12-15

美国工程师研发出新型3D芯片,性能超2D芯片一个数量级

单碟存360TB,5D玻璃存储技术启动数据中心落地计划

即插即用信号完整性视频演示

视频 2010-03-17

2026年量产,能取代GPU的QPU要来了?

POWERPCB汉字库

芯原微电子终止收购芯来智融剩余全部股权交易

53年后,惠普于1972年推出的总线标准获得了稳定的Linux驱动——通用接口总线拥有惊人的8 MB/s带宽

三星CEO据报道将就紧张的移动DRAM供应问题,罕见的参加CES会议

网络与存储 2025-12-15

Comparing Stratix III and Virtex-5 Core Power

视频 2010-03-17

TMS320C6472 多核 DSP & EVM 工业及嵌入式应用

视频 2010-03-17

TPA5050 社区视频

视频 2010-03-17

Protel 2000 电路图电路板设计软件

更多 培训课堂
更多 焦点
更多 视频

技术专区