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;