exiftool_vendored 12.42.0 → 12.50.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 +189 -6
- data/bin/MANIFEST +12 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +45 -44
- data/bin/config_files/acdsee.config +2 -1
- data/bin/config_files/frameCount.config +56 -0
- data/bin/config_files/tiff_version.config +1 -1
- data/bin/exiftool +113 -95
- data/bin/fmt_files/gpx.fmt +3 -0
- data/bin/fmt_files/gpx_wpt.fmt +3 -0
- data/bin/lib/Image/ExifTool/Apple.pm +16 -3
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +23 -12
- data/bin/lib/Image/ExifTool/Canon.pm +66 -37
- data/bin/lib/Image/ExifTool/CanonRaw.pm +8 -1
- data/bin/lib/Image/ExifTool/CanonVRD.pm +7 -8
- data/bin/lib/Image/ExifTool/DJI.pm +2 -1
- data/bin/lib/Image/ExifTool/DarwinCore.pm +13 -1
- data/bin/lib/Image/ExifTool/EXE.pm +9 -1
- data/bin/lib/Image/ExifTool/Exif.pm +17 -12
- data/bin/lib/Image/ExifTool/FLAC.pm +17 -3
- data/bin/lib/Image/ExifTool/FLIR.pm +4 -3
- data/bin/lib/Image/ExifTool/FlashPix.pm +26 -3
- data/bin/lib/Image/ExifTool/FujiFilm.pm +51 -4
- data/bin/lib/Image/ExifTool/GPS.pm +21 -1
- data/bin/lib/Image/ExifTool/Geotag.pm +25 -5
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +3 -2
- data/bin/lib/Image/ExifTool/ICO.pm +143 -0
- data/bin/lib/Image/ExifTool/ID3.pm +6 -6
- data/bin/lib/Image/ExifTool/IPTC.pm +5 -1
- data/bin/lib/Image/ExifTool/LNK.pm +5 -2
- data/bin/lib/Image/ExifTool/M2TS.pm +98 -8
- data/bin/lib/Image/ExifTool/MIE.pm +9 -3
- data/bin/lib/Image/ExifTool/MISB.pm +494 -0
- data/bin/lib/Image/ExifTool/MakerNotes.pm +3 -1
- data/bin/lib/Image/ExifTool/Matroska.pm +24 -16
- data/bin/lib/Image/ExifTool/Motorola.pm +8 -2
- data/bin/lib/Image/ExifTool/Nikon.pm +288 -122
- data/bin/lib/Image/ExifTool/NikonSettings.pm +5 -3
- data/bin/lib/Image/ExifTool/Olympus.pm +3 -2
- data/bin/lib/Image/ExifTool/Panasonic.pm +21 -4
- data/bin/lib/Image/ExifTool/PanasonicRaw.pm +25 -5
- data/bin/lib/Image/ExifTool/Parrot.pm +96 -2
- data/bin/lib/Image/ExifTool/Pentax.pm +7 -2
- data/bin/lib/Image/ExifTool/Photoshop.pm +29 -3
- data/bin/lib/Image/ExifTool/QuickTime.pm +163 -13
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +119 -13
- data/bin/lib/Image/ExifTool/README +13 -3
- data/bin/lib/Image/ExifTool/RIFF.pm +106 -9
- data/bin/lib/Image/ExifTool/Samsung.pm +2 -2
- data/bin/lib/Image/ExifTool/Sigma.pm +27 -1
- data/bin/lib/Image/ExifTool/SigmaRaw.pm +37 -13
- data/bin/lib/Image/ExifTool/Sony.pm +71 -43
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +3 -1
- data/bin/lib/Image/ExifTool/TagLookup.pm +4737 -4517
- data/bin/lib/Image/ExifTool/TagNames.pod +1837 -1417
- data/bin/lib/Image/ExifTool/Text.pm +3 -4
- data/bin/lib/Image/ExifTool/Torrent.pm +2 -3
- data/bin/lib/Image/ExifTool/Validate.pm +3 -3
- data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +7 -0
- data/bin/lib/Image/ExifTool/WriteExif.pl +100 -23
- data/bin/lib/Image/ExifTool/WriteIPTC.pl +2 -6
- data/bin/lib/Image/ExifTool/WritePhotoshop.pl +5 -5
- data/bin/lib/Image/ExifTool/WriteRIFF.pl +359 -0
- data/bin/lib/Image/ExifTool/Writer.pl +13 -5
- data/bin/lib/Image/ExifTool/XMP.pm +78 -59
- data/bin/lib/Image/ExifTool/XMP2.pl +19 -4
- data/bin/lib/Image/ExifTool.pm +111 -24
- data/bin/lib/Image/ExifTool.pod +83 -69
- data/bin/perl-Image-ExifTool.spec +43 -43
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +9 -4
@@ -49,6 +49,7 @@
|
|
49
49
|
# 36) Hayo Baann (forum10207)
|
50
50
|
# 37) Tom Lachecki, private communication
|
51
51
|
# 38) https://github.com/exiftool/exiftool/pull/40 (and forum10893)
|
52
|
+
# 39) Stefan Grube private communication (Z9)
|
52
53
|
# IB) Iliah Borg private communication (LibRaw)
|
53
54
|
# JD) Jens Duttke private communication
|
54
55
|
# NJ) Niels Kristian Bech Jensen private communication
|
@@ -63,7 +64,7 @@ use Image::ExifTool::Exif;
|
|
63
64
|
use Image::ExifTool::GPS;
|
64
65
|
use Image::ExifTool::XMP;
|
65
66
|
|
66
|
-
$VERSION = '4.
|
67
|
+
$VERSION = '4.13';
|
67
68
|
|
68
69
|
sub LensIDConv($$$);
|
69
70
|
sub ProcessNikonAVI($$$);
|
@@ -363,6 +364,7 @@ sub GetAFPointGrid($$;$);
|
|
363
364
|
'26 58 37 37 14 14 1C 02' => 'Sigma 24mm F1.8 EX DG Aspherical Macro',
|
364
365
|
'E1 58 37 37 14 14 1C 02' => 'Sigma 24mm F1.8 EX DG Aspherical Macro',
|
365
366
|
'02 46 37 37 25 25 02 00' => 'Sigma 24mm F2.8 Super Wide II Macro',
|
367
|
+
'7E 54 37 37 0C 0C 4B 06' => 'Sigma 24mm F1.4 DG HSM | A', #30
|
366
368
|
'26 58 3C 3C 14 14 1C 02' => 'Sigma 28mm F1.8 EX DG Aspherical Macro',
|
367
369
|
'48 54 3E 3E 0C 0C 4B 06' => 'Sigma 30mm F1.4 EX DC HSM',
|
368
370
|
'F8 54 3E 3E 0C 0C 4B 06' => 'Sigma 30mm F1.4 EX DC HSM', #JD
|
@@ -606,6 +608,7 @@ sub GetAFPointGrid($$;$);
|
|
606
608
|
'CC 44 68 98 34 41 DF 0E' => 'Tamron 100-400mm f/4.5-6.3 Di VC USD', #30
|
607
609
|
'EB 40 76 A6 38 40 DF 0E' => 'Tamron SP AF 150-600mm f/5-6.3 VC USD (A011)',
|
608
610
|
'E3 40 76 A6 38 40 DF 4E' => 'Tamron SP 150-600mm f/5-6.3 Di VC USD G2', #30
|
611
|
+
'E3 40 76 A6 38 40 DF 0E' => 'Tamron SP 150-600mm f/5-6.3 Di VC USD G2 (A022)', #forum3833
|
609
612
|
'20 3C 80 98 3D 3D 1E 02' => 'Tamron AF 200-400mm f/5.6 LD IF (75D)',
|
610
613
|
'00 3E 80 A0 38 3F 00 02' => 'Tamron SP AF 200-500mm f/5-6.3 Di LD (IF) (A08)',
|
611
614
|
'00 3F 80 A0 38 3F 00 02' => 'Tamron SP AF 200-500mm f/5-6.3 Di (A08)',
|
@@ -668,6 +671,7 @@ sub GetAFPointGrid($$;$);
|
|
668
671
|
'00 40 64 64 2C 2C 00 00' => 'Voigtlander APO-Lanthar 90mm F3.5 SLII Close Focus',
|
669
672
|
'07 40 30 45 2D 35 03 02.2' => 'Voigtlander Ultragon 19-35mm F3.5-4.5 VMV', #NJ
|
670
673
|
'71 48 64 64 24 24 00 00' => 'Voigtlander APO-Skopar 90mm F2.8 SL IIs', #30
|
674
|
+
'FD 00 50 50 18 18 DF 00' => 'Voigtlander APO-Lanthar 50mm F2 Aspherical', #35
|
671
675
|
#
|
672
676
|
'00 40 2D 2D 2C 2C 00 00' => 'Carl Zeiss Distagon T* 3.5/18 ZF.2',
|
673
677
|
'00 48 27 27 24 24 00 00' => 'Carl Zeiss Distagon T* 2.8/15 ZF.2', #MykytaKozlov
|
@@ -855,7 +859,7 @@ my %focusModeZ7 = (
|
|
855
859
|
|
856
860
|
my %infoZSeries = (
|
857
861
|
Condition => '$$self{Model} =~ /^NIKON Z (5|50|6|6_2|7|7_2|fc|9)\b/i',
|
858
|
-
Notes => 'Z Series cameras thru
|
862
|
+
Notes => 'Z Series cameras thru December 2021',
|
859
863
|
);
|
860
864
|
my %iSOAutoHiLimitZ7 = (
|
861
865
|
0 => 'ISO 64',
|
@@ -1124,8 +1128,6 @@ my %afPoints153 = (
|
|
1124
1128
|
|
1125
1129
|
# AF point indices for models with 81 focus points, eg. Z6/Z7/Z50 (ref 38)
|
1126
1130
|
# - 9 rows (A-I) with 9 columns (1-9), center is E5
|
1127
|
-
# NOTE: the AF points start 2 bytes into the data, so the map starts
|
1128
|
-
# at 17 instead of 1
|
1129
1131
|
#
|
1130
1132
|
# 7 6 5 4 3 2 1 0
|
1131
1133
|
# 00 : [H5][G5][F5][A5][B5][C5][D5][E5]
|
@@ -1140,23 +1142,23 @@ my %afPoints153 = (
|
|
1140
1142
|
# 09 : [H1][G1][F1][A1][B1][C1][D1][E1]
|
1141
1143
|
# 0a : [ ][ ][ ][ ][ ][ ][ ][I1]
|
1142
1144
|
my %afPoints81 = (
|
1143
|
-
|
1144
|
-
|
1145
|
-
|
1146
|
-
|
1147
|
-
|
1148
|
-
|
1149
|
-
|
1150
|
-
|
1151
|
-
|
1152
|
-
|
1153
|
-
|
1154
|
-
|
1155
|
-
|
1156
|
-
|
1157
|
-
|
1158
|
-
|
1159
|
-
|
1145
|
+
1 => 'E5', 18 => 'I6', 35 => 'H7', 52 => 'G8', 69 => 'F9',
|
1146
|
+
2 => 'D5', 19 => 'E4', 36 => 'I7', 53 => 'H8', 70 => 'G9',
|
1147
|
+
3 => 'C5', 20 => 'D4', 37 => 'E3', 54 => 'I8', 71 => 'H9',
|
1148
|
+
4 => 'B5', 21 => 'C4', 38 => 'D3', 55 => 'E2', 72 => 'I9',
|
1149
|
+
5 => 'A5', 22 => 'B4', 39 => 'C3', 56 => 'D2', 73 => 'E1',
|
1150
|
+
6 => 'F5', 23 => 'A4', 40 => 'B3', 57 => 'C2', 74 => 'D1',
|
1151
|
+
7 => 'G5', 24 => 'F4', 41 => 'A3', 58 => 'B2', 75 => 'C1',
|
1152
|
+
8 => 'H5', 25 => 'G4', 42 => 'F3', 59 => 'A2', 76 => 'B1',
|
1153
|
+
9 => 'I5', 26 => 'H4', 43 => 'G3', 60 => 'F2', 77 => 'A1',
|
1154
|
+
10 => 'E6', 27 => 'I4', 44 => 'H3', 61 => 'G2', 78 => 'F1',
|
1155
|
+
11 => 'D6', 28 => 'E7', 45 => 'I3', 62 => 'H2', 79 => 'G1',
|
1156
|
+
12 => 'C6', 29 => 'D7', 46 => 'E8', 63 => 'I2', 80 => 'H1',
|
1157
|
+
13 => 'B6', 30 => 'C7', 47 => 'D8', 64 => 'E9', 81 => 'I1',
|
1158
|
+
14 => 'A6', 31 => 'B7', 48 => 'C8', 65 => 'D9',
|
1159
|
+
15 => 'F6', 32 => 'A7', 49 => 'B8', 66 => 'C9',
|
1160
|
+
16 => 'G6', 33 => 'F7', 50 => 'A8', 67 => 'B9',
|
1161
|
+
17 => 'H6', 34 => 'G7', 51 => 'F8', 68 => 'A9',
|
1160
1162
|
);
|
1161
1163
|
|
1162
1164
|
my %cropHiSpeed = ( #IB
|
@@ -1597,10 +1599,14 @@ my %base64coord = (
|
|
1597
1599
|
81 => 'Auto (Electronic Front Curtain)', #JanSkoda (Z6II)
|
1598
1600
|
},
|
1599
1601
|
},
|
1600
|
-
0x0035 => { #32
|
1602
|
+
0x0035 => [{ #32
|
1601
1603
|
Name => 'HDRInfo',
|
1604
|
+
Condition => '$count != 6',
|
1602
1605
|
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::HDRInfo' },
|
1603
|
-
},
|
1606
|
+
},{
|
1607
|
+
Name => 'HDRInfo2',
|
1608
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::HDRInfo2' },
|
1609
|
+
}],
|
1604
1610
|
0x0037 => { #XavierJubier
|
1605
1611
|
Name => 'MechanicalShutterCount',
|
1606
1612
|
Writable => 'int32u',
|
@@ -1623,6 +1629,11 @@ my %base64coord = (
|
|
1623
1629
|
3 => 'Small',
|
1624
1630
|
},
|
1625
1631
|
},
|
1632
|
+
0x003f => { #https://github.com/darktable-org/darktable/issues/12282
|
1633
|
+
Name => 'WhiteBalanceFineTune',
|
1634
|
+
Writable => 'rational64s',
|
1635
|
+
Count => 2,
|
1636
|
+
},
|
1626
1637
|
0x0045 => { #IB
|
1627
1638
|
Name => 'CropArea',
|
1628
1639
|
Notes => 'left, top, width, height',
|
@@ -2080,7 +2091,7 @@ my %base64coord = (
|
|
2080
2091
|
TagTable => 'Image::ExifTool::Nikon::ShotInfoZ9',
|
2081
2092
|
DecryptStart => 4,
|
2082
2093
|
# TODO: eventually set the length dynamically according to actual offsets!
|
2083
|
-
DecryptLen => 0xec4b +
|
2094
|
+
DecryptLen => 0xec4b + 2105, # decoded thru end of Offset26
|
2084
2095
|
ByteOrder => 'LittleEndian',
|
2085
2096
|
},
|
2086
2097
|
},
|
@@ -2481,6 +2492,12 @@ my %base64coord = (
|
|
2481
2492
|
TagTable => 'Image::ExifTool::Nikon::MultiExposure',
|
2482
2493
|
ByteOrder => 'LittleEndian',
|
2483
2494
|
},
|
2495
|
+
},{
|
2496
|
+
Name => 'MultiExposure2',
|
2497
|
+
Condition => '$$valPt =~ /^010[23]/', # 0102 is NC (PH)
|
2498
|
+
SubDirectory => {
|
2499
|
+
TagTable => 'Image::ExifTool::Nikon::MultiExposure2',
|
2500
|
+
},
|
2484
2501
|
}],
|
2485
2502
|
0x00b1 => { #14/PH/JD (D80)
|
2486
2503
|
Name => 'HighISONoiseReduction',
|
@@ -2797,10 +2814,10 @@ my %base64coord = (
|
|
2797
2814
|
Name => 'VRMode',
|
2798
2815
|
PrintConv => {
|
2799
2816
|
0 => 'Off',
|
2800
|
-
1 => 'Sport'
|
2801
|
-
3 => 'Normal'
|
2817
|
+
1 => 'Normal', #39 (was 'Sport')
|
2818
|
+
3 => 'Sport', #39 (was 'Normal')
|
2802
2819
|
},
|
2803
|
-
%infoZSeries
|
2820
|
+
%infoZSeries,
|
2804
2821
|
},{
|
2805
2822
|
Name => 'VRMode',
|
2806
2823
|
PrintConv => {
|
@@ -2811,6 +2828,13 @@ my %base64coord = (
|
|
2811
2828
|
},
|
2812
2829
|
}],
|
2813
2830
|
# 7 - values: 0, 1
|
2831
|
+
8 => { #39
|
2832
|
+
Name => 'VRType',
|
2833
|
+
PrintConv => {
|
2834
|
+
2 => 'In-body', # (IBIS)
|
2835
|
+
3 => 'In-body + Lens', # (IBIS + VR)
|
2836
|
+
},
|
2837
|
+
},
|
2814
2838
|
);
|
2815
2839
|
|
2816
2840
|
# Face detection information - PH (S8100)
|
@@ -3343,8 +3367,10 @@ my %base64coord = (
|
|
3343
3367
|
sprintf("%s%.2d:%.2d", $sign, $h, abs($val)-60*$h);
|
3344
3368
|
},
|
3345
3369
|
PrintConvInv => q{
|
3346
|
-
$val =~ /
|
3347
|
-
return $1 . ($2 * 60 + $3);
|
3370
|
+
$val =~ /Z$/ and return 0;
|
3371
|
+
$val =~ /([-+])(\d{1,2}):?(\d{2})$/ and return $1 . ($2 * 60 + $3);
|
3372
|
+
$val =~ /^(\d{2})(\d{2})$/ and return $1 * 60 + $2;
|
3373
|
+
return undef;
|
3348
3374
|
},
|
3349
3375
|
},
|
3350
3376
|
2 => {
|
@@ -3561,7 +3587,6 @@ my %base64coord = (
|
|
3561
3587
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
3562
3588
|
DATAMEMBER => [ 0, 4, 6 ],
|
3563
3589
|
NOTES => "These tags are written by Nikon DSLR's which have the live view feature.",
|
3564
|
-
# NOTE: Must set ByteOrder in SubDirectory if any multi-byte integer tags added
|
3565
3590
|
0 => {
|
3566
3591
|
Name => 'AFInfo2Version',
|
3567
3592
|
Format => 'undef[4]',
|
@@ -3672,7 +3697,7 @@ my %base64coord = (
|
|
3672
3697
|
{ #PH/JD
|
3673
3698
|
Name => 'PrimaryAFPoint',
|
3674
3699
|
# PrimaryAFPoint may only be valid for PhaseDetect - certainly true on the D6, possibly other bodies? (ref 28)
|
3675
|
-
Condition => '$$self{PhaseDetectAF} < 2 and $$self{AFInfo2Version}
|
3700
|
+
Condition => '$$self{PhaseDetectAF} < 2 and $$self{AFInfo2Version} !~ /^03/',
|
3676
3701
|
Notes => q{
|
3677
3702
|
models with 51-point AF -- 5 rows (A-E) and 11 columns (1-11): D3, D3S, D3X,
|
3678
3703
|
D4, D4S, D300, D300S, D700, D800, D800e and D810
|
@@ -3778,22 +3803,6 @@ my %base64coord = (
|
|
3778
3803
|
1 => 'E9 (Center)',
|
3779
3804
|
},
|
3780
3805
|
},
|
3781
|
-
{ #PH (Z7) (NC)
|
3782
|
-
Name => 'PrimaryAFPoint',
|
3783
|
-
Condition => '$$self{PhaseDetectAF} == 8 and $$self{AFInfo2Version} =~ /^03/',
|
3784
|
-
Notes => q{
|
3785
|
-
Nikon models with 493-point AF -- 17 rows (A-Q) and 29 columns (1-29), I15
|
3786
|
-
at the center
|
3787
|
-
},
|
3788
|
-
PrintConv => {
|
3789
|
-
0 => '(none)',
|
3790
|
-
246 => 'I15 (Center)',
|
3791
|
-
OTHER => sub {
|
3792
|
-
my ($val, $inv) = @_;
|
3793
|
-
return GetAFPointGrid($val, 29, $inv);
|
3794
|
-
},
|
3795
|
-
},
|
3796
|
-
},
|
3797
3806
|
{
|
3798
3807
|
Name => 'PrimaryAFPoint',
|
3799
3808
|
Condition => '$$self{AFInfo2Version} eq "0100"',
|
@@ -3807,7 +3816,7 @@ my %base64coord = (
|
|
3807
3816
|
8 => [
|
3808
3817
|
{ #JD/PH
|
3809
3818
|
Name => 'AFPointsUsed',
|
3810
|
-
Condition => '$$self{PhaseDetectAF} < 2 and $$self{AFInfo2Version}
|
3819
|
+
Condition => '$$self{PhaseDetectAF} < 2 and $$self{AFInfo2Version} !~ /^03/',
|
3811
3820
|
Notes => q{
|
3812
3821
|
models with 51-point AF -- 5 rows: A1-9, B1-11, C1-11, D1-11, E1-9. Center
|
3813
3822
|
point is C6
|
@@ -3911,33 +3920,78 @@ my %base64coord = (
|
|
3911
3920
|
PrintConv => sub { PrintAFPoints(shift, \%afPoints153); },
|
3912
3921
|
PrintConvInv => sub { PrintAFPointsInv(shift, \%afPoints153); },
|
3913
3922
|
},
|
3914
|
-
{ #38 (Z6/Z7/Z50)
|
3915
|
-
Name => 'AFPointsUsed',
|
3916
|
-
Condition => '$$self{PhaseDetectAF} == 8 and $$self{Model} =~ /^NIKON Z/',
|
3917
|
-
Notes => q{
|
3918
|
-
models with 81-selectable point AF -- 9 rows (A-I) and 9 columns (1-9) for
|
3919
|
-
phase detect AF points. Center point is E5
|
3920
|
-
},
|
3921
|
-
Format => 'undef[13]',
|
3922
|
-
ValueConv => 'join(" ", unpack("H2"x13, $val))',
|
3923
|
-
ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
|
3924
|
-
PrintConv => sub { PrintAFPoints(shift, \%afPoints81); },
|
3925
|
-
PrintConvInv => sub { PrintAFPointsInv(shift, \%afPoints81); },
|
3926
|
-
},
|
3927
3923
|
{ #PH
|
3928
3924
|
Name => 'AFPointsUsed',
|
3929
3925
|
# version 301 uses a separate field at offset 0x0a for this tag (ref 28)
|
3930
|
-
Condition => '$$self{AFInfo2Version}
|
3926
|
+
Condition => '$$self{AFInfo2Version} !~ /^03/',
|
3931
3927
|
Format => 'undef[7]',
|
3932
3928
|
ValueConv => 'join(" ", unpack("H2"x7, $val))',
|
3933
3929
|
ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
|
3934
3930
|
PrintConv => '"Unknown ($val)"',
|
3935
3931
|
PrintConvInv => '$val=~s/Unknown \\((.*)\\)/$1/; $val',
|
3936
3932
|
},
|
3933
|
+
{ #PH
|
3934
|
+
Name => 'PrimaryAFPoint',
|
3935
|
+
Condition => '$$self{PhaseDetectAF} == 1 and $$self{AFInfo2Version} =~ /^03/',
|
3936
|
+
Notes => 'newer models with 51-point AF',
|
3937
|
+
PrintConvColumns => 5,
|
3938
|
+
PrintConv => {
|
3939
|
+
0 => '(none)',
|
3940
|
+
%afPoints51,
|
3941
|
+
1 => 'C6 (Center)', # (add " (Center)" to central point)
|
3942
|
+
},
|
3943
|
+
},
|
3944
|
+
{ #PH (Z7)
|
3945
|
+
Name => 'PrimaryAFPoint',
|
3946
|
+
Condition => '$$self{PhaseDetectAF} == 8 and $$self{AFInfo2Version} =~ /^03/',
|
3947
|
+
PrintConv => {
|
3948
|
+
0 => '(none)',
|
3949
|
+
%afPoints81,
|
3950
|
+
1 => 'E5 (Center)', # (add " (Center)" to central point)
|
3951
|
+
},
|
3952
|
+
},
|
3953
|
+
# this was wrong, but keep the code as a comment in case it may be useful later
|
3954
|
+
#{ #PH (Z7) (NC)
|
3955
|
+
# Name => 'PrimaryAFPoint',
|
3956
|
+
# Condition => '$$self{PhaseDetectAF} == 8 and $$self{AFInfo2Version} =~ /^03/',
|
3957
|
+
# Notes => q{
|
3958
|
+
# Nikon models with 493-point AF -- 17 rows (A-Q) and 29 columns (1-29), I15
|
3959
|
+
# at the center
|
3960
|
+
# },
|
3961
|
+
# PrintConv => {
|
3962
|
+
# 0 => '(none)',
|
3963
|
+
# 246 => 'I15 (Center)',
|
3964
|
+
# OTHER => sub {
|
3965
|
+
# my ($val, $inv) = @_;
|
3966
|
+
# return GetAFPointGrid($val, 29, $inv);
|
3967
|
+
# },
|
3968
|
+
# },
|
3969
|
+
#},
|
3937
3970
|
],
|
3938
|
-
0x0a => { #
|
3939
|
-
|
3940
|
-
Condition => '$$self{
|
3971
|
+
0x0a => [{ #PH (D780)
|
3972
|
+
Name => 'AFPointsUsed',
|
3973
|
+
Condition => '$$self{PhaseDetectAF} == 1 and $$self{AFInfo2Version} =~ /^03/',
|
3974
|
+
Notes => 'newer models with 51-point AF',
|
3975
|
+
Format => 'undef[7]',
|
3976
|
+
ValueConv => 'join(" ", unpack("H2"x7, $val))',
|
3977
|
+
ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
|
3978
|
+
PrintConv => sub { PrintAFPoints(shift, \%afPoints51); },
|
3979
|
+
PrintConvInv => sub { PrintAFPointsInv(shift, \%afPoints51); },
|
3980
|
+
},{ #38 (Z6/Z7/Z50)
|
3981
|
+
Name => 'AFPointsUsed',
|
3982
|
+
Condition => '$$self{PhaseDetectAF} == 8 and $$self{AFInfo2Version} =~ /^03/',
|
3983
|
+
Notes => q{
|
3984
|
+
models with 81-selectable point AF -- 9 rows (A-I) and 9 columns (1-9) for
|
3985
|
+
phase detect AF points. Center point is E5
|
3986
|
+
},
|
3987
|
+
Format => 'undef[11]',
|
3988
|
+
ValueConv => 'join(" ", unpack("H2"x11, $val))',
|
3989
|
+
ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
|
3990
|
+
PrintConv => sub { PrintAFPoints(shift, \%afPoints81); },
|
3991
|
+
PrintConvInv => sub { PrintAFPointsInv(shift, \%afPoints81); },
|
3992
|
+
},{ #28 (D6) in any of the 3 Group modes on the D6, the points specify the outer boundaries of the focus point area; otherwise the tag value is consistent with other Nikon bodies
|
3993
|
+
Name => 'AFPointsUsed',
|
3994
|
+
Condition => '$$self{PhaseDetectAF} == 9 and $$self{AFInfo2Version} =~ /^03/',
|
3941
3995
|
Notes => q{
|
3942
3996
|
models with 105-point AF -- 7 rows (A-G) and 15 columns (1-15). Center
|
3943
3997
|
point is D8
|
@@ -3947,7 +4001,7 @@ my %base64coord = (
|
|
3947
4001
|
ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
|
3948
4002
|
PrintConv => sub { PrintAFPoints(shift, \%afPoints105); },
|
3949
4003
|
PrintConvInv => sub { PrintAFPointsInv(shift, \%afPoints105); },
|
3950
|
-
},
|
4004
|
+
}],
|
3951
4005
|
0x10 => { #PH (D90 and D5000)
|
3952
4006
|
Name => 'AFImageWidth',
|
3953
4007
|
Condition => '$$self{AFInfo2Version} eq "0100"',
|
@@ -4026,7 +4080,7 @@ my %base64coord = (
|
|
4026
4080
|
},
|
4027
4081
|
Format => 'int16u',
|
4028
4082
|
},
|
4029
|
-
0x2f => { #28 (Z7)
|
4083
|
+
0x2f => { #28 (Z7) Still photography range 1-17 for the 493 point Z7 (arranged in a 29x17 grid. Center at x=16, y=10).
|
4030
4084
|
Name => 'AFFocusPointXPosition',
|
4031
4085
|
Condition => q{
|
4032
4086
|
$$self{ContrastDetectAF} == 2 and $$self{AFInfo2Version} =~ /^03/ or
|
@@ -4174,7 +4228,7 @@ my %base64coord = (
|
|
4174
4228
|
},
|
4175
4229
|
);
|
4176
4230
|
|
4177
|
-
%Image::ExifTool::Nikon::AFInfo2V0400 = ( #V0400 related fields begin at x'3c'
|
4231
|
+
%Image::ExifTool::Nikon::AFInfo2V0400 = ( #V0400 related fields begin at x'3c' (Z9)
|
4178
4232
|
%binaryDataAttrs,
|
4179
4233
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
4180
4234
|
DATAMEMBER => [ 0 ],
|
@@ -4194,11 +4248,19 @@ my %base64coord = (
|
|
4194
4248
|
},
|
4195
4249
|
0x43 => {
|
4196
4250
|
Name => 'FocusPositionHorizontal',
|
4197
|
-
|
4251
|
+
Notes => q{
|
4252
|
+
the focus points form a 29x17 grid, but the X,Y coordinate values run from 1,1
|
4253
|
+
to 30,19. The horizontal coordinate 11R (5) and the vertical coordinates 6U
|
4254
|
+
(4) and 2D (12) are not used for some reason
|
4255
|
+
},
|
4256
|
+
# 493 focus points for Z9 fall in a 30x19 grid
|
4257
|
+
# (the 11R (5) position is not used, for a total of 29 columns, ref AlbertShan email)
|
4258
|
+
PrintConv => sub { my ($val) = @_; PrintAFPointsLeftRight($val, 29); },
|
4198
4259
|
},
|
4199
4260
|
0x45 => {
|
4200
4261
|
Name => 'FocusPositionVertical',
|
4201
|
-
|
4262
|
+
# (the 6U (4) and 2D (12) are not used, for a total of 17 rows, ref AlbertShan email)
|
4263
|
+
PrintConv => sub { my ($val) = @_; PrintAFPointsUpDown($val, 17); },
|
4202
4264
|
},
|
4203
4265
|
0x46 => {
|
4204
4266
|
Name => 'AFAreaWidth',
|
@@ -4210,9 +4272,13 @@ my %base64coord = (
|
|
4210
4272
|
Name => 'AFAreaHeight',
|
4211
4273
|
Format => 'int16u',
|
4212
4274
|
RawConv => '$val ? $val : undef',
|
4213
|
-
}
|
4214
|
-
|
4215
|
-
|
4275
|
+
},
|
4276
|
+
0x4a => {
|
4277
|
+
Name => 'FocusResult',
|
4278
|
+
# in Manual Foucs mode, reflects the state of viewfinder focus indicator.
|
4279
|
+
# In AF-C or AF-S, reflects the result of the last AF operation.
|
4280
|
+
PrintConv => { 0=> "Out of Focus", 1=>"Focus"},
|
4281
|
+
},
|
4216
4282
|
);
|
4217
4283
|
|
4218
4284
|
# Nikon AF fine-tune information (ref 28)
|
@@ -4858,7 +4924,7 @@ my %nikonFocalConversions = (
|
|
4858
4924
|
%binaryDataAttrs,
|
4859
4925
|
NOTES => 'Tags found in the encrypted LensData from cameras such as the Z6 and Z7.',
|
4860
4926
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
4861
|
-
DATAMEMBER => [ 0x03, 0x2f ],
|
4927
|
+
DATAMEMBER => [ 0x03, 0x2f, 0x35, 0x4c, 0x56 ],
|
4862
4928
|
0x00 => {
|
4863
4929
|
Name => 'LensDataVersion',
|
4864
4930
|
Format => 'string[4]',
|
@@ -4884,12 +4950,12 @@ my %nikonFocalConversions = (
|
|
4884
4950
|
%nikonApertureConversions,
|
4885
4951
|
},
|
4886
4952
|
# --> another extra byte at position 0x08 in this version of LensData (PH)
|
4887
|
-
0x09 => {
|
4888
|
-
|
4889
|
-
|
4890
|
-
|
4891
|
-
|
4892
|
-
},
|
4953
|
+
#0x09 => {
|
4954
|
+
# Name => 'FocusPosition', #28 - this appears to be copied from an older version of LensData and is no longer valid. Text with Z9 and Z7_2 with a variety of lenses
|
4955
|
+
# Condition => '$$self{OldLensData}',
|
4956
|
+
# PrintConv => 'sprintf("0x%02x", $val)',
|
4957
|
+
# PrintConvInv => '$val',
|
4958
|
+
#},
|
4893
4959
|
0x0b => {
|
4894
4960
|
Notes => 'this focus distance is approximate, and not very accurate for some lenses',
|
4895
4961
|
Name => 'FocusDistance',
|
@@ -4948,7 +5014,8 @@ my %nikonFocalConversions = (
|
|
4948
5014
|
%nikonApertureConversions,
|
4949
5015
|
},
|
4950
5016
|
#
|
4951
|
-
# ---- new LensData tags used by Nikkor Z
|
5017
|
+
# ---- new LensData tags used by Nikkor Z cameras (ref PH/28). ----
|
5018
|
+
# (some fields are strictly for Z-series lenses, others apply to legacy F-mount as well, ref 28)
|
4952
5019
|
#
|
4953
5020
|
0x2f => { # look forward to see if new lens data exists...
|
4954
5021
|
Name => 'NewLensData',
|
@@ -4956,7 +5023,7 @@ my %nikonFocalConversions = (
|
|
4956
5023
|
RawConv => '$$self{NewLensData} = 1 unless $val =~ /^.\0+$/s; undef',
|
4957
5024
|
Hidden => 1,
|
4958
5025
|
},
|
4959
|
-
0x30 => {
|
5026
|
+
0x30 => { #PH
|
4960
5027
|
Name => 'LensID',
|
4961
5028
|
Condition => '$$self{NewLensData}',
|
4962
5029
|
Notes => 'tags from here onward used for Nikkor Z lenses only',
|
@@ -4982,9 +5049,23 @@ my %nikonFocalConversions = (
|
|
4982
5049
|
27 => 'Nikkor Z MC 50mm f/2.8', #IB
|
4983
5050
|
28 => 'Nikkor Z 100-400mm f/4.5-5.6 VR S', #28
|
4984
5051
|
29 => 'Nikkor Z 28mm f/2.8', #IB
|
5052
|
+
30 => 'Nikkor Z 400mm f/2.8 TC VR S', #28
|
5053
|
+
31 => 'Nikkor Z 24-120 f/4', #28
|
5054
|
+
32 => 'Nikkor Z 800mm f/6.3 VR S', #28
|
5055
|
+
36 => 'Nikkor Z 400mm f/4.5 VR S', #IB
|
4985
5056
|
},
|
4986
5057
|
},
|
4987
|
-
|
5058
|
+
0x35 => { #28
|
5059
|
+
Name => 'LensMountType',
|
5060
|
+
RawConv => '$$self{LensMountType} = $val', # 0=> DSLR lens via FTZ style adapter; 1=> Native Z lens;
|
5061
|
+
Format => 'int8u',
|
5062
|
+
Unknown => 1,
|
5063
|
+
PrintConv => {
|
5064
|
+
0 => 'F-mount Lens',
|
5065
|
+
1 => 'Z-mount Lens',
|
5066
|
+
},
|
5067
|
+
},
|
5068
|
+
0x36 => { #PH
|
4988
5069
|
Name => 'MaxAperture',
|
4989
5070
|
Condition => '$$self{NewLensData}',
|
4990
5071
|
Format => 'int16u',
|
@@ -4994,7 +5075,7 @@ my %nikonFocalConversions = (
|
|
4994
5075
|
PrintConv => 'sprintf("%.1f",$val)',
|
4995
5076
|
PrintConvInv => '$val',
|
4996
5077
|
},
|
4997
|
-
0x38 => {
|
5078
|
+
0x38 => { #PH
|
4998
5079
|
Name => 'FNumber',
|
4999
5080
|
Condition => '$$self{NewLensData}',
|
5000
5081
|
Format => 'int16u',
|
@@ -5004,7 +5085,7 @@ my %nikonFocalConversions = (
|
|
5004
5085
|
PrintConv => 'sprintf("%.1f",$val)',
|
5005
5086
|
PrintConvInv => '$val',
|
5006
5087
|
},
|
5007
|
-
0x3c => {
|
5088
|
+
0x3c => { #PH
|
5008
5089
|
Name => 'FocalLength',
|
5009
5090
|
Condition => '$$self{NewLensData}',
|
5010
5091
|
Format => 'int16u',
|
@@ -5012,14 +5093,36 @@ my %nikonFocalConversions = (
|
|
5012
5093
|
PrintConv => '"$val mm"',
|
5013
5094
|
PrintConvInv => '$val=~s/\s*mm$//;$val',
|
5014
5095
|
},
|
5015
|
-
|
5096
|
+
0x4c => { #28
|
5097
|
+
Name => 'FocusDistanceRangeWidth', #reflects the number of discrete absolute lens positions that are mapped to the reported FocusDistance. Will be 1 near CFD reflecting very narrow focus distance bands (i.e., quite accurate). Near Infinity will be something like 32. Note: 0 at infinity.
|
5098
|
+
Format => 'int8u',
|
5099
|
+
Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1',
|
5100
|
+
RawConv => '$$self{FocusDistanceRangeWidth} = $val',
|
5101
|
+
Unknown => 1,
|
5102
|
+
},
|
5103
|
+
0x4e => { #28
|
5016
5104
|
Name => 'FocusDistance',
|
5017
|
-
|
5018
|
-
|
5105
|
+
Format => 'int16u',
|
5106
|
+
Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1',
|
5107
|
+
RawConv => '$val = $val/256', # 1st byte is the fractional component. This byte was not previously considered in the legacy calculation (which only used the 2nd byte). When 2nd byte < 80; distance is < 1 meter
|
5019
5108
|
ValueConv => '0.01 * 10**($val/40)', # in m
|
5020
5109
|
ValueConvInv => '$val>0 ? 40*log($val*100)/log(10) : 0',
|
5021
|
-
PrintConv =>
|
5022
|
-
|
5110
|
+
PrintConv => q{
|
5111
|
+
(defined $$self{FocusDistanceRangeWidth} and not $$self{FocusDistanceRangeWidth}) ? "Inf" : $val < 1 ? $val < 0.35 ? sprintf("%.4f m", $val): sprintf("%.3f m", $val): sprintf("%.2f m", $val), #distances less than 35mm are quite accurate with increasingly less precision past 1m
|
5112
|
+
},
|
5113
|
+
},
|
5114
|
+
0x56 => { #28
|
5115
|
+
Name => 'LensDriveEnd', # byte contains: 1 at CFD/MOD; 2 at Infinity; 0 otherwise
|
5116
|
+
Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1',
|
5117
|
+
Format => 'int8u',
|
5118
|
+
RawConv => 'unless (defined $$self{FocusDistanceRangeWidth} and not $$self{FocusDistanceRangeWidth}) { if ($val == 0 ) {$$self{LensDriveEnd} = "No"} else { $$self{LensDriveEnd} = "CFD"}; } else{ $$self{LensDriveEnd} = "Inf"}',
|
5119
|
+
Unknown => 1,
|
5120
|
+
},
|
5121
|
+
0x5a => { #28
|
5122
|
+
Name => 'LensPositionAbsolute', # <=0 at infinity. Typical value at CFD might be 58000. Only valid for Z-mount lenses.
|
5123
|
+
Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1',
|
5124
|
+
Format => 'int32s',
|
5125
|
+
Unknown => 1,
|
5023
5126
|
},
|
5024
5127
|
);
|
5025
5128
|
|
@@ -5422,14 +5525,14 @@ my %nikonFocalConversions = (
|
|
5422
5525
|
},
|
5423
5526
|
0x27d => {
|
5424
5527
|
Name => 'ShutterCount',
|
5425
|
-
Condition => '$$self{FirmwareVersion} =~ /^1
|
5528
|
+
Condition => '$$self{FirmwareVersion} =~ /^1\.01/',
|
5426
5529
|
Notes => 'firmware 1.10',
|
5427
5530
|
Format => 'int32u',
|
5428
5531
|
Priority => 0,
|
5429
5532
|
},
|
5430
5533
|
0x27f => {
|
5431
5534
|
Name => 'ShutterCount',
|
5432
|
-
Condition => '$$self{FirmwareVersion} =~ /^2
|
5535
|
+
Condition => '$$self{FirmwareVersion} =~ /^2\.0/',
|
5433
5536
|
Notes => 'firmware 2.00, 2.01 and 2.02',
|
5434
5537
|
Format => 'int32u',
|
5435
5538
|
Priority => 0,
|
@@ -7323,7 +7426,7 @@ my %nikonFocalConversions = (
|
|
7323
7426
|
# (moves around too much and doesn't fit cleanly in the offset table)
|
7324
7427
|
#0x38be => {
|
7325
7428
|
# Name => 'Rotation',
|
7326
|
-
# Condition => '$$self{FirmwareVersion} =~ /^1
|
7429
|
+
# Condition => '$$self{FirmwareVersion} =~ /^1\.0/',
|
7327
7430
|
# Mask => 0x30,
|
7328
7431
|
# PrintConv => {
|
7329
7432
|
# 0 => 'Horizontal',
|
@@ -7629,7 +7732,7 @@ my %nikonFocalConversions = (
|
|
7629
7732
|
},
|
7630
7733
|
0x189d => { #PH (NC)
|
7631
7734
|
Name => 'CustomSettingsD4S',
|
7632
|
-
Condition => '$$self{FirmwareVersion} =~ /^1
|
7735
|
+
Condition => '$$self{FirmwareVersion} =~ /^1\.00/',
|
7633
7736
|
Notes => 'firmware version 1.00',
|
7634
7737
|
Format => 'undef[56]',
|
7635
7738
|
SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsD4' },
|
@@ -7637,7 +7740,7 @@ my %nikonFocalConversions = (
|
|
7637
7740
|
0x18c2 => { # CSf1-c (no idea why it is so far away from the rest of the settings)
|
7638
7741
|
Name => 'MultiSelectorLiveViewMode',
|
7639
7742
|
Groups => { 1 => 'NikonCustom' },
|
7640
|
-
Condition => '$$self{FirmwareVersion} !~ /^1
|
7743
|
+
Condition => '$$self{FirmwareVersion} !~ /^1\.00/',
|
7641
7744
|
Mask => 0xc0,
|
7642
7745
|
PrintConv => {
|
7643
7746
|
0 => 'Reset',
|
@@ -7738,7 +7841,7 @@ my %nikonFocalConversions = (
|
|
7738
7841
|
},
|
7739
7842
|
0x193d => {
|
7740
7843
|
Name => 'CustomSettingsD4S',
|
7741
|
-
Condition => '$$self{FirmwareVersion} !~ /^1
|
7844
|
+
Condition => '$$self{FirmwareVersion} !~ /^1\.00/',
|
7742
7845
|
Notes => 'firmware version 1.01',
|
7743
7846
|
Format => 'undef[56]',
|
7744
7847
|
SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsD4' },
|
@@ -7991,8 +8094,8 @@ my %nikonFocalConversions = (
|
|
7991
8094
|
WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted,
|
7992
8095
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
7993
8096
|
VARS => { ID_LABEL => 'Index' },
|
7994
|
-
DATAMEMBER => [ 0x04, 0x30, 0x38, 0x84, 0x8c, 0x6c6f, 0x6c98,
|
7995
|
-
0x6c9a,
|
8097
|
+
DATAMEMBER => [ 0x04, 0x30, 0x38, 0x84, 0x8c, 0x6c6f, 0x6c90, 0x6c98,
|
8098
|
+
0x6c9a, 0xeaea, 0xeb6f, 0xeb70 ],
|
7996
8099
|
IS_SUBDIR => [ 0xec4b ],
|
7997
8100
|
WRITABLE => 1,
|
7998
8101
|
FIRST_ENTRY => 0,
|
@@ -8069,6 +8172,15 @@ my %nikonFocalConversions = (
|
|
8069
8172
|
# account for variable location of Offset3 data
|
8070
8173
|
Hook => '$varSize = $$self{Offset3} - 0x6c70',
|
8071
8174
|
},
|
8175
|
+
0x6c90 => {
|
8176
|
+
Name => 'FocusShiftShooting',
|
8177
|
+
RawConv => '$$self{FocusShiftShooting} = $val',
|
8178
|
+
PrintConv => q{
|
8179
|
+
return 'Off' if $val == 0 ;
|
8180
|
+
my $i = sprintf("Frame %.0f of %.0f",$val, $$self{FocusShiftNumberShots}); # something like Frame 1 of 100"
|
8181
|
+
return "On: $i"
|
8182
|
+
},
|
8183
|
+
},
|
8072
8184
|
0x6c98 => {
|
8073
8185
|
Name => 'IntervalShooting',
|
8074
8186
|
RawConv => '$$self{IntervalShooting} = $val',
|
@@ -8088,23 +8200,6 @@ my %nikonFocalConversions = (
|
|
8088
8200
|
Format => 'int16u',
|
8089
8201
|
Hidden => 1,
|
8090
8202
|
},
|
8091
|
-
### 0x7718 - Offset5 info start (Z9 firmware 1.00)
|
8092
|
-
0x7717 => {
|
8093
|
-
Name => 'Offsset5Hook',
|
8094
|
-
Hidden => 1,
|
8095
|
-
RawConv => 'undef',
|
8096
|
-
# account for variable location of Offset5 data
|
8097
|
-
Hook => '$varSize = $$self{Offset5} - 0x7718',
|
8098
|
-
},
|
8099
|
-
0x7844 => {
|
8100
|
-
Name => 'FocusShiftShooting',
|
8101
|
-
RawConv => '$$self{FocusShiftShooting} = $val',
|
8102
|
-
PrintConv => q{
|
8103
|
-
return 'Off' if $val == 0 ;
|
8104
|
-
my $i = sprintf("Frame %.0f of %.0f",$val, $$self{FocusShiftNumberShots}); # something like Frame 1 of 100"
|
8105
|
-
return "On: $i"
|
8106
|
-
},
|
8107
|
-
},
|
8108
8203
|
### 0xeaeb - OrientationInfo start (Z9 firmware 1.00)
|
8109
8204
|
0xeaea => {
|
8110
8205
|
Name => 'OrientationHook',
|
@@ -8158,6 +8253,7 @@ my %nikonFocalConversions = (
|
|
8158
8253
|
0xec4b => {
|
8159
8254
|
Name => 'MenuSettingsZ9',
|
8160
8255
|
Format => 'undef[1646]',
|
8256
|
+
Condition => '$$self{FirmwareVersion} lt "03.00"',
|
8161
8257
|
SubDirectory => {
|
8162
8258
|
TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ9',
|
8163
8259
|
},
|
@@ -8744,13 +8840,18 @@ my %nikonFocalConversions = (
|
|
8744
8840
|
6 => '+08:00 (Beijing, Honk Kong, Sinapore)',
|
8745
8841
|
10 => '+05:45 (Kathmandu)',
|
8746
8842
|
11 => '+05:30 (New Dehli)',
|
8843
|
+
12 => '+05:00 (Islamabad)',
|
8844
|
+
13 => '+04:30 (Kabul)',
|
8845
|
+
14 => '+04:00 (Abu Dhabi)',
|
8846
|
+
15 => '+03:30 (Tehran)',
|
8747
8847
|
16 => '+03:00 (Moscow, Nairobi)',
|
8748
|
-
15 => '+02:00 (Athens)',
|
8749
|
-
16 => '+01:00 (Madrid, Paris, Berlin)',
|
8750
8848
|
17 => '+02:00 (Athens, Helsinki)',
|
8751
|
-
18 => '+
|
8752
|
-
19 => '+00:00
|
8849
|
+
18 => '+01:00 (Madrid, Paris, Berlin)',
|
8850
|
+
19 => '+00:00 (London)',
|
8851
|
+
20 => '-01:00 (Azores)',
|
8852
|
+
21 => '-02:00 (Fernando de Noronha)',
|
8753
8853
|
22 => '-03:00 (Buenos Aires, Sao Paulo)',
|
8854
|
+
23 => '-03:30 (Newfoundland)',
|
8754
8855
|
24 => '-04:00 (Manaus, Caracas)',
|
8755
8856
|
25 => '-05:00 (New York, Toronto, Lima)',
|
8756
8857
|
26 => '-06:00 (Chicago, Mexico City)',
|
@@ -10076,6 +10177,36 @@ my %nikonFocalConversions = (
|
|
10076
10177
|
},
|
10077
10178
|
);
|
10078
10179
|
|
10180
|
+
# Multi exposure2 / image overlay information (ref 39)
|
10181
|
+
%Image::ExifTool::Nikon::MultiExposure2 = (
|
10182
|
+
%binaryDataAttrs,
|
10183
|
+
FORMAT => 'int32u',
|
10184
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
10185
|
+
0 => {
|
10186
|
+
Name => 'MultiExposureVersion',
|
10187
|
+
Format => 'string[4]',
|
10188
|
+
Writable => 0,
|
10189
|
+
},
|
10190
|
+
1 => {
|
10191
|
+
Name => 'MultiExposureMode',
|
10192
|
+
PrintConv => {
|
10193
|
+
0 => 'Off',
|
10194
|
+
1 => 'Multiple Exposure',
|
10195
|
+
3 => 'HDR',
|
10196
|
+
},
|
10197
|
+
},
|
10198
|
+
2 => 'MultiExposureShots',
|
10199
|
+
3 => {
|
10200
|
+
Name => 'MultiExposureOverlayMode',
|
10201
|
+
PrintConv => {
|
10202
|
+
0 => 'Add',
|
10203
|
+
1 => 'Average',
|
10204
|
+
2 => 'Light',
|
10205
|
+
3 => 'Dark',
|
10206
|
+
},
|
10207
|
+
},
|
10208
|
+
);
|
10209
|
+
|
10079
10210
|
# HDR information (ref 32)
|
10080
10211
|
%Image::ExifTool::Nikon::HDRInfo = (
|
10081
10212
|
%binaryDataAttrs,
|
@@ -10084,12 +10215,13 @@ my %nikonFocalConversions = (
|
|
10084
10215
|
0 => {
|
10085
10216
|
Name => 'HDRInfoVersion',
|
10086
10217
|
Format => 'string[4]',
|
10218
|
+
Writable => 0,
|
10087
10219
|
},
|
10088
10220
|
4 => {
|
10089
10221
|
Name => 'HDR',
|
10090
10222
|
PrintConv => {
|
10091
10223
|
0 => 'Off',
|
10092
|
-
1 => 'On',
|
10224
|
+
1 => 'On (normal)',
|
10093
10225
|
48 => 'Auto', #PH (NC)
|
10094
10226
|
},
|
10095
10227
|
},
|
@@ -10127,6 +10259,35 @@ my %nikonFocalConversions = (
|
|
10127
10259
|
},
|
10128
10260
|
);
|
10129
10261
|
|
10262
|
+
# ref 39 (Z9)
|
10263
|
+
%Image::ExifTool::Nikon::HDRInfo2 = (
|
10264
|
+
%binaryDataAttrs,
|
10265
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
|
10266
|
+
0 => {
|
10267
|
+
Name => 'HDRInfoVersion', # 0200
|
10268
|
+
Format => 'string[4]',
|
10269
|
+
Writable => 0,
|
10270
|
+
},
|
10271
|
+
4 => {
|
10272
|
+
Name => 'HDR',
|
10273
|
+
PrintConv => {
|
10274
|
+
0 => 'Off',
|
10275
|
+
1 => 'On (normal)',
|
10276
|
+
},
|
10277
|
+
},
|
10278
|
+
5 => {
|
10279
|
+
Name => 'HDRLevel',
|
10280
|
+
PrintConv => {
|
10281
|
+
0 => 'n/a',
|
10282
|
+
1 => 'Normal',
|
10283
|
+
2 => 'Low',
|
10284
|
+
3 => 'High',
|
10285
|
+
4 => 'High+',
|
10286
|
+
5 => 'Auto',
|
10287
|
+
},
|
10288
|
+
},
|
10289
|
+
);
|
10290
|
+
|
10130
10291
|
# location information (ref PH)
|
10131
10292
|
%Image::ExifTool::Nikon::LocationInfo = (
|
10132
10293
|
%binaryDataAttrs,
|
@@ -10847,9 +11008,14 @@ my %nikonFocalConversions = (
|
|
10847
11008
|
Name => 'LocationInfo',
|
10848
11009
|
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::LocationInfo' },
|
10849
11010
|
},
|
11011
|
+
0x200003f => 'WhiteBalanceFineTune',
|
10850
11012
|
# 0x200003f - rational64s[2]: "0 0"
|
10851
11013
|
# 0x2000042 - undef[6]: "0100\x03\0"
|
10852
11014
|
# 0x2000043 - undef[12]: all zeros
|
11015
|
+
0x200004e => {
|
11016
|
+
Name => 'NikonSettings',
|
11017
|
+
SubDirectory => { TagTable => 'Image::ExifTool::NikonSettings::Main' },
|
11018
|
+
},
|
10853
11019
|
0x2000083 => {
|
10854
11020
|
Name => 'LensType',
|
10855
11021
|
# credit to Tom Christiansen (ref 7) for figuring this out...
|
@@ -11316,7 +11482,7 @@ sub PrintAFPointsGridInv($$$)
|
|
11316
11482
|
#------------------------------------------------------------------------------
|
11317
11483
|
# Print conversion for relative Left/Right AF points (ref 28)
|
11318
11484
|
# Inputs: 0) column, 1) number of columns
|
11319
|
-
# Returns: AF point data as a string (e.g. '2L' or 'C' or '3R')
|
11485
|
+
# Returns: AF point data as a string (e.g. '2L of Center' or 'C' or '3R of Center')
|
11320
11486
|
sub PrintAFPointsLeftRight($$)
|
11321
11487
|
{
|
11322
11488
|
my ($col, $ncol) = @_;
|
@@ -11329,7 +11495,7 @@ sub PrintAFPointsLeftRight($$)
|
|
11329
11495
|
#------------------------------------------------------------------------------
|
11330
11496
|
# Print conversion for relative Up/Down AF points (ref 28)
|
11331
11497
|
# Inputs: 0) row, 1) number of rows
|
11332
|
-
# Returns: AF point data as a string (e.g. '2U' or 'C' or '3D')
|
11498
|
+
# Returns: AF point data as a string (e.g. '2U from Center' or 'C' or '3D from Center')
|
11333
11499
|
sub PrintAFPointsUpDown($$)
|
11334
11500
|
{
|
11335
11501
|
my ($row, $nrow) = @_;
|