]>
Commit | Line | Data |
---|---|---|
1 | /* $Id$ */ | |
2 | ||
3 | /* | |
4 | * Copyright (c) 1988-1997 Sam Leffler | |
5 | * Copyright (c) 1991-1997 Silicon Graphics, Inc. | |
6 | * | |
7 | * Permission to use, copy, modify, distribute, and sell this software and | |
8 | * its documentation for any purpose is hereby granted without fee, provided | |
9 | * that (i) the above copyright notices and this permission notice appear in | |
10 | * all copies of the software and related documentation, and (ii) the names of | |
11 | * Sam Leffler and Silicon Graphics may not be used in any advertising or | |
12 | * publicity relating to the software without the specific, prior written | |
13 | * permission of Sam Leffler and Silicon Graphics. | |
14 | * | |
15 | * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, | |
16 | * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY | |
17 | * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | |
18 | * | |
19 | * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR | |
20 | * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, | |
21 | * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, | |
22 | * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF | |
23 | * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE | |
24 | * OF THIS SOFTWARE. | |
25 | */ | |
26 | ||
27 | #ifndef _TIFFDIR_ | |
28 | #define _TIFFDIR_ | |
29 | /* | |
30 | * ``Library-private'' Directory-related Definitions. | |
31 | */ | |
32 | ||
33 | /* | |
34 | * Internal format of a TIFF directory entry. | |
35 | */ | |
36 | typedef struct { | |
37 | #define FIELD_SETLONGS 4 | |
38 | /* bit vector of fields that are set */ | |
39 | unsigned long td_fieldsset[FIELD_SETLONGS]; | |
40 | ||
41 | uint32 td_imagewidth, td_imagelength, td_imagedepth; | |
42 | uint32 td_tilewidth, td_tilelength, td_tiledepth; | |
43 | uint32 td_subfiletype; | |
44 | uint16 td_bitspersample; | |
45 | uint16 td_sampleformat; | |
46 | uint16 td_compression; | |
47 | uint16 td_photometric; | |
48 | uint16 td_threshholding; | |
49 | uint16 td_fillorder; | |
50 | uint16 td_orientation; | |
51 | uint16 td_samplesperpixel; | |
52 | uint32 td_rowsperstrip; | |
53 | uint16 td_minsamplevalue, td_maxsamplevalue; | |
54 | double td_sminsamplevalue, td_smaxsamplevalue; | |
55 | float td_xresolution, td_yresolution; | |
56 | uint16 td_resolutionunit; | |
57 | uint16 td_planarconfig; | |
58 | float td_xposition, td_yposition; | |
59 | uint16 td_pagenumber[2]; | |
60 | uint16* td_colormap[3]; | |
61 | uint16 td_halftonehints[2]; | |
62 | uint16 td_extrasamples; | |
63 | uint16* td_sampleinfo; | |
64 | tstrip_t td_stripsperimage; | |
65 | tstrip_t td_nstrips; /* size of offset & bytecount arrays */ | |
66 | uint32* td_stripoffset; | |
67 | uint32* td_stripbytecount; | |
68 | int td_stripbytecountsorted; /* is the bytecount array sorted ascending? */ | |
69 | uint16 td_nsubifd; | |
70 | uint32* td_subifd; | |
71 | /* YCbCr parameters */ | |
72 | uint16 td_ycbcrsubsampling[2]; | |
73 | uint16 td_ycbcrpositioning; | |
74 | /* Colorimetry parameters */ | |
75 | uint16* td_transferfunction[3]; | |
76 | /* CMYK parameters */ | |
77 | int td_inknameslen; | |
78 | char* td_inknames; | |
79 | ||
80 | int td_customValueCount; | |
81 | TIFFTagValue *td_customValues; | |
82 | } TIFFDirectory; | |
83 | ||
84 | /* | |
85 | * Field flags used to indicate fields that have | |
86 | * been set in a directory, and to reference fields | |
87 | * when manipulating a directory. | |
88 | */ | |
89 | ||
90 | /* | |
91 | * FIELD_IGNORE is used to signify tags that are to | |
92 | * be processed but otherwise ignored. This permits | |
93 | * antiquated tags to be quietly read and discarded. | |
94 | * Note that a bit *is* allocated for ignored tags; | |
95 | * this is understood by the directory reading logic | |
96 | * which uses this fact to avoid special-case handling | |
97 | */ | |
98 | #define FIELD_IGNORE 0 | |
99 | ||
100 | /* multi-item fields */ | |
101 | #define FIELD_IMAGEDIMENSIONS 1 | |
102 | #define FIELD_TILEDIMENSIONS 2 | |
103 | #define FIELD_RESOLUTION 3 | |
104 | #define FIELD_POSITION 4 | |
105 | ||
106 | /* single-item fields */ | |
107 | #define FIELD_SUBFILETYPE 5 | |
108 | #define FIELD_BITSPERSAMPLE 6 | |
109 | #define FIELD_COMPRESSION 7 | |
110 | #define FIELD_PHOTOMETRIC 8 | |
111 | #define FIELD_THRESHHOLDING 9 | |
112 | #define FIELD_FILLORDER 10 | |
113 | #define FIELD_ORIENTATION 15 | |
114 | #define FIELD_SAMPLESPERPIXEL 16 | |
115 | #define FIELD_ROWSPERSTRIP 17 | |
116 | #define FIELD_MINSAMPLEVALUE 18 | |
117 | #define FIELD_MAXSAMPLEVALUE 19 | |
118 | #define FIELD_PLANARCONFIG 20 | |
119 | #define FIELD_RESOLUTIONUNIT 22 | |
120 | #define FIELD_PAGENUMBER 23 | |
121 | #define FIELD_STRIPBYTECOUNTS 24 | |
122 | #define FIELD_STRIPOFFSETS 25 | |
123 | #define FIELD_COLORMAP 26 | |
124 | #define FIELD_EXTRASAMPLES 31 | |
125 | #define FIELD_SAMPLEFORMAT 32 | |
126 | #define FIELD_SMINSAMPLEVALUE 33 | |
127 | #define FIELD_SMAXSAMPLEVALUE 34 | |
128 | #define FIELD_IMAGEDEPTH 35 | |
129 | #define FIELD_TILEDEPTH 36 | |
130 | #define FIELD_HALFTONEHINTS 37 | |
131 | #define FIELD_YCBCRSUBSAMPLING 39 | |
132 | #define FIELD_YCBCRPOSITIONING 40 | |
133 | #define FIELD_TRANSFERFUNCTION 44 | |
134 | #define FIELD_INKNAMES 46 | |
135 | #define FIELD_SUBIFD 49 | |
136 | /* FIELD_CUSTOM (see tiffio.h) 65 */ | |
137 | /* end of support for well-known tags; codec-private tags follow */ | |
138 | #define FIELD_CODEC 66 /* base of codec-private tags */ | |
139 | ||
140 | ||
141 | /* | |
142 | * Pseudo-tags don't normally need field bits since they | |
143 | * are not written to an output file (by definition). | |
144 | * The library also has express logic to always query a | |
145 | * codec for a pseudo-tag so allocating a field bit for | |
146 | * one is a waste. If codec wants to promote the notion | |
147 | * of a pseudo-tag being ``set'' or ``unset'' then it can | |
148 | * do using internal state flags without polluting the | |
149 | * field bit space defined for real tags. | |
150 | */ | |
151 | #define FIELD_PSEUDO 0 | |
152 | ||
153 | #define FIELD_LAST (32*FIELD_SETLONGS-1) | |
154 | ||
155 | #define TIFFExtractData(tif, type, v) \ | |
156 | ((uint32) ((tif)->tif_header.tiff_magic == TIFF_BIGENDIAN ? \ | |
157 | ((v) >> (tif)->tif_typeshift[type]) & (tif)->tif_typemask[type] : \ | |
158 | (v) & (tif)->tif_typemask[type])) | |
159 | #define TIFFInsertData(tif, type, v) \ | |
160 | ((uint32) ((tif)->tif_header.tiff_magic == TIFF_BIGENDIAN ? \ | |
161 | ((v) & (tif)->tif_typemask[type]) << (tif)->tif_typeshift[type] : \ | |
162 | (v) & (tif)->tif_typemask[type])) | |
163 | ||
164 | ||
165 | #define BITn(n) (((unsigned long)1L)<<((n)&0x1f)) | |
166 | #define BITFIELDn(tif, n) ((tif)->tif_dir.td_fieldsset[(n)/32]) | |
167 | #define TIFFFieldSet(tif, field) (BITFIELDn(tif, field) & BITn(field)) | |
168 | #define TIFFSetFieldBit(tif, field) (BITFIELDn(tif, field) |= BITn(field)) | |
169 | #define TIFFClrFieldBit(tif, field) (BITFIELDn(tif, field) &= ~BITn(field)) | |
170 | ||
171 | #define FieldSet(fields, f) (fields[(f)/32] & BITn(f)) | |
172 | #define ResetFieldBit(fields, f) (fields[(f)/32] &= ~BITn(f)) | |
173 | ||
174 | #if defined(__cplusplus) | |
175 | extern "C" { | |
176 | #endif | |
177 | extern const TIFFFieldInfo *_TIFFGetFieldInfo(size_t *); | |
178 | extern const TIFFFieldInfo *_TIFFGetExifFieldInfo(size_t *); | |
179 | extern void _TIFFSetupFieldInfo(TIFF*, const TIFFFieldInfo[], size_t); | |
180 | extern void _TIFFPrintFieldInfo(TIFF*, FILE*); | |
181 | extern TIFFDataType _TIFFSampleToTagType(TIFF*); | |
182 | extern const TIFFFieldInfo* _TIFFFindOrRegisterFieldInfo( TIFF *tif, | |
183 | ttag_t tag, | |
184 | TIFFDataType dt ); | |
185 | extern TIFFFieldInfo* _TIFFCreateAnonFieldInfo( TIFF *tif, ttag_t tag, | |
186 | TIFFDataType dt ); | |
187 | ||
188 | #define _TIFFMergeFieldInfo TIFFMergeFieldInfo | |
189 | #define _TIFFFindFieldInfo TIFFFindFieldInfo | |
190 | #define _TIFFFindFieldInfoByName TIFFFindFieldInfoByName | |
191 | #define _TIFFFieldWithTag TIFFFieldWithTag | |
192 | #define _TIFFFieldWithName TIFFFieldWithName | |
193 | ||
194 | #if defined(__cplusplus) | |
195 | } | |
196 | #endif | |
197 | #endif /* _TIFFDIR_ */ | |
198 | ||
199 | /* vim: set ts=8 sts=8 sw=8 noet: */ |