From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LSuVk-00016X-3g for qemu-devel@nongnu.org; Fri, 30 Jan 2009 09:38:24 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LSuVe-00010S-IS for qemu-devel@nongnu.org; Fri, 30 Jan 2009 09:38:20 -0500 Received: from [199.232.76.173] (port=37688 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LSuVe-00010A-DQ for qemu-devel@nongnu.org; Fri, 30 Jan 2009 09:38:18 -0500 Received: from cantor2.suse.de ([195.135.220.15]:48164 helo=mx2.suse.de) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1LSuVd-0007x8-Q1 for qemu-devel@nongnu.org; Fri, 30 Jan 2009 09:38:18 -0500 From: Alexander Graf Date: Fri, 30 Jan 2009 15:38:10 +0100 Message-Id: <1233326293-8591-5-git-send-email-agraf@suse.de> In-Reply-To: <1233326293-8591-4-git-send-email-agraf@suse.de> References: <1233326293-8591-1-git-send-email-agraf@suse.de> <1233326293-8591-2-git-send-email-agraf@suse.de> <1233326293-8591-3-git-send-email-agraf@suse.de> <1233326293-8591-4-git-send-email-agraf@suse.de> Subject: [Qemu-devel] [PATCH 4/7] Add some tight awareness to vnc.c Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org This patch enables the vnc server to understand fundamental tight extensions. It changes from a "Hextile or not" scheme when sending framebuffer updates to a "preferred encoding", namely the last one set. While this is not perfect, as actually a list of "preferred encodings" should be kept, it's good enough for now. Signed-off-by: Alexander Graf --- vnc.c | 23 +++++++++++++++++++++-- 1 files changed, 21 insertions(+), 2 deletions(-) diff --git a/vnc.c b/vnc.c index 4b17f85..31ea131 100644 --- a/vnc.c +++ b/vnc.c @@ -103,6 +103,10 @@ struct VncState int last_x; int last_y; + uint32_t vnc_encoding; + uint8_t tight_quality; + uint8_t tight_compression; + int major; int minor; @@ -450,10 +454,14 @@ static void send_framebuffer_update_hextile(VncState *vs, int x, int y, int w, i static void send_framebuffer_update(VncState *vs, int x, int y, int w, int h) { - if (vnc_has_feature(vs, VNC_FEATURE_HEXTILE)) + switch(vs->vnc_encoding) { + case VNC_ENCODING_HEXTILE: send_framebuffer_update_hextile(vs, x, y, w, h); - else + break; + default: send_framebuffer_update_raw(vs, x, y, w, h); + break; + } } static void vnc_copy(DisplayState *ds, int src_x, int src_y, int dst_x, int dst_y, int w, int h) @@ -1164,6 +1172,9 @@ static void set_encodings(VncState *vs, int32_t *encodings, size_t n_encodings) unsigned int enc = 0; vs->features = 0; + vs->vnc_encoding = 0; + vs->tight_compression = 9; + vs->tight_quality = 9; vs->absolute = -1; dcl->dpy_copy = NULL; @@ -1171,12 +1182,14 @@ static void set_encodings(VncState *vs, int32_t *encodings, size_t n_encodings) enc = encodings[i]; switch (enc) { case VNC_ENCODING_RAW: + vs->vnc_encoding = enc; break; case VNC_ENCODING_COPYRECT: dcl->dpy_copy = vnc_copy; break; case VNC_ENCODING_HEXTILE: vs->features |= VNC_FEATURE_HEXTILE_MASK; + vs->vnc_encoding = enc; break; case VNC_ENCODING_DESKTOPRESIZE: vs->features |= VNC_FEATURE_RESIZE_MASK; @@ -1193,6 +1206,12 @@ static void set_encodings(VncState *vs, int32_t *encodings, size_t n_encodings) case VNC_ENCODING_WMVi: vs->features |= VNC_FEATURE_WMVI_MASK; break; + case VNC_ENCODING_COMPRESSLEVEL0 ... VNC_ENCODING_COMPRESSLEVEL0 + 9: + vs->tight_compression = (enc & 0x0F); + break; + case VNC_ENCODING_QUALITYLEVEL0 ... VNC_ENCODING_QUALITYLEVEL0 + 9: + vs->tight_quality = (enc & 0x0F); + break; default: VNC_DEBUG("Unknown encoding: %d (0x%.8x): %d\n", i, enc, enc); break; -- 1.6.0.2