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