[telepathy-stream-engine/master] Don't try to iterate further if the video sink matching the prepare-window-xid was found

Olivier Crête olivier.crete at collabora.co.uk
Wed Jul 15 11:42:13 PDT 2009


---
 src/videosink.c |    9 ++++++---
 1 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/videosink.c b/src/videosink.c
index 9c7dd09..e388798 100644
--- a/src/videosink.c
+++ b/src/videosink.c
@@ -474,6 +474,7 @@ struct xid_data
 {
   GstElement *src;
   gulong window_id;
+  gboolean found;
 };
 
 static void
@@ -482,8 +483,10 @@ set_window_xid (gpointer data, gpointer user_data)
   GstXOverlay *xov = GST_X_OVERLAY (data);
   struct xid_data *xiddata = (struct xid_data *) user_data;
 
-  if (GST_ELEMENT_CAST(xov) == xiddata->src)
+  if (GST_ELEMENT_CAST(xov) == xiddata->src) {
       gst_x_overlay_set_xwindow_id (xov, xiddata->window_id);
+      xiddata->found = TRUE;
+  }
 }
 
 gboolean
@@ -492,7 +495,6 @@ tp_stream_engine_video_sink_bus_sync_message (
     GstMessage *message)
 {
   const GstStructure *s;
-  gboolean found = FALSE;
   GstIterator *it = NULL;
   struct xid_data xiddata;
 
@@ -505,6 +507,7 @@ tp_stream_engine_video_sink_bus_sync_message (
 
   xiddata.src = GST_ELEMENT (GST_MESSAGE_SRC (message));
   xiddata.window_id = self->priv->window_id;
+  xiddata.found = FALSE;
 
   it = gst_bin_iterate_all_by_interface (GST_BIN (self->priv->sink),
       GST_TYPE_X_OVERLAY);
@@ -513,5 +516,5 @@ tp_stream_engine_video_sink_bus_sync_message (
     gst_iterator_resync (it);
   gst_iterator_free (it);
 
-  return found;
+  return xiddata.found;
 }
-- 
1.5.6.5



More information about the telepathy-commits mailing list