elementfactory: add gst_element_factory_get_metadata_keys()
authorTim-Philipp Müller <tim.muller@collabora.co.uk>
Sat, 19 May 2012 13:52:29 +0000 (14:52 +0100)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Sat, 19 May 2012 13:52:29 +0000 (14:52 +0100)
API: gst_element_factory_get_metadata_keys()

docs/gst/gstreamer-sections.txt
gst/gstelementfactory.c
gst/gstelementfactory.h
win32/common/libgstreamer.def

index 097fa66..2d3de81 100644 (file)
@@ -814,6 +814,7 @@ gst_element_register
 gst_element_factory_find
 gst_element_factory_get_element_type
 gst_element_factory_get_metadata
+gst_element_factory_get_metadata_keys
 gst_element_factory_get_num_pad_templates
 gst_element_factory_get_uri_type
 gst_element_factory_get_uri_protocols
index b11abfc..a8ef9fe 100644 (file)
@@ -510,6 +510,40 @@ gst_element_factory_get_metadata (GstElementFactory * factory,
 }
 
 /**
+ * gst_element_factory_get_metadata_keys:
+ * @factory,: a #GstElementFactory
+ *
+ * Get the available keys for the metadata on @factory.
+ *
+ * Returns: a %NULL-terminated array of key strings, or %NULL when
+ * there is no metadata. Free with g_strfreev() when no longer needd.
+ */
+gchar **
+gst_element_factory_get_metadata_keys (GstElementFactory * factory)
+{
+  GstStructure *metadata;
+  gchar **arr;
+  gint i, num;
+
+  g_return_val_if_fail (GST_IS_ELEMENT_FACTORY (factory), NULL);
+
+  metadata = (GstStructure *) factory->metadata;
+  if (metadata == NULL)
+    return NULL;
+
+  num = gst_structure_n_fields (metadata);
+  if (num == 0)
+    return NULL;
+
+  arr = g_new (gchar *, num + 1);
+  for (i = 0; i < num; ++i) {
+    arr[i] = g_strdup (gst_structure_nth_field_name (metadata, i));
+  }
+  arr[i] = NULL;
+  return arr;
+}
+
+/**
  * gst_element_factory_get_num_pad_templates:
  * @factory: a #GstElementFactory
  *
index b2dff92..3618f88 100644 (file)
@@ -85,6 +85,7 @@ GstElementFactory *     gst_element_factory_find                (const gchar *na
 GType                   gst_element_factory_get_element_type    (GstElementFactory *factory);
 
 const gchar *           gst_element_factory_get_metadata        (GstElementFactory *factory, const gchar *key);
+gchar **                gst_element_factory_get_metadata_keys   (GstElementFactory *factory);
 
 guint                   gst_element_factory_get_num_pad_templates (GstElementFactory *factory);
 const GList *           gst_element_factory_get_static_pad_templates (GstElementFactory *factory);
index 05ce467..3a510b5 100644 (file)
@@ -338,6 +338,7 @@ EXPORTS
        gst_element_factory_find
        gst_element_factory_get_element_type
        gst_element_factory_get_metadata
+       gst_element_factory_get_metadata_keys
        gst_element_factory_get_num_pad_templates
        gst_element_factory_get_static_pad_templates
        gst_element_factory_get_type