exiftool-vendored.exe 12.62.0 → 12.67.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 (52) hide show
  1. package/LICENSE +254 -254
  2. package/bin/exiftool_files/Changes +96 -1
  3. package/bin/exiftool_files/Makefile.PL +7 -1
  4. package/bin/exiftool_files/README +50 -46
  5. package/bin/exiftool_files/config_files/guano.config +161 -0
  6. package/bin/exiftool_files/exiftool.pl +113 -78
  7. package/bin/exiftool_files/lib/Image/ExifTool/7Z.pm +793 -0
  8. package/bin/exiftool_files/lib/Image/ExifTool/Apple.pm +19 -8
  9. package/bin/exiftool_files/lib/Image/ExifTool/BigTIFF.pm +8 -1
  10. package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +33 -12
  11. package/bin/exiftool_files/lib/Image/ExifTool/CanonRaw.pm +4 -4
  12. package/bin/exiftool_files/lib/Image/ExifTool/CanonVRD.pm +4 -1
  13. package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +31 -14
  14. package/bin/exiftool_files/lib/Image/ExifTool/FlashPix.pm +8 -2
  15. package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +6 -3
  16. package/bin/exiftool_files/lib/Image/ExifTool/GPS.pm +5 -2
  17. package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +5 -2
  18. package/bin/exiftool_files/lib/Image/ExifTool/Jpeg2000.pm +226 -28
  19. package/bin/exiftool_files/lib/Image/ExifTool/Lang/fr.pm +1467 -202
  20. package/bin/exiftool_files/lib/Image/ExifTool/MPF.pm +2 -1
  21. package/bin/exiftool_files/lib/Image/ExifTool/Matroska.pm +16 -1
  22. package/bin/exiftool_files/lib/Image/ExifTool/MinoltaRaw.pm +2 -2
  23. package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +948 -31
  24. package/bin/exiftool_files/lib/Image/ExifTool/NikonCustom.pm +874 -63
  25. package/bin/exiftool_files/lib/Image/ExifTool/PDF.pm +23 -5
  26. package/bin/exiftool_files/lib/Image/ExifTool/PLIST.pm +8 -1
  27. package/bin/exiftool_files/lib/Image/ExifTool/PLUS.pm +19 -4
  28. package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +6 -6
  29. package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +3 -1
  30. package/bin/exiftool_files/lib/Image/ExifTool/PhaseOne.pm +5 -5
  31. package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +91 -30
  32. package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +20 -19
  33. package/bin/exiftool_files/lib/Image/ExifTool/README +2 -2
  34. package/bin/exiftool_files/lib/Image/ExifTool/RIFF.pm +11 -9
  35. package/bin/exiftool_files/lib/Image/ExifTool/Samsung.pm +227 -227
  36. package/bin/exiftool_files/lib/Image/ExifTool/Shortcuts.pm +2 -1
  37. package/bin/exiftool_files/lib/Image/ExifTool/SigmaRaw.pm +4 -4
  38. package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +229 -30
  39. package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +4758 -4633
  40. package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +715 -23
  41. package/bin/exiftool_files/lib/Image/ExifTool/Validate.pm +17 -1
  42. package/bin/exiftool_files/lib/Image/ExifTool/WriteExif.pl +9 -7
  43. package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +21 -9
  44. package/bin/exiftool_files/lib/Image/ExifTool/WriteXMP.pl +2 -2
  45. package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +36 -12
  46. package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +14 -2
  47. package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +33 -1
  48. package/bin/exiftool_files/lib/Image/ExifTool/XMPStruct.pl +96 -28
  49. package/bin/exiftool_files/lib/Image/ExifTool/ZIP.pm +5 -5
  50. package/bin/exiftool_files/lib/Image/ExifTool.pm +184 -132
  51. package/bin/exiftool_files/lib/Image/ExifTool.pod +124 -58
  52. package/package.json +3 -2
@@ -60,11 +60,12 @@ package Image::ExifTool::Nikon;
60
60
  use strict;
61
61
  use vars qw($VERSION %nikonLensIDs %nikonTextEncoding);
62
62
  use Image::ExifTool qw(:DataAccess :Utils);
63
+ use Image::ExifTool::NikonCustom qw(%buttonsZ9);
63
64
  use Image::ExifTool::Exif;
64
65
  use Image::ExifTool::GPS;
65
66
  use Image::ExifTool::XMP;
66
67
 
67
- $VERSION = '4.22';
68
+ $VERSION = '4.25';
68
69
 
69
70
  sub LensIDConv($$$);
70
71
  sub ProcessNikonAVI($$$);
