Using JpegEncoder for video only with proper pixel formats.
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@2361 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/common/rfb/VNCSConnectionST.cxx b/common/rfb/VNCSConnectionST.cxx
index d6541f9..3929b1f 100644
--- a/common/rfb/VNCSConnectionST.cxx
+++ b/common/rfb/VNCSConnectionST.cxx
@@ -646,8 +646,15 @@
// complicated as compared to the original VNC4.
writer()->setupCurrentEncoder();
int nRects = (ui.copied.numRects() +
- (ui.video_area.is_empty() ? 0 : 1) +
(drawRenderedCursor ? 1 : 0));
+ if (!ui.video_area.is_empty()) {
+ if (writer()->canUseJpegEncoder(server->getPixelBuffer())) {
+ nRects++;
+ } else {
+ nRects += writer()->getNumRects(ui.video_area);
+ }
+ }
+
std::vector<Rect> rects;
std::vector<Rect>::const_iterator i;
ui.changed.get_rects(&rects);
@@ -657,8 +664,14 @@
}
writer()->writeFramebufferUpdateStart(nRects);
- if (!ui.video_area.is_empty())
- writer()->writeVideoRect(server->getPixelBuffer(), ui.video_area);
+ if (!ui.video_area.is_empty()) {
+ if (writer()->canUseJpegEncoder(server->getPixelBuffer())) {
+ writer()->writeJpegRect(server->getPixelBuffer(), ui.video_area);
+ } else {
+ Rect actual;
+ writer()->writeRect(ui.video_area, &image_getter, &actual);
+ }
+ }
Region updatedRegion;
writer()->writeRects(ui, &image_getter, &updatedRegion);
updates.subtract(updatedRegion);