exiftool_vendored 12.06.0 → 12.12.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.

Potentially problematic release.


This version of exiftool_vendored might be problematic. Click here for more details.

Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +96 -2
  3. data/bin/MANIFEST +5 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +43 -42
  7. data/bin/exiftool +156 -82
  8. data/bin/lib/Image/ExifTool.pm +22 -13
  9. data/bin/lib/Image/ExifTool.pod +59 -50
  10. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +11 -5
  11. data/bin/lib/Image/ExifTool/Canon.pm +202 -13
  12. data/bin/lib/Image/ExifTool/DarwinCore.pm +9 -3
  13. data/bin/lib/Image/ExifTool/EXE.pm +8 -5
  14. data/bin/lib/Image/ExifTool/GIF.pm +2 -2
  15. data/bin/lib/Image/ExifTool/Geotag.pm +30 -11
  16. data/bin/lib/Image/ExifTool/GoPro.pm +47 -30
  17. data/bin/lib/Image/ExifTool/IPTC.pm +1 -0
  18. data/bin/lib/Image/ExifTool/Import.pm +14 -11
  19. data/bin/lib/Image/ExifTool/JSON.pm +27 -4
  20. data/bin/lib/Image/ExifTool/MPF.pm +2 -2
  21. data/bin/lib/Image/ExifTool/MacOS.pm +153 -37
  22. data/bin/lib/Image/ExifTool/Matroska.pm +3 -1
  23. data/bin/lib/Image/ExifTool/Minolta.pm +5 -1
  24. data/bin/lib/Image/ExifTool/Nikon.pm +11 -3
  25. data/bin/lib/Image/ExifTool/Olympus.pm +8 -1
  26. data/bin/lib/Image/ExifTool/Panasonic.pm +12 -12
  27. data/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -0
  28. data/bin/lib/Image/ExifTool/Pentax.pm +10 -3
  29. data/bin/lib/Image/ExifTool/QuickTime.pm +51 -16
  30. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +68 -45
  31. data/bin/lib/Image/ExifTool/README +5 -2
  32. data/bin/lib/Image/ExifTool/RSRC.pm +17 -11
  33. data/bin/lib/Image/ExifTool/Radiance.pm +7 -2
  34. data/bin/lib/Image/ExifTool/Sony.pm +56 -35
  35. data/bin/lib/Image/ExifTool/Stim.pm +2 -2
  36. data/bin/lib/Image/ExifTool/TagLookup.pm +5756 -5710
  37. data/bin/lib/Image/ExifTool/TagNames.pod +248 -49
  38. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +7 -6
  39. data/bin/lib/Image/ExifTool/Writer.pl +5 -3
  40. data/bin/lib/Image/ExifTool/XMP.pm +63 -18
  41. data/bin/lib/Image/ExifTool/XMP2.pl +1 -0
  42. data/bin/perl-Image-ExifTool.spec +42 -41
  43. data/lib/exiftool_vendored/version.rb +1 -1
  44. metadata +7 -7
@@ -14,16 +14,33 @@ use vars qw($VERSION);
14
14
  use Image::ExifTool qw(:DataAccess :Utils);
15
15
  use Image::ExifTool::Import;
16
16
 
17
- $VERSION = '1.01';
17
+ $VERSION = '1.02';
18
18
 
19
19
  sub ProcessTag($$$$%);
20
20
 
