diff options
author | Sjoerd Simons <sjoerd.simons@collabora.co.uk> | 2011-05-04 03:03:34 +0800 |
---|---|---|
committer | Sjoerd Simons <sjoerd.simons@collabora.co.uk> | 2011-05-04 03:04:14 +0800 |
commit | 75f5e5be0fd789df370be135b1ebfe1f70208383 (patch) | |
tree | 63400f6c09d5bb11fd35b5e8a01eaba853fd605a | |
parent | b84d4bc7464a400fd983a3c430189daab69f49d2 (diff) | |
download | gsoc2013-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.c | 38 |
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; |