三、GstObject
1 GstObject基本概念
GstObject为由GStreamer库填充的对象层次树提供了一个root。它目前是GInitiallyUnowned之上的一个简单封装。它是一个抽象类,不能单独使用(不能被实例化)。
GstObject提供了基本的引用计数、父对象功能和锁定。大多数函数只是针对特殊的GStreamer需求进行了扩展,并且可以在其基类GObject中找到相同的名称(例如,g_object_ref变为gst_object_ref)。
由于GstObject派生自GInitiallyUnowned,它还继承了浮动引用。请注意,诸如gst_bin_add和gst_element_add_pad之类的函数会获取浮动引用的所有权。
与GObject实例相比,GstObject添加了一个名称属性。使用gst_object_set_name和gst_object_get_name函数来设置/获取对象的名称。
1.1 继承于GstObject的对象
GObject
╰──GInitiallyUnowned
╰──GstObject
╰──GstAllocator
╰──GstBufferPool
╰──GstBus
╰──GstClock
╰──GstControlBinding
╰──GstControlSource
╰──GstDevice
╰──GstDeviceMonitor
╰──GstDeviceProvider
╰──GstElement
╰──GstPad
╰──GstPadTemplate
╰──GstPlugin
╰──GstPluginFeature
╰──GstRegistry
╰──GstStream
╰──GstStreamCollection
╰──GstTask
╰──GstTaskPool
╰──GstTracer
╰──GstTracerRecord
2 GstObject类型结构
2.1 GstObject类型注册宏定义
显而易见是一个抽象对象,不能够实例化。
/* filename: gstobject.h */
#define GST_TYPE_OBJECT (gst_object_get_type ())
/* filename: gstobject.c */
G_DEFINE_ABSTRACT_TYPE (GstObject, gst_object, G_TYPE_INITIALLY_UNOWNED);
2.2 GstObject类型相关枚举定义
2.2.1 GstObjectFlags
/**
* GstObjectFlags:
* @GST_OBJECT_FLAG_MAY_BE_LEAKED: 即使在调用了 gst_deinit() 之后,该对象也预期会保持活动状态,
* 因此应该被泄漏检测工具忽略。(自版本 1.10 起)
* @GST_OBJECT_FLAG_LAST: 子类可以从这个标志开始添加额外的标志
*
* 一个 gstobject 可能具有的标准标志。
*/
typedef enum
{
GST_OBJECT_FLAG_MAY_BE_LEAKED = (1 << 0),
/* padding */
GST_OBJECT_FLAG_LAST = (1<<4)
} GstObjectFlags;
2.3 GstObject类型相关结构体定义
2.3.1 GstObjectClass类结构体
/* filename: gstobject.h */
struct _GstObjectClass {
GInitiallyUnownedClass parent_class;
const gchar *path_string_separator; /* 对象路径中使用的分隔符 */
/* signals */
void (*deep_notify) (GstObject * object, GstObject * orig, GParamSpec * pspec);
/*< public >*/
/* virtual methods for subclasses */
/*< private >*/
gpointer _gst_reserved[GST_PADDING];
};
2.3.2 GstObject实例结构体
/* filename: gstobject.h */
struct _GstObject {
GInitiallyUnowned object;
/*< public >*/ /* with LOCK */
GMutex lock; /* object LOCK */
gchar *name; /* object name */
GstObject *parent; /* this object's parent, weak ref */
guint32 flags;
/*< private >*/
GList *control_bindings; /* List of GstControlBinding */
guint64 control_rate;
guint64 last_sync;
gpointer _gst_reserved;
};