From: Corentin Chary Date: Wed, 7 Jul 2010 18:58:04 +0000 (+0200) Subject: vnc: tight: fix rgb_prepare_row X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=4043a0137b183e0df1e1404d4852aa7395788f55;p=qmiga%2Fqemu.git vnc: tight: fix rgb_prepare_row rgb_prepare_row bpp depends on the server display surface, not the client. Signed-off-by: Corentin Chary Signed-off-by: Anthony Liguori --- diff --git a/ui/vnc-enc-tight.c b/ui/vnc-enc-tight.c index 3f19df2ba7..eaa88cef9a 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 */