exiftool_vendored 12.38.0 → 12.39.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/Changes +17 -0
- data/bin/MANIFEST +1 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +45 -45
- data/bin/exiftool +46 -46
- data/bin/lib/File/RandomAccess.pm +1 -1
- data/bin/lib/File/RandomAccess.pod +2 -2
- data/bin/lib/Image/ExifTool/AES.pm +1 -1
- data/bin/lib/Image/ExifTool/AFCP.pm +1 -1
- data/bin/lib/Image/ExifTool/AIFF.pm +1 -1
- data/bin/lib/Image/ExifTool/APE.pm +1 -1
- data/bin/lib/Image/ExifTool/APP12.pm +1 -1
- data/bin/lib/Image/ExifTool/ASF.pm +1 -1
- data/bin/lib/Image/ExifTool/Apple.pm +1 -1
- data/bin/lib/Image/ExifTool/Audible.pm +1 -1
- data/bin/lib/Image/ExifTool/BMP.pm +1 -1
- data/bin/lib/Image/ExifTool/BPG.pm +1 -1
- data/bin/lib/Image/ExifTool/BZZ.pm +1 -1
- data/bin/lib/Image/ExifTool/BigTIFF.pm +1 -1
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +6 -4
- data/bin/lib/Image/ExifTool/CBOR.pm +1 -1
- data/bin/lib/Image/ExifTool/Canon.pm +1 -1
- data/bin/lib/Image/ExifTool/CanonCustom.pm +1 -1
- data/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/CanonVRD.pm +1 -1
- data/bin/lib/Image/ExifTool/CaptureOne.pm +1 -1
- data/bin/lib/Image/ExifTool/Casio.pm +1 -1
- data/bin/lib/Image/ExifTool/Charset.pm +1 -1
- data/bin/lib/Image/ExifTool/DICOM.pm +1 -1
- data/bin/lib/Image/ExifTool/DJI.pm +1 -1
- data/bin/lib/Image/ExifTool/DNG.pm +1 -1
- data/bin/lib/Image/ExifTool/DPX.pm +1 -1
- data/bin/lib/Image/ExifTool/DV.pm +1 -1
- data/bin/lib/Image/ExifTool/DarwinCore.pm +1 -1
- data/bin/lib/Image/ExifTool/DjVu.pm +1 -1
- data/bin/lib/Image/ExifTool/EXE.pm +1 -1
- data/bin/lib/Image/ExifTool/Exif.pm +9 -1
- data/bin/lib/Image/ExifTool/FITS.pm +1 -1
- data/bin/lib/Image/ExifTool/FLAC.pm +1 -1
- data/bin/lib/Image/ExifTool/FLIF.pm +1 -1
- data/bin/lib/Image/ExifTool/FLIR.pm +16 -4
- data/bin/lib/Image/ExifTool/Fixup.pm +1 -1
- data/bin/lib/Image/ExifTool/Flash.pm +1 -1
- data/bin/lib/Image/ExifTool/FlashPix.pm +1 -1
- data/bin/lib/Image/ExifTool/Font.pm +1 -1
- data/bin/lib/Image/ExifTool/FotoStation.pm +1 -1
- data/bin/lib/Image/ExifTool/FujiFilm.pm +1 -1
- data/bin/lib/Image/ExifTool/GE.pm +1 -1
- data/bin/lib/Image/ExifTool/GIF.pm +1 -1
- data/bin/lib/Image/ExifTool/GIMP.pm +1 -1
- data/bin/lib/Image/ExifTool/GPS.pm +1 -1
- data/bin/lib/Image/ExifTool/GeoTiff.pm +1 -1
- data/bin/lib/Image/ExifTool/Geotag.pm +1 -1
- data/bin/lib/Image/ExifTool/GoPro.pm +1 -1
- data/bin/lib/Image/ExifTool/H264.pm +1 -1
- data/bin/lib/Image/ExifTool/HP.pm +1 -1
- data/bin/lib/Image/ExifTool/HTML.pm +1 -1
- data/bin/lib/Image/ExifTool/HtmlDump.pm +1 -1
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +1 -1
- data/bin/lib/Image/ExifTool/ID3.pm +1 -1
- data/bin/lib/Image/ExifTool/IPTC.pm +1 -1
- data/bin/lib/Image/ExifTool/ISO.pm +1 -1
- data/bin/lib/Image/ExifTool/ITC.pm +1 -1
- data/bin/lib/Image/ExifTool/Import.pm +1 -1
- data/bin/lib/Image/ExifTool/InDesign.pm +1 -1
- data/bin/lib/Image/ExifTool/JPEG.pm +6 -2
- data/bin/lib/Image/ExifTool/JPEGDigest.pm +1 -1
- data/bin/lib/Image/ExifTool/JSON.pm +1 -1
- data/bin/lib/Image/ExifTool/JVC.pm +1 -1
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +1 -1
- data/bin/lib/Image/ExifTool/Kodak.pm +1 -1
- data/bin/lib/Image/ExifTool/KyoceraRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/LIF.pm +1 -1
- data/bin/lib/Image/ExifTool/LNK.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/cs.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/de.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/en_ca.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/en_gb.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/fi.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/fr.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/it.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/ja.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/ko.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/nl.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/pl.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/ru.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/sv.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/tr.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/zh_cn.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/zh_tw.pm +1 -1
- data/bin/lib/Image/ExifTool/Leaf.pm +1 -1
- data/bin/lib/Image/ExifTool/Lytro.pm +1 -1
- data/bin/lib/Image/ExifTool/M2TS.pm +1 -1
- data/bin/lib/Image/ExifTool/MIE.pm +1 -1
- data/bin/lib/Image/ExifTool/MIEUnits.pod +1 -1
- data/bin/lib/Image/ExifTool/MIFF.pm +1 -1
- data/bin/lib/Image/ExifTool/MNG.pm +1 -1
- data/bin/lib/Image/ExifTool/MOI.pm +1 -1
- data/bin/lib/Image/ExifTool/MPC.pm +1 -1
- data/bin/lib/Image/ExifTool/MPEG.pm +1 -1
- data/bin/lib/Image/ExifTool/MPF.pm +1 -1
- data/bin/lib/Image/ExifTool/MRC.pm +1 -1
- data/bin/lib/Image/ExifTool/MWG.pm +1 -1
- data/bin/lib/Image/ExifTool/MXF.pm +1 -1
- data/bin/lib/Image/ExifTool/MacOS.pm +1 -1
- data/bin/lib/Image/ExifTool/MakerNotes.pm +1 -1
- data/bin/lib/Image/ExifTool/Matroska.pm +9 -5
- data/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
- data/bin/lib/Image/ExifTool/Minolta.pm +1 -1
- data/bin/lib/Image/ExifTool/MinoltaRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/Motorola.pm +1 -1
- data/bin/lib/Image/ExifTool/Nikon.pm +897 -184
- data/bin/lib/Image/ExifTool/NikonCapture.pm +1 -1
- data/bin/lib/Image/ExifTool/NikonCustom.pm +519 -6
- data/bin/lib/Image/ExifTool/NikonSettings.pm +17 -18
- data/bin/lib/Image/ExifTool/Nintendo.pm +1 -1
- data/bin/lib/Image/ExifTool/OOXML.pm +1 -1
- data/bin/lib/Image/ExifTool/Ogg.pm +1 -1
- data/bin/lib/Image/ExifTool/Olympus.pm +1 -1
- data/bin/lib/Image/ExifTool/OpenEXR.pm +1 -1
- data/bin/lib/Image/ExifTool/Opus.pm +1 -1
- data/bin/lib/Image/ExifTool/Other.pm +1 -1
- data/bin/lib/Image/ExifTool/PCX.pm +1 -1
- data/bin/lib/Image/ExifTool/PDF.pm +1 -1
- data/bin/lib/Image/ExifTool/PGF.pm +1 -1
- data/bin/lib/Image/ExifTool/PICT.pm +1 -1
- data/bin/lib/Image/ExifTool/PLIST.pm +1 -1
- data/bin/lib/Image/ExifTool/PLUS.pm +1 -1
- data/bin/lib/Image/ExifTool/PNG.pm +28 -8
- data/bin/lib/Image/ExifTool/PPM.pm +1 -1
- data/bin/lib/Image/ExifTool/PSP.pm +1 -1
- data/bin/lib/Image/ExifTool/Palm.pm +1 -1
- data/bin/lib/Image/ExifTool/Panasonic.pm +1 -1
- data/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/Parrot.pm +1 -1
- data/bin/lib/Image/ExifTool/Pentax.pm +3 -2
- data/bin/lib/Image/ExifTool/PhaseOne.pm +1 -1
- data/bin/lib/Image/ExifTool/PhotoCD.pm +1 -1
- data/bin/lib/Image/ExifTool/PhotoMechanic.pm +1 -1
- data/bin/lib/Image/ExifTool/Photoshop.pm +1 -1
- data/bin/lib/Image/ExifTool/PostScript.pm +1 -1
- data/bin/lib/Image/ExifTool/PrintIM.pm +1 -1
- data/bin/lib/Image/ExifTool/Qualcomm.pm +1 -1
- data/bin/lib/Image/ExifTool/QuickTime.pm +1 -1
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +14 -3
- data/bin/lib/Image/ExifTool/RIFF.pm +1 -1
- data/bin/lib/Image/ExifTool/RSRC.pm +1 -1
- data/bin/lib/Image/ExifTool/RTF.pm +1 -1
- data/bin/lib/Image/ExifTool/Radiance.pm +1 -1
- data/bin/lib/Image/ExifTool/Rawzor.pm +1 -1
- data/bin/lib/Image/ExifTool/Real.pm +1 -1
- data/bin/lib/Image/ExifTool/Reconyx.pm +1 -1
- data/bin/lib/Image/ExifTool/Red.pm +1 -1
- data/bin/lib/Image/ExifTool/Ricoh.pm +1 -1
- data/bin/lib/Image/ExifTool/Samsung.pm +1 -1
- data/bin/lib/Image/ExifTool/Sanyo.pm +1 -1
- data/bin/lib/Image/ExifTool/Scalado.pm +1 -1
- data/bin/lib/Image/ExifTool/Shift.pl +3 -1
- data/bin/lib/Image/ExifTool/Shortcuts.pm +1 -1
- data/bin/lib/Image/ExifTool/Sigma.pm +1 -1
- data/bin/lib/Image/ExifTool/SigmaRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/Sony.pm +1 -1
- data/bin/lib/Image/ExifTool/SonyIDC.pm +1 -1
- data/bin/lib/Image/ExifTool/Stim.pm +1 -1
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +2 -2
- data/bin/lib/Image/ExifTool/TagLookup.pm +4560 -4474
- data/bin/lib/Image/ExifTool/TagNames.pod +320 -21
- data/bin/lib/Image/ExifTool/Text.pm +1 -1
- data/bin/lib/Image/ExifTool/Theora.pm +1 -1
- data/bin/lib/Image/ExifTool/Torrent.pm +1 -1
- data/bin/lib/Image/ExifTool/Unknown.pm +1 -1
- data/bin/lib/Image/ExifTool/VCard.pm +1 -1
- data/bin/lib/Image/ExifTool/Validate.pm +1 -1
- data/bin/lib/Image/ExifTool/Vorbis.pm +1 -1
- data/bin/lib/Image/ExifTool/WTV.pm +1 -1
- data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
- data/bin/lib/Image/ExifTool/WritePDF.pl +1 -1
- data/bin/lib/Image/ExifTool/WritePNG.pl +30 -10
- data/bin/lib/Image/ExifTool/WritePhotoshop.pl +1 -1
- data/bin/lib/Image/ExifTool/WritePostScript.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +2 -1
- data/bin/lib/Image/ExifTool/WriteXMP.pl +1 -1
- data/bin/lib/Image/ExifTool/Writer.pl +6 -5
- data/bin/lib/Image/ExifTool/XMP.pm +40 -22
- data/bin/lib/Image/ExifTool/XMP2.pl +3 -2
- data/bin/lib/Image/ExifTool/XMPStruct.pl +1 -1
- data/bin/lib/Image/ExifTool/ZIP.pm +10 -2
- data/bin/lib/Image/ExifTool/ZISRAW.pm +1 -1
- data/bin/lib/Image/ExifTool/iWork.pm +1 -1
- data/bin/lib/Image/ExifTool.pm +11 -3
- data/bin/lib/Image/ExifTool.pod +64 -63
- data/bin/perl-Image-ExifTool.spec +43 -43
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
@@ -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.04';
|
66
67
|
|
67
68
|
sub LensIDConv($$$);
|
68
69
|
sub ProcessNikonAVI($$$);
|
@@ -508,6 +509,7 @@ sub GetAFPointGrid($$;$);
|
|
508
509
|
'77 44 60 98 34 3C 7B 0E' => 'Sigma 80-400mm F4.5-5.6 APO DG D OS',
|
509
510
|
'48 48 68 8E 30 30 4B 02' => 'Sigma APO 100-300mm F4 EX IF HSM',
|
510
511
|
'F3 48 68 8E 30 30 4B 02' => 'Sigma APO 100-300mm F4 EX IF HSM',
|
512
|
+
'26 45 68 8E 34 42 1C 02' => 'Sigma 100-300mm F4.5-6.7 DL', #30
|
511
513
|
'48 54 6F 8E 24 24 4B 02' => 'Sigma APO 120-300mm F2.8 EX DG HSM',
|
512
514
|
'7A 54 6E 8E 24 24 4B 02' => 'Sigma APO 120-300mm F2.8 EX DG HSM',
|
513
515
|
'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
|
@@ -702,6 +704,7 @@ sub GetAFPointGrid($$;$);
|
|
702
704
|
#
|
703
705
|
'9A 4C 50 50 14 14 9C 06' => 'Yongnuo YN50mm F1.8N',
|
704
706
|
'9F 48 48 48 24 24 A1 06' => 'Yongnuo YN40mm F2.8N', #30
|
707
|
+
'9F 54 68 68 18 18 A2 06' => 'Yongnuo YN100mm F2N', #30
|
705
708
|
#
|
706
709
|
'02 40 44 5C 2C 34 02 00' => 'Exakta AF 35-70mm 1:3.5-4.5 MC',
|
707
710
|
#
|
@@ -754,6 +757,7 @@ my %flashFirmware = (
|
|
754
757
|
'5 2' => '5.02 (SB-900)',
|
755
758
|
'6 1' => '6.01 (SB-700)', #https://exiftool.org/forum/index.php/topic,5034.0.html
|
756
759
|
'7 1' => '7.01 (SB-910)', #PH
|
760
|
+
'14 3' => '14.03 (SB-5000)', #28
|
757
761
|
OTHER => sub {
|
758
762
|
my ($val, $inv) = @_;
|
759
763
|
return sprintf('%d.%.2d (Unknown model)', split(' ', $val)) unless $inv;
|
@@ -810,6 +814,124 @@ my %flashControlMode = (
|
|
810
814
|
0x07 => 'Repeating Flash',
|
811
815
|
);
|
812
816
|
|
817
|
+
my %activeDLightingZ7 = (
|
818
|
+
0 => 'Off',
|
819
|
+
2 => 'Low',
|
820
|
+
3 => 'Normal',
|
821
|
+
4 => 'High',
|
822
|
+
5 => 'Extra High',
|
823
|
+
);
|
824
|
+
|
825
|
+
my %flashControlModeZ7 = (
|
826
|
+
0 => 'TTL',
|
827
|
+
1 => 'Auto External Flash',
|
828
|
+
2 => 'GN (distance priority)',
|
829
|
+
3 => 'Manual',
|
830
|
+
4 => 'Repeating Flash',
|
831
|
+
);
|
832
|
+
|
833
|
+
my %flashRemoteControlZ7 = (
|
834
|
+
0 => 'Group',
|
835
|
+
1 => 'Quick Wireless',
|
836
|
+
2 => 'Remote Repeating',
|
837
|
+
);
|
838
|
+
|
839
|
+
my %flashWirelessOptionZ7 = (
|
840
|
+
0 => 'Off',
|
841
|
+
1 => 'Optical AWL',
|
842
|
+
2 => 'Optical/Radio AWL',
|
843
|
+
3 => 'Radio AWL',
|
844
|
+
);
|
845
|
+
|
846
|
+
my %focusModeZ7 = (
|
847
|
+
0 => 'Manual',
|
848
|
+
1 => 'AF-S',
|
849
|
+
2 => 'AF-C',
|
850
|
+
4 => 'AF-F', # full frame
|
851
|
+
);
|
852
|
+
|
853
|
+
my %infoZSeries = (
|
854
|
+
Condition => '$$self{Model} =~ /^NIKON Z (5|50|6|6_2|7|7_2|fc|9)\b/i',
|
855
|
+
Notes => 'Z Series cameras thru Decemeber 2021',
|
856
|
+
);
|
857
|
+
my %iSOAutoHiLimitZ7 = (
|
858
|
+
0 => 'ISO 64',
|
859
|
+
1 => 'ISO 80',
|
860
|
+
2 => 'ISO 100',
|
861
|
+
3 => 'ISO 125',
|
862
|
+
4 => 'ISO 160',
|
863
|
+
5 => 'ISO 200',
|
864
|
+
6 => 'ISO 250',
|
865
|
+
7 => 'ISO 320',
|
866
|
+
8 => 'ISO 400',
|
867
|
+
9 => 'ISO 500',
|
868
|
+
10 => 'ISO 640',
|
869
|
+
11 => 'ISO 800',
|
870
|
+
12 => 'ISO 1000',
|
871
|
+
13 => 'ISO 1250',
|
872
|
+
14 => 'ISO 1600',
|
873
|
+
15 => 'ISO 2000',
|
874
|
+
16 => 'ISO 2500',
|
875
|
+
17 => 'ISO 3200',
|
876
|
+
18 => 'ISO 4000',
|
877
|
+
19 => 'ISO 5000',
|
878
|
+
20 => 'ISO 6400',
|
879
|
+
21 => 'ISO 8000',
|
880
|
+
22 => 'ISO 10000',
|
881
|
+
23 => 'ISO 12800',
|
882
|
+
24 => 'ISO 16000',
|
883
|
+
25 => 'ISO 20000',
|
884
|
+
26 => 'ISO 25600',
|
885
|
+
27 => 'ISO Hi 0.3',
|
886
|
+
28 => 'ISO Hi 0.7',
|
887
|
+
29 => 'ISO Hi 1.0',
|
888
|
+
32 => 'ISO Hi 2.0',
|
889
|
+
);
|
890
|
+
|
891
|
+
my %meteringModeZ7 = (
|
892
|
+
0 => 'Matrix',
|
893
|
+
1 => 'Center',
|
894
|
+
2 => 'Spot',
|
895
|
+
3 => 'Highlight'
|
896
|
+
);
|
897
|
+
|
898
|
+
my %movieFrameRateZ7 = (
|
899
|
+
0 => '120p',
|
900
|
+
1 => '100p',
|
901
|
+
2 => '60p',
|
902
|
+
3 => '50p',
|
903
|
+
4 => '30p',
|
904
|
+
5 => '25p',
|
905
|
+
6 => '24p',
|
906
|
+
);
|
907
|
+
|
908
|
+
my %offLowNormalHighZ7 = (
|
909
|
+
0 => 'Off',
|
910
|
+
1 => 'Low',
|
911
|
+
2 => 'Normal',
|
912
|
+
3 => 'High',
|
913
|
+
);
|
914
|
+
|
915
|
+
my %movieFrameSizeZ9 = (
|
916
|
+
1 => '1920x1080',
|
917
|
+
2 => '3840x2160',
|
918
|
+
3 => '7680x4320',
|
919
|
+
);
|
920
|
+
|
921
|
+
my %subjectDetectionZ9 = (
|
922
|
+
0 => 'Off',
|
923
|
+
1 => 'Auto',
|
924
|
+
2 => 'People',
|
925
|
+
3 => 'Animals',
|
926
|
+
4 => 'Vehicles',
|
927
|
+
);
|
928
|
+
|
929
|
+
my %vRModeZ9 = (
|
930
|
+
0 => 'Off',
|
931
|
+
1 => 'Normal',
|
932
|
+
2 => 'Sport',
|
933
|
+
);
|
934
|
+
|
813
935
|
my %retouchValues = ( #PH
|
814
936
|
0 => 'None',
|
815
937
|
3 => 'B & W',
|
@@ -1095,6 +1217,20 @@ my %binaryDataAttrs = (
|
|
1095
1217
|
FIRST_ENTRY => 0,
|
1096
1218
|
);
|
1097
1219
|
|
1220
|
+
my %base64bin = ( ValueConv => 'Image::ExifTool::XMP::DecodeBase64($val)' );
|
1221
|
+
my %base64int32u = ( ValueConv => 'my $val=Image::ExifTool::XMP::DecodeBase64($val); unpack("V",$$val)' );
|
1222
|
+
my %base64bytes = ( ValueConv => 'my $val=Image::ExifTool::XMP::DecodeBase64($val); join(".",unpack("C*",$$val))' );
|
1223
|
+
my %base64coord = (
|
1224
|
+
ValueConv => q{
|
1225
|
+
my $val=Image::ExifTool::XMP::DecodeBase64($val);
|
1226
|
+
my $saveOrder = GetByteOrder();
|
1227
|
+
SetByteOrder('II');
|
1228
|
+
$val = GetDouble($val,0) + GetDouble($val,8)/60 + GetDouble($val,16)/3600;
|
1229
|
+
SetByteOrder($saveOrder);
|
1230
|
+
return $val;
|
1231
|
+
},
|
1232
|
+
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1)',
|
1233
|
+
);
|
1098
1234
|
# Nikon maker note tags
|
1099
1235
|
%Image::ExifTool::Nikon::Main = (
|
1100
1236
|
PROCESS_PROC => \&Image::ExifTool::Nikon::ProcessNikon,
|
@@ -1912,14 +2048,15 @@ my %binaryDataAttrs = (
|
|
1912
2048
|
ByteOrder => 'BigEndian',
|
1913
2049
|
},
|
1914
2050
|
},
|
1915
|
-
{ # (Z6_2 firmware version 1.00 and
|
2051
|
+
{ # (Z6_2 firmware version 1.00 and Z7II firmware versions 1.00 & 1.01, ref 28)
|
1916
2052
|
# 0800=Z6/Z7 0801=Z50 0802=Z5 0803=Z6II/Z7II 0804=Zfc
|
1917
2053
|
Condition => '$$valPt =~ /^080[01234]/',
|
1918
|
-
Name => '
|
2054
|
+
Name => 'ShotInfoZ7II',
|
1919
2055
|
SubDirectory => {
|
1920
|
-
TagTable => 'Image::ExifTool::Nikon::
|
2056
|
+
TagTable => 'Image::ExifTool::Nikon::ShotInfoZ7II',
|
1921
2057
|
DecryptStart => 4,
|
1922
|
-
|
2058
|
+
# TODO: eventually set the length dynamically according to actual offsets!
|
2059
|
+
DecryptLen => 0xd04e + 860, # thru decoded MenuSettingsZ7II
|
1923
2060
|
ByteOrder => 'LittleEndian',
|
1924
2061
|
},
|
1925
2062
|
},
|
@@ -1929,11 +2066,12 @@ my %binaryDataAttrs = (
|
|
1929
2066
|
SubDirectory => {
|
1930
2067
|
TagTable => 'Image::ExifTool::Nikon::ShotInfoZ9',
|
1931
2068
|
DecryptStart => 4,
|
1932
|
-
|
2069
|
+
# TODO: eventually set the length dynamically according to actual offsets!
|
2070
|
+
DecryptLen => 0xec4b + 1646, # decoded thru end of CustomSettingZ9 in Offset26 (+MenuSettingsZ9Offset)
|
1933
2071
|
ByteOrder => 'LittleEndian',
|
1934
2072
|
},
|
1935
2073
|
},
|
1936
|
-
{ # D7100=0227
|
2074
|
+
{ # D7100=0227
|
1937
2075
|
Condition => '$$valPt =~ /^0[28]/',
|
1938
2076
|
Name => 'ShotInfo02xx',
|
1939
2077
|
SubDirectory => {
|
@@ -2164,7 +2302,7 @@ my %binaryDataAttrs = (
|
|
2164
2302
|
},
|
2165
2303
|
},
|
2166
2304
|
{
|
2167
|
-
Condition => '$$valPt =~ /^080[
|
2305
|
+
Condition => '$$valPt =~ /^080[012]/', # Z6/Z7/Z9
|
2168
2306
|
Name => 'LensData0800',
|
2169
2307
|
SubDirectory => {
|
2170
2308
|
TagTable => 'Image::ExifTool::Nikon::LensData0800',
|
@@ -2299,8 +2437,8 @@ my %binaryDataAttrs = (
|
|
2299
2437
|
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::FlashInfo0107' },
|
2300
2438
|
},
|
2301
2439
|
{
|
2302
|
-
Name => 'FlashInfo0300', # (
|
2303
|
-
Condition => '$$valPt =~ /^
|
2440
|
+
Name => 'FlashInfo0300', # (Z7II)
|
2441
|
+
Condition => '$$valPt =~ /^030[01]/',
|
2304
2442
|
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::FlashInfo0300' },
|
2305
2443
|
},
|
2306
2444
|
{
|
@@ -2373,11 +2511,15 @@ my %binaryDataAttrs = (
|
|
2373
2511
|
PrintConv => '$self->ConvertDateTime($val)',
|
2374
2512
|
PrintConvInv => '$self->InverseDateTime($val,0)',
|
2375
2513
|
},
|
2376
|
-
0x00b7 => {
|
2514
|
+
0x00b7 => [{
|
2515
|
+
Name => 'AFInfo2',
|
2516
|
+
Condition => '$$self{Model} =~ /^NIKON Z 9\b/i', #AFInfo2Version 0400
|
2517
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::AFInfo2V0400' },
|
2518
|
+
},{ #JD
|
2377
2519
|
Name => 'AFInfo2',
|
2378
2520
|
# (this structure may be byte swapped when rewritten by CaptureNX)
|
2379
2521
|
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::AFInfo2' },
|
2380
|
-
},
|
2522
|
+
}],
|
2381
2523
|
0x00b8 => [{ #PH
|
2382
2524
|
Name => 'FileInfo',
|
2383
2525
|
# unfortunately, some newer models write this as little-endian
|
@@ -2638,15 +2780,23 @@ my %binaryDataAttrs = (
|
|
2638
2780
|
},
|
2639
2781
|
},
|
2640
2782
|
# 5 - values: 0, 1 (VR On), 2 (VR Off)
|
2641
|
-
6 => {
|
2783
|
+
6 => [{
|
2642
2784
|
Name => 'VRMode',
|
2643
2785
|
PrintConv => {
|
2644
|
-
0 => '
|
2786
|
+
0 => 'Off',
|
2787
|
+
1 => 'Sport',
|
2788
|
+
3 => 'Normal',
|
2789
|
+
},
|
2790
|
+
%infoZSeries
|
2791
|
+
},{
|
2792
|
+
Name => 'VRMode',
|
2793
|
+
PrintConv => {
|
2794
|
+
0 => 'Normal',
|
2645
2795
|
1 => 'On (1)', #PH (NC)
|
2646
2796
|
2 => 'Active', # (1J1)
|
2647
2797
|
3 => 'Sport', #PH (Z7)
|
2648
2798
|
},
|
2649
|
-
},
|
2799
|
+
}],
|
2650
2800
|
# 7 - values: 0, 1
|
2651
2801
|
);
|
2652
2802
|
|
@@ -3480,6 +3630,10 @@ my %binaryDataAttrs = (
|
|
3480
3630
|
201 => 'Wide-area AF', #28 (D6)
|
3481
3631
|
202 => 'Face-priority AF', #28 (D6)
|
3482
3632
|
203 => 'Subject-tracking AF', #28 (D6)
|
3633
|
+
204 => 'Dynamic Area (S)', #28 (Z9)
|
3634
|
+
205 => 'Dynamic Area (M)', #28 (Z9)
|
3635
|
+
206 => 'Dynamic Area (L)', #28 (Z9)
|
3636
|
+
207 => '3D-tracking', #28 (Z9)
|
3483
3637
|
},
|
3484
3638
|
},
|
3485
3639
|
],
|
@@ -4007,6 +4161,47 @@ my %binaryDataAttrs = (
|
|
4007
4161
|
},
|
4008
4162
|
);
|
4009
4163
|
|
4164
|
+
%Image::ExifTool::Nikon::AFInfo2V0400 = ( #V0400 related fields begin at x'3c' ( Z9)
|
4165
|
+
%binaryDataAttrs,
|
4166
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
4167
|
+
DATAMEMBER => [ 0 ],
|
4168
|
+
0 => {
|
4169
|
+
Name => 'AFInfo2Version',
|
4170
|
+
Format => 'undef[4]',
|
4171
|
+
Writable => 0,
|
4172
|
+
RawConv => '$$self{AFInfo2Version} = $val',
|
4173
|
+
},
|
4174
|
+
0x3e => {
|
4175
|
+
Name => 'AFImageWidth',
|
4176
|
+
Format => 'int16u',
|
4177
|
+
},
|
4178
|
+
0x40 => {
|
4179
|
+
Name => 'AFImageHeight',
|
4180
|
+
Format => 'int16u',
|
4181
|
+
},
|
4182
|
+
0x43 => {
|
4183
|
+
Name => 'FocusPositionHoriontal',
|
4184
|
+
PrintConv => sub { my ($val) = @_; PrintAFPointsLeftRight($val, 29 ); }, #493 focus points for Z9 fall in a 30x18 grid (some coordinates are not accessible)
|
4185
|
+
},
|
4186
|
+
0x45 => {
|
4187
|
+
Name => 'FocusPositionVertical',
|
4188
|
+
PrintConv => sub { my ($val) = @_; PrintAFPointsUpDown($val, 17 ); },
|
4189
|
+
},
|
4190
|
+
0x46 => {
|
4191
|
+
Name => 'AFAreaWidth',
|
4192
|
+
Format => 'int16u',
|
4193
|
+
Notes => 'size of AF area in AFImage pixels',
|
4194
|
+
RawConv => '$val ? $val : undef',
|
4195
|
+
},
|
4196
|
+
0x48 => {
|
4197
|
+
Name => 'AFAreaHeight',
|
4198
|
+
Format => 'int16u',
|
4199
|
+
RawConv => '$val ? $val : undef',
|
4200
|
+
}
|
4201
|
+
# 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)
|
4202
|
+
#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).
|
4203
|
+
);
|
4204
|
+
|
4010
4205
|
# Nikon AF fine-tune information (ref 28)
|
4011
4206
|
%Image::ExifTool::Nikon::AFTune = (
|
4012
4207
|
%binaryDataAttrs,
|
@@ -4772,6 +4967,7 @@ my %nikonFocalConversions = (
|
|
4772
4967
|
23 => 'Nikkor Z 14-24mm f/2.8 S', #IB
|
4773
4968
|
24 => 'Nikkor Z MC 105mm f/2.8 VR S', #IB
|
4774
4969
|
27 => 'Nikkor Z MC 50mm f/2.8', #IB
|
4970
|
+
28 => 'Nikkor Z 100-400mm f/4.5-5.6 VR S', #28
|
4775
4971
|
29 => 'Nikkor Z 28mm f/2.8', #IB
|
4776
4972
|
},
|
4777
4973
|
},
|
@@ -7284,9 +7480,7 @@ my %nikonFocalConversions = (
|
|
7284
7480
|
WRITABLE => 1,
|
7285
7481
|
FIRST_ENTRY => 0,
|
7286
7482
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
7287
|
-
NOTES =>
|
7288
|
-
These tags are extracted from encrypted data in images from the D4S.
|
7289
|
-
},
|
7483
|
+
NOTES => 'These tags are extracted from encrypted data in images from the D4S.',
|
7290
7484
|
0x00 => {
|
7291
7485
|
Name => 'ShotInfoVersion',
|
7292
7486
|
Format => 'string[4]',
|
@@ -7585,19 +7779,19 @@ my %nikonFocalConversions = (
|
|
7585
7779
|
# note: DecryptLen currently set to 0x3697
|
7586
7780
|
);
|
7587
7781
|
|
7588
|
-
# shot information for the
|
7589
|
-
%Image::ExifTool::Nikon::
|
7782
|
+
# shot information for the Z7II firmware 1.00 (encrypted) - ref 28
|
7783
|
+
%Image::ExifTool::Nikon::ShotInfoZ7II = (
|
7590
7784
|
PROCESS_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted,
|
7591
7785
|
WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted,
|
7592
7786
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
7593
7787
|
VARS => { ID_LABEL => 'Index' },
|
7594
|
-
DATAMEMBER => [ 0x04,
|
7595
|
-
|
7788
|
+
DATAMEMBER => [ 0x04, 0x30, 0x38, 0x98, 0xa0, 0x75e7, 0x760c,
|
7789
|
+
0x7610, 0x7eff, 0xce31, 0xcea5, 0xceb6, 0xceb7 ],
|
7596
7790
|
IS_SUBDIR => [ 0xceb8 ],
|
7597
7791
|
WRITABLE => 1,
|
7598
7792
|
FIRST_ENTRY => 0,
|
7599
7793
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
7600
|
-
NOTES => 'These tags are extracted from encrypted data in images from the
|
7794
|
+
NOTES => 'These tags are extracted from encrypted data in images from the Z7II.',
|
7601
7795
|
0x00 => {
|
7602
7796
|
Name => 'ShotInfoVersion',
|
7603
7797
|
Format => 'string[4]',
|
@@ -7614,14 +7808,12 @@ my %nikonFocalConversions = (
|
|
7614
7808
|
Name => 'FirmwareVersion2',
|
7615
7809
|
Format => 'string[8]',
|
7616
7810
|
Writable => 0,
|
7617
|
-
RawConv => '$$self{FirmwareVersion2} = $val',
|
7618
7811
|
Hidden => 1,
|
7619
7812
|
},
|
7620
7813
|
0x18 => {
|
7621
7814
|
Name => 'FirmwareVersion3',
|
7622
7815
|
Format => 'string[8]',
|
7623
7816
|
Writable => 0,
|
7624
|
-
RawConv => '$$self{FirmwareVersion3} = $val',
|
7625
7817
|
Hidden => 1,
|
7626
7818
|
},
|
7627
7819
|
0x24 => {
|
@@ -7663,12 +7855,12 @@ my %nikonFocalConversions = (
|
|
7663
7855
|
Hidden => 1,
|
7664
7856
|
RawConv => '$$self{Offset31} = $val || 0x10000000; undef', # (ignore if 0)
|
7665
7857
|
},
|
7666
|
-
### 0x75e8 - Offset3 info start (
|
7858
|
+
### 0x75e8 - Offset3 info start (Z7II firmware 1.30)
|
7667
7859
|
0x75e7 => {
|
7668
7860
|
Name => 'Hook1',
|
7669
7861
|
Hidden => 1,
|
7670
7862
|
RawConv => 'undef',
|
7671
|
-
# account for variable location of
|
7863
|
+
# account for variable location of Offset3 data
|
7672
7864
|
Hook => '$varSize = $$self{Offset3} - 0x75e8',
|
7673
7865
|
},
|
7674
7866
|
0x760c => {
|
@@ -7690,7 +7882,7 @@ my %nikonFocalConversions = (
|
|
7690
7882
|
Format => 'int16u',
|
7691
7883
|
Hidden => 1,
|
7692
7884
|
},
|
7693
|
-
### 0x7f00 - Offset5 info start (
|
7885
|
+
### 0x7f00 - Offset5 info start (Z7II firmware 1.30)
|
7694
7886
|
0x7eff => {
|
7695
7887
|
Name => 'Hook2',
|
7696
7888
|
Hidden => 1,
|
@@ -7714,7 +7906,7 @@ my %nikonFocalConversions = (
|
|
7714
7906
|
return "$color $brightness"
|
7715
7907
|
},
|
7716
7908
|
},
|
7717
|
-
### 0xce32 - OrientationInfo start (
|
7909
|
+
### 0xce32 - OrientationInfo start (Z7II firmware 1.00)
|
7718
7910
|
0xce31 => {
|
7719
7911
|
Name => 'Hook3',
|
7720
7912
|
Hidden => 1,
|
@@ -7757,26 +7949,27 @@ my %nikonFocalConversions = (
|
|
7757
7949
|
# account for variable location of Offset31 data
|
7758
7950
|
Hook => '$varSize = $$self{Offset31} - 0xcea6',
|
7759
7951
|
},
|
7760
|
-
### 0xcea6 - Offset31 info start (
|
7952
|
+
### 0xcea6 - Offset31 info start (Z7II firmware 1.30)
|
7761
7953
|
0xceb6 => {
|
7762
|
-
Name => '
|
7763
|
-
# offset to
|
7764
|
-
RawConv => '$$self{
|
7954
|
+
Name => 'MenuSettingsZ7IIOffset',
|
7955
|
+
# offset to MenuSettingsZ7II is relative to start of Offset31 block
|
7956
|
+
RawConv => '$$self{MenuSettingsZ7IIOffset} = ($val || 0x10000000) + $$self{Offset31}; undef', # (ignore if 0)
|
7765
7957
|
},
|
7766
7958
|
0xceb7 => {
|
7767
7959
|
Name => 'Hook5',
|
7768
7960
|
Hidden => 1,
|
7769
7961
|
RawConv => 'undef',
|
7770
7962
|
# account for variable location of Offset5 data
|
7771
|
-
Hook => '$varSize = $$self{
|
7963
|
+
Hook => '$varSize = $$self{MenuSettingsZ7IIOffset} - 0xceb8',
|
7772
7964
|
},
|
7773
|
-
0xceb8 => {
|
7774
|
-
Name => '
|
7965
|
+
0xceb8 => { # (this is 0xd04e for the Z50)
|
7966
|
+
Name => 'MenuSettingsZ7II',
|
7967
|
+
Format => 'undef[860]',
|
7775
7968
|
SubDirectory => {
|
7776
|
-
TagTable => 'Image::ExifTool::Nikon::
|
7969
|
+
TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ7II',
|
7777
7970
|
},
|
7778
7971
|
}
|
7779
|
-
# note: DecryptLen currently set to
|
7972
|
+
# note: DecryptLen currently set to 0xd04e + 860 (offset for Z50 is 0xd04e)
|
7780
7973
|
);
|
7781
7974
|
|
7782
7975
|
# shot information for the Z9 firmware 1.00 (encrypted) - ref 28
|
@@ -7785,7 +7978,9 @@ my %nikonFocalConversions = (
|
|
7785
7978
|
WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted,
|
7786
7979
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
7787
7980
|
VARS => { ID_LABEL => 'Index' },
|
7788
|
-
DATAMEMBER => [ 0x04,
|
7981
|
+
DATAMEMBER => [ 0x04, 0x30, 0x38, 0x84, 0x8c, 0x6c6f, 0x6c98,
|
7982
|
+
0x6c9a, 0x7717, 0x7844, 0xeaea, 0xeb6f, 0xeb70 ],
|
7983
|
+
IS_SUBDIR => [ 0xec4b ],
|
7789
7984
|
WRITABLE => 1,
|
7790
7985
|
FIRST_ENTRY => 0,
|
7791
7986
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
@@ -7806,14 +8001,12 @@ my %nikonFocalConversions = (
|
|
7806
8001
|
Name => 'FirmwareVersion2',
|
7807
8002
|
Format => 'string[8]',
|
7808
8003
|
Writable => 0,
|
7809
|
-
RawConv => '$$self{FirmwareVersion2} = $val',
|
7810
8004
|
Hidden => 1,
|
7811
8005
|
},
|
7812
8006
|
0x18 => {
|
7813
8007
|
Name => 'FirmwareVersion3',
|
7814
8008
|
Format => 'string[8]',
|
7815
8009
|
Writable => 0,
|
7816
|
-
RawConv => '$$self{FirmwareVersion3} = $val',
|
7817
8010
|
Hidden => 1,
|
7818
8011
|
},
|
7819
8012
|
0x24 => {
|
@@ -7823,23 +8016,90 @@ my %nikonFocalConversions = (
|
|
7823
8016
|
Writable => 0,
|
7824
8017
|
Hidden => 1,
|
7825
8018
|
},
|
8019
|
+
0x30 => {
|
8020
|
+
Name => 'Offset3', #offset3 - length 2528 (Z9 firmware 1.0)
|
8021
|
+
DataMember => 'Offset3',
|
8022
|
+
Format => 'int32u',
|
8023
|
+
Writable => 0,
|
8024
|
+
Hidden => 1,
|
8025
|
+
RawConv => '$$self{Offset3} = $val || 0x10000000; undef', # (ignore if 0)
|
8026
|
+
},
|
8027
|
+
0x38 => {
|
8028
|
+
Name => 'Offset5', #offset5 - length 2488 (Z9 firmware 1.0)
|
8029
|
+
DataMember => 'Offset5',
|
8030
|
+
Format => 'int32u',
|
8031
|
+
Writable => 0,
|
8032
|
+
Hidden => 1,
|
8033
|
+
RawConv => '$$self{Offset5} = $val || 0x10000000; undef', # (ignore if 0)
|
8034
|
+
},
|
7826
8035
|
0x84 => {
|
7827
|
-
Name => 'OrientationOffset', #offset24 - length 108
|
8036
|
+
Name => 'OrientationOffset', #offset24 - length 108 (Z9 firmware 1.0)
|
7828
8037
|
DataMember => 'OrientationOffset',
|
7829
8038
|
Format => 'int32u',
|
7830
8039
|
Writable => 0,
|
7831
8040
|
Hidden => 1,
|
7832
8041
|
RawConv => '$$self{OrientationOffset} = $val || 0x10000000; undef', # (ignore if 0)
|
7833
8042
|
},
|
7834
|
-
|
8043
|
+
0x8c => {
|
8044
|
+
Name => 'Offset26', #offset26 - length 1895 (Z9 firmware 1.0)
|
8045
|
+
DataMember => 'Offset26',
|
8046
|
+
Format => 'int32u',
|
8047
|
+
Writable => 0,
|
8048
|
+
Hidden => 1,
|
8049
|
+
RawConv => '$$self{Offset26} = $val || 0x10000000; undef', # (ignore if 0)
|
8050
|
+
},
|
8051
|
+
### 0x6c70 - Offset3 info start (Z9 firmware 1.00)
|
8052
|
+
0x6c6f => {
|
8053
|
+
Name => 'Offset3Hook',
|
8054
|
+
Hidden => 1,
|
8055
|
+
RawConv => 'undef',
|
8056
|
+
# account for variable location of Offset3 data
|
8057
|
+
Hook => '$varSize = $$self{Offset3} - 0x6c70',
|
8058
|
+
},
|
8059
|
+
0x6c98 => {
|
8060
|
+
Name => 'IntervalShooting',
|
8061
|
+
RawConv => '$$self{IntervalShooting} = $val',
|
8062
|
+
Format => 'int16u',
|
8063
|
+
PrintConv => q{
|
8064
|
+
return 'Off' if $val == 0 ;
|
8065
|
+
my $i = sprintf("Interval %.0f of %.0f",$val, $$self{IntervalShootingIntervals}); # something like "Interval 1 of 3"
|
8066
|
+
my $f = $$self{IntervalShootingShotsPerInterval} > 1 ? sprintf(" Frame %.0f of %.0f",$$self{IntervalFrame}, $$self{IntervalShootingShotsPerInterval}): '' ; # something like "Frame 1 of 3" or blank
|
8067
|
+
return "On: $i$f"
|
8068
|
+
#$val == 0 ? 'Off' : sprintf("On: Interval %.0f of %.0f Frame %.0f of %.0f",$val, $$self{IntervalShootingIntervals}, $$self{IntervalFrame}, $$self{IntervalShootingShotsPerInterval}),
|
8069
|
+
},
|
8070
|
+
},
|
8071
|
+
0x6c9a => {
|
8072
|
+
Name => 'IntervalFrame',
|
8073
|
+
RawConv => '$$self{IntervalFrame} = $val',
|
8074
|
+
Condition => '$$self{IntervalShooting} > 0',
|
8075
|
+
Format => 'int16u',
|
8076
|
+
Hidden => 1,
|
8077
|
+
},
|
8078
|
+
### 0x7718 - Offset5 info start (Z9 firmware 1.00)
|
8079
|
+
0x7717 => {
|
8080
|
+
Name => 'Offsset5Hook',
|
8081
|
+
Hidden => 1,
|
8082
|
+
RawConv => 'undef',
|
8083
|
+
# account for variable location of Offset5 data
|
8084
|
+
Hook => '$varSize = $$self{Offset5} - 0x7718',
|
8085
|
+
},
|
8086
|
+
0x7844 => {
|
8087
|
+
Name => 'FocusShiftShooting',
|
8088
|
+
RawConv => '$$self{FocusShiftShooting} = $val',
|
8089
|
+
PrintConv => q{
|
8090
|
+
return 'Off' if $val == 0 ;
|
8091
|
+
my $i = sprintf("Frame %.0f of %.0f",$val, $$self{FocusShiftNumberShots}); # something like Frame 1 of 100"
|
8092
|
+
return "On: $i"
|
8093
|
+
},
|
8094
|
+
},
|
8095
|
+
### 0xeaeb - OrientationInfo start (Z9 firmware 1.00)
|
7835
8096
|
0xeaea => {
|
7836
|
-
Name => '
|
8097
|
+
Name => 'OrientationHook',
|
7837
8098
|
Hidden => 1,
|
7838
8099
|
RawConv => 'undef',
|
7839
8100
|
# account for variable location of OrientationInfo data
|
7840
8101
|
Hook => '$varSize = $$self{OrientationOffset} - 0xeaeb',
|
7841
8102
|
},
|
7842
|
-
|
7843
8103
|
0xeaeb => {
|
7844
8104
|
Name => 'RollAngle',
|
7845
8105
|
Format => 'fixed32u',
|
@@ -7867,52 +8127,72 @@ my %nikonFocalConversions = (
|
|
7867
8127
|
PrintConv => 'sprintf("%.1f", $val)',
|
7868
8128
|
PrintConvInv => '$val',
|
7869
8129
|
},
|
7870
|
-
|
8130
|
+
### 0xeb5f - Offset26 info start (Z9 firmware 1.00)
|
8131
|
+
0xeb6f => {
|
8132
|
+
Name => 'MenuSettingsZ9Offset',
|
8133
|
+
Writable => 0,
|
8134
|
+
Hidden => 1,
|
8135
|
+
# offset to MenuSettingsZ9 is relative to start of Offset26 block
|
8136
|
+
RawConv => '$$self{MenuSettingsZ9Offset} = ($val || 0x10000000) + $$self{Offset26}; undef', # (ignore if 0)
|
8137
|
+
},
|
8138
|
+
0xeb70 => {
|
8139
|
+
Name => 'Hook5',
|
8140
|
+
Hidden => 1,
|
8141
|
+
RawConv => 'undef',
|
8142
|
+
# account for variable location of menu settings data
|
8143
|
+
Hook => '$varSize = $$self{MenuSettingsZ9Offset} - 0xec4b',
|
8144
|
+
},
|
8145
|
+
0xec4b => {
|
8146
|
+
Name => 'MenuSettingsZ9',
|
8147
|
+
Format => 'undef[1646]',
|
8148
|
+
SubDirectory => {
|
8149
|
+
TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ9',
|
8150
|
+
},
|
8151
|
+
},
|
8152
|
+
# note: DecryptLen currently set to 0xec4b + 1646
|
7871
8153
|
);
|
7872
8154
|
|
7873
|
-
%Image::ExifTool::Nikon::
|
8155
|
+
%Image::ExifTool::Nikon::MenuSettingsZ7II = (
|
7874
8156
|
%binaryDataAttrs,
|
7875
8157
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
7876
|
-
|
7877
|
-
|
7878
|
-
},
|
7879
|
-
DATAMEMBER => [ 0xb0, 0xb4, 0x148, 0x160, 0x35a ],
|
8158
|
+
DATAMEMBER => [ 176, 180, 328, 352, 858 ],
|
8159
|
+
NOTES => 'These tags are used by the Z5, Z6, Z7, Z6II, Z7II, Z50 and Zfc.',
|
7880
8160
|
160 => {
|
7881
8161
|
Name => 'IntervalDurationHours',
|
7882
8162
|
Format => 'int32u',
|
7883
|
-
Condition => '$$self{IntervalShooting} > 0',
|
8163
|
+
#Condition => '$$self{IntervalShooting} > 0',
|
7884
8164
|
},
|
7885
8165
|
164 => {
|
7886
8166
|
Name => 'IntervalDurationMinutes',
|
7887
8167
|
Format => 'int32u',
|
7888
|
-
Condition => '$$self{IntervalShooting} > 0',
|
8168
|
+
#Condition => '$$self{IntervalShooting} > 0',
|
7889
8169
|
},
|
7890
8170
|
168 => {
|
7891
8171
|
Name => 'IntervalDurationSeconds',
|
7892
8172
|
Format => 'int32u',
|
7893
|
-
Condition => '$$self{IntervalShooting} > 0',
|
8173
|
+
#Condition => '$$self{IntervalShooting} > 0',
|
7894
8174
|
},
|
7895
8175
|
176 => {
|
7896
8176
|
Name => 'Intervals',
|
7897
8177
|
Format => 'int32u',
|
7898
8178
|
RawConv => '$$self{IntervalShootingIntervals} = $val',
|
7899
|
-
Condition => '$$self{IntervalShooting} > 0',
|
8179
|
+
#Condition => '$$self{IntervalShooting} > 0',
|
7900
8180
|
},
|
7901
8181
|
180 => {
|
7902
8182
|
Name => 'ShotsPerInterval',
|
7903
8183
|
Format => 'int32u',
|
7904
8184
|
RawConv => '$$self{IntervalShootingShotsPerInterval} = $val',
|
7905
|
-
Condition => '$$self{IntervalShooting} > 0',
|
8185
|
+
#Condition => '$$self{IntervalShooting} > 0',
|
7906
8186
|
},
|
7907
8187
|
184 => {
|
7908
8188
|
Name => 'IntervalExposureSmoothing',
|
7909
|
-
Condition => '$$self{IntervalShooting} > 0',
|
8189
|
+
#Condition => '$$self{IntervalShooting} > 0',
|
7910
8190
|
Format => 'int8u',
|
7911
8191
|
PrintConv => \%offOn,
|
7912
8192
|
},
|
7913
8193
|
186 => {
|
7914
8194
|
Name => 'IntervalPriority',
|
7915
|
-
Condition => '$$self{IntervalShooting} > 0',
|
8195
|
+
#Condition => '$$self{IntervalShooting} > 0',
|
7916
8196
|
Format => 'int8u',
|
7917
8197
|
PrintConv => \%offOn,
|
7918
8198
|
},
|
@@ -7955,16 +8235,11 @@ my %nikonFocalConversions = (
|
|
7955
8235
|
3 => 'Highlight'
|
7956
8236
|
},
|
7957
8237
|
},
|
8238
|
+
326 => { Name => 'NikonMeteringMode', PrintConv => \%meteringModeZ7},
|
7958
8239
|
328 => {
|
7959
8240
|
Name => 'FlashControlMode', # this and nearby tag values for flash may be set from either the Photo Shooting Menu or using the Flash unit menu
|
7960
8241
|
RawConv => '$$self{FlashControlMode} = $val',
|
7961
|
-
PrintConv =>
|
7962
|
-
0 => 'TTL',
|
7963
|
-
1 => 'Auto External Flash',
|
7964
|
-
2 => 'GN (distance priority)',
|
7965
|
-
3 => 'Manual',
|
7966
|
-
4 => 'Repeating Flash',
|
7967
|
-
},
|
8242
|
+
PrintConv => \%flashControlModeZ7,
|
7968
8243
|
},
|
7969
8244
|
334 => {
|
7970
8245
|
Name => 'FlashGNDistance',
|
@@ -7982,25 +8257,8 @@ my %nikonFocalConversions = (
|
|
7982
8257
|
PrintConv => '$val>0.99 ? "Full" : sprintf("%.1f%%",$val*100)',
|
7983
8258
|
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
7984
8259
|
},
|
7985
|
-
346 => {
|
7986
|
-
|
7987
|
-
Unknown => 1,
|
7988
|
-
PrintConv => {
|
7989
|
-
0 => 'Off',
|
7990
|
-
1 => 'Optical AWL',
|
7991
|
-
2 => 'Optical/Radio AWL',
|
7992
|
-
3 => 'Radio AWL'
|
7993
|
-
},
|
7994
|
-
},
|
7995
|
-
348 => {
|
7996
|
-
Name => 'FlashRemoteControl', # also found in FlashInfoUnknown at offset 0x1e (with different mappings)
|
7997
|
-
Unknown => 1,
|
7998
|
-
PrintConv => {
|
7999
|
-
0 => 'Group',
|
8000
|
-
1 => 'Quick Wireless',
|
8001
|
-
2 => 'Remote Repeating',
|
8002
|
-
},
|
8003
|
-
},
|
8260
|
+
346 => { Name => 'FlashWirelessOption', PrintConv => \%flashWirelessOptionZ7, Unknown => 1},
|
8261
|
+
348 => { Name => 'FlashRemoteControl', PrintConv => \%flashRemoteControlZ7, Unknown => 1},
|
8004
8262
|
352 => {
|
8005
8263
|
Name => 'FlashMasterControlMode', # tag name chosen for compatibility with those found in FlashInfo0102 & FlashInfo0103
|
8006
8264
|
RawConv => '$$self{FlashGroupOptionsMasterMode} = $val',
|
@@ -8038,27 +8296,8 @@ my %nikonFocalConversions = (
|
|
8038
8296
|
#444 => BracketProgram
|
8039
8297
|
#446 => BracketIncrement
|
8040
8298
|
#463 => SilentPhotography
|
8041
|
-
502 => {
|
8042
|
-
|
8043
|
-
Unknown => 1,
|
8044
|
-
PrintConv => {
|
8045
|
-
1 => '1920x1080',
|
8046
|
-
2 => '3840x2160',
|
8047
|
-
},
|
8048
|
-
},
|
8049
|
-
504 => {
|
8050
|
-
Name => 'MovieFrameRate',
|
8051
|
-
Unknown => 1,
|
8052
|
-
PrintConv => {
|
8053
|
-
0 => '120p',
|
8054
|
-
1 => '100p',
|
8055
|
-
2 => '60p',
|
8056
|
-
3 => '50p',
|
8057
|
-
4 => '30p',
|
8058
|
-
5 => '25p',
|
8059
|
-
6 => '24p',
|
8060
|
-
},
|
8061
|
-
},
|
8299
|
+
502 => { Name => 'MovieFrameSize', PrintConv => \%movieFrameSizeZ9, Unknown => 1},
|
8300
|
+
504 => { Name => 'MovieFrameRate', PrintConv => \%movieFrameRateZ7, Unknown => 1},
|
8062
8301
|
506 => {
|
8063
8302
|
Name => 'MovieSlowMotion',
|
8064
8303
|
Unknown => 1,
|
@@ -8083,72 +8322,13 @@ my %nikonFocalConversions = (
|
|
8083
8322
|
Format => 'int16u',
|
8084
8323
|
Unknown => 1,
|
8085
8324
|
ValueConv => '($val-104)/8',
|
8086
|
-
|
8087
|
-
|
8088
|
-
1 => 'ISO 80',
|
8089
|
-
2 => 'ISO 100',
|
8090
|
-
3 => 'ISO 125',
|
8091
|
-
4 => 'ISO 160',
|
8092
|
-
5 => 'ISO 200',
|
8093
|
-
6 => 'ISO 250',
|
8094
|
-
7 => 'ISO 320',
|
8095
|
-
8 => 'ISO 400',
|
8096
|
-
9 => 'ISO 500',
|
8097
|
-
10 => 'ISO 640',
|
8098
|
-
11 => 'ISO 800',
|
8099
|
-
12 => 'ISO 1000',
|
8100
|
-
13 => 'ISO 1250',
|
8101
|
-
14 => 'ISO 1600',
|
8102
|
-
15 => 'ISO 2000',
|
8103
|
-
16 => 'ISO 2500',
|
8104
|
-
17 => 'ISO 3200',
|
8105
|
-
18 => 'ISO 4000',
|
8106
|
-
19 => 'ISO 5000',
|
8107
|
-
20 => 'ISO 6400',
|
8108
|
-
21 => 'ISO 8000',
|
8109
|
-
22 => 'ISO 10000',
|
8110
|
-
23 => 'ISO 12800',
|
8111
|
-
24 => 'ISO 16000',
|
8112
|
-
25 => 'ISO 20000',
|
8113
|
-
26 => 'ISO 25600',
|
8114
|
-
27 => 'ISO Hi 0.3',
|
8115
|
-
28 => 'ISO Hi 0.7',
|
8116
|
-
29 => 'ISO Hi 1.0',
|
8117
|
-
32 => 'ISO Hi 2.0',
|
8118
|
-
},
|
8325
|
+
ValueConvInv => '8 * ($val + 104)',
|
8326
|
+
PrintConv => \%iSOAutoHiLimitZ7,
|
8119
8327
|
},
|
8120
8328
|
#520 => MovieWhiteBalanceSameAsPhoto
|
8121
|
-
568 => {
|
8122
|
-
|
8123
|
-
|
8124
|
-
PrintConv => {
|
8125
|
-
0 => 'Off',
|
8126
|
-
2 => 'Low',
|
8127
|
-
3 => 'Normal',
|
8128
|
-
4 => 'High',
|
8129
|
-
5 => 'Extra High',
|
8130
|
-
},
|
8131
|
-
},
|
8132
|
-
572 => {
|
8133
|
-
Name => 'MovieHighISONoiseReduction',
|
8134
|
-
Unknown => 1,
|
8135
|
-
PrintConv => {
|
8136
|
-
0 => 'Off',
|
8137
|
-
1 => 'Low',
|
8138
|
-
2 => 'Normal',
|
8139
|
-
3 => 'High',
|
8140
|
-
},
|
8141
|
-
},
|
8142
|
-
574=> {
|
8143
|
-
Name => 'MovieVignetteControl',
|
8144
|
-
Unknown => 1,
|
8145
|
-
PrintConv => {
|
8146
|
-
0 => 'Off',
|
8147
|
-
1 => 'Low',
|
8148
|
-
2 => 'Normal',
|
8149
|
-
3 => 'High',
|
8150
|
-
},
|
8151
|
-
},
|
8329
|
+
568 => { Name => 'MovieActiveD-Lighting', PrintConv => \%activeDLightingZ7, Unknown => 1},
|
8330
|
+
572 => { Name => 'MovieHighISONoiseReduction', PrintConv => \%offLowNormalHighZ7, Unknown => 1},
|
8331
|
+
574 => { Name => 'MovieVignetteControl', PrintConv => \%offLowNormalHighZ7, Unknown => 1},
|
8152
8332
|
576 => {
|
8153
8333
|
Name => 'MovieVignetteControlSameAsPhoto',
|
8154
8334
|
Unknown => 1,
|
@@ -8164,16 +8344,7 @@ my %nikonFocalConversions = (
|
|
8164
8344
|
Unknown => 1,
|
8165
8345
|
PrintConv => \%offOn
|
8166
8346
|
},
|
8167
|
-
584 => {
|
8168
|
-
Name => 'MovieFocusMode',
|
8169
|
-
Unknown => 1,
|
8170
|
-
PrintConv => {
|
8171
|
-
0 => 'Manual',
|
8172
|
-
1 => 'AF-S',
|
8173
|
-
2 => 'AF-C',
|
8174
|
-
4 => 'AF-F', # full frame
|
8175
|
-
},
|
8176
|
-
},
|
8347
|
+
584 => { Name => 'MovieFocusMode', PrintConv => \%focusModeZ7, Unknown => 1},
|
8177
8348
|
#586 => MovieAFAreaMode
|
8178
8349
|
590 => {
|
8179
8350
|
Name => 'MovieVibrationReduction',
|
@@ -8202,6 +8373,390 @@ my %nikonFocalConversions = (
|
|
8202
8373
|
},
|
8203
8374
|
#859 => HDMIViewAssist
|
8204
8375
|
);
|
8376
|
+
|
8377
|
+
%Image::ExifTool::Nikon::MenuSettingsZ9 = (
|
8378
|
+
%binaryDataAttrs,
|
8379
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
8380
|
+
DATAMEMBER => [ 140, 188, 192, 232, 424, 534 ],
|
8381
|
+
IS_SUBDIR => [ 799 ],
|
8382
|
+
NOTES => 'These tags are used by the Z9.',
|
8383
|
+
#90 ISO
|
8384
|
+
140 => {
|
8385
|
+
Name => 'MultipleExposureMode',
|
8386
|
+
RawConv => '$$self{MultipleExposureMode} = $val',
|
8387
|
+
PrintConv => {
|
8388
|
+
0 => 'Off',
|
8389
|
+
1 => 'On (Series)',
|
8390
|
+
2 => 'On',
|
8391
|
+
},
|
8392
|
+
},
|
8393
|
+
142 => {Name => 'MultiExposureShots', Condition => '$$self{MultipleExposureMode} != 0' }, #range 2-9
|
8394
|
+
188 => {
|
8395
|
+
Name => 'Intervals',
|
8396
|
+
Format => 'int32u',
|
8397
|
+
RawConv => '$$self{IntervalShootingIntervals} = $val',
|
8398
|
+
Condition => '$$self{IntervalShooting} > 0',
|
8399
|
+
},
|
8400
|
+
192 => {
|
8401
|
+
Name => 'ShotsPerInterval',
|
8402
|
+
Format => 'int32u',
|
8403
|
+
RawConv => '$$self{IntervalShootingShotsPerInterval} = $val',
|
8404
|
+
Condition => '$$self{IntervalShooting} > 0',
|
8405
|
+
},
|
8406
|
+
#220 NEFCompression 0=> 'Lossless' 1=> 'High Efficiency*' 4=> 'High Efficientcy'
|
8407
|
+
232 => {
|
8408
|
+
Name => 'FocusShiftNumberShots', #1-300
|
8409
|
+
RawConv => '$$self{FocusShiftNumberShots} = $val',
|
8410
|
+
Condition => '$$self{FocusShiftShooting} > 0',
|
8411
|
+
},
|
8412
|
+
236 => {
|
8413
|
+
Name => 'FocusShiftStepWidth', #1(Narrow) to 10 (Wide)
|
8414
|
+
Condition => '$$self{FocusShiftShooting} > 0',
|
8415
|
+
},
|
8416
|
+
240 => {
|
8417
|
+
Name => 'FocusShiftInterval',
|
8418
|
+
Condition => '$$self{FocusShiftShooting} > 0',
|
8419
|
+
PrintConv => '$val == 1? "1 Second" : sprintf("%.0f Seconds",$val)',
|
8420
|
+
},
|
8421
|
+
244 => {
|
8422
|
+
Name => 'FocusShiftExposureLock',
|
8423
|
+
Unknown => 1,
|
8424
|
+
PrintConv => \%offOn,
|
8425
|
+
Condition => '$$self{FocusShiftShooting} > 0',
|
8426
|
+
},
|
8427
|
+
274 => {
|
8428
|
+
Name => 'PhotoShootingMenuBank',
|
8429
|
+
PrintConv => {
|
8430
|
+
0 => 'A',
|
8431
|
+
1 => 'B',
|
8432
|
+
2 => 'C',
|
8433
|
+
3 => 'D',
|
8434
|
+
},
|
8435
|
+
},
|
8436
|
+
276 => { Name => 'ExtendedMenuBanks', PrintConv => \%offOn, }, #single tag from both Photo & Video menus
|
8437
|
+
308 => {
|
8438
|
+
Name => 'PhotoShootingMenuBankImageArea',
|
8439
|
+
PrintConv => {
|
8440
|
+
0 => 'FX',
|
8441
|
+
1 => 'DX',
|
8442
|
+
4 => '16:9',
|
8443
|
+
8 => '1:1',
|
8444
|
+
},
|
8445
|
+
},
|
8446
|
+
#310 ImageQuality
|
8447
|
+
322 => { Name => 'AutoISO', PrintConv => \%offOn, },
|
8448
|
+
324 => {
|
8449
|
+
Name => 'ISOAutoHiLimit',
|
8450
|
+
Format => 'int16u',
|
8451
|
+
Unknown => 1,
|
8452
|
+
ValueConv => '($val-104)/8',
|
8453
|
+
ValueConvInv => '8 * ($val + 104)',
|
8454
|
+
PrintConv => \%iSOAutoHiLimitZ7,
|
8455
|
+
},
|
8456
|
+
326 => {
|
8457
|
+
Name => 'ISOAutoFlashLimit',
|
8458
|
+
Format => 'int16u',
|
8459
|
+
Unknown => 1,
|
8460
|
+
ValueConv => '($val-104)/8',
|
8461
|
+
ValueConvInv => '8 * ($val + 104)',
|
8462
|
+
PrintConv => \%iSOAutoHiLimitZ7,
|
8463
|
+
},
|
8464
|
+
#332 ISOAutoShutterTime - Auto setting 0=> 'Auto (Slowest)', 1 => 'Auto (Slower)', 2=> 'Auto', 3=> 'Auto (Faster)', 4=> 'Auto (Fastest)'
|
8465
|
+
334 => {
|
8466
|
+
Name => 'ISOAutoShutterTime', #shutter speed is 2 ** (-$val/24)
|
8467
|
+
ValueConv => '$val / 8',
|
8468
|
+
Format => 'int16s',
|
8469
|
+
PrintConv => {
|
8470
|
+
-15 => 'Auto', #z9 firmware 1.00 maps both 'Auto' and '30 s' to -15
|
8471
|
+
-12 => '15 s',
|
8472
|
+
-9 => '8 s',
|
8473
|
+
-6 => '4 s',
|
8474
|
+
-3 => '2 s',
|
8475
|
+
0 => '1 s',
|
8476
|
+
1 => '1/1.3 s',
|
8477
|
+
2 => '1/1.6 s',
|
8478
|
+
3 => '1/2 s',
|
8479
|
+
4 => '1/2.5 s',
|
8480
|
+
5 => '1/3 s',
|
8481
|
+
6 => '1/4 s',
|
8482
|
+
7 => '1/5 s',
|
8483
|
+
8 => '1/6 s',
|
8484
|
+
9 => '1/8 s',
|
8485
|
+
10 => '1/10 s',
|
8486
|
+
11 => '1/13 s',
|
8487
|
+
12 => '1/15 s',
|
8488
|
+
13 => '1/20 s',
|
8489
|
+
14 => '1/25 s',
|
8490
|
+
15 => '1/30 s',
|
8491
|
+
16 => '1/40 s',
|
8492
|
+
17 => '1/50 s',
|
8493
|
+
18 => '1/60 s',
|
8494
|
+
19 => '1/80 s',
|
8495
|
+
20 => '1/100 s',
|
8496
|
+
21 => '1/120 s',
|
8497
|
+
22 => '1/160 s',
|
8498
|
+
23 => '1/200 s',
|
8499
|
+
24 => '1/250 s',
|
8500
|
+
25 => '1/320 s',
|
8501
|
+
26 => '1/400 s',
|
8502
|
+
27 => '1/500 s',
|
8503
|
+
28 => '1/640 s',
|
8504
|
+
29 => '1/800 s',
|
8505
|
+
30 => '1/1000 s',
|
8506
|
+
31 => '1/1250 s',
|
8507
|
+
32 => '1/1600 s',
|
8508
|
+
33 => '1/2000 s',
|
8509
|
+
34 => '1/2500 s',
|
8510
|
+
35 => '1/3200 s',
|
8511
|
+
36 => '1/4000 s',
|
8512
|
+
37 => '1/5000 s',
|
8513
|
+
37.5 => '1/6000 s',
|
8514
|
+
38 => '1/6400 s',
|
8515
|
+
39 => '1/8000 s',
|
8516
|
+
40 => '1/10000 s',
|
8517
|
+
40.5 => '1/12000 s',
|
8518
|
+
41 => '1/13000 s',
|
8519
|
+
42 => '1/16000 s',
|
8520
|
+
},
|
8521
|
+
},
|
8522
|
+
#336 WhiteBalance
|
8523
|
+
#406 PictureControl
|
8524
|
+
#408 ColorSpace
|
8525
|
+
#410 ActiveD-Lighting
|
8526
|
+
#412 => { Name => 'NoiseReduction', PrintConv => \%offOn }, #Long Exposure Noise Reduction
|
8527
|
+
#414 HighISONoiseReduction
|
8528
|
+
#414 VignetteControl
|
8529
|
+
416 => { Name => 'MovieVignetteControl', PrintConv => \%offLowNormalHighZ7, Unknown => 1},
|
8530
|
+
418 => { Name => 'DiffractionCompensation', PrintConv => \%offOn }, #value can be set from both the Photo Shoot Menu and the Video Shooting Menu
|
8531
|
+
#419 AutoDistortionControl #value can be set from both the Photo Shoot Menu and the Video Shooting Menu
|
8532
|
+
420 => { Name => 'FlickerReductionShooting', PrintConv => \%offOn },
|
8533
|
+
#422 MeteringMode
|
8534
|
+
424 => {
|
8535
|
+
Name => 'FlashControlMode', # this and nearby tag values for flash may be set from either the Photo Shooting Menu or using the Flash unit menu
|
8536
|
+
RawConv => '$$self{FlashControlMode} = $val',
|
8537
|
+
PrintConv => \%flashControlModeZ7,
|
8538
|
+
},
|
8539
|
+
426 => {
|
8540
|
+
Name => 'FlashMasterCompensation',
|
8541
|
+
Format => 'int8s',
|
8542
|
+
Unknown => 1,
|
8543
|
+
ValueConv => '$val/6',
|
8544
|
+
ValueConvInv => '6 * $val',
|
8545
|
+
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
8546
|
+
PrintConvInv => '$val',
|
8547
|
+
},
|
8548
|
+
430 => {
|
8549
|
+
Name => 'FlashGNDistance',
|
8550
|
+
Condition => '$$self{FlashControlMode} == 2',
|
8551
|
+
Unknown => 1,
|
8552
|
+
ValueConv => '$val + 3',
|
8553
|
+
PrintConv => \%flashGNDistance,
|
8554
|
+
},
|
8555
|
+
434 => {
|
8556
|
+
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)
|
8557
|
+
Condition => '$$self{FlashControlMode} >= 3',
|
8558
|
+
Unknown => 1,
|
8559
|
+
ValueConv => '2 ** (-$val/3)',
|
8560
|
+
ValueConvInv => '$val>0 ? -3*log($val)/log(2) : 0',
|
8561
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.1f%%",$val*100)',
|
8562
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
8563
|
+
},
|
8564
|
+
#442 flash wirelss control 0=> 'Off' 1=> 'CMD'
|
8565
|
+
444 => { Name => 'FlashRemoteControl', PrintConv => \%flashRemoteControlZ7, Unknown => 1},
|
8566
|
+
456 => { Name => 'FlashWirelessOption', PrintConv => \%flashWirelessOptionZ7, Unknown => 1},
|
8567
|
+
#526 FocusMode
|
8568
|
+
#528 AFAreaMode
|
8569
|
+
530 => { Name => 'VRMode', PrintConv => \%vRModeZ9},
|
8570
|
+
534 => {
|
8571
|
+
Name => 'BracketSet',
|
8572
|
+
RawConv => '$$self{BracketSet} = $val',
|
8573
|
+
PrintConv => {
|
8574
|
+
0 => 'AE/Flash',
|
8575
|
+
1 => 'AE',
|
8576
|
+
2 => 'Flash',
|
8577
|
+
3 => 'White Balance',
|
8578
|
+
4 => 'Active-D Lighting',
|
8579
|
+
},
|
8580
|
+
},
|
8581
|
+
536 => {
|
8582
|
+
Name => 'BracketProgram',
|
8583
|
+
Condition => '$$self{BracketSet} < 3',
|
8584
|
+
Notes => 'AE and/or Flash Bracketing',
|
8585
|
+
PrintConv => {
|
8586
|
+
0 => 'Disabled',
|
8587
|
+
2 => '2F',
|
8588
|
+
3 => '3F',
|
8589
|
+
4 => '4F',
|
8590
|
+
5 => '5F',
|
8591
|
+
7 => '7F',
|
8592
|
+
9 => '9F',
|
8593
|
+
},
|
8594
|
+
},
|
8595
|
+
538 => {
|
8596
|
+
Name => 'BracketIncrement',
|
8597
|
+
Condition => '$$self{BracketSet} < 3',
|
8598
|
+
Notes => 'AE and/or Flash Bracketing',
|
8599
|
+
PrintConv => {
|
8600
|
+
0 => '0.3',
|
8601
|
+
#1 => '0.5',
|
8602
|
+
2 => '0.7',
|
8603
|
+
3 => '1.0',
|
8604
|
+
4 => '2.0',
|
8605
|
+
5 => '3.0',
|
8606
|
+
},
|
8607
|
+
},
|
8608
|
+
#544 BracketProgram for ADL
|
8609
|
+
556 => {
|
8610
|
+
Name => 'SecondarySlotFunction',
|
8611
|
+
PrintConv => {
|
8612
|
+
0 => 'Overflow',
|
8613
|
+
1 => 'Backup',
|
8614
|
+
2 => 'NEF Primary + JPG Secondary',
|
8615
|
+
3 => 'JPG Primary + JPG Secondary',
|
8616
|
+
},
|
8617
|
+
},
|
8618
|
+
572 => { Name => 'DXCropAlert', PrintConv => \%offOn, },
|
8619
|
+
574 => { Name => 'SubjectDetection', PrintConv => \%subjectDetectionZ9},
|
8620
|
+
604 => {
|
8621
|
+
Name => 'MovieImageArea',
|
8622
|
+
Unknown => 1,
|
8623
|
+
Mask => 0x01, #without the mask 4 => 'FX' 5 => DX only the 2nd Z-series field encountered with a mask.
|
8624
|
+
PrintConv => {
|
8625
|
+
0 => 'FX',
|
8626
|
+
1 => 'DX',
|
8627
|
+
},
|
8628
|
+
},
|
8629
|
+
614 => {
|
8630
|
+
Name => 'MovieType',
|
8631
|
+
Unknown => 1,
|
8632
|
+
PrintConv => {
|
8633
|
+
1 => 'H.265 8-bit (MP4)',
|
8634
|
+
2 => 'H.265 8-bit (MOV)',
|
8635
|
+
3 => 'H.265 10-bit (MOV)',
|
8636
|
+
4 => 'ProRes 422 HQ 10-bit (MOV)',
|
8637
|
+
},
|
8638
|
+
},
|
8639
|
+
616 => {
|
8640
|
+
Name => 'MovieISOAutoHiLimit',
|
8641
|
+
Format => 'int16u',
|
8642
|
+
Unknown => 1,
|
8643
|
+
ValueConv => '($val-104)/8',
|
8644
|
+
ValueConvInv => '8 * ($val + 104)',
|
8645
|
+
PrintConv => \%iSOAutoHiLimitZ7,
|
8646
|
+
},
|
8647
|
+
618 => { Name => 'MovieISOAutoControlManualMode', PrintConv => \%offOn, Unknown => 1},
|
8648
|
+
620 => {
|
8649
|
+
Name => 'MovieISOAutoManualMode',
|
8650
|
+
Format => 'int16u',
|
8651
|
+
Unknown => 1,
|
8652
|
+
ValueConv => '($val-104)/8',
|
8653
|
+
ValueConvInv => '8 * ($val + 104)',
|
8654
|
+
PrintConv => \%iSOAutoHiLimitZ7,
|
8655
|
+
},
|
8656
|
+
696 => { Name => 'MovieActiveD-Lighting', PrintConv => \%activeDLightingZ7, Unknown => 1},
|
8657
|
+
698 => { Name => 'MovieHighISONoiseReduction', PrintConv => \%offLowNormalHighZ7, Unknown => 1},
|
8658
|
+
704 => {
|
8659
|
+
Name => 'MovieFlickerReduction',
|
8660
|
+
PrintConv => {
|
8661
|
+
0 => 'Auto',
|
8662
|
+
1 => '50Hz',
|
8663
|
+
2 => '60Hz',
|
8664
|
+
},
|
8665
|
+
},
|
8666
|
+
706 => { Name => 'MovieMeteringMode', PrintConv => \%meteringModeZ7, , Unknown => 1},
|
8667
|
+
708 => { Name => 'MovieFocusMode', PrintConv => \%focusModeZ7, Unknown => 1},
|
8668
|
+
710 => {
|
8669
|
+
Name => 'MovieAFAreaMode',
|
8670
|
+
PrintConv => {
|
8671
|
+
1 => 'Single',
|
8672
|
+
3 => 'Wide (S)',
|
8673
|
+
4 => 'Wide (L)',
|
8674
|
+
6 => 'Auto',
|
8675
|
+
11 => 'Subject Tracking',
|
8676
|
+
},
|
8677
|
+
},
|
8678
|
+
712 => { Name => 'MovieVRMode', PrintConv => \%vRModeZ9, Unknown => 1},
|
8679
|
+
716 => { Name => 'MovieElectronicVR', PrintConv => \%offOn, Unknown => 1 }, #distinct from MoveieVRMode
|
8680
|
+
718 => { Name => 'MovieSoundRecording', PrintConv => { 0 => 'Off', 1 => 'On', 2 => 'On' }, Unknown => 1 }, #not sure why the unusal mapping with 2 => 'On'
|
8681
|
+
720 => { Name => 'MicrophoneSensitivity', Unknown => 1}, #1-20
|
8682
|
+
722 => { Name => 'MicrophoneAttenuator', PrintConv => \%offOn, Unknown => 1 }, #distinct from MoveieVRMode
|
8683
|
+
724 => { Name => 'MicrophoneFrequencyResponse', PrintConv => { 0 => 'Wide Range', 1 => 'Vocal Range' }, Unknown => 1 },
|
8684
|
+
726 => { Name => 'WindNoiseReduction', PrintConv => \%offOn, Unknown => 1 },
|
8685
|
+
748 => {
|
8686
|
+
Name => 'MovieToneMap',
|
8687
|
+
Unknown => 1,
|
8688
|
+
PrintConv => {
|
8689
|
+
0 => 'SDR',
|
8690
|
+
1 => 'HLG',
|
8691
|
+
2 => 'N-Log',
|
8692
|
+
},
|
8693
|
+
},
|
8694
|
+
754 => { Name => 'MovieFrameSize', PrintConv => \%movieFrameSizeZ9, Unknown => 1},
|
8695
|
+
756 => { Name => 'MovieFrameRate', PrintConv => \%movieFrameRateZ7, Unknown => 1},
|
8696
|
+
762 => { Name => 'MicrophoneJackPower', PrintConv => \%offOn, Unknown => 1 },
|
8697
|
+
763 => { Name => 'MovieDXCropAlert', PrintConv => \%offOn, Unknown => 1 },
|
8698
|
+
764 => { Name => 'MovieSubjectDetection', PrintConv => \%subjectDetectionZ9, Unknown => 1},
|
8699
|
+
799 => {
|
8700
|
+
Name => 'CustomSettingsZ9',
|
8701
|
+
Format => 'undef[608]',
|
8702
|
+
SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsZ9' },
|
8703
|
+
},
|
8704
|
+
1426 => {
|
8705
|
+
Name => 'Language',
|
8706
|
+
Unknown => 1,
|
8707
|
+
PrintConv => {
|
8708
|
+
4 => 'English',
|
8709
|
+
5 => 'Spanish',
|
8710
|
+
7 => 'French',
|
8711
|
+
},
|
8712
|
+
},
|
8713
|
+
1428 => {
|
8714
|
+
Name => 'TimeZone',
|
8715
|
+
PrintConv => {
|
8716
|
+
5 => '+09:00 (Tokyo)',
|
8717
|
+
6 => '+08:00 (Beijing, Honk Kong, Sinapore)',
|
8718
|
+
10 => '+05:45 (Kathmandu)',
|
8719
|
+
11 => '+05:30 (New Dehli)',
|
8720
|
+
16 => '+03:00 (Moscow, Nairobi)',
|
8721
|
+
15 => '+02:00 (Athens)',
|
8722
|
+
16 => '+01:00 (Madrid, Paris, Berlin)',
|
8723
|
+
17 => '+02:00 (Athens, Helsinki)',
|
8724
|
+
18 => '+00:00 (London)',
|
8725
|
+
19 => '+00:00', #PH (unknown city)
|
8726
|
+
22 => '-03:00 (Buenos Aires, Sao Paulo)',
|
8727
|
+
24 => '-04:00 (Manaus, Caracas)',
|
8728
|
+
25 => '-05:00 (New York, Toronto, Lima)',
|
8729
|
+
26 => '-06:00 (Chicago, Mexico City)',
|
8730
|
+
27 => '-07:00 (Denver)',
|
8731
|
+
28 => '-08:00 (Los Angeles, Vancouver)',
|
8732
|
+
29 => '-09:00 (Anchorage)',
|
8733
|
+
30 => '-10:00 (Hawaii)',
|
8734
|
+
},
|
8735
|
+
},
|
8736
|
+
1434 => {Name => 'MonitorBrightness', ValueConv => '$val - 5', Unknown => 1}, # settings: -5 to +5
|
8737
|
+
1456 => { Name => 'AFFineTune', PrintConv => \%offOn, Unknown => 1 },
|
8738
|
+
1552 => {
|
8739
|
+
Name => 'HDMIOutputResolution',
|
8740
|
+
PrintConv => {
|
8741
|
+
0 => 'Auto',
|
8742
|
+
1 => '4320p',
|
8743
|
+
2 => '2160p',
|
8744
|
+
3 => '1080p',
|
8745
|
+
#4 => '1080i',
|
8746
|
+
5 => '720p',
|
8747
|
+
#6 => '576p',
|
8748
|
+
#7 => '480p',
|
8749
|
+
},
|
8750
|
+
},
|
8751
|
+
1565 => { Name => 'SetClockFromLocationData', PrintConv => \%offOn, Unknown => 1 },
|
8752
|
+
1572 => { Name => 'AirplaneMode', PrintConv => \%offOn, Unknown => 1 },
|
8753
|
+
1573 => { Name => 'EmptySlotRelease', PrintConv => { 0 => 'Disable Release', 1 => 'Enable Release' }, Unknown => 1 },
|
8754
|
+
1608 => { Name => 'EnergySavingMode', PrintConv =>\%offOn, Unknown => 1 },
|
8755
|
+
1632 => { Name => 'RecordLocationData', PrintConv => \%offOn, Unknown => 1 },
|
8756
|
+
1636 => { Name => 'USBPowerDelivery', PrintConv => \%offOn, Unknown => 1 },
|
8757
|
+
1645 => { Name => 'SensorShield', PrintConv => { 0 => 'Stays Open', 1 => 'Closes' }, Unknown => 1 },
|
8758
|
+
);
|
8759
|
+
|
8205
8760
|
# Flash information (ref JD)
|
8206
8761
|
%Image::ExifTool::Nikon::FlashInfo0100 = (
|
8207
8762
|
%binaryDataAttrs,
|
@@ -9421,7 +9976,7 @@ my %nikonFocalConversions = (
|
|
9421
9976
|
],
|
9422
9977
|
);
|
9423
9978
|
|
9424
|
-
# Flash information for the
|
9979
|
+
# Flash information for the Z7II (ref 28)
|
9425
9980
|
# (likey similar to FlashInfo010 and FlashInfo0108 with addition of support for radio controlled units such as the SB-5000?
|
9426
9981
|
%Image::ExifTool::Nikon::FlashInfo0300 = (
|
9427
9982
|
%binaryDataAttrs,
|
@@ -9445,7 +10000,7 @@ my %nikonFocalConversions = (
|
|
9445
10000
|
SeparateTable => 'FlashFirmware',
|
9446
10001
|
PrintConv => \%flashFirmware,
|
9447
10002
|
},
|
9448
|
-
|
10003
|
+
10 => {
|
9449
10004
|
Name => 'FlashCompensation',
|
9450
10005
|
# this is the compensation from the camera (0x0012) for "Built-in" FlashType, or
|
9451
10006
|
# the compensation from the external unit (0x0017) for "Optional" FlashType - PH
|
@@ -10373,7 +10928,7 @@ my %nikonFocalConversions = (
|
|
10373
10928
|
},
|
10374
10929
|
},
|
10375
10930
|
{
|
10376
|
-
Condition => '$$valPt =~ /^080[
|
10931
|
+
Condition => '$$valPt =~ /^080[012]/', # Z6/Z7/Z9
|
10377
10932
|
Name => 'LensData0800',
|
10378
10933
|
SubDirectory => {
|
10379
10934
|
TagTable => 'Image::ExifTool::Nikon::LensData0800',
|
@@ -10458,6 +11013,98 @@ my %nikonFocalConversions = (
|
|
10458
11013
|
},
|
10459
11014
|
);
|
10460
11015
|
|
11016
|
+
# Nikon XMP tags written in NKSC metadata
|
11017
|
+
%Image::ExifTool::Nikon::ast = (
|
11018
|
+
GROUPS => { 0 => 'XMP', 1 => 'XMP-ast', 2 => 'Image' },
|
11019
|
+
PROCESS_PROC => \&Image::ExifTool::XMP::ProcessXMP,
|
11020
|
+
NAMESPACE => 'ast',
|
11021
|
+
VARS => { NO_ID => 1 },
|
11022
|
+
NOTES => 'Tags used by Nikon NX Studio in Nikon NKSC sidecar files and trailers.',
|
11023
|
+
about => { },
|
11024
|
+
version => { },
|
11025
|
+
XMLPackets => {
|
11026
|
+
SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main' },
|
11027
|
+
Encoding => 'Base64',
|
11028
|
+
Binary => 1,
|
11029
|
+
},
|
11030
|
+
IPTC => {
|
11031
|
+
SubDirectory => { TagTable => 'Image::ExifTool::IPTC::Main' },
|
11032
|
+
Encoding => 'Base64',
|
11033
|
+
Binary => 1,
|
11034
|
+
},
|
11035
|
+
GPSVersionID => { Groups => { 2 => 'Location' }, %base64bytes },
|
11036
|
+
GPSLatitudeRef => {
|
11037
|
+
Groups => { 2 => 'Location' },
|
11038
|
+
%base64int32u,
|
11039
|
+
PrintConv => { 0 => 'North', 1 => 'South' }, #PH (NC)
|
11040
|
+
},
|
11041
|
+
GPSLatitude => { Groups => { 2 => 'Location' }, %base64coord },
|
11042
|
+
GPSLongitudeRef => {
|
11043
|
+
Groups => { 2 => 'Location' },
|
11044
|
+
%base64int32u,
|
11045
|
+
PrintConv => { 2 => 'East', 3 => 'West' }, #PH (NC)
|
11046
|
+
},
|
11047
|
+
GPSLongitude => { Groups => { 2 => 'Location' }, %base64coord },
|
11048
|
+
GPSAltitudeRef => {
|
11049
|
+
Groups => { 2 => 'Location' },
|
11050
|
+
%base64bytes,
|
11051
|
+
PrintConv => {
|
11052
|
+
0 => 'Above Sea Level',
|
11053
|
+
1 => 'Below Sea Level',
|
11054
|
+
},
|
11055
|
+
},
|
11056
|
+
GPSAltitude => {
|
11057
|
+
Groups => { 2 => 'Location' },
|
11058
|
+
ValueConv => q{
|
11059
|
+
my $val=Image::ExifTool::XMP::DecodeBase64($val);
|
11060
|
+
my $saveOrder = GetByteOrder();
|
11061
|
+
SetByteOrder('II');
|
11062
|
+
$val = GetDouble($val,0);
|
11063
|
+
SetByteOrder($saveOrder);
|
11064
|
+
return $val;
|
11065
|
+
},
|
11066
|
+
PrintConv => '"$val m"',
|
11067
|
+
},
|
11068
|
+
GPSMapDatum => { },
|
11069
|
+
);
|
11070
|
+
%Image::ExifTool::Nikon::sdc = (
|
11071
|
+
GROUPS => { 0 => 'XMP', 1 => 'XMP-sdc', 2 => 'Image' },
|
11072
|
+
PROCESS_PROC => \&Image::ExifTool::XMP::ProcessXMP,
|
11073
|
+
NAMESPACE => 'sdc',
|
11074
|
+
VARS => { NO_ID => 1 },
|
11075
|
+
about => { },
|
11076
|
+
version => { },
|
11077
|
+
appversion => { Name => 'AppVersion' },
|
11078
|
+
appname => { Name => 'AppName' },
|
11079
|
+
);
|
11080
|
+
%Image::ExifTool::Nikon::nine = (
|
11081
|
+
GROUPS => { 0 => 'XMP', 1 => 'XMP-nine', 2 => 'Image' },
|
11082
|
+
PROCESS_PROC => \&Image::ExifTool::XMP::ProcessXMP,
|
11083
|
+
NAMESPACE => 'nine',
|
11084
|
+
VARS => { NO_ID => 1 },
|
11085
|
+
about => { },
|
11086
|
+
version => { },
|
11087
|
+
Label => { },
|
11088
|
+
Rating => { },
|
11089
|
+
Trim => { %base64bin },
|
11090
|
+
NineEdits => {
|
11091
|
+
SubDirectory => {
|
11092
|
+
TagTable => 'Image::ExifTool::Nikon::NineEdits',
|
11093
|
+
IgnoreProp => { userData => 1 }, # remove "UserData" from already overly long tag names
|
11094
|
+
},
|
11095
|
+
Binary => 1,
|
11096
|
+
},
|
11097
|
+
);
|
11098
|
+
%Image::ExifTool::Nikon::NineEdits = (
|
11099
|
+
GROUPS => { 0 => 'XML', 1 => 'NineEdits', 2 => 'Image' },
|
11100
|
+
PROCESS_PROC => \&Image::ExifTool::XMP::ProcessXMP,
|
11101
|
+
VARS => { NO_ID => 1 },
|
11102
|
+
NOTES => 'XML-based tags used to store editing information.',
|
11103
|
+
filterParametersBinary => { %base64bin },
|
11104
|
+
filterParametersExportExportData => { %base64bin },
|
11105
|
+
filterParametersCustomCustomData => { %base64bin },
|
11106
|
+
);
|
11107
|
+
|
10461
11108
|
# Nikon composite tags
|
10462
11109
|
%Image::ExifTool::Nikon::Composite = (
|
10463
11110
|
GROUPS => { 2 => 'Camera' },
|
@@ -10649,7 +11296,7 @@ sub PrintAFPointsLeftRight($$)
|
|
10649
11296
|
|
10650
11297
|
#------------------------------------------------------------------------------
|
10651
11298
|
# Print conversion for relative Up/Down AF points (ref 28)
|
10652
|
-
# Inputs: 0)
|
11299
|
+
# Inputs: 0) row, 1) number of rows
|
10653
11300
|
# Returns: AF point data as a string (e.g. '2U' or 'C' or '3D')
|
10654
11301
|
sub PrintAFPointsUpDown($$)
|
10655
11302
|
{
|
@@ -10851,6 +11498,72 @@ sub SerialKey($$)
|
|
10851
11498
|
return 0x60; # D200 (ref 10), D40X (ref PH), etc
|
10852
11499
|
}
|
10853
11500
|
|
11501
|
+
#------------------------------------------------------------------------------
|
11502
|
+
# Extract information from "NIKON APP" trailer (ref PH)
|
11503
|
+
# Inputs: 0) ExifTool ref, 1) Optional dirInfo ref for returning trailer info
|
11504
|
+
# Returns: true on success
|
11505
|
+
sub ProcessNikonApp($;$)
|
11506
|
+
{
|
11507
|
+
local $_;
|
11508
|
+
my ($et, $dirInfo) = @_;
|
11509
|
+
my $raf = $$et{RAF};
|
11510
|
+
my $offset = $dirInfo ? $$dirInfo{Offset} || 0 : 0;
|
11511
|
+
my $buff;
|
11512
|
+
|
11513
|
+
return 0 unless $raf->Seek(-20-$offset, 2) and $raf->Read($buff, 20) == 20 and
|
11514
|
+
substr($buff,-16) eq "\0\0\0\0\0\0/NIKON APP"; # check magic number
|
11515
|
+
|
11516
|
+
my $verbose = $et->Options('Verbose');
|
11517
|
+
my $fileEnd = $raf->Tell();
|
11518
|
+
my $trailerLen = unpack('N', $buff);
|
11519
|
+
$trailerLen > $fileEnd and $et->Warn('Bad NikonApp trailer size'), return 0;
|
11520
|
+
if ($dirInfo) {
|
11521
|
+
$$dirInfo{DirLen} = $trailerLen if $dirInfo;
|
11522
|
+
$$dirInfo{DataPos} = $fileEnd - $trailerLen;
|
11523
|
+
if ($$dirInfo{OutFile}) {
|
11524
|
+
if ($$et{DEL_GROUP}{NikonApp}) {
|
11525
|
+
++$$et{CHANGED};
|
11526
|
+
# just copy the trailer when writing
|
11527
|
+
} elsif ($trailerLen > $fileEnd or not $raf->Seek($$dirInfo{DataPos}, 0) or
|
11528
|
+
$raf->Read(${$$dirInfo{OutFile}}, $trailerLen) != $trailerLen)
|
11529
|
+
{
|
11530
|
+
return 0;
|
11531
|
+
} else {
|
11532
|
+
return 1;
|
11533
|
+
}
|
11534
|
+
}
|
11535
|
+
$et->DumpTrailer($dirInfo) if $verbose or $$et{HTML_DUMP};
|
11536
|
+
}
|
11537
|
+
unless ($trailerLen >= 0x40 and $raf->Seek($fileEnd - $trailerLen, 0) and
|
11538
|
+
$raf->Read($buff, 0x40) == 0x40 and $buff =~ m(NIKON APP\0))
|
11539
|
+
{
|
11540
|
+
$et->Warn('Error reading NikonApp trailer');
|
11541
|
+
return 0;
|
11542
|
+
}
|
11543
|
+
$$et{SET_GROUP0} = 'NikonApp';
|
11544
|
+
while ($raf->Read($buff, 8) == 8) {
|
11545
|
+
my ($id, $len) = unpack('N2', $buff);
|
11546
|
+
if ($len & 0x80000000) {
|
11547
|
+
$et->Warn('Invalid NikonApp record length');
|
11548
|
+
last;
|
11549
|
+
}
|
11550
|
+
last if $id == 0 and $len == 0;
|
11551
|
+
unless ($raf->Read($buff, $len) == $len) {
|
11552
|
+
$et->Warn('Truncated NikonApp record');
|
11553
|
+
last;
|
11554
|
+
}
|
11555
|
+
if ($id == 1) {
|
11556
|
+
require Image::ExifTool::XMP;
|
11557
|
+
Image::ExifTool::XMP::ProcessXMP($et, { DataPt => \$buff });
|
11558
|
+
} else { # (haven't seen any other types of records)
|
11559
|
+
$et->Warn("Unknown NikonApp record $id");
|
11560
|
+
last;
|
11561
|
+
}
|
11562
|
+
}
|
11563
|
+
delete $$et{SET_GROUP0};
|
11564
|
+
return 1;
|
11565
|
+
}
|
11566
|
+
|
10854
11567
|
#------------------------------------------------------------------------------
|
10855
11568
|
# Read Nikon NCTG tags in MOV videos
|
10856
11569
|
# Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
|
@@ -11192,7 +11905,7 @@ Nikon maker notes in EXIF information.
|
|
11192
11905
|
|
11193
11906
|
=head1 AUTHOR
|
11194
11907
|
|
11195
|
-
Copyright 2003-
|
11908
|
+
Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
|
11196
11909
|
|
11197
11910
|
This library is free software; you can redistribute it and/or modify it
|
11198
11911
|
under the same terms as Perl itself.
|