21
21
  %Image::ExifTool::JSON::Main = (
22
22
  GROUPS => { 0 => 'JSON', 1 => 'JSON', 2 => 'Other' },
23
+ VARS => { NO_ID => 1 },
23
24
  NOTES => q{
24
- No JSON tags have been pre-defined, but ExifTool will read any existing
25
- tags from basic JSON-formatted files.
25
+ Other than a few tags in the table below, JSON tags have not been
26
+ pre-defined. However, ExifTool will read any existing tags from basic
27
+ JSON-formatted files.
26
28
  },
29
+ # ON1 settings tags
30
+ ON1_SettingsData => {
31
+ RawConv => q{
32
+ require Image::ExifTool::XMP;
33
+ $val = Image::ExifTool::XMP::DecodeBase64($val);
34
+ },
35
+ SubDirectory => { TagTable => 'Image::ExifTool::PLIST::Main' },
36
+ },
37
+ ON1_SettingsMetadataCreated => { Groups => { 2 => 'Time' } },
38
+ ON1_SettingsMetadataModified => { Groups => { 2 => 'Time' } },
39
+ ON1_SettingsMetadataName => { },
40
+ ON1_SettingsMetadataPluginID => { },
41
+ ON1_SettingsMetadataTimestamp => { Groups => { 2 => 'Time' } },
42
+ ON1_SettingsMetadataUsage => { },
43
+ ON1_SettingsMetadataVisibleToUser=>{ },
27
44
  );
28
45
 
29
46
  #------------------------------------------------------------------------------
@@ -33,12 +50,18 @@ sub FoundTag($$$$%)
33
50
  {
34
51
  my ($et, $tagTablePtr, $tag, $val, %flags) = @_;
35
52
 
53
+ # special case to reformat ON1 tag names
54
+ if ($tag =~ s/^settings\w{8}-\w{4}-\w{4}-\w{4}-\w{12}(Data|Metadata.+)$/ON1_Settings$1/) {
55
+ $et->OverrideFileType('ONP','application/on1') if $$et{FILE_TYPE} eq 'JSON';
56
+ }
57
+
36
58
  # avoid conflict with special table entries
37
59
  $tag .= '!' if $Image::ExifTool::specialTags{$tag};
38
60
 
39
61
  AddTagToTable($tagTablePtr, $tag, {
40
62
  Name => Image::ExifTool::MakeTagName($tag),
41
63
  %flags,
64
+ Temporary => 1,
42
65
  }) unless $$tagTablePtr{$tag};
43
66
 
44
67
  $et->HandleTag($tagTablePtr, $tag, $val);
@@ -94,7 +117,7 @@ sub ProcessJSON($$)
94
117
 
95
118
  # remove any old tag definitions in case they change flags
96
119
  foreach $key (TagTableKeys($tagTablePtr)) {
97
- delete $$tagTablePtr{$key};
120
+ delete $$tagTablePtr{$key} if $$tagTablePtr{$key}{Temporary};
98
121
  }
99
122
 
100
123
  # extract tags from JSON database
@@ -28,8 +28,8 @@ sub ProcessMPImageList($$$);
28
28
  from this segment is stored as a JPEG trailer. The MPF tags are not
29
29
  writable, however the MPF segment may be deleted as a group (with "MPF:All")
30
30
  but then the JPEG trailer should also be deleted (with "Trailer:All"). See
31
- L<http://www.cipa.jp/std/documents/e/DC-007_E.pdf> for the official
32
- specification.
31
+ L<https://web.archive.org/web/20190713230858/http://www.cipa.jp/std/documents/e/DC-007_E.pdf>
32
+ for the official specification.
33
33
  },
34
34
  0xb000 => 'MPFVersion',
35
35
  0xb001 => 'NumberOfImages',
@@ -4,6 +4,7 @@
4
4
  # Description: Read/write MacOS system tags
5
5
  #
6
6
  # Revisions: 2017/03/01 - P. Harvey Created
7
+ # 2020/10/13 - PH Added ability to read MacOS "._" files
7
8
  #------------------------------------------------------------------------------
8
9
 
9
10
  package Image::ExifTool::MacOS;
@@ -11,15 +12,38 @@ use strict;
11
12
  use vars qw($VERSION);
12
13
  use Image::ExifTool qw(:DataAccess :Utils);
13
14
 
14
- $VERSION = '1.09';
15
+ $VERSION = '1.11';
15
16
 
16
17
  sub MDItemLocalTime($);
18
+ sub ProcessATTR($$$);
17
19
 
18
20
  my %mdDateInfo = (
19
21
  ValueConv => \&MDItemLocalTime,
20
22
  PrintConv => '$self->ConvertDateTime($val)',
21
23
  );
22
24
 
