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.
- checksums.yaml +4 -4
- data/bin/Changes +96 -2
- data/bin/MANIFEST +5 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +43 -42
- data/bin/exiftool +156 -82
- data/bin/lib/Image/ExifTool.pm +22 -13
- data/bin/lib/Image/ExifTool.pod +59 -50
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +11 -5
- data/bin/lib/Image/ExifTool/Canon.pm +202 -13
- data/bin/lib/Image/ExifTool/DarwinCore.pm +9 -3
- data/bin/lib/Image/ExifTool/EXE.pm +8 -5
- data/bin/lib/Image/ExifTool/GIF.pm +2 -2
- data/bin/lib/Image/ExifTool/Geotag.pm +30 -11
- data/bin/lib/Image/ExifTool/GoPro.pm +47 -30
- data/bin/lib/Image/ExifTool/IPTC.pm +1 -0
- data/bin/lib/Image/ExifTool/Import.pm +14 -11
- data/bin/lib/Image/ExifTool/JSON.pm +27 -4
- data/bin/lib/Image/ExifTool/MPF.pm +2 -2
- data/bin/lib/Image/ExifTool/MacOS.pm +153 -37
- data/bin/lib/Image/ExifTool/Matroska.pm +3 -1
- data/bin/lib/Image/ExifTool/Minolta.pm +5 -1
- data/bin/lib/Image/ExifTool/Nikon.pm +11 -3
- data/bin/lib/Image/ExifTool/Olympus.pm +8 -1
- data/bin/lib/Image/ExifTool/Panasonic.pm +12 -12
- data/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -0
- data/bin/lib/Image/ExifTool/Pentax.pm +10 -3
- data/bin/lib/Image/ExifTool/QuickTime.pm +51 -16
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +68 -45
- data/bin/lib/Image/ExifTool/README +5 -2
- data/bin/lib/Image/ExifTool/RSRC.pm +17 -11
- data/bin/lib/Image/ExifTool/Radiance.pm +7 -2
- data/bin/lib/Image/ExifTool/Sony.pm +56 -35
- data/bin/lib/Image/ExifTool/Stim.pm +2 -2
- data/bin/lib/Image/ExifTool/TagLookup.pm +5756 -5710
- data/bin/lib/Image/ExifTool/TagNames.pod +248 -49
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +7 -6
- data/bin/lib/Image/ExifTool/Writer.pl +5 -3
- data/bin/lib/Image/ExifTool/XMP.pm +63 -18
- data/bin/lib/Image/ExifTool/XMP2.pl +1 -0
- data/bin/perl-Image-ExifTool.spec +42 -41
- data/lib/exiftool_vendored/version.rb +1 -1
- 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.
|
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
|
-
|
25
|
-
tags from basic
|
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>
|
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.
|
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
|
-
#
|
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
|
-
|
521
|
-
|
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.
|
604
|
-
|
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.
|
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.
|
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.
|
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 =~ /^
|
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 =~ /^
|
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.
|
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.
|
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
|
);
|