GDAL

- Main Page
- Related Pages
- Classes
- Files
- Download
- Issue Tracker

- File List
- File Members

gdalexif.h
1 /******************************************************************************
2 * $Id: gdalexif.h 35883 2016-10-24 05:49:15Z goatbar $
3 *
4 * Project: JPEG JFIF Driver
5 * Purpose: Implement GDAL JPEG Support based on IJG libjpeg.
6 * Author: Frank Warmerdam, warmerdam@pobox.com
7 *
8 ******************************************************************************
9 * Copyright (c) 2000, Frank Warmerdam
10 *
11 * Permission is hereby granted, free of charge, to any person obtaining a
12 * copy of this software and associated documentation files (the "Software"),
13 * to deal in the Software without restriction, including without limitation
14 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
15 * and/or sell copies of the Software, and to permit persons to whom the
16 * Software is furnished to do so, subject to the following conditions:
17 *
18 * The above copyright notice and this permission notice shall be included
19 * in all copies or substantial portions of the Software.
20 *
21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
24 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
26 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
27 * DEALINGS IN THE SOFTWARE.
28 ****************************************************************************/
29
31
32 #ifdef RENAME_INTERNAL_LIBTIFF_SYMBOLS
33 #include "../frmts/gtiff/libtiff/gdal_libtiff_symbol_rename.h"
34 #endif
35
36 static const struct gpsname {
37 GUInt16 tag;
38 const char* name;
39 } gpstags [] = {
40 { 0x00, "EXIF_GPSVersionID" },
41 { 0x01, "EXIF_GPSLatitudeRef" },
42 { 0x02, "EXIF_GPSLatitude" },
43 { 0x03, "EXIF_GPSLongitudeRef" },
44 { 0x04, "EXIF_GPSLongitude" },
45 { 0x05, "EXIF_GPSAltitudeRef" },
46 { 0x06, "EXIF_GPSAltitude" },
47 { 0x07, "EXIF_GPSTimeStamp" },
48 { 0x08, "EXIF_GPSSatellites" },
49 { 0x09, "EXIF_GPSStatus" },
50 { 0x0a, "EXIF_GPSMeasureMode" },
51 { 0x0b, "EXIF_GPSDOP" },
52 { 0x0c, "EXIF_GPSSpeedRef"},
53 { 0x0d, "EXIF_GPSSpeed"},
54 { 0x0e, "EXIF_GPSTrackRef"},
55 { 0x0f, "EXIF_GPSTrack"},
56 { 0x10, "EXIF_GPSImgDirectionRef"},
57 { 0x11, "EXIF_GPSImgDirection"},
58 { 0x12, "EXIF_GPSMapDatum"},
59 { 0x13, "EXIF_GPSDestLatitudeRef"},
60 { 0x14, "EXIF_GPSDestLatitude"},
61 { 0x15, "EXIF_GPSDestLongitudeRef"},
62 { 0x16, "EXIF_GPSDestLongitude"},
63 { 0x17, "EXIF_GPSDestBearingRef"},
64 { 0x18, "EXIF_GPSDestBearing"},
65 { 0x19, "EXIF_GPSDestDistanceRef"},
66 { 0x1a, "EXIF_GPSDestDistance"},
67 { 0x1b, "EXIF_GPSProcessingMethod"},
68 { 0x1c, "EXIF_GPSAreaInformation"},
69 { 0x1d, "EXIF_GPSDateStamp"},
70 { 0x1e, "EXIF_GPSDifferential"},
71 { 0xffff, ""}
72 };
73
74 static const struct tagname {
75 GUInt16 tag;
76 const char* name;
77 } tagnames [] = {
78 //{ 0x100, "EXIF_Image_Width"},
79 // { 0x101, "EXIF_Image_Length"},
80 { 0x102, "EXIF_BitsPerSample"},
81 { 0x103, "EXIF_Compression"},
82 { 0x106, "EXIF_PhotometricInterpretation"},
83 { 0x10A, "EXIF_Fill_Order"},
84 { 0x10D, "EXIF_Document_Name"},
85 { 0x10E, "EXIF_ImageDescription"},
86 { 0x10F, "EXIF_Make"},
87 { 0x110, "EXIF_Model"},
88 { 0x111, "EXIF_StripOffsets"},
89 { 0x112, "EXIF_Orientation"},
90 { 0x115, "EXIF_SamplesPerPixel"},
91 { 0x116, "EXIF_RowsPerStrip"},
92 { 0x117, "EXIF_StripByteCounts"},
93 { 0x11A, "EXIF_XResolution"},
94 { 0x11B, "EXIF_YResolution"},
95 { 0x11C, "EXIF_PlanarConfiguration"},
96 { 0x128, "EXIF_ResolutionUnit"},
97 { 0x12D, "EXIF_TransferFunction"},
98 { 0x131, "EXIF_Software"},
99 { 0x132, "EXIF_DateTime"},
100 { 0x13B, "EXIF_Artist"},
101 { 0x13E, "EXIF_WhitePoint"},
102 { 0x13F, "EXIF_PrimaryChromaticities"},
103 { 0x156, "EXIF_Transfer_Range"},
104 { 0x200, "EXIF_JPEG_Proc"},
105 { 0x201, "EXIF_JPEGInterchangeFormat"},
106 { 0x202, "EXIF_JPEGInterchangeFormatLength"},
107 { 0x211, "EXIF_YCbCrCoefficients"},
108 { 0x212, "EXIF_YCbCrSubSampling"},
109 { 0x213, "EXIF_YCbCrPositioning"},
110 { 0x214, "EXIF_ReferenceBlackWhite"},
111 { 0x828D, "EXIF_CFA_Repeat_Pattern_Dim"},
112 { 0x828E, "EXIF_CFA_Pattern"},
113 { 0x828F, "EXIF_Battery_Level"},
114 { 0x8298, "EXIF_Copyright"},
115 { 0x829A, "EXIF_ExposureTime"},
116 { 0x829D, "EXIF_FNumber"},
117 { 0x83BB, "EXIF_IPTC/NAA"},
118 // { 0x8769, "EXIF_Offset"},
119 { 0x8773, "EXIF_Inter_Color_Profile"},
120 { 0x8822, "EXIF_ExposureProgram"},
121 { 0x8824, "EXIF_SpectralSensitivity"},
122 // { 0x8825, "EXIF_GPSOffset"},
123 { 0x8827, "EXIF_ISOSpeedRatings"},
124 { 0x8828, "EXIF_OECF"},
125 { 0x9000, "EXIF_ExifVersion"},
126 { 0x9003, "EXIF_DateTimeOriginal"},
127 { 0x9004, "EXIF_DateTimeDigitized"},
128 { 0x9101, "EXIF_ComponentsConfiguration"},
129 { 0x9102, "EXIF_CompressedBitsPerPixel"},
130 { 0x9201, "EXIF_ShutterSpeedValue"},
131 { 0x9202, "EXIF_ApertureValue"},
132 { 0x9203, "EXIF_BrightnessValue"},
133 { 0x9204, "EXIF_ExposureBiasValue"},
134 { 0x9205, "EXIF_MaxApertureValue"},
135 { 0x9206, "EXIF_SubjectDistance"},
136 { 0x9207, "EXIF_MeteringMode"},
137 { 0x9208, "EXIF_LightSource"},
138 { 0x9209, "EXIF_Flash"},
139 { 0x920A, "EXIF_FocalLength"},
140 { 0x9214, "EXIF_SubjectArea"},
141 { 0x927C, "EXIF_MakerNote"},
142 { 0x9286, "EXIF_UserComment"},
143 { 0x9290, "EXIF_SubSecTime"},
144 { 0x9291, "EXIF_SubSecTime_Original"},
145 { 0x9292, "EXIF_SubSecTime_Digitized"},
146 { 0xA000, "EXIF_FlashpixVersion"},
147 { 0xA001, "EXIF_ColorSpace"},
148 { 0xA002, "EXIF_PixelXDimension"},
149 { 0xA003, "EXIF_PixelYDimension"},
150 { 0xA004, "EXIF_RelatedSoundFile"},
151 // { 0xA005, "EXIF_InteroperabilityOffset"},
152 { 0xA20B, "EXIF_FlashEnergy"}, // 0x920B in TIFF/EP
153 { 0xA20C, "EXIF_SpatialFrequencyResponse"}, // 0x920C - -
154 { 0xA20E, "EXIF_FocalPlaneXResolution"}, // 0x920E - -
155 { 0xA20F, "EXIF_FocalPlaneYResolution"}, // 0x920F - -
156 { 0xA210, "EXIF_FocalPlaneResolutionUnit"}, // 0x9210 - -
157 { 0xA214, "EXIF_SubjectLocation"}, // 0x9214 - -
158 { 0xA215, "EXIF_ExposureIndex"}, // 0x9215 - -
159 { 0xA217, "EXIF_SensingMethod"}, // 0x9217 - -
160 { 0xA300, "EXIF_FileSource"},
161 { 0xA301, "EXIF_SceneType"},
162 { 0xA302, "EXIF_CFAPattern"},
163 { 0xA401, "EXIF_CustomRendered"},
164 { 0xA402, "EXIF_ExposureMode"},
165 { 0XA403, "EXIF_WhiteBalance"},
166 { 0xA404, "EXIF_DigitalZoomRatio"},
167 { 0xA405, "EXIF_FocalLengthIn35mmFilm"},
168 { 0xA406, "EXIF_SceneCaptureType"},
169 { 0xA407, "EXIF_GainControl"},
170 { 0xA408, "EXIF_Contrast"},
171 { 0xA409, "EXIF_Saturation"},
172 { 0xA40A, "EXIF_Sharpness"},
173 { 0xA40B, "EXIF_DeviceSettingDescription"},
174 { 0xA40C, "EXIF_SubjectDistanceRange"},
175 { 0xA420, "EXIF_ImageUniqueID"},
176 { 0x0000, ""}
177 };
178
179 static const struct intr_tag {
180 GInt16 tag;
181 const char* name;
182 } intr_tags [] = {
183
184 { 0x1, "EXIF_Interoperability_Index"},
185 { 0x2, "EXIF_Interoperability_Version"},
186 { 0x1000, "EXIF_Related_Image_File_Format"},
187 { 0x1001, "EXIF_Related_Image_Width"},
188 { 0x1002, "EXIF_Related_Image_Length"},
189 { 0x0000, ""}
190 };
191
192 typedef enum {
193 TIFF_NOTYPE = 0, /* placeholder */
194 TIFF_BYTE = 1, /* 8-bit unsigned integer */
195 TIFF_ASCII = 2, /* 8-bit bytes w/ last byte null */
196 TIFF_SHORT = 3, /* 16-bit unsigned integer */
197 TIFF_LONG = 4, /* 32-bit unsigned integer */
198 TIFF_RATIONAL = 5, /* 64-bit unsigned fraction */
199 TIFF_SBYTE = 6, /* !8-bit signed integer */
200 TIFF_UNDEFINED = 7, /* !8-bit untyped data */
201 TIFF_SSHORT = 8, /* !16-bit signed integer */
202 TIFF_SLONG = 9, /* !32-bit signed integer */
203 TIFF_SRATIONAL = 10, /* !64-bit signed fraction */
204 TIFF_FLOAT = 11, /* !32-bit IEEE floating point */
205 TIFF_DOUBLE = 12, /* !64-bit IEEE floating point */
206 TIFF_IFD = 13 /* %32-bit unsigned integer (offset) */
207 } GDALEXIFTIFFDataType;
208
209 /*
210 * TIFF Image File Directories are comprised of a table of field
211 * descriptors of the form shown below. The table is sorted in
212 * ascending order by tag. The values associated with each entry are
213 * disjoint and may appear anywhere in the file (so long as they are
214 * placed on a word boundary).
215 *
216 * If the value is 4 bytes or less, then it is placed in the offset
217 * field to save space. If the value is less than 4 bytes, it is
218 * left-justified in the offset field.
219 */
220 typedef struct {
221 GUInt16 tdir_tag; /* see below */
222 GUInt16 tdir_type; /* data type; see below */
223 GUInt32 tdir_count; /* number of items; length in spec */
224 GUInt32 tdir_offset; /* byte offset to field data */
225 } GDALEXIFTIFFDirEntry;
226
227 CPL_C_START
228 /* Table of tag datatype widths. */
229 extern int TIFFDataWidth(GDALEXIFTIFFDataType);
230 extern void TIFFSwabShort(GUInt16*);
231 extern void TIFFSwabLong(GUInt32*);
232 extern void TIFFSwabDouble(double*);
233 extern void TIFFSwabArrayOfShort(GUInt16*, unsigned long);
234 extern void TIFFSwabArrayOfLong(GUInt32*, unsigned long);
235 extern void TIFFSwabArrayOfDouble(double*, unsigned long);
236 CPL_C_END
237
CPL_C_START
#define CPL_C_START
Macro to start a block of C symbols.
Definition: cpl_port.h:352
GUInt32
unsigned int GUInt32
Unsigned int32 type.
Definition: cpl_port.h:199
GInt16
short GInt16
Int16 type.
Definition: cpl_port.h:203
GUInt16
unsigned short GUInt16
Unsigned int16 type.
Definition: cpl_port.h:205
CPL_C_END
#define CPL_C_END
Macro to end a block of C symbols.
Definition: cpl_port.h:354

Generated for GDAL by 1.8.8.