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