exiftool_vendored 12.06.0 → 12.12.0

Sign up to get free protection for your applications and to get access to all the features.

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