From 87ee4787d5c251132b64578296e640a490494bd3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Rafa=C3=ABl=20Carr=C3=A9?=
 <rafael.carre@savoirfairelinux.com>
Date: Thu, 30 Jun 2011 17:36:54 -0400
Subject: [PATCH] * #6326: stop rendering timer

---
 .../src/video/video_preview.c                 | 23 +++++++++++--------
 1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/sflphone-client-gnome/src/video/video_preview.c b/sflphone-client-gnome/src/video/video_preview.c
index f50710d292..a179adc31a 100644
--- a/sflphone-client-gnome/src/video/video_preview.c
+++ b/sflphone-client-gnome/src/video/video_preview.c
@@ -348,7 +348,7 @@ align(int value)
     return (value + 3) &~ 3;
 }
 
-static void
+static gboolean
 readFrameFromShm(VideoPreviewPrivate *priv)
 {
     int width = priv->width;
@@ -358,20 +358,20 @@ readFrameFromShm(VideoPreviewPrivate *priv)
     ClutterActor *texture = priv->texture;
 
     if (sem_set_id == -1)
-        return;
+        return FALSE;
 
     if (sem_wait(sem_set_id) == -1) {
       if (errno != EAGAIN) {
           g_print("Could not read from shared memory!\n");
           perror("shm: ");
       }
-      return;
+      return FALSE;
     }
 
     if (priv->using_clutter) {
         if (strcmp(priv->format, "rgb24")) {
             g_print("clutter render: Unknown pixel format `%s'\n", priv->format);
-            return;
+            return FALSE;
         }
 
         clutter_texture_set_from_rgb_data (CLUTTER_TEXTURE(texture),
@@ -386,7 +386,7 @@ readFrameFromShm(VideoPreviewPrivate *priv)
     } else {
         if (strcmp(priv->format, "bgra")) {
             g_print("cairo render: Unknown pixel format `%s'\n", priv->format); 
-            return;
+            return FALSE;
         }
 
         cairo_format_t format = CAIRO_FORMAT_RGB24;
@@ -409,6 +409,8 @@ readFrameFromShm(VideoPreviewPrivate *priv)
             cairo_surface_destroy(surface);
         }
     }
+
+    return TRUE;
 }
 
 static gboolean
@@ -417,11 +419,14 @@ updateTexture(gpointer data)
     VideoPreview *preview = (VideoPreview *) data;
     VideoPreviewPrivate *priv = VIDEO_PREVIEW_GET_PRIVATE(preview);
 
-    if (!priv || !priv->shm_buffer)
-        return FALSE;
+    gboolean ret = priv && priv->shm_buffer && readFrameFromShm(priv);
 
-    readFrameFromShm(priv);
-    return TRUE;
+    if (!ret) {
+        video_preview_stop(data);
+        g_object_notify_by_pspec(G_OBJECT(data), properties[PROP_RUNNING]);
+    }
+
+    return ret;
 }
 
 /**                                                                             
-- 
GitLab