exiftool-vendored.pl 12.33.0 → 12.40.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.
- package/LICENSE +10 -3
- package/bin/Changes +116 -0
- package/bin/MANIFEST +2 -0
- package/bin/META.json +1 -1
- package/bin/META.yml +1 -1
- package/bin/README +45 -45
- package/bin/config_files/acdsee.config +6 -6
- package/bin/config_files/photoshop_paths.config +30 -7
- package/bin/config_files/picasa_faces.config +1 -1
- package/bin/config_files/pix4d.config +2 -2
- package/bin/config_files/tiff_version.config +2 -2
- package/bin/exiftool +112 -82
- package/bin/lib/File/RandomAccess.pm +1 -1
- package/bin/lib/File/RandomAccess.pod +2 -2
- package/bin/lib/Image/ExifTool/AES.pm +1 -1
- package/bin/lib/Image/ExifTool/AFCP.pm +1 -1
- package/bin/lib/Image/ExifTool/AIFF.pm +1 -1
- package/bin/lib/Image/ExifTool/APE.pm +1 -1
- package/bin/lib/Image/ExifTool/APP12.pm +1 -1
- package/bin/lib/Image/ExifTool/ASF.pm +1 -1
- package/bin/lib/Image/ExifTool/Apple.pm +1 -1
- package/bin/lib/Image/ExifTool/Audible.pm +1 -1
- package/bin/lib/Image/ExifTool/BMP.pm +1 -1
- package/bin/lib/Image/ExifTool/BPG.pm +1 -1
- package/bin/lib/Image/ExifTool/BZZ.pm +1 -1
- package/bin/lib/Image/ExifTool/BigTIFF.pm +1 -1
- package/bin/lib/Image/ExifTool/BuildTagLookup.pm +15 -4
- package/bin/lib/Image/ExifTool/CBOR.pm +1 -1
- package/bin/lib/Image/ExifTool/Canon.pm +225 -13
- package/bin/lib/Image/ExifTool/CanonCustom.pm +13 -3
- package/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
- package/bin/lib/Image/ExifTool/CanonVRD.pm +1 -1
- package/bin/lib/Image/ExifTool/CaptureOne.pm +1 -1
- package/bin/lib/Image/ExifTool/Casio.pm +1 -1
- package/bin/lib/Image/ExifTool/Charset.pm +3 -1
- package/bin/lib/Image/ExifTool/DICOM.pm +1 -1
- package/bin/lib/Image/ExifTool/DJI.pm +1 -1
- package/bin/lib/Image/ExifTool/DNG.pm +1 -1
- package/bin/lib/Image/ExifTool/DPX.pm +1 -1
- package/bin/lib/Image/ExifTool/DV.pm +1 -1
- package/bin/lib/Image/ExifTool/DarwinCore.pm +3 -3
- package/bin/lib/Image/ExifTool/DjVu.pm +1 -1
- package/bin/lib/Image/ExifTool/EXE.pm +1 -1
- package/bin/lib/Image/ExifTool/Exif.pm +64 -20
- package/bin/lib/Image/ExifTool/FITS.pm +1 -1
- package/bin/lib/Image/ExifTool/FLAC.pm +1 -1
- package/bin/lib/Image/ExifTool/FLIF.pm +1 -1
- package/bin/lib/Image/ExifTool/FLIR.pm +48 -11
- package/bin/lib/Image/ExifTool/Fixup.pm +1 -1
- package/bin/lib/Image/ExifTool/Flash.pm +1 -1
- package/bin/lib/Image/ExifTool/FlashPix.pm +1 -1
- package/bin/lib/Image/ExifTool/Font.pm +1 -1
- package/bin/lib/Image/ExifTool/FotoStation.pm +1 -1
- package/bin/lib/Image/ExifTool/FujiFilm.pm +1 -1
- package/bin/lib/Image/ExifTool/GE.pm +1 -1
- package/bin/lib/Image/ExifTool/GIF.pm +6 -2
- package/bin/lib/Image/ExifTool/GIMP.pm +1 -1
- package/bin/lib/Image/ExifTool/GPS.pm +15 -11
- package/bin/lib/Image/ExifTool/GeoTiff.pm +1 -1
- package/bin/lib/Image/ExifTool/Geotag.pm +4 -3
- package/bin/lib/Image/ExifTool/GoPro.pm +1 -1
- package/bin/lib/Image/ExifTool/H264.pm +1 -1
- package/bin/lib/Image/ExifTool/HP.pm +1 -1
- package/bin/lib/Image/ExifTool/HTML.pm +1 -1
- package/bin/lib/Image/ExifTool/HtmlDump.pm +1 -1
- package/bin/lib/Image/ExifTool/ICC_Profile.pm +97 -5
- package/bin/lib/Image/ExifTool/ID3.pm +1 -1
- package/bin/lib/Image/ExifTool/IPTC.pm +1 -1
- package/bin/lib/Image/ExifTool/ISO.pm +1 -1
- package/bin/lib/Image/ExifTool/ITC.pm +1 -1
- package/bin/lib/Image/ExifTool/Import.pm +1 -1
- package/bin/lib/Image/ExifTool/InDesign.pm +1 -1
- package/bin/lib/Image/ExifTool/JPEG.pm +6 -2
- package/bin/lib/Image/ExifTool/JPEGDigest.pm +1 -1
- package/bin/lib/Image/ExifTool/JSON.pm +1 -1
- package/bin/lib/Image/ExifTool/JVC.pm +1 -1
- package/bin/lib/Image/ExifTool/Jpeg2000.pm +109 -12
- package/bin/lib/Image/ExifTool/Kodak.pm +1 -1
- package/bin/lib/Image/ExifTool/KyoceraRaw.pm +1 -1
- package/bin/lib/Image/ExifTool/LIF.pm +1 -1
- package/bin/lib/Image/ExifTool/LNK.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/cs.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/de.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/en_ca.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/en_gb.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/fi.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/fr.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/it.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/ja.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/ko.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/nl.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/pl.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/ru.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/sv.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/tr.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/zh_cn.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/zh_tw.pm +1 -1
- package/bin/lib/Image/ExifTool/Leaf.pm +1 -1
- package/bin/lib/Image/ExifTool/Lytro.pm +1 -1
- package/bin/lib/Image/ExifTool/M2TS.pm +1 -1
- package/bin/lib/Image/ExifTool/MIE.pm +1 -1
- package/bin/lib/Image/ExifTool/MIEUnits.pod +1 -1
- package/bin/lib/Image/ExifTool/MIFF.pm +1 -1
- package/bin/lib/Image/ExifTool/MNG.pm +1 -1
- package/bin/lib/Image/ExifTool/MOI.pm +1 -1
- package/bin/lib/Image/ExifTool/MPC.pm +1 -1
- package/bin/lib/Image/ExifTool/MPEG.pm +1 -1
- package/bin/lib/Image/ExifTool/MPF.pm +1 -1
- package/bin/lib/Image/ExifTool/MRC.pm +1 -1
- package/bin/lib/Image/ExifTool/MWG.pm +1 -1
- package/bin/lib/Image/ExifTool/MXF.pm +1 -1
- package/bin/lib/Image/ExifTool/MacOS.pm +1 -1
- package/bin/lib/Image/ExifTool/MakerNotes.pm +1 -1
- package/bin/lib/Image/ExifTool/Matroska.pm +9 -5
- package/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
- package/bin/lib/Image/ExifTool/Minolta.pm +1 -1
- package/bin/lib/Image/ExifTool/MinoltaRaw.pm +1 -1
- package/bin/lib/Image/ExifTool/Motorola.pm +1 -1
- package/bin/lib/Image/ExifTool/Nikon.pm +1918 -72
- package/bin/lib/Image/ExifTool/NikonCapture.pm +1 -1
- package/bin/lib/Image/ExifTool/NikonCustom.pm +523 -6
- package/bin/lib/Image/ExifTool/NikonSettings.pm +150 -87
- package/bin/lib/Image/ExifTool/Nintendo.pm +1 -1
- package/bin/lib/Image/ExifTool/OOXML.pm +1 -1
- package/bin/lib/Image/ExifTool/Ogg.pm +1 -1
- package/bin/lib/Image/ExifTool/Olympus.pm +7 -7
- package/bin/lib/Image/ExifTool/OpenEXR.pm +5 -3
- package/bin/lib/Image/ExifTool/Opus.pm +1 -1
- package/bin/lib/Image/ExifTool/Other.pm +1 -1
- package/bin/lib/Image/ExifTool/PCX.pm +1 -1
- package/bin/lib/Image/ExifTool/PDF.pm +6 -4
- package/bin/lib/Image/ExifTool/PGF.pm +1 -1
- package/bin/lib/Image/ExifTool/PICT.pm +1 -1
- package/bin/lib/Image/ExifTool/PLIST.pm +1 -1
- package/bin/lib/Image/ExifTool/PLUS.pm +1 -1
- package/bin/lib/Image/ExifTool/PNG.pm +29 -8
- package/bin/lib/Image/ExifTool/PPM.pm +1 -1
- package/bin/lib/Image/ExifTool/PSP.pm +1 -1
- package/bin/lib/Image/ExifTool/Palm.pm +1 -1
- package/bin/lib/Image/ExifTool/Panasonic.pm +1 -1
- package/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -1
- package/bin/lib/Image/ExifTool/Parrot.pm +1 -1
- package/bin/lib/Image/ExifTool/Pentax.pm +3 -2
- package/bin/lib/Image/ExifTool/PhaseOne.pm +1 -1
- package/bin/lib/Image/ExifTool/PhotoCD.pm +1 -1
- package/bin/lib/Image/ExifTool/PhotoMechanic.pm +1 -1
- package/bin/lib/Image/ExifTool/Photoshop.pm +1 -1
- package/bin/lib/Image/ExifTool/PostScript.pm +1 -1
- package/bin/lib/Image/ExifTool/PrintIM.pm +1 -1
- package/bin/lib/Image/ExifTool/Qualcomm.pm +1 -1
- package/bin/lib/Image/ExifTool/QuickTime.pm +25 -7
- package/bin/lib/Image/ExifTool/QuickTimeStream.pl +40 -4
- package/bin/lib/Image/ExifTool/README +4 -0
- package/bin/lib/Image/ExifTool/RIFF.pm +1 -1
- package/bin/lib/Image/ExifTool/RSRC.pm +1 -1
- package/bin/lib/Image/ExifTool/RTF.pm +1 -1
- package/bin/lib/Image/ExifTool/Radiance.pm +1 -1
- package/bin/lib/Image/ExifTool/Rawzor.pm +1 -1
- package/bin/lib/Image/ExifTool/Real.pm +1 -1
- package/bin/lib/Image/ExifTool/Reconyx.pm +1 -1
- package/bin/lib/Image/ExifTool/Red.pm +1 -1
- package/bin/lib/Image/ExifTool/Ricoh.pm +1 -1
- package/bin/lib/Image/ExifTool/Samsung.pm +6 -2
- package/bin/lib/Image/ExifTool/Sanyo.pm +1 -1
- package/bin/lib/Image/ExifTool/Scalado.pm +1 -1
- package/bin/lib/Image/ExifTool/Shift.pl +3 -1
- package/bin/lib/Image/ExifTool/Shortcuts.pm +1 -1
- package/bin/lib/Image/ExifTool/Sigma.pm +1 -1
- package/bin/lib/Image/ExifTool/SigmaRaw.pm +1 -1
- package/bin/lib/Image/ExifTool/Sony.pm +34 -12
- package/bin/lib/Image/ExifTool/SonyIDC.pm +1 -1
- package/bin/lib/Image/ExifTool/Stim.pm +1 -1
- package/bin/lib/Image/ExifTool/TagInfoXML.pm +11 -6
- package/bin/lib/Image/ExifTool/TagLookup.pm +6581 -5893
- package/bin/lib/Image/ExifTool/TagNames.pod +1641 -59
- package/bin/lib/Image/ExifTool/Text.pm +1 -1
- package/bin/lib/Image/ExifTool/Theora.pm +1 -1
- package/bin/lib/Image/ExifTool/Torrent.pm +1 -1
- package/bin/lib/Image/ExifTool/Unknown.pm +1 -1
- package/bin/lib/Image/ExifTool/VCard.pm +1 -1
- package/bin/lib/Image/ExifTool/Validate.pm +1 -1
- package/bin/lib/Image/ExifTool/Vorbis.pm +1 -1
- package/bin/lib/Image/ExifTool/WTV.pm +1 -1
- package/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
- package/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
- package/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
- package/bin/lib/Image/ExifTool/WritePDF.pl +1 -1
- package/bin/lib/Image/ExifTool/WritePNG.pl +30 -10
- package/bin/lib/Image/ExifTool/WritePhotoshop.pl +1 -1
- package/bin/lib/Image/ExifTool/WritePostScript.pl +1 -1
- package/bin/lib/Image/ExifTool/WriteQuickTime.pl +19 -4
- package/bin/lib/Image/ExifTool/WriteXMP.pl +13 -12
- package/bin/lib/Image/ExifTool/Writer.pl +56 -10
- package/bin/lib/Image/ExifTool/XMP.pm +169 -54
- package/bin/lib/Image/ExifTool/XMP2.pl +6 -4
- package/bin/lib/Image/ExifTool/XMPStruct.pl +22 -8
- package/bin/lib/Image/ExifTool/ZIP.pm +10 -2
- package/bin/lib/Image/ExifTool/ZISRAW.pm +1 -1
- package/bin/lib/Image/ExifTool/iWork.pm +1 -1
- package/bin/lib/Image/ExifTool.pm +93 -13
- package/bin/lib/Image/ExifTool.pod +80 -70
- package/bin/perl-Image-ExifTool.spec +43 -43
- package/bin/pp_build_exe.args +5 -5
- package/package.json +3 -3
|
@@ -61,8 +61,9 @@ use vars qw($VERSION %nikonLensIDs %nikonTextEncoding);
|
|
|
61
61
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
62
62
|
use Image::ExifTool::Exif;
|
|
63
63
|
use Image::ExifTool::GPS;
|
|
64
|
+
use Image::ExifTool::XMP;
|
|
64
65
|
|
|
65
|
-
$VERSION = '4.
|
|
66
|
+
$VERSION = '4.05';
|
|
66
67
|
|
|
67
68
|
sub LensIDConv($$$);
|
|
68
69
|
sub ProcessNikonAVI($$$);
|
|
@@ -404,6 +405,7 @@ sub GetAFPointGrid($$;$);
|
|
|
404
405
|
'48 38 1F 37 34 3C 4B 06' => 'Sigma 12-24mm F4.5-5.6 EX DG Aspherical HSM',
|
|
405
406
|
'F0 38 1F 37 34 3C 4B 06' => 'Sigma 12-24mm F4.5-5.6 EX DG Aspherical HSM',
|
|
406
407
|
'96 38 1F 37 34 3C 4B 06' => 'Sigma 12-24mm F4.5-5.6 II DG HSM', #Jurgen Sahlberg
|
|
408
|
+
'CA 3C 1F 37 30 30 4B 46' => 'Sigma 12-24mm F4 DG HSM | A', #github issue#101
|
|
407
409
|
'C1 48 24 37 24 24 4B 46' => 'Sigma 14-24mm F2.8 DG HSM | A', #30
|
|
408
410
|
'26 40 27 3F 2C 34 1C 02' => 'Sigma 15-30mm F3.5-4.5 EX DG Aspherical DF',
|
|
409
411
|
'48 48 2B 44 24 30 4B 06' => 'Sigma 17-35mm F2.8-4 EX DG Aspherical HSM',
|
|
@@ -493,6 +495,7 @@ sub GetAFPointGrid($$;$);
|
|
|
493
495
|
'7A 48 5C 80 24 24 4B 06' => 'Sigma 70-200mm F2.8 EX APO DG Macro HSM II',
|
|
494
496
|
'EE 48 5C 80 24 24 4B 06' => 'Sigma 70-200mm F2.8 EX APO DG Macro HSM II', #JD
|
|
495
497
|
'9C 48 5C 80 24 24 4B 0E' => 'Sigma 70-200mm F2.8 EX DG OS HSM', #Rolando Ruzic
|
|
498
|
+
'BB 48 5C 80 24 24 4B 4E' => 'Sigma 70-200mm F2.8 DG OS HSM | S', #forum13207
|
|
496
499
|
'02 46 5C 82 25 25 02 00' => 'Sigma 70-210mm F2.8 APO', #JD
|
|
497
500
|
'02 40 5C 82 2C 35 02 00' => 'Sigma APO 70-210mm F3.5-4.5',
|
|
498
501
|
'26 3C 5C 82 30 3C 1C 02' => 'Sigma 70-210mm F4-5.6 UC-II',
|
|
@@ -507,6 +510,7 @@ sub GetAFPointGrid($$;$);
|
|
|
507
510
|
'77 44 60 98 34 3C 7B 0E' => 'Sigma 80-400mm F4.5-5.6 APO DG D OS',
|
|
508
511
|
'48 48 68 8E 30 30 4B 02' => 'Sigma APO 100-300mm F4 EX IF HSM',
|
|
509
512
|
'F3 48 68 8E 30 30 4B 02' => 'Sigma APO 100-300mm F4 EX IF HSM',
|
|
513
|
+
'26 45 68 8E 34 42 1C 02' => 'Sigma 100-300mm F4.5-6.7 DL', #30
|
|
510
514
|
'48 54 6F 8E 24 24 4B 02' => 'Sigma APO 120-300mm F2.8 EX DG HSM',
|
|
511
515
|
'7A 54 6E 8E 24 24 4B 02' => 'Sigma APO 120-300mm F2.8 EX DG HSM',
|
|
512
516
|
'FA 54 6E 8E 24 24 4B 02' => 'Sigma APO 120-300mm F2.8 EX DG HSM', #https://exiftool.org/forum/index.php/topic,2787.0.html
|
|
@@ -701,6 +705,7 @@ sub GetAFPointGrid($$;$);
|
|
|
701
705
|
#
|
|
702
706
|
'9A 4C 50 50 14 14 9C 06' => 'Yongnuo YN50mm F1.8N',
|
|
703
707
|
'9F 48 48 48 24 24 A1 06' => 'Yongnuo YN40mm F2.8N', #30
|
|
708
|
+
'9F 54 68 68 18 18 A2 06' => 'Yongnuo YN100mm F2N', #30
|
|
704
709
|
#
|
|
705
710
|
'02 40 44 5C 2C 34 02 00' => 'Exakta AF 35-70mm 1:3.5-4.5 MC',
|
|
706
711
|
#
|
|
@@ -753,6 +758,7 @@ my %flashFirmware = (
|
|
|
753
758
|
'5 2' => '5.02 (SB-900)',
|
|
754
759
|
'6 1' => '6.01 (SB-700)', #https://exiftool.org/forum/index.php/topic,5034.0.html
|
|
755
760
|
'7 1' => '7.01 (SB-910)', #PH
|
|
761
|
+
'14 3' => '14.03 (SB-5000)', #28
|
|
756
762
|
OTHER => sub {
|
|
757
763
|
my ($val, $inv) = @_;
|
|
758
764
|
return sprintf('%d.%.2d (Unknown model)', split(' ', $val)) unless $inv;
|
|
@@ -809,6 +815,124 @@ my %flashControlMode = (
|
|
|
809
815
|
0x07 => 'Repeating Flash',
|
|
810
816
|
);
|
|
811
817
|
|
|
818
|
+
my %activeDLightingZ7 = (
|
|
819
|
+
0 => 'Off',
|
|
820
|
+
2 => 'Low',
|
|
821
|
+
3 => 'Normal',
|
|
822
|
+
4 => 'High',
|
|
823
|
+
5 => 'Extra High',
|
|
824
|
+
);
|
|
825
|
+
|
|
826
|
+
my %flashControlModeZ7 = (
|
|
827
|
+
0 => 'TTL',
|
|
828
|
+
1 => 'Auto External Flash',
|
|
829
|
+
2 => 'GN (distance priority)',
|
|
830
|
+
3 => 'Manual',
|
|
831
|
+
4 => 'Repeating Flash',
|
|
832
|
+
);
|
|
833
|
+
|
|
834
|
+
my %flashRemoteControlZ7 = (
|
|
835
|
+
0 => 'Group',
|
|
836
|
+
1 => 'Quick Wireless',
|
|
837
|
+
2 => 'Remote Repeating',
|
|
838
|
+
);
|
|
839
|
+
|
|
840
|
+
my %flashWirelessOptionZ7 = (
|
|
841
|
+
0 => 'Off',
|
|
842
|
+
1 => 'Optical AWL',
|
|
843
|
+
2 => 'Optical/Radio AWL',
|
|
844
|
+
3 => 'Radio AWL',
|
|
845
|
+
);
|
|
846
|
+
|
|
847
|
+
my %focusModeZ7 = (
|
|
848
|
+
0 => 'Manual',
|
|
849
|
+
1 => 'AF-S',
|
|
850
|
+
2 => 'AF-C',
|
|
851
|
+
4 => 'AF-F', # full frame
|
|
852
|
+
);
|
|
853
|
+
|
|
854
|
+
my %infoZSeries = (
|
|
855
|
+
Condition => '$$self{Model} =~ /^NIKON Z (5|50|6|6_2|7|7_2|fc|9)\b/i',
|
|
856
|
+
Notes => 'Z Series cameras thru Decemeber 2021',
|
|
857
|
+
);
|
|
858
|
+
my %iSOAutoHiLimitZ7 = (
|
|
859
|
+
0 => 'ISO 64',
|
|
860
|
+
1 => 'ISO 80',
|
|
861
|
+
2 => 'ISO 100',
|
|
862
|
+
3 => 'ISO 125',
|
|
863
|
+
4 => 'ISO 160',
|
|
864
|
+
5 => 'ISO 200',
|
|
865
|
+
6 => 'ISO 250',
|
|
866
|
+
7 => 'ISO 320',
|
|
867
|
+
8 => 'ISO 400',
|
|
868
|
+
9 => 'ISO 500',
|
|
869
|
+
10 => 'ISO 640',
|
|
870
|
+
11 => 'ISO 800',
|
|
871
|
+
12 => 'ISO 1000',
|
|
872
|
+
13 => 'ISO 1250',
|
|
873
|
+
14 => 'ISO 1600',
|
|
874
|
+
15 => 'ISO 2000',
|
|
875
|
+
16 => 'ISO 2500',
|
|
876
|
+
17 => 'ISO 3200',
|
|
877
|
+
18 => 'ISO 4000',
|
|
878
|
+
19 => 'ISO 5000',
|
|
879
|
+
20 => 'ISO 6400',
|
|
880
|
+
21 => 'ISO 8000',
|
|
881
|
+
22 => 'ISO 10000',
|
|
882
|
+
23 => 'ISO 12800',
|
|
883
|
+
24 => 'ISO 16000',
|
|
884
|
+
25 => 'ISO 20000',
|
|
885
|
+
26 => 'ISO 25600',
|
|
886
|
+
27 => 'ISO Hi 0.3',
|
|
887
|
+
28 => 'ISO Hi 0.7',
|
|
888
|
+
29 => 'ISO Hi 1.0',
|
|
889
|
+
32 => 'ISO Hi 2.0',
|
|
890
|
+
);
|
|
891
|
+
|
|
892
|
+
my %meteringModeZ7 = (
|
|
893
|
+
0 => 'Matrix',
|
|
894
|
+
1 => 'Center',
|
|
895
|
+
2 => 'Spot',
|
|
896
|
+
3 => 'Highlight'
|
|
897
|
+
);
|
|
898
|
+
|
|
899
|
+
my %movieFrameRateZ7 = (
|
|
900
|
+
0 => '120p',
|
|
901
|
+
1 => '100p',
|
|
902
|
+
2 => '60p',
|
|
903
|
+
3 => '50p',
|
|
904
|
+
4 => '30p',
|
|
905
|
+
5 => '25p',
|
|
906
|
+
6 => '24p',
|
|
907
|
+
);
|
|
908
|
+
|
|
909
|
+
my %offLowNormalHighZ7 = (
|
|
910
|
+
0 => 'Off',
|
|
911
|
+
1 => 'Low',
|
|
912
|
+
2 => 'Normal',
|
|
913
|
+
3 => 'High',
|
|
914
|
+
);
|
|
915
|
+
|
|
916
|
+
my %movieFrameSizeZ9 = (
|
|
917
|
+
1 => '1920x1080',
|
|
918
|
+
2 => '3840x2160',
|
|
919
|
+
3 => '7680x4320',
|
|
920
|
+
);
|
|
921
|
+
|
|
922
|
+
my %subjectDetectionZ9 = (
|
|
923
|
+
0 => 'Off',
|
|
924
|
+
1 => 'Auto',
|
|
925
|
+
2 => 'People',
|
|
926
|
+
3 => 'Animals',
|
|
927
|
+
4 => 'Vehicles',
|
|
928
|
+
);
|
|
929
|
+
|
|
930
|
+
my %vRModeZ9 = (
|
|
931
|
+
0 => 'Off',
|
|
932
|
+
1 => 'Normal',
|
|
933
|
+
2 => 'Sport',
|
|
934
|
+
);
|
|
935
|
+
|
|
812
936
|
my %retouchValues = ( #PH
|
|
813
937
|
0 => 'None',
|
|
814
938
|
3 => 'B & W',
|
|
@@ -1045,7 +1169,9 @@ my %cropHiSpeed = ( #IB
|
|
|
1045
1169
|
10 => '1.3x Movie Crop', #36 (D4/D500)
|
|
1046
1170
|
11 => 'FX Uncropped',
|
|
1047
1171
|
12 => 'DX Uncropped',
|
|
1048
|
-
|
|
1172
|
+
13 => '2.8x Movie Crop', #28 (D5/D6) 5584/1936
|
|
1173
|
+
14 => '1.4x Movie Crop', #28 (D5/D6) 5584/3856
|
|
1174
|
+
15 => '1.5x Movie Crop', #36 (D4/D500) 5600/3872
|
|
1049
1175
|
17 => '1:1 Crop',
|
|
1050
1176
|
OTHER => sub {
|
|
1051
1177
|
my ($val, $inv, $conv) = @_;
|
|
@@ -1057,7 +1183,31 @@ my %cropHiSpeed = ( #IB
|
|
|
1057
1183
|
},
|
|
1058
1184
|
);
|
|
1059
1185
|
|
|
1186
|
+
my %flashGroupOptionsMode = (
|
|
1187
|
+
0 => 'TTL',
|
|
1188
|
+
1 => 'Manual',
|
|
1189
|
+
2 => 'Auto',
|
|
1190
|
+
3 => 'Off',
|
|
1191
|
+
);
|
|
1192
|
+
|
|
1193
|
+
my %nefCompression = ( #28 relocated to MakerNotes_0x51 at offset x'0a (Z9)
|
|
1194
|
+
1 => 'Lossy (type 1)', # (older models)
|
|
1195
|
+
2 => 'Uncompressed', #JD - D100 (even though TIFF compression is set!)
|
|
1196
|
+
3 => 'Lossless',
|
|
1197
|
+
4 => 'Lossy (type 2)',
|
|
1198
|
+
5 => 'Striped packed 12 bits', #IB
|
|
1199
|
+
6 => 'Uncompressed (reduced to 12 bit)', #IB
|
|
1200
|
+
7 => 'Unpacked 12 bits', #IB (padded to 16)
|
|
1201
|
+
8 => 'Small', #IB
|
|
1202
|
+
9 => 'Packed 12 bits', #IB (2 pixels in 3 bytes)
|
|
1203
|
+
10 => 'Packed 14 bits', #28 (4 pixels in 7 bytes, eg. D6 uncompressed 14 bit)
|
|
1204
|
+
13 => 'High Efficiency', #28
|
|
1205
|
+
14 => 'High Efficiency*', #28
|
|
1206
|
+
);
|
|
1207
|
+
|
|
1208
|
+
my %noYes = ( 0 => 'No' , 1 => 'Yes', );
|
|
1060
1209
|
my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
1210
|
+
my %onOff = ( 0 => 'On', 1 => 'Off' );
|
|
1061
1211
|
|
|
1062
1212
|
# common attributes for writable BinaryData directories
|
|
1063
1213
|
my %binaryDataAttrs = (
|
|
@@ -1068,6 +1218,30 @@ my %binaryDataAttrs = (
|
|
|
1068
1218
|
FIRST_ENTRY => 0,
|
|
1069
1219
|
);
|
|
1070
1220
|
|
|
1221
|
+
my %base64bin = ( ValueConv => 'Image::ExifTool::XMP::DecodeBase64($val)' );
|
|
1222
|
+
my %base64int32u = ( ValueConv => 'my $val=Image::ExifTool::XMP::DecodeBase64($val); unpack("V",$$val)' );
|
|
1223
|
+
my %base64bytes = ( ValueConv => 'my $val=Image::ExifTool::XMP::DecodeBase64($val); join(".",unpack("C*",$$val))' );
|
|
1224
|
+
my %base64double = (
|
|
1225
|
+
ValueConv => q{
|
|
1226
|
+
my $val=Image::ExifTool::XMP::DecodeBase64($val);
|
|
1227
|
+
my $saveOrder = GetByteOrder();
|
|
1228
|
+
SetByteOrder('II');
|
|
1229
|
+
$val = GetDouble($val,0);
|
|
1230
|
+
SetByteOrder($saveOrder);
|
|
1231
|
+
return $val;
|
|
1232
|
+
},
|
|
1233
|
+
);
|
|
1234
|
+
my %base64coord = (
|
|
1235
|
+
ValueConv => q{
|
|
1236
|
+
my $val=Image::ExifTool::XMP::DecodeBase64($val);
|
|
1237
|
+
my $saveOrder = GetByteOrder();
|
|
1238
|
+
SetByteOrder('II');
|
|
1239
|
+
$val = GetDouble($val,0) + GetDouble($val,8)/60 + GetDouble($val,16)/3600;
|
|
1240
|
+
SetByteOrder($saveOrder);
|
|
1241
|
+
return $val;
|
|
1242
|
+
},
|
|
1243
|
+
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1)',
|
|
1244
|
+
);
|
|
1071
1245
|
# Nikon maker note tags
|
|
1072
1246
|
%Image::ExifTool::Nikon::Main = (
|
|
1073
1247
|
PROCESS_PROC => \&Image::ExifTool::Nikon::ProcessNikon,
|
|
@@ -1464,6 +1638,16 @@ my %binaryDataAttrs = (
|
|
|
1464
1638
|
Name => 'ColorTemperatureAuto',
|
|
1465
1639
|
Writable => 'int16u',
|
|
1466
1640
|
},
|
|
1641
|
+
0x0051 => { #28 (Z9)
|
|
1642
|
+
Name => 'MakerNotes0x51',
|
|
1643
|
+
Writable => 'undef',
|
|
1644
|
+
Hidden => 1,
|
|
1645
|
+
Permanent => 0,
|
|
1646
|
+
Flags => [ 'Binary', 'Protected' ],
|
|
1647
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::MakerNotes0x51' },
|
|
1648
|
+
},
|
|
1649
|
+
#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)
|
|
1650
|
+
#0x005e #28 possibly DiffractionCompensation block? Certainly offset 0x04 within block contains tag DiffractionCompensation
|
|
1467
1651
|
0x0080 => { Name => 'ImageAdjustment', Writable => 'string' },
|
|
1468
1652
|
0x0081 => { Name => 'ToneComp', Writable => 'string' }, #2
|
|
1469
1653
|
0x0082 => { Name => 'AuxiliaryLens', Writable => 'string' },
|
|
@@ -1861,7 +2045,7 @@ my %binaryDataAttrs = (
|
|
|
1861
2045
|
SubDirectory => {
|
|
1862
2046
|
TagTable => 'Image::ExifTool::Nikon::ShotInfoD6',
|
|
1863
2047
|
DecryptStart => 4,
|
|
1864
|
-
DecryptLen =>
|
|
2048
|
+
DecryptLen => 0xc292 + 720, # thru decoded parts of Offset 32
|
|
1865
2049
|
ByteOrder => 'LittleEndian',
|
|
1866
2050
|
},
|
|
1867
2051
|
},
|
|
@@ -1875,17 +2059,30 @@ my %binaryDataAttrs = (
|
|
|
1875
2059
|
ByteOrder => 'BigEndian',
|
|
1876
2060
|
},
|
|
1877
2061
|
},
|
|
1878
|
-
{ # (Z6_2 firmware version 1.00 and
|
|
1879
|
-
|
|
1880
|
-
|
|
2062
|
+
{ # (Z6_2 firmware version 1.00 and Z7II firmware versions 1.00 & 1.01, ref 28)
|
|
2063
|
+
# 0800=Z6/Z7 0801=Z50 0802=Z5 0803=Z6II/Z7II 0804=Zfc
|
|
2064
|
+
Condition => '$$valPt =~ /^080[01234]/',
|
|
2065
|
+
Name => 'ShotInfoZ7II',
|
|
2066
|
+
SubDirectory => {
|
|
2067
|
+
TagTable => 'Image::ExifTool::Nikon::ShotInfoZ7II',
|
|
2068
|
+
DecryptStart => 4,
|
|
2069
|
+
# TODO: eventually set the length dynamically according to actual offsets!
|
|
2070
|
+
DecryptLen => 0xd04e + 860, # thru decoded MenuSettingsZ7II
|
|
2071
|
+
ByteOrder => 'LittleEndian',
|
|
2072
|
+
},
|
|
2073
|
+
},
|
|
2074
|
+
{ # (Z9 firmware version 1.00 ref 28)
|
|
2075
|
+
Condition => '$$valPt =~ /^0805/',
|
|
2076
|
+
Name => 'ShotInfoZ9',
|
|
1881
2077
|
SubDirectory => {
|
|
1882
|
-
TagTable => 'Image::ExifTool::Nikon::
|
|
2078
|
+
TagTable => 'Image::ExifTool::Nikon::ShotInfoZ9',
|
|
1883
2079
|
DecryptStart => 4,
|
|
1884
|
-
|
|
2080
|
+
# TODO: eventually set the length dynamically according to actual offsets!
|
|
2081
|
+
DecryptLen => 0xec4b + 1646, # decoded thru end of CustomSettingZ9 in Offset26 (+MenuSettingsZ9Offset)
|
|
1885
2082
|
ByteOrder => 'LittleEndian',
|
|
1886
2083
|
},
|
|
1887
2084
|
},
|
|
1888
|
-
{ # D7100=0227
|
|
2085
|
+
{ # D7100=0227
|
|
1889
2086
|
Condition => '$$valPt =~ /^0[28]/',
|
|
1890
2087
|
Name => 'ShotInfo02xx',
|
|
1891
2088
|
SubDirectory => {
|
|
@@ -1914,18 +2111,8 @@ my %binaryDataAttrs = (
|
|
|
1914
2111
|
0x0093 => { #21
|
|
1915
2112
|
Name => 'NEFCompression',
|
|
1916
2113
|
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
|
-
},
|
|
2114
|
+
SeparateTable => 'NEFCompression',
|
|
2115
|
+
PrintConv => \%nefCompression,
|
|
1929
2116
|
},
|
|
1930
2117
|
0x0094 => { Name => 'SaturationAdj', Writable => 'int16s' },
|
|
1931
2118
|
0x0095 => { Name => 'NoiseReduction', Writable => 'string' }, # ("Off" or "FPNR"=long exposure NR)
|
|
@@ -2126,7 +2313,7 @@ my %binaryDataAttrs = (
|
|
|
2126
2313
|
},
|
|
2127
2314
|
},
|
|
2128
2315
|
{
|
|
2129
|
-
Condition => '$$valPt =~ /^080[
|
|
2316
|
+
Condition => '$$valPt =~ /^080[012]/', # Z6/Z7/Z9
|
|
2130
2317
|
Name => 'LensData0800',
|
|
2131
2318
|
SubDirectory => {
|
|
2132
2319
|
TagTable => 'Image::ExifTool::Nikon::LensData0800',
|
|
@@ -2261,8 +2448,8 @@ my %binaryDataAttrs = (
|
|
|
2261
2448
|
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::FlashInfo0107' },
|
|
2262
2449
|
},
|
|
2263
2450
|
{
|
|
2264
|
-
Name => 'FlashInfo0300', # (
|
|
2265
|
-
Condition => '$$valPt =~ /^
|
|
2451
|
+
Name => 'FlashInfo0300', # (Z7II)
|
|
2452
|
+
Condition => '$$valPt =~ /^030[01]/',
|
|
2266
2453
|
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::FlashInfo0300' },
|
|
2267
2454
|
},
|
|
2268
2455
|
{
|
|
@@ -2335,11 +2522,15 @@ my %binaryDataAttrs = (
|
|
|
2335
2522
|
PrintConv => '$self->ConvertDateTime($val)',
|
|
2336
2523
|
PrintConvInv => '$self->InverseDateTime($val,0)',
|
|
2337
2524
|
},
|
|
2338
|
-
0x00b7 => {
|
|
2525
|
+
0x00b7 => [{
|
|
2526
|
+
Name => 'AFInfo2',
|
|
2527
|
+
Condition => '$$self{Model} =~ /^NIKON Z 9\b/i', #AFInfo2Version 0400
|
|
2528
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::AFInfo2V0400' },
|
|
2529
|
+
},{ #JD
|
|
2339
2530
|
Name => 'AFInfo2',
|
|
2340
2531
|
# (this structure may be byte swapped when rewritten by CaptureNX)
|
|
2341
2532
|
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::AFInfo2' },
|
|
2342
|
-
},
|
|
2533
|
+
}],
|
|
2343
2534
|
0x00b8 => [{ #PH
|
|
2344
2535
|
Name => 'FileInfo',
|
|
2345
2536
|
# unfortunately, some newer models write this as little-endian
|
|
@@ -2388,6 +2579,10 @@ my %binaryDataAttrs = (
|
|
|
2388
2579
|
Flags => [ 'Binary', 'Protected' ],
|
|
2389
2580
|
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::PictureControl' },
|
|
2390
2581
|
},
|
|
2582
|
+
0x00bf => {
|
|
2583
|
+
Name => 'SilentPhotography',
|
|
2584
|
+
PrintConv => \%offOn,
|
|
2585
|
+
},
|
|
2391
2586
|
0x00c3 => {
|
|
2392
2587
|
Name => 'BarometerInfo',
|
|
2393
2588
|
SubDirectory => {
|
|
@@ -2596,15 +2791,23 @@ my %binaryDataAttrs = (
|
|
|
2596
2791
|
},
|
|
2597
2792
|
},
|
|
2598
2793
|
# 5 - values: 0, 1 (VR On), 2 (VR Off)
|
|
2599
|
-
6 => {
|
|
2794
|
+
6 => [{
|
|
2795
|
+
Name => 'VRMode',
|
|
2796
|
+
PrintConv => {
|
|
2797
|
+
0 => 'Off',
|
|
2798
|
+
1 => 'Sport',
|
|
2799
|
+
3 => 'Normal',
|
|
2800
|
+
},
|
|
2801
|
+
%infoZSeries
|
|
2802
|
+
},{
|
|
2600
2803
|
Name => 'VRMode',
|
|
2601
2804
|
PrintConv => {
|
|
2602
|
-
0 => 'Normal',
|
|
2805
|
+
0 => 'Normal',
|
|
2603
2806
|
1 => 'On (1)', #PH (NC)
|
|
2604
2807
|
2 => 'Active', # (1J1)
|
|
2605
2808
|
3 => 'Sport', #PH (Z7)
|
|
2606
2809
|
},
|
|
2607
|
-
},
|
|
2810
|
+
}],
|
|
2608
2811
|
# 7 - values: 0, 1
|
|
2609
2812
|
);
|
|
2610
2813
|
|
|
@@ -3438,6 +3641,10 @@ my %binaryDataAttrs = (
|
|
|
3438
3641
|
201 => 'Wide-area AF', #28 (D6)
|
|
3439
3642
|
202 => 'Face-priority AF', #28 (D6)
|
|
3440
3643
|
203 => 'Subject-tracking AF', #28 (D6)
|
|
3644
|
+
204 => 'Dynamic Area (S)', #28 (Z9)
|
|
3645
|
+
205 => 'Dynamic Area (M)', #28 (Z9)
|
|
3646
|
+
206 => 'Dynamic Area (L)', #28 (Z9)
|
|
3647
|
+
207 => '3D-tracking', #28 (Z9)
|
|
3441
3648
|
},
|
|
3442
3649
|
},
|
|
3443
3650
|
],
|
|
@@ -3965,6 +4172,47 @@ my %binaryDataAttrs = (
|
|
|
3965
4172
|
},
|
|
3966
4173
|
);
|
|
3967
4174
|
|
|
4175
|
+
%Image::ExifTool::Nikon::AFInfo2V0400 = ( #V0400 related fields begin at x'3c' ( Z9)
|
|
4176
|
+
%binaryDataAttrs,
|
|
4177
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
4178
|
+
DATAMEMBER => [ 0 ],
|
|
4179
|
+
0 => {
|
|
4180
|
+
Name => 'AFInfo2Version',
|
|
4181
|
+
Format => 'undef[4]',
|
|
4182
|
+
Writable => 0,
|
|
4183
|
+
RawConv => '$$self{AFInfo2Version} = $val',
|
|
4184
|
+
},
|
|
4185
|
+
0x3e => {
|
|
4186
|
+
Name => 'AFImageWidth',
|
|
4187
|
+
Format => 'int16u',
|
|
4188
|
+
},
|
|
4189
|
+
0x40 => {
|
|
4190
|
+
Name => 'AFImageHeight',
|
|
4191
|
+
Format => 'int16u',
|
|
4192
|
+
},
|
|
4193
|
+
0x43 => {
|
|
4194
|
+
Name => 'FocusPositionHorizontal',
|
|
4195
|
+
PrintConv => sub { my ($val) = @_; PrintAFPointsLeftRight($val, 29 ); }, #493 focus points for Z9 fall in a 30x18 grid (some coordinates are not accessible)
|
|
4196
|
+
},
|
|
4197
|
+
0x45 => {
|
|
4198
|
+
Name => 'FocusPositionVertical',
|
|
4199
|
+
PrintConv => sub { my ($val) = @_; PrintAFPointsUpDown($val, 17 ); },
|
|
4200
|
+
},
|
|
4201
|
+
0x46 => {
|
|
4202
|
+
Name => 'AFAreaWidth',
|
|
4203
|
+
Format => 'int16u',
|
|
4204
|
+
Notes => 'size of AF area in AFImage pixels',
|
|
4205
|
+
RawConv => '$val ? $val : undef',
|
|
4206
|
+
},
|
|
4207
|
+
0x48 => {
|
|
4208
|
+
Name => 'AFAreaHeight',
|
|
4209
|
+
Format => 'int16u',
|
|
4210
|
+
RawConv => '$val ? $val : undef',
|
|
4211
|
+
}
|
|
4212
|
+
# AFFocusResult is the result of the last AF operation and not necessarily an indication of the state of the of the capture (e.g., the subject may have moved or the image re-framed)
|
|
4213
|
+
#0x4a => { Name => 'AFFocusResult',PrintConv => {0=> "No Focus", 1=>"Focus"} }, #new tag created because Z9 uses a hybrid contrast/phase AF (closest former tag was ContrastDetectAFInFocus).
|
|
4214
|
+
);
|
|
4215
|
+
|
|
3968
4216
|
# Nikon AF fine-tune information (ref 28)
|
|
3969
4217
|
%Image::ExifTool::Nikon::AFTune = (
|
|
3970
4218
|
%binaryDataAttrs,
|
|
@@ -4730,6 +4978,7 @@ my %nikonFocalConversions = (
|
|
|
4730
4978
|
23 => 'Nikkor Z 14-24mm f/2.8 S', #IB
|
|
4731
4979
|
24 => 'Nikkor Z MC 105mm f/2.8 VR S', #IB
|
|
4732
4980
|
27 => 'Nikkor Z MC 50mm f/2.8', #IB
|
|
4981
|
+
28 => 'Nikkor Z 100-400mm f/4.5-5.6 VR S', #28
|
|
4733
4982
|
29 => 'Nikkor Z 28mm f/2.8', #IB
|
|
4734
4983
|
},
|
|
4735
4984
|
},
|
|
@@ -6048,6 +6297,18 @@ my %nikonFocalConversions = (
|
|
|
6048
6297
|
3 => 'Rotate 180',
|
|
6049
6298
|
},
|
|
6050
6299
|
},
|
|
6300
|
+
0x0d0 => {
|
|
6301
|
+
Name => 'Interval',
|
|
6302
|
+
# prior version of the d% firmware do not support this tag, nor does the D500 (at least thru firmware 1.3)
|
|
6303
|
+
Condition => '$$self{Model} eq "NIKON D5" and $$self{FirmwareVersion} ge "1.40"',
|
|
6304
|
+
PrintConv => '$val > 0 ? sprintf("%.0f", $val) : ""',
|
|
6305
|
+
},
|
|
6306
|
+
0x0d4 => {
|
|
6307
|
+
Name => 'IntervalFrame',
|
|
6308
|
+
# prior version of the d% firmware do not support this tag, nor does the D500 (at least thru firmware 1.3)
|
|
6309
|
+
Condition => '$$self{Model} eq "NIKON D5" and $$self{FirmwareVersion} ge "1.40"',
|
|
6310
|
+
PrintConv => '$val > 0 ? sprintf("%.0f", $val) : ""',
|
|
6311
|
+
},
|
|
6051
6312
|
0x05e2 => {
|
|
6052
6313
|
Name => 'FlickerReductionIndicator',
|
|
6053
6314
|
Mask => 0x01,
|
|
@@ -6466,7 +6727,7 @@ my %nikonFocalConversions = (
|
|
|
6466
6727
|
WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted,
|
|
6467
6728
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
|
6468
6729
|
VARS => { ID_LABEL => 'Index' },
|
|
6469
|
-
DATAMEMBER => [ 0x9c, 0xc219 ],
|
|
6730
|
+
DATAMEMBER => [ 0x30, 0x60, 0x9c, 0xa4, 0x75e7, 0x760c, 0x7610, 0xc219, 0xc292, 0xc40e, 0xc412, 0xc4a6, 0xc4be ],
|
|
6470
6731
|
WRITABLE => 1,
|
|
6471
6732
|
FIRST_ENTRY => 0,
|
|
6472
6733
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
@@ -6476,6 +6737,11 @@ my %nikonFocalConversions = (
|
|
|
6476
6737
|
Format => 'string[4]',
|
|
6477
6738
|
Writable => 0,
|
|
6478
6739
|
},
|
|
6740
|
+
0x04 => {
|
|
6741
|
+
Name => 'FirmwareVersion',
|
|
6742
|
+
Format => 'string[8]',
|
|
6743
|
+
Writable => 0,
|
|
6744
|
+
},
|
|
6479
6745
|
0x24 => {
|
|
6480
6746
|
Name => 'NumberOffsets', # (number of entries in offset table. offsets are from start of ShotInfo data)
|
|
6481
6747
|
DataMember => 'NumberOffsets',
|
|
@@ -6483,6 +6749,22 @@ my %nikonFocalConversions = (
|
|
|
6483
6749
|
Writable => 0,
|
|
6484
6750
|
Hidden => 1,
|
|
6485
6751
|
},
|
|
6752
|
+
0x30 => {
|
|
6753
|
+
Name => 'Offset3',
|
|
6754
|
+
DataMember => 'Offset3',
|
|
6755
|
+
Format => 'int32u',
|
|
6756
|
+
Writable => 0,
|
|
6757
|
+
Hidden => 1,
|
|
6758
|
+
RawConv => '$$self{Offset3} = $val || 0x10000000; undef', # (ignore if 0)
|
|
6759
|
+
},
|
|
6760
|
+
0x60 => {
|
|
6761
|
+
Name => 'Offset15',
|
|
6762
|
+
DataMember => 'Offset15',
|
|
6763
|
+
Format => 'int32u',
|
|
6764
|
+
Writable => 0,
|
|
6765
|
+
Hidden => 1,
|
|
6766
|
+
RawConv => '$$self{Offset15} = $val || 0x10000000; undef', # (ignore if 0)
|
|
6767
|
+
},
|
|
6486
6768
|
0x9c => {
|
|
6487
6769
|
Name => 'OrientationOffset',
|
|
6488
6770
|
DataMember => 'OrientationOffset',
|
|
@@ -6491,15 +6773,49 @@ my %nikonFocalConversions = (
|
|
|
6491
6773
|
Hidden => 1,
|
|
6492
6774
|
RawConv => '$$self{OrientationOffset} = $val || 0x10000000; undef', # (ignore if 0)
|
|
6493
6775
|
},
|
|
6494
|
-
|
|
6495
|
-
|
|
6776
|
+
0xa4 => {
|
|
6777
|
+
Name => 'Offset32',
|
|
6778
|
+
DataMember => 'Offset32',
|
|
6779
|
+
Format => 'int32u',
|
|
6780
|
+
Writable => 0,
|
|
6781
|
+
Hidden => 1,
|
|
6782
|
+
RawConv => '$$self{Offset32} = $val || 0x10000000; undef', # (ignore if 0)
|
|
6783
|
+
},
|
|
6784
|
+
### 0x75e8 - Offset3 info start (D6 firmware 1.33)
|
|
6785
|
+
0x75e7 => {
|
|
6496
6786
|
Name => 'Hook1',
|
|
6497
6787
|
Hidden => 1,
|
|
6498
6788
|
RawConv => 'undef',
|
|
6789
|
+
# account for variable location of Offset5 data
|
|
6790
|
+
Hook => '$varSize = $$self{Offset3} - 0x75e8',
|
|
6791
|
+
},
|
|
6792
|
+
0x760c => {
|
|
6793
|
+
Name => 'IntervalShooting',
|
|
6794
|
+
RawConv => '$$self{IntervalShooting} = $val',
|
|
6795
|
+
Format => 'int16u',
|
|
6796
|
+
PrintConv => q{
|
|
6797
|
+
return 'Off' if $val == 0 ;
|
|
6798
|
+
my $i = sprintf("Interval %.0f of %.0f",$val, $$self{IntervalShootingIntervals}); #something like "Interval 1 of 3"
|
|
6799
|
+
my $f = $$self{IntervalShootingShotsPerInterval} > 1 ? sprintf(" Frame %.0f of %.0f",$$self{IntervalFrame}, $$self{IntervalShootingShotsPerInterval}): '' ; #something like "Frame 1 of 3" or blank
|
|
6800
|
+
return "On: $i$f"
|
|
6801
|
+
#$val == 0 ? 'Off' : sprintf("On: Interval %.0f of %.0f Frame %.0f of %.0f",$val, $$self{IntervalShootingIntervals}, $$self{IntervalFrame}, $$self{IntervalShootingShotsPerInterval}),
|
|
6802
|
+
},
|
|
6803
|
+
},
|
|
6804
|
+
0x7610 => {
|
|
6805
|
+
Name => 'IntervalFrame',
|
|
6806
|
+
RawConv => '$$self{IntervalFrame} = $val',
|
|
6807
|
+
Condition => '$$self{IntervalShooting} > 0',
|
|
6808
|
+
Format => 'int16u',
|
|
6809
|
+
Hidden => 1,
|
|
6810
|
+
},
|
|
6811
|
+
### 0xc21a - OrientationInfo start (D6 firmware 1.00) (0xc952 for firmware 1.33)
|
|
6812
|
+
0xc219 => {
|
|
6813
|
+
Name => 'Hook2',
|
|
6814
|
+
Hidden => 1,
|
|
6815
|
+
RawConv => 'undef',
|
|
6499
6816
|
# account for variable location of OrientationInfo data
|
|
6500
6817
|
Hook => '$varSize = $$self{OrientationOffset} - 0xc21a',
|
|
6501
6818
|
},
|
|
6502
|
-
|
|
6503
6819
|
0xc21a => {
|
|
6504
6820
|
Name => 'RollAngle',
|
|
6505
6821
|
Format => 'fixed32u',
|
|
@@ -6527,7 +6843,136 @@ my %nikonFocalConversions = (
|
|
|
6527
6843
|
PrintConv => 'sprintf("%.1f", $val)',
|
|
6528
6844
|
PrintConvInv => '$val',
|
|
6529
6845
|
},
|
|
6530
|
-
|
|
6846
|
+
### 0xc9c6 - Offset32 start (D6 firmware 1.33)
|
|
6847
|
+
0xc292 => {
|
|
6848
|
+
Name => 'Hook3',
|
|
6849
|
+
Hidden => 1,
|
|
6850
|
+
RawConv => 'undef',
|
|
6851
|
+
# account for variable location of data
|
|
6852
|
+
Hook => '$varSize = $$self{Offset32} - 0xc292',
|
|
6853
|
+
},
|
|
6854
|
+
0xc40e => {
|
|
6855
|
+
Name => 'Intervals',
|
|
6856
|
+
Format => 'int32u',
|
|
6857
|
+
RawConv => '$$self{IntervalShootingIntervals} = $val',
|
|
6858
|
+
Condition => '$$self{IntervalShooting} > 0',
|
|
6859
|
+
},
|
|
6860
|
+
0xc412 => {
|
|
6861
|
+
Name => 'ShotsPerInterval',
|
|
6862
|
+
Format => 'int32u',
|
|
6863
|
+
RawConv => '$$self{IntervalShootingShotsPerInterval} = $val',
|
|
6864
|
+
Condition => '$$self{IntervalShooting} > 0',
|
|
6865
|
+
},
|
|
6866
|
+
0xc416 => {
|
|
6867
|
+
Name => 'IntervalExposureSmoothing',
|
|
6868
|
+
Condition => '$$self{IntervalShooting} > 0',
|
|
6869
|
+
Format => 'int8u',
|
|
6870
|
+
PrintConv => \%offOn,
|
|
6871
|
+
},
|
|
6872
|
+
0xc418 => {
|
|
6873
|
+
Name => 'IntervalPriority',
|
|
6874
|
+
Condition => '$$self{IntervalShooting} > 0',
|
|
6875
|
+
Format => 'int8u',
|
|
6876
|
+
PrintConv => \%offOn,
|
|
6877
|
+
},
|
|
6878
|
+
0xc43a => {
|
|
6879
|
+
Name => 'FocusShiftNumberShots',
|
|
6880
|
+
},
|
|
6881
|
+
0xc43e => {
|
|
6882
|
+
Name => 'FocusShiftStepWidth',
|
|
6883
|
+
},
|
|
6884
|
+
0xc442 => {
|
|
6885
|
+
Name => 'FocusShiftInterval',
|
|
6886
|
+
PrintConv => '$val == 1? "1 Second" : sprintf("%.0f Seconds",$val)',
|
|
6887
|
+
},
|
|
6888
|
+
0xc446 => {
|
|
6889
|
+
Name => 'FocusShiftExposureLock',
|
|
6890
|
+
PrintConv => \%offOn,
|
|
6891
|
+
},
|
|
6892
|
+
#0xc49c => HighISONoiseReduction
|
|
6893
|
+
0xc4a0 => {
|
|
6894
|
+
Name => 'DiffractionCompensation',
|
|
6895
|
+
Format => 'int8u',
|
|
6896
|
+
PrintConv => \%offOn,
|
|
6897
|
+
},
|
|
6898
|
+
#0xc4a1 => {Name => 'FlickerReductionShooting',}, #redundant with tag in NikonSettings
|
|
6899
|
+
0xc4a6 => {
|
|
6900
|
+
Name => 'FlashControlMode', #this and nearby tag values for flash may be set from either the Photo Shooting Menu or using the Flash unit menu
|
|
6901
|
+
RawConv => '$$self{FlashControlMode} = $val',
|
|
6902
|
+
PrintConv => {
|
|
6903
|
+
0 => 'TTL',
|
|
6904
|
+
1 => 'Auto External Flash',
|
|
6905
|
+
2 => 'GN (distance priority)',
|
|
6906
|
+
3 => 'Manual',
|
|
6907
|
+
4 => 'Repeating Flash',
|
|
6908
|
+
},
|
|
6909
|
+
},
|
|
6910
|
+
0xc4ac => {
|
|
6911
|
+
Name => 'FlashGNDistance',
|
|
6912
|
+
Condition => '$$self{FlashControlMode} == 2',
|
|
6913
|
+
Unknown => 1,
|
|
6914
|
+
ValueConv => '$val + 3',
|
|
6915
|
+
PrintConv => \%flashGNDistance,
|
|
6916
|
+
},
|
|
6917
|
+
0xc4b0 => {
|
|
6918
|
+
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)
|
|
6919
|
+
Condition => '$$self{FlashControlMode} >= 3',
|
|
6920
|
+
Unknown => 1,
|
|
6921
|
+
ValueConv => '2 ** (-$val/3)',
|
|
6922
|
+
ValueConvInv => '$val>0 ? -3*log($val)/log(2) : 0',
|
|
6923
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.1f%%",$val*100)',
|
|
6924
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
6925
|
+
},
|
|
6926
|
+
0xc4ba => {
|
|
6927
|
+
Name => 'FlashRemoteControl',
|
|
6928
|
+
Unknown => 1,
|
|
6929
|
+
PrintConv => {
|
|
6930
|
+
0 => 'Group',
|
|
6931
|
+
1 => 'Quick Wireless',
|
|
6932
|
+
2 => 'Remote Repeating',
|
|
6933
|
+
},
|
|
6934
|
+
},
|
|
6935
|
+
0xc4be => {
|
|
6936
|
+
Name => 'FlashMasterControlMode', #tag name chosen for compatibility with those found in FlashInfo0102 & FlashInfo0103
|
|
6937
|
+
RawConv => '$$self{FlashGroupOptionsMasterMode} = $val',
|
|
6938
|
+
PrintConv => \%flashGroupOptionsMode,
|
|
6939
|
+
},
|
|
6940
|
+
0xc4c0 => {
|
|
6941
|
+
Name => 'FlashMasterCompensation',
|
|
6942
|
+
Unknown => 1,
|
|
6943
|
+
Format => 'int8s',
|
|
6944
|
+
Condition => '$$self{FlashGroupOptionsMasterMode} != 3', #other than 'Off'
|
|
6945
|
+
ValueConv => '$val/6',
|
|
6946
|
+
ValueConvInv => '6 * $val',
|
|
6947
|
+
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
|
6948
|
+
PrintConvInv => '$val',
|
|
6949
|
+
},
|
|
6950
|
+
0xc4c4 => {
|
|
6951
|
+
Name => 'FlashMasterOutput',
|
|
6952
|
+
Unknown => 1,
|
|
6953
|
+
Condition => '$$self{FlashGroupOptionsMasterMode} == 1', #only for Mode=M
|
|
6954
|
+
ValueConv => '2 ** (-$val/3)',
|
|
6955
|
+
ValueConvInv => '$val>0 ? -3*log($val)/log(2) : 0',
|
|
6956
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.1f%%",$val*100)',
|
|
6957
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
6958
|
+
},
|
|
6959
|
+
0xc4c6 => {
|
|
6960
|
+
Name => 'FlashWirelessOption',
|
|
6961
|
+
Unknown => 1,
|
|
6962
|
+
PrintConv => {
|
|
6963
|
+
0 => 'Optical AWL',
|
|
6964
|
+
1 => 'Off',
|
|
6965
|
+
},
|
|
6966
|
+
},
|
|
6967
|
+
0xc55c => {
|
|
6968
|
+
Name => 'MovieType',
|
|
6969
|
+
Unknown => 1,
|
|
6970
|
+
PrintConv => {
|
|
6971
|
+
0 => 'MOV',
|
|
6972
|
+
1 => 'MP4',
|
|
6973
|
+
},
|
|
6974
|
+
},
|
|
6975
|
+
# note: DecryptLen currently set to 0xc9c6 + 720
|
|
6531
6976
|
);
|
|
6532
6977
|
|
|
6533
6978
|
# shot information for the D610 firmware 1.00 (encrypted) - ref PH
|
|
@@ -7046,9 +7491,7 @@ my %nikonFocalConversions = (
|
|
|
7046
7491
|
WRITABLE => 1,
|
|
7047
7492
|
FIRST_ENTRY => 0,
|
|
7048
7493
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
7049
|
-
NOTES =>
|
|
7050
|
-
These tags are extracted from encrypted data in images from the D4S.
|
|
7051
|
-
},
|
|
7494
|
+
NOTES => 'These tags are extracted from encrypted data in images from the D4S.',
|
|
7052
7495
|
0x00 => {
|
|
7053
7496
|
Name => 'ShotInfoVersion',
|
|
7054
7497
|
Format => 'string[4]',
|
|
@@ -7298,7 +7741,7 @@ my %nikonFocalConversions = (
|
|
|
7298
7741
|
Format => 'undef[56]',
|
|
7299
7742
|
SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsD4' },
|
|
7300
7743
|
},
|
|
7301
|
-
# 0x1978 => { #this decode works, but involves more bits than should be necessary
|
|
7744
|
+
# 0x1978 => { # this decode works, but involves more bits than should be necessary
|
|
7302
7745
|
# Name => 'ShutterTrigger',
|
|
7303
7746
|
# Mask => 0xff,
|
|
7304
7747
|
# PrintConv => {
|
|
@@ -7347,17 +7790,19 @@ my %nikonFocalConversions = (
|
|
|
7347
7790
|
# note: DecryptLen currently set to 0x3697
|
|
7348
7791
|
);
|
|
7349
7792
|
|
|
7350
|
-
# shot information for the
|
|
7351
|
-
%Image::ExifTool::Nikon::
|
|
7793
|
+
# shot information for the Z7II firmware 1.00 (encrypted) - ref 28
|
|
7794
|
+
%Image::ExifTool::Nikon::ShotInfoZ7II = (
|
|
7352
7795
|
PROCESS_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted,
|
|
7353
7796
|
WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted,
|
|
7354
7797
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
|
7355
7798
|
VARS => { ID_LABEL => 'Index' },
|
|
7356
|
-
DATAMEMBER => [ 0x04,
|
|
7799
|
+
DATAMEMBER => [ 0x04, 0x30, 0x38, 0x98, 0xa0, 0x75e7, 0x760c,
|
|
7800
|
+
0x7610, 0x7eff, 0xce31, 0xcea5, 0xceb6, 0xceb7 ],
|
|
7801
|
+
IS_SUBDIR => [ 0xceb8 ],
|
|
7357
7802
|
WRITABLE => 1,
|
|
7358
7803
|
FIRST_ENTRY => 0,
|
|
7359
7804
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
7360
|
-
NOTES => 'These tags are extracted from encrypted data in images from the
|
|
7805
|
+
NOTES => 'These tags are extracted from encrypted data in images from the Z7II.',
|
|
7361
7806
|
0x00 => {
|
|
7362
7807
|
Name => 'ShotInfoVersion',
|
|
7363
7808
|
Format => 'string[4]',
|
|
@@ -7370,27 +7815,41 @@ my %nikonFocalConversions = (
|
|
|
7370
7815
|
Writable => 0,
|
|
7371
7816
|
RawConv => '$$self{FirmwareVersion} = $val',
|
|
7372
7817
|
},
|
|
7373
|
-
|
|
7818
|
+
0x0e => {
|
|
7374
7819
|
Name => 'FirmwareVersion2',
|
|
7375
7820
|
Format => 'string[8]',
|
|
7376
7821
|
Writable => 0,
|
|
7377
|
-
RawConv => '$$self{FirmwareVersion2} = $val',
|
|
7378
7822
|
Hidden => 1,
|
|
7379
7823
|
},
|
|
7380
7824
|
0x18 => {
|
|
7381
7825
|
Name => 'FirmwareVersion3',
|
|
7382
7826
|
Format => 'string[8]',
|
|
7383
7827
|
Writable => 0,
|
|
7384
|
-
RawConv => '$$self{FirmwareVersion3} = $val',
|
|
7385
7828
|
Hidden => 1,
|
|
7386
7829
|
},
|
|
7387
7830
|
0x24 => {
|
|
7388
|
-
Name => 'NumberOffsets', #number of entries in offset table. offsets are from start of ShotInfo data.
|
|
7831
|
+
Name => 'NumberOffsets', # number of entries in offset table. offsets are from start of ShotInfo data.
|
|
7389
7832
|
DataMember => 'NumberOffsets',
|
|
7390
7833
|
Format => 'int32u',
|
|
7391
7834
|
Writable => 0,
|
|
7392
7835
|
Hidden => 1,
|
|
7393
7836
|
},
|
|
7837
|
+
0x30 => {
|
|
7838
|
+
Name => 'Offset3',
|
|
7839
|
+
DataMember => 'Offset3',
|
|
7840
|
+
Format => 'int32u',
|
|
7841
|
+
Writable => 0,
|
|
7842
|
+
Hidden => 1,
|
|
7843
|
+
RawConv => '$$self{Offset3} = $val || 0x10000000; undef', # (ignore if 0)
|
|
7844
|
+
},
|
|
7845
|
+
0x38 => {
|
|
7846
|
+
Name => 'Offset5',
|
|
7847
|
+
DataMember => 'Offset5',
|
|
7848
|
+
Format => 'int32u',
|
|
7849
|
+
Writable => 0,
|
|
7850
|
+
Hidden => 1,
|
|
7851
|
+
RawConv => '$$self{Offset5} = $val || 0x10000000; undef', # (ignore if 0)
|
|
7852
|
+
},
|
|
7394
7853
|
0x98 => {
|
|
7395
7854
|
Name => 'OrientationOffset',
|
|
7396
7855
|
DataMember => 'OrientationOffset',
|
|
@@ -7399,12 +7858,70 @@ my %nikonFocalConversions = (
|
|
|
7399
7858
|
Hidden => 1,
|
|
7400
7859
|
RawConv => '$$self{OrientationOffset} = $val || 0x10000000; undef', # (ignore if 0)
|
|
7401
7860
|
},
|
|
7402
|
-
|
|
7403
|
-
|
|
7404
|
-
|
|
7861
|
+
0xa0 => {
|
|
7862
|
+
Name => 'Offset31',
|
|
7863
|
+
DataMember => 'Offset31',
|
|
7864
|
+
Format => 'int32u',
|
|
7865
|
+
Writable => 0,
|
|
7866
|
+
Hidden => 1,
|
|
7867
|
+
RawConv => '$$self{Offset31} = $val || 0x10000000; undef', # (ignore if 0)
|
|
7868
|
+
},
|
|
7869
|
+
### 0x75e8 - Offset3 info start (Z7II firmware 1.30)
|
|
7870
|
+
0x75e7 => {
|
|
7405
7871
|
Name => 'Hook1',
|
|
7406
7872
|
Hidden => 1,
|
|
7407
7873
|
RawConv => 'undef',
|
|
7874
|
+
# account for variable location of Offset3 data
|
|
7875
|
+
Hook => '$varSize = $$self{Offset3} - 0x75e8',
|
|
7876
|
+
},
|
|
7877
|
+
0x760c => {
|
|
7878
|
+
Name => 'IntervalShooting',
|
|
7879
|
+
RawConv => '$$self{IntervalShooting} = $val',
|
|
7880
|
+
Format => 'int16u',
|
|
7881
|
+
PrintConv => q{
|
|
7882
|
+
return 'Off' if $val == 0 ;
|
|
7883
|
+
my $i = sprintf("Interval %.0f of %.0f",$val, $$self{IntervalShootingIntervals}); # something like "Interval 1 of 3"
|
|
7884
|
+
my $f = $$self{IntervalShootingShotsPerInterval} > 1 ? sprintf(" Frame %.0f of %.0f",$$self{IntervalFrame}, $$self{IntervalShootingShotsPerInterval}): '' ; # something like "Frame 1 of 3" or blank
|
|
7885
|
+
return "On: $i$f"
|
|
7886
|
+
#$val == 0 ? 'Off' : sprintf("On: Interval %.0f of %.0f Frame %.0f of %.0f",$val, $$self{IntervalShootingIntervals}, $$self{IntervalFrame}, $$self{IntervalShootingShotsPerInterval}),
|
|
7887
|
+
},
|
|
7888
|
+
},
|
|
7889
|
+
0x7610 => {
|
|
7890
|
+
Name => 'IntervalFrame',
|
|
7891
|
+
RawConv => '$$self{IntervalFrame} = $val',
|
|
7892
|
+
Condition => '$$self{IntervalShooting} > 0',
|
|
7893
|
+
Format => 'int16u',
|
|
7894
|
+
Hidden => 1,
|
|
7895
|
+
},
|
|
7896
|
+
### 0x7f00 - Offset5 info start (Z7II firmware 1.30)
|
|
7897
|
+
0x7eff => {
|
|
7898
|
+
Name => 'Hook2',
|
|
7899
|
+
Hidden => 1,
|
|
7900
|
+
RawConv => 'undef',
|
|
7901
|
+
# account for variable location of Offset5 data
|
|
7902
|
+
Hook => '$varSize = $$self{Offset5} - 0x7f00',
|
|
7903
|
+
},
|
|
7904
|
+
0x7fa0 => { #28
|
|
7905
|
+
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
|
|
7906
|
+
# offset5+160; 128 is neutral; >128 increases Yellow; <128 increases Magenta; increments of 4 result from 1 full unit adjustment on the camera
|
|
7907
|
+
# offset5+161 128 is neutral; >128 increases Brightness; <128 decreases Brightness
|
|
7908
|
+
# 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]
|
|
7909
|
+
Format => 'int8u[2]',
|
|
7910
|
+
Condition => '$$self{FirmwareVersion} ge "01.30"',
|
|
7911
|
+
PrintConv => q{
|
|
7912
|
+
return 'Off' if $val eq '0 0' or $val eq '255 255';
|
|
7913
|
+
my @v = split ' ', $val;
|
|
7914
|
+
my $brightness = $v[1]==128 ? 'Brightness: Neutral' : sprintf('Brightness: %+.1f',($v[1]-128)/4);
|
|
7915
|
+
my $color = $v[0]==128 ? 'Color: Neutral' : sprintf('%s: %.1f', $v[0]>128 ? 'Yellow' : 'Magenta', abs($v[0]-128)/4);
|
|
7916
|
+
# will return something like: 'Magenta: 1.0 Brightness: Neutral'
|
|
7917
|
+
return "$color $brightness"
|
|
7918
|
+
},
|
|
7919
|
+
},
|
|
7920
|
+
### 0xce32 - OrientationInfo start (Z7II firmware 1.00)
|
|
7921
|
+
0xce31 => {
|
|
7922
|
+
Name => 'Hook3',
|
|
7923
|
+
Hidden => 1,
|
|
7924
|
+
RawConv => 'undef',
|
|
7408
7925
|
# account for variable location of OrientationInfo data
|
|
7409
7926
|
Hook => '$varSize = $$self{OrientationOffset} - 0xce32',
|
|
7410
7927
|
},
|
|
@@ -7436,30 +7953,1177 @@ my %nikonFocalConversions = (
|
|
|
7436
7953
|
PrintConv => 'sprintf("%.1f", $val)',
|
|
7437
7954
|
PrintConvInv => '$val',
|
|
7438
7955
|
},
|
|
7439
|
-
|
|
7956
|
+
0xcea5 => {
|
|
7957
|
+
Name => 'Hook4',
|
|
7958
|
+
Hidden => 1,
|
|
7959
|
+
RawConv => 'undef',
|
|
7960
|
+
# account for variable location of Offset31 data
|
|
7961
|
+
Hook => '$varSize = $$self{Offset31} - 0xcea6',
|
|
7962
|
+
},
|
|
7963
|
+
### 0xcea6 - Offset31 info start (Z7II firmware 1.30)
|
|
7964
|
+
0xceb6 => {
|
|
7965
|
+
Name => 'MenuSettingsZ7IIOffset',
|
|
7966
|
+
# offset to MenuSettingsZ7II is relative to start of Offset31 block
|
|
7967
|
+
RawConv => '$$self{MenuSettingsZ7IIOffset} = ($val || 0x10000000) + $$self{Offset31}; undef', # (ignore if 0)
|
|
7968
|
+
},
|
|
7969
|
+
0xceb7 => {
|
|
7970
|
+
Name => 'Hook5',
|
|
7971
|
+
Hidden => 1,
|
|
7972
|
+
RawConv => 'undef',
|
|
7973
|
+
# account for variable location of Offset5 data
|
|
7974
|
+
Hook => '$varSize = $$self{MenuSettingsZ7IIOffset} - 0xceb8',
|
|
7975
|
+
},
|
|
7976
|
+
0xceb8 => { # (this is 0xd04e for the Z50)
|
|
7977
|
+
Name => 'MenuSettingsZ7II',
|
|
7978
|
+
Format => 'undef[860]',
|
|
7979
|
+
SubDirectory => {
|
|
7980
|
+
TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ7II',
|
|
7981
|
+
},
|
|
7982
|
+
}
|
|
7983
|
+
# note: DecryptLen currently set to 0xd04e + 860 (offset for Z50 is 0xd04e)
|
|
7440
7984
|
);
|
|
7441
7985
|
|
|
7442
|
-
#
|
|
7443
|
-
%Image::ExifTool::Nikon::
|
|
7444
|
-
|
|
7445
|
-
|
|
7986
|
+
# shot information for the Z9 firmware 1.00 (encrypted) - ref 28
|
|
7987
|
+
%Image::ExifTool::Nikon::ShotInfoZ9 = (
|
|
7988
|
+
PROCESS_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted,
|
|
7989
|
+
WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted,
|
|
7990
|
+
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
|
7991
|
+
VARS => { ID_LABEL => 'Index' },
|
|
7992
|
+
DATAMEMBER => [ 0x04, 0x30, 0x38, 0x84, 0x8c, 0x6c6f, 0x6c98,
|
|
7993
|
+
0x6c9a, 0x7717, 0x7844, 0xeaea, 0xeb6f, 0xeb70 ],
|
|
7994
|
+
IS_SUBDIR => [ 0xec4b ],
|
|
7995
|
+
WRITABLE => 1,
|
|
7996
|
+
FIRST_ENTRY => 0,
|
|
7446
7997
|
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',
|
|
7998
|
+
NOTES => 'These tags are extracted from encrypted data in images from the Z9.',
|
|
7999
|
+
0x00 => {
|
|
8000
|
+
Name => 'ShotInfoVersion',
|
|
7454
8001
|
Format => 'string[4]',
|
|
7455
8002
|
Writable => 0,
|
|
7456
8003
|
},
|
|
7457
|
-
|
|
7458
|
-
Name => '
|
|
7459
|
-
|
|
7460
|
-
|
|
7461
|
-
|
|
7462
|
-
|
|
8004
|
+
0x04 => {
|
|
8005
|
+
Name => 'FirmwareVersion',
|
|
8006
|
+
DataMember => 'FirmwareVersion',
|
|
8007
|
+
Format => 'string[8]',
|
|
8008
|
+
Writable => 0,
|
|
8009
|
+
RawConv => '$$self{FirmwareVersion} = $val',
|
|
8010
|
+
},
|
|
8011
|
+
0x0e => {
|
|
8012
|
+
Name => 'FirmwareVersion2',
|
|
8013
|
+
Format => 'string[8]',
|
|
8014
|
+
Writable => 0,
|
|
8015
|
+
Hidden => 1,
|
|
8016
|
+
},
|
|
8017
|
+
0x18 => {
|
|
8018
|
+
Name => 'FirmwareVersion3',
|
|
8019
|
+
Format => 'string[8]',
|
|
8020
|
+
Writable => 0,
|
|
8021
|
+
Hidden => 1,
|
|
8022
|
+
},
|
|
8023
|
+
0x24 => {
|
|
8024
|
+
Name => 'NumberOffsets', # number of entries in offset table. offsets are from start of ShotInfo data.
|
|
8025
|
+
DataMember => 'NumberOffsets',
|
|
8026
|
+
Format => 'int32u',
|
|
8027
|
+
Writable => 0,
|
|
8028
|
+
Hidden => 1,
|
|
8029
|
+
},
|
|
8030
|
+
0x30 => {
|
|
8031
|
+
Name => 'Offset3', #offset3 - length 2528 (Z9 firmware 1.0)
|
|
8032
|
+
DataMember => 'Offset3',
|
|
8033
|
+
Format => 'int32u',
|
|
8034
|
+
Writable => 0,
|
|
8035
|
+
Hidden => 1,
|
|
8036
|
+
RawConv => '$$self{Offset3} = $val || 0x10000000; undef', # (ignore if 0)
|
|
8037
|
+
},
|
|
8038
|
+
0x38 => {
|
|
8039
|
+
Name => 'Offset5', #offset5 - length 2488 (Z9 firmware 1.0)
|
|
8040
|
+
DataMember => 'Offset5',
|
|
8041
|
+
Format => 'int32u',
|
|
8042
|
+
Writable => 0,
|
|
8043
|
+
Hidden => 1,
|
|
8044
|
+
RawConv => '$$self{Offset5} = $val || 0x10000000; undef', # (ignore if 0)
|
|
8045
|
+
},
|
|
8046
|
+
0x84 => {
|
|
8047
|
+
Name => 'OrientationOffset', #offset24 - length 108 (Z9 firmware 1.0)
|
|
8048
|
+
DataMember => 'OrientationOffset',
|
|
8049
|
+
Format => 'int32u',
|
|
8050
|
+
Writable => 0,
|
|
8051
|
+
Hidden => 1,
|
|
8052
|
+
RawConv => '$$self{OrientationOffset} = $val || 0x10000000; undef', # (ignore if 0)
|
|
8053
|
+
},
|
|
8054
|
+
0x8c => {
|
|
8055
|
+
Name => 'Offset26', #offset26 - length 1895 (Z9 firmware 1.0)
|
|
8056
|
+
DataMember => 'Offset26',
|
|
8057
|
+
Format => 'int32u',
|
|
8058
|
+
Writable => 0,
|
|
8059
|
+
Hidden => 1,
|
|
8060
|
+
RawConv => '$$self{Offset26} = $val || 0x10000000; undef', # (ignore if 0)
|
|
8061
|
+
},
|
|
8062
|
+
### 0x6c70 - Offset3 info start (Z9 firmware 1.00)
|
|
8063
|
+
0x6c6f => {
|
|
8064
|
+
Name => 'Offset3Hook',
|
|
8065
|
+
Hidden => 1,
|
|
8066
|
+
RawConv => 'undef',
|
|
8067
|
+
# account for variable location of Offset3 data
|
|
8068
|
+
Hook => '$varSize = $$self{Offset3} - 0x6c70',
|
|
8069
|
+
},
|
|
8070
|
+
0x6c98 => {
|
|
8071
|
+
Name => 'IntervalShooting',
|
|
8072
|
+
RawConv => '$$self{IntervalShooting} = $val',
|
|
8073
|
+
Format => 'int16u',
|
|
8074
|
+
PrintConv => q{
|
|
8075
|
+
return 'Off' if $val == 0 ;
|
|
8076
|
+
my $i = sprintf("Interval %.0f of %.0f",$val, $$self{IntervalShootingIntervals}); # something like "Interval 1 of 3"
|
|
8077
|
+
my $f = $$self{IntervalShootingShotsPerInterval} > 1 ? sprintf(" Frame %.0f of %.0f",$$self{IntervalFrame}, $$self{IntervalShootingShotsPerInterval}): '' ; # something like "Frame 1 of 3" or blank
|
|
8078
|
+
return "On: $i$f"
|
|
8079
|
+
#$val == 0 ? 'Off' : sprintf("On: Interval %.0f of %.0f Frame %.0f of %.0f",$val, $$self{IntervalShootingIntervals}, $$self{IntervalFrame}, $$self{IntervalShootingShotsPerInterval}),
|
|
8080
|
+
},
|
|
8081
|
+
},
|
|
8082
|
+
0x6c9a => {
|
|
8083
|
+
Name => 'IntervalFrame',
|
|
8084
|
+
RawConv => '$$self{IntervalFrame} = $val',
|
|
8085
|
+
Condition => '$$self{IntervalShooting} > 0',
|
|
8086
|
+
Format => 'int16u',
|
|
8087
|
+
Hidden => 1,
|
|
8088
|
+
},
|
|
8089
|
+
### 0x7718 - Offset5 info start (Z9 firmware 1.00)
|
|
8090
|
+
0x7717 => {
|
|
8091
|
+
Name => 'Offsset5Hook',
|
|
8092
|
+
Hidden => 1,
|
|
8093
|
+
RawConv => 'undef',
|
|
8094
|
+
# account for variable location of Offset5 data
|
|
8095
|
+
Hook => '$varSize = $$self{Offset5} - 0x7718',
|
|
8096
|
+
},
|
|
8097
|
+
0x7844 => {
|
|
8098
|
+
Name => 'FocusShiftShooting',
|
|
8099
|
+
RawConv => '$$self{FocusShiftShooting} = $val',
|
|
8100
|
+
PrintConv => q{
|
|
8101
|
+
return 'Off' if $val == 0 ;
|
|
8102
|
+
my $i = sprintf("Frame %.0f of %.0f",$val, $$self{FocusShiftNumberShots}); # something like Frame 1 of 100"
|
|
8103
|
+
return "On: $i"
|
|
8104
|
+
},
|
|
8105
|
+
},
|
|
8106
|
+
### 0xeaeb - OrientationInfo start (Z9 firmware 1.00)
|
|
8107
|
+
0xeaea => {
|
|
8108
|
+
Name => 'OrientationHook',
|
|
8109
|
+
Hidden => 1,
|
|
8110
|
+
RawConv => 'undef',
|
|
8111
|
+
# account for variable location of OrientationInfo data
|
|
8112
|
+
Hook => '$varSize = $$self{OrientationOffset} - 0xeaeb',
|
|
8113
|
+
},
|
|
8114
|
+
0xeaeb => {
|
|
8115
|
+
Name => 'RollAngle',
|
|
8116
|
+
Format => 'fixed32u',
|
|
8117
|
+
Notes => 'converted to degrees of clockwise camera roll',
|
|
8118
|
+
ValueConv => '$val <= 180 ? $val : $val - 360',
|
|
8119
|
+
ValueConvInv => '$val >= 0 ? $val : $val + 360',
|
|
8120
|
+
PrintConv => 'sprintf("%.1f", $val)',
|
|
8121
|
+
PrintConvInv => '$val',
|
|
8122
|
+
},
|
|
8123
|
+
0xeaef => {
|
|
8124
|
+
Name => 'PitchAngle',
|
|
8125
|
+
Format => 'fixed32u',
|
|
8126
|
+
Notes => 'converted to degrees of upward camera tilt',
|
|
8127
|
+
ValueConv => '$val <= 180 ? $val : $val - 360',
|
|
8128
|
+
ValueConvInv => '$val >= 0 ? $val : $val + 360',
|
|
8129
|
+
PrintConv => 'sprintf("%.1f", $val)',
|
|
8130
|
+
PrintConvInv => '$val',
|
|
8131
|
+
},
|
|
8132
|
+
0xeaf3 => {
|
|
8133
|
+
Name => 'YawAngle',
|
|
8134
|
+
Format => 'fixed32u',
|
|
8135
|
+
Notes => 'the camera yaw angle when shooting in portrait orientation',
|
|
8136
|
+
ValueConv => '$val <= 180 ? $val : $val - 360',
|
|
8137
|
+
ValueConvInv => '$val >= 0 ? $val : $val + 360',
|
|
8138
|
+
PrintConv => 'sprintf("%.1f", $val)',
|
|
8139
|
+
PrintConvInv => '$val',
|
|
8140
|
+
},
|
|
8141
|
+
### 0xeb5f - Offset26 info start (Z9 firmware 1.00)
|
|
8142
|
+
0xeb6f => {
|
|
8143
|
+
Name => 'MenuSettingsZ9Offset',
|
|
8144
|
+
Writable => 0,
|
|
8145
|
+
Hidden => 1,
|
|
8146
|
+
# offset to MenuSettingsZ9 is relative to start of Offset26 block
|
|
8147
|
+
RawConv => '$$self{MenuSettingsZ9Offset} = ($val || 0x10000000) + $$self{Offset26}; undef', # (ignore if 0)
|
|
8148
|
+
},
|
|
8149
|
+
0xeb70 => {
|
|
8150
|
+
Name => 'Hook5',
|
|
8151
|
+
Hidden => 1,
|
|
8152
|
+
RawConv => 'undef',
|
|
8153
|
+
# account for variable location of menu settings data
|
|
8154
|
+
Hook => '$varSize = $$self{MenuSettingsZ9Offset} - 0xec4b',
|
|
8155
|
+
},
|
|
8156
|
+
0xec4b => {
|
|
8157
|
+
Name => 'MenuSettingsZ9',
|
|
8158
|
+
Format => 'undef[1646]',
|
|
8159
|
+
SubDirectory => {
|
|
8160
|
+
TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ9',
|
|
8161
|
+
},
|
|
8162
|
+
},
|
|
8163
|
+
# note: DecryptLen currently set to 0xec4b + 1646
|
|
8164
|
+
);
|
|
8165
|
+
|
|
8166
|
+
%Image::ExifTool::Nikon::MenuSettingsZ7II = (
|
|
8167
|
+
%binaryDataAttrs,
|
|
8168
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
8169
|
+
DATAMEMBER => [ 176, 180, 328, 352, 858 ],
|
|
8170
|
+
NOTES => 'These tags are used by the Z5, Z6, Z7, Z6II, Z7II, Z50 and Zfc.',
|
|
8171
|
+
160 => {
|
|
8172
|
+
Name => 'IntervalDurationHours',
|
|
8173
|
+
Format => 'int32u',
|
|
8174
|
+
#Condition => '$$self{IntervalShooting} > 0',
|
|
8175
|
+
},
|
|
8176
|
+
164 => {
|
|
8177
|
+
Name => 'IntervalDurationMinutes',
|
|
8178
|
+
Format => 'int32u',
|
|
8179
|
+
#Condition => '$$self{IntervalShooting} > 0',
|
|
8180
|
+
},
|
|
8181
|
+
168 => {
|
|
8182
|
+
Name => 'IntervalDurationSeconds',
|
|
8183
|
+
Format => 'int32u',
|
|
8184
|
+
#Condition => '$$self{IntervalShooting} > 0',
|
|
8185
|
+
},
|
|
8186
|
+
176 => {
|
|
8187
|
+
Name => 'Intervals',
|
|
8188
|
+
Format => 'int32u',
|
|
8189
|
+
RawConv => '$$self{IntervalShootingIntervals} = $val',
|
|
8190
|
+
#Condition => '$$self{IntervalShooting} > 0',
|
|
8191
|
+
},
|
|
8192
|
+
180 => {
|
|
8193
|
+
Name => 'ShotsPerInterval',
|
|
8194
|
+
Format => 'int32u',
|
|
8195
|
+
RawConv => '$$self{IntervalShootingShotsPerInterval} = $val',
|
|
8196
|
+
#Condition => '$$self{IntervalShooting} > 0',
|
|
8197
|
+
},
|
|
8198
|
+
184 => {
|
|
8199
|
+
Name => 'IntervalExposureSmoothing',
|
|
8200
|
+
#Condition => '$$self{IntervalShooting} > 0',
|
|
8201
|
+
Format => 'int8u',
|
|
8202
|
+
PrintConv => \%offOn,
|
|
8203
|
+
},
|
|
8204
|
+
186 => {
|
|
8205
|
+
Name => 'IntervalPriority',
|
|
8206
|
+
#Condition => '$$self{IntervalShooting} > 0',
|
|
8207
|
+
Format => 'int8u',
|
|
8208
|
+
PrintConv => \%offOn,
|
|
8209
|
+
},
|
|
8210
|
+
220 => {
|
|
8211
|
+
Name => 'FocusShiftNumberShots',
|
|
8212
|
+
},
|
|
8213
|
+
224 => {
|
|
8214
|
+
Name => 'FocusShiftStepWidth',
|
|
8215
|
+
},
|
|
8216
|
+
228 => {
|
|
8217
|
+
Name => 'FocusShiftInterval',
|
|
8218
|
+
PrintConv => '$val == 1? "1 Second" : sprintf("%.0f Seconds",$val)',
|
|
8219
|
+
},
|
|
8220
|
+
232 => {
|
|
8221
|
+
Name => 'FocusShiftExposureLock',
|
|
8222
|
+
PrintConv => \%offOn,
|
|
8223
|
+
},
|
|
8224
|
+
#304 => White Balance - Kelvin Temp
|
|
8225
|
+
#312 => ColorSpace
|
|
8226
|
+
#314 => ActiveD-Lighting
|
|
8227
|
+
#318 => HighISONoiseReduction
|
|
8228
|
+
322 => {
|
|
8229
|
+
Name => 'DiffractionCompensation',
|
|
8230
|
+
Format => 'int8u',
|
|
8231
|
+
PrintConv => \%offOn,
|
|
8232
|
+
},
|
|
8233
|
+
323 => {
|
|
8234
|
+
Name => 'AutoDistortionControl',
|
|
8235
|
+
Format => 'int8u',
|
|
8236
|
+
PrintConv => \%offOn,
|
|
8237
|
+
},
|
|
8238
|
+
#324 => {Name => 'FlickerReductionShooting',}, # redundant with tag in NikonSettings
|
|
8239
|
+
326 => {
|
|
8240
|
+
Name => 'NikonMeteringMode',
|
|
8241
|
+
Unknown => 1,
|
|
8242
|
+
PrintConv => {
|
|
8243
|
+
0 => 'Matrix',
|
|
8244
|
+
1 => 'Center',
|
|
8245
|
+
2 => 'Spot',
|
|
8246
|
+
3 => 'Highlight'
|
|
8247
|
+
},
|
|
8248
|
+
},
|
|
8249
|
+
326 => { Name => 'NikonMeteringMode', PrintConv => \%meteringModeZ7},
|
|
8250
|
+
328 => {
|
|
8251
|
+
Name => 'FlashControlMode', # this and nearby tag values for flash may be set from either the Photo Shooting Menu or using the Flash unit menu
|
|
8252
|
+
RawConv => '$$self{FlashControlMode} = $val',
|
|
8253
|
+
PrintConv => \%flashControlModeZ7,
|
|
8254
|
+
},
|
|
8255
|
+
334 => {
|
|
8256
|
+
Name => 'FlashGNDistance',
|
|
8257
|
+
Condition => '$$self{FlashControlMode} == 2',
|
|
8258
|
+
Unknown => 1,
|
|
8259
|
+
ValueConv => '$val + 3',
|
|
8260
|
+
PrintConv => \%flashGNDistance,
|
|
8261
|
+
},
|
|
8262
|
+
338 => {
|
|
8263
|
+
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)
|
|
8264
|
+
Condition => '$$self{FlashControlMode} >= 3',
|
|
8265
|
+
Unknown => 1,
|
|
8266
|
+
ValueConv => '2 ** (-$val/3)',
|
|
8267
|
+
ValueConvInv => '$val>0 ? -3*log($val)/log(2) : 0',
|
|
8268
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.1f%%",$val*100)',
|
|
8269
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
8270
|
+
},
|
|
8271
|
+
346 => { Name => 'FlashWirelessOption', PrintConv => \%flashWirelessOptionZ7, Unknown => 1},
|
|
8272
|
+
348 => { Name => 'FlashRemoteControl', PrintConv => \%flashRemoteControlZ7, Unknown => 1},
|
|
8273
|
+
352 => {
|
|
8274
|
+
Name => 'FlashMasterControlMode', # tag name chosen for compatibility with those found in FlashInfo0102 & FlashInfo0103
|
|
8275
|
+
RawConv => '$$self{FlashGroupOptionsMasterMode} = $val',
|
|
8276
|
+
PrintConv => \%flashGroupOptionsMode,
|
|
8277
|
+
},
|
|
8278
|
+
354 => {
|
|
8279
|
+
Name => 'FlashMasterCompensation',
|
|
8280
|
+
Format => 'int8s',
|
|
8281
|
+
Condition => '$$self{FlashGroupOptionsMasterMode} != 3', # other than 'Off'
|
|
8282
|
+
Unknown => 1,
|
|
8283
|
+
ValueConv => '$val/6',
|
|
8284
|
+
ValueConvInv => '6 * $val',
|
|
8285
|
+
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
|
8286
|
+
PrintConvInv => '$val',
|
|
8287
|
+
},
|
|
8288
|
+
358 => {
|
|
8289
|
+
Name => 'FlashMasterOutput',
|
|
8290
|
+
Unknown => 1,
|
|
8291
|
+
Condition => '$$self{FlashGroupOptionsMasterMode} == 1', # only for Mode=M
|
|
8292
|
+
ValueConv => '2 ** (-$val/3)',
|
|
8293
|
+
ValueConvInv => '$val>0 ? -3*log($val)/log(2) : 0',
|
|
8294
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.1f%%",$val*100)',
|
|
8295
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
8296
|
+
},
|
|
8297
|
+
#360 => {Name => 'FlashGroupAControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupACompensation at 362 and FlashGroupAOutput at 368
|
|
8298
|
+
#368 => {Name => 'FlashGroupBControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupBCompensation at 370 and FlashGroupBOutput at 374
|
|
8299
|
+
#376 => {Name => 'FlashGroupCControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupCCompensation at 378 and FlashGroupCOutput at 382
|
|
8300
|
+
#384 => {Name => 'FlashGroupDControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupDCompensation at 386 and FlashGroupDOutput at 390
|
|
8301
|
+
#392 => {Name => 'FlashGroupEControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupECompensation at 394 and FlashGroupEOutput at 398
|
|
8302
|
+
#400 => {Name => 'FlashGroupFControlMode', }, # commented out to reduce output volume - mapping follows FlashMasterControlMode with FlashGroupFCompensation at 402 and FlashGroupFOutput at 406
|
|
8303
|
+
#434 => FocusMode
|
|
8304
|
+
#436 => AFAreaMode
|
|
8305
|
+
#438 => VibrationReduction
|
|
8306
|
+
#442 => BracketSet
|
|
8307
|
+
#444 => BracketProgram
|
|
8308
|
+
#446 => BracketIncrement
|
|
8309
|
+
#463 => SilentPhotography
|
|
8310
|
+
502 => { Name => 'MovieFrameSize', PrintConv => \%movieFrameSizeZ9, Unknown => 1},
|
|
8311
|
+
504 => { Name => 'MovieFrameRate', PrintConv => \%movieFrameRateZ7, Unknown => 1},
|
|
8312
|
+
506 => {
|
|
8313
|
+
Name => 'MovieSlowMotion',
|
|
8314
|
+
Unknown => 1,
|
|
8315
|
+
PrintConv => {
|
|
8316
|
+
0 => 'Off',
|
|
8317
|
+
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]
|
|
8318
|
+
2 => 'On (5x)', # 120p recording with playback @ 24p [1920 x 1080; 20p x 5]
|
|
8319
|
+
},
|
|
8320
|
+
},
|
|
8321
|
+
510 => {
|
|
8322
|
+
Name => 'MovieType',
|
|
8323
|
+
Unknown => 1,
|
|
8324
|
+
PrintConv => {
|
|
8325
|
+
0 => 'MOV',
|
|
8326
|
+
1 => 'MP4',
|
|
8327
|
+
},
|
|
8328
|
+
},
|
|
8329
|
+
#512 => MovieISOAutoHiLimit
|
|
8330
|
+
516 => {
|
|
8331
|
+
Name => 'MovieISOAutoManualMode',
|
|
8332
|
+
Condition => '$$self{Model} =~ /^NIKON 7/', #ISO ranges vary by model. These mappings are for the Z7 and Z7II
|
|
8333
|
+
Format => 'int16u',
|
|
8334
|
+
Unknown => 1,
|
|
8335
|
+
ValueConv => '($val-104)/8',
|
|
8336
|
+
ValueConvInv => '8 * ($val + 104)',
|
|
8337
|
+
PrintConv => \%iSOAutoHiLimitZ7,
|
|
8338
|
+
},
|
|
8339
|
+
#520 => MovieWhiteBalanceSameAsPhoto
|
|
8340
|
+
568 => { Name => 'MovieActiveD-Lighting', PrintConv => \%activeDLightingZ7, Unknown => 1},
|
|
8341
|
+
572 => { Name => 'MovieHighISONoiseReduction', PrintConv => \%offLowNormalHighZ7, Unknown => 1},
|
|
8342
|
+
574 => { Name => 'MovieVignetteControl', PrintConv => \%offLowNormalHighZ7, Unknown => 1},
|
|
8343
|
+
576 => {
|
|
8344
|
+
Name => 'MovieVignetteControlSameAsPhoto',
|
|
8345
|
+
Unknown => 1,
|
|
8346
|
+
PrintConv => \%noYes
|
|
8347
|
+
},
|
|
8348
|
+
577 => {
|
|
8349
|
+
Name => 'MovieDiffractionCompensation',
|
|
8350
|
+
Unknown => 1,
|
|
8351
|
+
PrintConv => \%offOn
|
|
8352
|
+
},
|
|
8353
|
+
578 => {
|
|
8354
|
+
Name => 'MovieAutoDistortionControl',
|
|
8355
|
+
Unknown => 1,
|
|
8356
|
+
PrintConv => \%offOn
|
|
8357
|
+
},
|
|
8358
|
+
584 => { Name => 'MovieFocusMode', PrintConv => \%focusModeZ7, Unknown => 1},
|
|
8359
|
+
#586 => MovieAFAreaMode
|
|
8360
|
+
590 => {
|
|
8361
|
+
Name => 'MovieVibrationReduction',
|
|
8362
|
+
Unknown => 1,
|
|
8363
|
+
PrintConv => {
|
|
8364
|
+
0 => 'Off',
|
|
8365
|
+
1 => 'On (Normal)',
|
|
8366
|
+
2 => 'On (Sport)',
|
|
8367
|
+
},
|
|
8368
|
+
},
|
|
8369
|
+
591 => {
|
|
8370
|
+
Name => 'MovieVibrationReductionSameAsPhoto',
|
|
8371
|
+
Unknown => 1,
|
|
8372
|
+
PrintConv => \%noYes
|
|
8373
|
+
},
|
|
8374
|
+
#848 => HDMIOutputResolution
|
|
8375
|
+
#850 => HDMIOutputRange
|
|
8376
|
+
#854 => HDMIExternalRecorder
|
|
8377
|
+
#856 => HDMIBitDepth
|
|
8378
|
+
858 => {
|
|
8379
|
+
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
|
|
8380
|
+
Condition => '$$self{HDMIBitDepth} and $$self{HDMIBitDepth} == 2', # only for 10 bit
|
|
8381
|
+
RawConv => '$$self{HDMIOutputNLog} = $val',
|
|
8382
|
+
Unknown => 1,
|
|
8383
|
+
PrintConv => \%offOn,
|
|
8384
|
+
},
|
|
8385
|
+
#859 => HDMIViewAssist
|
|
8386
|
+
);
|
|
8387
|
+
|
|
8388
|
+
%Image::ExifTool::Nikon::MenuSettingsZ9 = (
|
|
8389
|
+
%binaryDataAttrs,
|
|
8390
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
8391
|
+
DATAMEMBER => [ 140, 188, 192, 232, 424, 534 ],
|
|
8392
|
+
IS_SUBDIR => [ 799 ],
|
|
8393
|
+
NOTES => 'These tags are used by the Z9.',
|
|
8394
|
+
#90 ISO
|
|
8395
|
+
140 => {
|
|
8396
|
+
Name => 'MultipleExposureMode',
|
|
8397
|
+
RawConv => '$$self{MultipleExposureMode} = $val',
|
|
8398
|
+
PrintConv => {
|
|
8399
|
+
0 => 'Off',
|
|
8400
|
+
1 => 'On (Series)',
|
|
8401
|
+
2 => 'On',
|
|
8402
|
+
},
|
|
8403
|
+
},
|
|
8404
|
+
142 => {Name => 'MultiExposureShots', Condition => '$$self{MultipleExposureMode} != 0' }, #range 2-9
|
|
8405
|
+
188 => {
|
|
8406
|
+
Name => 'Intervals',
|
|
8407
|
+
Format => 'int32u',
|
|
8408
|
+
RawConv => '$$self{IntervalShootingIntervals} = $val',
|
|
8409
|
+
Condition => '$$self{IntervalShooting} > 0',
|
|
8410
|
+
},
|
|
8411
|
+
192 => {
|
|
8412
|
+
Name => 'ShotsPerInterval',
|
|
8413
|
+
Format => 'int32u',
|
|
8414
|
+
RawConv => '$$self{IntervalShootingShotsPerInterval} = $val',
|
|
8415
|
+
Condition => '$$self{IntervalShooting} > 0',
|
|
8416
|
+
},
|
|
8417
|
+
#220 NEFCompression 0=> 'Lossless' 1=> 'High Efficiency*' 4=> 'High Efficientcy'
|
|
8418
|
+
232 => {
|
|
8419
|
+
Name => 'FocusShiftNumberShots', #1-300
|
|
8420
|
+
RawConv => '$$self{FocusShiftNumberShots} = $val',
|
|
8421
|
+
Condition => '$$self{FocusShiftShooting} > 0',
|
|
8422
|
+
},
|
|
8423
|
+
236 => {
|
|
8424
|
+
Name => 'FocusShiftStepWidth', #1(Narrow) to 10 (Wide)
|
|
8425
|
+
Condition => '$$self{FocusShiftShooting} > 0',
|
|
8426
|
+
},
|
|
8427
|
+
240 => {
|
|
8428
|
+
Name => 'FocusShiftInterval',
|
|
8429
|
+
Condition => '$$self{FocusShiftShooting} > 0',
|
|
8430
|
+
PrintConv => '$val == 1? "1 Second" : sprintf("%.0f Seconds",$val)',
|
|
8431
|
+
},
|
|
8432
|
+
244 => {
|
|
8433
|
+
Name => 'FocusShiftExposureLock',
|
|
8434
|
+
Unknown => 1,
|
|
8435
|
+
PrintConv => \%offOn,
|
|
8436
|
+
Condition => '$$self{FocusShiftShooting} > 0',
|
|
8437
|
+
},
|
|
8438
|
+
274 => {
|
|
8439
|
+
Name => 'PhotoShootingMenuBank',
|
|
8440
|
+
PrintConv => {
|
|
8441
|
+
0 => 'A',
|
|
8442
|
+
1 => 'B',
|
|
8443
|
+
2 => 'C',
|
|
8444
|
+
3 => 'D',
|
|
8445
|
+
},
|
|
8446
|
+
},
|
|
8447
|
+
276 => { Name => 'ExtendedMenuBanks', PrintConv => \%offOn, }, #single tag from both Photo & Video menus
|
|
8448
|
+
308 => {
|
|
8449
|
+
Name => 'PhotoShootingMenuBankImageArea',
|
|
8450
|
+
PrintConv => {
|
|
8451
|
+
0 => 'FX',
|
|
8452
|
+
1 => 'DX',
|
|
8453
|
+
4 => '16:9',
|
|
8454
|
+
8 => '1:1',
|
|
8455
|
+
},
|
|
8456
|
+
},
|
|
8457
|
+
#310 ImageQuality
|
|
8458
|
+
322 => { Name => 'AutoISO', PrintConv => \%offOn, },
|
|
8459
|
+
324 => {
|
|
8460
|
+
Name => 'ISOAutoHiLimit',
|
|
8461
|
+
Format => 'int16u',
|
|
8462
|
+
Unknown => 1,
|
|
8463
|
+
ValueConv => '($val-104)/8',
|
|
8464
|
+
ValueConvInv => '8 * ($val + 104)',
|
|
8465
|
+
PrintConv => \%iSOAutoHiLimitZ7,
|
|
8466
|
+
},
|
|
8467
|
+
326 => {
|
|
8468
|
+
Name => 'ISOAutoFlashLimit',
|
|
8469
|
+
Format => 'int16u',
|
|
8470
|
+
Unknown => 1,
|
|
8471
|
+
ValueConv => '($val-104)/8',
|
|
8472
|
+
ValueConvInv => '8 * ($val + 104)',
|
|
8473
|
+
PrintConv => \%iSOAutoHiLimitZ7,
|
|
8474
|
+
},
|
|
8475
|
+
#332 ISOAutoShutterTime - Auto setting 0=> 'Auto (Slowest)', 1 => 'Auto (Slower)', 2=> 'Auto', 3=> 'Auto (Faster)', 4=> 'Auto (Fastest)'
|
|
8476
|
+
334 => {
|
|
8477
|
+
Name => 'ISOAutoShutterTime', #shutter speed is 2 ** (-$val/24)
|
|
8478
|
+
ValueConv => '$val / 8',
|
|
8479
|
+
Format => 'int16s',
|
|
8480
|
+
PrintConv => {
|
|
8481
|
+
-15 => 'Auto', #z9 firmware 1.00 maps both 'Auto' and '30 s' to -15
|
|
8482
|
+
-12 => '15 s',
|
|
8483
|
+
-9 => '8 s',
|
|
8484
|
+
-6 => '4 s',
|
|
8485
|
+
-3 => '2 s',
|
|
8486
|
+
0 => '1 s',
|
|
8487
|
+
1 => '1/1.3 s',
|
|
8488
|
+
2 => '1/1.6 s',
|
|
8489
|
+
3 => '1/2 s',
|
|
8490
|
+
4 => '1/2.5 s',
|
|
8491
|
+
5 => '1/3 s',
|
|
8492
|
+
6 => '1/4 s',
|
|
8493
|
+
7 => '1/5 s',
|
|
8494
|
+
8 => '1/6 s',
|
|
8495
|
+
9 => '1/8 s',
|
|
8496
|
+
10 => '1/10 s',
|
|
8497
|
+
11 => '1/13 s',
|
|
8498
|
+
12 => '1/15 s',
|
|
8499
|
+
13 => '1/20 s',
|
|
8500
|
+
14 => '1/25 s',
|
|
8501
|
+
15 => '1/30 s',
|
|
8502
|
+
16 => '1/40 s',
|
|
8503
|
+
17 => '1/50 s',
|
|
8504
|
+
18 => '1/60 s',
|
|
8505
|
+
19 => '1/80 s',
|
|
8506
|
+
20 => '1/100 s',
|
|
8507
|
+
21 => '1/120 s',
|
|
8508
|
+
22 => '1/160 s',
|
|
8509
|
+
23 => '1/200 s',
|
|
8510
|
+
24 => '1/250 s',
|
|
8511
|
+
25 => '1/320 s',
|
|
8512
|
+
26 => '1/400 s',
|
|
8513
|
+
27 => '1/500 s',
|
|
8514
|
+
28 => '1/640 s',
|
|
8515
|
+
29 => '1/800 s',
|
|
8516
|
+
30 => '1/1000 s',
|
|
8517
|
+
31 => '1/1250 s',
|
|
8518
|
+
32 => '1/1600 s',
|
|
8519
|
+
33 => '1/2000 s',
|
|
8520
|
+
34 => '1/2500 s',
|
|
8521
|
+
35 => '1/3200 s',
|
|
8522
|
+
36 => '1/4000 s',
|
|
8523
|
+
37 => '1/5000 s',
|
|
8524
|
+
37.5 => '1/6000 s',
|
|
8525
|
+
38 => '1/6400 s',
|
|
8526
|
+
39 => '1/8000 s',
|
|
8527
|
+
40 => '1/10000 s',
|
|
8528
|
+
40.5 => '1/12000 s',
|
|
8529
|
+
41 => '1/13000 s',
|
|
8530
|
+
42 => '1/16000 s',
|
|
8531
|
+
},
|
|
8532
|
+
},
|
|
8533
|
+
#336 WhiteBalance
|
|
8534
|
+
#406 PictureControl
|
|
8535
|
+
#408 ColorSpace
|
|
8536
|
+
#410 ActiveD-Lighting
|
|
8537
|
+
#412 => { Name => 'NoiseReduction', PrintConv => \%offOn }, #Long Exposure Noise Reduction
|
|
8538
|
+
#414 HighISONoiseReduction
|
|
8539
|
+
#414 VignetteControl
|
|
8540
|
+
416 => { Name => 'MovieVignetteControl', PrintConv => \%offLowNormalHighZ7, Unknown => 1},
|
|
8541
|
+
418 => { Name => 'DiffractionCompensation', PrintConv => \%offOn }, #value can be set from both the Photo Shoot Menu and the Video Shooting Menu
|
|
8542
|
+
#419 AutoDistortionControl #value can be set from both the Photo Shoot Menu and the Video Shooting Menu
|
|
8543
|
+
420 => { Name => 'FlickerReductionShooting', PrintConv => \%offOn },
|
|
8544
|
+
#422 MeteringMode
|
|
8545
|
+
424 => {
|
|
8546
|
+
Name => 'FlashControlMode', # this and nearby tag values for flash may be set from either the Photo Shooting Menu or using the Flash unit menu
|
|
8547
|
+
RawConv => '$$self{FlashControlMode} = $val',
|
|
8548
|
+
PrintConv => \%flashControlModeZ7,
|
|
8549
|
+
},
|
|
8550
|
+
426 => {
|
|
8551
|
+
Name => 'FlashMasterCompensation',
|
|
8552
|
+
Format => 'int8s',
|
|
8553
|
+
Unknown => 1,
|
|
8554
|
+
ValueConv => '$val/6',
|
|
8555
|
+
ValueConvInv => '6 * $val',
|
|
8556
|
+
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
|
8557
|
+
PrintConvInv => '$val',
|
|
8558
|
+
},
|
|
8559
|
+
430 => {
|
|
8560
|
+
Name => 'FlashGNDistance',
|
|
8561
|
+
Condition => '$$self{FlashControlMode} == 2',
|
|
8562
|
+
Unknown => 1,
|
|
8563
|
+
ValueConv => '$val + 3',
|
|
8564
|
+
PrintConv => \%flashGNDistance,
|
|
8565
|
+
},
|
|
8566
|
+
434 => {
|
|
8567
|
+
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)
|
|
8568
|
+
Condition => '$$self{FlashControlMode} >= 3',
|
|
8569
|
+
Unknown => 1,
|
|
8570
|
+
ValueConv => '2 ** (-$val/3)',
|
|
8571
|
+
ValueConvInv => '$val>0 ? -3*log($val)/log(2) : 0',
|
|
8572
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.1f%%",$val*100)',
|
|
8573
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
8574
|
+
},
|
|
8575
|
+
#442 flash wirelss control 0=> 'Off' 1=> 'CMD'
|
|
8576
|
+
444 => { Name => 'FlashRemoteControl', PrintConv => \%flashRemoteControlZ7, Unknown => 1},
|
|
8577
|
+
456 => { Name => 'FlashWirelessOption', PrintConv => \%flashWirelessOptionZ7, Unknown => 1},
|
|
8578
|
+
#526 FocusMode
|
|
8579
|
+
528 => {
|
|
8580
|
+
Name => 'AFAreaMode',
|
|
8581
|
+
PrintConv => {
|
|
8582
|
+
1 => 'Single',
|
|
8583
|
+
2 => 'Dynamic',
|
|
8584
|
+
3 => 'Wide (S)',
|
|
8585
|
+
4 => 'Wide (L)',
|
|
8586
|
+
5 => '3D',
|
|
8587
|
+
6 => 'Auto',
|
|
8588
|
+
},
|
|
8589
|
+
},
|
|
8590
|
+
530 => { Name => 'VRMode', PrintConv => \%vRModeZ9},
|
|
8591
|
+
534 => {
|
|
8592
|
+
Name => 'BracketSet',
|
|
8593
|
+
RawConv => '$$self{BracketSet} = $val',
|
|
8594
|
+
PrintConv => {
|
|
8595
|
+
0 => 'AE/Flash',
|
|
8596
|
+
1 => 'AE',
|
|
8597
|
+
2 => 'Flash',
|
|
8598
|
+
3 => 'White Balance',
|
|
8599
|
+
4 => 'Active-D Lighting',
|
|
8600
|
+
},
|
|
8601
|
+
},
|
|
8602
|
+
536 => {
|
|
8603
|
+
Name => 'BracketProgram',
|
|
8604
|
+
Condition => '$$self{BracketSet} < 3',
|
|
8605
|
+
Notes => 'AE and/or Flash Bracketing',
|
|
8606
|
+
PrintConv => {
|
|
8607
|
+
0 => 'Disabled',
|
|
8608
|
+
2 => '2F',
|
|
8609
|
+
3 => '3F',
|
|
8610
|
+
4 => '4F',
|
|
8611
|
+
5 => '5F',
|
|
8612
|
+
7 => '7F',
|
|
8613
|
+
9 => '9F',
|
|
8614
|
+
},
|
|
8615
|
+
},
|
|
8616
|
+
538 => {
|
|
8617
|
+
Name => 'BracketIncrement',
|
|
8618
|
+
Condition => '$$self{BracketSet} < 3',
|
|
8619
|
+
Notes => 'AE and/or Flash Bracketing',
|
|
8620
|
+
PrintConv => {
|
|
8621
|
+
0 => '0.3',
|
|
8622
|
+
#1 => '0.5',
|
|
8623
|
+
2 => '0.7',
|
|
8624
|
+
3 => '1.0',
|
|
8625
|
+
4 => '2.0',
|
|
8626
|
+
5 => '3.0',
|
|
8627
|
+
},
|
|
8628
|
+
},
|
|
8629
|
+
#544 BracketProgram for ADL
|
|
8630
|
+
556 => {
|
|
8631
|
+
Name => 'SecondarySlotFunction',
|
|
8632
|
+
PrintConv => {
|
|
8633
|
+
0 => 'Overflow',
|
|
8634
|
+
1 => 'Backup',
|
|
8635
|
+
2 => 'NEF Primary + JPG Secondary',
|
|
8636
|
+
3 => 'JPG Primary + JPG Secondary',
|
|
8637
|
+
},
|
|
8638
|
+
},
|
|
8639
|
+
572 => { Name => 'DXCropAlert', PrintConv => \%offOn, },
|
|
8640
|
+
574 => { Name => 'SubjectDetection', PrintConv => \%subjectDetectionZ9},
|
|
8641
|
+
604 => {
|
|
8642
|
+
Name => 'MovieImageArea',
|
|
8643
|
+
Unknown => 1,
|
|
8644
|
+
Mask => 0x01, #without the mask 4 => 'FX' 5 => DX only the 2nd Z-series field encountered with a mask.
|
|
8645
|
+
PrintConv => {
|
|
8646
|
+
0 => 'FX',
|
|
8647
|
+
1 => 'DX',
|
|
8648
|
+
},
|
|
8649
|
+
},
|
|
8650
|
+
614 => {
|
|
8651
|
+
Name => 'MovieType',
|
|
8652
|
+
Unknown => 1,
|
|
8653
|
+
PrintConv => {
|
|
8654
|
+
1 => 'H.265 8-bit (MP4)',
|
|
8655
|
+
2 => 'H.265 8-bit (MOV)',
|
|
8656
|
+
3 => 'H.265 10-bit (MOV)',
|
|
8657
|
+
4 => 'ProRes 422 HQ 10-bit (MOV)',
|
|
8658
|
+
},
|
|
8659
|
+
},
|
|
8660
|
+
616 => {
|
|
8661
|
+
Name => 'MovieISOAutoHiLimit',
|
|
8662
|
+
Format => 'int16u',
|
|
8663
|
+
Unknown => 1,
|
|
8664
|
+
ValueConv => '($val-104)/8',
|
|
8665
|
+
ValueConvInv => '8 * ($val + 104)',
|
|
8666
|
+
PrintConv => \%iSOAutoHiLimitZ7,
|
|
8667
|
+
},
|
|
8668
|
+
618 => { Name => 'MovieISOAutoControlManualMode', PrintConv => \%offOn, Unknown => 1},
|
|
8669
|
+
620 => {
|
|
8670
|
+
Name => 'MovieISOAutoManualMode',
|
|
8671
|
+
Format => 'int16u',
|
|
8672
|
+
Unknown => 1,
|
|
8673
|
+
ValueConv => '($val-104)/8',
|
|
8674
|
+
ValueConvInv => '8 * ($val + 104)',
|
|
8675
|
+
PrintConv => \%iSOAutoHiLimitZ7,
|
|
8676
|
+
},
|
|
8677
|
+
696 => { Name => 'MovieActiveD-Lighting', PrintConv => \%activeDLightingZ7, Unknown => 1},
|
|
8678
|
+
698 => { Name => 'MovieHighISONoiseReduction', PrintConv => \%offLowNormalHighZ7, Unknown => 1},
|
|
8679
|
+
704 => {
|
|
8680
|
+
Name => 'MovieFlickerReduction',
|
|
8681
|
+
PrintConv => {
|
|
8682
|
+
0 => 'Auto',
|
|
8683
|
+
1 => '50Hz',
|
|
8684
|
+
2 => '60Hz',
|
|
8685
|
+
},
|
|
8686
|
+
},
|
|
8687
|
+
706 => { Name => 'MovieMeteringMode', PrintConv => \%meteringModeZ7, , Unknown => 1},
|
|
8688
|
+
708 => { Name => 'MovieFocusMode', PrintConv => \%focusModeZ7, Unknown => 1},
|
|
8689
|
+
710 => {
|
|
8690
|
+
Name => 'MovieAFAreaMode',
|
|
8691
|
+
PrintConv => {
|
|
8692
|
+
1 => 'Single',
|
|
8693
|
+
3 => 'Wide (S)',
|
|
8694
|
+
4 => 'Wide (L)',
|
|
8695
|
+
6 => 'Auto',
|
|
8696
|
+
11 => 'Subject Tracking',
|
|
8697
|
+
},
|
|
8698
|
+
},
|
|
8699
|
+
712 => { Name => 'MovieVRMode', PrintConv => \%vRModeZ9, Unknown => 1},
|
|
8700
|
+
716 => { Name => 'MovieElectronicVR', PrintConv => \%offOn, Unknown => 1 }, #distinct from MoveieVRMode
|
|
8701
|
+
718 => { Name => 'MovieSoundRecording', PrintConv => { 0 => 'Off', 1 => 'On', 2 => 'On' }, Unknown => 1 }, #not sure why the unusal mapping with 2 => 'On'
|
|
8702
|
+
720 => { Name => 'MicrophoneSensitivity', Unknown => 1}, #1-20
|
|
8703
|
+
722 => { Name => 'MicrophoneAttenuator', PrintConv => \%offOn, Unknown => 1 }, #distinct from MoveieVRMode
|
|
8704
|
+
724 => { Name => 'MicrophoneFrequencyResponse', PrintConv => { 0 => 'Wide Range', 1 => 'Vocal Range' }, Unknown => 1 },
|
|
8705
|
+
726 => { Name => 'WindNoiseReduction', PrintConv => \%offOn, Unknown => 1 },
|
|
8706
|
+
748 => {
|
|
8707
|
+
Name => 'MovieToneMap',
|
|
8708
|
+
Unknown => 1,
|
|
8709
|
+
PrintConv => {
|
|
8710
|
+
0 => 'SDR',
|
|
8711
|
+
1 => 'HLG',
|
|
8712
|
+
2 => 'N-Log',
|
|
8713
|
+
},
|
|
8714
|
+
},
|
|
8715
|
+
754 => { Name => 'MovieFrameSize', PrintConv => \%movieFrameSizeZ9, Unknown => 1},
|
|
8716
|
+
756 => { Name => 'MovieFrameRate', PrintConv => \%movieFrameRateZ7, Unknown => 1},
|
|
8717
|
+
762 => { Name => 'MicrophoneJackPower', PrintConv => \%offOn, Unknown => 1 },
|
|
8718
|
+
763 => { Name => 'MovieDXCropAlert', PrintConv => \%offOn, Unknown => 1 },
|
|
8719
|
+
764 => { Name => 'MovieSubjectDetection', PrintConv => \%subjectDetectionZ9, Unknown => 1},
|
|
8720
|
+
799 => {
|
|
8721
|
+
Name => 'CustomSettingsZ9',
|
|
8722
|
+
Format => 'undef[608]',
|
|
8723
|
+
SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsZ9' },
|
|
8724
|
+
},
|
|
8725
|
+
1426 => {
|
|
8726
|
+
Name => 'Language',
|
|
8727
|
+
Unknown => 1,
|
|
8728
|
+
PrintConv => {
|
|
8729
|
+
4 => 'English',
|
|
8730
|
+
5 => 'Spanish',
|
|
8731
|
+
7 => 'French',
|
|
8732
|
+
},
|
|
8733
|
+
},
|
|
8734
|
+
1428 => {
|
|
8735
|
+
Name => 'TimeZone',
|
|
8736
|
+
PrintConv => {
|
|
8737
|
+
5 => '+09:00 (Tokyo)',
|
|
8738
|
+
6 => '+08:00 (Beijing, Honk Kong, Sinapore)',
|
|
8739
|
+
10 => '+05:45 (Kathmandu)',
|
|
8740
|
+
11 => '+05:30 (New Dehli)',
|
|
8741
|
+
16 => '+03:00 (Moscow, Nairobi)',
|
|
8742
|
+
15 => '+02:00 (Athens)',
|
|
8743
|
+
16 => '+01:00 (Madrid, Paris, Berlin)',
|
|
8744
|
+
17 => '+02:00 (Athens, Helsinki)',
|
|
8745
|
+
18 => '+00:00 (London)',
|
|
8746
|
+
19 => '+00:00', #PH (unknown city)
|
|
8747
|
+
22 => '-03:00 (Buenos Aires, Sao Paulo)',
|
|
8748
|
+
24 => '-04:00 (Manaus, Caracas)',
|
|
8749
|
+
25 => '-05:00 (New York, Toronto, Lima)',
|
|
8750
|
+
26 => '-06:00 (Chicago, Mexico City)',
|
|
8751
|
+
27 => '-07:00 (Denver)',
|
|
8752
|
+
28 => '-08:00 (Los Angeles, Vancouver)',
|
|
8753
|
+
29 => '-09:00 (Anchorage)',
|
|
8754
|
+
30 => '-10:00 (Hawaii)',
|
|
8755
|
+
},
|
|
8756
|
+
},
|
|
8757
|
+
1434 => {Name => 'MonitorBrightness', ValueConv => '$val - 5', Unknown => 1}, # settings: -5 to +5
|
|
8758
|
+
1456 => { Name => 'AFFineTune', PrintConv => \%offOn, Unknown => 1 },
|
|
8759
|
+
1552 => {
|
|
8760
|
+
Name => 'HDMIOutputResolution',
|
|
8761
|
+
PrintConv => {
|
|
8762
|
+
0 => 'Auto',
|
|
8763
|
+
1 => '4320p',
|
|
8764
|
+
2 => '2160p',
|
|
8765
|
+
3 => '1080p',
|
|
8766
|
+
#4 => '1080i',
|
|
8767
|
+
5 => '720p',
|
|
8768
|
+
#6 => '576p',
|
|
8769
|
+
#7 => '480p',
|
|
8770
|
+
},
|
|
8771
|
+
},
|
|
8772
|
+
1565 => { Name => 'SetClockFromLocationData', PrintConv => \%offOn, Unknown => 1 },
|
|
8773
|
+
1572 => { Name => 'AirplaneMode', PrintConv => \%offOn, Unknown => 1 },
|
|
8774
|
+
1573 => { Name => 'EmptySlotRelease', PrintConv => { 0 => 'Disable Release', 1 => 'Enable Release' }, Unknown => 1 },
|
|
8775
|
+
1608 => { Name => 'EnergySavingMode', PrintConv =>\%offOn, Unknown => 1 },
|
|
8776
|
+
1632 => { Name => 'RecordLocationData', PrintConv => \%offOn, Unknown => 1 },
|
|
8777
|
+
1636 => { Name => 'USBPowerDelivery', PrintConv => \%offOn, Unknown => 1 },
|
|
8778
|
+
1645 => { Name => 'SensorShield', PrintConv => { 0 => 'Stays Open', 1 => 'Closes' }, Unknown => 1 },
|
|
8779
|
+
);
|
|
8780
|
+
|
|
8781
|
+
# Flash information (ref JD)
|
|
8782
|
+
%Image::ExifTool::Nikon::FlashInfo0100 = (
|
|
8783
|
+
%binaryDataAttrs,
|
|
8784
|
+
DATAMEMBER => [ 9.2, 15, 16 ],
|
|
8785
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
8786
|
+
NOTES => q{
|
|
8787
|
+
These tags are used by the D2H, D2Hs, D2X, D2Xs, D50, D70, D70s, D80 and
|
|
8788
|
+
D200.
|
|
8789
|
+
},
|
|
8790
|
+
# NOTE: Must set ByteOrder in SubDirectory if any multi-byte integer tags added
|
|
8791
|
+
0 => {
|
|
8792
|
+
Name => 'FlashInfoVersion',
|
|
8793
|
+
Format => 'string[4]',
|
|
8794
|
+
Writable => 0,
|
|
8795
|
+
},
|
|
8796
|
+
4 => { #PH
|
|
8797
|
+
Name => 'FlashSource',
|
|
8798
|
+
PrintConv => {
|
|
8799
|
+
0 => 'None',
|
|
8800
|
+
1 => 'External',
|
|
8801
|
+
2 => 'Internal',
|
|
8802
|
+
},
|
|
8803
|
+
},
|
|
8804
|
+
# 5 - values: 46,48,50,54,78
|
|
8805
|
+
6 => {
|
|
8806
|
+
Format => 'int8u[2]',
|
|
8807
|
+
Name => 'ExternalFlashFirmware',
|
|
8808
|
+
SeparateTable => 'FlashFirmware',
|
|
8809
|
+
PrintConv => \%flashFirmware,
|
|
8810
|
+
},
|
|
8811
|
+
8 => {
|
|
8812
|
+
Name => 'ExternalFlashFlags',
|
|
8813
|
+
PrintConv => { 0 => '(none)',
|
|
8814
|
+
BITMASK => {
|
|
8815
|
+
0 => 'Fired', #28
|
|
8816
|
+
2 => 'Bounce Flash', #PH
|
|
8817
|
+
4 => 'Wide Flash Adapter',
|
|
8818
|
+
5 => 'Dome Diffuser', #28
|
|
8819
|
+
},
|
|
8820
|
+
},
|
|
8821
|
+
},
|
|
8822
|
+
9.1 => {
|
|
8823
|
+
Name => 'FlashCommanderMode',
|
|
8824
|
+
Mask => 0x80,
|
|
8825
|
+
PrintConv => { 0 => 'Off', 1 => 'On' },
|
|
8826
|
+
},
|
|
8827
|
+
9.2 => {
|
|
8828
|
+
Name => 'FlashControlMode',
|
|
8829
|
+
Mask => 0x7f,
|
|
8830
|
+
DataMember => 'FlashControlMode',
|
|
8831
|
+
RawConv => '$$self{FlashControlMode} = $val',
|
|
8832
|
+
PrintConv => \%flashControlMode,
|
|
8833
|
+
SeparateTable => 'FlashControlMode',
|
|
8834
|
+
},
|
|
8835
|
+
10 => [
|
|
8836
|
+
{
|
|
8837
|
+
Name => 'FlashOutput',
|
|
8838
|
+
Condition => '$$self{FlashControlMode} >= 0x06',
|
|
8839
|
+
ValueConv => '2 ** (-$val/6)',
|
|
8840
|
+
ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
|
|
8841
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
|
|
8842
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
8843
|
+
},
|
|
8844
|
+
{
|
|
8845
|
+
Name => 'FlashCompensation',
|
|
8846
|
+
Format => 'int8s',
|
|
8847
|
+
Priority => 0,
|
|
8848
|
+
ValueConv => '-$val/6',
|
|
8849
|
+
ValueConvInv => '-6 * $val',
|
|
8850
|
+
PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)',
|
|
8851
|
+
PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
|
|
8852
|
+
},
|
|
8853
|
+
],
|
|
8854
|
+
11 => {
|
|
8855
|
+
Name => 'FlashFocalLength',
|
|
8856
|
+
RawConv => '$val ? $val : undef',
|
|
8857
|
+
PrintConv => '"$val mm"',
|
|
8858
|
+
PrintConvInv => '$val=~/(\d+)/; $1 || 0',
|
|
8859
|
+
},
|
|
8860
|
+
12 => {
|
|
8861
|
+
Name => 'RepeatingFlashRate',
|
|
8862
|
+
RawConv => '$val ? $val : undef',
|
|
8863
|
+
PrintConv => '"$val Hz"',
|
|
8864
|
+
PrintConvInv => '$val=~/(\d+)/; $1 || 0',
|
|
8865
|
+
},
|
|
8866
|
+
13 => {
|
|
8867
|
+
Name => 'RepeatingFlashCount',
|
|
8868
|
+
RawConv => '$val ? $val : undef',
|
|
8869
|
+
},
|
|
8870
|
+
14 => { #PH
|
|
8871
|
+
Name => 'FlashGNDistance',
|
|
8872
|
+
SeparateTable => 1,
|
|
8873
|
+
PrintConv => \%flashGNDistance,
|
|
8874
|
+
},
|
|
8875
|
+
15 => {
|
|
8876
|
+
Name => 'FlashGroupAControlMode',
|
|
8877
|
+
Mask => 0x0f,
|
|
8878
|
+
DataMember => 'FlashGroupAControlMode',
|
|
8879
|
+
RawConv => '$$self{FlashGroupAControlMode} = $val',
|
|
8880
|
+
PrintConv => \%flashControlMode,
|
|
8881
|
+
SeparateTable => 'FlashControlMode',
|
|
8882
|
+
},
|
|
8883
|
+
16 => {
|
|
8884
|
+
Name => 'FlashGroupBControlMode',
|
|
8885
|
+
Mask => 0x0f,
|
|
8886
|
+
DataMember => 'FlashGroupBControlMode',
|
|
8887
|
+
RawConv => '$$self{FlashGroupBControlMode} = $val',
|
|
8888
|
+
PrintConv => \%flashControlMode,
|
|
8889
|
+
SeparateTable => 'FlashControlMode',
|
|
8890
|
+
},
|
|
8891
|
+
17 => [
|
|
8892
|
+
{
|
|
8893
|
+
Name => 'FlashGroupAOutput',
|
|
8894
|
+
Condition => '$$self{FlashGroupAControlMode} >= 0x06',
|
|
8895
|
+
ValueConv => '2 ** (-$val/6)',
|
|
8896
|
+
ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
|
|
8897
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
|
|
8898
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
8899
|
+
},
|
|
8900
|
+
{
|
|
8901
|
+
Name => 'FlashGroupACompensation',
|
|
8902
|
+
Format => 'int8s',
|
|
8903
|
+
ValueConv => '-$val/6',
|
|
8904
|
+
ValueConvInv => '-6 * $val',
|
|
8905
|
+
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
|
8906
|
+
PrintConvInv => '$val',
|
|
8907
|
+
},
|
|
8908
|
+
],
|
|
8909
|
+
18 => [
|
|
8910
|
+
{
|
|
8911
|
+
Name => 'FlashGroupBOutput',
|
|
8912
|
+
Condition => '$$self{FlashGroupBControlMode} >= 0x06',
|
|
8913
|
+
ValueConv => '2 ** (-$val/6)',
|
|
8914
|
+
ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
|
|
8915
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
|
|
8916
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
8917
|
+
},
|
|
8918
|
+
{
|
|
8919
|
+
Name => 'FlashGroupBCompensation',
|
|
8920
|
+
Format => 'int8s',
|
|
8921
|
+
ValueConv => '-$val/6',
|
|
8922
|
+
ValueConvInv => '-6 * $val',
|
|
8923
|
+
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
|
8924
|
+
PrintConvInv => '$val',
|
|
8925
|
+
},
|
|
8926
|
+
],
|
|
8927
|
+
);
|
|
8928
|
+
|
|
8929
|
+
# Flash information for D40, D40x, D3 and D300 (ref JD)
|
|
8930
|
+
%Image::ExifTool::Nikon::FlashInfo0102 = (
|
|
8931
|
+
%binaryDataAttrs,
|
|
8932
|
+
DATAMEMBER => [ 9.2, 16.1, 17.1, 17.2 ],
|
|
8933
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
8934
|
+
NOTES => q{
|
|
8935
|
+
These tags are used by the D3 (firmware 1.x), D40, D40X, D60 and D300
|
|
8936
|
+
(firmware 1.00).
|
|
8937
|
+
},
|
|
8938
|
+
# NOTE: Must set ByteOrder in SubDirectory if any multi-byte integer tags added
|
|
8939
|
+
0 => {
|
|
8940
|
+
Name => 'FlashInfoVersion',
|
|
8941
|
+
Format => 'string[4]',
|
|
8942
|
+
Writable => 0,
|
|
8943
|
+
},
|
|
8944
|
+
4 => { #PH
|
|
8945
|
+
Name => 'FlashSource',
|
|
8946
|
+
PrintConv => {
|
|
8947
|
+
0 => 'None',
|
|
8948
|
+
1 => 'External',
|
|
8949
|
+
2 => 'Internal',
|
|
8950
|
+
},
|
|
8951
|
+
},
|
|
8952
|
+
# 5 - values: 46,48,50,54,78
|
|
8953
|
+
6 => {
|
|
8954
|
+
Format => 'int8u[2]',
|
|
8955
|
+
Name => 'ExternalFlashFirmware',
|
|
8956
|
+
SeparateTable => 'FlashFirmware',
|
|
8957
|
+
PrintConv => \%flashFirmware,
|
|
8958
|
+
},
|
|
8959
|
+
8 => {
|
|
8960
|
+
Name => 'ExternalFlashFlags',
|
|
8961
|
+
PrintConv => { BITMASK => {
|
|
8962
|
+
0 => 'Fired', #28
|
|
8963
|
+
2 => 'Bounce Flash', #PH
|
|
8964
|
+
4 => 'Wide Flash Adapter',
|
|
8965
|
+
5 => 'Dome Diffuser', #28
|
|
8966
|
+
}},
|
|
8967
|
+
},
|
|
8968
|
+
9.1 => {
|
|
8969
|
+
Name => 'FlashCommanderMode',
|
|
8970
|
+
Mask => 0x80,
|
|
8971
|
+
PrintConv => { 0 => 'Off', 1 => 'On' },
|
|
8972
|
+
},
|
|
8973
|
+
9.2 => {
|
|
8974
|
+
Name => 'FlashControlMode',
|
|
8975
|
+
Mask => 0x7f,
|
|
8976
|
+
DataMember => 'FlashControlMode',
|
|
8977
|
+
RawConv => '$$self{FlashControlMode} = $val',
|
|
8978
|
+
PrintConv => \%flashControlMode,
|
|
8979
|
+
SeparateTable => 'FlashControlMode',
|
|
8980
|
+
},
|
|
8981
|
+
10 => [
|
|
8982
|
+
{
|
|
8983
|
+
Name => 'FlashOutput',
|
|
8984
|
+
Condition => '$$self{FlashControlMode} >= 0x06',
|
|
8985
|
+
ValueConv => '2 ** (-$val/6)',
|
|
8986
|
+
ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
|
|
8987
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
|
|
8988
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
8989
|
+
},
|
|
8990
|
+
{
|
|
8991
|
+
Name => 'FlashCompensation',
|
|
8992
|
+
# this is the compensation from the camera (0x0012) for "Built-in" FlashType, or
|
|
8993
|
+
# the compensation from the external unit (0x0017) for "Optional" FlashType - PH
|
|
8994
|
+
Format => 'int8s',
|
|
8995
|
+
Priority => 0,
|
|
8996
|
+
ValueConv => '-$val/6',
|
|
8997
|
+
ValueConvInv => '-6 * $val',
|
|
8998
|
+
PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)',
|
|
8999
|
+
PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
|
|
9000
|
+
},
|
|
9001
|
+
],
|
|
9002
|
+
12 => {
|
|
9003
|
+
Name => 'FlashFocalLength',
|
|
9004
|
+
RawConv => '$val ? $val : undef',
|
|
9005
|
+
PrintConv => '"$val mm"',
|
|
9006
|
+
PrintConvInv => '$val=~/(\d+)/; $1 || 0',
|
|
9007
|
+
},
|
|
9008
|
+
13 => {
|
|
9009
|
+
Name => 'RepeatingFlashRate',
|
|
9010
|
+
RawConv => '$val ? $val : undef',
|
|
9011
|
+
PrintConv => '"$val Hz"',
|
|
9012
|
+
PrintConvInv => '$val=~/(\d+)/; $1 || 0',
|
|
9013
|
+
},
|
|
9014
|
+
14 => {
|
|
9015
|
+
Name => 'RepeatingFlashCount',
|
|
9016
|
+
RawConv => '$val ? $val : undef',
|
|
9017
|
+
},
|
|
9018
|
+
15 => { #PH
|
|
9019
|
+
Name => 'FlashGNDistance',
|
|
9020
|
+
SeparateTable => 1,
|
|
9021
|
+
PrintConv => \%flashGNDistance,
|
|
9022
|
+
},
|
|
9023
|
+
16.1 => {
|
|
9024
|
+
Name => 'FlashGroupAControlMode',
|
|
9025
|
+
Mask => 0x0f,
|
|
9026
|
+
Notes => 'note: group A tags may apply to the built-in flash settings for some models',
|
|
9027
|
+
DataMember => 'FlashGroupAControlMode',
|
|
9028
|
+
RawConv => '$$self{FlashGroupAControlMode} = $val',
|
|
9029
|
+
PrintConv => \%flashControlMode,
|
|
9030
|
+
SeparateTable => 'FlashControlMode',
|
|
9031
|
+
},
|
|
9032
|
+
17.1 => {
|
|
9033
|
+
Name => 'FlashGroupBControlMode',
|
|
9034
|
+
Mask => 0xf0,
|
|
9035
|
+
Notes => 'note: group B tags may apply to group A settings for some models',
|
|
9036
|
+
DataMember => 'FlashGroupBControlMode',
|
|
9037
|
+
RawConv => '$$self{FlashGroupBControlMode} = $val',
|
|
9038
|
+
PrintConv => \%flashControlMode,
|
|
9039
|
+
SeparateTable => 'FlashControlMode',
|
|
9040
|
+
},
|
|
9041
|
+
17.2 => { #PH
|
|
9042
|
+
Name => 'FlashGroupCControlMode',
|
|
9043
|
+
Mask => 0x0f,
|
|
9044
|
+
Notes => 'note: group C tags may apply to group B settings for some models',
|
|
9045
|
+
DataMember => 'FlashGroupCControlMode',
|
|
9046
|
+
RawConv => '$$self{FlashGroupCControlMode} = $val',
|
|
9047
|
+
PrintConv => \%flashControlMode,
|
|
9048
|
+
SeparateTable => 'FlashControlMode',
|
|
9049
|
+
},
|
|
9050
|
+
18 => [
|
|
9051
|
+
{
|
|
9052
|
+
Name => 'FlashGroupAOutput',
|
|
9053
|
+
Condition => '$$self{FlashGroupAControlMode} >= 0x06',
|
|
9054
|
+
ValueConv => '2 ** (-$val/6)',
|
|
9055
|
+
ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
|
|
9056
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
|
|
9057
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
9058
|
+
},
|
|
9059
|
+
{
|
|
9060
|
+
Name => 'FlashGroupACompensation',
|
|
9061
|
+
Format => 'int8s',
|
|
9062
|
+
ValueConv => '-$val/6',
|
|
9063
|
+
ValueConvInv => '-6 * $val',
|
|
9064
|
+
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
|
9065
|
+
PrintConvInv => '$val',
|
|
9066
|
+
},
|
|
9067
|
+
],
|
|
9068
|
+
19 => [
|
|
9069
|
+
{
|
|
9070
|
+
Name => 'FlashGroupBOutput',
|
|
9071
|
+
Condition => '$$self{FlashGroupBControlMode} >= 0x60',
|
|
9072
|
+
ValueConv => '2 ** (-$val/6)',
|
|
9073
|
+
ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
|
|
9074
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
|
|
9075
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
9076
|
+
},
|
|
9077
|
+
{
|
|
9078
|
+
Name => 'FlashGroupBCompensation',
|
|
9079
|
+
Format => 'int8s',
|
|
9080
|
+
ValueConv => '-$val/6',
|
|
9081
|
+
ValueConvInv => '-6 * $val',
|
|
9082
|
+
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
|
9083
|
+
PrintConvInv => '$val',
|
|
9084
|
+
},
|
|
9085
|
+
],
|
|
9086
|
+
20 => [ #PH
|
|
9087
|
+
{
|
|
9088
|
+
Name => 'FlashGroupCOutput',
|
|
9089
|
+
Condition => '$$self{FlashGroupCControlMode} >= 0x06',
|
|
9090
|
+
ValueConv => '2 ** (-$val/6)',
|
|
9091
|
+
ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
|
|
9092
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
|
|
9093
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
9094
|
+
},
|
|
9095
|
+
{
|
|
9096
|
+
Name => 'FlashGroupCCompensation',
|
|
9097
|
+
Format => 'int8s',
|
|
9098
|
+
ValueConv => '-$val/6',
|
|
9099
|
+
ValueConvInv => '-6 * $val',
|
|
9100
|
+
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
|
9101
|
+
PrintConvInv => '$val',
|
|
9102
|
+
},
|
|
9103
|
+
],
|
|
9104
|
+
);
|
|
9105
|
+
|
|
9106
|
+
# Flash information (ref JD)
|
|
9107
|
+
%Image::ExifTool::Nikon::FlashInfo0100 = (
|
|
9108
|
+
%binaryDataAttrs,
|
|
9109
|
+
DATAMEMBER => [ 9.2, 15, 16 ],
|
|
9110
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
9111
|
+
NOTES => q{
|
|
9112
|
+
These tags are used by the D2H, D2Hs, D2X, D2Xs, D50, D70, D70s, D80 and
|
|
9113
|
+
D200.
|
|
9114
|
+
},
|
|
9115
|
+
# NOTE: Must set ByteOrder in SubDirectory if any multi-byte integer tags added
|
|
9116
|
+
0 => {
|
|
9117
|
+
Name => 'FlashInfoVersion',
|
|
9118
|
+
Format => 'string[4]',
|
|
9119
|
+
Writable => 0,
|
|
9120
|
+
},
|
|
9121
|
+
4 => { #PH
|
|
9122
|
+
Name => 'FlashSource',
|
|
9123
|
+
PrintConv => {
|
|
9124
|
+
0 => 'None',
|
|
9125
|
+
1 => 'External',
|
|
9126
|
+
2 => 'Internal',
|
|
7463
9127
|
},
|
|
7464
9128
|
},
|
|
7465
9129
|
# 5 - values: 46,48,50,54,78
|
|
@@ -8333,7 +9997,7 @@ my %nikonFocalConversions = (
|
|
|
8333
9997
|
],
|
|
8334
9998
|
);
|
|
8335
9999
|
|
|
8336
|
-
# Flash information for the
|
|
10000
|
+
# Flash information for the Z7II (ref 28)
|
|
8337
10001
|
# (likey similar to FlashInfo010 and FlashInfo0108 with addition of support for radio controlled units such as the SB-5000?
|
|
8338
10002
|
%Image::ExifTool::Nikon::FlashInfo0300 = (
|
|
8339
10003
|
%binaryDataAttrs,
|
|
@@ -8357,7 +10021,7 @@ my %nikonFocalConversions = (
|
|
|
8357
10021
|
SeparateTable => 'FlashFirmware',
|
|
8358
10022
|
PrintConv => \%flashFirmware,
|
|
8359
10023
|
},
|
|
8360
|
-
|
|
10024
|
+
10 => {
|
|
8361
10025
|
Name => 'FlashCompensation',
|
|
8362
10026
|
# this is the compensation from the camera (0x0012) for "Built-in" FlashType, or
|
|
8363
10027
|
# the compensation from the external unit (0x0017) for "Optional" FlashType - PH
|
|
@@ -8492,6 +10156,25 @@ my %nikonFocalConversions = (
|
|
|
8492
10156
|
},
|
|
8493
10157
|
);
|
|
8494
10158
|
|
|
10159
|
+
# MakerNotes0x51 - compression info for Z9
|
|
10160
|
+
%Image::ExifTool::Nikon::MakerNotes0x51 = (
|
|
10161
|
+
%binaryDataAttrs,
|
|
10162
|
+
DATAMEMBER => [ 0 ],
|
|
10163
|
+
GROUPS => { 0 => 'MakerNotes' },
|
|
10164
|
+
0 => {
|
|
10165
|
+
Name => 'FirmwareVersion',
|
|
10166
|
+
Format => 'string[8]',
|
|
10167
|
+
Writable => 0,
|
|
10168
|
+
RawConv => '$$self{FirmwareVersion} = $val',
|
|
10169
|
+
},
|
|
10170
|
+
10 => {
|
|
10171
|
+
Name => 'NEFCompression',
|
|
10172
|
+
Writable => 'int16u',
|
|
10173
|
+
SeparateTable => 'NEFCompression',
|
|
10174
|
+
PrintConv => \%nefCompression,
|
|
10175
|
+
},
|
|
10176
|
+
);
|
|
10177
|
+
|
|
8495
10178
|
# extra info found in IFD0 of NEF files (ref PH, Z6/Z7)
|
|
8496
10179
|
%Image::ExifTool::Nikon::NEFInfo = (
|
|
8497
10180
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
@@ -9266,7 +10949,7 @@ my %nikonFocalConversions = (
|
|
|
9266
10949
|
},
|
|
9267
10950
|
},
|
|
9268
10951
|
{
|
|
9269
|
-
Condition => '$$valPt =~ /^080[
|
|
10952
|
+
Condition => '$$valPt =~ /^080[012]/', # Z6/Z7/Z9
|
|
9270
10953
|
Name => 'LensData0800',
|
|
9271
10954
|
SubDirectory => {
|
|
9272
10955
|
TagTable => 'Image::ExifTool::Nikon::LensData0800',
|
|
@@ -9351,6 +11034,103 @@ my %nikonFocalConversions = (
|
|
|
9351
11034
|
},
|
|
9352
11035
|
);
|
|
9353
11036
|
|
|
11037
|
+
# Nikon XMP tags written in NKSC metadata
|
|
11038
|
+
%Image::ExifTool::Nikon::ast = (
|
|
11039
|
+
GROUPS => { 0 => 'XMP', 1 => 'XMP-ast', 2 => 'Image' },
|
|
11040
|
+
PROCESS_PROC => \&Image::ExifTool::XMP::ProcessXMP,
|
|
11041
|
+
NAMESPACE => 'ast',
|
|
11042
|
+
VARS => { NO_ID => 1 },
|
|
11043
|
+
NOTES => 'Tags used by Nikon NX Studio in Nikon NKSC sidecar files and trailers.',
|
|
11044
|
+
about => { },
|
|
11045
|
+
version => { },
|
|
11046
|
+
XMLPackets => {
|
|
11047
|
+
SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main' },
|
|
11048
|
+
Encoding => 'Base64',
|
|
11049
|
+
Binary => 1,
|
|
11050
|
+
},
|
|
11051
|
+
IPTC => {
|
|
11052
|
+
SubDirectory => { TagTable => 'Image::ExifTool::IPTC::Main' },
|
|
11053
|
+
Encoding => 'Base64',
|
|
11054
|
+
Binary => 1,
|
|
11055
|
+
},
|
|
11056
|
+
GPSVersionID => { Groups => { 2 => 'Location' }, %base64bytes },
|
|
11057
|
+
GPSLatitudeRef => {
|
|
11058
|
+
Groups => { 2 => 'Location' },
|
|
11059
|
+
%base64int32u,
|
|
11060
|
+
PrintConv => { 0 => 'North', 1 => 'South' }, #PH (NC)
|
|
11061
|
+
},
|
|
11062
|
+
GPSLatitude => { Groups => { 2 => 'Location' }, %base64coord },
|
|
11063
|
+
GPSLongitudeRef => {
|
|
11064
|
+
Groups => { 2 => 'Location' },
|
|
11065
|
+
%base64int32u,
|
|
11066
|
+
PrintConv => { 2 => 'East', 3 => 'West' }, #PH (NC)
|
|
11067
|
+
},
|
|
11068
|
+
GPSLongitude => { Groups => { 2 => 'Location' }, %base64coord },
|
|
11069
|
+
GPSAltitudeRef => {
|
|
11070
|
+
Groups => { 2 => 'Location' },
|
|
11071
|
+
%base64bytes,
|
|
11072
|
+
PrintConv => {
|
|
11073
|
+
0 => 'Above Sea Level',
|
|
11074
|
+
1 => 'Below Sea Level',
|
|
11075
|
+
},
|
|
11076
|
+
},
|
|
11077
|
+
GPSAltitude => {
|
|
11078
|
+
Groups => { 2 => 'Location' },
|
|
11079
|
+
%base64double,
|
|
11080
|
+
PrintConv => '"$val m"',
|
|
11081
|
+
},
|
|
11082
|
+
GPSMapDatum => { Groups => { 2 => 'Location' } },
|
|
11083
|
+
GPSImgDirection => {
|
|
11084
|
+
Groups => { 2 => 'Location' },
|
|
11085
|
+
%base64double,
|
|
11086
|
+
PrintConv => 'sprintf("%.2f", $val)',
|
|
11087
|
+
},
|
|
11088
|
+
GPSImgDirectionRef => {
|
|
11089
|
+
Groups => { 2 => 'Location' },
|
|
11090
|
+
PrintConv => {
|
|
11091
|
+
M => 'Magnetic North',
|
|
11092
|
+
T => 'True North',
|
|
11093
|
+
},
|
|
11094
|
+
},
|
|
11095
|
+
);
|
|
11096
|
+
%Image::ExifTool::Nikon::sdc = (
|
|
11097
|
+
GROUPS => { 0 => 'XMP', 1 => 'XMP-sdc', 2 => 'Image' },
|
|
11098
|
+
PROCESS_PROC => \&Image::ExifTool::XMP::ProcessXMP,
|
|
11099
|
+
NAMESPACE => 'sdc',
|
|
11100
|
+
VARS => { NO_ID => 1 },
|
|
11101
|
+
about => { },
|
|
11102
|
+
version => { },
|
|
11103
|
+
appversion => { Name => 'AppVersion' },
|
|
11104
|
+
appname => { Name => 'AppName' },
|
|
11105
|
+
);
|
|
11106
|
+
%Image::ExifTool::Nikon::nine = (
|
|
11107
|
+
GROUPS => { 0 => 'XMP', 1 => 'XMP-nine', 2 => 'Image' },
|
|
11108
|
+
PROCESS_PROC => \&Image::ExifTool::XMP::ProcessXMP,
|
|
11109
|
+
NAMESPACE => 'nine',
|
|
11110
|
+
VARS => { NO_ID => 1 },
|
|
11111
|
+
about => { },
|
|
11112
|
+
version => { },
|
|
11113
|
+
Label => { },
|
|
11114
|
+
Rating => { },
|
|
11115
|
+
Trim => { %base64bin },
|
|
11116
|
+
NineEdits => {
|
|
11117
|
+
SubDirectory => {
|
|
11118
|
+
TagTable => 'Image::ExifTool::Nikon::NineEdits',
|
|
11119
|
+
IgnoreProp => { userData => 1 }, # remove "UserData" from already overly long tag names
|
|
11120
|
+
},
|
|
11121
|
+
Binary => 1,
|
|
11122
|
+
},
|
|
11123
|
+
);
|
|
11124
|
+
%Image::ExifTool::Nikon::NineEdits = (
|
|
11125
|
+
GROUPS => { 0 => 'XML', 1 => 'NineEdits', 2 => 'Image' },
|
|
11126
|
+
PROCESS_PROC => \&Image::ExifTool::XMP::ProcessXMP,
|
|
11127
|
+
VARS => { NO_ID => 1 },
|
|
11128
|
+
NOTES => 'XML-based tags used to store editing information.',
|
|
11129
|
+
filterParametersBinary => { %base64bin },
|
|
11130
|
+
filterParametersExportExportData => { %base64bin },
|
|
11131
|
+
filterParametersCustomCustomData => { %base64bin },
|
|
11132
|
+
);
|
|
11133
|
+
|
|
9354
11134
|
# Nikon composite tags
|
|
9355
11135
|
%Image::ExifTool::Nikon::Composite = (
|
|
9356
11136
|
GROUPS => { 2 => 'Camera' },
|
|
@@ -9542,7 +11322,7 @@ sub PrintAFPointsLeftRight($$)
|
|
|
9542
11322
|
|
|
9543
11323
|
#------------------------------------------------------------------------------
|
|
9544
11324
|
# Print conversion for relative Up/Down AF points (ref 28)
|
|
9545
|
-
# Inputs: 0)
|
|
11325
|
+
# Inputs: 0) row, 1) number of rows
|
|
9546
11326
|
# Returns: AF point data as a string (e.g. '2U' or 'C' or '3D')
|
|
9547
11327
|
sub PrintAFPointsUpDown($$)
|
|
9548
11328
|
{
|
|
@@ -9744,6 +11524,72 @@ sub SerialKey($$)
|
|
|
9744
11524
|
return 0x60; # D200 (ref 10), D40X (ref PH), etc
|
|
9745
11525
|
}
|
|
9746
11526
|
|
|
11527
|
+
#------------------------------------------------------------------------------
|
|
11528
|
+
# Extract information from "NIKON APP" trailer (ref PH)
|
|
11529
|
+
# Inputs: 0) ExifTool ref, 1) Optional dirInfo ref for returning trailer info
|
|
11530
|
+
# Returns: true on success
|
|
11531
|
+
sub ProcessNikonApp($;$)
|
|
11532
|
+
{
|
|
11533
|
+
local $_;
|
|
11534
|
+
my ($et, $dirInfo) = @_;
|
|
11535
|
+
my $raf = $$et{RAF};
|
|
11536
|
+
my $offset = $dirInfo ? $$dirInfo{Offset} || 0 : 0;
|
|
11537
|
+
my $buff;
|
|
11538
|
+
|
|
11539
|
+
return 0 unless $raf->Seek(-20-$offset, 2) and $raf->Read($buff, 20) == 20 and
|
|
11540
|
+
substr($buff,-16) eq "\0\0\0\0\0\0/NIKON APP"; # check magic number
|
|
11541
|
+
|
|
11542
|
+
my $verbose = $et->Options('Verbose');
|
|
11543
|
+
my $fileEnd = $raf->Tell();
|
|
11544
|
+
my $trailerLen = unpack('N', $buff);
|
|
11545
|
+
$trailerLen > $fileEnd and $et->Warn('Bad NikonApp trailer size'), return 0;
|
|
11546
|
+
if ($dirInfo) {
|
|
11547
|
+
$$dirInfo{DirLen} = $trailerLen if $dirInfo;
|
|
11548
|
+
$$dirInfo{DataPos} = $fileEnd - $trailerLen;
|
|
11549
|
+
if ($$dirInfo{OutFile}) {
|
|
11550
|
+
if ($$et{DEL_GROUP}{NikonApp}) {
|
|
11551
|
+
++$$et{CHANGED};
|
|
11552
|
+
# just copy the trailer when writing
|
|
11553
|
+
} elsif ($trailerLen > $fileEnd or not $raf->Seek($$dirInfo{DataPos}, 0) or
|
|
11554
|
+
$raf->Read(${$$dirInfo{OutFile}}, $trailerLen) != $trailerLen)
|
|
11555
|
+
{
|
|
11556
|
+
return 0;
|
|
11557
|
+
} else {
|
|
11558
|
+
return 1;
|
|
11559
|
+
}
|
|
11560
|
+
}
|
|
11561
|
+
$et->DumpTrailer($dirInfo) if $verbose or $$et{HTML_DUMP};
|
|
11562
|
+
}
|
|
11563
|
+
unless ($trailerLen >= 0x40 and $raf->Seek($fileEnd - $trailerLen, 0) and
|
|
11564
|
+
$raf->Read($buff, 0x40) == 0x40 and $buff =~ m(NIKON APP\0))
|
|
11565
|
+
{
|
|
11566
|
+
$et->Warn('Error reading NikonApp trailer');
|
|
11567
|
+
return 0;
|
|
11568
|
+
}
|
|
11569
|
+
$$et{SET_GROUP0} = 'NikonApp';
|
|
11570
|
+
while ($raf->Read($buff, 8) == 8) {
|
|
11571
|
+
my ($id, $len) = unpack('N2', $buff);
|
|
11572
|
+
if ($len & 0x80000000) {
|
|
11573
|
+
$et->Warn('Invalid NikonApp record length');
|
|
11574
|
+
last;
|
|
11575
|
+
}
|
|
11576
|
+
last if $id == 0 and $len == 0;
|
|
11577
|
+
unless ($raf->Read($buff, $len) == $len) {
|
|
11578
|
+
$et->Warn('Truncated NikonApp record');
|
|
11579
|
+
last;
|
|
11580
|
+
}
|
|
11581
|
+
if ($id == 1) {
|
|
11582
|
+
require Image::ExifTool::XMP;
|
|
11583
|
+
Image::ExifTool::XMP::ProcessXMP($et, { DataPt => \$buff });
|
|
11584
|
+
} else { # (haven't seen any other types of records)
|
|
11585
|
+
$et->Warn("Unknown NikonApp record $id");
|
|
11586
|
+
last;
|
|
11587
|
+
}
|
|
11588
|
+
}
|
|
11589
|
+
delete $$et{SET_GROUP0};
|
|
11590
|
+
return 1;
|
|
11591
|
+
}
|
|
11592
|
+
|
|
9747
11593
|
#------------------------------------------------------------------------------
|
|
9748
11594
|
# Read Nikon NCTG tags in MOV videos
|
|
9749
11595
|
# Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
|
|
@@ -10085,7 +11931,7 @@ Nikon maker notes in EXIF information.
|
|
|
10085
11931
|
|
|
10086
11932
|
=head1 AUTHOR
|
|
10087
11933
|
|
|
10088
|
-
Copyright 2003-
|
|
11934
|
+
Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
|
|
10089
11935
|
|
|
10090
11936
|
This library is free software; you can redistribute it and/or modify it
|
|
10091
11937
|
under the same terms as Perl itself.
|