exiftool-vendored.pl 12.69.0 → 12.72.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 +78 -12
- package/bin/MANIFEST +5 -0
- package/bin/META.json +1 -1
- package/bin/META.yml +1 -1
- package/bin/README +10 -10
- package/bin/exiftool +32 -25
- package/bin/lib/Image/ExifTool/AAC.pm +175 -0
- package/bin/lib/Image/ExifTool/BuildTagLookup.pm +2 -1
- package/bin/lib/Image/ExifTool/CBOR.pm +18 -2
- package/bin/lib/Image/ExifTool/Canon.pm +82 -20
- package/bin/lib/Image/ExifTool/DJI.pm +3 -2
- package/bin/lib/Image/ExifTool/EXE.pm +54 -6
- package/bin/lib/Image/ExifTool/Exif.pm +111 -11
- package/bin/lib/Image/ExifTool/FujiFilm.pm +145 -20
- package/bin/lib/Image/ExifTool/GIF.pm +5 -1
- package/bin/lib/Image/ExifTool/GoPro.pm +16 -1
- package/bin/lib/Image/ExifTool/ID3.pm +76 -10
- package/bin/lib/Image/ExifTool/InDesign.pm +1 -1
- package/bin/lib/Image/ExifTool/JPEG.pm +1 -1
- package/bin/lib/Image/ExifTool/JSON.pm +4 -1
- package/bin/lib/Image/ExifTool/Jpeg2000.pm +30 -15
- package/bin/lib/Image/ExifTool/M2TS.pm +21 -16
- package/bin/lib/Image/ExifTool/MakerNotes.pm +2 -2
- package/bin/lib/Image/ExifTool/Nikon.pm +203 -102
- package/bin/lib/Image/ExifTool/Olympus.pm +7 -1
- package/bin/lib/Image/ExifTool/PNG.pm +8 -13
- package/bin/lib/Image/ExifTool/Panasonic.pm +10 -1
- package/bin/lib/Image/ExifTool/Pentax.pm +15 -6
- package/bin/lib/Image/ExifTool/QuickTime.pm +59 -13
- package/bin/lib/Image/ExifTool/QuickTimeStream.pl +59 -11
- package/bin/lib/Image/ExifTool/README +7 -2
- package/bin/lib/Image/ExifTool/RIFF.pm +53 -9
- package/bin/lib/Image/ExifTool/Ricoh.pm +109 -1
- package/bin/lib/Image/ExifTool/Samsung.pm +3 -2
- package/bin/lib/Image/ExifTool/Sony.pm +177 -37
- package/bin/lib/Image/ExifTool/TagLookup.pm +6961 -6856
- package/bin/lib/Image/ExifTool/TagNames.pod +580 -344
- package/bin/lib/Image/ExifTool/Text.pm +4 -5
- package/bin/lib/Image/ExifTool/Validate.pm +6 -5
- package/bin/lib/Image/ExifTool/WriteExif.pl +19 -4
- package/bin/lib/Image/ExifTool/WriteQuickTime.pl +1 -0
- package/bin/lib/Image/ExifTool/WriteRIFF.pl +9 -3
- package/bin/lib/Image/ExifTool/Writer.pl +102 -50
- package/bin/lib/Image/ExifTool.pm +74 -36
- package/bin/lib/Image/ExifTool.pod +28 -17
- package/bin/perl-Image-ExifTool.spec +9 -9
- package/bin/pp_build_exe.args +5 -4
- package/package.json +4 -5
|
@@ -32,7 +32,7 @@ use strict;
|
|
|
32
32
|
use vars qw($VERSION);
|
|
33
33
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
34
34
|
|
|
35
|
-
$VERSION = '1.
|
|
35
|
+
$VERSION = '1.24';
|
|
36
36
|
|
|
37
37
|
# program map table "stream_type" lookup (ref 6/1/9)
|
|
38
38
|
my %streamType = (
|
|
@@ -354,29 +354,32 @@ sub ParsePID($$$$$)
|
|
|
354
354
|
my $tbl = GetTagTable('Image::ExifTool::QuickTime::Stream');
|
|
355
355
|
Image::ExifTool::QuickTime::ProcessFreeGPS($et, { DataPt => \$dat }, $tbl);
|
|
356
356
|
$more = 1;
|
|
357
|
-
} elsif ($$dataPt =~ /^A([NS])([EW])\0/s) {
|
|
358
|
-
# INNOVV TS video (same format
|
|
357
|
+
} elsif ($$dataPt =~ /^(V00|A([NS])([EW]))\0/s) {
|
|
358
|
+
# INNOVV TS video (same format as INNOVV MP4)
|
|
359
359
|
SetByteOrder('II');
|
|
360
360
|
my $tagTbl = GetTagTable('Image::ExifTool::QuickTime::Stream');
|
|
361
|
-
while ($$dataPt =~ /(A[NS][EW]\0.{28})/g) {
|
|
361
|
+
while ($$dataPt =~ /((V00|A[NS][EW])\0.{28})/g) {
|
|
362
362
|
my $dat = $1;
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
363
|
+
$$et{DOC_NUM} = ++$$et{DOC_COUNT};
|
|
364
|
+
if ($2 ne 'V00') {
|
|
365
|
+
my $lat = abs(GetFloat(\$dat, 4)); # (abs just to be safe)
|
|
366
|
+
my $lon = abs(GetFloat(\$dat, 8)); # (abs just to be safe)
|
|
367
|
+
my $spd = GetFloat(\$dat, 12) * $knotsToKph;
|
|
368
|
+
my $trk = GetFloat(\$dat, 16);
|
|
369
|
+
Image::ExifTool::QuickTime::ConvertLatLon($lat, $lon);
|
|
370
|
+
$et->HandleTag($tagTbl, GPSLatitude => abs($lat) * (substr($dat,1,1) eq 'S' ? -1 : 1));
|
|
371
|
+
$et->HandleTag($tagTbl, GPSLongitude => abs($lon) * (substr($dat,2,1) eq 'W' ? -1 : 1));
|
|
372
|
+
$et->HandleTag($tagTbl, GPSSpeed => $spd);
|
|
373
|
+
$et->HandleTag($tagTbl, GPSSpeedRef => 'K');
|
|
374
|
+
$et->HandleTag($tagTbl, GPSTrack => $trk);
|
|
375
|
+
$et->HandleTag($tagTbl, GPSTrackRef => 'T');
|
|
376
|
+
}
|
|
367
377
|
my @acc = unpack('x20V3', $dat);
|
|
368
378
|
map { $_ = $_ - 4294967296 if $_ >= 0x80000000 } @acc;
|
|
369
|
-
Image::ExifTool::QuickTime::ConvertLatLon($lat, $lon);
|
|
370
|
-
$$et{DOC_NUM} = ++$$et{DOC_COUNT};
|
|
371
|
-
$et->HandleTag($tagTbl, GPSLatitude => abs($lat) * (substr($dat,1,1) eq 'S' ? -1 : 1));
|
|
372
|
-
$et->HandleTag($tagTbl, GPSLongitude => abs($lon) * (substr($dat,2,1) eq 'W' ? -1 : 1));
|
|
373
|
-
$et->HandleTag($tagTbl, GPSSpeed => $spd);
|
|
374
|
-
$et->HandleTag($tagTbl, GPSSpeedRef => 'K');
|
|
375
|
-
$et->HandleTag($tagTbl, GPSTrack => $trk);
|
|
376
|
-
$et->HandleTag($tagTbl, GPSTrackRef => 'T');
|
|
377
379
|
$et->HandleTag($tagTbl, Accelerometer => "@acc");
|
|
378
380
|
}
|
|
379
381
|
SetByteOrder('MM');
|
|
382
|
+
$$et{HasINNOV} = 1; # (necessary to skip over empty/unknown INNOV records)
|
|
380
383
|
$more = 1;
|
|
381
384
|
} elsif ($$dataPt =~ /^\$(GPSINFO|GSNRINFO),/) {
|
|
382
385
|
# $GPSINFO,0x0004,2021.08.09 13:27:36,2341.54561,12031.70135,8.0,51,153,0,0,\x0d
|
|
@@ -478,6 +481,8 @@ sub ParsePID($$$$$)
|
|
|
478
481
|
$et->HandleTag($tagTbl, GPSTrackRef => 'T');
|
|
479
482
|
SetByteOrder('MM');
|
|
480
483
|
$more = 1;
|
|
484
|
+
} elsif ($$et{HasINNOV}) {
|
|
485
|
+
$more = 1;
|
|
481
486
|
}
|
|
482
487
|
delete $$et{DOC_NUM};
|
|
483
488
|
}
|
|
@@ -21,7 +21,7 @@ sub ProcessKodakPatch($$$);
|
|
|
21
21
|
sub WriteUnknownOrPreview($$$);
|
|
22
22
|
sub FixLeicaBase($$;$);
|
|
23
23
|
|
|
24
|
-
$VERSION = '2.
|
|
24
|
+
$VERSION = '2.15';
|
|
25
25
|
|
|
26
26
|
my $debug; # set to 1 to enable debugging code
|
|
27
27
|
|
|
@@ -694,7 +694,7 @@ my $debug; # set to 1 to enable debugging code
|
|
|
694
694
|
Name => 'MakerNoteLeica8', # used by the Q (Type 116)
|
|
695
695
|
# (Q (Typ 116) starts with "LEICA\0\x08\0", Make is "LEICA CAMERA AG")
|
|
696
696
|
# (SL (Typ 601) and CL start with "LEICA\0\x09\0", Make is "LEICA CAMERA AG")
|
|
697
|
-
Condition => '$$valPt =~ /^LEICA\0[\x08\x09]\0/',
|
|
697
|
+
Condition => '$$valPt =~ /^LEICA\0[\x08\x09\x0a]\0/',
|
|
698
698
|
SubDirectory => {
|
|
699
699
|
TagTable => 'Image::ExifTool::Panasonic::Leica5',
|
|
700
700
|
Start => '$valuePtr + 8',
|
|
@@ -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.28';
|
|
69
69
|
|
|
70
70
|
sub LensIDConv($$$);
|
|
71
71
|
sub ProcessNikonAVI($$$);
|
|
@@ -949,6 +949,15 @@ my %highFrameRateZ9 = (
|
|
|
949
949
|
4 => 'C120',
|
|
950
950
|
);
|
|
951
951
|
|
|
952
|
+
my %imageAreaD6 = (
|
|
953
|
+
0 => 'FX (36x24)',
|
|
954
|
+
1 => 'DX (24x16)',
|
|
955
|
+
2 => '5:4 (30x24)',
|
|
956
|
+
3 => '1.2x (30x20)',
|
|
957
|
+
4 => '1:1 (24x24)',
|
|
958
|
+
6 => '16:9',
|
|
959
|
+
);
|
|
960
|
+
|
|
952
961
|
my %imageAreaZ9 = (
|
|
953
962
|
0 => 'FX',
|
|
954
963
|
1 => 'DX',
|
|
@@ -962,8 +971,8 @@ my %imageAreaZ9b = (
|
|
|
962
971
|
);
|
|
963
972
|
|
|
964
973
|
my %infoZSeries = (
|
|
965
|
-
Condition => '$$self{Model} =~ /^NIKON Z (30|5|50|6|6_2|7|7_2|8|fc|9)\b/i',
|
|
966
|
-
Notes => 'Z Series cameras thru
|
|
974
|
+
Condition => '$$self{Model} =~ /^NIKON Z (30|5|50|6|6_2|7|7_2|8|f|fc|9)\b/i',
|
|
975
|
+
Notes => 'Z Series cameras thru October 2023',
|
|
967
976
|
);
|
|
968
977
|
|
|
969
978
|
my %iSOAutoHiLimitZ7 = (
|
|
@@ -1987,7 +1996,7 @@ my %base64coord = (
|
|
|
1987
1996
|
},
|
|
1988
1997
|
0x0044 => { #28
|
|
1989
1998
|
Name => 'JPGCompression',
|
|
1990
|
-
RawConv => '($val) ? $val : undef', # undef for raw files
|
|
1999
|
+
RawConv => '($val) ? $val : undef', # undef for raw files
|
|
1991
2000
|
PrintConv => {
|
|
1992
2001
|
1 => 'Size Priority',
|
|
1993
2002
|
3 => 'Optimal Quality',
|
|
@@ -2582,9 +2591,21 @@ my %base64coord = (
|
|
|
2582
2591
|
DirOffset => 4,
|
|
2583
2592
|
},
|
|
2584
2593
|
},
|
|
2585
|
-
{ # (
|
|
2586
|
-
|
|
2587
|
-
Condition => '$$valPt =~ /^
|
|
2594
|
+
{ #PH (NC)
|
|
2595
|
+
# (D5300=0219, D3300=0221, D4S=0222, D750/D810=0223, D3400/D3500/D5500/D5600/D7200=0224)
|
|
2596
|
+
Condition => '$$valPt =~ /^02(19|2[1234])/',
|
|
2597
|
+
Name => 'ColorBalance0219',
|
|
2598
|
+
SubDirectory => {
|
|
2599
|
+
TagTable => 'Image::ExifTool::Nikon::ColorBalance2',
|
|
2600
|
+
ProcessProc => \&ProcessNikonEncrypted,
|
|
2601
|
+
WriteProc => \&ProcessNikonEncrypted,
|
|
2602
|
+
DecryptStart => 4,
|
|
2603
|
+
DirOffset => 0x7c,
|
|
2604
|
+
},
|
|
2605
|
+
},
|
|
2606
|
+
{ # (D610/Df=0220, CoolpixA=0601)
|
|
2607
|
+
Name => 'ColorBalanceUnknown1',
|
|
2608
|
+
Condition => '$$valPt =~ /^0(220|6)/',
|
|
2588
2609
|
SubDirectory => {
|
|
2589
2610
|
TagTable => 'Image::ExifTool::Nikon::ColorBalanceUnknown',
|
|
2590
2611
|
ProcessProc => \&ProcessNikonEncrypted,
|
|
@@ -2592,11 +2613,12 @@ my %base64coord = (
|
|
|
2592
2613
|
DecryptStart => 284,
|
|
2593
2614
|
},
|
|
2594
2615
|
},
|
|
2595
|
-
{ # (
|
|
2596
|
-
|
|
2597
|
-
|
|
2616
|
+
{ # (D5200/D7200=0218, D5/D500=0225, D7500=0226, D850=0227, D6/D780=0228,
|
|
2617
|
+
# 1J1/1J2/1V1=0400, 1V2=0401, 1J3/1S1=0402, 1AW1=0403, Z6/Z7=0800)
|
|
2618
|
+
Name => 'ColorBalanceUnknown2',
|
|
2619
|
+
Condition => '$$valPt =~ /^0(18|[248])/',
|
|
2598
2620
|
SubDirectory => {
|
|
2599
|
-
TagTable => 'Image::ExifTool::Nikon::
|
|
2621
|
+
TagTable => 'Image::ExifTool::Nikon::ColorBalanceUnknown2',
|
|
2600
2622
|
ProcessProc => \&ProcessNikonEncrypted,
|
|
2601
2623
|
WriteProc => \&ProcessNikonEncrypted, # (necessary to recrypt this if serial number changed)
|
|
2602
2624
|
DecryptStart => 4,
|
|
@@ -4956,6 +4978,16 @@ my %nrwLevels = (
|
|
|
4956
4978
|
},
|
|
4957
4979
|
);
|
|
4958
4980
|
|
|
4981
|
+
%Image::ExifTool::Nikon::ColorBalanceUnknown2 = (
|
|
4982
|
+
%binaryDataAttrs,
|
|
4983
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
4984
|
+
FORMAT => 'int16u',
|
|
4985
|
+
0 => {
|
|
4986
|
+
Name => 'ColorBalanceVersion',
|
|
4987
|
+
Format => 'undef[4]',
|
|
4988
|
+
},
|
|
4989
|
+
);
|
|
4990
|
+
|
|
4959
4991
|
%Image::ExifTool::Nikon::Type2 = (
|
|
4960
4992
|
WRITE_PROC => \&Image::ExifTool::Exif::WriteExif,
|
|
4961
4993
|
CHECK_PROC => \&Image::ExifTool::Exif::CheckExif,
|
|
@@ -5448,7 +5480,7 @@ my %nikonFocalConversions = (
|
|
|
5448
5480
|
43 => 'NIKKOR Z DX 24mm f/1.7', #28
|
|
5449
5481
|
44 => 'NIKKOR Z 70-180mm f/2.8', #28
|
|
5450
5482
|
45 => 'NIKKOR Z 600mm f/6.3 VR S', #28
|
|
5451
|
-
|
|
5483
|
+
46 => 'Nikkor Z 135mm f/1.8 S Plena', #28
|
|
5452
5484
|
32768 => 'Nikkor Z 400mm f/2.8 TC VR S TC-1.4x', #28
|
|
5453
5485
|
32769 => 'Nikkor Z 600mm f/4 TC VR S TC-1.4x', #28
|
|
5454
5486
|
},
|
|
@@ -5910,9 +5942,9 @@ my %nikonFocalConversions = (
|
|
|
5910
5942
|
0x10 => { #28
|
|
5911
5943
|
Name => 'ImageArea',
|
|
5912
5944
|
PrintConv => {
|
|
5913
|
-
0 => 'FX (
|
|
5914
|
-
1 => 'DX (
|
|
5915
|
-
2 => '5:4 (
|
|
5945
|
+
0 => 'FX (36x24)',
|
|
5946
|
+
1 => 'DX (24x16)',
|
|
5947
|
+
2 => '5:4 (30x24)',
|
|
5916
5948
|
},
|
|
5917
5949
|
},
|
|
5918
5950
|
0x25d => {
|
|
@@ -7305,6 +7337,10 @@ my %nikonFocalConversions = (
|
|
|
7305
7337
|
Format => 'int16u',
|
|
7306
7338
|
Hidden => 1,
|
|
7307
7339
|
},
|
|
7340
|
+
0x2b => {
|
|
7341
|
+
Name => 'ImageArea',
|
|
7342
|
+
PrintConv => \%imageAreaD6,
|
|
7343
|
+
},
|
|
7308
7344
|
);
|
|
7309
7345
|
|
|
7310
7346
|
%Image::ExifTool::Nikon::IntervalInfoD6 = (
|
|
@@ -8195,7 +8231,7 @@ my %nikonFocalConversions = (
|
|
|
8195
8231
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
|
8196
8232
|
VARS => { ID_LABEL => 'Index', NIKON_OFFSETS => 0x24 },
|
|
8197
8233
|
DATAMEMBER => [ 0x04 ],
|
|
8198
|
-
IS_SUBDIR => [ 0x30, 0x38, 0x98, 0xa0 ],
|
|
8234
|
+
IS_SUBDIR => [ 0x30, 0x38, 0x88, 0x98, 0xa0 ],
|
|
8199
8235
|
WRITABLE => 1,
|
|
8200
8236
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
8201
8237
|
NOTES => 'These tags are extracted from encrypted data in images from the Z7II.',
|
|
@@ -8245,9 +8281,19 @@ my %nikonFocalConversions = (
|
|
|
8245
8281
|
Start => '$val',
|
|
8246
8282
|
}
|
|
8247
8283
|
},
|
|
8284
|
+
0x88 => {
|
|
8285
|
+
Name => 'OrientationOffset',
|
|
8286
|
+
Format => 'int32u',
|
|
8287
|
+
Condition => '$$self{Model} =~ /^NIKON Z f\b/i',
|
|
8288
|
+
SubDirectory => {
|
|
8289
|
+
TagTable => 'Image::ExifTool::Nikon::OrientationInfo',
|
|
8290
|
+
Start => '$val',
|
|
8291
|
+
}
|
|
8292
|
+
},
|
|
8248
8293
|
0x98 => {
|
|
8249
8294
|
Name => 'OrientationOffset',
|
|
8250
8295
|
Format => 'int32u',
|
|
8296
|
+
Condition => '$$self{Model} =~ /^NIKON Z (30|5|50|6|6_2|7|7_2|8|fc)\b/i', #models other then the Z f
|
|
8251
8297
|
SubDirectory => {
|
|
8252
8298
|
TagTable => 'Image::ExifTool::Nikon::OrientationInfo',
|
|
8253
8299
|
Start => '$val',
|
|
@@ -8286,6 +8332,10 @@ my %nikonFocalConversions = (
|
|
|
8286
8332
|
Format => 'int16u',
|
|
8287
8333
|
Hidden => 1,
|
|
8288
8334
|
},
|
|
8335
|
+
0x2b => {
|
|
8336
|
+
Name => 'ImageArea',
|
|
8337
|
+
PrintConv => \%imageAreaD6,
|
|
8338
|
+
},
|
|
8289
8339
|
);
|
|
8290
8340
|
|
|
8291
8341
|
%Image::ExifTool::Nikon::PortraitInfoZ7II = (
|
|
@@ -8486,8 +8536,8 @@ my %nikonFocalConversions = (
|
|
|
8486
8536
|
%binaryDataAttrs,
|
|
8487
8537
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
8488
8538
|
DATAMEMBER => [ 0x20, 0x28, 0x2a ],
|
|
8489
|
-
#0x0019 => HDRFrame # For JPG 0=> Not HDR; 1=> file is the blended exposure. For raw files: 0=> Not from an HDR capture sequence; otherwise frame number in the HDR capture sequence -- 'Save Individual Pictures (RAW)' must be enabled.
|
|
8490
|
-
#0x001A => MultipleExposureFrame # For JPG 0=> Not a multiple exposure; 1=> file is the blended exposure. For raw files: 0=> Not a multiple exposure capture; otherwise frame number in the capture sequence -- 'Save Individual Pictures (RAW)' must be enabled.
|
|
8539
|
+
#0x0019 => HDRFrame # For JPG 0=> Not HDR; 1=> file is the blended exposure. For raw files: 0=> Not from an HDR capture sequence; otherwise frame number in the HDR capture sequence -- 'Save Individual Pictures (RAW)' must be enabled.
|
|
8540
|
+
#0x001A => MultipleExposureFrame # For JPG 0=> Not a multiple exposure; 1=> file is the blended exposure. For raw files: 0=> Not a multiple exposure capture; otherwise frame number in the capture sequence -- 'Save Individual Pictures (RAW)' must be enabled.
|
|
8491
8541
|
0x0020 => {
|
|
8492
8542
|
Name => 'FocusShiftShooting',
|
|
8493
8543
|
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96', #not valid for C30/C60/C120
|
|
@@ -8514,7 +8564,7 @@ my %nikonFocalConversions = (
|
|
|
8514
8564
|
0x002a => {
|
|
8515
8565
|
Name => 'IntervalFrame',
|
|
8516
8566
|
RawConv => '$$self{IntervalFrame} = $val',
|
|
8517
|
-
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{
|
|
8567
|
+
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and $$self{IntervalShooting} > 0', #not valid for C30/C60/C120
|
|
8518
8568
|
Format => 'int16u',
|
|
8519
8569
|
Hidden => 1,
|
|
8520
8570
|
},
|
|
@@ -8526,24 +8576,18 @@ my %nikonFocalConversions = (
|
|
|
8526
8576
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
8527
8577
|
DATAMEMBER => [ 0x0bea, 0x0beb ],
|
|
8528
8578
|
0x0be8 => {
|
|
8529
|
-
Name => 'AFAreaInitialXPosition', #
|
|
8530
|
-
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96
|
|
8579
|
+
Name => 'AFAreaInitialXPosition', #the horizontal position of the center the focus box prior to any subject detection or tracking. Origin is Top Left.
|
|
8580
|
+
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96', #not valid for C30/C60/C120
|
|
8531
8581
|
Format => 'int8s',
|
|
8532
8582
|
PrintConv => q{
|
|
8533
|
-
|
|
8534
|
-
#in FX mode and Dynamic(L), the 27 horizontal focus points are spaced 259 pixels apart starting at pixel 761 and ending at 7495
|
|
8535
|
-
#in FX mode and Dynamic(M), the 29 horizontal focus points are spaced 259 pixels apart starting at pixel 502 and ending at 7754
|
|
8536
|
-
#in DX mode and Single-point, the 19 horizontal focus points are spaced 388 pixels apart starting at pixel 636 and ending at 7620. [These correspond to FX positions and match the corresponding values in AFAreaMode tag AFAreaXPosition].
|
|
8537
|
-
#in DX mode and Wide(S), the 17 horizontal focus points are spaced 393 pixels apart starting at pixel 591 and ending at 7272.
|
|
8538
|
-
#in DX mode and Dynamic(L), the 17 horizontal focus points are spaced 388 pixels apart starting at pixel 1024 and ending at 7232
|
|
8539
|
-
#in DX mode and Dynamic(M), the 19 horizontal focus points are spaced 388 pixels apart starting at pixel 636 and ending at 7620
|
|
8540
|
-
|
|
8541
|
-
my $areaMode = $$self{VALUE}{PhotoShootingMenuBankImageArea};
|
|
8583
|
+
my $imageArea = $$self{ImageArea};
|
|
8542
8584
|
my $afAreaMode = $$self{VALUE}{AFAreaMode};
|
|
8543
|
-
my $dynamicAFAreaSize = $$self{
|
|
8585
|
+
my $dynamicAFAreaSize = ( defined $$self{DynamicAFAreaSize} ? $$self{DynamicAFAreaSize} : 0 );
|
|
8544
8586
|
|
|
8545
|
-
my $FX = 0;
|
|
8546
|
-
my $DX = 1;
|
|
8587
|
+
my $FX = 0; #image size 8256 x 5504
|
|
8588
|
+
my $DX = 1; #image size 5392 x 3592
|
|
8589
|
+
my $WideScreen = 4; #16:9 image area, image size 8256x4640
|
|
8590
|
+
my $OneToOne = 8; #1:1 image area, image size 5504x5504
|
|
8547
8591
|
|
|
8548
8592
|
my $Single = 1;
|
|
8549
8593
|
my $Dynamic = 2;
|
|
@@ -8557,54 +8601,51 @@ my %nikonFocalConversions = (
|
|
|
8557
8601
|
my $DynamicM = 1;
|
|
8558
8602
|
my $DynamicL = 2;
|
|
8559
8603
|
|
|
8560
|
-
my $start = 502;
|
|
8561
|
-
$
|
|
8562
|
-
$start = 591 if $areaMode == $DX and $afAreaMode == $WideS ; #DX Wide(S)
|
|
8604
|
+
my $start = 502; #FX, 16:9 & 1:1 formats
|
|
8605
|
+
my $increment = 259; #FX, & 16:9 formats
|
|
8563
8606
|
|
|
8564
|
-
|
|
8565
|
-
$
|
|
8566
|
-
$
|
|
8607
|
+
$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)
|
|
8608
|
+
$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
|
|
8609
|
+
$start = $start - $increment if $imageArea == $OneToOne and $afAreaMode == $Auto;
|
|
8567
8610
|
|
|
8568
|
-
|
|
8569
|
-
|
|
8611
|
+
if ($imageArea == $DX) { # DX results are in FX coordinate system to match reporting of ($AFAreaXPosition , $AFAreaYPosition)
|
|
8612
|
+
$start = 636;
|
|
8613
|
+
$increment = 388;
|
|
8614
|
+
if ( $afAreaMode == $WideS ) { #Wide S focus box width is an unusual size
|
|
8615
|
+
$start = 591;
|
|
8616
|
+
$increment = 393;
|
|
8617
|
+
}
|
|
8618
|
+
$start = $start - $increment if $afAreaMode == $Auto ;
|
|
8619
|
+
}
|
|
8620
|
+
|
|
8621
|
+
my $divisor = 3.99; #subtract .01 to ensure $val of 2n+2 rounds up
|
|
8622
|
+
$divisor = 4.01 if $val >= 50; #...but round up on the right side of the frame
|
|
8623
|
+
$divisor = 6 if $imageArea == $DX or $imageArea == $OneToOne;
|
|
8570
8624
|
|
|
8571
|
-
my $
|
|
8572
|
-
$offsetVal = 12 if $areaMode == $FX and $afAreaMode == $Dynamic ; #FX Dynamic (L/M) - force positive values so perl rounding toward zero isn't an issue
|
|
8573
|
-
$offsetVal = 18 if $areaMode == $DX and $afAreaMode == $Dynamic ; #DX Dynamic (L/M)
|
|
8625
|
+
my $roundedValOverDivisor = sprintf("%.0f", $val / $divisor); #round to nearest int
|
|
8574
8626
|
|
|
8575
|
-
my $
|
|
8576
|
-
$
|
|
8627
|
+
my $focusBoxWidth = $$self{AFAreaInitialWidth} ; #wider focus boxes (e.g., DynM, DynL and some Wide C1/C2) will start and end closer to the center of the frame
|
|
8628
|
+
$focusBoxWidth = int($focusBoxWidth * 2 / 3) if $imageArea == $DX or $imageArea == $OneToOne ;
|
|
8577
8629
|
|
|
8578
|
-
my $
|
|
8579
|
-
$ncol = int($ncol * 2 / 3) if $areaMode == $DX ; #DX
|
|
8630
|
+
my $skipPositions = int($focusBoxWidth / 2); #jump over half the width of the focus box
|
|
8580
8631
|
|
|
8581
|
-
|
|
8582
|
-
#FX Wide(S/L/C1/C2) [6, 10, 14, 18, 22, 26, 30, 34, 38, 42, 46, 49, 53, 57, 61, 65, 69, 73, 77, 81, 85, 89, 93, 97, 101, 105, 109, 113, 117] to 502, 761, 1020, 1279, 1538, 1797, 2056, 2315, 2574, 2833, 3092, 3351, 3610, 3869, 4128, 4387, 4646, 4905, 5164, 5423, 5682, 5941, 6200, 6459, 6718, 6977, 7236, 7495, 7754]
|
|
8583
|
-
#DX Wide(L/C1/C2) map for Wide(L)/C1/C2 [6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 67, 73, 79, 85, 91, 97, 103, 109, 115] to [636, 1024, 1412, 1800, 2188, 2576, 2964, 3352, 3740, 4128, 4516, 4904, 5292, 5680, 6068, 6456, 6844, 7232, 7620]
|
|
8584
|
-
#DX Wide(S) for Wide(S) [6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 67, 73, 79, 85, 91, 97, 103] to [984, 1377, 1770, 2163, 2556, 2949, 3342, 3735, 4128, 4521, 4914, 5307, 5700, 6093, 6486, 6879, 7272]
|
|
8585
|
-
#FX Dynamic (L) map [-9, -5, -1, 2, 6, 10, 14, 18, 22, 26, 30, 34, 38, 42, 46, 49, 53, 57, 61, 65, 69, 73, 77, 81, 85, 89, 93] to [761, 1020, 1279, 1538, 1797, 2056, 2315, 2574, 2833, 3092, 3351, 3610, 3869, 4128, 4387, 4646, 4905, 5164, 5423, 5682, 5941, 6200, 6459, 6718, 6977, 7236, 7495]
|
|
8632
|
+
my $result = $start + $increment * ($roundedValOverDivisor + $skipPositions - 1 ) ;
|
|
8586
8633
|
|
|
8587
|
-
return $
|
|
8634
|
+
return $result;
|
|
8588
8635
|
},
|
|
8589
8636
|
},
|
|
8590
8637
|
0x0be9 => {
|
|
8591
|
-
Name =>'AFAreaInitialYPosition', #
|
|
8592
|
-
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96
|
|
8638
|
+
Name =>'AFAreaInitialYPosition', #the vertical position of the center the focus box prior to any subject detection or tracking. Origin is Top Left.
|
|
8639
|
+
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96', #not valid for C30/C60/C120 or for Area Modes 1:1 and 16:9
|
|
8593
8640
|
Format => 'int8s',
|
|
8594
8641
|
PrintConv => q{
|
|
8595
|
-
|
|
8596
|
-
#in FX mode and Dynamic(L), the 15 vertical focus points are spaced 291 pixels apart starting at pixel 715 and ending at 4789
|
|
8597
|
-
#in FX mode and Dynamic(M), the 17 vertical l focus points are spaced 291 pixels apart starting at pixel 424 and ending at 5080
|
|
8598
|
-
#in DX mode and Single-point, the 11 vertical focus points are spaced 436 pixels apart starting at pixel 572 and ending at 4932. [These correspond to FX positions and match the corresponding values in AFAreaMode tag AFAreaYPosition].
|
|
8599
|
-
#in DX Mode and Wide(S) the 9 vertical focus points are spaced 442 pixels apart starting at pixel 542 and ending at 4520
|
|
8600
|
-
#in DX mode and Dynamic(L), the 9 vertical focus points are spaced 436 pixels apart starting at pixel 1008 and ending at 4496
|
|
8601
|
-
|
|
8602
|
-
my $areaMode = $$self{VALUE}{PhotoShootingMenuBankImageArea};
|
|
8642
|
+
my $imageArea = $$self{ImageArea};
|
|
8603
8643
|
my $afAreaMode = $$self{VALUE}{AFAreaMode};
|
|
8604
|
-
my $dynamicAFAreaSize = $$self{VALUE}{DynamicAFAreaSize};
|
|
8605
8644
|
|
|
8606
|
-
my $FX = 0;
|
|
8607
|
-
my $DX = 1;
|
|
8645
|
+
my $FX = 0; #image size 8256 x 5504
|
|
8646
|
+
my $DX = 1; #image size 5392 x 3592
|
|
8647
|
+
my $WideScreen = 4; #16:9 image area, image size 8256x4640
|
|
8648
|
+
my $OneToOne = 8; #1:1 image area, image size 5504x5504
|
|
8608
8649
|
|
|
8609
8650
|
my $Single = 1;
|
|
8610
8651
|
my $Dynamic = 2;
|
|
@@ -8618,49 +8659,42 @@ my %nikonFocalConversions = (
|
|
|
8618
8659
|
my $DynamicM = 1;
|
|
8619
8660
|
my $DynamicL = 2;
|
|
8620
8661
|
|
|
8621
|
-
my $start = 424;
|
|
8622
|
-
$
|
|
8623
|
-
$start =
|
|
8662
|
+
my $start = 424; #FX, 16:9 & 1:1 formats
|
|
8663
|
+
my $increment = 291; #FX, & 16:9 formats
|
|
8664
|
+
$start = $start + $increment if $imageArea == $WideScreen and $val > 0;
|
|
8624
8665
|
|
|
8625
|
-
|
|
8626
|
-
|
|
8627
|
-
|
|
8628
|
-
|
|
8629
|
-
|
|
8630
|
-
|
|
8666
|
+
if ($imageArea == $DX) { # DX results are in FX coordinate system to match reporting of ($AFAreaXPosition , $AFAreaYPosition)
|
|
8667
|
+
$start = 572;
|
|
8668
|
+
$increment = 436;
|
|
8669
|
+
if ( $afAreaMode == $WideS ) { #Wide S focus box is a strange size
|
|
8670
|
+
$start = 542;
|
|
8671
|
+
$increment = 442;
|
|
8672
|
+
}
|
|
8673
|
+
}
|
|
8631
8674
|
|
|
8632
|
-
my $
|
|
8633
|
-
$
|
|
8634
|
-
$
|
|
8635
|
-
$offsetVal = 40 if $areaMode == $FX and (($afAreaMode == $Dynamic and $dynamicAFAreaSize == $DynamicS) or $afAreaMode == $ThreeD) ; #FX Dynamic (S) or 3D
|
|
8636
|
-
$offsetVal = 38 if $areaMode == $DX and ($afAreaMode == $Dynamic and $dynamicAFAreaSize == $DynamicS ) ; #DX Dynamic (S)or 3D
|
|
8675
|
+
my $divisor = 6.67;
|
|
8676
|
+
$divisor = 10.01 if $imageArea == $DX ; #extra .01 to ensure $val of 10*n+5 rounds down
|
|
8677
|
+
$divisor = 8.01 if $imageArea == $WideScreen ;
|
|
8637
8678
|
|
|
8638
|
-
my $
|
|
8639
|
-
$offsetSum = -6 if $areaMode == $FX and ($afAreaMode == $Dynamic or $afAreaMode == $ThreeD); #FX Dynamic (L/M/S) or 3D
|
|
8640
|
-
$offsetSum = -4 if $areaMode == $DX and ($afAreaMode == $Dynamic or $afAreaMode == $ThreeD ); #DX Dynamic (L/M/S) or 3D
|
|
8679
|
+
my $roundedValOverDivisor = sprintf("%.0f", $val / $divisor); #round to nearest int
|
|
8641
8680
|
|
|
8642
|
-
my $
|
|
8643
|
-
$
|
|
8681
|
+
my $focusBoxHeight = $$self{AFAreaInitialHeight} ; #wider focus boxes (e.g., DynM, DynL and some Wide C1/C2) will start and end closer to the center of the frame
|
|
8682
|
+
$focusBoxHeight = int($focusBoxHeight * 2 / 3) if $imageArea == $DX ;
|
|
8644
8683
|
|
|
8645
|
-
#
|
|
8646
|
-
#FX Wide(S/L/C1/C2) map [7, 13, 20, 27, 33, 40, 47, 53, 60, 67, 74, 80, 87, 94, 100, 107, 114] to [424, 715, 1006, 1297, 1588, 1879, 2170, 2461, 2752, 3043, 3334, 3625, 3916, 4207, 4498, 4789, 5080]
|
|
8647
|
-
#DX Wide(L/C1/C2) map [7, 17, 28, 38, 48, 58, 69, 79, 89, 100, 110] to [572, 1008, 1444, 1880, 2316, 2752, 3188, 3624, 4060, 4496, 4932]
|
|
8648
|
-
#DX Wide(S) map for Wide(S) [7, 17, 28, 38, 48, 58, 69, 79, 89] to [984, 1426, 1868, 2310, 2752, 3194, 3636, 4078, 4520]
|
|
8649
|
-
#FX Dynamic (L) map [-19, -13, -6, 0, 7, 13, 20, 27, 33, 40, 47, 53, 60, 67, 74] to [715, 1006, 1297, 1588, 1879, 2170, 2461, 2752, 3043, 3334, 3625, 3916, 4207, 4498, 4789]
|
|
8684
|
+
my $skipPositions = int($focusBoxHeight / 2); #jump over half the height of the focus box
|
|
8650
8685
|
|
|
8651
|
-
|
|
8686
|
+
my $result = $start + $increment * ($roundedValOverDivisor + $skipPositions - 1 ) ;
|
|
8687
|
+
return $result;
|
|
8652
8688
|
},
|
|
8653
8689
|
},
|
|
8654
8690
|
0x0bea => {
|
|
8655
8691
|
Name => 'AFAreaInitialWidth',
|
|
8656
8692
|
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96', #not valid for C30/C60/C120
|
|
8657
|
-
ValueConv => '$$self{VALUE}{PhotoShootingMenuBankImageArea} eq 0 ? $val : int($val * 2 / 3)', #DX mode requires scaling down TODO: add support ImageAreas 1:1 and 16:9
|
|
8658
8693
|
RawConv => '$$self{AFAreaInitialWidth} = 1 + int ($val / 4)', #convert from [3, 11, 19, 35, 51, 75] to [1, 3, 5, 9 13, 19] to match camera options for C1/C2 focus modes .. input/output of 11/3 is for Wide(S)
|
|
8659
8694
|
},
|
|
8660
8695
|
0x0beb => {
|
|
8661
8696
|
Name => 'AFAreaInitialHeight',
|
|
8662
8697
|
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96', #not valid for C30/C60/C120
|
|
8663
|
-
ValueConv => '$$self{VALUE}{PhotoShootingMenuBankImageArea} eq 0 ? $val : int($val * 2 / 3)', #DX mode requires scaling down TODO: add support ImageAreas 1:1 and 16:9
|
|
8664
8698
|
RawConv => '$$self{AFAreaInitialHeight} = 1 + int ($val / 7) ', #convert from [6, 20, 33, 46, 73] to [1, 3, 5, 7, 11] to match camera options for C1/C2 focus modes .. input/output of 33/5 is for Wide(L)
|
|
8665
8699
|
},
|
|
8666
8700
|
);
|
|
@@ -9351,7 +9385,7 @@ my %nikonFocalConversions = (
|
|
|
9351
9385
|
%Image::ExifTool::Nikon::MenuSettingsZ9 = (
|
|
9352
9386
|
%binaryDataAttrs,
|
|
9353
9387
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
9354
|
-
DATAMEMBER => [ 140, 188, 192, 232, 424, 528, 534, 576 ],
|
|
9388
|
+
DATAMEMBER => [ 140, 188, 192, 232, 308, 424, 528, 534, 576 ],
|
|
9355
9389
|
IS_SUBDIR => [ 799 ],
|
|
9356
9390
|
NOTES => 'These tags are used by the Z9.',
|
|
9357
9391
|
#90 ISO
|
|
@@ -9396,7 +9430,7 @@ my %nikonFocalConversions = (
|
|
|
9396
9430
|
},
|
|
9397
9431
|
274 => { Name => 'PhotoShootingMenuBank', PrintConv => \%banksZ9 },
|
|
9398
9432
|
276 => { Name => 'ExtendedMenuBanks', PrintConv => \%offOn }, #single tag from both Photo & Video menus
|
|
9399
|
-
308 => { Name => 'PhotoShootingMenuBankImageArea', PrintConv => \%imageAreaZ9 },
|
|
9433
|
+
308 => { Name => 'PhotoShootingMenuBankImageArea', RawConv => '$$self{ImageArea} = $val', PrintConv => \%imageAreaZ9 },
|
|
9400
9434
|
#310 ImageQuality
|
|
9401
9435
|
322 => { Name => 'AutoISO', PrintConv => \%offOn },
|
|
9402
9436
|
324 => {
|
|
@@ -9562,7 +9596,7 @@ my %nikonFocalConversions = (
|
|
|
9562
9596
|
%Image::ExifTool::Nikon::MenuSettingsZ9v3 = (
|
|
9563
9597
|
%binaryDataAttrs,
|
|
9564
9598
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
9565
|
-
DATAMEMBER => [ 154, 204, 208, 248, 444, 548, 554, 596 ],
|
|
9599
|
+
DATAMEMBER => [ 154, 204, 208, 248, 328, 444, 548, 554, 596 ],
|
|
9566
9600
|
IS_SUBDIR => [ 847 ],
|
|
9567
9601
|
NOTES => 'These tags are used by the Z9 firmware 3.00.',
|
|
9568
9602
|
72 => {
|
|
@@ -9609,7 +9643,7 @@ my %nikonFocalConversions = (
|
|
|
9609
9643
|
},
|
|
9610
9644
|
290 => { Name => 'PhotoShootingMenuBank', PrintConv => \%banksZ9 },
|
|
9611
9645
|
292 => { Name => 'ExtendedMenuBanks', PrintConv => \%offOn }, # single tag from both Photo & Video menus
|
|
9612
|
-
328 => { Name => 'PhotoShootingMenuBankImageArea', PrintConv => \%imageAreaZ9 },
|
|
9646
|
+
328 => { Name => 'PhotoShootingMenuBankImageArea', RawConv => '$$self{ImageArea} = $val', PrintConv => \%imageAreaZ9 },
|
|
9613
9647
|
342 => { Name => 'AutoISO', PrintConv => \%offOn },
|
|
9614
9648
|
344 => {
|
|
9615
9649
|
Name => 'ISOAutoHiLimit',
|
|
@@ -9795,7 +9829,7 @@ my %nikonFocalConversions = (
|
|
|
9795
9829
|
%Image::ExifTool::Nikon::MenuSettingsZ9v4 = (
|
|
9796
9830
|
%binaryDataAttrs,
|
|
9797
9831
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
9798
|
-
DATAMEMBER => [ 154, 204, 208, 248, 444, 548, 554, 570, 596 ],
|
|
9832
|
+
DATAMEMBER => [ 154, 204, 208, 248, 328, 444, 548, 554, 570, 596 ],
|
|
9799
9833
|
IS_SUBDIR => [ 847 ],
|
|
9800
9834
|
NOTES => 'These tags are used by the Z9 firmware 3.00.',
|
|
9801
9835
|
72 => {
|
|
@@ -9842,7 +9876,7 @@ my %nikonFocalConversions = (
|
|
|
9842
9876
|
},
|
|
9843
9877
|
290 => { Name => 'PhotoShootingMenuBank', PrintConv => \%banksZ9 },
|
|
9844
9878
|
292 => { Name => 'ExtendedMenuBanks', PrintConv => \%offOn }, # single tag from both Photo & Video menus
|
|
9845
|
-
328 => { Name => 'PhotoShootingMenuBankImageArea', PrintConv => \%imageAreaZ9 },
|
|
9879
|
+
328 => { Name => 'PhotoShootingMenuBankImageArea', RawConv => '$$self{ImageArea} = $val', PrintConv => \%imageAreaZ9 },
|
|
9846
9880
|
#334 JPGCompression 0 => 'Size Priority', 1 => 'Optimal Quality',
|
|
9847
9881
|
342 => { Name => 'AutoISO', PrintConv => \%offOn },
|
|
9848
9882
|
344 => {
|
|
@@ -11396,13 +11430,80 @@ my %nikonFocalConversions = (
|
|
|
11396
11430
|
# 0x02 - undef[148]
|
|
11397
11431
|
# 0x03 - undef[284]
|
|
11398
11432
|
# 0x04 - undef[148,212]
|
|
11399
|
-
|
|
11400
|
-
|
|
11433
|
+
0x05 => { #28
|
|
11434
|
+
Name => 'DistortionInfo', # Z-series distortion correction information
|
|
11435
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::DistortionInfo' },
|
|
11436
|
+
},
|
|
11437
|
+
0x06 => { #28
|
|
11438
|
+
Name => 'VignetteInfo', # Z-series vignette correction information
|
|
11439
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::VignetteInfo' },
|
|
11440
|
+
},
|
|
11401
11441
|
# 0x07 - undef[104]
|
|
11402
11442
|
# 0x08 - undef[24]
|
|
11403
11443
|
# 0x09 - undef[36]
|
|
11404
11444
|
);
|
|
11405
11445
|
|
|
11446
|
+
# Z-series distortion correction information (correction model is appears to be a cubic polynomial) (ref 28)
|
|
11447
|
+
%Image::ExifTool::Nikon::DistortionInfo = (
|
|
11448
|
+
%binaryDataAttrs,
|
|
11449
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
11450
|
+
0 => {
|
|
11451
|
+
Name => 'DistortionCorrectionVersion',
|
|
11452
|
+
Format => 'string[4]',
|
|
11453
|
+
},
|
|
11454
|
+
4 => {
|
|
11455
|
+
Name => 'DistortionCorrection', #used by ACR to determine whether the built-in lens profile is applied
|
|
11456
|
+
Format => 'int8u',
|
|
11457
|
+
PrintConv => {
|
|
11458
|
+
1 => 'On (Optional)',
|
|
11459
|
+
2 => 'Off',
|
|
11460
|
+
3 => 'On (Required)',
|
|
11461
|
+
},
|
|
11462
|
+
},
|
|
11463
|
+
#0x10 Degree of radial distortion correction polynomial? (always 4? - decodes for the first 3 coefficients follow, the 4th at 0x2c/0x30 seems to always be 0)
|
|
11464
|
+
0x14 => {
|
|
11465
|
+
Name => 'RadialDistortionCoefficient1',
|
|
11466
|
+
Format => 'rational64s',
|
|
11467
|
+
PrintConv => 'sprintf("%.5f",$val)',
|
|
11468
|
+
},
|
|
11469
|
+
0x1c => {
|
|
11470
|
+
Name => 'RadialDistortionCoefficient2',
|
|
11471
|
+
Format => 'rational64s',
|
|
11472
|
+
PrintConv => 'sprintf("%.5f",$val)',
|
|
11473
|
+
},
|
|
11474
|
+
0x24 => {
|
|
11475
|
+
Name => 'RadialDistortionCoefficient3',
|
|
11476
|
+
Format => 'rational64s',
|
|
11477
|
+
PrintConv => 'sprintf("%.5f",$val)',
|
|
11478
|
+
},
|
|
11479
|
+
);
|
|
11480
|
+
|
|
11481
|
+
# Z-series vignette correction information (correction model seems to be using a 6th order even polynomial) (ref 28)
|
|
11482
|
+
%Image::ExifTool::Nikon::VignetteInfo = (
|
|
11483
|
+
%binaryDataAttrs,
|
|
11484
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
11485
|
+
0 => {
|
|
11486
|
+
Name => 'VignetteCorrectionVersion',
|
|
11487
|
+
Format => 'string[4]',
|
|
11488
|
+
},
|
|
11489
|
+
#0x10 Degree of vignette correction polynomial? (always 8? - decodes for the first 3 coefficents follow, the 4th at 0x4c/0x50 seems to always be 0)
|
|
11490
|
+
0x24 => {
|
|
11491
|
+
Name => 'VignetteCoefficient1',
|
|
11492
|
+
Format => 'rational64s',
|
|
11493
|
+
PrintConv => 'sprintf("%.5f",$val)',
|
|
11494
|
+
},
|
|
11495
|
+
0x34 => {
|
|
11496
|
+
Name => 'VignetteCoefficient2',
|
|
11497
|
+
Format => 'rational64s',
|
|
11498
|
+
PrintConv => 'sprintf("%.5f",$val)',
|
|
11499
|
+
},
|
|
11500
|
+
0x44 => {
|
|
11501
|
+
Name => 'VignetteCoefficient3',
|
|
11502
|
+
Format => 'rational64s',
|
|
11503
|
+
PrintConv => 'sprintf("%.5f",$val)',
|
|
11504
|
+
},
|
|
11505
|
+
);
|
|
11506
|
+
|
|
11406
11507
|
# tags in Nikon QuickTime videos (PH - observations with Coolpix S3)
|
|
11407
11508
|
# (similar information in Kodak,Minolta,Nikon,Olympus,Pentax and Sanyo videos)
|
|
11408
11509
|
%Image::ExifTool::Nikon::MOV = (
|