From 865761672e958a6880abf83082bafd105e1c4569 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Tue, 5 Jul 2011 13:25:38 +0000 Subject: [PATCH] emotion: fix race condition and never call fill_set in the backend. SVN revision: 61051 --- legacy/emotion/src/modules/gstreamer/emotion_sink.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/legacy/emotion/src/modules/gstreamer/emotion_sink.c b/legacy/emotion/src/modules/gstreamer/emotion_sink.c index 2f7ac7cc7e..657951fe1f 100644 --- a/legacy/emotion/src/modules/gstreamer/emotion_sink.c +++ b/legacy/emotion/src/modules/gstreamer/emotion_sink.c @@ -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.