Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

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 }