# HG changeset patch # User Mike Ruprecht # Date 1237758238 0 # Node ID 754be87047dc90c0078ebcc4d521184407dc0272 # Parent dd45432d6b69b2388f5de6ce6392067aa74c88ea Have purple_media_set_output_volume handle all sinks. diff -r dd45432d6b69 -r 754be87047dc libpurple/media.c --- a/libpurple/media.c Sun Mar 22 21:27:43 2009 +0000 +++ b/libpurple/media.c Sun Mar 22 21:43:58 2009 +0000 @@ -2322,10 +2322,27 @@ PurpleMediaStream *stream = streams->data; if (stream->session->type & PURPLE_MEDIA_RECV_AUDIO) { - GstElement *volume = gst_bin_get_by_name( - GST_BIN(stream->sink), - "purpleaudiooutputvolume"); - g_object_set(volume, "volume", level, NULL); + GstElement *tee = stream->tee; + GstIterator *iter = gst_element_iterate_src_pads(tee); + GstPad *sinkpad; + while (gst_iterator_next(iter, (gpointer)&sinkpad) + == GST_ITERATOR_OK) { + GstPad *peer = gst_pad_get_peer(sinkpad); + GstElement *volume; + + if (peer == NULL) { + gst_object_unref(sinkpad); + continue; + } + + volume = gst_bin_get_by_name(GST_BIN( + GST_OBJECT_PARENT(peer)), + "purpleaudiooutputvolume"); + g_object_set(volume, "volume", level, NULL); + gst_object_unref(peer); + gst_object_unref(sinkpad); + } + gst_iterator_free(iter); } } }