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