Patchwork [v2,16/18] vnc: tight: fix rgb_prepare_row

login
register
mail settings
Submitter Corentin Chary
Date July 7, 2010, 6:58 p.m.
Message ID <1278529086-10391-17-git-send-email-corentincj@iksaif.net>
Download mbox | patch
Permalink /patch/58144/
State New
Headers show

Comments

Corentin Chary - July 7, 2010, 6:58 p.m.
rgb_prepare_row bpp depends on the server display surface, not
the client.

Signed-off-by: Corentin Chary <corentincj@iksaif.net>
---
 ui/vnc-enc-tight.c |   15 ++++++++++-----
 1 files changed, 10 insertions(+), 5 deletions(-)

Patch

diff --git a/ui/vnc-enc-tight.c b/ui/vnc-enc-tight.c
index 3f19df2..eaa88ce 100644
--- a/ui/vnc-enc-tight.c
+++ b/ui/vnc-enc-tight.c
@@ -1180,12 +1180,17 @@  DEFINE_RGB_GET_ROW_FUNCTION(32)
 static void rgb_prepare_row(VncState *vs, uint8_t *dst, int x, int y,
                             int count)
 {
-    if (vs->tight.pixel24)
-        rgb_prepare_row24(vs, dst, x, y, count);
-    else if (ds_get_bytes_per_pixel(vs->ds) == 4)
-        rgb_prepare_row32(vs, dst, x, y, count);
-    else
+    if (ds_get_bytes_per_pixel(vs->ds) == 4) {
+        if (vs->ds->surface->pf.rmax == 0xFF &&
+            vs->ds->surface->pf.gmax == 0xFF &&
+            vs->ds->surface->pf.bmax == 0xFF) {
+            rgb_prepare_row24(vs, dst, x, y, count);
+        } else {
+            rgb_prepare_row32(vs, dst, x, y, count);
+        }
+    } else {
         rgb_prepare_row16(vs, dst, x, y, count);
+    }
 }
 #endif /* CONFIG_VNC_JPEG or CONFIG_VNC_PNG */