Move image encoding logic into a central EncodeManager class
This allows us to apply a lot more server logic
independently of which encoder is in use.
Most of this class are things moved over from the
Tight encoder.
diff --git a/common/rfb/ConnParams.cxx b/common/rfb/ConnParams.cxx
index 36f6daa..cc0a768 100644
--- a/common/rfb/ConnParams.cxx
+++ b/common/rfb/ConnParams.cxx
@@ -22,7 +22,7 @@
#include <rdr/OutStream.h>
#include <rfb/Exception.h>
#include <rfb/encodings.h>
-#include <rfb/Encoder.h>
+#include <rfb/EncodeManager.h>
#include <rfb/ConnParams.h>
#include <rfb/util.h>
@@ -38,7 +38,7 @@
supportsContinuousUpdates(false),
compressLevel(2), qualityLevel(-1), fineQualityLevel(-1),
subsampling(subsampleUndefined), name_(0),
- currentEncoding_(encodingRaw), verStrPos(0)
+ preferredEncoding_(encodingRaw), verStrPos(0)
{
setName("");
}
@@ -101,6 +101,11 @@
memcpy(cursor_.mask.buf, other.mask.buf, cursor_.maskLen());
}
+bool ConnParams::supportsEncoding(rdr::S32 encoding)
+{
+ return encodings_.count(encoding) != 0;
+}
+
void ConnParams::setEncodings(int nEncodings, const rdr::S32* encodings)
{
useCopyRect = false;
@@ -113,7 +118,10 @@
qualityLevel = -1;
fineQualityLevel = -1;
subsampling = subsampleUndefined;
- currentEncoding_ = encodingRaw;
+ preferredEncoding_ = encodingRaw;
+
+ encodings_.clear();
+ encodings_.insert(encodingRaw);
for (int i = nEncodings-1; i >= 0; i--) {
switch (encodings[i]) {
@@ -176,7 +184,10 @@
encodings[i] <= pseudoEncodingFineQualityLevel100)
fineQualityLevel = encodings[i] - pseudoEncodingFineQualityLevel0;
- if (Encoder::supported(encodings[i]))
- currentEncoding_ = encodings[i];
+ if (EncodeManager::supported(encodings[i]))
+ preferredEncoding_ = encodings[i];
+
+ if (encodings[i] > 0)
+ encodings_.insert(encodings[i]);
}
}