qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 1/4] vnc: set the right prefered encoding
@ 2010-05-06  8:39 Corentin Chary
  2010-05-06  8:39 ` [Qemu-devel] [PATCH 2/4] vnc: really call zlib if we want zlib Corentin Chary
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Corentin Chary @ 2010-05-06  8:39 UTC (permalink / raw)
  To: qemu-devel; +Cc: Corentin Chary, Anthony Liguori

>From RFB specs: "The order of the encoding types given in this
message is a hint by the client as to its preference (the first
encoding specified being most preferred)"

Signed-off-by: Corentin Chary <corentincj@iksaif.net>
---
 vnc.c |   15 +++++++++++----
 1 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/vnc.c b/vnc.c
index b1a3fdb..a91c3a3 100644
--- a/vnc.c
+++ b/vnc.c
@@ -1587,6 +1587,13 @@ static void send_ext_audio_ack(VncState *vs)
     vnc_flush(vs);
 }
 
+static void set_encoding(VncState *vs, int encoding)
+{
+    if (vs->vnc_encoding == -1) {
+        vs->vnc_encoding = encoding;
+    }
+}
+
 static void set_encodings(VncState *vs, int32_t *encodings, size_t n_encodings)
 {
     int i;
@@ -1594,7 +1601,7 @@ static void set_encodings(VncState *vs, int32_t *encodings, size_t n_encodings)
 
     vnc_zlib_init(vs);
     vs->features = 0;
-    vs->vnc_encoding = 0;
+    vs->vnc_encoding = -1;
     vs->tight_compression = 9;
     vs->tight_quality = 9;
     vs->absolute = -1;
@@ -1603,18 +1610,18 @@ 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;
+            set_encoding(vs, enc);
             break;
         case VNC_ENCODING_COPYRECT:
             vs->features |= VNC_FEATURE_COPYRECT_MASK;
             break;
         case VNC_ENCODING_HEXTILE:
             vs->features |= VNC_FEATURE_HEXTILE_MASK;
-            vs->vnc_encoding = enc;
+            set_encoding(vs, enc);
             break;
         case VNC_ENCODING_ZLIB:
             vs->features |= VNC_FEATURE_ZLIB_MASK;
-            vs->vnc_encoding = enc;
+            set_encoding(vs, enc);
             break;
         case VNC_ENCODING_DESKTOPRESIZE:
             vs->features |= VNC_FEATURE_RESIZE_MASK;
-- 
1.7.0.2

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

* [Qemu-devel] [PATCH 2/4] vnc: really call zlib if we want zlib
  2010-05-06  8:39 [Qemu-devel] [PATCH 1/4] vnc: set the right prefered encoding Corentin Chary
@ 2010-05-06  8:39 ` Corentin Chary
  2010-05-06  8:39 ` [Qemu-devel] [PATCH 3/4] vnc: only use a single zlib stream Corentin Chary
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Corentin Chary @ 2010-05-06  8:39 UTC (permalink / raw)
  To: qemu-devel; +Cc: Corentin Chary, Anthony Liguori

Signed-off-by: Corentin Chary <corentincj@iksaif.net>
---
 vnc.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/vnc.c b/vnc.c
index a91c3a3..d0c0d00 100644
--- a/vnc.c
+++ b/vnc.c
@@ -655,7 +655,7 @@ static void send_framebuffer_update(VncState *vs, int x, int y, int w, int h)
 {
     switch(vs->vnc_encoding) {
         case VNC_ENCODING_ZLIB:
-            vnc_hextile_send_framebuffer_update(vs, x, y, w, h);
+            vnc_zlib_send_framebuffer_update(vs, x, y, w, h);
             break;
         case VNC_ENCODING_HEXTILE:
             vnc_framebuffer_update(vs, x, y, w, h, VNC_ENCODING_HEXTILE);
-- 
1.7.0.2

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

* [Qemu-devel] [PATCH 3/4] vnc: only use a single zlib stream
  2010-05-06  8:39 [Qemu-devel] [PATCH 1/4] vnc: set the right prefered encoding Corentin Chary
  2010-05-06  8:39 ` [Qemu-devel] [PATCH 2/4] vnc: really call zlib if we want zlib Corentin Chary
