exiftool_vendored 12.64.1 → 12.65.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.
@@ -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
  }