]> source.dussan.org Git - tigervnc.git/commitdiff
Tweak the quality to JPEG settings mapping a bit.
authorPierre Ossman <ossman@cendio.se>
Wed, 11 Mar 2009 16:15:29 +0000 (16:15 +0000)
committerPierre Ossman <ossman@cendio.se>
Wed, 11 Mar 2009 16:15:29 +0000 (16:15 +0000)
The percieved quality isn't really linear compared to the actual quality
setting, so make it a bit more top heavy. Also disable color subsampling
at some levels and make the highest quality lossless.

git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@3660 3789f03b-4d11-0410-bbf8-ca57d06f2519

common/rfb/TightEncoder.cxx
common/rfb/TightEncoder.h
common/rfb/tightEncode.h

index e89a5609cf4835e809e7dc0647099cc4f8298751..159ebbfb492efd3111d3ee0a4be27981494eac8c 100644 (file)
@@ -45,16 +45,16 @@ using namespace rfb;
 //
 
 const TIGHT_CONF TightEncoder::conf[10] = {
-  {   512,   32,   6, 0, 0, 0,   4,  5 },
-  {  2048,   64,   6, 1, 1, 1,   8, 10 },
-  {  4096,  128,   8, 3, 3, 2,  24, 15 },
-  {  8192,  256,  12, 5, 5, 2,  32, 25 },
-  { 16384,  512,  12, 6, 7, 3,  32, 37 },
-  { 32768,  512,  12, 7, 8, 4,  32, 50 },
-  { 65536, 1024,  16, 7, 8, 5,  32, 60 },
-  { 65536, 1024,  16, 8, 9, 6,  64, 70 },
-  { 65536, 2048,  24, 9, 9, 7,  64, 75 },
-  { 65536, 2048,  32, 9, 9, 9,  96, 80 }
+  {   512,   32,   6, 0, 0, 0,   4, 10, 1 }, // 0
+  {  2048,   64,   6, 1, 1, 1,   8, 25, 1 }, // 1
+  {  4096,  128,   8, 3, 3, 2,  24, 25, 0 }, // 2
+  {  8192,  256,  12, 5, 5, 2,  32, 50, 1 }, // 3
+  { 16384,  512,  12, 6, 7, 3,  32, 50, 0 }, // 4
+  { 32768,  512,  12, 7, 8, 4,  32, 75, 1 }, // 5
+  { 65536, 1024,  16, 7, 8, 5,  32, 75, 0 }, // 6
+  { 65536, 1024,  16, 8, 9, 6,  64, 83, 0 }, // 7
+  { 65536, 2048,  24, 9, 9, 7,  64, 92, 0 }, // 8
+  { 65536, 2048,  32, 9, 9, 9,  96,100, 0 }  // 9
 };
 const int TightEncoder::defaultCompressLevel = 6;
 
index 977313508641e77c6ad1384dae034c100d9fe808..35f2f599d55501cb8c83c048292e54ae01f8ae87 100644 (file)
@@ -35,7 +35,7 @@ namespace rfb {
     unsigned int monoMinRectSize;
     int idxZlibLevel, monoZlibLevel, rawZlibLevel;
     int idxMaxColorsDivisor;
-    int jpegQuality;
+    int jpegQuality, jpegSubSample;
   };
 
   //
index cdcb141b2efbf13b414b17ae956d617eb2157f08..f2192bbac46bc2259341ff81ef9f101c2a399fc9 100644 (file)
@@ -537,6 +537,13 @@ static void ENCODE_JPEG_RECT (rdr::OutStream *os, PIXEL_T *buf,
 
   jpeg_set_defaults(&cinfo);
   jpeg_set_quality(&cinfo, s_pjconf->jpegQuality, TRUE);
+  if (s_pjconf->jpegSubSample) {
+    cinfo.comp_info[0].h_samp_factor = 2;
+    cinfo.comp_info[0].v_samp_factor = 2;
+  } else {
+    cinfo.comp_info[0].h_samp_factor = 1;
+    cinfo.comp_info[0].v_samp_factor = 1;
+  }
 
   rdr::U8 *dstBuf = new rdr::U8[2048];
   JpegSetDstManager(&cinfo, dstBuf, 2048);