exiftool_vendored 12.55.0 → 12.56.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.
@@ -64,7 +64,7 @@ use Image::ExifTool::Exif;
64
64
  use Image::ExifTool::GPS;
65
65
  use Image::ExifTool::XMP;
66
66
 
67
- $VERSION = '4.17';
67
+ $VERSION = '4.18';
68
68
 
69
69
  sub LensIDConv($$$);
70
70
  sub ProcessNikonAVI($$$);
@@ -919,6 +919,14 @@ my %hDMIOutputResolutionZ9 = (
919
919
  #7 => '480p',
920
920
  );
921
921
 
922
+ my %highFrameRateZ9 = (
923
+ 0 => 'Off',
924
+ 1 => 'CH',
925
+ 3 => 'C30',
926
+ 5 => 'C60',
927
+ 4 => 'C120',
928
+ );
929
+
922
930
  my %imageAreaZ9 = (
923
931
  0 => 'FX',
924
932
  1 => 'DX',
@@ -1651,7 +1659,7 @@ my %base64coord = (
1651
1659
  0x0019 => { #5
1652
1660
  Name => 'ExposureBracketValue',
1653
1661
  Writable => 'rational64s',
1654
- PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)',
1662
+ PrintConv => '$val !~ /undef/ ? Image::ExifTool::Exif::PrintFraction($val) : "n/a" ', #undef observed for Z9 jpgs at C30/C60/C90 [data is 0/0 rather than the usual 0/6]
1655
1663
  PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
1656
1664
  },
1657
1665
  0x001a => { #PH
@@ -1803,6 +1811,7 @@ my %base64coord = (
1803
1811
  0x0034 => { #forum9646
1804
1812
  Name => 'ShutterMode',
1805
1813
  Writable => 'int16u',
1814
+ RawConv => '$$self{ShutterMode} = $val',
1806
1815
  PrintConv => {
1807
1816
  0 => 'Mechanical',
1808
1817
  16 => 'Electronic',
@@ -1811,6 +1820,7 @@ my %base64coord = (
1811
1820
  64 => 'Electronic (Movie)', #JanSkoda (Z6II)
1812
1821
  80 => 'Auto (Mechanical)', #JanSkoda (Z6II)
1813
1822
  81 => 'Auto (Electronic Front Curtain)', #JanSkoda (Z6II)
1823
+ 96 => 'Electronic (High Speed)', #28 Z9 at C30/C60/C120 frame rates
1814
1824
  },
1815
1825
  },
1816
1826
  0x0035 => [{ #32
@@ -1874,6 +1884,14 @@ my %base64coord = (
1874
1884
  SubDirectory => { TagTable => 'Image::ExifTool::Nikon::MakerNotes0x51' },
1875
1885
  },
1876
1886
  #0x0053 #28 possibly a secondary DistortionControl block (in addition to DistortInfo)? Certainly offset 0x04 within block contains tag AutoDistortionControl for Z72 and D6 (1=>On; 2=> Off)
1887
+ 0x0056 => { #28 (Z9)
1888
+ Name => 'MakerNotes0x56',
1889
+ Writable => 'undef',
1890
+ Hidden => 1,
1891
+ Permanent => 0,
1892
+ Flags => [ 'Binary', 'Protected' ],
1893
+ SubDirectory => { TagTable => 'Image::ExifTool::Nikon::MakerNotes0x56' },
1894
+ },
1877
1895
  #0x005e #28 possibly DiffractionCompensation block? Certainly offset 0x04 within block contains tag DiffractionCompensation
1878
1896
  0x0080 => { Name => 'ImageAdjustment', Writable => 'string' },
1879
1897
  0x0081 => { Name => 'ToneComp', Writable => 'string' }, #2
@@ -2003,6 +2021,7 @@ my %base64coord = (
2003
2021
  6 => 'White-Balance Bracketing',
2004
2022
  7 => 'IR Control',
2005
2023
  8 => 'D-Lighting Bracketing', #forum6281 (NC)
2024
+ 11 => 'Pre-capture', #28 Z9 pre-release burst
2006
2025
  });
2007
2026
  ],
2008
2027
  },
@@ -5285,6 +5304,7 @@ my %nikonFocalConversions = (
5285
5304
  22 => 'Nikkor Z 24-50mm f/4-6.3', #IB
5286
5305
  23 => 'Nikkor Z 14-24mm f/2.8 S', #IB
5287
5306
  24 => 'Nikkor Z MC 105mm f/2.8 VR S', #IB
5307
+ 25 => 'Nikkor Z 40mm f/2', #28
5288
5308
  27 => 'Nikkor Z MC 50mm f/2.8', #IB
5289
5309
  28 => 'Nikkor Z 100-400mm f/4.5-5.6 VR S', #28
5290
5310
  29 => 'Nikkor Z 28mm f/2.8', #IB
@@ -5292,7 +5312,10 @@ my %nikonFocalConversions = (
5292
5312
  31 => 'Nikkor Z 24-120 f/4', #28
5293
5313
  32 => 'Nikkor Z 800mm f/6.3 VR S', #28
5294
5314
  36 => 'Nikkor Z 400mm f/4.5 VR S', #IB
5315
+ 37 => 'Nikkor Z 600mm f/4 TC VR S', #28
5295
5316
  39 => 'Nikkor Z 17-28mm f/2.8', #IB
5317
+ 32768 => 'Nikkor Z 400mm f/2.8 TC VR S TC-1.4x', #28
5318
+ 32769 => 'Nikkor Z 600mm f/4 TC VR S TC-1.4x', #28
5296
5319
  },
5297
5320
  },
5298
5321
  0x35 => { #28
@@ -8334,9 +8357,9 @@ my %nikonFocalConversions = (
8334
8357
  WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted,
8335
8358
  CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
8336
8359
  VARS => { ID_LABEL => 'Index' },
8337
- DATAMEMBER => [ 0x04, 0x30, 0x38, 0x84, 0x8c, 0x6c6f, 0x6c90, 0x6c98,
8338
- 0x6c9a, 0xeaea, 0xeb6f, 0xeb70 ],
8339
- IS_SUBDIR => [ 0xec4b ],
8360
+ DATAMEMBER => [ 0x04, 0x30, 0x84, 0x8c,0x93, 0xb4, 0xbc, 0xbe,
8361
+ 0x4410, 0x4411, 0x80c4, 0x8149, 0x814a ],
8362
+ IS_SUBDIR => [ 0x44ec, 0x8225 ],
8340
8363
  WRITABLE => 1,
8341
8364
  FIRST_ENTRY => 0,
8342
8365
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
@@ -8373,20 +8396,12 @@ my %nikonFocalConversions = (
8373
8396
  Hidden => 1,
8374
8397
  },
8375
8398
  0x30 => {
8376
- Name => 'Offset3', #offset3 - length 2528 (Z9 firmware 1.0)
8377
- DataMember => 'Offset3',
8399
+ Name => 'SequenceOffset', #offset3 - length 2528 (Z9 firmware 1.0)
8400
+ DataMember => 'SequenceOffset',
8378
8401
  Format => 'int32u',
8379
8402
  Writable => 0,
8380
8403
  Hidden => 1,
8381
- RawConv => '$$self{Offset3} = $val || 0x10000000; undef', # (ignore if 0)
8382
- },
8383
- 0x38 => {
8384
- Name => 'Offset5', #offset5 - length 2488 (Z9 firmware 1.0)
8385
- DataMember => 'Offset5',
8386
- Format => 'int32u',
8387
- Writable => 0,
8388
- Hidden => 1,
8389
- RawConv => '$$self{Offset5} = $val || 0x10000000; undef', # (ignore if 0)
8404
+ RawConv => '$$self{SequenceOffset} = $val || 0x10000000; undef', # (ignore if 0)
8390
8405
  },
8391
8406
  0x84 => {
8392
8407
  Name => 'OrientationOffset', #offset24 - length 108 (Z9 firmware 1.0)
@@ -8397,23 +8412,25 @@ my %nikonFocalConversions = (
8397
8412
  RawConv => '$$self{OrientationOffset} = $val || 0x10000000; undef', # (ignore if 0)
8398
8413
  },
8399
8414
  0x8c => {
8400
- Name => 'Offset26', #offset26 - length 1895 (Z9 firmware 1.0)
8401
- DataMember => 'Offset26',
8415
+ Name => 'MenuOffset', #offset26 - length 1895 (Z9 firmware 1.0)
8416
+ DataMember => 'MenuOffset6',
8402
8417
  Format => 'int32u',
8403
8418
  Writable => 0,
8404
8419
  Hidden => 1,
8405
- RawConv => '$$self{Offset26} = $val || 0x10000000; undef', # (ignore if 0)
8420
+ RawConv => '$$self{MenuOffset} = $val || 0x10000000; undef', # (ignore if 0)
8406
8421
  },
8407
- ### 0x6c70 - Offset3 info start (Z9 firmware 1.00)
8408
- 0x6c6f => {
8409
- Name => 'Offset3Hook',
8422
+ ### 0x0094 - SequenceOffset info start (Z9 firmware 1.00)
8423
+ 0x0093 => {
8424
+ Name => 'SequenceOffsetHook',
8425
+ Condition => '$$self{ShutterMode} ne 96', #not valid for C30/C60/C120
8410
8426
  Hidden => 1,
8411
8427
  RawConv => 'undef',
8412
- # account for variable location of Offset3 data
8413
- Hook => '$varSize = $$self{Offset3} - 0x6c70',
8428
+ # account for variable location of SequenceOffset data
8429
+ Hook => '$varSize = $$self{SequenceOffset} - 0x0094',
8414
8430
  },
8415
- 0x6c90 => {
8431
+ 0x00b4 => {
8416
8432
  Name => 'FocusShiftShooting',
8433
+ Condition => '$$self{ShutterMode} ne 96', #not valid for C30/C60/C120
8417
8434
  RawConv => '$$self{FocusShiftShooting} = $val',
8418
8435
  PrintConv => q{
8419
8436
  return 'Off' if $val == 0 ;
@@ -8421,8 +8438,9 @@ my %nikonFocalConversions = (
8421
8438
  return "On: $i"
8422
8439
  },
8423
8440
  },
8424
- 0x6c98 => {
8441
+ 0x00bc => {
8425
8442
  Name => 'IntervalShooting',
8443
+ Condition => '$$self{ShutterMode} ne 96', #not valid for C30/C60/C120
8426
8444
  RawConv => '$$self{IntervalShooting} = $val',
8427
8445
  Format => 'int16u',
8428
8446
  PrintConv => q{
@@ -8433,32 +8451,73 @@ my %nikonFocalConversions = (
8433
8451
  #$val == 0 ? 'Off' : sprintf("On: Interval %.0f of %.0f Frame %.0f of %.0f",$val, $$self{IntervalShootingIntervals}, $$self{IntervalFrame}, $$self{IntervalShootingShotsPerInterval}),
8434
8452
  },
8435
8453
  },
8436
- 0x6c9a => {
8454
+ 0x00be => {
8455
+ Condition => '$$self{ShutterMode} ne 96', #not valid for C30/C60/C120
8437
8456
  Name => 'IntervalFrame',
8438
8457
  RawConv => '$$self{IntervalFrame} = $val',
8439
- Condition => '$$self{IntervalShooting} > 0',
8458
+ Condition => '$$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
8440
8459
  Format => 'int16u',
8441
8460
  Hidden => 1,
8442
8461
  },
8443
- ### 0xeaeb - OrientationInfo start (Z9 firmware 1.00)
8444
- 0xeaea => {
8462
+ ### 0x4400 - Offset26 info start (Z9 firmware 3.01 C30/C60/C120 )
8463
+ 0x4410 => {
8464
+ Name => 'MenuSettingsZ9Offset',
8465
+ Condition => '$$self{ShutterMode} eq 96', # C30/C60/C120 jpgs only
8466
+ Writable => 0,
8467
+ Hidden => 1,
8468
+ # offset to MenuSettingsZ9 is relative to start of Offset26 block
8469
+ RawConv => '$$self{MenuSettingsZ9Offset} = ($val || 0x10000000) + $$self{MenuOffset}; undef', # (ignore if 0)
8470
+ },
8471
+ 0x4411 => {
8472
+ Name => 'Hook5',
8473
+ Condition => '$$self{ShutterMode} eq 96', # C30/C60/C120 jpgs only
8474
+ Hidden => 1,
8475
+ RawConv => 'undef',
8476
+ # account for variable location of menu settings data
8477
+ Hook => '$varSize = $$self{MenuSettingsZ9Offset} - 0x44ec',
8478
+ },
8479
+ 0x44ec => [
8480
+ {
8481
+ Name => 'MenuSettingsZ9',
8482
+ Condition => '$$self{ShutterMode} eq 96 and $$self{FirmwareVersion} lt "03.00"', # C30/C60/C120 jpgs only
8483
+ Format => 'undef[1646]',
8484
+ Notes => 'Firmware versions 2.11 and earlier',
8485
+ SubDirectory => {
8486
+ TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ9',
8487
+ },
8488
+ },
8489
+ {
8490
+ Name => 'MenuSettingsZ9',
8491
+ Notes => 'Firmware versions 3.0 and later',
8492
+ Condition => '$$self{ShutterMode} eq 96', # C30/C60/C120 jpgs only
8493
+ Format => 'undef[1948]',
8494
+ SubDirectory => {
8495
+ TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ9Firmware3',
8496
+ },
8497
+ },
8498
+ ],
8499
+ ### 0x80c5 - OrientationInfo start (Z9 firmware 3.01)
8500
+ 0x80c4 => {
8445
8501
  Name => 'OrientationHook',
8502
+ Condition => '$$self{ShutterMode} ne 96', #not valid for C30/C60/C120
8446
8503
  Hidden => 1,
8447
8504
  RawConv => 'undef',
8448
8505
  # account for variable location of OrientationInfo data
8449
- Hook => '$varSize = $$self{OrientationOffset} - 0xeaeb',
8506
+ Hook => '$varSize = $$self{OrientationOffset} - 0x80c5',
8450
8507
  },
8451
- 0xeaeb => {
8508
+ 0x80c5 => {
8452
8509
  Name => 'RollAngle',
8453
- Format => 'fixed32u',
8510
+ Condition => '$$self{ShutterMode} ne 96', #not valid for C30/C60/C120
8511
+ Format => 'fixed32u',
8454
8512
  Notes => 'converted to degrees of clockwise camera roll',
8455
8513
  ValueConv => '$val <= 180 ? $val : $val - 360',
8456
8514
  ValueConvInv => '$val >= 0 ? $val : $val + 360',
8457
8515
  PrintConv => 'sprintf("%.1f", $val)',
8458
8516
  PrintConvInv => '$val',
8459
8517
  },
8460
- 0xeaef => {
8518
+ 0x80c9 => {
8461
8519
  Name => 'PitchAngle',
8520
+ Condition => '$$self{ShutterMode} ne 96', #not valid for C30/C60/C120
8462
8521
  Format => 'fixed32u',
8463
8522
  Notes => 'converted to degrees of upward camera tilt',
8464
8523
  ValueConv => '$val <= 180 ? $val : $val - 360',
@@ -8466,8 +8525,9 @@ my %nikonFocalConversions = (
8466
8525
  PrintConv => 'sprintf("%.1f", $val)',
8467
8526
  PrintConvInv => '$val',
8468
8527
  },
8469
- 0xeaf3 => {
8528
+ 0x80cd => {
8470
8529
  Name => 'YawAngle',
8530
+ Condition => '$$self{ShutterMode} ne 96', #not valid for C30/C60/C120
8471
8531
  Format => 'fixed32u',
8472
8532
  Notes => 'the camera yaw angle when shooting in portrait orientation',
8473
8533
  ValueConv => '$val <= 180 ? $val : $val - 360',
@@ -8475,25 +8535,27 @@ my %nikonFocalConversions = (
8475
8535
  PrintConv => 'sprintf("%.1f", $val)',
8476
8536
  PrintConvInv => '$val',
8477
8537
  },
8478
- ### 0xeb5f - Offset26 info start (Z9 firmware 1.00)
8479
- 0xeb6f => {
8538
+ ### 0x8139 - Offset26 info start (Z9 firmware 3.01)
8539
+ 0x8149 => {
8480
8540
  Name => 'MenuSettingsZ9Offset',
8541
+ Condition => '$$self{ShutterMode} ne 96', # C30/C60/C120 jpgs handled at 0x4410
8481
8542
  Writable => 0,
8482
8543
  Hidden => 1,
8483
8544
  # offset to MenuSettingsZ9 is relative to start of Offset26 block
8484
- RawConv => '$$self{MenuSettingsZ9Offset} = ($val || 0x10000000) + $$self{Offset26}; undef', # (ignore if 0)
8545
+ RawConv => '$$self{MenuSettingsZ9Offset} = ($val || 0x10000000) + $$self{MenuOffset}; undef', # (ignore if 0)
8485
8546
  },
8486
- 0xeb70 => {
8547
+ 0x814a => {
8487
8548
  Name => 'Hook5',
8549
+ Condition => '$$self{ShutterMode} ne 96', # C30/C60/C120 jpgs handled at 0x4410
8488
8550
  Hidden => 1,
8489
8551
  RawConv => 'undef',
8490
8552
  # account for variable location of menu settings data
8491
- Hook => '$varSize = $$self{MenuSettingsZ9Offset} - 0xec4b',
8553
+ Hook => '$varSize = $$self{MenuSettingsZ9Offset} - 0x8225',
8492
8554
  },
8493
- 0xec4b => [
8555
+ 0x8225 => [
8494
8556
  {
8495
8557
  Name => 'MenuSettingsZ9',
8496
- Condition => '$$self{FirmwareVersion} lt "03.00"',
8558
+ Condition => '$$self{ShutterMode} ne 96 and $$self{FirmwareVersion} lt "03.00"', # C30/C60/C120 jpgs handled at 0x4410
8497
8559
  Format => 'undef[1646]',
8498
8560
  Notes => 'Firmware versions 2.11 and earlier',
8499
8561
  SubDirectory => {
@@ -8503,6 +8565,7 @@ my %nikonFocalConversions = (
8503
8565
  {
8504
8566
  Name => 'MenuSettingsZ9',
8505
8567
  Notes => 'Firmware versions 3.0 and later',
8568
+ Condition => '$$self{ShutterMode} ne 96', # C30/C60/C120 jpgs handled at 0x4410
8506
8569
  Format => 'undef[1948]',
8507
8570
  SubDirectory => {
8508
8571
  TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ9Firmware3',
@@ -8751,34 +8814,34 @@ my %nikonFocalConversions = (
8751
8814
  Name => 'Intervals',
8752
8815
  Format => 'int32u',
8753
8816
  RawConv => '$$self{IntervalShootingIntervals} = $val',
8754
- Condition => '$$self{IntervalShooting} > 0',
8817
+ Condition => '$$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
8755
8818
  },
8756
8819
  192 => {
8757
8820
  Name => 'ShotsPerInterval',
8758
8821
  Format => 'int32u',
8759
8822
  RawConv => '$$self{IntervalShootingShotsPerInterval} = $val',
8760
- Condition => '$$self{IntervalShooting} > 0',
8823
+ Condition => '$$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
8761
8824
  },
8762
8825
  #220 NEFCompression 0=> 'Lossless' 1=> 'High Efficiency*' 4=> 'High Efficientcy'
8763
8826
  232 => {
8764
8827
  Name => 'FocusShiftNumberShots', #1-300
8765
8828
  RawConv => '$$self{FocusShiftNumberShots} = $val',
8766
- Condition => '$$self{FocusShiftShooting} > 0',
8829
+ Condition => '$$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
8767
8830
  },
8768
8831
  236 => {
8769
8832
  Name => 'FocusShiftStepWidth', #1(Narrow) to 10 (Wide)
8770
- Condition => '$$self{FocusShiftShooting} > 0',
8833
+ Condition => '$$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
8771
8834
  },
8772
8835
  240 => {
8773
8836
  Name => 'FocusShiftInterval',
8774
- Condition => '$$self{FocusShiftShooting} > 0',
8837
+ Condition => '$$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
8775
8838
  PrintConv => '$val == 1? "1 Second" : sprintf("%.0f Seconds",$val)',
8776
8839
  },
8777
8840
  244 => {
8778
8841
  Name => 'FocusShiftExposureLock',
8779
8842
  Unknown => 1,
8780
8843
  PrintConv => \%offOn,
8781
- Condition => '$$self{FocusShiftShooting} > 0',
8844
+ Condition => '$$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
8782
8845
  },
8783
8846
  274 => { Name => 'PhotoShootingMenuBank', PrintConv => \%banksZ9 },
8784
8847
  276 => { Name => 'ExtendedMenuBanks', PrintConv => \%offOn }, #single tag from both Photo & Video menus
@@ -8938,12 +9001,17 @@ my %nikonFocalConversions = (
8938
9001
  1636 => { Name => 'USBPowerDelivery', PrintConv => \%offOn, Unknown => 1 },
8939
9002
  1645 => { Name => 'SensorShield', PrintConv => { 0 => 'Stays Open', 1 => 'Closes' }, Unknown => 1 },
8940
9003
  );
9004
+
8941
9005
  %Image::ExifTool::Nikon::MenuSettingsZ9Firmware3 = ( #starts at Offset26 + 248
8942
9006
  %binaryDataAttrs,
8943
9007
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
8944
9008
  DATAMEMBER => [ 154, 204, 208, 248, 444, 554 ],
8945
9009
  IS_SUBDIR => [ 847 ],
8946
9010
  NOTES => 'These tags are used by the Z9 firmware 3.00.',
9011
+ 72 => {
9012
+ Name => 'HighFrameRate', #CH and C30/C60/C120 but not CL
9013
+ PrintConv => \%highFrameRateZ9,
9014
+ },
8947
9015
  154 => {
8948
9016
  Name => 'MultipleExposureMode',
8949
9017
  RawConv => '$$self{MultipleExposureMode} = $val',
@@ -8954,33 +9022,33 @@ my %nikonFocalConversions = (
8954
9022
  Name => 'Intervals',
8955
9023
  Format => 'int32u',
8956
9024
  RawConv => '$$self{IntervalShootingIntervals} = $val',
8957
- Condition => '$$self{IntervalShooting} > 0',
9025
+ Condition => '$$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
8958
9026
  },
8959
9027
  208 => {
8960
9028
  Name => 'ShotsPerInterval',
8961
9029
  Format => 'int32u',
8962
9030
  RawConv => '$$self{IntervalShootingShotsPerInterval} = $val',
8963
- Condition => '$$self{IntervalShooting} > 0',
9031
+ Condition => '$$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
8964
9032
  },
8965
9033
  248 => {
8966
9034
  Name => 'FocusShiftNumberShots', #1-300
8967
9035
  RawConv => '$$self{FocusShiftNumberShots} = $val',
8968
- Condition => '$$self{FocusShiftShooting} > 0',
9036
+ Condition => '$$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
8969
9037
  },
8970
9038
  252 => {
8971
9039
  Name => 'FocusShiftStepWidth', #1(Narrow) to 10 (Wide)
8972
- Condition => '$$self{FocusShiftShooting} > 0',
9040
+ Condition => '$$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
8973
9041
  },
8974
9042
  256 => {
8975
9043
  Name => 'FocusShiftInterval',
8976
- Condition => '$$self{FocusShiftShooting} > 0',
9044
+ Condition => '$$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
8977
9045
  PrintConv => '$val == 1? "1 Second" : sprintf("%.0f Seconds",$val)',
8978
9046
  },
8979
9047
  260 => {
8980
9048
  Name => 'FocusShiftExposureLock',
8981
9049
  Unknown => 1,
8982
9050
  PrintConv => \%offOn,
8983
- Condition => '$$self{FocusShiftShooting} > 0',
9051
+ Condition => '$$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
8984
9052
  },
8985
9053
  290 => { Name => 'PhotoShootingMenuBank', PrintConv => \%banksZ9 },
8986
9054
  292 => { Name => 'ExtendedMenuBanks', PrintConv => \%offOn }, # single tag from both Photo & Video menus
@@ -9132,340 +9200,33 @@ my %nikonFocalConversions = (
9132
9200
  Name => 'FocusShiftAutoReset',
9133
9201
  Unknown => 1,
9134
9202
  PrintConv => \%offOn,
9135
- Condition => '$$self{FocusShiftShooting} > 0',
9136
- },
9137
- #1824 ReleaseTimingIndicatorTypeADelay CSd14-b 0 => '1/200' ... 15 => '1/6'
9138
- #1826 VerticalISOButton CSf2
9139
- #1828 ExposureCompensationButton CSf2
9140
- #1830 ISOButton CSf2
9141
- #1890 ViewModeShowEffectsOfSettings CSd9-a 0=>'Always', 1=> 'Only When Flash Not Used'
9142
- #1892 DispButton CSf2
9143
- #1936 FocusPointDisplayOption3DTrackingColor CSa11-d 0=> 'White', 1= => 'Red'
9144
- );
9145
-
9146
- # Flash information (ref JD)
9147
- %Image::ExifTool::Nikon::FlashInfo0100 = (
9148
- %binaryDataAttrs,
9149
- DATAMEMBER => [ 9.2, 15, 16 ],
9150
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
9151
- NOTES => q{
9152
- These tags are used by the D2H, D2Hs, D2X, D2Xs, D50, D70, D70s, D80 and
9153
- D200.
9154
- },
9155
- # NOTE: Must set ByteOrder in SubDirectory if any multi-byte integer tags added
9156
- 0 => {
9157
- Name => 'FlashInfoVersion',
9158
- Format => 'string[4]',
9159
- Writable => 0,
9203
+ Condition => '$$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
9160
9204
  },
9161
- 4 => { #PH
9162
- Name => 'FlashSource',
9205
+ 1810 => { #CSd4-a
9206
+ Name => 'PreReleaseBurstLength',
9163
9207
  PrintConv => {
9164
9208
  0 => 'None',
9165
- 1 => 'External',
9166
- 2 => 'Internal',
9167
- },
9168
- },
9169
- # 5 - values: 46,48,50,54,78
9170
- 6 => {
9171
- Format => 'int8u[2]',
9172
- Name => 'ExternalFlashFirmware',
9173
- SeparateTable => 'FlashFirmware',
9174
- PrintConv => \%flashFirmware,
9175
- },
9176
- 8 => {
9177
- Name => 'ExternalFlashFlags',
9178
- PrintConv => { 0 => '(none)',
9179
- BITMASK => {
9180
- 0 => 'Fired', #28
9181
- 2 => 'Bounce Flash', #PH
9182
- 4 => 'Wide Flash Adapter',
9183
- 5 => 'Dome Diffuser', #28
9184
- },
9209
+ 1 => '0.3 Sec',
9210
+ 2 => '0.5 Sec',
9211
+ 3 => '1 Sec',
9185
9212
  },
9186
9213
  },
9187
- 9.1 => {
9188
- Name => 'FlashCommanderMode',
9189
- Mask => 0x80,
9190
- PrintConv => { 0 => 'Off', 1 => 'On' },
9191
- },
9192
- 9.2 => {
9193
- Name => 'FlashControlMode',
9194
- Mask => 0x7f,
9195
- DataMember => 'FlashControlMode',
9196
- RawConv => '$$self{FlashControlMode} = $val',
9197
- PrintConv => \%flashControlMode,
9198
- SeparateTable => 'FlashControlMode',
9199
- },
9200
- 10 => [
9201
- {
9202
- Name => 'FlashOutput',
9203
- Condition => '$$self{FlashControlMode} >= 0x06',
9204
- ValueConv => '2 ** (-$val/6)',
9205
- ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
9206
- PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
9207
- PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
9208
- },
9209
- {
9210
- Name => 'FlashCompensation',
9211
- Format => 'int8s',
9212
- Priority => 0,
9213
- ValueConv => '-$val/6',
9214
- ValueConvInv => '-6 * $val',
9215
- PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)',
9216
- PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
9217
- },
9218
- ],
9219
- 11 => {
9220
- Name => 'FlashFocalLength',
9221
- RawConv => '$val ? $val : undef',
9222
- PrintConv => '"$val mm"',
9223
- PrintConvInv => '$val=~/(\d+)/; $1 || 0',
9224
- },
9225
- 12 => {
9226
- Name => 'RepeatingFlashRate',
9227
- RawConv => '$val ? $val : undef',
9228
- PrintConv => '"$val Hz"',
9229
- PrintConvInv => '$val=~/(\d+)/; $1 || 0',
9230
- },
9231
- 13 => {
9232
- Name => 'RepeatingFlashCount',
9233
- RawConv => '$val ? $val : undef',
9234
- },
9235
- 14 => { #PH
9236
- Name => 'FlashGNDistance',
9237
- SeparateTable => 1,
9238
- PrintConv => \%flashGNDistance,
9239
- },
9240
- 15 => {
9241
- Name => 'FlashGroupAControlMode',
9242
- Mask => 0x0f,
9243
- DataMember => 'FlashGroupAControlMode',
9244
- RawConv => '$$self{FlashGroupAControlMode} = $val',
9245
- PrintConv => \%flashControlMode,
9246
- SeparateTable => 'FlashControlMode',
9247
- },
9248
- 16 => {
9249
- Name => 'FlashGroupBControlMode',
9250
- Mask => 0x0f,
9251
- DataMember => 'FlashGroupBControlMode',
9252
- RawConv => '$$self{FlashGroupBControlMode} = $val',
9253
- PrintConv => \%flashControlMode,
9254
- SeparateTable => 'FlashControlMode',
9255
- },
9256
- 17 => [
9257
- {
9258
- Name => 'FlashGroupAOutput',
9259
- Condition => '$$self{FlashGroupAControlMode} >= 0x06',
9260
- ValueConv => '2 ** (-$val/6)',
9261
- ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
9262
- PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
9263
- PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
9264
- },
9265
- {
9266
- Name => 'FlashGroupACompensation',
9267
- Format => 'int8s',
9268
- ValueConv => '-$val/6',
9269
- ValueConvInv => '-6 * $val',
9270
- PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
9271
- PrintConvInv => '$val',
9272
- },
9273
- ],
9274
- 18 => [
9275
- {
9276
- Name => 'FlashGroupBOutput',
9277
- Condition => '$$self{FlashGroupBControlMode} >= 0x06',
9278
- ValueConv => '2 ** (-$val/6)',
9279
- ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
9280
- PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
9281
- PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
9282
- },
9283
- {
9284
- Name => 'FlashGroupBCompensation',
9285
- Format => 'int8s',
9286
- ValueConv => '-$val/6',
9287
- ValueConvInv => '-6 * $val',
9288
- PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
9289
- PrintConvInv => '$val',
9290
- },
9291
- ],
9292
- );
9293
-
9294
- # Flash information for D40, D40x, D3 and D300 (ref JD)
9295
- %Image::ExifTool::Nikon::FlashInfo0102 = (
9296
- %binaryDataAttrs,
9297
- DATAMEMBER => [ 9.2, 16.1, 17.1, 17.2 ],
9298
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
9299
- NOTES => q{
9300
- These tags are used by the D3 (firmware 1.x), D40, D40X, D60 and D300
9301
- (firmware 1.00).
9302
- },
9303
- # NOTE: Must set ByteOrder in SubDirectory if any multi-byte integer tags added
9304
- 0 => {
9305
- Name => 'FlashInfoVersion',
9306
- Format => 'string[4]',
9307
- Writable => 0,
9308
- },
9309
- 4 => { #PH
9310
- Name => 'FlashSource',
9214
+ 1812 => { #CSd4-b
9215
+ Name => 'PostReleaseBurstLength',
9311
9216
  PrintConv => {
9312
- 0 => 'None',
9313
- 1 => 'External',
9314
- 2 => 'Internal',
9217
+ 0 => '1 Sec',
9218
+ 1 => '2 Sec',
9219
+ 2 => '3 Sec',
9220
+ 3 => 'Max',
9315
9221
  },
9316
9222
  },
9317
- # 5 - values: 46,48,50,54,78
9318
- 6 => {
9319
- Format => 'int8u[2]',
9320
- Name => 'ExternalFlashFirmware',
9321
- SeparateTable => 'FlashFirmware',
9322
- PrintConv => \%flashFirmware,
9323
- },
9324
- 8 => {
9325
- Name => 'ExternalFlashFlags',
9326
- PrintConv => { BITMASK => {
9327
- 0 => 'Fired', #28
9328
- 2 => 'Bounce Flash', #PH
9329
- 4 => 'Wide Flash Adapter',
9330
- 5 => 'Dome Diffuser', #28
9331
- }},
9332
- },
9333
- 9.1 => {
9334
- Name => 'FlashCommanderMode',
9335
- Mask => 0x80,
9336
- PrintConv => { 0 => 'Off', 1 => 'On' },
9337
- },
9338
- 9.2 => {
9339
- Name => 'FlashControlMode',
9340
- Mask => 0x7f,
9341
- DataMember => 'FlashControlMode',
9342
- RawConv => '$$self{FlashControlMode} = $val',
9343
- PrintConv => \%flashControlMode,
9344
- SeparateTable => 'FlashControlMode',
9345
- },
9346
- 10 => [
9347
- {
9348
- Name => 'FlashOutput',
9349
- Condition => '$$self{FlashControlMode} >= 0x06',
9350
- ValueConv => '2 ** (-$val/6)',
9351
- ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
9352
- PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
9353
- PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
9354
- },
9355
- {
9356
- Name => 'FlashCompensation',
9357
- # this is the compensation from the camera (0x0012) for "Built-in" FlashType, or
9358
- # the compensation from the external unit (0x0017) for "Optional" FlashType - PH
9359
- Format => 'int8s',
9360
- Priority => 0,
9361
- ValueConv => '-$val/6',
9362
- ValueConvInv => '-6 * $val',
9363
- PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)',
9364
- PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
9365
- },
9366
- ],
9367
- 12 => {
9368
- Name => 'FlashFocalLength',
9369
- RawConv => '$val ? $val : undef',
9370
- PrintConv => '"$val mm"',
9371
- PrintConvInv => '$val=~/(\d+)/; $1 || 0',
9372
- },
9373
- 13 => {
9374
- Name => 'RepeatingFlashRate',
9375
- RawConv => '$val ? $val : undef',
9376
- PrintConv => '"$val Hz"',
9377
- PrintConvInv => '$val=~/(\d+)/; $1 || 0',
9378
- },
9379
- 14 => {
9380
- Name => 'RepeatingFlashCount',
9381
- RawConv => '$val ? $val : undef',
9382
- },
9383
- 15 => { #PH
9384
- Name => 'FlashGNDistance',
9385
- SeparateTable => 1,
9386
- PrintConv => \%flashGNDistance,
9387
- },
9388
- 16.1 => {
9389
- Name => 'FlashGroupAControlMode',
9390
- Mask => 0x0f,
9391
- Notes => 'note: group A tags may apply to the built-in flash settings for some models',
9392
- DataMember => 'FlashGroupAControlMode',
9393
- RawConv => '$$self{FlashGroupAControlMode} = $val',
9394
- PrintConv => \%flashControlMode,
9395
- SeparateTable => 'FlashControlMode',
9396
- },
9397
- 17.1 => {
9398
- Name => 'FlashGroupBControlMode',
9399
- Mask => 0xf0,
9400
- Notes => 'note: group B tags may apply to group A settings for some models',
9401
- DataMember => 'FlashGroupBControlMode',
9402
- RawConv => '$$self{FlashGroupBControlMode} = $val',
9403
- PrintConv => \%flashControlMode,
9404
- SeparateTable => 'FlashControlMode',
9405
- },
9406
- 17.2 => { #PH
9407
- Name => 'FlashGroupCControlMode',
9408
- Mask => 0x0f,
9409
- Notes => 'note: group C tags may apply to group B settings for some models',
9410
- DataMember => 'FlashGroupCControlMode',
9411
- RawConv => '$$self{FlashGroupCControlMode} = $val',
9412
- PrintConv => \%flashControlMode,
9413
- SeparateTable => 'FlashControlMode',
9414
- },
9415
- 18 => [
9416
- {
9417
- Name => 'FlashGroupAOutput',
9418
- Condition => '$$self{FlashGroupAControlMode} >= 0x06',
9419
- ValueConv => '2 ** (-$val/6)',
9420
- ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
9421
- PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
9422
- PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
9423
- },
9424
- {
9425
- Name => 'FlashGroupACompensation',
9426
- Format => 'int8s',
9427
- ValueConv => '-$val/6',
9428
- ValueConvInv => '-6 * $val',
9429
- PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
9430
- PrintConvInv => '$val',
9431
- },
9432
- ],
9433
- 19 => [
9434
- {
9435
- Name => 'FlashGroupBOutput',
9436
- Condition => '$$self{FlashGroupBControlMode} >= 0x60',
9437
- ValueConv => '2 ** (-$val/6)',
9438
- ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
9439
- PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
9440
- PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
9441
- },
9442
- {
9443
- Name => 'FlashGroupBCompensation',
9444
- Format => 'int8s',
9445
- ValueConv => '-$val/6',
9446
- ValueConvInv => '-6 * $val',
9447
- PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
9448
- PrintConvInv => '$val',
9449
- },
9450
- ],
9451
- 20 => [ #PH
9452
- {
9453
- Name => 'FlashGroupCOutput',
9454
- Condition => '$$self{FlashGroupCControlMode} >= 0x06',
9455
- ValueConv => '2 ** (-$val/6)',
9456
- ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
9457
- PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
9458
- PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
9459
- },
9460
- {
9461
- Name => 'FlashGroupCCompensation',
9462
- Format => 'int8s',
9463
- ValueConv => '-$val/6',
9464
- ValueConvInv => '-6 * $val',
9465
- PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
9466
- PrintConvInv => '$val',
9467
- },
9468
- ],
9223
+ #1824 ReleaseTimingIndicatorTypeADelay CSd14-b 0 => '1/200' ... 15 => '1/6'
9224
+ #1826 VerticalISOButton CSf2
9225
+ #1828 ExposureCompensationButton CSf2
9226
+ #1830 ISOButton CSf2
9227
+ #1890 ViewModeShowEffectsOfSettings CSd9-a 0=>'Always', 1=> 'Only When Flash Not Used'
9228
+ #1892 DispButton CSf2
9229
+ #1936 FocusPointDisplayOption3DTrackingColor CSa11-d 0=> 'White', 1= => 'Red'
9469
9230
  );
9470
9231
 
9471
9232
  # Flash information (ref JD)
@@ -10749,6 +10510,21 @@ my %nikonFocalConversions = (
10749
10510
  },
10750
10511
  );
10751
10512
 
10513
+ # MakerNotes0x56 - burst info for Z9
10514
+ %Image::ExifTool::Nikon::MakerNotes0x56 = (
10515
+ %binaryDataAttrs,
10516
+ GROUPS => { 0 => 'MakerNotes' },
10517
+ 0 => {
10518
+ Name => 'FirmwareVersion',
10519
+ Format => 'string[4]',
10520
+ Writable => 0,
10521
+ },
10522
+ 4 => {
10523
+ Name => 'BurstGroupID', #all frames shot within a burst (using CL/CH/C30/C60/C120) will share the same BurstGroupID. Value will be > 0 for all images shot in continuous modes. 0 for single-frame.
10524
+ Format => 'int16u'
10525
+ },
10526
+ );
10527
+
10752
10528
  # extra info found in IFD0 of NEF files (ref PH, Z6/Z7)
10753
10529
  %Image::ExifTool::Nikon::NEFInfo = (
10754
10530
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
@@ -11894,6 +11670,7 @@ sub PrintAFPointsLeftRight($$)
11894
11670
  {
11895
11671
  my ($col, $ncol) = @_;
11896
11672
  my $center = 1 + ($ncol + 1)/2;
11673
+ return 'n/a' if $col == 0; #out of focus
11897
11674
  return 'C' if $col == $center;
11898
11675
  return sprintf('%d', $center - $col) . 'L of Center' if $col < $center;
11899
11676
  return sprintf('%d', $col - $center) . 'R of Center' if $col > $center;
@@ -11907,6 +11684,7 @@ sub PrintAFPointsUpDown($$)
11907
11684
  {
11908
11685
  my ($row, $nrow) = @_;
11909
11686
  my $center = 1 + ($nrow + 1)/2;
11687
+ return 'n/a' if $row == 0; #out of focus
11910
11688
  return 'C' if $row == $center;
11911
11689
  return sprintf('%d', $center - $row) . 'U from Center' if $row < $center;
11912
11690
  return sprintf('%d', $row - $center) . 'D from Center' if $row > $center;