image_compressor_pack 1.0.0.1-universal-darwin-16

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +22 -0
  3. data/lib/.paths.yml +12 -0
  4. data/lib/image_compressor_pack/dynamically_linked_recipes.yml +102 -0
  5. data/lib/image_compressor_pack/recipes.rb +42 -0
  6. data/lib/image_compressor_pack/statically_linked_recipes.yml +109 -0
  7. data/lib/image_compressor_pack/version.rb +3 -0
  8. data/lib/image_compressor_pack.rb +24 -0
  9. data/ports/advancecomp-1.22-x86_64-apple-darwin16.1.0.installed +0 -0
  10. data/ports/gifsicle-1.88-x86_64-apple-darwin16.1.0.installed +0 -0
  11. data/ports/jhead-3.0-x86_64-apple-darwin16.1.0.installed +0 -0
  12. data/ports/jpeg-archive-2.1.1-x86_64-apple-darwin16.1.0.installed +0 -0
  13. data/ports/jpegoptim-1.4.4-x86_64-apple-darwin16.1.0.installed +0 -0
  14. data/ports/lcms2-2.8-x86_64-apple-darwin16.1.0.installed +0 -0
  15. data/ports/libpng-1.6.26-x86_64-apple-darwin16.1.0.installed +0 -0
  16. data/ports/mozjpeg-3.1-x86_64-apple-darwin16.1.0.installed +0 -0
  17. data/ports/nasm-2.12.02-x86_64-apple-darwin16.1.0.installed +0 -0
  18. data/ports/optipng-0.7.6-x86_64-apple-darwin16.1.0.installed +0 -0
  19. data/ports/pngcrush-1.8.10-x86_64-apple-darwin16.1.0.installed +0 -0
  20. data/ports/pngquant-2.8.0-x86_64-apple-darwin16.1.0.installed +0 -0
  21. data/ports/x86_64-apple-darwin16.1.0/advancecomp/1.22/bin/advdef +0 -0
  22. data/ports/x86_64-apple-darwin16.1.0/advancecomp/1.22/bin/advmng +0 -0
  23. data/ports/x86_64-apple-darwin16.1.0/advancecomp/1.22/bin/advpng +0 -0
  24. data/ports/x86_64-apple-darwin16.1.0/advancecomp/1.22/bin/advzip +0 -0
  25. data/ports/x86_64-apple-darwin16.1.0/advancecomp/1.22/share/man/man1/advdef.1 +83 -0
  26. data/ports/x86_64-apple-darwin16.1.0/advancecomp/1.22/share/man/man1/advmng.1 +197 -0
  27. data/ports/x86_64-apple-darwin16.1.0/advancecomp/1.22/share/man/man1/advpng.1 +93 -0
  28. data/ports/x86_64-apple-darwin16.1.0/advancecomp/1.22/share/man/man1/advzip.1 +116 -0
  29. data/ports/x86_64-apple-darwin16.1.0/gifsicle/1.88/bin/gifsicle +0 -0
  30. data/ports/x86_64-apple-darwin16.1.0/gifsicle/1.88/share/man/man1/gifsicle.1 +1318 -0
  31. data/ports/x86_64-apple-darwin16.1.0/jhead/3.0/bin/jhead +0 -0
  32. data/ports/x86_64-apple-darwin16.1.0/jpeg-archive/2.1.1/bin/jpeg-archive +40 -0
  33. data/ports/x86_64-apple-darwin16.1.0/jpeg-archive/2.1.1/bin/jpeg-compare +0 -0
  34. data/ports/x86_64-apple-darwin16.1.0/jpeg-archive/2.1.1/bin/jpeg-hash +0 -0
  35. data/ports/x86_64-apple-darwin16.1.0/jpeg-archive/2.1.1/bin/jpeg-recompress +0 -0
  36. data/ports/x86_64-apple-darwin16.1.0/jpegoptim/1.4.4/bin/jpegoptim +0 -0
  37. data/ports/x86_64-apple-darwin16.1.0/jpegoptim/1.4.4/share/man/man1/jpegoptim.1 +186 -0
  38. data/ports/x86_64-apple-darwin16.1.0/lcms2/2.8/bin/linkicc +0 -0
  39. data/ports/x86_64-apple-darwin16.1.0/lcms2/2.8/bin/psicc +0 -0
  40. data/ports/x86_64-apple-darwin16.1.0/lcms2/2.8/bin/transicc +0 -0
  41. data/ports/x86_64-apple-darwin16.1.0/lcms2/2.8/include/lcms2.h +1903 -0
  42. data/ports/x86_64-apple-darwin16.1.0/lcms2/2.8/include/lcms2_plugin.h +665 -0
  43. data/ports/x86_64-apple-darwin16.1.0/lcms2/2.8/lib/liblcms2.a +0 -0
  44. data/ports/x86_64-apple-darwin16.1.0/lcms2/2.8/lib/liblcms2.la +41 -0
  45. data/ports/x86_64-apple-darwin16.1.0/lcms2/2.8/lib/pkgconfig/lcms2.pc +11 -0
  46. data/ports/x86_64-apple-darwin16.1.0/lcms2/2.8/share/man/man1/jpgicc.1 +122 -0
  47. data/ports/x86_64-apple-darwin16.1.0/lcms2/2.8/share/man/man1/tificc.1 +117 -0
  48. data/ports/x86_64-apple-darwin16.1.0/libpng/1.6.26/include/libpng16/png.h +3266 -0
  49. data/ports/x86_64-apple-darwin16.1.0/libpng/1.6.26/include/libpng16/pngconf.h +622 -0
  50. data/ports/x86_64-apple-darwin16.1.0/libpng/1.6.26/include/libpng16/pnglibconf.h +213 -0
  51. data/ports/x86_64-apple-darwin16.1.0/libpng/1.6.26/include/png.h +3266 -0
  52. data/ports/x86_64-apple-darwin16.1.0/libpng/1.6.26/include/pngconf.h +622 -0
  53. data/ports/x86_64-apple-darwin16.1.0/libpng/1.6.26/include/pnglibconf.h +213 -0
  54. data/ports/x86_64-apple-darwin16.1.0/libpng/1.6.26/lib/libpng.a +0 -0
  55. data/ports/x86_64-apple-darwin16.1.0/libpng/1.6.26/lib/libpng.la +41 -0
  56. data/ports/x86_64-apple-darwin16.1.0/libpng/1.6.26/lib/libpng16.a +0 -0
  57. data/ports/x86_64-apple-darwin16.1.0/libpng/1.6.26/lib/libpng16.la +41 -0
  58. data/ports/x86_64-apple-darwin16.1.0/libpng/1.6.26/lib/pkgconfig/libpng16.pc +11 -0
  59. data/ports/x86_64-apple-darwin16.1.0/libpng/1.6.26/share/man/man3/libpng.3 +6179 -0
  60. data/ports/x86_64-apple-darwin16.1.0/libpng/1.6.26/share/man/man3/libpngpf.3 +18 -0
  61. data/ports/x86_64-apple-darwin16.1.0/libpng/1.6.26/share/man/man5/png.5 +74 -0
  62. data/ports/x86_64-apple-darwin16.1.0/mozjpeg/3.1/bin/cjpeg +0 -0
  63. data/ports/x86_64-apple-darwin16.1.0/mozjpeg/3.1/bin/djpeg +0 -0
  64. data/ports/x86_64-apple-darwin16.1.0/mozjpeg/3.1/bin/jpegtran +0 -0
  65. data/ports/x86_64-apple-darwin16.1.0/mozjpeg/3.1/bin/rdjpgcom +0 -0
  66. data/ports/x86_64-apple-darwin16.1.0/mozjpeg/3.1/bin/tjbench +0 -0
  67. data/ports/x86_64-apple-darwin16.1.0/mozjpeg/3.1/bin/wrjpgcom +0 -0
  68. data/ports/x86_64-apple-darwin16.1.0/mozjpeg/3.1/include/jconfig.h +71 -0
  69. data/ports/x86_64-apple-darwin16.1.0/mozjpeg/3.1/include/jerror.h +320 -0
  70. data/ports/x86_64-apple-darwin16.1.0/mozjpeg/3.1/include/jmorecfg.h +390 -0
  71. data/ports/x86_64-apple-darwin16.1.0/mozjpeg/3.1/include/jpeglib.h +1185 -0
  72. data/ports/x86_64-apple-darwin16.1.0/mozjpeg/3.1/include/turbojpeg.h +1538 -0
  73. data/ports/x86_64-apple-darwin16.1.0/mozjpeg/3.1/lib/libjpeg.a +0 -0
  74. data/ports/x86_64-apple-darwin16.1.0/mozjpeg/3.1/lib/libjpeg.la +41 -0
  75. data/ports/x86_64-apple-darwin16.1.0/mozjpeg/3.1/lib/libturbojpeg.a +0 -0
  76. data/ports/x86_64-apple-darwin16.1.0/mozjpeg/3.1/lib/libturbojpeg.la +41 -0
  77. data/ports/x86_64-apple-darwin16.1.0/mozjpeg/3.1/share/doc/README +281 -0
  78. data/ports/x86_64-apple-darwin16.1.0/mozjpeg/3.1/share/doc/README-mozilla.txt +194 -0
  79. data/ports/x86_64-apple-darwin16.1.0/mozjpeg/3.1/share/doc/README-turbo.txt +363 -0
  80. data/ports/x86_64-apple-darwin16.1.0/mozjpeg/3.1/share/doc/example.c +433 -0
  81. data/ports/x86_64-apple-darwin16.1.0/mozjpeg/3.1/share/doc/libjpeg.txt +3015 -0
  82. data/ports/x86_64-apple-darwin16.1.0/mozjpeg/3.1/share/doc/structure.txt +906 -0
  83. data/ports/x86_64-apple-darwin16.1.0/mozjpeg/3.1/share/doc/usage.txt +649 -0
  84. data/ports/x86_64-apple-darwin16.1.0/mozjpeg/3.1/share/doc/wizard.txt +211 -0
  85. data/ports/x86_64-apple-darwin16.1.0/mozjpeg/3.1/share/man/man1/cjpeg.1 +352 -0
  86. data/ports/x86_64-apple-darwin16.1.0/mozjpeg/3.1/share/man/man1/djpeg.1 +278 -0
  87. data/ports/x86_64-apple-darwin16.1.0/mozjpeg/3.1/share/man/man1/jpegtran.1 +269 -0
  88. data/ports/x86_64-apple-darwin16.1.0/mozjpeg/3.1/share/man/man1/rdjpgcom.1 +63 -0
  89. data/ports/x86_64-apple-darwin16.1.0/mozjpeg/3.1/share/man/man1/wrjpgcom.1 +103 -0
  90. data/ports/x86_64-apple-darwin16.1.0/nasm/2.12.02/bin/nasm +0 -0
  91. data/ports/x86_64-apple-darwin16.1.0/nasm/2.12.02/bin/ndisasm +0 -0
  92. data/ports/x86_64-apple-darwin16.1.0/nasm/2.12.02/share/man/man1/nasm.1 +429 -0
  93. data/ports/x86_64-apple-darwin16.1.0/nasm/2.12.02/share/man/man1/ndisasm.1 +120 -0
  94. data/ports/x86_64-apple-darwin16.1.0/optipng/0.7.6/bin/optipng +0 -0
  95. data/ports/x86_64-apple-darwin16.1.0/optipng/0.7.6/man/man1/optipng.1 +343 -0
  96. data/ports/x86_64-apple-darwin16.1.0/pngcrush/1.8.10/bin/pngcrush +0 -0
  97. data/ports/x86_64-apple-darwin16.1.0/pngquant/2.8.0/bin/pngquant +0 -0
  98. data/ports/x86_64-apple-darwin16.1.0/pngquant/2.8.0/share/man/man1/pngquant.1 +127 -0
  99. data/ports/x86_64-apple-darwin16.1.0/zlib/1.2.8/include/zconf.h +511 -0
  100. data/ports/x86_64-apple-darwin16.1.0/zlib/1.2.8/include/zlib.h +1768 -0
  101. data/ports/x86_64-apple-darwin16.1.0/zlib/1.2.8/lib/libz.a +0 -0
  102. data/ports/x86_64-apple-darwin16.1.0/zlib/1.2.8/lib/pkgconfig/zlib.pc +13 -0
  103. data/ports/x86_64-apple-darwin16.1.0/zlib/1.2.8/share/man/man3/zlib.3 +151 -0
  104. data/ports/zlib-1.2.8-x86_64-apple-darwin16.1.0.installed +0 -0
  105. metadata +219 -0
