Source code: com/drew/metadata/exif/OlympusMakernoteDescriptor.java
1 /*
2 * Created by dnoakes on 27-Nov-2002 10:12:05 using IntelliJ IDEA.
3 */
4 package com.drew.metadata.exif;
5
6 import com.drew.metadata.Directory;
7 import com.drew.metadata.MetadataException;
8 import com.drew.metadata.TagDescriptor;
9
10 /**
11 *
12 */
13 public class OlympusMakernoteDescriptor extends TagDescriptor
14 {
15 public OlympusMakernoteDescriptor(Directory directory)
16 {
17 super(directory);
18 }
19
20 public String getDescription(int tagType) throws MetadataException
21 {
22 switch (tagType) {
23 case OlympusMakernoteDirectory.TAG_OLYMPUS_SPECIAL_MODE:
24 return getSpecialModeDescription();
25 case OlympusMakernoteDirectory.TAG_OLYMPUS_JPEG_QUALITY:
26 return getJpegQualityDescription();
27 case OlympusMakernoteDirectory.TAG_OLYMPUS_MACRO_MODE:
28 return getMacroModeDescription();
29 case OlympusMakernoteDirectory.TAG_OLYMPUS_DIGI_ZOOM_RATIO:
30 return getDigiZoomRatioDescription();
31 default:
32 return _directory.getString(tagType);
33 }
34 }
35
36 private String getDigiZoomRatioDescription() throws MetadataException
37 {
38 if (!_directory.containsTag(OlympusMakernoteDirectory.TAG_OLYMPUS_DIGI_ZOOM_RATIO)) return null;
39 int value = _directory.getInt(OlympusMakernoteDirectory.TAG_OLYMPUS_DIGI_ZOOM_RATIO);
40 switch (value) {
41 case 0:
42 return "Normal";
43 case 2:
44 return "Digital 2x Zoom";
45 default:
46 return "Unknown (" + value + ")";
47 }
48 }
49
50 private String getMacroModeDescription() throws MetadataException
51 {
52 if (!_directory.containsTag(OlympusMakernoteDirectory.TAG_OLYMPUS_MACRO_MODE)) return null;
53 int value = _directory.getInt(OlympusMakernoteDirectory.TAG_OLYMPUS_MACRO_MODE);
54 switch (value) {
55 case 0:
56 return "Normal (no macro)";
57 case 1:
58 return "Macro";
59 default:
60 return "Unknown (" + value + ")";
61 }
62 }
63
64 private String getJpegQualityDescription() throws MetadataException
65 {
66 if (!_directory.containsTag(OlympusMakernoteDirectory.TAG_OLYMPUS_JPEG_QUALITY)) return null;
67 int value = _directory.getInt(OlympusMakernoteDirectory.TAG_OLYMPUS_JPEG_QUALITY);
68 switch (value) {
69 case 1:
70 return "SQ";
71 case 2:
72 return "HQ";
73 case 3:
74 return "SHQ";
75 default:
76 return "Unknown (" + value + ")";
77 }
78 }
79
80 private String getSpecialModeDescription() throws MetadataException
81 {
82 if (!_directory.containsTag(OlympusMakernoteDirectory.TAG_OLYMPUS_SPECIAL_MODE)) return null;
83 int[] values = _directory.getIntArray(OlympusMakernoteDirectory.TAG_OLYMPUS_SPECIAL_MODE);
84 StringBuffer desc = new StringBuffer();
85 switch (values[0]) {
86 case 0:
87 desc.append("Normal picture taking mode");
88 break;
89 case 1:
90 desc.append("Unknown picture taking mode");
91 break;
92 case 2:
93 desc.append("Fast picture taking mode");
94 break;
95 case 3:
96 desc.append("Panorama picture taking mode");
97 break;
98 default:
99 desc.append("Unknown picture taking mode");
100 break;
101 }
102 desc.append(" - ");
103 switch (values[1]) {
104 case 0:
105 desc.append("Unknown sequence number");
106 break;
107 case 1:
108 desc.append("1st in a sequnce");
109 break;
110 case 2:
111 desc.append("2nd in a sequence");
112 break;
113 case 3:
114 desc.append("3rd in a sequence");
115 break;
116 default:
117 desc.append(values[1]);
118 desc.append("th in a sequence");
119 break;
120 }
121 switch (values[2]) {
122 case 1:
123 desc.append("Left to right panorama direction");
124 break;
125 case 2:
126 desc.append("Right to left panorama direction");
127 break;
128 case 3:
129 desc.append("Bottom to top panorama direction");
130 break;
131 case 4:
132 desc.append("Top to bottom panorama direction");
133 break;
134 }
135 return desc.toString();
136 }
137 }