]> granicus.if.org Git - libjpeg-turbo/commitdiff
Add flags to the TurboJPEG API that allow the caller to force the use of either the...
authorDRC <dcommander@users.sourceforge.net>
Fri, 29 Jun 2012 23:46:38 +0000 (23:46 +0000)
committerDRC <dcommander@users.sourceforge.net>
Fri, 29 Jun 2012 23:46:38 +0000 (23:46 +0000)
git-svn-id: svn+ssh://svn.code.sf.net/p/libjpeg-turbo/code/trunk@851 632fc199-4ca6-4c93-a231-07263d6284db

38 files changed:
ChangeLog.txt
doc/html/annotated.html
doc/html/classes.html
doc/html/functions.html
doc/html/functions_vars.html
doc/html/group___turbo_j_p_e_g.html
doc/html/index.html
doc/html/modules.html
doc/html/structtjregion.html
doc/html/structtjscalingfactor.html
doc/html/structtjtransform.html
doxygen.config
java/TJExample.java
java/doc/allclasses-frame.html
java/doc/allclasses-noframe.html
java/doc/constant-values.html
java/doc/deprecated-list.html
java/doc/help-doc.html
java/doc/index-all.html
java/doc/index.html
java/doc/org/libjpegturbo/turbojpeg/TJ.html
java/doc/org/libjpegturbo/turbojpeg/TJCompressor.html
java/doc/org/libjpegturbo/turbojpeg/TJCustomFilter.html
java/doc/org/libjpegturbo/turbojpeg/TJDecompressor.html
java/doc/org/libjpegturbo/turbojpeg/TJScalingFactor.html
java/doc/org/libjpegturbo/turbojpeg/TJTransform.html
java/doc/org/libjpegturbo/turbojpeg/TJTransformer.html
java/doc/org/libjpegturbo/turbojpeg/package-frame.html
java/doc/org/libjpegturbo/turbojpeg/package-summary.html
java/doc/org/libjpegturbo/turbojpeg/package-tree.html
java/doc/overview-tree.html
java/doc/serialized-form.html
java/org/libjpegturbo/turbojpeg/TJ.java
tjbench.c
tjbenchtest.in
tjexampletest.in
turbojpeg.c
turbojpeg.h

index b1398f9669b39ffa3fbbc2c2575df20ca0b4dc17..ad181b1ed046d13e12c4311ff8acc338ba1e3d60 100644 (file)
@@ -59,6 +59,9 @@ divisible by 16 bytes.
 4.3 on OS X platforms would cause NASM to return numerous errors of the form
 "'%define' expects a macro identifier".
 
+[9] Added flags to the TurboJPEG API that allow the caller to force the use of
+either the fast or the accurate DCT/IDCT algorithms in the underlying codec.
+
 
 1.2.0
 =====
index b7d3b54a46458c1eb1eec35e9eeb3d85048a5a90..aed621366b315b276c9bbee6269c96436158eb4f 100644 (file)
@@ -19,7 +19,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  <tbody>
  <tr style="height: 56px;">
   <td style="padding-left: 0.5em;">
-   <div id="projectname">TurboJPEG&#160;<span id="projectnumber">1.2</span></div>
+   <div id="projectname">TurboJPEG&#160;<span id="projectnumber">1.2.1</span></div>
   </td>
  </tr>
  </tbody>
@@ -81,7 +81,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 </iframe>
 </div>
 
-<hr class="footer"/><address class="footer"><small>Generated on Sun Dec 18 2011 20:09:47 for TurboJPEG by&#160;
+<hr class="footer"/><address class="footer"><small>Generated on Fri Jun 29 2012 18:34:09 for TurboJPEG by&#160;
 <a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
 </body>
index e3c582fdf93495ac247d0734589e1ecf34f46fec..480db102d6c1ae2535ec4c110330cbf8a704c3e5 100644 (file)
@@ -19,7 +19,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  <tbody>
  <tr style="height: 56px;">
   <td style="padding-left: 0.5em;">
-   <div id="projectname">TurboJPEG&#160;<span id="projectnumber">1.2</span></div>
+   <div id="projectname">TurboJPEG&#160;<span id="projectnumber">1.2.1</span></div>
   </td>
  </tr>
  </tbody>
@@ -80,7 +80,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 </iframe>
 </div>
 
-<hr class="footer"/><address class="footer"><small>Generated on Sun Dec 18 2011 20:09:47 for TurboJPEG by&#160;
+<hr class="footer"/><address class="footer"><small>Generated on Fri Jun 29 2012 18:34:09 for TurboJPEG by&#160;
 <a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
 </body>
index a0e9d852433f0faf2bb2901949a989e541115793..1271078f1088753bd149fb7018e97d05c5b6046e 100644 (file)
@@ -19,7 +19,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  <tbody>
  <tr style="height: 56px;">
   <td style="padding-left: 0.5em;">
-   <div id="projectname">TurboJPEG&#160;<span id="projectnumber">1.2</span></div>
+   <div id="projectname">TurboJPEG&#160;<span id="projectnumber">1.2.1</span></div>
   </td>
  </tr>
  </tbody>
@@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 </iframe>
 </div>
 
-<hr class="footer"/><address class="footer"><small>Generated on Sun Dec 18 2011 20:09:47 for TurboJPEG by&#160;
+<hr class="footer"/><address class="footer"><small>Generated on Fri Jun 29 2012 18:34:09 for TurboJPEG by&#160;
 <a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
 </body>
index f808a68c1c65abb8d5b385a3e3ca4e859bb895ba..6698b1f2753653875d69bedd96ad55632d5e6d21 100644 (file)
@@ -19,7 +19,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  <tbody>
  <tr style="height: 56px;">
   <td style="padding-left: 0.5em;">
-   <div id="projectname">TurboJPEG&#160;<span id="projectnumber">1.2</span></div>
+   <div id="projectname">TurboJPEG&#160;<span id="projectnumber">1.2.1</span></div>
   </td>
  </tr>
  </tbody>
@@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 </iframe>
 </div>
 
-<hr class="footer"/><address class="footer"><small>Generated on Sun Dec 18 2011 20:09:47 for TurboJPEG by&#160;
+<hr class="footer"/><address class="footer"><small>Generated on Fri Jun 29 2012 18:34:09 for TurboJPEG by&#160;
 <a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
 </body>
index 0c483179d50f6727ff5be577daef55f4dd6d89ad..bd493b962f0ef6f8b1504b746ba782eb0f1265d0 100644 (file)
@@ -19,7 +19,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  <tbody>
  <tr style="height: 56px;">
   <td style="padding-left: 0.5em;">
-   <div id="projectname">TurboJPEG&#160;<span id="projectnumber">1.2</span></div>
+   <div id="projectname">TurboJPEG&#160;<span id="projectnumber">1.2.1</span></div>
   </td>
  </tr>
  </tbody>
@@ -82,17 +82,21 @@ Defines</h2></td></tr>
 <tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga72ecf4ebe6eb702d3c6f5ca27455e1ec">TJFLAG_BOTTOMUP</a></td></tr>
 <tr><td class="mdescLeft">&#160;</td><td class="mdescRight">The uncompressed source/destination image is stored in bottom-up (Windows, OpenGL) order, not top-down (X11) order.  <a href="#ga72ecf4ebe6eb702d3c6f5ca27455e1ec"></a><br/></td></tr>
 <tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga4e872f11c82f241736fa8297920f24e5">TJFLAG_FORCEMMX</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Turn off CPU auto-detection and force TurboJPEG to use MMX code (IPP and 32-bit libjpeg-turbo versions only.)  <a href="#ga4e872f11c82f241736fa8297920f24e5"></a><br/></td></tr>
+<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Turn off CPU auto-detection and force TurboJPEG to use MMX code (if the underlying codec supports it.)  <a href="#ga4e872f11c82f241736fa8297920f24e5"></a><br/></td></tr>
 <tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gae17e63189e8cd730feed3efbd2454f38">TJFLAG_FORCESSE</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Turn off CPU auto-detection and force TurboJPEG to use SSE code (32-bit IPP and 32-bit libjpeg-turbo versions only)  <a href="#gae17e63189e8cd730feed3efbd2454f38"></a><br/></td></tr>
+<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Turn off CPU auto-detection and force TurboJPEG to use SSE code (if the underlying codec supports it.)  <a href="#gae17e63189e8cd730feed3efbd2454f38"></a><br/></td></tr>
 <tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga8cf0bca96ea4d472563f4b0ebf8c48e7">TJFLAG_FORCESSE2</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Turn off CPU auto-detection and force TurboJPEG to use SSE2 code (32-bit IPP and 32-bit libjpeg-turbo versions only)  <a href="#ga8cf0bca96ea4d472563f4b0ebf8c48e7"></a><br/></td></tr>
+<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Turn off CPU auto-detection and force TurboJPEG to use SSE2 code (if the underlying codec supports it.)  <a href="#ga8cf0bca96ea4d472563f4b0ebf8c48e7"></a><br/></td></tr>
 <tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gaf9d49066633404da4386d70820295dd2">TJFLAG_FORCESSE3</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Turn off CPU auto-detection and force TurboJPEG to use SSE3 code (64-bit IPP version only)  <a href="#gaf9d49066633404da4386d70820295dd2"></a><br/></td></tr>
+<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Turn off CPU auto-detection and force TurboJPEG to use SSE3 code (if the underlying codec supports it.)  <a href="#gaf9d49066633404da4386d70820295dd2"></a><br/></td></tr>
 <tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga4ee4506c81177a06f77e2504a22efd2d">TJFLAG_FASTUPSAMPLE</a></td></tr>
-<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Use fast, inaccurate chrominance upsampling routines in the JPEG decompressor (libjpeg and libjpeg-turbo versions only)  <a href="#ga4ee4506c81177a06f77e2504a22efd2d"></a><br/></td></tr>
+<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">When decompressing, use the fastest chrominance upsampling algorithm available in the underlying codec.  <a href="#ga4ee4506c81177a06f77e2504a22efd2d"></a><br/></td></tr>
 <tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga8808d403c68b62aaa58a4c1e58e98963">TJFLAG_NOREALLOC</a></td></tr>
 <tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Disable buffer (re)allocation.  <a href="#ga8808d403c68b62aaa58a4c1e58e98963"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gaabce235db80d3f698b27f36cbd453da2">TJFLAG_FASTDCT</a></td></tr>
