exiftool-vendored.pl 12.54.0 → 12.56.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 +34 -4
- package/bin/MANIFEST +5 -0
- package/bin/META.json +1 -1
- package/bin/META.yml +1 -1
- package/bin/README +19 -19
- package/bin/arg_files/xmp2exif.args +4 -1
- package/bin/exiftool +28 -28
- package/bin/fmt_files/kml.fmt +3 -0
- package/bin/fmt_files/kml_track.fmt +6 -3
- package/bin/lib/Image/ExifTool/BuildTagLookup.pm +7 -5
- package/bin/lib/Image/ExifTool/Canon.pm +8 -2
- package/bin/lib/Image/ExifTool/Exif.pm +31 -2
- package/bin/lib/Image/ExifTool/FlashPix.pm +69 -8
- package/bin/lib/Image/ExifTool/FujiFilm.pm +3 -1
- package/bin/lib/Image/ExifTool/Geotag.pm +13 -4
- package/bin/lib/Image/ExifTool/InfiRay.pm +227 -0
- package/bin/lib/Image/ExifTool/JPEG.pm +40 -6
- package/bin/lib/Image/ExifTool/Matroska.pm +4 -4
- package/bin/lib/Image/ExifTool/Nikon.pm +187 -384
- package/bin/lib/Image/ExifTool/OpenEXR.pm +32 -15
- package/bin/lib/Image/ExifTool/PNG.pm +80 -2
- package/bin/lib/Image/ExifTool/QuickTime.pm +19 -4
- package/bin/lib/Image/ExifTool/QuickTimeStream.pl +127 -39
- package/bin/lib/Image/ExifTool/README +3 -0
- package/bin/lib/Image/ExifTool/Real.pm +2 -2
- package/bin/lib/Image/ExifTool/Sony.pm +5 -1
- package/bin/lib/Image/ExifTool/TagLookup.pm +4544 -4525
- package/bin/lib/Image/ExifTool/TagNames.pod +229 -21
- package/bin/lib/Image/ExifTool/VCard.pm +19 -5
- package/bin/lib/Image/ExifTool.pm +56 -15
- package/bin/lib/Image/ExifTool.pod +51 -50
- package/bin/perl-Image-ExifTool.spec +18 -18
- package/bin/pp_build_exe.args +7 -6
- package/package.json +3 -3
|
@@ -64,7 +64,7 @@ use Image::ExifTool::Exif;
|
|
|
64
64
|
use Image::ExifTool::GPS;
|
|
65
65
|
use Image::ExifTool::XMP;
|
|
66
66
|
|
|
67
|
-
$VERSION = '4.
|
|
67
|
+
$VERSION = '4.18';
|
|
68
68
|
|
|
69
69
|
sub LensIDConv($$$);
|
|
70
70
|
sub ProcessNikonAVI($$$);
|
|
@@ -919,6 +919,14 @@ my %hDMIOutputResolutionZ9 = (
|
|
|
919
919
|
#7 => '480p',
|
|
920
920
|
);
|
|
921
921
|
|
|
922
|
+
my %highFrameRateZ9 = (
|
|
923
|
+
0 => 'Off',
|
|
924
|
+
1 => 'CH',
|
|
925
|
+
3 => 'C30',
|
|
926
|
+
5 => 'C60',
|
|
927
|
+
4 => 'C120',
|
|
928
|
+
);
|
|
929
|
+
|
|
922
930
|
my %imageAreaZ9 = (
|
|
923
931
|
0 => 'FX',
|
|
924
932
|
1 => 'DX',
|
|
@@ -1651,7 +1659,7 @@ my %base64coord = (
|
|
|
1651
1659
|
0x0019 => { #5
|
|
1652
1660
|
Name => 'ExposureBracketValue',
|
|
1653
1661
|
Writable => 'rational64s',
|
|
1654
|
-
PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)',
|
|
1662
|
+
PrintConv => '$val !~ /undef/ ? Image::ExifTool::Exif::PrintFraction($val) : "n/a" ', #undef observed for Z9 jpgs at C30/C60/C90 [data is 0/0 rather than the usual 0/6]
|
|
1655
1663
|
PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
|
|
1656
1664
|
},
|
|
1657
1665
|
0x001a => { #PH
|
|
@@ -1803,6 +1811,7 @@ my %base64coord = (
|
|
|
1803
1811
|
0x0034 => { #forum9646
|
|
1804
1812
|
Name => 'ShutterMode',
|
|
1805
1813
|
Writable => 'int16u',
|
|
1814
|
+
RawConv => '$$self{ShutterMode} = $val',
|
|
1806
1815
|
PrintConv => {
|
|
1807
1816
|
0 => 'Mechanical',
|
|
1808
1817
|
16 => 'Electronic',
|
|
@@ -1811,6 +1820,7 @@ my %base64coord = (
|
|
|
1811
1820
|
64 => 'Electronic (Movie)', #JanSkoda (Z6II)
|
|
1812
1821
|
80 => 'Auto (Mechanical)', #JanSkoda (Z6II)
|
|
1813
1822
|
81 => 'Auto (Electronic Front Curtain)', #JanSkoda (Z6II)
|
|
1823
|
+
96 => 'Electronic (High Speed)', #28 Z9 at C30/C60/C120 frame rates
|
|
1814
1824
|
},
|
|
1815
1825
|
},
|
|
1816
1826
|
0x0035 => [{ #32
|
|
@@ -1874,6 +1884,14 @@ my %base64coord = (
|
|
|
1874
1884
|
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::MakerNotes0x51' },
|
|
1875
1885
|
},
|
|
1876
1886
|
#0x0053 #28 possibly a secondary DistortionControl block (in addition to DistortInfo)? Certainly offset 0x04 within block contains tag AutoDistortionControl for Z72 and D6 (1=>On; 2=> Off)
|
|
1887
|
+
0x0056 => { #28 (Z9)
|
|
1888
|
+
Name => 'MakerNotes0x56',
|
|
1889
|
+
Writable => 'undef',
|
|
1890
|
+
Hidden => 1,
|
|
1891
|
+
Permanent => 0,
|
|
1892
|
+
Flags => [ 'Binary', 'Protected' ],
|
|
1893
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::MakerNotes0x56' },
|
|
1894
|
+
},
|
|
1877
1895
|
#0x005e #28 possibly DiffractionCompensation block? Certainly offset 0x04 within block contains tag DiffractionCompensation
|
|
1878
1896
|
0x0080 => { Name => 'ImageAdjustment', Writable => 'string' },
|
|
1879
1897
|
0x0081 => { Name => 'ToneComp', Writable => 'string' }, #2
|
|
@@ -2003,6 +2021,7 @@ my %base64coord = (
|
|
|
2003
2021
|
6 => 'White-Balance Bracketing',
|
|
2004
2022
|
7 => 'IR Control',
|
|
2005
2023
|
8 => 'D-Lighting Bracketing', #forum6281 (NC)
|
|
2024
|
+
11 => 'Pre-capture', #28 Z9 pre-release burst
|
|
2006
2025
|
});
|
|
2007
2026
|
],
|
|
2008
2027
|
},
|
|
@@ -4292,10 +4311,10 @@ my %base64coord = (
|
|
|
4292
4311
|
$$self{ContrastDetectAF} == 2 and $$self{AFInfo2Version} =~ /^03/ or
|
|
4293
4312
|
$$self{ContrastDetectAF} == 1 and $$self{AFInfo2Version} =~ /^0301/
|
|
4294
4313
|
},
|
|
4295
|
-
Format => 'int16u',
|
|
4314
|
+
Format => 'int16u', # (decodes same byte as 0x2f)
|
|
4296
4315
|
},
|
|
4297
4316
|
0x2f => { #28 (Z7) Still photography range 1-17 for the 493 point Z7 (arranged in a 29x17 grid. Center at x=16, y=10).
|
|
4298
|
-
Name => '
|
|
4317
|
+
Name => 'FocusPositionHorizontal',
|
|
4299
4318
|
Condition => q{
|
|
4300
4319
|
$$self{ContrastDetectAF} == 2 and $$self{AFInfo2Version} =~ /^03/ or
|
|
4301
4320
|
$$self{ContrastDetectAF} == 1 and $$self{AFInfo2Version} =~ /^0301/
|
|
@@ -4309,7 +4328,7 @@ my %base64coord = (
|
|
|
4309
4328
|
$$self{ContrastDetectAF} == 2 and $$self{AFInfo2Version} =~ /^03/ or
|
|
4310
4329
|
$$self{ContrastDetectAF} == 1 and $$self{AFInfo2Version} =~ /^0301/
|
|
4311
4330
|
},
|
|
4312
|
-
Format => 'int16u',
|
|
4331
|
+
Format => 'int16u', # (decodes same byte as 0x31)
|
|
4313
4332
|
},{ #PH (D500, see forum11190)
|
|
4314
4333
|
Name => 'AFPointsInFocus',
|
|
4315
4334
|
Condition => '$$self{AFInfo2Version} eq "0101" and $$self{PhaseDetectAF} == 7',
|
|
@@ -4322,7 +4341,7 @@ my %base64coord = (
|
|
|
4322
4341
|
},
|
|
4323
4342
|
],
|
|
4324
4343
|
0x31 => { #28 (Z7)
|
|
4325
|
-
Name => '
|
|
4344
|
+
Name => 'FocusPositionVertical',
|
|
4326
4345
|
Condition => q{
|
|
4327
4346
|
$$self{ContrastDetectAF} == 2 and $$self{AFInfo2Version} =~ /^03/ or
|
|
4328
4347
|
$$self{ContrastDetectAF} == 1 and $$self{AFInfo2Version} =~ /^0301/
|
|
@@ -4452,6 +4471,21 @@ my %base64coord = (
|
|
|
4452
4471
|
Writable => 0,
|
|
4453
4472
|
RawConv => '$$self{AFInfo2Version} = $val',
|
|
4454
4473
|
},
|
|
4474
|
+
5 => { #28
|
|
4475
|
+
Name => 'AFAreaMode', #reflects the mode active when the shutter is tripped, not the position of the Focus Mode button (which is recorded in MenuSettingsZ9 tag also named AfAreaMode)
|
|
4476
|
+
PrintConv => {
|
|
4477
|
+
192 => 'Pinpoint',
|
|
4478
|
+
193 => 'Single',
|
|
4479
|
+
195 => 'Wide (S)',
|
|
4480
|
+
196 => 'Wide (L)',
|
|
4481
|
+
197 => 'Auto',
|
|
4482
|
+
204 => 'Dynamic Area (S)',
|
|
4483
|
+
205 => 'Dynamic Area (M)',
|
|
4484
|
+
206 => 'Dynamic Area (L)',
|
|
4485
|
+
207 => '3D-tracking',
|
|
4486
|
+
208 => 'Wide (C1/C2)',
|
|
4487
|
+
},
|
|
4488
|
+
},
|
|
4455
4489
|
0x3e => {
|
|
4456
4490
|
Name => 'AFImageWidth',
|
|
4457
4491
|
Format => 'int16u',
|
|
@@ -4460,6 +4494,11 @@ my %base64coord = (
|
|
|
4460
4494
|
Name => 'AFImageHeight',
|
|
4461
4495
|
Format => 'int16u',
|
|
4462
4496
|
},
|
|
4497
|
+
0x42 => { #28
|
|
4498
|
+
Name => 'AFAreaXPosition', #top left image corner is the origin
|
|
4499
|
+
Format => 'int16u', # (decodes same byte as 0x43)
|
|
4500
|
+
RawConv => '$val ? $val : undef',
|
|
4501
|
+
},
|
|
4463
4502
|
0x43 => {
|
|
4464
4503
|
Name => 'FocusPositionHorizontal',
|
|
4465
4504
|
Notes => q{
|
|
@@ -4471,6 +4510,11 @@ my %base64coord = (
|
|
|
4471
4510
|
# (the 11R (5) position is not used, for a total of 29 columns, ref AlbertShan email)
|
|
4472
4511
|
PrintConv => sub { my ($val) = @_; PrintAFPointsLeftRight($val, 29); },
|
|
4473
4512
|
},
|
|
4513
|
+
0x44 => { #28
|
|
4514
|
+
Name => 'AFAreaYPosition',
|
|
4515
|
+
Format => 'int16u', # (decodes same byte as 0x45)
|
|
4516
|
+
RawConv => '$val ? $val : undef',
|
|
4517
|
+
},
|
|
4474
4518
|
0x45 => {
|
|
4475
4519
|
Name => 'FocusPositionVertical',
|
|
4476
4520
|
# (the 6U (4) and 2D (12) are not used, for a total of 17 rows, ref AlbertShan email)
|
|
@@ -5260,6 +5304,7 @@ my %nikonFocalConversions = (
|
|
|
5260
5304
|
22 => 'Nikkor Z 24-50mm f/4-6.3', #IB
|
|
5261
5305
|
23 => 'Nikkor Z 14-24mm f/2.8 S', #IB
|
|
5262
5306
|
24 => 'Nikkor Z MC 105mm f/2.8 VR S', #IB
|
|
5307
|
+
25 => 'Nikkor Z 40mm f/2', #28
|
|
5263
5308
|
27 => 'Nikkor Z MC 50mm f/2.8', #IB
|
|
5264
5309
|
28 => 'Nikkor Z 100-400mm f/4.5-5.6 VR S', #28
|
|
5265
5310
|
29 => 'Nikkor Z 28mm f/2.8', #IB
|
|
@@ -5267,7 +5312,10 @@ my %nikonFocalConversions = (
|
|
|
5267
5312
|
31 => 'Nikkor Z 24-120 f/4', #28
|
|
5268
5313
|
32 => 'Nikkor Z 800mm f/6.3 VR S', #28
|
|
5269
5314
|
36 => 'Nikkor Z 400mm f/4.5 VR S', #IB
|
|
5315
|
+
37 => 'Nikkor Z 600mm f/4 TC VR S', #28
|
|
5270
5316
|
39 => 'Nikkor Z 17-28mm f/2.8', #IB
|
|
5317
|
+
32768 => 'Nikkor Z 400mm f/2.8 TC VR S TC-1.4x', #28
|
|
5318
|
+
32769 => 'Nikkor Z 600mm f/4 TC VR S TC-1.4x', #28
|
|
5271
5319
|
},
|
|
5272
5320
|
},
|
|
5273
5321
|
0x35 => { #28
|
|
@@ -8309,9 +8357,9 @@ my %nikonFocalConversions = (
|
|
|
8309
8357
|
WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted,
|
|
8310
8358
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
|
8311
8359
|
VARS => { ID_LABEL => 'Index' },
|
|
8312
|
-
DATAMEMBER => [ 0x04, 0x30,
|
|
8313
|
-
|
|
8314
|
-
IS_SUBDIR => [
|
|
8360
|
+
DATAMEMBER => [ 0x04, 0x30, 0x84, 0x8c,0x93, 0xb4, 0xbc, 0xbe,
|
|
8361
|
+
0x4410, 0x4411, 0x80c4, 0x8149, 0x814a ],
|
|
8362
|
+
IS_SUBDIR => [ 0x44ec, 0x8225 ],
|
|
8315
8363
|
WRITABLE => 1,
|
|
8316
8364
|
FIRST_ENTRY => 0,
|
|
8317
8365
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
@@ -8348,20 +8396,12 @@ my %nikonFocalConversions = (
|
|
|
8348
8396
|
Hidden => 1,
|
|
8349
8397
|
},
|
|
8350
8398
|
0x30 => {
|
|
8351
|
-
Name => '
|
|
8352
|
-
DataMember => '
|
|
8399
|
+
Name => 'SequenceOffset', #offset3 - length 2528 (Z9 firmware 1.0)
|
|
8400
|
+
DataMember => 'SequenceOffset',
|
|
8353
8401
|
Format => 'int32u',
|
|
8354
8402
|
Writable => 0,
|
|
8355
8403
|
Hidden => 1,
|
|
8356
|
-
RawConv => '$$self{
|
|
8357
|
-
},
|
|
8358
|
-
0x38 => {
|
|
8359
|
-
Name => 'Offset5', #offset5 - length 2488 (Z9 firmware 1.0)
|
|
8360
|
-
DataMember => 'Offset5',
|
|
8361
|
-
Format => 'int32u',
|
|
8362
|
-
Writable => 0,
|
|
8363
|
-
Hidden => 1,
|
|
8364
|
-
RawConv => '$$self{Offset5} = $val || 0x10000000; undef', # (ignore if 0)
|
|
8404
|
+
RawConv => '$$self{SequenceOffset} = $val || 0x10000000; undef', # (ignore if 0)
|
|
8365
8405
|
},
|
|
8366
8406
|
0x84 => {
|
|
8367
8407
|
Name => 'OrientationOffset', #offset24 - length 108 (Z9 firmware 1.0)
|
|
@@ -8372,23 +8412,25 @@ my %nikonFocalConversions = (
|
|
|
8372
8412
|
RawConv => '$$self{OrientationOffset} = $val || 0x10000000; undef', # (ignore if 0)
|
|
8373
8413
|
},
|
|
8374
8414
|
0x8c => {
|
|
8375
|
-
Name => '
|
|
8376
|
-
DataMember => '
|
|
8415
|
+
Name => 'MenuOffset', #offset26 - length 1895 (Z9 firmware 1.0)
|
|
8416
|
+
DataMember => 'MenuOffset6',
|
|
8377
8417
|
Format => 'int32u',
|
|
8378
8418
|
Writable => 0,
|
|
8379
8419
|
Hidden => 1,
|
|
8380
|
-
RawConv => '$$self{
|
|
8420
|
+
RawConv => '$$self{MenuOffset} = $val || 0x10000000; undef', # (ignore if 0)
|
|
8381
8421
|
},
|
|
8382
|
-
###
|
|
8383
|
-
|
|
8384
|
-
Name => '
|
|
8422
|
+
### 0x0094 - SequenceOffset info start (Z9 firmware 1.00)
|
|
8423
|
+
0x0093 => {
|
|
8424
|
+
Name => 'SequenceOffsetHook',
|
|
8425
|
+
Condition => '$$self{ShutterMode} ne 96', #not valid for C30/C60/C120
|
|
8385
8426
|
Hidden => 1,
|
|
8386
8427
|
RawConv => 'undef',
|
|
8387
|
-
# account for variable location of
|
|
8388
|
-
Hook => '$varSize = $$self{
|
|
8428
|
+
# account for variable location of SequenceOffset data
|
|
8429
|
+
Hook => '$varSize = $$self{SequenceOffset} - 0x0094',
|
|
8389
8430
|
},
|
|
8390
|
-
|
|
8431
|
+
0x00b4 => {
|
|
8391
8432
|
Name => 'FocusShiftShooting',
|
|
8433
|
+
Condition => '$$self{ShutterMode} ne 96', #not valid for C30/C60/C120
|
|
8392
8434
|
RawConv => '$$self{FocusShiftShooting} = $val',
|
|
8393
8435
|
PrintConv => q{
|
|
8394
8436
|
return 'Off' if $val == 0 ;
|
|
@@ -8396,8 +8438,9 @@ my %nikonFocalConversions = (
|
|
|
8396
8438
|
return "On: $i"
|
|
8397
8439
|
},
|
|
8398
8440
|
},
|
|
8399
|
-
|
|
8441
|
+
0x00bc => {
|
|
8400
8442
|
Name => 'IntervalShooting',
|
|
8443
|
+
Condition => '$$self{ShutterMode} ne 96', #not valid for C30/C60/C120
|
|
8401
8444
|
RawConv => '$$self{IntervalShooting} = $val',
|
|
8402
8445
|
Format => 'int16u',
|
|
8403
8446
|
PrintConv => q{
|
|
@@ -8408,32 +8451,73 @@ my %nikonFocalConversions = (
|
|
|
8408
8451
|
#$val == 0 ? 'Off' : sprintf("On: Interval %.0f of %.0f Frame %.0f of %.0f",$val, $$self{IntervalShootingIntervals}, $$self{IntervalFrame}, $$self{IntervalShootingShotsPerInterval}),
|
|
8409
8452
|
},
|
|
8410
8453
|
},
|
|
8411
|
-
|
|
8454
|
+
0x00be => {
|
|
8455
|
+
Condition => '$$self{ShutterMode} ne 96', #not valid for C30/C60/C120
|
|
8412
8456
|
Name => 'IntervalFrame',
|
|
8413
8457
|
RawConv => '$$self{IntervalFrame} = $val',
|
|
8414
|
-
Condition => '$$self{
|
|
8458
|
+
Condition => '$$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
|
|
8415
8459
|
Format => 'int16u',
|
|
8416
8460
|
Hidden => 1,
|
|
8417
8461
|
},
|
|
8418
|
-
###
|
|
8419
|
-
|
|
8462
|
+
### 0x4400 - Offset26 info start (Z9 firmware 3.01 C30/C60/C120 )
|
|
8463
|
+
0x4410 => {
|
|
8464
|
+
Name => 'MenuSettingsZ9Offset',
|
|
8465
|
+
Condition => '$$self{ShutterMode} eq 96', # C30/C60/C120 jpgs only
|
|
8466
|
+
Writable => 0,
|
|
8467
|
+
Hidden => 1,
|
|
8468
|
+
# offset to MenuSettingsZ9 is relative to start of Offset26 block
|
|
8469
|
+
RawConv => '$$self{MenuSettingsZ9Offset} = ($val || 0x10000000) + $$self{MenuOffset}; undef', # (ignore if 0)
|
|
8470
|
+
},
|
|
8471
|
+
0x4411 => {
|
|
8472
|
+
Name => 'Hook5',
|
|
8473
|
+
Condition => '$$self{ShutterMode} eq 96', # C30/C60/C120 jpgs only
|
|
8474
|
+
Hidden => 1,
|
|
8475
|
+
RawConv => 'undef',
|
|
8476
|
+
# account for variable location of menu settings data
|
|
8477
|
+
Hook => '$varSize = $$self{MenuSettingsZ9Offset} - 0x44ec',
|
|
8478
|
+
},
|
|
8479
|
+
0x44ec => [
|
|
8480
|
+
{
|
|
8481
|
+
Name => 'MenuSettingsZ9',
|
|
8482
|
+
Condition => '$$self{ShutterMode} eq 96 and $$self{FirmwareVersion} lt "03.00"', # C30/C60/C120 jpgs only
|
|
8483
|
+
Format => 'undef[1646]',
|
|
8484
|
+
Notes => 'Firmware versions 2.11 and earlier',
|
|
8485
|
+
SubDirectory => {
|
|
8486
|
+
TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ9',
|
|
8487
|
+
},
|
|
8488
|
+
},
|
|
8489
|
+
{
|
|
8490
|
+
Name => 'MenuSettingsZ9',
|
|
8491
|
+
Notes => 'Firmware versions 3.0 and later',
|
|
8492
|
+
Condition => '$$self{ShutterMode} eq 96', # C30/C60/C120 jpgs only
|
|
8493
|
+
Format => 'undef[1948]',
|
|
8494
|
+
SubDirectory => {
|
|
8495
|
+
TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ9Firmware3',
|
|
8496
|
+
},
|
|
8497
|
+
},
|
|
8498
|
+
],
|
|
8499
|
+
### 0x80c5 - OrientationInfo start (Z9 firmware 3.01)
|
|
8500
|
+
0x80c4 => {
|
|
8420
8501
|
Name => 'OrientationHook',
|
|
8502
|
+
Condition => '$$self{ShutterMode} ne 96', #not valid for C30/C60/C120
|
|
8421
8503
|
Hidden => 1,
|
|
8422
8504
|
RawConv => 'undef',
|
|
8423
8505
|
# account for variable location of OrientationInfo data
|
|
8424
|
-
Hook => '$varSize = $$self{OrientationOffset} -
|
|
8506
|
+
Hook => '$varSize = $$self{OrientationOffset} - 0x80c5',
|
|
8425
8507
|
},
|
|
8426
|
-
|
|
8508
|
+
0x80c5 => {
|
|
8427
8509
|
Name => 'RollAngle',
|
|
8428
|
-
|
|
8510
|
+
Condition => '$$self{ShutterMode} ne 96', #not valid for C30/C60/C120
|
|
8511
|
+
Format => 'fixed32u',
|
|
8429
8512
|
Notes => 'converted to degrees of clockwise camera roll',
|
|
8430
8513
|
ValueConv => '$val <= 180 ? $val : $val - 360',
|
|
8431
8514
|
ValueConvInv => '$val >= 0 ? $val : $val + 360',
|
|
8432
8515
|
PrintConv => 'sprintf("%.1f", $val)',
|
|
8433
8516
|
PrintConvInv => '$val',
|
|
8434
8517
|
},
|
|
8435
|
-
|
|
8518
|
+
0x80c9 => {
|
|
8436
8519
|
Name => 'PitchAngle',
|
|
8520
|
+
Condition => '$$self{ShutterMode} ne 96', #not valid for C30/C60/C120
|
|
8437
8521
|
Format => 'fixed32u',
|
|
8438
8522
|
Notes => 'converted to degrees of upward camera tilt',
|
|
8439
8523
|
ValueConv => '$val <= 180 ? $val : $val - 360',
|
|
@@ -8441,8 +8525,9 @@ my %nikonFocalConversions = (
|
|
|
8441
8525
|
PrintConv => 'sprintf("%.1f", $val)',
|
|
8442
8526
|
PrintConvInv => '$val',
|
|
8443
8527
|
},
|
|
8444
|
-
|
|
8528
|
+
0x80cd => {
|
|
8445
8529
|
Name => 'YawAngle',
|
|
8530
|
+
Condition => '$$self{ShutterMode} ne 96', #not valid for C30/C60/C120
|
|
8446
8531
|
Format => 'fixed32u',
|
|
8447
8532
|
Notes => 'the camera yaw angle when shooting in portrait orientation',
|
|
8448
8533
|
ValueConv => '$val <= 180 ? $val : $val - 360',
|
|
@@ -8450,25 +8535,27 @@ my %nikonFocalConversions = (
|
|
|
8450
8535
|
PrintConv => 'sprintf("%.1f", $val)',
|
|
8451
8536
|
PrintConvInv => '$val',
|
|
8452
8537
|
},
|
|
8453
|
-
###
|
|
8454
|
-
|
|
8538
|
+
### 0x8139 - Offset26 info start (Z9 firmware 3.01)
|
|
8539
|
+
0x8149 => {
|
|
8455
8540
|
Name => 'MenuSettingsZ9Offset',
|
|
8541
|
+
Condition => '$$self{ShutterMode} ne 96', # C30/C60/C120 jpgs handled at 0x4410
|
|
8456
8542
|
Writable => 0,
|
|
8457
8543
|
Hidden => 1,
|
|
8458
8544
|
# offset to MenuSettingsZ9 is relative to start of Offset26 block
|
|
8459
|
-
RawConv => '$$self{MenuSettingsZ9Offset} = ($val || 0x10000000) + $$self{
|
|
8545
|
+
RawConv => '$$self{MenuSettingsZ9Offset} = ($val || 0x10000000) + $$self{MenuOffset}; undef', # (ignore if 0)
|
|
8460
8546
|
},
|
|
8461
|
-
|
|
8547
|
+
0x814a => {
|
|
8462
8548
|
Name => 'Hook5',
|
|
8549
|
+
Condition => '$$self{ShutterMode} ne 96', # C30/C60/C120 jpgs handled at 0x4410
|
|
8463
8550
|
Hidden => 1,
|
|
8464
8551
|
RawConv => 'undef',
|
|
8465
8552
|
# account for variable location of menu settings data
|
|
8466
|
-
Hook => '$varSize = $$self{MenuSettingsZ9Offset} -
|
|
8553
|
+
Hook => '$varSize = $$self{MenuSettingsZ9Offset} - 0x8225',
|
|
8467
8554
|
},
|
|
8468
|
-
|
|
8555
|
+
0x8225 => [
|
|
8469
8556
|
{
|
|
8470
8557
|
Name => 'MenuSettingsZ9',
|
|
8471
|
-
Condition => '$$self{FirmwareVersion} lt "03.00"',
|
|
8558
|
+
Condition => '$$self{ShutterMode} ne 96 and $$self{FirmwareVersion} lt "03.00"', # C30/C60/C120 jpgs handled at 0x4410
|
|
8472
8559
|
Format => 'undef[1646]',
|
|
8473
8560
|
Notes => 'Firmware versions 2.11 and earlier',
|
|
8474
8561
|
SubDirectory => {
|
|
@@ -8478,6 +8565,7 @@ my %nikonFocalConversions = (
|
|
|
8478
8565
|
{
|
|
8479
8566
|
Name => 'MenuSettingsZ9',
|
|
8480
8567
|
Notes => 'Firmware versions 3.0 and later',
|
|
8568
|
+
Condition => '$$self{ShutterMode} ne 96', # C30/C60/C120 jpgs handled at 0x4410
|
|
8481
8569
|
Format => 'undef[1948]',
|
|
8482
8570
|
SubDirectory => {
|
|
8483
8571
|
TagTable => 'Image::ExifTool::Nikon::MenuSettingsZ9Firmware3',
|
|
@@ -8726,34 +8814,34 @@ my %nikonFocalConversions = (
|
|
|
8726
8814
|
Name => 'Intervals',
|
|
8727
8815
|
Format => 'int32u',
|
|
8728
8816
|
RawConv => '$$self{IntervalShootingIntervals} = $val',
|
|
8729
|
-
Condition => '$$self{
|
|
8817
|
+
Condition => '$$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
|
|
8730
8818
|
},
|
|
8731
8819
|
192 => {
|
|
8732
8820
|
Name => 'ShotsPerInterval',
|
|
8733
8821
|
Format => 'int32u',
|
|
8734
8822
|
RawConv => '$$self{IntervalShootingShotsPerInterval} = $val',
|
|
8735
|
-
Condition => '$$self{
|
|
8823
|
+
Condition => '$$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
|
|
8736
8824
|
},
|
|
8737
8825
|
#220 NEFCompression 0=> 'Lossless' 1=> 'High Efficiency*' 4=> 'High Efficientcy'
|
|
8738
8826
|
232 => {
|
|
8739
8827
|
Name => 'FocusShiftNumberShots', #1-300
|
|
8740
8828
|
RawConv => '$$self{FocusShiftNumberShots} = $val',
|
|
8741
|
-
Condition => '$$self{FocusShiftShooting} > 0',
|
|
8829
|
+
Condition => '$$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
|
|
8742
8830
|
},
|
|
8743
8831
|
236 => {
|
|
8744
8832
|
Name => 'FocusShiftStepWidth', #1(Narrow) to 10 (Wide)
|
|
8745
|
-
Condition => '$$self{FocusShiftShooting} > 0',
|
|
8833
|
+
Condition => '$$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
|
|
8746
8834
|
},
|
|
8747
8835
|
240 => {
|
|
8748
8836
|
Name => 'FocusShiftInterval',
|
|
8749
|
-
Condition => '$$self{FocusShiftShooting} > 0',
|
|
8837
|
+
Condition => '$$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
|
|
8750
8838
|
PrintConv => '$val == 1? "1 Second" : sprintf("%.0f Seconds",$val)',
|
|
8751
8839
|
},
|
|
8752
8840
|
244 => {
|
|
8753
8841
|
Name => 'FocusShiftExposureLock',
|
|
8754
8842
|
Unknown => 1,
|
|
8755
8843
|
PrintConv => \%offOn,
|
|
8756
|
-
Condition => '$$self{FocusShiftShooting} > 0',
|
|
8844
|
+
Condition => '$$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
|
|
8757
8845
|
},
|
|
8758
8846
|
274 => { Name => 'PhotoShootingMenuBank', PrintConv => \%banksZ9 },
|
|
8759
8847
|
276 => { Name => 'ExtendedMenuBanks', PrintConv => \%offOn }, #single tag from both Photo & Video menus
|
|
@@ -8913,12 +9001,17 @@ my %nikonFocalConversions = (
|
|
|
8913
9001
|
1636 => { Name => 'USBPowerDelivery', PrintConv => \%offOn, Unknown => 1 },
|
|
8914
9002
|
1645 => { Name => 'SensorShield', PrintConv => { 0 => 'Stays Open', 1 => 'Closes' }, Unknown => 1 },
|
|
8915
9003
|
);
|
|
9004
|
+
|
|
8916
9005
|
%Image::ExifTool::Nikon::MenuSettingsZ9Firmware3 = ( #starts at Offset26 + 248
|
|
8917
9006
|
%binaryDataAttrs,
|
|
8918
9007
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
8919
9008
|
DATAMEMBER => [ 154, 204, 208, 248, 444, 554 ],
|
|
8920
9009
|
IS_SUBDIR => [ 847 ],
|
|
8921
9010
|
NOTES => 'These tags are used by the Z9 firmware 3.00.',
|
|
9011
|
+
72 => {
|
|
9012
|
+
Name => 'HighFrameRate', #CH and C30/C60/C120 but not CL
|
|
9013
|
+
PrintConv => \%highFrameRateZ9,
|
|
9014
|
+
},
|
|
8922
9015
|
154 => {
|
|
8923
9016
|
Name => 'MultipleExposureMode',
|
|
8924
9017
|
RawConv => '$$self{MultipleExposureMode} = $val',
|
|
@@ -8929,33 +9022,33 @@ my %nikonFocalConversions = (
|
|
|
8929
9022
|
Name => 'Intervals',
|
|
8930
9023
|
Format => 'int32u',
|
|
8931
9024
|
RawConv => '$$self{IntervalShootingIntervals} = $val',
|
|
8932
|
-
Condition => '$$self{
|
|
9025
|
+
Condition => '$$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
|
|
8933
9026
|
},
|
|
8934
9027
|
208 => {
|
|
8935
9028
|
Name => 'ShotsPerInterval',
|
|
8936
9029
|
Format => 'int32u',
|
|
8937
9030
|
RawConv => '$$self{IntervalShootingShotsPerInterval} = $val',
|
|
8938
|
-
Condition => '$$self{
|
|
9031
|
+
Condition => '$$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
|
|
8939
9032
|
},
|
|
8940
9033
|
248 => {
|
|
8941
9034
|
Name => 'FocusShiftNumberShots', #1-300
|
|
8942
9035
|
RawConv => '$$self{FocusShiftNumberShots} = $val',
|
|
8943
|
-
Condition => '$$self{FocusShiftShooting} > 0',
|
|
9036
|
+
Condition => '$$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
|
|
8944
9037
|
},
|
|
8945
9038
|
252 => {
|
|
8946
9039
|
Name => 'FocusShiftStepWidth', #1(Narrow) to 10 (Wide)
|
|
8947
|
-
Condition => '$$self{FocusShiftShooting} > 0',
|
|
9040
|
+
Condition => '$$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
|
|
8948
9041
|
},
|
|
8949
9042
|
256 => {
|
|
8950
9043
|
Name => 'FocusShiftInterval',
|
|
8951
|
-
Condition => '$$self{FocusShiftShooting} > 0',
|
|
9044
|
+
Condition => '$$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
|
|
8952
9045
|
PrintConv => '$val == 1? "1 Second" : sprintf("%.0f Seconds",$val)',
|
|
8953
9046
|
},
|
|
8954
9047
|
260 => {
|
|
8955
9048
|
Name => 'FocusShiftExposureLock',
|
|
8956
9049
|
Unknown => 1,
|
|
8957
9050
|
PrintConv => \%offOn,
|
|
8958
|
-
Condition => '$$self{FocusShiftShooting} > 0',
|
|
9051
|
+
Condition => '$$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
|
|
8959
9052
|
},
|
|
8960
9053
|
290 => { Name => 'PhotoShootingMenuBank', PrintConv => \%banksZ9 },
|
|
8961
9054
|
292 => { Name => 'ExtendedMenuBanks', PrintConv => \%offOn }, # single tag from both Photo & Video menus
|
|
@@ -9107,340 +9200,33 @@ my %nikonFocalConversions = (
|
|
|
9107
9200
|
Name => 'FocusShiftAutoReset',
|
|
9108
9201
|
Unknown => 1,
|
|
9109
9202
|
PrintConv => \%offOn,
|
|
9110
|
-
Condition => '$$self{FocusShiftShooting} > 0',
|
|
9203
|
+
Condition => '$$self{ShutterMode} ne 96 and $$self{FocusShiftShooting} > 0', #not valid for C30/C60/C120
|
|
9111
9204
|
},
|
|
9112
|
-
|
|
9113
|
-
|
|
9114
|
-
#1828 ExposureCompensationButton CSf2
|
|
9115
|
-
#1830 ISOButton CSf2
|
|
9116
|
-
#1890 ViewModeShowEffectsOfSettings CSd9-a 0=>'Always', 1=> 'Only When Flash Not Used'
|
|
9117
|
-
#1892 DispButton CSf2
|
|
9118
|
-
#1936 FocusPointDisplayOption3DTrackingColor CSa11-d 0=> 'White', 1= => 'Red'
|
|
9119
|
-
);
|
|
9120
|
-
|
|
9121
|
-
# Flash information (ref JD)
|
|
9122
|
-
%Image::ExifTool::Nikon::FlashInfo0100 = (
|
|
9123
|
-
%binaryDataAttrs,
|
|
9124
|
-
DATAMEMBER => [ 9.2, 15, 16 ],
|
|
9125
|
-
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
9126
|
-
NOTES => q{
|
|
9127
|
-
These tags are used by the D2H, D2Hs, D2X, D2Xs, D50, D70, D70s, D80 and
|
|
9128
|
-
D200.
|
|
9129
|
-
},
|
|
9130
|
-
# NOTE: Must set ByteOrder in SubDirectory if any multi-byte integer tags added
|
|
9131
|
-
0 => {
|
|
9132
|
-
Name => 'FlashInfoVersion',
|
|
9133
|
-
Format => 'string[4]',
|
|
9134
|
-
Writable => 0,
|
|
9135
|
-
},
|
|
9136
|
-
4 => { #PH
|
|
9137
|
-
Name => 'FlashSource',
|
|
9205
|
+
1810 => { #CSd4-a
|
|
9206
|
+
Name => 'PreReleaseBurstLength',
|
|
9138
9207
|
PrintConv => {
|
|
9139
9208
|
0 => 'None',
|
|
9140
|
-
1 => '
|
|
9141
|
-
2 => '
|
|
9142
|
-
|
|
9143
|
-
},
|
|
9144
|
-
# 5 - values: 46,48,50,54,78
|
|
9145
|
-
6 => {
|
|
9146
|
-
Format => 'int8u[2]',
|
|
9147
|
-
Name => 'ExternalFlashFirmware',
|
|
9148
|
-
SeparateTable => 'FlashFirmware',
|
|
9149
|
-
PrintConv => \%flashFirmware,
|
|
9150
|
-
},
|
|
9151
|
-
8 => {
|
|
9152
|
-
Name => 'ExternalFlashFlags',
|
|
9153
|
-
PrintConv => { 0 => '(none)',
|
|
9154
|
-
BITMASK => {
|
|
9155
|
-
0 => 'Fired', #28
|
|
9156
|
-
2 => 'Bounce Flash', #PH
|
|
9157
|
-
4 => 'Wide Flash Adapter',
|
|
9158
|
-
5 => 'Dome Diffuser', #28
|
|
9159
|
-
},
|
|
9160
|
-
},
|
|
9161
|
-
},
|
|
9162
|
-
9.1 => {
|
|
9163
|
-
Name => 'FlashCommanderMode',
|
|
9164
|
-
Mask => 0x80,
|
|
9165
|
-
PrintConv => { 0 => 'Off', 1 => 'On' },
|
|
9166
|
-
},
|
|
9167
|
-
9.2 => {
|
|
9168
|
-
Name => 'FlashControlMode',
|
|
9169
|
-
Mask => 0x7f,
|
|
9170
|
-
DataMember => 'FlashControlMode',
|
|
9171
|
-
RawConv => '$$self{FlashControlMode} = $val',
|
|
9172
|
-
PrintConv => \%flashControlMode,
|
|
9173
|
-
SeparateTable => 'FlashControlMode',
|
|
9174
|
-
},
|
|
9175
|
-
10 => [
|
|
9176
|
-
{
|
|
9177
|
-
Name => 'FlashOutput',
|
|
9178
|
-
Condition => '$$self{FlashControlMode} >= 0x06',
|
|
9179
|
-
ValueConv => '2 ** (-$val/6)',
|
|
9180
|
-
ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
|
|
9181
|
-
PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
|
|
9182
|
-
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
9183
|
-
},
|
|
9184
|
-
{
|
|
9185
|
-
Name => 'FlashCompensation',
|
|
9186
|
-
Format => 'int8s',
|
|
9187
|
-
Priority => 0,
|
|
9188
|
-
ValueConv => '-$val/6',
|
|
9189
|
-
ValueConvInv => '-6 * $val',
|
|
9190
|
-
PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)',
|
|
9191
|
-
PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
|
|
9192
|
-
},
|
|
9193
|
-
],
|
|
9194
|
-
11 => {
|
|
9195
|
-
Name => 'FlashFocalLength',
|
|
9196
|
-
RawConv => '$val ? $val : undef',
|
|
9197
|
-
PrintConv => '"$val mm"',
|
|
9198
|
-
PrintConvInv => '$val=~/(\d+)/; $1 || 0',
|
|
9199
|
-
},
|
|
9200
|
-
12 => {
|
|
9201
|
-
Name => 'RepeatingFlashRate',
|
|
9202
|
-
RawConv => '$val ? $val : undef',
|
|
9203
|
-
PrintConv => '"$val Hz"',
|
|
9204
|
-
PrintConvInv => '$val=~/(\d+)/; $1 || 0',
|
|
9205
|
-
},
|
|
9206
|
-
13 => {
|
|
9207
|
-
Name => 'RepeatingFlashCount',
|
|
9208
|
-
RawConv => '$val ? $val : undef',
|
|
9209
|
-
},
|
|
9210
|
-
14 => { #PH
|
|
9211
|
-
Name => 'FlashGNDistance',
|
|
9212
|
-
SeparateTable => 1,
|
|
9213
|
-
PrintConv => \%flashGNDistance,
|
|
9214
|
-
},
|
|
9215
|
-
15 => {
|
|
9216
|
-
Name => 'FlashGroupAControlMode',
|
|
9217
|
-
Mask => 0x0f,
|
|
9218
|
-
DataMember => 'FlashGroupAControlMode',
|
|
9219
|
-
RawConv => '$$self{FlashGroupAControlMode} = $val',
|
|
9220
|
-
PrintConv => \%flashControlMode,
|
|
9221
|
-
SeparateTable => 'FlashControlMode',
|
|
9222
|
-
},
|
|
9223
|
-
16 => {
|
|
9224
|
-
Name => 'FlashGroupBControlMode',
|
|
9225
|
-
Mask => 0x0f,
|
|
9226
|
-
DataMember => 'FlashGroupBControlMode',
|
|
9227
|
-
RawConv => '$$self{FlashGroupBControlMode} = $val',
|
|
9228
|
-
PrintConv => \%flashControlMode,
|
|
9229
|
-
SeparateTable => 'FlashControlMode',
|
|
9230
|
-
},
|
|
9231
|
-
17 => [
|
|
9232
|
-
{
|
|
9233
|
-
Name => 'FlashGroupAOutput',
|
|
9234
|
-
Condition => '$$self{FlashGroupAControlMode} >= 0x06',
|
|
9235
|
-
ValueConv => '2 ** (-$val/6)',
|
|
9236
|
-
ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
|
|
9237
|
-
PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
|
|
9238
|
-
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
9239
|
-
},
|
|
9240
|
-
{
|
|
9241
|
-
Name => 'FlashGroupACompensation',
|
|
9242
|
-
Format => 'int8s',
|
|
9243
|
-
ValueConv => '-$val/6',
|
|
9244
|
-
ValueConvInv => '-6 * $val',
|
|
9245
|
-
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
|
9246
|
-
PrintConvInv => '$val',
|
|
9247
|
-
},
|
|
9248
|
-
],
|
|
9249
|
-
18 => [
|
|
9250
|
-
{
|
|
9251
|
-
Name => 'FlashGroupBOutput',
|
|
9252
|
-
Condition => '$$self{FlashGroupBControlMode} >= 0x06',
|
|
9253
|
-
ValueConv => '2 ** (-$val/6)',
|
|
9254
|
-
ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
|
|
9255
|
-
PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
|
|
9256
|
-
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
9209
|
+
1 => '0.3 Sec',
|
|
9210
|
+
2 => '0.5 Sec',
|
|
9211
|
+
3 => '1 Sec',
|
|
9257
9212
|
},
|
|
9258
|
-
{
|
|
9259
|
-
Name => 'FlashGroupBCompensation',
|
|
9260
|
-
Format => 'int8s',
|
|
9261
|
-
ValueConv => '-$val/6',
|
|
9262
|
-
ValueConvInv => '-6 * $val',
|
|
9263
|
-
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
|
9264
|
-
PrintConvInv => '$val',
|
|
9265
|
-
},
|
|
9266
|
-
],
|
|
9267
|
-
);
|
|
9268
|
-
|
|
9269
|
-
# Flash information for D40, D40x, D3 and D300 (ref JD)
|
|
9270
|
-
%Image::ExifTool::Nikon::FlashInfo0102 = (
|
|
9271
|
-
%binaryDataAttrs,
|
|
9272
|
-
DATAMEMBER => [ 9.2, 16.1, 17.1, 17.2 ],
|
|
9273
|
-
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
9274
|
-
NOTES => q{
|
|
9275
|
-
These tags are used by the D3 (firmware 1.x), D40, D40X, D60 and D300
|
|
9276
|
-
(firmware 1.00).
|
|
9277
9213
|
},
|
|
9278
|
-
|
|
9279
|
-
|
|
9280
|
-
Name => 'FlashInfoVersion',
|
|
9281
|
-
Format => 'string[4]',
|
|
9282
|
-
Writable => 0,
|
|
9283
|
-
},
|
|
9284
|
-
4 => { #PH
|
|
9285
|
-
Name => 'FlashSource',
|
|
9214
|
+
1812 => { #CSd4-b
|
|
9215
|
+
Name => 'PostReleaseBurstLength',
|
|
9286
9216
|
PrintConv => {
|
|
9287
|
-
0 => '
|
|
9288
|
-
1 => '
|
|
9289
|
-
2 => '
|
|
9290
|
-
|
|
9291
|
-
},
|
|
9292
|
-
# 5 - values: 46,48,50,54,78
|
|
9293
|
-
6 => {
|
|
9294
|
-
Format => 'int8u[2]',
|
|
9295
|
-
Name => 'ExternalFlashFirmware',
|
|
9296
|
-
SeparateTable => 'FlashFirmware',
|
|
9297
|
-
PrintConv => \%flashFirmware,
|
|
9298
|
-
},
|
|
9299
|
-
8 => {
|
|
9300
|
-
Name => 'ExternalFlashFlags',
|
|
9301
|
-
PrintConv => { BITMASK => {
|
|
9302
|
-
0 => 'Fired', #28
|
|
9303
|
-
2 => 'Bounce Flash', #PH
|
|
9304
|
-
4 => 'Wide Flash Adapter',
|
|
9305
|
-
5 => 'Dome Diffuser', #28
|
|
9306
|
-
}},
|
|
9307
|
-
},
|
|
9308
|
-
9.1 => {
|
|
9309
|
-
Name => 'FlashCommanderMode',
|
|
9310
|
-
Mask => 0x80,
|
|
9311
|
-
PrintConv => { 0 => 'Off', 1 => 'On' },
|
|
9312
|
-
},
|
|
9313
|
-
9.2 => {
|
|
9314
|
-
Name => 'FlashControlMode',
|
|
9315
|
-
Mask => 0x7f,
|
|
9316
|
-
DataMember => 'FlashControlMode',
|
|
9317
|
-
RawConv => '$$self{FlashControlMode} = $val',
|
|
9318
|
-
PrintConv => \%flashControlMode,
|
|
9319
|
-
SeparateTable => 'FlashControlMode',
|
|
9320
|
-
},
|
|
9321
|
-
10 => [
|
|
9322
|
-
{
|
|
9323
|
-
Name => 'FlashOutput',
|
|
9324
|
-
Condition => '$$self{FlashControlMode} >= 0x06',
|
|
9325
|
-
ValueConv => '2 ** (-$val/6)',
|
|
9326
|
-
ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
|
|
9327
|
-
PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
|
|
9328
|
-
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
9217
|
+
0 => '1 Sec',
|
|
9218
|
+
1 => '2 Sec',
|
|
9219
|
+
2 => '3 Sec',
|
|
9220
|
+
3 => 'Max',
|
|
9329
9221
|
},
|
|
9330
|
-
{
|
|
9331
|
-
Name => 'FlashCompensation',
|
|
9332
|
-
# this is the compensation from the camera (0x0012) for "Built-in" FlashType, or
|
|
9333
|
-
# the compensation from the external unit (0x0017) for "Optional" FlashType - PH
|
|
9334
|
-
Format => 'int8s',
|
|
9335
|
-
Priority => 0,
|
|
9336
|
-
ValueConv => '-$val/6',
|
|
9337
|
-
ValueConvInv => '-6 * $val',
|
|
9338
|
-
PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)',
|
|
9339
|
-
PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
|
|
9340
|
-
},
|
|
9341
|
-
],
|
|
9342
|
-
12 => {
|
|
9343
|
-
Name => 'FlashFocalLength',
|
|
9344
|
-
RawConv => '$val ? $val : undef',
|
|
9345
|
-
PrintConv => '"$val mm"',
|
|
9346
|
-
PrintConvInv => '$val=~/(\d+)/; $1 || 0',
|
|
9347
|
-
},
|
|
9348
|
-
13 => {
|
|
9349
|
-
Name => 'RepeatingFlashRate',
|
|
9350
|
-
RawConv => '$val ? $val : undef',
|
|
9351
|
-
PrintConv => '"$val Hz"',
|
|
9352
|
-
PrintConvInv => '$val=~/(\d+)/; $1 || 0',
|
|
9353
|
-
},
|
|
9354
|
-
14 => {
|
|
9355
|
-
Name => 'RepeatingFlashCount',
|
|
9356
|
-
RawConv => '$val ? $val : undef',
|
|
9357
|
-
},
|
|
9358
|
-
15 => { #PH
|
|
9359
|
-
Name => 'FlashGNDistance',
|
|
9360
|
-
SeparateTable => 1,
|
|
9361
|
-
PrintConv => \%flashGNDistance,
|
|
9362
|
-
},
|
|
9363
|
-
16.1 => {
|
|
9364
|
-
Name => 'FlashGroupAControlMode',
|
|
9365
|
-
Mask => 0x0f,
|
|
9366
|
-
Notes => 'note: group A tags may apply to the built-in flash settings for some models',
|
|
9367
|
-
DataMember => 'FlashGroupAControlMode',
|
|
9368
|
-
RawConv => '$$self{FlashGroupAControlMode} = $val',
|
|
9369
|
-
PrintConv => \%flashControlMode,
|
|
9370
|
-
SeparateTable => 'FlashControlMode',
|
|
9371
|
-
},
|
|
9372
|
-
17.1 => {
|
|
9373
|
-
Name => 'FlashGroupBControlMode',
|
|
9374
|
-
Mask => 0xf0,
|
|
9375
|
-
Notes => 'note: group B tags may apply to group A settings for some models',
|
|
9376
|
-
DataMember => 'FlashGroupBControlMode',
|
|
9377
|
-
RawConv => '$$self{FlashGroupBControlMode} = $val',
|
|
9378
|
-
PrintConv => \%flashControlMode,
|
|
9379
|
-
SeparateTable => 'FlashControlMode',
|
|
9380
9222
|
},
|
|
9381
|
-
|
|
9382
|
-
|
|
9383
|
-
|
|
9384
|
-
|
|
9385
|
-
|
|
9386
|
-
|
|
9387
|
-
|
|
9388
|
-
SeparateTable => 'FlashControlMode',
|
|
9389
|
-
},
|
|
9390
|
-
18 => [
|
|
9391
|
-
{
|
|
9392
|
-
Name => 'FlashGroupAOutput',
|
|
9393
|
-
Condition => '$$self{FlashGroupAControlMode} >= 0x06',
|
|
9394
|
-
ValueConv => '2 ** (-$val/6)',
|
|
9395
|
-
ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
|
|
9396
|
-
PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
|
|
9397
|
-
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
9398
|
-
},
|
|
9399
|
-
{
|
|
9400
|
-
Name => 'FlashGroupACompensation',
|
|
9401
|
-
Format => 'int8s',
|
|
9402
|
-
ValueConv => '-$val/6',
|
|
9403
|
-
ValueConvInv => '-6 * $val',
|
|
9404
|
-
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
|
9405
|
-
PrintConvInv => '$val',
|
|
9406
|
-
},
|
|
9407
|
-
],
|
|
9408
|
-
19 => [
|
|
9409
|
-
{
|
|
9410
|
-
Name => 'FlashGroupBOutput',
|
|
9411
|
-
Condition => '$$self{FlashGroupBControlMode} >= 0x60',
|
|
9412
|
-
ValueConv => '2 ** (-$val/6)',
|
|
9413
|
-
ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
|
|
9414
|
-
PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
|
|
9415
|
-
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
9416
|
-
},
|
|
9417
|
-
{
|
|
9418
|
-
Name => 'FlashGroupBCompensation',
|
|
9419
|
-
Format => 'int8s',
|
|
9420
|
-
ValueConv => '-$val/6',
|
|
9421
|
-
ValueConvInv => '-6 * $val',
|
|
9422
|
-
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
|
9423
|
-
PrintConvInv => '$val',
|
|
9424
|
-
},
|
|
9425
|
-
],
|
|
9426
|
-
20 => [ #PH
|
|
9427
|
-
{
|
|
9428
|
-
Name => 'FlashGroupCOutput',
|
|
9429
|
-
Condition => '$$self{FlashGroupCControlMode} >= 0x06',
|
|
9430
|
-
ValueConv => '2 ** (-$val/6)',
|
|
9431
|
-
ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0',
|
|
9432
|
-
PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)',
|
|
9433
|
-
PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1',
|
|
9434
|
-
},
|
|
9435
|
-
{
|
|
9436
|
-
Name => 'FlashGroupCCompensation',
|
|
9437
|
-
Format => 'int8s',
|
|
9438
|
-
ValueConv => '-$val/6',
|
|
9439
|
-
ValueConvInv => '-6 * $val',
|
|
9440
|
-
PrintConv => '$val ? sprintf("%+.1f",$val) : 0',
|
|
9441
|
-
PrintConvInv => '$val',
|
|
9442
|
-
},
|
|
9443
|
-
],
|
|
9223
|
+
#1824 ReleaseTimingIndicatorTypeADelay CSd14-b 0 => '1/200' ... 15 => '1/6'
|
|
9224
|
+
#1826 VerticalISOButton CSf2
|
|
9225
|
+
#1828 ExposureCompensationButton CSf2
|
|
9226
|
+
#1830 ISOButton CSf2
|
|
9227
|
+
#1890 ViewModeShowEffectsOfSettings CSd9-a 0=>'Always', 1=> 'Only When Flash Not Used'
|
|
9228
|
+
#1892 DispButton CSf2
|
|
9229
|
+
#1936 FocusPointDisplayOption3DTrackingColor CSa11-d 0=> 'White', 1= => 'Red'
|
|
9444
9230
|
);
|
|
9445
9231
|
|
|
9446
9232
|
# Flash information (ref JD)
|
|
@@ -10724,6 +10510,21 @@ my %nikonFocalConversions = (
|
|
|
10724
10510
|
},
|
|
10725
10511
|
);
|
|
10726
10512
|
|
|
10513
|
+
# MakerNotes0x56 - burst info for Z9
|
|
10514
|
+
%Image::ExifTool::Nikon::MakerNotes0x56 = (
|
|
10515
|
+
%binaryDataAttrs,
|
|
10516
|
+
GROUPS => { 0 => 'MakerNotes' },
|
|
10517
|
+
0 => {
|
|
10518
|
+
Name => 'FirmwareVersion',
|
|
10519
|
+
Format => 'string[4]',
|
|
10520
|
+
Writable => 0,
|
|
10521
|
+
},
|
|
10522
|
+
4 => {
|
|
10523
|
+
Name => 'BurstGroupID', #all frames shot within a burst (using CL/CH/C30/C60/C120) will share the same BurstGroupID. Value will be > 0 for all images shot in continuous modes. 0 for single-frame.
|
|
10524
|
+
Format => 'int16u'
|
|
10525
|
+
},
|
|
10526
|
+
);
|
|
10527
|
+
|
|
10727
10528
|
# extra info found in IFD0 of NEF files (ref PH, Z6/Z7)
|
|
10728
10529
|
%Image::ExifTool::Nikon::NEFInfo = (
|
|
10729
10530
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
@@ -11869,6 +11670,7 @@ sub PrintAFPointsLeftRight($$)
|
|
|
11869
11670
|
{
|
|
11870
11671
|
my ($col, $ncol) = @_;
|
|
11871
11672
|
my $center = 1 + ($ncol + 1)/2;
|
|
11673
|
+
return 'n/a' if $col == 0; #out of focus
|
|
11872
11674
|
return 'C' if $col == $center;
|
|
11873
11675
|
return sprintf('%d', $center - $col) . 'L of Center' if $col < $center;
|
|
11874
11676
|
return sprintf('%d', $col - $center) . 'R of Center' if $col > $center;
|
|
@@ -11882,6 +11684,7 @@ sub PrintAFPointsUpDown($$)
|
|
|
11882
11684
|
{
|
|
11883
11685
|
my ($row, $nrow) = @_;
|
|
11884
11686
|
my $center = 1 + ($nrow + 1)/2;
|
|
11687
|
+
return 'n/a' if $row == 0; #out of focus
|
|
11885
11688
|
return 'C' if $row == $center;
|
|
11886
11689
|
return sprintf('%d', $center - $row) . 'U from Center' if $row < $center;
|
|
11887
11690
|
return sprintf('%d', $row - $center) . 'D from Center' if $row > $center;
|