source: main/trunk/greenstone2/perllib/cpan/Image/ExifTool/NikonSettings.pm@ 34921

Last change on this file since 34921 was 34921, checked in by anupama, 3 years ago

Committing the improvements to EmbeddedMetaPlugin's processing of Keywords vs other metadata fields. Keywords were literally stored as arrays of words rather than phrases in PDFs (at least in Diego's sample PDF), whereas other meta fields like Subjects and Creators stored them as arrays of phrases. To get both to work, Kathy updated EXIF to a newer version, to retrieve the actual EXIF values stored in the PDF. And Kathy and Dr Bainbridge came up with a new option that I added called apply_join_before_split_to_metafields that's a regex which can list the metadata fields to apply the join_before_split to and whcih previously always got applied to all metadata fields. Now it's applied to any *Keywords metafields by default, as that's the metafield we have experience of that behaves differently to the others, as it stores by word instead of phrases. Tested on Diego's sample PDF. Diego has double-checked it to works on his sample PDF too, setting the split char to ; and turning on the join_before_split and leaving apply_join_before_split_to_metafields at its default of .*Keywords. File changes are strings.properties for the tooltip, the plugin introducing the option and working with it and Kathy's EXIF updates affecting cpan/File and cpan/Image.

File size: 69.4 KB
Line 
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
14package Image::ExifTool::NikonSettings;
15
16use strict;
17use vars qw($VERSION);
18use Image::ExifTool qw(:DataAccess :Utils);
19
20$VERSION = '1.02';
21
22sub ProcessNikonSettings($$$);
23
24my %enableDisable = ( 1 => 'Enable', 2 => 'Disable' );
25
26my %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
79my %flickUpDownD6 = (
80 1 => 'Rating',
81 2 => 'Select To Send',
82 3 => 'Protect',
83 4 => 'Voice Memo',
84 5 => 'None',
85);
86
87my %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
96my %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
116my %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
164my %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
193my %limitNolimit = ( 1 => 'Limit', 2 => 'No Limit' );
194
195my %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
201my %menuBank = (
202 1 => 'A',
203 2 => 'B',
204 3 => 'C',
205 4 => 'D',
206);
207
208my %noYes = ( 1 => 'No', 2 => 'Yes' );
209my %offOn = ( 1 => 'Off', 2 => 'On' );
210my %onOff = ( 1 => 'On', 2 => 'Off' );
211
212my %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
269my %releaseFocus = (
270 1 => 'Release',
271 2 => 'Focus',
272);
273
274my %tagMultiSelector = (
275 1 => 'Restart Standby Timer',
276 2 => 'Do Nothing',
277);
278
279my %tagSecondarySlotFunction = (
280 1 => 'Overflow',
281 2 => 'Backup',
282 3 => 'NEF Primary + JPG Secondary',
283 4 => 'JPG Primary + JPG Secondary',
284);
285
286my %tagSubSelector = (
287 1 => 'Same as MultiSelector',
288 2 => 'Focus Point Selection',
289);
290
291my %thirdHalfFull = (
292 1 => '1/3 EV',
293 2 => '1/2 EV',
294 3 => '1 EV',
295);
296
297my %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
306my %yesNo = ( 1 => 'Yes', 2 => 'No' );
307
308my %infoZ72 = (
309 Condition => '$$self{Model} =~ /^NIKON Z 6_2/i or $$self{Model} =~ /^NIKON Z 7_2/i',
310 Notes => 'Z7_2',
311);
312
313my %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} and $$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} and $$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} and $$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} and $$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} and $$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} and $$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} and $$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
1928sub 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
19781; # end
1979
1980__END__
1981
1982=head1 NAME
1983
1984Image::ExifTool::NikonSettings - Read Nikon user settings
1985
1986=head1 SYNOPSIS
1987
1988This module is loaded automatically by Image::ExifTool when required.
1989
1990=head1 DESCRIPTION
1991
1992This module contains the definitions necessary to read the user settings for
1993Nikon cameras such as the D6 and Z7mk2.
1994
1995
1996=head1 AUTHOR
1997
1998Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
1999
2000This library is free software; you can redistribute it and/or modify it
2001under the same terms as Perl itself.
2002
2003=head1 ACKNOWLEDGEMENTS
2004
2005Thanks to Warren Hatch for his work decoding settings for the D6 and Z7mkII,
2006and for providing the original source code for this module.
2007
2008=head1 SEE ALSO
2009
2010L<Image::ExifTool::TagNames/Nikon Tags>,
2011L<Image::ExifTool(3pm)|Image::ExifTool>
2012
2013=cut
Note: See TracBrowser for help on using the repository browser.