+<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Use the fastest DCT/IDCT algorithm available in the underlying codec.  <a href="#gaabce235db80d3f698b27f36cbd453da2"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#gacb233cfd722d66d1ccbf48a7de81f0e0">TJFLAG_ACCURATEDCT</a></td></tr>
+<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Use the most accurate DCT/IDCT algorithm available in the underlying codec.  <a href="#gacb233cfd722d66d1ccbf48a7de81f0e0"></a><br/></td></tr>
 <tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga0f6dbd18adf38b7d46ac547f0f4d562c">TJ_NUMXOP</a></td></tr>
 <tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Number of transform operations.  <a href="#ga0f6dbd18adf38b7d46ac547f0f4d562c"></a><br/></td></tr>
 <tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___turbo_j_p_e_g.html#ga50e03cb5ed115330e212417429600b00">TJXOPT_PERFECT</a></td></tr>
@@ -253,6 +257,22 @@ Variables</h2></td></tr>
 
 <p>Number of transform operations. </p>
 
+</div>
+</div>
+<a class="anchor" id="gacb233cfd722d66d1ccbf48a7de81f0e0"></a><!-- doxytag: member="turbojpeg.h::TJFLAG_ACCURATEDCT" ref="gacb233cfd722d66d1ccbf48a7de81f0e0" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define TJFLAG_ACCURATEDCT</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Use the most accurate DCT/IDCT algorithm available in the underlying codec. </p>
+<p>The default if this flag is not specified is implementation-specific. The libjpeg implementation, for example, uses the fast algorithm by default when compressing, because this has been shown to have only a very slight effect on accuracy, but it uses the accurate algorithm when decompressing, because this has been shown to have a larger effect. </p>
+
 </div>
 </div>
 <a class="anchor" id="ga72ecf4ebe6eb702d3c6f5ca27455e1ec"></a><!-- doxytag: member="turbojpeg.h::TJFLAG_BOTTOMUP" ref="ga72ecf4ebe6eb702d3c6f5ca27455e1ec" args="" -->
@@ -268,6 +288,22 @@ Variables</h2></td></tr>
 
 <p>The uncompressed source/destination image is stored in bottom-up (Windows, OpenGL) order, not top-down (X11) order. </p>
 
+</div>
+</div>
+<a class="anchor" id="gaabce235db80d3f698b27f36cbd453da2"></a><!-- doxytag: member="turbojpeg.h::TJFLAG_FASTDCT" ref="gaabce235db80d3f698b27f36cbd453da2" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define TJFLAG_FASTDCT</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Use the fastest DCT/IDCT algorithm available in the underlying codec. </p>
+<p>The default if this flag is not specified is implementation-specific. The libjpeg implementation, for example, uses the fast algorithm by default when compressing, because this has been shown to have only a very slight effect on accuracy, but it uses the accurate algorithm when decompressing, because this has been shown to have a larger effect. </p>
+
 </div>
 </div>
 <a class="anchor" id="ga4ee4506c81177a06f77e2504a22efd2d"></a><!-- doxytag: member="turbojpeg.h::TJFLAG_FASTUPSAMPLE" ref="ga4ee4506c81177a06f77e2504a22efd2d" args="" -->
@@ -281,7 +317,8 @@ Variables</h2></td></tr>
 </div>
 <div class="memdoc">
 
-<p>Use fast, inaccurate chrominance upsampling routines in the JPEG decompressor (libjpeg and libjpeg-turbo versions only) </p>
+<p>When decompressing, use the fastest chrominance upsampling algorithm available in the underlying codec. </p>
+<p>The default is to use smooth upsampling, which creates a smooth transition between neighboring chrominance components in order to reduce upsampling artifacts in the decompressed image. </p>
 
 </div>
 </div>
@@ -296,7 +333,7 @@ Variables</h2></td></tr>
 </div>
 <div class="memdoc">
 
-<p>Turn off CPU auto-detection and force TurboJPEG to use MMX code (IPP and 32-bit libjpeg-turbo versions only.) </p>
+<p>Turn off CPU auto-detection and force TurboJPEG to use MMX code (if the underlying codec supports it.) </p>
 
 </div>
 </div>
@@ -311,7 +348,7 @@ Variables</h2></td></tr>
 </div>
 <div class="memdoc">
 
-<p>Turn off CPU auto-detection and force TurboJPEG to use SSE code (32-bit IPP and 32-bit libjpeg-turbo versions only) </p>
+<p>Turn off CPU auto-detection and force TurboJPEG to use SSE code (if the underlying codec supports it.) </p>
 
 </div>
 </div>
@@ -326,7 +363,7 @@ Variables</h2></td></tr>
 </div>
 <div class="memdoc">
 
-<p>Turn off CPU auto-detection and force TurboJPEG to use SSE2 code (32-bit IPP and 32-bit libjpeg-turbo versions only) </p>
+<p>Turn off CPU auto-detection and force TurboJPEG to use SSE2 code (if the underlying codec supports it.) </p>
 
 </div>
 </div>
@@ -341,7 +378,7 @@ Variables</h2></td></tr>
 </div>
 <div class="memdoc">
 
-<p>Turn off CPU auto-detection and force TurboJPEG to use SSE3 code (64-bit IPP version only) </p>
+<p>Turn off CPU auto-detection and force TurboJPEG to use SSE3 code (if the underlying codec supports it.) </p>
 
 </div>
 </div>
@@ -1557,7 +1594,7 @@ If you choose option 1, <code>dstSizes[i]</code> should be set to the size of yo
 </iframe>
 </div>
 
-<hr class="footer"/><address class="footer"><small>Generated on Sun Dec 18 2011 20:09:47 for TurboJPEG by&#160;
+<hr class="footer"/><address class="footer"><small>Generated on Fri Jun 29 2012 18:34:09 for TurboJPEG by&#160;
 <a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
 </body>
index be0e810fcfd8761e321abab3376c6da1f3b20e67..46f5becab86f63737944826320086003981ddff0 100644 (file)
@@ -19,7 +19,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  <tbody>
  <tr style="height: 56px;">
   <td style="padding-left: 0.5em;">
-   <div id="projectname">TurboJPEG&#160;<span id="projectnumber">1.2</span></div>
+   <div id="projectname">TurboJPEG&#160;<span id="projectnumber">1.2.1</span></div>
   </td>
  </tr>
  </tbody>
@@ -69,7 +69,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 </iframe>
 </div>
 
-<hr class="footer"/><address class="footer"><small>Generated on Sun Dec 18 2011 20:09:47 for TurboJPEG by&#160;
+<hr class="footer"/><address class="footer"><small>Generated on Fri Jun 29 2012 18:34:09 for TurboJPEG by&#160;
 <a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
 </body>
index 5277997f2d2d0eced4c989b0ba5e8d669f6b2862..7ce0d10474b63b16847ab91983251c1683beed99 100644 (file)
@@ -19,7 +19,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  <tbody>
  <tr style="height: 56px;">
   <td style="padding-left: 0.5em;">
-   <div id="projectname">TurboJPEG&#160;<span id="projectnumber">1.2</span></div>
+   <div id="projectname">TurboJPEG&#160;<span id="projectnumber">1.2.1</span></div>
   </td>
  </tr>
  </tbody>
@@ -72,7 +72,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 </iframe>
 </div>
 
-<hr class="footer"/><address class="footer"><small>Generated on Sun Dec 18 2011 20:09:47 for TurboJPEG by&#160;
+<hr class="footer"/><address class="footer"><small>Generated on Fri Jun 29 2012 18:34:09 for TurboJPEG by&#160;
 <a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
 </body>
index fd293fa1bd1db12e81f985c141ca34202164a7f6..a8b0c676ced80c0432dc8f6894c08d8280eeccbc 100644 (file)
@@ -19,7 +19,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  <tbody>
  <tr style="height: 56px;">
   <td style="padding-left: 0.5em;">
-   <div id="projectname">TurboJPEG&#160;<span id="projectnumber">1.2</span></div>
+   <div id="projectname">TurboJPEG&#160;<span id="projectnumber">1.2.1</span></div>
   </td>
  </tr>
  </tbody>
@@ -165,7 +165,7 @@ Data Fields</h2></td></tr>
 </iframe>
 </div>
 
-<hr class="footer"/><address class="footer"><small>Generated on Sun Dec 18 2011 20:09:47 for TurboJPEG by&#160;
+<hr class="footer"/><address class="footer"><small>Generated on Fri Jun 29 2012 18:34:09 for TurboJPEG by&#160;
 <a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
 </body>
index 33f7c05d7811096dc720a2db7d780a23c541fc05..ceee28f73203a55c50f0c9936e44a059914281d2 100644 (file)
@@ -19,7 +19,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  <tbody>
  <tr style="height: 56px;">
   <td style="padding-left: 0.5em;">
-   <div id="projectname">TurboJPEG&#160;<span id="projectnumber">1.2</span></div>
+   <div id="projectname">TurboJPEG&#160;<span id="projectnumber">1.2.1</span></div>
   </td>
  </tr>
  </tbody>
@@ -127,7 +127,7 @@ Data Fields</h2></td></tr>
 </iframe>
 </div>
 
-<hr class="footer"/><address class="footer"><small>Generated on Sun Dec 18 2011 20:09:47 for TurboJPEG by&#160;
+<hr class="footer"/><address class="footer"><small>Generated on Fri Jun 29 2012 18:34:09 for TurboJPEG by&#160;
 <a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
 </body>
index 39f9e4712740890b93e358511ca1606aca2722ec..9e879f87e73df4ea7e4a0ffa6e9ef4c60728b07d 100644 (file)
@@ -19,7 +19,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  <tbody>
  <tr style="height: 56px;">
   <td style="padding-left: 0.5em;">
-   <div id="projectname">TurboJPEG&#160;<span id="projectnumber">1.2</span></div>
+   <div id="projectname">TurboJPEG&#160;<span id="projectnumber">1.2.1</span></div>
   </td>
  </tr>
  </tbody>
@@ -191,7 +191,7 @@ Data Fields</h2></td></tr>
 </iframe>
 </div>
 
