Added support for new UseHardwareJPEG parameter ("Use hardware-accelerated JPEG compressor for video if available") which is 'true' by default. Also, in IRIX, if IrixDMJpegCompressor fails to initialize, we use StandardJpegCompressor instead. This way, video will be transmitted even if we could not open hardware JPEG compressor.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@2358 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/common/rfb/JpegEncoder.cxx b/common/rfb/JpegEncoder.cxx
index b2be63f..51d48f1 100644
--- a/common/rfb/JpegEncoder.cxx
+++ b/common/rfb/JpegEncoder.cxx
@@ -19,6 +19,7 @@
 #include <rfb/JpegEncoder.h>
 #include <rdr/OutStream.h>
 #include <rfb/encodings.h>
+#include <rfb/LogWriter.h>
 
 #ifdef HAVE_DMEDIA
 #include <rfb/IrixDMJpegCompressor.h>
@@ -26,17 +27,40 @@
 
 using namespace rfb;
 
+static LogWriter vlog("JpegEncoder");
+
+BoolParameter JpegEncoder::useHardwareJPEG
+("UseHardwareJPEG",
+ "Use hardware-accelerated JPEG compressor for video if available",
+ true);
+
 const int JpegEncoder::qualityMap[10] = {
   5, 10, 15, 25, 37, 50, 60, 70, 75, 80
 };
 
-JpegEncoder::JpegEncoder(SMsgWriter* writer_) : writer(writer_)
+JpegEncoder::JpegEncoder(SMsgWriter* writer_) : writer(writer_), jcomp(0)
 {
 #ifdef HAVE_DMEDIA
-  jcomp = new IrixDMJpegCompressor;
+  if (useHardwareJPEG) {
+    vlog.debug("trying IRIX DM JPEG compressor");
+    IrixDMJpegCompressor *irixComp = new IrixDMJpegCompressor;
+    if (irixComp->isValid()) {
+      vlog.debug("initialized IRIX DM JPEG compressor successfully");
+      jcomp = irixComp;
+    } else {
+      vlog.error("warning: could not create IRIX DM JPEG compressor");
+      delete irixComp;
+    }
+  }
 #else
-  jcomp = new StandardJpegCompressor;
+  if (useHardwareJPEG) {
+    vlog.info("no hardware JPEG compressor available");
+  }
 #endif
+  if (!jcomp) {
+    vlog.debug("using software JPEG compressor");
+    jcomp = new StandardJpegCompressor;
+  }
   jcomp->setQuality(qualityMap[6]);
 }