exiftool_vendored 13.31.0 → 13.33.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 +38 -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 +81 -56
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +7 -5
- data/bin/lib/Image/ExifTool/Canon.pm +10 -2
- data/bin/lib/Image/ExifTool/Exif.pm +5 -3
- data/bin/lib/Image/ExifTool/FlashPix.pm +4 -159
- data/bin/lib/Image/ExifTool/FujiFilm.pm +10 -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 +1 -1
- data/bin/lib/Image/ExifTool/Nikon.pm +71 -37
- data/bin/lib/Image/ExifTool/NikonCustom.pm +40 -10
- data/bin/lib/Image/ExifTool/Olympus.pm +240 -35
- data/bin/lib/Image/ExifTool/Panasonic.pm +3 -3
- data/bin/lib/Image/ExifTool/Pentax.pm +271 -53
- data/bin/lib/Image/ExifTool/QuickTime.pm +11 -4
- data/bin/lib/Image/ExifTool/Sony.pm +5 -2
- data/bin/lib/Image/ExifTool/TNEF.pm +487 -0
- data/bin/lib/Image/ExifTool/TagLookup.pm +4373 -4264
- data/bin/lib/Image/ExifTool/TagNames.pod +249 -17
- data/bin/lib/Image/ExifTool/WriteExif.pl +14 -12
- data/bin/lib/Image/ExifTool/Writer.pl +15 -11
- data/bin/lib/Image/ExifTool/XMPStruct.pl +1 -1
- data/bin/lib/Image/ExifTool.pm +11 -4
- data/bin/lib/Image/ExifTool.pod +45 -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.49';
|
69
69
|
|
70
70
|
sub LensIDConv($$$);
|
71
71
|
sub ProcessNikonAVI($$$);
|
@@ -1013,7 +1013,7 @@ my %hDMIOutputResolutionZ9 = (
|
|
1013
1013
|
1 => '4320p',
|
1014
1014
|
2 => '2160p',
|
1015
1015
|
3 => '1080p',
|
1016
|
-
|
1016
|
+
4 => '1080i',
|
1017
1017
|
5 => '720p',
|
1018
1018
|
#6 => '576p',
|
1019
1019
|
#7 => '480p',
|
@@ -1059,8 +1059,8 @@ my %imageAreaZ9b = (
|
|
1059
1059
|
);
|
1060
1060
|
|
1061
1061
|
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
|
1062
|
+
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
|
1063
|
+
Notes => 'Z Series cameras thru July 2025',
|
1064
1064
|
);
|
1065
1065
|
|
1066
1066
|
my %iSOAutoHiLimitZ6III = ( #28
|
@@ -1691,14 +1691,15 @@ my %cropHiSpeed = ( #IB
|
|
1691
1691
|
4 => '3:2 Crop', # (1.2x, ref 36)
|
1692
1692
|
6 => '16:9 Crop',
|
1693
1693
|
8 => '2.7x Crop', #36 (D4/D500)
|
1694
|
-
9 => 'DX Movie Crop', # (DX during movie recording, Large)
|
1694
|
+
9 => 'DX Movie 16:9 Crop', # (DX during movie recording, Large)
|
1695
1695
|
10 => '1.3x Movie Crop', #36 (D4/D500)
|
1696
1696
|
11 => 'FX Uncropped',
|
1697
1697
|
12 => 'DX Uncropped',
|
1698
1698
|
13 => '2.8x Movie Crop', #28 (D5/D6) 5584/1936
|
1699
1699
|
14 => '1.4x Movie Crop', #28 (D5/D6) 5584/3856
|
1700
1700
|
15 => '1.5x Movie Crop', #36 (D4/D500) 5600/3872
|
1701
|
-
17 => '1:1 Crop',
|
1701
|
+
17 => 'FX 1:1 Crop',
|
1702
|
+
18 => 'DX 1:1 Crop',
|
1702
1703
|
OTHER => sub {
|
1703
1704
|
my ($val, $inv, $conv) = @_;
|
1704
1705
|
return undef if $inv;
|
@@ -2597,7 +2598,7 @@ my %base64coord = (
|
|
2597
2598
|
},
|
2598
2599
|
},
|
2599
2600
|
{ # (Z6_3 firmware version 1.00, ref 28)
|
2600
|
-
|
2601
|
+
Condition => '$$valPt =~ /^08(09|10|11)/', #0809=Z6iii 0810=Z50ii #0811=Z5ii
|
2601
2602
|
Name => 'ShotInfoZ6III',
|
2602
2603
|
SubDirectory => {
|
2603
2604
|
TagTable => 'Image::ExifTool::Nikon::ShotInfoZ6III',
|
@@ -4919,7 +4920,7 @@ my %base64coord = (
|
|
4919
4920
|
DATAMEMBER => [ 0, 4, 5, 7, 66, 68 ],
|
4920
4921
|
NOTES => q{
|
4921
4922
|
AF information for Nikon cameras with the Expeed 7 processor: The Zf, Z6_3,
|
4922
|
-
Z8, Z9 and
|
4923
|
+
Z8, Z9, Z50_2 and Z5_2.
|
4923
4924
|
},
|
4924
4925
|
0 => {
|
4925
4926
|
Name => 'AFInfo2Version',
|
@@ -4965,8 +4966,8 @@ my %base64coord = (
|
|
4965
4966
|
PrintConv => sub { PrintAFPoints(shift, \@afPoints405) }, #full-frame sensor, 45MP, auto-area focus point configuration
|
4966
4967
|
PrintConvInv => sub { PrintAFPointsInv(shift, \@afPoints405) },
|
4967
4968
|
},{
|
4968
|
-
Name => 'AFPointsUsed', # Z6iii
|
4969
|
-
Condition => '$$self{Model} =~ /^NIKON (Z6_3|Z f)\b/i and ($$self{AFAreaModeUsed} == 197 or $$self{AFAreaModeUsed} == 207)',
|
4969
|
+
Name => 'AFPointsUsed', # Z6iii & Zf (AFInfo2Version 0401) and Z5ii (AFInfo2Version 0402)
|
4970
|
+
Condition => '$$self{Model} =~ /^NIKON (Z6_3|Z f|Z5_2)\b/i and ($$self{AFAreaModeUsed} == 197 or $$self{AFAreaModeUsed} == 207)',
|
4970
4971
|
Format => 'undef[38]',
|
4971
4972
|
ValueConv => 'join(" ", unpack("H2"x38, $val))',
|
4972
4973
|
ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
|
@@ -5000,17 +5001,17 @@ my %base64coord = (
|
|
5000
5001
|
0x43 => [
|
5001
5002
|
{
|
5002
5003
|
Name => 'FocusPositionHorizontal', # 209/231 focus point cameras
|
5003
|
-
Condition => '$$self{Model} =~ /^NIKON Z50_2\b/i and $$self{AFAreaXPosition} != 0', #model Z50ii
|
5004
|
+
Condition => '$$self{Model} =~ /^NIKON Z50_2\b/i and $$self{AFAreaXPosition} and $$self{AFAreaXPosition} != 0', #model Z50ii
|
5004
5005
|
ValueConv => 'int($$self{AFAreaXPosition} / 260 )', #divisor is the estimated separation between adjacent points (informed by the measured Z7ii separation)
|
5005
5006
|
PrintConv => sub { my ($val) = @_; PrintAFPointsLeftRight($val, 19 ) },
|
5006
5007
|
},{
|
5007
5008
|
Name => 'FocusPositionHorizontal', #273/299 focus point cameras
|
5008
|
-
Condition => '$$self{Model} =~ /^NIKON (Z6_3|Z f)\b/i and $$self{AFAreaXPosition} != 0', #models Z6iii
|
5009
|
+
Condition => '$$self{Model} =~ /^NIKON (Z6_3|Z f|Z5_2)\b/i and $$self{AFAreaXPosition} and $$self{AFAreaXPosition} != 0', #models Z6iii, Zf & Z5ii
|
5009
5010
|
ValueConv => 'int($$self{AFAreaXPosition} / 260 )', #divisor is the estimated separation between adjacent points (informed by the measured Z7ii separation)
|
5010
5011
|
PrintConv => sub { my ($val) = @_; PrintAFPointsLeftRight($val, 21 ) },
|
5011
5012
|
},{
|
5012
5013
|
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
|
5014
|
+
Condition => '$$self{Model} =~ /^NIKON (Z 8|Z 9)\b/i and $$self{AFAreaXPosition} and $$self{AFAreaXPosition} != 0', #models Z8 and Z9
|
5014
5015
|
ValueConv => 'int($$self{AFAreaXPosition} / 260 )', #divisor is the measured horizontal pixel separation between adjacent points
|
5015
5016
|
PrintConv => sub { my ($val) = @_; PrintAFPointsLeftRight($val, 29 ) },
|
5016
5017
|
},
|
@@ -5024,17 +5025,17 @@ my %base64coord = (
|
|
5024
5025
|
0x45 => [
|
5025
5026
|
{
|
5026
5027
|
Name => 'FocusPositionVertical', # 209/233 focus point cameras
|
5027
|
-
Condition => '$$self{Model} =~ /^NIKON Z50_2\b/i and $$self{AFAreaYPosition} != 0', #model Z50ii
|
5028
|
+
Condition => '$$self{Model} =~ /^NIKON Z50_2\b/i and $$self{AFAreaYPosition} and $$self{AFAreaYPosition} != 0', #model Z50ii
|
5028
5029
|
ValueConv => 'int($$self{AFAreaYPosition} / 286 )', #divisor chosen to cause center point report 'C'
|
5029
5030
|
PrintConv => sub { my ($val) = @_; PrintAFPointsUpDown($val, 11 ) },
|
5030
5031
|
},{
|
5031
5032
|
Name => 'FocusPositionVertical', #273/299 focus point cameras
|
5032
|
-
Condition => '$$self{Model} =~ /^NIKON (Z6_3|Z f)\b/i and $$self{AFAreaYPosition} != 0', #models Z6iii
|
5033
|
+
Condition => '$$self{Model} =~ /^NIKON (Z6_3|Z f|Z5_2)\b/i and $$self{AFAreaYPosition} and $$self{AFAreaYPosition} != 0', #models Z6iii, Zf & Z5ii
|
5033
5034
|
ValueConv => 'int($$self{AFAreaYPosition} / 286 )', #divisor chosen to cause center point report 'C'
|
5034
5035
|
PrintConv => sub { my ($val) = @_; PrintAFPointsUpDown($val, 13 ) },
|
5035
5036
|
},{
|
5036
5037
|
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
|
5038
|
+
Condition => '$$self{Model} =~ /^NIKON (Z 8|Z 9)\b/i and $$self{AFAreaYPosition} and $$self{AFAreaYPosition} != 0', #models Z8 and Z9
|
5038
5039
|
ValueConv => 'int($$self{AFAreaYPosition} / 292 )', #divisor is the measured vertical pixel separation between adjacent points
|
5039
5040
|
PrintConv => sub { my ($val) = @_; PrintAFPointsUpDown($val, 17 ) },
|
5040
5041
|
},
|
@@ -8668,6 +8669,7 @@ my %nikonFocalConversions = (
|
|
8668
8669
|
},
|
8669
8670
|
0x90 => {
|
8670
8671
|
Name => 'MenuOffset',
|
8672
|
+
Condition => '$$self{Model} =~ /^NIKON Z6_3\b/i',
|
8671
8673
|
Format => 'int32u',
|
8672
8674
|
SubDirectory => {
|
8673
8675
|
TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ6III',
|
@@ -9006,12 +9008,17 @@ my %nikonFocalConversions = (
|
|
9006
9008
|
RawConv => '$$self{FocusShiftShooting} = $val',
|
9007
9009
|
PrintConv => q{
|
9008
9010
|
return 'Off' if $val == 0 ;
|
9009
|
-
my $i = sprintf("Frame %.0f of %.0f",$val, $$self{FocusShiftNumberShots}); # something like Frame 1 of 100"
|
9011
|
+
my $i = sprintf("Frame %.0f of %.0f",$val, $$self{FocusShiftNumberShots}); # something like Frame 1 of 100"
|
9012
|
+
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
9013
|
return "On: $i"
|
9011
9014
|
},
|
9015
|
+
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
9016
|
},
|
9017
|
+
#
|
9018
|
+
# Note: Offsets after this are shifted by +2 for Z8 firmware 3.0 (see Hook above)
|
9019
|
+
#
|
9013
9020
|
0x0028 => {
|
9014
|
-
Name => 'IntervalShooting',
|
9021
|
+
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
9022
|
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96', #not valid for C30/C60/C120
|
9016
9023
|
RawConv => '$$self{IntervalShooting} = $val',
|
9017
9024
|
Format => 'int16u',
|
@@ -9790,7 +9797,7 @@ my %nikonFocalConversions = (
|
|
9790
9797
|
%Image::ExifTool::Nikon::MenuSettingsZ8 = (
|
9791
9798
|
%binaryDataAttrs,
|
9792
9799
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
9793
|
-
DATAMEMBER => [ 72, 152, 200, 204, 244, 440, 548, 554, 570, 596 ],
|
9800
|
+
DATAMEMBER => [ 72, 152, 200, 204, 244, 440, 548, 554, 570, 596, 636 ],
|
9794
9801
|
NOTES => 'These tags are common to all Z8 firmware versions.',
|
9795
9802
|
72 => {
|
9796
9803
|
Name => 'HighFrameRate', #CH and C30/C60/C120 but not CL
|
@@ -9805,7 +9812,7 @@ my %nikonFocalConversions = (
|
|
9805
9812
|
RawConv => '$$self{MultipleExposureMode} = $val',
|
9806
9813
|
PrintConv => \%multipleExposureModeZ9,
|
9807
9814
|
},
|
9808
|
-
154 => {Name => 'MultiExposureShots', Condition => '$$self{MultipleExposureMode} != 0'}, #range 2-9
|
9815
|
+
154 => {Name => 'MultiExposureShots', Condition => '$$self{MultipleExposureMode} != 0'}, #range 2-9 - not present in a NEF, only in the assembled JPG
|
9809
9816
|
184 => {
|
9810
9817
|
Name => 'IntervalDurationHours',
|
9811
9818
|
Format => 'int32u',
|
@@ -9904,7 +9911,7 @@ my %nikonFocalConversions = (
|
|
9904
9911
|
Notes => 'AE and/or Flash Bracketing',
|
9905
9912
|
PrintConv => \%bracketIncrementZ9,
|
9906
9913
|
},
|
9907
|
-
570 => { Name => 'HDR', RawConv => '$$self{HDR} = $val', PrintConv => \%multipleExposureModeZ9 },
|
9914
|
+
570 => { Name => 'HDR', RawConv => '$$self{HDR} = $val', PrintConv => \%multipleExposureModeZ9 }, #will be 'on' for the tone mapped JPGs, off for the source NEF files
|
9908
9915
|
#572 HDRSaveRaw 0=> No; 1=> Yes
|
9909
9916
|
576 => { Name => 'SecondarySlotFunction', PrintConv => \%secondarySlotFunctionZ9 },
|
9910
9917
|
582 => { Name => 'HDRLevel', Condition => '$$self{HDR} ne 0', PrintConv => \%hdrLevelZ8 },
|
@@ -9919,7 +9926,15 @@ my %nikonFocalConversions = (
|
|
9919
9926
|
},
|
9920
9927
|
618 => { Name => 'ToneMap', PrintConv => { 0 => 'SDR', 1 => 'HLG' }, Unknown => 1 },
|
9921
9928
|
622 => { Name => 'PortraitImpressionBalance', PrintConv => \%portraitImpressionBalanceZ8 },
|
9922
|
-
636 => {
|
9929
|
+
636 => {
|
9930
|
+
Name => 'HighFrequencyFlickerReduction',
|
9931
|
+
PrintConv => \%offOn,
|
9932
|
+
Unknown => 1,
|
9933
|
+
Hook => '$varSize += 4 if $$self{FirmwareVersion} and $$self{FirmwareVersion} ge "03.00"',
|
9934
|
+
},
|
9935
|
+
#
|
9936
|
+
# firmware 3.00 adds 4 bytes somewhere in the range 638-730 (hence the Hook above)
|
9937
|
+
#
|
9923
9938
|
730 => {
|
9924
9939
|
Name => 'MovieImageArea',
|
9925
9940
|
Unknown => 1,
|
@@ -10028,7 +10043,15 @@ my %nikonFocalConversions = (
|
|
10028
10043
|
Name => 'MenuSettingsZ8',
|
10029
10044
|
Format => 'undef[943]',
|
10030
10045
|
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ8' },
|
10031
|
-
Hook =>
|
10046
|
+
Hook => q{
|
10047
|
+
if ($$self{FirmwareVersion}) {
|
10048
|
+
if ($$self{FirmwareVersion} =~ /^02\.10/) {
|
10049
|
+
$varSize += 4;
|
10050
|
+
} elsif ($$self{FirmwareVersion} ge "03.0") {
|
10051
|
+
$varSize += 8
|
10052
|
+
}
|
10053
|
+
}
|
10054
|
+
},
|
10032
10055
|
},
|
10033
10056
|
943 => {
|
10034
10057
|
Name => 'CustomSettingsZ8',
|
@@ -10079,22 +10102,26 @@ my %nikonFocalConversions = (
|
|
10079
10102
|
1880 => { Name => 'NonCPULens18MaxAperture', Format => 'int32u', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
|
10080
10103
|
1884 => { Name => 'NonCPULens19MaxAperture', Format => 'int32u', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
|
10081
10104
|
1888 => { Name => 'NonCPULens20MaxAperture', Format => 'int32u', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
|
10082
|
-
|
10083
|
-
|
10084
|
-
|
10085
|
-
|
10086
|
-
|
10087
|
-
|
10105
|
+
1904 => { Name => 'HDMIOutputResolution', PrintConv => \%hDMIOutputResolutionZ9 },
|
10106
|
+
1922 => { Name => 'AirplaneMode', PrintConv => \%offOn, Unknown => 1 },
|
10107
|
+
1923 => { Name => 'EmptySlotRelease', PrintConv => { 0 => 'Disable Release', 1 => 'Enable Release' }, Unknown => 1 },
|
10108
|
+
1958 => { Name => 'EnergySavingMode', PrintConv => \%offOn, Unknown => 1 },
|
10109
|
+
1986 => { Name => 'USBPowerDelivery', PrintConv => \%offOn, Unknown => 1 },
|
10110
|
+
1995 => { Name => 'SensorShield', PrintConv => { 0 => 'Stays Open', 1 => 'Closes' }, Unknown => 1 },
|
10088
10111
|
2046 => { Name => 'PixelShiftShooting', RawConv => '$$self{PixelShiftShooting} = $val', PrintConv => \%multipleExposureModeZ9 }, #off/on/on (series)
|
10089
10112
|
2048 => { Name => 'PixelShiftNumberShots', Condition => '$$self{PixelShiftShooting} > 0', PrintConv => \%pixelShiftNumberShots },
|
10090
10113
|
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', %
|
10114
|
+
2052 => { Name => 'PlaybackButton', %buttonsZ8 }, #CSf2
|
10115
|
+
2054 => { Name => 'WBButton', %buttonsZ8}, #CSf2
|
10116
|
+
2056 => { Name => 'BracketButton', %buttonsZ8}, #CSf2
|
10117
|
+
2058 => { Name => 'LensFunc1ButtonPlaybackMode', %buttonsZ8}, #CSf3
|
10118
|
+
2060 => { Name => 'LensFunc2ButtonPlaybackMode', %buttonsZ8}, #CSf3
|
10119
|
+
2062 => { Name => 'PlaybackButtonPlaybackMode', %buttonsZ8}, #CSf3
|
10120
|
+
2064 => { Name => 'BracketButtonPlaybackMode', %buttonsZ8}, #CSf3
|
10121
|
+
#2088 FlickerFrequencyPreset #Z8 fw 3.0
|
10122
|
+
2206 => { Name => 'MaximumApertureLV', PrintConv => \%offOn, Unknown => 1 }, #CSa14
|
10123
|
+
2208 => { Name => 'ReleaseModeButton', %buttonsZ8}, #CSf2
|
10124
|
+
2216 => { Name => 'ReleaseModeButtonPlaybackMode', %buttonsZ8}, #CSf3
|
10098
10125
|
);
|
10099
10126
|
|
10100
10127
|
%Image::ExifTool::Nikon::MenuSettingsZ9 = (
|
@@ -12057,6 +12084,7 @@ my %nikonFocalConversions = (
|
|
12057
12084
|
%Image::ExifTool::Nikon::MakerNotes0x56 = (
|
12058
12085
|
%binaryDataAttrs,
|
12059
12086
|
GROUPS => { 0 => 'MakerNotes' },
|
12087
|
+
DATAMEMBER => [ 12 ],
|
12060
12088
|
0 => {
|
12061
12089
|
Name => 'FirmwareVersion56',
|
12062
12090
|
Format => 'string[4]',
|
@@ -12067,6 +12095,11 @@ my %nikonFocalConversions = (
|
|
12067
12095
|
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
12096
|
Format => 'int16u'
|
12069
12097
|
},
|
12098
|
+
12 => {
|
12099
|
+
Name => 'PixelShiftID', # 1 => Pixel shift enabled (either directly or thru Focus Shift Shooting with Z8 fw 3.0)
|
12100
|
+
RawConv => '$$self{PixelShiftActive} = $val',
|
12101
|
+
Hidden => 1
|
12102
|
+
},
|
12070
12103
|
);
|
12071
12104
|
|
12072
12105
|
# extra info found in IFD0 of NEF files (ref PH, Z6/Z7)
|
@@ -12105,6 +12138,7 @@ my %nikonFocalConversions = (
|
|
12105
12138
|
Name => 'DistortionCorrection', #used by ACR to determine whether the built-in lens profile is applied
|
12106
12139
|
Format => 'int8u',
|
12107
12140
|
PrintConv => {
|
12141
|
+
0 => 'No Lens Attached', #to prevent reporting 'Unknown'
|
12108
12142
|
1 => 'On (Optional)',
|
12109
12143
|
2 => 'Off',
|
12110
12144
|
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
|