The Independent JPEG Group's JPEG software
==========================================

README for release 4 of 10-Dec-92
=================================

This distribution contains the fourth public release of the Independent JPEG
Group's free JPEG software.  You are welcome to redistribute this software and
to use it for any purpose, subject to the conditions under LEGAL ISSUES, below.

For installation instructions, see file SETUP.

For usage instructions, see file USAGE (or the cjpeg.1 and djpeg.1 manual
pages; but USAGE contains a "hints" section not found in the manual pages).
Useful information can also be found in the JPEG FAQ (Frequently Asked
Questions) article; see ARCHIVE LOCATIONS below to obtain the FAQ article.

This software is still undergoing revision.  Updated versions may be obtained
by FTP or UUCP to UUNET and other archive sites; see ARCHIVE LOCATIONS below
for details.

Serious users of this software (particularly those incorporating it into
larger programs) should contact jpeg-info@uunet.uu.net to be added to our
electronic mailing list.  Mailing list members are notified of updates and
have a chance to participate in technical discussions, etc.

This software is the work of Tom Lane, Philip Gladstone, Luis Ortiz,
Lee Crocker, Ge' Weijers, and other members of the Independent JPEG Group.


DISCLAIMER
==========

THIS SOFTWARE IS NOT COMPLETE NOR FULLY DEBUGGED.  It is not guaranteed to be
useful for anything, nor to be compatible with subsequent releases, nor to be
an accurate implementation of the JPEG standard.  (See LEGAL ISSUES for even
more disclaimers.)

Despite that, we believe that this software is pretty good, and if you find
any problems with it, we'd like to know about them.  Please report problems
by e-mail to jpeg-info@uunet.uu.net.


WHAT'S HERE
===========

This distribution contains C software to implement JPEG image compression and
decompression.  JPEG (pronounced "jay-peg") is a standardized compression
method for full-color and gray-scale images.  JPEG is intended for compressing
"real-world" scenes; cartoons and other non-realistic images are not its
strong suit.  JPEG is lossy, meaning that the output image is not necessarily
identical to the input image.  Hence you must not use JPEG if you have to have
identical output bits.  However, on typical images of real-world scenes, very
good compression levels can be obtained with no visible change, and amazingly
high compression levels are possible if you can tolerate a low-quality image.
For more details, see the references, or just experiment with various
compression settings.

The software implements JPEG baseline and extended-sequential compression
processes.  Provision is made for supporting all variants of these processes,
although some uncommon parameter settings aren't implemented yet.  For legal
reasons, we are not distributing code for the arithmetic-coding process; see
LEGAL ISSUES.  At present we have made no provision for supporting the
progressive, hierarchical, or lossless processes defined in the standard.

In order to support file conversion and viewing software, we have included
considerable functionality beyond the bare JPEG coding/decoding capability;
for example, the color quantization modules are not strictly part of JPEG
decoding, but they are essential for output to colormapped file formats or
colormapped displays.  These extra functions can be compiled out if not
required for a particular application.

The emphasis in designing this software has been on achieving portability and
flexibility, while also making it fast enough to be useful.  In particular,
the software is not intended to be read as a tutorial on JPEG.  (See the
REFERENCES section for introductory material.)  While we hope that the entire
package will someday be industrial-strength code, much remains to be done in
performance tuning and in improving the capabilities of individual modules.


This software can be used on several levels:

* As canned software for JPEG compression and decompression.  Just edit the
  Makefile and configuration files as needed (see file SETUP), compile and go.
  Members of the Independent JPEG Group will improve the out-of-the-box
  functionality and speed as time goes on.

* As the basis for other JPEG programs.  For example, you could incorporate
  the decompressor into a general image viewing package by replacing the
  output module with write-to-screen functions.  For an implementation on
  specific hardware, you might want to replace some of the inner loops with
  assembly code.  For a non-command-line-driven system, you might want a
  different user interface.  (Members of the group will be producing Macintosh
  and Amiga versions with more appropriate user interfaces, for example.)

* As a toolkit for experimentation with JPEG and JPEG-like algorithms.  Most
  of the individual decisions you might want to mess with are packaged up into
  separate modules.  For example, the details of color-space conversion and
  subsampling techniques are each localized in one compressor and one
  decompressor module.  You'd probably also want to extend the user interface
  to give you more detailed control over the JPEG compression parameters.

In particular, we welcome the use of this software as a component of commercial
products; no royalty is required.


ARCHIVE LOCATIONS
=================

