exiftool_vendored 12.32.0 → 12.36.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/Changes +77 -3
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +57 -39
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +7 -2
- data/bin/lib/Image/ExifTool/CBOR.pm +85 -31
- data/bin/lib/Image/ExifTool/Canon.pm +28 -3
- data/bin/lib/Image/ExifTool/Charset.pm +2 -0
- data/bin/lib/Image/ExifTool/Exif.pm +109 -3
- data/bin/lib/Image/ExifTool/FLIR.pm +33 -8
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +96 -4
- data/bin/lib/Image/ExifTool/JSON.pm +4 -2
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +111 -12
- data/bin/lib/Image/ExifTool/MacOS.pm +2 -2
- data/bin/lib/Image/ExifTool/Nikon.pm +637 -16
- data/bin/lib/Image/ExifTool/NikonCustom.pm +5 -1
- data/bin/lib/Image/ExifTool/NikonSettings.pm +67 -11
- data/bin/lib/Image/ExifTool/Olympus.pm +5 -1
- data/bin/lib/Image/ExifTool/PDF.pm +5 -3
- data/bin/lib/Image/ExifTool/QuickTime.pm +21 -2
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +2 -2
- data/bin/lib/Image/ExifTool/README +6 -2
- data/bin/lib/Image/ExifTool/Sony.pm +31 -11
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +9 -4
- data/bin/lib/Image/ExifTool/TagLookup.pm +5054 -4455
- data/bin/lib/Image/ExifTool/TagNames.pod +1185 -23
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +10 -0
- data/bin/lib/Image/ExifTool/Writer.pl +45 -3
- data/bin/lib/Image/ExifTool/XMP.pm +111 -25
- data/bin/lib/Image/ExifTool/XMP2.pl +3 -1
- data/bin/lib/Image/ExifTool.pm +83 -19
- data/bin/lib/Image/ExifTool.pod +9 -1
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
@@ -15,7 +15,7 @@ package Image::ExifTool::NikonCustom;
|
|
15
15
|
use strict;
|
16
16
|
use vars qw($VERSION);
|
17
17
|
|
18
|
-
$VERSION = '1.
|
18
|
+
$VERSION = '1.18';
|
19
19
|
|
20
20
|
my %offOn = ( 0 => 'Off', 1 => 'On' );
|
21
21
|
my %onOff = ( 0 => 'On', 1 => 'Off' );
|
@@ -3358,6 +3358,8 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
|
|
3358
3358
|
47 => 'AF-Area Mode + AF-On (Auto Area AF)',
|
3359
3359
|
49 => 'Sync Release (Master Only)',
|
3360
3360
|
50 => 'Sync Release (Remote Only)',
|
3361
|
+
58 => 'AF-Area Mode + AF-On (Group Area AF - HL)',
|
3362
|
+
59 => 'AF-Area Mode + AF-On (Group Area AF - VL)',
|
3361
3363
|
},
|
3362
3364
|
},
|
3363
3365
|
15.1 => { # CSf1-a
|
@@ -3401,6 +3403,8 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
|
|
3401
3403
|
47 => 'AF-Area Mode + AF-On (Auto Area AF)',
|
3402
3404
|
49 => 'Sync Release (Master Only)',
|
3403
3405
|
50 => 'Sync Release (Remote Only)',
|
3406
|
+
58 => 'AF-Area Mode + AF-On (Group Area AF - HL)',
|
3407
|
+
59 => 'AF-Area Mode + AF-On (Group Area AF - VL)',
|
3404
3408
|
},
|
3405
3409
|
},
|
3406
3410
|
16.1 => { # CSf1-p
|
@@ -17,7 +17,7 @@ use strict;
|
|
17
17
|
use vars qw($VERSION);
|
18
18
|
use Image::ExifTool qw(:DataAccess :Utils);
|
19
19
|
|
20
|
-
$VERSION = '1.
|
20
|
+
$VERSION = '1.05';
|
21
21
|
|
22
22
|
sub ProcessNikonSettings($$$);
|
23
23
|
|
@@ -545,15 +545,7 @@ my %infoD6 = (
|
|
545
545
|
%infoZ72,
|
546
546
|
}],
|
547
547
|
0x00e => { Name => 'MovieISOAutoControlManualMode',PrintConv => \%onOff }, # (D6/Z7_2)
|
548
|
-
|
549
|
-
# Name => 'MovieISOAutoManualMode',
|
550
|
-
# PrintConv => \%iSOAutoHiLimitD6,
|
551
|
-
# %infoD6,
|
552
|
-
# },{
|
553
|
-
# Name => 'MovieISOAutoManualMode',
|
554
|
-
# PrintConv => \%iSOAutoHiLimitZ7m2,
|
555
|
-
# %infoZ72,
|
556
|
-
# }],
|
548
|
+
0x00f => { Name => 'MovieWhiteBalanceSameAsPhoto', PrintConv => \%yesNo }, # (D6/Z7_2)
|
557
549
|
0x01d => [{ # CSa1 (D6)
|
558
550
|
Name => 'AF-CPrioritySel',
|
559
551
|
PrintConv => { # valid for cameras with 4 options for CS1, otherwise 1=Release, 2=Focus
|
@@ -978,6 +970,26 @@ my %infoD6 = (
|
|
978
970
|
%infoZ72,
|
979
971
|
}],
|
980
972
|
0x074 => { Name => 'FlickAdvanceDirection', PrintConv => { 1 => 'Right to Left', 2 => 'Left to Right' } }, # CSf12-3 (D6)
|
973
|
+
0x075 => { # Settings menu # (D6,Z7_2)
|
974
|
+
Name => 'HDMIOutputResolution',
|
975
|
+
PrintConv => {
|
976
|
+
1 => 'Auto',
|
977
|
+
2 => '2160p',
|
978
|
+
3 => '1080p',
|
979
|
+
4 => '1080i)',
|
980
|
+
5 => '720p',
|
981
|
+
6 => '576p',
|
982
|
+
7 => '480p',
|
983
|
+
},
|
984
|
+
},
|
985
|
+
0x077 => { # Settings menu # (D6,Z7_2)
|
986
|
+
Name => 'HDMIOutputRange',
|
987
|
+
PrintConv => {
|
988
|
+
1 => 'Auto',
|
989
|
+
2 => 'Limit',
|
990
|
+
3 => 'Full',
|
991
|
+
},
|
992
|
+
},
|
981
993
|
0x080 => [{
|
982
994
|
Name => 'RemoteFuncButton',
|
983
995
|
PrintConv => {
|
@@ -1051,6 +1063,7 @@ my %infoD6 = (
|
|
1051
1063
|
8 => '180',
|
1052
1064
|
},
|
1053
1065
|
},
|
1066
|
+
0x092 => { Name => 'HDMIExternalRecorder', PrintConv => \%onOff }, # Settings Menu/HDMI/Advanced entry (D6 & Z7_2)
|
1054
1067
|
0x093 => { # CSa3-a (D6), CSa3 (Z7_2)
|
1055
1068
|
Name => 'BlockShotAFResponse',
|
1056
1069
|
PrintConv => {
|
@@ -1549,6 +1562,28 @@ my %infoD6 = (
|
|
1549
1562
|
0x0fb => { Name => 'SecondarySlotFunction', PrintConv => \%tagSecondarySlotFunction }, # (D6)
|
1550
1563
|
0x0fc => { Name => 'SilentPhotography', PrintConv => \%onOff }, # (D6,Z7_2) # tag is associated with Silent LiveView Photography (as distinguisehed from Silent Interval or Silent Focus Shift)
|
1551
1564
|
0x0fd => { Name => 'ExtendedShutterSpeeds', PrintConv => \%onOff }, # CSd7 (D6), CSd6 (Z7_2)
|
1565
|
+
0x102 => { # (Z7_2)
|
1566
|
+
Name => 'HDMIBitDepth',
|
1567
|
+
RawConv => '$$self{HDMIBitDepth} = $val',
|
1568
|
+
PrintConv => {
|
1569
|
+
1 => '8 Bit',
|
1570
|
+
2 => '10 Bit',
|
1571
|
+
},
|
1572
|
+
},
|
1573
|
+
0x103 => { # (Z7_2)
|
1574
|
+
Name => 'HDMIOutputHDR',
|
1575
|
+
Condition => '$$self{HDMIBitDepth} == 2', # HDR(HLC) output option only available only for 10 bit
|
1576
|
+
RawConv => '$$self{HDMIOutputHDR} = $val',
|
1577
|
+
PrintConv => {
|
1578
|
+
2 => 'On', # unusual decode perhaps due to sharing sub-menu with tag HDMIOutputN-Log?
|
1579
|
+
3 => 'Off',
|
1580
|
+
},
|
1581
|
+
},
|
1582
|
+
0x104 => { # valid for 10 bit with either N-Log or HDR/HLG selected (Z7_2)
|
1583
|
+
Name => 'HDMIViewAssist',
|
1584
|
+
Condition => '$$self{HDMIBitDepth} == 2',
|
1585
|
+
PrintConv => \%onOff
|
1586
|
+
},
|
1552
1587
|
0x109 => { # (D6,Z7_2)
|
1553
1588
|
Name => 'BracketSet',
|
1554
1589
|
RawConv => '$$self{BracketSet} = $val',
|
@@ -1640,6 +1675,11 @@ my %infoD6 = (
|
|
1640
1675
|
8 => 'Off, Low, Normal, High, Extra High',
|
1641
1676
|
},
|
1642
1677
|
},
|
1678
|
+
0x10e => { # (D6/Z7_2)
|
1679
|
+
Name => 'MonitorBrightness',
|
1680
|
+
# settings: -5 to +5
|
1681
|
+
ValueConv => '$val - 6',
|
1682
|
+
},
|
1643
1683
|
0x116 => { Name => 'GroupAreaC1', PrintConv =>\%groupAreaCustom }, # CSa10-a (new with D6) # (D6)
|
1644
1684
|
0x117 => { Name => 'AutoAreaAFStartingPoint', PrintConv => \%enableDisable }, # CSa12 (D6)
|
1645
1685
|
0x118 => { Name => 'FocusPointPersistence', PrintConv => { 1 => 'Auto', 2 => 'Off' } }, # CSa13 (new with D6) # (D6)
|
@@ -1823,8 +1863,9 @@ my %infoD6 = (
|
|
1823
1863
|
},
|
1824
1864
|
},
|
1825
1865
|
0x151 => { Name => 'LensFunc2Button', PrintConv => \%lensFuncButtonZ7m2 }, # CSf2-h (Z7_2)
|
1866
|
+
#0x153 => { Name => 'ViewfinderBrightness', } #(Z7_2) # commented out to reduce output volume. Range [-5,+5]. PrintConv matches MonitorBrightness.
|
1826
1867
|
0x158 => { Name => 'USBPowerDelivery', PrintConv => \%enableDisable }, # (Z7_2)
|
1827
|
-
|
1868
|
+
0x159 => { Name => 'EnergySavingMode', PrintConv =>\%onOff }, # (Z7_2)
|
1828
1869
|
0x15c => { Name => 'BracketingBurstOptions',PrintConv => \%enableDisable }, # CSe9 (D6)
|
1829
1870
|
# 0x15d => CSf3-j-2 (D6) 'Same as Multi-Selector with Info(U/D) & Playback(R/L)' and 'Same as Multi-Selector with Info(R/L) & Playback(U/D)' (skipped to reduce volume of output)
|
1830
1871
|
0x15e => { Name => 'PrimarySlot', PrintConv => { 1 => 'CFexpress/XQD Card', 2 => 'SD Card' } }, # (Z7_2)
|
@@ -1900,10 +1941,12 @@ my %infoD6 = (
|
|
1900
1941
|
13 => 'None',
|
1901
1942
|
},
|
1902
1943
|
},
|
1944
|
+
#0x168 => { Name => 'ControlPanelBrightness', # (Z7_2) #commented to reduce output volume
|
1903
1945
|
0x169 => { Name => 'LimitAF-AreaModeSelAutoPeople', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa7-h (Z7_2)
|
1904
1946
|
0x16a => { Name => 'LimitAF-AreaModeSelAutoAnimals', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa7-h (Z7_2)
|
1905
1947
|
0x16b => { Name => 'LimitAF-AreaModeSelWideLPeople', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa7-e (Z7_2)
|
1906
1948
|
0x16c => { Name => 'LimitAF-AreaModeSelWideLAnimals', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa7-f (Z7_2)
|
1949
|
+
0x16d => { Name => 'SaveFocus', PrintConv => \%onOff }, # (Z7_2)
|
1907
1950
|
0x16e => { # (Z7_2)
|
1908
1951
|
Name => 'AFAreaMode',
|
1909
1952
|
RawConv => '$$self{AFAreaMode} = $val',
|
@@ -1919,6 +1962,19 @@ my %infoD6 = (
|
|
1919
1962
|
10 => 'Auto (Animals)',
|
1920
1963
|
},
|
1921
1964
|
},
|
1965
|
+
0x16f => { # (Z7_2)
|
1966
|
+
Name => 'MovieAFAreaMode',
|
1967
|
+
PrintConv => {
|
1968
|
+
1 => 'Single-point',
|
1969
|
+
2 => 'Wide (S)',
|
1970
|
+
3 => 'Wide (L)',
|
1971
|
+
4 => 'Wide (L-people)',
|
1972
|
+
5 => 'Wide (L-animals)',
|
1973
|
+
6 => 'Auto',
|
1974
|
+
7 => 'Auto (People)',
|
1975
|
+
8 => 'Auto (Animals)',
|
1976
|
+
},
|
1977
|
+
},
|
1922
1978
|
0x170 => { Name => 'PreferSubSelectorCenter', PrintConv => \%offOn }, # CSf13 (D6 firmware v1.2.0)
|
1923
1979
|
0x171 => { # CSb8 (D6 firmware v1.3.0)
|
1924
1980
|
Name => 'KeepExposureWithTeleconverter',
|
@@ -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.75';
|
44
44
|
|
45
45
|
sub PrintLensInfo($$$);
|
46
46
|
|
@@ -3609,6 +3609,10 @@ my %indexInfo = (
|
|
3609
3609
|
Format => 'string[24]',
|
3610
3610
|
Groups => { 2 => 'Time' },
|
3611
3611
|
},
|
3612
|
+
0x17f => {
|
3613
|
+
Name => 'LensModel',
|
3614
|
+
Format => 'string[32]'
|
3615
|
+
},
|
3612
3616
|
);
|
3613
3617
|
|
3614
3618
|
# yet a different "thmb" atom format (PH, E-M5)
|
@@ -21,7 +21,7 @@ use vars qw($VERSION $AUTOLOAD $lastFetched);
|
|
21
21
|
use Image::ExifTool qw(:DataAccess :Utils);
|
22
22
|
require Exporter;
|
23
23
|
|
24
|
-
$VERSION = '1.
|
24
|
+
$VERSION = '1.54';
|
25
25
|
|
26
26
|
sub FetchObject($$$$);
|
27
27
|
sub ExtractObject($$;$$);
|
@@ -280,10 +280,12 @@ my %supportedFilter = (
|
|
280
280
|
ConvertToDict => 1,
|
281
281
|
},
|
282
282
|
Cs1 => {
|
283
|
-
SubDirectory => { TagTable => 'Image::ExifTool::PDF::
|
283
|
+
SubDirectory => { TagTable => 'Image::ExifTool::PDF::DefaultRGB' },
|
284
|
+
ConvertToDict => 1, # (just in case)
|
284
285
|
},
|
285
286
|
CS0 => {
|
286
|
-
SubDirectory => { TagTable => 'Image::ExifTool::PDF::
|
287
|
+
SubDirectory => { TagTable => 'Image::ExifTool::PDF::DefaultRGB' },
|
288
|
+
ConvertToDict => 1, # (just in case)
|
287
289
|
},
|
288
290
|
);
|
289
291
|
|
@@ -47,7 +47,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
47
47
|
use Image::ExifTool::Exif;
|
48
48
|
use Image::ExifTool::GPS;
|
49
49
|
|
50
|
-
$VERSION = '2.
|
50
|
+
$VERSION = '2.72';
|
51
51
|
|
52
52
|
sub ProcessMOV($$;$);
|
53
53
|
sub ProcessKeys($$$);
|
@@ -482,6 +482,17 @@ my %eeBox2 = (
|
|
482
482
|
# (Pittasoft Blackview dashcam MP4 videos)
|
483
483
|
Condition => '$$valPt =~ /^\0\0..(cprt|sttm|ptnm|ptrh|thum|gps |3gf )/s',
|
484
484
|
SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Pittasoft' },
|
485
|
+
},{
|
486
|
+
Name => 'ThumbnailImage',
|
487
|
+
# (DJI Zenmuse XT2 thermal camera)
|
488
|
+
Groups => { 2 => 'Preview' },
|
489
|
+
Condition => '$$valPt =~ /^.{4}mdat\xff\xd8\xff/s',
|
490
|
+
RawConv => q{
|
491
|
+
my $len = unpack('N', $val);
|
492
|
+
return undef if $len <= 8 or $len > length($val);
|
493
|
+
return substr($val, 8, $len-8);
|
494
|
+
},
|
495
|
+
Binary => 1,
|
485
496
|
},{
|
486
497
|
Unknown => 1,
|
487
498
|
Binary => 1,
|
@@ -558,6 +569,7 @@ my %eeBox2 = (
|
|
558
569
|
# *** this is where ExifTool writes XMP in MP4 videos (as per XMP spec) ***
|
559
570
|
Condition => '$$valPt=~/^\xbe\x7a\xcf\xcb\x97\xa9\x42\xe8\x9c\x71\x99\x94\x91\xe3\xaf\xac/',
|
560
571
|
WriteGroup => 'XMP', # (write main XMP tags here)
|
572
|
+
PreservePadding => 1,
|
561
573
|
SubDirectory => {
|
562
574
|
TagTable => 'Image::ExifTool::XMP::Main',
|
563
575
|
Start => 16,
|
@@ -607,6 +619,7 @@ my %eeBox2 = (
|
|
607
619
|
Name => 'PreviewImage',
|
608
620
|
Condition => '$$valPt=~/^\xea\xf4\x2b\x5e\x1c\x98\x4b\x88\xb9\xfb\xb7\xdc\x40\x6e\x4d\x16/',
|
609
621
|
Groups => { 2 => 'Preview' },
|
622
|
+
PreservePadding => 1,
|
610
623
|
# 0x00 - undef[16]: UUID
|
611
624
|
# 0x10 - int32u[2]: "0 1" (version and/or item count?)
|
612
625
|
# 0x18 - int32u: PRVW atom size
|
@@ -9113,6 +9126,12 @@ sub ProcessMOV($$;$)
|
|
9113
9126
|
} else {
|
9114
9127
|
my $t = PrintableTagID($tag,2);
|
9115
9128
|
$et->VPrint(0,"$$et{INDENT}Tag '${t}' extends to end of file");
|
9129
|
+
if ($$tagTablePtr{"$tag-size"}) {
|
9130
|
+
my $pos = $raf->Tell();
|
9131
|
+
$raf->Seek(0, 2);
|
9132
|
+
$et->HandleTag($tagTablePtr, "$tag-size", $raf->Tell() - $pos);
|
9133
|
+
$et->HandleTag($tagTablePtr, "$tag-offset", $pos) if $$tagTablePtr{"$tag-offset"};
|
9134
|
+
}
|
9116
9135
|
}
|
9117
9136
|
last;
|
9118
9137
|
}
|
@@ -9419,7 +9438,7 @@ ItemID: foreach $id (keys %$items) {
|
|
9419
9438
|
for (;;) {
|
9420
9439
|
last if $pos + 16 > $size;
|
9421
9440
|
my ($len, $type, $flags, $ctry, $lang) = unpack("x${pos}Na4Nnn", $val);
|
9422
|
-
last if $pos + $len > $size;
|
9441
|
+
last if $pos + $len > $size or not $len;
|
9423
9442
|
my ($value, $langInfo, $oldDir);
|
9424
9443
|
my $format = $$tagInfo{Format};
|
9425
9444
|
if ($type eq 'data' and $len >= 16) {
|
@@ -99,7 +99,7 @@ my %insvLimit = (
|
|
99
99
|
The tags below are extracted from timed metadata in QuickTime and other
|
100
100
|
formats of video files when the ExtractEmbedded option is used. Although
|
101
101
|
most of these tags are combined into the single table below, ExifTool
|
102
|
-
currently reads
|
102
|
+
currently reads 58 different formats of timed GPS metadata from video files.
|
103
103
|
},
|
104
104
|
VARS => { NO_ID => 1 },
|
105
105
|
GPSLatitude => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")', RawConv => '$$self{FoundGPSLatitude} = 1; $val' },
|
@@ -107,7 +107,7 @@ my %insvLimit = (
|
|
107
107
|
GPSAltitude => { PrintConv => '(sprintf("%.4f", $val) + 0) . " m"' }, # round to 4 decimals
|
108
108
|
GPSSpeed => { PrintConv => 'sprintf("%.4f", $val) + 0', Notes => 'in km/h unless GPSSpeedRef says otherwise' },
|
109
109
|
GPSSpeedRef => { PrintConv => { K => 'km/h', M => 'mph', N => 'knots' } },
|
110
|
-
GPSTrack => { PrintConv => 'sprintf("%.4f", $val) + 0', Notes => 'true north unless GPSTrackRef says otherwise' },
|
110
|
+
GPSTrack => { PrintConv => 'sprintf("%.4f", $val) + 0', Notes => 'relative to true north unless GPSTrackRef says otherwise' },
|
111
111
|
GPSTrackRef => { PrintConv => { M => 'Magnetic North', T => 'True North' } },
|
112
112
|
GPSDateTime => {
|
113
113
|
Groups => { 2 => 'Time' },
|
@@ -450,6 +450,10 @@ numerical, and generated automatically otherwise.
|
|
450
450
|
may be written if the tag already exists. By default, all
|
451
451
|
MakerNotes tags are permanent unless otherwise specified.
|
452
452
|
|
453
|
+
'PreservePadding' - [QuickTime only] flag to preserve the
|
454
|
+
original size of the QuickTime atom by padding with nulls when
|
455
|
+
writing with the QuickTimePad option.
|
456
|
+
|
453
457
|
'PrintHex' - specifies that unknown PrintConv values should
|
454
458
|
be printed in hex (eg. 'Unknown (0x1)'). Also causes
|
455
459
|
numerical tag values to be printed in hex in the HTML tag name
|
@@ -474,9 +478,9 @@ numerical, and generated automatically otherwise.
|
|
474
478
|
tags in IFD1 of JPEG images which default to priority 0.
|
475
479
|
|
476
480
|
'Protected' - bit mask to protect tags from writing:
|
477
|
-
Bit 0x01 indicates an '
|
481
|
+
Bit 0x01 indicates an 'Unsafe' tag, which is not set via
|
478
482
|
SetNewValuesFromFile() unless specified explicitly.
|
479
|
-
Bit 0x02 indicates a '
|
483
|
+
Bit 0x02 indicates a 'Protected' tag, which should not be set
|
480
484
|
directly by the user.
|
481
485
|
|
482
486
|
'PutFirst' - [EXIF only] flag to place this value before IFD0
|
@@ -34,7 +34,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
34
34
|
use Image::ExifTool::Exif;
|
35
35
|
use Image::ExifTool::Minolta;
|
36
36
|
|
37
|
-
$VERSION = '3.
|
37
|
+
$VERSION = '3.48';
|
38
38
|
|
39
39
|
sub ProcessSRF($$$);
|
40
40
|
sub ProcessSR2($$$);
|
@@ -154,6 +154,7 @@ sub PrintInvLensSpec($;$$);
|
|
154
154
|
32866 => 'Sony FE 24mm F2.8 G', #IB
|
155
155
|
32867 => 'Sony FE 40mm F2.5 G', #IB
|
156
156
|
32868 => 'Sony FE 50mm F2.5 G', #IB
|
157
|
+
32874 => 'Sony FE 70-200mm F2.8 GM OSS II', #IB
|
157
158
|
|
158
159
|
# (comment this out so LensID will report the LensModel, which is more useful)
|
159
160
|
# 32952 => 'Metabones Canon EF Speed Booster Ultra', #JR (corresponds to 184, but 'Advanced' mode, LensMount reported as E-mount)
|
@@ -196,6 +197,9 @@ sub PrintInvLensSpec($;$$);
|
|
196
197
|
49465 => 'Tamron 17-70mm F2.8 Di III-A VC RXD', #JR (Model B070)
|
197
198
|
49466 => 'Tamron 150-500mm F5-6.7 Di III VC VXD', #JR (Model A057)
|
198
199
|
49467 => 'Tamron 11-20mm F2.8 Di III-A RXD', #JR (Model B060)
|
200
|
+
49468 => 'Tamron 18-300mm F3.5-6.3 Di III-A VC VXD', #JR (Model B061)
|
201
|
+
49469 => 'Tamron 35-150mm F2-F2.8 Di III VXD', #JR (Model A058)
|
202
|
+
49470 => 'Tamron 28-75mm F2.8 Di III VXD G2', #JR (Model A063)
|
199
203
|
|
200
204
|
49473 => 'Tokina atx-m 85mm F1.8 FE or Viltrox lens', #JR
|
201
205
|
49473.1 => 'Viltrox 23mm F1.4 E', #JR
|
@@ -239,7 +243,8 @@ sub PrintInvLensSpec($;$$);
|
|
239
243
|
50528 => 'Sigma 35mm F1.4 DG DN | A', #IB/JR (021)
|
240
244
|
50529 => 'Sigma 90mm F2.8 DG DN | C', #JR (021)
|
241
245
|
50530 => 'Sigma 24mm F2 DG DN | C', #JR (021)
|
242
|
-
|
246
|
+
50531 => 'Sigma 18-50mm F2.8 DC DN | C', #IB/JR (021)
|
247
|
+
|
243
248
|
50992 => 'Voigtlander SUPER WIDE-HELIAR 15mm F4.5 III', #JR
|
244
249
|
50993 => 'Voigtlander HELIAR-HYPER WIDE 10mm F5.6', #IB
|
245
250
|
50994 => 'Voigtlander ULTRA WIDE-HELIAR 12mm F5.6 III', #IB
|
@@ -1578,6 +1583,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
1578
1583
|
65535 => 'n/a',
|
1579
1584
|
},
|
1580
1585
|
},
|
1586
|
+
# 0x203a - 0x2041: first seen October 2021 for ILCE-7M4
|
1581
1587
|
0x3000 => {
|
1582
1588
|
Name => 'ShotInfo',
|
1583
1589
|
SubDirectory => { TagTable => 'Image::ExifTool::Sony::ShotInfo' },
|
@@ -1606,7 +1612,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
1606
1612
|
# from mid-2015: ILCE-7RM2/7SM2/6300 and newer models use different offsets
|
1607
1613
|
{
|
1608
1614
|
Name => 'Tag9050a',
|
1609
|
-
Condition => '$$self{Model} !~ /^(DSC-|Stellar|ILCE-(1|6100|6300|6400|6500|6600|7C|7M3|7RM2|7RM3A?|7RM4A?|7SM2|7SM3|9|9M2)|ILCA-99M2|ILME-FX3|ZV-)/',
|
1615
|
+
Condition => '$$self{Model} !~ /^(DSC-|Stellar|ILCE-(1|6100|6300|6400|6500|6600|7C|7M3|7M4|7RM2|7RM3A?|7RM4A?|7SM2|7SM3|9|9M2)|ILCA-99M2|ILME-FX3|ZV-)/',
|
1610
1616
|
SubDirectory => {
|
1611
1617
|
TagTable => 'Image::ExifTool::Sony::Tag9050a',
|
1612
1618
|
ByteOrder => 'LittleEndian',
|
@@ -1620,7 +1626,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
1620
1626
|
},
|
1621
1627
|
},{
|
1622
1628
|
Name => 'Tag9050c',
|
1623
|
-
Condition => '$$self{Model} =~ /^(ILCE-(1|7SM3)|ILME-FX3)/',
|
1629
|
+
Condition => '$$self{Model} =~ /^(ILCE-(1|7M4|7SM3)|ILME-FX3)/',
|
1624
1630
|
SubDirectory => {
|
1625
1631
|
TagTable => 'Image::ExifTool::Sony::Tag9050c',
|
1626
1632
|
ByteOrder => 'LittleEndian',
|
@@ -2030,6 +2036,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
2030
2036
|
385 => 'ILME-FX3', #JR
|
2031
2037
|
386 => 'ILCE-7RM3A', #JR
|
2032
2038
|
387 => 'ILCE-7RM4A', #forum12542
|
2039
|
+
388 => 'ILCE-7M4', #IB/JR
|
2033
2040
|
},
|
2034
2041
|
},
|
2035
2042
|
0xb020 => { #2
|
@@ -7952,7 +7959,7 @@ my %isoSetting2010 = (
|
|
7952
7959
|
},
|
7953
7960
|
0x0088 => {
|
7954
7961
|
Name => 'InternalSerialNumber', #(NC)
|
7955
|
-
Condition => '$$self{Model} =~ /^(ILCE-7SM3|ILME-FX3)/',
|
7962
|
+
Condition => '$$self{Model} =~ /^(ILCE-(7M4|7SM3)|ILME-FX3)/',
|
7956
7963
|
Format => 'int8u[6]',
|
7957
7964
|
PrintConv => 'unpack "H*", pack "C*", split " ", $val',
|
7958
7965
|
},
|
@@ -8190,7 +8197,7 @@ my %isoSetting2010 = (
|
|
8190
8197
|
},
|
8191
8198
|
0x002a => [{
|
8192
8199
|
Name => 'Quality2',
|
8193
|
-
Condition => '$$self{Model} !~ /^(ILCE-(1|7SM3)|ILME-FX3)\b/',
|
8200
|
+
Condition => '$$self{Model} !~ /^(ILCE-(1|7M4|7SM3)|ILME-FX3)\b/',
|
8194
8201
|
PrintConv => {
|
8195
8202
|
0 => 'JPEG',
|
8196
8203
|
1 => 'RAW',
|
@@ -8199,7 +8206,7 @@ my %isoSetting2010 = (
|
|
8199
8206
|
},
|
8200
8207
|
},{
|
8201
8208
|
Name => 'Quality2',
|
8202
|
-
Condition => '$$self{Model} =~ /^(ILCE-(1|7SM3)|ILME-FX3)\b/',
|
8209
|
+
Condition => '$$self{Model} =~ /^(ILCE-(1|7M4|7SM3)|ILME-FX3)\b/',
|
8203
8210
|
PrintConv => {
|
8204
8211
|
1 => 'JPEG',
|
8205
8212
|
2 => 'RAW',
|
@@ -8210,13 +8217,13 @@ my %isoSetting2010 = (
|
|
8210
8217
|
}],
|
8211
8218
|
0x0047 => {
|
8212
8219
|
Name => 'SonyImageHeight',
|
8213
|
-
Condition => '$$self{Model} !~ /^(ILCE-(1|7SM3)|ILME-FX3)\b/',
|
8220
|
+
Condition => '$$self{Model} !~ /^(ILCE-(1|7M4|7SM3)|ILME-FX3)\b/',
|
8214
8221
|
Format => 'int16u',
|
8215
8222
|
PrintConv => '$val > 0 ? 8*$val : "n.a."',
|
8216
8223
|
},
|
8217
8224
|
0x0053 => {
|
8218
8225
|
Name => 'ModelReleaseYear',
|
8219
|
-
Condition => '$$self{Model} !~ /^(ILCE-(1|7SM3)|ILME-FX3)\b/',
|
8226
|
+
Condition => '$$self{Model} !~ /^(ILCE-(1|7M4|7SM3)|ILME-FX3)\b/',
|
8220
8227
|
Format => 'int8u',
|
8221
8228
|
PrintConv => 'sprintf("20%.2d", $val)',
|
8222
8229
|
},
|
@@ -8231,10 +8238,11 @@ my %isoSetting2010 = (
|
|
8231
8238
|
FIRST_ENTRY => 0,
|
8232
8239
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
|
8233
8240
|
DATAMEMBER => [ 0 ],
|
8234
|
-
IS_SUBDIR => [ 0x0498, 0x04a1, 0x04a2, 0x059d, 0x0634, 0x0636, 0x064c, 0x0653, 0x0678, 0x06b8, 0x06de, 0x06e7 ],
|
8241
|
+
IS_SUBDIR => [ 0x0498, 0x049d, 0x04a1, 0x04a2, 0x059d, 0x0634, 0x0636, 0x064c, 0x0653, 0x0678, 0x06b8, 0x06de, 0x06e7 ],
|
8235
8242
|
0x0000 => { Name => 'Ver9401', Hidden => 1, RawConv => '$$self{Ver9401} = $val; $$self{OPTIONS}{Unknown}<2 ? undef : $val' },
|
8236
8243
|
|
8237
8244
|
0x0498 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 148', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
|
8245
|
+
0x049d => { Name => 'ISOInfo', Condition => '$$self{Ver9401} == 167', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
|
8238
8246
|
0x04a1 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} =~ /^(160|164)/', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
|
8239
8247
|
0x04a2 => { Name => 'ISOInfo', Condition => '$$self{Ver9401} =~ /^(152|154|155)/', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
|
8240
8248
|
0x059d => { Name => 'ISOInfo', Condition => '$$self{Ver9401} =~ /^(144|146)/', Format => 'int8u[5]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ISOInfo' } },
|
@@ -9503,7 +9511,7 @@ my %isoSetting2010 = (
|
|
9503
9511
|
WRITE_PROC => \&WriteEnciphered,
|
9504
9512
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
9505
9513
|
FORMAT => 'int8u',
|
9506
|
-
NOTES => 'Valid for the ILCE-1/7SM3, ILME-FX3.',
|
9514
|
+
NOTES => 'Valid for the ILCE-1/7M4/7SM3, ILME-FX3.',
|
9507
9515
|
FIRST_ENTRY => 0,
|
9508
9516
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
|
9509
9517
|
0x0000 => { Name => 'Tag9416_0000', PrintConv => 'sprintf("%3d",$val)', RawConv => '$$self{TagVersion} = $val' },
|
@@ -9630,10 +9638,22 @@ my %isoSetting2010 = (
|
|
9630
9638
|
},
|
9631
9639
|
0x088f => {
|
9632
9640
|
Name => 'VignettingCorrParams',
|
9641
|
+
Condition => '$$self{Model} !~ /^(ILCE-7M4)/',
|
9642
|
+
Format => 'int16s[16]',
|
9643
|
+
},
|
9644
|
+
0x0891 => {
|
9645
|
+
Name => 'VignettingCorrParams',
|
9646
|
+
Condition => '$$self{Model} =~ /^(ILCE-7M4)/',
|
9633
9647
|
Format => 'int16s[16]',
|
9634
9648
|
},
|
9635
9649
|
0x0914 => {
|
9636
9650
|
Name => 'ChromaticAberrationCorrParams',
|
9651
|
+
Condition => '$$self{Model} !~ /^(ILCE-7M4)/',
|
9652
|
+
Format => 'int16s[32]',
|
9653
|
+
},
|
9654
|
+
0x0916 => {
|
9655
|
+
Name => 'ChromaticAberrationCorrParams',
|
9656
|
+
Condition => '$$self{Model} =~ /^(ILCE-7M4)/',
|
9637
9657
|
Format => 'int16s[32]',
|
9638
9658
|
},
|
9639
9659
|
);
|
@@ -15,7 +15,7 @@ use vars qw($VERSION @ISA $makeMissing);
|
|
15
15
|
use Image::ExifTool qw(:Utils :Vars);
|
16
16
|
use Image::ExifTool::XMP;
|
17
17
|
|
18
|
-
$VERSION = '1.
|
18
|
+
$VERSION = '1.32';
|
19
19
|
@ISA = qw(Exporter);
|
20
20
|
|
21
21
|
# set this to a language code to generate Lang module with 'MISSING' entries
|
@@ -58,6 +58,12 @@ my %translateLang = (
|
|
58
58
|
my $numbersFirst = 1; # set to -1 to sort numbers last, or 2 to put negative numbers last
|
59
59
|
my $caseInsensitive; # used internally by sort routine
|
60
60
|
|
61
|
+
# write groups that don't represent real family 1 group names
|
62
|
+
my %fakeWriteGroup = (
|
63
|
+
Comment => 1, # (JPEG Comment)
|
64
|
+
colr => 1, # (Jpeg2000 'colr' box)
|
65
|
+
);
|
66
|
+
|
61
67
|
#------------------------------------------------------------------------------
|
62
68
|
# Utility to print tag information database as an XML list
|
63
69
|
# Inputs: 0) output file name (undef to send to console),
|
@@ -178,9 +184,8 @@ PTILoop: for ($index=0; $index<@infoArray; ++$index) {
|
|
178
184
|
}
|
179
185
|
my @groups = $et->GetGroup($tagInfo);
|
180
186
|
my $writeGroup = $$tagInfo{WriteGroup} || $$table{WRITE_GROUP};
|
181
|
-
|
182
|
-
|
183
|
-
}
|
187
|
+
# use common write group for group 1 (unless fake)
|
188
|
+
$groups[1] = $writeGroup if $writeGroup and not $fakeWriteGroup{$writeGroup};
|
184
189
|
# add group names if different from table defaults
|
185
190
|
my $grp = '';
|
186
191
|
for ($fam=0; $fam<3; ++$fam) {
|