qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 1/3] vnc: fix server surface pixel format.
@ 2009-04-27 14:39 Gerd Hoffmann
  2009-04-27 14:39 ` [Qemu-devel] [PATCH 2/3] vnc: no need to set force_update for incremental update requests Gerd Hoffmann
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Gerd Hoffmann @ 2009-04-27 14:39 UTC (permalink / raw)
  To: qemu-devel; +Cc: Gerd Hoffmann

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

^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2009-04-27 14:58 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-04-27 14:39 [Qemu-devel] [PATCH 1/3] vnc: fix server surface pixel format Gerd Hoffmann
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

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).