summaryrefslogtreecommitdiff
path: root/lib/Image/ExifTool/NikonSettings.pm
diff options
context:
space:
mode:
authorexiftool <exiftool@users.sourceforge.net>2021-01-18 08:46:48 -0500
committerexiftool <exiftool@users.sourceforge.net>2021-01-18 08:46:48 -0500
commit3c3b0aff8521aaf6a8d1a60686df8173ee44bd86 (patch)
tree6bfde228975f0e7b992fb50bb7969bf506920bb9 /lib/Image/ExifTool/NikonSettings.pm
parentb9d3dee6b9eaeb6d236a0dcadb8eb5471874f140 (diff)
Update to 12.15
Diffstat (limited to 'lib/Image/ExifTool/NikonSettings.pm')
-rw-r--r--lib/Image/ExifTool/NikonSettings.pm2013
1 files changed, 2013 insertions, 0 deletions
diff --git a/lib/Image/ExifTool/NikonSettings.pm b/lib/Image/ExifTool/NikonSettings.pm
new file mode 100644
index 00000000..0294a64b
--- /dev/null
+++ b/lib/Image/ExifTool/NikonSettings.pm
@@ -0,0 +1,2013 @@
+#------------------------------------------------------------------------------
+# File: NikonSettings.pm
+#
+# Description: Read Nikon user settings
+#
+# Revisions: 2021/01/08 - Warren Hatch Created
+# 2021/01/12 - PH Created ProcessNikonSettings() to extract tags
+# by ID instead of using fixed offsets
+#
+# References: 1) Warren Hatch private communication (D6 and Z7_2)
+#
+#------------------------------------------------------------------------------
+
+package Image::ExifTool::NikonSettings;
+
+use strict;
+use vars qw($VERSION);
+use Image::ExifTool qw(:DataAccess :Utils);
+
+$VERSION = '1.00';
+
+sub ProcessNikonSettings($$$);
+
+my %enableDisable = ( 1 => 'Enable', 2 => 'Disable' );
+
+my %funcButtonZ7m2 = (
+ 1 => 'AF-On',
+ 2 => 'AF Lock Only',
+ 3 => 'AE Lock (hold)',
+ 4 => 'AE Lock (reset on release)',
+ 5 => 'AE Lock Only',
+ 6 => 'AE/AF Lock',
+ 7 => 'FV Lock',
+ 8 => 'Flash Disable/Enable',
+ 9 => 'Preview',
+ 10 => 'Matrix Metering',
+ 11 => 'Center-weighted Metering',
+ 12 => 'Spot Metering',
+ 13 => 'Highlight-weighted Metering',
+ 14 => 'Bracketing Burst',
+ 15 => 'Synchronized Release (Master)',
+ 16 => 'Synchronized Release (Remote)', # no settings map to 17 or 18
+ 19 => '+NEF(RAW)',
+ 20 => 'Subject Tracking',
+ 21 => 'Silent Photography',
+ 22 => 'LiveView Info Display On/Off',
+ 23 => 'Grid Display',
+ 24 => 'Zoom (Low)',
+ 25 => 'Zoom (1:1)',
+ 26 => 'Zoom (High)',
+ 27 => 'My Menu',
+ 28 => 'My Menu Top Item',
+ 29 => 'Playback',
+ 30 => 'Protect',
+ 31 => 'Image Area',
+ 32 => 'Image Quality',
+ 33 => 'White Balance',
+ 34 => 'Picture Control',
+ 35 => 'Active-D Lighting',
+ 36 => 'Metering',
+ 37 => 'Flash Mode',
+ 38 => 'Focus Mode',
+ 39 => 'Auto Bracketing',
+ 40 => 'Multiple Exposure',
+ 41 => 'HDR',
+ 42 => 'Exposure Delay Mode',
+ 43 => 'Shutter/Aperture Lock',
+ 44 => 'Focus Peaking',
+ 45 => 'Rating 0',
+ 46 => 'Rating 5',
+ 47 => 'Rating 4',
+ 48 => 'Rating 3',
+ 49 => 'Rating 2',
+ 50 => 'Rating 1', # no settings map to x'51 (possibly intended for 'Candidate for Delection'
+ 52 => 'Non-CPU Lens',
+ 52 => 'None',
+);
+
+my %flickUpDownD6 = (
+ 1 => 'Rating',
+ 2 => 'Select To Send',
+ 3 => 'Protect',
+ 4 => 'Voice Memo',
+ 5 => 'None',
+);
+
+my %flickUpDownRatingD6 = (
+ 1 => 'Rating 5',
+ 2 => 'Rating 4',
+ 3 => 'Rating 3',
+ 4 => 'Rating 2',
+ 5 => 'Rating 1',
+ 6 => 'Candidate for Deletion',
+);
+
+my %groupAreaCustom = (
+ 1 => '1x7',
+ 2 => '1x5',
+ 3 => '3x7',
+ 4 => '3x5',
+ 5 => '3x3',
+ 6 => '5x7',
+ 7 => '5x5',
+ 8 => '5x3',
+ 9 => '5x1',
+ 10 => '7x7',
+ 11 => '7x5',
+ 12 => '7x3',
+ 13 => '7x1',
+ 14 => '11x3',
+ 15 => '11x1',
+ 16 => '15x3',
+ 17 => '15x1',
+);
+
+my %iSOAutoHiLimitD6 = (
+ 1 => 'ISO 200',
+ 2 => 'ISO 250',
+ 3 => 'ISO 280',
+ 4 => 'ISO 320',
+ 5 => 'ISO 400',
+ 6 => 'ISO 500',
+ 7 => 'ISO 560',
+ 8 => 'ISO 640',
+ 9 => 'ISO 800',
+ 10 => 'ISO 1000',
+ 11 => 'ISO 1100',
+ 12 => 'ISO 1250',
+ 13 => 'ISO 1600',
+ 14 => 'ISO 2000',
+ 15 => 'ISO 2200',
+ 16 => 'ISO 2500',
+ 17 => 'ISO 3200',
+ 18 => 'ISO 4000',
+ 19 => 'ISO 4500',
+ 20 => 'ISO 5000',
+ 21 => 'ISO 6400',
+ 22 => 'ISO 8000',
+ 23 => 'ISO 9000',
+ 24 => 'ISO 10000',
+ 25 => 'ISO 12800',
+ 26 => 'ISO 16000',
+ 27 => 'ISO 18000',
+ 28 => 'ISO 20000',
+ 29 => 'ISO 25600',
+ 30 => 'ISO 32000',
+ 31 => 'ISO 36000',
+ 32 => 'ISO 40000',
+ 33 => 'ISO 51200',
+ 34 => 'ISO 64000',
+ 35 => 'ISO 72000',
+ 36 => 'ISO 81200',
+ 37 => 'ISO 102400',
+ 38 => 'ISO Hi 0.3',
+ 39 => 'ISO Hi 0.5',
+ 40 => 'ISO Hi 0.7',
+ 41 => 'ISO Hi 1.0',
+ 42 => 'ISO Hi 2.0',
+ 43 => 'ISO Hi 3.0',
+ 44 => 'ISO Hi 4.0',
+ 45 => 'ISO Hi 5.0',
+);
+
+my %lensFuncButtonZ7m2 = (
+ 1 => 'AF-On',
+ 2 => 'AF Lock Only',
+ 3 => 'AE Lock (hold)',
+ 4 => 'AE Lock (reset on release)',
+ 5 => 'AE Lock Only',
+ 6 => 'AE/AF Lock',
+ 7 => 'FV Lock',
+ 8 => 'Flash Disable/Enable',
+ 9 => 'Preview',
+ 10 => 'Matrix Metering',
+ 11 => 'Center-weighted Metering',
+ 12 => 'Spot Metering',
+ 13 => 'Highlight-weighted Metering',
+ 14 => 'Bracketing Burst',
+ 15 => 'Synchronized Release (Master)',
+ 16 => 'Synchronized Release (Remote)', # no settings map to 17 or 18 (Z7II fw 1.01)
+ 19 => '+NEF(RAW)',
+ 20 => 'Subject Tracking',
+ 21 => 'Grid Display',
+ 22 => 'Zoom (Low)',
+ 23 => 'Zoom (1:1)',
+ 24 => 'Zoom (High)',
+ 25 => 'My Menu',
+ 26 => 'My Menu Top Item',
+ 27 => 'Playback',
+ 28 => 'None',
+);
+
+my %limitNolimit = ( 1 => 'Limit', 2 => 'No Limit' );
+
+my %limtReleaseModeSel = (
+ 0 => 'No Limit', # not sure why 0 and 2 both map to 'No Limit', but they do
+ 1 => 'Limit',
+ 2 => 'No Limit',
+);
+
+my %menuBank = (
+ 1 => 'A',
+ 2 => 'B',
+ 3 => 'C',
+ 4 => 'D',
+);
+
+my %noYes = ( 1 => 'No', 2 => 'Yes' );
+my %offOn = ( 1 => 'Off', 2 => 'On' );
+my %onOff = ( 1 => 'On', 2 => 'Off' );
+
+my %previewButtonD6 = (
+ 1 => 'Preset Focus Point - Press To Recall',
+ 2 => 'Preset Focus Point - Hold To Recall',
+ 3 => 'AF-AreaMode S',
+ 4 => 'AF-AreaMode D9',
+ 5 => 'AF-AreaMode D25',
+ 6 => 'AF-AreaMode D49',
+ 7 => 'AF-AreaMode D105',
+ 8 => 'AF-AreaMode 3D',
+ 9 => 'AF-AreaMode Group',
+ 10 => 'AF-AreaMode Group C1',
+ 11 => 'AF-AreaMode Group C2',
+ 12 => 'AF-AreaMode Auto Area',
+ 13 => 'AF-AreaMode + AF-On S',
+ 14 => 'AF-AreaMode + AF-On D9',
+ 15 => 'AF-AreaMode + AF-On D25',
+ 16 => 'AF-AreaMode + AF-On D49',
+ 17 => 'AF-AreaMode + AF-On D105',
+ 18 => 'AF-AreaMode + AF-On 3D',
+ 19 => 'AF-AreaMode + AF-On Group',
+ 20 => 'AF-AreaMode + AF-On Group C1',
+ 21 => 'AF-AreaMode + AF-On Group C2',
+ 22 => 'AF-AreaMode + AF-On Auto Area',
+ 23 => 'AF-On',
+ 24 => 'AF Lock Only',
+ 25 => 'AE Lock (hold)',
+ 26 => 'AE/WB Lock (hold)',
+ 27 => 'AE Lock (reset on release)',
+ 28 => 'AE Lock Only',
+ 29 => 'AE/AF Lock',
+ 30 => 'FV Lock',
+ 31 => 'Flash Disable/Enable',
+ 32 => 'Preview',
+ 33 => 'Recall Shooting Functions',
+ 34 => 'Bracketing Burst',
+ 35 => 'Synchronized Release (Master)',
+ 36 => 'Synchronized Release (Remote)', # no settings map to 37 or 38
+ 39 => '+NEF(RAW)',
+ 40 => 'Grid Display',
+ 41 => 'Virtual Horizon',
+ 42 => 'Voice Memo',
+ 43 => 'Wired LAN',
+ 44 => 'My Menu',
+ 45 => 'My Menu Top Item',
+ 46 => 'Playback',
+ 47 => 'Filtered Playback',
+ 48 => 'Photo Shooting Bank',
+ 49 => 'AF Mode/AF Area Mode',
+ 50 => 'Image Area',
+ 51 => 'Active-D Lighting',
+ 52 => 'Exposure Delay Mode',
+ 53 => 'Shutter/Aperture Lock',
+ 54 => '1 Stop Speed/Aperture',
+ 55 => 'Non-CPU Lens',
+ 56 => 'None',
+);
+
+my %releaseFocus = (
+ 1 => 'Release',
+ 2 => 'Focus',
+);
+
+my %tagMultiSelector = (
+ 1 => 'Restart Standby Timer',
+ 2 => 'Do Nothing',
+);
+
+my %tagSecondarySlotFunction = (
+ 1 => 'Overflow',
+ 2 => 'Backup',
+ 3 => 'NEF Primary + JPG Secondary',
+ 4 => 'JPG Primary + JPG Secondary',
+);
+
+my %tagSubSelector = (
+ 1 => 'Same as MultiSelector',
+ 2 => 'Focus Point Selection',
+);
+
+my %thirdHalfFull = (
+ 1 => '1/3 EV',
+ 2 => '1/2 EV',
+ 3 => '1 EV',
+);
+
+my %times4s10s20s1m5m20m = (
+ 1 => '4 s',
+ 2 => '10 s',
+ 3 => '20 s',
+ 4 => '1 min',
+ 5 => '5 min',
+ 6 => '10 min',
+);
+
+my %yesNo = ( 1 => 'Yes', 2 => 'No' );
+
+my %infoZ72 = (
+ Condition => '$$self{Model} =~ /^NIKON Z 6_2/i or $$self{Model} =~ /^NIKON Z 7_2/i',
+ Notes => 'Z7_2',
+);
+
+my %infoD6 = (
+ Condition => '$$self{Model} =~ /^NIKON D6/i',
+ Notes => 'D6',
+);
+
+# Nikon Settings tags (ref 1, tag ID's ref PH)
+%Image::ExifTool::NikonSettings::Main = (
+ PROCESS_PROC => \&ProcessNikonSettings,
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
+ NOTES => q{
+ User settings for newer Nikon models. A number of the tags are marked as
+ Unknown only to reduce the volume of the normal output.
+ },
+ 0x001 => [{
+ Name => 'ISOAutoHiLimit',
+ PrintConv => \%iSOAutoHiLimitD6,
+ %infoD6,
+ },{
+ Name => 'ISOAutoHiLimit',
+ PrintConv => {
+ 1 => 'ISO 100',
+ 2 => 'ISO 125',
+ 4 => 'ISO 160',
+ 5 => 'ISO 200',
+ 6 => 'ISO 250',
+ 8 => 'ISO 320',
+ 9 => 'ISO 400',
+ 10 => 'ISO 500',
+ 12 => 'ISO 640',
+ 13 => 'ISO 800',
+ 14 => 'ISO 1000',
+ 16 => 'ISO 1250',
+ 17 => 'ISO 1600',
+ 18 => 'ISO 2000',
+ 20 => 'ISO 2500',
+ 21 => 'ISO 3200',
+ 22 => 'ISO 4000',
+ 24 => 'ISO 5000',
+ 25 => 'ISO 6400',
+ 26 => 'ISO 8000',
+ 28 => 'ISO 10000',
+ 29 => 'ISO 12800',
+ 30 => 'ISO 16000',
+ 32 => 'ISO 20000',
+ 33 => 'ISO 25600',
+ 38 => 'ISO Hi 0.3',
+ 39 => 'ISO Hi 0.5',
+ 40 => 'ISO Hi 0.7',
+ 41 => 'ISO Hi 1.0',
+ 42 => 'ISO Hi 2.0',
+ },
+ %infoZ72,
+ }],
+ 0x002 => [{
+ Name => 'ISOAutoFlashLimit',
+ PrintConv => {
+ 1 => 'Same As Without Flash',
+ 2 => 'ISO 200',
+ 3 => 'ISO 250',
+ 5 => 'ISO 320',
+ 6 => 'ISO 400',
+ 7 => 'ISO 500',
+ 9 => 'ISO 640',
+ 10 => 'ISO 800',
+ 11 => 'ISO 1000',
+ 13 => 'ISO 1250',
+ 14 => 'ISO 1600',
+ 15 => 'ISO 2000',
+ 17 => 'ISO 2500',
+ 18 => 'ISO 3200',
+ 19 => 'ISO 4000',
+ 21 => 'ISO 5000',
+ 22 => 'ISO 6400',
+ 23 => 'ISO 8000',
+ 25 => 'ISO 10000',
+ 26 => 'ISO 12800',
+ 27 => 'ISO 16000',
+ 29 => 'ISO 20000',
+ 30 => 'ISO 25600',
+ 31 => 'ISO 32000',
+ 33 => 'ISO 40000',
+ 34 => 'ISO 51200',
+ 35 => 'ISO 64000',
+ 36 => 'ISO 72000',
+ 37 => 'ISO 81200',
+ 38 => 'ISO 102400',
+ 39 => 'ISO Hi 0.3',
+ 40 => 'ISO Hi 0.5',
+ 41 => 'ISO Hi 0.7',
+ 42 => 'ISO Hi 1.0',
+ 43 => 'ISO Hi 2.0',
+ 44 => 'ISO Hi 3.0',
+ 45 => 'ISO Hi 4.0',
+ 46 => 'ISO Hi 5.0',
+ },
+ %infoD6,
+ },{
+ Name => 'ISOAutoFlashLimit',
+ PrintConv => {
+ 1 => 'Same As Without Flash',
+ 2 => 'ISO 100',
+ 3 => 'ISO 125',
+ 5 => 'ISO 160',
+ 6 => 'ISO 200',
+ 7 => 'ISO 250',
+ 9 => 'ISO 320',
+ 10 => 'ISO 400',
+ 11 => 'ISO 500',
+ 13 => 'ISO 640',
+ 14 => 'ISO 800',
+ 15 => 'ISO 1000',
+ 17 => 'ISO 1250',
+ 18 => 'ISO 1600',
+ 19 => 'ISO 2000',
+ 21 => 'ISO 2500',
+ 22 => 'ISO 3200',
+ 23 => 'ISO 4000',
+ 25 => 'ISO 5000',
+ 26 => 'ISO 6400',
+ 27 => 'ISO 8000',
+ 29 => 'ISO 10000',
+ 30 => 'ISO 12800',
+ 31 => 'ISO 16000',
+ 33 => 'ISO 20000',
+ 34 => 'ISO 25600',
+ 39 => 'ISO Hi 0.3',
+ 40 => 'ISO Hi 0.5',
+ 41 => 'ISO Hi 0.7',
+ 42 => 'ISO Hi 1.0',
+ 43 => 'ISO Hi 2.0',
+ },
+ %infoZ72,
+ }],
+ 0x003 => { # (D6/Z7_2)
+ Name => 'ISOAutoShutterTime',
+ PrintConv => {
+ 1 => 'Auto (Slowest)',
+ 2 => 'Auto (Slower)',
+ 3 => 'Auto',
+ 4 => 'Auto (Faster)',
+ 5 => 'Auto (Fastest)',
+ 6 => '1/4000 s',
+ 7 => '1/3200 s',
+ 8 => '1/2500 s',
+ 9 => '1/2000 s',
+ 10 => '1/1600 s',
+ 11 => '1/1250 s',
+ 12 => '1/1000 s',
+ 13 => '1/800 s',
+ 14 => '1/640 s',
+ 15 => '1/500 s',
+ 16 => '1/400 s',
+ 17 => '1/320 s',
+ 18 => '1/250 s',
+ 19 => '1/200 s',
+ 20 => '1/160 s',
+ 21 => '1/125 s',
+ 22 => '1/100 s',
+ 23 => '1/80 s',
+ 24 => '1/60 s',
+ 25 => '1/50 s',
+ 26 => '1/40 s',
+ 27 => '1/30 s',
+ 28 => '1/25 s',
+ 29 => '1/20 s',
+ 30 => '1/15 s',
+ 31 => '1/13 s',
+ 32 => '1/10 s',
+ 33 => '1/8 s',
+ 34 => '1/6 s',
+ 35 => '1/5 s',
+ 36 => '1/4 s',
+ 37 => '1/3 s',
+ 38 => '1/2.5 s',
+ 39 => '1/2 s',
+ 40 => '1/1.6 s',
+ 41 => '1/1.3 s',
+ 42 => '1 s',
+ 43 => '1.3 s',
+ 44 => '1.6 s',
+ 45 => '2 s',
+ 46 => '2.5 s',
+ 47 => '3 s',
+ 48 => '4 s',
+ 49 => '5 s',
+ 50 => '6 s',
+ 51 => '8 s',
+ 52 => '10 s',
+ 53 => '13 s',
+ 54 => '15 s',
+ 55 => '20 s',
+ 56 => '25 s',
+ 57 => '30 s',
+ },
+ },
+ 0x00b => { Name => 'FlickerReductionShooting', PrintConv => \%enableDisable }, # (D6/Z7_2)
+ 0x00c => { Name => 'FlickerReductionIndicator',PrintConv => \%enableDisable }, # (D6)
+ 0x00d => [{
+ Name => 'MovieISOAutoHiLimit',
+ PrintConv => \%iSOAutoHiLimitD6,
+ %infoD6,
+ },{
+ Name => 'MovieISOAutoHiLimit',
+ PrintConv => {
+ 1 => 'ISO 200',
+ 2 => 'ISO 250',
+ 4 => 'ISO 320',
+ 5 => 'ISO 400',
+ 6 => 'ISO 500',
+ 8 => 'ISO 640',
+ 9 => 'ISO 800',
+ 10 => 'ISO 1000',
+ 12 => 'ISO 1250',
+ 13 => 'ISO 1600',
+ 14 => 'ISO 2000',
+ 16 => 'ISO 2500',
+ 17 => 'ISO 3200',
+ 18 => 'ISO 4000',
+ 20 => 'ISO 5000',
+ 21 => 'ISO 6400',
+ 22 => 'ISO 8000',
+ 24 => 'ISO 10000',
+ 25 => 'ISO 12800',
+ 26 => 'ISO 16000',
+ 28 => 'ISO 20000',
+ 29 => 'ISO 25600',
+ 34 => 'ISO Hi 0.3',
+ 35 => 'ISO Hi 0.5',
+ 36 => 'ISO Hi 0.7',
+ 37 => 'ISO Hi 1.0',
+ 38 => 'ISO Hi 2.0',
+ },
+ %infoZ72,
+ }],
+ 0x00e => { Name => 'MovieISOAutoControlManualMode',PrintConv => \%onOff }, # (D6/Z7_2)
+ # 0x00f => [{ # this tag should reside here, but unable to confirm
+ # Name => 'MovieISOAutoManualMode',
+ # PrintConv => \%iSOAutoHiLimitD6,
+ # %infoD6,
+ # },{
+ # Name => 'MovieISOAutoManualMode',
+ # PrintConv => \%iSOAutoHiLimitZ7m2,
+ # %infoZ72,
+ # }],
+ 0x01d => [{ # CSa1 (D6)
+ Name => 'AF-CPrioritySel',
+ PrintConv => { # valid for cameras with 4 options for CS1, otherwise 1=Release, 2=Focus
+ 1 => 'Release',
+ 2 => 'Release + Focus',
+ 3 => 'Focus + Release',
+ 4 => 'Focus',
+ },
+ %infoD6,
+ },{ # CSa1 (Z7_2)
+ Name => 'AF-CPrioritySel',
+ PrintConv => \%releaseFocus,
+ %infoZ72,
+ }],
+ 0x01e => { Name => 'AF-SPrioritySel', PrintConv => \%releaseFocus }, # CSa2 (D6), CSa2 (Z7_2)
+ 0x020 => [{ # CSa4 (D6)
+ Name => 'AFPointSel',
+ PrintConv => {
+ 1 => '105 Points',
+ 2 => '27 Points',
+ 3 => '15 Points',
+ },
+ %infoD6,
+ },{ # CSa4 (Z7_2)
+ Name => 'AFPointSel',
+ PrintConv => { 1 => 'Use All', 2 => 'Use Half' },
+ %infoZ72,
+ }],
+ 0x022 => { Name => 'AFActivation', PrintConv => { 1 => 'Shutter/AF-On', 2 => 'AF-On Only' } }, # CSa6-a (D6/Z7_2) (missing enable/disable out of focus release) # (D6)
+ 0x023 => { Name => 'FocusPointWrap', PrintConv => { 1 => 'Wrap', 2 => 'No Wrap' } }, # CSa16 (D6), CSa8 (Z7_2)
+ 0x025 => { # CSa17-a (D6), CSa9-a (Z7_2)
+ Name => 'ManualFocusPointIllumination',
+ PrintConv => {
+ 1 => 'On',
+ 2 => 'On During Focus Point Selection Only',
+ },
+ },
+ 0x026 => { Name => 'AF-AssistIlluminator', PrintConv => \%onOff }, # CSa11 (Z7_2)
+ # 0x027 => { Name => 'ManualFocusRingInAFMode', PrintConv => \%onOff }, # CSa18 (D6,Z7_2) capability documented in manual, but visibility (& ability to test) requires a compatible lens
+ 0x029 => { Name => 'ISOStepSize', PrintConv => \%thirdHalfFull }, # CSb1 (D6)
+ 0x02a => { Name => 'ExposureControlStepSize', PrintConv => \%thirdHalfFull }, # CSb2 (D6), CSb1 (Z7_2)
+ 0x02b => { # CSb4 (D6), CSb2 (Z7_2)
+ Name => 'EasyExposureCompensation',
+ PrintConv => {
+ 1 => 'On (auto reset)',
+ 2 => 'On',
+ 3 => 'Off',
+ },
+ },
+ 0x02c => { Name => 'MatrixMetering', PrintConv => { 1 => 'Face Detection On', 2 => 'Face Detection Off' } }, # CSb5 (D6)
+ 0x02d => [{ # CSb6 (D6)
+ Name => 'CenterWeightedAreaSize',
+ PrintConv => {
+ 1 => '8 mm',
+ 2 => '12 mm',
+ 3 => '15 mm',
+ 4 => '20 mm',
+ 5 => 'Average',
+ },
+ %infoD6
+ },{ # CSb3 (Z7_2)
+ Name => 'CenterWeightedAreaSize',
+ PrintConv => { 1 => '12 mm', 2 => 'Average' },
+ %infoZ72,
+ }],
+ 0x02f => { # CSb7-a (D6), CSb4-a (Z7_2)
+ Name => 'FineTuneOptMatrixMetering',
+ ValueConv => '($val - 7) / 6',
+ ValueConvInv => 'int($val*6+7)',
+ PrintConv => '$val ? sprintf("%+.2f", $val) : 0',
+ PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
+ },
+ 0x030 => { # CSb7-b (D6), CSb4-b (Z7_2)
+ Name => 'FineTuneOptCenterWeighted',
+ ValueConv => '($val - 7) / 6',
+ ValueConvInv => 'int($val*6+7)',
+ PrintConv => '$val ? sprintf("%+.2f", $val) : 0',
+ PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
+ },
+ 0x031 => { # CSb7-c (D6), CSb4-c (Z7_2)
+ Name => 'FineTuneOptSpotMetering',
+ ValueConv => '($val - 7) / 6',
+ ValueConvInv => 'int($val*6+7)',
+ PrintConv => '$val ? sprintf("%+.2f", $val) : 0',
+ PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
+ },
+ 0x032 => { # CSb7-d (D6), CSb4-d (Z7_2)
+ Name => 'FineTuneOptHighlightWeighted',
+ ValueConv => '($val - 7) / 6',
+ ValueConvInv => 'int($val*6+7)',
+ PrintConv => '$val ? sprintf("%+.2f", $val) : 0',
+ PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
+ },
+ 0x033 => { # CSc1 (D6), CSc1 (Z7_2)
+ Name => 'ShutterReleaseButtonAE-L',
+ PrintConv => {
+ 1 => 'On (Half Press)',
+ 2 => 'On (Burst Mode)',
+ 3 => 'Off',
+ },
+ },
+ 0x034 => [{ # CSc2 (D6)
+ Name => 'StandbyMonitorOffTime',
+ PrintConv => {
+ 1 => '4 s',
+ 2 => '6 s',
+ 3 => '10 s',
+ 4 => '30 s',
+ 5 => '1 min',
+ 6 => '5 min',
+ 7 => '10 min',
+ 8 => '30 min',
+ 9 => 'No Limit',
+ },
+ %infoD6,
+ },{ # CSc4-d (Z7_2)
+ Name => 'StandbyMonitorOffTime',
+ PrintConv => {
+ 1 => '10 s',
+ 2 => '20 s',
+ 3 => '30 s',
+ 4 => '1 min',
+ 5 => '5 min',
+ 6 => '10 min',
+ 7 => '30 min',
+ 8 => 'No Limit',
+ },
+ %infoZ72,
+ }],
+ 0x035 => { # CSc3-a (D6), CSc2-a (Z7_2)
+ Name => 'SelfTimerTime',
+ PrintConv => {
+ 1 => '2 s',
+ 2 => '5 s',
+ 3 => '10 s',
+ 4 => '20 s',
+ },
+ },
+ 0x036 => { Name => 'SelfTimerShotCount', ValueConv => '10 - $val', ValueConvInv => '10 + $val' }, # CSc3-b (D6), CSc2-b (Z7_2)
+ 0x037 => { # CSc3-c (D6), CSc2-c (Z7_2)
+ Name => 'SelfTimerShotInterval',
+ PrintConv => {
+ 1 => '0.5 s',
+ 2 => '1 s',
+ 3 => '2 s',
+ 4 => '3 s',
+ },
+ },
+ 0x038 => { Name => 'PlaybackMonitorOffTime', PrintConv => \%times4s10s20s1m5m20m }, # CSc4-a (D6), CSc3-a (Z7_2)
+ 0x039 => { Name => 'MenuMonitorOffTime', PrintConv => \%times4s10s20s1m5m20m }, # CSc4-b (D6), CSc3-b (Z7_2)
+ 0x03a => { Name => 'ShootingInfoMonitorOffTime',PrintConv => \%times4s10s20s1m5m20m }, # CSc4-c (D6)
+ 0x03b => { # CSc4-d (D6), CSc3-c (Z7_2)
+ Name => 'ImageReviewMonitorOffTime',
+ PrintConv => {
+ 1 => '2 s',
+ 2 => '4 s',
+ 3 => '10 s',
+ 4 => '20 s',
+ 5 => '1 min',
+ 6 => '5 min',
+ 7 => '10 min',
+ },
+ },
+ 0x03c => { # CSc4-e (D6)
+ Name => 'LiveViewMonitorOffTime',
+ PrintConv => {
+ 1 => '5 min',
+ 2 => '10 min',
+ 3 => '15 min',
+ 4 => '20 min',
+ 5 => '30 min',
+ 6 => 'No Limit',
+ },
+ },
+ 0x03e => { Name => 'CLModeShootingSpeed', ValueConv => '6 - $val', ValueConvInv => '6 + $val', PrintConv => '"$val fps"', PrintConvInv => '$val=~s/\s*fps//i; $val' }, # CSd1 (Z7_2)
+ 0x03f => { Name => 'MaxContinuousRelease' }, # CSd2 # values: 1-200 # (D6/Z7_2)
+ 0x040 => { # CSd5 (D6), CSd4 (Z7_2)
+ Name => 'ExposureDelayMode',
+ PrintConv => {
+ 1 => '3 s',
+ 2 => '2 s',
+ 3 => '1 s',
+ 4 => '0.5 s',
+ 5 => '0.2 s',
+ 6 => 'Off',
+ },
+ },
+ 0x041 => { Name => 'ElectronicFront-CurtainShutter',PrintConv => \%onOff }, # CSd6 (D6)
+ 0x042 => { Name => 'FileNumberSequence', PrintConv => \%onOff }, # CSd9 (D6), CSd8 (Z7_2)
+ 0x043 => { Name => 'FramingGridDisplay', PrintConv => \%onOff }, # CSd11 (D6), CSd10 (Z7_2), new tag with implementation of NikonSettings # (Z7_2)
+ 0x045 => { Name => 'LCDIllumination', PrintConv => \%onOff }, # CSd13 (D6)
+ 0x046 => { Name => 'OpticalVR', PrintConv => \%onOff }, # CSd15 (D6)
+ 0x047 => [{ # CSe1 (D6)
+ Name => 'FlashSyncSpeed',
+ PrintConv => {
+ 1 => '1/250 s (auto FP)',
+ 2 => '1/250 s',
+ 3 => '1/200 s',
+ 4 => '1/160 s',
+ 5 => '1/125 s',
+ 6 => '1/100 s',
+ 7 => '1/80 s',
+ 8 => '1/60 s',
+ },
+ %infoD6,
+ },{ # CSe1 (Z7_2)
+ Name => 'FlashSyncSpeed',
+ PrintConv => {
+ 1 => '1/200 s (auto FP)',
+ 2 => '1/200 s',
+ 3 => '1/160 s',
+ 4 => '1/125 s',
+ 5 => '1/100 s',
+ 6 => '1/80 s',
+ 7 => '1/60 s',
+ },
+ %infoZ72,
+ }],
+ 0x048 => { # CSe2 (D6/Z7_2)
+ Name => 'FlashShutterSpeed',
+ PrintConv => {
+ 1 => '1/60 s',
+ 2 => '1/30 s',
+ 3 => '1/15 s',
+ 4 => '1/8 s',
+ 5 => '1/4 s',
+ 6 => '1/2 s',
+ 7 => '1 s',
+ 8 => '2 s',
+ },
+ },
+ 0x049 => { Name => 'FlashExposureCompArea', PrintConv => { 1 => 'Entire Frame', 2 => 'Background Only' } }, # CSe3 (D6/Z7_2)
+ 0x04a => { # CSe4 (D6/Z7_2)
+ Name => 'AutoFlashISOSensitivity',
+ PrintConv => {
+ 1 => 'Subject and Background',
+ 2 => 'Subject Only',
+ },
+ },
+ 0x051 => { # CSf3-l (D6)
+ Name => 'AssignBktButton',
+ PrintConv => {
+ 1 => 'Auto Bracketing',
+ 2 => 'Multiple Exposure',
+ 3 => 'HDR (high dynamic range)',
+ 4 => 'None',
+ },
+ },
+ 0x052 => [{ # CSf3-m (D6)
+ Name => 'AssignMovieRecordButton',
+ PrintConv => {
+ 1 => 'Voice Memo',
+ 2 => 'Photo Shooting Bank',
+ 3 => 'Exposure Mode',
+ 4 => 'AF Mode/AF Area Mode',
+ 5 => 'Image Area',
+ 6 => 'Shutter/Aperture Lock',
+ 7 => 'None',
+ },
+ %infoD6,
+ },{ # CSf2-f (Z7_2)
+ Name => 'AssignMovieRecordButton',
+ PrintConv => {
+ 1 => 'AE Lock (hold)',
+ 2 => 'AE Lock (reset on release)',
+ 3 => 'Preview',
+ 4 => '+NEF(RAW)',
+ 5 => 'LiveView Info Display On/Off',
+ 6 => 'Grid Display',
+ 7 => 'Zoom (Low)',
+ 8 => 'Zoom (1:1)',
+ 9 => 'Zoom (High)',
+ 10 => 'My Menu',
+ 11 => 'My Menu Top Item',
+ 12 => 'Image Area',
+ 13 => 'Image Quality',
+ 14 => 'White Balance',
+ 15 => 'Picture Control',
+ 16 => 'Active-D Lighting',
+ 17 => 'Metering',
+ 18 => 'Flash Mode',
+ 19 => 'Focus Mode',
+ 20 => 'Auto Bracketing',
+ 21 => 'Multiple Exposure',
+ 22 => 'HDR',
+ 23 => 'Exposure Delay Mode',
+ 24 => 'Shutter/Aperture Lock',
+ 25 => 'Non-CPU Lens',
+ 26 => 'None',
+ },
+ %infoZ72,
+ }],
+ 0x053 => [{ # CSf4-a (D6)
+ Name => 'MultiSelectorShootMode',
+ PrintConv => {
+ 1 => 'Select Center Focus Point',
+ 2 => 'Preset Focus Point - Press To Recall',
+ 3 => 'Preset Focus Point - Hold To Recall',
+ 4 => 'None',
+ },
+ %infoD6,
+ },{ # CSf3-a (Z7_2) also called the OK button on this camera
+ Name => 'MultiSelectorShootMode',
+ PrintConv => {
+ 1 => 'Select Center Focus Point',
+ 2 => 'Zoom (Low)',
+ 3 => 'Zoom (1:1)',
+ 4 => 'Zoom (High)',
+ 5 => 'None',
+ },
+ %infoZ72,
+ }],
+ 0x054 => [{ # CSf4-c (D6)
+ Name => 'MultiSelectorPlaybackMode',
+ PrintConv => {
+ 1 => 'Filtered Playback',
+ 2 => 'View Histograms',
+ 3 => 'Zoom (Low)',
+ 4 => 'Zoom (1:1)',
+ 5 => 'Zoom (High)',
+ 6 => 'Choose Folder',
+ },
+ %infoD6,
+ },{ # CSf3-b (Z7_2) # these decodes are correct. However, a new camera (or one following a 'reset all settings') will report Zoom (Low), despite the camera exhibiting the expected behavior (Zoom 1:1). Any change to CSf3-b corrects the reporting.
+ Name => 'MultiSelectorPlaybackMode',
+ PrintConv => {
+ 1 => 'Thumbnail On/Off',
+ 2 => 'View Histograms',
+ 3 => 'Zoom (Low)',
+ 4 => 'Zoom (1:1)',
+ 5 => 'Zoom (High)',
+ 6 => 'Choose Folder',
+ },
+ %infoZ72,
+ }],
+ 0x056 => { # CSf4-b (D6)
+ Name => 'MultiSelectorLiveView',
+ PrintConv => {
+ 1 => 'Select Center Focus Point',
+ 2 => 'Zoom (Low)',
+ 3 => 'Zoom (1:1)',
+ 4 => 'Zoom (High)',
+ 5 => 'None',
+ },
+ },
+ 0x058 => { # CSf6-a-1 and CSf6-a-2 (D6), CSf5-a-1 and CSf5-a-2 (Z7_2), Previous cameras reported these 2 in a single tag (CmdDialsReverseRotation). Blend the separate settings together to match extant tag name and values
+ Name => 'CmdDialsReverseRotExposureComp',
+ RawConv => '$$self{CmdDialsReverseRotExposureComp} = $val',
+ Unknown => 1,
+ },
+ 0x059 => { # CSf6-b-1 and CSf6-b-2 (D6), CSf5-b-1 and CSf5-b-2 (Z7_2), Previous cameras reported these 2 in a single tag (CmdDialsChangeMainSub). Blend the separate settings together to match extant tag name and values
+ Name => 'CmdDialsChangeMainSubExposure',
+ RawConv => '$$self{CmdDialsChangeMainSubExposure} = $val',
+ Unknown => 1,
+ },
+ 0x05a => [{ # CSf6-b-1 and CSf6-b-2 (D6), CSf5-b-1 and CSf5-b-2 (Z7_2), (continued from above)
+ Name => 'CmdDialsChangeMainSub',
+ Condition => '$$self{CmdDialsChangeMainSubExposure} == 1',
+ PrintConv => {
+ 1 => 'Autofocus On, Exposure On',
+ 2 => 'Autofocus Off, Exposure On',
+ },
+ },{
+ Name => 'CmdDialsChangeMainSub',
+ Condition => '$$self{CmdDialsChangeMainSubExposure} == 2',
+ PrintConv => {
+ 1 => 'Autofocus On, Exposure On (Mode A)',
+ 2 => 'Autofocus Off, Exposure On (Mode A)',
+ },
+ },{
+ Name => 'CmdDialsChangeMainSub',
+ PrintConv => {
+ 1 => 'Autofocus On, Exposure Off',
+ 2 => 'Autofocus Off, Exposure Off',
+ },
+ }],
+ 0x05b => { Name => 'CmdDialsMenuAndPlayback', PrintConv => { 1 => 'On', 2 => 'On (Image Review Excluded)', 3 => 'Off' } }, # CSf5-c (D6), CSf5-c (Z7_2)
+ 0x05c => { # CSf6-d (D6), CSf5-d (Z7_2)
+ Name => 'SubDialFrameAdvance',
+ PrintConv => {
+ 1 => '10 Frames',
+ 2 => '50 Frames',
+ 3 => 'Rating',
+ 4 => 'Protect',
+ 5 => 'Stills Only',
+ 6 => 'Movies Only',
+ 7 => 'Folder',
+ },
+ },
+ 0x05d => { Name => 'ReleaseButtonToUseDial', PrintConv => \%yesNo }, # CSf8 (D6), CSf6 (Z7_2)
+ 0x05e => { Name => 'ReverseIndicators', PrintConv => { 1 => '+ 0 -', 2 => '- 0 +' } }, # CSf9 (D6), CSf7 (Z7_2)
+ 0x062 => { # CSg2-f (D6), CSg2-e (Z7_2)
+ Name => 'MovieShutterButton',
+ PrintConv => {
+ 1 => 'Take Photo',
+ 2 => 'Record Movies',
+ },
+ },
+ 0x063 => { # Settings menu # (D6,Z7_2)
+ Name => 'Language',
+ PrintConv => {
+ 5 => 'English',
+ 6 => 'Spanish',
+ 8 => 'French',
+ 15 => 'Portuguese (Br)',
+ },
+ },
+ 0x06c => [{
+ Name => 'ShootingInfoDisplay',
+ PrintConv => {
+ 1 => 'Auto',
+ 2 => 'Manual (dark on light)',
+ 3 => 'Manual (light on dark)',
+ },
+ %infoD6,
+ },{
+ Name => 'ShootingInfoDisplay',
+ PrintConv => {
+ 1 => 'Manual (dark on light)',
+ 2 => 'Manual (light on dark)',
+ },
+ %infoZ72,
+ }],
+ 0x074 => { Name => 'FlickAdvanceDirection', PrintConv => { 1 => 'Right to Left', 2 => 'Left to Right' } }, # CSf12-3 (D6)
+ 0x080 => [{
+ Name => 'RemoteFuncButton',
+ PrintConv => {
+ 1 => 'AF-On',
+ 2 => 'AF Lock Only',
+ 3 => 'AE Lock (reset on release)',
+ 4 => 'AE Lock Only',
+ 5 => 'AE/AF Lock',
+ 6 => 'FV Lock',
+ 7 => 'Flash Disable/Enable',
+ 8 => 'Preview',
+ 9 => '+NEF(RAW)',
+ 10 => 'LiveView Info Display On/Off',
+ 11 => 'Recall Shooting Functions',
+ 12 => 'None',
+ },
+ %infoD6,
+ },{
+ Name => 'RemoteFuncButton',
+ PrintConv => {
+ 1 => 'AF-On',
+ 2 => 'AF Lock Only',
+ 3 => 'AE Lock (reset on release)',
+ 4 => 'AE Lock Only',
+ 5 => 'AE/AF Lock',
+ 6 => 'FV Lock',
+ 7 => 'Flash Disable/Enable',
+ 8 => 'Preview',
+ 9 => '+NEF(RAW)',
+ 10 => 'None',
+ 11 => 'LiveView Info Display On/Off',
+ },
+ %infoZ72,
+ }],
+ 0x08b => [{ # CSf6-a-1 and CSf6-a-2 (D6), CSf5-a-1 and CSf5-a-2 (Z7_2), (continued from above)
+ Name => 'CmdDialsReverseRotation',
+ Condition => '$$self{CmdDialsReverseRotExposureComp} == 1',
+ PrintConv => {
+ 1 => 'No',
+ 2 => 'Shutter Speed & Aperture',
+ },
+ },{
+ Name => 'CmdDialsReverseRotation',
+ PrintConv => {
+ 1 => 'Exposure Compensation',
+ 2 => 'Exposure Compensation, Shutter Speed & Aperture',
+ },
+ }],
+ 0x08d => { # CSd10-b (D6), CSd11-b (Z7_2)
+ Name => 'FocusPeakingHighlightColor',
+ PrintConv => {
+ 1 => 'Red',
+ 2 => 'Yellow',
+ 3 => 'Blue',
+ 4 => 'White',
+ },
+ },
+ 0x08e => { Name => 'ContinuousModeDisplay', PrintConv => \%onOff }, # CSd14 (D6), CSd12 (Z7_2)
+ 0x08f => { Name => 'ShutterSpeedLock', PrintConv => \%onOff }, # CSf54-a (D6), CSf4-a (Z7_2)
+ 0x090 => { Name => 'ApertureLock', PrintConv => \%onOff }, # CSf5-b (D6), CSf4-b (Z7_2 could not select)
+ 0x091 => { # CSg4-b (D6), CSg6-b (Z7_2)
+ Name => 'MovieHighlightDisplayThreshold',
+ PrintConv => {
+ 1 => '255',
+ 2 => '248',
+ 3 => '235',
+ 4 => '224',
+ 5 => '213',
+ 6 => '202',
+ 7 => '191',
+ 8 => '180',
+ },
+ },
+ 0x093 => { # CSa3-a (D6), CSa3 (Z7_2)
+ Name => 'BlockShotAFResponse',
+ PrintConv => {
+ 1 => '1 (Quick)',
+ 2 => '2',
+ 3 => '3 (Normal)',
+ 4 => '4',
+ 5 => '5 (Delay)',
+ },
+ },
+ 0x094 => { Name => 'SubjectMotion', PrintConv => { 1 => 'Erratic', 2 => 'Steady' } }, # CSa3-b (D6)
+ 0x095 => { Name => 'Three-DTrackingFaceDetection', PrintConv => \%onOff }, # CSa8 (D6)
+ 0x097 => [{ # CSa5 (D6)
+ Name => 'StoreByOrientation',
+ PrintConv => {
+ 1 => 'Focus Point',
+ 2 => 'Focus Point and AF-area mode',
+ 3 => 'Off',
+ },
+ %infoD6,
+ },{ # CSa5 (Z7_2)
+ Name => 'StoreByOrientation',
+ PrintConv => {
+ 1 => 'Focus Point',
+ 2 => 'Off',
+ },
+ %infoZ72,
+ }],
+ 0x099 => { Name => 'DynamicAreaAFAssist',PrintConv => \%onOff }, # CSa17-c (D6), CSa9-b (Z7_2)
+ 0x09a => { Name => 'ExposureCompStepSize', PrintConv => \%thirdHalfFull }, # CSb3 (D6)
+ 0x09b => { Name => 'SyncReleaseMode', PrintConv => { 1 => 'Sync', 2 => 'No Sync' } }, # CSd4 (D6), CSd3 (Z7_2)
+ 0x09c => { Name => 'ModelingFlash', PrintConv => \%onOff }, # CSe6 (D6), CSe5 (Z7_2)
+ 0x09d => { # CSe7 (D6), CSe6 (Z7_2)
+ Name => 'AutoBracketModeM',
+ PrintConv => {
+ 1 => 'Flash/Speed',
+ 2 => 'Flash/Speed/Aperture',
+ 3 => 'Flash/Aperture',
+ 4 => 'Flash Only',
+ },
+ },
+ 0x09e => { Name => 'PreviewButton', PrintConv => \%previewButtonD6 }, # CSf3-a (D6)
+ 0x0a0 => [{ # CSf3-b (D6)
+ Name => 'Func1Button',
+ PrintConv => \%previewButtonD6,
+ %infoD6,
+ },{ # CSf2-a (Z7_2)
+ Name => 'Func1Button',
+ PrintConv => \%funcButtonZ7m2,
+ %infoZ72,
+ }],
+ 0x0a2 => [{ # CSf3-c (D6)
+ Name => 'Func2Button',
+ PrintConv => \%previewButtonD6,
+ %infoD6,
+ },{ # CSf2-b (Z7_2)
+ Name => 'Func2Button',
+ PrintConv => \%funcButtonZ7m2,
+ %infoZ72,
+ }],
+ 0x0a3 => [{ # CSf3-f (D6)
+ Name => 'AF-OnButton',
+ PrintConv => {
+ 1 => 'AF-AreaMode S',
+ 2 => 'AF-AreaMode D9',
+ 3 => 'AF-AreaMode D25',
+ 4 => 'AF-AreaMode D49',
+ 5 => 'AF-AreaMode D105',
+ 6 => 'AF-AreaMode 3D',
+ 7 => 'AF-AreaMode Group',
+ 8 => 'AF-AreaMode Group C1',
+ 9 => 'AF-AreaMode Group C2',
+ 10 => 'AF-AreaMode Auto Area',
+ 11 => 'AF-AreaMode + AF-On S',
+ 12 => 'AF-AreaMode + AF-On D9',
+ 13 => 'AF-AreaMode + AF-On D25',
+ 14 => 'AF-AreaMode + AF-On D49',
+ 15 => 'AF-AreaMode + AF-On D105',
+ 16 => 'AF-AreaMode + AF-On 3D',
+ 17 => 'AF-AreaMode + AF-On Group',
+ 18 => 'AF-AreaMode + AF-On Group C1',
+ 19 => 'AF-AreaMode + AF-On Group C2',
+ 20 => 'AF-AreaMode + AF-On Auto Area',
+ 21 => 'AF-On',
+ 22 => 'AF Lock Only',
+ 23 => 'AE Lock (hold)',
+ 24 => 'AE/WB Lock (hold)',
+ 25 => 'AE Lock (reset on release)',
+ 26 => 'AE Lock Only',
+ 27 => 'AE/AF Lock',
+ 28 => 'Recall Shooting Functions',
+ 29 => 'None',
+ },
+ %infoD6,
+ },{ # CSf2-c (Z7_2)
+ Name => 'AF-OnButton',
+ PrintConv => {
+ 1 => 'Center Focus Point',
+ 2 => 'AF-On',
+ 3 => 'AF Lock Only',
+ 4 => 'AE Lock (hold)',
+ 5 => 'AE Lock (reset on release)',
+ 6 => 'AE Lock Only',
+ 7 => 'AE/AF Lock',
+ 8 => 'LiveView Info Display On/Off',
+ 9 => 'Zoom (Low)',
+ 10 => 'Zoom (1:1)',
+ 11 => 'Zoom (High)',
+ 12 => 'None'
+ },
+ %infoZ72,
+ }],
+ 0x0a4 => { Name => 'SubSelector', PrintConv => \%tagSubSelector }, # CSf3-g-1 # (D6), CSf2-d-1 # (Z7_2)
+ 0x0a5 => [{ # CSf3-h (D6)
+ Name => 'SubSelectorCenter',
+ PrintConv => {
+ 1 => 'Preset Focus Point - Press To Recall',
+ 2 => 'Preset Focus Point - Hold To Recall',
+ 3 => 'Center Focus Point',
+ 4 => 'AF-AreaMode S',
+ 5 => 'AF-AreaMode D9',
+ 6 => 'AF-AreaMode D25',
+ 7 => 'AF-AreaMode D49',
+ 8 => 'AF-AreaMode D105',
+ 9 => 'AF-AreaMode 3D',
+ 10 => 'AF-AreaMode Group',
+ 11 => 'AF-AreaMode Group C1',
+ 12 => 'AF-AreaMode Group C2',
+ 13 => 'AF-AreaMode Auto Area',
+ 14 => 'AF-AreaMode + AF-On S',
+ 15 => 'AF-AreaMode + AF-On D9',
+ 16 => 'AF-AreaMode + AF-On D25',
+ 17 => 'AF-AreaMode + AF-On D49',
+ 18 => 'AF-AreaMode + AF-On D105',
+ 19 => 'AF-AreaMode + AF-On 3D',
+ 20 => 'AF-AreaMode + AF-On Group',
+ 21 => 'AF-AreaMode + AF-On Group C1',
+ 22 => 'AF-AreaMode + AF-On Group C2',
+ 23 => 'AF-AreaMode + AF-On Auto Area',
+ 24 => 'AF-On',
+ 25 => 'AF Lock Only',
+ 26 => 'AE Lock (hold)',
+ 27 => 'AE/WB Lock (hold)',
+ 28 => 'AE Lock (reset on release)',
+ 29 => 'AE Lock Only',
+ 30 => 'AE/AF Lock',
+ 31 => 'FV Lock',
+ 32 => 'Flash Disable/Enable',
+ 33 => 'Preview',
+ 34 => 'Recall Shooting Functions',
+ 35 => 'Bracketing Burst',
+ 36 => 'Synchronized Release (Master)',
+ 37 => 'Synchronized Release (Remote)',
+ 38 => 'None',
+ },
+ %infoD6,
+ },{ # CSf2-e (Z7_2)
+ Name => 'SubSelectorCenter',
+ PrintConv => {
+ 1 => 'Center Focus Point',
+ 2 => 'AF-On',
+ 3 => 'AF Lock Only',
+ 4 => 'AE Lock (hold)',
+ 5 => 'AE Lock (reset on release)',
+ 6 => 'AE Lock Only',
+ 7 => 'AE/AF Lock',
+ 8 => 'FV Lock',
+ 9 => 'Flash Disable/Enable',
+ 10 => 'Preview',
+ 11 => 'Matrix Metering',
+ 12 => 'Center-weighted Metering',
+ 13 => 'Spot Metering',
+ 14 => 'Highlight-weighted Metering',
+ 15 => 'Bracketing Burst',
+ 16 => 'Synchronized Release (Master)',
+ 17 => 'Synchronized Release (Remote)',
+ 20 => '+NEF(RAW)',
+ 21 => 'LiveView Info Display On/Off',
+ 22 => 'Grid Display',
+ 23 => 'Image Area',
+ 24 => 'Non-CPU Lens',
+ 25 => 'None',
+ },
+ %infoZ72,
+ }],
+ 0x0a7 => [{ # CSf3-n (D6)
+ Name => 'LensFunc1Button',
+ PrintConv => {
+ 1 => 'Preset Focus Point - Press To Recall',
+ 2 => 'Preset Focus Point - Hold To Recall',
+ 3 => 'AF-AreaMode S',
+ 4 => 'AF-AreaMode D9',
+ 5 => 'AF-AreaMode D25',
+ 6 => 'AF-AreaMode D49',
+ 7 => 'AF-AreaMode D105',
+ 8 => 'AF-AreaMode 3D',
+ 9 => 'AF-AreaMode Group',
+ 10 => 'AF-AreaMode Group C1',
+ 11 => 'AF-AreaMode Group C2',
+ 12 => 'AF-AreaMode Auto Area',
+ 13 => 'AF-AreaMode + AF-On S',
+ 14 => 'AF-AreaMode + AF-On D9',
+ 15 => 'AF-AreaMode + AF-On D25',
+ 16 => 'AF-AreaMode + AF-On D49',
+ 17 => 'AF-AreaMode + AF-On D105',
+ 18 => 'AF-AreaMode + AF-On 3D',
+ 19 => 'AF-AreaMode + AF-On Group',
+ 20 => 'AF-AreaMode + AF-On Group C1',
+ 21 => 'AF-AreaMode + AF-On Group C2',
+ 22 => 'AF-AreaMode + AF-On Auto Area',
+ 23 => 'AF-On',
+ 24 => 'AF Lock Only',
+ 25 => 'AE Lock Only',
+ 26 => 'AE/AF Lock',
+ 27 => 'Flash Disable/Enable',
+ 28 => 'Recall Shooting Functions',
+ 29 => 'Synchronized Release (Master)',
+ 30 => 'Synchronized Release (Remote)',
+ },
+ %infoD6,
+ },{ # CSf2-g (Z7_2)
+ Name => 'LensFunc1Button',
+ PrintConv => \%lensFuncButtonZ7m2,
+ %infoZ72,
+ }],
+ 0x0a8 => { Name => 'CmdDialsApertureSetting', PrintConv => { 1 => 'Sub-command Dial', 2 => 'Aperture Ring' } }, # CSf6-c (D6)
+ 0x0a9 => { Name => 'MultiSelector', PrintConv => \%tagMultiSelector }, # CSf7 (D6)
+ 0x0aa => { # CSf10 (D6)
+ Name => 'LiveViewButtonOptions',
+ PrintConv => {
+ 1 => 'Enable',
+ 2 => 'Enable (Standby Timer Active)',
+ 3 => 'Diaable',
+ },
+ },
+ 0x0ab => { # CSf11 (D6)
+ Name => 'LightSwitch',
+ PrintConv => {
+ 1 => 'LCD Backlight',
+ 2 => 'LCD Backlight and Shooting Information',
+ },
+ },
+ 0x0b1 => [{ # CSg2-a (D6)
+ Name => 'MoviePreviewButton',
+ PrintConv => {
+ 1 => 'Power Aperture (Open)',
+ 2 => 'Exposure Compensation',
+ 3 => 'Grid Display',
+ 4 => 'Zoom (Low)',
+ 5 => 'Zoom (1:1)',
+ 6 => 'Zoom (High)',
+ 7 => 'Image Area',
+ 8 => 'Microphone Sensitivity',
+ 9 => 'None',
+ },
+ %infoD6,
+ },{ # CSg2-a (Z7_2)
+ Name => 'MovieFunc1Button',
+ PrintConv => {
+ 1 => 'Power Aperture (Open)',
+ 2 => 'Exposure Compensation',
+ 3 => 'Subject Tracking',
+ 4 => 'LiveView Info Display On/Off)',
+ 5 => 'Grid Display',
+ 6 => 'Zoom (Low)',
+ 7 => 'Zoom (1:1)',
+ 8 => 'Zoom (High)',
+ 9 => 'Protect',
+ 10 => 'Image Area',
+ 11 => 'White Balance',
+ 12 => 'Picture Control',
+ 13 => 'Active-D Lighting',
+ 14 => 'Metering',
+ 15 => 'Focus Mode',
+ 16 => 'Microphone Sensitivity',
+ 17 => 'Focus Peaking',
+ 18 => 'Rating (None)',
+ 19 => 'Rating (5)',
+ 20 => 'Rating (4)',
+ 21 => 'Rating (3)',
+ 22 => 'Rating (2)',
+ 23 => 'Rating (1)', # no mapping for 24 on the Z7_2. Possibly intended for Rating = 'Candidate for Deletion'?
+ 25 => 'None',
+ },
+ %infoZ72,
+ }],
+ 0x0b3 => [{ # CSg2-b (D6)
+ Name => 'MovieFunc1Button',
+ PrintConv => {
+ 1 => 'Power Aperture (Close)',
+ 2 => 'Exposure Compensation',
+ 3 => 'Grid Display',
+ 4 => 'Zoom (Low)',
+ 5 => 'Zoom (1:1)',
+ 6 => 'Zoom (High)',
+ 7 => 'Image Area',
+ 8 => 'Microphone Sensitivity',
+ 9 => 'None',
+ },
+ %infoD6,
+ },{ # CSg2-b (Z7_2)
+ Name => 'MovieFunc2Button',
+ PrintConv => { # TODO: simplify Func1 and Func2 movies buttons - identical except for the 1st entry
+ 1 => 'Power Aperture (Close)',
+ 2 => 'Exposure Compensation',
+ 3 => 'Subject Tracking',
+ 4 => 'LiveView Info Display On/Off)',
+ 5 => 'Grid Display',
+ 6 => 'Zoom (Low)',
+ 7 => 'Zoom (1:1)',
+ 8 => 'Zoom (High)',
+ 9 => 'Protect',
+ 10 => 'Image Area',
+ 11 => 'White Balance',
+ 12 => 'Picture Control',
+ 13 => 'Active-D Lighting',
+ 14 => 'Metering',
+ 15 => 'Focus Mode',
+ 16 => 'Microphone Sensitivity',
+ 17 => 'Focus Peaking',
+ 18 => 'Rating (None)',
+ 19 => 'Rating (5)',
+ 20 => 'Rating (4)',
+ 21 => 'Rating (3)',
+ 22 => 'Rating (2)',
+ 23 => 'Rating (1)', # no mapping for 24 on the Z7_2. Possibly intended for Rating = 'Candidate for Deletion'?
+ 25 => 'None',
+ },
+ %infoZ72,
+ }],
+ 0x0b5 => { # CSg2-c (D6)
+ Name => 'MovieFunc2Button',
+ PrintConv => {
+ 1 => 'Grid Display',
+ 2 => 'Zoom (Low)',
+ 3 => 'Zoom (1:1)',
+ 4 => 'Zoom (High)',
+ 5 => 'Image Area',
+ 6 => 'Microphone Sensitivity',
+ 7 => 'None',
+ },
+ },
+ 0x0b6 => [{ # CSg2-e (D6)
+ Name => 'AssignMovieSubselector',
+ PrintConv => {
+ 1 => 'Center Focus Point',
+ 2 => 'AF Lock Only',
+ 3 => 'AE Lock (hold)',
+ 4 => 'AE/WB Lock (hold)',
+ 5 => 'AE Lock Only',
+ 6 => 'AE/AF Lock',
+ 7 => 'Zoom (Low)',
+ 8 => 'Zoom (1:1)',
+ 9 => 'Zoom (High)',
+ 10 => 'Record Movies',
+ 11 => 'None',
+ },
+ %infoD6,
+ },{ # CSg2-d (Z7_2)
+ Name => 'AssignMovieSubselector',
+ PrintConv => {
+ 1 => 'Center Focus Point',
+ 2 => 'AF Lock Only',
+ 3 => 'AE Lock (hold)',
+ 4 => 'AE Lock Only',
+ 5 => 'AE/AF Lock',
+ 6 => 'LiveView Info Display On/Off',
+ 7 => 'Grid Display',
+ 8 => 'Zoom (Low)',
+ 9 => 'Zoom (1:1)',
+ 10 => 'Zoom (High)',
+ 11 => 'Record Movies',
+ 12 => 'Image Area',
+ 13 => 'None',
+ },
+ %infoZ72,
+ }],
+ 0x0b8 => { Name => 'LimitAFAreaModeSelD9', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa14-a (D6)
+ 0x0b9 => { Name => 'LimitAFAreaModeSelD25', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa14-b (D6)
+ 0x0bc => { Name => 'LimitAFAreaModeSel3D', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa14-e (D6)
+ 0x0bd => { Name => 'LimitAFAreaModeSelGroup', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa14-f (D6)
+ 0x0be => { Name => 'LimitAFAreaModeSelAuto', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa14-i (D6), CSa7-g (Z7_2)
+ # 0x0bf => { Name => 'LimitSelectableImageArea30x20', PrintConv => \%limitNolimit }, # CSd8-1 (D6) further investigation & testing of CSd8-1 and CSd8-2 required. The other CSd8 tags are fine.
+ # 0x0c0 => { Name => 'LimitSelectableImageAreaDX', PrintConv => \%limitNolimit }, # CSd8-2 (D6) further investigation & testing of CSd8-1 and CSd8-2 required. The other CSd8 tags are fine.
+ 0x0c1 => { Name => 'LimitSelectableImageArea5To4', PrintConv => \%limitNolimit, Unknown => 1 }, # CSd8-3 (D6)
+ 0x0c2 => { Name => 'LimitSelectableImageArea1To1', PrintConv => \%limitNolimit, Unknown => 1 }, # CSd8-4 (D6)
+ # 0x0d3 => CSf3-g-2 (D6), CSf2-d-2 (Z7_2) SelectorPlaybackRole 'Scroll' and 'Display Next/Previous' (skipped to reduce volume of output)
+ 0x0d4 => { Name => 'PhotoShootingMenuBank', PrintConv => \%menuBank }, # (D6)
+ 0x0d5 => { Name => 'CustomSettingsBank', PrintConv => \%menuBank }, # (D6)
+ 0x0d6 => { Name => 'LimitAF-AreaModeSelPinpoint', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa7-a (Z7_2)
+ 0x0d7 => { Name => 'LimitAF-AreaModeSelDynamic', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa7-b (Z7_2)
+ 0x0d8 => { Name => 'LimitAF-AreaModeSelWideAF_S', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa7-c (Z7_2)
+ 0x0d9 => { Name => 'LimitAF-AreaModeSelWideAF_L', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa7-d (Z7_2)
+ 0x0da => { Name => 'LowLightAF', PrintConv => \%onOff }, # CSa10 (Z7_2)
+ 0x0db => { Name => 'LimitSelectableImageAreaDX', PrintConv => \%limitNolimit, Unknown => 1 }, # CSd7-a (Z7_2)
+ 0x0dc => { Name => 'LimitSelectableImageArea5To4', PrintConv => \%limitNolimit, Unknown => 1 }, # CSd7-b (Z7_2)
+ 0x0dd => { Name => 'LimitSelectableImageArea1To1', PrintConv => \%limitNolimit, Unknown => 1 }, # CSd7-c (Z7_2)
+ 0x0de => { Name => 'LimitSelectableImageArea16To9', PrintConv => \%limitNolimit, Unknown => 1 }, # CSd7-d (Z7_2)
+ 0x0df => { Name => 'ApplySettingsToLiveView', PrintConv => \%onOff }, # CSd9 # new tag with Z7_2 # (Z7_2)
+ 0x0e0 => { # CSd10-a (D6), CSd11-a (Z7_2)
+ Name => 'FocusPeakingLevel',
+ PrintConv => {
+ 1 => 'High Sensitivity',
+ 2 => 'Standard Sensitivity',
+ 3 => 'Low Sensitivity',
+ 4 => 'Off',
+ },
+ },
+ 0x0e9 => { # CSf2-i # need to confirm with a Z series lens # (Z7_2)
+ Name => 'LensControlRing',
+ PrintConv => {
+ 1 => 'Focus (M/A)',
+ 2 => 'Aperture',
+ 3 => 'Exposure Compensation',
+ 4 => 'ISO Sensitivity',
+ 5 => 'None (Disabled)',
+ },
+ },
+ # 0x0eb MovieLensControlRing ? # (Z7_2)
+ # 0x0ec # (Z7_2)
+ 0x0ed => [{ # CSg3 (D6)
+ Name => 'MovieMultiSelector',
+ PrintConv => {
+ 1 => 'Center Focus Point',
+ 2 => 'Zoom (Low)',
+ 3 => 'Zoom (1:1)',
+ 4 => 'Zoom (High)',
+ 5 => 'Record Movies',
+ 6 => 'None',
+ },
+ %infoD6,
+ },{ # labels Ok button on camera # (Z7_2)
+ Name => 'MovieMultiSelector',
+ PrintConv => { # Z7 has codes for both OK and MultiSelector - although only the OK value can be changed. [The multiselector served as the OK button on these cameras].
+ 1 => 'Center Focus Point',
+ 2 => 'Zoom (Low)',
+ 3 => 'Zoom (1:1)',
+ 4 => 'Zoom (High)',
+ 5 => 'Record Movies',
+ 6 => 'None',
+ },
+ }],
+ 0x0ee => { Name => 'MovieAFSpeed', ValueConv => '$val - 6', ValueConvInv => '$val + 6' }, # CSg4-a (Z7_2)
+ 0x0ef => { # CSg4-b (Z7_2)
+ Name => 'MovieAFSpeedApply',
+ PrintConv => {
+ 1 => 'Always',
+ 2 => 'Only During Recording',
+ },
+ },
+ 0x0f0 => { # CSg5 (Z7_2)
+ Name => 'MovieAFTrackingSensitivity',
+ PrintConv => {
+ 1 => '1 (High)',
+ 2 => '2',
+ 3 => '3',
+ 4 => '4 (Normal)',
+ 5 => '5',
+ 6 => '6',
+ 7 => '7 (Low)',
+ },
+ },
+ 0x0f1 => { # CSg4-a (D6), CSg6-a (Z7_2)
+ Name => 'MovieHighlightDisplayPattern',
+ PrintConv => {
+ 1 => 'Pattern 1',
+ 2 => 'Pattern 2',
+ 3 => 'Off',
+ },
+ },
+ 0x0f2 => { Name => 'SubDialFrameAdvanceRating5', PrintConv => \%noYes, Unknown => 1 }, # (D6,Z7_2)
+ 0x0f3 => { Name => 'SubDialFrameAdvanceRating4', PrintConv => \%noYes, Unknown => 1 }, # (D6,Z7_2)
+ 0x0f4 => { Name => 'SubDialFrameAdvanceRating3', PrintConv => \%noYes, Unknown => 1 }, # (D6,Z7_2)
+ 0x0f5 => { Name => 'SubDialFrameAdvanceRating2', PrintConv => \%noYes, Unknown => 1 }, # (D6,Z7_2)
+ 0x0f6 => { Name => 'SubDialFrameAdvanceRating1', PrintConv => \%noYes, Unknown => 1 }, # (D6,Z7_2)
+ 0x0f7 => { Name => 'SubDialFrameAdvanceRating0', PrintConv => \%noYes, Unknown => 1 }, # (D6,Z7_2)
+ # 0x0f8 ?? looks like it should be part of the above, but nothing seems to cause the value to change. Possibly intended for Rating='Candidate for Deletion' # (D6)
+ 0x0f9 => { # CSg2-c (Z7_2)
+ Name => 'MovieAF-OnButton',
+ PrintConv => {
+ 1 => 'Center Focus Point',
+ 2 => 'AF-On',
+ 3 => 'AF Lock Only',
+ 4 => 'AE Lock (hold)',
+ 5 => 'AE Lock Only',
+ 6 => 'AE/AF Lock',
+ 7 => 'LiveView Info Display On/Off',
+ 8 => 'Zoom (Low)',
+ 9 => 'Zoom (1:1)',
+ 10 => 'Zoom (High)',
+ 11 => 'Record Movies',
+ 12 => 'None',
+ },
+ },
+ 0x0fb => { Name => 'SecondarySlotFunction', PrintConv => \%tagSecondarySlotFunction }, # tag name selected to maintain compatibility with older cameras # (Z7_2)
+ 0x0fb => { Name => 'SecondarySlotFunction', PrintConv => \%tagSecondarySlotFunction }, # (D6)
+ 0x0fc => { Name => 'SilentPhotography', PrintConv => \%onOff }, # (D6,Z7_2) # tag is associated with Silent LiveView Photography (as distinguisehed from Silent Interval or Silent Focus Shift)
+ 0x0fd => { Name => 'ExtendedShuttterSpeeds', PrintConv => \%onOff }, # CSd7 (D6), CSd6 (Z7_2)
+ 0x109 => { # (D6,Z7_2)
+ Name => 'BracketSet',
+ RawConv => '$$self{BracketSet} = $val',
+ PrintConv => {
+ 1 => 'AE/Flash',
+ 2 => 'AE',
+ 3 => 'Flash',
+ 4 => 'White Balance',
+ 5 => 'Active-D Lighting',
+ },
+ },
+ 0x10a => [{ # (D6/Z7_2)
+ Name => 'BracketProgram',
+ Condition => '$$self{BracketSet} < 4',
+ Notes => 'AE and/or Flash Bracketing',
+ RawConv => '$$self{BracketProgram} = $val',
+ PrintConv => {
+ 15 => '+3F',
+ 16 => '-3F',
+ 17 => '+2F',
+ 18 => '-2F',
+ 19 => 'Disabled',
+ 20 => '3F',
+ 21 => '5F',
+ 22 => '7F',
+ 23 => '9F',
+ },
+ },{
+ Name => 'BracketProgram',
+ Condition => '$$self{BracketSet} == 4',
+ Notes => 'White Balance Bracketing',
+ RawConv => '$$self{BracketProgram} = $val',
+ PrintConv => {
+ 1 => 'B3F',
+ 2 => 'A3F',
+ 3 => 'B2F',
+ 4 => 'A2F',
+ 5 => 'Disabled',
+ 6 => '3F',
+ 7 => '5F',
+ 8 => '7F',
+ 9 => '9F',
+ 19 => 'N/A' # observed when shooting other than JPG
+ },
+ },{
+ Name => 'BracketProgram',
+ Condition => '$$self{BracketSet} == 5',
+ Notes => 'Active-D Bracketing',
+ RawConv => '$$self{BracketProgram} = $val',
+ Mask => 0x0f,
+ PrintConv => {
+ 10 => 'Disabled',
+ 11 => '2 Exposures',
+ 12 => '3 Exposures',
+ 13 => '4 Exposures',
+ 14 => '5 Exposures',
+ },
+ }],
+ 0x10b => [{ # (D6/Z7_2)
+ Name => 'BracketIncrement',
+ Condition => '$$self{BracketSet} < 4 and $$self{BracketProgram} ne 19',
+ Notes => 'AE and/or Flash Bracketing enabled',
+ PrintConv => {
+ 0x01 => '0.3',
+ 0x03 => '0.5',
+ 0x04 => '1.0',
+ 0x05 => '2.0',
+ 0x06 => '3.0',
+ },
+ },{
+ Name => 'BracketIncrement',
+ Condition => '$$self{BracketSet} == 4 and $$self{BracketProgram} ne 5',
+ Notes => 'White Balance Bracketing enabled',
+ PrintConv => '$val-6', # TODO: qualify amber/blue direction of increment (eg, '1A' vs.'1B' vs '1A,1B')
+ }],
+ 0x10c => { # (D6/Z7_2)
+ Name => 'BracketIncrement',
+ Condition => '$$self{BracketSet} == 5 and $$self{BracketProgram} ne 10',
+ Notes => 'Active-D Bracketing enabled',
+ PrintConv => {
+ 0 => 'Off',
+ 1 => 'Off, Low',
+ 2 => 'Off, Normal',
+ 3 => 'Off, High',
+ 4 => 'Off, Extra High',
+ 5 => 'Off, Auto',
+ 6 => 'Off, Low, Normal',
+ 7 => 'Off, Low, Normal, High',
+ 8 => 'Off, Low, Normal, High, Extra High',
+ },
+ },
+ 0x116 => { Name => 'GroupAreaC1', PrintConv =>\%groupAreaCustom }, # CSa10-a (new with D6) # (D6)
+ 0x117 => { Name => 'AutoAreaAFStartingPoint', PrintConv => \%enableDisable }, # CSa12 (D6)
+ 0x118 => { Name => 'FocusPointPersistence', PrintConv => { 1 => 'Auto', 2 => 'Off' } }, # CSa13 (new with D6) # (D6)
+ 0x119 => { Name => 'LimitAFAreaModeSelD49', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa14-c (D6)
+ 0x11a => { Name => 'LimitAFAreaModeSelD105', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa14-d (D6)
+ 0x11b => { Name => 'LimitAFAreaModeSelGroupC1', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa14-g (D6)
+ 0x11c => { Name => 'LimitAFAreaModeSelGroupC2', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa14-h (D6)
+ 0x11d => { # CSa15 (D6)
+ Name => 'AutoFocusModeRestrictions',
+ PrintConv => {
+ 1 => 'AF-S',
+ 2 => 'AF-C',
+ 3 => 'No Limit',
+ },
+ },
+ 0x11e => { # CSa17-b (D6)
+ Name => 'FocusPointBrightness',
+ PrintConv => {
+ 1 => 'Extra High',
+ 2 => 'High',
+ 3 => 'Normal',
+ 4 => 'Low',
+ },
+ },
+ 0x11f => { Name => 'CHModeShootingSpeed', ValueConv => '15 - $val', ValueConvInv => '15 + $val', PrintConv => '"$val fps"', PrintConvInv => '$val=~s/\s*fps//i; $val' }, # CSd1-a (D6)
+ 0x120 => { Name => 'CLModeShootingSpeed', ValueConv => '11 - $val', ValueConvInv => '11 + $val', PrintConv => '"$val fps"', PrintConvInv => '$val=~s/\s*fps//i; $val' }, # CSd1-b (D6)
+ 0x121 => { # CSd1-c (new with D6)
+ Name => 'QuietShutterShootingSpeed',
+ PrintConv => {
+ 1 => 'Single',
+ 2 => '5 fps',
+ 3 => '4 fps',
+ 4 => '3 fps',
+ 5 => '2 fps',
+ 6 => '1 fps',
+ },
+ },
+ 0x122 => { Name => 'LimitReleaseModeSelCL', PrintConv => \%limtReleaseModeSel, Unknown => 1 }, # CSd3-a (D6)
+ 0x123 => { Name => 'LimitReleaseModeSelCH', PrintConv => \%limtReleaseModeSel, Unknown => 1 }, # CSd3-b (D6)
+ 0x124 => { Name => 'LimitReleaseModeSelQ', PrintConv => \%limtReleaseModeSel, Unknown => 1 }, # CSd3-c (D6)
+ 0x125 => { Name => 'LimitReleaseModeSelTimer', PrintConv => \%limtReleaseModeSel, Unknown => 1 }, # CSd3-d (D6)
+ 0x126 => { Name => 'LimitReleaseModeSelMirror-Up', PrintConv => \%limtReleaseModeSel, Unknown => 1 }, # CSd3-e (D6)
+ 0x127 => { Name => 'LimitSelectableImageArea16To9', PrintConv => \%limitNolimit, Unknown => 1 }, # CSd8-5 (D6)
+ 0x128 => { Name => 'RearControPanelDisplay', PrintConv => { 1 => 'Release Mode', 2 => 'Frame Count' } }, # CSd12 # new tag with D6 # (D6)
+ 0x129 => { Name => 'FlashBurstPriority', PrintConv => { 1 => 'Frame Rate', 2 => 'Exposure' } }, # CSE5 # new tag with D6 # (D6)
+ 0x12a => { Name => 'RecallShootFuncExposureMode', PrintConv => \%offOn }, # (D6)
+ 0x12b => { Name => 'RecallShootFuncShutterSpeed', PrintConv => \%offOn }, # (D6)
+ 0x12c => { Name => 'RecallShootFuncAperture', PrintConv => \%offOn }, # (D6)
+ 0x12d => { Name => 'RecallShootFuncExposureComp', PrintConv => \%offOn }, # (D6)
+ 0x12e => { Name => 'RecallShootFuncISO', PrintConv => \%offOn }, # (D6)
+ 0x12f => { Name => 'RecallShootFuncMeteringMode', PrintConv => \%offOn }, # (D6)
+ 0x130 => { Name => 'RecallShootFuncWhiteBalance', PrintConv => \%offOn }, # (D6)
+ 0x131 => { Name => 'RecallShootFuncAFAreaMode', PrintConv => \%offOn }, # (D6)
+ 0x132 => { Name => 'RecallShootFuncFocusTracking', PrintConv => \%offOn }, # (D6)
+ 0x133 => { Name => 'RecallShootFuncAF-On', PrintConv => \%offOn }, # (D6)
+ 0x134 => { # CSf3-d (D6)
+ Name => 'VerticalFuncButton',
+ PrintConv => {
+ 1 => 'Preset Focus Point',
+ 2 => 'AE Lock (hold)',
+ 3 => 'AE/WB Lock (hold)',
+ 4 => 'AE Lock (reset on release)',
+ 5 => 'FV Lock',
+ 6 => 'Preview',
+ 7 => '+NEF(RAW)',
+ 8 => 'Grid Display',
+ 9 => 'Virtual Horizon',
+ 10 => 'Voice Memo',
+ 11 => 'Playback',
+ 12 => 'Filtered Playback',
+ 13 => 'Photo Shooting Bank',
+ 14 => 'Exposure Mode',
+ 15 => 'Exposure Comp',
+ 16 => 'AF Mode/AF Area Mode',
+ 17 => 'Image Area',
+ 18 => 'ISO',
+ 19 => 'Active-D Lighting',
+ 20 => 'Metering',
+ 21 => 'Exposure Delay Mode',
+ 22 => 'Shutter/Aperture Lock',
+ 23 => '1 Stop Speed/Aperture',
+ 24 => 'Rating 0',
+ 25 => 'Rating 5',
+ 26 => 'Rating 4',
+ 27 => 'Rating 3',
+ 28 => 'Rating 2',
+ 29 => 'Rating 1',
+ 30 => 'Candidate For Deletion',
+ 31 => 'Non-CPU Lens',
+ 32 => 'None',
+ },
+ },
+ 0x135 => { # CSf3-e (D6)
+ Name => 'Func3Button',
+ PrintConv => {
+ 1 => 'Voice Memo',
+ 2 => 'Select To Send',
+ 3 => 'Wired LAN',
+ 4 => 'My Menu',
+ 5 => 'My Menu Top Item',
+ 6 => 'Filtered Playback',
+ 7 => 'Rating 0',
+ 8 => 'Rating 5',
+ 9 => 'Rating 4',
+ 10 => 'Rating 3',
+ 11 => 'Rating 2',
+ 12 => 'Rating 1',
+ 13 => 'Candidate For Deletion',
+ 14 => 'None',
+ },
+ },
+ 0x136 => { # CSf3-i (D6)
+ Name => 'VerticalAF-OnButton',
+ PrintConv => {
+ 1 => 'AF-AreaMode S',
+ 2 => 'AF-AreaMode D9',
+ 3 => 'AF-AreaMode D25',
+ 4 => 'AF-AreaMode D49',
+ 5 => 'AF-AreaMode D105',
+ 6 => 'AF-AreaMode 3D',
+ 7 => 'AF-AreaMode Group',
+ 8 => 'AF-AreaMode Group C1',
+ 9 => 'AF-AreaMode Group C2',
+ 10 => 'AF-AreaMode Auto Area',
+ 11 => 'AF-AreaMode + AF-On S',
+ 12 => 'AF-AreaMode + AF-On D9',
+ 13 => 'AF-AreaMode + AF-On D25',
+ 14 => 'AF-AreaMode + AF-On D49',
+ 15 => 'AF-AreaMode + AF-On D105',
+ 16 => 'AF-AreaMode + AF-On 3D',
+ 17 => 'AF-AreaMode + AF-On Group',
+ 18 => 'AF-AreaMode + AF-On Group C1',
+ 19 => 'AF-AreaMode + AF-On Group C2',
+ 20 => 'AF-AreaMode + AF-On Auto Area',
+ 21 => 'Same as AF-On',
+ 22 => 'AF-On',
+ 23 => 'AF Lock Only',
+ 24 => 'AE Lock (hold)',
+ 25 => 'AE/WB Lock (hold)',
+ 26 => 'AE Lock (reset on release)',
+ 27 => 'AE Lock Only',
+ 28 => 'AE/AF Lock',
+ 29 => 'Recall Shooting Functions',
+ 30 => 'None',
+ },
+ },
+ 0x137 => { Name => 'VerticalMultiSelector', PrintConv => \%tagSubSelector }, # CSf3-j-1 # (D6)
+ 0x138 => { # CSf3-k (D6)
+ Name => 'MeteringButton',
+ PrintConv => {
+ 1 => 'Photo Shooting Bank',
+ 2 => 'Image Area',
+ 3 => 'Active-D Lighting',
+ 4 => 'Metering',
+ 5 => 'Exposure Delay Mode',
+ 6 => 'Shutter/Aperture Lock',
+ 7 => '1 Stop Speed/Aperture',
+ 8 => 'Non-CPU Lens',
+ 9 => 'None',
+ },
+ },
+ 0x139 => { Name => 'PlaybackFlickUp', RawConv => '$$self{PlaybackFlickUp} = $val', PrintConv => \%flickUpDownD6 }, # CSf12-1-a # (D6)
+ 0x13a => { Name => 'PlaybackFlickUpRating', Condition => '$$self{PlaybackFlickUp} == 1', Notes => 'Meaningful only when PlaybackFlickUp is Rating', PrintConv => \%flickUpDownRatingD6 }, # CSf12-1-b # (D6)
+ 0x13b => { Name => 'PlaybackFlickDown', RawConv => '$$self{PlaybackFlickDown} = $val', PrintConv => \%flickUpDownD6 }, # CSf12-2-a # (D6)
+ 0x13c => { Name => 'PlaybackFlickDownRating', Condition => '$$self{PlaybackFlickDown} == 1', Notes => 'Meaningful only when PlaybackFlickDown is Rating', PrintConv => \%flickUpDownRatingD6 }, # CSf12-2-b # (D6)
+ 0x13d => { # CSg2-d (D6)
+ Name => 'MovieFunc3Button',
+ PrintConv => {
+ 1 => 'Record Movies',
+ 2 => 'My Menu',
+ 3 => 'My Menu Top Item',
+ 4 => 'None',
+ },
+ },
+ 0x150 => { # CSd5 (Z7_2) new with Z series
+ Name => 'ShutterType',
+ PrintConv => {
+ 1 => 'Auto',
+ 2 => 'Mechanical',
+ 3 => 'Electronic',
+ },
+ },
+ 0x151 => { Name => 'LensFunc2Button', PrintConv => \%lensFuncButtonZ7m2 }, # CSf2-h (Z7_2)
+ 0x158 => { Name => 'USBPowerDelivery', PrintConv => \%enableDisable }, # (Z7_2)
+ 0x15b => { Name => 'GroupAreaC2', PrintConv =>\%groupAreaCustom }, # CSa10-b (new with D6) # (D6)
+ 0x15c => { Name => 'BracketingBurstOptions',PrintConv => \%enableDisable }, # CSe9 (D6)
+ # 0x15d => CSf3-j-2 (D6) 'Same as Multi-Selector with Info(U/D) & Playback(R/L)' and 'Same as Multi-Selector with Info(R/L) & Playback(U/D)' (skipped to reduce volume of output)
+ 0x15e => { Name => 'PrimarySlot', PrintConv => { 1 => 'CFexpress/XQD Card', 2 => 'SD Card' } }, # (Z7_2)
+ 0x15f => { Name => 'ReverseFocusRing', PrintConv => { 1 => 'Not Reversed', 2 => 'Reversed' } }, # CSf8 (Z7_2)
+ 0x160 => { # CSf9-a (Z7_2)
+ Name => 'VerticalFuncButton',
+ PrintConv => {
+ 1 => 'AE Lock (hold)',
+ 2 => 'AE Lock (reset on release)',
+ 3 => 'FV Lock',
+ 4 => 'Preview',
+ 5 => '+NEF(RAW)',
+ 6 => 'Subject Tracking',
+ 7 => 'Silent Photography',
+ 8 => 'LiveView Info Display On/Off',
+ 9 => 'Playback',
+ 10 => 'Image Area',
+ 11 => 'Metering',
+ 12 => 'Flash Mode',
+ 13 => 'Focus Mode',
+ 14 => 'Exposure Delay Mode',
+ 15 => 'Shutter/Aperture Lock',
+ 16 => 'Exposure Compensation',
+ 17 => 'ISO Sensitivity',
+ 18 => 'None',
+ },
+ },
+ 0x161 => { # CSf9-b (Z7_2)
+ Name => 'VerticalAFOnButton',
+ PrintConv => {
+ 1 => 'Same as AF-On Button',
+ 2 => 'Select Center Focus Point',
+ 3 => 'AF-On',
+ 4 => 'AF Lock Only',
+ 5 => 'AE Lock (hold)',
+ 6 => 'AE Lock (reset on release)',
+ 7 => 'AE Lock Only',
+ 8 => 'AE/AF Lock',
+ 9 => 'LiveView Info Display On/Off',
+ 10 => 'Zoom (Low)',
+ 11 => 'Zoom (1:1)',
+ 12 => 'Zoom (High)',
+ 13 => 'None',
+ },
+ },
+ 0x162 => { Name => 'VerticalMultiSelector', PrintConv => \%tagSubSelector }, # CSf9-c (Z7_2)
+ # 0x163 => CSf9-c-2 (Z7_2) 'Same as Multi-Selector with Info(U/D) & Playback(R/L)' and 'Same as Multi-Selector with Info(R/L) & Playback(U/D)' (skipped to reduce volume of output)
+ 0x164 => { # CSg7-a (Z7_2)
+ Name => 'VerticalMovieFuncButton',
+ PrintConv => {
+ 1 => 'LiveView Info Display On/Off)',
+ 2 => 'Record Movies',
+ 3 => 'Exposure Compensation',
+ 4 => 'ISO',
+ 5 => 'None',
+ },
+ },
+ 0x165 => { # CSg7-b (Z7_2)
+ Name => 'VerticalMovieAFOnButton',
+ PrintConv => {
+ 1 => 'Same as AF-On',
+ 2 => 'Center Focus Point',
+ 3 => 'AF-On',
+ 4 => 'AF Lock Only',
+ 5 => 'AE Lock (hold)',
+ 6 => 'AE Lock Only',
+ 7 => 'AE/AF Lock',
+ 8 => 'LiveView Info Display On/Off',
+ 9 => 'Zoom (Low)',
+ 10 => 'Zoom (1:1)',
+ 11 => 'Zoom (High)',
+ 12 => 'Record Movies',
+ 13 => 'None',
+ },
+ },
+ 0x169 => { Name => 'LimitAF-AreaModeSelAutoPeople', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa7-h (Z7_2)
+ 0x16a => { Name => 'LimitAF-AreaModeSelAutoAnimals', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa7-h (Z7_2)
+ 0x16b => { Name => 'LimitAF-AreaModeSelWideLPeople', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa7-e (Z7_2)
+ 0x16c => { Name => 'LimitAF-AreaModeSelWideLAnimals', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa7-f (Z7_2)
+ 0x16e => { # (Z7_2)
+ Name => 'AFAreaMode',
+ RawConv => '$$self{AFAreaMode} = $val',
+ PrintConv => {
+ 2 => 'Single-point',
+ 3 => 'Dynamic-area',
+ 4 => 'Wide (S)',
+ 5 => 'Wide (L)',
+ 6 => 'Wide (L-people)',
+ 7 => 'Wide (L-animals)',
+ 8 => 'Auto',
+ 9 => 'Auto (People)',
+ 10 => 'Auto (Animals)',
+ },
+ },
+);
+
+#------------------------------------------------------------------------------
+# Process NikonSettings directory (ref PH)
+# Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
+# Returns: 1 on success
+sub ProcessNikonSettings($$$)
+{
+ my ($et, $dirInfo, $tagTablePtr) = @_;
+
+ # NikonSettings directory has a 24-byte header:
+ # 0x00 - undef[4]: '0100'
+ # 0x04 - int32u: 1 (D-models), 2 (Z-models)
+ # 0x08 - undef[4]: '0100'
+ # 0x0c - int32u: 1 (Z7), 2 (D850), 3 (D780,Z50), 4 (D6,Z5), 5(Z7m2)
+ # 0x10 - undef[4]: firmware version (eg. '0110' for firmware 1.10)
+ # 0x14 - int32u: number of entries in directory
+
+ return 0 if $$dirInfo{DirLen} < 24; # sanity check
+
+ my $dataPt = $$dirInfo{DataPt};
+ my $start = $$dirInfo{DirStart};
+ my $num = Get32u($dataPt, $start + 0x14);
+
+ $et->VerboseDir('NikonSettings', $num);
+
+ my $n = int(($$dirInfo{DirLen} - 0x18) / 8);
+ if ($n < $num) {
+ $et->Warn('Missing '.($num-$n).' NikonSettings entries', 1);
+ $num = $n;
+ } elsif ($n > $num) {
+ $et->Warn('Unused space in NikonSettings directory', 1);
+ }
+ my $i;
+ for ($i=0; $i<$num; ++$i) {
+ my $entry = $start + 0x18 + $i * 8;
+ my $tag = Get16u($dataPt, $entry);
+ my $fmt = Get16u($dataPt, $entry + 2);
+ my $val = Get32u($dataPt, $entry + 4);
+ # abort if the tag has a format that we haven't yet seen
+ # (assuming this is a size/format code. So far we have only seen 0x400)
+ $fmt == 0x400 or $et->Warn(sprintf('Unknown format 0x%x for NikonSettings tag 0x%.4x',$fmt,$tag)), last;
+ $et->HandleTag($tagTablePtr, $tag, $val,
+ DataPt => $dataPt,
+ DataPos => $$dirInfo{DataPos},
+ Base => $$dirInfo{Base},
+ Start => $entry + 4,
+ Size => 4,
+ Format => 'int32u',
+ Index => $i,
+ );
+ }
+ return 1;
+}
+
+
+1; # end
+
+__END__
+
+=head1 NAME
+
+Image::ExifTool::NikonSettings - Read Nikon user settings
+
+=head1 SYNOPSIS
+
+This module is loaded automatically by Image::ExifTool when required.
+
+=head1 DESCRIPTION
+
+This module contains the definitions necessary to read the user settings for
+Nikon cameras such as the D6 and Z7mk2.
+
+
+=head1 AUTHOR
+
+Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
+
+This library is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+=head1 ACKNOWLEDGEMENTS
+
+Thanks to Warren Hatch for his work decoding settings for the D6 and Z7mkII,
+and for providing the original source code for this module.
+
+=head1 SEE ALSO
+
+L<Image::ExifTool::TagNames/Nikon Tags>,
+L<Image::ExifTool(3pm)|Image::ExifTool>
+
+=cut