source: josm/trunk/src/com/drew/metadata/exif/makernotes/OlympusMakernoteDirectory.java@ 10862

Last change on this file since 10862 was 10862, checked in by Don-vip, 8 years ago

update to metadata-extractor 2.9.1

File size: 22.4 KB
Line 
1/*
2 * Copyright 2002-2016 Drew Noakes
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *
16 * More information about this project is available at:
17 *
18 * https://drewnoakes.com/code/exif/
19 * https://github.com/drewnoakes/metadata-extractor
20 */
21package com.drew.metadata.exif.makernotes;
22
23import com.drew.lang.SequentialByteArrayReader;
24import com.drew.lang.annotations.NotNull;
25import com.drew.metadata.Directory;
26
27import java.io.IOException;
28import java.util.HashMap;
29
30/**
31 * The Olympus makernote is used by many manufacturers (Epson, Konica, Minolta and Agfa...), and as such contains some tags
32 * that appear specific to those manufacturers.
33 *
34 * @author Drew Noakes https://drewnoakes.com
35 */
36public class OlympusMakernoteDirectory extends Directory
37{
38 /** Used by Konica / Minolta cameras. */
39 public static final int TAG_MAKERNOTE_VERSION = 0x0000;
40 /** Used by Konica / Minolta cameras. */
41 public static final int TAG_CAMERA_SETTINGS_1 = 0x0001;
42 /** Alternate Camera Settings Tag. Used by Konica / Minolta cameras. */
43 public static final int TAG_CAMERA_SETTINGS_2 = 0x0003;
44 /** Used by Konica / Minolta cameras. */
45 public static final int TAG_COMPRESSED_IMAGE_SIZE = 0x0040;
46 /** Used by Konica / Minolta cameras. */
47 public static final int TAG_MINOLTA_THUMBNAIL_OFFSET_1 = 0x0081;
48 /** Alternate Thumbnail Offset. Used by Konica / Minolta cameras. */
49 public static final int TAG_MINOLTA_THUMBNAIL_OFFSET_2 = 0x0088;
50 /** Length of thumbnail in bytes. Used by Konica / Minolta cameras. */
51 public static final int TAG_MINOLTA_THUMBNAIL_LENGTH = 0x0089;
52
53 public static final int TAG_THUMBNAIL_IMAGE = 0x0100;
54
55 /**
56 * Used by Konica / Minolta cameras
57 * 0 = Natural Colour
58 * 1 = Black & White
59 * 2 = Vivid colour
60 * 3 = Solarization
61 * 4 = AdobeRGB
62 */
63 public static final int TAG_COLOUR_MODE = 0x0101;
64
65 /**
66 * Used by Konica / Minolta cameras.
67 * 0 = Raw
68 * 1 = Super Fine
69 * 2 = Fine
70 * 3 = Standard
71 * 4 = Extra Fine
72 */
73 public static final int TAG_IMAGE_QUALITY_1 = 0x0102;
74
75 /**
76 * Not 100% sure about this tag.
77 * <p>
78 * Used by Konica / Minolta cameras.
79 * 0 = Raw
80 * 1 = Super Fine
81 * 2 = Fine
82 * 3 = Standard
83 * 4 = Extra Fine
84 */
85 public static final int TAG_IMAGE_QUALITY_2 = 0x0103;
86
87 public static final int TAG_BODY_FIRMWARE_VERSION = 0x0104;
88
89 /**
90 * Three values:
91 * Value 1: 0=Normal, 2=Fast, 3=Panorama
92 * Value 2: Sequence Number Value 3:
93 * 1 = Panorama Direction: Left to Right
94 * 2 = Panorama Direction: Right to Left
95 * 3 = Panorama Direction: Bottom to Top
96 * 4 = Panorama Direction: Top to Bottom
97 */
98 public static final int TAG_SPECIAL_MODE = 0x0200;
99
100 /**
101 * 1 = Standard Quality
102 * 2 = High Quality
103 * 3 = Super High Quality
104 */
105 public static final int TAG_JPEG_QUALITY = 0x0201;
106
107 /**
108 * 0 = Normal (Not Macro)
109 * 1 = Macro
110 */
111 public static final int TAG_MACRO_MODE = 0x0202;
112
113 /**
114 * 0 = Off, 1 = On
115 */
116 public static final int TAG_BW_MODE = 0x0203;
117
118 /** Zoom Factor (0 or 1 = normal) */
119 public static final int TAG_DIGI_ZOOM_RATIO = 0x0204;
120 public static final int TAG_FOCAL_PLANE_DIAGONAL = 0x0205;
121 public static final int TAG_LENS_DISTORTION_PARAMETERS = 0x0206;
122 public static final int TAG_FIRMWARE_VERSION = 0x0207;
123 public static final int TAG_PICT_INFO = 0x0208;
124 public static final int TAG_CAMERA_ID = 0x0209;
125
126 /**
127 * Used by Epson cameras
128 * Units = pixels
129 */
130 public static final int TAG_IMAGE_WIDTH = 0x020B;
131
132 /**
133 * Used by Epson cameras
134 * Units = pixels
135 */
136 public static final int TAG_IMAGE_HEIGHT = 0x020C;
137
138 /** A string. Used by Epson cameras. */
139 public static final int TAG_ORIGINAL_MANUFACTURER_MODEL = 0x020D;
140
141 public static final int TAG_PREVIEW_IMAGE = 0x0280;
142 public static final int TAG_PRE_CAPTURE_FRAMES = 0x0300;
143 public static final int TAG_WHITE_BOARD = 0x0301;
144 public static final int TAG_ONE_TOUCH_WB = 0x0302;
145 public static final int TAG_WHITE_BALANCE_BRACKET = 0x0303;
146 public static final int TAG_WHITE_BALANCE_BIAS = 0x0304;
147 public static final int TAG_SCENE_MODE = 0x0403;
148 public static final int TAG_FIRMWARE = 0x0404;
149
150 /**
151 * See the PIM specification here:
152 * http://www.ozhiker.com/electronics/pjmt/jpeg_info/pim.html
153 */
154 public static final int TAG_PRINT_IMAGE_MATCHING_INFO = 0x0E00;
155
156 public static final int TAG_DATA_DUMP_1 = 0x0F00;
157 public static final int TAG_DATA_DUMP_2 = 0x0F01;
158
159 public static final int TAG_SHUTTER_SPEED_VALUE = 0x1000;
160 public static final int TAG_ISO_VALUE = 0x1001;
161 public static final int TAG_APERTURE_VALUE = 0x1002;
162 public static final int TAG_BRIGHTNESS_VALUE = 0x1003;
163 public static final int TAG_FLASH_MODE = 0x1004;
164 public static final int TAG_FLASH_DEVICE = 0x1005;
165 public static final int TAG_BRACKET = 0x1006;
166 public static final int TAG_SENSOR_TEMPERATURE = 0x1007;
167 public static final int TAG_LENS_TEMPERATURE = 0x1008;
168 public static final int TAG_LIGHT_CONDITION = 0x1009;
169 public static final int TAG_FOCUS_RANGE = 0x100A;
170 public static final int TAG_FOCUS_MODE = 0x100B;
171 public static final int TAG_FOCUS_DISTANCE = 0x100C;
172 public static final int TAG_ZOOM = 0x100D;
173 public static final int TAG_MACRO_FOCUS = 0x100E;
174 public static final int TAG_SHARPNESS = 0x100F;
175 public static final int TAG_FLASH_CHARGE_LEVEL = 0x1010;
176 public static final int TAG_COLOUR_MATRIX = 0x1011;
177 public static final int TAG_BLACK_LEVEL = 0x1012;
178// public static final int TAG_ = 0x1013;
179// public static final int TAG_ = 0x1014;
180 public static final int TAG_WHITE_BALANCE = 0x1015;
181// public static final int TAG_ = 0x1016;
182 public static final int TAG_RED_BIAS = 0x1017;
183 public static final int TAG_BLUE_BIAS = 0x1018;
184 public static final int TAG_COLOR_MATRIX_NUMBER = 0x1019;
185 public static final int TAG_SERIAL_NUMBER = 0x101A;
186// public static final int TAG_ = 0x101B;
187// public static final int TAG_ = 0x101C;
188// public static final int TAG_ = 0x101D;
189// public static final int TAG_ = 0x101E;
190// public static final int TAG_ = 0x101F;
191// public static final int TAG_ = 0x1020;
192// public static final int TAG_ = 0x1021;
193// public static final int TAG_ = 0x1022;
194 public static final int TAG_FLASH_BIAS = 0x1023;
195// public static final int TAG_ = 0x1024;
196// public static final int TAG_ = 0x1025;
197 public static final int TAG_EXTERNAL_FLASH_BOUNCE = 0x1026;
198 public static final int TAG_EXTERNAL_FLASH_ZOOM = 0x1027;
199 public static final int TAG_EXTERNAL_FLASH_MODE = 0x1028;
200 public static final int TAG_CONTRAST = 0x1029;
201 public static final int TAG_SHARPNESS_FACTOR = 0x102A;
202 public static final int TAG_COLOUR_CONTROL = 0x102B;
203 public static final int TAG_VALID_BITS = 0x102C;
204 public static final int TAG_CORING_FILTER = 0x102D;
205 public static final int TAG_FINAL_WIDTH = 0x102E;
206 public static final int TAG_FINAL_HEIGHT = 0x102F;
207// public static final int TAG_ = 0x1030;
208// public static final int TAG_ = 0x1031;
209// public static final int TAG_ = 0x1032;
210// public static final int TAG_ = 0x1033;
211 public static final int TAG_COMPRESSION_RATIO = 0x1034;
212 public static final int TAG_THUMBNAIL = 0x1035;
213 public static final int TAG_THUMBNAIL_OFFSET = 0x1036;
214 public static final int TAG_THUMBNAIL_LENGTH = 0x1037;
215// public static final int TAG_ = 0x1038;
216 public static final int TAG_CCD_SCAN_MODE = 0x1039;
217 public static final int TAG_NOISE_REDUCTION = 0x103A;
218 public static final int TAG_INFINITY_LENS_STEP = 0x103B;
219 public static final int TAG_NEAR_LENS_STEP = 0x103C;
220 public static final int TAG_EQUIPMENT = 0x2010;
221 public static final int TAG_CAMERA_SETTINGS = 0x2020;
222 public static final int TAG_RAW_DEVELOPMENT = 0x2030;
223 public static final int TAG_RAW_DEVELOPMENT_2 = 0x2031;
224 public static final int TAG_IMAGE_PROCESSING = 0x2040;
225 public static final int TAG_FOCUS_INFO = 0x2050;
226 public static final int TAG_RAW_INFO = 0x3000;
227
228 public final static class CameraSettings
229 {
230 // These 'sub'-tag values have been created for consistency -- they don't exist within the Makernote IFD
231 private static final int OFFSET = 0xF000;
232
233 public static final int TAG_EXPOSURE_MODE = OFFSET + 2;
234 public static final int TAG_FLASH_MODE = OFFSET + 3;
235 public static final int TAG_WHITE_BALANCE = OFFSET + 4;
236 public static final int TAG_IMAGE_SIZE = OFFSET + 5;
237 public static final int TAG_IMAGE_QUALITY = OFFSET + 6;
238 public static final int TAG_SHOOTING_MODE = OFFSET + 7;
239 public static final int TAG_METERING_MODE = OFFSET + 8;
240 public static final int TAG_APEX_FILM_SPEED_VALUE = OFFSET + 9;
241 public static final int TAG_APEX_SHUTTER_SPEED_TIME_VALUE = OFFSET + 10;
242 public static final int TAG_APEX_APERTURE_VALUE = OFFSET + 11;
243 public static final int TAG_MACRO_MODE = OFFSET + 12;
244 public static final int TAG_DIGITAL_ZOOM = OFFSET + 13;
245 public static final int TAG_EXPOSURE_COMPENSATION = OFFSET + 14;
246 public static final int TAG_BRACKET_STEP = OFFSET + 15;
247 // 16 missing
248 public static final int TAG_INTERVAL_LENGTH = OFFSET + 17;
249 public static final int TAG_INTERVAL_NUMBER = OFFSET + 18;
250 public static final int TAG_FOCAL_LENGTH = OFFSET + 19;
251 public static final int TAG_FOCUS_DISTANCE = OFFSET + 20;
252 public static final int TAG_FLASH_FIRED = OFFSET + 21;
253 public static final int TAG_DATE = OFFSET + 22;
254 public static final int TAG_TIME = OFFSET + 23;
255 public static final int TAG_MAX_APERTURE_AT_FOCAL_LENGTH = OFFSET + 24;
256 // 25, 26 missing
257 public static final int TAG_FILE_NUMBER_MEMORY = OFFSET + 27;
258 public static final int TAG_LAST_FILE_NUMBER = OFFSET + 28;
259 public static final int TAG_WHITE_BALANCE_RED = OFFSET + 29;
260 public static final int TAG_WHITE_BALANCE_GREEN = OFFSET + 30;
261 public static final int TAG_WHITE_BALANCE_BLUE = OFFSET + 31;
262 public static final int TAG_SATURATION = OFFSET + 32;
263 public static final int TAG_CONTRAST = OFFSET + 33;
264 public static final int TAG_SHARPNESS = OFFSET + 34;
265 public static final int TAG_SUBJECT_PROGRAM = OFFSET + 35;
266 public static final int TAG_FLASH_COMPENSATION = OFFSET + 36;
267 public static final int TAG_ISO_SETTING = OFFSET + 37;
268 public static final int TAG_CAMERA_MODEL = OFFSET + 38;
269 public static final int TAG_INTERVAL_MODE = OFFSET + 39;
270 public static final int TAG_FOLDER_NAME = OFFSET + 40;
271 public static final int TAG_COLOR_MODE = OFFSET + 41;
272 public static final int TAG_COLOR_FILTER = OFFSET + 42;
273 public static final int TAG_BLACK_AND_WHITE_FILTER = OFFSET + 43;
274 public static final int TAG_INTERNAL_FLASH = OFFSET + 44;
275 public static final int TAG_APEX_BRIGHTNESS_VALUE = OFFSET + 45;
276 public static final int TAG_SPOT_FOCUS_POINT_X_COORDINATE = OFFSET + 46;
277 public static final int TAG_SPOT_FOCUS_POINT_Y_COORDINATE = OFFSET + 47;
278 public static final int TAG_WIDE_FOCUS_ZONE = OFFSET + 48;
279 public static final int TAG_FOCUS_MODE = OFFSET + 49;
280 public static final int TAG_FOCUS_AREA = OFFSET + 50;
281 public static final int TAG_DEC_SWITCH_POSITION = OFFSET + 51;
282 }
283
284 @NotNull
285 protected static final HashMap<Integer, String> _tagNameMap = new HashMap<Integer, String>();
286
287 static {
288 _tagNameMap.put(TAG_MAKERNOTE_VERSION, "Makernote Version");
289 _tagNameMap.put(TAG_CAMERA_SETTINGS_1, "Camera Settings");
290 _tagNameMap.put(TAG_CAMERA_SETTINGS_2, "Camera Settings");
291 _tagNameMap.put(TAG_COMPRESSED_IMAGE_SIZE, "Compressed Image Size");
292 _tagNameMap.put(TAG_MINOLTA_THUMBNAIL_OFFSET_1, "Thumbnail Offset");
293 _tagNameMap.put(TAG_MINOLTA_THUMBNAIL_OFFSET_2, "Thumbnail Offset");
294 _tagNameMap.put(TAG_MINOLTA_THUMBNAIL_LENGTH, "Thumbnail Length");
295 _tagNameMap.put(TAG_THUMBNAIL_IMAGE, "Thumbnail Image");
296 _tagNameMap.put(TAG_COLOUR_MODE, "Colour Mode");
297 _tagNameMap.put(TAG_IMAGE_QUALITY_1, "Image Quality");
298 _tagNameMap.put(TAG_IMAGE_QUALITY_2, "Image Quality");
299 _tagNameMap.put(TAG_BODY_FIRMWARE_VERSION, "Body Firmware Version");
300 _tagNameMap.put(TAG_SPECIAL_MODE, "Special Mode");
301 _tagNameMap.put(TAG_JPEG_QUALITY, "JPEG Quality");
302 _tagNameMap.put(TAG_MACRO_MODE, "Macro");
303 _tagNameMap.put(TAG_BW_MODE, "BW Mode");
304 _tagNameMap.put(TAG_DIGI_ZOOM_RATIO, "DigiZoom Ratio");
305 _tagNameMap.put(TAG_FOCAL_PLANE_DIAGONAL, "Focal Plane Diagonal");
306 _tagNameMap.put(TAG_LENS_DISTORTION_PARAMETERS, "Lens Distortion Parameters");
307 _tagNameMap.put(TAG_FIRMWARE_VERSION, "Firmware Version");
308 _tagNameMap.put(TAG_PICT_INFO, "Pict Info");
309 _tagNameMap.put(TAG_CAMERA_ID, "Camera Id");
310 _tagNameMap.put(TAG_IMAGE_WIDTH, "Image Width");
311 _tagNameMap.put(TAG_IMAGE_HEIGHT, "Image Height");
312 _tagNameMap.put(TAG_ORIGINAL_MANUFACTURER_MODEL, "Original Manufacturer Model");
313 _tagNameMap.put(TAG_PREVIEW_IMAGE, "Preview Image");
314 _tagNameMap.put(TAG_PRE_CAPTURE_FRAMES, "Pre Capture Frames");
315 _tagNameMap.put(TAG_WHITE_BOARD, "White Board");
316 _tagNameMap.put(TAG_ONE_TOUCH_WB, "One Touch WB");
317 _tagNameMap.put(TAG_WHITE_BALANCE_BRACKET, "White Balance Bracket");
318 _tagNameMap.put(TAG_WHITE_BALANCE_BIAS, "White Balance Bias");
319 _tagNameMap.put(TAG_SCENE_MODE, "Scene Mode");
320 _tagNameMap.put(TAG_FIRMWARE, "Firmware");
321 _tagNameMap.put(TAG_PRINT_IMAGE_MATCHING_INFO, "Print Image Matching (PIM) Info");
322 _tagNameMap.put(TAG_DATA_DUMP_1, "Data Dump");
323 _tagNameMap.put(TAG_DATA_DUMP_2, "Data Dump 2");
324 _tagNameMap.put(TAG_SHUTTER_SPEED_VALUE, "Shutter Speed Value");
325 _tagNameMap.put(TAG_ISO_VALUE, "ISO Value");
326 _tagNameMap.put(TAG_APERTURE_VALUE, "Aperture Value");
327 _tagNameMap.put(TAG_BRIGHTNESS_VALUE, "Brightness Value");
328 _tagNameMap.put(TAG_FLASH_MODE, "Flash Mode");
329 _tagNameMap.put(TAG_FLASH_DEVICE, "Flash Device");
330 _tagNameMap.put(TAG_BRACKET, "Bracket");
331 _tagNameMap.put(TAG_SENSOR_TEMPERATURE, "Sensor Temperature");
332 _tagNameMap.put(TAG_LENS_TEMPERATURE, "Lens Temperature");
333 _tagNameMap.put(TAG_LIGHT_CONDITION, "Light Condition");
334 _tagNameMap.put(TAG_FOCUS_RANGE, "Focus Range");
335 _tagNameMap.put(TAG_FOCUS_MODE, "Focus Mode");
336 _tagNameMap.put(TAG_FOCUS_DISTANCE, "Focus Distance");
337 _tagNameMap.put(TAG_ZOOM, "Zoom");
338 _tagNameMap.put(TAG_MACRO_FOCUS, "Macro Focus");
339 _tagNameMap.put(TAG_SHARPNESS, "Sharpness");
340 _tagNameMap.put(TAG_FLASH_CHARGE_LEVEL, "Flash Charge Level");
341 _tagNameMap.put(TAG_COLOUR_MATRIX, "Colour Matrix");
342 _tagNameMap.put(TAG_BLACK_LEVEL, "Black Level");
343 _tagNameMap.put(TAG_WHITE_BALANCE, "White Balance");
344 _tagNameMap.put(TAG_RED_BIAS, "Red Bias");
345 _tagNameMap.put(TAG_BLUE_BIAS, "Blue Bias");
346 _tagNameMap.put(TAG_COLOR_MATRIX_NUMBER, "Color Matrix Number");
347 _tagNameMap.put(TAG_SERIAL_NUMBER, "Serial Number");
348 _tagNameMap.put(TAG_FLASH_BIAS, "Flash Bias");
349 _tagNameMap.put(TAG_EXTERNAL_FLASH_BOUNCE, "External Flash Bounce");
350 _tagNameMap.put(TAG_EXTERNAL_FLASH_ZOOM, "External Flash Zoom");
351 _tagNameMap.put(TAG_EXTERNAL_FLASH_MODE, "External Flash Mode");
352 _tagNameMap.put(TAG_CONTRAST, "Contrast");
353 _tagNameMap.put(TAG_SHARPNESS_FACTOR, "Sharpness Factor");
354 _tagNameMap.put(TAG_COLOUR_CONTROL, "Colour Control");
355 _tagNameMap.put(TAG_VALID_BITS, "Valid Bits");
356 _tagNameMap.put(TAG_CORING_FILTER, "Coring Filter");
357 _tagNameMap.put(TAG_FINAL_WIDTH, "Final Width");
358 _tagNameMap.put(TAG_FINAL_HEIGHT, "Final Height");
359 _tagNameMap.put(TAG_COMPRESSION_RATIO, "Compression Ratio");
360 _tagNameMap.put(TAG_THUMBNAIL, "Thumbnail");
361 _tagNameMap.put(TAG_THUMBNAIL_OFFSET, "Thumbnail Offset");
362 _tagNameMap.put(TAG_THUMBNAIL_LENGTH, "Thumbnail Length");
363 _tagNameMap.put(TAG_CCD_SCAN_MODE, "CCD Scan Mode");
364 _tagNameMap.put(TAG_NOISE_REDUCTION, "Noise Reduction");
365 _tagNameMap.put(TAG_INFINITY_LENS_STEP, "Infinity Lens Step");
366 _tagNameMap.put(TAG_NEAR_LENS_STEP, "Near Lens Step");
367 _tagNameMap.put(TAG_EQUIPMENT, "Equipment");
368 _tagNameMap.put(TAG_CAMERA_SETTINGS, "Camera Settings");
369 _tagNameMap.put(TAG_RAW_DEVELOPMENT, "Raw Development");
370 _tagNameMap.put(TAG_RAW_DEVELOPMENT_2, "Raw Development 2");
371 _tagNameMap.put(TAG_IMAGE_PROCESSING, "Image Processing");
372 _tagNameMap.put(TAG_FOCUS_INFO, "Focus Info");
373 _tagNameMap.put(TAG_RAW_INFO, "Raw Info");
374
375 _tagNameMap.put(CameraSettings.TAG_EXPOSURE_MODE, "Exposure Mode");
376 _tagNameMap.put(CameraSettings.TAG_FLASH_MODE, "Flash Mode");
377 _tagNameMap.put(CameraSettings.TAG_WHITE_BALANCE, "White Balance");
378 _tagNameMap.put(CameraSettings.TAG_IMAGE_SIZE, "Image Size");
379 _tagNameMap.put(CameraSettings.TAG_IMAGE_QUALITY, "Image Quality");
380 _tagNameMap.put(CameraSettings.TAG_SHOOTING_MODE, "Shooting Mode");
381 _tagNameMap.put(CameraSettings.TAG_METERING_MODE, "Metering Mode");
382 _tagNameMap.put(CameraSettings.TAG_APEX_FILM_SPEED_VALUE, "Apex Film Speed Value");
383 _tagNameMap.put(CameraSettings.TAG_APEX_SHUTTER_SPEED_TIME_VALUE, "Apex Shutter Speed Time Value");
384 _tagNameMap.put(CameraSettings.TAG_APEX_APERTURE_VALUE, "Apex Aperture Value");
385 _tagNameMap.put(CameraSettings.TAG_MACRO_MODE, "Macro Mode");
386 _tagNameMap.put(CameraSettings.TAG_DIGITAL_ZOOM, "Digital Zoom");
387 _tagNameMap.put(CameraSettings.TAG_EXPOSURE_COMPENSATION, "Exposure Compensation");
388 _tagNameMap.put(CameraSettings.TAG_BRACKET_STEP, "Bracket Step");
389
390 _tagNameMap.put(CameraSettings.TAG_INTERVAL_LENGTH, "Interval Length");
391 _tagNameMap.put(CameraSettings.TAG_INTERVAL_NUMBER, "Interval Number");
392 _tagNameMap.put(CameraSettings.TAG_FOCAL_LENGTH, "Focal Length");
393 _tagNameMap.put(CameraSettings.TAG_FOCUS_DISTANCE, "Focus Distance");
394 _tagNameMap.put(CameraSettings.TAG_FLASH_FIRED, "Flash Fired");
395 _tagNameMap.put(CameraSettings.TAG_DATE, "Date");
396 _tagNameMap.put(CameraSettings.TAG_TIME, "Time");
397 _tagNameMap.put(CameraSettings.TAG_MAX_APERTURE_AT_FOCAL_LENGTH, "Max Aperture at Focal Length");
398
399 _tagNameMap.put(CameraSettings.TAG_FILE_NUMBER_MEMORY, "File Number Memory");
400 _tagNameMap.put(CameraSettings.TAG_LAST_FILE_NUMBER, "Last File Number");
401 _tagNameMap.put(CameraSettings.TAG_WHITE_BALANCE_RED, "White Balance Red");
402 _tagNameMap.put(CameraSettings.TAG_WHITE_BALANCE_GREEN, "White Balance Green");
403 _tagNameMap.put(CameraSettings.TAG_WHITE_BALANCE_BLUE, "White Balance Blue");
404 _tagNameMap.put(CameraSettings.TAG_SATURATION, "Saturation");
405 _tagNameMap.put(CameraSettings.TAG_CONTRAST, "Contrast");
406 _tagNameMap.put(CameraSettings.TAG_SHARPNESS, "Sharpness");
407 _tagNameMap.put(CameraSettings.TAG_SUBJECT_PROGRAM, "Subject Program");
408 _tagNameMap.put(CameraSettings.TAG_FLASH_COMPENSATION, "Flash Compensation");
409 _tagNameMap.put(CameraSettings.TAG_ISO_SETTING, "ISO Setting");
410 _tagNameMap.put(CameraSettings.TAG_CAMERA_MODEL, "Camera Model");
411 _tagNameMap.put(CameraSettings.TAG_INTERVAL_MODE, "Interval Mode");
412 _tagNameMap.put(CameraSettings.TAG_FOLDER_NAME, "Folder Name");
413 _tagNameMap.put(CameraSettings.TAG_COLOR_MODE, "Color Mode");
414 _tagNameMap.put(CameraSettings.TAG_COLOR_FILTER, "Color Filter");
415 _tagNameMap.put(CameraSettings.TAG_BLACK_AND_WHITE_FILTER, "Black and White Filter");
416 _tagNameMap.put(CameraSettings.TAG_INTERNAL_FLASH, "Internal Flash");
417 _tagNameMap.put(CameraSettings.TAG_APEX_BRIGHTNESS_VALUE, "Apex Brightness Value");
418 _tagNameMap.put(CameraSettings.TAG_SPOT_FOCUS_POINT_X_COORDINATE, "Spot Focus Point X Coordinate");
419 _tagNameMap.put(CameraSettings.TAG_SPOT_FOCUS_POINT_Y_COORDINATE, "Spot Focus Point Y Coordinate");
420 _tagNameMap.put(CameraSettings.TAG_WIDE_FOCUS_ZONE, "Wide Focus Zone");
421 _tagNameMap.put(CameraSettings.TAG_FOCUS_MODE, "Focus Mode");
422 _tagNameMap.put(CameraSettings.TAG_FOCUS_AREA, "Focus Area");
423 _tagNameMap.put(CameraSettings.TAG_DEC_SWITCH_POSITION, "DEC Switch Position");
424 }
425
426 public OlympusMakernoteDirectory()
427 {
428 this.setDescriptor(new OlympusMakernoteDescriptor(this));
429 }
430
431 @Override
432 @NotNull
433 public String getName()
434 {
435 return "Olympus Makernote";
436 }
437
438 @Override
439 public void setByteArray(int tagType, @NotNull byte[] bytes)
440 {
441 if (tagType == TAG_CAMERA_SETTINGS_1 || tagType == TAG_CAMERA_SETTINGS_2) {
442 processCameraSettings(bytes);
443 } else {
444 super.setByteArray(tagType, bytes);
445 }
446 }
447
448 private void processCameraSettings(byte[] bytes)
449 {
450 SequentialByteArrayReader reader = new SequentialByteArrayReader(bytes);
451 reader.setMotorolaByteOrder(true);
452
453 int count = bytes.length / 4;
454
455 try {
456 for (int i = 0; i < count; i++) {
457 int value = reader.getInt32();
458 setInt(CameraSettings.OFFSET + i, value);
459 }
460 } catch (IOException e) {
461 // Should never happen, given that we check the length of the bytes beforehand.
462 e.printStackTrace();
463 }
464 }
465
466 public boolean isIntervalMode()
467 {
468 Long value = getLongObject(CameraSettings.TAG_SHOOTING_MODE);
469 return value != null && value == 5;
470 }
471
472 @Override
473 @NotNull
474 protected HashMap<Integer, String> getTagNameMap()
475 {
476 return _tagNameMap;
477 }
478}
Note: See TracBrowser for help on using the repository browser.