exiftool-vendored.pl 12.49.0 → 12.54.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.
Files changed (203) hide show
  1. package/bin/Changes +107 -6
  2. package/bin/MANIFEST +5 -0
  3. package/bin/META.json +1 -1
  4. package/bin/META.yml +1 -1
  5. package/bin/README +3 -3
  6. package/bin/exiftool +39 -30
  7. package/bin/lib/File/RandomAccess.pm +1 -1
  8. package/bin/lib/File/RandomAccess.pod +2 -2
  9. package/bin/lib/Image/ExifTool/AES.pm +1 -1
  10. package/bin/lib/Image/ExifTool/AFCP.pm +1 -1
  11. package/bin/lib/Image/ExifTool/AIFF.pm +1 -1
  12. package/bin/lib/Image/ExifTool/APE.pm +1 -1
  13. package/bin/lib/Image/ExifTool/APP12.pm +1 -1
  14. package/bin/lib/Image/ExifTool/ASF.pm +1 -1
  15. package/bin/lib/Image/ExifTool/Apple.pm +197 -27
  16. package/bin/lib/Image/ExifTool/Audible.pm +1 -1
  17. package/bin/lib/Image/ExifTool/BMP.pm +1 -1
  18. package/bin/lib/Image/ExifTool/BPG.pm +1 -1
  19. package/bin/lib/Image/ExifTool/BZZ.pm +1 -1
  20. package/bin/lib/Image/ExifTool/BigTIFF.pm +1 -1
  21. package/bin/lib/Image/ExifTool/BuildTagLookup.pm +10 -7
  22. package/bin/lib/Image/ExifTool/CBOR.pm +1 -1
  23. package/bin/lib/Image/ExifTool/Canon.pm +26 -9
  24. package/bin/lib/Image/ExifTool/CanonCustom.pm +1 -1
  25. package/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
  26. package/bin/lib/Image/ExifTool/CanonVRD.pm +9 -9
  27. package/bin/lib/Image/ExifTool/CaptureOne.pm +1 -1
  28. package/bin/lib/Image/ExifTool/Casio.pm +4 -4
  29. package/bin/lib/Image/ExifTool/Charset.pm +1 -1
  30. package/bin/lib/Image/ExifTool/DICOM.pm +1 -1
  31. package/bin/lib/Image/ExifTool/DJI.pm +1 -1
  32. package/bin/lib/Image/ExifTool/DNG.pm +1 -1
  33. package/bin/lib/Image/ExifTool/DPX.pm +1 -1
  34. package/bin/lib/Image/ExifTool/DV.pm +1 -1
  35. package/bin/lib/Image/ExifTool/DarwinCore.pm +1 -1
  36. package/bin/lib/Image/ExifTool/DjVu.pm +1 -1
  37. package/bin/lib/Image/ExifTool/EXE.pm +1 -1
  38. package/bin/lib/Image/ExifTool/Exif.pm +11 -21
  39. package/bin/lib/Image/ExifTool/FITS.pm +1 -1
  40. package/bin/lib/Image/ExifTool/FLAC.pm +1 -1
  41. package/bin/lib/Image/ExifTool/FLIF.pm +1 -1
  42. package/bin/lib/Image/ExifTool/FLIR.pm +7 -6
  43. package/bin/lib/Image/ExifTool/Fixup.pm +1 -1
  44. package/bin/lib/Image/ExifTool/Flash.pm +1 -1
  45. package/bin/lib/Image/ExifTool/FlashPix.pm +1 -1
  46. package/bin/lib/Image/ExifTool/Font.pm +1 -1
  47. package/bin/lib/Image/ExifTool/FotoStation.pm +1 -1
  48. package/bin/lib/Image/ExifTool/FujiFilm.pm +20 -13
  49. package/bin/lib/Image/ExifTool/GE.pm +1 -1
  50. package/bin/lib/Image/ExifTool/GIF.pm +1 -1
  51. package/bin/lib/Image/ExifTool/GIMP.pm +1 -1
  52. package/bin/lib/Image/ExifTool/GPS.pm +12 -6
  53. package/bin/lib/Image/ExifTool/GeoTiff.pm +1 -1
  54. package/bin/lib/Image/ExifTool/Geotag.pm +14 -6
  55. package/bin/lib/Image/ExifTool/GoPro.pm +1 -1
  56. package/bin/lib/Image/ExifTool/H264.pm +1 -1
  57. package/bin/lib/Image/ExifTool/HP.pm +1 -1
  58. package/bin/lib/Image/ExifTool/HTML.pm +1 -1
  59. package/bin/lib/Image/ExifTool/HtmlDump.pm +1 -1
  60. package/bin/lib/Image/ExifTool/ICC_Profile.pm +1 -1
  61. package/bin/lib/Image/ExifTool/ICO.pm +3 -1
  62. package/bin/lib/Image/ExifTool/ID3.pm +1 -1
  63. package/bin/lib/Image/ExifTool/IPTC.pm +6 -2
  64. package/bin/lib/Image/ExifTool/ISO.pm +1 -1
  65. package/bin/lib/Image/ExifTool/ITC.pm +1 -1
  66. package/bin/lib/Image/ExifTool/Import.pm +1 -1
  67. package/bin/lib/Image/ExifTool/InDesign.pm +1 -1
  68. package/bin/lib/Image/ExifTool/JPEG.pm +2 -1
  69. package/bin/lib/Image/ExifTool/JPEGDigest.pm +1 -1
  70. package/bin/lib/Image/ExifTool/JSON.pm +1 -1
  71. package/bin/lib/Image/ExifTool/JVC.pm +1 -1
  72. package/bin/lib/Image/ExifTool/Jpeg2000.pm +35 -8
  73. package/bin/lib/Image/ExifTool/Kodak.pm +1 -1
  74. package/bin/lib/Image/ExifTool/KyoceraRaw.pm +1 -1
  75. package/bin/lib/Image/ExifTool/LIF.pm +1 -1
  76. package/bin/lib/Image/ExifTool/LNK.pm +1 -1
  77. package/bin/lib/Image/ExifTool/Lang/cs.pm +1 -1
  78. package/bin/lib/Image/ExifTool/Lang/de.pm +2 -2
  79. package/bin/lib/Image/ExifTool/Lang/en_ca.pm +1 -1
  80. package/bin/lib/Image/ExifTool/Lang/en_gb.pm +1 -1
  81. package/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
  82. package/bin/lib/Image/ExifTool/Lang/fi.pm +1 -1
  83. package/bin/lib/Image/ExifTool/Lang/fr.pm +6016 -760
  84. package/bin/lib/Image/ExifTool/Lang/it.pm +1 -1
  85. package/bin/lib/Image/ExifTool/Lang/ja.pm +1 -1
  86. package/bin/lib/Image/ExifTool/Lang/ko.pm +1 -1
  87. package/bin/lib/Image/ExifTool/Lang/nl.pm +1 -1
  88. package/bin/lib/Image/ExifTool/Lang/pl.pm +1 -1
  89. package/bin/lib/Image/ExifTool/Lang/ru.pm +1 -1
  90. package/bin/lib/Image/ExifTool/Lang/sk.pm +1806 -0
  91. package/bin/lib/Image/ExifTool/Lang/sv.pm +1 -1
  92. package/bin/lib/Image/ExifTool/Lang/tr.pm +1 -1
  93. package/bin/lib/Image/ExifTool/Lang/zh_cn.pm +1 -1
  94. package/bin/lib/Image/ExifTool/Lang/zh_tw.pm +1 -1
  95. package/bin/lib/Image/ExifTool/Leaf.pm +1 -1
  96. package/bin/lib/Image/ExifTool/Lytro.pm +1 -1
  97. package/bin/lib/Image/ExifTool/M2TS.pm +45 -2
  98. package/bin/lib/Image/ExifTool/MIE.pm +1 -1
  99. package/bin/lib/Image/ExifTool/MIEUnits.pod +1 -1
  100. package/bin/lib/Image/ExifTool/MIFF.pm +1 -1
  101. package/bin/lib/Image/ExifTool/MISB.pm +2 -2
  102. package/bin/lib/Image/ExifTool/MNG.pm +1 -1
  103. package/bin/lib/Image/ExifTool/MOI.pm +1 -1
  104. package/bin/lib/Image/ExifTool/MPC.pm +1 -1
  105. package/bin/lib/Image/ExifTool/MPEG.pm +1 -1
  106. package/bin/lib/Image/ExifTool/MPF.pm +1 -1
  107. package/bin/lib/Image/ExifTool/MRC.pm +1 -1
  108. package/bin/lib/Image/ExifTool/MWG.pm +1 -1
  109. package/bin/lib/Image/ExifTool/MXF.pm +1 -1
  110. package/bin/lib/Image/ExifTool/MacOS.pm +1 -1
  111. package/bin/lib/Image/ExifTool/MakerNotes.pm +1 -1
  112. package/bin/lib/Image/ExifTool/Matroska.pm +262 -46
  113. package/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
  114. package/bin/lib/Image/ExifTool/Minolta.pm +1 -1
  115. package/bin/lib/Image/ExifTool/MinoltaRaw.pm +1 -1
  116. package/bin/lib/Image/ExifTool/Motorola.pm +1 -1
  117. package/bin/lib/Image/ExifTool/Nikon.pm +845 -355
  118. package/bin/lib/Image/ExifTool/NikonCapture.pm +1 -1
  119. package/bin/lib/Image/ExifTool/NikonCustom.pm +140 -107
  120. package/bin/lib/Image/ExifTool/NikonSettings.pm +1 -1
  121. package/bin/lib/Image/ExifTool/Nintendo.pm +1 -1
  122. package/bin/lib/Image/ExifTool/OOXML.pm +1 -1
  123. package/bin/lib/Image/ExifTool/Ogg.pm +1 -1
  124. package/bin/lib/Image/ExifTool/Olympus.pm +6 -4
  125. package/bin/lib/Image/ExifTool/OpenEXR.pm +1 -1
  126. package/bin/lib/Image/ExifTool/Opus.pm +1 -1
  127. package/bin/lib/Image/ExifTool/Other.pm +1 -1
  128. package/bin/lib/Image/ExifTool/PCX.pm +1 -1
  129. package/bin/lib/Image/ExifTool/PDF.pm +1 -1
  130. package/bin/lib/Image/ExifTool/PGF.pm +1 -1
  131. package/bin/lib/Image/ExifTool/PICT.pm +1 -1
  132. package/bin/lib/Image/ExifTool/PLIST.pm +12 -7
  133. package/bin/lib/Image/ExifTool/PLUS.pm +1 -1
  134. package/bin/lib/Image/ExifTool/PNG.pm +9 -2
  135. package/bin/lib/Image/ExifTool/PPM.pm +1 -1
  136. package/bin/lib/Image/ExifTool/PSP.pm +1 -1
  137. package/bin/lib/Image/ExifTool/Palm.pm +1 -1
  138. package/bin/lib/Image/ExifTool/Panasonic.pm +1 -1
  139. package/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -1
  140. package/bin/lib/Image/ExifTool/Parrot.pm +1 -1
  141. package/bin/lib/Image/ExifTool/Pentax.pm +8 -3
  142. package/bin/lib/Image/ExifTool/PhaseOne.pm +1 -1
  143. package/bin/lib/Image/ExifTool/PhotoCD.pm +1 -1
  144. package/bin/lib/Image/ExifTool/PhotoMechanic.pm +1 -1
  145. package/bin/lib/Image/ExifTool/Photoshop.pm +1 -1
  146. package/bin/lib/Image/ExifTool/PostScript.pm +1 -1
  147. package/bin/lib/Image/ExifTool/PrintIM.pm +1 -1
  148. package/bin/lib/Image/ExifTool/Qualcomm.pm +1 -1
  149. package/bin/lib/Image/ExifTool/QuickTime.pm +52 -9
  150. package/bin/lib/Image/ExifTool/QuickTimeStream.pl +95 -14
  151. package/bin/lib/Image/ExifTool/README +6 -1
  152. package/bin/lib/Image/ExifTool/RIFF.pm +1 -1
  153. package/bin/lib/Image/ExifTool/RSRC.pm +1 -1
  154. package/bin/lib/Image/ExifTool/RTF.pm +1 -1
  155. package/bin/lib/Image/ExifTool/Radiance.pm +1 -1
  156. package/bin/lib/Image/ExifTool/Rawzor.pm +1 -1
  157. package/bin/lib/Image/ExifTool/Real.pm +1 -1
  158. package/bin/lib/Image/ExifTool/Reconyx.pm +1 -1
  159. package/bin/lib/Image/ExifTool/Red.pm +1 -1
  160. package/bin/lib/Image/ExifTool/Ricoh.pm +1 -1
  161. package/bin/lib/Image/ExifTool/Samsung.pm +3 -1
  162. package/bin/lib/Image/ExifTool/Sanyo.pm +1 -1
  163. package/bin/lib/Image/ExifTool/Scalado.pm +1 -1
  164. package/bin/lib/Image/ExifTool/Shift.pl +1 -1
  165. package/bin/lib/Image/ExifTool/Shortcuts.pm +1 -1
  166. package/bin/lib/Image/ExifTool/Sigma.pm +1 -1
  167. package/bin/lib/Image/ExifTool/SigmaRaw.pm +1 -1
  168. package/bin/lib/Image/ExifTool/Sony.pm +35 -20
  169. package/bin/lib/Image/ExifTool/SonyIDC.pm +1 -1
  170. package/bin/lib/Image/ExifTool/Stim.pm +1 -1
  171. package/bin/lib/Image/ExifTool/TagInfoXML.pm +15 -8
  172. package/bin/lib/Image/ExifTool/TagLookup.pm +4672 -4568
  173. package/bin/lib/Image/ExifTool/TagNames.pod +357 -46
  174. package/bin/lib/Image/ExifTool/Text.pm +1 -1
  175. package/bin/lib/Image/ExifTool/Theora.pm +1 -1
  176. package/bin/lib/Image/ExifTool/Torrent.pm +1 -1
  177. package/bin/lib/Image/ExifTool/Unknown.pm +1 -1
  178. package/bin/lib/Image/ExifTool/VCard.pm +1 -1
  179. package/bin/lib/Image/ExifTool/Validate.pm +1 -1
  180. package/bin/lib/Image/ExifTool/Vorbis.pm +1 -1
  181. package/bin/lib/Image/ExifTool/WTV.pm +1 -1
  182. package/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
  183. package/bin/lib/Image/ExifTool/WriteExif.pl +14 -1
  184. package/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
  185. package/bin/lib/Image/ExifTool/WritePDF.pl +5 -1
  186. package/bin/lib/Image/ExifTool/WritePNG.pl +1 -1
  187. package/bin/lib/Image/ExifTool/WritePhotoshop.pl +1 -1
  188. package/bin/lib/Image/ExifTool/WritePostScript.pl +1 -1
  189. package/bin/lib/Image/ExifTool/WriteQuickTime.pl +30 -14
  190. package/bin/lib/Image/ExifTool/WriteRIFF.pl +1 -1
  191. package/bin/lib/Image/ExifTool/WriteXMP.pl +16 -2
  192. package/bin/lib/Image/ExifTool/Writer.pl +35 -15
  193. package/bin/lib/Image/ExifTool/XMP.pm +25 -4
  194. package/bin/lib/Image/ExifTool/XMP2.pl +29 -2
  195. package/bin/lib/Image/ExifTool/XMPStruct.pl +1 -1
  196. package/bin/lib/Image/ExifTool/ZIP.pm +20 -8
  197. package/bin/lib/Image/ExifTool/ZISRAW.pm +1 -1
  198. package/bin/lib/Image/ExifTool/iWork.pm +1 -1
  199. package/bin/lib/Image/ExifTool.pm +45 -20
  200. package/bin/lib/Image/ExifTool.pod +48 -46
  201. package/bin/perl-Image-ExifTool.spec +1 -1
  202. package/bin/pp_build_exe.args +6 -5
  203. package/package.json +3 -3
