# HG changeset patch # User Mike Ruprecht # Date 1238543583 0 # Node ID 9c671fc1b35190ad37041a01812ac6066e0739ab # Parent 24feaf9cfbf1d8f87cb771f6d850dc10cb4b020c Give more information to element creation functions. This should allow for Picture in Picture support. diff -r 24feaf9cfbf1 -r 9c671fc1b351 finch/gntmedia.c --- a/finch/gntmedia.c Tue Mar 31 06:49:19 2009 +0000 +++ b/finch/gntmedia.c Tue Mar 31 23:53:03 2009 +0000 @@ -390,7 +390,8 @@ } 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 @@ } 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 -r 24feaf9cfbf1 -r 9c671fc1b351 libpurple/media-gst.h --- a/libpurple/media-gst.h Tue Mar 31 06:49:19 2009 +0000 +++ b/libpurple/media-gst.h Tue Mar 31 23:53:03 2009 +0000 @@ -65,7 +65,8 @@ { 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 @@ * @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 -r 24feaf9cfbf1 -r 9c671fc1b351 libpurple/media.c --- a/libpurple/media.c Tue Mar 31 06:49:19 2009 +0000 +++ b/libpurple/media.c Tue Mar 31 23:53:03 2009 +0000 @@ -1630,7 +1630,10 @@ 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 @@ 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 -r 24feaf9cfbf1 -r 9c671fc1b351 libpurple/mediamanager.c --- a/libpurple/mediamanager.c Tue Mar 31 06:49:19 2009 +0000 +++ b/libpurple/mediamanager.c Tue Mar 31 23:53:03 2009 +0000 @@ -353,7 +353,8 @@ 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 @@ 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 @@ 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 @@ 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 -r 24feaf9cfbf1 -r 9c671fc1b351 pidgin/gtkmedia.c --- a/pidgin/gtkmedia.c Tue Mar 31 06:49:19 2009 +0000 +++ b/pidgin/gtkmedia.c Tue Mar 31 23:53:03 2009 +0000 @@ -902,7 +902,8 @@ } 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 @@ } 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 @@ } 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;