CHANGELOG for Independent JPEG Group's JPEG software


Version 4A 18-Feb-93
--------------------

Substantial speedup for grayscale output from color JPEG file (suppress
processing of chrominance components).  Lesser speedups in Huffman decoding
and in compression quantization.

Can switch stdin/stdout to binary mode with either fdopen() or setmode();
this allows use of one-file command line style on a wider range of systems.
Also added -outfile switch so that makefile test scripts don't have to depend
on the command line style.

New makefile.icc for Code Builder; makefile.sas is updated for SAS C 6.x.

Hook added to allow surrounding application to read and write COM (comment)
blocks.

Bugfixes (DOS only): jmemdos.c code for accessing expanded memory only worked
if struct fields are packed on byte boundaries.  This is not true by default
for Microsoft C.  Furthermore, Microsoft C needs an _fheapmin() call to clean
up the far heap correctly.


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.
