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.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +198 -2
  3. data/bin/MANIFEST +8 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +43 -42
  7. data/bin/exiftool +102 -75
  8. data/bin/lib/Image/ExifTool.pm +163 -111
  9. data/bin/lib/Image/ExifTool.pod +127 -93
  10. data/bin/lib/Image/ExifTool/AIFF.pm +2 -2
  11. data/bin/lib/Image/ExifTool/APE.pm +2 -2
  12. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +21 -10
  13. data/bin/lib/Image/ExifTool/Canon.pm +202 -14
  14. data/bin/lib/Image/ExifTool/CanonCustom.pm +82 -16
  15. data/bin/lib/Image/ExifTool/DPX.pm +56 -2
  16. data/bin/lib/Image/ExifTool/DarwinCore.pm +22 -3
  17. data/bin/lib/Image/ExifTool/EXE.pm +8 -5
  18. data/bin/lib/Image/ExifTool/Exif.pm +15 -6
  19. data/bin/lib/Image/ExifTool/Font.pm +9 -2
  20. data/bin/lib/Image/ExifTool/GIF.pm +6 -1
  21. data/bin/lib/Image/ExifTool/GeoTiff.pm +2 -0
  22. data/bin/lib/Image/ExifTool/Geotag.pm +2 -2
  23. data/bin/lib/Image/ExifTool/GoPro.pm +48 -22
  24. data/bin/lib/Image/ExifTool/H264.pm +1 -1
  25. data/bin/lib/Image/ExifTool/ID3.pm +91 -12
  26. data/bin/lib/Image/ExifTool/IPTC.pm +1 -0
  27. data/bin/lib/Image/ExifTool/JSON.pm +27 -4
  28. data/bin/lib/Image/ExifTool/Lang/de.pm +3 -1
  29. data/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
  30. data/bin/lib/Image/ExifTool/M2TS.pm +19 -19
  31. data/bin/lib/Image/ExifTool/MacOS.pm +154 -38
  32. data/bin/lib/Image/ExifTool/Matroska.pm +3 -1
  33. data/bin/lib/Image/ExifTool/Minolta.pm +7 -2
  34. data/bin/lib/Image/ExifTool/MinoltaRaw.pm +11 -10
  35. data/bin/lib/Image/ExifTool/Nikon.pm +164 -20
  36. data/bin/lib/Image/ExifTool/Olympus.pm +39 -17
  37. data/bin/lib/Image/ExifTool/PNG.pm +14 -3
  38. data/bin/lib/Image/ExifTool/PPM.pm +5 -5
  39. data/bin/lib/Image/ExifTool/Panasonic.pm +148 -14
  40. data/bin/lib/Image/ExifTool/PanasonicRaw.pm +34 -0
  41. data/bin/lib/Image/ExifTool/Parrot.pm +2 -1
  42. data/bin/lib/Image/ExifTool/Pentax.pm +3 -1
  43. data/bin/lib/Image/ExifTool/Photoshop.pm +2 -1
  44. data/bin/lib/Image/ExifTool/QuickTime.pm +289 -37
  45. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +419 -60
  46. data/bin/lib/Image/ExifTool/README +26 -22
  47. data/bin/lib/Image/ExifTool/RSRC.pm +17 -11
  48. data/bin/lib/Image/ExifTool/RTF.pm +12 -7
  49. data/bin/lib/Image/ExifTool/Radiance.pm +7 -2
  50. data/bin/lib/Image/ExifTool/Ricoh.pm +19 -1
  51. data/bin/lib/Image/ExifTool/Shift.pl +1 -0
  52. data/bin/lib/Image/ExifTool/SigmaRaw.pm +40 -33
  53. data/bin/lib/Image/ExifTool/Sony.pm +426 -40
  54. data/bin/lib/Image/ExifTool/TagLookup.pm +5799 -5671
  55. data/bin/lib/Image/ExifTool/TagNames.pod +584 -97
  56. data/bin/lib/Image/ExifTool/Validate.pm +4 -4
  57. data/bin/lib/Image/ExifTool/WriteExif.pl +3 -2
  58. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +26 -18
  59. data/bin/lib/Image/ExifTool/Writer.pl +47 -24
  60. data/bin/lib/Image/ExifTool/XMP.pm +99 -17
  61. data/bin/lib/Image/ExifTool/XMP2.pl +1 -0
  62. data/bin/lib/Image/ExifTool/XMPStruct.pl +3 -1
  63. data/bin/lib/Image/ExifTool/ZISRAW.pm +123 -0
  64. data/bin/perl-Image-ExifTool.spec +42 -41
  65. data/lib/exiftool_vendored/version.rb +1 -1
  66. 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.82';
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 => 0x2f07,
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 =~ /^0800/', # Z6/Z7
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
- Condition => '$$self{PhaseDetectAF} < 2',
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 => { #PH
3665
- Name => 'ContrastDetectAFInFocus',
3666
- Condition => '$$self{AFInfo2Version} eq "0100"',
3667
- PrintConv => { 0 => 'No', 1 => 'Yes' },
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 => '$$self{ContrastDetectAF} == 2 and $$self{AFInfo2Version} =~ /^03/',
3685
- Format => 'int16u',
3686
- },
3687
- 0x30 => { #PH (Z7)
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 =~ /^0800/', # Z6/Z7
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.65';
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
- Format => 'int16s',
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 2' => 'Focus-stacked (2 images)', #IB
2523
- '9 3' => 'Focus-stacked (3 images)', #IB
2524
- '9 4' => 'Focus-stacked (4 images)', #IB
2525
- '9 5' => 'Focus-stacked (5 images)', #IB
2526
- '9 6' => 'Focus-stacked (6 images)', #IB
2527
- '9 7' => 'Focus-stacked (7 images)', #IB
2528
- '9 8' => 'Focus-stacked (8 images)',
2529
- '9 9' => 'Focus-stacked (9 images)', #IB
2530
- '9 10' => 'Focus-stacked (10 images)', #IB
2531
- '9 11' => 'Focus-stacked (11 images)', #IB
2532
- '9 12' => 'Focus-stacked (12 images)', #IB
2533
- '9 13' => 'Focus-stacked (13 images)', #IB
2534
- '9 14' => 'Focus-stacked (14 images)', #IB
2535
- '9 15' => 'Focus-stacked (15 images)', #IB
2536
- '11 16' => 'Hand-held high resolution', #IB
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
  }],