1 /* $Id: tif_dirinfo.c,v 1.126 2016-11-18 02:52:13 bfriesen Exp $ */
4 * Copyright (c) 1988-1997 Sam Leffler
5 * Copyright (c) 1991-1997 Silicon Graphics, Inc.
7 * Permission to use, copy, modify, distribute, and sell this software and
8 * its documentation for any purpose is hereby granted without fee, provided
9 * that (i) the above copyright notices and this permission notice appear in
10 * all copies of the software and related documentation, and (ii) the names of
11 * Sam Leffler and Silicon Graphics may not be used in any advertising or
12 * publicity relating to the software without the specific, prior written
13 * permission of Sam Leffler and Silicon Graphics.
15 * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
16 * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
17 * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
19 * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
20 * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
21 * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
22 * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
23 * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
30 * Core Directory Tag Support.
37 * NOTE: THIS ARRAY IS ASSUMED TO BE SORTED BY TAG.
39 * NOTE: The second field (field_readcount) and third field (field_writecount)
40 * sometimes use the values TIFF_VARIABLE (-1), TIFF_VARIABLE2 (-3)
41 * and TIFF_SPP (-2). The macros should be used but would throw off
42 * the formatting of the code, so please interpret the -1, -2 and -3
46 /* const object should be initialized */
48 #pragma warning( push )
49 #pragma warning( disable : 4132 )
51 static const TIFFFieldArray tiffFieldArray
;
52 static const TIFFFieldArray exifFieldArray
;
54 #pragma warning( pop )
57 static const TIFFField
59 { TIFFTAG_SUBFILETYPE
, 1, 1, TIFF_LONG
, 0, TIFF_SETGET_UINT32
, TIFF_SETGET_UNDEFINED
, FIELD_SUBFILETYPE
, 1, 0, "SubfileType", NULL
},
60 { TIFFTAG_OSUBFILETYPE
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UNDEFINED
, TIFF_SETGET_UNDEFINED
, FIELD_SUBFILETYPE
, 1, 0, "OldSubfileType", NULL
},
61 { TIFFTAG_IMAGEWIDTH
, 1, 1, TIFF_LONG
, 0, TIFF_SETGET_UINT32
, TIFF_SETGET_UNDEFINED
, FIELD_IMAGEDIMENSIONS
, 0, 0, "ImageWidth", NULL
},
62 { TIFFTAG_IMAGELENGTH
, 1, 1, TIFF_LONG
, 0, TIFF_SETGET_UINT32
, TIFF_SETGET_UNDEFINED
, FIELD_IMAGEDIMENSIONS
, 1, 0, "ImageLength", NULL
},
63 { TIFFTAG_BITSPERSAMPLE
, -1, -1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_BITSPERSAMPLE
, 0, 0, "BitsPerSample", NULL
},
64 { TIFFTAG_COMPRESSION
, -1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_COMPRESSION
, 0, 0, "Compression", NULL
},
65 { TIFFTAG_PHOTOMETRIC
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_PHOTOMETRIC
, 0, 0, "PhotometricInterpretation", NULL
},
66 { TIFFTAG_THRESHHOLDING
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_THRESHHOLDING
, 1, 0, "Threshholding", NULL
},
67 { TIFFTAG_CELLWIDTH
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UNDEFINED
, TIFF_SETGET_UNDEFINED
, FIELD_IGNORE
, 1, 0, "CellWidth", NULL
},
68 { TIFFTAG_CELLLENGTH
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UNDEFINED
, TIFF_SETGET_UNDEFINED
, FIELD_IGNORE
, 1, 0, "CellLength", NULL
},
69 { TIFFTAG_FILLORDER
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_FILLORDER
, 0, 0, "FillOrder", NULL
},
70 { TIFFTAG_DOCUMENTNAME
, -1, -1, TIFF_ASCII
, 0, TIFF_SETGET_ASCII
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "DocumentName", NULL
},
71 { TIFFTAG_IMAGEDESCRIPTION
, -1, -1, TIFF_ASCII
, 0, TIFF_SETGET_ASCII
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "ImageDescription", NULL
},
72 { TIFFTAG_MAKE
, -1, -1, TIFF_ASCII
, 0, TIFF_SETGET_ASCII
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "Make", NULL
},
73 { TIFFTAG_MODEL
, -1, -1, TIFF_ASCII
, 0, TIFF_SETGET_ASCII
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "Model", NULL
},
74 { TIFFTAG_STRIPOFFSETS
, -1, -1, TIFF_LONG8
, 0, TIFF_SETGET_UNDEFINED
, TIFF_SETGET_UNDEFINED
, FIELD_STRIPOFFSETS
, 0, 0, "StripOffsets", NULL
},
75 { TIFFTAG_ORIENTATION
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_ORIENTATION
, 0, 0, "Orientation", NULL
},
76 { TIFFTAG_SAMPLESPERPIXEL
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_SAMPLESPERPIXEL
, 0, 0, "SamplesPerPixel", NULL
},
77 { TIFFTAG_ROWSPERSTRIP
, 1, 1, TIFF_LONG
, 0, TIFF_SETGET_UINT32
, TIFF_SETGET_UNDEFINED
, FIELD_ROWSPERSTRIP
, 0, 0, "RowsPerStrip", NULL
},
78 { TIFFTAG_STRIPBYTECOUNTS
, -1, -1, TIFF_LONG8
, 0, TIFF_SETGET_UNDEFINED
, TIFF_SETGET_UNDEFINED
, FIELD_STRIPBYTECOUNTS
, 0, 0, "StripByteCounts", NULL
},
79 { TIFFTAG_MINSAMPLEVALUE
, -2, -1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_MINSAMPLEVALUE
, 1, 0, "MinSampleValue", NULL
},
80 { TIFFTAG_MAXSAMPLEVALUE
, -2, -1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_MAXSAMPLEVALUE
, 1, 0, "MaxSampleValue", NULL
},
81 { TIFFTAG_XRESOLUTION
, 1, 1, TIFF_RATIONAL
, 0, TIFF_SETGET_DOUBLE
, TIFF_SETGET_UNDEFINED
, FIELD_RESOLUTION
, 1, 0, "XResolution", NULL
},
82 { TIFFTAG_YRESOLUTION
, 1, 1, TIFF_RATIONAL
, 0, TIFF_SETGET_DOUBLE
, TIFF_SETGET_UNDEFINED
, FIELD_RESOLUTION
, 1, 0, "YResolution", NULL
},
83 { TIFFTAG_PLANARCONFIG
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_PLANARCONFIG
, 0, 0, "PlanarConfiguration", NULL
},
84 { TIFFTAG_PAGENAME
, -1, -1, TIFF_ASCII
, 0, TIFF_SETGET_ASCII
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "PageName", NULL
},
85 { TIFFTAG_XPOSITION
, 1, 1, TIFF_RATIONAL
, 0, TIFF_SETGET_DOUBLE
, TIFF_SETGET_UNDEFINED
, FIELD_POSITION
, 1, 0, "XPosition", NULL
},
86 { TIFFTAG_YPOSITION
, 1, 1, TIFF_RATIONAL
, 0, TIFF_SETGET_DOUBLE
, TIFF_SETGET_UNDEFINED
, FIELD_POSITION
, 1, 0, "YPosition", NULL
},
87 { TIFFTAG_FREEOFFSETS
, -1, -1, TIFF_LONG8
, 0, TIFF_SETGET_UNDEFINED
, TIFF_SETGET_UNDEFINED
, FIELD_IGNORE
, 0, 0, "FreeOffsets", NULL
},
88 { TIFFTAG_FREEBYTECOUNTS
, -1, -1, TIFF_LONG8
, 0, TIFF_SETGET_UNDEFINED
, TIFF_SETGET_UNDEFINED
, FIELD_IGNORE
, 0, 0, "FreeByteCounts", NULL
},
89 { TIFFTAG_GRAYRESPONSEUNIT
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UNDEFINED
, TIFF_SETGET_UNDEFINED
, FIELD_IGNORE
, 1, 0, "GrayResponseUnit", NULL
},
90 { TIFFTAG_GRAYRESPONSECURVE
, -1, -1, TIFF_SHORT
, 0, TIFF_SETGET_UNDEFINED
, TIFF_SETGET_UNDEFINED
, FIELD_IGNORE
, 1, 0, "GrayResponseCurve", NULL
},
91 { TIFFTAG_RESOLUTIONUNIT
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_RESOLUTIONUNIT
, 1, 0, "ResolutionUnit", NULL
},
92 { TIFFTAG_PAGENUMBER
, 2, 2, TIFF_SHORT
, 0, TIFF_SETGET_UINT16_PAIR
, TIFF_SETGET_UNDEFINED
, FIELD_PAGENUMBER
, 1, 0, "PageNumber", NULL
},
93 { TIFFTAG_COLORRESPONSEUNIT
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UNDEFINED
, TIFF_SETGET_UNDEFINED
, FIELD_IGNORE
, 1, 0, "ColorResponseUnit", NULL
},
94 { TIFFTAG_TRANSFERFUNCTION
, -1, -1, TIFF_SHORT
, 0, TIFF_SETGET_OTHER
, TIFF_SETGET_UNDEFINED
, FIELD_TRANSFERFUNCTION
, 1, 0, "TransferFunction", NULL
},
95 { TIFFTAG_SOFTWARE
, -1, -1, TIFF_ASCII
, 0, TIFF_SETGET_ASCII
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "Software", NULL
},
96 { TIFFTAG_DATETIME
, 20, 20, TIFF_ASCII
, 0, TIFF_SETGET_ASCII
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "DateTime", NULL
},
97 { TIFFTAG_ARTIST
, -1, -1, TIFF_ASCII
, 0, TIFF_SETGET_ASCII
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "Artist", NULL
},
98 { TIFFTAG_HOSTCOMPUTER
, -1, -1, TIFF_ASCII
, 0, TIFF_SETGET_ASCII
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "HostComputer", NULL
},
99 { TIFFTAG_WHITEPOINT
, 2, 2, TIFF_RATIONAL
, 0, TIFF_SETGET_C0_FLOAT
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "WhitePoint", NULL
},
100 { TIFFTAG_PRIMARYCHROMATICITIES
, 6, 6, TIFF_RATIONAL
, 0, TIFF_SETGET_C0_FLOAT
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "PrimaryChromaticities", NULL
},
101 { TIFFTAG_COLORMAP
, -1, -1, TIFF_SHORT
, 0, TIFF_SETGET_OTHER
, TIFF_SETGET_UNDEFINED
, FIELD_COLORMAP
, 1, 0, "ColorMap", NULL
},
102 { TIFFTAG_HALFTONEHINTS
, 2, 2, TIFF_SHORT
, 0, TIFF_SETGET_UINT16_PAIR
, TIFF_SETGET_UNDEFINED
, FIELD_HALFTONEHINTS
, 1, 0, "HalftoneHints", NULL
},
103 { TIFFTAG_TILEWIDTH
, 1, 1, TIFF_LONG
, 0, TIFF_SETGET_UINT32
, TIFF_SETGET_UNDEFINED
, FIELD_TILEDIMENSIONS
, 0, 0, "TileWidth", NULL
},
104 { TIFFTAG_TILELENGTH
, 1, 1, TIFF_LONG
, 0, TIFF_SETGET_UINT32
, TIFF_SETGET_UNDEFINED
, FIELD_TILEDIMENSIONS
, 0, 0, "TileLength", NULL
},
105 { TIFFTAG_TILEOFFSETS
, -1, 1, TIFF_LONG8
, 0, TIFF_SETGET_UNDEFINED
, TIFF_SETGET_UNDEFINED
, FIELD_STRIPOFFSETS
, 0, 0, "TileOffsets", NULL
},
106 { TIFFTAG_TILEBYTECOUNTS
, -1, 1, TIFF_LONG8
, 0, TIFF_SETGET_UNDEFINED
, TIFF_SETGET_UNDEFINED
, FIELD_STRIPBYTECOUNTS
, 0, 0, "TileByteCounts", NULL
},
107 { TIFFTAG_SUBIFD
, -1, -1, TIFF_IFD8
, 0, TIFF_SETGET_C16_IFD8
, TIFF_SETGET_UNDEFINED
, FIELD_SUBIFD
, 1, 1, "SubIFD", (TIFFFieldArray
*) &tiffFieldArray
},
108 { TIFFTAG_INKSET
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "InkSet", NULL
},
109 { TIFFTAG_INKNAMES
, -1, -1, TIFF_ASCII
, 0, TIFF_SETGET_C16_ASCII
, TIFF_SETGET_UNDEFINED
, FIELD_INKNAMES
, 1, 1, "InkNames", NULL
},
110 { TIFFTAG_NUMBEROFINKS
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "NumberOfInks", NULL
},
111 { TIFFTAG_DOTRANGE
, 2, 2, TIFF_SHORT
, 0, TIFF_SETGET_UINT16_PAIR
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "DotRange", NULL
},
112 { TIFFTAG_TARGETPRINTER
, -1, -1, TIFF_ASCII
, 0, TIFF_SETGET_ASCII
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "TargetPrinter", NULL
},
113 { TIFFTAG_EXTRASAMPLES
, -1, -1, TIFF_SHORT
, 0, TIFF_SETGET_C16_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_EXTRASAMPLES
, 0, 1, "ExtraSamples", NULL
},
114 { TIFFTAG_SAMPLEFORMAT
, -1, -1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_SAMPLEFORMAT
, 0, 0, "SampleFormat", NULL
},
115 { TIFFTAG_SMINSAMPLEVALUE
, -2, -1, TIFF_ANY
, 0, TIFF_SETGET_DOUBLE
, TIFF_SETGET_UNDEFINED
, FIELD_SMINSAMPLEVALUE
, 1, 0, "SMinSampleValue", NULL
},
116 { TIFFTAG_SMAXSAMPLEVALUE
, -2, -1, TIFF_ANY
, 0, TIFF_SETGET_DOUBLE
, TIFF_SETGET_UNDEFINED
, FIELD_SMAXSAMPLEVALUE
, 1, 0, "SMaxSampleValue", NULL
},
117 { TIFFTAG_CLIPPATH
, -1, -3, TIFF_BYTE
, 0, TIFF_SETGET_UNDEFINED
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 1, "ClipPath", NULL
},
118 { TIFFTAG_XCLIPPATHUNITS
, 1, 1, TIFF_SLONG
, 0, TIFF_SETGET_UNDEFINED
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "XClipPathUnits", NULL
},
119 { TIFFTAG_XCLIPPATHUNITS
, 1, 1, TIFF_SBYTE
, 0, TIFF_SETGET_UNDEFINED
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "XClipPathUnits", NULL
},
120 { TIFFTAG_YCLIPPATHUNITS
, 1, 1, TIFF_SLONG
, 0, TIFF_SETGET_UNDEFINED
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "YClipPathUnits", NULL
},
121 { TIFFTAG_YCBCRCOEFFICIENTS
, 3, 3, TIFF_RATIONAL
, 0, TIFF_SETGET_C0_FLOAT
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "YCbCrCoefficients", NULL
},
122 { TIFFTAG_YCBCRSUBSAMPLING
, 2, 2, TIFF_SHORT
, 0, TIFF_SETGET_UINT16_PAIR
, TIFF_SETGET_UNDEFINED
, FIELD_YCBCRSUBSAMPLING
, 0, 0, "YCbCrSubsampling", NULL
},
123 { TIFFTAG_YCBCRPOSITIONING
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_YCBCRPOSITIONING
, 0, 0, "YCbCrPositioning", NULL
},
124 { TIFFTAG_REFERENCEBLACKWHITE
, 6, 6, TIFF_RATIONAL
, 0, TIFF_SETGET_C0_FLOAT
, TIFF_SETGET_UNDEFINED
, FIELD_REFBLACKWHITE
, 1, 0, "ReferenceBlackWhite", NULL
},
125 { TIFFTAG_XMLPACKET
, -3, -3, TIFF_BYTE
, 0, TIFF_SETGET_C32_UINT8
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 1, "XMLPacket", NULL
},
127 { TIFFTAG_MATTEING
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_EXTRASAMPLES
, 0, 0, "Matteing", NULL
},
128 { TIFFTAG_DATATYPE
, -2, -1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_SAMPLEFORMAT
, 0, 0, "DataType", NULL
},
129 { TIFFTAG_IMAGEDEPTH
, 1, 1, TIFF_LONG
, 0, TIFF_SETGET_UINT32
, TIFF_SETGET_UNDEFINED
, FIELD_IMAGEDEPTH
, 0, 0, "ImageDepth", NULL
},
130 { TIFFTAG_TILEDEPTH
, 1, 1, TIFF_LONG
, 0, TIFF_SETGET_UINT32
, TIFF_SETGET_UNDEFINED
, FIELD_TILEDEPTH
, 0, 0, "TileDepth", NULL
},
132 /* begin Pixar tags */
133 { TIFFTAG_PIXAR_IMAGEFULLWIDTH
, 1, 1, TIFF_LONG
, 0, TIFF_SETGET_UINT32
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "ImageFullWidth", NULL
},
134 { TIFFTAG_PIXAR_IMAGEFULLLENGTH
, 1, 1, TIFF_LONG
, 0, TIFF_SETGET_UINT32
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "ImageFullLength", NULL
},
135 { TIFFTAG_PIXAR_TEXTUREFORMAT
, -1, -1, TIFF_ASCII
, 0, TIFF_SETGET_ASCII
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "TextureFormat", NULL
},
136 { TIFFTAG_PIXAR_WRAPMODES
, -1, -1, TIFF_ASCII
, 0, TIFF_SETGET_ASCII
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "TextureWrapModes", NULL
},
137 { TIFFTAG_PIXAR_FOVCOT
, 1, 1, TIFF_FLOAT
, 0, TIFF_SETGET_FLOAT
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "FieldOfViewCotangent", NULL
},
138 { TIFFTAG_PIXAR_MATRIX_WORLDTOSCREEN
, 16, 16, TIFF_FLOAT
, 0, TIFF_SETGET_C0_FLOAT
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "MatrixWorldToScreen", NULL
},
139 { TIFFTAG_PIXAR_MATRIX_WORLDTOCAMERA
, 16, 16, TIFF_FLOAT
, 0, TIFF_SETGET_C0_FLOAT
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "MatrixWorldToCamera", NULL
},
140 { TIFFTAG_CFAREPEATPATTERNDIM
, 2, 2, TIFF_SHORT
, 0, TIFF_SETGET_C0_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "CFARepeatPatternDim", NULL
},
141 { TIFFTAG_CFAPATTERN
, 4, 4, TIFF_BYTE
, 0, TIFF_SETGET_C0_UINT8
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "CFAPattern" , NULL
},
142 { TIFFTAG_COPYRIGHT
, -1, -1, TIFF_ASCII
, 0, TIFF_SETGET_ASCII
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "Copyright", NULL
},
144 { TIFFTAG_RICHTIFFIPTC
, -3, -3, TIFF_LONG
, 0, TIFF_SETGET_C32_UINT32
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 1, "RichTIFFIPTC", NULL
},
145 { TIFFTAG_PHOTOSHOP
, -3, -3, TIFF_BYTE
, 0, TIFF_SETGET_C32_UINT8
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 1, "Photoshop", NULL
},
146 { TIFFTAG_EXIFIFD
, 1, 1, TIFF_IFD8
, 0, TIFF_SETGET_IFD8
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "EXIFIFDOffset", (TIFFFieldArray
*) &exifFieldArray
},
147 { TIFFTAG_ICCPROFILE
, -3, -3, TIFF_UNDEFINED
, 0, TIFF_SETGET_C32_UINT8
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 1, "ICC Profile", NULL
},
148 { TIFFTAG_GPSIFD
, 1, 1, TIFF_IFD8
, 0, TIFF_SETGET_IFD8
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "GPSIFDOffset", NULL
},
149 { TIFFTAG_FAXRECVPARAMS
, 1, 1, TIFF_LONG
, 0, TIFF_SETGET_UINT32
, TIFF_SETGET_UINT32
, FIELD_CUSTOM
, TRUE
, FALSE
, "FaxRecvParams", NULL
},
150 { TIFFTAG_FAXSUBADDRESS
, -1, -1, TIFF_ASCII
, 0, TIFF_SETGET_ASCII
, TIFF_SETGET_ASCII
, FIELD_CUSTOM
, TRUE
, FALSE
, "FaxSubAddress", NULL
},
151 { TIFFTAG_FAXRECVTIME
, 1, 1, TIFF_LONG
, 0, TIFF_SETGET_UINT32
, TIFF_SETGET_UINT32
, FIELD_CUSTOM
, TRUE
, FALSE
, "FaxRecvTime", NULL
},
152 { TIFFTAG_FAXDCS
, -1, -1, TIFF_ASCII
, 0, TIFF_SETGET_ASCII
, TIFF_SETGET_ASCII
, FIELD_CUSTOM
, TRUE
, FALSE
, "FaxDcs", NULL
},
153 { TIFFTAG_STONITS
, 1, 1, TIFF_DOUBLE
, 0, TIFF_SETGET_DOUBLE
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "StoNits", NULL
},
154 { TIFFTAG_INTEROPERABILITYIFD
, 1, 1, TIFF_IFD8
, 0, TIFF_SETGET_UNDEFINED
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "InteroperabilityIFDOffset", NULL
},
156 { TIFFTAG_DNGVERSION
, 4, 4, TIFF_BYTE
, 0, TIFF_SETGET_C0_UINT8
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "DNGVersion", NULL
},
157 { TIFFTAG_DNGBACKWARDVERSION
, 4, 4, TIFF_BYTE
, 0, TIFF_SETGET_C0_UINT8
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "DNGBackwardVersion", NULL
},
158 { TIFFTAG_UNIQUECAMERAMODEL
, -1, -1, TIFF_ASCII
, 0, TIFF_SETGET_ASCII
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "UniqueCameraModel", NULL
},
159 { TIFFTAG_LOCALIZEDCAMERAMODEL
, -1, -1, TIFF_BYTE
, 0, TIFF_SETGET_C16_UINT8
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 1, "LocalizedCameraModel", NULL
},
160 { TIFFTAG_CFAPLANECOLOR
, -1, -1, TIFF_BYTE
, 0, TIFF_SETGET_C16_UINT8
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 1, "CFAPlaneColor", NULL
},
161 { TIFFTAG_CFALAYOUT
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "CFALayout", NULL
},
162 { TIFFTAG_LINEARIZATIONTABLE
, -1, -1, TIFF_SHORT
, 0, TIFF_SETGET_C16_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 1, "LinearizationTable", NULL
},
163 { TIFFTAG_BLACKLEVELREPEATDIM
, 2, 2, TIFF_SHORT
, 0, TIFF_SETGET_C0_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "BlackLevelRepeatDim", NULL
},
164 { TIFFTAG_BLACKLEVEL
, -1, -1, TIFF_RATIONAL
, 0, TIFF_SETGET_C16_FLOAT
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 1, "BlackLevel", NULL
},
165 { TIFFTAG_BLACKLEVELDELTAH
, -1, -1, TIFF_SRATIONAL
, 0, TIFF_SETGET_C16_FLOAT
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 1, "BlackLevelDeltaH", NULL
},
166 { TIFFTAG_BLACKLEVELDELTAV
, -1, -1, TIFF_SRATIONAL
, 0, TIFF_SETGET_C16_FLOAT
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 1, "BlackLevelDeltaV", NULL
},
167 { TIFFTAG_WHITELEVEL
, -1, -1, TIFF_LONG
, 0, TIFF_SETGET_C16_UINT32
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 1, "WhiteLevel", NULL
},
168 { TIFFTAG_DEFAULTSCALE
, 2, 2, TIFF_RATIONAL
, 0, TIFF_SETGET_C0_FLOAT
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "DefaultScale", NULL
},
169 { TIFFTAG_BESTQUALITYSCALE
, 1, 1, TIFF_RATIONAL
, 0, TIFF_SETGET_DOUBLE
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "BestQualityScale", NULL
},
170 { TIFFTAG_DEFAULTCROPORIGIN
, 2, 2, TIFF_RATIONAL
, 0, TIFF_SETGET_C0_FLOAT
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "DefaultCropOrigin", NULL
},
171 { TIFFTAG_DEFAULTCROPSIZE
, 2, 2, TIFF_RATIONAL
, 0, TIFF_SETGET_C0_FLOAT
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "DefaultCropSize", NULL
},
172 { TIFFTAG_COLORMATRIX1
, -1, -1, TIFF_SRATIONAL
, 0, TIFF_SETGET_C16_FLOAT
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 1, "ColorMatrix1", NULL
},
173 { TIFFTAG_COLORMATRIX2
, -1, -1, TIFF_SRATIONAL
, 0, TIFF_SETGET_C16_FLOAT
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 1, "ColorMatrix2", NULL
},
174 { TIFFTAG_CAMERACALIBRATION1
, -1, -1, TIFF_SRATIONAL
, 0, TIFF_SETGET_C16_FLOAT
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 1, "CameraCalibration1", NULL
},
175 { TIFFTAG_CAMERACALIBRATION2
, -1, -1, TIFF_SRATIONAL
, 0, TIFF_SETGET_C16_FLOAT
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 1, "CameraCalibration2", NULL
},
176 { TIFFTAG_REDUCTIONMATRIX1
, -1, -1, TIFF_SRATIONAL
, 0, TIFF_SETGET_C16_FLOAT
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 1, "ReductionMatrix1", NULL
},
177 { TIFFTAG_REDUCTIONMATRIX2
, -1, -1, TIFF_SRATIONAL
, 0, TIFF_SETGET_C16_FLOAT
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 1, "ReductionMatrix2", NULL
},
178 { TIFFTAG_ANALOGBALANCE
, -1, -1, TIFF_RATIONAL
, 0, TIFF_SETGET_C16_FLOAT
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 1, "AnalogBalance", NULL
},
179 { TIFFTAG_ASSHOTNEUTRAL
, -1, -1, TIFF_RATIONAL
, 0, TIFF_SETGET_C16_FLOAT
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 1, "AsShotNeutral", NULL
},
180 { TIFFTAG_ASSHOTWHITEXY
, 2, 2, TIFF_RATIONAL
, 0, TIFF_SETGET_C0_FLOAT
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "AsShotWhiteXY", NULL
},
181 { TIFFTAG_BASELINEEXPOSURE
, 1, 1, TIFF_SRATIONAL
, 0, TIFF_SETGET_DOUBLE
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "BaselineExposure", NULL
},
182 { TIFFTAG_BASELINENOISE
, 1, 1, TIFF_RATIONAL
, 0, TIFF_SETGET_DOUBLE
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "BaselineNoise", NULL
},
183 { TIFFTAG_BASELINESHARPNESS
, 1, 1, TIFF_RATIONAL
, 0, TIFF_SETGET_DOUBLE
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "BaselineSharpness", NULL
},
184 { TIFFTAG_BAYERGREENSPLIT
, 1, 1, TIFF_LONG
, 0, TIFF_SETGET_UINT32
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "BayerGreenSplit", NULL
},
185 { TIFFTAG_LINEARRESPONSELIMIT
, 1, 1, TIFF_RATIONAL
, 0, TIFF_SETGET_DOUBLE
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "LinearResponseLimit", NULL
},
186 { TIFFTAG_CAMERASERIALNUMBER
, -1, -1, TIFF_ASCII
, 0, TIFF_SETGET_ASCII
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "CameraSerialNumber", NULL
},
187 { TIFFTAG_LENSINFO
, 4, 4, TIFF_RATIONAL
, 0, TIFF_SETGET_C0_FLOAT
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "LensInfo", NULL
},
188 { TIFFTAG_CHROMABLURRADIUS
, 1, 1, TIFF_RATIONAL
, 0, TIFF_SETGET_DOUBLE
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "ChromaBlurRadius", NULL
},
189 { TIFFTAG_ANTIALIASSTRENGTH
, 1, 1, TIFF_RATIONAL
, 0, TIFF_SETGET_DOUBLE
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "AntiAliasStrength", NULL
},
190 { TIFFTAG_SHADOWSCALE
, 1, 1, TIFF_RATIONAL
, 0, TIFF_SETGET_DOUBLE
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "ShadowScale", NULL
},
191 { TIFFTAG_DNGPRIVATEDATA
, -1, -1, TIFF_BYTE
, 0, TIFF_SETGET_C16_UINT8
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 1, "DNGPrivateData", NULL
},
192 { TIFFTAG_MAKERNOTESAFETY
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "MakerNoteSafety", NULL
},
193 { TIFFTAG_CALIBRATIONILLUMINANT1
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "CalibrationIlluminant1", NULL
},
194 { TIFFTAG_CALIBRATIONILLUMINANT2
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "CalibrationIlluminant2", NULL
},
195 { TIFFTAG_RAWDATAUNIQUEID
, 16, 16, TIFF_BYTE
, 0, TIFF_SETGET_C0_UINT8
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "RawDataUniqueID", NULL
},
196 { TIFFTAG_ORIGINALRAWFILENAME
, -1, -1, TIFF_BYTE
, 0, TIFF_SETGET_C16_UINT8
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 1, "OriginalRawFileName", NULL
},
197 { TIFFTAG_ORIGINALRAWFILEDATA
, -1, -1, TIFF_UNDEFINED
, 0, TIFF_SETGET_C16_UINT8
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 1, "OriginalRawFileData", NULL
},
198 { TIFFTAG_ACTIVEAREA
, 4, 4, TIFF_LONG
, 0, TIFF_SETGET_C0_UINT32
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "ActiveArea", NULL
},
199 { TIFFTAG_MASKEDAREAS
, -1, -1, TIFF_LONG
, 0, TIFF_SETGET_C16_UINT32
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 1, "MaskedAreas", NULL
},
200 { TIFFTAG_ASSHOTICCPROFILE
, -1, -1, TIFF_UNDEFINED
, 0, TIFF_SETGET_C16_UINT8
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 1, "AsShotICCProfile", NULL
},
201 { TIFFTAG_ASSHOTPREPROFILEMATRIX
, -1, -1, TIFF_SRATIONAL
, 0, TIFF_SETGET_C16_FLOAT
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 1, "AsShotPreProfileMatrix", NULL
},
202 { TIFFTAG_CURRENTICCPROFILE
, -1, -1, TIFF_UNDEFINED
, 0, TIFF_SETGET_C16_UINT8
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 1, "CurrentICCProfile", NULL
},
203 { TIFFTAG_CURRENTPREPROFILEMATRIX
, -1, -1, TIFF_SRATIONAL
, 0, TIFF_SETGET_C16_FLOAT
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 1, "CurrentPreProfileMatrix", NULL
},
204 { TIFFTAG_PERSAMPLE
, 0, 0, TIFF_SHORT
, 0, TIFF_SETGET_UNDEFINED
, TIFF_SETGET_UNDEFINED
, FIELD_PSEUDO
, TRUE
, FALSE
, "PerSample", NULL
},
206 /* begin TIFF/FX tags */
207 { TIFFTAG_INDEXED
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "Indexed", NULL
},
208 { TIFFTAG_GLOBALPARAMETERSIFD
, 1, 1, TIFF_IFD8
, 0, TIFF_SETGET_IFD8
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "GlobalParametersIFD", NULL
},
209 { TIFFTAG_PROFILETYPE
, 1, 1, TIFF_LONG
, 0, TIFF_SETGET_UINT32
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "ProfileType", NULL
},
210 { TIFFTAG_FAXPROFILE
, 1, 1, TIFF_BYTE
, 0, TIFF_SETGET_UINT8
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "FaxProfile", NULL
},
211 { TIFFTAG_CODINGMETHODS
, 1, 1, TIFF_LONG
, 0, TIFF_SETGET_UINT32
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "CodingMethods", NULL
},
212 { TIFFTAG_VERSIONYEAR
, 4, 4, TIFF_BYTE
, 0, TIFF_SETGET_C0_UINT8
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "VersionYear", NULL
},
213 { TIFFTAG_MODENUMBER
, 1, 1, TIFF_BYTE
, 0, TIFF_SETGET_UINT8
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "ModeNumber", NULL
},
214 { TIFFTAG_DECODE
, -1, -1, TIFF_SRATIONAL
, 0, TIFF_SETGET_C16_FLOAT
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 1, "Decode", NULL
},
215 { TIFFTAG_IMAGEBASECOLOR
, -1, -1, TIFF_SHORT
, 0, TIFF_SETGET_C16_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 1, "ImageBaseColor", NULL
},
216 { TIFFTAG_T82OPTIONS
, 1, 1, TIFF_LONG
, 0, TIFF_SETGET_UINT32
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "T82Options", NULL
},
217 { TIFFTAG_STRIPROWCOUNTS
, -1, -1, TIFF_LONG
, 0, TIFF_SETGET_C16_UINT32
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 1, "StripRowCounts", NULL
},
218 { TIFFTAG_IMAGELAYER
, 2, 2, TIFF_LONG
, 0, TIFF_SETGET_C0_UINT32
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 0, 0, "ImageLayer", NULL
},
219 /* end TIFF/FX tags */
220 /* begin pseudo tags */
223 static const TIFFField
225 { EXIFTAG_EXPOSURETIME
, 1, 1, TIFF_RATIONAL
, 0, TIFF_SETGET_DOUBLE
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "ExposureTime", NULL
},
226 { EXIFTAG_FNUMBER
, 1, 1, TIFF_RATIONAL
, 0, TIFF_SETGET_DOUBLE
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "FNumber", NULL
},
227 { EXIFTAG_EXPOSUREPROGRAM
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "ExposureProgram", NULL
},
228 { EXIFTAG_SPECTRALSENSITIVITY
, -1, -1, TIFF_ASCII
, 0, TIFF_SETGET_ASCII
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "SpectralSensitivity", NULL
},
229 { EXIFTAG_ISOSPEEDRATINGS
, -1, -1, TIFF_SHORT
, 0, TIFF_SETGET_C16_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 1, "ISOSpeedRatings", NULL
},
230 { EXIFTAG_OECF
, -1, -1, TIFF_UNDEFINED
, 0, TIFF_SETGET_C16_UINT8
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 1, "OptoelectricConversionFactor", NULL
},
231 { EXIFTAG_EXIFVERSION
, 4, 4, TIFF_UNDEFINED
, 0, TIFF_SETGET_C0_UINT8
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "ExifVersion", NULL
},
232 { EXIFTAG_DATETIMEORIGINAL
, 20, 20, TIFF_ASCII
, 0, TIFF_SETGET_ASCII
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "DateTimeOriginal", NULL
},
233 { EXIFTAG_DATETIMEDIGITIZED
, 20, 20, TIFF_ASCII
, 0, TIFF_SETGET_ASCII
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "DateTimeDigitized", NULL
},
234 { EXIFTAG_COMPONENTSCONFIGURATION
, 4, 4, TIFF_UNDEFINED
, 0, TIFF_SETGET_C0_UINT8
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "ComponentsConfiguration", NULL
},
235 { EXIFTAG_COMPRESSEDBITSPERPIXEL
, 1, 1, TIFF_RATIONAL
, 0, TIFF_SETGET_DOUBLE
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "CompressedBitsPerPixel", NULL
},
236 { EXIFTAG_SHUTTERSPEEDVALUE
, 1, 1, TIFF_SRATIONAL
, 0, TIFF_SETGET_DOUBLE
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "ShutterSpeedValue", NULL
},
237 { EXIFTAG_APERTUREVALUE
, 1, 1, TIFF_RATIONAL
, 0, TIFF_SETGET_DOUBLE
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "ApertureValue", NULL
},
238 { EXIFTAG_BRIGHTNESSVALUE
, 1, 1, TIFF_SRATIONAL
, 0, TIFF_SETGET_DOUBLE
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "BrightnessValue", NULL
},
239 { EXIFTAG_EXPOSUREBIASVALUE
, 1, 1, TIFF_SRATIONAL
, 0, TIFF_SETGET_DOUBLE
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "ExposureBiasValue", NULL
},
240 { EXIFTAG_MAXAPERTUREVALUE
, 1, 1, TIFF_RATIONAL
, 0, TIFF_SETGET_DOUBLE
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "MaxApertureValue", NULL
},
241 { EXIFTAG_SUBJECTDISTANCE
, 1, 1, TIFF_RATIONAL
, 0, TIFF_SETGET_DOUBLE
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "SubjectDistance", NULL
},
242 { EXIFTAG_METERINGMODE
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "MeteringMode", NULL
},
243 { EXIFTAG_LIGHTSOURCE
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "LightSource", NULL
},
244 { EXIFTAG_FLASH
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "Flash", NULL
},
245 { EXIFTAG_FOCALLENGTH
, 1, 1, TIFF_RATIONAL
, 0, TIFF_SETGET_DOUBLE
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "FocalLength", NULL
},
246 { EXIFTAG_SUBJECTAREA
, -1, -1, TIFF_SHORT
, 0, TIFF_SETGET_C16_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 1, "SubjectArea", NULL
},
247 { EXIFTAG_MAKERNOTE
, -1, -1, TIFF_UNDEFINED
, 0, TIFF_SETGET_C16_UINT8
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 1, "MakerNote", NULL
},
248 { EXIFTAG_USERCOMMENT
, -1, -1, TIFF_UNDEFINED
, 0, TIFF_SETGET_C16_UINT8
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 1, "UserComment", NULL
},
249 { EXIFTAG_SUBSECTIME
, -1, -1, TIFF_ASCII
, 0, TIFF_SETGET_ASCII
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "SubSecTime", NULL
},
250 { EXIFTAG_SUBSECTIMEORIGINAL
, -1, -1, TIFF_ASCII
, 0, TIFF_SETGET_ASCII
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "SubSecTimeOriginal", NULL
},
251 { EXIFTAG_SUBSECTIMEDIGITIZED
, -1, -1, TIFF_ASCII
, 0, TIFF_SETGET_ASCII
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "SubSecTimeDigitized", NULL
},
252 { EXIFTAG_FLASHPIXVERSION
, 4, 4, TIFF_UNDEFINED
, 0, TIFF_SETGET_C0_UINT8
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "FlashpixVersion", NULL
},
253 { EXIFTAG_COLORSPACE
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "ColorSpace", NULL
},
254 { EXIFTAG_PIXELXDIMENSION
, 1, 1, TIFF_LONG
, 0, TIFF_SETGET_UINT32
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "PixelXDimension", NULL
},
255 { EXIFTAG_PIXELYDIMENSION
, 1, 1, TIFF_LONG
, 0, TIFF_SETGET_UINT32
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "PixelYDimension", NULL
},
256 { EXIFTAG_RELATEDSOUNDFILE
, 13, 13, TIFF_ASCII
, 0, TIFF_SETGET_ASCII
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "RelatedSoundFile", NULL
},
257 { EXIFTAG_FLASHENERGY
, 1, 1, TIFF_RATIONAL
, 0, TIFF_SETGET_DOUBLE
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "FlashEnergy", NULL
},
258 { EXIFTAG_SPATIALFREQUENCYRESPONSE
, -1, -1, TIFF_UNDEFINED
, 0, TIFF_SETGET_C16_UINT8
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 1, "SpatialFrequencyResponse", NULL
},
259 { EXIFTAG_FOCALPLANEXRESOLUTION
, 1, 1, TIFF_RATIONAL
, 0, TIFF_SETGET_DOUBLE
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "FocalPlaneXResolution", NULL
},
260 { EXIFTAG_FOCALPLANEYRESOLUTION
, 1, 1, TIFF_RATIONAL
, 0, TIFF_SETGET_DOUBLE
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "FocalPlaneYResolution", NULL
},
261 { EXIFTAG_FOCALPLANERESOLUTIONUNIT
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "FocalPlaneResolutionUnit", NULL
},
262 { EXIFTAG_SUBJECTLOCATION
, 2, 2, TIFF_SHORT
, 0, TIFF_SETGET_C0_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "SubjectLocation", NULL
},
263 { EXIFTAG_EXPOSUREINDEX
, 1, 1, TIFF_RATIONAL
, 0, TIFF_SETGET_DOUBLE
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "ExposureIndex", NULL
},
264 { EXIFTAG_SENSINGMETHOD
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "SensingMethod", NULL
},
265 { EXIFTAG_FILESOURCE
, 1, 1, TIFF_UNDEFINED
, 0, TIFF_SETGET_UINT8
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "FileSource", NULL
},
266 { EXIFTAG_SCENETYPE
, 1, 1, TIFF_UNDEFINED
, 0, TIFF_SETGET_UINT8
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "SceneType", NULL
},
267 { EXIFTAG_CFAPATTERN
, -1, -1, TIFF_UNDEFINED
, 0, TIFF_SETGET_C16_UINT8
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 1, "CFAPattern", NULL
},
268 { EXIFTAG_CUSTOMRENDERED
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "CustomRendered", NULL
},
269 { EXIFTAG_EXPOSUREMODE
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "ExposureMode", NULL
},
270 { EXIFTAG_WHITEBALANCE
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "WhiteBalance", NULL
},
271 { EXIFTAG_DIGITALZOOMRATIO
, 1, 1, TIFF_RATIONAL
, 0, TIFF_SETGET_DOUBLE
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "DigitalZoomRatio", NULL
},
272 { EXIFTAG_FOCALLENGTHIN35MMFILM
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "FocalLengthIn35mmFilm", NULL
},
273 { EXIFTAG_SCENECAPTURETYPE
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "SceneCaptureType", NULL
},
274 { EXIFTAG_GAINCONTROL
, 1, 1, TIFF_RATIONAL
, 0, TIFF_SETGET_DOUBLE
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "GainControl", NULL
},
275 { EXIFTAG_CONTRAST
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "Contrast", NULL
},
276 { EXIFTAG_SATURATION
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "Saturation", NULL
},
277 { EXIFTAG_SHARPNESS
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "Sharpness", NULL
},
278 { EXIFTAG_DEVICESETTINGDESCRIPTION
, -1, -1, TIFF_UNDEFINED
, 0, TIFF_SETGET_C16_UINT8
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 1, "DeviceSettingDescription", NULL
},
279 { EXIFTAG_SUBJECTDISTANCERANGE
, 1, 1, TIFF_SHORT
, 0, TIFF_SETGET_UINT16
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "SubjectDistanceRange", NULL
},
280 { EXIFTAG_IMAGEUNIQUEID
, 33, 33, TIFF_ASCII
, 0, TIFF_SETGET_ASCII
, TIFF_SETGET_UNDEFINED
, FIELD_CUSTOM
, 1, 0, "ImageUniqueID", NULL
}
283 static const TIFFFieldArray
284 tiffFieldArray
= { tfiatImage
, 0, TIFFArrayCount(tiffFields
), (TIFFField
*) tiffFields
};
285 static const TIFFFieldArray
286 exifFieldArray
= { tfiatExif
, 0, TIFFArrayCount(exifFields
), (TIFFField
*) exifFields
};
289 * We have our own local lfind() equivalent to avoid subtle differences
290 * in types passed to lfind() on different systems.
294 td_lfind(const void *key
, const void *base
, size_t *nmemb
, size_t size
,
295 int(*compar
)(const void *, const void *))
299 end
= (char *)base
+ *nmemb
* size
;
300 for (element
= (char *)base
; element
< end
; element
+= size
)
301 if (!compar(key
, element
)) /* key found */
307 const TIFFFieldArray
*
310 return(&tiffFieldArray
);
313 const TIFFFieldArray
*
314 _TIFFGetExifFields(void)
316 return(&exifFieldArray
);
320 _TIFFSetupFields(TIFF
* tif
, const TIFFFieldArray
* fieldarray
)
322 if (tif
->tif_fields
&& tif
->tif_nfields
> 0) {
325 for (i
= 0; i
< tif
->tif_nfields
; i
++) {
326 TIFFField
*fld
= tif
->tif_fields
[i
];
327 if (fld
->field_bit
== FIELD_CUSTOM
&&
328 strncmp("Tag ", fld
->field_name
, 4) == 0) {
329 _TIFFfree(fld
->field_name
);
334 _TIFFfree(tif
->tif_fields
);
335 tif
->tif_fields
= NULL
;
336 tif
->tif_nfields
= 0;
338 if (!_TIFFMergeFields(tif
, fieldarray
->fields
, fieldarray
->count
)) {
339 TIFFErrorExt(tif
->tif_clientdata
, "_TIFFSetupFields",
340 "Setting up field info failed");
345 tagCompare(const void* a
, const void* b
)
347 const TIFFField
* ta
= *(const TIFFField
**) a
;
348 const TIFFField
* tb
= *(const TIFFField
**) b
;
349 /* NB: be careful of return values for 16-bit platforms */
350 if (ta
->field_tag
!= tb
->field_tag
)
351 return (int)ta
->field_tag
- (int)tb
->field_tag
;
353 return (ta
->field_type
== TIFF_ANY
) ?
354 0 : ((int)tb
->field_type
- (int)ta
->field_type
);
358 tagNameCompare(const void* a
, const void* b
)
360 const TIFFField
* ta
= *(const TIFFField
**) a
;
361 const TIFFField
* tb
= *(const TIFFField
**) b
;
362 int ret
= strcmp(ta
->field_name
, tb
->field_name
);
367 return (ta
->field_type
== TIFF_ANY
) ?
368 0 : ((int)tb
->field_type
- (int)ta
->field_type
);
372 _TIFFMergeFields(TIFF
* tif
, const TIFFField info
[], uint32 n
)
374 static const char module
[] = "_TIFFMergeFields";
375 static const char reason
[] = "for fields array";
376 /* TIFFField** tp; */
379 tif
->tif_foundfield
= NULL
;
381 if (tif
->tif_fields
&& tif
->tif_nfields
> 0) {
382 tif
->tif_fields
= (TIFFField
**)
383 _TIFFCheckRealloc(tif
, tif
->tif_fields
,
384 (tif
->tif_nfields
+ n
),
385 sizeof(TIFFField
*), reason
);
387 tif
->tif_fields
= (TIFFField
**)
388 _TIFFCheckMalloc(tif
, n
, sizeof(TIFFField
*),
391 if (!tif
->tif_fields
) {
392 TIFFErrorExt(tif
->tif_clientdata
, module
,
393 "Failed to allocate fields array");
397 /* tp = tif->tif_fields + tif->tif_nfields; */
398 for (i
= 0; i
< n
; i
++) {
399 const TIFFField
*fip
=
400 TIFFFindField(tif
, info
[i
].field_tag
, TIFF_ANY
);
402 /* only add definitions that aren't already present */
404 tif
->tif_fields
[tif
->tif_nfields
] = (TIFFField
*) (info
+i
);
409 /* Sort the field info by tag number */
410 qsort(tif
->tif_fields
, tif
->tif_nfields
,
411 sizeof(TIFFField
*), tagCompare
);
417 _TIFFPrintFieldInfo(TIFF
* tif
, FILE* fd
)
421 fprintf(fd
, "%s: \n", tif
->tif_name
);
422 for (i
= 0; i
< tif
->tif_nfields
; i
++) {
423 const TIFFField
* fip
= tif
->tif_fields
[i
];
424 fprintf(fd
, "field[%2d] %5lu, %2d, %2d, %d, %2d, %5s, %5s, %s\n"
426 , (unsigned long) fip
->field_tag
427 , fip
->field_readcount
, fip
->field_writecount
430 , fip
->field_oktochange
? "TRUE" : "FALSE"
431 , fip
->field_passcount
? "TRUE" : "FALSE"
438 * Return size of TIFFDataType in bytes
441 TIFFDataWidth(TIFFDataType type
)
445 case 0: /* nothing */
467 return 0; /* will return 0 for unknown types */
472 * Return size of TIFFDataType in bytes.
474 * XXX: We need a separate function to determine the space needed
475 * to store the value. For TIFF_RATIONAL values TIFFDataWidth() returns 8,
476 * but we use 4-byte float to represent rationals.
479 _TIFFDataSize(TIFFDataType type
)
509 TIFFFindField(TIFF
* tif
, uint32 tag
, TIFFDataType dt
)
511 TIFFField key
= {0, 0, 0, TIFF_NOTYPE
, 0, 0, 0, 0, 0, 0, NULL
, NULL
};
512 TIFFField
* pkey
= &key
;
513 const TIFFField
**ret
;
514 if (tif
->tif_foundfield
&& tif
->tif_foundfield
->field_tag
== tag
&&
515 (dt
== TIFF_ANY
|| dt
== tif
->tif_foundfield
->field_type
))
516 return tif
->tif_foundfield
;
518 /* If we are invoked with no field information, then just return. */
519 if (!tif
->tif_fields
)
522 /* NB: use sorted search (e.g. binary search) */
527 ret
= (const TIFFField
**) bsearch(&pkey
, tif
->tif_fields
,
529 sizeof(TIFFField
*), tagCompare
);
530 return tif
->tif_foundfield
= (ret
? *ret
: NULL
);
533 static const TIFFField
*
534 _TIFFFindFieldByName(TIFF
* tif
, const char *field_name
, TIFFDataType dt
)
536 TIFFField key
= {0, 0, 0, TIFF_NOTYPE
, 0, 0, 0, 0, 0, 0, NULL
, NULL
};
537 TIFFField
* pkey
= &key
;
538 const TIFFField
**ret
;
539 if (tif
->tif_foundfield
540 && streq(tif
->tif_foundfield
->field_name
, field_name
)
541 && (dt
== TIFF_ANY
|| dt
== tif
->tif_foundfield
->field_type
))
542 return (tif
->tif_foundfield
);
544 /* If we are invoked with no field information, then just return. */
545 if (!tif
->tif_fields
)
548 /* NB: use linear search since list is sorted by key#, not name */
550 key
.field_name
= (char *)field_name
;
553 ret
= (const TIFFField
**)
554 td_lfind(&pkey
, tif
->tif_fields
, &tif
->tif_nfields
,
555 sizeof(TIFFField
*), tagNameCompare
);
557 return tif
->tif_foundfield
= (ret
? *ret
: NULL
);
561 TIFFFieldWithTag(TIFF
* tif
, uint32 tag
)
563 const TIFFField
* fip
= TIFFFindField(tif
, tag
, TIFF_ANY
);
565 TIFFErrorExt(tif
->tif_clientdata
, "TIFFFieldWithTag",
566 "Internal error, unknown tag 0x%x",
573 TIFFFieldWithName(TIFF
* tif
, const char *field_name
)
575 const TIFFField
* fip
=
576 _TIFFFindFieldByName(tif
, field_name
, TIFF_ANY
);
578 TIFFErrorExt(tif
->tif_clientdata
, "TIFFFieldWithName",
579 "Internal error, unknown tag %s", field_name
);
585 TIFFFieldTag(const TIFFField
* fip
)
587 return fip
->field_tag
;
591 TIFFFieldName(const TIFFField
* fip
)
593 return fip
->field_name
;
597 TIFFFieldDataType(const TIFFField
* fip
)
599 return fip
->field_type
;
603 TIFFFieldPassCount(const TIFFField
* fip
)
605 return fip
->field_passcount
;
609 TIFFFieldReadCount(const TIFFField
* fip
)
611 return fip
->field_readcount
;
615 TIFFFieldWriteCount(const TIFFField
* fip
)
617 return fip
->field_writecount
;
621 _TIFFFindOrRegisterField(TIFF
*tif
, uint32 tag
, TIFFDataType dt
)
624 const TIFFField
*fld
;
626 fld
= TIFFFindField(tif
, tag
, dt
);
628 fld
= _TIFFCreateAnonField(tif
, tag
, dt
);
629 if (!_TIFFMergeFields(tif
, fld
, 1))
637 _TIFFCreateAnonField(TIFF
*tif
, uint32 tag
, TIFFDataType field_type
)
642 fld
= (TIFFField
*) _TIFFmalloc(sizeof (TIFFField
));
645 _TIFFmemset(fld
, 0, sizeof(TIFFField
));
647 fld
->field_tag
= tag
;
648 fld
->field_readcount
= TIFF_VARIABLE2
;
649 fld
->field_writecount
= TIFF_VARIABLE2
;
650 fld
->field_type
= field_type
;
656 fld
->set_field_type
= TIFF_SETGET_C32_UINT8
;
657 fld
->get_field_type
= TIFF_SETGET_C32_UINT8
;
660 fld
->set_field_type
= TIFF_SETGET_C32_ASCII
;
661 fld
->get_field_type
= TIFF_SETGET_C32_ASCII
;
664 fld
->set_field_type
= TIFF_SETGET_C32_UINT16
;
665 fld
->get_field_type
= TIFF_SETGET_C32_UINT16
;
668 fld
->set_field_type
= TIFF_SETGET_C32_UINT32
;
669 fld
->get_field_type
= TIFF_SETGET_C32_UINT32
;
674 fld
->set_field_type
= TIFF_SETGET_C32_FLOAT
;
675 fld
->get_field_type
= TIFF_SETGET_C32_FLOAT
;
678 fld
->set_field_type
= TIFF_SETGET_C32_SINT8
;
679 fld
->get_field_type
= TIFF_SETGET_C32_SINT8
;
682 fld
->set_field_type
= TIFF_SETGET_C32_SINT16
;
683 fld
->get_field_type
= TIFF_SETGET_C32_SINT16
;
686 fld
->set_field_type
= TIFF_SETGET_C32_SINT32
;
687 fld
->get_field_type
= TIFF_SETGET_C32_SINT32
;
690 fld
->set_field_type
= TIFF_SETGET_C32_DOUBLE
;
691 fld
->get_field_type
= TIFF_SETGET_C32_DOUBLE
;
695 fld
->set_field_type
= TIFF_SETGET_C32_IFD8
;
696 fld
->get_field_type
= TIFF_SETGET_C32_IFD8
;
699 fld
->set_field_type
= TIFF_SETGET_C32_UINT64
;
700 fld
->get_field_type
= TIFF_SETGET_C32_UINT64
;
703 fld
->set_field_type
= TIFF_SETGET_C32_SINT64
;
704 fld
->get_field_type
= TIFF_SETGET_C32_SINT64
;
707 fld
->set_field_type
= TIFF_SETGET_UNDEFINED
;
708 fld
->get_field_type
= TIFF_SETGET_UNDEFINED
;
711 fld
->field_bit
= FIELD_CUSTOM
;
712 fld
->field_oktochange
= TRUE
;
713 fld
->field_passcount
= TRUE
;
714 fld
->field_name
= (char *) _TIFFmalloc(32);
715 if (fld
->field_name
== NULL
) {
719 fld
->field_subfields
= NULL
;
722 * note that this name is a special sign to TIFFClose() and
723 * _TIFFSetupFields() to free the field
725 (void) snprintf(fld
->field_name
, 32, "Tag %d", (int) tag
);
730 /****************************************************************************
731 * O B S O L E T E D I N T E R F A C E S
733 * Don't use this stuff in your applications, it may be removed in the future
735 ****************************************************************************/
737 static TIFFSetGetFieldType
738 _TIFFSetGetType(TIFFDataType type
, short count
, unsigned char passcount
)
740 if (type
== TIFF_ASCII
&& count
== TIFF_VARIABLE
&& passcount
== 0)
741 return TIFF_SETGET_ASCII
;
743 else if (count
== 1 && passcount
== 0) {
748 return TIFF_SETGET_UINT8
;
750 return TIFF_SETGET_ASCII
;
752 return TIFF_SETGET_UINT16
;
754 return TIFF_SETGET_UINT32
;
758 return TIFF_SETGET_FLOAT
;
760 return TIFF_SETGET_SINT8
;
762 return TIFF_SETGET_SINT16
;
764 return TIFF_SETGET_SINT32
;
766 return TIFF_SETGET_DOUBLE
;
769 return TIFF_SETGET_IFD8
;
771 return TIFF_SETGET_UINT64
;
773 return TIFF_SETGET_SINT64
;
775 return TIFF_SETGET_UNDEFINED
;
779 else if (count
>= 1 && passcount
== 0) {
784 return TIFF_SETGET_C0_UINT8
;
786 return TIFF_SETGET_C0_ASCII
;
788 return TIFF_SETGET_C0_UINT16
;
790 return TIFF_SETGET_C0_UINT32
;
794 return TIFF_SETGET_C0_FLOAT
;
796 return TIFF_SETGET_C0_SINT8
;
798 return TIFF_SETGET_C0_SINT16
;
800 return TIFF_SETGET_C0_SINT32
;
802 return TIFF_SETGET_C0_DOUBLE
;
805 return TIFF_SETGET_C0_IFD8
;
807 return TIFF_SETGET_C0_UINT64
;
809 return TIFF_SETGET_C0_SINT64
;
811 return TIFF_SETGET_UNDEFINED
;
815 else if (count
== TIFF_VARIABLE
&& passcount
== 1) {
820 return TIFF_SETGET_C16_UINT8
;
822 return TIFF_SETGET_C16_ASCII
;
824 return TIFF_SETGET_C16_UINT16
;
826 return TIFF_SETGET_C16_UINT32
;
830 return TIFF_SETGET_C16_FLOAT
;
832 return TIFF_SETGET_C16_SINT8
;
834 return TIFF_SETGET_C16_SINT16
;
836 return TIFF_SETGET_C16_SINT32
;
838 return TIFF_SETGET_C16_DOUBLE
;
841 return TIFF_SETGET_C16_IFD8
;
843 return TIFF_SETGET_C16_UINT64
;
845 return TIFF_SETGET_C16_SINT64
;
847 return TIFF_SETGET_UNDEFINED
;
851 else if (count
== TIFF_VARIABLE2
&& passcount
== 1) {
856 return TIFF_SETGET_C32_UINT8
;
858 return TIFF_SETGET_C32_ASCII
;
860 return TIFF_SETGET_C32_UINT16
;
862 return TIFF_SETGET_C32_UINT32
;
866 return TIFF_SETGET_C32_FLOAT
;
868 return TIFF_SETGET_C32_SINT8
;
870 return TIFF_SETGET_C32_SINT16
;
872 return TIFF_SETGET_C32_SINT32
;
874 return TIFF_SETGET_C32_DOUBLE
;
877 return TIFF_SETGET_C32_IFD8
;
879 return TIFF_SETGET_C32_UINT64
;
881 return TIFF_SETGET_C32_SINT64
;
883 return TIFF_SETGET_UNDEFINED
;
887 return TIFF_SETGET_UNDEFINED
;
891 TIFFMergeFieldInfo(TIFF
* tif
, const TIFFFieldInfo info
[], uint32 n
)
893 static const char module
[] = "TIFFMergeFieldInfo";
894 static const char reason
[] = "for fields array";
899 if (tif
->tif_nfieldscompat
> 0) {
900 tif
->tif_fieldscompat
= (TIFFFieldArray
*)
901 _TIFFCheckRealloc(tif
, tif
->tif_fieldscompat
,
902 tif
->tif_nfieldscompat
+ 1,
903 sizeof(TIFFFieldArray
), reason
);
905 tif
->tif_fieldscompat
= (TIFFFieldArray
*)
906 _TIFFCheckMalloc(tif
, 1, sizeof(TIFFFieldArray
),
909 if (!tif
->tif_fieldscompat
) {
910 TIFFErrorExt(tif
->tif_clientdata
, module
,
911 "Failed to allocate fields array");
914 nfields
= tif
->tif_nfieldscompat
++;
916 tif
->tif_fieldscompat
[nfields
].type
= tfiatOther
;
917 tif
->tif_fieldscompat
[nfields
].allocated_size
= n
;
918 tif
->tif_fieldscompat
[nfields
].count
= n
;
919 tif
->tif_fieldscompat
[nfields
].fields
=
920 (TIFFField
*)_TIFFCheckMalloc(tif
, n
, sizeof(TIFFField
),
922 if (!tif
->tif_fieldscompat
[nfields
].fields
) {
923 TIFFErrorExt(tif
->tif_clientdata
, module
,
924 "Failed to allocate fields array");
928 tp
= tif
->tif_fieldscompat
[nfields
].fields
;
929 for (i
= 0; i
< n
; i
++) {
930 tp
->field_tag
= info
[i
].field_tag
;
931 tp
->field_readcount
= info
[i
].field_readcount
;
932 tp
->field_writecount
= info
[i
].field_writecount
;
933 tp
->field_type
= info
[i
].field_type
;
936 _TIFFSetGetType(info
[i
].field_type
,
937 info
[i
].field_readcount
,
938 info
[i
].field_passcount
);
940 _TIFFSetGetType(info
[i
].field_type
,
941 info
[i
].field_readcount
,
942 info
[i
].field_passcount
);
943 tp
->field_bit
= info
[i
].field_bit
;
944 tp
->field_oktochange
= info
[i
].field_oktochange
;
945 tp
->field_passcount
= info
[i
].field_passcount
;
946 tp
->field_name
= info
[i
].field_name
;
947 tp
->field_subfields
= NULL
;
951 if (!_TIFFMergeFields(tif
, tif
->tif_fieldscompat
[nfields
].fields
, n
)) {
952 TIFFErrorExt(tif
->tif_clientdata
, module
,
953 "Setting up field info failed");
960 /* vim: set ts=8 sts=8 sw=8 noet: */