1<HTML>
2<HEAD>
3<TITLE>
4	Changes in TIFF v4.0.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>: v4.0.0<BR>
19<B>Previous Version</B>: <A HREF=v3.9.5.html>v3.9.5</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="ftp://download.osgeo.org/libtiff">
23ftp://download.osgeo.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).  If you don't
30find something listed here, then it was not done in this timeframe, or
31it was not considered important enough to be mentioned. Please consult
32the ChangeLog file in the source package for full change details.  The
33following information is located here:
34<UL>
35<LI><A HREF="#hightlights">Major Changes</A>
36<LI><A HREF="#configure">Changes in the software configuration</A>
37<LI><A HREF="#libtiff">Changes in libtiff</A>
38<LI><A HREF="#tools">Changes in the tools</A>
39<LI><A HREF="#contrib">Changes in the contrib area</A>
40</UL>
41<p>
42<P><HR WIDTH=65% ALIGN=left>
43
44<!--------------------------------------------------------------------------->
45
46<P><A NAME="highlights"><B><FONT SIZE=+3>M</FONT>AJOR CHANGES:</B></A></P>
47
48BigTIFF support changes:
49
50<UL>
51
52	<LI>The options parameter in the TIFFOpen and TIFFClientOpen funcs has
53	been extended. When creating new files, you can add option '4' to
54	specify you want to create a ClassicTIFF file, though that is the
55	default and the option is not strictly necessary. (As such, old
56	calling code will continue to function and create ClassicTIFF files.)
57	Or you can add option '8' to specify you want to create a BigTIFF file
58	instead. This new option is also reflected in some of the tools we
59	already upgraded. For instance, you can use the -8 option on tiffcp to
60	have tiffcp produce BigTIFF files instead of the default ClassicTIFF.
61	(Whilst on additional option is provided for version selection when
62	creating new files, no such option is necessary when reading TIFF
63	files. LibTiff reads ClassicTIFF and BigTIFF both, and the application
64	does not need to be aware which TIFF version an opened file is.)
65
66	<LI>Although the tag count in BigTIFF is 64bit, we restricted the
67	count in the implementation to a much more reasonable size. This is
68	necessary in current implementation, because all tag data gets read
69	automatically in the IFD reading stage, so if there's half a dozen
70	private tags with multiple gigabytes of data that causes considerable
71	overhead even if the application level is never interested in these
72	tags. Our choice to ignore tags with data longer then a certain sanity
73	value is much needed as things stand. We also recommend to step away
74	from writing tiles that are 8 kilobyte in their uncompressed form, or
75	writing single-line strips, in really big files, resulting in mega's
76	of tiles or strips. It's much more efficient to choose bigger tile or
77	strip sizes, up to several megabyte if needed, and have a few kilo of
78	tiles or strips instead.
79
80	<LI>Although it's rare, some application code does directly access
81	file offsets. Some of these are automatically upgraded because they
82	used the toff_t type, others need to be aware that the datatype
83	changed and need to start using toff_t or uint64. This impacts access
84	to tags like the EXIF IFD tag, for example, or the SubIfds tag, or to
85	StripOffsets or TileOffsets, the return type of functions like
86	TIFFCurrentDirOffset, and a parameter type to functions like
87	TIFFSetSubDirectory.
88
89	<LI>Although it's rare, some application code does use structures
90	like TIFFHeader or TIFFDirEntry that used to be an exact binary
91	representation of TIFF structures. These need to change. The old
92	TIFFHeader structure is replaced by the new TIFFHeaderClassic,
93	TIFFHeaderBig, and TIFFHeaderCommon structures that are an exact
94	binary representation of the ClassicTIFF and BigTIFF header, and of
95	the part that is common to both. There is no new equivalent for the
96	old TIFFDirEntry structure (or more precisely, there is still a
97	TIFFDirEntry structure, but it is changed, moved to library-private
98	definition, and no longer an exact binary representation of the tag
99	structure of either TIFF version).
100
101	<LI>Sizer functions, like TIFFTileSize or TIFFScanlineSize and the
102	like, return a tmsize_t value (tmsize_t is defined as int32 on 32bit
103	machines, and int64 on 64bit machines, and as such it is meant to
104	represent signed memory sizes). This is because we figure 98% of the
105	calling code uses the return value as sizes in allocations and the
106	like. So, any overflow that is theoretically possible with BigTIFF
107	when LibTiff is running on a 32bit system, is best detected inside the
108	sizer functions and it is best to return a type that makes sense as a
109	memory size. If your calling code is the exception and is interested
110	in actual file size, you best use the newer TIFFTileSize64 or
111	TIFFScanlineSize64 function that returns an uint64 type.
112
113	<LI>These TIFF tags require a 64-bit type as an argument in
114	libtiff 4.0.0:
115	<UL>
116	<LI> TIFFTAG_FREEBYTECOUNTS
117	<LI> TIFFTAG_FREEOFFSETS
118	<LI> TIFFTAG_STRIPBYTECOUNTS
119	<LI> TIFFTAG_STRIPOFFSETS
120	<LI> TIFFTAG_TILEBYTECOUNTS
121	<LI> TIFFTAG_TILEOFFSETS
122	</UL>
123
124</UL>
125
126Other important backward incompatible changes in the public API:
127
128<UL>
129	<LI> TIFFRewriteField() renamed into _TIFFRewriteField() and moved out
130	from the public interface (from tiffio.h to tiffiop.h). Type of its
131	'count' parameter changed from uint32 to tmsize_t.
132
133	<LI> TIFFMergeFieldInfo() returns non-void result now. It returns 0
134	if successful and -1 if failed. Though this is now obsoleted function
135	and should not be used in new programs. Use the new tag extension
136	scheme instead.
137
138	<LI> TIFFFieldWithTag() and TIFFFieldWithName() functions now return
139	pointer to TIFFField constant object instead of TIFFFieldInfo.
140
141	<LI> TIFFReassignTagToIgnore() function and TIFFIgnoreSense enumeration
142	have been removed. They was unused and never been used properly.
143	Should be unneeded for high-level applications.
144
145	<LI> TIFFTagValue structure removed from the public tiffio.h
146	to private tif_dir.h and not accessible anymore. It should be unneeded
147	for high-level applications.
148
149</UL>
150
151<P><HR WIDTH=65% ALIGN=left>
152<!--------------------------------------------------------------------------->
153
154<P><A NAME="configure"><B><FONT SIZE=+3>C</FONT>HANGES IN THE SOFTWARE CONFIGURATION:</B></A></P>
155
156<UL>
157
158	<LI>Updated autotools: Autoconf 2.68, Automake 1.11.1, libtool
159	2.4.
160
161	<LI>Enabled support for Automake silent build rules
162	(--enable-silent-rules or 'make V=0')
163
164	<LI>Enabled support for Automake colorized and parallel tests.
165
166	<LI>Added detection of 64-bit integer types since libtiff 4.0
167	requires use of 64-bit signed and unsigned integer types.
168
169	<LI>Libtiff now provides a more comprehensive test suite with
170	over 72 tests, which may be executed on Unix-like systems, or
171	under Microsoft Windows using MinGW/MSYS or Cygwin.
172
173	<LI>--disable-lzma configure option to disable use of liblzma.
174
175	<LI>--enable-defer-strile-load configure option to enable
176	experimental deferred strip/tile offset/size loading.  May
177	cause some extremely sophisticated uses of libtiff to fail.
178
179	<LI>--enable-chunky-strip-read configure option to enable
180	experimental enable reading large strips in chunks in
181	TIFFReadScanline().
182
183	<LI>Now always uses WIN32 native I/O functions for Microsoft
184	Windows except for under Cygwin.
185
186	<LI>Now provides a pkg-config support file (libtiff-4.pc).
187
188</UL>
189
190<P><HR WIDTH=65% ALIGN=left>
191
192<!--------------------------------------------------------------------------->
193
194<P><A NAME="libtiff"><B><FONT SIZE=+3>C</FONT>HANGES IN LIBTIFF:</B></A></P>
195
196<UL>
197
198        <LI>Patches/fixes made to stable libtiff (v3.9.X) are also
199        applied to 4.0.0.  There are too many to list here.  See the
200        distribution ChangeLog for a detailed change list.
201
202	<LI>There is considerable change in some files like
203	tif_dirread and tif_dirwrite. These changes don't impact
204	backwards compatibility, they are mostly a clean rewrite that
205	does allow BigTIFF support as well as somewhat more robust
206	reading of the unexpected already and will also serve future
207	API extension but does not impact current API or functionality
208	in a negative way that you need to know about.
209
210	<LI>Although there is still a functional definition for types
211	like toff_t (file offset), tstrip_t (strip index number), etc,
212	we recommend against using these in newer code. We have
213	learned that it is next to impossible to use these
214	consistently and make real abstraction of the binary format of
215	these types. Instead, at a certain level we always end up
216	doing casts anyway, and taking the exact binary format into
217	account, so these types are nothing but dangerously misleading
218	and obfuscating. You do not need to update calling code that
219	uses them, as 99.9% of such code will continue to work. But we
220	recommend against using them in newer calling code, and we
221	started replacing them with binary clear types like uint16,
222	uint32 and such in the library.
223
224	<LI>We do use and will continue to use one functional type
225	that is an exception to the above rule, being tmsize_t. This
226	is a signed memory size type, i.e. it is int32 on 32bit
227	machines, or int64 on 64bit machines.
228
229	<LI>Optionally support LZMA compression via TIFF tag 34925.
230	Tiffcp supports compression levels similar to "-c lzma:p1" or
231	"-c zip:p9 for setting the LZMA compression parameters.
232
233	<LI>Optionally defer the load of strip/tile offset and size
234	tags for optimized scanning of directories.  Enabled with the
235	--enable-defer-strile-load configure option (DEFER_STRILE_LOAD
236	#define in tif_config.h).
237
238	<LI>Optionally enable experimental support for reading big
239	strips in chunks.  Enabled with the --enable-chunky-strip-read
240	configure option.
241
242</UL>
243
244<P><HR WIDTH=65% ALIGN=left>
245
246<!-------------------------------------------------------------------------->
247
248<P><A NAME="tools"><B><FONT SIZE=+3>C</FONT>HANGES IN THE TOOLS:</B></A></P>
249
250<UL>
251
252	<LI>tiffset: add -d and -sd switches to allow operation on
253	a particular directory, not just the first.
254
255</UL>
256
257<P><HR WIDTH=65% ALIGN=left>
258
259<!--------------------------------------------------------------------------->
260
261<P><A NAME="contrib"><B><FONT SIZE=+3>C</FONT>HANGES IN THE CONTRIB AREA:</B></A></P>
262
263<UL>
264</UL>
265
266Last updated $Date: 2016-09-25 20:05:47 $.
267
268</BODY>
269</HTML>
270