Added boolean parameter "ImprovedHextile" which allows to use new
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
diff --git a/rfb/HextileEncoder.cxx b/rfb/HextileEncoder.cxx
index 736bd5f..515104e 100644
--- a/rfb/HextileEncoder.cxx
+++ b/rfb/HextileEncoder.cxx
@@ -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
@@ -19,19 +20,28 @@
#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 @@
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;
diff --git a/rfb/hextileEncodeBetter.h b/rfb/hextileEncodeBetter.h
index 9c56010..ef4588e 100644
--- a/rfb/hextileEncodeBetter.h
+++ b/rfb/hextileEncodeBetter.h
@@ -42,7 +42,7 @@
#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)
/********************************************************************/