In SMsgWriter, added the ability to send a video rectangle via JpegEncoder.
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@2329 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/common/rfb/SMsgWriter.cxx b/common/rfb/SMsgWriter.cxx
index f3079ee..8a6ce66 100644
--- a/common/rfb/SMsgWriter.cxx
+++ b/common/rfb/SMsgWriter.cxx
@@ -24,6 +24,7 @@
#include <rfb/UpdateTracker.h>
#include <rfb/SMsgWriter.h>
#include <rfb/LogWriter.h>
+#include <rfb/JpegEncoder.h>
using namespace rfb;
@@ -39,6 +40,7 @@
bytesSent[i] = 0;
rectsSent[i] = 0;
}
+ jpegEncoder = new JpegEncoder(this);
}
SMsgWriter::~SMsgWriter()
@@ -56,6 +58,7 @@
vlog.info(" raw bytes equivalent %d, compression ratio %f",
rawBytesEquivalent, (double)rawBytesEquivalent / bytes);
delete [] imageBuf;
+ delete jpegEncoder;
}
void SMsgWriter::writeSetColourMapEntries(int firstColour, int nColours,
@@ -169,6 +172,11 @@
return encoders[encoding]->writeRect(r, ig, actual);
}
+void SMsgWriter::writeVideoRect(PixelBuffer *pb, const Rect& r)
+{
+ jpegEncoder->writeRect(pb, r);
+}
+
void SMsgWriter::writeCopyRect(const Rect& r, int srcX, int srcY)
{
startRect(r,encodingCopyRect);
diff --git a/common/rfb/SMsgWriter.h b/common/rfb/SMsgWriter.h
index 17e3481..490d556 100644
--- a/common/rfb/SMsgWriter.h
+++ b/common/rfb/SMsgWriter.h
@@ -25,6 +25,7 @@
#include <rdr/types.h>
#include <rfb/encodings.h>
#include <rfb/Encoder.h>
+#include <rfb/PixelBuffer.h>
namespace rdr { class OutStream; }
@@ -36,6 +37,7 @@
class ColourMap;
class Region;
class UpdateInfo;
+ class JpegEncoder;
class WriteSetCursorCallback {
public:
@@ -129,6 +131,8 @@
virtual void writeCopyRect(const Rect& r, int srcX, int srcY);
+ virtual void writeVideoRect(PixelBuffer *pb, const Rect& r);
+
virtual void startRect(const Rect& r, unsigned int enc)=0;
virtual void endRect()=0;
@@ -154,12 +158,14 @@
rdr::OutStream* os;
Encoder* encoders[encodingMax+1];
+ JpegEncoder* jpegEncoder;
int lenBeforeRect;
unsigned int currentEncoding;
int updatesSent;
int bytesSent[encodingMax+1];
int rectsSent[encodingMax+1];
int rawBytesEquivalent;
+ // FIXME: Gather statistics for JpegEncoder as well.
rdr::U8* imageBuf;
int imageBufSize;