exiftool_vendored 11.98.0 → 12.10.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.
- checksums.yaml +4 -4
- data/bin/Changes +198 -2
- data/bin/MANIFEST +8 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +43 -42
- data/bin/exiftool +102 -75
- data/bin/lib/Image/ExifTool.pm +163 -111
- data/bin/lib/Image/ExifTool.pod +127 -93
- data/bin/lib/Image/ExifTool/AIFF.pm +2 -2
- data/bin/lib/Image/ExifTool/APE.pm +2 -2
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +21 -10
- data/bin/lib/Image/ExifTool/Canon.pm +202 -14
- data/bin/lib/Image/ExifTool/CanonCustom.pm +82 -16
- data/bin/lib/Image/ExifTool/DPX.pm +56 -2
- data/bin/lib/Image/ExifTool/DarwinCore.pm +22 -3
- data/bin/lib/Image/ExifTool/EXE.pm +8 -5
- data/bin/lib/Image/ExifTool/Exif.pm +15 -6
- data/bin/lib/Image/ExifTool/Font.pm +9 -2
- data/bin/lib/Image/ExifTool/GIF.pm +6 -1
- data/bin/lib/Image/ExifTool/GeoTiff.pm +2 -0
- data/bin/lib/Image/ExifTool/Geotag.pm +2 -2
- data/bin/lib/Image/ExifTool/GoPro.pm +48 -22
- data/bin/lib/Image/ExifTool/H264.pm +1 -1
- data/bin/lib/Image/ExifTool/ID3.pm +91 -12
- data/bin/lib/Image/ExifTool/IPTC.pm +1 -0
- data/bin/lib/Image/ExifTool/JSON.pm +27 -4
- data/bin/lib/Image/ExifTool/Lang/de.pm +3 -1
- data/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
- data/bin/lib/Image/ExifTool/M2TS.pm +19 -19
- data/bin/lib/Image/ExifTool/MacOS.pm +154 -38
- data/bin/lib/Image/ExifTool/Matroska.pm +3 -1
- data/bin/lib/Image/ExifTool/Minolta.pm +7 -2
- data/bin/lib/Image/ExifTool/MinoltaRaw.pm +11 -10
- data/bin/lib/Image/ExifTool/Nikon.pm +164 -20
- data/bin/lib/Image/ExifTool/Olympus.pm +39 -17
- data/bin/lib/Image/ExifTool/PNG.pm +14 -3
- data/bin/lib/Image/ExifTool/PPM.pm +5 -5
- data/bin/lib/Image/ExifTool/Panasonic.pm +148 -14
- data/bin/lib/Image/ExifTool/PanasonicRaw.pm +34 -0
- data/bin/lib/Image/ExifTool/Parrot.pm +2 -1
- data/bin/lib/Image/ExifTool/Pentax.pm +3 -1
- data/bin/lib/Image/ExifTool/Photoshop.pm +2 -1
- data/bin/lib/Image/ExifTool/QuickTime.pm +289 -37
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +419 -60
- data/bin/lib/Image/ExifTool/README +26 -22
- data/bin/lib/Image/ExifTool/RSRC.pm +17 -11
- data/bin/lib/Image/ExifTool/RTF.pm +12 -7
- data/bin/lib/Image/ExifTool/Radiance.pm +7 -2
- data/bin/lib/Image/ExifTool/Ricoh.pm +19 -1
- data/bin/lib/Image/ExifTool/Shift.pl +1 -0
- data/bin/lib/Image/ExifTool/SigmaRaw.pm +40 -33
- data/bin/lib/Image/ExifTool/Sony.pm +426 -40
- data/bin/lib/Image/ExifTool/TagLookup.pm +5799 -5671
- data/bin/lib/Image/ExifTool/TagNames.pod +584 -97
- data/bin/lib/Image/ExifTool/Validate.pm +4 -4
- data/bin/lib/Image/ExifTool/WriteExif.pl +3 -2
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +26 -18
- data/bin/lib/Image/ExifTool/Writer.pl +47 -24
- data/bin/lib/Image/ExifTool/XMP.pm +99 -17
- data/bin/lib/Image/ExifTool/XMP2.pl +1 -0
- data/bin/lib/Image/ExifTool/XMPStruct.pl +3 -1
- data/bin/lib/Image/ExifTool/ZISRAW.pm +123 -0
- data/bin/perl-Image-ExifTool.spec +42 -41
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +8 -7
|
@@ -62,7 +62,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
62
62
|
use Image::ExifTool::Exif;
|
|
63
63
|
use Image::ExifTool::GPS;
|
|
64
64
|
|
|
65
|
-
$VERSION = '3.
|
|
65
|
+
$VERSION = '3.89';
|
|
66
66
|
|
|
67
67
|
sub LensIDConv($$$);
|
|
68
68
|
sub ProcessNikonAVI($$$);
|
|
@@ -349,6 +349,7 @@ sub GetAFPointGrid($$;$);
|
|
|
349
349
|
'FE 47 00 00 24 24 4B 06' => 'Sigma 4.5mm F2.8 EX DC HSM Circular Fisheye', #JD
|
|
350
350
|
'26 48 11 11 30 30 1C 02' => 'Sigma 8mm F4 EX Circular Fisheye',
|
|
351
351
|
'79 40 11 11 2C 2C 1C 06' => 'Sigma 8mm F3.5 EX Circular Fisheye', #JD
|
|
352
|
+
'DB 40 11 11 2C 2C 1C 06' => 'Sigma 8mm F3.5 EX DG Circular Fisheye', #30
|
|
352
353
|
'DC 48 19 19 24 24 4B 06' => 'Sigma 10mm F2.8 EX DC HSM Fisheye',
|
|
353
354
|
'C2 4C 24 24 14 14 4B 06' => 'Sigma 14mm F1.8 DG HSM | A', #IB
|
|
354
355
|
'48 48 24 24 24 24 4B 02' => 'Sigma 14mm F2.8 EX Aspherical HSM',
|
|
@@ -449,6 +450,7 @@ sub GetAFPointGrid($$;$);
|
|
|
449
450
|
# '92 3E 2D 88 2C 40 4B 0E' (22mm)
|
|
450
451
|
# '92 40 2D 88 2C 40 4B 0E' (18mm)
|
|
451
452
|
'26 48 31 49 24 24 1C 02' => 'Sigma 20-40mm F2.8',
|
|
453
|
+
'7B 48 37 44 18 18 4B 06' => 'Sigma 24-35mm F2.0 DG HSM | A', #30
|
|
452
454
|
'02 3A 37 50 31 3D 02 00' => 'Sigma 24-50mm F4-5.6 UC',
|
|
453
455
|
'26 48 37 56 24 24 1C 02' => 'Sigma 24-60mm F2.8 EX DG',
|
|
454
456
|
'B6 48 37 56 24 24 1C 02' => 'Sigma 24-60mm F2.8 EX DG',
|
|
@@ -513,6 +515,7 @@ sub GetAFPointGrid($$;$);
|
|
|
513
515
|
'CE 34 76 A0 38 40 4B 0E' => 'Sigma 150-500mm F5-6.3 DG OS APO HSM', #JD
|
|
514
516
|
'81 34 76 A6 38 40 4B 0E' => 'Sigma 150-600mm F5-6.3 DG OS HSM | S', #Jaap Voets
|
|
515
517
|
'82 34 76 A6 38 40 4B 0E' => 'Sigma 150-600mm F5-6.3 DG OS HSM | C',
|
|
518
|
+
'C4 4C 73 73 14 14 4B 46' => 'Sigma 135mm F1.8 DG HSM | A', #forum3833
|
|
516
519
|
'26 40 7B A0 34 40 1C 02' => 'Sigma APO 170-500mm F5-6.3 Aspherical RF',
|
|
517
520
|
'A7 49 80 A0 24 24 4B 06' => 'Sigma APO 200-500mm F2.8 EX DG',
|
|
518
521
|
'48 3C 8E B0 3C 3C 4B 02' => 'Sigma APO 300-800mm F5.6 EX DG HSM',
|
|
@@ -579,6 +582,7 @@ sub GetAFPointGrid($$;$);
|
|
|
579
582
|
'4D 41 3C 8E 2B 40 62 02' => 'Tamron AF 28-300mm f/3.5-6.3 XR Di LD Aspherical (IF) (A061)',
|
|
580
583
|
'4D 41 3C 8E 2C 40 62 02' => 'Tamron AF 28-300mm f/3.5-6.3 XR LD Aspherical (IF) (185D)',
|
|
581
584
|
'F9 40 3C 8E 2C 40 40 0E' => 'Tamron AF 28-300mm f/3.5-6.3 XR Di VC LD Aspherical (IF) Macro (A20)',
|
|
585
|
+
'C9 3C 44 76 25 31 DF 4E' => 'Tamron 35-150mm f/2.8-4 Di VC OSD (A043)', #30
|
|
582
586
|
'00 47 53 80 30 3C 00 06' => 'Tamron AF 55-200mm f/4-5.6 Di II LD (A15)',
|
|
583
587
|
'F7 53 5C 80 24 24 84 06' => 'Tamron SP AF 70-200mm f/2.8 Di LD (IF) Macro (A001)',
|
|
584
588
|
'FE 53 5C 80 24 24 84 06' => 'Tamron SP AF 70-200mm f/2.8 Di LD (IF) Macro (A001)',
|
|
@@ -653,6 +657,7 @@ sub GetAFPointGrid($$;$);
|
|
|
653
657
|
'00 40 64 64 2C 2C 00 00' => 'Voigtlander APO-Lanthar 90mm F3.5 SLII Close Focus',
|
|
654
658
|
#
|
|
655
659
|
'00 40 2D 2D 2C 2C 00 00' => 'Carl Zeiss Distagon T* 3.5/18 ZF.2',
|
|
660
|
+
'00 48 27 27 24 24 00 00' => 'Carl Zeiss Distagon T* 2.8/15 ZF.2', #MykytaKozlov
|
|
656
661
|
'00 48 32 32 24 24 00 00' => 'Carl Zeiss Distagon T* 2.8/21 ZF.2',
|
|
657
662
|
'00 54 38 38 18 18 00 00' => 'Carl Zeiss Distagon T* 2/25 ZF.2',
|
|
658
663
|
'00 54 3C 3C 18 18 00 00' => 'Carl Zeiss Distagon T* 2/28 ZF.2',
|
|
@@ -710,6 +715,7 @@ sub GetAFPointGrid($$;$);
|
|
|
710
715
|
'00 48 80 80 30 30 00 00' => 'Nikkor 200mm f/4 AiS',
|
|
711
716
|
'00 40 11 11 2C 2C 00 00' => 'Samyang 8mm f/3.5 Fish-Eye',
|
|
712
717
|
'00 58 64 64 20 20 00 00' => 'Soligor C/D Macro MC 90mm f/2.5',
|
|
718
|
+
'4A 58 30 30 14 0C 4D 02' => 'Rokinon 20mm f/1.8 ED AS UMC', #30
|
|
713
719
|
);
|
|
714
720
|
|
|
715
721
|
# text encoding used in LocationInfo (ref PH)
|
|
@@ -877,6 +883,38 @@ my %afPoints39 = (
|
|
|
877
883
|
10 => 'E3', 20 => 'B9', 30 => 'D4',
|
|
878
884
|
);
|
|
879
885
|
|
|
886
|
+
# AF point indices for models with 105 focus points, eg. D6 (ref 28)
|
|
887
|
+
# - 7 rows (A-G) with 15 columns (1-15), center is D8
|
|
888
|
+
my %afPoints105 = (
|
|
889
|
+
1 => 'D8', 28 => 'G7', 55 => 'F13', 82 => 'E4',
|
|
890
|
+
2 => 'C8', 29 => 'D6', 56 => 'G13', 83 => 'F4',
|
|
891
|
+
3 => 'B8', 30 => 'C6', 57 => 'D14', 84 => 'G4',
|
|
892
|
+
4 => 'A8', 31 => 'B6', 58 => 'C14', 85 => 'D3',
|
|
893
|
+
5 => 'E8', 32 => 'A6', 59 => 'B14', 86 => 'C3',
|
|
894
|
+
6 => 'F8', 33 => 'E6', 60 => 'A14', 87 => 'B3',
|
|
895
|
+
7 => 'G8', 34 => 'F6', 61 => 'E14', 88 => 'A3',
|
|
896
|
+
8 => 'D9', 35 => 'G6', 62 => 'F14', 89 => 'E3',
|
|
897
|
+
9 => 'C9', 36 => 'D11', 63 => 'G14', 90 => 'F3',
|
|
898
|
+
10 => 'B9', 37 => 'C11', 64 => 'D15', 91 => 'G3',
|
|
899
|
+
11 => 'A9', 38 => 'B11', 65 => 'C15', 92 => 'D2',
|
|
900
|
+
12 => 'E9', 39 => 'A11', 66 => 'B15', 93 => 'C2',
|
|
901
|
+
13 => 'F9', 40 => 'E11', 67 => 'A15', 94 => 'B2',
|
|
902
|
+
14 => 'G9', 41 => 'F11', 68 => 'E15', 95 => 'A2',
|
|
903
|
+
15 => 'D10', 42 => 'G11', 69 => 'F15', 96 => 'E2',
|
|
904
|
+
16 => 'C10', 43 => 'D12', 70 => 'G15', 97 => 'F2',
|
|
905
|
+
17 => 'B10', 44 => 'C12', 71 => 'D5', 98 => 'G2',
|
|
906
|
+
18 => 'A10', 45 => 'B12', 72 => 'C5', 99 => 'D1',
|
|
907
|
+
19 => 'E10', 46 => 'A12', 73 => 'B5', 100 => 'C1',
|
|
908
|
+
20 => 'F10', 47 => 'E12', 74 => 'A5', 101 => 'B1',
|
|
909
|
+
21 => 'G10', 48 => 'F12', 75 => 'E5', 102 => 'A1',
|
|
910
|
+
22 => 'D7', 49 => 'G12', 76 => 'F5', 103 => 'E1',
|
|
911
|
+
23 => 'C7', 50 => 'D13', 77 => 'G5', 104 => 'F1',
|
|
912
|
+
24 => 'B7', 51 => 'C13', 78 => 'D4', 105 => 'G1',
|
|
913
|
+
25 => 'A7', 52 => 'B13', 79 => 'C4',
|
|
914
|
+
26 => 'E7', 53 => 'A13', 80 => 'B4',
|
|
915
|
+
27 => 'F7', 54 => 'E13', 81 => 'A4',
|
|
916
|
+
);
|
|
917
|
+
|
|
880
918
|
# AF point indices for models with 135 focus points, eg. 1J1 (ref PH)
|
|
881
919
|
# - 9 rows (A-I) with 15 columns (1-15), center is E8
|
|
882
920
|
# - odd columns, columns 2 and 14, and the remaining corner points are
|
|
@@ -1539,7 +1577,7 @@ my %binaryDataAttrs = (
|
|
|
1539
1577
|
0x008c => {
|
|
1540
1578
|
Name => 'ContrastCurve', #JD
|
|
1541
1579
|
Writable => 'undef',
|
|
1542
|
-
Flags => [ 'Binary', 'Protected' ],
|
|
1580
|
+
Flags => [ 'Binary', 'Protected', 'Drop' ], # (drop because not found in Nikon JPEG's)
|
|
1543
1581
|
},
|
|
1544
1582
|
# ColorHue: MODE1/MODE1a=sRGB, MODE2=Adobe RGB, MODE3a=more saturated sRGB
|
|
1545
1583
|
# --> should really be called ColorSpace or ColorMode, but that would conflict with other tags
|
|
@@ -1694,7 +1732,8 @@ my %binaryDataAttrs = (
|
|
|
1694
1732
|
SubDirectory => {
|
|
1695
1733
|
TagTable => 'Image::ExifTool::Nikon::ShotInfoD850',
|
|
1696
1734
|
DecryptStart => 4,
|
|
1697
|
-
DecryptLen =>
|
|
1735
|
+
DecryptLen => 0x2efb + 12,
|
|
1736
|
+
DecryptMore => 'Get32u(\$data, 0xa0) + 12',
|
|
1698
1737
|
ByteOrder => 'LittleEndian',
|
|
1699
1738
|
},
|
|
1700
1739
|
},
|
|
@@ -1783,6 +1822,16 @@ my %binaryDataAttrs = (
|
|
|
1783
1822
|
ByteOrder => 'LittleEndian',
|
|
1784
1823
|
},
|
|
1785
1824
|
},
|
|
1825
|
+
{ # (D6 firmware version 1.00, ref 28)
|
|
1826
|
+
Condition => '$$valPt =~ /^0246/',
|
|
1827
|
+
Name => 'ShotInfoD6',
|
|
1828
|
+
SubDirectory => {
|
|
1829
|
+
TagTable => 'Image::ExifTool::Nikon::ShotInfo',
|
|
1830
|
+
DecryptStart => 4,
|
|
1831
|
+
DecryptLen => 0xa4, # only decrypt the version info & offset fields for now
|
|
1832
|
+
ByteOrder => 'LittleEndian',
|
|
1833
|
+
},
|
|
1834
|
+
},
|
|
1786
1835
|
{ # (D610 firmware version 1.00)
|
|
1787
1836
|
Condition => '$$valPt =~ /^0232/',
|
|
1788
1837
|
Name => 'ShotInfoD610',
|
|
@@ -1832,6 +1881,7 @@ my %binaryDataAttrs = (
|
|
|
1832
1881
|
7 => 'Unpacked 12 bits', #IB (padded to 16)
|
|
1833
1882
|
8 => 'Small', #IB
|
|
1834
1883
|
9 => 'Packed 12 bits', #IB (2 pixels in 3 bytes)
|
|
1884
|
+
10 => 'Packed 14 bits', #28 (4 pixels in 7 bytes, eg. D6 uncompressed 14 bit)
|
|
1835
1885
|
},
|
|
1836
1886
|
},
|
|
1837
1887
|
0x0094 => { Name => 'SaturationAdj', Writable => 'int16s' },
|
|
@@ -2033,7 +2083,7 @@ my %binaryDataAttrs = (
|
|
|
2033
2083
|
},
|
|
2034
2084
|
},
|
|
2035
2085
|
{
|
|
2036
|
-
Condition => '$$valPt =~ /^
|
|
2086
|
+
Condition => '$$valPt =~ /^080[01]/', # Z6/Z7
|
|
2037
2087
|
Name => 'LensData0800',
|
|
2038
2088
|
SubDirectory => {
|
|
2039
2089
|
TagTable => 'Image::ExifTool::Nikon::LensData0800',
|
|
@@ -3298,6 +3348,7 @@ my %binaryDataAttrs = (
|
|
|
3298
3348
|
15 => 'Dynamic Area (72 points)', #PH
|
|
3299
3349
|
16 => 'Group Area (HL)', #28
|
|
3300
3350
|
17 => 'Group Area (VL)', #28
|
|
3351
|
+
18 => 'Dynamic Area (49 points)', #28
|
|
3301
3352
|
128 => 'Single', #PH (1J1,1J2,1J3,1J4,1S1,1S2,1V2,1V3)
|
|
3302
3353
|
129 => 'Auto (41 points)', #PH (1J1,1J2,1J3,1J4,1S1,1S2,1V1,1V2,1V3,AW1)
|
|
3303
3354
|
130 => 'Subject Tracking (41 points)', #PH (1J1,1J4,1J3)
|
|
@@ -3335,6 +3386,10 @@ my %binaryDataAttrs = (
|
|
|
3335
3386
|
197 => 'Auto', #PH (Z7)
|
|
3336
3387
|
198 => 'Auto (198)', #PH (Z7) (focus lock with AF-C maybe?)
|
|
3337
3388
|
199 => 'Auto (focus lock)', #PH (Z7, AF-S)
|
|
3389
|
+
200 => 'Normal-area AF', #28 (D6)
|
|
3390
|
+
201 => 'Wide-area AF', #28 (D6)
|
|
3391
|
+
202 => 'Face-priority AF', #28 (D6)
|
|
3392
|
+
203 => 'Subject-tracking AF', #28 (D6)
|
|
3338
3393
|
},
|
|
3339
3394
|
},
|
|
3340
3395
|
],
|
|
@@ -3353,12 +3408,14 @@ my %binaryDataAttrs = (
|
|
|
3353
3408
|
6 => 'On (105-point)', #PH (1J4/1V3[128/130])
|
|
3354
3409
|
7 => 'On (153-point)', #PH (D5/D500/D850)
|
|
3355
3410
|
8 => 'On (81-point)', #38
|
|
3411
|
+
9 => 'On (105-point)', #28 (D6)
|
|
3356
3412
|
},
|
|
3357
3413
|
},
|
|
3358
3414
|
7 => [
|
|
3359
3415
|
{ #PH/JD
|
|
3360
3416
|
Name => 'PrimaryAFPoint',
|
|
3361
|
-
|
|
3417
|
+
# PrimaryAFPoint may only be valid for PhaseDetect - certainly true on the D6, possibly other bodies? (ref 28)
|
|
3418
|
+
Condition => '$$self{PhaseDetectAF} < 2 and $$self{AFInfo2Version} ne "0301"',
|
|
3362
3419
|
Notes => q{
|
|
3363
3420
|
models with 51-point AF -- 5 rows (A-E) and 11 columns (1-11): D3, D3S, D3X,
|
|
3364
3421
|
D4, D4S, D300, D300S, D700, D800, D800e and D810
|
|
@@ -3493,7 +3550,7 @@ my %binaryDataAttrs = (
|
|
|
3493
3550
|
8 => [
|
|
3494
3551
|
{ #JD/PH
|
|
3495
3552
|
Name => 'AFPointsUsed',
|
|
3496
|
-
Condition => '$$self{PhaseDetectAF} < 2',
|
|
3553
|
+
Condition => '$$self{PhaseDetectAF} < 2 and $$self{AFInfo2Version} ne "0301"',
|
|
3497
3554
|
Notes => q{
|
|
3498
3555
|
models with 51-point AF -- 5 rows: A1-9, B1-11, C1-11, D1-11, E1-9. Center
|
|
3499
3556
|
point is C6
|
|
@@ -3612,6 +3669,8 @@ my %binaryDataAttrs = (
|
|
|
3612
3669
|
},
|
|
3613
3670
|
{ #PH
|
|
3614
3671
|
Name => 'AFPointsUsed',
|
|
3672
|
+
# version 301 uses a separate field at offset 0x0a for this tag (ref 28)
|
|
3673
|
+
Condition => '$$self{AFInfo2Version} ne "0301"',
|
|
3615
3674
|
Format => 'undef[7]',
|
|
3616
3675
|
ValueConv => 'join(" ", unpack("H2"x7, $val))',
|
|
3617
3676
|
ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
|
|
@@ -3619,6 +3678,19 @@ my %binaryDataAttrs = (
|
|
|
3619
3678
|
PrintConvInv => '$val=~s/Unknown \\((.*)\\)/$1/; $val',
|
|
3620
3679
|
},
|
|
3621
3680
|
],
|
|
3681
|
+
0x0a => { #28 (D6) in any of the 3 Group modes on the D6, the points specify the outer boundaries of the focus point area; otherwise the tag value is consistent with other Nikon bodies
|
|
3682
|
+
Name => 'AFPointsUsed',
|
|
3683
|
+
Condition => '$$self{AFInfo2Version} eq "0301" and $$self{PhaseDetectAF} == 9',
|
|
3684
|
+
Notes => q{
|
|
3685
|
+
models with 105-point AF -- 7 rows (A-G) and 15 columns (1-15). Center
|
|
3686
|
+
point is D8
|
|
3687
|
+
},
|
|
3688
|
+
Format => 'undef[14]',
|
|
3689
|
+
ValueConv => 'join(" ", unpack("H2"x14, $val))',
|
|
3690
|
+
ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
|
|
3691
|
+
PrintConv => sub { PrintAFPoints(shift, \%afPoints105); },
|
|
3692
|
+
PrintConvInv => sub { PrintAFPointsInv(shift, \%afPoints105); },
|
|
3693
|
+
},
|
|
3622
3694
|
0x10 => { #PH (D90 and D5000)
|
|
3623
3695
|
Name => 'AFImageWidth',
|
|
3624
3696
|
Condition => '$$self{AFInfo2Version} eq "0100"',
|
|
@@ -3661,11 +3733,21 @@ my %binaryDataAttrs = (
|
|
|
3661
3733
|
Format => 'int16u',
|
|
3662
3734
|
RawConv => '$val ? $val : undef',
|
|
3663
3735
|
},
|
|
3664
|
-
0x1c =>
|
|
3665
|
-
|
|
3666
|
-
|
|
3667
|
-
|
|
3668
|
-
|
|
3736
|
+
0x1c => [
|
|
3737
|
+
{ #PH
|
|
3738
|
+
Name => 'ContrastDetectAFInFocus',
|
|
3739
|
+
Condition => '$$self{AFInfo2Version} eq "0100"',
|
|
3740
|
+
PrintConv => { 0 => 'No', 1 => 'Yes' },
|
|
3741
|
+
},{ #PH (D500, see forum11190)
|
|
3742
|
+
Name => 'AFPointsSelected',
|
|
3743
|
+
Condition => '$$self{AFInfo2Version} eq "0101" and $$self{PhaseDetectAF} == 7',
|
|
3744
|
+
Format => 'undef[20]',
|
|
3745
|
+
ValueConv => 'join(" ", unpack("H2"x20, $val))',
|
|
3746
|
+
ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
|
|
3747
|
+
PrintConv => sub { PrintAFPoints(shift, \%afPoints153); },
|
|
3748
|
+
PrintConvInv => sub { PrintAFPointsInv(shift, \%afPoints153); },
|
|
3749
|
+
},
|
|
3750
|
+
],
|
|
3669
3751
|
# 0x1d - always zero (with or without live view)
|
|
3670
3752
|
0x2a => { #PH (Z7)
|
|
3671
3753
|
Name => 'AFImageWidth',
|
|
@@ -3681,14 +3763,31 @@ my %binaryDataAttrs = (
|
|
|
3681
3763
|
},
|
|
3682
3764
|
0x2e => { #PH (Z7)
|
|
3683
3765
|
Name => 'AFAreaXPosition',
|
|
3684
|
-
Condition =>
|
|
3685
|
-
|
|
3686
|
-
|
|
3687
|
-
|
|
3688
|
-
Name => 'AFAreaYPosition',
|
|
3689
|
-
Condition => '$$self{ContrastDetectAF} == 2 and $$self{AFInfo2Version} =~ /^03/',
|
|
3766
|
+
Condition => q{
|
|
3767
|
+
$$self{ContrastDetectAF} == 2 and $$self{AFInfo2Version} =~ /^03/ or
|
|
3768
|
+
$$self{ContrastDetectAF} == 1 and $$self{AFInfo2Version} =~ /^0301/
|
|
3769
|
+
},
|
|
3690
3770
|
Format => 'int16u',
|
|
3691
3771
|
},
|
|
3772
|
+
0x30 => [
|
|
3773
|
+
{ #PH (Z7)
|
|
3774
|
+
Name => 'AFAreaYPosition',
|
|
3775
|
+
Condition => q{
|
|
3776
|
+
$$self{ContrastDetectAF} == 2 and $$self{AFInfo2Version} =~ /^03/ or
|
|
3777
|
+
$$self{ContrastDetectAF} == 1 and $$self{AFInfo2Version} =~ /^0301/
|
|
3778
|
+
},
|
|
3779
|
+
Format => 'int16u',
|
|
3780
|
+
},{ #PH (D500, see forum11190)
|
|
3781
|
+
Name => 'AFPointsInFocus',
|
|
3782
|
+
Condition => '$$self{AFInfo2Version} eq "0101" and $$self{PhaseDetectAF} == 7',
|
|
3783
|
+
Notes => 'AF points in focus at the time time image was captured',
|
|
3784
|
+
Format => 'undef[20]',
|
|
3785
|
+
ValueConv => 'join(" ", unpack("H2"x20, $val))',
|
|
3786
|
+
ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
|
|
3787
|
+
PrintConv => sub { PrintAFPoints(shift, \%afPoints153); },
|
|
3788
|
+
PrintConvInv => sub { PrintAFPointsInv(shift, \%afPoints153); },
|
|
3789
|
+
},
|
|
3790
|
+
],
|
|
3692
3791
|
0x32 => { #PH (Z7)
|
|
3693
3792
|
Name => 'AFAreaWidth',
|
|
3694
3793
|
Condition => '$$self{AFInfo2Version} =~ /^03/',
|
|
@@ -3701,6 +3800,19 @@ my %binaryDataAttrs = (
|
|
|
3701
3800
|
Format => 'int16u',
|
|
3702
3801
|
RawConv => '$val ? $val : undef',
|
|
3703
3802
|
},
|
|
3803
|
+
0x38 => { #28
|
|
3804
|
+
Name => 'PrimaryAFPoint',
|
|
3805
|
+
Condition => '$$self{PhaseDetectAF} == 9 and $$self{AFInfo2Version} =~ /^03/',
|
|
3806
|
+
Notes => q{
|
|
3807
|
+
Nikon models with 105-point AF -- 7 rows (A-G) and 15 columns (1-15): D6
|
|
3808
|
+
},
|
|
3809
|
+
PrintConvColumns => 5,
|
|
3810
|
+
PrintConv => {
|
|
3811
|
+
0 => '(none)',
|
|
3812
|
+
%afPoints105,
|
|
3813
|
+
1 => 'D8 (Center)',
|
|
3814
|
+
},
|
|
3815
|
+
},
|
|
3704
3816
|
0x44 => [
|
|
3705
3817
|
{
|
|
3706
3818
|
Name => 'PrimaryAFPoint',
|
|
@@ -3800,6 +3912,7 @@ my %binaryDataAttrs = (
|
|
|
3800
3912
|
# (don't know what the difference between 1 and 2 is)
|
|
3801
3913
|
1 => 'On (1)',
|
|
3802
3914
|
2 => 'On (2)',
|
|
3915
|
+
3 => 'On (Zoom)', #28
|
|
3803
3916
|
},
|
|
3804
3917
|
},
|
|
3805
3918
|
1 => {
|
|
@@ -3809,6 +3922,7 @@ my %binaryDataAttrs = (
|
|
|
3809
3922
|
PrintConvInv => '$val eq "n/a" ? 255 : $val',
|
|
3810
3923
|
},
|
|
3811
3924
|
2 => {
|
|
3925
|
+
# when AFFineTune = 3 (indicating a zoom lens), this Tag stores the tuning adjustment for the wide end of the zoom range (ref 28)
|
|
3812
3926
|
Name => 'AFFineTuneAdj',
|
|
3813
3927
|
Priority => 0, # so other value takes priority if it exists
|
|
3814
3928
|
Notes => 'may only be valid for saved lenses',
|
|
@@ -3816,6 +3930,14 @@ my %binaryDataAttrs = (
|
|
|
3816
3930
|
PrintConv => '$val > 0 ? "+$val" : $val',
|
|
3817
3931
|
PrintConvInv => '$val',
|
|
3818
3932
|
},
|
|
3933
|
+
3 => {
|
|
3934
|
+
Name => 'AFFineTuneAdjTele',
|
|
3935
|
+
# should probably insert a Condition that restricts this to AFFineTune = 3 (ref 28)
|
|
3936
|
+
Notes => 'only valid for zoom lenses (ie, AFTune=3)',
|
|
3937
|
+
Format => 'int8s',
|
|
3938
|
+
PrintConv => '$val > 0 ? "+$val" : $val',
|
|
3939
|
+
PrintConvInv => '$val',
|
|
3940
|
+
},
|
|
3819
3941
|
);
|
|
3820
3942
|
|
|
3821
3943
|
# Nikon NEF processing information (ref forum6281)
|
|
@@ -4536,6 +4658,12 @@ my %nikonFocalConversions = (
|
|
|
4536
4658
|
13 => 'Nikkor Z 24-70mm f/2.8 S',
|
|
4537
4659
|
14 => 'Nikkor Z 85mm f/1.8 S',
|
|
4538
4660
|
15 => 'Nikkor Z 24mm f/1.8 S', #IB
|
|
4661
|
+
16 => 'Nikkor Z 70-200mm f/2.8 VR S', #IB
|
|
4662
|
+
17 => 'Nikkor Z 20mm f/1.8 S', #IB
|
|
4663
|
+
18 => 'Nikkor Z 24-200mm f/4-6.3 VR', #IB
|
|
4664
|
+
21 => 'Nikkor Z 50mm f/1.2 S', #IB
|
|
4665
|
+
22 => 'Nikkor Z 24-50mm f/4-6.3', #IB
|
|
4666
|
+
23 => 'Nikkor Z 14-24mm f/2.8 S', #IB
|
|
4539
4667
|
},
|
|
4540
4668
|
},
|
|
4541
4669
|
0x36 => {
|
|
@@ -6250,7 +6378,7 @@ my %nikonFocalConversions = (
|
|
|
6250
6378
|
# 3 => 'Rotate 180',
|
|
6251
6379
|
# },
|
|
6252
6380
|
#},
|
|
6253
|
-
0x2ea4 => {
|
|
6381
|
+
0x2ea4 => { #PH
|
|
6254
6382
|
Name => 'NikonMeteringMode',
|
|
6255
6383
|
Condition => '$$self{Model} =~ /\bD500\b/', # (didn't seem to work for D5, but I need more samples)
|
|
6256
6384
|
Notes => 'D500 only',
|
|
@@ -6627,7 +6755,7 @@ my %nikonFocalConversions = (
|
|
|
6627
6755
|
WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted,
|
|
6628
6756
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
|
6629
6757
|
VARS => { ID_LABEL => 'Index' },
|
|
6630
|
-
DATAMEMBER => [ 0x04, 0x58, 0x0fbf ],
|
|
6758
|
+
DATAMEMBER => [ 0x04, 0x58, 0xa0, 0x0fbf, 0x2efa ],
|
|
6631
6759
|
IS_SUBDIR => [ 0x1038 ],
|
|
6632
6760
|
WRITABLE => 1,
|
|
6633
6761
|
FIRST_ENTRY => 0,
|
|
@@ -6653,6 +6781,14 @@ my %nikonFocalConversions = (
|
|
|
6653
6781
|
Hidden => 1,
|
|
6654
6782
|
RawConv => '$$self{CustomSettingsOffset} = $val || 0x10000000; undef',
|
|
6655
6783
|
},
|
|
6784
|
+
0xa0 => {
|
|
6785
|
+
Name => 'OrientationOffset',
|
|
6786
|
+
DataMember => 'OrientationOffset',
|
|
6787
|
+
Format => 'int32u',
|
|
6788
|
+
Writable => 0,
|
|
6789
|
+
Hidden => 1,
|
|
6790
|
+
RawConv => '$$self{OrientationOffset} = $val || 0x10000000; undef',
|
|
6791
|
+
},
|
|
6656
6792
|
0x0791 => {
|
|
6657
6793
|
Name => 'PhotoShootingMenuBankImageArea',
|
|
6658
6794
|
Mask => 0x07,
|
|
@@ -6692,6 +6828,14 @@ my %nikonFocalConversions = (
|
|
|
6692
6828
|
TagTable => 'Image::ExifTool::NikonCustom::SettingsD850',
|
|
6693
6829
|
},
|
|
6694
6830
|
},
|
|
6831
|
+
### 0x2efb - OrientationInfo start (D850 firmware 1.01a)
|
|
6832
|
+
0x2efa => {
|
|
6833
|
+
Name => 'Hook1',
|
|
6834
|
+
Hidden => 1,
|
|
6835
|
+
RawConv => 'undef',
|
|
6836
|
+
# account for variable location of OrientationInfo data
|
|
6837
|
+
Hook => '$varSize = $$self{OrientationOffset} - 0x2efb',
|
|
6838
|
+
},
|
|
6695
6839
|
0x2efb => { #28
|
|
6696
6840
|
Name => 'RollAngle',
|
|
6697
6841
|
Format => 'fixed32u',
|
|
@@ -8855,7 +8999,7 @@ my %nikonFocalConversions = (
|
|
|
8855
8999
|
},
|
|
8856
9000
|
},
|
|
8857
9001
|
{
|
|
8858
|
-
Condition => '$$valPt =~ /^
|
|
9002
|
+
Condition => '$$valPt =~ /^080[01]/', # Z6/Z7
|
|
8859
9003
|
Name => 'LensData0800',
|
|
8860
9004
|
SubDirectory => {
|
|
8861
9005
|
TagTable => 'Image::ExifTool::Nikon::LensData0800',
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
# 19) Brad Grier private communication
|
|
28
28
|
# 22) Herbert Kauer private communication
|
|
29
29
|
# 23) Daniel Pollock private communication (PEN-F)
|
|
30
|
+
# 24) Sebastian private communication (E-M1 Mark III)
|
|
30
31
|
# IB) Iliah Borg private communication (LibRaw)
|
|
31
32
|
# NJ) Niels Kristian Bech Jensen private communication
|
|
32
33
|
#------------------------------------------------------------------------------
|
|
@@ -39,7 +40,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
39
40
|
use Image::ExifTool::Exif;
|
|
40
41
|
use Image::ExifTool::APP12;
|
|
41
42
|
|
|
42
|
-
$VERSION = '2.
|
|
43
|
+
$VERSION = '2.69';
|
|
43
44
|
|
|
44
45
|
sub PrintLensInfo($$$);
|
|
45
46
|
|
|
@@ -172,6 +173,7 @@ my %olympusLensTypes = (
|
|
|
172
173
|
'2 28 10' => 'Lumix G Vario 12-60mm F3.5-5.6 Asph. Power OIS', #NJ
|
|
173
174
|
'2 29 10' => 'Leica DG Summilux 12mm F1.4 Asph.', #IB
|
|
174
175
|
'2 30 10' => 'Leica DG Vario-Elmarit 12-60mm F2.8-4 Asph. Power OIS', #IB
|
|
176
|
+
'2 31 10' => 'Lumix G Vario 45-200mm F4.0-5.6 II', #forum3833
|
|
175
177
|
'2 32 10' => 'Lumix G Vario 100-300mm F4.0-5.6 II', #PH
|
|
176
178
|
'2 33 10' => 'Lumix G X Vario 12-35mm F2.8 II Asph. Power OIS', #IB
|
|
177
179
|
'2 34 10' => 'Lumix G Vario 35-100mm F2.8 II', #forum3833
|
|
@@ -184,6 +186,8 @@ my %olympusLensTypes = (
|
|
|
184
186
|
# Tamron lenses
|
|
185
187
|
'5 01 10' => 'Tamron 14-150mm F3.5-5.8 Di III', #NJ (model C001)
|
|
186
188
|
# '65535 07 40' - Seen for LUMIX S 16-35/F4 on Panasonic DC-S1H (ref PH)
|
|
189
|
+
# Other makes
|
|
190
|
+
'24 01 10' => 'Venus Optics Laowa 50mm F2.8 2x Macro', #DonKomarechka
|
|
187
191
|
);
|
|
188
192
|
|
|
189
193
|
# lookup for Olympus camera types (ref PH)
|
|
@@ -1836,6 +1840,7 @@ my %indexInfo = (
|
|
|
1836
1840
|
6 => 'Imager AF',
|
|
1837
1841
|
7 => 'Live View Magnification Frame',
|
|
1838
1842
|
8 => 'AF sensor',
|
|
1843
|
+
9 => 'Starry Sky AF', #24
|
|
1839
1844
|
},
|
|
1840
1845
|
}],
|
|
1841
1846
|
},
|
|
@@ -1893,9 +1898,13 @@ my %indexInfo = (
|
|
|
1893
1898
|
},
|
|
1894
1899
|
0x307 => { #15
|
|
1895
1900
|
Name => 'AFFineTuneAdj',
|
|
1896
|
-
|
|
1901
|
+
Writable => 'int16s',
|
|
1897
1902
|
Count => 3, # not sure what the 3 values mean
|
|
1898
1903
|
},
|
|
1904
|
+
0x308 => { #forum11578
|
|
1905
|
+
Name => 'FocusBracketStepSize',
|
|
1906
|
+
Writable => 'int8u',
|
|
1907
|
+
},
|
|
1899
1908
|
0x400 => { #6
|
|
1900
1909
|
Name => 'FlashMode',
|
|
1901
1910
|
Writable => 'int16u',
|
|
@@ -2120,6 +2129,11 @@ my %indexInfo = (
|
|
|
2120
2129
|
67 => 'Soft Background Shot', #11
|
|
2121
2130
|
142 => 'Hand-held Starlight', #PH (SH-21)
|
|
2122
2131
|
154 => 'HDR', #PH (XZ-2)
|
|
2132
|
+
197 => 'Panning', #forum11631 (EM5iii)
|
|
2133
|
+
203 => 'Light Trails', #forum11631 (EM5iii)
|
|
2134
|
+
204 => 'Backlight HDR', #forum11631 (EM5iii)
|
|
2135
|
+
205 => 'Silent', #forum11631 (EM5iii)
|
|
2136
|
+
206 => 'Multi Focus Shot', #forum11631 (EM5iii)
|
|
2123
2137
|
},
|
|
2124
2138
|
},
|
|
2125
2139
|
0x50a => { #PH/4/6
|
|
@@ -2511,6 +2525,8 @@ my %indexInfo = (
|
|
|
2511
2525
|
Count => 2,
|
|
2512
2526
|
PrintConv => {
|
|
2513
2527
|
'0 0' => 'No',
|
|
2528
|
+
'1 *' => 'Live Composite (* images)', #24
|
|
2529
|
+
'4 *' => 'Live Time/Bulb (* images)', #24
|
|
2514
2530
|
'3 2' => 'ND2 (1EV)', #IB
|
|
2515
2531
|
'3 4' => 'ND4 (2EV)', #IB
|
|
2516
2532
|
'3 8' => 'ND8 (3EV)', #IB
|
|
@@ -2519,21 +2535,26 @@ my %indexInfo = (
|
|
|
2519
2535
|
'5 4' => 'HDR1', #forum8906
|
|
2520
2536
|
'6 4' => 'HDR2', #forum8906
|
|
2521
2537
|
'8 8' => 'Tripod high resolution', #IB
|
|
2522
|
-
'9
|
|
2523
|
-
'
|
|
2524
|
-
|
|
2525
|
-
|
|
2526
|
-
|
|
2527
|
-
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
|
|
2531
|
-
|
|
2532
|
-
|
|
2533
|
-
|
|
2534
|
-
|
|
2535
|
-
|
|
2536
|
-
|
|
2538
|
+
'9 *' => 'Focus-stacked (* images)', #IB (* = 2-15)
|
|
2539
|
+
'11 16' => 'Hand-held high resolution', #IB (perhaps '11 15' would be possible, ref 24)
|
|
2540
|
+
OTHER => sub {
|
|
2541
|
+
my ($val, $inv, $conv) = @_;
|
|
2542
|
+
if ($inv) {
|
|
2543
|
+
$val = lc $val;
|
|
2544
|
+
return undef unless $val =~ s/(\d+) images/\* images/;
|
|
2545
|
+
my $num = $1;
|
|
2546
|
+
foreach (keys %$conv) {
|
|
2547
|
+
next unless $val eq lc $$conv{$_};
|
|
2548
|
+
($val = $_) =~ s/\*/$num/ or return undef;
|
|
2549
|
+
return $val;
|
|
2550
|
+
}
|
|
2551
|
+
} else {
|
|
2552
|
+
return "Unknown ($_[0])" unless $val =~ s/ (\d+)/ \*/ and $$conv{$val};
|
|
2553
|
+
my $num = $1;
|
|
2554
|
+
($val = $$conv{$val}) =~ s/\*/$num/;
|
|
2555
|
+
return $val;
|
|
2556
|
+
}
|
|
2557
|
+
},
|
|
2537
2558
|
},
|
|
2538
2559
|
},
|
|
2539
2560
|
0x900 => { #11
|
|
@@ -2894,6 +2915,7 @@ my %indexInfo = (
|
|
|
2894
2915
|
Count => 2,
|
|
2895
2916
|
PrintConv => [{
|
|
2896
2917
|
0 => 'Off',
|
|
2918
|
+
1 => 'Live Composite', #github issue#61
|
|
2897
2919
|
2 => 'On (2 frames)',
|
|
2898
2920
|
3 => 'On (3 frames)',
|
|
2899
2921
|
}],
|