The "official" archive site for this software is ftp.uu.net (Internet
address 137.39.1.9 or 192.48.96.9).  The most recent released version can
always be found there in directory graphics/jpeg.  This particular version
will be archived as jpegsrc.v4.tar.Z.  If you are on the Internet, you can
retrieve files from UUNET by anonymous FTP.  If you don't have FTP access,
UUNET's archives are also available via UUCP; contact postmaster@uunet.uu.net
for information on retrieving files that way.

Numerous Internet sites maintain copies of the UUNET files; in particular,
you can probably find a copy at any site that archives comp.sources.misc
submissions.  However, only ftp.uu.net is guaranteed to have the latest
official version.

You can also obtain this software from CompuServe, in the GRAPHSUPPORT forum
(GO PICS), library 15; this version will be file jpsrc4.zip.  Again,
CompuServe is not guaranteed to have the very latest version.

The JPEG FAQ (Frequently Asked Questions) article is a useful source of
general information about JPEG.  It is updated constantly and therefore
is not included in this distribution.  The FAQ is posted every two weeks
to Usenet newsgroups comp.graphics, news.answers, and other groups.  You
can always obtain the latest version from the news.answers archive at
rtfm.mit.edu (18.172.1.27).  By FTP, fetch /pub/usenet/news.answers/jpeg-faq.
If you don't have FTP, send e-mail to mail-server@rtfm.mit.edu with body
"send usenet/news.answers/jpeg-faq".


SUPPORTING SOFTWARE
===================

You will probably want Jef Poskanzer's PBMPLUS image software, which provides
many useful operations on PPM-format image files.  In particular, it can
convert PPM images to and from a wide range of other formats.  You can FTP
this free software from export.lcs.mit.edu (contrib/pbmplus*.tar.Z) or
ftp.ee.lbl.gov (pbmplus*.tar.Z).  Unfortunately PBMPLUS is not nearly as
portable as the JPEG software is; you are likely to have difficulty making it
work on any non-Unix machine.

If you are using X Windows you might want to use the xv or xloadimage viewers
to save yourself the trouble of converting PPM to some other format.  Both of
these can be found in the contrib directory at export.lcs.mit.edu.  Actually,
xv version 2.00 and up incorporates our software and thus can read and write
JPEG files directly.  (NOTE: since xv internally reduces all images to 8
bits/pixel, a JPEG file written by xv will not be very high quality; and xv
cannot fully exploit a 24-bit display.  These problems are expected to go away
in the next xv release, planned for early 1993.  In the meantime, use
xloadimage for 24-bit displays.)

For DOS machines, Lee Crocker's free Piclab program is a useful companion to
the JPEG software.  The latest version, currently 1.91, is available by FTP
from SIMTEL20 and its various mirror sites, file <msdos.graphics>piclb191.zip.
CompuServe also has it, in the same library as the JPEG software.


SOFTWARE THAT'S NO HELP AT ALL
==============================

Handmade Software's shareware PC program GIF2JPG produces files that are
totally incompatible with our programs.  They use a proprietary format that is
an amalgam of GIF and JPEG representations.  However, you can force GIF2JPG
to produce compatible files with its -j switch, and their decompression
program JPG2GIF can read our files (at least ones produced with our default
option settings).

Some commercial JPEG implementations are also incompatible as of this writing,
especially programs released before summer 1991.  The root of the problem is
that the ISO JPEG committee failed to specify a concrete file format.  Some
vendors "filled in the blanks" on their own, creating proprietary formats that
no one else could read.  (For example, none of the early commercial JPEG
implementations for the Macintosh were able to exchange compressed files.)

The file format we have adopted is called JFIF (see REFERENCES).  This format
has been agreed to by a number of major commercial JPEG vendors, and we expect
that it will become the de facto standard.  JFIF is a minimal representation;
work is also going forward to incorporate JPEG compression into the TIFF 6.0
standard, for use in "high end" applications that need to record a lot of
additional data about an image.  We intend to support TIFF 6.0 in the future.
We hope that these two formats will be sufficient and that other, incompatible
JPEG file formats will not proliferate.

Indeed, part of the reason for developing and releasing this free software is
to help force rapid convergence to de facto standards for JPEG file formats.
SUPPORT STANDARD, NON-PROPRIETARY FORMATS: demand JFIF or TIFF 6.0!


USING JPEG AS A SUBROUTINE IN A LARGER PROGRAM
==============================================

You can readily incorporate the JPEG compression and decompression routines in
a larger program.  The file example.c provides a skeleton of the interface
routines you'll need for this purpose.  Essentially, you replace jcmain.c (for
compression) and/or jdmain.c (for decompression) with your own code.  Note
that the fewer JPEG options you allow the user to twiddle, the less code you
need; all the default options are set up automatically.  (Alternately, if you
know a lot about JPEG or have a special application, you may want to twiddle
the default options even more extensively than jcmain/jdmain do.)

