GType gst_mini_object_get_type (void) { static GType _gst_mini_object_type = 0; if (G_UNLIKELY (_gst_mini_object_type == 0)) { GTypeValueTable value_table = { gst_value_mini_object_init, gst_value_mini_object_free, gst_value_mini_object_copy, gst_value_mini_object_peek_pointer, "p", gst_value_mini_object_collect, "p", gst_value_mini_object_lcopy }; GTypeInfo mini_object_info = { sizeof (GstMiniObjectClass), #if 0 gst_mini_object_base_init, gst_mini_object_base_finalize, #else NULL, NULL, #endif gst_mini_object_class_init, NULL, NULL, sizeof (GstMiniObject), 0, (GInstanceInitFunc) gst_mini_object_init, NULL }; static const GTypeFundamentalInfo mini_object_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) }; mini_object_info.value_table = &value_table; _gst_mini_object_type = g_type_fundamental_next (); g_type_register_fundamental (_gst_mini_object_type, "GstMiniObject", &mini_object_info, &mini_object_fundamental_info, G_TYPE_FLAG_ABSTRACT); #ifndef GST_DISABLE_TRACE _gst_mini_object_trace = gst_alloc_trace_register (g_type_name (_gst_mini_object_type)); #endif } return _gst_mini_object_type; }
static void gst_clock_class_init (GstClockClass * klass) { GObjectClass *gobject_class; GstObjectClass *gstobject_class; gobject_class = G_OBJECT_CLASS (klass); gstobject_class = GST_OBJECT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); if (!g_thread_supported ()) g_thread_init (NULL); #ifndef GST_DISABLE_TRACE _gst_clock_entry_trace = gst_alloc_trace_register (GST_CLOCK_ENTRY_TRACE_NAME); #endif gobject_class->dispose = GST_DEBUG_FUNCPTR (gst_clock_dispose); gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_clock_finalize); gobject_class->set_property = GST_DEBUG_FUNCPTR (gst_clock_set_property); gobject_class->get_property = GST_DEBUG_FUNCPTR (gst_clock_get_property); g_object_class_install_property (gobject_class, PROP_STATS, g_param_spec_boolean ("stats", "Stats", "Enable clock stats (unimplemented)", DEFAULT_STATS, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_WINDOW_SIZE, g_param_spec_int ("window-size", "Window size", "The size of the window used to calculate rate and offset", 2, 1024, DEFAULT_WINDOW_SIZE, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_WINDOW_THRESHOLD, g_param_spec_int ("window-threshold", "Window threshold", "The threshold to start calculating rate and offset", 2, 1024, DEFAULT_WINDOW_THRESHOLD, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_TIMEOUT, g_param_spec_uint64 ("timeout", "Timeout", "The amount of time, in nanoseconds, to sample master and slave clocks", 0, G_MAXUINT64, DEFAULT_TIMEOUT, G_PARAM_READWRITE)); }
static void gst_object_class_init (GstObjectClass * klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); #ifndef GST_DISABLE_TRACE _gst_object_trace = gst_alloc_trace_register (g_type_name (GST_TYPE_OBJECT)); #endif gobject_class->set_property = GST_DEBUG_FUNCPTR (gst_object_set_property); gobject_class->get_property = GST_DEBUG_FUNCPTR (gst_object_get_property); g_object_class_install_property (gobject_class, ARG_NAME, g_param_spec_string ("name", "Name", "The name of the object", NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS)); /** * GstObject::parent-set: * @gstobject: a #GstObject * @parent: the new parent * * Emitted when the parent of an object is set. */ gst_object_signals[PARENT_SET] = g_signal_new ("parent-set", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstObjectClass, parent_set), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, GST_TYPE_OBJECT); /** * GstObject::parent-unset: * @gstobject: a #GstObject * @parent: the old parent * * Emitted when the parent of an object is unset. */ gst_object_signals[PARENT_UNSET] = g_signal_new ("parent-unset", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstObjectClass, parent_unset), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, GST_TYPE_OBJECT); #ifndef GST_DISABLE_LOADSAVE /** * GstObject::object-saved: * @gstobject: a #GstObject * @xml_node: the xmlNodePtr of the parent node * * Trigered whenever a new object is saved to XML. You can connect to this * signal to insert custom XML tags into the core XML. */ /* FIXME This should be the GType of xmlNodePtr instead of G_TYPE_POINTER * (if libxml would use GObject) */ gst_object_signals[OBJECT_SAVED] = g_signal_new ("object-saved", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstObjectClass, object_saved), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); klass->restore_thyself = gst_object_real_restore_thyself; #endif /** * GstObject::deep-notify: * @gstobject: a #GstObject * @prop_object: the object that originated the signal * @prop: the property that changed * * The deep notify signal is used to be notified of property changes. It is * typically attached to the toplevel bin to receive notifications from all * the elements contained in that bin. */ gst_object_signals[DEEP_NOTIFY] = g_signal_new ("deep-notify", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE | G_SIGNAL_DETAILED | G_SIGNAL_NO_HOOKS, G_STRUCT_OFFSET (GstObjectClass, deep_notify), NULL, NULL, gst_marshal_VOID__OBJECT_PARAM, G_TYPE_NONE, 2, GST_TYPE_OBJECT, G_TYPE_PARAM); klass->path_string_separator = "/"; klass->lock = g_new0 (GStaticRecMutex, 1); g_static_rec_mutex_init (klass->lock); klass->signal_object = g_object_new (gst_signal_object_get_type (), NULL); /* see the comments at gst_object_dispatch_properties_changed */ gobject_class->dispatch_properties_changed = GST_DEBUG_FUNCPTR (gst_object_dispatch_properties_changed); gobject_class->dispose = gst_object_dispose; gobject_class->finalize = gst_object_finalize; }