@@ -0,0 +1,363 @@
1
+ *******************************************************************************
2
+ ** Background
3
+ *******************************************************************************
4
+
5
+ libjpeg-turbo is a JPEG image codec that uses SIMD instructions (MMX, SSE2,
6
+ NEON) to accelerate baseline JPEG compression and decompression on x86, x86-64,
7
+ and ARM systems. On such systems, libjpeg-turbo is generally 2-4x as fast as
8
+ libjpeg, all else being equal. On other types of systems, libjpeg-turbo can
9
+ still outperform libjpeg by a significant amount, by virtue of its
10
+ highly-optimized Huffman coding routines. In many cases, the performance of
11
+ libjpeg-turbo rivals that of proprietary high-speed JPEG codecs.
12
+
13
+ libjpeg-turbo implements both the traditional libjpeg API as well as the less
14
+ powerful but more straightforward TurboJPEG API. libjpeg-turbo also features
15
+ colorspace extensions that allow it to compress from/decompress to 32-bit and
16
+ big-endian pixel buffers (RGBX, XBGR, etc.), as well as a full-featured Java
17
+ interface.
18
+
19
+ libjpeg-turbo was originally based on libjpeg/SIMD, an MMX-accelerated
20
+ derivative of libjpeg v6b developed by Miyasaka Masaru. The TigerVNC and
21
+ VirtualGL projects made numerous enhancements to the codec in 2009, and in
22
+ early 2010, libjpeg-turbo spun off into an independent project, with the goal
23
+ of making high-speed JPEG compression/decompression technology available to a
24
+ broader range of users and developers.
25
+
26
+
27
+ *******************************************************************************
28
+ ** License
29
+ *******************************************************************************
30
+
31
+ Most of libjpeg-turbo inherits the non-restrictive, BSD-style license used by
32
+ libjpeg (see README.) The TurboJPEG wrapper (both C and Java versions) and
33
+ associated test programs bear a similar license, which is reproduced below:
34
+
35
+ Redistribution and use in source and binary forms, with or without
36
+ modification, are permitted provided that the following conditions are met:
37
+
38
+ - Redistributions of source code must retain the above copyright notice,
39
+ this list of conditions and the following disclaimer.
40
+ - Redistributions in binary form must reproduce the above copyright notice,
41
+ this list of conditions and the following disclaimer in the documentation
42
+ and/or other materials provided with the distribution.
43
+ - Neither the name of the libjpeg-turbo Project nor the names of its
44
+ contributors may be used to endorse or promote products derived from this
45
+ software without specific prior written permission.
46
+
47
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS",
48
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
49
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
50
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
51
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
52
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
53
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
54
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
55
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
56
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
57
+ POSSIBILITY OF SUCH DAMAGE.
58
+
59
+
60
+ *******************************************************************************
61
+ ** Using libjpeg-turbo
62
+ *******************************************************************************
63
+
64
+ libjpeg-turbo includes two APIs that can be used to compress and decompress
65
+ JPEG images:
66
+
67
+ TurboJPEG API: This API provides an easy-to-use interface for compressing
68
+ and decompressing JPEG images in memory. It also provides some functionality
69
+ that would not be straightforward to achieve using the underlying libjpeg
70
+ API, such as generating planar YUV images and performing multiple
71
+ simultaneous lossless transforms on an image. The Java interface for
72
+ libjpeg-turbo is written on top of the TurboJPEG API.
73
+
74
+ libjpeg API: This is the de facto industry-standard API for compressing and
75
+ decompressing JPEG images. It is more difficult to use than the TurboJPEG
76
+ API but also more powerful. The libjpeg API implementation in libjpeg-turbo
77
+ is both API/ABI-compatible and mathematically compatible with libjpeg v6b.
78
+ It can also optionally be configured to be API/ABI-compatible with libjpeg v7
79
+ and v8 (see below.)
80
+
81
+ There is no significant performance advantage to either API when both are used
82
+ to perform similar operations.
83
+
84
+ =====================
85
+ Colorspace Extensions
86
+ =====================
87
+
88
+ libjpeg-turbo includes extensions that allow JPEG images to be compressed
89
+ directly from (and decompressed directly to) buffers that use BGR, BGRX,
90
+ RGBX, XBGR, and XRGB pixel ordering. This is implemented with ten new
91
+ colorspace constants:
92
+
93
+ JCS_EXT_RGB /* red/green/blue */
94
+ JCS_EXT_RGBX /* red/green/blue/x */
95
+ JCS_EXT_BGR /* blue/green/red */
96
+ JCS_EXT_BGRX /* blue/green/red/x */
97
+ JCS_EXT_XBGR /* x/blue/green/red */
98
+ JCS_EXT_XRGB /* x/red/green/blue */
99
+ JCS_EXT_RGBA /* red/green/blue/alpha */
100
+ JCS_EXT_BGRA /* blue/green/red/alpha */
101
+ JCS_EXT_ABGR /* alpha/blue/green/red */
102
+ JCS_EXT_ARGB /* alpha/red/green/blue */
103
+
104
+ Setting cinfo.in_color_space (compression) or cinfo.out_color_space
105
+ (decompression) to one of these values will cause libjpeg-turbo to read the
106
+ red, green, and blue values from (or write them to) the appropriate position in
107
+ the pixel when compressing from/decompressing to an RGB buffer.
108
+
109
+ Your application can check for the existence of these extensions at compile
110
+ time with:
111
+
112
+ #ifdef JCS_EXTENSIONS
113
+
114
+ At run time, attempting to use these extensions with a libjpeg implementation
115
+ that does not support them will result in a "Bogus input colorspace" error.
116
+ Applications can trap this error in order to test whether run-time support is
117
+ available for the colorspace extensions.
118
+
119
+ When using the RGBX, BGRX, XBGR, and XRGB colorspaces during decompression, the
120
+ X byte is undefined, and in order to ensure the best performance, libjpeg-turbo
121
+ can set that byte to whatever value it wishes. If an application expects the X
122
+ byte to be used as an alpha channel, then it should specify JCS_EXT_RGBA,
123
+ JCS_EXT_BGRA, JCS_EXT_ABGR, or JCS_EXT_ARGB. When these colorspace constants
124
+ are used, the X byte is guaranteed to be 0xFF, which is interpreted as opaque.
125
+
126
+ Your application can check for the existence of the alpha channel colorspace
127
+ extensions at compile time with:
128
+
129
+ #ifdef JCS_ALPHA_EXTENSIONS
130
+
131
+ jcstest.c, located in the libjpeg-turbo source tree, demonstrates how to check
132
+ for the existence of the colorspace extensions at compile time and run time.
133
+
134
+ ===================================
135
+ libjpeg v7 and v8 API/ABI Emulation
136
+ ===================================
137
+
138
+ With libjpeg v7 and v8, new features were added that necessitated extending the
139
+ compression and decompression structures. Unfortunately, due to the exposed
140
+ nature of those structures, extending them also necessitated breaking backward
141
+ ABI compatibility with previous libjpeg releases. Thus, programs that were
142
+ built to use libjpeg v7 or v8 did not work with libjpeg-turbo, since it is
143
+ based on the libjpeg v6b code base. Although libjpeg v7 and v8 are not
144
+ as widely used as v6b, enough programs (including a few Linux distros) made
145
+ the switch that there was a demand to emulate the libjpeg v7 and v8 ABIs
146
+ in libjpeg-turbo. It should be noted, however, that this feature was added
147
+ primarily so that applications that had already been compiled to use libjpeg
148
+ v7+ could take advantage of accelerated baseline JPEG encoding/decoding
149
+ without recompiling. libjpeg-turbo does not claim to support all of the
150
+ libjpeg v7+ features, nor to produce identical output to libjpeg v7+ in all
151
+ cases (see below.)
152
+
153
+ By passing an argument of --with-jpeg7 or --with-jpeg8 to configure, or an
154
+ argument of -DWITH_JPEG7=1 or -DWITH_JPEG8=1 to cmake, you can build a version
155
+ of libjpeg-turbo that emulates the libjpeg v7 or v8 ABI, so that programs
156
+ that are built against libjpeg v7 or v8 can be run with libjpeg-turbo. The
157
+ following section describes which libjpeg v7+ features are supported and which
158
+ aren't.
159
+
160
+ Support for libjpeg v7 and v8 Features:
161
+ ---------------------------------------
162
+
163
+ Fully supported:
164
+
165
+ -- libjpeg: IDCT scaling extensions in decompressor
166
+ libjpeg-turbo supports IDCT scaling with scaling factors of 1/8, 1/4, 3/8,
167
+ 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
168
+ and 1/2 are SIMD-accelerated.)
169
+
170
+ -- libjpeg: arithmetic coding
171
+
172
+ -- libjpeg: In-memory source and destination managers
173
+ See notes below.
174
+
175
+ -- cjpeg: Separate quality settings for luminance and chrominance
176
+ Note that the libpjeg v7+ API was extended to accommodate this feature only
177
+ for convenience purposes. It has always been possible to implement this
178
+ feature with libjpeg v6b (see rdswitch.c for an example.)
179
+
180
+ -- cjpeg: 32-bit BMP support
181
+
182
+ -- cjpeg: -rgb option
183
+
184
+ -- jpegtran: lossless cropping
185
+
186
+ -- jpegtran: -perfect option
187
+
188
+ -- jpegtran: forcing width/height when performing lossless crop
189
+
190
+ -- rdjpgcom: -raw option
191
+
192
+ -- rdjpgcom: locale awareness
193
+
194
+
195
+ Not supported:
196
+
197
+ NOTE: As of this writing, extensive research has been conducted into the
198
+ usefulness of DCT scaling as a means of data reduction and SmartScale as a
199
+ means of quality improvement. The reader is invited to peruse the research at
200
+ http://www.libjpeg-turbo.org/About/SmartScale and draw his/her own conclusions,
201
+ but it is the general belief of our project that these features have not
202
+ demonstrated sufficient usefulness to justify inclusion in libjpeg-turbo.
203
+
204
+ -- libjpeg: DCT scaling in compressor
205
+ cinfo.scale_num and cinfo.scale_denom are silently ignored.
206
+ There is no technical reason why DCT scaling could not be supported when
207
+ emulating the libjpeg v7+ API/ABI, but without the SmartScale extension (see
208
+ below), only scaling factors of 1/2, 8/15, 4/7, 8/13, 2/3, 8/11, 4/5, and
209
+ 8/9 would be available, which is of limited usefulness.
210
+
211
+ -- libjpeg: SmartScale
212
+ cinfo.block_size is silently ignored.
213
+ SmartScale is an extension to the JPEG format that allows for DCT block
214
+ sizes other than 8x8. Providing support for this new format would be
215
+ feasible (particularly without full acceleration.) However, until/unless
216
+ the format becomes either an official industry standard or, at minimum, an
217
+ accepted solution in the community, we are hesitant to implement it, as
218
+ there is no sense of whether or how it might change in the future. It is
219
+ our belief that SmartScale has not demonstrated sufficient usefulness as a
220
+ lossless format nor as a means of quality enhancement, and thus, our primary
221
+ interest in providing this feature would be as a means of supporting
222
+ additional DCT scaling factors.
223
+
224
+ -- libjpeg: Fancy downsampling in compressor
225
+ cinfo.do_fancy_downsampling is silently ignored.
226
+ This requires the DCT scaling feature, which is not supported.
227
+
228
+ -- jpegtran: Scaling
229
+ This requires both the DCT scaling and SmartScale features, which are not
230
+ supported.
231
+
232
+ -- Lossless RGB JPEG files
233
+ This requires the SmartScale feature, which is not supported.
234
+
235
+ What About libjpeg v9?
236
+ ----------------------
237
+
238
+ libjpeg v9 introduced yet another field to the JPEG compression structure
239
+ (color_transform), thus making the ABI backward incompatible with that of
240
+ libjpeg v8. This new field was introduced solely for the purpose of supporting
241
+ lossless SmartScale encoding. Further, there was actually no reason to extend
242
+ the API in this manner, as the color transform could have just as easily been
243
+ activated by way of a new JPEG colorspace constant, thus preserving backward
244
+ ABI compatibility.
245
+
246
+ Our research (see link above) has shown that lossless SmartScale does not
247
+ generally accomplish anything that can't already be accomplished better with
248
+ existing, standard lossless formats. Thus, at this time, it is our belief that
249
+ there is not sufficient technical justification for software to upgrade from
250
+ libjpeg v8 to libjpeg v9, and therefore, not sufficient technical justification
251
+ for us to emulate the libjpeg v9 ABI.
252
+
253
+ =====================================
254
+ In-Memory Source/Destination Managers
255
+ =====================================
256
+
257
+ By default, libjpeg-turbo 1.3 and later includes the jpeg_mem_src() and
258
+ jpeg_mem_dest() functions, even when not emulating the libjpeg v8 API/ABI.
259
+ Previously, it was necessary to build libjpeg-turbo from source with libjpeg v8
260
+ API/ABI emulation in order to use the in-memory source/destination managers,
261
+ but several projects requested that those functions be included when emulating
262
+ the libjpeg v6b API/ABI as well. This allows the use of those functions by
263
+ programs that need them without breaking ABI compatibility for programs that
264
+ don't, and it allows those functions to be provided in the "official"
265
+ libjpeg-turbo binaries.
266
+
267
+ Those who are concerned about maintaining strict conformance with the libjpeg
268
+ v6b or v7 API can pass an argument of --without-mem-srcdst to configure or
269
+ an argument of -DWITH_MEM_SRCDST=0 to CMake prior to building libjpeg-turbo.
270
+ This will restore the pre-1.3 behavior, in which jpeg_mem_src() and
271
+ jpeg_mem_dest() are only included when emulating the libjpeg v8 API/ABI.
272
+
273
+ On Un*x systems, including the in-memory source/destination managers changes
274
+ the dynamic library version from 62.0.0 to 62.1.0 if using libjpeg v6b API/ABI
275
+ emulation and from 7.0.0 to 7.1.0 if using libjpeg v7 API/ABI emulation.
276
+
277
+ Note that, on most Un*x systems, the dynamic linker will not look for a
278
+ function in a library until that function is actually used. Thus, if a program
279
+ is built against libjpeg-turbo 1.3+ and uses jpeg_mem_src() or jpeg_mem_dest(),
280
+ that program will not fail if run against an older version of libjpeg-turbo or
281
+ against libjpeg v7- until the program actually tries to call jpeg_mem_src() or
282
+ jpeg_mem_dest(). Such is not the case on Windows. If a program is built
283
+ against the libjpeg-turbo 1.3+ DLL and uses jpeg_mem_src() or jpeg_mem_dest(),
284
+ then it must use the libjpeg-turbo 1.3+ DLL at run time.
285
+
286
+ Both cjpeg and djpeg have been extended to allow testing the in-memory
287
+ source/destination manager functions. See their respective man pages for more
288
+ details.
289
+
290
+
291
+ *******************************************************************************
292
+ ** Mathematical Compatibility
293
+ *******************************************************************************
294
+
295
+ For the most part, libjpeg-turbo should produce identical output to libjpeg
296
+ v6b. The one exception to this is when using the floating point DCT/IDCT, in
297
+ which case the outputs of libjpeg v6b and libjpeg-turbo can differ for the
298
+ following reasons:
299
+
300
+ -- The SSE/SSE2 floating point DCT implementation in libjpeg-turbo is ever so
301
+ slightly more accurate than the implementation in libjpeg v6b, but not by
302
+ any amount perceptible to human vision (generally in the range of 0.01 to
303
+ 0.08 dB gain in PNSR.)
304
+ -- When not using the SIMD extensions, libjpeg-turbo uses the more accurate
305
+ (and slightly faster) floating point IDCT algorithm introduced in libjpeg
306
+ v8a as opposed to the algorithm used in libjpeg v6b. It should be noted,
307
+ however, that this algorithm basically brings the accuracy of the floating
308
+ point IDCT in line with the accuracy of the slow integer IDCT. The floating
309
+ point DCT/IDCT algorithms are mainly a legacy feature, and they do not
310
+ produce significantly more accuracy than the slow integer algorithms (to put
311
+ numbers on this, the typical difference in PNSR between the two algorithms
312
+ is less than 0.10 dB, whereas changing the quality level by 1 in the upper
313
+ range of the quality scale is typically more like a 1.0 dB difference.)
314
+ -- When not using the SIMD extensions, then the accuracy of the floating point
315
+ DCT/IDCT can depend on the compiler and compiler settings.
316
+
317
+ While libjpeg-turbo does emulate the libjpeg v8 API/ABI, under the hood, it is
318
+ still using the same algorithms as libjpeg v6b, so there are several specific
319
+ cases in which libjpeg-turbo cannot be expected to produce the same output as
320
+ libjpeg v8:
321
+
322
+ -- When decompressing using scaling factors of 1/2 and 1/4, because libjpeg v8
323
+ implements those scaling algorithms differently than libjpeg v6b does, and
324
+ libjpeg-turbo's SIMD extensions are based on the libjpeg v6b behavior.
325
+
326
+ -- When using chrominance subsampling, because libjpeg v8 implements this
327
+ with its DCT/IDCT scaling algorithms rather than with a separate
328
+ downsampling/upsampling algorithm. In our testing, the subsampled/upsampled
329
+ output of libjpeg v8 is less accurate than that of libjpeg v6b for this
330
+ reason.
331
+
332
+ -- When decompressing using a scaling factor > 1 and merged (AKA "non-fancy" or
333
+ "non-smooth") chrominance upsampling, because libjpeg v8 does not support
334
+ merged upsampling with scaling factors > 1.
335
+
336
+
337
+ *******************************************************************************
338
+ ** Performance Pitfalls
339
+ *******************************************************************************
340
+
341
+ ===============
342
+ Restart Markers
343
+ ===============
344
+
345
+ The optimized Huffman decoder in libjpeg-turbo does not handle restart markers
346
+ in a way that makes the rest of the libjpeg infrastructure happy, so it is
347
+ necessary to use the slow Huffman decoder when decompressing a JPEG image that
348
+ has restart markers. This can cause the decompression performance to drop by
349
+ as much as 20%, but the performance will still be much greater than that of
350
+ libjpeg. Many consumer packages, such as PhotoShop, use restart markers when
351
+ generating JPEG images, so images generated by those programs will experience
352
+ this issue.
353
+
354
+ ===============================================
355
+ Fast Integer Forward DCT at High Quality Levels
356
+ ===============================================
357
+
358
+ The algorithm used by the SIMD-accelerated quantization function cannot produce
359
+ correct results whenever the fast integer forward DCT is used along with a JPEG
360
+ quality of 98-100. Thus, libjpeg-turbo must use the non-SIMD quantization
361
+ function in those cases. This causes performance to drop by as much as 40%.
362
+ It is therefore strongly advised that you use the slow integer forward DCT
363
+ whenever encoding images with a JPEG quality of 98 or higher.