exiftool-vendored.pl 12.91.0 → 12.97.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/Changes +58 -3
- package/bin/META.json +1 -1
- package/bin/META.yml +1 -1
- package/bin/README +2 -2
- package/bin/exiftool +41 -57
- package/bin/lib/Image/ExifTool/Canon.pm +136 -3
- package/bin/lib/Image/ExifTool/Font.pm +15 -4
- package/bin/lib/Image/ExifTool/FujiFilm.pm +23 -1
- package/bin/lib/Image/ExifTool/Geotag.pm +19 -5
- package/bin/lib/Image/ExifTool/InDesign.pm +17 -3
- package/bin/lib/Image/ExifTool/Jpeg2000.pm +3 -3
- package/bin/lib/Image/ExifTool/Nikon.pm +356 -62
- package/bin/lib/Image/ExifTool/NikonCustom.pm +421 -11
- package/bin/lib/Image/ExifTool/NikonSettings.pm +56 -1
- package/bin/lib/Image/ExifTool/OpenEXR.pm +3 -1
- package/bin/lib/Image/ExifTool/PostScript.pm +3 -12
- package/bin/lib/Image/ExifTool/QuickTime.pm +34 -14
- package/bin/lib/Image/ExifTool/QuickTimeStream.pl +118 -37
- package/bin/lib/Image/ExifTool/Samsung.pm +5 -3
- package/bin/lib/Image/ExifTool/TagLookup.pm +6935 -6904
- package/bin/lib/Image/ExifTool/TagNames.pod +293 -7
- package/bin/lib/Image/ExifTool/WriteQuickTime.pl +48 -16
- package/bin/lib/Image/ExifTool/Writer.pl +8 -54
- package/bin/lib/Image/ExifTool/XMP2.pl +1 -1
- package/bin/lib/Image/ExifTool.pm +66 -4
- package/bin/perl-Image-ExifTool.spec +1 -1
- package/bin/windows_exiftool.txt +2836 -0
- package/package.json +3 -3
|
@@ -14,7 +14,7 @@ use strict;
|
|
|
14
14
|
use vars qw($VERSION);
|
|
15
15
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
16
16
|
|
|
17
|
-
$VERSION = '1.
|
|
17
|
+
$VERSION = '1.08';
|
|
18
18
|
|
|
19
19
|
# map for writing metadata to InDesign files (currently only write XMP)
|
|
20
20
|
my %indMap = (
|
|
@@ -101,8 +101,22 @@ sub ProcessIND($$)
|
|
|
101
101
|
for (;;) {
|
|
102
102
|
$raf->Read($hdr, 32) or last;
|
|
103
103
|
unless (length($hdr) == 32 and $hdr =~ /^\Q$objectHeaderGUID/) {
|
|
104
|
-
# this must be null padding or we have
|
|
105
|
-
$hdr =~ /^\0
|
|
104
|
+
# this must be null padding or we have a possible error
|
|
105
|
+
last if $hdr =~ /^\0+$/;
|
|
106
|
+
# (could be up to 4095 bytes of non-null garbage plus 4095 null bytes from ExifTool)
|
|
107
|
+
$raf->Read($buff, 8196) and $hdr .= $buff;
|
|
108
|
+
$hdr =~ s/\0+$//; # remove trailing nulls
|
|
109
|
+
if (length($hdr) > 4095) {
|
|
110
|
+
$err = 'Corrupt file or unsupported InDesign version';
|
|
111
|
+
last;
|
|
112
|
+
}
|
|
113
|
+
my $non = 'Non-null padding at end of file';
|
|
114
|
+
if (not $outfile) {
|
|
115
|
+
$et->Warn($non, 1);
|
|
116
|
+
} elsif (not $et->Error($non, 1)) {
|
|
117
|
+
Write($outfile, $hdr) or $err = 1;
|
|
118
|
+
$writeLen += length $hdr;
|
|
119
|
+
}
|
|
106
120
|
last;
|
|
107
121
|
}
|
|
108
122
|
my $len = Get32u(\$hdr, 24);
|
|
@@ -16,7 +16,7 @@ use strict;
|
|
|
16
16
|
use vars qw($VERSION);
|
|
17
17
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
18
18
|
|
|
19
|
-
$VERSION = '1.
|
|
19
|
+
$VERSION = '1.40';
|
|
20
20
|
|
|
21
21
|
sub ProcessJpeg2000Box($$$);
|
|
22
22
|
sub ProcessJUMD($$$);
|
|
@@ -1442,7 +1442,7 @@ sub ProcessBrotli($$$)
|
|
|
1442
1442
|
}
|
|
1443
1443
|
} elsif ($type eq 'jumb') {
|
|
1444
1444
|
return undef if $isWriting; # (can't yet write JUMBF)
|
|
1445
|
-
Image::ExifTool::ProcessJUMB($et, \%dirInfo, $tagTablePtr); # (untested)
|
|
1445
|
+
Image::ExifTool::Jpeg2000::ProcessJUMB($et, \%dirInfo, $tagTablePtr); # (untested)
|
|
1446
1446
|
}
|
|
1447
1447
|
if ($isWriting) {
|
|
1448
1448
|
return undef unless defined $dat;
|
|
@@ -1543,7 +1543,7 @@ sub ProcessJP2($$)
|
|
|
1543
1543
|
|
|
1544
1544
|
# check to be sure this is a valid JPG2000 file
|
|
1545
1545
|
return 0 unless $raf->Read($hdr,12) == 12;
|
|
1546
|
-
unless ($hdr eq "\0\0\0\x0cjP \x0d\x0a\x87\x0a" or
|
|
1546
|
+
unless ($hdr eq "\0\0\0\x0cjP \x0d\x0a\x87\x0a" or # (ref 1)
|
|
1547
1547
|
$hdr eq "\0\0\0\x0cjP\x1a\x1a\x0d\x0a\x87\x0a" or # (ref 2)
|
|
1548
1548
|
$$et{IsJXL})
|
|
1549
1549
|
{
|
|
@@ -65,7 +65,7 @@ use Image::ExifTool::Exif;
|
|
|
65
65
|
use Image::ExifTool::GPS;
|
|
66
66
|
use Image::ExifTool::XMP;
|
|
67
67
|
|
|
68
|
-
$VERSION = '4.
|
|
68
|
+
$VERSION = '4.38';
|
|
69
69
|
|
|
70
70
|
sub LensIDConv($$$);
|
|
71
71
|
sub ProcessNikonAVI($$$);
|
|
@@ -367,6 +367,7 @@ sub GetAFPointGrid($$;$);
|
|
|
367
367
|
'02 46 37 37 25 25 02 00' => 'Sigma 24mm F2.8 Super Wide II Macro',
|
|
368
368
|
'7E 54 37 37 0C 0C 4B 06' => 'Sigma 24mm F1.4 DG HSM | A', #30
|
|
369
369
|
'26 58 3C 3C 14 14 1C 02' => 'Sigma 28mm F1.8 EX DG Aspherical Macro',
|
|
370
|
+
'BC 54 3C 3C 0C 0C 4B 46' => 'Sigma 28mm F1.4 DG HSM | A', #30
|
|
370
371
|
'48 54 3E 3E 0C 0C 4B 06' => 'Sigma 30mm F1.4 EX DC HSM',
|
|
371
372
|
'F8 54 3E 3E 0C 0C 4B 06' => 'Sigma 30mm F1.4 EX DC HSM', #JD
|
|
372
373
|
'91 54 44 44 0C 0C 4B 06' => 'Sigma 35mm F1.4 DG HSM', #30
|
|
@@ -954,6 +955,7 @@ my %hdrLevelZ8 = (
|
|
|
954
955
|
my %highFrameRateZ9 = (
|
|
955
956
|
0 => 'Off',
|
|
956
957
|
1 => 'CH',
|
|
958
|
+
2 => 'CH*', #28 (Z6III)
|
|
957
959
|
3 => 'C30',
|
|
958
960
|
5 => 'C60',
|
|
959
961
|
4 => 'C120',
|
|
@@ -986,6 +988,39 @@ my %infoZSeries = (
|
|
|
986
988
|
Notes => 'Z Series cameras thru October 2023',
|
|
987
989
|
);
|
|
988
990
|
|
|
991
|
+
my %iSOAutoHiLimitZ6III = ( #28
|
|
992
|
+
5 => 'ISO 200',
|
|
993
|
+
6 => 'ISO 250',
|
|
994
|
+
7 => 'ISO 320',
|
|
995
|
+
8 => 'ISO 400',
|
|
996
|
+
9 => 'ISO 500',
|
|
997
|
+
10 => 'ISO 640',
|
|
998
|
+
11 => 'ISO 800',
|
|
999
|
+
12 => 'ISO 1000',
|
|
1000
|
+
13 => 'ISO 1250',
|
|
1001
|
+
14 => 'ISO 1600',
|
|
1002
|
+
15 => 'ISO 2000',
|
|
1003
|
+
16 => 'ISO 2500',
|
|
1004
|
+
17 => 'ISO 3200',
|
|
1005
|
+
18 => 'ISO 4000',
|
|
1006
|
+
19 => 'ISO 5000',
|
|
1007
|
+
20 => 'ISO 6400',
|
|
1008
|
+
21 => 'ISO 8000',
|
|
1009
|
+
22 => 'ISO 10000',
|
|
1010
|
+
23 => 'ISO 12800',
|
|
1011
|
+
24 => 'ISO 16000',
|
|
1012
|
+
25 => 'ISO 20000',
|
|
1013
|
+
26 => 'ISO 25600',
|
|
1014
|
+
27 => 'ISO 32000',
|
|
1015
|
+
28 => 'ISO 40000',
|
|
1016
|
+
29 => 'ISO 51200',
|
|
1017
|
+
30 => 'ISO 64000',
|
|
1018
|
+
31 => 'ISO Hi 0.3',
|
|
1019
|
+
32 => 'ISO Hi 0.7',
|
|
1020
|
+
33 => 'ISO Hi 1.0',
|
|
1021
|
+
35 => 'ISO Hi 1.7',
|
|
1022
|
+
);
|
|
1023
|
+
|
|
989
1024
|
my %iSOAutoHiLimitZ7 = (
|
|
990
1025
|
0 => 'ISO 64',
|
|
991
1026
|
1 => 'ISO 80',
|
|
@@ -1111,6 +1146,18 @@ my %movieFlickerReductionZ9 = (
|
|
|
1111
1146
|
2 => '60Hz',
|
|
1112
1147
|
);
|
|
1113
1148
|
|
|
1149
|
+
my %movieFrameRateZ6III = ( #28
|
|
1150
|
+
0 => '240p',
|
|
1151
|
+
1 => '200p',
|
|
1152
|
+
2 => '120p',
|
|
1153
|
+
3 => '100p',
|
|
1154
|
+
4 => '60p',
|
|
1155
|
+
5 => '50p',
|
|
1156
|
+
6 => '30p',
|
|
1157
|
+
7 => '25p',
|
|
1158
|
+
8 => '24p',
|
|
1159
|
+
);
|
|
1160
|
+
|
|
1114
1161
|
my %movieFrameRateZ7 = (
|
|
1115
1162
|
0 => '120p',
|
|
1116
1163
|
1 => '100p',
|
|
@@ -1125,6 +1172,7 @@ my %movieFrameSizeZ9 = (
|
|
|
1125
1172
|
1 => '1920x1080',
|
|
1126
1173
|
2 => '3840x2160',
|
|
1127
1174
|
3 => '7680x4320',
|
|
1175
|
+
7 => '5376x3024', #28 (Z6III)
|
|
1128
1176
|
);
|
|
1129
1177
|
|
|
1130
1178
|
my %movieSlowMotion = (
|
|
@@ -1225,6 +1273,13 @@ my %secondarySlotFunctionZ9 = (
|
|
|
1225
1273
|
3 => 'JPG Primary + JPG Secondary',
|
|
1226
1274
|
);
|
|
1227
1275
|
|
|
1276
|
+
my %subjectDetectionAreaMZ6III = ( #28
|
|
1277
|
+
0 => 'Off',
|
|
1278
|
+
1 => 'All',
|
|
1279
|
+
2 => 'Wide (L)',
|
|
1280
|
+
3 => 'Wide (S)',
|
|
1281
|
+
);
|
|
1282
|
+
|
|
1228
1283
|
my %subjectDetectionZ9 = (
|
|
1229
1284
|
0 => 'Off',
|
|
1230
1285
|
1 => 'Auto',
|
|
@@ -2464,7 +2519,16 @@ my %base64coord = (
|
|
|
2464
2519
|
ByteOrder => 'BigEndian',
|
|
2465
2520
|
},
|
|
2466
2521
|
},
|
|
2467
|
-
{ # (
|
|
2522
|
+
{ # (Z6_3 firmware version 1.00, ref 28)
|
|
2523
|
+
Condition => '$$valPt =~ /^0809/',
|
|
2524
|
+
Name => 'ShotInfoZ6III',
|
|
2525
|
+
SubDirectory => {
|
|
2526
|
+
TagTable => 'Image::ExifTool::Nikon::ShotInfoZ6III',
|
|
2527
|
+
DecryptStart => 4,
|
|
2528
|
+
ByteOrder => 'LittleEndian',
|
|
2529
|
+
},
|
|
2530
|
+
},
|
|
2531
|
+
{ # (Z6_2 firmware version 1.00 and Z7_2 firmware versions 1.00 & 1.01, ref 28)
|
|
2468
2532
|
# 0800=Z6/Z7 0801=Z50 0802=Z5 0803=Z6II/Z7II 0804=Zfc 0807=Z30 0808=Zf
|
|
2469
2533
|
Condition => '$$valPt =~ /^080[0123478]/',
|
|
2470
2534
|
Name => 'ShotInfoZ7II',
|
|
@@ -5373,7 +5437,7 @@ my %nikonFocalConversions = (
|
|
|
5373
5437
|
%binaryDataAttrs,
|
|
5374
5438
|
NOTES => 'Tags found in the encrypted LensData from cameras such as the Z6 and Z7.',
|
|
5375
5439
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
5376
|
-
DATAMEMBER => [ 0x03, 0x2f,
|
|
5440
|
+
DATAMEMBER => [ 0x03, 0x2f, 0x30, 0x4c, 0x56, 0x58 ],
|
|
5377
5441
|
0x00 => {
|
|
5378
5442
|
Name => 'LensDataVersion',
|
|
5379
5443
|
Format => 'string[4]',
|
|
@@ -5477,6 +5541,7 @@ my %nikonFocalConversions = (
|
|
|
5477
5541
|
Condition => '$$self{NewLensData}',
|
|
5478
5542
|
Notes => 'tags from here onward used for Nikkor Z lenses only',
|
|
5479
5543
|
Format => 'int16u',
|
|
5544
|
+
RawConv => '$$self{LensID} = $val', #28 non-zero = > Native Z lens; 0 => DSLR lens via FTZ style adapter or non-Nikon Z-mount lens (or no lens attached)
|
|
5480
5545
|
PrintConv => {
|
|
5481
5546
|
1 => 'Nikkor Z 24-70mm f/4 S',
|
|
5482
5547
|
2 => 'Nikkor Z 14-30mm f/4 S',
|
|
@@ -5516,19 +5581,21 @@ my %nikonFocalConversions = (
|
|
|
5516
5581
|
45 => 'Nikkor Z 600mm f/6.3 VR S', #28
|
|
5517
5582
|
46 => 'Nikkor Z 135mm f/1.8 S Plena', #28
|
|
5518
5583
|
48 => 'Nikkor Z 28-400mm f/4-8 VR', #30
|
|
5584
|
+
2305 => 'Laowa FFII 10mm F2.8 C&D Dreamer', #30
|
|
5519
5585
|
32768 => 'Nikkor Z 400mm f/2.8 TC VR S TC-1.4x', #28
|
|
5520
5586
|
32769 => 'Nikkor Z 600mm f/4 TC VR S TC-1.4x', #28
|
|
5521
5587
|
},
|
|
5522
5588
|
},
|
|
5523
|
-
|
|
5524
|
-
Name => '
|
|
5525
|
-
|
|
5526
|
-
Format => '
|
|
5527
|
-
|
|
5528
|
-
|
|
5529
|
-
|
|
5530
|
-
|
|
5531
|
-
|
|
5589
|
+
0x34 => { #28
|
|
5590
|
+
Name => 'LensFirmwareVersion',
|
|
5591
|
+
Condition => '$$self{LensID} and $$self{LensID} != 0', #only valid for Z-mount lenses
|
|
5592
|
+
Format => 'int16u', #4 bits each for version, release amd modification in VRM scheme.
|
|
5593
|
+
PrintConv => q{
|
|
5594
|
+
my $version = int($val / 256);
|
|
5595
|
+
my $release = int(($val - 256 * $version)/16);
|
|
5596
|
+
my $modification = $val - (256 * $version + 16 * $release);
|
|
5597
|
+
return sprintf("%.0f.%.0f.%.0f", $version,$release,$modification);
|
|
5598
|
+
},
|
|
5532
5599
|
},
|
|
5533
5600
|
0x36 => { #PH
|
|
5534
5601
|
Name => 'MaxAperture',
|
|
@@ -5561,41 +5628,50 @@ my %nikonFocalConversions = (
|
|
|
5561
5628
|
0x4c => { #28
|
|
5562
5629
|
Name => 'FocusDistanceRangeWidth', #reflects the number of discrete absolute lens positions that are mapped to the reported FocusDistance. Will be 1 near CFD reflecting very narrow focus distance bands (i.e., quite accurate). Near Infinity will be something like 32. Note: 0 at infinity.
|
|
5563
5630
|
Format => 'int8u',
|
|
5564
|
-
Condition => '$$self{
|
|
5631
|
+
Condition => '$$self{LensID} and $$self{LensID} != 0 and $$self{FocusMode} ne "Manual"',
|
|
5565
5632
|
RawConv => '$$self{FocusDistanceRangeWidth} = $val',
|
|
5566
5633
|
Unknown => 1,
|
|
5567
5634
|
},
|
|
5568
5635
|
0x4e => { #28
|
|
5569
5636
|
Name => 'FocusDistance',
|
|
5570
5637
|
Format => 'int16u',
|
|
5571
|
-
Condition => '$$self{
|
|
5638
|
+
Condition => '$$self{LensID} and $$self{LensID} != 0', #only valid for Z-mount lenses
|
|
5572
5639
|
RawConv => '$val = $val/256', # 1st byte is the fractional component. This byte was not previously considered in the legacy calculation (which only used the 2nd byte). When 2nd byte < 80; distance is < 1 meter
|
|
5573
5640
|
ValueConv => '2**(($val-80)/12)', # in m #slighly more accurate than the legacy calcualtion of '0.01 * 10**($val/40)'. Tested at all focus positions using the 105mm,70-200mm & 600mm
|
|
5574
5641
|
ValueConvInv => '$val>0 ? log(12*($val+80)/log(2) : 0', #was '$val>0 ? 40*log($val*100)/log(10) : 0'
|
|
5575
5642
|
PrintConv => q{
|
|
5576
|
-
(defined $$self{FocusStepsFromInfinity} and
|
|
5643
|
+
(defined $$self{FocusStepsFromInfinity} and $$self{FocusStepsFromInfinity} eq 0) ? "Inf" : $val < 100 ? $val < 10 ? $val < 1 ? $val < 0.35 ? sprintf("%.4f m", $val): sprintf("%.3f m", $val): sprintf("%.2f m", $val) : sprintf("%.1f m", $val) : sprintf("%.0f m", $val),
|
|
5577
5644
|
},
|
|
5578
5645
|
},
|
|
5579
|
-
0x56 => { #28 #not
|
|
5646
|
+
0x56 => { #28 #not valid for focus mode M
|
|
5580
5647
|
Name => 'LensDriveEnd', # byte contains: 1 at CFD/MOD; 2 at Infinity; 0 otherwise
|
|
5581
|
-
Condition => '$$self{
|
|
5648
|
+
Condition => '$$self{LensID} and $$self{LensID} != 0 and $$self{FocusMode} ne "Manual"', #valid for Z-mount lenses in focus modes other than M
|
|
5582
5649
|
Format => 'int8u',
|
|
5583
5650
|
RawConv => 'unless (defined $$self{FocusDistanceRangeWidth} and not $$self{FocusDistanceRangeWidth}) { if ($val == 0 ) {$$self{LensDriveEnd} = "No"} else { $$self{LensDriveEnd} = "CFD"}; } else{ $$self{LensDriveEnd} = "Inf"}',
|
|
5584
5651
|
Unknown => 1,
|
|
5585
5652
|
},
|
|
5586
5653
|
0x58 => { #28
|
|
5587
5654
|
Name => 'FocusStepsFromInfinity',
|
|
5588
|
-
Condition => '$$self{
|
|
5655
|
+
Condition => '$$self{LensID} and $$self{LensID} != 0', #valid for Z-mount lenses in both AF and manual focus modes
|
|
5589
5656
|
Format => 'int8u',
|
|
5590
5657
|
RawConv => '$$self{FocusStepsFromInfinity} = $val', # 0 at Infinity, otherwise a small positive number monotonically increasing towards CFD.
|
|
5591
5658
|
Unknown => 1,
|
|
5592
5659
|
},
|
|
5593
5660
|
0x5a => { #28
|
|
5594
5661
|
Name => 'LensPositionAbsolute', # <=0 at infinity. Typical value at CFD might be 58000. Only valid for Z-mount lenses.
|
|
5595
|
-
Condition => '$$self{
|
|
5662
|
+
Condition => '$$self{LensID} and $$self{LensID} != 0', # Only valid for Z-mount lenses.
|
|
5596
5663
|
Format => 'int32s',
|
|
5597
5664
|
#Unknown => 1,
|
|
5598
5665
|
},
|
|
5666
|
+
0x5f => { #28
|
|
5667
|
+
Name => 'LensMountType',
|
|
5668
|
+
Format => 'int8u',
|
|
5669
|
+
Mask => 0x01,
|
|
5670
|
+
PrintConv => {
|
|
5671
|
+
0 => 'Z-mount',
|
|
5672
|
+
1 => 'F-mount',
|
|
5673
|
+
},
|
|
5674
|
+
},
|
|
5599
5675
|
);
|
|
5600
5676
|
|
|
5601
5677
|
# Unknown Nikon lens data (note: data may need decrypting after byte 4)
|
|
@@ -5636,38 +5712,6 @@ my %nikonFocalConversions = (
|
|
|
5636
5712
|
Notes => 'P6000',
|
|
5637
5713
|
PrintConv => \%offOn,
|
|
5638
5714
|
},
|
|
5639
|
-
# for Nikon Z6iii JPG and RAW images (version 0809),
|
|
5640
|
-
# the offset table starts at 0x24 and is as follows
|
|
5641
|
-
# JPG Offset Size NEF Offset Size
|
|
5642
|
-
# 0) 0x0000 0 0) 0x009c 21604
|
|
5643
|
-
# 1) 0x0000 0 1) 0x5500 6008
|
|
5644
|
-
# 2) 0x009c 2528 2) 0x6c78 2528
|
|
5645
|
-
# 3) 0x0a7c 200 3) 0x7658 200
|
|
5646
|
-
# 4) 0x0b44 2488 4) 0x7720 2488
|
|
5647
|
-
# 5) 0x14fc 1468 5) 0x80d8 1468
|
|
5648
|
-
# 6) 0x1ab8 1032 6) 0x8694 1032
|
|
5649
|
-
# 7) 0x1ec0 256 7) 0x8a9c 256
|
|
5650
|
-
# 8) 0x1fc0 800 8) 0x8b9c 800
|
|
5651
|
-
# 9) 0x22e0 144 9) 0x8ebc 144
|
|
5652
|
-
# 10) 0x2370 64 10) 0x8f4c 64
|
|
5653
|
-
# 11) 0x0000 0 11) 0x0000 0
|
|
5654
|
-
# 12) 0x23b0 5009 12) 0x8f8c 5009
|
|
5655
|
-
# 13) 0x3741 1536 13) 0xa31d 1536
|
|
5656
|
-
# 14) 0x3d41 11928 14) 0xa91d 11928
|
|
5657
|
-
# 15) 0x6bd9 5937 15) 0xd7b5 5937
|
|
5658
|
-
# 16) 0x830a 500 16) 0xeee6 500
|
|
5659
|
-
# 17) 0x84fe 160 17) 0xf0da 160
|
|
5660
|
-
# 18) 0x859e 464 18) 0xf17a 464
|
|
5661
|
-
# 19) 0x876e 8 19) 0xf34a 8
|
|
5662
|
-
# 20) 0x8776 64 20) 0xf352 64
|
|
5663
|
-
# 21) 0x87b6 6 21) 0xf392 6
|
|
5664
|
-
# 22) 0x87bc 48 22) 0xf398 48
|
|
5665
|
-
# 23) 0x87ec 20 23) 0xf3c8 20
|
|
5666
|
-
# 24) 0x8800 108 24) 0xf3dc 108
|
|
5667
|
-
# 25) 0x886c 8 25) 0xf448 8
|
|
5668
|
-
# 26) 0x8874 2420 26) 0xf450 2420
|
|
5669
|
-
# 27) 0x0000 0 27) 0x0000 0
|
|
5670
|
-
# 28) 0x0000 0 28) 0x0000 0
|
|
5671
5715
|
0x66 => {
|
|
5672
5716
|
Name => 'VR_0x66',
|
|
5673
5717
|
Condition => '$$self{ShotInfoVersion} eq "0204"',
|
|
@@ -8291,6 +8335,69 @@ my %nikonFocalConversions = (
|
|
|
8291
8335
|
},
|
|
8292
8336
|
);
|
|
8293
8337
|
|
|
8338
|
+
# shot information for the Z6III firmware 1.00 (encrypted) - ref 28
|
|
8339
|
+
%Image::ExifTool::Nikon::ShotInfoZ6III = (
|
|
8340
|
+
PROCESS_PROC => \&ProcessNikonEncrypted,
|
|
8341
|
+
WRITE_PROC => \&ProcessNikonEncrypted,
|
|
8342
|
+
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
|
8343
|
+
VARS => { ID_LABEL => 'Index', NIKON_OFFSETS => 0x24 },
|
|
8344
|
+
DATAMEMBER => [ 0x04 ],
|
|
8345
|
+
IS_SUBDIR => [ 0x88, 0x90 ],
|
|
8346
|
+
WRITABLE => 1,
|
|
8347
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
8348
|
+
NOTES => 'These tags are extracted from encrypted data in images from the Z6III.',
|
|
8349
|
+
0x00 => {
|
|
8350
|
+
Name => 'ShotInfoVersion',
|
|
8351
|
+
Format => 'string[4]',
|
|
8352
|
+
Writable => 0,
|
|
8353
|
+
},
|
|
8354
|
+
0x04 => {
|
|
8355
|
+
Name => 'FirmwareVersion',
|
|
8356
|
+
DataMember => 'FirmwareVersion',
|
|
8357
|
+
Format => 'string[8]',
|
|
8358
|
+
Writable => 0,
|
|
8359
|
+
RawConv => '$$self{FirmwareVersion} = $val',
|
|
8360
|
+
},
|
|
8361
|
+
0x0e => {
|
|
8362
|
+
Name => 'FirmwareVersion2',
|
|
8363
|
+
Format => 'string[8]',
|
|
8364
|
+
Writable => 0,
|
|
8365
|
+
Hidden => 1,
|
|
8366
|
+
},
|
|
8367
|
+
0x18 => {
|
|
8368
|
+
Name => 'FirmwareVersion3',
|
|
8369
|
+
Format => 'string[8]',
|
|
8370
|
+
Writable => 0,
|
|
8371
|
+
Hidden => 1,
|
|
8372
|
+
},
|
|
8373
|
+
0x24 => {
|
|
8374
|
+
Name => 'NumberOffsets', # number of entries in offset table. offsets are from start of ShotInfo data.
|
|
8375
|
+
Format => 'int32u',
|
|
8376
|
+
Writable => 0,
|
|
8377
|
+
Hidden => 1,
|
|
8378
|
+
},
|
|
8379
|
+
#0x28 Offset1 - non-zero for NEF only
|
|
8380
|
+
#0x2c Offset2 - non-zero for NEF only
|
|
8381
|
+
#0x38 Offset5 - contains SkinSoftening at 0x2d1 - mapping is %offLowNormalHighZ7
|
|
8382
|
+
0x88 => {
|
|
8383
|
+
Name => 'OrientationOffset',
|
|
8384
|
+
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96', #not valid for C30/C60/C120
|
|
8385
|
+
Format => 'int32u',
|
|
8386
|
+
SubDirectory => {
|
|
8387
|
+
TagTable => 'Image::ExifTool::Nikon::OrientationInfo',
|
|
8388
|
+
Start => '$val',
|
|
8389
|
+
}
|
|
8390
|
+
},
|
|
8391
|
+
0x90 => {
|
|
8392
|
+
Name => 'MenuOffset',
|
|
8393
|
+
Format => 'int32u',
|
|
8394
|
+
SubDirectory => {
|
|
8395
|
+
TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ6III',
|
|
8396
|
+
Start => '$val',
|
|
8397
|
+
},
|
|
8398
|
+
},
|
|
8399
|
+
);
|
|
8400
|
+
|
|
8294
8401
|
# shot information for the Z7II firmware 1.00 (encrypted) - ref 28
|
|
8295
8402
|
%Image::ExifTool::Nikon::ShotInfoZ7II = (
|
|
8296
8403
|
PROCESS_PROC => \&ProcessNikonEncrypted,
|
|
@@ -8679,7 +8786,7 @@ my %nikonFocalConversions = (
|
|
|
8679
8786
|
my $DynamicL = 2;
|
|
8680
8787
|
|
|
8681
8788
|
my $start = 502; #FX, 16:9 & 1:1 formats
|
|
8682
|
-
my $increment = 259; #FX
|
|
8789
|
+
my $increment = 259; #FX & 16:9 formats
|
|
8683
8790
|
|
|
8684
8791
|
$start = $start + 5 * $increment if $imageArea == $OneToOne; # need to provide additional offset for the cropped horizontal pixels in 1:1 (19 vs 29 horizontal focus positions)
|
|
8685
8792
|
$start = $start - $increment if $val < 49 and ($imageArea == $FX or $imageArea == $WideScreen); #calculations for the left side of the frames are offset by 1 position from the right side
|
|
@@ -8993,6 +9100,203 @@ my %nikonFocalConversions = (
|
|
|
8993
9100
|
},
|
|
8994
9101
|
);
|
|
8995
9102
|
|
|
9103
|
+
%Image::ExifTool::Nikon::MenuSettingsZ6III = (
|
|
9104
|
+
%binaryDataAttrs,
|
|
9105
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
9106
|
+
NOTES => 'These tags are used by the Z6III.',
|
|
9107
|
+
DATAMEMBER => [ 360, 444, 492, 496, 724, 748, 832, 838, 852, 880, 904, 1050 ],
|
|
9108
|
+
IS_SUBDIR => [ 1255 ],
|
|
9109
|
+
360 => {
|
|
9110
|
+
Name => 'SingleFrame', #0=> Single Frame 1=> one of the continuous modes
|
|
9111
|
+
Hidden => 1,
|
|
9112
|
+
RawConv => '$$self{SingleFrame} = $val',
|
|
9113
|
+
},
|
|
9114
|
+
364 => {
|
|
9115
|
+
Name => 'HighFrameRate', #CH and C30/C60/C120 but not CL
|
|
9116
|
+
PrintConv => \%highFrameRateZ9,
|
|
9117
|
+
},
|
|
9118
|
+
444 => {
|
|
9119
|
+
Name => 'MultipleExposureMode',
|
|
9120
|
+
RawConv => '$$self{MultipleExposureMode} = $val',
|
|
9121
|
+
PrintConv => \%multipleExposureModeZ9,
|
|
9122
|
+
},
|
|
9123
|
+
446 => {Name => 'MultiExposureShots', Condition => '$$self{MultipleExposureMode} != 0'}, #range 2-9
|
|
9124
|
+
476 => {
|
|
9125
|
+
Name => 'IntervalDurationHours',
|
|
9126
|
+
Format => 'int32u',
|
|
9127
|
+
},
|
|
9128
|
+
480 => {
|
|
9129
|
+
Name => 'IntervalDurationMinutes',
|
|
9130
|
+
Format => 'int32u',
|
|
9131
|
+
},
|
|
9132
|
+
484 => {
|
|
9133
|
+
Name => 'IntervalDurationSeconds',
|
|
9134
|
+
Format => 'int32u',
|
|
9135
|
+
},
|
|
9136
|
+
492 => {
|
|
9137
|
+
Name => 'Intervals',
|
|
9138
|
+
Format => 'int32u',
|
|
9139
|
+
RawConv => '$$self{IntervalShootingIntervals} = $val',
|
|
9140
|
+
},
|
|
9141
|
+
496 => {
|
|
9142
|
+
Name => 'ShotsPerInterval',
|
|
9143
|
+
Format => 'int32u',
|
|
9144
|
+
RawConv => '$$self{IntervalShootingShotsPerInterval} = $val',
|
|
9145
|
+
},
|
|
9146
|
+
500 => {
|
|
9147
|
+
Name => 'IntervalExposureSmoothing',
|
|
9148
|
+
Format => 'int8u',
|
|
9149
|
+
PrintConv => \%offOn,
|
|
9150
|
+
},
|
|
9151
|
+
502 => {
|
|
9152
|
+
Name => 'IntervalPriority',
|
|
9153
|
+
Format => 'int8u',
|
|
9154
|
+
PrintConv => \%offOn,
|
|
9155
|
+
},
|
|
9156
|
+
536 => {
|
|
9157
|
+
Name => 'FocusShiftNumberShots',
|
|
9158
|
+
},
|
|
9159
|
+
540 => {
|
|
9160
|
+
Name => 'FocusShiftStepWidth',
|
|
9161
|
+
},
|
|
9162
|
+
544 => {
|
|
9163
|
+
Name => 'FocusShiftInterval',
|
|
9164
|
+
PrintConv => '$val == 1? "1 Second" : sprintf("%.0f Seconds",$val)',
|
|
9165
|
+
},
|
|
9166
|
+
548 => {
|
|
9167
|
+
Name => 'FocusShiftExposureLock',
|
|
9168
|
+
PrintConv => \%offOn,
|
|
9169
|
+
},
|
|
9170
|
+
648 => { Name => 'AutoISO', PrintConv => \%offOn },
|
|
9171
|
+
650 => {
|
|
9172
|
+
Name => 'ISOAutoHiLimit',
|
|
9173
|
+
Format => 'int16u',
|
|
9174
|
+
Unknown => 1,
|
|
9175
|
+
ValueConv => '($val-104)/8',
|
|
9176
|
+
ValueConvInv => '8 * ($val + 104)',
|
|
9177
|
+
PrintConv => \%iSOAutoHiLimitZ6III,
|
|
9178
|
+
},
|
|
9179
|
+
#652 => ISOAutoFlashLimit # only when ISOAutoFlashLimitSameAsHiLimit == 0
|
|
9180
|
+
#654 => ISOAutoFlashLimitSameAsHiLimit 1=> Same as ISOAutoHiLimit 0=> Separate (use ISOAutoFlashLimit)
|
|
9181
|
+
718 => {
|
|
9182
|
+
Name => 'DiffractionCompensation',
|
|
9183
|
+
Format => 'int8u',
|
|
9184
|
+
PrintConv => \%offOn,
|
|
9185
|
+
},
|
|
9186
|
+
719 => {
|
|
9187
|
+
Name => 'AutoDistortionControl',
|
|
9188
|
+
Format => 'int8u',
|
|
9189
|
+
PrintConv => \%offOn,
|
|
9190
|
+
},
|
|
9191
|
+
720 => { Name => 'FlickerReductionShooting',PrintConv => \%offOn },
|
|
9192
|
+
722 => { Name => 'NikonMeteringMode', PrintConv => \%meteringModeZ7},
|
|
9193
|
+
724 => {
|
|
9194
|
+
Name => 'FlashControlMode',
|
|
9195
|
+
RawConv => '$$self{FlashControlMode} = $val',
|
|
9196
|
+
PrintConv => \%flashControlModeZ7,
|
|
9197
|
+
},
|
|
9198
|
+
730 => {
|
|
9199
|
+
Name => 'FlashGNDistance',
|
|
9200
|
+
Condition => '$$self{FlashControlMode} == 2',
|
|
9201
|
+
Unknown => 1,
|
|
9202
|
+
ValueConv => '$val + 3',
|
|
9203
|
+
PrintConv => \%flashGNDistance,
|
|
9204
|
+
},
|
|
9205
|
+
734 => {
|
|
9206
|
+
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)
|
|
9207
|
+
Condition => '$$self{FlashControlMode} >= 3',
|
|
9208
|
+
Unknown => 1,
|
|
9209
|
+
ValueConv => '2 ** (-$val/3)',
|
|
9210
|
+
ValueConvInv => '$val>0 ? -3*log($val)/log(2) : 0',
|
|
9211
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.1f%%",$val*100)',
|
|
9212
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
9213
|
+
},
|
|
9214
|
+
742 => { Name => 'FlashWirelessOption', PrintConv => \%flashWirelessOptionZ7, Unknown => 1 },
|
|
9215
|
+
744 => { Name => 'FlashRemoteControl', PrintConv => \%flashRemoteControlZ7, Unknown => 1 },
|
|
9216
|
+
748 => {
|
|
9217
|
+
Name => 'FlashMasterControlMode', # tag name chosen for compatibility with those found in FlashInfo0102 & FlashInfo0103
|
|
9218
|
+
RawConv => '$$self{FlashGroupOptionsMasterMode} = $val',
|
|
9219
|
+
PrintConv => \%flashGroupOptionsMode,
|
|
9220
|
+
},
|
|
9221
|
+
750 => {
|
|
9222
|
+
Name => 'FlashMasterCompensation',
|
|
9223
|
+
Format => 'int8s',
|
|
9224
|
+
Condition => '$$self{FlashGroupOptionsMasterMode} != 3', # other than 'Off'
|
|
9225
|
+
Unknown => 1,
|
|
9226
|
+
ValueConv => '$val/6',
|
|
9227
|
+
ValueConvInv => '6 * $val',
|
|
9228
|
+
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
|
9229
|
+
PrintConvInv => '$val',
|
|
9230
|
+
},
|
|
9231
|
+
754 => {
|
|
9232
|
+
Name => 'FlashMasterOutput',
|
|
9233
|
+
Unknown => 1,
|
|
9234
|
+
Condition => '$$self{FlashGroupOptionsMasterMode} == 1', # only for Mode=M
|
|
9235
|
+
ValueConv => '2 ** (-$val/3)',
|
|
9236
|
+
ValueConvInv => '$val>0 ? -3*log($val)/log(2) : 0',
|
|
9237
|
+
PrintConv => '$val>0.99 ? "Full" : sprintf("%.1f%%",$val*100)',
|
|
9238
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
9239
|
+
},
|
|
9240
|
+
832 => { Name => 'AFAreaMode', RawConv => '$$self{AFAreaMode} = $val', PrintConv => \%aFAreaModeZ9},
|
|
9241
|
+
834 => { Name => 'VRMode', PrintConv => \%vRModeZ9},
|
|
9242
|
+
838 => {
|
|
9243
|
+
Name => 'BracketSet',
|
|
9244
|
+
RawConv => '$$self{BracketSet} = $val',
|
|
9245
|
+
PrintConv => \%bracketSetZ9,
|
|
9246
|
+
},
|
|
9247
|
+
840 => {
|
|
9248
|
+
Name => 'BracketProgram',
|
|
9249
|
+
Condition => '$$self{BracketSet} < 3',
|
|
9250
|
+
Notes => 'AE and/or Flash Bracketing',
|
|
9251
|
+
PrintConv => \%bracketProgramZ9,
|
|
9252
|
+
},
|
|
9253
|
+
842 => {
|
|
9254
|
+
Name => 'BracketIncrement',
|
|
9255
|
+
Condition => '$$self{BracketSet} < 3',
|
|
9256
|
+
Notes => 'AE and/or Flash Bracketing',
|
|
9257
|
+
PrintConv => \%bracketIncrementZ9,
|
|
9258
|
+
},
|
|
9259
|
+
852 => { Name => 'HDR', RawConv => '$$self{HDR} = $val', PrintConv => \%multipleExposureModeZ9 },
|
|
9260
|
+
858 => { Name => 'SecondarySlotFunction', PrintConv => \%secondarySlotFunctionZ9 },
|
|
9261
|
+
864 => { Name => 'HDRLevel', Condition => '$$self{HDR} ne 0', PrintConv => \%hdrLevelZ8 },
|
|
9262
|
+
868 => { Name => 'Slot2JpgSize', PrintConv => { 0 => 'Large (6048x4032)', 1 => 'Medium (4528x3024)', 2 => 'Small (3024x2016)' }, Unknown => 1},
|
|
9263
|
+
878 => { Name => 'SubjectDetection', PrintConv => \%subjectDetectionZ9 },
|
|
9264
|
+
880 => {
|
|
9265
|
+
Name => 'DynamicAFAreaSize',
|
|
9266
|
+
Condition => '$$self{AFAreaMode} == 2',
|
|
9267
|
+
RawConv => '$$self{DynamicAFAreaSize} = $val',
|
|
9268
|
+
PrintConv => \%dynamicAfAreaModesZ9,
|
|
9269
|
+
},
|
|
9270
|
+
884 => { Name => 'ToneMap', PrintConv => { 0 => 'SDR', 1 => 'HLG' }, Unknown => 1 },
|
|
9271
|
+
888 => { Name => 'PortraitImpressionBalance', PrintConv => \%portraitImpressionBalanceZ8 },
|
|
9272
|
+
902 => { Name => 'HighFrequencyFlickerReduction', PrintConv => \%offOn, Unknown => 1 },
|
|
9273
|
+
904 => { Name => 'PixelShiftShooting', RawConv => '$$self{PixelShiftShooting} = $val', PrintConv => \%multipleExposureModeZ9 }, #off/on/on (series)
|
|
9274
|
+
906 => { Name => 'PixelShiftNumberShots', Condition => '$$self{PixelShiftShooting} > 0', PrintConv => \%pixelShiftNumberShots },
|
|
9275
|
+
908 => { Name => 'PixelShiftDelay', Condition => '$$self{PixelShiftShooting} > 0', PrintConv => '$val == 0? "No Delay" : sprintf("%.0f sec",$val)' }, #seconds in set {0,1,2,3,5,10}
|
|
9276
|
+
910 => { Name => 'PixelShiftInterval', Condition => '$$self{PixelShiftShooting} > 0', PrintConv => '$val == 0? "No Delay" : sprintf("%.0f sec",$val)' }, #seconds in integer range [0,30]
|
|
9277
|
+
1002 => { Name => 'SubjectDetectionAreaMF', PrintConv => \%subjectDetectionAreaMZ6III }, #new tag with Z6III
|
|
9278
|
+
1004 => { Name => 'LinkVRToFocusPoint', PrintConv => \%offOn, Unknown => 1 }, #new tag with Z6III
|
|
9279
|
+
#1044 => { Name => 'MovieFrameRateH264',PrintConv => \%movieFrameRateZ6III, Unknown => 1 }, #new tag with Z6III - only valid for H.264, frame rates for other movie types are at 1164
|
|
9280
|
+
1046 => { Name => 'MovieSlowMotion', PrintConv => \%movieSlowMotion, Unknown => 1 },
|
|
9281
|
+
1050 => { Name => 'MovieType', RawConv => '$$self{MovieType} = $val' , PrintConv => \%movieTypeZ9},
|
|
9282
|
+
1162 => { Name => 'MovieFrameSize', PrintConv => \%movieFrameSizeZ9, Unknown => 1 },
|
|
9283
|
+
1164 => { Name => 'MovieFrameRate', Condition => '$$self{MovieType} != 1', PrintConv => \%movieFrameRateZ6III, Unknown => 1 },
|
|
9284
|
+
1255 => {
|
|
9285
|
+
Name => 'CustomSettingsZ6III',
|
|
9286
|
+
Format => 'undef[700]',
|
|
9287
|
+
SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsZ6III' },
|
|
9288
|
+
},
|
|
9289
|
+
2300 => { Name => 'Language', PrintConv => \%languageZ9, Unknown => 1 },
|
|
9290
|
+
2302 => { Name => 'TimeZone', PrintConv => \%timeZoneZ9 },
|
|
9291
|
+
2308 => { Name => 'MonitorBrightness', PrintConv => \%monitorBrightnessZ9, Unknown => 1 }, # settings: -5 to +5 and Lo1, Lo2, Hi1, Hi2
|
|
9292
|
+
2444 => { Name => 'EmptySlotRelease', PrintConv => { 0 => 'Disable Release', 1 => 'Enable Release' }, Unknown => 1 },
|
|
9293
|
+
2450 => { Name => 'EnergySavingMode', PrintConv => \%offOn, Unknown => 1 },
|
|
9294
|
+
2476 => { Name => 'USBPowerDelivery', PrintConv => \%offOn, Unknown => 1 },
|
|
9295
|
+
2480 => { Name => 'SaveFocusPosition', PrintConv => \%offOn, Unknown => 1 },
|
|
9296
|
+
2487 => { Name => 'SilentPhotography', PrintConv => \%offOn, Unknown => 1 },
|
|
9297
|
+
2496 => { Name => 'AirplaneMode', PrintConv => \%offOn, Unknown => 1 },
|
|
9298
|
+
),
|
|
9299
|
+
|
|
8996
9300
|
%Image::ExifTool::Nikon::MenuSettingsZ7II = (
|
|
8997
9301
|
%binaryDataAttrs,
|
|
8998
9302
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
@@ -9078,16 +9382,6 @@ my %nikonFocalConversions = (
|
|
|
9078
9382
|
PrintConv => \%offOn,
|
|
9079
9383
|
},
|
|
9080
9384
|
#324 => {Name => 'FlickerReductionShooting',}, # redundant with tag in NikonSettings
|
|
9081
|
-
326 => {
|
|
9082
|
-
Name => 'NikonMeteringMode',
|
|
9083
|
-
Unknown => 1,
|
|
9084
|
-
PrintConv => {
|
|
9085
|
-
0 => 'Matrix',
|
|
9086
|
-
1 => 'Center',
|
|
9087
|
-
2 => 'Spot',
|
|
9088
|
-
3 => 'Highlight'
|
|
9089
|
-
},
|
|
9090
|
-
},
|
|
9091
9385
|
326 => { Name => 'NikonMeteringMode', PrintConv => \%meteringModeZ7},
|
|
9092
9386
|
328 => {
|
|
9093
9387
|
Name => 'FlashControlMode', # this and nearby tag values for flash may be set from either the Photo Shooting Menu or using the Flash unit menu
|