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 _TIFFDIR_ 26*3ac0a46fSAndroid Build Coastguard Worker #define _TIFFDIR_ 27*3ac0a46fSAndroid Build Coastguard Worker 28*3ac0a46fSAndroid Build Coastguard Worker #include "tiff.h" 29*3ac0a46fSAndroid Build Coastguard Worker #include "tiffio.h" 30*3ac0a46fSAndroid Build Coastguard Worker 31*3ac0a46fSAndroid Build Coastguard Worker /* 32*3ac0a46fSAndroid Build Coastguard Worker * ``Library-private'' Directory-related Definitions. 33*3ac0a46fSAndroid Build Coastguard Worker */ 34*3ac0a46fSAndroid Build Coastguard Worker 35*3ac0a46fSAndroid Build Coastguard Worker typedef struct 36*3ac0a46fSAndroid Build Coastguard Worker { 37*3ac0a46fSAndroid Build Coastguard Worker const TIFFField *info; 38*3ac0a46fSAndroid Build Coastguard Worker int count; 39*3ac0a46fSAndroid Build Coastguard Worker void *value; 40*3ac0a46fSAndroid Build Coastguard Worker } TIFFTagValue; 41*3ac0a46fSAndroid Build Coastguard Worker 42*3ac0a46fSAndroid Build Coastguard Worker /* 43*3ac0a46fSAndroid Build Coastguard Worker * TIFF Image File Directories are comprised of a table of field 44*3ac0a46fSAndroid Build Coastguard Worker * descriptors of the form shown below. The table is sorted in 45*3ac0a46fSAndroid Build Coastguard Worker * ascending order by tag. The values associated with each entry are 46*3ac0a46fSAndroid Build Coastguard Worker * disjoint and may appear anywhere in the file (so long as they are 47*3ac0a46fSAndroid Build Coastguard Worker * placed on a word boundary). 48*3ac0a46fSAndroid Build Coastguard Worker * 49*3ac0a46fSAndroid Build Coastguard Worker * If the value is 4 bytes or less, in ClassicTIFF, or 8 bytes or less in 50*3ac0a46fSAndroid Build Coastguard Worker * BigTIFF, then it is placed in the offset field to save space. If so, 51*3ac0a46fSAndroid Build Coastguard Worker * it is left-justified in the offset field. 52*3ac0a46fSAndroid Build Coastguard Worker */ 53*3ac0a46fSAndroid Build Coastguard Worker typedef struct 54*3ac0a46fSAndroid Build Coastguard Worker { 55*3ac0a46fSAndroid Build Coastguard Worker uint16_t tdir_tag; /* see below */ 56*3ac0a46fSAndroid Build Coastguard Worker uint16_t tdir_type; /* data type; see below */ 57*3ac0a46fSAndroid Build Coastguard Worker uint64_t tdir_count; /* number of items; length in spec */ 58*3ac0a46fSAndroid Build Coastguard Worker union 59*3ac0a46fSAndroid Build Coastguard Worker { 60*3ac0a46fSAndroid Build Coastguard Worker uint16_t toff_short; 61*3ac0a46fSAndroid Build Coastguard Worker uint32_t toff_long; 62*3ac0a46fSAndroid Build Coastguard Worker uint64_t toff_long8; 63*3ac0a46fSAndroid Build Coastguard Worker } tdir_offset; /* either offset or the data itself if fits */ 64*3ac0a46fSAndroid Build Coastguard Worker uint8_t tdir_ignore; /* flag status to ignore tag when parsing tags in 65*3ac0a46fSAndroid Build Coastguard Worker tif_dirread.c */ 66*3ac0a46fSAndroid Build Coastguard Worker } TIFFDirEntry; 67*3ac0a46fSAndroid Build Coastguard Worker 68*3ac0a46fSAndroid Build Coastguard Worker /* 69*3ac0a46fSAndroid Build Coastguard Worker * Internal format of a TIFF directory entry. 70*3ac0a46fSAndroid Build Coastguard Worker */ 71*3ac0a46fSAndroid Build Coastguard Worker typedef struct 72*3ac0a46fSAndroid Build Coastguard Worker { 73*3ac0a46fSAndroid Build Coastguard Worker #define FIELDSET_ITEMS 4 74*3ac0a46fSAndroid Build Coastguard Worker /* bit vector of fields that are set */ 75*3ac0a46fSAndroid Build Coastguard Worker uint32_t td_fieldsset[FIELDSET_ITEMS]; 76*3ac0a46fSAndroid Build Coastguard Worker 77*3ac0a46fSAndroid Build Coastguard Worker uint32_t td_imagewidth, td_imagelength, td_imagedepth; 78*3ac0a46fSAndroid Build Coastguard Worker uint32_t td_tilewidth, td_tilelength, td_tiledepth; 79*3ac0a46fSAndroid Build Coastguard Worker uint32_t td_subfiletype; 80*3ac0a46fSAndroid Build Coastguard Worker uint16_t td_bitspersample; 81*3ac0a46fSAndroid Build Coastguard Worker uint16_t td_sampleformat; 82*3ac0a46fSAndroid Build Coastguard Worker uint16_t td_compression; 83*3ac0a46fSAndroid Build Coastguard Worker uint16_t td_photometric; 84*3ac0a46fSAndroid Build Coastguard Worker uint16_t td_threshholding; 85*3ac0a46fSAndroid Build Coastguard Worker uint16_t td_fillorder; 86*3ac0a46fSAndroid Build Coastguard Worker uint16_t td_orientation; 87*3ac0a46fSAndroid Build Coastguard Worker uint16_t td_samplesperpixel; 88*3ac0a46fSAndroid Build Coastguard Worker uint32_t td_rowsperstrip; 89*3ac0a46fSAndroid Build Coastguard Worker uint16_t td_minsamplevalue, td_maxsamplevalue; 90*3ac0a46fSAndroid Build Coastguard Worker double *td_sminsamplevalue; 91*3ac0a46fSAndroid Build Coastguard Worker double *td_smaxsamplevalue; 92*3ac0a46fSAndroid Build Coastguard Worker float td_xresolution, td_yresolution; 93*3ac0a46fSAndroid Build Coastguard Worker uint16_t td_resolutionunit; 94*3ac0a46fSAndroid Build Coastguard Worker uint16_t td_planarconfig; 95*3ac0a46fSAndroid Build Coastguard Worker float td_xposition, td_yposition; 96*3ac0a46fSAndroid Build Coastguard Worker uint16_t td_pagenumber[2]; 97*3ac0a46fSAndroid Build Coastguard Worker uint16_t *td_colormap[3]; 98*3ac0a46fSAndroid Build Coastguard Worker uint16_t td_halftonehints[2]; 99*3ac0a46fSAndroid Build Coastguard Worker uint16_t td_extrasamples; 100*3ac0a46fSAndroid Build Coastguard Worker uint16_t *td_sampleinfo; 101*3ac0a46fSAndroid Build Coastguard Worker /* even though the name is misleading, td_stripsperimage is the number 102*3ac0a46fSAndroid Build Coastguard Worker * of striles (=strips or tiles) per plane, and td_nstrips the total 103*3ac0a46fSAndroid Build Coastguard Worker * number of striles */ 104*3ac0a46fSAndroid Build Coastguard Worker uint32_t td_stripsperimage; 105*3ac0a46fSAndroid Build Coastguard Worker uint32_t td_nstrips; /* size of offset & bytecount arrays */ 106*3ac0a46fSAndroid Build Coastguard Worker uint64_t 107*3ac0a46fSAndroid Build Coastguard Worker *td_stripoffset_p; /* should be accessed with TIFFGetStrileOffset */ 108*3ac0a46fSAndroid Build Coastguard Worker uint64_t *td_stripbytecount_p; /* should be accessed with 109*3ac0a46fSAndroid Build Coastguard Worker TIFFGetStrileByteCount */ 110*3ac0a46fSAndroid Build Coastguard Worker uint32_t 111*3ac0a46fSAndroid Build Coastguard Worker td_stripoffsetbyteallocsize; /* number of elements currently allocated 112*3ac0a46fSAndroid Build Coastguard Worker for td_stripoffset/td_stripbytecount. 113*3ac0a46fSAndroid Build Coastguard Worker Only used if TIFF_LAZYSTRILELOAD is set 114*3ac0a46fSAndroid Build Coastguard Worker */ 115*3ac0a46fSAndroid Build Coastguard Worker #ifdef STRIPBYTECOUNTSORTED_UNUSED 116*3ac0a46fSAndroid Build Coastguard Worker int td_stripbytecountsorted; /* is the bytecount array sorted ascending? */ 117*3ac0a46fSAndroid Build Coastguard Worker #endif 118*3ac0a46fSAndroid Build Coastguard Worker TIFFDirEntry td_stripoffset_entry; /* for deferred loading */ 119*3ac0a46fSAndroid Build Coastguard Worker TIFFDirEntry td_stripbytecount_entry; /* for deferred loading */ 120*3ac0a46fSAndroid Build Coastguard Worker uint16_t td_nsubifd; 121*3ac0a46fSAndroid Build Coastguard Worker uint64_t *td_subifd; 122*3ac0a46fSAndroid Build Coastguard Worker /* YCbCr parameters */ 123*3ac0a46fSAndroid Build Coastguard Worker uint16_t td_ycbcrsubsampling[2]; 124*3ac0a46fSAndroid Build Coastguard Worker uint16_t td_ycbcrpositioning; 125*3ac0a46fSAndroid Build Coastguard Worker /* Colorimetry parameters */ 126*3ac0a46fSAndroid Build Coastguard Worker uint16_t *td_transferfunction[3]; 127*3ac0a46fSAndroid Build Coastguard Worker float *td_refblackwhite; 128*3ac0a46fSAndroid Build Coastguard Worker /* CMYK parameters */ 129*3ac0a46fSAndroid Build Coastguard Worker int td_inknameslen; 130*3ac0a46fSAndroid Build Coastguard Worker char *td_inknames; 131*3ac0a46fSAndroid Build Coastguard Worker uint16_t td_numberofinks; /* number of inks in InkNames string */ 132*3ac0a46fSAndroid Build Coastguard Worker 133*3ac0a46fSAndroid Build Coastguard Worker int td_customValueCount; 134*3ac0a46fSAndroid Build Coastguard Worker TIFFTagValue *td_customValues; 135*3ac0a46fSAndroid Build Coastguard Worker 136*3ac0a46fSAndroid Build Coastguard Worker unsigned char 137*3ac0a46fSAndroid Build Coastguard Worker td_deferstrilearraywriting; /* see TIFFDeferStrileArrayWriting() */ 138*3ac0a46fSAndroid Build Coastguard Worker } TIFFDirectory; 139*3ac0a46fSAndroid Build Coastguard Worker 140*3ac0a46fSAndroid Build Coastguard Worker /* 141*3ac0a46fSAndroid Build Coastguard Worker * Field flags used to indicate fields that have been set in a directory, and 142*3ac0a46fSAndroid Build Coastguard Worker * to reference fields when manipulating a directory. 143*3ac0a46fSAndroid Build Coastguard Worker */ 144*3ac0a46fSAndroid Build Coastguard Worker 145*3ac0a46fSAndroid Build Coastguard Worker /* 146*3ac0a46fSAndroid Build Coastguard Worker * FIELD_IGNORE is used to signify tags that are to be processed but otherwise 147*3ac0a46fSAndroid Build Coastguard Worker * ignored. This permits antiquated tags to be quietly read and discarded. 148*3ac0a46fSAndroid Build Coastguard Worker * Note that a bit *is* allocated for ignored tags; this is understood by the 149*3ac0a46fSAndroid Build Coastguard Worker * directory reading logic which uses this fact to avoid special-case handling 150*3ac0a46fSAndroid Build Coastguard Worker */ 151*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_IGNORE 0 152*3ac0a46fSAndroid Build Coastguard Worker 153*3ac0a46fSAndroid Build Coastguard Worker /* multi-item fields */ 154*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_IMAGEDIMENSIONS 1 155*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_TILEDIMENSIONS 2 156*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_RESOLUTION 3 157*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_POSITION 4 158*3ac0a46fSAndroid Build Coastguard Worker 159*3ac0a46fSAndroid Build Coastguard Worker /* single-item fields */ 160*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_SUBFILETYPE 5 161*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_BITSPERSAMPLE 6 162*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_COMPRESSION 7 163*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_PHOTOMETRIC 8 164*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_THRESHHOLDING 9 165*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_FILLORDER 10 166*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_ORIENTATION 15 167*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_SAMPLESPERPIXEL 16 168*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_ROWSPERSTRIP 17 169*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_MINSAMPLEVALUE 18 170*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_MAXSAMPLEVALUE 19 171*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_PLANARCONFIG 20 172*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_RESOLUTIONUNIT 22 173*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_PAGENUMBER 23 174*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_STRIPBYTECOUNTS 24 175*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_STRIPOFFSETS 25 176*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_COLORMAP 26 177*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_EXTRASAMPLES 31 178*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_SAMPLEFORMAT 32 179*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_SMINSAMPLEVALUE 33 180*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_SMAXSAMPLEVALUE 34 181*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_IMAGEDEPTH 35 182*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_TILEDEPTH 36 183*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_HALFTONEHINTS 37 184*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_YCBCRSUBSAMPLING 39 185*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_YCBCRPOSITIONING 40 186*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_REFBLACKWHITE 41 187*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_TRANSFERFUNCTION 44 188*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_INKNAMES 46 189*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_SUBIFD 49 190*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_NUMBEROFINKS 50 191*3ac0a46fSAndroid Build Coastguard Worker /* FIELD_CUSTOM (see tiffio.h) 65 */ 192*3ac0a46fSAndroid Build Coastguard Worker /* end of support for well-known tags; codec-private tags follow */ 193*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_CODEC 66 /* base of codec-private tags */ 194*3ac0a46fSAndroid Build Coastguard Worker 195*3ac0a46fSAndroid Build Coastguard Worker /* 196*3ac0a46fSAndroid Build Coastguard Worker * Pseudo-tags don't normally need field bits since they are not written to an 197*3ac0a46fSAndroid Build Coastguard Worker * output file (by definition). The library also has express logic to always 198*3ac0a46fSAndroid Build Coastguard Worker * query a codec for a pseudo-tag so allocating a field bit for one is a 199*3ac0a46fSAndroid Build Coastguard Worker * waste. If codec wants to promote the notion of a pseudo-tag being ``set'' 200*3ac0a46fSAndroid Build Coastguard Worker * or ``unset'' then it can do using internal state flags without polluting 201*3ac0a46fSAndroid Build Coastguard Worker * the field bit space defined for real tags. 202*3ac0a46fSAndroid Build Coastguard Worker */ 203*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_PSEUDO 0 204*3ac0a46fSAndroid Build Coastguard Worker 205*3ac0a46fSAndroid Build Coastguard Worker #define FIELD_LAST (32 * FIELDSET_ITEMS - 1) 206*3ac0a46fSAndroid Build Coastguard Worker 207*3ac0a46fSAndroid Build Coastguard Worker #define BITn(n) (((uint32_t)1L) << ((n)&0x1f)) 208*3ac0a46fSAndroid Build Coastguard Worker #define BITFIELDn(tif, n) ((tif)->tif_dir.td_fieldsset[(n) / 32]) 209*3ac0a46fSAndroid Build Coastguard Worker #define TIFFFieldSet(tif, field) (BITFIELDn(tif, field) & BITn(field)) 210*3ac0a46fSAndroid Build Coastguard Worker #define TIFFSetFieldBit(tif, field) (BITFIELDn(tif, field) |= BITn(field)) 211*3ac0a46fSAndroid Build Coastguard Worker #define TIFFClrFieldBit(tif, field) (BITFIELDn(tif, field) &= ~BITn(field)) 212*3ac0a46fSAndroid Build Coastguard Worker 213*3ac0a46fSAndroid Build Coastguard Worker #define FieldSet(fields, f) (fields[(f) / 32] & BITn(f)) 214*3ac0a46fSAndroid Build Coastguard Worker #define ResetFieldBit(fields, f) (fields[(f) / 32] &= ~BITn(f)) 215*3ac0a46fSAndroid Build Coastguard Worker 216*3ac0a46fSAndroid Build Coastguard Worker typedef enum 217*3ac0a46fSAndroid Build Coastguard Worker { 218*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_UNDEFINED = 0, 219*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_ASCII = 1, 220*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_UINT8 = 2, 221*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_SINT8 = 3, 222*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_UINT16 = 4, 223*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_SINT16 = 5, 224*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_UINT32 = 6, 225*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_SINT32 = 7, 226*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_UINT64 = 8, 227*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_SINT64 = 9, 228*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_FLOAT = 10, 229*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_DOUBLE = 11, 230*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_IFD8 = 12, 231*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_INT = 13, 232*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_UINT16_PAIR = 14, 233*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C0_ASCII = 15, 234*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C0_UINT8 = 16, 235*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C0_SINT8 = 17, 236*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C0_UINT16 = 18, 237*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C0_SINT16 = 19, 238*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C0_UINT32 = 20, 239*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C0_SINT32 = 21, 240*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C0_UINT64 = 22, 241*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C0_SINT64 = 23, 242*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C0_FLOAT = 24, 243*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C0_DOUBLE = 25, 244*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C0_IFD8 = 26, 245*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C16_ASCII = 27, 246*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C16_UINT8 = 28, 247*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C16_SINT8 = 29, 248*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C16_UINT16 = 30, 249*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C16_SINT16 = 31, 250*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C16_UINT32 = 32, 251*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C16_SINT32 = 33, 252*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C16_UINT64 = 34, 253*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C16_SINT64 = 35, 254*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C16_FLOAT = 36, 255*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C16_DOUBLE = 37, 256*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C16_IFD8 = 38, 257*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C32_ASCII = 39, 258*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C32_UINT8 = 40, 259*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C32_SINT8 = 41, 260*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C32_UINT16 = 42, 261*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C32_SINT16 = 43, 262*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C32_UINT32 = 44, 263*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C32_SINT32 = 45, 264*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C32_UINT64 = 46, 265*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C32_SINT64 = 47, 266*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C32_FLOAT = 48, 267*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C32_DOUBLE = 49, 268*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_C32_IFD8 = 50, 269*3ac0a46fSAndroid Build Coastguard Worker TIFF_SETGET_OTHER = 51 270*3ac0a46fSAndroid Build Coastguard Worker } TIFFSetGetFieldType; 271*3ac0a46fSAndroid Build Coastguard Worker 272*3ac0a46fSAndroid Build Coastguard Worker #if defined(__cplusplus) 273*3ac0a46fSAndroid Build Coastguard Worker extern "C" 274*3ac0a46fSAndroid Build Coastguard Worker { 275*3ac0a46fSAndroid Build Coastguard Worker #endif 276*3ac0a46fSAndroid Build Coastguard Worker 277*3ac0a46fSAndroid Build Coastguard Worker extern const TIFFFieldArray *_TIFFGetFields(void); 278*3ac0a46fSAndroid Build Coastguard Worker extern const TIFFFieldArray *_TIFFGetExifFields(void); 279*3ac0a46fSAndroid Build Coastguard Worker extern const TIFFFieldArray *_TIFFGetGpsFields(void); 280*3ac0a46fSAndroid Build Coastguard Worker extern void _TIFFSetupFields(TIFF *tif, const TIFFFieldArray *infoarray); 281*3ac0a46fSAndroid Build Coastguard Worker extern void _TIFFPrintFieldInfo(TIFF *, FILE *); 282*3ac0a46fSAndroid Build Coastguard Worker 283*3ac0a46fSAndroid Build Coastguard Worker extern int _TIFFFillStriles(TIFF *); 284*3ac0a46fSAndroid Build Coastguard Worker 285*3ac0a46fSAndroid Build Coastguard Worker typedef enum 286*3ac0a46fSAndroid Build Coastguard Worker { 287*3ac0a46fSAndroid Build Coastguard Worker tfiatImage, 288*3ac0a46fSAndroid Build Coastguard Worker tfiatExif, 289*3ac0a46fSAndroid Build Coastguard Worker tfiatGps, /* EXIF-GPS fields array type */ 290*3ac0a46fSAndroid Build Coastguard Worker tfiatOther 291*3ac0a46fSAndroid Build Coastguard Worker } TIFFFieldArrayType; 292*3ac0a46fSAndroid Build Coastguard Worker 293*3ac0a46fSAndroid Build Coastguard Worker struct _TIFFFieldArray 294*3ac0a46fSAndroid Build Coastguard Worker { 295*3ac0a46fSAndroid Build Coastguard Worker TIFFFieldArrayType type; /* array type, will be used to determine if IFD 296*3ac0a46fSAndroid Build Coastguard Worker is image and such */ 297*3ac0a46fSAndroid Build Coastguard Worker uint32_t allocated_size; /* 0 if array is constant, other if modified by 298*3ac0a46fSAndroid Build Coastguard Worker future definition extension support */ 299*3ac0a46fSAndroid Build Coastguard Worker uint32_t count; /* number of elements in fields array */ 300*3ac0a46fSAndroid Build Coastguard Worker TIFFField *fields; /* actual field info */ 301*3ac0a46fSAndroid Build Coastguard Worker }; 302*3ac0a46fSAndroid Build Coastguard Worker 303*3ac0a46fSAndroid Build Coastguard Worker struct _TIFFField 304*3ac0a46fSAndroid Build Coastguard Worker { 305*3ac0a46fSAndroid Build Coastguard Worker uint32_t field_tag; /* field's tag */ 306*3ac0a46fSAndroid Build Coastguard Worker short field_readcount; /* read count/TIFF_VARIABLE/TIFF_SPP */ 307*3ac0a46fSAndroid Build Coastguard Worker short field_writecount; /* write count/TIFF_VARIABLE */ 308*3ac0a46fSAndroid Build Coastguard Worker TIFFDataType field_type; /* type of associated data */ 309*3ac0a46fSAndroid Build Coastguard Worker uint32_t 310*3ac0a46fSAndroid Build Coastguard Worker field_anonymous; /* if true, this is a unknown / anonymous tag */ 311*3ac0a46fSAndroid Build Coastguard Worker TIFFSetGetFieldType 312*3ac0a46fSAndroid Build Coastguard Worker set_field_type; /* type to be passed to TIFFSetField */ 313*3ac0a46fSAndroid Build Coastguard Worker TIFFSetGetFieldType 314*3ac0a46fSAndroid Build Coastguard Worker get_field_type; /* type to be passed to TIFFGetField */ 315*3ac0a46fSAndroid Build Coastguard Worker unsigned short field_bit; /* bit in fieldsset bit vector */ 316*3ac0a46fSAndroid Build Coastguard Worker unsigned char field_oktochange; /* if true, can change while writing */ 317*3ac0a46fSAndroid Build Coastguard Worker unsigned char field_passcount; /* if true, pass dir count on set */ 318*3ac0a46fSAndroid Build Coastguard Worker char *field_name; /* ASCII name */ 319*3ac0a46fSAndroid Build Coastguard Worker TIFFFieldArray *field_subfields; /* if field points to child ifds, child 320*3ac0a46fSAndroid Build Coastguard Worker ifd field definition array */ 321*3ac0a46fSAndroid Build Coastguard Worker }; 322*3ac0a46fSAndroid Build Coastguard Worker 323*3ac0a46fSAndroid Build Coastguard Worker extern int _TIFFMergeFields(TIFF *, const TIFFField[], uint32_t); 324*3ac0a46fSAndroid Build Coastguard Worker extern const TIFFField *_TIFFFindOrRegisterField(TIFF *, uint32_t, 325*3ac0a46fSAndroid Build Coastguard Worker TIFFDataType); 326*3ac0a46fSAndroid Build Coastguard Worker extern TIFFField *_TIFFCreateAnonField(TIFF *, uint32_t, TIFFDataType); 327*3ac0a46fSAndroid Build Coastguard Worker extern int _TIFFCheckFieldIsValidForCodec(TIFF *tif, ttag_t tag); 328*3ac0a46fSAndroid Build Coastguard Worker extern int _TIFFCheckDirNumberAndOffset(TIFF *tif, tdir_t dirn, 329*3ac0a46fSAndroid Build Coastguard Worker uint64_t diroff); 330*3ac0a46fSAndroid Build Coastguard Worker extern int _TIFFGetDirNumberFromOffset(TIFF *tif, uint64_t diroff, 331*3ac0a46fSAndroid Build Coastguard Worker tdir_t *dirn); 332*3ac0a46fSAndroid Build Coastguard Worker extern int _TIFFGetOffsetFromDirNumber(TIFF *tif, tdir_t dirn, 333*3ac0a46fSAndroid Build Coastguard Worker uint64_t *diroff); 334*3ac0a46fSAndroid Build Coastguard Worker extern int _TIFFRemoveEntryFromDirectoryListByOffset(TIFF *tif, 335*3ac0a46fSAndroid Build Coastguard Worker uint64_t diroff); 336*3ac0a46fSAndroid Build Coastguard Worker 337*3ac0a46fSAndroid Build Coastguard Worker #if defined(__cplusplus) 338*3ac0a46fSAndroid Build Coastguard Worker } 339*3ac0a46fSAndroid Build Coastguard Worker #endif 340*3ac0a46fSAndroid Build Coastguard Worker #endif /* _TIFFDIR_ */ 341