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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 76b6a0d2fdfef75ff151b28b383281cd0e5cbff7b324c7529b5972eea00fa2ab
4
- data.tar.gz: 15f2d5ff22bb9eebdbe7e843d61c8e60ae3cc17d50d212c59e05411baa221937
3
+ metadata.gz: 11f1787f2c127a865c214cd1180708242a072c13219978b737518a30ff123c88
4
+ data.tar.gz: 85f5ca776ddb9b2c60171ef608fe574a5eb94a5b723c5ab62ed50046b4f051d8
5
5
  SHA512:
6
- metadata.gz: '05955adc090e482158e1c5e55f4aa6205434c9433e8b5369c45f4c030f59088e8efe5e91df54cf6cd44f973ad845e8436a958948ca2baa25bc1aea371a311d74'
7
- data.tar.gz: 7a6c12e5f45dcd7efed082469de08ddb6e4eb21596f73f3c6abde5f6faf5318be5fe53e0f6aa6a88391f9e088d68c06682e042cd94f3f4f08656a6a2d76fa404
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
@@ -47,5 +47,5 @@
47
47
  }
48
48
  },
49
49
  "release_status" : "stable",
50
- "version" : "12.37"
50
+ "version" : "12.38"
51
51
  }
data/bin/META.yml CHANGED
@@ -28,4 +28,4 @@ recommends:
28
28
  Time::HiRes: 0
29
29
  requires:
30
30
  perl: 5.004
31
- version: 12.37
31
+ version: 12.38
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.37.tar.gz | tar -xf -
111
- cd Image-ExifTool-12.37
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.37';
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.37 --
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, $g, %s or %o.)
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 => 'one value for some models...',
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 for others',
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.02';
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
- PrintConv => {
1933
- 1 => 'Lossy (type 1)', # (older models)
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
- 5771 => {
8044
- Name => 'MovieDiffrationCompensation',
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.02';
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,31})\0([^\0]{1,31})\0(.{4})/sg) {
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) {