OLD | NEW |
(Empty) | |
| 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_GAMMA = 0xa500, |
| 150 EXIF_TAG_PRINT_IMAGE_MATCHING = 0xc4a5, |
| 151 EXIF_TAG_PADDING = 0xea1c |
| 152 } ExifTag; |
| 153 |
| 154 /* GPS tags overlap with above ones. */ |
| 155 #define EXIF_TAG_GPS_VERSION_ID 0x0000 |
| 156 #define EXIF_TAG_GPS_LATITUDE_REF 0x0001 /* INTEROPERABILITY_INDEX */ |
| 157 #define EXIF_TAG_GPS_LATITUDE 0x0002 /* INTEROPERABILITY_VERSION */ |
| 158 #define EXIF_TAG_GPS_LONGITUDE_REF 0x0003 |
| 159 #define EXIF_TAG_GPS_LONGITUDE 0x0004 |
| 160 #define EXIF_TAG_GPS_ALTITUDE_REF 0x0005 |
| 161 #define EXIF_TAG_GPS_ALTITUDE 0x0006 |
| 162 #define EXIF_TAG_GPS_TIME_STAMP 0x0007 |
| 163 #define EXIF_TAG_GPS_SATELLITES 0x0008 |
| 164 #define EXIF_TAG_GPS_STATUS 0x0009 |
| 165 #define EXIF_TAG_GPS_MEASURE_MODE 0x000a |
| 166 #define EXIF_TAG_GPS_DOP 0x000b |
| 167 #define EXIF_TAG_GPS_SPEED_REF 0x000c |
| 168 #define EXIF_TAG_GPS_SPEED 0x000d |
| 169 #define EXIF_TAG_GPS_TRACK_REF 0x000e |
| 170 #define EXIF_TAG_GPS_TRACK 0x000f |
| 171 #define EXIF_TAG_GPS_IMG_DIRECTION_REF 0x0010 |
| 172 #define EXIF_TAG_GPS_IMG_DIRECTION 0x0011 |
| 173 #define EXIF_TAG_GPS_MAP_DATUM 0x0012 |
| 174 #define EXIF_TAG_GPS_DEST_LATITUDE_REF 0x0013 |
| 175 #define EXIF_TAG_GPS_DEST_LATITUDE 0x0014 |
| 176 #define EXIF_TAG_GPS_DEST_LONGITUDE_REF 0x0015 |
| 177 #define EXIF_TAG_GPS_DEST_LONGITUDE 0x0016 |
| 178 #define EXIF_TAG_GPS_DEST_BEARING_REF 0x0017 |
| 179 #define EXIF_TAG_GPS_DEST_BEARING 0x0018 |
| 180 #define EXIF_TAG_GPS_DEST_DISTANCE_REF 0x0019 |
| 181 #define EXIF_TAG_GPS_DEST_DISTANCE 0x001a |
| 182 #define EXIF_TAG_GPS_PROCESSING_METHOD 0x001b |
| 183 #define EXIF_TAG_GPS_AREA_INFORMATION 0x001c |
| 184 #define EXIF_TAG_GPS_DATE_STAMP 0x001d |
| 185 #define EXIF_TAG_GPS_DIFFERENTIAL 0x001e |
| 186 |
| 187 /*! What level of support a tag enjoys in the EXIF standard */ |
| 188 typedef enum { |
| 189 /*! The meaning of this tag is unknown */ |
| 190 EXIF_SUPPORT_LEVEL_UNKNOWN = 0, |
| 191 |
| 192 /*! This tag is not allowed in the given IFD */ |
| 193 EXIF_SUPPORT_LEVEL_NOT_RECORDED, |
| 194 |
| 195 /*! This tag is mandatory in the given IFD */ |
| 196 EXIF_SUPPORT_LEVEL_MANDATORY, |
| 197 |
| 198 /*! This tag is optional in the given IFD */ |
| 199 EXIF_SUPPORT_LEVEL_OPTIONAL |
| 200 } ExifSupportLevel; |
| 201 |
| 202 /*! Return the tag ID given its unique textual name. |
| 203 * |
| 204 * \param[in] name tag name |
| 205 * \return tag ID, or 0 if tag not found |
| 206 * \note The tag not found value cannot be distinguished from a legitimate |
| 207 * tag number 0. |
| 208 */ |
| 209 ExifTag exif_tag_from_name (const char *name); |
| 210 |
| 211 /*! Return a textual name of the given tag when found in the given IFD. The |
| 212 * name is a short, unique, non-localized text string containing only |
| 213 * US-ASCII alphanumeric characters. |
| 214 * |
| 215 * \param[in] tag EXIF tag |
| 216 * \param[in] ifd IFD |
| 217 * \return textual name of the tag, or NULL if the tag is unknown |
| 218 */ |
| 219 const char *exif_tag_get_name_in_ifd (ExifTag tag, ExifIfd ifd); |
| 220 |
| 221 /*! Return a textual title of the given tag when found in the given IFD. |
| 222 * The title is a short, localized description of the tag. |
| 223 * |
| 224 * \param[in] tag EXIF tag |
| 225 * \param[in] ifd IFD |
| 226 * \return textual title of the tag, or NULL if the tag is unknown |
| 227 */ |
| 228 const char *exif_tag_get_title_in_ifd (ExifTag tag, ExifIfd ifd); |
| 229 |
| 230 /*! Return a verbose textual description of the given tag when found in the |
| 231 * given IFD. The description is a verbose, localized description of the tag. |
| 232 * |
| 233 * \param[in] tag EXIF tag |
| 234 * \param[in] ifd IFD |
| 235 * \return textual description of the tag, or NULL if the tag is unknown |
| 236 */ |
| 237 const char *exif_tag_get_description_in_ifd (ExifTag tag, ExifIfd ifd); |
| 238 |
| 239 /*! Return whether the given tag is mandatory or not in the given IFD and |
| 240 * data type according to the EXIF specification. If the IFD given is |
| 241 * EXIF_IFD_COUNT, the result is EXIF_SUPPORT_LEVEL_UNKNOWN. If the data |
| 242 * type is EXIF_DATA_TYPE_UNKNOWN, the result is |
| 243 * EXIF_SUPPORT_LEVEL_UNKNOWN unless the support level is the same for |
| 244 * all data types. |
| 245 * |
| 246 * \param[in] tag EXIF tag |
| 247 * \param[in] ifd IFD or EXIF_IFD_COUNT |
| 248 * \param[in] t data type or EXIF_DATA_TYPE_UNKNOWN |
| 249 * \return the level of support for this tag |
| 250 */ |
| 251 ExifSupportLevel exif_tag_get_support_level_in_ifd (ExifTag tag, ExifIfd ifd, |
| 252 ExifDataType t); |
| 253 |
| 254 /* Don't use these functions. They are here for compatibility only. */ |
| 255 |
| 256 /*! \deprecated Use #exif_tag_get_name_in_ifd instead */ |
| 257 const char *exif_tag_get_name (ExifTag tag); |
| 258 |
| 259 /*! \deprecated Use #exif_tag_get_title_in_ifd instead */ |
| 260 const char *exif_tag_get_title (ExifTag tag); |
| 261 |
| 262 /*! \deprecated Use #exif_tag_get_description_in_ifd instead */ |
| 263 const char *exif_tag_get_description (ExifTag tag); |
| 264 |
| 265 |
| 266 /* For now, do not use these functions. */ |
| 267 |
| 268 /*! \internal */ |
| 269 ExifTag exif_tag_table_get_tag (unsigned int n); |
| 270 |
| 271 /*! \internal */ |
| 272 const char *exif_tag_table_get_name (unsigned int n); |
| 273 |
| 274 /*! \internal */ |
| 275 unsigned int exif_tag_table_count (void); |
| 276 |
| 277 |
| 278 /* Don't use these definitions. They are here for compatibility only. */ |
| 279 |
| 280 /*! \deprecated Use EXIF_TAG_PRINT_IMAGE_MATCHING instead. */ |
| 281 #define EXIF_TAG_UNKNOWN_C4A5 EXIF_TAG_PRINT_IMAGE_MATCHING |
| 282 |
| 283 #ifdef __cplusplus |
| 284 } |
| 285 #endif /* __cplusplus */ |
| 286 |
| 287 #endif /* __EXIF_TAG_H__ */ |
OLD | NEW |