@@ -855,11 +856,17 @@ my %banksZ9 = (
855
856
 
856
857
  my %bracketIncrementZ9 = (
857
858
  0 => '0.3',
858
- #1 => '0.5',
859
+ 1 => '0.5',
859
860
  2 => '0.7',
860
861
  3 => '1.0',
861
862
  4 => '2.0',
862
863
  5 => '3.0',
864
+ 6 => '1.3',
865
+ 7 => '1.5',
866
+ 8 => '1.7',
867
+ 9 => '2.3',
868
+ 10 => '2.5',
869
+ 11 => '2.7',
863
870
  );
864
871
 
865
872
  my %bracketSetZ9 = (
@@ -925,6 +932,14 @@ my %hDMIOutputResolutionZ9 = (
925
932
  #7 => '480p',
926
933
  );
927
934
 
935
+ my %hdrLevelZ8 = (
936
+ 0 => 'Auto',
937
+ 1 => 'Extra High',
938
+ 2 => 'High',
939
+ 3 => 'Normal',
940
+ 4 => 'Low',
941
+ );
942
+
928
943
  my %highFrameRateZ9 = (
929
944
  0 => 'Off',
930
945
  1 => 'CH',
@@ -946,9 +961,10 @@ my %imageAreaZ9b = (
946
961
  );
947
962
 
948
963
  my %infoZSeries = (
949
- Condition => '$$self{Model} =~ /^NIKON Z (5|50|6|6_2|7|7_2|fc|9)\b/i',
950
- Notes => 'Z Series cameras thru December 2021',
964
+ Condition => '$$self{Model} =~ /^NIKON Z (30|5|50|6|6_2|7|7_2|8|fc|9)\b/i',
965
+ Notes => 'Z Series cameras thru July 2023',
951
966
  );
967
+
952
968
  my %iSOAutoHiLimitZ7 = (
953
969
  0 => 'ISO 64',
954
970
  1 => 'ISO 80',
@@ -1111,6 +1127,32 @@ my %multipleExposureModeZ9 = (
1111
1127
  2 => 'On (Series)',
1112
1128
  );
1113
1129
 
1130
+ my %nonCPULensApertureZ8 = ( # 2**(val/6) rounded - non-CPU aperture interface, values and storage differ from the Z8
1131
+ 12 => 'f/1.2',
1132
+ 24 => 'f/1.4',
1133
+ 40 => 'f/1.8',
1134
+ 48 => 'f/2.0',
1135
+ 64 => 'f/2.5',
1136
+ 72 => 'f/2.8',
1137
+ 84 => 'f/3.3',
1138
+ 88 => 'f/3.5',
1139
+ 96 => 'f/4.0',
1140
+ 104 => 'f/4.5',
1141
+ 112 => 'f/5.0',
1142
+ 120 => 'f/5.6',
1143
+ 128 => 'f/6.3',
1144
+ 136 => 'f/7.1',
1145
+ 144 => 'f/8',
1146
+ 156 => 'f/9.5',
1147
+ 168 => 'f/11',
1148
+ 180 => 'f/13',
1149
+ 188 => 'f/15',
1150
+ 192 => 'f/16',
1151
+ 204 => 'f/19',
1152
+ 216 => 'f/22',
1153
+ 313 => 'N/A', #camera menu shows "--" indicating value has not been set for the lens
1154
+ );
1155
+
1114
1156
  my %offLowNormalHighZ7 = (
1115
1157
  0 => 'Off',
1116
1158
  1 => 'Low',
@@ -1118,6 +1160,13 @@ my %offLowNormalHighZ7 = (
1118
1160
  3 => 'High',
1119
1161
  );
1120
1162
 
1163
+ my %portraitImpressionBalanceZ8 = (
1164
+ 0 => 'Off',
1165
+ 1 => 'Mode 1',
1166
+ 2 => 'Mode 2',
1167
+ 3 => 'Mode 3',
1168
+ );
1169
+
1121
1170
  my %releaseModeZ7 = (
1122
1171
  0 => 'Continuous Low',
1123
1172
  1 => 'Continuous High',
@@ -1139,6 +1188,7 @@ my %subjectDetectionZ9 = (
1139
1188
  2 => 'People',
1140
1189
  3 => 'Animals',
1141
1190
  4 => 'Vehicles',
1191
+ 6 => 'Airplanes',
1142
1192
  );
1143
1193
 
1144
1194
  my %timeZoneZ9 = (
@@ -1397,6 +1447,66 @@ my %afPoints81 = (
1397
1447
  17 => 'H6', 34 => 'G7', 51 => 'F8', 68 => 'A9',
1398
1448
  );
1399
1449
 
1450
+ # AF point indices for models with 493 focus points, eg. Z8/Z9 (ref 28)
1451
+ # - Auto Area AF uses 15 of the 17 rows (A-Q) and 27 of the 29 columns (1-27), center is H14 (405 of the 493 focus points can be used by Auto-area AF)
1452
+ #
1453
+ my %afPoints493 = (
1454
+ 1 => 'A1', 28 => 'B1', 55 => 'C1', 82 => 'D1', 109 => 'E1', 136 => 'F1', 163 => 'G1', 190 => 'H1',
1455
+ 2 => 'A2', 29 => 'B2', 56 => 'C2', 83 => 'D2', 110 => 'E2', 137 => 'F2', 164 => 'G2', 191 => 'H2',
1456
+ 3 => 'A3', 30 => 'B3', 57 => 'C3', 84 => 'D3', 111 => 'E3', 138 => 'F3', 165 => 'G3', 192 => 'H3',
1457
+ 4 => 'A4', 31 => 'B4', 58 => 'C4', 85 => 'D4', 112 => 'E4', 139 => 'F4', 166 => 'G4', 193 => 'H4',
1458
+ 5 => 'A5', 32 => 'B5', 59 => 'C5', 86 => 'D5', 113 => 'E5', 140 => 'F5', 167 => 'G5', 194 => 'H5',
1459
+ 6 => 'A6', 33 => 'B6', 60 => 'C6', 87 => 'D6', 114 => 'E6', 141 => 'F6', 168 => 'G6', 195 => 'H6',
1460
+ 7 => 'A7', 34 => 'B7', 61 => 'C7', 88 => 'D7', 115 => 'E7', 142 => 'F7', 169 => 'G7', 196 => 'H7',
1461
+ 8 => 'A8', 35 => 'B8', 62 => 'C8', 89 => 'D8', 116 => 'E8', 143 => 'F8', 170 => 'G8', 197 => 'H8',
1462
+ 9 => 'A9', 36 => 'B9', 63 => 'C9', 90 => 'D9', 117 => 'E9', 144 => 'F9', 171 => 'G9', 198 => 'H9',
1463
+ 10 => 'A10', 37 => 'B10', 64 => 'C10', 91 => 'D10', 118 => 'E10', 145 => 'F10', 172 => 'G10', 199 => 'H10',
1464
+ 11 => 'A11', 38 => 'B11' , 65 => 'C11', 92 => 'D11', 119 => 'E11', 146 => 'F11', 173 => 'G11', 200 => 'H11',
1465
+ 12 => 'A12', 39 => 'B12' , 66 => 'C12', 93 => 'D12', 120 => 'E12', 147 => 'F12', 174 => 'G12', 201 => 'H12',
1466
+ 13 => 'A13', 40 => 'B13' , 67 => 'C13', 94 => 'D13', 121 => 'E13', 148 => 'F13', 175 => 'G13', 202 => 'H13',
1467
+ 14 => 'A14', 41 => 'B14' , 68 => 'C14', 95 => 'D14', 122 => 'E14', 149 => 'F14', 176 => 'G14', 203 => 'H14',
1468
+ 15 => 'A15', 42 => 'B15', 69 => 'C15', 96 => 'D15', 123 => 'E15', 150 => 'F15', 177 => 'G15', 204 => 'H15',
1469
+ 16 => 'A16', 43 => 'B16' , 70 => 'C16', 97 => 'D16', 124 => 'E16', 151 => 'F16', 178 => 'G16', 205 => 'H16',
1470
+ 17 => 'A17', 44 => 'B17', 71 => 'C17', 98 => 'D17', 125 => 'E17', 152 => 'F17', 179 => 'G17', 206 => 'H17',
1471
+ 18 => 'A18', 45 => 'B18', 72 => 'C18', 99 => 'D18', 126 => 'E18', 153 => 'F18', 180 => 'G18', 207 => 'H18',
1472
+ 19 => 'A19', 46 => 'B19', 73 => 'C19', 100 => 'D19', 127 => 'E19', 154 => 'F19', 181 => 'G19', 208 => 'H19',
1473
+ 20 => 'A20', 47 => 'B20', 74 => 'C20', 101 => 'D20', 128 => 'E20', 155 => 'F20', 182 => 'G20', 209 => 'H20',
1474
+ 21 => 'A21', 48 => 'B21', 75 => 'C21', 102 => 'D21', 129 => 'E21', 156 => 'F21', 183 => 'G21', 210 => 'H21',
1475
+ 22 => 'A22', 49 => 'B22', 76 => 'C22', 103 => 'D22', 130 => 'E22', 157 => 'F22', 184 => 'G22', 211 => 'H22',
1476
+ 23 => 'A23', 50 => 'B23', 77 => 'C23', 104 => 'D23', 131 => 'E23', 158 => 'F23', 185 => 'G23', 212 => 'H23',
1477
+ 24 => 'A24', 51 => 'B24', 78 => 'C24', 105 => 'D24', 132 => 'E24', 159 => 'F24', 186 => 'G24', 213 => 'H24',
1478
+ 25 => 'A25', 52 => 'B25', 79 => 'C25', 106 => 'D25', 133 => 'E25', 160 => 'F25', 187 => 'G25', 214 => 'H25',
1479
+ 26 => 'A26', 53 => 'B26', 80 => 'C26', 107 => 'D26', 134 => 'E26', 161 => 'F26', 188 => 'G26', 215 => 'H26',
1480
+ 27 => 'A27', 54 => 'B27', 81 => 'C27', 108 => 'D27', 135 => 'E27', 162 => 'F27', 189 => 'G27', 216 => 'H27',
1481
+
1482
+ 217 => 'I1', 244 => 'J1', 271 => 'K1', 298 => 'L1', 325 => 'M1', 352 => 'N1', 379 => 'O1',
1483
+ 218 => 'I2', 245 => 'J2', 272 => 'K2', 299 => 'L2', 326 => 'M2', 353 => 'N2', 380 => 'O2',
1484
+ 219 => 'I3', 246 => 'J3', 273 => 'K3', 300 => 'L3', 327 => 'M3', 354 => 'N3', 381 => 'O3',
1485
+ 220 => 'I4', 247 => 'J4', 274 => 'K4', 301 => 'L4', 328 => 'M4', 355 => 'N4', 382 => 'O4',
1486
+ 221 => 'I5', 248 => 'J5', 275 => 'K5', 302 => 'L5', 329 => 'M5', 356 => 'N5', 383 => 'O5',
1487
+ 222 => 'I6', 249 => 'J6', 276 => 'K6', 303 => 'L6', 330 => 'M6', 357 => 'N6', 384 => 'O6',
1488
+ 223 => 'I7', 250 => 'J7', 277 => 'K7', 304 => 'L7', 331 => 'M7', 358 => 'N7', 385 => 'O7',
1489
+ 224 => 'I8', 251 => 'J8', 278 => 'K8', 305 => 'L8', 332 => 'M8', 359 => 'N8', 386 => 'O8',
1490
+ 225 => 'I9', 252 => 'J9', 279 => 'K9', 306 => 'L9', 333 => 'M9', 360 => 'N9', 387 => 'O9',
1491
+ 226 => 'I10', 253 => 'J10', 280 => 'K10', 307 => 'L10', 334 => 'M10', 361 => 'N10', 388 => 'O10',
1492
+ 227 => 'I11', 254 => 'J11', 281 => 'K11', 308 => 'L11', 335 => 'M11', 362 => 'N11', 389 => 'O11',
1493
+ 228 => 'I12', 255 => 'J12', 282 => 'K12', 309 => 'L12', 336 => 'M12', 363 => 'N12', 390 => 'O12',
1494
+ 229 => 'I13', 256 => 'J13', 283 => 'K13', 310 => 'L13', 337 => 'M13', 364 => 'N13', 391 => 'O13',
1495
+ 230 => 'I14', 257 => 'J14', 284 => 'K14', 311 => 'L14', 338 => 'M14', 365 => 'N14', 392 => 'O14',
1496
+ 231 => 'I15', 258 => 'J15', 285 => 'K15', 312 => 'L15', 339 => 'M15', 366 => 'N15', 393 => 'O15',
1497
+ 232 => 'I16', 259 => 'J16', 286 => 'K16', 313 => 'L16', 340 => 'M16', 367 => 'N16', 394 => 'O16',
1498
+ 233 => 'I17', 260 => 'J17', 287 => 'K17', 314 => 'L17', 341 => 'M17', 368 => 'N17', 395 => 'O17',
1499
+ 234 => 'I18', 261 => 'J18', 288 => 'K18', 315 => 'L18', 342 => 'M18', 369 => 'N18', 396 => 'O18',
1500
+ 235 => 'I19', 262 => 'J19', 289 => 'K19', 316 => 'L19', 343 => 'M19', 370 => 'N19', 397 => 'O19',
1501
+ 236 => 'I20', 263 => 'J20', 290 => 'K20', 317 => 'L20', 344 => 'M20', 371 => 'N20', 398 => 'O20',
1502
+ 237 => 'I21', 264 => 'J21', 291 => 'K21', 318 => 'L21', 345 => 'M21', 372 => 'N21', 399 => 'O21',
1503
+ 238 => 'I22', 265 => 'J22', 292 => 'K22', 319 => 'L22', 346 => 'M22', 373 => 'N22', 400 => 'O22',
1504
+ 239 => 'I23', 266 => 'J23', 293 => 'K23', 320 => 'L23', 347 => 'M23', 374 => 'N23', 401 => 'O23',
1505
+ 240 => 'I24', 267 => 'J24', 294 => 'K24', 321 => 'L24', 348 => 'M24', 375 => 'N24', 402 => 'O24',
1506
+ 241 => 'I25', 268 => 'J25', 295 => 'K25', 322 => 'L25', 349 => 'M25', 376 => 'N25', 403 => 'O25',
1507
+ 242 => 'I26', 269 => 'J26', 296 => 'K26', 323 => 'L26', 350 => 'M26', 377 => 'N26', 404 => 'O26',
1508
+ 243 => 'I27', 270 => 'J27', 297 => 'K27', 324 => 'L27', 351 => 'M27', 378 => 'N27', 405 => 'O27',
1509
+ );
1400
1510
  my %cropHiSpeed = ( #IB
1401
1511
  0 => 'Off',
1402
1512
  1 => '1.3x Crop', # (1.3x Crop, Large)
@@ -1523,6 +1633,7 @@ my %base64coord = (
1523
1633
  0x0006 => { Name => 'Sharpness', Writable => 'string' },
1524
1634
  0x0007 => {
1525
1635
  Name => 'FocusMode',
1636
+ RawConv => '$$self{FocusMode} = $val',
1526
1637
  Writable => 'string',
1527
1638
  },
1528
1639
  # FlashSetting (better named FlashSyncMode, ref 28) values:
@@ -1714,6 +1825,7 @@ my %base64coord = (
1714
1825
  PrintConv => {
1715
1826
  1 => 'sRGB',
1716
1827
  2 => 'Adobe RGB',
1828
+ 4 => 'BT.2100', #observed on Z8 with Tone Mode set to HLG
1717
1829
  },
1718
1830
  },
1719
1831
  0x001f => { #PH
@@ -1871,6 +1983,14 @@ my %base64coord = (
1871
1983
  Writable => 'rational64s',
1872
1984
  Count => 2,
1873
1985
  },
1986
+ 0x0044 => { #28
1987
+ Name => 'JPGCompression',
1988
+ RawConv => '($val) ? $val : undef', # undef for raw files
1989
+ PrintConv => {
1990
+ 1 => 'Size Priority',
1991
+ 3 => 'Optimal Quality',
1992
+ },
1993
+ },
1874
1994
  0x0045 => { #IB
1875
1995
  Name => 'CropArea',
1876
1996
  Notes => 'left, top, width, height',
@@ -1969,6 +2089,7 @@ my %base64coord = (
1969
2089
  0 => 'Did Not Fire',
1970
2090
  1 => 'Fired, Manual', #14
1971
2091
  3 => 'Not Ready', #28
2092
+ #5 observed on Z9 firing remote SB-5000 via WR-R11a optical awl
1972
2093
  7 => 'Fired, External', #14
1973
2094
  8 => 'Fired, Commander Mode',
1974
2095
  9 => 'Fired, TTL Mode',
@@ -2309,6 +2430,15 @@ my %base64coord = (
2309
2430
  ByteOrder => 'LittleEndian',
2310
2431
  },
2311
2432
  },
2433
+ { # (Z8 firmware version 1.00 ref 28)
2434
+ Condition => '$$valPt =~ /^0806/',
2435
+ Name => 'ShotInfoZ8',
2436
+ SubDirectory => {
2437
+ TagTable => 'Image::ExifTool::Nikon::ShotInfoZ8',
2438
+ DecryptStart => 4,
2439
+ ByteOrder => 'LittleEndian',
2440
+ },
2441
+ },
2312
2442
  { # (Z9 firmware version 1.00 ref 28)
2313
2443
  Condition => '$$valPt =~ /^0805/',
2314
2444
  Name => 'ShotInfoZ9',
@@ -2759,7 +2889,7 @@ my %base64coord = (
2759
2889
  },
2760
2890
  0x00b7 => [{
2761
2891
  Name => 'AFInfo2',
2762
- Condition => '$$self{Model} =~ /^NIKON Z 9\b/i', #AFInfo2Version 0400
2892
+ Condition => '$$self{Model} =~ /^NIKON (Z 8|Z 9)\b/i', #AFInfo2Version 0400
2763
2893
  SubDirectory => { TagTable => 'Image::ExifTool::Nikon::AFInfo2V0400' },
2764
2894
  },{ #JD
2765
2895
  Name => 'AFInfo2',
@@ -3888,6 +4018,7 @@ my %base64coord = (
3888
4018
  205 => 'Dynamic Area (M)', #28 (Z9)
3889
4019
  206 => 'Dynamic Area (L)', #28 (Z9)
3890
4020
  207 => '3D-tracking', #28 (Z9)
4021
+ 208 => 'Wide-Area (C1/C2)', #28 (Z8, Z9)
3891
4022
  },
3892
4023
  },
3893
4024
  ],
@@ -4469,6 +4600,15 @@ my %base64coord = (
4469
4600
  208 => 'Wide (C1/C2)',
4470
4601
  },
4471
4602
  },
4603
+ 10 => {
4604
+ Name => 'AFPointsUsed',
4605
+ Condition => '$$self{AFAreaMode} == 6', #only valid for Auto AF Area mode. Other modes handled via AFAreaXPosition/AFAreaYPosition
4606
+ Format => 'undef[51]',
4607
+ ValueConv => 'join(" ", unpack("H2"x51, $val))',
4608
+ ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
4609
+ PrintConv => sub { PrintAFPoints(shift, \%afPoints493); },
4610
+ PrintConvInv => sub { PrintAFPointsInv(shift, \%afPoints493); },
4611
+ },
4472
4612
  0x3e => {
4473
4613
  Name => 'AFImageWidth',
4474
4614
  Format => 'int16u',
@@ -5165,7 +5305,7 @@ my %nikonFocalConversions = (
5165
5305
  %binaryDataAttrs,
5166
5306
  NOTES => 'Tags found in the encrypted LensData from cameras such as the Z6 and Z7.',
5167
5307
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
5168
- DATAMEMBER => [ 0x03, 0x2f, 0x35, 0x4c, 0x56 ],
5308
+ DATAMEMBER => [ 0x03, 0x2f, 0x35, 0x4c, 0x56, 0x58 ],
5169
5309
  0x00 => {
5170
5310
  Name => 'LensDataVersion',
5171
5311
  Format => 'string[4]',
@@ -5345,7 +5485,7 @@ my %nikonFocalConversions = (
5345
5485
  0x4c => { #28
5346
5486
  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.
5347
5487
  Format => 'int8u',
5348
- Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1',
5488
+ Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1 and $$self{FocusMode} ne "Manual"',
5349
5489
  RawConv => '$$self{FocusDistanceRangeWidth} = $val',
5350
5490
  Unknown => 1,
5351
5491
  },
@@ -5354,19 +5494,26 @@ my %nikonFocalConversions = (
5354
5494
  Format => 'int16u',
5355
5495
  Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1',
5356
5496
  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
5357
- ValueConv => '0.01 * 10**($val/40)', # in m
5358
- ValueConvInv => '$val>0 ? 40*log($val*100)/log(10) : 0',
5497
+ ValueConv => '2**(($val-80)/12)', # in m #slighly more accurate than the legacy calcualtion of '0.01 * 10**($val/40)'. Tested at all focus positions using the 105mm,70-200mm & 600mm
5498
+ ValueConvInv => '$val>0 ? log(12*($val+80)/log(2) : 0', #was '$val>0 ? 40*log($val*100)/log(10) : 0'
5359
5499
  PrintConv => q{
5360
- (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
5500
+ (defined $$self{FocusStepsFromInfinity} and not $$self{FocusStepsFromInfinity}) ? "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
5361
5501
  },
5362
5502
  },
5363
- 0x56 => { #28
5503
+ 0x56 => { #28 #not valif for focus mode M
5364
5504
  Name => 'LensDriveEnd', # byte contains: 1 at CFD/MOD; 2 at Infinity; 0 otherwise
5365
- Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1',
5505
+ Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1 and $$self{FocusMode} ne "Manual"',
5366
5506
  Format => 'int8u',
5367
5507
  RawConv => 'unless (defined $$self{FocusDistanceRangeWidth} and not $$self{FocusDistanceRangeWidth}) { if ($val == 0 ) {$$self{LensDriveEnd} = "No"} else { $$self{LensDriveEnd} = "CFD"}; } else{ $$self{LensDriveEnd} = "Inf"}',
5368
5508
  Unknown => 1,
5369
5509
  },
5510
+ 0x58 => { #28
5511
+ Name => 'FocusStepsFromInfinity',
5512
+ Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1', #valid for both AF and manual focus modes
5513
+ Format => 'int8u',
5514
+ RawConv => '$$self{FocusStepsFromInfinity} = $val', # 0 at Infinity, otherwise a small positive number monotonically increasing towards CFD.
5515
+ Unknown => 1,
5516
+ },
5370
5517
  0x5a => { #28
5371
5518
  Name => 'LensPositionAbsolute', # <=0 at infinity. Typical value at CFD might be 58000. Only valid for Z-mount lenses.
5372
5519
  Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1',
@@ -8149,6 +8296,75 @@ my %nikonFocalConversions = (
8149
8296
  },
8150
8297
  );
8151
8298
 
8299
+ # shot information for the Z8 firmware 1.00 (encrypted) - ref 28
8300
+ %Image::ExifTool::Nikon::ShotInfoZ8 = (
8301
+ PROCESS_PROC => \&ProcessNikonEncrypted,
8302
+ WRITE_PROC => \&ProcessNikonEncrypted,
8303
+ CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
8304
+ VARS => { ID_LABEL => 'Index', NIKON_OFFSETS => 0x24 },
8305
+ DATAMEMBER => [ 0x04 ],
8306
+ IS_SUBDIR => [ 0x30, 0x84, 0x8c ],
8307
+ WRITABLE => 1,
8308
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
8309
+ NOTES => 'These tags are extracted from encrypted data in images from the Z8.',
8310
+ 0x00 => {
8311
+ Name => 'ShotInfoVersion',
8312
+ Format => 'string[4]',
8313
+ Writable => 0,
8314
+ },
8315
+ 0x04 => {
8316
+ Name => 'FirmwareVersion',
8317
+ DataMember => 'FirmwareVersion',
8318
+ Format => 'string[8]',
8319
+ Writable => 0,
8320
+ RawConv => '$$self{FirmwareVersion} = $val',
8321
+ },
8322
+ 0x0e => {
8323
+ Name => 'FirmwareVersion2',
8324
+ Format => 'string[8]',
8325
+ Writable => 0,
8326
+ Hidden => 1,
8327
+ },
8328
+ 0x18 => {
8329
+ Name => 'FirmwareVersion3',
8330
+ Format => 'string[8]',
8331
+ Writable => 0,
8332
+ Hidden => 1,
8333
+ },
8334
+ 0x24 => {
8335
+ Name => 'NumberOffsets', # number of entries in offset table. offsets are from start of ShotInfo data.
8336
+ Format => 'int32u',
8337
+ Writable => 0,
8338
+ Hidden => 1,
8339
+ },
8340
+ # subdirectories, referenced by offsets (not processed if offset is zero)
8341
+ 0x30 => {
8342
+ Name => 'SequenceOffset',
8343
+ Format => 'int32u',
8344
+ SubDirectory => {
8345
+ TagTable => 'Image::ExifTool::Nikon::SeqInfoZ9',
8346
+ Start => '$val',
8347
+ },
8348
+ },
8349
+ 0x84 => {
8350
+ Name => 'OrientOffset',
8351
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96', #not valid for C30/C60/C120
8352
+ Format => 'int32u',
8353
+ SubDirectory => {
8354
+ TagTable => 'Image::ExifTool::Nikon::OrientationInfo',
8355
+ Start => '$val',
8356
+ },
8357
+ },
8358
+ 0x8c => {
8359
+ Name => 'MenuOffset',
8360
+ Format => 'int32u',
8361
+ SubDirectory => {
8362
+ TagTable => 'Image::ExifTool::Nikon::MenuInfoZ8',
8363
+ Start => '$val',
8364
+ },
8365
+ },
8366
+ );
8367
+
8152
8368
  # shot information for the Z9 firmware 1.00 (encrypted) - ref 28
8153
8369
  %Image::ExifTool::Nikon::ShotInfoZ9 = (
8154
8370
  PROCESS_PROC => \&ProcessNikonEncrypted,
@@ -8156,7 +8372,7 @@ my %nikonFocalConversions = (
8156
8372
  CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
8157
8373
  VARS => { ID_LABEL => 'Index', NIKON_OFFSETS => 0x24 },
8158
8374
  DATAMEMBER => [ 0x04 ],
8159
- IS_SUBDIR => [ 0x30, 0x58, 0x84, 0x8c ],
8375
+ IS_SUBDIR => [ 0x30, 0x58, 0x80, 0x84, 0x8c ],
8160
8376
  WRITABLE => 1,
8161
8377
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
8162
8378
  NOTES => 'These tags are extracted from encrypted data in images from the Z9.',
@@ -8200,14 +8416,25 @@ my %nikonFocalConversions = (
8200
8416
  },
8201
8417
  },
8202
8418
  0x58 => {
8203
- Name => 'Offset13', #offset13 - length x'8f80 (Z9 firmware 3.01 NEF), using currently for a few foucs related tags. Might be premature to give the offset a more meaningful name at this point.
8419
+ Name => 'Offset13', #offset13 - length x'8f80 (Z9 firmware 3.01 NEF), using currently for a few focus related tags. Might be premature to give the offset a more meaningful name at this point.
8204
8420
  Condition => '$$self{FirmwareVersion} and $$self{FirmwareVersion} ge "03.01"',
8205
8421
  Format => 'int32u',
8422
+ AlwaysDecrypt => 1, # (necessary because FirmwareVersion is extracted after decryption time)
8206
8423
  SubDirectory => {
8207
8424
  TagTable => 'Image::ExifTool::Nikon::Offset13InfoZ9',
8208
8425
  Start => '$val',
8209
8426
  },
8210
8427
  },
8428
+ 0x80 => {
8429
+ Name => 'AutoCaptureOffset',
8430
+ Condition => '$$self{FirmwareVersion} and $$self{FirmwareVersion} ge "04.00"',
8431
+ Format => 'int32u',
8432
+ AlwaysDecrypt => 1, # (necessary because FirmwareVersion is extracted after decryption time)
8433
+ SubDirectory => {
8434
+ TagTable => 'Image::ExifTool::Nikon::AutoCaptureInfo',
8435
+ Start => '$val',
8436
+ },
8437
+ },
8211
8438
  0x84 => {
8212
8439
  Name => 'OrientOffset',
8213
8440
  Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96', #not valid for C30/C60/C120
@@ -8232,6 +8459,8 @@ my %nikonFocalConversions = (
8232
8459
  %binaryDataAttrs,
8233
8460
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
8234
8461
  DATAMEMBER => [ 0x20, 0x28, 0x2a ],
8462
+ #0x0019 => HDRFrame # For JPG 0=> Not HDR; 1=> file is the blended exposure. For raw files: 0=> Not from an HDR capture sequence; otherwise frame number in the HDR capture sequence -- 'Save Individual Pictures (RAW)' must be enabled.
8463
+ #0x001A => MultipleExposureFrame # For JPG 0=> Not a multiple exposure; 1=> file is the blended exposure. For raw files: 0=> Not a multiple exposure capture; otherwise frame number in the capture sequence -- 'Save Individual Pictures (RAW)' must be enabled.
8235
8464
  0x0020 => {
8236
8465
  Name => 'FocusShiftShooting',
8237
8466
  Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96', #not valid for C30/C60/C120
@@ -8409,6 +8638,24 @@ my %nikonFocalConversions = (
8409
8638
  },
8410
8639
  );
8411
8640
 
8641
+ %Image::ExifTool::Nikon::MenuInfoZ8 = (
8642
+ %binaryDataAttrs,
8643
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
8644
+ IS_SUBDIR => [ 0x10 ],
8645
+ # 0x00 - int32u size of this directory
8646
+ 0x10 => [
8647
+ {
8648
+ Name => 'MenuSettingsOffsetZ8',
8649
+ Format => 'int32u',
8650
+ Notes => 'Firmware versions 1.0.0',
8651
+ SubDirectory => {
8652
+ TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ8',
8653
+ Start => '$dirStart + $val',
8654
+ },
8655
+ },
8656
+ ],
8657
+ );
8658
+
8412
8659
  %Image::ExifTool::Nikon::MenuInfoZ9 = (
8413
8660
  %binaryDataAttrs,
8414
8661
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
@@ -8427,16 +8674,144 @@ my %nikonFocalConversions = (
8427
8674
  },
8428
8675
  {
8429
8676
  Name => 'MenuSettingsOffsetZ9v3',
8430
- Notes => 'Firmware versions 3.0 and later',
8677
+ Condition => '$$self{FirmwareVersion} and $$self{FirmwareVersion} lt "04.00"',
8678
+ Notes => 'Firmware versions 3.0 and v3.10',
8431
8679
  Format => 'int32u',
8432
8680
  SubDirectory => {
8433
8681
  TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ9v3',
8434
8682
  Start => '$dirStart + $val',
8435
8683
  },
8436
8684
  },
8685
+ {
8686
+ Name => 'MenuSettingsOffsetZ9v4',
8687
+ Notes => 'Firmware versions 4.0 and later',
8688
+ Format => 'int32u',
8689
+ SubDirectory => {
8690
+ TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ9v4',
8691
+ Start => '$dirStart + $val',
8692
+ },
8693
+ },
8437
8694
  ],
8438
8695
  );
8439
8696
 
8697
+ %Image::ExifTool::Nikon::AutoCaptureInfo = (
8698
+ %binaryDataAttrs,
8699
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
8700
+ DATAMEMBER => [ 0 ],
8701
+ 0 => {
8702
+ Name => 'AutoCapturedFrame',
8703
+ RawConv => '$$self{AutoCapturedFrame} = $val',
8704
+ PrintConv => {
8705
+ 0 => 'No',
8706
+ 5 => 'Yes',
8707
+ },
8708
+ },
8709
+ 1 => {
8710
+ Name => 'AutoCaptureCriteria',
8711
+ Condition => '$$self{AutoCapturedFrame} and $$self{AutoCapturedFrame} ne 0',
8712
+ PrintConv => q[
8713
+ $_ = '';
8714
+ return $_ . Image::ExifTool::DecodeBits($val,
8715
+ {
8716
+ 0 => 'Distance',
8717
+ 1 => 'Motion',
8718
+ 2 => 'Subject Detection',
8719
+ });
8720
+ ],
8721
+ },
8722
+ # offsets 3-52 contain a bitmap of the focus points enabled when AutoArea is the AF-Area Mode. 0=> disabled, 1=> enabled. Focus points are in a grid with dimensions 25x15.
8723
+ 55 => {
8724
+ Name => 'AutoCaptureRecordingTime',
8725
+ Condition => '$$self{AutoCapturedFrame} and $$self{AutoCapturedFrame} ne 0',
8726
+ PrintConv => {
8727
+ 0 => '1 Sec',
8728
+ 1 => '3 Sec',
8729
+ 2 => '5 Sec',
8730
+ #3 => '',
8731
+ 4 => '30 Sec',
8732
+ 5 => 'No Limit',
8733
+ 6 => '2 Sec',
8734
+ 7 => '10 Sec',
8735
+ 8 => '20 Sec',
8736
+ 9 => '1 Min',
8737
+ 10 => '3 Min',
8738
+ 11 => '5 Min',
8739
+ 12 => '10 Min',
8740
+ 13 => '30 Min',
8741
+ },
8742
+ },
8743
+ 56 => {
8744
+ Name => 'AutoCaptureWaitTime',
8745
+ Condition => '$$self{AutoCapturedFrame} and $$self{AutoCapturedFrame} ne 0',
8746
+ PrintConv => {
8747
+ 0 => 'No Wait',
8748
+ 1 => '10 Sec',
8749
+ 2 => '30 Sec',
8750
+ 3 => '1 Min',
8751
+ 4 => '5 Min',
8752
+ 5 => '10 Min',
8753
+ 6 => '30 Min',
8754
+ 7 => '1 Sec',
8755
+ 8 => '2 Sec',
8756
+ 9 => '3 Sec',
8757
+ 10 => '5 Sec',
8758
+ 11 => '20 Sec',
8759
+ 12 => '3 Min',
8760
+ },
8761
+ },
8762
+ 74 => {
8763
+ Name => 'AutoCaptureDistanceFar',
8764
+ Condition => '$$self{AutoCapturedFrame} and $$self{AutoCapturedFrame} ne 0',
8765
+ PrintConv => 'sprintf("%.1f m", $val/10)',
8766
+ },
8767
+ 78 => {
8768
+ Name => 'AutoCaptureDistanceNear',
8769
+ Condition => '$$self{AutoCapturedFrame} and $$self{AutoCapturedFrame} ne 0',
8770
+ PrintConv => 'sprintf("%.1f m", $val/10)',
8771
+ },
8772
+ 95 => {
8773
+ Name => 'AutoCaptureCriteriaMotionDirection',
8774
+ Condition => '$$self{AutoCapturedFrame} and $$self{AutoCapturedFrame} ne 0',
8775
+ PrintConv => q[
8776
+ return 'All' if $val eq 255;
8777
+ $_ = '';
8778
+ return $_ . Image::ExifTool::DecodeBits($val,
8779
+ {
8780
+ 0 => 'Top Left',
8781
+ 1 => 'Top Right',
8782
+ 2 => 'Bottom Left',
8783
+ 3 => 'Bottom Right',
8784
+ 4 => 'Left',
8785
+ 5 => 'Right',
8786
+ 6 => 'Top Center',
8787
+ 7 => 'Bottom Center',
8788
+ });
8789
+ ],
8790
+ },
8791
+ 99 => {
8792
+ Name => 'AutoCaptureCriteriaMotionSpeed', #1-5
8793
+ Condition => '$$self{AutoCapturedFrame} and $$self{AutoCapturedFrame} ne 0',
8794
+ },
8795
+ 100 => {
8796
+ Name => 'AutoCaptureCriteriaMotionSize', #1-5
8797
+ Condition => '$$self{AutoCapturedFrame} and $$self{AutoCapturedFrame} ne 0',
8798
+ },
8799
+ 105 => {
8800
+ Name => 'AutoCaptureCriteriaSubjectSize', #1-5
8801
+ Condition => '$$self{AutoCapturedFrame} and $$self{AutoCapturedFrame} ne 0',
8802
+ },
8803
+ 106 => {
8804
+ Name => 'AutoCaptureCriteriaSubjectType',
8805
+ Condition => '$$self{AutoCapturedFrame} and $$self{AutoCapturedFrame} ne 0',
8806
+ PrintConv => {
8807
+ 0 => 'Auto (all)',
8808
+ 1 => 'People',
8809
+ 2 => 'Animals',
8810
+ 3 => 'Vehicle'
8811
+ },
8812
+ },
8813
+ );
8814
+
8440
8815
  %Image::ExifTool::Nikon::OrientationInfo = (
8441
8816
  %binaryDataAttrs,
8442
8817
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
@@ -8703,10 +9078,253 @@ my %nikonFocalConversions = (
8703
9078
  #859 => HDMIViewAssist
8704
9079
  );
8705
9080
 
9081
+ %Image::ExifTool::Nikon::MenuSettingsZ8 = (
9082
+ %binaryDataAttrs,
9083
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
9084
+ DATAMEMBER => [ 152, 200, 204, 244, 440, 548, 554, 570, 596 ],
9085
+ IS_SUBDIR => [ 943 ],
9086
+ NOTES => 'These tags are used by the Z8 firmware 1.00.',
9087
+ 72 => {
9088
+ Name => 'HighFrameRate', #CH and C30/C60/C120 but not CL
9089
+ PrintConv => \%highFrameRateZ9,
9090
+ },
9091
+ 152 => {
9092
+ Name => 'MultipleExposureMode',
9093
+ RawConv => '$$self{MultipleExposureMode} = $val',
9094
+ PrintConv => \%multipleExposureModeZ9,
9095
+ },
9096
+ 154 => {Name => 'MultiExposureShots', Condition => '$$self{MultipleExposureMode} != 0'}, #range 2-9
9097
+ 184 => {
9098
+ Name => 'IntervalDurationHours',
9099
+ Format => 'int32u',
9100
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0',
9101
+ },
9102
+ 188 => {
9103
+ Name => 'IntervalDurationMinutes',
9104
+ Format => 'int32u',
9105
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0',
9106
+ },
9107
+ 192 => {
9108
+ Name => 'IntervalDurationSeconds',
9109
+ Format => 'int32u',
9110
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0',
9111
+ },
9112
+ 200 => {
9113
+ Name => 'Intervals',
9114
+ Format => 'int32u',
9115
+ RawConv => '$$self{IntervalShootingIntervals} = $val',
9116
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0',
9117
+ },
9118
+ 204 => {
9119
+ Name => 'ShotsPerInterval',
9120
+ Format => 'int32u',
9121
+ RawConv => '$$self{IntervalShootingShotsPerInterval} = $val',
9122
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0',
9123
+ },
9124
+ 208 => {
9125
+ Name => 'IntervalExposureSmoothing',
9126
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0',
9127
+ Format => 'int8u',
9128
+ PrintConv => \%offOn,
9129
+ },
9130
+ 210 => {
9131
+ Name => 'IntervalPriority',
9132
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0',
9133
+ Format => 'int8u',
9134
+ PrintConv => \%offOn,
9135
+ },
9136
+ 244 => {
9137
+ Name => 'FocusShiftNumberShots', #1-300
9138
+ RawConv => '$$self{FocusShiftNumberShots} = $val',
9139
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
9140
+ },
9141
+ 248 => {
9142
+ Name => 'FocusShiftStepWidth', #1(Narrow) to 10 (Wide)
9143
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
9144
+ },
9145
+ 252 => {
9146
+ Name => 'FocusShiftInterval',
9147
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
9148
+ PrintConv => '$val == 1? "1 Second" : sprintf("%.0f Seconds",$val)',
9149
+ },
9150
+ 256 => {
9151
+ Name => 'FocusShiftExposureLock',
9152
+ Unknown => 1,
9153
+ PrintConv => \%offOn,
9154
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
9155
+ },
9156
+ 286 => { Name => 'PhotoShootingMenuBank', PrintConv => \%banksZ9 },
9157
+ 288 => { Name => 'ExtendedMenuBanks', PrintConv => \%offOn }, # single tag from both Photo & Video menus
9158
+ 324 => { Name => 'PhotoShootingMenuBankImageArea', PrintConv => \%imageAreaZ9 },
9159
+ 338 => { Name => 'AutoISO', PrintConv => \%offOn },
9160
+ 340 => {
9161
+ Name => 'ISOAutoHiLimit',
9162
+ Format => 'int16u',
9163
+ Unknown => 1,
9164
+ ValueConv => '($val-104)/8',
9165
+ ValueConvInv => '8 * ($val + 104)',
9166
+ PrintConv => \%iSOAutoHiLimitZ7,
9167
+ },
9168
+ 342 => {
9169
+ Name => 'ISOAutoFlashLimit',
9170
+ Format => 'int16u',
9171
+ Unknown => 1,
9172
+ ValueConv => '($val-104)/8',
9173
+ ValueConvInv => '8 * ($val + 104)',
9174
+ PrintConv => \%iSOAutoHiLimitZ7,
9175
+ },
9176
+ 350 => {
9177
+ Name => 'ISOAutoShutterTime', # shutter speed is 2 ** (-$val/24)
9178
+ ValueConv => '$val / 8',
9179
+ Format => 'int16s',
9180
+ PrintConv => \%iSOAutoShutterTimeZ9,
9181
+ },
9182
+ 432 => { Name => 'MovieVignetteControl', PrintConv => \%offLowNormalHighZ7, Unknown => 1 },
9183
+ 434 => { Name => 'DiffractionCompensation', PrintConv => \%offOn }, # value can be set from both the Photo Shoot Menu and the Video Shooting Menu
9184
+ 436 => { Name => 'FlickerReductionShooting',PrintConv => \%offOn },
9185
+ 440 => {
9186
+ Name => 'FlashControlMode', # this and nearby tag values for flash may be set from either the Photo Shooting Menu or using the Flash unit menu
9187
+ RawConv => '$$self{FlashControlMode} = $val',
9188
+ PrintConv => \%flashControlModeZ7,
9189
+ },
9190
+ 548 => { Name => 'AFAreaMode', RawConv => '$$self{AFAreaMode} = $val', PrintConv => \%aFAreaModeZ9},
9191
+ 550 => { Name => 'VRMode', PrintConv => \%vRModeZ9},
9192
+ 554 => {
9193
+ Name => 'BracketSet',
9194
+ RawConv => '$$self{BracketSet} = $val',
9195
+ PrintConv => \%bracketSetZ9,
9196
+ },
9197
+ 556 => {
9198
+ Name => 'BracketProgram',
9199
+ Condition => '$$self{BracketSet} < 3',
9200
+ Notes => 'AE and/or Flash Bracketing',
9201
+ PrintConv => \%bracketProgramZ9,
9202
+ },
9203
+ 558 => {
9204
+ Name => 'BracketIncrement',
9205
+ Condition => '$$self{BracketSet} < 3',
9206
+ Notes => 'AE and/or Flash Bracketing',
9207
+ PrintConv => \%bracketIncrementZ9,
9208
+ },
9209
+ 570 => { Name => 'HDR', RawConv => '$$self{HDR} = $val', PrintConv => \%multipleExposureModeZ9 },
9210
+ #572 HDRSaveRaw 0=> No; 1=> Yes
9211
+ 576 => { Name => 'SecondarySlotFunction', PrintConv => \%secondarySlotFunctionZ9 },
9212
+ 582 => { Name => 'HDRLevel', Condition => '$$self{HDR} ne 0', PrintConv => \%hdrLevelZ8 },
9213
+ 586 => { Name => 'Slot2JpgSize', PrintConv => { 0 => 'Large (8256x5504)', 1 => 'Medium (6192x4128)', 2 => 'Small (4128x2752)' }, Unknown => 1},
9214
+ 592 => { Name => 'DXCropAlert', PrintConv => \%offOn },
9215
+ 594 => { Name => 'SubjectDetection', PrintConv => \%subjectDetectionZ9 },
9216
+ 596 => {
9217
+ Name => 'DynamicAFAreaSize',
9218
+ Condition => '$$self{AFAreaMode} == 2',
9219
+ RawConv => '$$self{DynamicAFAreaSize} = $val',
9220
+ PrintConv => \%dynamicAfAreaModesZ9,
9221
+ },
9222
+ 618 => { Name => 'ToneMap', PrintConv => { 0 => 'SDR', 1 => 'HLG' }, Unknown => 1 },
9223
+ 622 => { Name => 'PortraitImpressionBalance', PrintConv => \%portraitImpressionBalanceZ8 },
9224
+ 636 => { Name => 'HighFrequencyFlickerReductionShooting', PrintConv => \%offOn, Unknown => 1 }, # new with firmware 3.0
9225
+ 730 => {
9226
+ Name => 'MovieImageArea',
9227
+ Unknown => 1,
9228
+ Mask => 0x01, # without the mask 4 => 'FX' 5 => DX only the 2nd Z-series field encountered with a mask.
9229
+ PrintConv => \%imageAreaZ9b,
9230
+ },
9231
+ 740 => { Name => 'MovieType', PrintConv => \%movieTypeZ9, Unknown => 1 },
9232
+ 742 => {
9233
+ Name => 'MovieISOAutoHiLimit',
9234
+ Format => 'int16u',
9235
+ Unknown => 1,
9236
+ ValueConv => '($val-104)/8',
9237
+ ValueConvInv => '8 * ($val + 104)',
9238
+ PrintConv => \%iSOAutoHiLimitZ7,
9239
+ },
9240
+ 744 => { Name => 'MovieISOAutoControlManualMode', PrintConv => \%offOn, Unknown => 1 },
9241
+ 746 => {
9242
+ Name => 'MovieISOAutoManualMode',
9243
+ Format => 'int16u',
9244
+ Unknown => 1,
9245
+ ValueConv => '($val-104)/8',
9246
+ ValueConvInv => '8 * ($val + 104)',
9247
+ PrintConv => \%iSOAutoHiLimitZ7,
9248
+ },
9249
+ 820 => { Name => 'MovieActiveD-Lighting', PrintConv => \%activeDLightingZ7, Unknown => 1 },
9250
+ 822 => { Name => 'MovieHighISONoiseReduction', PrintConv => \%offLowNormalHighZ7, Unknown => 1 },
9251
+ 828 => { Name => 'MovieFlickerReduction', PrintConv => \%movieFlickerReductionZ9 },
9252
+ 830 => { Name => 'MovieMeteringMode', PrintConv => \%meteringModeZ7, Unknown => 1 },
9253
+ 832 => { Name => 'MovieFocusMode', PrintConv => \%focusModeZ7, Unknown => 1 },
9254
+ 834 => { Name => 'MovieAFAreaMode', PrintConv => \%aFAreaModeZ9 },
9255
+ 836 => { Name => 'MovieVRMode', PrintConv => \%vRModeZ9, Unknown => 1 },
9256
+ 840 => { Name => 'MovieElectronicVR', PrintConv => \%offOn, Unknown => 1 }, # distinct from MoveieVRMode
9257
+ 842 => { Name => 'MovieSoundRecording', PrintConv => { 0 => 'Off', 1 => 'Auto', 2 => 'Manual' }, Unknown => 1 },
9258
+ 844 => { Name => 'MicrophoneSensitivity', Unknown => 1 }, # 1-20
9259
+ 846 => { Name => 'MicrophoneAttenuator', PrintConv => \%offOn, Unknown => 1 }, # distinct from MoveieVRMode
9260
+ 848 => { Name => 'MicrophoneFrequencyResponse',PrintConv => { 0 => 'Wide Range', 1 => 'Vocal Range' }, Unknown => 1 },
9261
+ 850 => { Name => 'WindNoiseReduction', PrintConv => \%offOn, Unknown => 1 },
9262
+ 882 => { Name => 'MovieFrameSize', PrintConv => \%movieFrameSizeZ9, Unknown => 1 },
9263
+ 884 => { Name => 'MovieFrameRate', PrintConv => \%movieFrameRateZ7, Unknown => 1 },
9264
+ 886 => { Name => 'MicrophoneJackPower', PrintConv => \%offOn, Unknown => 1 },
9265
+ 887 => { Name => 'MovieDXCropAlert', PrintConv => \%offOn, Unknown => 1 },
9266
+ 888 => { Name => 'MovieSubjectDetection', PrintConv => \%subjectDetectionZ9, Unknown => 1 },
9267
+ 896 => { Name => 'MovieHighResZoom', PrintConv => \%offOn, Unknown => 1 },
9268
+ 943 => {
9269
+ Name => 'CustomSettingsZ8',
9270
+ Format => 'undef[730]',
9271
+ SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsZ8' },
9272
+ },
9273
+ 1682 => { Name => 'Language', PrintConv => \%languageZ9, Unknown => 1 },
9274
+ 1684 => { Name => 'TimeZone', PrintConv => \%timeZoneZ9 },
9275
+ 1690 => { Name => 'MonitorBrightness', PrintConv => \%monitorBrightnessZ9, Unknown => 1 }, # settings: -5 to +5. Added with firmware 3.0: Lo1, Lo2, Hi1, Hi2
9276
+ 1712 => { Name => 'AFFineTune', PrintConv => \%offOn, Unknown => 1 },
9277
+ 1716 => { Name => 'NonCPULens1FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1}, #should probably hide altogther if $val is 0
9278
+ 1718 => { Name => 'NonCPULens2FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9279
+ 1720 => { Name => 'NonCPULens3FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9280
+ 1722 => { Name => 'NonCPULens4FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9281
+ 1724 => { Name => 'NonCPULens5FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9282
+ 1726 => { Name => 'NonCPULens6FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9283
+ 1728 => { Name => 'NonCPULens7FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9284
+ 1730 => { Name => 'NonCPULens8FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9285
+ 1732 => { Name => 'NonCPULens9FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9286
+ 1734 => { Name => 'NonCPULens10FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9287
+ 1736 => { Name => 'NonCPULens11FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9288
+ 1738 => { Name => 'NonCPULens12FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9289
+ 1740 => { Name => 'NonCPULens13FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9290
+ 1742 => { Name => 'NonCPULens14FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9291
+ 1744 => { Name => 'NonCPULens15FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9292
+ 1746 => { Name => 'NonCPULens16FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9293
+ 1748 => { Name => 'NonCPULens17FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9294
+ 1750 => { Name => 'NonCPULens18FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9295
+ 1752 => { Name => 'NonCPULens19FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9296
+ 1754 => { Name => 'NonCPULens20FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9297
+ 1756 => { Name => 'NonCPULens1MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9298
+ 1758 => { Name => 'NonCPULens2MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9299
+ 1760 => { Name => 'NonCPULens3MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9300
+ 1762 => { Name => 'NonCPULens4MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9301
+ 1764 => { Name => 'NonCPULens5MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9302
+ 1766 => { Name => 'NonCPULens6MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9303
+ 1768 => { Name => 'NonCPULens7MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9304
+ 1770 => { Name => 'NonCPULens8MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9305
+ 1772 => { Name => 'NonCPULens9MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9306
+ 1774 => { Name => 'NonCPULens10MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9307
+ 1776 => { Name => 'NonCPULens11MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9308
+ 1778 => { Name => 'NonCPULens12MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9309
+ 1780 => { Name => 'NonCPULens13MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9310
+ 1782 => { Name => 'NonCPULens14MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9311
+ 1784 => { Name => 'NonCPULens15MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9312
+ 1786 => { Name => 'NonCPULens16MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9313
+ 1788 => { Name => 'NonCPULens17MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9314
+ 1790 => { Name => 'NonCPULens18MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9315
+ 1792 => { Name => 'NonCPULens19MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9316
+ 1794 => { Name => 'NonCPULens20MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9317
+ 1808 => { Name => 'HDMIOutputResolution', PrintConv => \%hDMIOutputResolutionZ9 },
9318
+ 1826 => { Name => 'AirplaneMode', PrintConv => \%offOn, Unknown => 1 },
9319
+ 1827 => { Name => 'EmptySlotRelease', PrintConv => { 0 => 'Disable Release', 1 => 'Enable Release' }, Unknown => 1 },
9320
+ 1862 => { Name => 'EnergySavingMode', PrintConv => \%offOn, Unknown => 1 },
9321
+ 1890 => { Name => 'USBPowerDelivery', PrintConv => \%offOn, Unknown => 1 },
9322
+ 1899 => { Name => 'SensorShield', PrintConv => { 0 => 'Stays Open', 1 => 'Closes' }, Unknown => 1 },
9323
+ );
8706
9324
  %Image::ExifTool::Nikon::MenuSettingsZ9 = (
8707
9325
  %binaryDataAttrs,
8708
9326
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
8709
- DATAMEMBER => [ 140, 188, 192, 232, 424, 534, 576 ],
9327
+ DATAMEMBER => [ 140, 188, 192, 232, 424, 528, 534, 576 ],
8710
9328
  IS_SUBDIR => [ 799 ],
8711
9329
  NOTES => 'These tags are used by the Z9.',
8712
9330
  #90 ISO
@@ -8720,13 +9338,13 @@ my %nikonFocalConversions = (
8720
9338
  Name => 'Intervals',
8721
9339
  Format => 'int32u',
8722
9340
  RawConv => '$$self{IntervalShootingIntervals} = $val',
8723
- Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
9341
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0', #not valid for C30/C60/C120
8724
9342
  },
8725
9343
  192 => {
8726
9344
  Name => 'ShotsPerInterval',
8727
9345
  Format => 'int32u',
8728
9346
  RawConv => '$$self{IntervalShootingShotsPerInterval} = $val',
8729
- Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
9347
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0', #not valid for C30/C60/C120
8730
9348
  },
8731
9349
  #220 NEFCompression 0=> 'Lossless' 1=> 'High Efficiency*' 4=> 'High Efficientcy'
8732
9350
  232 => {
@@ -8823,7 +9441,7 @@ my %nikonFocalConversions = (
8823
9441
  444 => { Name => 'FlashRemoteControl', PrintConv => \%flashRemoteControlZ7, Unknown => 1 },
8824
9442
  456 => { Name => 'FlashWirelessOption', PrintConv => \%flashWirelessOptionZ7, Unknown => 1 },
8825
9443
  #526 FocusMode
8826
- 528 => { Name => 'AFAreaMode',PrintConv => \%aFAreaModeZ9 },
9444
+ 528 => { Name => 'AFAreaMode', RawConv => '$$self{AFAreaMode} = $val', PrintConv => \%aFAreaModeZ9},
8827
9445
  530 => { Name => 'VRMode', PrintConv => \%vRModeZ9 },
8828
9446
  534 => {
8829
9447
  Name => 'BracketSet',
@@ -8848,7 +9466,7 @@ my %nikonFocalConversions = (
8848
9466
  574 => { Name => 'SubjectDetection', PrintConv => \%subjectDetectionZ9 },
8849
9467
  576 => {
8850
9468
  Name => 'DynamicAFAreaSize',
8851
- Condition => '$$self{AFAraMode} = 2',
9469
+ Condition => '$$self{AFAreaMode} == 2',
8852
9470
  RawConv => '$$self{DynamicAFAreaSize} = $val',
8853
9471
  PrintConv => \%dynamicAfAreaModesZ9,
8854
9472
  },
@@ -8917,7 +9535,7 @@ my %nikonFocalConversions = (
8917
9535
  %Image::ExifTool::Nikon::MenuSettingsZ9v3 = (
8918
9536
  %binaryDataAttrs,
8919
9537
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
8920
- DATAMEMBER => [ 154, 204, 208, 248, 444, 554, 596 ],
9538
+ DATAMEMBER => [ 154, 204, 208, 248, 444, 548, 554, 596 ],
8921
9539
  IS_SUBDIR => [ 847 ],
8922
9540
  NOTES => 'These tags are used by the Z9 firmware 3.00.',
8923
9541
  72 => {
@@ -8934,13 +9552,13 @@ my %nikonFocalConversions = (
8934
9552
  Name => 'Intervals',
8935
9553
  Format => 'int32u',
8936
9554
  RawConv => '$$self{IntervalShootingIntervals} = $val',
8937
- Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
9555
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0', #not valid for C30/C60/C120
8938
9556
  },
8939
9557
  208 => {
8940
9558
  Name => 'ShotsPerInterval',
8941
9559
  Format => 'int32u',
8942
9560
  RawConv => '$$self{IntervalShootingShotsPerInterval} = $val',
8943
- Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
9561
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0', #not valid for C30/C60/C120
8944
9562
  },
8945
9563
  248 => {
8946
9564
  Name => 'FocusShiftNumberShots', #1-300
@@ -9024,7 +9642,7 @@ my %nikonFocalConversions = (
9024
9642
  #462 flash wireless control 0=> 'Off' 1=> 'Optical AWL'
9025
9643
  #464 => { Name => 'FlashRemoteControl', PrintConv => \%flashRemoteControlZ7, Unknown => 1 },
9026
9644
  #476 => { Name => 'FlashWirelessOption', PrintConv => \%flashWirelessOptionZ7, Unknown => 1 },
9027
- 548 => { Name => 'AFAreaMode', PrintConv => \%aFAreaModeZ9},
9645
+ 548 => { Name => 'AFAreaMode', RawConv => '$$self{AFAreaMode} = $val', PrintConv => \%aFAreaModeZ9},
9028
9646
  550 => { Name => 'VRMode', PrintConv => \%vRModeZ9},
9029
9647
  554 => {
9030
9648
  Name => 'BracketSet',
@@ -9048,7 +9666,7 @@ my %nikonFocalConversions = (
9048
9666
  594 => { Name => 'SubjectDetection', PrintConv => \%subjectDetectionZ9 },
9049
9667
  596 => {
9050
9668
  Name => 'DynamicAFAreaSize',
9051
- Condition => '$$self{AFAraMode} = 2',
9669
+ Condition => '$$self{AFAreaMode} == 2',
9052
9670
  RawConv => '$$self{DynamicAFAreaSize} = $val',
9053
9671
  PrintConv => \%dynamicAfAreaModesZ9,
9054
9672
  },
@@ -9147,6 +9765,305 @@ my %nikonFocalConversions = (
9147
9765
  #1936 FocusPointDisplayOption3DTrackingColor CSa11-d 0=> 'White', 1= => 'Red'
9148
9766
  );
9149
9767
 
9768
+ %Image::ExifTool::Nikon::MenuSettingsZ9v4 = (
9769
+ %binaryDataAttrs,
9770
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
9771
+ DATAMEMBER => [ 154, 204, 208, 248, 444, 548, 554, 570, 596 ],
9772
+ IS_SUBDIR => [ 847 ],
9773
+ NOTES => 'These tags are used by the Z9 firmware 3.00.',
9774
+ 72 => {
9775
+ Name => 'HighFrameRate', #CH and C30/C60/C120 but not CL
9776
+ PrintConv => \%highFrameRateZ9,
9777
+ },
9778
+ 154 => {
9779
+ Name => 'MultipleExposureMode',
9780
+ RawConv => '$$self{MultipleExposureMode} = $val',
9781
+ PrintConv => \%multipleExposureModeZ9,
9782
+ },
9783
+ 156 => {Name => 'MultiExposureShots', Condition => '$$self{MultipleExposureMode} != 0'}, #range 2-9
9784
+ 204 => {
9785
+ Name => 'Intervals',
9786
+ Format => 'int32u',
9787
+ RawConv => '$$self{IntervalShootingIntervals} = $val',
9788
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0', #not valid for C30/C60/C120
9789
+ },
9790
+ 208 => {
9791
+ Name => 'ShotsPerInterval',
9792
+ Format => 'int32u',
9793
+ RawConv => '$$self{IntervalShootingShotsPerInterval} = $val',
9794
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0', #not valid for C30/C60/C120
9795
+ },
9796
+ 248 => {
9797
+ Name => 'FocusShiftNumberShots', #1-300
9798
+ RawConv => '$$self{FocusShiftNumberShots} = $val',
9799
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
9800
+ },
9801
+ 252 => {
9802
+ Name => 'FocusShiftStepWidth', #1(Narrow) to 10 (Wide)
9803
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
9804
+ },
9805
+ 256 => {
9806
+ Name => 'FocusShiftInterval',
9807
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
9808
+ PrintConv => '$val == 1? "1 Second" : sprintf("%.0f Seconds",$val)',
9809
+ },
9810
+ 260 => {
9811
+ Name => 'FocusShiftExposureLock',
9812
+ Unknown => 1,
9813
+ PrintConv => \%offOn,
9814
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
9815
+ },
9816
+ 290 => { Name => 'PhotoShootingMenuBank', PrintConv => \%banksZ9 },
9817
+ 292 => { Name => 'ExtendedMenuBanks', PrintConv => \%offOn }, # single tag from both Photo & Video menus
9818
+ 328 => { Name => 'PhotoShootingMenuBankImageArea', PrintConv => \%imageAreaZ9 },
9819
+ #334 JPGCompression 0 => 'Size Priority', 1 => 'Optimal Quality',
9820
+ 342 => { Name => 'AutoISO', PrintConv => \%offOn },
9821
+ 344 => {
9822
+ Name => 'ISOAutoHiLimit',
9823
+ Format => 'int16u',
9824
+ Unknown => 1,
9825
+ ValueConv => '($val-104)/8',
9826
+ ValueConvInv => '8 * ($val + 104)',
9827
+ PrintConv => \%iSOAutoHiLimitZ7,
9828
+ },
9829
+ 346 => {
9830
+ Name => 'ISOAutoFlashLimit',
9831
+ Format => 'int16u',
9832
+ Unknown => 1,
9833
+ ValueConv => '($val-104)/8',
9834
+ ValueConvInv => '8 * ($val + 104)',
9835
+ PrintConv => \%iSOAutoHiLimitZ7,
9836
+ },
9837
+ 354 => {
9838
+ Name => 'ISOAutoShutterTime', # shutter speed is 2 ** (-$val/24)
9839
+ ValueConv => '$val / 8',
9840
+ Format => 'int16s',
9841
+ PrintConv => \%iSOAutoShutterTimeZ9,
9842
+ },
9843
+ 436 => { Name => 'MovieVignetteControl', PrintConv => \%offLowNormalHighZ7, Unknown => 1 },
9844
+ 438 => { Name => 'DiffractionCompensation', PrintConv => \%offOn }, # value can be set from both the Photo Shoot Menu and the Video Shooting Menu
9845
+ 440 => { Name => 'FlickerReductionShooting',PrintConv => \%offOn },
9846
+ 444 => {
9847
+ Name => 'FlashControlMode', # this and nearby tag values for flash may be set from either the Photo Shooting Menu or using the Flash unit menu
9848
+ RawConv => '$$self{FlashControlMode} = $val',
9849
+ PrintConv => \%flashControlModeZ7,
9850
+ },
9851
+ 446 => {
9852
+ Name => 'FlashMasterCompensation',
9853
+ Format => 'int8s',
9854
+ Unknown => 1,
9855
+ ValueConv => '$val/6',
9856
+ ValueConvInv => '6 * $val',
9857
+ PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
9858
+ PrintConvInv => '$val',
9859
+ },
9860
+ 450 => {
9861
+ Name => 'FlashGNDistance',
9862
+ Condition => '$$self{FlashControlMode} == 2',
9863
+ Unknown => 1,
9864
+ ValueConv => '$val + 3',
9865
+ PrintConv => \%flashGNDistance,
9866
+ },
9867
+ 454 => {
9868
+ 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)
9869
+ Condition => '$$self{FlashControlMode} >= 3',
9870
+ Unknown => 1,
9871
+ ValueConv => '2 ** (-$val/3)',
9872
+ ValueConvInv => '$val>0 ? -3*log($val)/log(2) : 0',
9873
+ PrintConv => '$val>0.99 ? "Full" : sprintf("%.1f%%",$val*100)',
9874
+ PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
9875
+ },
9876
+ #462 flash wireless control 0=> 'Off' 1=> 'Optical AWL'
9877
+ #464 => { Name => 'FlashRemoteControl', PrintConv => \%flashRemoteControlZ7, Unknown => 1 },
9878
+ #476 => { Name => 'FlashWirelessOption', PrintConv => \%flashWirelessOptionZ7, Unknown => 1 },
9879
+ 548 => { Name => 'AFAreaMode', RawConv => '$$self{AFAreaMode} = $val', PrintConv => \%aFAreaModeZ9},
9880
+ 550 => { Name => 'VRMode', PrintConv => \%vRModeZ9},
9881
+ 554 => {
9882
+ Name => 'BracketSet',
9883
+ RawConv => '$$self{BracketSet} = $val',
9884
+ PrintConv => \%bracketSetZ9,
9885
+ },
9886
+ 556 => {
9887
+ Name => 'BracketProgram',
9888
+ Condition => '$$self{BracketSet} < 3',
9889
+ Notes => 'AE and/or Flash Bracketing',
9890
+ PrintConv => \%bracketProgramZ9,
9891
+ },
9892
+ 558 => {
9893
+ Name => 'BracketIncrement',
9894
+ Condition => '$$self{BracketSet} < 3',
9895
+ Notes => 'AE and/or Flash Bracketing',
9896
+ PrintConv => \%bracketIncrementZ9,
9897
+ },
9898
+ 570 => { Name => 'HDR', RawConv => '$$self{HDR} = $val', PrintConv => \%multipleExposureModeZ9 },
9899
+ 576 => { Name => 'SecondarySlotFunction', PrintConv => \%secondarySlotFunctionZ9 },
9900
+ 582 => { Name => 'HDRLevel', Condition => '$$self{HDR} ne 0', PrintConv => \%hdrLevelZ8 },
9901
+ 586 => { Name => 'Slot2JpgSize', PrintConv => { 0 => 'Large (8256x5504)', 1 => 'Medium (6192x4128)', 2 => 'Small (4128x2752)' }, Unknown => 1},
9902
+ 592 => { Name => 'DXCropAlert', PrintConv => \%offOn },
9903
+ 594 => { Name => 'SubjectDetection', PrintConv => \%subjectDetectionZ9 },
9904
+ 596 => {
9905
+ Name => 'DynamicAFAreaSize',
9906
+ Condition => '$$self{AFAreaMode} == 2',
9907
+ RawConv => '$$self{DynamicAFAreaSize} = $val',
9908
+ PrintConv => \%dynamicAfAreaModesZ9,
9909
+ },
9910
+ 636 => { Name => 'HighFrequencyFlickerReductionShooting', PrintConv => \%offOn, Unknown => 1 }, # new with firmware 3.0
9911
+ 646 => {
9912
+ Name => 'MovieImageArea',
9913
+ Unknown => 1,
9914
+ Mask => 0x01, # without the mask 4 => 'FX' 5 => DX only the 2nd Z-series field encountered with a mask.
9915
+ PrintConv => \%imageAreaZ9b,
9916
+ },
9917
+ 656 => { Name => 'MovieType', PrintConv => \%movieTypeZ9, Unknown => 1 },
9918
+ 658 => {
9919
+ Name => 'MovieISOAutoHiLimit',
9920
+ Format => 'int16u',
9921
+ Unknown => 1,
9922
+ ValueConv => '($val-104)/8',
9923
+ ValueConvInv => '8 * ($val + 104)',
9924
+ PrintConv => \%iSOAutoHiLimitZ7,
9925
+ },
9926
+ 660 => { Name => 'MovieISOAutoControlManualMode', PrintConv => \%offOn, Unknown => 1 },
9927
+ 662 => {
9928
+ Name => 'MovieISOAutoManualMode',
9929
+ Format => 'int16u',
9930
+ Unknown => 1,
9931
+ ValueConv => '($val-104)/8',
9932
+ ValueConvInv => '8 * ($val + 104)',
9933
+ PrintConv => \%iSOAutoHiLimitZ7,
9934
+ },
9935
+ 736 => { Name => 'MovieActiveD-Lighting', PrintConv => \%activeDLightingZ7, Unknown => 1 },
9936
+ 738 => { Name => 'MovieHighISONoiseReduction', PrintConv => \%offLowNormalHighZ7, Unknown => 1 },
9937
+ 744 => { Name => 'MovieFlickerReduction', PrintConv => \%movieFlickerReductionZ9 },
9938
+ 746 => { Name => 'MovieMeteringMode', PrintConv => \%meteringModeZ7, Unknown => 1 },
9939
+ 748 => { Name => 'MovieFocusMode', PrintConv => \%focusModeZ7, Unknown => 1 },
9940
+ 750 => { Name => 'MovieAFAreaMode', PrintConv => \%aFAreaModeZ9 },
9941
+ 752 => { Name => 'MovieVRMode', PrintConv => \%vRModeZ9, Unknown => 1 },
9942
+ 756 => { Name => 'MovieElectronicVR', PrintConv => \%offOn, Unknown => 1 }, # distinct from MoveieVRMode
9943
+ 758 => { Name => 'MovieSoundRecording', PrintConv => { 0 => 'Off', 1 => 'Auto', 2 => 'Manual' }, Unknown => 1 },
9944
+ 760 => { Name => 'MicrophoneSensitivity', Unknown => 1 }, # 1-20
9945
+ 762 => { Name => 'MicrophoneAttenuator', PrintConv => \%offOn, Unknown => 1 }, # distinct from MoveieVRMode
9946
+ 764 => { Name => 'MicrophoneFrequencyResponse',PrintConv => { 0 => 'Wide Range', 1 => 'Vocal Range' }, Unknown => 1 },
9947
+ 766 => { Name => 'WindNoiseReduction', PrintConv => \%offOn, Unknown => 1 },
9948
+ 788 => { Name => 'MovieToneMap', PrintConv => \%movieToneMapZ9, Unknown => 1 },
9949
+ 794 => { Name => 'MovieFrameSize', PrintConv => \%movieFrameSizeZ9, Unknown => 1 },
9950
+ 796 => { Name => 'MovieFrameRate', PrintConv => \%movieFrameRateZ7, Unknown => 1 },
9951
+ 802 => { Name => 'MicrophoneJackPower', PrintConv => \%offOn, Unknown => 1 },
9952
+ 803 => { Name => 'MovieDXCropAlert', PrintConv => \%offOn, Unknown => 1 },
9953
+ 804 => { Name => 'MovieSubjectDetection', PrintConv => \%subjectDetectionZ9, Unknown => 1 },
9954
+ 812 => { Name => 'MovieHighResZoom', PrintConv => \%offOn, Unknown => 1 },
9955
+ 847 => {
9956
+ Name => 'CustomSettingsZ9v4',
9957
+ Format => 'undef[632]',
9958
+ SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsZ9v4' },
9959
+ },
9960
+ 1498 => { Name => 'Language', PrintConv => \%languageZ9, Unknown => 1 },
9961
+ 1500 => { Name => 'TimeZone', PrintConv => \%timeZoneZ9 },
9962
+ 1506 => { Name => 'MonitorBrightness', PrintConv => \%monitorBrightnessZ9, Unknown => 1 }, # settings: -5 to +5. Added with firmware 3.0: Lo1, Lo2, Hi1, Hi2
9963
+ 1528 => { Name => 'AFFineTune', PrintConv => \%offOn, Unknown => 1 },
9964
+ 1532 => { Name => 'NonCPULens1FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1}, #should probably hide altogther if $val is 0
9965
+ 1536 => { Name => 'NonCPULens2FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9966
+ 1540 => { Name => 'NonCPULens3FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9967
+ 1544 => { Name => 'NonCPULens4FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9968
+ 1548 => { Name => 'NonCPULens5FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9969
+ 1552 => { Name => 'NonCPULens6FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9970
+ 1556 => { Name => 'NonCPULens7FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9971
+ 1560 => { Name => 'NonCPULens8FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9972
+ 1564 => { Name => 'NonCPULens9FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9973
+ 1568 => { Name => 'NonCPULens10FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9974
+ 1572 => { Name => 'NonCPULens11FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9975
+ 1576 => { Name => 'NonCPULens12FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9976
+ 1580 => { Name => 'NonCPULens13FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9977
+ 1584 => { Name => 'NonCPULens14FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9978
+ 1588 => { Name => 'NonCPULens15FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9979
+ 1592 => { Name => 'NonCPULens16FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9980
+ 1596 => { Name => 'NonCPULens17FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9981
+ 1600 => { Name => 'NonCPULens18FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9982
+ 1604 => { Name => 'NonCPULens19FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9983
+ 1608 => { Name => 'NonCPULens20FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9984
+ 1612 => { Name => 'NonCPULens1MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1}, #non-CPU aperture interface, values and storage differ from the Z8
9985
+ 1616 => { Name => 'NonCPULens2MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9986
+ 1620 => { Name => 'NonCPULens3MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9987
+ 1624 => { Name => 'NonCPULens4MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9988
+ 1628 => { Name => 'NonCPULens5MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9989
+ 1632 => { Name => 'NonCPULens6MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9990
+ 1636 => { Name => 'NonCPULens7MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9991
+ 1640 => { Name => 'NonCPULens8MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9992
+ 1644 => { Name => 'NonCPULens9MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9993
+ 1648 => { Name => 'NonCPULens10MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9994
+ 1652 => { Name => 'NonCPULens11MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9995
+ 1656 => { Name => 'NonCPULens12MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9996
+ 1660 => { Name => 'NonCPULens13MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9997
+ 1664 => { Name => 'NonCPULens14MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9998
+ 1668 => { Name => 'NonCPULens15MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9999
+ 1672 => { Name => 'NonCPULens16MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
10000
+ 1676 => { Name => 'NonCPULens17MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
10001
+ 1680 => { Name => 'NonCPULens18MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
10002
+ 1684 => { Name => 'NonCPULens19MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
10003
+ 1688 => { Name => 'NonCPULens20MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
10004
+ 1704 => { Name => 'HDMIOutputResolution', PrintConv => \%hDMIOutputResolutionZ9 },
10005
+ 1717 => { Name => 'SetClockFromLocationData', PrintConv => \%offOn, Unknown => 1 },
10006
+ 1724 => { Name => 'AirplaneMode', PrintConv => \%offOn, Unknown => 1 },
10007
+ 1725 => { Name => 'EmptySlotRelease', PrintConv => { 0 => 'Disable Release', 1 => 'Enable Release' }, Unknown => 1 },
10008
+ 1760 => { Name => 'EnergySavingMode', PrintConv => \%offOn, Unknown => 1 },
10009
+ 1784 => { Name => 'RecordLocationData', PrintConv => \%offOn, Unknown => 1 },
10010
+ 1788 => { Name => 'USBPowerDelivery', PrintConv => \%offOn, Unknown => 1 },
10011
+ 1797 => { Name => 'SensorShield', PrintConv => { 0 => 'Stays Open', 1 => 'Closes' }, Unknown => 1 },
10012
+ 1862 => {
10013
+ Name => 'AutoCapturePreset',
10014
+ PrintConv => {
10015
+ 0 => '1',
10016
+ 1 => '2',
10017
+ 2 => '3',
10018
+ 3 => '4',
10019
+ 4 => '5',
10020
+ },
10021
+ },
10022
+ 1864 => {
10023
+ Name => 'FocusShiftAutoReset',
10024
+ Unknown => 1,
10025
+ PrintConv => \%offOn,
10026
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
10027
+ },
10028
+ 1922 => { #CSd4-a
10029
+ Name => 'PreReleaseBurstLength',
10030
+ PrintConv => {
10031
+ 0 => 'None',
10032
+ 1 => '0.3 Sec',
10033
+ 2 => '0.5 Sec',
10034
+ 3 => '1 Sec',
10035
+ },
10036
+ },
10037
+ 1924 => { #CSd4-b
10038
+ Name => 'PostReleaseBurstLength',
10039
+ PrintConv => {
10040
+ 0 => '1 Sec',
10041
+ 1 => '2 Sec',
10042
+ 2 => '3 Sec',
10043
+ 3 => 'Max',
10044
+ },
10045
+ },
10046
+ 1938 => { Name => 'VerticalISOButton', %buttonsZ9}, #CSf2
10047
+ 1940 => { Name => 'ExposureCompensationButton', %buttonsZ9}, #CSf2
10048
+ 1942 => { Name => 'ISOButton', %buttonsZ9}, #CSf2
10049
+ 2002 => { Name => 'ViewModeShowEffectsOfSettings', PrintConv => { 0=>'Always', 1=> 'Only When Flash Not Used'}, Unknown => 1 }, #CSd9-a
10050
+ 2004 => { Name => 'DispButton', %buttonsZ9}, #CSf2
10051
+ 2048 => { #CSd6
10052
+ Name => 'ExposureDelay',
10053
+ Format => 'fixed32u',
10054
+ PrintConv => '$val ? sprintf("%.1f sec",$val/1000) : "Off"',
10055
+ },
10056
+ 2056 => { Name => 'PlaybackButton', %buttonsZ9}, #CSf2
10057
+ 2058 => { Name => 'WBButton', %buttonsZ9}, #CSf2
10058
+ 2060 => { Name => 'BracketButton', %buttonsZ9}, #CSf2
10059
+ 2062 => { Name => 'FlashModeButton', %buttonsZ9}, #CSf2
10060
+ 2064 => { Name => 'LensFunc1ButtonPlaybackMode', %buttonsZ9}, #CSf2
10061
+ 2066 => { Name => 'LensFunc2ButtonPlaybackMode', %buttonsZ9}, #CSf2
10062
+ 2068 => { Name => 'PlaybackButtonPlaybackMode', %buttonsZ9}, #CSf2
10063
+ 2070 => { Name => 'BracketButtonPlaybackMode', %buttonsZ9}, #CSf2
10064
+ 2072 => { Name => 'FlashModeButtonPlaybackMode', %buttonsZ9}, #CSf2
10065
+ );
10066
+
9150
10067
  # Flash information (ref JD)
9151
10068
  %Image::ExifTool::Nikon::FlashInfo0100 = (
9152
10069
  %binaryDataAttrs,
@@ -10409,16 +11326,14 @@ my %nikonFocalConversions = (
10409
11326
  },
10410
11327
  );
10411
11328
 
10412
- # MakerNotes0x51 - compression info for Z9
11329
+ # MakerNotes0x51 - compression info for Z8 and Z9
10413
11330
  %Image::ExifTool::Nikon::MakerNotes0x51 = (
10414
11331
  %binaryDataAttrs,
10415
- DATAMEMBER => [ 0 ],
10416
11332
  GROUPS => { 0 => 'MakerNotes' },
10417
11333
  0 => {
10418
- Name => 'FirmwareVersion',
11334
+ Name => 'FirmwareVersion51',
10419
11335
  Format => 'string[8]',
10420
11336
  Writable => 0,
10421
- RawConv => '$$self{FirmwareVersion} = $val',
10422
11337
  },
10423
11338
  10 => {
10424
11339
  Name => 'NEFCompression',
@@ -12069,8 +12984,10 @@ sub PrepareNikonOffsets($$$$$)
12069
12984
  for ($i=0; $i<@sorted-1; ++$i) {
12070
12985
  my $pos = $sorted[$i][0];
12071
12986
  my $len = $sorted[$i+1][1] - $sorted[$i][1];
12072
- # set DirLen in SubDirectory entry
12073
12987
  my $tagInfo = $$tagTablePtr{$pos};
12988
+ $tagInfo = $et->GetTagInfo($tagTablePtr, $pos) if $tagInfo and
12989
+ not (ref $tagInfo eq 'HASH' and $$tagInfo{AlwaysDecrypt});
12990
+ # set DirLen in SubDirectory entry
12074
12991
  my $subdir;
12075
12992
  $$subdir{DirLen} = $len if ref $tagInfo eq 'HASH' and defined($subdir=$$tagInfo{SubDirectory});
12076
12993
  if ($decryptMode) {
@@ -12082,7 +12999,7 @@ sub PrepareNikonOffsets($$$$$)
12082
12999
  if ($subdir and $$subdir{KnownEnd}) {
12083
13000
  $n = $$subdir{KnownEnd};
12084
13001
  if ($n > $len) {
12085
- $et->Warn("Data too short for $$tagInfo{Name}",1);
13002
+ $et->Warn("Data too short for $$tagInfo{Name}",1) unless $$tagInfo{AlwaysDecrypt};
12086
13003
  $n = $len;
12087
13004
  }
12088
13005
  }