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