JPEG SYSTEM ARCHITECTURE 1-DEC-92
This file provides an overview of the "architecture" of the portable JPEG
software; that is, the functions of the various modules in the system and
the
interfaces between modules. For more precise details about any data
structure
or calling convention, see the header files.
Important note: when I say "module" I don't mean "a C function", which is
what
some people seem to think the term means. A separate C source file is
closer
to the mark. Also, it is frequently the case that several different
modules
present a common interface to callers; the term "object" or "method"
refers to
this common interface (see "Poor man's object-oriented programming",
below).
JPEG-specific terminology follows the JPEG standard:
A "component" means a color channel, e.g., Red or Luminance.
A "sample" is a pixel component value (i.e., one number in the image
data).
A "coefficient" is a frequency coefficient (a DCT transform output
number).
The term "block" refers to an 8x8 group of samples or coefficients.
"MCU" (minimum coded unit) is the same as "MDU" of the R8 draft; i.e.,
an
interleaved set of blocks of size determined by the sampling
factors,
or a single block in a noninterleaved scan.
*** System requirements ***
We must support compression and decompression of both Huffman and
arithmetic-coded JPEG files. Any set of compression parameters allowed by
the
JPEG spec should be readable for decompression. (We can be more
restrictive
about what formats we can generate.) (Note: for legal reasons no
arithmetic
coding implementation is currently included in the publicly available
sources.
However, the architecture still supports it.)
We need to be able to handle both raw JPEG files (more specifically, the
JFIF
format) and JPEG-in-TIFF (C-cubed's format, and perhaps Kodak's). Even if
we
don't implement TIFF ourselves, other people will want to use our code for
评论0