exiftool_vendored 12.55.0 → 12.56.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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;