changeset 3871:4d11f2ae7582 SDL-1.2

Fixed bug #276 PlanarPixmapInfoYUV420 is a big endian structure. Fix contributed by Jean-Charles BERTIN
author Sam Lantinga <slouken@libsdl.org>
date Sun, 24 Sep 2006 00:04:06 +0000
parents 571c75f3d093
children be84332e761e
files src/video/quartz/SDL_QuartzYUV.m
diffstat 1 files changed, 8 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/video/quartz/SDL_QuartzYUV.m	Sat Sep 23 23:15:34 2006 +0000
+++ b/src/video/quartz/SDL_QuartzYUV.m	Sun Sep 24 00:04:06 2006 +0000
@@ -274,6 +274,8 @@
             return NULL;
         }
 
+        /* Fix: jc.bertin@free.fr
+           PlanarPixmapInfoYUV420 is a big-endian struct */
         yuv_pixmap = (PlanarPixmapInfoYUV420*)
             SDL_malloc (sizeof(PlanarPixmapInfoYUV420) +
                     (width * height * 2));
@@ -291,20 +293,20 @@
         /* CHECK_ALIGN(pixels[0]); */
 
         pitches[0] = width;
-        yuv_pixmap->componentInfoY.offset = offset;
-        yuv_pixmap->componentInfoY.rowBytes = width;
+        yuv_pixmap->componentInfoY.offset = EndianS32_NtoB(offset);
+        yuv_pixmap->componentInfoY.rowBytes = EndianU32_NtoB(width);
 
         offset += width * height;
         pixels[plane2] = (Uint8*)yuv_pixmap + offset;
         pitches[plane2] = width / 2;
-        yuv_pixmap->componentInfoCb.offset = offset;
-        yuv_pixmap->componentInfoCb.rowBytes = width / 2;
+        yuv_pixmap->componentInfoCb.offset = EndianS32_NtoB(offset);
+        yuv_pixmap->componentInfoCb.rowBytes = EndianU32_NtoB(width / 2);
 
         offset += (width * height / 4);
         pixels[plane3] = (Uint8*)yuv_pixmap + offset;
         pitches[plane3] = width / 2;
-        yuv_pixmap->componentInfoCr.offset = offset;
-        yuv_pixmap->componentInfoCr.rowBytes = width / 2;
+        yuv_pixmap->componentInfoCr.offset = EndianS32_NtoB(offset);
+        yuv_pixmap->componentInfoCr.rowBytes = EndianU32_NtoB(width / 2);
 
         overlay->pixels = pixels;
         overlay->pitches = pitches;