@@ -49,6 +49,7 @@
49
49
  # 36) Hayo Baann (forum10207)
50
50
  # 37) Tom Lachecki, private communication
51
51
  # 38) https://github.com/exiftool/exiftool/pull/40 (and forum10893)
52
+ # 39) Stefan Grube private communication (Z9)
52
53
  # IB) Iliah Borg private communication (LibRaw)
53
54
  # JD) Jens Duttke private communication
54
55
  # NJ) Niels Kristian Bech Jensen private communication
@@ -63,7 +64,7 @@ use Image::ExifTool::Exif;
63
64
  use Image::ExifTool::GPS;
64
65
  use Image::ExifTool::XMP;
65
66
 
66
- $VERSION = '4.12';
67
+ $VERSION = '4.16';
67
68
 
68
69
  sub LensIDConv($$$);
69
70
  sub ProcessNikonAVI($$$);
@@ -368,6 +369,7 @@ sub GetAFPointGrid($$;$);
368
369
  '48 54 3E 3E 0C 0C 4B 06' => 'Sigma 30mm F1.4 EX DC HSM',
369
370
  'F8 54 3E 3E 0C 0C 4B 06' => 'Sigma 30mm F1.4 EX DC HSM', #JD
370
371
  '91 54 44 44 0C 0C 4B 06' => 'Sigma 35mm F1.4 DG HSM', #30
372
+ 'BD 54 48 48 0C 0C 4B 46' => 'Sigma 40mm F1.4 DG HSM | A', #30
371
373
  'DE 54 50 50 0C 0C 4B 06' => 'Sigma 50mm F1.4 EX DG HSM',
372
374
  '88 54 50 50 0C 0C 4B 06' => 'Sigma 50mm F1.4 DG HSM | A',
373
375
  '02 48 50 50 24 24 02 00' => 'Sigma Macro 50mm F2.8', #https://exiftool.org/forum/index.php/topic,4027.0.html
@@ -381,6 +383,7 @@ sub GetAFPointGrid($$;$);
381
383
  '32 54 6A 6A 24 24 35 02.2' => 'Sigma Macro 105mm F2.8 EX DG', #JD
382
384
  'E5 54 6A 6A 24 24 35 02' => 'Sigma Macro 105mm F2.8 EX DG',
383
385
  '97 48 6A 6A 24 24 4B 0E' => 'Sigma Macro 105mm F2.8 EX DG OS HSM',
386
+ 'BE 54 6A 6A 0C 0C 4B 46' => 'Sigma 105mm F1.4 DG HSM | A', #30
384
387
  '48 48 76 76 24 24 4B 06' => 'Sigma APO Macro 150mm F2.8 EX DG HSM',
385
388
  'F5 48 76 76 24 24 4B 06' => 'Sigma APO Macro 150mm F2.8 EX DG HSM', #24
386
389
  '99 48 76 76 24 24 4B 0E' => 'Sigma APO Macro 150mm F2.8 EX DG OS HSM', #(Christian Hesse)
@@ -436,7 +439,7 @@ sub GetAFPointGrid($$;$);
436
439
  '90 40 2D 80 2C 40 4B 0E' => 'Sigma 18-200mm F3.5-6.3 II DC OS HSM', #JohnHelour
437
440
  '89 30 2D 80 2C 40 4B 0E' => 'Sigma 18-200mm F3.5-6.3 DC Macro OS HS | C', #JoeSchonberg
438
441
  'A5 40 2D 88 2C 40 4B 0E' => 'Sigma 18-250mm F3.5-6.3 DC OS HSM',
439
- # LensFStops varies with FocalLength for this lens (ref 2):
442
+ # LensFStops varies with FocalLength for this lens (ref 2):
440
443
  '92 2C 2D 88 2C 40 4B 0E' => 'Sigma 18-250mm F3.5-6.3 DC Macro OS HSM', #2
441
444
  '87 2C 2D 8E 2C 40 4B 0E' => 'Sigma 18-300mm F3.5-6.3 DC Macro HSM', #30
442
445
  # '92 2C 2D 88 2C 40 4B 0E' (250mm)
@@ -614,6 +617,7 @@ sub GetAFPointGrid($$;$);
614
617
  #
615
618
  '00 40 2B 2B 2C 2C 00 02' => 'Tokina AT-X 17 AF PRO (AF 17mm f/3.5)',
616
619
  '00 47 44 44 24 24 00 06' => 'Tokina AT-X M35 PRO DX (AF 35mm f/2.8 Macro)',
620
+ '8D 54 68 68 24 24 87 02' => 'Tokina AT-X PRO 100mm F2.8 D Macro', #30
617
621
  '00 54 68 68 24 24 00 02' => 'Tokina AT-X M100 AF PRO D (AF 100mm f/2.8 Macro)',
618
622
  '27 48 8E 8E 30 30 1D 02' => 'Tokina AT-X 304 AF (AF 300mm f/4.0)',
619
623
  '00 54 8E 8E 24 24 00 02' => 'Tokina AT-X 300 AF PRO (AF 300mm f/2.8)',
@@ -806,6 +810,7 @@ my %flashColorFilter = (
806
810
  66 => 'Blue',
807
811
  67 => 'Yellow',
808
812
  68 => 'Amber',
813
+ 128 => 'Incandescent', #SZ-4TN Incandescent
809
814
  );
810
815
 
811
816
  # flash control mode values (ref JD)
@@ -828,6 +833,53 @@ my %activeDLightingZ7 = (
828
833
  5 => 'Extra High',
829
834
  );
830
835
 
