[empathy/gnome-2-34] Keep a persistent source video tee around



commit 75f5e5be0fd789df370be135b1ebfe1f70208383
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 fdb7532..67a5870 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;



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