25
+ # Information decoded from Mac OS sidecar files
26
+ %Image::ExifTool::MacOS::Main = (
27
+ GROUPS => { 0 => 'File', 1 => 'MacOS' },
28
+ NOTES => q{
29
+ Note that on some filesystems, MacOS creates sidecar files with names that
30
+ begin with "._". ExifTool will read these files if specified, and extract
31
+ the information listed in the following table without the need for extra
32
+ options, but these files are not writable directly.
33
+ },
34
+ 2 => {
35
+ Name => 'RSRC',
36
+ SubDirectory => { TagTable => 'Image::ExifTool::RSRC::Main' },
37
+ },
38
+ 9 => {
39
+ Name => 'ATTR',
40
+ SubDirectory => {
41
+ TagTable => 'Image::ExifTool::MacOS::XAttr',
42
+ ProcessProc => \&ProcessATTR,
43
+ },
44
+ },
45
+ );
46
+
23
47
  # "mdls" tags (ref PH)
24
48
  %Image::ExifTool::MacOS::MDItem = (
25
49
  WRITE_PROC => \&Image::ExifTool::DummyWriteProc,
@@ -221,6 +245,8 @@ my %mdDateInfo = (
221
245
  XAttr tags are extracted using the "xattr" utility. They are extracted if
222
246
  any "XAttr*" tag or the MacOS group is specifically requested, or by setting
223
247
  the L<XAttrTags|../ExifTool.html#XAttrTags> API option to 1 or the L<RequestAll|../ExifTool.html#RequestAll> API option to 2 or higher.
248
+ And they extracted by default from MacOS "._" files when reading
249
+ these files directly.
224
250
  },
225
251
  'com.apple.FinderInfo' => {
226
252
  Name => 'XAttrFinderInfo',
@@ -486,8 +512,50 @@ sub ExtractMDItemTags($$)
486
512
  $$et{INDENT} =~ s/\| $//;
487
513
  }
488
514
 
515
+
516
+ #------------------------------------------------------------------------------
517
+ # Read MacOS XAttr value
518
+ # Inputs: 0) ExifTool object ref, 1) file name
519
+ sub ReadXAttrValue($$$$)
520
+ {
521
+ my ($et, $tagTablePtr, $tag, $val) = @_;
522
+ # add to our table if necessary
523
+ unless ($$tagTablePtr{$tag}) {
524
+ my $name;
525
+ # generate tag name from attribute name
526
+ if ($tag =~ /^com\.apple\.(.*)$/) {
527
+ ($name = $1) =~ s/^metadata:_?k//;
528
+ $name =~ s/^metadata:(com_)?//;
529
+ } else {
530
+ $name = $tag;
531
+ }
532
+ $name =~ s/[.:_]([a-z])/\U$1/g;
533
+ $name = 'XAttr' . ucfirst $name;
534
+ my %tagInfo = ( Name => $name );
535
+ $tagInfo{Groups} = { 2 => 'Time' } if $tag=~/Date$/;
536
+ $et->VPrint(0, " [adding $tag]\n");
537
+ AddTagToTable($tagTablePtr, $tag, \%tagInfo);
538
+ }
539
+ if ($val =~ /^bplist0/) {
540
+ my %dirInfo = ( DataPt => \$val );
541
+ require Image::ExifTool::PLIST;
542
+ if (Image::ExifTool::PLIST::ProcessBinaryPLIST($et, \%dirInfo, $tagTablePtr)) {
543
+ return undef if ref $dirInfo{Value} eq 'HASH';
544
+ $val = $dirInfo{Value}
545
+ } else {
546
+ $et->Warn("Error decoding $$tagTablePtr{$tag}{Name}");
547
+ return undef;
548
+ }
549
+ }
550
+ if (not ref $val and ($val =~ /\0/ or length($val) > 200) or $tag eq 'XAttrMDLabel') {
551
+ my $buff = $val;
552
+ $val = \$buff;
553
+ }
554
+ return $val;
555
+ }
556
+
489
557
  #------------------------------------------------------------------------------
490
- # Extract MacOS extended attribute tags
558
+ # Read MacOS extended attribute tags using 'xattr' utility
491
559
  # Inputs: 0) ExifTool object ref, 1) file name
492
560
  sub ExtractXAttrTags($$)
493
561
  {
@@ -517,39 +585,8 @@ sub ExtractXAttrTags($$)
517
585
  $val .= pack('H*', $_);
518
586
  next;
519
587
  } elsif ($tag and defined $val) {
520
- # add to our table if necessary
521
- unless ($$tagTablePtr{$tag}) {
522
- my $name;
523
- # generate tag name from attribute name
524
- if ($tag =~ /^com\.apple\.(.*)$/) {
525
- ($name = $1) =~ s/^metadata:_?k//;
526
- $name =~ s/^metadata:(com_)?//;
527
- } else {
528
- $name = $tag;
529
- }
530
- $name =~ s/[.:_]([a-z])/\U$1/g;
531
- $name = 'XAttr' . ucfirst $name;
532
- my %tagInfo = ( Name => $name );
533
- $tagInfo{Groups} = { 2 => 'Time' } if $tag=~/Date$/;
534
- $et->VPrint(0, " [adding $tag]\n");
535
- AddTagToTable($tagTablePtr, $tag, \%tagInfo);
536
- }
537
- if ($val =~ /^bplist0/) {
538
- my %dirInfo = ( DataPt => \$val );
539
- require Image::ExifTool::PLIST;
540
- if (Image::ExifTool::PLIST::ProcessBinaryPLIST($et, \%dirInfo, $tagTablePtr)) {
541
- next if ref $dirInfo{Value} eq 'HASH';
542
- $val = $dirInfo{Value}
543
- } else {
544
- $et->Warn("Error decoding $$tagTablePtr{$tag}{Name}");
545
- next;
546
- }
547
- }
548
- if (not ref $val and ($val =~ /\0/ or length($val) > 200) or $tag eq 'XAttrMDLabel') {
549
- my $buff = $val;
550
- $val = \$buff;
551
- }
552
- $et->HandleTag($tagTablePtr, $tag, $val);
588
+ $val = ReadXAttrValue($et, $tagTablePtr, $tag, $val);
589
+ $et->HandleTag($tagTablePtr, $tag, $val) if defined $val;
553
590
  undef $tag;
554
591
  undef $val;
555
592
  }
@@ -584,6 +621,84 @@ sub GetFileCreateDate($$)
584
621
  delete $$et{SET_GROUP1};
585
622
  }
