[gtk-vnc] Change way encodings are disabled at runtime
- From: Daniel P. Berrange <dberrange src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk-vnc] Change way encodings are disabled at runtime
- Date: Tue, 20 Jul 2010 11:40:33 +0000 (UTC)
commit b1ee8a0b79f89365c32a540c89c60114c12d8718
Author: Daniel P. Berrange <dan berrange com>
Date: Wed Jul 14 14:09:10 2010 +0100
Change way encodings are disabled at runtime
The approach for disabling pseudo encodings is fragile because
it relies on ordering in the array. Rewrite to allow removing
arbitrary encodings
src/vncdisplay.c | 37 ++++++++++++++++++++++++-------------
1 files changed, 24 insertions(+), 13 deletions(-)
---
diff --git a/src/vncdisplay.c b/src/vncdisplay.c
index a6b9467..9ebdd7b 100644
--- a/src/vncdisplay.c
+++ b/src/vncdisplay.c
@@ -1283,8 +1283,10 @@ static void on_initialized(VncConnection *conn G_GNUC_UNUSED,
{
VncDisplay *obj = VNC_DISPLAY(opaque);
VncDisplayPrivate *priv = obj->priv;
+ int i;
- /* this order is extremely important! */
+ /* The order determines which encodings the
+ * server prefers when it has a choice to use */
gint32 encodings[] = { VNC_CONNECTION_ENCODING_TIGHT_JPEG5,
VNC_CONNECTION_ENCODING_TIGHT,
VNC_CONNECTION_ENCODING_EXT_KEY_EVENT,
@@ -1298,8 +1300,22 @@ static void on_initialized(VncConnection *conn G_GNUC_UNUSED,
VNC_CONNECTION_ENCODING_RRE,
VNC_CONNECTION_ENCODING_COPY_RECT,
VNC_CONNECTION_ENCODING_RAW };
- gint32 *encodingsp;
- int n_encodings;
+ int n_encodings = G_N_ELEMENTS(encodings);
+
+#define REMOVE_ENCODING(e) \
+ for (i = 0 ; i < n_encodings ; i++) { \
+ if (encodings[i] == e) { \
+ encodings[i] = 0; \
+ if (i < (n_encodings - 1)) \
+ memmove(encodings, \
+ encodings + i, \
+ sizeof(gint32) * \
+ (n_encodings - (i + 1))); \
+ n_encodings--; \
+ VNC_DEBUG("Removed encoding %d", e); \
+ break; \
+ } \
+ }
if (!vnc_display_set_preferred_pixel_format(obj))
goto error;
@@ -1310,21 +1326,16 @@ static void on_initialized(VncConnection *conn G_GNUC_UNUSED,
vnc_connection_get_height(priv->conn),
FALSE);
- encodingsp = encodings;
- n_encodings = G_N_ELEMENTS(encodings);
-
if (check_pixbuf_support("jpeg")) {
- if (!priv->allow_lossy) {
- encodingsp++;
- n_encodings--;
- }
+ if (!priv->allow_lossy)
+ REMOVE_ENCODING(VNC_CONNECTION_ENCODING_TIGHT_JPEG5);
} else {
- encodingsp += 2;
- n_encodings -= 2;
+ REMOVE_ENCODING(VNC_CONNECTION_ENCODING_TIGHT_JPEG5);
+ REMOVE_ENCODING(VNC_CONNECTION_ENCODING_TIGHT);
}
VNC_DEBUG("Sending %d encodings", n_encodings);
- if (!vnc_connection_set_encodings(priv->conn, n_encodings, encodingsp))
+ if (!vnc_connection_set_encodings(priv->conn, n_encodings, encodings))
goto error;
VNC_DEBUG("Requesting first framebuffer update");
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]