# HG changeset patch # User Mike Ruprecht # Date 1220239106 0 # Node ID e8b8c6b141960eeef069e04f75b562b2556df6f5 # Parent 3b4b9795f987067b059c957ed15c5c7793d2e8ed Simplified purple_media_get_devices. diff -r 3b4b9795f987 -r e8b8c6b14196 libpurple/media.c --- 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; } diff -r 3b4b9795f987 -r e8b8c6b14196 libpurple/media.h --- a/libpurple/media.h Mon Sep 01 01:58:42 2008 +0000 +++ b/libpurple/media.h Mon Sep 01 03:18:26 2008 +0000 @@ -287,11 +287,11 @@ /** * Enumerates a list of devices. * - * @param element The plugin from which to enumerate devices. + * @param plugin The name of the GStreamer plugin from which to enumerate devices. * * @return The list of enumerated devices. */ -GList *purple_media_get_devices(GstElement *element); +GList *purple_media_get_devices(const gchar *plugin); /** * Gets the device the plugin is currently set to. diff -r 3b4b9795f987 -r e8b8c6b14196 pidgin/gtkprefs.c --- a/pidgin/gtkprefs.c Mon Sep 01 01:58:42 2008 +0000 +++ b/pidgin/gtkprefs.c Mon Sep 01 03:18:26 2008 +0000 @@ -2024,18 +2024,24 @@ /* get a GList of pairs name / device */ static GList * -get_device_items(const GstElement *element, - const GList *devices) +get_device_items(const gchar *plugin) { GList *ret = NULL; - - for(; devices ; devices = devices->next) { + GList *devices = purple_media_get_devices(plugin); + GstElement *element = gst_element_factory_make(plugin, NULL); + + if (element == NULL) + return NULL; + + for(; devices ; devices = g_list_delete_link(devices, devices)) { gchar *name; + g_object_set(G_OBJECT(element), "device", devices->data, NULL); g_object_get(G_OBJECT(element), "device-name", &name, NULL); ret = g_list_append(ret, name); - ret = g_list_append(ret, g_strdup(devices->data)); + ret = g_list_append(ret, devices->data); } + gst_object_unref(element); return ret; } @@ -2122,20 +2128,9 @@ GtkWidget *preview_button = NULL; const char *plugin = value; const char *device = purple_prefs_get_string("/purple/media/video/device"); - GstElement *video = gst_element_factory_make(plugin, NULL); - GList *video_items = NULL; + GList *video_items = get_device_items(plugin); GList *list; - if (video != NULL) { - GList *video_devices = purple_media_get_devices(video); - video_items = get_device_items(video, video_devices); - for(; video_devices; video_devices = g_list_delete_link( - video_devices, video_devices)) { - g_free(video_devices->data); - } - gst_object_unref(video); - } - if (video_items == NULL) { video_items = g_list_prepend(video_items, g_strdup("")); video_items = g_list_prepend(video_items, g_strdup("Default")); @@ -2229,32 +2224,8 @@ GtkSizeGroup *sg, *sg2; const char *plugin = purple_prefs_get_string("/purple/media/video/plugin"); const char *device = purple_prefs_get_string("/purple/media/video/device"); - - GstElement *video = gst_element_factory_make(plugin, NULL); - GstElement *audio = gst_element_factory_make("alsasrc", NULL); - - GList *video_items = NULL; - GList *audio_items = NULL; - - if (video != NULL) { - GList *video_devices = purple_media_get_devices(video); - video_items = get_device_items(video, video_devices); - for(; video_devices; video_devices = g_list_delete_link( - video_devices, video_devices)) { - g_free(video_devices->data); - } - gst_object_unref(video); - } - - if (audio != NULL) { - GList *audio_devices = purple_media_get_devices(audio); - audio_items = get_device_items(audio, audio_devices); - for(; audio_devices; audio_devices = g_list_delete_link( - audio_devices, audio_devices)) { - g_free(audio_devices->data); - } - gst_object_unref(audio); - } + GList *video_items = get_device_items(plugin); + GList *audio_items = get_device_items("alsasrc"); if (video_items == NULL) { video_items = g_list_prepend(video_items, "");