-<hr class="footer"/><address class="footer"><small>Generated on Sun Dec 18 2011 20:09:47 for TurboJPEG by&#160;
+<hr class="footer"/><address class="footer"><small>Generated on Fri Jun 29 2012 18:34:09 for TurboJPEG by&#160;
 <a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
 </body>
index 5fb34b344a17318e63200ed559362d458cc38799..5a0b5a7141916262590c3a36addab8ae5cada3da 100644 (file)
@@ -1,5 +1,5 @@
 PROJECT_NAME = TurboJPEG
-PROJECT_NUMBER = 1.2
+PROJECT_NUMBER = 1.2.1
 OUTPUT_DIRECTORY = doc/
 USE_WINDOWS_ENCODING = NO
 OPTIMIZE_OUTPUT_FOR_C = YES
index 36c1a8f7841e1b0ac5d8c9657e6217eeedfddd83..e7268928bad796fa1ea64467ad8f7bedfceb9c16 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C)2011 D. R. Commander.  All Rights Reserved.
+ * Copyright (C)2011-2012 D. R. Commander.  All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -81,6 +81,12 @@ public class TJExample implements TJCustomFilter {
     System.out.println("     for 4:2:0.)\n");
     System.out.println("-display = Display output image (Output file need not be specified in this");
     System.out.println("     case.)\n");
+    System.out.println("-fastupsample = Use the fastest chrominance upsampling algorithm available in");
+    System.out.println("     the underlying codec\n");
+    System.out.println("-fastdct = Use the fastest DCT/IDCT algorithms available in the underlying");
+    System.out.println("     codec\n");
+    System.out.println("-accuratedct = Use the most accurate DCT/IDCT algorithms available in the");
+    System.out.println("     underlying codec\n");
     System.exit(1);
   }
 
@@ -92,6 +98,7 @@ public class TJExample implements TJCustomFilter {
 
     BufferedImage img = null;  byte[] bmpBuf = null;
     TJTransform xform = new TJTransform();
+    int flags = 0;
 
     try {
 
@@ -187,6 +194,18 @@ public class TJExample implements TJCustomFilter {
           }
           if(argv[i].substring(0, 2).equalsIgnoreCase("-d"))
             display = true;
+          if(argv[i].equalsIgnoreCase("-fastupsample")) {
+            System.out.println("Using fast upsampling code");
+            flags |= TJ.FLAG_FASTUPSAMPLE;
+          }
+          if(argv[i].equalsIgnoreCase("-fastdct")) {
+            System.out.println("Using fastest DCT/IDCT algorithm");
+            flags |= TJ.FLAG_FASTDCT;
+          }
+          if(argv[i].equalsIgnoreCase("-accuratedct")) {
+            System.out.println("Using most accurate DCT/IDCT algorithm");
+            flags |= TJ.FLAG_ACCURATEDCT;
+          }
         }
       }
       String[] inFileTokens = argv[0].split("\\.");
@@ -247,8 +266,9 @@ public class TJExample implements TJCustomFilter {
         height = scaleFactor.getScaled(height);
 
         if(!outFormat.equalsIgnoreCase("jpg"))
-          img = tjd.decompress(width, height, BufferedImage.TYPE_INT_RGB, 0);
-        else bmpBuf = tjd.decompress(width, 0, height, TJ.PF_BGRX, 0);
+          img = tjd.decompress(width, height, BufferedImage.TYPE_INT_RGB,
+                               flags);
+        else bmpBuf = tjd.decompress(width, 0, height, TJ.PF_BGRX, flags);
         tjd.close();
       }
       else {
@@ -282,10 +302,10 @@ public class TJExample implements TJCustomFilter {
         tjc.setSubsamp(outSubsamp);
         tjc.setJPEGQuality(outQual);
         if(img != null)
-          jpegBuf = tjc.compress(img, 0);
+          jpegBuf = tjc.compress(img, flags);
         else {
           tjc.setSourceImage(bmpBuf, width, 0, height, TJ.PF_BGRX);
-          jpegBuf = tjc.compress(0);
+          jpegBuf = tjc.compress(flags);
         }
         jpegSize = tjc.getCompressedSize();
         tjc.close();
index 73d5fb90fa3676c8becb94b92f20e802ad68f65c..336473c843816fd8205ef11a79b3d9707f3c67ec 100644 (file)
@@ -2,12 +2,12 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_31) on Wed Jun 06 03:10:33 CDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 18:36:27 CDT 2012 -->
 <TITLE>
 All Classes
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-06">
+<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
 
index 8392bfdc0947682779631cf223358f14d3f3a2b0..ad7cd9e84da8fe6e86bc8e9ea4b5473a15fd23bf 100644 (file)
@@ -2,12 +2,12 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_31) on Wed Jun 06 03:10:33 CDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 18:36:27 CDT 2012 -->
 <TITLE>
 All Classes
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-06">
+<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
 
index ca1f208f814cff358044d2a72668415cc605c603..8cf0ae7bda7472f57aaeef6cc41745a07e1c1eb6 100644 (file)
@@ -2,12 +2,12 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_31) on Wed Jun 06 03:10:33 CDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 18:36:27 CDT 2012 -->
 <TITLE>
 Constant Field Values
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-06">
+<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
 
@@ -101,12 +101,24 @@ org.libjpegturbo.*</FONT></TH>
 <TH ALIGN="left" COLSPAN="3">org.libjpegturbo.turbojpeg.<A HREF="org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg">TJ</A></TH>
 </TR>
 <TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.libjpegturbo.turbojpeg.TJ.FLAG_ACCURATEDCT"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/libjpegturbo/turbojpeg/TJ.html#FLAG_ACCURATEDCT">FLAG_ACCURATEDCT</A></CODE></TD>
+<TD ALIGN="right"><CODE>4096</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
 <A NAME="org.libjpegturbo.turbojpeg.TJ.FLAG_BOTTOMUP"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
 <CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
 <TD ALIGN="left"><CODE><A HREF="org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP">FLAG_BOTTOMUP</A></CODE></TD>
 <TD ALIGN="right"><CODE>2</CODE></TD>
 </TR>
 <TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.libjpegturbo.turbojpeg.TJ.FLAG_FASTDCT"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/libjpegturbo/turbojpeg/TJ.html#FLAG_FASTDCT">FLAG_FASTDCT</A></CODE></TD>
+<TD ALIGN="right"><CODE>2048</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
 <A NAME="org.libjpegturbo.turbojpeg.TJ.FLAG_FASTUPSAMPLE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
 <CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
 <TD ALIGN="left"><CODE><A HREF="org/libjpegturbo/turbojpeg/TJ.html#FLAG_FASTUPSAMPLE">FLAG_FASTUPSAMPLE</A></CODE></TD>
index de71e8cd51fef25e51e76795e017a7daa51777c8..b7d3689e34ca2a8259decbba9d0033f419660d1e 100644 (file)
@@ -2,12 +2,12 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_31) on Wed Jun 06 03:10:33 CDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 18:36:27 CDT 2012 -->
 <TITLE>
 Deprecated List
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-06">
+<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
 
index 5beef37047008350e064ba2ee610e0cf62853683..fc2ff59b45b20a6dc9db57fa1eabf7871043af7d 100644 (file)
@@ -2,12 +2,12 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_31) on Wed Jun 06 03:10:33 CDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 18:36:27 CDT 2012 -->
 <TITLE>
 API Help
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-06">
+<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
 
index 8ee0112dbc2d9a9f3747168908cb330e329ae98e..69d41044f39a7fcff5583736c4d4f471064526bd 100644 (file)
@@ -2,12 +2,12 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_31) on Wed Jun 06 03:10:33 CDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 18:36:27 CDT 2012 -->
 <TITLE>
 Index
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-06">
+<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="./stylesheet.css" TITLE="Style">
 
@@ -199,30 +199,37 @@ Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg
 <DT><A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html#finalize()"><B>finalize()</B></A> - 
 Method in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJDecompressor.html" title="class in org.libjpegturbo.turbojpeg">TJDecompressor</A>
 <DD>&nbsp;
+<DT><A HREF="./org/libjpegturbo/turbojpeg/TJ.html#FLAG_ACCURATEDCT"><B>FLAG_ACCURATEDCT</B></A> - 
+Static variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg">TJ</A>
+<DD>Use the most accurate DCT/IDCT algorithm available in the underlying
+ codec.
 <DT><A HREF="./org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP"><B>FLAG_BOTTOMUP</B></A> - 
 Static variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg">TJ</A>
 <DD>The uncompressed source/destination image is stored in bottom-up (Windows,
  OpenGL) order, not top-down (X11) order.
+<DT><A HREF="./org/libjpegturbo/turbojpeg/TJ.html#FLAG_FASTDCT"><B>FLAG_FASTDCT</B></A> - 
+Static variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg">TJ</A>
+<DD>Use the fastest DCT/IDCT algorithm available in the underlying codec.
 <DT><A HREF="./org/libjpegturbo/turbojpeg/TJ.html#FLAG_FASTUPSAMPLE"><B>FLAG_FASTUPSAMPLE</B></A> - 
 Static variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg">TJ</A>
-<DD>Use fast, inaccurate chrominance upsampling routines in the JPEG
- decompressor (libjpeg and libjpeg-turbo versions only.)
+<DD>When decompressing, use the fastest chrominance upsampling algorithm
+ available in the underlying codec.
 <DT><A HREF="./org/libjpegturbo/turbojpeg/TJ.html#FLAG_FORCEMMX"><B>FLAG_FORCEMMX</B></A> - 
 Static variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg">TJ</A>
 <DD>Turn off CPU auto-detection and force TurboJPEG to use MMX code
- (IPP and 32-bit libjpeg-turbo versions only.)
+ (if the underlying codec supports it.)
 <DT><A HREF="./org/libjpegturbo/turbojpeg/TJ.html#FLAG_FORCESSE"><B>FLAG_FORCESSE</B></A> - 
 Static variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg">TJ</A>
 <DD>Turn off CPU auto-detection and force TurboJPEG to use SSE code
