CHANGE LOG for Independent JPEG Group's JPEG software


Version 6a  7-Feb-96
--------------------

Library initialization sequence modified to detect version mismatches
and struct field packing mismatches between library and calling application.
This change requires applications to be recompiled, but does not require
any application source code change.

All routine declarations changed to the style "GLOBAL(type) name ...",
that is, GLOBAL, LOCAL, METHODDEF, EXTERN are now macros taking the
routine's return type as an argument.  This makes it possible to add
Microsoft-style linkage keywords to all the routines by changing just
these macros.  Note that any application code that was using these macros
will have to be changed.

DCT coefficient quantization tables are now stored in normal array order
rather than zigzag order.  Application code that calls jpeg_add_quant_table,
or otherwise manipulates quantization tables directly, will need to be
changed.  If you need to make such code work with either older or newer
versions of the library, a test like "#if JPEG_LIB_VERSION >= 61" is
recommended.

djpeg's trace capability now dumps DQT tables in natural order, not zigzag
order.  This allows the trace output to be made into a "-qtables" file
more easily.

New system-dependent memory manager module for use on Apple Macintosh.

Fix bug in cjpeg's -smooth option: last one or two scanlines would be
duplicates of the prior line unless the image height mod 16 was 1 or 2.

Repair minor problems in VMS, BCC, MC6 makefiles.

New configure script based on latest GNU Autoconf.

Correct the list of include files needed by MetroWerks C for ccommand().

Numerous small documentation updates.


Version 6  2-Aug-95
-------------------

Progressive JPEG support: library can read and write full progressive JPEG
files.  A "buffered image" mode supports incremental decoding for on-the-fly
display of progressive images.  Simply recompiling an existing IJG-v5-based
decoder with v6 should allow it to read progressive files, though of course
without any special progressive display.

New "jpegtran" application performs lossless transcoding between different
JPEG formats; primarily, it can be used to convert baseline to progressive
JPEG and vice versa.  In support of jpegtran, the library now allows lossless
reading and writing of JPEG files as DCT coefficient arrays.  This ability
may be of use in other applications.

Notes for programmers:
* We changed jpeg_start_decompress() to be able to suspend; this makes all
decoding modes available to suspending-input applications.  However,
existing applications that use suspending input will need to be changed
to check the return value from jpeg_start_decompress().  You don't need to
do anything if you don't use a suspending data source.
* We changed the interface to the virtual array routines: access_virt_array
routines now take a count of the number of rows to access this time.  The
last parameter to request_virt_array routines is now interpreted as the
maximum number of rows that may be accessed at once, but not necessarily
the height of every access.


Version 5b  15-Mar-95
---------------------

Correct bugs with grayscale images having v_samp_factor > 1.

jpeg_write_raw_data() now supports output suspension.

Correct bugs in "configure" script for case of compiling in
a directory other than the one containing the source files.

Repair bug in jquant1.c: sometimes didn't use as many colors as it could.

Borland C makefile and jconfig file work under either MS-DOS or OS/2.

Miscellaneous improvements to documentation.


Version 5a  7-Dec-94
--------------------

Changed color conversion roundoff behavior so that grayscale values are
represented exactly.  (This causes test image files to change.)

Make ordered dither use 16x16 instead of 4x4 pattern for a small quality
improvement.

New configure script based on latest GNU Autoconf.
Fix configure script to handle CFLAGS correctly.
Rename *.auto files to *.cfg, so that configure script still works if
file names have been truncated for DOS.

Fix bug in rdbmp.c: didn't allow for extra data between header and image.

Modify rdppm.c/wrppm.c to handle 2-byte raw PPM/PGM formats for 12-bit data.

Fix several bugs in rdrle.c.

NEED_SHORT_EXTERNAL_NAMES option was broken.

Revise jerror.h/jerror.c for more flexibility in message table.

Repair oversight in jmemname.c NO_MKTEMP case: file could be there
but unreadable.


Version 5  24-Sep-94
--------------------

Version 5 represents a nearly complete redesign and rewrite of the IJG
software.  Major user-visible changes include:
  * Automatic configuration simplifies installation for most Unix systems.
  * A range of speed vs. image quality tradeoffs are supported.
    This includes resizing of an image during decompression: scaling down
    by a factor of 1/2, 1/4, or 1/8 is handled very efficiently.
  * New programs rdjpgcom and wrjpgcom allow insertion and extraction
    of text comments in a JPEG file.

The application programmer's interface to the library has changed completely.
Notable improvements include:
  * We have eliminated the use of callback routines for handling the
    uncompressed image data.  The application now sees the library as a
    set of routines that it calls to read or write image data on a
    scanline-by-scanline basis.
  * The application image data is represented in a conventional interleaved-
    pixel format, rather than as a separate array for each color channel.
    This can save a copying step in many programs.
  * The handling of compressed data has been cleaned up: the application can
    supply routines to source or sink the compressed data.  It is possible to
    suspend processing on source/sink buffer overrun, although this is not
    supported in all operating modes.
  * All static state has been eliminated from the library, so that multiple
    instances of compression or decompression can be active concurrently.
  * JPEG abbreviated datastream formats are supported, ie, quantization and
    Huffman tables can be stored separately from the image data.
  * And not only that, but the documentation of the library has improved
    considerably!


The last widely used release before the version 5 rewrite was version 4A of
18-Feb-93.  Change logs before that point have been discarded, since they
are not of much interest after the rewrite.
