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);