exiftool_vendored 11.69.0 → 11.70.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 +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
|