vncviewer shows all the wrong colours
Applicability:
3.3.3r2 -> 3.3.7 unix vncviewer Dunno 'bout later versions, sorry.
Circumstances:
unix vncviewer on a TrueColour X11 DISPLAY + viewer exec platform and DISPLAY have different endian-ness.
Description:
The vnc server sends pixels formatted for DISPLAY (as reported by the viewer), but Xlib already accounts for endian flipping between viewer and DISPLAY: as a result the pixels can be flipped twice, messing up all the colours. This patch fixes it by reporting the endian-ness of vncviewer's exec platform.
Patch:
cd vnc-3.3.*/vnc_unixsrc/vncviewer patch -lp3 <<Ooof
diff -urw vnc-3.3.3r2/vnc_unixsrc/vncviewer/colour.c vnc-3.3.3r2-16.12.03/vnc_unixsrc/vncviewer/colour.c --- vnc-3.3.3r2/vnc_unixsrc/vncviewer/colour.c 2003-12-16 17:14:35.657109572 +0000 +++ vnc-3.3.3r2-16.12.03/vnc_unixsrc/vncviewer/colour.c 2003-12-16 17:18:10.837739192 +0000 @@ -102,7 +102,7 @@ myFormat.bitsPerPixel = visbpp; myFormat.depth = visdepth; myFormat.trueColour = 1; - myFormat.bigEndian = (ImageByteOrder(dpy) == MSBFirst); + myFormat.bigEndian = !(*(char *)&endianTest); /* 16.12.03(mr) X11 converts viewer=>DISPLAY */ myFormat.redShift = ffs(vis->red_mask) - 1; myFormat.greenShift = ffs(vis->green_mask) - 1; myFormat.blueShift = ffs(vis->blue_mask) - 1; @@ -168,7 +168,7 @@ myFormat.bitsPerPixel = visbpp; myFormat.depth = visdepth; myFormat.trueColour = 0; - myFormat.bigEndian = (ImageByteOrder(dpy) == MSBFirst); + myFormat.bigEndian = !(*(char *)&endianTest); /* 16.12.03(mr) X11 converts viewer=>DISPLAY */ myFormat.redMax = myFormat.greenMax = myFormat.blueMax = 0; myFormat.redShift = myFormat.greenShift = myFormat.blueShift = 0;
@@ -224,7 +224,7 @@ myFormat.bitsPerPixel = visbpp; myFormat.depth = visdepth; myFormat.trueColour = 1; - myFormat.bigEndian = (ImageByteOrder(dpy) == MSBFirst); + myFormat.bigEndian = !(*(char *)&endianTest); /* 16.12.03(mr) X11 converts viewer=>DISPLAY */ myFormat.redShift = ffs(vis->red_mask) - 1; myFormat.greenShift = ffs(vis->green_mask) - 1; myFormat.blueShift = ffs(vis->blue_mask) - 1;
Ooof
--
Regards, Mark. _______________________________________________ VNC-List mailing list [EMAIL PROTECTED] To remove yourself from the list visit: http://www.realvnc.com/mailman/listinfo/vnc-list