[empathy: 75/99] Keep a persistent source video tee around



commit 5616cdca13a978612a3762b6584c4f96dd7a334c
Author: Sjoerd Simons <sjoerd simons collabora co uk>
Date:   Tue May 3 20:03:34 2011 +0100

    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.

 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 af47e2a..0da1df6 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;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]