From patchwork Wed Jul 7 18:58:04 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [v2,16/18] vnc: tight: fix rgb_prepare_row Date: Wed, 07 Jul 2010 08:58:04 -0000 From: Corentin Chary X-Patchwork-Id: 58144 Message-Id: <1278529086-10391-17-git-send-email-corentincj@iksaif.net> To: qemu-devel@nongnu.org Cc: Corentin Chary , Anthony Liguori , Alexander Graf rgb_prepare_row bpp depends on the server display surface, not the client. Signed-off-by: Corentin Chary --- ui/vnc-enc-tight.c | 15 ++++++++++----- 1 files changed, 10 insertions(+), 5 deletions(-) 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 */