GDAL
Main Page
Related Pages
Classes
Files
File List
File Members
gcore
gdalexif.h
1
/******************************************************************************
2
* $Id: gdalexif.h 24549 2012-06-09 20:14:14Z rouault $
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
30
#define EXIFOFFSETTAG 0x8769
31
#define INTEROPERABILITYOFFSET 0xA005
32
#define GPSOFFSETTAG 0x8825
33
#define MAXSTRINGLENGTH 65535
34
35
#ifdef RENAME_INTERNAL_LIBTIFF_SYMBOLS
36
#include "../frmts/gtiff/libtiff/gdal_libtiff_symbol_rename.h"
37
#endif
38
39
static
const
struct
gpsname {
40
GUInt16 tag;
41
const
char
* name;
42
} gpstags [] = {
43
{ 0x00,
"EXIF_GPSVersionID"
},
44
{ 0x01,
"EXIF_GPSLatitudeRef"
},
45
{ 0x02,
"EXIF_GPSLatitude"
},
46
{ 0x03,
"EXIF_GPSLongitudeRef"
},
47
{ 0x04,
"EXIF_GPSLongitude"
},
48
{ 0x05,
"EXIF_GPSAltitudeRef"
},
49
{ 0x06,
"EXIF_GPSAltitude"
},
50
{ 0x07,
"EXIF_GPSTimeStamp"
},
51
{ 0x08,
"EXIF_GPSSatellites"
},
52
{ 0x09,
"EXIF_GPSStatus"
},
53
{ 0x0a,
"EXIF_GPSMeasureMode"
},
54
{ 0x0b,
"EXIF_GPSDOP"
},
55
{ 0x0c,
"EXIF_GPSSpeedRef"
},
56
{ 0x0d,
"EXIF_GPSSpeed"
},
57
{ 0x0e,
"EXIF_GPSTrackRef"
},
58
{ 0x0f,
"EXIF_GPSTrack"
},
59
{ 0x10,
"EXIF_GPSImgDirectionRef"
},
60
{ 0x11,
"EXIF_GPSImgDirection"
},
61
{ 0x12,
"EXIF_GPSMapDatum"
},
62
{ 0x13,
"EXIF_GPSDestLatitudeRef"
},
63
{ 0x14,
"EXIF_GPSDestLatitude"
},
64
{ 0x15,
"EXIF_GPSDestLongitudeRef"
},
65
{ 0x16,
"EXIF_GPSDestLongitude"
},
66
{ 0x17,
"EXIF_GPSDestBearingRef"
},
67
{ 0x18,
"EXIF_GPSDestBearing"
},
68
{ 0x19,
"EXIF_GPSDestDistanceRef"
},
69
{ 0x1a,
"EXIF_GPSDestDistance"
},
70
{ 0x1b,
"EXIF_GPSProcessingMethod"
},
71
{ 0x1c,
"EXIF_GPSAreaInformation"
},
72
{ 0x1d,
"EXIF_GPSDateStamp"
},
73
{ 0x1e,
"EXIF_GPSDifferential"
},
74
{ 0xffff,
""
}
75
};
76
77
static
const
struct
tagname {
78
GUInt16 tag;
79
const
char
* name;
80
} tagnames [] = {
81
82
// { 0x100, "EXIF_Image_Width"},
83
// { 0x101, "EXIF_Image_Length"},
84
{ 0x102,
"EXIF_BitsPerSample"
},
85
{ 0x103,
"EXIF_Compression"
},
86
{ 0x106,
"EXIF_PhotometricInterpretation"
},
87
{ 0x10A,
"EXIF_Fill_Order"
},
88
{ 0x10D,
"EXIF_Document_Name"
},
89
{ 0x10E,
"EXIF_ImageDescription"
},
90
{ 0x10F,
"EXIF_Make"
},
91
{ 0x110,
"EXIF_Model"
},
92
{ 0x111,
"EXIF_StripOffsets"
},
93
{ 0x112,
"EXIF_Orientation"
},
94
{ 0x115,
"EXIF_SamplesPerPixel"
},
95
{ 0x116,
"EXIF_RowsPerStrip"
},
96
{ 0x117,
"EXIF_StripByteCounts"
},
97
{ 0x11A,
"EXIF_XResolution"
},
98
{ 0x11B,
"EXIF_YResolution"
},
99
{ 0x11C,
"EXIF_PlanarConfiguration"
},
100
{ 0x128,
"EXIF_ResolutionUnit"
},
101
{ 0x12D,
"EXIF_TransferFunction"
},
102
{ 0x131,
"EXIF_Software"
},
103
{ 0x132,
"EXIF_DateTime"
},
104
{ 0x13B,
"EXIF_Artist"
},
105
{ 0x13E,
"EXIF_WhitePoint"
},
106
{ 0x13F,
"EXIF_PrimaryChromaticities"
},
107
{ 0x156,
"EXIF_Transfer_Range"
},
108
{ 0x200,
"EXIF_JPEG_Proc"
},
109
{ 0x201,
"EXIF_JPEGInterchangeFormat"
},
110
{ 0x202,
"EXIF_JPEGInterchangeFormatLength"
},
111
{ 0x211,
"EXIF_YCbCrCoefficients"
},
112
{ 0x212,
"EXIF_YCbCrSubSampling"
},
113
{ 0x213,
"EXIF_YCbCrPositioning"
},
114
{ 0x214,
"EXIF_ReferenceBlackWhite"
},
115
{ 0x828D,
"EXIF_CFA_Repeat_Pattern_Dim"
},
116
{ 0x828E,
"EXIF_CFA_Pattern"
},
117
{ 0x828F,
"EXIF_Battery_Level"
},
118
{ 0x8298,
"EXIF_Copyright"
},
119
{ 0x829A,
"EXIF_ExposureTime"
},
120
{ 0x829D,
"EXIF_FNumber"
},
121
{ 0x83BB,
"EXIF_IPTC/NAA"
},
122
// { 0x8769, "EXIF_Offset"},
123
{ 0x8773,
"EXIF_Inter_Color_Profile"
},
124
{ 0x8822,
"EXIF_ExposureProgram"
},
125
{ 0x8824,
"EXIF_SpectralSensitivity"
},
126
// { 0x8825, "EXIF_GPSOffset"},
127
{ 0x8827,
"EXIF_ISOSpeedRatings"
},
128
{ 0x8828,
"EXIF_OECF"
},
129
{ 0x9000,
"EXIF_ExifVersion"
},
130
{ 0x9003,
"EXIF_DateTimeOriginal"
},
131
{ 0x9004,
"EXIF_DateTimeDigitized"
},
132
{ 0x9101,
"EXIF_ComponentsConfiguration"
},
133
{ 0x9102,
"EXIF_CompressedBitsPerPixel"
},
134
{ 0x9201,
"EXIF_ShutterSpeedValue"
},
135
{ 0x9202,
"EXIF_ApertureValue"
},
136
{ 0x9203,
"EXIF_BrightnessValue"
},
137
{ 0x9204,
"EXIF_ExposureBiasValue"
},
138
{ 0x9205,
"EXIF_MaxApertureValue"
},
139
{ 0x9206,
"EXIF_SubjectDistance"
},
140
{ 0x9207,
"EXIF_MeteringMode"
},
141
{ 0x9208,
"EXIF_LightSource"
},
142
{ 0x9209,
"EXIF_Flash"
},
143
{ 0x920A,
"EXIF_FocalLength"
},
144
{ 0x9214,
"EXIF_SubjectArea"
},
145
{ 0x927C,
"EXIF_MakerNote"
},
146
{ 0x9286,
"EXIF_UserComment"
},
147
{ 0x9290,
"EXIF_SubSecTime"
},
148
{ 0x9291,
"EXIF_SubSecTime_Original"
},
149
{ 0x9292,
"EXIF_SubSecTime_Digitized"
},
150
{ 0xA000,
"EXIF_FlashpixVersion"
},
151
{ 0xA001,
"EXIF_ColorSpace"
},
152
{ 0xA002,
"EXIF_PixelXDimension"
},
153
{ 0xA003,
"EXIF_PixelYDimension"
},
154
{ 0xA004,
"EXIF_RelatedSoundFile"
},
155
// { 0xA005, "EXIF_InteroperabilityOffset"},
156
{ 0xA20B,
"EXIF_FlashEnergy"
},
// 0x920B in TIFF/EP
157
{ 0xA20C,
"EXIF_SpatialFrequencyResponse"
},
// 0x920C - -
158
{ 0xA20E,
"EXIF_FocalPlaneXResolution"
},
// 0x920E - -
159
{ 0xA20F,
"EXIF_FocalPlaneYResolution"
},
// 0x920F - -
160
{ 0xA210,
"EXIF_FocalPlaneResolutionUnit"
},
// 0x9210 - -
161
{ 0xA214,
"EXIF_SubjectLocation"
},
// 0x9214 - -
162
{ 0xA215,
"EXIF_ExposureIndex"
},
// 0x9215 - -
163
{ 0xA217,
"EXIF_SensingMethod"
},
// 0x9217 - -
164
{ 0xA300,
"EXIF_FileSource"
},
165
{ 0xA301,
"EXIF_SceneType"
},
166
{ 0xA302,
"EXIF_CFAPattern"
},
167
{ 0xA401,
"EXIF_CustomRendered"
},
168
{ 0xA402,
"EXIF_ExposureMode"
},
169
{ 0XA403,
"EXIF_WhiteBalance"
},
170
{ 0xA404,
"EXIF_DigitalZoomRatio"
},
171
{ 0xA405,
"EXIF_FocalLengthIn35mmFilm"
},
172
{ 0xA406,
"EXIF_SceneCaptureType"
},
173
{ 0xA407,
"EXIF_GainControl"
},
174
{ 0xA408,
"EXIF_Contrast"
},
175
{ 0xA409,
"EXIF_Saturation"
},
176
{ 0xA40A,
"EXIF_Sharpness"
},
177
{ 0xA40B,
"EXIF_DeviceSettingDescription"
},
178
{ 0xA40C,
"EXIF_SubjectDistanceRange"
},
179
{ 0xA420,
"EXIF_ImageUniqueID"
},
180
{ 0x0000,
""
}
181
};
182
183
184
static
const
struct
intr_tag {
185
GInt16 tag;
186
const
char
* name;
187
} intr_tags [] = {
188
189
{ 0x1,
"EXIF_Interoperability_Index"
},
190
{ 0x2,
"EXIF_Interoperability_Version"
},
191
{ 0x1000,
"EXIF_Related_Image_File_Format"
},
192
{ 0x1001,
"EXIF_Related_Image_Width"
},
193
{ 0x1002,
"EXIF_Related_Image_Length"
},
194
{ 0x0000,
""
}
195
};
196
197
typedef
enum
{
198
TIFF_NOTYPE = 0,
/* placeholder */
199
TIFF_BYTE = 1,
/* 8-bit unsigned integer */
200
TIFF_ASCII = 2,
/* 8-bit bytes w/ last byte null */
201
TIFF_SHORT = 3,
/* 16-bit unsigned integer */
202
TIFF_LONG = 4,
/* 32-bit unsigned integer */
203
TIFF_RATIONAL = 5,
/* 64-bit unsigned fraction */
204
TIFF_SBYTE = 6,
/* !8-bit signed integer */
205
TIFF_UNDEFINED = 7,
/* !8-bit untyped data */
206
TIFF_SSHORT = 8,
/* !16-bit signed integer */
207
TIFF_SLONG = 9,
/* !32-bit signed integer */
208
TIFF_SRATIONAL = 10,
/* !64-bit signed fraction */
209
TIFF_FLOAT = 11,
/* !32-bit IEEE floating point */
210
TIFF_DOUBLE = 12,
/* !64-bit IEEE floating point */
211
TIFF_IFD = 13
/* %32-bit unsigned integer (offset) */
212
} TIFFDataType;
213
214
/*
215
* TIFF Image File Directories are comprised of a table of field
216
* descriptors of the form shown below. The table is sorted in
217
* ascending order by tag. The values associated with each entry are
218
* disjoint and may appear anywhere in the file (so long as they are
219
* placed on a word boundary).
220
*
221
* If the value is 4 bytes or less, then it is placed in the offset
222
* field to save space. If the value is less than 4 bytes, it is
223
* left-justified in the offset field.
224
*/
225
typedef
struct
{
226
GUInt16 tdir_tag;
/* see below */
227
GUInt16 tdir_type;
/* data type; see below */
228
GUInt32 tdir_count;
/* number of items; length in spec */
229
GUInt32 tdir_offset;
/* byte offset to field data */
230
}
TIFFDirEntry
;
231
232
CPL_C_START
233
extern
int
TIFFDataWidth(TIFFDataType);
/* table of tag datatype widths */
234
extern
void
TIFFSwabShort(GUInt16*);
235
extern
void
TIFFSwabLong(GUInt32*);
236
extern
void
TIFFSwabDouble(
double
*);
237
extern
void
TIFFSwabArrayOfShort(GUInt16*,
unsigned
long
);
238
extern
void
TIFFSwabArrayOfLong(GUInt32*,
unsigned
long
);
239
extern
void
TIFFSwabArrayOfDouble(
double
*,
unsigned
long
);
240
CPL_C_END
241
TIFFDirEntry
Definition:
gdalexif.h:225
Generated for GDAL by
1.8.11.