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

Side by Side Diff: README-turbo.txt

Issue 10386084: Update libjpeg-turbo. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/libjpeg_turbo/
Patch Set: Created 8 years, 7 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 | « README.chromium ('k') | cjpeg.c » ('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 derivative of libjpeg that uses SIMD instructions (MMX, 5 libjpeg-turbo is a derivative of libjpeg that uses SIMD instructions (MMX,
6 SSE2, etc.) to accelerate baseline JPEG compression and decompression on x86 6 SSE2, NEON) to accelerate baseline JPEG compression and decompression on x86,
7 and x86-64 systems. On such systems, libjpeg-turbo is generally 2-4x as fast 7 x86-64, and ARM systems. On such systems, libjpeg-turbo is generally 2-4x as
8 as the unmodified version of libjpeg, all else being equal. 8 fast 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 in 11 the TigerVNC and VirtualGL projects made numerous enhancements to the codec in
12 2009, including improved support for Mac OS X, 64-bit support, support for 12 2009, including improved support for Mac OS X, 64-bit support, support for
13 32-bit and big endian pixel formats (RGBX, XBGR, etc.), accelerated Huffman 13 32-bit and big-endian pixel formats (RGBX, XBGR, etc.), accelerated Huffman
14 encoding/decoding, and various bug fixes. The goal was to produce a fully open 14 encoding/decoding, and various bug fixes. The goal was to produce a fully
15 source codec that could replace the partially closed source TurboJPEG/IPP codec 15 open-source codec that could replace the partially closed-source TurboJPEG/IPP
16 used by VirtualGL and TurboVNC. libjpeg-turbo generally performs in the range 16 codec used by VirtualGL and TurboVNC. libjpeg-turbo generally achieves 80-120%
17 of 80-120% of TurboJPEG/IPP. It is faster in some areas but slower in others. 17 of the performance of TurboJPEG/IPP. It is faster in some areas but slower in
18 others.
18 19
19 In early 2010, libjpeg-turbo spun off into its own independent project, with 20 In early 2010, libjpeg-turbo spun off into its own independent project, with
20 the goal of making high-speed JPEG compression/decompression technology 21 the goal of making high-speed JPEG compression/decompression technology
21 available to a broader range of users and developers. The libjpeg-turbo shared 22 available to a broader range of users and developers.
22 libraries can be used as drop-in replacements for libjpeg on most systems.
23 23
24 24
25 ******************************************************************************* 25 *******************************************************************************
26 ** License 26 ** License
27 ******************************************************************************* 27 *******************************************************************************
28 28
29 libjpeg-turbo is licensed under a non-restrictive, BSD-style license 29 Most of libjpeg-turbo inherits the non-restrictive, BSD-style license used by
30 (see README.) The TurboJPEG/OSS wrapper (both C and Java versions) and 30 libjpeg (see README.) The TurboJPEG/OSS wrapper (both C and Java versions) and
31 associated test programs bear a similar license, which is reproduced below: 31 associated test programs bear a similar license, which is reproduced below:
32 32
33 Redistribution and use in source and binary forms, with or without 33 Redistribution and use in source and binary forms, with or without
34 modification, are permitted provided that the following conditions are met: 34 modification, are permitted provided that the following conditions are met:
35 35
36 - Redistributions of source code must retain the above copyright notice, 36 - Redistributions of source code must retain the above copyright notice,
37 this list of conditions and the following disclaimer. 37 this list of conditions and the following disclaimer.
38 - Redistributions in binary form must reproduce the above copyright notice, 38 - Redistributions in binary form must reproduce the above copyright notice,
39 this list of conditions and the following disclaimer in the documentation 39 this list of conditions and the following disclaimer in the documentation
40 and/or other materials provided with the distribution. 40 and/or other materials provided with the distribution.
(...skipping 14 matching lines...) Expand all
55 POSSIBILITY OF SUCH DAMAGE. 55 POSSIBILITY OF SUCH DAMAGE.
56 56
57 57
58 ******************************************************************************* 58 *******************************************************************************
59 ** Using libjpeg-turbo 59 ** Using libjpeg-turbo
60 ******************************************************************************* 60 *******************************************************************************
61 61
62 libjpeg-turbo includes two APIs that can be used to compress and decompress 62 libjpeg-turbo includes two APIs that can be used to compress and decompress
63 JPEG images: 63 JPEG images:
64 64
65 TurboJPEG/OSS: This API wraps libjpeg-turbo and provides an easy-to-use 65 TurboJPEG API: This API provides an easy-to-use interface for compressing
66 interface for compressing and decompressing JPEG images in memory. It also 66 and decompressing JPEG images in memory. It also provides some functionality
67 provides some features that would not be straightforward to implement using 67 that would not be straightforward to achieve using the underlying libjpeg
68 the underlying libjpeg API, such as generating planar YUV images and 68 API, such as generating planar YUV images and performing multiple
69 performing multiple simultaneous lossless transforms on an image. The Java 69 simultaneous lossless transforms on an image. The Java interface for
70 interface for libjpeg-turbo is written on top of TurboJPEG/OSS. 70 libjpeg-turbo is written on top of the TurboJPEG API.
71 71
72 libjpeg API: This is the industry standard API for compressing and 72 libjpeg API: This is the de facto industry-standard API for compressing and
73 decompressing JPEG images. It is more difficult to use than TurboJPEG/OSS 73 decompressing JPEG images. It is more difficult to use than the TurboJPEG
74 but also more powerful. libjpeg-turbo is both API/ABI-compatible and 74 API but also more powerful. libjpeg-turbo is both API/ABI-compatible and
75 mathematically compatible with libjpeg v6b. It can also optionally be 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.) 76 configured to be API/ABI-compatible with libjpeg v7 and v8 (see below.)
77 77
78 78
79 ============================= 79 =============================
80 Replacing libjpeg at Run Time 80 Replacing libjpeg at Run Time
81 ============================= 81 =============================
82 82
83 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
84 libjpeg with libjpeg-turbo at run time by manipulating LD_LIBRARY_PATH. 84 libjpeg with libjpeg-turbo at run time by manipulating LD_LIBRARY_PATH.
85 For instance: 85 For instance:
86 86
87 [Using libjpeg] 87 [Using libjpeg]
88 > time cjpeg <vgl_5674_0098.ppm >vgl_5674_0098.jpg 88 > time cjpeg <vgl_5674_0098.ppm >vgl_5674_0098.jpg
89 real 0m0.392s 89 real 0m0.392s
90 user 0m0.074s 90 user 0m0.074s
91 sys 0m0.020s 91 sys 0m0.020s
92 92
93 [Using libjpeg-turbo] 93 [Using libjpeg-turbo]
94 > export LD_LIBRARY_PATH=/opt/libjpeg-turbo/{lib}:$LD_LIBRARY_PATH 94 > export LD_LIBRARY_PATH=/opt/libjpeg-turbo/{lib}:$LD_LIBRARY_PATH
95 > time cjpeg <vgl_5674_0098.ppm >vgl_5674_0098.jpg 95 > time cjpeg <vgl_5674_0098.ppm >vgl_5674_0098.jpg
96 real 0m0.109s 96 real 0m0.109s
97 user 0m0.029s 97 user 0m0.029s
98 sys 0m0.010s 98 sys 0m0.010s
99 99
100 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
101 architecture. 101 architecture.
102 102
103 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
104 links to the libjpeg dynamic library located in /opt/libjpeg-turbo/{lib}. This 104 links to the libjpeg-turbo dynamic library located in /opt/libjpeg-turbo/{lib}.
105 will effectively accelerate every dynamically linked libjpeg application on the 105 This will effectively accelerate every application that uses the libjpeg
106 system. 106 dynamic library on the system.
107 107
108 The libjpeg-turbo SDK for Visual C++ installs the libjpeg-turbo DLL 108 The libjpeg-turbo SDK for Visual C++ installs the libjpeg-turbo DLL
109 (jpeg62.dll, jpeg7.dll, or jpeg8.dll, depending on whether libjpeg v6b, v7, or 109 (jpeg62.dll, jpeg7.dll, or jpeg8.dll, depending on whether it was built with
110 v8 emulation is enabled) into c:\libjpeg-turbo[64]\bin, and the PATH 110 libjpeg v6b, v7, or v8 emulation) into c:\libjpeg-turbo[64]\bin, and the PATH
111 environment variable can be modified such that this directory is searched 111 environment variable can be modified such that this directory is searched
112 before any others that might contain a libjpeg DLL. However, if a libjpeg 112 before any others that might contain a libjpeg DLL. However, if a libjpeg
113 DLL exists in an application's install directory, then Windows will load this 113 DLL exists in an application's install directory, then Windows will load this
114 DLL first whenever the application is launched. Thus, if an application ships 114 DLL first whenever the application is launched. Thus, if an application ships
115 with jpeg62.dll, jpeg7.dll, or jpeg8.dll, then back up the application's 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 116 version of this DLL and copy c:\libjpeg-turbo[64]\bin\jpeg*.dll into the
117 application's install directory to accelerate it. 117 application's install directory to accelerate it.
118 118
119 The version of the libjpeg-turbo DLL distributed in the libjpeg-turbo SDK for 119 The version of the libjpeg-turbo DLL distributed in the libjpeg-turbo SDK for
120 Visual C++ requires the Visual C++ 2008 C run time DLL (msvcr90.dll). 120 Visual C++ requires the Visual C++ 2008 C run-time DLL (msvcr90.dll).
121 msvcr90.dll ships with more recent versions of Windows, but users of older 121 msvcr90.dll ships with more recent versions of Windows, but users of older
122 Windows releases can obtain it from the Visual C++ 2008 Redistributable 122 Windows releases can obtain it from the Visual C++ 2008 Redistributable
123 Package, which is available as a free download from Microsoft's web site. 123 Package, which is available as a free download from Microsoft's web site.
124 124
125 NOTE: Features of libjpeg that require passing a C run time structure, such 125 NOTE: Features of libjpeg that require passing a C run-time structure, such
126 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
127 the version of the libjpeg-turbo DLL distributed in the libjpeg-turbo SDK for 127 the version of the libjpeg-turbo DLL distributed in the libjpeg-turbo SDK for
128 Visual C++, unless the application is also built to use the Visual C++ 2008 C 128 Visual C++, unless the application is also built to use the Visual C++ 2008 C
129 run time DLL. In particular, this affects jpeg_stdio_dest() and 129 run-time DLL. In particular, this affects jpeg_stdio_dest() and
130 jpeg_stdio_src(). 130 jpeg_stdio_src().
131 131
132 Mac applications typically embed their own copies of the libjpeg dylib inside 132 Mac applications typically embed their own copies of the libjpeg dylib inside
133 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
134 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
135 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.
136 This would generally involve copying libjpeg.*.dylib from libjpeg-turbo into 136 This would generally involve copying libjpeg.*.dylib from libjpeg-turbo into
137 the appropriate place in the application bundle and using install_name_tool to 137 the appropriate place in the application bundle and using install_name_tool to
138 repoint the dylib to the new directory. This requires an advanced knowledge of 138 repoint the dylib to the new directory. This requires an advanced knowledge of
139 OS X and would not survive an upgrade or a re-install of the application. 139 OS X and would not survive an upgrade or a re-install of the application.
140 Thus, it is not recommended for most users. 140 Thus, it is not recommended for most users.
141 141
142 ======================= 142 =======================
143 Replacing TurboJPEG/IPP 143 Replacing TurboJPEG/IPP
144 ======================= 144 =======================
145 145
146 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
147 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
148 library (TurboJPEG/OSS) that emulates the TurboJPEG API using libjpeg-turbo 148 library (TurboJPEG/OSS) that emulates the TurboJPEG API using libjpeg-turbo
149 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
150 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
151 to make existing releases of VirtualGL 2.1.x and TurboVNC 0.x use the new codec 151 to make existing releases of VirtualGL 2.1.x and TurboVNC 0.x use the new codec
152 at 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
153 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
154 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
155 both the 64-bit and 32-bit versions of libjpeg-turbo. 155 both the 64-bit and 32-bit versions of libjpeg-turbo.
156 156
157 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
158 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.
159 libjpeg-turbo also includes static library versions of TurboJPEG/OSS, which 159 libjpeg-turbo also includes static library versions of TurboJPEG/OSS, which
160 are used to build TurboVNC 1.0 and later. 160 are used to build VirtualGL 2.2 and TurboVNC 1.0 and later.
161 161
162 ======================================== 162 ========================================
163 Using libjpeg-turbo in Your Own Programs 163 Using libjpeg-turbo in Your Own Programs
164 ======================================== 164 ========================================
165 165
166 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
167 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
168 libjpeg-turbo. On Unix systems (including Cygwin), you can build against 168 libjpeg-turbo. On Unix systems (including Cygwin), you can build against
169 libjpeg-turbo instead of libjpeg by setting 169 libjpeg-turbo instead of libjpeg by setting
170 170
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 249
250 #ifdef JCS_ALPHA_EXTENSIONS 250 #ifdef JCS_ALPHA_EXTENSIONS
251 251
252 jcstest.c, located in the libjpeg-turbo source tree, demonstrates how to check 252 jcstest.c, located in the libjpeg-turbo source tree, demonstrates how to check
253 for the existence of the colorspace extensions at compile time and run time. 253 for the existence of the colorspace extensions at compile time and run time.
254 254
255 ================================= 255 =================================
256 libjpeg v7 and v8 API/ABI support 256 libjpeg v7 and v8 API/ABI support
257 ================================= 257 =================================
258 258
259 libjpeg v7 and v8 added new features to the API/ABI, and, unfortunately, the 259 With libjpeg v7 and v8, new features were added that necessitated extending the
260 compression and decompression structures were extended in a backward- 260 compression and decompression structures. Unfortunately, due to the exposed
261 incompatible manner to accommodate these features. Thus, programs that are 261 nature of those structures, extending them also necessitated breaking backward
262 ABI compatibility with previous libjpeg releases. Thus, programs that are
262 built to use libjpeg v7 or v8 did not work with libjpeg-turbo, since it is 263 built to use libjpeg v7 or v8 did not work with libjpeg-turbo, since it is
263 based on the libjpeg v6b code base. Although libjpeg v7 and v8 are still not 264 based on the libjpeg v6b code base. Although libjpeg v7 and v8 are still not
264 as widely used as v6b, enough programs (including a few Linux distros) have 265 as widely used as v6b, enough programs (including a few Linux distros) have
265 made the switch that it was desirable to provide support for the libjpeg v7/v8 266 made the switch that it was desirable to provide support for the libjpeg v7/v8
266 API/ABI in libjpeg-turbo. 267 API/ABI in libjpeg-turbo. Although libjpeg-turbo can now be configured as a
267 268 drop-in replacement for libjpeg v7 or v8, it should be noted that not all of
268 Some of the libjpeg v7 and v8 features -- DCT scaling, to name one -- involve 269 the features in libjpeg v7 and v8 are supported (see below.)
269 deep modifications to the code that cannot be accommodated by libjpeg-turbo
270 without either breaking compatibility with libjpeg v6b or producing an
271 unsupportable mess. In order to fully support libjpeg v8 with all of its
272 features, we would have to essentially port the SIMD extensions to the libjpeg
273 v8 code base and maintain two separate code trees. We are hesitant to do this
274 until/unless the newer libjpeg code bases garner more community support and
275 involvement and until/unless we have some notion of whether future libjpeg
276 releases will also be backward-incompatible.
277 270
278 By passing an argument of --with-jpeg7 or --with-jpeg8 to configure, or an 271 By passing an argument of --with-jpeg7 or --with-jpeg8 to configure, or an
279 argument of -DWITH_JPEG7=1 or -DWITH_JPEG8=1 to cmake, you can build a version 272 argument of -DWITH_JPEG7=1 or -DWITH_JPEG8=1 to cmake, you can build a version
280 of libjpeg-turbo that emulates the libjpeg v7 or v8 API/ABI, so that programs 273 of libjpeg-turbo that emulates the libjpeg v7 or v8 API/ABI, so that programs
281 that are built against libjpeg v7 or v8 can be run with libjpeg-turbo. The 274 that are built against libjpeg v7 or v8 can be run with libjpeg-turbo. The
282 following section describes which libjpeg v7+ features are supported and which 275 following section describes which libjpeg v7+ features are supported and which
283 aren't. 276 aren't.
284 277
285 libjpeg v7 and v8 Features: 278 libjpeg v7 and v8 Features:
286 --------------------------- 279 ---------------------------
287 280
288 Fully supported: 281 Fully supported:
289 282
290 -- cjpeg: Separate quality settings for luminance and chrominance 283 -- cjpeg: Separate quality settings for luminance and chrominance
291 Note that the libpjeg v7+ API was extended to accommodate this feature only 284 Note that the libpjeg v7+ API was extended to accommodate this feature only
292 for convenience purposes. It has always been possible to implement this 285 for convenience purposes. It has always been possible to implement this
293 feature with libjpeg v6b (see rdswitch.c for an example.) 286 feature with libjpeg v6b (see rdswitch.c for an example.)
294 287
288 -- libjpeg: IDCT scaling extensions in decompressor
289 libjpeg-turbo supports IDCT scaling with scaling factors of 1/8, 1/4, 3/8,
290 1/2, 5/8, 3/4, 7/8, 9/8, 5/4, 11/8, 3/2, 13/8, 7/4, 15/8, and 2/1 (only 1/4
291 and 1/2 are SIMD-accelerated.)
292
295 -- cjpeg: 32-bit BMP support 293 -- cjpeg: 32-bit BMP support
296 294
297 -- jpegtran: lossless cropping 295 -- jpegtran: lossless cropping
298 296
299 -- jpegtran: -perfect option 297 -- jpegtran: -perfect option
300 298
301 -- rdjpgcom: -raw option 299 -- rdjpgcom: -raw option
302 300
303 -- rdjpgcom: locale awareness 301 -- rdjpgcom: locale awareness
304 302
305 303
306 Fully supported when using libjpeg v7/v8 emulation: 304 Fully supported when using libjpeg v7/v8 emulation:
307 305
308 -- libjpeg: In-memory source and destination managers 306 -- libjpeg: In-memory source and destination managers
309 307
310 308
311 Not supported: 309 Not supported:
312 310
313 -- libjpeg: DCT scaling in compressor 311 -- libjpeg: DCT scaling in compressor
314 cinfo.scale_num and cinfo.scale_denom are silently ignored. 312 cinfo.scale_num and cinfo.scale_denom are silently ignored.
313 There is no technical reason why DCT scaling cannot be supported, but
314 without the SmartScale extension (see below), it would only be able to
315 down-scale using ratios of 1/2, 8/15, 4/7, 8/13, 2/3, 8/11, 4/5, and 8/9,
316 which is of limited usefulness.
315 317
316 -- libjpeg: IDCT scaling extensions in decompressor 318 -- libjpeg: SmartScale
317 libjpeg-turbo still supports IDCT scaling with scaling factors of 1/2, 1/4, 319 cinfo.block_size is silently ignored.
318 and 1/8 (same as libjpeg v6b.) 320 SmartScale is an extension to the JPEG format that allows for DCT block
321 sizes other than 8x8. It would be difficult to support this feature while
322 retaining backward compatibility with libjpeg v6b.
319 323
320 -- libjpeg: Fancy downsampling in compressor 324 -- libjpeg: Fancy downsampling in compressor
321 cinfo.do_fancy_downsampling is silently ignored. 325 cinfo.do_fancy_downsampling is silently ignored.
326 This requires the DCT scaling feature, which is not supported.
322 327
323 -- jpegtran: Scaling 328 -- jpegtran: Scaling
324 Seems to depend on the DCT scaling feature, which isn't supported. 329 This requires both the DCT scaling and SmartScale features, which are not
330 supported.
331
332 -- Lossless RGB JPEG files
333 This requires the SmartScale feature, which is not supported.
325 334
326 335
327 ******************************************************************************* 336 *******************************************************************************
328 ** Performance pitfalls 337 ** Performance pitfalls
329 ******************************************************************************* 338 *******************************************************************************
330 339
331 =============== 340 ===============
332 Restart Markers 341 Restart Markers
333 =============== 342 ===============
334 343
335 The optimized Huffman decoder in libjpeg-turbo does not handle restart markers 344 The optimized Huffman decoder in libjpeg-turbo does not handle restart markers
336 in a way that makes libjpeg happy, so it is necessary to use the slow Huffman 345 in a way that makes the rest of the libjpeg infrastructure happy, so it is
337 decoder when decompressing a JPEG image that has restart markers. This can 346 necessary to use the slow Huffman decoder when decompressing a JPEG image that
338 cause the decompression performance to drop by as much as 20%, but the 347 has restart markers. This can cause the decompression performance to drop by
339 performance will still be much much greater than that of libjpeg v6b. Many 348 as much as 20%, but the performance will still be much greater than that of
340 consumer packages, such as PhotoShop, use restart markers when generating JPEG 349 libjpeg. Many consumer packages, such as PhotoShop, use restart markers when
341 images, so images generated by those programs will experience this issue. 350 generating JPEG images, so images generated by those programs will experience
351 this issue.
342 352
343 =============================================== 353 ===============================================
344 Fast Integer Forward DCT at High Quality Levels 354 Fast Integer Forward DCT at High Quality Levels
345 =============================================== 355 ===============================================
346 356
347 The algorithm used by the SIMD-accelerated quantization function cannot produce 357 The algorithm used by the SIMD-accelerated quantization function cannot produce
348 correct results whenever the fast integer forward DCT is used along with a JPEG 358 correct results whenever the fast integer forward DCT is used along with a JPEG
349 quality of 98-100. Thus, libjpeg-turbo must use the non-SIMD quantization 359 quality of 98-100. Thus, libjpeg-turbo must use the non-SIMD quantization
350 function in those cases. This causes performance to drop by as much as 40%. 360 function in those cases. This causes performance to drop by as much as 40%.
351 It is therefore strongly advised that you use the slow integer forward DCT 361 It is therefore strongly advised that you use the slow integer forward DCT
352 whenever encoding images with a JPEG quality of 98 or higher. 362 whenever encoding images with a JPEG quality of 98 or higher.
OLDNEW
« no previous file with comments | « README.chromium ('k') | cjpeg.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698