Mercurial > pidgin
diff pidgin/gtkmedia.c @ 26070: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; }