You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
libtdevnc/libvncserver
DRC 7124b5fbcf Replace TightVNC encoder with TurboVNC encoder. This patch is the result of further research and discussion that revealed the following:
-- TightPng encoding and the rfbTightNoZlib extension need not conflict.  Since
   TightPng is a separate encoding type, not supported by TurboVNC-compatible
   viewers, then the rfbTightNoZlib extension can be used solely whenever the
   encoding type is Tight and disabled with the encoding type is TightPng.

-- In the TightVNC encoder, compression levels above 5 are basically useless.
   On the set of 20 low-level datasets that were used to design the TurboVNC
   encoder (these include the eight 2D application captures that were also used
   when designing the TightVNC encoder, as well as 12 3D application captures
   provided by the VirtualGL Project--
   see http://www.virtualgl.org/pmwiki/uploads/About/tighttoturbo.pdf), moving
   from Compression Level (CL) 5 to CL 9 in the TightVNC encoder did not
   increase the compression ratio of any datasets more than 10%, and the
   compression ratio only increased by more than 5% on four of them.  The
   compression ratio actually decreased a few percent on five of them.  In
   exchange for this paltry increase in compression ratio, the CPU usage, on
   average, went up by a factor of 5.  Thus, for all intents and purposes,
   TightVNC CL 5 provides the "best useful compression" for that encoder.

-- TurboVNC's best compression level (CL 2) compresses 3D and video workloads
   significantly more "tightly" than TightVNC CL 5 (~70% better, in the
   aggregate) but does not quite achieve the same level of compression with 2D
   workloads (~20% worse, in the aggregate.) This decrease in compression ratio
   may or may not be noticeable, since many of the datasets it affects are not
   performance-critical (such as the console output of a compilation, etc.)
   However, for peace of mind, it was still desirable to have a mode that
   compressed with equal "tightness" to TightVNC CL 5, since we proposed to
   replace that encoder entirely.

-- A new mode was discovered in the TurboVNC encoder that produces, in the
   aggregate, similar compression ratios on 2D datasets as TightVNC CL 5.  That
   new mode involves using Zlib level 7 (the same level used by TightVNC CL 5)
   but setting the "palette threshold" to 256, so that indexed color encoding
   is used whenever possible.  This mode reduces bandwidth only marginally
   (typically 10-20%) relative to TurboVNC CL 2 on low-color workloads, in
   exchange for nearly doubling CPU usage, and it does not benefit high-color
   workloads at all (since those are usually encoded with JPEG.)  However, it
   provides a means of reproducing the same "tightness" as the TightVNC
   encoder on 2D workloads without sacrificing any compression for 3D/video
   workloads, and without using any more CPU time than necessary.

-- The TurboVNC encoder still performs as well or better than the TightVNC
   encoder when plain libjpeg is used instead of libjpeg-turbo.

Specific notes follow:

common/turbojpeg.c common/turbojpeg.h:
Added code to emulate the libjpeg-turbo colorspace extensions, so that the
TurboJPEG wrapper can be used with plain libjpeg as well.  This required
updating the TurboJPEG wrapper to the latest code from libjpeg-turbo 1.2.0,
mainly because the TurboJPEG 1.2 API handles pixel formats in a much cleaner
way, which made the conversion code easier to write.  It also eases the
maintenance to have the wrapper synced as much as possible with the upstream
code base (so I can merge any relevant bug fixes that are discovered upstream.)
The libvncserver version of the TurboJPEG wrapper is a "lite" version,
containing only the JPEG compression/decompression code and not the lossless
transform, YUV encoding/decoding, and dynamic buffer allocation features from
TurboJPEG 1.2.

configure.ac:
Removed the --with-turbovnc option.  configure still checks for the presence of
libjpeg-turbo, but only for the purposes of printing a performance warning if
it isn't available.

rfb/rfb.h:
Fix a bug introduced with the initial TurboVNC encoder patch.  We cannot use
tightQualityLevel for the TurboVNC 1-100 quality level, because
tightQualityLevel is also used by ZRLE.  Thus, a new parameter
(turboQualityLevel) was created.

rfb/rfbproto.h:
Remove TurboVNC-specific #ifdefs and language

libvncserver/rfbserver.c:
Remove TurboVNC-specific #ifdefs.  Fix afore-mentioned tightQualityLevel bug.

libvncserver/tight.c:
Replaced the TightVNC encoder with the TurboVNC encoder.  Relative to the
initial TurboVNC encoder patch, this patch also:
-- Adds TightPng support to the TurboVNC encoder
-- Adds the afore-mentioned low-bandwidth mode, which is mapped externally to
   Compression Level 9

test/*:
Included TJUnitTest (a regression test for the TurboJPEG wrapper) as well as
TJBench (a benchmark for same.)  These are useful for ensuring that the wrapper
still functions correctly and performantly if it needs to be modified for
whatever reason.  Both of these programs are derived from libjpeg-turbo 1.2.0.
As with the TurboJPEG wrapper, they do not contain the more advanced features
of TurboJPEG 1.2, such as YUV encoding/decoding and lossless transforms.
14 years ago
..
tightvnc-filetransfer Fix buffer overflow 15 years ago
Makefile.am Replace TightVNC encoder with TurboVNC encoder. This patch is the result of further research and discussion that revealed the following: 14 years ago
auth.c Support Mac OS X vnc client with no password 14 years ago
cargs.c websockets: Add SSL cert command line options. 15 years ago
config.h move the library into libvncserver/, x11vnc into x11vnc/ 22 years ago
corre.c Set proper file permissions for source files. 15 years ago
cursor.c Add locks of updateMutex in rfbRedrawAfterHideCursor() and 16 years ago
cutpaste.c Set proper file permissions for source files. 15 years ago
draw.c Set proper file permissions for source files. 15 years ago
font.c Set proper file permissions for source files. 15 years ago
hextile.c Set proper file permissions for source files. 15 years ago
httpd.c novnc client: use the client's notion about the server hostname instead of what the server thinks. 14 years ago
main.c Remove some unused variables. 15 years ago
private.h libvncserver: Make RRE, CoRRE and Ultra encodings thread-safe. 15 years ago
rfbconfig.h move the library into libvncserver/, x11vnc into x11vnc/ 22 years ago
rfbcrypto.h Add support for different crypto implementations 14 years ago
rfbcrypto_gnutls.c Add support for different crypto implementations 14 years ago
rfbcrypto_included.c rfbcrypto_included: fix c&p errors 14 years ago
rfbcrypto_openssl.c Add support for different crypto implementations 14 years ago
rfbcrypto_polarssl.c rfbcrypto_polarssl: it was way to late last night... 14 years ago
rfbregion.c Set proper file permissions for source files. 15 years ago
rfbserver.c Replace TightVNC encoder with TurboVNC encoder. This patch is the result of further research and discussion that revealed the following: 14 years ago
rfbssl.h websockets: Add encryption support 15 years ago
rfbssl_gnutls.c Fix libvncserver GnuTLS init. 14 years ago
rfbssl_none.c websockets: Add encryption support 15 years ago
rfbssl_openssl.c websockets: add GnuTLS and OpenSSL support 15 years ago
rre.c Set proper file permissions for source files. 15 years ago
scale.c Fix compilation in c89 mode. 15 years ago
scale.h Fix compilation in c89 mode. 15 years ago
selbox.c Set proper file permissions for source files. 15 years ago
sockets.c websockets: Move Hixie disconnect hack to websockets.c 15 years ago
stats.c tightPng: Add initial tightPng encoding support. 15 years ago
tableinit24.c Set proper file permissions for source files. 15 years ago
tableinitcmtemplate.c Set proper file permissions for source files. 15 years ago
tableinittctemplate.c Set proper file permissions for source files. 15 years ago
tabletrans24template.c Set proper file permissions for source files. 15 years ago
tabletranstemplate.c Set proper file permissions for source files. 15 years ago
tight.c Replace TightVNC encoder with TurboVNC encoder. This patch is the result of further research and discussion that revealed the following: 14 years ago
translate.c Set proper file permissions for source files. 15 years ago
ultra.c Fix regression in Ultra encoding introduced by commit fe1ca16e9b. 15 years ago
websockets.c websockets: removed debug message 14 years ago
zlib.c Thread safety for zrle, zlib, tight. 17 years ago
zrle.c Fix remaining compiler warnings. 15 years ago
zrleencodetemplate.c Fix remaining compiler warnings. 15 years ago
zrleoutstream.c ANSIfy, fix some warnings from Linus' sparse 21 years ago
zrleoutstream.h move the library into libvncserver/, x11vnc into x11vnc/ 22 years ago
zrlepalettehelper.c move the library into libvncserver/, x11vnc into x11vnc/ 22 years ago
zrlepalettehelper.h move the library into libvncserver/, x11vnc into x11vnc/ 22 years ago
zrletypes.h Set proper file permissions for source files. 15 years ago