Added command line option -QualityLevel


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@21 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/jpeg/.cvsignore b/jpeg/.cvsignore
index 4408dc4..b43e5f8 100644
--- a/jpeg/.cvsignore
+++ b/jpeg/.cvsignore
@@ -6,3 +6,4 @@
 jpeg.plg
 config.log
 config.status
+jconfig.h
diff --git a/rfb/CMsgWriter.cxx b/rfb/CMsgWriter.cxx
index d429d7a..1693cbf 100644
--- a/rfb/CMsgWriter.cxx
+++ b/rfb/CMsgWriter.cxx
@@ -76,8 +76,9 @@
     }
   }
   encodings[nEncodings++] = pseudoEncodingLastRect;
-  // FIXME
-  encodings[nEncodings++] = pseudoEncodingQualityLevel9;
+  if (cp->qualityLevel >= 0 && cp->qualityLevel <= 9)
+      encodings[nEncodings++] = pseudoEncodingQualityLevel0 + cp->qualityLevel;
+
   writeSetEncodings(nEncodings, encodings);
 }
   
diff --git a/vncviewer/CViewOptions.cxx b/vncviewer/CViewOptions.cxx
index 089c4c4..1740c19 100644
--- a/vncviewer/CViewOptions.cxx
+++ b/vncviewer/CViewOptions.cxx
@@ -83,6 +83,10 @@
 static StringParameter monitor("Monitor", "The monitor to open the VNC Viewer window on, if available.", "");
 static StringParameter menuKey("MenuKey", "The key which brings up the popup menu", "F8");
 
+static IntParameter qualityLevel("QualityLevel",
+				 "JPEG quality level. "
+				 "0 = Low, 9 = High",
+				 5);
 
 CViewOptions::CViewOptions()
 : useLocalCursor(::useLocalCursor), useDesktopResize(::useDesktopResize),
@@ -90,7 +94,8 @@
 shared(::sharedConnection), sendPtrEvents(::sendPtrEvents), sendKeyEvents(::sendKeyEvents),
 preferredEncoding(encodingZRLE), clientCutText(::clientCutText), serverCutText(::serverCutText),
 protocol3_3(::protocol3_3), acceptBell(::acceptBell), lowColourLevel(::lowColourLevel),
-pointerEventInterval(ptrEventInterval), emulate3(::emulate3), monitor(::monitor.getData())
+pointerEventInterval(ptrEventInterval), emulate3(::emulate3), monitor(::monitor.getData()),
+qualityLevel(::qualityLevel)
 {
   CharArray encodingName(::preferredEncoding.getData());
   preferredEncoding = encodingNum(encodingName.buf);
@@ -190,6 +195,8 @@
             monitor.replaceBuf(value.takeBuf());
           } else if (stricmp(name.buf, "MenuKey") == 0) {
             setMenuKey(value.buf);
+          } else if (stricmp(name.buf, "QualityLevel") == 0) {
+	    qualityLevel = atoi(value.buf);
 
             // Legacy options
           } else if (stricmp(name.buf, "Preferred_Encoding") == 0) {
@@ -274,6 +281,7 @@
     if (monitor.buf)
       fprintf(f, "Monitor=%s\n", monitor.buf);
     fprintf(f, "MenuKey=%s\n", CharArray(menuKeyName()).buf);
+    fprintf(f, "QualityLevel=%d\n", qualityLevel);
     fclose(f); f=0;
 
     setConfigFileName(filename);
@@ -306,6 +314,7 @@
   if (monitor.buf)
     key.setString(_T("Monitor"), TStr(monitor.buf));
   key.setString(_T("MenuKey"), TCharArray(menuKeyName()).buf);
+  key.setInt(_T("QualityLevel"), qualityLevel);
 }
 
 
@@ -360,5 +369,6 @@
   setHost(o.host.buf);
   setMonitor(o.monitor.buf);
   menuKey = o.menuKey;
+  qualityLevel = o.qualityLevel;
   return *this;
-}
\ No newline at end of file
+}
diff --git a/vncviewer/CViewOptions.h b/vncviewer/CViewOptions.h
index 9120bde..31e4ead 100644
--- a/vncviewer/CViewOptions.h
+++ b/vncviewer/CViewOptions.h
@@ -77,6 +77,7 @@
       unsigned int menuKey;
       void setMenuKey(const char* keyName);
       char* menuKeyName();
+      int qualityLevel;
     };
 
 
diff --git a/vncviewer_unix/CConn.cxx b/vncviewer_unix/CConn.cxx
index 0b6431b..7229cc3 100644
--- a/vncviewer_unix/CConn.cxx
+++ b/vncviewer_unix/CConn.cxx
@@ -74,6 +74,7 @@
   }
   cp.supportsDesktopResize = true;
   cp.supportsLocalCursor = useLocalCursor;
+  cp.qualityLevel = qualityLevel;
   initMenu();
 
   if (sock) {
diff --git a/vncviewer_unix/parameters.h b/vncviewer_unix/parameters.h
index 815f5f1..41eb529 100644
--- a/vncviewer_unix/parameters.h
+++ b/vncviewer_unix/parameters.h
@@ -37,6 +37,7 @@
 extern rfb::BoolParameter sendPrimary;
 extern rfb::BoolParameter fullScreen;
 extern rfb::StringParameter geometry;
+extern rfb::IntParameter qualityLevel;
 
 extern char aboutText[];
 extern char* programName;
diff --git a/vncviewer_unix/vncviewer.cxx b/vncviewer_unix/vncviewer.cxx
index 7b9e37d..431aee4 100644
--- a/vncviewer_unix/vncviewer.cxx
+++ b/vncviewer_unix/vncviewer.cxx
@@ -93,6 +93,11 @@
 StringParameter geometry("geometry", "X geometry specification", "");
 StringParameter displayname("display", "The X display", "");
 
+IntParameter qualityLevel("QualityLevel",
+			  "JPEG quality level. "
+			  "0 = Low, 9 = High",
+			  5);
+
 char aboutText[256];
 char* programName;
 extern char buildtime[];