comparison libpurple/media.c @ 26339:b2e290e76998

Remove purple_media_get_sink and the sink variables in the media structures. The concept of a single sink per stream is no longer relevant.
author Mike Ruprecht <maiku@soc.pidgin.im>
date Sun, 22 Mar 2009 21:52:20 +0000
parents 754be87047dc
children 5e605a489d53
comparison
equal deleted inserted replaced
26338:754be87047dc 26339:b2e290e76998
54 GstElement *tee; 54 GstElement *tee;
55 FsSession *session; 55 FsSession *session;
56 56
57 PurpleMediaSessionType type; 57 PurpleMediaSessionType type;
58 58
59 GstElement *sink;
60 gulong window_id; 59 gulong window_id;
61 }; 60 };
62 61
63 struct _PurpleMediaStream 62 struct _PurpleMediaStream
64 { 63 {
65 PurpleMediaSession *session; 64 PurpleMediaSession *session;
66 gchar *participant; 65 gchar *participant;
67 FsStream *stream; 66 FsStream *stream;
68 GstElement *sink;
69 GstElement *src; 67 GstElement *src;
70 GstElement *tee; 68 GstElement *tee;
71 69
72 GList *local_candidates; 70 GList *local_candidates;
73 GList *remote_candidates; 71 GList *remote_candidates;
1161 { 1159 {
1162 PurpleMediaSession *session; 1160 PurpleMediaSession *session;
1163 g_return_val_if_fail(PURPLE_IS_MEDIA(media), NULL); 1161 g_return_val_if_fail(PURPLE_IS_MEDIA(media), NULL);
1164 session = purple_media_get_session(media, sess_id); 1162 session = purple_media_get_session(media, sess_id);
1165 return (session != NULL) ? session->src : NULL; 1163 return (session != NULL) ? session->src : NULL;
1166 }
1167
1168 GstElement *
1169 purple_media_get_sink(PurpleMedia *media, const gchar *sess_id, const gchar *participant)
1170 {
1171 PurpleMediaStream *stream;
1172 g_return_val_if_fail(PURPLE_IS_MEDIA(media), NULL);
1173 stream = purple_media_get_stream(media, sess_id, participant);
1174 return (stream != NULL) ? stream->sink : NULL;
1175 } 1164 }
1176 1165
1177 static PurpleMediaSession * 1166 static PurpleMediaSession *
1178 purple_media_session_from_fs_stream(PurpleMedia *media, FsStream *stream) 1167 purple_media_session_from_fs_stream(PurpleMedia *media, FsStream *stream)
1179 { 1168 {
1750 */ 1739 */
1751 stream->src = gst_element_factory_make( 1740 stream->src = gst_element_factory_make(
1752 "liveadder", NULL); 1741 "liveadder", NULL);
1753 sink = purple_media_manager_get_element(priv->manager, 1742 sink = purple_media_manager_get_element(priv->manager,
1754 PURPLE_MEDIA_RECV_AUDIO); 1743 PURPLE_MEDIA_RECV_AUDIO);
1755 stream->sink = sink;
1756 } else if (codec->media_type == FS_MEDIA_TYPE_VIDEO) { 1744 } else if (codec->media_type == FS_MEDIA_TYPE_VIDEO) {
1757 stream->src = gst_element_factory_make( 1745 stream->src = gst_element_factory_make(
1758 "fsfunnel", NULL); 1746 "fsfunnel", NULL);
1759 sink = gst_element_factory_make( 1747 sink = gst_element_factory_make(
1760 "fakesink", NULL); 1748 "fakesink", NULL);
1770 } 1758 }
1771 1759
1772 sinkpad = gst_element_get_request_pad(stream->src, "sink%d"); 1760 sinkpad = gst_element_get_request_pad(stream->src, "sink%d");
1773 gst_pad_link(srcpad, sinkpad); 1761 gst_pad_link(srcpad, sinkpad);
1774 gst_object_unref(sinkpad); 1762 gst_object_unref(sinkpad);
1775
1776 if (codec->media_type == FS_MEDIA_TYPE_VIDEO &&
1777 stream->sink != NULL) {
1778 gst_bin_add(GST_BIN(priv->confbin), stream->sink);
1779 gst_element_set_state(stream->sink, GST_STATE_PLAYING);
1780 gst_element_link(stream->tee, stream->sink);
1781 }
1782 1763
1783 stream->connected_cb_id = purple_timeout_add(0, 1764 stream->connected_cb_id = purple_timeout_add(0,
1784 (GSourceFunc)purple_media_connected_cb, stream); 1765 (GSourceFunc)purple_media_connected_cb, stream);
1785 } 1766 }
1786 1767