Home | History | Annotate | Download | only in libtiff
      1 /* $Id: tiffio.h,v 1.94 2017-01-11 19:02:49 erouault Exp $ */
      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  */
     40 typedef 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, and BigTIFF maxes out at 64-bit
     59  *     offsets being the most important, and to ensure use of
     60  *     a consistently unsigned type across architectures.
     61  *     Prior to libtiff 4.0, this was an unsigned 32 bit type.
     62  */
     63 /*
     64  * this is the machine addressing size type, only it's signed, so make it
     65  * int32 on 32bit machines, int64 on 64bit machines
     66  */
     67 typedef TIFF_SSIZE_T tmsize_t;
     68 typedef uint64 toff_t;          /* file offset */
     69 /* the following are deprecated and should be replaced by their defining
     70    counterparts */
     71 typedef uint32 ttag_t;          /* directory tag */
     72 typedef uint16 tdir_t;          /* directory index */
     73 typedef uint16 tsample_t;       /* sample number */
     74 typedef uint32 tstrile_t;       /* strip or tile number */
     75 typedef tstrile_t tstrip_t;     /* strip number */
     76 typedef tstrile_t ttile_t;      /* tile number */
     77 typedef tmsize_t tsize_t;       /* i/o size in bytes */
     78 typedef void* tdata_t;          /* image data ref */
     79 
     80 #if !defined(__WIN32__) && (defined(_WIN32) || defined(WIN32))
     81 #define __WIN32__
     82 #endif
     83 
     84 /*
     85  * On windows you should define USE_WIN32_FILEIO if you are using tif_win32.c
     86  * or AVOID_WIN32_FILEIO if you are using something else (like tif_unix.c).
     87  *
     88  * By default tif_unix.c is assumed.
     89  */
     90 
     91 #if defined(_WINDOWS) || defined(__WIN32__) || defined(_Windows)
     92 #  if !defined(__CYGWIN) && !defined(AVOID_WIN32_FILEIO) && !defined(USE_WIN32_FILEIO)
     93 #    define AVOID_WIN32_FILEIO
     94 #  endif
     95 #endif
     96 
     97 #if defined(USE_WIN32_FILEIO)
     98 # define VC_EXTRALEAN
     99 # include <windows.h>
    100 # ifdef __WIN32__
    101 DECLARE_HANDLE(thandle_t);     /* Win32 file handle */
    102 # else
    103 typedef HFILE thandle_t;       /* client data handle */
    104 # endif /* __WIN32__ */
    105 #else
    106 typedef void* thandle_t;       /* client data handle */
    107 #endif /* USE_WIN32_FILEIO */
    108 
    109 /*
    110  * Flags to pass to TIFFPrintDirectory to control
    111  * printing of data structures that are potentially
    112  * very large.   Bit-or these flags to enable printing
    113  * multiple items.
    114  */
    115 #define TIFFPRINT_NONE	       0x0    /* no extra info */
    116 #define TIFFPRINT_STRIPS       0x1    /* strips/tiles info */
    117 #define TIFFPRINT_CURVES       0x2    /* color/gray response curves */
    118 #define TIFFPRINT_COLORMAP     0x4    /* colormap */
    119 #define TIFFPRINT_JPEGQTABLES  0x100  /* JPEG Q matrices */
    120 #define TIFFPRINT_JPEGACTABLES 0x200  /* JPEG AC tables */
    121 #define TIFFPRINT_JPEGDCTABLES 0x200  /* JPEG DC tables */
    122 
    123 /*
    124  * Colour conversion stuff
    125  */
    126 
    127 /* reference white */
    128 #define D65_X0 (95.0470F)
    129 #define D65_Y0 (100.0F)
    130 #define D65_Z0 (108.8827F)
    131 
    132 #define D50_X0 (96.4250F)
    133 #define D50_Y0 (100.0F)
    134 #define D50_Z0 (82.4680F)
    135 
    136 /* Structure for holding information about a display device. */
    137 
    138 typedef unsigned char TIFFRGBValue;               /* 8-bit samples */
    139 
    140 typedef struct {
    141 	float d_mat[3][3];                        /* XYZ -> luminance matrix */
    142 	float d_YCR;                              /* Light o/p for reference white */
    143 	float d_YCG;
    144 	float d_YCB;
    145 	uint32 d_Vrwr;                            /* Pixel values for ref. white */
    146 	uint32 d_Vrwg;
    147 	uint32 d_Vrwb;
    148 	float d_Y0R;                              /* Residual light for black pixel */
    149 	float d_Y0G;
    150 	float d_Y0B;
    151 	float d_gammaR;                           /* Gamma values for the three guns */
    152 	float d_gammaG;
    153 	float d_gammaB;
    154 } TIFFDisplay;
    155 
    156 typedef struct {                                  /* YCbCr->RGB support */
    157 	TIFFRGBValue* clamptab;                   /* range clamping table */
    158 	int* Cr_r_tab;
    159 	int* Cb_b_tab;
    160 	int32* Cr_g_tab;
    161 	int32* Cb_g_tab;
    162 	int32* Y_tab;
    163 } TIFFYCbCrToRGB;
    164 
    165 typedef struct {                                  /* CIE Lab 1976->RGB support */
    166 	int range;                                /* Size of conversion table */
    167 #define CIELABTORGB_TABLE_RANGE 1500
    168 	float rstep, gstep, bstep;
    169 	float X0, Y0, Z0;                         /* Reference white point */
    170 	TIFFDisplay display;
    171 	float Yr2r[CIELABTORGB_TABLE_RANGE + 1];  /* Conversion of Yr to r */
    172 	float Yg2g[CIELABTORGB_TABLE_RANGE + 1];  /* Conversion of Yg to g */
    173 	float Yb2b[CIELABTORGB_TABLE_RANGE + 1];  /* Conversion of Yb to b */
    174 } TIFFCIELabToRGB;
    175 
    176 /*
    177  * RGBA-style image support.
    178  */
    179 typedef struct _TIFFRGBAImage TIFFRGBAImage;
    180 /*
    181  * The image reading and conversion routines invoke
    182  * ``put routines'' to copy/image/whatever tiles of
    183  * raw image data.  A default set of routines are
    184  * provided to convert/copy raw image data to 8-bit
    185  * packed ABGR format rasters.  Applications can supply
    186  * alternate routines that unpack the data into a
    187  * different format or, for example, unpack the data
    188  * and draw the unpacked raster on the display.
    189  */
    190 typedef void (*tileContigRoutine)
    191     (TIFFRGBAImage*, uint32*, uint32, uint32, uint32, uint32, int32, int32,
    192 	unsigned char*);
    193 typedef void (*tileSeparateRoutine)
    194     (TIFFRGBAImage*, uint32*, uint32, uint32, uint32, uint32, int32, int32,
    195 	unsigned char*, unsigned char*, unsigned char*, unsigned char*);
    196 /*
    197  * RGBA-reader state.
    198  */
    199 struct _TIFFRGBAImage {
    200 	TIFF* tif;                              /* image handle */
    201 	int stoponerr;                          /* stop on read error */
    202 	int isContig;                           /* data is packed/separate */
    203 	int alpha;                              /* type of alpha data present */
    204 	uint32 width;                           /* image width */
    205 	uint32 height;                          /* image height */
    206 	uint16 bitspersample;                   /* image bits/sample */
    207 	uint16 samplesperpixel;                 /* image samples/pixel */
    208 	uint16 orientation;                     /* image orientation */
    209 	uint16 req_orientation;                 /* requested orientation */
    210 	uint16 photometric;                     /* image photometric interp */
    211 	uint16* redcmap;                        /* colormap palette */
    212 	uint16* greencmap;
    213 	uint16* bluecmap;
    214 	/* get image data routine */
    215 	int (*get)(TIFFRGBAImage*, uint32*, uint32, uint32);
    216 	/* put decoded strip/tile */
    217 	union {
    218 	    void (*any)(TIFFRGBAImage*);
    219 	    tileContigRoutine contig;
    220 	    tileSeparateRoutine separate;
    221 	} put;
    222 	TIFFRGBValue* Map;                      /* sample mapping array */
    223 	uint32** BWmap;                         /* black&white map */
    224 	uint32** PALmap;                        /* palette image map */
    225 	TIFFYCbCrToRGB* ycbcr;                  /* YCbCr conversion state */
    226 	TIFFCIELabToRGB* cielab;                /* CIE L*a*b conversion state */
    227 
    228 	uint8* UaToAa;                          /* Unassociated alpha to associated alpha conversion LUT */
    229 	uint8* Bitdepth16To8;                   /* LUT for conversion from 16bit to 8bit values */
    230 
    231 	int row_offset;
    232 	int col_offset;
    233 };
    234 
    235 /*
    236  * Macros for extracting components from the
    237  * packed ABGR form returned by TIFFReadRGBAImage.
    238  */
    239 #define TIFFGetR(abgr) ((abgr) & 0xff)
    240 #define TIFFGetG(abgr) (((abgr) >> 8) & 0xff)
    241 #define TIFFGetB(abgr) (((abgr) >> 16) & 0xff)
    242 #define TIFFGetA(abgr) (((abgr) >> 24) & 0xff)
    243 
    244 /*
    245  * A CODEC is a software package that implements decoding,
    246  * encoding, or decoding+encoding of a compression algorithm.
    247  * The library provides a collection of builtin codecs.
    248  * More codecs may be registered through calls to the library
    249  * and/or the builtin implementations may be overridden.
    250  */
    251 typedef int (*TIFFInitMethod)(TIFF*, int);
    252 typedef struct {
    253 	char* name;
    254 	uint16 scheme;
    255 	TIFFInitMethod init;
    256 } TIFFCodec;
    257 
    258 #include <stdio.h>
    259 #include <stdarg.h>
    260 
    261 /* share internal LogLuv conversion routines? */
    262 #ifndef LOGLUV_PUBLIC
    263 #define LOGLUV_PUBLIC 1
    264 #endif
    265 
    266 #if !defined(__GNUC__) && !defined(__attribute__)
    267 #  define __attribute__(x) /*nothing*/
    268 #endif
    269 
    270 #if defined(c_plusplus) || defined(__cplusplus)
    271 extern "C" {
    272 #endif
    273 typedef void (*TIFFErrorHandler)(const char*, const char*, va_list);
    274 typedef void (*TIFFErrorHandlerExt)(thandle_t, const char*, const char*, va_list);
    275 typedef tmsize_t (*TIFFReadWriteProc)(thandle_t, void*, tmsize_t);
    276 typedef toff_t (*TIFFSeekProc)(thandle_t, toff_t, int);
    277 typedef int (*TIFFCloseProc)(thandle_t);
    278 typedef toff_t (*TIFFSizeProc)(thandle_t);
    279 typedef int (*TIFFMapFileProc)(thandle_t, void** base, toff_t* size);
    280 typedef void (*TIFFUnmapFileProc)(thandle_t, void* base, toff_t size);
    281 typedef void (*TIFFExtendProc)(TIFF*);
    282 
    283 extern const char* TIFFGetVersion(void);
    284 
    285 extern const TIFFCodec* TIFFFindCODEC(uint16);
    286 extern TIFFCodec* TIFFRegisterCODEC(uint16, const char*, TIFFInitMethod);
    287 extern void TIFFUnRegisterCODEC(TIFFCodec*);
    288 extern int TIFFIsCODECConfigured(uint16);
    289 extern TIFFCodec* TIFFGetConfiguredCODECs(void);
    290 
    291 /*
    292  * Auxiliary functions.
    293  */
    294 
    295 extern void* _TIFFmalloc(tmsize_t s);
    296 extern void* _TIFFcalloc(tmsize_t nmemb, tmsize_t siz);
    297 extern void* _TIFFrealloc(void* p, tmsize_t s);
    298 extern void _TIFFmemset(void* p, int v, tmsize_t c);
    299 extern void _TIFFmemcpy(void* d, const void* s, tmsize_t c);
    300 extern int _TIFFmemcmp(const void* p1, const void* p2, tmsize_t c);
    301 extern void _TIFFfree(void* p);
    302 extern int _TIFFIfMultiplicationOverflow(tmsize_t op1, tmsize_t op2);
    303 
    304 /*
    305 ** Stuff, related to tag handling and creating custom tags.
    306 */
    307 extern int TIFFGetTagListCount( TIFF * );
    308 extern uint32 TIFFGetTagListEntry( TIFF *, int tag_index );
    309 
    310 #define TIFF_ANY       TIFF_NOTYPE     /* for field descriptor searching */
    311 #define TIFF_VARIABLE  -1              /* marker for variable length tags */
    312 #define TIFF_SPP       -2              /* marker for SamplesPerPixel tags */
    313 #define TIFF_VARIABLE2 -3              /* marker for uint32 var-length tags */
    314 
    315 #define FIELD_CUSTOM    65
    316 
    317 typedef struct _TIFFField TIFFField;
    318 typedef struct _TIFFFieldArray TIFFFieldArray;
    319 
    320 extern const TIFFField* TIFFFindField(TIFF *, uint32, TIFFDataType);
    321 extern const TIFFField* TIFFFieldWithTag(TIFF*, uint32);
    322 extern const TIFFField* TIFFFieldWithName(TIFF*, const char *);
    323 
    324 extern uint32 TIFFFieldTag(const TIFFField*);
    325 extern const char* TIFFFieldName(const TIFFField*);
    326 extern TIFFDataType TIFFFieldDataType(const TIFFField*);
    327 extern int TIFFFieldPassCount(const TIFFField*);
    328 extern int TIFFFieldReadCount(const TIFFField*);
    329 extern int TIFFFieldWriteCount(const TIFFField*);
    330 
    331 typedef int (*TIFFVSetMethod)(TIFF*, uint32, va_list);
    332 typedef int (*TIFFVGetMethod)(TIFF*, uint32, va_list);
    333 typedef void (*TIFFPrintMethod)(TIFF*, FILE*, long);
    334 
    335 typedef struct {
    336     TIFFVSetMethod vsetfield; /* tag set routine */
    337     TIFFVGetMethod vgetfield; /* tag get routine */
    338     TIFFPrintMethod printdir; /* directory print routine */
    339 } TIFFTagMethods;
    340 
    341 extern  TIFFTagMethods *TIFFAccessTagMethods(TIFF *);
    342 extern  void *TIFFGetClientInfo(TIFF *, const char *);
    343 extern  void TIFFSetClientInfo(TIFF *, void *, const char *);
    344 
    345 extern void TIFFCleanup(TIFF* tif);
    346 extern void TIFFClose(TIFF* tif);
    347 extern int TIFFFlush(TIFF* tif);
    348 extern int TIFFFlushData(TIFF* tif);
    349 extern int TIFFGetField(TIFF* tif, uint32 tag, ...);
    350 extern int TIFFVGetField(TIFF* tif, uint32 tag, va_list ap);
    351 extern int TIFFGetFieldDefaulted(TIFF* tif, uint32 tag, ...);
    352 extern int TIFFVGetFieldDefaulted(TIFF* tif, uint32 tag, va_list ap);
    353 extern int TIFFReadDirectory(TIFF* tif);
    354 extern int TIFFReadCustomDirectory(TIFF* tif, toff_t diroff, const TIFFFieldArray* infoarray);
    355 extern int TIFFReadEXIFDirectory(TIFF* tif, toff_t diroff);
    356 extern uint64 TIFFScanlineSize64(TIFF* tif);
    357 extern tmsize_t TIFFScanlineSize(TIFF* tif);
    358 extern uint64 TIFFRasterScanlineSize64(TIFF* tif);
    359 extern tmsize_t TIFFRasterScanlineSize(TIFF* tif);
    360 extern uint64 TIFFStripSize64(TIFF* tif);
    361 extern tmsize_t TIFFStripSize(TIFF* tif);
    362 extern uint64 TIFFRawStripSize64(TIFF* tif, uint32 strip);
    363 extern tmsize_t TIFFRawStripSize(TIFF* tif, uint32 strip);
    364 extern uint64 TIFFVStripSize64(TIFF* tif, uint32 nrows);
    365 extern tmsize_t TIFFVStripSize(TIFF* tif, uint32 nrows);
    366 extern uint64 TIFFTileRowSize64(TIFF* tif);
    367 extern tmsize_t TIFFTileRowSize(TIFF* tif);
    368 extern uint64 TIFFTileSize64(TIFF* tif);
    369 extern tmsize_t TIFFTileSize(TIFF* tif);
    370 extern uint64 TIFFVTileSize64(TIFF* tif, uint32 nrows);
    371 extern tmsize_t TIFFVTileSize(TIFF* tif, uint32 nrows);
    372 extern uint32 TIFFDefaultStripSize(TIFF* tif, uint32 request);
    373 extern void TIFFDefaultTileSize(TIFF*, uint32*, uint32*);
    374 extern int TIFFFileno(TIFF*);
    375 extern int TIFFSetFileno(TIFF*, int);
    376 extern thandle_t TIFFClientdata(TIFF*);
    377 extern thandle_t TIFFSetClientdata(TIFF*, thandle_t);
    378 extern int TIFFGetMode(TIFF*);
    379 extern int TIFFSetMode(TIFF*, int);
    380 extern int TIFFIsTiled(TIFF*);
    381 extern int TIFFIsByteSwapped(TIFF*);
    382 extern int TIFFIsUpSampled(TIFF*);
    383 extern int TIFFIsMSB2LSB(TIFF*);
    384 extern int TIFFIsBigEndian(TIFF*);
    385 extern TIFFReadWriteProc TIFFGetReadProc(TIFF*);
    386 extern TIFFReadWriteProc TIFFGetWriteProc(TIFF*);
    387 extern TIFFSeekProc TIFFGetSeekProc(TIFF*);
    388 extern TIFFCloseProc TIFFGetCloseProc(TIFF*);
    389 extern TIFFSizeProc TIFFGetSizeProc(TIFF*);
    390 extern TIFFMapFileProc TIFFGetMapFileProc(TIFF*);
    391 extern TIFFUnmapFileProc TIFFGetUnmapFileProc(TIFF*);
    392 extern uint32 TIFFCurrentRow(TIFF*);
    393 extern uint16 TIFFCurrentDirectory(TIFF*);
    394 extern uint16 TIFFNumberOfDirectories(TIFF*);
    395 extern uint64 TIFFCurrentDirOffset(TIFF*);
    396 extern uint32 TIFFCurrentStrip(TIFF*);
    397 extern uint32 TIFFCurrentTile(TIFF* tif);
    398 extern int TIFFReadBufferSetup(TIFF* tif, void* bp, tmsize_t size);
    399 extern int TIFFWriteBufferSetup(TIFF* tif, void* bp, tmsize_t size);
    400 extern int TIFFSetupStrips(TIFF *);
    401 extern int TIFFWriteCheck(TIFF*, int, const char *);
    402 extern void TIFFFreeDirectory(TIFF*);
    403 extern int TIFFCreateDirectory(TIFF*);
    404 extern int TIFFCreateCustomDirectory(TIFF*,const TIFFFieldArray*);
    405 extern int TIFFCreateEXIFDirectory(TIFF*);
    406 extern int TIFFLastDirectory(TIFF*);
    407 extern int TIFFSetDirectory(TIFF*, uint16);
    408 extern int TIFFSetSubDirectory(TIFF*, uint64);
    409 extern int TIFFUnlinkDirectory(TIFF*, uint16);
    410 extern int TIFFSetField(TIFF*, uint32, ...);
    411 extern int TIFFVSetField(TIFF*, uint32, va_list);
    412 extern int TIFFUnsetField(TIFF*, uint32);
    413 extern int TIFFWriteDirectory(TIFF *);
    414 extern int TIFFWriteCustomDirectory(TIFF *, uint64 *);
    415 extern int TIFFCheckpointDirectory(TIFF *);
    416 extern int TIFFRewriteDirectory(TIFF *);
    417 
    418 #if defined(c_plusplus) || defined(__cplusplus)
    419 extern void TIFFPrintDirectory(TIFF*, FILE*, long = 0);
    420 extern int TIFFReadScanline(TIFF* tif, void* buf, uint32 row, uint16 sample = 0);
    421 extern int TIFFWriteScanline(TIFF* tif, void* buf, uint32 row, uint16 sample = 0);
    422 extern int TIFFReadRGBAImage(TIFF*, uint32, uint32, uint32*, int = 0);
    423 extern int TIFFReadRGBAImageOriented(TIFF*, uint32, uint32, uint32*,
    424     int = ORIENTATION_BOTLEFT, int = 0);
    425 #else
    426 extern void TIFFPrintDirectory(TIFF*, FILE*, long);
    427 extern int TIFFReadScanline(TIFF* tif, void* buf, uint32 row, uint16 sample);
    428 extern int TIFFWriteScanline(TIFF* tif, void* buf, uint32 row, uint16 sample);
    429 extern int TIFFReadRGBAImage(TIFF*, uint32, uint32, uint32*, int);
    430 extern int TIFFReadRGBAImageOriented(TIFF*, uint32, uint32, uint32*, int, int);
    431 #endif
    432 
    433 extern int TIFFReadRGBAStrip(TIFF*, uint32, uint32 * );
    434 extern int TIFFReadRGBATile(TIFF*, uint32, uint32, uint32 * );
    435 extern int TIFFReadRGBAStripExt(TIFF*, uint32, uint32 *, int stop_on_error );
    436 extern int TIFFReadRGBATileExt(TIFF*, uint32, uint32, uint32 *, int stop_on_error );
    437 extern int TIFFRGBAImageOK(TIFF*, char [1024]);
    438 extern int TIFFRGBAImageBegin(TIFFRGBAImage*, TIFF*, int, char [1024]);
    439 extern int TIFFRGBAImageGet(TIFFRGBAImage*, uint32*, uint32, uint32);
    440 extern void TIFFRGBAImageEnd(TIFFRGBAImage*);
    441 extern TIFF* TIFFOpen(const char*, const char*);
    442 # ifdef __WIN32__
    443 extern TIFF* TIFFOpenW(const wchar_t*, const char*);
    444 # endif /* __WIN32__ */
    445 extern TIFF* TIFFFdOpen(int, const char*, const char*);
    446 extern TIFF* TIFFClientOpen(const char*, const char*,
    447 	    thandle_t,
    448 	    TIFFReadWriteProc, TIFFReadWriteProc,
    449 	    TIFFSeekProc, TIFFCloseProc,
    450 	    TIFFSizeProc,
    451 	    TIFFMapFileProc, TIFFUnmapFileProc);
    452 extern const char* TIFFFileName(TIFF*);
    453 extern const char* TIFFSetFileName(TIFF*, const char *);
    454 extern void TIFFError(const char*, const char*, ...) __attribute__((__format__ (__printf__,2,3)));
    455 extern void TIFFErrorExt(thandle_t, const char*, const char*, ...) __attribute__((__format__ (__printf__,3,4)));
    456 extern void TIFFWarning(const char*, const char*, ...) __attribute__((__format__ (__printf__,2,3)));
    457 extern void TIFFWarningExt(thandle_t, const char*, const char*, ...) __attribute__((__format__ (__printf__,3,4)));
    458 extern TIFFErrorHandler TIFFSetErrorHandler(TIFFErrorHandler);
    459 extern TIFFErrorHandlerExt TIFFSetErrorHandlerExt(TIFFErrorHandlerExt);
    460 extern TIFFErrorHandler TIFFSetWarningHandler(TIFFErrorHandler);
    461 extern TIFFErrorHandlerExt TIFFSetWarningHandlerExt(TIFFErrorHandlerExt);
    462 extern TIFFExtendProc TIFFSetTagExtender(TIFFExtendProc);
    463 extern uint32 TIFFComputeTile(TIFF* tif, uint32 x, uint32 y, uint32 z, uint16 s);
    464 extern int TIFFCheckTile(TIFF* tif, uint32 x, uint32 y, uint32 z, uint16 s);
    465 extern uint32 TIFFNumberOfTiles(TIFF*);
    466 extern tmsize_t TIFFReadTile(TIFF* tif, void* buf, uint32 x, uint32 y, uint32 z, uint16 s);
    467 extern tmsize_t TIFFWriteTile(TIFF* tif, void* buf, uint32 x, uint32 y, uint32 z, uint16 s);
    468 extern uint32 TIFFComputeStrip(TIFF*, uint32, uint16);
    469 extern uint32 TIFFNumberOfStrips(TIFF*);
    470 extern tmsize_t TIFFReadEncodedStrip(TIFF* tif, uint32 strip, void* buf, tmsize_t size);
    471 extern tmsize_t TIFFReadRawStrip(TIFF* tif, uint32 strip, void* buf, tmsize_t size);
    472 extern tmsize_t TIFFReadEncodedTile(TIFF* tif, uint32 tile, void* buf, tmsize_t size);
    473 extern tmsize_t TIFFReadRawTile(TIFF* tif, uint32 tile, void* buf, tmsize_t size);
    474 extern tmsize_t TIFFWriteEncodedStrip(TIFF* tif, uint32 strip, void* data, tmsize_t cc);
    475 extern tmsize_t TIFFWriteRawStrip(TIFF* tif, uint32 strip, void* data, tmsize_t cc);
    476 extern tmsize_t TIFFWriteEncodedTile(TIFF* tif, uint32 tile, void* data, tmsize_t cc);
    477 extern tmsize_t TIFFWriteRawTile(TIFF* tif, uint32 tile, void* data, tmsize_t cc);
    478 extern int TIFFDataWidth(TIFFDataType);    /* table of tag datatype widths */
    479 extern void TIFFSetWriteOffset(TIFF* tif, toff_t off);
    480 extern void TIFFSwabShort(uint16*);
    481 extern void TIFFSwabLong(uint32*);
    482 extern void TIFFSwabLong8(uint64*);
    483 extern void TIFFSwabFloat(float*);
    484 extern void TIFFSwabDouble(double*);
    485 extern void TIFFSwabArrayOfShort(uint16* wp, tmsize_t n);
    486 extern void TIFFSwabArrayOfTriples(uint8* tp, tmsize_t n);
    487 extern void TIFFSwabArrayOfLong(uint32* lp, tmsize_t n);
    488 extern void TIFFSwabArrayOfLong8(uint64* lp, tmsize_t n);
    489 extern void TIFFSwabArrayOfFloat(float* fp, tmsize_t n);
    490 extern void TIFFSwabArrayOfDouble(double* dp, tmsize_t n);
    491 extern void TIFFReverseBits(uint8* cp, tmsize_t n);
    492 extern const unsigned char* TIFFGetBitRevTable(int);
    493 
    494 #ifdef LOGLUV_PUBLIC
    495 #define U_NEU		0.210526316
    496 #define V_NEU		0.473684211
    497 #define UVSCALE		410.
    498 extern double LogL16toY(int);
    499 extern double LogL10toY(int);
    500 extern void XYZtoRGB24(float*, uint8*);
    501 extern int uv_decode(double*, double*, int);
    502 extern void LogLuv24toXYZ(uint32, float*);
    503 extern void LogLuv32toXYZ(uint32, float*);
    504 #if defined(c_plusplus) || defined(__cplusplus)
    505 extern int LogL16fromY(double, int = SGILOGENCODE_NODITHER);
    506 extern int LogL10fromY(double, int = SGILOGENCODE_NODITHER);
    507 extern int uv_encode(double, double, int = SGILOGENCODE_NODITHER);
    508 extern uint32 LogLuv24fromXYZ(float*, int = SGILOGENCODE_NODITHER);
    509 extern uint32 LogLuv32fromXYZ(float*, int = SGILOGENCODE_NODITHER);
    510 #else
    511 extern int LogL16fromY(double, int);
    512 extern int LogL10fromY(double, int);
    513 extern int uv_encode(double, double, int);
    514 extern uint32 LogLuv24fromXYZ(float*, int);
    515 extern uint32 LogLuv32fromXYZ(float*, int);
    516 #endif
    517 #endif /* LOGLUV_PUBLIC */
    518 
    519 extern int TIFFCIELabToRGBInit(TIFFCIELabToRGB*, const TIFFDisplay *, float*);
    520 extern void TIFFCIELabToXYZ(TIFFCIELabToRGB *, uint32, int32, int32,
    521     float *, float *, float *);
    522 extern void TIFFXYZToRGB(TIFFCIELabToRGB *, float, float, float,
    523     uint32 *, uint32 *, uint32 *);
    524 
    525 extern int TIFFYCbCrToRGBInit(TIFFYCbCrToRGB*, float*, float*);
    526 extern void TIFFYCbCrtoRGB(TIFFYCbCrToRGB *, uint32, int32, int32,
    527     uint32 *, uint32 *, uint32 *);
    528 
    529 /****************************************************************************
    530  *               O B S O L E T E D    I N T E R F A C E S
    531  *
    532  * Don't use this stuff in your applications, it may be removed in the future
    533  * libtiff versions.
    534  ****************************************************************************/
    535 typedef	struct {
    536 	ttag_t	field_tag;		/* field's tag */
    537 	short	field_readcount;	/* read count/TIFF_VARIABLE/TIFF_SPP */
    538 	short	field_writecount;	/* write count/TIFF_VARIABLE */
    539 	TIFFDataType field_type;	/* type of associated data */
    540         unsigned short field_bit;	/* bit in fieldsset bit vector */
    541 	unsigned char field_oktochange;	/* if true, can change while writing */
    542 	unsigned char field_passcount;	/* if true, pass dir count on set */
    543 	char	*field_name;		/* ASCII name */
    544 } TIFFFieldInfo;
    545 
    546 extern int TIFFMergeFieldInfo(TIFF*, const TIFFFieldInfo[], uint32);
    547 
    548 #if defined(c_plusplus) || defined(__cplusplus)
    549 }
    550 #endif
    551 
    552 #endif /* _TIFFIO_ */
    553 
    554 /* vim: set ts=8 sts=8 sw=8 noet: */
    555 /*
    556  * Local Variables:
    557  * mode: c
    558  * c-basic-offset: 8
    559  * fill-column: 78
    560  * End:
    561  */
    562