exiftool_vendored 13.40.0 → 13.41.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.
- checksums.yaml +4 -4
- data/bin/Changes +20 -1
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +73 -38
- data/bin/lib/Image/ExifTool/Canon.pm +15 -12
- data/bin/lib/Image/ExifTool/Exif.pm +11 -6
- data/bin/lib/Image/ExifTool/Font.pm +3 -4
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +2 -1
- data/bin/lib/Image/ExifTool/LNK.pm +15 -2
- data/bin/lib/Image/ExifTool/Olympus.pm +4 -3
- data/bin/lib/Image/ExifTool/QuickTime.pm +20 -2
- data/bin/lib/Image/ExifTool/Red.pm +19 -9
- data/bin/lib/Image/ExifTool/TagLookup.pm +4 -0
- data/bin/lib/Image/ExifTool/TagNames.pod +14 -4
- data/bin/lib/Image/ExifTool.pm +17 -5
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2b44cbb111004a5ad11908f51cc4df6fdb3408e89fe85601272c4a842be84530
|
|
4
|
+
data.tar.gz: 9fb67bb8d2dc211216e00bfc588ea0da0eead4ca9580feeb4b8dd8a92b7fbec6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f572f1cc80a9d132fce1708b51c4f644518df142874e852cf26ff828d8f3840ad9bd130a7d788690d9a682ecd38d703ce732940ee3147bc712094c92928c6714
|
|
7
|
+
data.tar.gz: 87ba2fe582b1808334ad6e0a8581eef8153a91c50cad28f9374cd2aee6507aa6c07d0ea0a74769f2e8a87f5f2feca5f5767967d2ca200e2f5b7469fb4e1ab94a
|
data/bin/Changes
CHANGED
|
@@ -7,13 +7,32 @@ RSS feed: https://exiftool.org/rss.xml
|
|
|
7
7
|
Note: The most recent production release is Version 13.36. (Other versions are
|
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
|
9
9
|
|
|
10
|
+
Nov. 5, 2025 - Version 13.41
|
|
11
|
+
|
|
12
|
+
- Added a new Canon LensType
|
|
13
|
+
- Added Extra MakerNoteByteOrder tag
|
|
14
|
+
- Added byte-order indication to the -v3 output for EXIF and BinaryData
|
|
15
|
+
directories
|
|
16
|
+
- Added a new Panasonic/Olympus LensType (github #363)
|
|
17
|
+
- Added a new ProfileCMMType value (thanks Herb)
|
|
18
|
+
- Extract EnvironmentTarget from LNK files (github #362)
|
|
19
|
+
- Extract HighlightMarkers from DJI videos
|
|
20
|
+
- Decode another Red tag
|
|
21
|
+
- Recognize LRF file extension
|
|
22
|
+
- Updated CanonColorData decoding for the R50V
|
|
23
|
+
- Enhanced -csv= and -json= database import options to support full
|
|
24
|
+
redirection and advanced formatting expressions
|
|
25
|
+
- Require tags to be specified after the corresponding -csv= or -json= option
|
|
26
|
+
when importing specific tags from a database
|
|
27
|
+
- Fixed problem reading R3D images from the Red Komodo
|
|
28
|
+
|
|
10
29
|
Oct. 24, 2025 - Version 13.40
|
|
11
30
|
|
|
12
31
|
- Added read support for WOFF and WOFF2 font files (github #358)
|
|
13
32
|
- Added read support for Windows .URL files
|
|
14
33
|
- Added new XMP-iptcExt generative AI tags (thanks IPTC)
|
|
15
34
|
- Added config_files/local_time.config to the full distribution
|
|
16
|
-
- Enhanced CSV import allow SourceFile entries with a different case
|
|
35
|
+
- Enhanced CSV import to allow SourceFile entries with a different case
|
|
17
36
|
|
|
18
37
|
Oct. 15, 2025 - Version 13.39
|
|
19
38
|
|
data/bin/META.json
CHANGED
data/bin/META.yml
CHANGED
data/bin/README
CHANGED
|
@@ -111,8 +111,8 @@ your home directory, then you would type the following commands in a
|
|
|
111
111
|
terminal window to extract and run ExifTool:
|
|
112
112
|
|
|
113
113
|
cd ~/Desktop
|
|
114
|
-
gzip -dc Image-ExifTool-13.
|
|
115
|
-
cd Image-ExifTool-13.
|
|
114
|
+
gzip -dc Image-ExifTool-13.41.tar.gz | tar -xf -
|
|
115
|
+
cd Image-ExifTool-13.41
|
|
116
116
|
./exiftool t/images/ExifTool.jpg
|
|
117
117
|
|
|
118
118
|
Note: These commands extract meta information from one of the test images.
|
data/bin/exiftool
CHANGED
|
@@ -11,7 +11,7 @@ use strict;
|
|
|
11
11
|
use warnings;
|
|
12
12
|
require 5.004;
|
|
13
13
|
|
|
14
|
-
my $version = '13.
|
|
14
|
+
my $version = '13.41';
|
|
15
15
|
|
|
16
16
|
$^W = 1; # enable global warnings
|
|
17
17
|
|
|
@@ -97,6 +97,7 @@ END {
|
|
|
97
97
|
# declare all static file-scope variables
|
|
98
98
|
my @commonArgs; # arguments common to all commands
|
|
99
99
|
my @condition; # conditional processing of files
|
|
100
|
+
my @csvExclude; # list of tags excluded from CSV import
|
|
100
101
|
my @csvFiles; # list of files when reading with CSV option (in ExifTool Charset)
|
|
101
102
|
my @csvTags; # order of tags for first file with CSV option (lower case)
|
|
102
103
|
my @delFiles; # list of files to delete
|
|
@@ -441,6 +442,7 @@ if ($stayOpen >= 2) {
|
|
|
441
442
|
# (not done: @commonArgs, @moreArgs, $critical, $binaryStdout, $helped,
|
|
442
443
|
# $interrupted, $mt, $pause, $rtnValApp, $rtnValPrev, $stayOpen, $stayOpenBuff, $stayOpenFile)
|
|
443
444
|
undef @condition;
|
|
445
|
+
undef @csvExclude;
|
|
444
446
|
undef @csvFiles;
|
|
445
447
|
undef @csvTags;
|
|
446
448
|
undef @delFiles;
|
|
@@ -578,6 +580,7 @@ my $escapeXML; # flag to escape printed values for xml
|
|
|
578
580
|
my $setTagsFile; # filename for last TagsFromFile option
|
|
579
581
|
my $sortOpt; # sort option is used
|
|
580
582
|
my $srcStdin; # one of the source files is STDIN
|
|
583
|
+
my $tagsFrom = ''; # tags on command line come from 'csv' or 'file'
|
|
581
584
|
my $useMWG; # flag set if we are using any MWG tag
|
|
582
585
|
|
|
583
586
|
my ($argsLeft, @nextPass, $badCmd);
|
|
@@ -812,6 +815,7 @@ for (;;) {
|
|
|
812
815
|
}
|
|
813
816
|
# create necessary lists, etc for this new -tagsFromFile file
|
|
814
817
|
AddSetTagsFile($setTagsFile, { Replace => ($1 and lc($1) eq 'add') ? 0 : 1 } );
|
|
818
|
+
$tagsFrom = 'file';
|
|
815
819
|
next;
|
|
816
820
|
}
|
|
817
821
|
if ($a eq '@') {
|
|
@@ -927,6 +931,7 @@ for (;;) {
|
|
|
927
931
|
if ($csvFile) {
|
|
928
932
|
push @newValues, { SaveCount => ++$saveCount }; # marker to save new values now
|
|
929
933
|
$csvSaveCount = $saveCount;
|
|
934
|
+
$tagsFrom = 'csv';
|
|
930
935
|
}
|
|
931
936
|
next;
|
|
932
937
|
}
|
|
@@ -1117,6 +1122,7 @@ for (;;) {
|
|
|
1117
1122
|
push @nextPass, "-$_";
|
|
1118
1123
|
push @newValues, { SaveCount => ++$saveCount }; # marker to save new values now
|
|
1119
1124
|
$csvSaveCount = $saveCount;
|
|
1125
|
+
$tagsFrom = 'csv';
|
|
1120
1126
|
next;
|
|
1121
1127
|
}
|
|
1122
1128
|
my $jsonFile = $2;
|
|
@@ -1365,10 +1371,12 @@ for (;;) {
|
|
|
1365
1371
|
my $tag = shift;
|
|
1366
1372
|
defined $tag or Error("Expecting tag name for -x option\n"), $badCmd=1, next;
|
|
1367
1373
|
$tag =~ s/\ball\b/\*/ig; # replace 'all' with '*' in tag names
|
|
1368
|
-
if ($
|
|
1369
|
-
push @{$setTags{$setTagsFile}}, "-$tag";
|
|
1370
|
-
} else {
|
|
1374
|
+
if (not $tagsFrom) {
|
|
1371
1375
|
push @exclude, $tag;
|
|
1376
|
+
} elsif ($tagsFrom eq 'csv') {
|
|
1377
|
+
push @csvExclude, $tag;
|
|
1378
|
+
} else {
|
|
1379
|
+
push @{$setTags{$setTagsFile}}, "-$tag";
|
|
1372
1380
|
}
|
|
1373
1381
|
next;
|
|
1374
1382
|
}
|
|
@@ -1411,9 +1419,15 @@ for (;;) {
|
|
|
1411
1419
|
}
|
|
1412
1420
|
} else {
|
|
1413
1421
|
# assume '-tagsFromFile @' if tags are being redirected
|
|
1414
|
-
# and -tagsFromFile hasn't already been specified
|
|
1415
|
-
|
|
1416
|
-
|
|
1422
|
+
# and not from CSV and -tagsFromFile hasn't already been specified
|
|
1423
|
+
if (not $setTagsFile and $tagsFrom ne 'csv' and /(<|>)/) {
|
|
1424
|
+
AddSetTagsFile($setTagsFile = '@');
|
|
1425
|
+
$tagsFrom = 'file';
|
|
1426
|
+
}
|
|
1427
|
+
if ($tagsFrom eq 'csv') {
|
|
1428
|
+
my $lst = s/^-// ? \@csvExclude : \@tags;
|
|
1429
|
+
push @$lst, $_;
|
|
1430
|
+
} elsif ($setTagsFile) {
|
|
1417
1431
|
push @{$setTags{$setTagsFile}}, $_;
|
|
1418
1432
|
if ($1 eq '>') {
|
|
1419
1433
|
$useMWG = 1 if /^(.*>\s*)?([-_0-9A-Z]+:)*1?mwg:/si;
|
|
@@ -1794,11 +1808,9 @@ if (@newValues) {
|
|
|
1794
1808
|
$wrn and Warning($mt, $wrn);
|
|
1795
1809
|
}
|
|
1796
1810
|
# exclude specified tags
|
|
1797
|
-
|
|
1798
|
-
|
|
1799
|
-
|
|
1800
|
-
$needSave = 1;
|
|
1801
|
-
}
|
|
1811
|
+
foreach (@exclude) {
|
|
1812
|
+
$mt->SetNewValue($_, undef, Replace => 2);
|
|
1813
|
+
$needSave = 1;
|
|
1802
1814
|
}
|
|
1803
1815
|
unless ($isWriting or $outOpt or @tags) {
|
|
1804
1816
|
Error "Nothing to do.\n";
|
|
@@ -3250,7 +3262,7 @@ sub SetImageInfo($$$)
|
|
|
3250
3262
|
next;
|
|
3251
3263
|
} elsif (ref $dyFile eq 'SCALAR') {
|
|
3252
3264
|
# set new values from CSV or JSON database
|
|
3253
|
-
my ($f, $found, $csvTag, $
|
|
3265
|
+
my ($f, $found, $csvTag, $tg, $csvExifTool);
|
|
3254
3266
|
undef $evalWarning;
|
|
3255
3267
|
local $SIG{'__WARN__'} = sub { $evalWarning = $_[0] };
|
|
3256
3268
|
# force UTF-8 if the database was JSON
|
|
@@ -3278,39 +3290,51 @@ sub SetImageInfo($$$)
|
|
|
3278
3290
|
if ($verbose) {
|
|
3279
3291
|
print $vout "Setting new values from $csv database\n";
|
|
3280
3292
|
print $vout 'Including tags: ',join(' ',@tags),"\n" if @tags;
|
|
3281
|
-
print $vout 'Excluding tags: ',join(' ',@
|
|
3293
|
+
print $vout 'Excluding tags: ',join(' ',@csvExclude),"\n" if @csvExclude;
|
|
3282
3294
|
}
|
|
3283
|
-
|
|
3284
|
-
|
|
3295
|
+
if (@tags) {
|
|
3296
|
+
# prepare a dummy ExifTool object to hold appropriate tags from the database
|
|
3297
|
+
$csvExifTool = Image::ExifTool->new unless $csvExifTool;
|
|
3298
|
+
foreach $csvTag (OrderedKeys($csvInfo)) {
|
|
3299
|
+
next if $csvTag =~ /^([-_0-9A-Z]+:)*(SourceFile|Directory|FileName)$/i;
|
|
3300
|
+
my @grps = split /:/, $csvTag;
|
|
3301
|
+
my $name = pop @grps;
|
|
3302
|
+
unshift @grps, 'Unknown' while @grps < 2;
|
|
3303
|
+
$csvExifTool->FoundTag($name, $$csvInfo{$csvTag}, @grps);
|
|
3304
|
+
}
|
|
3305
|
+
next;
|
|
3306
|
+
}
|
|
3307
|
+
my @exclTags = @csvExclude;
|
|
3308
|
+
foreach (@exclTags) {
|
|
3285
3309
|
tr/-0-9a-zA-Z_:#?*//dc; # remove illegal characters
|
|
3286
3310
|
s/(^|:)(all:)+/$1/ig; # remove 'all' group names
|
|
3287
3311
|
s/(^|:)all(#?)$/$1*$2/i; # convert 'all' tag name to '*'
|
|
3288
3312
|
tr/?/./; s/\*/.*/g; # convert wildcards for regex
|
|
3289
3313
|
}
|
|
3314
|
+
# run through tags in database order
|
|
3290
3315
|
foreach $csvTag (OrderedKeys($csvInfo)) {
|
|
3291
3316
|
# don't write SourceFile, Directory or FileName
|
|
3292
3317
|
next if $csvTag =~ /^([-_0-9A-Z]+:)*(SourceFile|Directory|FileName)$/i;
|
|
3293
|
-
if (@
|
|
3294
|
-
my ($
|
|
3295
|
-
|
|
3296
|
-
$
|
|
3297
|
-
if ($tryTag =~ /:/) {
|
|
3318
|
+
if (@exclTags) {
|
|
3319
|
+
my ($exclTag, $exclGrp, $excluded);
|
|
3320
|
+
ExclMatch: foreach $exclTag (@exclTags) {
|
|
3321
|
+
if ($exclTag =~ /:/) {
|
|
3298
3322
|
next unless $csvTag =~ /:/; # db entry must also specify group
|
|
3299
3323
|
my @csvGrps = split /:/, $csvTag;
|
|
3300
|
-
my @
|
|
3301
|
-
my $
|
|
3302
|
-
next unless pop(@csvGrps) =~ /^$
|
|
3303
|
-
foreach $
|
|
3324
|
+
my @exclGrps = split /:/, $exclTag;
|
|
3325
|
+
my $exclName = pop @exclGrps;
|
|
3326
|
+
next unless pop(@csvGrps) =~ /^$exclName$/i; # tag name must match
|
|
3327
|
+
foreach $exclGrp (@exclGrps) {
|
|
3304
3328
|
# each specified group name must match db entry
|
|
3305
|
-
next
|
|
3329
|
+
next ExclMatch unless grep /^$exclGrp$/i, @csvGrps;
|
|
3306
3330
|
}
|
|
3307
|
-
$
|
|
3331
|
+
$excluded = 1;
|
|
3308
3332
|
last;
|
|
3309
3333
|
}
|
|
3310
3334
|
# no group specified, so match by tag name only
|
|
3311
|
-
$csvTag =~ /^([-_0-9A-Z]+:)*$
|
|
3335
|
+
$csvTag =~ /^([-_0-9A-Z]+:)*$exclTag$/i and $excluded = 1, last;
|
|
3312
3336
|
}
|
|
3313
|
-
next if $
|
|
3337
|
+
next if $excluded;
|
|
3314
3338
|
}
|
|
3315
3339
|
my ($rtn, $wrn) = $et->SetNewValue($csvTag, $$csvInfo{$csvTag},
|
|
3316
3340
|
Protected => 1, AddValue => $csvAdd,
|
|
@@ -3318,6 +3342,11 @@ TryMatch: for ($i=0; $i<@tryTags; ++$i) {
|
|
|
3318
3342
|
$wrn and Warn "$wrn\n" if $verbose;
|
|
3319
3343
|
}
|
|
3320
3344
|
}
|
|
3345
|
+
# set specified tags now
|
|
3346
|
+
if ($csvExifTool) {
|
|
3347
|
+
my @excl = map "-$_", @csvExclude; # add back leading dashes
|
|
3348
|
+
$et->SetNewValuesFromFile($csvExifTool, @tags, @excl);
|
|
3349
|
+
}
|
|
3321
3350
|
$et->Options(Charset => $old) if $csv eq 'JSON';
|
|
3322
3351
|
unless ($found) {
|
|
3323
3352
|
Warn("No SourceFile '${file}' in imported $csv database\n");
|
|
@@ -5758,10 +5787,13 @@ if this API option was used). Multiple databases may be imported in a
|
|
|
5758
5787
|
single command.
|
|
5759
5788
|
|
|
5760
5789
|
Specific tags may be imported from the CSV database by adding B<->I<TAG>
|
|
5761
|
-
options to the command
|
|
5762
|
-
priority. Group names and wildcards are
|
|
5763
|
-
|
|
5764
|
-
|
|
5790
|
+
options to the command after B<-csv=>I<CSVFILE>, or excluded with
|
|
5791
|
+
B<-->I<TAG>, with exclusions taking priority. Group names and wildcards are
|
|
5792
|
+
allowed, and tags from the CSV may be redirected and written to different
|
|
5793
|
+
tags in the target file with support for advanced-formatting expressions
|
|
5794
|
+
using the same syntax as the B<-tagsFromFile> feature. If no tags are
|
|
5795
|
+
specified, then all tags except FileName, Directory and excluded tags are
|
|
5796
|
+
imported (in the same order as the database entries).
|
|
5765
5797
|
|
|
5766
5798
|
When exporting a CSV file, the B<-g> or B<-G> option adds group names to the
|
|
5767
5799
|
tag headings. If the B<-a> option is used to allow duplicate tag names, the
|
|
@@ -5951,10 +5983,13 @@ compatible, and use B<-G> instead of B<-g>). Additionally, tag names in the
|
|
|
5951
5983
|
input JSON file may be suffixed with a C<#> to disable print conversion.
|
|
5952
5984
|
|
|
5953
5985
|
Specific tags may be imported from the JSON database by adding B<->I<TAG>
|
|
5954
|
-
options to the command
|
|
5955
|
-
priority. Group names and wildcards are
|
|
5956
|
-
|
|
5957
|
-
|
|
5986
|
+
options to the command after B<-j=>I<JSONFILE>, or excluded with
|
|
5987
|
+
B<-->I<TAG>, with exclusions taking priority. Group names and wildcards are
|
|
5988
|
+
allowed, and tags from JSON may be redirected and written to different tags
|
|
5989
|
+
in the target file with support for advanced-formatting expressions using
|
|
5990
|
+
the same syntax as the B<-tagsFromFile> feature. If no tags are specified,
|
|
5991
|
+
then all tags except FileName, Directory and excluded tags are imported (in
|
|
5992
|
+
the same order as the database entries).
|
|
5958
5993
|
|
|
5959
5994
|
Unlike CSV import, empty values are not ignored, and will cause an empty
|
|
5960
5995
|
value to be written if supported by the specific metadata type. Tags are
|
|
@@ -6095,7 +6130,7 @@ with this command:
|
|
|
6095
6130
|
|
|
6096
6131
|
produces output like this:
|
|
6097
6132
|
|
|
6098
|
-
-- Generated by ExifTool 13.
|
|
6133
|
+
-- Generated by ExifTool 13.41 --
|
|
6099
6134
|
File: a.jpg - 2003:10:31 15:44:19
|
|
6100
6135
|
(f/5.6, 1/60s, ISO 100)
|
|
6101
6136
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
|
88
88
|
sub ProcessExifInfo($$$);
|
|
89
89
|
sub SwapWords($);
|
|
90
90
|
|
|
91
|
-
$VERSION = '4.
|
|
91
|
+
$VERSION = '4.98';
|
|
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)
|
|
@@ -562,6 +562,7 @@ $VERSION = '4.97';
|
|
|
562
562
|
4160 => 'Canon EF-S 35mm f/2.8 Macro IS STM', #42
|
|
563
563
|
4208 => 'Sigma 56mm f/1.4 DC DN | C or other Sigma Lens', #forum10603
|
|
564
564
|
4208.1 => 'Sigma 30mm F1.4 DC DN | C', #github#83 (016)
|
|
565
|
+
4976 => 'Sigma 16-300mm F3.5-6.7 DC OS | C (025)', #50
|
|
565
566
|
6512 => 'Sigma 12mm F1.4 DC | C', #github#352 (025)
|
|
566
567
|
# (Nano USM lenses - 0x90xx)
|
|
567
568
|
36910 => 'Canon EF 70-300mm f/4-5.6 IS II USM', #42
|
|
@@ -1995,12 +1996,12 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
|
1995
1996
|
SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData10' },
|
|
1996
1997
|
},
|
|
1997
1998
|
{ # (int16u[3973]) - R3 ref IB
|
|
1998
|
-
Condition => '$count == 3973 or $count == 3778',
|
|
1999
|
+
Condition => '($count == 3973 or $count == 3778) and $$valPt !~ /^\x41\0/',
|
|
1999
2000
|
Name => 'ColorData11',
|
|
2000
2001
|
SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData11' },
|
|
2001
2002
|
},
|
|
2002
|
-
{ # (int16u[4528]) - R1/R5mkII ref forum16406
|
|
2003
|
-
Condition => '$count == 4528',
|
|
2003
|
+
{ # (int16u[4528]) - R1/R5mkII (4528) ref forum16406, R50V (3778) ref PH
|
|
2004
|
+
Condition => '$count == 4528 or $count == 3778',
|
|
2004
2005
|
Name => 'ColorData12',
|
|
2005
2006
|
SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData12' },
|
|
2006
2007
|
},
|
|
@@ -8321,8 +8322,8 @@ my %ciMaxFocal = (
|
|
|
8321
8322
|
RawConv => '$$self{ColorDataVersion} = $val',
|
|
8322
8323
|
PrintConv => {
|
|
8323
8324
|
16 => '16 (M50)',
|
|
8324
|
-
17 => '17 (
|
|
8325
|
-
18 => '18 (
|
|
8325
|
+
17 => '17 (R)', # (and PowerShot SX740HS)
|
|
8326
|
+
18 => '18 (RP/250D)', # (and PowerShot SX70HS)
|
|
8326
8327
|
19 => '19 (90D/850D/M6mkII/M200)',# (and PowerShot G7XmkIII)
|
|
8327
8328
|
},
|
|
8328
8329
|
},
|
|
@@ -8553,10 +8554,10 @@ my %ciMaxFocal = (
|
|
|
8553
8554
|
},
|
|
8554
8555
|
);
|
|
8555
8556
|
|
|
8556
|
-
# Color data (MakerNotes tag 0x4001, count=3973, ref IB)
|
|
8557
|
+
# Color data (MakerNotes tag 0x4001, count=3973/3778, ref IB)
|
|
8557
8558
|
%Image::ExifTool::Canon::ColorData11 = (
|
|
8558
8559
|
%binaryDataAttrs,
|
|
8559
|
-
NOTES => 'These tags are used by the EOS R3, R7 and R6mkII',
|
|
8560
|
+
NOTES => 'These tags are used by the EOS R3, R7, R50 and R6mkII',
|
|
8560
8561
|
FORMAT => 'int16s',
|
|
8561
8562
|
FIRST_ENTRY => 0,
|
|
8562
8563
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
@@ -8568,7 +8569,7 @@ my %ciMaxFocal = (
|
|
|
8568
8569
|
RawConv => '$$self{ColorDataVersion} = $val',
|
|
8569
8570
|
PrintConv => {
|
|
8570
8571
|
34 => '34 (R3)', #IB
|
|
8571
|
-
48 => '48 (R7
|
|
8572
|
+
48 => '48 (R7/R10/R50/R6mkII)', #IB
|
|
8572
8573
|
},
|
|
8573
8574
|
},
|
|
8574
8575
|
0x69 => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' },
|
|
@@ -8673,10 +8674,10 @@ my %ciMaxFocal = (
|
|
|
8673
8674
|
},
|
|
8674
8675
|
);
|
|
8675
8676
|
|
|
8676
|
-
# Color data (MakerNotes tag 0x4001, count=4528, ref PH)
|
|
8677
|
+
# Color data (MakerNotes tag 0x4001, count=4528/3778, ref PH)
|
|
8677
8678
|
%Image::ExifTool::Canon::ColorData12 = (
|
|
8678
8679
|
%binaryDataAttrs,
|
|
8679
|
-
NOTES => 'These tags are used by the EOS R1 and
|
|
8680
|
+
NOTES => 'These tags are used by the EOS R1, R5mkII and R50V',
|
|
8680
8681
|
FORMAT => 'int16s',
|
|
8681
8682
|
FIRST_ENTRY => 0,
|
|
8682
8683
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
@@ -8687,7 +8688,8 @@ my %ciMaxFocal = (
|
|
|
8687
8688
|
DataMember => 'ColorDataVersion',
|
|
8688
8689
|
RawConv => '$$self{ColorDataVersion} = $val',
|
|
8689
8690
|
PrintConv => {
|
|
8690
|
-
64 => '64 (R1
|
|
8691
|
+
64 => '64 (R1/R5mkII)',
|
|
8692
|
+
65 => '65 (R50V)',
|
|
8691
8693
|
},
|
|
8692
8694
|
},
|
|
8693
8695
|
0x69 => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' }, # (NC)
|
|
@@ -8778,6 +8780,7 @@ my %ciMaxFocal = (
|
|
|
8778
8780
|
Name => 'PerChannelBlackLevel',
|
|
8779
8781
|
Format => 'int16u[4]',
|
|
8780
8782
|
},
|
|
8783
|
+
# 0x290 - PerChannelBlackLevel again
|
|
8781
8784
|
0x294 => {
|
|
8782
8785
|
Name => 'NormalWhiteLevel',
|
|
8783
8786
|
Format => 'int16u',
|
|
@@ -57,7 +57,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
|
|
|
57
57
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
58
58
|
use Image::ExifTool::MakerNotes;
|
|
59
59
|
|
|
60
|
-
$VERSION = '4.
|
|
60
|
+
$VERSION = '4.61';
|
|
61
61
|
|
|
62
62
|
sub ProcessExif($$$);
|
|
63
63
|
sub WriteExif($$$);
|
|
@@ -6191,10 +6191,15 @@ sub ProcessExif($$$)
|
|
|
6191
6191
|
my $isExif = ($tagTablePtr eq \%Image::ExifTool::Exif::Main);
|
|
6192
6192
|
|
|
6193
6193
|
# warn for incorrect maker notes in CR3 files
|
|
6194
|
-
if (
|
|
6195
|
-
$$dirInfo{Parent} and $$dirInfo{Parent} eq 'ExifIFD')
|
|
6196
|
-
|
|
6197
|
-
|
|
6194
|
+
if ($dirName eq 'MakerNotes') {
|
|
6195
|
+
if ($$et{FileType} eq 'CR3' and $$dirInfo{Parent} and $$dirInfo{Parent} eq 'ExifIFD') {
|
|
6196
|
+
$et->Warn("MakerNotes shouldn't exist ExifIFD of CR3 image", 1);
|
|
6197
|
+
}
|
|
6198
|
+
if ($$dirInfo{TagInfo} and $$dirInfo{TagInfo}{MakerNotes} and
|
|
6199
|
+
$$et{ExifByteOrder} and $$et{ExifByteOrder} ne GetByteOrder())
|
|
6200
|
+
{
|
|
6201
|
+
$et->FoundTag(MakerNoteByteOrder => GetByteOrder());
|
|
6202
|
+
}
|
|
6198
6203
|
}
|
|
6199
6204
|
# set flag to calculate image data hash if requested
|
|
6200
6205
|
$doHash = 1 if $$et{ImageDataHash} and (($$et{FILE_TYPE} eq 'TIFF' and not $base and not $inMakerNotes) or
|
|
@@ -6281,7 +6286,7 @@ sub ProcessExif($$$)
|
|
|
6281
6286
|
$dirSize = 2 + 12 * $numEntries;
|
|
6282
6287
|
$dirEnd = $dirStart + $dirSize;
|
|
6283
6288
|
}
|
|
6284
|
-
$verbose > 0 and $et->VerboseDir($dirName, $numEntries);
|
|
6289
|
+
$verbose > 0 and $et->VerboseDir($dirName, $numEntries, undef, GetByteOrder());
|
|
6285
6290
|
my $bytesFromEnd = $dataLen - $dirEnd;
|
|
6286
6291
|
if ($bytesFromEnd < 4) {
|
|
6287
6292
|
unless ($bytesFromEnd==2 or $bytesFromEnd==0) {
|
|
@@ -184,7 +184,7 @@ my %ttCharset = (
|
|
|
184
184
|
Custom => { },
|
|
185
185
|
);
|
|
186
186
|
|
|
187
|
-
#
|
|
187
|
+
# the 63 known WOFF2 tags
|
|
188
188
|
my @knownTags = (
|
|
189
189
|
'cmap', 'head', 'hhea', 'hmtx', 'maxp', 'name', 'OS/2', 'post', 'cvt',
|
|
190
190
|
'fpgm', 'glyf', 'loca', 'prep', 'CFF', 'VORG', 'EBDT', 'EBLC', 'gasp',
|
|
@@ -891,9 +891,8 @@ This module is used by Image::ExifTool
|
|
|
891
891
|
|
|
892
892
|
This module contains the routines required by Image::ExifTool to read meta
|
|
893
893
|
information from various format font files. Currently recognized font file
|
|
894
|
-
types are OTF, TTF, TTC, DFONT, PFA, PFB, PFM, AFM, ACFM
|
|
895
|
-
|
|
896
|
-
extracted from these formats.
|
|
894
|
+
types are OTF, TTF, TTC, DFONT, PFA, PFB, PFM, AFM, ACFM, AMFM, WOFF and
|
|
895
|
+
WOFF2.
|
|
897
896
|
|
|
898
897
|
=head1 AUTHOR
|
|
899
898
|
|
|
@@ -26,7 +26,7 @@ use strict;
|
|
|
26
26
|
use vars qw($VERSION);
|
|
27
27
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
28
28
|
|
|
29
|
-
$VERSION = '1.
|
|
29
|
+
$VERSION = '1.42';
|
|
30
30
|
|
|
31
31
|
sub ProcessICC($$);
|
|
32
32
|
sub ProcessICC_Profile($$$);
|
|
@@ -330,6 +330,7 @@ my %manuSig = ( #6
|
|
|
330
330
|
'WTG2' => 'Ware To Go',
|
|
331
331
|
'WYSE' => 'WYSE Technology',
|
|
332
332
|
'XERX' => 'Xerox Corporation',
|
|
333
|
+
'XM ' => 'Xiaomi',
|
|
333
334
|
'XRIT' => 'X-Rite',
|
|
334
335
|
'yxym' => 'YxyMaster GmbH',
|
|
335
336
|
'Z123' => "Lavanya's test Company",
|
|
@@ -18,7 +18,7 @@ use vars qw($VERSION);
|
|
|
18
18
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
19
19
|
use Image::ExifTool::Microsoft;
|
|
20
20
|
|
|
21
|
-
$VERSION = '1.
|
|
21
|
+
$VERSION = '1.13';
|
|
22
22
|
|
|
23
23
|
sub ProcessItemID($$$);
|
|
24
24
|
sub ProcessLinkInfo($$$);
|
|
@@ -191,7 +191,7 @@ sub ProcessLinkInfo($$$);
|
|
|
191
191
|
},
|
|
192
192
|
0xa0000001 => {
|
|
193
193
|
Name => 'EnvVarData',
|
|
194
|
-
SubDirectory => { TagTable => 'Image::ExifTool::LNK::
|
|
194
|
+
SubDirectory => { TagTable => 'Image::ExifTool::LNK::EnvVarData' },
|
|
195
195
|
},
|
|
196
196
|
0xa0000002 => {
|
|
197
197
|
Name => 'ConsoleData',
|
|
@@ -448,6 +448,19 @@ sub ProcessLinkInfo($$$);
|
|
|
448
448
|
},
|
|
449
449
|
);
|
|
450
450
|
|
|
451
|
+
%Image::ExifTool::LNK::EnvVarData = (
|
|
452
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
453
|
+
GROUPS => { 2 => 'Other' },
|
|
454
|
+
8 => {
|
|
455
|
+
Name => 'EnvironmentTarget',
|
|
456
|
+
Format => 'string[260]',
|
|
457
|
+
},
|
|
458
|
+
268 => {
|
|
459
|
+
Name => 'EnvironmentTargetUnicode',
|
|
460
|
+
Format => 'unicode[260]',
|
|
461
|
+
},
|
|
462
|
+
);
|
|
463
|
+
|
|
451
464
|
%Image::ExifTool::LNK::INI = (
|
|
452
465
|
GROUPS => { 2 => 'Document' },
|
|
453
466
|
VARS => { ID_FMT => 'none' },
|
|
@@ -42,7 +42,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
42
42
|
use Image::ExifTool::Exif;
|
|
43
43
|
use Image::ExifTool::APP12;
|
|
44
44
|
|
|
45
|
-
$VERSION = '2.
|
|
45
|
+
$VERSION = '2.93';
|
|
46
46
|
|
|
47
47
|
sub PrintLensInfo($$$);
|
|
48
48
|
|
|
@@ -201,8 +201,9 @@ my %olympusLensTypes = (
|
|
|
201
201
|
# '65535 07 40' - Seen for LUMIX S 16-35/F4 on Panasonic DC-S1H (ref PH)
|
|
202
202
|
# Other makes
|
|
203
203
|
'24 01 10' => 'Venus Optics Laowa 50mm F2.8 2x Macro', #DonKomarechka
|
|
204
|
-
'
|
|
205
|
-
'
|
|
204
|
+
'247 03 10' => 'LAOWA C&D-Dreamer MFT 7.5mm F2.0', #forum3833
|
|
205
|
+
'247 10 10' => 'LAOWA C&D-Dreamer MFT 6.0mm F2.0', #KG
|
|
206
|
+
'65522 02 10' => 'Xiaoyi 42.5mm F1.8', #github363
|
|
206
207
|
);
|
|
207
208
|
|
|
208
209
|
# lookup for Olympus camera types (ref PH)
|
|
@@ -49,7 +49,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
49
49
|
use Image::ExifTool::Exif;
|
|
50
50
|
use Image::ExifTool::GPS;
|
|
51
51
|
|
|
52
|
-
$VERSION = '3.
|
|
52
|
+
$VERSION = '3.23';
|
|
53
53
|
|
|
54
54
|
sub ProcessMOV($$;$);
|
|
55
55
|
sub ProcessKeys($$$);
|
|
@@ -578,11 +578,29 @@ my %userDefined = (
|
|
|
578
578
|
return substr($val, 8, $len-8);
|
|
579
579
|
},
|
|
580
580
|
Binary => 1,
|
|
581
|
+
},{
|
|
582
|
+
Name => 'HighlightMarkers',
|
|
583
|
+
# (DJI Action 4, forum17700)
|
|
584
|
+
Notes => 'written by some DJI models',
|
|
585
|
+
Condition => '$$valPt =~ /^data.{4}hglg.{5}/s',
|
|
586
|
+
RawConv => q{
|
|
587
|
+
my $len = unpack 'x4N', $val;
|
|
588
|
+
return undef if $len < 13 or $len + 4 > length($val);
|
|
589
|
+
my $n = int(($len - 13) / 5);
|
|
590
|
+
my @a = map $_/1000, unpack "x17(xV)$n", $val;
|
|
591
|
+
return \@a;
|
|
592
|
+
},
|
|
581
593
|
},{
|
|
582
594
|
Unknown => 1,
|
|
583
595
|
Binary => 1,
|
|
584
596
|
},
|
|
585
|
-
#
|
|
597
|
+
# DJI videos also have block of offset/size of various atoms, eg)
|
|
598
|
+
# Atom name ???? Offset Size
|
|
599
|
+
# 0000: 63 6f 76 72 00 00 00 00 00 ed 6f da 00 0a 46 e0 [covr......o...F.]
|
|
600
|
+
# 0010: 73 6e 61 6c 00 00 00 00 00 f7 b6 d2 00 0a 46 e0 [snal..........F.]
|
|
601
|
+
# 0020: 68 67 6c 67 00 00 00 00 01 02 0a a2 00 00 00 21 [hglg...........!]
|
|
602
|
+
# 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
|
|
603
|
+
# (also Samsung WB750 uncompressed thumbnail data starting with "SDIC\0")
|
|
586
604
|
],
|
|
587
605
|
# fre1 - 4 bytes: "june" (Kodak PixPro SP360)
|
|
588
606
|
frea => {
|
|
@@ -14,7 +14,7 @@ use strict;
|
|
|
14
14
|
use vars qw($VERSION);
|
|
15
15
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
16
16
|
|
|
17
|
-
$VERSION = '1.
|
|
17
|
+
$VERSION = '1.02';
|
|
18
18
|
|
|
19
19
|
sub ProcessR3D($$);
|
|
20
20
|
|
|
@@ -45,7 +45,8 @@ my $errTrunc = 'Truncated R3D file';
|
|
|
45
45
|
RED2 => { Name => 'Red2Header', SubDirectory => { TagTable => 'Image::ExifTool::Red::RED2' } },
|
|
46
46
|
|
|
47
47
|
# (upper 4 bits of tag ID are the format code)
|
|
48
|
-
# ---- format
|
|
48
|
+
# ---- format 0 (int8u) ----
|
|
49
|
+
# ---- format 1 (string) ----
|
|
49
50
|
0x1000 => 'StartEdgeCode', #1
|
|
50
51
|
0x1001 => { Name => 'StartTimecode', Groups => { 2 => 'Time' } }, #1
|
|
51
52
|
0x1002 => { #1
|
|
@@ -104,6 +105,7 @@ my $errTrunc = 'Truncated R3D file';
|
|
|
104
105
|
# 0x1041 - seen 'NA'
|
|
105
106
|
0x1042 => 'Revision', # ? (seen "TODO, rev EPIC-1.0" and "MYSTERIUM X, rev EPIC-1.0")
|
|
106
107
|
# 0x1051 - seen 'C', 'L'
|
|
108
|
+
# 0x1052 - seen 'E9'
|
|
107
109
|
0x1056 => 'OriginalFileName',
|
|
108
110
|
0x106e => 'LensMake',
|
|
109
111
|
0x106f => 'LensNumber', # (last 2 hex digits are LensType)
|
|
@@ -120,7 +122,8 @@ my $errTrunc = 'Truncated R3D file';
|
|
|
120
122
|
0x1096 => 'Filter', # optical low-pass filter
|
|
121
123
|
0x10a0 => 'Brain',
|
|
122
124
|
0x10a1 => 'Sensor',
|
|
123
|
-
|
|
125
|
+
0x10be => 'Quality',
|
|
126
|
+
# ---- format 2 (float) ----
|
|
124
127
|
0x200d => 'ColorTemperature',
|
|
125
128
|
# 0x200e - (sometimes this is frame rate)
|
|
126
129
|
# 0x2015 - seen '1 1 1' (RGBGain or RGBGamma?)
|
|
@@ -130,7 +133,8 @@ my $errTrunc = 'Truncated R3D file';
|
|
|
130
133
|
Groups => { 2 => 'Video' },
|
|
131
134
|
PrintConv => 'int($val * 1000 + 0.5) / 1000',
|
|
132
135
|
},
|
|
133
|
-
# ---- format
|
|
136
|
+
# ---- format 3 (int8u?) ----
|
|
137
|
+
# ---- format 4 (int16u) ----
|
|
134
138
|
0x4037 => { Name => 'CropArea' }, # (NC)
|
|
135
139
|
0x403b => 'ISO',
|
|
136
140
|
# 0x404e - related to CropArea (or "0 0 0 0")
|
|
@@ -138,8 +142,12 @@ my $errTrunc = 'Truncated R3D file';
|
|
|
138
142
|
0x406b => 'FocalLength',
|
|
139
143
|
# 0x4084 - related to ISO?
|
|
140
144
|
# 0x4087 - related to ISO?
|
|
141
|
-
# ---- format
|
|
145
|
+
# ---- format 5 (int8s?) ----
|
|
146
|
+
# ---- format 6 (int32s) ----
|
|
142
147
|
0x606c => { Name => 'FocusDistance', ValueConv => '$val/1000', PrintConv => '"$val m"' },
|
|
148
|
+
# ---- format 7 (undef? structure?) ----
|
|
149
|
+
# ---- format 8 (int32u?) ----
|
|
150
|
+
# ---- format 9 (undef?) ----
|
|
143
151
|
);
|
|
144
152
|
|
|
145
153
|
# RED1 file header (ref PH)
|
|
@@ -240,9 +248,11 @@ sub ProcessR3D($$)
|
|
|
240
248
|
$pos = 0x22; # directory starts at offset 0x22
|
|
241
249
|
} else {
|
|
242
250
|
# calculate position of Red directory start
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
$pos
|
|
251
|
+
$pos = 0x44;
|
|
252
|
+
length($buff) < $pos and return $et->Warn($errTrunc);
|
|
253
|
+
$pos += Get8u(\$buff, 0x40) * 0x18; # skip "rdi" records
|
|
254
|
+
$pos += Get8u(\$buff, 0x41) * 0x14; # skip "rda" records
|
|
255
|
+
$pos += Get8u(\$buff, 0x42) * 0x10; # skip "rdx" records
|
|
246
256
|
}
|
|
247
257
|
if ($pos + 8 > length $buff) {
|
|
248
258
|
$dirLen = 0; # find directory the hard way
|
|
@@ -253,7 +263,7 @@ sub ProcessR3D($$)
|
|
|
253
263
|
# do sanity check on the directory size (in case our assumptions were wrong)
|
|
254
264
|
if ($dirLen < 300 or $dirLen >= 2048 or $pos + $dirLen > length $buff) {
|
|
255
265
|
# tag 0x1000 with length 0x000f should be near the directory start
|
|
256
|
-
$buff =~ /\0\x0f\x10\0/g or return $et->Warn("Can't find Red directory");
|
|
266
|
+
$buff =~ /\0\x0f\x10[\0\x06]/g or return $et->Warn("Can't find Red directory. Please submit sample for testing");
|
|
257
267
|
$pos = pos($buff) - 4;
|
|
258
268
|
$dirEnd = length $buff;
|
|
259
269
|
undef $dirLen;
|
|
@@ -9475,6 +9475,8 @@ my %tagExists = (
|
|
|
9475
9475
|
'entrypoint' => 1,
|
|
9476
9476
|
'entrytype' => 1,
|
|
9477
9477
|
'environmentmap' => 1,
|
|
9478
|
+
'environmenttarget' => 1,
|
|
9479
|
+
'environmenttargetunicode' => 1,
|
|
9478
9480
|
'envvardata' => 1,
|
|
9479
9481
|
'eppim' => 1,
|
|
9480
9482
|
'eprint' => 1,
|
|
@@ -10143,6 +10145,7 @@ my %tagExists = (
|
|
|
10143
10145
|
'highisomode' => 1,
|
|
10144
10146
|
'highlightdata' => 1,
|
|
10145
10147
|
'highlightendpoints' => 1,
|
|
10148
|
+
'highlightmarkers' => 1,
|
|
10146
10149
|
'highnote' => 1,
|
|
10147
10150
|
'highvelocity' => 1,
|
|
10148
10151
|
'hindsightsettings' => 1,
|
|
@@ -10827,6 +10830,7 @@ my %tagExists = (
|
|
|
10827
10830
|
'maininfoifd' => 1,
|
|
10828
10831
|
'makeandmodel' => 1,
|
|
10829
10832
|
'makemodel' => 1,
|
|
10833
|
+
'makernotebyteorder' => 1,
|
|
10830
10834
|
'makernotepentax5a' => 1,
|
|
10831
10835
|
'makernotepentax5b' => 1,
|
|
10832
10836
|
'makernotepentax5c' => 1,
|
|
@@ -12,7 +12,7 @@ meta information extracted from or written to a file.
|
|
|
12
12
|
=head1 TAG TABLES
|
|
13
13
|
|
|
14
14
|
The tables listed below give the names of all tags recognized by ExifTool.
|
|
15
|
-
They contain a total of
|
|
15
|
+
They contain a total of 28858 tags, with 17929 unique tag names.
|
|
16
16
|
|
|
17
17
|
B<Tag ID>, B<Index#> or B<Sequence> is given in the first column of each
|
|
18
18
|
table. A B<Tag ID> is the computer-readable equivalent of a tag name, and
|
|
@@ -9541,7 +9541,7 @@ These tags are used by the R5, R5 and EOS 1DXmkIII.
|
|
|
9541
9541
|
|
|
9542
9542
|
=head3 Canon ColorData11 Tags
|
|
9543
9543
|
|
|
9544
|
-
These tags are used by the EOS R3, R7 and R6mkII
|
|
9544
|
+
These tags are used by the EOS R3, R7, R50 and R6mkII
|
|
9545
9545
|
|
|
9546
9546
|
Index2 Tag Name Writable
|
|
9547
9547
|
------ -------- --------
|
|
@@ -9630,7 +9630,7 @@ These tags are used by the EOS R3, R7 and R6mkII
|
|
|
9630
9630
|
|
|
9631
9631
|
=head3 Canon ColorData12 Tags
|
|
9632
9632
|
|
|
9633
|
-
These tags are used by the EOS R1 and
|
|
9633
|
+
These tags are used by the EOS R1, R5mkII and R50V
|
|
9634
9634
|
|
|
9635
9635
|
Index2 Tag Name Writable
|
|
9636
9636
|
------ -------- --------
|
|
@@ -30720,6 +30720,7 @@ for the official QuickTime specification.
|
|
|
30720
30720
|
'free' KodakFree Kodak Free
|
|
30721
30721
|
Pittasoft QuickTime Pittasoft
|
|
30722
30722
|
ThumbnailImage no
|
|
30723
|
+
HighlightMarkers no
|
|
30723
30724
|
Free? no
|
|
30724
30725
|
'ftyp' FileType QuickTime FileType
|
|
30725
30726
|
'gdat' GPSData QuickTime Stream
|
|
@@ -36442,6 +36443,7 @@ Tags extracted from Redcode R3D video files.
|
|
|
36442
36443
|
0x1096 Filter no
|
|
36443
36444
|
0x10a0 Brain no
|
|
36444
36445
|
0x10a1 Sensor no
|
|
36446
|
+
0x10be Quality no
|
|
36445
36447
|
0x200d ColorTemperature no
|
|
36446
36448
|
0x204b RGBCurves no
|
|
36447
36449
|
0x2066 OriginalFrameRate no
|
|
@@ -40696,7 +40698,7 @@ Information extracted from MS Shell Link (Windows shortcut) files.
|
|
|
40696
40698
|
0x30020 CommandLineArguments no
|
|
40697
40699
|
0x30040 IconFileName no
|
|
40698
40700
|
0xa0000000 UnknownData LNK UnknownData
|
|
40699
|
-
0xa0000001 EnvVarData LNK
|
|
40701
|
+
0xa0000001 EnvVarData LNK EnvVarData
|
|
40700
40702
|
0xa0000002 ConsoleData LNK ConsoleData
|
|
40701
40703
|
0xa0000003 TrackerData LNK TrackerData
|
|
40702
40704
|
0xa0000004 ConsoleFEData LNK ConsoleFEData
|
|
@@ -40741,6 +40743,13 @@ Information extracted from MS Shell Link (Windows shortcut) files.
|
|
|
40741
40743
|
------ -------- --------
|
|
40742
40744
|
[no tags known]
|
|
40743
40745
|
|
|
40746
|
+
=head3 LNK EnvVarData Tags
|
|
40747
|
+
|
|
40748
|
+
Index1 Tag Name Writable
|
|
40749
|
+
------ -------- --------
|
|
40750
|
+
8 EnvironmentTarget no
|
|
40751
|
+
268 EnvironmentTargetUnicode no
|
|
40752
|
+
|
|
40744
40753
|
=head3 LNK ConsoleData Tags
|
|
40745
40754
|
|
|
40746
40755
|
Index1 Tag Name Writable
|
|
@@ -41690,6 +41699,7 @@ FileName.
|
|
|
41690
41699
|
JPEGQualityEstimate File no
|
|
41691
41700
|
JUMBF JUMBF no
|
|
41692
41701
|
MIMEType File no
|
|
41702
|
+
MakerNoteByteOrder File no
|
|
41693
41703
|
MaxVal File no
|
|
41694
41704
|
NewGUID ExifTool no
|
|
41695
41705
|
Now ExifTool no
|
data/bin/lib/Image/ExifTool.pm
CHANGED
|
@@ -29,7 +29,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
|
|
|
29
29
|
%jpegMarker %specialTags %fileTypeLookup $testLen $exeDir
|
|
30
30
|
%static_vars $advFmtSelf $configFile @configFiles $noConfig);
|
|
31
31
|
|
|
32
|
-
$VERSION = '13.
|
|
32
|
+
$VERSION = '13.41';
|
|
33
33
|
$RELEASE = '';
|
|
34
34
|
@ISA = qw(Exporter);
|
|
35
35
|
%EXPORT_TAGS = (
|
|
@@ -392,6 +392,7 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
|
|
|
392
392
|
LFR => 'LFP', # (Light Field RAW)
|
|
393
393
|
LIF => ['LIF', 'Leica Image File'],
|
|
394
394
|
LNK => ['LNK', 'Windows shortcut'],
|
|
395
|
+
LRF => ['MOV', 'Low-Resolution video File'],
|
|
395
396
|
LRI => ['LRI', 'Light RAW'],
|
|
396
397
|
LRV => ['MOV', 'Low-Resolution Video'],
|
|
397
398
|
M2T => 'M2TS',
|
|
@@ -1818,6 +1819,13 @@ my %systemTagsNotes = (
|
|
|
1818
1819
|
MM => 'Big-endian (Motorola, MM)',
|
|
1819
1820
|
},
|
|
1820
1821
|
},
|
|
1822
|
+
MakerNoteByteOrder => {
|
|
1823
|
+
Notes => 'byte order of maker notes. Generated only if different from ExifByteOrder',
|
|
1824
|
+
PrintConv => {
|
|
1825
|
+
II => 'Little-endian (Intel, II)',
|
|
1826
|
+
MM => 'Big-endian (Motorola, MM)',
|
|
1827
|
+
},
|
|
1828
|
+
},
|
|
1821
1829
|
ExifUnicodeByteOrder => {
|
|
1822
1830
|
Writable => 1,
|
|
1823
1831
|
WriteOnly => 1,
|
|
@@ -8626,6 +8634,7 @@ sub DoProcessTIFF($$;$)
|
|
|
8626
8634
|
my $ifdName = ($$dirInfo{DirName} and $$dirInfo{DirName} =~ /^(ExifIFD|GPS)$/) ? $1 : 'IFD0';
|
|
8627
8635
|
if (not $tagTablePtr or $$tagTablePtr{GROUPS}{0} eq 'EXIF') {
|
|
8628
8636
|
$self->FoundTag('ExifByteOrder', $byteOrder) unless $outfile;
|
|
8637
|
+
$$self{ExifByteOrder} = $byteOrder;
|
|
8629
8638
|
} elsif ($$tagTablePtr{GROUPS}{0} eq 'MakerNotes') { # (for writing CR3 maker notes)
|
|
8630
8639
|
$ifdName = $$tagTablePtr{GROUPS}{0};
|
|
8631
8640
|
} else {
|
|
@@ -9685,10 +9694,10 @@ sub VPrint($$@)
|
|
|
9685
9694
|
# Print verbose directory information
|
|
9686
9695
|
# Inputs: 0) ExifTool object reference, 1) directory name or dirInfo ref
|
|
9687
9696
|
# 2) number of entries in directory (or 0 if unknown)
|
|
9688
|
-
# 3) optional size of directory in bytes
|
|
9689
|
-
sub VerboseDir(
|
|
9697
|
+
# 3) optional size of directory in bytes, 4) optional byte order for -v3 output
|
|
9698
|
+
sub VerboseDir($$;$$$)
|
|
9690
9699
|
{
|
|
9691
|
-
my ($self, $name, $entries, $size) = @_;
|
|
9700
|
+
my ($self, $name, $entries, $size, $byteOrder) = @_;
|
|
9692
9701
|
return unless $$self{OPTIONS}{Verbose};
|
|
9693
9702
|
if (ref $name eq 'HASH') {
|
|
9694
9703
|
$size = $$name{DirLen} unless $size;
|
|
@@ -9698,6 +9707,9 @@ sub VerboseDir($$;$$)
|
|
|
9698
9707
|
my $out = $$self{OPTIONS}{TextOut};
|
|
9699
9708
|
my $str = ($entries or defined $entries and not $size) ? " with $entries entries" : '';
|
|
9700
9709
|
$str .= ", $size bytes" if $size;
|
|
9710
|
+
if ($byteOrder and $$self{OPTIONS}{Verbose} > 2) {
|
|
9711
|
+
$str .= ', ' . (GetByteOrder() eq 'II' ? 'Little-endian' : 'Big-endian');
|
|
9712
|
+
}
|
|
9701
9713
|
print $out "$indent+ [$name directory$str]\n";
|
|
9702
9714
|
}
|
|
9703
9715
|
|
|
@@ -9820,7 +9832,7 @@ sub ProcessBinaryData($$$)
|
|
|
9820
9832
|
# extract known tags in numerical order
|
|
9821
9833
|
@tags = sort { ($a < 0 ? $a + 1e9 : $a) <=> ($b < 0 ? $b + 1e9 : $b) } TagTableKeys($tagTablePtr);
|
|
9822
9834
|
}
|
|
9823
|
-
$self->VerboseDir('BinaryData', undef, $size) if $verbose;
|
|
9835
|
+
$self->VerboseDir('BinaryData', undef, $size, GetByteOrder()) if $verbose;
|
|
9824
9836
|
# avoid creating unknown tags for tags that fail condition if Unknown is 1
|
|
9825
9837
|
$$self{NO_UNKNOWN} = 1 if $unknown < 2;
|
|
9826
9838
|
my ($index, %val);
|