From: Tim-Philipp Müller Date: Sat, 19 May 2012 13:52:29 +0000 (+0100) Subject: elementfactory: add gst_element_factory_get_metadata_keys() X-Git-Tag: RELEASE-0.11.92~86 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1ee520790adf91252e8d8e0d8cbec7656f159391;p=platform%2Fupstream%2Fgstreamer.git elementfactory: add gst_element_factory_get_metadata_keys() API: gst_element_factory_get_metadata_keys() --- diff --git a/docs/gst/gstreamer-sections.txt b/docs/gst/gstreamer-sections.txt index 097fa66..2d3de81 100644 --- a/docs/gst/gstreamer-sections.txt +++ b/docs/gst/gstreamer-sections.txt @@ -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 diff --git a/gst/gstelementfactory.c b/gst/gstelementfactory.c index b11abfc..a8ef9fe 100644 --- a/gst/gstelementfactory.c +++ b/gst/gstelementfactory.c @@ -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 * diff --git a/gst/gstelementfactory.h b/gst/gstelementfactory.h index b2dff92..3618f88 100644 --- a/gst/gstelementfactory.h +++ b/gst/gstelementfactory.h @@ -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); diff --git a/win32/common/libgstreamer.def b/win32/common/libgstreamer.def index 05ce467..3a510b5 100644 --- a/win32/common/libgstreamer.def +++ b/win32/common/libgstreamer.def @@ -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