source: main/trunk/greenstone2/perllib/cpan/Image/ExifTool/Sigma.pm@ 34921

Last change on this file since 34921 was 34921, checked in by anupama, 3 years ago

Committing the improvements to EmbeddedMetaPlugin's processing of Keywords vs other metadata fields. Keywords were literally stored as arrays of words rather than phrases in PDFs (at least in Diego's sample PDF), whereas other meta fields like Subjects and Creators stored them as arrays of phrases. To get both to work, Kathy updated EXIF to a newer version, to retrieve the actual EXIF values stored in the PDF. And Kathy and Dr Bainbridge came up with a new option that I added called apply_join_before_split_to_metafields that's a regex which can list the metadata fields to apply the join_before_split to and whcih previously always got applied to all metadata fields. Now it's applied to any *Keywords metafields by default, as that's the metafield we have experience of that behaves differently to the others, as it stores by word instead of phrases. Tested on Diego's sample PDF. Diego has double-checked it to works on his sample PDF too, setting the split char to ; and turning on the join_before_split and leaving apply_join_before_split_to_metafields at its default of .*Keywords. File changes are strings.properties for the tooltip, the plugin introducing the option and working with it and Kathy's EXIF updates affecting cpan/File and cpan/Image.

File size: 33.2 KB
Line 
1#------------------------------------------------------------------------------
2# File: Sigma.pm
3#
4# Description: Sigma/Foveon EXIF maker notes tags
5#
6# Revisions: 04/06/2004 - P. Harvey Created
7# 02/20/2007 - PH added SD14 tags
8# 24/06/2010 - PH decode some SD15 tags
9#
10# References: 1) http://www.x3f.info/technotes/FileDocs/MakerNoteDoc.html
11# IB) Iliah Borg private communication (LibRaw)
12# NJ) Niels Kristian Bech Jensen
13# JR) Jos Roost
14#------------------------------------------------------------------------------
15
16package Image::ExifTool::Sigma;
17
18use strict;
19use vars qw($VERSION %sigmaLensTypes);
20use Image::ExifTool::Exif;
21
22$VERSION = '1.31';
23
24# sigma LensType lookup (ref IB)
25%sigmaLensTypes = (
26 Notes => q{
27 Sigma LensType values are hexadecimal numbers stored as a string (without
28 the leading "0x"). Decimal values have been added to differentiate lenses
29 which would otherwise have the same LensType, and are used by the Composite
30 LensID tag when attempting to identify the specific lens model.
31 },
32 # 0x0 => 'Sigma 50mm F2.8 EX Macro', (0x0 used for other lenses too)
33 # 0x8 - 18-125mm LENSARANGE@18mm=22-4
34 0x10, 'Sigma 50mm F2.8 EX DG MACRO',
35 # (0x10 = 16)
36 16.1 => 'Sigma 70mm F2.8 EX DG Macro',
37 16.2 => 'Sigma 105mm F2.8 EX DG Macro',
38 0x16 => 'Sigma 18-50mm F3.5-5.6 DC', #PH
39 0x103 => 'Sigma 180mm F3.5 EX IF HSM APO Macro',
40 0x104 => 'Sigma 150mm F2.8 EX DG HSM APO Macro',
41 0x105 => 'Sigma 180mm F3.5 EX DG HSM APO Macro',
42 0x106 => 'Sigma 150mm F2.8 EX DG OS HSM APO Macro',
43 0x107 => 'Sigma 180mm F2.8 EX DG OS HSM APO Macro',
44 # (0x129 = 297)
45 0x129 => 'Sigma Lens (0x129)', #PH
46 297.1 => 'Sigma 14mm F2.8 EX Aspherical', #PH
47 297.2 => 'Sigma 30mm F1.4',
48 # (0x131 = 305)
49 0x131 => 'Sigma Lens (0x131)',
50 305.1 => 'Sigma 17-70mm F2.8-4.5 DC Macro', #PH
51 305.2 => 'Sigma 70-200mm F2.8 APO EX HSM',
52 305.3 => 'Sigma 120-300mm F2.8 APO EX IF HSM',
53 0x134 => 'Sigma 100-300mm F4 EX DG HSM APO',
54 0x135 => 'Sigma 120-300mm F2.8 EX DG HSM APO',
55 0x136 => 'Sigma 120-300mm F2.8 EX DG OS HSM APO',
56 0x137 => 'Sigma 120-300mm F2.8 DG OS HSM | S',
57 0x143 => 'Sigma 600mm F8 Mirror',
58 # (0x145 = 325)
59 0x145 => 'Sigma Lens (0x145)', #PH
60 325.1 => 'Sigma 15-30mm F3.5-4.5 EX DG Aspherical', #PH
61 325.2 => 'Sigma 18-50mm F2.8 EX DG', #PH (NC)
62 325.3 => 'Sigma 20-40mm F2.8 EX DG', #PH
63 0x150 => 'Sigma 30mm F1.4 DC HSM',
64 # (0x152 = 338)
65 0x152 => 'Sigma Lens (0x152)',
66 338.1 => 'Sigma APO 800mm F5.6 EX DG HSM',
67 338.2 => 'Sigma 12-24mm F4.5-5.6 EX DG ASP HSM',
68 338.3 => 'Sigma 10-20mm F4-5.6 EX DC HSM',
69 0x165 => 'Sigma 70-200mm F2.8 EX', # ...but what specific model?:
70 # 70-200mm F2.8 EX APO - Original version, minimum focus distance 1.8m (1999)
71 # 70-200mm F2.8 EX DG - Adds 'digitally optimized' lens coatings to reduce flare (2005)
72 # 70-200mm F2.8 EX DG Macro (HSM) - Minimum focus distance reduced to 1m (2006)
73 # 70-200mm F2.8 EX DG Macro HSM II - Improved optical performance (2007)
74 0x169 => 'Sigma 18-50mm F2.8 EX DC', #PH (NC)
75 0x183 => 'Sigma 500mm F4.5 EX HSM APO',
76 0x184 => 'Sigma 500mm F4.5 EX DG HSM APO',
77 0x185 => 'Sigma 500mm F4 DG OS HSM | S', #JR (NC; based on product number) (016)
78 0x194 => 'Sigma 300mm F2.8 EX HSM APO',
79 0x195 => 'Sigma 300mm F2.8 EX DG HSM APO',
80 0x200 => 'Sigma 12-24mm F4.5-5.6 EX DG ASP HSM',
81 0x201 => 'Sigma 10-20mm F4-5.6 EX DC HSM',
82 0x202 => 'Sigma 10-20mm F3.5 EX DC HSM',
83 0x203 => 'Sigma 8-16mm F4.5-5.6 DC HSM',
84 0x204 => 'Sigma 12-24mm F4.5-5.6 DG HSM II',
85 0x205 => 'Sigma 12-24mm F4 DG HSM | A', #JR (NC; based on product number) (016)
86 0x210 => 'Sigma 18-35mm F1.8 DC HSM | A',
87 0x240 => 'Sigma 135mm F1.8 DG HSM | A', #JR (NC; based on product number) (017)
88 0x256 => 'Sigma 105mm F2.8 EX Macro',
89 0x257 => 'Sigma 105mm F2.8 EX DG Macro',
90 0x258 => 'Sigma 105mm F2.8 EX DG OS HSM Macro',
91 0x259 => 'Sigma 105mm F1.4 DG HSM | A', #IB (A018)
92 0x270 => 'Sigma 70mm F2.8 EX DG Macro', #NJ (SD1)
93 0x271 => 'Sigma 70mm F2.8 DG Macro | A', #IB (A018)
94 0x300 => 'Sigma 30mm F1.4 EX DC HSM',
95 0x301 => 'Sigma 30mm F1.4 DC HSM | A',
96 0x302 => 'Sigma 30mm F1.4 DC DN | C', #JR (DN lenses are only for Sony E or MFT mount)
97 0x310 => 'Sigma 50mm F1.4 EX DG HSM',
98 0x311 => 'Sigma 50mm F1.4 DG HSM | A',
99 0x320 => 'Sigma 85mm F1.4 EX DG HSM',
100 0x321 => 'Sigma 85mm F1.4 DG HSM | A', #JR (NC; based on product number) (016)
101 0x330 => 'Sigma 30mm F2.8 EX DN',
102 0x340 => 'Sigma 35mm F1.4 DG HSM',
103 0x345 => 'Sigma 50mm F2.8 EX Macro',
104 0x346 => 'Sigma 50mm F2.8 EX DG Macro',
105 0x350 => 'Sigma 60mm F2.8 DN | A',
106 0x400 => 'Sigma 19mm F2.8 EX DN',
107 0x401 => 'Sigma 24mm F1.4 DG HSM | A',
108 0x411 => 'Sigma 20mm F1.8 EX DG ASP RF',
109 0x412 => 'Sigma 20mm F1.4 DG HSM | A',
110 0x432 => 'Sigma 24mm F1.8 EX DG ASP Macro',
111 0x440 => 'Sigma 28mm F1.8 EX DG ASP Macro',
112 0x450 => 'Sigma 14mm F1.8 DH HSM | A', #JR (NC; based on product number) (017)
113 0x461 => 'Sigma 14mm F2.8 EX ASP HSM',
114 0x475 => 'Sigma 15mm F2.8 EX Diagonal FishEye',
115 0x476 => 'Sigma 15mm F2.8 EX DG Diagonal Fisheye',
116 0x477 => 'Sigma 10mm F2.8 EX DC HSM Fisheye',
117 0x483 => 'Sigma 8mm F4 EX Circular Fisheye',
118 0x484 => 'Sigma 8mm F4 EX DG Circular Fisheye',
119 0x485 => 'Sigma 8mm F3.5 EX DG Circular Fisheye',
120 0x486 => 'Sigma 4.5mm F2.8 EX DC HSM Circular Fisheye',
121 0x504 => 'Sigma 70-300mm F4-5.6 Macro Super', #IB
122 0x505 => 'Sigma APO 70-300mm F4-5.6 Macro Super', #IB
123 0x506 => 'Sigma 70-300mm F4-5.6 APO Macro Super II',
124 0x507 => 'Sigma 70-300mm F4-5.6 DL Macro Super II',
125 0x508 => 'Sigma 70-300mm F4-5.6 DG APO Macro',
126 0x509 => 'Sigma 70-300mm F4-5.6 DG Macro',
127 0x510 => 'Sigma 17-35 F2.8-4 EX DG ASP',
128 0x512 => 'Sigma 15-30mm F3.5-4.5 EX DG ASP DF',
129 0x513 => 'Sigma 20-40mm F2.8 EX DG',
130 0x519 => 'Sigma 17-35 F2.8-4 EX ASP HSM',
131 0x520 => 'Sigma 100-300mm F4.5-6.7 DL',
132 0x521 => 'Sigma 18-50mm F3.5-5.6 DC Macro',
133 0x527 => 'Sigma 100-300mm F4 EX IF HSM',
134 0x529 => 'Sigma 120-300mm F2.8 EX HSM IF APO',
135 0x545 => 'Sigma 28-70mm F2.8 EX ASP DF', #IB
136 0x547 => 'Sigma 24-60mm F2.8 EX DG',
137 0x548 => 'Sigma 24-70mm F2.8 EX DG Macro',
138 0x549 => 'Sigma 28-70mm F2.8 EX DG',
139 0x566 => 'Sigma 70-200mm F2.8 EX IF APO',
140 0x567 => 'Sigma 70-200mm F2.8 EX IF HSM APO',
141 0x568 => 'Sigma 70-200mm F2.8 EX DG IF HSM APO',
142 0x569 => 'Sigma 70-200 F2.8 EX DG HSM APO Macro',
143 0x571 => 'Sigma 24-70mm F2.8 IF EX DG HSM',
144 0x572 => 'Sigma 70-300mm F4-5.6 DG OS',
145 0x576 => 'Sigma 24-70mm F2.8 DG OS HSM | A', #JR (NC; based on product number) (017)
146 0x579 => 'Sigma 70-200mm F2.8 EX DG HSM APO Macro', # (also II version)
147 0x580 => 'Sigma 18-50mm F2.8 EX DC',
148 0x581 => 'Sigma 18-50mm F2.8 EX DC Macro', #PH (SD1)
149 0x582 => 'Sigma 18-50mm F2.8 EX DC HSM Macro',
150 0x583 => 'Sigma 17-50mm F2.8 EX DC OS HSM', #PH (also SD1 Kit, is this HSM? - PH)
151 0x588 => 'Sigma 24-35mm F2 DG HSM | A',
152 0x589 => 'Sigma APO 70-200mm F2.8 EX DG OS HSM',
153 0x594 => 'Sigma 300-800mm F5.6 EX HSM IF APO',
154 0x595 => 'Sigma 300-800mm F5.6 EX DG APO HSM',
155 0x597 => 'Sigma 200-500mm F2.8 APO EX DG',
156 0x5A8 => 'Sigma 70-300mm F4-5.6 APO DG Macro (Motorized)',
157 0x5A9 => 'Sigma 70-300mm F4-5.6 DG Macro (Motorized)',
158 0x605 => 'Sigma 24-70mm F3.5-5.6 ASP HF', #IB
159 0x633 => 'Sigma 28-70mm F2.8-4 HS',
160 0x634 => 'Sigma 28-70mm F2.8-4 DG',
161 0x635 => 'Sigma 24-105mm F4 DG OS HSM | A',
162 0x644 => 'Sigma 28-80mm F3.5-5.6 ASP HF Macro',
163 0x659 => 'Sigma 28-80mm F3.5-5.6 Mini Zoom Macro II ASP',
164 0x661 => 'Sigma 28-105mm F2.8-4 IF ASP',
165 0x663 => 'Sigma 28-105mm F3.8-5.6 IF UC-III ASP',
166 0x664 => 'Sigma 28-105mm F2.8-4 IF DG ASP',
167 0x667 => 'Sigma 24-135mm F2.8-4.5 IF ASP',
168 0x668 => 'Sigma 17-70mm F2.8-4 DC Macro OS HSM',
169 0x669 => 'Sigma 17-70mm F2.8-4.5 DC HSM Macro',
170 0x684 => 'Sigma 55-200mm F4-5.6 DC',
171 0x686 => 'Sigma 50-200mm F4-5.6 DC OS HSM',
172 0x689 => 'Sigma 17-70mm F2.8-4.5 DC Macro',
173 0x690 => 'Sigma 50-150mm F2.8 EX DC HSM APO',
174 0x691 => 'Sigma 50-150mm F2.8 EX DC APO HSM II',
175 0x692 => 'Sigma APO 50-150mm F2.8 EX DC OS HSM',
176 0x693 => 'Sigma 50-100mm F1.8 DC HSM | A', #JR (NC; based on product number) (016)
177 0x709 => 'Sigma 28-135mm F3.8-5.6 IF ASP Macro',
178 0x723 => 'Sigma 135-400mm F4.5-5.6 ASP APO',
179 0x725 => 'Sigma 80-400mm F4.5-5.6 EX OS',
180 0x726 => 'Sigma 80-400mm F4.5-5.6 EX DG OS APO',
181 0x727 => 'Sigma 135-400mm F4.5-5.6 DG ASP APO',
182 0x728 => 'Sigma 120-400mm F4.5-5.6 DG APO OS HSM',
183 0x729 => 'Sigma 100-400mm F5-6.3 DG OS HSM | C', #JR (017)
184 0x730 => 'Sigma 60-600mm F4.5-6.3 DG OS HSM | S', #IB (S018)
185 0x733 => 'Sigma 170-500mm F5-6.3 ASP APO',
186 0x734 => 'Sigma 170-500mm F5-6.3 DG ASP APO',
187 0x735 => 'Sigma 50-500mm F4-6.3 EX RF HSM APO',
188 0x736 => 'Sigma 50-500mm F4-6.3 EX DG HSM APO',
189 0x737 => 'Sigma 150-500mm F5-6.3 APO DG OS HSM',
190 0x738 => 'Sigma 50-500mm F4.5-6.3 APO DG OS HSM',
191 0x740 => 'Sigma 150-600mm F5-6.3 DG OS HSM | S',
192 0x745 => 'Sigma 150-600mm F5-6.3 DG OS HSM | C',
193 0x777 => 'Sigma 18-200mm F3.5-6.3 DC',
194 0x77D => 'Sigma 18-200mm F3.5-6.3 DC (Motorized)',
195 0x785 => 'Sigma 28-200mm F3.5-5.6 DL ASP IF HZM Macro', #IB
196 0x787 => 'Sigma 28-200mm F3.5-5.6 Compact ASP HZ Macro',
197 0x789 => 'Sigma 18-125mm F3.5-5.6 DC',
198 0x790 => 'Sigma 28-300mm F3.5-6.3 DL ASP IF HZM', #IB
199 0x793 => 'Sigma 28-300mm F3.5-6.3 Macro',
200 0x794 => 'Sigma 28-200mm F3.5-5.6 DG Compact ASP HZ Macro',
201 0x795 => 'Sigma 28-300mm F3.5-6.3 DG Macro',
202 0x823 => 'Sigma 1.4X TC EX APO',
203 0x824 => 'Sigma 1.4X Teleconverter EX APO DG',
204 0x853 => 'Sigma 18-125mm F3.8-5.6 DC OS HSM',
205 0x861 => 'Sigma 18-50mm F2.8-4.5 DC OS HSM', #NJ (SD1)
206 0x870 => 'Sigma 2.0X Teleconverter TC-2001', #JR
207 0x875 => 'Sigma 2.0X TC EX APO',
208 0x876 => 'Sigma 2.0X Teleconverter EX APO DG',
209 0x879 => 'Sigma 1.4X Teleconverter TC-1401', #JR
210 0x880 => 'Sigma 18-250mm F3.5-6.3 DC OS HSM',
211 0x882 => 'Sigma 18-200mm F3.5-6.3 II DC OS HSM',
212 0x883 => 'Sigma 18-250mm F3.5-6.3 DC Macro OS HSM',
213 0x884 => 'Sigma 17-70mm F2.8-4 DC OS HSM Macro | C',
214 0x885 => 'Sigma 18-200mm F3.5-6.3 DC OS HSM Macro | C',
215 0x886 => 'Sigma 18-300mm F3.5-6.3 DC OS HSM Macro | C',
216 0x888 => 'Sigma 18-200mm F3.5-6.3 DC OS',
217 0x890 => 'Sigma Mount Converter MC-11', #JR
218 0x929 => 'Sigma 19mm F2.8 DN | A',
219 0x929 => 'Sigma 30mm F2.8 DN | A',
220 0x929 => 'Sigma 60mm F2.8 DN | A',
221 0x1003 => 'Sigma 19mm F2.8', #PH (DP1 Merrill kit)
222 0x1004 => 'Sigma 30mm F2.8', #PH (DP2 Merrill kit)
223 0x1005 => 'Sigma 50mm F2.8 Macro', #PH (DP3 Merrill kit)
224 0x1006 => 'Sigma 19mm F2.8', #NJ (DP1 Quattro kit)
225 0x1007 => 'Sigma 30mm F2.8', #PH (DP2 Quattro kit)
226 0x1008 => 'Sigma 50mm F2.8 Macro', #NJ (DP3 Quattro kit)
227 0x1009 => 'Sigma 14mm F4', #NJ (DP0 Quattro kit)
228 # L-mount lenses?:
229 0x6001 => 'Sigma 150-600mm F5-6.3 DG OS HSM | S', #PH (NC, fp)
230 0x6003 => 'Sigma 45mm F2.8 DG DN | C', #PH (NC, fp)
231 0x6006 => 'Sigma 50mm F1.4 DG HSM | A', #IB (014)
232 0x8005 => 'Sigma 35mm F1.4 DG HSM | A', #PH (012)
233 0x8009 => 'Sigma 18-35mm F1.8 DC HSM | A', #PH
234 0x8900 => 'Sigma 70-300mm F4-5.6 DG OS', #PH (SD15)
235 0xA100 => 'Sigma 24-70mm F2.8 DG Macro', #PH (SD15)
236 # 'FFFF' - seen this for a 28-70mm F2.8 lens - PH
237);
238
239%Image::ExifTool::Sigma::Main = (
240 WRITE_PROC => \&Image::ExifTool::Exif::WriteExif,
241 CHECK_PROC => \&Image::ExifTool::Exif::CheckExif,
242 WRITABLE => 'string',
243 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
244 NOTES => q{
245 These tags are written by Sigma/Foveon cameras. In the early days Sigma was
246 a class leader by releasing their maker note specification to the public,
247 but since then they have deviated from this standard and newer camera models
248 are less than consistent about their metadata formats.
249 },
250 0x0002 => 'SerialNumber',
251 0x0003 => 'DriveMode',
252 0x0004 => 'ResolutionMode',
253 0x0005 => 'AFMode',
254 0x0006 => 'FocusSetting',
255 0x0007 => 'WhiteBalance',
256 0x0008 => {
257 Name => 'ExposureMode',
258 PrintConv => { #PH
259 A => 'Aperture-priority AE',
260 M => 'Manual',
261 P => 'Program AE',
262 S => 'Shutter speed priority AE',
263 },
264 },
265 0x0009 => {
266 Name => 'MeteringMode',
267 PrintConv => { #PH
268 A => 'Average',
269 C => 'Center-weighted average',
270 8 => 'Multi-segment',
271 },
272 },
273 0x000a => 'LensFocalRange',
274 0x000b => 'ColorSpace',
275 # SIGMA PhotoPro writes these tags as strings, but some cameras (at least) write them as rational
276 0x000c => [
277 {
278 Name => 'ExposureCompensation',
279 Condition => '$format eq "string"',
280 ValueConv => '$val =~ s/Expo:\s*//, $val',
281 ValueConvInv => 'IsFloat($val) ? sprintf("Expo:%+.1f",$val) : undef',
282 },
283 { #PH
284 Name => 'ExposureAdjust',
285 Writable => 'rational64s',
286 Unknown => 1,
287 },
288 ],
289 0x000d => [
290 {
291 Name => 'Contrast',
292 Condition => '$format eq "string"',
293 ValueConv => '$val =~ s/Cont:\s*//, $val',
294 ValueConvInv => 'IsFloat($val) ? sprintf("Cont:%+.1f",$val) : undef',
295 },
296 { #PH
297 Name => 'Contrast',
298 Writable => 'rational64s',
299 Priority => 0,
300 },
301 ],
302 0x000e => [
303 {
304 Name => 'Shadow',
305 Condition => '$format eq "string"',
306 ValueConv => '$val =~ s/Shad:\s*//, $val',
307 ValueConvInv => 'IsFloat($val) ? sprintf("Shad:%+.1f",$val) : undef',
308 },
309 { #PH (may be incorrect for the SD1)
310 Name => 'Shadow',
311 Writable => 'rational64s',
312 Priority => 0,
313 },
314 ],
315 0x000f => [
316 {
317 Name => 'Highlight',
318 Condition => '$format eq "string"',
319 ValueConv => '$val =~ s/High:\s*//, $val',
320 ValueConvInv => 'IsFloat($val) ? sprintf("High:%+.1f",$val) : undef',
321 },
322 { #PH (may be incorrect for the SD1)
323 Name => 'Highlight',
324 Writable => 'rational64s',
325 Priority => 0,
326 },
327 ],
328 0x0010 => [
329 {
330 Name => 'Saturation',
331 Condition => '$format eq "string"',
332 ValueConv => '$val =~ s/Satu:\s*//, $val',
333 ValueConvInv => 'IsFloat($val) ? sprintf("Satu:%+.1f",$val) : undef',
334 },
335 { #PH (may be incorrect for the SD1)
336 Name => 'Saturation',
337 Writable => 'rational64s',
338 Priority => 0,
339 },
340 ],
341 0x0011 => [
342 {
343 Name => 'Sharpness',
344 Condition => '$format eq "string"',
345 ValueConv => '$val =~ s/Shar:\s*//, $val',
346 ValueConvInv => 'IsFloat($val) ? sprintf("Shar:%+.1f",$val) : undef',
347 },
348 { #PH (may be incorrect for the SD1)
349 Name => 'Sharpness',
350 Writable => 'rational64s',
351 Priority => 0,
352 },
353 ],
354 0x0012 => [
355 {
356 Name => 'X3FillLight',
357 Condition => '$format eq "string"',
358 ValueConv => '$val =~ s/Fill:\s*//, $val',
359 ValueConvInv => 'IsFloat($val) ? sprintf("Fill:%+.1f",$val) : undef',
360 },
361 { #PH
362 Name => 'X3FillLight',
363 Writable => 'rational64s',
364 },
365 ],
366 0x0014 => [
367 {
368 Name => 'ColorAdjustment',
369 Condition => '$format eq "string"',
370 ValueConv => '$val =~ s/CC:\s*//, $val',
371 ValueConvInv => 'IsInt($val) ? "CC:$val" : undef',
372 },
373 { #PH
374 Name => 'ColorAdjustment',
375 Writable => 'rational64s',
376 Count => 3,
377 },
378 ],
379 0x0015 => 'AdjustmentMode',
380 0x0016 => {
381 Name => 'Quality',
382 ValueConv => '$val =~ s/Qual:\s*//, $val',
383 ValueConvInv => 'IsInt($val) ? "Qual:$val" : undef',
384 },
385 0x0017 => 'Firmware',
386 0x0018 => {
387 Name => 'Software',
388 Priority => 0,
389 },
390 0x0019 => 'AutoBracket',
391 0x001a => [ #PH
392 {
393 Name => 'PreviewImageStart',
394 Condition => '$format eq "int32u"',
395 Notes => q{
396 Sigma Photo Pro writes ChrominanceNoiseReduction here, but various
397 models use this for PreviewImageStart
398 },
399 IsOffset => 1,
400 OffsetPair => 0x001b,
401 DataTag => 'PreviewImage',
402 Writable => 'int32u',
403 WriteGroup => 'MakerNotes',
404 Protected => 2,
405 },{ # (written by Sigma Photo Pro)
406 Name => 'ChrominanceNoiseReduction',
407 Condition => '$format eq "string"',
408 ValueConv => '$val =~ s/Chro:\s*//, $val',
409 ValueConvInv => 'IsFloat($val) ? sprintf("Chro:%+.1f",$val) : undef',
410 },
411 # the SD1 writes something else here (rational64s, value 0/10)
412 # (but we can't test by model because Sigma Photo Pro writes this too)
413 ],
414 0x001b => [ #PH
415 {
416 Name => 'PreviewImageLength',
417 Condition => '$format eq "int32u"',
418 Notes => q{
419 Sigma Photo Pro writes LuminanceNoiseReduction here, but various models use
420 this for PreviewImageLength
421 },
422 OffsetPair => 0x001a,
423 DataTag => 'PreviewImage',
424 Writable => 'int32u',
425 WriteGroup => 'MakerNotes',
426 Protected => 2,
427 },{ # (written by Sigma Photo Pro)
428 Name => 'LuminanceNoiseReduction',
429 Condition => '$format eq "string"',
430 ValueConv => '$val =~ s/Luma:\s*//, $val',
431 ValueConvInv => 'IsFloat($val) ? sprintf("Luma:%+.1f",$val) : undef',
432 },
433 # the SD1 writes something else here (rational64s, value 0/10)
434 ],
435 0x001c => [ #PH
436 {
437 Name => 'PreviewImageSize',
438 Condition => '$$self{MakerNoteSigmaVer} < 3',
439 Notes => q{
440 PreviewImageStart for the SD1 and Merrill/Quattro models, and
441 PreviewImageSize for others
442 },
443 Writable => 'int16u',
444 Count => 2,
445 PrintConv => '$val =~ tr/ /x/; $val',
446 PrintConvInv => '$val =~ tr/x/ /; $val',
447 },{
448 Name => 'PreviewImageStart',
449 Condition => '$format eq "int32u"',
450 IsOffset => 1,
451 OffsetPair => 0x001d,
452 DataTag => 'PreviewImage',
453 Writable => 'int32u',
454 WriteGroup => 'MakerNotes',
455 Protected => 2,
456 },
457 ],
458 0x001d => [ #PH
459 {
460 Name => 'MakerNoteVersion',
461 Condition => '$$self{MakerNoteSigmaVer} < 3',
462 Notes => q{
463 PreviewImageLength for the SD1 and Merrill/Quattro models, and
464 MakerNoteVersion for others
465 },
466 Writable => 'undef',
467 },{
468 Name => 'PreviewImageLength',
469 Condition => '$format eq "int32u"',
470 OffsetPair => 0x001c,
471 DataTag => 'PreviewImage',
472 Writable => 'int32u',
473 WriteGroup => 'MakerNotes',
474 Protected => 2,
475 },
476 ],
477 # 0x001e - int16u: 0, 4, 13 - flash mode for other models?
478 0x001e => { #PH
479 Name => 'PreviewImageSize',
480 Condition => '$$self{MakerNoteSigmaVer} >= 3',
481 Notes => 'only valid for some models',
482 Writable => 'int16u',
483 Count => 2,
484 PrintConv => '$val =~ tr/ /x/; $val',
485 PrintConvInv => '$val =~ tr/x/ /; $val',
486 },
487 0x001f => [ #PH
488 {
489 Name => 'AFPoint', # (NC -- invalid for SD9,SD14?)
490 Condition => '$$self{MakerNoteSigmaVer} < 3',
491 Notes => q{
492 MakerNoteVersion for the SD1 and Merrill/Quattro models, and AFPoint for
493 others
494 },
495 # values: "", "Center", "Center,Center", "Right,Right"
496 },{
497 Name => 'MakerNoteVersion',
498 Writable => 'undef',
499 },
500 ],
501 # 0x0020 - string: " " for most models, or int16u: 4 for the DP3 Merrill
502 # 0x0021 - string: " " for most models, or int8u[2]: '3 3' for the DP3 Merrill
503 0x0022 => { #PH (NC)
504 Name => 'FileFormat',
505 Condition => '$$self{MakerNoteSigmaVer} < 3',
506 Notes => 'models other than the SD1 and Merrill/Quattro models',
507 # values: "JPG", "JPG-S", "JPG-P", "X3F", "X3F-S"
508 },
509 # 0x0023 - string: "", 10, 83, 131, 145, 150, 152, 169
510 0x0024 => { # (invalid for SD9,SD14?)
511 Name => 'Calibration',
512 Condition => '$$self{MakerNoteSigmaVer} < 3',
513 Notes => 'models other than the SD1 and Merrill/Quattro models',
514 },
515 # 0x0025 - string: "", "0.70", "0.90"
516 # 0x0026-2b - int32u: 0
517 0x0026 => { #PH (NC)
518 Name => 'FileFormat',
519 Condition => '$$self{MakerNoteSigmaVer} >= 3',
520 Notes => 'some newer models only',
521 # (also Sigma fp)
522 },
523 0x0027 => [{ #PH
524 Name => 'LensType',
525 Condition => '$$self{MakerNoteSigmaVer} >= 3 and $format eq "string"',
526 Notes => 'some newer models only',
527 ValueConv => '$val =~ /^[0-9a-f]+$/i ? hex($val) : $val',
528 # (truncate decimal part and convert hex)
529 ValueConvInv => '$val=~s/\.\d+$//;$val=~/^0x/ and $val=hex($val);IsInt($val) ? sprintf("%x",$val) : $val',
530 SeparateTable => 'LensType',
531 PrintHex => 1,
532 PrintConv => \%sigmaLensTypes,
533 },{ #PH
534 Name => 'LensType',
535 Condition => '$$self{MakerNoteSigmaVer} >= 3',
536 Notes => 'some other models like the fp',
537 Writable => 'int16u',
538 SeparateTable => 'LensType',
539 PrintHex => 1,
540 PrintConv => \%sigmaLensTypes,
541 }],
542 0x002a => { #PH
543 Name => 'LensFocalRange',
544 Condition => '$$self{MakerNoteSigmaVer} >= 3',
545 Notes => 'some newer models only',
546 Writable => 'rational64u',
547 Count => 2,
548 PrintConv => '$val=~s/ / to /; $val',
549 PrintConvInv => '$val=~s/to //; $val',
550 },
551 0x002b => { #PH
552 Name => 'LensMaxApertureRange',
553 # for most models this gives the max aperture at the long/short focal lengths,
554 # but for some models this gives the min/max aperture
555 Condition => '$$self{MakerNoteSigmaVer} >= 3',
556 Notes => 'some newer models only',
557 Writable => 'rational64u',
558 Count => 2,
559 PrintConv => '$val=~s/ / to /; $val',
560 PrintConvInv => '$val=~s/to /; $val',
561 },
562 # 0x002c is rational64u for some models, with a value that may be related to FNumber - PH
563 0x002c => { #PH
564 Name => 'ColorMode',
565 Condition => '$format eq "int32u"',
566 Notes => 'not valid for some models',
567 Writable => 'int32u',
568 # this tag written by Sigma Photo Pro even for cameras that write 'n/a' here
569 PrintConv => {
570 0 => 'n/a',
571 1 => 'Sepia',
572 2 => 'B&W',
573 3 => 'Standard',
574 4 => 'Vivid',
575 5 => 'Neutral',
576 6 => 'Portrait',
577 7 => 'Landscape',
578 8 => 'FOV Classic Blue',
579 },
580 },
581 # 0x002d - int32u: 0
582 # 0x002e - rational64s: (the negative of FlashExposureComp, but why?)
583 # 0x002f - int32u: 0, 1
584 0x0030 => [ #PH
585 {
586 Name => 'LensApertureRange',
587 Condition => '$$self{MakerNoteSigmaVer} < 3',
588 Notes => q{
589 Calibration for the SD1 and Merrill/Quattro models, and LensApertureRange
590 for others. Note that LensApertureRange changes with focal length, and some
591 models report the maximum aperture here
592 },
593 },{
594 Name => 'Calibration',
595 },
596 ],
597 0x0031 => { #PH
598 Name => 'FNumber',
599 Condition => '$$self{MakerNoteSigmaVer} < 3',
600 Notes => 'models other than the SD1 and Merrill/Quattro models',
601 Writable => 'rational64u',
602 PrintConv => 'sprintf("%.1f",$val)',
603 PrintConvInv => '$val',
604 Priority => 0,
605 },
606 0x0032 => { #PH
607 Name => 'ExposureTime',
608 Condition => '$$self{MakerNoteSigmaVer} < 3',
609 Notes => 'models other than the SD1 and Merrill/Quattro models',
610 Writable => 'rational64u',
611 PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
612 PrintConvInv => '$val',
613 Priority => 0,
614 },
615 0x0033 => { #PH
616 Name => 'ExposureTime2',
617 Condition => '$$self{Model} !~ / (SD1|SD9|SD15|Merrill|Quattro|fp)$/',
618 Notes => 'models other than the SD1, SD9, SD15 and Merrill/Quattro models',
619 ValueConv => '$val * 1e-6',
620 ValueConvInv => 'int($val * 1e6 + 0.5)',
621 PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
622 PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
623 },
624 0x0034 => { #PH
625 Name => 'BurstShot',
626 Condition => '$$self{MakerNoteSigmaVer} < 3',
627 Notes => 'models other than the SD1 and Merrill/Quattro models',
628 Writable => 'int32u',
629 },
630 # 0x0034 - int32u: 0,1,2,3 or 4
631 0x0035 => { #PH
632 Name => 'ExposureCompensation',
633 Condition => '$$self{MakerNoteSigmaVer} < 3',
634 Notes => 'models other than the SD1 and Merrill/Quattro models',
635 Writable => 'rational64s',
636 # add a '+' sign to positive values
637 PrintConv => '$val and $val =~ s/^(\d)/\+$1/; $val',
638 PrintConvInv => '$val',
639 },
640 # 0x0036 - string: " "
641 # 0x0037-38 - string: ""
642 0x0039 => { #PH (invalid for SD9, SD14?)
643 Name => 'SensorTemperature',
644 Condition => '$$self{MakerNoteSigmaVer} < 3',
645 Notes => 'models other than the SD1 and Merrill/Quattro models',
646 # (string format)
647 PrintConv => 'IsInt($val) ? "$val C" : $val',
648 PrintConvInv => '$val=~s/ ?C$//; $val',
649 },
650 0x003a => { #PH
651 Name => 'FlashExposureComp',
652 Condition => '$$self{MakerNoteSigmaVer} < 3',
653 Notes => 'models other than the SD1 and Merrill/Quattro models',
654 Writable => 'rational64s',
655 },
656 0x003b => { #PH (how is this different from other Firmware?)
657 Name => 'Firmware',
658 Condition => '$$self{MakerNoteSigmaVer} < 3',
659 Notes => 'models other than the SD1 and Merrill/Quattro models',
660 Priority => 0,
661 },
662 0x003c => { #PH
663 Name => 'WhiteBalance',
664 Condition => '$$self{MakerNoteSigmaVer} < 3',
665 Notes => 'models other than the SD1 and Merrill/Quattro models',
666 Priority => 0,
667 },
668 0x003d => { #PH (new for SD15 and SD1)
669 Name => 'PictureMode',
670 Notes => 'same as ColorMode, but "Standard" when ColorMode is Sepia or B&W',
671 },
672 0x0048 => { #PH
673 Name => 'LensApertureRange',
674 Condition => '$$self{MakerNoteSigmaVer} >= 3',
675 Notes => 'some newer models only',
676 },
677 0x0049 => { #PH
678 Name => 'FNumber',
679 Condition => '$$self{MakerNoteSigmaVer} >= 3',
680 Notes => 'some newer models only',
681 Writable => 'rational64u',
682 PrintConv => 'sprintf("%.1f",$val)',
683 PrintConvInv => '$val',
684 Priority => 0,
685 },
686 0x004a => { #PH
687 Name => 'ExposureTime',
688 Condition => '$$self{MakerNoteSigmaVer} >= 3',
689 Notes => 'some newer models only',
690 Writable => 'rational64u',
691 PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
692 PrintConvInv => '$val',
693 Priority => 0,
694 },
695 0x004b => [{ #PH
696 Name => 'ExposureTime2',
697 Condition => '$$self{Model} =~ /^SIGMA (SD1( Merrill)?|DP\d Merrill)$/',
698 Notes => 'SD1 and DP Merrill models only',
699 PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
700 PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
701 },{ #PH
702 Name => 'ExposureTime2',
703 Condition => '$$self{Model} =~ /^SIGMA dp\d Quattro$/i',
704 Notes => 'DP Quattro models only',
705 ValueConv => '$val / 1000000',
706 ValueConvInv => '$val * 1000000',
707 PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
708 PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
709 }],
710 0x004d => { #PH
711 Name => 'ExposureCompensation',
712 Condition => '$$self{MakerNoteSigmaVer} >= 3',
713 Notes => 'some newer models only',
714 Writable => 'rational64s',
715 # add a '+' sign to positive values
716 PrintConv => '$val and $val =~ s/^(\d)/\+$1/; $val',
717 PrintConvInv => '$val',
718 },
719 # 0x0054 - string: "F20","F23"
720 0x0055 => { #PH
721 Name => 'SensorTemperature',
722 Condition => '$$self{MakerNoteSigmaVer} >= 3',
723 Notes => 'some newer models only',
724 # (string format)
725 PrintConv => 'IsInt($val) ? "$val C" : $val',
726 PrintConvInv => '$val=~s/ ?C$//; $val',
727 },
728 0x0056 => { #PH (NC)
729 Name => 'FlashExposureComp',
730 Condition => '$$self{MakerNoteSigmaVer} >= 3',
731 Notes => 'some newer models only',
732 Writable => 'rational64s',
733 },
734 0x0057 => { #PH (how is this different from other Firmware?)
735 Name => 'Firmware2',
736 Condition => '$format eq "string"',
737 Notes => 'some newer models only',
738 Priority => 0,
739 },
740 0x0058 => { #PH
741 Name => 'WhiteBalance',
742 Condition => '$$self{MakerNoteSigmaVer} >= 3',
743 Notes => 'some newer models only',
744 Priority => 0,
745 },
746 0x0059 => { #PH
747 Name => 'DigitalFilter',
748 Condition => '$$self{MakerNoteSigmaVer} >= 3',
749 Notes => 'some newer models only',
750 # seen: Standard,Landscape,Monochrome,Neutral,Portrait,Sepia,Vivid
751 },
752 # 0x005a/b/c - rational64s: 0/10 for the SD1
753 0x0084 => { #PH (Quattro models and fp)
754 Name => 'Model',
755 Description => 'Camera Model Name',
756 },
757 # 0x0085
758 0x0086 => { #PH (Quattro models)
759 Name => 'ISO',
760 Writable => 'int16u',
761 },
762 0x0087 => 'ResolutionMode', #PH (Quattro models)
763 0x0088 => 'WhiteBalance', #PH (Quattro models)
764 0x008c => 'Firmware', #PH (Quattro models)
765 0x011f => { #IB (FP DNG images)
766 Name => 'CameraCalibration',
767 Writable => 'float',
768 Count => 9,
769 },
770 0x0120 => { #IB (FP DNG images)
771 Name => 'WBSettings',
772 SubDirectory => { TagTable => 'Image::ExifTool::Sigma::WBSettings' },
773 },
774 0x0121 => { #IB (FP DNG images)
775 Name => 'WBSettings2',
776 SubDirectory => { TagTable => 'Image::ExifTool::Sigma::WBSettings2' },
777 },
778);
779
780# WB settings (ref IB)
781%Image::ExifTool::Sigma::WBSettings = (
782 PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
783 WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
784 CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
785 WRITABLE => 1,
786 FORMAT => 'float',
787 GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
788 0 => { Name => 'WB_RGBLevelsAuto', Format => 'float[3]' },
789 3 => { Name => 'WB_RGBLevelsDaylight', Format => 'float[3]' },
790 6 => { Name => 'WB_RGBLevelsShade', Format => 'float[3]' },
791 9 => { Name => 'WB_RGBLevelsOvercast', Format => 'float[3]' },
792 12 => { Name => 'WB_RGBLevelsIncandescent', Format => 'float[3]' },
793 15 => { Name => 'WB_RGBLevelsFluorescent', Format => 'float[3]' },
794 18 => { Name => 'WB_RGBLevelsFlash', Format => 'float[3]' },
795 21 => { Name => 'WB_RGBLevelsCustom1', Format => 'float[3]' },
796 24 => { Name => 'WB_RGBLevelsCustom2', Format => 'float[3]' },
797 27 => { Name => 'WB_RGBLevelsCustom3', Format => 'float[3]' },
798);
799
800# WB settings (ref IB)
801%Image::ExifTool::Sigma::WBSettings2 = (
802 PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
803 WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
804 CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
805 WRITABLE => 1,
806 FORMAT => 'float',
807 GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
808 0 => { Name => 'WB_RGBLevelsUnknown0', Unknown => 1, Format => 'float[3]' },
809 3 => { Name => 'WB_RGBLevelsUnknown1', Unknown => 1, Format => 'float[3]' },
810 6 => { Name => 'WB_RGBLevelsUnknown2', Unknown => 1, Format => 'float[3]' },
811 9 => { Name => 'WB_RGBLevelsUnknown3', Unknown => 1, Format => 'float[3]' },
812 12 => { Name => 'WB_RGBLevelsUnknown4', Unknown => 1, Format => 'float[3]' },
813 15 => { Name => 'WB_RGBLevelsUnknown5', Unknown => 1, Format => 'float[3]' },
814 18 => { Name => 'WB_RGBLevelsUnknown6', Unknown => 1, Format => 'float[3]' },
815 21 => { Name => 'WB_RGBLevelsUnknown7', Unknown => 1, Format => 'float[3]' },
816 24 => { Name => 'WB_RGBLevelsUnknown8', Unknown => 1, Format => 'float[3]' },
817 27 => { Name => 'WB_RGBLevelsUnknown9', Unknown => 1, Format => 'float[3]' },
818);
819
820
8211; # end
822
823__END__
824
825=head1 NAME
826
827Image::ExifTool::Sigma - Sigma/Foveon EXIF maker notes tags
828
829=head1 SYNOPSIS
830
831This module is loaded automatically by Image::ExifTool when required.
832
833=head1 DESCRIPTION
834
835This module contains definitions required by Image::ExifTool to interpret
836Sigma and Foveon maker notes in EXIF information.
837
838=head1 AUTHOR
839
840Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
841
842This library is free software; you can redistribute it and/or modify it
843under the same terms as Perl itself.
844
845=head1 REFERENCES
846
847=over 4
848
849=item L<http://www.x3f.info/technotes/FileDocs/MakerNoteDoc.html>
850
851=back
852
853=head1 SEE ALSO
854
855L<Image::ExifTool::TagNames/Sigma Tags>,
856L<Image::ExifTool(3pm)|Image::ExifTool>
857
858=cut
Note: See TracBrowser for help on using the repository browser.