586
623
 
624
+ #------------------------------------------------------------------------------
625
+ # Read ATTR metadata from "._" file
626
+ # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
627
+ # Return: 1 on success
628
+ # (ref https://www.swiftforensics.com/2018/11/the-dot-underscore-file-format.html)
629
+ sub ProcessATTR($$$)
630
+ {
631
+ my ($et, $dirInfo, $tagTablePtr) = @_;
632
+ my $dataPt = $$dirInfo{DataPt};
633
+ my $dataPos = $$dirInfo{DataPos};
634
+ my $dataLen = length $$dataPt;
635
+
636
+ $dataLen >= 58 and $$dataPt =~ /^.{34}ATTR/s or $et->Warn('Invalid ATTR header'), return 0;
637
+ my $entries = Get32u($dataPt, 66);
638
+ $et->VerboseDir('ATTR', $entries);
639
+ # (Note: The RAF is not in $dirInfo because it would break RSRC reading --
640
+ # the RSCR block uses relative offsets, while the ATTR block uses absolute! grrr!)
641
+ my $raf = $$et{RAF};
642
+ my $pos = 70; # first entry is after ATTR header
643
+ my $i;
644
+ for ($i=0; $i<$entries; ++$i) {
645
+ $pos + 12 > $dataLen and $et->Warn('Truncated ATTR entry'), last;
646
+ my $off = Get32u($dataPt, $pos);
647
+ my $len = Get32u($dataPt, $pos + 4);
648
+ my $n = Get8u($dataPt, $pos + 10); # number of characters in tag name
649
+ $pos + 11 + $n > $dataLen and $et->Warn('Truncated ATTR name'), last;
650
+ $off -= $dataPos; # convert to relative offset (grrr!)
651
+ $off < 0 or $off > $dataLen and $et->Warn('Invalid ATTR offset'), last;
652
+ my $tag = substr($$dataPt, $pos + 11, $n);
653
+ $tag =~ s/\0+$//; # remove null terminator
654
+ # remove random ID after kMDLabel in tag ID
655
+ $tag =~ s/^com.apple.metadata:kMDLabel_.*/com.apple.metadata:kMDLabel/s;
656
+ $off + $len > $dataLen and $et->Warn('Truncated ATTR value'), last;
657
+ my $val = ReadXAttrValue($et, $tagTablePtr, $tag, substr($$dataPt, $off, $len));
658
+ $et->HandleTag($tagTablePtr, $tag, $val,
659
+ DataPt => $dataPt,
660
+ DataPos => $dataPos,
661
+ Start => $off,
662
+ Size => $len,
663
+ ) if defined $val;
664
+ $pos += (11 + $n + 3) & -4; # step to next entry (on even 4-byte boundary)
665
+ }
666
+ return 1;
667
+ }
668
+
669
+ #------------------------------------------------------------------------------
670
+ # Read information from a MacOS "._" sidecar file
671
+ # Inputs: 0) ExifTool ref, 1) dirInfo ref
672
+ # Returns: 1 on success, 0 if this wasn't a valid "._" file
673
+ # (ref https://www.swiftforensics.com/2018/11/the-dot-underscore-file-format.html)
674
+ sub ProcessMacOS($$)
675
+ {
676
+ my ($et, $dirInfo) = @_;
677
+ my $raf = $$dirInfo{RAF};
678
+ my ($hdr, $buff, $i);
679
+
680
+ return 0 unless $raf->Read($hdr, 26) == 26 and $hdr =~ /^\0\x05\x16\x07\0(.)\0\0Mac OS X /s;
681
+ my $ver = ord $1;
682
+ # (extension may be anything, so just echo back the incoming file extension if it exists)
683
+ $et->SetFileType(undef, undef, $$et{FILE_EXT});
684
+ $ver == 2 or $et->Warn("Unsupported file version $ver"), return 1;
685
+ SetByteOrder('MM');
686
+ my $tagTablePtr = GetTagTable('Image::ExifTool::MacOS::Main');
687
+ my $entries = Get16u(\$hdr, 0x18);
688
+ $et->VerboseDir('MacOS', $entries);
689
+ $raf->Read($hdr, $entries * 12) == $entries * 12 or $et->Warn('Truncated header'), return 1;
690
+ for ($i=0; $i<$entries; ++$i) {
691
+ my $pos = $i * 12;
692
+ my $tag = Get32u(\$hdr, $pos);
693
+ my $off = Get32u(\$hdr, $pos + 4);
694
+ my $len = Get32u(\$hdr, $pos + 8);
695
+ $len > 100000000 and $et->Warn('Record size too large'), last;
696
+ $raf->Seek($off,0) and $raf->Read($buff,$len) == $len or $et->Warn('Truncated record'), last;
697
+ $et->HandleTag($tagTablePtr, $tag, undef, DataPt => \$buff, DataPos => $off, Index => $i);
698
+ }
699
+ return 1;
700
+ }
701
+
587
702
  1; # end
