summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Ruprecht <maiku@pidgin.im>2009-03-31 23:53:03 +0000
committerMichael Ruprecht <maiku@pidgin.im>2009-03-31 23:53:03 +0000
commit9ddd743ac6d8c4eb792fca526228bd0991d20728 (patch)
tree53ed0e792ce87b5b71cc3d7eb3f1215bd26e1c3b
parentb52c3bd55be918d9a2f6aba9c6a63f36111c549a (diff)
downloadpidgin-9ddd743ac6d8c4eb792fca526228bd0991d20728.tar.gz
Give more information to element creation functions.
This should allow for Picture in Picture support.
-rw-r--r--finch/gntmedia.c6
-rw-r--r--libpurple/media-gst.h6
-rw-r--r--libpurple/media.c8
-rw-r--r--libpurple/mediamanager.c11
-rw-r--r--pidgin/gtkmedia.c12
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;