exiftool-vendored.exe 12.28.0 → 12.34.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 (49) hide show
  1. package/bin/exiftool_files/Changes +108 -5
  2. package/bin/exiftool_files/README +2 -2
  3. package/bin/exiftool_files/arg_files/xmp2exif.args +2 -1
  4. package/bin/exiftool_files/config_files/example.config +1 -1
  5. package/bin/exiftool_files/exiftool.pl +40 -26
  6. package/bin/exiftool_files/fmt_files/gpx.fmt +1 -1
  7. package/bin/exiftool_files/fmt_files/gpx_wpt.fmt +1 -1
  8. package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +16 -3
  9. package/bin/exiftool_files/lib/Image/ExifTool/CBOR.pm +331 -0
  10. package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +35 -5
  11. package/bin/exiftool_files/lib/Image/ExifTool/Charset.pm +2 -0
  12. package/bin/exiftool_files/lib/Image/ExifTool/DPX.pm +13 -2
  13. package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +98 -4
  14. package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +1 -0
  15. package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +13 -2
  16. package/bin/exiftool_files/lib/Image/ExifTool/GoPro.pm +16 -1
  17. package/bin/exiftool_files/lib/Image/ExifTool/ICC_Profile.pm +96 -4
  18. package/bin/exiftool_files/lib/Image/ExifTool/ID3.pm +15 -3
  19. package/bin/exiftool_files/lib/Image/ExifTool/JSON.pm +7 -3
  20. package/bin/exiftool_files/lib/Image/ExifTool/Jpeg2000.pm +60 -26
  21. package/bin/exiftool_files/lib/Image/ExifTool/Lang/nl.pm +60 -59
  22. package/bin/exiftool_files/lib/Image/ExifTool/M2TS.pm +81 -14
  23. package/bin/exiftool_files/lib/Image/ExifTool/MacOS.pm +2 -2
  24. package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +12 -3
  25. package/bin/exiftool_files/lib/Image/ExifTool/NikonSettings.pm +10 -2
  26. package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +8 -1
  27. package/bin/exiftool_files/lib/Image/ExifTool/Other.pm +93 -0
  28. package/bin/exiftool_files/lib/Image/ExifTool/PDF.pm +11 -12
  29. package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +7 -6
  30. package/bin/exiftool_files/lib/Image/ExifTool/Panasonic.pm +2 -2
  31. package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +2 -1
  32. package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +67 -9
  33. package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +133 -119
  34. package/bin/exiftool_files/lib/Image/ExifTool/README +9 -2
  35. package/bin/exiftool_files/lib/Image/ExifTool/RIFF.pm +6 -1
  36. package/bin/exiftool_files/lib/Image/ExifTool/Samsung.pm +47 -10
  37. package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +80 -32
  38. package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +139 -4
  39. package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +224 -30
  40. package/bin/exiftool_files/lib/Image/ExifTool/WritePDF.pl +1 -0
  41. package/bin/exiftool_files/lib/Image/ExifTool/WritePNG.pl +2 -0
  42. package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +17 -3
  43. package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +43 -0
  44. package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +21 -8
  45. package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +4 -1
  46. package/bin/exiftool_files/lib/Image/ExifTool/XMPStruct.pl +3 -1
  47. package/bin/exiftool_files/lib/Image/ExifTool.pm +8892 -8839
  48. package/bin/exiftool_files/lib/Image/ExifTool.pod +24 -15
  49. package/package.json +3 -3
@@ -11,7 +11,7 @@ package Image::ExifTool::Lang::nl;
11
11
  use strict;
12
12
  use vars qw($VERSION);
13
13
 
14
- $VERSION = '1.12';
14
+ $VERSION = '1.13';
15
15
 
