From: Gerd Hoffmann <kraxel@redhat.com>
To: qemu-devel@nongnu.org
Cc: Gerd Hoffmann <kraxel@redhat.com>
Subject: [Qemu-devel] [PATCH 1/3] vnc: fix server surface pixel format.
Date: Mon, 27 Apr 2009 16:39:51 +0200 [thread overview]
Message-ID: <1240843193-15967-1-git-send-email-kraxel@redhat.com> (raw)
Format must be identical to the guest surface, we can't work with
the 32 bpp used by the default surface allocator.
Without this patch vnc doesn't get the conversions right when sending
pixel data to the client. The bug triggers if
(a) the client doesn't support WMVi, and
(b) the guest screen depth is != 32 bpp.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
vnc.c | 21 +++++++++------------
1 files changed, 9 insertions(+), 12 deletions(-)
diff --git a/vnc.c b/vnc.c
index ab1f044..8b381c9 100644
--- a/vnc.c
+++ b/vnc.c
@@ -366,17 +366,13 @@ static void vnc_resize(VncState *vs)
memset(vs->guest.dirty, 0xFF, sizeof(vs->guest.dirty));
/* server surface */
- if (!vs->server.ds) {
- vs->server.ds = default_allocator.create_displaysurface(ds_get_width(ds),
- ds_get_height(ds));
- } else {
- default_allocator.resize_displaysurface(vs->server.ds,
- ds_get_width(ds), ds_get_height(ds));
- }
- if (vs->server.ds->data == NULL) {
- fprintf(stderr, "vnc: memory allocation failed\n");
- exit(1);
- }
+ if (!vs->server.ds)
+ vs->server.ds = qemu_mallocz(sizeof(*vs->server.ds));
+ if (vs->server.ds->data)
+ qemu_free(vs->server.ds->data);
+ *(vs->server.ds) = *(ds->surface);
+ vs->server.ds->data = qemu_mallocz(vs->server.ds->linesize *
+ vs->server.ds->height);
memset(vs->server.dirty, 0xFF, sizeof(vs->guest.dirty));
}
@@ -918,7 +914,8 @@ int vnc_client_io_error(VncState *vs, int ret, int last_errno)
if (!vs->vd->clients)
dcl->idle = 1;
- default_allocator.free_displaysurface(vs->server.ds);
+ qemu_free(vs->server.ds->data);
+ qemu_free(vs->server.ds);
qemu_free(vs->guest.ds);
qemu_free(vs);
--
1.6.2.2
next reply other threads:[~2009-04-27 14:40 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-04-27 14:39 Gerd Hoffmann [this message]
2009-04-27 14:39 ` [Qemu-devel] [PATCH 2/3] vnc: no need to set force_update for incremental update requests Gerd Hoffmann
2009-04-27 14:39 ` [Qemu-devel] [PATCH 3/3] vnc: kill leftover debug statement Gerd Hoffmann
2009-04-27 14:58 ` [Qemu-devel] [PATCH 1/3] vnc: fix server surface pixel format Daniel Gollub
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1240843193-15967-1-git-send-email-kraxel@redhat.com \
--to=kraxel@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).