836
+ my %aFAreaModeZ9 = (
837
+ 0 => 'Pinpoint',
838
+ 1 => 'Single',
839
+ 2 => 'Dynamic',
840
+ 3 => 'Wide (S)',
841
+ 4 => 'Wide (L)',
842
+ 5 => '3D',
843
+ 6 => 'Auto',
844
+ 11 => 'Subject Tracking',
845
+ 12 => 'Wide (C1)',
846
+ 13 => 'Wide (C2)',
847
+ );
848
+
849
+ my %banksZ9 = (
850
+ 0 => 'A',
851
+ 1 => 'B',
852
+ 2 => 'C',
853
+ 3 => 'D',
854
+ );
855
+
856
+ my %bracketIncrementZ9 = (
857
+ 0 => '0.3',
858
+ #1 => '0.5',
859
+ 2 => '0.7',
860
+ 3 => '1.0',
861
+ 4 => '2.0',
862
+ 5 => '3.0',
863
+ );
864
+
865
+ my %bracketSetZ9 = (
866
+ 0 => 'AE/Flash',
867
+ 1 => 'AE',
868
+ 2 => 'Flash',
869
+ 3 => 'White Balance',
870
+ 4 => 'Active-D Lighting',
871
+ );
872
+
873
+ my %bracketProgramZ9 = (
874
+ 0 => 'Disabled',
875
+ 2 => '2F',
876
+ 3 => '3F',
877
+ 4 => '4F',
878
+ 5 => '5F',
879
+ 7 => '7F',
880
+ 9 => '9F',
881
+ );
882
+
831
883
  my %flashControlModeZ7 = (
832
884
  0 => 'TTL',
833
885
  1 => 'Auto External Flash',
@@ -856,9 +908,32 @@ my %focusModeZ7 = (
856
908
  4 => 'AF-F', # full frame
857
909
  );
858
910
 
911
+ my %hDMIOutputResolutionZ9 = (
912
+ 0 => 'Auto',
913
+ 1 => '4320p',
914
+ 2 => '2160p',
915
+ 3 => '1080p',
916
+ #4 => '1080i',
917
+ 5 => '720p',
918
+ #6 => '576p',
919
+ #7 => '480p',
920
+ );
921
+
922
+ my %imageAreaZ9 = (
923
+ 0 => 'FX',
924
+ 1 => 'DX',
925
+ 4 => '16:9',
926
+ 8 => '1:1',
927
+ );
928
+
929
+ my %imageAreaZ9b = (
930
+ 0 => 'FX',
931
+ 1 => 'DX',
932
+ );
933
+
859
934
  my %infoZSeries = (
860
935
  Condition => '$$self{Model} =~ /^NIKON Z (5|50|6|6_2|7|7_2|fc|9)\b/i',
861
- Notes => 'Z Series cameras thru Decemeber 2021',
936
+ Notes => 'Z Series cameras thru December 2021',
862
937
  );
863
938
  my %iSOAutoHiLimitZ7 = (
864
939
  0 => 'ISO 64',
@@ -894,6 +969,66 @@ my %iSOAutoHiLimitZ7 = (
894
969
  32 => 'ISO Hi 2.0',
895
970
  );
896
971
 
972
+ my %iSOAutoShutterTimeZ9 = (
973
+ -15 => 'Auto', #z9 firmware 1.00 maps both 'Auto' and '30 s' to -15
974
+ -12 => '15 s',
975
+ -9 => '8 s',
976
+ -6 => '4 s',
977
+ -3 => '2 s',
978
+ 0 => '1 s',
979
+ 1 => '1/1.3 s',
980
+ 2 => '1/1.6 s',
981
+ 3 => '1/2 s',
982
+ 4 => '1/2.5 s',
983
+ 5 => '1/3 s',
984
+ 6 => '1/4 s',
985
+ 7 => '1/5 s',
986
+ 8 => '1/6 s',
987
+ 9 => '1/8 s',
988
+ 10 => '1/10 s',
989
+ 11 => '1/13 s',
990
+ 12 => '1/15 s',
991
+ 13 => '1/20 s',
992
+ 14 => '1/25 s',
993
+ 15 => '1/30 s',
994
+ 16 => '1/40 s',
995
+ 17 => '1/50 s',
996
+ 18 => '1/60 s',
997
+ 19 => '1/80 s',
998
+ 20 => '1/100 s',
999
+ 21 => '1/120 s',
1000
+ 22 => '1/160 s',
1001
+ 23 => '1/200 s',
1002
+ 24 => '1/250 s',
1003
+ 25 => '1/320 s',
1004
+ 26 => '1/400 s',
1005
+ 27 => '1/500 s',
1006
+ 28 => '1/640 s',
1007
+ 29 => '1/800 s',
1008
+ 30 => '1/1000 s',
1009
+ 31 => '1/1250 s',
1010
+ 32 => '1/1600 s',
1011
+ 33 => '1/2000 s',
1012
+ 34 => '1/2500 s',
1013
+ 35 => '1/3200 s',
1014
+ 36 => '1/4000 s',
1015
+ 37 => '1/5000 s',
1016
+ 37.5 => '1/6000 s',
1017
+ 38 => '1/6400 s',
1018
+ 39 => '1/8000 s',
1019
+ 40 => '1/10000 s',
1020
+ 40.5 => '1/12000 s',
1021
+ 41 => '1/13000 s',
1022
+ 42 => '1/16000 s',
1023
+ );
1024
+
1025
+ my %languageZ9 = (
1026
+ 4 => 'English',
1027
+ 5 => 'Spanish',
1028
+ 7 => 'French',
1029
+ 15 => 'Portuguese'
1030
+ );
1031
+
897
1032
  my %meteringModeZ7 = (
898
1033
  0 => 'Matrix',
899
1034
  1 => 'Center',
@@ -901,6 +1036,30 @@ my %meteringModeZ7 = (
901
1036
  3 => 'Highlight'
902
1037
  );
903
1038
 
1039
+ my %monitorBrightnessZ9 = (
1040
+ 0 => '-5',
1041
+ 1 => '-4',
1042
+ 2 => '-3',
1043
+ 3 => '-2',
1044
+ 4 => '-1',
1045
+ 5 => '0',
1046
+ 6 => '1',
1047
+ 7 => '2',
1048
+ 8 => '3',
1049
+ 9 => '4',
1050
+ 10 => '5',
1051
+ 14 => 'Hi1',
1052
+ 15 => 'Hi2',
1053
+ 16 => 'Lo2',
1054
+ 17 => 'Lo1',
1055
+ );
1056
+
1057
+ my %movieFlickerReductionZ9 = (
1058
+ 0 => 'Auto',
1059
+ 1 => '50Hz',
1060
+ 2 => '60Hz',
1061
+ );
1062
+
904
1063
  my %movieFrameRateZ7 = (
905
1064
  0 => '120p',
906
1065
  1 => '100p',
@@ -911,6 +1070,33 @@ my %movieFrameRateZ7 = (
911
1070
  6 => '24p',
912
1071
  );
913
1072
 
1073
+ my %movieFrameSizeZ9 = (
1074
+ 1 => '1920x1080',
1075
+ 2 => '3840x2160',
1076
+ 3 => '7680x4320',
1077
+ );
1078
+
1079
+ my %movieToneMapZ9 = (
1080
+ 0 => 'SDR',
1081
+ 1 => 'HLG',
1082
+ 2 => 'N-Log',
1083
+ );
1084
+
1085
+ my %movieTypeZ9 = (
1086
+ 1 => 'H.265 8-bit (MP4)',
1087
+ 2 => 'H.265 8-bit (MOV)',
1088
+ 3 => 'H.265 10-bit (MOV)',
1089
+ 4 => 'ProRes 422 HQ 10-bit (MOV)',
1090
+ 5 => 'ProRes RAW HQ 12-bit (MOV)',
1091
+ 6 => 'NRAW 12-bit (NEV)'
1092
+ );
1093
+
1094
+ my %multipleExposureModeZ9 = (
1095
+ 0 => 'Off',
1096
+ 1 => 'On',
1097
+ 2 => 'On (Series)',
1098
+ );
1099
+
914
1100
  my %offLowNormalHighZ7 = (
915
1101
  0 => 'Off',
916
1102
  1 => 'Low',
@@ -918,10 +1104,11 @@ my %offLowNormalHighZ7 = (
918
1104
  3 => 'High',
919
1105
  );
920
1106
 
921
- my %movieFrameSizeZ9 = (
922
- 1 => '1920x1080',
923
- 2 => '3840x2160',
924
- 3 => '7680x4320',
1107
+ my %secondarySlotFunctionZ9 = (
1108
+ 0 => 'Overflow',
1109
+ 1 => 'Backup',
1110
+ 2 => 'NEF Primary + JPG Secondary',
1111
+ 3 => 'JPG Primary + JPG Secondary',
925
1112
  );
926
1113
 
927
1114
  my %subjectDetectionZ9 = (
@@ -932,6 +1119,34 @@ my %subjectDetectionZ9 = (
932
1119
  4 => 'Vehicles',
933
1120
  );
934
1121
 
1122
+ my %timeZoneZ9 = (
1123
+ 3 => '+10:00 (Sydney)',
1124
+ 5 => '+09:00 (Tokyo)',
1125
+ 6 => '+08:00 (Beijing, Honk Kong, Sinapore)',
1126
+ 10 => '+05:45 (Kathmandu)',
1127
+ 11 => '+05:30 (New Dehli)',
1128
+ 12 => '+05:00 (Islamabad)',
1129
+ 13 => '+04:30 (Kabul)',
1130
+ 14 => '+04:00 (Abu Dhabi)',
1131
+ 15 => '+03:30 (Tehran)',
1132
+ 16 => '+03:00 (Moscow, Nairobi)',
1133
+ 17 => '+02:00 (Athens, Helsinki)',
1134
+ 18 => '+01:00 (Madrid, Paris, Berlin)',
1135
+ 19 => '+00:00 (London)',
1136
+ 20 => '-01:00 (Azores)',
1137
+ 21 => '-02:00 (Fernando de Noronha)',
1138
+ 22 => '-03:00 (Buenos Aires, Sao Paulo)',
1139
+ 23 => '-03:30 (Newfoundland)',
1140
+ 24 => '-04:00 (Manaus, Caracas)',
1141
+ 25 => '-05:00 (New York, Toronto, Lima)',
1142
+ 26 => '-06:00 (Chicago, Mexico City)',
1143
+ 27 => '-07:00 (Denver)',
1144
+ 28 => '-08:00 (Los Angeles, Vancouver)',
1145
+ 29 => '-09:00 (Anchorage)',
1146
+ 30 => '-10:00 (Hawaii)',
1147
+ );
1148
+
1149
+
935
1150
  my %vRModeZ9 = (
936
1151
  0 => 'Off',
937
1152
  1 => 'Normal',
@@ -1127,8 +1342,6 @@ my %afPoints153 = (
1127
1342
 
1128
1343
  # AF point indices for models with 81 focus points, eg. Z6/Z7/Z50 (ref 38)
1129
1344
  # - 9 rows (A-I) with 9 columns (1-9), center is E5
1130
- # NOTE: the AF points start 2 bytes into the data, so the map starts
1131
- # at 17 instead of 1
1132
1345
  #
1133
1346
  # 7 6 5 4 3 2 1 0
1134
1347
  # 00 : [H5][G5][F5][A5][B5][C5][D5][E5]
@@ -1143,23 +1356,23 @@ my %afPoints153 = (
1143
1356
  # 09 : [H1][G1][F1][A1][B1][C1][D1][E1]
1144
1357
  # 0a : [ ][ ][ ][ ][ ][ ][ ][I1]
1145
1358
  my %afPoints81 = (
1146
- 17 => 'E5', 34 => 'I6', 51 => 'H7', 68 => 'G8', 85 => 'F9',
1147
- 18 => 'D5', 35 => 'E4', 52 => 'I7', 69 => 'H8', 86 => 'G9',
1148
- 19 => 'C5', 36 => 'D4', 53 => 'E3', 70 => 'I8', 87 => 'H9',
1149
- 20 => 'B5', 37 => 'C4', 54 => 'D3', 71 => 'E2', 88 => 'I9',
1150
- 21 => 'A5', 38 => 'B4', 55 => 'C3', 72 => 'D2', 89 => 'E1',
1151
- 22 => 'F5', 39 => 'A4', 56 => 'B3', 73 => 'C2', 90 => 'D1',
1152
- 23 => 'G5', 40 => 'F4', 57 => 'A3', 74 => 'B2', 91 => 'C1',
1153
- 24 => 'H5', 41 => 'G4', 58 => 'F3', 75 => 'A2', 92 => 'B1',
1154
- 25 => 'I5', 42 => 'H4', 59 => 'G3', 76 => 'F2', 93 => 'A1',
1155
- 26 => 'E6', 43 => 'I4', 60 => 'H3', 77 => 'G2', 94 => 'F1',
1156
- 27 => 'D6', 44 => 'E7', 61 => 'I3', 78 => 'H2', 95 => 'G1',
1157
- 28 => 'C6', 45 => 'D7', 62 => 'E8', 79 => 'I2', 96 => 'H1',
1158
- 29 => 'B6', 46 => 'C7', 63 => 'D8', 80 => 'E9', 97 => 'I1',
1159
- 30 => 'A6', 47 => 'B7', 64 => 'C8', 81 => 'D9',
1160
- 31 => 'F6', 48 => 'A7', 65 => 'B8', 82 => 'C9',
1161
- 32 => 'G6', 49 => 'F7', 66 => 'A8', 83 => 'B9',
1162
- 33 => 'H6', 50 => 'G7', 67 => 'F8', 84 => 'A9',
1359
+ 1 => 'E5', 18 => 'I6', 35 => 'H7', 52 => 'G8', 69 => 'F9',
1360
+ 2 => 'D5', 19 => 'E4', 36 => 'I7', 53 => 'H8', 70 => 'G9',
1361
+ 3 => 'C5', 20 => 'D4', 37 => 'E3', 54 => 'I8', 71 => 'H9',
1362
+ 4 => 'B5', 21 => 'C4', 38 => 'D3', 55 => 'E2', 72 => 'I9',
1363
+ 5 => 'A5', 22 => 'B4', 39 => 'C3', 56 => 'D2', 73 => 'E1',
1364
+ 6 => 'F5', 23 => 'A4', 40 => 'B3', 57 => 'C2', 74 => 'D1',
1365
+ 7 => 'G5', 24 => 'F4', 41 => 'A3', 58 => 'B2', 75 => 'C1',
1366
+ 8 => 'H5', 25 => 'G4', 42 => 'F3', 59 => 'A2', 76 => 'B1',
1367
+ 9 => 'I5', 26 => 'H4', 43 => 'G3', 60 => 'F2', 77 => 'A1',
1368
+ 10 => 'E6', 27 => 'I4', 44 => 'H3', 61 => 'G2', 78 => 'F1',
1369
+ 11 => 'D6', 28 => 'E7', 45 => 'I3', 62 => 'H2', 79 => 'G1',
1370
+ 12 => 'C6', 29 => 'D7', 46 => 'E8', 63 => 'I2', 80 => 'H1',
1371
+ 13 => 'B6', 30 => 'C7', 47 => 'D8', 64 => 'E9', 81 => 'I1',
1372
+ 14 => 'A6', 31 => 'B7', 48 => 'C8', 65 => 'D9',
1373
+ 15 => 'F6', 32 => 'A7', 49 => 'B8', 66 => 'C9',
1374
+ 16 => 'G6', 33 => 'F7', 50 => 'A8', 67 => 'B9',
1375
+ 17 => 'H6', 34 => 'G7', 51 => 'F8', 68 => 'A9',
1163
1376
  );
1164
1377
 
1165
1378
  my %cropHiSpeed = ( #IB
@@ -1600,10 +1813,14 @@ my %base64coord = (
1600
1813
  81 => 'Auto (Electronic Front Curtain)', #JanSkoda (Z6II)
1601
1814
  },
1602
1815
  },
1603
- 0x0035 => { #32
1816
+ 0x0035 => [{ #32
1604
1817
  Name => 'HDRInfo',
1818
+ Condition => '$count != 6',
1605
1819
  SubDirectory => { TagTable => 'Image::ExifTool::Nikon::HDRInfo' },
1606
- },
1820
+ },{
1821
+ Name => 'HDRInfo2',
1822
+ SubDirectory => { TagTable => 'Image::ExifTool::Nikon::HDRInfo2' },
1823
+ }],
1607
1824
  0x0037 => { #XavierJubier
1608
1825
  Name => 'MechanicalShutterCount',
1609
1826
  Writable => 'int32u',
@@ -2088,7 +2305,7 @@ my %base64coord = (
2088
2305
  TagTable => 'Image::ExifTool::Nikon::ShotInfoZ9',
2089
2306
  DecryptStart => 4,
2090
2307
  # TODO: eventually set the length dynamically according to actual offsets!
2091
- DecryptLen => 0xec4b + 2105, # decoded thru end of Offset26
2308
+ DecryptLen => 0xec4b + 2196, # decoded thru end of Offset26
2092
2309
  ByteOrder => 'LittleEndian',
2093
2310
  },
2094
2311
  },
@@ -2489,6 +2706,12 @@ my %base64coord = (
2489
2706
  TagTable => 'Image::ExifTool::Nikon::MultiExposure',
2490
2707
  ByteOrder => 'LittleEndian',
2491
2708
  },
2709
+ },{
2710
+ Name => 'MultiExposure2',
2711
+ Condition => '$$valPt =~ /^010[23]/', # 0102 is NC (PH)
2712
+ SubDirectory => {
2713
+ TagTable => 'Image::ExifTool::Nikon::MultiExposure2',
2714
+ },
2492
2715
  }],
2493
2716
  0x00b1 => { #14/PH/JD (D80)
2494
2717
  Name => 'HighISONoiseReduction',
@@ -2805,10 +3028,10 @@ my %base64coord = (
2805
3028
  Name => 'VRMode',
2806
3029
  PrintConv => {
2807
3030
  0 => 'Off',
2808
- 1 => 'Sport',
2809
- 3 => 'Normal',
3031
+ 1 => 'Normal', #39 (was 'Sport')
3032
+ 3 => 'Sport', #39 (was 'Normal')
2810
3033
  },
2811
- %infoZSeries
3034
+ %infoZSeries,
2812
3035
  },{
2813
3036
  Name => 'VRMode',
2814
3037
  PrintConv => {
@@ -2819,6 +3042,13 @@ my %base64coord = (
2819
3042
  },
2820
3043
  }],
2821
3044
  # 7 - values: 0, 1
3045
+ 8 => { #39
3046
+ Name => 'VRType',
3047
+ PrintConv => {
3048
+ 2 => 'In-body', # (IBIS)
3049
+ 3 => 'In-body + Lens', # (IBIS + VR)
3050
+ },
3051
+ },
2822
3052
  );
2823
3053
 
2824
3054
  # Face detection information - PH (S8100)
@@ -3351,8 +3581,10 @@ my %base64coord = (
3351
3581
  sprintf("%s%.2d:%.2d", $sign, $h, abs($val)-60*$h);
3352
3582
  },
3353
3583
  PrintConvInv => q{
3354
- $val =~ /([-+]?)(\d+):(\d+)/ or return undef;
3355
- return $1 . ($2 * 60 + $3);
3584
+ $val =~ /Z$/ and return 0;
3585
+ $val =~ /([-+])(\d{1,2}):?(\d{2})$/ and return $1 . ($2 * 60 + $3);
3586
+ $val =~ /^(\d{2})(\d{2})$/ and return $1 * 60 + $2;
3587
+ return undef;
3356
3588
  },
3357
3589
  },
3358
3590
  2 => {
@@ -3569,7 +3801,6 @@ my %base64coord = (
3569
3801
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
3570
3802
  DATAMEMBER => [ 0, 4, 6 ],
3571
3803
  NOTES => "These tags are written by Nikon DSLR's which have the live view feature.",
3572
- # NOTE: Must set ByteOrder in SubDirectory if any multi-byte integer tags added
3573
3804
  0 => {
3574
3805
  Name => 'AFInfo2Version',
3575
3806
  Format => 'undef[4]',
@@ -3680,7 +3911,7 @@ my %base64coord = (
3680
3911
  { #PH/JD
3681
3912
  Name => 'PrimaryAFPoint',
3682
3913
  # PrimaryAFPoint may only be valid for PhaseDetect - certainly true on the D6, possibly other bodies? (ref 28)
3683
- Condition => '$$self{PhaseDetectAF} < 2 and $$self{AFInfo2Version} ne "0301"',
3914
+ Condition => '$$self{PhaseDetectAF} < 2 and $$self{AFInfo2Version} !~ /^03/',
3684
3915
  Notes => q{
3685
3916
  models with 51-point AF -- 5 rows (A-E) and 11 columns (1-11): D3, D3S, D3X,
3686
3917
  D4, D4S, D300, D300S, D700, D800, D800e and D810
@@ -3786,22 +4017,6 @@ my %base64coord = (
3786
4017
  1 => 'E9 (Center)',
3787
4018
  },
3788
4019
  },
3789
- { #PH (Z7) (NC)
3790
- Name => 'PrimaryAFPoint',
3791
- Condition => '$$self{PhaseDetectAF} == 8 and $$self{AFInfo2Version} =~ /^03/',
3792
- Notes => q{
3793
- Nikon models with 493-point AF -- 17 rows (A-Q) and 29 columns (1-29), I15
3794
- at the center
3795
- },
3796
- PrintConv => {
3797
- 0 => '(none)',
3798
- 246 => 'I15 (Center)',
3799
- OTHER => sub {
3800
- my ($val, $inv) = @_;
3801
- return GetAFPointGrid($val, 29, $inv);
3802
- },
3803
- },
3804
- },
3805
4020
  {
3806
4021
  Name => 'PrimaryAFPoint',
3807
4022
  Condition => '$$self{AFInfo2Version} eq "0100"',
@@ -3815,7 +4030,7 @@ my %base64coord = (
3815
4030
  8 => [
3816
4031
  { #JD/PH
3817
4032
  Name => 'AFPointsUsed',
3818
- Condition => '$$self{PhaseDetectAF} < 2 and $$self{AFInfo2Version} ne "0301"',
4033
+ Condition => '$$self{PhaseDetectAF} < 2 and $$self{AFInfo2Version} !~ /^03/',
3819
4034
  Notes => q{
3820
4035
  models with 51-point AF -- 5 rows: A1-9, B1-11, C1-11, D1-11, E1-9. Center
3821
4036
  point is C6
@@ -3919,33 +4134,78 @@ my %base64coord = (
3919
4134
  PrintConv => sub { PrintAFPoints(shift, \%afPoints153); },
3920
4135
  PrintConvInv => sub { PrintAFPointsInv(shift, \%afPoints153); },
3921
4136
  },
3922
- { #38 (Z6/Z7/Z50)
3923
- Name => 'AFPointsUsed',
3924
- Condition => '$$self{PhaseDetectAF} == 8 and $$self{Model} =~ /^NIKON Z/',
3925
- Notes => q{
3926
- models with 81-selectable point AF -- 9 rows (A-I) and 9 columns (1-9) for
3927
- phase detect AF points. Center point is E5
3928
- },
3929
- Format => 'undef[13]',
3930
- ValueConv => 'join(" ", unpack("H2"x13, $val))',
3931
- ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
3932
- PrintConv => sub { PrintAFPoints(shift, \%afPoints81); },
3933
- PrintConvInv => sub { PrintAFPointsInv(shift, \%afPoints81); },
3934
- },
3935
4137
  { #PH
3936
4138
  Name => 'AFPointsUsed',
3937
4139
  # version 301 uses a separate field at offset 0x0a for this tag (ref 28)
3938
- Condition => '$$self{AFInfo2Version} ne "0301"',
4140
+ Condition => '$$self{AFInfo2Version} !~ /^03/',
3939
4141
  Format => 'undef[7]',
3940
4142
  ValueConv => 'join(" ", unpack("H2"x7, $val))',
3941
4143
  ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
3942
4144
  PrintConv => '"Unknown ($val)"',
3943
4145
  PrintConvInv => '$val=~s/Unknown \\((.*)\\)/$1/; $val',
3944
4146
  },
4147
+ { #PH
4148
+ Name => 'PrimaryAFPoint',
4149
+ Condition => '$$self{PhaseDetectAF} == 1 and $$self{AFInfo2Version} =~ /^03/',
4150
+ Notes => 'newer models with 51-point AF',
4151
+ PrintConvColumns => 5,
4152
+ PrintConv => {
4153
+ 0 => '(none)',
4154
+ %afPoints51,
4155
+ 1 => 'C6 (Center)', # (add " (Center)" to central point)
4156
+ },
4157
+ },
4158
+ { #PH (Z7)
4159
+ Name => 'PrimaryAFPoint',
4160
+ Condition => '$$self{PhaseDetectAF} == 8 and $$self{AFInfo2Version} =~ /^03/',
4161
+ PrintConv => {
4162
+ 0 => '(none)',
4163
+ %afPoints81,
4164
+ 1 => 'E5 (Center)', # (add " (Center)" to central point)
4165
+ },
4166
+ },
4167
+ # this was wrong, but keep the code as a comment in case it may be useful later
4168
+ #{ #PH (Z7) (NC)
4169
+ # Name => 'PrimaryAFPoint',
4170
+ # Condition => '$$self{PhaseDetectAF} == 8 and $$self{AFInfo2Version} =~ /^03/',
4171
+ # Notes => q{
4172
+ # Nikon models with 493-point AF -- 17 rows (A-Q) and 29 columns (1-29), I15
4173
+ # at the center
4174
+ # },
4175
+ # PrintConv => {
4176
+ # 0 => '(none)',
4177
+ # 246 => 'I15 (Center)',
4178
+ # OTHER => sub {
4179
+ # my ($val, $inv) = @_;
4180
+ # return GetAFPointGrid($val, 29, $inv);
4181
+ # },
4182
+ # },
4183
+ #},
3945
4184
  ],
3946
- 0x0a => { #28 (D6) in any of the 3 Group modes on the D6, the points specify the outer boundaries of the focus point area; otherwise the tag value is consistent with other Nikon bodies
3947
- Name => 'AFPointsUsed',
3948
- Condition => '$$self{AFInfo2Version} eq "0301" and $$self{PhaseDetectAF} == 9',
4185
+ 0x0a => [{ #PH (D780)
4186
+ Name => 'AFPointsUsed',
4187
+ Condition => '$$self{PhaseDetectAF} == 1 and $$self{AFInfo2Version} =~ /^03/',
4188
+ Notes => 'newer models with 51-point AF',
4189
+ Format => 'undef[7]',
4190
+ ValueConv => 'join(" ", unpack("H2"x7, $val))',
4191
+ ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
4192
+ PrintConv => sub { PrintAFPoints(shift, \%afPoints51); },
4193
+ PrintConvInv => sub { PrintAFPointsInv(shift, \%afPoints51); },
4194
+ },{ #38 (Z6/Z7/Z50)
4195
+ Name => 'AFPointsUsed',
4196
+ Condition => '$$self{PhaseDetectAF} == 8 and $$self{AFInfo2Version} =~ /^03/',
4197
+ Notes => q{
4198
+ models with 81-selectable point AF -- 9 rows (A-I) and 9 columns (1-9) for
4199
+ phase detect AF points. Center point is E5
4200
+ },
4201
+ Format => 'undef[11]',
4202
+ ValueConv => 'join(" ", unpack("H2"x11, $val))',
4203
+ ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
4204
+ PrintConv => sub { PrintAFPoints(shift, \%afPoints81); },
4205
+ PrintConvInv => sub { PrintAFPointsInv(shift, \%afPoints81); },
4206
+ },{ #28 (D6) in any of the 3 Group modes on the D6, the points specify the outer boundaries of the focus point area; otherwise the tag value is consistent with other Nikon bodies
4207
+ Name => 'AFPointsUsed',
4208
+ Condition => '$$self{PhaseDetectAF} == 9 and $$self{AFInfo2Version} =~ /^03/',
3949
4209
  Notes => q{
3950
4210
  models with 105-point AF -- 7 rows (A-G) and 15 columns (1-15). Center
3951
4211
  point is D8
@@ -3955,7 +4215,7 @@ my %base64coord = (
3955
4215
  ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
3956
4216
  PrintConv => sub { PrintAFPoints(shift, \%afPoints105); },
3957
4217
  PrintConvInv => sub { PrintAFPointsInv(shift, \%afPoints105); },
3958
- },
4218
+ }],
3959
4219
  0x10 => { #PH (D90 and D5000)
3960
4220
  Name => 'AFImageWidth',
3961
4221
  Condition => '$$self{AFInfo2Version} eq "0100"',
@@ -5003,9 +5263,11 @@ my %nikonFocalConversions = (
5003
5263
  27 => 'Nikkor Z MC 50mm f/2.8', #IB
5004
5264
  28 => 'Nikkor Z 100-400mm f/4.5-5.6 VR S', #28
5005
5265
  29 => 'Nikkor Z 28mm f/2.8', #IB
5006
- 30 => 'Nikkor Z 400mm f/2.8 TC VR S', #28
5007
- 31 => 'Nikkor Z 24-120 f/4', #28
5008
- 32 => 'Nikkor Z 800mm f/6.3 VR S', #28
5266
+ 30 => 'Nikkor Z 400mm f/2.8 TC VR S', #28
5267
+ 31 => 'Nikkor Z 24-120 f/4', #28
5268
+ 32 => 'Nikkor Z 800mm f/6.3 VR S', #28
5269
+ 36 => 'Nikkor Z 400mm f/4.5 VR S', #IB
5270
+ 39 => 'Nikkor Z 17-28mm f/2.8', #IB
5009
5271
  },
5010
5272
  },
5011
5273
  0x35 => { #28
@@ -5049,31 +5311,31 @@ my %nikonFocalConversions = (
5049
5311
  0x4c => { #28
5050
5312
  Name => 'FocusDistanceRangeWidth', #reflects the number of discrete absolute lens positions that are mapped to the reported FocusDistance. Will be 1 near CFD reflecting very narrow focus distance bands (i.e., quite accurate). Near Infinity will be something like 32. Note: 0 at infinity.
5051
5313
  Format => 'int8u',
5052
- Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1',
5314
+ Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1',
5053
5315
  RawConv => '$$self{FocusDistanceRangeWidth} = $val',
5054
5316
  Unknown => 1,
5055
5317
  },
5056
5318
  0x4e => { #28
5057
- Name => 'FocusDistance',
5319
+ Name => 'FocusDistance',
5058
5320
  Format => 'int16u',
5059
- Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1',
5321
+ Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1',
5060
5322
  RawConv => '$val = $val/256', # 1st byte is the fractional component. This byte was not previously considered in the legacy calculation (which only used the 2nd byte). When 2nd byte < 80; distance is < 1 meter
5061
5323
  ValueConv => '0.01 * 10**($val/40)', # in m
5062
5324
  ValueConvInv => '$val>0 ? 40*log($val*100)/log(10) : 0',
5063
5325
  PrintConv => q{
5064
- (defined $$self{FocusDistanceRangeWidth} and not $$self{FocusDistanceRangeWidth}) ? "Inf" : $val < 1 ? $val < 0.35 ? sprintf("%.4f m", $val): sprintf("%.3f m", $val): sprintf("%.2f m", $val), #distances less than 35mm are quite accurate with increasingly less precision past 1m
5326
+ (defined $$self{FocusDistanceRangeWidth} and not $$self{FocusDistanceRangeWidth}) ? "Inf" : $val < 1 ? $val < 0.35 ? sprintf("%.4f m", $val): sprintf("%.3f m", $val): sprintf("%.2f m", $val), #distances less than 35mm are quite accurate with increasingly less precision past 1m
5065
5327
  },
5066
5328
  },
5067
5329
  0x56 => { #28
5068
5330
  Name => 'LensDriveEnd', # byte contains: 1 at CFD/MOD; 2 at Infinity; 0 otherwise
5069
- Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1',
5331
+ Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1',
5070
5332
  Format => 'int8u',
5071
5333
  RawConv => 'unless (defined $$self{FocusDistanceRangeWidth} and not $$self{FocusDistanceRangeWidth}) { if ($val == 0 ) {$$self{LensDriveEnd} = "No"} else { $$self{LensDriveEnd} = "CFD"}; } else{ $$self{LensDriveEnd} = "Inf"}',
5072
5334
  Unknown => 1,
5073
5335
  },
5074
5336
  0x5a => { #28
5075
5337
  Name => 'LensPositionAbsolute', # <=0 at infinity. Typical value at CFD might be 58000. Only valid for Z-mount lenses.
5076
- Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1',
5338
+ Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1',
5077
5339
  Format => 'int32s',
5078
5340
  Unknown => 1,
5079
5341
  },
@@ -5478,14 +5740,14 @@ my %nikonFocalConversions = (
5478
5740
  },
5479
5741
  0x27d => {
5480
5742
  Name => 'ShutterCount',
5481
- Condition => '$$self{FirmwareVersion} =~ /^1.01/',
5743
+ Condition => '$$self{FirmwareVersion} =~ /^1\.01/',
5482
5744
  Notes => 'firmware 1.10',
5483
5745
  Format => 'int32u',
5484
5746
  Priority => 0,
5485
5747
  },
5486
5748
  0x27f => {
5487
5749
  Name => 'ShutterCount',
5488
- Condition => '$$self{FirmwareVersion} =~ /^2.0/',
5750
+ Condition => '$$self{FirmwareVersion} =~ /^2\.0/',
5489
5751
  Notes => 'firmware 2.00, 2.01 and 2.02',
5490
5752
  Format => 'int32u',
5491
5753
  Priority => 0,
@@ -7379,7 +7641,7 @@ my %nikonFocalConversions = (
7379
7641
  # (moves around too much and doesn't fit cleanly in the offset table)
7380
7642
  #0x38be => {
7381
7643
  # Name => 'Rotation',
7382
- # Condition => '$$self{FirmwareVersion} =~ /^1.0/',
7644
+ # Condition => '$$self{FirmwareVersion} =~ /^1\.0/',
7383
7645
  # Mask => 0x30,
7384
7646
  # PrintConv => {
7385
7647
  # 0 => 'Horizontal',
@@ -7685,7 +7947,7 @@ my %nikonFocalConversions = (
7685
7947
  },
7686
7948
  0x189d => { #PH (NC)
7687
7949
  Name => 'CustomSettingsD4S',
7688
- Condition => '$$self{FirmwareVersion} =~ /^1.00/',
7950
+ Condition => '$$self{FirmwareVersion} =~ /^1\.00/',
7689
7951
  Notes => 'firmware version 1.00',
7690
7952
  Format => 'undef[56]',
7691
7953
  SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsD4' },
@@ -7693,7 +7955,7 @@ my %nikonFocalConversions = (
7693
7955
  0x18c2 => { # CSf1-c (no idea why it is so far away from the rest of the settings)
7694
7956
  Name => 'MultiSelectorLiveViewMode',
7695
7957
  Groups => { 1 => 'NikonCustom' },
7696
- Condition => '$$self{FirmwareVersion} !~ /^1.00/',
7958
+ Condition => '$$self{FirmwareVersion} !~ /^1\.00/',
7697
7959
  Mask => 0xc0,
7698
7960
  PrintConv => {
7699
7961
  0 => 'Reset',
@@ -7794,7 +8056,7 @@ my %nikonFocalConversions = (
7794
8056
  },
7795
8057
  0x193d => {
7796
8058
  Name => 'CustomSettingsD4S',
7797
- Condition => '$$self{FirmwareVersion} !~ /^1.00/',
8059
+ Condition => '$$self{FirmwareVersion} !~ /^1\.00/',
7798
8060
  Notes => 'firmware version 1.01',
7799
8061
  Format => 'undef[56]',
7800
8062
  SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsD4' },
@@ -8203,14 +8465,26 @@ my %nikonFocalConversions = (
8203
8465
  # account for variable location of menu settings data
8204
8466
  Hook => '$varSize = $$self{MenuSettingsZ9Offset} - 0xec4b',
8205
8467
  },
8206
- 0xec4b => {
8207
- Name => 'MenuSettingsZ9',
8208
- Format => 'undef[1646]',
8209
- SubDirectory => {
8210
- TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ9',
8468
+ 0xec4b => [
8469
+ {
8470
+ Name => 'MenuSettingsZ9',
8471
+ Condition => '$$self{FirmwareVersion} lt "03.00"',
8472
+ Format => 'undef[1646]',
8473
+ Notes => 'Firmware versions 2.11 and earlier',
8474
+ SubDirectory => {
8475
+ TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ9',
8476
+ },
8211
8477
  },
8212
- },
8213
- # note: DecryptLen currently set to 0xec4b + 1646
8478
+ {
8479
+ Name => 'MenuSettingsZ9',
8480
+ Notes => 'Firmware versions 3.0 and later',
8481
+ Format => 'undef[1948]',
8482
+ SubDirectory => {
8483
+ TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ9Firmware3',
8484
+ },
8485
+ },
8486
+ ],
8487
+ # note: DecryptLen currently set to 0xec4b + 2196
8214
8488
  );
8215
8489
 
8216
8490
  %Image::ExifTool::Nikon::MenuSettingsZ7II = (
@@ -8318,8 +8592,8 @@ my %nikonFocalConversions = (
8318
8592
  PrintConv => '$val>0.99 ? "Full" : sprintf("%.1f%%",$val*100)',
8319
8593
  PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
8320
8594
  },
8321
- 346 => { Name => 'FlashWirelessOption', PrintConv => \%flashWirelessOptionZ7, Unknown => 1},
8322
- 348 => { Name => 'FlashRemoteControl', PrintConv => \%flashRemoteControlZ7, Unknown => 1},
8595
+ 346 => { Name => 'FlashWirelessOption', PrintConv => \%flashWirelessOptionZ7, Unknown => 1 },
8596
+ 348 => { Name => 'FlashRemoteControl', PrintConv => \%flashRemoteControlZ7, Unknown => 1 },
8323
8597
  352 => {
8324
8598
  Name => 'FlashMasterControlMode', # tag name chosen for compatibility with those found in FlashInfo0102 & FlashInfo0103
8325
8599
  RawConv => '$$self{FlashGroupOptionsMasterMode} = $val',
@@ -8344,12 +8618,12 @@ my %nikonFocalConversions = (
8344
8618
  PrintConv => '$val>0.99 ? "Full" : sprintf("%.1f%%",$val*100)',
8345
8619
  PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
8346
8620
  },
8347
- #360 => {Name => 'FlashGroupAControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupACompensation at 362 and FlashGroupAOutput at 368
8348
- #368 => {Name => 'FlashGroupBControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupBCompensation at 370 and FlashGroupBOutput at 374
8349
- #376 => {Name => 'FlashGroupCControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupCCompensation at 378 and FlashGroupCOutput at 382
8350
- #384 => {Name => 'FlashGroupDControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupDCompensation at 386 and FlashGroupDOutput at 390
8351
- #392 => {Name => 'FlashGroupEControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupECompensation at 394 and FlashGroupEOutput at 398
8352
- #400 => {Name => 'FlashGroupFControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupFCompensation at 402 and FlashGroupFOutput at 406
8621
+ #360 => { Name => 'FlashGroupAControlMode' }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupACompensation at 362 and FlashGroupAOutput at 368
8622
+ #368 => { Name => 'FlashGroupBControlMode' }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupBCompensation at 370 and FlashGroupBOutput at 374
8623
+ #376 => { Name => 'FlashGroupCControlMode' }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupCCompensation at 378 and FlashGroupCOutput at 382
8624
+ #384 => { Name => 'FlashGroupDControlMode' }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupDCompensation at 386 and FlashGroupDOutput at 390
8625
+ #392 => { Name => 'FlashGroupEControlMode' }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupECompensation at 394 and FlashGroupEOutput at 398
8626
+ #400 => { Name => 'FlashGroupFControlMode' }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupFCompensation at 402 and FlashGroupFOutput at 406
8353
8627
  #434 => FocusMode
8354
8628
  #436 => AFAreaMode
8355
8629
  #438 => VibrationReduction
@@ -8357,8 +8631,8 @@ my %nikonFocalConversions = (
8357
8631
  #444 => BracketProgram
8358
8632
  #446 => BracketIncrement
8359
8633
  #463 => SilentPhotography
8360
- 502 => { Name => 'MovieFrameSize', PrintConv => \%movieFrameSizeZ9, Unknown => 1},
8361
- 504 => { Name => 'MovieFrameRate', PrintConv => \%movieFrameRateZ7, Unknown => 1},
8634
+ 502 => { Name => 'MovieFrameSize', PrintConv => \%movieFrameSizeZ9, Unknown => 1 },
8635
+ 504 => { Name => 'MovieFrameRate', PrintConv => \%movieFrameRateZ7, Unknown => 1 },
8362
8636
  506 => {
8363
8637
  Name => 'MovieSlowMotion',
8364
8638
  Unknown => 1,
@@ -8387,9 +8661,9 @@ my %nikonFocalConversions = (
8387
8661
  PrintConv => \%iSOAutoHiLimitZ7,
8388
8662
  },
8389
8663
  #520 => MovieWhiteBalanceSameAsPhoto
8390
- 568 => { Name => 'MovieActiveD-Lighting', PrintConv => \%activeDLightingZ7, Unknown => 1},
8391
- 572 => { Name => 'MovieHighISONoiseReduction', PrintConv => \%offLowNormalHighZ7, Unknown => 1},
8392
- 574 => { Name => 'MovieVignetteControl', PrintConv => \%offLowNormalHighZ7, Unknown => 1},
8664
+ 568 => { Name => 'MovieActiveD-Lighting', PrintConv => \%activeDLightingZ7, Unknown => 1 },
8665
+ 572 => { Name => 'MovieHighISONoiseReduction', PrintConv => \%offLowNormalHighZ7, Unknown => 1 },
8666
+ 574 => { Name => 'MovieVignetteControl', PrintConv => \%offLowNormalHighZ7, Unknown => 1 },
8393
8667
  576 => {
8394
8668
  Name => 'MovieVignetteControlSameAsPhoto',
8395
8669
  Unknown => 1,
@@ -8405,7 +8679,7 @@ my %nikonFocalConversions = (
8405
8679
  Unknown => 1,
8406
8680
  PrintConv => \%offOn
8407
8681
  },
8408
- 584 => { Name => 'MovieFocusMode', PrintConv => \%focusModeZ7, Unknown => 1},
8682
+ 584 => { Name => 'MovieFocusMode', PrintConv => \%focusModeZ7, Unknown => 1 },
8409
8683
  #586 => MovieAFAreaMode
8410
8684
  590 => {
8411
8685
  Name => 'MovieVibrationReduction',
@@ -8445,11 +8719,7 @@ my %nikonFocalConversions = (
8445
8719
  140 => {
8446
8720
  Name => 'MultipleExposureMode',
8447
8721
  RawConv => '$$self{MultipleExposureMode} = $val',
8448
- PrintConv => {
8449
- 0 => 'Off',
8450
- 1 => 'On (Series)',
8451
- 2 => 'On',
8452
- },
8722
+ PrintConv => \%multipleExposureModeZ9,
8453
8723
  },
8454
8724
  142 => {Name => 'MultiExposureShots', Condition => '$$self{MultipleExposureMode} != 0' }, #range 2-9
8455
8725
  188 => {
@@ -8485,27 +8755,11 @@ my %nikonFocalConversions = (
8485
8755
  PrintConv => \%offOn,
8486
8756
  Condition => '$$self{FocusShiftShooting} > 0',
8487
8757
  },
8488
- 274 => {
8489
- Name => 'PhotoShootingMenuBank',
8490
- PrintConv => {
8491
- 0 => 'A',
8492
- 1 => 'B',
8493
- 2 => 'C',
8494
- 3 => 'D',
8495
- },
8496
- },
8497
- 276 => { Name => 'ExtendedMenuBanks', PrintConv => \%offOn, }, #single tag from both Photo & Video menus
8498
- 308 => {
8499
- Name => 'PhotoShootingMenuBankImageArea',
8500
- PrintConv => {
8501
- 0 => 'FX',
8502
- 1 => 'DX',
8503
- 4 => '16:9',
8504
- 8 => '1:1',
8505
- },
8506
- },
8758
+ 274 => { Name => 'PhotoShootingMenuBank', PrintConv => \%banksZ9 },
8759
+ 276 => { Name => 'ExtendedMenuBanks', PrintConv => \%offOn }, #single tag from both Photo & Video menus
8760
+ 308 => { Name => 'PhotoShootingMenuBankImageArea', PrintConv => \%imageAreaZ9 },
8507
8761
  #310 ImageQuality
8508
- 322 => { Name => 'AutoISO', PrintConv => \%offOn, },
8762
+ 322 => { Name => 'AutoISO', PrintConv => \%offOn },
8509
8763
  324 => {
8510
8764
  Name => 'ISOAutoHiLimit',
8511
8765
  Format => 'int16u',
@@ -8527,58 +8781,7 @@ my %nikonFocalConversions = (
8527
8781
  Name => 'ISOAutoShutterTime', #shutter speed is 2 ** (-$val/24)
8528
8782
  ValueConv => '$val / 8',
8529
8783
  Format => 'int16s',
8530
- PrintConv => {
8531
- -15 => 'Auto', #z9 firmware 1.00 maps both 'Auto' and '30 s' to -15
8532
- -12 => '15 s',
8533
- -9 => '8 s',
8534
- -6 => '4 s',
8535
- -3 => '2 s',
8536
- 0 => '1 s',
8537
- 1 => '1/1.3 s',
8538
- 2 => '1/1.6 s',
8539
- 3 => '1/2 s',
8540
- 4 => '1/2.5 s',
8541
- 5 => '1/3 s',
8542
- 6 => '1/4 s',
8543
- 7 => '1/5 s',
8544
- 8 => '1/6 s',
8545
- 9 => '1/8 s',
8546
- 10 => '1/10 s',
8547
- 11 => '1/13 s',
8548
- 12 => '1/15 s',
8549
- 13 => '1/20 s',
8550
- 14 => '1/25 s',
8551
- 15 => '1/30 s',
8552
- 16 => '1/40 s',
8553
- 17 => '1/50 s',
8554
- 18 => '1/60 s',
8555
- 19 => '1/80 s',
8556
- 20 => '1/100 s',
8557
- 21 => '1/120 s',
8558
- 22 => '1/160 s',
8559
- 23 => '1/200 s',
8560
- 24 => '1/250 s',
8561
- 25 => '1/320 s',
8562
- 26 => '1/400 s',
8563
- 27 => '1/500 s',
8564
- 28 => '1/640 s',
8565
- 29 => '1/800 s',
8566
- 30 => '1/1000 s',
8567
- 31 => '1/1250 s',
8568
- 32 => '1/1600 s',
8569
- 33 => '1/2000 s',
8570
- 34 => '1/2500 s',
8571
- 35 => '1/3200 s',
8572
- 36 => '1/4000 s',
8573
- 37 => '1/5000 s',
8574
- 37.5 => '1/6000 s',
8575
- 38 => '1/6400 s',
8576
- 39 => '1/8000 s',
8577
- 40 => '1/10000 s',
8578
- 40.5 => '1/12000 s',
8579
- 41 => '1/13000 s',
8580
- 42 => '1/16000 s',
8581
- },
8784
+ PrintConv => \%iSOAutoShutterTimeZ9,
8582
8785
  },
8583
8786
  #336 WhiteBalance
8584
8787
  #406 PictureControl
@@ -8587,8 +8790,8 @@ my %nikonFocalConversions = (
8587
8790
  #412 => { Name => 'NoiseReduction', PrintConv => \%offOn }, #Long Exposure Noise Reduction
8588
8791
  #414 HighISONoiseReduction
8589
8792
  #414 VignetteControl
8590
- 416 => { Name => 'MovieVignetteControl', PrintConv => \%offLowNormalHighZ7, Unknown => 1},
8591
- 418 => { Name => 'DiffractionCompensation', PrintConv => \%offOn }, #value can be set from both the Photo Shoot Menu and the Video Shooting Menu
8793
+ 416 => { Name => 'MovieVignetteControl', PrintConv => \%offLowNormalHighZ7, Unknown => 1 },
8794
+ 418 => { Name => 'DiffractionCompensation', PrintConv => \%offOn }, #value can be set from both the Photo Shoot Menu and the Video Shooting Menu
8592
8795
  #419 AutoDistortionControl #value can be set from both the Photo Shoot Menu and the Video Shooting Menu
8593
8796
  420 => { Name => 'FlickerReductionShooting', PrintConv => \%offOn },
8594
8797
  #422 MeteringMode
@@ -8623,94 +8826,39 @@ my %nikonFocalConversions = (
8623
8826
  PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
8624
8827
  },
8625
8828
  #442 flash wirelss control 0=> 'Off' 1=> 'CMD'
8626
- 444 => { Name => 'FlashRemoteControl', PrintConv => \%flashRemoteControlZ7, Unknown => 1},
8627
- 456 => { Name => 'FlashWirelessOption', PrintConv => \%flashWirelessOptionZ7, Unknown => 1},
8829
+ 444 => { Name => 'FlashRemoteControl', PrintConv => \%flashRemoteControlZ7, Unknown => 1 },
8830
+ 456 => { Name => 'FlashWirelessOption', PrintConv => \%flashWirelessOptionZ7, Unknown => 1 },
8628
8831
  #526 FocusMode
8629
- 528 => {
8630
- Name => 'AFAreaMode',
8631
- PrintConv => {
8632
- 1 => 'Single',
8633
- 2 => 'Dynamic',
8634
- 3 => 'Wide (S)',
8635
- 4 => 'Wide (L)',
8636
- 5 => '3D',
8637
- 6 => 'Auto',
8638
- 12 => 'Wide (C1)',
8639
- 13 => 'Wide (C2)',
8640
- },
8641
- },
8642
- 530 => { Name => 'VRMode', PrintConv => \%vRModeZ9},
8832
+ 528 => { Name => 'AFAreaMode',PrintConv => \%aFAreaModeZ9 },
8833
+ 530 => { Name => 'VRMode', PrintConv => \%vRModeZ9 },
8643
8834
  534 => {
8644
8835
  Name => 'BracketSet',
8645
8836
  RawConv => '$$self{BracketSet} = $val',
8646
- PrintConv => {
8647
- 0 => 'AE/Flash',
8648
- 1 => 'AE',
8649
- 2 => 'Flash',
8650
- 3 => 'White Balance',
8651
- 4 => 'Active-D Lighting',
8652
- },
8837
+ PrintConv => \%bracketSetZ9,
8653
8838
  },
8654
8839
  536 => {
8655
8840
  Name => 'BracketProgram',
8656
8841
  Condition => '$$self{BracketSet} < 3',
8657
8842
  Notes => 'AE and/or Flash Bracketing',
8658
- PrintConv => {
8659
- 0 => 'Disabled',
8660
- 2 => '2F',
8661
- 3 => '3F',
8662
- 4 => '4F',
8663
- 5 => '5F',
8664
- 7 => '7F',
8665
- 9 => '9F',
8666
- },
8843
+ PrintConv => \%bracketProgramZ9,
8667
8844
  },
8668
8845
  538 => {
8669
8846
  Name => 'BracketIncrement',
8670
8847
  Condition => '$$self{BracketSet} < 3',
8671
8848
  Notes => 'AE and/or Flash Bracketing',
8672
- PrintConv => {
8673
- 0 => '0.3',
8674
- #1 => '0.5',
8675
- 2 => '0.7',
8676
- 3 => '1.0',
8677
- 4 => '2.0',
8678
- 5 => '3.0',
8679
- },
8849
+ PrintConv => \%bracketIncrementZ9,
8680
8850
  },
8681
8851
  #544 BracketProgram for ADL
8682
- 556 => {
8683
- Name => 'SecondarySlotFunction',
8684
- PrintConv => {
8685
- 0 => 'Overflow',
8686
- 1 => 'Backup',
8687
- 2 => 'NEF Primary + JPG Secondary',
8688
- 3 => 'JPG Primary + JPG Secondary',
8689
- },
8690
- },
8691
- 572 => { Name => 'DXCropAlert', PrintConv => \%offOn, },
8692
- 574 => { Name => 'SubjectDetection', PrintConv => \%subjectDetectionZ9},
8852
+ 556 => { Name => 'SecondarySlotFunction', PrintConv => \%secondarySlotFunctionZ9 },
8853
+ 572 => { Name => 'DXCropAlert', PrintConv => \%offOn },
8854
+ 574 => { Name => 'SubjectDetection', PrintConv => \%subjectDetectionZ9 },
8693
8855
  604 => {
8694
8856
  Name => 'MovieImageArea',
8695
8857
  Unknown => 1,
8696
- Mask => 0x01, #without the mask 4 => 'FX' 5 => DX only the 2nd Z-series field encountered with a mask.
8697
- PrintConv => {
8698
- 0 => 'FX',
8699
- 1 => 'DX',
8700
- },
8701
- },
8702
- 614 => {
8703
- Name => 'MovieType',
8704
- Unknown => 1,
8705
- PrintConv => {
8706
- 1 => 'H.265 8-bit (MP4)',
8707
- 2 => 'H.265 8-bit (MOV)',
8708
- 3 => 'H.265 10-bit (MOV)',
8709
- 4 => 'ProRes 422 HQ 10-bit (MOV)',
8710
- 5 => 'ProRes RAW HQ 12-bit (MOV)',
8711
- 6 => 'NRAW 12-bit (NEV)'
8712
- },
8858
+ Mask => 0x01, # without the mask 4 => 'FX', 5 => DX. only the 2nd Z-series field encountered with a mask
8859
+ PrintConv => \%imageAreaZ9b,
8713
8860
  },
8861
+ 614 => { Name => 'MovieType', PrintConv => \%movieTypeZ9, Unknown => 1 },
8714
8862
  616 => {
8715
8863
  Name => 'MovieISOAutoHiLimit',
8716
8864
  Format => 'int16u',
@@ -8719,115 +8867,44 @@ my %nikonFocalConversions = (
8719
8867
  ValueConvInv => '8 * ($val + 104)',
8720
8868
  PrintConv => \%iSOAutoHiLimitZ7,
8721
8869
  },
8722
- 618 => { Name => 'MovieISOAutoControlManualMode', PrintConv => \%offOn, Unknown => 1},
8870
+ 618 => { Name => 'MovieISOAutoControlManualMode', PrintConv => \%offOn, Unknown => 1 },
8723
8871
  620 => {
8724
8872
  Name => 'MovieISOAutoManualMode',
8725
8873
  Format => 'int16u',
8726
8874
  Unknown => 1,
8727
8875
  ValueConv => '($val-104)/8',
8728
- ValueConvInv => '8 * ($val + 104)',
8876
+ ValueConvInv => '8 * ($val + 104)',
8729
8877
  PrintConv => \%iSOAutoHiLimitZ7,
8730
8878
  },
8731
- 696 => { Name => 'MovieActiveD-Lighting', PrintConv => \%activeDLightingZ7, Unknown => 1},
8732
- 698 => { Name => 'MovieHighISONoiseReduction', PrintConv => \%offLowNormalHighZ7, Unknown => 1},
8733
- 704 => {
8734
- Name => 'MovieFlickerReduction',
8735
- PrintConv => {
8736
- 0 => 'Auto',
8737
- 1 => '50Hz',
8738
- 2 => '60Hz',
8739
- },
8740
- },
8741
- 706 => { Name => 'MovieMeteringMode', PrintConv => \%meteringModeZ7, , Unknown => 1},
8742
- 708 => { Name => 'MovieFocusMode', PrintConv => \%focusModeZ7, Unknown => 1},
8743
- 710 => {
8744
- Name => 'MovieAFAreaMode',
8745
- PrintConv => {
8746
- 1 => 'Single',
8747
- 3 => 'Wide (S)',
8748
- 4 => 'Wide (L)',
8749
- 6 => 'Auto',
8750
- 11 => 'Subject Tracking',
8751
- },
8752
- },
8753
- 712 => { Name => 'MovieVRMode', PrintConv => \%vRModeZ9, Unknown => 1},
8754
- 716 => { Name => 'MovieElectronicVR', PrintConv => \%offOn, Unknown => 1 }, #distinct from MoveieVRMode
8755
- 718 => { Name => 'MovieSoundRecording', PrintConv => { 0 => 'Off', 1 => 'On', 2 => 'On' }, Unknown => 1 }, #not sure why the unusal mapping with 2 => 'On'
8756
- 720 => { Name => 'MicrophoneSensitivity', Unknown => 1}, #1-20
8757
- 722 => { Name => 'MicrophoneAttenuator', PrintConv => \%offOn, Unknown => 1 }, #distinct from MoveieVRMode
8879
+ 696 => { Name => 'MovieActiveD-Lighting', PrintConv => \%activeDLightingZ7, Unknown => 1 },
8880
+ 698 => { Name => 'MovieHighISONoiseReduction', PrintConv => \%offLowNormalHighZ7, Unknown => 1 },
8881
+ 704 => { Name => 'MovieFlickerReduction', PrintConv => \%movieFlickerReductionZ9 },
8882
+ 706 => { Name => 'MovieMeteringMode', PrintConv => \%meteringModeZ7, Unknown => 1 },
8883
+ 708 => { Name => 'MovieFocusMode', PrintConv => \%focusModeZ7, Unknown => 1 },
8884
+ 710 => { Name => 'MovieAFAreaMode', PrintConv => \%aFAreaModeZ9 },
8885
+ 712 => { Name => 'MovieVRMode', PrintConv => \%vRModeZ9, Unknown => 1 },
8886
+ 716 => { Name => 'MovieElectronicVR', PrintConv => \%offOn, Unknown => 1 }, #distinct from MoveieVRMode
8887
+ 718 => { Name => 'MovieSoundRecording', PrintConv => { 0 => 'Off', 1 => 'Auto', 2 => 'Manual' }, Unknown => 1 },
8888
+ 720 => { Name => 'MicrophoneSensitivity', Unknown => 1 }, #1-20
8889
+ 722 => { Name => 'MicrophoneAttenuator', PrintConv => \%offOn, Unknown => 1 }, #distinct from MoveieVRMode
8758
8890
  724 => { Name => 'MicrophoneFrequencyResponse', PrintConv => { 0 => 'Wide Range', 1 => 'Vocal Range' }, Unknown => 1 },
8759
- 726 => { Name => 'WindNoiseReduction', PrintConv => \%offOn, Unknown => 1 },
8760
- 748 => {
8761
- Name => 'MovieToneMap',
8762
- Unknown => 1,
8763
- PrintConv => {
8764
- 0 => 'SDR',
8765
- 1 => 'HLG',
8766
- 2 => 'N-Log',
8767
- },
8768
- },
8769
- 754 => { Name => 'MovieFrameSize', PrintConv => \%movieFrameSizeZ9, Unknown => 1},
8770
- 756 => { Name => 'MovieFrameRate', PrintConv => \%movieFrameRateZ7, Unknown => 1},
8771
- 762 => { Name => 'MicrophoneJackPower', PrintConv => \%offOn, Unknown => 1 },
8772
- 763 => { Name => 'MovieDXCropAlert', PrintConv => \%offOn, Unknown => 1 },
8773
- 764 => { Name => 'MovieSubjectDetection', PrintConv => \%subjectDetectionZ9, Unknown => 1},
8891
+ 726 => { Name => 'WindNoiseReduction', PrintConv => \%offOn, Unknown => 1 },
8892
+ 748 => { Name => 'MovieToneMap', PrintConv => \%movieToneMapZ9, Unknown => 1 },
8893
+ 754 => { Name => 'MovieFrameSize', PrintConv => \%movieFrameSizeZ9, Unknown => 1 },
8894
+ 756 => { Name => 'MovieFrameRate', PrintConv => \%movieFrameRateZ7, Unknown => 1 },
8895
+ 762 => { Name => 'MicrophoneJackPower', PrintConv => \%offOn, Unknown => 1 },
8896
+ 763 => { Name => 'MovieDXCropAlert', PrintConv => \%offOn, Unknown => 1 },
8897
+ 764 => { Name => 'MovieSubjectDetection', PrintConv => \%subjectDetectionZ9, Unknown => 1 },
8774
8898
  799 => {
8775
8899
  Name => 'CustomSettingsZ9',
8776
8900
  Format => 'undef[608]',
8777
8901
  SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsZ9' },
8778
8902
  },
8779
- 1426 => {
8780
- Name => 'Language',
8781
- Unknown => 1,
8782
- PrintConv => {
8783
- 4 => 'English',
8784
- 5 => 'Spanish',
8785
- 7 => 'French',
8786
- },
8787
- },
8788
- 1428 => {
8789
- Name => 'TimeZone',
8790
- PrintConv => {
8791
- 5 => '+09:00 (Tokyo)',
8792
- 6 => '+08:00 (Beijing, Honk Kong, Sinapore)',
8793
- 10 => '+05:45 (Kathmandu)',
8794
- 11 => '+05:30 (New Dehli)',
8795
- 12 => '+05:00 (Islamabad)',
8796
- 13 => '+04:30 (Kabul)',
8797
- 14 => '+04:00 (Abu Dhabi)',
8798
- 15 => '+03:30 (Tehran)',
8799
- 16 => '+03:00 (Moscow, Nairobi)',
8800
- 17 => '+02:00 (Athens, Helsinki)',
8801
- 18 => '+01:00 (Madrid, Paris, Berlin)',
8802
- 19 => '+00:00 (London)',
8803
- 20 => '-01:00 (Azores)',
8804
- 21 => '-02:00 (Fernando de Noronha)',
8805
- 22 => '-03:00 (Buenos Aires, Sao Paulo)',
8806
- 23 => '-03:30 (Newfoundland)',
8807
- 24 => '-04:00 (Manaus, Caracas)',
8808
- 25 => '-05:00 (New York, Toronto, Lima)',
8809
- 26 => '-06:00 (Chicago, Mexico City)',
8810
- 27 => '-07:00 (Denver)',
8811
- 28 => '-08:00 (Los Angeles, Vancouver)',
8812
- 29 => '-09:00 (Anchorage)',
8813
- 30 => '-10:00 (Hawaii)',
8814
- },
8815
- },
8816
- 1434 => {Name => 'MonitorBrightness', ValueConv => '$val - 5', Unknown => 1}, # settings: -5 to +5
8817
- 1456 => { Name => 'AFFineTune', PrintConv => \%offOn, Unknown => 1 },
8818
- 1552 => {
8819
- Name => 'HDMIOutputResolution',
8820
- PrintConv => {
8821
- 0 => 'Auto',
8822
- 1 => '4320p',
8823
- 2 => '2160p',
8824
- 3 => '1080p',
8825
- #4 => '1080i',
8826
- 5 => '720p',
8827
- #6 => '576p',
8828
- #7 => '480p',
8829
- },
8830
- },
8903
+ 1426 => { Name => 'Language', PrintConv => \%languageZ9, Unknown => 1 },
8904
+ 1428 => { Name => 'TimeZone', PrintConv => \%timeZoneZ9 },
8905
+ 1434 => { Name => 'MonitorBrightness', ValueConv => '$val - 5', Unknown => 1 }, # settings: -5 to +5
8906
+ 1456 => { Name => 'AFFineTune', PrintConv => \%offOn, Unknown => 1 },
8907
+ 1552 => { Name => 'HDMIOutputResolution', PrintConv => \%hDMIOutputResolutionZ9 },
8831
8908
  1565 => { Name => 'SetClockFromLocationData', PrintConv => \%offOn, Unknown => 1 },
8832
8909
  1572 => { Name => 'AirplaneMode', PrintConv => \%offOn, Unknown => 1 },
8833
8910
  1573 => { Name => 'EmptySlotRelease', PrintConv => { 0 => 'Disable Release', 1 => 'Enable Release' }, Unknown => 1 },
@@ -8836,6 +8913,210 @@ my %nikonFocalConversions = (
8836
8913
  1636 => { Name => 'USBPowerDelivery', PrintConv => \%offOn, Unknown => 1 },
8837
8914
  1645 => { Name => 'SensorShield', PrintConv => { 0 => 'Stays Open', 1 => 'Closes' }, Unknown => 1 },
8838
8915
  );
8916
+ %Image::ExifTool::Nikon::MenuSettingsZ9Firmware3 = ( #starts at Offset26 + 248
8917
+ %binaryDataAttrs,
8918
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
8919
+ DATAMEMBER => [ 154, 204, 208, 248, 444, 554 ],
8920
+ IS_SUBDIR => [ 847 ],
8921
+ NOTES => 'These tags are used by the Z9 firmware 3.00.',
8922
+ 154 => {
8923
+ Name => 'MultipleExposureMode',
8924
+ RawConv => '$$self{MultipleExposureMode} = $val',
8925
+ PrintConv => \%multipleExposureModeZ9,
8926
+ },
8927
+ 156 => {Name => 'MultiExposureShots', Condition => '$$self{MultipleExposureMode} != 0'}, #range 2-9
8928
+ 204 => {
8929
+ Name => 'Intervals',
8930
+ Format => 'int32u',
8931
+ RawConv => '$$self{IntervalShootingIntervals} = $val',
8932
+ Condition => '$$self{IntervalShooting} > 0',
8933
+ },
8934
+ 208 => {
8935
+ Name => 'ShotsPerInterval',
8936
+ Format => 'int32u',
8937
+ RawConv => '$$self{IntervalShootingShotsPerInterval} = $val',
8938
+ Condition => '$$self{IntervalShooting} > 0',
8939
+ },
8940
+ 248 => {
8941
+ Name => 'FocusShiftNumberShots', #1-300
8942
+ RawConv => '$$self{FocusShiftNumberShots} = $val',
8943
+ Condition => '$$self{FocusShiftShooting} > 0',
8944
+ },
8945
+ 252 => {
8946
+ Name => 'FocusShiftStepWidth', #1(Narrow) to 10 (Wide)
8947
+ Condition => '$$self{FocusShiftShooting} > 0',
8948
+ },
8949
+ 256 => {
8950
+ Name => 'FocusShiftInterval',
8951
+ Condition => '$$self{FocusShiftShooting} > 0',
8952
+ PrintConv => '$val == 1? "1 Second" : sprintf("%.0f Seconds",$val)',
8953
+ },
8954
+ 260 => {
8955
+ Name => 'FocusShiftExposureLock',
8956
+ Unknown => 1,
8957
+ PrintConv => \%offOn,
8958
+ Condition => '$$self{FocusShiftShooting} > 0',
8959
+ },
8960
+ 290 => { Name => 'PhotoShootingMenuBank', PrintConv => \%banksZ9 },
8961
+ 292 => { Name => 'ExtendedMenuBanks', PrintConv => \%offOn }, # single tag from both Photo & Video menus
8962
+ 328 => { Name => 'PhotoShootingMenuBankImageArea', PrintConv => \%imageAreaZ9 },
8963
+ 342 => { Name => 'AutoISO', PrintConv => \%offOn },
8964
+ 344 => {
8965
+ Name => 'ISOAutoHiLimit',
8966
+ Format => 'int16u',
8967
+ Unknown => 1,
8968
+ ValueConv => '($val-104)/8',
8969
+ ValueConvInv => '8 * ($val + 104)',
8970
+ PrintConv => \%iSOAutoHiLimitZ7,
8971
+ },
8972
+ 346 => {
8973
+ Name => 'ISOAutoFlashLimit',
8974
+ Format => 'int16u',
8975
+ Unknown => 1,
8976
+ ValueConv => '($val-104)/8',
8977
+ ValueConvInv => '8 * ($val + 104)',
8978
+ PrintConv => \%iSOAutoHiLimitZ7,
8979
+ },
8980
+ 354 => {
8981
+ Name => 'ISOAutoShutterTime', # shutter speed is 2 ** (-$val/24)
8982
+ ValueConv => '$val / 8',
8983
+ Format => 'int16s',
8984
+ PrintConv => \%iSOAutoShutterTimeZ9,
8985
+ },
8986
+ 436 => { Name => 'MovieVignetteControl', PrintConv => \%offLowNormalHighZ7, Unknown => 1 },
8987
+ 438 => { Name => 'DiffractionCompensation', PrintConv => \%offOn }, # value can be set from both the Photo Shoot Menu and the Video Shooting Menu
8988
+ 440 => { Name => 'FlickerReductionShooting',PrintConv => \%offOn },
8989
+ 444 => {
8990
+ Name => 'FlashControlMode', # this and nearby tag values for flash may be set from either the Photo Shooting Menu or using the Flash unit menu
8991
+ RawConv => '$$self{FlashControlMode} = $val',
8992
+ PrintConv => \%flashControlModeZ7,
8993
+ },
8994
+ 446 => {
8995
+ Name => 'FlashMasterCompensation',
8996
+ Format => 'int8s',
8997
+ Unknown => 1,
8998
+ ValueConv => '$val/6',
8999
+ ValueConvInv => '6 * $val',
9000
+ PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
9001
+ PrintConvInv => '$val',
9002
+ },
9003
+ 450 => {
9004
+ Name => 'FlashGNDistance',
9005
+ Condition => '$$self{FlashControlMode} == 2',
9006
+ Unknown => 1,
9007
+ ValueConv => '$val + 3',
9008
+ PrintConv => \%flashGNDistance,
9009
+ },
9010
+ 454 => {
9011
+ Name => 'FlashOutput', # range[0,24] with 0=>Full; 1=>50%; then decreasing flash power in 1/3 stops to 0.39% (1/256 full power). also found in FlashInfoUnknown at offset 0x0a (with different mappings)
9012
+ Condition => '$$self{FlashControlMode} >= 3',
9013
+ Unknown => 1,
9014
+ ValueConv => '2 ** (-$val/3)',
9015
+ ValueConvInv => '$val>0 ? -3*log($val)/log(2) : 0',
9016
+ PrintConv => '$val>0.99 ? "Full" : sprintf("%.1f%%",$val*100)',
9017
+ PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
9018
+ },
9019
+ #462 flash wireless control 0=> 'Off' 1=> 'Optical AWL'
9020
+ #464 => { Name => 'FlashRemoteControl', PrintConv => \%flashRemoteControlZ7, Unknown => 1 },
9021
+ #476 => { Name => 'FlashWirelessOption', PrintConv => \%flashWirelessOptionZ7, Unknown => 1 },
9022
+ 548 => { Name => 'AFAreaMode', PrintConv => \%aFAreaModeZ9},
9023
+ 550 => { Name => 'VRMode', PrintConv => \%vRModeZ9},
9024
+ 554 => {
9025
+ Name => 'BracketSet',
9026
+ RawConv => '$$self{BracketSet} = $val',
9027
+ PrintConv => \%bracketSetZ9,
9028
+ },
9029
+ 556 => {
9030
+ Name => 'BracketProgram',
9031
+ Condition => '$$self{BracketSet} < 3',
9032
+ Notes => 'AE and/or Flash Bracketing',
9033
+ PrintConv => \%bracketProgramZ9,
9034
+ },
9035
+ 558 => {
9036
+ Name => 'BracketIncrement',
9037
+ Condition => '$$self{BracketSet} < 3',
9038
+ Notes => 'AE and/or Flash Bracketing',
9039
+ PrintConv => \%bracketIncrementZ9,
9040
+ },
9041
+ 576 => { Name => 'SecondarySlotFunction', PrintConv => \%secondarySlotFunctionZ9 },
9042
+ 592 => { Name => 'DXCropAlert', PrintConv => \%offOn },
9043
+ 594 => { Name => 'SubjectDetection', PrintConv => \%subjectDetectionZ9 },
9044
+ 636 => { Name => 'HighFrequencyFlickerReductionShooting', PrintConv => \%offOn, Unknown => 1 }, # new with firmware 3.0
9045
+ 646 => {
9046
+ Name => 'MovieImageArea',
9047
+ Unknown => 1,
9048
+ Mask => 0x01, # without the mask 4 => 'FX' 5 => DX only the 2nd Z-series field encountered with a mask.
9049
+ PrintConv => \%imageAreaZ9b,
9050
+ },
9051
+ 656 => { Name => 'MovieType', PrintConv => \%movieTypeZ9, Unknown => 1 },
9052
+ 658 => {
9053
+ Name => 'MovieISOAutoHiLimit',
9054
+ Format => 'int16u',
9055
+ Unknown => 1,
9056
+ ValueConv => '($val-104)/8',
9057
+ ValueConvInv => '8 * ($val + 104)',
9058
+ PrintConv => \%iSOAutoHiLimitZ7,
9059
+ },
9060
+ 660 => { Name => 'MovieISOAutoControlManualMode', PrintConv => \%offOn, Unknown => 1 },
9061
+ 662 => {
9062
+ Name => 'MovieISOAutoManualMode',
9063
+ Format => 'int16u',
9064
+ Unknown => 1,
9065
+ ValueConv => '($val-104)/8',
9066
+ ValueConvInv => '8 * ($val + 104)',
9067
+ PrintConv => \%iSOAutoHiLimitZ7,
9068
+ },
9069
+ 736 => { Name => 'MovieActiveD-Lighting', PrintConv => \%activeDLightingZ7, Unknown => 1 },
9070
+ 738 => { Name => 'MovieHighISONoiseReduction', PrintConv => \%offLowNormalHighZ7, Unknown => 1 },
9071
+ 744 => { Name => 'MovieFlickerReduction', PrintConv => \%movieFlickerReductionZ9 },
9072
+ 746 => { Name => 'MovieMeteringMode', PrintConv => \%meteringModeZ7, Unknown => 1 },
9073
+ 748 => { Name => 'MovieFocusMode', PrintConv => \%focusModeZ7, Unknown => 1 },
9074
+ 750 => { Name => 'MovieAFAreaMode', PrintConv => \%aFAreaModeZ9 },
9075
+ 752 => { Name => 'MovieVRMode', PrintConv => \%vRModeZ9, Unknown => 1 },
9076
+ 756 => { Name => 'MovieElectronicVR', PrintConv => \%offOn, Unknown => 1 }, # distinct from MoveieVRMode
9077
+ 758 => { Name => 'MovieSoundRecording', PrintConv => { 0 => 'Off', 1 => 'Auto', 2 => 'Manual' }, Unknown => 1 },
9078
+ 760 => { Name => 'MicrophoneSensitivity', Unknown => 1 }, # 1-20
9079
+ 762 => { Name => 'MicrophoneAttenuator', PrintConv => \%offOn, Unknown => 1 }, # distinct from MoveieVRMode
9080
+ 764 => { Name => 'MicrophoneFrequencyResponse',PrintConv => { 0 => 'Wide Range', 1 => 'Vocal Range' }, Unknown => 1 },
9081
+ 766 => { Name => 'WindNoiseReduction', PrintConv => \%offOn, Unknown => 1 },
9082
+ 788 => { Name => 'MovieToneMap', PrintConv => \%movieToneMapZ9, Unknown => 1 },
9083
+ 794 => { Name => 'MovieFrameSize', PrintConv => \%movieFrameSizeZ9, Unknown => 1 },
9084
+ 796 => { Name => 'MovieFrameRate', PrintConv => \%movieFrameRateZ7, Unknown => 1 },
9085
+ 802 => { Name => 'MicrophoneJackPower', PrintConv => \%offOn, Unknown => 1 },
9086
+ 803 => { Name => 'MovieDXCropAlert', PrintConv => \%offOn, Unknown => 1 },
9087
+ 804 => { Name => 'MovieSubjectDetection', PrintConv => \%subjectDetectionZ9, Unknown => 1 },
9088
+ 812 => { Name => 'MovieHighResZoom', PrintConv => \%offOn, Unknown => 1 },
9089
+ 847 => {
9090
+ Name => 'CustomSettingsZ9',
9091
+ Format => 'undef[608]',
9092
+ SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsZ9' },
9093
+ },
9094
+ 1474 => { Name => 'Language', PrintConv => \%languageZ9, Unknown => 1 },
9095
+ 1476 => { Name => 'TimeZone', PrintConv => \%timeZoneZ9 },
9096
+ 1482 => { Name => 'MonitorBrightness', PrintConv => \%monitorBrightnessZ9, Unknown => 1 }, # settings: -5 to +5. Added with firmware 3.0: Lo1, Lo2, Hi1, Hi2
9097
+ 1504 => { Name => 'AFFineTune', PrintConv => \%offOn, Unknown => 1 },
9098
+ 1600 => { Name => 'HDMIOutputResolution', PrintConv => \%hDMIOutputResolutionZ9 },
9099
+ 1613 => { Name => 'SetClockFromLocationData', PrintConv => \%offOn, Unknown => 1 },
9100
+ 1620 => { Name => 'AirplaneMode', PrintConv => \%offOn, Unknown => 1 },
9101
+ 1621 => { Name => 'EmptySlotRelease', PrintConv => { 0 => 'Disable Release', 1 => 'Enable Release' }, Unknown => 1 },
9102
+ 1656 => { Name => 'EnergySavingMode', PrintConv =>\%offOn, Unknown => 1 },
9103
+ 1680 => { Name => 'RecordLocationData', PrintConv => \%offOn, Unknown => 1 },
9104
+ 1684 => { Name => 'USBPowerDelivery', PrintConv => \%offOn, Unknown => 1 },
9105
+ 1693 => { Name => 'SensorShield', PrintConv => { 0 => 'Stays Open', 1 => 'Closes' }, Unknown => 1 },
9106
+ 1754 => {
9107
+ Name => 'FocusShiftAutoReset',
9108
+ Unknown => 1,
9109
+ PrintConv => \%offOn,
9110
+ Condition => '$$self{FocusShiftShooting} > 0',
9111
+ },
9112
+ #1824 ReleaseTimingIndicatorTypeADelay CSd14-b 0 => '1/200' ... 15 => '1/6'
9113
+ #1826 VerticalISOButton CSf2
9114
+ #1828 ExposureCompensationButton CSf2
9115
+ #1830 ISOButton CSf2
9116
+ #1890 ViewModeShowEffectsOfSettings CSd9-a 0=>'Always', 1=> 'Only When Flash Not Used'
9117
+ #1892 DispButton CSf2
9118
+ #1936 FocusPointDisplayOption3DTrackingColor CSa11-d 0=> 'White', 1= => 'Red'
9119
+ );
8839
9120
 
8840
9121
  # Flash information (ref JD)
8841
9122
  %Image::ExifTool::Nikon::FlashInfo0100 = (
@@ -9951,7 +10232,7 @@ my %nikonFocalConversions = (
9951
10232
  },
9952
10233
  12 => {
9953
10234
  Name => 'FlashFocalLength',
9954
- Notes => 'only valid if flash pattern is "Standard Illumination"',
10235
+ Notes => 'only valid if flash pattern is "Standard Illumination"', #illumination pattern no no supported starting with the SB-910
9955
10236
  RawConv => '($val and $val != 255) ? $val : undef',
9956
10237
  PrintConv => '"$val mm"',
9957
10238
  PrintConvInv => '$val=~/(\d+)/; $1 || 0',
@@ -10021,7 +10302,7 @@ my %nikonFocalConversions = (
10021
10302
  0x29 => [ #PH
10022
10303
  {
10023
10304
  Name => 'FlashGroupBOutput',
10024
- Condition => '$$self{FlashGroupBControlMode} >= 0x60',
10305
+ Condition => '$$self{FlashGroupBControlMode} >= 0x06',
10025
10306
  ValueConv => '2 ** (-$val/6)',
10026
10307
  ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
10027
10308
  PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
@@ -10061,6 +10342,7 @@ my %nikonFocalConversions = (
10061
10342
  %Image::ExifTool::Nikon::FlashInfo0300 = (
10062
10343
  %binaryDataAttrs,
10063
10344
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
10345
+ DATAMEMBER => [ 9.2, 17.1, 18.1, 18.2 ],
10064
10346
  0 => {
10065
10347
  Name => 'FlashInfoVersion',
10066
10348
  Format => 'string[4]',
@@ -10075,15 +10357,39 @@ my %nikonFocalConversions = (
10075
10357
  },
10076
10358
  },
10077
10359
  6 => {
10078
- Format => 'int8u[2]',
10079
10360
  Name => 'ExternalFlashFirmware',
10361
+ Format => 'int8u[2]',
10080
10362
  SeparateTable => 'FlashFirmware',
10081
10363
  PrintConv => \%flashFirmware,
10082
10364
  },
10365
+ 8 => {
10366
+ Name => 'ExternalFlashFlags',
10367
+ PrintConv => { BITMASK => {
10368
+ 0 => 'Flash Ready', #flash status is 'Not Ready' when this bit is off and FlashSource is non-zero
10369
+ # 1 - ? (observed with SB-900)
10370
+ 2 => 'Bounce Flash',
10371
+ 4 => 'Wide Flash Adapter',
10372
+ 7 => 'Zoom Override', #override takes place when the Wide Flash Adapter is dropped in place and/or the zoom level is overriden on via flash menu
10373
+ }},
10374
+ },
10375
+ 9.1 => {
10376
+ Name => 'FlashCommanderMode',
10377
+ Mask => 0x80,
10378
+ PrintConv => { 0 => 'Off', 1 => 'On' },
10379
+ },
10380
+ 9.2 => {
10381
+ Name => 'FlashControlMode',
10382
+ Mask => 0x7f,
10383
+ DataMember => 'FlashControlMode',
10384
+ RawConv => '$$self{FlashControlMode} = $val',
10385
+ PrintConv => \%flashControlMode,
10386
+ SeparateTable => 'FlashControlMode',
10387
+ },
10083
10388
  10 => {
10084
10389
  Name => 'FlashCompensation',
10085
10390
  # this is the compensation from the camera (0x0012) for "Built-in" FlashType, or
10086
10391
  # the compensation from the external unit (0x0017) for "Optional" FlashType - PH
10392
+ Condition => '$$self{FlashControlMode} == 0x01 or $$self{FlashControlMode} == 0x02', #only valid for TTL and TTL-BL modes
10087
10393
  Format => 'int8s',
10088
10394
  Priority => 0,
10089
10395
  ValueConv => '-$val/6',
@@ -10091,6 +10397,130 @@ my %nikonFocalConversions = (
10091
10397
  PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)',
10092
10398
  PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
10093
10399
  },
10400
+ 13 => {
10401
+ Name => 'RepeatingFlashRate',
10402
+ RawConv => '($val and $val != 255) ? $val : undef',
10403
+ PrintConv => '"$val Hz"',
10404
+ PrintConvInv => '$val=~/(\d+)/; $1 || 0',
10405
+ },
10406
+ 14 => {
10407
+ Name => 'RepeatingFlashCount',
10408
+ RawConv => '($val and $val != 255) ? $val : undef',
10409
+ },
10410
+ 15 => {
10411
+ Name => 'FlashGNDistance',
10412
+ SeparateTable => 1,
10413
+ PrintConv => \%flashGNDistance,
10414
+ },
10415
+ 16 => {
10416
+ Name => 'FlashColorFilter',
10417
+ SeparateTable => 1,
10418
+ PrintConv => \%flashColorFilter,
10419
+ },
10420
+ 17.1 => { #PH
10421
+ Name => 'FlashGroupAControlMode',
10422
+ Mask => 0x0f,
10423
+ Notes => 'note: group A tags may apply to the built-in flash settings for some models',
10424
+ DataMember => 'FlashGroupAControlMode',
10425
+ RawConv => '$$self{FlashGroupAControlMode} = $val',
10426
+ PrintConv => \%flashControlMode,
10427
+ SeparateTable => 'FlashControlMode',
10428
+ },
10429
+ 18.1 => { #PH
10430
+ Name => 'FlashGroupBControlMode',
10431
+ Mask => 0xf0,
10432
+ Notes => 'note: group B tags may apply to group A settings for some models',
10433
+ DataMember => 'FlashGroupBControlMode',
10434
+ RawConv => '$$self{FlashGroupBControlMode} = $val',
10435
+ PrintConv => \%flashControlMode,
10436
+ SeparateTable => 'FlashControlMode',
10437
+ },
10438
+ 18.2 => { #PH
10439
+ Name => 'FlashGroupCControlMode',
10440
+ Mask => 0x0f,
10441
+ Notes => 'note: group C tags may apply to group B settings for some models',
10442
+ DataMember => 'FlashGroupCControlMode',
10443
+ RawConv => '$$self{FlashGroupCControlMode} = $val',
10444
+ PrintConv => \%flashControlMode,
10445
+ SeparateTable => 'FlashControlMode',
10446
+ },
10447
+ 33 => {
10448
+ Name => 'FlashOutput',
10449
+ Condition => '$$self{FlashControlMode} >= 0x06', #only valid for M mode
10450
+ ValueConv => '2 ** (-$val/6)',
10451
+ ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
10452
+ PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
10453
+ PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
10454
+ },
10455
+ 37 => {
10456
+ Name => 'FlashIlluminationPattern',
10457
+ PrintConv => {
10458
+ 0 => 'Standard',
10459
+ 1 => 'Center-weighted',
10460
+ 2 => 'Even',
10461
+ },
10462
+ },
10463
+ 38 => {
10464
+ Name => 'FlashFocalLength',
10465
+ Notes => 'only valid if flash pattern is "Standard Illumination"',
10466
+ RawConv => '($val and $val != 255) ? $val : undef',
10467
+ PrintConv => '"$val mm"',
10468
+ PrintConvInv => '$val=~/(\d+)/; $1 || 0',
10469
+ },
10470
+ 40 => [ #PH
10471
+ {
10472
+ Name => 'FlashGroupAOutput',
10473
+ Condition => '$$self{FlashGroupAControlMode} >= 0x06',
10474
+ ValueConv => '2 ** (-$val/6)',
10475
+ ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
10476
+ PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
10477
+ PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
10478
+ },
10479
+ {
10480
+ Name => 'FlashGroupACompensation',
10481
+ Format => 'int8s',
10482
+ ValueConv => '-($val-2)/6',
10483
+ ValueConvInv => '-6 * $val + 2',
10484
+ PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
10485
+ PrintConvInv => '$val',
10486
+ },
10487
+ ],
10488
+ 41 => [ #PH
10489
+ {
10490
+ Name => 'FlashGroupBOutput',
10491
+ Condition => '$$self{FlashGroupBControlMode} >= 0x06',
10492
+ ValueConv => '2 ** (-$val/6)',
10493
+ ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
10494
+ PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
10495
+ PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
10496
+ },
10497
+ {
10498
+ Name => 'FlashGroupBCompensation',
10499
+ Format => 'int8s',
10500
+ ValueConv => '-($val-2)/6',
10501
+ ValueConvInv => '-6 * $val + 2',
10502
+ PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
10503
+ PrintConvInv => '$val',
10504
+ },
10505
+ ],
10506
+ 42 => [ #PH
10507
+ {
10508
+ Name => 'FlashGroupCOutput',
10509
+ Condition => '$$self{FlashGroupCControlMode} >= 0x06',
10510
+ ValueConv => '2 ** (-$val/6)',
10511
+ ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
10512
+ PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
10513
+ PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
10514
+ },
10515
+ {
10516
+ Name => 'FlashGroupCCompensation',
10517
+ Format => 'int8s',
10518
+ ValueConv => '-($val-2)/6',
10519
+ ValueConvInv => '-6 * $val + 2',
10520
+ PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
10521
+ PrintConvInv => '$val',
10522
+ },
10523
+ ],
10094
10524
  );
10095
10525
  # Unknown Flash information
10096
10526
  %Image::ExifTool::Nikon::FlashInfoUnknown = (
@@ -10129,6 +10559,36 @@ my %nikonFocalConversions = (
10129
10559
  },
10130
10560
  );
10131
10561
 
10562
+ # Multi exposure2 / image overlay information (ref 39)
10563
+ %Image::ExifTool::Nikon::MultiExposure2 = (
10564
+ %binaryDataAttrs,
10565
+ FORMAT => 'int32u',
10566
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
10567
+ 0 => {
10568
+ Name => 'MultiExposureVersion',
10569
+ Format => 'string[4]',
10570
+ Writable => 0,
10571
+ },
10572
+ 1 => {
10573
+ Name => 'MultiExposureMode',
10574
+ PrintConv => {
10575
+ 0 => 'Off',
10576
+ 1 => 'Multiple Exposure',
10577
+ 3 => 'HDR',
10578
+ },
10579
+ },
10580
+ 2 => 'MultiExposureShots',
10581
+ 3 => {
10582
+ Name => 'MultiExposureOverlayMode',
10583
+ PrintConv => {
10584
+ 0 => 'Add',
10585
+ 1 => 'Average',
10586
+ 2 => 'Light',
10587
+ 3 => 'Dark',
10588
+ },
10589
+ },
10590
+ );
10591
+
10132
10592
  # HDR information (ref 32)
10133
10593
  %Image::ExifTool::Nikon::HDRInfo = (
10134
10594
  %binaryDataAttrs,
@@ -10137,12 +10597,13 @@ my %nikonFocalConversions = (
10137
10597
  0 => {
10138
10598
  Name => 'HDRInfoVersion',
10139
10599
  Format => 'string[4]',
10600
+ Writable => 0,
10140
10601
  },
10141
10602
  4 => {
10142
10603
  Name => 'HDR',
10143
10604
  PrintConv => {
10144
10605
  0 => 'Off',
10145
- 1 => 'On',
10606
+ 1 => 'On (normal)',
10146
10607
  48 => 'Auto', #PH (NC)
10147
10608
  },
10148
10609
  },
@@ -10180,6 +10641,35 @@ my %nikonFocalConversions = (
10180
10641
  },
10181
10642
  );
10182
10643
 
10644
+ # ref 39 (Z9)
10645
+ %Image::ExifTool::Nikon::HDRInfo2 = (
10646
+ %binaryDataAttrs,
10647
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
10648
+ 0 => {
10649
+ Name => 'HDRInfoVersion', # 0200
10650
+ Format => 'string[4]',
10651
+ Writable => 0,
10652
+ },
10653
+ 4 => {
10654
+ Name => 'HDR',
10655
+ PrintConv => {
10656
+ 0 => 'Off',
10657
+ 1 => 'On (normal)',
10658
+ },
10659
+ },
10660
+ 5 => {
10661
+ Name => 'HDRLevel',
10662
+ PrintConv => {
10663
+ 0 => 'n/a',
10664
+ 1 => 'Normal',
10665
+ 2 => 'Low',
10666
+ 3 => 'High',
10667
+ 4 => 'High+',
10668
+ 5 => 'Auto',
10669
+ },
10670
+ },
10671
+ );
10672
+
10183
10673
  # location information (ref PH)
10184
10674
  %Image::ExifTool::Nikon::LocationInfo = (
10185
10675
  %binaryDataAttrs,
@@ -11995,7 +12485,7 @@ Nikon maker notes in EXIF information.
11995
12485
 
11996
12486
  =head1 AUTHOR
11997
12487
 
11998
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
12488
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
11999
12489
 
12000
12490
  This library is free software; you can redistribute it and/or modify it
12001
12491
  under the same terms as Perl itself.