summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjsorg71 <jsorg71>2009-02-23 08:45:41 +0000
committerjsorg71 <jsorg71>2009-02-23 08:45:41 +0000
commit67911e9fb9638d9fa2005c060867b2736bd25bf2 (patch)
tree722402a52c206015c5c300298ec27e4bed5d72db
parent7c7bbf1edc1cf9ae4fefba359405983dd5d0d351 (diff)
downloadxrdp-proprietary-67911e9fb9638d9fa2005c060867b2736bd25bf2.tar.gz
xrdp-proprietary-67911e9fb9638d9fa2005c060867b2736bd25bf2.zip
added 15bpp support
-rw-r--r--sesman/libscp/libscp_session.c1
-rw-r--r--vnc/vnc.c29
2 files changed, 28 insertions, 2 deletions
diff --git a/sesman/libscp/libscp_session.c b/sesman/libscp/libscp_session.c
index 13d0b13a..77cda2b8 100644
--- a/sesman/libscp/libscp_session.c
+++ b/sesman/libscp/libscp_session.c
@@ -126,6 +126,7 @@ scp_session_set_bpp(struct SCP_SESSION* s, tui8 bpp)
switch (bpp)
{
case 8:
+ case 15:
case 16:
case 24:
s->bpp = bpp;
diff --git a/vnc/vnc.c b/vnc/vnc.c
index 8a74107b..b2d5c66c 100644
--- a/vnc/vnc.c
+++ b/vnc/vnc.c
@@ -777,6 +777,12 @@ split_color(int pixel, int* r, int* g, int* b, int bpp, int* palette)
*b = (palette[pixel] >> 0) & 0xff;
}
}
+ else if (bpp == 15)
+ {
+ *r = ((pixel >> 7) & 0xf8) | ((pixel >> 12) & 0x7);
+ *g = ((pixel >> 2) & 0xf8) | ((pixel >> 8) & 0x7);
+ *b = ((pixel << 3) & 0xf8) | ((pixel >> 2) & 0x7);
+ }
else if (bpp == 16)
{
*r = ((pixel >> 8) & 0xf8) | ((pixel >> 13) & 0x7);
@@ -1146,9 +1152,10 @@ lib_mod_connect(struct vnc* v)
v->server_msg(v, "started connecting", 0);
check_sec_result = 1;
/* only support 8 and 16 bpp connections from rdp client */
- if ((v->server_bpp != 8) && (v->server_bpp != 16) && (v->server_bpp != 24))
+ if ((v->server_bpp != 8) && (v->server_bpp != 15) &&
+ (v->server_bpp != 16) && (v->server_bpp != 24))
{
- v->server_msg(v, "error - only supporting 8, 16 and 24 bpp rdp \
+ v->server_msg(v, "error - only supporting 8, 15, 16 and 24 bpp rdp \
connections", 0);
return 1;
}
@@ -1297,6 +1304,24 @@ connections", 0);
out_uint8(pixel_format, 0); /* blue shift */
out_uint8s(pixel_format, 3); /* pad */
}
+ else if (v->mod_bpp == 15)
+ {
+ out_uint8(pixel_format, 16); /* bits per pixel */
+ out_uint8(pixel_format, 15); /* depth */
+#if defined(B_ENDIAN)
+ out_uint8(pixel_format, 1); /* big endian */
+#else
+ out_uint8(pixel_format, 0); /* big endian */
+#endif
+ out_uint8(pixel_format, 1); /* true color flag */
+ out_uint16_be(pixel_format, 31); /* red max */
+ out_uint16_be(pixel_format, 31); /* green max */
+ out_uint16_be(pixel_format, 31); /* blue max */
+ out_uint8(pixel_format, 10); /* red shift */
+ out_uint8(pixel_format, 5); /* green shift */
+ out_uint8(pixel_format, 0); /* blue shift */
+ out_uint8s(pixel_format, 3); /* pad */
+ }
else if (v->mod_bpp == 16)
{
out_uint8(pixel_format, 16); /* bits per pixel */