Mercurial > pidgin.yaz
comparison libpurple/media/backend-fs2.c @ 29548:2f8151fed0ae
Various tweaks, fixes, and added debug output. Attached some media signals,
and created a temporary function to help test out integrating with PurpleMedia.
author | maiku@pidgin.im |
---|---|
date | Fri, 23 Oct 2009 01:55:39 +0000 |
parents | 4aa30863743b |
children | ae81f8baa148 |
comparison
equal
deleted
inserted
replaced
29547:f7746ebc0b40 | 29548:2f8151fed0ae |
---|---|
43 | 43 |
44 static void purple_media_backend_iface_init(PurpleMediaBackendIface *iface); | 44 static void purple_media_backend_iface_init(PurpleMediaBackendIface *iface); |
45 | 45 |
46 static gboolean | 46 static gboolean |
47 _gst_bus_cb(GstBus *bus, GstMessage *msg, PurpleMediaBackend *self); | 47 _gst_bus_cb(GstBus *bus, GstMessage *msg, PurpleMediaBackend *self); |
48 static void | |
49 _state_changed_cb(PurpleMedia *media, PurpleMediaState state, | |
50 gchar *sid, gchar *name, PurpleMediaBackendFs2 *self); | |
51 static void | |
52 _stream_info_cb(PurpleMedia *media, PurpleMediaInfoType type, | |
53 gchar *sid, gchar *name, gboolean local, | |
54 PurpleMediaBackendFs2 *self); | |
48 | 55 |
49 static gboolean purple_media_backend_fs2_add_stream(PurpleMediaBackend *self, | 56 static gboolean purple_media_backend_fs2_add_stream(PurpleMediaBackend *self, |
50 const gchar *sess_id, const gchar *who, | 57 const gchar *sess_id, const gchar *who, |
51 PurpleMediaSessionType type, gboolean initiator, | 58 PurpleMediaSessionType type, gboolean initiator, |
52 const gchar *transmitter, | 59 const gchar *transmitter, |
104 purple_media_backend_fs2_dispose(GObject *obj) | 111 purple_media_backend_fs2_dispose(GObject *obj) |
105 { | 112 { |
106 PurpleMediaBackendFs2Private *priv = | 113 PurpleMediaBackendFs2Private *priv = |
107 PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(obj); | 114 PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(obj); |
108 | 115 |
116 purple_debug_info("backend-fs2", "purple_media_backend_fs2_dispose\n"); | |
117 | |
109 if (priv->confbin) { | 118 if (priv->confbin) { |
110 GstElement *pipeline; | 119 GstElement *pipeline; |
111 | 120 |
112 pipeline = purple_media_manager_get_pipeline( | 121 pipeline = purple_media_manager_get_pipeline( |
113 purple_media_get_manager(priv->media)); | 122 purple_media_get_manager(priv->media)); |
135 priv->conference = NULL; | 144 priv->conference = NULL; |
136 | 145 |
137 } | 146 } |
138 | 147 |
139 if (priv->media) { | 148 if (priv->media) { |
140 g_object_unref(priv->media); | 149 g_object_remove_weak_pointer(G_OBJECT(priv->media), |
150 (gpointer*)&priv->media); | |
141 priv->media = NULL; | 151 priv->media = NULL; |
142 } | 152 } |
153 | |
154 G_OBJECT_CLASS(purple_media_backend_fs2_parent_class)->dispose(obj); | |
143 } | 155 } |
144 | 156 |
145 static void | 157 static void |
146 purple_media_backend_fs2_finalize(GObject *obj) | 158 purple_media_backend_fs2_finalize(GObject *obj) |
147 { | 159 { |
148 PurpleMediaBackendFs2Private *priv = | 160 PurpleMediaBackendFs2Private *priv = |
149 PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(obj); | 161 PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(obj); |
162 | |
163 purple_debug_info("backend-fs2", "purple_media_backend_fs2_finalize\n"); | |
164 | |
150 g_free(priv->conference_type); | 165 g_free(priv->conference_type); |
166 | |
167 G_OBJECT_CLASS(purple_media_backend_fs2_parent_class)->finalize(obj); | |
151 } | 168 } |
152 | 169 |
153 static void | 170 static void |
154 purple_media_backend_fs2_set_property(GObject *object, guint prop_id, | 171 purple_media_backend_fs2_set_property(GObject *object, guint prop_id, |
155 const GValue *value, GParamSpec *pspec) | 172 const GValue *value, GParamSpec *pspec) |
162 switch (prop_id) { | 179 switch (prop_id) { |
163 case PROP_CONFERENCE_TYPE: | 180 case PROP_CONFERENCE_TYPE: |
164 priv->conference_type = g_value_dup_string(value); | 181 priv->conference_type = g_value_dup_string(value); |
165 break; | 182 break; |
166 case PROP_MEDIA: | 183 case PROP_MEDIA: |
167 priv->media = g_value_dup_object(value); | 184 priv->media = g_value_get_object(value); |
185 | |
186 if (priv->media == NULL) | |
187 break; | |
188 | |
189 g_object_add_weak_pointer(G_OBJECT(priv->media), | |
190 (gpointer*)&priv->media); | |
191 | |
192 g_signal_connect(G_OBJECT(priv->media), | |
193 "state-changed", | |
194 G_CALLBACK(_state_changed_cb), | |
195 PURPLE_MEDIA_BACKEND_FS2(object)); | |
196 g_signal_connect(G_OBJECT(priv->media), "stream-info", | |
197 G_CALLBACK(_stream_info_cb), | |
198 PURPLE_MEDIA_BACKEND_FS2(object)); | |
168 break; | 199 break; |
169 default: | 200 default: |
170 G_OBJECT_WARN_INVALID_PROPERTY_ID( | 201 G_OBJECT_WARN_INVALID_PROPERTY_ID( |
171 object, prop_id, pspec); | 202 object, prop_id, pspec); |
172 break; | 203 break; |
230 _gst_bus_cb(GstBus *bus, GstMessage *msg, PurpleMediaBackend *self) | 261 _gst_bus_cb(GstBus *bus, GstMessage *msg, PurpleMediaBackend *self) |
231 { | 262 { |
232 return TRUE; | 263 return TRUE; |
233 } | 264 } |
234 | 265 |
266 static void | |
267 _state_changed_cb(PurpleMedia *media, PurpleMediaState state, | |
268 gchar *sid, gchar *name, PurpleMediaBackendFs2 *self) | |
269 { | |
270 } | |
271 | |
272 static void | |
273 _stream_info_cb(PurpleMedia *media, PurpleMediaInfoType type, | |
274 gchar *sid, gchar *name, gboolean local, | |
275 PurpleMediaBackendFs2 *self) | |
276 { | |
277 } | |
278 | |
235 static gboolean | 279 static gboolean |
236 _init_conference(PurpleMediaBackend *self) | 280 _init_conference(PurpleMediaBackend *self) |
237 { | 281 { |
238 PurpleMediaBackendFs2Private *priv = | 282 PurpleMediaBackendFs2Private *priv = |
239 PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self); | 283 PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self); |
248 purple_debug_error("backend-fs2", "Conference == NULL\n"); | 292 purple_debug_error("backend-fs2", "Conference == NULL\n"); |
249 return FALSE; | 293 return FALSE; |
250 } | 294 } |
251 | 295 |
252 pipeline = purple_media_manager_get_pipeline( | 296 pipeline = purple_media_manager_get_pipeline( |
253 purple_media_manager_get()); | 297 purple_media_get_manager(priv->media)); |
254 | 298 |
255 if (pipeline == NULL) { | 299 if (pipeline == NULL) { |
256 purple_debug_error("backend-fs2", | 300 purple_debug_error("backend-fs2", |
257 "Couldn't retrieve pipeline.\n"); | 301 "Couldn't retrieve pipeline.\n"); |
258 return FALSE; | 302 return FALSE; |
311 guint num_params, GParameter *params) | 355 guint num_params, GParameter *params) |
312 { | 356 { |
313 PurpleMediaBackendFs2Private *priv = | 357 PurpleMediaBackendFs2Private *priv = |
314 PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self); | 358 PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self); |
315 | 359 |
316 if (priv->conference == NULL || !_init_conference(self)) { | 360 if (priv->conference == NULL && !_init_conference(self)) { |
317 purple_debug_error("backend-fs2", | 361 purple_debug_error("backend-fs2", |
318 "Error initializing the conference.\n"); | 362 "Error initializing the conference.\n"); |
319 return FALSE; | 363 return FALSE; |
320 } | 364 } |
321 | 365 |
354 purple_media_backend_fs2_set_send_codec(PurpleMediaBackend *self, | 398 purple_media_backend_fs2_set_send_codec(PurpleMediaBackend *self, |
355 const gchar *sess_id, PurpleMediaCodec *codec) | 399 const gchar *sess_id, PurpleMediaCodec *codec) |
356 { | 400 { |
357 } | 401 } |
358 | 402 |
403 FsConference * | |
404 purple_media_backend_fs2_get_conference(PurpleMediaBackendFs2 *self) | |
405 { | |
406 PurpleMediaBackendFs2Private *priv = | |
407 PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self); | |
408 return priv->conference; | |
409 } | |
410 |