GstMiniObject是一个简单的结构,可以用来实现refcounting(引用计数
)类型。
子类将包含GstMiniObject作为其结构中的第一个成员,然后调用gst_mini_object_init来初始化GstMiniObject区域。
gst_mini_object_ref和gst_mini_object_unref分别递增和递减refcount。当mini-object的refcount达到0时,首先调用dispose函数,当它返回TRUE时,再调用mini-object的free函数。
可以使用gst_mini_object_copy创建副本。
当对象的refcount恰好是1,然后没有父对象或者单个父对象存在的情况下,这个对象本身是可写的,并且gst_mini_object_is_writable返回TRUE。这意味着当前调用者拥有对该对象的唯一引用。gst_mini_object_make_writable将返回对象的可写版本,当refcount不为1时,该版本可能是一个新的副本。
不透明数据(无法直接赋值的数据)可以通过gst_mini_object_set_qdata和gst_mini_object_get_qdata与GstMiniObject关联。数据是特定于特定对象的,不能用gst_mini_object_copy或类似的方法自动复制。
一个weak引用是能够增加和删除的,分别使用gst_mini_object_weak_ref和gst_mini_object_weak_unref
主要要区别GstObject和GstMiniObject。GstObject中有属性、信号,GstMiniObject没有。
typedef struct _GstMiniObject GstMiniObject;
struct _GstMiniObject {
GType type; /* 对象的GType类型 */
/*< public >*/ /* with COW */
gint refcount;
gint lockstate;
guint flags;
GstMiniObjectCopyFunction copy;
GstMiniObjectDisposeFunction dispose;
GstMiniObjectFreeFunction free;
/* < private > */
/* Used to keep track of parents, weak ref notifies and qdata */
guint priv_uint;
gpointer priv_pointer;
};
GstMiniObject
╰──GstBuffer /*缓冲*/
╰──GstCaps /*Pad的相关信息*/
╰──GstMessage /*管道的消息*/
╰──GstEvent
╰──GstQuery