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 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) {