Advanced usage instructions for the Independent JPEG Group's JPEG software
==========================================================================

This file describes cjpeg's "switches for wizards".

The "wizard" switches are intended for experimentation with JPEG by persons
who are reasonably knowledgeable about the JPEG standard.  If you don't know
what you are doing, DON'T USE THESE SWITCHES.  You'll likely produce files
with worse image quality and/or poorer compression than you'd get from the
default settings.  Furthermore, these switches must be used with caution
when making files intended for general use, because not all JPEG decoders
will support unusual JPEG parameter settings.


Quantization Table Adjustment
-----------------------------

Ordinarily, cjpeg starts with a default set of tables (the same ones given
as examples in the JPEG standard) and scales them up or down according to
the -quality setting.  The details of the scaling algorithm can be found in
jcparam.c.  At very low quality settings, some quantization table entries
can get scaled up to values exceeding 255.  Although 2-byte quantization
values are supported by the IJG software, this feature is not in baseline
JPEG and is not supported by all implementations.  If you need to ensure
wide compatibility of low-quality files, you can constrain the scaled
quantization values to no more than 255 by giving the -baseline switch.
Note that use of -baseline will result in poorer quality for the same file
size, since more bits than necessary are expended on higher AC coefficients.

You can substitute a different set of quantization values by using the
-qtables switch:

	-qtables file	Use the quantization tables given in the named file.

The specified file should be a text file containing decimal quantization
values.  The file should contain one to four tables, each of 64 elements.
The tables are implicitly numbered 0,1,etc. in order of appearance.  Table
entries appear in normal array order (NOT in the zigzag order in which they
will be stored in the JPEG file).

Quantization table files are free format, in that arbitrary whitespace can
appear between numbers.  Also, comments can be included: a comment starts
with '#' and extends to the end of the line.  Here is an example file that
duplicates the default quantization tables:

	# Quantization tables given in JPEG spec, section K.1

	# This is table 0 (the luminance table):
	  16  11  10  16  24  40  51  61
	  12  12  14  19  26  58  60  55
	  14  13  16  24  40  57  69  56
	  14  17  22  29  51  87  80  62
	  18  22  37  56  68 109 103  77
	  24  35  55  64  81 104 113  92
	  49  64  78  87 103 121 120 101
	  72  92  95  98 112 100 103  99

	# This is table 1 (the chrominance table):
	  17  18  24  47  99  99  99  99
	  18  21  26  66  99  99  99  99
	  24  26  56  99  99  99  99  99
	  47  66  99  99  99  99  99  99
	  99  99  99  99  99  99  99  99
	  99  99  99  99  99  99  99  99
	  99  99  99  99  99  99  99  99
	  99  99  99  99  99  99  99  99

If the -qtables switch is used without -quality, then the specified tables
are used exactly as-is.  If both -qtables and -quality are used, then the
tables taken from the file are scaled in the same fashion that the default
tables would be scaled for that quality setting.  If -baseline appears, then
the quantization values are constrained to the range 1-255.

By default, cjpeg will use quantization table 0 for luminance components and
table 1 for chrominance components.  To override this choice, use the -qslots
switch:

	-qslots N[,...]		Select which quantization table to use for
				each color component.

The -qslots switch specifies a quantization table number for each color
component, in the order in which the components appear in the JPEG SOF marker.
For example, to create a separate table for each of Y,Cb,Cr, you could
provide a -qtables file that defines three quantization tables and say
"-qslots 0,1,2".  If -qslots gives fewer table numbers than there are color
components, then the last table number is repeated as necessary.


Sampling Factor Adjustment
--------------------------

By default, cjpeg uses 2:1 horizontal and vertical downsampling when
compressing YCbCr data, and no downsampling for all other color spaces.
You can override this default with the -sample switch:

	-sample HxV[,...]	Set JPEG sampling factors for each color
				component.

The -sample switch specifies the JPEG sampling factors for each color
component, in the order in which they appear in the JPEG SOF marker.
If you specify fewer HxV pairs than there are components, the remaining
components are set to 1x1 sampling.  For example, the default YCbCr setting
is equivalent to "-sample 2x2,1x1,1x1", which can be abbreviated to
"-sample 2x2".

There are still some JPEG decoders in existence that support only 2x1
sampling (also called 4:2:2 sampling).  Compatibility with such decoders can
be achieved by specifying "-sample 2x1".  This is not recommended unless
really necessary, since it increases file size and encoding/decoding time
with very little quality gain.


Multiple Scan / Progression Control
-----------------------------------

By default, cjpeg emits a single-scan sequential JPEG file.  The
-progressive switch generates a progressive JPEG file using a default series
of progression parameters.  You can create multiple-scan sequential or lossless
JPEG files or progressive JPEG files with custom progression parameters by
using the -scans switch:

	-scans file	Use the scan sequence given in the named file.