Most likely, you will want the uncompressed image to come from memory (for
compression) or go to memory or the screen (for decompression).  For this
purpose you must provide image reading or writing routines that match the
interface used by the image file I/O modules (jrdXXX or jwrXXX); again,
example.c shows a skeleton of what is required.  In this situation, you
won't need any of the non-JPEG image file I/O modules used by cjpeg and djpeg.

By default, any error detected inside the JPEG routines will cause a message
to be printed on stderr, followed by exit().  You can override this behavior
by supplying your own message-printing and/or error-exit routines; again,
example.c shows how.

We recommend you create libjpeg.a as shown in the Makefile, then link that
with your surrounding program.  (If your linker is at all reasonable, only the
code you actually need will get loaded.)  Include the files jconfig.h and
jpegdata.h in C files that need to call the JPEG routines.

CAUTION: some people have tried to compile JPEG and their surrounding code
with different compilers, e.g., cc for JPEG and c++ or gcc for the rest.  This
is a Real Bad Move and you will deserve what happens to you if you try it.
(Hint: the parameter structures can get laid out differently with no warning.)

Read our "architecture" file for more info.  If it seems to you that the
software structure doesn't accommodate what you want to do, please contact
the authors.

Beginning with version 3, we will endeavor to hold the interface described by
example.c constant, so that you can plug in updated versions of the JPEG code
just by recompiling.  However, we can't guarantee this, especially if you
choose to twiddle any JPEG options not listed in example.c.  Check the
CHANGELOG when installing any new version, and compare example.c against the
prior version.  Recompile your calling software (don't just relink), as we may
add or subtract fields in the parameter structures.


REFERENCES
==========

We highly recommend reading one or more of these references before trying to
understand the innards of any JPEG software.

The best short technical introduction to the JPEG compression algorithm is
	Wallace, Gregory K.  "The JPEG Still Picture Compression Standard",
	Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44.
(Adjacent articles in that issue discuss MPEG motion picture compression,
applications of JPEG, and related topics.)  If you don't have the CACM issue
handy, a PostScript file containing a revised version of the article is
available at ftp.uu.net, graphics/jpeg/wallace.ps.Z.  The file (actually a
preprint for an article to appear in IEEE Trans. Consumer Electronics) omits
the sample images that appeared in CACM, but it includes corrections and some
added material.  Note: the Wallace article is copyright ACM and IEEE, and it
may not be used for commercial purposes.

A somewhat less technical, more leisurely introduction to JPEG can be found in
"The Data Compression Book" by Mark Nelson, published by M&T Books (Redwood
City, CA), 1991, ISBN 1-55851-216-0.  This book provides good explanations and
example C code for a multitude of compression methods including JPEG.  It is
an excellent source if you are comfortable reading C code but don't know much
about data compression in general.  The book's JPEG sample code is far from
industrial-strength, but when you are ready to look at a full implementation,
you've got one here...

A new textbook about JPEG is "JPEG Still Image Data Compression Standard" by
William B. Pennebaker and Joan L. Mitchell, published by Van Nostrand
Reinhold, 1993, ISBN 0-442-01272-1.  Price US$59.95.  This book includes the
complete text of the ISO JPEG standards (DIS 10918-1 and draft DIS 10918-2).
This is by far the most complete exposition of JPEG in existence, and I highly
recommend it.  If you read the entire book, you will probably know more about
JPEG than I do.

The JPEG standard itself is not available electronically; you must order a
paper copy through ISO.  (Unless you are concerned about having a certified
official copy, I recommend buying the Pennebaker and Mitchell book instead;
it's much cheaper and includes a great deal of useful explanatory material.)
In the US, copies of the standard may be ordered from ANSI Sales at (212)
642-4900.  It's not cheap: as of 1992, Part 1 is $95 and Part 2 is $47, plus
7% shipping/handling.  The standard is divided into two parts, Part 1 being
the actual specification, while Part 2 covers compliance testing methods.
As of early 1992, Part 1 has Draft International Standard status.  It is
titled "Digital Compression and Coding of Continuous-tone Still Images, Part
1: Requirements and guidelines" and has document number ISO/IEC DIS 10918-1.
Part 2 is still at Committee Draft status.  It is titled "Digital Compression
and Coding of Continuous-tone Still Images, Part 2: Compliance testing" and
has document number ISO/IEC CD 10918-2.  (NOTE: I'm told that the final
version of Part 2 will differ considerably from the CD draft.)

The JPEG standard does not specify all details of an interchangeable file
format.  For the omitted details we follow the "JFIF" conventions, revision
1.02.  A copy of the JFIF spec is available from:
	Literature Department
	C-Cube Microsystems, Inc.
	399A West Trimble Road
	San Jose, CA  95131
	(408) 944-6300
A PostScript version of this document is available at ftp.uu.net, file
graphics/jpeg/jfif.ps.Z.  It can also be obtained by e-mail from the C-Cube
mail server, netlib@c3.pla.ca.us.  Send the message "send jfif_ps from jpeg"
to the server to obtain the JFIF document; send the message "help" if you have
trouble.

The TIFF 6.0 file format specification can be obtained by FTP from sgi.com
(192.48.153.1), file graphics/tiff/TIFF6.ps.Z; or you can order a printed copy
from Aldus Corp. at (206) 628-6593.  It should be noted that the TIFF 6.0 spec
of 3-June-92 has a number of serious problems in its JPEG features.  A
clarification note will probably be needed to ensure that TIFF JPEG files are
compatible across different implementations.  The IJG does not intend to
support TIFF 6.0 until these problems are resolved.

If you want to understand this implementation, start by reading the
"architecture" documentation file.  Please read "codingrules" if you want to
contribute any code.


LEGAL ISSUES
============

The authors make NO WARRANTY or representation, either express or implied,
with respect to this software, its quality, accuracy, merchantability, or
fitness for a particular purpose.  This software is provided "AS IS", and you,
its user, assume the entire risk as to its quality and accuracy.

This software is copyright (C) 1991, 1992, Thomas G. Lane.
All Rights Reserved except as specified below.

Permission is hereby granted to use, copy, modify, and distribute this
software (or portions thereof) for any purpose, without fee, subject to these
conditions:
(1) If any part of the source code for this software is distributed, then this
README file must be included, with this copyright and no-warranty notice
unaltered; and any additions, deletions, or changes to the original files
must be clearly indicated in accompanying documentation.
(2) If only executable code is distributed, then the accompanying
documentation must state that "this software is based in part on the work of
the Independent JPEG Group".
(3) Permission for use of this software is granted only if the user accepts
full responsibility for any undesirable consequences; the authors accept
NO LIABILITY for damages of any kind.

Permission is NOT granted for the use of any IJG author's name or company name
in advertising or publicity relating to this software or products derived from
it.  This software may be referred to only as "the Independent JPEG Group's
software".

We specifically permit and encourage the use of this software as the basis of
commercial products, provided that all warranty or liability claims are
assumed by the product vendor.


ansi2knr.c is included in this distribution by permission of L. Peter Deutsch,
sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA.
ansi2knr.c is NOT covered by the above copyright and conditions, but instead
by the usual distribution terms of the Free Software Foundation; principally,
that you must include source code if you redistribute it.  (See the file
ansi2knr.c for full details.)  However, since ansi2knr.c is not needed as part
of any program generated from the JPEG code, this does not limit you more than
the foregoing paragraphs do.


It appears that the arithmetic coding option of the JPEG spec is covered by
patents owned by IBM and AT&T, as well as a pending Japanese patent of
Mitsubishi.  Hence arithmetic coding cannot legally be used without obtaining
one or more licenses.  For this reason, support for arithmetic coding has been
removed from the free JPEG software.  (Since arithmetic coding provides only a
marginal gain over the unpatented Huffman mode, it is unlikely that very many
implementors will support it.  If you do obtain the necessary licenses,
contact jpeg-info@uunet.uu.net for a copy of our arithmetic coding modules.)
So far as we are aware, there are no patent restrictions on the remaining
code.


We are required to state that
    "The Graphics Interchange Format(c) is the Copyright property of
    CompuServe Incorporated.  GIF(sm) is a Service Mark property of
    CompuServe Incorporated."


TO DO
=====

The next major release will probably be a significant rewrite to allow use of
this code in conjunction with Sam Leffler's free TIFF library (assuming the
bugs in the TIFF 6.0 specification get resolved).

Many of the modules need fleshing out to provide more complete
implementations, or to provide faster paths for common cases.
Speeding things up is still high on our priority list.

We'd appreciate it if people would compile and check out the code on as wide a
variety of systems as possible, and report any portability problems
encountered (with solutions, if possible).  Checks of file compatibility with
other JPEG implementations would also be of interest.  Finally, we would
appreciate code profiles showing where the most time is spent, especially on
unusual systems.

Please send bug reports, offers of help, etc. to jpeg-info@uunet.uu.net.
