exiftool_vendored 11.69.0 → 11.70.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of exiftool_vendored might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/bin/Changes +19 -4
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +2 -2
- data/bin/lib/Image/ExifTool.pm +13 -4
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +3 -1
- data/bin/lib/Image/ExifTool/Canon.pm +4 -2
- data/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/Exif.pm +6 -5
- data/bin/lib/Image/ExifTool/FujiFilm.pm +9 -6
- data/bin/lib/Image/ExifTool/GPS.pm +2 -1
- data/bin/lib/Image/ExifTool/MakerNotes.pm +4 -0
- data/bin/lib/Image/ExifTool/Nikon.pm +3 -0
- data/bin/lib/Image/ExifTool/OOXML.pm +2 -1
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +28 -16
- data/bin/lib/Image/ExifTool/TagNames.pod +2 -2
- data/bin/lib/Image/ExifTool/ZIP.pm +9 -2
- 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
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 99342b0e056690256fd202039dbf7b678e57e74f
|
4
|
+
data.tar.gz: abc9d3a16667124e8920041f816acc514d004b1f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4cedd4a547029020891081d81be3a9e0356f06fad6bca85df5e0a799ef9eba06e0ea48345e921c066b8c1e74bc1caf7fff084e95da64f2deb23210ee4a29ccf3
|
7
|
+
data.tar.gz: 591846ec033b7e216d05037ee6c503d291e55b67c36255c48c4b32d2835475ef15c12c3dbc328ec9a9f9ce3b10207d8ed4b4c42e3e3d90e955385fc47ba165e1
|
data/bin/Changes
CHANGED
@@ -4,13 +4,28 @@ ExifTool Version History
|
|
4
4
|
|
5
5
|
RSS feed: http://owl.phy.queensu.ca/~phil/exiftool/rss.xml
|
6
6
|
|
7
|
-
Note: The most recent production release is Version 11.
|
7
|
+
Note: The most recent production release is Version 11.70. (Other versions are
|
8
8
|
considered development releases, and are not uploaded to CPAN.)
|
9
9
|
|
10
|
+
Oct. 10, 2019 - Version 11.70 (production release)
|
11
|
+
|
12
|
+
- Added a new CanonModelID (thanks Laurent Clevy)
|
13
|
+
- Improved identification of Office Open XML files
|
14
|
+
- Removed RAF version check when writing FujiFilm RAF files
|
15
|
+
- Limited the number of accelerometer records that ExifTool will read by
|
16
|
+
default with the -ee option from INSV files to avoid excessive processing
|
17
|
+
times and memory usage
|
18
|
+
- Patched Windows version to allow reading of shared files with Unicode names
|
19
|
+
(thanks Eriksson)
|
20
|
+
- Patched to avoid converting some bad GPS coordinates (thanks Csaba Toth)
|
21
|
+
- Fixed verbose output to include YCbCrSubSampling for JPEG files
|
22
|
+
- Fixed conversion and group names for the new FujiFilm tag added in 11.68
|
23
|
+
- Fixed format of GeoTiffDirectory and GeoTiffDoubleParams when writing
|
24
|
+
|
10
25
|
Oct. 2, 2019 - Version 11.69
|
11
26
|
|
12
|
-
- Fixed bug
|
13
|
-
values
|
27
|
+
- Fixed bug introduced in version 11.66 where the sign was lost when writing
|
28
|
+
coordinate values between 0 and -1 to QuickTime:GPSCoordinates
|
14
29
|
|
15
30
|
Oct. 1, 2019 - Version 11.68
|
16
31
|
|
@@ -18,7 +33,7 @@ Oct. 1, 2019 - Version 11.68
|
|
18
33
|
- Added a number of new FujiFlashMode values
|
19
34
|
- Decode a new FujiFilm tag
|
20
35
|
- Made NikonCaptureOffsets and NikonCaptureVersion deletable
|
21
|
-
- Enhanced tag name documentation to indicate deletable
|
36
|
+
- Enhanced tag name documentation to indicate deletable MakerNotes tags
|
22
37
|
|
23
38
|
Sept. 30, 2019 - Version 11.67
|
24
39
|
|
data/bin/META.json
CHANGED
data/bin/META.yml
CHANGED
data/bin/README
CHANGED
@@ -104,8 +104,8 @@ your home directory, then you would type the following commands in a
|
|
104
104
|
terminal window to extract and run ExifTool:
|
105
105
|
|
106
106
|
cd ~/Desktop
|
107
|
-
gzip -dc Image-ExifTool-11.
|
108
|
-
cd Image-ExifTool-11.
|
107
|
+
gzip -dc Image-ExifTool-11.70.tar.gz | tar -xf -
|
108
|
+
cd Image-ExifTool-11.70
|
109
109
|
./exiftool t/images/ExifTool.jpg
|
110
110
|
|
111
111
|
Note: These commands extract meta information from one of the test images.
|
data/bin/exiftool
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
use strict;
|
11
11
|
require 5.004;
|
12
12
|
|
13
|
-
my $version = '11.
|
13
|
+
my $version = '11.70';
|
14
14
|
|
15
15
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
16
16
|
my $exeDir;
|
@@ -5173,7 +5173,7 @@ with this command:
|
|
5173
5173
|
|
5174
5174
|
produces output like this:
|
5175
5175
|
|
5176
|
-
-- Generated by ExifTool 11.
|
5176
|
+
-- Generated by ExifTool 11.70 --
|
5177
5177
|
File: a.jpg - 2003:10:31 15:44:19
|
5178
5178
|
(f/5.6, 1/60s, ISO 100)
|
5179
5179
|
File: b.jpg - 2006:05:23 11:57:38
|
data/bin/lib/Image/ExifTool.pm
CHANGED
@@ -27,7 +27,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
|
|
27
27
|
%mimeType $swapBytes $swapWords $currentByteOrder %unpackStd
|
28
28
|
%jpegMarker %specialTags %fileTypeLookup);
|
29
29
|
|
30
|
-
$VERSION = '11.
|
30
|
+
$VERSION = '11.70';
|
31
31
|
$RELEASE = '';
|
32
32
|
@ISA = qw(Exporter);
|
33
33
|
%EXPORT_TAGS = (
|
@@ -434,6 +434,8 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
|
|
434
434
|
POT => ['FPX', 'Microsoft PowerPoint Template'],
|
435
435
|
POTM => [['ZIP','FPX'], 'Office Open XML Presentation Template Macro-enabled'],
|
436
436
|
POTX => [['ZIP','FPX'], 'Office Open XML Presentation Template'],
|
437
|
+
PPAM => [['ZIP','FPX'], 'Office Open XML Presentation Addin Macro-enabled'],
|
438
|
+
PPAX => [['ZIP','FPX'], 'Office Open XML Presentation Addin'],
|
437
439
|
PPM => ['PPM', 'Portable Pixel Map'],
|
438
440
|
PPS => ['FPX', 'Microsoft PowerPoint Slideshow'],
|
439
441
|
PPSM => [['ZIP','FPX'], 'Office Open XML Presentation Slideshow Macro-enabled'],
|
@@ -683,6 +685,8 @@ my %fileDescription = (
|
|
683
685
|
POT => 'application/vnd.ms-powerpoint',
|
684
686
|
POTM => 'application/vnd.ms-powerpoint.template.macroEnabled',
|
685
687
|
POTX => 'application/vnd.openxmlformats-officedocument.presentationml.template',
|
688
|
+
PPAM => 'application/vnd.ms-powerpoint.addin.macroEnabled',
|
689
|
+
PPAX => 'application/vnd.openxmlformats-officedocument.presentationml.addin', # (NC, PH invented)
|
686
690
|
PPM => 'image/x-portable-pixmap',
|
687
691
|
PPS => 'application/vnd.ms-powerpoint',
|
688
692
|
PPSM => 'application/vnd.ms-powerpoint.slideshow.macroEnabled',
|
@@ -3882,7 +3886,11 @@ sub Open($*$;$)
|
|
3882
3886
|
$create = Win32API::File::OPEN_EXISTING();
|
3883
3887
|
}
|
3884
3888
|
}
|
3885
|
-
my $
|
3889
|
+
my $share = 0;
|
3890
|
+
eval {
|
3891
|
+
$share = Win32API::File::FILE_SHARE_READ() unless $access & Win32API::File::GENERIC_WRITE();
|
3892
|
+
};
|
3893
|
+
my $wh = eval { Win32API::File::CreateFileW($file, $access, $share, [], $create, 0, []) };
|
3886
3894
|
return undef unless $wh;
|
3887
3895
|
my $fd = eval { Win32API::File::OsFHandleOpenFd($wh, 0) };
|
3888
3896
|
if (not defined $fd or $fd < 0) {
|
@@ -3910,7 +3918,8 @@ sub Exists($$)
|
|
3910
3918
|
if ($self->EncodeFileName($file)) {
|
3911
3919
|
local $SIG{'__WARN__'} = \&SetWarning;
|
3912
3920
|
my $wh = eval { Win32API::File::CreateFileW($file,
|
3913
|
-
Win32API::File::GENERIC_READ(),
|
3921
|
+
Win32API::File::GENERIC_READ(),
|
3922
|
+
Win32API::File::FILE_SHARE_READ(), [],
|
3914
3923
|
Win32API::File::OPEN_EXISTING(), 0, []) };
|
3915
3924
|
return 0 unless $wh;
|
3916
3925
|
eval { Win32API::File::CloseHandle($wh) };
|
@@ -6037,7 +6046,7 @@ sub ProcessJPEG($$)
|
|
6037
6046
|
}
|
6038
6047
|
if ($hmin and $vmin) {
|
6039
6048
|
my ($hs, $vs) = ($hmax / $hmin, $vmax / $vmin);
|
6040
|
-
$self->
|
6049
|
+
$self->HandleTag($sof, 'YCbCrSubSampling', "$hs $vs");
|
6041
6050
|
}
|
6042
6051
|
next;
|
6043
6052
|
} elsif ($marker == 0xd9) { # EOI
|
@@ -35,7 +35,7 @@ use Image::ExifTool::Sony;
|
|
35
35
|
use Image::ExifTool::Validate;
|
36
36
|
use Image::ExifTool::MacOS;
|
37
37
|
|
38
|
-
$VERSION = '3.
|
38
|
+
$VERSION = '3.30';
|
39
39
|
@ISA = qw(Exporter);
|
40
40
|
|
41
41
|
sub NumbersFirst($$);
|
@@ -2560,6 +2560,7 @@ sub WriteTagNames($$)
|
|
2560
2560
|
my ($smallNote, @values);
|
2561
2561
|
foreach (@$values) {
|
2562
2562
|
if (/^\(/) {
|
2563
|
+
$_ = Doc2Html($_);
|
2563
2564
|
# set the note font
|
2564
2565
|
$smallNote = 1 if $numTags < 2;
|
2565
2566
|
push @values, ($smallNote ? $noteFontSmall : $noteFont) . "$_</span>";
|
@@ -2570,6 +2571,7 @@ sub WriteTagNames($$)
|
|
2570
2571
|
if (s/^\[!HTML\]//) {
|
2571
2572
|
push @values, $_;
|
2572
2573
|
} else {
|
2574
|
+
$_ = Doc2Html($_);
|
2573
2575
|
push @values, "<span class=s>$_</span>";
|
2574
2576
|
}
|
2575
2577
|
next;
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
88
88
|
sub ProcessExifInfo($$$);
|
89
89
|
sub SwapWords($);
|
90
90
|
|
91
|
-
$VERSION = '4.
|
91
|
+
$VERSION = '4.26';
|
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)
|
@@ -814,6 +814,7 @@ $VERSION = '4.25';
|
|
814
814
|
0x805 => 'PowerShot SX70 HS',
|
815
815
|
0x808 => 'PowerShot G7 X Mark III',
|
816
816
|
0x811 => 'EOS M6 Mark II', #IB
|
817
|
+
0x812 => 'EOS M200', #25
|
817
818
|
|
818
819
|
# (see http://cweb.canon.jp/e-support/faq/answer/digitalcamera/10447-1.html for PowerShot/IXUS/IXY names)
|
819
820
|
|
@@ -2185,6 +2186,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
2185
2186
|
61 => 'Smooth Skin', #51
|
2186
2187
|
62 => 'Soft Focus', #PH (SX260,IXUS240)
|
2187
2188
|
68 => 'Food', #PH (250D)
|
2189
|
+
# 83 - seen for EOS M200 (ref PH)
|
2188
2190
|
84 => 'HDR Art Standard', #PH (80D)
|
2189
2191
|
85 => 'HDR Art Vivid', #PH (80D)
|
2190
2192
|
93 => 'HDR Art Bold', #PH (80D)
|
@@ -7890,7 +7892,7 @@ my %ciMaxFocal = (
|
|
7890
7892
|
16 => '16 (M50)',
|
7891
7893
|
17 => '17 (EOS R)', # (and PowerShot SX740HS)
|
7892
7894
|
18 => '18 (EOS RP)', # (and PowerShot SX70HS)
|
7893
|
-
19 => '19 (90D/M6mkII)',# (and PowerShot G7XmkIII)
|
7895
|
+
19 => '19 (90D/M6mkII/M200)',# (and PowerShot G7XmkIII)
|
7894
7896
|
},
|
7895
7897
|
},
|
7896
7898
|
0x47 => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' },
|
@@ -683,7 +683,7 @@ sub ProcessCanonRaw($$$)
|
|
683
683
|
my ($value, $delRawConv);
|
684
684
|
if ($valueInDir) { # is the value data in the directory?
|
685
685
|
# this type of tag stores the value in the 'size' and 'ptr' fields
|
686
|
-
$valueDataPos = $dirOffset + $pt + 4;
|
686
|
+
$valueDataPos = $dirOffset + $pt + 4; # (remember, +2 for the entry count)
|
687
687
|
$size = 8;
|
688
688
|
$value = substr($buff, $pt+2, $size);
|
689
689
|
# set count to 1 by default for normal values in directory
|
@@ -56,7 +56,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
|
|
56
56
|
use Image::ExifTool qw(:DataAccess :Utils);
|
57
57
|
use Image::ExifTool::MakerNotes;
|
58
58
|
|
59
|
-
$VERSION = '4.
|
59
|
+
$VERSION = '4.24';
|
60
60
|
|
61
61
|
sub ProcessExif($$$);
|
62
62
|
sub WriteExif($$$);
|
@@ -1810,14 +1810,14 @@ my %sampleFormat = (
|
|
1810
1810
|
0x87af => { #30
|
1811
1811
|
Name => 'GeoTiffDirectory',
|
1812
1812
|
Format => 'undef',
|
1813
|
-
|
1813
|
+
Writable => 'int16u',
|
1814
1814
|
Notes => q{
|
1815
1815
|
these "GeoTiff" tags may read and written as a block, but they aren't
|
1816
1816
|
extracted unless specifically requested. Byte order changes are handled
|
1817
1817
|
automatically when copying between TIFF images with different byte order
|
1818
1818
|
},
|
1819
|
-
Writable => 'undef',
|
1820
1819
|
WriteGroup => 'IFD0',
|
1820
|
+
Binary => 1,
|
1821
1821
|
RawConv => '$val . GetByteOrder()', # save byte order
|
1822
1822
|
# swap byte order if necessary
|
1823
1823
|
RawConvInv => q{
|
@@ -1832,9 +1832,9 @@ my %sampleFormat = (
|
|
1832
1832
|
0x87b0 => { #30
|
1833
1833
|
Name => 'GeoTiffDoubleParams',
|
1834
1834
|
Format => 'undef',
|
1835
|
-
|
1836
|
-
Writable => 'undef',
|
1835
|
+
Writable => 'double',
|
1837
1836
|
WriteGroup => 'IFD0',
|
1837
|
+
Binary => 1,
|
1838
1838
|
RawConv => '$val . GetByteOrder()', # save byte order
|
1839
1839
|
# swap byte order if necessary
|
1840
1840
|
RawConvInv => q{
|
@@ -1849,6 +1849,7 @@ my %sampleFormat = (
|
|
1849
1849
|
},
|
1850
1850
|
0x87b1 => { #30
|
1851
1851
|
Name => 'GeoTiffAsciiParams',
|
1852
|
+
Format => 'undef',
|
1852
1853
|
Writable => 'string',
|
1853
1854
|
WriteGroup => 'IFD0',
|
1854
1855
|
Binary => 1,
|
@@ -31,12 +31,13 @@ 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.75';
|
35
35
|
|
36
36
|
sub ProcessFujiDir($$$);
|
37
37
|
sub ProcessFaceRec($$$);
|
38
38
|
|
39
39
|
# the following RAF version numbers have been tested for writing:
|
40
|
+
# (as of ExifTool 11.70, this lookup is no longer used if the version number is numerical)
|
40
41
|
my %testedRAF = (
|
41
42
|
'0100' => 'E550, E900, F770, S5600, S6000fd, S6500fd, HS10/HS11, HS30, S200EXR, X100, XF1, X-Pro1, X-S1, XQ2 Ver1.00, X-T100, GFX 50R, XF10',
|
42
43
|
'0101' => 'X-E1, X20 Ver1.01, X-T3',
|
@@ -776,10 +777,11 @@ my %faceCategories = (
|
|
776
777
|
Writable => 'int16u',
|
777
778
|
Groups => { 2 => 'Video' },
|
778
779
|
},
|
779
|
-
0x3824 => { #forum10480 (X
|
780
|
+
0x3824 => { #forum10480 (X series)
|
780
781
|
Name => 'FullHDHighSpeedRec',
|
781
782
|
Writable => 'int32u',
|
782
|
-
Groups => {
|
783
|
+
Groups => { 2 => 'Video' },
|
784
|
+
PrintConv => { 1 => 'Off', 2 => 'On' },
|
783
785
|
},
|
784
786
|
0x4005 => { #forum9634
|
785
787
|
Name => 'FaceElementSelected', # (could be face or eye)
|
@@ -1467,9 +1469,10 @@ sub WriteRAF($$)
|
|
1467
1469
|
return 1;
|
1468
1470
|
}
|
1469
1471
|
# check to make sure this version of RAF has been tested
|
1470
|
-
|
1471
|
-
|
1472
|
-
|
1472
|
+
#(removed in ExifTool 11.70)
|
1473
|
+
#unless ($testedRAF{$ver}) {
|
1474
|
+
# $et->Warn("RAF version $ver not yet tested", 1);
|
1475
|
+
#}
|
1473
1476
|
# read the embedded JPEG
|
1474
1477
|
unless ($raf->Seek($jpos, 0) and $raf->Read($jpeg, $jlen) == $jlen) {
|
1475
1478
|
$et->Error('Error reading RAF meta information');
|
@@ -12,7 +12,7 @@ use strict;
|
|
12
12
|
use vars qw($VERSION);
|
13
13
|
use Image::ExifTool::Exif;
|
14
14
|
|
15
|
-
$VERSION = '1.
|
15
|
+
$VERSION = '1.51';
|
16
16
|
|
17
17
|
my %coordConv = (
|
18
18
|
ValueConv => 'Image::ExifTool::GPS::ToDegrees($val)',
|
@@ -534,6 +534,7 @@ sub ToDMS($$;$$)
|
|
534
534
|
sub ToDegrees($;$)
|
535
535
|
{
|
536
536
|
my ($val, $doSign) = @_;
|
537
|
+
return '' if $val =~ /\b(inf|undef)\b/; # ignore invalid values
|
537
538
|
# extract decimal or floating point values out of any other garbage
|
538
539
|
my ($d, $m, $s) = ($val =~ /((?:[+-]?)(?=\d|\.\d)\d*(?:\.\d*)?(?:[Ee][+-]\d+)?)/g);
|
539
540
|
return '' unless defined $d;
|
@@ -160,6 +160,10 @@ my $debug; # set to 1 to enable debugging code
|
|
160
160
|
Start => '$valuePtr',
|
161
161
|
Base => 0, # (avoids warnings since maker notes are not self-contained)
|
162
162
|
},
|
163
|
+
# 0x0011 - sensor code (ref IB)
|
164
|
+
# 0x0012 - camera model id?
|
165
|
+
# 0x0015 - camera model name
|
166
|
+
# 0x0016 - coating code (ref IB)
|
163
167
|
},
|
164
168
|
# (the GE X5 has really messed up EXIF-like maker notes starting with
|
165
169
|
# "GENIC\x0c\0" --> currently not decoded)
|
@@ -2284,6 +2284,7 @@ my %binaryDataAttrs = (
|
|
2284
2284
|
Name => 'NikonCaptureVersion',
|
2285
2285
|
Writable => 'string',
|
2286
2286
|
Permanent => 0,
|
2287
|
+
PrintConv => undef, # (avoid applying default print conversion to string)
|
2287
2288
|
},
|
2288
2289
|
# 0x0e0e is in D70 Nikon Capture files (not out-of-the-camera D70 files) - PH
|
2289
2290
|
0x0e0e => { #PH
|
@@ -3840,6 +3841,8 @@ my %binaryDataAttrs = (
|
|
3840
3841
|
%Image::ExifTool::Nikon::CaptureOffsets = (
|
3841
3842
|
PROCESS_PROC => \&ProcessNikonCaptureOffsets,
|
3842
3843
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
3844
|
+
# (note that these are duplicates of offsets in the normal TIFF structure,
|
3845
|
+
# and that these offsets are not updated when ExifTool rewrites the file)
|
3843
3846
|
1 => 'IFD0_Offset',
|
3844
3847
|
2 => 'PreviewIFD_Offset',
|
3845
3848
|
3 => 'SubIFD_Offset',
|
@@ -14,13 +14,14 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
14
14
|
use Image::ExifTool::XMP;
|
15
15
|
use Image::ExifTool::ZIP;
|
16
16
|
|
17
|
-
$VERSION = '1.
|
17
|
+
$VERSION = '1.08';
|
18
18
|
|
19
19
|
# test for recognized OOXML document extensions
|
20
20
|
my %isOOXML = (
|
21
21
|
DOCX => 1, DOCM => 1,
|
22
22
|
DOTX => 1, DOTM => 1,
|
23
23
|
POTX => 1, POTM => 1,
|
24
|
+
PPAX => 1, PPAM => 1,
|
24
25
|
PPSX => 1, PPSM => 1,
|
25
26
|
PPTX => 1, PPTM => 1, THMX => 1,
|
26
27
|
XLAM => 1,
|
@@ -70,9 +70,15 @@ my %processByMetaFormat = (
|
|
70
70
|
|
71
71
|
# data lengths for each INSV record type
|
72
72
|
my %insvDataLen = (
|
73
|
-
0x300 => 56,
|
74
|
-
0x400 => 16,
|
75
|
-
0x700 => 53,
|
73
|
+
0x300 => 56, # accelerometer
|
74
|
+
0x400 => 16, # unknown
|
75
|
+
0x700 => 53, # GPS
|
76
|
+
);
|
77
|
+
|
78
|
+
# limit the default amount of data we read for some record types
|
79
|
+
# (to avoid running out of memory)
|
80
|
+
my %insvLimit = (
|
81
|
+
0x300 => [ 'accelerometer', 20000 ], # maximum of 20000 accelerometer records
|
76
82
|
);
|
77
83
|
|
78
84
|
# tags extracted from various QuickTime data streams
|
@@ -1392,7 +1398,7 @@ sub Process_mebx($$$)
|
|
1392
1398
|
}
|
1393
1399
|
|
1394
1400
|
#------------------------------------------------------------------------------
|
1395
|
-
# Process QuickTime '3gf' timed metadata (Pittasoft Blackvue dashcam)
|
1401
|
+
# Process QuickTime '3gf' timed metadata (ref PH, Pittasoft Blackvue dashcam)
|
1396
1402
|
# Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
|
1397
1403
|
# Returns: 1 on success
|
1398
1404
|
sub Process_3gf($$$)
|
@@ -1652,7 +1658,7 @@ sub ProcessTTAD($$$)
|
|
1652
1658
|
}
|
1653
1659
|
|
1654
1660
|
#------------------------------------------------------------------------------
|
1655
|
-
# Extract information from Insta360 trailer
|
1661
|
+
# Extract information from Insta360 trailer (ref PH)
|
1656
1662
|
# Inputs: 0) ExifTool ref
|
1657
1663
|
sub ProcessINSVTrailer($)
|
1658
1664
|
{
|
@@ -1667,23 +1673,29 @@ sub ProcessINSVTrailer($)
|
|
1667
1673
|
my $tagTbl = GetTagTable('Image::ExifTool::QuickTime::Stream');
|
1668
1674
|
my $fileEnd = $raf->Tell();
|
1669
1675
|
my $trailerLen = unpack('x38V', $buff);
|
1670
|
-
|
1676
|
+
$trailerLen > $fileEnd and $et->Warn('Bad INSV trailer size'), return;
|
1671
1677
|
my $unknown = $et->Options('Unknown');
|
1672
1678
|
my $verbose = $et->Options('Verbose');
|
1673
|
-
my $
|
1679
|
+
my $epos = -78; # position relative to EOF (avoids using large offsets for files > 2 GB)
|
1674
1680
|
my ($i, $p);
|
1675
1681
|
SetByteOrder('II');
|
1676
1682
|
# loop through all records in the trailer, from last to first
|
1677
1683
|
for (;;) {
|
1678
1684
|
my ($id, $len) = unpack('vV', $buff);
|
1679
|
-
($
|
1680
|
-
$raf->Seek($
|
1681
|
-
|
1685
|
+
($epos -= $len) + $trailerLen < 0 and last;
|
1686
|
+
$raf->Seek($epos, 2) or last;
|
1687
|
+
my $dlen = $insvDataLen{$id};
|
1682
1688
|
if ($verbose) {
|
1683
|
-
$et->VPrint(0, sprintf("INSV Record 0x%x (offset 0x%x, %d bytes):\n", $id, $
|
1684
|
-
$et->VerboseDump(\$buff);
|
1689
|
+
$et->VPrint(0, sprintf("INSV Record 0x%x (offset 0x%x, %d bytes):\n", $id, $fileEnd + $epos, $len));
|
1685
1690
|
}
|
1686
|
-
|
1691
|
+
# limit the number of records we read if necessary
|
1692
|
+
if ($insvLimit{$id} and $len > $insvLimit{$id}[1] * $dlen and
|
1693
|
+
$et->Warn("INSV $insvLimit{$id}[0] data is huge. Processing only the first $insvLimit{$id}[1] records",2))
|
1694
|
+
{
|
1695
|
+
$len = $insvLimit{$id}[1] * $dlen;
|
1696
|
+
}
|
1697
|
+
$raf->Read($buff, $len) == $len or last;
|
1698
|
+
$et->VerboseDump(\$buff) if $verbose > 2;
|
1687
1699
|
if ($dlen) {
|
1688
1700
|
$len % $dlen and $et->Warn(sprintf('Unexpected INSV record 0x%x length',$id)), last;
|
1689
1701
|
if ($id == 0x300) {
|
@@ -1719,7 +1731,7 @@ sub ProcessINSVTrailer($)
|
|
1719
1731
|
$et->HandleTag($tagTbl, GPSTrack => $a[9]);
|
1720
1732
|
$et->HandleTag($tagTbl, GPSTrackRef => 'T');
|
1721
1733
|
$et->HandleTag($tagTbl, GPSAltitude => $a[10]);
|
1722
|
-
$et->HandleTag($tagTbl, Unknown02 => "@a[1,2]");
|
1734
|
+
$et->HandleTag($tagTbl, Unknown02 => "@a[1,2]") if $unknown;
|
1723
1735
|
}
|
1724
1736
|
}
|
1725
1737
|
} elsif ($id == 0x101) {
|
@@ -1733,8 +1745,8 @@ sub ProcessINSVTrailer($)
|
|
1733
1745
|
$p += 2 + $n;
|
1734
1746
|
}
|
1735
1747
|
}
|
1736
|
-
($
|
1737
|
-
$raf->Seek($
|
1748
|
+
($epos -= 6) + $trailerLen < 0 and last; # step back to previous record
|
1749
|
+
$raf->Seek($epos, 2) or last;
|
1738
1750
|
$raf->Read($buff, 6) == 6 or last;
|
1739
1751
|
}
|
1740
1752
|
SetByteOrder('MM');
|
@@ -545,8 +545,8 @@ official EXIF 2.32 specification.
|
|
545
545
|
0x8781 SharedData - no
|
546
546
|
0x8782 T88Options - no
|
547
547
|
0x87ac ImageLayer - no
|
548
|
-
0x87af GeoTiffDirectory IFD0
|
549
|
-
0x87b0 GeoTiffDoubleParams IFD0
|
548
|
+
0x87af GeoTiffDirectory IFD0 int16u[0.5]
|
549
|
+
0x87b0 GeoTiffDoubleParams IFD0 double[0.125]
|
550
550
|
0x87b1 GeoTiffAsciiParams IFD0 string
|
551
551
|
0x87be JBIGOptions - no
|
552
552
|
0x8822 ExposureProgram ExifIFD int16u
|
@@ -19,7 +19,7 @@ use strict;
|
|
19
19
|
use vars qw($VERSION $warnString);
|
20
20
|
use Image::ExifTool qw(:DataAccess :Utils);
|
21
21
|
|
22
|
-
$VERSION = '1.
|
22
|
+
$VERSION = '1.26';
|
23
23
|
|
24
24
|
sub WarnProc($) { $warnString = $_[0]; }
|
25
25
|
|
@@ -456,7 +456,14 @@ sub ProcessZIP($$)
|
|
456
456
|
my $cType = $zip->memberNamed('[Content_Types].xml');
|
457
457
|
if ($cType) {
|
458
458
|
($buff, $status) = $zip->contents($cType);
|
459
|
-
if (not $status and
|
459
|
+
if (not $status and (
|
460
|
+
# first look for the main document with the expected name
|
461
|
+
$buff =~ m{\sPartName\s*=\s*['"](?:/ppt/presentation.xml|/word/document.xml|/xl/workbook.xml)['"][^>]*\sContentType\s*=\s*(['"])([^"']+)\.main(\+xml)?\1} or
|
462
|
+
# then look for the main part
|
463
|
+
$buff =~ /<Override[^>]*\sPartName[^<]+\sContentType\s*=\s*(['"])([^"']+)\.main(\+xml)?\1/ or
|
464
|
+
# and if all else fails, use the default main
|
465
|
+
$buff =~ /ContentType\s*=\s*(['"])([^"']+)\.main(\+xml)?\1/))
|
466
|
+
{
|
460
467
|
$mime = $2;
|
461
468
|
}
|
462
469
|
}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: exiftool_vendored
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 11.
|
4
|
+
version: 11.70.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew McEachen
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2019-10-
|
12
|
+
date: 2019-10-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: exiftool
|