exiftool_vendored 12.64.1 → 12.65.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -65,7 +65,7 @@ use Image::ExifTool::Exif;
65
65
  use Image::ExifTool::GPS;
66
66
  use Image::ExifTool::XMP;
67
67
 
68
- $VERSION = '4.23';
68
+ $VERSION = '4.24';
69
69
 
70
70
  sub LensIDConv($$$);
71
71
  sub ProcessNikonAVI($$$);
@@ -932,6 +932,14 @@ my %hDMIOutputResolutionZ9 = (
932
932
  #7 => '480p',
933
933
  );
934
934
 
935
+ my %hdrLevelZ8 = (
936
+ 0 => 'Auto',
937
+ 1 => 'Extra High',
938
+ 2 => 'High',
939
+ 3 => 'Normal',
940
+ 4 => 'Low',
941
+ );
942
+
935
943
  my %highFrameRateZ9 = (
936
944
  0 => 'Off',
937
945
  1 => 'CH',
@@ -953,9 +961,10 @@ my %imageAreaZ9b = (
953
961
  );
954
962
 
955
963
  my %infoZSeries = (
956
- Condition => '$$self{Model} =~ /^NIKON Z (5|50|6|6_2|7|7_2|fc|9)\b/i',
957
- 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',
958
966
  );
967
+
959
968
  my %iSOAutoHiLimitZ7 = (
960
969
  0 => 'ISO 64',
961
970
  1 => 'ISO 80',
@@ -1118,6 +1127,32 @@ my %multipleExposureModeZ9 = (
1118
1127
  2 => 'On (Series)',
1119
1128
  );
1120
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
+
1121
1156
  my %offLowNormalHighZ7 = (
1122
1157
  0 => 'Off',
1123
1158
  1 => 'Low',
@@ -1125,6 +1160,13 @@ my %offLowNormalHighZ7 = (
1125
1160
  3 => 'High',
1126
1161
  );
1127
1162
 
1163
+ my %portraitImpressionBalanceZ8 = (
1164
+ 0 => 'Off',
1165
+ 1 => 'Mode 1',
1166
+ 2 => 'Mode 2',
1167
+ 3 => 'Mode 3',
1168
+ );
1169
+
1128
1170
  my %releaseModeZ7 = (
1129
1171
  0 => 'Continuous Low',
1130
1172
  1 => 'Continuous High',
@@ -1146,6 +1188,7 @@ my %subjectDetectionZ9 = (
1146
1188
  2 => 'People',
1147
1189
  3 => 'Animals',
1148
1190
  4 => 'Vehicles',
1191
+ 6 => 'Airplanes',
1149
1192
  );
1150
1193
 
1151
1194
  my %timeZoneZ9 = (
@@ -1404,6 +1447,66 @@ my %afPoints81 = (
1404
1447
  17 => 'H6', 34 => 'G7', 51 => 'F8', 68 => 'A9',
1405
1448
  );
1406
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
+ );
1407
1510
  my %cropHiSpeed = ( #IB
1408
1511
  0 => 'Off',
1409
1512
  1 => '1.3x Crop', # (1.3x Crop, Large)
@@ -1530,6 +1633,7 @@ my %base64coord = (
1530
1633
  0x0006 => { Name => 'Sharpness', Writable => 'string' },
1531
1634
  0x0007 => {
1532
1635
  Name => 'FocusMode',
1636
+ RawConv => '$$self{FocusMode} = $val',
1533
1637
  Writable => 'string',
1534
1638
  },
1535
1639
  # FlashSetting (better named FlashSyncMode, ref 28) values:
@@ -1721,6 +1825,7 @@ my %base64coord = (
1721
1825
  PrintConv => {
1722
1826
  1 => 'sRGB',
1723
1827
  2 => 'Adobe RGB',
1828
+ 4 => 'BT.2100', #observed on Z8 with Tone Mode set to HLG
1724
1829
  },
1725
1830
  },
1726
1831
  0x001f => { #PH
@@ -1976,6 +2081,7 @@ my %base64coord = (
1976
2081
  0 => 'Did Not Fire',
1977
2082
  1 => 'Fired, Manual', #14
1978
2083
  3 => 'Not Ready', #28
2084
+ #5 observed on Z9 firing remote SB-5000 via WR-R11a optical awl
1979
2085
  7 => 'Fired, External', #14
1980
2086
  8 => 'Fired, Commander Mode',
1981
2087
  9 => 'Fired, TTL Mode',
@@ -2316,6 +2422,15 @@ my %base64coord = (
2316
2422
  ByteOrder => 'LittleEndian',
2317
2423
  },
2318
2424
  },
2425
+ { # (Z8 firmware version 1.00 ref 28)
2426
+ Condition => '$$valPt =~ /^0806/',
2427
+ Name => 'ShotInfoZ8',
2428
+ SubDirectory => {
2429
+ TagTable => 'Image::ExifTool::Nikon::ShotInfoZ8',
2430
+ DecryptStart => 4,
2431
+ ByteOrder => 'LittleEndian',
2432
+ },
2433
+ },
2319
2434
  { # (Z9 firmware version 1.00 ref 28)
2320
2435
  Condition => '$$valPt =~ /^0805/',
2321
2436
  Name => 'ShotInfoZ9',
@@ -2766,7 +2881,7 @@ my %base64coord = (
2766
2881
  },
2767
2882
  0x00b7 => [{
2768
2883
  Name => 'AFInfo2',
2769
- Condition => '$$self{Model} =~ /^NIKON Z 9\b/i', #AFInfo2Version 0400
2884
+ Condition => '$$self{Model} =~ /^NIKON (Z 8|Z 9)\b/i', #AFInfo2Version 0400
2770
2885
  SubDirectory => { TagTable => 'Image::ExifTool::Nikon::AFInfo2V0400' },
2771
2886
  },{ #JD
2772
2887
  Name => 'AFInfo2',
@@ -3895,6 +4010,7 @@ my %base64coord = (
3895
4010
  205 => 'Dynamic Area (M)', #28 (Z9)
3896
4011
  206 => 'Dynamic Area (L)', #28 (Z9)
3897
4012
  207 => '3D-tracking', #28 (Z9)
4013
+ 208 => 'Wide-Area (C1/C2)', #28 (Z8, Z9)
3898
4014
  },
3899
4015
  },
3900
4016
  ],
@@ -4476,6 +4592,15 @@ my %base64coord = (
4476
4592
  208 => 'Wide (C1/C2)',
4477
4593
  },
4478
4594
  },
4595
+ 10 => {
4596
+ Name => 'AFPointsUsed',
4597
+ Condition => '$$self{AFAreaMode} == 6', #only valid for Auto AF Area mode. Other modes handled via AFAreaXPosition/AFAreaYPosition
4598
+ Format => 'undef[51]',
4599
+ ValueConv => 'join(" ", unpack("H2"x51, $val))',
4600
+ ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
4601
+ PrintConv => sub { PrintAFPoints(shift, \%afPoints493); },
4602
+ PrintConvInv => sub { PrintAFPointsInv(shift, \%afPoints493); },
4603
+ },
4479
4604
  0x3e => {
4480
4605
  Name => 'AFImageWidth',
4481
4606
  Format => 'int16u',
@@ -5172,7 +5297,7 @@ my %nikonFocalConversions = (
5172
5297
  %binaryDataAttrs,
5173
5298
  NOTES => 'Tags found in the encrypted LensData from cameras such as the Z6 and Z7.',
5174
5299
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
5175
- DATAMEMBER => [ 0x03, 0x2f, 0x35, 0x4c, 0x56 ],
5300
+ DATAMEMBER => [ 0x03, 0x2f, 0x35, 0x4c, 0x56, 0x58 ],
5176
5301
  0x00 => {
5177
5302
  Name => 'LensDataVersion',
5178
5303
  Format => 'string[4]',
@@ -5352,7 +5477,7 @@ my %nikonFocalConversions = (
5352
5477
  0x4c => { #28
5353
5478
  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.
5354
5479
  Format => 'int8u',
5355
- Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1',
5480
+ Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1 and $$self{FocusMode} ne "Manual"',
5356
5481
  RawConv => '$$self{FocusDistanceRangeWidth} = $val',
5357
5482
  Unknown => 1,
5358
5483
  },
@@ -5361,19 +5486,26 @@ my %nikonFocalConversions = (
5361
5486
  Format => 'int16u',
5362
5487
  Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1',
5363
5488
  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
5364
- ValueConv => '0.01 * 10**($val/40)', # in m
5365
- ValueConvInv => '$val>0 ? 40*log($val*100)/log(10) : 0',
5489
+ 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
5490
+ ValueConvInv => '$val>0 ? log(12*($val+80)/log(2) : 0', #was '$val>0 ? 40*log($val*100)/log(10) : 0'
5366
5491
  PrintConv => q{
5367
- (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
5492
+ (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
5368
5493
  },
5369
5494
  },
5370
- 0x56 => { #28
5495
+ 0x56 => { #28 #not valif for focus mode M
5371
5496
  Name => 'LensDriveEnd', # byte contains: 1 at CFD/MOD; 2 at Infinity; 0 otherwise
5372
- Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1',
5497
+ Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1 and $$self{FocusMode} ne "Manual"',
5373
5498
  Format => 'int8u',
5374
5499
  RawConv => 'unless (defined $$self{FocusDistanceRangeWidth} and not $$self{FocusDistanceRangeWidth}) { if ($val == 0 ) {$$self{LensDriveEnd} = "No"} else { $$self{LensDriveEnd} = "CFD"}; } else{ $$self{LensDriveEnd} = "Inf"}',
5375
5500
  Unknown => 1,
5376
5501
  },
5502
+ 0x58 => { #28
5503
+ Name => 'FocusStepsFromInfinity',
5504
+ Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1', #valid for both AF and manual focus modes
5505
+ Format => 'int8u',
5506
+ RawConv => '$$self{FocusStepsFromInfinity} = $val', # 0 at Infinity, otherwise a small positive number monotonically increasing towards CFD.
5507
+ Unknown => 1,
5508
+ },
5377
5509
  0x5a => { #28
5378
5510
  Name => 'LensPositionAbsolute', # <=0 at infinity. Typical value at CFD might be 58000. Only valid for Z-mount lenses.
5379
5511
  Condition => '$$self{NewLensData} and $$self{LensMountType} and $$self{LensMountType} == 1',
@@ -8156,6 +8288,75 @@ my %nikonFocalConversions = (
8156
8288
  },
8157
8289
  );
8158
8290
 
8291
+ # shot information for the Z8 firmware 1.00 (encrypted) - ref 28
8292
+ %Image::ExifTool::Nikon::ShotInfoZ8 = (
8293
+ PROCESS_PROC => \&ProcessNikonEncrypted,
8294
+ WRITE_PROC => \&ProcessNikonEncrypted,
8295
+ CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
8296
+ VARS => { ID_LABEL => 'Index', NIKON_OFFSETS => 0x24 },
8297
+ DATAMEMBER => [ 0x04 ],
8298
+ IS_SUBDIR => [ 0x30, 0x84, 0x8c ],
8299
+ WRITABLE => 1,
8300
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
8301
+ NOTES => 'These tags are extracted from encrypted data in images from the Z8.',
8302
+ 0x00 => {
8303
+ Name => 'ShotInfoVersion',
8304
+ Format => 'string[4]',
8305
+ Writable => 0,
8306
+ },
8307
+ 0x04 => {
8308
+ Name => 'FirmwareVersion',
8309
+ DataMember => 'FirmwareVersion',
8310
+ Format => 'string[8]',
8311
+ Writable => 0,
8312
+ RawConv => '$$self{FirmwareVersion} = $val',
8313
+ },
8314
+ 0x0e => {
8315
+ Name => 'FirmwareVersion2',
8316
+ Format => 'string[8]',
8317
+ Writable => 0,
8318
+ Hidden => 1,
8319
+ },
8320
+ 0x18 => {
8321
+ Name => 'FirmwareVersion3',
8322
+ Format => 'string[8]',
8323
+ Writable => 0,
8324
+ Hidden => 1,
8325
+ },
8326
+ 0x24 => {
8327
+ Name => 'NumberOffsets', # number of entries in offset table. offsets are from start of ShotInfo data.
8328
+ Format => 'int32u',
8329
+ Writable => 0,
8330
+ Hidden => 1,
8331
+ },
8332
+ # subdirectories, referenced by offsets (not processed if offset is zero)
8333
+ 0x30 => {
8334
+ Name => 'SequenceOffset',
8335
+ Format => 'int32u',
8336
+ SubDirectory => {
8337
+ TagTable => 'Image::ExifTool::Nikon::SeqInfoZ9',
8338
+ Start => '$val',
8339
+ },
8340
+ },
8341
+ 0x84 => {
8342
+ Name => 'OrientOffset',
8343
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96', #not valid for C30/C60/C120
8344
+ Format => 'int32u',
8345
+ SubDirectory => {
8346
+ TagTable => 'Image::ExifTool::Nikon::OrientationInfo',
8347
+ Start => '$val',
8348
+ },
8349
+ },
8350
+ 0x8c => {
8351
+ Name => 'MenuOffset',
8352
+ Format => 'int32u',
8353
+ SubDirectory => {
8354
+ TagTable => 'Image::ExifTool::Nikon::MenuInfoZ8',
8355
+ Start => '$val',
8356
+ },
8357
+ },
8358
+ );
8359
+
8159
8360
  # shot information for the Z9 firmware 1.00 (encrypted) - ref 28
8160
8361
  %Image::ExifTool::Nikon::ShotInfoZ9 = (
8161
8362
  PROCESS_PROC => \&ProcessNikonEncrypted,
@@ -8207,9 +8408,10 @@ my %nikonFocalConversions = (
8207
8408
  },
8208
8409
  },
8209
8410
  0x58 => {
8210
- 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.
8411
+ 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.
8211
8412
  Condition => '$$self{FirmwareVersion} and $$self{FirmwareVersion} ge "03.01"',
8212
8413
  Format => 'int32u',
8414
+ AlwaysDecrypt => 1, # (necessary because FirmwareVersion is extracted after decryption time)
8213
8415
  SubDirectory => {
8214
8416
  TagTable => 'Image::ExifTool::Nikon::Offset13InfoZ9',
8215
8417
  Start => '$val',
@@ -8219,6 +8421,7 @@ my %nikonFocalConversions = (
8219
8421
  Name => 'AutoCaptureOffset',
8220
8422
  Condition => '$$self{FirmwareVersion} and $$self{FirmwareVersion} ge "04.00"',
8221
8423
  Format => 'int32u',
8424
+ AlwaysDecrypt => 1, # (necessary because FirmwareVersion is extracted after decryption time)
8222
8425
  SubDirectory => {
8223
8426
  TagTable => 'Image::ExifTool::Nikon::AutoCaptureInfo',
8224
8427
  Start => '$val',
@@ -8248,6 +8451,8 @@ my %nikonFocalConversions = (
8248
8451
  %binaryDataAttrs,
8249
8452
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
8250
8453
  DATAMEMBER => [ 0x20, 0x28, 0x2a ],
8454
+ #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.
8455
+ #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.
8251
8456
  0x0020 => {
8252
8457
  Name => 'FocusShiftShooting',
8253
8458
  Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96', #not valid for C30/C60/C120
@@ -8425,6 +8630,24 @@ my %nikonFocalConversions = (
8425
8630
  },
8426
8631
  );
8427
8632
 
8633
+ %Image::ExifTool::Nikon::MenuInfoZ8 = (
8634
+ %binaryDataAttrs,
8635
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
8636
+ IS_SUBDIR => [ 0x10 ],
8637
+ # 0x00 - int32u size of this directory
8638
+ 0x10 => [
8639
+ {
8640
+ Name => 'MenuSettingsOffsetZ8',
8641
+ Format => 'int32u',
8642
+ Notes => 'Firmware versions 1.0.0',
8643
+ SubDirectory => {
8644
+ TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ8',
8645
+ Start => '$dirStart + $val',
8646
+ },
8647
+ },
8648
+ ],
8649
+ );
8650
+
8428
8651
  %Image::ExifTool::Nikon::MenuInfoZ9 = (
8429
8652
  %binaryDataAttrs,
8430
8653
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
@@ -8452,7 +8675,7 @@ my %nikonFocalConversions = (
8452
8675
  },
8453
8676
  },
8454
8677
  {
8455
- Name => 'MenuSettingsOffsetZ9v3',
8678
+ Name => 'MenuSettingsOffsetZ9v4',
8456
8679
  Notes => 'Firmware versions 4.0 and later',
8457
8680
  Format => 'int32u',
8458
8681
  SubDirectory => {
@@ -8466,9 +8689,19 @@ my %nikonFocalConversions = (
8466
8689
  %Image::ExifTool::Nikon::AutoCaptureInfo = (
8467
8690
  %binaryDataAttrs,
8468
8691
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
8692
+ DATAMEMBER => [ 0 ],
8693
+ 0 => {
8694
+ Name => 'AutoCapturedFrame',
8695
+ RawConv => '$$self{AutoCapturedFrame} = $val',
8696
+ PrintConv => {
8697
+ 0 => 'No',
8698
+ 5 => 'Yes',
8699
+ },
8700
+ },
8469
8701
  1 => {
8470
8702
  Name => 'AutoCaptureCriteria',
8471
- PrintConv => q[
8703
+ Condition => '$$self{AutoCapturedFrame} and $$self{AutoCapturedFrame} ne 0',
8704
+ PrintConv => q[
8472
8705
  $_ = '';
8473
8706
  return $_ . Image::ExifTool::DecodeBits($val,
8474
8707
  {
@@ -8481,6 +8714,7 @@ my %nikonFocalConversions = (
8481
8714
  # 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.
8482
8715
  55 => {
8483
8716
  Name => 'AutoCaptureRecordingTime',
8717
+ Condition => '$$self{AutoCapturedFrame} and $$self{AutoCapturedFrame} ne 0',
8484
8718
  PrintConv => {
8485
8719
  0 => '1 Sec',
8486
8720
  1 => '3 Sec',
@@ -8500,6 +8734,7 @@ my %nikonFocalConversions = (
8500
8734
  },
8501
8735
  56 => {
8502
8736
  Name => 'AutoCaptureWaitTime',
8737
+ Condition => '$$self{AutoCapturedFrame} and $$self{AutoCapturedFrame} ne 0',
8503
8738
  PrintConv => {
8504
8739
  0 => 'No Wait',
8505
8740
  1 => '10 Sec',
@@ -8518,14 +8753,17 @@ my %nikonFocalConversions = (
8518
8753
  },
8519
8754
  74 => {
8520
8755
  Name => 'AutoCaptureDistanceFar',
8756
+ Condition => '$$self{AutoCapturedFrame} and $$self{AutoCapturedFrame} ne 0',
8521
8757
  PrintConv => 'sprintf("%.1f m", $val/10)',
8522
8758
  },
8523
8759
  78 => {
8524
8760
  Name => 'AutoCaptureDistanceNear',
8761
+ Condition => '$$self{AutoCapturedFrame} and $$self{AutoCapturedFrame} ne 0',
8525
8762
  PrintConv => 'sprintf("%.1f m", $val/10)',
8526
8763
  },
8527
8764
  95 => {
8528
8765
  Name => 'AutoCaptureCriteriaMotionDirection',
8766
+ Condition => '$$self{AutoCapturedFrame} and $$self{AutoCapturedFrame} ne 0',
8529
8767
  PrintConv => q[
8530
8768
  return 'All' if $val eq 255;
8531
8769
  $_ = '';
@@ -8542,11 +8780,21 @@ my %nikonFocalConversions = (
8542
8780
  });
8543
8781
  ],
8544
8782
  },
8545
- 99 => 'AutoCaptureCriteriaMotionSpeed', #1-5
8546
- 100 => 'AutoCaptureCriteriaMotionSize', #1-5
8547
- 105 => 'AutoCaptureCriteriaSubjectSize', #1-5
8783
+ 99 => {
8784
+ Name => 'AutoCaptureCriteriaMotionSpeed', #1-5
8785
+ Condition => '$$self{AutoCapturedFrame} and $$self{AutoCapturedFrame} ne 0',
8786
+ },
8787
+ 100 => {
8788
+ Name => 'AutoCaptureCriteriaMotionSize', #1-5
8789
+ Condition => '$$self{AutoCapturedFrame} and $$self{AutoCapturedFrame} ne 0',
8790
+ },
8791
+ 105 => {
8792
+ Name => 'AutoCaptureCriteriaSubjectSize', #1-5
8793
+ Condition => '$$self{AutoCapturedFrame} and $$self{AutoCapturedFrame} ne 0',
8794
+ },
8548
8795
  106 => {
8549
8796
  Name => 'AutoCaptureCriteriaSubjectType',
8797
+ Condition => '$$self{AutoCapturedFrame} and $$self{AutoCapturedFrame} ne 0',
8550
8798
  PrintConv => {
8551
8799
  0 => 'Auto (all)',
8552
8800
  1 => 'People',
@@ -8822,10 +9070,253 @@ my %nikonFocalConversions = (
8822
9070
  #859 => HDMIViewAssist
8823
9071
  );
8824
9072
 
9073
+ %Image::ExifTool::Nikon::MenuSettingsZ8 = (
9074
+ %binaryDataAttrs,
9075
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
9076
+ DATAMEMBER => [ 152, 200, 204, 244, 440, 548, 554, 570, 596 ],
9077
+ IS_SUBDIR => [ 943 ],
9078
+ NOTES => 'These tags are used by the Z8 firmware 1.00.',
9079
+ 72 => {
9080
+ Name => 'HighFrameRate', #CH and C30/C60/C120 but not CL
9081
+ PrintConv => \%highFrameRateZ9,
9082
+ },
9083
+ 152 => {
9084
+ Name => 'MultipleExposureMode',
9085
+ RawConv => '$$self{MultipleExposureMode} = $val',
9086
+ PrintConv => \%multipleExposureModeZ9,
9087
+ },
9088
+ 154 => {Name => 'MultiExposureShots', Condition => '$$self{MultipleExposureMode} != 0'}, #range 2-9
9089
+ 184 => {
9090
+ Name => 'IntervalDurationHours',
9091
+ Format => 'int32u',
9092
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0',
9093
+ },
9094
+ 188 => {
9095
+ Name => 'IntervalDurationMinutes',
9096
+ Format => 'int32u',
9097
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0',
9098
+ },
9099
+ 192 => {
9100
+ Name => 'IntervalDurationSeconds',
9101
+ Format => 'int32u',
9102
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0',
9103
+ },
9104
+ 200 => {
9105
+ Name => 'Intervals',
9106
+ Format => 'int32u',
9107
+ RawConv => '$$self{IntervalShootingIntervals} = $val',
9108
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0',
9109
+ },
9110
+ 204 => {
9111
+ Name => 'ShotsPerInterval',
9112
+ Format => 'int32u',
9113
+ RawConv => '$$self{IntervalShootingShotsPerInterval} = $val',
9114
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0',
9115
+ },
9116
+ 208 => {
9117
+ Name => 'IntervalExposureSmoothing',
9118
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0',
9119
+ Format => 'int8u',
9120
+ PrintConv => \%offOn,
9121
+ },
9122
+ 210 => {
9123
+ Name => 'IntervalPriority',
9124
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0',
9125
+ Format => 'int8u',
9126
+ PrintConv => \%offOn,
9127
+ },
9128
+ 244 => {
9129
+ Name => 'FocusShiftNumberShots', #1-300
9130
+ RawConv => '$$self{FocusShiftNumberShots} = $val',
9131
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
9132
+ },
9133
+ 248 => {
9134
+ Name => 'FocusShiftStepWidth', #1(Narrow) to 10 (Wide)
9135
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
9136
+ },
9137
+ 252 => {
9138
+ Name => 'FocusShiftInterval',
9139
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
9140
+ PrintConv => '$val == 1? "1 Second" : sprintf("%.0f Seconds",$val)',
9141
+ },
9142
+ 256 => {
9143
+ Name => 'FocusShiftExposureLock',
9144
+ Unknown => 1,
9145
+ PrintConv => \%offOn,
9146
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
9147
+ },
9148
+ 286 => { Name => 'PhotoShootingMenuBank', PrintConv => \%banksZ9 },
9149
+ 288 => { Name => 'ExtendedMenuBanks', PrintConv => \%offOn }, # single tag from both Photo & Video menus
9150
+ 324 => { Name => 'PhotoShootingMenuBankImageArea', PrintConv => \%imageAreaZ9 },
9151
+ 338 => { Name => 'AutoISO', PrintConv => \%offOn },
9152
+ 340 => {
9153
+ Name => 'ISOAutoHiLimit',
9154
+ Format => 'int16u',
9155
+ Unknown => 1,
9156
+ ValueConv => '($val-104)/8',
9157
+ ValueConvInv => '8 * ($val + 104)',
9158
+ PrintConv => \%iSOAutoHiLimitZ7,
9159
+ },
9160
+ 342 => {
9161
+ Name => 'ISOAutoFlashLimit',
9162
+ Format => 'int16u',
9163
+ Unknown => 1,
9164
+ ValueConv => '($val-104)/8',
9165
+ ValueConvInv => '8 * ($val + 104)',
9166
+ PrintConv => \%iSOAutoHiLimitZ7,
9167
+ },
9168
+ 350 => {
9169
+ Name => 'ISOAutoShutterTime', # shutter speed is 2 ** (-$val/24)
9170
+ ValueConv => '$val / 8',
9171
+ Format => 'int16s',
9172
+ PrintConv => \%iSOAutoShutterTimeZ9,
9173
+ },
9174
+ 432 => { Name => 'MovieVignetteControl', PrintConv => \%offLowNormalHighZ7, Unknown => 1 },
9175
+ 434 => { Name => 'DiffractionCompensation', PrintConv => \%offOn }, # value can be set from both the Photo Shoot Menu and the Video Shooting Menu
9176
+ 436 => { Name => 'FlickerReductionShooting',PrintConv => \%offOn },
9177
+ 440 => {
9178
+ Name => 'FlashControlMode', # this and nearby tag values for flash may be set from either the Photo Shooting Menu or using the Flash unit menu
9179
+ RawConv => '$$self{FlashControlMode} = $val',
9180
+ PrintConv => \%flashControlModeZ7,
9181
+ },
9182
+ 548 => { Name => 'AFAreaMode', RawConv => '$$self{AFAreaMode} = $val', PrintConv => \%aFAreaModeZ9},
9183
+ 550 => { Name => 'VRMode', PrintConv => \%vRModeZ9},
9184
+ 554 => {
9185
+ Name => 'BracketSet',
9186
+ RawConv => '$$self{BracketSet} = $val',
9187
+ PrintConv => \%bracketSetZ9,
9188
+ },
9189
+ 556 => {
9190
+ Name => 'BracketProgram',
9191
+ Condition => '$$self{BracketSet} < 3',
9192
+ Notes => 'AE and/or Flash Bracketing',
9193
+ PrintConv => \%bracketProgramZ9,
9194
+ },
9195
+ 558 => {
9196
+ Name => 'BracketIncrement',
9197
+ Condition => '$$self{BracketSet} < 3',
9198
+ Notes => 'AE and/or Flash Bracketing',
9199
+ PrintConv => \%bracketIncrementZ9,
9200
+ },
9201
+ 570 => { Name => 'HDR', RawConv => '$$self{HDR} = $val', PrintConv => \%multipleExposureModeZ9 },
9202
+ #572 HDRSaveRaw 0=> No; 1=> Yes
9203
+ 576 => { Name => 'SecondarySlotFunction', PrintConv => \%secondarySlotFunctionZ9 },
9204
+ 582 => { Name => 'HDRLevel', Condition => '$$self{HDR} ne 0', PrintConv => \%hdrLevelZ8 },
9205
+ 586 => { Name => 'Slot2JpgSize', PrintConv => { 0 => 'Large (8256x5504)', 1 => 'Medium (6192x4128)', 2 => 'Small (4128x2752)' }, Unknown => 1},
9206
+ 592 => { Name => 'DXCropAlert', PrintConv => \%offOn },
9207
+ 594 => { Name => 'SubjectDetection', PrintConv => \%subjectDetectionZ9 },
9208
+ 596 => {
9209
+ Name => 'DynamicAFAreaSize',
9210
+ Condition => '$$self{AFAreaMode} == 2',
9211
+ RawConv => '$$self{DynamicAFAreaSize} = $val',
9212
+ PrintConv => \%dynamicAfAreaModesZ9,
9213
+ },
9214
+ 618 => { Name => 'ToneMap', PrintConv => { 0 => 'SDR', 1 => 'HLG' }, Unknown => 1 },
9215
+ 622 => { Name => 'PortraitImpressionBalance', PrintConv => \%portraitImpressionBalanceZ8 },
9216
+ 636 => { Name => 'HighFrequencyFlickerReductionShooting', PrintConv => \%offOn, Unknown => 1 }, # new with firmware 3.0
9217
+ 730 => {
9218
+ Name => 'MovieImageArea',
9219
+ Unknown => 1,
9220
+ Mask => 0x01, # without the mask 4 => 'FX' 5 => DX only the 2nd Z-series field encountered with a mask.
9221
+ PrintConv => \%imageAreaZ9b,
9222
+ },
9223
+ 740 => { Name => 'MovieType', PrintConv => \%movieTypeZ9, Unknown => 1 },
9224
+ 742 => {
9225
+ Name => 'MovieISOAutoHiLimit',
9226
+ Format => 'int16u',
9227
+ Unknown => 1,
9228
+ ValueConv => '($val-104)/8',
9229
+ ValueConvInv => '8 * ($val + 104)',
9230
+ PrintConv => \%iSOAutoHiLimitZ7,
9231
+ },
9232
+ 744 => { Name => 'MovieISOAutoControlManualMode', PrintConv => \%offOn, Unknown => 1 },
9233
+ 746 => {
9234
+ Name => 'MovieISOAutoManualMode',
9235
+ Format => 'int16u',
9236
+ Unknown => 1,
9237
+ ValueConv => '($val-104)/8',
9238
+ ValueConvInv => '8 * ($val + 104)',
9239
+ PrintConv => \%iSOAutoHiLimitZ7,
9240
+ },
9241
+ 820 => { Name => 'MovieActiveD-Lighting', PrintConv => \%activeDLightingZ7, Unknown => 1 },
9242
+ 822 => { Name => 'MovieHighISONoiseReduction', PrintConv => \%offLowNormalHighZ7, Unknown => 1 },
9243
+ 828 => { Name => 'MovieFlickerReduction', PrintConv => \%movieFlickerReductionZ9 },
9244
+ 830 => { Name => 'MovieMeteringMode', PrintConv => \%meteringModeZ7, Unknown => 1 },
9245
+ 832 => { Name => 'MovieFocusMode', PrintConv => \%focusModeZ7, Unknown => 1 },
9246
+ 834 => { Name => 'MovieAFAreaMode', PrintConv => \%aFAreaModeZ9 },
9247
+ 836 => { Name => 'MovieVRMode', PrintConv => \%vRModeZ9, Unknown => 1 },
9248
+ 840 => { Name => 'MovieElectronicVR', PrintConv => \%offOn, Unknown => 1 }, # distinct from MoveieVRMode
9249
+ 842 => { Name => 'MovieSoundRecording', PrintConv => { 0 => 'Off', 1 => 'Auto', 2 => 'Manual' }, Unknown => 1 },
9250
+ 844 => { Name => 'MicrophoneSensitivity', Unknown => 1 }, # 1-20
9251
+ 846 => { Name => 'MicrophoneAttenuator', PrintConv => \%offOn, Unknown => 1 }, # distinct from MoveieVRMode
9252
+ 848 => { Name => 'MicrophoneFrequencyResponse',PrintConv => { 0 => 'Wide Range', 1 => 'Vocal Range' }, Unknown => 1 },
9253
+ 850 => { Name => 'WindNoiseReduction', PrintConv => \%offOn, Unknown => 1 },
9254
+ 882 => { Name => 'MovieFrameSize', PrintConv => \%movieFrameSizeZ9, Unknown => 1 },
9255
+ 884 => { Name => 'MovieFrameRate', PrintConv => \%movieFrameRateZ7, Unknown => 1 },
9256
+ 886 => { Name => 'MicrophoneJackPower', PrintConv => \%offOn, Unknown => 1 },
9257
+ 887 => { Name => 'MovieDXCropAlert', PrintConv => \%offOn, Unknown => 1 },
9258
+ 888 => { Name => 'MovieSubjectDetection', PrintConv => \%subjectDetectionZ9, Unknown => 1 },
9259
+ 896 => { Name => 'MovieHighResZoom', PrintConv => \%offOn, Unknown => 1 },
9260
+ 943 => {
9261
+ Name => 'CustomSettingsZ8',
9262
+ Format => 'undef[730]',
9263
+ SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsZ8' },
9264
+ },
9265
+ 1682 => { Name => 'Language', PrintConv => \%languageZ9, Unknown => 1 },
9266
+ 1684 => { Name => 'TimeZone', PrintConv => \%timeZoneZ9 },
9267
+ 1690 => { Name => 'MonitorBrightness', PrintConv => \%monitorBrightnessZ9, Unknown => 1 }, # settings: -5 to +5. Added with firmware 3.0: Lo1, Lo2, Hi1, Hi2
9268
+ 1712 => { Name => 'AFFineTune', PrintConv => \%offOn, Unknown => 1 },
9269
+ 1716 => { Name => 'NonCPULens1FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1}, #should probably hide altogther if $val is 0
9270
+ 1718 => { Name => 'NonCPULens2FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9271
+ 1720 => { Name => 'NonCPULens3FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9272
+ 1722 => { Name => 'NonCPULens4FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9273
+ 1724 => { Name => 'NonCPULens5FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9274
+ 1726 => { Name => 'NonCPULens6FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9275
+ 1728 => { Name => 'NonCPULens7FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9276
+ 1730 => { Name => 'NonCPULens8FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9277
+ 1732 => { Name => 'NonCPULens9FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9278
+ 1734 => { Name => 'NonCPULens10FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9279
+ 1736 => { Name => 'NonCPULens11FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9280
+ 1738 => { Name => 'NonCPULens12FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9281
+ 1740 => { Name => 'NonCPULens13FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9282
+ 1742 => { Name => 'NonCPULens14FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9283
+ 1744 => { Name => 'NonCPULens15FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9284
+ 1746 => { Name => 'NonCPULens16FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9285
+ 1748 => { Name => 'NonCPULens17FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9286
+ 1750 => { Name => 'NonCPULens18FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9287
+ 1752 => { Name => 'NonCPULens19FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9288
+ 1754 => { Name => 'NonCPULens20FocalLength', Format => 'int16u', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9289
+ 1756 => { Name => 'NonCPULens1MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9290
+ 1758 => { Name => 'NonCPULens2MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9291
+ 1760 => { Name => 'NonCPULens3MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9292
+ 1762 => { Name => 'NonCPULens4MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9293
+ 1764 => { Name => 'NonCPULens5MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9294
+ 1766 => { Name => 'NonCPULens6MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9295
+ 1768 => { Name => 'NonCPULens7MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9296
+ 1770 => { Name => 'NonCPULens8MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9297
+ 1772 => { Name => 'NonCPULens9MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9298
+ 1774 => { Name => 'NonCPULens10MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9299
+ 1776 => { Name => 'NonCPULens11MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9300
+ 1778 => { Name => 'NonCPULens12MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9301
+ 1780 => { Name => 'NonCPULens13MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9302
+ 1782 => { Name => 'NonCPULens14MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9303
+ 1784 => { Name => 'NonCPULens15MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9304
+ 1786 => { Name => 'NonCPULens16MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9305
+ 1788 => { Name => 'NonCPULens17MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9306
+ 1790 => { Name => 'NonCPULens18MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9307
+ 1792 => { Name => 'NonCPULens19MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9308
+ 1794 => { Name => 'NonCPULens20MaxAperture', Format => 'int16u', PrintConv => \%nonCPULensApertureZ8, Unknown => 1},
9309
+ 1808 => { Name => 'HDMIOutputResolution', PrintConv => \%hDMIOutputResolutionZ9 },
9310
+ 1826 => { Name => 'AirplaneMode', PrintConv => \%offOn, Unknown => 1 },
9311
+ 1827 => { Name => 'EmptySlotRelease', PrintConv => { 0 => 'Disable Release', 1 => 'Enable Release' }, Unknown => 1 },
9312
+ 1862 => { Name => 'EnergySavingMode', PrintConv => \%offOn, Unknown => 1 },
9313
+ 1890 => { Name => 'USBPowerDelivery', PrintConv => \%offOn, Unknown => 1 },
9314
+ 1899 => { Name => 'SensorShield', PrintConv => { 0 => 'Stays Open', 1 => 'Closes' }, Unknown => 1 },
9315
+ );
8825
9316
  %Image::ExifTool::Nikon::MenuSettingsZ9 = (
8826
9317
  %binaryDataAttrs,
8827
9318
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
8828
- DATAMEMBER => [ 140, 188, 192, 232, 424, 534, 576 ],
9319
+ DATAMEMBER => [ 140, 188, 192, 232, 424, 528, 534, 576 ],
8829
9320
  IS_SUBDIR => [ 799 ],
8830
9321
  NOTES => 'These tags are used by the Z9.',
8831
9322
  #90 ISO
@@ -8839,13 +9330,13 @@ my %nikonFocalConversions = (
8839
9330
  Name => 'Intervals',
8840
9331
  Format => 'int32u',
8841
9332
  RawConv => '$$self{IntervalShootingIntervals} = $val',
8842
- Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
9333
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0', #not valid for C30/C60/C120
8843
9334
  },
8844
9335
  192 => {
8845
9336
  Name => 'ShotsPerInterval',
8846
9337
  Format => 'int32u',
8847
9338
  RawConv => '$$self{IntervalShootingShotsPerInterval} = $val',
8848
- Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
9339
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0', #not valid for C30/C60/C120
8849
9340
  },
8850
9341
  #220 NEFCompression 0=> 'Lossless' 1=> 'High Efficiency*' 4=> 'High Efficientcy'
8851
9342
  232 => {
@@ -8942,7 +9433,7 @@ my %nikonFocalConversions = (
8942
9433
  444 => { Name => 'FlashRemoteControl', PrintConv => \%flashRemoteControlZ7, Unknown => 1 },
8943
9434
  456 => { Name => 'FlashWirelessOption', PrintConv => \%flashWirelessOptionZ7, Unknown => 1 },
8944
9435
  #526 FocusMode
8945
- 528 => { Name => 'AFAreaMode',PrintConv => \%aFAreaModeZ9 },
9436
+ 528 => { Name => 'AFAreaMode', RawConv => '$$self{AFAreaMode} = $val', PrintConv => \%aFAreaModeZ9},
8946
9437
  530 => { Name => 'VRMode', PrintConv => \%vRModeZ9 },
8947
9438
  534 => {
8948
9439
  Name => 'BracketSet',
@@ -8967,7 +9458,7 @@ my %nikonFocalConversions = (
8967
9458
  574 => { Name => 'SubjectDetection', PrintConv => \%subjectDetectionZ9 },
8968
9459
  576 => {
8969
9460
  Name => 'DynamicAFAreaSize',
8970
- Condition => '$$self{AFAraMode} = 2',
9461
+ Condition => '$$self{AFAreaMode} == 2',
8971
9462
  RawConv => '$$self{DynamicAFAreaSize} = $val',
8972
9463
  PrintConv => \%dynamicAfAreaModesZ9,
8973
9464
  },
@@ -9036,7 +9527,7 @@ my %nikonFocalConversions = (
9036
9527
  %Image::ExifTool::Nikon::MenuSettingsZ9v3 = (
9037
9528
  %binaryDataAttrs,
9038
9529
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
9039
- DATAMEMBER => [ 154, 204, 208, 248, 444, 554, 596 ],
9530
+ DATAMEMBER => [ 154, 204, 208, 248, 444, 548, 554, 596 ],
9040
9531
  IS_SUBDIR => [ 847 ],
9041
9532
  NOTES => 'These tags are used by the Z9 firmware 3.00.',
9042
9533
  72 => {
@@ -9053,13 +9544,13 @@ my %nikonFocalConversions = (
9053
9544
  Name => 'Intervals',
9054
9545
  Format => 'int32u',
9055
9546
  RawConv => '$$self{IntervalShootingIntervals} = $val',
9056
- Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
9547
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0', #not valid for C30/C60/C120
9057
9548
  },
9058
9549
  208 => {
9059
9550
  Name => 'ShotsPerInterval',
9060
9551
  Format => 'int32u',
9061
9552
  RawConv => '$$self{IntervalShootingShotsPerInterval} = $val',
9062
- Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
9553
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0', #not valid for C30/C60/C120
9063
9554
  },
9064
9555
  248 => {
9065
9556
  Name => 'FocusShiftNumberShots', #1-300
@@ -9143,7 +9634,7 @@ my %nikonFocalConversions = (
9143
9634
  #462 flash wireless control 0=> 'Off' 1=> 'Optical AWL'
9144
9635
  #464 => { Name => 'FlashRemoteControl', PrintConv => \%flashRemoteControlZ7, Unknown => 1 },
9145
9636
  #476 => { Name => 'FlashWirelessOption', PrintConv => \%flashWirelessOptionZ7, Unknown => 1 },
9146
- 548 => { Name => 'AFAreaMode', PrintConv => \%aFAreaModeZ9},
9637
+ 548 => { Name => 'AFAreaMode', RawConv => '$$self{AFAreaMode} = $val', PrintConv => \%aFAreaModeZ9},
9147
9638
  550 => { Name => 'VRMode', PrintConv => \%vRModeZ9},
9148
9639
  554 => {
9149
9640
  Name => 'BracketSet',
@@ -9167,7 +9658,7 @@ my %nikonFocalConversions = (
9167
9658
  594 => { Name => 'SubjectDetection', PrintConv => \%subjectDetectionZ9 },
9168
9659
  596 => {
9169
9660
  Name => 'DynamicAFAreaSize',
9170
- Condition => '$$self{AFAraMode} = 2',
9661
+ Condition => '$$self{AFAreaMode} == 2',
9171
9662
  RawConv => '$$self{DynamicAFAreaSize} = $val',
9172
9663
  PrintConv => \%dynamicAfAreaModesZ9,
9173
9664
  },
@@ -9265,10 +9756,11 @@ my %nikonFocalConversions = (
9265
9756
  #1892 DispButton CSf2
9266
9757
  #1936 FocusPointDisplayOption3DTrackingColor CSa11-d 0=> 'White', 1= => 'Red'
9267
9758
  );
9759
+
9268
9760
  %Image::ExifTool::Nikon::MenuSettingsZ9v4 = (
9269
9761
  %binaryDataAttrs,
9270
9762
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
9271
- DATAMEMBER => [ 154, 204, 208, 248, 444, 554, 596 ],
9763
+ DATAMEMBER => [ 154, 204, 208, 248, 444, 548, 554, 570, 596 ],
9272
9764
  IS_SUBDIR => [ 847 ],
9273
9765
  NOTES => 'These tags are used by the Z9 firmware 3.00.',
9274
9766
  72 => {
@@ -9285,13 +9777,13 @@ my %nikonFocalConversions = (
9285
9777
  Name => 'Intervals',
9286
9778
  Format => 'int32u',
9287
9779
  RawConv => '$$self{IntervalShootingIntervals} = $val',
9288
- Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
9780
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0', #not valid for C30/C60/C120
9289
9781
  },
9290
9782
  208 => {
9291
9783
  Name => 'ShotsPerInterval',
9292
9784
  Format => 'int32u',
9293
9785
  RawConv => '$$self{IntervalShootingShotsPerInterval} = $val',
9294
- Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
9786
+ Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0', #not valid for C30/C60/C120
9295
9787
  },
9296
9788
  248 => {
9297
9789
  Name => 'FocusShiftNumberShots', #1-300
@@ -9375,7 +9867,7 @@ my %nikonFocalConversions = (
9375
9867
  #462 flash wireless control 0=> 'Off' 1=> 'Optical AWL'
9376
9868
  #464 => { Name => 'FlashRemoteControl', PrintConv => \%flashRemoteControlZ7, Unknown => 1 },
9377
9869
  #476 => { Name => 'FlashWirelessOption', PrintConv => \%flashWirelessOptionZ7, Unknown => 1 },
9378
- 548 => { Name => 'AFAreaMode', PrintConv => \%aFAreaModeZ9},
9870
+ 548 => { Name => 'AFAreaMode', RawConv => '$$self{AFAreaMode} = $val', PrintConv => \%aFAreaModeZ9},
9379
9871
  550 => { Name => 'VRMode', PrintConv => \%vRModeZ9},
9380
9872
  554 => {
9381
9873
  Name => 'BracketSet',
@@ -9394,13 +9886,15 @@ my %nikonFocalConversions = (
9394
9886
  Notes => 'AE and/or Flash Bracketing',
9395
9887
  PrintConv => \%bracketIncrementZ9,
9396
9888
  },
9889
+ 570 => { Name => 'HDR', RawConv => '$$self{HDR} = $val', PrintConv => \%multipleExposureModeZ9 },
9397
9890
  576 => { Name => 'SecondarySlotFunction', PrintConv => \%secondarySlotFunctionZ9 },
9891
+ 582 => { Name => 'HDRLevel', Condition => '$$self{HDR} ne 0', PrintConv => \%hdrLevelZ8 },
9398
9892
  586 => { Name => 'Slot2JpgSize', PrintConv => { 0 => 'Large (8256x5504)', 1 => 'Medium (6192x4128)', 2 => 'Small (4128x2752)' }, Unknown => 1},
9399
9893
  592 => { Name => 'DXCropAlert', PrintConv => \%offOn },
9400
9894
  594 => { Name => 'SubjectDetection', PrintConv => \%subjectDetectionZ9 },
9401
9895
  596 => {
9402
9896
  Name => 'DynamicAFAreaSize',
9403
- Condition => '$$self{AFAraMode} = 2',
9897
+ Condition => '$$self{AFAreaMode} == 2',
9404
9898
  RawConv => '$$self{DynamicAFAreaSize} = $val',
9405
9899
  PrintConv => \%dynamicAfAreaModesZ9,
9406
9900
  },
@@ -9450,14 +9944,14 @@ my %nikonFocalConversions = (
9450
9944
  804 => { Name => 'MovieSubjectDetection', PrintConv => \%subjectDetectionZ9, Unknown => 1 },
9451
9945
  812 => { Name => 'MovieHighResZoom', PrintConv => \%offOn, Unknown => 1 },
9452
9946
  847 => {
9453
- Name => 'CustomSettingsZ9',
9454
- Format => 'undef[608]',
9455
- SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsZ9' },
9456
- },
9457
- 1474 => { Name => 'Language', PrintConv => \%languageZ9, Unknown => 1 },
9458
- 1476 => { Name => 'TimeZone', PrintConv => \%timeZoneZ9 },
9459
- 1482 => { Name => 'MonitorBrightness', PrintConv => \%monitorBrightnessZ9, Unknown => 1 }, # settings: -5 to +5. Added with firmware 3.0: Lo1, Lo2, Hi1, Hi2
9460
- 1504 => { Name => 'AFFineTune', PrintConv => \%offOn, Unknown => 1 },
9947
+ Name => 'CustomSettingsZ9v4',
9948
+ Format => 'undef[632]',
9949
+ SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsZ9v4' },
9950
+ },
9951
+ 1498 => { Name => 'Language', PrintConv => \%languageZ9, Unknown => 1 },
9952
+ 1500 => { Name => 'TimeZone', PrintConv => \%timeZoneZ9 },
9953
+ 1506 => { Name => 'MonitorBrightness', PrintConv => \%monitorBrightnessZ9, Unknown => 1 }, # settings: -5 to +5. Added with firmware 3.0: Lo1, Lo2, Hi1, Hi2
9954
+ 1528 => { Name => 'AFFineTune', PrintConv => \%offOn, Unknown => 1 },
9461
9955
  1532 => { Name => 'NonCPULens1FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1}, #should probably hide altogther if $val is 0
9462
9956
  1536 => { Name => 'NonCPULens2FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9463
9957
  1540 => { Name => 'NonCPULens3FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
@@ -9469,7 +9963,7 @@ my %nikonFocalConversions = (
9469
9963
  1564 => { Name => 'NonCPULens9FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9470
9964
  1568 => { Name => 'NonCPULens10FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9471
9965
  1572 => { Name => 'NonCPULens11FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9472
- 1576 => { Name => 'NonCPULens21FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9966
+ 1576 => { Name => 'NonCPULens12FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9473
9967
  1580 => { Name => 'NonCPULens13FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9474
9968
  1584 => { Name => 'NonCPULens14FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9475
9969
  1588 => { Name => 'NonCPULens15FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
@@ -9478,26 +9972,26 @@ my %nikonFocalConversions = (
9478
9972
  1600 => { Name => 'NonCPULens18FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9479
9973
  1604 => { Name => 'NonCPULens19FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9480
9974
  1608 => { Name => 'NonCPULens20FocalLength', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/10)', Unknown => 1},
9481
- 1612 => { Name => 'NonCPULens1MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9482
- 1616 => { Name => 'NonCPULens2MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9483
- 1620 => { Name => 'NonCPULens3MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9484
- 1624 => { Name => 'NonCPULens4MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9485
- 1628 => { Name => 'NonCPULens5MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9486
- 1632 => { Name => 'NonCPULens6MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9487
- 1636 => { Name => 'NonCPULens7MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9488
- 1640 => { Name => 'NonCPULens8MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9489
- 1644 => { Name => 'NonCPULens9MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9490
- 1648 => { Name => 'NonCPULens10MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9491
- 1652 => { Name => 'NonCPULens11MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9492
- 1656 => { Name => 'NonCPULens12MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9493
- 1660 => { Name => 'NonCPULens13MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9494
- 1664 => { Name => 'NonCPULens14MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9495
- 1668 => { Name => 'NonCPULens15MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9496
- 1672 => { Name => 'NonCPULens16MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9497
- 1676 => { Name => 'NonCPULens17MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9498
- 1680 => { Name => 'NonCPULens18MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9499
- 1684 => { Name => 'NonCPULens19MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9500
- 1688 => { Name => 'NonCPULens20MaxAperture', Format => 'int16s', PrintConv => 'sprintf("%.1fmm",$val/100)', Unknown => 1},
9975
+ 1612 => { Name => 'NonCPULens1MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1}, #non-CPU aperture interface, values and storage differ from the Z8
9976
+ 1616 => { Name => 'NonCPULens2MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9977
+ 1620 => { Name => 'NonCPULens3MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9978
+ 1624 => { Name => 'NonCPULens4MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9979
+ 1628 => { Name => 'NonCPULens5MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9980
+ 1632 => { Name => 'NonCPULens6MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9981
+ 1636 => { Name => 'NonCPULens7MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9982
+ 1640 => { Name => 'NonCPULens8MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9983
+ 1644 => { Name => 'NonCPULens9MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9984
+ 1648 => { Name => 'NonCPULens10MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9985
+ 1652 => { Name => 'NonCPULens11MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9986
+ 1656 => { Name => 'NonCPULens12MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9987
+ 1660 => { Name => 'NonCPULens13MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9988
+ 1664 => { Name => 'NonCPULens14MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9989
+ 1668 => { Name => 'NonCPULens15MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9990
+ 1672 => { Name => 'NonCPULens16MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9991
+ 1676 => { Name => 'NonCPULens17MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9992
+ 1680 => { Name => 'NonCPULens18MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9993
+ 1684 => { Name => 'NonCPULens19MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9994
+ 1688 => { Name => 'NonCPULens20MaxAperture', Format => 'int16s', PrintConv => 'sprintf("f/%.1f",$val/100)', Unknown => 1},
9501
9995
  1704 => { Name => 'HDMIOutputResolution', PrintConv => \%hDMIOutputResolutionZ9 },
9502
9996
  1717 => { Name => 'SetClockFromLocationData', PrintConv => \%offOn, Unknown => 1 },
9503
9997
  1724 => { Name => 'AirplaneMode', PrintConv => \%offOn, Unknown => 1 },
@@ -10823,16 +11317,14 @@ my %nikonFocalConversions = (
10823
11317
  },
10824
11318
  );
10825
11319
 
10826
- # MakerNotes0x51 - compression info for Z9
11320
+ # MakerNotes0x51 - compression info for Z8 and Z9
10827
11321
  %Image::ExifTool::Nikon::MakerNotes0x51 = (
10828
11322
  %binaryDataAttrs,
10829
- DATAMEMBER => [ 0 ],
10830
11323
  GROUPS => { 0 => 'MakerNotes' },
10831
11324
  0 => {
10832
- Name => 'FirmwareVersion',
11325
+ Name => 'FirmwareVersion51',
10833
11326
  Format => 'string[8]',
10834
11327
  Writable => 0,
10835
- RawConv => '$$self{FirmwareVersion} = $val',
10836
11328
  },
10837
11329
  10 => {
10838
11330
  Name => 'NEFCompression',
@@ -12483,8 +12975,10 @@ sub PrepareNikonOffsets($$$$$)
12483
12975
  for ($i=0; $i<@sorted-1; ++$i) {
12484
12976
  my $pos = $sorted[$i][0];
12485
12977
  my $len = $sorted[$i+1][1] - $sorted[$i][1];
12978
+ my $tagInfo = $$tagTablePtr{$pos};
12979
+ $tagInfo = $et->GetTagInfo($tagTablePtr, $pos) if $tagInfo and
12980
+ not (ref $tagInfo eq 'HASH' and $$tagInfo{AlwaysDecrypt});
12486
12981
  # set DirLen in SubDirectory entry
12487
- my $tagInfo = $et->GetTagInfo($tagTablePtr, $pos) if $$tagTablePtr{$pos};
12488
12982
  my $subdir;
12489
12983
  $$subdir{DirLen} = $len if ref $tagInfo eq 'HASH' and defined($subdir=$$tagInfo{SubDirectory});
12490
12984
  if ($decryptMode) {
@@ -12496,7 +12990,7 @@ sub PrepareNikonOffsets($$$$$)
12496
12990
  if ($subdir and $$subdir{KnownEnd}) {
12497
12991
  $n = $$subdir{KnownEnd};
12498
12992
  if ($n > $len) {
12499
- $et->Warn("Data too short for $$tagInfo{Name}",1);
12993
+ $et->Warn("Data too short for $$tagInfo{Name}",1) unless $$tagInfo{AlwaysDecrypt};
12500
12994
  $n = $len;
12501
12995
  }
12502
12996
  }