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;
};

3 GstObject对象相关函数总结