xref: /aosp_15_r20/external/pdfium/third_party/libtiff/tiffio.h (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1*3ac0a46fSAndroid Build Coastguard Worker /*
2*3ac0a46fSAndroid Build Coastguard Worker  * Copyright (c) 1988-1997 Sam Leffler
3*3ac0a46fSAndroid Build Coastguard Worker  * Copyright (c) 1991-1997 Silicon Graphics, Inc.
4*3ac0a46fSAndroid Build Coastguard Worker  *
5*3ac0a46fSAndroid Build Coastguard Worker  * Permission to use, copy, modify, distribute, and sell this software and
6*3ac0a46fSAndroid Build Coastguard Worker  * its documentation for any purpose is hereby granted without fee, provided
7*3ac0a46fSAndroid Build Coastguard Worker  * that (i) the above copyright notices and this permission notice appear in
8*3ac0a46fSAndroid Build Coastguard Worker  * all copies of the software and related documentation, and (ii) the names of
9*3ac0a46fSAndroid Build Coastguard Worker  * Sam Leffler and Silicon Graphics may not be used in any advertising or
10*3ac0a46fSAndroid Build Coastguard Worker  * publicity relating to the software without the specific, prior written
11*3ac0a46fSAndroid Build Coastguard Worker  * permission of Sam Leffler and Silicon Graphics.
12*3ac0a46fSAndroid Build Coastguard Worker  *
13*3ac0a46fSAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
14*3ac0a46fSAndroid Build Coastguard Worker  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
15*3ac0a46fSAndroid Build Coastguard Worker  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
16*3ac0a46fSAndroid Build Coastguard Worker  *
17*3ac0a46fSAndroid Build Coastguard Worker  * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
18*3ac0a46fSAndroid Build Coastguard Worker  * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
19*3ac0a46fSAndroid Build Coastguard Worker  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
20*3ac0a46fSAndroid Build Coastguard Worker  * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
21*3ac0a46fSAndroid Build Coastguard Worker  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
22*3ac0a46fSAndroid Build Coastguard Worker  * OF THIS SOFTWARE.
23*3ac0a46fSAndroid Build Coastguard Worker  */
24*3ac0a46fSAndroid Build Coastguard Worker 
25*3ac0a46fSAndroid Build Coastguard Worker #ifndef _TIFFIO_
26*3ac0a46fSAndroid Build Coastguard Worker #define _TIFFIO_
27*3ac0a46fSAndroid Build Coastguard Worker 
28*3ac0a46fSAndroid Build Coastguard Worker /*
29*3ac0a46fSAndroid Build Coastguard Worker  * TIFF I/O Library Definitions.
30*3ac0a46fSAndroid Build Coastguard Worker  */
31*3ac0a46fSAndroid Build Coastguard Worker #include "tiff.h"
32*3ac0a46fSAndroid Build Coastguard Worker #include "tiffvers.h"
33*3ac0a46fSAndroid Build Coastguard Worker 
34*3ac0a46fSAndroid Build Coastguard Worker /*
35*3ac0a46fSAndroid Build Coastguard Worker  * TIFF is defined as an incomplete type to hide the
36*3ac0a46fSAndroid Build Coastguard Worker  * library's internal data structures from clients.
37*3ac0a46fSAndroid Build Coastguard Worker  */
38*3ac0a46fSAndroid Build Coastguard Worker typedef struct tiff TIFF;
39*3ac0a46fSAndroid Build Coastguard Worker 
40*3ac0a46fSAndroid Build Coastguard Worker /*
41*3ac0a46fSAndroid Build Coastguard Worker  * The following typedefs define the intrinsic size of
42*3ac0a46fSAndroid Build Coastguard Worker  * data types used in the *exported* interfaces.  These
43*3ac0a46fSAndroid Build Coastguard Worker  * definitions depend on the proper definition of types
44*3ac0a46fSAndroid Build Coastguard Worker  * in tiff.h.  Note also that the varargs interface used
45*3ac0a46fSAndroid Build Coastguard Worker  * to pass tag types and values uses the types defined in
46*3ac0a46fSAndroid Build Coastguard Worker  * tiff.h directly.
47*3ac0a46fSAndroid Build Coastguard Worker  *
48*3ac0a46fSAndroid Build Coastguard Worker  * NB: ttag_t is unsigned int and not unsigned short because
49*3ac0a46fSAndroid Build Coastguard Worker  *     ANSI C requires that the type before the ellipsis be a
50*3ac0a46fSAndroid Build Coastguard Worker  *     promoted type (i.e. one of int, unsigned int, pointer,
51*3ac0a46fSAndroid Build Coastguard Worker  *     or double) and because we defined pseudo-tags that are
52*3ac0a46fSAndroid Build Coastguard Worker  *     outside the range of legal Aldus-assigned tags.
53*3ac0a46fSAndroid Build Coastguard Worker  * NB: tsize_t is signed and not unsigned because some functions
54*3ac0a46fSAndroid Build Coastguard Worker  *     return -1.
55*3ac0a46fSAndroid Build Coastguard Worker  * NB: toff_t is not off_t for many reasons; TIFFs max out at
56*3ac0a46fSAndroid Build Coastguard Worker  *     32-bit file offsets, and BigTIFF maxes out at 64-bit
57*3ac0a46fSAndroid Build Coastguard Worker  *     offsets being the most important, and to ensure use of
58*3ac0a46fSAndroid Build Coastguard Worker  *     a consistently unsigned type across architectures.
59*3ac0a46fSAndroid Build Coastguard Worker  *     Prior to libtiff 4.0, this was an unsigned 32 bit type.
60*3ac0a46fSAndroid Build Coastguard Worker  */
61*3ac0a46fSAndroid Build Coastguard Worker /*
62*3ac0a46fSAndroid Build Coastguard Worker  * this is the machine addressing size type, only it's signed, so make it
63*3ac0a46fSAndroid Build Coastguard Worker  * int32_t on 32bit machines, int64_t on 64bit machines
64*3ac0a46fSAndroid Build Coastguard Worker  */
65*3ac0a46fSAndroid Build Coastguard Worker typedef TIFF_SSIZE_T tmsize_t;
66*3ac0a46fSAndroid Build Coastguard Worker #define TIFF_TMSIZE_T_MAX (tmsize_t)(SIZE_MAX >> 1)
67*3ac0a46fSAndroid Build Coastguard Worker 
68*3ac0a46fSAndroid Build Coastguard Worker typedef uint64_t toff_t; /* file offset */
69*3ac0a46fSAndroid Build Coastguard Worker /* the following are deprecated and should be replaced by their defining
70*3ac0a46fSAndroid Build Coastguard Worker    counterparts */
71*3ac0a46fSAndroid Build Coastguard Worker typedef uint32_t ttag_t;    /* directory tag */
72*3ac0a46fSAndroid Build Coastguard Worker typedef uint32_t tdir_t;    /* directory index */
73*3ac0a46fSAndroid Build Coastguard Worker typedef uint16_t tsample_t; /* sample number */
74*3ac0a46fSAndroid Build Coastguard Worker typedef uint32_t tstrile_t; /* strip or tile number */
75*3ac0a46fSAndroid Build Coastguard Worker typedef tstrile_t tstrip_t; /* strip number */
76*3ac0a46fSAndroid Build Coastguard Worker typedef tstrile_t ttile_t;  /* tile number */
77*3ac0a46fSAndroid Build Coastguard Worker typedef tmsize_t tsize_t;   /* i/o size in bytes */
78*3ac0a46fSAndroid Build Coastguard Worker typedef void *tdata_t;      /* image data ref */
79*3ac0a46fSAndroid Build Coastguard Worker 
80*3ac0a46fSAndroid Build Coastguard Worker #if !defined(__WIN32__) && (defined(_WIN32) || defined(WIN32))
81*3ac0a46fSAndroid Build Coastguard Worker #define __WIN32__
82*3ac0a46fSAndroid Build Coastguard Worker #endif
83*3ac0a46fSAndroid Build Coastguard Worker 
84*3ac0a46fSAndroid Build Coastguard Worker /*
85*3ac0a46fSAndroid Build Coastguard Worker  * On windows you should define USE_WIN32_FILEIO if you are using tif_win32.c
86*3ac0a46fSAndroid Build Coastguard Worker  * or AVOID_WIN32_FILEIO if you are using something else (like tif_unix.c).
87*3ac0a46fSAndroid Build Coastguard Worker  *
88*3ac0a46fSAndroid Build Coastguard Worker  * By default tif_unix.c is assumed.
89*3ac0a46fSAndroid Build Coastguard Worker  */
90*3ac0a46fSAndroid Build Coastguard Worker 
91*3ac0a46fSAndroid Build Coastguard Worker #if defined(_WINDOWS) || defined(__WIN32__) || defined(_Windows)
92*3ac0a46fSAndroid Build Coastguard Worker #if !defined(__CYGWIN) && !defined(AVOID_WIN32_FILEIO) &&                      \
93*3ac0a46fSAndroid Build Coastguard Worker     !defined(USE_WIN32_FILEIO)
94*3ac0a46fSAndroid Build Coastguard Worker #define AVOID_WIN32_FILEIO
95*3ac0a46fSAndroid Build Coastguard Worker #endif
96*3ac0a46fSAndroid Build Coastguard Worker #endif
97*3ac0a46fSAndroid Build Coastguard Worker 
98*3ac0a46fSAndroid Build Coastguard Worker #if defined(USE_WIN32_FILEIO)
99*3ac0a46fSAndroid Build Coastguard Worker #define VC_EXTRALEAN
100*3ac0a46fSAndroid Build Coastguard Worker #include <windows.h>
101*3ac0a46fSAndroid Build Coastguard Worker #ifdef __WIN32__
102*3ac0a46fSAndroid Build Coastguard Worker DECLARE_HANDLE(thandle_t); /* Win32 file handle */
103*3ac0a46fSAndroid Build Coastguard Worker #else
104*3ac0a46fSAndroid Build Coastguard Worker typedef HFILE thandle_t; /* client data handle */
105*3ac0a46fSAndroid Build Coastguard Worker #endif /* __WIN32__ */
106*3ac0a46fSAndroid Build Coastguard Worker #else
107*3ac0a46fSAndroid Build Coastguard Worker typedef void *thandle_t; /* client data handle */
108*3ac0a46fSAndroid Build Coastguard Worker #endif /* USE_WIN32_FILEIO */
109*3ac0a46fSAndroid Build Coastguard Worker 
110*3ac0a46fSAndroid Build Coastguard Worker /*
111*3ac0a46fSAndroid Build Coastguard Worker  * Flags to pass to TIFFPrintDirectory to control
112*3ac0a46fSAndroid Build Coastguard Worker  * printing of data structures that are potentially
113*3ac0a46fSAndroid Build Coastguard Worker  * very large.   Bit-or these flags to enable printing
114*3ac0a46fSAndroid Build Coastguard Worker  * multiple items.
115*3ac0a46fSAndroid Build Coastguard Worker  */
116*3ac0a46fSAndroid Build Coastguard Worker #define TIFFPRINT_NONE 0x0           /* no extra info */
117*3ac0a46fSAndroid Build Coastguard Worker #define TIFFPRINT_STRIPS 0x1         /* strips/tiles info */
118*3ac0a46fSAndroid Build Coastguard Worker #define TIFFPRINT_CURVES 0x2         /* color/gray response curves */
119*3ac0a46fSAndroid Build Coastguard Worker #define TIFFPRINT_COLORMAP 0x4       /* colormap */
120*3ac0a46fSAndroid Build Coastguard Worker #define TIFFPRINT_JPEGQTABLES 0x100  /* JPEG Q matrices */
121*3ac0a46fSAndroid Build Coastguard Worker #define TIFFPRINT_JPEGACTABLES 0x200 /* JPEG AC tables */
122*3ac0a46fSAndroid Build Coastguard Worker #define TIFFPRINT_JPEGDCTABLES 0x200 /* JPEG DC tables */
123*3ac0a46fSAndroid Build Coastguard Worker 
124*3ac0a46fSAndroid Build Coastguard Worker /*
125*3ac0a46fSAndroid Build Coastguard Worker  * Colour conversion stuff
126*3ac0a46fSAndroid Build Coastguard Worker  */
127*3ac0a46fSAndroid Build Coastguard Worker 
128*3ac0a46fSAndroid Build Coastguard Worker /* reference white */
129*3ac0a46fSAndroid Build Coastguard Worker #define D65_X0 (95.0470F)
130*3ac0a46fSAndroid Build Coastguard Worker #define D65_Y0 (100.0F)
131*3ac0a46fSAndroid Build Coastguard Worker #define D65_Z0 (108.8827F)
132*3ac0a46fSAndroid Build Coastguard Worker 
133*3ac0a46fSAndroid Build Coastguard Worker #define D50_X0 (96.4250F)
134*3ac0a46fSAndroid Build Coastguard Worker #define D50_Y0 (100.0F)
135*3ac0a46fSAndroid Build Coastguard Worker #define D50_Z0 (82.4680F)
136*3ac0a46fSAndroid Build Coastguard Worker 
137*3ac0a46fSAndroid Build Coastguard Worker /* Structure for holding information about a display device. */
138*3ac0a46fSAndroid Build Coastguard Worker 
139*3ac0a46fSAndroid Build Coastguard Worker typedef unsigned char TIFFRGBValue; /* 8-bit samples */
140*3ac0a46fSAndroid Build Coastguard Worker 
141*3ac0a46fSAndroid Build Coastguard Worker typedef struct
142*3ac0a46fSAndroid Build Coastguard Worker {
143*3ac0a46fSAndroid Build Coastguard Worker     float d_mat[3][3]; /* XYZ -> luminance matrix */
144*3ac0a46fSAndroid Build Coastguard Worker     float d_YCR;       /* Light o/p for reference white */
145*3ac0a46fSAndroid Build Coastguard Worker     float d_YCG;
146*3ac0a46fSAndroid Build Coastguard Worker     float d_YCB;
147*3ac0a46fSAndroid Build Coastguard Worker     uint32_t d_Vrwr; /* Pixel values for ref. white */
148*3ac0a46fSAndroid Build Coastguard Worker     uint32_t d_Vrwg;
149*3ac0a46fSAndroid Build Coastguard Worker     uint32_t d_Vrwb;
150*3ac0a46fSAndroid Build Coastguard Worker     float d_Y0R; /* Residual light for black pixel */
151*3ac0a46fSAndroid Build Coastguard Worker     float d_Y0G;
152*3ac0a46fSAndroid Build Coastguard Worker     float d_Y0B;
153*3ac0a46fSAndroid Build Coastguard Worker     float d_gammaR; /* Gamma values for the three guns */
154*3ac0a46fSAndroid Build Coastguard Worker     float d_gammaG;
155*3ac0a46fSAndroid Build Coastguard Worker     float d_gammaB;
156*3ac0a46fSAndroid Build Coastguard Worker } TIFFDisplay;
157*3ac0a46fSAndroid Build Coastguard Worker 
158*3ac0a46fSAndroid Build Coastguard Worker typedef struct
159*3ac0a46fSAndroid Build Coastguard Worker {                           /* YCbCr->RGB support */
160*3ac0a46fSAndroid Build Coastguard Worker     TIFFRGBValue *clamptab; /* range clamping table */
161*3ac0a46fSAndroid Build Coastguard Worker     int *Cr_r_tab;
162*3ac0a46fSAndroid Build Coastguard Worker     int *Cb_b_tab;
163*3ac0a46fSAndroid Build Coastguard Worker     int32_t *Cr_g_tab;
164*3ac0a46fSAndroid Build Coastguard Worker     int32_t *Cb_g_tab;
165*3ac0a46fSAndroid Build Coastguard Worker     int32_t *Y_tab;
166*3ac0a46fSAndroid Build Coastguard Worker } TIFFYCbCrToRGB;
167*3ac0a46fSAndroid Build Coastguard Worker 
168*3ac0a46fSAndroid Build Coastguard Worker typedef struct
169*3ac0a46fSAndroid Build Coastguard Worker {              /* CIE Lab 1976->RGB support */
170*3ac0a46fSAndroid Build Coastguard Worker     int range; /* Size of conversion table */
171*3ac0a46fSAndroid Build Coastguard Worker #define CIELABTORGB_TABLE_RANGE 1500
172*3ac0a46fSAndroid Build Coastguard Worker     float rstep, gstep, bstep;
173*3ac0a46fSAndroid Build Coastguard Worker     float X0, Y0, Z0; /* Reference white point */
174*3ac0a46fSAndroid Build Coastguard Worker     TIFFDisplay display;
175*3ac0a46fSAndroid Build Coastguard Worker     float Yr2r[CIELABTORGB_TABLE_RANGE + 1]; /* Conversion of Yr to r */
176*3ac0a46fSAndroid Build Coastguard Worker     float Yg2g[CIELABTORGB_TABLE_RANGE + 1]; /* Conversion of Yg to g */
177*3ac0a46fSAndroid Build Coastguard Worker     float Yb2b[CIELABTORGB_TABLE_RANGE + 1]; /* Conversion of Yb to b */
178*3ac0a46fSAndroid Build Coastguard Worker } TIFFCIELabToRGB;
179*3ac0a46fSAndroid Build Coastguard Worker 
180*3ac0a46fSAndroid Build Coastguard Worker /*
181*3ac0a46fSAndroid Build Coastguard Worker  * RGBA-style image support.
182*3ac0a46fSAndroid Build Coastguard Worker  */
183*3ac0a46fSAndroid Build Coastguard Worker typedef struct _TIFFRGBAImage TIFFRGBAImage;
184*3ac0a46fSAndroid Build Coastguard Worker /*
185*3ac0a46fSAndroid Build Coastguard Worker  * The image reading and conversion routines invoke
186*3ac0a46fSAndroid Build Coastguard Worker  * ``put routines'' to copy/image/whatever tiles of
187*3ac0a46fSAndroid Build Coastguard Worker  * raw image data.  A default set of routines are
188*3ac0a46fSAndroid Build Coastguard Worker  * provided to convert/copy raw image data to 8-bit
189*3ac0a46fSAndroid Build Coastguard Worker  * packed ABGR format rasters.  Applications can supply
190*3ac0a46fSAndroid Build Coastguard Worker  * alternate routines that unpack the data into a
191*3ac0a46fSAndroid Build Coastguard Worker  * different format or, for example, unpack the data
192*3ac0a46fSAndroid Build Coastguard Worker  * and draw the unpacked raster on the display.
193*3ac0a46fSAndroid Build Coastguard Worker  */
194*3ac0a46fSAndroid Build Coastguard Worker typedef void (*tileContigRoutine)(TIFFRGBAImage *, uint32_t *, uint32_t,
195*3ac0a46fSAndroid Build Coastguard Worker                                   uint32_t, uint32_t, uint32_t, int32_t,
196*3ac0a46fSAndroid Build Coastguard Worker                                   int32_t, unsigned char *);
197*3ac0a46fSAndroid Build Coastguard Worker typedef void (*tileSeparateRoutine)(TIFFRGBAImage *, uint32_t *, uint32_t,
198*3ac0a46fSAndroid Build Coastguard Worker                                     uint32_t, uint32_t, uint32_t, int32_t,
199*3ac0a46fSAndroid Build Coastguard Worker                                     int32_t, unsigned char *, unsigned char *,
200*3ac0a46fSAndroid Build Coastguard Worker                                     unsigned char *, unsigned char *);
201*3ac0a46fSAndroid Build Coastguard Worker /*
202*3ac0a46fSAndroid Build Coastguard Worker  * RGBA-reader state.
203*3ac0a46fSAndroid Build Coastguard Worker  */
204*3ac0a46fSAndroid Build Coastguard Worker struct _TIFFRGBAImage
205*3ac0a46fSAndroid Build Coastguard Worker {
206*3ac0a46fSAndroid Build Coastguard Worker     TIFF *tif;                /* image handle */
207*3ac0a46fSAndroid Build Coastguard Worker     int stoponerr;            /* stop on read error */
208*3ac0a46fSAndroid Build Coastguard Worker     int isContig;             /* data is packed/separate */
209*3ac0a46fSAndroid Build Coastguard Worker     int alpha;                /* type of alpha data present */
210*3ac0a46fSAndroid Build Coastguard Worker     uint32_t width;           /* image width */
211*3ac0a46fSAndroid Build Coastguard Worker     uint32_t height;          /* image height */
212*3ac0a46fSAndroid Build Coastguard Worker     uint16_t bitspersample;   /* image bits/sample */
213*3ac0a46fSAndroid Build Coastguard Worker     uint16_t samplesperpixel; /* image samples/pixel */
214*3ac0a46fSAndroid Build Coastguard Worker     uint16_t orientation;     /* image orientation */
215*3ac0a46fSAndroid Build Coastguard Worker     uint16_t req_orientation; /* requested orientation */
216*3ac0a46fSAndroid Build Coastguard Worker     uint16_t photometric;     /* image photometric interp */
217*3ac0a46fSAndroid Build Coastguard Worker     uint16_t *redcmap;        /* colormap palette */
218*3ac0a46fSAndroid Build Coastguard Worker     uint16_t *greencmap;
219*3ac0a46fSAndroid Build Coastguard Worker     uint16_t *bluecmap;
220*3ac0a46fSAndroid Build Coastguard Worker     /* get image data routine */
221*3ac0a46fSAndroid Build Coastguard Worker     int (*get)(TIFFRGBAImage *, uint32_t *, uint32_t, uint32_t);
222*3ac0a46fSAndroid Build Coastguard Worker     /* put decoded strip/tile */
223*3ac0a46fSAndroid Build Coastguard Worker     union
224*3ac0a46fSAndroid Build Coastguard Worker     {
225*3ac0a46fSAndroid Build Coastguard Worker         void (*any)(TIFFRGBAImage *);
226*3ac0a46fSAndroid Build Coastguard Worker         tileContigRoutine contig;
227*3ac0a46fSAndroid Build Coastguard Worker         tileSeparateRoutine separate;
228*3ac0a46fSAndroid Build Coastguard Worker     } put;
229*3ac0a46fSAndroid Build Coastguard Worker     TIFFRGBValue *Map;       /* sample mapping array */
230*3ac0a46fSAndroid Build Coastguard Worker     uint32_t **BWmap;        /* black&white map */
231*3ac0a46fSAndroid Build Coastguard Worker     uint32_t **PALmap;       /* palette image map */
232*3ac0a46fSAndroid Build Coastguard Worker     TIFFYCbCrToRGB *ycbcr;   /* YCbCr conversion state */
233*3ac0a46fSAndroid Build Coastguard Worker     TIFFCIELabToRGB *cielab; /* CIE L*a*b conversion state */
234*3ac0a46fSAndroid Build Coastguard Worker 
235*3ac0a46fSAndroid Build Coastguard Worker     uint8_t *UaToAa; /* Unassociated alpha to associated alpha conversion LUT */
236*3ac0a46fSAndroid Build Coastguard Worker     uint8_t *Bitdepth16To8; /* LUT for conversion from 16bit to 8bit values */
237*3ac0a46fSAndroid Build Coastguard Worker 
238*3ac0a46fSAndroid Build Coastguard Worker     int row_offset;
239*3ac0a46fSAndroid Build Coastguard Worker     int col_offset;
240*3ac0a46fSAndroid Build Coastguard Worker };
241*3ac0a46fSAndroid Build Coastguard Worker 
242*3ac0a46fSAndroid Build Coastguard Worker /*
243*3ac0a46fSAndroid Build Coastguard Worker  * Macros for extracting components from the
244*3ac0a46fSAndroid Build Coastguard Worker  * packed ABGR form returned by TIFFReadRGBAImage.
245*3ac0a46fSAndroid Build Coastguard Worker  */
246*3ac0a46fSAndroid Build Coastguard Worker #define TIFFGetR(abgr) ((abgr)&0xff)
247*3ac0a46fSAndroid Build Coastguard Worker #define TIFFGetG(abgr) (((abgr) >> 8) & 0xff)
248*3ac0a46fSAndroid Build Coastguard Worker #define TIFFGetB(abgr) (((abgr) >> 16) & 0xff)
249*3ac0a46fSAndroid Build Coastguard Worker #define TIFFGetA(abgr) (((abgr) >> 24) & 0xff)
250*3ac0a46fSAndroid Build Coastguard Worker 
251*3ac0a46fSAndroid Build Coastguard Worker /*
252*3ac0a46fSAndroid Build Coastguard Worker  * A CODEC is a software package that implements decoding,
253*3ac0a46fSAndroid Build Coastguard Worker  * encoding, or decoding+encoding of a compression algorithm.
254*3ac0a46fSAndroid Build Coastguard Worker  * The library provides a collection of builtin codecs.
255*3ac0a46fSAndroid Build Coastguard Worker  * More codecs may be registered through calls to the library
256*3ac0a46fSAndroid Build Coastguard Worker  * and/or the builtin implementations may be overridden.
257*3ac0a46fSAndroid Build Coastguard Worker  */
258*3ac0a46fSAndroid Build Coastguard Worker typedef int (*TIFFInitMethod)(TIFF *, int);
259*3ac0a46fSAndroid Build Coastguard Worker typedef struct
260*3ac0a46fSAndroid Build Coastguard Worker {
261*3ac0a46fSAndroid Build Coastguard Worker     char *name;
262*3ac0a46fSAndroid Build Coastguard Worker     uint16_t scheme;
263*3ac0a46fSAndroid Build Coastguard Worker     TIFFInitMethod init;
264*3ac0a46fSAndroid Build Coastguard Worker } TIFFCodec;
265*3ac0a46fSAndroid Build Coastguard Worker 
266*3ac0a46fSAndroid Build Coastguard Worker typedef struct
267*3ac0a46fSAndroid Build Coastguard Worker {
268*3ac0a46fSAndroid Build Coastguard Worker     uint32_t uNum;
269*3ac0a46fSAndroid Build Coastguard Worker     uint32_t uDenom;
270*3ac0a46fSAndroid Build Coastguard Worker } TIFFRational_t;
271*3ac0a46fSAndroid Build Coastguard Worker 
272*3ac0a46fSAndroid Build Coastguard Worker #include <stdarg.h>
273*3ac0a46fSAndroid Build Coastguard Worker #include <stdio.h>
274*3ac0a46fSAndroid Build Coastguard Worker 
275*3ac0a46fSAndroid Build Coastguard Worker /* share internal LogLuv conversion routines? */
276*3ac0a46fSAndroid Build Coastguard Worker #ifndef LOGLUV_PUBLIC
277*3ac0a46fSAndroid Build Coastguard Worker #define LOGLUV_PUBLIC 1
278*3ac0a46fSAndroid Build Coastguard Worker #endif
279*3ac0a46fSAndroid Build Coastguard Worker 
280*3ac0a46fSAndroid Build Coastguard Worker #if defined(__GNUC__) || defined(__attribute__)
281*3ac0a46fSAndroid Build Coastguard Worker #define TIFF_ATTRIBUTE(x) __attribute__(x)
282*3ac0a46fSAndroid Build Coastguard Worker #else
283*3ac0a46fSAndroid Build Coastguard Worker #define TIFF_ATTRIBUTE(x) /*nothing*/
284*3ac0a46fSAndroid Build Coastguard Worker #endif
285*3ac0a46fSAndroid Build Coastguard Worker 
286*3ac0a46fSAndroid Build Coastguard Worker #if defined(c_plusplus) || defined(__cplusplus)
287*3ac0a46fSAndroid Build Coastguard Worker extern "C"
288*3ac0a46fSAndroid Build Coastguard Worker {
289*3ac0a46fSAndroid Build Coastguard Worker #endif
290*3ac0a46fSAndroid Build Coastguard Worker     typedef void (*TIFFErrorHandler)(const char *, const char *, va_list);
291*3ac0a46fSAndroid Build Coastguard Worker     typedef void (*TIFFErrorHandlerExt)(thandle_t, const char *, const char *,
292*3ac0a46fSAndroid Build Coastguard Worker                                         va_list);
293*3ac0a46fSAndroid Build Coastguard Worker     typedef int (*TIFFErrorHandlerExtR)(TIFF *, void *user_data, const char *,
294*3ac0a46fSAndroid Build Coastguard Worker                                         const char *, va_list);
295*3ac0a46fSAndroid Build Coastguard Worker     typedef tmsize_t (*TIFFReadWriteProc)(thandle_t, void *, tmsize_t);
296*3ac0a46fSAndroid Build Coastguard Worker     typedef toff_t (*TIFFSeekProc)(thandle_t, toff_t, int);
297*3ac0a46fSAndroid Build Coastguard Worker     typedef int (*TIFFCloseProc)(thandle_t);
298*3ac0a46fSAndroid Build Coastguard Worker     typedef toff_t (*TIFFSizeProc)(thandle_t);
299*3ac0a46fSAndroid Build Coastguard Worker     typedef int (*TIFFMapFileProc)(thandle_t, void **base, toff_t *size);
300*3ac0a46fSAndroid Build Coastguard Worker     typedef void (*TIFFUnmapFileProc)(thandle_t, void *base, toff_t size);
301*3ac0a46fSAndroid Build Coastguard Worker     typedef void (*TIFFExtendProc)(TIFF *);
302*3ac0a46fSAndroid Build Coastguard Worker 
303*3ac0a46fSAndroid Build Coastguard Worker     extern const char *TIFFGetVersion(void);
304*3ac0a46fSAndroid Build Coastguard Worker 
305*3ac0a46fSAndroid Build Coastguard Worker     extern const TIFFCodec *TIFFFindCODEC(uint16_t);
306*3ac0a46fSAndroid Build Coastguard Worker     extern TIFFCodec *TIFFRegisterCODEC(uint16_t, const char *, TIFFInitMethod);
307*3ac0a46fSAndroid Build Coastguard Worker     extern void TIFFUnRegisterCODEC(TIFFCodec *);
308*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFIsCODECConfigured(uint16_t);
309*3ac0a46fSAndroid Build Coastguard Worker     extern TIFFCodec *TIFFGetConfiguredCODECs(void);
310*3ac0a46fSAndroid Build Coastguard Worker 
311*3ac0a46fSAndroid Build Coastguard Worker     /*
312*3ac0a46fSAndroid Build Coastguard Worker      * Auxiliary functions.
313*3ac0a46fSAndroid Build Coastguard Worker      */
314*3ac0a46fSAndroid Build Coastguard Worker 
315*3ac0a46fSAndroid Build Coastguard Worker     extern void *_TIFFmalloc(tmsize_t s);
316*3ac0a46fSAndroid Build Coastguard Worker     extern void *_TIFFcalloc(tmsize_t nmemb, tmsize_t siz);
317*3ac0a46fSAndroid Build Coastguard Worker     extern void *_TIFFrealloc(void *p, tmsize_t s);
318*3ac0a46fSAndroid Build Coastguard Worker     extern void _TIFFmemset(void *p, int v, tmsize_t c);
319*3ac0a46fSAndroid Build Coastguard Worker     extern void _TIFFmemcpy(void *d, const void *s, tmsize_t c);
320*3ac0a46fSAndroid Build Coastguard Worker     extern int _TIFFmemcmp(const void *p1, const void *p2, tmsize_t c);
321*3ac0a46fSAndroid Build Coastguard Worker     extern void _TIFFfree(void *p);
322*3ac0a46fSAndroid Build Coastguard Worker 
323*3ac0a46fSAndroid Build Coastguard Worker     /*
324*3ac0a46fSAndroid Build Coastguard Worker     ** Stuff, related to tag handling and creating custom tags.
325*3ac0a46fSAndroid Build Coastguard Worker     */
326*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFGetTagListCount(TIFF *);
327*3ac0a46fSAndroid Build Coastguard Worker     extern uint32_t TIFFGetTagListEntry(TIFF *, int tag_index);
328*3ac0a46fSAndroid Build Coastguard Worker 
329*3ac0a46fSAndroid Build Coastguard Worker #define TIFF_ANY TIFF_NOTYPE /* for field descriptor searching */
330*3ac0a46fSAndroid Build Coastguard Worker #define TIFF_VARIABLE -1     /* marker for variable length tags */
331*3ac0a46fSAndroid Build Coastguard Worker #define TIFF_SPP -2          /* marker for SamplesPerPixel tags */
332*3ac0a46fSAndroid Build Coastguard Worker #define TIFF_VARIABLE2 -3    /* marker for uint32_t var-length tags */
333*3ac0a46fSAndroid Build Coastguard Worker 
334*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_CUSTOM 65
335*3ac0a46fSAndroid Build Coastguard Worker 
336*3ac0a46fSAndroid Build Coastguard Worker     typedef struct _TIFFField TIFFField;
337*3ac0a46fSAndroid Build Coastguard Worker     typedef struct _TIFFFieldArray TIFFFieldArray;
338*3ac0a46fSAndroid Build Coastguard Worker 
339*3ac0a46fSAndroid Build Coastguard Worker     extern const TIFFField *TIFFFindField(TIFF *, uint32_t, TIFFDataType);
340*3ac0a46fSAndroid Build Coastguard Worker     extern const TIFFField *TIFFFieldWithTag(TIFF *, uint32_t);
341*3ac0a46fSAndroid Build Coastguard Worker     extern const TIFFField *TIFFFieldWithName(TIFF *, const char *);
342*3ac0a46fSAndroid Build Coastguard Worker 
343*3ac0a46fSAndroid Build Coastguard Worker     extern uint32_t TIFFFieldTag(const TIFFField *);
344*3ac0a46fSAndroid Build Coastguard Worker     extern const char *TIFFFieldName(const TIFFField *);
345*3ac0a46fSAndroid Build Coastguard Worker     extern TIFFDataType TIFFFieldDataType(const TIFFField *);
346*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFFieldPassCount(const TIFFField *);
347*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFFieldReadCount(const TIFFField *);
348*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFFieldWriteCount(const TIFFField *);
349*3ac0a46fSAndroid Build Coastguard Worker     extern int
350*3ac0a46fSAndroid Build Coastguard Worker     TIFFFieldSetGetSize(const TIFFField *); /* returns internal storage size of
351*3ac0a46fSAndroid Build Coastguard Worker                                                TIFFSetGetFieldType in bytes. */
352*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFFieldSetGetCountSize(
353*3ac0a46fSAndroid Build Coastguard Worker         const TIFFField *); /* returns size of count parameter 0=none,
354*3ac0a46fSAndroid Build Coastguard Worker                                2=uint16_t, 4=uint32_t */
355*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFFieldIsAnonymous(const TIFFField *);
356*3ac0a46fSAndroid Build Coastguard Worker 
357*3ac0a46fSAndroid Build Coastguard Worker     typedef int (*TIFFVSetMethod)(TIFF *, uint32_t, va_list);
358*3ac0a46fSAndroid Build Coastguard Worker     typedef int (*TIFFVGetMethod)(TIFF *, uint32_t, va_list);
359*3ac0a46fSAndroid Build Coastguard Worker     typedef void (*TIFFPrintMethod)(TIFF *, FILE *, long);
360*3ac0a46fSAndroid Build Coastguard Worker 
361*3ac0a46fSAndroid Build Coastguard Worker     typedef struct
362*3ac0a46fSAndroid Build Coastguard Worker     {
363*3ac0a46fSAndroid Build Coastguard Worker         TIFFVSetMethod vsetfield; /* tag set routine */
364*3ac0a46fSAndroid Build Coastguard Worker         TIFFVGetMethod vgetfield; /* tag get routine */
365*3ac0a46fSAndroid Build Coastguard Worker         TIFFPrintMethod printdir; /* directory print routine */
366*3ac0a46fSAndroid Build Coastguard Worker     } TIFFTagMethods;
367*3ac0a46fSAndroid Build Coastguard Worker 
368*3ac0a46fSAndroid Build Coastguard Worker     extern TIFFTagMethods *TIFFAccessTagMethods(TIFF *);
369*3ac0a46fSAndroid Build Coastguard Worker     extern void *TIFFGetClientInfo(TIFF *, const char *);
370*3ac0a46fSAndroid Build Coastguard Worker     extern void TIFFSetClientInfo(TIFF *, void *, const char *);
371*3ac0a46fSAndroid Build Coastguard Worker 
372*3ac0a46fSAndroid Build Coastguard Worker     extern void TIFFCleanup(TIFF *tif);
373*3ac0a46fSAndroid Build Coastguard Worker     extern void TIFFClose(TIFF *tif);
374*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFFlush(TIFF *tif);
375*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFFlushData(TIFF *tif);
376*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFGetField(TIFF *tif, uint32_t tag, ...);
377*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFVGetField(TIFF *tif, uint32_t tag, va_list ap);
378*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFGetFieldDefaulted(TIFF *tif, uint32_t tag, ...);
379*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFVGetFieldDefaulted(TIFF *tif, uint32_t tag, va_list ap);
380*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFReadDirectory(TIFF *tif);
381*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFReadCustomDirectory(TIFF *tif, toff_t diroff,
382*3ac0a46fSAndroid Build Coastguard Worker                                        const TIFFFieldArray *infoarray);
383*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFReadEXIFDirectory(TIFF *tif, toff_t diroff);
384*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFReadGPSDirectory(TIFF *tif, toff_t diroff);
385*3ac0a46fSAndroid Build Coastguard Worker     extern uint64_t TIFFScanlineSize64(TIFF *tif);
386*3ac0a46fSAndroid Build Coastguard Worker     extern tmsize_t TIFFScanlineSize(TIFF *tif);
387*3ac0a46fSAndroid Build Coastguard Worker     extern uint64_t TIFFRasterScanlineSize64(TIFF *tif);
388*3ac0a46fSAndroid Build Coastguard Worker     extern tmsize_t TIFFRasterScanlineSize(TIFF *tif);
389*3ac0a46fSAndroid Build Coastguard Worker     extern uint64_t TIFFStripSize64(TIFF *tif);
390*3ac0a46fSAndroid Build Coastguard Worker     extern tmsize_t TIFFStripSize(TIFF *tif);
391*3ac0a46fSAndroid Build Coastguard Worker     extern uint64_t TIFFRawStripSize64(TIFF *tif, uint32_t strip);
392*3ac0a46fSAndroid Build Coastguard Worker     extern tmsize_t TIFFRawStripSize(TIFF *tif, uint32_t strip);
393*3ac0a46fSAndroid Build Coastguard Worker     extern uint64_t TIFFVStripSize64(TIFF *tif, uint32_t nrows);
394*3ac0a46fSAndroid Build Coastguard Worker     extern tmsize_t TIFFVStripSize(TIFF *tif, uint32_t nrows);
395*3ac0a46fSAndroid Build Coastguard Worker     extern uint64_t TIFFTileRowSize64(TIFF *tif);
396*3ac0a46fSAndroid Build Coastguard Worker     extern tmsize_t TIFFTileRowSize(TIFF *tif);
397*3ac0a46fSAndroid Build Coastguard Worker     extern uint64_t TIFFTileSize64(TIFF *tif);
398*3ac0a46fSAndroid Build Coastguard Worker     extern tmsize_t TIFFTileSize(TIFF *tif);
399*3ac0a46fSAndroid Build Coastguard Worker     extern uint64_t TIFFVTileSize64(TIFF *tif, uint32_t nrows);
400*3ac0a46fSAndroid Build Coastguard Worker     extern tmsize_t TIFFVTileSize(TIFF *tif, uint32_t nrows);
401*3ac0a46fSAndroid Build Coastguard Worker     extern uint32_t TIFFDefaultStripSize(TIFF *tif, uint32_t request);
402*3ac0a46fSAndroid Build Coastguard Worker     extern void TIFFDefaultTileSize(TIFF *, uint32_t *, uint32_t *);
403*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFFileno(TIFF *);
404*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFSetFileno(TIFF *, int);
405*3ac0a46fSAndroid Build Coastguard Worker     extern thandle_t TIFFClientdata(TIFF *);
406*3ac0a46fSAndroid Build Coastguard Worker     extern thandle_t TIFFSetClientdata(TIFF *, thandle_t);
407*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFGetMode(TIFF *);
408*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFSetMode(TIFF *, int);
409*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFIsTiled(TIFF *);
410*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFIsByteSwapped(TIFF *);
411*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFIsUpSampled(TIFF *);
412*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFIsMSB2LSB(TIFF *);
413*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFIsBigEndian(TIFF *);
414*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFIsBigTIFF(TIFF *);
415*3ac0a46fSAndroid Build Coastguard Worker     extern TIFFReadWriteProc TIFFGetReadProc(TIFF *);
416*3ac0a46fSAndroid Build Coastguard Worker     extern TIFFReadWriteProc TIFFGetWriteProc(TIFF *);
417*3ac0a46fSAndroid Build Coastguard Worker     extern TIFFSeekProc TIFFGetSeekProc(TIFF *);
418*3ac0a46fSAndroid Build Coastguard Worker     extern TIFFCloseProc TIFFGetCloseProc(TIFF *);
419*3ac0a46fSAndroid Build Coastguard Worker     extern TIFFSizeProc TIFFGetSizeProc(TIFF *);
420*3ac0a46fSAndroid Build Coastguard Worker     extern TIFFMapFileProc TIFFGetMapFileProc(TIFF *);
421*3ac0a46fSAndroid Build Coastguard Worker     extern TIFFUnmapFileProc TIFFGetUnmapFileProc(TIFF *);
422*3ac0a46fSAndroid Build Coastguard Worker     extern uint32_t TIFFCurrentRow(TIFF *);
423*3ac0a46fSAndroid Build Coastguard Worker     extern tdir_t TIFFCurrentDirectory(TIFF *);
424*3ac0a46fSAndroid Build Coastguard Worker     extern tdir_t TIFFNumberOfDirectories(TIFF *);
425*3ac0a46fSAndroid Build Coastguard Worker     extern uint64_t TIFFCurrentDirOffset(TIFF *);
426*3ac0a46fSAndroid Build Coastguard Worker     extern uint32_t TIFFCurrentStrip(TIFF *);
427*3ac0a46fSAndroid Build Coastguard Worker     extern uint32_t TIFFCurrentTile(TIFF *tif);
428*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFReadBufferSetup(TIFF *tif, void *bp, tmsize_t size);
429*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFWriteBufferSetup(TIFF *tif, void *bp, tmsize_t size);
430*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFSetupStrips(TIFF *);
431*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFWriteCheck(TIFF *, int, const char *);
432*3ac0a46fSAndroid Build Coastguard Worker     extern void TIFFFreeDirectory(TIFF *);
433*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFCreateDirectory(TIFF *);
434*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFCreateCustomDirectory(TIFF *, const TIFFFieldArray *);
435*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFCreateEXIFDirectory(TIFF *);
436*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFCreateGPSDirectory(TIFF *);
437*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFLastDirectory(TIFF *);
438*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFSetDirectory(TIFF *, tdir_t);
439*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFSetSubDirectory(TIFF *, uint64_t);
440*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFUnlinkDirectory(TIFF *, tdir_t);
441*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFSetField(TIFF *, uint32_t, ...);
442*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFVSetField(TIFF *, uint32_t, va_list);
443*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFUnsetField(TIFF *, uint32_t);
444*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFWriteDirectory(TIFF *);
445*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFWriteCustomDirectory(TIFF *, uint64_t *);
446*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFCheckpointDirectory(TIFF *);
447*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFRewriteDirectory(TIFF *);
448*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFDeferStrileArrayWriting(TIFF *);
449*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFForceStrileArrayWriting(TIFF *);
450*3ac0a46fSAndroid Build Coastguard Worker 
451*3ac0a46fSAndroid Build Coastguard Worker #if defined(c_plusplus) || defined(__cplusplus)
452*3ac0a46fSAndroid Build Coastguard Worker     extern void TIFFPrintDirectory(TIFF *, FILE *, long = 0);
453*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFReadScanline(TIFF *tif, void *buf, uint32_t row,
454*3ac0a46fSAndroid Build Coastguard Worker                                 uint16_t sample = 0);
455*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFWriteScanline(TIFF *tif, void *buf, uint32_t row,
456*3ac0a46fSAndroid Build Coastguard Worker                                  uint16_t sample = 0);
457*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFReadRGBAImage(TIFF *, uint32_t, uint32_t, uint32_t *,
458*3ac0a46fSAndroid Build Coastguard Worker                                  int = 0);
459*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFReadRGBAImageOriented(TIFF *, uint32_t, uint32_t, uint32_t *,
460*3ac0a46fSAndroid Build Coastguard Worker                                          int = ORIENTATION_BOTLEFT, int = 0);
461*3ac0a46fSAndroid Build Coastguard Worker #else
462*3ac0a46fSAndroid Build Coastguard Worker extern void TIFFPrintDirectory(TIFF *, FILE *, long);
463*3ac0a46fSAndroid Build Coastguard Worker extern int TIFFReadScanline(TIFF *tif, void *buf, uint32_t row,
464*3ac0a46fSAndroid Build Coastguard Worker                             uint16_t sample);
465*3ac0a46fSAndroid Build Coastguard Worker extern int TIFFWriteScanline(TIFF *tif, void *buf, uint32_t row,
466*3ac0a46fSAndroid Build Coastguard Worker                              uint16_t sample);
467*3ac0a46fSAndroid Build Coastguard Worker extern int TIFFReadRGBAImage(TIFF *, uint32_t, uint32_t, uint32_t *, int);
468*3ac0a46fSAndroid Build Coastguard Worker extern int TIFFReadRGBAImageOriented(TIFF *, uint32_t, uint32_t, uint32_t *,
469*3ac0a46fSAndroid Build Coastguard Worker                                      int, int);
470*3ac0a46fSAndroid Build Coastguard Worker #endif
471*3ac0a46fSAndroid Build Coastguard Worker 
472*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFReadRGBAStrip(TIFF *, uint32_t, uint32_t *);
473*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFReadRGBATile(TIFF *, uint32_t, uint32_t, uint32_t *);
474*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFReadRGBAStripExt(TIFF *, uint32_t, uint32_t *,
475*3ac0a46fSAndroid Build Coastguard Worker                                     int stop_on_error);
476*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFReadRGBATileExt(TIFF *, uint32_t, uint32_t, uint32_t *,
477*3ac0a46fSAndroid Build Coastguard Worker                                    int stop_on_error);
478*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFRGBAImageOK(TIFF *, char[1024]);
479*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFRGBAImageBegin(TIFFRGBAImage *, TIFF *, int, char[1024]);
480*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFRGBAImageGet(TIFFRGBAImage *, uint32_t *, uint32_t,
481*3ac0a46fSAndroid Build Coastguard Worker                                 uint32_t);
482*3ac0a46fSAndroid Build Coastguard Worker     extern void TIFFRGBAImageEnd(TIFFRGBAImage *);
483*3ac0a46fSAndroid Build Coastguard Worker 
484*3ac0a46fSAndroid Build Coastguard Worker     extern const char *TIFFFileName(TIFF *);
485*3ac0a46fSAndroid Build Coastguard Worker     extern const char *TIFFSetFileName(TIFF *, const char *);
486*3ac0a46fSAndroid Build Coastguard Worker     extern void TIFFError(const char *, const char *, ...)
487*3ac0a46fSAndroid Build Coastguard Worker         TIFF_ATTRIBUTE((__format__(__printf__, 2, 3)));
488*3ac0a46fSAndroid Build Coastguard Worker     extern void TIFFErrorExt(thandle_t, const char *, const char *, ...)
489*3ac0a46fSAndroid Build Coastguard Worker         TIFF_ATTRIBUTE((__format__(__printf__, 3, 4)));
490*3ac0a46fSAndroid Build Coastguard Worker     extern void TIFFWarning(const char *, const char *, ...)
491*3ac0a46fSAndroid Build Coastguard Worker         TIFF_ATTRIBUTE((__format__(__printf__, 2, 3)));
492*3ac0a46fSAndroid Build Coastguard Worker     extern void TIFFWarningExt(thandle_t, const char *, const char *, ...)
493*3ac0a46fSAndroid Build Coastguard Worker         TIFF_ATTRIBUTE((__format__(__printf__, 3, 4)));
494*3ac0a46fSAndroid Build Coastguard Worker     extern TIFFErrorHandler TIFFSetErrorHandler(TIFFErrorHandler);
495*3ac0a46fSAndroid Build Coastguard Worker     extern TIFFErrorHandlerExt TIFFSetErrorHandlerExt(TIFFErrorHandlerExt);
496*3ac0a46fSAndroid Build Coastguard Worker     extern TIFFErrorHandler TIFFSetWarningHandler(TIFFErrorHandler);
497*3ac0a46fSAndroid Build Coastguard Worker     extern TIFFErrorHandlerExt TIFFSetWarningHandlerExt(TIFFErrorHandlerExt);
498*3ac0a46fSAndroid Build Coastguard Worker 
499*3ac0a46fSAndroid Build Coastguard Worker     extern void TIFFWarningExtR(TIFF *, const char *, const char *, ...)
500*3ac0a46fSAndroid Build Coastguard Worker         TIFF_ATTRIBUTE((__format__(__printf__, 3, 4)));
501*3ac0a46fSAndroid Build Coastguard Worker     extern void TIFFErrorExtR(TIFF *, const char *, const char *, ...)
502*3ac0a46fSAndroid Build Coastguard Worker         TIFF_ATTRIBUTE((__format__(__printf__, 3, 4)));
503*3ac0a46fSAndroid Build Coastguard Worker 
504*3ac0a46fSAndroid Build Coastguard Worker     typedef struct TIFFOpenOptions TIFFOpenOptions;
505*3ac0a46fSAndroid Build Coastguard Worker     extern TIFFOpenOptions *TIFFOpenOptionsAlloc(void);
506*3ac0a46fSAndroid Build Coastguard Worker     extern void TIFFOpenOptionsFree(TIFFOpenOptions *);
507*3ac0a46fSAndroid Build Coastguard Worker     extern void
508*3ac0a46fSAndroid Build Coastguard Worker     TIFFOpenOptionsSetMaxSingleMemAlloc(TIFFOpenOptions *opts,
509*3ac0a46fSAndroid Build Coastguard Worker                                         tmsize_t max_single_mem_alloc);
510*3ac0a46fSAndroid Build Coastguard Worker     extern void
511*3ac0a46fSAndroid Build Coastguard Worker     TIFFOpenOptionsSetErrorHandlerExtR(TIFFOpenOptions *opts,
512*3ac0a46fSAndroid Build Coastguard Worker                                        TIFFErrorHandlerExtR handler,
513*3ac0a46fSAndroid Build Coastguard Worker                                        void *errorhandler_user_data);
514*3ac0a46fSAndroid Build Coastguard Worker     extern void
515*3ac0a46fSAndroid Build Coastguard Worker     TIFFOpenOptionsSetWarningHandlerExtR(TIFFOpenOptions *opts,
516*3ac0a46fSAndroid Build Coastguard Worker                                          TIFFErrorHandlerExtR handler,
517*3ac0a46fSAndroid Build Coastguard Worker                                          void *warnhandler_user_data);
518*3ac0a46fSAndroid Build Coastguard Worker 
519*3ac0a46fSAndroid Build Coastguard Worker     extern TIFF *TIFFOpen(const char *, const char *);
520*3ac0a46fSAndroid Build Coastguard Worker     extern TIFF *TIFFOpenExt(const char *, const char *, TIFFOpenOptions *opts);
521*3ac0a46fSAndroid Build Coastguard Worker #ifdef __WIN32__
522*3ac0a46fSAndroid Build Coastguard Worker     extern TIFF *TIFFOpenW(const wchar_t *, const char *);
523*3ac0a46fSAndroid Build Coastguard Worker     extern TIFF *TIFFOpenWExt(const wchar_t *, const char *,
524*3ac0a46fSAndroid Build Coastguard Worker                               TIFFOpenOptions *opts);
525*3ac0a46fSAndroid Build Coastguard Worker #endif /* __WIN32__ */
526*3ac0a46fSAndroid Build Coastguard Worker     extern TIFF *TIFFFdOpen(int, const char *, const char *);
527*3ac0a46fSAndroid Build Coastguard Worker     extern TIFF *TIFFFdOpenExt(int, const char *, const char *,
528*3ac0a46fSAndroid Build Coastguard Worker                                TIFFOpenOptions *opts);
529*3ac0a46fSAndroid Build Coastguard Worker     extern TIFF *TIFFClientOpen(const char *, const char *, thandle_t,
530*3ac0a46fSAndroid Build Coastguard Worker                                 TIFFReadWriteProc, TIFFReadWriteProc,
531*3ac0a46fSAndroid Build Coastguard Worker                                 TIFFSeekProc, TIFFCloseProc, TIFFSizeProc,
532*3ac0a46fSAndroid Build Coastguard Worker                                 TIFFMapFileProc, TIFFUnmapFileProc);
533*3ac0a46fSAndroid Build Coastguard Worker     extern TIFF *TIFFClientOpenExt(const char *, const char *, thandle_t,
534*3ac0a46fSAndroid Build Coastguard Worker                                    TIFFReadWriteProc, TIFFReadWriteProc,
535*3ac0a46fSAndroid Build Coastguard Worker                                    TIFFSeekProc, TIFFCloseProc, TIFFSizeProc,
536*3ac0a46fSAndroid Build Coastguard Worker                                    TIFFMapFileProc, TIFFUnmapFileProc,
537*3ac0a46fSAndroid Build Coastguard Worker                                    TIFFOpenOptions *opts);
538*3ac0a46fSAndroid Build Coastguard Worker     extern TIFFExtendProc TIFFSetTagExtender(TIFFExtendProc);
539*3ac0a46fSAndroid Build Coastguard Worker     extern uint32_t TIFFComputeTile(TIFF *tif, uint32_t x, uint32_t y,
540*3ac0a46fSAndroid Build Coastguard Worker                                     uint32_t z, uint16_t s);
541*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFCheckTile(TIFF *tif, uint32_t x, uint32_t y, uint32_t z,
542*3ac0a46fSAndroid Build Coastguard Worker                              uint16_t s);
543*3ac0a46fSAndroid Build Coastguard Worker     extern uint32_t TIFFNumberOfTiles(TIFF *);
544*3ac0a46fSAndroid Build Coastguard Worker     extern tmsize_t TIFFReadTile(TIFF *tif, void *buf, uint32_t x, uint32_t y,
545*3ac0a46fSAndroid Build Coastguard Worker                                  uint32_t z, uint16_t s);
546*3ac0a46fSAndroid Build Coastguard Worker     extern tmsize_t TIFFWriteTile(TIFF *tif, void *buf, uint32_t x, uint32_t y,
547*3ac0a46fSAndroid Build Coastguard Worker                                   uint32_t z, uint16_t s);
548*3ac0a46fSAndroid Build Coastguard Worker     extern uint32_t TIFFComputeStrip(TIFF *, uint32_t, uint16_t);
549*3ac0a46fSAndroid Build Coastguard Worker     extern uint32_t TIFFNumberOfStrips(TIFF *);
550*3ac0a46fSAndroid Build Coastguard Worker     extern tmsize_t TIFFReadEncodedStrip(TIFF *tif, uint32_t strip, void *buf,
551*3ac0a46fSAndroid Build Coastguard Worker                                          tmsize_t size);
552*3ac0a46fSAndroid Build Coastguard Worker     extern tmsize_t TIFFReadRawStrip(TIFF *tif, uint32_t strip, void *buf,
553*3ac0a46fSAndroid Build Coastguard Worker                                      tmsize_t size);
554*3ac0a46fSAndroid Build Coastguard Worker     extern tmsize_t TIFFReadEncodedTile(TIFF *tif, uint32_t tile, void *buf,
555*3ac0a46fSAndroid Build Coastguard Worker                                         tmsize_t size);
556*3ac0a46fSAndroid Build Coastguard Worker     extern tmsize_t TIFFReadRawTile(TIFF *tif, uint32_t tile, void *buf,
557*3ac0a46fSAndroid Build Coastguard Worker                                     tmsize_t size);
558*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFReadFromUserBuffer(TIFF *tif, uint32_t strile, void *inbuf,
559*3ac0a46fSAndroid Build Coastguard Worker                                       tmsize_t insize, void *outbuf,
560*3ac0a46fSAndroid Build Coastguard Worker                                       tmsize_t outsize);
561*3ac0a46fSAndroid Build Coastguard Worker     extern tmsize_t TIFFWriteEncodedStrip(TIFF *tif, uint32_t strip, void *data,
562*3ac0a46fSAndroid Build Coastguard Worker                                           tmsize_t cc);
563*3ac0a46fSAndroid Build Coastguard Worker     extern tmsize_t TIFFWriteRawStrip(TIFF *tif, uint32_t strip, void *data,
564*3ac0a46fSAndroid Build Coastguard Worker                                       tmsize_t cc);
565*3ac0a46fSAndroid Build Coastguard Worker     extern tmsize_t TIFFWriteEncodedTile(TIFF *tif, uint32_t tile, void *data,
566*3ac0a46fSAndroid Build Coastguard Worker                                          tmsize_t cc);
567*3ac0a46fSAndroid Build Coastguard Worker     extern tmsize_t TIFFWriteRawTile(TIFF *tif, uint32_t tile, void *data,
568*3ac0a46fSAndroid Build Coastguard Worker                                      tmsize_t cc);
569*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFDataWidth(
570*3ac0a46fSAndroid Build Coastguard Worker         TIFFDataType); /* table of tag datatype widths within TIFF file. */
571*3ac0a46fSAndroid Build Coastguard Worker     extern void TIFFSetWriteOffset(TIFF *tif, toff_t off);
572*3ac0a46fSAndroid Build Coastguard Worker     extern void TIFFSwabShort(uint16_t *);
573*3ac0a46fSAndroid Build Coastguard Worker     extern void TIFFSwabLong(uint32_t *);
574*3ac0a46fSAndroid Build Coastguard Worker     extern void TIFFSwabLong8(uint64_t *);
575*3ac0a46fSAndroid Build Coastguard Worker     extern void TIFFSwabFloat(float *);
576*3ac0a46fSAndroid Build Coastguard Worker     extern void TIFFSwabDouble(double *);
577*3ac0a46fSAndroid Build Coastguard Worker     extern void TIFFSwabArrayOfShort(uint16_t *wp, tmsize_t n);
578*3ac0a46fSAndroid Build Coastguard Worker     extern void TIFFSwabArrayOfTriples(uint8_t *tp, tmsize_t n);
579*3ac0a46fSAndroid Build Coastguard Worker     extern void TIFFSwabArrayOfLong(uint32_t *lp, tmsize_t n);
580*3ac0a46fSAndroid Build Coastguard Worker     extern void TIFFSwabArrayOfLong8(uint64_t *lp, tmsize_t n);
581*3ac0a46fSAndroid Build Coastguard Worker     extern void TIFFSwabArrayOfFloat(float *fp, tmsize_t n);
582*3ac0a46fSAndroid Build Coastguard Worker     extern void TIFFSwabArrayOfDouble(double *dp, tmsize_t n);
583*3ac0a46fSAndroid Build Coastguard Worker     extern void TIFFReverseBits(uint8_t *cp, tmsize_t n);
584*3ac0a46fSAndroid Build Coastguard Worker     extern const unsigned char *TIFFGetBitRevTable(int);
585*3ac0a46fSAndroid Build Coastguard Worker 
586*3ac0a46fSAndroid Build Coastguard Worker     extern uint64_t TIFFGetStrileOffset(TIFF *tif, uint32_t strile);
587*3ac0a46fSAndroid Build Coastguard Worker     extern uint64_t TIFFGetStrileByteCount(TIFF *tif, uint32_t strile);
588*3ac0a46fSAndroid Build Coastguard Worker     extern uint64_t TIFFGetStrileOffsetWithErr(TIFF *tif, uint32_t strile,
589*3ac0a46fSAndroid Build Coastguard Worker                                                int *pbErr);
590*3ac0a46fSAndroid Build Coastguard Worker     extern uint64_t TIFFGetStrileByteCountWithErr(TIFF *tif, uint32_t strile,
591*3ac0a46fSAndroid Build Coastguard Worker                                                   int *pbErr);
592*3ac0a46fSAndroid Build Coastguard Worker 
593*3ac0a46fSAndroid Build Coastguard Worker #ifdef LOGLUV_PUBLIC
594*3ac0a46fSAndroid Build Coastguard Worker #define U_NEU 0.210526316
595*3ac0a46fSAndroid Build Coastguard Worker #define V_NEU 0.473684211
596*3ac0a46fSAndroid Build Coastguard Worker #define UVSCALE 410.
597*3ac0a46fSAndroid Build Coastguard Worker     extern double LogL16toY(int);
598*3ac0a46fSAndroid Build Coastguard Worker     extern double LogL10toY(int);
599*3ac0a46fSAndroid Build Coastguard Worker     extern void XYZtoRGB24(float *, uint8_t *);
600*3ac0a46fSAndroid Build Coastguard Worker     extern int uv_decode(double *, double *, int);
601*3ac0a46fSAndroid Build Coastguard Worker     extern void LogLuv24toXYZ(uint32_t, float *);
602*3ac0a46fSAndroid Build Coastguard Worker     extern void LogLuv32toXYZ(uint32_t, float *);
603*3ac0a46fSAndroid Build Coastguard Worker #if defined(c_plusplus) || defined(__cplusplus)
604*3ac0a46fSAndroid Build Coastguard Worker     extern int LogL16fromY(double, int = SGILOGENCODE_NODITHER);
605*3ac0a46fSAndroid Build Coastguard Worker     extern int LogL10fromY(double, int = SGILOGENCODE_NODITHER);
606*3ac0a46fSAndroid Build Coastguard Worker     extern int uv_encode(double, double, int = SGILOGENCODE_NODITHER);
607*3ac0a46fSAndroid Build Coastguard Worker     extern uint32_t LogLuv24fromXYZ(float *, int = SGILOGENCODE_NODITHER);
608*3ac0a46fSAndroid Build Coastguard Worker     extern uint32_t LogLuv32fromXYZ(float *, int = SGILOGENCODE_NODITHER);
609*3ac0a46fSAndroid Build Coastguard Worker #else
610*3ac0a46fSAndroid Build Coastguard Worker     extern int LogL16fromY(double, int);
611*3ac0a46fSAndroid Build Coastguard Worker     extern int LogL10fromY(double, int);
612*3ac0a46fSAndroid Build Coastguard Worker     extern int uv_encode(double, double, int);
613*3ac0a46fSAndroid Build Coastguard Worker     extern uint32_t LogLuv24fromXYZ(float *, int);
614*3ac0a46fSAndroid Build Coastguard Worker     extern uint32_t LogLuv32fromXYZ(float *, int);
615*3ac0a46fSAndroid Build Coastguard Worker #endif
616*3ac0a46fSAndroid Build Coastguard Worker #endif /* LOGLUV_PUBLIC */
617*3ac0a46fSAndroid Build Coastguard Worker 
618*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFCIELabToRGBInit(TIFFCIELabToRGB *, const TIFFDisplay *,
619*3ac0a46fSAndroid Build Coastguard Worker                                    float *);
620*3ac0a46fSAndroid Build Coastguard Worker     extern void TIFFCIELabToXYZ(TIFFCIELabToRGB *, uint32_t, int32_t, int32_t,
621*3ac0a46fSAndroid Build Coastguard Worker                                 float *, float *, float *);
622*3ac0a46fSAndroid Build Coastguard Worker     extern void TIFFXYZToRGB(TIFFCIELabToRGB *, float, float, float, uint32_t *,
623*3ac0a46fSAndroid Build Coastguard Worker                              uint32_t *, uint32_t *);
624*3ac0a46fSAndroid Build Coastguard Worker 
625*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFYCbCrToRGBInit(TIFFYCbCrToRGB *, float *, float *);
626*3ac0a46fSAndroid Build Coastguard Worker     extern void TIFFYCbCrtoRGB(TIFFYCbCrToRGB *, uint32_t, int32_t, int32_t,
627*3ac0a46fSAndroid Build Coastguard Worker                                uint32_t *, uint32_t *, uint32_t *);
628*3ac0a46fSAndroid Build Coastguard Worker 
629*3ac0a46fSAndroid Build Coastguard Worker     /****************************************************************************
630*3ac0a46fSAndroid Build Coastguard Worker      *               O B S O L E T E D    I N T E R F A C E S
631*3ac0a46fSAndroid Build Coastguard Worker      *
632*3ac0a46fSAndroid Build Coastguard Worker      * Don't use this stuff in your applications, it may be removed in the
633*3ac0a46fSAndroid Build Coastguard Worker      *future libtiff versions.
634*3ac0a46fSAndroid Build Coastguard Worker      ****************************************************************************/
635*3ac0a46fSAndroid Build Coastguard Worker     typedef struct
636*3ac0a46fSAndroid Build Coastguard Worker     {
637*3ac0a46fSAndroid Build Coastguard Worker         ttag_t field_tag;               /* field's tag */
638*3ac0a46fSAndroid Build Coastguard Worker         short field_readcount;          /* read count/TIFF_VARIABLE/TIFF_SPP */
639*3ac0a46fSAndroid Build Coastguard Worker         short field_writecount;         /* write count/TIFF_VARIABLE */
640*3ac0a46fSAndroid Build Coastguard Worker         TIFFDataType field_type;        /* type of associated data */
641*3ac0a46fSAndroid Build Coastguard Worker         unsigned short field_bit;       /* bit in fieldsset bit vector */
642*3ac0a46fSAndroid Build Coastguard Worker         unsigned char field_oktochange; /* if true, can change while writing */
643*3ac0a46fSAndroid Build Coastguard Worker         unsigned char field_passcount;  /* if true, pass dir count on set */
644*3ac0a46fSAndroid Build Coastguard Worker         char *field_name;               /* ASCII name */
645*3ac0a46fSAndroid Build Coastguard Worker     } TIFFFieldInfo;
646*3ac0a46fSAndroid Build Coastguard Worker 
647*3ac0a46fSAndroid Build Coastguard Worker     extern int TIFFMergeFieldInfo(TIFF *, const TIFFFieldInfo[], uint32_t);
648*3ac0a46fSAndroid Build Coastguard Worker 
649*3ac0a46fSAndroid Build Coastguard Worker #if defined(c_plusplus) || defined(__cplusplus)
650*3ac0a46fSAndroid Build Coastguard Worker }
651*3ac0a46fSAndroid Build Coastguard Worker #endif
652*3ac0a46fSAndroid Build Coastguard Worker 
653*3ac0a46fSAndroid Build Coastguard Worker #endif /* _TIFFIO_ */
654