exiftool-vendored.pl 12.50.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 +69 -3
  2. package/bin/MANIFEST +2 -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 +12 -9
  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 +3 -3
  22. package/bin/lib/Image/ExifTool/CBOR.pm +1 -1
  23. package/bin/lib/Image/ExifTool/Canon.pm +14 -2
  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 +5 -16
  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 +13 -5
  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 +1 -1
  62. package/bin/lib/Image/ExifTool/ID3.pm +1 -1
  63. package/bin/lib/Image/ExifTool/IPTC.pm +1 -1
  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 +1 -1
  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 +1 -1
  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 +658 -276
  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 +4 -3
  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 +1 -1
  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 +8 -4
  150. package/bin/lib/Image/ExifTool/QuickTimeStream.pl +63 -15
  151. package/bin/lib/Image/ExifTool/README +2 -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 +7 -7
  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 +13 -8
  172. package/bin/lib/Image/ExifTool/TagLookup.pm +4599 -4505
  173. package/bin/lib/Image/ExifTool/TagNames.pod +313 -39
  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 +23 -3
  194. package/bin/lib/Image/ExifTool/XMP2.pl +20 -1
  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 +38 -16
  200. package/bin/lib/Image/ExifTool.pod +39 -38
  201. package/bin/perl-Image-ExifTool.spec +1 -1
  202. package/bin/pp_build_exe.args +6 -5
  203. package/package.json +3 -3
@@ -64,7 +64,7 @@ use Image::ExifTool::Exif;
64
64
  use Image::ExifTool::GPS;
65
65
  use Image::ExifTool::XMP;
66
66
 
67
- $VERSION = '4.13';
67
+ $VERSION = '4.16';
68
68
 
69
69
  sub LensIDConv($$$);
70
70
  sub ProcessNikonAVI($$$);
@@ -369,6 +369,7 @@ sub GetAFPointGrid($$;$);
369
369
  '48 54 3E 3E 0C 0C 4B 06' => 'Sigma 30mm F1.4 EX DC HSM',
370
370
  'F8 54 3E 3E 0C 0C 4B 06' => 'Sigma 30mm F1.4 EX DC HSM', #JD
371
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
372
373
  'DE 54 50 50 0C 0C 4B 06' => 'Sigma 50mm F1.4 EX DG HSM',
373
374
  '88 54 50 50 0C 0C 4B 06' => 'Sigma 50mm F1.4 DG HSM | A',
374
375
  '02 48 50 50 24 24 02 00' => 'Sigma Macro 50mm F2.8', #https://exiftool.org/forum/index.php/topic,4027.0.html
@@ -382,6 +383,7 @@ sub GetAFPointGrid($$;$);
382
383
  '32 54 6A 6A 24 24 35 02.2' => 'Sigma Macro 105mm F2.8 EX DG', #JD
383
384
  'E5 54 6A 6A 24 24 35 02' => 'Sigma Macro 105mm F2.8 EX DG',
384
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
385
387
  '48 48 76 76 24 24 4B 06' => 'Sigma APO Macro 150mm F2.8 EX DG HSM',
386
388
  'F5 48 76 76 24 24 4B 06' => 'Sigma APO Macro 150mm F2.8 EX DG HSM', #24
387
389
  '99 48 76 76 24 24 4B 0E' => 'Sigma APO Macro 150mm F2.8 EX DG OS HSM', #(Christian Hesse)
@@ -437,7 +439,7 @@ sub GetAFPointGrid($$;$);
437
439
  '90 40 2D 80 2C 40 4B 0E' => 'Sigma 18-200mm F3.5-6.3 II DC OS HSM', #JohnHelour
438
440
  '89 30 2D 80 2C 40 4B 0E' => 'Sigma 18-200mm F3.5-6.3 DC Macro OS HS | C', #JoeSchonberg
439
441
  'A5 40 2D 88 2C 40 4B 0E' => 'Sigma 18-250mm F3.5-6.3 DC OS HSM',
440
- # LensFStops varies with FocalLength for this lens (ref 2):
442
+ # LensFStops varies with FocalLength for this lens (ref 2):
441
443
  '92 2C 2D 88 2C 40 4B 0E' => 'Sigma 18-250mm F3.5-6.3 DC Macro OS HSM', #2
442
444
  '87 2C 2D 8E 2C 40 4B 0E' => 'Sigma 18-300mm F3.5-6.3 DC Macro HSM', #30
