3103903b05f4a6bddad9d70e24deb91753cf3a96
[platform/upstream/libexif.git] / libexif / exif-tag.h
1 /*! \file exif-tag.h
2  *  \brief Handling EXIF tags
3  */
4 /*
5  * Copyright (c) 2001 Lutz Mueller <lutz@users.sourceforge.net>
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful, 
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of 
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details. 
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the
19  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20  * Boston, MA  02110-1301  USA.
21  */
22
23 #ifndef __EXIF_TAG_H__
24 #define __EXIF_TAG_H__
25
26 #ifdef __cplusplus
27 extern "C" {
28 #endif /* __cplusplus */
29
30 #include <libexif/exif-ifd.h>
31 #include <libexif/exif-data-type.h>
32
33 /*! EXIF tags */
34 typedef enum {
35         EXIF_TAG_INTEROPERABILITY_INDEX         = 0x0001,
36         EXIF_TAG_INTEROPERABILITY_VERSION       = 0x0002,
37         EXIF_TAG_NEW_SUBFILE_TYPE               = 0x00fe,
38         EXIF_TAG_IMAGE_WIDTH                    = 0x0100,
39         EXIF_TAG_IMAGE_LENGTH                   = 0x0101,
40         EXIF_TAG_BITS_PER_SAMPLE                = 0x0102,
41         EXIF_TAG_COMPRESSION                    = 0x0103,
42         EXIF_TAG_PHOTOMETRIC_INTERPRETATION     = 0x0106,
43         EXIF_TAG_FILL_ORDER                     = 0x010a,
44         EXIF_TAG_DOCUMENT_NAME                  = 0x010d,
45         EXIF_TAG_IMAGE_DESCRIPTION              = 0x010e,
46         EXIF_TAG_MAKE                           = 0x010f,
47         EXIF_TAG_MODEL                          = 0x0110,
48         EXIF_TAG_STRIP_OFFSETS                  = 0x0111,
49         EXIF_TAG_ORIENTATION                    = 0x0112,
50         EXIF_TAG_SAMPLES_PER_PIXEL              = 0x0115,
51         EXIF_TAG_ROWS_PER_STRIP                 = 0x0116,
52         EXIF_TAG_STRIP_BYTE_COUNTS              = 0x0117,
53         EXIF_TAG_X_RESOLUTION                   = 0x011a,
54         EXIF_TAG_Y_RESOLUTION                   = 0x011b,
55         EXIF_TAG_PLANAR_CONFIGURATION           = 0x011c,
56         EXIF_TAG_RESOLUTION_UNIT                = 0x0128,
57         EXIF_TAG_TRANSFER_FUNCTION              = 0x012d,
58         EXIF_TAG_SOFTWARE                       = 0x0131,
59         EXIF_TAG_DATE_TIME                      = 0x0132,
60         EXIF_TAG_ARTIST                         = 0x013b,
61         EXIF_TAG_WHITE_POINT                    = 0x013e,
62         EXIF_TAG_PRIMARY_CHROMATICITIES         = 0x013f,
63         EXIF_TAG_SUB_IFDS                       = 0x014a,
64         EXIF_TAG_TRANSFER_RANGE                 = 0x0156,
65         EXIF_TAG_JPEG_PROC                      = 0x0200,
66         EXIF_TAG_JPEG_INTERCHANGE_FORMAT        = 0x0201,
67         EXIF_TAG_JPEG_INTERCHANGE_FORMAT_LENGTH = 0x0202,
68         EXIF_TAG_YCBCR_COEFFICIENTS             = 0x0211,
69         EXIF_TAG_YCBCR_SUB_SAMPLING             = 0x0212,
70         EXIF_TAG_YCBCR_POSITIONING              = 0x0213,
71         EXIF_TAG_REFERENCE_BLACK_WHITE          = 0x0214,
72         EXIF_TAG_XML_PACKET                     = 0x02bc,
73         EXIF_TAG_RELATED_IMAGE_FILE_FORMAT      = 0x1000,
74         EXIF_TAG_RELATED_IMAGE_WIDTH            = 0x1001,
75         EXIF_TAG_RELATED_IMAGE_LENGTH           = 0x1002,
76         EXIF_TAG_CFA_REPEAT_PATTERN_DIM         = 0x828d,
77         EXIF_TAG_CFA_PATTERN                    = 0x828e,
78         EXIF_TAG_BATTERY_LEVEL                  = 0x828f,
79         EXIF_TAG_COPYRIGHT                      = 0x8298,
80         EXIF_TAG_EXPOSURE_TIME                  = 0x829a,
81         EXIF_TAG_FNUMBER                        = 0x829d,
82         EXIF_TAG_IPTC_NAA                       = 0x83bb,
83         EXIF_TAG_IMAGE_RESOURCES                = 0x8649,
84         EXIF_TAG_EXIF_IFD_POINTER               = 0x8769,
85         EXIF_TAG_INTER_COLOR_PROFILE            = 0x8773,
86         EXIF_TAG_EXPOSURE_PROGRAM               = 0x8822,
87         EXIF_TAG_SPECTRAL_SENSITIVITY           = 0x8824,
88         EXIF_TAG_GPS_INFO_IFD_POINTER           = 0x8825,
89         EXIF_TAG_ISO_SPEED_RATINGS              = 0x8827,
90         EXIF_TAG_OECF                           = 0x8828,
91         EXIF_TAG_TIME_ZONE_OFFSET               = 0x882a,
92         EXIF_TAG_EXIF_VERSION                   = 0x9000,
93         EXIF_TAG_DATE_TIME_ORIGINAL             = 0x9003,
94         EXIF_TAG_DATE_TIME_DIGITIZED            = 0x9004,
95         EXIF_TAG_COMPONENTS_CONFIGURATION       = 0x9101,
96         EXIF_TAG_COMPRESSED_BITS_PER_PIXEL      = 0x9102,
97         EXIF_TAG_SHUTTER_SPEED_VALUE            = 0x9201,
98         EXIF_TAG_APERTURE_VALUE                 = 0x9202,
99         EXIF_TAG_BRIGHTNESS_VALUE               = 0x9203,
100         EXIF_TAG_EXPOSURE_BIAS_VALUE            = 0x9204,
101         EXIF_TAG_MAX_APERTURE_VALUE             = 0x9205,
102         EXIF_TAG_SUBJECT_DISTANCE               = 0x9206,
103         EXIF_TAG_METERING_MODE                  = 0x9207,
104         EXIF_TAG_LIGHT_SOURCE                   = 0x9208,
105         EXIF_TAG_FLASH                          = 0x9209,
106         EXIF_TAG_FOCAL_LENGTH                   = 0x920a,
107         EXIF_TAG_SUBJECT_AREA                   = 0x9214,
108         EXIF_TAG_TIFF_EP_STANDARD_ID            = 0x9216,
109         EXIF_TAG_MAKER_NOTE                     = 0x927c,
110         EXIF_TAG_USER_COMMENT                   = 0x9286,
111         EXIF_TAG_SUB_SEC_TIME                   = 0x9290,
112         EXIF_TAG_SUB_SEC_TIME_ORIGINAL          = 0x9291,
113         EXIF_TAG_SUB_SEC_TIME_DIGITIZED         = 0x9292,
114         EXIF_TAG_XP_TITLE                       = 0x9c9b,
115         EXIF_TAG_XP_COMMENT                     = 0x9c9c,
116         EXIF_TAG_XP_AUTHOR                      = 0x9c9d,
117         EXIF_TAG_XP_KEYWORDS                    = 0x9c9e,
118         EXIF_TAG_XP_SUBJECT                     = 0x9c9f,
119         EXIF_TAG_FLASH_PIX_VERSION              = 0xa000,
120         EXIF_TAG_COLOR_SPACE                    = 0xa001,
121         EXIF_TAG_PIXEL_X_DIMENSION              = 0xa002,
122         EXIF_TAG_PIXEL_Y_DIMENSION              = 0xa003,
123         EXIF_TAG_RELATED_SOUND_FILE             = 0xa004,
124         EXIF_TAG_INTEROPERABILITY_IFD_POINTER   = 0xa005,
125         EXIF_TAG_FLASH_ENERGY                   = 0xa20b,
126         EXIF_TAG_SPATIAL_FREQUENCY_RESPONSE     = 0xa20c,
127         EXIF_TAG_FOCAL_PLANE_X_RESOLUTION       = 0xa20e,
128         EXIF_TAG_FOCAL_PLANE_Y_RESOLUTION       = 0xa20f,
129         EXIF_TAG_FOCAL_PLANE_RESOLUTION_UNIT    = 0xa210,
130         EXIF_TAG_SUBJECT_LOCATION               = 0xa214,
131         EXIF_TAG_EXPOSURE_INDEX                 = 0xa215,
132         EXIF_TAG_SENSING_METHOD                 = 0xa217,
133         EXIF_TAG_FILE_SOURCE                    = 0xa300,
134         EXIF_TAG_SCENE_TYPE                     = 0xa301,
135         EXIF_TAG_NEW_CFA_PATTERN                = 0xa302,
136         EXIF_TAG_CUSTOM_RENDERED                = 0xa401,
137         EXIF_TAG_EXPOSURE_MODE                  = 0xa402,
138         EXIF_TAG_WHITE_BALANCE                  = 0xa403,
139         EXIF_TAG_DIGITAL_ZOOM_RATIO             = 0xa404,
140         EXIF_TAG_FOCAL_LENGTH_IN_35MM_FILM      = 0xa405,
141         EXIF_TAG_SCENE_CAPTURE_TYPE             = 0xa406,
142         EXIF_TAG_GAIN_CONTROL                   = 0xa407,
143         EXIF_TAG_CONTRAST                       = 0xa408,
144         EXIF_TAG_SATURATION                     = 0xa409,
145         EXIF_TAG_SHARPNESS                      = 0xa40a,
146         EXIF_TAG_DEVICE_SETTING_DESCRIPTION     = 0xa40b,
147         EXIF_TAG_SUBJECT_DISTANCE_RANGE         = 0xa40c,
148         EXIF_TAG_IMAGE_UNIQUE_ID                = 0xa420,
149         EXIF_TAG_CAMERA_OWNER_NAME              = 0xa430,
150         EXIF_TAG_BODY_SERIAL_NUMBER             = 0xa431,
151         EXIF_TAG_LENS_SPECIFICATION             = 0xa432,
152         EXIF_TAG_LENS_MAKE                      = 0xa433,
153         EXIF_TAG_LENS_MODEL                     = 0xa434,
154         EXIF_TAG_LENS_SERIAL_NUMBER             = 0xa435,
155         EXIF_TAG_COMPOSITE_IMAGE                = 0xa460,
156         EXIF_TAG_SOURCE_IMAGE_NUMBER_OF_COMPOSITE_IMAGE                 = 0xa461,
157         EXIF_TAG_SOURCE_EXPOSURE_TIMES_OF_COMPOSITE_IMAGE               = 0xa462,
158         EXIF_TAG_GAMMA                          = 0xa500,
159         EXIF_TAG_PRINT_IMAGE_MATCHING           = 0xc4a5,
160         EXIF_TAG_PADDING                        = 0xea1c
161 } ExifTag;
162
163 /* GPS tags overlap with above ones. */
164 #define EXIF_TAG_GPS_VERSION_ID        0x0000
165 #define EXIF_TAG_GPS_LATITUDE_REF      0x0001 /* INTEROPERABILITY_INDEX   */
166 #define EXIF_TAG_GPS_LATITUDE          0x0002 /* INTEROPERABILITY_VERSION */
167 #define EXIF_TAG_GPS_LONGITUDE_REF     0x0003
168 #define EXIF_TAG_GPS_LONGITUDE         0x0004
169 #define EXIF_TAG_GPS_ALTITUDE_REF      0x0005
170 #define EXIF_TAG_GPS_ALTITUDE          0x0006
171 #define EXIF_TAG_GPS_TIME_STAMP        0x0007
172 #define EXIF_TAG_GPS_SATELLITES        0x0008
173 #define EXIF_TAG_GPS_STATUS            0x0009
174 #define EXIF_TAG_GPS_MEASURE_MODE      0x000a
175 #define EXIF_TAG_GPS_DOP               0x000b
176 #define EXIF_TAG_GPS_SPEED_REF         0x000c
177 #define EXIF_TAG_GPS_SPEED             0x000d
178 #define EXIF_TAG_GPS_TRACK_REF         0x000e
179 #define EXIF_TAG_GPS_TRACK             0x000f
180 #define EXIF_TAG_GPS_IMG_DIRECTION_REF 0x0010
181 #define EXIF_TAG_GPS_IMG_DIRECTION     0x0011
182 #define EXIF_TAG_GPS_MAP_DATUM         0x0012
183 #define EXIF_TAG_GPS_DEST_LATITUDE_REF 0x0013
184 #define EXIF_TAG_GPS_DEST_LATITUDE     0x0014
185 #define EXIF_TAG_GPS_DEST_LONGITUDE_REF 0x0015
186 #define EXIF_TAG_GPS_DEST_LONGITUDE     0x0016
187 #define EXIF_TAG_GPS_DEST_BEARING_REF   0x0017
188 #define EXIF_TAG_GPS_DEST_BEARING       0x0018
189 #define EXIF_TAG_GPS_DEST_DISTANCE_REF  0x0019
190 #define EXIF_TAG_GPS_DEST_DISTANCE      0x001a
191 #define EXIF_TAG_GPS_PROCESSING_METHOD  0x001b
192 #define EXIF_TAG_GPS_AREA_INFORMATION   0x001c
193 #define EXIF_TAG_GPS_DATE_STAMP         0x001d
194 #define EXIF_TAG_GPS_DIFFERENTIAL       0x001e
195 #define EXIF_TAG_GPS_H_POSITIONING_ERROR 0x001f
196
197 /*! What level of support a tag enjoys in the EXIF standard */
198 typedef enum {
199         /*! The meaning of this tag is unknown */
200         EXIF_SUPPORT_LEVEL_UNKNOWN = 0,
201
202         /*! This tag is not allowed in the given IFD */
203         EXIF_SUPPORT_LEVEL_NOT_RECORDED,
204
205         /*! This tag is mandatory in the given IFD */
206         EXIF_SUPPORT_LEVEL_MANDATORY,
207
208         /*! This tag is optional in the given IFD */
209         EXIF_SUPPORT_LEVEL_OPTIONAL
210 } ExifSupportLevel;
211
212 /*! Return the tag ID given its unique textual name.
213  *
214  * \param[in] name tag name
215  * \return tag ID, or 0 if tag not found
216  * \note The tag not found value cannot be distinguished from a legitimate
217  *   tag number 0.
218  */
219 ExifTag          exif_tag_from_name                (const char *name);
220
221 /*! Return a textual name of the given tag when found in the given IFD. The
222  * name is a short, unique, non-localized text string containing only
223  * US-ASCII alphanumeric characters.
224  *
225  * \param[in] tag EXIF tag
226  * \param[in] ifd IFD
227  * \return textual name of the tag, or NULL if the tag is unknown
228  */
229 const char      *exif_tag_get_name_in_ifd          (ExifTag tag, ExifIfd ifd);
230
231 /*! Return a textual title of the given tag when found in the given IFD.
232  * The title is a short, localized description of the tag.
233  *
234  * \param[in] tag EXIF tag
235  * \param[in] ifd IFD
236  * \return textual title of the tag, or NULL if the tag is unknown
237  */
238 const char      *exif_tag_get_title_in_ifd         (ExifTag tag, ExifIfd ifd);
239
240 /*! Return a verbose textual description of the given tag when found in the
241  * given IFD. The description is a verbose, localized description of the tag.
242  *
243  * \param[in] tag EXIF tag
244  * \param[in] ifd IFD
245  * \return textual description of the tag, or NULL if the tag is unknown
246  */
247 const char      *exif_tag_get_description_in_ifd   (ExifTag tag, ExifIfd ifd);
248
249 /*! Return whether the given tag is mandatory or not in the given IFD and
250  * data type according to the EXIF specification. If the IFD given is
251  * EXIF_IFD_COUNT, the result is EXIF_SUPPORT_LEVEL_UNKNOWN. If the data
252  * type is EXIF_DATA_TYPE_UNKNOWN, the result is
253  * EXIF_SUPPORT_LEVEL_UNKNOWN unless the support level is the same for
254  * all data types.
255  *
256  * \param[in] tag EXIF tag
257  * \param[in] ifd IFD or EXIF_IFD_COUNT
258  * \param[in] t data type or EXIF_DATA_TYPE_UNKNOWN
259  * \return the level of support for this tag
260  */
261 ExifSupportLevel exif_tag_get_support_level_in_ifd (ExifTag tag, ExifIfd ifd,
262                                                     ExifDataType t);
263
264 /* Don't use these functions. They are here for compatibility only. */
265
266 /*! \deprecated Use #exif_tag_get_name_in_ifd instead */
267 const char     *exif_tag_get_name        (ExifTag tag);
268
269 /*! \deprecated Use #exif_tag_get_title_in_ifd instead */
270 const char     *exif_tag_get_title       (ExifTag tag);
271
272 /*! \deprecated Use #exif_tag_get_description_in_ifd instead */
273 const char     *exif_tag_get_description (ExifTag tag);
274
275
276 /* For now, do not use these functions. */
277
278 /*! \internal */
279 ExifTag      exif_tag_table_get_tag  (unsigned int n);
280
281 /*! \internal */
282 const char  *exif_tag_table_get_name (unsigned int n);
283
284 /*! \internal */
285 unsigned int exif_tag_table_count    (void);
286
287
288 /* Don't use these definitions. They are here for compatibility only. */
289
290 /*! \deprecated Use EXIF_TAG_PRINT_IMAGE_MATCHING instead. */
291 #define EXIF_TAG_UNKNOWN_C4A5 EXIF_TAG_PRINT_IMAGE_MATCHING
292
293 #ifdef __cplusplus
294 }
295 #endif /* __cplusplus */
296
297 #endif /* __EXIF_TAG_H__ */