ExifTIFFTagSet.java revision 13532:859397229dc4
1204431Sraj/*
2204431Sraj * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
3204431Sraj * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4204431Sraj *
5204431Sraj * This code is free software; you can redistribute it and/or modify it
6204431Sraj * under the terms of the GNU General Public License version 2 only, as
7204431Sraj * published by the Free Software Foundation.  Oracle designates this
8204431Sraj * particular file as subject to the "Classpath" exception as provided
9204431Sraj * by Oracle in the LICENSE file that accompanied this code.
10204431Sraj *
11204431Sraj * This code is distributed in the hope that it will be useful, but WITHOUT
12204431Sraj * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13204431Sraj * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14204431Sraj * version 2 for more details (a copy is included in the LICENSE file that
15204431Sraj * accompanied this code).
16204431Sraj *
17204431Sraj * You should have received a copy of the GNU General Public License version
18204431Sraj * 2 along with this work; if not, write to the Free Software Foundation,
19204431Sraj * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20204431Sraj *
21204431Sraj * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22204431Sraj * or visit www.oracle.com if you need additional information or have any
23204431Sraj * questions.
24204431Sraj */
25204431Srajpackage javax.imageio.plugins.tiff;
26204431Sraj
27204431Srajimport java.nio.charset.StandardCharsets;
28204431Srajimport java.util.ArrayList;
29204431Srajimport java.util.List;
30204431Sraj
31204431Sraj/**
32204431Sraj * A class representing the tags found in an Exif IFD.  Exif is a
33204431Sraj * standard for annotating images used by most digital camera
34204431Sraj * manufacturers.  The Exif specification may be found at
35204431Sraj * <a href="http://www.exif.org/Exif2-2.PDF">
36204431Sraj * <code>http://www.exif.org/Exif2-2.PDF</code>
37204431Sraj * </a>.
38204431Sraj *
39204431Sraj * <p> The definitions of the data types referenced by the field
40204431Sraj * definitions may be found in the {@link TIFFTag TIFFTag} class.
41204431Sraj *
42204431Sraj * @since 9
43204431Sraj */
44204431Srajpublic class ExifTIFFTagSet extends TIFFTagSet {
45204431Sraj
46204431Sraj    private static ExifTIFFTagSet theInstance = null;
47204431Sraj
48204431Sraj    /**
49204431Sraj     * A tag pointing to a GPS info IFD (type LONG).  This tag has
50204431Sraj     * been superseded by {@link ExifParentTIFFTagSet#TAG_GPS_INFO_IFD_POINTER}.
51204431Sraj     */
52204431Sraj    public static final int TAG_GPS_INFO_IFD_POINTER = 34853;
53204431Sraj
54204431Sraj    /** A tag pointing to an interoperability IFD (type LONG). */
55204431Sraj    public static final int TAG_INTEROPERABILITY_IFD_POINTER = 40965;
56204431Sraj
57204431Sraj    /**
58204431Sraj     * A tag containing the Exif version number (type UNDEFINED, count =
59204431Sraj     * 4).  Conformance to the Exif 2.1 standard is indicated using
60204431Sraj     * the ASCII value "0210" (with no terminating NUL).
61204431Sraj     *
62204431Sraj     * @see #EXIF_VERSION_2_1
63204431Sraj     * @see #EXIF_VERSION_2_2
64204431Sraj     */
65204431Sraj    public static final int TAG_EXIF_VERSION = 36864;
66238742Simp
67204431Sraj    /**
68204431Sraj     * A value to be used with the "ExifVersion" tag to indicate Exif version
69204431Sraj     * 2.1.  The value equals the US-ASCII encoding of the byte array
70204431Sraj     * <code>{'0', '2', '1', '0'}</code>.
71204431Sraj     *
72204431Sraj     * @see #TAG_EXIF_VERSION
73204431Sraj     */
74204431Sraj    public static final String EXIF_VERSION_2_1 =
75204431Sraj        new String(new byte[] { '0', '2', '1', '0' },
76204431Sraj        StandardCharsets.US_ASCII);
77204431Sraj
78204431Sraj    /**
79204431Sraj     * A value to be used with the "ExifVersion" tag to indicate Exif version
80204431Sraj     * 2.2.  The value equals the US-ASCII encoding of the byte array
81204431Sraj     * <code>{'0', '2', '2', '0'}</code>.
82204431Sraj     *
83204431Sraj     * @see #TAG_EXIF_VERSION
84204431Sraj     */
85204431Sraj    public static final String EXIF_VERSION_2_2 =
86204431Sraj        new String(new byte[] { '0', '2', '2', '0' },
87204431Sraj        StandardCharsets.US_ASCII);
88204431Sraj
89204431Sraj    /**
90204431Sraj     * A tag indicating the FlashPix version number (type UNDEFINED,
91204431Sraj     * count = 4).
92204431Sraj     */
93204431Sraj    public static final int TAG_FLASHPIX_VERSION = 40960;
94204431Sraj
95204431Sraj    /**
96     * A tag indicating the color space information (type SHORT).  The
97     * legal values are given by the <code>COLOR_SPACE_*</code>
98     * constants.
99     *
100     * @see #COLOR_SPACE_SRGB
101     * @see #COLOR_SPACE_UNCALIBRATED
102     */
103    public static final int TAG_COLOR_SPACE = 40961;
104
105    /**
106     * A value to be used with the "ColorSpace" tag.
107     *
108     * @see #TAG_COLOR_SPACE
109     */
110    public static final int COLOR_SPACE_SRGB = 1;
111
112    /**
113     * A value to be used with the "ColorSpace" tag.
114     *
115     * @see #TAG_COLOR_SPACE
116     */
117    public static final int COLOR_SPACE_UNCALIBRATED = 0xFFFF;
118
119    /**
120     * A tag containing the components configuration information (type
121     * UNDEFINED, count = 4).
122     *
123     * @see #COMPONENTS_CONFIGURATION_DOES_NOT_EXIST
124     * @see #COMPONENTS_CONFIGURATION_Y
125     * @see #COMPONENTS_CONFIGURATION_CB
126     * @see #COMPONENTS_CONFIGURATION_CR
127     * @see #COMPONENTS_CONFIGURATION_R
128     * @see #COMPONENTS_CONFIGURATION_G
129     * @see #COMPONENTS_CONFIGURATION_B
130     */
131    public static final int TAG_COMPONENTS_CONFIGURATION = 37121;
132
133    /**
134     * A value to be used with the "ComponentsConfiguration" tag.
135     *
136     * @see #TAG_COMPONENTS_CONFIGURATION
137     */
138    public static final int COMPONENTS_CONFIGURATION_DOES_NOT_EXIST = 0;
139
140    /**
141     * A value to be used with the "ComponentsConfiguration" tag.
142     *
143     * @see #TAG_COMPONENTS_CONFIGURATION
144     */
145    public static final int COMPONENTS_CONFIGURATION_Y = 1;
146
147    /**
148     * A value to be used with the "ComponentsConfiguration" tag.
149     *
150     * @see #TAG_COMPONENTS_CONFIGURATION
151     */
152    public static final int COMPONENTS_CONFIGURATION_CB = 2;
153
154    /**
155     * A value to be used with the "ComponentsConfiguration" tag.
156     *
157     * @see #TAG_COMPONENTS_CONFIGURATION
158     */
159    public static final int COMPONENTS_CONFIGURATION_CR = 3;
160
161    /**
162     * A value to be used with the "ComponentsConfiguration" tag.
163     *
164     * @see #TAG_COMPONENTS_CONFIGURATION
165     */
166    public static final int COMPONENTS_CONFIGURATION_R = 4;
167
168    /**
169     * A value to be used with the "ComponentsConfiguration" tag.
170     *
171     * @see #TAG_COMPONENTS_CONFIGURATION
172     */
173    public static final int COMPONENTS_CONFIGURATION_G = 5;
174
175    /**
176     * A value to be used with the "ComponentsConfiguration" tag.
177     *
178     * @see #TAG_COMPONENTS_CONFIGURATION
179     */
180    public static final int COMPONENTS_CONFIGURATION_B = 6;
181
182    /**
183     * A tag indicating the number of compressed bits per pixel
184     * (type RATIONAL).
185     */
186    public static final int TAG_COMPRESSED_BITS_PER_PIXEL = 37122;
187
188    /**
189     * A tag indicating the pixel X dimension (type SHORT or LONG).
190     * This value records the valid width of the meaningful image for
191     * a compressed file, whether or not there is padding or a restart
192     * marker.
193     */
194    public static final int TAG_PIXEL_X_DIMENSION = 40962;
195
196    /**
197     * A tag indicating the pixel Y dimension (type SHORT or LONG).
198     * This value records the valid height of the meaningful image for
199     * a compressed file, whether or not there is padding or a restart
200     * marker.
201     */
202    public static final int TAG_PIXEL_Y_DIMENSION = 40963;
203
204    /**
205     * A tag indicating a manufacturer-defined maker note (type
206     * UNDEFINED).
207     */
208    public static final int TAG_MAKER_NOTE = 37500;
209
210    /**
211     * A tag indicating a manufacturer-defined marker note (type UNDEFINED).
212     * This tag has been superseded by {@link #TAG_MAKER_NOTE}.
213     */
214    public static final int TAG_MARKER_NOTE = TAG_MAKER_NOTE;
215
216    /**
217     * A tag indicating a user comment (type UNDEFINED).  The first 8
218     * bytes are used to specify the character encoding.
219     */
220    public static final int TAG_USER_COMMENT = 37510;
221
222    /**
223     * A tag indicating the name of a related sound file (type ASCII).
224     */
225    public static final int TAG_RELATED_SOUND_FILE = 40964;
226
227    /**
228     * A tag indicating the date and time when the original image was
229     * generated (type ASCII).
230     */
231    public static final int TAG_DATE_TIME_ORIGINAL = 36867;
232
233    /**
234     * A tag indicating the date and time when the image was stored as
235     * digital data (type ASCII).
236     */
237    public static final int TAG_DATE_TIME_DIGITIZED = 36868;
238
239    /**
240     * A tag used to record fractions of seconds for the "DateTime" tag
241     * (type ASCII).
242     */
243    public static final int TAG_SUB_SEC_TIME = 37520;
244
245    /**
246     * A tag used to record fractions of seconds for the
247     * "DateTimeOriginal" tag (type ASCII).
248     */
249    public static final int TAG_SUB_SEC_TIME_ORIGINAL = 37521;
250
251    /**
252     * A tag used to record fractions of seconds for the
253     * "DateTimeDigitized" tag (type ASCII).
254     */
255    public static final int TAG_SUB_SEC_TIME_DIGITIZED = 37522;
256
257    /**
258     * A tag indicating the exposure time, in seconds (type RATIONAL).
259     */
260    public static final int TAG_EXPOSURE_TIME = 33434;
261
262    /**
263     * A tag indicating the F number (type RATIONAL).
264     */
265    public static final int TAG_F_NUMBER = 33437;
266
267    /**
268     * A tag indicating the class of the programs used to set exposure
269     * when the picture was taken (type SHORT).
270     *
271     * @see #EXPOSURE_PROGRAM_NOT_DEFINED
272     * @see #EXPOSURE_PROGRAM_MANUAL
273     * @see #EXPOSURE_PROGRAM_NORMAL_PROGRAM
274     * @see #EXPOSURE_PROGRAM_APERTURE_PRIORITY
275     * @see #EXPOSURE_PROGRAM_SHUTTER_PRIORITY
276     * @see #EXPOSURE_PROGRAM_CREATIVE_PROGRAM
277     * @see #EXPOSURE_PROGRAM_ACTION_PROGRAM
278     * @see #EXPOSURE_PROGRAM_PORTRAIT_MODE
279     * @see #EXPOSURE_PROGRAM_LANDSCAPE_MODE
280     * @see #EXPOSURE_PROGRAM_MAX_RESERVED
281     */
282    public static final int TAG_EXPOSURE_PROGRAM = 34850;
283
284    /**
285     * A value to be used with the "ExposureProgram" tag.
286     *
287     * @see #TAG_EXPOSURE_PROGRAM
288     */
289    public static final int EXPOSURE_PROGRAM_NOT_DEFINED = 0;
290
291    /**
292     * A value to be used with the "ExposureProgram" tag.
293     *
294     * @see #TAG_EXPOSURE_PROGRAM
295     */
296    public static final int EXPOSURE_PROGRAM_MANUAL = 1;
297
298    /**
299     * A value to be used with the "ExposureProgram" tag.
300     *
301     * @see #TAG_EXPOSURE_PROGRAM
302     */
303    public static final int EXPOSURE_PROGRAM_NORMAL_PROGRAM = 2;
304
305    /**
306     * A value to be used with the "ExposureProgram" tag.
307     *
308     * @see #TAG_EXPOSURE_PROGRAM
309     */
310    public static final int EXPOSURE_PROGRAM_APERTURE_PRIORITY = 3;
311
312    /**
313     * A value to be used with the "ExposureProgram" tag.
314     *
315     * @see #TAG_EXPOSURE_PROGRAM
316     */
317    public static final int EXPOSURE_PROGRAM_SHUTTER_PRIORITY = 4;
318
319    /**
320     * A value to be used with the "ExposureProgram" tag.
321     *
322     * @see #TAG_EXPOSURE_PROGRAM
323     */
324    public static final int EXPOSURE_PROGRAM_CREATIVE_PROGRAM = 5;
325
326    /**
327     * A value to be used with the "ExposureProgram" tag.
328     *
329     * @see #TAG_EXPOSURE_PROGRAM
330     */
331    public static final int EXPOSURE_PROGRAM_ACTION_PROGRAM = 6;
332
333    /**
334     * A value to be used with the "ExposureProgram" tag.
335     *
336     * @see #TAG_EXPOSURE_PROGRAM
337     */
338    public static final int EXPOSURE_PROGRAM_PORTRAIT_MODE = 7;
339
340    /**
341     * A value to be used with the "ExposureProgram" tag.
342     *
343     * @see #TAG_EXPOSURE_PROGRAM
344     */
345    public static final int EXPOSURE_PROGRAM_LANDSCAPE_MODE = 8;
346
347    /**
348     * A value to be used with the "ExposureProgram" tag.
349     *
350     * @see #TAG_EXPOSURE_PROGRAM
351     */
352    public static final int EXPOSURE_PROGRAM_MAX_RESERVED = 255;
353
354    /**
355     * A tag indicating the spectral sensitivity of each channel of
356     * the camera used (type ASCII).  The tag value is an ASCII string
357     * compatible with the ASTM standard.
358     */
359    public static final int TAG_SPECTRAL_SENSITIVITY = 34852;
360
361    /**
362     * A tag indicating the ISO speed and ISO latitude of the camera
363     * or input device, as specified in ISO 12232<sup>xiv</sup> (type
364     * SHORT).
365     */
366    public static final int TAG_ISO_SPEED_RATINGS= 34855;
367
368    /**
369     * A tag indicating the optoelectric conversion function,
370     * specified in ISO 14254<sup>xv</sup> (type UNDEFINED).  OECF is
371     * the relationship between the camera optical input and the image
372     * values.
373     */
374    public static final int TAG_OECF = 34856;
375
376    /**
377     * A tag indicating the shutter speed (type SRATIONAL).
378     */
379    public static final int TAG_SHUTTER_SPEED_VALUE = 37377;
380
381    /**
382     * A tag indicating the lens aperture (type RATIONAL).
383     */
384    public static final int TAG_APERTURE_VALUE = 37378;
385
386    /**
387     * A tag indicating the value of brightness (type SRATIONAL).
388     */
389    public static final int TAG_BRIGHTNESS_VALUE = 37379;
390
391    /**
392     * A tag indicating the exposure bias (type SRATIONAL).
393     */
394    public static final int TAG_EXPOSURE_BIAS_VALUE = 37380;
395
396    /**
397     * A tag indicating the smallest F number of the lens (type
398     * RATIONAL).
399     */
400    public static final int TAG_MAX_APERTURE_VALUE = 37381;
401
402    /**
403     * A tag indicating the distance to the subject, in meters (type
404     * RATIONAL).
405     */
406    public static final int TAG_SUBJECT_DISTANCE = 37382;
407
408    /**
409     * A tag indicating the metering mode (type SHORT).
410     *
411     * @see #METERING_MODE_UNKNOWN
412     * @see #METERING_MODE_AVERAGE
413     * @see #METERING_MODE_CENTER_WEIGHTED_AVERAGE
414     * @see #METERING_MODE_SPOT
415     * @see #METERING_MODE_MULTI_SPOT
416     * @see #METERING_MODE_PATTERN
417     * @see #METERING_MODE_PARTIAL
418     * @see #METERING_MODE_MIN_RESERVED
419     * @see #METERING_MODE_MAX_RESERVED
420     * @see #METERING_MODE_OTHER
421     */
422    public static final int TAG_METERING_MODE = 37383;
423
424    /**
425     * A value to be used with the "MeteringMode" tag.
426     *
427     * @see #TAG_METERING_MODE
428     */
429    public static final int METERING_MODE_UNKNOWN = 0;
430
431    /**
432     * A value to be used with the "MeteringMode" tag.
433     *
434     * @see #TAG_METERING_MODE
435     */
436    public static final int METERING_MODE_AVERAGE = 1;
437
438    /**
439     * A value to be used with the "MeteringMode" tag.
440     *
441     * @see #TAG_METERING_MODE
442     */
443    public static final int METERING_MODE_CENTER_WEIGHTED_AVERAGE = 2;
444
445    /**
446     * A value to be used with the "MeteringMode" tag.
447     *
448     * @see #TAG_METERING_MODE
449     */
450    public static final int METERING_MODE_SPOT = 3;
451
452    /**
453     * A value to be used with the "MeteringMode" tag.
454     *
455     * @see #TAG_METERING_MODE
456     */
457    public static final int METERING_MODE_MULTI_SPOT = 4;
458
459    /**
460     * A value to be used with the "MeteringMode" tag.
461     *
462     * @see #TAG_METERING_MODE
463     */
464    public static final int METERING_MODE_PATTERN = 5;
465
466    /**
467     * A value to be used with the "MeteringMode" tag.
468     *
469     * @see #TAG_METERING_MODE
470     */
471    public static final int METERING_MODE_PARTIAL = 6;
472
473    /**
474     * A value to be used with the "MeteringMode" tag.
475     *
476     * @see #TAG_METERING_MODE
477     */
478    public static final int METERING_MODE_MIN_RESERVED = 7;
479
480    /**
481     * A value to be used with the "MeteringMode" tag.
482     *
483     * @see #TAG_METERING_MODE
484     */
485    public static final int METERING_MODE_MAX_RESERVED = 254;
486
487    /**
488     * A value to be used with the "MeteringMode" tag.
489     *
490     * @see #TAG_METERING_MODE
491     */
492    public static final int METERING_MODE_OTHER = 255;
493
494    /**
495     * A tag indicatingthe kind of light source (type SHORT).
496     *
497     * @see #LIGHT_SOURCE_UNKNOWN
498     * @see #LIGHT_SOURCE_DAYLIGHT
499     * @see #LIGHT_SOURCE_FLUORESCENT
500     * @see #LIGHT_SOURCE_TUNGSTEN
501     * @see #LIGHT_SOURCE_STANDARD_LIGHT_A
502     * @see #LIGHT_SOURCE_STANDARD_LIGHT_B
503     * @see #LIGHT_SOURCE_STANDARD_LIGHT_C
504     * @see #LIGHT_SOURCE_D55
505     * @see #LIGHT_SOURCE_D65
506     * @see #LIGHT_SOURCE_D75
507     * @see #LIGHT_SOURCE_OTHER
508     */
509    public static final int TAG_LIGHT_SOURCE = 37384;
510
511    /**
512     * A value to be used with the "LightSource" tag.
513     *
514     * @see #TAG_LIGHT_SOURCE
515     */
516    public static final int LIGHT_SOURCE_UNKNOWN = 0;
517
518    /**
519     * A value to be used with the "LightSource" tag.
520     *
521     * @see #TAG_LIGHT_SOURCE
522     */
523    public static final int LIGHT_SOURCE_DAYLIGHT = 1;
524
525    /**
526     * A value to be used with the "LightSource" tag.
527     *
528     * @see #TAG_LIGHT_SOURCE
529     */
530    public static final int LIGHT_SOURCE_FLUORESCENT = 2;
531
532    /**
533     * A value to be used with the "LightSource" tag.
534     *
535     * @see #TAG_LIGHT_SOURCE
536     */
537    public static final int LIGHT_SOURCE_TUNGSTEN = 3;
538
539    /**
540     * A value to be used with the "LightSource" tag.
541     *
542     * @see #TAG_LIGHT_SOURCE
543     */
544    public static final int LIGHT_SOURCE_FLASH = 4;
545
546    /**
547     * A value to be used with the "LightSource" tag.
548     *
549     * @see #TAG_LIGHT_SOURCE
550     */
551    public static final int LIGHT_SOURCE_FINE_WEATHER = 9;
552
553    /**
554     * A value to be used with the "LightSource" tag.
555     *
556     * @see #TAG_LIGHT_SOURCE
557     */
558    public static final int LIGHT_SOURCE_CLOUDY_WEATHER = 10;
559
560    /**
561     * A value to be used with the "LightSource" tag.
562     *
563     * @see #TAG_LIGHT_SOURCE
564     */
565    public static final int LIGHT_SOURCE_SHADE = 11;
566
567    /**
568     * A value to be used with the "LightSource" tag.
569     *
570     * @see #TAG_LIGHT_SOURCE
571     */
572    public static final int LIGHT_SOURCE_DAYLIGHT_FLUORESCENT = 12;
573
574    /**
575     * A value to be used with the "LightSource" tag.
576     *
577     * @see #TAG_LIGHT_SOURCE
578     */
579    public static final int LIGHT_SOURCE_DAY_WHITE_FLUORESCENT = 13;
580
581    /**
582     * A value to be used with the "LightSource" tag.
583     *
584     * @see #TAG_LIGHT_SOURCE
585     */
586    public static final int LIGHT_SOURCE_COOL_WHITE_FLUORESCENT = 14;
587
588    /**
589     * A value to be used with the "LightSource" tag.
590     *
591     * @see #TAG_LIGHT_SOURCE
592     */
593    public static final int LIGHT_SOURCE_WHITE_FLUORESCENT = 15;
594
595    /**
596     * A value to be used with the "LightSource" tag.
597     *
598     * @see #TAG_LIGHT_SOURCE
599     */
600    public static final int LIGHT_SOURCE_STANDARD_LIGHT_A = 17;
601
602    /**
603     * A value to be used with the "LightSource" tag.
604     *
605     * @see #TAG_LIGHT_SOURCE
606     */
607    public static final int LIGHT_SOURCE_STANDARD_LIGHT_B = 18;
608
609    /**
610     * A value to be used with the "LightSource" tag.
611     *
612     * @see #TAG_LIGHT_SOURCE
613     */
614    public static final int LIGHT_SOURCE_STANDARD_LIGHT_C = 19;
615
616    /**
617     * A value to be used with the "LightSource" tag.
618     *
619     * @see #TAG_LIGHT_SOURCE
620     */
621    public static final int LIGHT_SOURCE_D55 = 20;
622
623    /**
624     * A value to be used with the "LightSource" tag.
625     *
626     * @see #TAG_LIGHT_SOURCE
627     */
628    public static final int LIGHT_SOURCE_D65 = 21;
629
630    /**
631     * A value to be used with the "LightSource" tag.
632     *
633     * @see #TAG_LIGHT_SOURCE
634     */
635    public static final int LIGHT_SOURCE_D75 = 22;
636
637    /**
638     * A value to be used with the "LightSource" tag.
639     *
640     * @see #TAG_LIGHT_SOURCE
641     */
642    public static final int LIGHT_SOURCE_D50 = 23;
643
644    /**
645     * A value to be used with the "LightSource" tag.
646     *
647     * @see #TAG_LIGHT_SOURCE
648     */
649    public static final int LIGHT_SOURCE_ISO_STUDIO_TUNGSTEN = 24;
650
651    /**
652     * A value to be used with the "LightSource" tag.
653     *
654     * @see #TAG_LIGHT_SOURCE
655     */
656    public static final int LIGHT_SOURCE_OTHER = 255;
657
658    /**
659     * A tag indicating the flash firing status and flash return
660     * status (type SHORT).
661     *
662     * @see #FLASH_DID_NOT_FIRE
663     * @see #FLASH_FIRED
664     * @see #FLASH_STROBE_RETURN_LIGHT_NOT_DETECTED
665     * @see #FLASH_STROBE_RETURN_LIGHT_DETECTED
666     */
667    public static final int TAG_FLASH = 37385;
668
669    /**
670     * A value to be used with the "Flash" tag, indicating that the
671     * flash did not fire.
672     *
673     * @see #TAG_FLASH
674     */
675    public static final int FLASH_DID_NOT_FIRE = 0x0;
676
677    /**
678     * A value to be used with the "Flash" tag, indicating that the
679     * flash fired, but the strobe return status is unknown.
680     *
681     * @see #TAG_FLASH
682     */
683    public static final int FLASH_FIRED = 0x1;
684
685    /**
686     * A value to be used with the "Flash" tag, indicating that the
687     * flash fired, but the strobe return light was not detected.
688     *
689     * @see #TAG_FLASH
690     */
691    public static final int FLASH_STROBE_RETURN_LIGHT_NOT_DETECTED = 0x5;
692
693    /**
694     * A value to be used with the "Flash" tag, indicating that the
695     * flash fired, and the strobe return light was detected.
696     *
697     * @see #TAG_FLASH
698     */
699    public static final int FLASH_STROBE_RETURN_LIGHT_DETECTED = 0x7;
700
701    /**
702     * A mask to be used with the "Flash" tag, indicating that the
703     * flash fired.
704     *
705     * @see #TAG_FLASH
706     */
707    public static final int FLASH_MASK_FIRED = 0x1;
708
709    /**
710     * A mask to be used with the "Flash" tag, indicating strobe return
711     * light not detected.
712     *
713     * @see #TAG_FLASH
714     */
715    public static final int FLASH_MASK_RETURN_NOT_DETECTED = 0x4;
716
717    /**
718     * A mask to be used with the "Flash" tag, indicating strobe return
719     * light detected.
720     *
721     * @see #TAG_FLASH
722     */
723    public static final int FLASH_MASK_RETURN_DETECTED = 0x6;
724
725    /**
726     * A mask to be used with the "Flash" tag, indicating compulsory flash
727     * firing mode.
728     *
729     * @see #TAG_FLASH
730     */
731    public static final int FLASH_MASK_MODE_FLASH_FIRING = 0x8;
732
733    /**
734     * A mask to be used with the "Flash" tag, indicating compulsory flash
735     * suppression mode.
736     *
737     * @see #TAG_FLASH
738     */
739    public static final int FLASH_MASK_MODE_FLASH_SUPPRESSION = 0x10;
740
741    /**
742     * A mask to be used with the "Flash" tag, indicating auto mode.
743     *
744     * @see #TAG_FLASH
745     */
746    public static final int FLASH_MASK_MODE_AUTO = 0x18;
747
748    /**
749     * A mask to be used with the "Flash" tag, indicating no flash function
750     * present.
751     *
752     * @see #TAG_FLASH
753     */
754    public static final int FLASH_MASK_FUNCTION_NOT_PRESENT = 0x20;
755
756    /**
757     * A mask to be used with the "Flash" tag, indicating red-eye reduction
758     * supported.
759     *
760     * @see #TAG_FLASH
761     */
762    public static final int FLASH_MASK_RED_EYE_REDUCTION = 0x40;
763
764    /**
765     * A tag indicating the actual focal length of the lens, in
766     * millimeters (type RATIONAL).
767     */
768    public static final int TAG_FOCAL_LENGTH = 37386;
769
770    /**
771     * A tag indicating the location and area of the main subject in
772     * the overall scene.
773     */
774    public static final int TAG_SUBJECT_AREA = 37396;
775
776    /**
777     * A tag indicating the strobe energy at the time the image was
778     * captured, as measured in Beam Candle Power Seconds (BCPS) (type
779     * RATIONAL).
780     */
781    public static final int TAG_FLASH_ENERGY = 41483;
782
783    /**
784     * A tag indicating the camera or input device spatial frequency
785     * table and SFR values in the direction of image width, image
786     * height, and diagonal direction, as specified in ISO
787     * 12233<sup>xvi</sup> (type UNDEFINED).
788     */
789    public static final int TAG_SPATIAL_FREQUENCY_RESPONSE = 41484;
790
791    /**
792     * Indicates the number of pixels in the image width (X) direction
793     * per FocalPlaneResolutionUnit on the camera focal plane (type
794     * RATIONAL).
795     */
796    public static final int TAG_FOCAL_PLANE_X_RESOLUTION = 41486;
797
798    /**
799     * Indicate the number of pixels in the image height (Y) direction
800     * per FocalPlaneResolutionUnit on the camera focal plane (type
801     * RATIONAL).
802     */
803    public static final int TAG_FOCAL_PLANE_Y_RESOLUTION = 41487;
804
805    /**
806     * Indicates the unit for measuring FocalPlaneXResolution and
807     * FocalPlaneYResolution (type SHORT).
808     *
809     * @see #FOCAL_PLANE_RESOLUTION_UNIT_NONE
810     * @see #FOCAL_PLANE_RESOLUTION_UNIT_INCH
811     * @see #FOCAL_PLANE_RESOLUTION_UNIT_CENTIMETER
812     */
813    public static final int TAG_FOCAL_PLANE_RESOLUTION_UNIT = 41488;
814
815    /**
816     * A value to be used with the "FocalPlaneResolutionUnit" tag.
817     *
818     * @see #TAG_FOCAL_PLANE_RESOLUTION_UNIT
819     */
820    public static final int FOCAL_PLANE_RESOLUTION_UNIT_NONE = 1;
821
822    /**
823     * A value to be used with the "FocalPlaneXResolution" tag.
824     *
825     * @see #TAG_FOCAL_PLANE_RESOLUTION_UNIT
826     */
827    public static final int FOCAL_PLANE_RESOLUTION_UNIT_INCH = 2;
828
829    /**
830     * A value to be used with the "FocalPlaneXResolution" tag.
831     *
832     * @see #TAG_FOCAL_PLANE_RESOLUTION_UNIT
833     */
834    public static final int FOCAL_PLANE_RESOLUTION_UNIT_CENTIMETER = 3;
835
836    /**
837     * A tag indicating the column and row of the center pixel of the
838     * main subject in the scene (type SHORT, count = 2).
839     */
840    public static final int TAG_SUBJECT_LOCATION = 41492;
841
842    /**
843     * A tag indicating the exposure index selected on the camera or
844     * input device at the time the image was captured (type
845     * RATIONAL).
846     */
847    public static final int TAG_EXPOSURE_INDEX = 41493;
848
849    /**
850     * A tag indicating the sensor type on the camera or input device
851     * (type SHORT).
852     *
853     * @see #SENSING_METHOD_NOT_DEFINED
854     * @see #SENSING_METHOD_ONE_CHIP_COLOR_AREA_SENSOR
855     * @see #SENSING_METHOD_TWO_CHIP_COLOR_AREA_SENSOR
856     * @see #SENSING_METHOD_THREE_CHIP_COLOR_AREA_SENSOR
857     * @see #SENSING_METHOD_COLOR_SEQUENTIAL_AREA_SENSOR
858     * @see #SENSING_METHOD_TRILINEAR_SENSOR
859     * @see #SENSING_METHOD_COLOR_SEQUENTIAL_LINEAR_SENSOR
860     */
861    public static final int TAG_SENSING_METHOD = 41495;
862
863    /**
864     * A value to be used with the "SensingMethod" tag.
865     *
866     * @see #TAG_SENSING_METHOD
867     */
868    public static final int SENSING_METHOD_NOT_DEFINED = 1;
869
870    /**
871     * A value to be used with the "SensingMethod" tag.
872     *
873     * @see #TAG_SENSING_METHOD
874     */
875    public static final int SENSING_METHOD_ONE_CHIP_COLOR_AREA_SENSOR = 2;
876
877    /**
878     * A value to be used with the "SensingMethod" tag.
879     *
880     * @see #TAG_SENSING_METHOD
881     */
882    public static final int SENSING_METHOD_TWO_CHIP_COLOR_AREA_SENSOR = 3;
883
884    /**
885     * A value to be used with the "SensingMethod" tag.
886     *
887     * @see #TAG_SENSING_METHOD
888     */
889    public static final int SENSING_METHOD_THREE_CHIP_COLOR_AREA_SENSOR = 4;
890
891    /**
892     * A value to be used with the "SensingMethod" tag.
893     *
894     * @see #TAG_SENSING_METHOD
895     */
896    public static final int SENSING_METHOD_COLOR_SEQUENTIAL_AREA_SENSOR = 5;
897
898    /**
899     * A value to be used with the "SensingMethod" tag.
900     *
901     * @see #TAG_SENSING_METHOD
902     */
903    public static final int SENSING_METHOD_TRILINEAR_SENSOR = 7;
904
905    /**
906     * A value to be used with the "SensingMethod" tag.
907     *
908     * @see #TAG_SENSING_METHOD
909     */
910    public static final int SENSING_METHOD_COLOR_SEQUENTIAL_LINEAR_SENSOR = 8;
911
912    /**
913     * A tag indicating the image source (type UNDEFINED).
914     *
915     * @see #FILE_SOURCE_DSC
916     */
917    public static final int TAG_FILE_SOURCE = 41728;
918
919    /**
920     * A value to be used with the "FileSource" tag.
921     *
922     * @see #TAG_FILE_SOURCE
923     */
924    public static final int FILE_SOURCE_DSC = 3;
925
926    /**
927     * A tag indicating the type of scene (type UNDEFINED).
928     *
929     * @see #SCENE_TYPE_DSC
930     */
931    public static final int TAG_SCENE_TYPE = 41729;
932
933    /**
934     * A value to be used with the "SceneType" tag.
935     *
936     * @see #TAG_SCENE_TYPE
937     */
938    public static final int SCENE_TYPE_DSC = 1;
939
940    /**
941     * A tag indicating the color filter array geometric pattern of
942     * the image sensor when a one-chip color area sensor if used
943     * (type UNDEFINED).
944     */
945    public static final int TAG_CFA_PATTERN = 41730;
946
947    /**
948     * A tag indicating the use of special processing on image data,
949     * such as rendering geared to output.
950     */
951    public static final int TAG_CUSTOM_RENDERED = 41985;
952
953    /**
954     * A value to be used with the "CustomRendered" tag.
955     *
956     * @see #TAG_CUSTOM_RENDERED
957     */
958    public static final int CUSTOM_RENDERED_NORMAL = 0;
959
960    /**
961     * A value to be used with the "CustomRendered" tag.
962     *
963     * @see #TAG_CUSTOM_RENDERED
964     */
965    public static final int CUSTOM_RENDERED_CUSTOM = 1;
966
967    /**
968     * A tag indicating the exposure mode set when the image was shot.
969     */
970    public static final int TAG_EXPOSURE_MODE = 41986;
971
972    /**
973     * A value to be used with the "ExposureMode" tag.
974     *
975     * @see #TAG_EXPOSURE_MODE
976     */
977    public static final int EXPOSURE_MODE_AUTO_EXPOSURE = 0;
978
979    /**
980     * A value to be used with the "ExposureMode" tag.
981     *
982     * @see #TAG_EXPOSURE_MODE
983     */
984    public static final int EXPOSURE_MODE_MANUAL_EXPOSURE = 1;
985
986    /**
987     * A value to be used with the "ExposureMode" tag.
988     *
989     * @see #TAG_EXPOSURE_MODE
990     */
991    public static final int EXPOSURE_MODE_AUTO_BRACKET = 2;
992
993    /**
994     * A tag indicating the white balance mode set when the image was shot.
995     */
996    public static final int TAG_WHITE_BALANCE = 41987;
997
998    /**
999     * A value to be used with the "WhiteBalance" tag.
1000     *
1001     * @see #TAG_WHITE_BALANCE
1002     */
1003    public static final int WHITE_BALANCE_AUTO = 0;
1004
1005    /**
1006     * A value to be used with the "WhiteBalance" tag.
1007     *
1008     * @see #TAG_WHITE_BALANCE
1009     */
1010    public static final int WHITE_BALANCE_MANUAL = 1;
1011
1012    /**
1013     * A tag indicating the digital zoom ratio when the image was shot.
1014     */
1015    public static final int TAG_DIGITAL_ZOOM_RATIO = 41988;
1016
1017    /**
1018     * A tag indicating the equivalent focal length assuming a 35mm film
1019     * camera, in millimeters.
1020     */
1021    public static final int TAG_FOCAL_LENGTH_IN_35MM_FILM = 41989;
1022
1023    /**
1024     * A tag indicating the type of scene that was shot.
1025     */
1026    public static final int TAG_SCENE_CAPTURE_TYPE = 41990;
1027
1028    /**
1029     * A value to be used with the "SceneCaptureType" tag.
1030     *
1031     * @see #TAG_SCENE_CAPTURE_TYPE
1032     */
1033    public static final int SCENE_CAPTURE_TYPE_STANDARD = 0;
1034
1035    /**
1036     * A value to be used with the "SceneCaptureType" tag.
1037     *
1038     * @see #TAG_SCENE_CAPTURE_TYPE
1039     */
1040    public static final int SCENE_CAPTURE_TYPE_LANDSCAPE = 1;
1041
1042    /**
1043     * A value to be used with the "SceneCaptureType" tag.
1044     *
1045     * @see #TAG_SCENE_CAPTURE_TYPE
1046     */
1047    public static final int SCENE_CAPTURE_TYPE_PORTRAIT = 2;
1048
1049    /**
1050     * A value to be used with the "SceneCaptureType" tag.
1051     *
1052     * @see #TAG_SCENE_CAPTURE_TYPE
1053     */
1054    public static final int SCENE_CAPTURE_TYPE_NIGHT_SCENE = 3;
1055
1056    /**
1057     * A tag indicating the degree of overall image gain adjustment.
1058     */
1059    public static final int TAG_GAIN_CONTROL = 41991;
1060
1061    /**
1062     * A value to be used with the "GainControl" tag.
1063     *
1064     * @see #TAG_GAIN_CONTROL
1065     */
1066    public static final int GAIN_CONTROL_NONE = 0;
1067
1068    /**
1069     * A value to be used with the "GainControl" tag.
1070     *
1071     * @see #TAG_GAIN_CONTROL
1072     */
1073    public static final int GAIN_CONTROL_LOW_GAIN_UP = 1;
1074
1075    /**
1076     * A value to be used with the "GainControl" tag.
1077     *
1078     * @see #TAG_GAIN_CONTROL
1079     */
1080    public static final int GAIN_CONTROL_HIGH_GAIN_UP = 2;
1081
1082    /**
1083     * A value to be used with the "GainControl" tag.
1084     *
1085     * @see #TAG_GAIN_CONTROL
1086     */
1087    public static final int GAIN_CONTROL_LOW_GAIN_DOWN = 3;
1088
1089    /**
1090     * A value to be used with the "GainControl" tag.
1091     *
1092     * @see #TAG_GAIN_CONTROL
1093     */
1094    public static final int GAIN_CONTROL_HIGH_GAIN_DOWN = 4;
1095
1096    /**
1097     * A tag indicating the direction of contrast processing applied
1098     * by the camera when the image was shot.
1099     */
1100    public static final int TAG_CONTRAST = 41992;
1101
1102    /**
1103     * A value to be used with the "Contrast" tag.
1104     *
1105     * @see #TAG_CONTRAST
1106     */
1107    public static final int CONTRAST_NORMAL = 0;
1108
1109    /**
1110     * A value to be used with the "Contrast" tag.
1111     *
1112     * @see #TAG_CONTRAST
1113     */
1114    public static final int CONTRAST_SOFT = 1;
1115
1116    /**
1117     * A value to be used with the "Contrast" tag.
1118     *
1119     * @see #TAG_CONTRAST
1120     */
1121    public static final int CONTRAST_HARD = 2;
1122
1123    /**
1124     * A tag indicating the direction of saturation processing
1125     * applied by the camera when the image was shot.
1126     */
1127    public static final int TAG_SATURATION = 41993;
1128
1129    /**
1130     * A value to be used with the "Saturation" tag.
1131     *
1132     * @see #TAG_SATURATION
1133     */
1134    public static final int SATURATION_NORMAL = 0;
1135
1136    /**
1137     * A value to be used with the "Saturation" tag.
1138     *
1139     * @see #TAG_SATURATION
1140     */
1141    public static final int SATURATION_LOW = 1;
1142
1143    /**
1144     * A value to be used with the "Saturation" tag.
1145     *
1146     * @see #TAG_SATURATION
1147     */
1148    public static final int SATURATION_HIGH = 2;
1149
1150    /**
1151     * A tag indicating the direction of sharpness processing
1152     * applied by the camera when the image was shot.
1153     */
1154    public static final int TAG_SHARPNESS = 41994;
1155
1156    /**
1157     * A value to be used with the "Sharpness" tag.
1158     *
1159     * @see #TAG_SHARPNESS
1160     */
1161    public static final int SHARPNESS_NORMAL = 0;
1162
1163    /**
1164     * A value to be used with the "Sharpness" tag.
1165     *
1166     * @see #TAG_SHARPNESS
1167     */
1168    public static final int SHARPNESS_SOFT = 1;
1169
1170    /**
1171     * A value to be used with the "Sharpness" tag.
1172     *
1173     * @see #TAG_SHARPNESS
1174     */
1175    public static final int SHARPNESS_HARD = 2;
1176
1177    /**
1178     * A tag indicating information on the picture-taking conditions
1179     * of a particular camera model.
1180     */
1181    public static final int TAG_DEVICE_SETTING_DESCRIPTION = 41995;
1182
1183    /**
1184     * A tag indicating the distance to the subject.
1185     */
1186    public static final int TAG_SUBJECT_DISTANCE_RANGE = 41996;
1187
1188    /**
1189     * A value to be used with the "SubjectDistanceRange" tag.
1190     *
1191     * @see #TAG_SUBJECT_DISTANCE_RANGE
1192     */
1193    public static final int SUBJECT_DISTANCE_RANGE_UNKNOWN = 0;
1194
1195    /**
1196     * A value to be used with the "SubjectDistanceRange" tag.
1197     *
1198     * @see #TAG_SUBJECT_DISTANCE_RANGE
1199     */
1200    public static final int SUBJECT_DISTANCE_RANGE_MACRO = 1;
1201
1202    /**
1203     * A value to be used with the "SubjectDistanceRange" tag.
1204     *
1205     * @see #TAG_SUBJECT_DISTANCE_RANGE
1206     */
1207    public static final int SUBJECT_DISTANCE_RANGE_CLOSE_VIEW = 2;
1208
1209    /**
1210     * A value to be used with the "SubjectDistanceRange" tag.
1211     *
1212     * @see #TAG_SUBJECT_DISTANCE_RANGE
1213     */
1214    public static final int SUBJECT_DISTANCE_RANGE_DISTANT_VIEW = 3;
1215
1216    /**
1217     * A tag indicating an identifier assigned uniquely to each image.
1218     */
1219    public static final int TAG_IMAGE_UNIQUE_ID = 42016;
1220
1221    // Exif 2.1 private
1222
1223    // GPS Attribute Information
1224    //     0 - GPSVersionID                       (BYTE/4)
1225    //     1 - GPSLatitudeRef                     (ASCII/2)
1226    //     2 - GPSLatitude                        (RATIONAL/3)
1227    //     3 - GPSLongitudeRef                    (ASCII/2)
1228    //     4 - GPSLongitude                       (RATIONAL/3)
1229    //     5 - GPSAltitudeRef                     (BYTE/1)
1230    //     6 - GPSAltitude                        (RATIONAL/1)
1231    //     7 - GPSTimeStamp                       (RATIONAL/3)
1232    //     8 - GPSSatellites                      (ASCII/any)
1233    //     9 - GPSStatus                          (ASCII/2)
1234    //    10 - GPSMeasureMode                     (ASCII/2)
1235    //    11 - GPSDOP                             (RATIONAL/1)
1236    //    12 - GPSSpeedRef                        (ASCII/2)
1237    //    13 - GPSSpeed                           (RATIONAL/1)
1238    //    14 - GPSTrackRef                        (ASCII/2)
1239    //    15 - GPSTrack                           (RATIONAL/1)
1240    //    16 - GPSImgDirectionRef                 (ASCII/2)
1241    //    17 - GPSImgDirection                    (RATIONAL/1)
1242    //    18 - GPSMapDatum                        (ASCII/any)
1243    //    19 - GPSDestLatitudeRef                 (ASCII/2)
1244    //    20 - GPSDestLatitude                    (RATIONAL/3)
1245    //    21 - GPSDestLongitudeRef                (ASCII/2)
1246    //    22 - GPSDestLongitude                   (RATIONAL/3)
1247    //    23 - GPSDestBearingRef                  (ASCII/2)
1248    //    24 - GPSDestBearing                     (RATIONAL/1)
1249    //    25 - GPSDestDistanceRef                 (ASCII/2)
1250    //    26 - GPSDestDistance                    (RATIONAL/1)
1251
1252    //     0 - Interoperability Index             (ASCII/any)
1253
1254    // Exif tags
1255
1256    static class ExifVersion extends TIFFTag {
1257
1258        public ExifVersion() {
1259            super("Exifversion",
1260                  TAG_EXIF_VERSION,
1261                  1 << TIFFTag.TIFF_UNDEFINED,
1262                  4);
1263        }
1264    }
1265
1266    static class FlashPixVersion extends TIFFTag {
1267
1268        public FlashPixVersion() {
1269            super("FlashPixVersion",
1270                  TAG_FLASHPIX_VERSION,
1271                  1 << TIFFTag.TIFF_UNDEFINED,
1272                  4);
1273        }
1274    }
1275
1276    static class ColorSpace extends TIFFTag {
1277
1278        public ColorSpace() {
1279            super("ColorSpace",
1280                  TAG_COLOR_SPACE,
1281                  1 << TIFFTag.TIFF_SHORT,
1282                  1);
1283
1284            addValueName(COLOR_SPACE_SRGB, "sRGB");
1285            addValueName(COLOR_SPACE_UNCALIBRATED, "Uncalibrated");
1286        }
1287    }
1288
1289    static class ComponentsConfiguration extends TIFFTag {
1290
1291        public ComponentsConfiguration() {
1292            super("ComponentsConfiguration",
1293                  TAG_COMPONENTS_CONFIGURATION,
1294                  1 << TIFFTag.TIFF_UNDEFINED,
1295                  4);
1296
1297            addValueName(COMPONENTS_CONFIGURATION_DOES_NOT_EXIST,
1298                         "DoesNotExist");
1299            addValueName(COMPONENTS_CONFIGURATION_Y, "Y");
1300            addValueName(COMPONENTS_CONFIGURATION_CB, "Cb");
1301            addValueName(COMPONENTS_CONFIGURATION_CR, "Cr");
1302            addValueName(COMPONENTS_CONFIGURATION_R, "R");
1303            addValueName(COMPONENTS_CONFIGURATION_G, "G");
1304            addValueName(COMPONENTS_CONFIGURATION_B, "B");
1305        }
1306    }
1307
1308    static class CompressedBitsPerPixel extends TIFFTag {
1309
1310        public CompressedBitsPerPixel() {
1311            super("CompressedBitsPerPixel",
1312                  TAG_COMPRESSED_BITS_PER_PIXEL,
1313                  1 << TIFFTag.TIFF_RATIONAL,
1314                  1);
1315        }
1316    }
1317
1318    static class PixelXDimension extends TIFFTag {
1319
1320        public PixelXDimension() {
1321            super("PixelXDimension",
1322                  TAG_PIXEL_X_DIMENSION,
1323                  (1 << TIFFTag.TIFF_SHORT) |
1324                  (1 << TIFFTag.TIFF_LONG),
1325                  1);
1326        }
1327    }
1328
1329    static class PixelYDimension extends TIFFTag {
1330
1331        public PixelYDimension() {
1332            super("PixelYDimension",
1333                  TAG_PIXEL_Y_DIMENSION,
1334                  (1 << TIFFTag.TIFF_SHORT) |
1335                  (1 << TIFFTag.TIFF_LONG),
1336                  1);
1337        }
1338    }
1339
1340    static class MakerNote extends TIFFTag {
1341
1342        public MakerNote() {
1343            super("MakerNote",
1344                  TAG_MAKER_NOTE,
1345                  1 << TIFFTag.TIFF_UNDEFINED);
1346        }
1347    }
1348
1349    static class UserComment extends TIFFTag {
1350
1351        public UserComment() {
1352            super("UserComment",
1353                  TAG_USER_COMMENT,
1354                  1 << TIFFTag.TIFF_UNDEFINED);
1355        }
1356    }
1357
1358    static class RelatedSoundFile extends TIFFTag {
1359
1360        public RelatedSoundFile() {
1361            super("RelatedSoundFile",
1362                  TAG_RELATED_SOUND_FILE,
1363                  1 << TIFFTag.TIFF_ASCII,
1364                  13);
1365        }
1366    }
1367
1368    static class DateTimeOriginal extends TIFFTag {
1369
1370        public DateTimeOriginal() {
1371            super("DateTimeOriginal",
1372                  TAG_DATE_TIME_ORIGINAL,
1373                  1 << TIFFTag.TIFF_ASCII,
1374                  20);
1375        }
1376    }
1377
1378    static class DateTimeDigitized extends TIFFTag {
1379
1380        public DateTimeDigitized() {
1381            super("DateTimeDigitized",
1382                  TAG_DATE_TIME_DIGITIZED,
1383                  1 << TIFFTag.TIFF_ASCII,
1384                  20);
1385        }
1386    }
1387
1388    static class SubSecTime extends TIFFTag {
1389
1390        public SubSecTime() {
1391            super("SubSecTime",
1392                  TAG_SUB_SEC_TIME,
1393                  1 << TIFFTag.TIFF_ASCII);
1394        }
1395    }
1396
1397    static class SubSecTimeOriginal extends TIFFTag {
1398
1399        public SubSecTimeOriginal() {
1400            super("SubSecTimeOriginal",
1401                  TAG_SUB_SEC_TIME_ORIGINAL,
1402                  1 << TIFFTag.TIFF_ASCII);
1403        }
1404    }
1405
1406    static class SubSecTimeDigitized extends TIFFTag {
1407
1408        public SubSecTimeDigitized() {
1409            super("SubSecTimeDigitized",
1410                  TAG_SUB_SEC_TIME_DIGITIZED,
1411                  1 << TIFFTag.TIFF_ASCII);
1412        }
1413    }
1414
1415    static class ExposureTime extends TIFFTag {
1416
1417        public ExposureTime() {
1418            super("ExposureTime",
1419                  TAG_EXPOSURE_TIME,
1420                  1 << TIFFTag.TIFF_RATIONAL,
1421                  1);
1422        }
1423    }
1424
1425    static class FNumber extends TIFFTag {
1426
1427        public FNumber() {
1428            super("FNumber",
1429                  TAG_F_NUMBER,
1430                  1 << TIFFTag.TIFF_RATIONAL,
1431                  1);
1432        }
1433    }
1434
1435    static class ExposureProgram extends TIFFTag {
1436
1437        public ExposureProgram() {
1438            super("ExposureProgram",
1439                  TAG_EXPOSURE_PROGRAM,
1440                  1 << TIFFTag.TIFF_SHORT,
1441                  1);
1442
1443            addValueName(EXPOSURE_PROGRAM_NOT_DEFINED, "Not Defined");
1444            addValueName(EXPOSURE_PROGRAM_MANUAL, "Manual");
1445            addValueName(EXPOSURE_PROGRAM_NORMAL_PROGRAM, "Normal Program");
1446            addValueName(EXPOSURE_PROGRAM_APERTURE_PRIORITY,
1447                         "Aperture Priority");
1448            addValueName(EXPOSURE_PROGRAM_SHUTTER_PRIORITY,
1449                         "Shutter Priority");
1450            addValueName(EXPOSURE_PROGRAM_CREATIVE_PROGRAM,
1451                         "Creative Program");
1452            addValueName(EXPOSURE_PROGRAM_ACTION_PROGRAM, "Action Program");
1453            addValueName(EXPOSURE_PROGRAM_PORTRAIT_MODE, "Portrait Mode");
1454            addValueName(EXPOSURE_PROGRAM_LANDSCAPE_MODE, "Landscape Mode");
1455        }
1456    }
1457
1458    static class SpectralSensitivity extends TIFFTag {
1459        public SpectralSensitivity() {
1460            super("SpectralSensitivity",
1461                  TAG_SPECTRAL_SENSITIVITY,
1462                  1 << TIFFTag.TIFF_ASCII);
1463        }
1464    }
1465
1466    static class ISOSpeedRatings extends TIFFTag {
1467
1468        public ISOSpeedRatings() {
1469            super("ISOSpeedRatings",
1470                  TAG_ISO_SPEED_RATINGS,
1471                  1 << TIFFTag.TIFF_SHORT);
1472        }
1473    }
1474
1475    static class OECF extends TIFFTag {
1476
1477        public OECF() {
1478            super("OECF",
1479                  TAG_OECF,
1480                  1 << TIFFTag.TIFF_UNDEFINED);
1481        }
1482    }
1483
1484    static class ShutterSpeedValue extends TIFFTag {
1485
1486        public ShutterSpeedValue() {
1487            super("ShutterSpeedValue",
1488                  TAG_SHUTTER_SPEED_VALUE,
1489                  1 << TIFFTag.TIFF_SRATIONAL,
1490                  1);
1491        }
1492    }
1493
1494    static class ApertureValue extends TIFFTag {
1495
1496        public ApertureValue() {
1497            super("ApertureValue",
1498                  TAG_APERTURE_VALUE,
1499                  1 << TIFFTag.TIFF_RATIONAL,
1500                  1);
1501        }
1502    }
1503
1504    static class BrightnessValue extends TIFFTag {
1505
1506        public BrightnessValue() {
1507            super("BrightnessValue",
1508                  TAG_BRIGHTNESS_VALUE,
1509                  1 << TIFFTag.TIFF_SRATIONAL,
1510                  1);
1511        }
1512    }
1513
1514    static class ExposureBiasValue extends TIFFTag {
1515
1516        public ExposureBiasValue() {
1517            super("ExposureBiasValue",
1518                  TAG_EXPOSURE_BIAS_VALUE,
1519                  1 << TIFFTag.TIFF_SRATIONAL,
1520                  1);
1521        }
1522    }
1523
1524    static class MaxApertureValue extends TIFFTag {
1525
1526        public MaxApertureValue() {
1527            super("MaxApertureValue",
1528                  TAG_MAX_APERTURE_VALUE,
1529                  1 << TIFFTag.TIFF_RATIONAL,
1530                  1);
1531        }
1532    }
1533
1534    static class SubjectDistance extends TIFFTag {
1535
1536        public SubjectDistance() {
1537            super("SubjectDistance",
1538                  TAG_SUBJECT_DISTANCE,
1539                  1 << TIFFTag.TIFF_RATIONAL,
1540                  1);
1541        }
1542    }
1543
1544    static class MeteringMode extends TIFFTag {
1545
1546        public MeteringMode() {
1547            super("MeteringMode",
1548                  TAG_METERING_MODE,
1549                  1 << TIFFTag.TIFF_SHORT,
1550                  1);
1551
1552            addValueName(METERING_MODE_UNKNOWN, "Unknown");
1553            addValueName(METERING_MODE_AVERAGE, "Average");
1554            addValueName(METERING_MODE_CENTER_WEIGHTED_AVERAGE,
1555                         "CenterWeightedAverage");
1556            addValueName(METERING_MODE_SPOT, "Spot");
1557            addValueName(METERING_MODE_MULTI_SPOT, "MultiSpot");
1558            addValueName(METERING_MODE_PATTERN, "Pattern");
1559            addValueName(METERING_MODE_PARTIAL, "Partial");
1560            addValueName(METERING_MODE_OTHER, "Other");
1561        }
1562    }
1563
1564    static class LightSource extends TIFFTag {
1565
1566        public LightSource() {
1567            super("LightSource",
1568                  TAG_LIGHT_SOURCE,
1569                  1 << TIFFTag.TIFF_SHORT,
1570                  1);
1571
1572            addValueName(LIGHT_SOURCE_UNKNOWN, "Unknown");
1573            addValueName(LIGHT_SOURCE_DAYLIGHT, "Daylight");
1574            addValueName(LIGHT_SOURCE_FLUORESCENT, "Fluorescent");
1575            addValueName(LIGHT_SOURCE_TUNGSTEN, "Tungsten");
1576            addValueName(LIGHT_SOURCE_STANDARD_LIGHT_A, "Standard Light A");
1577            addValueName(LIGHT_SOURCE_STANDARD_LIGHT_B, "Standard Light B");
1578            addValueName(LIGHT_SOURCE_STANDARD_LIGHT_C, "Standard Light C");
1579            addValueName(LIGHT_SOURCE_D55, "D55");
1580            addValueName(LIGHT_SOURCE_D65, "D65");
1581            addValueName(LIGHT_SOURCE_D75, "D75");
1582            addValueName(LIGHT_SOURCE_OTHER, "Other");
1583        }
1584    }
1585
1586    static class Flash extends TIFFTag {
1587
1588        public Flash() {
1589            super("Flash",
1590                  TAG_FLASH,
1591                  1 << TIFFTag.TIFF_SHORT,
1592                  1);
1593
1594            addValueName(FLASH_DID_NOT_FIRE, "Flash Did Not Fire");
1595            addValueName(FLASH_FIRED, "Flash Fired");
1596            addValueName(FLASH_STROBE_RETURN_LIGHT_NOT_DETECTED,
1597                         "Strobe Return Light Not Detected");
1598            addValueName(FLASH_STROBE_RETURN_LIGHT_DETECTED,
1599                         "Strobe Return Light Detected");
1600        }
1601    }
1602
1603    static class FocalLength extends TIFFTag {
1604
1605        public FocalLength() {
1606            super("FocalLength",
1607                  TAG_FOCAL_LENGTH,
1608                  1 << TIFFTag.TIFF_RATIONAL,
1609                  1);
1610        }
1611    }
1612
1613    static class SubjectArea extends TIFFTag {
1614
1615        public SubjectArea() {
1616            super("SubjectArea",
1617                  TAG_SUBJECT_AREA,
1618                  1 << TIFFTag.TIFF_SHORT);
1619        }
1620    }
1621
1622    static class FlashEnergy extends TIFFTag {
1623
1624        public FlashEnergy() {
1625            super("FlashEnergy",
1626                  TAG_FLASH_ENERGY,
1627                  1 << TIFFTag.TIFF_RATIONAL,
1628                  1);
1629        }
1630    }
1631
1632    static class SpatialFrequencyResponse extends TIFFTag {
1633
1634        public SpatialFrequencyResponse() {
1635            super("SpatialFrequencyResponse",
1636                  TAG_SPATIAL_FREQUENCY_RESPONSE,
1637                  1 << TIFFTag.TIFF_UNDEFINED);
1638        }
1639    }
1640
1641    static class FocalPlaneXResolution extends TIFFTag {
1642
1643        public FocalPlaneXResolution() {
1644            super("FocalPlaneXResolution",
1645                  TAG_FOCAL_PLANE_X_RESOLUTION,
1646                  1 << TIFFTag.TIFF_RATIONAL,
1647                  1);
1648        }
1649    }
1650
1651    static class FocalPlaneYResolution extends TIFFTag {
1652
1653        public FocalPlaneYResolution() {
1654            super("FocalPlaneYResolution",
1655                  TAG_FOCAL_PLANE_Y_RESOLUTION,
1656                  1 << TIFFTag.TIFF_RATIONAL,
1657                  1);
1658        }
1659    }
1660
1661    static class FocalPlaneResolutionUnit extends TIFFTag {
1662
1663        public FocalPlaneResolutionUnit() {
1664            super("FocalPlaneResolutionUnit",
1665                  TAG_FOCAL_PLANE_RESOLUTION_UNIT,
1666                  1 << TIFFTag.TIFF_SHORT,
1667                  1);
1668
1669            addValueName(FOCAL_PLANE_RESOLUTION_UNIT_NONE, "None");
1670            addValueName(FOCAL_PLANE_RESOLUTION_UNIT_INCH, "Inch");
1671            addValueName(FOCAL_PLANE_RESOLUTION_UNIT_CENTIMETER, "Centimeter");
1672        }
1673    }
1674
1675    static class SubjectLocation extends TIFFTag {
1676
1677        public SubjectLocation() {
1678            super("SubjectLocation",
1679                  TAG_SUBJECT_LOCATION,
1680                  1 << TIFFTag.TIFF_SHORT,
1681                  2);
1682        }
1683    }
1684
1685    static class ExposureIndex extends TIFFTag {
1686
1687        public ExposureIndex() {
1688            super("ExposureIndex",
1689                  TAG_EXPOSURE_INDEX,
1690                  1 << TIFFTag.TIFF_RATIONAL,
1691                  1);
1692        }
1693    }
1694
1695    static class SensingMethod extends TIFFTag {
1696
1697        public SensingMethod() {
1698            super("SensingMethod",
1699                  TAG_SENSING_METHOD,
1700                  1 << TIFFTag.TIFF_SHORT,
1701                  1);
1702
1703            addValueName(SENSING_METHOD_NOT_DEFINED, "Not Defined");
1704            addValueName(SENSING_METHOD_ONE_CHIP_COLOR_AREA_SENSOR,
1705                         "One-chip color area sensor");
1706            addValueName(SENSING_METHOD_TWO_CHIP_COLOR_AREA_SENSOR,
1707                         "Two-chip color area sensor");
1708            addValueName(SENSING_METHOD_THREE_CHIP_COLOR_AREA_SENSOR,
1709                         "Three-chip color area sensor");
1710            addValueName(SENSING_METHOD_COLOR_SEQUENTIAL_AREA_SENSOR,
1711                         "Color sequential area sensor");
1712            addValueName(SENSING_METHOD_TRILINEAR_SENSOR, "Trilinear sensor");
1713            addValueName(SENSING_METHOD_COLOR_SEQUENTIAL_LINEAR_SENSOR,
1714                         "Color sequential linear sensor");
1715        }
1716    }
1717
1718    static class FileSource extends TIFFTag {
1719
1720        public FileSource() {
1721            super("FileSource",
1722                  TAG_FILE_SOURCE,
1723                  1 << TIFFTag.TIFF_UNDEFINED,
1724                  1);
1725
1726            addValueName(FILE_SOURCE_DSC, "DSC");
1727        }
1728    }
1729
1730    static class SceneType extends TIFFTag {
1731
1732        public SceneType() {
1733            super("SceneType",
1734                  TAG_SCENE_TYPE,
1735                  1 << TIFFTag.TIFF_UNDEFINED,
1736                  1);
1737
1738            addValueName(SCENE_TYPE_DSC, "A directly photographed image");
1739        }
1740    }
1741
1742    static class CFAPattern extends TIFFTag {
1743
1744        public CFAPattern() {
1745            super("CFAPattern",
1746                  TAG_CFA_PATTERN,
1747                  1 << TIFFTag.TIFF_UNDEFINED);
1748        }
1749    }
1750
1751    static class CustomRendered extends TIFFTag {
1752
1753        public CustomRendered() {
1754            super("CustomRendered",
1755                  TAG_CUSTOM_RENDERED,
1756                  1 << TIFFTag.TIFF_SHORT,
1757                  1);
1758
1759            addValueName(CUSTOM_RENDERED_NORMAL, "Normal process");
1760            addValueName(CUSTOM_RENDERED_CUSTOM, "Custom process");
1761        }
1762    }
1763
1764    static class ExposureMode extends TIFFTag {
1765
1766        public ExposureMode() {
1767            super("ExposureMode",
1768                  TAG_EXPOSURE_MODE,
1769                  1 << TIFFTag.TIFF_SHORT,
1770                  1);
1771
1772            addValueName(EXPOSURE_MODE_AUTO_EXPOSURE, "Auto exposure");
1773            addValueName(EXPOSURE_MODE_MANUAL_EXPOSURE, "Manual exposure");
1774            addValueName(EXPOSURE_MODE_AUTO_BRACKET, "Auto bracket");
1775        }
1776    }
1777
1778    static class WhiteBalance extends TIFFTag {
1779
1780        public WhiteBalance() {
1781            super("WhiteBalance",
1782                  TAG_WHITE_BALANCE,
1783                  1 << TIFFTag.TIFF_SHORT,
1784                  1);
1785
1786            addValueName(WHITE_BALANCE_AUTO, "Auto white balance");
1787            addValueName(WHITE_BALANCE_MANUAL, "Manual white balance");
1788        }
1789    }
1790
1791    static class DigitalZoomRatio extends TIFFTag {
1792
1793        public DigitalZoomRatio() {
1794            super("DigitalZoomRatio",
1795                  TAG_DIGITAL_ZOOM_RATIO,
1796                  1 << TIFFTag.TIFF_RATIONAL,
1797                  1);
1798        }
1799    }
1800
1801    static class FocalLengthIn35mmFilm extends TIFFTag {
1802
1803        public FocalLengthIn35mmFilm() {
1804            super("FocalLengthIn35mmFilm",
1805                  TAG_FOCAL_LENGTH_IN_35MM_FILM,
1806                  1 << TIFFTag.TIFF_SHORT,
1807                  1);
1808        }
1809    }
1810
1811    static class SceneCaptureType extends TIFFTag {
1812
1813        public SceneCaptureType() {
1814            super("SceneCaptureType",
1815                  TAG_SCENE_CAPTURE_TYPE,
1816                  1 << TIFFTag.TIFF_SHORT,
1817                  1);
1818
1819            addValueName(SCENE_CAPTURE_TYPE_STANDARD, "Standard");
1820            addValueName(SCENE_CAPTURE_TYPE_LANDSCAPE, "Landscape");
1821            addValueName(SCENE_CAPTURE_TYPE_PORTRAIT, "Portrait");
1822            addValueName(SCENE_CAPTURE_TYPE_NIGHT_SCENE, "Night scene");
1823        }
1824    }
1825
1826    static class GainControl extends TIFFTag {
1827
1828        public GainControl() {
1829            super("GainControl",
1830                  TAG_GAIN_CONTROL,
1831                  1 << TIFFTag.TIFF_SHORT,
1832                  1);
1833
1834            addValueName(GAIN_CONTROL_NONE, "None");
1835            addValueName(GAIN_CONTROL_LOW_GAIN_UP, "Low gain up");
1836            addValueName(GAIN_CONTROL_HIGH_GAIN_UP, "High gain up");
1837            addValueName(GAIN_CONTROL_LOW_GAIN_DOWN, "Low gain down");
1838            addValueName(GAIN_CONTROL_HIGH_GAIN_DOWN, "High gain down");
1839        }
1840    }
1841
1842    static class Contrast extends TIFFTag {
1843
1844        public Contrast() {
1845            super("Contrast",
1846                  TAG_CONTRAST,
1847                  1 << TIFFTag.TIFF_SHORT,
1848                  1);
1849
1850            addValueName(CONTRAST_NORMAL, "Normal");
1851            addValueName(CONTRAST_SOFT, "Soft");
1852            addValueName(CONTRAST_HARD, "Hard");
1853        }
1854    }
1855
1856    static class Saturation extends TIFFTag {
1857
1858        public Saturation() {
1859            super("Saturation",
1860                  TAG_SATURATION,
1861                  1 << TIFFTag.TIFF_SHORT,
1862                  1);
1863
1864            addValueName(SATURATION_NORMAL, "Normal");
1865            addValueName(SATURATION_LOW, "Low saturation");
1866            addValueName(SATURATION_HIGH, "High saturation");
1867        }
1868    }
1869
1870    static class Sharpness extends TIFFTag {
1871
1872        public Sharpness() {
1873            super("Sharpness",
1874                  TAG_SHARPNESS,
1875                  1 << TIFFTag.TIFF_SHORT,
1876                  1);
1877
1878            addValueName(SHARPNESS_NORMAL, "Normal");
1879            addValueName(SHARPNESS_SOFT, "Soft");
1880            addValueName(SHARPNESS_HARD, "Hard");
1881        }
1882    }
1883
1884    static class DeviceSettingDescription extends TIFFTag {
1885
1886        public DeviceSettingDescription() {
1887            super("DeviceSettingDescription",
1888                  TAG_DEVICE_SETTING_DESCRIPTION,
1889                  1 << TIFFTag.TIFF_UNDEFINED);
1890        }
1891    }
1892
1893    static class SubjectDistanceRange extends TIFFTag {
1894
1895        public SubjectDistanceRange() {
1896            super("SubjectDistanceRange",
1897                  TAG_SUBJECT_DISTANCE_RANGE,
1898                  1 << TIFFTag.TIFF_SHORT,
1899                  1);
1900
1901            addValueName(SUBJECT_DISTANCE_RANGE_UNKNOWN, "unknown");
1902            addValueName(SUBJECT_DISTANCE_RANGE_MACRO, "Macro");
1903            addValueName(SUBJECT_DISTANCE_RANGE_CLOSE_VIEW, "Close view");
1904            addValueName(SUBJECT_DISTANCE_RANGE_DISTANT_VIEW, "Distant view");
1905        }
1906    }
1907
1908    static class ImageUniqueID extends TIFFTag {
1909
1910        public ImageUniqueID() {
1911            super("ImageUniqueID",
1912                  TAG_IMAGE_UNIQUE_ID,
1913                  1 << TIFFTag.TIFF_ASCII,
1914                  33);
1915        }
1916    }
1917
1918    static class InteroperabilityIFD extends TIFFTag {
1919        public InteroperabilityIFD() {
1920            super("InteroperabilityIFD",
1921                  TAG_INTEROPERABILITY_IFD_POINTER,
1922                  ExifInteroperabilityTagSet.getInstance());
1923        }
1924    }
1925
1926    private static List<TIFFTag> tags;
1927
1928    private static void initTags() {
1929        tags = new ArrayList<TIFFTag>(42);
1930
1931        tags.add(new ExifTIFFTagSet.ExifVersion());
1932        tags.add(new ExifTIFFTagSet.FlashPixVersion());
1933        tags.add(new ExifTIFFTagSet.ColorSpace());
1934        tags.add(new ExifTIFFTagSet.ComponentsConfiguration());
1935        tags.add(new ExifTIFFTagSet.CompressedBitsPerPixel());
1936        tags.add(new ExifTIFFTagSet.PixelXDimension());
1937        tags.add(new ExifTIFFTagSet.PixelYDimension());
1938        tags.add(new ExifTIFFTagSet.MakerNote());
1939        tags.add(new ExifTIFFTagSet.UserComment());
1940        tags.add(new ExifTIFFTagSet.RelatedSoundFile());
1941        tags.add(new ExifTIFFTagSet.DateTimeOriginal());
1942        tags.add(new ExifTIFFTagSet.DateTimeDigitized());
1943        tags.add(new ExifTIFFTagSet.SubSecTime());
1944        tags.add(new ExifTIFFTagSet.SubSecTimeOriginal());
1945        tags.add(new ExifTIFFTagSet.SubSecTimeDigitized());
1946        tags.add(new ExifTIFFTagSet.ExposureTime());
1947        tags.add(new ExifTIFFTagSet.FNumber());
1948        tags.add(new ExifTIFFTagSet.ExposureProgram());
1949        tags.add(new ExifTIFFTagSet.SpectralSensitivity());
1950        tags.add(new ExifTIFFTagSet.ISOSpeedRatings());
1951        tags.add(new ExifTIFFTagSet.OECF());
1952        tags.add(new ExifTIFFTagSet.ShutterSpeedValue());
1953        tags.add(new ExifTIFFTagSet.ApertureValue());
1954        tags.add(new ExifTIFFTagSet.BrightnessValue());
1955        tags.add(new ExifTIFFTagSet.ExposureBiasValue());
1956        tags.add(new ExifTIFFTagSet.MaxApertureValue());
1957        tags.add(new ExifTIFFTagSet.SubjectDistance());
1958        tags.add(new ExifTIFFTagSet.MeteringMode());
1959        tags.add(new ExifTIFFTagSet.LightSource());
1960        tags.add(new ExifTIFFTagSet.Flash());
1961        tags.add(new ExifTIFFTagSet.FocalLength());
1962        tags.add(new ExifTIFFTagSet.SubjectArea());
1963        tags.add(new ExifTIFFTagSet.FlashEnergy());
1964        tags.add(new ExifTIFFTagSet.SpatialFrequencyResponse());
1965        tags.add(new ExifTIFFTagSet.FocalPlaneXResolution());
1966        tags.add(new ExifTIFFTagSet.FocalPlaneYResolution());
1967        tags.add(new ExifTIFFTagSet.FocalPlaneResolutionUnit());
1968        tags.add(new ExifTIFFTagSet.SubjectLocation());
1969        tags.add(new ExifTIFFTagSet.ExposureIndex());
1970        tags.add(new ExifTIFFTagSet.SensingMethod());
1971        tags.add(new ExifTIFFTagSet.FileSource());
1972        tags.add(new ExifTIFFTagSet.SceneType());
1973        tags.add(new ExifTIFFTagSet.CFAPattern());
1974        tags.add(new ExifTIFFTagSet.CustomRendered());
1975        tags.add(new ExifTIFFTagSet.ExposureMode());
1976        tags.add(new ExifTIFFTagSet.WhiteBalance());
1977        tags.add(new ExifTIFFTagSet.DigitalZoomRatio());
1978        tags.add(new ExifTIFFTagSet.FocalLengthIn35mmFilm());
1979        tags.add(new ExifTIFFTagSet.SceneCaptureType());
1980        tags.add(new ExifTIFFTagSet.GainControl());
1981        tags.add(new ExifTIFFTagSet.Contrast());
1982        tags.add(new ExifTIFFTagSet.Saturation());
1983        tags.add(new ExifTIFFTagSet.Sharpness());
1984        tags.add(new ExifTIFFTagSet.DeviceSettingDescription());
1985        tags.add(new ExifTIFFTagSet.SubjectDistanceRange());
1986        tags.add(new ExifTIFFTagSet.ImageUniqueID());
1987        tags.add(new ExifTIFFTagSet.InteroperabilityIFD());
1988    }
1989
1990    private ExifTIFFTagSet() {
1991        super(tags);
1992    }
1993
1994    /**
1995     * Returns a shared instance of an <code>ExifTIFFTagSet</code>.
1996     *
1997     * @return an <code>ExifTIFFTagSet</code> instance.
1998     */
1999    public synchronized static ExifTIFFTagSet getInstance() {
2000        if (theInstance == null) {
2001            initTags();
2002            theInstance = new ExifTIFFTagSet();
2003            tags = null;
2004        }
2005        return theInstance;
2006    }
2007}
2008