- (32-bit IPP and 32-bit libjpeg-turbo versions only.)
+ (if the underlying codec supports it.)
 <DT><A HREF="./org/libjpegturbo/turbojpeg/TJ.html#FLAG_FORCESSE2"><B>FLAG_FORCESSE2</B></A> - 
 Static variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg">TJ</A>
 <DD>Turn off CPU auto-detection and force TurboJPEG to use SSE2 code
- (32-bit IPP and 32-bit libjpeg-turbo versions only.)
+ (if the underlying codec supports it.)
 <DT><A HREF="./org/libjpegturbo/turbojpeg/TJ.html#FLAG_FORCESSE3"><B>FLAG_FORCESSE3</B></A> - 
 Static variable in class org.libjpegturbo.turbojpeg.<A HREF="./org/libjpegturbo/turbojpeg/TJ.html" title="class in org.libjpegturbo.turbojpeg">TJ</A>
 <DD>Turn off CPU auto-detection and force TurboJPEG to use SSE3 code
-(64-bit IPP version only.)
+ (if the underlying codec supports it.)
 </DL>
 <HR>
 <A NAME="_G_"><!-- --></A><H2>
index 9b36a3f201beec32f6ce2eb74935e423bbbc0d00..f9581452295ed425ce42df8b39a090fbcddeb857 100644 (file)
@@ -2,7 +2,7 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc on Wed Jun 06 03:10:33 CDT 2012-->
+<!-- Generated by javadoc on Fri Jun 29 18:36:27 CDT 2012-->
 <TITLE>
 Generated Documentation (Untitled)
 </TITLE>
index ac949a83748e3834c74d54b3a1192c1c094e9982..c031b1abb9e2ff1736ff8a86d8ad9af6aa2705c3 100644 (file)
@@ -2,12 +2,12 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_31) on Wed Jun 06 03:10:33 CDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 18:36:27 CDT 2012 -->
 <TITLE>
 TJ
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-06">
+<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
 
@@ -117,6 +117,15 @@ TurboJPEG utility class (cannot be instantiated)
 <TR BGCOLOR="white" CLASS="TableRowColor">
 <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
 <CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_ACCURATEDCT">FLAG_ACCURATEDCT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Use the most accurate DCT/IDCT algorithm available in the underlying
+ codec.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
 <TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_BOTTOMUP">FLAG_BOTTOMUP</A></B></CODE>
 
 <BR>
@@ -126,11 +135,19 @@ TurboJPEG utility class (cannot be instantiated)
 <TR BGCOLOR="white" CLASS="TableRowColor">
 <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
 <CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_FASTDCT">FLAG_FASTDCT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Use the fastest DCT/IDCT algorithm available in the underlying codec.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
 <TD><CODE><B><A HREF="../../../org/libjpegturbo/turbojpeg/TJ.html#FLAG_FASTUPSAMPLE">FLAG_FASTUPSAMPLE</A></B></CODE>
 
 <BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Use fast, inaccurate chrominance upsampling routines in the JPEG
decompressor (libjpeg and libjpeg-turbo versions only.)</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;When decompressing, use the fastest chrominance upsampling algorithm
available in the underlying codec.</TD>
 </TR>
 <TR BGCOLOR="white" CLASS="TableRowColor">
 <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -139,7 +156,7 @@ TurboJPEG utility class (cannot be instantiated)
 
 <BR>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Turn off CPU auto-detection and force TurboJPEG to use MMX code
- (IPP and 32-bit libjpeg-turbo versions only.)</TD>
+ (if the underlying codec supports it.)</TD>
 </TR>
 <TR BGCOLOR="white" CLASS="TableRowColor">
 <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -148,7 +165,7 @@ TurboJPEG utility class (cannot be instantiated)
 
 <BR>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Turn off CPU auto-detection and force TurboJPEG to use SSE code
- (32-bit IPP and 32-bit libjpeg-turbo versions only.)</TD>
+ (if the underlying codec supports it.)</TD>
 </TR>
 <TR BGCOLOR="white" CLASS="TableRowColor">
 <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -157,7 +174,7 @@ TurboJPEG utility class (cannot be instantiated)
 
 <BR>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Turn off CPU auto-detection and force TurboJPEG to use SSE2 code
- (32-bit IPP and 32-bit libjpeg-turbo versions only.)</TD>
+ (if the underlying codec supports it.)</TD>
 </TR>
 <TR BGCOLOR="white" CLASS="TableRowColor">
 <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -166,7 +183,7 @@ TurboJPEG utility class (cannot be instantiated)
 
 <BR>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Turn off CPU auto-detection and force TurboJPEG to use SSE3 code
-(64-bit IPP version only.)</TD>
+ (if the underlying codec supports it.)</TD>
 </TR>
 <TR BGCOLOR="white" CLASS="TableRowColor">
 <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -711,7 +728,7 @@ FLAG_FORCEMMX</H3>
 public static final int <B>FLAG_FORCEMMX</B></PRE>
 <DL>
 <DD>Turn off CPU auto-detection and force TurboJPEG to use MMX code
- (IPP and 32-bit libjpeg-turbo versions only.)
+ (if the underlying codec supports it.)
 <P>
 <DL>
 <DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#org.libjpegturbo.turbojpeg.TJ.FLAG_FORCEMMX">Constant Field Values</A></DL>
@@ -724,7 +741,7 @@ FLAG_FORCESSE</H3>
 public static final int <B>FLAG_FORCESSE</B></PRE>
 <DL>
 <DD>Turn off CPU auto-detection and force TurboJPEG to use SSE code
- (32-bit IPP and 32-bit libjpeg-turbo versions only.)
+ (if the underlying codec supports it.)
 <P>
 <DL>
 <DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#org.libjpegturbo.turbojpeg.TJ.FLAG_FORCESSE">Constant Field Values</A></DL>
@@ -737,7 +754,7 @@ FLAG_FORCESSE2</H3>
 public static final int <B>FLAG_FORCESSE2</B></PRE>
 <DL>
 <DD>Turn off CPU auto-detection and force TurboJPEG to use SSE2 code
- (32-bit IPP and 32-bit libjpeg-turbo versions only.)
+ (if the underlying codec supports it.)
 <P>
 <DL>
 <DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#org.libjpegturbo.turbojpeg.TJ.FLAG_FORCESSE2">Constant Field Values</A></DL>
@@ -750,7 +767,7 @@ FLAG_FORCESSE3</H3>
 public static final int <B>FLAG_FORCESSE3</B></PRE>
 <DL>
 <DD>Turn off CPU auto-detection and force TurboJPEG to use SSE3 code
-(64-bit IPP version only.)
+ (if the underlying codec supports it.)
 <P>
 <DL>
 <DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#org.libjpegturbo.turbojpeg.TJ.FLAG_FORCESSE3">Constant Field Values</A></DL>
@@ -762,12 +779,50 @@ FLAG_FASTUPSAMPLE</H3>
 <PRE>
 public static final int <B>FLAG_FASTUPSAMPLE</B></PRE>
 <DL>
-<DD>Use fast, inaccurate chrominance upsampling routines in the JPEG
- decompressor (libjpeg and libjpeg-turbo versions only.)
+<DD>When decompressing, use the fastest chrominance upsampling algorithm
+ available in the underlying codec.  The default is to use smooth
+ upsampling, which creates a smooth transition between neighboring
+ chrominance components in order to reduce upsampling artifacts in the
+ decompressed image.
 <P>
 <DL>
 <DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#org.libjpegturbo.turbojpeg.TJ.FLAG_FASTUPSAMPLE">Constant Field Values</A></DL>
 </DL>
+<HR>
+
+<A NAME="FLAG_FASTDCT"><!-- --></A><H3>
+FLAG_FASTDCT</H3>
+<PRE>
+public static final int <B>FLAG_FASTDCT</B></PRE>
+<DL>
+<DD>Use the fastest DCT/IDCT algorithm available in the underlying codec.  The
+ default if this flag is not specified is implementation-specific.  The
+ libjpeg implementation, for example, uses the fast algorithm by default
+ when compressing, because this has been shown to have only a very slight
+ effect on accuracy, but it uses the accurate algorithm when decompressing,
+ because this has been shown to have a larger effect.
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#org.libjpegturbo.turbojpeg.TJ.FLAG_FASTDCT">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="FLAG_ACCURATEDCT"><!-- --></A><H3>
+FLAG_ACCURATEDCT</H3>
+<PRE>
+public static final int <B>FLAG_ACCURATEDCT</B></PRE>
+<DL>
+<DD>Use the most accurate DCT/IDCT algorithm available in the underlying
+ codec.  The default if this flag is not specified is
+ implementation-specific.  The libjpeg implementation, for example, uses
+ the fast algorithm by default when compressing, because this has been
+ shown to have only a very slight effect on accuracy, but it uses the
+ accurate algorithm when decompressing, because this has been shown to have
+ a larger effect.
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#org.libjpegturbo.turbojpeg.TJ.FLAG_ACCURATEDCT">Constant Field Values</A></DL>
+</DL>
 
 <!-- ========= CONSTRUCTOR DETAIL ======== -->
 
index e21a95440182d15772ab130b4622a743b5710a20..d7b6c22c2b4f842c73df625ede7dca3ea9299592 100644 (file)
@@ -2,12 +2,12 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_31) on Wed Jun 06 03:10:33 CDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 18:36:27 CDT 2012 -->
 <TITLE>
 TJCompressor
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-06">
+<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
 
index 49911abaef9ec228e9d2c0f3387bcc26c3fce9f4..7ae47673169ba13c04da86b3c36f08addc764703 100644 (file)
@@ -2,12 +2,12 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_31) on Wed Jun 06 03:10:33 CDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 18:36:27 CDT 2012 -->
 <TITLE>
 TJCustomFilter
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-06">
+<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
 
index de5dcb9f3e33aab6d70f4f2a2fdaf39fdb986269..cd5b9eb8b132e85c67783b5cfb73b7f00c128989 100644 (file)
@@ -2,12 +2,12 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_31) on Wed Jun 06 03:10:33 CDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 18:36:27 CDT 2012 -->
 <TITLE>
 TJDecompressor
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-06">
+<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
 
index 68e64b844c12d51148c53e13a035b2ccca280a6e..38e4c78dd9938efc0b61892692b09f37a38fc1d3 100644 (file)
@@ -2,12 +2,12 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_31) on Wed Jun 06 03:10:33 CDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 18:36:27 CDT 2012 -->
 <TITLE>
 TJScalingFactor
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-06">
+<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
 
