exiftool_vendored 12.25.0 → 12.35.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/Changes +174 -7
- data/bin/MANIFEST +11 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +44 -43
- data/bin/arg_files/xmp2exif.args +2 -1
- data/bin/config_files/convert_regions.config +25 -14
- data/bin/config_files/example.config +1 -1
- data/bin/exiftool +118 -92
- data/bin/fmt_files/gpx.fmt +1 -1
- data/bin/fmt_files/gpx_wpt.fmt +1 -1
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +16 -3
- data/bin/lib/Image/ExifTool/CBOR.pm +331 -0
- data/bin/lib/Image/ExifTool/Canon.pm +52 -20
- data/bin/lib/Image/ExifTool/Charset.pm +2 -0
- data/bin/lib/Image/ExifTool/DPX.pm +13 -2
- data/bin/lib/Image/ExifTool/Exif.pm +107 -8
- data/bin/lib/Image/ExifTool/FLIR.pm +33 -8
- data/bin/lib/Image/ExifTool/FlashPix.pm +35 -10
- data/bin/lib/Image/ExifTool/FujiFilm.pm +1 -0
- data/bin/lib/Image/ExifTool/Geotag.pm +13 -2
- data/bin/lib/Image/ExifTool/GoPro.pm +16 -1
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +96 -4
- data/bin/lib/Image/ExifTool/ID3.pm +15 -3
- data/bin/lib/Image/ExifTool/JPEG.pm +68 -2
- data/bin/lib/Image/ExifTool/JSON.pm +7 -3
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +164 -36
- data/bin/lib/Image/ExifTool/LIF.pm +153 -0
- data/bin/lib/Image/ExifTool/Lang/nl.pm +60 -59
- data/bin/lib/Image/ExifTool/M2TS.pm +103 -7
- data/bin/lib/Image/ExifTool/MIE.pm +2 -1
- data/bin/lib/Image/ExifTool/MRC.pm +1 -1
- data/bin/lib/Image/ExifTool/MacOS.pm +2 -2
- data/bin/lib/Image/ExifTool/Nikon.pm +50 -6
- data/bin/lib/Image/ExifTool/NikonSettings.pm +10 -2
- data/bin/lib/Image/ExifTool/Olympus.pm +9 -2
- data/bin/lib/Image/ExifTool/Other.pm +93 -0
- data/bin/lib/Image/ExifTool/PDF.pm +11 -12
- data/bin/lib/Image/ExifTool/PNG.pm +7 -6
- data/bin/lib/Image/ExifTool/Panasonic.pm +14 -2
- data/bin/lib/Image/ExifTool/Pentax.pm +28 -5
- data/bin/lib/Image/ExifTool/Photoshop.pm +6 -0
- data/bin/lib/Image/ExifTool/QuickTime.pm +123 -25
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +203 -121
- data/bin/lib/Image/ExifTool/README +9 -2
- data/bin/lib/Image/ExifTool/RIFF.pm +7 -2
- data/bin/lib/Image/ExifTool/Samsung.pm +47 -10
- data/bin/lib/Image/ExifTool/Sony.pm +113 -42
- data/bin/lib/Image/ExifTool/TagLookup.pm +4599 -4451
- data/bin/lib/Image/ExifTool/TagNames.pod +276 -41
- data/bin/lib/Image/ExifTool/Torrent.pm +18 -11
- data/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
- data/bin/lib/Image/ExifTool/WritePDF.pl +1 -0
- data/bin/lib/Image/ExifTool/WritePNG.pl +2 -0
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +21 -4
- data/bin/lib/Image/ExifTool/WriteXMP.pl +1 -1
- data/bin/lib/Image/ExifTool/Writer.pl +47 -2
- data/bin/lib/Image/ExifTool/XMP.pm +32 -12
- data/bin/lib/Image/ExifTool/XMP2.pl +5 -2
- data/bin/lib/Image/ExifTool/XMPStruct.pl +3 -1
- data/bin/lib/Image/ExifTool/ZISRAW.pm +121 -2
- data/bin/lib/Image/ExifTool.pm +153 -52
- data/bin/lib/Image/ExifTool.pod +70 -60
- data/bin/perl-Image-ExifTool.spec +43 -42
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +6 -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 = (
|
@@ -113,6 +113,8 @@ my %noSyntax = (
|
|
113
113
|
0xff => 1, # program_stream_directory
|
114
114
|
);
|
115
115
|
|
116
|
+
my $knotsToKph = 1.852; # knots --> km/h
|
117
|
+
|
116
118
|
# information extracted from the MPEG-2 transport stream
|
117
119
|
%Image::ExifTool::M2TS::Main = (
|
118
120
|
GROUPS => { 2 => 'Video' },
|
@@ -327,7 +329,90 @@ sub ParsePID($$$$$)
|
|
327
329
|
my $tbl = GetTagTable('Image::ExifTool::QuickTime::Stream');
|
328
330
|
Image::ExifTool::QuickTime::ProcessFreeGPS($et, { DataPt => \$dat }, $tbl);
|
329
331
|
$more = 1;
|
332
|
+
} elsif ($$dataPt =~ /^A([NS])([EW])\0/s) {
|
333
|
+
# INNOVV TS video (same format is INNOVV MP4)
|
334
|
+
SetByteOrder('II');
|
335
|
+
my $tagTbl = GetTagTable('Image::ExifTool::QuickTime::Stream');
|
336
|
+
while ($$dataPt =~ /(A[NS][EW]\0.{28})/g) {
|
337
|
+
my $dat = $1;
|
338
|
+
my $lat = abs(GetFloat(\$dat, 4)); # (abs just to be safe)
|
339
|
+
my $lon = abs(GetFloat(\$dat, 8)); # (abs just to be safe)
|
340
|
+
my $spd = GetFloat(\$dat, 12) * $knotsToKph;
|
341
|
+
my $trk = GetFloat(\$dat, 16);
|
342
|
+
my @acc = unpack('x20V3', $dat);
|
343
|
+
map { $_ = $_ - 4294967296 if $_ >= 0x80000000 } @acc;
|
344
|
+
Image::ExifTool::QuickTime::ConvertLatLon($lat, $lon);
|
345
|
+
$$et{DOC_NUM} = ++$$et{DOC_COUNT};
|
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));
|
348
|
+
$et->HandleTag($tagTbl, GPSSpeed => $spd);
|
349
|
+
$et->HandleTag($tagTbl, GPSSpeedRef => 'K');
|
350
|
+
$et->HandleTag($tagTbl, GPSTrack => $trk);
|
351
|
+
$et->HandleTag($tagTbl, GPSTrackRef => 'T');
|
352
|
+
$et->HandleTag($tagTbl, Accelerometer => "@acc");
|
353
|
+
}
|
354
|
+
SetByteOrder('MM');
|
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;
|
330
414
|
}
|
415
|
+
delete $$et{DOC_NUM};
|
331
416
|
}
|
332
417
|
return $more;
|
333
418
|
}
|
@@ -379,14 +464,21 @@ sub ProcessM2TS($$)
|
|
379
464
|
);
|
380
465
|
my %didPID = ( 1 => 0, 2 => 0, 0x1fff => 0 );
|
381
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
|
+
);
|
382
472
|
my $pEnd = 0;
|
383
473
|
|
384
|
-
# scan entire file for GPS
|
385
|
-
# (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)
|
386
476
|
if (($et->Options('ExtractEmbedded') || 0) > 2) {
|
387
|
-
|
388
|
-
|
389
|
-
|
477
|
+
foreach (keys %gpsPID) {
|
478
|
+
$needPID{$_} = 1;
|
479
|
+
$pidType{$_} = -1;
|
480
|
+
$pidName{$_} ='unregistered dashcam GPS';
|
481
|
+
}
|
390
482
|
}
|
391
483
|
|
392
484
|
# parse packets from MPEG-2 Transport Stream
|
@@ -675,7 +767,11 @@ sub ProcessM2TS($$)
|
|
675
767
|
}
|
676
768
|
$data{$pid} = substr($buff, $pos, $pEnd-$pos);
|
677
769
|
} else {
|
678
|
-
|
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
|
+
}
|
679
775
|
# accumulate data for each elementary stream
|
680
776
|
$data{$pid} .= substr($buff, $pos, $pEnd-$pos);
|
681
777
|
}
|
@@ -14,7 +14,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
14
14
|
use Image::ExifTool::Exif;
|
15
15
|
use Image::ExifTool::GPS;
|
16
16
|
|
17
|
-
$VERSION = '1.
|
17
|
+
$VERSION = '1.49';
|
18
18
|
|
19
19
|
sub ProcessMIE($$);
|
20
20
|
sub ProcessMIEGroup($$$);
|
@@ -1023,6 +1023,7 @@ sub WriteMIEGroup($$$)
|
|
1023
1023
|
# we are writing the new tag now
|
1024
1024
|
my ($newVal, $writable, $oldVal, $newFormat, $compress);
|
1025
1025
|
my $newTag = shift @editTags;
|
1026
|
+
length($newTag) > 255 and $et->Warn('Tag name too long'), next; # (just to be safe)
|
1026
1027
|
my $newInfo = $$editDirs{$newTag};
|
1027
1028
|
if ($newInfo) {
|
1028
1029
|
# create the new subdirectory or rewrite existing non-MIE directory
|
@@ -285,7 +285,7 @@ sub ProcessMRC($$)
|
|
285
285
|
$et->ProcessDirectory(\%dirInfo, $tagTablePtr);
|
286
286
|
last if ++$i >= $$et{ImageDepth};
|
287
287
|
unless ($$et{OPTIONS}{ExtractEmbedded}) {
|
288
|
-
$et->Warn('Use the ExtractEmbedded option to read metadata for all frames',
|
288
|
+
$et->Warn('Use the ExtractEmbedded option to read metadata for all frames',3);
|
289
289
|
last;
|
290
290
|
}
|
291
291
|
$$et{DOC_NUM} = ++$$et{DOC_COUNT};
|
@@ -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.01';
|
66
66
|
|
67
67
|
sub LensIDConv($$$);
|
68
68
|
sub ProcessNikonAVI($$$);
|
@@ -272,6 +272,7 @@ sub GetAFPointGrid($$;$);
|
|
272
272
|
'9F 58 44 44 14 14 A1 06' => 'AF-S DX Nikkor 35mm f/1.8G', #27
|
273
273
|
'A0 54 50 50 0C 0C A2 06' => 'AF-S Nikkor 50mm f/1.4G',
|
274
274
|
'A1 40 18 37 2C 34 A3 06' => 'AF-S DX Nikkor 10-24mm f/3.5-4.5G ED',
|
275
|
+
'A1 40 2D 53 2C 3C CB 86' => 'AF-P DX Nikkor 18-55mm f/3.5-5.6G', #30
|
275
276
|
'A2 48 5C 80 24 24 A4 0E' => 'AF-S Nikkor 70-200mm f/2.8G ED VR II',
|
276
277
|
'A3 3C 29 44 30 30 A5 0E' => 'AF-S Nikkor 16-35mm f/4G ED VR',
|
277
278
|
'A4 54 37 37 0C 0C A6 06' => 'AF-S Nikkor 24mm f/1.4G ED',
|
@@ -403,6 +404,7 @@ sub GetAFPointGrid($$;$);
|
|
403
404
|
'48 38 1F 37 34 3C 4B 06' => 'Sigma 12-24mm F4.5-5.6 EX DG Aspherical HSM',
|
404
405
|
'F0 38 1F 37 34 3C 4B 06' => 'Sigma 12-24mm F4.5-5.6 EX DG Aspherical HSM',
|
405
406
|
'96 38 1F 37 34 3C 4B 06' => 'Sigma 12-24mm F4.5-5.6 II DG HSM', #Jurgen Sahlberg
|
407
|
+
'CA 3C 1F 37 30 30 4B 46' => 'Sigma 12-24mm F4 DG HSM | A', #github issue#101
|
406
408
|
'C1 48 24 37 24 24 4B 46' => 'Sigma 14-24mm F2.8 DG HSM | A', #30
|
407
409
|
'26 40 27 3F 2C 34 1C 02' => 'Sigma 15-30mm F3.5-4.5 EX DG Aspherical DF',
|
408
410
|
'48 48 2B 44 24 30 4B 06' => 'Sigma 17-35mm F2.8-4 EX DG Aspherical HSM',
|
@@ -495,6 +497,7 @@ sub GetAFPointGrid($$;$);
|
|
495
497
|
'02 46 5C 82 25 25 02 00' => 'Sigma 70-210mm F2.8 APO', #JD
|
496
498
|
'02 40 5C 82 2C 35 02 00' => 'Sigma APO 70-210mm F3.5-4.5',
|
497
499
|
'26 3C 5C 82 30 3C 1C 02' => 'Sigma 70-210mm F4-5.6 UC-II',
|
500
|
+
'02 3B 5C 82 30 3C 02 00' => 'Sigma Zoom-K 70-210mm F4-5.6', #30
|
498
501
|
'26 3C 5C 8E 30 3C 1C 02' => 'Sigma 70-300mm F4-5.6 DG Macro',
|
499
502
|
'56 3C 5C 8E 30 3C 1C 02' => 'Sigma 70-300mm F4-5.6 APO Macro Super II',
|
500
503
|
'E0 3C 5C 8E 30 3C 4B 06' => 'Sigma 70-300mm F4-5.6 APO DG Macro HSM', #22
|
@@ -554,6 +557,7 @@ sub GetAFPointGrid($$;$);
|
|
554
557
|
'F3 54 2B 50 24 24 84 0E' => 'Tamron SP AF 17-50mm f/2.8 XR Di II VC LD Aspherical (IF) (B005)',
|
555
558
|
'00 3F 2D 80 2B 40 00 06' => 'Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical (IF) (A14)',
|
556
559
|
'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)',
|
560
|
+
'EC 3E 3C 8E 2C 40 DF 0E' => 'Tamron 28-300mm f/3.5-6.3 Di VC PZD A010', #30
|
557
561
|
'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
|
558
562
|
'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)
|
559
563
|
'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)
|
@@ -595,6 +599,7 @@ sub GetAFPointGrid($$;$);
|
|
595
599
|
'00 48 5C 8E 30 3C 00 06' => 'Tamron AF 70-300mm f/4-5.6 Di LD Macro 1:2 (A17NII)', #JD
|
596
600
|
'F1 47 5C 8E 30 3C DF 0E' => 'Tamron SP 70-300mm f/4-5.6 Di VC USD (A005)',
|
597
601
|
'CF 47 5C 8E 31 3D DF 0E' => 'Tamron SP 70-300mm f/4-5.6 Di VC USD (A030)', #forum9773
|
602
|
+
'CC 44 68 98 34 41 DF 0E' => 'Tamron 100-400mm f/4.5-6.3 Di VC USD', #30
|
598
603
|
'EB 40 76 A6 38 40 DF 0E' => 'Tamron SP AF 150-600mm f/5-6.3 VC USD (A011)',
|
599
604
|
'E3 40 76 A6 38 40 DF 4E' => 'Tamron SP 150-600mm f/5-6.3 Di VC USD G2', #30
|
600
605
|
'20 3C 80 98 3D 3D 1E 02' => 'Tamron AF 200-400mm f/5.6 LD IF (75D)',
|
@@ -612,6 +617,7 @@ sub GetAFPointGrid($$;$);
|
|
612
617
|
'7A 48 1C 29 24 24 7E 06' => 'Tokina AT-X 116 PRO DX II (AF 11-16mm f/2.8)',
|
613
618
|
'80 48 1C 29 24 24 7A 06' => 'Tokina atx-i 11-16mm F2.8 CF', #exiv2 issue 1078
|
614
619
|
'7A 48 1C 30 24 24 7E 06' => 'Tokina AT-X 11-20 F2.8 PRO DX (AF 11-20mm f/2.8)',
|
620
|
+
'8B 48 1C 30 24 24 85 06' => 'Tokina AT-X 11-20 F2.8 PRO DX (AF 11-20mm f/2.8)', #forum12687
|
615
621
|
'00 3C 1F 37 30 30 00 06' => 'Tokina AT-X 124 AF PRO DX (AF 12-24mm f/4)',
|
616
622
|
'7A 3C 1F 37 30 30 7E 06.2' => 'Tokina AT-X 124 AF PRO DX II (AF 12-24mm f/4)',
|
617
623
|
'7A 3C 1F 3C 30 30 7E 06' => 'Tokina AT-X 12-28 PRO DX (AF 12-28mm f/4)',
|
@@ -718,6 +724,9 @@ sub GetAFPointGrid($$;$);
|
|
718
724
|
'00 40 11 11 2C 2C 00 00' => 'Samyang 8mm f/3.5 Fish-Eye',
|
719
725
|
'00 58 64 64 20 20 00 00' => 'Soligor C/D Macro MC 90mm f/2.5',
|
720
726
|
'4A 58 30 30 14 0C 4D 02' => 'Rokinon 20mm f/1.8 ED AS UMC', #30
|
727
|
+
#
|
728
|
+
'A0 56 44 44 14 14 A2 06' => 'Sony FE 35mm F1.8', #IB (Techart adapter)
|
729
|
+
'A0 37 5C 8E 34 3C A2 06' => 'Sony FE 70-300mm F4.5-5.6 G OSS', #IB (Techart adapter)
|
721
730
|
);
|
722
731
|
|
723
732
|
# text encoding used in LocationInfo (ref PH)
|
@@ -4720,6 +4729,9 @@ my %nikonFocalConversions = (
|
|
4720
4729
|
21 => 'Nikkor Z 50mm f/1.2 S', #IB
|
4721
4730
|
22 => 'Nikkor Z 24-50mm f/4-6.3', #IB
|
4722
4731
|
23 => 'Nikkor Z 14-24mm f/2.8 S', #IB
|
4732
|
+
24 => 'Nikkor Z MC 105mm f/2.8 VR S', #IB
|
4733
|
+
27 => 'Nikkor Z MC 50mm f/2.8', #IB
|
4734
|
+
29 => 'Nikkor Z 28mm f/2.8', #IB
|
4723
4735
|
},
|
4724
4736
|
},
|
4725
4737
|
0x36 => {
|
@@ -7342,7 +7354,7 @@ my %nikonFocalConversions = (
|
|
7342
7354
|
WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted,
|
7343
7355
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
7344
7356
|
VARS => { ID_LABEL => 'Index' },
|
7345
|
-
DATAMEMBER => [ 0x04, 0x0e, 0x18, 0x98, 0xce31 ],
|
7357
|
+
DATAMEMBER => [ 0x04, 0x0e, 0x18, 0x38, 0x98, 0x7eff, 0xce31 ],
|
7346
7358
|
WRITABLE => 1,
|
7347
7359
|
FIRST_ENTRY => 0,
|
7348
7360
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
@@ -7380,6 +7392,14 @@ my %nikonFocalConversions = (
|
|
7380
7392
|
Writable => 0,
|
7381
7393
|
Hidden => 1,
|
7382
7394
|
},
|
7395
|
+
0x38 => { #28
|
7396
|
+
Name => 'Offset5',
|
7397
|
+
DataMember => 'Offset5',
|
7398
|
+
Format => 'int32u',
|
7399
|
+
Writable => 0,
|
7400
|
+
Hidden => 1,
|
7401
|
+
RawConv => '$$self{Offset5} = $val || 0x10000000; undef', # (ignore if 0)
|
7402
|
+
},
|
7383
7403
|
0x98 => {
|
7384
7404
|
Name => 'OrientationOffset',
|
7385
7405
|
DataMember => 'OrientationOffset',
|
@@ -7389,9 +7409,33 @@ my %nikonFocalConversions = (
|
|
7389
7409
|
RawConv => '$$self{OrientationOffset} = $val || 0x10000000; undef', # (ignore if 0)
|
7390
7410
|
},
|
7391
7411
|
|
7412
|
+
### 0x7f00 - Offset5 info start (Z7_2 firmware 1.30)
|
7413
|
+
0x7eff => { #28
|
7414
|
+
Name => 'Hook1',
|
7415
|
+
Hidden => 1,
|
7416
|
+
RawConv => 'undef',
|
7417
|
+
# account for variable location of Offset5 data
|
7418
|
+
Hook => '$varSize = $$self{Offset5} - 0x7f00',
|
7419
|
+
},
|
7420
|
+
0x7fa0 => { #28
|
7421
|
+
Name => 'PortraitImpressionBalance', #will be 0 for firmware 1.21 and earlier; firmware 1.30 onward: will be set by Photo Shooting Menu entry Portrait Impression Balance
|
7422
|
+
#offset5+160; 128 is neutral; >128 increases Yellow; <128 increases Magenta; increments of 4 result from 1 full unit adjustment on the camera
|
7423
|
+
#offset5+161 129 is neutral; >129 increases Brightness; <129 decreases Brightness
|
7424
|
+
#with firmware 1.30 when 'Off' is selected in the Shooting menu, offsets 160 & 161 will contain 255. Selecting Mode 1,2, or 3 will populate offsets 160 & 161 with values in the range [116,141]
|
7425
|
+
Format => 'int8u[2]',
|
7426
|
+
Condition => '$$self{FirmwareVersion} ge "01.30"',
|
7427
|
+
PrintConv => q{
|
7428
|
+
return 'Off' if $val eq '0 0' or $val eq '255 255';
|
7429
|
+
my @v = split ' ', $val;
|
7430
|
+
my $brightness = $v[1]==128 ? 'Brightness: Neutral' : sprintf('Brightness: %+.1f',($v[1]-128)/4);
|
7431
|
+
my $color = $v[0]==128 ? 'Color: Neutral' : sprintf('%s: %.1f', $v[0]>128 ? 'Yellow' : 'Magenta', abs($v[0]-128)/4);
|
7432
|
+
# will return something like: 'Magenta: 1.0 Brightness: Neutral'
|
7433
|
+
return "$color $brightness"
|
7434
|
+
},
|
7435
|
+
},
|
7392
7436
|
### 0xce32 - OrientationInfo start (Z7_2 firmware 1.00)
|
7393
7437
|
0xce31 => {
|
7394
|
-
Name => '
|
7438
|
+
Name => 'Hook2',
|
7395
7439
|
Hidden => 1,
|
7396
7440
|
RawConv => 'undef',
|
7397
7441
|
# account for variable location of OrientationInfo data
|
@@ -8492,8 +8536,8 @@ my %nikonFocalConversions = (
|
|
8492
8536
|
# 0x02 - undef[148]
|
8493
8537
|
# 0x03 - undef[284]
|
8494
8538
|
# 0x04 - undef[148,212]
|
8495
|
-
# 0x05 - undef[84]
|
8496
|
-
# 0x06 - undef[116]
|
8539
|
+
# 0x05 - undef[84] (barrel distortion params at offsets 0x14,0x1c,0x24, ref 28)
|
8540
|
+
# 0x06 - undef[116] (vignette correction params at offsets 0x24,0x34,0x44, ref 28)
|
8497
8541
|
# 0x07 - undef[104]
|
8498
8542
|
# 0x08 - undef[24]
|
8499
8543
|
# 0x09 - undef[36]
|
@@ -9468,7 +9512,7 @@ sub GetAFPointGrid($$;$)
|
|
9468
9512
|
return undef unless $val =~ /^([A-J])(\d+)$/i;
|
9469
9513
|
return (ord(uc($1))-65) * $ncol + $2 - 1;
|
9470
9514
|
} else {
|
9471
|
-
my $row = int(($val + 0.5) / $ncol);
|
9515
|
+
my $row = int(($val + 0.5) / $ncol) & 0xff;
|
9472
9516
|
my $col = $val - $ncol * $row + 1;
|
9473
9517
|
return chr(65+$row) . $col;
|
9474
9518
|
}
|
@@ -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,8 @@ 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
|
117
|
+
'0 36 10' => 'Olympus M.Zuiko Digital ED 8-25mm F4 Pro', #IB
|
116
118
|
# Sigma lenses
|
117
119
|
'1 01 00' => 'Sigma 18-50mm F3.5-5.6 DC', #8
|
118
120
|
'1 01 10' => 'Sigma 30mm F2.8 EX DN', #NJ
|
@@ -138,7 +140,6 @@ my %olympusLensTypes = (
|
|
138
140
|
'1 15 00' => 'Sigma 10-20mm F4.0-5.6 EX DC HSM', #11
|
139
141
|
'1 16 00' => 'Sigma APO 70-200mm F2.8 II EX DG Macro HSM', #11
|
140
142
|
'1 17 00' => 'Sigma 50mm F1.4 EX DG HSM', #11
|
141
|
-
'1 18 60' => 'Test',
|
142
143
|
# Panasonic/Leica lenses
|
143
144
|
'2 01 00' => 'Leica D Vario Elmarit 14-50mm F2.8-3.5 Asph.', #11
|
144
145
|
'2 01 10' => 'Lumix G Vario 14-45mm F3.5-5.6 Asph. Mega OIS', #16
|
@@ -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)
|