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.
- checksums.yaml +4 -4
- data/bin/Changes +21 -4
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +11 -3
- data/bin/lib/Image/ExifTool/Exif.pm +13 -1
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +3 -0
- data/bin/lib/Image/ExifTool/Nikon.pm +610 -22
- data/bin/lib/Image/ExifTool/NikonCustom.pm +5 -1
- data/bin/lib/Image/ExifTool/NikonSettings.pm +67 -11
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +9 -4
- data/bin/lib/Image/ExifTool/TagLookup.pm +508 -10
- data/bin/lib/Image/ExifTool/TagNames.pod +1036 -3
- data/bin/lib/Image/ExifTool/Writer.pl +1 -1
- data/bin/lib/Image/ExifTool/XMP.pm +96 -18
- data/bin/lib/Image/ExifTool.pm +8 -3
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
@@ -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
|
-
|
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 =>
|
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 =>
|
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
|
-
|
6496
|
-
|
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
|
-
|
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,
|
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
|
-
|
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
|
-
|
7413
|
-
|
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',
|
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
|
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 => '
|
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
|
-
|
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)
|