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

README for release 3 of  17-Mar-92
==================================

This distribution contains the third official 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).

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.

If you intend to become a serious user of this software, please contact
jpeg-info@uunet.uu.net to be added to our electronic mailing list.  Then
you'll be notified of updates and have a chance to participate in 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.)

Please report any problems with this software 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
"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 should 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 can be obtained 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.

The present software is not far beyond the prototype stage.  It does not
support all possible variants of the JPEG standard, and some functions have
rather slow and/or crude implementations.  However, it is useful already.

The emphasis in designing this software has been on achieving portability and
flexibility, while also making it fast enough to be useful.  We have not yet
undertaken serious performance measurement or tuning; we intend to do so in
the future.


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.v3.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.

Various other Internet sites maintain copies of the UUNET file, which may or
may not be up-to-date.  In Europe, try nic.funet.fi (128.214.6.100; look in
directory pub/graphics/programs/jpeg).

You can also obtain this software from CompuServe, in the GRAPHSUPPORT forum
(GO PICS), library 10; this version will be file jpsrc3.zip.

If you are not reasonably handy at configuring and installing portable C
programs, you may have some difficulty installing this package.  You may
prefer to obtain a pre-built executable version.  A collection of pre-built
executables for various machines is currently available for anonymous FTP at
procyon.cis.ksu.edu (129.130.10.80 --- this number is due to change soon);
look under /pub/JPEG.  The administrators of this system ask that FTP traffic
be limited to non-prime hours.  For more information on this archive, please
contact Steve Davis (strat@cis.ksu.edu).  This collection is not maintained by
the Independent JPEG Group, and programs in it may not be the latest version.


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; you may
also prefer xloadimage for viewing if you have a 24-bit display.  Caveat user.)

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).

Unfortunately, many 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
standard, for use in "high end" applications that need to record a lot of
additional data about an image.  We intend to support JPEG-in-TIFF 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 JPEG-in-TIFF!


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.

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.

Mechanics: 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
==========

The best and most readily available introduction to the JPEG compression
algorithm is Wallace's article in the April '91 CACM:
	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.)  We highly recommend reading that
article before trying to understand the innards of any JPEG software.
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.

For more detail about the JPEG standard you pretty much have to go to the
draft standard (which is not nearly as intelligible as Wallace's article).
The standard is not now available electronically; you must order a paper copy
through ISO.  In the US, copies may be ordered from ANSI Sales at (212)
642-4900.  The standard is divided into two parts: Part 1 is the actual
specification, and Part 2 covers compliance testing methods.  The current
"committee draft" version of Part 1 is titled "Digital Compression and Coding
of Continuous-tone Still Images, Part 1: Requirements and guidelines" and has
document number ISO/IEC CD 10918-1.  (The alternate number SC2 N2215 should
also be mentioned when ordering.)  This draft is expected to be superseded by
the Draft International Standard version around the end of November 1991.
Ordering info will be the same as above, but replace "CD" with "DIS" in the
document number (alternate number not yet known).  The committee draft of
Part 2 is expected to be available around the end of December 1991.  It will
be titled "Digital Compression and Coding of Continuous-tone Still Images,
Part 2: Compliance testing" and will have document number ISO/IEC CD 10918-2
(alternate number not yet known).

The JPEG standard does not specify all details of an interchangeable file
format.  For the omitted details we follow the "JFIF" conventions, revision
1.01.  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
The same source can supply copies of the draft JPEG-in-TIFF documents
(Appendixes O and P to the TIFF spec).  PostScript versions of these
documents 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 obtain the
JFIF document; "send app_o_ps from jpeg" and "send app_p_ps from jpeg" will
produce the TIFF documents.  Send the message "help" if you have trouble.

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 author's name or author's 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 product 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
people will choose to use 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
=====

Many of the modules need fleshing out to provide more complete
implementations, or to provide faster paths for common cases.
Improving the speed will be the next big work item for the JPEG group.

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.
