diff options
author | Michael Ruprecht <maiku@pidgin.im> | 2009-03-31 23:53:03 +0000 |
---|---|---|
committer | Michael Ruprecht <maiku@pidgin.im> | 2009-03-31 23:53:03 +0000 |
commit | 9ddd743ac6d8c4eb792fca526228bd0991d20728 (patch) | |
tree | 53ed0e792ce87b5b71cc3d7eb3f1215bd26e1c3b | |
parent | b52c3bd55be918d9a2f6aba9c6a63f36111c549a (diff) | |
download | pidgin-9ddd743ac6d8c4eb792fca526228bd0991d20728.tar.gz |
Give more information to element creation functions.
This should allow for Picture in Picture support.
-rw-r--r-- | finch/gntmedia.c | 6 | ||||
-rw-r--r-- | libpurple/media-gst.h | 6 | ||||
-rw-r--r-- | libpurple/media.c | 8 | ||||
-rw-r--r-- | libpurple/mediamanager.c | 11 | ||||
-rw-r--r-- | pidgin/gtkmedia.c | 12 |
5 files changed, 29 insertions, 14 deletions
diff --git a/finch/gntmedia.c b/finch/gntmedia.c index 20f0992bdb..d747d973ae 100644 --- a/finch/gntmedia.c +++ b/finch/gntmedia.c @@ -390,7 +390,8 @@ call_cmd_cb(PurpleConversation *conv, const char *cmd, char **args, } static GstElement * -create_default_audio_src(void) +create_default_audio_src(PurpleMedia *media, + const gchar *session_id, const gchar *participant) { GstElement *bin, *src, *volume; GstPad *pad, *ghost; @@ -416,7 +417,8 @@ create_default_audio_src(void) } static GstElement * -create_default_audio_sink(void) +create_default_audio_sink(PurpleMedia *media, + const gchar *session_id, const gchar *participant) { GstElement *bin, *sink, *volume, *queue; GstPad *pad, *ghost; diff --git a/libpurple/media-gst.h b/libpurple/media-gst.h index 8793039456..23b81296de 100644 --- a/libpurple/media-gst.h +++ b/libpurple/media-gst.h @@ -65,7 +65,8 @@ struct _PurpleMediaElementInfo { const gchar *id; PurpleMediaElementType type; - GstElement *(*create)(void); + GstElement *(*create)(PurpleMedia *media, + const gchar *session_id, const gchar *participant); }; #ifdef __cplusplus @@ -120,7 +121,8 @@ GstElement *purple_media_manager_get_pipeline(PurpleMediaManager *manager); * @param type The type of source/sink to get. */ GstElement *purple_media_manager_get_element(PurpleMediaManager *manager, - PurpleMediaSessionType type); + PurpleMediaSessionType type, PurpleMedia *media, + const gchar *session_id, const gchar *participant); PurpleMediaElementInfo *purple_media_manager_get_element_info( PurpleMediaManager *manager, const gchar *name); diff --git a/libpurple/media.c b/libpurple/media.c index 03d54a8dbd..8349d9895d 100644 --- a/libpurple/media.c +++ b/libpurple/media.c @@ -1630,7 +1630,10 @@ purple_media_src_pad_added_cb(FsStream *fsstream, GstPad *srcpad, stream->src = gst_element_factory_make( "liveadder", NULL); sink = purple_media_manager_get_element(priv->manager, - PURPLE_MEDIA_RECV_AUDIO); + PURPLE_MEDIA_RECV_AUDIO, + stream->session->media, + stream->session->id, + stream->participant); } else if (codec->media_type == FS_MEDIA_TYPE_VIDEO) { stream->src = gst_element_factory_make( "fsfunnel", NULL); @@ -1745,7 +1748,8 @@ purple_media_add_stream(PurpleMedia *media, const gchar *sess_id, session_type = purple_media_from_fs(media_type, FS_DIRECTION_SEND); src = purple_media_manager_get_element( - media->priv->manager, session_type); + media->priv->manager, session_type, + media, session->id, who); if (!GST_IS_ELEMENT(src)) { purple_debug_error("media", "Error creating src for session %s\n", diff --git a/libpurple/mediamanager.c b/libpurple/mediamanager.c index ece3241be9..001cce58bf 100644 --- a/libpurple/mediamanager.c +++ b/libpurple/mediamanager.c @@ -353,7 +353,8 @@ request_pad_unlinked_cb(GstPad *pad, GstPad *peer, gpointer user_data) GstElement * purple_media_manager_get_element(PurpleMediaManager *manager, - PurpleMediaSessionType type) + PurpleMediaSessionType type, PurpleMedia *media, + const gchar *session_id, const gchar *participant) { #ifdef USE_VV GstElement *ret = NULL; @@ -383,7 +384,7 @@ purple_media_manager_get_element(PurpleMediaManager *manager, if (ret == NULL) { GstElement *bin, *fakesink; - ret = info->create(); + ret = info->create(media, session_id, participant); bin = gst_bin_new(info->id); tee = gst_element_factory_make("tee", "tee"); gst_bin_add_many(GST_BIN(bin), ret, tee, NULL); @@ -415,7 +416,7 @@ purple_media_manager_get_element(PurpleMediaManager *manager, gst_pad_set_active(ghost, TRUE); gst_element_add_pad(ret, ghost); } else { - ret = info->create(); + ret = info->create(media, session_id, participant); } if (ret == NULL) @@ -612,7 +613,9 @@ purple_media_manager_create_output_window(PurpleMediaManager *manager, queue = gst_element_factory_make( "queue", NULL); ow->sink = purple_media_manager_get_element( - manager, PURPLE_MEDIA_RECV_VIDEO); + manager, PURPLE_MEDIA_RECV_VIDEO, + ow->media, ow->session_id, + ow->participant); if (participant == NULL) { /* aka this is a preview sink */ diff --git a/pidgin/gtkmedia.c b/pidgin/gtkmedia.c index fc8b97cca3..e21e46cfad 100644 --- a/pidgin/gtkmedia.c +++ b/pidgin/gtkmedia.c @@ -902,7 +902,8 @@ pidgin_media_new_cb(PurpleMediaManager *manager, PurpleMedia *media, } static GstElement * -create_default_video_src(void) +create_default_video_src(PurpleMedia *media, + const gchar *session_id, const gchar *participant) { GstElement *sendbin, *src, *videoscale, *capsfilter; GstPad *pad; @@ -944,13 +945,15 @@ create_default_video_src(void) } static GstElement * -create_default_video_sink(void) +create_default_video_sink(PurpleMedia *media, + const gchar *session_id, const gchar *participant) { return gst_element_factory_make("autovideosink", NULL); } static GstElement * -create_default_audio_src(void) +create_default_audio_src(PurpleMedia *media, + const gchar *session_id, const gchar *participant) { GstElement *bin, *src, *volume, *level; GstPad *pad, *ghost; @@ -979,7 +982,8 @@ create_default_audio_src(void) } static GstElement * -create_default_audio_sink(void) +create_default_audio_sink(PurpleMedia *media, + const gchar *session_id, const gchar *participant) { GstElement *bin, *sink, *volume, *level, *queue; GstPad *pad, *ghost; |