588
703
 
589
704
  __END__
@@ -600,8 +715,9 @@ This module is used by Image::ExifTool
600
715
 
601
716
  This module contains definitions required by Image::ExifTool to extract
602
717
  MDItem* and XAttr* tags on MacOS systems using the "mdls" and "xattr"
603
- utilities respectively. Writable tags use "xattr", "setfile" or "osascript"
604
- for writing.
718
+ utilities respectively. It also reads metadata directly from the MacOS "_."
719
+ sidecar files that are used on some filesystems to store file attributes.
720
+ Writable tags use "xattr", "setfile" or "osascript" for writing.
605
721
 
606
722
  =head1 AUTHOR
607
723
 
@@ -14,7 +14,7 @@ use strict;
14
14
  use vars qw($VERSION);
15
15
  use Image::ExifTool qw(:DataAccess :Utils);
16
16
 
17
- $VERSION = '1.09';
17
+ $VERSION = '1.10';
18
18
 
19
19
  my %noYes = ( 0 => 'No', 1 => 'Yes' );
20
20
 
@@ -221,6 +221,8 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
221
221
  },
222
222
  0x2e => {
223
223
  Name => 'TrackEntry',
224
+ # reset TrackType member at the start of each track
225
+ Condition => 'delete $$self{TrackType}; 1',
224
226
  SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' },
225
227
  },