index ff4a539568edab9a20acd014371b59a6aee82ae6..c521d53244c886003f49b72bfe98b1ba1afdd0ca 100644 (file)
@@ -2,12 +2,12 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_31) on Wed Jun 06 03:10:33 CDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 18:36:27 CDT 2012 -->
 <TITLE>
 TJTransform
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-06">
+<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
 
index 929b4127c6718f1930a722c0a0aaf40725ccbceb..11f1d4e7f6ad61cd2053d12067c7abdb74f0fbb3 100644 (file)
@@ -2,12 +2,12 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_31) on Wed Jun 06 03:10:33 CDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 18:36:27 CDT 2012 -->
 <TITLE>
 TJTransformer
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-06">
+<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
 
index f4b8348dbb50b7fbe65e53122b24c54a33cc0f88..b340c9d4468704fbf418d4f8fea3ab23c5d5eed7 100644 (file)
@@ -2,12 +2,12 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_31) on Wed Jun 06 03:10:33 CDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 18:36:27 CDT 2012 -->
 <TITLE>
 org.libjpegturbo.turbojpeg
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-06">
+<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
 
index acca4fd3c0f9faee84a0bc87311129644652cefa..89d2e04f584cfda237c2d29d792eecece53a0fb8 100644 (file)
@@ -2,12 +2,12 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_31) on Wed Jun 06 03:10:33 CDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 18:36:27 CDT 2012 -->
 <TITLE>
 org.libjpegturbo.turbojpeg
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-06">
+<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
 
index 41b9c16c62fadab316298e2b1ed061788fb8e40f..da7e74375f046c2b9b0563edee820c3bb55eac92 100644 (file)
@@ -2,12 +2,12 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_31) on Wed Jun 06 03:10:33 CDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 18:36:27 CDT 2012 -->
 <TITLE>
 org.libjpegturbo.turbojpeg Class Hierarchy
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-06">
+<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
 
index 07caa974fcc02f359564c2170fbef57b95cf1ba9..b161e7396d7befe3ee79ac9630716bdaed9eadab 100644 (file)
@@ -2,12 +2,12 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_31) on Wed Jun 06 03:10:33 CDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 18:36:27 CDT 2012 -->
 <TITLE>
 Class Hierarchy
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-06">
+<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
 
index b5fdd4d436b64e7dd5726072f815e61e7b7f101e..b626f001df85f580a0a4eeb3b2f34d4b521006d5 100644 (file)
@@ -2,12 +2,12 @@
 <!--NewPage-->
 <HTML>
 <HEAD>
-<!-- Generated by javadoc (build 1.6.0_31) on Wed Jun 06 03:10:33 CDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_33) on Fri Jun 29 18:36:27 CDT 2012 -->
 <TITLE>
 Serialized Form
 </TITLE>
 
-<META NAME="date" CONTENT="2012-06-06">
+<META NAME="date" CONTENT="2012-06-29">
 
 <LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
 
