1 CHANGE LOG for Independent JPEG Group's JPEG software
5 -----------------------
7 Optimize the optimal Huffman code table generation to produce
8 slightly smaller files. Thank to John Korejwa for suggestion.
9 Note: Requires rebuild of testimgp.jpg.
11 Decoding Huffman: Use default tables if tables are not defined.
12 Thank to Simone Azzalin for report (Motion JPEG),
13 and to Martin Strunz for hint.
15 Add sanity check in optimal Huffman code table generation.
16 Thank to Adam Farley for suggestion.
18 rdtarga.c: use read_byte(), with EOF check, instead of getc()
20 Thank to Chijin Zhou for cjpeg potential vulnerability report.
22 jmemnobs.c: respect the max_memory_to_use setting in
23 jpeg_mem_available() computation. Thank to Sheng Shu and
24 Dongdong She for djpeg potential vulnerability report.
26 jdarith.c, jdhuff.c: avoid left shift of negative value
27 compiler warning in decode_mcu_AC_refine().
28 Thank to Indu Bhagat for suggestion.
30 Add x64 (64-bit) platform support, avoid compiler warnings.
31 Thank to Jonathan Potter, Feiyun Wang, and Sheng Shu for suggestion.
33 Adjust libjpeg version specification for pkg-config file.
34 Thank to Chen Chen for suggestion.
36 Restore GIF read and write support from libjpeg version 6a.
37 Thank to Wolfgang Werner (W.W.) Heinz for suggestion.
39 Improve consistency in raw (downsampled) image data processing mode.
40 Thank to Zhongyuan Zhou for hint.
42 Avoid out of bounds array read (AC derived table pointers)
43 in start pass in jdhuff.c. Thank to Peng Li for report.
45 Improve code sanity (jdhuff.c).
46 Thank to Reza Mirzazade farkhani for reports.
48 Add jpegtran -drop option; add options to the crop extension and wipe
49 to fill the extra area with content from the source image region,
53 Version 9c 14-Jan-2018
54 -----------------------
56 jpegtran: add an option to the -wipe switch to fill the region
57 with the average of adjacent blocks, instead of gray out.
58 Thank to Caitlyn Feddock and Maddie Ziegler for inspiration.
60 Make range extension bits adjustable (in jpegint.h).
61 Thank to Robin Watts for suggestion.
63 Provide macros for fflush() and ferror() in jinclude.h in order
64 to facilitate adaption by applications using an own FILE class.
65 Thank to Gerhard Huber for suggestion.
67 Add libjpeg pkg-config file. Thank to Mark Lavi, Vincent Torri,
68 Patrick McMunn, and Huw Davies for suggestion.
70 Add sanity checks in cjpeg image reader modules.
71 Thank to Bingchang, Liu for reports.
74 Version 9b 17-Jan-2016
75 -----------------------
77 Improvements and optimizations in DCT and color calculations.
78 Normalize range limit array composition and access pattern.
79 Thank to Sia Furler and Maddie Ziegler for inspiration.
81 Use merged upsample with scaled DCT sizes larger than 8.
82 Thank to Taylor Hatala for inspiration.
84 Check for excessive comment lengths in argument parsing in wrjpgcom.c.
85 Thank to Julian Cohen for hint.
87 Add makefile.b32 for use with Borland C++ 32-bit (bcc32).
88 Thank to Joe Slater for contribution.
90 Document 'f' specifier for jpegtran -crop specification.
91 Thank to Michele Martone for suggestion.
93 Use defined value from header instead of hardwired number in rdswitch.c.
94 Thank to Robert Sprowson for hint.
97 Version 9a 19-Jan-2014
98 -----------------------
100 Add support for wide gamut color spaces (JFIF version 2).
101 Improve clarity and accuracy in color conversion modules.
102 Note: Requires rebuild of test images.
104 Extend the bit depth support to all values from 8 to 12
105 (BITS_IN_JSAMPLE configuration option in jmorecfg.h).
106 jpegtran now supports N bits sample data precision with all N from 8 to 12
107 in a single instance. Thank to Roland Fassauer for inspiration.
109 Try to resolve issues with new boolean type definition.
110 Thank also to v4hn for suggestion.
112 Enable option to use default Huffman tables for lossless compression
113 (for hardware solution), and in this case improve lossless RGB compression
114 with reversible color transform. Thank to Benny Alexandar for hint.
116 Extend the entropy decoding structure, so that extraneous bytes between
117 compressed scan data and following marker can be reported correctly.
118 Thank to Nigel Tao for hint.
120 Add jpegtran -wipe option and extension for -crop.
121 Thank to Andrew Senior, David Clunie, and Josef Schmid for suggestion.
124 Version 9 13-Jan-2013
125 ----------------------
127 Add cjpeg -rgb1 option to create an RGB JPEG file, and insert
128 a simple reversible color transform into the processing which
129 significantly improves the compression.
130 The recommended command for lossless coding of RGB images is now
131 cjpeg -rgb1 -block 1 -arithmetic.
132 As said, this option improves the compression significantly, but
133 the files are not compatible with JPEG decoders prior to IJG v9
134 due to the included color transform.
135 The used color transform and marker signaling is compatible with
136 other JPEG standards (e.g., JPEG-LS part 2).
138 Remove the automatic de-ANSI-fication support (Automake 1.12).
139 Thank also to Nitin A Kamble for suggestion.
141 Add remark for jpeg_mem_dest() in jdatadst.c.
142 Thank to Elie-Gregoire Khoury for the hint.
144 Support files with invalid component identifiers (created
145 by Adobe PDF). Thank to Robin Watts for the suggestion.
147 Adapt full buffer case in jcmainct.c for use with scaled DCT.
148 Thank to Sergii Biloshytskyi for the suggestion.
150 Add type identifier for declaration of noreturn functions.
151 Thank to Brett L. Moore for the suggestion.
153 Correct argument type in format string, avoid compiler warnings.
154 Thank to Vincent Torri for hint.
156 Add missing #include directives in configuration checks, avoid
157 configuration errors. Thank to John Spencer for the hint.
160 Version 8d 15-Jan-2012
161 -----------------------
163 Add cjpeg -rgb option to create RGB JPEG files.
164 Using this switch suppresses the conversion from RGB
165 colorspace input to the default YCbCr JPEG colorspace.
166 This feature allows true lossless JPEG coding of RGB color images.
167 The recommended command for this purpose is currently
168 cjpeg -rgb -block 1 -arithmetic.
169 SmartScale capable decoder (introduced with IJG JPEG 8) required.
170 Thank to Michael Koch for the initial suggestion.
172 Add option to disable the region adjustment in the transupp crop code.
173 Thank to Jeffrey Friedl for the suggestion.
175 Thank to Richard Jones and Edd Dawson for various minor corrections.
177 Thank to Akim Demaille for configure.ac cleanup.
180 Version 8c 16-Jan-2011
181 -----------------------
183 Add option to compression library and cjpeg (-block N) to use
184 different DCT block size.
185 All N from 1 to 16 are possible. Default is 8 (baseline format).
186 Larger values produce higher compression,
187 smaller values produce higher quality.
188 SmartScale capable decoder (introduced with IJG JPEG 8) required.
191 Version 8b 16-May-2010
192 -----------------------
194 Repair problem in new memory source manager with corrupt JPEG data.
195 Thank to Ted Campbell and Samuel Chun for the report.
197 Repair problem in Makefile.am test target.
198 Thank to anonymous user for the report.
200 Support MinGW installation with automatic configure.
201 Thank to Volker Grabsch for the suggestion.
204 Version 8a 28-Feb-2010
205 -----------------------
207 Writing tables-only datastreams via jpeg_write_tables works again.
209 Support 32-bit BMPs (RGB image with Alpha channel) for read in cjpeg.
210 Thank to Brett Blackham for the suggestion.
212 Improve accuracy in floating point IDCT calculation.
213 Thank to Robert Hooke for the hint.
216 Version 8 10-Jan-2010
217 ----------------------
219 jpegtran now supports the same -scale option as djpeg for "lossless" resize.
220 An implementation of the JPEG SmartScale extension is required for this
221 feature. A (draft) specification of the JPEG SmartScale extension is
222 available as a contributed document at ITU and ISO. Revision 2 or later
223 of the document is required (latest document version is Revision 3).
224 The SmartScale extension will enable more features beside lossless resize
225 in future implementations, as described in the document (new compression
228 Add sanity check in BMP reader module to avoid cjpeg crash for empty input
229 image (thank to Isaev Ildar of ISP RAS, Moscow, RU for reporting this error).
231 Add data source and destination managers for read from and write to
232 memory buffers. New API functions jpeg_mem_src and jpeg_mem_dest.
233 Thank to Roberto Boni from Italy for the suggestion.
236 Version 7 27-Jun-2009
237 ----------------------
239 New scaled DCTs implemented.
240 djpeg now supports scalings N/8 with all N from 1 to 16.
241 cjpeg now supports scalings 8/N with all N from 1 to 16.
242 Scaled DCTs with size larger than 8 are now also used for resolving the
243 common 2x2 chroma subsampling case without additional spatial resampling.
244 Separate spatial resampling for those kind of files is now only necessary
245 for N>8 scaling cases.
246 Furthermore, separate scaled DCT functions are provided for direct resolving
247 of the common asymmetric subsampling cases (2x1 and 1x2) without additional
250 cjpeg -quality option has been extended for support of separate quality
251 settings for luminance and chrominance (or in general, for every provided
252 quantization table slot).
253 New API function jpeg_default_qtables() and q_scale_factor array in library.
255 Added -nosmooth option to cjpeg, complementary to djpeg.
256 New variable "do_fancy_downsampling" in library, complement to fancy
257 upsampling. Fancy upsampling now uses direct DCT scaling with sizes
258 larger than 8. The old method is not reversible and has been removed.
260 Support arithmetic entropy encoding and decoding.
261 Added files jaricom.c, jcarith.c, jdarith.c.
263 Straighten the file structure:
264 Removed files jidctred.c, jcphuff.c, jchuff.h, jdphuff.c, jdhuff.h.
266 jpegtran has a new "lossless" cropping feature.
268 Implement -perfect option in jpegtran, new API function
269 jtransform_perfect_transform() in transupp. (DP 204_perfect.dpatch)
271 Better error messages for jpegtran fopen failure.
272 (DP 203_jpegtran_errmsg.dpatch)
274 Fix byte order issue with 16bit PPM/PGM files in rdppm.c/wrppm.c:
275 according to Netpbm, the de facto standard implementation of the PNM formats,
276 the most significant byte is first. (DP 203_rdppm.dpatch)
278 Add -raw option to rdjpgcom not to mangle the output.
279 (DP 205_rdjpgcom_raw.dpatch)
281 Make rdjpgcom locale aware. (DP 201_rdjpgcom_locale.dpatch)
283 Add extern "C" to jpeglib.h.
284 This avoids the need to put extern "C" { ... } around #include "jpeglib.h"
285 in your C++ application. Defining the symbol DONT_USE_EXTERN_C in the
286 configuration prevents this. (DP 202_jpeglib.h_c++.dpatch)
289 Version 6b 27-Mar-1998
290 -----------------------
292 jpegtran has new features for lossless image transformations (rotation
293 and flipping) as well as "lossless" reduction to grayscale.
295 jpegtran now copies comments by default; it has a -copy switch to enable
296 copying all APPn blocks as well, or to suppress comments. (Formerly it
297 always suppressed comments and APPn blocks.) jpegtran now also preserves
298 JFIF version and resolution information.
300 New decompressor library feature: COM and APPn markers found in the input
301 file can be saved in memory for later use by the application. (Before,
302 you had to code this up yourself with a custom marker processor.)
304 There is an unused field "void * client_data" now in compress and decompress
305 parameter structs; this may be useful in some applications.
307 JFIF version number information is now saved by the decoder and accepted by
308 the encoder. jpegtran uses this to copy the source file's version number,
309 to ensure "jpegtran -copy all" won't create bogus files that contain JFXX
310 extensions but claim to be version 1.01. Applications that generate their
311 own JFXX extension markers also (finally) have a supported way to cause the
312 encoder to emit JFIF version number 1.02.
314 djpeg's trace mode reports JFIF 1.02 thumbnail images as such, rather
315 than as unknown APP0 markers.
317 In -verbose mode, djpeg and rdjpgcom will try to print the contents of
318 APP12 markers as text. Some digital cameras store useful text information
321 Handling of truncated data streams is more robust: blocks beyond the one in
322 which the error occurs will be output as uniform gray, or left unchanged
323 if decoding a progressive JPEG. The appearance no longer depends on the
324 Huffman tables being used.
326 Huffman tables are checked for validity much more carefully than before.
328 To avoid the Unisys LZW patent, djpeg's GIF output capability has been
329 changed to produce "uncompressed GIFs", and cjpeg's GIF input capability
330 has been removed altogether. We're not happy about it either, but there
331 seems to be no good alternative.
333 The configure script now supports building libjpeg as a shared library
334 on many flavors of Unix (all the ones that GNU libtool knows how to
335 build shared libraries for). Use "./configure --enable-shared" to
338 New jconfig file and makefiles for Microsoft Visual C++ and Developer Studio.
339 Also, a jconfig file and a build script for Metrowerks CodeWarrior
340 on Apple Macintosh. makefile.dj has been updated for DJGPP v2, and there
341 are miscellaneous other minor improvements in the makefiles.
343 jmemmac.c now knows how to create temporary files following Mac System 7
346 djpeg's -map switch is now able to read raw-format PPM files reliably.
348 cjpeg -progressive -restart no longer generates any unnecessary DRI markers.
350 Multiple calls to jpeg_simple_progression for a single JPEG object
351 no longer leak memory.
357 Library initialization sequence modified to detect version mismatches
358 and struct field packing mismatches between library and calling application.
359 This change requires applications to be recompiled, but does not require
360 any application source code change.
362 All routine declarations changed to the style "GLOBAL(type) name ...",
363 that is, GLOBAL, LOCAL, METHODDEF, EXTERN are now macros taking the
364 routine's return type as an argument. This makes it possible to add
365 Microsoft-style linkage keywords to all the routines by changing just
366 these macros. Note that any application code that was using these macros
367 will have to be changed.
369 DCT coefficient quantization tables are now stored in normal array order
370 rather than zigzag order. Application code that calls jpeg_add_quant_table,
371 or otherwise manipulates quantization tables directly, will need to be
372 changed. If you need to make such code work with either older or newer
373 versions of the library, a test like "#if JPEG_LIB_VERSION >= 61" is
376 djpeg's trace capability now dumps DQT tables in natural order, not zigzag
377 order. This allows the trace output to be made into a "-qtables" file
380 New system-dependent memory manager module for use on Apple Macintosh.
382 Fix bug in cjpeg's -smooth option: last one or two scanlines would be
383 duplicates of the prior line unless the image height mod 16 was 1 or 2.
385 Repair minor problems in VMS, BCC, MC6 makefiles.
387 New configure script based on latest GNU Autoconf.
389 Correct the list of include files needed by MetroWerks C for ccommand().
391 Numerous small documentation updates.
397 Progressive JPEG support: library can read and write full progressive JPEG
398 files. A "buffered image" mode supports incremental decoding for on-the-fly
399 display of progressive images. Simply recompiling an existing IJG-v5-based
400 decoder with v6 should allow it to read progressive files, though of course
401 without any special progressive display.
403 New "jpegtran" application performs lossless transcoding between different
404 JPEG formats; primarily, it can be used to convert baseline to progressive
405 JPEG and vice versa. In support of jpegtran, the library now allows lossless
406 reading and writing of JPEG files as DCT coefficient arrays. This ability
407 may be of use in other applications.
409 Notes for programmers:
410 * We changed jpeg_start_decompress() to be able to suspend; this makes all
411 decoding modes available to suspending-input applications. However,
412 existing applications that use suspending input will need to be changed
413 to check the return value from jpeg_start_decompress(). You don't need to
414 do anything if you don't use a suspending data source.
415 * We changed the interface to the virtual array routines: access_virt_array
416 routines now take a count of the number of rows to access this time. The
417 last parameter to request_virt_array routines is now interpreted as the
418 maximum number of rows that may be accessed at once, but not necessarily
419 the height of every access.
423 ---------------------
425 Correct bugs with grayscale images having v_samp_factor > 1.
427 jpeg_write_raw_data() now supports output suspension.
429 Correct bugs in "configure" script for case of compiling in
430 a directory other than the one containing the source files.
432 Repair bug in jquant1.c: sometimes didn't use as many colors as it could.
434 Borland C makefile and jconfig file work under either MS-DOS or OS/2.
436 Miscellaneous improvements to documentation.
442 Changed color conversion roundoff behavior so that grayscale values are
443 represented exactly. (This causes test image files to change.)
445 Make ordered dither use 16x16 instead of 4x4 pattern for a small quality
448 New configure script based on latest GNU Autoconf.
449 Fix configure script to handle CFLAGS correctly.
450 Rename *.auto files to *.cfg, so that configure script still works if
451 file names have been truncated for DOS.
453 Fix bug in rdbmp.c: didn't allow for extra data between header and image.
455 Modify rdppm.c/wrppm.c to handle 2-byte raw PPM/PGM formats for 12-bit data.
457 Fix several bugs in rdrle.c.
459 NEED_SHORT_EXTERNAL_NAMES option was broken.
461 Revise jerror.h/jerror.c for more flexibility in message table.
463 Repair oversight in jmemname.c NO_MKTEMP case: file could be there
470 Version 5 represents a nearly complete redesign and rewrite of the IJG
471 software. Major user-visible changes include:
472 * Automatic configuration simplifies installation for most Unix systems.
473 * A range of speed vs. image quality tradeoffs are supported.
474 This includes resizing of an image during decompression: scaling down
475 by a factor of 1/2, 1/4, or 1/8 is handled very efficiently.
476 * New programs rdjpgcom and wrjpgcom allow insertion and extraction
477 of text comments in a JPEG file.
479 The application programmer's interface to the library has changed completely.
480 Notable improvements include:
481 * We have eliminated the use of callback routines for handling the
482 uncompressed image data. The application now sees the library as a
483 set of routines that it calls to read or write image data on a
484 scanline-by-scanline basis.
485 * The application image data is represented in a conventional interleaved-
486 pixel format, rather than as a separate array for each color channel.
487 This can save a copying step in many programs.
488 * The handling of compressed data has been cleaned up: the application can
489 supply routines to source or sink the compressed data. It is possible to
490 suspend processing on source/sink buffer overrun, although this is not
491 supported in all operating modes.
492 * All static state has been eliminated from the library, so that multiple
493 instances of compression or decompression can be active concurrently.
494 * JPEG abbreviated datastream formats are supported, ie, quantization and
495 Huffman tables can be stored separately from the image data.
496 * And not only that, but the documentation of the library has improved
500 The last widely used release before the version 5 rewrite was version 4A of
501 18-Feb-93. Change logs before that point have been discarded, since they
502 are not of much interest after the rewrite.