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://download.osgeo.org/libtiff">
21download.osgeo.org</a>, directory pub/libtiff</A><BR>
22<B>Master HTTP Site</B>: <A HREF="http://www.simplesystems.org/libtiff/">
23http://www.simplesystems.org/libtiff/</a>
24<HR SIZE=4 WIDTH=65% ALIGN=left>
25</UL>
26
27<P>
28This document describes the changes made to the software between the
29<I>previous</I> and <I>current</I> versions (see above).
30If you don't find something listed here, then it was not done in this
31timeframe, or it was not considered important enough to be mentioned.
32The following information is located here:
33<UL>
34<LI><A HREF="#hightlights">Major Changes</A>
35<LI><A HREF="#configure">Changes in the software configuration</A>
36<LI><A HREF="#libtiff">Changes in libtiff</A>
37<LI><A HREF="#tools">Changes in the tools</A>
38<LI><A HREF="#contrib">Changes in the contrib area</A>
39<LI><A HREF="#lzwkit">Changes in the LZW compression kit</A>
40</UL>
41<p>
42<P><HR WIDTH=65% ALIGN=left>
43
44<!--------------------------------------------------------------------------->
45
46<A NAME="highlights"><B><FONT SIZE=+3>M</FONT>AJOR CHANGES:</B></A>
47
48<ul>
49	<li> New utility <a href=./man/raw2tiff.1.html>raw2tiff</a>
50for converting raw rasters into TIFF files.
51	<li> Lots of new <a href=./man/tiff2ps.1.html>tiff2ps</a> options.
52	<li> Lots of new <a href=./man/fax2tiff.1.html>fax2tiff</a> options.
53	<li> Lots of bug fixes for LZW, JPEG and OJPEG compression.
54</ul>
55
56<h3>Custom Tag Support</h3>
57
58The approach to extending libtiff with custom tags has changed radically.
59Previously, all internally supported TIFF tags had a place in the
60private TIFFDirectory structure within libtiff to hold the values (if read),
61and a "field number" (ie. FIELD_SUBFILETYPE) used to identify that tag.
62However, every time a new tag was added to the core, the size of the
63TIFFDirectory structure would changing, breaking any dynamically linked
64software that used the private data structures.<p>
65
66Also, any tag not recognised
67by libtiff would not be read and accessable to applications without some
68fairly complicated work on the applications part to pre-register the tags
69as exemplified by the support for "Geo"TIFF tags by libgeotiff layered on
70libtiff.  <p>
71
72Amoung other things this approach required the extension code
73to access the private libtiff structures ... which made the higher level
74non-libtiff code be locked into a specific version of libtiff at compile time.
75This caused no end of bug reports!<p>
76
77The new approach is for libtiff to read all tags from TIFF files.  Those that
78aren't recognised as "core tags" (those having an associated FIELD_ value,
79and place for storage in the TIFFDirectory structure) are now read into a
80dynamic list of extra tags (td_customValues in TIFFDirectory).  When a new
81tag code is encountered for the first time in a given TIFF file, a new
82anonymous tag definition is created for the tag in the tag definition list.
83The type, and some other metadata is worked out from the instance encountered.
84These fields are known as "custom tags".  <p>
85
86Custom tags can be set and fetched normally using TIFFSetField() and
87TIFFGetField(), and appear pretty much like normal tags to application code.
88However, they have no impact on internal libtiff processing (such as
89compression).  Some utilities, such as tiffcp will now copy these custom
90tags to the new output files. <p>
91
92As well as the internal work with custom tags, new C API entry points
93were added so that extension libraries, such as libgeotiff, could
94define new tags more easily without accessing internal data structures.
95Because tag handling of extension tags is done via the "custom fields"
96mechanism as well, the definition provided externally mostly serves to provide
97a meaningful name for the tag.
98
99The addition of "custom tags" and the altered approach to extending libtiff
100with externally defined tags is the primary reason for the shift to the
1013.6.x version number from 3.5.x.<p>
102
103<P><HR WIDTH=65% ALIGN=left>
104<!--------------------------------------------------------------------------->
105
106<A NAME="configure"><B><FONT SIZE=+3>C</FONT>HANGES IN THE SOFTWARE CONFIGURATION:</B></A>
107
108<UL>
109<li> configure, config.site: Fix for large files (>2GiB) support. New
110option in the config.site: LARGEFILE="yes". Should be enougth for the large
111files I/O.
112
113<li> configure: Set -DPIXARLOG_SUPPORT option along with -DZIP_SUPPORT.
114
115<li> html/Makefile.in: Updated to use groffhtml for generating html pages
116from man pages.
117
118<li> configure, libtiff/Makefile.in: Added SCO OpenServer 5.0.6 support
119from John H. DuBois III.
120
121<li> libtiff/{Makefile.vc, libtiff.def}: Missed declarations added.
122
123<li> libtiff/Makefile.in, tools/Makefile.in: Shared library will not be
124stripped when installing, utility binaries will do be stripped. As per bug 93.
125
126<li> man/Makefile.in: Patch DESTDIR handling as per bug 95.
127
128<li> configure: OpenBSD changes for Sparc64 and DSO version as per bug 96.
129
130<li> config.site/configure: added support for OJPEG=yes option to enable
131OJPEG support from config.site.
132
133<li> config.guess, config.sub: Updated from ftp.gnu.org/pub/config.
134
135<li> configure: Modify CheckForBigEndian so it can work in a cross
136compiled situation.
137
138<li> configure, libtiff/Makefile.in: Changes for building on MacOS 10.1
139as per bug 94.
140
141<li> html/Makefile.in: added missing images per bug 92.
142
143<li> port/Makefile.in: fixed clean target per bug 92.
144</UL>
145
146<P><HR WIDTH=65% ALIGN=left>
147
148<!--------------------------------------------------------------------------->
149
150<A NAME="libtiff"><B><FONT SIZE=+3>C</FONT>HANGES IN LIBTIFF:</B></A>
151
152<UL>
153
154<li> libtiff/tif_getimage.c: New function <A
155HREF="./man/TIFFReadRGBAImage.3t.html">TIFFReadRGBAImageOriented()</A>
156implemented to retrieve raster array with user-specified origin position.
157
158<li> libtiff/tif_fax3.c: Fix wrong line numbering.
159
160<li> libtiff/tif_dirread.c: Check field counter against number of fields.
161
162<li> Store a list of opened IFD to prevent directory looping.
163
164<li> libtiff/tif_jpeg.c: modified segment_height calculation to always
165be a full height tile for tiled images.  Also changed error to just
166be a warning.
167
168<li> libtiff/tif_lzw.c: fixed so that decoder state isn't allocated till
169LZWSetupDecode().  Needed to read LZW files in "r+" mode.
170
171<li> libtiff/tif_dir.c: fixed up the tif_postdecode settings responsible
172for byte swapping complex image data.
173
174<li> libtiff/tif_open.c: Removed error if opening a compressed file
175in update mode bug (198).
176
177<li> libtiff/tif_write.c: TIFFWriteCheck() now fails if the image is
178a pre-existing compressed image.  That is, image writing to pre-existing
179compressed images is not allowed.
180
181<li> html/man/*.html: Web pages regenerated from man pages.
182
183<li> libtiff/tif_jpeg.c: Hack to ensure that "boolean" is defined properly
184on Windows so as to avoid the structure size mismatch error from libjpeg
185(bug 188).
186
187<li> libtiff/tiff.h: #ifdef USING_VISUALAGE around previous Visual Age
188AIX porting hack as it screwed up gcc. (bug 39)
189
190<li> libtiff/tiff.h: added COMPRESSION_JP2000 (34712) for LEAD tools
191custom compression.
192
193<li> libtiff/tif_dirread.c: Another fix for the fetching SBYTE arrays
194by the TIFFFetchByteArray() function. (bug 52)
195
196<li> libtiff/tif_dirread.c: Expand v[2] to v[4] in TIFFFetchShortPair()
197as per bug 196.
198
199<li> libtiff/tif_lzw.c: Additional consistency checking added in
200LZWDecode() and LZWDecodeCompat() fixing bugs 190 and 100.
201
202<li> libtiff/tif_lzw.c: Added check for valid code lengths in LZWDecode()
203and LZWDecodeCompat(). Fixes bug 115.
204
205<li> tif_getimage.c: Ensure that TIFFRGBAImageBegin() returns the
206return code from the underlying pick function as per bug 177.
207
208<li> libtiff/{tif_jpeg.c,tif_strip.c,tif_print.c}: Hacked tif_jpeg.c to
209fetch TIFFTAG_YCBCRSUBSAMPLING from the jpeg data stream if it isn't
210present in the tiff tags as per bug 168.
211
212<li> libtiff/tif_jpeg.c: Fixed problem with setting of nrows in
213JPEGDecode() as per bug 129.
214
215<li> libtiff/tif_read.c, libtiff/tif_write.c: TIFFReadScanline() and
216TIFFWriteScanline() now set tif_row explicitly in case the codec has
217fooled with the value as per bug 129.
218
219<li> libtiff/tif_ojpeg.c: Major upgrade from Scott.  Details in bug 156.
220
221<li>  libtiff/tif_open.c: Pointers to custom procedures
222in TIFFClientOpen() are checked to be not NULL-pointers.
223
224<li> libtiff/tif_lzw.c: Assertions in LZWDecode and LZWDecodeCompat
225replaced by warnings. Now libtiff should read corrupted LZW-compressed
226files by skipping bad strips as per bug 100.
227
228<li> libtiff/: tif_dirwrite.c, tif_write.c, tiffio.h:
229<a href=./man/TIFFWriteDirectory.3t.html>TIFFCheckpointDirectory()</a>
230routine added as per bug 124.  The
231<a href=./man/TIFFWriteDirectory.3t.html>TIFFWriteDirectory</a>
232man page discusses this new function as well as the related
233<a href=./man/TIFFWriteDirectory.3t.html>TIFFRewriteDirectory()</a>.
234
235<li> libtiff/: tif_codec.c, tif_compress.c, tiffiop.h, tif_getimage.c:
236Introduced
237additional members tif->tif_decodestatus and tif->tif_encodestatus
238for correct handling of unconfigured codecs (we should not try to read
239data or to define data size without correct codecs). See bug 119.
240
241<li> tif_dirread.c: avoid div-by-zero if rowbytes is zero in chop func as
242per bug 111.
243
244<li> libtiff/: tiff.h, tif_dir.c, tif_dir.h, tif_dirinfo.c, tif_dirread.c,
245tif_dirwrite.c: Dwight Kelly added get/put code for new tag XMLPACKET as
246defined in Adobe XMP Technote. Added missing INKSET tag value from TIFF 6.0
247spec INKSET_MULTIINK (=2). Added missing tags from Adobe TIFF technotes:
248CLIPPATH, XCLIPPATHUNITS, YCLIPPATHUNITS, OPIIMAGEID, OPIPROXY and
249INDEXED. Added PHOTOMETRIC tag value from TIFF technote 4 ICCLAB (=9).
250
251<li> libtiff/tif_getimage.c: Additional check for supported codecs added in
252TIFFRGBAImageOK, TIFFReadRGBAImage, TIFFReadRGBAStrip and TIFFReadRGBATile now
253use TIFFRGBAImageOK before reading a per bug 110.
254
255<li> libtiff/: tif_dir.c, tif_dir.h, tif_dirinfo.c, tif_dirread.c,
256tif_dirwrite.c: Added routine
257<a href=./man/TIFFDataWidth.3t.html>TIFFDataWidth</a> for determining
258TIFFDataType sizes instead of working with tiffDataWidth array
259directly as per bug 109.
260
261<li>libtiff/: tif_dirinfo.c, tif_dirwrite.c: Added possibility to
262read broken TIFFs with LONG type used for TIFFTAG_COMPRESSION,
263TIFFTAG_BITSPERSAMPLE, TIFFTAG_PHOTOMETRIC as per bug 99.
264
265<li> libtiff/{tiff.h,tif_fax3.c}: Add support for __arch64__ as per bug 94.
266
267<li> libtiff/tif_read.c: Fixed TIFFReadEncodedStrip() to fail if the
268decodestrip function returns anything not greater than zero as per bug 97.
269
270<li> libtiff/tif_jpeg.c: fixed computation of segment_width for
271tiles files to avoid error about it not matching the
272cinfo.d.image_width values ("JPEGPreDecode: Improper JPEG strip/tile
273size.") for ITIFF files.  Apparently the problem was incorporated since
2743.5.5, presumably during the OJPEG/JPEG work recently.
275
276<li> libtiff/tif_getimage.c: If DEFAULT_EXTRASAMPLE_AS_ALPHA is 1
277(defined in tiffconf.h - 1 by default) then the RGBA interface
278will assume that a fourth extra sample is ASSOCALPHA if the
279EXTRASAMPLE value isn't set for it.  This changes the behaviour of
280the library, but makes it work better with RGBA files produced by
281lots of applications that don't mark the alpha values properly.
282As per bugs 93 and 65.
283
284<li> libtiff/tif_jpeg.c: allow jpeg data stream sampling values to
285override those from tiff directory.  This makes this work with
286ImageGear generated files.
287
288</UL>
289
290<P><HR WIDTH=65% ALIGN=left>
291
292<!-------------------------------------------------------------------------->
293
294<A NAME="tools"><B><FONT SIZE=+3>C</FONT>HANGES IN THE TOOLS:</B></A>
295
296<UL>
297
298<li> <a href=./man/tiff2ps.1.html>tiff2ps</a>: Added page size setting
299when creating PS Level 2.
300
301<li> <a href=./man/tiff2ps.1.html>tiff2ps</a>: Fixed PS comment emitted when
302FlateDecode is being used.
303
304<li> <a href=./man/tiffsplit.1.html>tiffsplit</a>: increased the maximum
305number of pages that can be split.
306
307<li> <a href=./man/raw2tiff.1.html>raw2tiff</a>: Added option `-p' to
308explicitly select color	space of input image data.
309
310<li> <a href=./man/tiffmedian.1.html>tiffmedian</a>: Suppiort for large
311(> 2GB) images.
312
313<li> <a href=./man/ppm2tiff.1.html>ppm2tiff</a>: Fixed possible endless loop.
314
315<li> <a href=./man/tiff2rgba.1.html>tiff2rgba</a>: Switched to use
316<A HREF="./man/TIFFReadRGBAImage.3t.html">TIFFReadRGBAImageOriented()</A>
317instead of <A HREF="./man/TIFFReadRGBAImage.3t.html">TIFFReadRGBAImage()</A>.
318
319<li> <a href=./man/tiffcmp.1.html>tiffcmp</a>: Fixed problem with unused data
320comparing (bug 349). `-z' option now can be used to set the number of reported
321different bytes.
322
323<li> <a href=./man/tiffcp.1.html>tiffcp</a>: Added possibility to specify
324value -1 to -r option to get the entire image as one strip (bug 343).
325
326<li> <a href=./man/tiffcp.1.html>tiffcp</a>: Set the correct RowsPerStrip
327and PageNumber values (bug 343).
328
329<li> <a href=./man/fax2tiff.1.html>fax2tiff</a>: Page numbering fixed (bug
330341).
331
332<li> <a href=./man/ppm2tiff.1.html>ppm2tiff</a>: PPM header parser improved:
333now able to skip comments.
334
335<li> <a href=./man/tiff2ps.1.html>tiff2ps</a>: Force deadzone printing when
336EPS output specified (bug 325).
337
338<li> <a href=./man/tiff2ps.1.html>tiff2ps</a>: Add ability to generate
339PS Level 3. It basically allows one to use the /flateDecode filter for ZIP
340compressed TIFF images. Patch supplied by Tom Kacvinsky (bug 328).
341
342<li> <a href=./man/tiffcp.1.html>tiffcp</a>: Fixed problem with colorspace
343conversion for JPEG encoded images (bugs 23 and 275)
344
345<li> <a href=./man/fax2tiff.1.html>fax2tiff</a>: Applied patch from
346Julien Gaulmin. More switches for fax2tiff tool for better control
347of input and output (bugs 272 and 293).
348
349<li> <a href=./man/raw2tiff.1.html>raw2tiff</a>:
350New utility for turning raw raster images into TIFF files
351written by Andrey Kiselev.
352
353<li> <a href=./man/tiff2ps.1.html>tiff2ps</a>:
354Sebastian Eken provided patches (bug 200) to add new these new
355switches:
356  <ul>
357    <li> <b>-b #</b>: for a bottom margin of # inches
358    <li> <b>-c</b>: center image
359    <li> <b>-l #</b>: for a left margin of # inches
360    <li> <b>-r</b>: rotate the image by 180 degrees
361  </ul>
362
363Also, new features merged with code for shrinking/overlapping.
364
365<li> <a href=./man/tiff2ps.1.html>tiff2ps</a>: Don't emit BeginData/EndData
366DSC comments since we are unable to properly include the amount to skip
367as per bug 80.
368
369<li> <a href=./man/tiff2ps.1.html>tiff2ps</a>: Added workaround for some
370software that may crash when last strip of image contains fewer number
371of scanlines than specified by the `/Height' variable as per bug 164.
372
373<li> <a href=./man/tiff2ps.1.html>tiff2ps</a>: Patch from John Williams to add new
374functionality for tiff2ps utility splitting long images in several pages as
375per bug 142. New switches:
376	<ul>
377		<li> <b>-H #</b>: split image if height is more than # inches
378		<li> <b>-L #</b>: overLap split images by # inches
379	</ul>
380
381<li>  <a href=./man/tiff2ps.1.html>tiff2ps</a>: New commandline
382switches to override resolution units obtained from the input file per bug 131:
383	<ul>
384		<li> <b>-x</b>: override resolution units as centimeters
385		<li> <b>-y</b>: override resolution units as inches
386	</ul>
387
388<li> <a href=./man/fax2tiff.1.html>fax2tiff</a>: Updated to reflect
389latest changes in libtiff per bug 125.
390
391<li> tiff2ps: Division by zero fixed as per bug 88.
392
393<li> <a href=./man/tiffcp.1.html>tiffcp<a>:
394Added support for 'Orientation' tag.
395
396<li> <a href=./man/tiffdump.1.html>tiffdump</a>:
397include TIFFTAG_JPEGTABLES in tag list.
398
399<li> tiffset: fix bug in error reporting.
400
401</UL>
402
403<P><HR WIDTH=65% ALIGN=left>
404
405<!--------------------------------------------------------------------------->
406
407<A NAME="contrib"><B><FONT SIZE=+3>C</FONT>HANGES IN THE CONTRIB AREA:</B></A>
408<UL>
409
410<li> Fixed distribution to include contrib/addtiffo/tif_ovrcache.{c,h}.
411<li> libtiff/contrib/win95: renamed to contrib/win_dib.  Added new
412Tiffile.cpp example of converting TIFF files into a DIB on Win32 as per
413bug 143.
414
415</UL>
416
417<!--------------------------------------------------------------------------->
418
419<A NAME="lzwkit"><B><FONT SIZE=+3>C</FONT>HANGES IN THE LZW COMPRESSION
420KIT:</B></A>
421<UL>
422
423<li> LZW compression kit synchronized with actual libtiff version.
424
425</UL>
426
427<A HREF="index.html"><IMG SRC="images/back.gif"></A> TIFF home page.<BR>
428
429<HR>
430
431Last updated $Date: 2016-09-25 20:05:45 $.
432
433</BODY>
434</HTML>
435