Advanced Image Coding, version 1.0
==================================

Advanced Image Coding is an experimental image compression codec based on a
combination of algorithms from the H.264 and JPEG standards.
Please see the web site http://www.bilsen.com/aic for more information, or
contact me at erik@bilsen.com.

Contents
--------

 - Software
 - Source code
 - Copyright
 - JPEG and JPEG-2000 libraries

Software
--------

With the Advanced Image Coding (AIC) front-end application AIC.exe you can do
the following:

 - Open and save files in the following formats:
   - Windows Bitmap (.bmp)
   - Portable PixMap (.ppm)
   - Portable GrayMap (.pgm)
   - JPEG (.jpg): see the section "JPEG and JPEG-2000 libraries" below
   - JPEG-2000 (.jp2): see the section "JPEG and JPEG-2000 libraries" below
   - Advanced Image Coding (.aic)
   When saving a file in a lossy format (JPEG, JPEG-2000 or AIC) you can choose
   a quality setting and view live results for this setting before saving the
   file.
 - Automatically test and compare the JPEG, JPEG-2000 and AIC codecs. This
   feature runs these codecs on a given image at all quality levels (or every
   second or every fourth quality level) and shows the results in a chart. The
   chart displays the Compression vs Quality trade-off and shows the objective
   image quality at several bit rates.

For more information, see http://www.bilsen.com/aic.

Source code
-----------

When you downloaded the source code, you can build the software yourself with
Borland Delphi version 7. See http://www.borland.com/delphi for more information 
about this great development tool.
Just open the file AIC.dpr in the Delphi IDE and build the application.

The source code is divided into the following directories and files:

 - AICLib: The AIC specific library files
   - Common: Common units shared by both encoder and decoder
     - AICCommon.pas: Common types and declarations used throughout the library.
     - AICBase.pas: Base class containing shared functionality for both the
       encoder and decoder, such as the block prediction.
     - AICCabac.pas: The base class for the Context Adaptive Binary Arithmetic
       enCoder and deCoder. Contains functionality shared by the encoder and
       decoder such as context management.
   - Encoder: Encoder-specific units
     - AICEncoder.pas: From TAICBase derived class for compressing a bitmap to
       an AIC file.
     - AICCabacEncoder.pas: From TAICCabac derived class for encoding prediction
       modes and DCT coefficients using the CABAC model.
     - AICFwdColorConversion.pas: RGB to YCbCr color conversion algorithm.
     - AICFwdDCT.pas: Forward Discrete Cosine Transform algorithm.
   - Decoder: Decoder-specific units
     - AICDecoder.pas: From TAICBase derived class for decompressing an AIC file
       to a bitmap.
     - AICCabacDecoder.pas: From TAICCabac derived class for decoding prediction
       modes and DCT coefficients using the CABAC model.
     - AICInvColorConversion.pas: YCbCr to RGB color conversion algorithm.
     - AICInvDCT.pas: Inverse Discrete Cosine Transform algorithm.
 - License: License files for JPEG, JPEG-2000 en JM (see Copyright section
   below).
 - FrontEnd: The Win32 Delphi Application AIC.exe for reading and writing image
   files in a variety of formats, and comparing image compression codecs.
   - Build: The directory to which the application is compiled
     - libjpeg.dll: DLL for reading and writing JPEG files (see section "JPEG
       and JPEG-2000 libraries" below).
     - libjasper.dll: DLL for reading and writing JPEG-2000 files (see section
       "JPEG and JPEG-2000 libraries" below).
     - lena.ppm: The famous Lena image in PPM format.
 - Utils: Some utility units used by the FrontEnd application.
   - EvBGraphics.pas: A TBitmap descendant that can read and write images in
     a variety of registered file formats. Also includes the
     TEvBBitmapFileFormat class that can be used as a base class for writing
     your own file format filters. The following units contain descendants
     from this class:
   - EvBFileFormatPNM.pas: A TEvBBitmapFileFormat descendant for reading and
     writing PGM and PPM files.
   - EvBFileFormatJPG.pas: A TEvBBitmapFileFormat descendant for reading and
     writing JPEG files. This class is a wrapper around the IJG JPEG library.
   - EvBFileFormatJP2.pas: A TEvBBitmapFileFormat descendant for reading and
     writing JPEG-2000 files. This class is a wrapper around the JasPer library.
   - EvBFileFormatAIC.pas: A TEvBBitmapFileFormat descendant for reading and
     writing AIC files. This class is a wrapper around the AIC library.
   - LibJPEG.pas: A partial DLL import unit for the IJG JPEG library, used by
     TEvBJPGFileFormat.
   - LibJasPer.pas: A partial DLL import unit for the JasPer library, used by
     TEvBJP2FileFormat.

Copyright
---------

The source code is copyright (C) 2004, Erik van Bilsen, except for the source
code that is based on existing source code from the JPEG reference software
and H.264 reference software:
 - The code based on the Independent JPEG Group's reference software is
   copyright (C) 1991-1998, Thomas G. Lane. See the file JPEG.txt in the
   License directory for complete license information.
   This applies to parts of the source files:
   - AICFwdColorConversion.pas
   - AICInvColorConversion.pas
   - AICFwdDCT.pas
   - AICInvDCT.pas
 - The code based on the H.264 reference software is copyright (C) 2001,
   International Telecommunications Union, Geneva. See the file JM.txt in the
   License directory for complete license information.
   This applies to parts of the source files:
   - AICBase.pas
   - AICCabac.pas
   - AICCabacDecoder.pas
   - AICCabacEncoder.pas

You may freely use all the AIC code on exactly the same terms as the
Independent JPEG group allows use of their code, with the exception of those
parts of the code that are based on the JPEG and H.264 reference software as
stated above. For those parts, you must comply with the terms in the JPEG.txt
and JM.txt files in the License directory too.
The following is based on the IJG README file:

In plain English:

1. I don't promise that this software works. (But if you find any bugs,
   please let me know!)
2. You can use this software for whatever you want. You don't have to pay me.
3. You may not pretend that you wrote this software. If you use it in a program,
   you must acknowledge somewhere in your documentation that you've used the
   AIC code.

In legalese:

The author 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.

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.txt 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 Advanced
Image Coding software by Erik van Bilsen".
(3) Permission for use of this software is granted only if the user accepts
full responsibility for any undesirable consequences; the author accepts
NO LIABILITY for damages of any kind.

JPEG and JPEG-2000 libraries
----------------------------

The front-end application (AIC.exe) uses the IJG JPEG library and the JasPer
JPEG-2000 library for reading and writing files in JPEG and JPEG-2000 format:

 - The JPEG library is provided in the libjpeg.dll file. This DLL is build
   from the Independent JPEG Group's JPEG source code version 6b. You can
   download the library from their web site http://www.ijg.org.
   See the file JPEG.txt in the License directory for information and legal
   issues concerning this library.
 - The JasPer library is provided in the libjasper.dll file. Thid DLL is build
   from the JasPer JPEG-2000 source code version 1.701. You can download the
   source code from the JasPer Project page:
   http://www.ece.uvic.ca/~mdadams/jasper/.
   See the file JasPer.txt in the License directory for license information
   concerning this library.
