exiftool-vendored.exe 12.34.0 → 12.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/exiftool_files/Changes +61 -2
- package/bin/exiftool_files/README +2 -2
- package/bin/exiftool_files/exiftool.pl +63 -35
- package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +6 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +143 -9
- package/bin/exiftool_files/lib/Image/ExifTool/CanonCustom.pm +12 -2
- package/bin/exiftool_files/lib/Image/ExifTool/DarwinCore.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +13 -1
- package/bin/exiftool_files/lib/Image/ExifTool/FLIR.pm +33 -8
- package/bin/exiftool_files/lib/Image/ExifTool/GIF.pm +5 -1
- package/bin/exiftool_files/lib/Image/ExifTool/GPS.pm +14 -10
- package/bin/exiftool_files/lib/Image/ExifTool/ICC_Profile.pm +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Jpeg2000.pm +108 -11
- package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +1203 -96
- package/bin/exiftool_files/lib/Image/ExifTool/NikonCustom.pm +5 -1
- package/bin/exiftool_files/lib/Image/ExifTool/NikonSettings.pm +135 -71
- package/bin/exiftool_files/lib/Image/ExifTool/OpenEXR.pm +4 -2
- package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +1 -0
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +14 -2
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +26 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +3 -1
- package/bin/exiftool_files/lib/Image/ExifTool/TagInfoXML.pm +9 -4
- package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +6363 -5846
- package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +1215 -39
- package/bin/exiftool_files/lib/Image/ExifTool/WriteXMP.pl +10 -11
- package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +10 -5
- package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +110 -24
- package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool.pm +51 -12
- package/package.json +2 -2
|
@@ -7,11 +7,67 @@ RSS feed: https://exiftool.org/rss.xml
|
|
|
7
7
|
Note: The most recent production release is Version 12.30. (Other versions are
|
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
|
9
9
|
|
|
10
|
+
Dec. 20, 2021 - Version 12.38
|
|
11
|
+
|
|
12
|
+
- Decode a number of new tags for the Nikon Z9 (thanks Warren Hatch)
|
|
13
|
+
- Patched incorrect decoding of AEBShotCount for the Canon EOS 90D
|
|
14
|
+
- Patched EXR reader to support long tag names
|
|
15
|
+
- Patched security issue (thanks Joe Lothan)
|
|
16
|
+
- Fixed an incorrect tag ID for a new Nikon MakerNote tag (github #108)
|
|
17
|
+
- Fixed XMP-exif:GPSMeasureMode conversions to match EXIF
|
|
18
|
+
- Fixed problem where some namespaces may be undeclared in the -X output when
|
|
19
|
+
using the -struct option
|
|
20
|
+
|
|
21
|
+
Dec. 8, 2021 - Version 12.37
|
|
22
|
+
|
|
23
|
+
- Decode timed GPS from Vantrue S1 dashcam MP4 videos
|
|
24
|
+
- Decode ColorData tags for the Canon EOS R3 (thanks LibRaw)
|
|
25
|
+
- Decode more makernotes tags for Nikon Z cameras (thanks Warren Hatch)
|
|
26
|
+
- Extract TransparentColor from GIF images
|
|
27
|
+
- Improved parsing of input time values for GPSTimeStamp to properly handle a
|
|
28
|
+
"." separator
|
|
29
|
+
- Improved warning when incorrectly using "
|
|
30
|
+
|
|
31
|
+
Nov. 16, 2021 - Version 12.36
|
|
32
|
+
|
|
33
|
+
- IMPORTANT: Fixed bug introduced in 12.35 which corrupted JPEG 2000 images
|
|
34
|
+
when removing all metadata with -all=
|
|
35
|
+
- Added feature to bypass processing of specified XMP namespaces and
|
|
36
|
+
properties (to improve performance in cases where the XMP suffers from
|
|
37
|
+
Adobe-editing bloat)
|
|
38
|
+
- Added a number of new XMP tags used by Lightroom 11.0
|
|
39
|
+
- Decode a number of new Nikon tags (thanks Warren Hatch)
|
|
40
|
+
- Made the Composite GPSPosition tag writable
|
|
41
|
+
- Fixed erroneous "Skipped unknown bytes after JPEG SOS" warning
|
|
42
|
+
- Fixed group for new writable Jpeg2000 color tags in -listx output
|
|
43
|
+
- Fixed problem finding files in Windows when using wildcards in file name and
|
|
44
|
+
a drive letter with no slash
|
|
45
|
+
|
|
46
|
+
Nov. 11, 2021 - Version 12.35
|
|
47
|
+
|
|
48
|
+
- Added ability to write ICC_Profile (and other color specifications) to
|
|
49
|
+
Jpeg2000 images
|
|
50
|
+
- Added %o code to -W option format string
|
|
51
|
+
- Added %f code to -d option for fractional seconds
|
|
52
|
+
- Added a couple of new Sony LensType values (thanks Jos Roost)
|
|
53
|
+
- Added a new CanonModelID (thanks Norbert Wasser)
|
|
54
|
+
- Added a new Nikon LensID
|
|
55
|
+
- Decode more Nikon MakerNotes tags for some new models (thanks Warren Hatch)
|
|
56
|
+
- Extract ThumbnailImage from some DJI drone videos
|
|
57
|
+
- Enhanced -ee option to extract metadata from all frames in a SEQ file
|
|
58
|
+
- Patched to avoid possible "Use of uninitialized value" runtime warning
|
|
59
|
+
- Fixed a couple of misspelt new ICC_Profile tag names (thanks Herb)
|
|
60
|
+
- Fixed problem generating the correct file extension when extracting
|
|
61
|
+
OriginalRawImage from a DNG file using the -W option with the %s format code
|
|
62
|
+
- Fixed bug introduced in 11.91 where exiftool couldn't find its libraries
|
|
63
|
+
when run via a soft link. Also changed to look for config file in the link
|
|
64
|
+
target directory instead of the directory of the link itself
|
|
65
|
+
|
|
10
66
|
Oct. 27, 2021 - Version 12.34
|
|
11
67
|
|
|
12
68
|
- Added support for ICC.2:2019 (Profile version 5.0.0 - iccMAX) color profiles
|
|
13
69
|
- Added ability to detect/delete a Windows Zone.Identifier alternate data
|
|
14
|
-
stream (ADS) via the new ZoneIdentifier tag
|
|
70
|
+
stream (ADS) via the new ZoneIdentifier tag (thanks Alex Xu)
|
|
15
71
|
- Added support for the Sony ILCE-7M4 (thanks Jos Roost)
|
|
16
72
|
- Added a new Sony lens (thanks LibRaw and Jos Roost)
|
|
17
73
|
- Added a new SonyModelID (thanks LibRaw)
|
|
@@ -19,7 +75,7 @@ Oct. 27, 2021 - Version 12.34
|
|
|
19
75
|
- Improved handling of some SVG files
|
|
20
76
|
- Patched -overwrite_original_in_place option to open the output file in
|
|
21
77
|
update mode rather than write mode (to allow some write optimizations on
|
|
22
|
-
certain filesystems)
|
|
78
|
+
certain filesystems) (thanks Joel Low)
|
|
23
79
|
- Fixed case of tag ID for new XMP-iptcExt:EventID (thanks Michael Steidl)
|
|
24
80
|
- Fixed problem extracting ICC_Profile information from some PDF files
|
|
25
81
|
- API Changes:
|
|
@@ -153,6 +209,8 @@ May 20, 2021 - Version 12.26 (production release)
|
|
|
153
209
|
- Fixed problem which could cause a "Wide character" warning and generate a
|
|
154
210
|
corrupted output file when writing some illegal values
|
|
155
211
|
|
|
212
|
+
History of older versions (back to Nov. 19, 2003 - Version 1.00) -->
|
|
213
|
+
|
|
156
214
|
Apr. 22, 2021 - Version 12.25
|
|
157
215
|
|
|
158
216
|
- JPEG XL support is now official
|
|
@@ -635,6 +693,7 @@ Mar. 19, 2020 - Version 11.92
|
|
|
635
693
|
|
|
636
694
|
Mar. 5, 2020 - Version 11.91
|
|
637
695
|
|
|
696
|
+
- Added undocumented -xpath option for use by alternate Windows version
|
|
638
697
|
- Decode a couple of new Panasonic tags
|
|
639
698
|
- Documented -ec option (available since version 11.54)
|
|
640
699
|
- Reverted -htmlDump fix of 11.90 because it broke more than it fixed, and
|
|
@@ -107,8 +107,8 @@ your home directory, then you would type the following commands in a
|
|
|
107
107
|
terminal window to extract and run ExifTool:
|
|
108
108
|
|
|
109
109
|
cd ~/Desktop
|
|
110
|
-
gzip -dc Image-ExifTool-12.
|
|
111
|
-
cd Image-ExifTool-12.
|
|
110
|
+
gzip -dc Image-ExifTool-12.38.tar.gz | tar -xf -
|
|
111
|
+
cd Image-ExifTool-12.38
|
|
112
112
|
./exiftool t/images/ExifTool.jpg
|
|
113
113
|
|
|
114
114
|
Note: These commands extract meta information from one of the test images.
|
|
@@ -10,15 +10,15 @@
|
|
|
10
10
|
use strict;
|
|
11
11
|
require 5.004;
|
|
12
12
|
|
|
13
|
-
my $version = '12.
|
|
13
|
+
my $version = '12.38';
|
|
14
14
|
|
|
15
15
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
|
16
|
-
my $
|
|
16
|
+
my $exePath;
|
|
17
17
|
BEGIN {
|
|
18
18
|
# (undocumented -xpath option added in 11.91, must come before other options)
|
|
19
|
-
$
|
|
19
|
+
$exePath = @ARGV && lc($ARGV[0]) eq '-xpath' && shift() ? $^X : $0;
|
|
20
20
|
# get exe directory
|
|
21
|
-
$exeDir = ($
|
|
21
|
+
$Image::ExifTool::exeDir = ($exePath =~ /(.*)[\\\/]/) ? $1 : '.';
|
|
22
22
|
# (no link following for Windows exe version)
|
|
23
23
|
# add lib directory at start of include path
|
|
24
24
|
unshift @INC, ($0 =~ /(.*)[\\\/]/) ? "$1/lib" : './lib';
|
|
@@ -350,7 +350,7 @@ sub Cleanup() {
|
|
|
350
350
|
#
|
|
351
351
|
|
|
352
352
|
# add arguments embedded in filename (Windows .exe version only)
|
|
353
|
-
if ($
|
|
353
|
+
if ($exePath =~ /\(([^\\\/]+)\)(.exe|.pl)?$/i) {
|
|
354
354
|
my $argstr = $1;
|
|
355
355
|
# divide into separate quoted or whitespace-delineated arguments
|
|
356
356
|
my (@args, $arg, $quote);
|
|
@@ -773,7 +773,7 @@ for (;;) {
|
|
|
773
773
|
}
|
|
774
774
|
my $fp = ($stayOpen == 1 ? \*STAYOPEN : \*ARGFILE);
|
|
775
775
|
unless ($mt->Open($fp, $argFile)) {
|
|
776
|
-
unless ($argFile !~ /^\// and $mt->Open($fp, "$exeDir/$argFile")) {
|
|
776
|
+
unless ($argFile !~ /^\// and $mt->Open($fp, "$Image::ExifTool::exeDir/$argFile")) {
|
|
777
777
|
Error "Error opening arg file $argFile\n";
|
|
778
778
|
$badCmd = 1;
|
|
779
779
|
next
|
|
@@ -1251,7 +1251,7 @@ for (;;) {
|
|
|
1251
1251
|
$textOverwrite += 2 if $t2 =~ /\+/; # append
|
|
1252
1252
|
if ($t1 ne 'W' and lc($t1) ne 'tagout') {
|
|
1253
1253
|
undef $tagOut;
|
|
1254
|
-
} elsif ($textOverwrite >= 2 and $textOut !~ /%[-+]?\d*[.:]?\d*[lu]?[
|
|
1254
|
+
} elsif ($textOverwrite >= 2 and $textOut !~ /%[-+]?\d*[.:]?\d*[lu]?[tgso]/) {
|
|
1255
1255
|
$tagOut = 0; # append tags to one file
|
|
1256
1256
|
} else {
|
|
1257
1257
|
$tagOut = 1; # separate file for each tag
|
|
@@ -1967,6 +1967,7 @@ sub GetImageInfo($$)
|
|
|
1967
1967
|
} else {
|
|
1968
1968
|
$pipe = qq{bzip2 -dc "$file" |};
|
|
1969
1969
|
}
|
|
1970
|
+
$$et{TRUST_PIPE} = 1;
|
|
1970
1971
|
}
|
|
1971
1972
|
}
|
|
1972
1973
|
# evaluate -if expression for conditional processing
|
|
@@ -2237,12 +2238,13 @@ sub GetImageInfo($$)
|
|
|
2237
2238
|
next unless defined $forcePrint;
|
|
2238
2239
|
$grp0 = $grp1 = 'Unknown';
|
|
2239
2240
|
}
|
|
2241
|
+
# add groups from structure fields
|
|
2242
|
+
AddGroups($$info{$tag}, $grp0, \%groups, \@groups) if ref $$info{$tag};
|
|
2240
2243
|
next if $groups{$grp1};
|
|
2241
2244
|
# include family 0 and 1 groups in URI except for internal tags
|
|
2242
2245
|
# (this will put internal tags in the "XML" group on readback)
|
|
2243
2246
|
$groups{$grp1} = $grp0;
|
|
2244
2247
|
push @groups, $grp1;
|
|
2245
|
-
AddGroups($$info{$tag}, $grp0, \%groups, \@groups) if ref $$info{$tag};
|
|
2246
2248
|
}
|
|
2247
2249
|
foreach $grp1 (@groups) {
|
|
2248
2250
|
my $grp = $groups{$grp1};
|
|
@@ -2365,7 +2367,8 @@ TAG: foreach $tag (@foundTags) {
|
|
|
2365
2367
|
}
|
|
2366
2368
|
my @groups = $et->GetGroup($tag);
|
|
2367
2369
|
$outfile and close($fp), undef($tmpText); # (shouldn't happen)
|
|
2368
|
-
|
|
2370
|
+
my $org = $et->GetValue('OriginalRawFileName') || $et->GetValue('OriginalFileName');
|
|
2371
|
+
($fp, $outfile, $append) = OpenOutputFile($orig, $tagName, \@groups, $ext, $org);
|
|
2369
2372
|
$fp or ++$countBad, next TAG;
|
|
2370
2373
|
$tmpText = $outfile unless $append;
|
|
2371
2374
|
}
|
|
@@ -3464,18 +3467,26 @@ sub ConvertBinary($)
|
|
|
3464
3467
|
}
|
|
3465
3468
|
|
|
3466
3469
|
#------------------------------------------------------------------------------
|
|
3467
|
-
# Compare
|
|
3470
|
+
# Compare ValueConv and PrintConv values of a tag to see if they are equal
|
|
3468
3471
|
# Inputs: 0) value1, 1) value2
|
|
3469
3472
|
# Returns: true if they are equal
|
|
3470
3473
|
sub IsEqual($$)
|
|
3471
3474
|
{
|
|
3472
|
-
|
|
3473
|
-
|
|
3474
|
-
|
|
3475
|
-
|
|
3476
|
-
|
|
3477
|
-
|
|
3478
|
-
|
|
3475
|
+
my ($a, $b) = @_;
|
|
3476
|
+
# (scalar values are not print-converted)
|
|
3477
|
+
return 1 if $a eq $b or ref $a eq 'SCALAR';
|
|
3478
|
+
if (ref $a eq 'HASH' and ref $b eq 'HASH') {
|
|
3479
|
+
return 0 if scalar(keys %$a) != scalar(keys %$b);
|
|
3480
|
+
my $key;
|
|
3481
|
+
foreach $key (keys %$a) {
|
|
3482
|
+
return 0 unless IsEqual($$a{$key}, $$b{$key});
|
|
3483
|
+
}
|
|
3484
|
+
} else {
|
|
3485
|
+
return 0 if ref $a ne 'ARRAY' or ref $b ne 'ARRAY' or @$a != @$b;
|
|
3486
|
+
my $i;
|
|
3487
|
+
for ($i=0; $i<scalar(@$a); ++$i) {
|
|
3488
|
+
return 0 unless IsEqual($$a[$i], $$b[$i]);
|
|
3489
|
+
}
|
|
3479
3490
|
}
|
|
3480
3491
|
return 1;
|
|
3481
3492
|
}
|
|
@@ -3803,7 +3814,7 @@ sub FindFileWindows($$)
|
|
|
3803
3814
|
my $enc = $et->Options('CharsetFileName');
|
|
3804
3815
|
$wildfile = $et->Decode($wildfile, $enc, undef, 'UTF8') if $enc and $enc ne 'UTF8';
|
|
3805
3816
|
$wildfile =~ tr/\\/\//; # use forward slashes
|
|
3806
|
-
my ($dir, $wildname) = ($wildfile =~ m{(
|
|
3817
|
+
my ($dir, $wildname) = ($wildfile =~ m{(.*[:/])(.*)}) ? ($1, $2) : ('', $wildfile);
|
|
3807
3818
|
if ($dir =~ /[*?]/) {
|
|
3808
3819
|
Warn "Wildcards don't work in the directory specification\n";
|
|
3809
3820
|
return ();
|
|
@@ -3943,7 +3954,7 @@ sub SuggestedExtension($$$)
|
|
|
3943
3954
|
$ext = 'xml';
|
|
3944
3955
|
} elsif ($$valPt =~ /^RIFF....WAVE/s) {
|
|
3945
3956
|
$ext = 'wav';
|
|
3946
|
-
} elsif ($tag eq '
|
|
3957
|
+
} elsif ($tag eq 'OriginalRawImage' and defined($ext = $et->GetValue('OriginalRawFileName'))) {
|
|
3947
3958
|
$ext =~ s/^.*\.//s;
|
|
3948
3959
|
$ext = $ext ? lc($ext) : 'raw';
|
|
3949
3960
|
} elsif ($tag eq 'EXIF') {
|
|
@@ -3995,14 +4006,15 @@ sub LoadPrintFormat($)
|
|
|
3995
4006
|
# A sort of sprintf for filenames
|
|
3996
4007
|
# Inputs: 0) format string (%d=dir, %f=file name, %e=ext),
|
|
3997
4008
|
# 1) source filename or undef to test format string
|
|
3998
|
-
# 2-4) [%t %g %s only] tag name, ref to array of group names,
|
|
4009
|
+
# 2-4) [%t %g %s %o only] tag name, ref to array of group names,
|
|
4010
|
+
# suggested extension, original raw file name
|
|
3999
4011
|
# Returns: new filename or undef on error (or if no file and fmt contains token)
|
|
4000
4012
|
sub FilenameSPrintf($;$@)
|
|
4001
4013
|
{
|
|
4002
4014
|
my ($fmt, $file, @extra) = @_;
|
|
4003
4015
|
local $_;
|
|
4004
4016
|
# return format string straight away if no tokens
|
|
4005
|
-
return $fmt unless $fmt =~ /%[-+]?\d*[.:]?\d*[lu]?[
|
|
4017
|
+
return $fmt unless $fmt =~ /%[-+]?\d*[.:]?\d*[lu]?[dDfFeEtgso]/;
|
|
4006
4018
|
return undef unless defined $file;
|
|
4007
4019
|
CleanFilename($file); # make sure we are using forward slashes
|
|
4008
4020
|
# split filename into directory, file, extension
|
|
@@ -4016,9 +4028,9 @@ sub FilenameSPrintf($;$@)
|
|
|
4016
4028
|
}
|
|
4017
4029
|
$part{F} = $part{f} . $part{E};
|
|
4018
4030
|
($part{D} = $part{d}) =~ s{/+$}{};
|
|
4019
|
-
@part{qw(t g s)} = @extra;
|
|
4031
|
+
@part{qw(t g s o)} = @extra;
|
|
4020
4032
|
my ($filename, $pos) = ('', 0);
|
|
4021
|
-
while ($fmt =~ /(%([-+]?)(\d*)([.:]?)(\d*)([lu]?)([
|
|
4033
|
+
while ($fmt =~ /(%([-+]?)(\d*)([.:]?)(\d*)([lu]?)([dDfFeEtgso]))/g) {
|
|
4022
4034
|
$filename .= substr($fmt, $pos, pos($fmt) - $pos - length($1));
|
|
4023
4035
|
$pos = pos($fmt);
|
|
4024
4036
|
my ($sign, $wid, $dot, $skip, $mod, $code) = ($2, $3, $4, $5 || 0, $6, $7);
|
|
@@ -4181,7 +4193,7 @@ sub OpenOutputFile($;@)
|
|
|
4181
4193
|
if ($textOut) {
|
|
4182
4194
|
$outfile = $file;
|
|
4183
4195
|
CleanFilename($outfile);
|
|
4184
|
-
if ($textOut =~ /%[-+]?\d*[.:]?\d*[lun]?[
|
|
4196
|
+
if ($textOut =~ /%[-+]?\d*[.:]?\d*[lun]?[dDfFeEtgsocC]/ or defined $tagOut) {
|
|
4185
4197
|
# make filename from printf-like $textOut
|
|
4186
4198
|
$outfile = FilenameSPrintf($textOut, $file, @args);
|
|
4187
4199
|
return () unless defined $outfile;
|
|
@@ -4726,6 +4738,15 @@ OPTIONS
|
|
|
4726
4738
|
4 below). Instead, individual tags may be recovered using the
|
|
4727
4739
|
-tagsFromFile option (eg. "-all= -tagsfromfile @ -artist").
|
|
4728
4740
|
|
|
4741
|
+
To speed processing when reading XMP, exclusions in XMP groups also
|
|
4742
|
+
bypass processing of the corresponding XMP property and any
|
|
4743
|
+
contained properties. For example, "--xmp-crs:all" may speed
|
|
4744
|
+
processing significantly in cases where a large number of XMP-crs
|
|
4745
|
+
tags exist. To use this feature to bypass processing of a specific
|
|
4746
|
+
XMP property, the property name must be used instead of the
|
|
4747
|
+
ExifTool tag name (eg. "--xmp-crs:dabs"). Also, "XMP-all" may be
|
|
4748
|
+
used to to indicate any XMP namespace (eg. <C--xmp-all:dabs>).
|
|
4749
|
+
|
|
4729
4750
|
-*TAG*[+-^]=[*VALUE*]
|
|
4730
4751
|
Write a new value for the specified tag (eg. "-comment=wow"), or
|
|
4731
4752
|
delete the tag if no *VALUE* is given (eg. "-comment="). "+=" and
|
|
@@ -4736,7 +4757,8 @@ OPTIONS
|
|
|
4736
4757
|
may be used to conditionally delete or replace a tag (see "WRITING
|
|
4737
4758
|
EXAMPLES" for examples). "^=" is used to write an empty string
|
|
4738
4759
|
instead of deleting the tag when no *VALUE* is given, but otherwise
|
|
4739
|
-
it is equivalent to "="
|
|
4760
|
+
it is equivalent to "=", but note that the caret must be quoted on
|
|
4761
|
+
the Windows command line.
|
|
4740
4762
|
|
|
4741
4763
|
*TAG* may contain one or more leading family 0, 1, 2 or 7 group
|
|
4742
4764
|
names, prefixed by optional family numbers, and separated colons.
|
|
@@ -5192,7 +5214,10 @@ OPTIONS
|
|
|
5192
5214
|
"strftime" man page on your system for details. The default format
|
|
5193
5215
|
is equivalent to "%Y:%m:%d %H:%M:%S". This option has no effect on
|
|
5194
5216
|
date-only or time-only tags and ignores timezone information if
|
|
5195
|
-
present.
|
|
5217
|
+
present. ExifTool adds a %f format code to represent fractional
|
|
5218
|
+
seconds, and supports an optional width to specify the number of
|
|
5219
|
+
digits after the decimal point (eg. %3f would give something like
|
|
5220
|
+
.437). Only one -d option may be used per command. Requires
|
|
5196
5221
|
POSIX::strptime or Time::Piece for the inversion conversion when
|
|
5197
5222
|
writing.
|
|
5198
5223
|
|
|
@@ -5421,7 +5446,8 @@ OPTIONS
|
|
|
5421
5446
|
beginning with "#" are output for each processed file. Lines
|
|
5422
5447
|
beginning with "#[IF]" are not output, but all BODY lines are
|
|
5423
5448
|
skipped if any tag on an IF line doesn't exist. Other lines
|
|
5424
|
-
beginning with "#" are ignored.
|
|
5449
|
+
beginning with "#" are ignored. (To output a line beginning with
|
|
5450
|
+
"#", use "#[BODY]#".) For example, this format file:
|
|
5425
5451
|
|
|
5426
5452
|
# this is a comment line
|
|
5427
5453
|
#[HEAD]-- Generated by ExifTool $exifToolVersion --
|
|
@@ -5435,7 +5461,7 @@ OPTIONS
|
|
|
5435
5461
|
|
|
5436
5462
|
produces output like this:
|
|
5437
5463
|
|
|
5438
|
-
-- Generated by ExifTool 12.
|
|
5464
|
+
-- Generated by ExifTool 12.38 --
|
|
5439
5465
|
File: a.jpg - 2003:10:31 15:44:19
|
|
5440
5466
|
(f/5.6, 1/60s, ISO 100)
|
|
5441
5467
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -5692,13 +5718,15 @@ OPTIONS
|
|
|
5692
5718
|
|
|
5693
5719
|
1) With -W, a new output file is created for each extracted tag.
|
|
5694
5720
|
|
|
5695
|
-
2) -W supports
|
|
5721
|
+
2) -W supports four additional format codes: %t, %g and %s
|
|
5696
5722
|
represent the tag name, group name, and suggested extension for the
|
|
5697
|
-
output file (based on the format of the data)
|
|
5698
|
-
|
|
5699
|
-
|
|
5700
|
-
|
|
5701
|
-
|
|
5723
|
+
output file (based on the format of the data), and %o represents
|
|
5724
|
+
the value of the OriginalRawFileName or OriginalFileName tag from
|
|
5725
|
+
the input file (including extension). The %g code may be followed
|
|
5726
|
+
by a single digit to specify the group family number (eg. %g1),
|
|
5727
|
+
otherwise family 0 is assumed. The substring width/position/case
|
|
5728
|
+
specifiers may be used with these format codes in exactly the same
|
|
5729
|
+
way as with %f and %e.
|
|
5702
5730
|
|
|
5703
5731
|
3) The argument for -W is interpreted as a file name if it contains
|
|
5704
5732
|
no format codes. (For -w, this would be a file extension.) This
|
|
@@ -5720,7 +5748,7 @@ OPTIONS
|
|
|
5720
5748
|
file names to the console instead of giving a verbose dump of the
|
|
5721
5749
|
entire file. (Unless appending all output to one file for each
|
|
5722
5750
|
source file by using -W+ with an output file *FMT* that does not
|
|
5723
|
-
contain %t,
|
|
5751
|
+
contain %t, %g, %s or %o.)
|
|
5724
5752
|
|
|
5725
5753
|
5) Individual list items are stored in separate files when -W is
|
|
5726
5754
|
combined with -b, but note that for separate files to be created %c
|
|
@@ -35,7 +35,7 @@ use Image::ExifTool::Sony;
|
|
|
35
35
|
use Image::ExifTool::Validate;
|
|
36
36
|
use Image::ExifTool::MacOS;
|
|
37
37
|
|
|
38
|
-
$VERSION = '3.
|
|
38
|
+
$VERSION = '3.47';
|
|
39
39
|
@ISA = qw(Exporter);
|
|
40
40
|
|
|
41
41
|
sub NumbersFirst($$);
|
|
@@ -757,7 +757,7 @@ sub new
|
|
|
757
757
|
my (%tagNameInfo, %id, %longID, %longName, %shortName, %tableNum,
|
|
758
758
|
%tagLookup, %tagExists, %noLookup, %tableWritable, %sepTable, %case,
|
|
759
759
|
%structs, %compositeModules, %isPlugin, %flattened, %structLookup,
|
|
760
|
-
@writePseudo);
|
|
760
|
+
@writePseudo, %dupXmpTag);
|
|
761
761
|
$self->{TAG_NAME_INFO} = \%tagNameInfo;
|
|
762
762
|
$self->{ID_LOOKUP} = \%id;
|
|
763
763
|
$self->{LONG_ID} = \%longID;
|
|
@@ -905,6 +905,10 @@ TagID: foreach $tagID (@keys) {
|
|
|
905
905
|
foreach (@grps) {
|
|
906
906
|
warn "Group name starts with 'ID-' for $short $name\n" if /^ID-/i;
|
|
907
907
|
}
|
|
908
|
+
if ($isXMP and not $$tagInfo{Avoid} and not $$tagInfo{Struct}) {
|
|
909
|
+
$dupXmpTag{$name} and warn "Duplicate XMP tag $name\n";
|
|
910
|
+
$dupXmpTag{$name} = 1;
|
|
911
|
+
}
|
|
908
912
|
# validate Name (must not start with a digit or else XML output will not be valid;
|
|
909
913
|
# must not start with a dash or exiftool command line may get confused)
|
|
910
914
|
if ($name !~ /^[_A-Za-z][-\w]+$/ and
|
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
|
88
88
|
sub ProcessExifInfo($$$);
|
|
89
89
|
sub SwapWords($);
|
|
90
90
|
|
|
91
|
-
$VERSION = '4.
|
|
91
|
+
$VERSION = '4.55';
|
|
92
92
|
|
|
93
93
|
# Note: Removed 'USM' from 'L' lenses since it is redundant - PH
|
|
94
94
|
# (or is it? Ref 32 shows 5 non-USM L-type lenses)
|
|
@@ -954,6 +954,7 @@ $VERSION = '4.53';
|
|
|
954
954
|
0x80000435 => 'EOS Rebel T8i / 850D / X10i', #JR/PH
|
|
955
955
|
0x80000436 => 'EOS SL3 / 250D / Kiss X10', #25
|
|
956
956
|
0x80000437 => 'EOS 90D', #IB
|
|
957
|
+
0x80000450 => 'EOS R3', #42
|
|
957
958
|
0x80000453 => 'EOS R6', #PH
|
|
958
959
|
0x80000467 => 'PowerShot ZOOM',
|
|
959
960
|
0x80000468 => 'EOS M50 Mark II / Kiss M2', #IB
|
|
@@ -1918,6 +1919,11 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
|
1918
1919
|
Name => 'ColorData10',
|
|
1919
1920
|
SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData10' },
|
|
1920
1921
|
},
|
|
1922
|
+
{ # (int16u[3973]) - R3 ref IB
|
|
1923
|
+
Condition => '$count == 3973',
|
|
1924
|
+
Name => 'ColorData11',
|
|
1925
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData11' },
|
|
1926
|
+
},
|
|
1921
1927
|
{
|
|
1922
1928
|
Name => 'ColorDataUnknown',
|
|
1923
1929
|
SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorDataUnknown' },
|
|
@@ -7719,7 +7725,10 @@ my %ciMaxFocal = (
|
|
|
7719
7725
|
# Color data (MakerNotes tag 0x4001, count=1312,1313,1316) (ref PH)
|
|
7720
7726
|
%Image::ExifTool::Canon::ColorData7 = (
|
|
7721
7727
|
%binaryDataAttrs,
|
|
7722
|
-
NOTES =>
|
|
7728
|
+
NOTES => q{
|
|
7729
|
+
These tags are used by the EOS 1DX, 5DmkIII, 6D, 7DmkII, 100D, 650D, 700D,
|
|
7730
|
+
8000D, M and M2.
|
|
7731
|
+
},
|
|
7723
7732
|
FORMAT => 'int16s',
|
|
7724
7733
|
FIRST_ENTRY => 0,
|
|
7725
7734
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
@@ -7730,8 +7739,8 @@ my %ciMaxFocal = (
|
|
|
7730
7739
|
DataMember => 'ColorDataVersion',
|
|
7731
7740
|
RawConv => '$$self{ColorDataVersion} = $val',
|
|
7732
7741
|
PrintConv => {
|
|
7733
|
-
10 => '10 (1DX/5DmkIII/6D/70D/100D/650D/700D/M)',
|
|
7734
|
-
11 => '11 (7DmkII/750D/760D)',
|
|
7742
|
+
10 => '10 (1DX/5DmkIII/6D/70D/100D/650D/700D/M/M2)',
|
|
7743
|
+
11 => '11 (7DmkII/750D/760D/8000D)',
|
|
7735
7744
|
},
|
|
7736
7745
|
},
|
|
7737
7746
|
# not really sure about the AsShot, Auto and Measured values any more - PH
|
|
@@ -7866,6 +7875,10 @@ my %ciMaxFocal = (
|
|
|
7866
7875
|
# Color data (MakerNotes tag 0x4001, count=1560,etc) (ref IB)
|
|
7867
7876
|
%Image::ExifTool::Canon::ColorData8 = (
|
|
7868
7877
|
%binaryDataAttrs,
|
|
7878
|
+
NOTES => q{
|
|
7879
|
+
These tags are used by the EOS 1DXmkII, 5DS, 5DSR, 5DmkIV, 6DmkII, 77D, 80D,
|
|
7880
|
+
200D, 800D, 1300D, 2000D, 4000D and 9000D.
|
|
7881
|
+
},
|
|
7869
7882
|
FORMAT => 'int16s',
|
|
7870
7883
|
FIRST_ENTRY => 0,
|
|
7871
7884
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
@@ -7876,10 +7889,10 @@ my %ciMaxFocal = (
|
|
|
7876
7889
|
DataMember => 'ColorDataVersion',
|
|
7877
7890
|
RawConv => '$$self{ColorDataVersion} = $val',
|
|
7878
7891
|
PrintConv => {
|
|
7879
|
-
12 => '12 (5DS/5DSR)',
|
|
7880
|
-
13 => '13 (80D)', #PH
|
|
7892
|
+
12 => '12 (1DXmkII/5DS/5DSR)',
|
|
7893
|
+
13 => '13 (80D/5DmkIV)', #PH
|
|
7881
7894
|
14 => '14 (1300D/2000D/4000D)', #IB
|
|
7882
|
-
15 => '15 (6DmkII/77D/200D/800D)', #IB
|
|
7895
|
+
15 => '15 (6DmkII/77D/200D/800D,9000D)', #IB
|
|
7883
7896
|
},
|
|
7884
7897
|
},
|
|
7885
7898
|
0x3f => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' },
|
|
@@ -8026,6 +8039,7 @@ my %ciMaxFocal = (
|
|
|
8026
8039
|
# Color data (MakerNotes tag 0x4001, count=1820,etc) (ref PH)
|
|
8027
8040
|
%Image::ExifTool::Canon::ColorData9 = (
|
|
8028
8041
|
%binaryDataAttrs,
|
|
8042
|
+
NOTES => 'These tags are used by the M6mkII, M50, M200, EOS R, RP, 90D, 250D and 850D',
|
|
8029
8043
|
FORMAT => 'int16s',
|
|
8030
8044
|
FIRST_ENTRY => 0,
|
|
8031
8045
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
@@ -8038,8 +8052,8 @@ my %ciMaxFocal = (
|
|
|
8038
8052
|
PrintConv => {
|
|
8039
8053
|
16 => '16 (M50)',
|
|
8040
8054
|
17 => '17 (EOS R)', # (and PowerShot SX740HS)
|
|
8041
|
-
18 => '18 (EOS RP)', # (and PowerShot SX70HS)
|
|
8042
|
-
19 => '19 (90D/M6mkII/M200)',# (and PowerShot G7XmkIII)
|
|
8055
|
+
18 => '18 (EOS RP/250D)', # (and PowerShot SX70HS)
|
|
8056
|
+
19 => '19 (90D/850D/M6mkII/M200)',# (and PowerShot G7XmkIII)
|
|
8043
8057
|
},
|
|
8044
8058
|
},
|
|
8045
8059
|
0x47 => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' },
|
|
@@ -8150,6 +8164,7 @@ my %ciMaxFocal = (
|
|
|
8150
8164
|
# (same as ColorData9 but shifted up by 0x0e, ref PH)
|
|
8151
8165
|
%Image::ExifTool::Canon::ColorData10 = (
|
|
8152
8166
|
%binaryDataAttrs,
|
|
8167
|
+
NOTES => 'These tags are used by the R5, R5 and EOS 1DXmkIII.',
|
|
8153
8168
|
FORMAT => 'int16s',
|
|
8154
8169
|
FIRST_ENTRY => 0,
|
|
8155
8170
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
@@ -8268,6 +8283,125 @@ my %ciMaxFocal = (
|
|
|
8268
8283
|
},
|
|
8269
8284
|
);
|
|
8270
8285
|
|
|
8286
|
+
# Color data (MakerNotes tag 0x4001, count=3973, ref IB)
|
|
8287
|
+
%Image::ExifTool::Canon::ColorData11 = (
|
|
8288
|
+
%binaryDataAttrs,
|
|
8289
|
+
NOTES => 'These tags are used by the EOS R3',
|
|
8290
|
+
FORMAT => 'int16s',
|
|
8291
|
+
FIRST_ENTRY => 0,
|
|
8292
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
8293
|
+
DATAMEMBER => [ 0 ],
|
|
8294
|
+
IS_SUBDIR => [ 0x12c ],
|
|
8295
|
+
0x00 => {
|
|
8296
|
+
Name => 'ColorDataVersion',
|
|
8297
|
+
DataMember => 'ColorDataVersion',
|
|
8298
|
+
RawConv => '$$self{ColorDataVersion} = $val',
|
|
8299
|
+
PrintConv => {
|
|
8300
|
+
34 => '34 (R3)', #IB
|
|
8301
|
+
},
|
|
8302
|
+
},
|
|
8303
|
+
0x69 => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' },
|
|
8304
|
+
0x6d => 'ColorTempAsShot',
|
|
8305
|
+
0x6e => { Name => 'WB_RGGBLevelsAuto', Format => 'int16s[4]' },
|
|
8306
|
+
0x72 => 'ColorTempAuto',
|
|
8307
|
+
0x73 => { Name => 'WB_RGGBLevelsMeasured', Format => 'int16s[4]' },
|
|
8308
|
+
0x77 => 'ColorTempMeasured',
|
|
8309
|
+
0x78 => { Name => 'WB_RGGBLevelsUnknown', Format => 'int16s[4]', Unknown => 1 },
|
|
8310
|
+
0x7c => { Name => 'ColorTempUnknown', Unknown => 1 },
|
|
8311
|
+
0x7d => { Name => 'WB_RGGBLevelsUnknown2', Format => 'int16s[4]', Unknown => 1 },
|
|
8312
|
+
0x81 => { Name => 'ColorTempUnknown2', Unknown => 1 },
|
|
8313
|
+
0x82 => { Name => 'WB_RGGBLevelsUnknown3', Format => 'int16s[4]', Unknown => 1 },
|
|
8314
|
+
0x86 => { Name => 'ColorTempUnknown3', Unknown => 1 },
|
|
8315
|
+
0x87 => { Name => 'WB_RGGBLevelsUnknown4', Format => 'int16s[4]', Unknown => 1 },
|
|
8316
|
+
0x8b => { Name => 'ColorTempUnknown4', Unknown => 1 },
|
|
8317
|
+
0x8c => { Name => 'WB_RGGBLevelsUnknown5', Format => 'int16s[4]', Unknown => 1 },
|
|
8318
|
+
0x90 => { Name => 'ColorTempUnknown5', Unknown => 1 },
|
|
8319
|
+
0x91 => { Name => 'WB_RGGBLevelsUnknown6', Format => 'int16s[4]', Unknown => 1 },
|
|
8320
|
+
0x95 => { Name => 'ColorTempUnknown6', Unknown => 1 },
|
|
8321
|
+
0x96 => { Name => 'WB_RGGBLevelsUnknown7', Format => 'int16s[4]', Unknown => 1 },
|
|
8322
|
+
0x9a => { Name => 'ColorTempUnknown7', Unknown => 1 },
|
|
8323
|
+
0x9b => { Name => 'WB_RGGBLevelsUnknown8', Format => 'int16s[4]', Unknown => 1 },
|
|
8324
|
+
0x9f => { Name => 'ColorTempUnknown8', Unknown => 1 },
|
|
8325
|
+
0xa0 => { Name => 'WB_RGGBLevelsUnknown9', Format => 'int16s[4]', Unknown => 1 },
|
|
8326
|
+
0xa4 => { Name => 'ColorTempUnknown9', Unknown => 1 },
|
|
8327
|
+
0xa5 => { Name => 'WB_RGGBLevelsUnknown10', Format => 'int16s[4]', Unknown => 1 },
|
|
8328
|
+
0xa9 => { Name => 'ColorTempUnknown10', Unknown => 1 },
|
|
8329
|
+
0xaa => { Name => 'WB_RGGBLevelsUnknown11', Format => 'int16s[4]', Unknown => 1 },
|
|
8330
|
+
0xae => { Name => 'ColorTempUnknown11', Unknown => 1 },
|
|
8331
|
+
0xaf => { Name => 'WB_RGGBLevelsUnknown11', Format => 'int16s[4]', Unknown => 1 },
|
|
8332
|
+
0xb3 => { Name => 'ColorTempUnknown11', Unknown => 1 },
|
|
8333
|
+
0xb4 => { Name => 'WB_RGGBLevelsUnknown12', Format => 'int16s[4]', Unknown => 1 },
|
|
8334
|
+
0xb8 => { Name => 'ColorTempUnknown12', Unknown => 1 },
|
|
8335
|
+
0xb9 => { Name => 'WB_RGGBLevelsUnknown13', Format => 'int16s[4]', Unknown => 1 },
|
|
8336
|
+
0xbd => { Name => 'ColorTempUnknown13', Unknown => 1 },
|
|
8337
|
+
0xbe => { Name => 'WB_RGGBLevelsUnknown14', Format => 'int16s[4]', Unknown => 1 },
|
|
8338
|
+
0xc2 => { Name => 'ColorTempUnknown14', Unknown => 1 },
|
|
8339
|
+
0xc3 => { Name => 'WB_RGGBLevelsUnknown15', Format => 'int16s[4]', Unknown => 1 },
|
|
8340
|
+
0xc7 => { Name => 'ColorTempUnknown15', Unknown => 1 },
|
|
8341
|
+
0xc8 => { Name => 'WB_RGGBLevelsUnknown16', Format => 'int16s[4]', Unknown => 1 },
|
|
8342
|
+
0xcc => { Name => 'ColorTempUnknown16', Unknown => 1 },
|
|
8343
|
+
0xcd => { Name => 'WB_RGGBLevelsDaylight', Format => 'int16s[4]' },
|
|
8344
|
+
0xd1 => 'ColorTempDaylight',
|
|
8345
|
+
0xd2 => { Name => 'WB_RGGBLevelsShade', Format => 'int16s[4]' },
|
|
8346
|
+
0xd6 => 'ColorTempShade',
|
|
8347
|
+
0xd7 => { Name => 'WB_RGGBLevelsCloudy', Format => 'int16s[4]' },
|
|
8348
|
+
0xdb => 'ColorTempCloudy',
|
|
8349
|
+
0xdc => { Name => 'WB_RGGBLevelsTungsten', Format => 'int16s[4]' },
|
|
8350
|
+
0xe0 => 'ColorTempTungsten',
|
|
8351
|
+
0xe1 => { Name => 'WB_RGGBLevelsFluorescent',Format => 'int16s[4]' },
|
|
8352
|
+
0xe5 => 'ColorTempFluorescent',
|
|
8353
|
+
0xe6 => { Name => 'WB_RGGBLevelsKelvin', Format => 'int16s[4]' },
|
|
8354
|
+
0xea => 'ColorTempKelvin',
|
|
8355
|
+
0xeb => { Name => 'WB_RGGBLevelsFlash', Format => 'int16s[4]' },
|
|
8356
|
+
0xef => 'ColorTempFlash',
|
|
8357
|
+
0xf0 => { Name => 'WB_RGGBLevelsUnknown17', Format => 'int16s[4]', Unknown => 1 },
|
|
8358
|
+
0xf4 => { Name => 'ColorTempUnknown17', Unknown => 1 },
|
|
8359
|
+
0xf5 => { Name => 'WB_RGGBLevelsUnknown18', Format => 'int16s[4]', Unknown => 1 },
|
|
8360
|
+
0xf9 => { Name => 'ColorTempUnknown18', Unknown => 1 },
|
|
8361
|
+
0xfa => { Name => 'WB_RGGBLevelsUnknown19', Format => 'int16s[4]', Unknown => 1 },
|
|
8362
|
+
0xfe => { Name => 'ColorTempUnknown19', Unknown => 1 },
|
|
8363
|
+
0xff => { Name => 'WB_RGGBLevelsUnknown20', Format => 'int16s[4]', Unknown => 1 },
|
|
8364
|
+
0x103 => { Name => 'ColorTempUnknown20', Unknown => 1 },
|
|
8365
|
+
0x104 => { Name => 'WB_RGGBLevelsUnknown21', Format => 'int16s[4]', Unknown => 1 },
|
|
8366
|
+
0x108 => { Name => 'ColorTempUnknown21', Unknown => 1 },
|
|
8367
|
+
0x109 => { Name => 'WB_RGGBLevelsUnknown22', Format => 'int16s[4]', Unknown => 1 },
|
|
8368
|
+
0x10d => { Name => 'ColorTempUnknown22', Unknown => 1 },
|
|
8369
|
+
0x10e => { Name => 'WB_RGGBLevelsUnknown23', Format => 'int16s[4]', Unknown => 1 },
|
|
8370
|
+
0x112 => { Name => 'ColorTempUnknown23', Unknown => 1 },
|
|
8371
|
+
0x113 => { Name => 'WB_RGGBLevelsUnknown24', Format => 'int16s[4]', Unknown => 1 },
|
|
8372
|
+
0x117 => { Name => 'ColorTempUnknown24', Unknown => 1 },
|
|
8373
|
+
0x118 => { Name => 'WB_RGGBLevelsUnknown25', Format => 'int16s[4]', Unknown => 1 },
|
|
8374
|
+
0x11c => { Name => 'ColorTempUnknown25', Unknown => 1 },
|
|
8375
|
+
0x11d => { Name => 'WB_RGGBLevelsUnknown26', Format => 'int16s[4]', Unknown => 1 },
|
|
8376
|
+
0x121 => { Name => 'ColorTempUnknown26', Unknown => 1 },
|
|
8377
|
+
0x122 => { Name => 'WB_RGGBLevelsUnknown27', Format => 'int16s[4]', Unknown => 1 },
|
|
8378
|
+
0x126 => { Name => 'ColorTempUnknown27', Unknown => 1 },
|
|
8379
|
+
0x12c => {
|
|
8380
|
+
Name => 'ColorCalib',
|
|
8381
|
+
Format => 'undef[120]',
|
|
8382
|
+
Unknown => 1,
|
|
8383
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorCalib' }
|
|
8384
|
+
},
|
|
8385
|
+
0x16b => {
|
|
8386
|
+
Name => 'PerChannelBlackLevel',
|
|
8387
|
+
Format => 'int16u[4]',
|
|
8388
|
+
},
|
|
8389
|
+
# 0x27c - PerChannelBlackLevel again
|
|
8390
|
+
0x280 => {
|
|
8391
|
+
Name => 'NormalWhiteLevel',
|
|
8392
|
+
Format => 'int16u',
|
|
8393
|
+
RawConv => '$val || undef',
|
|
8394
|
+
},
|
|
8395
|
+
0x281 => {
|
|
8396
|
+
Name => 'SpecularWhiteLevel',
|
|
8397
|
+
Format => 'int16u',
|
|
8398
|
+
},
|
|
8399
|
+
0x282 => {
|
|
8400
|
+
Name => 'LinearityUpperMargin',
|
|
8401
|
+
Format => 'int16u',
|
|
8402
|
+
},
|
|
8403
|
+
);
|
|
8404
|
+
|
|
8271
8405
|
# Unknown color data (MakerNotes tag 0x4001)
|
|
8272
8406
|
%Image::ExifTool::Canon::ColorDataUnknown = (
|
|
8273
8407
|
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
@@ -1290,9 +1290,19 @@ my %convPFn = ( PrintConv => \&ConvertPfn, PrintConvInv => \&ConvertPfnInv );
|
|
|
1290
1290
|
},
|
|
1291
1291
|
},
|
|
1292
1292
|
0x0106 => [{
|
|
1293
|
+
Name => 'AEBShotCount',
|
|
1294
|
+
Condition => '$$self{Model} =~ /\b90D\b/',
|
|
1295
|
+
Notes => 'EOS 90D', # (and who knows what others?)
|
|
1296
|
+
PrintConv => {
|
|
1297
|
+
2 => '2 shots',
|
|
1298
|
+
3 => '3 shots',
|
|
1299
|
+
5 => '5 shots',
|
|
1300
|
+
7 => '7 shots',
|
|
1301
|
+
},
|
|
1302
|
+
},{
|
|
1293
1303
|
Name => 'AEBShotCount',
|
|
1294
1304
|
Condition => '$count == 1',
|
|
1295
|
-
Notes => '
|
|
1305
|
+
Notes => 'other models storing a single value',
|
|
1296
1306
|
PrintConv => {
|
|
1297
1307
|
0 => '3 shots',
|
|
1298
1308
|
1 => '2 shots',
|
|
@@ -1302,7 +1312,7 @@ my %convPFn = ( PrintConv => \&ConvertPfn, PrintConvInv => \&ConvertPfnInv );
|
|
|
1302
1312
|
},{
|
|
1303
1313
|
Name => 'AEBShotCount',
|
|
1304
1314
|
Count => 2,
|
|
1305
|
-
Notes => 'two values
|
|
1315
|
+
Notes => 'models storing two values',
|
|
1306
1316
|
PrintConv => {
|
|
1307
1317
|
'3 0' => '3 shots',
|
|
1308
1318
|
'2 1' => '2 shots',
|