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

Quick Search    Search Deep

Source code: com/drew/metadata/exif/FujifilmMakernoteDescriptor.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.lang.Rational;
7   import com.drew.metadata.Directory;
8   import com.drew.metadata.MetadataException;
9   import com.drew.metadata.TagDescriptor;
10  
11  /**
12   * Fujifilm's digicam added the MakerNote tag from the Year2000's model (e.g.Finepix1400,
13   * Finepix4700). It uses IFD format and start from ASCII character 'FUJIFILM', and next 4
14   * bytes(value 0x000c) points the offset to first IFD entry. Example of actual data
15   * structure is shown below.
16   *
17   * :0000: 46 55 4A 49 46 49 4C 4D-0C 00 00 00 0F 00 00 00 :0000: FUJIFILM........
18   * :0010: 07 00 04 00 00 00 30 31-33 30 00 10 02 00 08 00 :0010: ......0130......
19   *
20   * There are two big differences to the other manufacturers.
21   * - Fujifilm's Exif data uses Motorola align, but MakerNote ignores it and uses Intel
22   *   align.
23   * - The other manufacturer's MakerNote counts the "offset to data" from the first byte
24   *   of TIFF header (same as the other IFD), but Fujifilm counts it from the first byte
25   *   of MakerNote itself.
26   */
27  public class FujifilmMakernoteDescriptor extends TagDescriptor
28  {
29      public FujifilmMakernoteDescriptor(Directory directory)
30      {
31          super(directory);
32      }
33  
34      public String getDescription(int tagType) throws MetadataException
35      {
36          switch (tagType) {
37              case FujiFilmMakernoteDirectory.TAG_FUJIFILM_SHARPNESS:
38                  return getSharpnessDescription();
39              case FujiFilmMakernoteDirectory.TAG_FUJIFILM_WHITE_BALANCE:
40                  return getWhiteBalanceDescription();
41              case FujiFilmMakernoteDirectory.TAG_FUJIFILM_COLOR:
42                  return getColorDescription();
43              case FujiFilmMakernoteDirectory.TAG_FUJIFILM_TONE:
44                  return getToneDescription();
45              case FujiFilmMakernoteDirectory.TAG_FUJIFILM_FLASH_MODE:
46                  return getFlashModeDescription();
47              case FujiFilmMakernoteDirectory.TAG_FUJIFILM_FLASH_STRENGTH:
48                  return getFlashStrengthDescription();
49              case FujiFilmMakernoteDirectory.TAG_FUJIFILM_MACRO:
50                  return getMacroDescription();
51              case FujiFilmMakernoteDirectory.TAG_FUJIFILM_FOCUS_MODE:
52                  return getFocusModeDescription();
53              case FujiFilmMakernoteDirectory.TAG_FUJIFILM_SLOW_SYNCHRO:
54                  return getSlowSyncDescription();
55              case FujiFilmMakernoteDirectory.TAG_FUJIFILM_PICTURE_MODE:
56                  return getPictureModeDescription();
57              case FujiFilmMakernoteDirectory.TAG_FUJIFILM_CONTINUOUS_TAKING_OR_AUTO_BRACKETTING:
58                  return getContinuousTakingOrAutoBrackettingDescription();
59              case FujiFilmMakernoteDirectory.TAG_FUJIFILM_BLUR_WARNING:
60                  return getBlurWarningDescription();
61              case FujiFilmMakernoteDirectory.TAG_FUJIFILM_FOCUS_WARNING:
62                  return getFocusWarningDescription();
63              case FujiFilmMakernoteDirectory.TAG_FUJIFILM_AE_WARNING:
64                  return getAutoExposureWarningDescription();
65              default:
66                  return _directory.getString(tagType);
67          }
68      }
69  
70      private String getAutoExposureWarningDescription() throws MetadataException
71      {
72          if (!_directory.containsTag(FujiFilmMakernoteDirectory.TAG_FUJIFILM_AE_WARNING)) return null;
73          int value = _directory.getInt(FujiFilmMakernoteDirectory.TAG_FUJIFILM_AE_WARNING);
74          switch (value) {
75              case 0:
76                  return "AE good";
77              case 1:
78                  return "Over exposed (>1/1000s @ F11)";
79              default:
80                  return "Unknown (" + value + ")";
81          }
82      }
83  
84      private String getFocusWarningDescription() throws MetadataException
85      {
86          if (!_directory.containsTag(FujiFilmMakernoteDirectory.TAG_FUJIFILM_FOCUS_WARNING)) return null;
87          int value = _directory.getInt(FujiFilmMakernoteDirectory.TAG_FUJIFILM_FOCUS_WARNING);
88          switch (value) {
89              case 0:
90                  return "Auto focus good";
91              case 1:
92                  return "Out of focus";
93              default:
94                  return "Unknown (" + value + ")";
95          }
96      }
97  
98      private String getBlurWarningDescription() throws MetadataException
99      {
100         if (!_directory.containsTag(FujiFilmMakernoteDirectory.TAG_FUJIFILM_BLUR_WARNING)) return null;
101         int value = _directory.getInt(FujiFilmMakernoteDirectory.TAG_FUJIFILM_BLUR_WARNING);
102         switch (value) {
103             case 0:
104                 return "No blur warning";
105             case 1:
106                 return "Blur warning";
107             default:
108                 return "Unknown (" + value + ")";
109         }
110     }
111 
112     private String getContinuousTakingOrAutoBrackettingDescription() throws MetadataException
113     {
114         if (!_directory.containsTag(FujiFilmMakernoteDirectory.TAG_FUJIFILM_CONTINUOUS_TAKING_OR_AUTO_BRACKETTING)) return null;
115         int value = _directory.getInt(FujiFilmMakernoteDirectory.TAG_FUJIFILM_CONTINUOUS_TAKING_OR_AUTO_BRACKETTING);
116         switch (value) {
117             case 0:
118                 return "Off";
119             case 1:
120                 return "On";
121             default:
122                 return "Unknown (" + value + ")";
123         }
124     }
125 
126     private String getPictureModeDescription() throws MetadataException
127     {
128         if (!_directory.containsTag(FujiFilmMakernoteDirectory.TAG_FUJIFILM_PICTURE_MODE)) return null;
129         int value = _directory.getInt(FujiFilmMakernoteDirectory.TAG_FUJIFILM_PICTURE_MODE);
130         switch (value) {
131             case 0:
132                 return "Auto";
133             case 1:
134                 return "Portrait scene";
135             case 2:
136                 return "Landscape scene";
137             case 4:
138                 return "Sports scene";
139             case 5:
140                 return "Night scene";
141             case 6:
142                 return "Program AE";
143             case 256:
144                 return "Aperture priority AE";
145             case 512:
146                 return "Shutter priority AE";
147             case 768:
148                 return "Manual exposure";
149             default:
150                 return "Unknown (" + value + ")";
151         }
152     }
153 
154     private String getSlowSyncDescription() throws MetadataException
155     {
156         if (!_directory.containsTag(FujiFilmMakernoteDirectory.TAG_FUJIFILM_SLOW_SYNCHRO)) return null;
157         int value = _directory.getInt(FujiFilmMakernoteDirectory.TAG_FUJIFILM_SLOW_SYNCHRO);
158         switch (value) {
159             case 0:
160                 return "Off";
161             case 1:
162                 return "On";
163             default:
164                 return "Unknown (" + value + ")";
165         }
166     }
167 
168     private String getFocusModeDescription() throws MetadataException
169     {
170         if (!_directory.containsTag(FujiFilmMakernoteDirectory.TAG_FUJIFILM_FOCUS_MODE)) return null;
171         int value = _directory.getInt(FujiFilmMakernoteDirectory.TAG_FUJIFILM_FOCUS_MODE);
172         switch (value) {
173             case 0:
174                 return "Auto focus";
175             case 1:
176                 return "Manual focus";
177             default:
178                 return "Unknown (" + value + ")";
179         }
180     }
181 
182     private String getMacroDescription() throws MetadataException
183     {
184         if (!_directory.containsTag(FujiFilmMakernoteDirectory.TAG_FUJIFILM_MACRO)) return null;
185         int value = _directory.getInt(FujiFilmMakernoteDirectory.TAG_FUJIFILM_MACRO);
186         switch (value) {
187             case 0:
188                 return "Off";
189             case 1:
190                 return "On";
191             default:
192                 return "Unknown (" + value + ")";
193         }
194     }
195 
196     private String getFlashStrengthDescription() throws MetadataException
197     {
198         if (!_directory.containsTag(FujiFilmMakernoteDirectory.TAG_FUJIFILM_FLASH_STRENGTH)) return null;
199         Rational value = _directory.getRational(FujiFilmMakernoteDirectory.TAG_FUJIFILM_FLASH_STRENGTH);
200         return value.toSimpleString(false) + " eV (Apex)";
201     }
202 
203     private String getFlashModeDescription() throws MetadataException
204     {
205         if (!_directory.containsTag(FujiFilmMakernoteDirectory.TAG_FUJIFILM_FLASH_MODE)) return null;
206         int value = _directory.getInt(FujiFilmMakernoteDirectory.TAG_FUJIFILM_FLASH_MODE);
207         switch (value) {
208             case 0:
209                 return "Auto";
210             case 1:
211                 return "On";
212             case 2:
213                 return "Off";
214             case 3:
215                 return "Red-eye reduction";
216             default:
217                 return "Unknown (" + value + ")";
218         }
219     }
220 
221     private String getToneDescription() throws MetadataException
222     {
223         if (!_directory.containsTag(FujiFilmMakernoteDirectory.TAG_FUJIFILM_TONE)) return null;
224         int value = _directory.getInt(FujiFilmMakernoteDirectory.TAG_FUJIFILM_TONE);
225         switch (value) {
226             case 0:
227                 return "Normal (STD)";
228             case 256:
229                 return "High (HARD)";
230             case 512:
231                 return "Low (ORG)";
232             default:
233                 return "Unknown (" + value + ")";
234         }
235     }
236 
237     private String getColorDescription() throws MetadataException
238     {
239         if (!_directory.containsTag(FujiFilmMakernoteDirectory.TAG_FUJIFILM_COLOR)) return null;
240         int value = _directory.getInt(FujiFilmMakernoteDirectory.TAG_FUJIFILM_COLOR);
241         switch (value) {
242             case 0:
243                 return "Normal (STD)";
244             case 256:
245                 return "High";
246             case 512:
247                 return "Low (ORG)";
248             default:
249                 return "Unknown (" + value + ")";
250         }
251     }
252 
253     private String getWhiteBalanceDescription() throws MetadataException
254     {
255         if (!_directory.containsTag(FujiFilmMakernoteDirectory.TAG_FUJIFILM_WHITE_BALANCE)) return null;
256         int value = _directory.getInt(FujiFilmMakernoteDirectory.TAG_FUJIFILM_WHITE_BALANCE);
257         switch (value) {
258             case 0:
259                 return "Auto";
260             case 256:
261                 return "Daylight";
262             case 512:
263                 return "Cloudy";
264             case 768:
265                 return "DaylightColor-fluorescence";
266             case 769:
267                 return "DaywhiteColor-fluorescence";
268             case 770:
269                 return "White-fluorescence";
270             case 1024:
271                 return "Incandenscense";
272             case 3840:
273                 return "Custom white balance";
274             default:
275                 return "Unknown (" + value + ")";
276         }
277     }
278 
279     private String getSharpnessDescription() throws MetadataException
280     {
281         if (!_directory.containsTag(FujiFilmMakernoteDirectory.TAG_FUJIFILM_SHARPNESS)) return null;
282         int value = _directory.getInt(FujiFilmMakernoteDirectory.TAG_FUJIFILM_SHARPNESS);
283         switch (value) {
284             case 1:
285             case 2:
286                 return "Soft";
287             case 3:
288                 return "Normal";
289             case 4:
290             case 5:
291                 return "Hard";
292             default:
293                 return "Unknown (" + value + ")";
294         }
295     }
296 }