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