summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Ruprecht <maiku@pidgin.im>2009-10-27 21:16:27 +0000
committerMichael Ruprecht <maiku@pidgin.im>2009-10-27 21:16:27 +0000
commit22e251e7d78be27cc97c7be87e55e590cc7c9da0 (patch)
tree2e4f51958acfe98b5946493aa74477cbdc5105a2
parent759fc18c8b9aab35f0ed1ea6582ea15dc6f3c976 (diff)
downloadpidgin-22e251e7d78be27cc97c7be87e55e590cc7c9da0.tar.gz
Move volume setting functionality to the Fs2 media backend.
-rw-r--r--libpurple/media/backend-fs2.c59
-rw-r--r--libpurple/media/backend-fs2.h4
-rw-r--r--libpurple/media/media.c48
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
}