Various documentation tweaks

git-svn-id: svn+ssh://svn.code.sf.net/p/libjpeg-turbo/code/branches/1.1.x@387 632fc199-4ca6-4c93-a231-07263d6284db
This commit is contained in:
DRC
2011-02-18 04:55:08 +00:00
parent f0a5ba7542
commit ab4db657db

View File

@@ -5,7 +5,7 @@
libjpeg-turbo is a high-speed version of libjpeg for x86 and x86-64 processors libjpeg-turbo is a high-speed version of libjpeg for x86 and x86-64 processors
which uses SIMD instructions (MMX, SSE2, etc.) to accelerate baseline JPEG which uses SIMD instructions (MMX, SSE2, etc.) to accelerate baseline JPEG
compression and decompression. libjpeg-turbo is generally 2-4x as fast compression and decompression. libjpeg-turbo is generally 2-4x as fast
as the unmodified version of libjpeg, all else being equal. as the unmodified version of libjpeg v6b, all else being equal.
libjpeg-turbo was originally based on libjpeg/SIMD by Miyasaka Masaru, but libjpeg-turbo was originally based on libjpeg/SIMD by Miyasaka Masaru, but
the TigerVNC and VirtualGL projects made numerous enhancements to the codec, the TigerVNC and VirtualGL projects made numerous enhancements to the codec,
@@ -25,49 +25,21 @@ libraries can be used as drop-in replacements for libjpeg on most systems.
** License ** License
******************************************************************************* *******************************************************************************
Some of the optimizations to the Huffman encoder (jchuff.c) and decoder The TurboJPEG/OSS wrapper, as well as some of the optimizations to the Huffman
(jdhuff.c) were borrowed from VirtualGL, and thus any distribution of encoder (jchuff.c) and decoder (jdhuff.c), were borrowed from VirtualGL, and
libjpeg-turbo which includes those optimizations must, as a whole, be subject thus any distribution of libjpeg-turbo which includes those files must, as a
to the terms of the wxWindows Library Licence, Version 3.1. A copy of this whole, be subject to the terms of the wxWindows Library Licence, Version 3.1.
license can be found in this directory under LICENSE.txt. The wxWindows A copy of this license can be found in this directory under LICENSE.txt. The
Library License is based on the LGPL but includes provisions which allow the wxWindows Library License is based on the LGPL but includes provisions which
Library to be statically linked into proprietary libraries and applications allow the Library to be statically linked into proprietary libraries and
without requiring the resulting binaries to be distributed under the terms of applications without requiring the resulting binaries to be distributed under
the LGPL. the terms of the LGPL.
The rest of the source code, apart from the Huffman codec optimizations, falls The rest of the source code, apart from TurboJPEG/OSS and the Huffman codec
under a less restrictive, BSD-style license (see README.) You can choose to optimizations, falls under a less restrictive, BSD-style license (see README.)
distribute libjpeg-turbo, as a whole, under this BSD-style license by simply You can choose to distribute libjpeg-turbo, as a whole, under this BSD-style
replacing the optimized jchuff.c and jdhuff.c with their unoptimized license by simply removing TurboJPEG/OSS and replacing the optimized jchuff.c
counterparts from the libjpeg v6b source. and jdhuff.c with their unoptimized counterparts from the libjpeg v6b source.
*******************************************************************************
** Performance pitfalls
*******************************************************************************
===============
Restart Markers
===============
The optimized Huffman decoder in libjpeg-turbo does not handle restart markers
in a way that makes libjpeg happy, so it is necessary to use the slow Huffman
decoder when decompressing a JPEG image that has restart markers. This can
cause the decompression performance to drop by as much as 20%, but the
performance will still be much much greater than that of libjpeg v6b. Many
consumer packages, such as PhotoShop, use restart markers when generating JPEG
images, so images generated by those programs will experience this issue.
===============================================
Fast Integer Forward DCT at High Quality Levels
===============================================
The algorithm used by the SIMD-accelerated quantization function cannot produce
correct results whenever the fast integer forward DCT is used along with a JPEG
quality of 98-100. Thus, libjpeg-turbo must use the non-SIMD quantization
function in those cases. This causes performance to drop by as much as 40%.
It is therefore strongly advised that you use the slow integer forward DCT
whenever encoding images with a JPEG quality of 98 or higher.
******************************************************************************* *******************************************************************************
@@ -79,7 +51,7 @@ Replacing libjpeg at Run Time
============================= =============================
If a Unix application is dynamically linked with libjpeg, then you can replace If a Unix application is dynamically linked with libjpeg, then you can replace
libjpeg with libjpeg-turbo at run time by manipulating the LD_LIBRARY_PATH. libjpeg with libjpeg-turbo at run time by manipulating LD_LIBRARY_PATH.
For instance: For instance:
[Using libjpeg] [Using libjpeg]
@@ -103,28 +75,29 @@ links to the libjpeg dynamic library located in /opt/libjpeg-turbo/{lib}. This
will effectively accelerate every dynamically linked libjpeg application on the will effectively accelerate every dynamically linked libjpeg application on the
system. system.
The Windows distribution of the libjpeg-turbo SDK installs the libjpeg-turbo The libjpeg-turbo SDK for Visual C++ installs the libjpeg-turbo DLL
DLL (jpeg62.dll, jpeg7.dll, or jpeg8.dll, depending on whether libjpeg v6b, (jpeg62.dll, jpeg7.dll, or jpeg8.dll, depending on whether libjpeg v6b, v7, or
v7, or v8 emulation is enabled) into c:\libjpeg-turbo[64]\bin, and the PATH v8 emulation is enabled) into c:\libjpeg-turbo[64]\bin, and the PATH
environment variable can be modified such that this directory is searched environment variable can be modified such that this directory is searched
before any others that might contain a libjpeg DLL. However, if a libjpeg before any others that might contain a libjpeg DLL. However, if a libjpeg
DLL exists in an application's install directory, then Windows will load this DLL exists in an application's install directory, then Windows will load this
DLL first whenever the application is launched. Thus, if an application ships DLL first whenever the application is launched. Thus, if an application ships
with jpeg62.dll, jpeg7.dll, or jpeg8.dll, then back up the application's with jpeg62.dll, jpeg7.dll, or jpeg8.dll, then back up the application's
version of this DLL and copy c:\libjpeg-turbo\bin\jpeg*.dll into the version of this DLL and copy c:\libjpeg-turbo[64]\bin\jpeg*.dll into the
application's install directory to accelerate it. application's install directory to accelerate it.
The version of the libjpeg-turbo DLL distributed with the "official" The version of the libjpeg-turbo DLL distributed in the libjpeg-turbo SDK for
libjpeg-turbo SDK requires the Visual C++ 2008 C run time DLL (msvcr90.dll). Visual C++ requires the Visual C++ 2008 C run time DLL (msvcr90.dll).
msvcr90.dll ships with more recent versions of Windows, but users of older msvcr90.dll ships with more recent versions of Windows, but users of older
Windows releases can obtain it from the Visual C++ 2008 Redistributable Windows releases can obtain it from the Visual C++ 2008 Redistributable
Package, which is available as a free download from Microsoft's web site. Package, which is available as a free download from Microsoft's web site.
NOTE: Features of libjpeg which require passing a C run time structure, such NOTE: Features of libjpeg which require passing a C run time structure, such
as a file handle, from an application to libjpeg will probably not work with as a file handle, from an application to libjpeg will probably not work with
the "official" version of the libjpeg-turbo DLL unless the application is also the version of the libjpeg-turbo DLL distributed in the libjpeg-turbo SDK for
built to use the Visual C++ 2008 C run time DLL. In particular, this affects Visual C++, unless the application is also built to use the Visual C++ 2008 C
jpeg_stdio_dest() and jpeg_stdio_src(). run time DLL. In particular, this affects jpeg_stdio_dest() and
jpeg_stdio_src().
Mac applications typically embed their own copies of the libjpeg dylib inside Mac applications typically embed their own copies of the libjpeg dylib inside
the (hidden) application bundle, so it is not possible to globally replace the (hidden) application bundle, so it is not possible to globally replace
@@ -145,8 +118,8 @@ VirtualGL 2.1.x and TurboVNC 0.6 (and prior.) libjpeg-turbo contains a wrapper
library (TurboJPEG/OSS) that emulates the TurboJPEG API using libjpeg-turbo library (TurboJPEG/OSS) that emulates the TurboJPEG API using libjpeg-turbo
instead of the closed source Intel Performance Primitives. You can replace the instead of the closed source Intel Performance Primitives. You can replace the
TurboJPEG/IPP package on Linux systems with the libjpeg-turbo package in order TurboJPEG/IPP package on Linux systems with the libjpeg-turbo package in order
to make existing releases of VirtualGL 2.1.x and TurboVNC use the new codec at to make existing releases of VirtualGL 2.1.x and TurboVNC 0.x use the new codec
run time. Note that the 64-bit libjpeg-turbo packages contain only 64-bit at run time. Note that the 64-bit libjpeg-turbo packages contain only 64-bit
binaries, whereas the TurboJPEG/IPP 64-bit packages contained both 64-bit and binaries, whereas the TurboJPEG/IPP 64-bit packages contained both 64-bit and
32-bit binaries. Thus, to replace a TurboJPEG/IPP 64-bit package, install 32-bit binaries. Thus, to replace a TurboJPEG/IPP 64-bit package, install
both the 64-bit and 32-bit versions of libjpeg-turbo. both the 64-bit and 32-bit versions of libjpeg-turbo.
@@ -180,11 +153,11 @@ If using MinGW, then set
Building against libjpeg-turbo is useful, for instance, if you want to build an Building against libjpeg-turbo is useful, for instance, if you want to build an
application that leverages the libjpeg-turbo colorspace extensions (see below.) application that leverages the libjpeg-turbo colorspace extensions (see below.)
On Linux and Solaris systems, you would still need to manipulate the On Linux and Solaris systems, you would still need to manipulate
LD_LIBRARY_PATH or sym links appropriately to use libjpeg-turbo at run time. LD_LIBRARY_PATH or create appropriate sym links to use libjpeg-turbo at run
On such systems, you can pass -R /opt/libjpeg-turbo/{lib} to the linker to time. On such systems, you can pass -R /opt/libjpeg-turbo/{lib} to the linker
force the use of libjpeg-turbo at run time rather than libjpeg (also useful if to force the use of libjpeg-turbo at run time rather than libjpeg (also useful
you want to leverage the colorspace extensions), or you can link against the if you want to leverage the colorspace extensions), or you can link against the
libjpeg-turbo static library. libjpeg-turbo static library.
To force a Linux, Solaris, or MinGW application to link against the static To force a Linux, Solaris, or MinGW application to link against the static
@@ -196,8 +169,8 @@ On OS X, simply add /opt/libjpeg-turbo/lib/libjpeg.a to the linker command
line (this also works on Linux and Solaris.) line (this also works on Linux and Solaris.)
To build Visual C++ applications using libjpeg-turbo, add To build Visual C++ applications using libjpeg-turbo, add
c:\libjpeg-turbo[64]\include to your system or user INCLUDE environment c:\libjpeg-turbo[64]\include to the system or user INCLUDE environment
variable and c:\libjpeg-turbo[64]\lib to your system or user LIB environment variable and c:\libjpeg-turbo[64]\lib to the system or user LIB environment
variable, and then link against either jpeg.lib (to use the DLL version of variable, and then link against either jpeg.lib (to use the DLL version of
libjpeg-turbo) or jpeg-static.lib (to use the static version of libjpeg-turbo.) libjpeg-turbo) or jpeg-static.lib (to use the static version of libjpeg-turbo.)
@@ -255,7 +228,7 @@ releases will also be backward-incompatible.
By passing an argument of --with-jpeg7 or --with-jpeg8 to configure, or an By passing an argument of --with-jpeg7 or --with-jpeg8 to configure, or an
argument of -DWITH_JPEG7=1 or -DWITH_JPEG8=1 to cmake, you can build a version argument of -DWITH_JPEG7=1 or -DWITH_JPEG8=1 to cmake, you can build a version
of libjpeg-turbo which emulates the libjpeg v7 or v8b API/ABI, so that programs of libjpeg-turbo which emulates the libjpeg v7 or v8 API/ABI, so that programs
which are built against libjpeg v7 or v8 can be run with libjpeg-turbo. The which are built against libjpeg v7 or v8 can be run with libjpeg-turbo. The
following section describes which libjpeg v7+ features are supported and which following section describes which libjpeg v7+ features are supported and which
aren't. aren't.
@@ -300,3 +273,31 @@ Not supported:
-- jpegtran: Scaling -- jpegtran: Scaling
Seems to depend on the DCT scaling feature, which isn't supported. Seems to depend on the DCT scaling feature, which isn't supported.
*******************************************************************************
** Performance pitfalls
*******************************************************************************
===============
Restart Markers
===============
The optimized Huffman decoder in libjpeg-turbo does not handle restart markers
in a way that makes libjpeg happy, so it is necessary to use the slow Huffman
decoder when decompressing a JPEG image that has restart markers. This can
cause the decompression performance to drop by as much as 20%, but the
performance will still be much much greater than that of libjpeg v6b. Many
consumer packages, such as PhotoShop, use restart markers when generating JPEG
images, so images generated by those programs will experience this issue.
===============================================
Fast Integer Forward DCT at High Quality Levels
===============================================
The algorithm used by the SIMD-accelerated quantization function cannot produce
correct results whenever the fast integer forward DCT is used along with a JPEG
quality of 98-100. Thus, libjpeg-turbo must use the non-SIMD quantization
function in those cases. This causes performance to drop by as much as 40%.
It is therefore strongly advised that you use the slow integer forward DCT
whenever encoding images with a JPEG quality of 98 or higher.