[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 5/6] vnc: allow fall back to RAW encoding
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PULL 5/6] vnc: allow fall back to RAW encoding |
Date: |
Tue, 3 Nov 2015 11:01:30 +0100 |
From: Peter Lieven <address@hidden>
I have observed that depending on the contents and the encoding it happens
that sending data as RAW sometimes would take less space than the encoded data.
This is especially the case for small updates or areas with high color images.
If sending RAW encoded data is beneficial allow a fall back to RAW encoding
for the framebuffer update.
Signed-off-by: Peter Lieven <address@hidden>
Signed-off-by: Gerd Hoffmann <address@hidden>
---
ui/vnc.c | 20 ++++++++++++++++++--
1 file changed, 18 insertions(+), 2 deletions(-)
diff --git a/ui/vnc.c b/ui/vnc.c
index 7b37e3b..166d1b5 100644
--- a/ui/vnc.c
+++ b/ui/vnc.c
@@ -840,6 +840,8 @@ int vnc_raw_send_framebuffer_update(VncState *vs, int x,
int y, int w, int h)
int vnc_send_framebuffer_update(VncState *vs, int x, int y, int w, int h)
{
int n = 0;
+ bool encode_raw = false;
+ size_t saved_offs = vs->output.offset;
switch(vs->vnc_encoding) {
case VNC_ENCODING_ZLIB:
@@ -862,10 +864,24 @@ int vnc_send_framebuffer_update(VncState *vs, int x, int
y, int w, int h)
n = vnc_zywrle_send_framebuffer_update(vs, x, y, w, h);
break;
default:
- vnc_framebuffer_update(vs, x, y, w, h, VNC_ENCODING_RAW);
- n = vnc_raw_send_framebuffer_update(vs, x, y, w, h);
+ encode_raw = true;
break;
}
+
+ /* If the client has the same pixel format as our internal buffer and
+ * a RAW encoding would need less space fall back to RAW encoding to
+ * save bandwidth and processing power in the client. */
+ if (!encode_raw && vs->write_pixels == vnc_write_pixels_copy &&
+ 12 + h * w * VNC_SERVER_FB_BYTES <= (vs->output.offset - saved_offs)) {
+ vs->output.offset = saved_offs;
+ encode_raw = true;
+ }
+
+ if (encode_raw) {
+ vnc_framebuffer_update(vs, x, y, w, h, VNC_ENCODING_RAW);
+ n = vnc_raw_send_framebuffer_update(vs, x, y, w, h);
+ }
+
return n;
}
--
1.8.3.1
- [Qemu-devel] [PULL 0/6] ui patch queue, Gerd Hoffmann, 2015/11/03
- [Qemu-devel] [PULL 1/6] ui/curses: Fix monitor color with -curses when 256 colors, Gerd Hoffmann, 2015/11/03
- [Qemu-devel] [PULL 6/6] vnc: fix bug: vnc server can't start when 'to' is specified, Gerd Hoffmann, 2015/11/03
- [Qemu-devel] [PULL 4/6] ui/opengl: Reduce build required libraries for opengl, Gerd Hoffmann, 2015/11/03
- [Qemu-devel] [PULL 2/6] ui/curses: Support line graphics chars on -curses mode, Gerd Hoffmann, 2015/11/03
- [Qemu-devel] [PULL 5/6] vnc: allow fall back to RAW encoding,
Gerd Hoffmann <=
- [Qemu-devel] [PULL 3/6] ui/curses: Fix pageup/pagedown on -curses, Gerd Hoffmann, 2015/11/03
- Re: [Qemu-devel] [PULL 0/6] ui patch queue, Peter Maydell, 2015/11/03