From 24cad1a91cb8029017cc41a7288ba9a6728b2a9c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Tue, 25 Sep 2012 13:09:38 +0200 Subject: [PATCH] elementfactory: Fail if no valid element factory metadata is set --- gst/gstelement.c | 8 ++++++++ gst/gstelementfactory.c | 24 ++++++++++++++---------- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/gst/gstelement.c b/gst/gstelement.c index bf135a6..c8205df 100644 --- a/gst/gstelement.c +++ b/gst/gstelement.c @@ -1283,6 +1283,10 @@ gst_element_class_set_metadata (GstElementClass * klass, const gchar * description, const gchar * author) { g_return_if_fail (GST_IS_ELEMENT_CLASS (klass)); + g_return_if_fail (longname != NULL && *longname != '\0'); + g_return_if_fail (classification != NULL && *classification != '\0'); + g_return_if_fail (description != NULL && *description != '\0'); + g_return_if_fail (author != NULL && *author != '\0'); gst_structure_id_set ((GstStructure *) klass->metadata, GST_QUARK (ELEMENT_METADATA_LONGNAME), G_TYPE_STRING, longname, @@ -1320,6 +1324,10 @@ gst_element_class_set_static_metadata (GstElementClass * klass, GValue val = G_VALUE_INIT; g_return_if_fail (GST_IS_ELEMENT_CLASS (klass)); + g_return_if_fail (longname != NULL && *longname != '\0'); + g_return_if_fail (classification != NULL && *classification != '\0'); + g_return_if_fail (description != NULL && *description != '\0'); + g_return_if_fail (author != NULL && *author != '\0'); g_value_init (&val, G_TYPE_STRING); diff --git a/gst/gstelementfactory.c b/gst/gstelementfactory.c index c97e8c9..0b1505d 100644 --- a/gst/gstelementfactory.c +++ b/gst/gstelementfactory.c @@ -177,6 +177,15 @@ gst_element_factory_cleanup (GstElementFactory * factory) factory->interfaces = NULL; } +#define CHECK_METADATA_FIELD(klass, name, key) \ + G_STMT_START { \ + const gchar *metafield = gst_element_class_get_metadata (klass, key); \ + if (G_UNLIKELY (metafield == NULL || *metafield == '\0')) { \ + g_warning ("Element factory metadata for '%s' has no valid %s field", name, key); \ + goto detailserror; \ + } \ + } G_STMT_END; + /** * gst_element_register: * @plugin: (allow-none): #GstPlugin to register the element with, or NULL for @@ -233,12 +242,11 @@ gst_element_register (GstPlugin * plugin, const gchar * name, guint rank, /* provide info needed during class structure setup */ g_type_set_qdata (type, __gst_elementclass_factory, factory); klass = GST_ELEMENT_CLASS (g_type_class_ref (type)); -#if 0 - /* FIXME */ - if ((klass->details.longname == NULL) || - (klass->details.klass == NULL) || (klass->details.author == NULL)) - goto detailserror; -#endif + + CHECK_METADATA_FIELD (klass, name, GST_ELEMENT_METADATA_LONGNAME); + CHECK_METADATA_FIELD (klass, name, GST_ELEMENT_METADATA_KLASS); + CHECK_METADATA_FIELD (klass, name, GST_ELEMENT_METADATA_DESCRIPTION); + CHECK_METADATA_FIELD (klass, name, GST_ELEMENT_METADATA_AUTHOR); factory->type = type; factory->metadata = gst_structure_copy ((GstStructure *) klass->metadata); @@ -312,15 +320,11 @@ urierror: return FALSE; } -#if 0 detailserror: { - GST_WARNING_OBJECT (factory, - "The GstElementDetails don't seem to have been set properly"); gst_element_factory_cleanup (factory); return FALSE; } -#endif } /** -- 2.7.4