File Coverage

blib/lib/Image/ExifTool/Sigma.pm
Criterion Covered Total %
statement 9 9 100.0
branch n/a
condition n/a
subroutine 3 3 100.0
pod n/a
total 12 12 100.0


line stmt bran cond sub pod time code
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              
16             package Image::ExifTool::Sigma;
17              
18 19     19   3737 use strict;
  19         38  
  19         607  
19 19     19   111 use vars qw($VERSION %sigmaLensTypes);
  19         46  
  19         826  
20 19     19   1173 use Image::ExifTool::Exif;
  19         82  
  19         21332  
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              
821             1; # end
822              
823             __END__