exiftool_vendored 13.31.0 → 13.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/Changes +56 -1
- data/bin/MANIFEST +5 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +47 -46
- data/bin/exiftool +114 -89
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +7 -5
- data/bin/lib/Image/ExifTool/Canon.pm +19 -2
- data/bin/lib/Image/ExifTool/Exif.pm +9 -6
- data/bin/lib/Image/ExifTool/FlashPix.pm +4 -159
- data/bin/lib/Image/ExifTool/FujiFilm.pm +11 -3
- data/bin/lib/Image/ExifTool/Geotag.pm +5 -3
- data/bin/lib/Image/ExifTool/GoPro.pm +14 -2
- data/bin/lib/Image/ExifTool/LNK.pm +4 -1
- data/bin/lib/Image/ExifTool/Lang/cs.pm +0 -1
- data/bin/lib/Image/ExifTool/Lang/de.pm +0 -1
- data/bin/lib/Image/ExifTool/Lang/fr.pm +0 -1
- data/bin/lib/Image/ExifTool/Lang/it.pm +0 -1
- data/bin/lib/Image/ExifTool/Lang/ja.pm +0 -1
- data/bin/lib/Image/ExifTool/Lang/nl.pm +0 -1
- data/bin/lib/Image/ExifTool/Lang/pl.pm +0 -1
- data/bin/lib/Image/ExifTool/Lang/zh_cn.pm +0 -1
- data/bin/lib/Image/ExifTool/Microsoft.pm +158 -1
- data/bin/lib/Image/ExifTool/Minolta.pm +4 -2
- data/bin/lib/Image/ExifTool/Nikon.pm +72 -37
- data/bin/lib/Image/ExifTool/NikonCustom.pm +40 -10
- data/bin/lib/Image/ExifTool/Olympus.pm +254 -34
- data/bin/lib/Image/ExifTool/Panasonic.pm +3 -3
- data/bin/lib/Image/ExifTool/Pentax.pm +340 -61
- data/bin/lib/Image/ExifTool/QuickTime.pm +11 -4
- data/bin/lib/Image/ExifTool/README +2 -1
- data/bin/lib/Image/ExifTool/Sony.pm +44 -17
- data/bin/lib/Image/ExifTool/TNEF.pm +487 -0
- data/bin/lib/Image/ExifTool/TagLookup.pm +4380 -4265
- data/bin/lib/Image/ExifTool/TagNames.pod +265 -19
- data/bin/lib/Image/ExifTool/WriteExif.pl +14 -12
- data/bin/lib/Image/ExifTool/Writer.pl +19 -15
- data/bin/lib/Image/ExifTool/XMPStruct.pl +1 -1
- data/bin/lib/Image/ExifTool.pm +12 -4
- data/bin/lib/Image/ExifTool.pod +50 -44
- data/bin/perl-Image-ExifTool.spec +46 -45
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +3 -2
@@ -60,12 +60,12 @@ package Image::ExifTool::Nikon;
|
|
60
60
|
use strict;
|
61
61
|
use vars qw($VERSION %nikonLensIDs %nikonTextEncoding);
|
62
62
|
use Image::ExifTool qw(:DataAccess :Utils);
|
63
|
-
use Image::ExifTool::NikonCustom qw(%buttonsZ9);
|
63
|
+
use Image::ExifTool::NikonCustom qw(%buttonsZ8 %buttonsZ9);
|
64
64
|
use Image::ExifTool::Exif;
|
65
65
|
use Image::ExifTool::GPS;
|
66
66
|
use Image::ExifTool::XMP;
|
67
67
|
|
68
|
-
$VERSION = '4.
|
68
|
+
$VERSION = '4.50';
|
69
69
|
|
70
70
|
sub LensIDConv($$$);
|
71
71
|
sub ProcessNikonAVI($$$);
|
@@ -723,6 +723,7 @@ sub GetAFPointGrid($$;$);
|
|
723
723
|
'9F 48 48 48 24 24 A1 06' => 'Yongnuo YN40mm F2.8N', #30
|
724
724
|
'9F 54 68 68 18 18 A2 06' => 'Yongnuo YN100mm F2N', #30
|
725
725
|
'9F 4C 44 44 18 18 A1 06' => 'Yongnuo YN35mm F2', #30
|
726
|
+
'9F 4D 50 50 14 14 A0 06' => 'Yongnuo YN50mm F1.8N', #30
|
726
727
|
#
|
727
728
|
'02 40 44 5C 2C 34 02 00' => 'Exakta AF 35-70mm 1:3.5-4.5 MC',
|
728
729
|
#
|
@@ -1013,7 +1014,7 @@ my %hDMIOutputResolutionZ9 = (
|
|
1013
1014
|
1 => '4320p',
|
1014
1015
|
2 => '2160p',
|
1015
1016
|
3 => '1080p',
|
1016
|
-
|
1017
|
+
4 => '1080i',
|
1017
1018
|
5 => '720p',
|
1018
1019
|
#6 => '576p',
|
1019
1020
|
#7 => '480p',
|
@@ -1059,8 +1060,8 @@ my %imageAreaZ9b = (
|
|
1059
1060
|
);
|
1060
1061
|
|
1061
1062
|
my %infoZSeries = (
|
1062
|
-
Condition => '$$self{Model} =~ /^NIKON Z (30|5|50|6|6_2|7|7_2|8|f|fc|9)\b/i',
|
1063
|
-
Notes => 'Z Series cameras thru
|
1063
|
+
Condition => '$$self{Model} =~ /^NIKON Z (30|5|50|6|6_2|7|7_2|8|f|fc|9)\b/i or $$self{Model} =~ /^NIKON Z(5_2|50_2|6_3)\b/i', #no space after 'Nikon Z' on models from Oct 2023
|
1064
|
+
Notes => 'Z Series cameras thru July 2025',
|
1064
1065
|
);
|
1065
1066
|
|
1066
1067
|
my %iSOAutoHiLimitZ6III = ( #28
|
@@ -1691,14 +1692,15 @@ my %cropHiSpeed = ( #IB
|
|
1691
1692
|
4 => '3:2 Crop', # (1.2x, ref 36)
|
1692
1693
|
6 => '16:9 Crop',
|
1693
1694
|
8 => '2.7x Crop', #36 (D4/D500)
|
1694
|
-
9 => 'DX Movie Crop', # (DX during movie recording, Large)
|
1695
|
+
9 => 'DX Movie 16:9 Crop', # (DX during movie recording, Large)
|
1695
1696
|
10 => '1.3x Movie Crop', #36 (D4/D500)
|
1696
1697
|
11 => 'FX Uncropped',
|
1697
1698
|
12 => 'DX Uncropped',
|
1698
1699
|
13 => '2.8x Movie Crop', #28 (D5/D6) 5584/1936
|
1699
1700
|
14 => '1.4x Movie Crop', #28 (D5/D6) 5584/3856
|
1700
1701
|
15 => '1.5x Movie Crop', #36 (D4/D500) 5600/3872
|
1701
|
-
17 => '1:1 Crop',
|
1702
|
+
17 => 'FX 1:1 Crop',
|
1703
|
+
18 => 'DX 1:1 Crop',
|
1702
1704
|
OTHER => sub {
|
1703
1705
|
my ($val, $inv, $conv) = @_;
|
1704
1706
|
return undef if $inv;
|
@@ -2597,7 +2599,7 @@ my %base64coord = (
|
|
2597
2599
|
},
|
2598
2600
|
},
|
2599
2601
|
{ # (Z6_3 firmware version 1.00, ref 28)
|
2600
|
-
|
2602
|
+
Condition => '$$valPt =~ /^08(09|10|11)/', #0809=Z6iii 0810=Z50ii #0811=Z5ii
|
2601
2603
|
Name => 'ShotInfoZ6III',
|
2602
2604
|
SubDirectory => {
|
2603
2605
|
TagTable => 'Image::ExifTool::Nikon::ShotInfoZ6III',
|
@@ -4919,7 +4921,7 @@ my %base64coord = (
|
|
4919
4921
|
DATAMEMBER => [ 0, 4, 5, 7, 66, 68 ],
|
4920
4922
|
NOTES => q{
|
4921
4923
|
AF information for Nikon cameras with the Expeed 7 processor: The Zf, Z6_3,
|
4922
|
-
Z8, Z9 and
|
4924
|
+
Z8, Z9, Z50_2 and Z5_2.
|
4923
4925
|
},
|
4924
4926
|
0 => {
|
4925
4927
|
Name => 'AFInfo2Version',
|
@@ -4965,8 +4967,8 @@ my %base64coord = (
|
|
4965
4967
|
PrintConv => sub { PrintAFPoints(shift, \@afPoints405) }, #full-frame sensor, 45MP, auto-area focus point configuration
|
4966
4968
|
PrintConvInv => sub { PrintAFPointsInv(shift, \@afPoints405) },
|
4967
4969
|
},{
|
4968
|
-
Name => 'AFPointsUsed', # Z6iii
|
4969
|
-
Condition => '$$self{Model} =~ /^NIKON (Z6_3|Z f)\b/i and ($$self{AFAreaModeUsed} == 197 or $$self{AFAreaModeUsed} == 207)',
|
4970
|
+
Name => 'AFPointsUsed', # Z6iii & Zf (AFInfo2Version 0401) and Z5ii (AFInfo2Version 0402)
|
4971
|
+
Condition => '$$self{Model} =~ /^NIKON (Z6_3|Z f|Z5_2)\b/i and ($$self{AFAreaModeUsed} == 197 or $$self{AFAreaModeUsed} == 207)',
|
4970
4972
|
Format => 'undef[38]',
|
4971
4973
|
ValueConv => 'join(" ", unpack("H2"x38, $val))',
|
4972
4974
|
ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
|
@@ -5000,17 +5002,17 @@ my %base64coord = (
|
|
5000
5002
|
0x43 => [
|
5001
5003
|
{
|
5002
5004
|
Name => 'FocusPositionHorizontal', # 209/231 focus point cameras
|
5003
|
-
Condition => '$$self{Model} =~ /^NIKON Z50_2\b/i and $$self{AFAreaXPosition} != 0', #model Z50ii
|
5005
|
+
Condition => '$$self{Model} =~ /^NIKON Z50_2\b/i and $$self{AFAreaXPosition} and $$self{AFAreaXPosition} != 0', #model Z50ii
|
5004
5006
|
ValueConv => 'int($$self{AFAreaXPosition} / 260 )', #divisor is the estimated separation between adjacent points (informed by the measured Z7ii separation)
|
5005
5007
|
PrintConv => sub { my ($val) = @_; PrintAFPointsLeftRight($val, 19 ) },
|
5006
5008
|
},{
|
5007
5009
|
Name => 'FocusPositionHorizontal', #273/299 focus point cameras
|
5008
|
-
Condition => '$$self{Model} =~ /^NIKON (Z6_3|Z f)\b/i and $$self{AFAreaXPosition} != 0', #models Z6iii
|
5010
|
+
Condition => '$$self{Model} =~ /^NIKON (Z6_3|Z f|Z5_2)\b/i and $$self{AFAreaXPosition} and $$self{AFAreaXPosition} != 0', #models Z6iii, Zf & Z5ii
|
5009
5011
|
ValueConv => 'int($$self{AFAreaXPosition} / 260 )', #divisor is the estimated separation between adjacent points (informed by the measured Z7ii separation)
|
5010
5012
|
PrintConv => sub { my ($val) = @_; PrintAFPointsLeftRight($val, 21 ) },
|
5011
5013
|
},{
|
5012
5014
|
Name => 'FocusPositionHorizontal', #405/493 focus point cameras
|
5013
|
-
Condition => '$$self{Model} =~ /^NIKON (Z 8|Z 9)\b/i and $$self{AFAreaXPosition} != 0', #models Z8 and Z9
|
5015
|
+
Condition => '$$self{Model} =~ /^NIKON (Z 8|Z 9)\b/i and $$self{AFAreaXPosition} and $$self{AFAreaXPosition} != 0', #models Z8 and Z9
|
5014
5016
|
ValueConv => 'int($$self{AFAreaXPosition} / 260 )', #divisor is the measured horizontal pixel separation between adjacent points
|
5015
5017
|
PrintConv => sub { my ($val) = @_; PrintAFPointsLeftRight($val, 29 ) },
|
5016
5018
|
},
|
@@ -5024,17 +5026,17 @@ my %base64coord = (
|
|
5024
5026
|
0x45 => [
|
5025
5027
|
{
|
5026
5028
|
Name => 'FocusPositionVertical', # 209/233 focus point cameras
|
5027
|
-
Condition => '$$self{Model} =~ /^NIKON Z50_2\b/i and $$self{AFAreaYPosition} != 0', #model Z50ii
|
5029
|
+
Condition => '$$self{Model} =~ /^NIKON Z50_2\b/i and $$self{AFAreaYPosition} and $$self{AFAreaYPosition} != 0', #model Z50ii
|
5028
5030
|
ValueConv => 'int($$self{AFAreaYPosition} / 286 )', #divisor chosen to cause center point report 'C'
|
5029
5031
|
PrintConv => sub { my ($val) = @_; PrintAFPointsUpDown($val, 11 ) },
|
5030
5032
|
},{
|
5031
5033
|
Name => 'FocusPositionVertical', #273/299 focus point cameras
|
5032
|
-
Condition => '$$self{Model} =~ /^NIKON (Z6_3|Z f)\b/i and $$self{AFAreaYPosition} != 0', #models Z6iii
|
5034
|
+
Condition => '$$self{Model} =~ /^NIKON (Z6_3|Z f|Z5_2)\b/i and $$self{AFAreaYPosition} and $$self{AFAreaYPosition} != 0', #models Z6iii, Zf & Z5ii
|
5033
5035
|
ValueConv => 'int($$self{AFAreaYPosition} / 286 )', #divisor chosen to cause center point report 'C'
|
5034
5036
|
PrintConv => sub { my ($val) = @_; PrintAFPointsUpDown($val, 13 ) },
|
5035
5037
|
},{
|
5036
5038
|
Name => 'FocusPositionVertical', #405/493 focus point cameras
|
5037
|
-
Condition => '$$self{Model} =~ /^NIKON (Z 8|Z 9)\b/i and $$self{AFAreaYPosition} != 0', #models Z8 and Z9
|
5039
|
+
Condition => '$$self{Model} =~ /^NIKON (Z 8|Z 9)\b/i and $$self{AFAreaYPosition} and $$self{AFAreaYPosition} != 0', #models Z8 and Z9
|
5038
5040
|
ValueConv => 'int($$self{AFAreaYPosition} / 292 )', #divisor is the measured vertical pixel separation between adjacent points
|
5039
5041
|
PrintConv => sub { my ($val) = @_; PrintAFPointsUpDown($val, 17 ) },
|
5040
5042
|
},
|
@@ -8668,6 +8670,7 @@ my %nikonFocalConversions = (
|
|
8668
8670
|
},
|
8669
8671
|
0x90 => {
|
8670
8672
|
Name => 'MenuOffset',
|
8673
|
+
Condition => '$$self{Model} =~ /^NIKON Z6_3\b/i',
|
8671
8674
|
Format => 'int32u',
|
8672
8675
|
SubDirectory => {
|
8673
8676
|
TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ6III',
|
@@ -9006,12 +9009,17 @@ my %nikonFocalConversions = (
|
|
9006
9009
|
RawConv => '$$self{FocusShiftShooting} = $val',
|
9007
9010
|
PrintConv => q{
|
9008
9011
|
return 'Off' if $val == 0 ;
|
9009
|
-
my $i = sprintf("Frame %.0f of %.0f",$val, $$self{FocusShiftNumberShots}); # something like Frame 1 of 100"
|
9012
|
+
my $i = sprintf("Frame %.0f of %.0f",$val, $$self{FocusShiftNumberShots}); # something like Frame 1 of 100"
|
9013
|
+
if ($$self{PixelShiftActive} and $$self{PixelShiftActive} eq 1) {$i = sprintf("Frame %.0f",$val);} #for the Z8 fw3 with PixelShift Enabled, the frame count is correct, but the frame total needs to be multiplied by the number of PixelShift frames (which I cannot find)
|
9010
9014
|
return "On: $i"
|
9011
9015
|
},
|
9016
|
+
Hook => '$varSize += 2 if $$self{Model} =~ /^NIKON Z 8/ and $$self{FirmwareVersion} and $$self{FirmwareVersion} ge "03.00"', # 2 bytes were added with Z8 firmware 3.0 support for pixel shift when focus stacking
|
9012
9017
|
},
|
9018
|
+
#
|
9019
|
+
# Note: Offsets after this are shifted by +2 for Z8 firmware 3.0 (see Hook above)
|
9020
|
+
#
|
9013
9021
|
0x0028 => {
|
9014
|
-
Name => 'IntervalShooting',
|
9022
|
+
Name => 'IntervalShooting', #will be 'On' when Interval Shooting is selected via the Photo Shooting Menu and also when a non-zero interval is specified when using Focus Shift and/or Pixel Shift Shooting
|
9015
9023
|
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96', #not valid for C30/C60/C120
|
9016
9024
|
RawConv => '$$self{IntervalShooting} = $val',
|
9017
9025
|
Format => 'int16u',
|
@@ -9790,7 +9798,7 @@ my %nikonFocalConversions = (
|
|
9790
9798
|
%Image::ExifTool::Nikon::MenuSettingsZ8 = (
|
9791
9799
|
%binaryDataAttrs,
|
9792
9800
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
9793
|
-
DATAMEMBER => [ 72, 152, 200, 204, 244, 440, 548, 554, 570, 596 ],
|
9801
|
+
DATAMEMBER => [ 72, 152, 200, 204, 244, 440, 548, 554, 570, 596, 636 ],
|
9794
9802
|
NOTES => 'These tags are common to all Z8 firmware versions.',
|
9795
9803
|
72 => {
|
9796
9804
|
Name => 'HighFrameRate', #CH and C30/C60/C120 but not CL
|
@@ -9805,7 +9813,7 @@ my %nikonFocalConversions = (
|
|
9805
9813
|
RawConv => '$$self{MultipleExposureMode} = $val',
|
9806
9814
|
PrintConv => \%multipleExposureModeZ9,
|
9807
9815
|
},
|
9808
|
-
154 => {Name => 'MultiExposureShots', Condition => '$$self{MultipleExposureMode} != 0'}, #range 2-9
|
9816
|
+
154 => {Name => 'MultiExposureShots', Condition => '$$self{MultipleExposureMode} != 0'}, #range 2-9 - not present in a NEF, only in the assembled JPG
|
9809
9817
|
184 => {
|
9810
9818
|
Name => 'IntervalDurationHours',
|
9811
9819
|
Format => 'int32u',
|
@@ -9904,7 +9912,7 @@ my %nikonFocalConversions = (
|
|
9904
9912
|
Notes => 'AE and/or Flash Bracketing',
|
9905
9913
|
PrintConv => \%bracketIncrementZ9,
|
9906
9914
|
},
|
9907
|
-
570 => { Name => 'HDR', RawConv => '$$self{HDR} = $val', PrintConv => \%multipleExposureModeZ9 },
|
9915
|
+
570 => { Name => 'HDR', RawConv => '$$self{HDR} = $val', PrintConv => \%multipleExposureModeZ9 }, #will be 'on' for the tone mapped JPGs, off for the source NEF files
|
9908
9916
|
#572 HDRSaveRaw 0=> No; 1=> Yes
|
9909
9917
|
576 => { Name => 'SecondarySlotFunction', PrintConv => \%secondarySlotFunctionZ9 },
|
9910
9918
|
582 => { Name => 'HDRLevel', Condition => '$$self{HDR} ne 0', PrintConv => \%hdrLevelZ8 },
|
@@ -9919,7 +9927,15 @@ my %nikonFocalConversions = (
|
|
9919
9927
|
},
|
9920
9928
|
618 => { Name => 'ToneMap', PrintConv => { 0 => 'SDR', 1 => 'HLG' }, Unknown => 1 },
|
9921
9929
|
622 => { Name => 'PortraitImpressionBalance', PrintConv => \%portraitImpressionBalanceZ8 },
|
9922
|
-
636 => {
|
9930
|
+
636 => {
|
9931
|
+
Name => 'HighFrequencyFlickerReduction',
|
9932
|
+
PrintConv => \%offOn,
|
9933
|
+
Unknown => 1,
|
9934
|
+
Hook => '$varSize += 4 if $$self{FirmwareVersion} and $$self{FirmwareVersion} ge "03.00"',
|
9935
|
+
},
|
9936
|
+
#
|
9937
|
+
# firmware 3.00 adds 4 bytes somewhere in the range 638-730 (hence the Hook above)
|
9938
|
+
#
|
9923
9939
|
730 => {
|
9924
9940
|
Name => 'MovieImageArea',
|
9925
9941
|
Unknown => 1,
|
@@ -10028,7 +10044,15 @@ my %nikonFocalConversions = (
|
|
10028
10044
|
Name => 'MenuSettingsZ8',
|
10029
10045
|
Format => 'undef[943]',
|
10030
10046
|
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ8' },
|
10031
|
-
Hook =>
|
10047
|
+
Hook => q{
|
10048
|
+
if ($$self{FirmwareVersion}) {
|
10049
|
+
if ($$self{FirmwareVersion} =~ /^02\.10/) {
|
10050
|
+
$varSize += 4;
|
10051
|
+
} elsif ($$self{FirmwareVersion} ge "03.0") {
|
10052
|
+
$varSize += 8
|
10053
|
+
}
|
10054
|
+
}
|
10055
|
+
},
|
10032
10056
|
},
|
10033
10057
|
943 => {
|
10034
10058
|
Name => 'CustomSettingsZ8',
|
@@ -10079,22 +10103,26 @@ my %nikonFocalConversions = (
|
|
10079
10103
|
1880 => { Name => 'NonCPULens18MaxAperture', Format => 'int32u', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
|
10080
10104
|
1884 => { Name => 'NonCPULens19MaxAperture', Format => 'int32u', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
|
10081
10105
|
1888 => { Name => 'NonCPULens20MaxAperture', Format => 'int32u', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
|
10082
|
-
|
10083
|
-
|
10084
|
-
|
10085
|
-
|
10086
|
-
|
10087
|
-
|
10106
|
+
1904 => { Name => 'HDMIOutputResolution', PrintConv => \%hDMIOutputResolutionZ9 },
|
10107
|
+
1922 => { Name => 'AirplaneMode', PrintConv => \%offOn, Unknown => 1 },
|
10108
|
+
1923 => { Name => 'EmptySlotRelease', PrintConv => { 0 => 'Disable Release', 1 => 'Enable Release' }, Unknown => 1 },
|
10109
|
+
1958 => { Name => 'EnergySavingMode', PrintConv => \%offOn, Unknown => 1 },
|
10110
|
+
1986 => { Name => 'USBPowerDelivery', PrintConv => \%offOn, Unknown => 1 },
|
10111
|
+
1995 => { Name => 'SensorShield', PrintConv => { 0 => 'Stays Open', 1 => 'Closes' }, Unknown => 1 },
|
10088
10112
|
2046 => { Name => 'PixelShiftShooting', RawConv => '$$self{PixelShiftShooting} = $val', PrintConv => \%multipleExposureModeZ9 }, #off/on/on (series)
|
10089
10113
|
2048 => { Name => 'PixelShiftNumberShots', Condition => '$$self{PixelShiftShooting} > 0', PrintConv => \%pixelShiftNumberShots },
|
10090
10114
|
2050 => { Name => 'PixelShiftDelay', Condition => '$$self{PixelShiftShooting} > 0', PrintConv => \%pixelShiftDelay },
|
10091
|
-
2052 => { Name => 'PlaybackButton', %
|
10092
|
-
2054 => { Name => 'WBButton', %
|
10093
|
-
2056 => { Name => 'BracketButton', %
|
10094
|
-
2058 => { Name => 'LensFunc1ButtonPlaybackMode', %
|
10095
|
-
2060 => { Name => 'LensFunc2ButtonPlaybackMode', %
|
10096
|
-
2062 => { Name => 'PlaybackButtonPlaybackMode', %
|
10097
|
-
2064 => { Name => 'BracketButtonPlaybackMode', %
|
10115
|
+
2052 => { Name => 'PlaybackButton', %buttonsZ8 }, #CSf2
|
10116
|
+
2054 => { Name => 'WBButton', %buttonsZ8}, #CSf2
|
10117
|
+
2056 => { Name => 'BracketButton', %buttonsZ8}, #CSf2
|
10118
|
+
2058 => { Name => 'LensFunc1ButtonPlaybackMode', %buttonsZ8}, #CSf3
|
10119
|
+
2060 => { Name => 'LensFunc2ButtonPlaybackMode', %buttonsZ8}, #CSf3
|
10120
|
+
2062 => { Name => 'PlaybackButtonPlaybackMode', %buttonsZ8}, #CSf3
|
10121
|
+
2064 => { Name => 'BracketButtonPlaybackMode', %buttonsZ8}, #CSf3
|
10122
|
+
#2088 FlickerFrequencyPreset #Z8 fw 3.0
|
10123
|
+
2206 => { Name => 'MaximumApertureLV', PrintConv => \%offOn, Unknown => 1 }, #CSa14
|
10124
|
+
2208 => { Name => 'ReleaseModeButton', %buttonsZ8}, #CSf2
|
10125
|
+
2216 => { Name => 'ReleaseModeButtonPlaybackMode', %buttonsZ8}, #CSf3
|
10098
10126
|
);
|
10099
10127
|
|
10100
10128
|
%Image::ExifTool::Nikon::MenuSettingsZ9 = (
|
@@ -12057,6 +12085,7 @@ my %nikonFocalConversions = (
|
|
12057
12085
|
%Image::ExifTool::Nikon::MakerNotes0x56 = (
|
12058
12086
|
%binaryDataAttrs,
|
12059
12087
|
GROUPS => { 0 => 'MakerNotes' },
|
12088
|
+
DATAMEMBER => [ 12 ],
|
12060
12089
|
0 => {
|
12061
12090
|
Name => 'FirmwareVersion56',
|
12062
12091
|
Format => 'string[4]',
|
@@ -12067,6 +12096,11 @@ my %nikonFocalConversions = (
|
|
12067
12096
|
Name => 'BurstGroupID', #all frames shot within a burst (using CL/CH/C30/C60/C120) will share the same BurstGroupID. Value will be > 0 for all images shot in continuous modes (or via Pixel Shift). 0 for single-frame.
|
12068
12097
|
Format => 'int16u'
|
12069
12098
|
},
|
12099
|
+
12 => {
|
12100
|
+
Name => 'PixelShiftID', # 1 => Pixel shift enabled (either directly or thru Focus Shift Shooting with Z8 fw 3.0)
|
12101
|
+
RawConv => '$$self{PixelShiftActive} = $val',
|
12102
|
+
Hidden => 1
|
12103
|
+
},
|
12070
12104
|
);
|
12071
12105
|
|
12072
12106
|
# extra info found in IFD0 of NEF files (ref PH, Z6/Z7)
|
@@ -12105,6 +12139,7 @@ my %nikonFocalConversions = (
|
|
12105
12139
|
Name => 'DistortionCorrection', #used by ACR to determine whether the built-in lens profile is applied
|
12106
12140
|
Format => 'int8u',
|
12107
12141
|
PrintConv => {
|
12142
|
+
0 => 'No Lens Attached', #to prevent reporting 'Unknown'
|
12108
12143
|
1 => 'On (Optional)',
|
12109
12144
|
2 => 'Off',
|
12110
12145
|
3 => 'On (Required)',
|
@@ -13,16 +13,14 @@
|
|
13
13
|
package Image::ExifTool::NikonCustom;
|
14
14
|
|
15
15
|
use strict;
|
16
|
-
use vars qw($VERSION @ISA @EXPORT_OK %buttonsZ9);
|
16
|
+
use vars qw($VERSION @ISA @EXPORT_OK %buttonsZ8 %buttonsZ9);
|
17
17
|
|
18
|
-
$VERSION = '1.
|
18
|
+
$VERSION = '1.27';
|
19
19
|
|
20
20
|
@ISA = qw(Exporter);
|
21
|
-
@EXPORT_OK = qw(%buttonsZ9);
|
21
|
+
@EXPORT_OK = qw(%buttonsZ8 %buttonsZ9);
|
22
22
|
|
23
|
-
%
|
24
|
-
SeparateTable => 'ButtonsZ9',
|
25
|
-
PrintConv => {
|
23
|
+
my %buttonsCommonZ8Z9 = ( #button roles shared by the Z8 & Z9. Assigments began to diverge with Z8 fw 2.00 and became significant with z8 fw 3.0
|
26
24
|
0 => 'None',
|
27
25
|
1 => 'Preview',
|
28
26
|
3 => 'FV Lock',
|
@@ -112,7 +110,37 @@ $VERSION = '1.26';
|
|
112
110
|
113 => 'Power Zoom +',
|
113
111
|
114 => 'Power Zoom -',
|
114
112
|
115 => 'Delete',
|
115
|
-
|
113
|
+
);
|
114
|
+
%buttonsZ8 = (
|
115
|
+
SeparateTable => 'ButtonsZ8',
|
116
|
+
PrintConv => {
|
117
|
+
%buttonsCommonZ8Z9,
|
118
|
+
116 => 'Pixel Shift Shooting',
|
119
|
+
117 => 'Cycle AF-area Mode',
|
120
|
+
119 => 'Focus Limiter',
|
121
|
+
120 => 'Jump to Source Image',
|
122
|
+
121 => 'Raw Processing (Current)',
|
123
|
+
122 => 'Raw Processing (Multiple)',
|
124
|
+
123 => 'Trim',
|
125
|
+
124 => 'Resize (Current)',
|
126
|
+
125 => 'Resize (Multiple)',
|
127
|
+
126 => 'D-Lighting',
|
128
|
+
127 => 'Straighten',
|
129
|
+
128 => 'Distortion Control',
|
130
|
+
129 => 'Perspective Control',
|
131
|
+
130 => 'Monochrome',
|
132
|
+
131 => 'Overlay (Add)',
|
133
|
+
132 => 'Lighten',
|
134
|
+
133 => 'Darken',
|
135
|
+
134 => 'Motion Blend',
|
136
|
+
135 => 'Cycle Monitor Mode',
|
137
|
+
},
|
138
|
+
);
|
139
|
+
%buttonsZ9= (
|
140
|
+
SeparateTable => 'ButtonsZ9',
|
141
|
+
PrintConv => {
|
142
|
+
%buttonsCommonZ8Z9,
|
143
|
+
116 => 'Save and Load Power Zoom Position',
|
116
144
|
117 => 'Cycle AF-area Mode',
|
117
145
|
118 => 'Raw Processing (Current)', #118-131 are Playback Retouch options
|
118
146
|
119 => 'Raw Processing (Multiple)',
|
@@ -10243,6 +10271,7 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
|
|
10243
10271
|
1 => '1 s',
|
10244
10272
|
2 => '2 s',
|
10245
10273
|
3 => '3 s',
|
10274
|
+
4 => 'Min',
|
10246
10275
|
},
|
10247
10276
|
},
|
10248
10277
|
51 => { Name => 'PlaybackMonitorOffTime', %powerOffDelayTimesZ9 }, # CSc3-a
|
@@ -10404,6 +10433,7 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
|
|
10404
10433
|
263 => { Name => 'AutoFocusModeRestrictions', PrintConv => \%focusModeRestrictionsZ9, Unknown => 1}, # CSa9
|
10405
10434
|
267 => { Name => 'CHModeShootingSpeed', ValueConv => '$val + 1', ValueConvInv => '$val - 1', PrintConv => '"$val fps"', PrintConvInv => '$val=~s/\s*fps//i; $val' }, # CSd1a
|
10406
10435
|
273 => { Name => 'FlashBurstPriority', PrintConv => { 0 => 'Frame Rate',1 => 'Exposure'}, Unknown => 1 }, # CSe8
|
10436
|
+
281 => { Name => 'Func3Button', %buttonsZ9}, # CSf2-c
|
10407
10437
|
335 => { Name => 'LimitAF-AreaModeSelDynamic_S', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa8
|
10408
10438
|
336 => { Name => 'LimitAF-AreaModeSelDynamic_M', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa8
|
10409
10439
|
337 => { Name => 'LimitAF-AreaModeSelDynamic_L', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa8
|
@@ -10426,7 +10456,7 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
|
|
10426
10456
|
463 => { Name => 'SubCommandDialPlaybackMode', PrintConv => \%dialsZ9, Unknown => 1}, # CSf3-l
|
10427
10457
|
469 => { Name => 'ControlRingResponse', PrintConv => { 0 => 'High', 1 => 'Low' } }, # CSf10
|
10428
10458
|
|
10429
|
-
515 => { Name => 'MovieAFAreaMode', %buttonsZ9, Unknown => 1}, # CSg2-e
|
10459
|
+
#515 => { Name => 'MovieAFAreaMode', %buttonsZ9, Unknown => 1}, # CSg2-e #28 this is incorrect - MovieAFAreaMode is set in the Photo Shooting Menu and the tag is set in Nikon.pm
|
10430
10460
|
529 => { # CSg9-a
|
10431
10461
|
Name => 'ZebraPatternToneRange',
|
10432
10462
|
Unknown => 1,
|
@@ -10736,7 +10766,7 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
|
|
10736
10766
|
#119 Func2Button submenu: AreaMode 0-7 => S, Dyn-S, Dyn-M, Dyn-L, Wide-S, Wide-L, 3D, Auto; 11=>n/a # CSf2-b
|
10737
10767
|
#121 Func2Button submenu: AreaMode+AF-On 0-7 => S, Dyn-S, Dyn-M, Dyn-L, Wide-S, Wide-L, 3D, Auto; 11=>n/a # CSf2-b
|
10738
10768
|
#125 Func2Button submenu: SynchronizedRelease 1=>'Master', 2=>'Remote' # CSf2-b
|
10739
|
-
#127 Func2Button submenu: Zoom 0=>'Zoom
|
10769
|
+
#127 Func2Button submenu: Zoom 0=>'Zoom 5', 2=>'Zoom (1:1)', 2=>'Zoom 200%, 2=>'Zoom 400%' # CSf2-b
|
10740
10770
|
#129 Func2Button & Func2ButtonPlayback submenu: Rating # CSf2-b & CSf3b 0=>'Candidate For Deletion' 6=>''None'
|
10741
10771
|
131 => { Name => 'AFOnButton', %buttonsZ9}, # CSf2-c
|
10742
10772
|
143 => { Name => 'SubSelector', %buttonsZ9, Unknown => 1}, # CSf2-g
|
@@ -11275,7 +11305,7 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
|
|
11275
11305
|
493 => { Name => 'ControlRingResponse', PrintConv => { 0 => 'High', 1 => 'Low' } }, # CSf10
|
11276
11306
|
505 => { Name => 'VerticalMovieFuncButton', %buttonsZ9, Unknown => 1}, # CSg2-d
|
11277
11307
|
529 => { Name => 'VerticalMovieAFOnButton', %buttonsZ9, Unknown => 1}, # CSg2-l
|
11278
|
-
539 => { Name => 'MovieAFAreaMode', %buttonsZ9, Unknown => 1}, # CSg2-e
|
11308
|
+
#539 => { Name => 'MovieAFAreaMode', %buttonsZ9, Unknown => 1}, # CSg2-e #28 this feels incorrect - MovieAFAreaMode is set in the Photo Shooting Menu and the tag should be in Nikon.pm
|
11279
11309
|
#545 => { Name => 'MovieLimitAF-AreaModeSelWideAF_S', PrintConv => \%limitNolimit, Unknown => 1 }, # CSg4-a
|
11280
11310
|
#546 => { Name => 'MovieLimitAF-AreaModeSelWideAF_W', PrintConv => \%limitNolimit, Unknown => 1 }, # CSg4-b
|
11281
11311
|
#547 => { Name => 'MovieLimitAF-AreaModeSelSubjectTrack', PrintConv => \%limitNolimit, Unknown => 1 }, # CSg4-c
|