changeset 22026:cac6e3b0d2e5

fix endianess, see bug #727
author lu_zero
date Sun, 28 Jan 2007 16:36:41 +0000
parents 8f9d757af58e
children 0b262e00bc99
files libvo/vo_tga.c
diffstat 1 files changed, 16 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/libvo/vo_tga.c	Sun Jan 28 14:48:14 2007 +0000
+++ b/libvo/vo_tga.c	Sun Jan 28 16:36:41 2007 +0000
@@ -37,14 +37,6 @@
 #include "video_out.h"
 #include "video_out_internal.h"
 
-#ifdef WORDS_BIGENDIAN
-#define TGA_ALPHA32   0x000000ff
-#define TGA_SHIFT32   8
-#else
-#define TGA_ALPHA32   0xff000000
-#define TGA_SHIFT32   0
-#endif
-
 static vo_info_t info =
 {
 	"Targa output",
@@ -121,14 +113,26 @@
             if (bpp == 32) {
                 /* Setup the alpha channel for every pixel */
                 while (dy-- > 0) {
-                    uint32_t    *d;
-                    uint32_t    *s;
+                    uint8_t    *d;
+                    uint8_t    *s;
                     int         x;
 
-                    s = (uint32_t *)buf;
+                    s = buf;
                     d = line_buff;
                     for(x = 0; x < dx; x++) {
-                        *d++ = ((*s++) << TGA_SHIFT32) | TGA_ALPHA32;
+                    #ifdef WORDS_BIGENDIAN
+                        d[0] = s[3];
+                        d[1] = s[2];
+                        d[2] = s[1];
+                        d[3] = 0xff;
+                    #else
+                        d[0] = 0xff;
+                        d[1] = s[1];
+                        d[2] = s[2];
+                        d[3] = s[3];
+                    #endif
+                        d+=4;
+                        s+=4;
                     }
                     if (fwrite(line_buff, wb, 1, fo) != 1) {
                         er = 4;