16f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/*Copyright (c) 2012, The Linux Foundation. All rights reserved.
26f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
36f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan MalchevRedistribution and use in source and binary forms, with or without
46f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevmodification, are permitted provided that the following conditions are
56f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevmet:
66f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    * Redistributions of source code must retain the above copyright
76f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev      notice, this list of conditions and the following disclaimer.
86f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    * Redistributions in binary form must reproduce the above
96f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev      copyright notice, this list of conditions and the following
106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev      disclaimer in the documentation and/or other materials provided
116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev      with the distribution.
126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    * Neither the name of The Linux Foundation nor the names of its
136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev      contributors may be used to endorse or promote products derived
146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev      from this software without specific prior written permission.
156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan MalchevTHIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan MalchevWARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan MalchevMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan MalchevARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan MalchevBE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan MalchevCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan MalchevSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan MalchevBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan MalchevWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan MalchevOR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan MalchevIF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/
276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#ifndef __QEXIF_H__
306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define __QEXIF_H__
316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#include <stdio.h>
336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/* Exif Info (opaque definition) */
356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevstruct exif_info_t;
366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevtypedef struct exif_info_t * exif_info_obj_t;
376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/* Exif Tag ID */
396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevtypedef uint32_t exif_tag_id_t;
406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/* Exif Rational Data Type */
436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevtypedef struct
446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{
456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    uint32_t  num;    // Numerator
466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    uint32_t  denom;  // Denominator
476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} rat_t;
496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/* Exif Signed Rational Data Type */
516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevtypedef struct
526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{
536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    int32_t  num;    // Numerator
546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    int32_t  denom;  // Denominator
556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} srat_t;
576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/* Exif Tag Data Type */
596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevtypedef enum
606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{
616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    EXIF_BYTE      = 1,
626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    EXIF_ASCII     = 2,
636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    EXIF_SHORT     = 3,
646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    EXIF_LONG      = 4,
656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    EXIF_RATIONAL  = 5,
666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    EXIF_UNDEFINED = 7,
676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    EXIF_SLONG     = 9,
686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    EXIF_SRATIONAL = 10
696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} exif_tag_type_t;
706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/* Exif Tag Entry
726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * Used in exif_set_tag as an input argument and
736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * in exif_get_tag as an output argument. */
746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevtypedef struct
756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{
766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    /* The Data Type of the Tag *
776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev     * Rational, etc */
786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    exif_tag_type_t type;
796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    /* Copy
816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev     * This field is used when a user pass this structure to
826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev     * be stored in an exif_info_t via the exif_set_tag method.
836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev     * The routine would look like this field and decide whether
846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev     * it is necessary to make a copy of the data pointed by this
856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev     * structure (all string and array types).
866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev     * If this field is set to false, only a pointer to the actual
876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev     * data is retained and it is the caller's responsibility to
886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev     * ensure the validity of the data before the exif_info_t object
896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev     * is destroyed.
906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev     */
916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    uint8_t copy;
926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    /* Data count
946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev     * This indicates the number of elements of the data. For example, if
956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev     * the type is EXIF_BYTE and the count is 1, that means the actual data
966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev     * is one byte and is accessible by data._byte. If the type is EXIF_BYTE
976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev     * and the count is more than one, the actual data is contained in an
986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev     * array and is accessible by data._bytes. In case of EXIF_ASCII, it
996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev     * indicates the string length and in case of EXIF_UNDEFINED, it indicates
1006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev     * the length of the array.
1016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev     */
1026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    uint32_t count;
1036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
1046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    /* Data
1056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev     * A union which covers all possible data types. The user should pick
1066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev     * the right field to use depending on the data type and the count.
1076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev     * See in-line comment below.
1086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev     */
1096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    union
1106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    {
1116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev        char      *_ascii;      // EXIF_ASCII (count indicates string length)
1126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev        uint8_t   *_bytes;      // EXIF_BYTE  (count > 1)
1136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev        uint8_t    _byte;       // EXIF_BYTE  (count = 1)
1146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev        uint16_t  *_shorts;     // EXIF_SHORT (count > 1)
1156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev        uint16_t   _short;      // EXIF_SHORT (count = 1)
1166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev        uint32_t  *_longs;      // EXIF_LONG  (count > 1)
1176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev        uint32_t   _long;       // EXIF_LONG  (count = 1)
1186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev        rat_t     *_rats;       // EXIF_RATIONAL  (count > 1)
1196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev        rat_t      _rat;        // EXIF_RATIONAL  (count = 1)
1206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev        uint8_t   *_undefined;  // EXIF_UNDEFINED (count indicates length)
1216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev        int32_t   *_slongs;     // EXIF_SLONG (count > 1)
1226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev        int32_t    _slong;      // EXIF_SLONG (count = 1)
1236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev        srat_t    *_srats;      // EXIF_SRATIONAL (count > 1)
1246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev        srat_t     _srat;       // EXIF_SRATIONAL (count = 1)
1256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
1266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    } data;
1276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
1286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} exif_tag_entry_t;
1296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
1306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/* =======================================================================
1316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev**                          Macro Definitions
1326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev** ======================================================================= */
1336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/* Enum defined to let compiler generate unique offset numbers for different
1346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev * tags - ordering matters! NOT INTENDED to be used by any application. */
1356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchevtypedef enum
1366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev{
1376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    // GPS IFD
1386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_VERSION_ID = 0,
1396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_LATITUDE_REF,
1406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_LATITUDE,
1416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_LONGITUDE_REF,
1426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_LONGITUDE,
1436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_ALTITUDE_REF,
1446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_ALTITUDE,
1456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_TIMESTAMP,
1466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_SATELLITES,
1476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_STATUS,
1486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_MEASUREMODE,
1496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_DOP,
1506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_SPEED_REF,
1516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_SPEED,
1526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_TRACK_REF,
1536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_TRACK,
1546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_IMGDIRECTION_REF,
1556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_IMGDIRECTION,
1566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_MAPDATUM,
1576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_DESTLATITUDE_REF,
1586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_DESTLATITUDE,
1596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_DESTLONGITUDE_REF,
1606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_DESTLONGITUDE,
1616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_DESTBEARING_REF,
1626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_DESTBEARING,
1636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_DESTDISTANCE_REF,
1646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_DESTDISTANCE,
1656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_PROCESSINGMETHOD,
1666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_AREAINFORMATION,
1676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_DATESTAMP,
1686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_DIFFERENTIAL,
1696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
1706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    // TIFF IFD
1716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    NEW_SUBFILE_TYPE,
1726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    SUBFILE_TYPE,
1736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    IMAGE_WIDTH,
1746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    IMAGE_LENGTH,
1756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    BITS_PER_SAMPLE,
1766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    COMPRESSION,
1776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    PHOTOMETRIC_INTERPRETATION,
1786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    THRESH_HOLDING,
1796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    CELL_WIDTH,
1806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    CELL_HEIGHT,
1816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    FILL_ORDER,
1826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    DOCUMENT_NAME,
1836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    IMAGE_DESCRIPTION,
1846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    MAKE,
1856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    MODEL,
1866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    STRIP_OFFSETS,
1876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    ORIENTATION,
1886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    SAMPLES_PER_PIXEL,
1896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    ROWS_PER_STRIP,
1906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    STRIP_BYTE_COUNTS,
1916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    MIN_SAMPLE_VALUE,
1926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    MAX_SAMPLE_VALUE,
1936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    X_RESOLUTION,
1946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    Y_RESOLUTION,
1956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    PLANAR_CONFIGURATION,
1966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    PAGE_NAME,
1976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    X_POSITION,
1986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    Y_POSITION,
1996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    FREE_OFFSET,
2006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    FREE_BYTE_COUNTS,
2016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GRAY_RESPONSE_UNIT,
2026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GRAY_RESPONSE_CURVE,
2036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    T4_OPTION,
2046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    T6_OPTION,
2056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    RESOLUTION_UNIT,
2066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    PAGE_NUMBER,
2076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TRANSFER_FUNCTION,
2086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    SOFTWARE,
2096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    DATE_TIME,
2106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    ARTIST,
2116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    HOST_COMPUTER,
2126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    PREDICTOR,
2136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    WHITE_POINT,
2146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    PRIMARY_CHROMATICITIES,
2156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    COLOR_MAP,
2166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    HALFTONE_HINTS,
2176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TILE_WIDTH,
2186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TILE_LENGTH,
2196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TILE_OFFSET,
2206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TILE_BYTE_COUNTS,
2216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    INK_SET,
2226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    INK_NAMES,
2236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    NUMBER_OF_INKS,
2246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    DOT_RANGE,
2256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TARGET_PRINTER,
2266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    EXTRA_SAMPLES,
2276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    SAMPLE_FORMAT,
2286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TRANSFER_RANGE,
2296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    JPEG_PROC,
2306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    JPEG_INTERCHANGE_FORMAT,
2316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    JPEG_INTERCHANGE_FORMAT_LENGTH,
2326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    JPEG_RESTART_INTERVAL,
2336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    JPEG_LOSSLESS_PREDICTORS,
2346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    JPEG_POINT_TRANSFORMS,
2356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    JPEG_Q_TABLES,
2366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    JPEG_DC_TABLES,
2376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    JPEG_AC_TABLES,
2386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    YCBCR_COEFFICIENTS,
2396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    YCBCR_SUB_SAMPLING,
2406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    YCBCR_POSITIONING,
2416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    REFERENCE_BLACK_WHITE,
2426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GAMMA,
2436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    ICC_PROFILE_DESCRIPTOR,
2446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    SRGB_RENDERING_INTENT,
2456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    IMAGE_TITLE,
2466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    COPYRIGHT,
2476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    EXIF_IFD,
2486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    ICC_PROFILE,
2496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GPS_IFD,
2506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
2516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
2526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    // TIFF IFD (Thumbnail)
2536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TN_IMAGE_WIDTH,
2546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TN_IMAGE_LENGTH,
2556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TN_BITS_PER_SAMPLE,
2566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TN_COMPRESSION,
2576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TN_PHOTOMETRIC_INTERPRETATION,
2586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TN_IMAGE_DESCRIPTION,
2596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TN_MAKE,
2606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TN_MODEL,
2616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TN_STRIP_OFFSETS,
2626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TN_ORIENTATION,
2636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TN_SAMPLES_PER_PIXEL,
2646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TN_ROWS_PER_STRIP,
2656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TN_STRIP_BYTE_COUNTS,
2666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TN_X_RESOLUTION,
2676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TN_Y_RESOLUTION,
2686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TN_PLANAR_CONFIGURATION,
2696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TN_RESOLUTION_UNIT,
2706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TN_TRANSFER_FUNCTION,
2716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TN_SOFTWARE,
2726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TN_DATE_TIME,
2736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TN_ARTIST,
2746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TN_WHITE_POINT,
2756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TN_PRIMARY_CHROMATICITIES,
2766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TN_JPEGINTERCHANGE_FORMAT,
2776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TN_JPEGINTERCHANGE_FORMAT_L,
2786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TN_YCBCR_COEFFICIENTS,
2796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TN_YCBCR_SUB_SAMPLING,
2806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TN_YCBCR_POSITIONING,
2816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TN_REFERENCE_BLACK_WHITE,
2826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    TN_COPYRIGHT,
2836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
2846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    // EXIF IFD
2856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    EXPOSURE_TIME,
2866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    F_NUMBER,
2876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    EXPOSURE_PROGRAM,
2886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    SPECTRAL_SENSITIVITY,
2896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    ISO_SPEED_RATING,
2906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    OECF,
2916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    EXIF_VERSION,
2926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    EXIF_DATE_TIME_ORIGINAL,
2936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    EXIF_DATE_TIME_DIGITIZED,
2946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    EXIF_COMPONENTS_CONFIG,
2956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    EXIF_COMPRESSED_BITS_PER_PIXEL,
2966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    SHUTTER_SPEED,
2976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    APERTURE,
2986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    BRIGHTNESS,
2996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    EXPOSURE_BIAS_VALUE,
3006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    MAX_APERTURE,
3016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    SUBJECT_DISTANCE,
3026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    METERING_MODE,
3036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    LIGHT_SOURCE,
3046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    FLASH,
3056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    FOCAL_LENGTH,
3066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    SUBJECT_AREA,
3076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    EXIF_MAKER_NOTE,
3086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    EXIF_USER_COMMENT,
3096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    SUBSEC_TIME,
3106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    SUBSEC_TIME_ORIGINAL,
3116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    SUBSEC_TIME_DIGITIZED,
3126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    EXIF_FLASHPIX_VERSION,
3136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    EXIF_COLOR_SPACE,
3146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    EXIF_PIXEL_X_DIMENSION,
3156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    EXIF_PIXEL_Y_DIMENSION,
3166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    RELATED_SOUND_FILE,
3176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    INTEROP,
3186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    FLASH_ENERGY,
3196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    SPATIAL_FREQ_RESPONSE,
3206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    FOCAL_PLANE_X_RESOLUTION,
3216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    FOCAL_PLANE_Y_RESOLUTION,
3226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    FOCAL_PLANE_RESOLUTION_UNIT,
3236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    SUBJECT_LOCATION,
3246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    EXPOSURE_INDEX,
3256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    SENSING_METHOD,
3266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    FILE_SOURCE,
3276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    SCENE_TYPE,
3286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    CFA_PATTERN,
3296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    CUSTOM_RENDERED,
3306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    EXPOSURE_MODE,
3316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    WHITE_BALANCE,
3326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    DIGITAL_ZOOM_RATIO,
3336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    FOCAL_LENGTH_35MM,
3346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    SCENE_CAPTURE_TYPE,
3356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    GAIN_CONTROL,
3366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    CONTRAST,
3376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    SATURATION,
3386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    SHARPNESS,
3396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    DEVICE_SETTINGS_DESCRIPTION,
3406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    SUBJECT_DISTANCE_RANGE,
3416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    IMAGE_UID,
3426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    PIM,
3436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
3446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev    EXIF_TAG_MAX_OFFSET
3456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
3466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev} exif_tag_offset_t;
3476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
3486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev/* Below are the supported Tags (ID and structure for their data) */
3496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define CONSTRUCT_TAGID(offset,ID) (offset << 16 | ID)
3506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
3516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// GPS tag version
3526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GPS_VERSION_ID as the exif_tag_type (EXIF_BYTE)
3536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 4
3546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_VERSION_ID 0x0000
3556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_VERSION_ID \
3566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(GPS_VERSION_ID, _ID_GPS_VERSION_ID)
3576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GPS_VERSION_ID EXIF_BYTE
3586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// North or South Latitude
3596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GPS_LATITUDE_REF as the exif_tag_type (EXIF_ASCII)
3606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// It should be 2 characters long including the null-terminating character.
3616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_LATITUDE_REF 0x0001
3626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_LATITUDE_REF \
3636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(GPS_LATITUDE_REF, _ID_GPS_LATITUDE_REF)
3646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GPS_LATITUDE_REF EXIF_ASCII
3656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Latitude
3666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GPS_LATITUDE as the exif_tag_type (EXIF_RATIONAL)
3676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 3
3686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_LATITUDE 0x0002
3696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_LATITUDE CONSTRUCT_TAGID(GPS_LATITUDE, _ID_GPS_LATITUDE)
3706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GPS_LATITUDE EXIF_RATIONAL
3716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// East or West Longitude
3726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GPS_LONGITUDE_REF as the exif_tag_type (EXIF_ASCII)
3736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// It should be 2 characters long including the null-terminating character.
3746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_LONGITUDE_REF 0x0003
3756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_LONGITUDE_REF \
3766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(GPS_LONGITUDE_REF, _ID_GPS_LONGITUDE_REF)
3776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GPS_LONGITUDE_REF EXIF_ASCII
3786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Longitude
3796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GPS_LONGITUDE as the exif_tag_type (EXIF_RATIONAL)
3806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 3
3816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_LONGITUDE 0x0004
3826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_LONGITUDE \
3836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(GPS_LONGITUDE, _ID_GPS_LONGITUDE)
3846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GPS_LONGITUDE EXIF_RATIONAL
3856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Altitude reference
3866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GPS_ALTITUDE_REF as the exif_tag_type (EXIF_BYTE)
3876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_ALTITUDE_REF 0x0005
3886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_ALTITUDE_REF \
3896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(GPS_ALTITUDE_REF, _ID_GPS_ALTITUDE_REF)
3906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GPS_ALTITUDE_REF EXIF_BYTE
3916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Altitude
3926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GPS_ALTITUDE as the exif_tag_type (EXIF_RATIONAL)
3936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_ALTITUDE 0x0006
3946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_ALTITUDE CONSTRUCT_TAGID(GPS_ALTITUDE, _ID_GPS_ALTITUDE)
3956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GPS_ALTITUE EXIF_RATIONAL
3966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// GPS time (atomic clock)
3976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GPS_TIMESTAMP as the exif_tag_type (EXIF_RATIONAL)
3986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 3
3996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_TIMESTAMP 0x0007
4006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_TIMESTAMP \
4016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(GPS_TIMESTAMP, _ID_GPS_TIMESTAMP)
4026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GPS_TIMESTAMP EXIF_RATIONAL
4036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// GPS Satellites
4046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GPS_SATELLITES as the exif_tag_type (EXIF_ASCII)
4056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count can be anything.
4066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_SATELLITES 0x0008
4076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_SATELLITES \
4086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev CONSTRUCT_TAGID(GPS_SATELLITES, _ID_GPS_SATELLITES)
4096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GPS_SATELLITES EXIF_ASCII
4106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// GPS Status
4116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GPS_STATUS as the exif_tag_type (EXIF_ASCII)
4126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// It should be 2 characters long including the null-terminating character.
4136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// "A" - Measurement in progress
4146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// "V" - Measurement Interoperability
4156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Other - Reserved
4166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_STATUS 0x0009
4176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_STATUS CONSTRUCT_TAGID(GPS_STATUS, _ID_GPS_STATUS)
4186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTATTYPE_GPS_STATUS EXIF_ASCII
4196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// GPS Measure Mode
4206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GPS_MEASUREMODE as the exif_tag_type (EXIF_ASCII)
4216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// It should be 2 characters long including the null-terminating character.
4226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// "2" - 2-dimensional measurement
4236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// "3" - 3-dimensional measurement
4246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Other - Reserved
4256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_MEASUREMODE 0x000a
4266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_MEASUREMODE \
4276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(GPS_MEASUREMODE, _ID_GPS_MEASUREMODE)
4286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GPS_MEASUREMODE EXIF_ASCII
4296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// GPS Measurement precision (DOP)
4306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GPS_DOP as the exif_tag_type (EXIF_RATIONAL)
4316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
4326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_DOP 0x000b
4336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_DOP CONSTRUCT_TAGID(GPS_DOP, _ID_GPS_DOP)
4346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GPS_DOP EXIF_RATIONAL
4356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Speed Unit
4366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GPS_SPEED_REF as the exif_tag_type (EXIF_ASCII)
4376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// It should be 2 characters long including the null-terminating character.
4386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// "K" - Kilometers per hour
4396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// "M" - Miles per hour
4406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// "N" - Knots
4416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Other - Reserved
4426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_SPEED_REF 0x000c
4436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_SPEED_REF \
4446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(GPS_SPEED_REF, _ID_GPS_SPEED_REF)
4456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GPS_SPEED_REF EXIF_ASCII
4466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Speed of GPS receiver
4476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GPS_SPEED as the exif_tag_type (EXIF_RATIONAL)
4486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
4496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_SPEED 0x000d
4506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_SPEED CONSTRUCT_TAGID(GPS_SPEED, _ID_GPS_SPEED)
4516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GPS_SPEED EXIF_RATIONAL
4526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Reference of direction of movement
4536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GPS_TRACK_REF as the exif_tag_type (EXIF_ASCII)
4546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// It should be 2 characters long including the null-terminating character.
4556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// "T" - True direction
4566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// "M" - Magnetic direction
4576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Other - Reserved
4586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_TRACK_REF 0x000e
4596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_TRACK_REF \
4606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(GPS_TRACK_REF, _ID_GPS_TRACK_REF)
4616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GPS_TRACK_REF EXIF_ASCII
4626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Direction of movement
4636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GPS_TRACK as the exif_tag_type (EXIF_RATIONAL)
4646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
4656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_TRACK 0x000f
4666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_TRACK CONSTRUCT_TAGID(GPS_TRACK, _ID_GPS_TRACK)
4676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GPS_TRACK EXIF_RATIONAL
4686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Reference of direction of image
4696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GPS_IMGDIRECTION_REF as the exif_tag_type (EXIF_ASCII)
4706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// It should be 2 characters long including the null-terminating character.
4716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// "T" - True direction
4726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// "M" - Magnetic direction
4736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Other - Reserved
4746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_IMGDIRECTION_REF 0x0010
4756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_IMGDIRECTION_REF \
4766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(GPS_IMGDIRECTION_REF, _ID_GPS_IMGDIRECTION_REF)
4776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GPS_IMGDIRECTION_REF EXIF_ASCII
4786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Direction of image
4796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GPS_IMGDIRECTION as the exif_tag_type (EXIF_RATIONAL)
4806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
4816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_IMGDIRECTION 0x0011
4826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_IMGDIRECTION \
4836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(GPS_IMGDIRECTION, _ID_GPS_IMGDIRECTION)
4846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GPS_IMGDIRECTION EXIF_RATIONAL
4856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Geodetic survey data used
4866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GPS_MAPDATUM as the exif_tag_type (EXIF_ASCII)
4876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count can be any
4886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_MAPDATUM 0x0012
4896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_MAPDATUM CONSTRUCT_TAGID(GPS_MAPDATUM, _ID_GPS_MAPDATUM)
4906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GPS_MAPDATUM EXIF_ASCII
4916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Reference for latitude of destination
4926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GPS_DESTLATITUDE_REF as the exif_tag_type (EXIF_ASCII)
4936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// It should be 2 characters long including the null-terminating character.
4946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// "N" - North latitude
4956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// "S" - South latitude
4966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Other - Reserved
4976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_DESTLATITUDE_REF 0x0013
4986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_DESTLATITUDE_REF \
4996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(GPS_DESTLATITUDE_REF, _ID_GPS_DESTLATITUDE_REF)
5006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GPS_DESTLATITUDE_REF EXIF_ASCII
5016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Latitude of destination
5026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GPS_DESTLATITUDE as the exif_tag_type (EXIF_RATIONAL)
5036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 3
5046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_DESTLATITUDE 0x0014
5056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_DESTLATITUDE \
5066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(GPS_DESTLATITUDE, _ID_GPS_DESTLATITUDE)
5076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GPS_DESTLATITUDE EXIF_RATIONAL
5086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Reference for longitude of destination
5096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GPS_DESTLONGITUDE_REF as the exif_tag_type (EXIF_ASCII)
5106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// It should be 2 characters long including the null-terminating character.
5116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// "E" - East longitude
5126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// "W" - West longitude
5136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Other - Reserved
5146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_DESTLONGITUDE_REF 0x0015
5156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_DESTLONGITUDE_REF \
5166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(GPS_DESTLONGITUDE_REF, _ID_GPS_DESTLONGITUDE_REF)
5176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GPS_DESTLONGITUDE_REF EXIF_ASCII
5186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Longitude of destination
5196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GPS_DESTLONGITUDE as the exif_tag_type (EXIF_RATIONAL)
5206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 3
5216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_DESTLONGITUDE 0x0016
5226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_DESTLONGITUDE CONSTRUCT_TAGID(GPS_DESTLONGITUDE, _ID_GPS_DESTLONGITUDE)
5236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GPS_DESTLONGITUDE EXIF_RATIONAL
5246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Reference for bearing of destination
5256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GPS_DESTBEARING_REF as the exif_tag_type (EXIF_ASCII)
5266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// It should be 2 characters long including the null-terminating character.
5276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// "T" - True direction
5286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// "M" - Magnetic direction
5296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Other - Reserved
5306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_DESTBEARING_REF 0x0017
5316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_DESTBEARING_REF \
5326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(GPS_DESTBEARING_REF, _ID_GPS_DESTBEARING_REF)
5336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GPS_DESTBEARING_REF EXIF_ASCII
5346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Bearing of destination
5356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GPS_DESTBEARING as the exif_tag_type (EXIF_RATIONAL)
5366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
5376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_DESTBEARING 0x0018
5386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_DESTBEARING \
5396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(GPS_DESTBEARING, _ID_GPS_DESTBEARING)
5406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GPS_DESTBEARING EXIF_RATIONAL
5416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Reference for distance to destination
5426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GPS_DESTDISTANCE_REF as the exif_tag_type (EXIF_ASCII)
5436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// It should be 2 characters long including the null-terminating character.
5446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// "K" - Kilometers per hour
5456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// "M" - Miles per hour
5466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// "N" - Knots
5476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Other - Reserved
5486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_DESTDISTANCE_REF 0x0019
5496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_DESTDISTANCE_REF \
5506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(GPS_DESTDISTANCE_REF, _ID_GPS_DESTDISTANCE_REF)
5516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GPS_DESTDISTANCE_REF EXIF_ASCII
5526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Distance to destination
5536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GPS_DESTDISTANCE as the exif_tag_type (EXIF_RATIONAL)
5546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
5556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_DESTDISTANCE 0x001a
5566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_DESTDISTANCE \
5576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(GPS_DESTDISTANCE, _ID_GPS_DESTDISTANCE)
5586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GPS_DESTDISTANCE EXIF_RATIONAL
5596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Name of GPS processing method
5606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GPS_PROCESSINGMETHOD as the exif_tag_type (EXIF_UNDEFINED)
5616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count can be any
5626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_PROCESSINGMETHOD 0x001b
5636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_PROCESSINGMETHOD \
5646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(GPS_PROCESSINGMETHOD, _ID_GPS_PROCESSINGMETHOD)
5656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GPS_PROCESSINGMETHOD EXIF_UNDEFINED
5666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Name of GPS area
5676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GPS_AREAINFORMATION as the exif_tag_type (EXIF_UNDEFINED)
5686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count can be any
5696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_AREAINFORMATION 0x001c
5706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_AREAINFORMATION \
5716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(GPS_AREAINFORMATION, _ID_GPS_AREAINFORMATION)
5726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GPS_AREAINFORMATION EXIF_UNDEFINED
5736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// GPS date
5746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GPS_DATESTAMP as the exif_tag_type (EXIF_ASCII)
5756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// It should be 11 characters long including the null-terminating character.
5766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_DATESTAMP 0x001d
5776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_DATESTAMP \
5786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(GPS_DATESTAMP, _ID_GPS_DATESTAMP)
5796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GPS_DATESTAMP EXIF_ASCII
5806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// GPS differential correction
5816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GPS_DIFFERENTIAL as the exif_tag_type (EXIF_SHORT)
5826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
5836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// 0 - Measurement without differential correction
5846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// 1 - Differential correction applied
5856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Other - Reserved
5866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_DIFFERENTIAL 0x001e
5876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_DIFFERENTIAL \
5886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(GPS_DIFFERENTIAL, _ID_GPS_DIFFERENTIAL)
5896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GPS_DIFFERENTIAL EXIF_SHORT
5906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Image width
5916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_IMAGE_WIDTH as the exif_tag_type (EXIF_LONG)
5926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
5936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_IMAGE_WIDTH 0x0100
5946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_IMAGE_WIDTH CONSTRUCT_TAGID(IMAGE_WIDTH, _ID_IMAGE_WIDTH)
5956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_IMAGE_WIDTH EXIF_LONG
5966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Image height
5976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_IMAGE_LENGTH as the exif_tag_type (EXIF_SHORT_OR_LONG)
5986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
5996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_IMAGE_LENGTH 0x0101
6006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_IMAGE_LENGTH CONSTRUCT_TAGID(IMAGE_LENGTH, _ID_IMAGE_LENGTH)
6016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_IMAGE_LENGTH EXIF_LONG
6026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Number of bits per component
6036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_BITS_PER_SAMPLE as the exif_tag_type (EXIF_SHORT)
6046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
6056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_BITS_PER_SAMPLE 0x0102
6066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_BITS_PER_SAMPLE \
6076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(BITS_PER_SAMPLE, _ID_BITS_PER_SAMPLE)
6086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_BITS_PER_SAMPLE EXIF_SHORT
6096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Compression scheme
6106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_COMPRESSION as the exif_tag_type (EXIF_SHORT)
6116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
6126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_COMPRESSION 0x0103
6136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_COMPRESSION CONSTRUCT_TAGID(COMPRESSION, _ID_COMPRESSION)
6146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_COMPRESSION EXIF_SHORT
6156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Pixel composition
6166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_PHOTOMETRIC_INTERPRETATION as the exif_tag_type (EXIF_SHORT)
6176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
6186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_PHOTOMETRIC_INTERPRETATION 0x0106
6196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_PHOTOMETRIC_INTERPRETATION \
6206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(PHOTOMETRIC_INTERPRETATION, _ID_PHOTOMETRIC_INTERPRETATION)
6216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_PHOTOMETRIC_INTERPRETATION EXIF_SHORT
6226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
6236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Thresholding
6246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_THRESH_HOLDING as the exif_tag_type (EXIF_SHORT)
6256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev//
6266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev//1 = No dithering or halftoning
6276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev//2 = Ordered dither or halftone
6286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev//3 = Randomized dither
6296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_THRESH_HOLDING 0x0107
6306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_THRESH_HOLDING \
6316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(THRESH_HOLDING, _ID_THRESH_HOLDING)
6326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_THRESH_HOLDING EXIF_SHORT
6336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
6346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Cell Width
6356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_CELL_WIDTH as the exif_tag_type (EXIF_SHORT)
6366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev//
6376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_CELL_WIDTH 0x0108
6386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_CELL_WIDTH CONSTRUCT_TAGID(CELL_WIDTH, _ID_CELL_WIDTH)
6396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_CELL_WIDTH EXIF_SHORT
6406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Cell Height
6416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_CELL_HEIGHT as the exif_tag_type (EXIF_SHORT)
6426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
6436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_CELL_HEIGHT 0x0109
6446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_CELL_HEIGHT CONSTRUCT_TAGID(CELL_HEIGHT, _ID_CELL_HEIGHT)
6456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_CELL_HEIGHT EXIF_SHORT
6466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Fill Order
6476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_FILL_ORDER as the exif_tag_type (EXIF_SHORT)
6486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// 	1 = Normal
6496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev//  2 = Reversed
6506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_FILL_ORDER 0x010A
6516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_FILL_ORDER CONSTRUCT_TAGID(FILL_ORDER, _ID_FILL_ORDER)
6526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_FILL_ORDER EXIF_SHORT
6536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
6546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// DOCUMENT NAME
6556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_DOCUMENT_NAME as the exif_tag_type (EXIF_ASCII)
6566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev//
6576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_DOCUMENT_NAME 0x010D
6586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_DOCUMENT_NAME CONSTRUCT_TAGID(DOCUMENT_NAME, _ID_DOCUMENT_NAME)
6596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_DOCUMENT_NAME EXIF_ASCII
6606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
6616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Image title
6626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_IMAGE_DESCRIPTION as the exif_tag_type (EXIF_ASCII)
6636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count can be any
6646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_IMAGE_DESCRIPTION 0x010e
6656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_IMAGE_DESCRIPTION \
6666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(IMAGE_DESCRIPTION, _ID_IMAGE_DESCRIPTION)
6676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_IMAGE_DESCRIPTION EXIF_ASCII
6686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Image input equipment manufacturer
6696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_MAKE as the exif_tag_type (EXIF_ASCII)
6706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count can be any
6716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_MAKE 0x010f
6726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_MAKE CONSTRUCT_TAGID(MAKE, _ID_MAKE)
6736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_MAKE EXIF_ASCII
6746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Image input equipment model
6756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_MODEL as the exif_tag_type (EXIF_ASCII)
6766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count can be any
6776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_MODEL 0x0110
6786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_MODEL CONSTRUCT_TAGID(MODEL, _ID_MODEL)
6796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_MODEL EXIF_ASCII
6806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Image data location
6816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_STRIP_OFFSETS as the exif_tag_type (EXIF_LONG)
6826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count = StripsPerImage                    when PlanarConfiguration = 1
6836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev//       = SamplesPerPixel * StripsPerImage  when PlanarConfiguration = 2
6846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_STRIP_OFFSETS 0x0111
6856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_STRIP_OFFSETS \
6866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(STRIP_OFFSETS, _ID_STRIP_OFFSETS)
6876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_STRIP_OFFSETS EXIF_LONG
6886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Orientation of image
6896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_ORIENTATION as the exif_tag_type (EXIF_SHORT)
6906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
6916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_ORIENTATION 0x0112
6926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_ORIENTATION CONSTRUCT_TAGID(ORIENTATION, _ID_ORIENTATION)
6936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_ORIENTATION EXIF_SHORT
6946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Number of components
6956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_SAMPLES_PER_PIXEL as the exif_tag_type (EXIF_SHORT)
6966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
6976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_SAMPLES_PER_PIXEL 0x0115
6986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_SAMPLES_PER_PIXEL \
6996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(SAMPLES_PER_PIXEL, _ID_SAMPLES_PER_PIXEL)
7006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_SAMPLES_PER_PIXEL EXIF_SHORT
7016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Number of rows per strip
7026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_ROWS_PER_STRIP as the exif_tag_type (EXIF_LONG)
7036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
7046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_ROWS_PER_STRIP 0x0116
7056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_ROWS_PER_STRIP \
7066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(ROWS_PER_STRIP, _ID_ROWS_PER_STRIP)
7076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_ROWS_PER_STRIP EXIF_LONG
7086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Bytes per compressed strip
7096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_STRIP_BYTE_COUNTS as the exif_tag_type (EXIF_LONG)
7106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count = StripsPerImage                    when PlanarConfiguration = 1
7116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev//       = SamplesPerPixel * StripsPerImage  when PlanarConfiguration = 2
7126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_STRIP_BYTE_COUNTS 0x0117
7136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_STRIP_BYTE_COUNTS \
7146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(STRIP_BYTE_COUNTS, _ID_STRIP_BYTE_COUNTS)
7156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_STRIP_BYTE_COUNTS EXIF_LONG
7166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// MinSampleValue
7176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_MIN_SAMPLE_VALUE as the exif_tag_type (EXIF_SHORT)
7186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_MIN_SAMPLE_VALUE 0x0118
7196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_MIN_SAMPLE_VALUE  \
7206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(MIN_SAMPLE_VALUE, _ID_MIN_SAMPLE_VALUE)
7216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_MIN_SAMPLE_VALUE EXIF_SHORT
7226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// MaxSampleValue
7236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_MAX_SAMPLE_VALUE as the exif_tag_type (EXIF_SHORT)
7246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_MAX_SAMPLE_VALUE 0x0119
7256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_MAX_SAMPLE_VALUE CONSTRUCT_TAGID(MAX_SAMPLE_VALUE, _ID_MAX_SAMPLE_VALUE)
7266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_MAX_SAMPLE_VALUE EXIF_SHORT
7276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
7286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Image resolution in width direction
7296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_X_RESOLUTION as the exif_tag_type (EXIF_RATIONAL)
7306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
7316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_X_RESOLUTION 0x011a
7326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_X_RESOLUTION \
7336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(X_RESOLUTION, _ID_X_RESOLUTION)
7346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_X_RESOLUTION EXIF_RATIONAL
7356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Image resolution in height direction
7366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_Y_RESOLUTION as the exif_tag_type (EXIF_RATIONAL)
7376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
7386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_Y_RESOLUTION 0x011b
7396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_Y_RESOLUTION \
7406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(Y_RESOLUTION, _ID_Y_RESOLUTION)
7416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_Y_RESOLUTION EXIF_RATIONAL
7426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Image data arrangement
7436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_PLANAR_CONFIGURATION as the exif_tag_type (EXIF_SHORT)
7446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
7456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_PLANAR_CONFIGURATION 0x011c
7466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_PLANAR_CONFIGURATION \
7476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(PLANAR_CONFIGURATION, _ID_PLANAR_CONFIGURATION)
7486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_PLANAR_CONFIGURATION EXIF_SHORT
7496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// PageName
7506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_PAGE_NAME as the exif_tag_type (EXIF_ASCII)
7516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
7526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_PAGE_NAME 0x011d
7536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_PAGE_NAME CONSTRUCT_TAGID(PAGE_NAME, _ID_PAGE_NAME)
7546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_PAGE_NAME EXIF_ASCII
7556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// XPosition
7566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_X_POSITION as the exif_tag_type (EXIF_RATIONAL)
7576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev//
7586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_X_POSITION 0x011e
7596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_X_POSITION CONSTRUCT_TAGID(X_POSITION, _ID_X_POSITION)
7606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_X_POSITION EXIF_RATIONAL
7616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// YPosition
7626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_Y_POSITION as the exif_tag_type (EXIF_RATIONAL)
7636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev//
7646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_Y_POSITION 0x011f
7656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_Y_POSITION CONSTRUCT_TAGID(Y_POSITION, _ID_Y_POSITION)
7666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_Y_POSITION EXIF_RATIONAL
7676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
7686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// FREE_OFFSET
7696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_FREE_OFFSET as the exif_tag_type (EXIF_LONG)
7706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev//
7716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_FREE_OFFSET 0x0120
7726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_FREE_OFFSET CONSTRUCT_TAGID(FREE_OFFSET, _ID_FREE_OFFSET)
7736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_FREE_OFFSET EXIF_LONG
7746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// FREE_BYTE_COUNTS
7756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_FREE_BYTE_COUNTS as the exif_tag_type (EXIF_LONG)
7766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev//
7776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_FREE_BYTE_COUNTS 0x0121
7786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_FREE_BYTE_COUNTS \
7796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(FREE_BYTE_COUNTS, _ID_FREE_BYTE_COUNTS)
7806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_FREE_BYTE_COUNTS EXIF_LONG
7816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
7826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// GrayResponseUnit
7836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GRAY_RESPONSE_UNIT as the exif_tag_type (EXIF_SHORT)
7846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev//
7856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GRAY_RESPONSE_UNIT 0x0122
7866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GRAY_RESPONSE_UNIT \
7876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(GRAY_RESPONSE_UNIT, _ID_GRAY_RESPONSE_UNIT)
7886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GRAY_RESPONSE_UNIT EXIF_SHORT
7896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// GrayResponseCurve
7906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GRAY_RESPONSE_CURVE  as the exif_tag_type (EXIF_SHORT)
7916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev//
7926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GRAY_RESPONSE_CURVE 0x0123
7936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GRAY_RESPONSE_CURVE \
7946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(GRAY_RESPONSE_CURVE , _ID_GRAY_RESPONSE_CURVE )
7956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GRAY_RESPONSE_CURVE EXIF_SHORT
7966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
7976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// T4_OPTION
7986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_T4_OPTION as the exif_tag_type (EXIF_LONG)
7996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev//
8006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_T4_OPTION  0x0124
8016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_T4_OPTION CONSTRUCT_TAGID(T4_OPTION, _ID_T4_OPTION)
8026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_T4_OPTION EXIF_LONG
8036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// T6_OPTION
8046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_T6_OPTION as the exif_tag_type (EXIF_LONG)
8056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev//
8066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_T6_OPTION 0x0125
8076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_T6_OPTION CONSTRUCT_TAGID(T6_OPTION, _ID_T6_OPTION)
8086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_T6_OPTION EXIF_LONG
8096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
8106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Unit of X and Y resolution
8116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_RESOLUTION_UNIT as the exif_tag_type (EXIF_SHORT)
8126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
8136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_RESOLUTION_UNIT 0x0128
8146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_RESOLUTION_UNIT \
8156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(RESOLUTION_UNIT, _ID_RESOLUTION_UNIT)
8166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_RESOLUTION_UNIT EXIF_SHORT
8176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
8186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Page Number
8196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_PAGE_NUMBER  as the exif_tag_type (EXIF_SHORT)
8206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
8216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_PAGE_NUMBER 0x0129
8226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_PAGE_NUMBER CONSTRUCT_TAGID(PAGE_NUMBER, _ID_PAGE_NUMBER)
8236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_PAGE_NUMBER EXIF_SHORT
8246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Transfer function
8256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TRANSFER_FUNCTION as the exif_tag_type (EXIF_SHORT)
8266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 3*256
8276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TRANSFER_FUNCTION 0x012d
8286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TRANSFER_FUNCTION \
8296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(TRANSFER_FUNCTION, _ID_TRANSFER_FUNCTION)
8306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TRANSFER_FUNCTION EXIF_SHORT
8316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Software used
8326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_SOFTWARE as the exif_tag_type (EXIF_ASCII)
8336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count can be any
8346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_SOFTWARE 0x0131
8356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_SOFTWARE CONSTRUCT_TAGID(SOFTWARE, _ID_SOFTWARE)
8366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_SOFTWARE EXIF_ASCII
8376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// File change date and time
8386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_DATE_TIME as the exif_tag_type (EXIF_ASCII)
8396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 20
8406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_DATE_TIME 0x0132
8416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_DATE_TIME CONSTRUCT_TAGID(DATE_TIME, _ID_DATE_TIME)
8426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_DATE_TIME EXIF_ASCII
8436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// ARTIST, person who created this image
8446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_ARTIST as the exif_tag_type (EXIF_ASCII)
8456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count can be any
8466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_ARTIST 0x013b
8476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_ARTIST CONSTRUCT_TAGID(ARTIST, _ID_ARTIST)
8486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_ARTIST EXIF_ASCII
8496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Host Computer Name
8506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_HOST_COMPUTER as the exif_tag_type (EXIF_ASCII)
8516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count can be any
8526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_HOST_COMPUTER 0x013c
8536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_HOST_COMPUTER \
8546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(HOST_COMPUTER , _ID_HOST_COMPUTER )
8556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_HOST_COMPUTER EXIF_ASCII
8566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Predictor
8576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_PREDICTOR as the exif_tag_type (EXIF_SHORT)
8586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count can be any
8596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_PREDICTOR 0x013d
8606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_PREDICTOR CONSTRUCT_TAGID(PREDICTOR , _ID_PREDICTOR )
8616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_PREDICTOR EXIF_SHORT
8626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// White point chromaticity
8636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_WHITE_POINT as the exif_tag_type (EXIF_RATIONAL)
8646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 2
8656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_WHITE_POINT 0x013e
8666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_WHITE_POINT CONSTRUCT_TAGID(WHITE_POINT, _ID_WHITE_POINT)
8676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_WHITE_POINT EXIF_RATIONAL
8686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Chromaticities of primaries
8696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_PRIMARY_CHROMATICITIES as the exif_tag_type (EXIF_RATIONAL)
8706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 6
8716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_PRIMARY_CHROMATICITIES 0x013f
8726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_PRIMARY_CHROMATICITIES \
8736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(PRIMARY_CHROMATICITIES, _ID_PRIMARY_CHROMATICITIES)
8746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_PRIMARY_CHROMATICITIES EXIF_RATIONAL
8756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
8766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// COLOR_MAP
8776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_COLOR_MAP as the exif_tag_type (EXIF_SHORT)
8786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 6
8796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_COLOR_MAP 0x0140
8806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_COLOR_MAP CONSTRUCT_TAGID(COLOR_MAP, _ID_COLOR_MAP)
8816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_COLOR_MAP EXIF_SHORT
8826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// HALFTONE_HINTS
8836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_HALFTONE_HINTS as the exif_tag_type (EXIF_SHORT)
8846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 6
8856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_HALFTONE_HINTS 0x0141
8866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_HALFTONE_HINTS \
8876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(HALFTONE_HINTS, _ID_HALFTONE_HINTS)
8886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_HALFTONE_HINTS EXIF_SHORT
8896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
8906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// TILE_WIDTH
8916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TILE_WIDTH as the exif_tag_type (EXIF_LONG)
8926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 6
8936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TILE_WIDTH 0x0142
8946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TILE_WIDTH CONSTRUCT_TAGID(TILE_WIDTH, _ID_TILE_WIDTH)
8956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TILE_WIDTH EXIF_LONG
8966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// TILE_LENGTH
8976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TILE_LENGTH  as the exif_tag_type (EXIF_LONG)
8986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 6
8996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TILE_LENGTH 0x0143
9006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TILE_LENGTH CONSTRUCT_TAGID(TILE_LENGTH , _ID_TILE_LENGTH )
9016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TILE_LENGTH EXIF_LONG
9026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// TILE_OFFSET
9036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TILE_OFFSET as the exif_tag_type (EXIF_LONG)
9046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev//
9056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TILE_OFFSET 0x0144
9066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TILE_OFFSET CONSTRUCT_TAGID(TILE_OFFSET , _ID_TILE_OFFSET )
9076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TILE_OFFSET EXIF_LONG
9086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// tile Byte Counts
9096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TILE_OFFSET as the exif_tag_type (EXIF_LONG)
9106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev//
9116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TILE_BYTE_COUNTS 0x0145
9126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TILE_BYTE_COUNTS  \
9136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(TILE_BYTE_COUNTS  , _ID_TILE_BYTE_COUNTS  )
9146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TILE_BYTE_COUNTS EXIF_LONG
9156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
9166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// INK_SET
9176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TILE_LENGTH  as the exif_tag_type (EXIF_SHORT)
9186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 6
9196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_INK_SET 0x014c
9206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_INK_SET CONSTRUCT_TAGID(INK_SET , _ID_INK_SET )
9216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_INK_SET EXIF_SHORT
9226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// INK_NAMES
9236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_INK_NAMES  as the exif_tag_type (EXIF_ASCII)
9246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 6
9256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_INK_NAMES 0x014D
9266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_INK_NAMES CONSTRUCT_TAGID(INK_NAMES , _ID_INK_NAMES)
9276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_INK_NAMES EXIF_ASCII
9286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// NUMBER_OF_INKS
9296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_NUMBER_OF_INKS  as the exif_tag_type (EXIF_SHORT)
9306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 6
9316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_NUMBER_OF_INKS 0x014e
9326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_NUMBER_OF_INKS \
9336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(NUMBER_OF_INKS , _ID_NUMBER_OF_INKS )
9346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_NUMBER_OF_INKS EXIF_SHORT
9356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
9366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// DOT_RANGE
9376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_DOT_RANGE  as the exif_tag_type (EXIF_ASCII)
9386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 6
9396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_DOT_RANGE 0x0150
9406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_DOT_RANGE CONSTRUCT_TAGID(DOT_RANGE , _ID_DOT_RANGE )
9416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_DOT_RANGE EXIF_ASCII
9426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
9436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// TARGET_PRINTER
9446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TARGET_PRINTER  as the exif_tag_type (EXIF_ASCII)
9456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 6
9466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TARGET_PRINTER 0x0151
9476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TARGET_PRINTER \
9486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(TARGET_PRINTER , _ID_TARGET_PRINTER)
9496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TARGET_PRINTER EXIF_ASCII
9506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// EXTRA_SAMPLES
9516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_EXTRA_SAMPLES as the exif_tag_type (EXIF_SHORT)
9526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 6
9536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_EXTRA_SAMPLES 0x0152
9546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_EXTRA_SAMPLES \
9556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(EXTRA_SAMPLES , _ID_EXTRA_SAMPLES )
9566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_EXTRA_SAMPLES EXIF_SHORT
9576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
9586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// SAMPLE_FORMAT
9596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_SAMPLE_FORMAT  as the exif_tag_type (EXIF_SHORT)
9606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 6
9616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_SAMPLE_FORMAT 0x0153
9626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_SAMPLE_FORMAT \
9636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(SAMPLE_FORMAT , _ID_SAMPLE_FORMAT )
9646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_SAMPLE_FORMAT EXIF_SHORT
9656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
9666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Table of values that extends the range of the transfer function.
9676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TRANSFER_RANGE as the exif_tag_type (EXIF_SHORT)
9686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 6
9696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TRANSFER_RANGE 0x0156
9706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TRANSFER_RANGE \
9716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(TRANSFER_RANGE , _ID_TRANSFER_RANGE )
9726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TRANSFER_RANGE EXIF_SHORT
9736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
9746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// JPEG compression process.
9756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_JPEG_PROC as the exif_tag_type (EXIF_SHORT)
9766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev//
9776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_JPEG_PROC 0x0200
9786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_JPEG_PROC CONSTRUCT_TAGID(JPEG_PROC , _ID_JPEG_PROC )
9796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_JPEG_PROC EXIF_SHORT
9806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
9816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
9826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Offset to JPEG SOI
9836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_JPEG_INTERCHANGE_FORMAT as the exif_tag_type (EXIF_LONG)
9846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count is undefined
9856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_JPEG_INTERCHANGE_FORMAT 0x0201
9866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_JPEG_INTERCHANGE_FORMAT \
9876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(JPEG_INTERCHANGE_FORMAT, _ID_JPEG_INTERCHANGE_FORMAT)
9886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_JPEG_INTERCHANGE_FORMAT EXIF_LONG
9896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Bytes of JPEG data
9906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_JPEG_INTERCHANGE_FORMAT_LENGTH as the exif_tag_type (EXIF_LONG)
9916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count is undefined
9926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_JPEG_INTERCHANGE_FORMAT_LENGTH 0x0202
9936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_JPEG_INTERCHANGE_FORMAT_LENGTH \
9946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(JPEG_INTERCHANGE_FORMAT_LENGTH, \
9956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  _ID_JPEG_INTERCHANGE_FORMAT_LENGTH)
9966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_JPEG_INTERCHANGE_FORMAT_LENGTH EXIF_LONG
9976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
9986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Length of the restart interval.
9996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_JPEG_RESTART_INTERVAL as the exif_tag_type (EXIF_SHORT)
10006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count is undefined
10016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_JPEG_RESTART_INTERVAL 0x0203
10026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_JPEG_RESTART_INTERVAL \
10036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(JPEG_RESTART_INTERVAL, _ID_JPEG_RESTART_INTERVAL)
10046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_JPEG_RESTART_INTERVAL EXIF_SHORT
10056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
10066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// JPEGLosslessPredictors
10076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_JPEG_LOSSLESS_PREDICTORS as the exif_tag_type (EXIF_SHORT)
10086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count is undefined
10096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_JPEG_LOSSLESS_PREDICTORS 0x0205
10106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_JPEG_LOSSLESS_PREDICTORS  \
10116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(JPEG_LOSSLESS_PREDICTORS, _ID_JPEG_LOSSLESS_PREDICTORS)
10126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_JPEG_LOSSLESS_PREDICTORS EXIF_SHORT
10136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
10146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// JPEGPointTransforms
10156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_JPEG_POINT_TRANSFORMS as the exif_tag_type (EXIF_SHORT)
10166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count is undefined
10176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_JPEG_POINT_TRANSFORMS 0x0206
10186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_JPEG_POINT_TRANSFORMS  \
10196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(JPEG_POINT_TRANSFORMS, _ID_JPEG_POINT_TRANSFORMS)
10206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_JPEG_POINT_TRANSFORMS EXIF_SHORT
10216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
10226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// JPEG_Q_TABLES
10236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_JPEG_Q_TABLES as the exif_tag_type (EXIF_LONG)
10246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count is undefined
10256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_JPEG_Q_TABLES 0x0207
10266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_JPEG_Q_TABLES \
10276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(JPEG_Q_TABLES, _ID_JPEG_Q_TABLES)
10286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_JPEG_Q_TABLES EXIF_LONG
10296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// JPEG_DC_TABLES
10306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_JPEG_DC_TABLES as the exif_tag_type (EXIF_LONG)
10316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count is undefined
10326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_JPEG_DC_TABLES 0x0208
10336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_JPEG_DC_TABLES \
10346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(JPEG_DC_TABLES, _ID_JPEG_DC_TABLES)
10356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_JPEG_DC_TABLES EXIF_LONG
10366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// JPEG_AC_TABLES
10376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_JPEG_AC_TABLES as the exif_tag_type (EXIF_LONG)
10386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count is undefined
10396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_JPEG_AC_TABLES 0x0209
10406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_JPEG_AC_TABLES \
10416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(JPEG_AC_TABLES, _ID_JPEG_AC_TABLES)
10426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_JPEG_AC_TABLES EXIF_LONG
10436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
10446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Color space transformation matrix coefficients
10456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_YCBCR_COEFFICIENTS as the exif_tag_type (EXIF_RATIONAL)
10466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 3
10476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_YCBCR_COEFFICIENTS 0x0211
10486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_YCBCR_COEFFICIENTS \
10496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(YCBCR_COEFFICIENTS, _ID_YCBCR_COEFFICIENTS)
10506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_YCBCR_COEFFICIENTS EXIF_RATIONAL
10516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Subsampling ratio of Y to C
10526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_YCBCR_SUB_SAMPLING as the exif_tag_type (EXIF_SHORT)
10536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 2
10546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_YCBCR_SUB_SAMPLING 0x0212
10556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_YCBCR_SUB_SAMPLING  \
10566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(YCBCR_SUB_SAMPLING, _ID_YCBCR_SUB_SAMPLING)
10576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_YCBCR_SUB_SAMPLING EXIF_SHORT
10586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Y and C positioning
10596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_YCBCR_POSITIONING as the exif_tag_type (EXIF_SHORT)
10606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
10616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_YCBCR_POSITIONING 0x0213
10626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_YCBCR_POSITIONING  \
10636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(YCBCR_POSITIONING, _ID_YCBCR_POSITIONING)
10646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_YCBCR_POSITIONING EXIF_SHORT
10656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Pair of black and white reference values
10666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_REFERENCE_BLACK_WHITE as the exif_tag_type (EXIF_RATIONAL)
10676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 6
10686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_REFERENCE_BLACK_WHITE 0x0214
10696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_REFERENCE_BLACK_WHITE \
10706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(REFERENCE_BLACK_WHITE, _ID_REFERENCE_BLACK_WHITE)
10716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_REFERENCE_BLACK_WHITE EXIF_RATIONAL
10726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// GAMMA
10736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GAMMA as the exif_tag_type (EXIF_RATIONAL)
10746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 6
10756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GAMMA 0x0301
10766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GAMMA CONSTRUCT_TAGID(GAMMA, _ID_GAMMA)
10776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GAMMA EXIF_RATIONAL
10786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Null-terminated character string that identifies an ICC profile.
10796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_ICC_PROFILE_DESCRIPTOR as the exif_tag_type (EXIF_ASCII)
10806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 6
10816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_ICC_PROFILE_DESCRIPTOR 0x0302
10826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_ICC_PROFILE_DESCRIPTOR \
10836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(ICC_PROFILE_DESCRIPTOR, _ID_ICC_PROFILE_DESCRIPTOR)
10846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_ICC_PROFILE_DESCRIPTOR EXIF_ASCII
10856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// SRGB_RENDERING_INTENT
10866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_SRGB_RENDERING_INTENT as the exif_tag_type (EXIF_BYTE)
10876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 6
10886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_SRGB_RENDERING_INTENT 0x0303
10896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_SRGB_RENDERING_INTENT \
10906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(SRGB_RENDERING_INTENT, _ID_SRGB_RENDERING_INTENT)
10916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_SRGB_RENDERING_INTENT EXIF_BYTE
10926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
10936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Null-terminated character string that specifies the title of the image.
10946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_IMAGE_TITLE as the exif_tag_type (EXIF_ASCII		)
10956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev//
10966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_IMAGE_TITLE 0x0320
10976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_IMAGE_TITLE CONSTRUCT_TAGID(IMAGE_TITLE, _ID_IMAGE_TITLE)
10986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_IMAGE_TITLE EXIF_ASCII
10996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
11006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Copyright holder
11016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_COPYRIGHT as the exif_tag_type (EXIF_ASCII)
11026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count can be any
11036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_COPYRIGHT 0x8298
11046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_COPYRIGHT CONSTRUCT_TAGID(COPYRIGHT, _ID_COPYRIGHT)
11056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_COPYRIGHT EXIF_ASCII
11066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Old Subfile Type
11076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_NEW_SUBFILE_TYPE as the exif_tag_type (EXIF_SHORT)
11086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count can be any
11096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_NEW_SUBFILE_TYPE 0x00fe
11106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_NEW_SUBFILE_TYPE \
11116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(NEW_SUBFILE_TYPE, _ID_NEW_SUBFILE_TYPE)
11126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_NEW_SUBFILE_TYPE EXIF_SHORT
11136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
11146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// New Subfile Type
11156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_NEW_SUBFILE_TYPE as the exif_tag_type (EXIF_LONG)
11166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count can be any
11176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_SUBFILE_TYPE 0x00ff
11186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_SUBFILE_TYPE CONSTRUCT_TAGID(SUBFILE_TYPE, _ID_SUBFILE_TYPE)
11196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_SUBFILE_TYPE EXIF_LONG
11206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
11216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Image width (of thumbnail)
11226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TN_IMAGE_WIDTH as the exif_tag_type (EXIF_LONG)
11236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
11246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TN_IMAGE_WIDTH 0x0100
11256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TN_IMAGE_WIDTH \
11266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(TN_IMAGE_WIDTH, _ID_TN_IMAGE_WIDTH)
11276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TN_IMAGE_WIDTH EXIF_LONG
11286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Image height (of thumbnail)
11296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TN_IMAGE_LENGTH as the exif_tag_type (EXIF_SHORT_OR_LONG)
11306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
11316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TN_IMAGE_LENGTH 0x0101
11326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TN_IMAGE_LENGTH \
11336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(TN_IMAGE_LENGTH, _ID_TN_IMAGE_LENGTH)
11346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TN_IMAGE_LENGTH EXIF_LONG
11356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Number of bits per component (of thumbnail)
11366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TN_BITS_PER_SAMPLE as the exif_tag_type (EXIF_SHORT)
11376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
11386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TN_BITS_PER_SAMPLE 0x0102
11396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TN_BITS_PER_SAMPLE \
11406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(TN_BITS_PER_SAMPLE, _ID_TN_BITS_PER_SAMPLE)
11416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TN_BITS_PER_SAMPLE EXIF_SHORT
11426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Compression scheme (of thumbnail)
11436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TN_COMPRESSION as the exif_tag_type (EXIF_SHORT)
11446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
11456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TN_COMPRESSION 0x0103
11466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TN_COMPRESSION \
11476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(TN_COMPRESSION, _ID_TN_COMPRESSION)
11486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TN_COMPRESSION EXIF_SHORT
11496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Pixel composition (of thumbnail)
11506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TN_PHOTOMETRIC_INTERPRETATION as the
11516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// exif_tag_type (EXIF_SHORT)
11526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
11536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TN_PHOTOMETRIC_INTERPRETATION 0x0106
11546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TN_PHOTOMETRIC_INTERPRETATION \
11556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(TN_PHOTOMETRIC_INTERPRETATION, \
11566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  _ID_TN_PHOTOMETRIC_INTERPRETATION)
11576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TN_PHOTOMETRIC_INTERPRETATION EXIF_SHORT
11586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Image title (of thumbnail)
11596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TN_IMAGE_DESCRIPTION as the exif_tag_type (EXIF_ASCII)
11606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count can be any
11616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TN_IMAGE_DESCRIPTION 0x010e
11626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TN_IMAGE_DESCRIPTION \
11636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(TN_IMAGE_DESCRIPTION, _ID_TN_IMAGE_DESCRIPTION)
11646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TN_IMAGE_DESCRIPTION EXIF_ASCII
11656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Image input equipment manufacturer (of thumbnail)
11666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TN_MAKE as the exif_tag_type (EXIF_ASCII)
11676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count can be any
11686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TN_MAKE 0x010f
11696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TN_MAKE CONSTRUCT_TAGID(TN_MAKE, _ID_TN_MAKE)
11706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TN_MAKE EXIF_ASCII
11716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Image input equipment model (of thumbnail)
11726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TN_MODEL as the exif_tag_type (EXIF_ASCII)
11736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count can be any
11746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TN_MODEL 0x0110
11756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TN_MODEL CONSTRUCT_TAGID(TN_MODEL, _ID_TN_MODEL)
11766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TN_MODEL EXIF_ASCII
11776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Image data location (of thumbnail)
11786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TN_STRIP_OFFSETS as the exif_tag_type (EXIF_LONG)
11796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count = StripsPerImage                    when PlanarConfiguration = 1
11806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev//       = SamplesPerPixel * StripsPerImage  when PlanarConfiguration = 2
11816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TN_STRIP_OFFSETS 0x0111
11826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TN_STRIP_OFFSETS \
11836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(STRIP_TN_OFFSETS, _ID_TN_STRIP_OFFSETS)
11846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TN_STRIP_OFFSETS EXIF_LONG
11856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Orientation of image (of thumbnail)
11866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TN_ORIENTATION as the exif_tag_type (EXIF_SHORT)
11876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
11886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TN_ORIENTATION 0x0112
11896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TN_ORIENTATION \
11906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(TN_ORIENTATION, _ID_TN_ORIENTATION)
11916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TN_ORIENTATION EXIF_SHORT
11926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Number of components (of thumbnail)
11936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TN_SAMPLES_PER_PIXEL as the exif_tag_type (EXIF_SHORT)
11946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
11956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TN_SAMPLES_PER_PIXEL 0x0115
11966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TN_SAMPLES_PER_PIXEL \
11976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(TN_SAMPLES_PER_PIXEL, _ID_TN_SAMPLES_PER_PIXEL)
11986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TN_SAMPLES_PER_PIXEL EXIF_SHORT
11996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Number of rows per strip (of thumbnail)
12006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TN_ROWS_PER_STRIP as the exif_tag_type (EXIF_LONG)
12016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
12026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TN_ROWS_PER_STRIP 0x0116
12036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TN_ROWS_PER_STRIP \
12046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(TN_ROWS_PER_STRIP, _ID_TN_ROWS_PER_STRIP)
12056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TN_ROWS_PER_STRIP EXIF_LONG
12066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Bytes per compressed strip (of thumbnail)
12076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TN_STRIP_BYTE_COUNTS as the exif_tag_type (EXIF_LONG)
12086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count = StripsPerImage                    when PlanarConfiguration = 1
12096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev//       = SamplesPerPixel * StripsPerImage  when PlanarConfiguration = 2
12106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TN_STRIP_BYTE_COUNTS 0x0117
12116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TN_STRIP_BYTE_COUNTS \
12126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(TN_STRIP_BYTE_COUNTS, _ID_TN_STRIP_BYTE_COUNTS)
12136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TN_STRIP_BYTE_COUNTS EXIF_LONG
12146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Image resolution in width direction (of thumbnail)
12156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TN_X_RESOLUTION as the exif_tag_type (EXIF_RATIONAL)
12166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
12176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TN_X_RESOLUTION 0x011a
12186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TN_X_RESOLUTION \
12196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(TN_X_RESOLUTION, _ID_TN_X_RESOLUTION)
12206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TN_X_RESOLUTION EXIF_RATIONAL
12216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Image resolution in height direction  (of thumbnail)
12226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TN_Y_RESOLUTION as the exif_tag_type (EXIF_RATIONAL)
12236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
12246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TN_Y_RESOLUTION 0x011b
12256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TN_Y_RESOLUTION \
12266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(TN_Y_RESOLUTION, _ID_TN_Y_RESOLUTION)
12276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TN_Y_RESOLUTION EXIF_RATIONAL
12286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Image data arrangement (of thumbnail)
12296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TN_PLANAR_CONFIGURATION as the exif_tag_type (EXIF_SHORT)
12306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
12316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TN_PLANAR_CONFIGURATION 0x011c
12326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TN_PLANAR_CONFIGURATION \
12336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(TN_PLANAR_CONFIGURATION, _ID_TN_PLANAR_CONFIGURATION)
12346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TN_PLANAR_CONFIGURATION EXIF_SHORT
12356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Unit of X and Y resolution (of thumbnail)
12366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TN_RESOLUTION_UNIT as the exif_tag_type (EXIF_SHORT)
12376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
12386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TN_RESOLUTION_UNIT 0x128
12396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TN_RESOLUTION_UNIT \
12406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(TN_RESOLUTION_UNIT, _ID_TN_RESOLUTION_UNIT)
12416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TN_RESOLUTION_UNIT EXIF_SHORT
12426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Transfer function (of thumbnail)
12436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TN_TRANSFER_FUNCTION as the exif_tag_type (EXIF_SHORT)
12446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 3*256
12456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TN_TRANSFER_FUNCTION 0x012d
12466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TN_TRANSFER_FUNCTION \
12476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(TN_TRANSFER_FUNCTION, _ID_TN_TRANSFER_FUNCTION)
12486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TN_TRANSFER_FUNCTION EXIF_SHORT
12496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Software used (of thumbnail)
12506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TN_SOFTWARE as the exif_tag_type (EXIF_ASCII)
12516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count can be any
12526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TN_SOFTWARE 0x0131
12536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TN_SOFTWARE CONSTRUCT_TAGID(TN_SOFTWARE, _ID_TN_SOFTWARE)
12546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TN_SOFTWARE EXIF_ASCII
12556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// File change date and time (of thumbnail)
12566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TN_DATE_TIME as the exif_tag_type (EXIF_ASCII)
12576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 20
12586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TN_DATE_TIME 0x0132
12596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TN_DATE_TIME CONSTRUCT_TAGID(TN_DATE_TIME, _ID_TN_DATE_TIME)
12606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TN_DATE_TIME EXIF_ASCII
12616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// ARTIST, person who created this image (of thumbnail)
12626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TN_ARTIST as the exif_tag_type (EXIF_ASCII)
12636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count can be any
12646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TN_ARTIST 0x013b
12656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TN_ARTIST CONSTRUCT_TAGID(TN_ARTIST, _ID_TN_ARTIST)
12666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TN_ARTIST EXIF_ASCII
12676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// White point chromaticity (of thumbnail)
12686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TN_WHITE_POINT as the exif_tag_type (EXIF_RATIONAL)
12696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 2
12706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TN_WHITE_POINT 0x013e
12716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TN_WHITE_POINT \
12726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(TN_WHITE_POINT, _ID_TN_WHITE_POINT)
12736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TN_WHITE_POINT EXIF_RATIONAL
12746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Chromaticities of primaries (of thumbnail)
12756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TN_PRIMARY_CHROMATICITIES as the exif_tag_type (EXIF_RATIONAL)
12766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 6
12776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TN_PRIMARY_CHROMATICITIES 0x013f
12786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TN_PRIMARY_CHROMATICITIES \
12796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(TN_PRIMARY_CHROMATICITIES, _ID_TN_PRIMARY_CHROMATICITIES)
12806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TN_PRIMARY_CHROMATICITIES EXIF_RATIONAL
12816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Offset to JPEG SOI (of thumbnail)
12826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TN_JPEGINTERCHANGE_FORMAT as the exif_tag_type (EXIF_LONG)
12836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count is undefined
12846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TN_JPEGINTERCHANGE_FORMAT 0x0201
12856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TN_JPEGINTERCHANGE_FORMAT \
12866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(TN_JPEGINTERCHANGE_FORMAT, _ID_TN_JPEGINTERCHANGE_FORMAT)
12876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TN_JPEGINTERCHANGE_FORMAT EXIF_LONG
12886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Bytes of JPEG data (of thumbnail)
12896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TN_JPEGINTERCHANGE_FORMAT_L as the exif_tag_type (EXIF_LONG)
12906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count is undefined
12916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TN_JPEGINTERCHANGE_FORMAT_L 0x0202
12926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TN_JPEGINTERCHANGE_FORMAT_L \
12936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(TN_JPEGINTERCHANGE_FORMAT_L, _ID_TN_JPEGINTERCHANGE_FORMAT_L)
12946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TN_JPEGINTERCHANGE_FORMAT_L EXIF_LONG
12956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Color space transformation matrix coefficients (of thumbnail)
12966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TN_YCBCR_COEFFICIENTS as the exif_tag_type (EXIF_RATIONAL)
12976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 3
12986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TN_YCBCR_COEFFICIENTS 0x0211
12996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TN_YCBCR_COEFFICIENTS \
13006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(TN_YCBCR_COEFFICIENTS, _ID_TN_YCBCR_COEFFICIENTS)
13016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TN_YCBCR_COEFFICIENTS EXIF_RATIONAL
13026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Subsampling ratio of Y to C (of thumbnail)
13036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TN_YCBCR_SUB_SAMPLING as the exif_tag_type (EXIF_SHORT)
13046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 2
13056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TN_YCBCR_SUB_SAMPLING 0x0212
13066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TN_YCBCR_SUB_SAMPLING \
13076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(TN_YCBCR_SUB_SAMPLING, _ID_TN_YCBCR_SUB_SAMPLING)
13086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TN_YCBCR_SUB_SAMPLING EXIF_SHORT
13096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Y and C positioning (of thumbnail)
13106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TN_YCBCR_POSITIONING as the exif_tag_type (EXIF_SHORT)
13116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
13126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TN_YCBCR_POSITIONING 0x0213
13136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TN_YCBCR_POSITIONING \
13146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(TN_YCBCR_POSITIONING, _ID_TN_YCBCR_POSITIONING)
13156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TN_YCBCR_POSITIONING    EXIF_SHORT
13166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Pair of black and white reference values (of thumbnail)
13176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TN_REFERENCE_BLACK_WHITE as the exif_tag_type (EXIF_RATIONAL)
13186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 6
13196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TN_REFERENCE_BLACK_WHITE 0x0214
13206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TN_REFERENCE_BLACK_WHITE \
13216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(TN_REFERENCE_BLACK_WHITE, _ID_TN_REFERENCE_BLACK_WHITE)
13226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TN_REFERENCE_BLACK_WHITE EXIF_RATIONAL
13236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Copyright holder (of thumbnail)
13246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_TN_COPYRIGHT as the exif_tag_type (EXIF_ASCII)
13256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count can be any
13266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_TN_COPYRIGHT 0x8298
13276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_TN_COPYRIGHT CONSTRUCT_TAGID(TN_COPYRIGHT, _ID_TN_COPYRIGHT)
13286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_TN_COPYRIGHT EXIF_ASCII
13296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Exposure time
13306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_EXPOSURE_TIME as the exif_tag_type (EXIF_RATIONAL)
13316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
13326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_EXPOSURE_TIME 0x829a
13336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_EXPOSURE_TIME \
13346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(EXPOSURE_TIME, _ID_EXPOSURE_TIME)
13356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_EXPOSURE_TIME EXIF_RATIONAL
13366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// F number
13376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_F_NUMBER as the exif_tag_type (EXIF_RATIONAL)
13386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
13396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_F_NUMBER 0x829d
13406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_F_NUMBER \
13416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(F_NUMBER, _ID_F_NUMBER)
13426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_F_NUMBER EXIF_RATIONAL
13436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Exif IFD pointer (NOT INTENDED to be accessible to user)
13446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_EXIF_IFD_PTR 0x8769
13456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_EXIF_IFD_PTR \
13466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(EXIF_IFD, _ID_EXIF_IFD_PTR)
13476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_EXIF_IFD_PTR EXIF_LONG
13486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
13496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// ICC_PROFILE (NOT INTENDED to be accessible to user)
13506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_ICC_PROFILE 0x8773
13516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_ICC_PROFILE CONSTRUCT_TAGID(ICC_PROFILE, _ID_ICC_PROFILE)
13526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_ICC_PROFILE EXIF_LONG
13536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Exposure program
13546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_EXPOSURE_PROGRAM as the exif_tag_type (EXIF_SHORT)
13556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
13566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_EXPOSURE_PROGRAM 0x8822
13576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_EXPOSURE_PROGRAM \
13586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(EXPOSURE_PROGRAM, _ID_EXPOSURE_PROGRAM)
13596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_EXPOSURE_PROGRAM EXIF_SHORT
13606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Spectral sensitivity
13616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_SPECTRAL_SENSITIVITY as the exif_tag_type (EXIF_ASCII)
13626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count can be any
13636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_SPECTRAL_SENSITIVITY 0x8824
13646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_SPECTRAL_SENSITIVITY \
13656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(SPECTRAL_SENSITIVITY, _ID_SPECTRAL_SENSITIVITY)
13666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_SPECTRAL_SENSITIVITY EXIF_ASCII
13676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// GPS IFD pointer (NOT INTENDED to be accessible to user)
13686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GPS_IFD_PTR 0x8825
13696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GPS_IFD_PTR \
13706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(GPS_IFD, _ID_GPS_IFD_PTR)
13716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GPS_IFD_PTR EXIF_LONG
13726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// ISO Speed Rating
13736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_ISO_SPEED_RATING as the exif_tag_type (EXIF_SHORT)
13746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count can be any
13756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_ISO_SPEED_RATING 0x8827
13766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_ISO_SPEED_RATING \
13776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(ISO_SPEED_RATING, _ID_ISO_SPEED_RATING)
13786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_ISO_SPEED_RATING EXIF_SHORT
13796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Optoelectric conversion factor
13806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_OECF as the exif_tag_type (EXIF_UNDEFINED)
13816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count can be any
13826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_OECF 0x8828
13836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_OECF CONSTRUCT_TAGID(OECF, _ID_OECF)
13846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_OECF EXIF_UNDEFINED
13856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Exif version
13866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_EXIF_VERSION as the exif_tag_type (EXIF_UNDEFINED)
13876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 4
13886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_EXIF_VERSION 0x9000
13896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_EXIF_VERSION \
13906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(EXIF_VERSION, _ID_EXIF_VERSION)
13916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_EXIF_VERSION EXIF_UNDEFINED
13926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Date and time of original data gerneration
13936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_EXIF_DATE_TIME_ORIGINAL as the exif_tag_type (EXIF_ASCII)
13946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// It should be 20 characters long including the null-terminating character.
13956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_EXIF_DATE_TIME_ORIGINAL 0x9003
13966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_EXIF_DATE_TIME_ORIGINAL \
13976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(EXIF_DATE_TIME_ORIGINAL, _ID_EXIF_DATE_TIME_ORIGINAL)
13986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_EXIF_DATE_TIME_ORIGINAL EXIF_ASCII
13996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Date and time of digital data generation
14006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_EXIF_DATE_TIME_DIGITIZED as the exif_tag_type (EXIF_ASCII)
14016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// It should be 20 characters long including the null-terminating character.
14026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_EXIF_DATE_TIME_DIGITIZED 0x9004
14036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_EXIF_DATE_TIME_DIGITIZED \
14046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(EXIF_DATE_TIME_DIGITIZED, _ID_EXIF_DATE_TIME_DIGITIZED)
14056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_EXIF_DATE_TIME_DIGITIZED EXIF_ASCII
14066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Meaning of each component
14076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_EXIF_COMPONENTS_CONFIG as the exif_tag_type (EXIF_UNDEFINED)
14086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 4
14096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_EXIF_COMPONENTS_CONFIG 0x9101
14106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_EXIF_COMPONENTS_CONFIG \
14116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(EXIF_COMPONENTS_CONFIG, _ID_EXIF_COMPONENTS_CONFIG)
14126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_EXIF_COMPONENTS_CONFIG EXIF_UNDEFINED
14136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Meaning of Image compression mode
14146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_EXIF_COMPRESSED_BITS_PER_PIXEL as the exif_tag_type (EXIF_RATIONAL)
14156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
14166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_EXIF_COMPRESSED_BITS_PER_PIXEL 0x9102
14176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_EXIF_COMPRESSED_BITS_PER_PIXEL \
14186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(EXIF_COMPRESSED_BITS_PER_PIXEL, _ID_EXIF_COMPRESSED_BITS_PER_PIXEL)
14196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_EXIF_COMPRESSED_BITS_PER_PIXEL EXIF_RATIONAL
14206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Shutter speed
14216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_SHUTTER_SPEED as the exif_tag_type (EXIF_SRATIONAL)
14226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
14236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_SHUTTER_SPEED 0x9201
14246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_SHUTTER_SPEED \
14256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(SHUTTER_SPEED, _ID_SHUTTER_SPEED)
14266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_SHUTTER_SPEED EXIF_SRATIONAL
14276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Aperture
14286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_APERTURE as the exif_tag_type (EXIF_RATIONAL)
14296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
14306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_APERTURE 0x9202
14316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_APERTURE CONSTRUCT_TAGID(APERTURE, _ID_APERTURE)
14326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_APERTURE EXIF_RATIONAL
14336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Brigthness
14346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_BRIGHTNESS as the exif_tag_type (EXIF_SRATIONAL)
14356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
14366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_BRIGHTNESS 0x9203
14376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_BRIGHTNESS CONSTRUCT_TAGID(BRIGHTNESS, _ID_BRIGHTNESS)
14386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_BRIGHTNESS EXIF_SRATIONAL
14396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Exposure bias
14406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_EXPOSURE_BIAS_VALUE as the exif_tag_type (EXIF_SRATIONAL)
14416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
14426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_EXPOSURE_BIAS_VALUE 0x9204
14436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_EXPOSURE_BIAS_VALUE \
14446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(EXPOSURE_BIAS_VALUE, _ID_EXPOSURE_BIAS_VALUE)
14456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_EXPOSURE_BIAS_VALUE EXIF_SRATIONAL
14466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Maximum lens aperture
14476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_MAX_APERTURE as the exif_tag_type (EXIF_RATIONAL)
14486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
14496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_MAX_APERTURE 0x9205
14506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_MAX_APERTURE CONSTRUCT_TAGID(MAX_APERTURE, _ID_MAX_APERTURE)
14516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_MAX_APERTURE EXIF_RATIONAL
14526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Subject distance
14536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_SUBJECT_DISTANCE as the exif_tag_type (EXIF_RATIONAL)
14546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
14556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_SUBJECT_DISTANCE 0x9206
14566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_SUBJECT_DISTANCE \
14576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(SUBJECT_DISTANCE, _ID_SUBJECT_DISTANCE)
14586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_SUBJECT_DISTANCE EXIF_RATIONAL
14596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Metering mode
14606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_METERING_MODE as the exif_tag_type (EXIF_SHORT)
14616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
14626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_METERING_MODE 0x9207
14636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_METERING_MODE \
14646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(METERING_MODE, _ID_METERING_MODE)
14656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_METERING_MODE EXIF_SHORT
14666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Light source
14676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_LIGHT_SOURCE as the exif_tag_type (EXIF_SHORT)
14686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
14696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_LIGHT_SOURCE 0x9208
14706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_LIGHT_SOURCE CONSTRUCT_TAGID(LIGHT_SOURCE, _ID_LIGHT_SOURCE)
14716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_LIGHT_SOURCE EXIF_SHORT
14726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Flash
14736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_FLASH as the exif_tag_type (EXIF_SHORT)
14746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
14756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_FLASH 0x9209
14766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_FLASH CONSTRUCT_TAGID(FLASH, _ID_FLASH)
14776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_FLASH EXIF_SHORT
14786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Lens focal length
14796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_FOCAL_LENGTH as the exif_tag_type (EXIF_RATIONAL)
14806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
14816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_FOCAL_LENGTH 0x920a
14826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_FOCAL_LENGTH CONSTRUCT_TAGID(FOCAL_LENGTH, _ID_FOCAL_LENGTH)
14836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_FOCAL_LENGTH EXIF_RATIONAL
14846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Subject area
14856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_SUBJECT_AREA as exif_tag_type (EXIF_SHORT)
14866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 2 or 3 or 4
14876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_SUBJECT_AREA 0x9214
14886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_SUBJECT_AREA CONSTRUCT_TAGID(SUBJECT_AREA, _ID_SUBJECT_AREA)
14896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_SUBJECT_AREA EXIF_SHORT
14906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Maker note
14916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_EXIF_MAKER_NOTE as the exif_tag_type (EXIF_UNDEFINED)
14926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count can be any
14936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_EXIF_MAKER_NOTE 0x927c
14946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_EXIF_MAKER_NOTE \
14956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(EXIF_MAKER_NOTE, _ID_EXIF_MAKER_NOTE)
14966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_EXIF_MAKER_NOTE EXIF_UNDEFINED
14976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// User comments
14986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_EXIF_USER_COMMENT as the exif_tag_type (EXIF_UNDEFINED)
14996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count can be any
15006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_EXIF_USER_COMMENT 0x9286
15016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_EXIF_USER_COMMENT \
15026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(EXIF_USER_COMMENT, _ID_EXIF_USER_COMMENT)
15036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_EXIF_USER_COMMENT EXIF_UNDEFINED
15046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Date time sub-seconds
15056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_SUBSEC_TIME as the exif_tag_type (EXIF_ASCII)
15066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count could be any
15076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_SUBSEC_TIME 0x9290
15086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_SUBSEC_TIME CONSTRUCT_TAGID(SUBSEC_TIME, _ID_SUBSEC_TIME)
15096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_SEBSEC_TIME EXIF_ASCII
15106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Date time original sub-seconds
15116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// use EXIFTAGTYPE_SUBSEC_TIME_ORIGINAL as the exif_tag_type (EXIF_ASCII)
15126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count could be any
15136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_SUBSEC_TIME_ORIGINAL 0x9291
15146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_SUBSEC_TIME_ORIGINAL \
15156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(SUBSEC_TIME_ORIGINAL, _ID_SUBSEC_TIME_ORIGINAL)
15166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_SUBSEC_TIME_ORIGINAL EXIF_ASCII
15176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Date time digitized sub-seconds
15186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// use EXIFTAGTYPE_SUBSEC_TIME_DIGITIZED as the exif_tag_type (EXIF_ASCII)
15196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count could be any
15206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_SUBSEC_TIME_DIGITIZED 0x9292
15216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_SUBSEC_TIME_DIGITIZED \
15226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(SUBSEC_TIME_DIGITIZED, _ID_SUBSEC_TIME_DIGITIZED)
15236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_SUBSEC_TIME_DIGITIZED EXIF_ASCII
15246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Supported Flashpix version
15256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_EXIF_FLASHPIX_VERSION as the exif_tag_type (EXIF_UNDEFINED)
15266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 4
15276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_EXIF_FLASHPIX_VERSION 0xa000
15286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_EXIF_FLASHPIX_VERSION \
15296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(EXIF_FLASHPIX_VERSION, _ID_EXIF_FLASHPIX_VERSION)
15306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_EXIF_FLASHPIX_VERSION EXIF_UNDEFINED
15316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev//  Color space information
15326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_EXIF_COLOR_SPACE as the exif_tag_type (EXIF_SHORT)
15336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
15346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_EXIF_COLOR_SPACE 0xa001
15356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_EXIF_COLOR_SPACE \
15366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(EXIF_COLOR_SPACE, _ID_EXIF_COLOR_SPACE)
15376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_EXIF_COLOR_SPACE EXIF_SHORT
15386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev//  Valid image width
15396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_EXIF_PIXEL_X_DIMENSION as the exif_tag_type (EXIF_SHORT)
15406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
15416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_EXIF_PIXEL_X_DIMENSION 0xa002
15426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_EXIF_PIXEL_X_DIMENSION \
15436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(EXIF_PIXEL_X_DIMENSION, _ID_EXIF_PIXEL_X_DIMENSION)
15446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_EXIF_PIXEL_X_DIMENSION EXIF_SHORT
15456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Valid image height
15466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_EXIF_PIXEL_Y_DIMENSION as the exif_tag_type (EXIF_SHORT)
15476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
15486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_EXIF_PIXEL_Y_DIMENSION 0xa003
15496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_EXIF_PIXEL_Y_DIMENSION \
15506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(EXIF_PIXEL_Y_DIMENSION, _ID_EXIF_PIXEL_Y_DIMENSION)
15516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_EXIF_PIXEL_Y_DIMENSION  EXIF_SHORT
15526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Related audio file
15536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_EXIF_RELATED_SOUND_FILE as the exif_tag_type (EXIF_ASCII)
15546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 13
15556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_RELATED_SOUND_FILE 0xa004
15566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_RELATED_SOUND_FILE \
15576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(RELATED_SOUND_FILE, _ID_RELATED_SOUND_FILE)
15586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_RELATED_SOUND_FILE EXIF_ASCII
15596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Interop IFD pointer (NOT INTENDED to be accessible to user)
15606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_INTEROP_IFD_PTR 0xa005
15616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_INTEROP_IFD_PTR CONSTRUCT_TAGID(INTEROP, _ID_INTEROP_IFD_PTR)
15626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_INTEROP_IFD_PTR EXIF_LONG
15636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Flash energy
15646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_EXIF_FLASH_ENERGY as the exif_tag_type (EXIF_RATIONAL)
15656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
15666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_FLASH_ENERGY 0xa20b
15676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_FLASH_ENERGY CONSTRUCT_TAGID(FLASH_ENERGY, _ID_FLASH_ENERGY)
15686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_FLASH_ENERGY EXIF_RATIONAL
15696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Spatial frequency response
15706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_SPATIAL_FREQ_RESPONSE as exif_tag_type (EXIF_UNDEFINED)
15716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count would be any
15726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_SPATIAL_FREQ_RESPONSE 0xa20c
15736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_SPATIAL_FREQ_RESPONSE \
15746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(SPATIAL_FREQ_RESPONSE, _ID_SPATIAL_FREQ_RESPONSE)
15756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_SPATIAL_FREQ_RESPONSE EXIF_UNDEFINED
15766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Focal plane x resolution
15776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_FOCAL_PLANE_X_RESOLUTION as exif_tag_type (EXIF_RATIONAL)
15786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
15796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_FOCAL_PLANE_X_RESOLUTION 0xa20e
15806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_FOCAL_PLANE_X_RESOLUTION \
15816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(FOCAL_PLANE_X_RESOLUTION, _ID_FOCAL_PLANE_X_RESOLUTION)
15826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_FOCAL_PLANE_X_RESOLUTION EXIF_RATIONAL
15836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Focal plane y resolution
15846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_FOCAL_PLANE_Y_RESOLUTION as exif_tag_type (EXIF_RATIONAL)
15856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
15866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_FOCAL_PLANE_Y_RESOLUTION 0xa20f
15876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_FOCAL_PLANE_Y_RESOLUTION \
15886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(FOCAL_PLANE_Y_RESOLUTION, _ID_FOCAL_PLANE_Y_RESOLUTION)
15896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_FOCAL_PLANE_Y_RESOLUTION EXIF_RATIONAL
15906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Focal plane  resolution unit
15916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_FOCAL_PLANE_RESOLUTION_UNIT as exif_tag_type (EXIF_SHORT)
15926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
15936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_FOCAL_PLANE_RESOLUTION_UNIT 0xa210
15946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_FOCAL_PLANE_RESOLUTION_UNIT \
15956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(FOCAL_PLANE_RESOLUTION_UNIT, _ID_FOCAL_PLANE_RESOLUTION_UNIT)
15966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_FOCAL_PLANE_RESOLUTION_UNIT EXIF_SHORT
15976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Subject location
15986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_SUBJECT_LOCATION as the exif_tag_type (EXIF_SHORT)
15996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 2
16006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_SUBJECT_LOCATION 0xa214
16016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_SUBJECT_LOCATION \
16026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(SUBJECT_LOCATION, _ID_SUBJECT_LOCATION)
16036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_SUBJECT_LOCATION EXIF_SHORT
16046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Exposure index
16056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_EXPOSURE_INDEX as the exif_tag_type (EXIF_RATIONAL)
16066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
16076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_EXPOSURE_INDEX 0xa215
16086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_EXPOSURE_INDEX \
16096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(EXPOSURE_INDEX, _ID_EXPOSURE_INDEX)
16106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_EXPOSURE_INDEX EXIF_RATIONAL
16116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Sensing method
16126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_SENSING_METHOD as the exif_tag_type (EXIF_SHORT)
16136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
16146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_SENSING_METHOD 0xa217
16156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_SENSING_METHOD \
16166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(SENSING_METHOD, _ID_SENSING_METHOD)
16176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_SENSING_METHOD EXIF_SHORT
16186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// File source
16196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_FILE_SOURCE as the exif_tag_type (EXIF_UNDEFINED)
16206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
16216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_FILE_SOURCE 0xa300
16226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_FILE_SOURCE CONSTRUCT_TAGID(FILE_SOURCE, _ID_FILE_SOURCE)
16236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_FILE_SOURCE EXIF_UNDEFINED
16246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Scene type
16256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_SCENE_TYPE as the exif_tag_type (EXIF_UNDEFINED)
16266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
16276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_SCENE_TYPE 0xa301
16286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_SCENE_TYPE CONSTRUCT_TAGID(SCENE_TYPE, _ID_SCENE_TYPE)
16296f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_SCENE_TYPE EXIF_UNDEFINED
16306f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// CFA pattern
16316f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_CFA_PATTERN as the exif_tag_type (EXIF_UNDEFINED)
16326f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count can be any
16336f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_CFA_PATTERN 0xa302
16346f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_CFA_PATTERN CONSTRUCT_TAGID(CFA_PATTERN, _ID_CFA_PATTERN)
16356f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_CFA_PATTERN EXIF_UNDEFINED
16366f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Custom image processing
16376f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_CUSTOM_RENDERED as the exif_tag_type (EXIF_SHORT)
16386f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
16396f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_CUSTOM_RENDERED 0xa401
16406f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_CUSTOM_RENDERED \
16416f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(CUSTOM_RENDERED, _ID_CUSTOM_RENDERED)
16426f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_CUSTOM_RENDERED EXIF_SHORT
16436f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Exposure mode
16446f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_EXPOSURE_MODE as the exif_tag_type (EXIF_SHORT)
16456f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
16466f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_EXPOSURE_MODE 0xa402
16476f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_EXPOSURE_MODE \
16486f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(EXPOSURE_MODE, _ID_EXPOSURE_MODE)
16496f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_EXPOSURE_MODE EXIF_SHORT
16506f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// White balance
16516f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_WHITE_BALANCE as the exif_tag_type (EXIF_SHORT)
16526f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
16536f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_WHITE_BALANCE 0xa403
16546f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_WHITE_BALANCE \
16556f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(WHITE_BALANCE, _ID_WHITE_BALANCE)
16566f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_WHITE_BALANCE EXIF_SHORT
16576f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Digital zoom ratio
16586f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_DIGITAL_ZOOM_RATIO as the exif_tag_type (EXIF_RATIONAL)
16596f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
16606f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_DIGITAL_ZOOM_RATIO 0xa404
16616f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_DIGITAL_ZOOM_RATIO \
16626f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(DIGITAL_ZOOM_RATIO, _ID_DIGITAL_ZOOM_RATIO)
16636f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_DIGITAL_ZOOM_RATIO EXIF_RATIONAL
16646f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Focal length in 35mm film
16656f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_FOCAL_LENGTH_35MM as the exif_tag_type (EXIF_SHORT)
16666f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
16676f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_FOCAL_LENGTH_35MM 0xa405
16686f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_FOCAL_LENGTH_35MM CONSTRUCT_TAGID(FOCAL_LENGTH_35MM, _ID_FOCAL_LENGTH_35MM)
16696f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_FOCAL_LENGTH_35MM EXIF_SHORT
16706f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Scene capture type
16716f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_SCENE_CAPTURE_TYPE as the exif_tag_type (EXIF_SHORT)
16726f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
16736f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_SCENE_CAPTURE_TYPE 0xa406
16746f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_SCENE_CAPTURE_TYPE \
16756f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(SCENE_CAPTURE_TYPE, _ID_SCENE_CAPTURE_TYPE)
16766f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_SCENE_CAPTURE_TYPE EXIF_SHORT
16776f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Gain control
16786f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_GAIN_CONTROL as the exif_tag_type (EXIF_SHORT)
16796f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
16806f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_GAIN_CONTROL 0xa407
16816f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_GAIN_CONTROL CONSTRUCT_TAGID(GAIN_CONTROL, _ID_GAIN_CONTROL)
16826f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_GAIN_CONTROL EXIF_SHORT
16836f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Contrast
16846f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_CONTRAST as the exif_tag_type (EXIF_SHORT)
16856f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
16866f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_CONTRAST 0xa408
16876f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_CONTRAST CONSTRUCT_TAGID(CONTRAST, _ID_CONTRAST)
16886f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_CONTRAST EXIF_SHORT
16896f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Saturation
16906f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_SATURATION as the exif_tag_type (EXIF_SHORT)
16916f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
16926f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_SATURATION  0xa409
16936f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_SATURATION CONSTRUCT_TAGID(SATURATION, _ID_SATURATION)
16946f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_SATURATION EXIF_SHORT
16956f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Sharpness
16966f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_SHARPNESS as the exif_tag_type (EXIF_SHORT)
16976f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
16986f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_SHARPNESS 0xa40a
16996f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_SHARPNESS CONSTRUCT_TAGID(SHARPNESS, _ID_SHARPNESS)
17006f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_SHARPNESS EXIF_SHORT
17016f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Device settings description
17026f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGID_DEVICE_SETTINGS_DESCRIPTION as exif_tag_type (EXIF_UNDEFINED)
17036f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count could be any
17046f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_DEVICE_SETTINGS_DESCRIPTION 0xa40b
17056f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_DEVICE_SETTINGS_DESCRIPTION \
17066f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(DEVICE_SETTINGS_DESCRIPTION, _ID_DEVICE_SETTINGS_DESCRIPTION)
17076f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_DEVIC_SETTIGNS_DESCRIPTION EXIF_UNDEFINED
17086f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Subject distance range
17096f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_SUBJECT_DISTANCE_RANGE as the exif_tag_type (EXIF_SHORT)
17106f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 1
17116f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_SUBJECT_DISTANCE_RANGE 0xa40c
17126f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_SUBJECT_DISTANCE_RANGE \
17136f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev  CONSTRUCT_TAGID(SUBJECT_DISTANCE_RANGE, _ID_SUBJECT_DISTANCE_RANGE)
17146f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_SUBJECT_DISTANCE_RANGE EXIF_SHORT
17156f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Unique image id
17166f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAG_TYPE_IMAGE_UIDas the exif_tag_type (EXIF_ASCII)
17176f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count should be 33
17186f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_IMAGE_UID 0xa420
17196f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_IMAGE_UID CONSTRUCT_TAGID(IMAGE_UID, _ID_IMAGE_UID)
17206f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_IMAGE_UID EXIF_ASCII
17216f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// PIM tag
17226f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Use EXIFTAGTYPE_PIM_TAG as the exif_tag_type (EXIF_UNDEFINED)
17236f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev// Count can be any
17246f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define _ID_PIM 0xc4a5
17256f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGID_PIM_TAG CONSTRUCT_TAGID(PIM, _ID_PIM)
17266f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#define EXIFTAGTYPE_PIM_TAG EXIF_UNDEFINED
17276f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev#endif // __QEXIF_H__
17286f83d735d8e3b918da42e6b559fcd0efb78133e5Iliyan Malchev
1729