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.
- package/bin/exiftool_files/Changes +108 -5
- package/bin/exiftool_files/README +2 -2
- package/bin/exiftool_files/arg_files/xmp2exif.args +2 -1
- package/bin/exiftool_files/config_files/example.config +1 -1
- package/bin/exiftool_files/exiftool.pl +40 -26
- package/bin/exiftool_files/fmt_files/gpx.fmt +1 -1
- package/bin/exiftool_files/fmt_files/gpx_wpt.fmt +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +16 -3
- package/bin/exiftool_files/lib/Image/ExifTool/CBOR.pm +331 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +35 -5
- package/bin/exiftool_files/lib/Image/ExifTool/Charset.pm +2 -0
- package/bin/exiftool_files/lib/Image/ExifTool/DPX.pm +13 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +98 -4
- package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +1 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +13 -2
- package/bin/exiftool_files/lib/Image/ExifTool/GoPro.pm +16 -1
- package/bin/exiftool_files/lib/Image/ExifTool/ICC_Profile.pm +96 -4
- package/bin/exiftool_files/lib/Image/ExifTool/ID3.pm +15 -3
- package/bin/exiftool_files/lib/Image/ExifTool/JSON.pm +7 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Jpeg2000.pm +60 -26
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/nl.pm +60 -59
- package/bin/exiftool_files/lib/Image/ExifTool/M2TS.pm +81 -14
- package/bin/exiftool_files/lib/Image/ExifTool/MacOS.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +12 -3
- package/bin/exiftool_files/lib/Image/ExifTool/NikonSettings.pm +10 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +8 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Other.pm +93 -0
- package/bin/exiftool_files/lib/Image/ExifTool/PDF.pm +11 -12
- package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +7 -6
- package/bin/exiftool_files/lib/Image/ExifTool/Panasonic.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +2 -1
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +67 -9
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +133 -119
- package/bin/exiftool_files/lib/Image/ExifTool/README +9 -2
- package/bin/exiftool_files/lib/Image/ExifTool/RIFF.pm +6 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Samsung.pm +47 -10
- package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +80 -32
- package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +139 -4
- package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +224 -30
- package/bin/exiftool_files/lib/Image/ExifTool/WritePDF.pl +1 -0
- package/bin/exiftool_files/lib/Image/ExifTool/WritePNG.pl +2 -0
- package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +17 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +43 -0
- package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +21 -8
- package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +4 -1
- package/bin/exiftool_files/lib/Image/ExifTool/XMPStruct.pl +3 -1
- package/bin/exiftool_files/lib/Image/ExifTool.pm +8892 -8839
- package/bin/exiftool_files/lib/Image/ExifTool.pod +24 -15
- 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.
|
|
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 => '
|
|
1505
|
+
Description => 'GPS hoogte - referentie',
|
|
1506
1506
|
PrintConv => {
|
|
1507
|
-
'Above Sea Level' => '
|
|
1508
|
-
'Below Sea Level' => '
|
|
1507
|
+
'Above Sea Level' => 'Boven zeeniveau',
|
|
1508
|
+
'Below Sea Level' => 'Onder zeeniveau',
|
|
1509
1509
|
},
|
|
1510
1510
|
},
|
|
1511
|
-
'GPSAreaInformation' => '
|
|
1512
|
-
'GPSDOP' => '
|
|
1513
|
-
'GPSDateStamp' => 'GPS datum',
|
|
1514
|
-
'GPSDateTime' => 'GPS tijd
|
|
1515
|
-
'GPSDestBearing' => '
|
|
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 => '
|
|
1517
|
+
Description => 'GPS peiling van bestemming - referentie',
|
|
1518
1518
|
PrintConv => {
|
|
1519
|
-
'Magnetic North' => 'Magnetische
|
|
1520
|
-
'True North' => 'Geografische
|
|
1519
|
+
'Magnetic North' => 'Magnetische noorden',
|
|
1520
|
+
'True North' => 'Geografische noorden',
|
|
1521
1521
|
},
|
|
1522
1522
|
},
|
|
1523
|
-
'GPSDestDistance' => '
|
|
1523
|
+
'GPSDestDistance' => 'GPS afstand tot bestemming',
|
|
1524
1524
|
'GPSDestDistanceRef' => {
|
|
1525
|
-
Description => '
|
|
1525
|
+
Description => 'GPS afstand tot bestemming - referentie',
|
|
1526
1526
|
PrintConv => {
|
|
1527
|
-
'Miles' => '
|
|
1528
|
-
'Nautical Miles' => '
|
|
1527
|
+
'Miles' => 'Engelse mijlen',
|
|
1528
|
+
'Nautical Miles' => 'Zeemijlen',
|
|
1529
1529
|
},
|
|
1530
1530
|
},
|
|
1531
|
-
'GPSDestLatitude' => '
|
|
1531
|
+
'GPSDestLatitude' => 'GPS breedtegraad van bestemming',
|
|
1532
1532
|
'GPSDestLatitudeRef' => {
|
|
1533
|
-
Description => '
|
|
1533
|
+
Description => 'GPS breedtegraad van bestemming - referentie',
|
|
1534
1534
|
PrintConv => {
|
|
1535
|
-
'North' => '
|
|
1536
|
-
'South' => '
|
|
1535
|
+
'North' => 'Noorderbreedte',
|
|
1536
|
+
'South' => 'Zuiderbreedte',
|
|
1537
1537
|
},
|
|
1538
1538
|
},
|
|
1539
|
-
'GPSDestLongitude' => '
|
|
1539
|
+
'GPSDestLongitude' => 'GPS lengtegraad van bestemming',
|
|
1540
1540
|
'GPSDestLongitudeRef' => {
|
|
1541
|
-
Description => '
|
|
1541
|
+
Description => 'GPS lengtegraad van bestemming - referentie',
|
|
1542
1542
|
PrintConv => {
|
|
1543
|
-
'East' => '
|
|
1544
|
-
'West' => '
|
|
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' => '
|
|
1551
|
-
'No Correction' => '
|
|
1550
|
+
'Differential Corrected' => 'Met differentiaal correctie',
|
|
1551
|
+
'No Correction' => 'Zonder differentiaal correctie',
|
|
1552
1552
|
},
|
|
1553
1553
|
},
|
|
1554
|
-
'GPSImgDirection' => '
|
|
1554
|
+
'GPSImgDirection' => 'GPS peiling van de afbeelding',
|
|
1555
1555
|
'GPSImgDirectionRef' => {
|
|
1556
|
-
Description => '
|
|
1556
|
+
Description => 'GPS peiling van de afbeelding - referentie',
|
|
1557
1557
|
PrintConv => {
|
|
1558
|
-
'Magnetic North' => 'Magnetische
|
|
1559
|
-
'True North' => 'Geografische
|
|
1558
|
+
'Magnetic North' => 'Magnetische noorden',
|
|
1559
|
+
'True North' => 'Geografische noorden',
|
|
1560
1560
|
},
|
|
1561
1561
|
},
|
|
1562
|
-
'GPSInfo' => 'GPS Info
|
|
1563
|
-
'GPSLatitude' => '
|
|
1562
|
+
'GPSInfo' => 'GPS Info',
|
|
1563
|
+
'GPSLatitude' => 'GPS breedtegraad',
|
|
1564
1564
|
'GPSLatitudeRef' => {
|
|
1565
|
-
Description => '
|
|
1565
|
+
Description => 'GPS breedtegraad - referentie',
|
|
1566
1566
|
PrintConv => {
|
|
1567
|
-
'North' => '
|
|
1568
|
-
'South' => '
|
|
1567
|
+
'North' => 'Noorderbreedte',
|
|
1568
|
+
'South' => 'Zuiderbreedte',
|
|
1569
1569
|
},
|
|
1570
1570
|
},
|
|
1571
|
-
'GPSLongitude' => '
|
|
1571
|
+
'GPSLongitude' => 'GPS lengtegraad',
|
|
1572
1572
|
'GPSLongitudeRef' => {
|
|
1573
|
-
Description => '
|
|
1573
|
+
Description => 'GPS lengtegraad - referentie',
|
|
1574
1574
|
PrintConv => {
|
|
1575
|
-
'East' => '
|
|
1576
|
-
'West' => '
|
|
1575
|
+
'East' => 'Oosterlengte',
|
|
1576
|
+
'West' => 'Westerlengte',
|
|
1577
1577
|
},
|
|
1578
1578
|
},
|
|
1579
|
-
'GPSMapDatum' => '
|
|
1579
|
+
'GPSMapDatum' => 'GPS geodetisch datum',
|
|
1580
1580
|
'GPSMeasureMode' => {
|
|
1581
|
-
Description => 'GPS
|
|
1581
|
+
Description => 'GPS meetmethode',
|
|
1582
1582
|
PrintConv => {
|
|
1583
|
-
'2-D' => '
|
|
1584
|
-
'2-Dimensional' => '
|
|
1585
|
-
'2-Dimensional Measurement' => '
|
|
1586
|
-
'3-D' => '
|
|
1587
|
-
'3-Dimensional' => '
|
|
1588
|
-
'3-Dimensional Measurement' => '
|
|
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
|
-
'
|
|
1592
|
-
'
|
|
1593
|
-
'
|
|
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 => '
|
|
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' => '
|
|
1606
|
-
'Measurement Void' => '
|
|
1606
|
+
'Measurement Active' => 'Actuele meting beschikbaar',
|
|
1607
|
+
'Measurement Void' => 'Actuele meting niet beschikbaar',
|
|
1607
1608
|
},
|
|
1608
1609
|
},
|
|
1609
|
-
'GPSTimeStamp' => 'GPS tijd
|
|
1610
|
-
'GPSTrack' => '
|
|
1610
|
+
'GPSTimeStamp' => 'GPS UTC tijd',
|
|
1611
|
+
'GPSTrack' => 'GPS ontvanger bewegingsrichting',
|
|
1611
1612
|
'GPSTrackRef' => {
|
|
1612
|
-
Description => '
|
|
1613
|
+
Description => 'GPS ontvanger bewegingsrichting - referentie',
|
|
1613
1614
|
PrintConv => {
|
|
1614
|
-
'Magnetic North' => 'Magnetische
|
|
1615
|
-
'True North' => '
|
|
1615
|
+
'Magnetic North' => 'Magnetische noorden',
|
|
1616
|
+
'True North' => 'Geografische noorden',
|
|
1616
1617
|
},
|
|
1617
1618
|
},
|
|
1618
|
-
'GPSVersionID' => 'GPS
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
349
|
-
$et->HandleTag($tagTbl,
|
|
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
|
|
414
|
-
# (some dashcams write
|
|
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
|
-
|
|
417
|
-
|
|
418
|
-
|
|
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
|
-
|
|
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>
|
|
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>
|
|
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 = '
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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::
|
|
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
|
|
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]/) {
|