comparison libpurple/media/media.c @ 29555:cc978a1a4bd1

Move handling Farsight 2's codecs-changed signal into the Fs2 media backend.
author maiku@pidgin.im
date Fri, 23 Oct 2009 23:12:57 +0000
parents 2460e6774e08
children 74e75fc3481e
comparison
equal deleted inserted replaced
29554:2460e6774e08 29555:cc978a1a4bd1
144 static void purple_media_candidates_prepared_cb(FsStream *stream, 144 static void purple_media_candidates_prepared_cb(FsStream *stream,
145 PurpleMediaSession *session); 145 PurpleMediaSession *session);
146 static void purple_media_candidate_pair_established_cb(FsStream *stream, 146 static void purple_media_candidate_pair_established_cb(FsStream *stream,
147 FsCandidate *native_candidate, FsCandidate *remote_candidate, 147 FsCandidate *native_candidate, FsCandidate *remote_candidate,
148 PurpleMediaSession *session); 148 PurpleMediaSession *session);
149 static void purple_media_codecs_changed_cb(PurpleMediaBackend *backend,
150 const gchar *sess_id, PurpleMedia *media);
149 static gboolean media_bus_call(GstBus *bus, 151 static gboolean media_bus_call(GstBus *bus,
150 GstMessage *msg, PurpleMedia *media); 152 GstMessage *msg, PurpleMedia *media);
151 153
152 static GObjectClass *parent_class = NULL; 154 static GObjectClass *parent_class = NULL;
153 155
438 "conference-type", 440 "conference-type",
439 media->priv->conference_type, 441 media->priv->conference_type,
440 "media", media, 442 "media", media,
441 NULL); 443 NULL);
442 g_signal_connect(media->priv->backend, 444 g_signal_connect(media->priv->backend,
445 "codecs-changed",
446 G_CALLBACK(
447 purple_media_codecs_changed_cb),
448 media);
449 g_signal_connect(media->priv->backend,
443 "new-candidate", 450 "new-candidate",
444 G_CALLBACK( 451 G_CALLBACK(
445 purple_media_new_local_candidate_cb), 452 purple_media_new_local_candidate_cb),
446 media); 453 media);
447 break; 454 break;
1070 FsStream *stream = g_value_get_object(gst_structure_get_value(msg->structure, "stream")); 1077 FsStream *stream = g_value_get_object(gst_structure_get_value(msg->structure, "stream"));
1071 FsCandidate *local_candidate = g_value_get_boxed(gst_structure_get_value(msg->structure, "local-candidate")); 1078 FsCandidate *local_candidate = g_value_get_boxed(gst_structure_get_value(msg->structure, "local-candidate"));
1072 FsCandidate *remote_candidate = g_value_get_boxed(gst_structure_get_value(msg->structure, "remote-candidate")); 1079 FsCandidate *remote_candidate = g_value_get_boxed(gst_structure_get_value(msg->structure, "remote-candidate"));
1073 PurpleMediaSession *session = purple_media_session_from_fs_stream(media, stream); 1080 PurpleMediaSession *session = purple_media_session_from_fs_stream(media, stream);
1074 purple_media_candidate_pair_established_cb(stream, local_candidate, remote_candidate, session); 1081 purple_media_candidate_pair_established_cb(stream, local_candidate, remote_candidate, session);
1075 } else if (gst_structure_has_name(msg->structure,
1076 "farsight-codecs-changed")) {
1077 GList *sessions = g_hash_table_get_values(PURPLE_MEDIA(media)->priv->sessions);
1078 FsSession *fssession = g_value_get_object(gst_structure_get_value(msg->structure, "session"));
1079 for (; sessions; sessions = g_list_delete_link(sessions, sessions)) {
1080 PurpleMediaSession *session = sessions->data;
1081 if (session->session == fssession) {
1082 gchar *session_id = g_strdup(session->id);
1083 g_signal_emit(media, purple_media_signals[CODECS_CHANGED], 0, session_id);
1084 g_free(session_id);
1085 g_list_free(sessions);
1086 break;
1087 }
1088 }
1089 } 1082 }
1090 break; 1083 break;
1091 } 1084 }
1092 default: 1085 default:
1093 break; 1086 break;
1358 stream->active_remote_candidates = g_list_prepend( 1351 stream->active_remote_candidates = g_list_prepend(
1359 stream->active_remote_candidates, 1352 stream->active_remote_candidates,
1360 fs_candidate_copy(remote_candidate)); 1353 fs_candidate_copy(remote_candidate));
1361 1354
1362 purple_debug_info("media", "candidate pair established\n"); 1355 purple_debug_info("media", "candidate pair established\n");
1356 }
1357
1358 static void
1359 purple_media_codecs_changed_cb(PurpleMediaBackend *backend,
1360 const gchar *sess_id, PurpleMedia *media)
1361 {
1362 g_signal_emit(media, purple_media_signals[CODECS_CHANGED], 0, sess_id);
1363 } 1363 }
1364 1364
1365 static gboolean 1365 static gboolean
1366 purple_media_connected_cb(PurpleMediaStream *stream) 1366 purple_media_connected_cb(PurpleMediaStream *stream)
1367 { 1367 {