]> source.dussan.org Git - tigervnc.git/commitdiff
Added boolean parameter "ImprovedHextile" which allows to use new
authorConstantin Kaplinsky <const@tightvnc.com>
Fri, 9 Sep 2005 21:26:21 +0000 (21:26 +0000)
committerConstantin Kaplinsky <const@tightvnc.com>
Fri, 9 Sep 2005 21:26:21 +0000 (21:26 +0000)
Hextile encoding algorithm. The old algorithm is used by default,
excluding 8-bit data on which new algorithm is used regardless of this
parameter's value.

git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@317 3789f03b-4d11-0410-bbf8-ca57d06f2519

rfb/HextileEncoder.cxx
rfb/hextileEncodeBetter.h

index 736bd5f79d69a5504a79b9c6a307df3afcd402bd..515104e5f7bbe07c01148003c558df4916dc16c3 100644 (file)
@@ -1,4 +1,5 @@
 /* Copyright (C) 2002-2004 RealVNC Ltd.  All Rights Reserved.
+ * Copyright (C) 2005 Constantin Kaplinsky.  All Rights Reserved.
  *    
  * This is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 #include <rfb/encodings.h>
 #include <rfb/SMsgWriter.h>
 #include <rfb/HextileEncoder.h>
+#include <rfb/Configuration.h>
 
 using namespace rfb;
 
+BoolParameter improvedHextile("ImprovedHextile",
+                              "Use improved compression algorithm for Hextile "
+                              "encoding which achieves better compression "
+                              "ratios by the cost of using more CPU time",
+                              false);
+
 #define EXTRA_ARGS ImageGetter* ig
 #define GET_IMAGE_INTO_BUF(r,buf) ig->getImage(buf, r);
 #define BPP 8
-#include <rfb/hextileEncode.h>
+#include <rfb/hextileEncodeBetter.h>
 #undef BPP
 #define BPP 16
 #include <rfb/hextileEncode.h>
+#include <rfb/hextileEncodeBetter.h>
 #undef BPP
 #define BPP 32
 #include <rfb/hextileEncode.h>
+#include <rfb/hextileEncodeBetter.h>
 #undef BPP
 
 Encoder* HextileEncoder::create(SMsgWriter* writer)
@@ -52,9 +62,24 @@ bool HextileEncoder::writeRect(const Rect& r, ImageGetter* ig, Rect* actual)
   writer->startRect(r, encodingHextile);
   rdr::OutStream* os = writer->getOutStream();
   switch (writer->bpp()) {
-  case 8:  hextileEncode8(r, os, ig);  break;
-  case 16: hextileEncode16(r, os, ig); break;
-  case 32: hextileEncode32(r, os, ig); break;
+  case 8:
+    // NOTE: We always use improved Hextile for 8-bit data.
+    hextileEncodeBetter8(r, os, ig);
+    break;
+  case 16:
+    if (improvedHextile) {
+      hextileEncodeBetter16(r, os, ig);
+    } else {
+      hextileEncode16(r, os, ig);
+    }
+    break;
+  case 32:
+    if (improvedHextile) {
+      hextileEncodeBetter32(r, os, ig);
+    } else {
+      hextileEncode32(r, os, ig);
+    }
+    break;
   }
   writer->endRect();
   return true;
index 9c560106b48ef440ae41a422b5a7c70d42155fc1..ef4588ec3e0ef491801546a0c2bafd3f2c718b03 100644 (file)
@@ -42,7 +42,7 @@ namespace rfb {
 
 #define PIXEL_T rdr::CONCAT2E(U,BPP)
 #define WRITE_PIXEL CONCAT2E(writeOpaque,BPP)
-#define HEXTILE_ENCODE CONCAT2E(hextileEncode,BPP)
+#define HEXTILE_ENCODE CONCAT2E(hextileEncodeBetter,BPP)
 
 /********************************************************************/