Extensions for fine-grained image quality control

DRC dcommander at users.sourceforge.net
Tue Aug 25 05:32:05 BST 2009


Hi.  I run the VirtualGL Project, which produces a TightVNC derivative
called TurboVNC.  I am also involved with the next generation TigerVNC
Project, which aims to replace both.  TurboVNC has been unofficially
using the following extensions to the RFB protocol, and I wanted to see
if I could make these official so we could use them in TigerVNC as well:


Special encoding numbers:
-------------------------
0xFFFFFE00 .. 0xFFFFFE64 -- fine-grained quality level (0-100 scale)

rfbEncodingFineQualityLevel0       0xFFFFFE00
rfbEncodingFineQualityLevel100     0xFFFFFE64

0xFFFFFD00 .. 0xFFFFFD05 -- subsampling level, for image compression
methods that support it

rfbEncodingSubsamp1X               0xFFFFFD00
rfbEncodingSubsamp4X               0xFFFFFD01
rfbEncodingSubsamp2X               0xFFFFFD02
rfbEncodingSubsampGray             0xFFFFFD03
rfbEncodingSubsamp8X               0xFFFFFD04
rfbEncodingSubsamp16X              0xFFFFFD05

(NOTE: these are out of order for historical reasons.)

sig_rfbEncodingFineQualityLevel   "FINEQLVL"
sig_rfbEncodingSubsampLevel       "SSAMPLVL"


Tight Encoding:
---------------

Propose to extend the compression control byte for Tight encoding as
follows:

rfbTightNoZlib                 0x0A

The first byte of each Tight-encoded rectangle is a "compression control
byte".  Its format is as follows (bit 0 is the least significant one):

bit 0:    if 1, then compression stream 0 should be reset;
bit 1:    if 1, then compression stream 1 should be reset;
bit 2:    if 1, then compression stream 2 should be reset;
bit 3:    if 1, then compression stream 3 should be reset;
bits 7-4: if 1000 (0x08), then the compression type is "fill",
          if 1001 (0x09), then the compression type is "jpeg",

          (*** NEW ***) if 1010 (0x0A), then the compression type is
"basic" and no Zlib compression was used (*** NEW ***)

          if 0xxx, then the compression type is "basic" and Zlib
compression was used,
          values greater than 1010 are not valid.

If the compression type is "basic" and Zlib compression was used, then
bits 5..4 of the compression control byte specify the following:

bits 5-4:  decimal representation is the index of a particular zlib
           stream which should be used for decompressing the data.

Bit 6 of the compression control byte specifies the following,
regardless of whether Zlib compression was used:

bit 6:     if 1, then a "filter id" byte is following this byte.
...




More information about the VNC-List mailing list