exiftool-vendored.pl 13.32.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.
- package/bin/Changes +43 -4
- package/bin/MANIFEST +5 -0
- package/bin/META.json +1 -1
- package/bin/META.yml +1 -1
- package/bin/README +47 -46
- package/bin/exiftool +100 -83
- package/bin/lib/Image/ExifTool/BuildTagLookup.pm +4 -2
- package/bin/lib/Image/ExifTool/Canon.pm +15 -2
- package/bin/lib/Image/ExifTool/Exif.pm +6 -5
- package/bin/lib/Image/ExifTool/FlashPix.pm +4 -159
- package/bin/lib/Image/ExifTool/FujiFilm.pm +11 -3
- package/bin/lib/Image/ExifTool/Geotag.pm +5 -3
- package/bin/lib/Image/ExifTool/GoPro.pm +14 -2
- package/bin/lib/Image/ExifTool/LNK.pm +4 -1
- package/bin/lib/Image/ExifTool/Lang/cs.pm +0 -1
- package/bin/lib/Image/ExifTool/Lang/de.pm +0 -1
- package/bin/lib/Image/ExifTool/Lang/fr.pm +0 -1
- package/bin/lib/Image/ExifTool/Lang/it.pm +0 -1
- package/bin/lib/Image/ExifTool/Lang/ja.pm +0 -1
- package/bin/lib/Image/ExifTool/Lang/nl.pm +0 -1
- package/bin/lib/Image/ExifTool/Lang/pl.pm +0 -1
- package/bin/lib/Image/ExifTool/Lang/zh_cn.pm +0 -1
- package/bin/lib/Image/ExifTool/Microsoft.pm +158 -1
- package/bin/lib/Image/ExifTool/Minolta.pm +4 -2
- package/bin/lib/Image/ExifTool/Nikon.pm +69 -35
- package/bin/lib/Image/ExifTool/NikonCustom.pm +40 -10
- package/bin/lib/Image/ExifTool/Olympus.pm +253 -34
- package/bin/lib/Image/ExifTool/Panasonic.pm +3 -3
- package/bin/lib/Image/ExifTool/Pentax.pm +168 -14
- package/bin/lib/Image/ExifTool/QuickTime.pm +11 -4
- package/bin/lib/Image/ExifTool/README +2 -1
- package/bin/lib/Image/ExifTool/Sony.pm +43 -17
- package/bin/lib/Image/ExifTool/TNEF.pm +487 -0
- package/bin/lib/Image/ExifTool/TagLookup.pm +4375 -4267
- package/bin/lib/Image/ExifTool/TagNames.pod +244 -16
- package/bin/lib/Image/ExifTool/WriteExif.pl +14 -12
- package/bin/lib/Image/ExifTool/Writer.pl +12 -12
- package/bin/lib/Image/ExifTool.pm +12 -4
- package/bin/lib/Image/ExifTool.pod +50 -44
- package/bin/perl-Image-ExifTool.spec +46 -45
- package/bin/windows_exiftool.txt +87 -82
- package/package.json +1 -1
|
@@ -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
|
|
@@ -2598,7 +2599,7 @@ my %base64coord = (
|
|
|
2598
2599
|
},
|
|
2599
2600
|
},
|
|
2600
2601
|
{ # (Z6_3 firmware version 1.00, ref 28)
|
|
2601
|
-
|
|
2602
|
+
Condition => '$$valPt =~ /^08(09|10|11)/', #0809=Z6iii 0810=Z50ii #0811=Z5ii
|
|
2602
2603
|
Name => 'ShotInfoZ6III',
|
|
2603
2604
|
SubDirectory => {
|
|
2604
2605
|
TagTable => 'Image::ExifTool::Nikon::ShotInfoZ6III',
|
|
@@ -4920,7 +4921,7 @@ my %base64coord = (
|
|
|
4920
4921
|
DATAMEMBER => [ 0, 4, 5, 7, 66, 68 ],
|
|
4921
4922
|
NOTES => q{
|
|
4922
4923
|
AF information for Nikon cameras with the Expeed 7 processor: The Zf, Z6_3,
|
|
4923
|
-
Z8, Z9 and
|
|
4924
|
+
Z8, Z9, Z50_2 and Z5_2.
|
|
4924
4925
|
},
|
|
4925
4926
|
0 => {
|
|
4926
4927
|
Name => 'AFInfo2Version',
|
|
@@ -4966,8 +4967,8 @@ my %base64coord = (
|
|
|
4966
4967
|
PrintConv => sub { PrintAFPoints(shift, \@afPoints405) }, #full-frame sensor, 45MP, auto-area focus point configuration
|
|
4967
4968
|
PrintConvInv => sub { PrintAFPointsInv(shift, \@afPoints405) },
|
|
4968
4969
|
},{
|
|
4969
|
-
Name => 'AFPointsUsed', # Z6iii
|
|
4970
|
-
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)',
|
|
4971
4972
|
Format => 'undef[38]',
|
|
4972
4973
|
ValueConv => 'join(" ", unpack("H2"x38, $val))',
|
|
4973
4974
|
ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
|
|
@@ -5001,17 +5002,17 @@ my %base64coord = (
|
|
|
5001
5002
|
0x43 => [
|
|
5002
5003
|
{
|
|
5003
5004
|
Name => 'FocusPositionHorizontal', # 209/231 focus point cameras
|
|
5004
|
-
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
|
|
5005
5006
|
ValueConv => 'int($$self{AFAreaXPosition} / 260 )', #divisor is the estimated separation between adjacent points (informed by the measured Z7ii separation)
|
|
5006
5007
|
PrintConv => sub { my ($val) = @_; PrintAFPointsLeftRight($val, 19 ) },
|
|
5007
5008
|
},{
|
|
5008
5009
|
Name => 'FocusPositionHorizontal', #273/299 focus point cameras
|
|
5009
|
-
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
|
|
5010
5011
|
ValueConv => 'int($$self{AFAreaXPosition} / 260 )', #divisor is the estimated separation between adjacent points (informed by the measured Z7ii separation)
|
|
5011
5012
|
PrintConv => sub { my ($val) = @_; PrintAFPointsLeftRight($val, 21 ) },
|
|
5012
5013
|
},{
|
|
5013
5014
|
Name => 'FocusPositionHorizontal', #405/493 focus point cameras
|
|
5014
|
-
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
|
|
5015
5016
|
ValueConv => 'int($$self{AFAreaXPosition} / 260 )', #divisor is the measured horizontal pixel separation between adjacent points
|
|
5016
5017
|
PrintConv => sub { my ($val) = @_; PrintAFPointsLeftRight($val, 29 ) },
|
|
5017
5018
|
},
|
|
@@ -5025,17 +5026,17 @@ my %base64coord = (
|
|
|
5025
5026
|
0x45 => [
|
|
5026
5027
|
{
|
|
5027
5028
|
Name => 'FocusPositionVertical', # 209/233 focus point cameras
|
|
5028
|
-
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
|
|
5029
5030
|
ValueConv => 'int($$self{AFAreaYPosition} / 286 )', #divisor chosen to cause center point report 'C'
|
|
5030
5031
|
PrintConv => sub { my ($val) = @_; PrintAFPointsUpDown($val, 11 ) },
|
|
5031
5032
|
},{
|
|
5032
5033
|
Name => 'FocusPositionVertical', #273/299 focus point cameras
|
|
5033
|
-
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
|
|
5034
5035
|
ValueConv => 'int($$self{AFAreaYPosition} / 286 )', #divisor chosen to cause center point report 'C'
|
|
5035
5036
|
PrintConv => sub { my ($val) = @_; PrintAFPointsUpDown($val, 13 ) },
|
|
5036
5037
|
},{
|
|
5037
5038
|
Name => 'FocusPositionVertical', #405/493 focus point cameras
|
|
5038
|
-
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
|
|
5039
5040
|
ValueConv => 'int($$self{AFAreaYPosition} / 292 )', #divisor is the measured vertical pixel separation between adjacent points
|
|
5040
5041
|
PrintConv => sub { my ($val) = @_; PrintAFPointsUpDown($val, 17 ) },
|
|
5041
5042
|
},
|
|
@@ -8669,6 +8670,7 @@ my %nikonFocalConversions = (
|
|
|
8669
8670
|
},
|
|
8670
8671
|
0x90 => {
|
|
8671
8672
|
Name => 'MenuOffset',
|
|
8673
|
+
Condition => '$$self{Model} =~ /^NIKON Z6_3\b/i',
|
|
8672
8674
|
Format => 'int32u',
|
|
8673
8675
|
SubDirectory => {
|
|
8674
8676
|
TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ6III',
|
|
@@ -9007,12 +9009,17 @@ my %nikonFocalConversions = (
|
|
|
9007
9009
|
RawConv => '$$self{FocusShiftShooting} = $val',
|
|
9008
9010
|
PrintConv => q{
|
|
9009
9011
|
return 'Off' if $val == 0 ;
|
|
9010
|
-
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)
|
|
9011
9014
|
return "On: $i"
|
|
9012
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
|
|
9013
9017
|
},
|
|
9018
|
+
#
|
|
9019
|
+
# Note: Offsets after this are shifted by +2 for Z8 firmware 3.0 (see Hook above)
|
|
9020
|
+
#
|
|
9014
9021
|
0x0028 => {
|
|
9015
|
-
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
|
|
9016
9023
|
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96', #not valid for C30/C60/C120
|
|
9017
9024
|
RawConv => '$$self{IntervalShooting} = $val',
|
|
9018
9025
|
Format => 'int16u',
|
|
@@ -9791,7 +9798,7 @@ my %nikonFocalConversions = (
|
|
|
9791
9798
|
%Image::ExifTool::Nikon::MenuSettingsZ8 = (
|
|
9792
9799
|
%binaryDataAttrs,
|
|
9793
9800
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
9794
|
-
DATAMEMBER => [ 72, 152, 200, 204, 244, 440, 548, 554, 570, 596 ],
|
|
9801
|
+
DATAMEMBER => [ 72, 152, 200, 204, 244, 440, 548, 554, 570, 596, 636 ],
|
|
9795
9802
|
NOTES => 'These tags are common to all Z8 firmware versions.',
|
|
9796
9803
|
72 => {
|
|
9797
9804
|
Name => 'HighFrameRate', #CH and C30/C60/C120 but not CL
|
|
@@ -9806,7 +9813,7 @@ my %nikonFocalConversions = (
|
|
|
9806
9813
|
RawConv => '$$self{MultipleExposureMode} = $val',
|
|
9807
9814
|
PrintConv => \%multipleExposureModeZ9,
|
|
9808
9815
|
},
|
|
9809
|
-
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
|
|
9810
9817
|
184 => {
|
|
9811
9818
|
Name => 'IntervalDurationHours',
|
|
9812
9819
|
Format => 'int32u',
|
|
@@ -9905,7 +9912,7 @@ my %nikonFocalConversions = (
|
|
|
9905
9912
|
Notes => 'AE and/or Flash Bracketing',
|
|
9906
9913
|
PrintConv => \%bracketIncrementZ9,
|
|
9907
9914
|
},
|
|
9908
|
-
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
|
|
9909
9916
|
#572 HDRSaveRaw 0=> No; 1=> Yes
|
|
9910
9917
|
576 => { Name => 'SecondarySlotFunction', PrintConv => \%secondarySlotFunctionZ9 },
|
|
9911
9918
|
582 => { Name => 'HDRLevel', Condition => '$$self{HDR} ne 0', PrintConv => \%hdrLevelZ8 },
|
|
@@ -9920,7 +9927,15 @@ my %nikonFocalConversions = (
|
|
|
9920
9927
|
},
|
|
9921
9928
|
618 => { Name => 'ToneMap', PrintConv => { 0 => 'SDR', 1 => 'HLG' }, Unknown => 1 },
|
|
9922
9929
|
622 => { Name => 'PortraitImpressionBalance', PrintConv => \%portraitImpressionBalanceZ8 },
|
|
9923
|
-
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
|
+
#
|
|
9924
9939
|
730 => {
|
|
9925
9940
|
Name => 'MovieImageArea',
|
|
9926
9941
|
Unknown => 1,
|
|
@@ -10029,7 +10044,15 @@ my %nikonFocalConversions = (
|
|
|
10029
10044
|
Name => 'MenuSettingsZ8',
|
|
10030
10045
|
Format => 'undef[943]',
|
|
10031
10046
|
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ8' },
|
|
10032
|
-
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
|
+
},
|
|
10033
10056
|
},
|
|
10034
10057
|
943 => {
|
|
10035
10058
|
Name => 'CustomSettingsZ8',
|
|
@@ -10080,22 +10103,26 @@ my %nikonFocalConversions = (
|
|
|
10080
10103
|
1880 => { Name => 'NonCPULens18MaxAperture', Format => 'int32u', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
|
|
10081
10104
|
1884 => { Name => 'NonCPULens19MaxAperture', Format => 'int32u', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
|
|
10082
10105
|
1888 => { Name => 'NonCPULens20MaxAperture', Format => 'int32u', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
|
|
10083
|
-
|
|
10084
|
-
|
|
10085
|
-
|
|
10086
|
-
|
|
10087
|
-
|
|
10088
|
-
|
|
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 },
|
|
10089
10112
|
2046 => { Name => 'PixelShiftShooting', RawConv => '$$self{PixelShiftShooting} = $val', PrintConv => \%multipleExposureModeZ9 }, #off/on/on (series)
|
|
10090
10113
|
2048 => { Name => 'PixelShiftNumberShots', Condition => '$$self{PixelShiftShooting} > 0', PrintConv => \%pixelShiftNumberShots },
|
|
10091
10114
|
2050 => { Name => 'PixelShiftDelay', Condition => '$$self{PixelShiftShooting} > 0', PrintConv => \%pixelShiftDelay },
|
|
10092
|
-
2052 => { Name => 'PlaybackButton', %
|
|
10093
|
-
2054 => { Name => 'WBButton', %
|
|
10094
|
-
2056 => { Name => 'BracketButton', %
|
|
10095
|
-
2058 => { Name => 'LensFunc1ButtonPlaybackMode', %
|
|
10096
|
-
2060 => { Name => 'LensFunc2ButtonPlaybackMode', %
|
|
10097
|
-
2062 => { Name => 'PlaybackButtonPlaybackMode', %
|
|
10098
|
-
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
|
|
10099
10126
|
);
|
|
10100
10127
|
|
|
10101
10128
|
%Image::ExifTool::Nikon::MenuSettingsZ9 = (
|
|
@@ -12058,6 +12085,7 @@ my %nikonFocalConversions = (
|
|
|
12058
12085
|
%Image::ExifTool::Nikon::MakerNotes0x56 = (
|
|
12059
12086
|
%binaryDataAttrs,
|
|
12060
12087
|
GROUPS => { 0 => 'MakerNotes' },
|
|
12088
|
+
DATAMEMBER => [ 12 ],
|
|
12061
12089
|
0 => {
|
|
12062
12090
|
Name => 'FirmwareVersion56',
|
|
12063
12091
|
Format => 'string[4]',
|
|
@@ -12068,6 +12096,11 @@ my %nikonFocalConversions = (
|
|
|
12068
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.
|
|
12069
12097
|
Format => 'int16u'
|
|
12070
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
|
+
},
|
|
12071
12104
|
);
|
|
12072
12105
|
|
|
12073
12106
|
# extra info found in IFD0 of NEF files (ref PH, Z6/Z7)
|
|
@@ -12106,6 +12139,7 @@ my %nikonFocalConversions = (
|
|
|
12106
12139
|
Name => 'DistortionCorrection', #used by ACR to determine whether the built-in lens profile is applied
|
|
12107
12140
|
Format => 'int8u',
|
|
12108
12141
|
PrintConv => {
|
|
12142
|
+
0 => 'No Lens Attached', #to prevent reporting 'Unknown'
|
|
12109
12143
|
1 => 'On (Optional)',
|
|
12110
12144
|
2 => 'Off',
|
|
12111
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
|