exiftool_vendored 12.33.0 → 12.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/Changes +66 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +65 -37
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +11 -2
- data/bin/lib/Image/ExifTool/Canon.pm +156 -10
- data/bin/lib/Image/ExifTool/Charset.pm +2 -0
- data/bin/lib/Image/ExifTool/DarwinCore.pm +2 -2
- data/bin/lib/Image/ExifTool/Exif.pm +13 -1
- data/bin/lib/Image/ExifTool/FLIR.pm +33 -8
- data/bin/lib/Image/ExifTool/GIF.pm +5 -1
- data/bin/lib/Image/ExifTool/GPS.pm +14 -10
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +96 -4
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +108 -11
- data/bin/lib/Image/ExifTool/Nikon.pm +992 -18
- data/bin/lib/Image/ExifTool/NikonCustom.pm +5 -1
- data/bin/lib/Image/ExifTool/NikonSettings.pm +135 -71
- data/bin/lib/Image/ExifTool/PDF.pm +5 -3
- data/bin/lib/Image/ExifTool/PNG.pm +1 -0
- data/bin/lib/Image/ExifTool/QuickTime.pm +17 -3
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +26 -1
- data/bin/lib/Image/ExifTool/README +4 -0
- data/bin/lib/Image/ExifTool/Sony.pm +29 -11
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +9 -4
- data/bin/lib/Image/ExifTool/TagLookup.pm +6437 -5843
- data/bin/lib/Image/ExifTool/TagNames.pod +1292 -46
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +10 -0
- data/bin/lib/Image/ExifTool/WriteXMP.pl +10 -11
- data/bin/lib/Image/ExifTool/Writer.pl +50 -5
- data/bin/lib/Image/ExifTool/XMP.pm +119 -30
- data/bin/lib/Image/ExifTool/XMP2.pl +3 -2
- data/bin/lib/Image/ExifTool.pm +71 -8
- data/bin/lib/Image/ExifTool.pod +9 -1
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
|
@@ -62,7 +62,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
62
62
|
use Image::ExifTool::Exif;
|
|
63
63
|
use Image::ExifTool::GPS;
|
|
64
64
|
|
|
65
|
-
$VERSION = '4.
|
|
65
|
+
$VERSION = '4.02';
|
|
66
66
|
|
|
67
67
|
sub LensIDConv($$$);
|
|
68
68
|
sub ProcessNikonAVI($$$);
|
|
@@ -404,6 +404,7 @@ sub GetAFPointGrid($$;$);
|
|
|
404
404
|
'48 38 1F 37 34 3C 4B 06' => 'Sigma 12-24mm F4.5-5.6 EX DG Aspherical HSM',
|
|
405
405
|
'F0 38 1F 37 34 3C 4B 06' => 'Sigma 12-24mm F4.5-5.6 EX DG Aspherical HSM',
|
|
406
406
|
'96 38 1F 37 34 3C 4B 06' => 'Sigma 12-24mm F4.5-5.6 II DG HSM', #Jurgen Sahlberg
|
|
407
|
+
'CA 3C 1F 37 30 30 4B 46' => 'Sigma 12-24mm F4 DG HSM | A', #github issue#101
|
|
407
408
|
'C1 48 24 37 24 24 4B 46' => 'Sigma 14-24mm F2.8 DG HSM | A', #30
|
|
408
409
|
'26 40 27 3F 2C 34 1C 02' => 'Sigma 15-30mm F3.5-4.5 EX DG Aspherical DF',
|
|
409
410
|
'48 48 2B 44 24 30 4B 06' => 'Sigma 17-35mm F2.8-4 EX DG Aspherical HSM',
|
|
@@ -1045,7 +1046,9 @@ my %cropHiSpeed = ( #IB
|
|
|
1045
1046
|
10 => '1.3x Movie Crop', #36 (D4/D500)
|
|
1046
1047
|
11 => 'FX Uncropped',
|
|
1047
1048
|
12 => 'DX Uncropped',
|
|
1048
|
-
|
|
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
|
|
1049
1052
|
17 => '1:1 Crop',
|
|
1050
1053
|
OTHER => sub {
|
|
1051
1054
|
my ($val, $inv, $conv) = @_;
|
|
@@ -1057,7 +1060,16 @@ my %cropHiSpeed = ( #IB
|
|
|
1057
1060
|
},
|
|
1058
1061
|
);
|
|
1059
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', );
|
|
1060
1071
|
my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
1072
|
+
my %onOff = ( 0 => 'On', 1 => 'Off' );
|
|
1061
1073
|
|
|
1062
1074
|
# common attributes for writable BinaryData directories
|
|
1063
1075
|
my %binaryDataAttrs = (
|
|
@@ -1464,6 +1476,8 @@ my %binaryDataAttrs = (
|
|
|
1464
1476
|
Name => 'ColorTemperatureAuto',
|
|
1465
1477
|
Writable => 'int16u',
|
|
1466
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
|
|
1467
1481
|
0x0080 => { Name => 'ImageAdjustment', Writable => 'string' },
|
|
1468
1482
|
0x0081 => { Name => 'ToneComp', Writable => 'string' }, #2
|
|
1469
1483
|
0x0082 => { Name => 'AuxiliaryLens', Writable => 'string' },
|
|
@@ -1861,7 +1875,7 @@ my %binaryDataAttrs = (
|
|
|
1861
1875
|
SubDirectory => {
|
|
1862
1876
|
TagTable => 'Image::ExifTool::Nikon::ShotInfoD6',
|
|
1863
1877
|
DecryptStart => 4,
|
|
1864
|
-
DecryptLen =>
|
|
1878
|
+
DecryptLen => 0xc292 + 720, # thru decoded parts of Offset 32
|
|
1865
1879
|
ByteOrder => 'LittleEndian',
|
|
1866
1880
|
},
|
|
1867
1881
|
},
|
|
@@ -1876,12 +1890,13 @@ my %binaryDataAttrs = (
|
|
|
1876
1890
|
},
|
|
1877
1891
|
},
|
|
1878
1892
|
{ # (Z6_2 firmware version 1.00 and Z7_2 firmware versions 1.00 & 1.01, ref 28)
|
|
1879
|
-
|
|
1893
|
+
# 0800=Z6/Z7 0801=Z50 0802=Z5 0803=Z6II/Z7II 0804=Zfc
|
|
1894
|
+
Condition => '$$valPt =~ /^080[01234]/',
|
|
1880
1895
|
Name => 'ShotInfoZ7_2',
|
|
1881
1896
|
SubDirectory => {
|
|
1882
1897
|
TagTable => 'Image::ExifTool::Nikon::ShotInfoZ7_2',
|
|
1883
1898
|
DecryptStart => 4,
|
|
1884
|
-
DecryptLen =>
|
|
1899
|
+
DecryptLen => 0xcea6 + 1050, # thru decoded parts of Offset31
|
|
1885
1900
|
ByteOrder => 'LittleEndian',
|
|
1886
1901
|
},
|
|
1887
1902
|
},
|
|
@@ -2388,6 +2403,10 @@ my %binaryDataAttrs = (
|
|
|
2388
2403
|
Flags => [ 'Binary', 'Protected' ],
|
|
2389
2404
|
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::PictureControl' },
|
|
2390
2405
|
},
|
|
2406
|
+
0x00bf => {
|
|
2407
|
+
Name => 'SilentPhotography',
|
|
2408
|
+
PrintConv => \%offOn,
|
|
2409
|
+
},
|
|
2391
2410
|
0x00c3 => {
|
|
2392
2411
|
Name => 'BarometerInfo',
|
|
2393
2412
|
SubDirectory => {
|
|
@@ -6048,6 +6067,18 @@ my %nikonFocalConversions = (
|
|
|
6048
6067
|
3 => 'Rotate 180',
|
|
6049
6068
|
},
|
|
6050
6069
|
},
|
|
6070
|
+
0x0d0 => {
|
|
6071
|
+
Name => 'Interval',
|
|
6072
|
+
# prior version of the d% firmware do not support this tag, nor does the D500 (at least thru firmware 1.3)
|
|
6073
|
+
Condition => '$$self{Model} eq "NIKON D5" and $$self{FirmwareVersion} ge "1.40"',
|
|
6074
|
+
PrintConv => '$val > 0 ? sprintf("%.0f", $val) : ""',
|
|
6075
|
+
},
|
|
6076
|
+
0x0d4 => {
|
|
6077
|
+
Name => 'IntervalFrame',
|
|
6078
|
+
# prior version of the d% firmware do not support this tag, nor does the D500 (at least thru firmware 1.3)
|
|
6079
|
+
Condition => '$$self{Model} eq "NIKON D5" and $$self{FirmwareVersion} ge "1.40"',
|
|
6080
|
+
PrintConv => '$val > 0 ? sprintf("%.0f", $val) : ""',
|
|
6081
|
+
},
|
|
6051
6082
|
0x05e2 => {
|
|
6052
6083
|
Name => 'FlickerReductionIndicator',
|
|
6053
6084
|
Mask => 0x01,
|
|
@@ -6466,7 +6497,7 @@ my %nikonFocalConversions = (
|
|
|
6466
6497
|
WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted,
|
|
6467
6498
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
|
6468
6499
|
VARS => { ID_LABEL => 'Index' },
|
|
6469
|
-
DATAMEMBER => [ 0x9c, 0xc219 ],
|
|
6500
|
+
DATAMEMBER => [ 0x30, 0x60, 0x9c, 0xa4, 0x75e7, 0x760c, 0x7610, 0xc219, 0xc292, 0xc40e, 0xc412, 0xc4a6, 0xc4be ],
|
|
6470
6501
|
WRITABLE => 1,
|
|
6471
6502
|
FIRST_ENTRY => 0,
|
|
6472
6503
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
@@ -6476,6 +6507,11 @@ my %nikonFocalConversions = (
|
|
|
6476
6507
|
Format => 'string[4]',
|
|
6477
6508
|
Writable => 0,
|
|
6478
6509
|
},
|
|
6510
|
+
0x04 => {
|
|
6511
|
+
Name => 'FirmwareVersion',
|
|
6512
|
+
Format => 'string[8]',
|
|
6513
|
+
Writable => 0,
|
|
6514
|
+
},
|
|
6479
6515
|
0x24 => {
|
|
6480
6516
|
Name => 'NumberOffsets', # (number of entries in offset table. offsets are from start of ShotInfo data)
|
|
6481
6517
|
DataMember => 'NumberOffsets',
|
|
@@ -6483,6 +6519,22 @@ my %nikonFocalConversions = (
|
|
|
6483
6519
|
Writable => 0,
|
|
6484
6520
|
Hidden => 1,
|
|
6485
6521
|
},
|
|
6522
|
+
0x30 => {
|
|
6523
|
+
Name => 'Offset3',
|
|
6524
|
+
DataMember => 'Offset3',
|
|
6525
|
+
Format => 'int32u',
|
|
6526
|
+
Writable => 0,
|
|
6527
|
+
Hidden => 1,
|
|
6528
|
+
RawConv => '$$self{Offset3} = $val || 0x10000000; undef', # (ignore if 0)
|
|
6529
|
+
},
|
|
6530
|
+
0x60 => {
|
|
6531
|
+
Name => 'Offset15',
|
|
6532
|
+
DataMember => 'Offset15',
|
|
6533
|
+
Format => 'int32u',
|
|
6534
|
+
Writable => 0,
|
|
6535
|
+
Hidden => 1,
|
|
6536
|
+
RawConv => '$$self{Offset15} = $val || 0x10000000; undef', # (ignore if 0)
|
|
6537
|
+
},
|
|
6486
6538
|
0x9c => {
|
|
6487
6539
|
Name => 'OrientationOffset',
|
|
6488
6540
|
DataMember => 'OrientationOffset',
|
|
@@ -6491,15 +6543,49 @@ my %nikonFocalConversions = (
|
|
|
6491
6543
|
Hidden => 1,
|
|
6492
6544
|
RawConv => '$$self{OrientationOffset} = $val || 0x10000000; undef', # (ignore if 0)
|
|
6493
6545
|
},
|
|
6494
|
-
|
|
6495
|
-
|
|
6546
|
+
0xa4 => {
|
|
6547
|
+
Name => 'Offset32',
|
|
6548
|
+
DataMember => 'Offset32',
|
|
6549
|
+
Format => 'int32u',
|
|
6550
|
+
Writable => 0,
|
|
6551
|
+
Hidden => 1,
|
|
6552
|
+
RawConv => '$$self{Offset32} = $val || 0x10000000; undef', # (ignore if 0)
|
|
6553
|
+
},
|
|
6554
|
+
### 0x75e8 - Offset3 info start (D6 firmware 1.33)
|
|
6555
|
+
0x75e7 => {
|
|
6496
6556
|
Name => 'Hook1',
|
|
6497
6557
|
Hidden => 1,
|
|
6498
6558
|
RawConv => 'undef',
|
|
6559
|
+
# account for variable location of Offset5 data
|
|
6560
|
+
Hook => '$varSize = $$self{Offset3} - 0x75e8',
|
|
6561
|
+
},
|
|
6562
|
+
0x760c => {
|
|
6563
|
+
Name => 'IntervalShooting',
|
|
6564
|
+
RawConv => '$$self{IntervalShooting} = $val',
|
|
6565
|
+
Format => 'int16u',
|
|
6566
|
+
PrintConv => q{
|
|
6567
|
+
return 'Off' if $val == 0 ;
|
|
6568
|
+
my $i = sprintf("Interval %.0f of %.0f",$val, $$self{IntervalShootingIntervals}); #something like "Interval 1 of 3"
|
|
6569
|
+
my $f = $$self{IntervalShootingShotsPerInterval} > 1 ? sprintf(" Frame %.0f of %.0f",$$self{IntervalFrame}, $$self{IntervalShootingShotsPerInterval}): '' ; #something like "Frame 1 of 3" or blank
|
|
6570
|
+
return "On: $i$f"
|
|
6571
|
+
#$val == 0 ? 'Off' : sprintf("On: Interval %.0f of %.0f Frame %.0f of %.0f",$val, $$self{IntervalShootingIntervals}, $$self{IntervalFrame}, $$self{IntervalShootingShotsPerInterval}),
|
|
6572
|
+
},
|
|
6573
|
+
},
|
|
6574
|
+
0x7610 => {
|
|
6575
|
+
Name => 'IntervalFrame',
|
|
6576
|
+
RawConv => '$$self{IntervalFrame} = $val',
|
|
6577
|
+
Condition => '$$self{IntervalShooting} > 0',
|
|
6578
|
+
Format => 'int16u',
|
|
6579
|
+
Hidden => 1,
|
|
6580
|
+
},
|
|
6581
|
+
### 0xc21a - OrientationInfo start (D6 firmware 1.00) (0xc952 for firmware 1.33)
|
|
6582
|
+
0xc219 => {
|
|
6583
|
+
Name => 'Hook2',
|
|
6584
|
+
Hidden => 1,
|
|
6585
|
+
RawConv => 'undef',
|
|
6499
6586
|
# account for variable location of OrientationInfo data
|
|
6500
6587
|
Hook => '$varSize = $$self{OrientationOffset} - 0xc21a',
|
|
6501
6588
|
},
|
|
6502
|
-
|
|
6503
6589
|
0xc21a => {
|
|
6504
6590
|
Name => 'RollAngle',
|
|
6505
6591
|
Format => 'fixed32u',
|
|
@@ -6527,7 +6613,136 @@ my %nikonFocalConversions = (
|
|
|
6527
6613
|
PrintConv => 'sprintf("%.1f", $val)',
|
|
6528
6614
|
PrintConvInv => '$val',
|
|
6529
6615
|
},
|
|
6530
|
-
|
|
6616
|
+
### 0xc9c6 - Offset32 start (D6 firmware 1.33)
|
|
6617
|
+
0xc292 => {
|
|
6618
|
+
Name => 'Hook3',
|
|
6619
|
+
Hidden => 1,
|
|
6620
|
+
RawConv => 'undef',
|
|
6621
|
+
# account for variable location of data
|
|
6622
|
+
Hook => '$varSize = $$self{Offset32} - 0xc292',
|
|
6623
|
+
},
|
|
6624
|
+
0xc40e => {
|
|
6625
|
+
Name => 'Intervals',
|
|
6626
|
+
Format => 'int32u',
|
|
6627
|
+
RawConv => '$$self{IntervalShootingIntervals} = $val',
|
|
6628
|
+
Condition => '$$self{IntervalShooting} > 0',
|
|
6629
|
+
},
|
|
6630
|
+
0xc412 => {
|
|
6631
|
+
Name => 'ShotsPerInterval',
|
|
6632
|
+
Format => 'int32u',
|
|
6633
|
+
RawConv => '$$self{IntervalShootingShotsPerInterval} = $val',
|
|
6634
|
+
Condition => '$$self{IntervalShooting} > 0',
|
|
6635
|
+
},
|
|
6636
|
+
0xc416 => {
|
|
6637
|
+
Name => 'IntervalExposureSmoothing',
|
|
6638
|
+
Condition => '$$self{IntervalShooting} > 0',
|
|
6639
|
+
Format => 'int8u',
|
|
6640
|
+
PrintConv => \%offOn,
|
|
6641
|
+
},
|
|
6642
|
+
0xc418 => {
|
|
6643
|
+
Name => 'IntervalPriority',
|
|
6644
|
+
Condition => '$$self{IntervalShooting} > 0',
|
|
6645
|
+
Format => 'int8u',
|
|
6646
|
+
PrintConv => \%offOn,
|
|
6647
|
+
},
|
|
6648
|
+
0xc43a => {
|
|
6649
|
+
Name => 'FocusShiftNumberShots',
|
|
6650
|
+
},
|
|
6651
|
+
0xc43e => {
|
|
6652
|
+
Name => 'FocusShiftStepWidth',
|
|
6653
|
+
},
|
|
6654
|
+
0xc442 => {
|
|
6655
|
+
Name => 'FocusShiftInterval',
|
|
6656
|
+
PrintConv => '$val == 1? "1 Second" : sprintf("%.0f Seconds",$val)',
|
|
6657
|
+
},
|
|
6658
|
+
0xc446 => {
|
|
6659
|
+
Name => 'FocusShiftExposureLock',
|
|
6660
|
+
PrintConv => \%offOn,
|
|
6661
|
+
},
|
|
6662
|
+
#0xc49c => HighISONoiseReduction
|
|
6663
|
+
0xc4a0 => {
|
|
6664
|
+
Name => 'DiffractionCompensation',
|
|
6665
|
+
Format => 'int8u',
|
|
6666
|
+
PrintConv => \%offOn,
|
|
6667
|
+
},
|
|
6668
|
+
#0xc4a1 => {Name => 'FlickerReductionShooting',}, #redundant with tag in NikonSettings
|
|
6669
|
+
0xc4a6 => {
|
|
6670
|
+
Name => 'FlashControlMode', #this and nearby tag values for flash may be set from either the Photo Shooting Menu or using the Flash unit menu
|
|
6671
|
+
RawConv => '$$self{FlashControlMode} = $val',
|
|
6672
|
+
PrintConv => {
|
|
6673
|
+
0 => 'TTL',
|
|
6674
|
+
1 => 'Auto External Flash',
|
|
6675
|
+
2 => 'GN (distance priority)',
|
|
6676
|
+
3 => 'Manual',
|
|
6677
|
+
4 => 'Repeating Flash',
|
|
6678
|
+
},
|
|
6679
|
+
},
|
|
6680
|
+
0xc4ac => {
|
|
6681
|
+
Name => 'FlashGNDistance',
|
|
6682
|
+
Condition => '$$self{FlashControlMode} == 2',
|
|
6683
|
+
Unknown => 1,
|
|
6684
|
+
ValueConv => '$val + 3',
|
|
6685
|
+
PrintConv => \%flashGNDistance,
|
|
6686
|
+
},
|
|
6687
|
+
0xc4b0 => {
|
|
6688
|
+
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)
|
|
6689
|
+
Condition => '$$self{FlashControlMode} >= 3',
|
|
6690
|
+
Unknown => 1,
|
|
6691
|
+
ValueConv => '2 ** (-$val/3)',
|
|
6692
|
+
ValueConvInv => '$val>0 ? -3*log($val)/log(2) : 0',
|
|
6693
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.1f%%",$val*100)',
|
|
6694
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
6695
|
+
},
|
|
6696
|
+
0xc4ba => {
|
|
6697
|
+
Name => 'FlashRemoteControl',
|
|
6698
|
+
Unknown => 1,
|
|
6699
|
+
PrintConv => {
|
|
6700
|
+
0 => 'Group',
|
|
6701
|
+
1 => 'Quick Wireless',
|
|
6702
|
+
2 => 'Remote Repeating',
|
|
6703
|
+
},
|
|
6704
|
+
},
|
|
6705
|
+
0xc4be => {
|
|
6706
|
+
Name => 'FlashMasterControlMode', #tag name chosen for compatibility with those found in FlashInfo0102 & FlashInfo0103
|
|
6707
|
+
RawConv => '$$self{FlashGroupOptionsMasterMode} = $val',
|
|
6708
|
+
PrintConv => \%flashGroupOptionsMode,
|
|
6709
|
+
},
|
|
6710
|
+
0xc4c0 => {
|
|
6711
|
+
Name => 'FlashMasterCompensation',
|
|
6712
|
+
Unknown => 1,
|
|
6713
|
+
Format => 'int8s',
|
|
6714
|
+
Condition => '$$self{FlashGroupOptionsMasterMode} != 3', #other than 'Off'
|
|
6715
|
+
ValueConv => '$val/6',
|
|
6716
|
+
ValueConvInv => '6 * $val',
|
|
6717
|
+
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
|
6718
|
+
PrintConvInv => '$val',
|
|
6719
|
+
},
|
|
6720
|
+
0xc4c4 => {
|
|
6721
|
+
Name => 'FlashMasterOutput',
|
|
6722
|
+
Unknown => 1,
|
|
6723
|
+
Condition => '$$self{FlashGroupOptionsMasterMode} == 1', #only for Mode=M
|
|
6724
|
+
ValueConv => '2 ** (-$val/3)',
|
|
6725
|
+
ValueConvInv => '$val>0 ? -3*log($val)/log(2) : 0',
|
|
6726
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.1f%%",$val*100)',
|
|
6727
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
6728
|
+
},
|
|
6729
|
+
0xc4c6 => {
|
|
6730
|
+
Name => 'FlashWirelessOption',
|
|
6731
|
+
Unknown => 1,
|
|
6732
|
+
PrintConv => {
|
|
6733
|
+
0 => 'Optical AWL',
|
|
6734
|
+
1 => 'Off',
|
|
6735
|
+
},
|
|
6736
|
+
},
|
|
6737
|
+
0xc55c => {
|
|
6738
|
+
Name => 'MovieType',
|
|
6739
|
+
Unknown => 1,
|
|
6740
|
+
PrintConv => {
|
|
6741
|
+
0 => 'MOV',
|
|
6742
|
+
1 => 'MP4',
|
|
6743
|
+
},
|
|
6744
|
+
},
|
|
6745
|
+
# note: DecryptLen currently set to 0xc9c6 + 720
|
|
6531
6746
|
);
|
|
6532
6747
|
|
|
6533
6748
|
# shot information for the D610 firmware 1.00 (encrypted) - ref PH
|
|
@@ -7298,7 +7513,7 @@ my %nikonFocalConversions = (
|
|
|
7298
7513
|
Format => 'undef[56]',
|
|
7299
7514
|
SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsD4' },
|
|
7300
7515
|
},
|
|
7301
|
-
# 0x1978 => { #this decode works, but involves more bits than should be necessary
|
|
7516
|
+
# 0x1978 => { # this decode works, but involves more bits than should be necessary
|
|
7302
7517
|
# Name => 'ShutterTrigger',
|
|
7303
7518
|
# Mask => 0xff,
|
|
7304
7519
|
# PrintConv => {
|
|
@@ -7353,7 +7568,9 @@ my %nikonFocalConversions = (
|
|
|
7353
7568
|
WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted,
|
|
7354
7569
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
|
7355
7570
|
VARS => { ID_LABEL => 'Index' },
|
|
7356
|
-
DATAMEMBER => [ 0x04, 0x0e, 0x18,
|
|
7571
|
+
DATAMEMBER => [ 0x04, 0x0e, 0x18, 0x30, 0x38, 0x98, 0xa0, 0x75e7,
|
|
7572
|
+
0x760c, 0x7610, 0x7eff, 0xce31, 0xcea5, 0xceb6, 0xceb7 ],
|
|
7573
|
+
IS_SUBDIR => [ 0xceb8 ],
|
|
7357
7574
|
WRITABLE => 1,
|
|
7358
7575
|
FIRST_ENTRY => 0,
|
|
7359
7576
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
@@ -7370,7 +7587,7 @@ my %nikonFocalConversions = (
|
|
|
7370
7587
|
Writable => 0,
|
|
7371
7588
|
RawConv => '$$self{FirmwareVersion} = $val',
|
|
7372
7589
|
},
|
|
7373
|
-
|
|
7590
|
+
0x0e => {
|
|
7374
7591
|
Name => 'FirmwareVersion2',
|
|
7375
7592
|
Format => 'string[8]',
|
|
7376
7593
|
Writable => 0,
|
|
@@ -7385,12 +7602,28 @@ my %nikonFocalConversions = (
|
|
|
7385
7602
|
Hidden => 1,
|
|
7386
7603
|
},
|
|
7387
7604
|
0x24 => {
|
|
7388
|
-
Name => 'NumberOffsets', #number of entries in offset table. offsets are from start of ShotInfo data.
|
|
7605
|
+
Name => 'NumberOffsets', # number of entries in offset table. offsets are from start of ShotInfo data.
|
|
7389
7606
|
DataMember => 'NumberOffsets',
|
|
7390
7607
|
Format => 'int32u',
|
|
7391
7608
|
Writable => 0,
|
|
7392
7609
|
Hidden => 1,
|
|
7393
7610
|
},
|
|
7611
|
+
0x30 => {
|
|
7612
|
+
Name => 'Offset3',
|
|
7613
|
+
DataMember => 'Offset3',
|
|
7614
|
+
Format => 'int32u',
|
|
7615
|
+
Writable => 0,
|
|
7616
|
+
Hidden => 1,
|
|
7617
|
+
RawConv => '$$self{Offset3} = $val || 0x10000000; undef', # (ignore if 0)
|
|
7618
|
+
},
|
|
7619
|
+
0x38 => {
|
|
7620
|
+
Name => 'Offset5',
|
|
7621
|
+
DataMember => 'Offset5',
|
|
7622
|
+
Format => 'int32u',
|
|
7623
|
+
Writable => 0,
|
|
7624
|
+
Hidden => 1,
|
|
7625
|
+
RawConv => '$$self{Offset5} = $val || 0x10000000; undef', # (ignore if 0)
|
|
7626
|
+
},
|
|
7394
7627
|
0x98 => {
|
|
7395
7628
|
Name => 'OrientationOffset',
|
|
7396
7629
|
DataMember => 'OrientationOffset',
|
|
@@ -7399,12 +7632,70 @@ my %nikonFocalConversions = (
|
|
|
7399
7632
|
Hidden => 1,
|
|
7400
7633
|
RawConv => '$$self{OrientationOffset} = $val || 0x10000000; undef', # (ignore if 0)
|
|
7401
7634
|
},
|
|
7402
|
-
|
|
7403
|
-
|
|
7404
|
-
|
|
7635
|
+
0xa0 => {
|
|
7636
|
+
Name => 'Offset31',
|
|
7637
|
+
DataMember => 'Offset31',
|
|
7638
|
+
Format => 'int32u',
|
|
7639
|
+
Writable => 0,
|
|
7640
|
+
Hidden => 1,
|
|
7641
|
+
RawConv => '$$self{Offset31} = $val || 0x10000000; undef', # (ignore if 0)
|
|
7642
|
+
},
|
|
7643
|
+
### 0x75e8 - Offset3 info start (Z7_2 firmware 1.30)
|
|
7644
|
+
0x75e7 => {
|
|
7405
7645
|
Name => 'Hook1',
|
|
7406
7646
|
Hidden => 1,
|
|
7407
7647
|
RawConv => 'undef',
|
|
7648
|
+
# account for variable location of Offset5 data
|
|
7649
|
+
Hook => '$varSize = $$self{Offset3} - 0x75e8',
|
|
7650
|
+
},
|
|
7651
|
+
0x760c => {
|
|
7652
|
+
Name => 'IntervalShooting',
|
|
7653
|
+
RawConv => '$$self{IntervalShooting} = $val',
|
|
7654
|
+
Format => 'int16u',
|
|
7655
|
+
PrintConv => q{
|
|
7656
|
+
return 'Off' if $val == 0 ;
|
|
7657
|
+
my $i = sprintf("Interval %.0f of %.0f",$val, $$self{IntervalShootingIntervals}); # something like "Interval 1 of 3"
|
|
7658
|
+
my $f = $$self{IntervalShootingShotsPerInterval} > 1 ? sprintf(" Frame %.0f of %.0f",$$self{IntervalFrame}, $$self{IntervalShootingShotsPerInterval}): '' ; # something like "Frame 1 of 3" or blank
|
|
7659
|
+
return "On: $i$f"
|
|
7660
|
+
#$val == 0 ? 'Off' : sprintf("On: Interval %.0f of %.0f Frame %.0f of %.0f",$val, $$self{IntervalShootingIntervals}, $$self{IntervalFrame}, $$self{IntervalShootingShotsPerInterval}),
|
|
7661
|
+
},
|
|
7662
|
+
},
|
|
7663
|
+
0x7610 => {
|
|
7664
|
+
Name => 'IntervalFrame',
|
|
7665
|
+
RawConv => '$$self{IntervalFrame} = $val',
|
|
7666
|
+
Condition => '$$self{IntervalShooting} > 0',
|
|
7667
|
+
Format => 'int16u',
|
|
7668
|
+
Hidden => 1,
|
|
7669
|
+
},
|
|
7670
|
+
### 0x7f00 - Offset5 info start (Z7_2 firmware 1.30)
|
|
7671
|
+
0x7eff => {
|
|
7672
|
+
Name => 'Hook2',
|
|
7673
|
+
Hidden => 1,
|
|
7674
|
+
RawConv => 'undef',
|
|
7675
|
+
# account for variable location of Offset5 data
|
|
7676
|
+
Hook => '$varSize = $$self{Offset5} - 0x7f00',
|
|
7677
|
+
},
|
|
7678
|
+
0x7fa0 => { #28
|
|
7679
|
+
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
|
|
7680
|
+
# offset5+160; 128 is neutral; >128 increases Yellow; <128 increases Magenta; increments of 4 result from 1 full unit adjustment on the camera
|
|
7681
|
+
# offset5+161 128 is neutral; >128 increases Brightness; <128 decreases Brightness
|
|
7682
|
+
# 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]
|
|
7683
|
+
Format => 'int8u[2]',
|
|
7684
|
+
Condition => '$$self{FirmwareVersion} ge "01.30"',
|
|
7685
|
+
PrintConv => q{
|
|
7686
|
+
return 'Off' if $val eq '0 0' or $val eq '255 255';
|
|
7687
|
+
my @v = split ' ', $val;
|
|
7688
|
+
my $brightness = $v[1]==128 ? 'Brightness: Neutral' : sprintf('Brightness: %+.1f',($v[1]-128)/4);
|
|
7689
|
+
my $color = $v[0]==128 ? 'Color: Neutral' : sprintf('%s: %.1f', $v[0]>128 ? 'Yellow' : 'Magenta', abs($v[0]-128)/4);
|
|
7690
|
+
# will return something like: 'Magenta: 1.0 Brightness: Neutral'
|
|
7691
|
+
return "$color $brightness"
|
|
7692
|
+
},
|
|
7693
|
+
},
|
|
7694
|
+
### 0xce32 - OrientationInfo start (Z7_2 firmware 1.00)
|
|
7695
|
+
0xce31 => {
|
|
7696
|
+
Name => 'Hook3',
|
|
7697
|
+
Hidden => 1,
|
|
7698
|
+
RawConv => 'undef',
|
|
7408
7699
|
# account for variable location of OrientationInfo data
|
|
7409
7700
|
Hook => '$varSize = $$self{OrientationOffset} - 0xce32',
|
|
7410
7701
|
},
|
|
@@ -7436,7 +7727,690 @@ my %nikonFocalConversions = (
|
|
|
7436
7727
|
PrintConv => 'sprintf("%.1f", $val)',
|
|
7437
7728
|
PrintConvInv => '$val',
|
|
7438
7729
|
},
|
|
7439
|
-
|
|
7730
|
+
0xcea5 => {
|
|
7731
|
+
Name => 'Hook4',
|
|
7732
|
+
Hidden => 1,
|
|
7733
|
+
RawConv => 'undef',
|
|
7734
|
+
# account for variable location of Offset31 data
|
|
7735
|
+
Hook => '$varSize = $$self{Offset31} - 0xcea6',
|
|
7736
|
+
},
|
|
7737
|
+
### 0xcea6 - Offset31 info start (Z7_2 firmware 1.30)
|
|
7738
|
+
0xceb6 => {
|
|
7739
|
+
Name => 'ZMenuSettingsOffset',
|
|
7740
|
+
# offset to ZMenuSettings is relative to start of Offset31 block
|
|
7741
|
+
RawConv => '$$self{ZMenuSettingsOffset} = ($val || 0x10000000) + $$self{Offset31}; undef', # (ignore if 0)
|
|
7742
|
+
},
|
|
7743
|
+
0xceb7 => {
|
|
7744
|
+
Name => 'Hook5',
|
|
7745
|
+
Hidden => 1,
|
|
7746
|
+
RawConv => 'undef',
|
|
7747
|
+
# account for variable location of Offset5 data
|
|
7748
|
+
Hook => '$varSize = $$self{ZMenuSettingsOffset} - 0xceb8',
|
|
7749
|
+
},
|
|
7750
|
+
0xceb8 => {
|
|
7751
|
+
Name => 'ZMenuSettings',
|
|
7752
|
+
SubDirectory => {
|
|
7753
|
+
TagTable => 'Image::ExifTool::Nikon::ZMenuSettings',
|
|
7754
|
+
},
|
|
7755
|
+
}
|
|
7756
|
+
# note: DecryptLen currently set to 0xcea6 + 1050
|
|
7757
|
+
);
|
|
7758
|
+
|
|
7759
|
+
%Image::ExifTool::Nikon::ZMenuSettings = (
|
|
7760
|
+
%binaryDataAttrs,
|
|
7761
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
7762
|
+
NOTES => q{
|
|
7763
|
+
These tags are used by the Z5 Z6 Z7 Z6II Z7II Z50 Zfc
|
|
7764
|
+
},
|
|
7765
|
+
DATAMEMBER => [ 0xb0, 0xb4, 0x148, 0x160, 0x35a ],
|
|
7766
|
+
160 => {
|
|
7767
|
+
Name => 'IntervalDurationHours',
|
|
7768
|
+
Format => 'int32u',
|
|
7769
|
+
Condition => '$$self{IntervalShooting} > 0',
|
|
7770
|
+
},
|
|
7771
|
+
164 => {
|
|
7772
|
+
Name => 'IntervalDurationMinutes',
|
|
7773
|
+
Format => 'int32u',
|
|
7774
|
+
Condition => '$$self{IntervalShooting} > 0',
|
|
7775
|
+
},
|
|
7776
|
+
168 => {
|
|
7777
|
+
Name => 'IntervalDurationSeconds',
|
|
7778
|
+
Format => 'int32u',
|
|
7779
|
+
Condition => '$$self{IntervalShooting} > 0',
|
|
7780
|
+
},
|
|
7781
|
+
176 => {
|
|
7782
|
+
Name => 'Intervals',
|
|
7783
|
+
Format => 'int32u',
|
|
7784
|
+
RawConv => '$$self{IntervalShootingIntervals} = $val',
|
|
7785
|
+
Condition => '$$self{IntervalShooting} > 0',
|
|
7786
|
+
},
|
|
7787
|
+
180 => {
|
|
7788
|
+
Name => 'ShotsPerInterval',
|
|
7789
|
+
Format => 'int32u',
|
|
7790
|
+
RawConv => '$$self{IntervalShootingShotsPerInterval} = $val',
|
|
7791
|
+
Condition => '$$self{IntervalShooting} > 0',
|
|
7792
|
+
},
|
|
7793
|
+
184 => {
|
|
7794
|
+
Name => 'IntervalExposureSmoothing',
|
|
7795
|
+
Condition => '$$self{IntervalShooting} > 0',
|
|
7796
|
+
Format => 'int8u',
|
|
7797
|
+
PrintConv => \%offOn,
|
|
7798
|
+
},
|
|
7799
|
+
186 => {
|
|
7800
|
+
Name => 'IntervalPriority',
|
|
7801
|
+
Condition => '$$self{IntervalShooting} > 0',
|
|
7802
|
+
Format => 'int8u',
|
|
7803
|
+
PrintConv => \%offOn,
|
|
7804
|
+
},
|
|
7805
|
+
220 => {
|
|
7806
|
+
Name => 'FocusShiftNumberShots',
|
|
7807
|
+
},
|
|
7808
|
+
224 => {
|
|
7809
|
+
Name => 'FocusShiftStepWidth',
|
|
7810
|
+
},
|
|
7811
|
+
228 => {
|
|
7812
|
+
Name => 'FocusShiftInterval',
|
|
7813
|
+
PrintConv => '$val == 1? "1 Second" : sprintf("%.0f Seconds",$val)',
|
|
7814
|
+
},
|
|
7815
|
+
232 => {
|
|
7816
|
+
Name => 'FocusShiftExposureLock',
|
|
7817
|
+
PrintConv => \%offOn,
|
|
7818
|
+
},
|
|
7819
|
+
#304 => White Balance - Kelvin Temp
|
|
7820
|
+
#312 => ColorSpace
|
|
7821
|
+
#314 => ActiveD-Lighting
|
|
7822
|
+
#318 => HighISONoiseReduction
|
|
7823
|
+
322 => {
|
|
7824
|
+
Name => 'DiffractionCompensation',
|
|
7825
|
+
Format => 'int8u',
|
|
7826
|
+
PrintConv => \%offOn,
|
|
7827
|
+
},
|
|
7828
|
+
323 => {
|
|
7829
|
+
Name => 'AutoDistortionControl',
|
|
7830
|
+
Format => 'int8u',
|
|
7831
|
+
PrintConv => \%offOn,
|
|
7832
|
+
},
|
|
7833
|
+
#324 => {Name => 'FlickerReductionShooting',}, # redundant with tag in NikonSettings
|
|
7834
|
+
326 => {
|
|
7835
|
+
Name => 'NikonMeteringMode',
|
|
7836
|
+
Unknown => 1,
|
|
7837
|
+
PrintConv => {
|
|
7838
|
+
0 => 'Matrix',
|
|
7839
|
+
1 => 'Center',
|
|
7840
|
+
2 => 'Spot',
|
|
7841
|
+
3 => 'Highlight'
|
|
7842
|
+
},
|
|
7843
|
+
},
|
|
7844
|
+
328 => {
|
|
7845
|
+
Name => 'FlashControlMode', # this and nearby tag values for flash may be set from either the Photo Shooting Menu or using the Flash unit menu
|
|
7846
|
+
RawConv => '$$self{FlashControlMode} = $val',
|
|
7847
|
+
PrintConv => {
|
|
7848
|
+
0 => 'TTL',
|
|
7849
|
+
1 => 'Auto External Flash',
|
|
7850
|
+
2 => 'GN (distance priority)',
|
|
7851
|
+
3 => 'Manual',
|
|
7852
|
+
4 => 'Repeating Flash',
|
|
7853
|
+
},
|
|
7854
|
+
},
|
|
7855
|
+
334 => {
|
|
7856
|
+
Name => 'FlashGNDistance',
|
|
7857
|
+
Condition => '$$self{FlashControlMode} == 2',
|
|
7858
|
+
Unknown => 1,
|
|
7859
|
+
ValueConv => '$val + 3',
|
|
7860
|
+
PrintConv => \%flashGNDistance,
|
|
7861
|
+
},
|
|
7862
|
+
338 => {
|
|
7863
|
+
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)
|
|
7864
|
+
Condition => '$$self{FlashControlMode} >= 3',
|
|
7865
|
+
Unknown => 1,
|
|
7866
|
+
ValueConv => '2 ** (-$val/3)',
|
|
7867
|
+
ValueConvInv => '$val>0 ? -3*log($val)/log(2) : 0',
|
|
7868
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.1f%%",$val*100)',
|
|
7869
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
7870
|
+
},
|
|
7871
|
+
346 => {
|
|
7872
|
+
Name => 'FlashWirelessOption', # also found in FlashInfoUnknown at offset 0x23 (with different mappings)
|
|
7873
|
+
Unknown => 1,
|
|
7874
|
+
PrintConv => {
|
|
7875
|
+
0 => 'Off',
|
|
7876
|
+
1 => 'Optical AWL',
|
|
7877
|
+
2 => 'Optical/Radio AWL',
|
|
7878
|
+
3 => 'Radio AWL'
|
|
7879
|
+
},
|
|
7880
|
+
},
|
|
7881
|
+
348 => {
|
|
7882
|
+
Name => 'FlashRemoteControl', # also found in FlashInfoUnknown at offset 0x1e (with different mappings)
|
|
7883
|
+
Unknown => 1,
|
|
7884
|
+
PrintConv => {
|
|
7885
|
+
0 => 'Group',
|
|
7886
|
+
1 => 'Quick Wireless',
|
|
7887
|
+
2 => 'Remote Repeating',
|
|
7888
|
+
},
|
|
7889
|
+
},
|
|
7890
|
+
352 => {
|
|
7891
|
+
Name => 'FlashMasterControlMode', # tag name chosen for compatibility with those found in FlashInfo0102 & FlashInfo0103
|
|
7892
|
+
RawConv => '$$self{FlashGroupOptionsMasterMode} = $val',
|
|
7893
|
+
PrintConv => \%flashGroupOptionsMode,
|
|
7894
|
+
},
|
|
7895
|
+
354 => {
|
|
7896
|
+
Name => 'FlashMasterCompensation',
|
|
7897
|
+
Format => 'int8s',
|
|
7898
|
+
Condition => '$$self{FlashGroupOptionsMasterMode} != 3', # other than 'Off'
|
|
7899
|
+
Unknown => 1,
|
|
7900
|
+
ValueConv => '$val/6',
|
|
7901
|
+
ValueConvInv => '6 * $val',
|
|
7902
|
+
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
|
7903
|
+
PrintConvInv => '$val',
|
|
7904
|
+
},
|
|
7905
|
+
358 => {
|
|
7906
|
+
Name => 'FlashMasterOutput',
|
|
7907
|
+
Unknown => 1,
|
|
7908
|
+
Condition => '$$self{FlashGroupOptionsMasterMode} == 1', # only for Mode=M
|
|
7909
|
+
ValueConv => '2 ** (-$val/3)',
|
|
7910
|
+
ValueConvInv => '$val>0 ? -3*log($val)/log(2) : 0',
|
|
7911
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.1f%%",$val*100)',
|
|
7912
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
7913
|
+
},
|
|
7914
|
+
#360 => {Name => 'FlashGroupAControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupACompensation at 362 and FlashGroupAOutput at 368
|
|
7915
|
+
#368 => {Name => 'FlashGroupBControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupBCompensation at 370 and FlashGroupBOutput at 374
|
|
7916
|
+
#376 => {Name => 'FlashGroupCControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupCCompensation at 378 and FlashGroupCOutput at 382
|
|
7917
|
+
#384 => {Name => 'FlashGroupDControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupDCompensation at 386 and FlashGroupDOutput at 390
|
|
7918
|
+
#392 => {Name => 'FlashGroupEControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupECompensation at 394 and FlashGroupEOutput at 398
|
|
7919
|
+
#400 => {Name => 'FlashGroupFControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupFCompensation at 402 and FlashGroupFOutput at 406
|
|
7920
|
+
#434 => FocusMode
|
|
7921
|
+
#436 => AFAreaMode
|
|
7922
|
+
#438 => VibrationReduction
|
|
7923
|
+
#442 => BracketSet
|
|
7924
|
+
#444 => BracketProgram
|
|
7925
|
+
#446 => BracketIncrement
|
|
7926
|
+
#463 => SilentPhotography
|
|
7927
|
+
502 => {
|
|
7928
|
+
Name => 'MovieFrameSize', # may want to rename or suppress the movie menu settings - potentially confusing for still photographers
|
|
7929
|
+
Unknown => 1,
|
|
7930
|
+
PrintConv => {
|
|
7931
|
+
1 => '1920x1080',
|
|
7932
|
+
2 => '3840x2160',
|
|
7933
|
+
},
|
|
7934
|
+
},
|
|
7935
|
+
504 => {
|
|
7936
|
+
Name => 'MovieFrameRate',
|
|
7937
|
+
Unknown => 1,
|
|
7938
|
+
PrintConv => {
|
|
7939
|
+
0 => '120p',
|
|
7940
|
+
1 => '100p',
|
|
7941
|
+
2 => '60p',
|
|
7942
|
+
3 => '50p',
|
|
7943
|
+
4 => '30p',
|
|
7944
|
+
5 => '25p',
|
|
7945
|
+
6 => '24p',
|
|
7946
|
+
},
|
|
7947
|
+
},
|
|
7948
|
+
506 => {
|
|
7949
|
+
Name => 'MovieSlowMotion',
|
|
7950
|
+
Unknown => 1,
|
|
7951
|
+
PrintConv => {
|
|
7952
|
+
0 => 'Off',
|
|
7953
|
+
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]
|
|
7954
|
+
2 => 'On (5x)', # 120p recording with playback @ 24p [1920 x 1080; 20p x 5]
|
|
7955
|
+
},
|
|
7956
|
+
},
|
|
7957
|
+
510 => {
|
|
7958
|
+
Name => 'MovieType',
|
|
7959
|
+
Unknown => 1,
|
|
7960
|
+
PrintConv => {
|
|
7961
|
+
0 => 'MOV',
|
|
7962
|
+
1 => 'MP4',
|
|
7963
|
+
},
|
|
7964
|
+
},
|
|
7965
|
+
#512 => MovieISOAutoHiLimit
|
|
7966
|
+
516 => {
|
|
7967
|
+
Name => 'MovieISOAutoManualMode',
|
|
7968
|
+
Condition => '$$self{Model} =~ /^NIKON 7/', #ISO ranges vary by model. These mappings are for the Z7 and Z7II
|
|
7969
|
+
Format => 'int16u',
|
|
7970
|
+
Unknown => 1,
|
|
7971
|
+
ValueConv => '($val-104)/8',
|
|
7972
|
+
PrintConv => {
|
|
7973
|
+
0 => 'ISO 64',
|
|
7974
|
+
1 => 'ISO 80',
|
|
7975
|
+
2 => 'ISO 100',
|
|
7976
|
+
3 => 'ISO 125',
|
|
7977
|
+
4 => 'ISO 160',
|
|
7978
|
+
5 => 'ISO 200',
|
|
7979
|
+
6 => 'ISO 250',
|
|
7980
|
+
7 => 'ISO 320',
|
|
7981
|
+
8 => 'ISO 400',
|
|
7982
|
+
9 => 'ISO 500',
|
|
7983
|
+
10 => 'ISO 640',
|
|
7984
|
+
11 => 'ISO 800',
|
|
7985
|
+
12 => 'ISO 1000',
|
|
7986
|
+
13 => 'ISO 1250',
|
|
7987
|
+
14 => 'ISO 1600',
|
|
7988
|
+
15 => 'ISO 2000',
|
|
7989
|
+
16 => 'ISO 2500',
|
|
7990
|
+
17 => 'ISO 3200',
|
|
7991
|
+
18 => 'ISO 4000',
|
|
7992
|
+
19 => 'ISO 5000',
|
|
7993
|
+
20 => 'ISO 6400',
|
|
7994
|
+
21 => 'ISO 8000',
|
|
7995
|
+
22 => 'ISO 10000',
|
|
7996
|
+
23 => 'ISO 12800',
|
|
7997
|
+
24 => 'ISO 16000',
|
|
7998
|
+
25 => 'ISO 20000',
|
|
7999
|
+
26 => 'ISO 25600',
|
|
8000
|
+
27 => 'ISO Hi 0.3',
|
|
8001
|
+
28 => 'ISO Hi 0.7',
|
|
8002
|
+
29 => 'ISO Hi 1.0',
|
|
8003
|
+
32 => 'ISO Hi 2.0',
|
|
8004
|
+
},
|
|
8005
|
+
},
|
|
8006
|
+
#520 => MovieWhiteBalanceSameAsPhoto
|
|
8007
|
+
568 => {
|
|
8008
|
+
Name => 'MovieActiveD-Lighting',
|
|
8009
|
+
Unknown => 1,
|
|
8010
|
+
PrintConv => {
|
|
8011
|
+
0 => 'Off',
|
|
8012
|
+
2 => 'Low',
|
|
8013
|
+
3 => 'Normal',
|
|
8014
|
+
4 => 'High',
|
|
8015
|
+
5 => 'Extra High',
|
|
8016
|
+
},
|
|
8017
|
+
},
|
|
8018
|
+
572 => {
|
|
8019
|
+
Name => 'MovieHighISONoiseReduction',
|
|
8020
|
+
Unknown => 1,
|
|
8021
|
+
PrintConv => {
|
|
8022
|
+
0 => 'Off',
|
|
8023
|
+
1 => 'Low',
|
|
8024
|
+
2 => 'Normal',
|
|
8025
|
+
3 => 'High',
|
|
8026
|
+
},
|
|
8027
|
+
},
|
|
8028
|
+
574=> {
|
|
8029
|
+
Name => 'MovieVignetteControl',
|
|
8030
|
+
Unknown => 1,
|
|
8031
|
+
PrintConv => {
|
|
8032
|
+
0 => 'Off',
|
|
8033
|
+
1 => 'Low',
|
|
8034
|
+
2 => 'Normal',
|
|
8035
|
+
3 => 'High',
|
|
8036
|
+
},
|
|
8037
|
+
},
|
|
8038
|
+
576 => {
|
|
8039
|
+
Name => 'MovieVignetteControlSameAsPhoto',
|
|
8040
|
+
Unknown => 1,
|
|
8041
|
+
PrintConv => \%noYes
|
|
8042
|
+
},
|
|
8043
|
+
5771 => {
|
|
8044
|
+
Name => 'MovieDiffrationCompensation',
|
|
8045
|
+
Unknown => 1,
|
|
8046
|
+
PrintConv => \%offOn
|
|
8047
|
+
},
|
|
8048
|
+
578 => {
|
|
8049
|
+
Name => 'MovieAutoDistortionControl',
|
|
8050
|
+
Unknown => 1,
|
|
8051
|
+
PrintConv => \%offOn
|
|
8052
|
+
},
|
|
8053
|
+
584 => {
|
|
8054
|
+
Name => 'MovieFocusMode',
|
|
8055
|
+
Unknown => 1,
|
|
8056
|
+
PrintConv => {
|
|
8057
|
+
0 => 'Manual',
|
|
8058
|
+
1 => 'AF-S',
|
|
8059
|
+
2 => 'AF-C',
|
|
8060
|
+
4 => 'AF-F', # full frame
|
|
8061
|
+
},
|
|
8062
|
+
},
|
|
8063
|
+
#586 => MovieAFAreaMode
|
|
8064
|
+
590 => {
|
|
8065
|
+
Name => 'MovieVibrationReduction',
|
|
8066
|
+
Unknown => 1,
|
|
8067
|
+
PrintConv => {
|
|
8068
|
+
0 => 'Off',
|
|
8069
|
+
1 => 'On (Normal)',
|
|
8070
|
+
2 => 'On (Sport)',
|
|
8071
|
+
},
|
|
8072
|
+
},
|
|
8073
|
+
591 => {
|
|
8074
|
+
Name => 'MovieVibrationReductionSameAsPhoto',
|
|
8075
|
+
Unknown => 1,
|
|
8076
|
+
PrintConv => \%noYes
|
|
8077
|
+
},
|
|
8078
|
+
#848 => HDMIOutputResolution
|
|
8079
|
+
#850 => HDMIOutputRange
|
|
8080
|
+
#854 => HDMIExternalRecorder
|
|
8081
|
+
#856 => HDMIBitDepth
|
|
8082
|
+
858 => {
|
|
8083
|
+
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
|
|
8084
|
+
Condition => '$$self{HDMIBitDepth} and $$self{HDMIBitDepth} == 2', # only for 10 bit
|
|
8085
|
+
RawConv => '$$self{HDMIOutputNLog} = $val',
|
|
8086
|
+
Unknown => 1,
|
|
8087
|
+
PrintConv => \%offOn,
|
|
8088
|
+
},
|
|
8089
|
+
#859 => HDMIViewAssist
|
|
8090
|
+
);
|
|
8091
|
+
# Flash information (ref JD)
|
|
8092
|
+
%Image::ExifTool::Nikon::FlashInfo0100 = (
|
|
8093
|
+
%binaryDataAttrs,
|
|
8094
|
+
DATAMEMBER => [ 9.2, 15, 16 ],
|
|
8095
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
8096
|
+
NOTES => q{
|
|
8097
|
+
These tags are used by the D2H, D2Hs, D2X, D2Xs, D50, D70, D70s, D80 and
|
|
8098
|
+
D200.
|
|
8099
|
+
},
|
|
8100
|
+
# NOTE: Must set ByteOrder in SubDirectory if any multi-byte integer tags added
|
|
8101
|
+
0 => {
|
|
8102
|
+
Name => 'FlashInfoVersion',
|
|
8103
|
+
Format => 'string[4]',
|
|
8104
|
+
Writable => 0,
|
|
8105
|
+
},
|
|
8106
|
+
4 => { #PH
|
|
8107
|
+
Name => 'FlashSource',
|
|
8108
|
+
PrintConv => {
|
|
8109
|
+
0 => 'None',
|
|
8110
|
+
1 => 'External',
|
|
8111
|
+
2 => 'Internal',
|
|
8112
|
+
},
|
|
8113
|
+
},
|
|
8114
|
+
# 5 - values: 46,48,50,54,78
|
|
8115
|
+
6 => {
|
|
8116
|
+
Format => 'int8u[2]',
|
|
8117
|
+
Name => 'ExternalFlashFirmware',
|
|
8118
|
+
SeparateTable => 'FlashFirmware',
|
|
8119
|
+
PrintConv => \%flashFirmware,
|
|
8120
|
+
},
|
|
8121
|
+
8 => {
|
|
8122
|
+
Name => 'ExternalFlashFlags',
|
|
8123
|
+
PrintConv => { 0 => '(none)',
|
|
8124
|
+
BITMASK => {
|
|
8125
|
+
0 => 'Fired', #28
|
|
8126
|
+
2 => 'Bounce Flash', #PH
|
|
8127
|
+
4 => 'Wide Flash Adapter',
|
|
8128
|
+
5 => 'Dome Diffuser', #28
|
|
8129
|
+
},
|
|
8130
|
+
},
|
|
8131
|
+
},
|
|
8132
|
+
9.1 => {
|
|
8133
|
+
Name => 'FlashCommanderMode',
|
|
8134
|
+
Mask => 0x80,
|
|
8135
|
+
PrintConv => { 0 => 'Off', 1 => 'On' },
|
|
8136
|
+
},
|
|
8137
|
+
9.2 => {
|
|
8138
|
+
Name => 'FlashControlMode',
|
|
8139
|
+
Mask => 0x7f,
|
|
8140
|
+
DataMember => 'FlashControlMode',
|
|
8141
|
+
RawConv => '$$self{FlashControlMode} = $val',
|
|
8142
|
+
PrintConv => \%flashControlMode,
|
|
8143
|
+
SeparateTable => 'FlashControlMode',
|
|
8144
|
+
},
|
|
8145
|
+
10 => [
|
|
8146
|
+
{
|
|
8147
|
+
Name => 'FlashOutput',
|
|
8148
|
+
Condition => '$$self{FlashControlMode} >= 0x06',
|
|
8149
|
+
ValueConv => '2 ** (-$val/6)',
|
|
8150
|
+
ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
|
|
8151
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
|
|
8152
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
8153
|
+
},
|
|
8154
|
+
{
|
|
8155
|
+
Name => 'FlashCompensation',
|
|
8156
|
+
Format => 'int8s',
|
|
8157
|
+
Priority => 0,
|
|
8158
|
+
ValueConv => '-$val/6',
|
|
8159
|
+
ValueConvInv => '-6 * $val',
|
|
8160
|
+
PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)',
|
|
8161
|
+
PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
|
|
8162
|
+
},
|
|
8163
|
+
],
|
|
8164
|
+
11 => {
|
|
8165
|
+
Name => 'FlashFocalLength',
|
|
8166
|
+
RawConv => '$val ? $val : undef',
|
|
8167
|
+
PrintConv => '"$val mm"',
|
|
8168
|
+
PrintConvInv => '$val=~/(\d+)/; $1 || 0',
|
|
8169
|
+
},
|
|
8170
|
+
12 => {
|
|
8171
|
+
Name => 'RepeatingFlashRate',
|
|
8172
|
+
RawConv => '$val ? $val : undef',
|
|
8173
|
+
PrintConv => '"$val Hz"',
|
|
8174
|
+
PrintConvInv => '$val=~/(\d+)/; $1 || 0',
|
|
8175
|
+
},
|
|
8176
|
+
13 => {
|
|
8177
|
+
Name => 'RepeatingFlashCount',
|
|
8178
|
+
RawConv => '$val ? $val : undef',
|
|
8179
|
+
},
|
|
8180
|
+
14 => { #PH
|
|
8181
|
+
Name => 'FlashGNDistance',
|
|
8182
|
+
SeparateTable => 1,
|
|
8183
|
+
PrintConv => \%flashGNDistance,
|
|
8184
|
+
},
|
|
8185
|
+
15 => {
|
|
8186
|
+
Name => 'FlashGroupAControlMode',
|
|
8187
|
+
Mask => 0x0f,
|
|
8188
|
+
DataMember => 'FlashGroupAControlMode',
|
|
8189
|
+
RawConv => '$$self{FlashGroupAControlMode} = $val',
|
|
8190
|
+
PrintConv => \%flashControlMode,
|
|
8191
|
+
SeparateTable => 'FlashControlMode',
|
|
8192
|
+
},
|
|
8193
|
+
16 => {
|
|
8194
|
+
Name => 'FlashGroupBControlMode',
|
|
8195
|
+
Mask => 0x0f,
|
|
8196
|
+
DataMember => 'FlashGroupBControlMode',
|
|
8197
|
+
RawConv => '$$self{FlashGroupBControlMode} = $val',
|
|
8198
|
+
PrintConv => \%flashControlMode,
|
|
8199
|
+
SeparateTable => 'FlashControlMode',
|
|
8200
|
+
},
|
|
8201
|
+
17 => [
|
|
8202
|
+
{
|
|
8203
|
+
Name => 'FlashGroupAOutput',
|
|
8204
|
+
Condition => '$$self{FlashGroupAControlMode} >= 0x06',
|
|
8205
|
+
ValueConv => '2 ** (-$val/6)',
|
|
8206
|
+
ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
|
|
8207
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
|
|
8208
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
8209
|
+
},
|
|
8210
|
+
{
|
|
8211
|
+
Name => 'FlashGroupACompensation',
|
|
8212
|
+
Format => 'int8s',
|
|
8213
|
+
ValueConv => '-$val/6',
|
|
8214
|
+
ValueConvInv => '-6 * $val',
|
|
8215
|
+
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
|
8216
|
+
PrintConvInv => '$val',
|
|
8217
|
+
},
|
|
8218
|
+
],
|
|
8219
|
+
18 => [
|
|
8220
|
+
{
|
|
8221
|
+
Name => 'FlashGroupBOutput',
|
|
8222
|
+
Condition => '$$self{FlashGroupBControlMode} >= 0x06',
|
|
8223
|
+
ValueConv => '2 ** (-$val/6)',
|
|
8224
|
+
ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
|
|
8225
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
|
|
8226
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
8227
|
+
},
|
|
8228
|
+
{
|
|
8229
|
+
Name => 'FlashGroupBCompensation',
|
|
8230
|
+
Format => 'int8s',
|
|
8231
|
+
ValueConv => '-$val/6',
|
|
8232
|
+
ValueConvInv => '-6 * $val',
|
|
8233
|
+
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
|
8234
|
+
PrintConvInv => '$val',
|
|
8235
|
+
},
|
|
8236
|
+
],
|
|
8237
|
+
);
|
|
8238
|
+
|
|
8239
|
+
# Flash information for D40, D40x, D3 and D300 (ref JD)
|
|
8240
|
+
%Image::ExifTool::Nikon::FlashInfo0102 = (
|
|
8241
|
+
%binaryDataAttrs,
|
|
8242
|
+
DATAMEMBER => [ 9.2, 16.1, 17.1, 17.2 ],
|
|
8243
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
8244
|
+
NOTES => q{
|
|
8245
|
+
These tags are used by the D3 (firmware 1.x), D40, D40X, D60 and D300
|
|
8246
|
+
(firmware 1.00).
|
|
8247
|
+
},
|
|
8248
|
+
# NOTE: Must set ByteOrder in SubDirectory if any multi-byte integer tags added
|
|
8249
|
+
0 => {
|
|
8250
|
+
Name => 'FlashInfoVersion',
|
|
8251
|
+
Format => 'string[4]',
|
|
8252
|
+
Writable => 0,
|
|
8253
|
+
},
|
|
8254
|
+
4 => { #PH
|
|
8255
|
+
Name => 'FlashSource',
|
|
8256
|
+
PrintConv => {
|
|
8257
|
+
0 => 'None',
|
|
8258
|
+
1 => 'External',
|
|
8259
|
+
2 => 'Internal',
|
|
8260
|
+
},
|
|
8261
|
+
},
|
|
8262
|
+
# 5 - values: 46,48,50,54,78
|
|
8263
|
+
6 => {
|
|
8264
|
+
Format => 'int8u[2]',
|
|
8265
|
+
Name => 'ExternalFlashFirmware',
|
|
8266
|
+
SeparateTable => 'FlashFirmware',
|
|
8267
|
+
PrintConv => \%flashFirmware,
|
|
8268
|
+
},
|
|
8269
|
+
8 => {
|
|
8270
|
+
Name => 'ExternalFlashFlags',
|
|
8271
|
+
PrintConv => { BITMASK => {
|
|
8272
|
+
0 => 'Fired', #28
|
|
8273
|
+
2 => 'Bounce Flash', #PH
|
|
8274
|
+
4 => 'Wide Flash Adapter',
|
|
8275
|
+
5 => 'Dome Diffuser', #28
|
|
8276
|
+
}},
|
|
8277
|
+
},
|
|
8278
|
+
9.1 => {
|
|
8279
|
+
Name => 'FlashCommanderMode',
|
|
8280
|
+
Mask => 0x80,
|
|
8281
|
+
PrintConv => { 0 => 'Off', 1 => 'On' },
|
|
8282
|
+
},
|
|
8283
|
+
9.2 => {
|
|
8284
|
+
Name => 'FlashControlMode',
|
|
8285
|
+
Mask => 0x7f,
|
|
8286
|
+
DataMember => 'FlashControlMode',
|
|
8287
|
+
RawConv => '$$self{FlashControlMode} = $val',
|
|
8288
|
+
PrintConv => \%flashControlMode,
|
|
8289
|
+
SeparateTable => 'FlashControlMode',
|
|
8290
|
+
},
|
|
8291
|
+
10 => [
|
|
8292
|
+
{
|
|
8293
|
+
Name => 'FlashOutput',
|
|
8294
|
+
Condition => '$$self{FlashControlMode} >= 0x06',
|
|
8295
|
+
ValueConv => '2 ** (-$val/6)',
|
|
8296
|
+
ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
|
|
8297
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
|
|
8298
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
8299
|
+
},
|
|
8300
|
+
{
|
|
8301
|
+
Name => 'FlashCompensation',
|
|
8302
|
+
# this is the compensation from the camera (0x0012) for "Built-in" FlashType, or
|
|
8303
|
+
# the compensation from the external unit (0x0017) for "Optional" FlashType - PH
|
|
8304
|
+
Format => 'int8s',
|
|
8305
|
+
Priority => 0,
|
|
8306
|
+
ValueConv => '-$val/6',
|
|
8307
|
+
ValueConvInv => '-6 * $val',
|
|
8308
|
+
PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)',
|
|
8309
|
+
PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
|
|
8310
|
+
},
|
|
8311
|
+
],
|
|
8312
|
+
12 => {
|
|
8313
|
+
Name => 'FlashFocalLength',
|
|
8314
|
+
RawConv => '$val ? $val : undef',
|
|
8315
|
+
PrintConv => '"$val mm"',
|
|
8316
|
+
PrintConvInv => '$val=~/(\d+)/; $1 || 0',
|
|
8317
|
+
},
|
|
8318
|
+
13 => {
|
|
8319
|
+
Name => 'RepeatingFlashRate',
|
|
8320
|
+
RawConv => '$val ? $val : undef',
|
|
8321
|
+
PrintConv => '"$val Hz"',
|
|
8322
|
+
PrintConvInv => '$val=~/(\d+)/; $1 || 0',
|
|
8323
|
+
},
|
|
8324
|
+
14 => {
|
|
8325
|
+
Name => 'RepeatingFlashCount',
|
|
8326
|
+
RawConv => '$val ? $val : undef',
|
|
8327
|
+
},
|
|
8328
|
+
15 => { #PH
|
|
8329
|
+
Name => 'FlashGNDistance',
|
|
8330
|
+
SeparateTable => 1,
|
|
8331
|
+
PrintConv => \%flashGNDistance,
|
|
8332
|
+
},
|
|
8333
|
+
16.1 => {
|
|
8334
|
+
Name => 'FlashGroupAControlMode',
|
|
8335
|
+
Mask => 0x0f,
|
|
8336
|
+
Notes => 'note: group A tags may apply to the built-in flash settings for some models',
|
|
8337
|
+
DataMember => 'FlashGroupAControlMode',
|
|
8338
|
+
RawConv => '$$self{FlashGroupAControlMode} = $val',
|
|
8339
|
+
PrintConv => \%flashControlMode,
|
|
8340
|
+
SeparateTable => 'FlashControlMode',
|
|
8341
|
+
},
|
|
8342
|
+
17.1 => {
|
|
8343
|
+
Name => 'FlashGroupBControlMode',
|
|
8344
|
+
Mask => 0xf0,
|
|
8345
|
+
Notes => 'note: group B tags may apply to group A settings for some models',
|
|
8346
|
+
DataMember => 'FlashGroupBControlMode',
|
|
8347
|
+
RawConv => '$$self{FlashGroupBControlMode} = $val',
|
|
8348
|
+
PrintConv => \%flashControlMode,
|
|
8349
|
+
SeparateTable => 'FlashControlMode',
|
|
8350
|
+
},
|
|
8351
|
+
17.2 => { #PH
|
|
8352
|
+
Name => 'FlashGroupCControlMode',
|
|
8353
|
+
Mask => 0x0f,
|
|
8354
|
+
Notes => 'note: group C tags may apply to group B settings for some models',
|
|
8355
|
+
DataMember => 'FlashGroupCControlMode',
|
|
8356
|
+
RawConv => '$$self{FlashGroupCControlMode} = $val',
|
|
8357
|
+
PrintConv => \%flashControlMode,
|
|
8358
|
+
SeparateTable => 'FlashControlMode',
|
|
8359
|
+
},
|
|
8360
|
+
18 => [
|
|
8361
|
+
{
|
|
8362
|
+
Name => 'FlashGroupAOutput',
|
|
8363
|
+
Condition => '$$self{FlashGroupAControlMode} >= 0x06',
|
|
8364
|
+
ValueConv => '2 ** (-$val/6)',
|
|
8365
|
+
ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
|
|
8366
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
|
|
8367
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
8368
|
+
},
|
|
8369
|
+
{
|
|
8370
|
+
Name => 'FlashGroupACompensation',
|
|
8371
|
+
Format => 'int8s',
|
|
8372
|
+
ValueConv => '-$val/6',
|
|
8373
|
+
ValueConvInv => '-6 * $val',
|
|
8374
|
+
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
|
8375
|
+
PrintConvInv => '$val',
|
|
8376
|
+
},
|
|
8377
|
+
],
|
|
8378
|
+
19 => [
|
|
8379
|
+
{
|
|
8380
|
+
Name => 'FlashGroupBOutput',
|
|
8381
|
+
Condition => '$$self{FlashGroupBControlMode} >= 0x60',
|
|
8382
|
+
ValueConv => '2 ** (-$val/6)',
|
|
8383
|
+
ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
|
|
8384
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
|
|
8385
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
8386
|
+
},
|
|
8387
|
+
{
|
|
8388
|
+
Name => 'FlashGroupBCompensation',
|
|
8389
|
+
Format => 'int8s',
|
|
8390
|
+
ValueConv => '-$val/6',
|
|
8391
|
+
ValueConvInv => '-6 * $val',
|
|
8392
|
+
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
|
8393
|
+
PrintConvInv => '$val',
|
|
8394
|
+
},
|
|
8395
|
+
],
|
|
8396
|
+
20 => [ #PH
|
|
8397
|
+
{
|
|
8398
|
+
Name => 'FlashGroupCOutput',
|
|
8399
|
+
Condition => '$$self{FlashGroupCControlMode} >= 0x06',
|
|
8400
|
+
ValueConv => '2 ** (-$val/6)',
|
|
8401
|
+
ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
|
|
8402
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
|
|
8403
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
8404
|
+
},
|
|
8405
|
+
{
|
|
8406
|
+
Name => 'FlashGroupCCompensation',
|
|
8407
|
+
Format => 'int8s',
|
|
8408
|
+
ValueConv => '-$val/6',
|
|
8409
|
+
ValueConvInv => '-6 * $val',
|
|
8410
|
+
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
|
8411
|
+
PrintConvInv => '$val',
|
|
8412
|
+
},
|
|
8413
|
+
],
|
|
7440
8414
|
);
|
|
7441
8415
|
|
|
7442
8416
|
# Flash information (ref JD)
|