exiftool_vendored 12.35.0 → 12.36.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1046,7 +1046,9 @@ my %cropHiSpeed = ( #IB
1046
1046
  10 => '1.3x Movie Crop', #36 (D4/D500)
1047
1047
  11 => 'FX Uncropped',
1048
1048
  12 => 'DX Uncropped',
1049
- 15 => '1.5x Movie Crop', #36 (D4/D500)
1049
+ 13 => '2.8x Movie Crop', #28 (D5/D6) 5584/1936
1050
+ 14 => '1.4x Movie Crop', #28 (D5/D6) 5584/3856
1051
+ 15 => '1.5x Movie Crop', #36 (D4/D500) 5600/3872
1050
1052
  17 => '1:1 Crop',
1051
1053
  OTHER => sub {
1052
1054
  my ($val, $inv, $conv) = @_;
@@ -1058,7 +1060,16 @@ my %cropHiSpeed = ( #IB
1058
1060
  },
1059
1061
  );
1060
1062
 
1063
+ my %flashGroupOptionsMode = (
1064
+ 0 => 'TTL',
1065
+ 1 => 'Manual',
1066
+ 2 => 'Auto',
1067
+ 3 => 'Off',
1068
+ );
1069
+
1070
+ my %noYes = ( 0 => 'No' , 1 => 'Yes', );
1061
1071
  my %offOn = ( 0 => 'Off', 1 => 'On' );
1072
+ my %onOff = ( 0 => 'On', 1 => 'Off' );
1062
1073
 
1063
1074
  # common attributes for writable BinaryData directories
1064
1075
  my %binaryDataAttrs = (
@@ -1465,6 +1476,8 @@ my %binaryDataAttrs = (
1465
1476
  Name => 'ColorTemperatureAuto',
1466
1477
  Writable => 'int16u',
1467
1478
  },
1479
+ #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)
1480
+ #0x005e #28 possibly DiffractionCompensation block? Certainly offset 0x04 within block contains tag DiffractionCompensation
1468
1481
  0x0080 => { Name => 'ImageAdjustment', Writable => 'string' },
1469
1482
  0x0081 => { Name => 'ToneComp', Writable => 'string' }, #2
1470
1483
  0x0082 => { Name => 'AuxiliaryLens', Writable => 'string' },
@@ -1862,7 +1875,7 @@ my %binaryDataAttrs = (
1862
1875
  SubDirectory => {
1863
1876
  TagTable => 'Image::ExifTool::Nikon::ShotInfoD6',
1864
1877
  DecryptStart => 4,
1865
- DecryptLen => 0xc21a + 12,
1878
+ DecryptLen => 0xc292 + 720, # thru decoded parts of Offset 32
1866
1879
  ByteOrder => 'LittleEndian',
1867
1880
  },
1868
1881
  },
@@ -1882,7 +1895,7 @@ my %binaryDataAttrs = (
1882
1895
  SubDirectory => {
1883
1896
  TagTable => 'Image::ExifTool::Nikon::ShotInfoZ7_2',
1884
1897
  DecryptStart => 4,
1885
- DecryptLen => 0xce32 + 12,
1898
+ DecryptLen => 0xcea6 + 1050, # thru decoded parts of Offset31
1886
1899
  ByteOrder => 'LittleEndian',
1887
1900
  },
1888
1901
  },
@@ -2389,6 +2402,10 @@ my %binaryDataAttrs = (
2389
2402
  Flags => [ 'Binary', 'Protected' ],
2390
2403
  SubDirectory => { TagTable => 'Image::ExifTool::Nikon::PictureControl' },
2391
2404
  },
2405
+ 0x00bf => {
2406
+ Name => 'SilentPhotography',
2407
+ PrintConv => \%offOn,
2408
+ },
2392
2409
  0x00c3 => {
2393
2410
  Name => 'BarometerInfo',
2394
2411
  SubDirectory => {
@@ -6049,6 +6066,18 @@ my %nikonFocalConversions = (
6049
6066
  3 => 'Rotate 180',
6050
6067
  },
6051
6068
  },
6069
+ 0x0d0 => {
6070
+ Name => 'Interval',
6071
+ # prior version of the d% firmware do not support this tag, nor does the D500 (at least thru firmware 1.3)
6072
+ Condition => '$$self{Model} eq "NIKON D5" and $$self{FirmwareVersion} ge "1.40"',
6073
+ PrintConv => '$val > 0 ? sprintf("%.0f", $val) : ""',
6074
+ },
6075
+ 0x0d4 => {
6076
+ Name => 'IntervalFrame',
6077
+ # prior version of the d% firmware do not support this tag, nor does the D500 (at least thru firmware 1.3)
6078
+ Condition => '$$self{Model} eq "NIKON D5" and $$self{FirmwareVersion} ge "1.40"',
6079
+ PrintConv => '$val > 0 ? sprintf("%.0f", $val) : ""',
6080
+ },
6052
6081
  0x05e2 => {
6053
6082
  Name => 'FlickerReductionIndicator',
6054
6083
  Mask => 0x01,
@@ -6467,7 +6496,7 @@ my %nikonFocalConversions = (
6467
6496
  WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted,
6468
6497
  CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
6469
6498
  VARS => { ID_LABEL => 'Index' },
6470
- DATAMEMBER => [ 0x9c, 0xc219 ],
6499
+ DATAMEMBER => [ 0x30, 0x60, 0x9c, 0xa4, 0x75e7, 0x760c, 0x7610, 0xc219, 0xc292, 0xc40e, 0xc412, 0xc4a6, 0xc4be ],
6471
6500
  WRITABLE => 1,
6472
6501
  FIRST_ENTRY => 0,
6473
6502
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
@@ -6477,6 +6506,11 @@ my %nikonFocalConversions = (
6477
6506
  Format => 'string[4]',
6478
6507
  Writable => 0,
6479
6508
  },
6509
+ 0x04 => {
6510
+ Name => 'FirmwareVersion',
6511
+ Format => 'string[8]',
6512
+ Writable => 0,
6513
+ },
6480
6514
  0x24 => {
6481
6515
  Name => 'NumberOffsets', # (number of entries in offset table. offsets are from start of ShotInfo data)
6482
6516
  DataMember => 'NumberOffsets',
@@ -6484,6 +6518,22 @@ my %nikonFocalConversions = (
6484
6518
  Writable => 0,
6485
6519
  Hidden => 1,
6486
6520
  },
6521
+ 0x30 => {
6522
+ Name => 'Offset3',
6523
+ DataMember => 'Offset3',
6524
+ Format => 'int32u',
6525
+ Writable => 0,
6526
+ Hidden => 1,
6527
+ RawConv => '$$self{Offset3} = $val || 0x10000000; undef', # (ignore if 0)
6528
+ },
6529
+ 0x60 => {
6530
+ Name => 'Offset15',
6531
+ DataMember => 'Offset15',
6532
+ Format => 'int32u',
6533
+ Writable => 0,
6534
+ Hidden => 1,
6535
+ RawConv => '$$self{Offset15} = $val || 0x10000000; undef', # (ignore if 0)
6536
+ },
6487
6537
  0x9c => {
6488
6538
  Name => 'OrientationOffset',
6489
6539
  DataMember => 'OrientationOffset',
@@ -6492,15 +6542,49 @@ my %nikonFocalConversions = (
6492
6542
  Hidden => 1,
6493
6543
  RawConv => '$$self{OrientationOffset} = $val || 0x10000000; undef', # (ignore if 0)
6494
6544
  },
6495
- ### 0xc21a - OrientationInfo start (D6 firmware 1.00)
6496
- 0xc219 => {
6545
+ 0xa4 => {
6546
+ Name => 'Offset32',
6547
+ DataMember => 'Offset32',
6548
+ Format => 'int32u',
6549
+ Writable => 0,
6550
+ Hidden => 1,
6551
+ RawConv => '$$self{Offset32} = $val || 0x10000000; undef', # (ignore if 0)
6552
+ },
6553
+ ### 0x75e8 - Offset3 info start (D6 firmware 1.33)
6554
+ 0x75e7 => {
6497
6555
  Name => 'Hook1',
6498
6556
  Hidden => 1,
6499
6557
  RawConv => 'undef',
6558
+ # account for variable location of Offset5 data
6559
+ Hook => '$varSize = $$self{Offset3} - 0x75e8',
6560
+ },
6561
+ 0x760c => {
6562
+ Name => 'IntervalShooting',
6563
+ RawConv => '$$self{IntervalShooting} = $val',
6564
+ Format => 'int16u',
6565
+ PrintConv => q{
6566
+ return 'Off' if $val == 0 ;
6567
+ my $i = sprintf("Interval %.0f of %.0f",$val, $$self{IntervalShootingIntervals}); #something like "Interval 1 of 3"
6568
+ my $f = $$self{IntervalShootingShotsPerInterval} > 1 ? sprintf(" Frame %.0f of %.0f",$$self{IntervalFrame}, $$self{IntervalShootingShotsPerInterval}): '' ; #something like "Frame 1 of 3" or blank
6569
+ return "On: $i$f"
6570
+ #$val == 0 ? 'Off' : sprintf("On: Interval %.0f of %.0f Frame %.0f of %.0f",$val, $$self{IntervalShootingIntervals}, $$self{IntervalFrame}, $$self{IntervalShootingShotsPerInterval}),
6571
+ },
6572
+ },
6573
+ 0x7610 => {
6574
+ Name => 'IntervalFrame',
6575
+ RawConv => '$$self{IntervalFrame} = $val',
6576
+ Condition => '$$self{IntervalShooting} > 0',
6577
+ Format => 'int16u',
6578
+ Hidden => 1,
6579
+ },
6580
+ ### 0xc21a - OrientationInfo start (D6 firmware 1.00) (0xc952 for firmware 1.33)
6581
+ 0xc219 => {
6582
+ Name => 'Hook2',
6583
+ Hidden => 1,
6584
+ RawConv => 'undef',
6500
6585
  # account for variable location of OrientationInfo data
6501
6586
  Hook => '$varSize = $$self{OrientationOffset} - 0xc21a',
6502
6587
  },
6503
-
6504
6588
  0xc21a => {
6505
6589
  Name => 'RollAngle',
6506
6590
  Format => 'fixed32u',
@@ -6528,7 +6612,136 @@ my %nikonFocalConversions = (
6528
6612
  PrintConv => 'sprintf("%.1f", $val)',
6529
6613
  PrintConvInv => '$val',
6530
6614
  },
6531
- # note: DecryptLen currently set to 0xc21a + 12
6615
+ ### 0xc9c6 - Offset32 start (D6 firmware 1.33)
6616
+ 0xc292 => {
6617
+ Name => 'Hook3',
6618
+ Hidden => 1,
6619
+ RawConv => 'undef',
6620
+ # account for variable location of data
6621
+ Hook => '$varSize = $$self{Offset32} - 0xc292',
6622
+ },
6623
+ 0xc40e => {
6624
+ Name => 'Intervals',
6625
+ Format => 'int32u',
6626
+ RawConv => '$$self{IntervalShootingIntervals} = $val',
6627
+ Condition => '$$self{IntervalShooting} > 0',
6628
+ },
6629
+ 0xc412 => {
6630
+ Name => 'ShotsPerInterval',
6631
+ Format => 'int32u',
6632
+ RawConv => '$$self{IntervalShootingShotsPerInterval} = $val',
6633
+ Condition => '$$self{IntervalShooting} > 0',
6634
+ },
6635
+ 0xc416 => {
6636
+ Name => 'IntervalExposureSmoothing',
6637
+ Condition => '$$self{IntervalShooting} > 0',
6638
+ Format => 'int8u',
6639
+ PrintConv => \%offOn,
6640
+ },
6641
+ 0xc418 => {
6642
+ Name => 'IntervalPriority',
6643
+ Condition => '$$self{IntervalShooting} > 0',
6644
+ Format => 'int8u',
6645
+ PrintConv => \%offOn,
6646
+ },
6647
+ 0xc43a => {
6648
+ Name => 'FocusShiftNumberShots',
6649
+ },
6650
+ 0xc43e => {
6651
+ Name => 'FocusShiftStepWidth',
6652
+ },
6653
+ 0xc442 => {
6654
+ Name => 'FocusShiftInterval',
6655
+ PrintConv => '$val == 1? "1 Second" : sprintf("%.0f Seconds",$val)',
6656
+ },
6657
+ 0xc446 => {
6658
+ Name => 'FocusShiftExposureLock',
6659
+ PrintConv => \%offOn,
6660
+ },
6661
+ #0xc49c => HighISONoiseReduction
6662
+ 0xc4a0 => {
6663
+ Name => 'DiffractionCompensation',
6664
+ Format => 'int8u',
6665
+ PrintConv => \%offOn,
6666
+ },
6667
+ #0xc4a1 => {Name => 'FlickerReductionShooting',}, #redundant with tag in NikonSettings
6668
+ 0xc4a6 => {
6669
+ Name => 'FlashControlMode', #this and nearby tag values for flash may be set from either the Photo Shooting Menu or using the Flash unit menu
6670
+ RawConv => '$$self{FlashControlMode} = $val',
6671
+ PrintConv => {
6672
+ 0 => 'TTL',
6673
+ 1 => 'Auto External Flash',
6674
+ 2 => 'GN (distance priority)',
6675
+ 3 => 'Manual',
6676
+ 4 => 'Repeating Flash',
6677
+ },
6678
+ },
6679
+ 0xc4ac => {
6680
+ Name => 'FlashGNDistance',
6681
+ Condition => '$$self{FlashControlMode} == 2',
6682
+ Unknown => 1,
6683
+ ValueConv => '$val + 3',
6684
+ PrintConv => \%flashGNDistance,
6685
+ },
6686
+ 0xc4b0 => {
6687
+ Name => 'FlashOutput', #range[0,24] with 0=>Full; 1=>50%; then decreasing flash power in 1/3 stops to 0.39% (1/256 full power). #also found in FlashInfoUnknown at offset 0x0a (with different mappings)
6688
+ Condition => '$$self{FlashControlMode} >= 3',
6689
+ Unknown => 1,
6690
+ ValueConv => '2 ** (-$val/3)',
6691
+ ValueConvInv => '$val>0 ? -3*log($val)/log(2) : 0',
6692
+ PrintConv => '$val>0.99 ? "Full" : sprintf("%.1f%%",$val*100)',
6693
+ PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
6694
+ },
6695
+ 0xc4ba => {
6696
+ Name => 'FlashRemoteControl',
6697
+ Unknown => 1,
6698
+ PrintConv => {
6699
+ 0 => 'Group',
6700
+ 1 => 'Quick Wireless',
6701
+ 2 => 'Remote Repeating',
6702
+ },
6703
+ },
6704
+ 0xc4be => {
6705
+ Name => 'FlashMasterControlMode', #tag name chosen for compatibility with those found in FlashInfo0102 & FlashInfo0103
6706
+ RawConv => '$$self{FlashGroupOptionsMasterMode} = $val',
6707
+ PrintConv => \%flashGroupOptionsMode,
6708
+ },
6709
+ 0xc4c0 => {
6710
+ Name => 'FlashMasterCompensation',
6711
+ Unknown => 1,
6712
+ Format => 'int8s',
6713
+ Condition => '$$self{FlashGroupOptionsMasterMode} != 3', #other than 'Off'
6714
+ ValueConv => '$val/6',
6715
+ ValueConvInv => '6 * $val',
6716
+ PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
6717
+ PrintConvInv => '$val',
6718
+ },
6719
+ 0xc4c4 => {
6720
+ Name => 'FlashMasterOutput',
6721
+ Unknown => 1,
6722
+ Condition => '$$self{FlashGroupOptionsMasterMode} == 1', #only for Mode=M
6723
+ ValueConv => '2 ** (-$val/3)',
6724
+ ValueConvInv => '$val>0 ? -3*log($val)/log(2) : 0',
6725
+ PrintConv => '$val>0.99 ? "Full" : sprintf("%.1f%%",$val*100)',
6726
+ PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
6727
+ },
6728
+ 0xc4c6 => {
6729
+ Name => 'FlashWirelessOption',
6730
+ Unknown => 1,
6731
+ PrintConv => {
6732
+ 0 => 'Optical AWL',
6733
+ 1 => 'Off',
6734
+ },
6735
+ },
6736
+ 0xc55c => {
6737
+ Name => 'MovieType',
6738
+ Unknown => 1,
6739
+ PrintConv => {
6740
+ 0 => 'MOV',
6741
+ 1 => 'MP4',
6742
+ },
6743
+ },
6744
+ # note: DecryptLen currently set to 0xc9c6 + 720
6532
6745
  );
6533
6746
 
6534
6747
  # shot information for the D610 firmware 1.00 (encrypted) - ref PH
@@ -7299,7 +7512,7 @@ my %nikonFocalConversions = (
7299
7512
  Format => 'undef[56]',
7300
7513
  SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsD4' },
7301
7514
  },
7302
- # 0x1978 => { #this decode works, but involves more bits than should be necessary
7515
+ # 0x1978 => { # this decode works, but involves more bits than should be necessary
7303
7516
  # Name => 'ShutterTrigger',
7304
7517
  # Mask => 0xff,
7305
7518
  # PrintConv => {
@@ -7354,7 +7567,8 @@ my %nikonFocalConversions = (
7354
7567
  WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted,
7355
7568
  CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
7356
7569
  VARS => { ID_LABEL => 'Index' },
7357
- DATAMEMBER => [ 0x04, 0x0e, 0x18, 0x38, 0x98, 0x7eff, 0xce31 ],
7570
+ DATAMEMBER => [ 0x04, 0x0e, 0x18, 0x30, 0x38, 0x98, 0xa0, 0x75e7, 0x760c, 0x7610, 0x7eff,
7571
+ 0xce31, 0xcea5, 0xd00e, 0xd012, 0xd0a6, 0xd0be, 0xd2b8 ],
7358
7572
  WRITABLE => 1,
7359
7573
  FIRST_ENTRY => 0,
7360
7574
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
@@ -7386,13 +7600,21 @@ my %nikonFocalConversions = (
7386
7600
  Hidden => 1,
7387
7601
  },
7388
7602
  0x24 => {
7389
- Name => 'NumberOffsets', #number of entries in offset table. offsets are from start of ShotInfo data.
7603
+ Name => 'NumberOffsets', # number of entries in offset table. offsets are from start of ShotInfo data.
7390
7604
  DataMember => 'NumberOffsets',
7391
7605
  Format => 'int32u',
7392
7606
  Writable => 0,
7393
7607
  Hidden => 1,
7394
7608
  },
7395
- 0x38 => { #28
7609
+ 0x30 => {
7610
+ Name => 'Offset3',
7611
+ DataMember => 'Offset3',
7612
+ Format => 'int32u',
7613
+ Writable => 0,
7614
+ Hidden => 1,
7615
+ RawConv => '$$self{Offset3} = $val || 0x10000000; undef', # (ignore if 0)
7616
+ },
7617
+ 0x38 => {
7396
7618
  Name => 'Offset5',
7397
7619
  DataMember => 'Offset5',
7398
7620
  Format => 'int32u',
@@ -7408,20 +7630,54 @@ my %nikonFocalConversions = (
7408
7630
  Hidden => 1,
7409
7631
  RawConv => '$$self{OrientationOffset} = $val || 0x10000000; undef', # (ignore if 0)
7410
7632
  },
7411
-
7412
- ### 0x7f00 - Offset5 info start (Z7_2 firmware 1.30)
7413
- 0x7eff => { #28
7633
+ 0xa0 => {
7634
+ Name => 'Offset31',
7635
+ DataMember => 'Offset31',
7636
+ Format => 'int32u',
7637
+ Writable => 0,
7638
+ Hidden => 1,
7639
+ RawConv => '$$self{Offset31} = $val || 0x10000000; undef', # (ignore if 0)
7640
+ },
7641
+ ### 0x75e8 - Offset3 info start (Z7_2 firmware 1.30)
7642
+ 0x75e7 => {
7414
7643
  Name => 'Hook1',
7415
7644
  Hidden => 1,
7416
7645
  RawConv => 'undef',
7417
7646
  # account for variable location of Offset5 data
7647
+ Hook => '$varSize = $$self{Offset3} - 0x75e8',
7648
+ },
7649
+ 0x760c => {
7650
+ Name => 'IntervalShooting',
7651
+ RawConv => '$$self{IntervalShooting} = $val',
7652
+ Format => 'int16u',
7653
+ PrintConv => q{
7654
+ return 'Off' if $val == 0 ;
7655
+ my $i = sprintf("Interval %.0f of %.0f",$val, $$self{IntervalShootingIntervals}); # something like "Interval 1 of 3"
7656
+ my $f = $$self{IntervalShootingShotsPerInterval} > 1 ? sprintf(" Frame %.0f of %.0f",$$self{IntervalFrame}, $$self{IntervalShootingShotsPerInterval}): '' ; # something like "Frame 1 of 3" or blank
7657
+ return "On: $i$f"
7658
+ #$val == 0 ? 'Off' : sprintf("On: Interval %.0f of %.0f Frame %.0f of %.0f",$val, $$self{IntervalShootingIntervals}, $$self{IntervalFrame}, $$self{IntervalShootingShotsPerInterval}),
7659
+ },
7660
+ },
7661
+ 0x7610 => {
7662
+ Name => 'IntervalFrame',
7663
+ RawConv => '$$self{IntervalFrame} = $val',
7664
+ Condition => '$$self{IntervalShooting} > 0',
7665
+ Format => 'int16u',
7666
+ Hidden => 1,
7667
+ },
7668
+ ### 0x7f00 - Offset5 info start (Z7_2 firmware 1.30)
7669
+ 0x7eff => {
7670
+ Name => 'Hook2',
7671
+ Hidden => 1,
7672
+ RawConv => 'undef',
7673
+ # account for variable location of Offset5 data
7418
7674
  Hook => '$varSize = $$self{Offset5} - 0x7f00',
7419
7675
  },
7420
7676
  0x7fa0 => { #28
7421
- Name => 'PortraitImpressionBalance', #will be 0 for firmware 1.21 and earlier; firmware 1.30 onward: will be set by Photo Shooting Menu entry Portrait Impression Balance
7422
- #offset5+160; 128 is neutral; >128 increases Yellow; <128 increases Magenta; increments of 4 result from 1 full unit adjustment on the camera
7423
- #offset5+161 129 is neutral; >129 increases Brightness; <129 decreases Brightness
7424
- #with firmware 1.30 when 'Off' is selected in the Shooting menu, offsets 160 & 161 will contain 255. Selecting Mode 1,2, or 3 will populate offsets 160 & 161 with values in the range [116,141]
7677
+ Name => 'PortraitImpressionBalance', # will be 0 for firmware 1.21 and earlier; firmware 1.30 onward: will be set by Photo Shooting Menu entry Portrait Impression Balance
7678
+ # offset5+160; 128 is neutral; >128 increases Yellow; <128 increases Magenta; increments of 4 result from 1 full unit adjustment on the camera
7679
+ # offset5+161 128 is neutral; >128 increases Brightness; <128 decreases Brightness
7680
+ # with firmware 1.30 when 'Off' is selected in the Shooting menu, offsets 160 & 161 will contain 255. Selecting Mode 1,2, or 3 will populate offsets 160 & 161 with values in the range [116,141]
7425
7681
  Format => 'int8u[2]',
7426
7682
  Condition => '$$self{FirmwareVersion} ge "01.30"',
7427
7683
  PrintConv => q{
@@ -7433,9 +7689,9 @@ my %nikonFocalConversions = (
7433
7689
  return "$color $brightness"
7434
7690
  },
7435
7691
  },
7436
- ### 0xce32 - OrientationInfo start (Z7_2 firmware 1.00)
7692
+ ### 0xce32 - OrientationInfo start (Z7_2 firmware 1.00)
7437
7693
  0xce31 => {
7438
- Name => 'Hook2',
7694
+ Name => 'Hook3',
7439
7695
  Hidden => 1,
7440
7696
  RawConv => 'undef',
7441
7697
  # account for variable location of OrientationInfo data
@@ -7469,7 +7725,339 @@ my %nikonFocalConversions = (
7469
7725
  PrintConv => 'sprintf("%.1f", $val)',
7470
7726
  PrintConvInv => '$val',
7471
7727
  },
7472
- #note: DecryptLen currently set to 0xce32 + 12
7728
+ ### 0xcea6 - Offset31 info start (Z7_2 firmware 1.30) -- seems to include items from the Settings, Photo Shooting and Movie Shooting Menus. Some tags are duplicated in NikonSettings, otherr tags are only found in one block or the other. Further investigation required as to why the split.
7729
+ 0xcea5 => {
7730
+ Name => 'Hook4',
7731
+ Hidden => 1,
7732
+ RawConv => 'undef',
7733
+ # account for variable location of Offset5 data
7734
+ Hook => '$varSize = $$self{Offset31} - 0xcea6',
7735
+ },
7736
+ 0xcffe => {
7737
+ Name => 'IntervalDurationHours',
7738
+ Format => 'int32u',
7739
+ Condition => '$$self{IntervalShooting} > 0',
7740
+ },
7741
+ 0xd002 => {
7742
+ Name => 'IntervalDurationMinutes',
7743
+ Format => 'int32u',
7744
+ Condition => '$$self{IntervalShooting} > 0',
7745
+ },
7746
+ 0xd006 => {
7747
+ Name => 'IntervalDurationSeconds',
7748
+ Format => 'int32u',
7749
+ Condition => '$$self{IntervalShooting} > 0',
7750
+ },
7751
+ 0xd00e => {
7752
+ Name => 'Intervals',
7753
+ Format => 'int32u',
7754
+ RawConv => '$$self{IntervalShootingIntervals} = $val',
7755
+ Condition => '$$self{IntervalShooting} > 0',
7756
+ },
7757
+ 0xd012 => {
7758
+ Name => 'ShotsPerInterval',
7759
+ Format => 'int32u',
7760
+ RawConv => '$$self{IntervalShootingShotsPerInterval} = $val',
7761
+ Condition => '$$self{IntervalShooting} > 0',
7762
+ },
7763
+ 0xd016 => {
7764
+ Name => 'IntervalExposureSmoothing',
7765
+ Condition => '$$self{IntervalShooting} > 0',
7766
+ Format => 'int8u',
7767
+ PrintConv => \%offOn,
7768
+ },
7769
+ 0xd018 => {
7770
+ Name => 'IntervalPriority',
7771
+ Condition => '$$self{IntervalShooting} > 0',
7772
+ Format => 'int8u',
7773
+ PrintConv => \%offOn,
7774
+ },
7775
+ 0xd03a => {
7776
+ Name => 'FocusShiftNumberShots',
7777
+ },
7778
+ 0xd03e => {
7779
+ Name => 'FocusShiftStepWidth',
7780
+ },
7781
+ 0xd042 => {
7782
+ Name => 'FocusShiftInterval',
7783
+ PrintConv => '$val == 1? "1 Second" : sprintf("%.0f Seconds",$val)',
7784
+ },
7785
+ 0xd046 => {
7786
+ Name => 'FocusShiftExposureLock',
7787
+ PrintConv => \%offOn,
7788
+ },
7789
+ #0xd08e => White Balance - Kelvin Temp
7790
+ #0xd096 => ColorSpace
7791
+ #0xd098 => ActiveD-Lighting
7792
+ #0xd09c => HighISONoiseReduction
7793
+ 0xd0a0 => {
7794
+ Name => 'DiffractionCompensation',
7795
+ Format => 'int8u',
7796
+ PrintConv => \%offOn,
7797
+ },
7798
+ 0xd0a1 => {
7799
+ Name => 'AutoDistortionControl',
7800
+ Format => 'int8u',
7801
+ PrintConv => \%offOn,
7802
+ },
7803
+ #0xd0a2 => {Name => 'FlickerReductionShooting',}, # redundant with tag in NikonSettings
7804
+ 0xd0a4 => {
7805
+ Name => 'NikonMeteringMode',
7806
+ Unknown => 1,
7807
+ PrintConv => {
7808
+ 0 => 'Matrix',
7809
+ 1 => 'Center',
7810
+ 2 => 'Spot',
7811
+ 3 => 'Highlight'
7812
+ },
7813
+ },
7814
+ 0xd0a6 => {
7815
+ Name => 'FlashControlMode', # this and nearby tag values for flash may be set from either the Photo Shooting Menu or using the Flash unit menu
7816
+ RawConv => '$$self{FlashControlMode} = $val',
7817
+ PrintConv => {
7818
+ 0 => 'TTL',
7819
+ 1 => 'Auto External Flash',
7820
+ 2 => 'GN (distance priority)',
7821
+ 3 => 'Manual',
7822
+ 4 => 'Repeating Flash',
7823
+ },
7824
+ },
7825
+ 0xd0ac => {
7826
+ Name => 'FlashGNDistance',
7827
+ Condition => '$$self{FlashControlMode} == 2',
7828
+ Unknown => 1,
7829
+ ValueConv => '$val + 3',
7830
+ PrintConv => \%flashGNDistance,
7831
+ },
7832
+ 0xd0b0 => {
7833
+ Name => 'FlashOutput', # range[0,24] with 0=>Full; 1=>50%; then decreasing flash power in 1/3 stops to 0.39% (1/256 full power). also found in FlashInfoUnknown at offset 0x0a (with different mappings)
7834
+ Condition => '$$self{FlashControlMode} >= 3',
7835
+ Unknown => 1,
7836
+ ValueConv => '2 ** (-$val/3)',
7837
+ ValueConvInv => '$val>0 ? -3*log($val)/log(2) : 0',
7838
+ PrintConv => '$val>0.99 ? "Full" : sprintf("%.1f%%",$val*100)',
7839
+ PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
7840
+ },
7841
+ 0xd0b8 => {
7842
+ Name => 'FlashWirelessOption', # also found in FlashInfoUnknown at offset 0x23 (with different mappings)
7843
+ Unknown => 1,
7844
+ PrintConv => {
7845
+ 0 => 'Off',
7846
+ 1 => 'Optical AWL',
7847
+ 2 => 'Optical/Radio AWL',
7848
+ 3 => 'Radio AWL'
7849
+ },
7850
+ },
7851
+ 0xd0ba => {
7852
+ Name => 'FlashRemoteControl', # also found in FlashInfoUnknown at offset 0x1e (with different mappings)
7853
+ Unknown => 1,
7854
+ PrintConv => {
7855
+ 0 => 'Group',
7856
+ 1 => 'Quick Wireless',
7857
+ 2 => 'Remote Repeating',
7858
+ },
7859
+ },
7860
+ 0xd0be => {
7861
+ Name => 'FlashMasterControlMode', # tag name chosen for compatibility with those found in FlashInfo0102 & FlashInfo0103
7862
+ RawConv => '$$self{FlashGroupOptionsMasterMode} = $val',
7863
+ PrintConv => \%flashGroupOptionsMode,
7864
+ },
7865
+ 0xd0c0 => {
7866
+ Name => 'FlashMasterCompensation',
7867
+ Format => 'int8s',
7868
+ Condition => '$$self{FlashGroupOptionsMasterMode} != 3', # other than 'Off'
7869
+ Unknown => 1,
7870
+ ValueConv => '$val/6',
7871
+ ValueConvInv => '6 * $val',
7872
+ PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
7873
+ PrintConvInv => '$val',
7874
+ },
7875
+ 0xd0c4 => {
7876
+ Name => 'FlashMasterOutput',
7877
+ Unknown => 1,
7878
+ Condition => '$$self{FlashGroupOptionsMasterMode} == 1', # only for Mode=M
7879
+ ValueConv => '2 ** (-$val/3)',
7880
+ ValueConvInv => '$val>0 ? -3*log($val)/log(2) : 0',
7881
+ PrintConv => '$val>0.99 ? "Full" : sprintf("%.1f%%",$val*100)',
7882
+ PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
7883
+ },
7884
+ #0xd0c6 => {Name => 'FlashGroupAControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupACompensation at 0xd0c8 and FlashGroupAOutput at 0xd0cc
7885
+ #0xd0ce => {Name => 'FlashGroupBControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupBCompensation at 0xd0d0 and FlashGroupBOutput at 0xd0d4
7886
+ #0xd0d6 => {Name => 'FlashGroupCControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupCCompensation at 0xd0d8 and FlashGroupCOutput at 0xd0dc
7887
+ #0xd0de => {Name => 'FlashGroupDControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupDCompensation at 0xd0e0 and FlashGroupDOutput at 0xd0e4
7888
+ #0xd0e6 => {Name => 'FlashGroupEControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupECompensation at 0xd0e8 and FlashGroupEOutput at 0xd0ec
7889
+ #0xd0ee => {Name => 'FlashGroupFControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupFCompensation at 0xd0f0 and FlashGroupFOutput at 0xd0f4
7890
+ #0xd09e => VignetteControl
7891
+ #0xd110 => FocusMode
7892
+ #0xd112 => AFAreaMode
7893
+ #0xd114 => VibrationReduction
7894
+ #0xd118 => BracketSet
7895
+ #0xd11a => BracketProgram
7896
+ #0xd11c => BracketIncrement
7897
+ #0xd12d => SilentPhotography
7898
+ 0xd154 => {
7899
+ Name => 'MovieFrameSize', # may want to rename or suppress the movie menu settings - potentially confusing for still photographers
7900
+ Unknown => 1,
7901
+ PrintConv => {
7902
+ 1 => '1920x1080',
7903
+ 2 => '3840x2160',
7904
+ },
7905
+ },
7906
+ 0xd156 => {
7907
+ Name => 'MovieFrameRate',
7908
+ Unknown => 1,
7909
+ PrintConv => {
7910
+ 0 => '120p',
7911
+ 1 => '100p',
7912
+ 2 => '60p',
7913
+ 3 => '50p',
7914
+ 4 => '30p',
7915
+ 5 => '25p',
7916
+ 6 => '24p',
7917
+ },
7918
+ },
7919
+ 0xd158 => {
7920
+ Name => 'MovieSlowMotion',
7921
+ Unknown => 1,
7922
+ PrintConv => {
7923
+ 0 => 'Off',
7924
+ 1 => 'On (4x)', # 120p recording with playback @ 30p [1920 x 1080; 30p x 4] or 100p recording with playback @ 25p [1920 x 1080; 25p x 4]
7925
+ 2 => 'On (5x)', # 120p recording with playback @ 24p [1920 x 1080; 20p x 5]
7926
+ },
7927
+ },
7928
+ 0xd15c => {
7929
+ Name => 'MovieType',
7930
+ Unknown => 1,
7931
+ PrintConv => {
7932
+ 0 => 'MOV',
7933
+ 1 => 'MP4',
7934
+ },
7935
+ },
7936
+ #0xd15e => MovieISOAutoHiLimit
7937
+ 0xd162 => {
7938
+ Name => 'MovieISOAutoManualMode',
7939
+ Format => 'int16u',
7940
+ Unknown => 1,
7941
+ ValueConv => '($val-104)/8',
7942
+ PrintConv => {
7943
+ 0 => 'ISO 64',
7944
+ 1 => 'ISO 80',
7945
+ 2 => 'ISO 100',
7946
+ 3 => 'ISO 125',
7947
+ 4 => 'ISO 160',
7948
+ 5 => 'ISO 200',
7949
+ 6 => 'ISO 250',
7950
+ 7 => 'ISO 320',
7951
+ 8 => 'ISO 400',
7952
+ 9 => 'ISO 500',
7953
+ 10 => 'ISO 640',
7954
+ 11 => 'ISO 800',
7955
+ 12 => 'ISO 1000',
7956
+ 13 => 'ISO 1250',
7957
+ 14 => 'ISO 1600',
7958
+ 15 => 'ISO 2000',
7959
+ 16 => 'ISO 2500',
7960
+ 17 => 'ISO 3200',
7961
+ 18 => 'ISO 4000',
7962
+ 19 => 'ISO 5000',
7963
+ 20 => 'ISO 6400',
7964
+ 21 => 'ISO 8000',
7965
+ 22 => 'ISO 10000',
7966
+ 23 => 'ISO 12800',
7967
+ 24 => 'ISO 16000',
7968
+ 25 => 'ISO 20000',
7969
+ 26 => 'ISO 25600',
7970
+ 27 => 'ISO Hi 0.3',
7971
+ 28 => 'ISO Hi 0.7',
7972
+ 29 => 'ISO Hi 1.0',
7973
+ 32 => 'ISO Hi 2.0',
7974
+ },
7975
+ },
7976
+ #0xd166 => MovieWhiteBalanceSameAsPhoto
7977
+ 0xd196 => {
7978
+ Name => 'MovieActiveD-Lighting',
7979
+ Unknown => 1,
7980
+ PrintConv => {
7981
+ 0 => 'Off',
7982
+ 2 => 'Low',
7983
+ 3 => 'Normal',
7984
+ 4 => 'High',
7985
+ 5 => 'Extra High',
7986
+ },
7987
+ },
7988
+ 0xd19a => {
7989
+ Name => 'MovieHighISONoiseReduction',
7990
+ Unknown => 1,
7991
+ PrintConv => {
7992
+ 0 => 'Off',
7993
+ 1 => 'Low',
7994
+ 2 => 'Normal',
7995
+ 3 => 'High',
7996
+ },
7997
+ },
7998
+ 0xd19c => {
7999
+ Name => 'MovieVignetteControl',
8000
+ Unknown => 1,
8001
+ PrintConv => {
8002
+ 0 => 'Off',
8003
+ 1 => 'Low',
8004
+ 2 => 'Normal',
8005
+ 3 => 'High',
8006
+ },
8007
+ },
8008
+ 0xd19e => {
8009
+ Name => 'MovieVignetteControlSameAsPhoto',
8010
+ Unknown => 1,
8011
+ PrintConv => \%noYes
8012
+ },
8013
+ 0xd19f => {
8014
+ Name => 'MovieDiffrationCompensation',
8015
+ Unknown => 1,
8016
+ PrintConv => \%offOn
8017
+ },
8018
+ 0xd1a0 => {
8019
+ Name => 'MovieAutoDistortionControl',
8020
+ Unknown => 1,
8021
+ PrintConv => \%offOn
8022
+ },
8023
+ 0xd1a6 => {
8024
+ Name => 'MovieFocusMode',
8025
+ Unknown => 1,
8026
+ PrintConv => {
8027
+ 0 => 'Manual',
8028
+ 1 => 'AF-S',
8029
+ 2 => 'AF-C',
8030
+ 4 => 'AF-F', # full frame
8031
+ },
8032
+ },
8033
+ #0xd1a8 => MovieAFAreaMode
8034
+ 0xd1aa => {
8035
+ Name => 'MovieVibrationReduction',
8036
+ Unknown => 1,
8037
+ PrintConv => {
8038
+ 0 => 'Off',
8039
+ 1 => 'On (Normal)',
8040
+ 2 => 'On (Sport)',
8041
+ },
8042
+ },
8043
+ 0xd1ad => {
8044
+ Name => 'MovieVibrationReductionSameAsPhoto',
8045
+ Unknown => 1,
8046
+ PrintConv => \%noYes
8047
+ },
8048
+ #0xd2ae => HDMIOutputResolution
8049
+ #0xd2b0 => HDMIOutputRange
8050
+ #0xd2b4 => HDMIExternalRecorder
8051
+ #0xd2b6 => HDMIBitDepth
8052
+ 0xd2b8 => {
8053
+ Name => 'HDMIOutputN-Log', # one of the choices under SettingsMenu/HDMI/Advanced. Curiously,the HDR/HLC output option which is controlled by the same sub-menu is decoded thru NikonSettings
8054
+ Condition => '$$self{HDMIBitDepth} and $$self{HDMIBitDepth} == 2', # only for 10 bit
8055
+ RawConv => '$$self{HDMIOutputNLog} = $val',
8056
+ Unknown => 1,
8057
+ PrintConv => \%offOn,
8058
+ },
8059
+ #0xd2b9 => HDMIViewAssist
8060
+ # note: DecryptLen currently set to 0xcea6 + 1050
7473
8061
  );
7474
8062
 
7475
8063
  # Flash information (ref JD)