1 | /*
|
---|
2 | * This is public domain software - that is, you can do whatever you want
|
---|
3 | * with it, and include it software that is licensed under the GNU or the
|
---|
4 | * BSD license, or whatever other licence you choose, including proprietary
|
---|
5 | * closed source licenses. I do ask that you leave this header in tact.
|
---|
6 | *
|
---|
7 | * If you make modifications to this code that you think would benefit the
|
---|
8 | * wider community, please send me a copy and I'll post it on my site.
|
---|
9 | *
|
---|
10 | * If you make use of this code, I'd appreciate hearing about it.
|
---|
11 | * drew@drewnoakes.com
|
---|
12 | * Latest version of this software kept at
|
---|
13 | * http://drewnoakes.com/
|
---|
14 | *
|
---|
15 | * Created by dnoakes on 27-Nov-2002 10:12:05 using IntelliJ IDEA.
|
---|
16 | */
|
---|
17 | package com.drew.metadata.exif;
|
---|
18 |
|
---|
19 | import com.drew.metadata.Directory;
|
---|
20 | import com.drew.metadata.MetadataException;
|
---|
21 | import com.drew.metadata.TagDescriptor;
|
---|
22 |
|
---|
23 | /**
|
---|
24 | *
|
---|
25 | */
|
---|
26 | public class CanonMakernoteDescriptor extends TagDescriptor
|
---|
27 | {
|
---|
28 | public CanonMakernoteDescriptor(Directory directory)
|
---|
29 | {
|
---|
30 | super(directory);
|
---|
31 | }
|
---|
32 |
|
---|
33 | public String getDescription(int tagType) throws MetadataException
|
---|
34 | {
|
---|
35 | switch (tagType) {
|
---|
36 | case CanonMakernoteDirectory.TAG_CANON_STATE1_FLASH_ACTIVITY:
|
---|
37 | return getFlashActivityDescription();
|
---|
38 | case CanonMakernoteDirectory.TAG_CANON_STATE1_FOCUS_TYPE:
|
---|
39 | return getFocusTypeDescription();
|
---|
40 | case CanonMakernoteDirectory.TAG_CANON_STATE1_DIGITAL_ZOOM:
|
---|
41 | return getDigitalZoomDescription();
|
---|
42 | case CanonMakernoteDirectory.TAG_CANON_STATE1_QUALITY:
|
---|
43 | return getQualityDescription();
|
---|
44 | case CanonMakernoteDirectory.TAG_CANON_STATE1_MACRO_MODE:
|
---|
45 | return getMacroModeDescription();
|
---|
46 | case CanonMakernoteDirectory.TAG_CANON_STATE1_SELF_TIMER_DELAY:
|
---|
47 | return getSelfTimerDelayDescription();
|
---|
48 | case CanonMakernoteDirectory.TAG_CANON_STATE1_FLASH_MODE:
|
---|
49 | return getFlashModeDescription();
|
---|
50 | case CanonMakernoteDirectory.TAG_CANON_STATE1_CONTINUOUS_DRIVE_MODE:
|
---|
51 | return getContinuousDriveModeDescription();
|
---|
52 | case CanonMakernoteDirectory.TAG_CANON_STATE1_FOCUS_MODE_1:
|
---|
53 | return getFocusMode1Description();
|
---|
54 | case CanonMakernoteDirectory.TAG_CANON_STATE1_IMAGE_SIZE:
|
---|
55 | return getImageSizeDescription();
|
---|
56 | case CanonMakernoteDirectory.TAG_CANON_STATE1_EASY_SHOOTING_MODE:
|
---|
57 | return getEasyShootingModeDescription();
|
---|
58 | case CanonMakernoteDirectory.TAG_CANON_STATE1_CONTRAST:
|
---|
59 | return getContrastDescription();
|
---|
60 | case CanonMakernoteDirectory.TAG_CANON_STATE1_SATURATION:
|
---|
61 | return getSaturationDescription();
|
---|
62 | case CanonMakernoteDirectory.TAG_CANON_STATE1_SHARPNESS:
|
---|
63 | return getSharpnessDescription();
|
---|
64 | case CanonMakernoteDirectory.TAG_CANON_STATE1_ISO:
|
---|
65 | return getIsoDescription();
|
---|
66 | case CanonMakernoteDirectory.TAG_CANON_STATE1_METERING_MODE:
|
---|
67 | return getMeteringModeDescription();
|
---|
68 | case CanonMakernoteDirectory.TAG_CANON_STATE1_AF_POINT_SELECTED:
|
---|
69 | return getAfPointSelectedDescription();
|
---|
70 | case CanonMakernoteDirectory.TAG_CANON_STATE1_EXPOSURE_MODE:
|
---|
71 | return getExposureModeDescription();
|
---|
72 | case CanonMakernoteDirectory.TAG_CANON_STATE1_LONG_FOCAL_LENGTH:
|
---|
73 | return getLongFocalLengthDescription();
|
---|
74 | case CanonMakernoteDirectory.TAG_CANON_STATE1_SHORT_FOCAL_LENGTH:
|
---|
75 | return getShortFocalLengthDescription();
|
---|
76 | case CanonMakernoteDirectory.TAG_CANON_STATE1_FOCAL_UNITS_PER_MM:
|
---|
77 | return getFocalUnitsPerMillimetreDescription();
|
---|
78 | case CanonMakernoteDirectory.TAG_CANON_STATE1_FLASH_DETAILS:
|
---|
79 | return getFlashDetailsDescription();
|
---|
80 | case CanonMakernoteDirectory.TAG_CANON_STATE1_FOCUS_MODE_2:
|
---|
81 | return getFocusMode2Description();
|
---|
82 | case CanonMakernoteDirectory.TAG_CANON_STATE2_WHITE_BALANCE:
|
---|
83 | return getWhiteBalanceDescription();
|
---|
84 | case CanonMakernoteDirectory.TAG_CANON_STATE2_AF_POINT_USED:
|
---|
85 | return getAfPointUsedDescription();
|
---|
86 | case CanonMakernoteDirectory.TAG_CANON_STATE2_FLASH_BIAS:
|
---|
87 | return getFlashBiasDescription();
|
---|
88 | case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_LONG_EXPOSURE_NOISE_REDUCTION:
|
---|
89 | return getLongExposureNoiseReductionDescription();
|
---|
90 | case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SHUTTER_AUTO_EXPOSURE_LOCK_BUTTONS:
|
---|
91 | return getShutterAutoExposureLockButtonDescription();
|
---|
92 | case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_MIRROR_LOCKUP:
|
---|
93 | return getMirrorLockupDescription();
|
---|
94 | case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_TV_AV_AND_EXPOSURE_LEVEL:
|
---|
95 | return getTvAndAvExposureLevelDescription();
|
---|
96 | case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_AF_ASSIST_LIGHT:
|
---|
97 | return getAutoFocusAssistLightDescription();
|
---|
98 | case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SHUTTER_SPEED_IN_AV_MODE:
|
---|
99 | return getShutterSpeedInAvModeDescription();
|
---|
100 | case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_BRACKETTING:
|
---|
101 | return getAutoExposureBrackettingSequenceAndAutoCancellationDescription();
|
---|
102 | case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SHUTTER_CURTAIN_SYNC:
|
---|
103 | return getShutterCurtainSyncDescription();
|
---|
104 | case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_AF_STOP:
|
---|
105 | return getLensAutoFocusStopButtonDescription();
|
---|
106 | case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_FILL_FLASH_REDUCTION:
|
---|
107 | return getFillFlashReductionDescription();
|
---|
108 | case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_MENU_BUTTON_RETURN:
|
---|
109 | return getMenuButtonReturnPositionDescription();
|
---|
110 | case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SET_BUTTON_FUNCTION:
|
---|
111 | return getSetButtonFunctionWhenShootingDescription();
|
---|
112 | case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SENSOR_CLEANING:
|
---|
113 | return getSensorCleaningDescription();
|
---|
114 | default:
|
---|
115 | return _directory.getString(tagType);
|
---|
116 | }
|
---|
117 | }
|
---|
118 |
|
---|
119 | public String getLongExposureNoiseReductionDescription() throws MetadataException
|
---|
120 | {
|
---|
121 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_LONG_EXPOSURE_NOISE_REDUCTION)) return null;
|
---|
122 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_LONG_EXPOSURE_NOISE_REDUCTION);
|
---|
123 | switch (value) {
|
---|
124 | case 0: return "Off";
|
---|
125 | case 1: return "On";
|
---|
126 | default: return "Unknown (" + value + ")";
|
---|
127 | }
|
---|
128 | }
|
---|
129 | public String getShutterAutoExposureLockButtonDescription() throws MetadataException
|
---|
130 | {
|
---|
131 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SHUTTER_AUTO_EXPOSURE_LOCK_BUTTONS)) return null;
|
---|
132 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SHUTTER_AUTO_EXPOSURE_LOCK_BUTTONS);
|
---|
133 | switch (value) {
|
---|
134 | case 0: return "AF/AE lock";
|
---|
135 | case 1: return "AE lock/AF";
|
---|
136 | case 2: return "AF/AF lock";
|
---|
137 | case 3: return "AE+release/AE+AF";
|
---|
138 | default: return "Unknown (" + value + ")";
|
---|
139 | }
|
---|
140 | }
|
---|
141 | public String getMirrorLockupDescription() throws MetadataException
|
---|
142 | {
|
---|
143 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_MIRROR_LOCKUP)) return null;
|
---|
144 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_MIRROR_LOCKUP);
|
---|
145 | switch (value) {
|
---|
146 | case 0: return "Disabled";
|
---|
147 | case 1: return "Enabled";
|
---|
148 | default: return "Unknown (" + value + ")";
|
---|
149 | }
|
---|
150 | }
|
---|
151 | public String getTvAndAvExposureLevelDescription() throws MetadataException
|
---|
152 | {
|
---|
153 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_TV_AV_AND_EXPOSURE_LEVEL)) return null;
|
---|
154 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_TV_AV_AND_EXPOSURE_LEVEL);
|
---|
155 | switch (value) {
|
---|
156 | case 0: return "1/2 stop";
|
---|
157 | case 1: return "1/3 stop";
|
---|
158 | default: return "Unknown (" + value + ")";
|
---|
159 | }
|
---|
160 | }
|
---|
161 | public String getAutoFocusAssistLightDescription() throws MetadataException
|
---|
162 | {
|
---|
163 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_AF_ASSIST_LIGHT)) return null;
|
---|
164 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_AF_ASSIST_LIGHT);
|
---|
165 | switch (value) {
|
---|
166 | case 0: return "On (Auto)";
|
---|
167 | case 1: return "Off";
|
---|
168 | default: return "Unknown (" + value + ")";
|
---|
169 | }
|
---|
170 | }
|
---|
171 | public String getShutterSpeedInAvModeDescription() throws MetadataException
|
---|
172 | {
|
---|
173 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SHUTTER_SPEED_IN_AV_MODE)) return null;
|
---|
174 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SHUTTER_SPEED_IN_AV_MODE);
|
---|
175 | switch (value) {
|
---|
176 | case 0: return "Automatic";
|
---|
177 | case 1: return "1/200 (fixed)";
|
---|
178 | default: return "Unknown (" + value + ")";
|
---|
179 | }
|
---|
180 | }
|
---|
181 | public String getAutoExposureBrackettingSequenceAndAutoCancellationDescription() throws MetadataException
|
---|
182 | {
|
---|
183 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_BRACKETTING)) return null;
|
---|
184 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_BRACKETTING);
|
---|
185 | switch (value) {
|
---|
186 | case 0: return "0,-,+ / Enabled";
|
---|
187 | case 1: return "0,-,+ / Disabled";
|
---|
188 | case 2: return "-,0,+ / Enabled";
|
---|
189 | case 3: return "-,0,+ / Disabled";
|
---|
190 | default: return "Unknown (" + value + ")";
|
---|
191 | }
|
---|
192 | }
|
---|
193 | public String getShutterCurtainSyncDescription() throws MetadataException
|
---|
194 | {
|
---|
195 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SHUTTER_CURTAIN_SYNC)) return null;
|
---|
196 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SHUTTER_CURTAIN_SYNC);
|
---|
197 | switch (value) {
|
---|
198 | case 0: return "1st Curtain Sync";
|
---|
199 | case 1: return "2nd Curtain Sync";
|
---|
200 | default: return "Unknown (" + value + ")";
|
---|
201 | }
|
---|
202 | }
|
---|
203 | public String getLensAutoFocusStopButtonDescription() throws MetadataException
|
---|
204 | {
|
---|
205 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_AF_STOP)) return null;
|
---|
206 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_AF_STOP);
|
---|
207 | switch (value) {
|
---|
208 | case 0: return "AF stop";
|
---|
209 | case 1: return "Operate AF";
|
---|
210 | case 2: return "Lock AE and start timer";
|
---|
211 | default: return "Unknown (" + value + ")";
|
---|
212 | }
|
---|
213 | }
|
---|
214 | public String getFillFlashReductionDescription() throws MetadataException
|
---|
215 | {
|
---|
216 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_FILL_FLASH_REDUCTION)) return null;
|
---|
217 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_FILL_FLASH_REDUCTION);
|
---|
218 | switch (value) {
|
---|
219 | case 0: return "Enabled";
|
---|
220 | case 1: return "Disabled";
|
---|
221 | default: return "Unknown (" + value + ")";
|
---|
222 | }
|
---|
223 | }
|
---|
224 | public String getMenuButtonReturnPositionDescription() throws MetadataException
|
---|
225 | {
|
---|
226 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_MENU_BUTTON_RETURN)) return null;
|
---|
227 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_MENU_BUTTON_RETURN);
|
---|
228 | switch (value) {
|
---|
229 | case 0: return "Top";
|
---|
230 | case 1: return "Previous (volatile)";
|
---|
231 | case 2: return "Previous";
|
---|
232 | default: return "Unknown (" + value + ")";
|
---|
233 | }
|
---|
234 | }
|
---|
235 | public String getSetButtonFunctionWhenShootingDescription() throws MetadataException
|
---|
236 | {
|
---|
237 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SET_BUTTON_FUNCTION)) return null;
|
---|
238 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SET_BUTTON_FUNCTION);
|
---|
239 | switch (value) {
|
---|
240 | case 0: return "Not Assigned";
|
---|
241 | case 1: return "Change Quality";
|
---|
242 | case 2: return "Change ISO Speed";
|
---|
243 | case 3: return "Select Parameters";
|
---|
244 | default: return "Unknown (" + value + ")";
|
---|
245 | }
|
---|
246 | }
|
---|
247 | public String getSensorCleaningDescription() throws MetadataException
|
---|
248 | {
|
---|
249 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SENSOR_CLEANING)) return null;
|
---|
250 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SENSOR_CLEANING);
|
---|
251 | switch (value) {
|
---|
252 | case 0: return "Disabled";
|
---|
253 | case 1: return "Enabled";
|
---|
254 | default: return "Unknown (" + value + ")";
|
---|
255 | }
|
---|
256 | }
|
---|
257 |
|
---|
258 | public String getFlashBiasDescription() throws MetadataException
|
---|
259 | {
|
---|
260 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE2_FLASH_BIAS)) return null;
|
---|
261 |
|
---|
262 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE2_FLASH_BIAS);
|
---|
263 |
|
---|
264 | boolean isNegative = false;
|
---|
265 | if (value > 0xF000)
|
---|
266 | {
|
---|
267 | isNegative = true;
|
---|
268 | value = 0xFFFF - value;
|
---|
269 | value++;
|
---|
270 | }
|
---|
271 |
|
---|
272 | // this tag is interesting in that the values returned are:
|
---|
273 | // 0, 0.375, 0.5, 0.626, 1
|
---|
274 | // not
|
---|
275 | // 0, 0.33, 0.5, 0.66, 1
|
---|
276 |
|
---|
277 | return ((isNegative) ? "-" : "") + Float.toString(value / 32f) + " EV";
|
---|
278 | }
|
---|
279 |
|
---|
280 | public String getAfPointUsedDescription() throws MetadataException
|
---|
281 | {
|
---|
282 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE2_AF_POINT_USED)) return null;
|
---|
283 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE2_AF_POINT_USED);
|
---|
284 | if ((value & 0x7) == 0) {
|
---|
285 | return "Right";
|
---|
286 | } else if ((value & 0x7) == 1) {
|
---|
287 | return "Centre";
|
---|
288 | } else if ((value & 0x7) == 2) {
|
---|
289 | return "Left";
|
---|
290 | } else {
|
---|
291 | return "Unknown (" + value + ")";
|
---|
292 | }
|
---|
293 | }
|
---|
294 |
|
---|
295 | public String getWhiteBalanceDescription() throws MetadataException
|
---|
296 | {
|
---|
297 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE2_WHITE_BALANCE)) return null;
|
---|
298 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE2_WHITE_BALANCE);
|
---|
299 | switch (value) {
|
---|
300 | case 0:
|
---|
301 | return "Auto";
|
---|
302 | case 1:
|
---|
303 | return "Sunny";
|
---|
304 | case 2:
|
---|
305 | return "Cloudy";
|
---|
306 | case 3:
|
---|
307 | return "Tungsten";
|
---|
308 | case 4:
|
---|
309 | return "Flourescent";
|
---|
310 | case 5:
|
---|
311 | return "Flash";
|
---|
312 | case 6:
|
---|
313 | return "Custom";
|
---|
314 | default:
|
---|
315 | return "Unknown (" + value + ")";
|
---|
316 | }
|
---|
317 | }
|
---|
318 |
|
---|
319 | public String getFocusMode2Description() throws MetadataException
|
---|
320 | {
|
---|
321 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_FOCUS_MODE_2)) return null;
|
---|
322 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_FOCUS_MODE_2);
|
---|
323 | switch (value) {
|
---|
324 | case 0:
|
---|
325 | return "Single";
|
---|
326 | case 1:
|
---|
327 | return "Continuous";
|
---|
328 | default:
|
---|
329 | return "Unknown (" + value + ")";
|
---|
330 | }
|
---|
331 | }
|
---|
332 |
|
---|
333 | public String getFlashDetailsDescription() throws MetadataException
|
---|
334 | {
|
---|
335 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_FLASH_DETAILS)) return null;
|
---|
336 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_FLASH_DETAILS);
|
---|
337 | if (((value << 14) & 1) > 0) {
|
---|
338 | return "External E-TTL";
|
---|
339 | }
|
---|
340 | if (((value << 13) & 1) > 0) {
|
---|
341 | return "Internal flash";
|
---|
342 | }
|
---|
343 | if (((value << 11) & 1) > 0) {
|
---|
344 | return "FP sync used";
|
---|
345 | }
|
---|
346 | if (((value << 4) & 1) > 0) {
|
---|
347 | return "FP sync enabled";
|
---|
348 | }
|
---|
349 | return "Unknown (" + value + ")";
|
---|
350 | }
|
---|
351 |
|
---|
352 | public String getFocalUnitsPerMillimetreDescription() throws MetadataException
|
---|
353 | {
|
---|
354 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_FOCAL_UNITS_PER_MM)) return "";
|
---|
355 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_FOCAL_UNITS_PER_MM);
|
---|
356 | if (value != 0) {
|
---|
357 | return Integer.toString(value);
|
---|
358 | } else {
|
---|
359 | return "";
|
---|
360 | }
|
---|
361 | }
|
---|
362 |
|
---|
363 | public String getShortFocalLengthDescription() throws MetadataException
|
---|
364 | {
|
---|
365 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_SHORT_FOCAL_LENGTH)) return null;
|
---|
366 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_SHORT_FOCAL_LENGTH);
|
---|
367 | String units = getFocalUnitsPerMillimetreDescription();
|
---|
368 | return Integer.toString(value) + " " + units;
|
---|
369 | }
|
---|
370 |
|
---|
371 | public String getLongFocalLengthDescription() throws MetadataException
|
---|
372 | {
|
---|
373 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_LONG_FOCAL_LENGTH)) return null;
|
---|
374 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_LONG_FOCAL_LENGTH);
|
---|
375 | String units = getFocalUnitsPerMillimetreDescription();
|
---|
376 | return Integer.toString(value) + " " + units;
|
---|
377 | }
|
---|
378 |
|
---|
379 | public String getExposureModeDescription() throws MetadataException
|
---|
380 | {
|
---|
381 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_EXPOSURE_MODE)) return null;
|
---|
382 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_EXPOSURE_MODE);
|
---|
383 | switch (value) {
|
---|
384 | case 0:
|
---|
385 | return "Easy shooting";
|
---|
386 | case 1:
|
---|
387 | return "Program";
|
---|
388 | case 2:
|
---|
389 | return "Tv-priority";
|
---|
390 | case 3:
|
---|
391 | return "Av-priority";
|
---|
392 | case 4:
|
---|
393 | return "Manual";
|
---|
394 | case 5:
|
---|
395 | return "A-DEP";
|
---|
396 | default:
|
---|
397 | return "Unknown (" + value + ")";
|
---|
398 | }
|
---|
399 | }
|
---|
400 |
|
---|
401 | public String getAfPointSelectedDescription() throws MetadataException
|
---|
402 | {
|
---|
403 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_AF_POINT_SELECTED)) return null;
|
---|
404 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_AF_POINT_SELECTED);
|
---|
405 | switch (value) {
|
---|
406 | case 0x3000:
|
---|
407 | return "None (MF)";
|
---|
408 | case 0x3001:
|
---|
409 | return "Auto selected";
|
---|
410 | case 0x3002:
|
---|
411 | return "Right";
|
---|
412 | case 0x3003:
|
---|
413 | return "Centre";
|
---|
414 | case 0x3004:
|
---|
415 | return "Left";
|
---|
416 | default:
|
---|
417 | return "Unknown (" + value + ")";
|
---|
418 | }
|
---|
419 | }
|
---|
420 |
|
---|
421 | public String getMeteringModeDescription() throws MetadataException
|
---|
422 | {
|
---|
423 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_METERING_MODE)) return null;
|
---|
424 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_METERING_MODE);
|
---|
425 | switch (value) {
|
---|
426 | case 3:
|
---|
427 | return "Evaluative";
|
---|
428 | case 4:
|
---|
429 | return "Partial";
|
---|
430 | case 5:
|
---|
431 | return "Centre weighted";
|
---|
432 | default:
|
---|
433 | return "Unknown (" + value + ")";
|
---|
434 | }
|
---|
435 | }
|
---|
436 |
|
---|
437 | public String getIsoDescription() throws MetadataException
|
---|
438 | {
|
---|
439 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_ISO)) return null;
|
---|
440 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_ISO);
|
---|
441 | switch (value) {
|
---|
442 | case 0:
|
---|
443 | return "Not specified (see ISOSpeedRatings tag)";
|
---|
444 | case 15:
|
---|
445 | return "Auto";
|
---|
446 | case 16:
|
---|
447 | return "50";
|
---|
448 | case 17:
|
---|
449 | return "100";
|
---|
450 | case 18:
|
---|
451 | return "200";
|
---|
452 | case 19:
|
---|
453 | return "400";
|
---|
454 | default:
|
---|
455 | return "Unknown (" + value + ")";
|
---|
456 | }
|
---|
457 | }
|
---|
458 |
|
---|
459 | public String getSharpnessDescription() throws MetadataException
|
---|
460 | {
|
---|
461 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_SHARPNESS)) return null;
|
---|
462 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_SHARPNESS);
|
---|
463 | switch (value) {
|
---|
464 | case 0xFFFF:
|
---|
465 | return "Low";
|
---|
466 | case 0x000:
|
---|
467 | return "Normal";
|
---|
468 | case 0x001:
|
---|
469 | return "High";
|
---|
470 | default:
|
---|
471 | return "Unknown (" + value + ")";
|
---|
472 | }
|
---|
473 | }
|
---|
474 |
|
---|
475 | public String getSaturationDescription() throws MetadataException
|
---|
476 | {
|
---|
477 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_SATURATION)) return null;
|
---|
478 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_SATURATION);
|
---|
479 | switch (value) {
|
---|
480 | case 0xFFFF:
|
---|
481 | return "Low";
|
---|
482 | case 0x000:
|
---|
483 | return "Normal";
|
---|
484 | case 0x001:
|
---|
485 | return "High";
|
---|
486 | default:
|
---|
487 | return "Unknown (" + value + ")";
|
---|
488 | }
|
---|
489 | }
|
---|
490 |
|
---|
491 | public String getContrastDescription() throws MetadataException
|
---|
492 | {
|
---|
493 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_CONTRAST)) return null;
|
---|
494 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_CONTRAST);
|
---|
495 | switch (value) {
|
---|
496 | case 0xFFFF:
|
---|
497 | return "Low";
|
---|
498 | case 0x000:
|
---|
499 | return "Normal";
|
---|
500 | case 0x001:
|
---|
501 | return "High";
|
---|
502 | default:
|
---|
503 | return "Unknown (" + value + ")";
|
---|
504 | }
|
---|
505 | }
|
---|
506 |
|
---|
507 | public String getEasyShootingModeDescription() throws MetadataException
|
---|
508 | {
|
---|
509 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_EASY_SHOOTING_MODE)) return null;
|
---|
510 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_EASY_SHOOTING_MODE);
|
---|
511 | switch (value) {
|
---|
512 | case 0:
|
---|
513 | return "Full auto";
|
---|
514 | case 1:
|
---|
515 | return "Manual";
|
---|
516 | case 2:
|
---|
517 | return "Landscape";
|
---|
518 | case 3:
|
---|
519 | return "Fast shutter";
|
---|
520 | case 4:
|
---|
521 | return "Slow shutter";
|
---|
522 | case 5:
|
---|
523 | return "Night";
|
---|
524 | case 6:
|
---|
525 | return "B&W";
|
---|
526 | case 7:
|
---|
527 | return "Sepia";
|
---|
528 | case 8:
|
---|
529 | return "Portrait";
|
---|
530 | case 9:
|
---|
531 | return "Sports";
|
---|
532 | case 10:
|
---|
533 | return "Macro / Closeup";
|
---|
534 | case 11:
|
---|
535 | return "Pan focus";
|
---|
536 | default:
|
---|
537 | return "Unknown (" + value + ")";
|
---|
538 | }
|
---|
539 | }
|
---|
540 |
|
---|
541 | public String getImageSizeDescription() throws MetadataException
|
---|
542 | {
|
---|
543 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_IMAGE_SIZE)) return null;
|
---|
544 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_IMAGE_SIZE);
|
---|
545 | switch (value) {
|
---|
546 | case 0:
|
---|
547 | return "Large";
|
---|
548 | case 1:
|
---|
549 | return "Medium";
|
---|
550 | case 2:
|
---|
551 | return "Small";
|
---|
552 | default:
|
---|
553 | return "Unknown (" + value + ")";
|
---|
554 | }
|
---|
555 | }
|
---|
556 |
|
---|
557 | public String getFocusMode1Description() throws MetadataException
|
---|
558 | {
|
---|
559 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_FOCUS_MODE_1)) return null;
|
---|
560 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_FOCUS_MODE_1);
|
---|
561 | switch (value) {
|
---|
562 | case 0:
|
---|
563 | return "One-shot";
|
---|
564 | case 1:
|
---|
565 | return "AI Servo";
|
---|
566 | case 2:
|
---|
567 | return "AI Focus";
|
---|
568 | case 3:
|
---|
569 | return "Manual Focus";
|
---|
570 | case 4:
|
---|
571 | // TODO should check field 32 here (FOCUS_MODE_2)
|
---|
572 | return "Single";
|
---|
573 | case 5:
|
---|
574 | return "Continuous";
|
---|
575 | case 6:
|
---|
576 | return "Manual Focus";
|
---|
577 | default:
|
---|
578 | return "Unknown (" + value + ")";
|
---|
579 | }
|
---|
580 | }
|
---|
581 |
|
---|
582 | public String getContinuousDriveModeDescription() throws MetadataException
|
---|
583 | {
|
---|
584 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_CONTINUOUS_DRIVE_MODE)) return null;
|
---|
585 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_CONTINUOUS_DRIVE_MODE);
|
---|
586 | switch (value) {
|
---|
587 | case 0:
|
---|
588 | if (_directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_SELF_TIMER_DELAY) == 0) {
|
---|
589 | return "Single shot";
|
---|
590 | } else {
|
---|
591 | return "Single shot with self-timer";
|
---|
592 | }
|
---|
593 | case 1:
|
---|
594 | return "Continuous";
|
---|
595 | default:
|
---|
596 | return "Unknown (" + value + ")";
|
---|
597 | }
|
---|
598 | }
|
---|
599 |
|
---|
600 | public String getFlashModeDescription() throws MetadataException
|
---|
601 | {
|
---|
602 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_FLASH_MODE)) return null;
|
---|
603 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_FLASH_MODE);
|
---|
604 | switch (value) {
|
---|
605 | case 0:
|
---|
606 | return "No flash fired";
|
---|
607 | case 1:
|
---|
608 | return "Auto";
|
---|
609 | case 2:
|
---|
610 | return "On";
|
---|
611 | case 3:
|
---|
612 | return "Red-eye reduction";
|
---|
613 | case 4:
|
---|
614 | return "Slow-synchro";
|
---|
615 | case 5:
|
---|
616 | return "Auto and red-eye reduction";
|
---|
617 | case 6:
|
---|
618 | return "On and red-eye reduction";
|
---|
619 | case 16:
|
---|
620 | // note: this value not set on Canon D30
|
---|
621 | return "Extenal flash";
|
---|
622 | default:
|
---|
623 | return "Unknown (" + value + ")";
|
---|
624 | }
|
---|
625 | }
|
---|
626 |
|
---|
627 | public String getSelfTimerDelayDescription() throws MetadataException
|
---|
628 | {
|
---|
629 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_SELF_TIMER_DELAY)) return null;
|
---|
630 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_SELF_TIMER_DELAY);
|
---|
631 | if (value == 0) {
|
---|
632 | return "Self timer not used";
|
---|
633 | } else {
|
---|
634 | // TODO find an image that tests this calculation
|
---|
635 | return Double.toString((double)value * 0.1d) + " sec";
|
---|
636 | }
|
---|
637 | }
|
---|
638 |
|
---|
639 | public String getMacroModeDescription() throws MetadataException
|
---|
640 | {
|
---|
641 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_MACRO_MODE)) return null;
|
---|
642 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_MACRO_MODE);
|
---|
643 | switch (value) {
|
---|
644 | case 1:
|
---|
645 | return "Macro";
|
---|
646 | case 2:
|
---|
647 | return "Normal";
|
---|
648 | default:
|
---|
649 | return "Unknown (" + value + ")";
|
---|
650 | }
|
---|
651 | }
|
---|
652 |
|
---|
653 | public String getQualityDescription() throws MetadataException
|
---|
654 | {
|
---|
655 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_QUALITY)) return null;
|
---|
656 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_QUALITY);
|
---|
657 | switch (value) {
|
---|
658 | case 2:
|
---|
659 | return "Normal";
|
---|
660 | case 3:
|
---|
661 | return "Fine";
|
---|
662 | case 5:
|
---|
663 | return "Superfine";
|
---|
664 | default:
|
---|
665 | return "Unknown (" + value + ")";
|
---|
666 | }
|
---|
667 | }
|
---|
668 |
|
---|
669 | public String getDigitalZoomDescription() throws MetadataException
|
---|
670 | {
|
---|
671 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_DIGITAL_ZOOM)) return null;
|
---|
672 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_DIGITAL_ZOOM);
|
---|
673 | switch (value) {
|
---|
674 | case 0:
|
---|
675 | return "No digital zoom";
|
---|
676 | case 1:
|
---|
677 | return "2x";
|
---|
678 | case 2:
|
---|
679 | return "4x";
|
---|
680 | default:
|
---|
681 | return "Unknown (" + value + ")";
|
---|
682 | }
|
---|
683 | }
|
---|
684 |
|
---|
685 | public String getFocusTypeDescription() throws MetadataException
|
---|
686 | {
|
---|
687 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_FOCUS_TYPE)) return null;
|
---|
688 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_FOCUS_TYPE);
|
---|
689 | switch (value) {
|
---|
690 | case 0:
|
---|
691 | return "Manual";
|
---|
692 | case 1:
|
---|
693 | return "Auto";
|
---|
694 | case 3:
|
---|
695 | return "Close-up (Macro)";
|
---|
696 | case 8:
|
---|
697 | return "Locked (Pan Mode)";
|
---|
698 | default:
|
---|
699 | return "Unknown (" + value + ")";
|
---|
700 | }
|
---|
701 | }
|
---|
702 |
|
---|
703 | public String getFlashActivityDescription() throws MetadataException
|
---|
704 | {
|
---|
705 | if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_FLASH_ACTIVITY)) return null;
|
---|
706 | int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_FLASH_ACTIVITY);
|
---|
707 | switch (value) {
|
---|
708 | case 0:
|
---|
709 | return "Flash did not fire";
|
---|
710 | case 1:
|
---|
711 | return "Flash fired";
|
---|
712 | default:
|
---|
713 | return "Unknown (" + value + ")";
|
---|
714 | }
|
---|
715 | }
|
---|
716 | }
|
---|