Mercurial > pidgin
comparison libpurple/media.c @ 29106:6e9917e067e6
propagate from branch 'im.pidgin.pidgin' (head f881ba77d0fe70224a938185a5a3675b39520873)
to branch 'im.pidgin.pidgin.next.minor' (head 91d04fec37b328ffc2e552ea14a5a520d27161f2)
author | John Bailey <rekkanoryo@rekkanoryo.org> |
---|---|
date | Wed, 16 Sep 2009 15:41:33 +0000 |
parents | bb06f05c7159 |
children | e0519a0c9f46 c52dbc5503d0 c3b32b027d9d |
comparison
equal
deleted
inserted
replaced
29104:df24cbb0d6e2 | 29106:6e9917e067e6 |
---|---|
2044 | 2044 |
2045 if (gst_structure_has_name(msg->structure, "farsight-error")) { | 2045 if (gst_structure_has_name(msg->structure, "farsight-error")) { |
2046 FsError error_no; | 2046 FsError error_no; |
2047 gst_structure_get_enum(msg->structure, "error-no", | 2047 gst_structure_get_enum(msg->structure, "error-no", |
2048 FS_TYPE_ERROR, (gint*)&error_no); | 2048 FS_TYPE_ERROR, (gint*)&error_no); |
2049 /* | 2049 switch (error_no) { |
2050 * Unknown CName is only a problem for the | 2050 case FS_ERROR_NO_CODECS: |
2051 * multicast transmitter which isn't used. | 2051 purple_media_error(media, _("No codecs found. Install some GStreamer codecs found in GStreamer plugins packages.")); |
2052 */ | 2052 purple_media_end(media, NULL, NULL); |
2053 if (error_no != FS_ERROR_UNKNOWN_CNAME) | 2053 break; |
2054 purple_debug_error("media", "farsight-error: %i: %s\n", error_no, | 2054 case FS_ERROR_NO_CODECS_LEFT: |
2055 gst_structure_get_string(msg->structure, "error-msg")); | 2055 purple_media_error(media, _("No codecs left. Your codec preferences in fs-codecs.conf are too strict.")); |
2056 purple_media_end(media, NULL, NULL); | |
2057 break; | |
2058 case FS_ERROR_UNKNOWN_CNAME: | |
2059 /* | |
2060 * Unknown CName is only a problem for the | |
2061 * multicast transmitter which isn't used. | |
2062 * It is also deprecated. | |
2063 */ | |
2064 break; | |
2065 default: | |
2066 purple_debug_error("media", "farsight-error: %i: %s\n", error_no, | |
2067 gst_structure_get_string(msg->structure, "error-msg")); | |
2068 break; | |
2069 } | |
2070 | |
2071 if (FS_ERROR_IS_FATAL(error_no)) { | |
2072 purple_media_error(media, _("A non-recoverable Farsight2 error has occurred.")); | |
2073 purple_media_end(media, NULL, NULL); | |
2074 } | |
2056 } else if (gst_structure_has_name(msg->structure, | 2075 } else if (gst_structure_has_name(msg->structure, |
2057 "farsight-new-local-candidate")) { | 2076 "farsight-new-local-candidate")) { |
2058 FsStream *stream = g_value_get_object(gst_structure_get_value(msg->structure, "stream")); | 2077 FsStream *stream = g_value_get_object(gst_structure_get_value(msg->structure, "stream")); |
2059 FsCandidate *local_candidate = g_value_get_boxed(gst_structure_get_value(msg->structure, "candidate")); | 2078 FsCandidate *local_candidate = g_value_get_boxed(gst_structure_get_value(msg->structure, "candidate")); |
2060 PurpleMediaSession *session = purple_media_session_from_fs_stream(media, stream); | 2079 PurpleMediaSession *session = purple_media_session_from_fs_stream(media, stream); |
2132 case GST_MESSAGE_ERROR: { | 2151 case GST_MESSAGE_ERROR: { |
2133 GstElement *element = GST_ELEMENT(GST_MESSAGE_SRC(msg)); | 2152 GstElement *element = GST_ELEMENT(GST_MESSAGE_SRC(msg)); |
2134 GstElement *lastElement = NULL; | 2153 GstElement *lastElement = NULL; |
2135 while (!GST_IS_PIPELINE(element)) { | 2154 while (!GST_IS_PIPELINE(element)) { |
2136 if (element == media->priv->confbin) { | 2155 if (element == media->priv->confbin) { |
2137 purple_media_error("media", _("Conference error.")); | 2156 purple_media_error(media, _("Conference error")); |
2138 purple_media_end(media, NULL, NULL); | 2157 purple_media_end(media, NULL, NULL); |
2139 break; | 2158 break; |
2140 } | 2159 } |
2141 lastElement = element; | 2160 lastElement = element; |
2142 element = GST_ELEMENT_PARENT(element); | 2161 element = GST_ELEMENT_PARENT(element); |
2146 for (; sessions; sessions = g_list_delete_link(sessions, sessions)) { | 2165 for (; sessions; sessions = g_list_delete_link(sessions, sessions)) { |
2147 PurpleMediaSession *session = sessions->data; | 2166 PurpleMediaSession *session = sessions->data; |
2148 | 2167 |
2149 if (session->src == lastElement) { | 2168 if (session->src == lastElement) { |
2150 if (session->type & PURPLE_MEDIA_AUDIO) | 2169 if (session->type & PURPLE_MEDIA_AUDIO) |
2151 purple_media_error(media, _("Error with your microphone.")); | 2170 purple_media_error(media, _("Error with your microphone")); |
2152 else | 2171 else |
2153 purple_media_error(media, _("Error with your webcam.")); | 2172 purple_media_error(media, _("Error with your webcam")); |
2154 purple_media_end(media, NULL, NULL); | 2173 purple_media_end(media, NULL, NULL); |
2155 break; | 2174 break; |
2156 } | 2175 } |
2157 } | 2176 } |
2158 g_list_free(sessions); | 2177 g_list_free(sessions); |
2257 PurpleMediaStream *stream = streams->data; | 2276 PurpleMediaStream *stream = streams->data; |
2258 g_object_set(G_OBJECT(stream->stream), "direction", | 2277 g_object_set(G_OBJECT(stream->stream), "direction", |
2259 purple_media_to_fs_stream_direction( | 2278 purple_media_to_fs_stream_direction( |
2260 stream->session->type), NULL); | 2279 stream->session->type), NULL); |
2261 stream->accepted = TRUE; | 2280 stream->accepted = TRUE; |
2281 | |
2282 if (stream->remote_candidates != NULL) { | |
2283 GError *err = NULL; | |
2284 fs_stream_set_remote_candidates(stream->stream, | |
2285 stream->remote_candidates, &err); | |
2286 | |
2287 if (err) { | |
2288 purple_debug_error("media", "Error adding remote" | |
2289 " candidates: %s\n", err->message); | |
2290 g_error_free(err); | |
2291 } | |
2292 } | |
2262 } | 2293 } |
2263 } else if (local == TRUE && (type == PURPLE_MEDIA_INFO_MUTE || | 2294 } else if (local == TRUE && (type == PURPLE_MEDIA_INFO_MUTE || |
2264 type == PURPLE_MEDIA_INFO_UNMUTE)) { | 2295 type == PURPLE_MEDIA_INFO_UNMUTE)) { |
2265 GList *sessions; | 2296 GList *sessions; |
2266 gboolean active = (type == PURPLE_MEDIA_INFO_MUTE); | 2297 gboolean active = (type == PURPLE_MEDIA_INFO_MUTE); |
2568 | 2599 |
2569 session->session = fs_conference_new_session( | 2600 session->session = fs_conference_new_session( |
2570 media->priv->conference, media_type, &err); | 2601 media->priv->conference, media_type, &err); |
2571 | 2602 |
2572 if (err != NULL) { | 2603 if (err != NULL) { |
2573 purple_media_error(media, "Error creating session: %s\n", err->message); | 2604 purple_media_error(media, _("Error creating session: %s"), err->message); |
2574 g_error_free(err); | 2605 g_error_free(err); |
2575 g_free(session); | 2606 g_free(session); |
2576 return FALSE; | 2607 return FALSE; |
2577 } | 2608 } |
2578 | 2609 |
2882 } | 2913 } |
2883 | 2914 |
2884 stream->remote_candidates = g_list_concat(stream->remote_candidates, | 2915 stream->remote_candidates = g_list_concat(stream->remote_candidates, |
2885 purple_media_candidate_list_to_fs(remote_candidates)); | 2916 purple_media_candidate_list_to_fs(remote_candidates)); |
2886 | 2917 |
2887 fs_stream_set_remote_candidates(stream->stream, | 2918 if (stream->accepted == TRUE) { |
2888 stream->remote_candidates, &err); | 2919 fs_stream_set_remote_candidates(stream->stream, |
2889 | 2920 stream->remote_candidates, &err); |
2890 if (err) { | 2921 |
2891 purple_debug_error("media", "Error adding remote" | 2922 if (err) { |
2892 " candidates: %s\n", err->message); | 2923 purple_debug_error("media", "Error adding remote" |
2893 g_error_free(err); | 2924 " candidates: %s\n", err->message); |
2925 g_error_free(err); | |
2926 } | |
2894 } | 2927 } |
2895 #endif | 2928 #endif |
2896 } | 2929 } |
2897 | 2930 |
2898 #if 0 | 2931 #if 0 |