emotion: fix race condition and never call fill_set in the backend.
authorcedric <cedric>
Tue, 5 Jul 2011 13:25:38 +0000 (13:25 +0000)
committercedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 5 Jul 2011 13:25:38 +0000 (13:25 +0000)
git-svn-id: http://svn.enlightenment.org/svn/e/trunk/emotion@61051 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/modules/gstreamer/emotion_sink.c

index 2f7ac7c..657951f 100644 (file)
@@ -222,14 +222,12 @@ gboolean evas_video_sink_set_caps(GstBaseSink *bsink, GstCaps *caps)
      {
       case GST_VIDEO_FORMAT_I420:
          evas_object_image_size_set(priv->o, priv->width, priv->height);
-         evas_object_image_fill_set(priv->o, 0, 0, priv->width, priv->height);
          evas_object_image_colorspace_set(priv->o, EVAS_COLORSPACE_YCBCR422P601_PL);
          evas_object_image_alpha_set(priv->o, 0);
          printf ("I420\n");
          break;
       case GST_VIDEO_FORMAT_YV12:
          evas_object_image_size_set(priv->o, priv->width, priv->height);
-         evas_object_image_fill_set(priv->o, 0, 0, priv->width, priv->height);
          evas_object_image_colorspace_set(priv->o, EVAS_COLORSPACE_YCBCR422P601_PL);
          evas_object_image_alpha_set(priv->o, 0);
          printf ("YV12\n");
@@ -375,6 +373,7 @@ static void evas_video_sink_render_handler(void *data,
    const guint8 *gst_data;
    GstQuery *query;
    GstFormat fmt = GST_FORMAT_TIME;
+   Evas_Coord w, h;
    gint64 pos;
 
    sink = (EvasVideoSink *)data;
@@ -393,6 +392,13 @@ static void evas_video_sink_render_handler(void *data,
         if (!priv->preroll) priv->update_size = FALSE;
      }
 
+   // This prevent a race condition when data are still in the pipe
+   // but the buffer size as changed because of a request from
+   // emotion smart (like on a file set).
+   evas_object_image_size_get(priv->o, &w, &h);
+   if (w != priv->width || h != priv->height)
+     return ;
+
    evas_data = (unsigned char *)evas_object_image_data_get(priv->o, 1);
 
    // Evas's BGRA has pre-multiplied alpha while GStreamer's doesn't.