diff options
author | Michael Ruprecht <maiku@pidgin.im> | 2009-10-27 21:16:27 +0000 |
---|---|---|
committer | Michael Ruprecht <maiku@pidgin.im> | 2009-10-27 21:16:27 +0000 |
commit | 22e251e7d78be27cc97c7be87e55e590cc7c9da0 (patch) | |
tree | 2e4f51958acfe98b5946493aa74477cbdc5105a2 | |
parent | 759fc18c8b9aab35f0ed1ea6582ea15dc6f3c976 (diff) | |
download | pidgin-22e251e7d78be27cc97c7be87e55e590cc7c9da0.tar.gz |
Move volume setting functionality to the Fs2 media backend.
-rw-r--r-- | libpurple/media/backend-fs2.c | 59 | ||||
-rw-r--r-- | libpurple/media/backend-fs2.h | 4 | ||||
-rw-r--r-- | libpurple/media/media.c | 48 |
3 files changed, 73 insertions, 38 deletions
diff --git a/libpurple/media/backend-fs2.c b/libpurple/media/backend-fs2.c index 87f0f206a2..e87577889a 100644 --- a/libpurple/media/backend-fs2.c +++ b/libpurple/media/backend-fs2.c @@ -1960,3 +1960,62 @@ purple_media_backend_fs2_get_tee(PurpleMediaBackendFs2 *self, g_return_val_if_reached(NULL); } + +void +purple_media_backend_fs2_set_input_volume(PurpleMediaBackendFs2 *self, + const gchar *sess_id, double level) +{ + PurpleMediaBackendFs2Private *priv; + GList *sessions; + + g_return_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self)); + + priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self); + + purple_prefs_set_int("/purple/media/audio/volume/input", level); + + if (sess_id == NULL) + sessions = g_hash_table_get_values(priv->sessions); + else + sessions = g_list_append(NULL, _get_session(self, sess_id)); + + for (; sessions; sessions = g_list_delete_link(sessions, sessions)) { + PurpleMediaBackendFs2Session *session = sessions->data; + + if (session->type & PURPLE_MEDIA_SEND_AUDIO) { + gchar *name = g_strdup_printf("volume_%s", + session->id); + GstElement *volume = gst_bin_get_by_name( + GST_BIN(priv->confbin), name); + g_free(name); + g_object_set(volume, "volume", level/10.0, NULL); + } + } +} + +void +purple_media_backend_fs2_set_output_volume(PurpleMediaBackendFs2 *self, + const gchar *sess_id, const gchar *who, double level) +{ + + PurpleMediaBackendFs2Private *priv; + GList *streams; + + g_return_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self)); + + priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self); + + purple_prefs_set_int("/purple/media/audio/volume/output", level); + + streams = _get_streams(self, sess_id, who); + + for (; streams; streams = g_list_delete_link(streams, streams)) { + PurpleMediaBackendFs2Stream *stream = streams->data; + + if (stream->session->type & PURPLE_MEDIA_RECV_AUDIO + && GST_IS_ELEMENT(stream->volume)) { + g_object_set(stream->volume, "volume", + level/10.0, NULL); + } + } +} diff --git a/libpurple/media/backend-fs2.h b/libpurple/media/backend-fs2.h index 670d6f964b..711b9ce409 100644 --- a/libpurple/media/backend-fs2.h +++ b/libpurple/media/backend-fs2.h @@ -71,6 +71,10 @@ GstElement *purple_media_backend_fs2_get_src( GstElement *purple_media_backend_fs2_get_tee( PurpleMediaBackendFs2 *self, const gchar *sess_id, const gchar *who); +void purple_media_backend_fs2_set_input_volume(PurpleMediaBackendFs2 *self, + const gchar *sess_id, double level); +void purple_media_backend_fs2_set_output_volume(PurpleMediaBackendFs2 *self, + const gchar *sess_id, const gchar *who, double level); /* end tmp */ G_END_DECLS diff --git a/libpurple/media/media.c b/libpurple/media/media.c index 180771a278..0c4fe94fb1 100644 --- a/libpurple/media/media.c +++ b/libpurple/media/media.c @@ -1176,31 +1176,13 @@ void purple_media_set_input_volume(PurpleMedia *media, const gchar *session_id, double level) { #ifdef USE_VV - GList *sessions; - g_return_if_fail(PURPLE_IS_MEDIA(media)); + g_return_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(media->priv->backend)); - purple_prefs_set_int("/purple/media/audio/volume/input", level); - - if (session_id == NULL) - sessions = g_hash_table_get_values(media->priv->sessions); - else - sessions = g_list_append(NULL, - purple_media_get_session(media, session_id)); - - for (; sessions; sessions = g_list_delete_link(sessions, sessions)) { - PurpleMediaSession *session = sessions->data; - - if (session->type & PURPLE_MEDIA_SEND_AUDIO) { - gchar *name = g_strdup_printf("volume_%s", - session->id); - GstElement *volume = gst_bin_get_by_name( - GST_BIN(session->media->priv->confbin), - name); - g_free(name); - g_object_set(volume, "volume", level/10.0, NULL); - } - } + purple_media_backend_fs2_set_input_volume( + PURPLE_MEDIA_BACKEND_FS2( + media->priv->backend), + session_id, level); #endif } @@ -1209,23 +1191,13 @@ void purple_media_set_output_volume(PurpleMedia *media, double level) { #ifdef USE_VV - GList *streams; - g_return_if_fail(PURPLE_IS_MEDIA(media)); + g_return_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(media->priv->backend)); - purple_prefs_set_int("/purple/media/audio/volume/output", level); - - streams = purple_media_get_streams(media, - session_id, participant); - - for (; streams; streams = g_list_delete_link(streams, streams)) { - PurpleMediaStream *stream = streams->data; - - if (stream->session->type & PURPLE_MEDIA_RECV_AUDIO - && GST_IS_ELEMENT(stream->volume)) { - g_object_set(stream->volume, "volume", level/10.0, NULL); - } - } + purple_media_backend_fs2_set_output_volume( + PURPLE_MEDIA_BACKEND_FS2( + media->priv->backend), + session_id, participant, level); #endif } |