xref: /libtiff-4.0.7/html/v3.6.0.html (revision b09a3813)
1<HTML>
2<HEAD>
3<TITLE>
4Changes in TIFF v3.6.0
5</TITLE>
6</HEAD>
7
8<BODY BGCOLOR=white>
9<FONT FACE="Helvetica, Arial, Sans">
10<FONT FACE="Helvetica, Arial, Sans">
11
12<BASEFONT SIZE=4>
13<B><FONT SIZE=+3>T</FONT>IFF <FONT SIZE=+2>C</FONT>HANGE <FONT SIZE=+2>I</FONT>NFORMATION</B>
14<BASEFONT SIZE=3>
15
16<UL>
17<HR SIZE=4 WIDTH=65% ALIGN=left>
18<B>Current Version</B>: v3.6.0<BR>
19<B>Previous Version</B>: <A HREF=v3.5.7.html>v3.5.7</a><BR>
20<B>Master FTP Site</B>: <A HREF="ftp://ftp.remotesensing.org/pub/libtiff">ftp.remotesensing.org</a>, directory pub/libtiff</A><BR>
21<B>Master HTTP Site</B>: <A HREF="http://www.libtiff.org/">http://www.libtiff.org</a>
22<HR SIZE=4 WIDTH=65% ALIGN=left>
23</UL>
24
25<P>
26This document describes the changes made to the software between the
27<I>previous</I> and <I>current</I> versions (see above).
28If you don't find something listed here, then it was not done in this
29timeframe, or it was not considered important enough to be mentioned.
30The following information is located here:
31<UL>
32<LI><A HREF="#hightlights">Major Changes</A>
33<LI><A HREF="#configure">Changes in the software configuration</A>
34<LI><A HREF="#libtiff">Changes in libtiff</A>
35<LI><A HREF="#tools">Changes in the tools</A>
36<LI><A HREF="#lzwkit">Changes in the LZW compression kit</A>
37</UL>
38<p>
39<P><HR WIDTH=65% ALIGN=left>
40
41<!--------------------------------------------------------------------------->
42
43<A NAME="highlights"><B><FONT SIZE=+3>M</FONT>AJOR CHANGES:</B></A>
44
45<ul>
46	<li> New utility <a href=./man/raw2tiff.1.html>raw2tiff</a>
47for converting raw rasters into TIFF files.
48	<li> Lots of new <a href=./man/tiff2ps.1.html>tiff2ps</a> options.
49	<li> Lots of bug fixes for LZW, JPEG and OJPEG compression.
50</ul>
51
52<h3>Custom Tag Support</h3>
53
54The approach to extending libtiff with custom tags has changed radically.
55Previously, all internally supported TIFF tags had a place in the
56private TIFFDirectory structure within libtiff to hold the values (if read),
57and a "field number" (ie. FIELD_SUBFILETYPE) used to identify that tag.
58However, every time a new tag was added to the core, the size of the
59TIFFDirectory structure would changing, breaking any dynamically linked
60software that used the private data structures.<p>
61
62Also, any tag not recognised
63by libtiff would not be read and accessable to applications without some
64fairly complicated work on the applications part to pre-register the tags
65as exemplified by the support for "Geo"TIFF tags by libgeotiff layered on
66libtiff.  <p>
67
68Amoung other things this approach required the extension code
69to access the private libtiff structures ... which made the higher level
70non-libtiff code be locked into a specific version of libtiff at compile time.
71This caused no end of bug reports!<p>
72
73The new approach is for libtiff to read all tags from TIFF files.  Those that
74aren't recognised as "core tags" (those having an associated FIELD_ value,
75and place for storage in the TIFFDirectory structure) are now read into a
76dynamic list of extra tags (td_customValues in TIFFDirectory).  When a new
77tag code is encountered for the first time in a given TIFF file, a new
78anonymous tag definition is created for the tag in the tag definition list.
79The type, and some other metadata is worked out from the instance encountered.
80These fields are known as "custom tags".  <p>
81
82Custom tags can be set and fetched normally using TIFFSetField() and
83TIFFGetField(), and appear pretty much like normal tags to application code.
84However, they have no impact on internal libtiff processing (such as
85compression).  Some utilities, such as tiffcp will now copy these custom
86tags to the new output files. <p>
87
88As well as the internal work with custom tags, new C API entry points
89were added so that extension libraries, such as libgeotiff, could
90define new tags more easily without accessing internal data structures.
91Because tag handling of extension tags is done via the "custom fields"
92mechanism as well, the definition provided externally mostly serves to provide
93a meaningful name for the tag.
94
95The addition of "custom tags" and the altered approach to extending libtiff
96with externally defined tags is the primary reason for the shift to the
973.6.x version number from 3.5.x.<p>
98
99<P><HR WIDTH=65% ALIGN=left>
100<!--------------------------------------------------------------------------->
101
102<A NAME="configure"><B><FONT SIZE=+3>C</FONT>HANGES IN THE SOFTWARE CONFIGURATION:</B></A>
103
104<UL>
105<li> configure: Set -DPIXARLOG_SUPPORT option along with -DZIP_SUPPORT.
106<li> html/Makefile.in: Updated to use groffhtml for generating html pages
107from man pages.
108<li> configure, libtiff/Makefile.in: Added SCO OpenServer 5.0.6 support
109from John H. DuBois III.
110<li> libtiff/{Makefile.vc, libtiff.def}: Missed declarations added.
111
112<li> libtiff/Makefile.in, tools/Makefile.in: Shared library will not
113be stripped when installing, utility binaries will do be stripped.  As per bug
11493.
115<li> man/Makefile.in: Patch DESTDIR handling as per bug 95.
116
117<li> configure: OpenBSD changes for Sparc64 and DSO version as per bug 96.
118
119<li> config.site/configure: added support for OJPEG=yes option to enable
120OJPEG support from config.site.
121
122<li> config.guess, config.sub: Updated from ftp.gnu.org/pub/config.
123
124<li> configure: Modify CheckForBigEndian so it can work in a cross
125compiled situation.
126
127<li> configure, libtiff/Makefile.in: Changes for building on MacOS 10.1
128as per bug 94.
129
130<li> html/Makefile.in: added missing images per bug 92.
131
132<li> port/Makefile.in: fixed clean target per bug 92.
133</UL>
134
135<P><HR WIDTH=65% ALIGN=left>
136
137<!--------------------------------------------------------------------------->
138
139<A NAME="libtiff"><B><FONT SIZE=+3>C</FONT>HANGES IN LIBTIFF:</B></A>
140
141
142<UL>
143<li> html/man/*.html: Web pages regenerated from man pages.
144<li> libtiff/tif_jpeg.c: Hack to ensure that "boolean" is defined properly
145on Windows so as to avoid the structure size mismatch error from libjpeg
146(bug 188).
147<li> libtiff/tiff.h: #ifdef USING_VISUALAGE around previous Visual Age
148AIX porting hack as it screwed up gcc. (bug 39)
149<li> libtiff/tiff.h: added COMPRESSION_JP2000 (34712) for LEAD tools
150custom compression.
151<li> libtiff/tif_dirread.c: Another fix for the fetching SBYTE arrays
152by the TIFFFetchByteArray() function. (bug 52)
153<li> libtiff/tif_dirread.c: Expand v[2] to v[4] in TIFFFetchShortPair()
154as per bug 196.
155<li> libtiff/tif_lzw.c: Additional consistency checking added in
156LZWDecode() and LZWDecodeCompat() fixing bugs 190 and 100.
157<li> libtiff/tif_lzw.c:
158Added check for valid code lengths in LZWDecode() and
159LZWDecodeCompat(). Fixes bug 115.
160<li> tif_getimage.c: Ensure that TIFFRGBAImageBegin() returns the
161return code from the underlying pick function as per bug 177.
162
163<li> libtiff/{tif_jpeg.c,tif_strip.c,tif_print.c}: Hacked tif_jpeg.c to
164fetch TIFFTAG_YCBCRSUBSAMPLING from the jpeg data stream if it isn't
165present in the tiff tags as per bug 168.
166
167<li> libtiff/tif_jpeg.c: Fixed problem with setting of nrows in
168JPEGDecode() as per bug 129.
169
170<li> libtiff/tif_read.c, libtiff/tif_write.c: TIFFReadScanline() and
171TIFFWriteScanline() now set tif_row explicitly in case the codec has
172fooled with the value as per bug 129.
173
174<li> libtiff/tif_ojpeg.c: Major upgrade from Scott.  Details in bug 156.
175
176<li>  libtiff/tif_open.c: Pointers to custom procedures
177in TIFFClientOpen() are checked to be not NULL-pointers.
178
179<li> libtiff/tif_lzw.c: Assertions in LZWDecode and LZWDecodeCompat
180replaced by warnings. Now libtiff should read corrupted LZW-compressed
181files by skipping bad strips as per bug 100.
182
183<li> libtiff/: tif_dirwrite.c, tif_write.c, tiffio.h:
184<a href=./man/TIFFWriteDirectory.3t.html>TIFFCheckpointDirectory()</a>
185routine added as per bug 124.  The
186<a href=./man/TIFFWriteDirectory.3t.html>TIFFWriteDirectory</a>
187man page discusses this new function as well as the related
188<a href=./man/TIFFWriteDirectory.3t.html>TIFFRewriteDirectory()</a>.
189
190<li> libtiff/: tif_codec.c, tif_compress.c, tiffiop.h, tif_getimage.c:
191Introduced
192additional members tif->tif_decodestatus and tif->tif_encodestatus
193for correct handling of unconfigured codecs (we should not try to read
194data or to define data size without correct codecs). See bug 119.
195
196<li> tif_dirread.c: avoid div-by-zero if rowbytes is zero in chop func as
197per bug 111.
198
199<li> libtiff/: tiff.h, tif_dir.c, tif_dir.h, tif_dirinfo.c, tif_dirread.c,
200tif_dirwrite.c: Dwight Kelly added get/put code for new tag XMLPACKET as
201defined in Adobe XMP Technote. Added missing INKSET tag value from TIFF 6.0
202spec INKSET_MULTIINK (=2). Added missing tags from Adobe TIFF technotes:
203CLIPPATH, XCLIPPATHUNITS, YCLIPPATHUNITS, OPIIMAGEID, OPIPROXY and
204INDEXED. Added PHOTOMETRIC tag value from TIFF technote 4 ICCLAB (=9).
205
206<li> libtiff/tif_getimage.c: Additional check for supported codecs added in
207TIFFRGBAImageOK, TIFFReadRGBAImage, TIFFReadRGBAStrip and TIFFReadRGBATile now
208use TIFFRGBAImageOK before reading a per bug 110.
209
210<li> libtiff/: tif_dir.c, tif_dir.h, tif_dirinfo.c, tif_dirread.c,
211tif_dirwrite.c: Added routine
212<a href=./man/TIFFDataWidth.3t.html>TIFFDataWidth</a> for determining
213TIFFDataType sizes instead of working with tiffDataWidth array
214directly as per bug 109.
215
216<li>libtiff/: tif_dirinfo.c, tif_dirwrite.c: Added possibility to
217read broken TIFFs with LONG type used for TIFFTAG_COMPRESSION,
218TIFFTAG_BITSPERSAMPLE, TIFFTAG_PHOTOMETRIC as per bug 99.
219
220<li> libtiff/{tiff.h,tif_fax3.c}: Add support for __arch64__ as per bug 94.
221
222<li> libtiff/tif_read.c: Fixed TIFFReadEncodedStrip() to fail if the
223decodestrip function returns anything not greater than zero as per bug 97.
224
225<li> libtiff/tif_jpeg.c: fixed computation of segment_width for
226tiles files to avoid error about it not matching the
227cinfo.d.image_width values ("JPEGPreDecode: Improper JPEG strip/tile
228size.") for ITIFF files.  Apparently the problem was incorporated since
2293.5.5, presumably during the OJPEG/JPEG work recently.
230
231<li> libtiff/tif_getimage.c: If DEFAULT_EXTRASAMPLE_AS_ALPHA is 1
232(defined in tiffconf.h - 1 by default) then the RGBA interface
233will assume that a fourth extra sample is ASSOCALPHA if the
234EXTRASAMPLE value isn't set for it.  This changes the behaviour of
235the library, but makes it work better with RGBA files produced by
236lots of applications that don't mark the alpha values properly.
237As per bugs 93 and 65.
238
239<li> libtiff/tif_jpeg.c: allow jpeg data stream sampling values to
240override those from tiff directory.  This makes this work with
241ImageGear generated files.
242
243</UL>
244
245<P><HR WIDTH=65% ALIGN=left>
246
247<!-------------------------------------------------------------------------->
248
249<A NAME="tools"><B><FONT SIZE=+3>C</FONT>HANGES IN THE TOOLS:</B></A>
250
251<UL>
252
253<li> <a href=./man/raw2tiff.1.html>raw2tiff</a>:
254New utility for turning raw raster images into TIFF files
255written by Andrey Kiselev.
256
257<li> <a href=./man/tiff2ps.1.html>tiff2ps</a>:
258Sebastian Eken provided patches (bug 200) to add new these new
259switches:
260  <ul>
261    <li> <b>-b #</b>: for a bottom margin of # inches
262    <li> <b>-c</b>: center image
263    <li> <b>-l #</b>: for a left margin of # inches
264    <li> <b>-r</b>: rotate the image by 180 degrees
265  </ul>
266
267Also, new features merged with code for shrinking/overlapping.
268
269<li> <a href=./man/tiff2ps.1.html>tiff2ps</a>: Don't emit BeginData/EndData
270DSC comments since we are unable to properly include the amount to skip
271as per bug 80.
272
273<li> <a href=./man/tiff2ps.1.html>tiff2ps</a>: Added workaround for some
274software that may crash when last strip of image contains fewer number
275of scanlines than specified by the `/Height' variable as per bug 164.
276
277<li> <a href=./man/tiff2ps.1.html>tiff2ps</a>: Patch from John Williams to add new
278functionality for tiff2ps utility splitting long images in several pages as
279per bug 142. New switches:
280	<ul>
281		<li> <b>-H #</b>: split image if height is more than # inches
282		<li> <b>-L #</b>: overLap split images by # inches
283	</ul>
284
285<li>  <a href=./man/tiff2ps.1.html>tiff2ps</a>: New commandline
286switches to override resolution units obtained from the input file per bug 131:
287	<ul>
288		<li> <b>-x</b>: override resolution units as centimeters
289		<li> <b>-y</b>: override resolution units as inches
290	</ul>
291
292<li> <a href=./man/fax2tiff.1.html>fax2tiff</a>: Updated to reflect
293latest changes in libtiff per bug 125.
294
295<li> tiff2ps: Division by zero fixed as per bug 88.
296
297<li> <a href=./man/tiffcp.1.html>tiffcp<a>:
298Added support for 'Orientation' tag.
299
300<li> <a href=./man/tiffdump.1.html>tiffdump</a>:
301include TIFFTAG_JPEGTABLES in tag list.
302
303<li> tiffset: fix bug in error reporting.
304
305</UL>
306
307<P><HR WIDTH=65% ALIGN=left>
308
309<!--------------------------------------------------------------------------->
310
311<A NAME="contrib"><B><FONT SIZE=+3>C</FONT>HANGES IN THE CONTRIB AREA:</B></A>
312<UL>
313
314<li> Fixed distribution to include contrib/addtiffo/tif_ovrcache.{c,h}.
315<li> libtiff/contrib/win95: renamed to contrib/win_dib.  Added new
316Tiffile.cpp example of converting TIFF files into a DIB on Win32 as per
317bug 143.
318
319</UL>
320
321<A HREF="index.html"><IMG SRC="images/back.gif"></A> TIFF home page.<BR>
322
323<HR>
324
325Last updated $Date: 2002-10-10 14:35:48 $.
326
327</BODY>
328</HTML>
329