The specified file should be a text file containing a "scan script".
The script specifies the contents and ordering of the scans to be emitted.
Each entry in the script defines one scan.  A scan definition specifies
the components to be included in the scan, and for progressive and lossless
JPEG it also specifies the progression/lossless parameters Ss,Se,Ah,Al for the
scan.  Scan definitions are separated by semicolons (';').  A semicolon after
the last scan definition is optional.

Each scan definition contains one to four component indexes, optionally
followed by a colon (':') and the four progressive/lossless-JPEG parameters.
The component indexes denote which color component(s) are to be transmitted in
the scan.  Components are numbered in the order in which they appear in the
JPEG SOF marker, with the first component being numbered 0.  (Note that these
indexes are not the "component ID" codes assigned to the components, just
positional indexes.)

The progression parameters for each scan are:
	Ss	Zigzag index of first coefficient included in scan
	Se	Zigzag index of last coefficient included in scan
	Ah	Zero for first scan of a coefficient, else Al of prior scan
	Al	Successive approximation low bit position for scan

The lossless parameters for each scan are:
	Ss	Predictor selection value
	Se	Must be zero
	Ah	Must be zero
	Al	Point transform value

If the progression/lossless parameters are omitted, the values 0,63,0,0 are
used, producing a sequential JPEG file.  cjpeg automatically determines whether
the script represents a progressive or sequential file, by observing whether
Ss and Se values other than 0 and 63 appear.  cjpeg also automatically
determines whether the script represents a lossless file, by observing whether
Ss (the predictor selection value) is non-zero and Se is zero, which are
illegal values for progressive and sequential files.  (The -progressive and
-lossless switches are not needed to specify this; in fact, they are ignored
when -scans appears.)  The scan script must meet the JPEG restrictions on
progression sequences.  (cjpeg checks that the spec's requirements are obeyed.)

Scan script files are free format, in that arbitrary whitespace can appear
between numbers and around punctuation.  Also, comments can be included: a
comment starts with '#' and extends to the end of the line.  For additional
legibility, commas or dashes can be placed between values.  (Actually, any
single punctuation character other than ':' or ';' can be inserted.)  For
example, the following two scan definitions are equivalent:
	0 1 2: 0 63 0 0;
	0,1,2 : 0-63, 0,0 ;

Here is an example of a scan script that generates a partially interleaved
sequential JPEG file:

	0;			# Y only in first scan
	1 2;			# Cb and Cr in second scan

Here is an example of a progressive scan script using only spectral selection
(no successive approximation):

	# Interleaved DC scan for Y,Cb,Cr:
	0,1,2: 0-0,   0, 0 ;
	# AC scans:
	0:     1-2,   0, 0 ;	# First two Y AC coefficients
	0:     3-5,   0, 0 ;	# Three more
	1:     1-63,  0, 0 ;	# All AC coefficients for Cb
	2:     1-63,  0, 0 ;	# All AC coefficients for Cr
	0:     6-9,   0, 0 ;	# More Y coefficients
	0:     10-63, 0, 0 ;	# Remaining Y coefficients

Here is an example of a successive-approximation script.  This is equivalent
to the default script used by "cjpeg -progressive" for YCbCr images:

	# Initial DC scan for Y,Cb,Cr (lowest bit not sent)
	0,1,2: 0-0,   0, 1 ;
	# First AC scan: send first 5 Y AC coefficients, minus 2 lowest bits:
	0:     1-5,   0, 2 ;
	# Send all Cr,Cb AC coefficients, minus lowest bit:
	# (chroma data is usually too small to be worth subdividing further;
	#  but note we send Cr first since eye is least sensitive to Cb)
	2:     1-63,  0, 1 ;
	1:     1-63,  0, 1 ;
	# Send remaining Y AC coefficients, minus 2 lowest bits:
	0:     6-63,  0, 2 ;
	# Send next-to-lowest bit of all Y AC coefficients:
	0:     1-63,  2, 1 ;
	# At this point we've sent all but the lowest bit of all coefficients.
	# Send lowest bit of DC coefficients
	0,1,2: 0-0,   1, 0 ;
	# Send lowest bit of AC coefficients
	2:     1-63,  1, 0 ;
	1:     1-63,  1, 0 ;
	# Y AC lowest bit scan is last; it's usually the largest scan
	0:     1-63,  1, 0 ;

It may be worth pointing out that this script is tuned for quality settings
of around 50 to 75.  For lower quality settings, you'd probably want to use
a script with fewer stages of successive approximation (otherwise the
initial scans will be really bad).  For higher quality settings, you might
want to use more stages of successive approximation (so that the initial
scans are not too large).
