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