exiftool_vendored 13.29.0 → 13.31.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 +43 -1
- data/bin/META.json +4 -3
- data/bin/META.yml +3 -2
- data/bin/README +2 -2
- data/bin/config_files/pix4d.config +9 -8
- data/bin/exiftool +14 -8
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +1 -1
- data/bin/lib/Image/ExifTool/Canon.pm +8 -3
- data/bin/lib/Image/ExifTool/Exif.pm +5 -2
- data/bin/lib/Image/ExifTool/FujiFilm.pm +5 -1
- data/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
- data/bin/lib/Image/ExifTool/GoPro.pm +10 -3
- data/bin/lib/Image/ExifTool/LNK.pm +21 -3
- data/bin/lib/Image/ExifTool/Lang/de.pm +2 -1
- data/bin/lib/Image/ExifTool/Lang/fr.pm +2 -1
- data/bin/lib/Image/ExifTool/LigoGPS.pm +15 -7
- data/bin/lib/Image/ExifTool/MakerNotes.pm +3 -3
- data/bin/lib/Image/ExifTool/Nikon.pm +10 -3
- data/bin/lib/Image/ExifTool/Olympus.pm +5 -1
- data/bin/lib/Image/ExifTool/PDF.pm +1 -0
- data/bin/lib/Image/ExifTool/Panasonic.pm +1 -1
- data/bin/lib/Image/ExifTool/Parrot.pm +1 -1
- data/bin/lib/Image/ExifTool/Pentax.pm +56 -14
- data/bin/lib/Image/ExifTool/Plot.pm +2 -3
- data/bin/lib/Image/ExifTool/QuickTime.pm +23 -3
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +51 -17
- data/bin/lib/Image/ExifTool/Sigma.pm +30 -4
- data/bin/lib/Image/ExifTool/Sony.pm +3 -3
- data/bin/lib/Image/ExifTool/TagLookup.pm +3738 -3729
- data/bin/lib/Image/ExifTool/TagNames.pod +27 -9
- data/bin/lib/Image/ExifTool/WritePDF.pl +1 -0
- data/bin/lib/Image/ExifTool/Writer.pl +128 -129
- data/bin/lib/Image/ExifTool.pm +11 -8
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 294fadd1a8ca95bacd65ceb7ccbe1e1bcad11e1c54be1614b2a97268f34b4fef
|
4
|
+
data.tar.gz: f9e486c3194561137b60596a608d121e6c836d2f1cbcc6377c8452d4187a2a8a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c7432115839881c5b0076b2ae50264ccceb0de022923b9c7cfe1a0f1aec10a019c111d92f6beb7420e3b24b54852495acdb9e380b47837228771dfb446a582d5
|
7
|
+
data.tar.gz: fa0028c4e342601dc7ee84a823c94f728a9ef04a2fdc93ae131ae0cb73259571377916ea88802af733012a442d6581f9edbdf3d851516eda289d18181ee61aa2
|
data/bin/Changes
CHANGED
@@ -4,9 +4,49 @@ ExifTool Version History
|
|
4
4
|
|
5
5
|
RSS feed: https://exiftool.org/rss.xml
|
6
6
|
|
7
|
-
Note: The most recent production release is Version 13.
|
7
|
+
Note: The most recent production release is Version 13.30. (Other versions are
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
9
9
|
|
10
|
+
June 19, 2025 - Version 13.31
|
11
|
+
|
12
|
+
- Added a new CanonModelID and RFLensType (thanks Norbert Wasser)
|
13
|
+
- Added some new FujiFilm AdvancedFilter values (thanks Greybeard)
|
14
|
+
- Added a new Nikon Z LensID (thanks Warren Hatch)
|
15
|
+
- Decode a few new Sigma tags
|
16
|
+
- Decode two more types of timed GPS from MP4 videos
|
17
|
+
- Decode more Pentax AF tags for some models (thanks Karsten Gieselmann)
|
18
|
+
- Extract Pages MediaBox from PDF files (github #333)
|
19
|
+
- Enhanced Validate feature to check some embedded images
|
20
|
+
- Remove sub-seconds if they exist when writing a PDF date
|
21
|
+
- Removed a debugging warning left in the -plot update of 13.28
|
22
|
+
- Changed DNG ProfileIFD RGBTables to Binary-type tag (github #334)
|
23
|
+
- Internal code improvements in the handling of some trailers
|
24
|
+
- Patched LNK string parsing for Windows nonconformity (github #332)
|
25
|
+
- Fixed a few possible "uninitialized value" warnings
|
26
|
+
|
27
|
+
May 22, 2025 - Version 13.30 (production release)
|
28
|
+
|
29
|
+
- Added a new Canon RF lens (thanks Norbert Wasser)
|
30
|
+
- Added some new Olympus ArtFilter values
|
31
|
+
- Added support for reading timed GPS from Transcend Drive Body Camera 70 MP4
|
32
|
+
videos
|
33
|
+
- Added a new FujiFilm AdvancedFilter value (thanks Greybeard)
|
34
|
+
- Decode maker notes from Sigma BF images
|
35
|
+
- Decode a few more Pentax AF-related tags (thanks Karsten Gieselmann)
|
36
|
+
- Extract PreviewImage and its metadata from Sigma BF MOV videos
|
37
|
+
- Allow multiple config files to be specified on the command line (but leave
|
38
|
+
undocumented for now because the config files currently included in the full
|
39
|
+
ExifTool package aren't compatible with this feature)
|
40
|
+
- Removed warning introduced in version 12.60 for an undefined tag in a -if
|
41
|
+
condition, but leave the 12.60 change that sets these tags to an empty
|
42
|
+
string when -m is used
|
43
|
+
- Patched LensID conversion to better handle a manual lens on a Sony ILCE-7M2
|
44
|
+
- Patched to avoid runtime warning when using -fast option and reading and
|
45
|
+
HEIC file via a pipe (but you will still get a seek error)
|
46
|
+
- Fixed some tag format types in the config_files/pix4d.config file
|
47
|
+
- Fixed possible "uninitialized value" warning when reading some types of Ligo
|
48
|
+
timed GPS
|
49
|
+
|
10
50
|
Apr. 27, 2025 - Version 13.29
|
11
51
|
|
12
52
|
- Changed default -geotime argument to use SubSecDateTimeOriginal if available
|
@@ -27,6 +67,8 @@ Apr. 25, 2025 - Version 13.28
|
|
27
67
|
- Decode ShutterCount for Canon EOS R8 and R50 (github #325)
|
28
68
|
- Decode ThumbnailTIFF from some Insta360 videos
|
29
69
|
- Decode AROT:HDRGainCurveSize from APP10
|
70
|
+
- Enhanced the -plot feature to allow Multi option to specify a different
|
71
|
+
number of datasets for each plot
|
30
72
|
- Updated to the 2025 MPF specification
|
31
73
|
- Renamed K-3III AFPoints to AFPointsSelected and changed decoding
|
32
74
|
- Fixed bug introduced in 13.23 that could cause an incorrect parsing of XMP
|
data/bin/META.json
CHANGED
@@ -4,13 +4,13 @@
|
|
4
4
|
"Phil Harvey (philharvey66 at gmail.com)"
|
5
5
|
],
|
6
6
|
"dynamic_config" : 1,
|
7
|
-
"generated_by" : "ExtUtils::MakeMaker version 7.
|
7
|
+
"generated_by" : "ExtUtils::MakeMaker version 7.62, CPAN::Meta::Converter version 2.150010",
|
8
8
|
"license" : [
|
9
9
|
"perl_5"
|
10
10
|
],
|
11
11
|
"meta-spec" : {
|
12
12
|
"url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
|
13
|
-
"version" :
|
13
|
+
"version" : 2
|
14
14
|
},
|
15
15
|
"name" : "Image-ExifTool",
|
16
16
|
"no_index" : {
|
@@ -50,5 +50,6 @@
|
|
50
50
|
}
|
51
51
|
},
|
52
52
|
"release_status" : "stable",
|
53
|
-
"version" : "13.
|
53
|
+
"version" : "13.31",
|
54
|
+
"x_serialization_backend" : "JSON::PP version 4.06"
|
54
55
|
}
|
data/bin/META.yml
CHANGED
@@ -7,7 +7,7 @@ build_requires:
|
|
7
7
|
configure_requires:
|
8
8
|
ExtUtils::MakeMaker: '0'
|
9
9
|
dynamic_config: 1
|
10
|
-
generated_by: 'ExtUtils::MakeMaker version 7.
|
10
|
+
generated_by: 'ExtUtils::MakeMaker version 7.62, CPAN::Meta::Converter version 2.150010'
|
11
11
|
license: perl
|
12
12
|
meta-spec:
|
13
13
|
url: http://module-build.sourceforge.net/META-spec-v1.4.html
|
@@ -31,4 +31,5 @@ recommends:
|
|
31
31
|
Time::HiRes: '0'
|
32
32
|
requires:
|
33
33
|
perl: '5.004'
|
34
|
-
version: '13.
|
34
|
+
version: '13.31'
|
35
|
+
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
|
data/bin/README
CHANGED
@@ -109,8 +109,8 @@ your home directory, then you would type the following commands in a
|
|
109
109
|
terminal window to extract and run ExifTool:
|
110
110
|
|
111
111
|
cd ~/Desktop
|
112
|
-
gzip -dc Image-ExifTool-13.
|
113
|
-
cd Image-ExifTool-13.
|
112
|
+
gzip -dc Image-ExifTool-13.31.tar.gz | tar -xf -
|
113
|
+
cd Image-ExifTool-13.31
|
114
114
|
./exiftool t/images/ExifTool.jpg
|
115
115
|
|
116
116
|
Note: These commands extract meta information from one of the test images.
|
@@ -8,10 +8,11 @@
|
|
8
8
|
#
|
9
9
|
# Requires: ExifTool version 7.00 or later
|
10
10
|
#
|
11
|
-
# References: 1) https://support.pix4d.com/hc/en-us/articles/360016450032
|
11
|
+
# References: 1) https://support.pix4d.com/hc/en-us/articles/360016450032
|
12
12
|
#
|
13
13
|
# Revisions: 2017/12/08 - P. Harvey Created
|
14
14
|
# 2020/04/02 - PH Updated to current specification
|
15
|
+
# 2025/05/01 - PH Changed some Writable types to match the spec
|
15
16
|
#------------------------------------------------------------------------------
|
16
17
|
|
17
18
|
%Image::ExifTool::UserDefined = (
|
@@ -40,8 +41,8 @@
|
|
40
41
|
PerspectiveFocalLength => { Writable => 'real' },
|
41
42
|
PerspectiveDistortion => { },
|
42
43
|
IMULinearVelocity => { },
|
43
|
-
GPSXYAccuracy => { Writable => '
|
44
|
-
GPSZAccuracy => { Writable => '
|
44
|
+
GPSXYAccuracy => { Writable => 'rational' },
|
45
|
+
GPSZAccuracy => { Writable => 'rational' },
|
45
46
|
FlightUUID => { },
|
46
47
|
CentralWaveLength => { },
|
47
48
|
BandName => { List => 'Seq' },
|
@@ -77,11 +78,11 @@
|
|
77
78
|
Albedo => { List => 'Seq' },
|
78
79
|
ReflectArea => { List => 'Seq' },
|
79
80
|
CalibrationPicture => { Writable => 'integer' },
|
80
|
-
GyroRate => { Writable => '
|
81
|
-
IMUPitchAccuracy => { Writable => '
|
82
|
-
IMURollAccuracy => { Writable => '
|
83
|
-
IMUYawAccuracy => { Writable => '
|
84
|
-
NominalCameraDistance => { Writable => '
|
81
|
+
GyroRate => { Writable => 'rational' },
|
82
|
+
IMUPitchAccuracy => { Writable => 'rational' },
|
83
|
+
IMURollAccuracy => { Writable => 'rational' },
|
84
|
+
IMUYawAccuracy => { Writable => 'rational' },
|
85
|
+
NominalCameraDistance => { Writable => 'rational' },
|
85
86
|
AboveGroundAltitude => { Writable => 'real' },
|
86
87
|
SunSensorYaw => { Writable => 'real' },
|
87
88
|
SunSensorPitch => { Writable => 'real' },
|
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.31';
|
15
15
|
|
16
16
|
$^W = 1; # enable global warnings
|
17
17
|
|
@@ -35,9 +35,9 @@ BEGIN {
|
|
35
35
|
# add lib directory at start of include path
|
36
36
|
unshift @INC, $incDir;
|
37
37
|
# load or disable config file if specified
|
38
|
-
|
38
|
+
while (@ARGV and lc($ARGV[0]) eq '-config') {
|
39
39
|
shift;
|
40
|
-
|
40
|
+
push @Image::ExifTool::configFiles, shift;
|
41
41
|
}
|
42
42
|
}
|
43
43
|
use Image::ExifTool qw{:Public};
|
@@ -5595,7 +5595,9 @@ Output requested metadata in binary format without tag names or descriptions
|
|
5595
5595
|
images or other binary data, but it may also be useful for some text strings
|
5596
5596
|
since control characters (such as newlines) are not replaced by '.' as they
|
5597
5597
|
are in the default output. By default, list items are separated by a
|
5598
|
-
newline when extracted with the B<-b> option
|
5598
|
+
newline when extracted with the B<-b> option and no terminator is added
|
5599
|
+
after each tag value, but the list separator may be changed with a B<-sep>
|
5600
|
+
option and a terminator may be set by adding a second B<-sep> option (see
|
5599
5601
|
the B<-sep> option for details). May be combined with B<-j>, B<-php> or
|
5600
5602
|
B<-X> to extract binary data in JSON, PHP or XML format, but note that
|
5601
5603
|
"Unsafe" tags are not extracted as binary unless they are specified
|
@@ -6052,7 +6054,7 @@ with this command:
|
|
6052
6054
|
|
6053
6055
|
produces output like this:
|
6054
6056
|
|
6055
|
-
-- Generated by ExifTool 13.
|
6057
|
+
-- Generated by ExifTool 13.31 --
|
6056
6058
|
File: a.jpg - 2003:10:31 15:44:19
|
6057
6059
|
(f/5.6, 1/60s, ISO 100)
|
6058
6060
|
File: b.jpg - 2006:05:23 11:57:38
|
@@ -6863,9 +6865,10 @@ otherwise family 0 is assumed. The B<-l> or B<-v> option may be combined
|
|
6863
6865
|
with B<-listf>, B<-listr> or B<-listwf> to add file descriptions to the
|
6864
6866
|
list. The B<-lang> option may be combined with B<-listx> to output
|
6865
6867
|
descriptions in a single language, and the B<-sort> and/or B<-lang> options
|
6866
|
-
may be combined with B<-listgeo
|
6867
|
-
|
6868
|
-
|
6868
|
+
may be combined with B<-listgeo> (installation of the alternate database is
|
6869
|
+
required for the additional languages). Also, the API GeolocMinPop,
|
6870
|
+
GeolocFeature and GeolocAltNames options apply to the B<-listgeo> output.
|
6871
|
+
Here are some examples:
|
6869
6872
|
|
6870
6873
|
-list # list all tag names
|
6871
6874
|
-list -EXIF:All # list all EXIF tags
|
@@ -7150,6 +7153,9 @@ accessing tags from the corresponding C<FileNUM> group.
|
|
7150
7153
|
User-defined Composite tags may access tags from alternate files using the
|
7151
7154
|
appropriate (case-sensitive) family 8 group name.
|
7152
7155
|
|
7156
|
+
The B<-fast> option, if used, also applies to processing of the alternate
|
7157
|
+
files.
|
7158
|
+
|
7153
7159
|
=item B<-list_dir>
|
7154
7160
|
|
7155
7161
|
List directories themselves instead of their contents. This option
|
@@ -995,7 +995,7 @@ TagID: foreach $tagID (@keys) {
|
|
995
995
|
if ($format and $format =~ /\$val\{/ and
|
996
996
|
($$tagInfo{Writable} or not defined $$tagInfo{Writable}))
|
997
997
|
{
|
998
|
-
warn "Warning: \$
|
998
|
+
warn "Warning: \$val{} used in Format of writable tag - $short $name\n"
|
999
999
|
}
|
1000
1000
|
}
|
1001
1001
|
if ($$tagInfo{Hidden}) {
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
88
88
|
sub ProcessExifInfo($$$);
|
89
89
|
sub SwapWords($);
|
90
90
|
|
91
|
-
$VERSION = '4.
|
91
|
+
$VERSION = '4.92';
|
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,8 +636,10 @@ $VERSION = '4.90';
|
|
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
|
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
|
641
643
|
65535 => 'n/a',
|
642
644
|
);
|
643
645
|
|
@@ -1005,6 +1007,7 @@ $VERSION = '4.90';
|
|
1005
1007
|
0x80000495 => 'EOS R1', #PH
|
1006
1008
|
0x80000496 => 'R5 Mark II', #forum16406
|
1007
1009
|
0x80000498 => 'EOS R100', #25
|
1010
|
+
0x80000516 => 'EOS R50 V', #42
|
1008
1011
|
0x80000520 => 'EOS D2000C', #IB
|
1009
1012
|
0x80000560 => 'EOS D6000C', #PH (guess)
|
1010
1013
|
);
|
@@ -7031,8 +7034,10 @@ my %ciMaxFocal = (
|
|
7031
7034
|
320 => 'Canon RF 70-200mm F2.8 L IS USM Z + RF1.4x', #42
|
7032
7035
|
321 => 'Canon RF 70-200mm F2.8 L IS USM Z + RF2x', #42
|
7033
7036
|
323 => 'Canon RF 16-28mm F2.8 IS STM', #42
|
7037
|
+
324 => 'Canon RF-S 14-30mm F4-6.3 IS STM PZ', #42
|
7034
7038
|
325 => 'Canon RF 50mm F1.4 L VCM', #42
|
7035
7039
|
326 => 'Canon RF 24mm F1.4 L VCM', #42
|
7040
|
+
327 => 'Canon RF 20mm F1.4 L VCM', #42
|
7036
7041
|
# Note: add new RF lenses to %canonLensTypes with ID 61182
|
7037
7042
|
},
|
7038
7043
|
},
|
@@ -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.58';
|
61
61
|
|
62
62
|
sub ProcessExif($$$);
|
63
63
|
sub WriteExif($$$);
|
@@ -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',
|
@@ -4350,6 +4350,7 @@ my %opcodeInfo = (
|
|
4350
4350
|
Writable => 'undef',
|
4351
4351
|
WriteGroup => 'IFD0',
|
4352
4352
|
Protected => 1,
|
4353
|
+
Binary => 1,
|
4353
4354
|
},
|
4354
4355
|
0xcd40 => { # DNG 1.7
|
4355
4356
|
Name => 'ProfileGainTableMap2',
|
@@ -5804,6 +5805,8 @@ sub PrintLensID($$@)
|
|
5804
5805
|
}
|
5805
5806
|
if ($$et{Make} eq 'SONY') {
|
5806
5807
|
if ($lensType eq 65535) {
|
5808
|
+
# patch for manual lens (forum17379)
|
5809
|
+
return $$printConv{$lensType} if $$printConv{$lensType} and not $focalLength and $maxAperture == 1;
|
5807
5810
|
# handle Sony E-type lenses when LensType2 isn't valid (NEX/ILCE models only)
|
5808
5811
|
if ($$et{Model} =~ /NEX|ILCE/) {
|
5809
5812
|
unless (%sonyEtype) {
|
@@ -31,7 +31,7 @@ use vars qw($VERSION);
|
|
31
31
|
use Image::ExifTool qw(:DataAccess :Utils);
|
32
32
|
use Image::ExifTool::Exif;
|
33
33
|
|
34
|
-
$VERSION = '1.
|
34
|
+
$VERSION = '1.97';
|
35
35
|
|
36
36
|
sub ProcessFujiDir($$$);
|
37
37
|
sub ProcessFaceRec($$$);
|
@@ -628,6 +628,10 @@ my %faceCategories = (
|
|
628
628
|
0x60006 => 'Partial Color Purple',
|
629
629
|
0x70000 => 'Soft Focus',
|
630
630
|
0x90000 => 'Low Key',
|
631
|
+
0x100000 => 'Light Leak', #forum17392
|
632
|
+
0x130000 => 'Expired Film Green', #forum17392
|
633
|
+
0x130001 => 'Expired Film Red', #forum17392 (NC)
|
634
|
+
0x130002 => 'Expired Film Neutral', #forum17392
|
631
635
|
},
|
632
636
|
},
|
633
637
|
0x1210 => { #2
|
Binary file
|
@@ -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);
|
@@ -329,7 +337,7 @@ sub ProcessLigoJSON($$$)
|
|
329
337
|
my $dataPt = $$dirInfo{DataPt};
|
330
338
|
my $dirLen = $$dirInfo{DirLen};
|
331
339
|
require Image::ExifTool::Import;
|
332
|
-
$et->VerboseDir('LIGO_JSON', undef, length($$dataPt) - pos($$dataPt));
|
340
|
+
$et->VerboseDir('LIGO_JSON', undef, length($$dataPt) - (pos($$dataPt) || 0));
|
333
341
|
$$et{SET_GROUP1} = 'LIGO';
|
334
342
|
while ($$dataPt =~ /LIGOGPSINFO (\{.*?\})/g) {
|
335
343
|
my $json = $1;
|
@@ -21,7 +21,7 @@ sub ProcessKodakPatch($$$);
|
|
21
21
|
sub WriteUnknownOrPreview($$$);
|
22
22
|
sub FixLeicaBase($$;$);
|
23
23
|
|
24
|
-
$VERSION = '2.
|
24
|
+
$VERSION = '2.17';
|
25
25
|
|
26
26
|
my $debug; # set to 1 to enable debugging code
|
27
27
|
|
@@ -991,9 +991,9 @@ my $debug; # set to 1 to enable debugging code
|
|
991
991
|
{
|
992
992
|
Name => 'MakerNoteSigma',
|
993
993
|
Condition => q{
|
994
|
-
return undef unless $$self{Make}=~/^(SIGMA|FOVEON)
|
994
|
+
return undef unless $$self{Make}=~/^(SIGMA|FOVEON)/i;
|
995
995
|
# save version number in "MakerNoteSigmaVer" member variable
|
996
|
-
$$self{MakerNoteSigmaVer} = $$valPt=~/^SIGMA\0\0\0
|
996
|
+
$$self{MakerNoteSigmaVer} = $$valPt=~/^SIGMA\0\0\0.(.)/s ? ord($1) : -1;
|
997
997
|
return 1;
|
998
998
|
},
|
999
999
|
SubDirectory => {
|
@@ -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.47';
|
69
69
|
|
70
70
|
sub LensIDConv($$$);
|
71
71
|
sub ProcessNikonAVI($$$);
|
@@ -5856,6 +5856,7 @@ my %nikonFocalConversions = (
|
|
5856
5856
|
46 => 'Nikkor Z 135mm f/1.8 S Plena', #28
|
5857
5857
|
47 => 'Nikkor Z 35mm f/1.2 S', #28
|
5858
5858
|
48 => 'Nikkor Z 28-400mm f/4-8 VR', #30
|
5859
|
+
49 => 'Nikkor Z 28-135mm f/4 PZ', #28
|
5859
5860
|
51 => 'Nikkor Z 35mm f/1.4', #28
|
5860
5861
|
52 => 'Nikkor Z 50mm f/1.4', #28
|
5861
5862
|
2305 => 'Laowa FFII 10mm F2.8 C&D Dreamer', #30
|
@@ -12791,7 +12792,7 @@ my %nikonFocalConversions = (
|
|
12791
12792
|
Name => 'UnknownInfo',
|
12792
12793
|
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::UnknownInfo' },
|
12793
12794
|
},
|
12794
|
-
# 0x200002d - int16u[3]: "512 0 0"
|
12795
|
+
# 0x200002d - int16u[3]: "512 0 0", "512 1 14", "512 3 10"
|
12795
12796
|
0x2000032 => {
|
12796
12797
|
Name => 'UnknownInfo2',
|
12797
12798
|
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::UnknownInfo2' },
|
@@ -12804,10 +12805,12 @@ my %nikonFocalConversions = (
|
|
12804
12805
|
# 0x200003f - rational64s[2]: "0 0"
|
12805
12806
|
# 0x2000042 - undef[6]: "0100\x03\0"
|
12806
12807
|
# 0x2000043 - undef[12]: all zeros
|
12808
|
+
# 0x200004d - undef[84]: "0100\0\0\0\0x020100\0\0\0\x010100\0\0\0\x05\0\0\..."
|
12807
12809
|
0x200004e => {
|
12808
12810
|
Name => 'NikonSettings',
|
12809
12811
|
SubDirectory => { TagTable => 'Image::ExifTool::NikonSettings::Main' },
|
12810
12812
|
},
|
12813
|
+
# 0x2000055 - undef[8]: "0100\x01\0\0\0"
|
12811
12814
|
0x2000083 => {
|
12812
12815
|
Name => 'LensType',
|
12813
12816
|
# credit to Tom Christiansen (ref 7) for figuring this out...
|
@@ -13011,7 +13014,11 @@ my %nikonFocalConversions = (
|
|
13011
13014
|
Condition => '$$valPt =~ /^040[012]/',
|
13012
13015
|
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::AFInfo2V0400' },
|
13013
13016
|
}],
|
13014
|
-
# 0x20000c0 - undef[8]
|
13017
|
+
# 0x20000c0 - undef[8]:
|
13018
|
+
# 34 01 0c 00 90 01 0c 00
|
13019
|
+
# 34 01 0c 00 9c 01 0c 00
|
13020
|
+
# 3c 01 0c 00 9c 01 0c 00
|
13021
|
+
# 3c 01 0c 00 a8 01 0c 00
|
13015
13022
|
0x20000c3 => {
|
13016
13023
|
Name => 'BarometerInfo',
|
13017
13024
|
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.86';
|
44
44
|
|
45
45
|
sub PrintLensInfo($$$);
|
46
46
|
|
@@ -550,6 +550,7 @@ my %filters = (
|
|
550
550
|
4 => 'Light Tone',
|
551
551
|
5 => 'Pin Hole', # (SZ-10 magic filter 2,SZ-31MR,E-PL3)
|
552
552
|
6 => 'Grainy Film',
|
553
|
+
8 => 'Underwater', #forum17348
|
553
554
|
9 => 'Diorama',
|
554
555
|
10 => 'Cross Process',
|
555
556
|
12 => 'Fish Eye', # (SZ-10 magic filter 3)
|
@@ -581,6 +582,9 @@ my %filters = (
|
|
581
582
|
39 => 'Partial Color', #forum6269
|
582
583
|
40 => 'Partial Color II', #forum6269
|
583
584
|
41 => 'Partial Color III', #forum6269
|
585
|
+
42 => 'Bleach Bypass', #forum17348
|
586
|
+
43 => 'Bleach Bypass II', #forum17348
|
587
|
+
44 => 'Instant Film', #forum17348
|
584
588
|
);
|
585
589
|
|
586
590
|
my %toneLevelType = (
|
@@ -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',
|