exiftool_vendored 12.34.0 → 12.38.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 +61 -2
- 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 +6 -2
- data/bin/lib/Image/ExifTool/Canon.pm +143 -9
- data/bin/lib/Image/ExifTool/CanonCustom.pm +12 -2
- 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 +3 -3
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +108 -11
- data/bin/lib/Image/ExifTool/Nikon.pm +1203 -96
- data/bin/lib/Image/ExifTool/NikonCustom.pm +5 -1
- data/bin/lib/Image/ExifTool/NikonSettings.pm +135 -71
- data/bin/lib/Image/ExifTool/OpenEXR.pm +4 -2
- data/bin/lib/Image/ExifTool/PNG.pm +1 -0
- data/bin/lib/Image/ExifTool/QuickTime.pm +14 -2
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +26 -1
- data/bin/lib/Image/ExifTool/Sony.pm +3 -1
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +9 -4
- data/bin/lib/Image/ExifTool/TagLookup.pm +6363 -5846
- data/bin/lib/Image/ExifTool/TagNames.pod +1215 -39
- data/bin/lib/Image/ExifTool/WriteXMP.pl +10 -11
- data/bin/lib/Image/ExifTool/Writer.pl +10 -5
- data/bin/lib/Image/ExifTool/XMP.pm +110 -24
- data/bin/lib/Image/ExifTool/XMP2.pl +1 -1
- data/bin/lib/Image/ExifTool.pm +51 -12
- 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.03';
|
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,31 @@ 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 %nefCompression = ( #28 relocated to MakerNotes_0x51 at offset x'0a (Z9)
|
1071
|
+
1 => 'Lossy (type 1)', # (older models)
|
1072
|
+
2 => 'Uncompressed', #JD - D100 (even though TIFF compression is set!)
|
1073
|
+
3 => 'Lossless',
|
1074
|
+
4 => 'Lossy (type 2)',
|
1075
|
+
5 => 'Striped packed 12 bits', #IB
|
1076
|
+
6 => 'Uncompressed (reduced to 12 bit)', #IB
|
1077
|
+
7 => 'Unpacked 12 bits', #IB (padded to 16)
|
1078
|
+
8 => 'Small', #IB
|
1079
|
+
9 => 'Packed 12 bits', #IB (2 pixels in 3 bytes)
|
1080
|
+
10 => 'Packed 14 bits', #28 (4 pixels in 7 bytes, eg. D6 uncompressed 14 bit)
|
1081
|
+
13 => 'High Efficiency', #28
|
1082
|
+
14 => 'High Efficiency*', #28
|
1083
|
+
);
|
1084
|
+
|
1085
|
+
my %noYes = ( 0 => 'No' , 1 => 'Yes', );
|
1060
1086
|
my %offOn = ( 0 => 'Off', 1 => 'On' );
|
1087
|
+
my %onOff = ( 0 => 'On', 1 => 'Off' );
|
1061
1088
|
|
1062
1089
|
# common attributes for writable BinaryData directories
|
1063
1090
|
my %binaryDataAttrs = (
|
@@ -1464,6 +1491,16 @@ my %binaryDataAttrs = (
|
|
1464
1491
|
Name => 'ColorTemperatureAuto',
|
1465
1492
|
Writable => 'int16u',
|
1466
1493
|
},
|
1494
|
+
0x0051 => { #28 (Z9)
|
1495
|
+
Name => 'MakerNotes0x51',
|
1496
|
+
Writable => 'undef',
|
1497
|
+
Hidden => 1,
|
1498
|
+
Permanent => 0,
|
1499
|
+
Flags => [ 'Binary', 'Protected' ],
|
1500
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::MakerNotes0x51' },
|
1501
|
+
},
|
1502
|
+
#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)
|
1503
|
+
#0x005e #28 possibly DiffractionCompensation block? Certainly offset 0x04 within block contains tag DiffractionCompensation
|
1467
1504
|
0x0080 => { Name => 'ImageAdjustment', Writable => 'string' },
|
1468
1505
|
0x0081 => { Name => 'ToneComp', Writable => 'string' }, #2
|
1469
1506
|
0x0082 => { Name => 'AuxiliaryLens', Writable => 'string' },
|
@@ -1861,7 +1898,7 @@ my %binaryDataAttrs = (
|
|
1861
1898
|
SubDirectory => {
|
1862
1899
|
TagTable => 'Image::ExifTool::Nikon::ShotInfoD6',
|
1863
1900
|
DecryptStart => 4,
|
1864
|
-
DecryptLen =>
|
1901
|
+
DecryptLen => 0xc292 + 720, # thru decoded parts of Offset 32
|
1865
1902
|
ByteOrder => 'LittleEndian',
|
1866
1903
|
},
|
1867
1904
|
},
|
@@ -1876,12 +1913,23 @@ my %binaryDataAttrs = (
|
|
1876
1913
|
},
|
1877
1914
|
},
|
1878
1915
|
{ # (Z6_2 firmware version 1.00 and Z7_2 firmware versions 1.00 & 1.01, ref 28)
|
1879
|
-
|
1916
|
+
# 0800=Z6/Z7 0801=Z50 0802=Z5 0803=Z6II/Z7II 0804=Zfc
|
1917
|
+
Condition => '$$valPt =~ /^080[01234]/',
|
1880
1918
|
Name => 'ShotInfoZ7_2',
|
1881
1919
|
SubDirectory => {
|
1882
1920
|
TagTable => 'Image::ExifTool::Nikon::ShotInfoZ7_2',
|
1883
1921
|
DecryptStart => 4,
|
1884
|
-
DecryptLen =>
|
1922
|
+
DecryptLen => 0xcea6 + 1050, # thru decoded parts of Offset31
|
1923
|
+
ByteOrder => 'LittleEndian',
|
1924
|
+
},
|
1925
|
+
},
|
1926
|
+
{ # (Z9 firmware version 1.00 ref 28)
|
1927
|
+
Condition => '$$valPt =~ /^0805/',
|
1928
|
+
Name => 'ShotInfoZ9',
|
1929
|
+
SubDirectory => {
|
1930
|
+
TagTable => 'Image::ExifTool::Nikon::ShotInfoZ9',
|
1931
|
+
DecryptStart => 4,
|
1932
|
+
DecryptLen => 0xeb5b + 1050, # thru decoded parts of Offset27
|
1885
1933
|
ByteOrder => 'LittleEndian',
|
1886
1934
|
},
|
1887
1935
|
},
|
@@ -1914,18 +1962,8 @@ my %binaryDataAttrs = (
|
|
1914
1962
|
0x0093 => { #21
|
1915
1963
|
Name => 'NEFCompression',
|
1916
1964
|
Writable => 'int16u',
|
1917
|
-
|
1918
|
-
|
1919
|
-
2 => 'Uncompressed', #JD - D100 (even though TIFF compression is set!)
|
1920
|
-
3 => 'Lossless',
|
1921
|
-
4 => 'Lossy (type 2)',
|
1922
|
-
5 => 'Striped packed 12 bits', #IB
|
1923
|
-
6 => 'Uncompressed (reduced to 12 bit)', #IB
|
1924
|
-
7 => 'Unpacked 12 bits', #IB (padded to 16)
|
1925
|
-
8 => 'Small', #IB
|
1926
|
-
9 => 'Packed 12 bits', #IB (2 pixels in 3 bytes)
|
1927
|
-
10 => 'Packed 14 bits', #28 (4 pixels in 7 bytes, eg. D6 uncompressed 14 bit)
|
1928
|
-
},
|
1965
|
+
SeparateTable => 'NEFCompression',
|
1966
|
+
PrintConv => \%nefCompression,
|
1929
1967
|
},
|
1930
1968
|
0x0094 => { Name => 'SaturationAdj', Writable => 'int16s' },
|
1931
1969
|
0x0095 => { Name => 'NoiseReduction', Writable => 'string' }, # ("Off" or "FPNR"=long exposure NR)
|
@@ -2388,6 +2426,10 @@ my %binaryDataAttrs = (
|
|
2388
2426
|
Flags => [ 'Binary', 'Protected' ],
|
2389
2427
|
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::PictureControl' },
|
2390
2428
|
},
|
2429
|
+
0x00bf => {
|
2430
|
+
Name => 'SilentPhotography',
|
2431
|
+
PrintConv => \%offOn,
|
2432
|
+
},
|
2391
2433
|
0x00c3 => {
|
2392
2434
|
Name => 'BarometerInfo',
|
2393
2435
|
SubDirectory => {
|
@@ -6048,6 +6090,18 @@ my %nikonFocalConversions = (
|
|
6048
6090
|
3 => 'Rotate 180',
|
6049
6091
|
},
|
6050
6092
|
},
|
6093
|
+
0x0d0 => {
|
6094
|
+
Name => 'Interval',
|
6095
|
+
# prior version of the d% firmware do not support this tag, nor does the D500 (at least thru firmware 1.3)
|
6096
|
+
Condition => '$$self{Model} eq "NIKON D5" and $$self{FirmwareVersion} ge "1.40"',
|
6097
|
+
PrintConv => '$val > 0 ? sprintf("%.0f", $val) : ""',
|
6098
|
+
},
|
6099
|
+
0x0d4 => {
|
6100
|
+
Name => 'IntervalFrame',
|
6101
|
+
# prior version of the d% firmware do not support this tag, nor does the D500 (at least thru firmware 1.3)
|
6102
|
+
Condition => '$$self{Model} eq "NIKON D5" and $$self{FirmwareVersion} ge "1.40"',
|
6103
|
+
PrintConv => '$val > 0 ? sprintf("%.0f", $val) : ""',
|
6104
|
+
},
|
6051
6105
|
0x05e2 => {
|
6052
6106
|
Name => 'FlickerReductionIndicator',
|
6053
6107
|
Mask => 0x01,
|
@@ -6466,7 +6520,7 @@ my %nikonFocalConversions = (
|
|
6466
6520
|
WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted,
|
6467
6521
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
6468
6522
|
VARS => { ID_LABEL => 'Index' },
|
6469
|
-
DATAMEMBER => [ 0x9c, 0xc219 ],
|
6523
|
+
DATAMEMBER => [ 0x30, 0x60, 0x9c, 0xa4, 0x75e7, 0x760c, 0x7610, 0xc219, 0xc292, 0xc40e, 0xc412, 0xc4a6, 0xc4be ],
|
6470
6524
|
WRITABLE => 1,
|
6471
6525
|
FIRST_ENTRY => 0,
|
6472
6526
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
@@ -6476,6 +6530,11 @@ my %nikonFocalConversions = (
|
|
6476
6530
|
Format => 'string[4]',
|
6477
6531
|
Writable => 0,
|
6478
6532
|
},
|
6533
|
+
0x04 => {
|
6534
|
+
Name => 'FirmwareVersion',
|
6535
|
+
Format => 'string[8]',
|
6536
|
+
Writable => 0,
|
6537
|
+
},
|
6479
6538
|
0x24 => {
|
6480
6539
|
Name => 'NumberOffsets', # (number of entries in offset table. offsets are from start of ShotInfo data)
|
6481
6540
|
DataMember => 'NumberOffsets',
|
@@ -6483,6 +6542,22 @@ my %nikonFocalConversions = (
|
|
6483
6542
|
Writable => 0,
|
6484
6543
|
Hidden => 1,
|
6485
6544
|
},
|
6545
|
+
0x30 => {
|
6546
|
+
Name => 'Offset3',
|
6547
|
+
DataMember => 'Offset3',
|
6548
|
+
Format => 'int32u',
|
6549
|
+
Writable => 0,
|
6550
|
+
Hidden => 1,
|
6551
|
+
RawConv => '$$self{Offset3} = $val || 0x10000000; undef', # (ignore if 0)
|
6552
|
+
},
|
6553
|
+
0x60 => {
|
6554
|
+
Name => 'Offset15',
|
6555
|
+
DataMember => 'Offset15',
|
6556
|
+
Format => 'int32u',
|
6557
|
+
Writable => 0,
|
6558
|
+
Hidden => 1,
|
6559
|
+
RawConv => '$$self{Offset15} = $val || 0x10000000; undef', # (ignore if 0)
|
6560
|
+
},
|
6486
6561
|
0x9c => {
|
6487
6562
|
Name => 'OrientationOffset',
|
6488
6563
|
DataMember => 'OrientationOffset',
|
@@ -6491,15 +6566,49 @@ my %nikonFocalConversions = (
|
|
6491
6566
|
Hidden => 1,
|
6492
6567
|
RawConv => '$$self{OrientationOffset} = $val || 0x10000000; undef', # (ignore if 0)
|
6493
6568
|
},
|
6494
|
-
|
6495
|
-
|
6569
|
+
0xa4 => {
|
6570
|
+
Name => 'Offset32',
|
6571
|
+
DataMember => 'Offset32',
|
6572
|
+
Format => 'int32u',
|
6573
|
+
Writable => 0,
|
6574
|
+
Hidden => 1,
|
6575
|
+
RawConv => '$$self{Offset32} = $val || 0x10000000; undef', # (ignore if 0)
|
6576
|
+
},
|
6577
|
+
### 0x75e8 - Offset3 info start (D6 firmware 1.33)
|
6578
|
+
0x75e7 => {
|
6496
6579
|
Name => 'Hook1',
|
6497
6580
|
Hidden => 1,
|
6498
6581
|
RawConv => 'undef',
|
6582
|
+
# account for variable location of Offset5 data
|
6583
|
+
Hook => '$varSize = $$self{Offset3} - 0x75e8',
|
6584
|
+
},
|
6585
|
+
0x760c => {
|
6586
|
+
Name => 'IntervalShooting',
|
6587
|
+
RawConv => '$$self{IntervalShooting} = $val',
|
6588
|
+
Format => 'int16u',
|
6589
|
+
PrintConv => q{
|
6590
|
+
return 'Off' if $val == 0 ;
|
6591
|
+
my $i = sprintf("Interval %.0f of %.0f",$val, $$self{IntervalShootingIntervals}); #something like "Interval 1 of 3"
|
6592
|
+
my $f = $$self{IntervalShootingShotsPerInterval} > 1 ? sprintf(" Frame %.0f of %.0f",$$self{IntervalFrame}, $$self{IntervalShootingShotsPerInterval}): '' ; #something like "Frame 1 of 3" or blank
|
6593
|
+
return "On: $i$f"
|
6594
|
+
#$val == 0 ? 'Off' : sprintf("On: Interval %.0f of %.0f Frame %.0f of %.0f",$val, $$self{IntervalShootingIntervals}, $$self{IntervalFrame}, $$self{IntervalShootingShotsPerInterval}),
|
6595
|
+
},
|
6596
|
+
},
|
6597
|
+
0x7610 => {
|
6598
|
+
Name => 'IntervalFrame',
|
6599
|
+
RawConv => '$$self{IntervalFrame} = $val',
|
6600
|
+
Condition => '$$self{IntervalShooting} > 0',
|
6601
|
+
Format => 'int16u',
|
6602
|
+
Hidden => 1,
|
6603
|
+
},
|
6604
|
+
### 0xc21a - OrientationInfo start (D6 firmware 1.00) (0xc952 for firmware 1.33)
|
6605
|
+
0xc219 => {
|
6606
|
+
Name => 'Hook2',
|
6607
|
+
Hidden => 1,
|
6608
|
+
RawConv => 'undef',
|
6499
6609
|
# account for variable location of OrientationInfo data
|
6500
6610
|
Hook => '$varSize = $$self{OrientationOffset} - 0xc21a',
|
6501
6611
|
},
|
6502
|
-
|
6503
6612
|
0xc21a => {
|
6504
6613
|
Name => 'RollAngle',
|
6505
6614
|
Format => 'fixed32u',
|
@@ -6527,7 +6636,136 @@ my %nikonFocalConversions = (
|
|
6527
6636
|
PrintConv => 'sprintf("%.1f", $val)',
|
6528
6637
|
PrintConvInv => '$val',
|
6529
6638
|
},
|
6530
|
-
|
6639
|
+
### 0xc9c6 - Offset32 start (D6 firmware 1.33)
|
6640
|
+
0xc292 => {
|
6641
|
+
Name => 'Hook3',
|
6642
|
+
Hidden => 1,
|
6643
|
+
RawConv => 'undef',
|
6644
|
+
# account for variable location of data
|
6645
|
+
Hook => '$varSize = $$self{Offset32} - 0xc292',
|
6646
|
+
},
|
6647
|
+
0xc40e => {
|
6648
|
+
Name => 'Intervals',
|
6649
|
+
Format => 'int32u',
|
6650
|
+
RawConv => '$$self{IntervalShootingIntervals} = $val',
|
6651
|
+
Condition => '$$self{IntervalShooting} > 0',
|
6652
|
+
},
|
6653
|
+
0xc412 => {
|
6654
|
+
Name => 'ShotsPerInterval',
|
6655
|
+
Format => 'int32u',
|
6656
|
+
RawConv => '$$self{IntervalShootingShotsPerInterval} = $val',
|
6657
|
+
Condition => '$$self{IntervalShooting} > 0',
|
6658
|
+
},
|
6659
|
+
0xc416 => {
|
6660
|
+
Name => 'IntervalExposureSmoothing',
|
6661
|
+
Condition => '$$self{IntervalShooting} > 0',
|
6662
|
+
Format => 'int8u',
|
6663
|
+
PrintConv => \%offOn,
|
6664
|
+
},
|
6665
|
+
0xc418 => {
|
6666
|
+
Name => 'IntervalPriority',
|
6667
|
+
Condition => '$$self{IntervalShooting} > 0',
|
6668
|
+
Format => 'int8u',
|
6669
|
+
PrintConv => \%offOn,
|
6670
|
+
},
|
6671
|
+
0xc43a => {
|
6672
|
+
Name => 'FocusShiftNumberShots',
|
6673
|
+
},
|
6674
|
+
0xc43e => {
|
6675
|
+
Name => 'FocusShiftStepWidth',
|
6676
|
+
},
|
6677
|
+
0xc442 => {
|
6678
|
+
Name => 'FocusShiftInterval',
|
6679
|
+
PrintConv => '$val == 1? "1 Second" : sprintf("%.0f Seconds",$val)',
|
6680
|
+
},
|
6681
|
+
0xc446 => {
|
6682
|
+
Name => 'FocusShiftExposureLock',
|
6683
|
+
PrintConv => \%offOn,
|
6684
|
+
},
|
6685
|
+
#0xc49c => HighISONoiseReduction
|
6686
|
+
0xc4a0 => {
|
6687
|
+
Name => 'DiffractionCompensation',
|
6688
|
+
Format => 'int8u',
|
6689
|
+
PrintConv => \%offOn,
|
6690
|
+
},
|
6691
|
+
#0xc4a1 => {Name => 'FlickerReductionShooting',}, #redundant with tag in NikonSettings
|
6692
|
+
0xc4a6 => {
|
6693
|
+
Name => 'FlashControlMode', #this and nearby tag values for flash may be set from either the Photo Shooting Menu or using the Flash unit menu
|
6694
|
+
RawConv => '$$self{FlashControlMode} = $val',
|
6695
|
+
PrintConv => {
|
6696
|
+
0 => 'TTL',
|
6697
|
+
1 => 'Auto External Flash',
|
6698
|
+
2 => 'GN (distance priority)',
|
6699
|
+
3 => 'Manual',
|
6700
|
+
4 => 'Repeating Flash',
|
6701
|
+
},
|
6702
|
+
},
|
6703
|
+
0xc4ac => {
|
6704
|
+
Name => 'FlashGNDistance',
|
6705
|
+
Condition => '$$self{FlashControlMode} == 2',
|
6706
|
+
Unknown => 1,
|
6707
|
+
ValueConv => '$val + 3',
|
6708
|
+
PrintConv => \%flashGNDistance,
|
6709
|
+
},
|
6710
|
+
0xc4b0 => {
|
6711
|
+
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)
|
6712
|
+
Condition => '$$self{FlashControlMode} >= 3',
|
6713
|
+
Unknown => 1,
|
6714
|
+
ValueConv => '2 ** (-$val/3)',
|
6715
|
+
ValueConvInv => '$val>0 ? -3*log($val)/log(2) : 0',
|
6716
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.1f%%",$val*100)',
|
6717
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
6718
|
+
},
|
6719
|
+
0xc4ba => {
|
6720
|
+
Name => 'FlashRemoteControl',
|
6721
|
+
Unknown => 1,
|
6722
|
+
PrintConv => {
|
6723
|
+
0 => 'Group',
|
6724
|
+
1 => 'Quick Wireless',
|
6725
|
+
2 => 'Remote Repeating',
|
6726
|
+
},
|
6727
|
+
},
|
6728
|
+
0xc4be => {
|
6729
|
+
Name => 'FlashMasterControlMode', #tag name chosen for compatibility with those found in FlashInfo0102 & FlashInfo0103
|
6730
|
+
RawConv => '$$self{FlashGroupOptionsMasterMode} = $val',
|
6731
|
+
PrintConv => \%flashGroupOptionsMode,
|
6732
|
+
},
|
6733
|
+
0xc4c0 => {
|
6734
|
+
Name => 'FlashMasterCompensation',
|
6735
|
+
Unknown => 1,
|
6736
|
+
Format => 'int8s',
|
6737
|
+
Condition => '$$self{FlashGroupOptionsMasterMode} != 3', #other than 'Off'
|
6738
|
+
ValueConv => '$val/6',
|
6739
|
+
ValueConvInv => '6 * $val',
|
6740
|
+
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
6741
|
+
PrintConvInv => '$val',
|
6742
|
+
},
|
6743
|
+
0xc4c4 => {
|
6744
|
+
Name => 'FlashMasterOutput',
|
6745
|
+
Unknown => 1,
|
6746
|
+
Condition => '$$self{FlashGroupOptionsMasterMode} == 1', #only for Mode=M
|
6747
|
+
ValueConv => '2 ** (-$val/3)',
|
6748
|
+
ValueConvInv => '$val>0 ? -3*log($val)/log(2) : 0',
|
6749
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.1f%%",$val*100)',
|
6750
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
6751
|
+
},
|
6752
|
+
0xc4c6 => {
|
6753
|
+
Name => 'FlashWirelessOption',
|
6754
|
+
Unknown => 1,
|
6755
|
+
PrintConv => {
|
6756
|
+
0 => 'Optical AWL',
|
6757
|
+
1 => 'Off',
|
6758
|
+
},
|
6759
|
+
},
|
6760
|
+
0xc55c => {
|
6761
|
+
Name => 'MovieType',
|
6762
|
+
Unknown => 1,
|
6763
|
+
PrintConv => {
|
6764
|
+
0 => 'MOV',
|
6765
|
+
1 => 'MP4',
|
6766
|
+
},
|
6767
|
+
},
|
6768
|
+
# note: DecryptLen currently set to 0xc9c6 + 720
|
6531
6769
|
);
|
6532
6770
|
|
6533
6771
|
# shot information for the D610 firmware 1.00 (encrypted) - ref PH
|
@@ -7298,7 +7536,7 @@ my %nikonFocalConversions = (
|
|
7298
7536
|
Format => 'undef[56]',
|
7299
7537
|
SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsD4' },
|
7300
7538
|
},
|
7301
|
-
# 0x1978 => { #this decode works, but involves more bits than should be necessary
|
7539
|
+
# 0x1978 => { # this decode works, but involves more bits than should be necessary
|
7302
7540
|
# Name => 'ShutterTrigger',
|
7303
7541
|
# Mask => 0xff,
|
7304
7542
|
# PrintConv => {
|
@@ -7353,7 +7591,9 @@ my %nikonFocalConversions = (
|
|
7353
7591
|
WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted,
|
7354
7592
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
7355
7593
|
VARS => { ID_LABEL => 'Index' },
|
7356
|
-
DATAMEMBER => [ 0x04, 0x0e, 0x18,
|
7594
|
+
DATAMEMBER => [ 0x04, 0x0e, 0x18, 0x30, 0x38, 0x98, 0xa0, 0x75e7,
|
7595
|
+
0x760c, 0x7610, 0x7eff, 0xce31, 0xcea5, 0xceb6, 0xceb7 ],
|
7596
|
+
IS_SUBDIR => [ 0xceb8 ],
|
7357
7597
|
WRITABLE => 1,
|
7358
7598
|
FIRST_ENTRY => 0,
|
7359
7599
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
@@ -7370,7 +7610,7 @@ my %nikonFocalConversions = (
|
|
7370
7610
|
Writable => 0,
|
7371
7611
|
RawConv => '$$self{FirmwareVersion} = $val',
|
7372
7612
|
},
|
7373
|
-
|
7613
|
+
0x0e => {
|
7374
7614
|
Name => 'FirmwareVersion2',
|
7375
7615
|
Format => 'string[8]',
|
7376
7616
|
Writable => 0,
|
@@ -7385,12 +7625,28 @@ my %nikonFocalConversions = (
|
|
7385
7625
|
Hidden => 1,
|
7386
7626
|
},
|
7387
7627
|
0x24 => {
|
7388
|
-
Name => 'NumberOffsets', #number of entries in offset table. offsets are from start of ShotInfo data.
|
7628
|
+
Name => 'NumberOffsets', # number of entries in offset table. offsets are from start of ShotInfo data.
|
7389
7629
|
DataMember => 'NumberOffsets',
|
7390
7630
|
Format => 'int32u',
|
7391
7631
|
Writable => 0,
|
7392
7632
|
Hidden => 1,
|
7393
7633
|
},
|
7634
|
+
0x30 => {
|
7635
|
+
Name => 'Offset3',
|
7636
|
+
DataMember => 'Offset3',
|
7637
|
+
Format => 'int32u',
|
7638
|
+
Writable => 0,
|
7639
|
+
Hidden => 1,
|
7640
|
+
RawConv => '$$self{Offset3} = $val || 0x10000000; undef', # (ignore if 0)
|
7641
|
+
},
|
7642
|
+
0x38 => {
|
7643
|
+
Name => 'Offset5',
|
7644
|
+
DataMember => 'Offset5',
|
7645
|
+
Format => 'int32u',
|
7646
|
+
Writable => 0,
|
7647
|
+
Hidden => 1,
|
7648
|
+
RawConv => '$$self{Offset5} = $val || 0x10000000; undef', # (ignore if 0)
|
7649
|
+
},
|
7394
7650
|
0x98 => {
|
7395
7651
|
Name => 'OrientationOffset',
|
7396
7652
|
DataMember => 'OrientationOffset',
|
@@ -7399,12 +7655,70 @@ my %nikonFocalConversions = (
|
|
7399
7655
|
Hidden => 1,
|
7400
7656
|
RawConv => '$$self{OrientationOffset} = $val || 0x10000000; undef', # (ignore if 0)
|
7401
7657
|
},
|
7402
|
-
|
7403
|
-
|
7404
|
-
|
7658
|
+
0xa0 => {
|
7659
|
+
Name => 'Offset31',
|
7660
|
+
DataMember => 'Offset31',
|
7661
|
+
Format => 'int32u',
|
7662
|
+
Writable => 0,
|
7663
|
+
Hidden => 1,
|
7664
|
+
RawConv => '$$self{Offset31} = $val || 0x10000000; undef', # (ignore if 0)
|
7665
|
+
},
|
7666
|
+
### 0x75e8 - Offset3 info start (Z7_2 firmware 1.30)
|
7667
|
+
0x75e7 => {
|
7405
7668
|
Name => 'Hook1',
|
7406
7669
|
Hidden => 1,
|
7407
7670
|
RawConv => 'undef',
|
7671
|
+
# account for variable location of Offset5 data
|
7672
|
+
Hook => '$varSize = $$self{Offset3} - 0x75e8',
|
7673
|
+
},
|
7674
|
+
0x760c => {
|
7675
|
+
Name => 'IntervalShooting',
|
7676
|
+
RawConv => '$$self{IntervalShooting} = $val',
|
7677
|
+
Format => 'int16u',
|
7678
|
+
PrintConv => q{
|
7679
|
+
return 'Off' if $val == 0 ;
|
7680
|
+
my $i = sprintf("Interval %.0f of %.0f",$val, $$self{IntervalShootingIntervals}); # something like "Interval 1 of 3"
|
7681
|
+
my $f = $$self{IntervalShootingShotsPerInterval} > 1 ? sprintf(" Frame %.0f of %.0f",$$self{IntervalFrame}, $$self{IntervalShootingShotsPerInterval}): '' ; # something like "Frame 1 of 3" or blank
|
7682
|
+
return "On: $i$f"
|
7683
|
+
#$val == 0 ? 'Off' : sprintf("On: Interval %.0f of %.0f Frame %.0f of %.0f",$val, $$self{IntervalShootingIntervals}, $$self{IntervalFrame}, $$self{IntervalShootingShotsPerInterval}),
|
7684
|
+
},
|
7685
|
+
},
|
7686
|
+
0x7610 => {
|
7687
|
+
Name => 'IntervalFrame',
|
7688
|
+
RawConv => '$$self{IntervalFrame} = $val',
|
7689
|
+
Condition => '$$self{IntervalShooting} > 0',
|
7690
|
+
Format => 'int16u',
|
7691
|
+
Hidden => 1,
|
7692
|
+
},
|
7693
|
+
### 0x7f00 - Offset5 info start (Z7_2 firmware 1.30)
|
7694
|
+
0x7eff => {
|
7695
|
+
Name => 'Hook2',
|
7696
|
+
Hidden => 1,
|
7697
|
+
RawConv => 'undef',
|
7698
|
+
# account for variable location of Offset5 data
|
7699
|
+
Hook => '$varSize = $$self{Offset5} - 0x7f00',
|
7700
|
+
},
|
7701
|
+
0x7fa0 => { #28
|
7702
|
+
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
|
7703
|
+
# offset5+160; 128 is neutral; >128 increases Yellow; <128 increases Magenta; increments of 4 result from 1 full unit adjustment on the camera
|
7704
|
+
# offset5+161 128 is neutral; >128 increases Brightness; <128 decreases Brightness
|
7705
|
+
# 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]
|
7706
|
+
Format => 'int8u[2]',
|
7707
|
+
Condition => '$$self{FirmwareVersion} ge "01.30"',
|
7708
|
+
PrintConv => q{
|
7709
|
+
return 'Off' if $val eq '0 0' or $val eq '255 255';
|
7710
|
+
my @v = split ' ', $val;
|
7711
|
+
my $brightness = $v[1]==128 ? 'Brightness: Neutral' : sprintf('Brightness: %+.1f',($v[1]-128)/4);
|
7712
|
+
my $color = $v[0]==128 ? 'Color: Neutral' : sprintf('%s: %.1f', $v[0]>128 ? 'Yellow' : 'Magenta', abs($v[0]-128)/4);
|
7713
|
+
# will return something like: 'Magenta: 1.0 Brightness: Neutral'
|
7714
|
+
return "$color $brightness"
|
7715
|
+
},
|
7716
|
+
},
|
7717
|
+
### 0xce32 - OrientationInfo start (Z7_2 firmware 1.00)
|
7718
|
+
0xce31 => {
|
7719
|
+
Name => 'Hook3',
|
7720
|
+
Hidden => 1,
|
7721
|
+
RawConv => 'undef',
|
7408
7722
|
# account for variable location of OrientationInfo data
|
7409
7723
|
Hook => '$varSize = $$self{OrientationOffset} - 0xce32',
|
7410
7724
|
},
|
@@ -7436,84 +7750,858 @@ my %nikonFocalConversions = (
|
|
7436
7750
|
PrintConv => 'sprintf("%.1f", $val)',
|
7437
7751
|
PrintConvInv => '$val',
|
7438
7752
|
},
|
7439
|
-
|
7753
|
+
0xcea5 => {
|
7754
|
+
Name => 'Hook4',
|
7755
|
+
Hidden => 1,
|
7756
|
+
RawConv => 'undef',
|
7757
|
+
# account for variable location of Offset31 data
|
7758
|
+
Hook => '$varSize = $$self{Offset31} - 0xcea6',
|
7759
|
+
},
|
7760
|
+
### 0xcea6 - Offset31 info start (Z7_2 firmware 1.30)
|
7761
|
+
0xceb6 => {
|
7762
|
+
Name => 'ZMenuSettingsOffset',
|
7763
|
+
# offset to ZMenuSettings is relative to start of Offset31 block
|
7764
|
+
RawConv => '$$self{ZMenuSettingsOffset} = ($val || 0x10000000) + $$self{Offset31}; undef', # (ignore if 0)
|
7765
|
+
},
|
7766
|
+
0xceb7 => {
|
7767
|
+
Name => 'Hook5',
|
7768
|
+
Hidden => 1,
|
7769
|
+
RawConv => 'undef',
|
7770
|
+
# account for variable location of Offset5 data
|
7771
|
+
Hook => '$varSize = $$self{ZMenuSettingsOffset} - 0xceb8',
|
7772
|
+
},
|
7773
|
+
0xceb8 => {
|
7774
|
+
Name => 'ZMenuSettings',
|
7775
|
+
SubDirectory => {
|
7776
|
+
TagTable => 'Image::ExifTool::Nikon::ZMenuSettings',
|
7777
|
+
},
|
7778
|
+
}
|
7779
|
+
# note: DecryptLen currently set to 0xcea6 + 1050
|
7440
7780
|
);
|
7441
7781
|
|
7442
|
-
#
|
7443
|
-
%Image::ExifTool::Nikon::
|
7444
|
-
|
7445
|
-
|
7782
|
+
# shot information for the Z9 firmware 1.00 (encrypted) - ref 28
|
7783
|
+
%Image::ExifTool::Nikon::ShotInfoZ9 = (
|
7784
|
+
PROCESS_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted,
|
7785
|
+
WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted,
|
7786
|
+
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
7787
|
+
VARS => { ID_LABEL => 'Index' },
|
7788
|
+
DATAMEMBER => [ 0x04, 0x0e, 0x18, 0x84, 0xeaea],
|
7789
|
+
WRITABLE => 1,
|
7790
|
+
FIRST_ENTRY => 0,
|
7446
7791
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
7447
|
-
NOTES =>
|
7448
|
-
|
7449
|
-
|
7450
|
-
},
|
7451
|
-
# NOTE: Must set ByteOrder in SubDirectory if any multi-byte integer tags added
|
7452
|
-
0 => {
|
7453
|
-
Name => 'FlashInfoVersion',
|
7792
|
+
NOTES => 'These tags are extracted from encrypted data in images from the Z9.',
|
7793
|
+
0x00 => {
|
7794
|
+
Name => 'ShotInfoVersion',
|
7454
7795
|
Format => 'string[4]',
|
7455
7796
|
Writable => 0,
|
7456
7797
|
},
|
7457
|
-
|
7458
|
-
Name => '
|
7459
|
-
|
7460
|
-
|
7461
|
-
|
7462
|
-
|
7463
|
-
},
|
7798
|
+
0x04 => {
|
7799
|
+
Name => 'FirmwareVersion',
|
7800
|
+
DataMember => 'FirmwareVersion',
|
7801
|
+
Format => 'string[8]',
|
7802
|
+
Writable => 0,
|
7803
|
+
RawConv => '$$self{FirmwareVersion} = $val',
|
7464
7804
|
},
|
7465
|
-
|
7466
|
-
|
7467
|
-
Format => '
|
7468
|
-
|
7469
|
-
|
7470
|
-
|
7805
|
+
0x0e => {
|
7806
|
+
Name => 'FirmwareVersion2',
|
7807
|
+
Format => 'string[8]',
|
7808
|
+
Writable => 0,
|
7809
|
+
RawConv => '$$self{FirmwareVersion2} = $val',
|
7810
|
+
Hidden => 1,
|
7471
7811
|
},
|
7472
|
-
|
7473
|
-
Name => '
|
7474
|
-
|
7475
|
-
|
7476
|
-
|
7477
|
-
|
7478
|
-
4 => 'Wide Flash Adapter',
|
7479
|
-
5 => 'Dome Diffuser', #28
|
7480
|
-
},
|
7481
|
-
},
|
7812
|
+
0x18 => {
|
7813
|
+
Name => 'FirmwareVersion3',
|
7814
|
+
Format => 'string[8]',
|
7815
|
+
Writable => 0,
|
7816
|
+
RawConv => '$$self{FirmwareVersion3} = $val',
|
7817
|
+
Hidden => 1,
|
7482
7818
|
},
|
7483
|
-
|
7484
|
-
Name => '
|
7485
|
-
|
7486
|
-
|
7819
|
+
0x24 => {
|
7820
|
+
Name => 'NumberOffsets', # number of entries in offset table. offsets are from start of ShotInfo data.
|
7821
|
+
DataMember => 'NumberOffsets',
|
7822
|
+
Format => 'int32u',
|
7823
|
+
Writable => 0,
|
7824
|
+
Hidden => 1,
|
7487
7825
|
},
|
7488
|
-
|
7489
|
-
Name => '
|
7490
|
-
|
7491
|
-
|
7492
|
-
|
7493
|
-
|
7494
|
-
|
7826
|
+
0x84 => {
|
7827
|
+
Name => 'OrientationOffset', #offset24 - length 108
|
7828
|
+
DataMember => 'OrientationOffset',
|
7829
|
+
Format => 'int32u',
|
7830
|
+
Writable => 0,
|
7831
|
+
Hidden => 1,
|
7832
|
+
RawConv => '$$self{OrientationOffset} = $val || 0x10000000; undef', # (ignore if 0)
|
7495
7833
|
},
|
7496
|
-
|
7497
|
-
|
7498
|
-
|
7499
|
-
|
7500
|
-
|
7501
|
-
|
7502
|
-
|
7503
|
-
|
7504
|
-
|
7505
|
-
|
7506
|
-
|
7507
|
-
|
7508
|
-
|
7509
|
-
|
7510
|
-
|
7511
|
-
|
7512
|
-
|
7513
|
-
|
7514
|
-
|
7515
|
-
|
7516
|
-
|
7834
|
+
### 0xce32 - OrientationInfo start (Z9 firmware 1.00)
|
7835
|
+
0xeaea => {
|
7836
|
+
Name => 'Hook1',
|
7837
|
+
Hidden => 1,
|
7838
|
+
RawConv => 'undef',
|
7839
|
+
# account for variable location of OrientationInfo data
|
7840
|
+
Hook => '$varSize = $$self{OrientationOffset} - 0xeaeb',
|
7841
|
+
},
|
7842
|
+
|
7843
|
+
0xeaeb => {
|
7844
|
+
Name => 'RollAngle',
|
7845
|
+
Format => 'fixed32u',
|
7846
|
+
Notes => 'converted to degrees of clockwise camera roll',
|
7847
|
+
ValueConv => '$val <= 180 ? $val : $val - 360',
|
7848
|
+
ValueConvInv => '$val >= 0 ? $val : $val + 360',
|
7849
|
+
PrintConv => 'sprintf("%.1f", $val)',
|
7850
|
+
PrintConvInv => '$val',
|
7851
|
+
},
|
7852
|
+
0xeaef => {
|
7853
|
+
Name => 'PitchAngle',
|
7854
|
+
Format => 'fixed32u',
|
7855
|
+
Notes => 'converted to degrees of upward camera tilt',
|
7856
|
+
ValueConv => '$val <= 180 ? $val : $val - 360',
|
7857
|
+
ValueConvInv => '$val >= 0 ? $val : $val + 360',
|
7858
|
+
PrintConv => 'sprintf("%.1f", $val)',
|
7859
|
+
PrintConvInv => '$val',
|
7860
|
+
},
|
7861
|
+
0xeaf3 => {
|
7862
|
+
Name => 'YawAngle',
|
7863
|
+
Format => 'fixed32u',
|
7864
|
+
Notes => 'the camera yaw angle when shooting in portrait orientation',
|
7865
|
+
ValueConv => '$val <= 180 ? $val : $val - 360',
|
7866
|
+
ValueConvInv => '$val >= 0 ? $val : $val + 360',
|
7867
|
+
PrintConv => 'sprintf("%.1f", $val)',
|
7868
|
+
PrintConvInv => '$val',
|
7869
|
+
},
|
7870
|
+
# note: DecryptLen currently set to 0xeb5b + 1050
|
7871
|
+
);
|
7872
|
+
|
7873
|
+
%Image::ExifTool::Nikon::ZMenuSettings = (
|
7874
|
+
%binaryDataAttrs,
|
7875
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
7876
|
+
NOTES => q{
|
7877
|
+
These tags are used by the Z5 Z6 Z7 Z6II Z7II Z50 Zfc
|
7878
|
+
},
|
7879
|
+
DATAMEMBER => [ 0xb0, 0xb4, 0x148, 0x160, 0x35a ],
|
7880
|
+
160 => {
|
7881
|
+
Name => 'IntervalDurationHours',
|
7882
|
+
Format => 'int32u',
|
7883
|
+
Condition => '$$self{IntervalShooting} > 0',
|
7884
|
+
},
|
7885
|
+
164 => {
|
7886
|
+
Name => 'IntervalDurationMinutes',
|
7887
|
+
Format => 'int32u',
|
7888
|
+
Condition => '$$self{IntervalShooting} > 0',
|
7889
|
+
},
|
7890
|
+
168 => {
|
7891
|
+
Name => 'IntervalDurationSeconds',
|
7892
|
+
Format => 'int32u',
|
7893
|
+
Condition => '$$self{IntervalShooting} > 0',
|
7894
|
+
},
|
7895
|
+
176 => {
|
7896
|
+
Name => 'Intervals',
|
7897
|
+
Format => 'int32u',
|
7898
|
+
RawConv => '$$self{IntervalShootingIntervals} = $val',
|
7899
|
+
Condition => '$$self{IntervalShooting} > 0',
|
7900
|
+
},
|
7901
|
+
180 => {
|
7902
|
+
Name => 'ShotsPerInterval',
|
7903
|
+
Format => 'int32u',
|
7904
|
+
RawConv => '$$self{IntervalShootingShotsPerInterval} = $val',
|
7905
|
+
Condition => '$$self{IntervalShooting} > 0',
|
7906
|
+
},
|
7907
|
+
184 => {
|
7908
|
+
Name => 'IntervalExposureSmoothing',
|
7909
|
+
Condition => '$$self{IntervalShooting} > 0',
|
7910
|
+
Format => 'int8u',
|
7911
|
+
PrintConv => \%offOn,
|
7912
|
+
},
|
7913
|
+
186 => {
|
7914
|
+
Name => 'IntervalPriority',
|
7915
|
+
Condition => '$$self{IntervalShooting} > 0',
|
7916
|
+
Format => 'int8u',
|
7917
|
+
PrintConv => \%offOn,
|
7918
|
+
},
|
7919
|
+
220 => {
|
7920
|
+
Name => 'FocusShiftNumberShots',
|
7921
|
+
},
|
7922
|
+
224 => {
|
7923
|
+
Name => 'FocusShiftStepWidth',
|
7924
|
+
},
|
7925
|
+
228 => {
|
7926
|
+
Name => 'FocusShiftInterval',
|
7927
|
+
PrintConv => '$val == 1? "1 Second" : sprintf("%.0f Seconds",$val)',
|
7928
|
+
},
|
7929
|
+
232 => {
|
7930
|
+
Name => 'FocusShiftExposureLock',
|
7931
|
+
PrintConv => \%offOn,
|
7932
|
+
},
|
7933
|
+
#304 => White Balance - Kelvin Temp
|
7934
|
+
#312 => ColorSpace
|
7935
|
+
#314 => ActiveD-Lighting
|
7936
|
+
#318 => HighISONoiseReduction
|
7937
|
+
322 => {
|
7938
|
+
Name => 'DiffractionCompensation',
|
7939
|
+
Format => 'int8u',
|
7940
|
+
PrintConv => \%offOn,
|
7941
|
+
},
|
7942
|
+
323 => {
|
7943
|
+
Name => 'AutoDistortionControl',
|
7944
|
+
Format => 'int8u',
|
7945
|
+
PrintConv => \%offOn,
|
7946
|
+
},
|
7947
|
+
#324 => {Name => 'FlickerReductionShooting',}, # redundant with tag in NikonSettings
|
7948
|
+
326 => {
|
7949
|
+
Name => 'NikonMeteringMode',
|
7950
|
+
Unknown => 1,
|
7951
|
+
PrintConv => {
|
7952
|
+
0 => 'Matrix',
|
7953
|
+
1 => 'Center',
|
7954
|
+
2 => 'Spot',
|
7955
|
+
3 => 'Highlight'
|
7956
|
+
},
|
7957
|
+
},
|
7958
|
+
328 => {
|
7959
|
+
Name => 'FlashControlMode', # this and nearby tag values for flash may be set from either the Photo Shooting Menu or using the Flash unit menu
|
7960
|
+
RawConv => '$$self{FlashControlMode} = $val',
|
7961
|
+
PrintConv => {
|
7962
|
+
0 => 'TTL',
|
7963
|
+
1 => 'Auto External Flash',
|
7964
|
+
2 => 'GN (distance priority)',
|
7965
|
+
3 => 'Manual',
|
7966
|
+
4 => 'Repeating Flash',
|
7967
|
+
},
|
7968
|
+
},
|
7969
|
+
334 => {
|
7970
|
+
Name => 'FlashGNDistance',
|
7971
|
+
Condition => '$$self{FlashControlMode} == 2',
|
7972
|
+
Unknown => 1,
|
7973
|
+
ValueConv => '$val + 3',
|
7974
|
+
PrintConv => \%flashGNDistance,
|
7975
|
+
},
|
7976
|
+
338 => {
|
7977
|
+
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)
|
7978
|
+
Condition => '$$self{FlashControlMode} >= 3',
|
7979
|
+
Unknown => 1,
|
7980
|
+
ValueConv => '2 ** (-$val/3)',
|
7981
|
+
ValueConvInv => '$val>0 ? -3*log($val)/log(2) : 0',
|
7982
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.1f%%",$val*100)',
|
7983
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
7984
|
+
},
|
7985
|
+
346 => {
|
7986
|
+
Name => 'FlashWirelessOption', # also found in FlashInfoUnknown at offset 0x23 (with different mappings)
|
7987
|
+
Unknown => 1,
|
7988
|
+
PrintConv => {
|
7989
|
+
0 => 'Off',
|
7990
|
+
1 => 'Optical AWL',
|
7991
|
+
2 => 'Optical/Radio AWL',
|
7992
|
+
3 => 'Radio AWL'
|
7993
|
+
},
|
7994
|
+
},
|
7995
|
+
348 => {
|
7996
|
+
Name => 'FlashRemoteControl', # also found in FlashInfoUnknown at offset 0x1e (with different mappings)
|
7997
|
+
Unknown => 1,
|
7998
|
+
PrintConv => {
|
7999
|
+
0 => 'Group',
|
8000
|
+
1 => 'Quick Wireless',
|
8001
|
+
2 => 'Remote Repeating',
|
8002
|
+
},
|
8003
|
+
},
|
8004
|
+
352 => {
|
8005
|
+
Name => 'FlashMasterControlMode', # tag name chosen for compatibility with those found in FlashInfo0102 & FlashInfo0103
|
8006
|
+
RawConv => '$$self{FlashGroupOptionsMasterMode} = $val',
|
8007
|
+
PrintConv => \%flashGroupOptionsMode,
|
8008
|
+
},
|
8009
|
+
354 => {
|
8010
|
+
Name => 'FlashMasterCompensation',
|
8011
|
+
Format => 'int8s',
|
8012
|
+
Condition => '$$self{FlashGroupOptionsMasterMode} != 3', # other than 'Off'
|
8013
|
+
Unknown => 1,
|
8014
|
+
ValueConv => '$val/6',
|
8015
|
+
ValueConvInv => '6 * $val',
|
8016
|
+
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
8017
|
+
PrintConvInv => '$val',
|
8018
|
+
},
|
8019
|
+
358 => {
|
8020
|
+
Name => 'FlashMasterOutput',
|
8021
|
+
Unknown => 1,
|
8022
|
+
Condition => '$$self{FlashGroupOptionsMasterMode} == 1', # only for Mode=M
|
8023
|
+
ValueConv => '2 ** (-$val/3)',
|
8024
|
+
ValueConvInv => '$val>0 ? -3*log($val)/log(2) : 0',
|
8025
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.1f%%",$val*100)',
|
8026
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
8027
|
+
},
|
8028
|
+
#360 => {Name => 'FlashGroupAControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupACompensation at 362 and FlashGroupAOutput at 368
|
8029
|
+
#368 => {Name => 'FlashGroupBControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupBCompensation at 370 and FlashGroupBOutput at 374
|
8030
|
+
#376 => {Name => 'FlashGroupCControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupCCompensation at 378 and FlashGroupCOutput at 382
|
8031
|
+
#384 => {Name => 'FlashGroupDControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupDCompensation at 386 and FlashGroupDOutput at 390
|
8032
|
+
#392 => {Name => 'FlashGroupEControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupECompensation at 394 and FlashGroupEOutput at 398
|
8033
|
+
#400 => {Name => 'FlashGroupFControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupFCompensation at 402 and FlashGroupFOutput at 406
|
8034
|
+
#434 => FocusMode
|
8035
|
+
#436 => AFAreaMode
|
8036
|
+
#438 => VibrationReduction
|
8037
|
+
#442 => BracketSet
|
8038
|
+
#444 => BracketProgram
|
8039
|
+
#446 => BracketIncrement
|
8040
|
+
#463 => SilentPhotography
|
8041
|
+
502 => {
|
8042
|
+
Name => 'MovieFrameSize', # may want to rename or suppress the movie menu settings - potentially confusing for still photographers
|
8043
|
+
Unknown => 1,
|
8044
|
+
PrintConv => {
|
8045
|
+
1 => '1920x1080',
|
8046
|
+
2 => '3840x2160',
|
8047
|
+
},
|
8048
|
+
},
|
8049
|
+
504 => {
|
8050
|
+
Name => 'MovieFrameRate',
|
8051
|
+
Unknown => 1,
|
8052
|
+
PrintConv => {
|
8053
|
+
0 => '120p',
|
8054
|
+
1 => '100p',
|
8055
|
+
2 => '60p',
|
8056
|
+
3 => '50p',
|
8057
|
+
4 => '30p',
|
8058
|
+
5 => '25p',
|
8059
|
+
6 => '24p',
|
8060
|
+
},
|
8061
|
+
},
|
8062
|
+
506 => {
|
8063
|
+
Name => 'MovieSlowMotion',
|
8064
|
+
Unknown => 1,
|
8065
|
+
PrintConv => {
|
8066
|
+
0 => 'Off',
|
8067
|
+
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]
|
8068
|
+
2 => 'On (5x)', # 120p recording with playback @ 24p [1920 x 1080; 20p x 5]
|
8069
|
+
},
|
8070
|
+
},
|
8071
|
+
510 => {
|
8072
|
+
Name => 'MovieType',
|
8073
|
+
Unknown => 1,
|
8074
|
+
PrintConv => {
|
8075
|
+
0 => 'MOV',
|
8076
|
+
1 => 'MP4',
|
8077
|
+
},
|
8078
|
+
},
|
8079
|
+
#512 => MovieISOAutoHiLimit
|
8080
|
+
516 => {
|
8081
|
+
Name => 'MovieISOAutoManualMode',
|
8082
|
+
Condition => '$$self{Model} =~ /^NIKON 7/', #ISO ranges vary by model. These mappings are for the Z7 and Z7II
|
8083
|
+
Format => 'int16u',
|
8084
|
+
Unknown => 1,
|
8085
|
+
ValueConv => '($val-104)/8',
|
8086
|
+
PrintConv => {
|
8087
|
+
0 => 'ISO 64',
|
8088
|
+
1 => 'ISO 80',
|
8089
|
+
2 => 'ISO 100',
|
8090
|
+
3 => 'ISO 125',
|
8091
|
+
4 => 'ISO 160',
|
8092
|
+
5 => 'ISO 200',
|
8093
|
+
6 => 'ISO 250',
|
8094
|
+
7 => 'ISO 320',
|
8095
|
+
8 => 'ISO 400',
|
8096
|
+
9 => 'ISO 500',
|
8097
|
+
10 => 'ISO 640',
|
8098
|
+
11 => 'ISO 800',
|
8099
|
+
12 => 'ISO 1000',
|
8100
|
+
13 => 'ISO 1250',
|
8101
|
+
14 => 'ISO 1600',
|
8102
|
+
15 => 'ISO 2000',
|
8103
|
+
16 => 'ISO 2500',
|
8104
|
+
17 => 'ISO 3200',
|
8105
|
+
18 => 'ISO 4000',
|
8106
|
+
19 => 'ISO 5000',
|
8107
|
+
20 => 'ISO 6400',
|
8108
|
+
21 => 'ISO 8000',
|
8109
|
+
22 => 'ISO 10000',
|
8110
|
+
23 => 'ISO 12800',
|
8111
|
+
24 => 'ISO 16000',
|
8112
|
+
25 => 'ISO 20000',
|
8113
|
+
26 => 'ISO 25600',
|
8114
|
+
27 => 'ISO Hi 0.3',
|
8115
|
+
28 => 'ISO Hi 0.7',
|
8116
|
+
29 => 'ISO Hi 1.0',
|
8117
|
+
32 => 'ISO Hi 2.0',
|
8118
|
+
},
|
8119
|
+
},
|
8120
|
+
#520 => MovieWhiteBalanceSameAsPhoto
|
8121
|
+
568 => {
|
8122
|
+
Name => 'MovieActiveD-Lighting',
|
8123
|
+
Unknown => 1,
|
8124
|
+
PrintConv => {
|
8125
|
+
0 => 'Off',
|
8126
|
+
2 => 'Low',
|
8127
|
+
3 => 'Normal',
|
8128
|
+
4 => 'High',
|
8129
|
+
5 => 'Extra High',
|
8130
|
+
},
|
8131
|
+
},
|
8132
|
+
572 => {
|
8133
|
+
Name => 'MovieHighISONoiseReduction',
|
8134
|
+
Unknown => 1,
|
8135
|
+
PrintConv => {
|
8136
|
+
0 => 'Off',
|
8137
|
+
1 => 'Low',
|
8138
|
+
2 => 'Normal',
|
8139
|
+
3 => 'High',
|
8140
|
+
},
|
8141
|
+
},
|
8142
|
+
574=> {
|
8143
|
+
Name => 'MovieVignetteControl',
|
8144
|
+
Unknown => 1,
|
8145
|
+
PrintConv => {
|
8146
|
+
0 => 'Off',
|
8147
|
+
1 => 'Low',
|
8148
|
+
2 => 'Normal',
|
8149
|
+
3 => 'High',
|
8150
|
+
},
|
8151
|
+
},
|
8152
|
+
576 => {
|
8153
|
+
Name => 'MovieVignetteControlSameAsPhoto',
|
8154
|
+
Unknown => 1,
|
8155
|
+
PrintConv => \%noYes
|
8156
|
+
},
|
8157
|
+
577 => {
|
8158
|
+
Name => 'MovieDiffractionCompensation',
|
8159
|
+
Unknown => 1,
|
8160
|
+
PrintConv => \%offOn
|
8161
|
+
},
|
8162
|
+
578 => {
|
8163
|
+
Name => 'MovieAutoDistortionControl',
|
8164
|
+
Unknown => 1,
|
8165
|
+
PrintConv => \%offOn
|
8166
|
+
},
|
8167
|
+
584 => {
|
8168
|
+
Name => 'MovieFocusMode',
|
8169
|
+
Unknown => 1,
|
8170
|
+
PrintConv => {
|
8171
|
+
0 => 'Manual',
|
8172
|
+
1 => 'AF-S',
|
8173
|
+
2 => 'AF-C',
|
8174
|
+
4 => 'AF-F', # full frame
|
8175
|
+
},
|
8176
|
+
},
|
8177
|
+
#586 => MovieAFAreaMode
|
8178
|
+
590 => {
|
8179
|
+
Name => 'MovieVibrationReduction',
|
8180
|
+
Unknown => 1,
|
8181
|
+
PrintConv => {
|
8182
|
+
0 => 'Off',
|
8183
|
+
1 => 'On (Normal)',
|
8184
|
+
2 => 'On (Sport)',
|
8185
|
+
},
|
8186
|
+
},
|
8187
|
+
591 => {
|
8188
|
+
Name => 'MovieVibrationReductionSameAsPhoto',
|
8189
|
+
Unknown => 1,
|
8190
|
+
PrintConv => \%noYes
|
8191
|
+
},
|
8192
|
+
#848 => HDMIOutputResolution
|
8193
|
+
#850 => HDMIOutputRange
|
8194
|
+
#854 => HDMIExternalRecorder
|
8195
|
+
#856 => HDMIBitDepth
|
8196
|
+
858 => {
|
8197
|
+
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
|
8198
|
+
Condition => '$$self{HDMIBitDepth} and $$self{HDMIBitDepth} == 2', # only for 10 bit
|
8199
|
+
RawConv => '$$self{HDMIOutputNLog} = $val',
|
8200
|
+
Unknown => 1,
|
8201
|
+
PrintConv => \%offOn,
|
8202
|
+
},
|
8203
|
+
#859 => HDMIViewAssist
|
8204
|
+
);
|
8205
|
+
# Flash information (ref JD)
|
8206
|
+
%Image::ExifTool::Nikon::FlashInfo0100 = (
|
8207
|
+
%binaryDataAttrs,
|
8208
|
+
DATAMEMBER => [ 9.2, 15, 16 ],
|
8209
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
8210
|
+
NOTES => q{
|
8211
|
+
These tags are used by the D2H, D2Hs, D2X, D2Xs, D50, D70, D70s, D80 and
|
8212
|
+
D200.
|
8213
|
+
},
|
8214
|
+
# NOTE: Must set ByteOrder in SubDirectory if any multi-byte integer tags added
|
8215
|
+
0 => {
|
8216
|
+
Name => 'FlashInfoVersion',
|
8217
|
+
Format => 'string[4]',
|
8218
|
+
Writable => 0,
|
8219
|
+
},
|
8220
|
+
4 => { #PH
|
8221
|
+
Name => 'FlashSource',
|
8222
|
+
PrintConv => {
|
8223
|
+
0 => 'None',
|
8224
|
+
1 => 'External',
|
8225
|
+
2 => 'Internal',
|
8226
|
+
},
|
8227
|
+
},
|
8228
|
+
# 5 - values: 46,48,50,54,78
|
8229
|
+
6 => {
|
8230
|
+
Format => 'int8u[2]',
|
8231
|
+
Name => 'ExternalFlashFirmware',
|
8232
|
+
SeparateTable => 'FlashFirmware',
|
8233
|
+
PrintConv => \%flashFirmware,
|
8234
|
+
},
|
8235
|
+
8 => {
|
8236
|
+
Name => 'ExternalFlashFlags',
|
8237
|
+
PrintConv => { 0 => '(none)',
|
8238
|
+
BITMASK => {
|
8239
|
+
0 => 'Fired', #28
|
8240
|
+
2 => 'Bounce Flash', #PH
|
8241
|
+
4 => 'Wide Flash Adapter',
|
8242
|
+
5 => 'Dome Diffuser', #28
|
8243
|
+
},
|
8244
|
+
},
|
8245
|
+
},
|
8246
|
+
9.1 => {
|
8247
|
+
Name => 'FlashCommanderMode',
|
8248
|
+
Mask => 0x80,
|
8249
|
+
PrintConv => { 0 => 'Off', 1 => 'On' },
|
8250
|
+
},
|
8251
|
+
9.2 => {
|
8252
|
+
Name => 'FlashControlMode',
|
8253
|
+
Mask => 0x7f,
|
8254
|
+
DataMember => 'FlashControlMode',
|
8255
|
+
RawConv => '$$self{FlashControlMode} = $val',
|
8256
|
+
PrintConv => \%flashControlMode,
|
8257
|
+
SeparateTable => 'FlashControlMode',
|
8258
|
+
},
|
8259
|
+
10 => [
|
8260
|
+
{
|
8261
|
+
Name => 'FlashOutput',
|
8262
|
+
Condition => '$$self{FlashControlMode} >= 0x06',
|
8263
|
+
ValueConv => '2 ** (-$val/6)',
|
8264
|
+
ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
|
8265
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
|
8266
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
8267
|
+
},
|
8268
|
+
{
|
8269
|
+
Name => 'FlashCompensation',
|
8270
|
+
Format => 'int8s',
|
8271
|
+
Priority => 0,
|
8272
|
+
ValueConv => '-$val/6',
|
8273
|
+
ValueConvInv => '-6 * $val',
|
8274
|
+
PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)',
|
8275
|
+
PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
|
8276
|
+
},
|
8277
|
+
],
|
8278
|
+
11 => {
|
8279
|
+
Name => 'FlashFocalLength',
|
8280
|
+
RawConv => '$val ? $val : undef',
|
8281
|
+
PrintConv => '"$val mm"',
|
8282
|
+
PrintConvInv => '$val=~/(\d+)/; $1 || 0',
|
8283
|
+
},
|
8284
|
+
12 => {
|
8285
|
+
Name => 'RepeatingFlashRate',
|
8286
|
+
RawConv => '$val ? $val : undef',
|
8287
|
+
PrintConv => '"$val Hz"',
|
8288
|
+
PrintConvInv => '$val=~/(\d+)/; $1 || 0',
|
8289
|
+
},
|
8290
|
+
13 => {
|
8291
|
+
Name => 'RepeatingFlashCount',
|
8292
|
+
RawConv => '$val ? $val : undef',
|
8293
|
+
},
|
8294
|
+
14 => { #PH
|
8295
|
+
Name => 'FlashGNDistance',
|
8296
|
+
SeparateTable => 1,
|
8297
|
+
PrintConv => \%flashGNDistance,
|
8298
|
+
},
|
8299
|
+
15 => {
|
8300
|
+
Name => 'FlashGroupAControlMode',
|
8301
|
+
Mask => 0x0f,
|
8302
|
+
DataMember => 'FlashGroupAControlMode',
|
8303
|
+
RawConv => '$$self{FlashGroupAControlMode} = $val',
|
8304
|
+
PrintConv => \%flashControlMode,
|
8305
|
+
SeparateTable => 'FlashControlMode',
|
8306
|
+
},
|
8307
|
+
16 => {
|
8308
|
+
Name => 'FlashGroupBControlMode',
|
8309
|
+
Mask => 0x0f,
|
8310
|
+
DataMember => 'FlashGroupBControlMode',
|
8311
|
+
RawConv => '$$self{FlashGroupBControlMode} = $val',
|
8312
|
+
PrintConv => \%flashControlMode,
|
8313
|
+
SeparateTable => 'FlashControlMode',
|
8314
|
+
},
|
8315
|
+
17 => [
|
8316
|
+
{
|
8317
|
+
Name => 'FlashGroupAOutput',
|
8318
|
+
Condition => '$$self{FlashGroupAControlMode} >= 0x06',
|
8319
|
+
ValueConv => '2 ** (-$val/6)',
|
8320
|
+
ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
|
8321
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
|
8322
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
8323
|
+
},
|
8324
|
+
{
|
8325
|
+
Name => 'FlashGroupACompensation',
|
8326
|
+
Format => 'int8s',
|
8327
|
+
ValueConv => '-$val/6',
|
8328
|
+
ValueConvInv => '-6 * $val',
|
8329
|
+
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
8330
|
+
PrintConvInv => '$val',
|
8331
|
+
},
|
8332
|
+
],
|
8333
|
+
18 => [
|
8334
|
+
{
|
8335
|
+
Name => 'FlashGroupBOutput',
|
8336
|
+
Condition => '$$self{FlashGroupBControlMode} >= 0x06',
|
8337
|
+
ValueConv => '2 ** (-$val/6)',
|
8338
|
+
ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
|
8339
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
|
8340
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
8341
|
+
},
|
8342
|
+
{
|
8343
|
+
Name => 'FlashGroupBCompensation',
|
8344
|
+
Format => 'int8s',
|
8345
|
+
ValueConv => '-$val/6',
|
8346
|
+
ValueConvInv => '-6 * $val',
|
8347
|
+
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
8348
|
+
PrintConvInv => '$val',
|
8349
|
+
},
|
8350
|
+
],
|
8351
|
+
);
|
8352
|
+
|
8353
|
+
# Flash information for D40, D40x, D3 and D300 (ref JD)
|
8354
|
+
%Image::ExifTool::Nikon::FlashInfo0102 = (
|
8355
|
+
%binaryDataAttrs,
|
8356
|
+
DATAMEMBER => [ 9.2, 16.1, 17.1, 17.2 ],
|
8357
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
8358
|
+
NOTES => q{
|
8359
|
+
These tags are used by the D3 (firmware 1.x), D40, D40X, D60 and D300
|
8360
|
+
(firmware 1.00).
|
8361
|
+
},
|
8362
|
+
# NOTE: Must set ByteOrder in SubDirectory if any multi-byte integer tags added
|
8363
|
+
0 => {
|
8364
|
+
Name => 'FlashInfoVersion',
|
8365
|
+
Format => 'string[4]',
|
8366
|
+
Writable => 0,
|
8367
|
+
},
|
8368
|
+
4 => { #PH
|
8369
|
+
Name => 'FlashSource',
|
8370
|
+
PrintConv => {
|
8371
|
+
0 => 'None',
|
8372
|
+
1 => 'External',
|
8373
|
+
2 => 'Internal',
|
8374
|
+
},
|
8375
|
+
},
|
8376
|
+
# 5 - values: 46,48,50,54,78
|
8377
|
+
6 => {
|
8378
|
+
Format => 'int8u[2]',
|
8379
|
+
Name => 'ExternalFlashFirmware',
|
8380
|
+
SeparateTable => 'FlashFirmware',
|
8381
|
+
PrintConv => \%flashFirmware,
|
8382
|
+
},
|
8383
|
+
8 => {
|
8384
|
+
Name => 'ExternalFlashFlags',
|
8385
|
+
PrintConv => { BITMASK => {
|
8386
|
+
0 => 'Fired', #28
|
8387
|
+
2 => 'Bounce Flash', #PH
|
8388
|
+
4 => 'Wide Flash Adapter',
|
8389
|
+
5 => 'Dome Diffuser', #28
|
8390
|
+
}},
|
8391
|
+
},
|
8392
|
+
9.1 => {
|
8393
|
+
Name => 'FlashCommanderMode',
|
8394
|
+
Mask => 0x80,
|
8395
|
+
PrintConv => { 0 => 'Off', 1 => 'On' },
|
8396
|
+
},
|
8397
|
+
9.2 => {
|
8398
|
+
Name => 'FlashControlMode',
|
8399
|
+
Mask => 0x7f,
|
8400
|
+
DataMember => 'FlashControlMode',
|
8401
|
+
RawConv => '$$self{FlashControlMode} = $val',
|
8402
|
+
PrintConv => \%flashControlMode,
|
8403
|
+
SeparateTable => 'FlashControlMode',
|
8404
|
+
},
|
8405
|
+
10 => [
|
8406
|
+
{
|
8407
|
+
Name => 'FlashOutput',
|
8408
|
+
Condition => '$$self{FlashControlMode} >= 0x06',
|
8409
|
+
ValueConv => '2 ** (-$val/6)',
|
8410
|
+
ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
|
8411
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
|
8412
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
8413
|
+
},
|
8414
|
+
{
|
8415
|
+
Name => 'FlashCompensation',
|
8416
|
+
# this is the compensation from the camera (0x0012) for "Built-in" FlashType, or
|
8417
|
+
# the compensation from the external unit (0x0017) for "Optional" FlashType - PH
|
8418
|
+
Format => 'int8s',
|
8419
|
+
Priority => 0,
|
8420
|
+
ValueConv => '-$val/6',
|
8421
|
+
ValueConvInv => '-6 * $val',
|
8422
|
+
PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)',
|
8423
|
+
PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
|
8424
|
+
},
|
8425
|
+
],
|
8426
|
+
12 => {
|
8427
|
+
Name => 'FlashFocalLength',
|
8428
|
+
RawConv => '$val ? $val : undef',
|
8429
|
+
PrintConv => '"$val mm"',
|
8430
|
+
PrintConvInv => '$val=~/(\d+)/; $1 || 0',
|
8431
|
+
},
|
8432
|
+
13 => {
|
8433
|
+
Name => 'RepeatingFlashRate',
|
8434
|
+
RawConv => '$val ? $val : undef',
|
8435
|
+
PrintConv => '"$val Hz"',
|
8436
|
+
PrintConvInv => '$val=~/(\d+)/; $1 || 0',
|
8437
|
+
},
|
8438
|
+
14 => {
|
8439
|
+
Name => 'RepeatingFlashCount',
|
8440
|
+
RawConv => '$val ? $val : undef',
|
8441
|
+
},
|
8442
|
+
15 => { #PH
|
8443
|
+
Name => 'FlashGNDistance',
|
8444
|
+
SeparateTable => 1,
|
8445
|
+
PrintConv => \%flashGNDistance,
|
8446
|
+
},
|
8447
|
+
16.1 => {
|
8448
|
+
Name => 'FlashGroupAControlMode',
|
8449
|
+
Mask => 0x0f,
|
8450
|
+
Notes => 'note: group A tags may apply to the built-in flash settings for some models',
|
8451
|
+
DataMember => 'FlashGroupAControlMode',
|
8452
|
+
RawConv => '$$self{FlashGroupAControlMode} = $val',
|
8453
|
+
PrintConv => \%flashControlMode,
|
8454
|
+
SeparateTable => 'FlashControlMode',
|
8455
|
+
},
|
8456
|
+
17.1 => {
|
8457
|
+
Name => 'FlashGroupBControlMode',
|
8458
|
+
Mask => 0xf0,
|
8459
|
+
Notes => 'note: group B tags may apply to group A settings for some models',
|
8460
|
+
DataMember => 'FlashGroupBControlMode',
|
8461
|
+
RawConv => '$$self{FlashGroupBControlMode} = $val',
|
8462
|
+
PrintConv => \%flashControlMode,
|
8463
|
+
SeparateTable => 'FlashControlMode',
|
8464
|
+
},
|
8465
|
+
17.2 => { #PH
|
8466
|
+
Name => 'FlashGroupCControlMode',
|
8467
|
+
Mask => 0x0f,
|
8468
|
+
Notes => 'note: group C tags may apply to group B settings for some models',
|
8469
|
+
DataMember => 'FlashGroupCControlMode',
|
8470
|
+
RawConv => '$$self{FlashGroupCControlMode} = $val',
|
8471
|
+
PrintConv => \%flashControlMode,
|
8472
|
+
SeparateTable => 'FlashControlMode',
|
8473
|
+
},
|
8474
|
+
18 => [
|
8475
|
+
{
|
8476
|
+
Name => 'FlashGroupAOutput',
|
8477
|
+
Condition => '$$self{FlashGroupAControlMode} >= 0x06',
|
8478
|
+
ValueConv => '2 ** (-$val/6)',
|
8479
|
+
ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
|
8480
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
|
8481
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
8482
|
+
},
|
8483
|
+
{
|
8484
|
+
Name => 'FlashGroupACompensation',
|
8485
|
+
Format => 'int8s',
|
8486
|
+
ValueConv => '-$val/6',
|
8487
|
+
ValueConvInv => '-6 * $val',
|
8488
|
+
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
8489
|
+
PrintConvInv => '$val',
|
8490
|
+
},
|
8491
|
+
],
|
8492
|
+
19 => [
|
8493
|
+
{
|
8494
|
+
Name => 'FlashGroupBOutput',
|
8495
|
+
Condition => '$$self{FlashGroupBControlMode} >= 0x60',
|
8496
|
+
ValueConv => '2 ** (-$val/6)',
|
8497
|
+
ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
|
8498
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
|
8499
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
8500
|
+
},
|
8501
|
+
{
|
8502
|
+
Name => 'FlashGroupBCompensation',
|
8503
|
+
Format => 'int8s',
|
8504
|
+
ValueConv => '-$val/6',
|
8505
|
+
ValueConvInv => '-6 * $val',
|
8506
|
+
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
8507
|
+
PrintConvInv => '$val',
|
8508
|
+
},
|
8509
|
+
],
|
8510
|
+
20 => [ #PH
|
8511
|
+
{
|
8512
|
+
Name => 'FlashGroupCOutput',
|
8513
|
+
Condition => '$$self{FlashGroupCControlMode} >= 0x06',
|
8514
|
+
ValueConv => '2 ** (-$val/6)',
|
8515
|
+
ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
|
8516
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
|
8517
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
8518
|
+
},
|
8519
|
+
{
|
8520
|
+
Name => 'FlashGroupCCompensation',
|
8521
|
+
Format => 'int8s',
|
8522
|
+
ValueConv => '-$val/6',
|
8523
|
+
ValueConvInv => '-6 * $val',
|
8524
|
+
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
8525
|
+
PrintConvInv => '$val',
|
8526
|
+
},
|
8527
|
+
],
|
8528
|
+
);
|
8529
|
+
|
8530
|
+
# Flash information (ref JD)
|
8531
|
+
%Image::ExifTool::Nikon::FlashInfo0100 = (
|
8532
|
+
%binaryDataAttrs,
|
8533
|
+
DATAMEMBER => [ 9.2, 15, 16 ],
|
8534
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
8535
|
+
NOTES => q{
|
8536
|
+
These tags are used by the D2H, D2Hs, D2X, D2Xs, D50, D70, D70s, D80 and
|
8537
|
+
D200.
|
8538
|
+
},
|
8539
|
+
# NOTE: Must set ByteOrder in SubDirectory if any multi-byte integer tags added
|
8540
|
+
0 => {
|
8541
|
+
Name => 'FlashInfoVersion',
|
8542
|
+
Format => 'string[4]',
|
8543
|
+
Writable => 0,
|
8544
|
+
},
|
8545
|
+
4 => { #PH
|
8546
|
+
Name => 'FlashSource',
|
8547
|
+
PrintConv => {
|
8548
|
+
0 => 'None',
|
8549
|
+
1 => 'External',
|
8550
|
+
2 => 'Internal',
|
8551
|
+
},
|
8552
|
+
},
|
8553
|
+
# 5 - values: 46,48,50,54,78
|
8554
|
+
6 => {
|
8555
|
+
Format => 'int8u[2]',
|
8556
|
+
Name => 'ExternalFlashFirmware',
|
8557
|
+
SeparateTable => 'FlashFirmware',
|
8558
|
+
PrintConv => \%flashFirmware,
|
8559
|
+
},
|
8560
|
+
8 => {
|
8561
|
+
Name => 'ExternalFlashFlags',
|
8562
|
+
PrintConv => { 0 => '(none)',
|
8563
|
+
BITMASK => {
|
8564
|
+
0 => 'Fired', #28
|
8565
|
+
2 => 'Bounce Flash', #PH
|
8566
|
+
4 => 'Wide Flash Adapter',
|
8567
|
+
5 => 'Dome Diffuser', #28
|
8568
|
+
},
|
8569
|
+
},
|
8570
|
+
},
|
8571
|
+
9.1 => {
|
8572
|
+
Name => 'FlashCommanderMode',
|
8573
|
+
Mask => 0x80,
|
8574
|
+
PrintConv => { 0 => 'Off', 1 => 'On' },
|
8575
|
+
},
|
8576
|
+
9.2 => {
|
8577
|
+
Name => 'FlashControlMode',
|
8578
|
+
Mask => 0x7f,
|
8579
|
+
DataMember => 'FlashControlMode',
|
8580
|
+
RawConv => '$$self{FlashControlMode} = $val',
|
8581
|
+
PrintConv => \%flashControlMode,
|
8582
|
+
SeparateTable => 'FlashControlMode',
|
8583
|
+
},
|
8584
|
+
10 => [
|
8585
|
+
{
|
8586
|
+
Name => 'FlashOutput',
|
8587
|
+
Condition => '$$self{FlashControlMode} >= 0x06',
|
8588
|
+
ValueConv => '2 ** (-$val/6)',
|
8589
|
+
ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
|
8590
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
|
8591
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
8592
|
+
},
|
8593
|
+
{
|
8594
|
+
Name => 'FlashCompensation',
|
8595
|
+
Format => 'int8s',
|
8596
|
+
Priority => 0,
|
8597
|
+
ValueConv => '-$val/6',
|
8598
|
+
ValueConvInv => '-6 * $val',
|
8599
|
+
PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)',
|
8600
|
+
PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
|
8601
|
+
},
|
8602
|
+
],
|
8603
|
+
11 => {
|
8604
|
+
Name => 'FlashFocalLength',
|
7517
8605
|
RawConv => '$val ? $val : undef',
|
7518
8606
|
PrintConv => '"$val mm"',
|
7519
8607
|
PrintConvInv => '$val=~/(\d+)/; $1 || 0',
|
@@ -8492,6 +9580,25 @@ my %nikonFocalConversions = (
|
|
8492
9580
|
},
|
8493
9581
|
);
|
8494
9582
|
|
9583
|
+
# MakerNotes0x51 - compression info for Z9
|
9584
|
+
%Image::ExifTool::Nikon::MakerNotes0x51 = (
|
9585
|
+
%binaryDataAttrs,
|
9586
|
+
DATAMEMBER => [ 0 ],
|
9587
|
+
GROUPS => { 0 => 'MakerNotes' },
|
9588
|
+
0 => {
|
9589
|
+
Name => 'FirmwareVersion',
|
9590
|
+
Format => 'string[8]',
|
9591
|
+
Writable => 0,
|
9592
|
+
RawConv => '$$self{FirmwareVersion} = $val',
|
9593
|
+
},
|
9594
|
+
10 => {
|
9595
|
+
Name => 'NEFCompression',
|
9596
|
+
Writable => 'int16u',
|
9597
|
+
SeparateTable => 'NEFCompression',
|
9598
|
+
PrintConv => \%nefCompression,
|
9599
|
+
},
|
9600
|
+
);
|
9601
|
+
|
8495
9602
|
# extra info found in IFD0 of NEF files (ref PH, Z6/Z7)
|
8496
9603
|
%Image::ExifTool::Nikon::NEFInfo = (
|
8497
9604
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|