CHANGELOG for Independent JPEG Group's JPEG software

Version 4  10-Dec-92
--------------------

Revised user interface: switches now use names instead of single letters.
(Old switch letters are acceptable abbreviations of new switch names, EXCEPT
for djpeg's old -g, -D, -1 switches.)  cjpeg has several new switches.

Provision for smoothing the input image added to cjpeg.  This helps a lot with
converting dithered GIFs to JPEG.

Decoder upsampling now uses interpolation instead of pixel replication; this
improves rendering of sharp colored edges.

The decompressor will now try to continue after detecting an error in the
compressed data, instead of just aborting.  If the input file has restart
markers, full synchronization will usually be regained at the next undamaged
restart marker.  (But you're still out of luck if any of the header markers
are corrupt.)

Substantial improvements in speed; DCT accuracy improved too.

Numerous minor changes to improve portability.  egetopt.c, which was by far
the worst portability problem, is gone altogether.

A few bugfixes, sigh (mostly affecting DOS implementations only).
Bugfix: on DOS machines, cjpeg -o would fail on grayscale input files.
Bugfix: one-pass quantization to more than 64 color levels would fail on
16-bit-int machines.  This could only happen with quantized grayscale output.

A couple of changes affect code that calls the JPEG subroutine library:

1. The parameter struct tag names are now capitalized (Compress_info_struct,
Compress_methods_struct, Decompress_info_struct, Decompress_methods_struct,
and External_methods_struct).  This makes it easier to live with brain-damaged
compilers with short identifier lengths.  (All identifiers used in the JPEG
code are now unique within the first 16 characters.)

2. If you are not calling jselerror(), you need to initialize three new fields
in the emethods structure, typically as follows:
    e_methods.num_warnings = 0; /* no warnings emitted yet */
    e_methods.first_warning_level = 0; /* display first corrupt-data warning */
    e_methods.more_warning_level = 3; /* but suppress additional ones */
These fields control handling of corrupt-data warnings.


Version 3  17-Mar-92
--------------------

Memory manager is finally capable of swapping to temp files.  There are
separate versions of jmemsys.c for no temp files (same behavior as older
versions), simple temp files with or without tmpfile(), and a DOS-specific
version (including special code for EMS and XMS).  This is probably much more
system-dependent than any of the older code; some bugs may surface here.

Hooks added for user interface to install progress monitoring routine
(percent-done bar, etc).  See comments with dummy progress_monitor
routines in jcdeflts.c, jddeflts.c.

Two-pass color quantization (finally!).  This is now the default method when
quantizing; say '-1' to djpeg for quick-and-ugly 1-pass method.  There is
a test file for checking 2-pass quantization and GIF output.

Fixed bug in jcopy_block_row that broke cjpeg -o option and djpeg -b option
on MSDOS machines.

Miscellaneous small speedups; notably, DCT computation rearranged so that
GCC "inline" feature is no longer needed for good code quality.

File config.c renamed ckconfig.c to avoid name conflict with /etc/config
on Unix systems.

Added example.c to document usage of JPEG subroutines better.

Memory manager now knows how to release all storage during error exit ---
avoids memory leak when using JPEG as subroutines.  This implies a couple
small changes to the subroutine interface: the old free_defaults subroutines
are no longer needed, but if you have a replacement error_exit method then it
must call the new free_all method.  Also, jselvirtmem renamed to jselmemmgr.

Code for reading Targa files with 32-bit pixels was incorrect.

Colorspace conversion slightly faster and more accurate; because of
this, old "test" files will no longer match bit-for-bit.


Version 2  13-Dec-91
--------------------

Documentation improved a little --- there are man pages now.
Installation instructions moved from README to a separate file SETUP.

New program config.c is provided to help you get the configuration options
right.  This should make installation a lot more foolproof.

Sense of djpeg -D switch reversed: dithering is now ON by default.

RLE image file support added (thanks to Mike Lijewski).

Targa image file support added (thanks to Lee Crocker).

PPM input now accepts all PPM and PGM files.

Bug fix: on machines where 'int' is 16 bits, high-Q-setting JPEG files
were not decoded correctly.

Numerous changes to improve portability.  There should be few or no compiler
warnings now.

Makefiles cleaned up; defaults now appropriate for production use rather than
debugging.

Subroutine interface cleaned up.  If you wrote code based on version 1's
jcmain/jdmain, you'll need to change it, but it should get a little shorter
and simpler.


Version 1   7-Oct-91
--------------------

Initial public release.