226
228
  0x57 => { Name => 'TrackNumber', Format => 'unsigned' },
@@ -49,7 +49,7 @@ use vars qw($VERSION %minoltaLensTypes %minoltaTeleconverters %minoltaColorMode
49
49
  use Image::ExifTool qw(:DataAccess :Utils);
50
50
  use Image::ExifTool::Exif;
51
51
 
52
- $VERSION = '2.84';
52
+ $VERSION = '2.87';
53
53
 
54
54
  # Full list of product codes for Sony-compatible Minolta lenses
55
55
  # (ref http://www.kb.sony.com/selfservice/documentLink.do?externalId=C1000570)
@@ -602,6 +602,10 @@ $VERSION = '2.84';
602
602
  15 => 'Light', #JR (NC)
603
603
  16 => 'Autumn Leaves', #JR (NC)
604
604
  17 => 'Sepia', #JR
605
+ 18 => 'FL', #JR (7SM3)
606
+ 19 => 'Vivid 2', #JR (7SM3)
607
+ 20 => 'IN', #JR (7SM3)
608
+ 21 => 'SH', #JR (7SM3)
605
609
  100 => 'Neutral', #JD
606
610
  101 => 'Clear', #JD
607
611
  102 => 'Deep', #JD
@@ -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 = '3.86';
65
+ $VERSION = '3.89';
66
66
 
67
67
  sub LensIDConv($$$);
68
68
  sub ProcessNikonAVI($$$);
@@ -349,6 +349,7 @@ sub GetAFPointGrid($$;$);
349
349
  'FE 47 00 00 24 24 4B 06' => 'Sigma 4.5mm F2.8 EX DC HSM Circular Fisheye', #JD
350
350
  '26 48 11 11 30 30 1C 02' => 'Sigma 8mm F4 EX Circular Fisheye',
351
351
  '79 40 11 11 2C 2C 1C 06' => 'Sigma 8mm F3.5 EX Circular Fisheye', #JD
352
+ 'DB 40 11 11 2C 2C 1C 06' => 'Sigma 8mm F3.5 EX DG Circular Fisheye', #30
352
353
  'DC 48 19 19 24 24 4B 06' => 'Sigma 10mm F2.8 EX DC HSM Fisheye',
353
354
  'C2 4C 24 24 14 14 4B 06' => 'Sigma 14mm F1.8 DG HSM | A', #IB
354
355
  '48 48 24 24 24 24 4B 02' => 'Sigma 14mm F2.8 EX Aspherical HSM',
@@ -1400,6 +1401,7 @@ my %binaryDataAttrs = (
1400
1401
  16 => 'Electronic',
1401
1402
  # 33 => ? seen for 1J2
1402
1403
  48 => 'Electronic Front Curtain',
1404
+ # 80 => ? seen for the Z6II
1403
1405
  # 81 => ? seen for Z50
1404
1406
  },
1405
1407
  },
@@ -2082,7 +2084,7 @@ my %binaryDataAttrs = (
2082
2084
  },
2083
2085
  },
