exiftool_vendored 13.41.0 → 13.42.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 +15 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +89 -92
- data/bin/lib/Image/ExifTool/Canon.pm +5 -2
- data/bin/lib/Image/ExifTool/JSON.pm +7 -6
- data/bin/lib/Image/ExifTool/QuickTime.pm +2 -0
- data/bin/lib/Image/ExifTool/Samsung.pm +127 -4
- data/bin/lib/Image/ExifTool/Sony.pm +4 -2
- data/bin/lib/Image/ExifTool/TagLookup.pm +66 -0
- data/bin/lib/Image/ExifTool/TagNames.pod +114 -2
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +8 -1
- data/bin/lib/Image/ExifTool.pm +3 -3
- 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: 769a367333375cb7b0796e2b334c49c8eaed8da6ca289b2de271f9a1a5499b6f
|
|
4
|
+
data.tar.gz: 7e7044a2d8044fe48f633c11b2812ed752e5091c5d19db7153fc415cec06bb95
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 18a51166538f3a2de6aaf41f8d896b30ff5baba653051eb77f16f91b35502c52e7d7c251081a3ee95c8f7efad8c5dcc1731afc284dfc67b1a6f79b879d1b049b
|
|
7
|
+
data.tar.gz: cb7a7f441bd277e0b96ee7caecc3d65dc424eb035fdc6fc6d1a7c9c128d23040ee5d512fc66d0245d3857a9b5c14d38a21e95aa9a55dbd72c426e8711d67b8ab
|
data/bin/Changes
CHANGED
|
@@ -7,6 +7,21 @@ 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. 17, 2025 - Version 13.42
|
|
11
|
+
|
|
12
|
+
- Added warning if tag arguments come before -csv= or -json= in a command
|
|
13
|
+
- Added a new CanonModelID and RFLensType (thanks Norbert Wasser)
|
|
14
|
+
- Added ability to read XML as a block from Sony MP4 videos
|
|
15
|
+
- Added "EOS" to the R5 Mark II CanonModelID string
|
|
16
|
+
- Decode ReEditData in Samsung trailer
|
|
17
|
+
- Decode a couple more Sony rtmd tags from MP4 videos
|
|
18
|
+
- Tolerate some types of trailer corruption as caused by Samsung Gallery
|
|
19
|
+
- Restrict decoding of MetaImageSize to HEIC files only
|
|
20
|
+
- Fixed issue writing Keys tags to Sony PMW-EX1R videos
|
|
21
|
+
- Fixed behaviour of CSV/JSON import when specifying tags to import into an
|
|
22
|
+
existing list, or when importing ValueConv values (ie. "TAG#"), or when
|
|
23
|
+
specifying a group name of "All"
|
|
24
|
+
|
|
10
25
|
Nov. 5, 2025 - Version 13.41
|
|
11
26
|
|
|
12
27
|
- Added a new Canon LensType
|
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.42.tar.gz | tar -xf -
|
|
115
|
+
cd Image-ExifTool-13.42
|
|
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.42';
|
|
15
15
|
|
|
16
16
|
$^W = 1; # enable global warnings
|
|
17
17
|
|
|
@@ -152,9 +152,9 @@ my $countNewDir; # count of directories created
|
|
|
152
152
|
my $countSameWr; # count files written OK but not changed
|
|
153
153
|
my $critical; # flag for critical operations (disable CTRL-C)
|
|
154
154
|
my $csv; # flag for CSV option (set to "CSV", or maybe "JSON" when writing)
|
|
155
|
-
my $csvAdd; # flag to add CSV information to existing lists
|
|
156
155
|
my $csvDelim; # delimiter for CSV files
|
|
157
|
-
my $
|
|
156
|
+
my $dbAdd; # flag to add CSV/JSON information to existing lists
|
|
157
|
+
my $dbSaveCount; # save counter for last CSV/JSON file loaded
|
|
158
158
|
my $deleteOrig; # 0=restore original files, 1=delete originals, 2=delete w/o asking
|
|
159
159
|
my $diff; # file name for comparing differences
|
|
160
160
|
my $disableOutput; # flag to disable normal output
|
|
@@ -485,7 +485,7 @@ undef $binSep;
|
|
|
485
485
|
undef $binTerm;
|
|
486
486
|
undef $comma;
|
|
487
487
|
undef $csv;
|
|
488
|
-
undef $
|
|
488
|
+
undef $dbAdd;
|
|
489
489
|
undef $deleteOrig;
|
|
490
490
|
undef $diff;
|
|
491
491
|
undef $disableOutput;
|
|
@@ -550,7 +550,7 @@ $countGoodWr = 0;
|
|
|
550
550
|
$countNewDir = 0;
|
|
551
551
|
$countSameWr = 0;
|
|
552
552
|
$csvDelim = ',';
|
|
553
|
-
$
|
|
553
|
+
$dbSaveCount = 0;
|
|
554
554
|
$fileTrailer = '';
|
|
555
555
|
$filterFlag = 0;
|
|
556
556
|
$html = 0;
|
|
@@ -580,7 +580,7 @@ my $escapeXML; # flag to escape printed values for xml
|
|
|
580
580
|
my $setTagsFile; # filename for last TagsFromFile option
|
|
581
581
|
my $sortOpt; # sort option is used
|
|
582
582
|
my $srcStdin; # one of the source files is STDIN
|
|
583
|
-
my $tagsFrom = ''; # tags on command line come from '
|
|
583
|
+
my $tagsFrom = ''; # tags on command line come from 'CSV' or 'File'
|
|
584
584
|
my $useMWG; # flag set if we are using any MWG tag
|
|
585
585
|
|
|
586
586
|
my ($argsLeft, @nextPass, $badCmd);
|
|
@@ -815,7 +815,7 @@ for (;;) {
|
|
|
815
815
|
}
|
|
816
816
|
# create necessary lists, etc for this new -tagsFromFile file
|
|
817
817
|
AddSetTagsFile($setTagsFile, { Replace => ($1 and lc($1) eq 'add') ? 0 : 1 } );
|
|
818
|
-
$tagsFrom = '
|
|
818
|
+
$tagsFrom = 'File';
|
|
819
819
|
next;
|
|
820
820
|
}
|
|
821
821
|
if ($a eq '@') {
|
|
@@ -923,36 +923,50 @@ for (;;) {
|
|
|
923
923
|
next;
|
|
924
924
|
}
|
|
925
925
|
/^config$/i and Warn("Ignored -config option (not first on command line)\n"), shift, next;
|
|
926
|
-
if (/^csv(\+?=.*)?$/i) {
|
|
927
|
-
my $
|
|
926
|
+
if (/^(csv|j(son)?)(\+?=.*)?$/i) {
|
|
927
|
+
my $dbFile = $3;
|
|
928
|
+
my $dbType = lc($1) eq 'csv' ? 'CSV' : 'JSON';
|
|
929
|
+
unless ($dbFile) {
|
|
930
|
+
if ($dbType eq 'CSV') {
|
|
931
|
+
$csv = $dbType;
|
|
932
|
+
} else {
|
|
933
|
+
$json = 1;
|
|
934
|
+
$html = $xml = 0;
|
|
935
|
+
$mt->Options(Duplicates => 1);
|
|
936
|
+
require Image::ExifTool::XMP; # for FixUTF8()
|
|
937
|
+
}
|
|
938
|
+
next;
|
|
939
|
+
}
|
|
928
940
|
# must process on 2nd pass so -f and -charset options are available
|
|
929
941
|
unless ($pass) {
|
|
942
|
+
@tags and Warn("Tag arguments should come after the -$1= option\n");
|
|
930
943
|
push @nextPass, "-$_";
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
$tagsFrom = 'csv';
|
|
935
|
-
}
|
|
944
|
+
push @newValues, { SaveCount => ++$saveCount }; # marker to save new values now
|
|
945
|
+
$dbSaveCount = $saveCount;
|
|
946
|
+
$tagsFrom = 'CSV';
|
|
936
947
|
next;
|
|
937
948
|
}
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
949
|
+
$dbFile =~ s/^(\+?=)//;
|
|
950
|
+
$dbAdd = 2 if $1 eq '+=';
|
|
951
|
+
$vout = \*STDERR if $srcStdin;
|
|
952
|
+
$verbose and print $vout "Reading $dbType file $dbFile\n";
|
|
953
|
+
my $msg;
|
|
954
|
+
if ($mt->Open(\*CSVFILE, $dbFile)) {
|
|
955
|
+
binmode CSVFILE;
|
|
956
|
+
require Image::ExifTool::Import;
|
|
957
|
+
if ($dbType eq 'CSV') {
|
|
947
958
|
$msg = Image::ExifTool::Import::ReadCSV(\*CSVFILE, \%database, $forcePrint, $csvDelim);
|
|
948
|
-
close(CSVFILE);
|
|
949
959
|
} else {
|
|
950
|
-
$
|
|
960
|
+
my $chset = $mt->Options('Charset');
|
|
961
|
+
$msg = Image::ExifTool::Import::ReadJSON(\*CSVFILE, \%database, $forcePrint, $chset);
|
|
951
962
|
}
|
|
952
|
-
|
|
953
|
-
|
|
963
|
+
close(CSVFILE);
|
|
964
|
+
} else {
|
|
965
|
+
$msg = "Error opening $dbType file '${dbFile}'";
|
|
954
966
|
}
|
|
955
|
-
$
|
|
967
|
+
$msg and Warn("$msg\n");
|
|
968
|
+
$isWriting = 1;
|
|
969
|
+
$csv = $dbType;
|
|
956
970
|
next;
|
|
957
971
|
}
|
|
958
972
|
if (/^csvdelim$/i) {
|
|
@@ -1115,42 +1129,6 @@ for (;;) {
|
|
|
1115
1129
|
push @condition, $cond;
|
|
1116
1130
|
next;
|
|
1117
1131
|
}
|
|
1118
|
-
if (/^j(son)?(\+?=.*)?$/i) {
|
|
1119
|
-
if ($2) {
|
|
1120
|
-
# must process on 2nd pass because we need -f and -charset options
|
|
1121
|
-
unless ($pass) {
|
|
1122
|
-
push @nextPass, "-$_";
|
|
1123
|
-
push @newValues, { SaveCount => ++$saveCount }; # marker to save new values now
|
|
1124
|
-
$csvSaveCount = $saveCount;
|
|
1125
|
-
$tagsFrom = 'csv';
|
|
1126
|
-
next;
|
|
1127
|
-
}
|
|
1128
|
-
my $jsonFile = $2;
|
|
1129
|
-
$jsonFile =~ s/^(\+?=)//;
|
|
1130
|
-
$csvAdd = 2 if $1 eq '+=';
|
|
1131
|
-
$vout = \*STDERR if $srcStdin;
|
|
1132
|
-
$verbose and print $vout "Reading JSON file $jsonFile\n";
|
|
1133
|
-
my $chset = $mt->Options('Charset');
|
|
1134
|
-
my $msg;
|
|
1135
|
-
if ($mt->Open(\*JSONFILE, $jsonFile)) {
|
|
1136
|
-
binmode JSONFILE;
|
|
1137
|
-
require Image::ExifTool::Import;
|
|
1138
|
-
$msg = Image::ExifTool::Import::ReadJSON(\*JSONFILE, \%database, $forcePrint, $chset);
|
|
1139
|
-
close(JSONFILE);
|
|
1140
|
-
} else {
|
|
1141
|
-
$msg = "Error opening JSON file '${jsonFile}'";
|
|
1142
|
-
}
|
|
1143
|
-
$msg and Warn("$msg\n");
|
|
1144
|
-
$isWriting = 1;
|
|
1145
|
-
$csv = 'JSON';
|
|
1146
|
-
} else {
|
|
1147
|
-
$json = 1;
|
|
1148
|
-
$html = $xml = 0;
|
|
1149
|
-
$mt->Options(Duplicates => 1);
|
|
1150
|
-
require Image::ExifTool::XMP; # for FixUTF8()
|
|
1151
|
-
}
|
|
1152
|
-
next;
|
|
1153
|
-
}
|
|
1154
1132
|
/^(k|pause)$/i and $pause = 1, next;
|
|
1155
1133
|
(/^l$/ or $a eq 'long') and --$outFormat, next;
|
|
1156
1134
|
(/^L$/ or $a eq 'latin') and $mt->Options(Charset => 'Latin'), next;
|
|
@@ -1373,7 +1351,7 @@ for (;;) {
|
|
|
1373
1351
|
$tag =~ s/\ball\b/\*/ig; # replace 'all' with '*' in tag names
|
|
1374
1352
|
if (not $tagsFrom) {
|
|
1375
1353
|
push @exclude, $tag;
|
|
1376
|
-
} elsif ($tagsFrom eq '
|
|
1354
|
+
} elsif ($tagsFrom eq 'CSV') {
|
|
1377
1355
|
push @csvExclude, $tag;
|
|
1378
1356
|
} else {
|
|
1379
1357
|
push @{$setTags{$setTagsFile}}, "-$tag";
|
|
@@ -1420,11 +1398,11 @@ for (;;) {
|
|
|
1420
1398
|
} else {
|
|
1421
1399
|
# assume '-tagsFromFile @' if tags are being redirected
|
|
1422
1400
|
# and not from CSV and -tagsFromFile hasn't already been specified
|
|
1423
|
-
if (not $setTagsFile and $tagsFrom ne '
|
|
1401
|
+
if (not $setTagsFile and $tagsFrom ne 'CSV' and /(<|>)/) {
|
|
1424
1402
|
AddSetTagsFile($setTagsFile = '@');
|
|
1425
|
-
$tagsFrom = '
|
|
1403
|
+
$tagsFrom = 'File';
|
|
1426
1404
|
}
|
|
1427
|
-
if ($tagsFrom eq '
|
|
1405
|
+
if ($tagsFrom eq 'CSV') {
|
|
1428
1406
|
my $lst = s/^-// ? \@csvExclude : \@tags;
|
|
1429
1407
|
push @$lst, $_;
|
|
1430
1408
|
} elsif ($setTagsFile) {
|
|
@@ -1732,7 +1710,7 @@ if (@newValues) {
|
|
|
1732
1710
|
$saveCount = $mt->SaveNewValues();
|
|
1733
1711
|
$needSave = 0;
|
|
1734
1712
|
# insert marker to load values from CSV file now if this was the CSV file
|
|
1735
|
-
push @dynamicFiles, \$csv if $$_{SaveCount} == $
|
|
1713
|
+
push @dynamicFiles, \$csv if $$_{SaveCount} == $dbSaveCount;
|
|
1736
1714
|
}
|
|
1737
1715
|
next;
|
|
1738
1716
|
}
|
|
@@ -3262,7 +3240,7 @@ sub SetImageInfo($$$)
|
|
|
3262
3240
|
next;
|
|
3263
3241
|
} elsif (ref $dyFile eq 'SCALAR') {
|
|
3264
3242
|
# set new values from CSV or JSON database
|
|
3265
|
-
my ($f, $found, $csvTag, $tg, $
|
|
3243
|
+
my ($f, $found, $csvTag, $tg, $csvEtPrt, $csvEtVal);
|
|
3266
3244
|
undef $evalWarning;
|
|
3267
3245
|
local $SIG{'__WARN__'} = sub { $evalWarning = $_[0] };
|
|
3268
3246
|
# force UTF-8 if the database was JSON
|
|
@@ -3294,13 +3272,19 @@ sub SetImageInfo($$$)
|
|
|
3294
3272
|
}
|
|
3295
3273
|
if (@tags) {
|
|
3296
3274
|
# prepare a dummy ExifTool object to hold appropriate tags from the database
|
|
3297
|
-
$
|
|
3275
|
+
$csvEtPrt = Image::ExifTool->new unless $csvEtPrt;
|
|
3298
3276
|
foreach $csvTag (OrderedKeys($csvInfo)) {
|
|
3299
3277
|
next if $csvTag =~ /^([-_0-9A-Z]+:)*(SourceFile|Directory|FileName)$/i;
|
|
3300
3278
|
my @grps = split /:/, $csvTag;
|
|
3301
3279
|
my $name = pop @grps;
|
|
3302
|
-
unshift @grps, '
|
|
3303
|
-
|
|
3280
|
+
unshift @grps, 'All' while @grps < 2;
|
|
3281
|
+
if ($name =~ s/#$//) {
|
|
3282
|
+
# handle ValueConv tags separately
|
|
3283
|
+
$csvEtVal = Image::ExifTool->new unless $csvEtVal;
|
|
3284
|
+
$csvEtVal->FoundTag($name, $$csvInfo{$csvTag}, @grps);
|
|
3285
|
+
} else {
|
|
3286
|
+
$csvEtPrt->FoundTag($name, $$csvInfo{$csvTag}, @grps);
|
|
3287
|
+
}
|
|
3304
3288
|
}
|
|
3305
3289
|
next;
|
|
3306
3290
|
}
|
|
@@ -3337,15 +3321,20 @@ ExclMatch: foreach $exclTag (@exclTags) {
|
|
|
3337
3321
|
next if $excluded;
|
|
3338
3322
|
}
|
|
3339
3323
|
my ($rtn, $wrn) = $et->SetNewValue($csvTag, $$csvInfo{$csvTag},
|
|
3340
|
-
Protected => 1, AddValue => $
|
|
3341
|
-
ProtectSaved => $
|
|
3324
|
+
Protected => 1, AddValue => $dbAdd,
|
|
3325
|
+
ProtectSaved => $dbSaveCount);
|
|
3342
3326
|
$wrn and Warn "$wrn\n" if $verbose;
|
|
3343
3327
|
}
|
|
3344
3328
|
}
|
|
3345
3329
|
# set specified tags now
|
|
3346
|
-
if ($
|
|
3330
|
+
if ($csvEtPrt) {
|
|
3347
3331
|
my @excl = map "-$_", @csvExclude; # add back leading dashes
|
|
3348
|
-
$
|
|
3332
|
+
my $opts = { AddValue => $dbAdd, Replace => 0 };
|
|
3333
|
+
$et->SetNewValuesFromFile($csvEtPrt, $opts, @tags, @excl);
|
|
3334
|
+
if ($csvEtVal) {
|
|
3335
|
+
$$opts{Type} = 'ValueConv';
|
|
3336
|
+
$et->SetNewValuesFromFile($csvEtVal, $opts, @tags, @excl);
|
|
3337
|
+
}
|
|
3349
3338
|
}
|
|
3350
3339
|
$et->Options(Charset => $old) if $csv eq 'JSON';
|
|
3351
3340
|
unless ($found) {
|
|
@@ -5788,12 +5777,15 @@ single command.
|
|
|
5788
5777
|
|
|
5789
5778
|
Specific tags may be imported from the CSV database by adding B<->I<TAG>
|
|
5790
5779
|
options to the command after B<-csv=>I<CSVFILE>, or excluded with
|
|
5791
|
-
B<-->I<TAG>, with exclusions taking priority. Group names and wildcards
|
|
5792
|
-
allowed,
|
|
5793
|
-
|
|
5794
|
-
|
|
5795
|
-
|
|
5796
|
-
|
|
5780
|
+
B<-->I<TAG>, with exclusions taking priority. Group names and wildcards in
|
|
5781
|
+
tag names are allowed, but the group name must match exactly the group in
|
|
5782
|
+
the CSV file (eg. a C<XMP-dc:Subject> column in the CSV file won't match
|
|
5783
|
+
C<-XMP:Subject> on the command line. Also, tags from the CSV may be
|
|
5784
|
+
redirected and written to different tags in the target file with support for
|
|
5785
|
+
advanced-formatting expressions using the same syntax as the
|
|
5786
|
+
B<-tagsFromFile> feature. If no tags are specified, then all tags except
|
|
5787
|
+
FileName, Directory and excluded tags are imported (in the same order as the
|
|
5788
|
+
database entries).
|
|
5797
5789
|
|
|
5798
5790
|
When exporting a CSV file, the B<-g> or B<-G> option adds group names to the
|
|
5799
5791
|
tag headings. If the B<-a> option is used to allow duplicate tag names, the
|
|
@@ -5815,7 +5807,8 @@ List-type tags are stored as simple strings in a CSV file, but the B<-sep>
|
|
|
5815
5807
|
option may be used to split them back into separate items when importing.
|
|
5816
5808
|
|
|
5817
5809
|
Special feature: B<-csv>+=I<CSVFILE> may be used to add items to existing
|
|
5818
|
-
lists. This affects only list-type tags. Also applies to the
|
|
5810
|
+
lists in the file. This affects only list-type tags. Also applies to the
|
|
5811
|
+
B<-j> option.
|
|
5819
5812
|
|
|
5820
5813
|
Note that this and the B<-plot> options are fundamentally different than all
|
|
5821
5814
|
other output format options because they require information from all input
|
|
@@ -5984,18 +5977,22 @@ input JSON file may be suffixed with a C<#> to disable print conversion.
|
|
|
5984
5977
|
|
|
5985
5978
|
Specific tags may be imported from the JSON database by adding B<->I<TAG>
|
|
5986
5979
|
options to the command after B<-j=>I<JSONFILE>, or excluded with
|
|
5987
|
-
B<-->I<TAG>, with exclusions taking priority. Group names and wildcards
|
|
5988
|
-
allowed,
|
|
5989
|
-
|
|
5990
|
-
|
|
5991
|
-
|
|
5992
|
-
the same
|
|
5980
|
+
B<-->I<TAG>, with exclusions taking priority. Group names and wildcards in
|
|
5981
|
+
tag names are allowed, but the group name must match exactly the group in
|
|
5982
|
+
the JSON file (eg. a C<XMP-dc:Subject> entry in the JSON file won't match
|
|
5983
|
+
C<-XMP:Subject> on the command line. Also, tags from JSON may be redirected
|
|
5984
|
+
and written to different tags in the target file with support for
|
|
5985
|
+
advanced-formatting expressions using the same syntax as the
|
|
5986
|
+
B<-tagsFromFile> feature. If no tags are specified, then all tags except
|
|
5987
|
+
FileName, Directory and excluded tags are imported (in the same order as the
|
|
5988
|
+
database entries).
|
|
5993
5989
|
|
|
5994
5990
|
Unlike CSV import, empty values are not ignored, and will cause an empty
|
|
5995
5991
|
value to be written if supported by the specific metadata type. Tags are
|
|
5996
5992
|
deleted by using the B<-f> option and setting the tag value to "-" (or to
|
|
5997
5993
|
the MissingTagValue setting if this API option was used). Importing with
|
|
5998
|
-
B<-j>+=I<JSONFILE> causes new values to be added to existing lists
|
|
5994
|
+
B<-j>+=I<JSONFILE> causes new values to be added to existing lists in the
|
|
5995
|
+
target file.
|
|
5999
5996
|
|
|
6000
5997
|
=item B<-l> (B<-long>)
|
|
6001
5998
|
|
|
@@ -6130,7 +6127,7 @@ with this command:
|
|
|
6130
6127
|
|
|
6131
6128
|
produces output like this:
|
|
6132
6129
|
|
|
6133
|
-
-- Generated by ExifTool 13.
|
|
6130
|
+
-- Generated by ExifTool 13.42 --
|
|
6134
6131
|
File: a.jpg - 2003:10:31 15:44:19
|
|
6135
6132
|
(f/5.6, 1/60s, ISO 100)
|
|
6136
6133
|
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.99';
|
|
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)
|
|
@@ -643,6 +643,7 @@ $VERSION = '4.98';
|
|
|
643
643
|
'61182.63' => 'Canon RF 24mm F1.4 L VCM', #42
|
|
644
644
|
'61182.64' => 'Canon RF 20mm F1.4 L VCM', #42
|
|
645
645
|
'61182.65' => 'Canon RF 85mm F1.4 L VCM', #github350
|
|
646
|
+
'61182.66' => 'Canon RF 45mm F1.2 STM', #42
|
|
646
647
|
65535 => 'n/a',
|
|
647
648
|
);
|
|
648
649
|
|
|
@@ -1009,10 +1010,11 @@ $VERSION = '4.98';
|
|
|
1009
1010
|
0x80000487 => 'EOS R8', #42
|
|
1010
1011
|
0x80000491 => 'PowerShot V10', #25
|
|
1011
1012
|
0x80000495 => 'EOS R1', #PH
|
|
1012
|
-
0x80000496 => 'R5 Mark II', #forum16406
|
|
1013
|
+
0x80000496 => 'EOS R5 Mark II', #forum16406
|
|
1013
1014
|
0x80000497 => 'PowerShot V1', #PH
|
|
1014
1015
|
0x80000498 => 'EOS R100', #25
|
|
1015
1016
|
0x80000516 => 'EOS R50 V', #42
|
|
1017
|
+
0x80000518 => 'EOS R6 Mark III', #42
|
|
1016
1018
|
0x80000520 => 'EOS D2000C', #IB
|
|
1017
1019
|
0x80000560 => 'EOS D6000C', #PH (guess)
|
|
1018
1020
|
);
|
|
@@ -7053,6 +7055,7 @@ my %ciMaxFocal = (
|
|
|
7053
7055
|
326 => 'Canon RF 24mm F1.4 L VCM', #42
|
|
7054
7056
|
327 => 'Canon RF 20mm F1.4 L VCM', #42
|
|
7055
7057
|
328 => 'Canon RF 85mm F1.4 L VCM', #42/github350
|
|
7058
|
+
330 => 'Canon RF 45mm F1.2 STM', #42
|
|
7056
7059
|
# Note: add new RF lenses to %canonLensTypes with ID 61182
|
|
7057
7060
|
},
|
|
7058
7061
|
},
|
|
@@ -14,9 +14,9 @@ use vars qw($VERSION);
|
|
|
14
14
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
15
15
|
use Image::ExifTool::Import;
|
|
16
16
|
|
|
17
|
-
$VERSION = '1.
|
|
17
|
+
$VERSION = '1.11';
|
|
18
18
|
|
|
19
|
-
sub ProcessJSON(
|
|
19
|
+
sub ProcessJSON($$;$);
|
|
20
20
|
sub ProcessTag($$$$%);
|
|
21
21
|
|
|
22
22
|
%Image::ExifTool::JSON::Main = (
|
|
@@ -71,6 +71,7 @@ sub FoundTag($$$$%)
|
|
|
71
71
|
$name = Image::ExifTool::MakeTagName($name);
|
|
72
72
|
my $desc = Image::ExifTool::MakeDescription($name);
|
|
73
73
|
$desc =~ s/^C2 PA/C2PA/; # hack to get "C2PA" correct
|
|
74
|
+
$et->VPrint(0, $$et{INDENT}, "[adding $tag]\n");
|
|
74
75
|
AddTagToTable($tagTablePtr, $tag, {
|
|
75
76
|
Name => $name,
|
|
76
77
|
Description => $desc,
|
|
@@ -112,12 +113,12 @@ sub ProcessTag($$$$%)
|
|
|
112
113
|
|
|
113
114
|
#------------------------------------------------------------------------------
|
|
114
115
|
# Extract meta information from a JSON file
|
|
115
|
-
# Inputs: 0) ExifTool object reference, 1) dirInfo reference
|
|
116
|
+
# Inputs: 0) ExifTool object reference, 1) dirInfo reference, 2) tag table ref
|
|
116
117
|
# Returns: 1 on success, 0 if this wasn't a recognized JSON file
|
|
117
|
-
sub ProcessJSON(
|
|
118
|
+
sub ProcessJSON($$;$)
|
|
118
119
|
{
|
|
119
120
|
local $_;
|
|
120
|
-
my ($et, $dirInfo) = @_;
|
|
121
|
+
my ($et, $dirInfo, $tagTablePtr) = @_;
|
|
121
122
|
my $raf = $$dirInfo{RAF};
|
|
122
123
|
my $structOpt = $et->Options('Struct');
|
|
123
124
|
my (%database, $key, $tag, $dataPt);
|
|
@@ -149,7 +150,7 @@ sub ProcessJSON($$)
|
|
|
149
150
|
|
|
150
151
|
$et->SetFileType() unless $dataPt;
|
|
151
152
|
|
|
152
|
-
|
|
153
|
+
$tagTablePtr or $tagTablePtr = GetTagTable('Image::ExifTool::JSON::Main');
|
|
153
154
|
|
|
154
155
|
# remove any old tag definitions in case they change flags
|
|
155
156
|
foreach $key (TagTableKeys($tagTablePtr)) {
|
|
@@ -2833,6 +2833,7 @@ my %userDefined = (
|
|
|
2833
2833
|
'xml ' => {
|
|
2834
2834
|
Name => 'XML',
|
|
2835
2835
|
Flags => [ 'Binary', 'Protected' ],
|
|
2836
|
+
BlockExtract => 1,
|
|
2836
2837
|
SubDirectory => {
|
|
2837
2838
|
TagTable => 'Image::ExifTool::XMP::XML',
|
|
2838
2839
|
IgnoreProp => { NonRealTimeMeta => 1 }, # ignore container for Sony 'nrtm'
|
|
@@ -2883,6 +2884,7 @@ my %userDefined = (
|
|
|
2883
2884
|
},
|
|
2884
2885
|
idat => {
|
|
2885
2886
|
Name => 'MetaImageSize', #PH (NC)
|
|
2887
|
+
Condition => '$$self{FileType} eq "HEIC"',
|
|
2886
2888
|
Format => 'int16u',
|
|
2887
2889
|
# (don't know what the first two numbers are for)
|
|
2888
2890
|
PrintConv => '$val =~ s/^(\d+) (\d+) (\d+) (\d+)/${3}x$4/; $val',
|
|
@@ -21,8 +21,9 @@ use strict;
|
|
|
21
21
|
use vars qw($VERSION %samsungLensTypes);
|
|
22
22
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
23
23
|
use Image::ExifTool::Exif;
|
|
24
|
+
use Image::ExifTool::JSON;
|
|
24
25
|
|
|
25
|
-
$VERSION = '1.
|
|
26
|
+
$VERSION = '1.59';
|
|
26
27
|
|
|
27
28
|
sub WriteSTMN($$$);
|
|
28
29
|
sub ProcessINFO($$$);
|
|
@@ -1277,7 +1278,15 @@ my %formatMinMax = (
|
|
|
1277
1278
|
# 0x0b51-name - seen 'Intelligent_PhotoEditor_Data' #forum16086
|
|
1278
1279
|
# 0x0b60-name - seen 'UltraWide_PhotoEditor_Data' #forum16086
|
|
1279
1280
|
# 0x0b90-name - seen 'Document_Scan_Info' #forum16086
|
|
1280
|
-
# 0x0ba1-name - seen 'Original_Path_Hash_Key', 'PhotoEditor_Re_Edit_Data', 'deco_doodle_bitmap', 'deco_sticker_bitmap', 'deco_text_bitmap'
|
|
1281
|
+
# 0x0ba1-name - seen 'Original_Path_Hash_Key', 'PhotoEditor_Re_Edit_Data', 'deco_doodle_bitmap', 'deco_sticker_bitmap', 'deco_text_bitmap','PhotoEditor_Re_Edit_Data'
|
|
1282
|
+
'0x0ba1' => [{
|
|
1283
|
+
Name => 'ReEditData',
|
|
1284
|
+
Condition => '$$self{SamsungTagName} eq "PhotoEditor_Re_Edit_Data"',
|
|
1285
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Samsung::ReEditData' },
|
|
1286
|
+
},{
|
|
1287
|
+
Name => 'OriginalPathHashKey',
|
|
1288
|
+
Condition => '$$self{SamsungTagName} eq "Original_Path_Hash_Key"',
|
|
1289
|
+
}],
|
|
1281
1290
|
# 0x0ba2-name - seen 'Copy_Available_Edit_Info' #forum16086
|
|
1282
1291
|
# 0x0bc0-name - seen 'Single_Relighting_Bokeh_Info' #forum16086
|
|
1283
1292
|
# 0x0bd0-name - seen 'Dual_Relighting_Bokeh_Info' #forum16086
|
|
@@ -1300,7 +1309,7 @@ my %formatMinMax = (
|
|
|
1300
1309
|
'0x0d91' => { #forum16086/16242
|
|
1301
1310
|
Name => 'PEg_Info',
|
|
1302
1311
|
Description => 'PEg Info',
|
|
1303
|
-
SubDirectory => { TagTable => 'Image::ExifTool::
|
|
1312
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Samsung::PEgInfo' },
|
|
1304
1313
|
},
|
|
1305
1314
|
# 0x0da1-name - seen 'Captured_App_Info' #forum16086
|
|
1306
1315
|
# 0xa050-name - seen 'Jpeg360_2D_Info' (Samsung Gear 360)
|
|
@@ -1380,6 +1389,113 @@ my %formatMinMax = (
|
|
|
1380
1389
|
perfMode => { },
|
|
1381
1390
|
);
|
|
1382
1391
|
|
|
1392
|
+
%Image::ExifTool::Samsung::ReEditData = (
|
|
1393
|
+
GROUPS => { 0 => 'JSON', 2 => 'Image' },
|
|
1394
|
+
PROCESS_PROC => \&Image::ExifTool::JSON::ProcessJSON,
|
|
1395
|
+
VARS => { LONG_TAGS => 2 },
|
|
1396
|
+
originalPath => { },
|
|
1397
|
+
representativeFrameLoc => { },
|
|
1398
|
+
startMotionVideo => { },
|
|
1399
|
+
endMotionVideo => { },
|
|
1400
|
+
isMotionVideoMute => { },
|
|
1401
|
+
isTrimMotionVideo => { },
|
|
1402
|
+
clipInfoValue => { SubDirectory => { TagTable => 'Image::ExifTool::Samsung::ClipInfo' } },
|
|
1403
|
+
toneValue => { SubDirectory => { TagTable => 'Image::ExifTool::Samsung::ToneInfo' } },
|
|
1404
|
+
effectValue => { SubDirectory => { TagTable => 'Image::ExifTool::Samsung::EffectInfo' } },
|
|
1405
|
+
portraitEffectValue => { SubDirectory => { TagTable => 'Image::ExifTool::Samsung::PortraitEffect' } },
|
|
1406
|
+
isBlending => { },
|
|
1407
|
+
isNotReEdit => { },
|
|
1408
|
+
sepVersion => { Name => 'SEPVersion' },
|
|
1409
|
+
ndeVersion => { Name => 'NDEVersion' },
|
|
1410
|
+
reSize => { },
|
|
1411
|
+
isScaleAI => { },
|
|
1412
|
+
rotation => { },
|
|
1413
|
+
adjustmentValue => { },
|
|
1414
|
+
isApplyShapeCorrection => { },
|
|
1415
|
+
isNewReEditOnly => { },
|
|
1416
|
+
isDecoReEditOnly => { },
|
|
1417
|
+
isAIFilterReEditOnly=> { },
|
|
1418
|
+
);
|
|
1419
|
+
|
|
1420
|
+
%Image::ExifTool::Samsung::ClipInfo = (
|
|
1421
|
+
GROUPS => { 0 => 'JSON', 2 => 'Image' },
|
|
1422
|
+
PROCESS_PROC => \&Image::ExifTool::JSON::ProcessJSON,
|
|
1423
|
+
mCenterX => { Name => 'ClipCenterX' },
|
|
1424
|
+
mCenterY => { Name => 'ClipCenterY' },
|
|
1425
|
+
mWidth => { Name => 'ClipWidth' },
|
|
1426
|
+
mHeight => { Name => 'ClipHeight' },
|
|
1427
|
+
mRotation => { Name => 'ClipRotation' },
|
|
1428
|
+
mRotate => { Name => 'ClipRotate' },
|
|
1429
|
+
mHFlip => { Name => 'ClipHFlip' },
|
|
1430
|
+
mVFlip => { Name => 'ClipVFlip' },
|
|
1431
|
+
mRotationEffect => { Name => 'ClipRotationEffect' },
|
|
1432
|
+
mRotateEffect => { Name => 'ClipRotateEffect' },
|
|
1433
|
+
mHFlipEffect => { Name => 'ClipHFlipEffect' },
|
|
1434
|
+
mVFlipEffect => { Name => 'ClipVFlipEffect' },
|
|
1435
|
+
mHozPerspective => { Name => 'ClipHozPerspective' },
|
|
1436
|
+
mVerPerspective => { Name => 'ClipVerPerspective' },
|
|
1437
|
+
);
|
|
1438
|
+
|
|
1439
|
+
%Image::ExifTool::Samsung::ToneInfo = (
|
|
1440
|
+
GROUPS => { 0 => 'JSON', 2 => 'Image' },
|
|
1441
|
+
PROCESS_PROC => \&Image::ExifTool::JSON::ProcessJSON,
|
|
1442
|
+
brightness => { },
|
|
1443
|
+
exposure => { },
|
|
1444
|
+
contrast => { },
|
|
1445
|
+
saturation => { },
|
|
1446
|
+
hue => { },
|
|
1447
|
+
wbMode => { Name => 'WBMode' },
|
|
1448
|
+
wbTemperature => { Name => 'WBTemperature' },
|
|
1449
|
+
tint => { },
|
|
1450
|
+
shadow => { },
|
|
1451
|
+
highlight => { },
|
|
1452
|
+
lightbalance => { },
|
|
1453
|
+
sharpness => { },
|
|
1454
|
+
definition => { },
|
|
1455
|
+
isBrightnessIPE => { },
|
|
1456
|
+
isExposureIPE => { },
|
|
1457
|
+
isContrastIPE => { },
|
|
1458
|
+
isSaturationIPE => { },
|
|
1459
|
+
);
|
|
1460
|
+
|
|
1461
|
+
%Image::ExifTool::Samsung::EffectInfo = (
|
|
1462
|
+
GROUPS => { 0 => 'JSON', 2 => 'Image' },
|
|
1463
|
+
PROCESS_PROC => \&Image::ExifTool::JSON::ProcessJSON,
|
|
1464
|
+
filterIndication=> { },
|
|
1465
|
+
alphaValue => { },
|
|
1466
|
+
filterType => { },
|
|
1467
|
+
);
|
|
1468
|
+
|
|
1469
|
+
%Image::ExifTool::Samsung::PortraitEffect = (
|
|
1470
|
+
GROUPS => { 0 => 'JSON', 2 => 'Image' },
|
|
1471
|
+
PROCESS_PROC => \&Image::ExifTool::JSON::ProcessJSON,
|
|
1472
|
+
VARS => { LONG_TAGS => 1 },
|
|
1473
|
+
effectId => { Name => 'PortraitEffectID' },
|
|
1474
|
+
effectLevel => { Name => 'PortraitEffectLevel' },
|
|
1475
|
+
exifRotation => { Name => 'PortraitExifRotation' },
|
|
1476
|
+
lightLevel => { Name => 'PortraitLightLevel' },
|
|
1477
|
+
touchX => { Name => 'PortraitTouchX' },
|
|
1478
|
+
touchY => { Name => 'PortraitTouchY' },
|
|
1479
|
+
refocusX => { Name => 'PortraitRefocusX' },
|
|
1480
|
+
refocusY => { Name => 'PortraitRefocusY' },
|
|
1481
|
+
effectIdOriginal => { Name => 'PortraitEffectIDOriginal' },
|
|
1482
|
+
effectLevelOriginal => { Name => 'EffectLevelOriginal' },
|
|
1483
|
+
lightLevelOriginal => { Name => 'LightLevelOriginal' },
|
|
1484
|
+
touchXOriginal => { },
|
|
1485
|
+
touchYOriginal => { },
|
|
1486
|
+
refocusXOriginal=> { },
|
|
1487
|
+
refocusYOriginal=> { },
|
|
1488
|
+
waterMarkRemoved=> { Name => 'WaterMarkRemoved' },
|
|
1489
|
+
waterMarkRemovedOriginal => { Name => 'WaterMarkRemovedOriginal' },
|
|
1490
|
+
);
|
|
1491
|
+
|
|
1492
|
+
%Image::ExifTool::Samsung::PEgInfo = (
|
|
1493
|
+
GROUPS => { 0 => 'JSON', 2 => 'Image' },
|
|
1494
|
+
PROCESS_PROC => \&Image::ExifTool::JSON::ProcessJSON,
|
|
1495
|
+
genImageVersion => { },
|
|
1496
|
+
connectorType => { },
|
|
1497
|
+
);
|
|
1498
|
+
|
|
1383
1499
|
# Samsung composite tags
|
|
1384
1500
|
%Image::ExifTool::Samsung::Composite = (
|
|
1385
1501
|
GROUPS => { 2 => 'Image' },
|
|
@@ -1625,7 +1741,14 @@ SamBlock:
|
|
|
1625
1741
|
}
|
|
1626
1742
|
next;
|
|
1627
1743
|
}
|
|
1628
|
-
|
|
1744
|
+
# validate SEFH header
|
|
1745
|
+
unless ($buff =~ /^SEFH/ and $len >= 12) {
|
|
1746
|
+
# tolerate extra junk written by Samsung Gallery
|
|
1747
|
+
last unless $buff =~ /\0\0SEFT/g;
|
|
1748
|
+
$et->Warn('Trailer likely corrupted by Samsung Gallery');
|
|
1749
|
+
$blockEnd += pos($buff);
|
|
1750
|
+
next;
|
|
1751
|
+
}
|
|
1629
1752
|
my $dirPos = $raf->Tell() - $len;
|
|
1630
1753
|
# my $ver = Get32u(\$buff, 0x04); # version (=101)
|
|
1631
1754
|
my $count = Get32u(\$buff, 0x08);
|
|
@@ -34,7 +34,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
34
34
|
use Image::ExifTool::Exif;
|
|
35
35
|
use Image::ExifTool::Minolta;
|
|
36
36
|
|
|
37
|
-
$VERSION = '3.
|
|
37
|
+
$VERSION = '3.80';
|
|
38
38
|
|
|
39
39
|
sub ProcessSRF($$$);
|
|
40
40
|
sub ProcessSR2($$$);
|
|
@@ -10656,7 +10656,7 @@ my %isoSetting2010 = (
|
|
|
10656
10656
|
0x8101 => { Name => 'Sony_rtmd_0x8101', Format => 'int8u', %hidUnk }, # seen: 0,1,2
|
|
10657
10657
|
0x8104 => { Name => 'Sony_rtmd_0x8104', Format => 'int16u', %hidUnk }, # seen: 35616
|
|
10658
10658
|
0x8105 => { Name => 'Sony_rtmd_0x8105', Format => 'int16u', %hidUnk }, # seen: 20092
|
|
10659
|
-
0x8106 => { Name => '
|
|
10659
|
+
0x8106 => { Name => 'FrameRate', Format => 'rational64u', PrintConv => 'sprintf("%.2f",$val)' },
|
|
10660
10660
|
0x8109 => { #forum12218
|
|
10661
10661
|
Name => 'ExposureTime',
|
|
10662
10662
|
Format => 'rational64u',
|
|
@@ -10674,7 +10674,9 @@ my %isoSetting2010 = (
|
|
|
10674
10674
|
Format => 'int16u',
|
|
10675
10675
|
},
|
|
10676
10676
|
0x810d => { Name => 'Sony_rtmd_0x810d', Format => 'int8u', %hidUnk }, # seen: 0,1
|
|
10677
|
+
0x8114 => { Name => 'SerialNumber', Format => 'string' }, # (and model, eg. "ILCE-7SM3 5072108")
|
|
10677
10678
|
0x8115 => { Name => 'Sony_rtmd_0x8115', Format => 'int16u', %hidUnk }, # seen: 100 - ISO
|
|
10679
|
+
# 0x8119 - seen "P" (same as 0x811e?)
|
|
10678
10680
|
# 0x8300 - container for other tags in this format
|
|
10679
10681
|
0x8500 => {
|
|
10680
10682
|
Name => 'GPSVersionID',
|
|
@@ -7840,6 +7840,7 @@ my %tagExists = (
|
|
|
7840
7840
|
'adjustedtbnimagewidth' => 1,
|
|
7841
7841
|
'adjustmentdata' => 1,
|
|
7842
7842
|
'adjustmentssettingsstatisticslightmap' => 1,
|
|
7843
|
+
'adjustmentvalue' => 1,
|
|
7843
7844
|
'adobe_cm' => 1,
|
|
7844
7845
|
'adobecmtype' => 1,
|
|
7845
7846
|
'adobecrw' => 1,
|
|
@@ -7948,6 +7949,7 @@ my %tagExists = (
|
|
|
7948
7949
|
'alphaoffset' => 1,
|
|
7949
7950
|
'alphapreprocessing' => 1,
|
|
7950
7951
|
'alphasample' => 1,
|
|
7952
|
+
'alphavalue' => 1,
|
|
7951
7953
|
'alternatealtitude' => 1,
|
|
7952
7954
|
'alternateduotonecolors' => 1,
|
|
7953
7955
|
'alternateellipsoidheight' => 1,
|
|
@@ -8719,11 +8721,26 @@ my %tagExists = (
|
|
|
8719
8721
|
'cleanfaxdata' => 1,
|
|
8720
8722
|
'clientid' => 1,
|
|
8721
8723
|
'clipboundary' => 1,
|
|
8724
|
+
'clipcenterx' => 1,
|
|
8725
|
+
'clipcentery' => 1,
|
|
8726
|
+
'clipheight' => 1,
|
|
8727
|
+
'cliphflip' => 1,
|
|
8728
|
+
'cliphflipeffect' => 1,
|
|
8729
|
+
'cliphozperspective' => 1,
|
|
8730
|
+
'clipinfovalue' => 1,
|
|
8722
8731
|
'clipobjects' => 1,
|
|
8723
8732
|
'clippath' => 1,
|
|
8724
8733
|
'clippingboundary' => 1,
|
|
8725
8734
|
'clippinglimit' => 1,
|
|
8726
8735
|
'clippingpathname' => 1,
|
|
8736
|
+
'cliprotate' => 1,
|
|
8737
|
+
'cliprotateeffect' => 1,
|
|
8738
|
+
'cliprotation' => 1,
|
|
8739
|
+
'cliprotationeffect' => 1,
|
|
8740
|
+
'clipverperspective' => 1,
|
|
8741
|
+
'clipvflip' => 1,
|
|
8742
|
+
'clipvflipeffect' => 1,
|
|
8743
|
+
'clipwidth' => 1,
|
|
8727
8744
|
'cloneid' => 1,
|
|
8728
8745
|
'cloneobject' => 1,
|
|
8729
8746
|
'clonetype' => 1,
|
|
@@ -8895,6 +8912,7 @@ my %tagExists = (
|
|
|
8895
8912
|
'confidencemapimage' => 1,
|
|
8896
8913
|
'confirmedobjectsize' => 1,
|
|
8897
8914
|
'connectionspaceilluminant' => 1,
|
|
8915
|
+
'connectortype' => 1,
|
|
8898
8916
|
'consecutivebadfaxlines' => 1,
|
|
8899
8917
|
'consoledata' => 1,
|
|
8900
8918
|
'consolefedata' => 1,
|
|
@@ -9183,6 +9201,7 @@ my %tagExists = (
|
|
|
9183
9201
|
'defectlistpacked' => 1,
|
|
9184
9202
|
'defineobject' => 1,
|
|
9185
9203
|
'definequantizationtable' => 1,
|
|
9204
|
+
'definition' => 1,
|
|
9186
9205
|
'delay' => 1,
|
|
9187
9206
|
'delaycols' => 1,
|
|
9188
9207
|
'delaytime' => 1,
|
|
@@ -9420,9 +9439,11 @@ my %tagExists = (
|
|
|
9420
9439
|
'ef' => 1,
|
|
9421
9440
|
'effect' => 1,
|
|
9422
9441
|
'effectivebw' => 1,
|
|
9442
|
+
'effectleveloriginal' => 1,
|
|
9423
9443
|
'effectstrength' => 1,
|
|
9424
9444
|
'effectsvisible' => 1,
|
|
9425
9445
|
'effecttype' => 1,
|
|
9446
|
+
'effectvalue' => 1,
|
|
9426
9447
|
'eighteenpercentpoint' => 1,
|
|
9427
9448
|
'eighthlanguage' => 1,
|
|
9428
9449
|
'electricalextendermagnification' => 1,
|
|
@@ -9469,6 +9490,7 @@ my %tagExists = (
|
|
|
9469
9490
|
'encryption' => 1,
|
|
9470
9491
|
'enddate' => 1,
|
|
9471
9492
|
'endianness' => 1,
|
|
9493
|
+
'endmotionvideo' => 1,
|
|
9472
9494
|
'endpoints' => 1,
|
|
9473
9495
|
'endtime' => 1,
|
|
9474
9496
|
'endtimecode' => 1,
|
|
@@ -9702,6 +9724,7 @@ my %tagExists = (
|
|
|
9702
9724
|
'filmrollnumber' => 1,
|
|
9703
9725
|
'filmsize' => 1,
|
|
9704
9726
|
'filter' => 1,
|
|
9727
|
+
'filterindication' => 1,
|
|
9705
9728
|
'filterinfo' => 1,
|
|
9706
9729
|
'filtering' => 1,
|
|
9707
9730
|
'filtermodel' => 1,
|
|
@@ -9710,6 +9733,7 @@ my %tagExists = (
|
|
|
9710
9733
|
'filterparametersexportexportdata' => 1,
|
|
9711
9734
|
'filterpartnumber' => 1,
|
|
9712
9735
|
'filterserialnumber' => 1,
|
|
9736
|
+
'filtertype' => 1,
|
|
9713
9737
|
'finalflushsequence' => 1,
|
|
9714
9738
|
'finalframeblocks' => 1,
|
|
9715
9739
|
'finetune' => 1,
|
|
@@ -9920,6 +9944,7 @@ my %tagExists = (
|
|
|
9920
9944
|
'genericflagdata01' => 1,
|
|
9921
9945
|
'genflags' => 1,
|
|
9922
9946
|
'gengraphicsmode' => 1,
|
|
9947
|
+
'genimageversion' => 1,
|
|
9923
9948
|
'genmediaheader' => 1,
|
|
9924
9949
|
'genmediainfo' => 1,
|
|
9925
9950
|
'genmediaversion' => 1,
|
|
@@ -10428,15 +10453,25 @@ my %tagExists = (
|
|
|
10428
10453
|
'irwindowtransmission' => 1,
|
|
10429
10454
|
'is_protected' => 1,
|
|
10430
10455
|
'is_trusted' => 1,
|
|
10456
|
+
'isaifilterreeditonly' => 1,
|
|
10457
|
+
'isapplyshapecorrection' => 1,
|
|
10431
10458
|
'isartbokeh' => 1,
|
|
10432
10459
|
'isattachment' => 1,
|
|
10433
10460
|
'isbasefont' => 1,
|
|
10461
|
+
'isblending' => 1,
|
|
10462
|
+
'isbrightnessipe' => 1,
|
|
10434
10463
|
'iscompleted' => 1,
|
|
10464
|
+
'iscontrastipe' => 1,
|
|
10465
|
+
'isdecoreeditonly' => 1,
|
|
10435
10466
|
'isdeleted' => 1,
|
|
10467
|
+
'isexposureipe' => 1,
|
|
10436
10468
|
'isfixedpitch' => 1,
|
|
10437
10469
|
'isfixedv' => 1,
|
|
10438
10470
|
'isinfoa100' => 1,
|
|
10471
|
+
'ismotionvideomute' => 1,
|
|
10439
10472
|
'isnetworkfeed' => 1,
|
|
10473
|
+
'isnewreeditonly' => 1,
|
|
10474
|
+
'isnotreedit' => 1,
|
|
10440
10475
|
'isoautooffset' => 1,
|
|
10441
10476
|
'isocalibrationgaintable' => 1,
|
|
10442
10477
|
'isoinfo' => 1,
|
|
@@ -10449,6 +10484,9 @@ my %tagExists = (
|
|
|
10449
10484
|
'isprotected' => 1,
|
|
10450
10485
|
'isrcnumber' => 1,
|
|
10451
10486
|
'isrecurring' => 1,
|
|
10487
|
+
'issaturationipe' => 1,
|
|
10488
|
+
'isscaleai' => 1,
|
|
10489
|
+
'istrimmotionvideo' => 1,
|
|
10452
10490
|
'isvbr' => 1,
|
|
10453
10491
|
'it8header' => 1,
|
|
10454
10492
|
'italic' => 1,
|
|
@@ -10716,7 +10754,9 @@ my %tagExists = (
|
|
|
10716
10754
|
'licenseedir' => 1,
|
|
10717
10755
|
'licenseinfourl' => 1,
|
|
10718
10756
|
'licenseurl' => 1,
|
|
10757
|
+
'lightbalance' => 1,
|
|
10719
10758
|
'lightingopt' => 1,
|
|
10759
|
+
'lightleveloriginal' => 1,
|
|
10720
10760
|
'lightness' => 1,
|
|
10721
10761
|
'lightroomworkflow' => 1,
|
|
10722
10762
|
'lights' => 1,
|
|
@@ -11271,6 +11311,7 @@ my %tagExists = (
|
|
|
11271
11311
|
'nativeyresolution' => 1,
|
|
11272
11312
|
'nbcd' => 1,
|
|
11273
11313
|
'ncc' => 1,
|
|
11314
|
+
'ndeversion' => 1,
|
|
11274
11315
|
'nemoblurkernel' => 1,
|
|
11275
11316
|
'nemodarklimit' => 1,
|
|
11276
11317
|
'nemogainfactors' => 1,
|
|
@@ -11508,6 +11549,8 @@ my %tagExists = (
|
|
|
11508
11549
|
'originalmedia' => 1,
|
|
11509
11550
|
'originalmediatype' => 1,
|
|
11510
11551
|
'originalmedium' => 1,
|
|
11552
|
+
'originalpath' => 1,
|
|
11553
|
+
'originalpathhashkey' => 1,
|
|
11511
11554
|
'originalpayloadframecount' => 1,
|
|
11512
11555
|
'originalrawcreator' => 1,
|
|
11513
11556
|
'originalrawfiletype' => 1,
|
|
@@ -11759,9 +11802,19 @@ my %tagExists = (
|
|
|
11759
11802
|
'popularimeter' => 1,
|
|
11760
11803
|
'popupfillattributes' => 1,
|
|
11761
11804
|
'popupflash' => 1,
|
|
11805
|
+
'portraiteffectid' => 1,
|
|
11806
|
+
'portraiteffectidoriginal' => 1,
|
|
11807
|
+
'portraiteffectlevel' => 1,
|
|
11808
|
+
'portraiteffectvalue' => 1,
|
|
11809
|
+
'portraitexifrotation' => 1,
|
|
11810
|
+
'portraitlightlevel' => 1,
|
|
11762
11811
|
'portraitmatrix' => 1,
|
|
11763
11812
|
'portraitoffset' => 1,
|
|
11813
|
+
'portraitrefocusx' => 1,
|
|
11814
|
+
'portraitrefocusy' => 1,
|
|
11764
11815
|
'portraittonescaletable' => 1,
|
|
11816
|
+
'portraittouchx' => 1,
|
|
11817
|
+
'portraittouchy' => 1,
|
|
11765
11818
|
'poseyawdegrees' => 1,
|
|
11766
11819
|
'position' => 1,
|
|
11767
11820
|
'postertime' => 1,
|
|
@@ -12096,6 +12149,7 @@ my %tagExists = (
|
|
|
12096
12149
|
'redtrc' => 1,
|
|
12097
12150
|
'redx' => 1,
|
|
12098
12151
|
'redy' => 1,
|
|
12152
|
+
'reeditdata' => 1,
|
|
12099
12153
|
'reelnumber' => 1,
|
|
12100
12154
|
'reeltimecode' => 1,
|
|
12101
12155
|
'reference' => 1,
|
|
@@ -12106,6 +12160,8 @@ my %tagExists = (
|
|
|
12106
12160
|
'reflection' => 1,
|
|
12107
12161
|
'reflectionhardcopyorigcolorimetry' => 1,
|
|
12108
12162
|
'reflectionprintoutputcolorimetry' => 1,
|
|
12163
|
+
'refocusxoriginal' => 1,
|
|
12164
|
+
'refocusyoriginal' => 1,
|
|
12109
12165
|
'refresh' => 1,
|
|
12110
12166
|
'regionxformtackpoint' => 1,
|
|
12111
12167
|
'registerreadtiming' => 1,
|
|
@@ -12148,6 +12204,7 @@ my %tagExists = (
|
|
|
12148
12204
|
'replyto' => 1,
|
|
12149
12205
|
'representativedisparityfar' => 1,
|
|
12150
12206
|
'representativedisparitynear' => 1,
|
|
12207
|
+
'representativeframeloc' => 1,
|
|
12151
12208
|
'representativeimage' => 1,
|
|
12152
12209
|
'requestid' => 1,
|
|
12153
12210
|
'requeststate' => 1,
|
|
@@ -12164,6 +12221,7 @@ my %tagExists = (
|
|
|
12164
12221
|
'reservedblob7' => 1,
|
|
12165
12222
|
'reservedblob8' => 1,
|
|
12166
12223
|
'reservedblob9' => 1,
|
|
12224
|
+
'resize' => 1,
|
|
12167
12225
|
'resolutioninfo' => 1,
|
|
12168
12226
|
'resolutionxlengthunit' => 1,
|
|
12169
12227
|
'resolutionxunit' => 1,
|
|
@@ -12440,6 +12498,7 @@ my %tagExists = (
|
|
|
12440
12498
|
'sensorrightborder' => 1,
|
|
12441
12499
|
'sensorvelocityeast' => 1,
|
|
12442
12500
|
'sensorvelocitynorth' => 1,
|
|
12501
|
+
'sepversion' => 1,
|
|
12443
12502
|
'seqcount' => 1,
|
|
12444
12503
|
'seqfinal' => 1,
|
|
12445
12504
|
'seqframeinfo' => 1,
|
|
@@ -12668,6 +12727,7 @@ my %tagExists = (
|
|
|
12668
12727
|
'starring' => 1,
|
|
12669
12728
|
'startdate' => 1,
|
|
12670
12729
|
'startedgecode' => 1,
|
|
12730
|
+
'startmotionvideo' => 1,
|
|
12671
12731
|
'startofframe' => 1,
|
|
12672
12732
|
'startreading' => 1,
|
|
12673
12733
|
'starttime' => 1,
|
|
@@ -13048,6 +13108,7 @@ my %tagExists = (
|
|
|
13048
13108
|
'tonescale9' => 1,
|
|
13049
13109
|
'tonescale9spline' => 1,
|
|
13050
13110
|
'tonespaceflow' => 1,
|
|
13111
|
+
'tonevalue' => 1,
|
|
13051
13112
|
'tonscaletable' => 1,
|
|
13052
13113
|
'tool_name' => 1,
|
|
13053
13114
|
'tool_version' => 1,
|
|
@@ -13070,6 +13131,8 @@ my %tagExists = (
|
|
|
13070
13131
|
'totalparts' => 1,
|
|
13071
13132
|
'totalsamples' => 1,
|
|
13072
13133
|
'totalsize' => 1,
|
|
13134
|
+
'touchxoriginal' => 1,
|
|
13135
|
+
'touchyoriginal' => 1,
|
|
13073
13136
|
'toycamerafilter' => 1,
|
|
13074
13137
|
'trackaperture' => 1,
|
|
13075
13138
|
'trackcategory' => 1,
|
|
@@ -13379,6 +13442,8 @@ my %tagExists = (
|
|
|
13379
13442
|
'watched' => 1,
|
|
13380
13443
|
'watercolorfilter' => 1,
|
|
13381
13444
|
'watermark' => 1,
|
|
13445
|
+
'watermarkremoved' => 1,
|
|
13446
|
+
'watermarkremovedoriginal' => 1,
|
|
13382
13447
|
'watermarktype' => 1,
|
|
13383
13448
|
'watermarkurl' => 1,
|
|
13384
13449
|
'wave' => 1,
|
|
@@ -13432,6 +13497,7 @@ my %tagExists = (
|
|
|
13432
13497
|
'wbredtungsten' => 1,
|
|
13433
13498
|
'wbsettings' => 1,
|
|
13434
13499
|
'wbsettings2' => 1,
|
|
13500
|
+
'wbtemperature' => 1,
|
|
13435
13501
|
'wcsprofiles' => 1,
|
|
13436
13502
|
'weaponfired' => 1,
|
|
13437
13503
|
'weaponload' => 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 28932 tags, with 17990 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
|
|
@@ -21924,7 +21924,9 @@ HEIC images from models such as the S10+.
|
|
|
21924
21924
|
EmbeddedVideoFile no
|
|
21925
21925
|
EmbeddedVideoType no
|
|
21926
21926
|
MCCData no
|
|
21927
|
-
PEg_Info
|
|
21927
|
+
PEg_Info Samsung PEgInfo
|
|
21928
|
+
ReEditData Samsung ReEditData
|
|
21929
|
+
OriginalPathHashKey no
|
|
21928
21930
|
RemasterInfo no
|
|
21929
21931
|
SamsungCaptureInfo no
|
|
21930
21932
|
SingleShotDepthMap no
|
|
@@ -21940,6 +21942,114 @@ HEIC images from models such as the S10+.
|
|
|
21940
21942
|
16 DepthMapWidth no
|
|
21941
21943
|
17 DepthMapHeight no
|
|
21942
21944
|
|
|
21945
|
+
=head3 Samsung PEgInfo Tags
|
|
21946
|
+
|
|
21947
|
+
Tag ID Tag Name Writable
|
|
21948
|
+
------ -------- --------
|
|
21949
|
+
'connectorType' ConnectorType no
|
|
21950
|
+
'genImageVersion' GenImageVersion no
|
|
21951
|
+
|
|
21952
|
+
=head3 Samsung ReEditData Tags
|
|
21953
|
+
|
|
21954
|
+
Tag ID Tag Name Writable
|
|
21955
|
+
------ -------- --------
|
|
21956
|
+
'adjustmentValue' AdjustmentValue no
|
|
21957
|
+
'clipInfoValue' ClipInfoValue Samsung ClipInfo
|
|
21958
|
+
'effectValue' EffectValue Samsung EffectInfo
|
|
21959
|
+
'endMotionVideo' EndMotionVideo no
|
|
21960
|
+
'isAIFilterReEditOnly' IsAIFilterReEditOnly no
|
|
21961
|
+
'isApplyShapeCorrection'
|
|
21962
|
+
IsApplyShapeCorrection no
|
|
21963
|
+
'isBlending' IsBlending no
|
|
21964
|
+
'isDecoReEditOnly' IsDecoReEditOnly no
|
|
21965
|
+
'isMotionVideoMute' IsMotionVideoMute no
|
|
21966
|
+
'isNewReEditOnly' IsNewReEditOnly no
|
|
21967
|
+
'isNotReEdit' IsNotReEdit no
|
|
21968
|
+
'isScaleAI' IsScaleAI no
|
|
21969
|
+
'isTrimMotionVideo' IsTrimMotionVideo no
|
|
21970
|
+
'ndeVersion' NDEVersion no
|
|
21971
|
+
'originalPath' OriginalPath no
|
|
21972
|
+
'portraitEffectValue' PortraitEffectValue Samsung PortraitEffect
|
|
21973
|
+
'reSize' ReSize no
|
|
21974
|
+
'representativeFrameLoc'
|
|
21975
|
+
RepresentativeFrameLoc no
|
|
21976
|
+
'rotation' Rotation no
|
|
21977
|
+
'sepVersion' SEPVersion no
|
|
21978
|
+
'startMotionVideo' StartMotionVideo no
|
|
21979
|
+
'toneValue' ToneValue Samsung ToneInfo
|
|
21980
|
+
|
|
21981
|
+
=head3 Samsung ClipInfo Tags
|
|
21982
|
+
|
|
21983
|
+
Tag ID Tag Name Writable
|
|
21984
|
+
------ -------- --------
|
|
21985
|
+
'mCenterX' ClipCenterX no
|
|
21986
|
+
'mCenterY' ClipCenterY no
|
|
21987
|
+
'mHFlip' ClipHFlip no
|
|
21988
|
+
'mHFlipEffect' ClipHFlipEffect no
|
|
21989
|
+
'mHeight' ClipHeight no
|
|
21990
|
+
'mHozPerspective' ClipHozPerspective no
|
|
21991
|
+
'mRotate' ClipRotate no
|
|
21992
|
+
'mRotateEffect' ClipRotateEffect no
|
|
21993
|
+
'mRotation' ClipRotation no
|
|
21994
|
+
'mRotationEffect' ClipRotationEffect no
|
|
21995
|
+
'mVFlip' ClipVFlip no
|
|
21996
|
+
'mVFlipEffect' ClipVFlipEffect no
|
|
21997
|
+
'mVerPerspective' ClipVerPerspective no
|
|
21998
|
+
'mWidth' ClipWidth no
|
|
21999
|
+
|
|
22000
|
+
=head3 Samsung EffectInfo Tags
|
|
22001
|
+
|
|
22002
|
+
Tag ID Tag Name Writable
|
|
22003
|
+
------ -------- --------
|
|
22004
|
+
'alphaValue' AlphaValue no
|
|
22005
|
+
'filterIndication' FilterIndication no
|
|
22006
|
+
'filterType' FilterType no
|
|
22007
|
+
|
|
22008
|
+
=head3 Samsung PortraitEffect Tags
|
|
22009
|
+
|
|
22010
|
+
Tag ID Tag Name Writable
|
|
22011
|
+
------ -------- --------
|
|
22012
|
+
'effectId' PortraitEffectID no
|
|
22013
|
+
'effectIdOriginal' PortraitEffectIDOriginal no
|
|
22014
|
+
'effectLevel' PortraitEffectLevel no
|
|
22015
|
+
'effectLevelOriginal' EffectLevelOriginal no
|
|
22016
|
+
'exifRotation' PortraitExifRotation no
|
|
22017
|
+
'lightLevel' PortraitLightLevel no
|
|
22018
|
+
'lightLevelOriginal' LightLevelOriginal no
|
|
22019
|
+
'refocusX' PortraitRefocusX no
|
|
22020
|
+
'refocusXOriginal' RefocusXOriginal no
|
|
22021
|
+
'refocusY' PortraitRefocusY no
|
|
22022
|
+
'refocusYOriginal' RefocusYOriginal no
|
|
22023
|
+
'touchX' PortraitTouchX no
|
|
22024
|
+
'touchXOriginal' TouchXOriginal no
|
|
22025
|
+
'touchY' PortraitTouchY no
|
|
22026
|
+
'touchYOriginal' TouchYOriginal no
|
|
22027
|
+
'waterMarkRemoved' WaterMarkRemoved no
|
|
22028
|
+
'waterMarkRemovedOriginal'
|
|
22029
|
+
WaterMarkRemovedOriginal no
|
|
22030
|
+
|
|
22031
|
+
=head3 Samsung ToneInfo Tags
|
|
22032
|
+
|
|
22033
|
+
Tag ID Tag Name Writable
|
|
22034
|
+
------ -------- --------
|
|
22035
|
+
'brightness' Brightness no
|
|
22036
|
+
'contrast' Contrast no
|
|
22037
|
+
'definition' Definition no
|
|
22038
|
+
'exposure' Exposure no
|
|
22039
|
+
'highlight' Highlight no
|
|
22040
|
+
'hue' Hue no
|
|
22041
|
+
'isBrightnessIPE' IsBrightnessIPE no
|
|
22042
|
+
'isContrastIPE' IsContrastIPE no
|
|
22043
|
+
'isExposureIPE' IsExposureIPE no
|
|
22044
|
+
'isSaturationIPE' IsSaturationIPE no
|
|
22045
|
+
'lightbalance' Lightbalance no
|
|
22046
|
+
'saturation' Saturation no
|
|
22047
|
+
'shadow' Shadow no
|
|
22048
|
+
'sharpness' Sharpness no
|
|
22049
|
+
'tint' Tint no
|
|
22050
|
+
'wbMode' WBMode no
|
|
22051
|
+
'wbTemperature' WBTemperature no
|
|
22052
|
+
|
|
21943
22053
|
=head3 Samsung SingleShotMeta Tags
|
|
21944
22054
|
|
|
21945
22055
|
Tag ID Tag Name Writable
|
|
@@ -24074,10 +24184,12 @@ some models when the ExtractEmbedded option is used.
|
|
|
24074
24184
|
Tag ID Tag Name Writable
|
|
24075
24185
|
------ -------- --------
|
|
24076
24186
|
0x8000 FNumber no
|
|
24187
|
+
0x8106 FrameRate no
|
|
24077
24188
|
0x8109 ExposureTime no
|
|
24078
24189
|
0x810a MasterGainAdjustment no
|
|
24079
24190
|
0x810b ISO no
|
|
24080
24191
|
0x810c ElectricalExtenderMagnification no
|
|
24192
|
+
0x8114 SerialNumber no
|
|
24081
24193
|
0x8500 GPSVersionID no
|
|
24082
24194
|
0x8501 GPSLatitudeRef no
|
|
24083
24195
|
0x8502 GPSLatitude no
|
|
@@ -1731,7 +1731,14 @@ ItemID2: foreach $id (reverse sort { $a <=> $b } keys %$items) {
|
|
|
1731
1731
|
# (note that $tag may be a binary Keys index here)
|
|
1732
1732
|
foreach $tag (@addTags) {
|
|
1733
1733
|
my $tagInfo = $$dirs{$tag} || $$newTags{$tag};
|
|
1734
|
-
|
|
1734
|
+
unless (ref $tagInfo eq 'HASH') { # (shouldn't happen, but somehow there is forum17260)
|
|
1735
|
+
# (also can happen if Meta exists but Keys does not since 'keys' is an array ref.
|
|
1736
|
+
# SonyPMW-EX1R.mp4 has a Movie-Meta atom with XML and no Keys that triggers this
|
|
1737
|
+
# issue. Note that in this case the Meta HandlerType is 'meta' instead of 'mdta',
|
|
1738
|
+
# which isn't a problem for ExifTool, but may be for other software?)
|
|
1739
|
+
next unless ref $tagInfo eq 'ARRAY';
|
|
1740
|
+
$tagInfo = $et->GetTagInfo($tagTablePtr, $tag) or next;
|
|
1741
|
+
}
|
|
1735
1742
|
next if defined $$tagInfo{CanCreate} and not $$tagInfo{CanCreate};
|
|
1736
1743
|
next if defined $$tagInfo{MediaType} and $$et{MediaType} ne $$tagInfo{MediaType};
|
|
1737
1744
|
my $subdir = $$tagInfo{SubDirectory};
|
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.42';
|
|
33
33
|
$RELEASE = '';
|
|
34
34
|
@ISA = qw(Exporter);
|
|
35
35
|
%EXPORT_TAGS = (
|
|
@@ -392,9 +392,9 @@ 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
|
+
LRF => ['MOV', 'Low-Resolution video File'], # (DJI)
|
|
396
396
|
LRI => ['LRI', 'Light RAW'],
|
|
397
|
-
LRV => ['MOV', 'Low-Resolution Video'],
|
|
397
|
+
LRV => ['MOV', 'Low-Resolution Video'], # (GoPro)
|
|
398
398
|
M2T => 'M2TS',
|
|
399
399
|
M2TS => ['M2TS', 'MPEG-2 Transport Stream'],
|
|
400
400
|
M2V => ['MPEG', 'MPEG-2 Video'],
|