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   4178 use strict;
  19         47  
  19         1002  
19 19     19   113 use vars qw($VERSION %sigmaLensTypes);
  19         41  
  19         1171  
20 19     19   1328 use Image::ExifTool::Exif;
  19         46  
  19         38150  
21              
22             $VERSION = '1.36';
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 => {
416             Name => 'AutoBracket',
417             # (some models don't have spaces around "of")
418             PrintConv => '$val =~ s/(\d)of(\d)/$1 of $2/; $val',
419             PrintConvInv => '$val',
420             },
421             0x001a => [ #PH
422             {
423             Name => 'PreviewImageStart',
424             Condition => '$format eq "int32u"',
425             Notes => q{
426             Sigma Photo Pro writes ChrominanceNoiseReduction here, but various
427             models use this for PreviewImageStart
428             },
429             IsOffset => 1,
430             OffsetPair => 0x001b,
431             DataTag => 'PreviewImage',
432             Writable => 'int32u',
433             WriteGroup => 'MakerNotes',
434             Protected => 2,
435             },{ # (written by Sigma Photo Pro)
436             Name => 'ChrominanceNoiseReduction',
437             Condition => '$format eq "string"',
438             ValueConv => '$val =~ s/Chro:\s*//, $val',
439             ValueConvInv => 'IsFloat($val) ? sprintf("Chro:%+.1f",$val) : undef',
440             },
441             # the SD1 writes something else here (rational64s, value 0/10)
442             # (but we can't test by model because Sigma Photo Pro writes this too)
443             ],
444             0x001b => [ #PH
445             {
446             Name => 'PreviewImageLength',
447             Condition => '$format eq "int32u"',
448             Notes => q{
449             Sigma Photo Pro writes LuminanceNoiseReduction here, but various models use
450             this for PreviewImageLength
451             },
452             OffsetPair => 0x001a,
453             DataTag => 'PreviewImage',
454             Writable => 'int32u',
455             WriteGroup => 'MakerNotes',
456             Protected => 2,
457             },{ # (written by Sigma Photo Pro)
458             Name => 'LuminanceNoiseReduction',
459             Condition => '$format eq "string"',
460             ValueConv => '$val =~ s/Luma:\s*//, $val',
461             ValueConvInv => 'IsFloat($val) ? sprintf("Luma:%+.1f",$val) : undef',
462             },
463             # the SD1 writes something else here (rational64s, value 0/10)
464             ],
465             0x001c => [ #PH
466             {
467             Name => 'PreviewImageSize',
468             Condition => '$$self{MakerNoteSigmaVer} < 3',
469             Notes => q{
470             PreviewImageStart for the SD1 and Merrill/Quattro models, and
471             PreviewImageSize for others
472             },
473             Writable => 'int16u',
474             Count => 2,
475             PrintConv => '$val =~ tr/ /x/; $val',
476             PrintConvInv => '$val =~ tr/x/ /; $val',
477             },{
478             Name => 'PreviewImageStart',
479             Condition => '$format eq "int32u"',
480             IsOffset => 1,
481             OffsetPair => 0x001d,
482             DataTag => 'PreviewImage',
483             Writable => 'int32u',
484             WriteGroup => 'MakerNotes',
485             Protected => 2,
486             },
487             ],
488             0x001d => [ #PH
489             {
490             Name => 'MakerNoteVersion',
491             Condition => '$$self{MakerNoteSigmaVer} < 3',
492             Notes => q{
493             PreviewImageLength for the SD1 and Merrill/Quattro models, and
494             MakerNoteVersion for others
495             },
496             Writable => 'undef',
497             },{
498             Name => 'PreviewImageLength',
499             Condition => '$format eq "int32u"',
500             OffsetPair => 0x001c,
501             DataTag => 'PreviewImage',
502             Writable => 'int32u',
503             WriteGroup => 'MakerNotes',
504             Protected => 2,
505             },
506             ],
507             # 0x001e - int16u: 0, 4, 13 - flash mode for other models?
508             0x001e => { #PH
509             Name => 'PreviewImageSize',
510             Condition => '$$self{MakerNoteSigmaVer} >= 3',
511             Notes => 'only valid for some models',
512             Writable => 'int16u',
513             Count => 2,
514             PrintConv => '$val =~ tr/ /x/; $val',
515             PrintConvInv => '$val =~ tr/x/ /; $val',
516             },
517             0x001f => [ #PH
518             {
519             Name => 'AFPoint', # (NC -- invalid for SD9,SD14?)
520             Condition => '$$self{MakerNoteSigmaVer} < 3',
521             Notes => q{
522             MakerNoteVersion for the SD1 and Merrill/Quattro models, and AFPoint for
523             others
524             },
525             # values: "", "Center", "Center,Center", "Right,Right"
526             },{
527             Name => 'MakerNoteVersion',
528             Writable => 'undef',
529             },
530             ],
531             # 0x0020 - string: " " for most models, or int16u: 4 for the DP3 Merrill
532             # 0x0021 - string: " " for most models, or int8u[2]: '3 3' for the DP3 Merrill
533             0x0022 => { #PH (NC)
534             Name => 'FileFormat',
535             Condition => '$$self{MakerNoteSigmaVer} < 3',
536             Notes => 'models other than the SD1 and Merrill/Quattro models',
537             # values: "JPG", "JPG-S", "JPG-P", "X3F", "X3F-S"
538             },
539             # 0x0023 - string: "", 10, 83, 131, 145, 150, 152, 169
540             0x0024 => { # (invalid for SD9,SD14?)
541             Name => 'Calibration',
542             Condition => '$$self{MakerNoteSigmaVer} < 3',
543             Notes => 'models other than the SD1 and Merrill/Quattro models',
544             },
545             # 0x0025 - string: "", "0.70", "0.90"
546             # 0x0026-2b - int32u: 0
547             0x0026 => { #PH (NC)
548             Name => 'FileFormat',
549             Condition => '$$self{MakerNoteSigmaVer} >= 3',
550             Notes => 'some newer models only',
551             # (also Sigma fp)
552             },
553             0x0027 => [{ #PH
554             Name => 'LensType',
555             Condition => '$$self{MakerNoteSigmaVer} >= 3 and $format eq "string"',
556             Notes => 'some newer models only',
557             ValueConv => '$val =~ /^[0-9a-f]+$/i ? hex($val) : $val',
558             # (truncate decimal part and convert hex)
559             ValueConvInv => '$val=~s/\.\d+$//;$val=~/^0x/ and $val=hex($val);IsInt($val) ? sprintf("%x",$val) : $val',
560             SeparateTable => 'LensType',
561             PrintHex => 1,
562             PrintConv => \%sigmaLensTypes,
563             PrintInt => 1,
564             },{ #PH
565             Name => 'LensType',
566             Condition => '$$self{MakerNoteSigmaVer} >= 3',
567             Notes => 'some other models like the fp',
568             Writable => 'int16u',
569             SeparateTable => 'LensType',
570             PrintHex => 1,
571             PrintConv => \%sigmaLensTypes,
572             PrintInt => 1,
573             }],
574             0x002a => { #PH
575             Name => 'LensFocalRange',
576             Condition => '$$self{MakerNoteSigmaVer} >= 3',
577             Notes => 'some newer models only',
578             Writable => 'rational64u',
579             Count => 2,
580             PrintConv => '$val=~s/ / to /; $val',
581             PrintConvInv => '$val=~s/to //; $val',
582             },
583             0x002b => { #PH
584             Name => 'LensMaxApertureRange',
585             # for most models this gives the max aperture at the long/short focal lengths,
586             # but for some models this gives the min/max aperture
587             Condition => '$$self{MakerNoteSigmaVer} >= 3',
588             Notes => 'some newer models only',
589             Writable => 'rational64u',
590             Count => 2,
591             PrintConv => '$val=~s/ / to /; $val',
592             PrintConvInv => '$val=~s/to /; $val',
593             },
594             # 0x002c is rational64u for some models, with a value that may be related to FNumber - PH
595             0x002c => { #PH
596             Name => 'ColorMode',
597             Condition => '$format eq "int32u"',
598             Notes => 'not valid for some models',
599             Writable => 'int32u',
600             # this tag written by Sigma Photo Pro even for cameras that write 'n/a' here
601             PrintConv => {
602             0 => 'n/a',
603             1 => 'Sepia',
604             2 => 'B&W',
605             3 => 'Standard',
606             4 => 'Vivid',
607             5 => 'Neutral',
608             6 => 'Portrait',
609             7 => 'Landscape',
610             8 => 'FOV Classic Blue',
611             },
612             },
613             # 0x002d - int32u: 0
614             # 0x002e - rational64s: (the negative of FlashExposureComp, but why?)
615             # 0x002f - int32u: 0, 1
616             0x0030 => [ #PH
617             {
618             Name => 'LensApertureRange',
619             Condition => '$$self{MakerNoteSigmaVer} < 3',
620             Notes => q{
621             Calibration for the SD1 and Merrill/Quattro models, and LensApertureRange
622             for others. Note that LensApertureRange changes with focal length, and some
623             models report the maximum aperture here
624             },
625             },{
626             Name => 'Calibration',
627             },
628             ],
629             0x0031 => { #PH
630             Name => 'FNumber',
631             Condition => '$$self{MakerNoteSigmaVer} < 3',
632             Notes => 'models other than the SD1 and Merrill/Quattro models',
633             Writable => 'rational64u',
634             PrintConv => 'sprintf("%.1f",$val)',
635             PrintConvInv => '$val',
636             Priority => 0,
637             },
638             0x0032 => { #PH
639             Name => 'ExposureTime',
640             Condition => '$$self{MakerNoteSigmaVer} < 3',
641             Notes => 'models other than the SD1 and Merrill/Quattro models',
642             Writable => 'rational64u',
643             PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
644             PrintConvInv => '$val',
645             Priority => 0,
646             },
647             0x0033 => { #PH
648             Name => 'ExposureTime2',
649             Condition => q{
650             $$self{Model} !~ / (SD1|SD9|SD15|Merrill|Quattro|fp)$/ and
651             $$self{MakerNoteSigmaVer} < 4
652             },
653             Notes => 'only valid for some models',
654             ValueConv => '$val * 1e-6',
655             ValueConvInv => 'int($val * 1e6 + 0.5)',
656             PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
657             PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
658             },
659             0x0034 => { #PH
660             Name => 'BurstShot',
661             Condition => '$$self{MakerNoteSigmaVer} < 3',
662             Notes => 'models other than the SD1 and Merrill/Quattro models',
663             Writable => 'int32u',
664             },
665             # 0x0034 - int32u: 0,1,2,3 or 4
666             0x0035 => { #PH
667             Name => 'ExposureCompensation',
668             Condition => '$$self{MakerNoteSigmaVer} < 3',
669             Notes => 'models other than the SD1 and Merrill/Quattro models',
670             Writable => 'rational64s',
671             # add a '+' sign to positive values
672             PrintConv => '$val and $val =~ s/^(\d)/\+$1/; $val',
673             PrintConvInv => '$val',
674             },
675             # 0x0036 - string: " "
676             # 0x0037-38 - string: ""
677             0x0039 => { #PH (invalid for SD9, SD14?)
678             Name => 'SensorTemperature',
679             Condition => '$$self{MakerNoteSigmaVer} < 3',
680             Notes => 'models other than the SD1 and Merrill/Quattro models',
681             # (string format)
682             PrintConv => 'IsInt($val) ? "$val C" : $val',
683             PrintConvInv => '$val=~s/ ?C$//; $val',
684             },
685             0x003a => { #PH
686             Name => 'FlashExposureComp',
687             Condition => '$$self{MakerNoteSigmaVer} < 3',
688             Notes => 'models other than the SD1 and Merrill/Quattro models',
689             Writable => 'rational64s',
690             },
691             0x003b => { #PH (how is this different from other Firmware?)
692             Name => 'Firmware',
693             Condition => '$$self{MakerNoteSigmaVer} < 3',
694             Notes => 'models other than the SD1 and Merrill/Quattro models',
695             Priority => 0,
696             },
697             0x003c => { #PH
698             Name => 'WhiteBalance',
699             Condition => '$$self{MakerNoteSigmaVer} < 3',
700             Notes => 'models other than the SD1 and Merrill/Quattro models',
701             Priority => 0,
702             },
703             0x003d => { #PH (new for SD15 and SD1)
704             Name => 'PictureMode',
705             Notes => 'same as ColorMode, but "Standard" when ColorMode is Sepia or B&W',
706             },
707             0x0047 => { #forum17338
708             Name => 'ExposureCompensation',
709             Writable => 'rational64s',
710             PrintConv => '$val and $val =~ s/^(\d)/\+$1/; $val',
711             PrintConvInv => '$val',
712             },
713             0x0048 => { #PH
714             Name => 'LensApertureRange',
715             Condition => '$$self{MakerNoteSigmaVer} >= 3',
716             Notes => 'some newer models only',
717             },
718             0x0049 => { #PH
719             Name => 'FNumber',
720             Condition => '$$self{MakerNoteSigmaVer} >= 3',
721             Notes => 'some newer models only',
722             Writable => 'rational64u',
723             PrintConv => 'sprintf("%.1f",$val)',
724             PrintConvInv => '$val',
725             Priority => 0,
726             },
727             0x004a => { #PH
728             Name => 'ExposureTime',
729             Condition => '$$self{MakerNoteSigmaVer} >= 3',
730             Notes => 'some newer models only',
731             Writable => 'rational64u',
732             PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
733             PrintConvInv => '$val',
734             Priority => 0,
735             },
736             0x004b => [{ #PH
737             Name => 'ExposureTime2',
738             Condition => '$$self{Model} =~ /^SIGMA (SD1( Merrill)?|DP\d Merrill)$/',
739             Notes => 'SD1 and DP Merrill models only',
740             PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
741             PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
742             },{ #PH
743             Name => 'ExposureTime2',
744             Condition => '$$self{Model} =~ /^SIGMA dp\d Quattro$/i',
745             Notes => 'DP Quattro models only',
746             ValueConv => '$val / 1000000',
747             ValueConvInv => '$val * 1000000',
748             PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
749             PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
750             }],
751             0x004d => { #PH
752             Name => 'ExposureCompensation',
753             Condition => '$$self{MakerNoteSigmaVer} >= 3',
754             Notes => 'some newer models only',
755             Writable => 'rational64s',
756             # add a '+' sign to positive values
757             PrintConv => '$val and $val =~ s/^(\d)/\+$1/; $val',
758             PrintConvInv => '$val',
759             },
760             # 0x0054 - string: "F20","F23"
761             0x0055 => { #PH
762             Name => 'SensorTemperature',
763             Condition => '$$self{MakerNoteSigmaVer} >= 3',
764             Notes => 'some newer models only',
765             # (string format)
766             PrintConv => 'IsInt($val) ? "$val C" : $val',
767             PrintConvInv => '$val=~s/ ?C$//; $val',
768             },
769             0x0056 => { #PH (NC)
770             Name => 'FlashExposureComp',
771             Condition => '$$self{MakerNoteSigmaVer} >= 3',
772             Notes => 'some newer models only',
773             Writable => 'rational64s',
774             },
775             0x0057 => { #PH (how is this different from other Firmware?)
776             Name => 'Firmware2',
777             Condition => '$format eq "string"',
778             Notes => 'some newer models only',
779             Priority => 0,
780             },
781             0x0058 => { #PH
782             Name => 'WhiteBalance',
783             Condition => '$$self{MakerNoteSigmaVer} >= 3',
784             Notes => 'some newer models only',
785             Priority => 0,
786             },
787             0x0059 => { #PH
788             Name => 'DigitalFilter',
789             Condition => '$$self{MakerNoteSigmaVer} >= 3',
790             Notes => 'some newer models only',
791             # seen: Standard,Landscape,Monochrome,Neutral,Portrait,Sepia,Vivid
792             },
793             # 0x005a/b/c - rational64s: 0/10 for the SD1
794             0x0084 => { #PH (Quattro models and fp)
795             Name => 'Model',
796             Description => 'Camera Model Name',
797             },
798             # 0x0085
799             0x0086 => { #PH (Quattro models)
800             Name => 'ISO',
801             Writable => 'int16u',
802             },
803             0x0087 => 'ResolutionMode', #PH (Quattro models)
804             0x0088 => 'WhiteBalance', #PH (Quattro models)
805             0x008c => 'Firmware', #PH (Quattro models)
806             0x0113 => { #forum17338
807             Name => 'PictureModeStrength',
808             Writable => 'int32s',
809             },
810             0x011f => { #IB (FP DNG images)
811             Name => 'CameraCalibration',
812             Writable => 'float',
813             Count => 9,
814             },
815             0x0120 => { #IB (FP DNG images)
816             Name => 'WBSettings',
817             SubDirectory => { TagTable => 'Image::ExifTool::Sigma::WBSettings' },
818             },
819             0x0121 => { #IB (FP DNG images)
820             Name => 'WBSettings2',
821             SubDirectory => { TagTable => 'Image::ExifTool::Sigma::WBSettings2' },
822             },
823             0x0138 => { #forum17338
824             Name => 'Fade',
825             Writable => 'rational64u',
826             },
827             0x0139 => { #forum17338
828             Name => 'Vignette',
829             Writable => 'rational64u',
830             },
831             );
832              
833             # WB settings (ref IB)
834             %Image::ExifTool::Sigma::WBSettings = (
835             PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
836             WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
837             CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
838             WRITABLE => 1,
839             FORMAT => 'float',
840             GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
841             0 => { Name => 'WB_RGBLevelsAuto', Format => 'float[3]' },
842             3 => { Name => 'WB_RGBLevelsDaylight', Format => 'float[3]' },
843             6 => { Name => 'WB_RGBLevelsShade', Format => 'float[3]' },
844             9 => { Name => 'WB_RGBLevelsOvercast', Format => 'float[3]' },
845             12 => { Name => 'WB_RGBLevelsIncandescent', Format => 'float[3]' },
846             15 => { Name => 'WB_RGBLevelsFluorescent', Format => 'float[3]' },
847             18 => { Name => 'WB_RGBLevelsFlash', Format => 'float[3]' },
848             21 => { Name => 'WB_RGBLevelsCustom1', Format => 'float[3]' },
849             24 => { Name => 'WB_RGBLevelsCustom2', Format => 'float[3]' },
850             27 => { Name => 'WB_RGBLevelsCustom3', Format => 'float[3]' },
851             );
852              
853             # WB settings (ref IB)
854             %Image::ExifTool::Sigma::WBSettings2 = (
855             PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
856             WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
857             CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
858             WRITABLE => 1,
859             FORMAT => 'float',
860             GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
861             0 => { Name => 'WB_RGBLevelsUnknown0', Unknown => 1, Format => 'float[3]' },
862             3 => { Name => 'WB_RGBLevelsUnknown1', Unknown => 1, Format => 'float[3]' },
863             6 => { Name => 'WB_RGBLevelsUnknown2', Unknown => 1, Format => 'float[3]' },
864             9 => { Name => 'WB_RGBLevelsUnknown3', Unknown => 1, Format => 'float[3]' },
865             12 => { Name => 'WB_RGBLevelsUnknown4', Unknown => 1, Format => 'float[3]' },
866             15 => { Name => 'WB_RGBLevelsUnknown5', Unknown => 1, Format => 'float[3]' },
867             18 => { Name => 'WB_RGBLevelsUnknown6', Unknown => 1, Format => 'float[3]' },
868             21 => { Name => 'WB_RGBLevelsUnknown7', Unknown => 1, Format => 'float[3]' },
869             24 => { Name => 'WB_RGBLevelsUnknown8', Unknown => 1, Format => 'float[3]' },
870             27 => { Name => 'WB_RGBLevelsUnknown9', Unknown => 1, Format => 'float[3]' },
871             );
872              
873              
874             1; # end
875              
876             __END__