exiftool_vendored 12.37.0 → 12.38.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 +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) {
|