aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSjoerd Simons <sjoerd.simons@collabora.co.uk>2011-05-04 03:03:34 +0800
committerSjoerd Simons <sjoerd.simons@collabora.co.uk>2011-05-04 03:04:14 +0800
commit75f5e5be0fd789df370be135b1ebfe1f70208383 (patch)
tree63400f6c09d5bb11fd35b5e8a01eaba853fd605a
parentb84d4bc7464a400fd983a3c430189daab69f49d2 (diff)
downloadgsoc2013-empathy-75f5e5be0fd789df370be135b1ebfe1f70208383.tar
gsoc2013-empathy-75f5e5be0fd789df370be135b1ebfe1f70208383.tar.gz
gsoc2013-empathy-75f5e5be0fd789df370be135b1ebfe1f70208383.tar.bz2
gsoc2013-empathy-75f5e5be0fd789df370be135b1ebfe1f70208383.tar.lz
gsoc2013-empathy-75f5e5be0fd789df370be135b1ebfe1f70208383.tar.xz
gsoc2013-empathy-75f5e5be0fd789df370be135b1ebfe1f70208383.tar.zst
gsoc2013-empathy-75f5e5be0fd789df370be135b1ebfe1f70208383.zip
Keep a persistent source video tee around
Always keep the video input tee around, so we can easily hook up new video contents even if the camera isn't currently enabled. This fixes issues where a new content is added without the local camera being enabled.
-rw-r--r--src/empathy-call-window.c38
1 files changed, 15 insertions, 23 deletions
diff --git a/src/empathy-call-window.c b/src/empathy-call-window.c
index fdb753245..67a587013 100644
--- a/src/empathy-call-window.c
+++ b/src/empathy-call-window.c
@@ -667,12 +667,6 @@ add_video_preview_to_pipeline (EmpathyCallWindow *self)
return;
}
- if (!gst_bin_add (GST_BIN (priv->pipeline), priv->video_tee))
- {
- g_warning ("Could not add video tee to pipeline");
- return;
- }
-
if (!gst_bin_add (GST_BIN (priv->pipeline), preview))
{
g_warning ("Could not add video preview to pipeline");
@@ -699,7 +693,6 @@ create_video_preview (EmpathyCallWindow *self)
GstBus *bus;
g_assert (priv->video_preview == NULL);
- g_assert (priv->video_tee == NULL);
bus = gst_pipeline_get_bus (GST_PIPELINE (priv->pipeline));
@@ -710,10 +703,6 @@ create_video_preview (EmpathyCallWindow *self)
gtk_box_pack_start (GTK_BOX (priv->self_user_output_hbox),
priv->video_preview, TRUE, TRUE, 0);
- priv->video_tee = gst_element_factory_make ("tee", NULL);
- gst_object_ref (priv->video_tee);
- gst_object_sink (priv->video_tee);
-
g_object_unref (bus);
}
@@ -990,6 +979,12 @@ create_pipeline (EmpathyCallWindow *self)
priv->pipeline = gst_pipeline_new (NULL);
priv->pipeline_playing = FALSE;
+ priv->video_tee = gst_element_factory_make ("tee", NULL);
+ gst_object_ref (priv->video_tee);
+ gst_object_sink (priv->video_tee);
+
+ gst_bin_add (GST_BIN (priv->pipeline), priv->video_tee);
+
bus = gst_pipeline_get_bus (GST_PIPELINE (priv->pipeline));
priv->bus_message_source_id = gst_bus_add_watch (bus,
empathy_call_window_bus_message, self);
@@ -2489,21 +2484,18 @@ empathy_call_window_sink_added_cb (EmpathyCallHandler *handler,
retval = TRUE;
break;
case FS_MEDIA_TYPE_VIDEO:
- if (priv->video_input != NULL)
+ if (priv->video_tee != NULL)
{
- if (priv->video_tee != NULL)
+ pad = gst_element_get_request_pad (priv->video_tee, "src%d");
+ if (GST_PAD_LINK_FAILED (gst_pad_link (pad, sink)))
{
- pad = gst_element_get_request_pad (priv->video_tee, "src%d");
- if (GST_PAD_LINK_FAILED (gst_pad_link (pad, sink)))
- {
- g_warning ("Could not link video source input pipeline");
- break;
- }
- gst_object_unref (pad);
+ g_warning ("Could not link video source input pipeline");
+ break;
}
-
- retval = TRUE;
+ gst_object_unref (pad);
}
+
+ retval = TRUE;
break;
default:
g_assert_not_reached ();
@@ -2529,7 +2521,7 @@ empathy_call_window_remove_video_input (EmpathyCallWindow *self)
gst_element_set_state (preview, GST_STATE_NULL);
gst_bin_remove_many (GST_BIN (priv->pipeline), priv->video_input,
- priv->video_tee, preview, NULL);
+ preview, NULL);
g_object_unref (priv->video_input);
priv->video_input = NULL;