@ 2010-05-06  8:39 ` Corentin Chary
  2010-05-06  8:39 ` [Qemu-devel] [PATCH 4/4] vnc: adjust compression zstream level Corentin Chary
  2010-05-18  7:16 ` [Qemu-devel] Re: [PATCH 1/4] vnc: set the right prefered encoding Corentin Chary
  3 siblings, 0 replies; 5+ messages in thread
From: Corentin Chary @ 2010-05-06  8:39 UTC (permalink / raw)
  To: qemu-devel; +Cc: Corentin Chary, Anthony Liguori

According to http://tigervnc.org/cgi-bin/rfbproto#zlib-encoding

Signed-off-by: Corentin Chary <corentincj@iksaif.net>
---
 vnc-encoding-zlib.c |   12 +++++-------
 vnc.h               |    2 +-
 2 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/vnc-encoding-zlib.c b/vnc-encoding-zlib.c
index 4a495ad..6a16a79 100644
--- a/vnc-encoding-zlib.c
+++ b/vnc-encoding-zlib.c
@@ -54,9 +54,9 @@ static void vnc_zlib_start(VncState *vs)
     vs->output = vs->zlib;
 }
 
-static int vnc_zlib_stop(VncState *vs, int stream_id)
+static int vnc_zlib_stop(VncState *vs)
 {
-    z_streamp zstream = &vs->zlib_stream[stream_id];
+    z_streamp zstream = &vs->zlib_stream;
     int previous_out;
 
     // switch back to normal output/zlib buffers
@@ -70,7 +70,7 @@ static int vnc_zlib_stop(VncState *vs, int stream_id)
     if (zstream->opaque != vs) {
         int err;
 
-        VNC_DEBUG("VNC: initializing zlib stream %d\n", stream_id);
+        VNC_DEBUG("VNC: initializing zlib stream\n");
         VNC_DEBUG("VNC: opaque = %p | vs = %p\n", zstream->opaque, vs);
         zstream->zalloc = zalloc;
         zstream->zfree = zfree;
@@ -122,7 +122,7 @@ void vnc_zlib_send_framebuffer_update(VncState *vs, int x, int y, int w, int h)
     // compress the stream
     vnc_zlib_start(vs);
     vnc_raw_send_framebuffer_update(vs, x, y, w, h);
-    bytes_written = vnc_zlib_stop(vs, 0);
+    bytes_written = vnc_zlib_stop(vs);
 
     if (bytes_written == -1)
         return;
@@ -136,7 +136,5 @@ void vnc_zlib_send_framebuffer_update(VncState *vs, int x, int y, int w, int h)
 
 void vnc_zlib_init(VncState *vs)
 {
-    int i;
-    for (i=0; i<(sizeof(vs->zlib_stream) / sizeof(z_stream)); i++)
-        vs->zlib_stream[i].opaque = NULL;
+    vs->zlib_stream.opaque = NULL;
 }
diff --git a/vnc.h b/vnc.h
index 1aa71b0..dfdb240 100644
--- a/vnc.h
+++ b/vnc.h
@@ -173,7 +173,7 @@ struct VncState
     /* Zlib */
     Buffer zlib;
     Buffer zlib_tmp;
-    z_stream zlib_stream[4];
+    z_stream zlib_stream;
 
     Notifier mouse_mode_notifier;
 
-- 
1.7.0.2

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

* [Qemu-devel] [PATCH 4/4] vnc: adjust compression zstream level
  2010-05-06  8:39 [Qemu-devel] [PATCH 1/4] vnc: set the right prefered encoding Corentin Chary
  2010-05-06  8:39 ` [Qemu-devel] [PATCH 2/4] vnc: really call zlib if we want zlib Corentin Chary
  2010-05-06  8:39 ` [Qemu-devel] [PATCH 3/4] vnc: only use a single zlib stream Corentin Chary
@ 2010-05-06  8:39 ` Corentin Chary
  2010-05-18  7:16 ` [Qemu-devel] Re: [PATCH 1/4] vnc: set the right prefered encoding Corentin Chary
  3 siblings, 0 replies; 5+ messages in thread
From: Corentin Chary @ 2010-05-06  8:39 UTC (permalink / raw)
  To: qemu-devel; +Cc: Corentin Chary, Anthony Liguori

Signed-off-by: Corentin Chary <corentincj@iksaif.net>
---
 vnc-encoding-zlib.c |    9 ++++++++-
 vnc.h               |    1 +
 2 files changed, 9 insertions(+), 1 deletions(-)

diff --git a/vnc-encoding-zlib.c b/vnc-encoding-zlib.c
index 6a16a79..29dd1b7 100644
--- a/vnc-encoding-zlib.c
+++ b/vnc-encoding-zlib.c
@@ -83,10 +83,17 @@ static int vnc_zlib_stop(VncState *vs)
             return -1;
         }
 
+        vs->zlib_level = vs->tight_compression;
         zstream->opaque = vs;
     }
 
-    // XXX what to do if tight_compression changed in between?
+    if (vs->tight_compression != vs->zlib_level) {
+        if (deflateParams(zstream, vs->tight_compression,
+                          Z_DEFAULT_STRATEGY) != Z_OK) {
+            return -1;
+        }
+        vs->zlib_level = vs->tight_compression;
+    }
 
     // reserve memory in output buffer
     buffer_reserve(&vs->output, vs->zlib.offset + 64);
diff --git a/vnc.h b/vnc.h
index dfdb240..96f3fe7 100644
--- a/vnc.h
+++ b/vnc.h
@@ -174,6 +174,7 @@ struct VncState
     Buffer zlib;
     Buffer zlib_tmp;
     z_stream zlib_stream;
+    int zlib_level;
 
     Notifier mouse_mode_notifier;
 
-- 
1.7.0.2

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

* [Qemu-devel] Re: [PATCH 1/4] vnc: set the right prefered encoding
  2010-05-06  8:39 [Qemu-devel] [PATCH 1/4] vnc: set the right prefered encoding Corentin Chary
                   ` (2 preceding siblings ...)
  2010-05-06  8:39 ` [Qemu-devel] [PATCH 4/4] vnc: adjust compression zstream level Corentin Chary
@ 2010-05-18  7:16 ` Corentin Chary
  3 siblings, 0 replies; 5+ messages in thread
From: Corentin Chary @ 2010-05-18  7:16 UTC (permalink / raw)
  To: qemu-devel; +Cc: Corentin Chary, Anthony Liguori

Forget this series, I'm sending a rebased one.

-- 
Corentin Chary
http://xf.iksaif.net

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

end of thread, other threads:[~2010-05-18 16:58 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-05-06  8:39 [Qemu-devel] [PATCH 1/4] vnc: set the right prefered encoding Corentin Chary
2010-05-06  8:39 ` [Qemu-devel] [PATCH 2/4] vnc: really call zlib if we want zlib Corentin Chary
2010-05-06  8:39 ` [Qemu-devel] [PATCH 3/4] vnc: only use a single zlib stream Corentin Chary
2010-05-06  8:39 ` [Qemu-devel] [PATCH 4/4] vnc: adjust compression zstream level Corentin Chary
2010-05-18  7:16 ` [Qemu-devel] Re: [PATCH 1/4] vnc: set the right prefered encoding Corentin Chary

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