Mercurial > pidgin
comparison libpurple/media.c @ 26381:6bcf5ad967ea
Make sharing sources between media sessions work.
author | Mike Ruprecht <maiku@soc.pidgin.im> |
---|---|
date | Mon, 30 Mar 2009 22:00:35 +0000 |
parents | d254bc6b4d60 |
children | 5c2d82afe578 |
comparison
equal
deleted
inserted
replaced
26380:b0a9c48b5f69 | 26381:6bcf5ad967ea |
---|---|
1149 | 1149 |
1150 if (session->src) | 1150 if (session->src) |
1151 gst_object_unref(session->src); | 1151 gst_object_unref(session->src); |
1152 session->src = src; | 1152 session->src = src; |
1153 gst_element_set_locked_state(session->src, TRUE); | 1153 gst_element_set_locked_state(session->src, TRUE); |
1154 gst_bin_add(GST_BIN(session->media->priv->confbin), | |
1155 session->src); | |
1156 | 1154 |
1157 session->tee = gst_element_factory_make("tee", NULL); | 1155 session->tee = gst_element_factory_make("tee", NULL); |
1158 gst_bin_add(GST_BIN(session->media->priv->confbin), session->tee); | 1156 gst_bin_add(GST_BIN(session->media->priv->confbin), session->tee); |
1159 gst_element_link(session->src, session->tee); | 1157 |
1158 /* This supposedly isn't necessary, but it silences some warnings */ | |
1159 if (GST_ELEMENT_PARENT(session->media->priv->confbin) | |
1160 == GST_ELEMENT_PARENT(session->src)) { | |
1161 GstPad *pad = gst_element_get_static_pad(session->tee, "sink"); | |
1162 GstPad *ghost = gst_ghost_pad_new(NULL, pad); | |
1163 gst_object_unref(pad); | |
1164 gst_pad_set_active(ghost, TRUE); | |
1165 gst_element_add_pad(session->media->priv->confbin, ghost); | |
1166 } | |
1167 | |
1168 gst_element_link(session->src, session->media->priv->confbin); | |
1160 gst_element_set_state(session->tee, GST_STATE_PLAYING); | 1169 gst_element_set_state(session->tee, GST_STATE_PLAYING); |
1161 | 1170 |
1162 g_object_get(session->session, "sink-pad", &sinkpad, NULL); | 1171 g_object_get(session->session, "sink-pad", &sinkpad, NULL); |
1163 srcpad = gst_element_get_request_pad(session->tee, "src%d"); | 1172 srcpad = gst_element_get_request_pad(session->tee, "src%d"); |
1164 purple_debug_info("media", "connecting pad: %s\n", | 1173 purple_debug_info("media", "connecting pad: %s\n", |
1165 gst_pad_link(srcpad, sinkpad) == GST_PAD_LINK_OK | 1174 gst_pad_link(srcpad, sinkpad) == GST_PAD_LINK_OK |
1166 ? "success" : "failure"); | 1175 ? "success" : "failure"); |
1167 gst_element_set_locked_state(session->src, FALSE); | 1176 gst_element_set_locked_state(session->src, FALSE); |
1177 gst_object_unref(session->src); | |
1168 } | 1178 } |
1169 #endif | 1179 #endif |
1170 | 1180 |
1171 GstElement * | 1181 GstElement * |
1172 purple_media_get_src(PurpleMedia *media, const gchar *sess_id) | 1182 purple_media_get_src(PurpleMedia *media, const gchar *sess_id) |