Home | History | Annotate | Download | only in libexif
      1 /*! \file exif-tag.h
      2  *  \brief Handling EXIF tags
      3  */
      4 /*
      5  * Copyright (c) 2001 Lutz Mueller <lutz (at) 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__ */
    288