exiftool_vendored 12.37.0 → 12.38.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/Changes +11 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +6 -4
- data/bin/lib/Image/ExifTool/CanonCustom.pm +12 -2
- data/bin/lib/Image/ExifTool/Nikon.pm +148 -15
- data/bin/lib/Image/ExifTool/OpenEXR.pm +4 -2
- data/bin/lib/Image/ExifTool/TagLookup.pm +4322 -4319
- data/bin/lib/Image/ExifTool/TagNames.pod +22 -2
- data/bin/lib/Image/ExifTool/XMP.pm +3 -3
- data/bin/lib/Image/ExifTool.pm +4 -3
- 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: 11f1787f2c127a865c214cd1180708242a072c13219978b737518a30ff123c88
|
4
|
+
data.tar.gz: 85f5ca776ddb9b2c60171ef608fe574a5eb94a5b723c5ab62ed50046b4f051d8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 526d5db616ff1f9b5f42fece2a56b670810b0a0865ebf7161ac55f5567dab893f137fef4226475776280b17272a8fde9689c06c3057517f417e5accaa925b39c
|
7
|
+
data.tar.gz: 2345cf3345e75e7fbace25c2293ffecdc503c5b744c85b794febccc24322aac3a8c2f052d07dd50b921cceca67ad9c197c5e4ce87eccea4efeb99ab200919f41
|
data/bin/Changes
CHANGED
@@ -7,6 +7,17 @@ RSS feed: https://exiftool.org/rss.xml
|
|
7
7
|
Note: The most recent production release is Version 12.30. (Other versions are
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
9
9
|
|
10
|
+
Dec. 20, 2021 - Version 12.38
|
11
|
+
|
12
|
+
- Decode a number of new tags for the Nikon Z9 (thanks Warren Hatch)
|
13
|
+
- Patched incorrect decoding of AEBShotCount for the Canon EOS 90D
|
14
|
+
- Patched EXR reader to support long tag names
|
15
|
+
- Patched security issue (thanks Joe Lothan)
|
16
|
+
- Fixed an incorrect tag ID for a new Nikon MakerNote tag (github #108)
|
17
|
+
- Fixed XMP-exif:GPSMeasureMode conversions to match EXIF
|
18
|
+
- Fixed problem where some namespaces may be undeclared in the -X output when
|
19
|
+
using the -struct option
|
20
|
+
|
10
21
|
Dec. 8, 2021 - Version 12.37
|
11
22
|
|
12
23
|
- Decode timed GPS from Vantrue S1 dashcam MP4 videos
|
data/bin/META.json
CHANGED
data/bin/META.yml
CHANGED
data/bin/README
CHANGED
@@ -107,8 +107,8 @@ your home directory, then you would type the following commands in a
|
|
107
107
|
terminal window to extract and run ExifTool:
|
108
108
|
|
109
109
|
cd ~/Desktop
|
110
|
-
gzip -dc Image-ExifTool-12.
|
111
|
-
cd Image-ExifTool-12.
|
110
|
+
gzip -dc Image-ExifTool-12.38.tar.gz | tar -xf -
|
111
|
+
cd Image-ExifTool-12.38
|
112
112
|
./exiftool t/images/ExifTool.jpg
|
113
113
|
|
114
114
|
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 = '12.
|
13
|
+
my $version = '12.38';
|
14
14
|
|
15
15
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
16
16
|
BEGIN {
|
@@ -1969,6 +1969,7 @@ sub GetImageInfo($$)
|
|
1969
1969
|
} else {
|
1970
1970
|
$pipe = qq{bzip2 -dc "$file" |};
|
1971
1971
|
}
|
1972
|
+
$$et{TRUST_PIPE} = 1;
|
1972
1973
|
}
|
1973
1974
|
}
|
1974
1975
|
# evaluate -if expression for conditional processing
|
@@ -2239,12 +2240,13 @@ sub GetImageInfo($$)
|
|
2239
2240
|
next unless defined $forcePrint;
|
2240
2241
|
$grp0 = $grp1 = 'Unknown';
|
2241
2242
|
}
|
2243
|
+
# add groups from structure fields
|
2244
|
+
AddGroups($$info{$tag}, $grp0, \%groups, \@groups) if ref $$info{$tag};
|
2242
2245
|
next if $groups{$grp1};
|
2243
2246
|
# include family 0 and 1 groups in URI except for internal tags
|
2244
2247
|
# (this will put internal tags in the "XML" group on readback)
|
2245
2248
|
$groups{$grp1} = $grp0;
|
2246
2249
|
push @groups, $grp1;
|
2247
|
-
AddGroups($$info{$tag}, $grp0, \%groups, \@groups) if ref $$info{$tag};
|
2248
2250
|
}
|
2249
2251
|
foreach $grp1 (@groups) {
|
2250
2252
|
my $grp = $groups{$grp1};
|
@@ -5434,7 +5436,7 @@ with this command:
|
|
5434
5436
|
|
5435
5437
|
produces output like this:
|
5436
5438
|
|
5437
|
-
-- Generated by ExifTool 12.
|
5439
|
+
-- Generated by ExifTool 12.38 --
|
5438
5440
|
File: a.jpg - 2003:10:31 15:44:19
|
5439
5441
|
(f/5.6, 1/60s, ISO 100)
|
5440
5442
|
File: b.jpg - 2006:05:23 11:57:38
|
@@ -5716,7 +5718,7 @@ example, the following pairs of commands give the same result:
|
|
5716
5718
|
4) Adding the B<-v> option to B<-W> sends a list of the tags and output file
|
5717
5719
|
names to the console instead of giving a verbose dump of the entire file.
|
5718
5720
|
(Unless appending all output to one file for each source file by using
|
5719
|
-
B<-W+> with an output file I<FMT> that does not contain %t,
|
5721
|
+
B<-W+> with an output file I<FMT> that does not contain %t, %g, %s or %o.)
|
5720
5722
|
|
5721
5723
|
5) Individual list items are stored in separate files when B<-W> is combined
|
5722
5724
|
with B<-b>, but note that for separate files to be created %c or %C must be
|
@@ -1290,9 +1290,19 @@ my %convPFn = ( PrintConv => \&ConvertPfn, PrintConvInv => \&ConvertPfnInv );
|
|
1290
1290
|
},
|
1291
1291
|
},
|
1292
1292
|
0x0106 => [{
|
1293
|
+
Name => 'AEBShotCount',
|
1294
|
+
Condition => '$$self{Model} =~ /\b90D\b/',
|
1295
|
+
Notes => 'EOS 90D', # (and who knows what others?)
|
1296
|
+
PrintConv => {
|
1297
|
+
2 => '2 shots',
|
1298
|
+
3 => '3 shots',
|
1299
|
+
5 => '5 shots',
|
1300
|
+
7 => '7 shots',
|
1301
|
+
},
|
1302
|
+
},{
|
1293
1303
|
Name => 'AEBShotCount',
|
1294
1304
|
Condition => '$count == 1',
|
1295
|
-
Notes => '
|
1305
|
+
Notes => 'other models storing a single value',
|
1296
1306
|
PrintConv => {
|
1297
1307
|
0 => '3 shots',
|
1298
1308
|
1 => '2 shots',
|
@@ -1302,7 +1312,7 @@ my %convPFn = ( PrintConv => \&ConvertPfn, PrintConvInv => \&ConvertPfnInv );
|
|
1302
1312
|
},{
|
1303
1313
|
Name => 'AEBShotCount',
|
1304
1314
|
Count => 2,
|
1305
|
-
Notes => 'two values
|
1315
|
+
Notes => 'models storing two values',
|
1306
1316
|
PrintConv => {
|
1307
1317
|
'3 0' => '3 shots',
|
1308
1318
|
'2 1' => '2 shots',
|
@@ -62,7 +62,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
62
62
|
use Image::ExifTool::Exif;
|
63
63
|
use Image::ExifTool::GPS;
|
64
64
|
|
65
|
-
$VERSION = '4.
|
65
|
+
$VERSION = '4.03';
|
66
66
|
|
67
67
|
sub LensIDConv($$$);
|
68
68
|
sub ProcessNikonAVI($$$);
|
@@ -1067,6 +1067,21 @@ my %flashGroupOptionsMode = (
|
|
1067
1067
|
3 => 'Off',
|
1068
1068
|
);
|
1069
1069
|
|
1070
|
+
my %nefCompression = ( #28 relocated to MakerNotes_0x51 at offset x'0a (Z9)
|
1071
|
+
1 => 'Lossy (type 1)', # (older models)
|
1072
|
+
2 => 'Uncompressed', #JD - D100 (even though TIFF compression is set!)
|
1073
|
+
3 => 'Lossless',
|
1074
|
+
4 => 'Lossy (type 2)',
|
1075
|
+
5 => 'Striped packed 12 bits', #IB
|
1076
|
+
6 => 'Uncompressed (reduced to 12 bit)', #IB
|
1077
|
+
7 => 'Unpacked 12 bits', #IB (padded to 16)
|
1078
|
+
8 => 'Small', #IB
|
1079
|
+
9 => 'Packed 12 bits', #IB (2 pixels in 3 bytes)
|
1080
|
+
10 => 'Packed 14 bits', #28 (4 pixels in 7 bytes, eg. D6 uncompressed 14 bit)
|
1081
|
+
13 => 'High Efficiency', #28
|
1082
|
+
14 => 'High Efficiency*', #28
|
1083
|
+
);
|
1084
|
+
|
1070
1085
|
my %noYes = ( 0 => 'No' , 1 => 'Yes', );
|
1071
1086
|
my %offOn = ( 0 => 'Off', 1 => 'On' );
|
1072
1087
|
my %onOff = ( 0 => 'On', 1 => 'Off' );
|
@@ -1476,6 +1491,14 @@ my %binaryDataAttrs = (
|
|
1476
1491
|
Name => 'ColorTemperatureAuto',
|
1477
1492
|
Writable => 'int16u',
|
1478
1493
|
},
|
1494
|
+
0x0051 => { #28 (Z9)
|
1495
|
+
Name => 'MakerNotes0x51',
|
1496
|
+
Writable => 'undef',
|
1497
|
+
Hidden => 1,
|
1498
|
+
Permanent => 0,
|
1499
|
+
Flags => [ 'Binary', 'Protected' ],
|
1500
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::MakerNotes0x51' },
|
1501
|
+
},
|
1479
1502
|
#0x0053 #28 possibly a secondary DistortionControl block (in addition to DistortInfo)? Certainly offset 0x04 within block contains tag AutoDistortionControl for Z72 and D6 (1=>On; 2=> Off)
|
1480
1503
|
#0x005e #28 possibly DiffractionCompensation block? Certainly offset 0x04 within block contains tag DiffractionCompensation
|
1481
1504
|
0x0080 => { Name => 'ImageAdjustment', Writable => 'string' },
|
@@ -1900,6 +1923,16 @@ my %binaryDataAttrs = (
|
|
1900
1923
|
ByteOrder => 'LittleEndian',
|
1901
1924
|
},
|
1902
1925
|
},
|
1926
|
+
{ # (Z9 firmware version 1.00 ref 28)
|
1927
|
+
Condition => '$$valPt =~ /^0805/',
|
1928
|
+
Name => 'ShotInfoZ9',
|
1929
|
+
SubDirectory => {
|
1930
|
+
TagTable => 'Image::ExifTool::Nikon::ShotInfoZ9',
|
1931
|
+
DecryptStart => 4,
|
1932
|
+
DecryptLen => 0xeb5b + 1050, # thru decoded parts of Offset27
|
1933
|
+
ByteOrder => 'LittleEndian',
|
1934
|
+
},
|
1935
|
+
},
|
1903
1936
|
{ # D7100=0227, Z6/Z7=0800
|
1904
1937
|
Condition => '$$valPt =~ /^0[28]/',
|
1905
1938
|
Name => 'ShotInfo02xx',
|
@@ -1929,18 +1962,8 @@ my %binaryDataAttrs = (
|
|
1929
1962
|
0x0093 => { #21
|
1930
1963
|
Name => 'NEFCompression',
|
1931
1964
|
Writable => 'int16u',
|
1932
|
-
|
1933
|
-
|
1934
|
-
2 => 'Uncompressed', #JD - D100 (even though TIFF compression is set!)
|
1935
|
-
3 => 'Lossless',
|
1936
|
-
4 => 'Lossy (type 2)',
|
1937
|
-
5 => 'Striped packed 12 bits', #IB
|
1938
|
-
6 => 'Uncompressed (reduced to 12 bit)', #IB
|
1939
|
-
7 => 'Unpacked 12 bits', #IB (padded to 16)
|
1940
|
-
8 => 'Small', #IB
|
1941
|
-
9 => 'Packed 12 bits', #IB (2 pixels in 3 bytes)
|
1942
|
-
10 => 'Packed 14 bits', #28 (4 pixels in 7 bytes, eg. D6 uncompressed 14 bit)
|
1943
|
-
},
|
1965
|
+
SeparateTable => 'NEFCompression',
|
1966
|
+
PrintConv => \%nefCompression,
|
1944
1967
|
},
|
1945
1968
|
0x0094 => { Name => 'SaturationAdj', Writable => 'int16s' },
|
1946
1969
|
0x0095 => { Name => 'NoiseReduction', Writable => 'string' }, # ("Off" or "FPNR"=long exposure NR)
|
@@ -7756,6 +7779,97 @@ my %nikonFocalConversions = (
|
|
7756
7779
|
# note: DecryptLen currently set to 0xcea6 + 1050
|
7757
7780
|
);
|
7758
7781
|
|
7782
|
+
# shot information for the Z9 firmware 1.00 (encrypted) - ref 28
|
7783
|
+
%Image::ExifTool::Nikon::ShotInfoZ9 = (
|
7784
|
+
PROCESS_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted,
|
7785
|
+
WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted,
|
7786
|
+
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
7787
|
+
VARS => { ID_LABEL => 'Index' },
|
7788
|
+
DATAMEMBER => [ 0x04, 0x0e, 0x18, 0x84, 0xeaea],
|
7789
|
+
WRITABLE => 1,
|
7790
|
+
FIRST_ENTRY => 0,
|
7791
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
7792
|
+
NOTES => 'These tags are extracted from encrypted data in images from the Z9.',
|
7793
|
+
0x00 => {
|
7794
|
+
Name => 'ShotInfoVersion',
|
7795
|
+
Format => 'string[4]',
|
7796
|
+
Writable => 0,
|
7797
|
+
},
|
7798
|
+
0x04 => {
|
7799
|
+
Name => 'FirmwareVersion',
|
7800
|
+
DataMember => 'FirmwareVersion',
|
7801
|
+
Format => 'string[8]',
|
7802
|
+
Writable => 0,
|
7803
|
+
RawConv => '$$self{FirmwareVersion} = $val',
|
7804
|
+
},
|
7805
|
+
0x0e => {
|
7806
|
+
Name => 'FirmwareVersion2',
|
7807
|
+
Format => 'string[8]',
|
7808
|
+
Writable => 0,
|
7809
|
+
RawConv => '$$self{FirmwareVersion2} = $val',
|
7810
|
+
Hidden => 1,
|
7811
|
+
},
|
7812
|
+
0x18 => {
|
7813
|
+
Name => 'FirmwareVersion3',
|
7814
|
+
Format => 'string[8]',
|
7815
|
+
Writable => 0,
|
7816
|
+
RawConv => '$$self{FirmwareVersion3} = $val',
|
7817
|
+
Hidden => 1,
|
7818
|
+
},
|
7819
|
+
0x24 => {
|
7820
|
+
Name => 'NumberOffsets', # number of entries in offset table. offsets are from start of ShotInfo data.
|
7821
|
+
DataMember => 'NumberOffsets',
|
7822
|
+
Format => 'int32u',
|
7823
|
+
Writable => 0,
|
7824
|
+
Hidden => 1,
|
7825
|
+
},
|
7826
|
+
0x84 => {
|
7827
|
+
Name => 'OrientationOffset', #offset24 - length 108
|
7828
|
+
DataMember => 'OrientationOffset',
|
7829
|
+
Format => 'int32u',
|
7830
|
+
Writable => 0,
|
7831
|
+
Hidden => 1,
|
7832
|
+
RawConv => '$$self{OrientationOffset} = $val || 0x10000000; undef', # (ignore if 0)
|
7833
|
+
},
|
7834
|
+
### 0xce32 - OrientationInfo start (Z9 firmware 1.00)
|
7835
|
+
0xeaea => {
|
7836
|
+
Name => 'Hook1',
|
7837
|
+
Hidden => 1,
|
7838
|
+
RawConv => 'undef',
|
7839
|
+
# account for variable location of OrientationInfo data
|
7840
|
+
Hook => '$varSize = $$self{OrientationOffset} - 0xeaeb',
|
7841
|
+
},
|
7842
|
+
|
7843
|
+
0xeaeb => {
|
7844
|
+
Name => 'RollAngle',
|
7845
|
+
Format => 'fixed32u',
|
7846
|
+
Notes => 'converted to degrees of clockwise camera roll',
|
7847
|
+
ValueConv => '$val <= 180 ? $val : $val - 360',
|
7848
|
+
ValueConvInv => '$val >= 0 ? $val : $val + 360',
|
7849
|
+
PrintConv => 'sprintf("%.1f", $val)',
|
7850
|
+
PrintConvInv => '$val',
|
7851
|
+
},
|
7852
|
+
0xeaef => {
|
7853
|
+
Name => 'PitchAngle',
|
7854
|
+
Format => 'fixed32u',
|
7855
|
+
Notes => 'converted to degrees of upward camera tilt',
|
7856
|
+
ValueConv => '$val <= 180 ? $val : $val - 360',
|
7857
|
+
ValueConvInv => '$val >= 0 ? $val : $val + 360',
|
7858
|
+
PrintConv => 'sprintf("%.1f", $val)',
|
7859
|
+
PrintConvInv => '$val',
|
7860
|
+
},
|
7861
|
+
0xeaf3 => {
|
7862
|
+
Name => 'YawAngle',
|
7863
|
+
Format => 'fixed32u',
|
7864
|
+
Notes => 'the camera yaw angle when shooting in portrait orientation',
|
7865
|
+
ValueConv => '$val <= 180 ? $val : $val - 360',
|
7866
|
+
ValueConvInv => '$val >= 0 ? $val : $val + 360',
|
7867
|
+
PrintConv => 'sprintf("%.1f", $val)',
|
7868
|
+
PrintConvInv => '$val',
|
7869
|
+
},
|
7870
|
+
# note: DecryptLen currently set to 0xeb5b + 1050
|
7871
|
+
);
|
7872
|
+
|
7759
7873
|
%Image::ExifTool::Nikon::ZMenuSettings = (
|
7760
7874
|
%binaryDataAttrs,
|
7761
7875
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
@@ -8040,8 +8154,8 @@ my %nikonFocalConversions = (
|
|
8040
8154
|
Unknown => 1,
|
8041
8155
|
PrintConv => \%noYes
|
8042
8156
|
},
|
8043
|
-
|
8044
|
-
Name => '
|
8157
|
+
577 => {
|
8158
|
+
Name => 'MovieDiffractionCompensation',
|
8045
8159
|
Unknown => 1,
|
8046
8160
|
PrintConv => \%offOn
|
8047
8161
|
},
|
@@ -9466,6 +9580,25 @@ my %nikonFocalConversions = (
|
|
9466
9580
|
},
|
9467
9581
|
);
|
9468
9582
|
|
9583
|
+
# MakerNotes0x51 - compression info for Z9
|
9584
|
+
%Image::ExifTool::Nikon::MakerNotes0x51 = (
|
9585
|
+
%binaryDataAttrs,
|
9586
|
+
DATAMEMBER => [ 0 ],
|
9587
|
+
GROUPS => { 0 => 'MakerNotes' },
|
9588
|
+
0 => {
|
9589
|
+
Name => 'FirmwareVersion',
|
9590
|
+
Format => 'string[8]',
|
9591
|
+
Writable => 0,
|
9592
|
+
RawConv => '$$self{FirmwareVersion} = $val',
|
9593
|
+
},
|
9594
|
+
10 => {
|
9595
|
+
Name => 'NEFCompression',
|
9596
|
+
Writable => 'int16u',
|
9597
|
+
SeparateTable => 'NEFCompression',
|
9598
|
+
PrintConv => \%nefCompression,
|
9599
|
+
},
|
9600
|
+
);
|
9601
|
+
|
9469
9602
|
# extra info found in IFD0 of NEF files (ref PH, Z6/Z7)
|
9470
9603
|
%Image::ExifTool::Nikon::NEFInfo = (
|
9471
9604
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
@@ -15,7 +15,7 @@ use vars qw($VERSION);
|
|
15
15
|
use Image::ExifTool qw(:DataAccess :Utils);
|
16
16
|
use Image::ExifTool::GPS;
|
17
17
|
|
18
|
-
$VERSION = '1.
|
18
|
+
$VERSION = '1.03';
|
19
19
|
|
20
20
|
# supported EXR value format types (other types are extracted as undef binary data)
|
21
21
|
my %formatType = (
|
@@ -172,12 +172,13 @@ sub ProcessEXR($$)
|
|
172
172
|
my $ver = unpack('x4V', $buff);
|
173
173
|
$et->HandleTag($tagTablePtr, '_ver', $ver & 0xff);
|
174
174
|
$et->HandleTag($tagTablePtr, '_lay', $ver & 0x200);
|
175
|
+
my $maxLen = ($ver & 0x400) ? 255 : 31;
|
175
176
|
|
176
177
|
# extract attributes
|
177
178
|
for (;;) {
|
178
179
|
$raf->Read($buff, 68) or last;
|
179
180
|
last if $buff =~ /^\0/;
|
180
|
-
unless ($buff =~ /^([^\0]{1
|
181
|
+
unless ($buff =~ /^([^\0]{1,$maxLen})\0([^\0]{1,$maxLen})\0(.{4})/sg) {
|
181
182
|
$et->Warn('EXR format error');
|
182
183
|
last;
|
183
184
|
}
|
@@ -189,6 +190,7 @@ sub ProcessEXR($$)
|
|
189
190
|
my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag);
|
190
191
|
unless ($tagInfo) {
|
191
192
|
my $name = ucfirst $tag;
|
193
|
+
$name =~ s/([^a-zA-Z])([a-z])/$1\U$2/g; # capitalize first letter of each word
|
192
194
|
$name =~ tr/-_a-zA-Z0-9//dc;
|
193
195
|
if (length $name <= 1) {
|
194
196
|
if (length $name) {
|