From: Constantin Kaplinsky Date: Fri, 9 Sep 2005 21:26:21 +0000 (+0000) Subject: Added boolean parameter "ImprovedHextile" which allows to use new X-Git-Tag: v0.0.90~384^2~518 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=c7e67f8cc7ddb2e84e1be7dc80c7423058edcacc;p=tigervnc.git 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 736bd5f7..515104e5 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 #include #include +#include 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 +#include #undef BPP #define BPP 16 #include +#include #undef BPP #define BPP 32 #include +#include #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; diff --git a/rfb/hextileEncodeBetter.h b/rfb/hextileEncodeBetter.h index 9c560106..ef4588ec 100644 --- a/rfb/hextileEncodeBetter.h +++ b/rfb/hextileEncodeBetter.h @@ -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) /********************************************************************/