16
16
  %Image::ExifTool::Lang::nl::Translate = (
17
17
  'AEBAutoCancel' => {
@@ -1502,97 +1502,98 @@ $VERSION = '1.12';
1502
1502
  'GIFVersion' => 'GIF versie',
1503
1503
  'GPSAltitude' => 'Hoogte',
1504
1504
  'GPSAltitudeRef' => {
1505
- Description => 'Hoogte referentie',
1505
+ Description => 'GPS hoogte - referentie',
1506
1506
  PrintConv => {
1507
- 'Above Sea Level' => 'Zee spiegel',
1508
- 'Below Sea Level' => 'Zee spiegel referentie (negatieve waarde)',
1507
+ 'Above Sea Level' => 'Boven zeeniveau',
1508
+ 'Below Sea Level' => 'Onder zeeniveau',
1509
1509
  },
1510
1510
  },
1511
- 'GPSAreaInformation' => 'Naam van het GPS gebied',
1512
- 'GPSDOP' => 'Meet nauwkeurigheid',
1513
- 'GPSDateStamp' => 'GPS datum',
1514
- 'GPSDateTime' => 'GPS tijd (atoomklok)',
1515
- 'GPSDestBearing' => 'Motiefrichting',
1511
+ 'GPSAreaInformation' => 'GPS naam van het gebied',
1512
+ 'GPSDOP' => 'GPS meetnauwkeurigheid',
1513
+ 'GPSDateStamp' => 'GPS UTC datum',
1514
+ 'GPSDateTime' => 'GPS UTC datum en tijd',
1515
+ 'GPSDestBearing' => 'GPS peiling van bestemming',
1516
1516
  'GPSDestBearingRef' => {
1517
- Description => 'Referentie voor de motiefrichting',
1517
+ Description => 'GPS peiling van bestemming - referentie',
1518
1518
  PrintConv => {
1519
- 'Magnetic North' => 'Magnetische uitrichting',
1520
- 'True North' => 'Geografische uitrichting',
1519
+ 'Magnetic North' => 'Magnetische noorden',
1520
+ 'True North' => 'Geografische noorden',
1521
1521
  },
1522
1522
  },
1523
- 'GPSDestDistance' => 'Afstand tot bestemming',
1523
+ 'GPSDestDistance' => 'GPS afstand tot bestemming',
1524
1524
  'GPSDestDistanceRef' => {
1525
- Description => 'Referentie voor de afstand tot de bestemming',
1525
+ Description => 'GPS afstand tot bestemming - referentie',
1526
1526
  PrintConv => {
1527
- 'Miles' => 'Mijlen',
1528
- 'Nautical Miles' => 'Knopen',
1527
+ 'Miles' => 'Engelse mijlen',
1528
+ 'Nautical Miles' => 'Zeemijlen',
1529
1529
  },
1530
1530
  },
1531
- 'GPSDestLatitude' => 'Breedte van het doel',
1531
+ 'GPSDestLatitude' => 'GPS breedtegraad van bestemming',
1532
1532
  'GPSDestLatitudeRef' => {
1533
- Description => 'Referentie voor de breedte van het doel',
1533
+ Description => 'GPS breedtegraad van bestemming - referentie',
1534
1534
  PrintConv => {
1535
- 'North' => 'Noordelijke breedte',
1536
- 'South' => 'Zuidelijke breedte',
1535
+ 'North' => 'Noorderbreedte',
1536
+ 'South' => 'Zuiderbreedte',
1537
1537
  },
1538
1538
  },
1539
- 'GPSDestLongitude' => 'Lengtegraad van het doel',
1539
+ 'GPSDestLongitude' => 'GPS lengtegraad van bestemming',
1540
1540
  'GPSDestLongitudeRef' => {
1541
- Description => 'Referentie voor de lengte van het doel',
1541
+ Description => 'GPS lengtegraad van bestemming - referentie',
1542
1542
  PrintConv => {
1543
- 'East' => 'Oostelijke lengte',
1544
- 'West' => 'Westlijke lengte',
1543
+ 'East' => 'Oosterlengte',
1544
+ 'West' => 'Westerlengte',
1545
1545
  },
1546
1546
  },
1547
1547
  'GPSDifferential' => {
1548
1548
  Description => 'GPS differentiaal correctie',
1549
1549
  PrintConv => {
1550
- 'Differential Corrected' => 'Differentiaal correctie toegepast',
1551
- 'No Correction' => 'Meting zonder differentiaal correctie',
1550
+ 'Differential Corrected' => 'Met differentiaal correctie',
1551
+ 'No Correction' => 'Zonder differentiaal correctie',
1552
1552
  },
1553
1553
  },
1554
- 'GPSImgDirection' => 'Richting van de afbeelding',
1554
+ 'GPSImgDirection' => 'GPS peiling van de afbeelding',
1555
1555
  'GPSImgDirectionRef' => {
1556
- Description => 'Referentie voor de uitrichting van de afbeelding',
1556
+ Description => 'GPS peiling van de afbeelding - referentie',
1557
1557
  PrintConv => {
1558
- 'Magnetic North' => 'Magnetische uitrichting',
1559
- 'True North' => 'Geografische uitrichting',
1558
+ 'Magnetic North' => 'Magnetische noorden',
1559
+ 'True North' => 'Geografische noorden',
1560
1560
  },
1561
1561
  },
1562
- 'GPSInfo' => 'GPS Info IFD-wijzer',
1563
- 'GPSLatitude' => 'Breedte graad',
1562
+ 'GPSInfo' => 'GPS Info',
1563
+ 'GPSLatitude' => 'GPS breedtegraad',
1564
1564
  'GPSLatitudeRef' => {
1565
- Description => 'Noord. of zuid. breedte',
1565
+ Description => 'GPS breedtegraad - referentie',
1566
1566
  PrintConv => {
1567
- 'North' => 'Noordelijke breedte',
1568
- 'South' => 'Zuidlijke breedte',
1567
+ 'North' => 'Noorderbreedte',
1568
+ 'South' => 'Zuiderbreedte',
1569
1569
  },
1570
1570
  },
1571
- 'GPSLongitude' => 'Geografische lengte',
1571
+ 'GPSLongitude' => 'GPS lengtegraad',
1572
1572
  'GPSLongitudeRef' => {
1573
- Description => 'Oost. of west. lengte',
1573
+ Description => 'GPS lengtegraad - referentie',
1574
1574
  PrintConv => {
1575
- 'East' => 'Oostlijke lengte',
1576
- 'West' => 'Westlijke lengte',
1575
+ 'East' => 'Oosterlengte',
1576
+ 'West' => 'Westerlengte',
1577
1577
  },
1578
1578
  },
1579
- 'GPSMapDatum' => 'Geodatische datum',
1579
+ 'GPSMapDatum' => 'GPS geodetisch datum',
1580
1580
  'GPSMeasureMode' => {
1581
- Description => 'GPS meet methode',
1581
+ Description => 'GPS meetmethode',
1582
1582
  PrintConv => {
1583
- '2-D' => '2 dimensionale meting',
1584
- '2-Dimensional' => '2 dimensionale meting',
1585
- '2-Dimensional Measurement' => '2 dimensionale meting',
1586
- '3-D' => '3 dimensionale meting',
1587
- '3-Dimensional' => '3 dimensionale meting',
1588
- '3-Dimensional Measurement' => '3 dimensionale meting',
1583
+ '2-D' => 'Tweedimensionale meting',
1584
+ '2-Dimensional' => 'Tweedimensionale meting',
1585
+ '2-Dimensional Measurement' => 'Tweedimensionale meting',
1586
+ '3-D' => 'Driedimensionale meting',
1587
+ '3-Dimensional' => 'Driedimensionale meting',
1588
+ '3-Dimensional Measurement' => 'Driedimensionale meting',
1589
1589
  },
1590
1590
  },
1591
- 'GPSProcessingMethod' => 'Naam van de GPS verwerk methode',
1592
- 'GPSSatellites' => 'Voor de meting gebruikte satellieten',
1593
- 'GPSSpeed' => 'Snelheid van de GPS ontvanger',
1591
+ 'GPSPosition' => 'GPS positie',
1592
+ 'GPSProcessingMethod' => 'GPS verwerkingsmethode',
1593
+ 'GPSSatellites' => 'GPS satellieten gebruikt voor de meting',
1594
+ 'GPSSpeed' => 'GPS ontvanger bewegingssnelheid',
1594
1595
  'GPSSpeedRef' => {
1595
- Description => 'Snelheids eenheid',
1596
+ Description => 'GPS ontvanger bewegingssnelheid - referentie',
1596
1597
  PrintConv => {
1597
1598
  'km/h' => 'Kilometer per uur',
1598
1599
  'knots' => 'Knopen',
@@ -1602,20 +1603,20 @@ $VERSION = '1.12';
1602
1603
  'GPSStatus' => {
1603
1604
  Description => 'GPS ontvanger status',
1604
1605
  PrintConv => {
1605
- 'Measurement Active' => 'Meting loopt',
1606
- 'Measurement Void' => 'Interoperabiliteit voor metingen',
1606
+ 'Measurement Active' => 'Actuele meting beschikbaar',
1607
+ 'Measurement Void' => 'Actuele meting niet beschikbaar',
1607
1608
  },
1608
1609
  },
1609
- 'GPSTimeStamp' => 'GPS tijd (atoomklok)',
1610
- 'GPSTrack' => 'Bewegingsrichting',
1610
+ 'GPSTimeStamp' => 'GPS UTC tijd',
1611
+ 'GPSTrack' => 'GPS ontvanger bewegingsrichting',
1611
1612
  'GPSTrackRef' => {
1612
- Description => 'Referentie voor de bewegingsrichting',
1613
+ Description => 'GPS ontvanger bewegingsrichting - referentie',
1613
1614
  PrintConv => {
1614
- 'Magnetic North' => 'Magnetische uitrichting',
1615
- 'True North' => 'Geographische uitrichting',
1615
+ 'Magnetic North' => 'Magnetische noorden',
1616
+ 'True North' => 'Geografische noorden',
1616
1617
  },
1617
1618
  },
1618
- 'GPSVersionID' => 'GPS tag versie',
1619
+ 'GPSVersionID' => 'GPS versie ID',
1619
1620
  'GainControl' => {
1620
1621
  Description => 'Belichtingsversterking',
1621
1622
  PrintConv => {
@@ -31,7 +31,7 @@ use strict;
31
31
  use vars qw($VERSION);
32
32
  use Image::ExifTool qw(:DataAccess :Utils);
33
33
 
34
- $VERSION = '1.20';
34
+ $VERSION = '1.21';
35
35
 
36
36
  # program map table "stream_type" lookup (ref 6/1)
37
37
  my %streamType = (
@@ -332,6 +332,7 @@ sub ParsePID($$$$$)
332
332
  } elsif ($$dataPt =~ /^A([NS])([EW])\0/s) {
333
333
  # INNOVV TS video (same format is INNOVV MP4)
334
334
  SetByteOrder('II');
335
+ my $tagTbl = GetTagTable('Image::ExifTool::QuickTime::Stream');
335
336
  while ($$dataPt =~ /(A[NS][EW]\0.{28})/g) {
336
337
  my $dat = $1;
337
338
  my $lat = abs(GetFloat(\$dat, 4)); # (abs just to be safe)
@@ -340,14 +341,10 @@ sub ParsePID($$$$$)
340
341
  my $trk = GetFloat(\$dat, 16);
341
342
  my @acc = unpack('x20V3', $dat);
342
343
  map { $_ = $_ - 4294967296 if $_ >= 0x80000000 } @acc;
343
- my $deg = int($lat / 100);
344
- $lat = $deg + ($lat - $deg * 100) / 60;
345
- $deg = int($lon / 100);
346
- $lon = $deg + ($lon - $deg * 100) / 60;
344
+ Image::ExifTool::QuickTime::ConvertLatLon($lat, $lon);
347
345
  $$et{DOC_NUM} = ++$$et{DOC_COUNT};
348
- my $tagTbl = GetTagTable('Image::ExifTool::QuickTime::Stream');
349
- $et->HandleTag($tagTbl, GPSLatitude => $lat * (substr($dat,1,1) eq 'S' ? -1 : 1));
350
- $et->HandleTag($tagTbl, GPSLongitude => $lon * (substr($dat,2,1) eq 'W' ? -1 : 1));
346
+ $et->HandleTag($tagTbl, GPSLatitude => abs($lat) * (substr($dat,1,1) eq 'S' ? -1 : 1));
347
+ $et->HandleTag($tagTbl, GPSLongitude => abs($lon) * (substr($dat,2,1) eq 'W' ? -1 : 1));
351
348
  $et->HandleTag($tagTbl, GPSSpeed => $spd);
352
349
  $et->HandleTag($tagTbl, GPSSpeedRef => 'K');
353
350
  $et->HandleTag($tagTbl, GPSTrack => $trk);
@@ -356,7 +353,66 @@ sub ParsePID($$$$$)
356
353
  }
357
354
  SetByteOrder('MM');
358
355
  $more = 1;
356
+ } elsif ($$dataPt =~ /^\$(GPSINFO|GSNRINFO),/) {
357
+ # $GPSINFO,0x0004,2021.08.09 13:27:36,2341.54561,12031.70135,8.0,51,153,0,0,\x0d
358
+ # $GSNRINFO,0.01,0.04,0.25\0
359
+ $$dataPt =~ tr/\x0d/\x0a/;
360
+ $$dataPt =~ tr/\0//d;
361
+ my $tagTbl = GetTagTable('Image::ExifTool::QuickTime::Stream');
362
+ my @lines = split /\x0a/, $$dataPt;
363
+ my ($line, $lastTime);
364
+ foreach $line (@lines) {
365
+ if ($line =~ /^\$GPSINFO/) {
366
+ my @a = split /,/, $lines[0];
367
+ next unless @a > 7;
368
+ # ignore duplicate fixes
369
+ next if $lastTime and $a[2] eq $lastTime;
370
+ $lastTime = $a[2];
371
+ $$et{DOC_NUM} = ++$$et{DOC_COUNT};
372
+ $a[2] =~ tr/./:/;
373
+ # (untested, and probably doesn't work for S/W hemispheres)
374
+ my ($lat, $lon) = @a[3,4];
375
+ Image::ExifTool::QuickTime::ConvertLatLon($lat, $lon);
376
+ # $a[0] - flags? values: '0x0001','0x0004','0x0008','0x0010'
377
+ $et->HandleTag($tagTbl, GPSDateTime => $a[2]);
378
+ $et->HandleTag($tagTbl, GPSLatitude => $lat);
379
+ $et->HandleTag($tagTbl, GPSLongitude => $lon);
380
+ $et->HandleTag($tagTbl, GPSSpeed => $a[5]);
381
+ $et->HandleTag($tagTbl, GPSSpeedRef => 'K');
382
+ # $a[6] - values: 48-60
383
+ $et->HandleTag($tagTbl, GPSTrack => $a[7]);
384
+ $et->HandleTag($tagTbl, GPSTrackRef => 'T');
385
+ # #a[8,9] - always 0
386
+ } elsif ($line =~ /^\$GSNRINFO/) {
387
+ my @a = split /,/, $line;
388
+ shift @a;
389
+ $et->HandleTag($tagTbl, Accelerometer => "@a");
390
+ }
391
+ }
392
+ $more = 1;
393
+ } elsif ($$dataPt =~ /^.{44}A\0{3}.{4}([NS])\0{3}.{4}([EW])\0{3}/s and length($$dataPt) >= 84) {
394
+ #forum11320
395
+ SetByteOrder('II');
396
+ my $tagTbl = GetTagTable('Image::ExifTool::QuickTime::Stream');
397
+ my $lat = abs(GetFloat($dataPt, 48)); # (abs just to be safe)
398
+ my $lon = abs(GetFloat($dataPt, 56)); # (abs just to be safe)
399
+ my $spd = GetFloat($dataPt, 64);
400
+ my $trk = GetFloat($dataPt, 68);
401
+ $et->WarnOnce('GPSLatitude/Longitude encryption is not yet known, so these will be wrong');
402
+ $$et{DOC_NUM} = ++$$et{DOC_COUNT};
403
+ my @date = unpack('x32V3x28V3', $$dataPt);
404
+ $date[3] += 2000;
405
+ $et->HandleTag($tagTbl, GPSDateTime => sprintf('%.4d:%.2d:%.2d %.2d:%.2d:%.2d', @date[3..5,0..2]));
406
+ $et->HandleTag($tagTbl, GPSLatitude => abs($lat) * ($1 eq 'S' ? -1 : 1));
407
+ $et->HandleTag($tagTbl, GPSLongitude => abs($lon) * ($2 eq 'W' ? -1 : 1));
408
+ $et->HandleTag($tagTbl, GPSSpeed => $spd);
409
+ $et->HandleTag($tagTbl, GPSSpeedRef => 'K');
410
+ $et->HandleTag($tagTbl, GPSTrack => $trk);
411
+ $et->HandleTag($tagTbl, GPSTrackRef => 'T');
412
+ SetByteOrder('MM');
413
+ $more = 1;
359
414
  }
415
+ delete $$et{DOC_NUM};
360
416
  }
361
417
  return $more;
362
418
  }
@@ -408,14 +464,21 @@ sub ProcessM2TS($$)
408
464
  );
409
465
  my %didPID = ( 1 => 0, 2 => 0, 0x1fff => 0 );
410
466
  my %needPID = ( 0 => 1 ); # lookup for stream PID's that we still need to parse
467
+ # PID's that may contain GPS info
468
+ my %gpsPID = (
469
+ 0x0300 => 1, # Novatek INNOVV
470
+ 0x01e4 => 1, # vsys a6l dashcam
471
+ );
411
472
  my $pEnd = 0;
412
473
 
413
- # scan entire file for GPS program 0x0300 if ExtractEmbedded option is 3 or higher
414
- # (some dashcams write this program but don't include it in the PMT)
474
+ # scan entire file for GPS programs if ExtractEmbedded option is 3 or higher
475
+ # (some dashcams write these programs but don't include it in the PMT)
415
476
  if (($et->Options('ExtractEmbedded') || 0) > 2) {
416
- $needPID{0x0300} = 1;
417
- $pidType{0x0300} = -1;
418
- $pidName{0x0300} = 'unregistered dashcam GPS';
477
+ foreach (keys %gpsPID) {
478
+ $needPID{$_} = 1;
479
+ $pidType{$_} = -1;
480
+ $pidName{$_} ='unregistered dashcam GPS';
481
+ }
419
482
  }
420
483
 
421
484
  # parse packets from MPEG-2 Transport Stream
@@ -704,7 +767,11 @@ sub ProcessM2TS($$)
704
767
  }
705
768
  $data{$pid} = substr($buff, $pos, $pEnd-$pos);
706
769
  } else {
707
- next unless defined $data{$pid};
770
+ unless (defined $data{$pid}) {
771
+ # (vsys a6l dashcam GPS record doesn't have a start indicator)
772
+ next unless $gpsPID{$pid};
773
+ $data{$pid} = '';
774
+ }
708
775
  # accumulate data for each elementary stream
709
776
  $data{$pid} .= substr($buff, $pos, $pEnd-$pos);
710
777
  }
@@ -52,7 +52,7 @@ my %mdDateInfo = (
52
52
  NOTES => q{
53
53
  MDItem tags are extracted using the "mdls" utility. They are extracted if
54
54
  any "MDItem*" tag or the MacOS group is specifically requested, or by
55
- setting the L<MDItemTags|../ExifTool.html#MDItemTags> API option to 1 or the L<RequestAll|../ExifTool.html#RequestAll> API option to 2 or
55
+ setting the API L<MDItemTags|../ExifTool.html#MDItemTags> option to 1 or the API L<RequestAll|../ExifTool.html#RequestAll> option to 2 or
56
56
  higher. Note that these tags do not necessarily reflect the current
57
57
  metadata of a file -- it may take some time for the MacOS mdworker daemon to
58
58
  index the file after a metadata change.
@@ -244,7 +244,7 @@ my %mdDateInfo = (
244
244
  NOTES => q{
245
245
  XAttr tags are extracted using the "xattr" utility. They are extracted if
246
246
  any "XAttr*" tag or the MacOS group is specifically requested, or by setting
247
- the L<XAttrTags|../ExifTool.html#XAttrTags> API option to 1 or the L<RequestAll|../ExifTool.html#RequestAll> API option to 2 or higher.
247
+ the API L<XAttrTags|../ExifTool.html#XAttrTags> option to 1 or the API L<RequestAll|../ExifTool.html#RequestAll> option to 2 or higher.
248
248
  And they are extracted by default from MacOS "._" files when reading
249
249
  these files directly.
250
250
  },
@@ -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.97';
65
+ $VERSION = '4.00';
66
66
 
67
67
  sub LensIDConv($$$);
68
68
  sub ProcessNikonAVI($$$);
@@ -556,6 +556,7 @@ sub GetAFPointGrid($$;$);
556
556
  'F3 54 2B 50 24 24 84 0E' => 'Tamron SP AF 17-50mm f/2.8 XR Di II VC LD Aspherical (IF) (B005)',
557
557
  '00 3F 2D 80 2B 40 00 06' => 'Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical (IF) (A14)',
558
558
  '00 3F 2D 80 2C 40 00 06' => 'Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical (IF) Macro (A14)',
559
+ 'EC 3E 3C 8E 2C 40 DF 0E' => 'Tamron 28-300mm f/3.5-6.3 Di VC PZD A010', #30
559
560
  '00 40 2D 80 2C 40 00 06' => 'Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical (IF) Macro (A14NII)', #NJ
560
561
  'FC 40 2D 80 2C 40 DF 06' => 'Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical (IF) Macro (A14NII)', #PH (NC)
561
562
  'E6 40 2D 80 2C 40 DF 0E' => 'Tamron 18-200mm f/3.5-6.3 Di II VC (B018)', #Tanel (removed AF designation, ref 37)
@@ -597,6 +598,7 @@ sub GetAFPointGrid($$;$);
597
598
  '00 48 5C 8E 30 3C 00 06' => 'Tamron AF 70-300mm f/4-5.6 Di LD Macro 1:2 (A17NII)', #JD
598
599
  'F1 47 5C 8E 30 3C DF 0E' => 'Tamron SP 70-300mm f/4-5.6 Di VC USD (A005)',
599
600
  'CF 47 5C 8E 31 3D DF 0E' => 'Tamron SP 70-300mm f/4-5.6 Di VC USD (A030)', #forum9773
601
+ 'CC 44 68 98 34 41 DF 0E' => 'Tamron 100-400mm f/4.5-6.3 Di VC USD', #30
600
602
  'EB 40 76 A6 38 40 DF 0E' => 'Tamron SP AF 150-600mm f/5-6.3 VC USD (A011)',
601
603
  'E3 40 76 A6 38 40 DF 4E' => 'Tamron SP 150-600mm f/5-6.3 Di VC USD G2', #30
602
604
  '20 3C 80 98 3D 3D 1E 02' => 'Tamron AF 200-400mm f/5.6 LD IF (75D)',
@@ -614,6 +616,7 @@ sub GetAFPointGrid($$;$);
614
616
  '7A 48 1C 29 24 24 7E 06' => 'Tokina AT-X 116 PRO DX II (AF 11-16mm f/2.8)',
615
617
  '80 48 1C 29 24 24 7A 06' => 'Tokina atx-i 11-16mm F2.8 CF', #exiv2 issue 1078
616
618
  '7A 48 1C 30 24 24 7E 06' => 'Tokina AT-X 11-20 F2.8 PRO DX (AF 11-20mm f/2.8)',
619
+ '8B 48 1C 30 24 24 85 06' => 'Tokina AT-X 11-20 F2.8 PRO DX (AF 11-20mm f/2.8)', #forum12687
617
620
  '00 3C 1F 37 30 30 00 06' => 'Tokina AT-X 124 AF PRO DX (AF 12-24mm f/4)',
618
621
  '7A 3C 1F 37 30 30 7E 06.2' => 'Tokina AT-X 124 AF PRO DX II (AF 12-24mm f/4)',
619
622
  '7A 3C 1F 3C 30 30 7E 06' => 'Tokina AT-X 12-28 PRO DX (AF 12-28mm f/4)',
@@ -720,6 +723,9 @@ sub GetAFPointGrid($$;$);
720
723
  '00 40 11 11 2C 2C 00 00' => 'Samyang 8mm f/3.5 Fish-Eye',
721
724
  '00 58 64 64 20 20 00 00' => 'Soligor C/D Macro MC 90mm f/2.5',
722
725
  '4A 58 30 30 14 0C 4D 02' => 'Rokinon 20mm f/1.8 ED AS UMC', #30
726
+ #
727
+ 'A0 56 44 44 14 14 A2 06' => 'Sony FE 35mm F1.8', #IB (Techart adapter)
728
+ 'A0 37 5C 8E 34 3C A2 06' => 'Sony FE 70-300mm F4.5-5.6 G OSS', #IB (Techart adapter)
723
729
  );
724
730
 
725
731
  # text encoding used in LocationInfo (ref PH)
@@ -4722,6 +4728,9 @@ my %nikonFocalConversions = (
4722
4728
  21 => 'Nikkor Z 50mm f/1.2 S', #IB
4723
4729
  22 => 'Nikkor Z 24-50mm f/4-6.3', #IB
4724
4730
  23 => 'Nikkor Z 14-24mm f/2.8 S', #IB
4731
+ 24 => 'Nikkor Z MC 105mm f/2.8 VR S', #IB
4732
+ 27 => 'Nikkor Z MC 50mm f/2.8', #IB
4733
+ 29 => 'Nikkor Z 28mm f/2.8', #IB
4725
4734
  },
4726
4735
  },
4727
4736
  0x36 => {
@@ -8494,8 +8503,8 @@ my %nikonFocalConversions = (
8494
8503
  # 0x02 - undef[148]
8495
8504
  # 0x03 - undef[284]
8496
8505
  # 0x04 - undef[148,212]
8497
- # 0x05 - undef[84]
8498
- # 0x06 - undef[116]
8506
+ # 0x05 - undef[84] (barrel distortion params at offsets 0x14,0x1c,0x24, ref 28)
8507
+ # 0x06 - undef[116] (vignette correction params at offsets 0x24,0x34,0x44, ref 28)
8499
8508
  # 0x07 - undef[104]
8500
8509
  # 0x08 - undef[24]
8501
8510
  # 0x09 - undef[36]
@@ -17,7 +17,7 @@ use strict;
17
17
  use vars qw($VERSION);
18
18
  use Image::ExifTool qw(:DataAccess :Utils);
19
19
 
20
- $VERSION = '1.03';
20
+ $VERSION = '1.04';
21
21
 
22
22
  sub ProcessNikonSettings($$$);
23
23
 
@@ -592,7 +592,7 @@ my %infoD6 = (
592
592
  },
593
593
  },
594
594
  0x026 => { Name => 'AF-AssistIlluminator', PrintConv => \%onOff }, # CSa11 (Z7_2)
595
- # 0x027 => { Name => 'ManualFocusRingInAFMode', PrintConv => \%onOff }, # CSa18 (D6,Z7_2) capability documented in manual, but visibility (& ability to test) requires a compatible lens
595
+ 0x027 => { Name => 'ManualFocusRingInAFMode', PrintConv => \%onOff }, # CSa12 (D6,Z7_2) capability documented in manual, but visibility (& ability to test) requires a compatible lens
596
596
  0x029 => { Name => 'ISOStepSize', PrintConv => \%thirdHalfFull }, # CSb1 (D6)
597
597
  0x02a => { Name => 'ExposureControlStepSize', PrintConv => \%thirdHalfFull }, # CSb2 (D6), CSb1 (Z7_2)
598
598
  0x02b => { # CSb4 (D6), CSb2 (Z7_2)
@@ -1920,6 +1920,14 @@ my %infoD6 = (
1920
1920
  },
1921
1921
  },
1922
1922
  0x170 => { Name => 'PreferSubSelectorCenter', PrintConv => \%offOn }, # CSf13 (D6 firmware v1.2.0)
1923
+ 0x171 => { # CSb8 (D6 firmware v1.3.0)
1924
+ Name => 'KeepExposureWithTeleconverter',
1925
+ PrintConv => {
1926
+ 1 => 'Off',
1927
+ 2 => 'Shutter Speed',
1928
+ 3 => 'ISO',
1929
+ },
1930
+ },
1923
1931
  0x174 => { # CSa17-d (D6 firmware v1.2.0)
1924
1932
  Name => 'FocusPointSelectionSpeed',
1925
1933
  PrintConv => {
@@ -40,7 +40,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
40
40
  use Image::ExifTool::Exif;
41
41
  use Image::ExifTool::APP12;
42
42
 
43
- $VERSION = '2.72';
43
+ $VERSION = '2.75';
44
44
 
45
45
  sub PrintLensInfo($$$);
46
46
 
@@ -113,6 +113,7 @@ my %olympusLensTypes = (
113
113
  '0 34 00' => 'Olympus Zuiko Digital ED 9-18mm F4.0-5.6', #7
114
114
  '0 34 10' => 'Olympus M.Zuiko Digital ED 12-45mm F4.0 Pro', #IB
115
115
  '0 35 00' => 'Olympus Zuiko Digital 14-54mm F2.8-3.5 II', #PH
116
+ '0 35 10' => 'Olympus M.Zuiko 100-400mm F5.0-6.3', #IB
116
117
  '0 36 10' => 'Olympus M.Zuiko Digital ED 8-25mm F4 Pro', #IB
117
118
  # Sigma lenses
118
119
  '1 01 00' => 'Sigma 18-50mm F3.5-5.6 DC', #8
@@ -183,6 +184,7 @@ my %olympusLensTypes = (
183
184
  '2 36 10' => 'Leica DG Elmarit 200mm F2.8 Power OIS', #IB
184
185
  '2 37 10' => 'Leica DG Vario-Elmarit 50-200mm F2.8-4 Asph. Power OIS', #IB
185
186
  '2 38 10' => 'Leica DG Vario-Summilux 10-25mm F1.7 Asph.', #IB
187
+ '2 40 10' => 'Leica DG Vario-Summilux 25-50mm F1.7 Asph.', #IB (H-X2550)
186
188
  '3 01 00' => 'Leica D Vario Elmarit 14-50mm F2.8-3.5 Asph.', #11
187
189
  '3 02 00' => 'Leica D Summilux 25mm F1.4 Asph.', #11
188
190
  # Tamron lenses
@@ -429,6 +431,7 @@ my %olympusCameraTypes = (
429
431
  S0085 => 'E-PL10', #IB
430
432
  S0089 => 'E-M5MarkIII',
431
433
  S0092 => 'E-M1MarkIII', #IB
434
+ S0093 => 'E-P7', #IB
432
435
  SR45 => 'D220',
433
436
  SR55 => 'D320L',
434
437
  SR83 => 'D340L',
@@ -3606,6 +3609,10 @@ my %indexInfo = (
3606
3609
  Format => 'string[24]',
3607
3610
  Groups => { 2 => 'Time' },
3608
3611
  },
3612
+ 0x17f => {
3613
+ Name => 'LensModel',
3614
+ Format => 'string[32]'
3615
+ },
3609
3616
  );
3610
3617
 
3611
3618
  # yet a different "thmb" atom format (PH, E-M5)
@@ -0,0 +1,93 @@
1
+ #------------------------------------------------------------------------------
2
+ # File: Other.pm
3
+ #
4
+ # Description: Read meta information from other uncommon formats
5
+ #
6
+ # Revisions: 2021/07/16 - P. Harvey Created
7
+ #
8
+ # References: 1) PFM - http://www.pauldebevec.com/Research/HDR/PFM/
9
+ #------------------------------------------------------------------------------
10
+
11
+ package Image::ExifTool::Other;
12
+
13
+ use strict;
14
+ use vars qw($VERSION);
15
+ use Image::ExifTool qw(:DataAccess :Utils);
16
+ use Image::ExifTool::Exif;
17
+
18
+ $VERSION = '1.00';
19
+
20
+ # Other info
21
+ %Image::ExifTool::Other::PFM = (
22
+ GROUPS => { 0 => 'File', 1 => 'File', 2 => 'Image' },
23
+ VARS => { NO_ID => 1 },
24
+ NOTES => q{
25
+ Tags extracted from Portable FloatMap images. See
26
+ L<http://www.pauldebevec.com/Research/HDR/PFM/> for the specification.
27
+ },
28
+ ColorSpace => { PrintConv => { PF => 'RGB', 'Pf' => 'Monochrome'} },
29
+ ImageWidth => { },
30
+ ImageHeight => { },
31
+ ByteOrder => { PrintConv => '$val > 0 ? "Big-endian" : "Little-endian"' },
32
+ );
33
+
34
+ #------------------------------------------------------------------------------
35
+ # Extract information from a Portable FloatMap image
36
+ # Inputs: 0) ExifTool object reference, 1) dirInfo reference
37
+ # Returns: 1 on success, 0 if this wasn't a valid PFM file
38
+ sub ProcessPFM2($$)
39
+ {
40
+ my ($et, $dirInfo) = @_;
41
+ my $raf = $$dirInfo{RAF};
42
+ my $buff;
43
+ return 0 unless $raf->Read($buff, 256) and $buff =~ /^(P[Ff])\x0a(\d+) (\d+)\x0a([-+0-9.]+)\x0a/;
44
+ $et->SetFileType('PFM', 'image/x-pfm');
45
+ my $tagTablePtr = GetTagTable('Image::ExifTool::Other::PFM');
46
+ $et->HandleTag($tagTablePtr, ColorSpace => $1);
47
+ $et->HandleTag($tagTablePtr, ImageWidth => $2);
48
+ $et->HandleTag($tagTablePtr, ImageHeight => $3);
49
+ $et->HandleTag($tagTablePtr, ByteOrder => $4);
50
+ # hack to set proper file description (extension is the same for Printer Font Metrics files)
51
+ $Image::ExifTool::static_vars{OverrideFileDescription}{PFM} = 'Portable FloatMap',
52
+ return 1;
53
+ }
54
+
55
+ 1; # end
56
+
57
+ __END__
58
+
59
+ =head1 NAME
60
+
61
+ Image::ExifTool::Other - Read meta information from other uncommon formats
62
+
63
+ =head1 SYNOPSIS
64
+
65
+ This module is used by Image::ExifTool
66
+
67
+ =head1 DESCRIPTION
68
+
69
+ This module contains routines required by Image::ExifTool to extract
70
+ information from Portable FloatMap (PFM) images.
71
+
72
+ =head1 AUTHOR
73
+
74
+ Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
75
+
76
+ This library is free software; you can redistribute it and/or modify it
77
+ under the same terms as Perl itself.
78
+
79
+ =head1 REFERENCES
80
+
81
+ =over 4
82
+
83
+ =item PFM L<http://www.pauldebevec.com/Research/HDR/PFM/>
84
+
85
+ =back
86
+
87
+ =head1 SEE ALSO
88
+
89
+ L<Image::ExifTool::TagNames/Other Tags>,
90
+ L<Image::ExifTool(3pm)|Image::ExifTool>
91
+
92
+ =cut
93
+
@@ -21,7 +21,7 @@ use vars qw($VERSION $AUTOLOAD $lastFetched);
21
21
  use Image::ExifTool qw(:DataAccess :Utils);
22
22
  require Exporter;
23
23
 
24
- $VERSION = '1.51';
24
+ $VERSION = '1.54';
25
25
 
26
26
  sub FetchObject($$$$);
27
27
  sub ExtractObject($$;$$);
@@ -280,7 +280,12 @@ my %supportedFilter = (
280
280
  ConvertToDict => 1,
281
281
  },
282
282
  Cs1 => {
283
- SubDirectory => { TagTable => 'Image::ExifTool::PDF::Cs1' },
283
+ SubDirectory => { TagTable => 'Image::ExifTool::PDF::DefaultRGB' },
284
+ ConvertToDict => 1, # (just in case)
285
+ },
286
+ CS0 => {
287
+ SubDirectory => { TagTable => 'Image::ExifTool::PDF::DefaultRGB' },
288
+ ConvertToDict => 1, # (just in case)
284
289
  },
285
290
  );
286
291
 
@@ -291,14 +296,7 @@ my %supportedFilter = (
291
296
  },
292
297
  );
293
298
 
294
- # tags in PDF Cs1 dictionary
295
- %Image::ExifTool::PDF::Cs1 = (
296
- _stream => {
297
- SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main' },
298
- },
299
- );
300
-
301
- # tags in PDF ICCBased dictionary
299
+ # tags in PDF ICCBased, Cs1 and CS0 dictionaries
302
300
  %Image::ExifTool::PDF::ICCBased = (
303
301
  _stream => {
304
302
  SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main' },
@@ -1989,16 +1987,17 @@ sub ProcessDict($$$$;$$)
1989
1987
  } else {
1990
1988
  $val = ReadPDFValue($val);
1991
1989
  }
1992
- # convert from UTF-16 (big endian) to UTF-8 or Latin if necessary
1993
- # unless this is binary data (hex-encoded strings would not have been converted)
1994
1990
  if (ref $val) {
1995
1991
  if (ref $val eq 'ARRAY') {
1992
+ delete $$et{LIST_TAGS}{$tagInfo} if $$tagInfo{List};
1996
1993
  my $v;
1997
1994
  foreach $v (@$val) {
1998
1995
  $et->FoundTag($tagInfo, $v);
1999
1996
  }
2000
1997
  }
2001
1998
  } elsif (defined $val) {
1999
+ # convert from UTF-16 (big endian) to UTF-8 or Latin if necessary
2000
+ # unless this is binary data (hex-encoded strings would not have been converted)
2002
2001
  my $format = $$tagInfo{Format} || $$tagInfo{Writable} || 'string';
2003
2002
  $val = ConvertPDFDate($val) if $format eq 'date';
2004
2003
  if (not $$tagInfo{Binary} and $val =~ /[\x18-\x1f\x80-\xff]/) {