/Image-ExifTool-8.90/lib/Image/ExifTool/Canon.pm
Perl | 7148 lines | 6468 code | 115 blank | 565 comment | 145 complexity | 5bdb43d01f1630302f42e83d1fb1995e MD5 | raw 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',
- Writable => 'int32u',
- Format => 'int32u', # (necessary to perform conversion for Condition)
- Notes => '2 values: 1. always 8, 2. Categories',
- Count => '2',
- Condition => '$$valPt =~ /^\x08\0\0\0/',
- ValueConv => '$val =~ s/^8 //; $val',
- ValueConvInv => '"8 $val"',
- PrintConvColumns => 2,
- PrintConv => { BITMASK => {
- 0 => 'People',
- 1 => 'Scenery',
- 2 => 'Events',
- 3 => 'User 1',
- 4 => 'User 2',
- 5 => 'User 3',
- 6 => 'To Do',
- } },
- },
- 0x24 => { #PH
- Name => 'FaceDetect1',
- SubDirectory => {
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::Canon::FaceDetect1',
- },
- },
- 0x25 => { #PH
- Name => 'FaceDetect2',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::FaceDetect2',
- },
- },
- 0x26 => { #PH (A570IS,1DmkIII)
- Name => 'CanonAFInfo2',
- Condition => '$$valPt !~ /^\0\0\0\0/', # (data may be all zeros in thumbnail of 60D MOV video)
- SubDirectory => {
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::Canon::AFInfo2',
- },
- },
- # 0x27 - value 1 is 1 for high ISO pictures, 0 otherwise
- # value 4 is 9 for Flexizone and FaceDetect AF, 1 for Centre AF, 0 otherwise (SX10IS)
- 0x28 => { #JD
- # bytes 0-1=sequence number (encrypted), 2-5=date/time (encrypted) (ref JD)
- Name => 'ImageUniqueID',
- Format => 'undef',
- Writable => 'int8u',
- Groups => { 2 => 'Image' },
- RawConv => '$val eq "\0" x 16 ? undef : $val',
- ValueConv => 'unpack("H*", $val)',
- ValueConvInv => 'pack("H*", $val)',
- },
- # 0x2d - changes with categories (ref 31)
- # 0x44 - ShootInfo
- # 0x62 - UserSetting
- 0x81 => { #13
- Name => 'RawDataOffset',
- # (can't yet write 1D raw files)
- # Writable => 'int32u',
- # Protected => 2,
- },
- 0x83 => { #PH
- Name => 'OriginalDecisionDataOffset',
- Writable => 'int32u',
- OffsetPair => 1, # (just used as a flag, since this tag has no pair)
- # this is an offset to the original decision data block
- # (offset relative to start of file in JPEG images, but NOT DNG images!)
- IsOffset => '$val and $$exifTool{FILE_TYPE} ne "JPEG"',
- Protected => 2,
- DataTag => 'OriginalDecisionData',
- },
- 0x90 => { # used by 1D and 1Ds
- Name => 'CustomFunctions1D',
- SubDirectory => {
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::CanonCustom::Functions1D',
- },
- },
- 0x91 => { #PH
- Name => 'PersonalFunctions',
- SubDirectory => {
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::CanonCustom::PersonalFuncs',
- },
- },
- 0x92 => { #PH
- Name => 'PersonalFunctionValues',
- SubDirectory => {
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::CanonCustom::PersonalFuncValues',
- },
- },
- 0x93 => {
- Name => 'CanonFileInfo', # (ShootInfoEx)
- SubDirectory => {
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::Canon::FileInfo',
- },
- },
- 0x94 => { #PH
- # AF points for 1D (45 points in 5 rows)
- Name => 'AFPointsInFocus1D',
- Notes => 'EOS 1D -- 5 rows: A1-7, B1-10, C1-11, D1-10, E1-7, center point is C6',
- PrintConv => 'Image::ExifTool::Canon::PrintAFPoints1D($val)',
- },
- 0x95 => { #PH (observed in 5D sample image)
- Name => 'LensModel',
- Writable => 'string',
- },
- 0x96 => [ #PH
- {
- Name => 'SerialInfo',
- Condition => '$$self{Model} =~ /EOS 5D/',
- SubDirectory => { TagTable => 'Image::ExifTool::Canon::SerialInfo' },
- },
- {
- Name => 'InternalSerialNumber',
- Writable => 'string',
- # remove trailing 0xff's if they exist (Kiss X3)
- ValueConv => '$val=~s/\xff+$//; $val',
- ValueConvInv => '$val',
- },
- ],
- 0x97 => { #PH
- Name => 'DustRemovalData',
- Writable => 'undef',
- Flags => [ 'Binary', 'Protected' ],
- # some interesting stuff is stored in here (maybe also InternalSerialNumber)...
- # 0x00: Version
- # 0x01: LensInfo
- # 0x02: AVValue
- # 0x03: POValue
- # 0x04: DustCount
- # 0x06: FocalLength
- # 0x08: LensID
- # 0x0a: Width
- # 0x0c: Height
- # 0x0e: RAW_Width
- # 0x10: RAW_Height
- # 0x12: PixelPitch [um]
- # 0x14: LpfDistance [mm]
- # 0x16: TopOffset
- # 0x17: BottomOffset
- # 0x18: LeftOffset
- # 0x19: RightOffset
- # 0x1a: Year
- # 0x1b: Month
- # 0x1c: Day
- # 0x1d: Hour
- # 0x1e: Minutes
- # 0x1f: BrightDiff
- },
- 0x98 => { #PH
- Name => 'CropInfo',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::CropInfo',
- },
- },
- 0x99 => { #PH (EOS 1D Mark III, 40D, etc)
- Name => 'CustomFunctions2',
- SubDirectory => {
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::CanonCustom::Functions2',
- },
- },
- 0x9a => { #PH
- Name => 'AspectInfo',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::AspectInfo',
- },
- },
- 0xa0 => {
- Name => 'ProcessingInfo',
- SubDirectory => {
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::Canon::Processing',
- },
- },
- 0xa1 => { Name => 'ToneCurveTable', %longBin }, #PH
- 0xa2 => { Name => 'SharpnessTable', %longBin }, #PH
- 0xa3 => { Name => 'SharpnessFreqTable', %longBin }, #PH
- 0xa4 => { Name => 'WhiteBalanceTable', %longBin }, #PH
- 0xa9 => {
- Name => 'ColorBalance',
- SubDirectory => {
- # this offset is necessary because the table is interpreted as short rationals
- # (4 bytes long) but the first entry is 2 bytes into the table.
- Start => '$valuePtr + 2',
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart-2,$size+2)',
- TagTable => 'Image::ExifTool::Canon::ColorBalance',
- },
- },
- 0xaa => {
- Name => 'MeasuredColor',
- SubDirectory => {
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::Canon::MeasuredColor',
- },
- },
- 0xae => {
- Name => 'ColorTemperature',
- Writable => 'int16u',
- },
- 0xb0 => { #PH
- Name => 'CanonFlags',
- SubDirectory => {
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::Canon::Flags',
- },
- },
- 0xb1 => { #PH
- Name => 'ModifiedInfo',
- SubDirectory => {
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::Canon::ModifiedInfo',
- },
- },
- 0xb2 => { Name => 'ToneCurveMatching', %longBin }, #PH
- 0xb3 => { Name => 'WhiteBalanceMatching', %longBin }, #PH
- 0xb4 => { #PH
- Name => 'ColorSpace',
- Writable => 'int16u',
- PrintConv => {
- 1 => 'sRGB',
- 2 => 'Adobe RGB',
- },
- },
- 0xb6 => {
- Name => 'PreviewImageInfo',
- SubDirectory => {
- # Note: the first word of this block gives the correct block size in bytes, but
- # the size is wrong by a factor of 2 in the IFD, so we must account for this
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size/2)',
- TagTable => 'Image::ExifTool::Canon::PreviewImageInfo',
- },
- },
- 0xd0 => { #PH
- Name => 'VRDOffset',
- Writable => 'int32u',
- OffsetPair => 1, # (just used as a flag, since this tag has no pair)
- Protected => 2,
- DataTag => 'CanonVRD',
- Notes => 'offset of VRD "recipe data" if it exists',
- },
- 0xe0 => { #12
- Name => 'SensorInfo',
- SubDirectory => {
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::Canon::SensorInfo',
- },
- },
- 0x4001 => [ #13
- { # (int16u[582]) - 20D and 350D
- Condition => '$count == 582',
- Name => 'ColorData1', # (Canon: WBPacket)
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::ColorData1',
- },
- },
- { # (int16u[653]) - 1DmkII and 1DSmkII
- Condition => '$count == 653',
- Name => 'ColorData2',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::ColorData2',
- },
- },
- { # (int16u[796]) - 1DmkIIN, 5D, 30D, 400D
- Condition => '$count == 796',
- Name => 'ColorData3',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::ColorData3',
- },
- },
- { # (int16u[692|674|702|1227|1250|1251|1337])
- # 40D (692), 1DmkIII (674), 1DSmkIII (702), 450D/1000D (1227)
- # 50D/5DmkII (1250), 500D/7D_pre-prod/1DmkIV_pre-prod (1251),
- # 1DmkIV/7D/550D_pre-prod (1337), 550D (1338), 1100D (1346)
- Condition => q{
- $count == 692 or $count == 674 or $count == 702 or
- $count == 1227 or $count == 1250 or $count == 1251 or
- $count == 1337 or $count == 1338 or $count == 1346
- },
- Name => 'ColorData4',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::ColorData4',
- },
- },
- { # (int16u[5120]) - G10
- Condition => '$count == 5120',
- Name => 'ColorData5',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::ColorData5',
- },
- },
- { # (int16u[1273]) - 600D
- Condition => '$count == 1273',
- Name => 'ColorData6',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::ColorData6',
- },
- },
- {
- Name => 'ColorDataUnknown',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::ColorDataUnknown',
- },
- },
- ],
- 0x4002 => { #PH
- # unknown data block in some JPEG and CR2 images
- # (5kB for most models, but 22kb for 5D and 30D)
- Name => 'CRWParam',
- Format => 'undef',
- Flags => [ 'Unknown', 'Binary' ],
- },
- 0x4003 => { #PH
- Name => 'ColorInfo',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::ColorInfo',
- },
- },
- 0x4005 => { #PH
- Name => 'Flavor',
- Notes => 'unknown 49kB block, not copied to JPEG images',
- # 'Drop' because not found in JPEG images (too large for APP1 anyway)
- Flags => [ 'Unknown', 'Binary', 'Drop' ],
- },
- 0x4008 => { #PH guess (1DmkIII)
- Name => 'BlackLevel', # (Canon: BasePictStyleOfUser)
- Unknown => 1,
- },
- 0x4010 => { #http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,2933.0.html
- Name => 'CustomPictureStyleFileName', # (Canon: PictStyleCaption)
- Writable => 'string',
- },
- 0x4013 => { #PH
- Name => 'AFMicroAdj',
- SubDirectory => {
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::Canon::AFMicroAdj',
- },
- },
- # 0x4014 (similar to 0x83?)
- 0x4015 => {
- Name => 'VignettingCorr', # (Canon: LensPacket)
- Condition => '$$valPt !~ /^\0\0\0\0/', # (data may be all zeros for 60D)
- SubDirectory => {
- # (the size word is at byte 2 in this structure)
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart+2,$size)',
- TagTable => 'Image::ExifTool::Canon::VignettingCorr',
- },
- },
- 0x4016 => {
- Name => 'VignettingCorr2', # (Canon: ImageCorrectActual)
- SubDirectory => {
- # (the size word is actually 4 bytes, but it doesn't matter if little-endian)
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::Canon::VignettingCorr2',
- },
- },
- 0x4018 => { #PH
- Name => 'LightingOpt', # (Canon: ImageCorrect)
- SubDirectory => {
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::Canon::LightingOpt',
- }
- },
- 0x4019 => { #20
- Name => 'LensInfo',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::LensInfo',
- }
- },
- 0x4020 => { #PH
- Name => 'AmbienceInfo',
- Condition => '$$valPt !~ /^\0\0\0\0/', # (data may be all zeros for 60D)
- SubDirectory => {
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::Canon::Ambience',
- }
- },
- 0x4024 => { #PH
- Name => 'FilterInfo',
- SubDirectory => {
- Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
- TagTable => 'Image::ExifTool::Canon::FilterInfo',
- }
- },
- );
- #..............................................................................
- # Canon camera settings (MakerNotes tag 0x01)
- # BinaryData (keys are indices into the int16s array)
- %Image::ExifTool::Canon::CameraSettings = (
- %binaryDataAttrs,
- FORMAT => 'int16s',
- FIRST_ENTRY => 1,
- DATAMEMBER => [ 22, 25 ], # necessary for writing
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- 1 => {
- Name => 'MacroMode',
- PrintConv => {
- 1 => 'Macro',
- 2 => 'Normal',
- },
- },
- 2 => {
- Name => 'SelfTimer',
- # Custom timer mode if bit 0x4000 is set - PH (A570IS)
- PrintConv => q{
- return 'Off' unless $val;
- return (($val&0xfff) / 10) . ' s' . ($val & 0x4000 ? ', Custom' : '');
- },
- PrintConvInv => q{
- return 0 if $val =~ /^Off/i;
- $val =~ s/\s*s(ec)?\b//i;
- $val =~ s/,?\s*Custom$//i ? ($val*10) | 0x4000 : $val*10;
- },
- },
- 3 => {
- Name => 'Quality',
- PrintConv => \%canonQuality,
- },
- 4 => {
- Name => 'CanonFlashMode',
- PrintConv => {
- 0 => 'Off',
- 1 => 'Auto',
- 2 => 'On',
- 3 => 'Red-eye reduction',
- 4 => 'Slow-sync',
- 5 => 'Red-eye reduction (Auto)',
- 6 => 'Red-eye reduction (On)',
- 16 => 'External flash', # not set in D30 or 300D
- },
- },
- 5 => {
- Name => 'ContinuousDrive',
- PrintConv => {
- 0 => 'Single',
- 1 => 'Continuous',
- 2 => 'Movie', #PH
- 3 => 'Continuous, Speed Priority', #PH
- 4 => 'Continuous, Low', #PH
- 5 => 'Continuous, High', #PH
- 6 => 'Silent Single', #PH
- # 11 - seen for SX260
- # 32-34 - Self-timer?
- },
- },
- 7 => {
- Name => 'FocusMode',
- PrintConv => {
- 0 => 'One-shot AF',
- 1 => 'AI Servo AF',
- 2 => 'AI Focus AF',
- 3 => 'Manual Focus (3)',
- 4 => 'Single',
- 5 => 'Continuous',
- 6 => 'Manual Focus (6)',
- 16 => 'Pan Focus', #PH
- # 137 - Single?
- },
- },
- 9 => { #PH
- Name => 'RecordMode',
- RawConv => '$val==-1 ? undef : $val', #22
- PrintConv => {
- 1 => 'JPEG',
- 2 => 'CRW+THM', # (300D,etc)
- 3 => 'AVI+THM', # (30D)
- 4 => 'TIF', # +THM? (1Ds) (unconfirmed)
- 5 => 'TIF+JPEG', # (1D) (unconfirmed)
- 6 => 'CR2', # +THM? (1D,30D,350D)
- 7 => 'CR2+JPEG', # (S30)
- 9 => 'Video', # (S95 MOV)
- },
- },
- 10 => {
- Name => 'CanonImageSize',
- PrintConvColumns => 2,
- PrintConv => \%canonImageSize,
- },
- 11 => {
- Name => 'EasyMode',
- PrintConvColumns => 3,
- PrintConv => {
- 0 => 'Full auto',
- 1 => 'Manual',
- 2 => 'Landscape',
- 3 => 'Fast shutter',
- 4 => 'Slow shutter',
- 5 => 'Night',
- 6 => 'Gray Scale', #PH
- 7 => 'Sepia',
- 8 => 'Portrait',
- 9 => 'Sports',
- 10 => 'Macro',
- 11 => 'Black & White', #PH
- 12 => 'Pan focus',
- 13 => 'Vivid', #PH
- 14 => 'Neutral', #PH
- 15 => 'Flash Off', #8
- 16 => 'Long Shutter', #PH
- 17 => 'Super Macro', #PH
- 18 => 'Foliage', #PH
- 19 => 'Indoor', #PH
- 20 => 'Fireworks', #PH
- 21 => 'Beach', #PH
- 22 => 'Underwater', #PH
- 23 => 'Snow', #PH
- 24 => 'Kids & Pets', #PH
- 25 => 'Night Snapshot', #PH
- 26 => 'Digital Macro', #PH
- 27 => 'My Colors', #PH
- 28 => 'Movie Snap', #PH
- 29 => 'Super Macro 2', #PH
- 30 => 'Color Accent', #18
- 31 => 'Color Swap', #18
- 32 => 'Aquarium', #18
- 33 => 'ISO 3200', #18
- 34 => 'ISO 6400', #PH
- 35 => 'Creative Light Effect', #PH
- 36 => 'Easy', #PH
- 37 => 'Quick Shot', #PH
- 38 => 'Creative Auto', #39
- 39 => 'Zoom Blur', #PH
- 40 => 'Low Light', #PH
- 41 => 'Nostalgic', #PH
- 42 => 'Super Vivid', #PH (SD4500)
- 43 => 'Poster Effect', #PH (SD4500)
- 44 => 'Face Self-timer', #PH
- 45 => 'Smile', #PH
- 46 => 'Wink Self-timer', #PH
- 47 => 'Fisheye Effect', #PH (SX30IS)
- 48 => 'Miniature Effect', #PH (SD4500)
- 49 => 'High-speed Burst', #PH
- 50 => 'Best Image Selection', #PH
- 51 => 'High Dynamic Range', #PH (S95)
- 52 => 'Handheld Night Scene', #PH
- 53 => 'Movie Digest', #PH
- 54 => 'Live View Control', #PH
- 55 => 'Discreet', #PH
- 56 => 'Blur Reduction', #PH
- 57 => 'Monochrome', #PH (SX260 B&W,Sepia,Blue tone)
- 58 => 'Fisheye', #PH (IXUS240)
- 59 => 'Scene Intelligent Auto', #PH (T3i)
- 60 => 'High Speed Burst HQ', #PH
- 62 => 'Soft Focus', #PH (SX260)
- 257 => 'Spotlight', #PH
- 258 => 'Night 2', #PH
- 259 => 'Night+',
- 260 => 'Super Night', #PH
- 261 => 'Sunset', #PH (SX10IS)
- 263 => 'Night Scene', #PH
- 264 => 'Surface', #PH
- 265 => 'Low Light 2', #PH
- },
- },
- 12 => {
- Name => 'DigitalZoom',
- PrintConv => {
- 0 => 'None',
- 1 => '2x',
- 2 => '4x',
- 3 => 'Other', # value obtained from 2*$val[37]/$val[36]
- },
- },
- 13 => {
- Name => 'Contrast',
- RawConv => '$val == 0x7fff ? undef : $val',
- %Image::ExifTool::Exif::printParameter,
- },
- 14 => {
- Name => 'Saturation',
- RawConv => '$val == 0x7fff ? undef : $val',
- %Image::ExifTool::Exif::printParameter,
- },
- 15 => {
- Name => 'Sharpness',
- RawConv => '$val == 0x7fff ? undef : $val',
- Notes => q{
- some models use a range of -2 to +2 where 0 is normal sharpening, and
- others use a range of 0 to 7 where 0 is no sharpening
- },
- PrintConv => '$val > 0 ? "+$val" : $val',
- PrintConvInv => '$val',
- },
- 16 => {
- Name => 'CameraISO',
- RawConv => '$val == 0x7fff ? undef : $val',
- ValueConv => 'Image::ExifTool::Canon::CameraISO($val)',
- ValueConvInv => 'Image::ExifTool::Canon::CameraISO($val,1)',
- },
- 17 => {
- Name => 'MeteringMode',
- PrintConv => {
- 0 => 'Default', # older Ixus
- 1 => 'Spot',
- 2 => 'Average', #PH
- 3 => 'Evaluative',
- 4 => 'Partial',
- 5 => 'Center-weighted average',
- },
- },
- 18 => {
- # this is always 2 for the 300D - PH
- Name => 'FocusRange',
- PrintConv => {
- 0 => 'Manual',
- 1 => 'Auto',
- 2 => 'Not Known',
- 3 => 'Macro',
- 4 => 'Very Close', #PH
- 5 => 'Close', #PH
- 6 => 'Middle Range', #PH
- 7 => 'Far Range',
- 8 => 'Pan Focus',
- 9 => 'Super Macro', #PH
- 10=> 'Infinity', #PH
- },
- },
- 19 => {
- Name => 'AFPoint',
- Flags => 'PrintHex',
- RawConv => '$val==0 ? undef : $val',
- PrintConv => {
- 0x2005 => 'Manual AF point selection',
- 0x3000 => 'None (MF)',
- 0x3001 => 'Auto AF point selection',
- 0x3002 => 'Right',
- 0x3003 => 'Center',
- 0x3004 => 'Left',
- 0x4001 => 'Auto AF point selection',
- 0x4006 => 'Face Detect', #PH (A570IS)
- },
- },
- 20 => {
- Name => 'CanonExposureMode',
- PrintConv => {
- 0 => 'Easy',
- 1 => 'Program AE',
- 2 => 'Shutter speed priority AE',
- 3 => 'Aperture-priority AE',
- 4 => 'Manual',
- 5 => 'Depth-of-field AE',
- 6 => 'M-Dep', #PH
- 7 => 'Bulb', #30
- },
- },
- 22 => { #4
- Name => 'LensType',
- RawConv => '$val ? $$self{LensType}=$val : undef', # don't use if value is zero
- Notes => 'this value is incorrect for EOS 7D images with lenses of type 256 or greater',
- SeparateTable => 1,
- DataMember => 'LensType',
- ValueConvInv => 'int($val)', # (must truncate decimal part)
- PrintConv => \%canonLensTypes,
- },
- 23 => {
- Name => 'LongFocal',
- Format => 'int16u',
- # this is a bit tricky, but we need the FocalUnits to convert this to mm
- RawConvInv => '$val * ($$self{FocalUnits} || 1)',
- ValueConv => '$val / ($$self{FocalUnits} || 1)',
- ValueConvInv => '$val',
- PrintConv => '"$val mm"',
- PrintConvInv => '$val=~s/\s*mm//;$val',
- },
- 24 => {
- Name => 'ShortFocal',
- Format => 'int16u',
- RawConvInv => '$val * ($$self{FocalUnits} || 1)',
- ValueConv => '$val / ($$self{FocalUnits} || 1)',
- ValueConvInv => '$val',
- PrintConv => '"$val mm"',
- PrintConvInv => '$val=~s/\s*mm//;$val',
- },
- 25 => {
- Name => 'FocalUnits',
- # conversion from raw focal length values to mm
- DataMember => 'FocalUnits',
- RawConv => '$$self{FocalUnits} = $val',
- PrintConv => '"$val/mm"',
- PrintConvInv => '$val=~s/\s*\/?\s*mm//;$val',
- },
- 26 => { #9
- Name => 'MaxAperture',
- RawConv => '$val > 0 ? $val : undef',
- ValueConv => 'exp(Image::ExifTool::Canon::CanonEv($val)*log(2)/2)',
- ValueConvInv => 'Image::ExifTool::Canon::CanonEvInv(log($val)*2/log(2))',
- PrintConv => 'sprintf("%.2g",$val)',
- PrintConvInv => '$val',
- },
- 27 => { #PH
- Name => 'MinAperture',
- RawConv => '$val > 0 ? $val : undef',
- ValueConv => 'exp(Image::ExifTool::Canon::CanonEv($val)*log(2)/2)',
- ValueConvInv => 'Image::ExifTool::Canon::CanonEvInv(log($val)*2/log(2))',
- PrintConv => 'sprintf("%.2g",$val)',
- PrintConvInv => '$val',
- },
- 28 => {
- Name => 'FlashActivity',
- RawConv => '$val==-1 ? undef : $val',
- },
- 29 => {
- Name => 'FlashBits',
- PrintConvColumns => 2,
- PrintConv => { BITMASK => {
- 0 => 'Manual', #PH
- 1 => 'TTL', #PH
- 2 => 'A-TTL', #PH
- 3 => 'E-TTL', #PH
- 4 => 'FP sync enabled',
- 7 => '2nd-curtain sync used',
- 11 => 'FP sync used',
- 13 => 'Built-in',
- 14 => 'External', #(may not be set in manual mode - ref 37)
- } },
- },
- 32 => {
- Name => 'FocusContinuous',
- RawConv => '$val==-1 ? undef : $val',
- PrintConv => {
- 0 => 'Single',
- 1 => 'Continuous',
- 8 => 'Manual', #22
- },
- },
- 33 => { #PH
- Name => 'AESetting',
- RawConv => '$val==-1 ? undef : $val',
- PrintConv => {
- 0 => 'Normal AE',
- 1 => 'Exposure Compensation',
- 2 => 'AE Lock',
- 3 => 'AE Lock + Exposure Comp.',
- 4 => 'No AE',
- },
- },
- 34 => { #PH
- Name => 'ImageStabilization',
- RawConv => '$val==-1 ? undef : $val',
- PrintConv => {
- 0 => 'Off',
- 1 => 'On',
- 2 => 'Shoot Only', #15
- 3 => 'Panning', # (A570IS)
- 4 => 'Dynamic', # (SX30IS) (was 'On, Video')
- # (don't know what bit 0x100 indicates)
- 256 => 'Off (2)',
- 257 => 'On (2)',
- 258 => 'Shoot Only (2)',
- 259 => 'Panning (2)',
- 260 => 'Dynamic (2)',
- },
- },
- 35 => { #PH
- Name => 'DisplayAperture',
- RawConv => '$val ? $val : undef',
- ValueConv => '$val / 10',
- ValueConvInv => '$val * 10',
- },
- 36 => 'ZoomSourceWidth', #PH
- 37 => 'ZoomTargetWidth', #PH
- 39 => { #22
- Name => 'SpotMeteringMode',
- RawConv => '$val==-1 ? undef : $val',
- PrintConv => {
- 0 => 'Center',
- 1 => 'AF Point',
- },
- },
- 40 => { #PH
- Name => 'PhotoEffect',
- RawConv => '$val==-1 ? undef : $val',
- PrintConvColumns => 2,
- PrintConv => {
- 0 => 'Off',
- 1 => 'Vivid',
- 2 => 'Neutral',
- 3 => 'Smooth',
- 4 => 'Sepia',
- 5 => 'B&W',
- 6 => 'Custom',
- 100 => 'My Color Data',
- },
- },
- 41 => { #PH (A570IS)
- Name => 'ManualFlashOutput',
- PrintHex => 1,
- PrintConv => {
- 0 => 'n/a',
- 0x500 => 'Full',
- 0x502 => 'Medium',
- 0x504 => 'Low',
- 0x7fff => 'n/a', # (EOS models)
- },
- },
- # 41 => non-zero for manual flash intensity - PH (A570IS)
- 42 => {
- Name => 'ColorTone',
- RawConv => '$val == 0x7fff ? undef : $val',
- %Image::ExifTool::Exif::printParameter,
- },
- 46 => { #PH
- Name => 'SRAWQuality',
- RawConv => '$val==-1 ? undef : $val',
- PrintConv => {
- 0 => 'n/a',
- 1 => 'sRAW1 (mRAW)',
- 2 => 'sRAW2 (sRAW)',
- },
- },
- );
- # focal length information (MakerNotes tag 0x02)
- %Image::ExifTool::Canon::FocalLength = (
- %binaryDataAttrs,
- FORMAT => 'int16u',
- FIRST_ENTRY => 0,
- GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
- 0 => { #9
- Name => 'FocalType',
- RawConv => '$val ? $val : undef', # don't use if value is zero
- PrintConv => {
- 1 => 'Fixed',
- 2 => 'Zoom',
- },
- },
- 1 => {
- Name => 'FocalLength',
- # the EXIF FocalLength is more reliable, so set this priority to zero
- Priority => 0,
- RawConv => '$val ? $val : undef', # don't use if value is zero
- RawConvInv => q{
- my $focalUnits = $$self{FocalUnits};
- unless ($focalUnits) {
- $focalUnits = 1;
- # (this happens when writing FocalLength to CRW images)
- $self->Warn("FocalUnits not available for FocalLength conversion (1 assumed)");
- }
- return $val * $focalUnits;
- },
- ValueConv => '$val / ($$self{FocalUnits} || 1)',
- ValueConvInv => '$val',
- PrintConv => '"$val mm"',
- PrintConvInv => '$val=~s/\s*mm//;$val',
- },
- 2 => [ #4
- {
- Name => 'FocalPlaneXSize',
- Notes => q{
- these focal plane sizes are only valid for some models, and are affected by
- digital zoom if applied
- },
- # this conversion is valid only for PowerShot models and these EOS models:
- # D30, D60, 1D, 1DS, 5D, 10D, 20D, 30D, 300D, 350D, and 400D
- Condition => q{
- $$self{Model} !~ /EOS/ or
- $$self{Model} =~ /\b(1DS?|5D|D30|D60|10D|20D|30D|K236)$/ or
- $$self{Model} =~ /\b((300D|350D|400D) DIGITAL|REBEL( XTi?)?|Kiss Digital( [NX])?)$/
- },
- # focal plane image dimensions in 1/1000 inch -- convert to mm
- RawConv => '$val < 40 ? undef : $val', # must be reasonable
- ValueConv => '$val * 25.4 / 1000',
- ValueConvInv => 'int($val * 1000 / 25.4 + 0.5)',
- PrintConv => 'sprintf("%.2f mm",$val)',
- PrintConvInv => '$val=~s/\s*mm$//;$val',
- },{
- Name => 'FocalPlaneXUnknown',
- Unknown => 1,
- },
- ],
- 3 => [ #4
- {
- Name => 'FocalPlaneYSize',
- Condition => q{
- $$self{Model} !~ /EOS/ or
- $$self{Model} =~ /\b(1DS?|5D|D30|D60|10D|20D|30D|K236)$/ or
- $$self{Model} =~ /\b((300D|350D|400D) DIGITAL|REBEL( XTi?)?|Kiss Digital( [NX])?)$/
- },
- RawConv => '$val < 40 ? undef : $val', # must be reasonable
- ValueConv => '$val * 25.4 / 1000',
- ValueConvInv => 'int($val * 1000 / 25.4 + 0.5)',
- PrintConv => 'sprintf("%.2f mm",$val)',
- PrintConvInv => '$val=~s/\s*mm$//;$val',
- },{
- Name => 'FocalPlaneYUnknown',
- Unknown => 1,
- },
- ],
- );
- # Canon shot information (MakerNotes tag 0x04)
- # BinaryData (keys are indices into the int16s array)
- %Image::ExifTool::Canon::ShotInfo = (
- %binaryDataAttrs,
- FORMAT => 'int16s',
- FIRST_ENTRY => 1,
- DATAMEMBER => [ 19 ],
- GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
- 1 => { #PH
- Name => 'AutoISO',
- Notes => 'actual ISO used = BaseISO * AutoISO / 100',
- ValueConv => 'exp($val/32*log(2))*100',
- ValueConvInv => '32*log($val/100)/log(2)',
- PrintConv => 'sprintf("%.0f",$val)',
- PrintConvInv => '$val',
- },
- 2 => {
- Name => 'BaseISO',
- Priority => 0,
- RawConv => '$val ? $val : undef',
- ValueConv => 'exp($val/32*log(2))*100/32',
- ValueConvInv => '32*log($val*32/100)/log(2)',
- PrintConv => 'sprintf("%.0f",$val)',
- PrintConvInv => '$val',
- },
- 3 => { #9/PH
- Name => 'MeasuredEV',
- Notes => q{
- this is the Canon name for what could better be called MeasuredLV, and
- should be close to the calculated LightValue for a proper exposure with most
- models
- },
- # empirical offset of +5 seems to be good for EOS models, but maybe
- # the offset should be less by up to 1 EV for some PowerShot models
- ValueConv => '$val / 32 + 5',
- ValueConvInv => '($val - 5) * 32',
- PrintConv => 'sprintf("%.2f",$val)',
- PrintConvInv => '$val',
- },
- 4 => { #2, 9
- Name => 'TargetAperture',
- RawConv => '$val > 0 ? $val : undef',
- ValueConv => 'exp(Image::ExifTool::Canon::CanonEv($val)*log(2)/2)',
- ValueConvInv => 'Image::ExifTool::Canon::CanonEvInv(log($val)*2/log(2))',
- PrintConv => 'sprintf("%.2g",$val)',
- PrintConvInv => '$val',
- },
- 5 => { #2
- Name => 'TargetExposureTime',
- # ignore obviously bad values (also, -32768 may be used for n/a)
- # (note that a few models always write 0: DC211, and video models)
- RawConv => '($val > -1000 and ($val or $$self{Model}=~/(EOS|PowerShot|IXUS|IXY)/))? $val : undef',
- ValueConv => 'exp(-Image::ExifTool::Canon::CanonEv($val)*log(2))',
- ValueConvInv => 'Image::ExifTool::Canon::CanonEvInv(-log($val)/log(2))',
- PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
- PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
- },
- 6 => {
- Name => 'ExposureCompensation',
- ValueConv => 'Image::ExifTool::Canon::CanonEv($val)',
- ValueConvInv => 'Image::ExifTool::Canon::CanonEvInv($val)',
- PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)',
- PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
- },
- 7 => {
- Name => 'WhiteBalance',
- PrintConv => \%canonWhiteBalance,
- SeparateTable => 1,
- },
- 8 => { #PH
- Name => 'SlowShutter',
- PrintConv => {
- -1 => 'n/a',
- 0 => 'Off',
- 1 => 'Night Scene',
- 2 => 'On',
- 3 => 'None',
- },
- },
- 9 => {
- Name => 'SequenceNumber',
- Description => 'Shot Number In Continuous Burst',
- },
- 10 => { #PH/17
- Name => 'OpticalZoomCode',
- Groups => { 2 => 'Camera' },
- Notes => 'for many PowerShot models, a this is 0-6 for wide-tele zoom',
- # (for many models, 0-6 represent 0-100% zoom, but it is always 8 for
- # EOS models, and I have seen values of 16,20,28,32 and 39 too...)
- # - set to 8 for "n/a" by Canon software (ref 22)
- PrintConv => '$val == 8 ? "n/a" : $val',
- PrintConvInv => '$val =~ /[a-z]/i ? 8 : $val',
- },
- # 11 - (8 for all EOS samples, [0,8] for other models - PH)
- 12 => { #37
- Name => 'CameraTemperature',
- Condition => '$$self{Model} =~ /EOS/ and $$self{Model} !~ /EOS-1DS?$/',
- Groups => { 2 => 'Camera' },
- Notes => 'newer EOS models only',
- # usually zero if not valid for an EOS model (exceptions: 1D, 1DS)
- RawConv => '$val ? $val : undef',
- ValueConv => '$val - 128',
- ValueConvInv => '$val + 128',
- PrintConv => '"$val C"',
- PrintConvInv => '$val=~s/ ?C//; $val',
- },
- 13 => { #PH
- Name => 'FlashGuideNumber',
- RawConv => '$val==-1 ? undef : $val',
- ValueConv => '$val / 32',
- ValueConvInv => '$val * 32',
- },
- # AF points for Ixus and IxusV cameras - 02/17/04 M. Rommel (also D30/D60 - PH)
- 14 => { #2
- Name => 'AFPointsInFocus',
- Notes => 'used by D30, D60 and some PowerShot/Ixus models',
- Groups => { 2 => 'Camera' },
- Flags => 'PrintHex',
- RawConv => '$val==0 ? undef : $val',
- PrintConvColumns => 2,
- PrintConv => {
- 0x3000 => 'None (MF)',
- 0x3001 => 'Right',
- 0x3002 => 'Center',
- 0x3003 => 'Center+Right',
- 0x3004 => 'Left',
- 0x3005 => 'Left+Right',
- 0x3006 => 'Left+Center',
- 0x3007 => 'All',
- },
- },
- 15 => {
- Name => 'FlashExposureComp',
- Description => 'Flash Exposure Compensation',
- ValueConv => 'Image::ExifTool::Canon::CanonEv($val)',
- ValueConvInv => 'Image::ExifTool::Canon::CanonEvInv($val)',
- PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)',
- PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
- },
- 16 => {
- Name => 'AutoExposureBracketing',
- PrintConv => {
- -1 => 'On',
- 0 => 'Off',
- 1 => 'On (shot 1)',
- 2 => 'On (shot 2)',
- 3 => 'On (shot 3)',
- },
- },
- 17 => {
- Name => 'AEBBracketValue',
- ValueConv => 'Image::ExifTool::Canon::CanonEv($val)',
- ValueConvInv => 'Image::ExifTool::Canon::CanonEvInv($val)',
- PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)',
- PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
- },
- 18 => { #22
- Name => 'ControlMode',
- PrintConv => {
- 0 => 'n/a',
- 1 => 'Camera Local Control',
- 3 => 'Computer Remote Control',
- },
- },
- 19 => {
- Name => 'FocusDistanceUpper',
- DataMember => 'FocusDistanceUpper',
- Format => 'int16u',
- Notes => 'FocusDistance tags are only extracted if FocusDistanceUpper is non-zero',
- RawConv => '($$self{FocusDistanceUpper} = $val) || undef',
- ValueConv => '$val / 100',
- ValueConvInv => '$val * 100',
- PrintConv => '$val > 655.345 ? "inf" : "$val m"',
- PrintConvInv => '$val =~ s/ ?m$//; IsFloat($val) ? $val : 655.35',
- },
- 20 => {
- Name => 'FocusDistanceLower', # (seems to be the upper distance for the 400D)
- Condition => '$$self{FocusDistanceUpper}',
- Format => 'int16u',
- ValueConv => '$val / 100',
- ValueConvInv => '$val * 100',
- PrintConv => '$val > 655.345 ? "inf" : "$val m"',
- PrintConvInv => '$val =~ s/ ?m$//; IsFloat($val) ? $val : 655.35',
- },
- 21 => {
- Name => 'FNumber',
- Priority => 0,
- RawConv => '$val ? $val : undef',
- # approximate big translation table by simple calculation - PH
- ValueConv => 'exp(Image::ExifTool::Canon::CanonEv($val)*log(2)/2)',
- ValueConvInv => 'Image::ExifTool::Canon::CanonEvInv(log($val)*2/log(2))',
- PrintConv => 'sprintf("%.2g",$val)',
- PrintConvInv => '$val',
- },
- 22 => [
- {
- Name => 'ExposureTime',
- # encoding is different for 20D and 350D (darn!)
- # (but note that encoding is the same for TargetExposureTime - PH)
- Condition => '$$self{Model} =~ /\b(20D|350D|REBEL XT|Kiss Digital N)\b/',
- Priority => 0,
- # many models write 0 here in JPEG images (even though 0 is the
- # value for an exposure time of 1 sec), but apparently a value of 0
- # is valid in a CRW image (=1s, D60 sample)
- RawConv => '($val or $$self{FILE_TYPE} eq "CRW") ? $val : undef',
- # approximate big translation table by simple calculation - PH
- ValueConv => 'exp(-Image::ExifTool::Canon::CanonEv($val)*log(2))*1000/32',
- ValueConvInv => 'Image::ExifTool::Canon::CanonEvInv(-log($val*32/1000)/log(2))',
- PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
- PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
- },
- {
- Name => 'ExposureTime',
- Priority => 0,
- # many models write 0 here in JPEG images (even though 0 is the
- # value for an exposure time of 1 sec), but apparently a value of 0
- # is valid in a CRW image (=1s, D60 sample)
- RawConv => '($val or $$self{FILE_TYPE} eq "CRW") ? $val : undef',
- # approximate big translation table by simple calculation - PH
- ValueConv => 'exp(-Image::ExifTool::Canon::CanonEv($val)*log(2))',
- ValueConvInv => 'Image::ExifTool::Canon::CanonEvInv(-log($val)/log(2))',
- PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
- PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
- },
- ],
- 23 => { #37
- Name => 'MeasuredEV2',
- Description => 'Measured EV 2',
- RawConv => '$val ? $val : undef',
- ValueConv => '$val / 8 - 6',
- ValueConvInv => 'int(($val + 6) * 8 + 0.5)',
- },
- 24 => {
- Name => 'BulbDuration',
- ValueConv => '$val / 10',
- ValueConvInv => '$val * 10',
- },
- # 25 - (usually 0, but 1 for 2s timer?, 19 for small AVI, 14 for large
- # AVI, and -6 and -10 for shots 1 and 2 with stitch assist - PH)
- 26 => { #15
- Name => 'CameraType',
- Groups => { 2 => 'Camera' },
- PrintConv => {
- 0 => 'n/a',
- 248 => 'EOS High-end',
- 250 => 'Compact',
- 252 => 'EOS Mid-range',
- 255 => 'DV Camera', #PH
- },
- },
- 27 => {
- Name => 'AutoRotate',
- RawConv => '$val >= 0 ? $val : undef',
- PrintConv => {
- -1 => 'n/a', # (set to -1 when rotated by Canon software)
- 0 => 'None',
- 1 => 'Rotate 90 CW',
- 2 => 'Rotate 180',
- 3 => 'Rotate 270 CW',
- },
- },
- 28 => { #15
- Name => 'NDFilter',
- PrintConv => { -1 => 'n/a', 0 => 'Off', 1 => 'On' },
- },
- 29 => {
- Name => 'SelfTimer2',
- RawConv => '$val >= 0 ? $val : undef',
- ValueConv => '$val / 10',
- ValueConvInv => '$val * 10',
- },
- 33 => { #PH (A570IS)
- Name => 'FlashOutput',
- RawConv => '($$self{Model}=~/(PowerShot|IXUS|IXY)/ or $val) ? $val : undef',
- Notes => q{
- used only for PowerShot models, this has a maximum value of 500 for models
- like the A570IS
- },
- },
- );
- # Canon panorama information (MakerNotes tag 0x05)
- %Image::ExifTool::Canon::Panorama = (
- %binaryDataAttrs,
- FORMAT => 'int16s',
- FIRST_ENTRY => 0,
- GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
- # 0 - values: always 1
- # 1 - values: 0,256,512(3 sequential L->R images); 0,-256(2 R->L images)
- 2 => 'PanoramaFrameNumber', #(some models this is always 0)
- # 3 - values: 160(SX10IS,A570IS); 871(S30)
- # 4 - values: always 0
- 5 => {
- Name => 'PanoramaDirection',
- PrintConv => {
- 0 => 'Left to Right',
- 1 => 'Right to Left',
- 2 => 'Bottom to Top',
- 3 => 'Top to Bottom',
- 4 => '2x2 Matrix (Clockwise)',
- },
- },
- );
- # D30 color information (MakerNotes tag 0x0a)
- %Image::ExifTool::Canon::UnknownD30 = (
- %binaryDataAttrs,
- FORMAT => 'int16s',
- FIRST_ENTRY => 1,
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- );
- #..............................................................................
- # common CameraInfo tag definitions
- my %ciFNumber = (
- Name => 'FNumber',
- Format => 'int8u',
- Groups => { 2 => 'Image' },
- RawConv => '$val ? $val : undef',
- ValueConv => 'exp(($val-8)/16*log(2))',
- ValueConvInv => 'log($val)*16/log(2)+8',
- PrintConv => 'sprintf("%.2g",$val)',
- PrintConvInv => '$val',
- );
- my %ciExposureTime = (
- Name => 'ExposureTime',
- Format => 'int8u',
- Groups => { 2 => 'Image' },
- RawConv => '$val ? $val : undef',
- ValueConv => 'exp(4*log(2)*(1-Image::ExifTool::Canon::CanonEv($val-24)))',
- ValueConvInv => 'Image::ExifTool::Canon::CanonEvInv(1-log($val)/(4*log(2)))+24',
- PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
- PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
- );
- my %ciISO = (
- Name => 'ISO',
- Format => 'int8u',
- Groups => { 2 => 'Image' },
- ValueConv => '100*exp(($val/8-9)*log(2))',
- ValueConvInv => '(log($val/100)/log(2)+9)*8',
- PrintConv => 'sprintf("%.0f",$val)',
- PrintConvInv => '$val',
- );
- my %ciCameraTemperature = (
- Name => 'CameraTemperature',
- Format => 'int8u',
- ValueConv => '$val - 128',
- ValueConvInv => '$val + 128',
- PrintConv => '"$val C"',
- PrintConvInv => '$val=~s/ ?C//; $val',
- );
- my %ciMacroMagnification = (
- Name => 'MacroMagnification',
- Notes => 'currently decoded only for the MP-E 65mm f/2.8 1-5x Macro Photo',
- Condition => '$$self{LensType} and $$self{LensType} == 124',
- # 75=1x, 44=5x, log relationship
- ValueConv => 'exp((75-$val) * log(2) * 3 / 40)',
- ValueConvInv => '$val > 0 ? 75 - log($val) / log(2) * 40 / 3 : undef',
- PrintConv => 'sprintf("%.1fx",$val)',
- PrintConvInv => '$val=~s/\s*x//; $val',
- );
- my %ciFocalLength = (
- Name => 'FocalLength',
- Format => 'int16uRev', # (just to make things confusing, the focal lengths are big-endian)
- # ignore if zero
- RawConv => '$val ? $val : undef',
- PrintConv => '"$val mm"',
- PrintConvInv => '$val=~s/\s*mm//;$val',
- );
- my %ciShortFocal = (
- Name => 'ShortFocal',
- Format => 'int16uRev', # byte order is big-endian
- PrintConv => '"$val mm"',
- PrintConvInv => '$val=~s/\s*mm//;$val',
- );
- my %ciLongFocal = (
- Name => 'LongFocal',
- Format => 'int16uRev', # byte order is big-endian
- PrintConv => '"$val mm"',
- PrintConvInv => '$val=~s/\s*mm//;$val',
- );
- #..............................................................................
- # Camera information for 1D and 1DS (MakerNotes tag 0x0d)
- # (ref 15 unless otherwise noted)
- %Image::ExifTool::Canon::CameraInfo1D = (
- %binaryDataAttrs,
- FORMAT => 'int8u',
- FIRST_ENTRY => 0,
- PRIORITY => 0, # these tags are not reliable since they change with firmware version
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- NOTES => q{
- Information in the "CameraInfo" records is tricky to decode because the
- encodings are very different than in other Canon records (even sometimes
- switching endianness between values within a single camera), plus there is
- considerable variation in format from model to model. The first table below
- lists CameraInfo tags for the 1D and 1DS.
- },
- 0x04 => { %ciExposureTime }, #9
- 0x0a => {
- Name => 'FocalLength',
- Format => 'int16u',
- # ignore if zero
- RawConv => '$val ? $val : undef',
- PrintConv => '"$val mm"',
- PrintConvInv => '$val=~s/\s*mm//;$val',
- },
- 0x0d => { #9
- Name => 'LensType',
- Format => 'int16uRev', # value is little-endian
- SeparateTable => 1,
- RawConv => '$val ? $val : undef', # don't use if value is zero
- ValueConvInv => 'int($val)', # (must truncate decimal part)
- PrintConv => \%canonLensTypes,
- },
- 0x0e => {
- Name => 'ShortFocal',
- Format => 'int16u',
- PrintConv => '"$val mm"',
- PrintConvInv => '$val=~s/\s*mm//;$val',
- },
- 0x10 => {
- Name => 'LongFocal',
- Format => 'int16u',
- PrintConv => '"$val mm"',
- PrintConvInv => '$val=~s/\s*mm//;$val',
- },
- 0x41 => {
- Name => 'SharpnessFrequency', # PatternSharpness?
- Condition => '$$self{Model} =~ /\b1D$/',
- Notes => '1D only',
- PrintConvColumns => 2,
- PrintConv => {
- 0 => 'n/a',
- 1 => 'Lowest',
- 2 => 'Low',
- 3 => 'Standard',
- 4 => 'High',
- 5 => 'Highest',
- },
- },
- 0x42 => {
- Name => 'Sharpness',
- Format => 'int8s',
- Condition => '$$self{Model} =~ /\b1D$/',
- Notes => '1D only',
- },
- 0x44 => {
- Name => 'WhiteBalance',
- Condition => '$$self{Model} =~ /\b1D$/',
- Notes => '1D only',
- SeparateTable => 1,
- PrintConv => \%canonWhiteBalance,
- },
- 0x47 => {
- Name => 'SharpnessFrequency', # PatternSharpness?
- Condition => '$$self{Model} =~ /\b1DS$/',
- Notes => '1DS only',
- PrintConvColumns => 2,
- PrintConv => {
- 0 => 'n/a',
- 1 => 'Lowest',
- 2 => 'Low',
- 3 => 'Standard',
- 4 => 'High',
- 5 => 'Highest',
- },
- },
- 0x48 => [
- {
- Name => 'ColorTemperature',
- Format => 'int16u',
- Condition => '$$self{Model} =~ /\b1D$/',
- Notes => '1D only',
- },
- {
- Name => 'Sharpness',
- Format => 'int8s',
- Condition => '$$self{Model} =~ /\b1DS$/',
- Notes => '1DS only',
- },
- ],
- 0x4a => {
- Name => 'WhiteBalance',
- Condition => '$$self{Model} =~ /\b1DS$/',
- Notes => '1DS only',
- SeparateTable => 1,
- PrintConv => \%canonWhiteBalance,
- },
- 0x4b => {
- Name => 'PictureStyle',
- Condition => '$$self{Model} =~ /\b1D$/',
- Notes => "1D only, called 'Color Matrix' in owner's manual",
- Flags => ['PrintHex','SeparateTable'],
- PrintConv => \%pictureStyles,
- },
- 0x4e => {
- Name => 'ColorTemperature',
- Format => 'int16u',
- Condition => '$$self{Model} =~ /\b1DS$/',
- Notes => '1DS only',
- },
- 0x51 => {
- Name => 'PictureStyle',
- Condition => '$$self{Model} =~ /\b1DS$/',
- Notes => '1DS only',
- Flags => ['PrintHex','SeparateTable'],
- PrintConv => \%pictureStyles,
- },
- );
- # Camera information for 1DmkII and 1DSmkII (MakerNotes tag 0x0d)
- # (ref 15 unless otherwise noted)
- %Image::ExifTool::Canon::CameraInfo1DmkII = (
- %binaryDataAttrs,
- FORMAT => 'int8u',
- FIRST_ENTRY => 0,
- PRIORITY => 0,
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- NOTES => 'CameraInfo tags for the 1DmkII and 1DSmkII.',
- 0x04 => { %ciExposureTime }, #9
- 0x09 => { %ciFocalLength }, #9
- 0x0c => { #9
- Name => 'LensType',
- Format => 'int16uRev', # value is big-endian
- SeparateTable => 1,
- RawConv => '$val ? $val : undef', # don't use if value is zero
- ValueConvInv => 'int($val)', # (must truncate decimal part)
- PrintConv => \%canonLensTypes,
- },
- 0x11 => { %ciShortFocal }, #9
- 0x13 => { %ciLongFocal }, #9
- 0x2d => { #9
- Name => 'FocalType',
- PrintConv => {
- 0 => 'Fixed',
- 2 => 'Zoom',
- },
- },
- 0x36 => {
- Name => 'WhiteBalance',
- SeparateTable => 1,
- PrintConv => \%canonWhiteBalance,
- },
- 0x37 => {
- Name => 'ColorTemperature',
- Format => 'int16uRev',
- },
- 0x39 => {
- Name => 'CanonImageSize',
- Format => 'int16u',
- PrintConvColumns => 2,
- PrintConv => \%canonImageSize,
- },
- 0x66 => {
- Name => 'JPEGQuality',
- Notes => 'a number from 1 to 10',
- },
- 0x6c => { #12
- Name => 'PictureStyle',
- Flags => ['PrintHex','SeparateTable'],
- PrintConv => \%pictureStyles,
- },
- 0x6e => {
- Name => 'Saturation',
- Format => 'int8s',
- %Image::ExifTool::Exif::printParameter,
- },
- 0x6f => {
- Name => 'ColorTone',
- Format => 'int8s',
- %Image::ExifTool::Exif::printParameter,
- },
- 0x72 => {
- Name => 'Sharpness',
- Format => 'int8s',
- },
- 0x73 => {
- Name => 'Contrast',
- Format => 'int8s',
- %Image::ExifTool::Exif::printParameter,
- },
- 0x75 => {
- Name => 'ISO',
- Format => 'string[5]',
- },
- );
- # Camera information for the 1DmkIIN (MakerNotes tag 0x0d)
- # (ref 9 unless otherwise noted)
- %Image::ExifTool::Canon::CameraInfo1DmkIIN = (
- %binaryDataAttrs,
- FORMAT => 'int8u',
- FIRST_ENTRY => 0,
- PRIORITY => 0,
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- NOTES => 'CameraInfo tags for the 1DmkIIN.',
- 0x04 => { %ciExposureTime },
- 0x09 => { %ciFocalLength },
- 0x0c => {
- Name => 'LensType',
- Format => 'int16uRev', # value is big-endian
- SeparateTable => 1,
- RawConv => '$val ? $val : undef', # don't use if value is zero
- ValueConvInv => 'int($val)', # (must truncate decimal part)
- PrintConv => \%canonLensTypes,
- },
- 0x11 => { %ciShortFocal },
- 0x13 => { %ciLongFocal },
- 0x36 => { #15
- Name => 'WhiteBalance',
- SeparateTable => 1,
- PrintConv => \%canonWhiteBalance,
- },
- 0x37 => { #15
- Name => 'ColorTemperature',
- Format => 'int16uRev',
- },
- 0x73 => { #15
- Name => 'PictureStyle',
- Flags => ['PrintHex','SeparateTable'],
- PrintConv => \%pictureStyles,
- },
- 0x74 => { #15
- Name => 'Sharpness',
- Format => 'int8s',
- },
- 0x75 => { #15
- Name => 'Contrast',
- Format => 'int8s',
- %Image::ExifTool::Exif::printParameter,
- },
- 0x76 => { #15
- Name => 'Saturation',
- Format => 'int8s',
- %Image::ExifTool::Exif::printParameter,
- },
- 0x77 => { #15
- Name => 'ColorTone',
- Format => 'int8s',
- %Image::ExifTool::Exif::printParameter,
- },
- 0x79 => { #15
- Name => 'ISO',
- Format => 'string[5]',
- },
- );
- # Canon camera information for 1DmkIII and 1DSmkIII (MakerNotes tag 0x0d)
- # (ref PH unless otherwise noted)
- %Image::ExifTool::Canon::CameraInfo1DmkIII = (
- %binaryDataAttrs,
- FORMAT => 'int8u',
- FIRST_ENTRY => 0,
- PRIORITY => 0,
- IS_SUBDIR => [ 0x2aa ],
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- NOTES => 'CameraInfo tags for the 1DmkIII and 1DSmkIII.',
- 0x03 => { %ciFNumber },
- 0x04 => { %ciExposureTime }, #9
- 0x06 => { %ciISO },
- 0x18 => { %ciCameraTemperature }, #36
- 0x1b => { %ciMacroMagnification }, #(NC)
- 0x1d => { %ciFocalLength },
- 0x30 => {
- Name => 'CameraOrientation', # <-- (always 9th byte after 0xbbbb for all models - Dave Coffin)
- PrintConv => {
- 0 => 'Horizontal (normal)',
- 1 => 'Rotate 90 CW',
- 2 => 'Rotate 270 CW',
- },
- },
- 0x43 => { #21/24
- Name => 'FocusDistanceUpper',
- # (it looks like the focus distances are also odd-byte big-endian)
- %focusDistanceByteSwap,
- },
- 0x45 => { #21/24
- Name => 'FocusDistanceLower',
- %focusDistanceByteSwap,
- },
- 0x5e => { #15
- Name => 'WhiteBalance',
- Format => 'int16u',
- PrintConv => \%canonWhiteBalance,
- SeparateTable => 1,
- },
- 0x62 => { #15
- Name => 'ColorTemperature',
- Format => 'int16u',
- },
- 0x86 => {
- Name => 'PictureStyle',
- Flags => ['PrintHex','SeparateTable'],
- PrintConv => \%pictureStyles,
- },
- 0x111 => { #15
- Name => 'LensType',
- Format => 'int16uRev', # value is big-endian
- SeparateTable => 1,
- ValueConvInv => 'int($val)', # (must truncate decimal part)
- PrintConv => \%canonLensTypes,
- },
- 0x113 => { %ciShortFocal },
- 0x115 => { %ciLongFocal },
- 0x136 => { #15
- Name => 'FirmwareVersion',
- Format => 'string[6]',
- },
- 0x172 => {
- Name => 'FileIndex',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- ValueConv => '$val + 1',
- ValueConvInv => '$val - 1',
- },
- 0x176 => {
- Name => 'ShutterCount',
- Notes => 'may be valid only for some 1DmkIII copies, even running the same firmware',
- Format => 'int32u',
- ValueConv => '$val + 1',
- ValueConvInv => '$val - 1',
- },
- 0x17e => { #(NC)
- Name => 'DirectoryIndex',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- ValueConv => '$val - 1',
- ValueConvInv => '$val + 1',
- },
- 0x2aa => { #48
- Name => 'PictureStyleInfo',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::PSInfo',
- },
- },
- 0x45a => { #29
- Name => 'TimeStamp1',
- Condition => '$$self{Model} =~ /\b1D Mark III$/',
- Format => 'int32u',
- Groups => { 2 => 'Time' },
- # observed in 1DmkIII firmware 5.3.1 (pre-production), 1.0.3, 1.0.8
- Notes => 'only valid for some versions of the 1DmkIII firmware',
- Shift => 'Time',
- RawConv => '$val ? $val : undef',
- ValueConv => 'ConvertUnixTime($val)',
- ValueConvInv => 'GetUnixTime($val)',
- PrintConv => '$self->ConvertDateTime($val)',
- PrintConvInv => '$self->InverseDateTime($val)',
- },
- 0x45e => {
- Name => 'TimeStamp',
- Format => 'int32u',
- Groups => { 2 => 'Time' },
- # observed in 1DmkIII firmware 1.1.0, 1.1.3 and
- # 1DSmkIII firmware 1.0.0, 1.0.4, 2.1.2, 2.7.1
- Notes => 'valid for the 1DSmkIII and some versions of the 1DmkIII firmware',
- Shift => 'Time',
- RawConv => '$val ? $val : undef',
- ValueConv => 'ConvertUnixTime($val)',
- ValueConvInv => 'GetUnixTime($val)',
- PrintConv => '$self->ConvertDateTime($val)',
- PrintConvInv => '$self->InverseDateTime($val)',
- },
- );
- # Canon camera information for 1DmkIV (MakerNotes tag 0x0d) (ref PH)
- %Image::ExifTool::Canon::CameraInfo1DmkIV = (
- %binaryDataAttrs,
- FIRST_ENTRY => 0,
- PRIORITY => 0,
- DATAMEMBER => [ 0x57 ],
- IS_SUBDIR => [ 0x363, 0x368 ],
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- NOTES => 'CameraInfo tags for the 1DmkIV.',
- 0x03 => { %ciFNumber },
- 0x04 => { %ciExposureTime },
- 0x06 => { %ciISO },
- 0x07 => {
- Name => 'HighlightTonePriority',
- PrintConv => { 0 => 'Off', 1 => 'On' },
- },
- 0x08 => {
- Name => 'MeasuredEV2',
- Description => 'Measured EV 2',
- RawConv => '$val ? $val : undef',
- ValueConv => '$val / 8 - 6',
- ValueConvInv => 'int(($val + 6) * 8 + 0.5)',
- },
- 0x09 => {
- Name => 'MeasuredEV3',
- Description => 'Measured EV 3',
- RawConv => '$val ? $val : undef',
- ValueConv => '$val / 8 - 6',
- ValueConvInv => 'int(($val + 6) * 8 + 0.5)',
- },
- 0x15 => {
- Name => 'FlashMeteringMode',
- PrintConv => {
- 0 => 'E-TTL',
- 3 => 'TTL',
- 4 => 'External Auto',
- 5 => 'External Manual',
- 6 => 'Off',
- },
- },
- 0x19 => { %ciCameraTemperature },
- 0x1e => { %ciFocalLength },
- 0x35 => {
- Name => 'CameraOrientation',
- PrintConv => {
- 0 => 'Horizontal (normal)',
- 1 => 'Rotate 90 CW',
- 2 => 'Rotate 270 CW',
- },
- },
- 0x54 => {
- Name => 'FocusDistanceUpper',
- %focusDistanceByteSwap,
- },
- 0x56 => {
- Name => 'FocusDistanceLower',
- %focusDistanceByteSwap,
- },
- 0x57 => {
- Name => 'FirmwareVersionLookAhead',
- Hidden => 1,
- # must look ahead to check location of FirmwareVersion string
- Format => 'undef[0x1a6]',
- RawConv => q{
- my $t = substr($val, 0x1e8 - 0x57, 6);
- $t =~ /^\d+\.\d+\.\d+/ and $$self{CanonFirmA} = 1;
- $t = substr($val, 0x1ed - 0x57, 6);
- $t =~ /^\d+\.\d+\.\d+/ and $$self{CanonFirmB} = 1;
- return undef; # not a real tag
- },
- },
- 0x77 => {
- Name => 'WhiteBalance',
- Condition => '$$self{CanonFirmA}',
- Notes => 'firmware 4.2.1',
- Format => 'int16u',
- SeparateTable => 1,
- PrintConv => \%canonWhiteBalance,
- },
- 0x78 => {
- Name => 'WhiteBalance',
- Condition => '$$self{CanonFirmB}',
- Notes => 'firmware 1.0.4',
- Format => 'int16u',
- SeparateTable => 1,
- PrintConv => \%canonWhiteBalance,
- },
- 0x7b => {
- Name => 'ColorTemperature',
- Condition => '$$self{CanonFirmA}',
- Format => 'int16u',
- },
- 0x7c => {
- Name => 'ColorTemperature',
- Condition => '$$self{CanonFirmB}',
- Format => 'int16u',
- },
- 0x14e => {
- Name => 'LensType',
- Condition => '$$self{CanonFirmA}',
- Format => 'int16uRev', # value is big-endian
- SeparateTable => 1,
- ValueConvInv => 'int($val)', # (must truncate decimal part)
- PrintConv => \%canonLensTypes,
- },
- 0x14f => {
- Name => 'LensType',
- Condition => '$$self{CanonFirmB}',
- Format => 'int16uRev', # value is big-endian
- SeparateTable => 1,
- ValueConvInv => 'int($val)', # (must truncate decimal part)
- PrintConv => \%canonLensTypes,
- },
- 0x150 => {
- %ciShortFocal,
- Condition => '$$self{CanonFirmA}',
- },
- 0x151 => {
- %ciShortFocal,
- Condition => '$$self{CanonFirmB}',
- },
- 0x152 => {
- %ciLongFocal,
- Condition => '$$self{CanonFirmA}',
- },
- 0x153 => {
- %ciLongFocal,
- Condition => '$$self{CanonFirmB}',
- },
- 0x1e8 => { # firmware 4.2.1 (pre-production)
- Name => 'FirmwareVersion',
- Condition => '$$self{CanonFirmA}',
- Format => 'string[6]',
- Writable => 0,
- },
- 0x1ed => { # firmware 1.0.4
- Name => 'FirmwareVersion',
- Condition => '$$self{CanonFirmB}',
- Format => 'string[6]',
- Writable => 0,
- },
- 0x227 => { #(NC)
- Name => 'FileIndex',
- Condition => '$$self{CanonFirmA}',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- ValueConv => '$val + 1',
- ValueConvInv => '$val - 1',
- },
- 0x22c => { #(NC)
- Name => 'FileIndex',
- Condition => '$$self{CanonFirmB}',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- ValueConv => '$val + 1',
- ValueConvInv => '$val - 1',
- },
- 0x233 => { #(NC)
- Name => 'DirectoryIndex',
- Condition => '$$self{CanonFirmA}',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- ValueConv => '$val - 1',
- ValueConvInv => '$val + 1',
- },
- 0x238 => { #(NC)
- Name => 'DirectoryIndex',
- Condition => '$$self{CanonFirmB}',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- ValueConv => '$val - 1',
- ValueConvInv => '$val + 1',
- },
- 0x363 => {
- Name => 'PictureStyleInfo',
- Condition => '$$self{CanonFirmA}',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::PSInfo',
- },
- },
- 0x368 => {
- Name => 'PictureStyleInfo',
- Condition => '$$self{CanonFirmB}',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::PSInfo',
- },
- },
- );
- # Camera information for 5D (MakerNotes tag 0x0d)
- # (ref 12 unless otherwise noted)
- %Image::ExifTool::Canon::CameraInfo5D = (
- %binaryDataAttrs,
- FORMAT => 'int8s',
- FIRST_ENTRY => 0,
- PRIORITY => 0,
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- NOTES => 'CameraInfo tags for the EOS 5D.',
- 0x03 => { %ciFNumber }, #PH
- 0x04 => { %ciExposureTime }, #9
- 0x06 => { %ciISO }, #PH
- 0x0c => { #9
- Name => 'LensType',
- Format => 'int16uRev', # value is big-endian
- SeparateTable => 1,
- RawConv => '$val ? $val : undef', # don't use if value is zero
- ValueConvInv => 'int($val)', # (must truncate decimal part)
- PrintConv => \%canonLensTypes,
- },
- 0x17 => { %ciCameraTemperature }, #PH
- 0x1b => { %ciMacroMagnification }, #PH
- 0x27 => { #PH
- Name => 'CameraOrientation',
- PrintConv => {
- 0 => 'Horizontal (normal)',
- 1 => 'Rotate 90 CW',
- 2 => 'Rotate 270 CW',
- },
- },
- 0x28 => { %ciFocalLength }, #15
- 0x38 => {
- Name => 'AFPointsInFocus5D',
- Format => 'int16uRev',
- PrintConvColumns => 2,
- PrintConv => { BITMASK => {
- 0 => 'Center',
- 1 => 'Top',
- 2 => 'Bottom',
- 3 => 'Upper-left',
- 4 => 'Upper-right',
- 5 => 'Lower-left',
- 6 => 'Lower-right',
- 7 => 'Left',
- 8 => 'Right',
- 9 => 'AI Servo1',
- 10 => 'AI Servo2',
- 11 => 'AI Servo3',
- 12 => 'AI Servo4',
- 13 => 'AI Servo5',
- 14 => 'AI Servo6',
- } },
- },
- 0x54 => { #15
- Name => 'WhiteBalance',
- Format => 'int16u',
- SeparateTable => 1,
- PrintConv => \%canonWhiteBalance,
- },
- 0x58 => { #15
- Name => 'ColorTemperature',
- Format => 'int16u',
- },
- 0x6c => {
- Name => 'PictureStyle',
- Format => 'int8u',
- Flags => ['PrintHex','SeparateTable'],
- PrintConv => \%pictureStyles,
- },
- 0x93 => { %ciShortFocal }, #15
- 0x95 => { %ciLongFocal }, #15
- 0x97 => { #15
- Name => 'LensType',
- Format => 'int16uRev', # value is big-endian
- SeparateTable => 1,
- ValueConvInv => 'int($val)', # (must truncate decimal part)
- PrintConv => \%canonLensTypes,
- },
- 0xa4 => { #PH
- Name => 'FirmwareRevision',
- Format => 'string[8]',
- },
- 0xac => { #PH
- Name => 'ShortOwnerName',
- Format => 'string[16]',
- },
- 0xcc => { #PH (NC)
- Name => 'DirectoryIndex',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- },
- 0xd0 => {
- Name => 'FileIndex',
- Format => 'int16u',
- Groups => { 2 => 'Image' },
- ValueConv => '$val + 1',
- ValueConvInv => '$val - 1',
- },
- 0xe8 => 'ContrastStandard',
- 0xe9 => 'ContrastPortrait',
- 0xea => 'ContrastLandscape',
- 0xeb => 'ContrastNeutral',
- 0xec => 'ContrastFaithful',
- 0xed => 'ContrastMonochrome',
- 0xee => 'ContrastUserDef1',
- 0xef => 'ContrastUserDef2',
- 0xf0 => 'ContrastUserDef3',
- # sharpness values are 0-7
- 0xf1 => 'SharpnessStandard',
- 0xf2 => 'SharpnessPortrait',
- 0xf3 => 'SharpnessLandscape',
- 0xf4 => 'SharpnessNeutral',
- 0xf5 => 'SharpnessFaithful',
- 0xf6 => 'SharpnessMonochrome',
- 0xf7 => 'SharpnessUserDef1',
- 0xf8 => 'SharpnessUserDef2',
- 0xf9 => 'SharpnessUserDef3',
- 0xfa => 'SaturationStandard',
- 0xfb => 'SaturationPortrait',
- 0xfc => 'SaturationLandscape',
- 0xfd => 'SaturationNeutral',
- 0xfe => 'SaturationFaithful',
- 0xff => {
- Name => 'FilterEffectMonochrome',
- PrintConv => {
- 0 => 'None',
- 1 => 'Yellow',
- 2 => 'Orange',
- 3 => 'Red',
- 4 => 'Green',
- -559038737 => 'n/a', # (0xdeadbeef)
- },
- },
- 0x100 => 'SaturationUserDef1',
- 0x101 => 'SaturationUserDef2',
- 0x102 => 'SaturationUserDef3',
- 0x103 => 'ColorToneStandard',
- 0x104 => 'ColorTonePortrait',
- 0x105 => 'ColorToneLandscape',
- 0x106 => 'ColorToneNeutral',
- 0x107 => 'ColorToneFaithful',
- 0x108 => {
- Name => 'ToningEffectMonochrome',
- PrintConv => {
- 0 => 'None',
- 1 => 'Sepia',
- 2 => 'Blue',
- 3 => 'Purple',
- 4 => 'Green',
- -559038737 => 'n/a', # (0xdeadbeef)
- },
- },
- 0x109 => 'ColorToneUserDef1',
- 0x10a => 'ColorToneUserDef2',
- 0x10b => 'ColorToneUserDef3',
- 0x10c => {
- Name => 'UserDef1PictureStyle',
- Format => 'int16u',
- PrintHex => 1, # (only needed for one tag)
- SeparateTable => 'UserDefStyle',
- PrintConv => \%userDefStyles,
- },
- 0x10e => {
- Name => 'UserDef2PictureStyle',
- Format => 'int16u',
- SeparateTable => 'UserDefStyle',
- PrintConv => \%userDefStyles,
- },
- 0x110 => {
- Name => 'UserDef3PictureStyle',
- Format => 'int16u',
- SeparateTable => 'UserDefStyle',
- PrintConv => \%userDefStyles,
- },
- 0x11c => {
- Name => 'TimeStamp',
- Format => 'int32u',
- Groups => { 2 => 'Time' },
- Shift => 'Time',
- RawConv => '$val ? $val : undef',
- ValueConv => 'ConvertUnixTime($val)',
- ValueConvInv => 'GetUnixTime($val)',
- PrintConv => '$self->ConvertDateTime($val)',
- PrintConvInv => '$self->InverseDateTime($val)',
- },
- );
- # Camera information for 5D Mark II (MakerNotes tag 0x0d)
- # (ref PH unless otherwise noted)
- %Image::ExifTool::Canon::CameraInfo5DmkII = (
- %binaryDataAttrs,
- FORMAT => 'int8u',
- FIRST_ENTRY => 0,
- PRIORITY => 0,
- IS_SUBDIR => [ 0x15a, 0x17e ],
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- NOTES => 'CameraInfo tags for the EOS 5D Mark II.',
- 0x03 => { %ciFNumber },
- 0x04 => { %ciExposureTime },
- 0x06 => { %ciISO },
- 0x07 => {
- Name => 'HighlightTonePriority',
- PrintConv => { 0 => 'Off', 1 => 'On' },
- },
- 0x1b => { %ciMacroMagnification }, #PH
- 0x15 => { #PH (580 EX II)
- Name => 'FlashMeteringMode',
- PrintConv => {
- 0 => 'E-TTL',
- 3 => 'TTL',
- 4 => 'External Auto',
- 5 => 'External Manual',
- 6 => 'Off',
- },
- },
- 0x19 => { %ciCameraTemperature }, #36
- # 0x1b, 0x1c, 0x1d - same as FileInfo 0x10 - PH
- 0x1e => { %ciFocalLength },
- 0x31 => {
- Name => 'CameraOrientation',
- PrintConv => {
- 0 => 'Horizontal (normal)',
- 1 => 'Rotate 90 CW',
- 2 => 'Rotate 270 CW',
- },
- },
- 0x50 => {
- Name => 'FocusDistanceUpper',
- %focusDistanceByteSwap,
- },
- 0x52 => {
- Name => 'FocusDistanceLower',
- %focusDistanceByteSwap,
- },
- 0x6f => {
- Name => 'WhiteBalance',
- Format => 'int16u',
- SeparateTable => 1,
- PrintConv => \%canonWhiteBalance,
- },
- 0x73 => {
- Name => 'ColorTemperature',
- Format => 'int16u',
- },
- 0xa7 => {
- Name => 'PictureStyle',
- Format => 'int8u',
- Flags => ['PrintHex','SeparateTable'],
- PrintConv => \%pictureStyles,
- },
- 0xbd => {
- Name => 'HighISONoiseReduction',
- PrintConv => {
- 0 => 'Standard',
- 1 => 'Low',
- 2 => 'Strong',
- 3 => 'Off',
- },
- },
- 0xbf => {
- Name => 'AutoLightingOptimizer',
- PrintConv => {
- 0 => 'Standard',
- 1 => 'Low',
- 2 => 'Strong',
- 3 => 'Off',
- },
- },
- 0xe6 => {
- Name => 'LensType',
- Format => 'int16uRev', # value is big-endian
- SeparateTable => 1,
- ValueConvInv => 'int($val)', # (must truncate decimal part)
- PrintConv => \%canonLensTypes,
- },
- 0xe8 => { %ciShortFocal },
- 0xea => { %ciLongFocal },
- 0x15a => {
- Name => 'CameraInfo5DmkII_2a',
- Condition => '$$valPt =~ /^\d+\.\d+\.\d+[\s\0]/',
- Notes => 'at this location for firmware 3.4.6 and 3.6.1',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::CameraInfo5DmkII_2',
- },
- },
- 0x17e => {
- Name => 'CameraInfo5DmkII_2b',
- Condition => '$$valPt =~ /^\d+\.\d+\.\d+[\s\0]/',
- Notes => 'at this location for firmware 1.0.6 and 4.1.1',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::CameraInfo5DmkII_2',
- },
- },
- );
- # variable-position Camera information for 5DmkII (ref PH)
- %Image::ExifTool::Canon::CameraInfo5DmkII_2 = (
- %binaryDataAttrs,
- FIRST_ENTRY => 0,
- PRIORITY => 0,
- IS_SUBDIR => [ 0x179 ],
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- NOTES => 'More CameraInfo tags for the EOS 5D Mark II.',
- 0 => {
- Name => 'FirmwareVersion',
- Format => 'string[6]',
- Writable => 0, # not writable for logic reasons
- # some firmwares have a null instead of a space after the version number
- RawConv => '$val=~/^\d+\.\d+\.\d+\s*$/ ? $val : undef',
- },
- 0x3d => {
- Name => 'FileIndex',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- ValueConv => '$val + 1',
- ValueConvInv => '$val - 1',
- },
- 0x49 => { #(NC)
- Name => 'DirectoryIndex',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- ValueConv => '$val - 1',
- ValueConvInv => '$val + 1',
- },
- 0x179 => { #48
- Name => 'PictureStyleInfo',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::PSInfo',
- },
- },
- );
- # Camera information for 7D (MakerNotes tag 0x0d) (ref PH)
- %Image::ExifTool::Canon::CameraInfo7D = (
- %binaryDataAttrs,
- FORMAT => 'int8u',
- FIRST_ENTRY => 0,
- PRIORITY => 0,
- IS_SUBDIR => [ 0x20, 0x24 ],
- DATAMEMBER => [ 0x1f ],
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- NOTES => 'CameraInfo tags for the EOS 7D.',
- 0x03 => { %ciFNumber },
- 0x04 => { %ciExposureTime },
- 0x06 => { %ciISO },
- 0x07 => {
- Name => 'HighlightTonePriority',
- PrintConv => { 0 => 'Off', 1 => 'On' },
- },
- 0x08 => { #37
- Name => 'MeasuredEV2',
- Description => 'Measured EV 2',
- RawConv => '$val ? $val : undef',
- ValueConv => '$val / 8 - 6',
- ValueConvInv => 'int(($val + 6) * 8 + 0.5)',
- },
- 0x09 => { #37
- Name => 'MeasuredEV',
- Description => 'Measured EV',
- RawConv => '$val ? $val : undef',
- ValueConv => '$val / 8 - 6',
- ValueConvInv => 'int(($val + 6) * 8 + 0.5)',
- },
- 0x15 => { #PH (580 EX II)
- Name => 'FlashMeteringMode',
- PrintConv => {
- 0 => 'E-TTL',
- 3 => 'TTL',
- 4 => 'External Auto',
- 5 => 'External Manual',
- 6 => 'Off',
- },
- },
- 0x19 => { %ciCameraTemperature },
- 0x1e => { %ciFocalLength },
- 0x1f => {
- Name => 'FirmwareVersionLookAhead',
- Hidden => 1,
- # must look ahead to check location of FirmwareVersion string
- Format => 'undef[0x1a0]',
- RawConv => q{
- my $t = substr($val, 0x1a8 - 0x1f, 6);
- $t =~ /^\d+\.\d+\.\d+/ and $$self{CanonFirmA} = 1;
- $t = substr($val, 0x1ac - 0x1f, 6);
- $t =~ /^\d+\.\d+\.\d+/ and $$self{CanonFirmB} = 1;
- return undef; # not a real tag
- },
- },
- 0x20 => {
- Name => 'CameraInfo7D_2a',
- Condition => '$$self{CanonFirmA}',
- Notes => 'at this location for pre-production firmware version 3.7.5',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::CameraInfo7D_2',
- },
- },
- 0x24 => {
- Name => 'CameraInfo7D_2b',
- Condition => '$$self{CanonFirmB}',
- Notes => 'at this location for firmware 1.0.7, 1.0.8, 1.1.0, 1.2.1 and 1.2.2',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::CameraInfo7D_2',
- },
- },
- );
- # variable-position Camera information for 7D (ref PH)
- %Image::ExifTool::Canon::CameraInfo7D_2 = (
- %binaryDataAttrs,
- FORMAT => 'int8u',
- FIRST_ENTRY => 0,
- PRIORITY => 0,
- IS_SUBDIR => [ 0x303 ],
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- NOTES => 'More CameraInfo tags for the EOS 7D.',
- 0x11 => {
- Name => 'CameraOrientation',
- PrintConv => {
- 0 => 'Horizontal (normal)',
- 1 => 'Rotate 90 CW',
- 2 => 'Rotate 270 CW',
- },
- },
- 0x30 => {
- Name => 'FocusDistanceUpper',
- %focusDistanceByteSwap,
- },
- 0x32 => {
- Name => 'FocusDistanceLower',
- %focusDistanceByteSwap,
- },
- 0x53 => {
- Name => 'WhiteBalance',
- Format => 'int16u',
- SeparateTable => 1,
- PrintConv => \%canonWhiteBalance,
- },
- 0x57 => {
- Name => 'ColorTemperature',
- Format => 'int16u',
- },
- 0xa5 => {
- Name => 'HighISONoiseReduction',
- PrintConv => {
- 0 => 'Standard',
- 1 => 'Low',
- 2 => 'Strong',
- 3 => 'Off',
- },
- },
- 0xee => {
- Name => 'LensType',
- Format => 'int16uRev', # value is big-endian
- SeparateTable => 1,
- ValueConvInv => 'int($val)', # (must truncate decimal part)
- PrintConv => \%canonLensTypes,
- },
- 0xf0 => { %ciShortFocal },
- 0xf2 => { %ciLongFocal },
- 0x188 => {
- Name => 'FirmwareVersion',
- Format => 'string[6]',
- Writable => 0, # not writable for logic reasons
- # some firmwares have a null instead of a space after the version number
- RawConv => '$val=~/^\d+\.\d+\.\d+\s*$/ ? $val : undef',
- },
- 0x1c7 => {
- Name => 'FileIndex',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- ValueConv => '$val + 1',
- ValueConvInv => '$val - 1',
- },
- 0x1d3 => { #(NC)
- Name => 'DirectoryIndex',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- ValueConv => '$val - 1',
- ValueConvInv => '$val + 1',
- },
- 0x303 => { #48
- Name => 'PictureStyleInfo',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::PSInfo',
- },
- },
- );
- # Canon camera information for 40D (MakerNotes tag 0x0d) (ref PH)
- %Image::ExifTool::Canon::CameraInfo40D = (
- %binaryDataAttrs,
- FORMAT => 'int8u',
- FIRST_ENTRY => 0,
- PRIORITY => 0,
- IS_SUBDIR => [ 0x25b ],
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- NOTES => 'CameraInfo tags for the EOS 40D.',
- 0x03 => { %ciFNumber }, #PH
- 0x04 => { %ciExposureTime }, #PH
- 0x06 => { %ciISO }, #PH
- 0x15 => { #PH (580 EX II)
- Name => 'FlashMeteringMode',
- PrintConv => {
- 0 => 'E-TTL',
- 3 => 'TTL',
- 4 => 'External Auto',
- 5 => 'External Manual',
- 6 => 'Off',
- },
- },
- 0x18 => { %ciCameraTemperature }, #36
- 0x1b => { %ciMacroMagnification }, #PH
- 0x1d => { %ciFocalLength }, #PH
- 0x30 => { #20
- Name => 'CameraOrientation',
- PrintConv => {
- 0 => 'Horizontal (normal)',
- 1 => 'Rotate 90 CW',
- 2 => 'Rotate 270 CW',
- },
- },
- 0x43 => { #21/24
- Name => 'FocusDistanceUpper',
- # this is very odd (little-endian number on odd boundary),
- # but it does seem to work better with my sample images - PH
- %focusDistanceByteSwap,
- },
- 0x45 => { #21/24
- Name => 'FocusDistanceLower',
- %focusDistanceByteSwap,
- },
- 0x6f => { #15
- Name => 'WhiteBalance',
- Format => 'int16u',
- PrintConv => \%canonWhiteBalance,
- SeparateTable => 1,
- },
- 0x73 => { #15
- Name => 'ColorTemperature',
- Format => 'int16u',
- },
- 0xd6 => { #15
- Name => 'LensType',
- Format => 'int16uRev', # value is big-endian
- SeparateTable => 1,
- ValueConvInv => 'int($val)', # (must truncate decimal part)
- PrintConv => \%canonLensTypes,
- },
- 0xd8 => { %ciShortFocal }, #15
- 0xda => { %ciLongFocal }, #15
- 0xff => { #15
- Name => 'FirmwareVersion',
- Format => 'string[6]',
- },
- 0x133 => { #27
- Name => 'FileIndex',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- Notes => 'combined with DirectoryIndex to give the Composite FileNumber tag',
- ValueConv => '$val + 1',
- ValueConvInv => '$val - 1',
- },
- 0x13f => { #27
- Name => 'DirectoryIndex',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- ValueConv => '$val - 1', # yes, minus (opposite to FileIndex)
- ValueConvInv => '$val + 1',
- },
- 0x25b => {
- Name => 'PictureStyleInfo',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::PSInfo',
- },
- },
- 0x92b => { #33
- Name => 'LensModel',
- Format => 'string[64]',
- },
- );
- # Canon camera information for 50D (MakerNotes tag 0x0d)
- # (ref PH unless otherwise noted)
- %Image::ExifTool::Canon::CameraInfo50D = (
- %binaryDataAttrs,
- FORMAT => 'int8u',
- FIRST_ENTRY => 0,
- PRIORITY => 0,
- DATAMEMBER => [ 0x15a, 0x15e ],
- IS_SUBDIR => [ 0x2d3, 0x2d7 ],
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- NOTES => 'CameraInfo tags for the EOS 50D.',
- 0x03 => { %ciFNumber },
- 0x04 => { %ciExposureTime },
- 0x06 => { %ciISO },
- 0x07 => {
- Name => 'HighlightTonePriority',
- PrintConv => { 0 => 'Off', 1 => 'On' },
- },
- 0x15 => { #PH (580 EX II)
- Name => 'FlashMeteringMode',
- PrintConv => {
- 0 => 'E-TTL',
- 3 => 'TTL',
- 4 => 'External Auto',
- 5 => 'External Manual',
- 6 => 'Off',
- },
- },
- 0x19 => { %ciCameraTemperature }, #36
- 0x1e => { %ciFocalLength },
- 0x31 => {
- Name => 'CameraOrientation',
- PrintConv => {
- 0 => 'Horizontal (normal)',
- 1 => 'Rotate 90 CW',
- 2 => 'Rotate 270 CW',
- },
- },
- 0x50 => { #33
- Name => 'FocusDistanceUpper',
- %focusDistanceByteSwap,
- },
- 0x52 => { #33
- Name => 'FocusDistanceLower',
- %focusDistanceByteSwap,
- },
- 0x6f => {
- Name => 'WhiteBalance',
- Format => 'int16u',
- SeparateTable => 1,
- PrintConv => \%canonWhiteBalance,
- },
- 0x73 => { #33
- Name => 'ColorTemperature',
- Format => 'int16u',
- },
- 0xa7 => {
- Name => 'PictureStyle',
- Format => 'int8u',
- Flags => ['PrintHex','SeparateTable'],
- PrintConv => \%pictureStyles,
- },
- 0xbd => {
- Name => 'HighISONoiseReduction',
- PrintConv => {
- 0 => 'Standard',
- 1 => 'Low',
- 2 => 'Strong',
- 3 => 'Off',
- },
- },
- 0xbf => {
- Name => 'AutoLightingOptimizer',
- PrintConv => {
- 0 => 'Standard',
- 1 => 'Low',
- 2 => 'Strong',
- 3 => 'Off',
- },
- },
- 0xea => { #33
- Name => 'LensType',
- Format => 'int16uRev', # value is big-endian
- SeparateTable => 1,
- ValueConvInv => 'int($val)', # (must truncate decimal part)
- PrintConv => \%canonLensTypes,
- },
- 0xec => { %ciShortFocal },
- 0xee => { %ciLongFocal },
- 0x15a => {
- Name => 'FirmwareVersion',
- Format => 'string[6]',
- Notes => 'at this location for firmware 2.6.1',
- Writable => 0,
- RawConv => '$val=~/^\d+\.\d+\.\d+\s*$/ ? $$self{CanonFirmA}=$val : undef',
- },
- 0x15e => { #33
- Name => 'FirmwareVersion',
- Format => 'string[6]',
- Notes => 'at this location for firmware 1.0.2, 1.0.3, 2.9.1 and 3.1.1',
- Writable => 0,
- RawConv => '$val=~/^\d+\.\d+\.\d+\s*$/ ? $$self{CanonFirmB}=$val : undef',
- },
- 0x197 => {
- Name => 'FileIndex',
- Condition => '$$self{CanonFirmA}',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- ValueConv => '$val + 1',
- ValueConvInv => '$val - 1',
- },
- 0x19b => {
- Name => 'FileIndex',
- Condition => '$$self{CanonFirmB}',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- ValueConv => '$val + 1',
- ValueConvInv => '$val - 1',
- },
- 0x1a3 => { #(NC)
- Name => 'DirectoryIndex',
- Condition => '$$self{CanonFirmA}',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- ValueConv => '$val - 1',
- ValueConvInv => '$val + 1',
- },
- 0x1a7 => { #(NC)
- Name => 'DirectoryIndex',
- Condition => '$$self{CanonFirmB}',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- ValueConv => '$val - 1',
- ValueConvInv => '$val + 1',
- },
- 0x2d3 => {
- Name => 'PictureStyleInfo',
- Condition => '$$self{CanonFirmA}',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::PSInfo',
- },
- },
- 0x2d7 => {
- Name => 'PictureStyleInfo',
- Condition => '$$self{CanonFirmB}',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::PSInfo',
- },
- },
- );
- # Canon camera information for 60D (MakerNotes tag 0x0d)
- # (ref PH unless otherwise noted)
- # NOTE: Can probably borrow more 50D tags here, possibly with an offset
- %Image::ExifTool::Canon::CameraInfo60D = (
- %binaryDataAttrs,
- FORMAT => 'int8u',
- FIRST_ENTRY => 0,
- PRIORITY => 0,
- # DATAMEMBER => [ 0x199 ],
- IS_SUBDIR => [ 0x321 ],
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- NOTES => 'CameraInfo tags for the EOS 60D.',
- 0x03 => { %ciFNumber },
- 0x04 => { %ciExposureTime },
- 0x06 => { %ciISO },
- 0x19 => { %ciCameraTemperature },
- 0x1e => { %ciFocalLength },
- 0x36 => {
- Name => 'CameraOrientation',
- PrintConv => {
- 0 => 'Horizontal (normal)',
- 1 => 'Rotate 90 CW',
- 2 => 'Rotate 270 CW',
- },
- },
- 0x55 => {
- Name => 'FocusDistanceUpper',
- %focusDistanceByteSwap,
- },
- 0x57 => {
- Name => 'FocusDistanceLower',
- %focusDistanceByteSwap,
- },
- 0x7d => {
- Name => 'ColorTemperature',
- Format => 'int16u',
- },
- 0xe8 => {
- Name => 'LensType',
- Format => 'int16uRev', # value is big-endian
- SeparateTable => 1,
- ValueConvInv => 'int($val)', # (must truncate decimal part)
- PrintConv => \%canonLensTypes,
- },
- 0xea => { %ciShortFocal },
- 0xec => { %ciLongFocal },
- 0x199 => {
- Name => 'FirmwareVersion',
- Format => 'string[6]',
- # Notes => 'at this location for firmware 2.8.1 and 1.0.5',
- Writable => 0,
- # RawConv => '$val=~/^\d+\.\d+\.\d+\s*$/ ? $$self{CanonFirmA}=$val : undef',
- },
- 0x1d9 => {
- Name => 'FileIndex',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- ValueConv => '$val + 1',
- ValueConvInv => '$val - 1',
- },
- 0x1e5 => { #(NC)
- Name => 'DirectoryIndex',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- ValueConv => '$val - 1',
- ValueConvInv => '$val + 1',
- },
- 0x321 => {
- Name => 'PictureStyleInfo2',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::PSInfo2',
- },
- },
- );
- # Canon camera information for 450D (MakerNotes tag 0x0d) (ref PH)
- %Image::ExifTool::Canon::CameraInfo450D = (
- %binaryDataAttrs,
- FORMAT => 'int8u',
- FIRST_ENTRY => 0,
- PRIORITY => 0,
- IS_SUBDIR => [ 0x263 ],
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- NOTES => 'CameraInfo tags for the EOS 450D.',
- 0x03 => { %ciFNumber }, #PH
- 0x04 => { %ciExposureTime }, #PH
- 0x06 => { %ciISO }, #PH
- 0x15 => { #PH (580 EX II)
- Name => 'FlashMeteringMode',
- PrintConv => {
- 0 => 'E-TTL',
- 3 => 'TTL',
- 4 => 'External Auto',
- 5 => 'External Manual',
- 6 => 'Off',
- },
- },
- 0x18 => { %ciCameraTemperature }, #36
- 0x1b => { %ciMacroMagnification }, #PH
- 0x1d => { %ciFocalLength }, #PH
- 0x30 => { #20
- Name => 'CameraOrientation',
- PrintConv => {
- 0 => 'Horizontal (normal)',
- 1 => 'Rotate 90 CW',
- 2 => 'Rotate 270 CW',
- },
- },
- 0x43 => { #20
- Name => 'FocusDistanceUpper',
- # this is very odd (little-endian number on odd boundary),
- # but it does seem to work better with my sample images - PH
- %focusDistanceByteSwap,
- },
- 0x45 => { #20
- Name => 'FocusDistanceLower',
- %focusDistanceByteSwap,
- },
- 0x6f => { #PH
- Name => 'WhiteBalance',
- Format => 'int16u',
- PrintConv => \%canonWhiteBalance,
- SeparateTable => 1,
- },
- 0x73 => { #PH
- Name => 'ColorTemperature',
- Format => 'int16u',
- },
- 0xde => { #33
- Name => 'LensType',
- Format => 'int16uRev', # value is big-endian
- SeparateTable => 1,
- ValueConvInv => 'int($val)', # (must truncate decimal part)
- PrintConv => \%canonLensTypes,
- },
- 0x107 => { #PH
- Name => 'FirmwareVersion',
- Format => 'string[6]',
- },
- 0x10f => { #20
- Name => 'OwnerName',
- Format => 'string[32]',
- },
- 0x133 => { #20
- Name => 'DirectoryIndex',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- },
- 0x13f => { #20
- Name => 'FileIndex',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- ValueConv => '$val + 1',
- ValueConvInv => '$val - 1',
- },
- 0x263 => { #PH
- Name => 'PictureStyleInfo',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::PSInfo',
- },
- },
- 0x933 => { #33
- Name => 'LensModel',
- Format => 'string[64]',
- },
- );
- # Canon camera information for 500D (MakerNotes tag 0x0d) (ref PH)
- %Image::ExifTool::Canon::CameraInfo500D = (
- %binaryDataAttrs,
- FORMAT => 'int8u',
- FIRST_ENTRY => 0,
- PRIORITY => 0,
- IS_SUBDIR => [ 0x30b ],
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- NOTES => 'CameraInfo tags for the EOS 500D.',
- 0x03 => { %ciFNumber },
- 0x04 => { %ciExposureTime },
- 0x06 => { %ciISO },
- 0x07 => {
- Name => 'HighlightTonePriority',
- PrintConv => { 0 => 'Off', 1 => 'On' },
- },
- 0x15 => { #PH (580 EX II)
- Name => 'FlashMeteringMode',
- PrintConv => {
- 0 => 'E-TTL',
- 3 => 'TTL',
- 4 => 'External Auto',
- 5 => 'External Manual',
- 6 => 'Off',
- },
- },
- 0x19 => { %ciCameraTemperature },
- 0x1e => { %ciFocalLength },
- 0x31 => {
- Name => 'CameraOrientation',
- PrintConv => {
- 0 => 'Horizontal (normal)',
- 1 => 'Rotate 90 CW',
- 2 => 'Rotate 270 CW',
- },
- },
- 0x50 => {
- Name => 'FocusDistanceUpper',
- %focusDistanceByteSwap,
- },
- 0x52 => {
- Name => 'FocusDistanceLower',
- %focusDistanceByteSwap,
- },
- 0x73 => { # (50D + 4)
- Name => 'WhiteBalance',
- Format => 'int16u',
- SeparateTable => 1,
- PrintConv => \%canonWhiteBalance,
- },
- 0x77 => { # (50D + 4)
- Name => 'ColorTemperature',
- Format => 'int16u',
- },
- 0xab => { # (50D + 4)
- Name => 'PictureStyle',
- Format => 'int8u',
- Flags => ['PrintHex','SeparateTable'],
- PrintConv => \%pictureStyles,
- },
- 0xbc => {
- Name => 'HighISONoiseReduction',
- PrintConv => {
- 0 => 'Standard',
- 1 => 'Low',
- 2 => 'Strong',
- 3 => 'Off',
- },
- },
- 0xbe => {
- Name => 'AutoLightingOptimizer',
- PrintConv => {
- 0 => 'Standard',
- 1 => 'Low',
- 2 => 'Strong',
- 3 => 'Off',
- },
- },
- 0xf6 => {
- Name => 'LensType',
- Format => 'int16uRev', # value is big-endian
- SeparateTable => 1,
- ValueConvInv => 'int($val)', # (must truncate decimal part)
- PrintConv => \%canonLensTypes,
- },
- 0xf8 => { %ciShortFocal },
- 0xfa => { %ciLongFocal },
- 0x190 => {
- Name => 'FirmwareVersion',
- Format => 'string[6]',
- Writable => 0,
- RawConv => '$val=~/^\d+\.\d+\.\d+\s*$/ ? $val : undef',
- },
- 0x1d3 => {
- Name => 'FileIndex',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- ValueConv => '$val + 1',
- ValueConvInv => '$val - 1',
- },
- 0x1df => { #(NC)
- Name => 'DirectoryIndex',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- ValueConv => '$val - 1',
- ValueConvInv => '$val + 1',
- },
- 0x30b => {
- Name => 'PictureStyleInfo',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::PSInfo',
- },
- },
- );
- # Canon camera information for 550D (MakerNotes tag 0x0d) (ref PH)
- %Image::ExifTool::Canon::CameraInfo550D = (
- %binaryDataAttrs,
- FORMAT => 'int8u',
- FIRST_ENTRY => 0,
- PRIORITY => 0,
- IS_SUBDIR => [ 0x31c ],
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- NOTES => 'CameraInfo tags for the EOS 550D.',
- 0x03 => { %ciFNumber },
- 0x04 => { %ciExposureTime },
- 0x06 => { %ciISO },
- 0x07 => { #(NC)
- Name => 'HighlightTonePriority',
- PrintConv => { 0 => 'Off', 1 => 'On' },
- },
- 0x15 => { #(NC)
- Name => 'FlashMeteringMode',
- PrintConv => {
- 0 => 'E-TTL',
- 3 => 'TTL',
- 4 => 'External Auto',
- 5 => 'External Manual',
- 6 => 'Off',
- },
- },
- 0x19 => { %ciCameraTemperature }, # (500D + 0)
- 0x1e => { %ciFocalLength }, # (500D + 0)
- 0x35 => { # (500D + 4)
- Name => 'CameraOrientation',
- PrintConv => {
- 0 => 'Horizontal (normal)',
- 1 => 'Rotate 90 CW',
- 2 => 'Rotate 270 CW',
- },
- },
- 0x54 => { # (500D + 4)
- Name => 'FocusDistanceUpper',
- %focusDistanceByteSwap,
- },
- 0x56 => { # (500D + 4)
- Name => 'FocusDistanceLower',
- %focusDistanceByteSwap,
- },
- 0x78 => { # (500D + 5) (NC)
- Name => 'WhiteBalance',
- Format => 'int16u',
- SeparateTable => 1,
- PrintConv => \%canonWhiteBalance,
- },
- 0x7c => { # (500D + 5)
- Name => 'ColorTemperature',
- Format => 'int16u',
- },
- 0xb0 => { # (500D + 5)
- Name => 'PictureStyle',
- Format => 'int8u',
- Flags => ['PrintHex','SeparateTable'],
- PrintConv => \%pictureStyles,
- },
- 0xff => { # (500D + 9)
- Name => 'LensType',
- Format => 'int16uRev', # value is big-endian
- SeparateTable => 1,
- ValueConvInv => 'int($val)', # (must truncate decimal part)
- PrintConv => \%canonLensTypes,
- },
- 0x101 => { %ciShortFocal }, # (500D + 9)
- 0x103 => { %ciLongFocal }, # (500D + 9)
- 0x1a4 => { # (500D + 0x11)
- Name => 'FirmwareVersion',
- Format => 'string[6]',
- Writable => 0,
- RawConv => '$val=~/^\d+\.\d+\.\d+\s*$/ ? $val : undef',
- },
- 0x1e4 => { # (500D + 0x11)
- Name => 'FileIndex',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- ValueConv => '$val + 1',
- ValueConvInv => '$val - 1',
- },
- 0x1f0 => { # (500D + 0x11) (NC)
- Name => 'DirectoryIndex',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- ValueConv => '$val - 1',
- ValueConvInv => '$val + 1',
- },
- 0x31c => { #48
- Name => 'PictureStyleInfo',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::PSInfo',
- },
- },
- );
- # Canon camera information for 600D and 1100D (MakerNotes tag 0x0d) (ref PH)
- %Image::ExifTool::Canon::CameraInfo600D = (
- %binaryDataAttrs,
- FORMAT => 'int8u',
- FIRST_ENTRY => 0,
- PRIORITY => 0,
- IS_SUBDIR => [ 0x2fb ],
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- NOTES => 'CameraInfo tags for the EOS 600D and 1100D.',
- 0x03 => { %ciFNumber },
- 0x04 => { %ciExposureTime },
- 0x06 => { %ciISO },
- 0x07 => { #(NC)
- Name => 'HighlightTonePriority',
- PrintConv => { 0 => 'Off', 1 => 'On' },
- },
- 0x15 => { #(NC)
- Name => 'FlashMeteringMode',
- PrintConv => {
- 0 => 'E-TTL',
- 3 => 'TTL',
- 4 => 'External Auto',
- 5 => 'External Manual',
- 6 => 'Off',
- },
- },
- 0x19 => { %ciCameraTemperature }, # (60D + 0)
- 0x1e => { %ciFocalLength }, # (60D + 0)
- 0x38 => { # (60D + 2)
- Name => 'CameraOrientation',
- PrintConv => {
- 0 => 'Horizontal (normal)',
- 1 => 'Rotate 90 CW',
- 2 => 'Rotate 270 CW',
- },
- },
- 0x57 => { # (60D + 2, 550D + 3)
- Name => 'FocusDistanceUpper',
- %focusDistanceByteSwap,
- },
- 0x59 => { # (60D + 2, 550D + 3)
- Name => 'FocusDistanceLower',
- %focusDistanceByteSwap,
- },
- 0x7b => { # (550D + 3)
- Name => 'WhiteBalance',
- Format => 'int16u',
- SeparateTable => 1,
- PrintConv => \%canonWhiteBalance,
- },
- 0x7f => { # (60D + 2, 550D + 3)
- Name => 'ColorTemperature',
- Format => 'int16u',
- },
- 0xb3 => { # (550D + 3)
- Name => 'PictureStyle',
- Format => 'int8u',
- Flags => ['PrintHex','SeparateTable'],
- PrintConv => \%pictureStyles,
- },
- 0xea => { # (60D + 2, 550D + 3)
- Name => 'LensType',
- Format => 'int16uRev', # value is big-endian
- SeparateTable => 1,
- ValueConvInv => 'int($val)', # (must truncate decimal part)
- PrintConv => \%canonLensTypes,
- },
- 0xec => { %ciShortFocal }, # (60D + 2)
- 0xee => { %ciLongFocal }, # (60D + 2)
- 0x19b => { # (60D + 2)
- Name => 'FirmwareVersion',
- Format => 'string[6]',
- Writable => 0,
- RawConv => '$val=~/^\d+\.\d+\.\d+\s*$/ ? $val : undef',
- },
- 0x1db => { # (60D + 2) (NC)
- Name => 'FileIndex',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- ValueConv => '$val + 1',
- ValueConvInv => '$val - 1',
- },
- 0x1e7 => { # (60D + 2) (NC)
- Name => 'DirectoryIndex',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- ValueConv => '$val - 1',
- ValueConvInv => '$val + 1',
- },
- 0x2fb => {
- Name => 'PictureStyleInfo',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::PSInfo2',
- },
- },
- );
- # Canon camera information for 1000D (MakerNotes tag 0x0d) (ref PH)
- %Image::ExifTool::Canon::CameraInfo1000D = (
- %binaryDataAttrs,
- FORMAT => 'int8u',
- FIRST_ENTRY => 0,
- PRIORITY => 0,
- IS_SUBDIR => [ 0x267 ],
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- NOTES => 'CameraInfo tags for the EOS 1000D.',
- 0x03 => { %ciFNumber }, #PH
- 0x04 => { %ciExposureTime }, #PH
- 0x06 => { %ciISO }, #PH
- 0x15 => { #PH (580 EX II)
- Name => 'FlashMeteringMode',
- PrintConv => {
- 0 => 'E-TTL',
- 3 => 'TTL',
- 4 => 'External Auto',
- 5 => 'External Manual',
- 6 => 'Off',
- },
- },
- 0x18 => { %ciCameraTemperature }, #36
- 0x1b => { %ciMacroMagnification }, #PH (NC)
- 0x1d => { %ciFocalLength }, #PH
- 0x30 => { #20
- Name => 'CameraOrientation',
- PrintConv => {
- 0 => 'Horizontal (normal)',
- 1 => 'Rotate 90 CW',
- 2 => 'Rotate 270 CW',
- },
- },
- 0x43 => { #20
- Name => 'FocusDistanceUpper',
- %focusDistanceByteSwap,
- },
- 0x45 => { #20
- Name => 'FocusDistanceLower',
- %focusDistanceByteSwap,
- },
- 0x6f => { #PH
- Name => 'WhiteBalance',
- Format => 'int16u',
- PrintConv => \%canonWhiteBalance,
- SeparateTable => 1,
- },
- 0x73 => { #PH
- Name => 'ColorTemperature',
- Format => 'int16u',
- },
- 0xe2 => { #PH
- Name => 'LensType',
- Format => 'int16uRev', # value is big-endian
- SeparateTable => 1,
- ValueConvInv => 'int($val)', # (must truncate decimal part)
- PrintConv => \%canonLensTypes,
- },
- 0xe4 => { %ciShortFocal }, #PH
- 0xe6 => { %ciLongFocal }, #PH
- 0x10b => { #PH
- Name => 'FirmwareVersion',
- Format => 'string[6]',
- },
- 0x137 => { #PH (NC)
- Name => 'DirectoryIndex',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- },
- 0x143 => { #PH
- Name => 'FileIndex',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- ValueConv => '$val + 1',
- ValueConvInv => '$val - 1',
- },
- 0x267 => { #PH
- Name => 'PictureStyleInfo',
- SubDirectory => {
- TagTable => 'Image::ExifTool::Canon::PSInfo',
- },
- },
- 0x937 => { #PH
- Name => 'LensModel',
- Format => 'string[64]',
- },
- );
- # Canon camera information for PowerShot models (MakerNotes tag 0x0d) - PH
- %Image::ExifTool::Canon::CameraInfoPowerShot = (
- %binaryDataAttrs,
- FORMAT => 'int32s',
- FIRST_ENTRY => 0,
- PRIORITY => 0,
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- NOTES => q{
- CameraInfo tags for PowerShot models such as the A450, A460, A550, A560,
- A570, A630, A640, A650, A710, A720, G7, G9, S5, SD40, SD750, SD800, SD850,
- SD870, SD900, SD950, SD1000, SX100 and TX1.
- },
- 0x00 => {
- Name => 'ISO',
- Groups => { 2 => 'Image' },
- ValueConv => '100*exp((($val-411)/96)*log(2))',
- ValueConvInv => 'log($val/100)/log(2)*96+411',
- PrintConv => 'sprintf("%.0f",$val)',
- PrintConvInv => '$val',
- },
- 0x05 => {
- Name => 'FNumber',
- Groups => { 2 => 'Image' },
- ValueConv => 'exp($val/192*log(2))',
- ValueConvInv => 'log($val)*192/log(2)',
- PrintConv => 'sprintf("%.2g",$val)',
- PrintConvInv => '$val',
- },
- 0x06 => {
- Name => 'ExposureTime',
- Groups => { 2 => 'Image' },
- ValueConv => 'exp(-$val/96*log(2))',
- ValueConvInv => '-log($val)*96/log(2)',
- PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
- PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
- },
- 0x17 => 'Rotation', # usually the same as Orientation (but not always! why?)
- # 0x25 - flash fired/not fired (ref 37)
- # 0x26 - related to flash mode? (ref 37)
- # 0x37 - related to flash strength (ref 37)
- # 0x38 - pre-flash fired/no fired or flash data collection (ref 37)
- 135 => { # [-3] <-- index relative to CameraInfoCount
- Name => 'CameraTemperature',
- Condition => '$$self{CameraInfoCount} == 138',
- Notes => 'A450, A460, A550, A630, A640 and A710',
- PrintConv => '"$val C"',
- PrintConvInv => '$val=~s/ ?C//; $val',
- },
- 145 => { #37 [-3]
- Name => 'CameraTemperature',
- Condition => '$$self{CameraInfoCount} == 148',
- Notes => q{
- A560, A570, A650, A720, G7, G9, S5, SD40, SD750, SD800, SD850, SD870, SD900,
- SD950, SD1000, SX100 and TX1
- },
- PrintConv => '"$val C"',
- PrintConvInv => '$val=~s/ ?C//; $val',
- },
- );
- # Canon camera information for some PowerShot models (MakerNotes tag 0x0d) - PH
- %Image::ExifTool::Canon::CameraInfoPowerShot2 = (
- %binaryDataAttrs,
- FORMAT => 'int32s',
- FIRST_ENTRY => 0,
- PRIORITY => 0,
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- NOTES => q{
- CameraInfo tags for PowerShot models such as the A470, A480, A490, A495,
- A580, A590, A1000, A1100, A2000, A2100, A3000, A3100, D10, E1, G10, G11,
- S90, S95, SD770, SD780, SD790, SD880, SD890, SD940, SD960, SD970, SD980,
- SD990, SD1100, SD1200, SD1300, SD1400, SD3500, SD4000, SD4500, SX1, SX10,
- SX20, SX110, SX120, SX130, SX200 and SX210.
- },
- 0x01 => {
- Name => 'ISO',
- Groups => { 2 => 'Image' },
- ValueConv => '100*exp((($val-411)/96)*log(2))',
- ValueConvInv => 'log($val/100)/log(2)*96+411',
- PrintConv => 'sprintf("%.0f",$val)',
- PrintConvInv => '$val',
- },
- 0x06 => {
- Name => 'FNumber',
- Groups => { 2 => 'Image' },
- ValueConv => 'exp($val/192*log(2))',
- ValueConvInv => 'log($val)*192/log(2)',
- PrintConv => 'sprintf("%.2g",$val)',
- PrintConvInv => '$val',
- },
- 0x07 => {
- Name => 'ExposureTime',
- Groups => { 2 => 'Image' },
- ValueConv => 'exp(-$val/96*log(2))',
- ValueConvInv => '-log($val)*96/log(2)',
- PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
- PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
- },
- 0x18 => 'Rotation',
- 153 => { # [-3] <-- index relative to CameraInfoCount
- Name => 'CameraTemperature',
- Condition => '$$self{CameraInfoCount} == 156',
- Notes => 'A470, A580, A590, SD770, SD790, SD890 and SD1100',
- PrintConv => '"$val C"',
- PrintConvInv => '$val=~s/ ?C//; $val',
- },
- 159 => { # [-3]
- Name => 'CameraTemperature',
- Condition => '$$self{CameraInfoCount} == 162',
- Notes => 'A1000, A2000, E1, G10, SD880, SD990, SX1, SX10 and SX110',
- PrintConv => '"$val C"',
- PrintConvInv => '$val=~s/ ?C//; $val',
- },
- 164 => { # [-3]
- Name => 'CameraTemperature',
- Condition => '$$self{CameraInfoCount} == 167',
- Notes => 'A480, A1100, A2100, D10, SD780, SD960, SD970, SD1200 and SX200',
- PrintConv => '"$val C"',
- PrintConvInv => '$val=~s/ ?C//; $val',
- },
- 168 => { # [-3]
- Name => 'CameraTemperature',
- Condition => '$$self{CameraInfoCount} == 171',
- Notes => q{
- A490, A495, A3000, A3100, G11, S90, SD940, SD980, SD1300, SD1400, SD3500,
- SD4000, SX20, SX120 and SX210
- },
- PrintConv => '"$val C"',
- PrintConvInv => '$val=~s/ ?C//; $val',
- },
- 261 => { # [-3]
- Name => 'CameraTemperature',
- Condition => '$$self{CameraInfoCount} == 264',
- Notes => 'S95, SD4500 and SX130',
- PrintConv => '"$val C"',
- PrintConvInv => '$val=~s/ ?C//; $val',
- },
- );
- # unknown Canon camera information (MakerNotes tag 0x0d) - PH
- %Image::ExifTool::Canon::CameraInfoUnknown32 = (
- %binaryDataAttrs,
- FORMAT => 'int32s',
- FIRST_ENTRY => 0,
- PRIORITY => 0,
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- NOTES => 'Unknown CameraInfo tags are divided into 3 tables based on format size.',
- # This tag may be uncommented, and is useful for generating
- # lists of models in the "Notes" below...
- # 0 => {
- # Name => 'CameraInfoCount',
- # ValueConv => '$$self{CameraInfoCount}',
- # },
- 71 => { # [-1] <-- index relative to CameraInfoCount
- Name => 'CameraTemperature',
- Condition => '$$self{CameraInfoCount} == 72',
- Notes => 'S1',
- PrintConv => '"$val C"',
- PrintConvInv => '$val=~s/ ?C//; $val',
- },
- 83 => { # [-2]
- Name => 'CameraTemperature',
- Condition => '$$self{CameraInfoCount} == 85',
- Notes => 'S2',
- PrintConv => '"$val C"',
- PrintConvInv => '$val=~s/ ?C//; $val',
- },
- 91 => { # [-2 or -3]
- Name => 'CameraTemperature',
- Condition => '$$self{CameraInfoCount} == 93 or $$self{CameraInfoCount} == 94',
- Notes => 'A410, A610, A620, S80, SD30, SD400, SD430, SD450, SD500 and SD550',
- PrintConv => '"$val C"',
- PrintConvInv => '$val=~s/ ?C//; $val',
- },
- 92 => { # [-4]
- Name => 'CameraTemperature',
- Condition => '$$self{CameraInfoCount} == 96',
- Notes => 'S3',
- PrintConv => '"$val C"',
- PrintConvInv => '$val=~s/ ?C//; $val',
- },
- 100 => { # [-4]
- Name => 'CameraTemperature',
- Condition => '$$self{CameraInfoCount} == 104',
- Notes => 'A420, A430, A530, A540, A700, SD600, SD630 and SD700',
- PrintConv => '"$val C"',
- PrintConvInv => '$val=~s/ ?C//; $val',
- },
- 466 => { # [-3]
- Name => 'CameraTemperature',
- Condition => '$$self{CameraInfoCount} == 469',
- Notes => '100HS, 300HS, 500HS, A1200, A2200, A3200 and A3300',
- PrintConv => '"$val C"',
- PrintConvInv => '$val=~s/ ?C//; $val',
- },
- 503 => { # [-3]
- Name => 'CameraTemperature',
- Condition => '$$self{CameraInfoCount} == 506',
- Notes => 'A800',
- PrintConv => '"$val C"',
- PrintConvInv => '$val=~s/ ?C//; $val',
- },
- 506 => { # [-3]
- Name => 'CameraTemperature',
- Condition => '$$self{CameraInfoCount} == 509',
- Notes => 'SX230HS',
- PrintConv => '"$val C"',
- PrintConvInv => '$val=~s/ ?C//; $val',
- },
- 520 => { # [-3]
- Name => 'CameraTemperature',
- Condition => '$$self{CameraInfoCount} == 523',
- Notes => '310HS, 510HS, G1X, S100 (new), SX40HS and SX150',
- PrintConv => '"$val C"',
- PrintConvInv => '$val=~s/ ?C//; $val',
- },
- 524 => { # [-3]
- Name => 'CameraTemperature',
- Condition => '$$self{CameraInfoCount} == 527',
- Notes => '110HS, 520HS, A2300, A2400, A3400, A4000, D20 and SX260HS',
- PrintConv => '"$val C"',
- PrintConvInv => '$val=~s/ ?C//; $val',
- },
- );
- # unknown Canon camera information (MakerNotes tag 0x0d) - PH
- %Image::ExifTool::Canon::CameraInfoUnknown16 = (
- %binaryDataAttrs,
- FORMAT => 'int16s',
- FIRST_ENTRY => 0,
- PRIORITY => 0,
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- );
- # unknown Canon camera information (MakerNotes tag 0x0d) - PH
- %Image::ExifTool::Canon::CameraInfoUnknown = (
- %binaryDataAttrs,
- FORMAT => 'int8s',
- FIRST_ENTRY => 0,
- PRIORITY => 0,
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- );
- # Picture Style information for various cameras (ref 48)
- %Image::ExifTool::Canon::PSInfo = (
- %binaryDataAttrs,
- FIRST_ENTRY => 0,
- PRIORITY => 0,
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- NOTES => 'Custom picture style information for various models.',
- # (values expected to be "n/a" are flagged as Unknown)
- 0x00 => { Name => 'ContrastStandard', %psInfo },
- 0x04 => { Name => 'SharpnessStandard', %psInfo },
- 0x08 => { Name => 'SaturationStandard', %psInfo },
- 0x0c => { Name => 'ColorToneStandard', %psInfo },
- 0x10 => { Name => 'FilterEffectStandard', %psInfo, Unknown => 1 },
- 0x14 => { Name => 'ToningEffectStandard', %psInfo, Unknown => 1 },
- 0x18 => { Name => 'ContrastPortrait', %psInfo },
- 0x1c => { Name => 'SharpnessPortrait', %psInfo },
- 0x20 => { Name => 'SaturationPortrait', %psInfo },
- 0x24 => { Name => 'ColorTonePortrait', %psInfo },
- 0x28 => { Name => 'FilterEffectPortrait', %psInfo, Unknown => 1 },
- 0x2c => { Name => 'ToningEffectPortrait', %psInfo, Unknown => 1 },
- 0x30 => { Name => 'ContrastLandscape', %psInfo },
- 0x34 => { Name => 'SharpnessLandscape', %psInfo },
- 0x38 => { Name => 'SaturationLandscape', %psInfo },
- 0x3c => { Name => 'ColorToneLandscape', %psInfo },
- 0x40 => { Name => 'FilterEffectLandscape', %psInfo, Unknown => 1 },
- 0x44 => { Name => 'ToningEffectLandscape', %psInfo, Unknown => 1 },
- 0x48 => { Name => 'ContrastNeutral', %psInfo },
- 0x4c => { Name => 'SharpnessNeutral', %psInfo },
- 0x50 => { Name => 'SaturationNeutral', %psInfo },
- 0x54 => { Name => 'ColorToneNeutral', %psInfo },
- 0x58 => { Name => 'FilterEffectNeutral', %psInfo, Unknown => 1 },
- 0x5c => { Name => 'ToningEffectNeutral', %psInfo, Unknown => 1 },
- 0x60 => { Name => 'ContrastFaithful', %psInfo },
- 0x64 => { Name => 'SharpnessFaithful', %psInfo },
- 0x68 => { Name => 'SaturationFaithful', %psInfo },
- 0x6c => { Name => 'ColorToneFaithful', %psInfo },
- 0x70 => { Name => 'FilterEffectFaithful', %psInfo, Unknown => 1 },
- 0x74 => { Name => 'ToningEffectFaithful', %psInfo, Unknown => 1 },
- 0x78 => { Name => 'ContrastMonochrome', %psInfo },
- 0x7c => { Name => 'SharpnessMonochrome', %psInfo },
- 0x80 => { Name => 'SaturationMonochrome', %psInfo, Unknown => 1 },
- 0x84 => { Name => 'ColorToneMonochrome', %psInfo, Unknown => 1 },
- 0x88 => { Name => 'FilterEffectMonochrome',%psInfo,
- PrintConv => {
- 0 => 'None',
- 1 => 'Yellow',
- 2 => 'Orange',
- 3 => 'Red',
- 4 => 'Green',
- -559038737 => 'n/a', # (0xdeadbeef)
- },
- },
- 0x8c => { Name => 'ToningEffectMonochrome',%psInfo,
- PrintConv => {
- 0 => 'None',
- 1 => 'Sepia',
- 2 => 'Blue',
- 3 => 'Purple',
- 4 => 'Green',
- -559038737 => 'n/a', # (0xdeadbeef)
- },
- },
- 0x90 => { Name => 'ContrastUserDef1', %psInfo },
- 0x94 => { Name => 'SharpnessUserDef1', %psInfo },
- 0x98 => { Name => 'SaturationUserDef1', %psInfo },
- 0x9c => { Name => 'ColorToneUserDef1', %psInfo },
- 0xa0 => { Name => 'FilterEffectUserDef1', %psInfo,
- PrintConv => {
- 0 => 'None',
- 1 => 'Yellow',
- 2 => 'Orange',
- 3 => 'Red',
- 4 => 'Green',
- -559038737 => 'n/a', # (0xdeadbeef)
- },
- },
- 0xa4 => { Name => 'ToningEffectUserDef1', %psInfo,
- PrintConv => {
- 0 => 'None',
- 1 => 'Sepia',
- 2 => 'Blue',
- 3 => 'Purple',
- 4 => 'Green',
- -559038737 => 'n/a', # (0xdeadbeef)
- },
- },
- 0xa8 => { Name => 'ContrastUserDef2', %psInfo },
- 0xac => { Name => 'SharpnessUserDef2', %psInfo },
- 0xb0 => { Name => 'SaturationUserDef2', %psInfo },
- 0xb4 => { Name => 'ColorToneUserDef2', %psInfo },
- 0xb8 => { Name => 'FilterEffectUserDef2', %psInfo,
- PrintConv => {
- 0 => 'None',
- 1 => 'Yellow',
- 2 => 'Orange',
- 3 => 'Red',
- 4 => 'Green',
- -559038737 => 'n/a', # (0xdeadbeef)
- },
- },
- 0xbc => { Name => 'ToningEffectUserDef2', %psInfo,
- PrintConv => {
- 0 => 'None',
- 1 => 'Sepia',
- 2 => 'Blue',
- 3 => 'Purple',
- 4 => 'Green',
- -559038737 => 'n/a', # (0xdeadbeef)
- },
- },
- 0xc0 => { Name => 'ContrastUserDef3', %psInfo },
- 0xc4 => { Name => 'SharpnessUserDef3', %psInfo },
- 0xc8 => { Name => 'SaturationUserDef3', %psInfo },
- 0xcc => { Name => 'ColorToneUserDef3', %psInfo },
- 0xd0 => { Name => 'FilterEffectUserDef3', %psInfo,
- PrintConv => {
- 0 => 'None',
- 1 => 'Yellow',
- 2 => 'Orange',
- 3 => 'Red',
- 4 => 'Green',
- -559038737 => 'n/a', # (0xdeadbeef)
- },
- },
- 0xd4 => { Name => 'ToningEffectUserDef3', %psInfo,
- PrintConv => {
- 0 => 'None',
- 1 => 'Sepia',
- 2 => 'Blue',
- 3 => 'Purple',
- 4 => 'Green',
- -559038737 => 'n/a', # (0xdeadbeef)
- },
- },
- # base picture style names:
- 0xd8 => {
- Name => 'UserDef1PictureStyle',
- Format => 'int16u',
- SeparateTable => 'UserDefStyle',
- PrintConv => \%userDefStyles,
- },
- 0xda => {
- Name => 'UserDef2PictureStyle',
- Format => 'int16u',
- SeparateTable => 'UserDefStyle',
- PrintConv => \%userDefStyles,
- },
- 0xdc => {
- Name => 'UserDef3PictureStyle',
- Format => 'int16u',
- SeparateTable => 'UserDefStyle',
- PrintConv => \%userDefStyles,
- },
- );
- # Picture Style information for the 60D (ref 48)
- %Image::ExifTool::Canon::PSInfo2 = (
- %binaryDataAttrs,
- FIRST_ENTRY => 0,
- PRIORITY => 0,
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- NOTES => 'Custom picture style information for the EOS 60D.',
- # (values expected to be "n/a" are flagged as Unknown)
- 0x00 => { Name => 'ContrastStandard', %psInfo },
- 0x04 => { Name => 'SharpnessStandard', %psInfo },
- 0x08 => { Name => 'SaturationStandard', %psInfo },
- 0x0c => { Name => 'ColorToneStandard', %psInfo },
- 0x10 => { Name => 'FilterEffectStandard', %psInfo, Unknown => 1 },
- 0x14 => { Name => 'ToningEffectStandard', %psInfo, Unknown => 1 },
- 0x18 => { Name => 'ContrastPortrait', %psInfo },
- 0x1c => { Name => 'SharpnessPortrait', %psInfo },
- 0x20 => { Name => 'SaturationPortrait', %psInfo },
- 0x24 => { Name => 'ColorTonePortrait', %psInfo },
- 0x28 => { Name => 'FilterEffectPortrait', %psInfo, Unknown => 1 },
- 0x2c => { Name => 'ToningEffectPortrait', %psInfo, Unknown => 1 },
- 0x30 => { Name => 'ContrastLandscape', %psInfo },
- 0x34 => { Name => 'SharpnessLandscape', %psInfo },
- 0x38 => { Name => 'SaturationLandscape', %psInfo },
- 0x3c => { Name => 'ColorToneLandscape', %psInfo },
- 0x40 => { Name => 'FilterEffectLandscape', %psInfo, Unknown => 1 },
- 0x44 => { Name => 'ToningEffectLandscape', %psInfo, Unknown => 1 },
- 0x48 => { Name => 'ContrastNeutral', %psInfo },
- 0x4c => { Name => 'SharpnessNeutral', %psInfo },
- 0x50 => { Name => 'SaturationNeutral', %psInfo },
- 0x54 => { Name => 'ColorToneNeutral', %psInfo },
- 0x58 => { Name => 'FilterEffectNeutral', %psInfo, Unknown => 1 },
- 0x5c => { Name => 'ToningEffectNeutral', %psInfo, Unknown => 1 },
- 0x60 => { Name => 'ContrastFaithful', %psInfo },
- 0x64 => { Name => 'SharpnessFaithful', %psInfo },
- 0x68 => { Name => 'SaturationFaithful', %psInfo },
- 0x6c => { Name => 'ColorToneFaithful', %psInfo },
- 0x70 => { Name => 'FilterEffectFaithful', %psInfo, Unknown => 1 },
- 0x74 => { Name => 'ToningEffectFaithful', %psInfo, Unknown => 1 },
- 0x78 => { Name => 'ContrastMonochrome', %psInfo },
- 0x7c => { Name => 'SharpnessMonochrome', %psInfo },
- 0x80 => { Name => 'SaturationMonochrome', %psInfo, Unknown => 1 },
- 0x84 => { Name => 'ColorToneMonochrome', %psInfo, Unknown => 1 },
- 0x88 => { Name => 'FilterEffectMonochrome',%psInfo,
- PrintConv => {
- 0 => 'None',
- 1 => 'Yellow',
- 2 => 'Orange',
- 3 => 'Red',
- 4 => 'Green',
- -559038737 => 'n/a', # (0xdeadbeef)
- },
- },
- 0x8c => { Name => 'ToningEffectMonochrome',%psInfo,
- PrintConv => {
- 0 => 'None',
- 1 => 'Sepia',
- 2 => 'Blue',
- 3 => 'Purple',
- 4 => 'Green',
- -559038737 => 'n/a', # (0xdeadbeef)
- },
- },
- 0x90 => { Name => 'ContrastUnknown', %psInfo, Unknown => 1 },
- 0x94 => { Name => 'SharpnessUnknown', %psInfo, Unknown => 1 },
- 0x98 => { Name => 'SaturationUnknown', %psInfo, Unknown => 1 },
- 0x9c => { Name => 'ColorToneUnknown', %psInfo, Unknown => 1 },
- 0xa0 => { Name => 'FilterEffectUnknown', %psInfo, Unknown => 1,
- PrintConv => {
- 0 => 'None',
- 1 => 'Yellow',
- 2 => 'Orange',
- 3 => 'Red',
- 4 => 'Green',
- -559038737 => 'n/a', # (0xdeadbeef)
- },
- },
- 0xa4 => { Name => 'ToningEffectUnknown', %psInfo, Unknown => 1,
- PrintConv => {
- 0 => 'None',
- 1 => 'Sepia',
- 2 => 'Blue',
- 3 => 'Purple',
- 4 => 'Green',
- -559038737 => 'n/a', # (0xdeadbeef)
- },
- },
- 0xa8 => { Name => 'ContrastUserDef1', %psInfo },
- 0xac => { Name => 'SharpnessUserDef1', %psInfo },
- 0xb0 => { Name => 'SaturationUserDef1', %psInfo },
- 0xb4 => { Name => 'ColorToneUserDef1', %psInfo },
- 0xb8 => { Name => 'FilterEffectUserDef1', %psInfo,
- PrintConv => {
- 0 => 'None',
- 1 => 'Yellow',
- 2 => 'Orange',
- 3 => 'Red',
- 4 => 'Green',
- -559038737 => 'n/a', # (0xdeadbeef)
- },
- },
- 0xbc => { Name => 'ToningEffectUserDef1', %psInfo,
- PrintConv => {
- 0 => 'None',
- 1 => 'Sepia',
- 2 => 'Blue',
- 3 => 'Purple',
- 4 => 'Green',
- -559038737 => 'n/a', # (0xdeadbeef)
- },
- },
- 0xc0 => { Name => 'ContrastUserDef2', %psInfo },
- 0xc4 => { Name => 'SharpnessUserDef2', %psInfo },
- 0xc8 => { Name => 'SaturationUserDef2', %psInfo },
- 0xcc => { Name => 'ColorToneUserDef2', %psInfo },
- 0xd0 => { Name => 'FilterEffectUserDef2', %psInfo,
- PrintConv => {
- 0 => 'None',
- 1 => 'Yellow',
- 2 => 'Orange',
- 3 => 'Red',
- 4 => 'Green',
- -559038737 => 'n/a', # (0xdeadbeef)
- },
- },
- 0xd4 => { Name => 'ToningEffectUserDef2', %psInfo,
- PrintConv => {
- 0 => 'None',
- 1 => 'Sepia',
- 2 => 'Blue',
- 3 => 'Purple',
- 4 => 'Green',
- -559038737 => 'n/a', # (0xdeadbeef)
- },
- },
- 0xd8 => { Name => 'ContrastUserDef3', %psInfo },
- 0xdc => { Name => 'SharpnessUserDef3', %psInfo },
- 0xe0 => { Name => 'SaturationUserDef3', %psInfo },
- 0xe4 => { Name => 'ColorToneUserDef3', %psInfo },
- 0xe8 => { Name => 'FilterEffectUserDef3', %psInfo,
- PrintConv => {
- 0 => 'None',
- 1 => 'Yellow',
- 2 =><