Mercurial > pidgin.yaz
comparison libpurple/media/media.c @ 29557:1fdc75c94c22
Move Farsight 2's local-candidates-prepared signal to the Fs2 media backend.
author | maiku@pidgin.im |
---|---|
date | Mon, 26 Oct 2009 18:02:06 +0000 |
parents | 74e75fc3481e |
children | cb843608e183 |
comparison
equal
deleted
inserted
replaced
29556:74e75fc3481e | 29557:1fdc75c94c22 |
---|---|
139 static void purple_media_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); | 139 static void purple_media_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); |
140 | 140 |
141 static void purple_media_new_local_candidate_cb(PurpleMediaBackend *backend, | 141 static void purple_media_new_local_candidate_cb(PurpleMediaBackend *backend, |
142 const gchar *sess_id, const gchar *participant, | 142 const gchar *sess_id, const gchar *participant, |
143 PurpleMediaCandidate *candidate, PurpleMedia *media); | 143 PurpleMediaCandidate *candidate, PurpleMedia *media); |
144 static void purple_media_candidates_prepared_cb(FsStream *stream, | 144 static void purple_media_candidates_prepared_cb(PurpleMediaBackend *backend, |
145 PurpleMediaSession *session); | 145 const gchar *sess_id, const gchar *name, PurpleMedia *media); |
146 static void purple_media_candidate_pair_established_cb( | 146 static void purple_media_candidate_pair_established_cb( |
147 PurpleMediaBackend *backend, | 147 PurpleMediaBackend *backend, |
148 const gchar *sess_id, const gchar *name, | 148 const gchar *sess_id, const gchar *name, |
149 PurpleMediaCandidate *local_candidate, | 149 PurpleMediaCandidate *local_candidate, |
150 PurpleMediaCandidate *remote_candidate, | 150 PurpleMediaCandidate *remote_candidate, |
448 "active-candidate-pair", | 448 "active-candidate-pair", |
449 G_CALLBACK( | 449 G_CALLBACK( |
450 purple_media_candidate_pair_established_cb), | 450 purple_media_candidate_pair_established_cb), |
451 media); | 451 media); |
452 g_signal_connect(media->priv->backend, | 452 g_signal_connect(media->priv->backend, |
453 "candidates-prepared", | |
454 G_CALLBACK( | |
455 purple_media_candidates_prepared_cb), | |
456 media); | |
457 g_signal_connect(media->priv->backend, | |
453 "codecs-changed", | 458 "codecs-changed", |
454 G_CALLBACK( | 459 G_CALLBACK( |
455 purple_media_codecs_changed_cb), | 460 purple_media_codecs_changed_cb), |
456 media); | 461 media); |
457 g_signal_connect(media->priv->backend, | 462 g_signal_connect(media->priv->backend, |
986 #endif | 991 #endif |
987 } | 992 } |
988 #endif /* USE_GSTREAMER */ | 993 #endif /* USE_GSTREAMER */ |
989 | 994 |
990 #ifdef USE_VV | 995 #ifdef USE_VV |
991 static PurpleMediaSession * | |
992 purple_media_session_from_fs_stream(PurpleMedia *media, FsStream *stream) | |
993 { | |
994 FsSession *fssession; | |
995 GList *values; | |
996 | |
997 g_return_val_if_fail(PURPLE_IS_MEDIA(media), NULL); | |
998 g_return_val_if_fail(FS_IS_STREAM(stream), NULL); | |
999 | |
1000 g_object_get(stream, "session", &fssession, NULL); | |
1001 | |
1002 values = g_hash_table_get_values(media->priv->sessions); | |
1003 | |
1004 for (; values; values = g_list_delete_link(values, values)) { | |
1005 PurpleMediaSession *session = values->data; | |
1006 | |
1007 if (session->session == fssession) { | |
1008 g_list_free(values); | |
1009 g_object_unref(fssession); | |
1010 return session; | |
1011 } | |
1012 } | |
1013 | |
1014 g_object_unref(fssession); | |
1015 return NULL; | |
1016 } | |
1017 | |
1018 static gboolean | 996 static gboolean |
1019 media_bus_call(GstBus *bus, GstMessage *msg, PurpleMedia *media) | 997 media_bus_call(GstBus *bus, GstMessage *msg, PurpleMedia *media) |
1020 { | 998 { |
1021 switch(GST_MESSAGE_TYPE(msg)) { | 999 switch(GST_MESSAGE_TYPE(msg)) { |
1022 case GST_MESSAGE_ELEMENT: { | 1000 case GST_MESSAGE_ELEMENT: { |
1066 percent = 1.0; | 1044 percent = 1.0; |
1067 | 1045 |
1068 g_signal_emit(media, purple_media_signals[LEVEL], | 1046 g_signal_emit(media, purple_media_signals[LEVEL], |
1069 0, session->id, participant, percent); | 1047 0, session->id, participant, percent); |
1070 break; | 1048 break; |
1071 } | |
1072 if (!FS_IS_CONFERENCE(GST_MESSAGE_SRC(msg)) || | |
1073 !PURPLE_IS_MEDIA(media) || | |
1074 media->priv->conference != | |
1075 FS_CONFERENCE(GST_MESSAGE_SRC(msg))) | |
1076 break; | |
1077 | |
1078 if (gst_structure_has_name(msg->structure, | |
1079 "farsight-local-candidates-prepared")) { | |
1080 FsStream *stream = g_value_get_object(gst_structure_get_value(msg->structure, "stream")); | |
1081 PurpleMediaSession *session = purple_media_session_from_fs_stream(media, stream); | |
1082 purple_media_candidates_prepared_cb(stream, session); | |
1083 } | 1049 } |
1084 break; | 1050 break; |
1085 } | 1051 } |
1086 default: | 1052 default: |
1087 break; | 1053 break; |
1270 g_signal_emit(session->media, purple_media_signals[NEW_CANDIDATE], | 1236 g_signal_emit(session->media, purple_media_signals[NEW_CANDIDATE], |
1271 0, session->id, participant, candidate); | 1237 0, session->id, participant, candidate); |
1272 } | 1238 } |
1273 | 1239 |
1274 static void | 1240 static void |
1275 purple_media_candidates_prepared_cb(FsStream *stream, PurpleMediaSession *session) | 1241 purple_media_candidates_prepared_cb(PurpleMediaBackend *backend, |
1276 { | 1242 const gchar *sess_id, const gchar *name, PurpleMedia *media) |
1277 gchar *name; | 1243 { |
1278 FsParticipant *participant; | |
1279 PurpleMediaStream *stream_data; | 1244 PurpleMediaStream *stream_data; |
1280 | 1245 |
1281 g_return_if_fail(FS_IS_STREAM(stream)); | 1246 g_return_if_fail(PURPLE_IS_MEDIA(media)); |
1282 g_return_if_fail(session != NULL); | 1247 |
1283 | 1248 stream_data = purple_media_get_stream(media, sess_id, name); |
1284 g_object_get(stream, "participant", &participant, NULL); | |
1285 g_object_get(participant, "cname", &name, NULL); | |
1286 g_object_unref(participant); | |
1287 | |
1288 stream_data = purple_media_get_stream(session->media, session->id, name); | |
1289 stream_data->candidates_prepared = TRUE; | 1249 stream_data->candidates_prepared = TRUE; |
1290 | 1250 |
1291 g_signal_emit(session->media, | 1251 g_signal_emit(media, purple_media_signals[CANDIDATES_PREPARED], |
1292 purple_media_signals[CANDIDATES_PREPARED], | 1252 0, sess_id, name); |
1293 0, session->id, name); | |
1294 | |
1295 g_free(name); | |
1296 } | 1253 } |
1297 | 1254 |
1298 /* callback called when a pair of transport candidates (local and remote) | 1255 /* callback called when a pair of transport candidates (local and remote) |
1299 * has been established */ | 1256 * has been established */ |
1300 static void | 1257 static void |