Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(420)

Side by Side Diff: third_party/libjpeg_turbo/README-turbo.txt

Issue 7554002: Updates libjpeg-turbo to 1.1.90 (r677) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/
Patch Set: '' Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « third_party/libjpeg_turbo/README.chromium ('k') | third_party/libjpeg_turbo/bmp.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 ******************************************************************************* 1 *******************************************************************************
2 ** Background 2 ** Background
3 ******************************************************************************* 3 *******************************************************************************
4 4
5 libjpeg-turbo is a high-speed version of libjpeg for x86 and x86-64 processors 5 libjpeg-turbo is a derivative of libjpeg which uses SIMD instructions (MMX,
6 which uses SIMD instructions (MMX, SSE2, etc.) to accelerate baseline JPEG 6 SSE2, etc.) to accelerate baseline JPEG compression and decompression on x86
7 compression and decompression. libjpeg-turbo is generally 2-4x as fast 7 and x86-64 systems. On such systems, libjpeg-turbo is generally 2-4x as fast
8 as the unmodified version of libjpeg, all else being equal. 8 as the unmodified version of libjpeg, all else being equal.
9 9
10 libjpeg-turbo was originally based on libjpeg/SIMD by Miyasaka Masaru, but 10 libjpeg-turbo was originally based on libjpeg/SIMD by Miyasaka Masaru, but
11 the TigerVNC and VirtualGL projects made numerous enhancements to the codec, 11 the TigerVNC and VirtualGL projects made numerous enhancements to the codec in
12 including improved support for Mac OS X, 64-bit support, support for 32-bit 12 2009, including improved support for Mac OS X, 64-bit support, support for
13 and big endian pixel formats, accelerated Huffman encoding/decoding, and 13 32-bit and big endian pixel formats (RGBX, XBGR, etc.), accelerated Huffman
14 various bug fixes. The goal was to produce a fully open source codec that 14 encoding/decoding, and various bug fixes. The goal was to produce a fully open
15 could replace the partially closed source TurboJPEG/IPP codec used by VirtualGL 15 source codec that could replace the partially closed source TurboJPEG/IPP codec
16 and TurboVNC. libjpeg-turbo generally performs in the range of 80-120% of 16 used by VirtualGL and TurboVNC. libjpeg-turbo generally performs in the range
17 TurboJPEG/IPP. It is faster in some areas but slower in others. 17 of 80-120% of TurboJPEG/IPP. It is faster in some areas but slower in others.
18 18
19 It was decided to split libjpeg-turbo into a separate SDK so that other 19 In early 2010, libjpeg-turbo spun off into its own independent project, with
20 projects could take advantage of this technology. The libjpeg-turbo shared 20 the goal of making high-speed JPEG compression/decompression technology
21 available to a broader range of users and developers. The libjpeg-turbo shared
21 libraries can be used as drop-in replacements for libjpeg on most systems. 22 libraries can be used as drop-in replacements for libjpeg on most systems.
22 23
23 24
24 ******************************************************************************* 25 *******************************************************************************
25 ** License 26 ** License
26 ******************************************************************************* 27 *******************************************************************************
27 28
28 Some of the optimizations to the Huffman encoder (jchuff.c) and decoder 29 libjpeg-turbo is licensed under a non-restrictive, BSD-style license
29 (jdhuff.c) were borrowed from VirtualGL, and thus any distribution of 30 (see README.) The TurboJPEG/OSS wrapper (both C and Java versions) and
30 libjpeg-turbo which includes those optimizations must, as a whole, be subject 31 associated test programs bear a similar license, which is reproduced below:
31 to the terms of the wxWindows Library Licence, Version 3.1. A copy of this
32 license can be found in this directory under LICENSE.txt. The wxWindows
33 Library License is based on the LGPL but includes provisions which allow the
34 Library to be statically linked into proprietary libraries and applications
35 without requiring the resulting binaries to be distributed under the terms of
36 the LGPL.
37 32
38 The rest of the source code, apart from the Huffman codec optimizations, falls 33 Redistribution and use in source and binary forms, with or without
39 under a less restrictive, BSD-style license (see README.) You can choose to 34 modification, are permitted provided that the following conditions are met:
40 distribute libjpeg-turbo, as a whole, under this BSD-style license by simply 35
41 replacing the optimized jchuff.c and jdhuff.c with their unoptimized 36 - Redistributions of source code must retain the above copyright notice,
42 counterparts from the libjpeg v6b source. 37 this list of conditions and the following disclaimer.
38 - Redistributions in binary form must reproduce the above copyright notice,
39 this list of conditions and the following disclaimer in the documentation
40 and/or other materials provided with the distribution.
41 - Neither the name of the libjpeg-turbo Project nor the names of its
42 contributors may be used to endorse or promote products derived from this
43 software without specific prior written permission.
44
45 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS",
46 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
47 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
48 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
49 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
50 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
51 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
52 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
53 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
54 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
55 POSSIBILITY OF SUCH DAMAGE.
43 56
44 57
45 ******************************************************************************* 58 *******************************************************************************
46 ** Using libjpeg-turbo 59 ** Using libjpeg-turbo
47 ******************************************************************************* 60 *******************************************************************************
48 61
62 libjpeg-turbo includes two APIs which can be used to compress and decompress
63 JPEG images:
64
65 TurboJPEG/OSS: This API wraps libjpeg-turbo and provides an easy-to-use
66 interface for compressing and decompressing JPEG images in memory. It also
67 provides some features that would not be straightforward to implement using
68 the underlying libjpeg API, such as generating planar YUV images and
69 performing multiple simultaneous lossless transforms on an image. The Java
70 interface for libjpeg-turbo is written on top of TurboJPEG/OSS.
71
72 libjpeg API: This is the industry standard API for compressing and
73 decompressing JPEG images. It is more difficult to use than TurboJPEG/OSS
74 but also more powerful. libjpeg-turbo is both API/ABI-compatible and
75 mathematically compatible with libjpeg v6b. It can also optionally be
76 configured to be API/ABI-compatible with libjpeg v7 and v8 (see below.)
77
78
49 ============================= 79 =============================
50 Replacing libjpeg at Run Time 80 Replacing libjpeg at Run Time
51 ============================= 81 =============================
52 82
53 If a Unix application is dynamically linked with libjpeg, then you can replace 83 If a Unix application is dynamically linked with libjpeg, then you can replace
54 libjpeg with libjpeg-turbo at run time by manipulating the LD_LIBRARY_PATH. 84 libjpeg with libjpeg-turbo at run time by manipulating LD_LIBRARY_PATH.
55 For instance: 85 For instance:
56 86
57 [Using libjpeg] 87 [Using libjpeg]
58 > time cjpeg <vgl_5674_0098.ppm >vgl_5674_0098.jpg 88 > time cjpeg <vgl_5674_0098.ppm >vgl_5674_0098.jpg
59 real 0m0.392s 89 real 0m0.392s
60 user 0m0.074s 90 user 0m0.074s
61 sys 0m0.020s 91 sys 0m0.020s
62 92
63 [Using libjpeg-turbo] 93 [Using libjpeg-turbo]
64 > export LD_LIBRARY_PATH=/opt/libjpeg-turbo/{lib}:$LD_LIBRARY_PATH 94 > export LD_LIBRARY_PATH=/opt/libjpeg-turbo/{lib}:$LD_LIBRARY_PATH
65 > time cjpeg <vgl_5674_0098.ppm >vgl_5674_0098.jpg 95 > time cjpeg <vgl_5674_0098.ppm >vgl_5674_0098.jpg
66 real 0m0.109s 96 real 0m0.109s
67 user 0m0.029s 97 user 0m0.029s
68 sys 0m0.010s 98 sys 0m0.010s
69 99
70 NOTE: {lib} can be lib, lib32, lib64, or lib/64, depending on the O/S and 100 NOTE: {lib} can be lib, lib32, lib64, or lib/64, depending on the O/S and
71 architecture. 101 architecture.
72 102
73 System administrators can also replace the libjpeg sym links in /usr/{lib} with 103 System administrators can also replace the libjpeg sym links in /usr/{lib} with
74 links to the libjpeg dynamic library located in /opt/libjpeg-turbo/{lib}. This 104 links to the libjpeg dynamic library located in /opt/libjpeg-turbo/{lib}. This
75 will effectively accelerate every dynamically linked libjpeg application on the 105 will effectively accelerate every dynamically linked libjpeg application on the
76 system. 106 system.
77 107
78 The Windows distribution of the libjpeg-turbo SDK installs jpeg62.dll into 108 The libjpeg-turbo SDK for Visual C++ installs the libjpeg-turbo DLL
79 c:\libjpeg-turbo\bin, and the PATH environment variable can be modified such 109 (jpeg62.dll, jpeg7.dll, or jpeg8.dll, depending on whether libjpeg v6b, v7, or
80 that this directory is searched before any others that might contain 110 v8 emulation is enabled) into c:\libjpeg-turbo[64]\bin, and the PATH
81 jpeg62.dll. However, if jpeg62.dll also exists in an application's install 111 environment variable can be modified such that this directory is searched
82 directory, then Windows will load the application's version of it first. Thus, 112 before any others that might contain a libjpeg DLL. However, if a libjpeg
83 if an application ships with jpeg62.dll, then back up the application's version 113 DLL exists in an application's install directory, then Windows will load this
84 of jpeg62.dll and copy c:\libjpeg-turbo\bin\jpeg62.dll into the application's 114 DLL first whenever the application is launched. Thus, if an application ships
85 install directory to accelerate it. 115 with jpeg62.dll, jpeg7.dll, or jpeg8.dll, then back up the application's
116 version of this DLL and copy c:\libjpeg-turbo[64]\bin\jpeg*.dll into the
117 application's install directory to accelerate it.
86 118
87 The version of jpeg62.dll distributed in the libjpeg-turbo SDK requires the 119 The version of the libjpeg-turbo DLL distributed in the libjpeg-turbo SDK for
88 Visual C++ 2008 C run time DLL (msvcr90.dll). This library ships with more 120 Visual C++ requires the Visual C++ 2008 C run time DLL (msvcr90.dll).
89 recent versions of Windows, but users of older versions can obtain it from the 121 msvcr90.dll ships with more recent versions of Windows, but users of older
90 Visual C++ 2008 Redistributable Package, which is available as a free download 122 Windows releases can obtain it from the Visual C++ 2008 Redistributable
91 from Microsoft's web site. 123 Package, which is available as a free download from Microsoft's web site.
92 124
93 NOTE: Features of libjpeg which require passing a C run time structure, such 125 NOTE: Features of libjpeg which require passing a C run time structure, such
94 as a file handle, from an application to libjpeg will probably not work with 126 as a file handle, from an application to libjpeg will probably not work with
95 the distributed version of jpeg62.dll unless the application is also built to 127 the version of the libjpeg-turbo DLL distributed in the libjpeg-turbo SDK for
96 use the Visual C++ 2008 C run time DLL. In particular, this affects 128 Visual C++, unless the application is also built to use the Visual C++ 2008 C
97 jpeg_stdio_dest() and jpeg_stdio_src(). 129 run time DLL. In particular, this affects jpeg_stdio_dest() and
130 jpeg_stdio_src().
98 131
99 Mac applications typically embed their own copies of libjpeg.62.dylib inside 132 Mac applications typically embed their own copies of the libjpeg dylib inside
100 the (hidden) application bundle, so it is not possible to globally replace 133 the (hidden) application bundle, so it is not possible to globally replace
101 libjpeg on OS X systems. If an application uses a shared library version of 134 libjpeg on OS X systems. If an application uses a shared library version of
102 libjpeg, then it may be possible to replace the application's version of it. 135 libjpeg, then it may be possible to replace the application's version of it.
103 This would generally involve copying libjpeg.62.dylib into the appropriate 136 This would generally involve copying libjpeg.*.dylib from libjpeg-turbo into
104 place in the application bundle and using install_name_tool to repoint the 137 the appropriate place in the application bundle and using install_name_tool to
105 dylib to the new directory. This requires an advanced knowledge of OS X and 138 repoint the dylib to the new directory. This requires an advanced knowledge of
106 would not survive an upgrade or a re-install of the application. Thus, it is 139 OS X and would not survive an upgrade or a re-install of the application.
107 not recommended for most users. 140 Thus, it is not recommended for most users.
108 141
109 ======================= 142 =======================
110 Replacing TurboJPEG/IPP 143 Replacing TurboJPEG/IPP
111 ======================= 144 =======================
112 145
113 libjpeg-turbo is a drop-in replacement for the TurboJPEG/IPP SDK used by 146 libjpeg-turbo is a drop-in replacement for the TurboJPEG/IPP SDK used by
114 VirtualGL 2.1.x and TurboVNC 0.6 (and prior.) libjpeg-turbo contains a wrapper 147 VirtualGL 2.1.x and TurboVNC 0.6 (and prior.) libjpeg-turbo contains a wrapper
115 library (TurboJPEG/OSS) that emulates the TurboJPEG API using libjpeg-turbo 148 library (TurboJPEG/OSS) that emulates the TurboJPEG API using libjpeg-turbo
116 instead of the closed source Intel Performance Primitives. You can replace the 149 instead of the closed source Intel Performance Primitives. You can replace the
117 TurboJPEG/IPP package on Linux systems with the libjpeg-turbo package in order 150 TurboJPEG/IPP package on Linux systems with the libjpeg-turbo package in order
118 to make existing releases of VirtualGL 2.1.x and TurboVNC use the new codec at 151 to make existing releases of VirtualGL 2.1.x and TurboVNC 0.x use the new codec
119 run time. Note that the 64-bit libjpeg-turbo packages contain only 64-bit 152 at run time. Note that the 64-bit libjpeg-turbo packages contain only 64-bit
120 binaries, whereas the TurboJPEG/IPP 64-bit packages contained both 64-bit and 153 binaries, whereas the TurboJPEG/IPP 64-bit packages contained both 64-bit and
121 32-bit binaries. Thus, to replace a TurboJPEG/IPP 64-bit package, install 154 32-bit binaries. Thus, to replace a TurboJPEG/IPP 64-bit package, install
122 both the 64-bit and 32-bit versions of libjpeg-turbo. 155 both the 64-bit and 32-bit versions of libjpeg-turbo.
123 156
124 You can also build the VirtualGL 2.1.x and TurboVNC 0.6 source code with 157 You can also build the VirtualGL 2.1.x and TurboVNC 0.6 source code with
125 the libjpeg-turbo SDK instead of TurboJPEG/IPP. It should work identically. 158 the libjpeg-turbo SDK instead of TurboJPEG/IPP. It should work identically.
126 libjpeg-turbo also includes static library versions of TurboJPEG/OSS, which 159 libjpeg-turbo also includes static library versions of TurboJPEG/OSS, which
127 are used to build TurboVNC 1.0 and later. 160 are used to build TurboVNC 1.0 and later.
128 161
129 ======================================== 162 ========================================
130 Using libjpeg-turbo in Your Own Programs 163 Using libjpeg-turbo in Your Own Programs
131 ======================================== 164 ========================================
132 165
133 For the most part, libjpeg-turbo should work identically to libjpeg, so in 166 For the most part, libjpeg-turbo should work identically to libjpeg, so in
134 most cases, an application can be built against libjpeg and then run against 167 most cases, an application can be built against libjpeg and then run against
135 libjpeg-turbo. On Unix systems, you can build against libjpeg-turbo instead 168 libjpeg-turbo. On Unix systems (including Cygwin), you can build against
136 of libjpeg by setting 169 libjpeg-turbo instead of libjpeg by setting
137 170
138 CPATH=/opt/libjpeg-turbo/include 171 CPATH=/opt/libjpeg-turbo/include
139 and 172 and
140 LIBRARY_PATH=/opt/libjpeg-turbo/{lib} 173 LIBRARY_PATH=/opt/libjpeg-turbo/{lib}
141 174
142 ({lib} = lib32 or lib64, depending on whether you are building a 32-bit or a 175 ({lib} = lib32 or lib64, depending on whether you are building a 32-bit or a
143 64-bit application.) 176 64-bit application.)
144 177
145 If using Cygwin, then set
146
147 CPATH=/cygdrive/c/libjpeg-turbo-gcc[64]/include
148 and
149 LIBRARY_PATH=/cygdrive/c/libjpeg-turbo-gcc[64]/lib
150
151 If using MinGW, then set 178 If using MinGW, then set
152 179
153 CPATH=/c/libjpeg-turbo-gcc[64]/include 180 CPATH=/c/libjpeg-turbo-gcc[64]/include
154 and 181 and
155 LIBRARY_PATH=/c/libjpeg-turbo-gcc[64]/lib 182 LIBRARY_PATH=/c/libjpeg-turbo-gcc[64]/lib
156 183
157 Building against libjpeg-turbo is useful, for instance, if you want to build an 184 Building against libjpeg-turbo is useful, for instance, if you want to build an
158 application that leverages the libjpeg-turbo colorspace extensions (see below.) 185 application that leverages the libjpeg-turbo colorspace extensions (see below.)
159 On Linux and Solaris systems, you would still need to manipulate the 186 On Linux and Solaris systems, you would still need to manipulate
160 LD_LIBRARY_PATH or sym links appropriately to use libjpeg-turbo at run time. 187 LD_LIBRARY_PATH or create appropriate sym links to use libjpeg-turbo at run
161 On such systems, you can pass -R /opt/libjpeg-turbo/{lib} to the linker to 188 time. On such systems, you can pass -R /opt/libjpeg-turbo/{lib} to the linker
162 force the use of libjpeg-turbo at run time rather than libjpeg (also useful if 189 to force the use of libjpeg-turbo at run time rather than libjpeg (also useful
163 you want to leverage the colorspace extensions), or you can link against the 190 if you want to leverage the colorspace extensions), or you can link against the
164 libjpeg-turbo static library. 191 libjpeg-turbo static library.
165 192
166 To force a Linux, Solaris, or MinGW application to link against the static 193 To force a Linux, Solaris, or MinGW application to link against the static
167 version of libjpeg-turbo, you can use the following linker options: 194 version of libjpeg-turbo, you can use the following linker options:
168 195
169 -Wl,-Bstatic -ljpeg -Wl,-Bdynamic 196 -Wl,-Bstatic -ljpeg -Wl,-Bdynamic
170 197
171 On OS X, simply add /opt/libjpeg-turbo/lib/libjpeg.a to the linker command 198 On OS X, simply add /opt/libjpeg-turbo/lib/libjpeg.a to the linker command
172 line (this also works on Linux and Solaris.) 199 line (this also works on Linux and Solaris.)
173 200
174 To build Visual C++ applications using libjpeg-turbo, add 201 To build Visual C++ applications using libjpeg-turbo, add
175 c:\libjpeg-turbo[64]\include to your system or user INCLUDE environment 202 c:\libjpeg-turbo[64]\include to the system or user INCLUDE environment
176 variable and c:\libjpeg-turbo[64]\lib to your system or user LIB environment 203 variable and c:\libjpeg-turbo[64]\lib to the system or user LIB environment
177 variable, and then link against either jpeg.lib (to use jpeg62.dll) or 204 variable, and then link against either jpeg.lib (to use the DLL version of
178 jpeg-static.lib (to use the static version of libjpeg-turbo.) 205 libjpeg-turbo) or jpeg-static.lib (to use the static version of libjpeg-turbo.)
179 206
180 ===================== 207 =====================
181 Colorspace Extensions 208 Colorspace Extensions
182 ===================== 209 =====================
183 210
184 libjpeg-turbo includes extensions which allow JPEG images to be compressed 211 libjpeg-turbo includes extensions which allow JPEG images to be compressed
185 directly from (and decompressed directly to) buffers which use BGR, BGRA, 212 directly from (and decompressed directly to) buffers which use BGR, BGRX,
186 RGBA, ABGR, and ARGB pixel ordering. This is implemented with six new 213 RGBX, XBGR, and XRGB pixel ordering. This is implemented with six new
187 colorspace constants: 214 colorspace constants:
188 215
189 JCS_EXT_RGB /* red/green/blue */ 216 JCS_EXT_RGB /* red/green/blue */
190 JCS_EXT_RGBX /* red/green/blue/x */ 217 JCS_EXT_RGBX /* red/green/blue/x */
191 JCS_EXT_BGR /* blue/green/red */ 218 JCS_EXT_BGR /* blue/green/red */
192 JCS_EXT_BGRX /* blue/green/red/x */ 219 JCS_EXT_BGRX /* blue/green/red/x */
193 JCS_EXT_XBGR /* x/blue/green/red */ 220 JCS_EXT_XBGR /* x/blue/green/red */
194 JCS_EXT_XRGB /* x/red/green/blue */ 221 JCS_EXT_XRGB /* x/red/green/blue */
195 222
196 Setting cinfo.in_color_space (compression) or cinfo.out_color_space 223 Setting cinfo.in_color_space (compression) or cinfo.out_color_space
197 (decompression) to one of these values will cause libjpeg-turbo to read the 224 (decompression) to one of these values will cause libjpeg-turbo to read the
198 red, green, and blue values from (or write them to) the appropriate position in 225 red, green, and blue values from (or write them to) the appropriate position in
199 the pixel when YUV conversion is performed. 226 the pixel when YUV conversion is performed.
200 227
201 Your application can check for the existence of these extensions at compile 228 Your application can check for the existence of these extensions at compile
202 time with: 229 time with:
203 230
204 #ifdef JCS_EXTENSIONS 231 #ifdef JCS_EXTENSIONS
205 232
206 At run time, attempting to use these extensions with a version of libjpeg 233 At run time, attempting to use these extensions with a version of libjpeg
207 that doesn't support them will result in a "Bogus input colorspace" error. 234 that doesn't support them will result in a "Bogus input colorspace" error.
235
236 =================================
237 libjpeg v7 and v8 API/ABI support
238 =================================
239
240 libjpeg v7 and v8 added new features to the API/ABI, and, unfortunately, the
241 compression and decompression structures were extended in a backward-
242 incompatible manner to accommodate these features. Thus, programs which are
243 built to use libjpeg v7 or v8 did not work with libjpeg-turbo, since it is
244 based on the libjpeg v6b code base. Although libjpeg v7 and v8 are still not
245 as widely used as v6b, enough programs (including a few Linux distros) have
246 made the switch that it was desirable to provide support for the libjpeg v7/v8
247 API/ABI in libjpeg-turbo.
248
249 Some of the libjpeg v7 and v8 features -- DCT scaling, to name one -- involve
250 deep modifications to the code which cannot be accommodated by libjpeg-turbo
251 without either breaking compatibility with libjpeg v6b or producing an
252 unsupportable mess. In order to fully support libjpeg v8 with all of its
253 features, we would have to essentially port the SIMD extensions to the libjpeg
254 v8 code base and maintain two separate code trees. We are hesitant to do this
255 until/unless the newer libjpeg code bases garner more community support and
256 involvement and until/unless we have some notion of whether future libjpeg
257 releases will also be backward-incompatible.
258
259 By passing an argument of --with-jpeg7 or --with-jpeg8 to configure, or an
260 argument of -DWITH_JPEG7=1 or -DWITH_JPEG8=1 to cmake, you can build a version
261 of libjpeg-turbo which emulates the libjpeg v7 or v8 API/ABI, so that programs
262 which are built against libjpeg v7 or v8 can be run with libjpeg-turbo. The
263 following section describes which libjpeg v7+ features are supported and which
264 aren't.
265
266 libjpeg v7 and v8 Features:
267 ---------------------------
268
269 Fully supported:
270
271 -- cjpeg: Separate quality settings for luminance and chrominance
272 Note that the libpjeg v7+ API was extended to accommodate this feature only
273 for convenience purposes. It has always been possible to implement this
274 feature with libjpeg v6b (see rdswitch.c for an example.)
275
276 -- cjpeg: 32-bit BMP support
277
278 -- jpegtran: lossless cropping
279
280 -- jpegtran: -perfect option
281
282 -- rdjpgcom: -raw option
283
284 -- rdjpgcom: locale awareness
285
286
287 Fully supported when using libjpeg v7/v8 emulation:
288
289 -- libjpeg: In-memory source and destination managers
290
291
292 Not supported:
293
294 -- libjpeg: DCT scaling in compressor
295 cinfo.scale_num and cinfo.scale_denom are silently ignored.
296
297 -- libjpeg: IDCT scaling extensions in decompressor
298 libjpeg-turbo still supports IDCT scaling with scaling factors of 1/2, 1/4,
299 and 1/8 (same as libjpeg v6b.)
300
301 -- libjpeg: Fancy downsampling in compressor
302 cinfo.do_fancy_downsampling is silently ignored.
303
304 -- jpegtran: Scaling
305 Seems to depend on the DCT scaling feature, which isn't supported.
306
307
308 *******************************************************************************
309 ** Performance pitfalls
310 *******************************************************************************
311
312 ===============
313 Restart Markers
314 ===============
315
316 The optimized Huffman decoder in libjpeg-turbo does not handle restart markers
317 in a way that makes libjpeg happy, so it is necessary to use the slow Huffman
318 decoder when decompressing a JPEG image that has restart markers. This can
319 cause the decompression performance to drop by as much as 20%, but the
320 performance will still be much much greater than that of libjpeg v6b. Many
321 consumer packages, such as PhotoShop, use restart markers when generating JPEG
322 images, so images generated by those programs will experience this issue.
323
324 ===============================================
325 Fast Integer Forward DCT at High Quality Levels
326 ===============================================
327
328 The algorithm used by the SIMD-accelerated quantization function cannot produce
329 correct results whenever the fast integer forward DCT is used along with a JPEG
330 quality of 98-100. Thus, libjpeg-turbo must use the non-SIMD quantization
331 function in those cases. This causes performance to drop by as much as 40%.
332 It is therefore strongly advised that you use the slow integer forward DCT
333 whenever encoding images with a JPEG quality of 98 or higher.
OLDNEW
« no previous file with comments | « third_party/libjpeg_turbo/README.chromium ('k') | third_party/libjpeg_turbo/bmp.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698