exiftool_vendored 12.12.0 → 12.17.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.

Potentially problematic release.


This version of exiftool_vendored might be problematic. Click here for more details.

Files changed (196) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +73 -3
  3. data/bin/MANIFEST +3 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +3 -3
  7. data/bin/exiftool +87 -57
  8. data/bin/lib/File/RandomAccess.pm +1 -1
  9. data/bin/lib/File/RandomAccess.pod +2 -2
  10. data/bin/lib/Image/ExifTool.pm +36 -3
  11. data/bin/lib/Image/ExifTool.pod +12 -8
  12. data/bin/lib/Image/ExifTool/AES.pm +1 -1
  13. data/bin/lib/Image/ExifTool/AFCP.pm +1 -1
  14. data/bin/lib/Image/ExifTool/AIFF.pm +1 -1
  15. data/bin/lib/Image/ExifTool/APE.pm +1 -1
  16. data/bin/lib/Image/ExifTool/APP12.pm +1 -1
  17. data/bin/lib/Image/ExifTool/ASF.pm +1 -1
  18. data/bin/lib/Image/ExifTool/Apple.pm +1 -1
  19. data/bin/lib/Image/ExifTool/Audible.pm +1 -1
  20. data/bin/lib/Image/ExifTool/BMP.pm +1 -1
  21. data/bin/lib/Image/ExifTool/BPG.pm +1 -1
  22. data/bin/lib/Image/ExifTool/BZZ.pm +1 -1
  23. data/bin/lib/Image/ExifTool/BigTIFF.pm +1 -1
  24. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +14 -7
  25. data/bin/lib/Image/ExifTool/Canon.pm +3 -2
  26. data/bin/lib/Image/ExifTool/CanonCustom.pm +20 -2
  27. data/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
  28. data/bin/lib/Image/ExifTool/CanonVRD.pm +1 -1
  29. data/bin/lib/Image/ExifTool/CaptureOne.pm +1 -1
  30. data/bin/lib/Image/ExifTool/Casio.pm +1 -1
  31. data/bin/lib/Image/ExifTool/Charset.pm +1 -1
  32. data/bin/lib/Image/ExifTool/DICOM.pm +1 -1
  33. data/bin/lib/Image/ExifTool/DJI.pm +28 -2
  34. data/bin/lib/Image/ExifTool/DNG.pm +1 -1
  35. data/bin/lib/Image/ExifTool/DPX.pm +4 -4
  36. data/bin/lib/Image/ExifTool/DV.pm +1 -1
  37. data/bin/lib/Image/ExifTool/DarwinCore.pm +1 -1
  38. data/bin/lib/Image/ExifTool/DjVu.pm +1 -1
  39. data/bin/lib/Image/ExifTool/EXE.pm +1 -1
  40. data/bin/lib/Image/ExifTool/Exif.pm +45 -16
  41. data/bin/lib/Image/ExifTool/FITS.pm +1 -1
  42. data/bin/lib/Image/ExifTool/FLAC.pm +1 -1
  43. data/bin/lib/Image/ExifTool/FLIF.pm +1 -1
  44. data/bin/lib/Image/ExifTool/FLIR.pm +1 -1
  45. data/bin/lib/Image/ExifTool/Fixup.pm +1 -1
  46. data/bin/lib/Image/ExifTool/Flash.pm +1 -1
  47. data/bin/lib/Image/ExifTool/FlashPix.pm +1 -1
  48. data/bin/lib/Image/ExifTool/Font.pm +1 -1
  49. data/bin/lib/Image/ExifTool/FotoStation.pm +1 -1
  50. data/bin/lib/Image/ExifTool/FujiFilm.pm +3 -2
  51. data/bin/lib/Image/ExifTool/GE.pm +1 -1
  52. data/bin/lib/Image/ExifTool/GIF.pm +1 -1
  53. data/bin/lib/Image/ExifTool/GIMP.pm +1 -1
  54. data/bin/lib/Image/ExifTool/GPS.pm +6 -6
  55. data/bin/lib/Image/ExifTool/GeoTiff.pm +1 -1
  56. data/bin/lib/Image/ExifTool/Geotag.pm +1 -1
  57. data/bin/lib/Image/ExifTool/GoPro.pm +1 -1
  58. data/bin/lib/Image/ExifTool/H264.pm +21 -6
  59. data/bin/lib/Image/ExifTool/HP.pm +1 -1
  60. data/bin/lib/Image/ExifTool/HTML.pm +1 -1
  61. data/bin/lib/Image/ExifTool/HtmlDump.pm +1 -1
  62. data/bin/lib/Image/ExifTool/ICC_Profile.pm +1 -1
  63. data/bin/lib/Image/ExifTool/ID3.pm +1 -1
  64. data/bin/lib/Image/ExifTool/IPTC.pm +1 -1
  65. data/bin/lib/Image/ExifTool/ISO.pm +1 -1
  66. data/bin/lib/Image/ExifTool/ITC.pm +1 -1
  67. data/bin/lib/Image/ExifTool/Import.pm +1 -1
  68. data/bin/lib/Image/ExifTool/InDesign.pm +1 -1
  69. data/bin/lib/Image/ExifTool/JPEG.pm +24 -2
  70. data/bin/lib/Image/ExifTool/JPEGDigest.pm +1 -1
  71. data/bin/lib/Image/ExifTool/JSON.pm +1 -1
  72. data/bin/lib/Image/ExifTool/JVC.pm +1 -1
  73. data/bin/lib/Image/ExifTool/Jpeg2000.pm +9 -4
  74. data/bin/lib/Image/ExifTool/Kodak.pm +1 -1
  75. data/bin/lib/Image/ExifTool/KyoceraRaw.pm +1 -1
  76. data/bin/lib/Image/ExifTool/LNK.pm +1 -1
  77. data/bin/lib/Image/ExifTool/Lang/cs.pm +1 -1
  78. data/bin/lib/Image/ExifTool/Lang/de.pm +1 -1
  79. data/bin/lib/Image/ExifTool/Lang/en_ca.pm +1 -1
  80. data/bin/lib/Image/ExifTool/Lang/en_gb.pm +1 -1
  81. data/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
  82. data/bin/lib/Image/ExifTool/Lang/fi.pm +1 -1
  83. data/bin/lib/Image/ExifTool/Lang/fr.pm +1 -1
  84. data/bin/lib/Image/ExifTool/Lang/it.pm +1 -1
  85. data/bin/lib/Image/ExifTool/Lang/ja.pm +1 -1
  86. data/bin/lib/Image/ExifTool/Lang/ko.pm +1 -1
  87. data/bin/lib/Image/ExifTool/Lang/nl.pm +1 -1
  88. data/bin/lib/Image/ExifTool/Lang/pl.pm +1 -1
  89. data/bin/lib/Image/ExifTool/Lang/ru.pm +1 -1
  90. data/bin/lib/Image/ExifTool/Lang/sv.pm +1 -1
  91. data/bin/lib/Image/ExifTool/Lang/tr.pm +1 -1
  92. data/bin/lib/Image/ExifTool/Lang/zh_cn.pm +1 -1
  93. data/bin/lib/Image/ExifTool/Lang/zh_tw.pm +1 -1
  94. data/bin/lib/Image/ExifTool/Leaf.pm +1 -1
  95. data/bin/lib/Image/ExifTool/Lytro.pm +1 -1
  96. data/bin/lib/Image/ExifTool/M2TS.pm +1 -1
  97. data/bin/lib/Image/ExifTool/MIE.pm +1 -1
  98. data/bin/lib/Image/ExifTool/MIEUnits.pod +1 -1
  99. data/bin/lib/Image/ExifTool/MIFF.pm +1 -1
  100. data/bin/lib/Image/ExifTool/MNG.pm +1 -1
  101. data/bin/lib/Image/ExifTool/MOI.pm +1 -1
  102. data/bin/lib/Image/ExifTool/MPC.pm +1 -1
  103. data/bin/lib/Image/ExifTool/MPEG.pm +1 -1
  104. data/bin/lib/Image/ExifTool/MPF.pm +1 -1
  105. data/bin/lib/Image/ExifTool/MWG.pm +1 -1
  106. data/bin/lib/Image/ExifTool/MXF.pm +1 -1
  107. data/bin/lib/Image/ExifTool/MacOS.pm +1 -1
  108. data/bin/lib/Image/ExifTool/MakerNotes.pm +1 -1
  109. data/bin/lib/Image/ExifTool/Matroska.pm +1 -1
  110. data/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
  111. data/bin/lib/Image/ExifTool/Minolta.pm +1 -1
  112. data/bin/lib/Image/ExifTool/MinoltaRaw.pm +1 -1
  113. data/bin/lib/Image/ExifTool/Motorola.pm +1 -1
  114. data/bin/lib/Image/ExifTool/Nikon.pm +315 -36
  115. data/bin/lib/Image/ExifTool/NikonCapture.pm +1 -1
  116. data/bin/lib/Image/ExifTool/NikonCustom.pm +1 -1
  117. data/bin/lib/Image/ExifTool/NikonSettings.pm +2013 -0
  118. data/bin/lib/Image/ExifTool/Nintendo.pm +1 -1
  119. data/bin/lib/Image/ExifTool/OOXML.pm +1 -1
  120. data/bin/lib/Image/ExifTool/Ogg.pm +1 -1
  121. data/bin/lib/Image/ExifTool/Olympus.pm +1 -1
  122. data/bin/lib/Image/ExifTool/OpenEXR.pm +1 -1
  123. data/bin/lib/Image/ExifTool/Opus.pm +1 -1
  124. data/bin/lib/Image/ExifTool/PCX.pm +1 -1
  125. data/bin/lib/Image/ExifTool/PDF.pm +10 -2
  126. data/bin/lib/Image/ExifTool/PGF.pm +1 -1
  127. data/bin/lib/Image/ExifTool/PICT.pm +1 -1
  128. data/bin/lib/Image/ExifTool/PLIST.pm +1 -1
  129. data/bin/lib/Image/ExifTool/PLUS.pm +1 -1
  130. data/bin/lib/Image/ExifTool/PNG.pm +12 -4
  131. data/bin/lib/Image/ExifTool/PPM.pm +1 -1
  132. data/bin/lib/Image/ExifTool/PSP.pm +1 -1
  133. data/bin/lib/Image/ExifTool/Palm.pm +1 -1
  134. data/bin/lib/Image/ExifTool/Panasonic.pm +1 -1
  135. data/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -1
  136. data/bin/lib/Image/ExifTool/Parrot.pm +1 -1
  137. data/bin/lib/Image/ExifTool/Pentax.pm +3 -2
  138. data/bin/lib/Image/ExifTool/PhaseOne.pm +1 -1
  139. data/bin/lib/Image/ExifTool/PhotoCD.pm +1 -1
  140. data/bin/lib/Image/ExifTool/PhotoMechanic.pm +1 -1
  141. data/bin/lib/Image/ExifTool/Photoshop.pm +1 -1
  142. data/bin/lib/Image/ExifTool/PostScript.pm +1 -1
  143. data/bin/lib/Image/ExifTool/PrintIM.pm +1 -1
  144. data/bin/lib/Image/ExifTool/Qualcomm.pm +1 -1
  145. data/bin/lib/Image/ExifTool/QuickTime.pm +20 -14
  146. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +46 -7
  147. data/bin/lib/Image/ExifTool/README +5 -4
  148. data/bin/lib/Image/ExifTool/RIFF.pm +85 -7
  149. data/bin/lib/Image/ExifTool/RSRC.pm +1 -1
  150. data/bin/lib/Image/ExifTool/RTF.pm +1 -1
  151. data/bin/lib/Image/ExifTool/Radiance.pm +1 -1
  152. data/bin/lib/Image/ExifTool/Rawzor.pm +1 -1
  153. data/bin/lib/Image/ExifTool/Real.pm +1 -1
  154. data/bin/lib/Image/ExifTool/Reconyx.pm +1 -1
  155. data/bin/lib/Image/ExifTool/Red.pm +1 -1
  156. data/bin/lib/Image/ExifTool/Ricoh.pm +1 -1
  157. data/bin/lib/Image/ExifTool/Samsung.pm +1 -1
  158. data/bin/lib/Image/ExifTool/Sanyo.pm +1 -1
  159. data/bin/lib/Image/ExifTool/Scalado.pm +1 -1
  160. data/bin/lib/Image/ExifTool/Shift.pl +1 -1
  161. data/bin/lib/Image/ExifTool/Shortcuts.pm +1 -1
  162. data/bin/lib/Image/ExifTool/Sigma.pm +1 -1
  163. data/bin/lib/Image/ExifTool/SigmaRaw.pm +1 -1
  164. data/bin/lib/Image/ExifTool/Sony.pm +6 -2
  165. data/bin/lib/Image/ExifTool/SonyIDC.pm +1 -1
  166. data/bin/lib/Image/ExifTool/Stim.pm +1 -1
  167. data/bin/lib/Image/ExifTool/TagInfoXML.pm +2 -2
  168. data/bin/lib/Image/ExifTool/TagLookup.pm +3985 -3807
  169. data/bin/lib/Image/ExifTool/TagNames.pod +432 -21
  170. data/bin/lib/Image/ExifTool/Text.pm +1 -1
  171. data/bin/lib/Image/ExifTool/Theora.pm +1 -1
  172. data/bin/lib/Image/ExifTool/Torrent.pm +1 -1
  173. data/bin/lib/Image/ExifTool/Unknown.pm +1 -1
  174. data/bin/lib/Image/ExifTool/VCard.pm +1 -1
  175. data/bin/lib/Image/ExifTool/Validate.pm +1 -1
  176. data/bin/lib/Image/ExifTool/Vorbis.pm +1 -1
  177. data/bin/lib/Image/ExifTool/WTV.pm +1 -1
  178. data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
  179. data/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
  180. data/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
  181. data/bin/lib/Image/ExifTool/WritePDF.pl +1 -1
  182. data/bin/lib/Image/ExifTool/WritePNG.pl +1 -1
  183. data/bin/lib/Image/ExifTool/WritePhotoshop.pl +1 -1
  184. data/bin/lib/Image/ExifTool/WritePostScript.pl +1 -1
  185. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +1 -1
  186. data/bin/lib/Image/ExifTool/WriteXMP.pl +10 -7
  187. data/bin/lib/Image/ExifTool/Writer.pl +32 -18
  188. data/bin/lib/Image/ExifTool/XMP.pm +44 -9
  189. data/bin/lib/Image/ExifTool/XMP2.pl +5 -1
  190. data/bin/lib/Image/ExifTool/XMPStruct.pl +1 -1
  191. data/bin/lib/Image/ExifTool/ZIP.pm +1 -1
  192. data/bin/lib/Image/ExifTool/ZISRAW.pm +1 -1
  193. data/bin/lib/Image/ExifTool/iWork.pm +1 -1
  194. data/bin/perl-Image-ExifTool.spec +1 -1
  195. data/lib/exiftool_vendored/version.rb +1 -1
  196. metadata +9 -4
