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

Side by Side Diff: README-turbo.txt

Issue 9232002: Update libjpeg-turbo to 1.2. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/libjpeg_turbo/
Patch Set: '' Created 8 years, 11 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') | google.patch » ('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 which 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, etc.) 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 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 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 open
15 source codec that could replace the partially closed source TurboJPEG/IPP codec 15 source codec that could replace the partially closed source TurboJPEG/IPP codec
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 52 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
53 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 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 54 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
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 which 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/OSS: This API wraps libjpeg-turbo and provides an easy-to-use
66 interface for compressing and decompressing JPEG images in memory. It also 66 interface for compressing and decompressing JPEG images in memory. It also
67 provides some features that would not be straightforward to implement using 67 provides some features that would not be straightforward to implement using
68 the underlying libjpeg API, such as generating planar YUV images and 68 the underlying libjpeg API, such as generating planar YUV images and
69 performing multiple simultaneous lossless transforms on an image. The Java 69 performing multiple simultaneous lossless transforms on an image. The Java
70 interface for libjpeg-turbo is written on top of TurboJPEG/OSS. 70 interface for libjpeg-turbo is written on top of TurboJPEG/OSS.
71 71
72 libjpeg API: This is the industry standard API for compressing and 72 libjpeg API: This is the industry standard API for compressing and
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 which 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.
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 To build Visual C++ applications using libjpeg-turbo, add 201 To build Visual C++ applications using libjpeg-turbo, add
202 c:\libjpeg-turbo[64]\include to the system or user INCLUDE environment 202 c:\libjpeg-turbo[64]\include to the system or user INCLUDE environment
203 variable and c:\libjpeg-turbo[64]\lib to the system or user LIB environment 203 variable and c:\libjpeg-turbo[64]\lib to the system or user LIB environment
204 variable, and then link against either jpeg.lib (to use the DLL version of 204 variable, and then link against either jpeg.lib (to use the DLL version of
205 libjpeg-turbo) or 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.)
206 206
207 ===================== 207 =====================
208 Colorspace Extensions 208 Colorspace Extensions
209 ===================== 209 =====================
210 210
211 libjpeg-turbo includes extensions which allow JPEG images to be compressed 211 libjpeg-turbo includes extensions that allow JPEG images to be compressed
212 directly from (and decompressed directly to) buffers which use BGR, BGRX, 212 directly from (and decompressed directly to) buffers that use BGR, BGRX,
213 RGBX, XBGR, and XRGB pixel ordering. This is implemented with six new 213 RGBX, XBGR, and XRGB pixel ordering. This is implemented with ten new
214 colorspace constants: 214 colorspace constants:
215 215
216 JCS_EXT_RGB /* red/green/blue */ 216 JCS_EXT_RGB /* red/green/blue */
217 JCS_EXT_RGBX /* red/green/blue/x */ 217 JCS_EXT_RGBX /* red/green/blue/x */
218 JCS_EXT_BGR /* blue/green/red */ 218 JCS_EXT_BGR /* blue/green/red */
219 JCS_EXT_BGRX /* blue/green/red/x */ 219 JCS_EXT_BGRX /* blue/green/red/x */
220 JCS_EXT_XBGR /* x/blue/green/red */ 220 JCS_EXT_XBGR /* x/blue/green/red */
221 JCS_EXT_XRGB /* x/red/green/blue */ 221 JCS_EXT_XRGB /* x/red/green/blue */
222 JCS_EXT_RGBA /* red/green/blue/alpha */
223 JCS_EXT_BGRA /* blue/green/red/alpha */
224 JCS_EXT_ABGR /* alpha/blue/green/red */
225 JCS_EXT_ARGB /* alpha/red/green/blue */
222 226
223 Setting cinfo.in_color_space (compression) or cinfo.out_color_space 227 Setting cinfo.in_color_space (compression) or cinfo.out_color_space
224 (decompression) to one of these values will cause libjpeg-turbo to read the 228 (decompression) to one of these values will cause libjpeg-turbo to read the
225 red, green, and blue values from (or write them to) the appropriate position in 229 red, green, and blue values from (or write them to) the appropriate position in
226 the pixel when YUV conversion is performed. 230 the pixel when compressing from/decompressing to an RGB buffer.
227 231
228 Your application can check for the existence of these extensions at compile 232 Your application can check for the existence of these extensions at compile
229 time with: 233 time with:
230 234
231 #ifdef JCS_EXTENSIONS 235 #ifdef JCS_EXTENSIONS
232 236
233 At run time, attempting to use these extensions with a version of libjpeg 237 At run time, attempting to use these extensions with a version of libjpeg
234 that doesn't support them will result in a "Bogus input colorspace" error. 238 that doesn't support them will result in a "Bogus input colorspace" error.
235 239
240 When using the RGBX, BGRX, XBGR, and XRGB colorspaces during decompression, the
241 X byte is undefined, and in order to ensure the best performance, libjpeg-turbo
242 can set that byte to whatever value it wishes. If an application expects the X
243 byte to be used as an alpha channel, then it should specify JCS_EXT_RGBA,
244 JCS_EXT_BGRA, JCS_EXT_ABGR, or JCS_EXT_ARGB. When these colorspace constants
245 are used, the X byte is guaranteed to be 0xFF, which is interpreted as opaque.
246
247 Your application can check for the existence of the alpha channel colorspace
248 extensions at compile time with:
249
250 #ifdef JCS_ALPHA_EXTENSIONS
251
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.
254
236 ================================= 255 =================================
237 libjpeg v7 and v8 API/ABI support 256 libjpeg v7 and v8 API/ABI support
238 ================================= 257 =================================
239 258
240 libjpeg v7 and v8 added new features to the API/ABI, and, unfortunately, the 259 libjpeg v7 and v8 added new features to the API/ABI, and, unfortunately, the
241 compression and decompression structures were extended in a backward- 260 compression and decompression structures were extended in a backward-
242 incompatible manner to accommodate these features. Thus, programs which are 261 incompatible manner to accommodate these features. Thus, programs that are
243 built to use libjpeg v7 or v8 did not work with libjpeg-turbo, since it is 262 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 263 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 264 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 265 made the switch that it was desirable to provide support for the libjpeg v7/v8
247 API/ABI in libjpeg-turbo. 266 API/ABI in libjpeg-turbo.
248 267
249 Some of the libjpeg v7 and v8 features -- DCT scaling, to name one -- involve 268 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 269 deep modifications to the code that cannot be accommodated by libjpeg-turbo
251 without either breaking compatibility with libjpeg v6b or producing an 270 without either breaking compatibility with libjpeg v6b or producing an
252 unsupportable mess. In order to fully support libjpeg v8 with all of its 271 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 272 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 273 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 274 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 275 involvement and until/unless we have some notion of whether future libjpeg
257 releases will also be backward-incompatible. 276 releases will also be backward-incompatible.
258 277
259 By passing an argument of --with-jpeg7 or --with-jpeg8 to configure, or an 278 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 279 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 280 of libjpeg-turbo that 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 281 that 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 282 following section describes which libjpeg v7+ features are supported and which
264 aren't. 283 aren't.
265 284
266 libjpeg v7 and v8 Features: 285 libjpeg v7 and v8 Features:
267 --------------------------- 286 ---------------------------
268 287
269 Fully supported: 288 Fully supported:
270 289
271 -- cjpeg: Separate quality settings for luminance and chrominance 290 -- cjpeg: Separate quality settings for luminance and chrominance
272 Note that the libpjeg v7+ API was extended to accommodate this feature only 291 Note that the libpjeg v7+ API was extended to accommodate this feature only
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 =============================================== 343 ===============================================
325 Fast Integer Forward DCT at High Quality Levels 344 Fast Integer Forward DCT at High Quality Levels
326 =============================================== 345 ===============================================
327 346
328 The algorithm used by the SIMD-accelerated quantization function cannot produce 347 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 348 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 349 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%. 350 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 351 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. 352 whenever encoding images with a JPEG quality of 98 or higher.
OLDNEW
« no previous file with comments | « README.chromium ('k') | google.patch » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698