exiftool_vendored 12.14.0 → 12.15.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of exiftool_vendored might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/bin/Changes +11 -1
- data/bin/MANIFEST +2 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +4 -4
- data/bin/lib/Image/ExifTool.pm +30 -1
- data/bin/lib/Image/ExifTool.pod +4 -4
- data/bin/lib/Image/ExifTool/DJI.pm +27 -1
- data/bin/lib/Image/ExifTool/JPEG.pm +23 -1
- data/bin/lib/Image/ExifTool/Nikon.pm +310 -33
- data/bin/lib/Image/ExifTool/NikonSettings.pm +2013 -0
- data/bin/lib/Image/ExifTool/PNG.pm +11 -3
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +1 -1
- data/bin/lib/Image/ExifTool/RIFF.pm +6 -5
- data/bin/lib/Image/ExifTool/Sony.pm +3 -1
- data/bin/lib/Image/ExifTool/TagLookup.pm +3941 -3810
- data/bin/lib/Image/ExifTool/TagNames.pod +278 -14
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +8 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e30c22a774925019702c59a5aa788607b27a5b217824d47ec66be50e5a10e8f1
|
4
|
+
data.tar.gz: 5c54290d58d097af3d8950f187b940e6a930d1d9502c38252620b57c8ff64067
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '07965ed32bfb30fe68f862fc2e1e8c1a59094182b664d4cfbfdc9fe0c5e4db16b08733c0ff42c093c1dbd289148c24f5ed51e40b99b582701441cc4bf64b8061'
|
7
|
+
data.tar.gz: 5ab6c978e3d9066a288173d0efd9a786245fabe9114446b77115032153fc64252dd05b1b47d4608e94b0ded7bf996fdb02706136036ede870aa2c779796b6d63
|
data/bin/Changes
CHANGED
@@ -4,9 +4,19 @@ ExifTool Version History
|
|
4
4
|
|
5
5
|
RSS feed: https://exiftool.org/rss.xml
|
6
6
|
|
7
|
-
Note: The most recent production release is Version 12.
|
7
|
+
Note: The most recent production release is Version 12.15. (Other versions are
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
9
9
|
|
10
|
+
Jan. 18, 2021 - Version 12.15 (production release)
|
11
|
+
|
12
|
+
- Added a couple of new Sony LensType values (thanks LibRaw and Jos Roost)
|
13
|
+
- Added a new Nikon FlashMode value (thanks Mike)
|
14
|
+
- Decode NikonSettings (thanks Warren Hatch)
|
15
|
+
- Decode thermal information from DJI RJPEG images
|
16
|
+
- Fixed extra newline in -echo3 and -echo4 outputs added in version 12.10
|
17
|
+
- Fixed out-of-memory problem when writing some very large PNG files under
|
18
|
+
Windows
|
19
|
+
|
10
20
|
Jan. 6, 2021 - Version 12.14
|
11
21
|
|
12
22
|
- Added support for 2 more types of timed GPS in video files (that makes 49
|
data/bin/MANIFEST
CHANGED
@@ -115,6 +115,7 @@ html/TagNames/Motorola.html
|
|
115
115
|
html/TagNames/Nikon.html
|
116
116
|
html/TagNames/NikonCapture.html
|
117
117
|
html/TagNames/NikonCustom.html
|
118
|
+
html/TagNames/NikonSettings.html
|
118
119
|
html/TagNames/Nintendo.html
|
119
120
|
html/TagNames/OOXML.html
|
120
121
|
html/TagNames/Ogg.html
|
@@ -337,6 +338,7 @@ lib/Image/ExifTool/Motorola.pm
|
|
337
338
|
lib/Image/ExifTool/Nikon.pm
|
338
339
|
lib/Image/ExifTool/NikonCapture.pm
|
339
340
|
lib/Image/ExifTool/NikonCustom.pm
|
341
|
+
lib/Image/ExifTool/NikonSettings.pm
|
340
342
|
lib/Image/ExifTool/Nintendo.pm
|
341
343
|
lib/Image/ExifTool/OOXML.pm
|
342
344
|
lib/Image/ExifTool/Ogg.pm
|
data/bin/META.json
CHANGED
data/bin/META.yml
CHANGED
data/bin/README
CHANGED
@@ -106,8 +106,8 @@ your home directory, then you would type the following commands in a
|
|
106
106
|
terminal window to extract and run ExifTool:
|
107
107
|
|
108
108
|
cd ~/Desktop
|
109
|
-
gzip -dc Image-ExifTool-12.
|
110
|
-
cd Image-ExifTool-12.
|
109
|
+
gzip -dc Image-ExifTool-12.15.tar.gz | tar -xf -
|
110
|
+
cd Image-ExifTool-12.15
|
111
111
|
./exiftool t/images/ExifTool.jpg
|
112
112
|
|
113
113
|
Note: These commands extract meta information from one of the test images.
|
data/bin/exiftool
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
use strict;
|
11
11
|
require 5.004;
|
12
12
|
|
13
|
-
my $version = '12.
|
13
|
+
my $version = '12.15';
|
14
14
|
|
15
15
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
16
16
|
my $exeDir;
|
@@ -371,12 +371,12 @@ if (grep /^-common_args$/i, @ARGV) {
|
|
371
371
|
Command: for (;;) {
|
372
372
|
|
373
373
|
if (@echo3) {
|
374
|
-
my $str = join
|
374
|
+
my $str = join("\n", @echo3) . "\n";
|
375
375
|
$str =~ s/\$\{status\}/$rtnVal/ig;
|
376
376
|
print STDOUT $str;
|
377
377
|
}
|
378
378
|
if (@echo4) {
|
379
|
-
my $str = join
|
379
|
+
my $str = join("\n", @echo4) . "\n";
|
380
380
|
$str =~ s/\$\{status\}/$rtnVal/ig;
|
381
381
|
print STDERR $str;
|
382
382
|
}
|
@@ -5367,7 +5367,7 @@ with this command:
|
|
5367
5367
|
|
5368
5368
|
produces output like this:
|
5369
5369
|
|
5370
|
-
-- Generated by ExifTool 12.
|
5370
|
+
-- Generated by ExifTool 12.15 --
|
5371
5371
|
File: a.jpg - 2003:10:31 15:44:19
|
5372
5372
|
(f/5.6, 1/60s, ISO 100)
|
5373
5373
|
File: b.jpg - 2006:05:23 11:57:38
|
data/bin/lib/Image/ExifTool.pm
CHANGED
@@ -28,7 +28,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
|
|
28
28
|
%mimeType $swapBytes $swapWords $currentByteOrder %unpackStd
|
29
29
|
%jpegMarker %specialTags %fileTypeLookup $testLen $exePath);
|
30
30
|
|
31
|
-
$VERSION = '12.
|
31
|
+
$VERSION = '12.15';
|
32
32
|
$RELEASE = '';
|
33
33
|
@ISA = qw(Exporter);
|
34
34
|
%EXPORT_TAGS = (
|
@@ -6695,6 +6695,22 @@ sub ProcessJPEG($$)
|
|
6695
6695
|
# extract the Stim information (it is in standard TIFF format)
|
6696
6696
|
my $tagTablePtr = GetTagTable('Image::ExifTool::Stim::Main');
|
6697
6697
|
$self->ProcessTIFF(\%dirInfo, $tagTablePtr);
|
6698
|
+
} elsif ($$self{Make} eq 'DJI') {
|
6699
|
+
$dumpType = 'DJI ThermalData';
|
6700
|
+
# add this data to the combined data if it exists
|
6701
|
+
my $dataPt = $segDataPt;
|
6702
|
+
if (defined $combinedSegData) {
|
6703
|
+
$combinedSegData .= $$segDataPt;
|
6704
|
+
$dataPt = \$combinedSegData;
|
6705
|
+
}
|
6706
|
+
if ($nextMarker == $marker) {
|
6707
|
+
$combinedSegData = $$segDataPt unless defined $combinedSegData;
|
6708
|
+
} else {
|
6709
|
+
# process DJI FLIR thermal data
|
6710
|
+
my $tagTablePtr = GetTagTable('Image::ExifTool::JPEG::Main');
|
6711
|
+
$self->HandleTag($tagTablePtr, 'APP3', $$dataPt);
|
6712
|
+
undef $combinedSegData;
|
6713
|
+
}
|
6698
6714
|
} elsif ($$segDataPt =~ /^\xff\xd8\xff\xdb/) {
|
6699
6715
|
$dumpType = 'PreviewImage'; # (Samsung, HP, BenQ)
|
6700
6716
|
$preview = $$segDataPt;
|
@@ -6729,6 +6745,11 @@ sub ProcessJPEG($$)
|
|
6729
6745
|
# set flag if this is the last FPXR segment
|
6730
6746
|
$dirInfo{LastFPXR} = not ($nextMarker==$marker and $$nextSegDataPt=~/^FPXR\0/),
|
6731
6747
|
$self->ProcessDirectory(\%dirInfo, $tagTablePtr);
|
6748
|
+
} elsif ($$self{Make} eq 'DJI' and $$segDataPt =~ /^\xaa\x55\x12\x06/) {
|
6749
|
+
$dumpType = 'DJI ThermalParams';
|
6750
|
+
DirStart(\%dirInfo, 0, 0);
|
6751
|
+
my $tagTablePtr = GetTagTable('Image::ExifTool::DJI::ThermalParams');
|
6752
|
+
$self->ProcessDirectory(\%dirInfo, $tagTablePtr);
|
6732
6753
|
} elsif ($preview) {
|
6733
6754
|
# continued Samsung S1060 preview from APP3
|
6734
6755
|
$dumpType = 'PreviewImage';
|
@@ -6751,6 +6772,10 @@ sub ProcessJPEG($$)
|
|
6751
6772
|
} elsif ($$segDataPt =~ /^ssuniqueid\0/) {
|
6752
6773
|
my $tagTablePtr = GetTagTable('Image::ExifTool::Samsung::APP5');
|
6753
6774
|
$self->HandleTag($tagTablePtr, 'ssuniqueid', substr($$segDataPt, 11));
|
6775
|
+
} elsif ($$self{Make} eq 'DJI') {
|
6776
|
+
$dumpType = 'DJI ThermalCal';
|
6777
|
+
my $tagTablePtr = GetTagTable('Image::ExifTool::JPEG::Main');
|
6778
|
+
$self->HandleTag($tagTablePtr, 'APP5', $$segDataPt);
|
6754
6779
|
} elsif ($preview) {
|
6755
6780
|
$dumpType = 'PreviewImage';
|
6756
6781
|
$preview .= $$segDataPt;
|
@@ -6786,6 +6811,10 @@ sub ProcessJPEG($$)
|
|
6786
6811
|
my $tagTablePtr = GetTagTable('Image::ExifTool::GoPro::GPMF');
|
6787
6812
|
DirStart(\%dirInfo, 6);
|
6788
6813
|
$self->ProcessDirectory(\%dirInfo, $tagTablePtr);
|
6814
|
+
} elsif ($$segDataPt =~ /^DTAT\0\0.\{/s) {
|
6815
|
+
$dumpType = 'DJI_DTAT';
|
6816
|
+
my $tagTablePtr = GetTagTable('Image::ExifTool::JPEG::Main');
|
6817
|
+
$self->HandleTag($tagTablePtr, 'APP6', $$segDataPt);
|
6789
6818
|
}
|
6790
6819
|
} elsif ($marker == 0xe7) { # APP7 (Pentax, Huawei, Qualcomm)
|
6791
6820
|
if ($$segDataPt =~ /^PENTAX \0(II|MM)/) {
|
data/bin/lib/Image/ExifTool.pod
CHANGED
@@ -2298,10 +2298,10 @@ MIE-Orient, MIE-Preview, MIE-Thumbnail, MIE-UTM, MIE-Unknown, MIE-Video,
|
|
2298
2298
|
MIFF, MNG, MOBI, MOI, MPC, MPEG, MPF0, MPImage, MS-DOC, MXF, MacOS,
|
2299
2299
|
MakerNotes, MakerUnknown, Matroska, MediaJukebox, Meta, MetaIFD, Microsoft,
|
2300
2300
|
Minolta, MinoltaRaw, Motorola, NITF, Nikon, NikonCapture, NikonCustom,
|
2301
|
-
NikonScan, Nintendo, Ocad, Ogg, Olympus, OpenEXR, Opus, PDF,
|
2302
|
-
PNG-pHYs, PSP, Palm, Panasonic, PanasonicRaw, Pentax, PhaseOne,
|
2303
|
-
PhotoMechanic, Photoshop, PictureInfo, PostScript, PreviewIFD,
|
2304
|
-
ProfileIFD, Qualcomm, QuickTime, RAF, RAF2, RIFF, RMETA, RSRC, RTF,
|
2301
|
+
NikonScan, NikonSettings, Nintendo, Ocad, Ogg, Olympus, OpenEXR, Opus, PDF,
|
2302
|
+
PICT, PNG, PNG-pHYs, PSP, Palm, Panasonic, PanasonicRaw, Pentax, PhaseOne,
|
2303
|
+
PhotoCD, PhotoMechanic, Photoshop, PictureInfo, PostScript, PreviewIFD,
|
2304
|
+
PrintIM, ProfileIFD, Qualcomm, QuickTime, RAF, RAF2, RIFF, RMETA, RSRC, RTF,
|
2305
2305
|
Radiance, Rawzor, Real, Real-CONT, Real-MDPR, Real-PROP, Real-RA3, Real-RA4,
|
2306
2306
|
Real-RA5, Real-RJMD, Reconyx, Red, Ricoh, SPIFF, SR2, SR2DataIFD, SR2SubIFD,
|
2307
2307
|
SRF#, SVG, Samsung, Sanyo, Scalado, Sigma, SigmaRaw, Sony, SonyIDC, Stim,
|
@@ -15,7 +15,7 @@ use Image::ExifTool::Exif;
|
|
15
15
|
use Image::ExifTool::XMP;
|
16
16
|
use Image::ExifTool::GPS;
|
17
17
|
|
18
|
-
$VERSION = '1.
|
18
|
+
$VERSION = '1.03';
|
19
19
|
|
20
20
|
my %convFloat2 = (
|
21
21
|
PrintConv => 'sprintf("%+.2f", $val)',
|
@@ -44,6 +44,32 @@ my %convFloat2 = (
|
|
44
44
|
0x0b => { Name => 'CameraRoll', Writable => 'float', %convFloat2 },
|
45
45
|
);
|
46
46
|
|
47
|
+
# thermal parameters in APP4 of DJI ZH20T images (ref forum11401)
|
48
|
+
%Image::ExifTool::DJI::ThermalParams = (
|
49
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
50
|
+
GROUPS => { 0 => 'APP4', 2 => 'Image' },
|
51
|
+
NOTES => 'Thermal parameters extracted from APP4 of DJI RJPEG files from the ZH20T.',
|
52
|
+
# 0x00 - 0xaa551206 - temperature header magic number
|
53
|
+
0x24 => { Name => 'K1', Format => 'float' },
|
54
|
+
0x28 => { Name => 'K2', Format => 'float' },
|
55
|
+
0x2c => { Name => 'K3', Format => 'float' },
|
56
|
+
0x30 => { Name => 'K4', Format => 'float' },
|
57
|
+
0x34 => { Name => 'KF', Format => 'float' },
|
58
|
+
0x38 => { Name => 'B1', Format => 'float' },
|
59
|
+
0x3c => { Name => 'B2', Format => 'float' },
|
60
|
+
0x44 => { Name => 'ObjectDistance', Format => 'int16u' },
|
61
|
+
0x46 => { Name => 'RelativeHumidity', Format => 'int16u' },
|
62
|
+
0x48 => { Name => 'Emissivity', Format => 'int16u' },
|
63
|
+
0x4a => { Name => 'Reflection', Format => 'int16u', },
|
64
|
+
0x4c => { Name => 'AmbientTemperature', Format => 'int16u' }, # (aka D1)
|
65
|
+
0x50 => { Name => 'D2', Format => 'int32s' },
|
66
|
+
0x54 => { Name => 'KJ', Format => 'int16u' },
|
67
|
+
0x56 => { Name => 'DB', Format => 'int16u' },
|
68
|
+
0x58 => { Name => 'KK', Format => 'int16u' },
|
69
|
+
# 0x500 - 0x55aa1206 - device header magic number
|
70
|
+
# (nothing yet decoded from device header)
|
71
|
+
);
|
72
|
+
|
47
73
|
%Image::ExifTool::DJI::XMP = (
|
48
74
|
%Image::ExifTool::XMP::xmpTableDefaults,
|
49
75
|
GROUPS => { 0 => 'XMP', 1 => 'XMP-drone-dji', 2 => 'Location' },
|
@@ -16,7 +16,7 @@ $VERSION = '1.30';
|
|
16
16
|
sub ProcessOcad($$$);
|
17
17
|
sub ProcessJPEG_HDR($$$);
|
18
18
|
|
19
|
-
# (
|
19
|
+
# (most of the tags in this table are for documentation purposes only)
|
20
20
|
%Image::ExifTool::JPEG::Main = (
|
21
21
|
NOTES => q{
|
22
22
|
This table lists information extracted by ExifTool from JPEG images. See
|
@@ -96,6 +96,12 @@ sub ProcessJPEG_HDR($$$);
|
|
96
96
|
Name => 'Stim',
|
97
97
|
Condition => '$$valPt =~ /^Stim\0/',
|
98
98
|
SubDirectory => { TagTable => 'Image::ExifTool::Stim::Main' },
|
99
|
+
}, {
|
100
|
+
Name => 'ThermalData', # (written by DJI FLIR models)
|
101
|
+
Condition => '$$self{Make} eq "DJI"',
|
102
|
+
Notes => 'DJI raw thermal data',
|
103
|
+
Groups => { 0 => 'APP3', 1 => 'DJI', 2 => 'Image' },
|
104
|
+
Binary => 1,
|
99
105
|
}, {
|
100
106
|
Name => 'PreviewImage', # (written by HP R837 and Samsung S1060)
|
101
107
|
Condition => '$$valPt =~ /^\xff\xd8\xff\xdb/',
|
@@ -109,6 +115,10 @@ sub ProcessJPEG_HDR($$$);
|
|
109
115
|
Name => 'FPXR', # (non-standard location written by some HP models)
|
110
116
|
Condition => '$$valPt =~ /^FPXR\0/',
|
111
117
|
SubDirectory => { TagTable => 'Image::ExifTool::FlashPix::Main' },
|
118
|
+
}, {
|
119
|
+
Name => 'ThermalParams', # (written by DJI FLIR models)
|
120
|
+
Condition => '$$self{Make} eq "DJI" and $$valPt =~ /^\xaa\x55\x12\x06/',
|
121
|
+
SubDirectory => { TagTable => 'Image::ExifTool::DJI::ThermalParams' },
|
112
122
|
}, {
|
113
123
|
Name => 'PreviewImage', # (eg. Samsung S1060)
|
114
124
|
Notes => 'continued from APP3',
|
@@ -121,6 +131,12 @@ sub ProcessJPEG_HDR($$$);
|
|
121
131
|
Name => 'SamsungUniqueID',
|
122
132
|
Condition => '$$valPt =~ /ssuniqueid\0/',
|
123
133
|
SubDirectory => { TagTable => 'Image::ExifTool::Samsung::APP5' },
|
134
|
+
}, {
|
135
|
+
Name => 'ThermalCalibration', # (written by DJI FLIR models)
|
136
|
+
Condition => '$$self{Make} eq "DJI"',
|
137
|
+
Notes => 'DJI thermal calibration data',
|
138
|
+
Groups => { 0 => 'APP5', 1 => 'DJI', 2 => 'Image' },
|
139
|
+
Binary => 1,
|
124
140
|
}, {
|
125
141
|
Name => 'PreviewImage', # (eg. BenQ DC E1050)
|
126
142
|
Notes => 'continued from APP4',
|
@@ -142,6 +158,12 @@ sub ProcessJPEG_HDR($$$);
|
|
142
158
|
Condition => '$$valPt =~ /^GoPro\0/',
|
143
159
|
SubDirectory => { TagTable => 'Image::ExifTool::GoPro::GPMF' },
|
144
160
|
# also seen Motorola APP6 "MMIMETA\0", with sub-types: AL3A,ALED,MMI0,MOTD,QC3A
|
161
|
+
}, {
|
162
|
+
Name => 'DJI_DTAT', # (written by ZH20T)
|
163
|
+
Condition => '$$valPt =~ /^DTAT\0\0.\{/s',
|
164
|
+
Groups => { 0 => 'APP6', 1 => 'DJI' },
|
165
|
+
Notes => 'DJI Thermal Analysis Tool record',
|
166
|
+
ValueConv => 'substr($val,7)',
|
145
167
|
}],
|
146
168
|
APP7 => [{
|
147
169
|
Name => 'Pentax',
|
@@ -62,7 +62,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
62
62
|
use Image::ExifTool::Exif;
|
63
63
|
use Image::ExifTool::GPS;
|
64
64
|
|
65
|
-
$VERSION = '3.
|
65
|
+
$VERSION = '3.91';
|
66
66
|
|
67
67
|
sub LensIDConv($$$);
|
68
68
|
sub ProcessNikonAVI($$$);
|
@@ -886,33 +886,33 @@ my %afPoints39 = (
|
|
886
886
|
# AF point indices for models with 105 focus points, eg. D6 (ref 28)
|
887
887
|
# - 7 rows (A-G) with 15 columns (1-15), center is D8
|
888
888
|
my %afPoints105 = (
|
889
|
-
1 => 'D8', 28 => 'G7', 55 => 'F13', 82 => 'E4',
|
890
|
-
2 => 'C8', 29 => 'D6', 56 => 'G13', 83 => 'F4',
|
891
|
-
3 => 'B8', 30 => 'C6', 57 => 'D14', 84 => 'G4',
|
892
|
-
4 => 'A8', 31 => 'B6', 58 => 'C14', 85 => 'D3',
|
893
|
-
5 => 'E8', 32 => 'A6', 59 => 'B14', 86 => 'C3',
|
894
|
-
6 => 'F8', 33 => 'E6', 60 => 'A14', 87 => 'B3',
|
889
|
+
1 => 'D8', 28 => 'G7', 55 => 'F13', 82 => 'E4',
|
890
|
+
2 => 'C8', 29 => 'D6', 56 => 'G13', 83 => 'F4',
|
891
|
+
3 => 'B8', 30 => 'C6', 57 => 'D14', 84 => 'G4',
|
892
|
+
4 => 'A8', 31 => 'B6', 58 => 'C14', 85 => 'D3',
|
893
|
+
5 => 'E8', 32 => 'A6', 59 => 'B14', 86 => 'C3',
|
894
|
+
6 => 'F8', 33 => 'E6', 60 => 'A14', 87 => 'B3',
|
895
895
|
7 => 'G8', 34 => 'F6', 61 => 'E14', 88 => 'A3',
|
896
|
-
8 => 'D9', 35 => 'G6', 62 => 'F14', 89 => 'E3',
|
897
|
-
9 => 'C9', 36 => 'D11', 63 => 'G14', 90 => 'F3',
|
898
|
-
10 => 'B9', 37 => 'C11', 64 => 'D15', 91 => 'G3',
|
899
|
-
11 => 'A9', 38 => 'B11', 65 => 'C15', 92 => 'D2',
|
900
|
-
12 => 'E9', 39 => 'A11', 66 => 'B15', 93 => 'C2',
|
901
|
-
13 => 'F9', 40 => 'E11', 67 => 'A15', 94 => 'B2',
|
902
|
-
14 => 'G9', 41 => 'F11', 68 => 'E15', 95 => 'A2',
|
903
|
-
15 => 'D10', 42 => 'G11', 69 => 'F15', 96 => 'E2',
|
904
|
-
16 => 'C10', 43 => 'D12', 70 => 'G15', 97 => 'F2',
|
905
|
-
17 => 'B10', 44 => 'C12', 71 => 'D5', 98 => 'G2',
|
906
|
-
18 => 'A10', 45 => 'B12', 72 => 'C5', 99 => 'D1',
|
907
|
-
19 => 'E10', 46 => 'A12', 73 => 'B5', 100 => 'C1',
|
908
|
-
20 => 'F10', 47 => 'E12', 74 => 'A5', 101 => 'B1',
|
896
|
+
8 => 'D9', 35 => 'G6', 62 => 'F14', 89 => 'E3',
|
897
|
+
9 => 'C9', 36 => 'D11', 63 => 'G14', 90 => 'F3',
|
898
|
+
10 => 'B9', 37 => 'C11', 64 => 'D15', 91 => 'G3',
|
899
|
+
11 => 'A9', 38 => 'B11', 65 => 'C15', 92 => 'D2',
|
900
|
+
12 => 'E9', 39 => 'A11', 66 => 'B15', 93 => 'C2',
|
901
|
+
13 => 'F9', 40 => 'E11', 67 => 'A15', 94 => 'B2',
|
902
|
+
14 => 'G9', 41 => 'F11', 68 => 'E15', 95 => 'A2',
|
903
|
+
15 => 'D10', 42 => 'G11', 69 => 'F15', 96 => 'E2',
|
904
|
+
16 => 'C10', 43 => 'D12', 70 => 'G15', 97 => 'F2',
|
905
|
+
17 => 'B10', 44 => 'C12', 71 => 'D5', 98 => 'G2',
|
906
|
+
18 => 'A10', 45 => 'B12', 72 => 'C5', 99 => 'D1',
|
907
|
+
19 => 'E10', 46 => 'A12', 73 => 'B5', 100 => 'C1',
|
908
|
+
20 => 'F10', 47 => 'E12', 74 => 'A5', 101 => 'B1',
|
909
909
|
21 => 'G10', 48 => 'F12', 75 => 'E5', 102 => 'A1',
|
910
|
-
22 => 'D7', 49 => 'G12', 76 => 'F5', 103 => 'E1',
|
911
|
-
23 => 'C7', 50 => 'D13', 77 => 'G5', 104 => 'F1',
|
912
|
-
24 => 'B7', 51 => 'C13', 78 => 'D4', 105 => 'G1',
|
913
|
-
25 => 'A7', 52 => 'B13', 79 => 'C4',
|
914
|
-
26 => 'E7', 53 => 'A13', 80 => 'B4',
|
915
|
-
27 => 'F7', 54 => 'E13', 81 => 'A4',
|
910
|
+
22 => 'D7', 49 => 'G12', 76 => 'F5', 103 => 'E1',
|
911
|
+
23 => 'C7', 50 => 'D13', 77 => 'G5', 104 => 'F1',
|
912
|
+
24 => 'B7', 51 => 'C13', 78 => 'D4', 105 => 'G1',
|
913
|
+
25 => 'A7', 52 => 'B13', 79 => 'C4',
|
914
|
+
26 => 'E7', 53 => 'A13', 80 => 'B4',
|
915
|
+
27 => 'F7', 54 => 'E13', 81 => 'A4',
|
916
916
|
);
|
917
917
|
|
918
918
|
# AF point indices for models with 135 focus points, eg. 1J1 (ref PH)
|
@@ -1097,7 +1097,12 @@ my %binaryDataAttrs = (
|
|
1097
1097
|
0x0004 => { Name => 'Quality', Writable => 'string' },
|
1098
1098
|
0x0005 => { Name => 'WhiteBalance', Writable => 'string' },
|
1099
1099
|
0x0006 => { Name => 'Sharpness', Writable => 'string' },
|
1100
|
-
0x0007 => {
|
1100
|
+
0x0007 => {
|
1101
|
+
Name => 'FocusMode',
|
1102
|
+
DataMember => 'FocusMode',
|
1103
|
+
Writable => 'string',
|
1104
|
+
RawConv => '$$self{FocusMode} = $val',
|
1105
|
+
},
|
1101
1106
|
# FlashSetting (better named FlashSyncMode, ref 28) values:
|
1102
1107
|
# "Normal", "Slow", "Rear Slow", "RED-EYE", "RED-EYE SLOW"
|
1103
1108
|
0x0008 => { Name => 'FlashSetting', Writable => 'string' },
|
@@ -1424,12 +1429,27 @@ my %binaryDataAttrs = (
|
|
1424
1429
|
Count => 4,
|
1425
1430
|
# (may need to divide by 4 for some images, eg. D3300/D5300, 12 bit - ref IB)
|
1426
1431
|
},
|
1432
|
+
0x003e => { #28
|
1433
|
+
Name => 'ImageSizeRAW',
|
1434
|
+
PrintConv => {
|
1435
|
+
1 => 'Large',
|
1436
|
+
2 => 'Medium',
|
1437
|
+
3 => 'Small',
|
1438
|
+
},
|
1439
|
+
},
|
1427
1440
|
0x0045 => { #IB
|
1428
1441
|
Name => 'CropArea',
|
1429
1442
|
Notes => 'left, top, width, height',
|
1430
1443
|
Writable => 'int16u',
|
1431
1444
|
Count => 4,
|
1432
1445
|
},
|
1446
|
+
0x004e => { #28
|
1447
|
+
Name => 'NikonSettings',
|
1448
|
+
Writable => 'undef',
|
1449
|
+
Permanent => 0,
|
1450
|
+
Flags => [ 'Binary', 'Protected' ],
|
1451
|
+
SubDirectory => { TagTable => 'Image::ExifTool::NikonSettings::Main' },
|
1452
|
+
},
|
1433
1453
|
0x004f => { #IB (D850)
|
1434
1454
|
Name => 'ColorTemperatureAuto',
|
1435
1455
|
Writable => 'int16u',
|
@@ -1500,6 +1520,7 @@ my %binaryDataAttrs = (
|
|
1500
1520
|
7 => 'Fired, External', #14
|
1501
1521
|
8 => 'Fired, Commander Mode',
|
1502
1522
|
9 => 'Fired, TTL Mode',
|
1523
|
+
18 => 'Fired, Sync Mode', #G.F. (movie LED light)
|
1503
1524
|
},
|
1504
1525
|
},
|
1505
1526
|
0x0088 => [
|
@@ -1828,9 +1849,9 @@ my %binaryDataAttrs = (
|
|
1828
1849
|
Condition => '$$valPt =~ /^0246/',
|
1829
1850
|
Name => 'ShotInfoD6',
|
1830
1851
|
SubDirectory => {
|
1831
|
-
TagTable => 'Image::ExifTool::Nikon::
|
1852
|
+
TagTable => 'Image::ExifTool::Nikon::ShotInfoD6',
|
1832
1853
|
DecryptStart => 4,
|
1833
|
-
DecryptLen =>
|
1854
|
+
DecryptLen => 0xc21a + 12,
|
1834
1855
|
ByteOrder => 'LittleEndian',
|
1835
1856
|
},
|
1836
1857
|
},
|
@@ -1844,6 +1865,16 @@ my %binaryDataAttrs = (
|
|
1844
1865
|
ByteOrder => 'BigEndian',
|
1845
1866
|
},
|
1846
1867
|
},
|
1868
|
+
{ # (Z6_2 firmware version 1.00 and Z7_2 firmware versions 1.00 & 1.01, ref 28)
|
1869
|
+
Condition => '$$valPt =~ /^0800/ or $$valPt =~ /^0803/',
|
1870
|
+
Name => 'ShotInfoZ7_2',
|
1871
|
+
SubDirectory => {
|
1872
|
+
TagTable => 'Image::ExifTool::Nikon::ShotInfoZ7_2',
|
1873
|
+
DecryptStart => 4,
|
1874
|
+
DecryptLen => 0xce32 + 12,
|
1875
|
+
ByteOrder => 'LittleEndian',
|
1876
|
+
},
|
1877
|
+
},
|
1847
1878
|
{ # D7100=0227, Z6/Z7=0800
|
1848
1879
|
Condition => '$$valPt =~ /^0[28]/',
|
1849
1880
|
Name => 'ShotInfo02xx',
|
@@ -2218,6 +2249,11 @@ my %binaryDataAttrs = (
|
|
2218
2249
|
Name => 'FlashInfo0107', # (0107 for D4S/D750/D810/D5500/D7200, 0108 for D5/D500/D3400)
|
2219
2250
|
Condition => '$$valPt =~ /^010[78]/',
|
2220
2251
|
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::FlashInfo0107' },
|
2252
|
+
},
|
2253
|
+
{
|
2254
|
+
Name => 'FlashInfo0300', # (Z7_2)
|
2255
|
+
Condition => '$$valPt =~ /^0300/',
|
2256
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::FlashInfo0300' },
|
2221
2257
|
},
|
2222
2258
|
{
|
2223
2259
|
Name => 'FlashInfoUnknown',
|
@@ -3381,13 +3417,13 @@ my %binaryDataAttrs = (
|
|
3381
3417
|
130 => 'Subject Tracking (41 points)', #PH (NC)
|
3382
3418
|
131 => 'Face Priority (41 points)', #PH (NC)
|
3383
3419
|
192 => 'Pinpoint', #PH (Z7)
|
3384
|
-
193 => 'Single', #PH (Z7)
|
3420
|
+
193 => 'Single', #PH (Z7)
|
3385
3421
|
194 => 'Dynamic', #PH (Z7)
|
3386
3422
|
195 => 'Wide (S)', #PH (Z7)
|
3387
3423
|
196 => 'Wide (L)', #PH (Z7)
|
3388
3424
|
197 => 'Auto', #PH (Z7)
|
3389
|
-
198 => 'Auto (
|
3390
|
-
199 => 'Auto (
|
3425
|
+
198 => 'Auto (People)', #28 (Z7) #if no faces are detected, will record as 'Auto'. Camera setting recorded in AFAreaMode field in the MakerNotes area
|
3426
|
+
199 => 'Auto (Animal)', #28 (Z7) #if no animals are detected, will record as 'Auto'. Camera setting recorded in AFAreaMode field in the MakerNotes area
|
3391
3427
|
200 => 'Normal-area AF', #28 (D6)
|
3392
3428
|
201 => 'Wide-area AF', #28 (D6)
|
3393
3429
|
202 => 'Face-priority AF', #28 (D6)
|
@@ -3682,7 +3718,7 @@ my %binaryDataAttrs = (
|
|
3682
3718
|
],
|
3683
3719
|
0x0a => { #28 (D6) in any of the 3 Group modes on the D6, the points specify the outer boundaries of the focus point area; otherwise the tag value is consistent with other Nikon bodies
|
3684
3720
|
Name => 'AFPointsUsed',
|
3685
|
-
Condition => '$$self{AFInfo2Version} eq "0301" and $$self{PhaseDetectAF} == 9',
|
3721
|
+
Condition => '$$self{AFInfo2Version} eq "0301" and $$self{PhaseDetectAF} == 9',
|
3686
3722
|
Notes => q{
|
3687
3723
|
models with 105-point AF -- 7 rows (A-G) and 15 columns (1-15). Center
|
3688
3724
|
point is D8
|
@@ -3771,6 +3807,14 @@ my %binaryDataAttrs = (
|
|
3771
3807
|
},
|
3772
3808
|
Format => 'int16u',
|
3773
3809
|
},
|
3810
|
+
0x2f => { #28 (Z7) Still photography range 1-17 for the 493 point Z7 (arranged in a 29x17 grid. Center at x=16, y=10).
|
3811
|
+
Name => 'AFFocusPointXPosition',
|
3812
|
+
Condition => q{
|
3813
|
+
$$self{ContrastDetectAF} == 2 and $$self{AFInfo2Version} =~ /^03/ or
|
3814
|
+
$$self{ContrastDetectAF} == 1 and $$self{AFInfo2Version} =~ /^0301/
|
3815
|
+
},
|
3816
|
+
PrintConv => sub { my ($val) = @_; PrintAFPointsLeftRight($val, 29 ); },
|
3817
|
+
},
|
3774
3818
|
0x30 => [
|
3775
3819
|
{ #PH (Z7)
|
3776
3820
|
Name => 'AFAreaYPosition',
|
@@ -3790,6 +3834,14 @@ my %binaryDataAttrs = (
|
|
3790
3834
|
PrintConvInv => sub { PrintAFPointsInv(shift, \%afPoints153); },
|
3791
3835
|
},
|
3792
3836
|
],
|
3837
|
+
0x31 => { #28 (Z7)
|
3838
|
+
Name => 'AFFocusPointYPosition',
|
3839
|
+
Condition => q{
|
3840
|
+
$$self{ContrastDetectAF} == 2 and $$self{AFInfo2Version} =~ /^03/ or
|
3841
|
+
$$self{ContrastDetectAF} == 1 and $$self{AFInfo2Version} =~ /^0301/
|
3842
|
+
},
|
3843
|
+
PrintConv => sub { my ($val) = @_; PrintAFPointsUpDown($val, 17 ); },
|
3844
|
+
},
|
3793
3845
|
0x32 => { #PH (Z7)
|
3794
3846
|
Name => 'AFAreaWidth',
|
3795
3847
|
Condition => '$$self{AFInfo2Version} =~ /^03/',
|
@@ -6394,6 +6446,77 @@ my %nikonFocalConversions = (
|
|
6394
6446
|
},
|
6395
6447
|
# note: DecryptLen currently set to OtherOffset + 0x2ea5 - 0x2c90
|
6396
6448
|
);
|
6449
|
+
|
6450
|
+
# shot information for the D6 firmware 1.00 (encrypted) - ref 28
|
6451
|
+
%Image::ExifTool::Nikon::ShotInfoD6 = (
|
6452
|
+
PROCESS_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted,
|
6453
|
+
WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted,
|
6454
|
+
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
6455
|
+
VARS => { ID_LABEL => 'Index' },
|
6456
|
+
DATAMEMBER => [ 0x9c, 0xc219 ],
|
6457
|
+
WRITABLE => 1,
|
6458
|
+
FIRST_ENTRY => 0,
|
6459
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
6460
|
+
NOTES => 'These tags are extracted from encrypted data in images from the D6.',
|
6461
|
+
0x00 => {
|
6462
|
+
Name => 'ShotInfoVersion',
|
6463
|
+
Format => 'string[4]',
|
6464
|
+
Writable => 0,
|
6465
|
+
},
|
6466
|
+
0x24 => {
|
6467
|
+
Name => 'NumberOffsets', # (number of entries in offset table. offsets are from start of ShotInfo data)
|
6468
|
+
DataMember => 'NumberOffsets',
|
6469
|
+
Format => 'int32u',
|
6470
|
+
Writable => 0,
|
6471
|
+
Hidden => 1,
|
6472
|
+
},
|
6473
|
+
0x9c => {
|
6474
|
+
Name => 'OrientationOffset',
|
6475
|
+
DataMember => 'OrientationOffset',
|
6476
|
+
Format => 'int32u',
|
6477
|
+
Writable => 0,
|
6478
|
+
Hidden => 1,
|
6479
|
+
RawConv => '$$self{OrientationOffset} = $val || 0x10000000; undef', # (ignore if 0)
|
6480
|
+
},
|
6481
|
+
### 0xc21a - OrientationInfo start (D6 firmware 1.00)
|
6482
|
+
0xc219 => {
|
6483
|
+
Name => 'Hook1',
|
6484
|
+
Hidden => 1,
|
6485
|
+
RawConv => 'undef',
|
6486
|
+
# account for variable location of OrientationInfo data
|
6487
|
+
Hook => '$varSize = $$self{OrientationOffset} - 0xc21a',
|
6488
|
+
},
|
6489
|
+
|
6490
|
+
0xc21a => {
|
6491
|
+
Name => 'RollAngle',
|
6492
|
+
Format => 'fixed32u',
|
6493
|
+
Notes => 'converted to degrees of clockwise camera roll',
|
6494
|
+
ValueConv => '$val <= 180 ? $val : $val - 360',
|
6495
|
+
ValueConvInv => '$val >= 0 ? $val : $val + 360',
|
6496
|
+
PrintConv => 'sprintf("%.1f", $val)',
|
6497
|
+
PrintConvInv => '$val',
|
6498
|
+
},
|
6499
|
+
0xc21e => {
|
6500
|
+
Name => 'PitchAngle',
|
6501
|
+
Format => 'fixed32u',
|
6502
|
+
Notes => 'converted to degrees of upward camera tilt',
|
6503
|
+
ValueConv => '$val <= 180 ? $val : $val - 360',
|
6504
|
+
ValueConvInv => '$val >= 0 ? $val : $val + 360',
|
6505
|
+
PrintConv => 'sprintf("%.1f", $val)',
|
6506
|
+
PrintConvInv => '$val',
|
6507
|
+
},
|
6508
|
+
0xc222 => {
|
6509
|
+
Name => 'YawAngle',
|
6510
|
+
Format => 'fixed32u',
|
6511
|
+
Notes => 'the camera yaw angle when shooting in portrait orientation',
|
6512
|
+
ValueConv => '$val <= 180 ? $val : $val - 360',
|
6513
|
+
ValueConvInv => '$val >= 0 ? $val : $val + 360',
|
6514
|
+
PrintConv => 'sprintf("%.1f", $val)',
|
6515
|
+
PrintConvInv => '$val',
|
6516
|
+
},
|
6517
|
+
# note: DecryptLen currently set to 0xc21a + 12
|
6518
|
+
);
|
6519
|
+
|
6397
6520
|
# shot information for the D610 firmware 1.00 (encrypted) - ref PH
|
6398
6521
|
%Image::ExifTool::Nikon::ShotInfoD610 = (
|
6399
6522
|
PROCESS_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted,
|
@@ -7211,6 +7334,98 @@ my %nikonFocalConversions = (
|
|
7211
7334
|
# note: DecryptLen currently set to 0x3697
|
7212
7335
|
);
|
7213
7336
|
|
7337
|
+
# shot information for the Z7_2 firmware 1.00 (encrypted) - ref 28
|
7338
|
+
%Image::ExifTool::Nikon::ShotInfoZ7_2 = (
|
7339
|
+
PROCESS_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted,
|
7340
|
+
WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted,
|
7341
|
+
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
7342
|
+
VARS => { ID_LABEL => 'Index' },
|
7343
|
+
DATAMEMBER => [ 0x04, 0x0e, 0x18, 0x98, 0xce31 ],
|
7344
|
+
WRITABLE => 1,
|
7345
|
+
FIRST_ENTRY => 0,
|
7346
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
7347
|
+
NOTES => 'These tags are extracted from encrypted data in images from the Z7_2.',
|
7348
|
+
0x00 => {
|
7349
|
+
Name => 'ShotInfoVersion',
|
7350
|
+
Format => 'string[4]',
|
7351
|
+
Writable => 0,
|
7352
|
+
},
|
7353
|
+
0x04 => {
|
7354
|
+
Name => 'FirmwareVersion',
|
7355
|
+
DataMember => 'FirmwareVersion',
|
7356
|
+
Format => 'string[8]',
|
7357
|
+
Writable => 0,
|
7358
|
+
RawConv => '$$self{FirmwareVersion} = $val',
|
7359
|
+
},
|
7360
|
+
0x0E => {
|
7361
|
+
Name => 'FirmwareVersion2',
|
7362
|
+
Format => 'string[8]',
|
7363
|
+
Writable => 0,
|
7364
|
+
RawConv => '$$self{FirmwareVersion2} = $val',
|
7365
|
+
Hidden => 1,
|
7366
|
+
},
|
7367
|
+
0x18 => {
|
7368
|
+
Name => 'FirmwareVersion3',
|
7369
|
+
Format => 'string[8]',
|
7370
|
+
Writable => 0,
|
7371
|
+
RawConv => '$$self{FirmwareVersion3} = $val',
|
7372
|
+
Hidden => 1,
|
7373
|
+
},
|
7374
|
+
0x24 => {
|
7375
|
+
Name => 'NumberOffsets', #number of entries in offset table. offsets are from start of ShotInfo data.
|
7376
|
+
DataMember => 'NumberOffsets',
|
7377
|
+
Format => 'int32u',
|
7378
|
+
Writable => 0,
|
7379
|
+
Hidden => 1,
|
7380
|
+
},
|
7381
|
+
0x98 => {
|
7382
|
+
Name => 'OrientationOffset',
|
7383
|
+
DataMember => 'OrientationOffset',
|
7384
|
+
Format => 'int32u',
|
7385
|
+
Writable => 0,
|
7386
|
+
Hidden => 1,
|
7387
|
+
RawConv => '$$self{OrientationOffset} = $val || 0x10000000; undef', # (ignore if 0)
|
7388
|
+
},
|
7389
|
+
|
7390
|
+
### 0xce32 - OrientationInfo start (Z7_2 firmware 1.00)
|
7391
|
+
0xce31 => {
|
7392
|
+
Name => 'Hook1',
|
7393
|
+
Hidden => 1,
|
7394
|
+
RawConv => 'undef',
|
7395
|
+
# account for variable location of OrientationInfo data
|
7396
|
+
Hook => '$varSize = $$self{OrientationOffset} - 0xce32',
|
7397
|
+
},
|
7398
|
+
|
7399
|
+
0xce32 => {
|
7400
|
+
Name => 'RollAngle',
|
7401
|
+
Format => 'fixed32u',
|
7402
|
+
Notes => 'converted to degrees of clockwise camera roll',
|
7403
|
+
ValueConv => '$val <= 180 ? $val : $val - 360',
|
7404
|
+
ValueConvInv => '$val >= 0 ? $val : $val + 360',
|
7405
|
+
PrintConv => 'sprintf("%.1f", $val)',
|
7406
|
+
PrintConvInv => '$val',
|
7407
|
+
},
|
7408
|
+
0xce36 => {
|
7409
|
+
Name => 'PitchAngle',
|
7410
|
+
Format => 'fixed32u',
|
7411
|
+
Notes => 'converted to degrees of upward camera tilt',
|
7412
|
+
ValueConv => '$val <= 180 ? $val : $val - 360',
|
7413
|
+
ValueConvInv => '$val >= 0 ? $val : $val + 360',
|
7414
|
+
PrintConv => 'sprintf("%.1f", $val)',
|
7415
|
+
PrintConvInv => '$val',
|
7416
|
+
},
|
7417
|
+
0xce3a => {
|
7418
|
+
Name => 'YawAngle',
|
7419
|
+
Format => 'fixed32u',
|
7420
|
+
Notes => 'the camera yaw angle when shooting in portrait orientation',
|
7421
|
+
ValueConv => '$val <= 180 ? $val : $val - 360',
|
7422
|
+
ValueConvInv => '$val >= 0 ? $val : $val + 360',
|
7423
|
+
PrintConv => 'sprintf("%.1f", $val)',
|
7424
|
+
PrintConvInv => '$val',
|
7425
|
+
},
|
7426
|
+
#note: DecryptLen currently set to 0xce32 + 12
|
7427
|
+
);
|
7428
|
+
|
7214
7429
|
# Flash information (ref JD)
|
7215
7430
|
%Image::ExifTool::Nikon::FlashInfo0100 = (
|
7216
7431
|
%binaryDataAttrs,
|
@@ -8105,6 +8320,42 @@ my %nikonFocalConversions = (
|
|
8105
8320
|
],
|
8106
8321
|
);
|
8107
8322
|
|
8323
|
+
# Flash information for the Z7_2 (ref 28)
|
8324
|
+
# (likey similar to FlashInfo010 and FlashInfo0108 with addition of support for radio controlled units such as the SB-5000?
|
8325
|
+
%Image::ExifTool::Nikon::FlashInfo0300 = (
|
8326
|
+
%binaryDataAttrs,
|
8327
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
8328
|
+
0 => {
|
8329
|
+
Name => 'FlashInfoVersion',
|
8330
|
+
Format => 'string[4]',
|
8331
|
+
Writable => 0,
|
8332
|
+
},
|
8333
|
+
4 => {
|
8334
|
+
Name => 'FlashSource',
|
8335
|
+
PrintConv => {
|
8336
|
+
0 => 'None',
|
8337
|
+
1 => 'External',
|
8338
|
+
2 => 'Internal',
|
8339
|
+
},
|
8340
|
+
},
|
8341
|
+
6 => {
|
8342
|
+
Format => 'int8u[2]',
|
8343
|
+
Name => 'ExternalFlashFirmware',
|
8344
|
+
SeparateTable => 'FlashFirmware',
|
8345
|
+
PrintConv => \%flashFirmware,
|
8346
|
+
},
|
8347
|
+
27 => {
|
8348
|
+
Name => 'FlashCompensation',
|
8349
|
+
# this is the compensation from the camera (0x0012) for "Built-in" FlashType, or
|
8350
|
+
# the compensation from the external unit (0x0017) for "Optional" FlashType - PH
|
8351
|
+
Format => 'int8s',
|
8352
|
+
Priority => 0,
|
8353
|
+
ValueConv => '-$val/6',
|
8354
|
+
ValueConvInv => '-6 * $val',
|
8355
|
+
PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)',
|
8356
|
+
PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
|
8357
|
+
},
|
8358
|
+
);
|
8108
8359
|
# Unknown Flash information
|
8109
8360
|
%Image::ExifTool::Nikon::FlashInfoUnknown = (
|
8110
8361
|
%binaryDataAttrs,
|
@@ -9262,6 +9513,32 @@ sub PrintAFPointsGridInv($$$)
|
|
9262
9513
|
return join(" ", unpack("H2"x$size, pack('C*', @dat)));
|
9263
9514
|
}
|
9264
9515
|
|
9516
|
+
#------------------------------------------------------------------------------
|
9517
|
+
# Print conversion for relative Left/Right AF points (ref 28)
|
9518
|
+
# Inputs: 0) column, 1) number of columns
|
9519
|
+
# Returns: AF point data as a string (e.g. '2L' or 'C' or '3R')
|
9520
|
+
sub PrintAFPointsLeftRight($$)
|
9521
|
+
{
|
9522
|
+
my ($col, $ncol) = @_;
|
9523
|
+
my $center = 1 + ($ncol + 1)/2;
|
9524
|
+
return 'C' if $col == $center;
|
9525
|
+
return sprintf('%d', $center - $col) . 'L of Center' if $col < $center;
|
9526
|
+
return sprintf('%d', $col - $center) . 'R of Center' if $col > $center;
|
9527
|
+
}
|
9528
|
+
|
9529
|
+
#------------------------------------------------------------------------------
|
9530
|
+
# Print conversion for relative Up/Down AF points (ref 28)
|
9531
|
+
# Inputs: 0) column, 1) number of columns
|
9532
|
+
# Returns: AF point data as a string (e.g. '2U' or 'C' or '3D')
|
9533
|
+
sub PrintAFPointsUpDown($$)
|
9534
|
+
{
|
9535
|
+
my ($row, $nrow) = @_;
|
9536
|
+
my $center = 1 + ($nrow + 1)/2;
|
9537
|
+
return 'C' if $row == $center;
|
9538
|
+
return sprintf('%d', $center - $row) . 'U from Center' if $row < $center;
|
9539
|
+
return sprintf('%d', $row - $center) . 'D from Center' if $row > $center;
|
9540
|
+
}
|
9541
|
+
|
9265
9542
|
#------------------------------------------------------------------------------
|
9266
9543
|
# Print PictureControl value
|
9267
9544
|
# Inputs: 0) value (with 0x80 subtracted),
|