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   4904 use strict;
  19         51  
  19         796  
19 19     19   112 use vars qw($VERSION %sigmaLensTypes);
  19         60  
  19         979  
20 19     19   1402 use Image::ExifTool::Exif;
  19         50  
  19         27631  
21              
22             $VERSION = '1.32';
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             0x4001 => 'Lumix S 24-105mm F4 Macro OIS (S-R24105)', #IB
230             0x4002 => 'Lumix S 70-200mm F4 OIS (S-R70200)', #IB
231             0x4003 => 'Lumix S 50mm F1.4 (S-X50)', #IB
232             0x4006 => 'Lumix S 24-70mm F2.8 (S-E2470)', #IB
233             0x4007 => 'Lumix S 16-35mm F4 (S-R1635)', #IB
234             0x4008 => 'Lumix S 70-200mm F2.8 OIS (S-E70200)', #IB
235             0x4010 => 'Lumix S 35mm F1.8 (S-S35)', #IB
236             0x4011 => 'LUMIX S 18mm F1.8 (S-S18)', #IB
237             0x400b => 'Lumix S 20-60mm F3.5-5.6 (S-R2060)', #IB
238             0x400c => 'Lumix S 85mm F1.8 (S-S85)', #IB
239             0x400d => 'Lumix S 70-300 F4.5-5.6 Macro OIS (S-R70300)', #IB
240             0x400f => 'Lumix S 24mm F1.8 (S-S24)', #IB
241             0x6001 => 'Sigma 150-600mm F5-6.3 DG OS HSM | S', #PH (NC, fp)
242             0x6003 => 'Sigma 45mm F2.8 DG DN | C', #PH (NC, fp)
243             0x6005 => 'Sigma 14-24mm F2.8 DG DN | A', #IB
244             0x6006 => 'Sigma 50mm F1.4 DG HSM | A', #IB (014)
245             0x6011 => 'Sigma 24-70mm F2.8 DG DN | A', #IB
246             0x6012 => 'Sigma 100-400mm F5-6.3 DG DN OS | C', #IB
247             0x6013 => 'Sigma 100-400mm F5-6.3 DG DN OS | C + TC-1411', #IB
248             0x6015 => 'Sigma 85mm F1.4 DG DN | A', #IB
249             0x6017 => 'Sigma 65mm F2 DG DN | C', #IB
250             0x6018 => 'Sigma 35mm F2 DG DN | C', #IB
251             0x601a => 'Sigma 28-70mm F2.8 DG DN | C', #IB
252             0x601b => 'Sigma 150-600mm F5-6.3 DG DN OS | S', #IB
253             0x6020 => 'Sigma 35mm F1.4 DG DN | A', #IB
254             0x6021 => 'Sigma 90mm F2.8 DG DN | C', #IB
255             0x6023 => 'Sigma 20mm F2 DG DN | C', #IB
256             0x6025 => 'Sigma 20mm F1.4 DG DN | A', #IB
257             0x6026 => 'Sigma 24mm F1.4 DG DN | A', #IB
258             0x8005 => 'Sigma 35mm F1.4 DG HSM | A', #PH (012)
259             0x8009 => 'Sigma 18-35mm F1.8 DC HSM | A', #PH
260             0x8900 => 'Sigma 70-300mm F4-5.6 DG OS', #PH (SD15)
261             0xA100 => 'Sigma 24-70mm F2.8 DG Macro', #PH (SD15)
262             # 'FFFF' - seen this for a 28-70mm F2.8 lens - PH
263             );
264              
265             %Image::ExifTool::Sigma::Main = (
266             WRITE_PROC => \&Image::ExifTool::Exif::WriteExif,
267             CHECK_PROC => \&Image::ExifTool::Exif::CheckExif,
268             WRITABLE => 'string',
269             GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
270             NOTES => q{
271             These tags are written by Sigma/Foveon cameras. In the early days Sigma was
272             a class leader by releasing their maker note specification to the public,
273             but since then they have deviated from this standard and newer camera models
274             are less than consistent about their metadata formats.
275             },
276             0x0002 => 'SerialNumber',
277             0x0003 => 'DriveMode',
278             0x0004 => 'ResolutionMode',
279             0x0005 => 'AFMode',
280             0x0006 => 'FocusSetting',
281             0x0007 => 'WhiteBalance',
282             0x0008 => {
283             Name => 'ExposureMode',
284             PrintConv => { #PH
285             A => 'Aperture-priority AE',
286             M => 'Manual',
287             P => 'Program AE',
288             S => 'Shutter speed priority AE',
289             },
290             },
291             0x0009 => {
292             Name => 'MeteringMode',
293             PrintConv => { #PH
294             A => 'Average',
295             C => 'Center-weighted average',
296             8 => 'Multi-segment',
297             },
298             },
299             0x000a => 'LensFocalRange',
300             0x000b => 'ColorSpace',
301             # SIGMA PhotoPro writes these tags as strings, but some cameras (at least) write them as rational
302             0x000c => [
303             {
304             Name => 'ExposureCompensation',
305             Condition => '$format eq "string"',
306             ValueConv => '$val =~ s/Expo:\s*//, $val',
307             ValueConvInv => 'IsFloat($val) ? sprintf("Expo:%+.1f",$val) : undef',
308             },
309             { #PH
310             Name => 'ExposureAdjust',
311             Writable => 'rational64s',
312             Unknown => 1,
313             },
314             ],
315             0x000d => [
316             {
317             Name => 'Contrast',
318             Condition => '$format eq "string"',
319             ValueConv => '$val =~ s/Cont:\s*//, $val',
320             ValueConvInv => 'IsFloat($val) ? sprintf("Cont:%+.1f",$val) : undef',
321             },
322             { #PH
323             Name => 'Contrast',
324             Writable => 'rational64s',
325             Priority => 0,
326             },
327             ],
328             0x000e => [
329             {
330             Name => 'Shadow',
331             Condition => '$format eq "string"',
332             ValueConv => '$val =~ s/Shad:\s*//, $val',
333             ValueConvInv => 'IsFloat($val) ? sprintf("Shad:%+.1f",$val) : undef',
334             },
335             { #PH (may be incorrect for the SD1)
336             Name => 'Shadow',
337             Writable => 'rational64s',
338             Priority => 0,
339             },
340             ],
341             0x000f => [
342             {
343             Name => 'Highlight',
344             Condition => '$format eq "string"',
345             ValueConv => '$val =~ s/High:\s*//, $val',
346             ValueConvInv => 'IsFloat($val) ? sprintf("High:%+.1f",$val) : undef',
347             },
348             { #PH (may be incorrect for the SD1)
349             Name => 'Highlight',
350             Writable => 'rational64s',
351             Priority => 0,
352             },
353             ],
354             0x0010 => [
355             {
356             Name => 'Saturation',
357             Condition => '$format eq "string"',
358             ValueConv => '$val =~ s/Satu:\s*//, $val',
359             ValueConvInv => 'IsFloat($val) ? sprintf("Satu:%+.1f",$val) : undef',
360             },
361             { #PH (may be incorrect for the SD1)
362             Name => 'Saturation',
363             Writable => 'rational64s',
364             Priority => 0,
365             },
366             ],
367             0x0011 => [
368             {
369             Name => 'Sharpness',
370             Condition => '$format eq "string"',
371             ValueConv => '$val =~ s/Shar:\s*//, $val',
372             ValueConvInv => 'IsFloat($val) ? sprintf("Shar:%+.1f",$val) : undef',
373             },
374             { #PH (may be incorrect for the SD1)
375             Name => 'Sharpness',
376             Writable => 'rational64s',
377             Priority => 0,
378             },
379             ],
380             0x0012 => [
381             {
382             Name => 'X3FillLight',
383             Condition => '$format eq "string"',
384             ValueConv => '$val =~ s/Fill:\s*//, $val',
385             ValueConvInv => 'IsFloat($val) ? sprintf("Fill:%+.1f",$val) : undef',
386             },
387             { #PH
388             Name => 'X3FillLight',
389             Writable => 'rational64s',
390             },
391             ],
392             0x0014 => [
393             {
394             Name => 'ColorAdjustment',
395             Condition => '$format eq "string"',
396             ValueConv => '$val =~ s/CC:\s*//, $val',
397             ValueConvInv => 'IsInt($val) ? "CC:$val" : undef',
398             },
399             { #PH
400             Name => 'ColorAdjustment',
401             Writable => 'rational64s',
402             Count => 3,
403             },
404             ],
405             0x0015 => 'AdjustmentMode',
406             0x0016 => {
407             Name => 'Quality',
408             ValueConv => '$val =~ s/Qual:\s*//, $val',
409             ValueConvInv => 'IsInt($val) ? "Qual:$val" : undef',
410             },
411             0x0017 => 'Firmware',
412             0x0018 => {
413             Name => 'Software',
414             Priority => 0,
415             },
416             0x0019 => 'AutoBracket',
417             0x001a => [ #PH
418             {
419             Name => 'PreviewImageStart',
420             Condition => '$format eq "int32u"',
421             Notes => q{
422             Sigma Photo Pro writes ChrominanceNoiseReduction here, but various
423             models use this for PreviewImageStart
424             },
425             IsOffset => 1,
426             OffsetPair => 0x001b,
427             DataTag => 'PreviewImage',
428             Writable => 'int32u',
429             WriteGroup => 'MakerNotes',
430             Protected => 2,
431             },{ # (written by Sigma Photo Pro)
432             Name => 'ChrominanceNoiseReduction',
433             Condition => '$format eq "string"',
434             ValueConv => '$val =~ s/Chro:\s*//, $val',
435             ValueConvInv => 'IsFloat($val) ? sprintf("Chro:%+.1f",$val) : undef',
436             },
437             # the SD1 writes something else here (rational64s, value 0/10)
438             # (but we can't test by model because Sigma Photo Pro writes this too)
439             ],
440             0x001b => [ #PH
441             {
442             Name => 'PreviewImageLength',
443             Condition => '$format eq "int32u"',
444             Notes => q{
445             Sigma Photo Pro writes LuminanceNoiseReduction here, but various models use
446             this for PreviewImageLength
447             },
448             OffsetPair => 0x001a,
449             DataTag => 'PreviewImage',
450             Writable => 'int32u',
451             WriteGroup => 'MakerNotes',
452             Protected => 2,
453             },{ # (written by Sigma Photo Pro)
454             Name => 'LuminanceNoiseReduction',
455             Condition => '$format eq "string"',
456             ValueConv => '$val =~ s/Luma:\s*//, $val',
457             ValueConvInv => 'IsFloat($val) ? sprintf("Luma:%+.1f",$val) : undef',
458             },
459             # the SD1 writes something else here (rational64s, value 0/10)
460             ],
461             0x001c => [ #PH
462             {
463             Name => 'PreviewImageSize',
464             Condition => '$$self{MakerNoteSigmaVer} < 3',
465             Notes => q{
466             PreviewImageStart for the SD1 and Merrill/Quattro models, and
467             PreviewImageSize for others
468             },
469             Writable => 'int16u',
470             Count => 2,
471             PrintConv => '$val =~ tr/ /x/; $val',
472             PrintConvInv => '$val =~ tr/x/ /; $val',
473             },{
474             Name => 'PreviewImageStart',
475             Condition => '$format eq "int32u"',
476             IsOffset => 1,
477             OffsetPair => 0x001d,
478             DataTag => 'PreviewImage',
479             Writable => 'int32u',
480             WriteGroup => 'MakerNotes',
481             Protected => 2,
482             },
483             ],
484             0x001d => [ #PH
485             {
486             Name => 'MakerNoteVersion',
487             Condition => '$$self{MakerNoteSigmaVer} < 3',
488             Notes => q{
489             PreviewImageLength for the SD1 and Merrill/Quattro models, and
490             MakerNoteVersion for others
491             },
492             Writable => 'undef',
493             },{
494             Name => 'PreviewImageLength',
495             Condition => '$format eq "int32u"',
496             OffsetPair => 0x001c,
497             DataTag => 'PreviewImage',
498             Writable => 'int32u',
499             WriteGroup => 'MakerNotes',
500             Protected => 2,
501             },
502             ],
503             # 0x001e - int16u: 0, 4, 13 - flash mode for other models?
504             0x001e => { #PH
505             Name => 'PreviewImageSize',
506             Condition => '$$self{MakerNoteSigmaVer} >= 3',
507             Notes => 'only valid for some models',
508             Writable => 'int16u',
509             Count => 2,
510             PrintConv => '$val =~ tr/ /x/; $val',
511             PrintConvInv => '$val =~ tr/x/ /; $val',
512             },
513             0x001f => [ #PH
514             {
515             Name => 'AFPoint', # (NC -- invalid for SD9,SD14?)
516             Condition => '$$self{MakerNoteSigmaVer} < 3',
517             Notes => q{
518             MakerNoteVersion for the SD1 and Merrill/Quattro models, and AFPoint for
519             others
520             },
521             # values: "", "Center", "Center,Center", "Right,Right"
522             },{
523             Name => 'MakerNoteVersion',
524             Writable => 'undef',
525             },
526             ],
527             # 0x0020 - string: " " for most models, or int16u: 4 for the DP3 Merrill
528             # 0x0021 - string: " " for most models, or int8u[2]: '3 3' for the DP3 Merrill
529             0x0022 => { #PH (NC)
530             Name => 'FileFormat',
531             Condition => '$$self{MakerNoteSigmaVer} < 3',
532             Notes => 'models other than the SD1 and Merrill/Quattro models',
533             # values: "JPG", "JPG-S", "JPG-P", "X3F", "X3F-S"
534             },
535             # 0x0023 - string: "", 10, 83, 131, 145, 150, 152, 169
536             0x0024 => { # (invalid for SD9,SD14?)
537             Name => 'Calibration',
538             Condition => '$$self{MakerNoteSigmaVer} < 3',
539             Notes => 'models other than the SD1 and Merrill/Quattro models',
540             },
541             # 0x0025 - string: "", "0.70", "0.90"
542             # 0x0026-2b - int32u: 0
543             0x0026 => { #PH (NC)
544             Name => 'FileFormat',
545             Condition => '$$self{MakerNoteSigmaVer} >= 3',
546             Notes => 'some newer models only',
547             # (also Sigma fp)
548             },
549             0x0027 => [{ #PH
550             Name => 'LensType',
551             Condition => '$$self{MakerNoteSigmaVer} >= 3 and $format eq "string"',
552             Notes => 'some newer models only',
553             ValueConv => '$val =~ /^[0-9a-f]+$/i ? hex($val) : $val',
554             # (truncate decimal part and convert hex)
555             ValueConvInv => '$val=~s/\.\d+$//;$val=~/^0x/ and $val=hex($val);IsInt($val) ? sprintf("%x",$val) : $val',
556             SeparateTable => 'LensType',
557             PrintHex => 1,
558             PrintConv => \%sigmaLensTypes,
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             }],
568             0x002a => { #PH
569             Name => 'LensFocalRange',
570             Condition => '$$self{MakerNoteSigmaVer} >= 3',
571             Notes => 'some newer models only',
572             Writable => 'rational64u',
573             Count => 2,
574             PrintConv => '$val=~s/ / to /; $val',
575             PrintConvInv => '$val=~s/to //; $val',
576             },
577             0x002b => { #PH
578             Name => 'LensMaxApertureRange',
579             # for most models this gives the max aperture at the long/short focal lengths,
580             # but for some models this gives the min/max aperture
581             Condition => '$$self{MakerNoteSigmaVer} >= 3',
582             Notes => 'some newer models only',
583             Writable => 'rational64u',
584             Count => 2,
585             PrintConv => '$val=~s/ / to /; $val',
586             PrintConvInv => '$val=~s/to /; $val',
587             },
588             # 0x002c is rational64u for some models, with a value that may be related to FNumber - PH
589             0x002c => { #PH
590             Name => 'ColorMode',
591             Condition => '$format eq "int32u"',
592             Notes => 'not valid for some models',
593             Writable => 'int32u',
594             # this tag written by Sigma Photo Pro even for cameras that write 'n/a' here
595             PrintConv => {
596             0 => 'n/a',
597             1 => 'Sepia',
598             2 => 'B&W',
599             3 => 'Standard',
600             4 => 'Vivid',
601             5 => 'Neutral',
602             6 => 'Portrait',
603             7 => 'Landscape',
604             8 => 'FOV Classic Blue',
605             },
606             },
607             # 0x002d - int32u: 0
608             # 0x002e - rational64s: (the negative of FlashExposureComp, but why?)
609             # 0x002f - int32u: 0, 1
610             0x0030 => [ #PH
611             {
612             Name => 'LensApertureRange',
613             Condition => '$$self{MakerNoteSigmaVer} < 3',
614             Notes => q{
615             Calibration for the SD1 and Merrill/Quattro models, and LensApertureRange
616             for others. Note that LensApertureRange changes with focal length, and some
617             models report the maximum aperture here
618             },
619             },{
620             Name => 'Calibration',
621             },
622             ],
623             0x0031 => { #PH
624             Name => 'FNumber',
625             Condition => '$$self{MakerNoteSigmaVer} < 3',
626             Notes => 'models other than the SD1 and Merrill/Quattro models',
627             Writable => 'rational64u',
628             PrintConv => 'sprintf("%.1f",$val)',
629             PrintConvInv => '$val',
630             Priority => 0,
631             },
632             0x0032 => { #PH
633             Name => 'ExposureTime',
634             Condition => '$$self{MakerNoteSigmaVer} < 3',
635             Notes => 'models other than the SD1 and Merrill/Quattro models',
636             Writable => 'rational64u',
637             PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
638             PrintConvInv => '$val',
639             Priority => 0,
640             },
641             0x0033 => { #PH
642             Name => 'ExposureTime2',
643             Condition => '$$self{Model} !~ / (SD1|SD9|SD15|Merrill|Quattro|fp)$/',
644             Notes => 'models other than the SD1, SD9, SD15 and Merrill/Quattro models',
645             ValueConv => '$val * 1e-6',
646             ValueConvInv => 'int($val * 1e6 + 0.5)',
647             PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
648             PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
649             },
650             0x0034 => { #PH
651             Name => 'BurstShot',
652             Condition => '$$self{MakerNoteSigmaVer} < 3',
653             Notes => 'models other than the SD1 and Merrill/Quattro models',
654             Writable => 'int32u',
655             },
656             # 0x0034 - int32u: 0,1,2,3 or 4
657             0x0035 => { #PH
658             Name => 'ExposureCompensation',
659             Condition => '$$self{MakerNoteSigmaVer} < 3',
660             Notes => 'models other than the SD1 and Merrill/Quattro models',
661             Writable => 'rational64s',
662             # add a '+' sign to positive values
663             PrintConv => '$val and $val =~ s/^(\d)/\+$1/; $val',
664             PrintConvInv => '$val',
665             },
666             # 0x0036 - string: " "
667             # 0x0037-38 - string: ""
668             0x0039 => { #PH (invalid for SD9, SD14?)
669             Name => 'SensorTemperature',
670             Condition => '$$self{MakerNoteSigmaVer} < 3',
671             Notes => 'models other than the SD1 and Merrill/Quattro models',
672             # (string format)
673             PrintConv => 'IsInt($val) ? "$val C" : $val',
674             PrintConvInv => '$val=~s/ ?C$//; $val',
675             },
676             0x003a => { #PH
677             Name => 'FlashExposureComp',
678             Condition => '$$self{MakerNoteSigmaVer} < 3',
679             Notes => 'models other than the SD1 and Merrill/Quattro models',
680             Writable => 'rational64s',
681             },
682             0x003b => { #PH (how is this different from other Firmware?)
683             Name => 'Firmware',
684             Condition => '$$self{MakerNoteSigmaVer} < 3',
685             Notes => 'models other than the SD1 and Merrill/Quattro models',
686             Priority => 0,
687             },
688             0x003c => { #PH
689             Name => 'WhiteBalance',
690             Condition => '$$self{MakerNoteSigmaVer} < 3',
691             Notes => 'models other than the SD1 and Merrill/Quattro models',
692             Priority => 0,
693             },
694             0x003d => { #PH (new for SD15 and SD1)
695             Name => 'PictureMode',
696             Notes => 'same as ColorMode, but "Standard" when ColorMode is Sepia or B&W',
697             },
698             0x0048 => { #PH
699             Name => 'LensApertureRange',
700             Condition => '$$self{MakerNoteSigmaVer} >= 3',
701             Notes => 'some newer models only',
702             },
703             0x0049 => { #PH
704             Name => 'FNumber',
705             Condition => '$$self{MakerNoteSigmaVer} >= 3',
706             Notes => 'some newer models only',
707             Writable => 'rational64u',
708             PrintConv => 'sprintf("%.1f",$val)',
709             PrintConvInv => '$val',
710             Priority => 0,
711             },
712             0x004a => { #PH
713             Name => 'ExposureTime',
714             Condition => '$$self{MakerNoteSigmaVer} >= 3',
715             Notes => 'some newer models only',
716             Writable => 'rational64u',
717             PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
718             PrintConvInv => '$val',
719             Priority => 0,
720             },
721             0x004b => [{ #PH
722             Name => 'ExposureTime2',
723             Condition => '$$self{Model} =~ /^SIGMA (SD1( Merrill)?|DP\d Merrill)$/',
724             Notes => 'SD1 and DP Merrill models only',
725             PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
726             PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
727             },{ #PH
728             Name => 'ExposureTime2',
729             Condition => '$$self{Model} =~ /^SIGMA dp\d Quattro$/i',
730             Notes => 'DP Quattro models only',
731             ValueConv => '$val / 1000000',
732             ValueConvInv => '$val * 1000000',
733             PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
734             PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
735             }],
736             0x004d => { #PH
737             Name => 'ExposureCompensation',
738             Condition => '$$self{MakerNoteSigmaVer} >= 3',
739             Notes => 'some newer models only',
740             Writable => 'rational64s',
741             # add a '+' sign to positive values
742             PrintConv => '$val and $val =~ s/^(\d)/\+$1/; $val',
743             PrintConvInv => '$val',
744             },
745             # 0x0054 - string: "F20","F23"
746             0x0055 => { #PH
747             Name => 'SensorTemperature',
748             Condition => '$$self{MakerNoteSigmaVer} >= 3',
749             Notes => 'some newer models only',
750             # (string format)
751             PrintConv => 'IsInt($val) ? "$val C" : $val',
752             PrintConvInv => '$val=~s/ ?C$//; $val',
753             },
754             0x0056 => { #PH (NC)
755             Name => 'FlashExposureComp',
756             Condition => '$$self{MakerNoteSigmaVer} >= 3',
757             Notes => 'some newer models only',
758             Writable => 'rational64s',
759             },
760             0x0057 => { #PH (how is this different from other Firmware?)
761             Name => 'Firmware2',
762             Condition => '$format eq "string"',
763             Notes => 'some newer models only',
764             Priority => 0,
765             },
766             0x0058 => { #PH
767             Name => 'WhiteBalance',
768             Condition => '$$self{MakerNoteSigmaVer} >= 3',
769             Notes => 'some newer models only',
770             Priority => 0,
771             },
772             0x0059 => { #PH
773             Name => 'DigitalFilter',
774             Condition => '$$self{MakerNoteSigmaVer} >= 3',
775             Notes => 'some newer models only',
776             # seen: Standard,Landscape,Monochrome,Neutral,Portrait,Sepia,Vivid
777             },
778             # 0x005a/b/c - rational64s: 0/10 for the SD1
779             0x0084 => { #PH (Quattro models and fp)
780             Name => 'Model',
781             Description => 'Camera Model Name',
782             },
783             # 0x0085
784             0x0086 => { #PH (Quattro models)
785             Name => 'ISO',
786             Writable => 'int16u',
787             },
788             0x0087 => 'ResolutionMode', #PH (Quattro models)
789             0x0088 => 'WhiteBalance', #PH (Quattro models)
790             0x008c => 'Firmware', #PH (Quattro models)
791             0x011f => { #IB (FP DNG images)
792             Name => 'CameraCalibration',
793             Writable => 'float',
794             Count => 9,
795             },
796             0x0120 => { #IB (FP DNG images)
797             Name => 'WBSettings',
798             SubDirectory => { TagTable => 'Image::ExifTool::Sigma::WBSettings' },
799             },
800             0x0121 => { #IB (FP DNG images)
801             Name => 'WBSettings2',
802             SubDirectory => { TagTable => 'Image::ExifTool::Sigma::WBSettings2' },
803             },
804             );
805              
806             # WB settings (ref IB)
807             %Image::ExifTool::Sigma::WBSettings = (
808             PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
809             WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
810             CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
811             WRITABLE => 1,
812             FORMAT => 'float',
813             GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
814             0 => { Name => 'WB_RGBLevelsAuto', Format => 'float[3]' },
815             3 => { Name => 'WB_RGBLevelsDaylight', Format => 'float[3]' },
816             6 => { Name => 'WB_RGBLevelsShade', Format => 'float[3]' },
817             9 => { Name => 'WB_RGBLevelsOvercast', Format => 'float[3]' },
818             12 => { Name => 'WB_RGBLevelsIncandescent', Format => 'float[3]' },
819             15 => { Name => 'WB_RGBLevelsFluorescent', Format => 'float[3]' },
820             18 => { Name => 'WB_RGBLevelsFlash', Format => 'float[3]' },
821             21 => { Name => 'WB_RGBLevelsCustom1', Format => 'float[3]' },
822             24 => { Name => 'WB_RGBLevelsCustom2', Format => 'float[3]' },
823             27 => { Name => 'WB_RGBLevelsCustom3', Format => 'float[3]' },
824             );
825              
826             # WB settings (ref IB)
827             %Image::ExifTool::Sigma::WBSettings2 = (
828             PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
829             WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
830             CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
831             WRITABLE => 1,
832             FORMAT => 'float',
833             GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
834             0 => { Name => 'WB_RGBLevelsUnknown0', Unknown => 1, Format => 'float[3]' },
835             3 => { Name => 'WB_RGBLevelsUnknown1', Unknown => 1, Format => 'float[3]' },
836             6 => { Name => 'WB_RGBLevelsUnknown2', Unknown => 1, Format => 'float[3]' },
837             9 => { Name => 'WB_RGBLevelsUnknown3', Unknown => 1, Format => 'float[3]' },
838             12 => { Name => 'WB_RGBLevelsUnknown4', Unknown => 1, Format => 'float[3]' },
839             15 => { Name => 'WB_RGBLevelsUnknown5', Unknown => 1, Format => 'float[3]' },
840             18 => { Name => 'WB_RGBLevelsUnknown6', Unknown => 1, Format => 'float[3]' },
841             21 => { Name => 'WB_RGBLevelsUnknown7', Unknown => 1, Format => 'float[3]' },
842             24 => { Name => 'WB_RGBLevelsUnknown8', Unknown => 1, Format => 'float[3]' },
843             27 => { Name => 'WB_RGBLevelsUnknown9', Unknown => 1, Format => 'float[3]' },
844             );
845              
846              
847             1; # end
848              
849             __END__