Mercurial > pidgin
comparison libpurple/media.c @ 26389:5a7fa2093d1e
Make Finch not crash if someone requests a session with video with you.
author | Mike Ruprecht <maiku@soc.pidgin.im> |
---|---|
date | Tue, 31 Mar 2009 06:23:27 +0000 |
parents | de03cce95e17 |
children | 9c671fc1b351 |
comparison
equal
deleted
inserted
replaced
26388:de03cce95e17 | 26389:5a7fa2093d1e |
---|---|
1135 PurpleMediaSession *session; | 1135 PurpleMediaSession *session; |
1136 GstPad *sinkpad; | 1136 GstPad *sinkpad; |
1137 GstPad *srcpad; | 1137 GstPad *srcpad; |
1138 | 1138 |
1139 g_return_if_fail(PURPLE_IS_MEDIA(media)); | 1139 g_return_if_fail(PURPLE_IS_MEDIA(media)); |
1140 g_return_if_fail(GST_IS_ELEMENT(src)); | |
1140 | 1141 |
1141 session = purple_media_get_session(media, sess_id); | 1142 session = purple_media_get_session(media, sess_id); |
1142 | 1143 |
1143 if (session == NULL) { | 1144 if (session == NULL) { |
1144 purple_debug_warning("media", "purple_media_set_src: trying" | 1145 purple_debug_warning("media", "purple_media_set_src: trying" |
1677 if (!session) { | 1678 if (!session) { |
1678 GError *err = NULL; | 1679 GError *err = NULL; |
1679 GList *codec_conf = NULL; | 1680 GList *codec_conf = NULL; |
1680 gchar *filename = NULL; | 1681 gchar *filename = NULL; |
1681 PurpleMediaSessionType session_type; | 1682 PurpleMediaSessionType session_type; |
1683 GstElement *src = NULL; | |
1682 | 1684 |
1683 session = g_new0(PurpleMediaSession, 1); | 1685 session = g_new0(PurpleMediaSession, 1); |
1684 | 1686 |
1685 session->session = fs_conference_new_session( | 1687 session->session = fs_conference_new_session( |
1686 media->priv->conference, media_type, &err); | 1688 media->priv->conference, media_type, &err); |
1740 0, PURPLE_MEDIA_STATE_NEW, | 1742 0, PURPLE_MEDIA_STATE_NEW, |
1741 session->id, NULL); | 1743 session->id, NULL); |
1742 | 1744 |
1743 session_type = purple_media_from_fs(media_type, | 1745 session_type = purple_media_from_fs(media_type, |
1744 FS_DIRECTION_SEND); | 1746 FS_DIRECTION_SEND); |
1745 purple_media_set_src(media, session->id, | 1747 src = purple_media_manager_get_element( |
1746 purple_media_manager_get_element( | 1748 media->priv->manager, session_type); |
1747 media->priv->manager, session_type)); | 1749 if (!GST_IS_ELEMENT(src)) { |
1750 purple_debug_error("media", | |
1751 "Error creating src for session %s\n", | |
1752 session->id); | |
1753 purple_media_end(media, session->id, NULL); | |
1754 return FALSE; | |
1755 } | |
1756 | |
1757 purple_media_set_src(media, session->id, src); | |
1748 gst_element_set_state(session->src, GST_STATE_PLAYING); | 1758 gst_element_set_state(session->src, GST_STATE_PLAYING); |
1749 | 1759 |
1750 purple_media_manager_create_output_window( | 1760 purple_media_manager_create_output_window( |
1751 media->priv->manager, | 1761 media->priv->manager, |
1752 session->media, | 1762 session->media, |
1937 PurpleMediaStream *stream; | 1947 PurpleMediaStream *stream; |
1938 GError *err = NULL; | 1948 GError *err = NULL; |
1939 | 1949 |
1940 g_return_if_fail(PURPLE_IS_MEDIA(media)); | 1950 g_return_if_fail(PURPLE_IS_MEDIA(media)); |
1941 stream = purple_media_get_stream(media, sess_id, name); | 1951 stream = purple_media_get_stream(media, sess_id, name); |
1952 | |
1953 if (stream == NULL) { | |
1954 purple_debug_error("media", | |
1955 "purple_media_add_remote_candidates: " | |
1956 "couldn't find stream %s %s.\n", | |
1957 sess_id, name); | |
1958 return; | |
1959 } | |
1942 | 1960 |
1943 stream->remote_candidates = g_list_concat(stream->remote_candidates, | 1961 stream->remote_candidates = g_list_concat(stream->remote_candidates, |
1944 purple_media_candidate_list_to_fs(remote_candidates)); | 1962 purple_media_candidate_list_to_fs(remote_candidates)); |
1945 | 1963 |
1946 fs_stream_set_remote_candidates(stream->stream, | 1964 fs_stream_set_remote_candidates(stream->stream, |