Canon.pm (Image-ExifTool-12.57) | : | Canon.pm (Image-ExifTool-12.58) | ||
---|---|---|---|---|
skipping to change at line 91 | skipping to change at line 91 | |||
use Image::ExifTool qw(:DataAccess :Utils); | use Image::ExifTool qw(:DataAccess :Utils); | |||
use Image::ExifTool::Exif; | use Image::ExifTool::Exif; | |||
sub WriteCanon($$$); | sub WriteCanon($$$); | |||
sub ProcessSerialData($$$); | sub ProcessSerialData($$$); | |||
sub ProcessFilters($$$); | sub ProcessFilters($$$); | |||
sub ProcessCTMD($$$); | sub ProcessCTMD($$$); | |||
sub ProcessExifInfo($$$); | sub ProcessExifInfo($$$); | |||
sub SwapWords($); | sub SwapWords($); | |||
$VERSION = '4.65'; | $VERSION = '4.66'; | |||
# Note: Removed 'USM' from 'L' lenses since it is redundant - PH | # Note: Removed 'USM' from 'L' lenses since it is redundant - PH | |||
# (or is it? Ref 32 shows 5 non-USM L-type lenses) | # (or is it? Ref 32 shows 5 non-USM L-type lenses) | |||
# --> have relaxed this for new lenses because Canon has been | # --> have relaxed this for new lenses because Canon has been | |||
# consistent about keeping "USM" in the model name | # consistent about keeping "USM" in the model name | |||
%canonLensTypes = ( #4 | %canonLensTypes = ( #4 | |||
Notes => q{ | ||||
Decimal values have been added to differentiate lenses which would other | ||||
wise | ||||
have the same LensType, and are used by the Composite LensID tag when | ||||
attempting to identify the specific lens model. | ||||
}, | ||||
-1 => 'n/a', | -1 => 'n/a', | |||
1 => 'Canon EF 50mm f/1.8', | 1 => 'Canon EF 50mm f/1.8', | |||
2 => 'Canon EF 28mm f/2.8 or Sigma Lens', | 2 => 'Canon EF 28mm f/2.8 or Sigma Lens', | |||
2.1 => 'Sigma 24mm f/2.8 Super Wide II', #ClaudeJolicoeur | 2.1 => 'Sigma 24mm f/2.8 Super Wide II', #ClaudeJolicoeur | |||
# (3 removed in current Kamisaka list) | # (3 removed in current Kamisaka list) | |||
3 => 'Canon EF 135mm f/2.8 Soft', #15/32 | 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 => 'Canon EF 35-105mm f/3.5-4.5 or Sigma Lens', #28 | |||
4.1 => 'Sigma UC Zoom 35-135mm f/4-5.6', | 4.1 => 'Sigma UC Zoom 35-135mm f/4-5.6', | |||
5 => 'Canon EF 35-70mm f/3.5-4.5', #32 | 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 => 'Canon EF 28-70mm f/3.5-4.5 or Sigma or Tokina Lens', #32 | |||
skipping to change at line 2405 | skipping to change at line 2400 | |||
}, | }, | |||
22 => { #4 | 22 => { #4 | |||
Name => 'LensType', | Name => 'LensType', | |||
Format => 'int16u', | Format => 'int16u', | |||
RawConv => '$val ? $$self{LensType}=$val : undef', # don't use if value is zero | 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', | Notes => 'this value is incorrect for EOS 7D images with lenses of type 256 or greater', | |||
SeparateTable => 1, | SeparateTable => 1, | |||
DataMember => 'LensType', | DataMember => 'LensType', | |||
ValueConvInv => 'int($val)', # (must truncate decimal part) | ValueConvInv => 'int($val)', # (must truncate decimal part) | |||
PrintConv => \%canonLensTypes, | PrintConv => \%canonLensTypes, | |||
PrintInt => 1, | ||||
}, | }, | |||
23 => { | 23 => { | |||
Name => 'MaxFocalLength', | Name => 'MaxFocalLength', | |||
Format => 'int16u', | Format => 'int16u', | |||
# this is a bit tricky, but we need the FocalUnits to convert this to mm | # this is a bit tricky, but we need the FocalUnits to convert this to mm | |||
RawConvInv => '$val * ($$self{FocalUnits} || 1)', | RawConvInv => '$val * ($$self{FocalUnits} || 1)', | |||
ValueConv => '$val / ($$self{FocalUnits} || 1)', | ValueConv => '$val / ($$self{FocalUnits} || 1)', | |||
ValueConvInv => '$val', | ValueConvInv => '$val', | |||
PrintConv => '"$val mm"', | PrintConv => '"$val mm"', | |||
PrintConvInv => '$val=~s/\s*mm//;$val', | PrintConvInv => '$val=~s/\s*mm//;$val', | |||
skipping to change at line 3063 | skipping to change at line 3059 | |||
PrintConv => '"$val mm"', | PrintConv => '"$val mm"', | |||
PrintConvInv => '$val=~s/\s*mm//;$val', | PrintConvInv => '$val=~s/\s*mm//;$val', | |||
}, | }, | |||
0x0d => { #9 | 0x0d => { #9 | |||
Name => 'LensType', | Name => 'LensType', | |||
Format => 'int16uRev', # value is little-endian | Format => 'int16uRev', # value is little-endian | |||
SeparateTable => 1, | SeparateTable => 1, | |||
RawConv => '$val ? $val : undef', # don't use if value is zero | RawConv => '$val ? $val : undef', # don't use if value is zero | |||
ValueConvInv => 'int($val)', # (must truncate decimal part) | ValueConvInv => 'int($val)', # (must truncate decimal part) | |||
PrintConv => \%canonLensTypes, | PrintConv => \%canonLensTypes, | |||
PrintInt => 1, | ||||
}, | }, | |||
0x0e => { | 0x0e => { | |||
Name => 'MinFocalLength', | Name => 'MinFocalLength', | |||
Format => 'int16u', | Format => 'int16u', | |||
PrintConv => '"$val mm"', | PrintConv => '"$val mm"', | |||
PrintConvInv => '$val=~s/\s*mm//;$val', | PrintConvInv => '$val=~s/\s*mm//;$val', | |||
}, | }, | |||
0x10 => { | 0x10 => { | |||
Name => 'MaxFocalLength', | Name => 'MaxFocalLength', | |||
Format => 'int16u', | Format => 'int16u', | |||
skipping to change at line 3178 | skipping to change at line 3175 | |||
NOTES => 'CameraInfo tags for the 1DmkII and 1DSmkII.', | NOTES => 'CameraInfo tags for the 1DmkII and 1DSmkII.', | |||
0x04 => { %ciExposureTime }, #9 | 0x04 => { %ciExposureTime }, #9 | |||
0x09 => { %ciFocalLength }, #9 | 0x09 => { %ciFocalLength }, #9 | |||
0x0c => { #9 | 0x0c => { #9 | |||
Name => 'LensType', | Name => 'LensType', | |||
Format => 'int16uRev', # value is big-endian | Format => 'int16uRev', # value is big-endian | |||
SeparateTable => 1, | SeparateTable => 1, | |||
RawConv => '$val ? $val : undef', # don't use if value is zero | RawConv => '$val ? $val : undef', # don't use if value is zero | |||
ValueConvInv => 'int($val)', # (must truncate decimal part) | ValueConvInv => 'int($val)', # (must truncate decimal part) | |||
PrintConv => \%canonLensTypes, | PrintConv => \%canonLensTypes, | |||
PrintInt => 1, | ||||
}, | }, | |||
0x11 => { %ciMinFocal }, #9 | 0x11 => { %ciMinFocal }, #9 | |||
0x13 => { %ciMaxFocal }, #9 | 0x13 => { %ciMaxFocal }, #9 | |||
0x2d => { #9 | 0x2d => { #9 | |||
Name => 'FocalType', | Name => 'FocalType', | |||
PrintConv => { | PrintConv => { | |||
0 => 'Fixed', | 0 => 'Fixed', | |||
2 => 'Zoom', | 2 => 'Zoom', | |||
}, | }, | |||
}, | }, | |||
skipping to change at line 3255 | skipping to change at line 3253 | |||
NOTES => 'CameraInfo tags for the 1DmkIIN.', | NOTES => 'CameraInfo tags for the 1DmkIIN.', | |||
0x04 => { %ciExposureTime }, | 0x04 => { %ciExposureTime }, | |||
0x09 => { %ciFocalLength }, | 0x09 => { %ciFocalLength }, | |||
0x0c => { | 0x0c => { | |||
Name => 'LensType', | Name => 'LensType', | |||
Format => 'int16uRev', # value is big-endian | Format => 'int16uRev', # value is big-endian | |||
SeparateTable => 1, | SeparateTable => 1, | |||
RawConv => '$val ? $val : undef', # don't use if value is zero | RawConv => '$val ? $val : undef', # don't use if value is zero | |||
ValueConvInv => 'int($val)', # (must truncate decimal part) | ValueConvInv => 'int($val)', # (must truncate decimal part) | |||
PrintConv => \%canonLensTypes, | PrintConv => \%canonLensTypes, | |||
PrintInt => 1, | ||||
}, | }, | |||
0x11 => { %ciMinFocal }, | 0x11 => { %ciMinFocal }, | |||
0x13 => { %ciMaxFocal }, | 0x13 => { %ciMaxFocal }, | |||
0x36 => { #15 | 0x36 => { #15 | |||
Name => 'WhiteBalance', | Name => 'WhiteBalance', | |||
SeparateTable => 1, | SeparateTable => 1, | |||
PrintConv => \%canonWhiteBalance, | PrintConv => \%canonWhiteBalance, | |||
}, | }, | |||
0x37 => { #15 | 0x37 => { #15 | |||
Name => 'ColorTemperature', | Name => 'ColorTemperature', | |||
skipping to change at line 3350 | skipping to change at line 3349 | |||
Name => 'PictureStyle', | Name => 'PictureStyle', | |||
Flags => ['PrintHex','SeparateTable'], | Flags => ['PrintHex','SeparateTable'], | |||
PrintConv => \%pictureStyles, | PrintConv => \%pictureStyles, | |||
}, | }, | |||
0x111 => { #15 | 0x111 => { #15 | |||
Name => 'LensType', | Name => 'LensType', | |||
Format => 'int16uRev', # value is big-endian | Format => 'int16uRev', # value is big-endian | |||
SeparateTable => 1, | SeparateTable => 1, | |||
ValueConvInv => 'int($val)', # (must truncate decimal part) | ValueConvInv => 'int($val)', # (must truncate decimal part) | |||
PrintConv => \%canonLensTypes, | PrintConv => \%canonLensTypes, | |||
PrintInt => 1, | ||||
}, | }, | |||
0x113 => { %ciMinFocal }, | 0x113 => { %ciMinFocal }, | |||
0x115 => { %ciMaxFocal }, | 0x115 => { %ciMaxFocal }, | |||
0x136 => { #15 | 0x136 => { #15 | |||
Name => 'FirmwareVersion', | Name => 'FirmwareVersion', | |||
Format => 'string[6]', | Format => 'string[6]', | |||
}, | }, | |||
0x172 => { | 0x172 => { | |||
Name => 'FileIndex', | Name => 'FileIndex', | |||
Groups => { 2 => 'Image' }, | Groups => { 2 => 'Image' }, | |||
skipping to change at line 3505 | skipping to change at line 3505 | |||
0x7c => { | 0x7c => { | |||
Name => 'ColorTemperature', | Name => 'ColorTemperature', | |||
Format => 'int16u', | Format => 'int16u', | |||
}, | }, | |||
0x14f => { | 0x14f => { | |||
Name => 'LensType', | Name => 'LensType', | |||
Format => 'int16uRev', # value is big-endian | Format => 'int16uRev', # value is big-endian | |||
SeparateTable => 1, | SeparateTable => 1, | |||
ValueConvInv => 'int($val)', # (must truncate decimal part) | ValueConvInv => 'int($val)', # (must truncate decimal part) | |||
PrintConv => \%canonLensTypes, | PrintConv => \%canonLensTypes, | |||
PrintInt => 1, | ||||
}, | }, | |||
0x151 => { %ciMinFocal }, | 0x151 => { %ciMinFocal }, | |||
0x153 => { %ciMaxFocal, | 0x153 => { %ciMaxFocal, | |||
Hook => '$varSize -= 4 if $$self{CanonFirm} < 2', | Hook => '$varSize -= 4 if $$self{CanonFirm} < 2', | |||
}, | }, | |||
0x1ed => { | 0x1ed => { | |||
Name => 'FirmwareVersion', | Name => 'FirmwareVersion', | |||
Format => 'string[6]', | Format => 'string[6]', | |||
Writable => 0, | Writable => 0, | |||
}, | }, | |||
skipping to change at line 3613 | skipping to change at line 3614 | |||
Format => 'int8u', | Format => 'int8u', | |||
Flags => ['PrintHex','SeparateTable'], | Flags => ['PrintHex','SeparateTable'], | |||
PrintConv => \%pictureStyles, | PrintConv => \%pictureStyles, | |||
}, | }, | |||
0x1a7 => { | 0x1a7 => { | |||
Name => 'LensType', | Name => 'LensType', | |||
Format => 'int16uRev', # value is big-endian | Format => 'int16uRev', # value is big-endian | |||
SeparateTable => 1, | SeparateTable => 1, | |||
ValueConvInv => 'int($val)', # (must truncate decimal part) | ValueConvInv => 'int($val)', # (must truncate decimal part) | |||
PrintConv => \%canonLensTypes, | PrintConv => \%canonLensTypes, | |||
PrintInt => 1, | ||||
}, | }, | |||
0x1a9 => { %ciMinFocal }, | 0x1a9 => { %ciMinFocal }, | |||
0x1ab => { %ciMaxFocal, | 0x1ab => { %ciMaxFocal, | |||
# add another offset of -8 for firmware 5.7.1, and a large offset | # add another offset of -8 for firmware 5.7.1, and a large offset | |||
# to effectively abort processing for unknown firmware | # to effectively abort processing for unknown firmware | |||
Hook => '$varSize += ($$self{CanonFirm} ? -8 : 0x10000) if $$self{CanonF irm} < 2', | Hook => '$varSize += ($$self{CanonFirm} ? -8 : 0x10000) if $$self{CanonF irm} < 2', | |||
}, | }, | |||
0x280 => { | 0x280 => { | |||
Name => 'FirmwareVersion', | Name => 'FirmwareVersion', | |||
Format => 'string[6]', | Format => 'string[6]', | |||
skipping to change at line 3664 | skipping to change at line 3666 | |||
0x03 => { %ciFNumber }, #PH | 0x03 => { %ciFNumber }, #PH | |||
0x04 => { %ciExposureTime }, #9 | 0x04 => { %ciExposureTime }, #9 | |||
0x06 => { %ciISO }, #PH | 0x06 => { %ciISO }, #PH | |||
0x0c => { #9 | 0x0c => { #9 | |||
Name => 'LensType', | Name => 'LensType', | |||
Format => 'int16uRev', # value is big-endian | Format => 'int16uRev', # value is big-endian | |||
SeparateTable => 1, | SeparateTable => 1, | |||
RawConv => '$val ? $val : undef', # don't use if value is zero | RawConv => '$val ? $val : undef', # don't use if value is zero | |||
ValueConvInv => 'int($val)', # (must truncate decimal part) | ValueConvInv => 'int($val)', # (must truncate decimal part) | |||
PrintConv => \%canonLensTypes, | PrintConv => \%canonLensTypes, | |||
PrintInt => 1, | ||||
}, | }, | |||
0x17 => { %ciCameraTemperature }, #PH | 0x17 => { %ciCameraTemperature }, #PH | |||
0x1b => { %ciMacroMagnification }, #PH | 0x1b => { %ciMacroMagnification }, #PH | |||
0x27 => { #PH | 0x27 => { #PH | |||
Name => 'CameraOrientation', | Name => 'CameraOrientation', | |||
PrintConv => { | PrintConv => { | |||
0 => 'Horizontal (normal)', | 0 => 'Horizontal (normal)', | |||
1 => 'Rotate 90 CW', | 1 => 'Rotate 90 CW', | |||
2 => 'Rotate 270 CW', | 2 => 'Rotate 270 CW', | |||
}, | }, | |||
skipping to change at line 3724 | skipping to change at line 3727 | |||
PrintConv => \%pictureStyles, | PrintConv => \%pictureStyles, | |||
}, | }, | |||
0x93 => { %ciMinFocal }, #15 | 0x93 => { %ciMinFocal }, #15 | |||
0x95 => { %ciMaxFocal }, #15 | 0x95 => { %ciMaxFocal }, #15 | |||
0x97 => { #15 | 0x97 => { #15 | |||
Name => 'LensType', | Name => 'LensType', | |||
Format => 'int16uRev', # value is big-endian | Format => 'int16uRev', # value is big-endian | |||
SeparateTable => 1, | SeparateTable => 1, | |||
ValueConvInv => 'int($val)', # (must truncate decimal part) | ValueConvInv => 'int($val)', # (must truncate decimal part) | |||
PrintConv => \%canonLensTypes, | PrintConv => \%canonLensTypes, | |||
PrintInt => 1, | ||||
}, | }, | |||
0xa4 => { #PH | 0xa4 => { #PH | |||
Name => 'FirmwareRevision', | Name => 'FirmwareRevision', | |||
Format => 'string[8]', | Format => 'string[8]', | |||
}, | }, | |||
0xac => { #PH | 0xac => { #PH | |||
Name => 'ShortOwnerName', | Name => 'ShortOwnerName', | |||
Format => 'string[16]', | Format => 'string[16]', | |||
}, | }, | |||
0xcc => { #PH (NC) | 0xcc => { #PH (NC) | |||
skipping to change at line 3939 | skipping to change at line 3943 | |||
2 => 'Strong', | 2 => 'Strong', | |||
3 => 'Off', | 3 => 'Off', | |||
}, | }, | |||
}, | }, | |||
0xe6 => { | 0xe6 => { | |||
Name => 'LensType', | Name => 'LensType', | |||
Format => 'int16uRev', # value is big-endian | Format => 'int16uRev', # value is big-endian | |||
SeparateTable => 1, | SeparateTable => 1, | |||
ValueConvInv => 'int($val)', # (must truncate decimal part) | ValueConvInv => 'int($val)', # (must truncate decimal part) | |||
PrintConv => \%canonLensTypes, | PrintConv => \%canonLensTypes, | |||
PrintInt => 1, | ||||
}, | }, | |||
0xe8 => { %ciMinFocal }, | 0xe8 => { %ciMinFocal }, | |||
0xea => { %ciMaxFocal, | 0xea => { %ciMaxFocal, | |||
# offset changes after this for different firmware versions | # offset changes after this for different firmware versions | |||
Hook => '$varSize += ($$self{CanonFirm} ? -36 : 0x10000) if $$self{Canon Firm} < 2', | Hook => '$varSize += ($$self{CanonFirm} ? -36 : 0x10000) if $$self{Canon Firm} < 2', | |||
}, | }, | |||
0x17e => { | 0x17e => { | |||
Name => 'FirmwareVersion', | Name => 'FirmwareVersion', | |||
Format => 'string[6]', | Format => 'string[6]', | |||
Writable => 0, # not writable for logic reasons | Writable => 0, # not writable for logic reasons | |||
skipping to change at line 4063 | skipping to change at line 4068 | |||
Format => 'int8u', | Format => 'int8u', | |||
Flags => ['PrintHex','SeparateTable'], | Flags => ['PrintHex','SeparateTable'], | |||
PrintConv => \%pictureStyles, | PrintConv => \%pictureStyles, | |||
}, | }, | |||
0x153 => { | 0x153 => { | |||
Name => 'LensType', | Name => 'LensType', | |||
Format => 'int16uRev', # value is big-endian | Format => 'int16uRev', # value is big-endian | |||
SeparateTable => 1, | SeparateTable => 1, | |||
ValueConvInv => 'int($val)', # (must truncate decimal part) | ValueConvInv => 'int($val)', # (must truncate decimal part) | |||
PrintConv => \%canonLensTypes, | PrintConv => \%canonLensTypes, | |||
PrintInt => 1, | ||||
}, | }, | |||
0x155 => { %ciMinFocal }, | 0x155 => { %ciMinFocal }, | |||
0x157 => { %ciMaxFocal, | 0x157 => { %ciMaxFocal, | |||
Hook => '$varSize -= 8 if $$self{CanonFirm} < 3', | Hook => '$varSize -= 8 if $$self{CanonFirm} < 3', | |||
}, | }, | |||
0x164 => { | 0x164 => { | |||
Name => 'LensSerialNumber', | Name => 'LensSerialNumber', | |||
Format => 'undef[5]', | Format => 'undef[5]', | |||
Priority => 0, | Priority => 0, | |||
ValueConv => 'unpack("H*",$val)', | ValueConv => 'unpack("H*",$val)', | |||
skipping to change at line 4172 | skipping to change at line 4178 | |||
Format => 'int8u', | Format => 'int8u', | |||
Flags => ['PrintHex','SeparateTable'], | Flags => ['PrintHex','SeparateTable'], | |||
PrintConv => \%pictureStyles, | PrintConv => \%pictureStyles, | |||
}, | }, | |||
0x161 => { # (5DmkIII + 0x0e) | 0x161 => { # (5DmkIII + 0x0e) | |||
Name => 'LensType', | Name => 'LensType', | |||
Format => 'int16uRev', # value is big-endian | Format => 'int16uRev', # value is big-endian | |||
SeparateTable => 1, | SeparateTable => 1, | |||
ValueConvInv => 'int($val)', # (must truncate decimal part) | ValueConvInv => 'int($val)', # (must truncate decimal part) | |||
PrintConv => \%canonLensTypes, | PrintConv => \%canonLensTypes, | |||
PrintInt => 1, | ||||
}, | }, | |||
0x163 => { %ciMinFocal }, # (5DmkIII + 0x0e) | 0x163 => { %ciMinFocal }, # (5DmkIII + 0x0e) | |||
0x165 => { %ciMaxFocal }, # (5DmkIII + 0x0e) | 0x165 => { %ciMaxFocal }, # (5DmkIII + 0x0e) | |||
0x256 => { # (5DmkIII + 0x1a) | 0x256 => { # (5DmkIII + 0x1a) | |||
Name => 'FirmwareVersion', | Name => 'FirmwareVersion', | |||
Format => 'string[6]', | Format => 'string[6]', | |||
Writable => 0, | Writable => 0, | |||
}, | }, | |||
0x2aa => { # (5DmkIII + 0x16 or 0x1e) | 0x2aa => { # (5DmkIII + 0x16 or 0x1e) | |||
Name => 'FileIndex', | Name => 'FileIndex', | |||
skipping to change at line 4319 | skipping to change at line 4326 | |||
2 => 'Strong', | 2 => 'Strong', | |||
3 => 'Off', | 3 => 'Off', | |||
}, | }, | |||
}, | }, | |||
0x112 => { | 0x112 => { | |||
Name => 'LensType', | Name => 'LensType', | |||
Format => 'int16uRev', # value is big-endian | Format => 'int16uRev', # value is big-endian | |||
SeparateTable => 1, | SeparateTable => 1, | |||
ValueConvInv => 'int($val)', # (must truncate decimal part) | ValueConvInv => 'int($val)', # (must truncate decimal part) | |||
PrintConv => \%canonLensTypes, | PrintConv => \%canonLensTypes, | |||
PrintInt => 1, | ||||
}, | }, | |||
0x114 => { %ciMinFocal }, | 0x114 => { %ciMinFocal }, | |||
0x116 => { %ciMaxFocal }, | 0x116 => { %ciMaxFocal }, | |||
0x1ac => { | 0x1ac => { | |||
Name => 'FirmwareVersion', | Name => 'FirmwareVersion', | |||
Format => 'string[6]', | Format => 'string[6]', | |||
Writable => 0, # not writable for logic reasons | Writable => 0, # not writable for logic reasons | |||
# some firmwares have a null instead of a space after the version number | # some firmwares have a null instead of a space after the version number | |||
RawConv => '$val=~/^\d+\.\d+\.\d+\s*$/ ? $val : undef', | RawConv => '$val=~/^\d+\.\d+\.\d+\s*$/ ? $val : undef', | |||
}, | }, | |||
skipping to change at line 4408 | skipping to change at line 4416 | |||
0x73 => { #15 | 0x73 => { #15 | |||
Name => 'ColorTemperature', | Name => 'ColorTemperature', | |||
Format => 'int16u', | Format => 'int16u', | |||
}, | }, | |||
0xd6 => { #15 | 0xd6 => { #15 | |||
Name => 'LensType', | Name => 'LensType', | |||
Format => 'int16uRev', # value is big-endian | Format => 'int16uRev', # value is big-endian | |||
SeparateTable => 1, | SeparateTable => 1, | |||
ValueConvInv => 'int($val)', # (must truncate decimal part) | ValueConvInv => 'int($val)', # (must truncate decimal part) | |||
PrintConv => \%canonLensTypes, | PrintConv => \%canonLensTypes, | |||
PrintInt => 1, | ||||
}, | }, | |||
0xd8 => { %ciMinFocal }, #15 | 0xd8 => { %ciMinFocal }, #15 | |||
0xda => { %ciMaxFocal }, #15 | 0xda => { %ciMaxFocal }, #15 | |||
0xff => { #15 | 0xff => { #15 | |||
Name => 'FirmwareVersion', | Name => 'FirmwareVersion', | |||
Format => 'string[6]', | Format => 'string[6]', | |||
}, | }, | |||
0x133 => { #27 | 0x133 => { #27 | |||
Name => 'FileIndex', | Name => 'FileIndex', | |||
Groups => { 2 => 'Image' }, | Groups => { 2 => 'Image' }, | |||
skipping to change at line 4543 | skipping to change at line 4552 | |||
2 => 'Strong', | 2 => 'Strong', | |||
3 => 'Off', | 3 => 'Off', | |||
}, | }, | |||
}, | }, | |||
0xea => { #33 | 0xea => { #33 | |||
Name => 'LensType', | Name => 'LensType', | |||
Format => 'int16uRev', # value is big-endian | Format => 'int16uRev', # value is big-endian | |||
SeparateTable => 1, | SeparateTable => 1, | |||
ValueConvInv => 'int($val)', # (must truncate decimal part) | ValueConvInv => 'int($val)', # (must truncate decimal part) | |||
PrintConv => \%canonLensTypes, | PrintConv => \%canonLensTypes, | |||
PrintInt => 1, | ||||
}, | }, | |||
0xec => { %ciMinFocal }, | 0xec => { %ciMinFocal }, | |||
0xee => { %ciMaxFocal, | 0xee => { %ciMaxFocal, | |||
Hook => '$varSize += ($$self{CanonFirm} ? -4 : 0x10000) if $$self{CanonF irm} < 2', | Hook => '$varSize += ($$self{CanonFirm} ? -4 : 0x10000) if $$self{CanonF irm} < 2', | |||
}, | }, | |||
0x15e => { #33 | 0x15e => { #33 | |||
Name => 'FirmwareVersion', | Name => 'FirmwareVersion', | |||
Format => 'string[6]', | Format => 'string[6]', | |||
Writable => 0, | Writable => 0, | |||
}, | }, | |||
skipping to change at line 4632 | skipping to change at line 4642 | |||
Condition => '$$self{Model} =~ /EOS 60D$/', | Condition => '$$self{Model} =~ /EOS 60D$/', | |||
Notes => '60D only', | Notes => '60D only', | |||
Format => 'int16u', | Format => 'int16u', | |||
}, | }, | |||
0xe8 => { | 0xe8 => { | |||
Name => 'LensType', | Name => 'LensType', | |||
Format => 'int16uRev', # value is big-endian | Format => 'int16uRev', # value is big-endian | |||
SeparateTable => 1, | SeparateTable => 1, | |||
ValueConvInv => 'int($val)', # (must truncate decimal part) | ValueConvInv => 'int($val)', # (must truncate decimal part) | |||
PrintConv => \%canonLensTypes, | PrintConv => \%canonLensTypes, | |||
PrintInt => 1, | ||||
}, | }, | |||
0xea => { %ciMinFocal }, | 0xea => { %ciMinFocal }, | |||
0xec => { %ciMaxFocal }, | 0xec => { %ciMaxFocal }, | |||
0x199 => { # (at this location for 60D firmware 2.8.1/1.0.5, and 1200D 3.3. 1/1.0.0) | 0x199 => { # (at this location for 60D firmware 2.8.1/1.0.5, and 1200D 3.3. 1/1.0.0) | |||
Name => 'FirmwareVersion', | Name => 'FirmwareVersion', | |||
Format => 'string[6]', | Format => 'string[6]', | |||
Writable => 0, | Writable => 0, | |||
}, | }, | |||
0x1d9 => { | 0x1d9 => { | |||
Name => 'FileIndex', | Name => 'FileIndex', | |||
skipping to change at line 4713 | skipping to change at line 4724 | |||
0xc7 => { | 0xc7 => { | |||
Name => 'ColorTemperature', | Name => 'ColorTemperature', | |||
Format => 'int16u', | Format => 'int16u', | |||
}, | }, | |||
0x166 => { | 0x166 => { | |||
Name => 'LensType', | Name => 'LensType', | |||
Format => 'int16uRev', # value is big-endian | Format => 'int16uRev', # value is big-endian | |||
SeparateTable => 1, | SeparateTable => 1, | |||
ValueConvInv => 'int($val)', # (must truncate decimal part) | ValueConvInv => 'int($val)', # (must truncate decimal part) | |||
PrintConv => \%canonLensTypes, | PrintConv => \%canonLensTypes, | |||
PrintInt => 1, | ||||
}, | }, | |||
0x168 => { %ciMinFocal }, | 0x168 => { %ciMinFocal }, | |||
0x16a => { %ciMaxFocal }, | 0x16a => { %ciMaxFocal }, | |||
0x25e => { # (at this location for firmware 6.1.2, 1.0.4 and 1.1.1) | 0x25e => { # (at this location for firmware 6.1.2, 1.0.4 and 1.1.1) | |||
Name => 'FirmwareVersion', | Name => 'FirmwareVersion', | |||
Format => 'string[6]', | Format => 'string[6]', | |||
Writable => 0, | Writable => 0, | |||
}, | }, | |||
0x2b3 => { | 0x2b3 => { | |||
Name => 'FileIndex', | Name => 'FileIndex', | |||
skipping to change at line 4780 | skipping to change at line 4792 | |||
0x13a => { | 0x13a => { | |||
Name => 'ColorTemperature', | Name => 'ColorTemperature', | |||
Format => 'int16u', | Format => 'int16u', | |||
}, | }, | |||
0x189 => { | 0x189 => { | |||
Name => 'LensType', | Name => 'LensType', | |||
Format => 'int16uRev', # value is big-endian | Format => 'int16uRev', # value is big-endian | |||
SeparateTable => 1, | SeparateTable => 1, | |||
ValueConvInv => 'int($val)', # (must truncate decimal part) | ValueConvInv => 'int($val)', # (must truncate decimal part) | |||
PrintConv => \%canonLensTypes, | PrintConv => \%canonLensTypes, | |||
PrintInt => 1, | ||||
}, | }, | |||
0x18b => { %ciMinFocal }, | 0x18b => { %ciMinFocal }, | |||
0x18d => { %ciMaxFocal }, | 0x18d => { %ciMaxFocal }, | |||
0x45a => { # (at this location for firmware 1.0.1) | 0x45a => { # (at this location for firmware 1.0.1) | |||
Name => 'FirmwareVersion', | Name => 'FirmwareVersion', | |||
Format => 'string[6]', | Format => 'string[6]', | |||
Writable => 0, | Writable => 0, | |||
}, | }, | |||
0x4ae => { | 0x4ae => { | |||
Name => 'FileIndex', | Name => 'FileIndex', | |||
skipping to change at line 4863 | skipping to change at line 4876 | |||
0x73 => { #PH | 0x73 => { #PH | |||
Name => 'ColorTemperature', | Name => 'ColorTemperature', | |||
Format => 'int16u', | Format => 'int16u', | |||
}, | }, | |||
0xde => { #33 | 0xde => { #33 | |||
Name => 'LensType', | Name => 'LensType', | |||
Format => 'int16uRev', # value is big-endian | Format => 'int16uRev', # value is big-endian | |||
SeparateTable => 1, | SeparateTable => 1, | |||
ValueConvInv => 'int($val)', # (must truncate decimal part) | ValueConvInv => 'int($val)', # (must truncate decimal part) | |||
PrintConv => \%canonLensTypes, | PrintConv => \%canonLensTypes, | |||
PrintInt => 1, | ||||
}, | }, | |||
0x107 => { #PH | 0x107 => { #PH | |||
Name => 'FirmwareVersion', | Name => 'FirmwareVersion', | |||
Format => 'string[6]', | Format => 'string[6]', | |||
}, | }, | |||
0x10f => { #20 | 0x10f => { #20 | |||
Name => 'OwnerName', | Name => 'OwnerName', | |||
Format => 'string[32]', | Format => 'string[32]', | |||
}, | }, | |||
0x133 => { #20 | 0x133 => { #20 | |||
skipping to change at line 4978 | skipping to change at line 4992 | |||
2 => 'Strong', | 2 => 'Strong', | |||
3 => 'Off', | 3 => 'Off', | |||
}, | }, | |||
}, | }, | |||
0xf6 => { | 0xf6 => { | |||
Name => 'LensType', | Name => 'LensType', | |||
Format => 'int16uRev', # value is big-endian | Format => 'int16uRev', # value is big-endian | |||
SeparateTable => 1, | SeparateTable => 1, | |||
ValueConvInv => 'int($val)', # (must truncate decimal part) | ValueConvInv => 'int($val)', # (must truncate decimal part) | |||
PrintConv => \%canonLensTypes, | PrintConv => \%canonLensTypes, | |||
PrintInt => 1, | ||||
}, | }, | |||
0xf8 => { %ciMinFocal }, | 0xf8 => { %ciMinFocal }, | |||
0xfa => { %ciMaxFocal }, | 0xfa => { %ciMaxFocal }, | |||
0x190 => { | 0x190 => { | |||
Name => 'FirmwareVersion', | Name => 'FirmwareVersion', | |||
Format => 'string[6]', | Format => 'string[6]', | |||
Writable => 0, | Writable => 0, | |||
RawConv => '$val=~/^\d+\.\d+\.\d+\s*$/ ? $val : undef', | RawConv => '$val=~/^\d+\.\d+\.\d+\s*$/ ? $val : undef', | |||
}, | }, | |||
0x1d3 => { | 0x1d3 => { | |||
skipping to change at line 5073 | skipping to change at line 5088 | |||
Format => 'int8u', | Format => 'int8u', | |||
Flags => ['PrintHex','SeparateTable'], | Flags => ['PrintHex','SeparateTable'], | |||
PrintConv => \%pictureStyles, | PrintConv => \%pictureStyles, | |||
}, | }, | |||
0xff => { # (500D + 9) | 0xff => { # (500D + 9) | |||
Name => 'LensType', | Name => 'LensType', | |||
Format => 'int16uRev', # value is big-endian | Format => 'int16uRev', # value is big-endian | |||
SeparateTable => 1, | SeparateTable => 1, | |||
ValueConvInv => 'int($val)', # (must truncate decimal part) | ValueConvInv => 'int($val)', # (must truncate decimal part) | |||
PrintConv => \%canonLensTypes, | PrintConv => \%canonLensTypes, | |||
PrintInt => 1, | ||||
}, | }, | |||
0x101 => { %ciMinFocal }, # (500D + 9) | 0x101 => { %ciMinFocal }, # (500D + 9) | |||
0x103 => { %ciMaxFocal }, # (500D + 9) | 0x103 => { %ciMaxFocal }, # (500D + 9) | |||
0x1a4 => { # (500D + 0x11) | 0x1a4 => { # (500D + 0x11) | |||
Name => 'FirmwareVersion', | Name => 'FirmwareVersion', | |||
Format => 'string[6]', | Format => 'string[6]', | |||
Writable => 0, | Writable => 0, | |||
RawConv => '$val=~/^\d+\.\d+\.\d+\s*$/ ? $val : undef', | RawConv => '$val=~/^\d+\.\d+\.\d+\s*$/ ? $val : undef', | |||
}, | }, | |||
0x1e4 => { # (500D + 0x11) | 0x1e4 => { # (500D + 0x11) | |||
skipping to change at line 5168 | skipping to change at line 5184 | |||
Format => 'int8u', | Format => 'int8u', | |||
Flags => ['PrintHex','SeparateTable'], | Flags => ['PrintHex','SeparateTable'], | |||
PrintConv => \%pictureStyles, | PrintConv => \%pictureStyles, | |||
}, | }, | |||
0xea => { # (60D + 2, 550D + 3) | 0xea => { # (60D + 2, 550D + 3) | |||
Name => 'LensType', | Name => 'LensType', | |||
Format => 'int16uRev', # value is big-endian | Format => 'int16uRev', # value is big-endian | |||
SeparateTable => 1, | SeparateTable => 1, | |||
ValueConvInv => 'int($val)', # (must truncate decimal part) | ValueConvInv => 'int($val)', # (must truncate decimal part) | |||
PrintConv => \%canonLensTypes, | PrintConv => \%canonLensTypes, | |||
PrintInt => 1, | ||||
}, | }, | |||
0xec => { %ciMinFocal }, # (60D + 2) | 0xec => { %ciMinFocal }, # (60D + 2) | |||
0xee => { %ciMaxFocal }, # (60D + 2) | 0xee => { %ciMaxFocal }, # (60D + 2) | |||
0x19b => { # (60D + 2) | 0x19b => { # (60D + 2) | |||
Name => 'FirmwareVersion', | Name => 'FirmwareVersion', | |||
Format => 'string[6]', | Format => 'string[6]', | |||
Writable => 0, | Writable => 0, | |||
RawConv => '$val=~/^\d+\.\d+\.\d+\s*$/ ? $val : undef', | RawConv => '$val=~/^\d+\.\d+\.\d+\s*$/ ? $val : undef', | |||
}, | }, | |||
0x1db => { # (60D + 2) (NC) | 0x1db => { # (60D + 2) (NC) | |||
skipping to change at line 5250 | skipping to change at line 5267 | |||
Format => 'int8u', | Format => 'int8u', | |||
Flags => ['PrintHex','SeparateTable'], | Flags => ['PrintHex','SeparateTable'], | |||
PrintConv => \%pictureStyles, | PrintConv => \%pictureStyles, | |||
}, | }, | |||
0x127 => { | 0x127 => { | |||
Name => 'LensType', | Name => 'LensType', | |||
Format => 'int16uRev', # value is big-endian | Format => 'int16uRev', # value is big-endian | |||
SeparateTable => 1, | SeparateTable => 1, | |||
ValueConvInv => 'int($val)', # (must truncate decimal part) | ValueConvInv => 'int($val)', # (must truncate decimal part) | |||
PrintConv => \%canonLensTypes, | PrintConv => \%canonLensTypes, | |||
PrintInt => 1, | ||||
}, | }, | |||
0x129 => { %ciMinFocal }, | 0x129 => { %ciMinFocal }, | |||
0x12b => { %ciMaxFocal }, | 0x12b => { %ciMaxFocal }, | |||
0x21b => { # (650D version 1.0.1) | 0x21b => { # (650D version 1.0.1) | |||
Name => 'FirmwareVersion', | Name => 'FirmwareVersion', | |||
Condition => '$$self{Model} =~ /(650D|REBEL T4i|Kiss X6i)\b/', | Condition => '$$self{Model} =~ /(650D|REBEL T4i|Kiss X6i)\b/', | |||
Notes => '650D', | Notes => '650D', | |||
Format => 'string[6]', | Format => 'string[6]', | |||
Writable => 0, | Writable => 0, | |||
RawConv => '$val=~/^\d+\.\d+\.\d+\s*$/ ? $val : undef', | RawConv => '$val=~/^\d+\.\d+\.\d+\s*$/ ? $val : undef', | |||
skipping to change at line 5362 | skipping to change at line 5380 | |||
Format => 'int8u', | Format => 'int8u', | |||
Flags => ['PrintHex','SeparateTable'], | Flags => ['PrintHex','SeparateTable'], | |||
PrintConv => \%pictureStyles, | PrintConv => \%pictureStyles, | |||
}, | }, | |||
0x184 => { | 0x184 => { | |||
Name => 'LensType', | Name => 'LensType', | |||
Format => 'int16uRev', # value is big-endian | Format => 'int16uRev', # value is big-endian | |||
SeparateTable => 1, | SeparateTable => 1, | |||
ValueConvInv => 'int($val)', # (must truncate decimal part) | ValueConvInv => 'int($val)', # (must truncate decimal part) | |||
PrintConv => \%canonLensTypes, | PrintConv => \%canonLensTypes, | |||
PrintInt => 1, | ||||
}, | }, | |||
0x186 => { %ciMinFocal }, | 0x186 => { %ciMinFocal }, | |||
0x188 => { %ciMaxFocal }, | 0x188 => { %ciMaxFocal }, | |||
0x43d => { # (750D/760D firmware 6.7.2) | 0x43d => { # (750D/760D firmware 6.7.2) | |||
Name => 'FirmwareVersion', | Name => 'FirmwareVersion', | |||
Format => 'string[6]', | Format => 'string[6]', | |||
Writable => 0, | Writable => 0, | |||
RawConv => '$val=~/^\d+\.\d+\.\d+\s*$/ ? $val : undef', | RawConv => '$val=~/^\d+\.\d+\.\d+\s*$/ ? $val : undef', | |||
}, | }, | |||
0x449 => { # (750D/760D firmware 1.0.0) | 0x449 => { # (750D/760D firmware 1.0.0) | |||
skipping to change at line 5436 | skipping to change at line 5455 | |||
0x73 => { #PH | 0x73 => { #PH | |||
Name => 'ColorTemperature', | Name => 'ColorTemperature', | |||
Format => 'int16u', | Format => 'int16u', | |||
}, | }, | |||
0xe2 => { #PH | 0xe2 => { #PH | |||
Name => 'LensType', | Name => 'LensType', | |||
Format => 'int16uRev', # value is big-endian | Format => 'int16uRev', # value is big-endian | |||
SeparateTable => 1, | SeparateTable => 1, | |||
ValueConvInv => 'int($val)', # (must truncate decimal part) | ValueConvInv => 'int($val)', # (must truncate decimal part) | |||
PrintConv => \%canonLensTypes, | PrintConv => \%canonLensTypes, | |||
PrintInt => 1, | ||||
}, | }, | |||
0xe4 => { %ciMinFocal }, #PH | 0xe4 => { %ciMinFocal }, #PH | |||
0xe6 => { %ciMaxFocal }, #PH | 0xe6 => { %ciMaxFocal }, #PH | |||
0x10b => { #PH | 0x10b => { #PH | |||
Name => 'FirmwareVersion', | Name => 'FirmwareVersion', | |||
Format => 'string[6]', | Format => 'string[6]', | |||
}, | }, | |||
0x137 => { #PH (NC) | 0x137 => { #PH (NC) | |||
Name => 'DirectoryIndex', | Name => 'DirectoryIndex', | |||
Groups => { 2 => 'Image' }, | Groups => { 2 => 'Image' }, | |||
End of changes. 27 change blocks. | ||||
7 lines changed or deleted | 26 lines changed or added |