diff options
author | Sjoerd Simons <sjoerd.simons@collabora.co.uk> | 2011-05-04 03:03:34 +0800 |
---|---|---|
committer | Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk> | 2011-06-09 17:20:08 +0800 |
commit | 5616cdca13a978612a3762b6584c4f96dd7a334c (patch) | |
tree | 4a7e1caa9ed91a5765097fe14affbf94529cfa46 | |
parent | dfd3e3b200d14c9dc1f9ccf8d8bb68efdb48fae3 (diff) | |
download | gsoc2013-empathy-5616cdca13a978612a3762b6584c4f96dd7a334c.tar gsoc2013-empathy-5616cdca13a978612a3762b6584c4f96dd7a334c.tar.gz gsoc2013-empathy-5616cdca13a978612a3762b6584c4f96dd7a334c.tar.bz2 gsoc2013-empathy-5616cdca13a978612a3762b6584c4f96dd7a334c.tar.lz gsoc2013-empathy-5616cdca13a978612a3762b6584c4f96dd7a334c.tar.xz gsoc2013-empathy-5616cdca13a978612a3762b6584c4f96dd7a334c.tar.zst gsoc2013-empathy-5616cdca13a978612a3762b6584c4f96dd7a334c.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 af47e2a2d..0da1df6e6 100644 --- a/src/empathy-call-window.c +++ b/src/empathy-call-window.c @@ -668,12 +668,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"); @@ -700,7 +694,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)); @@ -711,10 +704,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); } @@ -991,6 +980,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); @@ -2487,21 +2482,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 (); @@ -2527,7 +2519,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; |