1/* $Id: tiffio.h 285 2010-07-07 11:02:56Z nijtmans $ */
2
3/*
4 * Copyright (c) 1988-1997 Sam Leffler
5 * Copyright (c) 1991-1997 Silicon Graphics, Inc.
6 *
7 * Permission to use, copy, modify, distribute, and sell this software and
8 * its documentation for any purpose is hereby granted without fee, provided
9 * that (i) the above copyright notices and this permission notice appear in
10 * all copies of the software and related documentation, and (ii) the names of
11 * Sam Leffler and Silicon Graphics may not be used in any advertising or
12 * publicity relating to the software without the specific, prior written
13 * permission of Sam Leffler and Silicon Graphics.
14 *
15 * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
16 * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
17 * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
18 *
19 * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
20 * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
21 * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
22 * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
23 * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
24 * OF THIS SOFTWARE.
25 */
26
27#ifndef _TIFFIO_
28#define	_TIFFIO_
29
30/*
31 * TIFF I/O Library Definitions.
32 */
33#include "tiff.h"
34#include "tiffvers.h"
35
36/*
37 * TIFF is defined as an incomplete type to hide the
38 * library's internal data structures from clients.
39 */
40typedef	struct tiff TIFF;
41
42/*
43 * The following typedefs define the intrinsic size of
44 * data types used in the *exported* interfaces.  These
45 * definitions depend on the proper definition of types
46 * in tiff.h.  Note also that the varargs interface used
47 * to pass tag types and values uses the types defined in
48 * tiff.h directly.
49 *
50 * NB: ttag_t is unsigned int and not unsigned short because
51 *     ANSI C requires that the type before the ellipsis be a
52 *     promoted type (i.e. one of int, unsigned int, pointer,
53 *     or double) and because we defined pseudo-tags that are
54 *     outside the range of legal Aldus-assigned tags.
55 * NB: tsize_t is int32 and not uint32 because some functions
56 *     return -1.
57 * NB: toff_t is not off_t for many reasons; TIFFs max out at
58 *     32-bit file offsets being the most important, and to ensure
59 *     that it is unsigned, rather than signed.
60 */
61typedef uint32 ttag_t;          /* directory tag */
62typedef uint16 tdir_t;          /* directory index */
63typedef uint16 tsample_t;       /* sample number */
64typedef uint32 tstrile_t;       /* strip or tile number */
65typedef tstrile_t tstrip_t;     /* strip number */
66typedef tstrile_t ttile_t;      /* tile number */
67typedef int32 tsize_t;          /* i/o size in bytes */
68typedef void* tdata_t;          /* image data ref */
69typedef uint32 toff_t;          /* file offset */
70
71#if !defined(__WIN32__) && (defined(_WIN32) || defined(WIN32))
72#define __WIN32__
73#endif
74
75/*
76 * On windows you should define USE_WIN32_FILEIO if you are using tif_win32.c
77 * or AVOID_WIN32_FILEIO if you are using something else (like tif_unix.c).
78 *
79 * By default tif_unix.c is assumed.
80 */
81
82#if defined(_WINDOWS) || defined(__WIN32__) || defined(_Windows)
83#  if !defined(__CYGWIN) && !defined(AVOID_WIN32_FILEIO) && !defined(USE_WIN32_FILEIO)
84#    define AVOID_WIN32_FILEIO
85#  endif
86#endif
87
88#if defined(USE_WIN32_FILEIO)
89# define VC_EXTRALEAN
90# include <windows.h>
91# ifdef __WIN32__
92DECLARE_HANDLE(thandle_t);	/* Win32 file handle */
93# else
94typedef	HFILE thandle_t;	/* client data handle */
95# endif /* __WIN32__ */
96#else
97typedef	void* thandle_t;	/* client data handle */
98#endif /* USE_WIN32_FILEIO */
99
100/*
101 * Flags to pass to TIFFPrintDirectory to control
102 * printing of data structures that are potentially
103 * very large.   Bit-or these flags to enable printing
104 * multiple items.
105 */
106#define	TIFFPRINT_NONE		0x0		/* no extra info */
107#define	TIFFPRINT_STRIPS	0x1		/* strips/tiles info */
108#define	TIFFPRINT_CURVES	0x2		/* color/gray response curves */
109#define	TIFFPRINT_COLORMAP	0x4		/* colormap */
110#define	TIFFPRINT_JPEGQTABLES	0x100		/* JPEG Q matrices */
111#define	TIFFPRINT_JPEGACTABLES	0x200		/* JPEG AC tables */
112#define	TIFFPRINT_JPEGDCTABLES	0x200		/* JPEG DC tables */
113
114/*
115 * Colour conversion stuff
116 */
117
118/* reference white */
119#define D65_X0 (95.0470F)
120#define D65_Y0 (100.0F)
121#define D65_Z0 (108.8827F)
122
123#define D50_X0 (96.4250F)
124#define D50_Y0 (100.0F)
125#define D50_Z0 (82.4680F)
126
127/* Structure for holding information about a display device. */
128
129typedef	unsigned char TIFFRGBValue;		/* 8-bit samples */
130
131typedef struct {
132	float d_mat[3][3]; 		/* XYZ -> luminance matrix */
133	float d_YCR;			/* Light o/p for reference white */
134	float d_YCG;
135	float d_YCB;
136	uint32 d_Vrwr;			/* Pixel values for ref. white */
137	uint32 d_Vrwg;
138	uint32 d_Vrwb;
139	float d_Y0R;			/* Residual light for black pixel */
140	float d_Y0G;
141	float d_Y0B;
142	float d_gammaR;			/* Gamma values for the three guns */
143	float d_gammaG;
144	float d_gammaB;
145} TIFFDisplay;
146
147typedef struct {				/* YCbCr->RGB support */
148	TIFFRGBValue* clamptab;			/* range clamping table */
149	int*	Cr_r_tab;
150	int*	Cb_b_tab;
151	int32*	Cr_g_tab;
152	int32*	Cb_g_tab;
153        int32*  Y_tab;
154} TIFFYCbCrToRGB;
155
156typedef struct {				/* CIE Lab 1976->RGB support */
157	int	range;				/* Size of conversion table */
158#define CIELABTORGB_TABLE_RANGE 1500
159	float	rstep, gstep, bstep;
160	float	X0, Y0, Z0;			/* Reference white point */
161	TIFFDisplay display;
162	float	Yr2r[CIELABTORGB_TABLE_RANGE + 1];  /* Conversion of Yr to r */
163	float	Yg2g[CIELABTORGB_TABLE_RANGE + 1];  /* Conversion of Yg to g */
164	float	Yb2b[CIELABTORGB_TABLE_RANGE + 1];  /* Conversion of Yb to b */
165} TIFFCIELabToRGB;
166
167/*
168 * RGBA-style image support.
169 */
170typedef struct _TIFFRGBAImage TIFFRGBAImage;
171/*
172 * The image reading and conversion routines invoke
173 * ``put routines'' to copy/image/whatever tiles of
174 * raw image data.  A default set of routines are
175 * provided to convert/copy raw image data to 8-bit
176 * packed ABGR format rasters.  Applications can supply
177 * alternate routines that unpack the data into a
178 * different format or, for example, unpack the data
179 * and draw the unpacked raster on the display.
180 */
181typedef void (*tileContigRoutine)
182    (TIFFRGBAImage*, uint32*, uint32, uint32, uint32, uint32, int32, int32,
183	unsigned char*);
184typedef void (*tileSeparateRoutine)
185    (TIFFRGBAImage*, uint32*, uint32, uint32, uint32, uint32, int32, int32,
186	unsigned char*, unsigned char*, unsigned char*, unsigned char*);
187/*
188 * RGBA-reader state.
189 */
190struct _TIFFRGBAImage {
191	TIFF* tif;                              /* image handle */
192	int stoponerr;                          /* stop on read error */
193	int isContig;                           /* data is packed/separate */
194	int alpha;                              /* type of alpha data present */
195	uint32 width;                           /* image width */
196	uint32 height;                          /* image height */
197	uint16 bitspersample;                   /* image bits/sample */
198	uint16 samplesperpixel;                 /* image samples/pixel */
199	uint16 orientation;                     /* image orientation */
200	uint16 req_orientation;                 /* requested orientation */
201	uint16 photometric;                     /* image photometric interp */
202	uint16* redcmap;                        /* colormap pallete */
203	uint16* greencmap;
204	uint16* bluecmap;
205	/* get image data routine */
206	int (*get)(TIFFRGBAImage*, uint32*, uint32, uint32);
207	/* put decoded strip/tile */
208	union {
209	    void (*any)(TIFFRGBAImage*);
210	    tileContigRoutine contig;
211	    tileSeparateRoutine separate;
212	} put;
213	TIFFRGBValue* Map;                      /* sample mapping array */
214	uint32** BWmap;                         /* black&white map */
215	uint32** PALmap;                        /* palette image map */
216	TIFFYCbCrToRGB* ycbcr;                  /* YCbCr conversion state */
217	TIFFCIELabToRGB* cielab;                /* CIE L*a*b conversion state */
218
219	int row_offset;
220	int col_offset;
221};
222
223/*
224 * Macros for extracting components from the
225 * packed ABGR form returned by TIFFReadRGBAImage.
226 */
227#define	TIFFGetR(abgr)	((abgr) & 0xff)
228#define	TIFFGetG(abgr)	(((abgr) >> 8) & 0xff)
229#define	TIFFGetB(abgr)	(((abgr) >> 16) & 0xff)
230#define	TIFFGetA(abgr)	(((abgr) >> 24) & 0xff)
231
232/*
233 * A CODEC is a software package that implements decoding,
234 * encoding, or decoding+encoding of a compression algorithm.
235 * The library provides a collection of builtin codecs.
236 * More codecs may be registered through calls to the library
237 * and/or the builtin implementations may be overridden.
238 */
239typedef	int (*TIFFInitMethod)(TIFF*, int);
240typedef struct {
241	const char*		name;
242	uint16		scheme;
243	TIFFInitMethod	init;
244} TIFFCodec;
245
246#include <stdio.h>
247#include <stdarg.h>
248
249/* share internal LogLuv conversion routines? */
250#ifndef LOGLUV_PUBLIC
251#define LOGLUV_PUBLIC		1
252#endif
253
254#if !defined(__GNUC__) && !defined(__attribute__)
255#  define __attribute__(x) /*nothing*/
256#endif
257
258#if defined(c_plusplus) || defined(__cplusplus)
259extern "C" {
260#endif
261typedef	void (*TIFFErrorHandler)(const char*, const char*, va_list);
262typedef	void (*TIFFErrorHandlerExt)(thandle_t, const char*, const char*, va_list);
263typedef	tsize_t (*TIFFReadWriteProc)(thandle_t, tdata_t, tsize_t);
264typedef	toff_t (*TIFFSeekProc)(thandle_t, toff_t, int);
265typedef	int (*TIFFCloseProc)(thandle_t);
266typedef	toff_t (*TIFFSizeProc)(thandle_t);
267typedef	int (*TIFFMapFileProc)(thandle_t, tdata_t*, toff_t*);
268typedef	void (*TIFFUnmapFileProc)(thandle_t, tdata_t, toff_t);
269typedef	void (*TIFFExtendProc)(TIFF*);
270
271extern	const char* TIFFGetVersion(void);
272
273extern	const TIFFCodec* TIFFFindCODEC(uint16);
274extern	TIFFCodec* TIFFRegisterCODEC(uint16, const char*, TIFFInitMethod);
275extern	void TIFFUnRegisterCODEC(TIFFCodec*);
276extern  int TIFFIsCODECConfigured(uint16);
277extern	TIFFCodec* TIFFGetConfiguredCODECs(void);
278
279/*
280 * Auxiliary functions.
281 */
282
283extern	tdata_t _TIFFmalloc(tsize_t);
284extern	tdata_t _TIFFrealloc(tdata_t, tsize_t);
285extern	void _TIFFmemset(tdata_t, int, tsize_t);
286extern	void _TIFFmemcpy(tdata_t, const tdata_t, tsize_t);
287extern	int _TIFFmemcmp(const tdata_t, const tdata_t, tsize_t);
288extern	void _TIFFfree(tdata_t);
289
290/*
291** Stuff, related to tag handling and creating custom tags.
292*/
293extern  int  TIFFGetTagListCount( TIFF * );
294extern  ttag_t TIFFGetTagListEntry( TIFF *, int tag_index );
295
296#define	TIFF_ANY	TIFF_NOTYPE	/* for field descriptor searching */
297#define	TIFF_VARIABLE	-1		/* marker for variable length tags */
298#define	TIFF_SPP	-2		/* marker for SamplesPerPixel tags */
299#define	TIFF_VARIABLE2	-3		/* marker for uint32 var-length tags */
300
301#define FIELD_CUSTOM    65
302
303typedef	struct {
304	ttag_t	field_tag;		/* field's tag */
305	short	field_readcount;	/* read count/TIFF_VARIABLE/TIFF_SPP */
306	short	field_writecount;	/* write count/TIFF_VARIABLE */
307	TIFFDataType field_type;	/* type of associated data */
308        unsigned short field_bit;	/* bit in fieldsset bit vector */
309	unsigned char field_oktochange;	/* if true, can change while writing */
310	unsigned char field_passcount;	/* if true, pass dir count on set */
311	const char	*field_name;		/* ASCII name */
312} TIFFFieldInfo;
313
314typedef struct _TIFFTagValue {
315    const TIFFFieldInfo  *info;
316    int             count;
317    void           *value;
318} TIFFTagValue;
319
320extern	void TIFFMergeFieldInfo(TIFF*, const TIFFFieldInfo[], int);
321extern	const TIFFFieldInfo* TIFFFindFieldInfo(TIFF*, ttag_t, TIFFDataType);
322extern  const TIFFFieldInfo* TIFFFindFieldInfoByName(TIFF* , const char *,
323						     TIFFDataType);
324extern	const TIFFFieldInfo* TIFFFieldWithTag(TIFF*, ttag_t);
325extern	const TIFFFieldInfo* TIFFFieldWithName(TIFF*, const char *);
326
327typedef	int (*TIFFVSetMethod)(TIFF*, ttag_t, va_list);
328typedef	int (*TIFFVGetMethod)(TIFF*, ttag_t, va_list);
329typedef	void (*TIFFPrintMethod)(TIFF*, FILE*, long);
330
331typedef struct {
332    TIFFVSetMethod	vsetfield;	/* tag set routine */
333    TIFFVGetMethod	vgetfield;	/* tag get routine */
334    TIFFPrintMethod	printdir;	/* directory print routine */
335} TIFFTagMethods;
336
337extern  TIFFTagMethods *TIFFAccessTagMethods( TIFF * );
338extern  void *TIFFGetClientInfo( TIFF *, const char * );
339extern  void TIFFSetClientInfo( TIFF *, void *, const char * );
340
341extern	void TIFFCleanup(TIFF*);
342extern	void TIFFClose(TIFF*);
343extern	int TIFFFlush(TIFF*);
344extern	int TIFFFlushData(TIFF*);
345extern	int TIFFGetField(TIFF*, ttag_t, ...);
346extern	int TIFFVGetField(TIFF*, ttag_t, va_list);
347extern	int TIFFGetFieldDefaulted(TIFF*, ttag_t, ...);
348extern	int TIFFVGetFieldDefaulted(TIFF*, ttag_t, va_list);
349extern	int TIFFReadDirectory(TIFF*);
350extern	int TIFFReadCustomDirectory(TIFF*, toff_t, const TIFFFieldInfo[],
351				    size_t);
352extern	int TIFFReadEXIFDirectory(TIFF*, toff_t);
353extern	tsize_t TIFFScanlineSize(TIFF*);
354extern	tsize_t TIFFOldScanlineSize(TIFF*);
355extern	tsize_t TIFFNewScanlineSize(TIFF*);
356extern	tsize_t TIFFRasterScanlineSize(TIFF*);
357extern	tsize_t TIFFStripSize(TIFF*);
358extern	tsize_t TIFFRawStripSize(TIFF*, tstrip_t);
359extern	tsize_t TIFFVStripSize(TIFF*, uint32);
360extern	tsize_t TIFFTileRowSize(TIFF*);
361extern	tsize_t TIFFTileSize(TIFF*);
362extern	tsize_t TIFFVTileSize(TIFF*, uint32);
363extern	uint32 TIFFDefaultStripSize(TIFF*, uint32);
364extern	void TIFFDefaultTileSize(TIFF*, uint32*, uint32*);
365extern	int TIFFFileno(TIFF*);
366extern  int TIFFSetFileno(TIFF*, int);
367extern  thandle_t TIFFClientdata(TIFF*);
368extern  thandle_t TIFFSetClientdata(TIFF*, thandle_t);
369extern	int TIFFGetMode(TIFF*);
370extern	int TIFFSetMode(TIFF*, int);
371extern	int TIFFIsTiled(TIFF*);
372extern	int TIFFIsByteSwapped(TIFF*);
373extern	int TIFFIsUpSampled(TIFF*);
374extern	int TIFFIsMSB2LSB(TIFF*);
375extern	int TIFFIsBigEndian(TIFF*);
376extern	TIFFReadWriteProc TIFFGetReadProc(TIFF*);
377extern	TIFFReadWriteProc TIFFGetWriteProc(TIFF*);
378extern	TIFFSeekProc TIFFGetSeekProc(TIFF*);
379extern	TIFFCloseProc TIFFGetCloseProc(TIFF*);
380extern	TIFFSizeProc TIFFGetSizeProc(TIFF*);
381extern	TIFFMapFileProc TIFFGetMapFileProc(TIFF*);
382extern	TIFFUnmapFileProc TIFFGetUnmapFileProc(TIFF*);
383extern	uint32 TIFFCurrentRow(TIFF*);
384extern	tdir_t TIFFCurrentDirectory(TIFF*);
385extern	tdir_t TIFFNumberOfDirectories(TIFF*);
386extern	uint32 TIFFCurrentDirOffset(TIFF*);
387extern	tstrip_t TIFFCurrentStrip(TIFF*);
388extern	ttile_t TIFFCurrentTile(TIFF*);
389extern	int TIFFReadBufferSetup(TIFF*, tdata_t, tsize_t);
390extern	int TIFFWriteBufferSetup(TIFF*, tdata_t, tsize_t);
391extern	int TIFFSetupStrips(TIFF *);
392extern  int TIFFWriteCheck(TIFF*, int, const char *);
393extern	void TIFFFreeDirectory(TIFF*);
394extern  int TIFFCreateDirectory(TIFF*);
395extern	int TIFFLastDirectory(TIFF*);
396extern	int TIFFSetDirectory(TIFF*, tdir_t);
397extern	int TIFFSetSubDirectory(TIFF*, uint32);
398extern	int TIFFUnlinkDirectory(TIFF*, tdir_t);
399extern	int TIFFSetField(TIFF*, ttag_t, ...);
400extern	int TIFFVSetField(TIFF*, ttag_t, va_list);
401extern	int TIFFWriteDirectory(TIFF *);
402extern	int TIFFCheckpointDirectory(TIFF *);
403extern	int TIFFRewriteDirectory(TIFF *);
404extern	int TIFFReassignTagToIgnore(enum TIFFIgnoreSense, int);
405
406#if defined(c_plusplus) || defined(__cplusplus)
407extern	void TIFFPrintDirectory(TIFF*, FILE*, long = 0);
408extern	int TIFFReadScanline(TIFF*, tdata_t, uint32, tsample_t = 0);
409extern	int TIFFWriteScanline(TIFF*, tdata_t, uint32, tsample_t = 0);
410extern	int TIFFReadRGBAImage(TIFF*, uint32, uint32, uint32*, int = 0);
411extern	int TIFFReadRGBAImageOriented(TIFF*, uint32, uint32, uint32*,
412				      int = ORIENTATION_BOTLEFT, int = 0);
413#else
414extern	void TIFFPrintDirectory(TIFF*, FILE*, long);
415extern	int TIFFReadScanline(TIFF*, tdata_t, uint32, tsample_t);
416extern	int TIFFWriteScanline(TIFF*, tdata_t, uint32, tsample_t);
417extern	int TIFFReadRGBAImage(TIFF*, uint32, uint32, uint32*, int);
418extern	int TIFFReadRGBAImageOriented(TIFF*, uint32, uint32, uint32*, int, int);
419#endif
420
421extern	int TIFFReadRGBAStrip(TIFF*, tstrip_t, uint32 * );
422extern	int TIFFReadRGBATile(TIFF*, uint32, uint32, uint32 * );
423extern	int TIFFRGBAImageOK(TIFF*, char [1024]);
424extern	int TIFFRGBAImageBegin(TIFFRGBAImage*, TIFF*, int, char [1024]);
425extern	int TIFFRGBAImageGet(TIFFRGBAImage*, uint32*, uint32, uint32);
426extern	void TIFFRGBAImageEnd(TIFFRGBAImage*);
427extern	TIFF* TIFFOpen(const char*, const char*);
428# ifdef __WIN32__
429extern	TIFF* TIFFOpenW(const wchar_t*, const char*);
430# endif /* __WIN32__ */
431extern	TIFF* TIFFFdOpen(int, const char*, const char*);
432extern	TIFF* TIFFClientOpen(const char*, const char*,
433	    thandle_t,
434	    TIFFReadWriteProc, TIFFReadWriteProc,
435	    TIFFSeekProc, TIFFCloseProc,
436	    TIFFSizeProc,
437	    TIFFMapFileProc, TIFFUnmapFileProc);
438extern	const char* TIFFFileName(TIFF*);
439extern	const char* TIFFSetFileName(TIFF*, const char *);
440extern void TIFFError(const char*, const char*, ...) __attribute__((format (printf,2,3)));
441extern void TIFFErrorExt(thandle_t, const char*, const char*, ...) __attribute__((format (printf,3,4)));
442extern void TIFFWarning(const char*, const char*, ...) __attribute__((format (printf,2,3)));
443extern void TIFFWarningExt(thandle_t, const char*, const char*, ...) __attribute__((format (printf,3,4)));
444extern	TIFFErrorHandler TIFFSetErrorHandler(TIFFErrorHandler);
445extern	TIFFErrorHandlerExt TIFFSetErrorHandlerExt(TIFFErrorHandlerExt);
446extern	TIFFErrorHandler TIFFSetWarningHandler(TIFFErrorHandler);
447extern	TIFFErrorHandlerExt TIFFSetWarningHandlerExt(TIFFErrorHandlerExt);
448extern	TIFFExtendProc TIFFSetTagExtender(TIFFExtendProc);
449extern	ttile_t TIFFComputeTile(TIFF*, uint32, uint32, uint32, tsample_t);
450extern	int TIFFCheckTile(TIFF*, uint32, uint32, uint32, tsample_t);
451extern	ttile_t TIFFNumberOfTiles(TIFF*);
452extern	tsize_t TIFFReadTile(TIFF*,
453	    tdata_t, uint32, uint32, uint32, tsample_t);
454extern	tsize_t TIFFWriteTile(TIFF*,
455	    tdata_t, uint32, uint32, uint32, tsample_t);
456extern	tstrip_t TIFFComputeStrip(TIFF*, uint32, tsample_t);
457extern	tstrip_t TIFFNumberOfStrips(TIFF*);
458extern	tsize_t TIFFReadEncodedStrip(TIFF*, tstrip_t, tdata_t, tsize_t);
459extern	tsize_t TIFFReadRawStrip(TIFF*, tstrip_t, tdata_t, tsize_t);
460extern	tsize_t TIFFReadEncodedTile(TIFF*, ttile_t, tdata_t, tsize_t);
461extern	tsize_t TIFFReadRawTile(TIFF*, ttile_t, tdata_t, tsize_t);
462extern	tsize_t TIFFWriteEncodedStrip(TIFF*, tstrip_t, tdata_t, tsize_t);
463extern	tsize_t TIFFWriteRawStrip(TIFF*, tstrip_t, tdata_t, tsize_t);
464extern	tsize_t TIFFWriteEncodedTile(TIFF*, ttile_t, tdata_t, tsize_t);
465extern	tsize_t TIFFWriteRawTile(TIFF*, ttile_t, tdata_t, tsize_t);
466extern	int TIFFDataWidth(TIFFDataType);    /* table of tag datatype widths */
467extern	void TIFFSetWriteOffset(TIFF*, toff_t);
468extern	void TIFFSwabShort(uint16*);
469extern	void TIFFSwabLong(uint32*);
470extern	void TIFFSwabDouble(double*);
471extern	void TIFFSwabArrayOfShort(uint16*, unsigned long);
472extern	void TIFFSwabArrayOfTriples(uint8*, unsigned long);
473extern	void TIFFSwabArrayOfLong(uint32*, unsigned long);
474extern	void TIFFSwabArrayOfDouble(double*, unsigned long);
475extern	void TIFFReverseBits(unsigned char *, unsigned long);
476extern	const unsigned char* TIFFGetBitRevTable(int);
477
478#if LOGLUV_PUBLIC
479#define U_NEU		0.210526316
480#define V_NEU		0.473684211
481#define UVSCALE		410.
482extern	double LogL16toY(int);
483extern	double LogL10toY(int);
484extern	void XYZtoRGB24(float*, uint8*);
485extern	int uv_decode(double*, double*, int);
486extern	void LogLuv24toXYZ(uint32, float*);
487extern	void LogLuv32toXYZ(uint32, float*);
488#if defined(c_plusplus) || defined(__cplusplus)
489extern	int LogL16fromY(double, int = SGILOGENCODE_NODITHER);
490extern	int LogL10fromY(double, int = SGILOGENCODE_NODITHER);
491extern	int uv_encode(double, double, int = SGILOGENCODE_NODITHER);
492extern	uint32 LogLuv24fromXYZ(float*, int = SGILOGENCODE_NODITHER);
493extern	uint32 LogLuv32fromXYZ(float*, int = SGILOGENCODE_NODITHER);
494#else
495extern	int LogL16fromY(double, int);
496extern	int LogL10fromY(double, int);
497extern	int uv_encode(double, double, int);
498extern	uint32 LogLuv24fromXYZ(float*, int);
499extern	uint32 LogLuv32fromXYZ(float*, int);
500#endif
501#endif /* LOGLUV_PUBLIC */
502
503extern int TIFFCIELabToRGBInit(TIFFCIELabToRGB*, TIFFDisplay *, float*);
504extern void TIFFCIELabToXYZ(TIFFCIELabToRGB *, uint32, int32, int32,
505			    float *, float *, float *);
506extern void TIFFXYZToRGB(TIFFCIELabToRGB *, float, float, float,
507			 uint32 *, uint32 *, uint32 *);
508
509extern int TIFFYCbCrToRGBInit(TIFFYCbCrToRGB*, float*, float*);
510extern void TIFFYCbCrtoRGB(TIFFYCbCrToRGB *, uint32, int32, int32,
511			   uint32 *, uint32 *, uint32 *);
512
513#if defined(c_plusplus) || defined(__cplusplus)
514}
515#endif
516
517#endif /* _TIFFIO_ */
518
519/* vim: set ts=8 sts=8 sw=8 noet: */
520/*
521 * Local Variables:
522 * mode: c
523 * c-basic-offset: 8
524 * fill-column: 78
525 * End:
526 */
527