diff libpurple/media.c @ 26011:e8b8c6b14196

Simplified purple_media_get_devices.
author Mike Ruprecht <maiku@soc.pidgin.im>
date Mon, 01 Sep 2008 03:18:26 +0000
parents 3b4b9795f987
children 5a774d0817d8
line wrap: on
line diff
--- a/libpurple/media.c	Mon Sep 01 01:58:42 2008 +0000
+++ b/libpurple/media.c	Mon Sep 01 03:18:26 2008 +0000
@@ -756,18 +756,20 @@
 }
 
 GList*
-purple_media_get_devices(GstElement *element)
+purple_media_get_devices(const gchar *plugin)
 {
 	GObjectClass *klass;
 	GstPropertyProbe *probe;
 	const GParamSpec *pspec;
-
+	GstElement *element = gst_element_factory_make(plugin, NULL);
+	GstElementFactory *factory;
 	const gchar *longname = NULL;
+	GList *ret = NULL;
 
-	GstElementFactory *factory =
-		gst_element_get_factory(element);
+	if (element == NULL)
+		return NULL;
 
-	GList *ret = NULL;
+	factory = gst_element_get_factory(element);
 
 	longname = gst_element_factory_get_longname(factory);
 	klass = G_OBJECT_GET_CLASS(element);
@@ -800,6 +802,8 @@
 				
 				ret = g_list_append(ret, g_value_dup_string(device));
 
+				g_object_set(G_OBJECT(element), "device",
+						g_value_get_string(device), NULL);
 				g_object_get(G_OBJECT(element), "device-name", &name, NULL);
 				purple_debug_info("media", "Found source '%s' (%s) - device '%s' (%s)\n",
 						  longname, GST_PLUGIN_FEATURE (factory)->name,
@@ -818,6 +822,7 @@
 		}
 	}
 
+	gst_object_unref(element);
 	return ret;
 }