xref: /libtiff-4.0.7/html/v3.6.0.html (revision 5c7b0ab0)
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, config.site: Fix for large files (>2GiB) support. New
106option in the config.site: LARGEFILE="yes". Should be enougth for the large
107files I/O.
108
109<li> configure: Set -DPIXARLOG_SUPPORT option along with -DZIP_SUPPORT.
110
111<li> html/Makefile.in: Updated to use groffhtml for generating html pages
112from man pages.
113
114<li> configure, libtiff/Makefile.in: Added SCO OpenServer 5.0.6 support
115from John H. DuBois III.
116
117<li> libtiff/{Makefile.vc, libtiff.def}: Missed declarations added.
118
119<li> libtiff/Makefile.in, tools/Makefile.in: Shared library will not be
120stripped when installing, utility binaries will do be stripped. As per bug 93.
121
122<li> man/Makefile.in: Patch DESTDIR handling as per bug 95.
123
124<li> configure: OpenBSD changes for Sparc64 and DSO version as per bug 96.
125
126<li> config.site/configure: added support for OJPEG=yes option to enable
127OJPEG support from config.site.
128
129<li> config.guess, config.sub: Updated from ftp.gnu.org/pub/config.
130
131<li> configure: Modify CheckForBigEndian so it can work in a cross
132compiled situation.
133
134<li> configure, libtiff/Makefile.in: Changes for building on MacOS 10.1
135as per bug 94.
136
137<li> html/Makefile.in: added missing images per bug 92.
138
139<li> port/Makefile.in: fixed clean target per bug 92.
140</UL>
141
142<P><HR WIDTH=65% ALIGN=left>
143
144<!--------------------------------------------------------------------------->
145
146<A NAME="libtiff"><B><FONT SIZE=+3>C</FONT>HANGES IN LIBTIFF:</B></A>
147
148
149<UL>
150<li> libtiff/tif_jpeg.c: modified segment_height calculation to always
151be a full height tile for tiled images.  Also changed error to just
152be a warning.
153
154<li> libtiff/tif_lzw.c: fixed so that decoder state isn't allocated till
155LZWSetupDecode().  Needed to read LZW files in "r+" mode.
156
157<li> libtiff/tif_dir.c: fixed up the tif_postdecode settings responsible
158for byte swapping complex image data.
159
160<li> libtiff/tif_open.c: Removed error if opening a compressed file
161in update mode bug (198).
162
163<li> libtiff/tif_write.c: TIFFWriteCheck() now fails if the image is
164a pre-existing compressed image.  That is, image writing to pre-existing
165compressed images is not allowed.
166
167<li> html/man/*.html: Web pages regenerated from man pages.
168
169<li> libtiff/tif_jpeg.c: Hack to ensure that "boolean" is defined properly
170on Windows so as to avoid the structure size mismatch error from libjpeg
171(bug 188).
172
173<li> libtiff/tiff.h: #ifdef USING_VISUALAGE around previous Visual Age
174AIX porting hack as it screwed up gcc. (bug 39)
175
176<li> libtiff/tiff.h: added COMPRESSION_JP2000 (34712) for LEAD tools
177custom compression.
178
179<li> libtiff/tif_dirread.c: Another fix for the fetching SBYTE arrays
180by the TIFFFetchByteArray() function. (bug 52)
181
182<li> libtiff/tif_dirread.c: Expand v[2] to v[4] in TIFFFetchShortPair()
183as per bug 196.
184
185<li> libtiff/tif_lzw.c: Additional consistency checking added in
186LZWDecode() and LZWDecodeCompat() fixing bugs 190 and 100.
187
188<li> libtiff/tif_lzw.c: Added check for valid code lengths in LZWDecode()
189and LZWDecodeCompat(). Fixes bug 115.
190
191<li> tif_getimage.c: Ensure that TIFFRGBAImageBegin() returns the
192return code from the underlying pick function as per bug 177.
193
194<li> libtiff/{tif_jpeg.c,tif_strip.c,tif_print.c}: Hacked tif_jpeg.c to
195fetch TIFFTAG_YCBCRSUBSAMPLING from the jpeg data stream if it isn't
196present in the tiff tags as per bug 168.
197
198<li> libtiff/tif_jpeg.c: Fixed problem with setting of nrows in
199JPEGDecode() as per bug 129.
200
201<li> libtiff/tif_read.c, libtiff/tif_write.c: TIFFReadScanline() and
202TIFFWriteScanline() now set tif_row explicitly in case the codec has
203fooled with the value as per bug 129.
204
205<li> libtiff/tif_ojpeg.c: Major upgrade from Scott.  Details in bug 156.
206
207<li>  libtiff/tif_open.c: Pointers to custom procedures
208in TIFFClientOpen() are checked to be not NULL-pointers.
209
210<li> libtiff/tif_lzw.c: Assertions in LZWDecode and LZWDecodeCompat
211replaced by warnings. Now libtiff should read corrupted LZW-compressed
212files by skipping bad strips as per bug 100.
213
214<li> libtiff/: tif_dirwrite.c, tif_write.c, tiffio.h:
215<a href=./man/TIFFWriteDirectory.3t.html>TIFFCheckpointDirectory()</a>
216routine added as per bug 124.  The
217<a href=./man/TIFFWriteDirectory.3t.html>TIFFWriteDirectory</a>
218man page discusses this new function as well as the related
219<a href=./man/TIFFWriteDirectory.3t.html>TIFFRewriteDirectory()</a>.
220
221<li> libtiff/: tif_codec.c, tif_compress.c, tiffiop.h, tif_getimage.c:
222Introduced
223additional members tif->tif_decodestatus and tif->tif_encodestatus
224for correct handling of unconfigured codecs (we should not try to read
225data or to define data size without correct codecs). See bug 119.
226
227<li> tif_dirread.c: avoid div-by-zero if rowbytes is zero in chop func as
228per bug 111.
229
230<li> libtiff/: tiff.h, tif_dir.c, tif_dir.h, tif_dirinfo.c, tif_dirread.c,
231tif_dirwrite.c: Dwight Kelly added get/put code for new tag XMLPACKET as
232defined in Adobe XMP Technote. Added missing INKSET tag value from TIFF 6.0
233spec INKSET_MULTIINK (=2). Added missing tags from Adobe TIFF technotes:
234CLIPPATH, XCLIPPATHUNITS, YCLIPPATHUNITS, OPIIMAGEID, OPIPROXY and
235INDEXED. Added PHOTOMETRIC tag value from TIFF technote 4 ICCLAB (=9).
236
237<li> libtiff/tif_getimage.c: Additional check for supported codecs added in
238TIFFRGBAImageOK, TIFFReadRGBAImage, TIFFReadRGBAStrip and TIFFReadRGBATile now
239use TIFFRGBAImageOK before reading a per bug 110.
240
241<li> libtiff/: tif_dir.c, tif_dir.h, tif_dirinfo.c, tif_dirread.c,
242tif_dirwrite.c: Added routine
243<a href=./man/TIFFDataWidth.3t.html>TIFFDataWidth</a> for determining
244TIFFDataType sizes instead of working with tiffDataWidth array
245directly as per bug 109.
246
247<li>libtiff/: tif_dirinfo.c, tif_dirwrite.c: Added possibility to
248read broken TIFFs with LONG type used for TIFFTAG_COMPRESSION,
249TIFFTAG_BITSPERSAMPLE, TIFFTAG_PHOTOMETRIC as per bug 99.
250
251<li> libtiff/{tiff.h,tif_fax3.c}: Add support for __arch64__ as per bug 94.
252
253<li> libtiff/tif_read.c: Fixed TIFFReadEncodedStrip() to fail if the
254decodestrip function returns anything not greater than zero as per bug 97.
255
256<li> libtiff/tif_jpeg.c: fixed computation of segment_width for
257tiles files to avoid error about it not matching the
258cinfo.d.image_width values ("JPEGPreDecode: Improper JPEG strip/tile
259size.") for ITIFF files.  Apparently the problem was incorporated since
2603.5.5, presumably during the OJPEG/JPEG work recently.
261
262<li> libtiff/tif_getimage.c: If DEFAULT_EXTRASAMPLE_AS_ALPHA is 1
263(defined in tiffconf.h - 1 by default) then the RGBA interface
264will assume that a fourth extra sample is ASSOCALPHA if the
265EXTRASAMPLE value isn't set for it.  This changes the behaviour of
266the library, but makes it work better with RGBA files produced by
267lots of applications that don't mark the alpha values properly.
268As per bugs 93 and 65.
269
270<li> libtiff/tif_jpeg.c: allow jpeg data stream sampling values to
271override those from tiff directory.  This makes this work with
272ImageGear generated files.
273
274</UL>
275
276<P><HR WIDTH=65% ALIGN=left>
277
278<!-------------------------------------------------------------------------->
279
280<A NAME="tools"><B><FONT SIZE=+3>C</FONT>HANGES IN THE TOOLS:</B></A>
281
282<UL>
283<li> <a href=./man/tiffcmp.1.html>tiffcmp</a>: Fixed problem with unused data
284comparing (bug 349). `-z' option now can be used to set the number of reported
285different bytes.
286
287<li> <a href=./man/tiffcp.1.html>tiffcp</a>: Added possibility to specify
288value -1 to -r option to get the entire image as one strip (bug 343).
289
290<li> <a href=./man/tiffcp.1.html>tiffcp</a>: Set the correct RowsPerStrip
291and PageNumber values (bug 343).
292
293<li> <a href=./man/fax2tiff.1.html>fax2tiff</a>: Page numbering fixed (bug
294341).
295
296<li> <a href=./man/ppm2tiff.1.html>ppm2tiff</a>: PPM header parser improved:
297now able to skip comments.
298
299<li> <a href=./man/tiff2ps.1.html>tiff2ps</a>: Force deadzone printing when
300EPS output specified (bug 325).
301
302<li> <a href=./man/tiff2ps.1.html>tiff2ps</a>: Add ability to generate
303PS Level 3. It basically allows one to use the /flateDecode filter for ZIP
304compressed TIFF images. Patch supplied by Tom Kacvinsky (bug 328).
305
306<li> <a href=./man/tiffcp.1.html>tiffcp</a>: Fixed problem with colorspace
307conversion for JPEG encoded images (bugs 23 and 275)
308
309<li> <a href=./man/fax2tiff.1.html>fax2tiff</a>: Applied patch from
310Julien Gaulmin. More switches for fax2tiff tool for better control
311of input and output (bugs 272 and 293).
312
313<li> <a href=./man/raw2tiff.1.html>raw2tiff</a>:
314New utility for turning raw raster images into TIFF files
315written by Andrey Kiselev.
316
317<li> <a href=./man/tiff2ps.1.html>tiff2ps</a>:
318Sebastian Eken provided patches (bug 200) to add new these new
319switches:
320  <ul>
321    <li> <b>-b #</b>: for a bottom margin of # inches
322    <li> <b>-c</b>: center image
323    <li> <b>-l #</b>: for a left margin of # inches
324    <li> <b>-r</b>: rotate the image by 180 degrees
325  </ul>
326
327Also, new features merged with code for shrinking/overlapping.
328
329<li> <a href=./man/tiff2ps.1.html>tiff2ps</a>: Don't emit BeginData/EndData
330DSC comments since we are unable to properly include the amount to skip
331as per bug 80.
332
333<li> <a href=./man/tiff2ps.1.html>tiff2ps</a>: Added workaround for some
334software that may crash when last strip of image contains fewer number
335of scanlines than specified by the `/Height' variable as per bug 164.
336
337<li> <a href=./man/tiff2ps.1.html>tiff2ps</a>: Patch from John Williams to add new
338functionality for tiff2ps utility splitting long images in several pages as
339per bug 142. New switches:
340	<ul>
341		<li> <b>-H #</b>: split image if height is more than # inches
342		<li> <b>-L #</b>: overLap split images by # inches
343	</ul>
344
345<li>  <a href=./man/tiff2ps.1.html>tiff2ps</a>: New commandline
346switches to override resolution units obtained from the input file per bug 131:
347	<ul>
348		<li> <b>-x</b>: override resolution units as centimeters
349		<li> <b>-y</b>: override resolution units as inches
350	</ul>
351
352<li> <a href=./man/fax2tiff.1.html>fax2tiff</a>: Updated to reflect
353latest changes in libtiff per bug 125.
354
355<li> tiff2ps: Division by zero fixed as per bug 88.
356
357<li> <a href=./man/tiffcp.1.html>tiffcp<a>:
358Added support for 'Orientation' tag.
359
360<li> <a href=./man/tiffdump.1.html>tiffdump</a>:
361include TIFFTAG_JPEGTABLES in tag list.
362
363<li> tiffset: fix bug in error reporting.
364
365</UL>
366
367<P><HR WIDTH=65% ALIGN=left>
368
369<!--------------------------------------------------------------------------->
370
371<A NAME="contrib"><B><FONT SIZE=+3>C</FONT>HANGES IN THE CONTRIB AREA:</B></A>
372<UL>
373
374<li> Fixed distribution to include contrib/addtiffo/tif_ovrcache.{c,h}.
375<li> libtiff/contrib/win95: renamed to contrib/win_dib.  Added new
376Tiffile.cpp example of converting TIFF files into a DIB on Win32 as per
377bug 143.
378
379</UL>
380
381<A HREF="index.html"><IMG SRC="images/back.gif"></A> TIFF home page.<BR>
382
383<HR>
384
385Last updated $Date: 2003-06-18 20:31:09 $.
386
387</BODY>
388</HTML>
389