diff libpurple/mediamanager.c @ 23856:1c68f78414b7

Set the media pipeline to PLAYING immediately after initialization (and a few other changes to make it actually work and not hang).
author Mike Ruprecht <maiku@soc.pidgin.im>
date Thu, 17 Jul 2008 21:01:46 +0000
parents cbe97caec684
children b8a73b6dc0a4
line wrap: on
line diff
--- a/libpurple/mediamanager.c	Wed Jul 16 21:55:08 2008 +0000
+++ b/libpurple/mediamanager.c	Thu Jul 17 21:01:46 2008 +0000
@@ -135,20 +135,24 @@
 {
 	PurpleMedia *media;
 	FsConference *conference = FS_CONFERENCE(gst_element_factory_make(conference_type, NULL));
-	GstStateChangeReturn ret = gst_element_set_state(GST_ELEMENT(conference), GST_STATE_READY);
-
-	if (ret == GST_STATE_CHANGE_FAILURE) {
-		purple_conv_present_error(remote_user,
-					  purple_connection_get_account(gc),
-					  _("Error creating conference."));
-		return NULL;
-	}
+	GstStateChangeReturn ret;
 
 	media = PURPLE_MEDIA(g_object_new(purple_media_get_type(),
 			     "screenname", remote_user,
 			     "connection", gc, 
 			     "farsight-conference", conference,
 			     NULL));
+
+	ret = gst_element_set_state(purple_media_get_pipeline(media), GST_STATE_PLAYING);
+
+	if (ret == GST_STATE_CHANGE_FAILURE) {
+		purple_conv_present_error(remote_user,
+					  purple_connection_get_account(gc),
+					  _("Error creating conference."));
+		g_object_unref(media);
+		return NULL;
+	}
+
 	manager->priv->medias = g_list_append(manager->priv->medias, media);
 	g_signal_emit(manager, purple_media_manager_signals[INIT_MEDIA], 0, media);
 	return media;