exiftool-vendored.exe 13.30.0 → 13.32.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.exe +0 -0
- package/bin/exiftool_files/exiftool.pl +14 -7
- package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +11 -4
- package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +6 -3
- package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +3 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GoPro.pm +10 -3
- package/bin/exiftool_files/lib/Image/ExifTool/LNK.pm +21 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/de.pm +2 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/fr.pm +2 -1
- package/bin/exiftool_files/lib/Image/ExifTool/LigoGPS.pm +14 -6
- package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +13 -5
- package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +2 -1
- package/bin/exiftool_files/lib/Image/ExifTool/PDF.pm +1 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Panasonic.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Parrot.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +179 -52
- package/bin/exiftool_files/lib/Image/ExifTool/Plot.pm +2 -3
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +3 -2
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +41 -17
- package/bin/exiftool_files/lib/Image/ExifTool/Sigma.pm +19 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +2 -1
- package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +3760 -3750
- package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +32 -9
- package/bin/exiftool_files/lib/Image/ExifTool/WritePDF.pl +1 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +134 -131
- package/bin/exiftool_files/lib/Image/ExifTool/XMPStruct.pl +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool.pm +6 -4
- package/bin/exiftool_files/windows_exiftool.txt +14 -11
- package/package.json +12 -6
package/bin/exiftool.exe
CHANGED
|
Binary file
|
|
@@ -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.32';
|
|
15
15
|
|
|
16
16
|
$^W = 1; # enable global warnings
|
|
17
17
|
|
|
@@ -93,9 +93,9 @@ my @csvFiles; # list of files when reading with CSV option (in ExifTool Ch
|
|
|
93
93
|
my @csvTags; # order of tags for first file with CSV option (lower case)
|
|
94
94
|
my @delFiles; # list of files to delete
|
|
95
95
|
my @dynamicFiles; # list of -tagsFromFile files with dynamic names and -TAG<=FMT pairs
|
|
96
|
+
my (@echo3, @echo4);# stdout and stderr echo after processing is complete
|
|
96
97
|
my @efile; # files for writing list of error/fail/same file names
|
|
97
98
|
my @exclude; # list of excluded tags
|
|
98
|
-
my (@echo3, @echo4);# stdout and stderr echo after processing is complete
|
|
99
99
|
my @files; # list of files and directories to scan
|
|
100
100
|
my @moreArgs; # more arguments to process after -stay_open -@
|
|
101
101
|
my @newValues; # list of new tag values to set
|
|
@@ -110,7 +110,6 @@ my %csvTags; # lookup for all found tags with CSV option (lower case keys
|
|
|
110
110
|
my %database; # lookup for database information based on file name (in ExifTool Charset)
|
|
111
111
|
my %filterExt; # lookup for filtered extensions
|
|
112
112
|
my %ignore; # directory names to ignore
|
|
113
|
-
my $ignoreHidden; # flag to ignore hidden files
|
|
114
113
|
my %outComma; # flag that output text file needs a comma
|
|
115
114
|
my %outTrailer; # trailer for output text file
|
|
116
115
|
my %preserveTime; # preserved timestamps for files
|
|
@@ -122,6 +121,7 @@ my %usedFileName; # lookup for file names we already used in TestName feature
|
|
|
122
121
|
my %utf8FileName; # lookup for file names that are UTF-8 encoded
|
|
123
122
|
my %warnedOnce; # lookup for once-only warnings
|
|
124
123
|
my %wext; # -W extensions to write
|
|
124
|
+
my %wroteHEAD; # list of output txt files to which we wrote HEAD
|
|
125
125
|
my $allGroup; # show group name for all tags
|
|
126
126
|
my $altEnc; # alternate character encoding if not UTF-8
|
|
127
127
|
my $argFormat; # use exiftool argument-format output
|
|
@@ -167,6 +167,7 @@ my $forcePrint; # string to use for missing tag values (undef to not print t
|
|
|
167
167
|
my $geoOnly; # flag to extract Geolocation tags only
|
|
168
168
|
my $helped; # flag to avoid printing help if no tags specified
|
|
169
169
|
my $html; # flag for html-formatted output (2=html dump)
|
|
170
|
+
my $ignoreHidden; # flag to ignore hidden files
|
|
170
171
|
my $interrupted; # flag set if CTRL-C is pressed during a critical process
|
|
171
172
|
my $isBinary; # true if value is a SCALAR ref
|
|
172
173
|
my $isWriting; # flag set if we are writing tags
|
|
@@ -219,7 +220,6 @@ my $validFile; # flag indicating we processed a valid file
|
|
|
219
220
|
my $verbose; # verbose setting
|
|
220
221
|
my $vout; # verbose output file reference (\*STDOUT or \*STDERR by default)
|
|
221
222
|
my $windowTitle; # title for console window
|
|
222
|
-
my %wroteHEAD; # list of output txt files to which we wrote HEAD
|
|
223
223
|
my $xml; # flag for XML-formatted output
|
|
224
224
|
|
|
225
225
|
# flag to keep the input -@ argfile open:
|
|
@@ -464,8 +464,10 @@ undef @efile;
|
|
|
464
464
|
undef @exclude;
|
|
465
465
|
undef @files;
|
|
466
466
|
undef @newValues;
|
|
467
|
+
undef @requestTags;
|
|
467
468
|
undef @srcFmt;
|
|
468
469
|
undef @tags;
|
|
470
|
+
undef %altFile;
|
|
469
471
|
undef %appended;
|
|
470
472
|
undef %countLink;
|
|
471
473
|
undef %created;
|
|
@@ -485,6 +487,7 @@ undef %usedFileName;
|
|
|
485
487
|
undef %utf8FileName;
|
|
486
488
|
undef %warnedOnce;
|
|
487
489
|
undef %wext;
|
|
490
|
+
undef %wroteHEAD;
|
|
488
491
|
undef $allGroup;
|
|
489
492
|
undef $altEnc;
|
|
490
493
|
undef $argFormat;
|
|
@@ -501,8 +504,8 @@ undef $doSetFileName;
|
|
|
501
504
|
undef $doUnzip;
|
|
502
505
|
undef $end;
|
|
503
506
|
undef $endDir;
|
|
504
|
-
undef $escapeHTML;
|
|
505
507
|
undef $escapeC;
|
|
508
|
+
undef $escapeHTML;
|
|
506
509
|
undef $evalWarning;
|
|
507
510
|
undef $executeID;
|
|
508
511
|
undef $failCondition;
|
|
@@ -513,18 +516,22 @@ undef $fixLen;
|
|
|
513
516
|
undef $forcePrint;
|
|
514
517
|
undef $geoOnly;
|
|
515
518
|
undef $ignoreHidden;
|
|
519
|
+
undef $isBinary;
|
|
516
520
|
undef $joinLists;
|
|
517
521
|
undef $langOpt;
|
|
522
|
+
undef $listDir;
|
|
518
523
|
undef $listItem;
|
|
519
524
|
undef $multiFile;
|
|
520
525
|
undef $noBinary;
|
|
521
526
|
undef $outOpt;
|
|
527
|
+
undef $plot;
|
|
522
528
|
undef $preserveTime;
|
|
523
529
|
undef $progress;
|
|
524
530
|
undef $progressCount;
|
|
525
531
|
undef $progressIncr;
|
|
526
532
|
undef $progressMax;
|
|
527
533
|
undef $progressNext;
|
|
534
|
+
undef $rafStdin;
|
|
528
535
|
undef $recurse;
|
|
529
536
|
undef $scanWritable;
|
|
530
537
|
undef $sectHeader;
|
|
@@ -534,6 +541,7 @@ undef $showTagID;
|
|
|
534
541
|
undef $structOpt;
|
|
535
542
|
undef $tagOut;
|
|
536
543
|
undef $textOut;
|
|
544
|
+
undef $textOut2;
|
|
537
545
|
undef $textOverwrite;
|
|
538
546
|
undef $tmpFile;
|
|
539
547
|
undef $tmpText;
|
|
@@ -1483,8 +1491,7 @@ if (not @files and not $outOpt and not @newValues) {
|
|
|
1483
1491
|
# print help
|
|
1484
1492
|
unless ((@tags and not $outOpt) or @files or @newValues or $geoOnly) {
|
|
1485
1493
|
if ($doGlob and $doGlob == 2) {
|
|
1486
|
-
|
|
1487
|
-
$rtnVal = 1;
|
|
1494
|
+
Error "No matching files\n";
|
|
1488
1495
|
next;
|
|
1489
1496
|
}
|
|
1490
1497
|
if ($outOpt) {
|
|
@@ -271,11 +271,11 @@ tags remain.
|
|
|
271
271
|
|
|
272
272
|
The table below lists all EXIF tags. Also listed are TIFF, DNG, HDP and
|
|
273
273
|
other tags which are not part of the EXIF specification, but may co-exist
|
|
274
|
-
with EXIF tags in some images. Tags which are part of the EXIF
|
|
274
|
+
with EXIF tags in some images. Tags which are part of the EXIF 3.0
|
|
275
275
|
specification have an underlined B<Tag Name> in the HTML version of this
|
|
276
276
|
documentation. See
|
|
277
|
-
L<https://
|
|
278
|
-
for the official EXIF
|
|
277
|
+
L<https://www.cipa.jp/std/documents/download_e.html?CIPA_DC-008-2024-E>
|
|
278
|
+
for the official EXIF 3.0 specification.
|
|
279
279
|
},
|
|
280
280
|
GPS => q{
|
|
281
281
|
These GPS tags are part of the EXIF standard, and are stored in a separate
|
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
|
88
88
|
sub ProcessExifInfo($$$);
|
|
89
89
|
sub SwapWords($);
|
|
90
90
|
|
|
91
|
-
$VERSION = '4.
|
|
91
|
+
$VERSION = '4.93';
|
|
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)
|
|
@@ -636,9 +636,10 @@ $VERSION = '4.91';
|
|
|
636
636
|
'61182.58' => 'Canon RF 70-200mm F2.8 L IS USM Z + RF1.4x', #42
|
|
637
637
|
'61182.59' => 'Canon RF 70-200mm F2.8 L IS USM Z + RF2x', #42
|
|
638
638
|
'61182.60' => 'Canon RF 16-28mm F2.8 IS STM', #42
|
|
639
|
-
'61182.61' => 'Canon RF
|
|
640
|
-
'61182.62' => 'Canon RF
|
|
641
|
-
'61182.63' => 'Canon RF
|
|
639
|
+
'61182.61' => 'Canon RF-S 14-30mm F4-6.3 IS STM PZ', #42
|
|
640
|
+
'61182.62' => 'Canon RF 50mm F1.4 L VCM', #42
|
|
641
|
+
'61182.63' => 'Canon RF 24mm F1.4 L VCM', #42
|
|
642
|
+
'61182.64' => 'Canon RF 20mm F1.4 L VCM', #42
|
|
642
643
|
65535 => 'n/a',
|
|
643
644
|
);
|
|
644
645
|
|
|
@@ -1006,6 +1007,7 @@ $VERSION = '4.91';
|
|
|
1006
1007
|
0x80000495 => 'EOS R1', #PH
|
|
1007
1008
|
0x80000496 => 'R5 Mark II', #forum16406
|
|
1008
1009
|
0x80000498 => 'EOS R100', #25
|
|
1010
|
+
0x80000516 => 'EOS R50 V', #42
|
|
1009
1011
|
0x80000520 => 'EOS D2000C', #IB
|
|
1010
1012
|
0x80000560 => 'EOS D6000C', #PH (guess)
|
|
1011
1013
|
);
|
|
@@ -2626,6 +2628,10 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
|
2626
2628
|
0x7fff => 'n/a',
|
|
2627
2629
|
},
|
|
2628
2630
|
},
|
|
2631
|
+
52 => { #github336
|
|
2632
|
+
Name => 'HDR-PQ',
|
|
2633
|
+
PrintConv => { %offOn, -1 => 'n/a' },
|
|
2634
|
+
},
|
|
2629
2635
|
);
|
|
2630
2636
|
|
|
2631
2637
|
# focal length information (MakerNotes tag 0x02)
|
|
@@ -7032,6 +7038,7 @@ my %ciMaxFocal = (
|
|
|
7032
7038
|
320 => 'Canon RF 70-200mm F2.8 L IS USM Z + RF1.4x', #42
|
|
7033
7039
|
321 => 'Canon RF 70-200mm F2.8 L IS USM Z + RF2x', #42
|
|
7034
7040
|
323 => 'Canon RF 16-28mm F2.8 IS STM', #42
|
|
7041
|
+
324 => 'Canon RF-S 14-30mm F4-6.3 IS STM PZ', #42
|
|
7035
7042
|
325 => 'Canon RF 50mm F1.4 L VCM', #42
|
|
7036
7043
|
326 => 'Canon RF 24mm F1.4 L VCM', #42
|
|
7037
7044
|
327 => 'Canon RF 20mm F1.4 L VCM', #42
|
|
@@ -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.59';
|
|
61
61
|
|
|
62
62
|
sub ProcessExif($$$);
|
|
63
63
|
sub WriteExif($$$);
|
|
@@ -2029,7 +2029,7 @@ my %opcodeInfo = (
|
|
|
2029
2029
|
OffsetPair => -1,
|
|
2030
2030
|
},
|
|
2031
2031
|
0x8782 => 'T88Options', #20
|
|
2032
|
-
0x87ac => 'ImageLayer',
|
|
2032
|
+
0x87ac => 'ImageLayer', # Defined in the Mixed Raster Content part of RFC 2301
|
|
2033
2033
|
0x87af => { #30
|
|
2034
2034
|
Name => 'GeoTiffDirectory',
|
|
2035
2035
|
Format => 'undef',
|
|
@@ -2081,7 +2081,7 @@ my %opcodeInfo = (
|
|
|
2081
2081
|
0x8822 => {
|
|
2082
2082
|
Name => 'ExposureProgram',
|
|
2083
2083
|
Groups => { 2 => 'Camera' },
|
|
2084
|
-
Notes => 'the value of 9 is not standard EXIF, but is used by
|
|
2084
|
+
Notes => 'the value of 9 is not standard EXIF, but is used by some Canon models',
|
|
2085
2085
|
Writable => 'int16u',
|
|
2086
2086
|
PrintConv => {
|
|
2087
2087
|
0 => 'Not Defined',
|
|
@@ -4209,6 +4209,8 @@ my %opcodeInfo = (
|
|
|
4209
4209
|
},
|
|
4210
4210
|
},
|
|
4211
4211
|
# 0xc7d6 - int8u: 1 (SubIFD1 of Nikon Z6/Z7 NEF)
|
|
4212
|
+
0xc7d7 => { Name => 'ZIFMetadata', Binary => 1 },
|
|
4213
|
+
0xc7d8 => { Name => 'ZIFAnnotations', Binary => 1 },
|
|
4212
4214
|
0xc7e9 => { # DNG 1.5
|
|
4213
4215
|
Name => 'DepthFormat',
|
|
4214
4216
|
Writable => 'int16u',
|
|
@@ -4350,6 +4352,7 @@ my %opcodeInfo = (
|
|
|
4350
4352
|
Writable => 'undef',
|
|
4351
4353
|
WriteGroup => 'IFD0',
|
|
4352
4354
|
Protected => 1,
|
|
4355
|
+
Binary => 1,
|
|
4353
4356
|
},
|
|
4354
4357
|
0xcd40 => { # DNG 1.7
|
|
4355
4358
|
Name => 'ProfileGainTableMap2',
|
|
@@ -629,6 +629,9 @@ my %faceCategories = (
|
|
|
629
629
|
0x70000 => 'Soft Focus',
|
|
630
630
|
0x90000 => 'Low Key',
|
|
631
631
|
0x100000 => 'Light Leak', #forum17392
|
|
632
|
+
0x130000 => 'Expired Film Green', #forum17392
|
|
633
|
+
0x130001 => 'Expired Film Red', #forum17392 (NC)
|
|
634
|
+
0x130002 => 'Expired Film Neutral', #forum17392
|
|
632
635
|
},
|
|
633
636
|
},
|
|
634
637
|
0x1210 => { #2
|
|
@@ -17,7 +17,7 @@ use vars qw($VERSION);
|
|
|
17
17
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
18
18
|
use Image::ExifTool::QuickTime;
|
|
19
19
|
|
|
20
|
-
$VERSION = '1.
|
|
20
|
+
$VERSION = '1.13';
|
|
21
21
|
|
|
22
22
|
sub ProcessGoPro($$$);
|
|
23
23
|
sub ProcessString($$$);
|
|
@@ -762,7 +762,7 @@ sub ProcessString($$$)
|
|
|
762
762
|
}
|
|
763
763
|
|
|
764
764
|
#------------------------------------------------------------------------------
|
|
765
|
-
# Process "GP\x06\0" records in MP4 'mdat'atom
|
|
765
|
+
# Process "GP\x06\0" records in MP4 'mdat' atom
|
|
766
766
|
# Inputs: 0) ExifTool object ref, 1) dirInfo ref (RAF and DirLen)
|
|
767
767
|
# Returns: size of GoPro record, or 0 on error
|
|
768
768
|
sub ProcessGP6($$)
|
|
@@ -815,9 +815,16 @@ sub ProcessGoPro($$$)
|
|
|
815
815
|
|
|
816
816
|
for (; $pos+8<=$dirEnd; $pos+=($size+3)&0xfffffffc) {
|
|
817
817
|
my ($tag,$fmt,$len,$count) = unpack("x${pos}a4CCn", $$dataPt);
|
|
818
|
+
if ($tag =~ /[^-_a-zA-Z0-9 ]/) {
|
|
819
|
+
$et->Warn('Unrecognized GoPro record') unless $tag eq "\0\0\0\0";
|
|
820
|
+
last;
|
|
821
|
+
}
|
|
818
822
|
$size = $len * $count;
|
|
819
823
|
$pos += 8;
|
|
820
|
-
|
|
824
|
+
if ($pos + $size > $dirEnd) {
|
|
825
|
+
$et->Warn('Truncated GoPro record');
|
|
826
|
+
last;
|
|
827
|
+
}
|
|
821
828
|
my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag);
|
|
822
829
|
last if $tag eq "\0\0\0\0"; # stop at null tag
|
|
823
830
|
next unless $size or $verbose; # don't save empty values unless verbose
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
#
|
|
8
8
|
# References: 1) http://msdn.microsoft.com/en-us/library/dd871305(PROT.10).aspx
|
|
9
9
|
# 2) http://www.i2s-lab.com/Papers/The_Windows_Shortcut_File_Format.pdf
|
|
10
|
+
# 3) https://harfanglab.io/insidethelab/sadfuture-xdspy-latest-evolution/#tid_specifications_ignored
|
|
10
11
|
#------------------------------------------------------------------------------
|
|
11
12
|
|
|
12
13
|
package Image::ExifTool::LNK;
|
|
@@ -15,7 +16,7 @@ use strict;
|
|
|
15
16
|
use vars qw($VERSION);
|
|
16
17
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
17
18
|
|
|
18
|
-
$VERSION = '1.
|
|
19
|
+
$VERSION = '1.10';
|
|
19
20
|
|
|
20
21
|
sub ProcessItemID($$$);
|
|
21
22
|
sub ProcessLinkInfo($$$);
|
|
@@ -647,17 +648,32 @@ sub ProcessLNK($$)
|
|
|
647
648
|
my @strings = qw(Description RelativePath WorkingDirectory
|
|
648
649
|
CommandLineArguments IconFileName);
|
|
649
650
|
for ($i=0; $i<@strings; ++$i) {
|
|
651
|
+
my ($val, $limit);
|
|
650
652
|
my $mask = 0x04 << $i;
|
|
651
653
|
next unless $flags & $mask;
|
|
652
654
|
$raf->Read($buff, 2) or return 1;
|
|
655
|
+
my $pos = $raf->Tell();
|
|
653
656
|
$len = unpack('v', $buff) or next;
|
|
657
|
+
# Windows doesn't follow their own specification and limits the length
|
|
658
|
+
# for most of these strings (ref 3)
|
|
659
|
+
if ($i != 3 and $len >= 260) {
|
|
660
|
+
$limit = 1;
|
|
661
|
+
if ($len > 260) {
|
|
662
|
+
$len = 260;
|
|
663
|
+
$et->Warn('LNK string data overrun! Possible security issue');
|
|
664
|
+
}
|
|
665
|
+
}
|
|
654
666
|
$len *= 2 if $flags & 0x80; # characters are 2 bytes if Unicode flag is set
|
|
655
667
|
$raf->Read($buff, $len) or return 1;
|
|
656
|
-
|
|
668
|
+
# remove last character if string is at length limit (Windows treats this as a null)
|
|
669
|
+
if ($limit) {
|
|
670
|
+
$len -= $flags & 0x80 ? 2 : 1;
|
|
671
|
+
$buff = substr($buff, 0, $len);
|
|
672
|
+
}
|
|
657
673
|
$val = $et->Decode($buff, 'UCS2') if $flags & 0x80;
|
|
658
674
|
$et->HandleTag($tagTablePtr, 0x30000 | $mask, $val,
|
|
659
675
|
DataPt => \$buff,
|
|
660
|
-
DataPos => $
|
|
676
|
+
DataPos => $pos,
|
|
661
677
|
Size => $len,
|
|
662
678
|
);
|
|
663
679
|
}
|
|
@@ -716,6 +732,8 @@ under the same terms as Perl itself.
|
|
|
716
732
|
|
|
717
733
|
=item L<http://www.i2s-lab.com/Papers/The_Windows_Shortcut_File_Format.pdf>
|
|
718
734
|
|
|
735
|
+
=item L<https://harfanglab.io/insidethelab/sadfuture-xdspy-latest-evolution/#tid_specifications_ignored>
|
|
736
|
+
|
|
719
737
|
=back
|
|
720
738
|
|
|
721
739
|
=head1 SEE ALSO
|
|
@@ -11,7 +11,7 @@ package Image::ExifTool::Lang::de;
|
|
|
11
11
|
use strict;
|
|
12
12
|
use vars qw($VERSION);
|
|
13
13
|
|
|
14
|
-
$VERSION = '1.
|
|
14
|
+
$VERSION = '1.38';
|
|
15
15
|
|
|
16
16
|
%Image::ExifTool::Lang::de::Translate = (
|
|
17
17
|
'AEAperture' => 'AE-Blende',
|
|
@@ -5126,6 +5126,7 @@ $VERSION = '1.37';
|
|
|
5126
5126
|
'LensType' => {
|
|
5127
5127
|
Description => 'Objektivtyp',
|
|
5128
5128
|
PrintConv => {
|
|
5129
|
+
'None' => 'Keiner',
|
|
5129
5130
|
'Uncoded lens' => 'Nicht kodiertes Objektiv',
|
|
5130
5131
|
},
|
|
5131
5132
|
},
|
|
@@ -11,7 +11,7 @@ package Image::ExifTool::Lang::fr;
|
|
|
11
11
|
use strict;
|
|
12
12
|
use vars qw($VERSION);
|
|
13
13
|
|
|
14
|
-
$VERSION = '1.
|
|
14
|
+
$VERSION = '1.37';
|
|
15
15
|
|
|
16
16
|
%Image::ExifTool::Lang::fr::Translate = (
|
|
17
17
|
'AEAperture' => 'Ouverture AE',
|
|
@@ -6607,6 +6607,7 @@ $VERSION = '1.36';
|
|
|
6607
6607
|
'LensType' => {
|
|
6608
6608
|
Description => 'Type d\'objectif',
|
|
6609
6609
|
PrintConv => {
|
|
6610
|
+
'None' => 'Aucun',
|
|
6610
6611
|
'n/a' => 'Non applicable',
|
|
6611
6612
|
'smc PENTAX-F 100-300mm F4.5-5.6 or Sigma Lens' => 'smc PENTAX-F 100-300mm F4.5-5.6 ou objectif Sigma',
|
|
6612
6613
|
'smc PENTAX-F 28-80mm F3.5-4.5 or Tokina Lens' => 'smc PENTAX-F 28-80mm F3.5-4.5 ou objectif Tokina',
|
|
@@ -11,7 +11,7 @@ use strict;
|
|
|
11
11
|
use vars qw($VERSION);
|
|
12
12
|
use Image::ExifTool;
|
|
13
13
|
|
|
14
|
-
$VERSION = '1.
|
|
14
|
+
$VERSION = '1.06';
|
|
15
15
|
|
|
16
16
|
sub ProcessLigoGPS($$$;$);
|
|
17
17
|
sub ProcessLigoJSON($$$);
|
|
@@ -223,11 +223,12 @@ sub DecipherLigoGPS($$$;$)
|
|
|
223
223
|
#------------------------------------------------------------------------------
|
|
224
224
|
# Parse decrypted/deciphered (but not defuzzed) LIGOGPSINFO record
|
|
225
225
|
# (record starts with 4-byte int32u counter followed by date/time, etc)
|
|
226
|
-
# Inputs: 0) ExifTool ref, 1) GPS string, 2) tag table ref,
|
|
226
|
+
# Inputs: 0) ExifTool ref, 1) GPS string, 2) tag table ref,
|
|
227
|
+
# 3) flags: 0x01=not fuzzed, 0x02=spd in km/h
|
|
227
228
|
# Returns: nothing
|
|
228
229
|
sub ParseLigoGPS($$$;$)
|
|
229
230
|
{
|
|
230
|
-
my ($et, $str, $tagTbl, $
|
|
231
|
+
my ($et, $str, $tagTbl, $flags) = @_;
|
|
231
232
|
|
|
232
233
|
# example string input
|
|
233
234
|
# "....2022/09/19 12:45:24 N:31.285065 W:124.759483 46.93 km/h x:-0.000 y:-0.000 z:-0.000"
|
|
@@ -235,15 +236,16 @@ sub ParseLigoGPS($$$;$)
|
|
|
235
236
|
$et->Warn('LIGOGPSINFO format error');
|
|
236
237
|
return;
|
|
237
238
|
}
|
|
239
|
+
$flags or $flags = 0;
|
|
238
240
|
my ($time,$latRef,$latNeg,$lat,$lonRef,$lonNeg,$lon,$spd) = ($1,$2,$3,$4,$5,$6,$7,$8);
|
|
239
241
|
my %gpsScl = ( 1 => 1.524855137, 2 => 1.456027985, 3 => 1.15368 );
|
|
240
|
-
my $spdScl = $
|
|
242
|
+
my $spdScl = $flags & 0x01 ? ($flags & 0x02 ? 1 : $knotsToKph) : 1.85407333;
|
|
241
243
|
$$et{DOC_NUM} = ++$$et{DOC_COUNT};
|
|
242
244
|
$time =~ tr(/)(:);
|
|
243
245
|
# convert from DDMM.MMMMMM to DD.DDDDDD if necessary
|
|
244
246
|
# (speed wasn't scaled in my 1 sample with this format)
|
|
245
247
|
$lat =~ /^\d{3}/ and Image::ExifTool::QuickTime::ConvertLatLon($lat,$lon), $spdScl = 1;
|
|
246
|
-
unless ($
|
|
248
|
+
unless ($flags & 0x01) { # unfuzz the coordinates if necessary
|
|
247
249
|
my $scl = $$et{OPTIONS}{LigoGPSScale} || $$et{LigoGPSScale} || 1;
|
|
248
250
|
$scl = $gpsScl{$scl} if $gpsScl{$scl};
|
|
249
251
|
($lat, $lon) = UnfuzzLigoGPS($lat, $lon, $scl);
|
|
@@ -298,7 +300,13 @@ sub ProcessLigoGPS($$$;$)
|
|
|
298
300
|
$et->VerboseDir($dirName);
|
|
299
301
|
for (; $pos + 0x84 <= length($$dataPt); $pos+=0x84) {
|
|
300
302
|
my $dat = substr($$dataPt, $pos, 0x84);
|
|
301
|
-
$dat =~ /^####/
|
|
303
|
+
unless ($dat =~ /^####/) {
|
|
304
|
+
next unless $dat =~ m(^.{4}\d{4}/\d{2}/\d{2} )s; # (have seen blank records filled with zeros, so keep trying)
|
|
305
|
+
# non-encrypted format written by Redtiger F9 4K
|
|
306
|
+
$dat =~ s/\0+$//; # remove trailing nulls
|
|
307
|
+
ParseLigoGPS($et, $dat, $tagTbl, 0x03);
|
|
308
|
+
next;
|
|
309
|
+
}
|
|
302
310
|
# decipher if we already know the encryption
|
|
303
311
|
$cipherInfo and $$cipherInfo{decipher} and DecipherLigoGPS($et, $dat, $tagTbl, $noFuzz) and next;
|
|
304
312
|
my $str = DecryptLigoGPS($dat);
|
|
@@ -65,7 +65,7 @@ use Image::ExifTool::Exif;
|
|
|
65
65
|
use Image::ExifTool::GPS;
|
|
66
66
|
use Image::ExifTool::XMP;
|
|
67
67
|
|
|
68
|
-
$VERSION = '4.
|
|
68
|
+
$VERSION = '4.48';
|
|
69
69
|
|
|
70
70
|
sub LensIDConv($$$);
|
|
71
71
|
sub ProcessNikonAVI($$$);
|
|
@@ -1691,14 +1691,15 @@ my %cropHiSpeed = ( #IB
|
|
|
1691
1691
|
4 => '3:2 Crop', # (1.2x, ref 36)
|
|
1692
1692
|
6 => '16:9 Crop',
|
|
1693
1693
|
8 => '2.7x Crop', #36 (D4/D500)
|
|
1694
|
-
9 => 'DX Movie Crop', # (DX during movie recording, Large)
|
|
1694
|
+
9 => 'DX Movie 16:9 Crop', # (DX during movie recording, Large)
|
|
1695
1695
|
10 => '1.3x Movie Crop', #36 (D4/D500)
|
|
1696
1696
|
11 => 'FX Uncropped',
|
|
1697
1697
|
12 => 'DX Uncropped',
|
|
1698
1698
|
13 => '2.8x Movie Crop', #28 (D5/D6) 5584/1936
|
|
1699
1699
|
14 => '1.4x Movie Crop', #28 (D5/D6) 5584/3856
|
|
1700
1700
|
15 => '1.5x Movie Crop', #36 (D4/D500) 5600/3872
|
|
1701
|
-
17 => '1:1 Crop',
|
|
1701
|
+
17 => 'FX 1:1 Crop',
|
|
1702
|
+
18 => 'DX 1:1 Crop',
|
|
1702
1703
|
OTHER => sub {
|
|
1703
1704
|
my ($val, $inv, $conv) = @_;
|
|
1704
1705
|
return undef if $inv;
|
|
@@ -5856,6 +5857,7 @@ my %nikonFocalConversions = (
|
|
|
5856
5857
|
46 => 'Nikkor Z 135mm f/1.8 S Plena', #28
|
|
5857
5858
|
47 => 'Nikkor Z 35mm f/1.2 S', #28
|
|
5858
5859
|
48 => 'Nikkor Z 28-400mm f/4-8 VR', #30
|
|
5860
|
+
49 => 'Nikkor Z 28-135mm f/4 PZ', #28
|
|
5859
5861
|
51 => 'Nikkor Z 35mm f/1.4', #28
|
|
5860
5862
|
52 => 'Nikkor Z 50mm f/1.4', #28
|
|
5861
5863
|
2305 => 'Laowa FFII 10mm F2.8 C&D Dreamer', #30
|
|
@@ -12791,7 +12793,7 @@ my %nikonFocalConversions = (
|
|
|
12791
12793
|
Name => 'UnknownInfo',
|
|
12792
12794
|
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::UnknownInfo' },
|
|
12793
12795
|
},
|
|
12794
|
-
# 0x200002d - int16u[3]: "512 0 0"
|
|
12796
|
+
# 0x200002d - int16u[3]: "512 0 0", "512 1 14", "512 3 10"
|
|
12795
12797
|
0x2000032 => {
|
|
12796
12798
|
Name => 'UnknownInfo2',
|
|
12797
12799
|
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::UnknownInfo2' },
|
|
@@ -12804,10 +12806,12 @@ my %nikonFocalConversions = (
|
|
|
12804
12806
|
# 0x200003f - rational64s[2]: "0 0"
|
|
12805
12807
|
# 0x2000042 - undef[6]: "0100\x03\0"
|
|
12806
12808
|
# 0x2000043 - undef[12]: all zeros
|
|
12809
|
+
# 0x200004d - undef[84]: "0100\0\0\0\0x020100\0\0\0\x010100\0\0\0\x05\0\0\..."
|
|
12807
12810
|
0x200004e => {
|
|
12808
12811
|
Name => 'NikonSettings',
|
|
12809
12812
|
SubDirectory => { TagTable => 'Image::ExifTool::NikonSettings::Main' },
|
|
12810
12813
|
},
|
|
12814
|
+
# 0x2000055 - undef[8]: "0100\x01\0\0\0"
|
|
12811
12815
|
0x2000083 => {
|
|
12812
12816
|
Name => 'LensType',
|
|
12813
12817
|
# credit to Tom Christiansen (ref 7) for figuring this out...
|
|
@@ -13011,7 +13015,11 @@ my %nikonFocalConversions = (
|
|
|
13011
13015
|
Condition => '$$valPt =~ /^040[012]/',
|
|
13012
13016
|
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::AFInfo2V0400' },
|
|
13013
13017
|
}],
|
|
13014
|
-
# 0x20000c0 - undef[8]
|
|
13018
|
+
# 0x20000c0 - undef[8]:
|
|
13019
|
+
# 34 01 0c 00 90 01 0c 00
|
|
13020
|
+
# 34 01 0c 00 9c 01 0c 00
|
|
13021
|
+
# 3c 01 0c 00 9c 01 0c 00
|
|
13022
|
+
# 3c 01 0c 00 a8 01 0c 00
|
|
13015
13023
|
0x20000c3 => {
|
|
13016
13024
|
Name => 'BarometerInfo',
|
|
13017
13025
|
SubDirectory => {
|
|
@@ -40,7 +40,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
40
40
|
use Image::ExifTool::Exif;
|
|
41
41
|
use Image::ExifTool::APP12;
|
|
42
42
|
|
|
43
|
-
$VERSION = '2.
|
|
43
|
+
$VERSION = '2.87';
|
|
44
44
|
|
|
45
45
|
sub PrintLensInfo($$$);
|
|
46
46
|
|
|
@@ -447,6 +447,7 @@ my %olympusCameraTypes = (
|
|
|
447
447
|
S0101 => 'OM-5', #IB
|
|
448
448
|
S0121 => 'OM-1MarkII', #forum15652
|
|
449
449
|
S0123 => 'OM-3', #forum17208
|
|
450
|
+
S0130 => 'OM-5MarkII', #forum17465
|
|
450
451
|
SR45 => 'D220',
|
|
451
452
|
SR55 => 'D320L',
|
|
452
453
|
SR83 => 'D340L',
|
|
@@ -1439,7 +1439,7 @@ my %shootingMode = (
|
|
|
1439
1439
|
0xde => { #forum17299
|
|
1440
1440
|
Name => 'AFAreaSize',
|
|
1441
1441
|
Writable => 'rational64u',
|
|
1442
|
-
Notes => 'relative to size of image',
|
|
1442
|
+
Notes => 'relative to size of image. "n/a" for manual focus',
|
|
1443
1443
|
Count => 2,
|
|
1444
1444
|
PrintConv => '$val =~ /^4194303.999/ ? "n/a" : $val',
|
|
1445
1445
|
PrintConvInv => '$val eq "n/a" ? "4194303.999 4194303.999" : $val',
|
|
@@ -56,7 +56,7 @@ sub Process_mett($$$);
|
|
|
56
56
|
Name => 'ParrotAutomation',
|
|
57
57
|
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::Automation' },
|
|
58
58
|
},
|
|
59
|
-
# timed metadata written by ARCore (see forum13653)
|
|
59
|
+
# MetaType of timed metadata written by ARCore (see forum13653)
|
|
60
60
|
'application/arcore-accel' => {
|
|
61
61
|
Name => 'ARCoreAccel',
|
|
62
62
|
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreAccel', ByteOrder => 'II' },
|