443
445
  # '92 2C 2D 88 2C 40 4B 0E' (250mm)
@@ -615,6 +617,7 @@ sub GetAFPointGrid($$;$);
615
617
  #
616
618
  '00 40 2B 2B 2C 2C 00 02' => 'Tokina AT-X 17 AF PRO (AF 17mm f/3.5)',
617
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
618
621
  '00 54 68 68 24 24 00 02' => 'Tokina AT-X M100 AF PRO D (AF 100mm f/2.8 Macro)',
619
622
  '27 48 8E 8E 30 30 1D 02' => 'Tokina AT-X 304 AF (AF 300mm f/4.0)',
620
623
  '00 54 8E 8E 24 24 00 02' => 'Tokina AT-X 300 AF PRO (AF 300mm f/2.8)',
@@ -807,6 +810,7 @@ my %flashColorFilter = (
807
810
  66 => 'Blue',
808
811
  67 => 'Yellow',
809
812
  68 => 'Amber',
813
+ 128 => 'Incandescent', #SZ-4TN Incandescent
810
814
  );
811
815
 
812
816
  # flash control mode values (ref JD)
@@ -829,6 +833,53 @@ my %activeDLightingZ7 = (
829
833
  5 => 'Extra High',
830
834
  );
831
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
+
832
883
  my %flashControlModeZ7 = (
833
884
  0 => 'TTL',
834
885
  1 => 'Auto External Flash',
@@ -857,6 +908,29 @@ my %focusModeZ7 = (
857
908
  4 => 'AF-F', # full frame
858
909
  );
859
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
+
860
934
  my %infoZSeries = (
861
935
  Condition => '$$self{Model} =~ /^NIKON Z (5|50|6|6_2|7|7_2|fc|9)\b/i',
862
936
  Notes => 'Z Series cameras thru December 2021',
@@ -895,6 +969,66 @@ my %iSOAutoHiLimitZ7 = (
895
969
  32 => 'ISO Hi 2.0',
896
970
  );
897
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
+
898
1032
  my %meteringModeZ7 = (
899
1033
  0 => 'Matrix',
900
1034
  1 => 'Center',
@@ -902,6 +1036,30 @@ my %meteringModeZ7 = (
902
1036
  3 => 'Highlight'
903
1037
  );
904
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
+
905
1063
  my %movieFrameRateZ7 = (
906
1064
  0 => '120p',
907
1065
  1 => '100p',
@@ -912,6 +1070,33 @@ my %movieFrameRateZ7 = (
912
1070
  6 => '24p',
913
1071
  );
914
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
+
915
1100
  my %offLowNormalHighZ7 = (
916
1101
  0 => 'Off',
917
1102
  1 => 'Low',
@@ -919,10 +1104,11 @@ my %offLowNormalHighZ7 = (
919
1104
  3 => 'High',
920
1105
  );
921
1106
 
922
- my %movieFrameSizeZ9 = (
923
- 1 => '1920x1080',
924
- 2 => '3840x2160',
925
- 3 => '7680x4320',
1107
+ my %secondarySlotFunctionZ9 = (
1108
+ 0 => 'Overflow',
1109
+ 1 => 'Backup',
1110
+ 2 => 'NEF Primary + JPG Secondary',
1111
+ 3 => 'JPG Primary + JPG Secondary',
926
1112
  );
927
1113
 
928
1114
  my %subjectDetectionZ9 = (
@@ -933,6 +1119,34 @@ my %subjectDetectionZ9 = (
933
1119
  4 => 'Vehicles',
934
1120
  );
935
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
+
936
1150
  my %vRModeZ9 = (
937
1151
  0 => 'Off',
938
1152
  1 => 'Normal',
@@ -2091,7 +2305,7 @@ my %base64coord = (
2091
2305
  TagTable => 'Image::ExifTool::Nikon::ShotInfoZ9',
2092
2306
  DecryptStart => 4,
2093
2307
  # TODO: eventually set the length dynamically according to actual offsets!
2094
- DecryptLen => 0xec4b + 2105, # decoded thru end of Offset26
2308
+ DecryptLen => 0xec4b + 2196, # decoded thru end of Offset26
2095
2309
  ByteOrder => 'LittleEndian',
2096
2310
  },
2097
2311
  },
@@ -5053,6 +5267,7 @@ my %nikonFocalConversions = (
5053
5267
  31 => 'Nikkor Z 24-120 f/4', #28
5054
5268
  32 => 'Nikkor Z 800mm f/6.3 VR S', #28
5055
5269
  36 => 'Nikkor Z 400mm f/4.5 VR S', #IB
5270
+ 39 => 'Nikkor Z 17-28mm f/2.8', #IB
5056
5271
  },
5057
5272
  },
5058
5273
  0x35 => { #28
@@ -8250,15 +8465,26 @@ my %nikonFocalConversions = (
8250
8465
  # account for variable location of menu settings data
8251
8466
  Hook => '$varSize = $$self{MenuSettingsZ9Offset} - 0xec4b',
8252
8467
  },
8253
- 0xec4b => {
8254
- Name => 'MenuSettingsZ9',
8255
- Format => 'undef[1646]',
8256
- Condition => '$$self{FirmwareVersion} lt "03.00"',
8257
- SubDirectory => {
8258
- 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
+ },
8259
8477
  },
8260
- },
8261
- # 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
8262
8488
  );
8263
8489
 
8264
8490
  %Image::ExifTool::Nikon::MenuSettingsZ7II = (
@@ -8366,8 +8592,8 @@ my %nikonFocalConversions = (
8366
8592
  PrintConv => '$val>0.99 ? "Full" : sprintf("%.1f%%",$val*100)',
8367
8593
  PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
8368
8594
  },
8369
- 346 => { Name => 'FlashWirelessOption', PrintConv => \%flashWirelessOptionZ7, Unknown => 1},
8370
- 348 => { Name => 'FlashRemoteControl', PrintConv => \%flashRemoteControlZ7, Unknown => 1},
8595
+ 346 => { Name => 'FlashWirelessOption', PrintConv => \%flashWirelessOptionZ7, Unknown => 1 },
8596
+ 348 => { Name => 'FlashRemoteControl', PrintConv => \%flashRemoteControlZ7, Unknown => 1 },
8371
8597
  352 => {
8372
8598
  Name => 'FlashMasterControlMode', # tag name chosen for compatibility with those found in FlashInfo0102 & FlashInfo0103
8373
8599
  RawConv => '$$self{FlashGroupOptionsMasterMode} = $val',
@@ -8392,12 +8618,12 @@ my %nikonFocalConversions = (
8392
8618
  PrintConv => '$val>0.99 ? "Full" : sprintf("%.1f%%",$val*100)',
8393
8619
  PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
8394
8620
  },
8395
- #360 => {Name => 'FlashGroupAControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupACompensation at 362 and FlashGroupAOutput at 368
8396
- #368 => {Name => 'FlashGroupBControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupBCompensation at 370 and FlashGroupBOutput at 374
8397
- #376 => {Name => 'FlashGroupCControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupCCompensation at 378 and FlashGroupCOutput at 382
8398
- #384 => {Name => 'FlashGroupDControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupDCompensation at 386 and FlashGroupDOutput at 390
8399
- #392 => {Name => 'FlashGroupEControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupECompensation at 394 and FlashGroupEOutput at 398
8400
- #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
8401
8627
  #434 => FocusMode
8402
8628
  #436 => AFAreaMode
8403
8629
  #438 => VibrationReduction
@@ -8405,8 +8631,8 @@ my %nikonFocalConversions = (
8405
8631
  #444 => BracketProgram
8406
8632
  #446 => BracketIncrement
8407
8633
  #463 => SilentPhotography
8408
- 502 => { Name => 'MovieFrameSize', PrintConv => \%movieFrameSizeZ9, Unknown => 1},
8409
- 504 => { Name => 'MovieFrameRate', PrintConv => \%movieFrameRateZ7, Unknown => 1},
8634
+ 502 => { Name => 'MovieFrameSize', PrintConv => \%movieFrameSizeZ9, Unknown => 1 },
8635
+ 504 => { Name => 'MovieFrameRate', PrintConv => \%movieFrameRateZ7, Unknown => 1 },
8410
8636
  506 => {
8411
8637
  Name => 'MovieSlowMotion',
8412
8638
  Unknown => 1,
@@ -8435,9 +8661,9 @@ my %nikonFocalConversions = (
8435
8661
  PrintConv => \%iSOAutoHiLimitZ7,
8436
8662
  },
8437
8663
  #520 => MovieWhiteBalanceSameAsPhoto
8438
- 568 => { Name => 'MovieActiveD-Lighting', PrintConv => \%activeDLightingZ7, Unknown => 1},
8439
- 572 => { Name => 'MovieHighISONoiseReduction', PrintConv => \%offLowNormalHighZ7, Unknown => 1},
8440
- 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 },
8441
8667
  576 => {
8442
8668
  Name => 'MovieVignetteControlSameAsPhoto',
8443
8669
  Unknown => 1,
@@ -8453,7 +8679,7 @@ my %nikonFocalConversions = (
8453
8679
  Unknown => 1,
8454
8680
  PrintConv => \%offOn
8455
8681
  },
8456
- 584 => { Name => 'MovieFocusMode', PrintConv => \%focusModeZ7, Unknown => 1},
8682
+ 584 => { Name => 'MovieFocusMode', PrintConv => \%focusModeZ7, Unknown => 1 },
8457
8683
  #586 => MovieAFAreaMode
8458
8684
  590 => {
8459
8685
  Name => 'MovieVibrationReduction',
@@ -8493,11 +8719,7 @@ my %nikonFocalConversions = (
8493
8719
  140 => {
8494
8720
  Name => 'MultipleExposureMode',
8495
8721
  RawConv => '$$self{MultipleExposureMode} = $val',
8496
- PrintConv => {
8497
- 0 => 'Off',
8498
- 1 => 'On (Series)',
8499
- 2 => 'On',
8500
- },
8722
+ PrintConv => \%multipleExposureModeZ9,
8501
8723
  },
8502
8724
  142 => {Name => 'MultiExposureShots', Condition => '$$self{MultipleExposureMode} != 0' }, #range 2-9
8503
8725
  188 => {
@@ -8533,27 +8755,11 @@ my %nikonFocalConversions = (
8533
8755
  PrintConv => \%offOn,
8534
8756
  Condition => '$$self{FocusShiftShooting} > 0',
8535
8757
  },
8536
- 274 => {
8537
- Name => 'PhotoShootingMenuBank',
8538
- PrintConv => {
8539
- 0 => 'A',
8540
- 1 => 'B',
8541
- 2 => 'C',
8542
- 3 => 'D',
8543
- },
8544
- },
8545
- 276 => { Name => 'ExtendedMenuBanks', PrintConv => \%offOn, }, #single tag from both Photo & Video menus
8546
- 308 => {
8547
- Name => 'PhotoShootingMenuBankImageArea',
8548
- PrintConv => {
8549
- 0 => 'FX',
8550
- 1 => 'DX',
8551
- 4 => '16:9',
8552
- 8 => '1:1',
8553
- },
8554
- },
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 },
8555
8761
  #310 ImageQuality
8556
- 322 => { Name => 'AutoISO', PrintConv => \%offOn, },
8762
+ 322 => { Name => 'AutoISO', PrintConv => \%offOn },
8557
8763
  324 => {
8558
8764
  Name => 'ISOAutoHiLimit',
8559
8765
  Format => 'int16u',
@@ -8575,58 +8781,7 @@ my %nikonFocalConversions = (
8575
8781
  Name => 'ISOAutoShutterTime', #shutter speed is 2 ** (-$val/24)
8576
8782
  ValueConv => '$val / 8',
8577
8783
  Format => 'int16s',
8578
- PrintConv => {
8579
- -15 => 'Auto', #z9 firmware 1.00 maps both 'Auto' and '30 s' to -15
8580
- -12 => '15 s',
8581
- -9 => '8 s',
8582
- -6 => '4 s',
8583
- -3 => '2 s',
8584
- 0 => '1 s',
8585
- 1 => '1/1.3 s',
8586
- 2 => '1/1.6 s',
8587
- 3 => '1/2 s',
8588
- 4 => '1/2.5 s',
8589
- 5 => '1/3 s',
8590
- 6 => '1/4 s',
8591
- 7 => '1/5 s',
8592
- 8 => '1/6 s',
8593
- 9 => '1/8 s',
8594
- 10 => '1/10 s',
8595
- 11 => '1/13 s',
8596
- 12 => '1/15 s',
8597
- 13 => '1/20 s',
8598
- 14 => '1/25 s',
8599
- 15 => '1/30 s',
8600
- 16 => '1/40 s',
8601
- 17 => '1/50 s',
8602
- 18 => '1/60 s',
8603
- 19 => '1/80 s',
8604
- 20 => '1/100 s',
8605
- 21 => '1/120 s',
8606
- 22 => '1/160 s',
8607
- 23 => '1/200 s',
8608
- 24 => '1/250 s',
8609
- 25 => '1/320 s',
8610
- 26 => '1/400 s',
8611
- 27 => '1/500 s',
8612
- 28 => '1/640 s',
8613
- 29 => '1/800 s',
8614
- 30 => '1/1000 s',
8615
- 31 => '1/1250 s',
8616
- 32 => '1/1600 s',
8617
- 33 => '1/2000 s',
8618
- 34 => '1/2500 s',
8619
- 35 => '1/3200 s',
8620
- 36 => '1/4000 s',
8621
- 37 => '1/5000 s',
8622
- 37.5 => '1/6000 s',
8623
- 38 => '1/6400 s',
8624
- 39 => '1/8000 s',
8625
- 40 => '1/10000 s',
8626
- 40.5 => '1/12000 s',
8627
- 41 => '1/13000 s',
8628
- 42 => '1/16000 s',
8629
- },
8784
+ PrintConv => \%iSOAutoShutterTimeZ9,
8630
8785
  },
8631
8786
  #336 WhiteBalance
8632
8787
  #406 PictureControl
@@ -8635,8 +8790,8 @@ my %nikonFocalConversions = (
8635
8790
  #412 => { Name => 'NoiseReduction', PrintConv => \%offOn }, #Long Exposure Noise Reduction
8636
8791
  #414 HighISONoiseReduction
8637
8792
  #414 VignetteControl
8638
- 416 => { Name => 'MovieVignetteControl', PrintConv => \%offLowNormalHighZ7, Unknown => 1},
8639
- 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
8640
8795
  #419 AutoDistortionControl #value can be set from both the Photo Shoot Menu and the Video Shooting Menu
8641
8796
  420 => { Name => 'FlickerReductionShooting', PrintConv => \%offOn },
8642
8797
  #422 MeteringMode
@@ -8671,94 +8826,39 @@ my %nikonFocalConversions = (
8671
8826
  PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
8672
8827
  },
8673
8828
  #442 flash wirelss control 0=> 'Off' 1=> 'CMD'
8674
- 444 => { Name => 'FlashRemoteControl', PrintConv => \%flashRemoteControlZ7, Unknown => 1},
8675
- 456 => { Name => 'FlashWirelessOption', PrintConv => \%flashWirelessOptionZ7, Unknown => 1},
8829
+ 444 => { Name => 'FlashRemoteControl', PrintConv => \%flashRemoteControlZ7, Unknown => 1 },
8830
+ 456 => { Name => 'FlashWirelessOption', PrintConv => \%flashWirelessOptionZ7, Unknown => 1 },
8676
8831
  #526 FocusMode
8677
- 528 => {
8678
- Name => 'AFAreaMode',
8679
- PrintConv => {
8680
- 1 => 'Single',
8681
- 2 => 'Dynamic',
8682
- 3 => 'Wide (S)',
8683
- 4 => 'Wide (L)',
8684
- 5 => '3D',
8685
- 6 => 'Auto',
8686
- 12 => 'Wide (C1)',
8687
- 13 => 'Wide (C2)',
8688
- },
8689
- },
8690
- 530 => { Name => 'VRMode', PrintConv => \%vRModeZ9},
8832
+ 528 => { Name => 'AFAreaMode',PrintConv => \%aFAreaModeZ9 },
8833
+ 530 => { Name => 'VRMode', PrintConv => \%vRModeZ9 },
8691
8834
  534 => {
8692
8835
  Name => 'BracketSet',
8693
8836
  RawConv => '$$self{BracketSet} = $val',
8694
- PrintConv => {
8695
- 0 => 'AE/Flash',
8696
- 1 => 'AE',
8697
- 2 => 'Flash',
8698
- 3 => 'White Balance',
8699
- 4 => 'Active-D Lighting',
8700
- },
8837
+ PrintConv => \%bracketSetZ9,
8701
8838
  },
8702
8839
  536 => {
8703
8840
  Name => 'BracketProgram',
8704
8841
  Condition => '$$self{BracketSet} < 3',
8705
8842
  Notes => 'AE and/or Flash Bracketing',
8706
- PrintConv => {
8707
- 0 => 'Disabled',
8708
- 2 => '2F',
8709
- 3 => '3F',
8710
- 4 => '4F',
8711
- 5 => '5F',
8712
- 7 => '7F',
8713
- 9 => '9F',
8714
- },
8843
+ PrintConv => \%bracketProgramZ9,
8715
8844
  },
8716
8845
  538 => {
8717
8846
  Name => 'BracketIncrement',
8718
8847
  Condition => '$$self{BracketSet} < 3',
8719
8848
  Notes => 'AE and/or Flash Bracketing',
8720
- PrintConv => {
8721
- 0 => '0.3',
8722
- #1 => '0.5',
8723
- 2 => '0.7',
8724
- 3 => '1.0',
8725
- 4 => '2.0',
8726
- 5 => '3.0',
8727
- },
8849
+ PrintConv => \%bracketIncrementZ9,
8728
8850
  },
8729
8851
  #544 BracketProgram for ADL
8730
- 556 => {
8731
- Name => 'SecondarySlotFunction',
8732
- PrintConv => {
8733
- 0 => 'Overflow',
8734
- 1 => 'Backup',
8735
- 2 => 'NEF Primary + JPG Secondary',
8736
- 3 => 'JPG Primary + JPG Secondary',
8737
- },
8738
- },
8739
- 572 => { Name => 'DXCropAlert', PrintConv => \%offOn, },
8740
- 574 => { Name => 'SubjectDetection', PrintConv => \%subjectDetectionZ9},
8852
+ 556 => { Name => 'SecondarySlotFunction', PrintConv => \%secondarySlotFunctionZ9 },
8853
+ 572 => { Name => 'DXCropAlert', PrintConv => \%offOn },
8854
+ 574 => { Name => 'SubjectDetection', PrintConv => \%subjectDetectionZ9 },
8741
8855
  604 => {
8742
8856
  Name => 'MovieImageArea',
8743
8857
  Unknown => 1,
8744
- Mask => 0x01, #without the mask 4 => 'FX' 5 => DX only the 2nd Z-series field encountered with a mask.
8745
- PrintConv => {
8746
- 0 => 'FX',
8747
- 1 => 'DX',
8748
- },
8749
- },
8750
- 614 => {
8751
- Name => 'MovieType',
8752
- Unknown => 1,
8753
- PrintConv => {
8754
- 1 => 'H.265 8-bit (MP4)',
8755
- 2 => 'H.265 8-bit (MOV)',
8756
- 3 => 'H.265 10-bit (MOV)',
8757
- 4 => 'ProRes 422 HQ 10-bit (MOV)',
8758
- 5 => 'ProRes RAW HQ 12-bit (MOV)',
8759
- 6 => 'NRAW 12-bit (NEV)'
8760
- },
8858
+ Mask => 0x01, # without the mask 4 => 'FX', 5 => DX. only the 2nd Z-series field encountered with a mask
8859
+ PrintConv => \%imageAreaZ9b,
8761
8860
  },
8861
+ 614 => { Name => 'MovieType', PrintConv => \%movieTypeZ9, Unknown => 1 },
8762
8862
  616 => {
8763
8863
  Name => 'MovieISOAutoHiLimit',
8764
8864
  Format => 'int16u',
@@ -8767,115 +8867,44 @@ my %nikonFocalConversions = (
8767
8867
  ValueConvInv => '8 * ($val + 104)',
8768
8868
  PrintConv => \%iSOAutoHiLimitZ7,
8769
8869
  },
8770
- 618 => { Name => 'MovieISOAutoControlManualMode', PrintConv => \%offOn, Unknown => 1},
8870
+ 618 => { Name => 'MovieISOAutoControlManualMode', PrintConv => \%offOn, Unknown => 1 },
8771
8871
  620 => {
8772
8872
  Name => 'MovieISOAutoManualMode',
8773
8873
  Format => 'int16u',
8774
8874
  Unknown => 1,
8775
8875
  ValueConv => '($val-104)/8',
8776
- ValueConvInv => '8 * ($val + 104)',
8876
+ ValueConvInv => '8 * ($val + 104)',
8777
8877
  PrintConv => \%iSOAutoHiLimitZ7,
8778
8878
  },
8779
- 696 => { Name => 'MovieActiveD-Lighting', PrintConv => \%activeDLightingZ7, Unknown => 1},
8780
- 698 => { Name => 'MovieHighISONoiseReduction', PrintConv => \%offLowNormalHighZ7, Unknown => 1},
8781
- 704 => {
8782
- Name => 'MovieFlickerReduction',
8783
- PrintConv => {
8784
- 0 => 'Auto',
8785
- 1 => '50Hz',
8786
- 2 => '60Hz',
8787
- },
8788
- },
8789
- 706 => { Name => 'MovieMeteringMode', PrintConv => \%meteringModeZ7, , Unknown => 1},
8790
- 708 => { Name => 'MovieFocusMode', PrintConv => \%focusModeZ7, Unknown => 1},
8791
- 710 => {
8792
- Name => 'MovieAFAreaMode',
8793
- PrintConv => {
8794
- 1 => 'Single',
8795
- 3 => 'Wide (S)',
8796
- 4 => 'Wide (L)',
8797
- 6 => 'Auto',
8798
- 11 => 'Subject Tracking',
8799
- },
8800
- },
8801
- 712 => { Name => 'MovieVRMode', PrintConv => \%vRModeZ9, Unknown => 1},
8802
- 716 => { Name => 'MovieElectronicVR', PrintConv => \%offOn, Unknown => 1 }, #distinct from MoveieVRMode
8803
- 718 => { Name => 'MovieSoundRecording', PrintConv => { 0 => 'Off', 1 => 'On', 2 => 'On' }, Unknown => 1 }, #not sure why the unusal mapping with 2 => 'On'
8804
- 720 => { Name => 'MicrophoneSensitivity', Unknown => 1}, #1-20
8805
- 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
8806
8890
  724 => { Name => 'MicrophoneFrequencyResponse', PrintConv => { 0 => 'Wide Range', 1 => 'Vocal Range' }, Unknown => 1 },
8807
- 726 => { Name => 'WindNoiseReduction', PrintConv => \%offOn, Unknown => 1 },
8808
- 748 => {
8809
- Name => 'MovieToneMap',
8810
- Unknown => 1,
8811
- PrintConv => {
8812
- 0 => 'SDR',
8813
- 1 => 'HLG',
8814
- 2 => 'N-Log',
8815
- },
8816
- },
8817
- 754 => { Name => 'MovieFrameSize', PrintConv => \%movieFrameSizeZ9, Unknown => 1},
8818
- 756 => { Name => 'MovieFrameRate', PrintConv => \%movieFrameRateZ7, Unknown => 1},
8819
- 762 => { Name => 'MicrophoneJackPower', PrintConv => \%offOn, Unknown => 1 },
8820
- 763 => { Name => 'MovieDXCropAlert', PrintConv => \%offOn, Unknown => 1 },
8821
- 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 },
8822
8898
  799 => {
8823
8899
  Name => 'CustomSettingsZ9',
8824
8900
  Format => 'undef[608]',
8825
8901
  SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsZ9' },
8826
8902
  },
8827
- 1426 => {
8828
- Name => 'Language',
8829
- Unknown => 1,
8830
- PrintConv => {
8831
- 4 => 'English',
8832
- 5 => 'Spanish',
8833
- 7 => 'French',
8834
- },
8835
- },
8836
- 1428 => {
8837
- Name => 'TimeZone',
8838
- PrintConv => {
8839
- 5 => '+09:00 (Tokyo)',
8840
- 6 => '+08:00 (Beijing, Honk Kong, Sinapore)',
8841
- 10 => '+05:45 (Kathmandu)',
8842
- 11 => '+05:30 (New Dehli)',
8843
- 12 => '+05:00 (Islamabad)',
8844
- 13 => '+04:30 (Kabul)',
8845
- 14 => '+04:00 (Abu Dhabi)',
8846
- 15 => '+03:30 (Tehran)',
8847
- 16 => '+03:00 (Moscow, Nairobi)',
8848
- 17 => '+02:00 (Athens, Helsinki)',
8849
- 18 => '+01:00 (Madrid, Paris, Berlin)',
8850
- 19 => '+00:00 (London)',
8851
- 20 => '-01:00 (Azores)',
8852
- 21 => '-02:00 (Fernando de Noronha)',
8853
- 22 => '-03:00 (Buenos Aires, Sao Paulo)',
8854
- 23 => '-03:30 (Newfoundland)',
8855
- 24 => '-04:00 (Manaus, Caracas)',
8856
- 25 => '-05:00 (New York, Toronto, Lima)',
8857
- 26 => '-06:00 (Chicago, Mexico City)',
8858
- 27 => '-07:00 (Denver)',
8859
- 28 => '-08:00 (Los Angeles, Vancouver)',
8860
- 29 => '-09:00 (Anchorage)',
8861
- 30 => '-10:00 (Hawaii)',
8862
- },
8863
- },
8864
- 1434 => {Name => 'MonitorBrightness', ValueConv => '$val - 5', Unknown => 1}, # settings: -5 to +5
8865
- 1456 => { Name => 'AFFineTune', PrintConv => \%offOn, Unknown => 1 },
8866
- 1552 => {
8867
- Name => 'HDMIOutputResolution',
8868
- PrintConv => {
8869
- 0 => 'Auto',
8870
- 1 => '4320p',
8871
- 2 => '2160p',
8872
- 3 => '1080p',
8873
- #4 => '1080i',
8874
- 5 => '720p',
8875
- #6 => '576p',
8876
- #7 => '480p',
8877
- },
8878
- },
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 },
8879
8908
  1565 => { Name => 'SetClockFromLocationData', PrintConv => \%offOn, Unknown => 1 },
8880
8909
  1572 => { Name => 'AirplaneMode', PrintConv => \%offOn, Unknown => 1 },
8881
8910
  1573 => { Name => 'EmptySlotRelease', PrintConv => { 0 => 'Disable Release', 1 => 'Enable Release' }, Unknown => 1 },
@@ -8884,6 +8913,210 @@ my %nikonFocalConversions = (
8884
8913
  1636 => { Name => 'USBPowerDelivery', PrintConv => \%offOn, Unknown => 1 },
8885
8914
  1645 => { Name => 'SensorShield', PrintConv => { 0 => 'Stays Open', 1 => 'Closes' }, Unknown => 1 },
8886
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
+ );
8887
9120
 
8888
9121
  # Flash information (ref JD)
8889
9122
  %Image::ExifTool::Nikon::FlashInfo0100 = (
@@ -9999,7 +10232,7 @@ my %nikonFocalConversions = (
9999
10232
  },
10000
10233
  12 => {
10001
10234
  Name => 'FlashFocalLength',
10002
- 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
10003
10236
  RawConv => '($val and $val != 255) ? $val : undef',
10004
10237
  PrintConv => '"$val mm"',
10005
10238
  PrintConvInv => '$val=~/(\d+)/; $1 || 0',
@@ -10069,7 +10302,7 @@ my %nikonFocalConversions = (
10069
10302
  0x29 => [ #PH
10070
10303
  {
10071
10304
  Name => 'FlashGroupBOutput',
10072
- Condition => '$$self{FlashGroupBControlMode} >= 0x60',
10305
+ Condition => '$$self{FlashGroupBControlMode} >= 0x06',
10073
10306
  ValueConv => '2 ** (-$val/6)',
10074
10307
  ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
10075
10308
  PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
@@ -10109,6 +10342,7 @@ my %nikonFocalConversions = (
10109
10342
  %Image::ExifTool::Nikon::FlashInfo0300 = (
10110
10343
  %binaryDataAttrs,
10111
10344
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
10345
+ DATAMEMBER => [ 9.2, 17.1, 18.1, 18.2 ],
10112
10346
  0 => {
10113
10347
  Name => 'FlashInfoVersion',
10114
10348
  Format => 'string[4]',
@@ -10123,15 +10357,39 @@ my %nikonFocalConversions = (
10123
10357
  },
10124
10358
  },
10125
10359
  6 => {
10126
- Format => 'int8u[2]',
10127
10360
  Name => 'ExternalFlashFirmware',
10361
+ Format => 'int8u[2]',
10128
10362
  SeparateTable => 'FlashFirmware',
10129
10363
  PrintConv => \%flashFirmware,
10130
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
+ },
10131
10388
  10 => {
10132
10389
  Name => 'FlashCompensation',
10133
10390
  # this is the compensation from the camera (0x0012) for "Built-in" FlashType, or
10134
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
10135
10393
  Format => 'int8s',
10136
10394
  Priority => 0,
10137
10395
  ValueConv => '-$val/6',
@@ -10139,6 +10397,130 @@ my %nikonFocalConversions = (
10139
10397
  PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)',
10140
10398
  PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
10141
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
+ ],
10142
10524
  );
10143
10525
  # Unknown Flash information
10144
10526
  %Image::ExifTool::Nikon::FlashInfoUnknown = (
@@ -12103,7 +12485,7 @@ Nikon maker notes in EXIF information.
12103
12485
 
12104
12486
  =head1 AUTHOR
12105
12487
 
12106
- Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
12488
+ Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
12107
12489
 
12108
12490
  This library is free software; you can redistribute it and/or modify it
12109
12491
  under the same terms as Perl itself.