Source code: com/drew/metadata/exif/CanonMakernoteDirectory.java
1 /*
2 * Created by dnoakes on 27-Nov-2002 10:10:47 using IntelliJ IDEA.
3 */
4 package com.drew.metadata.exif;
5
6 import com.drew.metadata.Directory;
7
8 import java.util.HashMap;
9
10 /**
11 *
12 */
13 public class CanonMakernoteDirectory extends Directory
14 {
15 // CANON cameras have some funny bespoke fields that need further processing...
16 public static final int TAG_CANON_CAMERA_STATE_1 = 0x0001;
17 public static final int TAG_CANON_CAMERA_STATE_2 = 0x0004;
18
19 public static final int TAG_CANON_IMAGE_TYPE = 0x0006;
20 public static final int TAG_CANON_FIRMWARE_VERSION = 0x0007;
21 public static final int TAG_CANON_IMAGE_NUMBER = 0x0008;
22 public static final int TAG_CANON_OWNER_NAME = 0x0009;
23 public static final int TAG_CANON_SERIAL_NUMBER = 0x000C;
24 public static final int TAG_CANON_UNKNOWN_1 = 0x000D;
25 public static final int TAG_CANON_CUSTOM_FUNCTIONS = 0x000F;
26
27 // These 'sub'-tag values have been created for consistency -- they don't exist within the exif segment
28 public static final int TAG_CANON_STATE1_MACRO_MODE = 0xC101;
29 public static final int TAG_CANON_STATE1_SELF_TIMER_DELAY = 0xC102;
30 public static final int TAG_CANON_STATE1_UNKNOWN_1 = 0xC103;
31 public static final int TAG_CANON_STATE1_FLASH_MODE = 0xC104;
32 public static final int TAG_CANON_STATE1_CONTINUOUS_DRIVE_MODE = 0xC105;
33 public static final int TAG_CANON_STATE1_UNKNOWN_2 = 0xC106;
34 public static final int TAG_CANON_STATE1_FOCUS_MODE_1 = 0xC107;
35 public static final int TAG_CANON_STATE1_UNKNOWN_3 = 0xC108;
36 public static final int TAG_CANON_STATE1_UNKNOWN_4 = 0xC109;
37 public static final int TAG_CANON_STATE1_IMAGE_SIZE = 0xC10A;
38 public static final int TAG_CANON_STATE1_EASY_SHOOTING_MODE = 0xC10B;
39 public static final int TAG_CANON_STATE1_UNKNOWN_5 = 0xC10C;
40 public static final int TAG_CANON_STATE1_CONTRAST = 0xC10D;
41 public static final int TAG_CANON_STATE1_SATURATION = 0xC10E;
42 public static final int TAG_CANON_STATE1_SHARPNESS = 0xC10F;
43 public static final int TAG_CANON_STATE1_ISO = 0xC110;
44 public static final int TAG_CANON_STATE1_METERING_MODE = 0xC111;
45 public static final int TAG_CANON_STATE1_UNKNOWN_6 = 0xC112;
46 public static final int TAG_CANON_STATE1_AF_POINT_SELECTED = 0xC113;
47 public static final int TAG_CANON_STATE1_EXPOSURE_MODE = 0xC114;
48 public static final int TAG_CANON_STATE1_UNKNOWN_7 = 0xC115;
49 public static final int TAG_CANON_STATE1_UNKNOWN_8 = 0xC116;
50 public static final int TAG_CANON_STATE1_LONG_FOCAL_LENGTH = 0xC117;
51 public static final int TAG_CANON_STATE1_SHORT_FOCAL_LENGTH = 0xC118;
52 public static final int TAG_CANON_STATE1_FOCAL_UNITS_PER_MM = 0xC119;
53 public static final int TAG_CANON_STATE1_UNKNOWN_9 = 0xC11A;
54 public static final int TAG_CANON_STATE1_UNKNOWN_10 = 0xC11B;
55 public static final int TAG_CANON_STATE1_UNKNOWN_11 = 0xC11C;
56 public static final int TAG_CANON_STATE1_FLASH_DETAILS = 0xC11D;
57 public static final int TAG_CANON_STATE1_UNKNOWN_12 = 0xC11E;
58 public static final int TAG_CANON_STATE1_UNKNOWN_13 = 0xC11F;
59 public static final int TAG_CANON_STATE1_FOCUS_MODE_2 = 0xC120;
60
61 public static final int TAG_CANON_STATE2_WHITE_BALANCE = 0xC207;
62 public static final int TAG_CANON_STATE2_SEQUENCE_NUMBER = 0xC209;
63 public static final int TAG_CANON_STATE2_AF_POINT_USED = 0xC20E;
64 public static final int TAG_CANON_STATE2_FLASH_BIAS = 0xC20F;
65 public static final int TAG_CANON_STATE2_SUBJECT_DISTANCE = 0xC213;
66
67 // 9 A B C D E F 10 11 12 13
68 // 9 10 11 12 13 14 15 16 17 18 19
69 protected static final HashMap tagNameMap = new HashMap();
70
71 static
72 {
73 tagNameMap.put(new Integer(TAG_CANON_FIRMWARE_VERSION), "Firmware Version");
74 tagNameMap.put(new Integer(TAG_CANON_IMAGE_NUMBER), "Image Number");
75 tagNameMap.put(new Integer(TAG_CANON_IMAGE_TYPE), "Image Type");
76 tagNameMap.put(new Integer(TAG_CANON_OWNER_NAME), "Owner Name");
77 tagNameMap.put(new Integer(TAG_CANON_UNKNOWN_1), "Makernote Unknown 1");
78 tagNameMap.put(new Integer(TAG_CANON_CUSTOM_FUNCTIONS), "Custom Functions");
79 tagNameMap.put(new Integer(TAG_CANON_SERIAL_NUMBER), "Camera Serial Number");
80 tagNameMap.put(new Integer(TAG_CANON_STATE1_AF_POINT_SELECTED), "AF Point Selected");
81 tagNameMap.put(new Integer(TAG_CANON_STATE1_CONTINUOUS_DRIVE_MODE), "Continuous Drive Mode");
82 tagNameMap.put(new Integer(TAG_CANON_STATE1_CONTRAST), "Contrast");
83 tagNameMap.put(new Integer(TAG_CANON_STATE1_EASY_SHOOTING_MODE), "Easy Shooting Mode");
84 tagNameMap.put(new Integer(TAG_CANON_STATE1_EXPOSURE_MODE), "Exposure Mode");
85 tagNameMap.put(new Integer(TAG_CANON_STATE1_FLASH_DETAILS), "Flash Details");
86 tagNameMap.put(new Integer(TAG_CANON_STATE1_FLASH_MODE), "Flash Mode");
87 tagNameMap.put(new Integer(TAG_CANON_STATE1_FOCAL_UNITS_PER_MM), "Focal Units per mm");
88 tagNameMap.put(new Integer(TAG_CANON_STATE1_FOCUS_MODE_1), "Focus Mode");
89 tagNameMap.put(new Integer(TAG_CANON_STATE1_FOCUS_MODE_2), "Focus Mode");
90 tagNameMap.put(new Integer(TAG_CANON_STATE1_IMAGE_SIZE), "Image Size");
91 tagNameMap.put(new Integer(TAG_CANON_STATE1_ISO), "Iso");
92 tagNameMap.put(new Integer(TAG_CANON_STATE1_LONG_FOCAL_LENGTH), "Long Focal Length");
93 tagNameMap.put(new Integer(TAG_CANON_STATE1_MACRO_MODE), "Macro Mode");
94 tagNameMap.put(new Integer(TAG_CANON_STATE1_METERING_MODE), "Metering Mode");
95 tagNameMap.put(new Integer(TAG_CANON_STATE1_SATURATION), "Saturation");
96 tagNameMap.put(new Integer(TAG_CANON_STATE1_SELF_TIMER_DELAY), "Self Timer Delay");
97 tagNameMap.put(new Integer(TAG_CANON_STATE1_SHARPNESS), "Sharpness");
98 tagNameMap.put(new Integer(TAG_CANON_STATE1_SHORT_FOCAL_LENGTH), "Short Focal Length");
99 /*
100 tagNameMap.put(new Integer(TAG_CANON_STATE1_UNKNOWN_1), "Unknown Camera State 1");
101 tagNameMap.put(new Integer(TAG_CANON_STATE1_UNKNOWN_2), "Unknown Camera State 2");
102 tagNameMap.put(new Integer(TAG_CANON_STATE1_UNKNOWN_3), "Unknown Camera State 3");
103 tagNameMap.put(new Integer(TAG_CANON_STATE1_UNKNOWN_4), "Unknown Camera State 4");
104 tagNameMap.put(new Integer(TAG_CANON_STATE1_UNKNOWN_5), "Unknown Camera State 5");
105 tagNameMap.put(new Integer(TAG_CANON_STATE1_UNKNOWN_6), "Unknown Camera State 6");
106 tagNameMap.put(new Integer(TAG_CANON_STATE1_UNKNOWN_7), "Unknown Camera State 7");
107 tagNameMap.put(new Integer(TAG_CANON_STATE1_UNKNOWN_8), "Unknown Camera State 8");
108 tagNameMap.put(new Integer(TAG_CANON_STATE1_UNKNOWN_9), "Unknown Camera State 9");
109 tagNameMap.put(new Integer(TAG_CANON_STATE1_UNKNOWN_10), "Unknown Camera State 10");
110 tagNameMap.put(new Integer(TAG_CANON_STATE1_UNKNOWN_11), "Unknown Camera State 11");
111 tagNameMap.put(new Integer(TAG_CANON_STATE1_UNKNOWN_12), "Unknown Camera State 12");
112 tagNameMap.put(new Integer(TAG_CANON_STATE1_UNKNOWN_13), "Unknown Camera State 13");
113 */
114
115 tagNameMap.put(new Integer(TAG_CANON_STATE2_WHITE_BALANCE), "White Balance");
116 tagNameMap.put(new Integer(TAG_CANON_STATE2_SEQUENCE_NUMBER), "Sequence Number");
117 tagNameMap.put(new Integer(TAG_CANON_STATE2_AF_POINT_USED), "AF Point Used");
118 tagNameMap.put(new Integer(TAG_CANON_STATE2_FLASH_BIAS), "Flash Bias");
119 tagNameMap.put(new Integer(TAG_CANON_STATE2_SUBJECT_DISTANCE), "Subject Distance");
120 }
121
122 public CanonMakernoteDirectory()
123 {
124 this.setDescriptor(new CanonMakernoteDescriptor(this));
125 }
126
127 public String getName()
128 {
129 return "Canon Makernote";
130 }
131
132 protected HashMap getTagNameMap()
133 {
134 return tagNameMap;
135 }
136
137 public void setIntArray(int tagType, int[] ints)
138 {
139 if (tagType == TAG_CANON_CAMERA_STATE_1) {
140 // this single tag has multiple values within
141 int subTagTypeBase = 0xC100;
142 // we intentionally skip the first array member
143 for (int i = 1; i < ints.length; i++) {
144 setInt(subTagTypeBase + i, ints[i]);
145 }
146 } else if (tagType == TAG_CANON_CAMERA_STATE_2) {
147 // this single tag has multiple values within
148 int subTagTypeBase = 0xC200;
149 // we intentionally skip the first array member
150 for (int i = 1; i < ints.length; i++) {
151 setInt(subTagTypeBase + i, ints[i]);
152 }
153 } else {
154 // no special handling...
155 super.setIntArray(tagType, ints);
156 }
157 }
158 }