diff pidgin/gtkmedia.c @ 26152:7be8c88d630c

Have all media sessions use a single pipeline. This temporarily breaks the audio levels.
author Mike Ruprecht <maiku@soc.pidgin.im>
date Sat, 31 Jan 2009 05:19:16 +0000
parents e6d548856fcd
children 1aed9a92b657
line wrap: on
line diff
--- a/pidgin/gtkmedia.c	Fri Jan 30 09:50:01 2009 +0000
+++ b/pidgin/gtkmedia.c	Sat Jan 31 05:19:16 2009 +0000
@@ -227,25 +227,30 @@
 static gboolean
 level_message_cb(GstBus *bus, GstMessage *message, PidginMedia *gtkmedia)
 {
-	const GstStructure *s;
-	gchar *name;
-
 	gdouble rms_db;
 	gdouble percent;
 	const GValue *list;
 	const GValue *value;
 
 	GstElement *src = GST_ELEMENT(GST_MESSAGE_SRC(message));
+	GtkWidget *progress;
 
 	if (message->type != GST_MESSAGE_ELEMENT)
 		return TRUE;
 
-	s = gst_message_get_structure(message);
-
-	if (strcmp(gst_structure_get_name(s), "level"))
+	if (gst_structure_has_name(
+			gst_message_get_structure(message), "level"))
 		return TRUE;
 
-	list = gst_structure_get_value(s, "rms");
+	if (src == gtkmedia->priv->send_level)
+		progress = gtkmedia->priv->send_progress;
+	else if (src == gtkmedia->priv->recv_level)
+		progress = gtkmedia->priv->recv_progress;
+	else
+		return TRUE;
+
+	list = gst_structure_get_value(
+			gst_message_get_structure(message), "rms");
 
 	/* Only bother with the first channel. */
 	value = gst_value_list_get_value(list, 0);
@@ -256,13 +261,7 @@
 	if(percent > 1.0)
 		percent = 1.0;
 
-	name = gst_element_get_name(src);
-	if (!strcmp(name, "sendlevel"))	
-		gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(gtkmedia->priv->send_progress), percent);
-	else
-		gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(gtkmedia->priv->recv_progress), percent);
-
-	g_free(name);
+	gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress), percent);
 	return TRUE;
 }