2084
2086
  {
2085
- Condition => '$$valPt =~ /^0800/', # Z6/Z7
2087
+ Condition => '$$valPt =~ /^080[01]/', # Z6/Z7
2086
2088
  Name => 'LensData0800',
2087
2089
  SubDirectory => {
2088
2090
  TagTable => 'Image::ExifTool::Nikon::LensData0800',
@@ -4657,6 +4659,12 @@ my %nikonFocalConversions = (
4657
4659
  13 => 'Nikkor Z 24-70mm f/2.8 S',
4658
4660
  14 => 'Nikkor Z 85mm f/1.8 S',
4659
4661
  15 => 'Nikkor Z 24mm f/1.8 S', #IB
4662
+ 16 => 'Nikkor Z 70-200mm f/2.8 VR S', #IB
4663
+ 17 => 'Nikkor Z 20mm f/1.8 S', #IB
4664
+ 18 => 'Nikkor Z 24-200mm f/4-6.3 VR', #IB
4665
+ 21 => 'Nikkor Z 50mm f/1.2 S', #IB
4666
+ 22 => 'Nikkor Z 24-50mm f/4-6.3', #IB
4667
+ 23 => 'Nikkor Z 14-24mm f/2.8 S', #IB
4660
4668
  },
4661
4669
  },
4662
4670
  0x36 => {
@@ -8992,7 +9000,7 @@ my %nikonFocalConversions = (
8992
9000
  },
8993
9001
  },
8994
9002
  {
8995
- Condition => '$$valPt =~ /^0800/', # Z6/Z7
9003
+ Condition => '$$valPt =~ /^080[01]/', # Z6/Z7
8996
9004
  Name => 'LensData0800',
8997
9005
  SubDirectory => {
8998
9006
  TagTable => 'Image::ExifTool::Nikon::LensData0800',
@@ -40,7 +40,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
40
40
  use Image::ExifTool::Exif;
41
41
  use Image::ExifTool::APP12;
42
42
 
43
- $VERSION = '2.68';
43
+ $VERSION = '2.70';
44
44
 
45
45
  sub PrintLensInfo($$$);
46
46
 
@@ -109,6 +109,7 @@ my %olympusLensTypes = (
109
109
  '0 32 00' => 'Olympus Zuiko Digital ED 14-35mm F2.0 SWD', #PH
110
110
  '0 32 10' => 'Olympus M.Zuiko Digital ED 12-200mm F3.5-6.3', #IB
111
111
  '0 33 00' => 'Olympus Zuiko Digital 25mm F2.8', #PH
112
+ '0 33 10' => 'Olympus M.Zuiko Digital 150-400mm F4.5 TC1.25x IS Pro', #IB
112
113
  '0 34 00' => 'Olympus Zuiko Digital ED 9-18mm F4.0-5.6', #7
113
114
  '0 34 10' => 'Olympus M.Zuiko Digital ED 12-45mm F4.0 Pro', #IB
114
115
  '0 35 00' => 'Olympus Zuiko Digital 14-54mm F2.8-3.5 II', #PH
@@ -137,6 +138,7 @@ my %olympusLensTypes = (
137
138
  '1 15 00' => 'Sigma 10-20mm F4.0-5.6 EX DC HSM', #11
138
139
  '1 16 00' => 'Sigma APO 70-200mm F2.8 II EX DG Macro HSM', #11
139
140
  '1 17 00' => 'Sigma 50mm F1.4 EX DG HSM', #11
141
+ '1 18 60' => 'Test',
140
142
  # Panasonic/Leica lenses
141
143
  '2 01 00' => 'Leica D Vario Elmarit 14-50mm F2.8-3.5 Asph.', #11
142
144
  '2 01 10' => 'Lumix G Vario 14-45mm F3.5-5.6 Asph. Mega OIS', #16
@@ -2129,6 +2131,11 @@ my %indexInfo = (
2129
2131
  67 => 'Soft Background Shot', #11
2130
2132
  142 => 'Hand-held Starlight', #PH (SH-21)
2131
2133
  154 => 'HDR', #PH (XZ-2)
2134
+ 197 => 'Panning', #forum11631 (EM5iii)
2135
+ 203 => 'Light Trails', #forum11631 (EM5iii)
2136
+ 204 => 'Backlight HDR', #forum11631 (EM5iii)
2137
+ 205 => 'Silent', #forum11631 (EM5iii)
2138
+ 206 => 'Multi Focus Shot', #forum11631 (EM5iii)
2132
2139
  },
2133
2140
  },
2134
2141
  0x50a => { #PH/4/6
@@ -37,7 +37,7 @@ use vars qw($VERSION %leicaLensTypes);
37
37
  use Image::ExifTool qw(:DataAccess :Utils);
38
38
  use Image::ExifTool::Exif;
39
39
 
40
- $VERSION = '2.13';
40
+ $VERSION = '2.14';
41
41
 
42
42
  sub ProcessLeicaLEIC($$$);
43
43
  sub WhiteBalanceConv($;$$);
@@ -2471,7 +2471,8 @@ my %shootingMode = (
2471
2471
  # AdvancedSceneType=5 for automatic mode iA (ref 19)
2472
2472
  if ($prt) {
2473
2473
  return $prt if $v[1] == 1;
2474
- return "$prt (intelligent auto)" if $v[1] == 5;
2474
+ return "$prt (intelligent auto)" if $v[1] == 5; #forum11523
2475
+ return "$prt (intelligent auto plus)" if $v[1] == 7; #forum11523
2475
2476
  return "$prt ($v[1])";
2476
2477
  }
2477
2478
  return "Unknown ($val)";
@@ -2494,10 +2495,19 @@ my %shootingMode = (
2494
2495
  '9 3' => 'Objects', #(FZ28)
2495
2496
  '9 4' => 'Creative Macro', #(FZ28)
2496
2497
  #'9 5' - ? (GF3)
2498
+ '18 1' => 'High Sensitivity', #forum11523 (TZ5)
2499
+ '20 1' => 'Fireworks', #forum11523 (TZ5)
2497
2500
  '21 2' => 'Illuminations', #(FZ28)
2498
2501
  '21 4' => 'Creative Night Scenery', #(FZ28)
2499
2502
  #'21 5' - ? (LX3)
2503
+ '26 1' => 'High-speed Burst (shot 1)', #forum11523 (TZ5)
2504
+ '27 1' => 'High-speed Burst (shot 2)', #forum11523 (TZ5)
2505
+ '29 1' => 'Snow', #forum11523 (TZ5)
2506
+ '30 1' => 'Starry Sky', #forum11523 (TZ5)
2507
+ '31 1' => 'Beach', #forum11523 (TZ5)
2508
+ '36 1' => 'High-speed Burst (shot 3)', #forum11523 (TZ5)
2500
2509
  #'37 5' - ? (various)
2510
+ '39 1' => 'Aerial Photo / Underwater / Multi-aspect', #forum11523 (TZ5)
2501
2511
  '45 2' => 'Cinema', #(GF2)
2502
2512
  '45 7' => 'Expressive', #(GF1,GF2)
2503
2513
  '45 8' => 'Retro', #(GF1,GF2)
@@ -2542,16 +2552,6 @@ my %shootingMode = (
2542
2552
  'DMC-TZ40 90 10' => 'Toy Effect',
2543
2553
  'DMC-TZ40 90 11' => 'Dynamic Monochrome',
2544
2554
  'DMC-TZ40 90 12' => 'Soft',
2545
- # some TZ5 modes are different (forum11523)
2546
- # (these may be the same for the TZ4, TZ11 and TZ15)
2547
- 'DMC-TZ5 18 1' => 'High Sensitivity',
2548
- 'DMC-TZ5 26 1' => 'High-speed Burst (shot 1)',
2549
- 'DMC-TZ5 27 1' => 'High-speed Burst (shot 2)',
2550
- 'DMC-TZ5 29 1' => 'Snow',
2551
- 'DMC-TZ5 30 1' => 'Starry Sky',
2552
- 'DMC-TZ5 31 1' => 'Beach',
2553
- 'DMC-TZ5 36 1' => 'High-speed Burst (shot 3)',
2554
- 'DMC-TZ5 39 1' => 'Aerial Photo / Underwater / Multi-aspect',
2555
2555
  },
2556
2556
  },
2557
2557
  );