Home | History | Annotate | Download | only in qexif
      1 /*Copyright (c) 2012, The Linux Foundation. All rights reserved.
      2 
      3 Redistribution and use in source and binary forms, with or without
      4 modification, are permitted provided that the following conditions are
      5 met:
      6     * Redistributions of source code must retain the above copyright
      7       notice, this list of conditions and the following disclaimer.
      8     * Redistributions in binary form must reproduce the above
      9       copyright notice, this list of conditions and the following
     10       disclaimer in the documentation and/or other materials provided
     11       with the distribution.
     12     * Neither the name of The Linux Foundation nor the names of its
     13       contributors may be used to endorse or promote products derived
     14       from this software without specific prior written permission.
     15 
     16 THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
     17 WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     18 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
     19 ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
     20 BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     21 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     22 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
     23 BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     24 WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
     25 OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
     26 IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/
     27 
     28 
     29 #ifndef __QEXIF_H__
     30 #define __QEXIF_H__
     31 
     32 #include <stdio.h>
     33 
     34 /* Exif Info (opaque definition) */
     35 struct exif_info_t;
     36 typedef struct exif_info_t * exif_info_obj_t;
     37 
     38 /* Exif Tag ID */
     39 typedef uint32_t exif_tag_id_t;
     40 
     41 
     42 /* Exif Rational Data Type */
     43 typedef struct
     44 {
     45     uint32_t  num;    // Numerator
     46     uint32_t  denom;  // Denominator
     47 
     48 } rat_t;
     49 
     50 /* Exif Signed Rational Data Type */
     51 typedef struct
     52 {
     53     int32_t  num;    // Numerator
     54     int32_t  denom;  // Denominator
     55 
     56 } srat_t;
     57 
     58 /* Exif Tag Data Type */
     59 typedef enum
     60 {
     61     EXIF_BYTE      = 1,
     62     EXIF_ASCII     = 2,
     63     EXIF_SHORT     = 3,
     64     EXIF_LONG      = 4,
     65     EXIF_RATIONAL  = 5,
     66     EXIF_UNDEFINED = 7,
     67     EXIF_SLONG     = 9,
     68     EXIF_SRATIONAL = 10
     69 } exif_tag_type_t;
     70 
     71 /* Exif Tag Entry
     72  * Used in exif_set_tag as an input argument and
     73  * in exif_get_tag as an output argument. */
     74 typedef struct
     75 {
     76     /* The Data Type of the Tag *
     77      * Rational, etc */
     78     exif_tag_type_t type;
     79 
     80     /* Copy
     81      * This field is used when a user pass this structure to
     82      * be stored in an exif_info_t via the exif_set_tag method.
     83      * The routine would look like this field and decide whether
     84      * it is necessary to make a copy of the data pointed by this
     85      * structure (all string and array types).
     86      * If this field is set to false, only a pointer to the actual
     87      * data is retained and it is the caller's responsibility to
     88      * ensure the validity of the data before the exif_info_t object
     89      * is destroyed.
     90      */
     91     uint8_t copy;
     92 
     93     /* Data count
     94      * This indicates the number of elements of the data. For example, if
     95      * the type is EXIF_BYTE and the count is 1, that means the actual data
     96      * is one byte and is accessible by data._byte. If the type is EXIF_BYTE
     97      * and the count is more than one, the actual data is contained in an
     98      * array and is accessible by data._bytes. In case of EXIF_ASCII, it
     99      * indicates the string length and in case of EXIF_UNDEFINED, it indicates
    100      * the length of the array.
    101      */
    102     uint32_t count;
    103 
    104     /* Data
    105      * A union which covers all possible data types. The user should pick
    106      * the right field to use depending on the data type and the count.
    107      * See in-line comment below.
    108      */
    109     union
    110     {
    111         char      *_ascii;      // EXIF_ASCII (count indicates string length)
    112         uint8_t   *_bytes;      // EXIF_BYTE  (count > 1)
    113         uint8_t    _byte;       // EXIF_BYTE  (count = 1)
    114         uint16_t  *_shorts;     // EXIF_SHORT (count > 1)
    115         uint16_t   _short;      // EXIF_SHORT (count = 1)
    116         uint32_t  *_longs;      // EXIF_LONG  (count > 1)
    117         uint32_t   _long;       // EXIF_LONG  (count = 1)
    118         rat_t     *_rats;       // EXIF_RATIONAL  (count > 1)
    119         rat_t      _rat;        // EXIF_RATIONAL  (count = 1)
    120         uint8_t   *_undefined;  // EXIF_UNDEFINED (count indicates length)
    121         int32_t   *_slongs;     // EXIF_SLONG (count > 1)
    122         int32_t    _slong;      // EXIF_SLONG (count = 1)
    123         srat_t    *_srats;      // EXIF_SRATIONAL (count > 1)
    124         srat_t     _srat;       // EXIF_SRATIONAL (count = 1)
    125 
    126     } data;
    127 
    128 } exif_tag_entry_t;
    129 
    130 /* =======================================================================
    131 **                          Macro Definitions
    132 ** ======================================================================= */
    133 /* Enum defined to let compiler generate unique offset numbers for different
    134  * tags - ordering matters! NOT INTENDED to be used by any application. */
    135 typedef enum
    136 {
    137     // GPS IFD
    138     GPS_VERSION_ID = 0,
    139     GPS_LATITUDE_REF,
    140     GPS_LATITUDE,
    141     GPS_LONGITUDE_REF,
    142     GPS_LONGITUDE,
    143     GPS_ALTITUDE_REF,
    144     GPS_ALTITUDE,
    145     GPS_TIMESTAMP,
    146     GPS_SATELLITES,
    147     GPS_STATUS,
    148     GPS_MEASUREMODE,
    149     GPS_DOP,
    150     GPS_SPEED_REF,
    151     GPS_SPEED,
    152     GPS_TRACK_REF,
    153     GPS_TRACK,
    154     GPS_IMGDIRECTION_REF,
    155     GPS_IMGDIRECTION,
    156     GPS_MAPDATUM,
    157     GPS_DESTLATITUDE_REF,
    158     GPS_DESTLATITUDE,
    159     GPS_DESTLONGITUDE_REF,
    160     GPS_DESTLONGITUDE,
    161     GPS_DESTBEARING_REF,
    162     GPS_DESTBEARING,
    163     GPS_DESTDISTANCE_REF,
    164     GPS_DESTDISTANCE,
    165     GPS_PROCESSINGMETHOD,
    166     GPS_AREAINFORMATION,
    167     GPS_DATESTAMP,
    168     GPS_DIFFERENTIAL,
    169 
    170     // TIFF IFD
    171     NEW_SUBFILE_TYPE,
    172     SUBFILE_TYPE,
    173     IMAGE_WIDTH,
    174     IMAGE_LENGTH,
    175     BITS_PER_SAMPLE,
    176     COMPRESSION,
    177     PHOTOMETRIC_INTERPRETATION,
    178     THRESH_HOLDING,
    179     CELL_WIDTH,
    180     CELL_HEIGHT,
    181     FILL_ORDER,
    182     DOCUMENT_NAME,
    183     IMAGE_DESCRIPTION,
    184     MAKE,
    185     MODEL,
    186     STRIP_OFFSETS,
    187     ORIENTATION,
    188     SAMPLES_PER_PIXEL,
    189     ROWS_PER_STRIP,
    190     STRIP_BYTE_COUNTS,
    191     MIN_SAMPLE_VALUE,
    192     MAX_SAMPLE_VALUE,
    193     X_RESOLUTION,
    194     Y_RESOLUTION,
    195     PLANAR_CONFIGURATION,
    196     PAGE_NAME,
    197     X_POSITION,
    198     Y_POSITION,
    199     FREE_OFFSET,
    200     FREE_BYTE_COUNTS,
    201     GRAY_RESPONSE_UNIT,
    202     GRAY_RESPONSE_CURVE,
    203     T4_OPTION,
    204     T6_OPTION,
    205     RESOLUTION_UNIT,
    206     PAGE_NUMBER,
    207     TRANSFER_FUNCTION,
    208     SOFTWARE,
    209     DATE_TIME,
    210     ARTIST,
    211     HOST_COMPUTER,
    212     PREDICTOR,
    213     WHITE_POINT,
    214     PRIMARY_CHROMATICITIES,
    215     COLOR_MAP,
    216     HALFTONE_HINTS,
    217     TILE_WIDTH,
    218     TILE_LENGTH,
    219     TILE_OFFSET,
    220     TILE_BYTE_COUNTS,
    221     INK_SET,
    222     INK_NAMES,
    223     NUMBER_OF_INKS,
    224     DOT_RANGE,
    225     TARGET_PRINTER,
    226     EXTRA_SAMPLES,
    227     SAMPLE_FORMAT,
    228     TRANSFER_RANGE,
    229     JPEG_PROC,
    230     JPEG_INTERCHANGE_FORMAT,
    231     JPEG_INTERCHANGE_FORMAT_LENGTH,
    232     JPEG_RESTART_INTERVAL,
    233     JPEG_LOSSLESS_PREDICTORS,
    234     JPEG_POINT_TRANSFORMS,
    235     JPEG_Q_TABLES,
    236     JPEG_DC_TABLES,
    237     JPEG_AC_TABLES,
    238     YCBCR_COEFFICIENTS,
    239     YCBCR_SUB_SAMPLING,
    240     YCBCR_POSITIONING,
    241     REFERENCE_BLACK_WHITE,
    242     GAMMA,
    243     ICC_PROFILE_DESCRIPTOR,
    244     SRGB_RENDERING_INTENT,
    245     IMAGE_TITLE,
    246     COPYRIGHT,
    247     EXIF_IFD,
    248     ICC_PROFILE,
    249     GPS_IFD,
    250 
    251 
    252     // TIFF IFD (Thumbnail)
    253     TN_IMAGE_WIDTH,
    254     TN_IMAGE_LENGTH,
    255     TN_BITS_PER_SAMPLE,
    256     TN_COMPRESSION,
    257     TN_PHOTOMETRIC_INTERPRETATION,
    258     TN_IMAGE_DESCRIPTION,
    259     TN_MAKE,
    260     TN_MODEL,
    261     TN_STRIP_OFFSETS,
    262     TN_ORIENTATION,
    263     TN_SAMPLES_PER_PIXEL,
    264     TN_ROWS_PER_STRIP,
    265     TN_STRIP_BYTE_COUNTS,
    266     TN_X_RESOLUTION,
    267     TN_Y_RESOLUTION,
    268     TN_PLANAR_CONFIGURATION,
    269     TN_RESOLUTION_UNIT,
    270     TN_TRANSFER_FUNCTION,
    271     TN_SOFTWARE,
    272     TN_DATE_TIME,
    273     TN_ARTIST,
    274     TN_WHITE_POINT,
    275     TN_PRIMARY_CHROMATICITIES,
    276     TN_JPEGINTERCHANGE_FORMAT,
    277     TN_JPEGINTERCHANGE_FORMAT_L,
    278     TN_YCBCR_COEFFICIENTS,
    279     TN_YCBCR_SUB_SAMPLING,
    280     TN_YCBCR_POSITIONING,
    281     TN_REFERENCE_BLACK_WHITE,
    282     TN_COPYRIGHT,
    283 
    284     // EXIF IFD
    285     EXPOSURE_TIME,
    286     F_NUMBER,
    287     EXPOSURE_PROGRAM,
    288     SPECTRAL_SENSITIVITY,
    289     ISO_SPEED_RATING,
    290     OECF,
    291     EXIF_VERSION,
    292     EXIF_DATE_TIME_ORIGINAL,
    293     EXIF_DATE_TIME_DIGITIZED,
    294     EXIF_COMPONENTS_CONFIG,
    295     EXIF_COMPRESSED_BITS_PER_PIXEL,
    296     SHUTTER_SPEED,
    297     APERTURE,
    298     BRIGHTNESS,
    299     EXPOSURE_BIAS_VALUE,
    300     MAX_APERTURE,
    301     SUBJECT_DISTANCE,
    302     METERING_MODE,
    303     LIGHT_SOURCE,
    304     FLASH,
    305     FOCAL_LENGTH,
    306     SUBJECT_AREA,
    307     EXIF_MAKER_NOTE,
    308     EXIF_USER_COMMENT,
    309     SUBSEC_TIME,
    310     SUBSEC_TIME_ORIGINAL,
    311     SUBSEC_TIME_DIGITIZED,
    312     EXIF_FLASHPIX_VERSION,
    313     EXIF_COLOR_SPACE,
    314     EXIF_PIXEL_X_DIMENSION,
    315     EXIF_PIXEL_Y_DIMENSION,
    316     RELATED_SOUND_FILE,
    317     INTEROP,
    318     FLASH_ENERGY,
    319     SPATIAL_FREQ_RESPONSE,
    320     FOCAL_PLANE_X_RESOLUTION,
    321     FOCAL_PLANE_Y_RESOLUTION,
    322     FOCAL_PLANE_RESOLUTION_UNIT,
    323     SUBJECT_LOCATION,
    324     EXPOSURE_INDEX,
    325     SENSING_METHOD,
    326     FILE_SOURCE,
    327     SCENE_TYPE,
    328     CFA_PATTERN,
    329     CUSTOM_RENDERED,
    330     EXPOSURE_MODE,
    331     WHITE_BALANCE,
    332     DIGITAL_ZOOM_RATIO,
    333     FOCAL_LENGTH_35MM,
    334     SCENE_CAPTURE_TYPE,
    335     GAIN_CONTROL,
    336     CONTRAST,
    337     SATURATION,
    338     SHARPNESS,
    339     DEVICE_SETTINGS_DESCRIPTION,
    340     SUBJECT_DISTANCE_RANGE,
    341     IMAGE_UID,
    342     PIM,
    343 
    344     EXIF_TAG_MAX_OFFSET
    345 
    346 } exif_tag_offset_t;
    347 
    348 /* Below are the supported Tags (ID and structure for their data) */
    349 #define CONSTRUCT_TAGID(offset,ID) (offset << 16 | ID)
    350 
    351 // GPS tag version
    352 // Use EXIFTAGTYPE_GPS_VERSION_ID as the exif_tag_type (EXIF_BYTE)
    353 // Count should be 4
    354 #define _ID_GPS_VERSION_ID 0x0000
    355 #define EXIFTAGID_GPS_VERSION_ID \
    356   CONSTRUCT_TAGID(GPS_VERSION_ID, _ID_GPS_VERSION_ID)
    357 #define EXIFTAGTYPE_GPS_VERSION_ID EXIF_BYTE
    358 // North or South Latitude
    359 // Use EXIFTAGTYPE_GPS_LATITUDE_REF as the exif_tag_type (EXIF_ASCII)
    360 // It should be 2 characters long including the null-terminating character.
    361 #define _ID_GPS_LATITUDE_REF 0x0001
    362 #define EXIFTAGID_GPS_LATITUDE_REF \
    363   CONSTRUCT_TAGID(GPS_LATITUDE_REF, _ID_GPS_LATITUDE_REF)
    364 #define EXIFTAGTYPE_GPS_LATITUDE_REF EXIF_ASCII
    365 // Latitude
    366 // Use EXIFTAGTYPE_GPS_LATITUDE as the exif_tag_type (EXIF_RATIONAL)
    367 // Count should be 3
    368 #define _ID_GPS_LATITUDE 0x0002
    369 #define EXIFTAGID_GPS_LATITUDE CONSTRUCT_TAGID(GPS_LATITUDE, _ID_GPS_LATITUDE)
    370 #define EXIFTAGTYPE_GPS_LATITUDE EXIF_RATIONAL
    371 // East or West Longitude
    372 // Use EXIFTAGTYPE_GPS_LONGITUDE_REF as the exif_tag_type (EXIF_ASCII)
    373 // It should be 2 characters long including the null-terminating character.
    374 #define _ID_GPS_LONGITUDE_REF 0x0003
    375 #define EXIFTAGID_GPS_LONGITUDE_REF \
    376   CONSTRUCT_TAGID(GPS_LONGITUDE_REF, _ID_GPS_LONGITUDE_REF)
    377 #define EXIFTAGTYPE_GPS_LONGITUDE_REF EXIF_ASCII
    378 // Longitude
    379 // Use EXIFTAGTYPE_GPS_LONGITUDE as the exif_tag_type (EXIF_RATIONAL)
    380 // Count should be 3
    381 #define _ID_GPS_LONGITUDE 0x0004
    382 #define EXIFTAGID_GPS_LONGITUDE \
    383   CONSTRUCT_TAGID(GPS_LONGITUDE, _ID_GPS_LONGITUDE)
    384 #define EXIFTAGTYPE_GPS_LONGITUDE EXIF_RATIONAL
    385 // Altitude reference
    386 // Use EXIFTAGTYPE_GPS_ALTITUDE_REF as the exif_tag_type (EXIF_BYTE)
    387 #define _ID_GPS_ALTITUDE_REF 0x0005
    388 #define EXIFTAGID_GPS_ALTITUDE_REF \
    389   CONSTRUCT_TAGID(GPS_ALTITUDE_REF, _ID_GPS_ALTITUDE_REF)
    390 #define EXIFTAGTYPE_GPS_ALTITUDE_REF EXIF_BYTE
    391 // Altitude
    392 // Use EXIFTAGTYPE_GPS_ALTITUDE as the exif_tag_type (EXIF_RATIONAL)
    393 #define _ID_GPS_ALTITUDE 0x0006
    394 #define EXIFTAGID_GPS_ALTITUDE CONSTRUCT_TAGID(GPS_ALTITUDE, _ID_GPS_ALTITUDE)
    395 #define EXIFTAGTYPE_GPS_ALTITUE EXIF_RATIONAL
    396 // GPS time (atomic clock)
    397 // Use EXIFTAGTYPE_GPS_TIMESTAMP as the exif_tag_type (EXIF_RATIONAL)
    398 // Count should be 3
    399 #define _ID_GPS_TIMESTAMP 0x0007
    400 #define EXIFTAGID_GPS_TIMESTAMP \
    401   CONSTRUCT_TAGID(GPS_TIMESTAMP, _ID_GPS_TIMESTAMP)
    402 #define EXIFTAGTYPE_GPS_TIMESTAMP EXIF_RATIONAL
    403 // GPS Satellites
    404 // Use EXIFTAGTYPE_GPS_SATELLITES as the exif_tag_type (EXIF_ASCII)
    405 // Count can be anything.
    406 #define _ID_GPS_SATELLITES 0x0008
    407 #define EXIFTAGID_GPS_SATELLITES \
    408  CONSTRUCT_TAGID(GPS_SATELLITES, _ID_GPS_SATELLITES)
    409 #define EXIFTAGTYPE_GPS_SATELLITES EXIF_ASCII
    410 // GPS Status
    411 // Use EXIFTAGTYPE_GPS_STATUS as the exif_tag_type (EXIF_ASCII)
    412 // It should be 2 characters long including the null-terminating character.
    413 // "A" - Measurement in progress
    414 // "V" - Measurement Interoperability
    415 // Other - Reserved
    416 #define _ID_GPS_STATUS 0x0009
    417 #define EXIFTAGID_GPS_STATUS CONSTRUCT_TAGID(GPS_STATUS, _ID_GPS_STATUS)
    418 #define EXIFTATTYPE_GPS_STATUS EXIF_ASCII
    419 // GPS Measure Mode
    420 // Use EXIFTAGTYPE_GPS_MEASUREMODE as the exif_tag_type (EXIF_ASCII)
    421 // It should be 2 characters long including the null-terminating character.
    422 // "2" - 2-dimensional measurement
    423 // "3" - 3-dimensional measurement
    424 // Other - Reserved
    425 #define _ID_GPS_MEASUREMODE 0x000a
    426 #define EXIFTAGID_GPS_MEASUREMODE \
    427   CONSTRUCT_TAGID(GPS_MEASUREMODE, _ID_GPS_MEASUREMODE)
    428 #define EXIFTAGTYPE_GPS_MEASUREMODE EXIF_ASCII
    429 // GPS Measurement precision (DOP)
    430 // Use EXIFTAGTYPE_GPS_DOP as the exif_tag_type (EXIF_RATIONAL)
    431 // Count should be 1
    432 #define _ID_GPS_DOP 0x000b
    433 #define EXIFTAGID_GPS_DOP CONSTRUCT_TAGID(GPS_DOP, _ID_GPS_DOP)
    434 #define EXIFTAGTYPE_GPS_DOP EXIF_RATIONAL
    435 // Speed Unit
    436 // Use EXIFTAGTYPE_GPS_SPEED_REF as the exif_tag_type (EXIF_ASCII)
    437 // It should be 2 characters long including the null-terminating character.
    438 // "K" - Kilometers per hour
    439 // "M" - Miles per hour
    440 // "N" - Knots
    441 // Other - Reserved
    442 #define _ID_GPS_SPEED_REF 0x000c
    443 #define EXIFTAGID_GPS_SPEED_REF \
    444   CONSTRUCT_TAGID(GPS_SPEED_REF, _ID_GPS_SPEED_REF)
    445 #define EXIFTAGTYPE_GPS_SPEED_REF EXIF_ASCII
    446 // Speed of GPS receiver
    447 // Use EXIFTAGTYPE_GPS_SPEED as the exif_tag_type (EXIF_RATIONAL)
    448 // Count should be 1
    449 #define _ID_GPS_SPEED 0x000d
    450 #define EXIFTAGID_GPS_SPEED CONSTRUCT_TAGID(GPS_SPEED, _ID_GPS_SPEED)
    451 #define EXIFTAGTYPE_GPS_SPEED EXIF_RATIONAL
    452 // Reference of direction of movement
    453 // Use EXIFTAGTYPE_GPS_TRACK_REF as the exif_tag_type (EXIF_ASCII)
    454 // It should be 2 characters long including the null-terminating character.
    455 // "T" - True direction
    456 // "M" - Magnetic direction
    457 // Other - Reserved
    458 #define _ID_GPS_TRACK_REF 0x000e
    459 #define EXIFTAGID_GPS_TRACK_REF \
    460   CONSTRUCT_TAGID(GPS_TRACK_REF, _ID_GPS_TRACK_REF)
    461 #define EXIFTAGTYPE_GPS_TRACK_REF EXIF_ASCII
    462 // Direction of movement
    463 // Use EXIFTAGTYPE_GPS_TRACK as the exif_tag_type (EXIF_RATIONAL)
    464 // Count should be 1
    465 #define _ID_GPS_TRACK 0x000f
    466 #define EXIFTAGID_GPS_TRACK CONSTRUCT_TAGID(GPS_TRACK, _ID_GPS_TRACK)
    467 #define EXIFTAGTYPE_GPS_TRACK EXIF_RATIONAL
    468 // Reference of direction of image
    469 // Use EXIFTAGTYPE_GPS_IMGDIRECTION_REF as the exif_tag_type (EXIF_ASCII)
    470 // It should be 2 characters long including the null-terminating character.
    471 // "T" - True direction
    472 // "M" - Magnetic direction
    473 // Other - Reserved
    474 #define _ID_GPS_IMGDIRECTION_REF 0x0010
    475 #define EXIFTAGID_GPS_IMGDIRECTION_REF \
    476   CONSTRUCT_TAGID(GPS_IMGDIRECTION_REF, _ID_GPS_IMGDIRECTION_REF)
    477 #define EXIFTAGTYPE_GPS_IMGDIRECTION_REF EXIF_ASCII
    478 // Direction of image
    479 // Use EXIFTAGTYPE_GPS_IMGDIRECTION as the exif_tag_type (EXIF_RATIONAL)
    480 // Count should be 1
    481 #define _ID_GPS_IMGDIRECTION 0x0011
    482 #define EXIFTAGID_GPS_IMGDIRECTION \
    483   CONSTRUCT_TAGID(GPS_IMGDIRECTION, _ID_GPS_IMGDIRECTION)
    484 #define EXIFTAGTYPE_GPS_IMGDIRECTION EXIF_RATIONAL
    485 // Geodetic survey data used
    486 // Use EXIFTAGTYPE_GPS_MAPDATUM as the exif_tag_type (EXIF_ASCII)
    487 // Count can be any
    488 #define _ID_GPS_MAPDATUM 0x0012
    489 #define EXIFTAGID_GPS_MAPDATUM CONSTRUCT_TAGID(GPS_MAPDATUM, _ID_GPS_MAPDATUM)
    490 #define EXIFTAGTYPE_GPS_MAPDATUM EXIF_ASCII
    491 // Reference for latitude of destination
    492 // Use EXIFTAGTYPE_GPS_DESTLATITUDE_REF as the exif_tag_type (EXIF_ASCII)
    493 // It should be 2 characters long including the null-terminating character.
    494 // "N" - North latitude
    495 // "S" - South latitude
    496 // Other - Reserved
    497 #define _ID_GPS_DESTLATITUDE_REF 0x0013
    498 #define EXIFTAGID_GPS_DESTLATITUDE_REF \
    499   CONSTRUCT_TAGID(GPS_DESTLATITUDE_REF, _ID_GPS_DESTLATITUDE_REF)
    500 #define EXIFTAGTYPE_GPS_DESTLATITUDE_REF EXIF_ASCII
    501 // Latitude of destination
    502 // Use EXIFTAGTYPE_GPS_DESTLATITUDE as the exif_tag_type (EXIF_RATIONAL)
    503 // Count should be 3
    504 #define _ID_GPS_DESTLATITUDE 0x0014
    505 #define EXIFTAGID_GPS_DESTLATITUDE \
    506   CONSTRUCT_TAGID(GPS_DESTLATITUDE, _ID_GPS_DESTLATITUDE)
    507 #define EXIFTAGTYPE_GPS_DESTLATITUDE EXIF_RATIONAL
    508 // Reference for longitude of destination
    509 // Use EXIFTAGTYPE_GPS_DESTLONGITUDE_REF as the exif_tag_type (EXIF_ASCII)
    510 // It should be 2 characters long including the null-terminating character.
    511 // "E" - East longitude
    512 // "W" - West longitude
    513 // Other - Reserved
    514 #define _ID_GPS_DESTLONGITUDE_REF 0x0015
    515 #define EXIFTAGID_GPS_DESTLONGITUDE_REF \
    516   CONSTRUCT_TAGID(GPS_DESTLONGITUDE_REF, _ID_GPS_DESTLONGITUDE_REF)
    517 #define EXIFTAGTYPE_GPS_DESTLONGITUDE_REF EXIF_ASCII
    518 // Longitude of destination
    519 // Use EXIFTAGTYPE_GPS_DESTLONGITUDE as the exif_tag_type (EXIF_RATIONAL)
    520 // Count should be 3
    521 #define _ID_GPS_DESTLONGITUDE 0x0016
    522 #define EXIFTAGID_GPS_DESTLONGITUDE CONSTRUCT_TAGID(GPS_DESTLONGITUDE, _ID_GPS_DESTLONGITUDE)
    523 #define EXIFTAGTYPE_GPS_DESTLONGITUDE EXIF_RATIONAL
    524 // Reference for bearing of destination
    525 // Use EXIFTAGTYPE_GPS_DESTBEARING_REF as the exif_tag_type (EXIF_ASCII)
    526 // It should be 2 characters long including the null-terminating character.
    527 // "T" - True direction
    528 // "M" - Magnetic direction
    529 // Other - Reserved
    530 #define _ID_GPS_DESTBEARING_REF 0x0017
    531 #define EXIFTAGID_GPS_DESTBEARING_REF \
    532   CONSTRUCT_TAGID(GPS_DESTBEARING_REF, _ID_GPS_DESTBEARING_REF)
    533 #define EXIFTAGTYPE_GPS_DESTBEARING_REF EXIF_ASCII
    534 // Bearing of destination
    535 // Use EXIFTAGTYPE_GPS_DESTBEARING as the exif_tag_type (EXIF_RATIONAL)
    536 // Count should be 1
    537 #define _ID_GPS_DESTBEARING 0x0018
    538 #define EXIFTAGID_GPS_DESTBEARING \
    539   CONSTRUCT_TAGID(GPS_DESTBEARING, _ID_GPS_DESTBEARING)
    540 #define EXIFTAGTYPE_GPS_DESTBEARING EXIF_RATIONAL
    541 // Reference for distance to destination
    542 // Use EXIFTAGTYPE_GPS_DESTDISTANCE_REF as the exif_tag_type (EXIF_ASCII)
    543 // It should be 2 characters long including the null-terminating character.
    544 // "K" - Kilometers per hour
    545 // "M" - Miles per hour
    546 // "N" - Knots
    547 // Other - Reserved
    548 #define _ID_GPS_DESTDISTANCE_REF 0x0019
    549 #define EXIFTAGID_GPS_DESTDISTANCE_REF \
    550   CONSTRUCT_TAGID(GPS_DESTDISTANCE_REF, _ID_GPS_DESTDISTANCE_REF)
    551 #define EXIFTAGTYPE_GPS_DESTDISTANCE_REF EXIF_ASCII
    552 // Distance to destination
    553 // Use EXIFTAGTYPE_GPS_DESTDISTANCE as the exif_tag_type (EXIF_RATIONAL)
    554 // Count should be 1
    555 #define _ID_GPS_DESTDISTANCE 0x001a
    556 #define EXIFTAGID_GPS_DESTDISTANCE \
    557   CONSTRUCT_TAGID(GPS_DESTDISTANCE, _ID_GPS_DESTDISTANCE)
    558 #define EXIFTAGTYPE_GPS_DESTDISTANCE EXIF_RATIONAL
    559 // Name of GPS processing method
    560 // Use EXIFTAGTYPE_GPS_PROCESSINGMETHOD as the exif_tag_type (EXIF_UNDEFINED)
    561 // Count can be any
    562 #define _ID_GPS_PROCESSINGMETHOD 0x001b
    563 #define EXIFTAGID_GPS_PROCESSINGMETHOD \
    564   CONSTRUCT_TAGID(GPS_PROCESSINGMETHOD, _ID_GPS_PROCESSINGMETHOD)
    565 #define EXIFTAGTYPE_GPS_PROCESSINGMETHOD EXIF_UNDEFINED
    566 // Name of GPS area
    567 // Use EXIFTAGTYPE_GPS_AREAINFORMATION as the exif_tag_type (EXIF_UNDEFINED)
    568 // Count can be any
    569 #define _ID_GPS_AREAINFORMATION 0x001c
    570 #define EXIFTAGID_GPS_AREAINFORMATION \
    571   CONSTRUCT_TAGID(GPS_AREAINFORMATION, _ID_GPS_AREAINFORMATION)
    572 #define EXIFTAGTYPE_GPS_AREAINFORMATION EXIF_UNDEFINED
    573 // GPS date
    574 // Use EXIFTAGTYPE_GPS_DATESTAMP as the exif_tag_type (EXIF_ASCII)
    575 // It should be 11 characters long including the null-terminating character.
    576 #define _ID_GPS_DATESTAMP 0x001d
    577 #define EXIFTAGID_GPS_DATESTAMP \
    578   CONSTRUCT_TAGID(GPS_DATESTAMP, _ID_GPS_DATESTAMP)
    579 #define EXIFTAGTYPE_GPS_DATESTAMP EXIF_ASCII
    580 // GPS differential correction
    581 // Use EXIFTAGTYPE_GPS_DIFFERENTIAL as the exif_tag_type (EXIF_SHORT)
    582 // Count should be 1
    583 // 0 - Measurement without differential correction
    584 // 1 - Differential correction applied
    585 // Other - Reserved
    586 #define _ID_GPS_DIFFERENTIAL 0x001e
    587 #define EXIFTAGID_GPS_DIFFERENTIAL \
    588   CONSTRUCT_TAGID(GPS_DIFFERENTIAL, _ID_GPS_DIFFERENTIAL)
    589 #define EXIFTAGTYPE_GPS_DIFFERENTIAL EXIF_SHORT
    590 // Image width
    591 // Use EXIFTAGTYPE_IMAGE_WIDTH as the exif_tag_type (EXIF_LONG)
    592 // Count should be 1
    593 #define _ID_IMAGE_WIDTH 0x0100
    594 #define EXIFTAGID_IMAGE_WIDTH CONSTRUCT_TAGID(IMAGE_WIDTH, _ID_IMAGE_WIDTH)
    595 #define EXIFTAGTYPE_IMAGE_WIDTH EXIF_LONG
    596 // Image height
    597 // Use EXIFTAGTYPE_IMAGE_LENGTH as the exif_tag_type (EXIF_SHORT_OR_LONG)
    598 // Count should be 1
    599 #define _ID_IMAGE_LENGTH 0x0101
    600 #define EXIFTAGID_IMAGE_LENGTH CONSTRUCT_TAGID(IMAGE_LENGTH, _ID_IMAGE_LENGTH)
    601 #define EXIFTAGTYPE_IMAGE_LENGTH EXIF_LONG
    602 // Number of bits per component
    603 // Use EXIFTAGTYPE_BITS_PER_SAMPLE as the exif_tag_type (EXIF_SHORT)
    604 // Count should be 1
    605 #define _ID_BITS_PER_SAMPLE 0x0102
    606 #define EXIFTAGID_BITS_PER_SAMPLE \
    607   CONSTRUCT_TAGID(BITS_PER_SAMPLE, _ID_BITS_PER_SAMPLE)
    608 #define EXIFTAGTYPE_BITS_PER_SAMPLE EXIF_SHORT
    609 // Compression scheme
    610 // Use EXIFTAGTYPE_COMPRESSION as the exif_tag_type (EXIF_SHORT)
    611 // Count should be 1
    612 #define _ID_COMPRESSION 0x0103
    613 #define EXIFTAGID_COMPRESSION CONSTRUCT_TAGID(COMPRESSION, _ID_COMPRESSION)
    614 #define EXIFTAGTYPE_COMPRESSION EXIF_SHORT
    615 // Pixel composition
    616 // Use EXIFTAGTYPE_PHOTOMETRIC_INTERPRETATION as the exif_tag_type (EXIF_SHORT)
    617 // Count should be 1
    618 #define _ID_PHOTOMETRIC_INTERPRETATION 0x0106
    619 #define EXIFTAGID_PHOTOMETRIC_INTERPRETATION \
    620   CONSTRUCT_TAGID(PHOTOMETRIC_INTERPRETATION, _ID_PHOTOMETRIC_INTERPRETATION)
    621 #define EXIFTAGTYPE_PHOTOMETRIC_INTERPRETATION EXIF_SHORT
    622 
    623 // Thresholding
    624 // Use EXIFTAGTYPE_THRESH_HOLDING as the exif_tag_type (EXIF_SHORT)
    625 //
    626 //1 = No dithering or halftoning
    627 //2 = Ordered dither or halftone
    628 //3 = Randomized dither
    629 #define _ID_THRESH_HOLDING 0x0107
    630 #define EXIFTAGID_THRESH_HOLDING \
    631   CONSTRUCT_TAGID(THRESH_HOLDING, _ID_THRESH_HOLDING)
    632 #define EXIFTAGTYPE_THRESH_HOLDING EXIF_SHORT
    633 
    634 // Cell Width
    635 // Use EXIFTAGTYPE_CELL_WIDTH as the exif_tag_type (EXIF_SHORT)
    636 //
    637 #define _ID_CELL_WIDTH 0x0108
    638 #define EXIFTAGID_CELL_WIDTH CONSTRUCT_TAGID(CELL_WIDTH, _ID_CELL_WIDTH)
    639 #define EXIFTAGTYPE_CELL_WIDTH EXIF_SHORT
    640 // Cell Height
    641 // Use EXIFTAGTYPE_CELL_HEIGHT as the exif_tag_type (EXIF_SHORT)
    642 // Count should be 1
    643 #define _ID_CELL_HEIGHT 0x0109
    644 #define EXIFTAGID_CELL_HEIGHT CONSTRUCT_TAGID(CELL_HEIGHT, _ID_CELL_HEIGHT)
    645 #define EXIFTAGTYPE_CELL_HEIGHT EXIF_SHORT
    646 // Fill Order
    647 // Use EXIFTAGTYPE_FILL_ORDER as the exif_tag_type (EXIF_SHORT)
    648 // 	1 = Normal
    649 //  2 = Reversed
    650 #define _ID_FILL_ORDER 0x010A
    651 #define EXIFTAGID_FILL_ORDER CONSTRUCT_TAGID(FILL_ORDER, _ID_FILL_ORDER)
    652 #define EXIFTAGTYPE_FILL_ORDER EXIF_SHORT
    653 
    654 // DOCUMENT NAME
    655 // Use EXIFTAGTYPE_DOCUMENT_NAME as the exif_tag_type (EXIF_ASCII)
    656 //
    657 #define _ID_DOCUMENT_NAME 0x010D
    658 #define EXIFTAGID_DOCUMENT_NAME CONSTRUCT_TAGID(DOCUMENT_NAME, _ID_DOCUMENT_NAME)
    659 #define EXIFTAGTYPE_DOCUMENT_NAME EXIF_ASCII
    660 
    661 // Image title
    662 // Use EXIFTAGTYPE_IMAGE_DESCRIPTION as the exif_tag_type (EXIF_ASCII)
    663 // Count can be any
    664 #define _ID_IMAGE_DESCRIPTION 0x010e
    665 #define EXIFTAGID_IMAGE_DESCRIPTION \
    666   CONSTRUCT_TAGID(IMAGE_DESCRIPTION, _ID_IMAGE_DESCRIPTION)
    667 #define EXIFTAGTYPE_IMAGE_DESCRIPTION EXIF_ASCII
    668 // Image input equipment manufacturer
    669 // Use EXIFTAGTYPE_MAKE as the exif_tag_type (EXIF_ASCII)
    670 // Count can be any
    671 #define _ID_MAKE 0x010f
    672 #define EXIFTAGID_MAKE CONSTRUCT_TAGID(MAKE, _ID_MAKE)
    673 #define EXIFTAGTYPE_MAKE EXIF_ASCII
    674 // Image input equipment model
    675 // Use EXIFTAGTYPE_MODEL as the exif_tag_type (EXIF_ASCII)
    676 // Count can be any
    677 #define _ID_MODEL 0x0110
    678 #define EXIFTAGID_MODEL CONSTRUCT_TAGID(MODEL, _ID_MODEL)
    679 #define EXIFTAGTYPE_MODEL EXIF_ASCII
    680 // Image data location
    681 // Use EXIFTAGTYPE_STRIP_OFFSETS as the exif_tag_type (EXIF_LONG)
    682 // Count = StripsPerImage                    when PlanarConfiguration = 1
    683 //       = SamplesPerPixel * StripsPerImage  when PlanarConfiguration = 2
    684 #define _ID_STRIP_OFFSETS 0x0111
    685 #define EXIFTAGID_STRIP_OFFSETS \
    686   CONSTRUCT_TAGID(STRIP_OFFSETS, _ID_STRIP_OFFSETS)
    687 #define EXIFTAGTYPE_STRIP_OFFSETS EXIF_LONG
    688 // Orientation of image
    689 // Use EXIFTAGTYPE_ORIENTATION as the exif_tag_type (EXIF_SHORT)
    690 // Count should be 1
    691 #define _ID_ORIENTATION 0x0112
    692 #define EXIFTAGID_ORIENTATION CONSTRUCT_TAGID(ORIENTATION, _ID_ORIENTATION)
    693 #define EXIFTAGTYPE_ORIENTATION EXIF_SHORT
    694 // Number of components
    695 // Use EXIFTAGTYPE_SAMPLES_PER_PIXEL as the exif_tag_type (EXIF_SHORT)
    696 // Count should be 1
    697 #define _ID_SAMPLES_PER_PIXEL 0x0115
    698 #define EXIFTAGID_SAMPLES_PER_PIXEL \
    699   CONSTRUCT_TAGID(SAMPLES_PER_PIXEL, _ID_SAMPLES_PER_PIXEL)
    700 #define EXIFTAGTYPE_SAMPLES_PER_PIXEL EXIF_SHORT
    701 // Number of rows per strip
    702 // Use EXIFTAGTYPE_ROWS_PER_STRIP as the exif_tag_type (EXIF_LONG)
    703 // Count should be 1
    704 #define _ID_ROWS_PER_STRIP 0x0116
    705 #define EXIFTAGID_ROWS_PER_STRIP \
    706   CONSTRUCT_TAGID(ROWS_PER_STRIP, _ID_ROWS_PER_STRIP)
    707 #define EXIFTAGTYPE_ROWS_PER_STRIP EXIF_LONG
    708 // Bytes per compressed strip
    709 // Use EXIFTAGTYPE_STRIP_BYTE_COUNTS as the exif_tag_type (EXIF_LONG)
    710 // Count = StripsPerImage                    when PlanarConfiguration = 1
    711 //       = SamplesPerPixel * StripsPerImage  when PlanarConfiguration = 2
    712 #define _ID_STRIP_BYTE_COUNTS 0x0117
    713 #define EXIFTAGID_STRIP_BYTE_COUNTS \
    714   CONSTRUCT_TAGID(STRIP_BYTE_COUNTS, _ID_STRIP_BYTE_COUNTS)
    715 #define EXIFTAGTYPE_STRIP_BYTE_COUNTS EXIF_LONG
    716 // MinSampleValue
    717 // Use EXIFTAGTYPE_MIN_SAMPLE_VALUE as the exif_tag_type (EXIF_SHORT)
    718 #define _ID_MIN_SAMPLE_VALUE 0x0118
    719 #define EXIFTAGID_MIN_SAMPLE_VALUE  \
    720   CONSTRUCT_TAGID(MIN_SAMPLE_VALUE, _ID_MIN_SAMPLE_VALUE)
    721 #define EXIFTAGTYPE_MIN_SAMPLE_VALUE EXIF_SHORT
    722 // MaxSampleValue
    723 // Use EXIFTAGTYPE_MAX_SAMPLE_VALUE as the exif_tag_type (EXIF_SHORT)
    724 #define _ID_MAX_SAMPLE_VALUE 0x0119
    725 #define EXIFTAGID_MAX_SAMPLE_VALUE CONSTRUCT_TAGID(MAX_SAMPLE_VALUE, _ID_MAX_SAMPLE_VALUE)
    726 #define EXIFTAGTYPE_MAX_SAMPLE_VALUE EXIF_SHORT
    727 
    728 // Image resolution in width direction
    729 // Use EXIFTAGTYPE_X_RESOLUTION as the exif_tag_type (EXIF_RATIONAL)
    730 // Count should be 1
    731 #define _ID_X_RESOLUTION 0x011a
    732 #define EXIFTAGID_X_RESOLUTION \
    733   CONSTRUCT_TAGID(X_RESOLUTION, _ID_X_RESOLUTION)
    734 #define EXIFTAGTYPE_X_RESOLUTION EXIF_RATIONAL
    735 // Image resolution in height direction
    736 // Use EXIFTAGTYPE_Y_RESOLUTION as the exif_tag_type (EXIF_RATIONAL)
    737 // Count should be 1
    738 #define _ID_Y_RESOLUTION 0x011b
    739 #define EXIFTAGID_Y_RESOLUTION \
    740   CONSTRUCT_TAGID(Y_RESOLUTION, _ID_Y_RESOLUTION)
    741 #define EXIFTAGTYPE_Y_RESOLUTION EXIF_RATIONAL
    742 // Image data arrangement
    743 // Use EXIFTAGTYPE_PLANAR_CONFIGURATION as the exif_tag_type (EXIF_SHORT)
    744 // Count should be 1
    745 #define _ID_PLANAR_CONFIGURATION 0x011c
    746 #define EXIFTAGID_PLANAR_CONFIGURATION \
    747   CONSTRUCT_TAGID(PLANAR_CONFIGURATION, _ID_PLANAR_CONFIGURATION)
    748 #define EXIFTAGTYPE_PLANAR_CONFIGURATION EXIF_SHORT
    749 // PageName
    750 // Use EXIFTAGTYPE_PAGE_NAME as the exif_tag_type (EXIF_ASCII)
    751 // Count should be 1
    752 #define _ID_PAGE_NAME 0x011d
    753 #define EXIFTAGID_PAGE_NAME CONSTRUCT_TAGID(PAGE_NAME, _ID_PAGE_NAME)
    754 #define EXIFTAGTYPE_PAGE_NAME EXIF_ASCII
    755 // XPosition
    756 // Use EXIFTAGTYPE_X_POSITION as the exif_tag_type (EXIF_RATIONAL)
    757 //
    758 #define _ID_X_POSITION 0x011e
    759 #define EXIFTAGID_X_POSITION CONSTRUCT_TAGID(X_POSITION, _ID_X_POSITION)
    760 #define EXIFTAGTYPE_X_POSITION EXIF_RATIONAL
    761 // YPosition
    762 // Use EXIFTAGTYPE_Y_POSITION as the exif_tag_type (EXIF_RATIONAL)
    763 //
    764 #define _ID_Y_POSITION 0x011f
    765 #define EXIFTAGID_Y_POSITION CONSTRUCT_TAGID(Y_POSITION, _ID_Y_POSITION)
    766 #define EXIFTAGTYPE_Y_POSITION EXIF_RATIONAL
    767 
    768 // FREE_OFFSET
    769 // Use EXIFTAGTYPE_FREE_OFFSET as the exif_tag_type (EXIF_LONG)
    770 //
    771 #define _ID_FREE_OFFSET 0x0120
    772 #define EXIFTAGID_FREE_OFFSET CONSTRUCT_TAGID(FREE_OFFSET, _ID_FREE_OFFSET)
    773 #define EXIFTAGTYPE_FREE_OFFSET EXIF_LONG
    774 // FREE_BYTE_COUNTS
    775 // Use EXIFTAGTYPE_FREE_BYTE_COUNTS as the exif_tag_type (EXIF_LONG)
    776 //
    777 #define _ID_FREE_BYTE_COUNTS 0x0121
    778 #define EXIFTAGID_FREE_BYTE_COUNTS \
    779   CONSTRUCT_TAGID(FREE_BYTE_COUNTS, _ID_FREE_BYTE_COUNTS)
    780 #define EXIFTAGTYPE_FREE_BYTE_COUNTS EXIF_LONG
    781 
    782 // GrayResponseUnit
    783 // Use EXIFTAGTYPE_GRAY_RESPONSE_UNIT as the exif_tag_type (EXIF_SHORT)
    784 //
    785 #define _ID_GRAY_RESPONSE_UNIT 0x0122
    786 #define EXIFTAGID_GRAY_RESPONSE_UNIT \
    787   CONSTRUCT_TAGID(GRAY_RESPONSE_UNIT, _ID_GRAY_RESPONSE_UNIT)
    788 #define EXIFTAGTYPE_GRAY_RESPONSE_UNIT EXIF_SHORT
    789 // GrayResponseCurve
    790 // Use EXIFTAGTYPE_GRAY_RESPONSE_CURVE  as the exif_tag_type (EXIF_SHORT)
    791 //
    792 #define _ID_GRAY_RESPONSE_CURVE 0x0123
    793 #define EXIFTAGID_GRAY_RESPONSE_CURVE \
    794   CONSTRUCT_TAGID(GRAY_RESPONSE_CURVE , _ID_GRAY_RESPONSE_CURVE )
    795 #define EXIFTAGTYPE_GRAY_RESPONSE_CURVE EXIF_SHORT
    796 
    797 // T4_OPTION
    798 // Use EXIFTAGTYPE_T4_OPTION as the exif_tag_type (EXIF_LONG)
    799 //
    800 #define _ID_T4_OPTION  0x0124
    801 #define EXIFTAGID_T4_OPTION CONSTRUCT_TAGID(T4_OPTION, _ID_T4_OPTION)
    802 #define EXIFTAGTYPE_T4_OPTION EXIF_LONG
    803 // T6_OPTION
    804 // Use EXIFTAGTYPE_T6_OPTION as the exif_tag_type (EXIF_LONG)
    805 //
    806 #define _ID_T6_OPTION 0x0125
    807 #define EXIFTAGID_T6_OPTION CONSTRUCT_TAGID(T6_OPTION, _ID_T6_OPTION)
    808 #define EXIFTAGTYPE_T6_OPTION EXIF_LONG
    809 
    810 // Unit of X and Y resolution
    811 // Use EXIFTAGTYPE_RESOLUTION_UNIT as the exif_tag_type (EXIF_SHORT)
    812 // Count should be 1
    813 #define _ID_RESOLUTION_UNIT 0x0128
    814 #define EXIFTAGID_RESOLUTION_UNIT \
    815   CONSTRUCT_TAGID(RESOLUTION_UNIT, _ID_RESOLUTION_UNIT)
    816 #define EXIFTAGTYPE_RESOLUTION_UNIT EXIF_SHORT
    817 
    818 // Page Number
    819 // Use EXIFTAGTYPE_PAGE_NUMBER  as the exif_tag_type (EXIF_SHORT)
    820 // Count should be 1
    821 #define _ID_PAGE_NUMBER 0x0129
    822 #define EXIFTAGID_PAGE_NUMBER CONSTRUCT_TAGID(PAGE_NUMBER, _ID_PAGE_NUMBER)
    823 #define EXIFTAGTYPE_PAGE_NUMBER EXIF_SHORT
    824 // Transfer function
    825 // Use EXIFTAGTYPE_TRANSFER_FUNCTION as the exif_tag_type (EXIF_SHORT)
    826 // Count should be 3*256
    827 #define _ID_TRANSFER_FUNCTION 0x012d
    828 #define EXIFTAGID_TRANSFER_FUNCTION \
    829   CONSTRUCT_TAGID(TRANSFER_FUNCTION, _ID_TRANSFER_FUNCTION)
    830 #define EXIFTAGTYPE_TRANSFER_FUNCTION EXIF_SHORT
    831 // Software used
    832 // Use EXIFTAGTYPE_SOFTWARE as the exif_tag_type (EXIF_ASCII)
    833 // Count can be any
    834 #define _ID_SOFTWARE 0x0131
    835 #define EXIFTAGID_SOFTWARE CONSTRUCT_TAGID(SOFTWARE, _ID_SOFTWARE)
    836 #define EXIFTAGTYPE_SOFTWARE EXIF_ASCII
    837 // File change date and time
    838 // Use EXIFTAGTYPE_DATE_TIME as the exif_tag_type (EXIF_ASCII)
    839 // Count should be 20
    840 #define _ID_DATE_TIME 0x0132
    841 #define EXIFTAGID_DATE_TIME CONSTRUCT_TAGID(DATE_TIME, _ID_DATE_TIME)
    842 #define EXIFTAGTYPE_DATE_TIME EXIF_ASCII
    843 // ARTIST, person who created this image
    844 // Use EXIFTAGTYPE_ARTIST as the exif_tag_type (EXIF_ASCII)
    845 // Count can be any
    846 #define _ID_ARTIST 0x013b
    847 #define EXIFTAGID_ARTIST CONSTRUCT_TAGID(ARTIST, _ID_ARTIST)
    848 #define EXIFTAGTYPE_ARTIST EXIF_ASCII
    849 // Host Computer Name
    850 // Use EXIFTAGTYPE_HOST_COMPUTER as the exif_tag_type (EXIF_ASCII)
    851 // Count can be any
    852 #define _ID_HOST_COMPUTER 0x013c
    853 #define EXIFTAGID_HOST_COMPUTER \
    854   CONSTRUCT_TAGID(HOST_COMPUTER , _ID_HOST_COMPUTER )
    855 #define EXIFTAGTYPE_HOST_COMPUTER EXIF_ASCII
    856 // Predictor
    857 // Use EXIFTAGTYPE_PREDICTOR as the exif_tag_type (EXIF_SHORT)
    858 // Count can be any
    859 #define _ID_PREDICTOR 0x013d
    860 #define EXIFTAGID_PREDICTOR CONSTRUCT_TAGID(PREDICTOR , _ID_PREDICTOR )
    861 #define EXIFTAGTYPE_PREDICTOR EXIF_SHORT
    862 // White point chromaticity
    863 // Use EXIFTAGTYPE_WHITE_POINT as the exif_tag_type (EXIF_RATIONAL)
    864 // Count should be 2
    865 #define _ID_WHITE_POINT 0x013e
    866 #define EXIFTAGID_WHITE_POINT CONSTRUCT_TAGID(WHITE_POINT, _ID_WHITE_POINT)
    867 #define EXIFTAGTYPE_WHITE_POINT EXIF_RATIONAL
    868 // Chromaticities of primaries
    869 // Use EXIFTAGTYPE_PRIMARY_CHROMATICITIES as the exif_tag_type (EXIF_RATIONAL)
    870 // Count should be 6
    871 #define _ID_PRIMARY_CHROMATICITIES 0x013f
    872 #define EXIFTAGID_PRIMARY_CHROMATICITIES \
    873   CONSTRUCT_TAGID(PRIMARY_CHROMATICITIES, _ID_PRIMARY_CHROMATICITIES)
    874 #define EXIFTAGTYPE_PRIMARY_CHROMATICITIES EXIF_RATIONAL
    875 
    876 // COLOR_MAP
    877 // Use EXIFTAGTYPE_COLOR_MAP as the exif_tag_type (EXIF_SHORT)
    878 // Count should be 6
    879 #define _ID_COLOR_MAP 0x0140
    880 #define EXIFTAGID_COLOR_MAP CONSTRUCT_TAGID(COLOR_MAP, _ID_COLOR_MAP)
    881 #define EXIFTAGTYPE_COLOR_MAP EXIF_SHORT
    882 // HALFTONE_HINTS
    883 // Use EXIFTAGTYPE_HALFTONE_HINTS as the exif_tag_type (EXIF_SHORT)
    884 // Count should be 6
    885 #define _ID_HALFTONE_HINTS 0x0141
    886 #define EXIFTAGID_HALFTONE_HINTS \
    887   CONSTRUCT_TAGID(HALFTONE_HINTS, _ID_HALFTONE_HINTS)
    888 #define EXIFTAGTYPE_HALFTONE_HINTS EXIF_SHORT
    889 
    890 // TILE_WIDTH
    891 // Use EXIFTAGTYPE_TILE_WIDTH as the exif_tag_type (EXIF_LONG)
    892 // Count should be 6
    893 #define _ID_TILE_WIDTH 0x0142
    894 #define EXIFTAGID_TILE_WIDTH CONSTRUCT_TAGID(TILE_WIDTH, _ID_TILE_WIDTH)
    895 #define EXIFTAGTYPE_TILE_WIDTH EXIF_LONG
    896 // TILE_LENGTH
    897 // Use EXIFTAGTYPE_TILE_LENGTH  as the exif_tag_type (EXIF_LONG)
    898 // Count should be 6
    899 #define _ID_TILE_LENGTH 0x0143
    900 #define EXIFTAGID_TILE_LENGTH CONSTRUCT_TAGID(TILE_LENGTH , _ID_TILE_LENGTH )
    901 #define EXIFTAGTYPE_TILE_LENGTH EXIF_LONG
    902 // TILE_OFFSET
    903 // Use EXIFTAGTYPE_TILE_OFFSET as the exif_tag_type (EXIF_LONG)
    904 //
    905 #define _ID_TILE_OFFSET 0x0144
    906 #define EXIFTAGID_TILE_OFFSET CONSTRUCT_TAGID(TILE_OFFSET , _ID_TILE_OFFSET )
    907 #define EXIFTAGTYPE_TILE_OFFSET EXIF_LONG
    908 // tile Byte Counts
    909 // Use EXIFTAGTYPE_TILE_OFFSET as the exif_tag_type (EXIF_LONG)
    910 //
    911 #define _ID_TILE_BYTE_COUNTS 0x0145
    912 #define EXIFTAGID_TILE_BYTE_COUNTS  \
    913   CONSTRUCT_TAGID(TILE_BYTE_COUNTS  , _ID_TILE_BYTE_COUNTS  )
    914 #define EXIFTAGTYPE_TILE_BYTE_COUNTS EXIF_LONG
    915 
    916 // INK_SET
    917 // Use EXIFTAGTYPE_TILE_LENGTH  as the exif_tag_type (EXIF_SHORT)
    918 // Count should be 6
    919 #define _ID_INK_SET 0x014c
    920 #define EXIFTAGID_INK_SET CONSTRUCT_TAGID(INK_SET , _ID_INK_SET )
    921 #define EXIFTAGTYPE_INK_SET EXIF_SHORT
    922 // INK_NAMES
    923 // Use EXIFTAGTYPE_INK_NAMES  as the exif_tag_type (EXIF_ASCII)
    924 // Count should be 6
    925 #define _ID_INK_NAMES 0x014D
    926 #define EXIFTAGID_INK_NAMES CONSTRUCT_TAGID(INK_NAMES , _ID_INK_NAMES)
    927 #define EXIFTAGTYPE_INK_NAMES EXIF_ASCII
    928 // NUMBER_OF_INKS
    929 // Use EXIFTAGTYPE_NUMBER_OF_INKS  as the exif_tag_type (EXIF_SHORT)
    930 // Count should be 6
    931 #define _ID_NUMBER_OF_INKS 0x014e
    932 #define EXIFTAGID_NUMBER_OF_INKS \
    933   CONSTRUCT_TAGID(NUMBER_OF_INKS , _ID_NUMBER_OF_INKS )
    934 #define EXIFTAGTYPE_NUMBER_OF_INKS EXIF_SHORT
    935 
    936 // DOT_RANGE
    937 // Use EXIFTAGTYPE_DOT_RANGE  as the exif_tag_type (EXIF_ASCII)
    938 // Count should be 6
    939 #define _ID_DOT_RANGE 0x0150
    940 #define EXIFTAGID_DOT_RANGE CONSTRUCT_TAGID(DOT_RANGE , _ID_DOT_RANGE )
    941 #define EXIFTAGTYPE_DOT_RANGE EXIF_ASCII
    942 
    943 // TARGET_PRINTER
    944 // Use EXIFTAGTYPE_TARGET_PRINTER  as the exif_tag_type (EXIF_ASCII)
    945 // Count should be 6
    946 #define _ID_TARGET_PRINTER 0x0151
    947 #define EXIFTAGID_TARGET_PRINTER \
    948   CONSTRUCT_TAGID(TARGET_PRINTER , _ID_TARGET_PRINTER)
    949 #define EXIFTAGTYPE_TARGET_PRINTER EXIF_ASCII
    950 // EXTRA_SAMPLES
    951 // Use EXIFTAGTYPE_EXTRA_SAMPLES as the exif_tag_type (EXIF_SHORT)
    952 // Count should be 6
    953 #define _ID_EXTRA_SAMPLES 0x0152
    954 #define EXIFTAGID_EXTRA_SAMPLES \
    955   CONSTRUCT_TAGID(EXTRA_SAMPLES , _ID_EXTRA_SAMPLES )
    956 #define EXIFTAGTYPE_EXTRA_SAMPLES EXIF_SHORT
    957 
    958 // SAMPLE_FORMAT
    959 // Use EXIFTAGTYPE_SAMPLE_FORMAT  as the exif_tag_type (EXIF_SHORT)
    960 // Count should be 6
    961 #define _ID_SAMPLE_FORMAT 0x0153
    962 #define EXIFTAGID_SAMPLE_FORMAT \
    963   CONSTRUCT_TAGID(SAMPLE_FORMAT , _ID_SAMPLE_FORMAT )
    964 #define EXIFTAGTYPE_SAMPLE_FORMAT EXIF_SHORT
    965 
    966 // Table of values that extends the range of the transfer function.
    967 // Use EXIFTAGTYPE_TRANSFER_RANGE as the exif_tag_type (EXIF_SHORT)
    968 // Count should be 6
    969 #define _ID_TRANSFER_RANGE 0x0156
    970 #define EXIFTAGID_TRANSFER_RANGE \
    971   CONSTRUCT_TAGID(TRANSFER_RANGE , _ID_TRANSFER_RANGE )
    972 #define EXIFTAGTYPE_TRANSFER_RANGE EXIF_SHORT
    973 
    974 // JPEG compression process.
    975 // Use EXIFTAGTYPE_JPEG_PROC as the exif_tag_type (EXIF_SHORT)
    976 //
    977 #define _ID_JPEG_PROC 0x0200
    978 #define EXIFTAGID_JPEG_PROC CONSTRUCT_TAGID(JPEG_PROC , _ID_JPEG_PROC )
    979 #define EXIFTAGTYPE_JPEG_PROC EXIF_SHORT
    980 
    981 
    982 // Offset to JPEG SOI
    983 // Use EXIFTAGTYPE_JPEG_INTERCHANGE_FORMAT as the exif_tag_type (EXIF_LONG)
    984 // Count is undefined
    985 #define _ID_JPEG_INTERCHANGE_FORMAT 0x0201
    986 #define EXIFTAGID_JPEG_INTERCHANGE_FORMAT \
    987   CONSTRUCT_TAGID(JPEG_INTERCHANGE_FORMAT, _ID_JPEG_INTERCHANGE_FORMAT)
    988 #define EXIFTAGTYPE_JPEG_INTERCHANGE_FORMAT EXIF_LONG
    989 // Bytes of JPEG data
    990 // Use EXIFTAGTYPE_JPEG_INTERCHANGE_FORMAT_LENGTH as the exif_tag_type (EXIF_LONG)
    991 // Count is undefined
    992 #define _ID_JPEG_INTERCHANGE_FORMAT_LENGTH 0x0202
    993 #define EXIFTAGID_JPEG_INTERCHANGE_FORMAT_LENGTH \
    994   CONSTRUCT_TAGID(JPEG_INTERCHANGE_FORMAT_LENGTH, \
    995   _ID_JPEG_INTERCHANGE_FORMAT_LENGTH)
    996 #define EXIFTAGTYPE_JPEG_INTERCHANGE_FORMAT_LENGTH EXIF_LONG
    997 
    998 // Length of the restart interval.
    999 // Use EXIFTAGTYPE_JPEG_RESTART_INTERVAL as the exif_tag_type (EXIF_SHORT)
   1000 // Count is undefined
   1001 #define _ID_JPEG_RESTART_INTERVAL 0x0203
   1002 #define EXIFTAGID_JPEG_RESTART_INTERVAL \
   1003   CONSTRUCT_TAGID(JPEG_RESTART_INTERVAL, _ID_JPEG_RESTART_INTERVAL)
   1004 #define EXIFTAGTYPE_JPEG_RESTART_INTERVAL EXIF_SHORT
   1005 
   1006 // JPEGLosslessPredictors
   1007 // Use EXIFTAGTYPE_JPEG_LOSSLESS_PREDICTORS as the exif_tag_type (EXIF_SHORT)
   1008 // Count is undefined
   1009 #define _ID_JPEG_LOSSLESS_PREDICTORS 0x0205
   1010 #define EXIFTAGID_JPEG_LOSSLESS_PREDICTORS  \
   1011   CONSTRUCT_TAGID(JPEG_LOSSLESS_PREDICTORS, _ID_JPEG_LOSSLESS_PREDICTORS)
   1012 #define EXIFTAGTYPE_JPEG_LOSSLESS_PREDICTORS EXIF_SHORT
   1013 
   1014 // JPEGPointTransforms
   1015 // Use EXIFTAGTYPE_JPEG_POINT_TRANSFORMS as the exif_tag_type (EXIF_SHORT)
   1016 // Count is undefined
   1017 #define _ID_JPEG_POINT_TRANSFORMS 0x0206
   1018 #define EXIFTAGID_JPEG_POINT_TRANSFORMS  \
   1019   CONSTRUCT_TAGID(JPEG_POINT_TRANSFORMS, _ID_JPEG_POINT_TRANSFORMS)
   1020 #define EXIFTAGTYPE_JPEG_POINT_TRANSFORMS EXIF_SHORT
   1021 
   1022 // JPEG_Q_TABLES
   1023 // Use EXIFTAGTYPE_JPEG_Q_TABLES as the exif_tag_type (EXIF_LONG)
   1024 // Count is undefined
   1025 #define _ID_JPEG_Q_TABLES 0x0207
   1026 #define EXIFTAGID_JPEG_Q_TABLES \
   1027   CONSTRUCT_TAGID(JPEG_Q_TABLES, _ID_JPEG_Q_TABLES)
   1028 #define EXIFTAGTYPE_JPEG_Q_TABLES EXIF_LONG
   1029 // JPEG_DC_TABLES
   1030 // Use EXIFTAGTYPE_JPEG_DC_TABLES as the exif_tag_type (EXIF_LONG)
   1031 // Count is undefined
   1032 #define _ID_JPEG_DC_TABLES 0x0208
   1033 #define EXIFTAGID_JPEG_DC_TABLES \
   1034   CONSTRUCT_TAGID(JPEG_DC_TABLES, _ID_JPEG_DC_TABLES)
   1035 #define EXIFTAGTYPE_JPEG_DC_TABLES EXIF_LONG
   1036 // JPEG_AC_TABLES
   1037 // Use EXIFTAGTYPE_JPEG_AC_TABLES as the exif_tag_type (EXIF_LONG)
   1038 // Count is undefined
   1039 #define _ID_JPEG_AC_TABLES 0x0209
   1040 #define EXIFTAGID_JPEG_AC_TABLES \
   1041   CONSTRUCT_TAGID(JPEG_AC_TABLES, _ID_JPEG_AC_TABLES)
   1042 #define EXIFTAGTYPE_JPEG_AC_TABLES EXIF_LONG
   1043 
   1044 // Color space transformation matrix coefficients
   1045 // Use EXIFTAGTYPE_YCBCR_COEFFICIENTS as the exif_tag_type (EXIF_RATIONAL)
   1046 // Count should be 3
   1047 #define _ID_YCBCR_COEFFICIENTS 0x0211
   1048 #define EXIFTAGID_YCBCR_COEFFICIENTS \
   1049   CONSTRUCT_TAGID(YCBCR_COEFFICIENTS, _ID_YCBCR_COEFFICIENTS)
   1050 #define EXIFTAGTYPE_YCBCR_COEFFICIENTS EXIF_RATIONAL
   1051 // Subsampling ratio of Y to C
   1052 // Use EXIFTAGTYPE_YCBCR_SUB_SAMPLING as the exif_tag_type (EXIF_SHORT)
   1053 // Count should be 2
   1054 #define _ID_YCBCR_SUB_SAMPLING 0x0212
   1055 #define EXIFTAGID_YCBCR_SUB_SAMPLING  \
   1056   CONSTRUCT_TAGID(YCBCR_SUB_SAMPLING, _ID_YCBCR_SUB_SAMPLING)
   1057 #define EXIFTAGTYPE_YCBCR_SUB_SAMPLING EXIF_SHORT
   1058 // Y and C positioning
   1059 // Use EXIFTAGTYPE_YCBCR_POSITIONING as the exif_tag_type (EXIF_SHORT)
   1060 // Count should be 1
   1061 #define _ID_YCBCR_POSITIONING 0x0213
   1062 #define EXIFTAGID_YCBCR_POSITIONING  \
   1063   CONSTRUCT_TAGID(YCBCR_POSITIONING, _ID_YCBCR_POSITIONING)
   1064 #define EXIFTAGTYPE_YCBCR_POSITIONING EXIF_SHORT
   1065 // Pair of black and white reference values
   1066 // Use EXIFTAGTYPE_REFERENCE_BLACK_WHITE as the exif_tag_type (EXIF_RATIONAL)
   1067 // Count should be 6
   1068 #define _ID_REFERENCE_BLACK_WHITE 0x0214
   1069 #define EXIFTAGID_REFERENCE_BLACK_WHITE \
   1070   CONSTRUCT_TAGID(REFERENCE_BLACK_WHITE, _ID_REFERENCE_BLACK_WHITE)
   1071 #define EXIFTAGTYPE_REFERENCE_BLACK_WHITE EXIF_RATIONAL
   1072 // GAMMA
   1073 // Use EXIFTAGTYPE_GAMMA as the exif_tag_type (EXIF_RATIONAL)
   1074 // Count should be 6
   1075 #define _ID_GAMMA 0x0301
   1076 #define EXIFTAGID_GAMMA CONSTRUCT_TAGID(GAMMA, _ID_GAMMA)
   1077 #define EXIFTAGTYPE_GAMMA EXIF_RATIONAL
   1078 // Null-terminated character string that identifies an ICC profile.
   1079 // Use EXIFTAGTYPE_ICC_PROFILE_DESCRIPTOR as the exif_tag_type (EXIF_ASCII)
   1080 // Count should be 6
   1081 #define _ID_ICC_PROFILE_DESCRIPTOR 0x0302
   1082 #define EXIFTAGID_ICC_PROFILE_DESCRIPTOR \
   1083   CONSTRUCT_TAGID(ICC_PROFILE_DESCRIPTOR, _ID_ICC_PROFILE_DESCRIPTOR)
   1084 #define EXIFTAGTYPE_ICC_PROFILE_DESCRIPTOR EXIF_ASCII
   1085 // SRGB_RENDERING_INTENT
   1086 // Use EXIFTAGTYPE_SRGB_RENDERING_INTENT as the exif_tag_type (EXIF_BYTE)
   1087 // Count should be 6
   1088 #define _ID_SRGB_RENDERING_INTENT 0x0303
   1089 #define EXIFTAGID_SRGB_RENDERING_INTENT \
   1090   CONSTRUCT_TAGID(SRGB_RENDERING_INTENT, _ID_SRGB_RENDERING_INTENT)
   1091 #define EXIFTAGTYPE_SRGB_RENDERING_INTENT EXIF_BYTE
   1092 
   1093 // Null-terminated character string that specifies the title of the image.
   1094 // Use EXIFTAGTYPE_IMAGE_TITLE as the exif_tag_type (EXIF_ASCII		)
   1095 //
   1096 #define _ID_IMAGE_TITLE 0x0320
   1097 #define EXIFTAGID_IMAGE_TITLE CONSTRUCT_TAGID(IMAGE_TITLE, _ID_IMAGE_TITLE)
   1098 #define EXIFTAGTYPE_IMAGE_TITLE EXIF_ASCII
   1099 
   1100 // Copyright holder
   1101 // Use EXIFTAGTYPE_COPYRIGHT as the exif_tag_type (EXIF_ASCII)
   1102 // Count can be any
   1103 #define _ID_COPYRIGHT 0x8298
   1104 #define EXIFTAGID_COPYRIGHT CONSTRUCT_TAGID(COPYRIGHT, _ID_COPYRIGHT)
   1105 #define EXIFTAGTYPE_COPYRIGHT EXIF_ASCII
   1106 // Old Subfile Type
   1107 // Use EXIFTAGTYPE_NEW_SUBFILE_TYPE as the exif_tag_type (EXIF_SHORT)
   1108 // Count can be any
   1109 #define _ID_NEW_SUBFILE_TYPE 0x00fe
   1110 #define EXIFTAGID_NEW_SUBFILE_TYPE \
   1111   CONSTRUCT_TAGID(NEW_SUBFILE_TYPE, _ID_NEW_SUBFILE_TYPE)
   1112 #define EXIFTAGTYPE_NEW_SUBFILE_TYPE EXIF_SHORT
   1113 
   1114 // New Subfile Type
   1115 // Use EXIFTAGTYPE_NEW_SUBFILE_TYPE as the exif_tag_type (EXIF_LONG)
   1116 // Count can be any
   1117 #define _ID_SUBFILE_TYPE 0x00ff
   1118 #define EXIFTAGID_SUBFILE_TYPE CONSTRUCT_TAGID(SUBFILE_TYPE, _ID_SUBFILE_TYPE)
   1119 #define EXIFTAGTYPE_SUBFILE_TYPE EXIF_LONG
   1120 
   1121 // Image width (of thumbnail)
   1122 // Use EXIFTAGTYPE_TN_IMAGE_WIDTH as the exif_tag_type (EXIF_LONG)
   1123 // Count should be 1
   1124 #define _ID_TN_IMAGE_WIDTH 0x0100
   1125 #define EXIFTAGID_TN_IMAGE_WIDTH \
   1126   CONSTRUCT_TAGID(TN_IMAGE_WIDTH, _ID_TN_IMAGE_WIDTH)
   1127 #define EXIFTAGTYPE_TN_IMAGE_WIDTH EXIF_LONG
   1128 // Image height (of thumbnail)
   1129 // Use EXIFTAGTYPE_TN_IMAGE_LENGTH as the exif_tag_type (EXIF_SHORT_OR_LONG)
   1130 // Count should be 1
   1131 #define _ID_TN_IMAGE_LENGTH 0x0101
   1132 #define EXIFTAGID_TN_IMAGE_LENGTH \
   1133   CONSTRUCT_TAGID(TN_IMAGE_LENGTH, _ID_TN_IMAGE_LENGTH)
   1134 #define EXIFTAGTYPE_TN_IMAGE_LENGTH EXIF_LONG
   1135 // Number of bits per component (of thumbnail)
   1136 // Use EXIFTAGTYPE_TN_BITS_PER_SAMPLE as the exif_tag_type (EXIF_SHORT)
   1137 // Count should be 1
   1138 #define _ID_TN_BITS_PER_SAMPLE 0x0102
   1139 #define EXIFTAGID_TN_BITS_PER_SAMPLE \
   1140   CONSTRUCT_TAGID(TN_BITS_PER_SAMPLE, _ID_TN_BITS_PER_SAMPLE)
   1141 #define EXIFTAGTYPE_TN_BITS_PER_SAMPLE EXIF_SHORT
   1142 // Compression scheme (of thumbnail)
   1143 // Use EXIFTAGTYPE_TN_COMPRESSION as the exif_tag_type (EXIF_SHORT)
   1144 // Count should be 1
   1145 #define _ID_TN_COMPRESSION 0x0103
   1146 #define EXIFTAGID_TN_COMPRESSION \
   1147   CONSTRUCT_TAGID(TN_COMPRESSION, _ID_TN_COMPRESSION)
   1148 #define EXIFTAGTYPE_TN_COMPRESSION EXIF_SHORT
   1149 // Pixel composition (of thumbnail)
   1150 // Use EXIFTAGTYPE_TN_PHOTOMETRIC_INTERPRETATION as the
   1151 // exif_tag_type (EXIF_SHORT)
   1152 // Count should be 1
   1153 #define _ID_TN_PHOTOMETRIC_INTERPRETATION 0x0106
   1154 #define EXIFTAGID_TN_PHOTOMETRIC_INTERPRETATION \
   1155   CONSTRUCT_TAGID(TN_PHOTOMETRIC_INTERPRETATION, \
   1156   _ID_TN_PHOTOMETRIC_INTERPRETATION)
   1157 #define EXIFTAGTYPE_TN_PHOTOMETRIC_INTERPRETATION EXIF_SHORT
   1158 // Image title (of thumbnail)
   1159 // Use EXIFTAGTYPE_TN_IMAGE_DESCRIPTION as the exif_tag_type (EXIF_ASCII)
   1160 // Count can be any
   1161 #define _ID_TN_IMAGE_DESCRIPTION 0x010e
   1162 #define EXIFTAGID_TN_IMAGE_DESCRIPTION \
   1163   CONSTRUCT_TAGID(TN_IMAGE_DESCRIPTION, _ID_TN_IMAGE_DESCRIPTION)
   1164 #define EXIFTAGTYPE_TN_IMAGE_DESCRIPTION EXIF_ASCII
   1165 // Image input equipment manufacturer (of thumbnail)
   1166 // Use EXIFTAGTYPE_TN_MAKE as the exif_tag_type (EXIF_ASCII)
   1167 // Count can be any
   1168 #define _ID_TN_MAKE 0x010f
   1169 #define EXIFTAGID_TN_MAKE CONSTRUCT_TAGID(TN_MAKE, _ID_TN_MAKE)
   1170 #define EXIFTAGTYPE_TN_MAKE EXIF_ASCII
   1171 // Image input equipment model (of thumbnail)
   1172 // Use EXIFTAGTYPE_TN_MODEL as the exif_tag_type (EXIF_ASCII)
   1173 // Count can be any
   1174 #define _ID_TN_MODEL 0x0110
   1175 #define EXIFTAGID_TN_MODEL CONSTRUCT_TAGID(TN_MODEL, _ID_TN_MODEL)
   1176 #define EXIFTAGTYPE_TN_MODEL EXIF_ASCII
   1177 // Image data location (of thumbnail)
   1178 // Use EXIFTAGTYPE_TN_STRIP_OFFSETS as the exif_tag_type (EXIF_LONG)
   1179 // Count = StripsPerImage                    when PlanarConfiguration = 1
   1180 //       = SamplesPerPixel * StripsPerImage  when PlanarConfiguration = 2
   1181 #define _ID_TN_STRIP_OFFSETS 0x0111
   1182 #define EXIFTAGID_TN_STRIP_OFFSETS \
   1183   CONSTRUCT_TAGID(STRIP_TN_OFFSETS, _ID_TN_STRIP_OFFSETS)
   1184 #define EXIFTAGTYPE_TN_STRIP_OFFSETS EXIF_LONG
   1185 // Orientation of image (of thumbnail)
   1186 // Use EXIFTAGTYPE_TN_ORIENTATION as the exif_tag_type (EXIF_SHORT)
   1187 // Count should be 1
   1188 #define _ID_TN_ORIENTATION 0x0112
   1189 #define EXIFTAGID_TN_ORIENTATION \
   1190   CONSTRUCT_TAGID(TN_ORIENTATION, _ID_TN_ORIENTATION)
   1191 #define EXIFTAGTYPE_TN_ORIENTATION EXIF_SHORT
   1192 // Number of components (of thumbnail)
   1193 // Use EXIFTAGTYPE_TN_SAMPLES_PER_PIXEL as the exif_tag_type (EXIF_SHORT)
   1194 // Count should be 1
   1195 #define _ID_TN_SAMPLES_PER_PIXEL 0x0115
   1196 #define EXIFTAGID_TN_SAMPLES_PER_PIXEL \
   1197   CONSTRUCT_TAGID(TN_SAMPLES_PER_PIXEL, _ID_TN_SAMPLES_PER_PIXEL)
   1198 #define EXIFTAGTYPE_TN_SAMPLES_PER_PIXEL EXIF_SHORT
   1199 // Number of rows per strip (of thumbnail)
   1200 // Use EXIFTAGTYPE_TN_ROWS_PER_STRIP as the exif_tag_type (EXIF_LONG)
   1201 // Count should be 1
   1202 #define _ID_TN_ROWS_PER_STRIP 0x0116
   1203 #define EXIFTAGID_TN_ROWS_PER_STRIP \
   1204   CONSTRUCT_TAGID(TN_ROWS_PER_STRIP, _ID_TN_ROWS_PER_STRIP)
   1205 #define EXIFTAGTYPE_TN_ROWS_PER_STRIP EXIF_LONG
   1206 // Bytes per compressed strip (of thumbnail)
   1207 // Use EXIFTAGTYPE_TN_STRIP_BYTE_COUNTS as the exif_tag_type (EXIF_LONG)
   1208 // Count = StripsPerImage                    when PlanarConfiguration = 1
   1209 //       = SamplesPerPixel * StripsPerImage  when PlanarConfiguration = 2
   1210 #define _ID_TN_STRIP_BYTE_COUNTS 0x0117
   1211 #define EXIFTAGID_TN_STRIP_BYTE_COUNTS \
   1212   CONSTRUCT_TAGID(TN_STRIP_BYTE_COUNTS, _ID_TN_STRIP_BYTE_COUNTS)
   1213 #define EXIFTAGTYPE_TN_STRIP_BYTE_COUNTS EXIF_LONG
   1214 // Image resolution in width direction (of thumbnail)
   1215 // Use EXIFTAGTYPE_TN_X_RESOLUTION as the exif_tag_type (EXIF_RATIONAL)
   1216 // Count should be 1
   1217 #define _ID_TN_X_RESOLUTION 0x011a
   1218 #define EXIFTAGID_TN_X_RESOLUTION \
   1219   CONSTRUCT_TAGID(TN_X_RESOLUTION, _ID_TN_X_RESOLUTION)
   1220 #define EXIFTAGTYPE_TN_X_RESOLUTION EXIF_RATIONAL
   1221 // Image resolution in height direction  (of thumbnail)
   1222 // Use EXIFTAGTYPE_TN_Y_RESOLUTION as the exif_tag_type (EXIF_RATIONAL)
   1223 // Count should be 1
   1224 #define _ID_TN_Y_RESOLUTION 0x011b
   1225 #define EXIFTAGID_TN_Y_RESOLUTION \
   1226   CONSTRUCT_TAGID(TN_Y_RESOLUTION, _ID_TN_Y_RESOLUTION)
   1227 #define EXIFTAGTYPE_TN_Y_RESOLUTION EXIF_RATIONAL
   1228 // Image data arrangement (of thumbnail)
   1229 // Use EXIFTAGTYPE_TN_PLANAR_CONFIGURATION as the exif_tag_type (EXIF_SHORT)
   1230 // Count should be 1
   1231 #define _ID_TN_PLANAR_CONFIGURATION 0x011c
   1232 #define EXIFTAGID_TN_PLANAR_CONFIGURATION \
   1233   CONSTRUCT_TAGID(TN_PLANAR_CONFIGURATION, _ID_TN_PLANAR_CONFIGURATION)
   1234 #define EXIFTAGTYPE_TN_PLANAR_CONFIGURATION EXIF_SHORT
   1235 // Unit of X and Y resolution (of thumbnail)
   1236 // Use EXIFTAGTYPE_TN_RESOLUTION_UNIT as the exif_tag_type (EXIF_SHORT)
   1237 // Count should be 1
   1238 #define _ID_TN_RESOLUTION_UNIT 0x128
   1239 #define EXIFTAGID_TN_RESOLUTION_UNIT \
   1240   CONSTRUCT_TAGID(TN_RESOLUTION_UNIT, _ID_TN_RESOLUTION_UNIT)
   1241 #define EXIFTAGTYPE_TN_RESOLUTION_UNIT EXIF_SHORT
   1242 // Transfer function (of thumbnail)
   1243 // Use EXIFTAGTYPE_TN_TRANSFER_FUNCTION as the exif_tag_type (EXIF_SHORT)
   1244 // Count should be 3*256
   1245 #define _ID_TN_TRANSFER_FUNCTION 0x012d
   1246 #define EXIFTAGID_TN_TRANSFER_FUNCTION \
   1247   CONSTRUCT_TAGID(TN_TRANSFER_FUNCTION, _ID_TN_TRANSFER_FUNCTION)
   1248 #define EXIFTAGTYPE_TN_TRANSFER_FUNCTION EXIF_SHORT
   1249 // Software used (of thumbnail)
   1250 // Use EXIFTAGTYPE_TN_SOFTWARE as the exif_tag_type (EXIF_ASCII)
   1251 // Count can be any
   1252 #define _ID_TN_SOFTWARE 0x0131
   1253 #define EXIFTAGID_TN_SOFTWARE CONSTRUCT_TAGID(TN_SOFTWARE, _ID_TN_SOFTWARE)
   1254 #define EXIFTAGTYPE_TN_SOFTWARE EXIF_ASCII
   1255 // File change date and time (of thumbnail)
   1256 // Use EXIFTAGTYPE_TN_DATE_TIME as the exif_tag_type (EXIF_ASCII)
   1257 // Count should be 20
   1258 #define _ID_TN_DATE_TIME 0x0132
   1259 #define EXIFTAGID_TN_DATE_TIME CONSTRUCT_TAGID(TN_DATE_TIME, _ID_TN_DATE_TIME)
   1260 #define EXIFTAGTYPE_TN_DATE_TIME EXIF_ASCII
   1261 // ARTIST, person who created this image (of thumbnail)
   1262 // Use EXIFTAGTYPE_TN_ARTIST as the exif_tag_type (EXIF_ASCII)
   1263 // Count can be any
   1264 #define _ID_TN_ARTIST 0x013b
   1265 #define EXIFTAGID_TN_ARTIST CONSTRUCT_TAGID(TN_ARTIST, _ID_TN_ARTIST)
   1266 #define EXIFTAGTYPE_TN_ARTIST EXIF_ASCII
   1267 // White point chromaticity (of thumbnail)
   1268 // Use EXIFTAGTYPE_TN_WHITE_POINT as the exif_tag_type (EXIF_RATIONAL)
   1269 // Count should be 2
   1270 #define _ID_TN_WHITE_POINT 0x013e
   1271 #define EXIFTAGID_TN_WHITE_POINT \
   1272   CONSTRUCT_TAGID(TN_WHITE_POINT, _ID_TN_WHITE_POINT)
   1273 #define EXIFTAGTYPE_TN_WHITE_POINT EXIF_RATIONAL
   1274 // Chromaticities of primaries (of thumbnail)
   1275 // Use EXIFTAGTYPE_TN_PRIMARY_CHROMATICITIES as the exif_tag_type (EXIF_RATIONAL)
   1276 // Count should be 6
   1277 #define _ID_TN_PRIMARY_CHROMATICITIES 0x013f
   1278 #define EXIFTAGID_TN_PRIMARY_CHROMATICITIES \
   1279   CONSTRUCT_TAGID(TN_PRIMARY_CHROMATICITIES, _ID_TN_PRIMARY_CHROMATICITIES)
   1280 #define EXIFTAGTYPE_TN_PRIMARY_CHROMATICITIES EXIF_RATIONAL
   1281 // Offset to JPEG SOI (of thumbnail)
   1282 // Use EXIFTAGTYPE_TN_JPEGINTERCHANGE_FORMAT as the exif_tag_type (EXIF_LONG)
   1283 // Count is undefined
   1284 #define _ID_TN_JPEGINTERCHANGE_FORMAT 0x0201
   1285 #define EXIFTAGID_TN_JPEGINTERCHANGE_FORMAT \
   1286   CONSTRUCT_TAGID(TN_JPEGINTERCHANGE_FORMAT, _ID_TN_JPEGINTERCHANGE_FORMAT)
   1287 #define EXIFTAGTYPE_TN_JPEGINTERCHANGE_FORMAT EXIF_LONG
   1288 // Bytes of JPEG data (of thumbnail)
   1289 // Use EXIFTAGTYPE_TN_JPEGINTERCHANGE_FORMAT_L as the exif_tag_type (EXIF_LONG)
   1290 // Count is undefined
   1291 #define _ID_TN_JPEGINTERCHANGE_FORMAT_L 0x0202
   1292 #define EXIFTAGID_TN_JPEGINTERCHANGE_FORMAT_L \
   1293   CONSTRUCT_TAGID(TN_JPEGINTERCHANGE_FORMAT_L, _ID_TN_JPEGINTERCHANGE_FORMAT_L)
   1294 #define EXIFTAGTYPE_TN_JPEGINTERCHANGE_FORMAT_L EXIF_LONG
   1295 // Color space transformation matrix coefficients (of thumbnail)
   1296 // Use EXIFTAGTYPE_TN_YCBCR_COEFFICIENTS as the exif_tag_type (EXIF_RATIONAL)
   1297 // Count should be 3
   1298 #define _ID_TN_YCBCR_COEFFICIENTS 0x0211
   1299 #define EXIFTAGID_TN_YCBCR_COEFFICIENTS \
   1300   CONSTRUCT_TAGID(TN_YCBCR_COEFFICIENTS, _ID_TN_YCBCR_COEFFICIENTS)
   1301 #define EXIFTAGTYPE_TN_YCBCR_COEFFICIENTS EXIF_RATIONAL
   1302 // Subsampling ratio of Y to C (of thumbnail)
   1303 // Use EXIFTAGTYPE_TN_YCBCR_SUB_SAMPLING as the exif_tag_type (EXIF_SHORT)
   1304 // Count should be 2
   1305 #define _ID_TN_YCBCR_SUB_SAMPLING 0x0212
   1306 #define EXIFTAGID_TN_YCBCR_SUB_SAMPLING \
   1307   CONSTRUCT_TAGID(TN_YCBCR_SUB_SAMPLING, _ID_TN_YCBCR_SUB_SAMPLING)
   1308 #define EXIFTAGTYPE_TN_YCBCR_SUB_SAMPLING EXIF_SHORT
   1309 // Y and C positioning (of thumbnail)
   1310 // Use EXIFTAGTYPE_TN_YCBCR_POSITIONING as the exif_tag_type (EXIF_SHORT)
   1311 // Count should be 1
   1312 #define _ID_TN_YCBCR_POSITIONING 0x0213
   1313 #define EXIFTAGID_TN_YCBCR_POSITIONING \
   1314   CONSTRUCT_TAGID(TN_YCBCR_POSITIONING, _ID_TN_YCBCR_POSITIONING)
   1315 #define EXIFTAGTYPE_TN_YCBCR_POSITIONING    EXIF_SHORT
   1316 // Pair of black and white reference values (of thumbnail)
   1317 // Use EXIFTAGTYPE_TN_REFERENCE_BLACK_WHITE as the exif_tag_type (EXIF_RATIONAL)
   1318 // Count should be 6
   1319 #define _ID_TN_REFERENCE_BLACK_WHITE 0x0214
   1320 #define EXIFTAGID_TN_REFERENCE_BLACK_WHITE \
   1321   CONSTRUCT_TAGID(TN_REFERENCE_BLACK_WHITE, _ID_TN_REFERENCE_BLACK_WHITE)
   1322 #define EXIFTAGTYPE_TN_REFERENCE_BLACK_WHITE EXIF_RATIONAL
   1323 // Copyright holder (of thumbnail)
   1324 // Use EXIFTAGTYPE_TN_COPYRIGHT as the exif_tag_type (EXIF_ASCII)
   1325 // Count can be any
   1326 #define _ID_TN_COPYRIGHT 0x8298
   1327 #define EXIFTAGID_TN_COPYRIGHT CONSTRUCT_TAGID(TN_COPYRIGHT, _ID_TN_COPYRIGHT)
   1328 #define EXIFTAGTYPE_TN_COPYRIGHT EXIF_ASCII
   1329 // Exposure time
   1330 // Use EXIFTAGTYPE_EXPOSURE_TIME as the exif_tag_type (EXIF_RATIONAL)
   1331 // Count should be 1
   1332 #define _ID_EXPOSURE_TIME 0x829a
   1333 #define EXIFTAGID_EXPOSURE_TIME \
   1334   CONSTRUCT_TAGID(EXPOSURE_TIME, _ID_EXPOSURE_TIME)
   1335 #define EXIFTAGTYPE_EXPOSURE_TIME EXIF_RATIONAL
   1336 // F number
   1337 // Use EXIFTAGTYPE_F_NUMBER as the exif_tag_type (EXIF_RATIONAL)
   1338 // Count should be 1
   1339 #define _ID_F_NUMBER 0x829d
   1340 #define EXIFTAGID_F_NUMBER \
   1341   CONSTRUCT_TAGID(F_NUMBER, _ID_F_NUMBER)
   1342 #define EXIFTAGTYPE_F_NUMBER EXIF_RATIONAL
   1343 // Exif IFD pointer (NOT INTENDED to be accessible to user)
   1344 #define _ID_EXIF_IFD_PTR 0x8769
   1345 #define EXIFTAGID_EXIF_IFD_PTR \
   1346   CONSTRUCT_TAGID(EXIF_IFD, _ID_EXIF_IFD_PTR)
   1347 #define EXIFTAGTYPE_EXIF_IFD_PTR EXIF_LONG
   1348 
   1349 // ICC_PROFILE (NOT INTENDED to be accessible to user)
   1350 #define _ID_ICC_PROFILE 0x8773
   1351 #define EXIFTAGID_ICC_PROFILE CONSTRUCT_TAGID(ICC_PROFILE, _ID_ICC_PROFILE)
   1352 #define EXIFTAGTYPE_ICC_PROFILE EXIF_LONG
   1353 // Exposure program
   1354 // Use EXIFTAGTYPE_EXPOSURE_PROGRAM as the exif_tag_type (EXIF_SHORT)
   1355 // Count should be 1
   1356 #define _ID_EXPOSURE_PROGRAM 0x8822
   1357 #define EXIFTAGID_EXPOSURE_PROGRAM \
   1358   CONSTRUCT_TAGID(EXPOSURE_PROGRAM, _ID_EXPOSURE_PROGRAM)
   1359 #define EXIFTAGTYPE_EXPOSURE_PROGRAM EXIF_SHORT
   1360 // Spectral sensitivity
   1361 // Use EXIFTAGTYPE_SPECTRAL_SENSITIVITY as the exif_tag_type (EXIF_ASCII)
   1362 // Count can be any
   1363 #define _ID_SPECTRAL_SENSITIVITY 0x8824
   1364 #define EXIFTAGID_SPECTRAL_SENSITIVITY \
   1365   CONSTRUCT_TAGID(SPECTRAL_SENSITIVITY, _ID_SPECTRAL_SENSITIVITY)
   1366 #define EXIFTAGTYPE_SPECTRAL_SENSITIVITY EXIF_ASCII
   1367 // GPS IFD pointer (NOT INTENDED to be accessible to user)
   1368 #define _ID_GPS_IFD_PTR 0x8825
   1369 #define EXIFTAGID_GPS_IFD_PTR \
   1370   CONSTRUCT_TAGID(GPS_IFD, _ID_GPS_IFD_PTR)
   1371 #define EXIFTAGTYPE_GPS_IFD_PTR EXIF_LONG
   1372 // ISO Speed Rating
   1373 // Use EXIFTAGTYPE_ISO_SPEED_RATING as the exif_tag_type (EXIF_SHORT)
   1374 // Count can be any
   1375 #define _ID_ISO_SPEED_RATING 0x8827
   1376 #define EXIFTAGID_ISO_SPEED_RATING \
   1377   CONSTRUCT_TAGID(ISO_SPEED_RATING, _ID_ISO_SPEED_RATING)
   1378 #define EXIFTAGTYPE_ISO_SPEED_RATING EXIF_SHORT
   1379 // Optoelectric conversion factor
   1380 // Use EXIFTAGTYPE_OECF as the exif_tag_type (EXIF_UNDEFINED)
   1381 // Count can be any
   1382 #define _ID_OECF 0x8828
   1383 #define EXIFTAGID_OECF CONSTRUCT_TAGID(OECF, _ID_OECF)
   1384 #define EXIFTAGTYPE_OECF EXIF_UNDEFINED
   1385 // Exif version
   1386 // Use EXIFTAGTYPE_EXIF_VERSION as the exif_tag_type (EXIF_UNDEFINED)
   1387 // Count should be 4
   1388 #define _ID_EXIF_VERSION 0x9000
   1389 #define EXIFTAGID_EXIF_VERSION \
   1390   CONSTRUCT_TAGID(EXIF_VERSION, _ID_EXIF_VERSION)
   1391 #define EXIFTAGTYPE_EXIF_VERSION EXIF_UNDEFINED
   1392 // Date and time of original data gerneration
   1393 // Use EXIFTAGTYPE_EXIF_DATE_TIME_ORIGINAL as the exif_tag_type (EXIF_ASCII)
   1394 // It should be 20 characters long including the null-terminating character.
   1395 #define _ID_EXIF_DATE_TIME_ORIGINAL 0x9003
   1396 #define EXIFTAGID_EXIF_DATE_TIME_ORIGINAL \
   1397   CONSTRUCT_TAGID(EXIF_DATE_TIME_ORIGINAL, _ID_EXIF_DATE_TIME_ORIGINAL)
   1398 #define EXIFTAGTYPE_EXIF_DATE_TIME_ORIGINAL EXIF_ASCII
   1399 // Date and time of digital data generation
   1400 // Use EXIFTAGTYPE_EXIF_DATE_TIME_DIGITIZED as the exif_tag_type (EXIF_ASCII)
   1401 // It should be 20 characters long including the null-terminating character.
   1402 #define _ID_EXIF_DATE_TIME_DIGITIZED 0x9004
   1403 #define EXIFTAGID_EXIF_DATE_TIME_DIGITIZED \
   1404   CONSTRUCT_TAGID(EXIF_DATE_TIME_DIGITIZED, _ID_EXIF_DATE_TIME_DIGITIZED)
   1405 #define EXIFTAGTYPE_EXIF_DATE_TIME_DIGITIZED EXIF_ASCII
   1406 // Meaning of each component
   1407 // Use EXIFTAGTYPE_EXIF_COMPONENTS_CONFIG as the exif_tag_type (EXIF_UNDEFINED)
   1408 // Count should be 4
   1409 #define _ID_EXIF_COMPONENTS_CONFIG 0x9101
   1410 #define EXIFTAGID_EXIF_COMPONENTS_CONFIG \
   1411   CONSTRUCT_TAGID(EXIF_COMPONENTS_CONFIG, _ID_EXIF_COMPONENTS_CONFIG)
   1412 #define EXIFTAGTYPE_EXIF_COMPONENTS_CONFIG EXIF_UNDEFINED
   1413 // Meaning of Image compression mode
   1414 // Use EXIFTAGTYPE_EXIF_COMPRESSED_BITS_PER_PIXEL as the exif_tag_type (EXIF_RATIONAL)
   1415 // Count should be 1
   1416 #define _ID_EXIF_COMPRESSED_BITS_PER_PIXEL 0x9102
   1417 #define EXIFTAGID_EXIF_COMPRESSED_BITS_PER_PIXEL \
   1418   CONSTRUCT_TAGID(EXIF_COMPRESSED_BITS_PER_PIXEL, _ID_EXIF_COMPRESSED_BITS_PER_PIXEL)
   1419 #define EXIFTAGTYPE_EXIF_COMPRESSED_BITS_PER_PIXEL EXIF_RATIONAL
   1420 // Shutter speed
   1421 // Use EXIFTAGTYPE_SHUTTER_SPEED as the exif_tag_type (EXIF_SRATIONAL)
   1422 // Count should be 1
   1423 #define _ID_SHUTTER_SPEED 0x9201
   1424 #define EXIFTAGID_SHUTTER_SPEED \
   1425   CONSTRUCT_TAGID(SHUTTER_SPEED, _ID_SHUTTER_SPEED)
   1426 #define EXIFTAGTYPE_SHUTTER_SPEED EXIF_SRATIONAL
   1427 // Aperture
   1428 // Use EXIFTAGTYPE_APERTURE as the exif_tag_type (EXIF_RATIONAL)
   1429 // Count should be 1
   1430 #define _ID_APERTURE 0x9202
   1431 #define EXIFTAGID_APERTURE CONSTRUCT_TAGID(APERTURE, _ID_APERTURE)
   1432 #define EXIFTAGTYPE_APERTURE EXIF_RATIONAL
   1433 // Brigthness
   1434 // Use EXIFTAGTYPE_BRIGHTNESS as the exif_tag_type (EXIF_SRATIONAL)
   1435 // Count should be 1
   1436 #define _ID_BRIGHTNESS 0x9203
   1437 #define EXIFTAGID_BRIGHTNESS CONSTRUCT_TAGID(BRIGHTNESS, _ID_BRIGHTNESS)
   1438 #define EXIFTAGTYPE_BRIGHTNESS EXIF_SRATIONAL
   1439 // Exposure bias
   1440 // Use EXIFTAGTYPE_EXPOSURE_BIAS_VALUE as the exif_tag_type (EXIF_SRATIONAL)
   1441 // Count should be 1
   1442 #define _ID_EXPOSURE_BIAS_VALUE 0x9204
   1443 #define EXIFTAGID_EXPOSURE_BIAS_VALUE \
   1444   CONSTRUCT_TAGID(EXPOSURE_BIAS_VALUE, _ID_EXPOSURE_BIAS_VALUE)
   1445 #define EXIFTAGTYPE_EXPOSURE_BIAS_VALUE EXIF_SRATIONAL
   1446 // Maximum lens aperture
   1447 // Use EXIFTAGTYPE_MAX_APERTURE as the exif_tag_type (EXIF_RATIONAL)
   1448 // Count should be 1
   1449 #define _ID_MAX_APERTURE 0x9205
   1450 #define EXIFTAGID_MAX_APERTURE CONSTRUCT_TAGID(MAX_APERTURE, _ID_MAX_APERTURE)
   1451 #define EXIFTAGTYPE_MAX_APERTURE EXIF_RATIONAL
   1452 // Subject distance
   1453 // Use EXIFTAGTYPE_SUBJECT_DISTANCE as the exif_tag_type (EXIF_RATIONAL)
   1454 // Count should be 1
   1455 #define _ID_SUBJECT_DISTANCE 0x9206
   1456 #define EXIFTAGID_SUBJECT_DISTANCE \
   1457   CONSTRUCT_TAGID(SUBJECT_DISTANCE, _ID_SUBJECT_DISTANCE)
   1458 #define EXIFTAGTYPE_SUBJECT_DISTANCE EXIF_RATIONAL
   1459 // Metering mode
   1460 // Use EXIFTAGTYPE_METERING_MODE as the exif_tag_type (EXIF_SHORT)
   1461 // Count should be 1
   1462 #define _ID_METERING_MODE 0x9207
   1463 #define EXIFTAGID_METERING_MODE \
   1464   CONSTRUCT_TAGID(METERING_MODE, _ID_METERING_MODE)
   1465 #define EXIFTAGTYPE_METERING_MODE EXIF_SHORT
   1466 // Light source
   1467 // Use EXIFTAGTYPE_LIGHT_SOURCE as the exif_tag_type (EXIF_SHORT)
   1468 // Count should be 1
   1469 #define _ID_LIGHT_SOURCE 0x9208
   1470 #define EXIFTAGID_LIGHT_SOURCE CONSTRUCT_TAGID(LIGHT_SOURCE, _ID_LIGHT_SOURCE)
   1471 #define EXIFTAGTYPE_LIGHT_SOURCE EXIF_SHORT
   1472 // Flash
   1473 // Use EXIFTAGTYPE_FLASH as the exif_tag_type (EXIF_SHORT)
   1474 // Count should be 1
   1475 #define _ID_FLASH 0x9209
   1476 #define EXIFTAGID_FLASH CONSTRUCT_TAGID(FLASH, _ID_FLASH)
   1477 #define EXIFTAGTYPE_FLASH EXIF_SHORT
   1478 // Lens focal length
   1479 // Use EXIFTAGTYPE_FOCAL_LENGTH as the exif_tag_type (EXIF_RATIONAL)
   1480 // Count should be 1
   1481 #define _ID_FOCAL_LENGTH 0x920a
   1482 #define EXIFTAGID_FOCAL_LENGTH CONSTRUCT_TAGID(FOCAL_LENGTH, _ID_FOCAL_LENGTH)
   1483 #define EXIFTAGTYPE_FOCAL_LENGTH EXIF_RATIONAL
   1484 // Subject area
   1485 // Use EXIFTAGTYPE_SUBJECT_AREA as exif_tag_type (EXIF_SHORT)
   1486 // Count should be 2 or 3 or 4
   1487 #define _ID_SUBJECT_AREA 0x9214
   1488 #define EXIFTAGID_SUBJECT_AREA CONSTRUCT_TAGID(SUBJECT_AREA, _ID_SUBJECT_AREA)
   1489 #define EXIFTAGTYPE_SUBJECT_AREA EXIF_SHORT
   1490 // Maker note
   1491 // Use EXIFTAGTYPE_EXIF_MAKER_NOTE as the exif_tag_type (EXIF_UNDEFINED)
   1492 // Count can be any
   1493 #define _ID_EXIF_MAKER_NOTE 0x927c
   1494 #define EXIFTAGID_EXIF_MAKER_NOTE \
   1495   CONSTRUCT_TAGID(EXIF_MAKER_NOTE, _ID_EXIF_MAKER_NOTE)
   1496 #define EXIFTAGTYPE_EXIF_MAKER_NOTE EXIF_UNDEFINED
   1497 // User comments
   1498 // Use EXIFTAGTYPE_EXIF_USER_COMMENT as the exif_tag_type (EXIF_UNDEFINED)
   1499 // Count can be any
   1500 #define _ID_EXIF_USER_COMMENT 0x9286
   1501 #define EXIFTAGID_EXIF_USER_COMMENT \
   1502   CONSTRUCT_TAGID(EXIF_USER_COMMENT, _ID_EXIF_USER_COMMENT)
   1503 #define EXIFTAGTYPE_EXIF_USER_COMMENT EXIF_UNDEFINED
   1504 // Date time sub-seconds
   1505 // Use EXIFTAGTYPE_SUBSEC_TIME as the exif_tag_type (EXIF_ASCII)
   1506 // Count could be any
   1507 #define _ID_SUBSEC_TIME 0x9290
   1508 #define EXIFTAGID_SUBSEC_TIME CONSTRUCT_TAGID(SUBSEC_TIME, _ID_SUBSEC_TIME)
   1509 #define EXIFTAGTYPE_SEBSEC_TIME EXIF_ASCII
   1510 // Date time original sub-seconds
   1511 // use EXIFTAGTYPE_SUBSEC_TIME_ORIGINAL as the exif_tag_type (EXIF_ASCII)
   1512 // Count could be any
   1513 #define _ID_SUBSEC_TIME_ORIGINAL 0x9291
   1514 #define EXIFTAGID_SUBSEC_TIME_ORIGINAL \
   1515   CONSTRUCT_TAGID(SUBSEC_TIME_ORIGINAL, _ID_SUBSEC_TIME_ORIGINAL)
   1516 #define EXIFTAGTYPE_SUBSEC_TIME_ORIGINAL EXIF_ASCII
   1517 // Date time digitized sub-seconds
   1518 // use EXIFTAGTYPE_SUBSEC_TIME_DIGITIZED as the exif_tag_type (EXIF_ASCII)
   1519 // Count could be any
   1520 #define _ID_SUBSEC_TIME_DIGITIZED 0x9292
   1521 #define EXIFTAGID_SUBSEC_TIME_DIGITIZED \
   1522   CONSTRUCT_TAGID(SUBSEC_TIME_DIGITIZED, _ID_SUBSEC_TIME_DIGITIZED)
   1523 #define EXIFTAGTYPE_SUBSEC_TIME_DIGITIZED EXIF_ASCII
   1524 // Supported Flashpix version
   1525 // Use EXIFTAGTYPE_EXIF_FLASHPIX_VERSION as the exif_tag_type (EXIF_UNDEFINED)
   1526 // Count should be 4
   1527 #define _ID_EXIF_FLASHPIX_VERSION 0xa000
   1528 #define EXIFTAGID_EXIF_FLASHPIX_VERSION \
   1529   CONSTRUCT_TAGID(EXIF_FLASHPIX_VERSION, _ID_EXIF_FLASHPIX_VERSION)
   1530 #define EXIFTAGTYPE_EXIF_FLASHPIX_VERSION EXIF_UNDEFINED
   1531 //  Color space information
   1532 // Use EXIFTAGTYPE_EXIF_COLOR_SPACE as the exif_tag_type (EXIF_SHORT)
   1533 // Count should be 1
   1534 #define _ID_EXIF_COLOR_SPACE 0xa001
   1535 #define EXIFTAGID_EXIF_COLOR_SPACE \
   1536   CONSTRUCT_TAGID(EXIF_COLOR_SPACE, _ID_EXIF_COLOR_SPACE)
   1537 #define EXIFTAGTYPE_EXIF_COLOR_SPACE EXIF_SHORT
   1538 //  Valid image width
   1539 // Use EXIFTAGTYPE_EXIF_PIXEL_X_DIMENSION as the exif_tag_type (EXIF_SHORT)
   1540 // Count should be 1
   1541 #define _ID_EXIF_PIXEL_X_DIMENSION 0xa002
   1542 #define EXIFTAGID_EXIF_PIXEL_X_DIMENSION \
   1543   CONSTRUCT_TAGID(EXIF_PIXEL_X_DIMENSION, _ID_EXIF_PIXEL_X_DIMENSION)
   1544 #define EXIFTAGTYPE_EXIF_PIXEL_X_DIMENSION EXIF_SHORT
   1545 // Valid image height
   1546 // Use EXIFTAGTYPE_EXIF_PIXEL_Y_DIMENSION as the exif_tag_type (EXIF_SHORT)
   1547 // Count should be 1
   1548 #define _ID_EXIF_PIXEL_Y_DIMENSION 0xa003
   1549 #define EXIFTAGID_EXIF_PIXEL_Y_DIMENSION \
   1550   CONSTRUCT_TAGID(EXIF_PIXEL_Y_DIMENSION, _ID_EXIF_PIXEL_Y_DIMENSION)
   1551 #define EXIFTAGTYPE_EXIF_PIXEL_Y_DIMENSION  EXIF_SHORT
   1552 // Related audio file
   1553 // Use EXIFTAGTYPE_EXIF_RELATED_SOUND_FILE as the exif_tag_type (EXIF_ASCII)
   1554 // Count should be 13
   1555 #define _ID_RELATED_SOUND_FILE 0xa004
   1556 #define EXIFTAGID_RELATED_SOUND_FILE \
   1557   CONSTRUCT_TAGID(RELATED_SOUND_FILE, _ID_RELATED_SOUND_FILE)
   1558 #define EXIFTAGTYPE_RELATED_SOUND_FILE EXIF_ASCII
   1559 // Interop IFD pointer (NOT INTENDED to be accessible to user)
   1560 #define _ID_INTEROP_IFD_PTR 0xa005
   1561 #define EXIFTAGID_INTEROP_IFD_PTR CONSTRUCT_TAGID(INTEROP, _ID_INTEROP_IFD_PTR)
   1562 #define EXIFTAGTYPE_INTEROP_IFD_PTR EXIF_LONG
   1563 // Flash energy
   1564 // Use EXIFTAGTYPE_EXIF_FLASH_ENERGY as the exif_tag_type (EXIF_RATIONAL)
   1565 // Count should be 1
   1566 #define _ID_FLASH_ENERGY 0xa20b
   1567 #define EXIFTAGID_FLASH_ENERGY CONSTRUCT_TAGID(FLASH_ENERGY, _ID_FLASH_ENERGY)
   1568 #define EXIFTAGTYPE_FLASH_ENERGY EXIF_RATIONAL
   1569 // Spatial frequency response
   1570 // Use EXIFTAGTYPE_SPATIAL_FREQ_RESPONSE as exif_tag_type (EXIF_UNDEFINED)
   1571 // Count would be any
   1572 #define _ID_SPATIAL_FREQ_RESPONSE 0xa20c
   1573 #define EXIFTAGID_SPATIAL_FREQ_RESPONSE \
   1574   CONSTRUCT_TAGID(SPATIAL_FREQ_RESPONSE, _ID_SPATIAL_FREQ_RESPONSE)
   1575 #define EXIFTAGTYPE_SPATIAL_FREQ_RESPONSE EXIF_UNDEFINED
   1576 // Focal plane x resolution
   1577 // Use EXIFTAGTYPE_FOCAL_PLANE_X_RESOLUTION as exif_tag_type (EXIF_RATIONAL)
   1578 // Count should be 1
   1579 #define _ID_FOCAL_PLANE_X_RESOLUTION 0xa20e
   1580 #define EXIFTAGID_FOCAL_PLANE_X_RESOLUTION \
   1581   CONSTRUCT_TAGID(FOCAL_PLANE_X_RESOLUTION, _ID_FOCAL_PLANE_X_RESOLUTION)
   1582 #define EXIFTAGTYPE_FOCAL_PLANE_X_RESOLUTION EXIF_RATIONAL
   1583 // Focal plane y resolution
   1584 // Use EXIFTAGTYPE_FOCAL_PLANE_Y_RESOLUTION as exif_tag_type (EXIF_RATIONAL)
   1585 // Count should be 1
   1586 #define _ID_FOCAL_PLANE_Y_RESOLUTION 0xa20f
   1587 #define EXIFTAGID_FOCAL_PLANE_Y_RESOLUTION \
   1588   CONSTRUCT_TAGID(FOCAL_PLANE_Y_RESOLUTION, _ID_FOCAL_PLANE_Y_RESOLUTION)
   1589 #define EXIFTAGTYPE_FOCAL_PLANE_Y_RESOLUTION EXIF_RATIONAL
   1590 // Focal plane  resolution unit
   1591 // Use EXIFTAGTYPE_FOCAL_PLANE_RESOLUTION_UNIT as exif_tag_type (EXIF_SHORT)
   1592 // Count should be 1
   1593 #define _ID_FOCAL_PLANE_RESOLUTION_UNIT 0xa210
   1594 #define EXIFTAGID_FOCAL_PLANE_RESOLUTION_UNIT \
   1595   CONSTRUCT_TAGID(FOCAL_PLANE_RESOLUTION_UNIT, _ID_FOCAL_PLANE_RESOLUTION_UNIT)
   1596 #define EXIFTAGTYPE_FOCAL_PLANE_RESOLUTION_UNIT EXIF_SHORT
   1597 // Subject location
   1598 // Use EXIFTAGTYPE_SUBJECT_LOCATION as the exif_tag_type (EXIF_SHORT)
   1599 // Count should be 2
   1600 #define _ID_SUBJECT_LOCATION 0xa214
   1601 #define EXIFTAGID_SUBJECT_LOCATION \
   1602   CONSTRUCT_TAGID(SUBJECT_LOCATION, _ID_SUBJECT_LOCATION)
   1603 #define EXIFTAGTYPE_SUBJECT_LOCATION EXIF_SHORT
   1604 // Exposure index
   1605 // Use EXIFTAGTYPE_EXPOSURE_INDEX as the exif_tag_type (EXIF_RATIONAL)
   1606 // Count should be 1
   1607 #define _ID_EXPOSURE_INDEX 0xa215
   1608 #define EXIFTAGID_EXPOSURE_INDEX \
   1609   CONSTRUCT_TAGID(EXPOSURE_INDEX, _ID_EXPOSURE_INDEX)
   1610 #define EXIFTAGTYPE_EXPOSURE_INDEX EXIF_RATIONAL
   1611 // Sensing method
   1612 // Use EXIFTAGTYPE_SENSING_METHOD as the exif_tag_type (EXIF_SHORT)
   1613 // Count should be 1
   1614 #define _ID_SENSING_METHOD 0xa217
   1615 #define EXIFTAGID_SENSING_METHOD \
   1616   CONSTRUCT_TAGID(SENSING_METHOD, _ID_SENSING_METHOD)
   1617 #define EXIFTAGTYPE_SENSING_METHOD EXIF_SHORT
   1618 // File source
   1619 // Use EXIFTAGTYPE_FILE_SOURCE as the exif_tag_type (EXIF_UNDEFINED)
   1620 // Count should be 1
   1621 #define _ID_FILE_SOURCE 0xa300
   1622 #define EXIFTAGID_FILE_SOURCE CONSTRUCT_TAGID(FILE_SOURCE, _ID_FILE_SOURCE)
   1623 #define EXIFTAGTYPE_FILE_SOURCE EXIF_UNDEFINED
   1624 // Scene type
   1625 // Use EXIFTAGTYPE_SCENE_TYPE as the exif_tag_type (EXIF_UNDEFINED)
   1626 // Count should be 1
   1627 #define _ID_SCENE_TYPE 0xa301
   1628 #define EXIFTAGID_SCENE_TYPE CONSTRUCT_TAGID(SCENE_TYPE, _ID_SCENE_TYPE)
   1629 #define EXIFTAGTYPE_SCENE_TYPE EXIF_UNDEFINED
   1630 // CFA pattern
   1631 // Use EXIFTAGTYPE_CFA_PATTERN as the exif_tag_type (EXIF_UNDEFINED)
   1632 // Count can be any
   1633 #define _ID_CFA_PATTERN 0xa302
   1634 #define EXIFTAGID_CFA_PATTERN CONSTRUCT_TAGID(CFA_PATTERN, _ID_CFA_PATTERN)
   1635 #define EXIFTAGTYPE_CFA_PATTERN EXIF_UNDEFINED
   1636 // Custom image processing
   1637 // Use EXIFTAGTYPE_CUSTOM_RENDERED as the exif_tag_type (EXIF_SHORT)
   1638 // Count should be 1
   1639 #define _ID_CUSTOM_RENDERED 0xa401
   1640 #define EXIFTAGID_CUSTOM_RENDERED \
   1641   CONSTRUCT_TAGID(CUSTOM_RENDERED, _ID_CUSTOM_RENDERED)
   1642 #define EXIFTAGTYPE_CUSTOM_RENDERED EXIF_SHORT
   1643 // Exposure mode
   1644 // Use EXIFTAGTYPE_EXPOSURE_MODE as the exif_tag_type (EXIF_SHORT)
   1645 // Count should be 1
   1646 #define _ID_EXPOSURE_MODE 0xa402
   1647 #define EXIFTAGID_EXPOSURE_MODE \
   1648   CONSTRUCT_TAGID(EXPOSURE_MODE, _ID_EXPOSURE_MODE)
   1649 #define EXIFTAGTYPE_EXPOSURE_MODE EXIF_SHORT
   1650 // White balance
   1651 // Use EXIFTAGTYPE_WHITE_BALANCE as the exif_tag_type (EXIF_SHORT)
   1652 // Count should be 1
   1653 #define _ID_WHITE_BALANCE 0xa403
   1654 #define EXIFTAGID_WHITE_BALANCE \
   1655   CONSTRUCT_TAGID(WHITE_BALANCE, _ID_WHITE_BALANCE)
   1656 #define EXIFTAGTYPE_WHITE_BALANCE EXIF_SHORT
   1657 // Digital zoom ratio
   1658 // Use EXIFTAGTYPE_DIGITAL_ZOOM_RATIO as the exif_tag_type (EXIF_RATIONAL)
   1659 // Count should be 1
   1660 #define _ID_DIGITAL_ZOOM_RATIO 0xa404
   1661 #define EXIFTAGID_DIGITAL_ZOOM_RATIO \
   1662   CONSTRUCT_TAGID(DIGITAL_ZOOM_RATIO, _ID_DIGITAL_ZOOM_RATIO)
   1663 #define EXIFTAGTYPE_DIGITAL_ZOOM_RATIO EXIF_RATIONAL
   1664 // Focal length in 35mm film
   1665 // Use EXIFTAGTYPE_FOCAL_LENGTH_35MM as the exif_tag_type (EXIF_SHORT)
   1666 // Count should be 1
   1667 #define _ID_FOCAL_LENGTH_35MM 0xa405
   1668 #define EXIFTAGID_FOCAL_LENGTH_35MM CONSTRUCT_TAGID(FOCAL_LENGTH_35MM, _ID_FOCAL_LENGTH_35MM)
   1669 #define EXIFTAGTYPE_FOCAL_LENGTH_35MM EXIF_SHORT
   1670 // Scene capture type
   1671 // Use EXIFTAGTYPE_SCENE_CAPTURE_TYPE as the exif_tag_type (EXIF_SHORT)
   1672 // Count should be 1
   1673 #define _ID_SCENE_CAPTURE_TYPE 0xa406
   1674 #define EXIFTAGID_SCENE_CAPTURE_TYPE \
   1675   CONSTRUCT_TAGID(SCENE_CAPTURE_TYPE, _ID_SCENE_CAPTURE_TYPE)
   1676 #define EXIFTAGTYPE_SCENE_CAPTURE_TYPE EXIF_SHORT
   1677 // Gain control
   1678 // Use EXIFTAGTYPE_GAIN_CONTROL as the exif_tag_type (EXIF_SHORT)
   1679 // Count should be 1
   1680 #define _ID_GAIN_CONTROL 0xa407
   1681 #define EXIFTAGID_GAIN_CONTROL CONSTRUCT_TAGID(GAIN_CONTROL, _ID_GAIN_CONTROL)
   1682 #define EXIFTAGTYPE_GAIN_CONTROL EXIF_SHORT
   1683 // Contrast
   1684 // Use EXIFTAGTYPE_CONTRAST as the exif_tag_type (EXIF_SHORT)
   1685 // Count should be 1
   1686 #define _ID_CONTRAST 0xa408
   1687 #define EXIFTAGID_CONTRAST CONSTRUCT_TAGID(CONTRAST, _ID_CONTRAST)
   1688 #define EXIFTAGTYPE_CONTRAST EXIF_SHORT
   1689 // Saturation
   1690 // Use EXIFTAGTYPE_SATURATION as the exif_tag_type (EXIF_SHORT)
   1691 // Count should be 1
   1692 #define _ID_SATURATION  0xa409
   1693 #define EXIFTAGID_SATURATION CONSTRUCT_TAGID(SATURATION, _ID_SATURATION)
   1694 #define EXIFTAGTYPE_SATURATION EXIF_SHORT
   1695 // Sharpness
   1696 // Use EXIFTAGTYPE_SHARPNESS as the exif_tag_type (EXIF_SHORT)
   1697 // Count should be 1
   1698 #define _ID_SHARPNESS 0xa40a
   1699 #define EXIFTAGID_SHARPNESS CONSTRUCT_TAGID(SHARPNESS, _ID_SHARPNESS)
   1700 #define EXIFTAGTYPE_SHARPNESS EXIF_SHORT
   1701 // Device settings description
   1702 // Use EXIFTAGID_DEVICE_SETTINGS_DESCRIPTION as exif_tag_type (EXIF_UNDEFINED)
   1703 // Count could be any
   1704 #define _ID_DEVICE_SETTINGS_DESCRIPTION 0xa40b
   1705 #define EXIFTAGID_DEVICE_SETTINGS_DESCRIPTION \
   1706   CONSTRUCT_TAGID(DEVICE_SETTINGS_DESCRIPTION, _ID_DEVICE_SETTINGS_DESCRIPTION)
   1707 #define EXIFTAGTYPE_DEVIC_SETTIGNS_DESCRIPTION EXIF_UNDEFINED
   1708 // Subject distance range
   1709 // Use EXIFTAGTYPE_SUBJECT_DISTANCE_RANGE as the exif_tag_type (EXIF_SHORT)
   1710 // Count should be 1
   1711 #define _ID_SUBJECT_DISTANCE_RANGE 0xa40c
   1712 #define EXIFTAGID_SUBJECT_DISTANCE_RANGE \
   1713   CONSTRUCT_TAGID(SUBJECT_DISTANCE_RANGE, _ID_SUBJECT_DISTANCE_RANGE)
   1714 #define EXIFTAGTYPE_SUBJECT_DISTANCE_RANGE EXIF_SHORT
   1715 // Unique image id
   1716 // Use EXIFTAG_TYPE_IMAGE_UIDas the exif_tag_type (EXIF_ASCII)
   1717 // Count should be 33
   1718 #define _ID_IMAGE_UID 0xa420
   1719 #define EXIFTAGID_IMAGE_UID CONSTRUCT_TAGID(IMAGE_UID, _ID_IMAGE_UID)
   1720 #define EXIFTAGTYPE_IMAGE_UID EXIF_ASCII
   1721 // PIM tag
   1722 // Use EXIFTAGTYPE_PIM_TAG as the exif_tag_type (EXIF_UNDEFINED)
   1723 // Count can be any
   1724 #define _ID_PIM 0xc4a5
   1725 #define EXIFTAGID_PIM_TAG CONSTRUCT_TAGID(PIM, _ID_PIM)
   1726 #define EXIFTAGTYPE_PIM_TAG EXIF_UNDEFINED
   1727 #endif // __QEXIF_H__
   1728 
   1729