TIFF CHANGE INFORMATION
This document describes the changes made to the software between the
previous and current versions (see above).
If you don't find something listed here, then it was not done in this
timeframe, or it was not considered important enough to be mentioned.
The following information is located here:
MAJOR CHANGES:
- New utility raw2tiff
for converting raw rasters into TIFF files.
- Lots of new tiff2ps options.
- Lots of bug fixes for LZW, JPEG and OJPEG compression.
Custom Tag Support
The approach to extending libtiff with custom tags has changed radically.
Previously, all internally supported TIFF tags had a place in the
private TIFFDirectory structure within libtiff to hold the values (if read),
and a "field number" (ie. FIELD_SUBFILETYPE) used to identify that tag.
However, every time a new tag was added to the core, the size of the
TIFFDirectory structure would changing, breaking any dynamically linked
software that used the private data structures.
Also, any tag not recognised
by libtiff would not be read and accessable to applications without some
fairly complicated work on the applications part to pre-register the tags
as exemplified by the support for "Geo"TIFF tags by libgeotiff layered on
libtiff.
Amoung other things this approach required the extension code
to access the private libtiff structures ... which made the higher level
non-libtiff code be locked into a specific version of libtiff at compile time.
This caused no end of bug reports!
The new approach is for libtiff to read all tags from TIFF files. Those that
aren't recognised as "core tags" (those having an associated FIELD_ value,
and place for storage in the TIFFDirectory structure) are now read into a
dynamic list of extra tags (td_customValues in TIFFDirectory). When a new
tag code is encountered for the first time in a given TIFF file, a new
anonymous tag definition is created for the tag in the tag definition list.
The type, and some other metadata is worked out from the instance encountered.
These fields are known as "custom tags".
Custom tags can be set and fetched normally using TIFFSetField() and
TIFFGetField(), and appear pretty much like normal tags to application code.
However, they have no impact on internal libtiff processing (such as
compression). Some utilities, such as tiffcp will now copy these custom
tags to the new output files.
As well as the internal work with custom tags, new C API entry points
were added so that extension libraries, such as libgeotiff, could
define new tags more easily without accessing internal data structures.
Because tag handling of extension tags is done via the "custom fields"
mechanism as well, the definition provided externally mostly serves to provide
a meaningful name for the tag.
The addition of "custom tags" and the altered approach to extending libtiff
with externally defined tags is the primary reason for the shift to the
3.6.x version number from 3.5.x.
CHANGES IN THE SOFTWARE CONFIGURATION:
- configure: Set -DPIXARLOG_SUPPORT option along with -DZIP_SUPPORT.
- html/Makefile.in: Updated to use groffhtml for generating html pages
from man pages.
- configure, libtiff/Makefile.in: Added SCO OpenServer 5.0.6 support
from John H. DuBois III.
- libtiff/{Makefile.vc, libtiff.def}: Missed declarations added.
- libtiff/Makefile.in, tools/Makefile.in: Shared library will not
be stripped when installing, utility binaries will do be stripped. As per bug
93.
- man/Makefile.in: Patch DESTDIR handling as per bug 95.
- configure: OpenBSD changes for Sparc64 and DSO version as per bug 96.
- config.site/configure: added support for OJPEG=yes option to enable
OJPEG support from config.site.
- config.guess, config.sub: Updated from ftp.gnu.org/pub/config.
- configure: Modify CheckForBigEndian so it can work in a cross
compiled situation.
- configure, libtiff/Makefile.in: Changes for building on MacOS 10.1
as per bug 94.
- html/Makefile.in: added missing images per bug 92.
- port/Makefile.in: fixed clean target per bug 92.
CHANGES IN LIBTIFF:
- html/man/*.html: Web pages regenerated from man pages.
- libtiff/tif_jpeg.c: Hack to ensure that "boolean" is defined properly
on Windows so as to avoid the structure size mismatch error from libjpeg
(bug 188).
- libtiff/tiff.h: #ifdef USING_VISUALAGE around previous Visual Age
AIX porting hack as it screwed up gcc. (bug 39)
- libtiff/tiff.h: added COMPRESSION_JP2000 (34712) for LEAD tools
custom compression.
- libtiff/tif_dirread.c: Another fix for the fetching SBYTE arrays
by the TIFFFetchByteArray() function. (bug 52)
- libtiff/tif_dirread.c: Expand v[2] to v[4] in TIFFFetchShortPair()
as per bug 196.
- libtiff/tif_lzw.c: Additional consistency checking added in
LZWDecode() and LZWDecodeCompat() fixing bugs 190 and 100.
- libtiff/tif_lzw.c:
Added check for valid code lengths in LZWDecode() and
LZWDecodeCompat(). Fixes bug 115.
- tif_getimage.c: Ensure that TIFFRGBAImageBegin() returns the
return code from the underlying pick function as per bug 177.
- libtiff/{tif_jpeg.c,tif_strip.c,tif_print.c}: Hacked tif_jpeg.c to
fetch TIFFTAG_YCBCRSUBSAMPLING from the jpeg data stream if it isn't
present in the tiff tags as per bug 168.
- libtiff/tif_jpeg.c: Fixed problem with setting of nrows in
JPEGDecode() as per bug 129.
- libtiff/tif_read.c, libtiff/tif_write.c: TIFFReadScanline() and
TIFFWriteScanline() now set tif_row explicitly in case the codec has
fooled with the value as per bug 129.
- libtiff/tif_ojpeg.c: Major upgrade from Scott. Details in bug 156.
- libtiff/tif_open.c: Pointers to custom procedures
in TIFFClientOpen() are checked to be not NULL-pointers.
- libtiff/tif_lzw.c: Assertions in LZWDecode and LZWDecodeCompat
replaced by warnings. Now libtiff should read corrupted LZW-compressed
files by skipping bad strips as per bug 100.
- libtiff/: tif_dirwrite.c, tif_write.c, tiffio.h:
TIFFCheckpointDirectory()
routine added as per bug 124. The
TIFFWriteDirectory
man page discusses this new function as well as the related
TIFFRewriteDirectory().
- libtiff/: tif_codec.c, tif_compress.c, tiffiop.h, tif_getimage.c:
Introduced
additional members tif->tif_decodestatus and tif->tif_encodestatus
for correct handling of unconfigured codecs (we should not try to read
data or to define data size without correct codecs). See bug 119.
- tif_dirread.c: avoid div-by-zero if rowbytes is zero in chop func as
per bug 111.
- libtiff/: tiff.h, tif_dir.c, tif_dir.h, tif_dirinfo.c, tif_dirread.c,
tif_dirwrite.c: Dwight Kelly added get/put code for new tag XMLPACKET as
defined in Adobe XMP Technote. Added missing INKSET tag value from TIFF 6.0
spec INKSET_MULTIINK (=2). Added missing tags from Adobe TIFF technotes:
CLIPPATH, XCLIPPATHUNITS, YCLIPPATHUNITS, OPIIMAGEID, OPIPROXY and
INDEXED. Added PHOTOMETRIC tag value from TIFF technote 4 ICCLAB (=9).
- libtiff/tif_getimage.c: Additional check for supported codecs added in
TIFFRGBAImageOK, TIFFReadRGBAImage, TIFFReadRGBAStrip and TIFFReadRGBATile now
use TIFFRGBAImageOK before reading a per bug 110.
- libtiff/: tif_dir.c, tif_dir.h, tif_dirinfo.c, tif_dirread.c,
tif_dirwrite.c: Added routine
TIFFDataWidth for determining
TIFFDataType sizes instead of working with tiffDataWidth array
directly as per bug 109.
- libtiff/: tif_dirinfo.c, tif_dirwrite.c: Added possibility to
read broken TIFFs with LONG type used for TIFFTAG_COMPRESSION,
TIFFTAG_BITSPERSAMPLE, TIFFTAG_PHOTOMETRIC as per bug 99.
- libtiff/{tiff.h,tif_fax3.c}: Add support for __arch64__ as per bug 94.
- libtiff/tif_read.c: Fixed TIFFReadEncodedStrip() to fail if the
decodestrip function returns anything not greater than zero as per bug 97.
- libtiff/tif_jpeg.c: fixed computation of segment_width for
tiles files to avoid error about it not matching the
cinfo.d.image_width values ("JPEGPreDecode: Improper JPEG strip/tile
size.") for ITIFF files. Apparently the problem was incorporated since
3.5.5, presumably during the OJPEG/JPEG work recently.
- libtiff/tif_getimage.c: If DEFAULT_EXTRASAMPLE_AS_ALPHA is 1
(defined in tiffconf.h - 1 by default) then the RGBA interface
will assume that a fourth extra sample is ASSOCALPHA if the
EXTRASAMPLE value isn't set for it. This changes the behaviour of
the library, but makes it work better with RGBA files produced by
lots of applications that don't mark the alpha values properly.
As per bugs 93 and 65.
- libtiff/tif_jpeg.c: allow jpeg data stream sampling values to
override those from tiff directory. This makes this work with
ImageGear generated files.
CHANGES IN THE TOOLS:
- raw2tiff:
New utility for turning raw raster images into TIFF files
written by Andrey Kiselev.
- tiff2ps:
Sebastian Eken provided patches (bug 200) to add new these new
switches:
- -b #: for a bottom margin of # inches
- -c: center image
- -l #: for a left margin of # inches
- -r: rotate the image by 180 degrees
Also, new features merged with code for shrinking/overlapping.
- tiff2ps: Don't emit BeginData/EndData
DSC comments since we are unable to properly include the amount to skip
as per bug 80.
- tiff2ps: Added workaround for some
software that may crash when last strip of image contains fewer number
of scanlines than specified by the `/Height' variable as per bug 164.
- tiff2ps: Patch from John Williams to add new
functionality for tiff2ps utility splitting long images in several pages as
per bug 142. New switches:
- -H #: split image if height is more than # inches
- -L #: overLap split images by # inches
- tiff2ps: New commandline
switches to override resolution units obtained from the input file per bug 131:
- -x: override resolution units as centimeters
- -y: override resolution units as inches
- fax2tiff: Updated to reflect
latest changes in libtiff per bug 125.
- tiff2ps: Division by zero fixed as per bug 88.
- tiffcp:
Added support for 'Orientation' tag.
- tiffdump:
include TIFFTAG_JPEGTABLES in tag list.
- tiffset: fix bug in error reporting.
CHANGES IN THE CONTRIB AREA:
- Fixed distribution to include contrib/addtiffo/tif_ovrcache.{c,h}.
- libtiff/contrib/win95: renamed to contrib/win_dib. Added new
Tiffile.cpp example of converting TIFF files into a DIB on Win32 as per
bug 143.
TIFF home page.
Last updated $Date: 2002-10-10 14:35:48 $.