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/SMsgWriter.cxx b/common/rfb/SMsgWriter.cxx
index 46c4138..3698cb6 100644
--- a/common/rfb/SMsgWriter.cxx
+++ b/common/rfb/SMsgWriter.cxx
@@ -34,12 +34,11 @@
static LogWriter vlog("SMsgWriter");
SMsgWriter::SMsgWriter(ConnParams* cp_, rdr::OutStream* os_)
- : imageBufIdealSize(0), cp(cp_), os(os_), currentEncoding(0),
+ : cp(cp_), os(os_), currentEncoding(0),
nRectsInUpdate(0), nRectsInHeader(0),
needSetDesktopSize(false), needExtendedDesktopSize(false),
needSetDesktopName(false), needSetCursor(false), needSetXCursor(false),
- lenBeforeRect(0), updatesSent(0), rawBytesEquivalent(0),
- imageBuf(0), imageBufSize(0)
+ lenBeforeRect(0), updatesSent(0), rawBytesEquivalent(0)
{
for (int i = 0; i <= encodingMax; i++) {
bytesSent[i] = 0;
@@ -60,7 +59,6 @@
}
vlog.info(" raw bytes equivalent %llu, compression ratio %f",
rawBytesEquivalent, (double)rawBytesEquivalent / bytes);
- delete [] imageBuf;
}
void SMsgWriter::writeServerInit()
@@ -316,26 +314,6 @@
}
}
-rdr::U8* SMsgWriter::getImageBuf(int required, int requested, int* nPixels)
-{
- int requiredBytes = required * (cp->pf().bpp / 8);
- int requestedBytes = requested * (cp->pf().bpp / 8);
- int size = requestedBytes;
- if (size > imageBufIdealSize) size = imageBufIdealSize;
-
- if (size < requiredBytes)
- size = requiredBytes;
-
- if (imageBufSize < size) {
- imageBufSize = size;
- delete [] imageBuf;
- imageBuf = new rdr::U8[imageBufSize];
- }
- if (nPixels)
- *nPixels = imageBufSize / (cp->pf().bpp / 8);
- return imageBuf;
-}
-
void SMsgWriter::startMsg(int type)
{
os->writeU8(type);