1548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen/*! \file exif-tag.h
2548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen *  \brief Handling EXIF tags
3548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen */
4548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen/*
5548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * Copyright (c) 2001 Lutz Mueller <lutz@users.sourceforge.net>
6548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen *
7548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * This library is free software; you can redistribute it and/or
8548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * modify it under the terms of the GNU Lesser General Public
9548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * License as published by the Free Software Foundation; either
10548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * version 2 of the License, or (at your option) any later version.
11548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen *
12548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * This library is distributed in the hope that it will be useful,
13548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * but WITHOUT ANY WARRANTY; without even the implied warranty of
14548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * Lesser General Public License for more details.
16548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen *
17548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * You should have received a copy of the GNU Lesser General Public
18548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * License along with this library; if not, write to the
19548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * Boston, MA  02110-1301  USA.
21548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen */
22548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
23548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#ifndef __EXIF_TAG_H__
24548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define __EXIF_TAG_H__
25548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
26548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#ifdef __cplusplus
27548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissenextern "C" {
28548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#endif /* __cplusplus */
29548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
30548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#include <libexif/exif-ifd.h>
31548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#include <libexif/exif-data-type.h>
32548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
33548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen/*! EXIF tags */
34548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissentypedef enum {
35548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_INTEROPERABILITY_INDEX		= 0x0001,
36548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_INTEROPERABILITY_VERSION	= 0x0002,
37548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_NEW_SUBFILE_TYPE		= 0x00fe,
38548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_IMAGE_WIDTH 			= 0x0100,
39548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_IMAGE_LENGTH 			= 0x0101,
40548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_BITS_PER_SAMPLE 		= 0x0102,
41548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_COMPRESSION 			= 0x0103,
42548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_PHOTOMETRIC_INTERPRETATION 	= 0x0106,
43548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_FILL_ORDER 			= 0x010a,
44548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_DOCUMENT_NAME 			= 0x010d,
45548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_IMAGE_DESCRIPTION 		= 0x010e,
46548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_MAKE 				= 0x010f,
47548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_MODEL 				= 0x0110,
48548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_STRIP_OFFSETS 			= 0x0111,
49548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_ORIENTATION 			= 0x0112,
50548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_SAMPLES_PER_PIXEL 		= 0x0115,
51548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_ROWS_PER_STRIP 		= 0x0116,
52548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_STRIP_BYTE_COUNTS		= 0x0117,
53548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_X_RESOLUTION 			= 0x011a,
54548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_Y_RESOLUTION 			= 0x011b,
55548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_PLANAR_CONFIGURATION 		= 0x011c,
56548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_RESOLUTION_UNIT 		= 0x0128,
57548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_TRANSFER_FUNCTION 		= 0x012d,
58548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_SOFTWARE 			= 0x0131,
59548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_DATE_TIME			= 0x0132,
60548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_ARTIST				= 0x013b,
61548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_WHITE_POINT			= 0x013e,
62548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_PRIMARY_CHROMATICITIES		= 0x013f,
63548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_SUB_IFDS			= 0x014a,
64548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_TRANSFER_RANGE			= 0x0156,
65548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_JPEG_PROC			= 0x0200,
66548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_JPEG_INTERCHANGE_FORMAT	= 0x0201,
67548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_JPEG_INTERCHANGE_FORMAT_LENGTH	= 0x0202,
68548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_YCBCR_COEFFICIENTS		= 0x0211,
69548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_YCBCR_SUB_SAMPLING		= 0x0212,
70548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_YCBCR_POSITIONING		= 0x0213,
71548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_REFERENCE_BLACK_WHITE		= 0x0214,
72548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_XML_PACKET			= 0x02bc,
73548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_RELATED_IMAGE_FILE_FORMAT	= 0x1000,
74548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_RELATED_IMAGE_WIDTH		= 0x1001,
75548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_RELATED_IMAGE_LENGTH		= 0x1002,
76548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_CFA_REPEAT_PATTERN_DIM		= 0x828d,
77548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_CFA_PATTERN			= 0x828e,
78548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_BATTERY_LEVEL			= 0x828f,
79548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_COPYRIGHT			= 0x8298,
80548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_EXPOSURE_TIME			= 0x829a,
81548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_FNUMBER			= 0x829d,
82548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_IPTC_NAA			= 0x83bb,
83548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_IMAGE_RESOURCES		= 0x8649,
84548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_EXIF_IFD_POINTER		= 0x8769,
85548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_INTER_COLOR_PROFILE		= 0x8773,
86548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_EXPOSURE_PROGRAM		= 0x8822,
87548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_SPECTRAL_SENSITIVITY		= 0x8824,
88548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_GPS_INFO_IFD_POINTER		= 0x8825,
89548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_ISO_SPEED_RATINGS		= 0x8827,
90548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_OECF				= 0x8828,
91548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_TIME_ZONE_OFFSET		= 0x882a,
92548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_EXIF_VERSION			= 0x9000,
93548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_DATE_TIME_ORIGINAL		= 0x9003,
94548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_DATE_TIME_DIGITIZED		= 0x9004,
95548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_COMPONENTS_CONFIGURATION	= 0x9101,
96548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_COMPRESSED_BITS_PER_PIXEL	= 0x9102,
97548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_SHUTTER_SPEED_VALUE		= 0x9201,
98548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_APERTURE_VALUE			= 0x9202,
99548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_BRIGHTNESS_VALUE		= 0x9203,
100548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_EXPOSURE_BIAS_VALUE		= 0x9204,
101548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_MAX_APERTURE_VALUE		= 0x9205,
102548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_SUBJECT_DISTANCE		= 0x9206,
103548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_METERING_MODE			= 0x9207,
104548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_LIGHT_SOURCE			= 0x9208,
105548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_FLASH				= 0x9209,
106548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_FOCAL_LENGTH			= 0x920a,
107548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_SUBJECT_AREA			= 0x9214,
108548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_TIFF_EP_STANDARD_ID		= 0x9216,
109548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_MAKER_NOTE			= 0x927c,
110548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_USER_COMMENT			= 0x9286,
111548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_SUB_SEC_TIME			= 0x9290,
112548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_SUB_SEC_TIME_ORIGINAL		= 0x9291,
113548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_SUB_SEC_TIME_DIGITIZED		= 0x9292,
114548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_XP_TITLE			= 0x9c9b,
115548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_XP_COMMENT			= 0x9c9c,
116548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_XP_AUTHOR			= 0x9c9d,
117548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_XP_KEYWORDS			= 0x9c9e,
118548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_XP_SUBJECT			= 0x9c9f,
119548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_FLASH_PIX_VERSION		= 0xa000,
120548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_COLOR_SPACE			= 0xa001,
121548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_PIXEL_X_DIMENSION		= 0xa002,
122548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_PIXEL_Y_DIMENSION		= 0xa003,
123548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_RELATED_SOUND_FILE		= 0xa004,
124548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_INTEROPERABILITY_IFD_POINTER	= 0xa005,
125548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_FLASH_ENERGY			= 0xa20b,
126548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_SPATIAL_FREQUENCY_RESPONSE	= 0xa20c,
127548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_FOCAL_PLANE_X_RESOLUTION	= 0xa20e,
128548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_FOCAL_PLANE_Y_RESOLUTION	= 0xa20f,
129548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_FOCAL_PLANE_RESOLUTION_UNIT	= 0xa210,
130548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_SUBJECT_LOCATION		= 0xa214,
131548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_EXPOSURE_INDEX			= 0xa215,
132548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_SENSING_METHOD			= 0xa217,
133548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_FILE_SOURCE			= 0xa300,
134548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_SCENE_TYPE			= 0xa301,
135548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_NEW_CFA_PATTERN		= 0xa302,
136548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_CUSTOM_RENDERED		= 0xa401,
137548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_EXPOSURE_MODE			= 0xa402,
138548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_WHITE_BALANCE			= 0xa403,
139548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_DIGITAL_ZOOM_RATIO		= 0xa404,
140548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_FOCAL_LENGTH_IN_35MM_FILM	= 0xa405,
141548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_SCENE_CAPTURE_TYPE		= 0xa406,
142548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_GAIN_CONTROL			= 0xa407,
143548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_CONTRAST			= 0xa408,
144548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_SATURATION			= 0xa409,
145548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_SHARPNESS			= 0xa40a,
146548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_DEVICE_SETTING_DESCRIPTION	= 0xa40b,
147548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_SUBJECT_DISTANCE_RANGE		= 0xa40c,
148548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_IMAGE_UNIQUE_ID		= 0xa420,
149548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_GAMMA				= 0xa500,
150548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_PRINT_IMAGE_MATCHING		= 0xc4a5,
151548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_TAG_PADDING			= 0xea1c
152548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen} ExifTag;
153548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
154548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen/* GPS tags overlap with above ones. */
155548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_GPS_VERSION_ID        0x0000
156548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_GPS_LATITUDE_REF      0x0001 /* INTEROPERABILITY_INDEX   */
157548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_GPS_LATITUDE          0x0002 /* INTEROPERABILITY_VERSION */
158548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_GPS_LONGITUDE_REF     0x0003
159548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_GPS_LONGITUDE         0x0004
160548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_GPS_ALTITUDE_REF      0x0005
161548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_GPS_ALTITUDE          0x0006
162548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_GPS_TIME_STAMP        0x0007
163548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_GPS_SATELLITES        0x0008
164548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_GPS_STATUS            0x0009
165548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_GPS_MEASURE_MODE      0x000a
166548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_GPS_DOP               0x000b
167548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_GPS_SPEED_REF         0x000c
168548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_GPS_SPEED             0x000d
169548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_GPS_TRACK_REF         0x000e
170548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_GPS_TRACK             0x000f
171548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_GPS_IMG_DIRECTION_REF 0x0010
172548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_GPS_IMG_DIRECTION     0x0011
173548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_GPS_MAP_DATUM         0x0012
174548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_GPS_DEST_LATITUDE_REF 0x0013
175548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_GPS_DEST_LATITUDE     0x0014
176548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_GPS_DEST_LONGITUDE_REF 0x0015
177548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_GPS_DEST_LONGITUDE     0x0016
178548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_GPS_DEST_BEARING_REF   0x0017
179548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_GPS_DEST_BEARING       0x0018
180548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_GPS_DEST_DISTANCE_REF  0x0019
181548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_GPS_DEST_DISTANCE      0x001a
182548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_GPS_PROCESSING_METHOD  0x001b
183548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_GPS_AREA_INFORMATION   0x001c
184548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_GPS_DATE_STAMP         0x001d
185548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_GPS_DIFFERENTIAL       0x001e
186548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
187548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen/*! What level of support a tag enjoys in the EXIF standard */
188548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissentypedef enum {
189548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	/*! The meaning of this tag is unknown */
190548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_SUPPORT_LEVEL_UNKNOWN = 0,
191548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
192548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	/*! This tag is not allowed in the given IFD */
193548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_SUPPORT_LEVEL_NOT_RECORDED,
194548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
195548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	/*! This tag is mandatory in the given IFD */
196548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_SUPPORT_LEVEL_MANDATORY,
197548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
198548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	/*! This tag is optional in the given IFD */
199548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen	EXIF_SUPPORT_LEVEL_OPTIONAL
200548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen} ExifSupportLevel;
201548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
202548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen/*! Return the tag ID given its unique textual name.
203548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen *
204548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * \param[in] name tag name
205548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * \return tag ID, or 0 if tag not found
206548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * \note The tag not found value cannot be distinguished from a legitimate
207548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen *   tag number 0.
208548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen */
209548dde4863e9a2315e3f327efe63ff55949addb8Marco NelissenExifTag          exif_tag_from_name                (const char *name);
210548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
211548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen/*! Return a textual name of the given tag when found in the given IFD. The
212548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * name is a short, unique, non-localized text string containing only
213548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * US-ASCII alphanumeric characters.
214548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen *
215548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * \param[in] tag EXIF tag
216548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * \param[in] ifd IFD
217548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * \return textual name of the tag, or NULL if the tag is unknown
218548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen */
219548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissenconst char      *exif_tag_get_name_in_ifd          (ExifTag tag, ExifIfd ifd);
220548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
221548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen/*! Return a textual title of the given tag when found in the given IFD.
222548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * The title is a short, localized description of the tag.
223548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen *
224548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * \param[in] tag EXIF tag
225548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * \param[in] ifd IFD
226548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * \return textual title of the tag, or NULL if the tag is unknown
227548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen */
228548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissenconst char      *exif_tag_get_title_in_ifd         (ExifTag tag, ExifIfd ifd);
229548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
230548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen/*! Return a verbose textual description of the given tag when found in the
231548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * given IFD. The description is a verbose, localized description of the tag.
232548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen *
233548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * \param[in] tag EXIF tag
234548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * \param[in] ifd IFD
235548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * \return textual description of the tag, or NULL if the tag is unknown
236548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen */
237548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissenconst char      *exif_tag_get_description_in_ifd   (ExifTag tag, ExifIfd ifd);
238548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
239548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen/*! Return whether the given tag is mandatory or not in the given IFD and
240548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * data type according to the EXIF specification. If the IFD given is
241548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * EXIF_IFD_COUNT, the result is EXIF_SUPPORT_LEVEL_UNKNOWN. If the data
242548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * type is EXIF_DATA_TYPE_UNKNOWN, the result is
243548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * EXIF_SUPPORT_LEVEL_UNKNOWN unless the support level is the same for
244548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * all data types.
245548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen *
246548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * \param[in] tag EXIF tag
247548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * \param[in] ifd IFD or EXIF_IFD_COUNT
248548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * \param[in] t data type or EXIF_DATA_TYPE_UNKNOWN
249548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * \return the level of support for this tag
250548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen */
251548dde4863e9a2315e3f327efe63ff55949addb8Marco NelissenExifSupportLevel exif_tag_get_support_level_in_ifd (ExifTag tag, ExifIfd ifd,
252548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen                                                    ExifDataType t);
253548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
254548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen/* Don't use these functions. They are here for compatibility only. */
255548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
256548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen/*! \deprecated Use #exif_tag_get_name_in_ifd instead */
257548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissenconst char     *exif_tag_get_name        (ExifTag tag);
258548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
259548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen/*! \deprecated Use #exif_tag_get_title_in_ifd instead */
260548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissenconst char     *exif_tag_get_title       (ExifTag tag);
261548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
262548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen/*! \deprecated Use #exif_tag_get_description_in_ifd instead */
263548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissenconst char     *exif_tag_get_description (ExifTag tag);
264548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
265548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
266548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen/* For now, do not use these functions. */
267548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
268548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen/*! \internal */
269548dde4863e9a2315e3f327efe63ff55949addb8Marco NelissenExifTag      exif_tag_table_get_tag  (unsigned int n);
270548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
271548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen/*! \internal */
272548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissenconst char  *exif_tag_table_get_name (unsigned int n);
273548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
274548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen/*! \internal */
275548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissenunsigned int exif_tag_table_count    (void);
276548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
277548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
278548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen/* Don't use these definitions. They are here for compatibility only. */
279548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
280548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen/*! \deprecated Use EXIF_TAG_PRINT_IMAGE_MATCHING instead. */
281548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define EXIF_TAG_UNKNOWN_C4A5 EXIF_TAG_PRINT_IMAGE_MATCHING
282548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
283548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#ifdef __cplusplus
284548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen}
285548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#endif /* __cplusplus */
286548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen
287548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#endif /* __EXIF_TAG_H__ */
288