Added options CompressLevel and CustomCompressLevel


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@58 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/rfb/CMsgWriter.cxx b/rfb/CMsgWriter.cxx
index 1693cbf..c9912ce 100644
--- a/rfb/CMsgWriter.cxx
+++ b/rfb/CMsgWriter.cxx
@@ -76,7 +76,9 @@
     }
   }
   encodings[nEncodings++] = pseudoEncodingLastRect;
-  if (cp->qualityLevel >= 0 && cp->qualityLevel <= 9)
+  if (cp->customCompressLevel && cp->compressLevel >= 0 && cp->compressLevel <= 9)
+      encodings[nEncodings++] = pseudoEncodingCompressLevel0 + cp->compressLevel;
+  if (!cp->noJpeg && cp->qualityLevel >= 0 && cp->qualityLevel <= 9)
       encodings[nEncodings++] = pseudoEncodingQualityLevel0 + cp->qualityLevel;
 
   writeSetEncodings(nEncodings, encodings);
diff --git a/rfb/ConnParams.cxx b/rfb/ConnParams.cxx
index 33cd21d..7dcfdcc 100644
--- a/rfb/ConnParams.cxx
+++ b/rfb/ConnParams.cxx
@@ -27,9 +27,9 @@
 
 ConnParams::ConnParams()
   : majorVersion(0), minorVersion(0), width(0), height(0), useCopyRect(false),
-    supportsLocalCursor(false), supportsDesktopResize(false),
-    supportsLastRect(false), qualityLevel(-1), noJpeg(false),
-    name_(0), nEncodings_(0), encodings_(0),
+    supportsLocalCursor(false), supportsDesktopResize(false), supportsLastRect(false), 
+    customCompressLevel(false), compressLevel(6), noJpeg(false), qualityLevel(-1), 
+    name_(0), nEncodings_(0), encodings_(0), 
     currentEncoding_(encodingRaw), verStrPos(0)
 {
   setName("");
@@ -89,8 +89,10 @@
   useCopyRect = false;
   supportsLocalCursor = false;
   supportsLastRect = false;
+  customCompressLevel = false;
+  compressLevel = -1;
+  noJpeg = true;
   qualityLevel = -1;
-  noJpeg = false;
   currentEncoding_ = encodingRaw;
 
   for (int i = nEncodings-1; i >= 0; i--) {
@@ -104,10 +106,15 @@
       supportsDesktopResize = true;
     else if (encodings[i] == pseudoEncodingLastRect)
       supportsLastRect = true;
-    else if (encodings[i] >= pseudoEncodingQualityLevel0 &&
-             encodings[i] <= pseudoEncodingQualityLevel9)
-	qualityLevel = encodings[i] - pseudoEncodingQualityLevel0;
-    else if (encodings[i] <= encodingMax && Encoder::supported(encodings[i]))
+    else if (encodings[i] >= pseudoEncodingCompressLevel0 &&
+	     encodings[i] <= pseudoEncodingCompressLevel9) {
+      customCompressLevel = true;
+      compressLevel = encodings[i] - pseudoEncodingCompressLevel0;
+    } else if (encodings[i] >= pseudoEncodingQualityLevel0 &&
+	       encodings[i] <= pseudoEncodingQualityLevel9) {
+      noJpeg = false;
+      qualityLevel = encodings[i] - pseudoEncodingQualityLevel0;
+    } else if (encodings[i] <= encodingMax && Encoder::supported(encodings[i]))
       currentEncoding_ = encodings[i];
   }
 }
diff --git a/rfb/ConnParams.h b/rfb/ConnParams.h
index 4d08b6d..70578ea 100644
--- a/rfb/ConnParams.h
+++ b/rfb/ConnParams.h
@@ -73,8 +73,10 @@
     bool supportsDesktopResize;
     bool supportsLastRect;
 
-    int qualityLevel;
+    bool customCompressLevel;
+    int compressLevel;
     bool noJpeg;
+    int qualityLevel;
 
   private:
 
diff --git a/rfb/encodings.h b/rfb/encodings.h
index f0f639b..a40af82 100644
--- a/rfb/encodings.h
+++ b/rfb/encodings.h
@@ -37,6 +37,8 @@
   const unsigned int pseudoEncodingLastRect = 0xFFFFFF20;
   const unsigned int pseudoEncodingQualityLevel0 = 0xFFFFFFE0;
   const unsigned int pseudoEncodingQualityLevel9 = 0xFFFFFFE9;
+  const unsigned int pseudoEncodingCompressLevel0 = 0xFFFFFF00;
+  const unsigned int pseudoEncodingCompressLevel9 = 0xFFFFFF00;
 
   int encodingNum(const char* name);
   const char* encodingName(unsigned int num);