summaryrefslogtreecommitdiffstats
path: root/libvo
diff options
context:
space:
mode:
authorrtognimp <rtognimp@b3059339-0415-0410-9bf9-f77b7e298cf2>2004-06-12 17:37:47 +0000
committerrtognimp <rtognimp@b3059339-0415-0410-9bf9-f77b7e298cf2>2004-06-12 17:37:47 +0000
commita68cbb44effe6d25865ffc002f98e616aa0c10e2 (patch)
tree3d366ce2135ff46a54e0aae0df767e132cb7ed4d /libvo
parent2583016302fcccfb6031d5065b82b9e29c9f321a (diff)
downloadmpv-a68cbb44effe6d25865ffc002f98e616aa0c10e2.tar.bz2
mpv-a68cbb44effe6d25865ffc002f98e616aa0c10e2.tar.xz
Fix for big endian systems
Patch by Jean-Francois Panisset < panisset (at) comcast (dot) net > git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@12574 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo')
-rw-r--r--libvo/vo_tga.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/libvo/vo_tga.c b/libvo/vo_tga.c
index 7d3b9d5993..b1c53ba759 100644
--- a/libvo/vo_tga.c
+++ b/libvo/vo_tga.c
@@ -11,8 +11,8 @@
* The 16 bit file are loaded without problem from Gimp and ImageMagick but give an error
* with entice (a visualizer from the enlightenment package that use the imlib2 package).
*
- * In 32 bit mode the alpha channel is set to 255 (0xff). I may not work with big endian
- * machine (is probably enought to change the TGA_ALPHA32 from 0xff000000 to 0x000000ff).
+ * In 32 bit mode the alpha channel is set to 255 (0xff). For big endian
+ * machines, TGA_ALPHA32 changes from 0xff000000 to 0x000000ff, and TGA_SHIFT32 from 0 to 8.
*
* I need to fill the alpha channel because entice consider that alpha channel (and displays
* nothing, only the background!), but ImageMacick (the program display) or gimp doesn't
@@ -35,8 +35,13 @@
#include "video_out.h"
#include "video_out_internal.h"
-/* This must be changed for Motorola type processor ? */
+#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 =
{
@@ -121,7 +126,7 @@ static int write_tga( char *file, int bpp, int dx, int dy, uint8_t *buf, int str
s = (uint32_t *)buf;
d = line_buff;
for(x = 0; x < dx; x++) {
- *d++ = *s++ | TGA_ALPHA32;
+ *d++ = ((*s++) << TGA_SHIFT32) | TGA_ALPHA32;
}
if (fwrite(line_buff, wb, 1, fo) != 1) {
er = 4;