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