parse: Add boxed type for GstParseContext for gobject-introspection
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Thu, 14 Apr 2011 13:59:28 +0000 (15:59 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Thu, 14 Apr 2011 14:14:01 +0000 (16:14 +0200)
gst/gst.c
gst/gstparse.c
gst/gstparse.h

index adf2239..0e7ac8c 100644 (file)
--- a/gst/gst.c
+++ b/gst/gst.c
@@ -758,6 +758,7 @@ init_post (GOptionContext * context, GOptionGroup * group, gpointer data,
   _gst_buffer_list_initialize ();
   _gst_message_initialize ();
   _gst_tag_initialize ();
+  gst_parse_context_get_type ();
 
   _gst_plugin_initialize ();
 
index cc420ab..80a169e 100644 (file)
 #include "parse/types.h"
 #endif
 
+static void
+_prepend_missing_element (gchar * element, GList ** list)
+{
+  *list = g_list_prepend (*list, g_strdup (element));
+}
+
+static GstParseContext *
+gst_parse_context_copy (const GstParseContext * context)
+{
+  GstParseContext *ret = NULL;
+#ifndef GST_DISABLE_PARSE
+
+  ret = gst_parse_context_new ();
+  if (context) {
+    g_list_foreach (context->missing_elements, (GFunc) _prepend_missing_element,
+        &ret->missing_elements);
+    ret->missing_elements = g_list_reverse (ret->missing_elements);
+  }
+#endif
+  return ret;
+}
+
+GType
+gst_parse_context_get_type (void)
+{
+  static GType type = 0;
+
+  if (G_UNLIKELY (type == 0)) {
+    type = g_boxed_type_register_static ("GstParseContext",
+        (GBoxedCopyFunc) gst_parse_context_copy,
+        (GBoxedFreeFunc) gst_parse_context_free);
+  }
+
+  return type;
+}
+
 /**
  * gst_parse_error_quark:
  *
index b4a9e96..a0f27b3 100644 (file)
@@ -75,6 +75,8 @@ typedef enum
   GST_PARSE_FLAG_FATAL_ERRORS = (1 << 0)
 } GstParseFlags;
 
+#define GST_TYPE_PARSE_CONTEXT (gst_parse_context_get_type())
+
 /**
  * GstParseContext:
  *
@@ -86,6 +88,7 @@ typedef struct _GstParseContext GstParseContext;
 
 /* create, process and free a parse context */
 
+GType             gst_parse_context_get_type (void);
 GstParseContext * gst_parse_context_new (void);
 
 gchar          ** gst_parse_context_get_missing_elements (GstParseContext * context);