@@ -918,7 +918,7 @@ the maker notes of NEF images.
918
918
 
919
919
  =head1 AUTHOR
920
920
 
921
- Copyright 2003-2020, Phil Harvey (philharvey66 at gmail.com)
921
+ Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
922
922
 
923
923
  This library is free software; you can redistribute it and/or modify it
924
924
  under the same terms as Perl itself.
@@ -9534,7 +9534,7 @@ this information.
9534
9534
 
9535
9535
  =head1 AUTHOR
9536
9536
 
9537
- Copyright 2003-2020, Phil Harvey (philharvey66 at gmail.com)
9537
+ Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
9538
9538
 
9539
9539
  This library is free software; you can redistribute it and/or modify it
9540
9540
  under the same terms as Perl itself.
@@ -0,0 +1,2013 @@
1
+ #------------------------------------------------------------------------------
2
+ # File: NikonSettings.pm
3
+ #
4
+ # Description: Read Nikon user settings
5
+ #
6
+ # Revisions: 2021/01/08 - Warren Hatch Created
7
+ # 2021/01/12 - PH Created ProcessNikonSettings() to extract tags
8
+ # by ID instead of using fixed offsets
9
+ #
10
+ # References: 1) Warren Hatch private communication (D6 and Z7_2)
11
+ #
12
+ #------------------------------------------------------------------------------
13
+
14
+ package Image::ExifTool::NikonSettings;
15
+
16
+ use strict;
17
+ use vars qw($VERSION);
18
+ use Image::ExifTool qw(:DataAccess :Utils);
19
+
20
+ $VERSION = '1.01';
21
+
22
+ sub ProcessNikonSettings($$$);
23
+
24
+ my %enableDisable = ( 1 => 'Enable', 2 => 'Disable' );
25
+
26
+ my %funcButtonZ7m2 = (
27
+ 1 => 'AF-On',
28
+ 2 => 'AF Lock Only',
29
+ 3 => 'AE Lock (hold)',
30
+ 4 => 'AE Lock (reset on release)',
31
+ 5 => 'AE Lock Only',
32
+ 6 => 'AE/AF Lock',
33
+ 7 => 'FV Lock',
34
+ 8 => 'Flash Disable/Enable',
35
+ 9 => 'Preview',
36
+ 10 => 'Matrix Metering',
37
+ 11 => 'Center-weighted Metering',
38
+ 12 => 'Spot Metering',
39
+ 13 => 'Highlight-weighted Metering',
40
+ 14 => 'Bracketing Burst',
41
+ 15 => 'Synchronized Release (Master)',
42
+ 16 => 'Synchronized Release (Remote)', # no settings map to 17 or 18
43
+ 19 => '+NEF(RAW)',
44
+ 20 => 'Subject Tracking',
45
+ 21 => 'Silent Photography',
46
+ 22 => 'LiveView Info Display On/Off',
47
+ 23 => 'Grid Display',
48
+ 24 => 'Zoom (Low)',
49
+ 25 => 'Zoom (1:1)',
50
+ 26 => 'Zoom (High)',
51
+ 27 => 'My Menu',
52
+ 28 => 'My Menu Top Item',
53
+ 29 => 'Playback',
54
+ 30 => 'Protect',
55
+ 31 => 'Image Area',
56
+ 32 => 'Image Quality',
57
+ 33 => 'White Balance',
58
+ 34 => 'Picture Control',
59
+ 35 => 'Active-D Lighting',
60
+ 36 => 'Metering',
61
+ 37 => 'Flash Mode',
62
+ 38 => 'Focus Mode',
63
+ 39 => 'Auto Bracketing',
64
+ 40 => 'Multiple Exposure',
65
+ 41 => 'HDR',
66
+ 42 => 'Exposure Delay Mode',
67
+ 43 => 'Shutter/Aperture Lock',
68
+ 44 => 'Focus Peaking',
69
+ 45 => 'Rating 0',
70
+ 46 => 'Rating 5',
71
+ 47 => 'Rating 4',
72
+ 48 => 'Rating 3',
73
+ 49 => 'Rating 2',
74
+ 50 => 'Rating 1', # no settings map to x'51 (possibly intended for 'Candidate for Delection'
75
+ 52 => 'Non-CPU Lens',
76
+ 52 => 'None',
77
+ );
78
+
79
+ my %flickUpDownD6 = (
80
+ 1 => 'Rating',
81
+ 2 => 'Select To Send',
82
+ 3 => 'Protect',
83
+ 4 => 'Voice Memo',
84
+ 5 => 'None',
85
+ );
86
+
87
+ my %flickUpDownRatingD6 = (
88
+ 1 => 'Rating 5',
89
+ 2 => 'Rating 4',
90
+ 3 => 'Rating 3',
91
+ 4 => 'Rating 2',
92
+ 5 => 'Rating 1',
93
+ 6 => 'Candidate for Deletion',
94
+ );
95
+
96
+ my %groupAreaCustom = (
97
+ 1 => '1x7',
98
+ 2 => '1x5',
99
+ 3 => '3x7',
100
+ 4 => '3x5',
101
+ 5 => '3x3',
102
+ 6 => '5x7',
103
+ 7 => '5x5',
104
+ 8 => '5x3',
105
+ 9 => '5x1',
106
+ 10 => '7x7',
107
+ 11 => '7x5',
108
+ 12 => '7x3',
109
+ 13 => '7x1',
110
+ 14 => '11x3',
111
+ 15 => '11x1',
112
+ 16 => '15x3',
113
+ 17 => '15x1',
114
+ );
115
+
116
+ my %iSOAutoHiLimitD6 = (
117
+ 1 => 'ISO 200',
118
+ 2 => 'ISO 250',
119
+ 3 => 'ISO 280',
120
+ 4 => 'ISO 320',
121
+ 5 => 'ISO 400',
122
+ 6 => 'ISO 500',
123
+ 7 => 'ISO 560',
124
+ 8 => 'ISO 640',
125
+ 9 => 'ISO 800',
126
+ 10 => 'ISO 1000',
127
+ 11 => 'ISO 1100',
128
+ 12 => 'ISO 1250',
129
+ 13 => 'ISO 1600',
130
+ 14 => 'ISO 2000',
131
+ 15 => 'ISO 2200',
132
+ 16 => 'ISO 2500',
133
+ 17 => 'ISO 3200',
134
+ 18 => 'ISO 4000',
135
+ 19 => 'ISO 4500',
136
+ 20 => 'ISO 5000',
137
+ 21 => 'ISO 6400',
138
+ 22 => 'ISO 8000',
139
+ 23 => 'ISO 9000',
140
+ 24 => 'ISO 10000',
141
+ 25 => 'ISO 12800',
142
+ 26 => 'ISO 16000',
143
+ 27 => 'ISO 18000',
144
+ 28 => 'ISO 20000',
145
+ 29 => 'ISO 25600',
146
+ 30 => 'ISO 32000',
147
+ 31 => 'ISO 36000',
148
+ 32 => 'ISO 40000',
149
+ 33 => 'ISO 51200',
150
+ 34 => 'ISO 64000',
151
+ 35 => 'ISO 72000',
152
+ 36 => 'ISO 81200',
153
+ 37 => 'ISO 102400',
154
+ 38 => 'ISO Hi 0.3',
155
+ 39 => 'ISO Hi 0.5',
156
+ 40 => 'ISO Hi 0.7',
157
+ 41 => 'ISO Hi 1.0',
158
+ 42 => 'ISO Hi 2.0',
159
+ 43 => 'ISO Hi 3.0',
160
+ 44 => 'ISO Hi 4.0',
161
+ 45 => 'ISO Hi 5.0',
162
+ );
163
+
164
+ my %lensFuncButtonZ7m2 = (
165
+ 1 => 'AF-On',
166
+ 2 => 'AF Lock Only',
167
+ 3 => 'AE Lock (hold)',
168
+ 4 => 'AE Lock (reset on release)',
169
+ 5 => 'AE Lock Only',
170
+ 6 => 'AE/AF Lock',
171
+ 7 => 'FV Lock',
172
+ 8 => 'Flash Disable/Enable',
173
+ 9 => 'Preview',
174
+ 10 => 'Matrix Metering',
175
+ 11 => 'Center-weighted Metering',
176
+ 12 => 'Spot Metering',
177
+ 13 => 'Highlight-weighted Metering',
178
+ 14 => 'Bracketing Burst',
179
+ 15 => 'Synchronized Release (Master)',
180
+ 16 => 'Synchronized Release (Remote)', # no settings map to 17 or 18 (Z7II fw 1.01)
181
+ 19 => '+NEF(RAW)',
182
+ 20 => 'Subject Tracking',
183
+ 21 => 'Grid Display',
184
+ 22 => 'Zoom (Low)',
185
+ 23 => 'Zoom (1:1)',
186
+ 24 => 'Zoom (High)',
187
+ 25 => 'My Menu',
188
+ 26 => 'My Menu Top Item',
189
+ 27 => 'Playback',
190
+ 28 => 'None',
191
+ );
192
+
193
+ my %limitNolimit = ( 1 => 'Limit', 2 => 'No Limit' );
194
+
195
+ my %limtReleaseModeSel = (
196
+ 0 => 'No Limit', # not sure why 0 and 2 both map to 'No Limit', but they do
197
+ 1 => 'Limit',
198
+ 2 => 'No Limit',
199
+ );
200
+
201
+ my %menuBank = (
202
+ 1 => 'A',
203
+ 2 => 'B',
204
+ 3 => 'C',
205
+ 4 => 'D',
206
+ );
207
+
208
+ my %noYes = ( 1 => 'No', 2 => 'Yes' );
209
+ my %offOn = ( 1 => 'Off', 2 => 'On' );
210
+ my %onOff = ( 1 => 'On', 2 => 'Off' );
211
+
212
+ my %previewButtonD6 = (
213
+ 1 => 'Preset Focus Point - Press To Recall',
214
+ 2 => 'Preset Focus Point - Hold To Recall',
215
+ 3 => 'AF-AreaMode S',
216
+ 4 => 'AF-AreaMode D9',
217
+ 5 => 'AF-AreaMode D25',
218
+ 6 => 'AF-AreaMode D49',
219
+ 7 => 'AF-AreaMode D105',
220
+ 8 => 'AF-AreaMode 3D',
221
+ 9 => 'AF-AreaMode Group',
222
+ 10 => 'AF-AreaMode Group C1',
223
+ 11 => 'AF-AreaMode Group C2',
224
+ 12 => 'AF-AreaMode Auto Area',
225
+ 13 => 'AF-AreaMode + AF-On S',
226
+ 14 => 'AF-AreaMode + AF-On D9',
227
+ 15 => 'AF-AreaMode + AF-On D25',
228
+ 16 => 'AF-AreaMode + AF-On D49',
229
+ 17 => 'AF-AreaMode + AF-On D105',
230
+ 18 => 'AF-AreaMode + AF-On 3D',
231
+ 19 => 'AF-AreaMode + AF-On Group',
232
+ 20 => 'AF-AreaMode + AF-On Group C1',
233
+ 21 => 'AF-AreaMode + AF-On Group C2',
234
+ 22 => 'AF-AreaMode + AF-On Auto Area',
235
+ 23 => 'AF-On',
236
+ 24 => 'AF Lock Only',
237
+ 25 => 'AE Lock (hold)',
238
+ 26 => 'AE/WB Lock (hold)',
239
+ 27 => 'AE Lock (reset on release)',
240
+ 28 => 'AE Lock Only',
241
+ 29 => 'AE/AF Lock',
242
+ 30 => 'FV Lock',
243
+ 31 => 'Flash Disable/Enable',
244
+ 32 => 'Preview',
245
+ 33 => 'Recall Shooting Functions',
246
+ 34 => 'Bracketing Burst',
247
+ 35 => 'Synchronized Release (Master)',
248
+ 36 => 'Synchronized Release (Remote)', # no settings map to 37 or 38
249
+ 39 => '+NEF(RAW)',
250
+ 40 => 'Grid Display',
251
+ 41 => 'Virtual Horizon',
252
+ 42 => 'Voice Memo',
253
+ 43 => 'Wired LAN',
254
+ 44 => 'My Menu',
255
+ 45 => 'My Menu Top Item',
256
+ 46 => 'Playback',
257
+ 47 => 'Filtered Playback',
258
+ 48 => 'Photo Shooting Bank',
259
+ 49 => 'AF Mode/AF Area Mode',
260
+ 50 => 'Image Area',
261
+ 51 => 'Active-D Lighting',
262
+ 52 => 'Exposure Delay Mode',
263
+ 53 => 'Shutter/Aperture Lock',
264
+ 54 => '1 Stop Speed/Aperture',
265
+ 55 => 'Non-CPU Lens',
266
+ 56 => 'None',
267
+ );
268
+
269
+ my %releaseFocus = (
270
+ 1 => 'Release',
271
+ 2 => 'Focus',
272
+ );
273
+
274
+ my %tagMultiSelector = (
275
+ 1 => 'Restart Standby Timer',
276
+ 2 => 'Do Nothing',
277
+ );
278
+
279
+ my %tagSecondarySlotFunction = (
280
+ 1 => 'Overflow',
281
+ 2 => 'Backup',
282
+ 3 => 'NEF Primary + JPG Secondary',
283
+ 4 => 'JPG Primary + JPG Secondary',
284
+ );
285
+
286
+ my %tagSubSelector = (
287
+ 1 => 'Same as MultiSelector',
288
+ 2 => 'Focus Point Selection',
289
+ );
290
+
291
+ my %thirdHalfFull = (
292
+ 1 => '1/3 EV',
293
+ 2 => '1/2 EV',
294
+ 3 => '1 EV',
295
+ );
296
+
297
+ my %times4s10s20s1m5m20m = (
298
+ 1 => '4 s',
299
+ 2 => '10 s',
300
+ 3 => '20 s',
301
+ 4 => '1 min',
302
+ 5 => '5 min',
303
+ 6 => '10 min',
304
+ );
305
+
306
+ my %yesNo = ( 1 => 'Yes', 2 => 'No' );
307
+
308
+ my %infoZ72 = (
309
+ Condition => '$$self{Model} =~ /^NIKON Z 6_2/i or $$self{Model} =~ /^NIKON Z 7_2/i',
310
+ Notes => 'Z7_2',
311
+ );
312
+
313
+ my %infoD6 = (
314
+ Condition => '$$self{Model} =~ /^NIKON D6/i',
315
+ Notes => 'D6',
316
+ );
317
+
318
+ # Nikon Settings tags (ref 1, tag ID's ref PH)
319
+ %Image::ExifTool::NikonSettings::Main = (
320
+ PROCESS_PROC => \&ProcessNikonSettings,
321
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
322
+ NOTES => q{
323
+ User settings for newer Nikon models. A number of the tags are marked as
324
+ Unknown only to reduce the volume of the normal output.
325
+ },
326
+ 0x001 => [{
327
+ Name => 'ISOAutoHiLimit',
328
+ PrintConv => \%iSOAutoHiLimitD6,
329
+ %infoD6,
330
+ },{
331
+ Name => 'ISOAutoHiLimit',
332
+ PrintConv => {
333
+ 1 => 'ISO 100',
334
+ 2 => 'ISO 125',
335
+ 4 => 'ISO 160',
336
+ 5 => 'ISO 200',
337
+ 6 => 'ISO 250',
338
+ 8 => 'ISO 320',
339
+ 9 => 'ISO 400',
340
+ 10 => 'ISO 500',
341
+ 12 => 'ISO 640',
342
+ 13 => 'ISO 800',
343
+ 14 => 'ISO 1000',
344
+ 16 => 'ISO 1250',
345
+ 17 => 'ISO 1600',
346
+ 18 => 'ISO 2000',
347
+ 20 => 'ISO 2500',
348
+ 21 => 'ISO 3200',
349
+ 22 => 'ISO 4000',
350
+ 24 => 'ISO 5000',
351
+ 25 => 'ISO 6400',
352
+ 26 => 'ISO 8000',
353
+ 28 => 'ISO 10000',
354
+ 29 => 'ISO 12800',
355
+ 30 => 'ISO 16000',
356
+ 32 => 'ISO 20000',
357
+ 33 => 'ISO 25600',
358
+ 38 => 'ISO Hi 0.3',
359
+ 39 => 'ISO Hi 0.5',
360
+ 40 => 'ISO Hi 0.7',
361
+ 41 => 'ISO Hi 1.0',
362
+ 42 => 'ISO Hi 2.0',
363
+ },
364
+ %infoZ72,
365
+ }],
366
+ 0x002 => [{
367
+ Name => 'ISOAutoFlashLimit',
368
+ PrintConv => {
369
+ 1 => 'Same As Without Flash',
370
+ 2 => 'ISO 200',
371
+ 3 => 'ISO 250',
372
+ 5 => 'ISO 320',
373
+ 6 => 'ISO 400',
374
+ 7 => 'ISO 500',
375
+ 9 => 'ISO 640',
376
+ 10 => 'ISO 800',
377
+ 11 => 'ISO 1000',
378
+ 13 => 'ISO 1250',
379
+ 14 => 'ISO 1600',
380
+ 15 => 'ISO 2000',
381
+ 17 => 'ISO 2500',
382
+ 18 => 'ISO 3200',
383
+ 19 => 'ISO 4000',
384
+ 21 => 'ISO 5000',
385
+ 22 => 'ISO 6400',
386
+ 23 => 'ISO 8000',
387
+ 25 => 'ISO 10000',
388
+ 26 => 'ISO 12800',
389
+ 27 => 'ISO 16000',
390
+ 29 => 'ISO 20000',
391
+ 30 => 'ISO 25600',
392
+ 31 => 'ISO 32000',
393
+ 33 => 'ISO 40000',
394
+ 34 => 'ISO 51200',
395
+ 35 => 'ISO 64000',
396
+ 36 => 'ISO 72000',
397
+ 37 => 'ISO 81200',
398
+ 38 => 'ISO 102400',
399
+ 39 => 'ISO Hi 0.3',
400
+ 40 => 'ISO Hi 0.5',
401
+ 41 => 'ISO Hi 0.7',
402
+ 42 => 'ISO Hi 1.0',
403
+ 43 => 'ISO Hi 2.0',
404
+ 44 => 'ISO Hi 3.0',
405
+ 45 => 'ISO Hi 4.0',
406
+ 46 => 'ISO Hi 5.0',
407
+ },
408
+ %infoD6,
409
+ },{
410
+ Name => 'ISOAutoFlashLimit',
411
+ PrintConv => {
412
+ 1 => 'Same As Without Flash',
413
+ 2 => 'ISO 100',
414
+ 3 => 'ISO 125',
415
+ 5 => 'ISO 160',
416
+ 6 => 'ISO 200',
417
+ 7 => 'ISO 250',
418
+ 9 => 'ISO 320',
419
+ 10 => 'ISO 400',
420
+ 11 => 'ISO 500',
421
+ 13 => 'ISO 640',
422
+ 14 => 'ISO 800',
423
+ 15 => 'ISO 1000',
424
+ 17 => 'ISO 1250',
425
+ 18 => 'ISO 1600',
426
+ 19 => 'ISO 2000',
427
+ 21 => 'ISO 2500',
428
+ 22 => 'ISO 3200',
429
+ 23 => 'ISO 4000',
430
+ 25 => 'ISO 5000',
431
+ 26 => 'ISO 6400',
432
+ 27 => 'ISO 8000',
433
+ 29 => 'ISO 10000',
434
+ 30 => 'ISO 12800',
435
+ 31 => 'ISO 16000',
436
+ 33 => 'ISO 20000',
437
+ 34 => 'ISO 25600',
438
+ 39 => 'ISO Hi 0.3',
439
+ 40 => 'ISO Hi 0.5',
440
+ 41 => 'ISO Hi 0.7',
441
+ 42 => 'ISO Hi 1.0',
442
+ 43 => 'ISO Hi 2.0',
443
+ },
444
+ %infoZ72,
445
+ }],
446
+ 0x003 => { # (D6/Z7_2)
447
+ Name => 'ISOAutoShutterTime',
448
+ PrintConv => {
449
+ 1 => 'Auto (Slowest)',
450
+ 2 => 'Auto (Slower)',
451
+ 3 => 'Auto',
452
+ 4 => 'Auto (Faster)',
453
+ 5 => 'Auto (Fastest)',
454
+ 6 => '1/4000 s',
455
+ 7 => '1/3200 s',
456
+ 8 => '1/2500 s',
457
+ 9 => '1/2000 s',
458
+ 10 => '1/1600 s',
459
+ 11 => '1/1250 s',
460
+ 12 => '1/1000 s',
461
+ 13 => '1/800 s',
462
+ 14 => '1/640 s',
463
+ 15 => '1/500 s',
464
+ 16 => '1/400 s',
465
+ 17 => '1/320 s',
466
+ 18 => '1/250 s',
467
+ 19 => '1/200 s',
468
+ 20 => '1/160 s',
469
+ 21 => '1/125 s',
470
+ 22 => '1/100 s',
471
+ 23 => '1/80 s',
472
+ 24 => '1/60 s',
473
+ 25 => '1/50 s',
474
+ 26 => '1/40 s',
475
+ 27 => '1/30 s',
476
+ 28 => '1/25 s',
477
+ 29 => '1/20 s',
478
+ 30 => '1/15 s',
479
+ 31 => '1/13 s',
480
+ 32 => '1/10 s',
481
+ 33 => '1/8 s',
482
+ 34 => '1/6 s',
483
+ 35 => '1/5 s',
484
+ 36 => '1/4 s',
485
+ 37 => '1/3 s',
486
+ 38 => '1/2.5 s',
487
+ 39 => '1/2 s',
488
+ 40 => '1/1.6 s',
489
+ 41 => '1/1.3 s',
490
+ 42 => '1 s',
491
+ 43 => '1.3 s',
492
+ 44 => '1.6 s',
493
+ 45 => '2 s',
494
+ 46 => '2.5 s',
495
+ 47 => '3 s',
496
+ 48 => '4 s',
497
+ 49 => '5 s',
498
+ 50 => '6 s',
499
+ 51 => '8 s',
500
+ 52 => '10 s',
501
+ 53 => '13 s',
502
+ 54 => '15 s',
503
+ 55 => '20 s',
504
+ 56 => '25 s',
505
+ 57 => '30 s',
506
+ },
507
+ },
508
+ 0x00b => { Name => 'FlickerReductionShooting', PrintConv => \%enableDisable }, # (D6/Z7_2)
509
+ 0x00c => { Name => 'FlickerReductionIndicator',PrintConv => \%enableDisable }, # (D6)
510
+ 0x00d => [{
511
+ Name => 'MovieISOAutoHiLimit',
512
+ PrintConv => \%iSOAutoHiLimitD6,
513
+ %infoD6,
514
+ },{
515
+ Name => 'MovieISOAutoHiLimit',
516
+ PrintConv => {
517
+ 1 => 'ISO 200',
518
+ 2 => 'ISO 250',
519
+ 4 => 'ISO 320',
520
+ 5 => 'ISO 400',
521
+ 6 => 'ISO 500',
522
+ 8 => 'ISO 640',
523
+ 9 => 'ISO 800',
524
+ 10 => 'ISO 1000',
525
+ 12 => 'ISO 1250',
526
+ 13 => 'ISO 1600',
527
+ 14 => 'ISO 2000',
528
+ 16 => 'ISO 2500',
529
+ 17 => 'ISO 3200',
530
+ 18 => 'ISO 4000',
531
+ 20 => 'ISO 5000',
532
+ 21 => 'ISO 6400',
533
+ 22 => 'ISO 8000',
534
+ 24 => 'ISO 10000',
535
+ 25 => 'ISO 12800',
536
+ 26 => 'ISO 16000',
537
+ 28 => 'ISO 20000',
538
+ 29 => 'ISO 25600',
539
+ 34 => 'ISO Hi 0.3',
540
+ 35 => 'ISO Hi 0.5',
541
+ 36 => 'ISO Hi 0.7',
542
+ 37 => 'ISO Hi 1.0',
543
+ 38 => 'ISO Hi 2.0',
544
+ },
545
+ %infoZ72,
546
+ }],
547
+ 0x00e => { Name => 'MovieISOAutoControlManualMode',PrintConv => \%onOff }, # (D6/Z7_2)
548
+ # 0x00f => [{ # this tag should reside here, but unable to confirm
549
+ # Name => 'MovieISOAutoManualMode',
550
+ # PrintConv => \%iSOAutoHiLimitD6,
551
+ # %infoD6,
552
+ # },{
553
+ # Name => 'MovieISOAutoManualMode',
554
+ # PrintConv => \%iSOAutoHiLimitZ7m2,
555
+ # %infoZ72,
556
+ # }],
557
+ 0x01d => [{ # CSa1 (D6)
558
+ Name => 'AF-CPrioritySel',
559
+ PrintConv => { # valid for cameras with 4 options for CS1, otherwise 1=Release, 2=Focus
560
+ 1 => 'Release',
561
+ 2 => 'Release + Focus',
562
+ 3 => 'Focus + Release',
563
+ 4 => 'Focus',
564
+ },
565
+ %infoD6,
566
+ },{ # CSa1 (Z7_2)
567
+ Name => 'AF-CPrioritySel',
568
+ PrintConv => \%releaseFocus,
569
+ %infoZ72,
570
+ }],
571
+ 0x01e => { Name => 'AF-SPrioritySel', PrintConv => \%releaseFocus }, # CSa2 (D6), CSa2 (Z7_2)
572
+ 0x020 => [{ # CSa4 (D6)
573
+ Name => 'AFPointSel',
574
+ PrintConv => {
575
+ 1 => '105 Points',
576
+ 2 => '27 Points',
577
+ 3 => '15 Points',
578
+ },
579
+ %infoD6,
580
+ },{ # CSa4 (Z7_2)
581
+ Name => 'AFPointSel',
582
+ PrintConv => { 1 => 'Use All', 2 => 'Use Half' },
583
+ %infoZ72,
584
+ }],
585
+ 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)
586
+ 0x023 => { Name => 'FocusPointWrap', PrintConv => { 1 => 'Wrap', 2 => 'No Wrap' } }, # CSa16 (D6), CSa8 (Z7_2)
587
+ 0x025 => { # CSa17-a (D6), CSa9-a (Z7_2)
588
+ Name => 'ManualFocusPointIllumination',
589
+ PrintConv => {
590
+ 1 => 'On',
591
+ 2 => 'On During Focus Point Selection Only',
592
+ },
593
+ },
594
+ 0x026 => { Name => 'AF-AssistIlluminator', PrintConv => \%onOff }, # CSa11 (Z7_2)
595
+ # 0x027 => { Name => 'ManualFocusRingInAFMode', PrintConv => \%onOff }, # CSa18 (D6,Z7_2) capability documented in manual, but visibility (& ability to test) requires a compatible lens
596
+ 0x029 => { Name => 'ISOStepSize', PrintConv => \%thirdHalfFull }, # CSb1 (D6)
597
+ 0x02a => { Name => 'ExposureControlStepSize', PrintConv => \%thirdHalfFull }, # CSb2 (D6), CSb1 (Z7_2)
598
+ 0x02b => { # CSb4 (D6), CSb2 (Z7_2)
599
+ Name => 'EasyExposureCompensation',
600
+ PrintConv => {
601
+ 1 => 'On (auto reset)',
602
+ 2 => 'On',
603
+ 3 => 'Off',
604
+ },
605
+ },
606
+ 0x02c => { Name => 'MatrixMetering', PrintConv => { 1 => 'Face Detection On', 2 => 'Face Detection Off' } }, # CSb5 (D6)
607
+ 0x02d => [{ # CSb6 (D6)
608
+ Name => 'CenterWeightedAreaSize',
609
+ PrintConv => {
610
+ 1 => '8 mm',
611
+ 2 => '12 mm',
612
+ 3 => '15 mm',
613
+ 4 => '20 mm',
614
+ 5 => 'Average',
615
+ },
616
+ %infoD6
617
+ },{ # CSb3 (Z7_2)
618
+ Name => 'CenterWeightedAreaSize',
619
+ PrintConv => { 1 => '12 mm', 2 => 'Average' },
620
+ %infoZ72,
621
+ }],
622
+ 0x02f => { # CSb7-a (D6), CSb4-a (Z7_2)
623
+ Name => 'FineTuneOptMatrixMetering',
624
+ ValueConv => '($val - 7) / 6',
625
+ ValueConvInv => 'int($val*6+7)',
626
+ PrintConv => '$val ? sprintf("%+.2f", $val) : 0',
627
+ PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
628
+ },
629
+ 0x030 => { # CSb7-b (D6), CSb4-b (Z7_2)
630
+ Name => 'FineTuneOptCenterWeighted',
631
+ ValueConv => '($val - 7) / 6',
632
+ ValueConvInv => 'int($val*6+7)',
633
+ PrintConv => '$val ? sprintf("%+.2f", $val) : 0',
634
+ PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
635
+ },
636
+ 0x031 => { # CSb7-c (D6), CSb4-c (Z7_2)
637
+ Name => 'FineTuneOptSpotMetering',
638
+ ValueConv => '($val - 7) / 6',
639
+ ValueConvInv => 'int($val*6+7)',
640
+ PrintConv => '$val ? sprintf("%+.2f", $val) : 0',
641
+ PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
642
+ },
643
+ 0x032 => { # CSb7-d (D6), CSb4-d (Z7_2)
644
+ Name => 'FineTuneOptHighlightWeighted',
645
+ ValueConv => '($val - 7) / 6',
646
+ ValueConvInv => 'int($val*6+7)',
647
+ PrintConv => '$val ? sprintf("%+.2f", $val) : 0',
648
+ PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
649
+ },
650
+ 0x033 => { # CSc1 (D6), CSc1 (Z7_2)
651
+ Name => 'ShutterReleaseButtonAE-L',
652
+ PrintConv => {
653
+ 1 => 'On (Half Press)',
654
+ 2 => 'On (Burst Mode)',
655
+ 3 => 'Off',
656
+ },
657
+ },
658
+ 0x034 => [{ # CSc2 (D6)
659
+ Name => 'StandbyMonitorOffTime',
660
+ PrintConv => {
661
+ 1 => '4 s',
662
+ 2 => '6 s',
663
+ 3 => '10 s',
664
+ 4 => '30 s',
665
+ 5 => '1 min',
666
+ 6 => '5 min',
667
+ 7 => '10 min',
668
+ 8 => '30 min',
669
+ 9 => 'No Limit',
670
+ },
671
+ %infoD6,
672
+ },{ # CSc4-d (Z7_2)
673
+ Name => 'StandbyMonitorOffTime',
674
+ PrintConv => {
675
+ 1 => '10 s',
676
+ 2 => '20 s',
677
+ 3 => '30 s',
678
+ 4 => '1 min',
679
+ 5 => '5 min',
680
+ 6 => '10 min',
681
+ 7 => '30 min',
682
+ 8 => 'No Limit',
683
+ },
684
+ %infoZ72,
685
+ }],
686
+ 0x035 => { # CSc3-a (D6), CSc2-a (Z7_2)
687
+ Name => 'SelfTimerTime',
688
+ PrintConv => {
689
+ 1 => '2 s',
690
+ 2 => '5 s',
691
+ 3 => '10 s',
692
+ 4 => '20 s',
693
+ },
694
+ },
695
+ 0x036 => { Name => 'SelfTimerShotCount', ValueConv => '10 - $val', ValueConvInv => '10 + $val' }, # CSc3-b (D6), CSc2-b (Z7_2)
696
+ 0x037 => { # CSc3-c (D6), CSc2-c (Z7_2)
697
+ Name => 'SelfTimerShotInterval',
698
+ PrintConv => {
699
+ 1 => '0.5 s',
700
+ 2 => '1 s',
701
+ 3 => '2 s',
702
+ 4 => '3 s',
703
+ },
704
+ },
705
+ 0x038 => { Name => 'PlaybackMonitorOffTime', PrintConv => \%times4s10s20s1m5m20m }, # CSc4-a (D6), CSc3-a (Z7_2)
706
+ 0x039 => { Name => 'MenuMonitorOffTime', PrintConv => \%times4s10s20s1m5m20m }, # CSc4-b (D6), CSc3-b (Z7_2)
707
+ 0x03a => { Name => 'ShootingInfoMonitorOffTime',PrintConv => \%times4s10s20s1m5m20m }, # CSc4-c (D6)
708
+ 0x03b => { # CSc4-d (D6), CSc3-c (Z7_2)
709
+ Name => 'ImageReviewMonitorOffTime',
710
+ PrintConv => {
711
+ 1 => '2 s',
712
+ 2 => '4 s',
713
+ 3 => '10 s',
714
+ 4 => '20 s',
715
+ 5 => '1 min',
716
+ 6 => '5 min',
717
+ 7 => '10 min',
718
+ },
719
+ },
720
+ 0x03c => { # CSc4-e (D6)
721
+ Name => 'LiveViewMonitorOffTime',
722
+ PrintConv => {
723
+ 1 => '5 min',
724
+ 2 => '10 min',
725
+ 3 => '15 min',
726
+ 4 => '20 min',
727
+ 5 => '30 min',
728
+ 6 => 'No Limit',
729
+ },
730
+ },
731
+ 0x03e => { Name => 'CLModeShootingSpeed', ValueConv => '6 - $val', ValueConvInv => '6 + $val', PrintConv => '"$val fps"', PrintConvInv => '$val=~s/\s*fps//i; $val' }, # CSd1 (Z7_2)
732
+ 0x03f => { Name => 'MaxContinuousRelease' }, # CSd2 # values: 1-200 # (D6/Z7_2)
733
+ 0x040 => { # CSd5 (D6), CSd4 (Z7_2)
734
+ Name => 'ExposureDelayMode',
735
+ PrintConv => {
736
+ 1 => '3 s',
737
+ 2 => '2 s',
738
+ 3 => '1 s',
739
+ 4 => '0.5 s',
740
+ 5 => '0.2 s',
741
+ 6 => 'Off',
742
+ },
743
+ },
744
+ 0x041 => { Name => 'ElectronicFront-CurtainShutter',PrintConv => \%onOff }, # CSd6 (D6)
745
+ 0x042 => { Name => 'FileNumberSequence', PrintConv => \%onOff }, # CSd9 (D6), CSd8 (Z7_2)
746
+ 0x043 => { Name => 'FramingGridDisplay', PrintConv => \%onOff }, # CSd11 (D6), CSd10 (Z7_2), new tag with implementation of NikonSettings # (Z7_2)
747
+ 0x045 => { Name => 'LCDIllumination', PrintConv => \%onOff }, # CSd13 (D6)
748
+ 0x046 => { Name => 'OpticalVR', PrintConv => \%onOff }, # CSd15 (D6)
749
+ 0x047 => [{ # CSe1 (D6)
750
+ Name => 'FlashSyncSpeed',
751
+ PrintConv => {
752
+ 1 => '1/250 s (auto FP)',
753
+ 2 => '1/250 s',
754
+ 3 => '1/200 s',
755
+ 4 => '1/160 s',
756
+ 5 => '1/125 s',
757
+ 6 => '1/100 s',
758
+ 7 => '1/80 s',
759
+ 8 => '1/60 s',
760
+ },
761
+ %infoD6,
762
+ },{ # CSe1 (Z7_2)
763
+ Name => 'FlashSyncSpeed',
764
+ PrintConv => {
765
+ 1 => '1/200 s (auto FP)',
766
+ 2 => '1/200 s',
767
+ 3 => '1/160 s',
768
+ 4 => '1/125 s',
769
+ 5 => '1/100 s',
770
+ 6 => '1/80 s',
771
+ 7 => '1/60 s',
772
+ },
773
+ %infoZ72,
774
+ }],
775
+ 0x048 => { # CSe2 (D6/Z7_2)
776
+ Name => 'FlashShutterSpeed',
777
+ PrintConv => {
778
+ 1 => '1/60 s',
779
+ 2 => '1/30 s',
780
+ 3 => '1/15 s',
781
+ 4 => '1/8 s',
782
+ 5 => '1/4 s',
783
+ 6 => '1/2 s',
784
+ 7 => '1 s',
785
+ 8 => '2 s',
786
+ },
787
+ },
788
+ 0x049 => { Name => 'FlashExposureCompArea', PrintConv => { 1 => 'Entire Frame', 2 => 'Background Only' } }, # CSe3 (D6/Z7_2)
789
+ 0x04a => { # CSe4 (D6/Z7_2)
790
+ Name => 'AutoFlashISOSensitivity',
791
+ PrintConv => {
792
+ 1 => 'Subject and Background',
793
+ 2 => 'Subject Only',
794
+ },
795
+ },
796
+ 0x051 => { # CSf3-l (D6)
797
+ Name => 'AssignBktButton',
798
+ PrintConv => {
799
+ 1 => 'Auto Bracketing',
800
+ 2 => 'Multiple Exposure',
801
+ 3 => 'HDR (high dynamic range)',
802
+ 4 => 'None',
803
+ },
804
+ },
805
+ 0x052 => [{ # CSf3-m (D6)
806
+ Name => 'AssignMovieRecordButton',
807
+ PrintConv => {
808
+ 1 => 'Voice Memo',
809
+ 2 => 'Photo Shooting Bank',
810
+ 3 => 'Exposure Mode',
811
+ 4 => 'AF Mode/AF Area Mode',
812
+ 5 => 'Image Area',
813
+ 6 => 'Shutter/Aperture Lock',
814
+ 7 => 'None',
815
+ },
816
+ %infoD6,
817
+ },{ # CSf2-f (Z7_2)
818
+ Name => 'AssignMovieRecordButton',
819
+ PrintConv => {
820
+ 1 => 'AE Lock (hold)',
821
+ 2 => 'AE Lock (reset on release)',
822
+ 3 => 'Preview',
823
+ 4 => '+NEF(RAW)',
824
+ 5 => 'LiveView Info Display On/Off',
825
+ 6 => 'Grid Display',
826
+ 7 => 'Zoom (Low)',
827
+ 8 => 'Zoom (1:1)',
828
+ 9 => 'Zoom (High)',
829
+ 10 => 'My Menu',
830
+ 11 => 'My Menu Top Item',
831
+ 12 => 'Image Area',
832
+ 13 => 'Image Quality',
833
+ 14 => 'White Balance',
834
+ 15 => 'Picture Control',
835
+ 16 => 'Active-D Lighting',
836
+ 17 => 'Metering',
837
+ 18 => 'Flash Mode',
838
+ 19 => 'Focus Mode',
839
+ 20 => 'Auto Bracketing',
840
+ 21 => 'Multiple Exposure',
841
+ 22 => 'HDR',
842
+ 23 => 'Exposure Delay Mode',
843
+ 24 => 'Shutter/Aperture Lock',
844
+ 25 => 'Non-CPU Lens',
845
+ 26 => 'None',
846
+ },
847
+ %infoZ72,
848
+ }],
849
+ 0x053 => [{ # CSf4-a (D6)
850
+ Name => 'MultiSelectorShootMode',
851
+ PrintConv => {
852
+ 1 => 'Select Center Focus Point',
853
+ 2 => 'Preset Focus Point - Press To Recall',
854
+ 3 => 'Preset Focus Point - Hold To Recall',
855
+ 4 => 'None',
856
+ },
857
+ %infoD6,
858
+ },{ # CSf3-a (Z7_2) also called the OK button on this camera
859
+ Name => 'MultiSelectorShootMode',
860
+ PrintConv => {
861
+ 1 => 'Select Center Focus Point',
862
+ 2 => 'Zoom (Low)',
863
+ 3 => 'Zoom (1:1)',
864
+ 4 => 'Zoom (High)',
865
+ 5 => 'None',
866
+ },
867
+ %infoZ72,
868
+ }],
869
+ 0x054 => [{ # CSf4-c (D6)
870
+ Name => 'MultiSelectorPlaybackMode',
871
+ PrintConv => {
872
+ 1 => 'Filtered Playback',
873
+ 2 => 'View Histograms',
874
+ 3 => 'Zoom (Low)',
875
+ 4 => 'Zoom (1:1)',
876
+ 5 => 'Zoom (High)',
877
+ 6 => 'Choose Folder',
878
+ },
879
+ %infoD6,
880
+ },{ # 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.
881
+ Name => 'MultiSelectorPlaybackMode',
882
+ PrintConv => {
883
+ 1 => 'Thumbnail On/Off',
884
+ 2 => 'View Histograms',
885
+ 3 => 'Zoom (Low)',
886
+ 4 => 'Zoom (1:1)',
887
+ 5 => 'Zoom (High)',
888
+ 6 => 'Choose Folder',
889
+ },
890
+ %infoZ72,
891
+ }],
892
+ 0x056 => { # CSf4-b (D6)
893
+ Name => 'MultiSelectorLiveView',
894
+ PrintConv => {
895
+ 1 => 'Select Center Focus Point',
896
+ 2 => 'Zoom (Low)',
897
+ 3 => 'Zoom (1:1)',
898
+ 4 => 'Zoom (High)',
899
+ 5 => 'None',
900
+ },
901
+ },
902
+ 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
903
+ Name => 'CmdDialsReverseRotExposureComp',
904
+ RawConv => '$$self{CmdDialsReverseRotExposureComp} = $val',
905
+ Unknown => 1,
906
+ },
907
+ 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
908
+ Name => 'CmdDialsChangeMainSubExposure',
909
+ RawConv => '$$self{CmdDialsChangeMainSubExposure} = $val',
910
+ Unknown => 1,
911
+ },
912
+ 0x05a => [{ # CSf6-b-1 and CSf6-b-2 (D6), CSf5-b-1 and CSf5-b-2 (Z7_2), (continued from above)
913
+ Name => 'CmdDialsChangeMainSub',
914
+ Condition => '$$self{CmdDialsChangeMainSubExposure} == 1',
915
+ PrintConv => {
916
+ 1 => 'Autofocus On, Exposure On',
917
+ 2 => 'Autofocus Off, Exposure On',
918
+ },
919
+ },{
920
+ Name => 'CmdDialsChangeMainSub',
921
+ Condition => '$$self{CmdDialsChangeMainSubExposure} == 2',
922
+ PrintConv => {
923
+ 1 => 'Autofocus On, Exposure On (Mode A)',
924
+ 2 => 'Autofocus Off, Exposure On (Mode A)',
925
+ },
926
+ },{
927
+ Name => 'CmdDialsChangeMainSub',
928
+ PrintConv => {
929
+ 1 => 'Autofocus On, Exposure Off',
930
+ 2 => 'Autofocus Off, Exposure Off',
931
+ },
932
+ }],
933
+ 0x05b => { Name => 'CmdDialsMenuAndPlayback', PrintConv => { 1 => 'On', 2 => 'On (Image Review Excluded)', 3 => 'Off' } }, # CSf5-c (D6), CSf5-c (Z7_2)
934
+ 0x05c => { # CSf6-d (D6), CSf5-d (Z7_2)
935
+ Name => 'SubDialFrameAdvance',
936
+ PrintConv => {
937
+ 1 => '10 Frames',
938
+ 2 => '50 Frames',
939
+ 3 => 'Rating',
940
+ 4 => 'Protect',
941
+ 5 => 'Stills Only',
942
+ 6 => 'Movies Only',
943
+ 7 => 'Folder',
944
+ },
945
+ },
946
+ 0x05d => { Name => 'ReleaseButtonToUseDial', PrintConv => \%yesNo }, # CSf8 (D6), CSf6 (Z7_2)
947
+ 0x05e => { Name => 'ReverseIndicators', PrintConv => { 1 => '+ 0 -', 2 => '- 0 +' } }, # CSf9 (D6), CSf7 (Z7_2)
948
+ 0x062 => { # CSg2-f (D6), CSg2-e (Z7_2)
949
+ Name => 'MovieShutterButton',
950
+ PrintConv => {
951
+ 1 => 'Take Photo',
952
+ 2 => 'Record Movies',
953
+ },
954
+ },
955
+ 0x063 => { # Settings menu # (D6,Z7_2)
956
+ Name => 'Language',
957
+ PrintConv => {
958
+ 5 => 'English',
959
+ 6 => 'Spanish',
960
+ 8 => 'French',
961
+ 15 => 'Portuguese (Br)',
962
+ },
963
+ },
964
+ 0x06c => [{
965
+ Name => 'ShootingInfoDisplay',
966
+ PrintConv => {
967
+ 1 => 'Auto',
968
+ 2 => 'Manual (dark on light)',
969
+ 3 => 'Manual (light on dark)',
970
+ },
971
+ %infoD6,
972
+ },{
973
+ Name => 'ShootingInfoDisplay',
974
+ PrintConv => {
975
+ 1 => 'Manual (dark on light)',
976
+ 2 => 'Manual (light on dark)',
977
+ },
978
+ %infoZ72,
979
+ }],
980
+ 0x074 => { Name => 'FlickAdvanceDirection', PrintConv => { 1 => 'Right to Left', 2 => 'Left to Right' } }, # CSf12-3 (D6)
981
+ 0x080 => [{
982
+ Name => 'RemoteFuncButton',
983
+ PrintConv => {
984
+ 1 => 'AF-On',
985
+ 2 => 'AF Lock Only',
986
+ 3 => 'AE Lock (reset on release)',
987
+ 4 => 'AE Lock Only',
988
+ 5 => 'AE/AF Lock',
989
+ 6 => 'FV Lock',
990
+ 7 => 'Flash Disable/Enable',
991
+ 8 => 'Preview',
992
+ 9 => '+NEF(RAW)',
993
+ 10 => 'LiveView Info Display On/Off',
994
+ 11 => 'Recall Shooting Functions',
995
+ 12 => 'None',
996
+ },
997
+ %infoD6,
998
+ },{
999
+ Name => 'RemoteFuncButton',
1000
+ PrintConv => {
1001
+ 1 => 'AF-On',
1002
+ 2 => 'AF Lock Only',
1003
+ 3 => 'AE Lock (reset on release)',
1004
+ 4 => 'AE Lock Only',
1005
+ 5 => 'AE/AF Lock',
1006
+ 6 => 'FV Lock',
1007
+ 7 => 'Flash Disable/Enable',
1008
+ 8 => 'Preview',
1009
+ 9 => '+NEF(RAW)',
1010
+ 10 => 'None',
1011
+ 11 => 'LiveView Info Display On/Off',
1012
+ },
1013
+ %infoZ72,
1014
+ }],
1015
+ 0x08b => [{ # CSf6-a-1 and CSf6-a-2 (D6), CSf5-a-1 and CSf5-a-2 (Z7_2), (continued from above)
1016
+ Name => 'CmdDialsReverseRotation',
1017
+ Condition => '$$self{CmdDialsReverseRotExposureComp} == 1',
1018
+ PrintConv => {
1019
+ 1 => 'No',
1020
+ 2 => 'Shutter Speed & Aperture',
1021
+ },
1022
+ },{
1023
+ Name => 'CmdDialsReverseRotation',
1024
+ PrintConv => {
1025
+ 1 => 'Exposure Compensation',
1026
+ 2 => 'Exposure Compensation, Shutter Speed & Aperture',
1027
+ },
1028
+ }],
1029
+ 0x08d => { # CSd10-b (D6), CSd11-b (Z7_2)
1030
+ Name => 'FocusPeakingHighlightColor',
1031
+ PrintConv => {
1032
+ 1 => 'Red',
1033
+ 2 => 'Yellow',
1034
+ 3 => 'Blue',
1035
+ 4 => 'White',
1036
+ },
1037
+ },
1038
+ 0x08e => { Name => 'ContinuousModeDisplay', PrintConv => \%onOff }, # CSd14 (D6), CSd12 (Z7_2)
1039
+ 0x08f => { Name => 'ShutterSpeedLock', PrintConv => \%onOff }, # CSf54-a (D6), CSf4-a (Z7_2)
1040
+ 0x090 => { Name => 'ApertureLock', PrintConv => \%onOff }, # CSf5-b (D6), CSf4-b (Z7_2 could not select)
1041
+ 0x091 => { # CSg4-b (D6), CSg6-b (Z7_2)
1042
+ Name => 'MovieHighlightDisplayThreshold',
1043
+ PrintConv => {
1044
+ 1 => '255',
1045
+ 2 => '248',
1046
+ 3 => '235',
1047
+ 4 => '224',
1048
+ 5 => '213',
1049
+ 6 => '202',
1050
+ 7 => '191',
1051
+ 8 => '180',
1052
+ },
1053
+ },
1054
+ 0x093 => { # CSa3-a (D6), CSa3 (Z7_2)
1055
+ Name => 'BlockShotAFResponse',
1056
+ PrintConv => {
1057
+ 1 => '1 (Quick)',
1058
+ 2 => '2',
1059
+ 3 => '3 (Normal)',
1060
+ 4 => '4',
1061
+ 5 => '5 (Delay)',
1062
+ },
1063
+ },
1064
+ 0x094 => { Name => 'SubjectMotion', PrintConv => { 1 => 'Erratic', 2 => 'Steady' } }, # CSa3-b (D6)
1065
+ 0x095 => { Name => 'Three-DTrackingFaceDetection', PrintConv => \%onOff }, # CSa8 (D6)
1066
+ 0x097 => [{ # CSa5 (D6)
1067
+ Name => 'StoreByOrientation',
1068
+ PrintConv => {
1069
+ 1 => 'Focus Point',
1070
+ 2 => 'Focus Point and AF-area mode',
1071
+ 3 => 'Off',
1072
+ },
1073
+ %infoD6,
1074
+ },{ # CSa5 (Z7_2)
1075
+ Name => 'StoreByOrientation',
1076
+ PrintConv => {
1077
+ 1 => 'Focus Point',
1078
+ 2 => 'Off',
1079
+ },
1080
+ %infoZ72,
1081
+ }],
1082
+ 0x099 => { Name => 'DynamicAreaAFAssist',PrintConv => \%onOff }, # CSa17-c (D6), CSa9-b (Z7_2)
1083
+ 0x09a => { Name => 'ExposureCompStepSize', PrintConv => \%thirdHalfFull }, # CSb3 (D6)
1084
+ 0x09b => { Name => 'SyncReleaseMode', PrintConv => { 1 => 'Sync', 2 => 'No Sync' } }, # CSd4 (D6), CSd3 (Z7_2)
1085
+ 0x09c => { Name => 'ModelingFlash', PrintConv => \%onOff }, # CSe6 (D6), CSe5 (Z7_2)
1086
+ 0x09d => { # CSe7 (D6), CSe6 (Z7_2)
1087
+ Name => 'AutoBracketModeM',
1088
+ PrintConv => {
1089
+ 1 => 'Flash/Speed',
1090
+ 2 => 'Flash/Speed/Aperture',
1091
+ 3 => 'Flash/Aperture',
1092
+ 4 => 'Flash Only',
1093
+ },
1094
+ },
1095
+ 0x09e => { Name => 'PreviewButton', PrintConv => \%previewButtonD6 }, # CSf3-a (D6)
1096
+ 0x0a0 => [{ # CSf3-b (D6)
1097
+ Name => 'Func1Button',
1098
+ PrintConv => \%previewButtonD6,
1099
+ %infoD6,
1100
+ },{ # CSf2-a (Z7_2)
1101
+ Name => 'Func1Button',
1102
+ PrintConv => \%funcButtonZ7m2,
1103
+ %infoZ72,
1104
+ }],
1105
+ 0x0a2 => [{ # CSf3-c (D6)
1106
+ Name => 'Func2Button',
1107
+ PrintConv => \%previewButtonD6,
1108
+ %infoD6,
1109
+ },{ # CSf2-b (Z7_2)
1110
+ Name => 'Func2Button',
1111
+ PrintConv => \%funcButtonZ7m2,
1112
+ %infoZ72,
1113
+ }],
1114
+ 0x0a3 => [{ # CSf3-f (D6)
1115
+ Name => 'AF-OnButton',
1116
+ PrintConv => {
1117
+ 1 => 'AF-AreaMode S',
1118
+ 2 => 'AF-AreaMode D9',
1119
+ 3 => 'AF-AreaMode D25',
1120
+ 4 => 'AF-AreaMode D49',
1121
+ 5 => 'AF-AreaMode D105',
1122
+ 6 => 'AF-AreaMode 3D',
1123
+ 7 => 'AF-AreaMode Group',
1124
+ 8 => 'AF-AreaMode Group C1',
1125
+ 9 => 'AF-AreaMode Group C2',
1126
+ 10 => 'AF-AreaMode Auto Area',
1127
+ 11 => 'AF-AreaMode + AF-On S',
1128
+ 12 => 'AF-AreaMode + AF-On D9',
1129
+ 13 => 'AF-AreaMode + AF-On D25',
1130
+ 14 => 'AF-AreaMode + AF-On D49',
1131
+ 15 => 'AF-AreaMode + AF-On D105',
1132
+ 16 => 'AF-AreaMode + AF-On 3D',
1133
+ 17 => 'AF-AreaMode + AF-On Group',
1134
+ 18 => 'AF-AreaMode + AF-On Group C1',
1135
+ 19 => 'AF-AreaMode + AF-On Group C2',
1136
+ 20 => 'AF-AreaMode + AF-On Auto Area',
1137
+ 21 => 'AF-On',
1138
+ 22 => 'AF Lock Only',
1139
+ 23 => 'AE Lock (hold)',
1140
+ 24 => 'AE/WB Lock (hold)',
1141
+ 25 => 'AE Lock (reset on release)',
1142
+ 26 => 'AE Lock Only',
1143
+ 27 => 'AE/AF Lock',
1144
+ 28 => 'Recall Shooting Functions',
1145
+ 29 => 'None',
1146
+ },
1147
+ %infoD6,
1148
+ },{ # CSf2-c (Z7_2)
1149
+ Name => 'AF-OnButton',
1150
+ PrintConv => {
1151
+ 1 => 'Center Focus Point',
1152
+ 2 => 'AF-On',
1153
+ 3 => 'AF Lock Only',
1154
+ 4 => 'AE Lock (hold)',
1155
+ 5 => 'AE Lock (reset on release)',
1156
+ 6 => 'AE Lock Only',
1157
+ 7 => 'AE/AF Lock',
1158
+ 8 => 'LiveView Info Display On/Off',
1159
+ 9 => 'Zoom (Low)',
1160
+ 10 => 'Zoom (1:1)',
1161
+ 11 => 'Zoom (High)',
1162
+ 12 => 'None'
1163
+ },
1164
+ %infoZ72,
1165
+ }],
1166
+ 0x0a4 => { Name => 'SubSelector', PrintConv => \%tagSubSelector }, # CSf3-g-1 # (D6), CSf2-d-1 # (Z7_2)
1167
+ 0x0a5 => [{ # CSf3-h (D6)
1168
+ Name => 'SubSelectorCenter',
1169
+ PrintConv => {
1170
+ 1 => 'Preset Focus Point - Press To Recall',
1171
+ 2 => 'Preset Focus Point - Hold To Recall',
1172
+ 3 => 'Center Focus Point',
1173
+ 4 => 'AF-AreaMode S',
1174
+ 5 => 'AF-AreaMode D9',
1175
+ 6 => 'AF-AreaMode D25',
1176
+ 7 => 'AF-AreaMode D49',
1177
+ 8 => 'AF-AreaMode D105',
1178
+ 9 => 'AF-AreaMode 3D',
1179
+ 10 => 'AF-AreaMode Group',
1180
+ 11 => 'AF-AreaMode Group C1',
1181
+ 12 => 'AF-AreaMode Group C2',
1182
+ 13 => 'AF-AreaMode Auto Area',
1183
+ 14 => 'AF-AreaMode + AF-On S',
1184
+ 15 => 'AF-AreaMode + AF-On D9',
1185
+ 16 => 'AF-AreaMode + AF-On D25',
1186
+ 17 => 'AF-AreaMode + AF-On D49',
1187
+ 18 => 'AF-AreaMode + AF-On D105',
1188
+ 19 => 'AF-AreaMode + AF-On 3D',
1189
+ 20 => 'AF-AreaMode + AF-On Group',
1190
+ 21 => 'AF-AreaMode + AF-On Group C1',
1191
+ 22 => 'AF-AreaMode + AF-On Group C2',
1192
+ 23 => 'AF-AreaMode + AF-On Auto Area',
1193
+ 24 => 'AF-On',
1194
+ 25 => 'AF Lock Only',
1195
+ 26 => 'AE Lock (hold)',
1196
+ 27 => 'AE/WB Lock (hold)',
1197
+ 28 => 'AE Lock (reset on release)',
1198
+ 29 => 'AE Lock Only',
1199
+ 30 => 'AE/AF Lock',
1200
+ 31 => 'FV Lock',
1201
+ 32 => 'Flash Disable/Enable',
1202
+ 33 => 'Preview',
1203
+ 34 => 'Recall Shooting Functions',
1204
+ 35 => 'Bracketing Burst',
1205
+ 36 => 'Synchronized Release (Master)',
1206
+ 37 => 'Synchronized Release (Remote)',
1207
+ 38 => 'None',
1208
+ },
1209
+ %infoD6,
1210
+ },{ # CSf2-e (Z7_2)
1211
+ Name => 'SubSelectorCenter',
1212
+ PrintConv => {
1213
+ 1 => 'Center Focus Point',
1214
+ 2 => 'AF-On',
1215
+ 3 => 'AF Lock Only',
1216
+ 4 => 'AE Lock (hold)',
1217
+ 5 => 'AE Lock (reset on release)',
1218
+ 6 => 'AE Lock Only',
1219
+ 7 => 'AE/AF Lock',
1220
+ 8 => 'FV Lock',
1221
+ 9 => 'Flash Disable/Enable',
1222
+ 10 => 'Preview',
1223
+ 11 => 'Matrix Metering',
1224
+ 12 => 'Center-weighted Metering',
1225
+ 13 => 'Spot Metering',
1226
+ 14 => 'Highlight-weighted Metering',
1227
+ 15 => 'Bracketing Burst',
1228
+ 16 => 'Synchronized Release (Master)',
1229
+ 17 => 'Synchronized Release (Remote)',
1230
+ 20 => '+NEF(RAW)',
1231
+ 21 => 'LiveView Info Display On/Off',
1232
+ 22 => 'Grid Display',
1233
+ 23 => 'Image Area',
1234
+ 24 => 'Non-CPU Lens',
1235
+ 25 => 'None',
1236
+ },
1237
+ %infoZ72,
1238
+ }],
1239
+ 0x0a7 => [{ # CSf3-n (D6)
1240
+ Name => 'LensFunc1Button',
1241
+ PrintConv => {
1242
+ 1 => 'Preset Focus Point - Press To Recall',
1243
+ 2 => 'Preset Focus Point - Hold To Recall',
1244
+ 3 => 'AF-AreaMode S',
1245
+ 4 => 'AF-AreaMode D9',
1246
+ 5 => 'AF-AreaMode D25',
1247
+ 6 => 'AF-AreaMode D49',
1248
+ 7 => 'AF-AreaMode D105',
1249
+ 8 => 'AF-AreaMode 3D',
1250
+ 9 => 'AF-AreaMode Group',
1251
+ 10 => 'AF-AreaMode Group C1',
1252
+ 11 => 'AF-AreaMode Group C2',
1253
+ 12 => 'AF-AreaMode Auto Area',
1254
+ 13 => 'AF-AreaMode + AF-On S',
1255
+ 14 => 'AF-AreaMode + AF-On D9',
1256
+ 15 => 'AF-AreaMode + AF-On D25',
1257
+ 16 => 'AF-AreaMode + AF-On D49',
1258
+ 17 => 'AF-AreaMode + AF-On D105',
1259
+ 18 => 'AF-AreaMode + AF-On 3D',
1260
+ 19 => 'AF-AreaMode + AF-On Group',
1261
+ 20 => 'AF-AreaMode + AF-On Group C1',
1262
+ 21 => 'AF-AreaMode + AF-On Group C2',
1263
+ 22 => 'AF-AreaMode + AF-On Auto Area',
1264
+ 23 => 'AF-On',
1265
+ 24 => 'AF Lock Only',
1266
+ 25 => 'AE Lock Only',
1267
+ 26 => 'AE/AF Lock',
1268
+ 27 => 'Flash Disable/Enable',
1269
+ 28 => 'Recall Shooting Functions',
1270
+ 29 => 'Synchronized Release (Master)',
1271
+ 30 => 'Synchronized Release (Remote)',
1272
+ },
1273
+ %infoD6,
1274
+ },{ # CSf2-g (Z7_2)
1275
+ Name => 'LensFunc1Button',
1276
+ PrintConv => \%lensFuncButtonZ7m2,
1277
+ %infoZ72,
1278
+ }],
1279
+ 0x0a8 => { Name => 'CmdDialsApertureSetting', PrintConv => { 1 => 'Sub-command Dial', 2 => 'Aperture Ring' } }, # CSf6-c (D6)
1280
+ 0x0a9 => { Name => 'MultiSelector', PrintConv => \%tagMultiSelector }, # CSf7 (D6)
1281
+ 0x0aa => { # CSf10 (D6)
1282
+ Name => 'LiveViewButtonOptions',
1283
+ PrintConv => {
1284
+ 1 => 'Enable',
1285
+ 2 => 'Enable (Standby Timer Active)',
1286
+ 3 => 'Disable',
1287
+ },
1288
+ },
1289
+ 0x0ab => { # CSf11 (D6)
1290
+ Name => 'LightSwitch',
1291
+ PrintConv => {
1292
+ 1 => 'LCD Backlight',
1293
+ 2 => 'LCD Backlight and Shooting Information',
1294
+ },
1295
+ },
1296
+ 0x0b1 => [{ # CSg2-a (D6)
1297
+ Name => 'MoviePreviewButton',
1298
+ PrintConv => {
1299
+ 1 => 'Power Aperture (Open)',
1300
+ 2 => 'Exposure Compensation',
1301
+ 3 => 'Grid Display',
1302
+ 4 => 'Zoom (Low)',
1303
+ 5 => 'Zoom (1:1)',
1304
+ 6 => 'Zoom (High)',
1305
+ 7 => 'Image Area',
1306
+ 8 => 'Microphone Sensitivity',
1307
+ 9 => 'None',
1308
+ },
1309
+ %infoD6,
1310
+ },{ # CSg2-a (Z7_2)
1311
+ Name => 'MovieFunc1Button',
1312
+ PrintConv => {
1313
+ 1 => 'Power Aperture (Open)',
1314
+ 2 => 'Exposure Compensation',
1315
+ 3 => 'Subject Tracking',
1316
+ 4 => 'LiveView Info Display On/Off)',
1317
+ 5 => 'Grid Display',
1318
+ 6 => 'Zoom (Low)',
1319
+ 7 => 'Zoom (1:1)',
1320
+ 8 => 'Zoom (High)',
1321
+ 9 => 'Protect',
1322
+ 10 => 'Image Area',
1323
+ 11 => 'White Balance',
1324
+ 12 => 'Picture Control',
1325
+ 13 => 'Active-D Lighting',
1326
+ 14 => 'Metering',
1327
+ 15 => 'Focus Mode',
1328
+ 16 => 'Microphone Sensitivity',
1329
+ 17 => 'Focus Peaking',
1330
+ 18 => 'Rating (None)',
1331
+ 19 => 'Rating (5)',
1332
+ 20 => 'Rating (4)',
1333
+ 21 => 'Rating (3)',
1334
+ 22 => 'Rating (2)',
1335
+ 23 => 'Rating (1)', # no mapping for 24 on the Z7_2. Possibly intended for Rating = 'Candidate for Deletion'?
1336
+ 25 => 'None',
1337
+ },
1338
+ %infoZ72,
1339
+ }],
1340
+ 0x0b3 => [{ # CSg2-b (D6)
1341
+ Name => 'MovieFunc1Button',
1342
+ PrintConv => {
1343
+ 1 => 'Power Aperture (Close)',
1344
+ 2 => 'Exposure Compensation',
1345
+ 3 => 'Grid Display',
1346
+ 4 => 'Zoom (Low)',
1347
+ 5 => 'Zoom (1:1)',
1348
+ 6 => 'Zoom (High)',
1349
+ 7 => 'Image Area',
1350
+ 8 => 'Microphone Sensitivity',
1351
+ 9 => 'None',
1352
+ },
1353
+ %infoD6,
1354
+ },{ # CSg2-b (Z7_2)
1355
+ Name => 'MovieFunc2Button',
1356
+ PrintConv => { # TODO: simplify Func1 and Func2 movies buttons - identical except for the 1st entry
1357
+ 1 => 'Power Aperture (Close)',
1358
+ 2 => 'Exposure Compensation',
1359
+ 3 => 'Subject Tracking',
1360
+ 4 => 'LiveView Info Display On/Off)',
1361
+ 5 => 'Grid Display',
1362
+ 6 => 'Zoom (Low)',
1363
+ 7 => 'Zoom (1:1)',
1364
+ 8 => 'Zoom (High)',
1365
+ 9 => 'Protect',
1366
+ 10 => 'Image Area',
1367
+ 11 => 'White Balance',
1368
+ 12 => 'Picture Control',
1369
+ 13 => 'Active-D Lighting',
1370
+ 14 => 'Metering',
1371
+ 15 => 'Focus Mode',
1372
+ 16 => 'Microphone Sensitivity',
1373
+ 17 => 'Focus Peaking',
1374
+ 18 => 'Rating (None)',
1375
+ 19 => 'Rating (5)',
1376
+ 20 => 'Rating (4)',
1377
+ 21 => 'Rating (3)',
1378
+ 22 => 'Rating (2)',
1379
+ 23 => 'Rating (1)', # no mapping for 24 on the Z7_2. Possibly intended for Rating = 'Candidate for Deletion'?
1380
+ 25 => 'None',
1381
+ },
1382
+ %infoZ72,
1383
+ }],
1384
+ 0x0b5 => { # CSg2-c (D6)
1385
+ Name => 'MovieFunc2Button',
1386
+ PrintConv => {
1387
+ 1 => 'Grid Display',
1388
+ 2 => 'Zoom (Low)',
1389
+ 3 => 'Zoom (1:1)',
1390
+ 4 => 'Zoom (High)',
1391
+ 5 => 'Image Area',
1392
+ 6 => 'Microphone Sensitivity',
1393
+ 7 => 'None',
1394
+ },
1395
+ },
1396
+ 0x0b6 => [{ # CSg2-e (D6)
1397
+ Name => 'AssignMovieSubselector',
1398
+ PrintConv => {
1399
+ 1 => 'Center Focus Point',
1400
+ 2 => 'AF Lock Only',
1401
+ 3 => 'AE Lock (hold)',
1402
+ 4 => 'AE/WB Lock (hold)',
1403
+ 5 => 'AE Lock Only',
1404
+ 6 => 'AE/AF Lock',
1405
+ 7 => 'Zoom (Low)',
1406
+ 8 => 'Zoom (1:1)',
1407
+ 9 => 'Zoom (High)',
1408
+ 10 => 'Record Movies',
1409
+ 11 => 'None',
1410
+ },
1411
+ %infoD6,
1412
+ },{ # CSg2-d (Z7_2)
1413
+ Name => 'AssignMovieSubselector',
1414
+ PrintConv => {
1415
+ 1 => 'Center Focus Point',
1416
+ 2 => 'AF Lock Only',
1417
+ 3 => 'AE Lock (hold)',
1418
+ 4 => 'AE Lock Only',
1419
+ 5 => 'AE/AF Lock',
1420
+ 6 => 'LiveView Info Display On/Off',
1421
+ 7 => 'Grid Display',
1422
+ 8 => 'Zoom (Low)',
1423
+ 9 => 'Zoom (1:1)',
1424
+ 10 => 'Zoom (High)',
1425
+ 11 => 'Record Movies',
1426
+ 12 => 'Image Area',
1427
+ 13 => 'None',
1428
+ },
1429
+ %infoZ72,
1430
+ }],
1431
+ 0x0b8 => { Name => 'LimitAFAreaModeSelD9', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa14-a (D6)
1432
+ 0x0b9 => { Name => 'LimitAFAreaModeSelD25', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa14-b (D6)
1433
+ 0x0bc => { Name => 'LimitAFAreaModeSel3D', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa14-e (D6)
1434
+ 0x0bd => { Name => 'LimitAFAreaModeSelGroup', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa14-f (D6)
1435
+ 0x0be => { Name => 'LimitAFAreaModeSelAuto', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa14-i (D6), CSa7-g (Z7_2)
1436
+ # 0x0bf => { Name => 'LimitSelectableImageArea30x20', PrintConv => \%limitNolimit }, # CSd8-1 (D6) further investigation & testing of CSd8-1 and CSd8-2 required. The other CSd8 tags are fine.
1437
+ # 0x0c0 => { Name => 'LimitSelectableImageAreaDX', PrintConv => \%limitNolimit }, # CSd8-2 (D6) further investigation & testing of CSd8-1 and CSd8-2 required. The other CSd8 tags are fine.
1438
+ 0x0c1 => { Name => 'LimitSelectableImageArea5To4', PrintConv => \%limitNolimit, Unknown => 1 }, # CSd8-3 (D6)
1439
+ 0x0c2 => { Name => 'LimitSelectableImageArea1To1', PrintConv => \%limitNolimit, Unknown => 1 }, # CSd8-4 (D6)
1440
+ # 0x0d3 => CSf3-g-2 (D6), CSf2-d-2 (Z7_2) SelectorPlaybackRole 'Scroll' and 'Display Next/Previous' (skipped to reduce volume of output)
1441
+ 0x0d4 => { Name => 'PhotoShootingMenuBank', PrintConv => \%menuBank }, # (D6)
1442
+ 0x0d5 => { Name => 'CustomSettingsBank', PrintConv => \%menuBank }, # (D6)
1443
+ 0x0d6 => { Name => 'LimitAF-AreaModeSelPinpoint', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa7-a (Z7_2)
1444
+ 0x0d7 => { Name => 'LimitAF-AreaModeSelDynamic', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa7-b (Z7_2)
1445
+ 0x0d8 => { Name => 'LimitAF-AreaModeSelWideAF_S', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa7-c (Z7_2)
1446
+ 0x0d9 => { Name => 'LimitAF-AreaModeSelWideAF_L', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa7-d (Z7_2)
1447
+ 0x0da => { Name => 'LowLightAF', PrintConv => \%onOff }, # CSa10 (Z7_2)
1448
+ 0x0db => { Name => 'LimitSelectableImageAreaDX', PrintConv => \%limitNolimit, Unknown => 1 }, # CSd7-a (Z7_2)
1449
+ 0x0dc => { Name => 'LimitSelectableImageArea5To4', PrintConv => \%limitNolimit, Unknown => 1 }, # CSd7-b (Z7_2)
1450
+ 0x0dd => { Name => 'LimitSelectableImageArea1To1', PrintConv => \%limitNolimit, Unknown => 1 }, # CSd7-c (Z7_2)
1451
+ 0x0de => { Name => 'LimitSelectableImageArea16To9', PrintConv => \%limitNolimit, Unknown => 1 }, # CSd7-d (Z7_2)
1452
+ 0x0df => { Name => 'ApplySettingsToLiveView', PrintConv => \%onOff }, # CSd9 # new tag with Z7_2 # (Z7_2)
1453
+ 0x0e0 => { # CSd10-a (D6), CSd11-a (Z7_2)
1454
+ Name => 'FocusPeakingLevel',
1455
+ PrintConv => {
1456
+ 1 => 'High Sensitivity',
1457
+ 2 => 'Standard Sensitivity',
1458
+ 3 => 'Low Sensitivity',
1459
+ 4 => 'Off',
1460
+ },
1461
+ },
1462
+ 0x0e9 => { # CSf2-i # need to confirm with a Z series lens # (Z7_2)
1463
+ Name => 'LensControlRing',
1464
+ PrintConv => {
1465
+ 1 => 'Focus (M/A)',
1466
+ 2 => 'Aperture',
1467
+ 3 => 'Exposure Compensation',
1468
+ 4 => 'ISO Sensitivity',
1469
+ 5 => 'None (Disabled)',
1470
+ },
1471
+ },
1472
+ # 0x0eb MovieLensControlRing ? # (Z7_2)
1473
+ # 0x0ec # (Z7_2)
1474
+ 0x0ed => [{ # CSg3 (D6)
1475
+ Name => 'MovieMultiSelector',
1476
+ PrintConv => {
1477
+ 1 => 'Center Focus Point',
1478
+ 2 => 'Zoom (Low)',
1479
+ 3 => 'Zoom (1:1)',
1480
+ 4 => 'Zoom (High)',
1481
+ 5 => 'Record Movies',
1482
+ 6 => 'None',
1483
+ },
1484
+ %infoD6,
1485
+ },{ # labels Ok button on camera # (Z7_2)
1486
+ Name => 'MovieMultiSelector',
1487
+ 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].
1488
+ 1 => 'Center Focus Point',
1489
+ 2 => 'Zoom (Low)',
1490
+ 3 => 'Zoom (1:1)',
1491
+ 4 => 'Zoom (High)',
1492
+ 5 => 'Record Movies',
1493
+ 6 => 'None',
1494
+ },
1495
+ }],
1496
+ 0x0ee => { Name => 'MovieAFSpeed', ValueConv => '$val - 6', ValueConvInv => '$val + 6' }, # CSg4-a (Z7_2)
1497
+ 0x0ef => { # CSg4-b (Z7_2)
1498
+ Name => 'MovieAFSpeedApply',
1499
+ PrintConv => {
1500
+ 1 => 'Always',
1501
+ 2 => 'Only During Recording',
1502
+ },
1503
+ },
1504
+ 0x0f0 => { # CSg5 (Z7_2)
1505
+ Name => 'MovieAFTrackingSensitivity',
1506
+ PrintConv => {
1507
+ 1 => '1 (High)',
1508
+ 2 => '2',
1509
+ 3 => '3',
1510
+ 4 => '4 (Normal)',
1511
+ 5 => '5',
1512
+ 6 => '6',
1513
+ 7 => '7 (Low)',
1514
+ },
1515
+ },
1516
+ 0x0f1 => { # CSg4-a (D6), CSg6-a (Z7_2)
1517
+ Name => 'MovieHighlightDisplayPattern',
1518
+ PrintConv => {
1519
+ 1 => 'Pattern 1',
1520
+ 2 => 'Pattern 2',
1521
+ 3 => 'Off',
1522
+ },
1523
+ },
1524
+ 0x0f2 => { Name => 'SubDialFrameAdvanceRating5', PrintConv => \%noYes, Unknown => 1 }, # (D6,Z7_2)
1525
+ 0x0f3 => { Name => 'SubDialFrameAdvanceRating4', PrintConv => \%noYes, Unknown => 1 }, # (D6,Z7_2)
1526
+ 0x0f4 => { Name => 'SubDialFrameAdvanceRating3', PrintConv => \%noYes, Unknown => 1 }, # (D6,Z7_2)
1527
+ 0x0f5 => { Name => 'SubDialFrameAdvanceRating2', PrintConv => \%noYes, Unknown => 1 }, # (D6,Z7_2)
1528
+ 0x0f6 => { Name => 'SubDialFrameAdvanceRating1', PrintConv => \%noYes, Unknown => 1 }, # (D6,Z7_2)
1529
+ 0x0f7 => { Name => 'SubDialFrameAdvanceRating0', PrintConv => \%noYes, Unknown => 1 }, # (D6,Z7_2)
1530
+ # 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)
1531
+ 0x0f9 => { # CSg2-c (Z7_2)
1532
+ Name => 'MovieAF-OnButton',
1533
+ PrintConv => {
1534
+ 1 => 'Center Focus Point',
1535
+ 2 => 'AF-On',
1536
+ 3 => 'AF Lock Only',
1537
+ 4 => 'AE Lock (hold)',
1538
+ 5 => 'AE Lock Only',
1539
+ 6 => 'AE/AF Lock',
1540
+ 7 => 'LiveView Info Display On/Off',
1541
+ 8 => 'Zoom (Low)',
1542
+ 9 => 'Zoom (1:1)',
1543
+ 10 => 'Zoom (High)',
1544
+ 11 => 'Record Movies',
1545
+ 12 => 'None',
1546
+ },
1547
+ },
1548
+ 0x0fb => { Name => 'SecondarySlotFunction', PrintConv => \%tagSecondarySlotFunction }, # tag name selected to maintain compatibility with older cameras # (Z7_2)
1549
+ 0x0fb => { Name => 'SecondarySlotFunction', PrintConv => \%tagSecondarySlotFunction }, # (D6)
1550
+ 0x0fc => { Name => 'SilentPhotography', PrintConv => \%onOff }, # (D6,Z7_2) # tag is associated with Silent LiveView Photography (as distinguisehed from Silent Interval or Silent Focus Shift)
1551
+ 0x0fd => { Name => 'ExtendedShutterSpeeds', PrintConv => \%onOff }, # CSd7 (D6), CSd6 (Z7_2)
1552
+ 0x109 => { # (D6,Z7_2)
1553
+ Name => 'BracketSet',
1554
+ RawConv => '$$self{BracketSet} = $val',
1555
+ PrintConv => {
1556
+ 1 => 'AE/Flash',
1557
+ 2 => 'AE',
1558
+ 3 => 'Flash',
1559
+ 4 => 'White Balance',
1560
+ 5 => 'Active-D Lighting',
1561
+ },
1562
+ },
1563
+ 0x10a => [{ # (D6/Z7_2)
1564
+ Name => 'BracketProgram',
1565
+ Condition => '$$self{BracketSet} < 4',
1566
+ Notes => 'AE and/or Flash Bracketing',
1567
+ RawConv => '$$self{BracketProgram} = $val',
1568
+ PrintConv => {
1569
+ 15 => '+3F',
1570
+ 16 => '-3F',
1571
+ 17 => '+2F',
1572
+ 18 => '-2F',
1573
+ 19 => 'Disabled',
1574
+ 20 => '3F',
1575
+ 21 => '5F',
1576
+ 22 => '7F',
1577
+ 23 => '9F',
1578
+ },
1579
+ },{
1580
+ Name => 'BracketProgram',
1581
+ Condition => '$$self{BracketSet} == 4',
1582
+ Notes => 'White Balance Bracketing',
1583
+ RawConv => '$$self{BracketProgram} = $val',
1584
+ PrintConv => {
1585
+ 1 => 'B3F',
1586
+ 2 => 'A3F',
1587
+ 3 => 'B2F',
1588
+ 4 => 'A2F',
1589
+ 5 => 'Disabled',
1590
+ 6 => '3F',
1591
+ 7 => '5F',
1592
+ 8 => '7F',
1593
+ 9 => '9F',
1594
+ 19 => 'N/A' # observed when shooting other than JPG
1595
+ },
1596
+ },{
1597
+ Name => 'BracketProgram',
1598
+ Condition => '$$self{BracketSet} == 5',
1599
+ Notes => 'Active-D Bracketing',
1600
+ RawConv => '$$self{BracketProgram} = $val',
1601
+ Mask => 0x0f,
1602
+ PrintConv => {
1603
+ 10 => 'Disabled',
1604
+ 11 => '2 Exposures',
1605
+ 12 => '3 Exposures',
1606
+ 13 => '4 Exposures',
1607
+ 14 => '5 Exposures',
1608
+ },
1609
+ }],
1610
+ 0x10b => [{ # (D6/Z7_2)
1611
+ Name => 'BracketIncrement',
1612
+ Condition => '$$self{BracketSet} < 4 and $$self{BracketProgram} ne 19',
1613
+ Notes => 'AE and/or Flash Bracketing enabled',
1614
+ PrintConv => {
1615
+ 0x01 => '0.3',
1616
+ 0x03 => '0.5',
1617
+ 0x04 => '1.0',
1618
+ 0x05 => '2.0',
1619
+ 0x06 => '3.0',
1620
+ },
1621
+ },{
1622
+ Name => 'BracketIncrement',
1623
+ Condition => '$$self{BracketSet} == 4 and $$self{BracketProgram} ne 5',
1624
+ Notes => 'White Balance Bracketing enabled',
1625
+ PrintConv => '$val-6', # TODO: qualify amber/blue direction of increment (eg, '1A' vs.'1B' vs '1A,1B')
1626
+ }],
1627
+ 0x10c => { # (D6/Z7_2)
1628
+ Name => 'BracketIncrement',
1629
+ Condition => '$$self{BracketSet} == 5 and $$self{BracketProgram} ne 10',
1630
+ Notes => 'Active-D Bracketing enabled',
1631
+ PrintConv => {
1632
+ 0 => 'Off',
1633
+ 1 => 'Off, Low',
1634
+ 2 => 'Off, Normal',
1635
+ 3 => 'Off, High',
1636
+ 4 => 'Off, Extra High',
1637
+ 5 => 'Off, Auto',
1638
+ 6 => 'Off, Low, Normal',
1639
+ 7 => 'Off, Low, Normal, High',
1640
+ 8 => 'Off, Low, Normal, High, Extra High',
1641
+ },
1642
+ },
1643
+ 0x116 => { Name => 'GroupAreaC1', PrintConv =>\%groupAreaCustom }, # CSa10-a (new with D6) # (D6)
1644
+ 0x117 => { Name => 'AutoAreaAFStartingPoint', PrintConv => \%enableDisable }, # CSa12 (D6)
1645
+ 0x118 => { Name => 'FocusPointPersistence', PrintConv => { 1 => 'Auto', 2 => 'Off' } }, # CSa13 (new with D6) # (D6)
1646
+ 0x119 => { Name => 'LimitAFAreaModeSelD49', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa14-c (D6)
1647
+ 0x11a => { Name => 'LimitAFAreaModeSelD105', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa14-d (D6)
1648
+ 0x11b => { Name => 'LimitAFAreaModeSelGroupC1', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa14-g (D6)
1649
+ 0x11c => { Name => 'LimitAFAreaModeSelGroupC2', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa14-h (D6)
1650
+ 0x11d => { # CSa15 (D6)
1651
+ Name => 'AutoFocusModeRestrictions',
1652
+ PrintConv => {
1653
+ 1 => 'AF-S',
1654
+ 2 => 'AF-C',
1655
+ 3 => 'No Limit',
1656
+ },
1657
+ },
1658
+ 0x11e => { # CSa17-b (D6)
1659
+ Name => 'FocusPointBrightness',
1660
+ PrintConv => {
1661
+ 1 => 'Extra High',
1662
+ 2 => 'High',
1663
+ 3 => 'Normal',
1664
+ 4 => 'Low',
1665
+ },
1666
+ },
1667
+ 0x11f => { Name => 'CHModeShootingSpeed', ValueConv => '15 - $val', ValueConvInv => '15 + $val', PrintConv => '"$val fps"', PrintConvInv => '$val=~s/\s*fps//i; $val' }, # CSd1-a (D6)
1668
+ 0x120 => { Name => 'CLModeShootingSpeed', ValueConv => '11 - $val', ValueConvInv => '11 + $val', PrintConv => '"$val fps"', PrintConvInv => '$val=~s/\s*fps//i; $val' }, # CSd1-b (D6)
1669
+ 0x121 => { # CSd1-c (new with D6)
1670
+ Name => 'QuietShutterShootingSpeed',
1671
+ PrintConv => {
1672
+ 1 => 'Single',
1673
+ 2 => '5 fps',
1674
+ 3 => '4 fps',
1675
+ 4 => '3 fps',
1676
+ 5 => '2 fps',
1677
+ 6 => '1 fps',
1678
+ },
1679
+ },
1680
+ 0x122 => { Name => 'LimitReleaseModeSelCL', PrintConv => \%limtReleaseModeSel, Unknown => 1 }, # CSd3-a (D6)
1681
+ 0x123 => { Name => 'LimitReleaseModeSelCH', PrintConv => \%limtReleaseModeSel, Unknown => 1 }, # CSd3-b (D6)
1682
+ 0x124 => { Name => 'LimitReleaseModeSelQ', PrintConv => \%limtReleaseModeSel, Unknown => 1 }, # CSd3-c (D6)
1683
+ 0x125 => { Name => 'LimitReleaseModeSelTimer', PrintConv => \%limtReleaseModeSel, Unknown => 1 }, # CSd3-d (D6)
1684
+ 0x126 => { Name => 'LimitReleaseModeSelMirror-Up', PrintConv => \%limtReleaseModeSel, Unknown => 1 }, # CSd3-e (D6)
1685
+ 0x127 => { Name => 'LimitSelectableImageArea16To9', PrintConv => \%limitNolimit, Unknown => 1 }, # CSd8-5 (D6)
1686
+ 0x128 => { Name => 'RearControPanelDisplay', PrintConv => { 1 => 'Release Mode', 2 => 'Frame Count' } }, # CSd12 # new tag with D6 # (D6)
1687
+ 0x129 => { Name => 'FlashBurstPriority', PrintConv => { 1 => 'Frame Rate', 2 => 'Exposure' } }, # CSE5 # new tag with D6 # (D6)
1688
+ 0x12a => { Name => 'RecallShootFuncExposureMode', PrintConv => \%offOn }, # (D6)
1689
+ 0x12b => { Name => 'RecallShootFuncShutterSpeed', PrintConv => \%offOn }, # (D6)
1690
+ 0x12c => { Name => 'RecallShootFuncAperture', PrintConv => \%offOn }, # (D6)
1691
+ 0x12d => { Name => 'RecallShootFuncExposureComp', PrintConv => \%offOn }, # (D6)
1692
+ 0x12e => { Name => 'RecallShootFuncISO', PrintConv => \%offOn }, # (D6)
1693
+ 0x12f => { Name => 'RecallShootFuncMeteringMode', PrintConv => \%offOn }, # (D6)
1694
+ 0x130 => { Name => 'RecallShootFuncWhiteBalance', PrintConv => \%offOn }, # (D6)
1695
+ 0x131 => { Name => 'RecallShootFuncAFAreaMode', PrintConv => \%offOn }, # (D6)
1696
+ 0x132 => { Name => 'RecallShootFuncFocusTracking', PrintConv => \%offOn }, # (D6)
1697
+ 0x133 => { Name => 'RecallShootFuncAF-On', PrintConv => \%offOn }, # (D6)
1698
+ 0x134 => { # CSf3-d (D6)
1699
+ Name => 'VerticalFuncButton',
1700
+ PrintConv => {
1701
+ 1 => 'Preset Focus Point',
1702
+ 2 => 'AE Lock (hold)',
1703
+ 3 => 'AE/WB Lock (hold)',
1704
+ 4 => 'AE Lock (reset on release)',
1705
+ 5 => 'FV Lock',
1706
+ 6 => 'Preview',
1707
+ 7 => '+NEF(RAW)',
1708
+ 8 => 'Grid Display',
1709
+ 9 => 'Virtual Horizon',
1710
+ 10 => 'Voice Memo',
1711
+ 11 => 'Playback',
1712
+ 12 => 'Filtered Playback',
1713
+ 13 => 'Photo Shooting Bank',
1714
+ 14 => 'Exposure Mode',
1715
+ 15 => 'Exposure Comp',
1716
+ 16 => 'AF Mode/AF Area Mode',
1717
+ 17 => 'Image Area',
1718
+ 18 => 'ISO',
1719
+ 19 => 'Active-D Lighting',
1720
+ 20 => 'Metering',
1721
+ 21 => 'Exposure Delay Mode',
1722
+ 22 => 'Shutter/Aperture Lock',
1723
+ 23 => '1 Stop Speed/Aperture',
1724
+ 24 => 'Rating 0',
1725
+ 25 => 'Rating 5',
1726
+ 26 => 'Rating 4',
1727
+ 27 => 'Rating 3',
1728
+ 28 => 'Rating 2',
1729
+ 29 => 'Rating 1',
1730
+ 30 => 'Candidate For Deletion',
1731
+ 31 => 'Non-CPU Lens',
1732
+ 32 => 'None',
1733
+ },
1734
+ },
1735
+ 0x135 => { # CSf3-e (D6)
1736
+ Name => 'Func3Button',
1737
+ PrintConv => {
1738
+ 1 => 'Voice Memo',
1739
+ 2 => 'Select To Send',
1740
+ 3 => 'Wired LAN',
1741
+ 4 => 'My Menu',
1742
+ 5 => 'My Menu Top Item',
1743
+ 6 => 'Filtered Playback',
1744
+ 7 => 'Rating 0',
1745
+ 8 => 'Rating 5',
1746
+ 9 => 'Rating 4',
1747
+ 10 => 'Rating 3',
1748
+ 11 => 'Rating 2',
1749
+ 12 => 'Rating 1',
1750
+ 13 => 'Candidate For Deletion',
1751
+ 14 => 'None',
1752
+ },
1753
+ },
1754
+ 0x136 => { # CSf3-i (D6)
1755
+ Name => 'VerticalAF-OnButton',
1756
+ PrintConv => {
1757
+ 1 => 'AF-AreaMode S',
1758
+ 2 => 'AF-AreaMode D9',
1759
+ 3 => 'AF-AreaMode D25',
1760
+ 4 => 'AF-AreaMode D49',
1761
+ 5 => 'AF-AreaMode D105',
1762
+ 6 => 'AF-AreaMode 3D',
1763
+ 7 => 'AF-AreaMode Group',
1764
+ 8 => 'AF-AreaMode Group C1',
1765
+ 9 => 'AF-AreaMode Group C2',
1766
+ 10 => 'AF-AreaMode Auto Area',
1767
+ 11 => 'AF-AreaMode + AF-On S',
1768
+ 12 => 'AF-AreaMode + AF-On D9',
1769
+ 13 => 'AF-AreaMode + AF-On D25',
1770
+ 14 => 'AF-AreaMode + AF-On D49',
1771
+ 15 => 'AF-AreaMode + AF-On D105',
1772
+ 16 => 'AF-AreaMode + AF-On 3D',
1773
+ 17 => 'AF-AreaMode + AF-On Group',
1774
+ 18 => 'AF-AreaMode + AF-On Group C1',
1775
+ 19 => 'AF-AreaMode + AF-On Group C2',
1776
+ 20 => 'AF-AreaMode + AF-On Auto Area',
1777
+ 21 => 'Same as AF-On',
1778
+ 22 => 'AF-On',
1779
+ 23 => 'AF Lock Only',
1780
+ 24 => 'AE Lock (hold)',
1781
+ 25 => 'AE/WB Lock (hold)',
1782
+ 26 => 'AE Lock (reset on release)',
1783
+ 27 => 'AE Lock Only',
1784
+ 28 => 'AE/AF Lock',
1785
+ 29 => 'Recall Shooting Functions',
1786
+ 30 => 'None',
1787
+ },
1788
+ },
1789
+ 0x137 => { Name => 'VerticalMultiSelector', PrintConv => \%tagSubSelector }, # CSf3-j-1 # (D6)
1790
+ 0x138 => { # CSf3-k (D6)
1791
+ Name => 'MeteringButton',
1792
+ PrintConv => {
1793
+ 1 => 'Photo Shooting Bank',
1794
+ 2 => 'Image Area',
1795
+ 3 => 'Active-D Lighting',
1796
+ 4 => 'Metering',
1797
+ 5 => 'Exposure Delay Mode',
1798
+ 6 => 'Shutter/Aperture Lock',
1799
+ 7 => '1 Stop Speed/Aperture',
1800
+ 8 => 'Non-CPU Lens',
1801
+ 9 => 'None',
1802
+ },
1803
+ },
1804
+ 0x139 => { Name => 'PlaybackFlickUp', RawConv => '$$self{PlaybackFlickUp} = $val', PrintConv => \%flickUpDownD6 }, # CSf12-1-a # (D6)
1805
+ 0x13a => { Name => 'PlaybackFlickUpRating', Condition => '$$self{PlaybackFlickUp} == 1', Notes => 'Meaningful only when PlaybackFlickUp is Rating', PrintConv => \%flickUpDownRatingD6 }, # CSf12-1-b # (D6)
1806
+ 0x13b => { Name => 'PlaybackFlickDown', RawConv => '$$self{PlaybackFlickDown} = $val', PrintConv => \%flickUpDownD6 }, # CSf12-2-a # (D6)
1807
+ 0x13c => { Name => 'PlaybackFlickDownRating', Condition => '$$self{PlaybackFlickDown} == 1', Notes => 'Meaningful only when PlaybackFlickDown is Rating', PrintConv => \%flickUpDownRatingD6 }, # CSf12-2-b # (D6)
1808
+ 0x13d => { # CSg2-d (D6)
1809
+ Name => 'MovieFunc3Button',
1810
+ PrintConv => {
1811
+ 1 => 'Record Movies',
1812
+ 2 => 'My Menu',
1813
+ 3 => 'My Menu Top Item',
1814
+ 4 => 'None',
1815
+ },
1816
+ },
1817
+ 0x150 => { # CSd5 (Z7_2) new with Z series
1818
+ Name => 'ShutterType',
1819
+ PrintConv => {
1820
+ 1 => 'Auto',
1821
+ 2 => 'Mechanical',
1822
+ 3 => 'Electronic',
1823
+ },
1824
+ },
1825
+ 0x151 => { Name => 'LensFunc2Button', PrintConv => \%lensFuncButtonZ7m2 }, # CSf2-h (Z7_2)
1826
+ 0x158 => { Name => 'USBPowerDelivery', PrintConv => \%enableDisable }, # (Z7_2)
1827
+ 0x15b => { Name => 'GroupAreaC2', PrintConv =>\%groupAreaCustom }, # CSa10-b (new with D6) # (D6)
1828
+ 0x15c => { Name => 'BracketingBurstOptions',PrintConv => \%enableDisable }, # CSe9 (D6)
1829
+ # 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)
1830
+ 0x15e => { Name => 'PrimarySlot', PrintConv => { 1 => 'CFexpress/XQD Card', 2 => 'SD Card' } }, # (Z7_2)
1831
+ 0x15f => { Name => 'ReverseFocusRing', PrintConv => { 1 => 'Not Reversed', 2 => 'Reversed' } }, # CSf8 (Z7_2)
1832
+ 0x160 => { # CSf9-a (Z7_2)
1833
+ Name => 'VerticalFuncButton',
1834
+ PrintConv => {
1835
+ 1 => 'AE Lock (hold)',
1836
+ 2 => 'AE Lock (reset on release)',
1837
+ 3 => 'FV Lock',
1838
+ 4 => 'Preview',
1839
+ 5 => '+NEF(RAW)',
1840
+ 6 => 'Subject Tracking',
1841
+ 7 => 'Silent Photography',
1842
+ 8 => 'LiveView Info Display On/Off',
1843
+ 9 => 'Playback',
1844
+ 10 => 'Image Area',
1845
+ 11 => 'Metering',
1846
+ 12 => 'Flash Mode',
1847
+ 13 => 'Focus Mode',
1848
+ 14 => 'Exposure Delay Mode',
1849
+ 15 => 'Shutter/Aperture Lock',
1850
+ 16 => 'Exposure Compensation',
1851
+ 17 => 'ISO Sensitivity',
1852
+ 18 => 'None',
1853
+ },
1854
+ },
1855
+ 0x161 => { # CSf9-b (Z7_2)
1856
+ Name => 'VerticalAFOnButton',
1857
+ PrintConv => {
1858
+ 1 => 'Same as AF-On Button',
1859
+ 2 => 'Select Center Focus Point',
1860
+ 3 => 'AF-On',
1861
+ 4 => 'AF Lock Only',
1862
+ 5 => 'AE Lock (hold)',
1863
+ 6 => 'AE Lock (reset on release)',
1864
+ 7 => 'AE Lock Only',
1865
+ 8 => 'AE/AF Lock',
1866
+ 9 => 'LiveView Info Display On/Off',
1867
+ 10 => 'Zoom (Low)',
1868
+ 11 => 'Zoom (1:1)',
1869
+ 12 => 'Zoom (High)',
1870
+ 13 => 'None',
1871
+ },
1872
+ },
1873
+ 0x162 => { Name => 'VerticalMultiSelector', PrintConv => \%tagSubSelector }, # CSf9-c (Z7_2)
1874
+ # 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)
1875
+ 0x164 => { # CSg7-a (Z7_2)
1876
+ Name => 'VerticalMovieFuncButton',
1877
+ PrintConv => {
1878
+ 1 => 'LiveView Info Display On/Off',
1879
+ 2 => 'Record Movies',
1880
+ 3 => 'Exposure Compensation',
1881
+ 4 => 'ISO',
1882
+ 5 => 'None',
1883
+ },
1884
+ },
1885
+ 0x165 => { # CSg7-b (Z7_2)
1886
+ Name => 'VerticalMovieAFOnButton',
1887
+ PrintConv => {
1888
+ 1 => 'Same as AF-On',
1889
+ 2 => 'Center Focus Point',
1890
+ 3 => 'AF-On',
1891
+ 4 => 'AF Lock Only',
1892
+ 5 => 'AE Lock (hold)',
1893
+ 6 => 'AE Lock Only',
1894
+ 7 => 'AE/AF Lock',
1895
+ 8 => 'LiveView Info Display On/Off',
1896
+ 9 => 'Zoom (Low)',
1897
+ 10 => 'Zoom (1:1)',
1898
+ 11 => 'Zoom (High)',
1899
+ 12 => 'Record Movies',
1900
+ 13 => 'None',
1901
+ },
1902
+ },
1903
+ 0x169 => { Name => 'LimitAF-AreaModeSelAutoPeople', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa7-h (Z7_2)
1904
+ 0x16a => { Name => 'LimitAF-AreaModeSelAutoAnimals', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa7-h (Z7_2)
1905
+ 0x16b => { Name => 'LimitAF-AreaModeSelWideLPeople', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa7-e (Z7_2)
1906
+ 0x16c => { Name => 'LimitAF-AreaModeSelWideLAnimals', PrintConv => \%limitNolimit, Unknown => 1 }, # CSa7-f (Z7_2)
1907
+ 0x16e => { # (Z7_2)
1908
+ Name => 'AFAreaMode',
1909
+ RawConv => '$$self{AFAreaMode} = $val',
1910
+ PrintConv => {
1911
+ 2 => 'Single-point',
1912
+ 3 => 'Dynamic-area',
1913
+ 4 => 'Wide (S)',
1914
+ 5 => 'Wide (L)',
1915
+ 6 => 'Wide (L-people)',
1916
+ 7 => 'Wide (L-animals)',
1917
+ 8 => 'Auto',
1918
+ 9 => 'Auto (People)',
1919
+ 10 => 'Auto (Animals)',
1920
+ },
1921
+ },
1922
+ );
1923
+
1924
+ #------------------------------------------------------------------------------
1925
+ # Process NikonSettings directory (ref PH)
1926
+ # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
1927
+ # Returns: 1 on success
1928
+ sub ProcessNikonSettings($$$)
1929
+ {
1930
+ my ($et, $dirInfo, $tagTablePtr) = @_;
1931
+
1932
+ # NikonSettings directory has a 24-byte header:
1933
+ # 0x00 - undef[4]: '0100'
1934
+ # 0x04 - int32u: 1 (D-models), 2 (Z-models)
1935
+ # 0x08 - undef[4]: '0100'
1936
+ # 0x0c - int32u: 1 (Z7), 2 (D850), 3 (D780,Z50), 4 (D6,Z5), 5(Z7m2)
1937
+ # 0x10 - undef[4]: firmware version (eg. '0110' for firmware 1.10)
1938
+ # 0x14 - int32u: number of entries in directory
1939
+
1940
+ return 0 if $$dirInfo{DirLen} < 24; # sanity check
1941
+
1942
+ my $dataPt = $$dirInfo{DataPt};
1943
+ my $start = $$dirInfo{DirStart};
1944
+ my $num = Get32u($dataPt, $start + 0x14);
1945
+
1946
+ $et->VerboseDir('NikonSettings', $num);
1947
+
1948
+ my $n = int(($$dirInfo{DirLen} - 0x18) / 8);
1949
+ if ($n < $num) {
1950
+ $et->Warn('Missing '.($num-$n).' NikonSettings entries', 1);
1951
+ $num = $n;
1952
+ } elsif ($n > $num) {
1953
+ $et->Warn('Unused space in NikonSettings directory', 1);
1954
+ }
1955
+ my $i;
1956
+ for ($i=0; $i<$num; ++$i) {
1957
+ my $entry = $start + 0x18 + $i * 8;
1958
+ my $tag = Get16u($dataPt, $entry);
1959
+ my $fmt = Get16u($dataPt, $entry + 2);
1960
+ my $val = Get32u($dataPt, $entry + 4);
1961
+ # abort if the tag has a format that we haven't yet seen
1962
+ # (assuming this is a size/format code. So far we have only seen 0x400)
1963
+ $fmt == 0x400 or $et->Warn(sprintf('Unknown format 0x%x for NikonSettings tag 0x%.4x',$fmt,$tag)), last;
1964
+ $et->HandleTag($tagTablePtr, $tag, $val,
1965
+ DataPt => $dataPt,
1966
+ DataPos => $$dirInfo{DataPos},
1967
+ Base => $$dirInfo{Base},
1968
+ Start => $entry + 4,
1969
+ Size => 4,
1970
+ Format => 'int32u',
1971
+ Index => $i,
1972
+ );
1973
+ }
1974
+ return 1;
1975
+ }
1976
+
1977
+
1978
+ 1; # end
1979
+
1980
+ __END__
1981
+
1982
+ =head1 NAME
1983
+
1984
+ Image::ExifTool::NikonSettings - Read Nikon user settings
1985
+
1986
+ =head1 SYNOPSIS
1987
+
1988
+ This module is loaded automatically by Image::ExifTool when required.
1989
+
1990
+ =head1 DESCRIPTION
1991
+
1992
+ This module contains the definitions necessary to read the user settings for
1993
+ Nikon cameras such as the D6 and Z7mk2.
1994
+
1995
+
1996
+ =head1 AUTHOR
1997
+
1998
+ Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
1999
+
2000
+ This library is free software; you can redistribute it and/or modify it
2001
+ under the same terms as Perl itself.
2002
+
2003
+ =head1 ACKNOWLEDGEMENTS
2004
+
2005
+ Thanks to Warren Hatch for his work decoding settings for the D6 and Z7mkII,
2006
+ and for providing the original source code for this module.
2007
+
2008
+ =head1 SEE ALSO
2009
+
2010
+ L<Image::ExifTool::TagNames/Nikon Tags>,
2011
+ L<Image::ExifTool(3pm)|Image::ExifTool>
2012
+
2013
+ =cut