emotion: fix stride for all YUV video.
authorcedric <cedric>
Thu, 7 Jun 2012 05:26:39 +0000 (05:26 +0000)
committercedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 7 Jun 2012 05:26:39 +0000 (05:26 +0000)
git-svn-id: http://svn.enlightenment.org/svn/e/trunk/emotion@71772 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

ChangeLog
NEWS
src/modules/gstreamer/emotion_convert.c

index 13510b7..bc79a9a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,12 +1,15 @@
-2012-04-26 Carsten Haitzler (The Rasterman)
+2012-04-26  Carsten Haitzler (The Rasterman)
 
        * 1.0.0 release
 
-2012-04-30 Jérôme Pinot
+2012-04-30  Jérôme Pinot
 
        * Fix build out of tree.
 
-2012-05-16 Carsten Haitzler (The Rasterman)
+2012-05-16  Carsten Haitzler (The Rasterman)
 
        * Fix emotion video overlay support to detect correct engine name.
 
+2012-06-07  Cedric Bail
+
+       * Fix stride for all YUV video stream.
diff --git a/NEWS b/NEWS
index e6e0f7e..a3c86a9 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -7,6 +7,7 @@ Additions:
 
 Fixes:
        - build out of tree.
+       - stride of all YUV video.
 
 Improvements:
 
index 1bfc19a..3d3b46e 100644 (file)
@@ -78,45 +78,57 @@ _evas_video_bgra(unsigned char *evas_data, const unsigned char *gst_data, unsign
 }
 
 static void
-_evas_video_i420(unsigned char *evas_data, const unsigned char *gst_data, unsigned int w, unsigned int h __UNUSED__, unsigned int output_height)
+_evas_video_i420(unsigned char *evas_data, const unsigned char *gst_data, unsigned int w, unsigned int h, unsigned int output_height)
 {
    const unsigned char **rows;
    unsigned int i, j;
    unsigned int rh;
+   unsigned int stride_y, stride_uv;
 
    rh = output_height;
 
    rows = (const unsigned char **)evas_data;
 
+   stride_y = GST_ROUND_UP_4(w);
+   stride_uv = GST_ROUND_UP_8(w) / 2;
+
    for (i = 0; i < rh; i++)
-     rows[i] = &gst_data[i * w];
+     rows[i] = &gst_data[i * stride_y];
 
    for (j = 0; j < (rh / 2); j++, i++)
-     rows[i] = &gst_data[h * w + j * (w / 2)];
+     rows[i] = &gst_data[h * stride_y + j * stride_uv];
 
    for (j = 0; j < (rh / 2); j++, i++)
-     rows[i] = &gst_data[h * w + rh * (w / 4) + j * (w / 2)];
+     rows[i] = &gst_data[h * stride_y +
+                        (rh / 2) * stride_uv +
+                        j * stride_uv];
 }
 
 static void
-_evas_video_yv12(unsigned char *evas_data, const unsigned char *gst_data, unsigned int w, unsigned int h __UNUSED__, unsigned int output_height)
+_evas_video_yv12(unsigned char *evas_data, const unsigned char *gst_data, unsigned int w, unsigned int h, unsigned int output_height)
 {
    const unsigned char **rows;
    unsigned int i, j;
    unsigned int rh;
+   unsigned int stride_y, stride_uv;
 
    rh = output_height;
 
    rows = (const unsigned char **)evas_data;
 
+   stride_y = GST_ROUND_UP_4(w);
+   stride_uv = GST_ROUND_UP_8(w) / 2;
+
    for (i = 0; i < rh; i++)
-     rows[i] = &gst_data[i * w];
+     rows[i] = &gst_data[i * stride_y];
 
    for (j = 0; j < (rh / 2); j++, i++)
-     rows[i] = &gst_data[h * w + rh * (w / 4) + j * (w / 2)];
+     rows[i] = &gst_data[h * stride_y +
+                        (rh / 2) * stride_uv +
+                        j * stride_uv];
 
    for (j = 0; j < (rh / 2); j++, i++)
-     rows[i] = &gst_data[h * w + j * (w / 2)];
+     rows[i] = &gst_data[h * stride_y + j * stride_uv];
 }
 
 static void
@@ -124,11 +136,14 @@ _evas_video_yuy2(unsigned char *evas_data, const unsigned char *gst_data, unsign
 {
    const unsigned char **rows;
    unsigned int i;
+   unsigned int stride;
 
    rows = (const unsigned char **)evas_data;
 
+   stride = GST_ROUND_UP_4(w * 2);
+
    for (i = 0; i < output_height; i++)
-     rows[i] = &gst_data[i * w * 2];
+     rows[i] = &gst_data[i * stride];
 }
 
 static void