comparison libpurple/media.c @ 26463: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
26462:b0a9c48b5f69 26463: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)