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