/Image-ExifTool-8.90/lib/Image/ExifTool/Canon.pm
# · Perl · 7148 lines · 6465 code · 116 blank · 567 comment · 138 complexity · 5bdb43d01f1630302f42e83d1fb1995e MD5 · raw file
Large files are truncated click here to view the full file
- #------------------------------------------------------------------------------
- # File: Canon.pm
- #
- # Description: Canon EXIF maker notes tags
- #
- # Revisions: 11/25/2003 - P. Harvey Created
- # 12/03/2003 - P. Harvey Decode lots more tags and add CanonAFInfo
- # 02/17/2004 - Michael Rommel Added IxusAFPoint
- # 01/27/2005 - P. Harvey Disable validation of CanonAFInfo
- # 01/30/2005 - P. Harvey Added a few more tags (ref 4)
- # 02/10/2006 - P. Harvey Decode a lot of new tags (ref 12)
- # [ongoing] - P. Harvey Constantly decoding new information
- #
- # Notes: Must check FocalPlaneX/YResolution values for each new model!
- #
- # References: 1) http://park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html
- # 2) Michael Rommel private communication (Digital Ixus)
- # 3) Daniel Pittman private communication (PowerShot S70)
- # 4) http://www.wonderland.org/crw/
- # 5) Juha Eskelinen private communication (20D)
- # 6) Richard S. Smith private communication (20D)
- # 7) Denny Priebe private communication (1DmkII)
- # 8) Irwin Poche private communication
- # 9) Michael Tiemann private communication (1DmkII)
- # 10) Volker Gering private communication (1DmkII)
- # 11) "cip" private communication
- # 12) Rainer Honle private communication (5D)
- # 13) http://www.cybercom.net/~dcoffin/dcraw/
- # 14) (bozi) http://www.cpanforum.com/threads/2476 and /2563
- # 15) http://homepage3.nifty.com/kamisaka/makernote/makernote_canon.htm (2007/11/19)
- # + http://homepage3.nifty.com/kamisaka/makernote/CanonLens.htm (2007/11/19)
- # 16) Emil Sit private communication (30D)
- # 17) http://www.asahi-net.or.jp/~xp8t-ymzk/s10exif.htm
- # 18) Samson Tai private communication (G7)
- # 19) Warren Stockton private communication
- # 20) Bogdan private communication
- # 21) Heiko Hinrichs private communication
- # 22) Dave Nicholson private communication (PowerShot S30)
- # 23) Magne Nilsen private communication (400D)
- # 24) Wolfgang Hoffmann private communication (40D)
- # 26) Steve Balcombe private communication
- # 27) Chris Huebsch private communication (40D)
- # 28) Hal Williamson private communication (XTi)
- # 29) Ger Vermeulen private communication
- # 30) David Pitcher private communication (1DmkIII)
- # 31) Darryl Zurn private communication (A590IS)
- # 32) Rich Taylor private communication (5D)
- # 33) D.J. Cristi private communication
- # 34) Andreas Huggel and Pascal de Bruijn private communication
- # 35) Jan Boelsma private communication
- # 36) Karl-Heinz Klotz private communication (http://www.dslr-forum.de/showthread.php?t=430900)
- # 37) Vesa Kivisto private communication (30D)
- # 38) Kurt Garloff private communication (5DmkII)
- # 39) Irwin Poche private communication (5DmkII)
- # 40) Jose Oliver-Didier private communication
- # 41) http://www.cpanforum.com/threads/10730
- # 42) Norbert Wasser private communication
- # 43) Karsten Sote private communication
- # 44) Hugh Griffiths private communication (5DmkII)
- # 45) Mark Berger private communication (5DmkII)
- # 46) Dieter Steiner private communication (7D)
- # 47) http://www.exiv2.org/
- # 48) Tomasz A. Kawecki private communication (550D, firmware 1.0.6, 1.0.8)
- # 49) http://www.listware.net/201101/digikam-users/49795-digikam-users-re-lens-recognition.html
- # 50) http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3833.0.html
- # JD) Jens Duttke private communication
- #------------------------------------------------------------------------------
- package Image::ExifTool::Canon;
- use strict;
- use vars qw($VERSION %canonModelID %canonLensTypes);
- use Image::ExifTool qw(:DataAccess :Utils);
- use Image::ExifTool::Exif;
- sub WriteCanon($$$);
- sub ProcessSerialData($$$);
- sub ProcessFilters($$$);
- sub SwapWords($);
- $VERSION = '2.91';
- # Note: Removed 'USM' from 'L' lenses since it is redundant - PH
- # (or is it? Ref 32 shows 5 non-USM L-type lenses)
- # --> have relaxed this for new lenses because Canon has been
- # consistent about keeping "USM" in the model name
- %canonLensTypes = ( #4
- Notes => q{
- Decimal values differentiate lenses which would otherwise have the same
- LensType, and are used by the Composite LensID tag when attempting to
- identify the specific lens model.
- },
- 1 => 'Canon EF 50mm f/1.8',
- 2 => 'Canon EF 28mm f/2.8',
- # (3 removed in current Kamisaka list)
- 3 => 'Canon EF 135mm f/2.8 Soft', #15/32
- 4 => 'Canon EF 35-105mm f/3.5-4.5 or Sigma Lens', #28
- 4.1 => 'Sigma UC Zoom 35-135mm f/4-5.6',
- 5 => 'Canon EF 35-70mm f/3.5-4.5', #32
- 6 => 'Canon EF 28-70mm f/3.5-4.5 or Sigma or Tokina Lens', #32
- 6.1 => 'Sigma 18-50mm f/3.5-5.6 DC', #23
- 6.2 => 'Sigma 18-125mm f/3.5-5.6 DC IF ASP',
- 6.3 => 'Tokina AF193-2 19-35mm f/3.5-4.5',
- 6.4 => 'Sigma 28-80mm f/3.5-5.6 II Macro', #47
- 7 => 'Canon EF 100-300mm f/5.6L', #15
- 8 => 'Canon EF 100-300mm f/5.6 or Sigma or Tokina Lens', #32
- 8.1 => 'Sigma 70-300mm f/4-5.6 [APO] DG Macro', #15 (both APO and non-APO, ref http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,2947.0.html)
- 8.2 => 'Tokina AT-X242AF 24-200mm f/3.5-5.6', #15
- 9 => 'Canon EF 70-210mm f/4', #32
- 9.1 => 'Sigma 55-200mm f/4-5.6 DC', #34
- 10 => 'Canon EF 50mm f/2.5 Macro or Sigma Lens', #10 (+ LSC Life Size Converter --> 70mm - PH)
- 10.1 => 'Sigma 50mm f/2.8 EX', #4
- 10.2 => 'Sigma 28mm f/1.8',
- 10.3 => 'Sigma 105mm f/2.8 Macro EX', #15
- 10.4 => 'Sigma 70mm f/2.8 EX DG Macro EF', #Jean-Michel Dubois
- 11 => 'Canon EF 35mm f/2', #9
- 13 => 'Canon EF 15mm f/2.8 Fisheye', #9
- 14 => 'Canon EF 50-200mm f/3.5-4.5L', #32
- 15 => 'Canon EF 50-200mm f/3.5-4.5', #32
- 16 => 'Canon EF 35-135mm f/3.5-4.5', #32
- 17 => 'Canon EF 35-70mm f/3.5-4.5A', #32
- 18 => 'Canon EF 28-70mm f/3.5-4.5', #32
- 20 => 'Canon EF 100-200mm f/4.5A', #32
- 21 => 'Canon EF 80-200mm f/2.8L',
- 22 => 'Canon EF 20-35mm f/2.8L or Tokina Lens', #32
- 22.1 => 'Tokina AT-X280AF PRO 28-80mm f/2.8 Aspherical', #15
- 23 => 'Canon EF 35-105mm f/3.5-4.5', #32
- 24 => 'Canon EF 35-80mm f/4-5.6 Power Zoom', #32
- 25 => 'Canon EF 35-80mm f/4-5.6 Power Zoom', #32
- 26 => 'Canon EF 100mm f/2.8 Macro or Other Lens',
- 26.1 => 'Cosina 100mm f/3.5 Macro AF',
- 26.2 => 'Tamron SP AF 90mm f/2.8 Di Macro', #15
- 26.3 => 'Tamron SP AF 180mm f/3.5 Di Macro', #15
- 26.4 => 'Carl Zeiss Planar T* 50mm f/1.4', #PH
- 27 => 'Canon EF 35-80mm f/4-5.6', #32
- # 27 => 'Carl Zeiss Distagon T* 28mm f/2 ZF', #PH (must be with an adapter, because the ZF version is a Nikon mount)
- # 27 => 'EMF adapter for Canon EOS digital cameras', #50 (reports LongFocal of 65535)
- 28 => 'Canon EF 80-200mm f/4.5-5.6 or Tamron Lens', #32
- 28.1 => 'Tamron SP AF 28-105mm f/2.8 LD Aspherical IF', #15
- 28.2 => 'Tamron SP AF 28-75mm f/2.8 XR Di LD Aspherical [IF] Macro', #4
- 28.3 => 'Tamron AF 70-300mm f/4.5-5.6 Di LD 1:2 Macro Zoom', #11
- 28.4 => 'Tamron AF Aspherical 28-200mm f/3.8-5.6', #14
- 29 => 'Canon EF 50mm f/1.8 II',
- 30 => 'Canon EF 35-105mm f/4.5-5.6', #32
- 31 => 'Canon EF 75-300mm f/4-5.6 or Tamron Lens', #32
- 31.1 => 'Tamron SP AF 300mm f/2.8 LD IF', #15
- 32 => 'Canon EF 24mm f/2.8 or Sigma Lens', #10
- 32.1 => 'Sigma 15mm f/2.8 EX Fisheye', #11
- 33 => 'Voigtlander or Carl Zeiss Lens',
- 33.1 => 'Voigtlander Ultron 40mm f/2 SLII Aspherical', #45
- 33.2 => 'Carl Zeiss Distagon T* 15mm f/2.8 ZE', #PH
- 33.3 => 'Carl Zeiss Distagon T* 18mm f/3.5 ZE', #PH
- 33.4 => 'Carl Zeiss Distagon T* 21mm f/2.8 ZE', #PH
- 33.5 => 'Carl Zeiss Distagon T* 28mm f/2 ZE', #PH
- 33.6 => 'Carl Zeiss Distagon T* 35mm f/2 ZE', #PH
- 35 => 'Canon EF 35-80mm f/4-5.6', #32
- 36 => 'Canon EF 38-76mm f/4.5-5.6', #32
- 37 => 'Canon EF 35-80mm f/4-5.6 or Tamron Lens', #32
- 37.1 => 'Tamron 70-200mm f/2.8 Di LD IF Macro', #PH
- 37.2 => 'Tamron AF 28-300mm f/3.5-6.3 XR Di VC LD Aspherical [IF] Macro Model A20', #38
- 37.3 => 'Tamron SP AF 17-50mm f/2.8 XR Di II VC LD Aspherical [IF]', #34
- 37.4 => 'Tamron AF 18-270mm f/3.5-6.3 Di II VC LD Aspherical [IF] Macro', #http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,2937.0.html
- 38 => 'Canon EF 80-200mm f/4.5-5.6', #32
- 39 => 'Canon EF 75-300mm f/4-5.6',
- 40 => 'Canon EF 28-80mm f/3.5-5.6',
- 41 => 'Canon EF 28-90mm f/4-5.6', #32
- 42 => 'Canon EF 28-200mm f/3.5-5.6 or Tamron Lens', #32
- 42.1 => 'Tamron AF 28-300mm f/3.5-6.3 XR Di VC LD Aspherical [IF] Macro Model A20', #15
- 43 => 'Canon EF 28-105mm f/4-5.6', #10
- 44 => 'Canon EF 90-300mm f/4.5-5.6', #32
- 45 => 'Canon EF-S 18-55mm f/3.5-5.6 [II]', #PH (same ID for version II, ref 20)
- 46 => 'Canon EF 28-90mm f/4-5.6', #32
- 48 => 'Canon EF-S 18-55mm f/3.5-5.6 IS', #20
- 49 => 'Canon EF-S 55-250mm f/4-5.6 IS', #23
- 50 => 'Canon EF-S 18-200mm f/3.5-5.6 IS',
- 51 => 'Canon EF-S 18-135mm f/3.5-5.6 IS', #PH
- 52 => 'Canon EF-S 18-55mm f/3.5-5.6 IS II', #PH
- 53 => 'Canon EF-S 18-55mm f/3.5-5.6 III', #Jon Charnas
- 94 => 'Canon TS-E 17mm f/4L', #42
- 95 => 'Canon TS-E 24.0mm f/3.5 L II', #43
- 124 => 'Canon MP-E 65mm f/2.8 1-5x Macro Photo', #9
- 125 => 'Canon TS-E 24mm f/3.5L',
- 126 => 'Canon TS-E 45mm f/2.8', #15
- 127 => 'Canon TS-E 90mm f/2.8', #15
- 129 => 'Canon EF 300mm f/2.8L', #32
- 130 => 'Canon EF 50mm f/1.0L', #10/15
- 131 => 'Canon EF 28-80mm f/2.8-4L or Sigma Lens', #32
- 131.1 => 'Sigma 8mm f/3.5 EX DG Circular Fisheye', #15
- 131.2 => 'Sigma 17-35mm f/2.8-4 EX DG Aspherical HSM', #15
- 131.3 => 'Sigma 17-70mm f/2.8-4.5 DC Macro', #PH (NC)
- 131.4 => 'Sigma APO 50-150mm f/2.8 [II] EX DC HSM', #15 ([II] ref PH)
- 131.5 => 'Sigma APO 120-300mm f/2.8 EX DG HSM', #15
- # 'Sigma APO 120-300mm f/2.8 EX DG HSM + 1.4x', #15
- # 'Sigma APO 120-300mm f/2.8 EX DG HSM + 2x', #15
- 131.6 => 'Sigma 4.5mm F2.8 EX DC HSM Circular Fisheye', #PH
- 132 => 'Canon EF 1200mm f/5.6L', #32
- 134 => 'Canon EF 600mm f/4L IS', #15
- 135 => 'Canon EF 200mm f/1.8L',
- 136 => 'Canon EF 300mm f/2.8L',
- 137 => 'Canon EF 85mm f/1.2L or Sigma or Tamron Lens', #10
- 137.1 => 'Sigma 18-50mm f/2.8-4.5 DC OS HSM', #PH
- 137.2 => 'Sigma 50-200mm f/4-5.6 DC OS HSM', #PH
- 137.3 => 'Sigma 18-250mm f/3.5-6.3 DC OS HSM', #PH
- 137.4 => 'Sigma 24-70mm f/2.8 IF EX DG HSM', #PH
- 137.5 => 'Sigma 18-125mm f/3.8-5.6 DC OS HSM', #PH
- 137.6 => 'Sigma 17-70mm f/2.8-4 DC Macro OS HSM', #http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,2819.0.html
- 137.7 => 'Sigma 17-50mm f/2.8 OS HSM', #PH (from Exiv2)
- 137.8 => 'Sigma 18-200mm f/3.5-6.3 II DC OS HSM', #PH
- 137.9 => 'Tamron AF 18-270mm f/3.5-6.3 Di II VC PZD', #(model B008)http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3090.0.html
- '137.10' => 'Sigma 8-16mm f/4.5-5.6 DC HSM', #50-Zwielicht
- '137.11' => 'Tamron SP 17-50mm f/2.8 XR Di II VC', #50 (model B005)
- '137.12' => 'Tamron SP 60mm f/2 Macro Di II', #50 (model G005)
- '137.13' => 'Sigma 10-20mm f/3.5 EX DC HSM', #Gerald Erdmann
- 138 => 'Canon EF 28-80mm f/2.8-4L', #32
- 139 => 'Canon EF 400mm f/2.8L',
- 140 => 'Canon EF 500mm f/4.5L', #32
- 141 => 'Canon EF 500mm f/4.5L',
- 142 => 'Canon EF 300mm f/2.8L IS', #15
- 143 => 'Canon EF 500mm f/4L IS', #15
- 144 => 'Canon EF 35-135mm f/4-5.6 USM', #26
- 145 => 'Canon EF 100-300mm f/4.5-5.6 USM', #32
- 146 => 'Canon EF 70-210mm f/3.5-4.5 USM', #32
- 147 => 'Canon EF 35-135mm f/4-5.6 USM', #32
- 148 => 'Canon EF 28-80mm f/3.5-5.6 USM', #32
- 149 => 'Canon EF 100mm f/2 USM', #9
- 150 => 'Canon EF 14mm f/2.8L or Sigma Lens', #10
- 150.1 => 'Sigma 20mm EX f/1.8', #4
- 150.2 => 'Sigma 30mm f/1.4 DC HSM', #15
- 150.3 => 'Sigma 24mm f/1.8 DG Macro EX', #15
- 151 => 'Canon EF 200mm f/2.8L',
- 152 => 'Canon EF 300mm f/4L IS or Sigma Lens', #15
- 152.1 => 'Sigma 12-24mm f/4.5-5.6 EX DG ASPHERICAL HSM', #15
- 152.2 => 'Sigma 14mm f/2.8 EX Aspherical HSM', #15
- 152.3 => 'Sigma 10-20mm f/4-5.6', #14
- 152.4 => 'Sigma 100-300mm f/4', # (ref Bozi)
- 153 => 'Canon EF 35-350mm f/3.5-5.6L or Sigma or Tamron Lens', #PH
- 153.1 => 'Sigma 50-500mm f/4-6.3 APO HSM EX', #15
- 153.2 => 'Tamron AF 28-300mm f/3.5-6.3 XR LD Aspherical [IF] Macro',
- 153.3 => 'Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical [IF] Macro Model A14', #15
- 153.4 => 'Tamron 18-250mm f/3.5-6.3 Di II LD Aspherical [IF] Macro', #PH
- 154 => 'Canon EF 20mm f/2.8 USM', #15
- 155 => 'Canon EF 85mm f/1.8 USM',
- 156 => 'Canon EF 28-105mm f/3.5-4.5 USM or Tamron Lens',
- 156.1 => 'Tamron SP 70-300mm f/4.0-5.6 Di VC USD', #PH (model A005)
- 160 => 'Canon EF 20-35mm f/3.5-4.5 USM or Tamron or Tokina Lens',
- 160.1 => 'Tamron AF 19-35mm f/3.5-4.5', #44
- 160.2 => 'Tokina AT-X 124 AF 12-24mm f/4 DX', #49 (not sure about specific model - PH)
- 160.3 => 'Tokina AT-X 107 AF DX 10-17mm f/3.5-4.5 Fisheye', #PH (http://osdir.com/ml/digikam-devel/2011-04/msg00275.html)
- 160.4 => 'Tokina AF 11-16mm f/2.8 AT-X Pro DX', #http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3967.0.html
- 161 => 'Canon EF 28-70mm f/2.8L or Sigma or Tamron Lens',
- 161.1 => 'Sigma 24-70mm f/2.8 EX',
- 161.2 => 'Sigma 28-70mm f/2.8 EX', #PH (http://www.breezesys.com/forum/showthread.php?t=3718)
- 161.3 => 'Tamron AF 17-50mm f/2.8 Di-II LD Aspherical', #40
- 161.4 => 'Tamron 90mm f/2.8',
- 162 => 'Canon EF 200mm f/2.8L', #32
- 163 => 'Canon EF 300mm f/4L', #32
- 164 => 'Canon EF 400mm f/5.6L', #32
- 165 => 'Canon EF 70-200mm f/2.8 L',
- 166 => 'Canon EF 70-200mm f/2.8 L + 1.4x',
- 167 => 'Canon EF 70-200mm f/2.8 L + 2x',
- 168 => 'Canon EF 28mm f/1.8 USM', #15
- 169 => 'Canon EF 17-35mm f/2.8L or Sigma Lens', #15
- 169.1 => 'Sigma 18-200mm f/3.5-6.3 DC OS', #23
- 169.2 => 'Sigma 15-30mm f/3.5-4.5 EX DG Aspherical', #4
- 169.3 => 'Sigma 18-50mm f/2.8 Macro', #26
- 169.4 => 'Sigma 50mm f/1.4 EX DG HSM', #PH
- 169.5 => 'Sigma 85mm f/1.4 EX DG HSM', #Rolando Ruzic
- 169.6 => 'Sigma 30mm f/1.4 EX DC HSM', #Rodolfo Borges
- 170 => 'Canon EF 200mm f/2.8L II', #9
- 171 => 'Canon EF 300mm f/4L', #15
- 172 => 'Canon EF 400mm f/5.6L', #32
- 173 => 'Canon EF 180mm Macro f/3.5L or Sigma Lens', #9
- 173.1 => 'Sigma 180mm EX HSM Macro f/3.5', #14
- 173.2 => 'Sigma APO Macro 150mm f/2.8 EX DG HSM', #14
- 174 => 'Canon EF 135mm f/2L or Sigma Lens', #9
- 174.1 => 'Sigma 70-200mm f/2.8 EX DG APO OS HSM', #PH (probably version II of this lens)
- 174.2 => 'Sigma 50-500mm f/4.5-6.3 APO DG OS HSM', #http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,4031.0.html
- 175 => 'Canon EF 400mm f/2.8L', #32
- 176 => 'Canon EF 24-85mm f/3.5-4.5 USM',
- 177 => 'Canon EF 300mm f/4L IS', #9
- 178 => 'Canon EF 28-135mm f/3.5-5.6 IS',
- 179 => 'Canon EF 24mm f/1.4L', #20
- 180 => 'Canon EF 35mm f/1.4L', #9
- 181 => 'Canon EF 100-400mm f/4.5-5.6L IS + 1.4x', #15
- 182 => 'Canon EF 100-400mm f/4.5-5.6L IS + 2x',
- 183 => 'Canon EF 100-400mm f/4.5-5.6L IS or Sigma Lens',
- 183.1 => 'Sigma 150mm f/2.8 EX DG OS HSM APO Macro', #50
- 184 => 'Canon EF 400mm f/2.8L + 2x', #15
- 185 => 'Canon EF 600mm f/4L IS', #32
- 186 => 'Canon EF 70-200mm f/4L', #9
- 187 => 'Canon EF 70-200mm f/4L + 1.4x', #26
- 188 => 'Canon EF 70-200mm f/4L + 2x', #PH
- 189 => 'Canon EF 70-200mm f/4L + 2.8x', #32
- 190 => 'Canon EF 100mm f/2.8 Macro',
- 191 => 'Canon EF 400mm f/4 DO IS', #9
- 193 => 'Canon EF 35-80mm f/4-5.6 USM', #32
- 194 => 'Canon EF 80-200mm f/4.5-5.6 USM', #32
- 195 => 'Canon EF 35-105mm f/4.5-5.6 USM', #32
- 196 => 'Canon EF 75-300mm f/4-5.6 USM', #15/32
- 197 => 'Canon EF 75-300mm f/4-5.6 IS USM',
- 198 => 'Canon EF 50mm f/1.4 USM', #9
- 199 => 'Canon EF 28-80mm f/3.5-5.6 USM', #32
- 200 => 'Canon EF 75-300mm f/4-5.6 USM', #32
- 201 => 'Canon EF 28-80mm f/3.5-5.6 USM', #32
- 202 => 'Canon EF 28-80mm f/3.5-5.6 USM IV',
- 208 => 'Canon EF 22-55mm f/4-5.6 USM', #32
- 209 => 'Canon EF 55-200mm f/4.5-5.6', #32
- 210 => 'Canon EF 28-90mm f/4-5.6 USM', #32
- 211 => 'Canon EF 28-200mm f/3.5-5.6 USM', #15
- 212 => 'Canon EF 28-105mm f/4-5.6 USM', #15
- 213 => 'Canon EF 90-300mm f/4.5-5.6 USM',
- 214 => 'Canon EF-S 18-55mm f/3.5-5.6 USM', #PH/34
- 215 => 'Canon EF 55-200mm f/4.5-5.6 II USM',
- 224 => 'Canon EF 70-200mm f/2.8L IS', #11
- 225 => 'Canon EF 70-200mm f/2.8L IS + 1.4x', #11
- 226 => 'Canon EF 70-200mm f/2.8L IS + 2x', #14
- 227 => 'Canon EF 70-200mm f/2.8L IS + 2.8x', #32
- 228 => 'Canon EF 28-105mm f/3.5-4.5 USM', #32
- 229 => 'Canon EF 16-35mm f/2.8L', #PH
- 230 => 'Canon EF 24-70mm f/2.8L', #9
- 231 => 'Canon EF 17-40mm f/4L',
- 232 => 'Canon EF 70-300mm f/4.5-5.6 DO IS USM', #15
- 233 => 'Canon EF 28-300mm f/3.5-5.6L IS', #PH
- 234 => 'Canon EF-S 17-85mm f4-5.6 IS USM', #19
- 235 => 'Canon EF-S 10-22mm f/3.5-4.5 USM', #15
- 236 => 'Canon EF-S 60mm f/2.8 Macro USM', #15
- 237 => 'Canon EF 24-105mm f/4L IS', #15
- 238 => 'Canon EF 70-300mm f/4-5.6 IS USM', #15
- 239 => 'Canon EF 85mm f/1.2L II', #15
- 240 => 'Canon EF-S 17-55mm f/2.8 IS USM', #15
- 241 => 'Canon EF 50mm f/1.2L', #15
- 242 => 'Canon EF 70-200mm f/4L IS', #PH
- 243 => 'Canon EF 70-200mm f/4L IS + 1.4x', #15
- 244 => 'Canon EF 70-200mm f/4L IS + 2x', #PH
- 245 => 'Canon EF 70-200mm f/4L IS + 2.8x', #32
- 246 => 'Canon EF 16-35mm f/2.8L II', #PH
- 247 => 'Canon EF 14mm f/2.8L II USM', #32
- 248 => 'Canon EF 200mm f/2L IS', #42
- 249 => 'Canon EF 800mm f/5.6L IS', #35
- 250 => 'Canon EF 24 f/1.4L II', #41
- 251 => 'Canon EF 70-200mm f/2.8L IS II USM',
- 252 => 'Canon EF 70-200mm f/2.8L IS II USM + 1.4x', #50 (1.4x Mk II)
- 253 => 'Canon EF 70-200mm f/2.8L IS II USM + 2x', #PH (NC)
- 254 => 'Canon EF 100mm f/2.8L Macro IS USM', #42
- # Note: LensType 488 (0x1e8) is reported as 232 (0xe8) in 7D CameraSettings
- 488 => 'Canon EF-S 15-85mm f/3.5-5.6 IS USM', #PH
- 489 => 'Canon EF 70-300mm f/4-5.6L IS USM', #Gerald Kapounek
- 490 => 'Canon EF 8-15mm f/4L USM', #Klaus Reinfeld
- 491 => 'Canon EF 300mm f/2.8L IS II USM', #42
- );
- # Canon model ID numbers (PH)
- %canonModelID = (
- 0x1010000 => 'PowerShot A30',
- 0x1040000 => 'PowerShot S300 / Digital IXUS 300 / IXY Digital 300',
- 0x1060000 => 'PowerShot A20',
- 0x1080000 => 'PowerShot A10',
- 0x1090000 => 'PowerShot S110 / Digital IXUS v / IXY Digital 200',
- 0x1100000 => 'PowerShot G2',
- 0x1110000 => 'PowerShot S40',
- 0x1120000 => 'PowerShot S30',
- 0x1130000 => 'PowerShot A40',
- 0x1140000 => 'EOS D30',
- 0x1150000 => 'PowerShot A100',
- 0x1160000 => 'PowerShot S200 / Digital IXUS v2 / IXY Digital 200a',
- 0x1170000 => 'PowerShot A200',
- 0x1180000 => 'PowerShot S330 / Digital IXUS 330 / IXY Digital 300a',
- 0x1190000 => 'PowerShot G3',
- 0x1210000 => 'PowerShot S45',
- 0x1230000 => 'PowerShot SD100 / Digital IXUS II / IXY Digital 30',
- 0x1240000 => 'PowerShot S230 / Digital IXUS v3 / IXY Digital 320',
- 0x1250000 => 'PowerShot A70',
- 0x1260000 => 'PowerShot A60',
- 0x1270000 => 'PowerShot S400 / Digital IXUS 400 / IXY Digital 400',
- 0x1290000 => 'PowerShot G5',
- 0x1300000 => 'PowerShot A300',
- 0x1310000 => 'PowerShot S50',
- 0x1340000 => 'PowerShot A80',
- 0x1350000 => 'PowerShot SD10 / Digital IXUS i / IXY Digital L',
- 0x1360000 => 'PowerShot S1 IS',
- 0x1370000 => 'PowerShot Pro1',
- 0x1380000 => 'PowerShot S70',
- 0x1390000 => 'PowerShot S60',
- 0x1400000 => 'PowerShot G6',
- 0x1410000 => 'PowerShot S500 / Digital IXUS 500 / IXY Digital 500',
- 0x1420000 => 'PowerShot A75',
- 0x1440000 => 'PowerShot SD110 / Digital IXUS IIs / IXY Digital 30a',
- 0x1450000 => 'PowerShot A400',
- 0x1470000 => 'PowerShot A310',
- 0x1490000 => 'PowerShot A85',
- 0x1520000 => 'PowerShot S410 / Digital IXUS 430 / IXY Digital 450',
- 0x1530000 => 'PowerShot A95',
- 0x1540000 => 'PowerShot SD300 / Digital IXUS 40 / IXY Digital 50',
- 0x1550000 => 'PowerShot SD200 / Digital IXUS 30 / IXY Digital 40',
- 0x1560000 => 'PowerShot A520',
- 0x1570000 => 'PowerShot A510',
- 0x1590000 => 'PowerShot SD20 / Digital IXUS i5 / IXY Digital L2',
- 0x1640000 => 'PowerShot S2 IS',
- 0x1650000 => 'PowerShot SD430 / Digital IXUS Wireless / IXY Digital Wireless',
- 0x1660000 => 'PowerShot SD500 / Digital IXUS 700 / IXY Digital 600',
- 0x1668000 => 'EOS D60',
- 0x1700000 => 'PowerShot SD30 / Digital IXUS i Zoom / IXY Digital L3',
- 0x1740000 => 'PowerShot A430',
- 0x1750000 => 'PowerShot A410',
- 0x1760000 => 'PowerShot S80',
- 0x1780000 => 'PowerShot A620',
- 0x1790000 => 'PowerShot A610',
- 0x1800000 => 'PowerShot SD630 / Digital IXUS 65 / IXY Digital 80',
- 0x1810000 => 'PowerShot SD450 / Digital IXUS 55 / IXY Digital 60',
- 0x1820000 => 'PowerShot TX1',
- 0x1870000 => 'PowerShot SD400 / Digital IXUS 50 / IXY Digital 55',
- 0x1880000 => 'PowerShot A420',
- 0x1890000 => 'PowerShot SD900 / Digital IXUS 900 Ti / IXY Digital 1000',
- 0x1900000 => 'PowerShot SD550 / Digital IXUS 750 / IXY Digital 700',
- 0x1920000 => 'PowerShot A700',
- 0x1940000 => 'PowerShot SD700 IS / Digital IXUS 800 IS / IXY Digital 800 IS',
- 0x1950000 => 'PowerShot S3 IS',
- 0x1960000 => 'PowerShot A540',
- 0x1970000 => 'PowerShot SD600 / Digital IXUS 60 / IXY Digital 70',
- 0x1980000 => 'PowerShot G7',
- 0x1990000 => 'PowerShot A530',
- 0x2000000 => 'PowerShot SD800 IS / Digital IXUS 850 IS / IXY Digital 900 IS',
- 0x2010000 => 'PowerShot SD40 / Digital IXUS i7 / IXY Digital L4',
- 0x2020000 => 'PowerShot A710 IS',
- 0x2030000 => 'PowerShot A640',
- 0x2040000 => 'PowerShot A630',
- 0x2090000 => 'PowerShot S5 IS',
- 0x2100000 => 'PowerShot A460',
- 0x2120000 => 'PowerShot SD850 IS / Digital IXUS 950 IS / IXY Digital 810 IS',
- 0x2130000 => 'PowerShot A570 IS',
- 0x2140000 => 'PowerShot A560',
- 0x2150000 => 'PowerShot SD750 / Digital IXUS 75 / IXY Digital 90',
- 0x2160000 => 'PowerShot SD1000 / Digital IXUS 70 / IXY Digital 10',
- 0x2180000 => 'PowerShot A550',
- 0x2190000 => 'PowerShot A450',
- 0x2230000 => 'PowerShot G9',
- 0x2240000 => 'PowerShot A650 IS',
- 0x2260000 => 'PowerShot A720 IS',
- 0x2290000 => 'PowerShot SX100 IS',
- 0x2300000 => 'PowerShot SD950 IS / Digital IXUS 960 IS / IXY Digital 2000 IS',
- 0x2310000 => 'PowerShot SD870 IS / Digital IXUS 860 IS / IXY Digital 910 IS',
- 0x2320000 => 'PowerShot SD890 IS / Digital IXUS 970 IS / IXY Digital 820 IS',
- 0x2360000 => 'PowerShot SD790 IS / Digital IXUS 90 IS / IXY Digital 95 IS',
- 0x2370000 => 'PowerShot SD770 IS / Digital IXUS 85 IS / IXY Digital 25 IS',
- 0x2380000 => 'PowerShot A590 IS',
- 0x2390000 => 'PowerShot A580',
- 0x2420000 => 'PowerShot A470',
- 0x2430000 => 'PowerShot SD1100 IS / Digital IXUS 80 IS / IXY Digital 20 IS',
- 0x2460000 => 'PowerShot SX1 IS',
- 0x2470000 => 'PowerShot SX10 IS',
- 0x2480000 => 'PowerShot A1000 IS',
- 0x2490000 => 'PowerShot G10',
- 0x2510000 => 'PowerShot A2000 IS',
- 0x2520000 => 'PowerShot SX110 IS',
- 0x2530000 => 'PowerShot SD990 IS / Digital IXUS 980 IS / IXY Digital 3000 IS',
- 0x2540000 => 'PowerShot SD880 IS / Digital IXUS 870 IS / IXY Digital 920 IS',
- 0x2550000 => 'PowerShot E1',
- 0x2560000 => 'PowerShot D10',
- 0x2570000 => 'PowerShot SD960 IS / Digital IXUS 110 IS / IXY Digital 510 IS',
- 0x2580000 => 'PowerShot A2100 IS',
- 0x2590000 => 'PowerShot A480',
- 0x2600000 => 'PowerShot SX200 IS',
- 0x2610000 => 'PowerShot SD970 IS / Digital IXUS 990 IS / IXY Digital 830 IS',
- 0x2620000 => 'PowerShot SD780 IS / Digital IXUS 100 IS / IXY Digital 210 IS',
- 0x2630000 => 'PowerShot A1100 IS',
- 0x2640000 => 'PowerShot SD1200 IS / Digital IXUS 95 IS / IXY Digital 110 IS',
- 0x2700000 => 'PowerShot G11',
- 0x2710000 => 'PowerShot SX120 IS',
- 0x2720000 => 'PowerShot S90',
- 0x2750000 => 'PowerShot SX20 IS',
- 0x2760000 => 'PowerShot SD980 IS / Digital IXUS 200 IS / IXY Digital 930 IS',
- 0x2770000 => 'PowerShot SD940 IS / Digital IXUS 120 IS / IXY Digital 220 IS',
- 0x2800000 => 'PowerShot A495',
- 0x2810000 => 'PowerShot A490',
- 0x2820000 => 'PowerShot A3100 IS / A3150 IS', # (different cameras, same ID)
- 0x2830000 => 'PowerShot A3000 IS',
- 0x2840000 => 'PowerShot SD1400 IS / IXUS 130 / IXY 400F',
- 0x2850000 => 'PowerShot SD1300 IS / IXUS 105 / IXY 200F',
- 0x2860000 => 'PowerShot SD3500 IS / IXUS 210 / IXY 10S',
- 0x2870000 => 'PowerShot SX210 IS',
- 0x2880000 => 'PowerShot SD4000 IS / IXUS 300 HS / IXY 30S',
- 0x2890000 => 'PowerShot SD4500 IS / IXUS 1000 HS / IXY 50S',
- 0x2920000 => 'PowerShot G12',
- 0x2930000 => 'PowerShot SX30 IS',
- 0x2940000 => 'PowerShot SX130 IS',
- 0x2950000 => 'PowerShot S95',
- 0x2980000 => 'PowerShot A3300 IS',
- 0x2990000 => 'PowerShot A3200 IS',
- 0x3000000 => 'PowerShot ELPH 500 HS / IXUS 310 HS / IXY 31S',
- 0x3010000 => 'PowerShot Pro90 IS',
- 0x3010001 => 'PowerShot A800',
- 0x3020000 => 'PowerShot ELPH 100 HS / IXUS 115 HS / IXY 210F',
- 0x3030000 => 'PowerShot SX230 HS',
- 0x3040000 => 'PowerShot ELPH 300 HS / IXUS 220 HS / IXY 410F',
- 0x3050000 => 'PowerShot A2200',
- 0x3060000 => 'PowerShot A1200',
- 0x3070000 => 'PowerShot SX220 HS',
- 0x3080000 => 'PowerShot G1 X',
- 0x3090000 => 'PowerShot SX150 IS',
- 0x3100000 => 'PowerShot ELPH 510 HS / IXUS 1100 HS / IXY 51S',
- 0x3110000 => 'PowerShot S100 (new)',
- 0x3130000 => 'PowerShot SX40 HS',
- 0x3120000 => 'PowerShot ELPH 310 HS / IXUS 230 HS / IXY 600F',
- 0x3140000 => 'PowerShot ELPH 500 HS / IXUS 320 HS / IXY 32S', # (duplicate PowerShot model???)
- 0x3160000 => 'PowerShot A1300',
- 0x3180000 => 'PowerShot ELPH 320 HS / IXUS 240 HS / IXY 420F',
- 0x3190000 => 'PowerShot ELPH 110 HS / IXUS 125 HS / IXY 220F',
- 0x3200000 => 'PowerShot D20',
- 0x3210000 => 'PowerShot A4000 IS',
- 0x3220000 => 'PowerShot SX260 HS',
- 0x3240000 => 'PowerShot ELPH 530 HS / IXUS 510 HS / IXY 1',
- 0x3250000 => 'PowerShot ELPH 520 HS / IXUS 500 HS / IXY 3',
- 0x3260000 => 'PowerShot A3400 IS',
- 0x3270000 => 'PowerShot A2400 IS',
- 0x3280000 => 'PowerShot A2300',
- 0x4040000 => 'PowerShot G1',
- 0x6040000 => 'PowerShot S100 / Digital IXUS / IXY Digital',
- 0x4007d673 => 'DC19/DC21/DC22',
- 0x4007d674 => 'XH A1',
- 0x4007d675 => 'HV10',
- 0x4007d676 => 'MD130/MD140/MD150/MD160/ZR850',
- 0x4007d777 => 'DC50', # (iVIS)
- 0x4007d778 => 'HV20', # (iVIS)
- 0x4007d779 => 'DC211', #29
- 0x4007d77a => 'HG10',
- 0x4007d77b => 'HR10', #29 (iVIS)
- 0x4007d77d => 'MD255/ZR950',
- 0x4007d81c => 'HF11',
- 0x4007d878 => 'HV30',
- 0x4007d87c => 'XH A1S',
- 0x4007d87e => 'DC301/DC310/DC311/DC320/DC330',
- 0x4007d87f => 'FS100',
- 0x4007d880 => 'HF10', #29 (iVIS/VIXIA)
- 0x4007d882 => 'HG20/HG21', # (VIXIA)
- 0x4007d925 => 'HF21', # (LEGRIA)
- 0x4007d926 => 'HF S11', # (LEGRIA)
- 0x4007d978 => 'HV40', # (LEGRIA)
- 0x4007d987 => 'DC410/DC411/DC420',
- 0x4007d988 => 'FS19/FS20/FS21/FS22/FS200', # (LEGRIA)
- 0x4007d989 => 'HF20/HF200', # (LEGRIA)
- 0x4007d98a => 'HF S10/S100', # (LEGRIA/VIXIA)
- 0x4007da8e => 'HF R10/R16/R17/R18/R100/R106', # (LEGRIA/VIXIA)
- 0x4007da8f => 'HF M30/M31/M36/M300/M306', # (LEGRIA/VIXIA)
- 0x4007da90 => 'HF S20/S21/S200', # (LEGRIA/VIXIA)
- 0x4007da92 => 'FS31/FS36/FS37/FS300/FS305/FS306/FS307',
- # NOTE: some pre-production models may have a model name of
- # "Canon EOS Kxxx", where "xxx" is the last 3 digits of the model ID below.
- # This has been observed for the 1DSmkIII/K215 and 400D/K236.
- 0x80000001 => 'EOS-1D',
- 0x80000167 => 'EOS-1DS',
- 0x80000168 => 'EOS 10D',
- 0x80000169 => 'EOS-1D Mark III',
- 0x80000170 => 'EOS Digital Rebel / 300D / Kiss Digital',
- 0x80000174 => 'EOS-1D Mark II',
- 0x80000175 => 'EOS 20D',
- 0x80000176 => 'EOS Digital Rebel XSi / 450D / Kiss X2',
- 0x80000188 => 'EOS-1Ds Mark II',
- 0x80000189 => 'EOS Digital Rebel XT / 350D / Kiss Digital N',
- 0x80000190 => 'EOS 40D',
- 0x80000213 => 'EOS 5D',
- 0x80000215 => 'EOS-1Ds Mark III',
- 0x80000218 => 'EOS 5D Mark II',
- 0x80000219 => 'WFT-E1',
- 0x80000232 => 'EOS-1D Mark II N',
- 0x80000234 => 'EOS 30D',
- 0x80000236 => 'EOS Digital Rebel XTi / 400D / Kiss Digital X',
- 0x80000241 => 'WFT-E2',
- 0x80000246 => 'WFT-E3',
- 0x80000250 => 'EOS 7D',
- 0x80000252 => 'EOS Rebel T1i / 500D / Kiss X3',
- 0x80000254 => 'EOS Rebel XS / 1000D / Kiss F',
- 0x80000261 => 'EOS 50D',
- 0x80000269 => 'EOS-1D X',
- 0x80000270 => 'EOS Rebel T2i / 550D / Kiss X4',
- 0x80000271 => 'WFT-E4',
- 0x80000273 => 'WFT-E5',
- 0x80000281 => 'EOS-1D Mark IV',
- 0x80000285 => 'EOS 5D Mark III',
- 0x80000286 => 'EOS Rebel T3i / 600D / Kiss X5',
- 0x80000287 => 'EOS 60D',
- 0x80000288 => 'EOS Rebel T3 / 1100D / Kiss X50',
- 0x80000297 => 'WFT-E2 II',
- 0x80000298 => 'WFT-E4 II',
- );
- my %canonQuality = (
- 1 => 'Economy',
- 2 => 'Normal',
- 3 => 'Fine',
- 4 => 'RAW',
- 5 => 'Superfine',
- 130 => 'Normal Movie', #22
- );
- my %canonImageSize = (
- 0 => 'Large',
- 1 => 'Medium',
- 2 => 'Small',
- 5 => 'Medium 1', #PH
- 6 => 'Medium 2', #PH
- 7 => 'Medium 3', #PH
- 8 => 'Postcard', #PH (SD200 1600x1200 with DateStamp option)
- 9 => 'Widescreen', #PH (SD900 3648x2048), 22 (HFS200 3264x1840)
- 10 => 'Medium Widescreen', #22 (HFS200 1920x1080)
- 14 => 'Small 1', #PH
- 15 => 'Small 2', #PH
- 16 => 'Small 3', #PH
- 128 => '640x480 Movie', #PH (7D 60fps)
- 129 => 'Medium Movie', #22
- 130 => 'Small Movie', #22
- 137 => '1280x720 Movie', #PH (S95 24fps; D60 50fps)
- 142 => '1920x1080 Movie', #PH (D60 25fps)
- );
- my %canonWhiteBalance = (
- # -1='Click", -2='Pasted' ?? - PH
- 0 => 'Auto',
- 1 => 'Daylight',
- 2 => 'Cloudy',
- 3 => 'Tungsten',
- 4 => 'Fluorescent',
- 5 => 'Flash',
- 6 => 'Custom',
- 7 => 'Black & White',
- 8 => 'Shade',
- 9 => 'Manual Temperature (Kelvin)',
- 10 => 'PC Set1', #PH
- 11 => 'PC Set2', #PH
- 12 => 'PC Set3', #PH
- 14 => 'Daylight Fluorescent', #3
- 15 => 'Custom 1', #PH
- 16 => 'Custom 2', #PH
- 17 => 'Underwater', #3
- 18 => 'Custom 3', #PH
- 19 => 'Custom 4', #PH
- 20 => 'PC Set4', #PH
- 21 => 'PC Set5', #PH
- # 22 - Custom 2?
- # 23 - Custom 3?
- # 30 - Click White Balance?
- # 31 - Shot Settings?
- # 137 - Tungsten?
- # 138 - White Fluorescent?
- # 139 - Fluorescent H?
- # 140 - Manual?
- );
- # picture styles used by the 5D
- # (styles 0x4X may be downloaded from Canon)
- # (called "ColorMatrix" in 1D owner manual)
- my %pictureStyles = ( #12
- 0x00 => 'None', #PH
- 0x01 => 'Standard', #15
- 0x02 => 'Portrait', #15
- 0x03 => 'High Saturation', #15
- 0x04 => 'Adobe RGB', #15
- 0x05 => 'Low Saturation', #15
- 0x06 => 'CM Set 1', #PH
- 0x07 => 'CM Set 2', #PH
- # "ColorMatrix" values end here
- 0x21 => 'User Def. 1',
- 0x22 => 'User Def. 2',
- 0x23 => 'User Def. 3',
- # "External" styles currently available from Canon are Nostalgia, Clear,
- # Twilight and Emerald. The "User Def" styles change to these "External"
- # codes when these styles are installed in the camera
- 0x41 => 'PC 1', #PH
- 0x42 => 'PC 2', #PH
- 0x43 => 'PC 3', #PH
- 0x81 => 'Standard',
- 0x82 => 'Portrait',
- 0x83 => 'Landscape',
- 0x84 => 'Neutral',
- 0x85 => 'Faithful',
- 0x86 => 'Monochrome',
- 0x87 => 'Auto', #PH
- );
- my %userDefStyles = ( #12/48
- Notes => q{
- Base style for user-defined picture styles. PC values represent external
- picture styles which may be downloaded from Canon and installed in the
- camera.
- },
- 0x41 => 'PC 1',
- 0x42 => 'PC 2',
- 0x43 => 'PC 3',
- 0x81 => 'Standard',
- 0x82 => 'Portrait',
- 0x83 => 'Landscape',
- 0x84 => 'Neutral',
- 0x85 => 'Faithful',
- 0x86 => 'Monochrome',
- 0x87 => 'Auto', #PH
- );
- # picture style tag information for CameraInfo550D
- my %psConv = (
- -559038737 => 'n/a', # = 0xdeadbeef ! LOL
- OTHER => sub { return shift },
- );
- my %psInfo = (
- Format => 'int32s',
- PrintHex => 1,
- PrintConv => \%psConv,
- );
- # ValueConv that makes long values binary type
- my %longBin = (
- ValueConv => 'length($val) > 64 ? \$val : $val',
- ValueConvInv => '$val',
- );
- # conversions, etc for CameraColorCalibration tags
- my %cameraColorCalibration = (
- Format => 'int16s[4]',
- Unknown => 1,
- PrintConv => 'sprintf("%4d %4d %4d (%dK)", split(" ",$val))',
- PrintConvInv => '$val=~s/\s+/ /g; $val=~tr/()K//d; $val',
- );
- # conversions, etc for PowerShot CameraColorCalibration tags
- my %cameraColorCalibration2 = (
- Format => 'int16s[5]',
- Unknown => 1,
- PrintConv => 'sprintf("%4d %4d %4d %4d (%dK)", split(" ",$val))',
- PrintConvInv => '$val=~s/\s+/ /g; $val=~tr/()K//d; $val',
- );
- # conversions, etc for byte-swapped FocusDistance tags
- my %focusDistanceByteSwap = (
- # this is very odd (little-endian number on odd boundary),
- # but it does seem to work better with my sample images - PH
- Format => 'int16uRev',
- ValueConv => '$val / 100',
- ValueConvInv => '$val * 100',
- PrintConv => '$val > 655.345 ? "inf" : "$val m"',
- PrintConvInv => '$val =~ s/ ?m$//; IsFloat($val) ? $val : 655.35',
- );
- # common attributes for writable BinaryData directories
- my %binaryDataAttrs = (
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
- WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
- CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
- WRITABLE => 1,
- );
- #------------------------------------------------------------------------------
- # Canon EXIF Maker Notes
- %Image::ExifTool::Canon::Main = (
- WRITE_PROC => \&WriteCanon,
- CHECK_PROC => \&Image::ExifTool::Exif::CheckExif,
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- 0x1 => {
- Name => 'CanonCameraSettings',
- SubDirectory => {
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::Canon::CameraSettings',
- },
- },
- 0x2 => {
- Name => 'CanonFocalLength',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::FocalLength',
- },
- },
- 0x3 => {
- Name => 'CanonFlashInfo',
- Unknown => 1,
- },
- 0x4 => {
- Name => 'CanonShotInfo',
- SubDirectory => {
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::Canon::ShotInfo',
- },
- },
- 0x5 => {
- Name => 'CanonPanorama',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::Panorama',
- },
- },
- 0x6 => {
- Name => 'CanonImageType',
- Writable => 'string',
- Groups => { 2 => 'Image' },
- },
- 0x7 => {
- Name => 'CanonFirmwareVersion',
- Writable => 'string',
- },
- 0x8 => {
- Name => 'FileNumber',
- Writable => 'int32u',
- Groups => { 2 => 'Image' },
- PrintConv => '$_=$val,s/(\d+)(\d{4})/$1-$2/,$_',
- PrintConvInv => '$val=~s/-//g;$val',
- },
- 0x9 => {
- Name => 'OwnerName',
- Writable => 'string',
- # pad to 32 bytes (including null terminator which will be added)
- # to avoid bug which crashes DPP if length is 4 bytes
- ValueConvInv => '$val .= "\0" x (31 - length $val) if length $val < 31; $val',
- },
- 0xa => {
- Name => 'UnknownD30',
- SubDirectory => {
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::Canon::UnknownD30',
- },
- },
- 0xc => [ # square brackets for a conditional list
- {
- # D30
- Name => 'SerialNumber',
- Condition => '$$self{Model} =~ /EOS D30\b/',
- Writable => 'int32u',
- PrintConv => 'sprintf("%.4x%.5d",$val>>16,$val&0xffff)',
- PrintConvInv => '$val=~/(.*)-?(\d{5})$/ ? (hex($1)<<16)+$2 : undef',
- },
- {
- # serial number of 1D/1Ds/1D Mark II/1Ds Mark II is usually
- # displayed w/o leeding zeros (ref 7) (1D uses 6 digits - PH)
- Name => 'SerialNumber',
- Condition => '$$self{Model} =~ /EOS-1D/',
- Writable => 'int32u',
- PrintConv => 'sprintf("%.6u",$val)',
- PrintConvInv => '$val',
- },
- {
- # all other models (D60,300D,350D,REBEL,10D,20D,etc)
- Name => 'SerialNumber',
- Writable => 'int32u',
- PrintConv => 'sprintf("%.10u",$val)',
- PrintConvInv => '$val',
- },
- ],
- 0xd => [
- {
- Name => 'CanonCameraInfo1D',
- # (save size of this record as "CameraInfoCount" for later tests)
- Condition => '($$self{CameraInfoCount} = $count) and $$self{Model} =~ /\b1DS?$/',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::CameraInfo1D',
- },
- },
- {
- Name => 'CanonCameraInfo1DmkII',
- Condition => '$$self{Model} =~ /\b1Ds? Mark II$/',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::CameraInfo1DmkII',
- },
- },
- {
- Name => 'CanonCameraInfo1DmkIIN',
- Condition => '$$self{Model} =~ /\b1Ds? Mark II N$/',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::CameraInfo1DmkIIN',
- },
- },
- {
- Name => 'CanonCameraInfo1DmkIII',
- Condition => '$$self{Model} =~ /\b1Ds? Mark III$/',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::CameraInfo1DmkIII',
- },
- },
- {
- Name => 'CanonCameraInfo1DmkIV',
- Condition => '$$self{Model} =~ /\b1D Mark IV$/',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::CameraInfo1DmkIV',
- },
- },
- {
- Name => 'CanonCameraInfo5D',
- Condition => '$$self{Model} =~ /EOS 5D$/',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::CameraInfo5D',
- },
- },
- {
- Name => 'CanonCameraInfo5DmkII',
- Condition => '$$self{Model} =~ /EOS 5D Mark II$/',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::CameraInfo5DmkII',
- },
- },
- {
- Name => 'CanonCameraInfo7D',
- Condition => '$$self{Model} =~ /EOS 7D$/',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::CameraInfo7D',
- },
- },
- {
- Name => 'CanonCameraInfo40D',
- Condition => '$$self{Model} =~ /EOS 40D$/',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::CameraInfo40D',
- },
- },
- {
- Name => 'CanonCameraInfo50D',
- Condition => '$$self{Model} =~ /EOS 50D$/',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::CameraInfo50D',
- },
- },
- {
- Name => 'CanonCameraInfo60D',
- Condition => '$$self{Model} =~ /EOS 60D$/',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::CameraInfo60D',
- },
- },
- {
- Name => 'CanonCameraInfo450D',
- Condition => '$$self{Model} =~ /\b(450D|REBEL XSi|Kiss X2)\b/',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::CameraInfo450D',
- },
- },
- {
- Name => 'CanonCameraInfo500D',
- Condition => '$$self{Model} =~ /\b(500D|REBEL T1i|Kiss X3)\b/',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::CameraInfo500D',
- },
- },
- {
- Name => 'CanonCameraInfo550D',
- Condition => '$$self{Model} =~ /\b(550D|REBEL T2i|Kiss X4)\b/',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::CameraInfo550D',
- },
- },
- {
- Name => 'CanonCameraInfo600D',
- Condition => '$$self{Model} =~ /\b(600D|REBEL T3i|Kiss X5)\b/',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::CameraInfo600D',
- },
- },
- {
- Name => 'CanonCameraInfo1000D',
- Condition => '$$self{Model} =~ /\b(1000D|REBEL XS|Kiss F)\b/',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::CameraInfo1000D',
- },
- },
- {
- Name => 'CanonCameraInfo1100D',
- Condition => '$$self{Model} =~ /\b(1100D|REBEL T3|Kiss X50)\b/',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::CameraInfo600D',
- },
- },
- {
- Name => 'CanonCameraInfoPowerShot',
- # valid if format is int32u[138] or int32u[148]
- Condition => '$format eq "int32u" and ($count == 138 or $count == 148)',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::CameraInfoPowerShot',
- },
- },
- {
- Name => 'CanonCameraInfoPowerShot2',
- # valid if format is int32u[162], int32u[167], int32u[171] or int32u[264]
- Condition => q{
- $format eq "int32u" and ($count == 156 or $count == 162 or
- $count == 167 or $count == 171 or $count == 264)
- },
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::CameraInfoPowerShot2',
- },
- },
- {
- Name => 'CanonCameraInfoUnknown32',
- Condition => '$format =~ /^int32/',
- # (counts of 72, 85, 86, 93, 94, 96, 104) - PH
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::CameraInfoUnknown32',
- },
- },
- {
- Name => 'CanonCameraInfoUnknown16',
- Condition => '$format =~ /^int16/',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::CameraInfoUnknown16',
- },
- },
- {
- Name => 'CanonCameraInfoUnknown',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::CameraInfoUnknown',
- },
- },
- ],
- 0xe => {
- Name => 'CanonFileLength',
- Writable => 'int32u',
- Groups => { 2 => 'Image' },
- },
- 0xf => [
- { # used by 1DmkII, 1DSmkII and 1DmkIIN
- Name => 'CustomFunctions1D',
- Condition => '$$self{Model} =~ /EOS-1D/',
- SubDirectory => {
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::CanonCustom::Functions1D',
- },
- },
- {
- Name => 'CustomFunctions5D',
- Condition => '$$self{Model} =~ /EOS 5D/',
- SubDirectory => {
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::CanonCustom::Functions5D',
- },
- },
- {
- Name => 'CustomFunctions10D',
- Condition => '$$self{Model} =~ /EOS 10D/',
- SubDirectory => {
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::CanonCustom::Functions10D',
- },
- },
- {
- Name => 'CustomFunctions20D',
- Condition => '$$self{Model} =~ /EOS 20D/',
- SubDirectory => {
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::CanonCustom::Functions20D',
- },
- },
- {
- Name => 'CustomFunctions30D',
- Condition => '$$self{Model} =~ /EOS 30D/',
- SubDirectory => {
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::CanonCustom::Functions30D',
- },
- },
- {
- Name => 'CustomFunctions350D',
- Condition => '$$self{Model} =~ /\b(350D|REBEL XT|Kiss Digital N)\b/',
- SubDirectory => {
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::CanonCustom::Functions350D',
- },
- },
- {
- Name => 'CustomFunctions400D',
- Condition => '$$self{Model} =~ /\b(400D|REBEL XTi|Kiss Digital X|K236)\b/',
- SubDirectory => {
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::CanonCustom::Functions400D',
- },
- },
- {
- Name => 'CustomFunctionsD30',
- Condition => '$$self{Model} =~ /EOS D30\b/',
- SubDirectory => {
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::CanonCustom::FunctionsD30',
- },
- },
- {
- Name => 'CustomFunctionsD60',
- Condition => '$$self{Model} =~ /EOS D60\b/',
- SubDirectory => {
- # the stored size in the D60 apparently doesn't include the size word:
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size-2,$size)',
- # (D60 custom functions are basically the same as D30)
- TagTable => 'Image::ExifTool::CanonCustom::FunctionsD30',
- },
- },
- {
- Name => 'CustomFunctionsUnknown',
- SubDirectory => {
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::CanonCustom::FuncsUnknown',
- },
- },
- ],
- 0x10 => { #PH
- Name => 'CanonModelID',
- Writable => 'int32u',
- PrintHex => 1,
- SeparateTable => 1,
- PrintConv => \%canonModelID,
- },
- 0x11 => { #PH
- Name => 'MovieInfo',
- SubDirectory => {
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::Canon::MovieInfo',
- },
- },
- 0x12 => {
- Name => 'CanonAFInfo',
- # not really a condition -- just need to store the count for later
- Condition => '$$self{AFInfoCount} = $count',
- SubDirectory => {
- # this record does not begin with a length word, so it
- # has to be validated differently
- Validate => 'Image::ExifTool::Canon::ValidateAFInfo($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::Canon::AFInfo',
- },
- },
- 0x13 => { #PH
- Name => 'ThumbnailImageValidArea',
- # left,right,top,bottom edges of image in thumbnail, or all zeros for full frame
- Notes => 'all zeros for full frame',
- Writable => 'int16u',
- Count => 4,
- },
- 0x15 => { #PH
- # display format for serial number
- Name => 'SerialNumberFormat',
- Writable => 'int32u',
- PrintHex => 1,
- PrintConv => {
- 0x90000000 => 'Format 1',
- 0xa0000000 => 'Format 2',
- },
- },
- 0x1a => { #15
- Name => 'SuperMacro',
- Writable => 'int16u',
- PrintConv => {
- 0 => 'Off',
- 1 => 'On (1)',
- 2 => 'On (2)',
- },
- },
- 0x1c => { #PH (A570IS)
- Name => 'DateStampMode',
- Writable => 'int16u',
- Notes => 'used only in postcard mode',
- PrintConv => {
- 0 => 'Off',
- 1 => 'Date',
- 2 => 'Date & Time',
- },
- },
- 0x1d => { #PH
- Name => 'MyColors',
- SubDirectory => {
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::Canon::MyColors',
- },
- },
- 0x1e => { #PH
- Name => 'FirmwareRevision',
- Writable => 'int32u',
- # as a hex number: 0xAVVVRR00, where (a bit of guessing here...)
- # A = 'a' for alpha, 'b' for beta?
- # V = version? (100,101 for normal releases, 100,110,120,130,170 for alpha/beta)
- # R = revision? (01-07, except 00 for alpha/beta releases)
- PrintConv => q{
- my $rev = sprintf("%.8x", $val);
- my ($rel, $v1, $v2, $r1, $r2) = ($rev =~ /^(.)(.)(..)0?(.+)(..)$/);
- my %r = ( a => 'Alpha ', b => 'Beta ', '0' => '' );
- $rel = defined $r{$rel} ? $r{$rel} : "Unknown($rel) ";
- return "$rel$v1.$v2 rev $r1.$r2",
- },
- PrintConvInv => q{
- $_=$val; s/Alpha ?/a/i; s/Beta ?/b/i;
- s/Unknown ?\((.)\)/$1/i; s/ ?rev ?(.)\./0$1/; s/ ?rev ?//;
- tr/a-fA-F0-9//dc; return hex $_;
- },
- },
- # 0x1f - used for red-eye-corrected images - PH (A570IS)
- # 0x22 - values 1 and 2 are 2 and 1 for flash pics, 0 otherwise - PH (A570IS)
- 0x23 => { #31
- Name => 'Categories',
- Writab…