big endian fixes
git-svn-id: svn://svn.code.sf.net/p/rdesktop/code/trunk/rdesktop@482 423420c4-83ab-492f-b58f-81f9feb106b5
This commit is contained in:
parent
81f29fd475
commit
0a77a467d3
205
xwin.c
205
xwin.c
@ -280,24 +280,6 @@ translate_colour(uint32 colour)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
switch (g_bpp)
|
|
||||||
{
|
|
||||||
case 16:
|
|
||||||
if (g_host_be != g_xserver_be)
|
|
||||||
BSWAP16(colour);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 24:
|
|
||||||
if (g_xserver_be)
|
|
||||||
BSWAP24(colour);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 32:
|
|
||||||
if (g_host_be != g_xserver_be)
|
|
||||||
BSWAP32(colour);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return colour;
|
return colour;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -340,51 +322,126 @@ translate8to32(uint8 * data, uint32 * out, uint32 * end)
|
|||||||
/* todo the remaining translate function might need some big endian check ?? */
|
/* todo the remaining translate function might need some big endian check ?? */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
translate15to16(uint16 * data, uint16 * out, uint16 * end)
|
translate15to16(uint16 * data, uint8 * out, uint8 * end)
|
||||||
{
|
{
|
||||||
|
uint16 pixel;
|
||||||
|
uint16 value;
|
||||||
|
|
||||||
while (out < end)
|
while (out < end)
|
||||||
*(out++) = (uint16) make_colour16(split_colour15(*(data++)));
|
{
|
||||||
|
pixel = *(data++);
|
||||||
|
|
||||||
|
if (g_host_be)
|
||||||
|
{
|
||||||
|
BSWAP16(pixel)
|
||||||
|
}
|
||||||
|
|
||||||
|
value = make_colour16(split_colour15(pixel));
|
||||||
|
|
||||||
|
if (g_xserver_be)
|
||||||
|
{
|
||||||
|
*(out++) = value >> 8;
|
||||||
|
*(out++) = value;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*(out++) = value;
|
||||||
|
*(out++) = value >> 8;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
translate15to24(uint16 * data, uint8 * out, uint8 * end)
|
translate15to24(uint16 * data, uint8 * out, uint8 * end)
|
||||||
{
|
{
|
||||||
uint32 value;
|
uint32 value;
|
||||||
|
uint16 pixel;
|
||||||
|
|
||||||
while (out < end)
|
while (out < end)
|
||||||
{
|
{
|
||||||
value = make_colour24(split_colour15(*(data++)));
|
pixel = *(data++);
|
||||||
|
|
||||||
|
if (g_host_be)
|
||||||
|
{
|
||||||
|
BSWAP16(pixel)
|
||||||
|
}
|
||||||
|
|
||||||
|
value = make_colour24(split_colour15(pixel));
|
||||||
|
if (g_xserver_be)
|
||||||
|
{
|
||||||
|
*(out++) = value >> 16;
|
||||||
|
*(out++) = value >> 8;
|
||||||
|
*(out++) = value;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
*(out++) = value;
|
*(out++) = value;
|
||||||
*(out++) = value >> 8;
|
*(out++) = value >> 8;
|
||||||
*(out++) = value >> 16;
|
*(out++) = value >> 16;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
translate15to32(uint16 * data, uint32 * out, uint32 * end)
|
translate15to32(uint16 * data, uint8 * out, uint8 * end)
|
||||||
{
|
{
|
||||||
uint16 pixel;
|
uint16 pixel;
|
||||||
|
uint32 value;
|
||||||
|
|
||||||
while (out < end)
|
while (out < end)
|
||||||
{
|
{
|
||||||
|
pixel = *(data++);
|
||||||
|
|
||||||
if (g_host_be)
|
if (g_host_be)
|
||||||
{
|
{
|
||||||
pixel = *(data++);
|
BSWAP16(pixel);
|
||||||
pixel = (pixel & 0xff) << 8 | (pixel & 0xff00) >> 8;
|
}
|
||||||
*(out++) = make_colour32(split_colour15(pixel));
|
|
||||||
|
value = make_colour32(split_colour15(pixel));
|
||||||
|
|
||||||
|
if (g_xserver_be)
|
||||||
|
{
|
||||||
|
*(out++) = value >> 24;
|
||||||
|
*(out++) = value >> 16;
|
||||||
|
*(out++) = value >> 8;
|
||||||
|
*(out++) = value;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
*(out++) = make_colour32(split_colour15(*(data++)));
|
*(out++) = value;
|
||||||
|
*(out++) = value >> 8;
|
||||||
|
*(out++) = value >> 16;
|
||||||
|
*(out++) = value >> 24;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
translate16to16(uint16 * data, uint16 * out, uint16 * end)
|
translate16to16(uint16 * data, uint16 * out, uint16 * end)
|
||||||
|
{
|
||||||
|
uint16 value;
|
||||||
|
|
||||||
|
if (g_xserver_be)
|
||||||
{
|
{
|
||||||
while (out < end)
|
while (out < end)
|
||||||
*(out++) = (uint16) (*(data++));
|
{
|
||||||
|
value = *data;
|
||||||
|
BSWAP16(value);
|
||||||
|
*out = value;
|
||||||
|
data++;
|
||||||
|
out++;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
while (out < end)
|
||||||
|
{
|
||||||
|
*out = *data;
|
||||||
|
out++;
|
||||||
|
data++;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -392,46 +449,91 @@ static void
|
|||||||
translate16to24(uint16 * data, uint8 * out, uint8 * end)
|
translate16to24(uint16 * data, uint8 * out, uint8 * end)
|
||||||
{
|
{
|
||||||
uint32 value;
|
uint32 value;
|
||||||
|
uint16 pixel;
|
||||||
|
|
||||||
while (out < end)
|
while (out < end)
|
||||||
{
|
{
|
||||||
value = make_colour24(split_colour16(*(data++)));
|
pixel = *(data++);
|
||||||
|
|
||||||
|
if (g_host_be)
|
||||||
|
{
|
||||||
|
BSWAP16(pixel)
|
||||||
|
}
|
||||||
|
|
||||||
|
value = make_colour24(split_colour16(pixel));
|
||||||
|
|
||||||
|
if (g_xserver_be)
|
||||||
|
{
|
||||||
|
*(out++) = value >> 16;
|
||||||
|
*(out++) = value >> 8;
|
||||||
|
*(out++) = value;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
*(out++) = value;
|
*(out++) = value;
|
||||||
*(out++) = value >> 8;
|
*(out++) = value >> 8;
|
||||||
*(out++) = value >> 16;
|
*(out++) = value >> 16;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
translate16to32(uint16 * data, uint32 * out, uint32 * end)
|
translate16to32(uint16 * data, uint8 * out, uint8 * end)
|
||||||
{
|
{
|
||||||
uint16 pixel;
|
uint16 pixel;
|
||||||
|
uint32 value;
|
||||||
|
|
||||||
while (out < end)
|
while (out < end)
|
||||||
{
|
{
|
||||||
|
pixel = *(data++);
|
||||||
|
|
||||||
if (g_host_be)
|
if (g_host_be)
|
||||||
{
|
{
|
||||||
pixel = *(data++);
|
BSWAP16(pixel)
|
||||||
pixel = (pixel & 0xff) << 8 | (pixel & 0xff00) >> 8;
|
}
|
||||||
*(out++) = make_colour32(split_colour16(pixel));
|
|
||||||
|
value = make_colour32(split_colour16(pixel));
|
||||||
|
|
||||||
|
if (g_xserver_be)
|
||||||
|
{
|
||||||
|
*(out++) = value >> 24;
|
||||||
|
*(out++) = value >> 16;
|
||||||
|
*(out++) = value >> 8;
|
||||||
|
*(out++) = value;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
*(out++) = make_colour32(split_colour16(*(data++)));
|
*(out++) = value;
|
||||||
|
*(out++) = value >> 8;
|
||||||
|
*(out++) = value >> 16;
|
||||||
|
*(out++) = value >> 24;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
translate24to16(uint8 * data, uint16 * out, uint16 * end)
|
translate24to16(uint8 * data, uint8 * out, uint8 * end)
|
||||||
{
|
{
|
||||||
uint32 pixel = 0;
|
uint32 pixel = 0;
|
||||||
|
uint16 value;
|
||||||
while (out < end)
|
while (out < end)
|
||||||
{
|
{
|
||||||
pixel = *(data++) << 16;
|
pixel = *(data++) << 16;
|
||||||
pixel |= *(data++) << 8;
|
pixel |= *(data++) << 8;
|
||||||
pixel |= *(data++);
|
pixel |= *(data++);
|
||||||
*(out++) = (uint16) make_colour16(split_colour24(pixel));
|
|
||||||
|
value = (uint16) make_colour16(split_colour24(pixel));
|
||||||
|
|
||||||
|
if (g_xserver_be)
|
||||||
|
{
|
||||||
|
*(out++) = value >> 8;
|
||||||
|
*(out++) = value;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*(out++) = value;
|
||||||
|
*(out++) = value >> 8;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -445,24 +547,24 @@ translate24to24(uint8 * data, uint8 * out, uint8 * end)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
translate24to32(uint8 * data, uint32 * out, uint32 * end)
|
translate24to32(uint8 * data, uint8 * out, uint8 * end)
|
||||||
{
|
{
|
||||||
uint32 pixel = 0;
|
|
||||||
while (out < end)
|
while (out < end)
|
||||||
{
|
{
|
||||||
if (g_host_be)
|
if (g_xserver_be)
|
||||||
{
|
{
|
||||||
pixel = *(data++) << 16;
|
*(out++) = 0x00;
|
||||||
pixel |= *(data++) << 8;
|
*(out++) = *(data++);
|
||||||
pixel |= *(data++);
|
*(out++) = *(data++);
|
||||||
|
*(out++) = *(data++);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pixel = *(data++);
|
*(out++) = *(data++);
|
||||||
pixel |= *(data++) << 8;
|
*(out++) = *(data++);
|
||||||
pixel |= *(data++) << 16;
|
*(out++) = *(data++);
|
||||||
|
*(out++) = 0x00;
|
||||||
}
|
}
|
||||||
*(out++) = pixel;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -479,13 +581,13 @@ translate_image(int width, int height, uint8 * data)
|
|||||||
switch (g_bpp)
|
switch (g_bpp)
|
||||||
{
|
{
|
||||||
case 32:
|
case 32:
|
||||||
translate24to32(data, (uint32 *) out, (uint32 *) end);
|
translate24to32(data, out, end);
|
||||||
break;
|
break;
|
||||||
case 24:
|
case 24:
|
||||||
translate24to24(data, out, end);
|
translate24to24(data, out, end);
|
||||||
break;
|
break;
|
||||||
case 16:
|
case 16:
|
||||||
translate24to16(data, (uint16 *) out, (uint16 *) end);
|
translate24to16(data, out, end);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -493,8 +595,7 @@ translate_image(int width, int height, uint8 * data)
|
|||||||
switch (g_bpp)
|
switch (g_bpp)
|
||||||
{
|
{
|
||||||
case 32:
|
case 32:
|
||||||
translate16to32((uint16 *) data, (uint32 *) out,
|
translate16to32((uint16 *) data, out, end);
|
||||||
(uint32 *) end);
|
|
||||||
break;
|
break;
|
||||||
case 24:
|
case 24:
|
||||||
translate16to24((uint16 *) data, out, end);
|
translate16to24((uint16 *) data, out, end);
|
||||||
@ -509,15 +610,13 @@ translate_image(int width, int height, uint8 * data)
|
|||||||
switch (g_bpp)
|
switch (g_bpp)
|
||||||
{
|
{
|
||||||
case 32:
|
case 32:
|
||||||
translate15to32((uint16 *) data, (uint32 *) out,
|
translate15to32((uint16 *) data, out, end);
|
||||||
(uint32 *) end);
|
|
||||||
break;
|
break;
|
||||||
case 24:
|
case 24:
|
||||||
translate15to24((uint16 *) data, out, end);
|
translate15to24((uint16 *) data, out, end);
|
||||||
break;
|
break;
|
||||||
case 16:
|
case 16:
|
||||||
translate15to16((uint16 *) data, (uint16 *) out,
|
translate15to16((uint16 *) data, out, end);
|
||||||
(uint16 *) end);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user