index 5e0c0b7c2accfa551198e94a94a364c51912d3b5..78a72f67b3f305682aa4dd8e7dc40cf0fa75239d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C)2011 D. R. Commander.  All Rights Reserved.
+ * Copyright (C)2011-2012 D. R. Commander.  All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -272,29 +272,51 @@ final public class TJ {
   final public static int FLAG_BOTTOMUP     = 2;
   /**
    * Turn off CPU auto-detection and force TurboJPEG to use MMX code
-   * (IPP and 32-bit libjpeg-turbo versions only.)
+   * (if the underlying codec supports it.)
    */
   final public static int FLAG_FORCEMMX     = 8;
   /**
    * Turn off CPU auto-detection and force TurboJPEG to use SSE code
-   * (32-bit IPP and 32-bit libjpeg-turbo versions only.)
+   * (if the underlying codec supports it.)
    */
   final public static int FLAG_FORCESSE     = 16;
   /**
    * Turn off CPU auto-detection and force TurboJPEG to use SSE2 code
-   * (32-bit IPP and 32-bit libjpeg-turbo versions only.)
+   * (if the underlying codec supports it.)
    */
   final public static int FLAG_FORCESSE2    = 32;
   /**
    * Turn off CPU auto-detection and force TurboJPEG to use SSE3 code
-   *(64-bit IPP version only.)
+   * (if the underlying codec supports it.)
    */
   final public static int FLAG_FORCESSE3    = 128;
   /**
-   * Use fast, inaccurate chrominance upsampling routines in the JPEG
-   * decompressor (libjpeg and libjpeg-turbo versions only.)
+   * When decompressing, use the fastest chrominance upsampling algorithm
+   * available in the underlying codec.  The default is to use smooth
+   * upsampling, which creates a smooth transition between neighboring
+   * chrominance components in order to reduce upsampling artifacts in the
+   * decompressed image.
    */
   final public static int FLAG_FASTUPSAMPLE = 256;
+  /**
+   * Use the fastest DCT/IDCT algorithm available in the underlying codec.  The
+   * default if this flag is not specified is implementation-specific.  The
+   * libjpeg implementation, for example, uses the fast algorithm by default
+   * when compressing, because this has been shown to have only a very slight
+   * effect on accuracy, but it uses the accurate algorithm when decompressing,
+   * because this has been shown to have a larger effect.
+   */
+  final public static int FLAG_FASTDCT      =  2048;
+  /**
+   * Use the most accurate DCT/IDCT algorithm available in the underlying
+   * codec.  The default if this flag is not specified is
+   * implementation-specific.  The libjpeg implementation, for example, uses
+   * the fast algorithm by default when compressing, because this has been
+   * shown to have only a very slight effect on accuracy, but it uses the
+   * accurate algorithm when decompressing, because this has been shown to have
+   * a larger effect.
+   */
+  final public static int FLAG_ACCURATEDCT  =  4096;
 
 
   /**
index e529ffce3287fe80d67a0ad7f9e2adb3c7f962b6..87b462f4c332d4de5ba7de4d626a49310357040e 100644 (file)
--- a/tjbench.c
+++ b/tjbench.c
@@ -667,7 +667,7 @@ void usage(char *progname)
 {
        int i;
        printf("USAGE: %s\n", progname);
-       printf("       <Inputfile (BMP|PPM)> <%% Quality> [options]\n\n");
+       printf("       <Inputfile (BMP|PPM)> <Quality> [options]\n\n");
        printf("       %s\n", progname);
        printf("       <Inputfile (JPG)> [options]\n\n");
        printf("Options:\n\n");
@@ -680,8 +680,12 @@ void usage(char *progname)
        printf("     Force MMX, SSE, SSE2, or SSE3 code paths in the underlying codec\n");
        printf("-rgb, -bgr, -rgbx, -bgrx, -xbgr, -xrgb =\n");
        printf("     Test the specified color conversion path in the codec (default: BGR)\n");
-       printf("-fastupsample = Use fast, inaccurate upsampling code to perform 4:2:2 and 4:2:0\n");
-       printf("     YUV decoding\n");
+       printf("-fastupsample = Use the fastest chrominance upsampling algorithm available in\n");
+       printf("     the underlying codec\n");
+       printf("-fastdct = Use the fastest DCT/IDCT algorithms available in the underlying\n");
+       printf("     codec\n");
+       printf("-accuratedct = Use the most accurate DCT/IDCT algorithms available in the\n");
+       printf("     underlying codec\n");
        printf("-quiet = Output results in tabular rather than verbose format\n");
        printf("-yuvencode = Encode RGB input as planar YUV rather than compressing as JPEG\n");
        printf("-yuvdecode = Decode JPEG image to planar YUV rather than RGB\n");
@@ -796,6 +800,16 @@ int main(int argc, char *argv[])
                                printf("Using fast upsampling code\n\n");
                                flags|=TJFLAG_FASTUPSAMPLE;
                        }
+                       if(!strcasecmp(argv[i], "-fastdct"))
+                       {
+                               printf("Using fastest DCT/IDCT algorithm\n\n");
+                               flags|=TJFLAG_FASTDCT;
+                       }
+                       if(!strcasecmp(argv[i], "-accuratedct"))
+                       {
+                               printf("Using most accurate DCT/IDCT algorithm\n\n");
+                               flags|=TJFLAG_ACCURATEDCT;
+                       }
                        if(!strcasecmp(argv[i], "-rgb")) pf=TJPF_RGB;
                        if(!strcasecmp(argv[i], "-rgbx")) pf=TJPF_RGBX;
                        if(!strcasecmp(argv[i], "-bgr")) pf=TJPF_BGR;
index 390b044bd581f9c367ca9563c3c7e9b53d148270..72b93f8e2312254fe379c8641848146acfa3345c 100755 (executable)
@@ -39,56 +39,73 @@ for image in $IMAGES; do
 
        cp $IMGDIR/$image $OUTDIR
        basename=`basename $image .${EXT}`
-       $EXEDIR/cjpeg -quality 95 -dct fast -grayscale $IMGDIR/${basename}.${EXT} >$OUTDIR/${basename}_GRAY_cjpeg.jpg
-       $EXEDIR/cjpeg -quality 95 -dct fast -sample 2x2 $IMGDIR/${basename}.${EXT} >$OUTDIR/${basename}_420_cjpeg.jpg
-       $EXEDIR/cjpeg -quality 95 -dct fast -sample 2x1 $IMGDIR/${basename}.${EXT} >$OUTDIR/${basename}_422_cjpeg.jpg
-       $EXEDIR/cjpeg -quality 95 -dct fast -sample 1x1 $IMGDIR/${basename}.${EXT} >$OUTDIR/${basename}_444_cjpeg.jpg
+       $EXEDIR/cjpeg -quality 95 -dct fast -grayscale $IMGDIR/${basename}.${EXT} >$OUTDIR/${basename}_GRAY_fast_cjpeg.jpg
+       $EXEDIR/cjpeg -quality 95 -dct fast -sample 2x2 $IMGDIR/${basename}.${EXT} >$OUTDIR/${basename}_420_fast_cjpeg.jpg
+       $EXEDIR/cjpeg -quality 95 -dct fast -sample 2x1 $IMGDIR/${basename}.${EXT} >$OUTDIR/${basename}_422_fast_cjpeg.jpg
+       $EXEDIR/cjpeg -quality 95 -dct fast -sample 1x1 $IMGDIR/${basename}.${EXT} >$OUTDIR/${basename}_444_fast_cjpeg.jpg
+       $EXEDIR/cjpeg -quality 95 -dct int -grayscale $IMGDIR/${basename}.${EXT} >$OUTDIR/${basename}_GRAY_accurate_cjpeg.jpg
+       $EXEDIR/cjpeg -quality 95 -dct int -sample 2x2 $IMGDIR/${basename}.${EXT} >$OUTDIR/${basename}_420_accurate_cjpeg.jpg
+       $EXEDIR/cjpeg -quality 95 -dct int -sample 2x1 $IMGDIR/${basename}.${EXT} >$OUTDIR/${basename}_422_accurate_cjpeg.jpg
+       $EXEDIR/cjpeg -quality 95 -dct int -sample 1x1 $IMGDIR/${basename}.${EXT} >$OUTDIR/${basename}_444_accurate_cjpeg.jpg
        for samp in GRAY 420 422 444; do
-               $EXEDIR/djpeg -rgb $BMPARG $OUTDIR/${basename}_${samp}_cjpeg.jpg >$OUTDIR/${basename}_${samp}_djpeg.${EXT}
+               $EXEDIR/djpeg -rgb $BMPARG $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg >$OUTDIR/${basename}_${samp}_default_djpeg.${EXT}
+               $EXEDIR/djpeg -dct fast -rgb $BMPARG $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg >$OUTDIR/${basename}_${samp}_fast_djpeg.${EXT}
+               $EXEDIR/djpeg -dct int -rgb $BMPARG $OUTDIR/${basename}_${samp}_accurate_cjpeg.jpg >$OUTDIR/${basename}_${samp}_accurate_djpeg.${EXT}
        done
        for samp in 420 422; do
-               $EXEDIR/djpeg -nosmooth $BMPARG $OUTDIR/${basename}_${samp}_cjpeg.jpg >$OUTDIR/${basename}_${samp}_djpeg_nosmooth.${EXT}
+               $EXEDIR/djpeg -nosmooth $BMPARG $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg >$OUTDIR/${basename}_${samp}_default_nosmooth_djpeg.${EXT}
+               $EXEDIR/djpeg -dct fast -nosmooth $BMPARG $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg >$OUTDIR/${basename}_${samp}_fast_nosmooth_djpeg.${EXT}
+               $EXEDIR/djpeg -dct int -nosmooth $BMPARG $OUTDIR/${basename}_${samp}_accurate_cjpeg.jpg >$OUTDIR/${basename}_${samp}_accurate_nosmooth_djpeg.${EXT}
        done
 
        # Compression
-       runme $EXEDIR/tjbench $OUTDIR/$image 95 -rgb -quiet -benchtime 0.01
-       for s in GRAY 420 422 444; do
-               runme cmp $OUTDIR/${basename}_${s}_Q95.jpg $OUTDIR/${basename}_${s}_cjpeg.jpg
+       for dct in accurate fast; do
+               runme $EXEDIR/tjbench $OUTDIR/$image 95 -rgb -quiet -benchtime 0.01 -${dct}dct
+               for samp in GRAY 420 422 444; do
+                       runme cmp $OUTDIR/${basename}_${samp}_Q95.jpg $OUTDIR/${basename}_${samp}_${dct}_cjpeg.jpg
+               done
        done
 
-       # Tiled compression & decompression
-       runme $EXEDIR/tjbench $OUTDIR/$image 95 -rgb -tile -quiet -benchtime 0.01
-       for samp in GRAY 444; do
-               for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].${EXT} \
-                       $OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
-                       runme cmp $i $OUTDIR/${basename}_${samp}_djpeg.${EXT}
-                       rm $i
+       for dct in fast accurate default; do
+               dctarg=-${dct}dct
+               if [ "${dct}" = "default" ]; then
+                       dctarg=
+               fi
+
+               # Tiled compression & decompression
+               runme $EXEDIR/tjbench $OUTDIR/$image 95 -rgb -tile -quiet -benchtime 0.01 ${dctarg}
+               for samp in GRAY 444; do
+                       for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].${EXT} \
+                               $OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
+                               runme cmp $i $OUTDIR/${basename}_${samp}_${dct}_djpeg.${EXT}
+                               rm $i
+                       done
                done
-       done
-       runme $EXEDIR/tjbench $OUTDIR/$image 95 -rgb -tile -quiet -benchtime 0.01 -fastupsample
-       for samp in 420 422; do
-               for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].${EXT} \
-                       $OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
-                       runme cmp $i $OUTDIR/${basename}_${samp}_djpeg_nosmooth.${EXT}
-                       rm $i
+               runme $EXEDIR/tjbench $OUTDIR/$image 95 -rgb -tile -quiet -benchtime 0.01 -fastupsample ${dctarg}
+               for samp in 420 422; do
+                       for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].${EXT} \
+                               $OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
+                               runme cmp $i $OUTDIR/${basename}_${samp}_${dct}_nosmooth_djpeg.${EXT}
+                               rm $i
+                       done
                done
-       done
 
-       # Tiled decompression
-       for samp in GRAY 444; do
-               runme $EXEDIR/tjbench $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -tile -quiet -benchtime 0.01
-               for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].${EXT} \
-                       $OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
-                       runme cmp $i $OUTDIR/${basename}_${samp}_djpeg.${EXT}
-                       rm $i
+               # Tiled decompression
+               for samp in GRAY 444; do
+                       runme $EXEDIR/tjbench $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -tile -quiet -benchtime 0.01 ${dctarg}
+                       for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].${EXT} \
+                               $OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
+                               runme cmp $i $OUTDIR/${basename}_${samp}_${dct}_djpeg.${EXT}
+                               rm $i
+                       done
                done
-       done
-       for samp in 420 422; do
-               runme $EXEDIR/tjbench $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -tile -quiet -benchtime 0.01 -fastupsample
-               for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].${EXT} \
-                       $OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
-                       runme cmp $i $OUTDIR/${basename}_${samp}_djpeg_nosmooth.${EXT}
-                       rm $i
+               for samp in 420 422; do
+                       runme $EXEDIR/tjbench $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -tile -quiet -benchtime 0.01 -fastupsample ${dctarg}
+                       for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].${EXT} \
+                               $OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
+                               runme cmp $i $OUTDIR/${basename}_${samp}_${dct}_nosmooth_djpeg.${EXT}
+                               rm $i
+                       done
                done
        done
 
@@ -96,7 +113,7 @@ for image in $IMAGES; do
        for scale in 2_1 15_8 7_4 13_8 3_2 11_8 5_4 9_8 7_8 3_4 5_8 1_2 3_8 1_4 1_8; do
                scalearg=`echo $scale | sed s@_@/@g`
                for samp in GRAY 420 422 444; do
-                       $EXEDIR/djpeg -rgb -scale ${scalearg} $BMPARG $OUTDIR/${basename}_${samp}_cjpeg.jpg >$OUTDIR/${basename}_${samp}_${scale}_djpeg.${EXT}
+                       $EXEDIR/djpeg -rgb -scale ${scalearg} $BMPARG $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg >$OUTDIR/${basename}_${samp}_${scale}_djpeg.${EXT}
                        runme $EXEDIR/tjbench $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -scale ${scalearg} -quiet -benchtime 0.01
                        runme cmp $OUTDIR/${basename}_${samp}_Q95_${scale}.${EXT} $OUTDIR/${basename}_${samp}_${scale}_djpeg.${EXT}
                        rm $OUTDIR/${basename}_${samp}_Q95_${scale}.${EXT}
index fb7b4c583ea6a727f5449269ddf5f2e018553741..40b342ed45078ac4f0c48b28de6afb1be09dc19d 100755 (executable)
@@ -36,33 +36,59 @@ for image in $IMAGES; do
 
        cp $IMGDIR/$image $OUTDIR
        basename=`basename $image .bmp`
-       $EXEDIR/cjpeg -quality 95 -dct fast -grayscale $IMGDIR/${basename}.bmp >$OUTDIR/${basename}_GRAY_cjpeg.jpg
-       $EXEDIR/cjpeg -quality 95 -dct fast -sample 2x2 $IMGDIR/${basename}.bmp >$OUTDIR/${basename}_420_cjpeg.jpg
-       $EXEDIR/cjpeg -quality 95 -dct fast -sample 2x1 $IMGDIR/${basename}.bmp >$OUTDIR/${basename}_422_cjpeg.jpg
-       $EXEDIR/cjpeg -quality 95 -dct fast -sample 1x1 $IMGDIR/${basename}.bmp >$OUTDIR/${basename}_444_cjpeg.jpg
+       $EXEDIR/cjpeg -quality 95 -dct fast -grayscale $IMGDIR/${basename}.bmp >$OUTDIR/${basename}_GRAY_fast_cjpeg.jpg
+       $EXEDIR/cjpeg -quality 95 -dct fast -sample 2x2 $IMGDIR/${basename}.bmp >$OUTDIR/${basename}_420_fast_cjpeg.jpg
+       $EXEDIR/cjpeg -quality 95 -dct fast -sample 2x1 $IMGDIR/${basename}.bmp >$OUTDIR/${basename}_422_fast_cjpeg.jpg
+       $EXEDIR/cjpeg -quality 95 -dct fast -sample 1x1 $IMGDIR/${basename}.bmp >$OUTDIR/${basename}_444_fast_cjpeg.jpg
+       $EXEDIR/cjpeg -quality 95 -dct int -grayscale $IMGDIR/${basename}.bmp >$OUTDIR/${basename}_GRAY_accurate_cjpeg.jpg
+       $EXEDIR/cjpeg -quality 95 -dct int -sample 2x2 $IMGDIR/${basename}.bmp >$OUTDIR/${basename}_420_accurate_cjpeg.jpg
+       $EXEDIR/cjpeg -quality 95 -dct int -sample 2x1 $IMGDIR/${basename}.bmp >$OUTDIR/${basename}_422_accurate_cjpeg.jpg
+       $EXEDIR/cjpeg -quality 95 -dct int -sample 1x1 $IMGDIR/${basename}.bmp >$OUTDIR/${basename}_444_accurate_cjpeg.jpg
        for samp in GRAY 420 422 444; do
-               $EXEDIR/djpeg -rgb -bmp $OUTDIR/${basename}_${samp}_cjpeg.jpg >$OUTDIR/${basename}_${samp}_djpeg.bmp
+               $EXEDIR/djpeg -rgb -bmp $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg >$OUTDIR/${basename}_${samp}_default_djpeg.bmp
+               $EXEDIR/djpeg -dct fast -rgb -bmp $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg >$OUTDIR/${basename}_${samp}_fast_djpeg.bmp
+               $EXEDIR/djpeg -dct int -rgb -bmp $OUTDIR/${basename}_${samp}_accurate_cjpeg.jpg >$OUTDIR/${basename}_${samp}_accurate_djpeg.bmp
+       done
+       for samp in 420 422; do
+               $EXEDIR/djpeg -nosmooth -bmp $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg >$OUTDIR/${basename}_${samp}_default_nosmooth_djpeg.bmp
+               $EXEDIR/djpeg -dct fast -nosmooth -bmp $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg >$OUTDIR/${basename}_${samp}_fast_nosmooth_djpeg.bmp
+               $EXEDIR/djpeg -dct int -nosmooth -bmp $OUTDIR/${basename}_${samp}_accurate_cjpeg.jpg >$OUTDIR/${basename}_${samp}_accurate_nosmooth_djpeg.bmp
        done
 
        # Compression
-       for samp in GRAY 420 422 444; do
-               runme $JAVA TJExample $OUTDIR/$image $OUTDIR/${basename}_${samp}.jpg -q 95 -samp ${samp}
-               runme cmp $OUTDIR/${basename}_${samp}.jpg $OUTDIR/${basename}_${samp}_cjpeg.jpg
+       for dct in fast accurate; do
+               for samp in GRAY 420 422 444; do
+                       runme $JAVA TJExample $OUTDIR/$image $OUTDIR/${basename}_${samp}_${dct}.jpg -q 95 -samp ${samp} -${dct}dct
+                       runme cmp $OUTDIR/${basename}_${samp}_${dct}.jpg $OUTDIR/${basename}_${samp}_${dct}_cjpeg.jpg
+               done
        done
 
        # Decompression
-       for samp in 420 GRAY 420 422 444; do
-               runme $JAVA TJExample $OUTDIR/${basename}_${samp}.jpg $OUTDIR/${basename}_${samp}.bmp
-               runme cmp -i 54:54 $OUTDIR/${basename}_${samp}.bmp $OUTDIR/${basename}_${samp}_djpeg.bmp
-               rm $OUTDIR/${basename}_${samp}.bmp
+       for dct in fast accurate default; do
+               srcdct=${dct}
+               dctarg=-${dct}dct
+               if [ "${dct}" = "default" ]; then
+                       srcdct=fast
+                       dctarg=
+               fi
+               for samp in GRAY 420 422 444; do
+                       runme $JAVA TJExample $OUTDIR/${basename}_${samp}_${srcdct}.jpg $OUTDIR/${basename}_${samp}_${dct}.bmp ${dctarg}
+                       runme cmp -i 54:54 $OUTDIR/${basename}_${samp}_${dct}.bmp $OUTDIR/${basename}_${samp}_${dct}_djpeg.bmp
+                       rm $OUTDIR/${basename}_${samp}_${dct}.bmp
+               done
+               for samp in 420 422; do
+                       runme $JAVA TJExample $OUTDIR/${basename}_${samp}_${srcdct}.jpg $OUTDIR/${basename}_${samp}_${dct}_nosmooth.bmp -fastupsample ${dctarg}
+                       runme cmp -i 54:54 $OUTDIR/${basename}_${samp}_${dct}_nosmooth.bmp $OUTDIR/${basename}_${samp}_${dct}_nosmooth_djpeg.bmp
+                       rm $OUTDIR/${basename}_${samp}_${dct}_nosmooth.bmp
+               done
        done
 
        # Scaled decompression
        for scale in 2_1 15_8 7_4 13_8 3_2 11_8 5_4 9_8 7_8 3_4 5_8 1_2 3_8 1_4 1_8; do
                scalearg=`echo $scale | sed s@_@/@g`
                for samp in GRAY 420 422 444; do
-                       $EXEDIR/djpeg -rgb -bmp -scale ${scalearg} $OUTDIR/${basename}_${samp}_cjpeg.jpg >$OUTDIR/${basename}_${samp}_${scale}_djpeg.bmp
-                       runme $JAVA TJExample $OUTDIR/${basename}_${samp}.jpg $OUTDIR/${basename}_${samp}_${scale}.bmp -scale ${scalearg}
+                       $EXEDIR/djpeg -rgb -bmp -scale ${scalearg} $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg >$OUTDIR/${basename}_${samp}_${scale}_djpeg.bmp
+                       runme $JAVA TJExample $OUTDIR/${basename}_${samp}_fast.jpg $OUTDIR/${basename}_${samp}_${scale}.bmp -scale ${scalearg}
                        runme cmp -i 54:54 $OUTDIR/${basename}_${samp}_${scale}.bmp $OUTDIR/${basename}_${samp}_${scale}_djpeg.bmp
                        rm $OUTDIR/${basename}_${samp}_${scale}.bmp
                done
@@ -70,20 +96,26 @@ for image in $IMAGES; do
 
        # Transforms
        for samp in GRAY 420 422 444; do
-               $EXEDIR/jpegtran -crop 70x60+16+16 -flip horizontal -trim $OUTDIR/${basename}_${samp}.jpg >$OUTDIR/${basename}_${samp}_hflip_jpegtran.jpg
-               $EXEDIR/jpegtran -crop 70x60+16+16 -flip vertical -trim $OUTDIR/${basename}_${samp}.jpg >$OUTDIR/${basename}_${samp}_vflip_jpegtran.jpg
-               $EXEDIR/jpegtran -crop 70x60+16+16 -transpose -trim $OUTDIR/${basename}_${samp}.jpg >$OUTDIR/${basename}_${samp}_transpose_jpegtran.jpg
-               $EXEDIR/jpegtran -crop 70x60+16+16 -transverse -trim $OUTDIR/${basename}_${samp}.jpg >$OUTDIR/${basename}_${samp}_transverse_jpegtran.jpg
-               $EXEDIR/jpegtran -crop 70x60+16+16 -rotate 90 -trim $OUTDIR/${basename}_${samp}.jpg >$OUTDIR/${basename}_${samp}_rot90_jpegtran.jpg
-               $EXEDIR/jpegtran -crop 70x60+16+16 -rotate 180 -trim $OUTDIR/${basename}_${samp}.jpg >$OUTDIR/${basename}_${samp}_rot180_jpegtran.jpg
-               $EXEDIR/jpegtran -crop 70x60+16+16 -rotate 270 -trim $OUTDIR/${basename}_${samp}.jpg >$OUTDIR/${basename}_${samp}_rot270_jpegtran.jpg
+               $EXEDIR/jpegtran -crop 70x60+16+16 -flip horizontal -trim $OUTDIR/${basename}_${samp}_fast.jpg >$OUTDIR/${basename}_${samp}_hflip_jpegtran.jpg
+               $EXEDIR/jpegtran -crop 70x60+16+16 -flip vertical -trim $OUTDIR/${basename}_${samp}_fast.jpg >$OUTDIR/${basename}_${samp}_vflip_jpegtran.jpg
+               $EXEDIR/jpegtran -crop 70x60+16+16 -transpose -trim $OUTDIR/${basename}_${samp}_fast.jpg >$OUTDIR/${basename}_${samp}_transpose_jpegtran.jpg
+               $EXEDIR/jpegtran -crop 70x60+16+16 -transverse -trim $OUTDIR/${basename}_${samp}_fast.jpg >$OUTDIR/${basename}_${samp}_transverse_jpegtran.jpg
+               $EXEDIR/jpegtran -crop 70x60+16+16 -rotate 90 -trim $OUTDIR/${basename}_${samp}_fast.jpg >$OUTDIR/${basename}_${samp}_rot90_jpegtran.jpg
+               $EXEDIR/jpegtran -crop 70x60+16+16 -rotate 180 -trim $OUTDIR/${basename}_${samp}_fast.jpg >$OUTDIR/${basename}_${samp}_rot180_jpegtran.jpg
+               $EXEDIR/jpegtran -crop 70x60+16+16 -rotate 270 -trim $OUTDIR/${basename}_${samp}_fast.jpg >$OUTDIR/${basename}_${samp}_rot270_jpegtran.jpg
        done
        for xform in hflip vflip transpose transverse rot90 rot180 rot270; do
                for samp in GRAY 420 422 444; do
-                       runme $JAVA TJExample $OUTDIR/${basename}_${samp}.jpg $OUTDIR/${basename}_${samp}_${xform}.jpg -$xform -crop 16,16,70x60
+                       runme $JAVA TJExample $OUTDIR/${basename}_${samp}_fast.jpg $OUTDIR/${basename}_${samp}_${xform}.jpg -$xform -crop 16,16,70x60
                        runme cmp $OUTDIR/${basename}_${samp}_${xform}.jpg $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg
                        $EXEDIR/djpeg -rgb -bmp $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg >$OUTDIR/${basename}_${samp}_${xform}_jpegtran.bmp
-                       runme $JAVA TJExample $OUTDIR/${basename}_${samp}.jpg $OUTDIR/${basename}_${samp}_${xform}.bmp -$xform -crop 16,16,70x60
+                       runme $JAVA TJExample $OUTDIR/${basename}_${samp}_fast.jpg $OUTDIR/${basename}_${samp}_${xform}.bmp -$xform -crop 16,16,70x60
+                       runme cmp -i 54:54 $OUTDIR/${basename}_${samp}_${xform}.bmp $OUTDIR/${basename}_${samp}_${xform}_jpegtran.bmp
+                       rm $OUTDIR/${basename}_${samp}_${xform}.bmp
+               done
+               for samp in 420 422; do
+                       $EXEDIR/djpeg -nosmooth -rgb -bmp $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg >$OUTDIR/${basename}_${samp}_${xform}_jpegtran.bmp
+                       runme $JAVA TJExample $OUTDIR/${basename}_${samp}_fast.jpg $OUTDIR/${basename}_${samp}_${xform}.bmp -$xform -crop 16,16,70x60 -fastupsample
                        runme cmp -i 54:54 $OUTDIR/${basename}_${samp}_${xform}.bmp $OUTDIR/${basename}_${samp}_${xform}_jpegtran.bmp
                        rm $OUTDIR/${basename}_${samp}_${xform}.bmp
                done
@@ -92,9 +124,9 @@ for image in $IMAGES; do
        # Grayscale transform
        for xform in hflip vflip transpose transverse rot90 rot180 rot270; do
                for samp in GRAY 444 422 420; do
-                       runme $JAVA TJExample $OUTDIR/${basename}_${samp}.jpg $OUTDIR/${basename}_${samp}_${xform}.jpg -$xform -grayscale -crop 16,16,70x60
+                       runme $JAVA TJExample $OUTDIR/${basename}_${samp}_fast.jpg $OUTDIR/${basename}_${samp}_${xform}.jpg -$xform -grayscale -crop 16,16,70x60
                        runme cmp $OUTDIR/${basename}_${samp}_${xform}.jpg $OUTDIR/${basename}_GRAY_${xform}_jpegtran.jpg
-                       runme $JAVA TJExample $OUTDIR/${basename}_${samp}.jpg $OUTDIR/${basename}_${samp}_${xform}.bmp -$xform -grayscale -crop 16,16,70x60
+                       runme $JAVA TJExample $OUTDIR/${basename}_${samp}_fast.jpg $OUTDIR/${basename}_${samp}_${xform}.bmp -$xform -grayscale -crop 16,16,70x60
                        runme cmp -i 54:54 $OUTDIR/${basename}_${samp}_${xform}.bmp $OUTDIR/${basename}_GRAY_${xform}_jpegtran.bmp
                        rm $OUTDIR/${basename}_${samp}_${xform}.bmp
                done
@@ -106,7 +138,7 @@ for image in $IMAGES; do
                        for scale in 2_1 15_8 7_4 13_8 3_2 11_8 5_4 9_8 7_8 3_4 5_8 1_2 3_8 1_4 1_8; do
                                scalearg=`echo $scale | sed s@_@/@g`
                                $EXEDIR/djpeg -rgb -bmp -scale ${scalearg} $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg >$OUTDIR/${basename}_${samp}_${xform}_${scale}_jpegtran.bmp
-                               runme $JAVA TJExample $OUTDIR/${basename}_${samp}.jpg $OUTDIR/${basename}_${samp}_${xform}_${scale}.bmp -$xform -scale ${scalearg} -crop 16,16,70x60
+                               runme $JAVA TJExample $OUTDIR/${basename}_${samp}_fast.jpg $OUTDIR/${basename}_${samp}_${xform}_${scale}.bmp -$xform -scale ${scalearg} -crop 16,16,70x60
                                runme cmp -i 54:54 $OUTDIR/${basename}_${samp}_${xform}_${scale}.bmp $OUTDIR/${basename}_${samp}_${xform}_${scale}_jpegtran.bmp
                                rm $OUTDIR/${basename}_${samp}_${xform}_${scale}.bmp
                        done
index c875fd93be8066eca0ef2d1d94a9db40f3c69251..4576a87100fdcb0adcb4a69b43a93a9b7bf95f52 100644 (file)
@@ -145,7 +145,7 @@ static int getPixelFormat(int pixelSize, int flags)
 }
 
 static int setCompDefaults(struct jpeg_compress_struct *cinfo,
-       int pixelFormat, int subsamp, int jpegQual)
+       int pixelFormat, int subsamp, int jpegQual, int flags)
 {
        int retval=0;
 
@@ -191,7 +191,7 @@ static int setCompDefaults(struct jpeg_compress_struct *cinfo,
        if(jpegQual>=0)
        {
                jpeg_set_quality(cinfo, jpegQual, TRUE);
-               if(jpegQual>=96) cinfo->dct_method=JDCT_ISLOW;
+               if(jpegQual>=96 || flags&TJFLAG_ACCURATEDCT) cinfo->dct_method=JDCT_ISLOW;
                else cinfo->dct_method=JDCT_FASTEST;
        }
        if(subsamp==TJSAMP_GRAY)
@@ -210,7 +210,7 @@ static int setCompDefaults(struct jpeg_compress_struct *cinfo,
 }
 
 static int setDecompDefaults(struct jpeg_decompress_struct *dinfo,
-       int pixelFormat)
+       int pixelFormat, int flags)
 {
        int retval=0;
 
@@ -258,6 +258,8 @@ static int setDecompDefaults(struct jpeg_decompress_struct *dinfo,
                        _throw("Unsupported pixel format");
        }
 
+       if(flags&TJFLAG_FASTDCT) dinfo->dct_method=JDCT_FASTEST;
+
        bailout:
        return retval;
 }
@@ -618,7 +620,7 @@ DLLEXPORT int DLLCALL tjCompress2(tjhandle handle, unsigned char *srcBuf,
                alloc=0;  *jpegSize=tjBufSize(width, height, jpegSubsamp);
        }
        jpeg_mem_dest_tj(cinfo, jpegBuf, jpegSize, alloc);
-       if(setCompDefaults(cinfo, pixelFormat, jpegSubsamp, jpegQual)==-1)
+       if(setCompDefaults(cinfo, pixelFormat, jpegSubsamp, jpegQual, flags)==-1)
                return -1;
 
        jpeg_start_compress(cinfo, TRUE);
@@ -726,7 +728,7 @@ DLLEXPORT int DLLCALL tjEncodeYUV2(tjhandle handle, unsigned char *srcBuf,
 
        yuvsize=tjBufSizeYUV(width, height, subsamp);
        jpeg_mem_dest_tj(cinfo, &dstBuf, &yuvsize, 0);
-       if(setCompDefaults(cinfo, pixelFormat, subsamp, -1)==-1) return -1;
+       if(setCompDefaults(cinfo, pixelFormat, subsamp, -1, flags)==-1) return -1;
 
        jpeg_start_compress(cinfo, TRUE);
        pw=PAD(width, cinfo->max_h_samp_factor);
@@ -955,7 +957,7 @@ DLLEXPORT int DLLCALL tjDecompress2(tjhandle handle, unsigned char *jpegBuf,
 
        jpeg_mem_src_tj(dinfo, jpegBuf, jpegSize);
        jpeg_read_header(dinfo, TRUE);
-       if(setDecompDefaults(dinfo, pixelFormat)==-1)
+       if(setDecompDefaults(dinfo, pixelFormat, flags)==-1)
        {
                retval=-1;  goto bailout;
        }
index 343788a06b5e773ed9576ede94afae1c65d8b7e1..7610221b4d0735505c7331e1337f8e54b57bbf4b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C)2009-2011 D. R. Commander.  All Rights Reserved.
+ * Copyright (C)2009-2012 D. R. Commander.  All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -226,28 +226,30 @@ static const int tjPixelSize[TJ_NUMPF] = {3, 3, 4, 4, 4, 4, 1, 4, 4, 4, 4};
  */
 #define TJFLAG_BOTTOMUP        2
 /**
- * Turn off CPU auto-detection and force TurboJPEG to use MMX code (IPP and
- * 32-bit libjpeg-turbo versions only.)
+ * Turn off CPU auto-detection and force TurboJPEG to use MMX code (if the
+ * underlying codec supports it.)
  */
 #define TJFLAG_FORCEMMX        8
 /**
- * Turn off CPU auto-detection and force TurboJPEG to use SSE code (32-bit IPP
- * and 32-bit libjpeg-turbo versions only)
+ * Turn off CPU auto-detection and force TurboJPEG to use SSE code (if the
+ * underlying codec supports it.)
  */
 #define TJFLAG_FORCESSE       16
 /**
- * Turn off CPU auto-detection and force TurboJPEG to use SSE2 code (32-bit IPP
- * and 32-bit libjpeg-turbo versions only)
+ * Turn off CPU auto-detection and force TurboJPEG to use SSE2 code (if the
+ * underlying codec supports it.)
  */
 #define TJFLAG_FORCESSE2      32
 /**
- * Turn off CPU auto-detection and force TurboJPEG to use SSE3 code (64-bit IPP
- * version only)
+ * Turn off CPU auto-detection and force TurboJPEG to use SSE3 code (if the
+ * underlying codec supports it.)
  */
 #define TJFLAG_FORCESSE3     128
 /**
- * Use fast, inaccurate chrominance upsampling routines in the JPEG
- * decompressor (libjpeg and libjpeg-turbo versions only)
+ * When decompressing, use the fastest chrominance upsampling algorithm
+ * available in the underlying codec.  The default is to use smooth upsampling,
+ * which creates a smooth transition between neighboring chrominance components
+ * in order to reduce upsampling artifacts in the decompressed image.
  */
 #define TJFLAG_FASTUPSAMPLE  256
 /**
@@ -258,6 +260,24 @@ static const int tjPixelSize[TJ_NUMPF] = {3, 3, 4, 4, 4, 4, 1, 4, 4, 4, 4};
  * versions of TurboJPEG.
  */
 #define TJFLAG_NOREALLOC     1024
+/**
+ * Use the fastest DCT/IDCT algorithm available in the underlying codec.  The
+ * default if this flag is not specified is implementation-specific.  The
+ * libjpeg implementation, for example, uses the fast algorithm by default when
+ * compressing, because this has been shown to have only a very slight effect
+ * on accuracy, but it uses the accurate algorithm when decompressing, because
+ * this has been shown to have a larger effect.
+ */
+#define TJFLAG_FASTDCT       2048
+/**
+ * Use the most accurate DCT/IDCT algorithm available in the underlying codec.
+ * The default if this flag is not specified is implementation-specific.  The
+ * libjpeg implementation, for example, uses the fast algorithm by default when
+ * compressing, because this has been shown to have only a very slight effect
+ * on accuracy, but it uses the accurate algorithm when decompressing, because
+ * this has been shown to have a larger effect.
+ */
+#define TJFLAG_ACCURATEDCT   4096
 
 
 /**