exiftool_vendored 12.52.0 → 12.55.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 +42 -1
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +3 -3
- data/bin/exiftool +12 -10
- data/bin/fmt_files/kml_track.fmt +3 -3
- data/bin/lib/File/RandomAccess.pm +1 -1
- data/bin/lib/File/RandomAccess.pod +2 -2
- data/bin/lib/Image/ExifTool/AES.pm +1 -1
- data/bin/lib/Image/ExifTool/AFCP.pm +1 -1
- data/bin/lib/Image/ExifTool/AIFF.pm +1 -1
- data/bin/lib/Image/ExifTool/APE.pm +1 -1
- data/bin/lib/Image/ExifTool/APP12.pm +1 -1
- data/bin/lib/Image/ExifTool/ASF.pm +1 -1
- data/bin/lib/Image/ExifTool/Apple.pm +197 -27
- data/bin/lib/Image/ExifTool/Audible.pm +1 -1
- data/bin/lib/Image/ExifTool/BMP.pm +1 -1
- data/bin/lib/Image/ExifTool/BPG.pm +1 -1
- data/bin/lib/Image/ExifTool/BZZ.pm +1 -1
- data/bin/lib/Image/ExifTool/BigTIFF.pm +1 -1
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +4 -4
- data/bin/lib/Image/ExifTool/CBOR.pm +1 -1
- data/bin/lib/Image/ExifTool/Canon.pm +14 -2
- data/bin/lib/Image/ExifTool/CanonCustom.pm +1 -1
- data/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/CanonVRD.pm +9 -9
- data/bin/lib/Image/ExifTool/CaptureOne.pm +1 -1
- data/bin/lib/Image/ExifTool/Casio.pm +1 -1
- data/bin/lib/Image/ExifTool/Charset.pm +1 -1
- data/bin/lib/Image/ExifTool/DICOM.pm +1 -1
- data/bin/lib/Image/ExifTool/DJI.pm +1 -1
- data/bin/lib/Image/ExifTool/DNG.pm +1 -1
- data/bin/lib/Image/ExifTool/DPX.pm +1 -1
- data/bin/lib/Image/ExifTool/DV.pm +1 -1
- data/bin/lib/Image/ExifTool/DarwinCore.pm +1 -1
- data/bin/lib/Image/ExifTool/DjVu.pm +1 -1
- data/bin/lib/Image/ExifTool/EXE.pm +1 -1
- data/bin/lib/Image/ExifTool/Exif.pm +5 -16
- data/bin/lib/Image/ExifTool/FITS.pm +1 -1
- data/bin/lib/Image/ExifTool/FLAC.pm +1 -1
- data/bin/lib/Image/ExifTool/FLIF.pm +1 -1
- data/bin/lib/Image/ExifTool/FLIR.pm +1 -1
- data/bin/lib/Image/ExifTool/Fixup.pm +1 -1
- data/bin/lib/Image/ExifTool/Flash.pm +1 -1
- data/bin/lib/Image/ExifTool/FlashPix.pm +1 -1
- data/bin/lib/Image/ExifTool/Font.pm +1 -1
- data/bin/lib/Image/ExifTool/FotoStation.pm +1 -1
- data/bin/lib/Image/ExifTool/FujiFilm.pm +21 -13
- data/bin/lib/Image/ExifTool/GE.pm +1 -1
- data/bin/lib/Image/ExifTool/GIF.pm +1 -1
- data/bin/lib/Image/ExifTool/GIMP.pm +1 -1
- data/bin/lib/Image/ExifTool/GPS.pm +1 -1
- data/bin/lib/Image/ExifTool/GeoTiff.pm +1 -1
- data/bin/lib/Image/ExifTool/Geotag.pm +14 -5
- data/bin/lib/Image/ExifTool/GoPro.pm +1 -1
- data/bin/lib/Image/ExifTool/H264.pm +1 -1
- data/bin/lib/Image/ExifTool/HP.pm +1 -1
- data/bin/lib/Image/ExifTool/HTML.pm +1 -1
- data/bin/lib/Image/ExifTool/HtmlDump.pm +1 -1
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +1 -1
- data/bin/lib/Image/ExifTool/ICO.pm +1 -1
- data/bin/lib/Image/ExifTool/ID3.pm +1 -1
- data/bin/lib/Image/ExifTool/IPTC.pm +1 -1
- data/bin/lib/Image/ExifTool/ISO.pm +1 -1
- data/bin/lib/Image/ExifTool/ITC.pm +1 -1
- data/bin/lib/Image/ExifTool/Import.pm +1 -1
- data/bin/lib/Image/ExifTool/InDesign.pm +1 -1
- data/bin/lib/Image/ExifTool/JPEG.pm +1 -1
- data/bin/lib/Image/ExifTool/JPEGDigest.pm +1 -1
- data/bin/lib/Image/ExifTool/JSON.pm +1 -1
- data/bin/lib/Image/ExifTool/JVC.pm +1 -1
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +11 -5
- data/bin/lib/Image/ExifTool/Kodak.pm +1 -1
- data/bin/lib/Image/ExifTool/KyoceraRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/LIF.pm +1 -1
- data/bin/lib/Image/ExifTool/LNK.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/cs.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/de.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/en_ca.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/en_gb.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/fi.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/fr.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/it.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/ja.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/ko.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/nl.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/pl.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/ru.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/sk.pm +1806 -1927
- data/bin/lib/Image/ExifTool/Lang/sv.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/tr.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/zh_cn.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/zh_tw.pm +1 -1
- data/bin/lib/Image/ExifTool/Leaf.pm +1 -1
- data/bin/lib/Image/ExifTool/Lytro.pm +1 -1
- data/bin/lib/Image/ExifTool/M2TS.pm +1 -1
- data/bin/lib/Image/ExifTool/MIE.pm +1 -1
- data/bin/lib/Image/ExifTool/MIEUnits.pod +1 -1
- data/bin/lib/Image/ExifTool/MIFF.pm +1 -1
- data/bin/lib/Image/ExifTool/MISB.pm +1 -1
- data/bin/lib/Image/ExifTool/MNG.pm +1 -1
- data/bin/lib/Image/ExifTool/MOI.pm +1 -1
- data/bin/lib/Image/ExifTool/MPC.pm +1 -1
- data/bin/lib/Image/ExifTool/MPEG.pm +1 -1
- data/bin/lib/Image/ExifTool/MPF.pm +1 -1
- data/bin/lib/Image/ExifTool/MRC.pm +1 -1
- data/bin/lib/Image/ExifTool/MWG.pm +1 -1
- data/bin/lib/Image/ExifTool/MXF.pm +1 -1
- data/bin/lib/Image/ExifTool/MacOS.pm +1 -1
- data/bin/lib/Image/ExifTool/MakerNotes.pm +1 -1
- data/bin/lib/Image/ExifTool/Matroska.pm +5 -5
- data/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
- data/bin/lib/Image/ExifTool/Minolta.pm +1 -1
- data/bin/lib/Image/ExifTool/MinoltaRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/Motorola.pm +1 -1
- data/bin/lib/Image/ExifTool/Nikon.pm +219 -10
- data/bin/lib/Image/ExifTool/NikonCapture.pm +1 -1
- data/bin/lib/Image/ExifTool/NikonCustom.pm +1 -1
- data/bin/lib/Image/ExifTool/NikonSettings.pm +1 -1
- data/bin/lib/Image/ExifTool/Nintendo.pm +1 -1
- data/bin/lib/Image/ExifTool/OOXML.pm +1 -1
- data/bin/lib/Image/ExifTool/Ogg.pm +1 -1
- data/bin/lib/Image/ExifTool/Olympus.pm +1 -1
- data/bin/lib/Image/ExifTool/OpenEXR.pm +1 -1
- data/bin/lib/Image/ExifTool/Opus.pm +1 -1
- data/bin/lib/Image/ExifTool/Other.pm +1 -1
- data/bin/lib/Image/ExifTool/PCX.pm +1 -1
- data/bin/lib/Image/ExifTool/PDF.pm +1 -1
- data/bin/lib/Image/ExifTool/PGF.pm +1 -1
- data/bin/lib/Image/ExifTool/PICT.pm +1 -1
- data/bin/lib/Image/ExifTool/PLIST.pm +12 -7
- data/bin/lib/Image/ExifTool/PLUS.pm +1 -1
- data/bin/lib/Image/ExifTool/PNG.pm +1 -1
- data/bin/lib/Image/ExifTool/PPM.pm +1 -1
- data/bin/lib/Image/ExifTool/PSP.pm +1 -1
- data/bin/lib/Image/ExifTool/Palm.pm +1 -1
- data/bin/lib/Image/ExifTool/Panasonic.pm +1 -1
- data/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/Parrot.pm +1 -1
- data/bin/lib/Image/ExifTool/Pentax.pm +1 -1
- data/bin/lib/Image/ExifTool/PhaseOne.pm +1 -1
- data/bin/lib/Image/ExifTool/PhotoCD.pm +1 -1
- data/bin/lib/Image/ExifTool/PhotoMechanic.pm +1 -1
- data/bin/lib/Image/ExifTool/Photoshop.pm +1 -1
- data/bin/lib/Image/ExifTool/PostScript.pm +1 -1
- data/bin/lib/Image/ExifTool/PrintIM.pm +1 -1
- data/bin/lib/Image/ExifTool/Qualcomm.pm +1 -1
- data/bin/lib/Image/ExifTool/QuickTime.pm +23 -7
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +122 -28
- data/bin/lib/Image/ExifTool/README +3 -0
- data/bin/lib/Image/ExifTool/RIFF.pm +1 -1
- data/bin/lib/Image/ExifTool/RSRC.pm +1 -1
- data/bin/lib/Image/ExifTool/RTF.pm +1 -1
- data/bin/lib/Image/ExifTool/Radiance.pm +1 -1
- data/bin/lib/Image/ExifTool/Rawzor.pm +1 -1
- data/bin/lib/Image/ExifTool/Real.pm +1 -1
- data/bin/lib/Image/ExifTool/Reconyx.pm +1 -1
- data/bin/lib/Image/ExifTool/Red.pm +1 -1
- data/bin/lib/Image/ExifTool/Ricoh.pm +1 -1
- data/bin/lib/Image/ExifTool/Samsung.pm +3 -1
- data/bin/lib/Image/ExifTool/Sanyo.pm +1 -1
- data/bin/lib/Image/ExifTool/Scalado.pm +1 -1
- data/bin/lib/Image/ExifTool/Shift.pl +1 -1
- data/bin/lib/Image/ExifTool/Shortcuts.pm +1 -1
- data/bin/lib/Image/ExifTool/Sigma.pm +1 -1
- data/bin/lib/Image/ExifTool/SigmaRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/Sony.pm +3 -3
- data/bin/lib/Image/ExifTool/SonyIDC.pm +1 -1
- data/bin/lib/Image/ExifTool/Stim.pm +1 -1
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +2 -2
- data/bin/lib/Image/ExifTool/TagLookup.pm +1023 -979
- data/bin/lib/Image/ExifTool/TagNames.pod +99 -9
- data/bin/lib/Image/ExifTool/Text.pm +1 -1
- data/bin/lib/Image/ExifTool/Theora.pm +1 -1
- data/bin/lib/Image/ExifTool/Torrent.pm +1 -1
- data/bin/lib/Image/ExifTool/Unknown.pm +1 -1
- data/bin/lib/Image/ExifTool/VCard.pm +1 -1
- data/bin/lib/Image/ExifTool/Validate.pm +1 -1
- data/bin/lib/Image/ExifTool/Vorbis.pm +1 -1
- data/bin/lib/Image/ExifTool/WTV.pm +1 -1
- data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteExif.pl +14 -1
- data/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
- data/bin/lib/Image/ExifTool/WritePDF.pl +5 -1
- data/bin/lib/Image/ExifTool/WritePNG.pl +1 -1
- data/bin/lib/Image/ExifTool/WritePhotoshop.pl +1 -1
- data/bin/lib/Image/ExifTool/WritePostScript.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +18 -7
- data/bin/lib/Image/ExifTool/WriteRIFF.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteXMP.pl +1 -1
- data/bin/lib/Image/ExifTool/Writer.pl +2 -2
- data/bin/lib/Image/ExifTool/XMP.pm +23 -3
- data/bin/lib/Image/ExifTool/XMP2.pl +20 -1
- data/bin/lib/Image/ExifTool/XMPStruct.pl +1 -1
- data/bin/lib/Image/ExifTool/ZIP.pm +1 -1
- data/bin/lib/Image/ExifTool/ZISRAW.pm +1 -1
- data/bin/lib/Image/ExifTool/iWork.pm +1 -1
- data/bin/lib/Image/ExifTool.pm +4 -3
- data/bin/lib/Image/ExifTool.pod +39 -38
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
@@ -102,7 +102,7 @@ my %insvLimit = (
|
|
102
102
|
The tags below are extracted from timed metadata in QuickTime and other
|
103
103
|
formats of video files when the ExtractEmbedded option is used. Although
|
104
104
|
most of these tags are combined into the single table below, ExifTool
|
105
|
-
currently reads
|
105
|
+
currently reads 66 different formats of timed GPS metadata from video files.
|
106
106
|
},
|
107
107
|
VARS => { NO_ID => 1 },
|
108
108
|
GPSLatitude => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")', RawConv => '$$self{FoundGPSLatitude} = 1; $val' },
|
@@ -880,9 +880,10 @@ sub HandleTextTags($$$)
|
|
880
880
|
#------------------------------------------------------------------------------
|
881
881
|
# Process subtitle 'text'
|
882
882
|
# Inputs: 0) ExifTool ref, 1) data ref or dirInfo ref, 2) tag table ref
|
883
|
-
|
883
|
+
# 3) flag set if text was already stored
|
884
|
+
sub Process_text($$$;$)
|
884
885
|
{
|
885
|
-
my ($et, $dataPt, $tagTbl) = @_;
|
886
|
+
my ($et, $dataPt, $tagTbl, $handled) = @_;
|
886
887
|
my %tags;
|
887
888
|
|
888
889
|
return if $$et{NoMoreTextDecoding};
|
@@ -938,6 +939,16 @@ sub Process_text($$$)
|
|
938
939
|
$tags{GPSSatellites} = $10 if defined $10;
|
939
940
|
$tags{GPSDOP} = $11 if defined $11;
|
940
941
|
$tags{GPSAltitude} = $12 if defined $12;
|
942
|
+
# ($G and $GS are ref https://exiftool.org/forum/index.php?topic=13115.msg71743#msg71743)
|
943
|
+
} elsif ($tag eq 'G' and $dat =~ /:(\d{4})-(\d{2})-(\d{2}) (\d{2}:\d{2}:\d{2})-([NS])(\d+\.\d+)-([EW])(\d+\.\d+)-S(\d+)/) {
|
944
|
+
$tags{GPSDateTime} = "$1:$2:$3 $4";
|
945
|
+
$tags{GPSLatitude} = $6 * ($5 eq 'S' ? -1 : 1);
|
946
|
+
$tags{GPSLongitude} = $8 * ($7 eq 'W' ? -1 : 1);
|
947
|
+
$tags{GPSSpeed} = $9;
|
948
|
+
} elsif ($tag eq 'GS' and $dat =~ /:([-+]?\d+),([-+]?\d+),([-+]?\d+)/) {
|
949
|
+
# scale and re-arrange to match gsensor output from Win app (forum11665)
|
950
|
+
my @acc = ( ($2+2432)/1000, ($3 + 361)/1000, ($1-3708)/1000 );
|
951
|
+
$tags{Accelerometer} = "@acc";
|
941
952
|
} elsif ($tag eq 'BEGINGSENSOR' and $dat =~ /^:([-+]\d+\.\d+):([-+]\d+\.\d+):([-+]\d+\.\d+)/) {
|
942
953
|
$tags{Accelerometer} = "$1 $2 $3";
|
943
954
|
} elsif ($tag eq 'TIME' and $dat =~ /^:(\d+)/) {
|
@@ -946,7 +957,7 @@ sub Process_text($$$)
|
|
946
957
|
$tags{Text} = $dat if length $dat;
|
947
958
|
$tags{done} = 1;
|
948
959
|
} elsif ($tag ne 'END') {
|
949
|
-
$tags{Text} = "\$$tag$dat";
|
960
|
+
$tags{Text} = "\$$tag$dat" unless $handled;
|
950
961
|
}
|
951
962
|
}
|
952
963
|
%tags and HandleTextTags($et, $tagTbl, \%tags), return;
|
@@ -1234,6 +1245,7 @@ Sample: for ($i=0; ; ) {
|
|
1234
1245
|
($type eq 'sbtl' and $metaFormat eq 'tx3g' and $buff =~ /^..PNDM/s))
|
1235
1246
|
{
|
1236
1247
|
|
1248
|
+
my $handled;
|
1237
1249
|
FoundSomething($et, $tagTbl, $time[$i], $dur[$i]);
|
1238
1250
|
unless ($buff =~ /^\$BEGIN/) {
|
1239
1251
|
# remove ending "encd" box if it exists
|
@@ -1273,9 +1285,10 @@ Sample: for ($i=0; ; ) {
|
|
1273
1285
|
}
|
1274
1286
|
unless (defined $val) {
|
1275
1287
|
$et->HandleTag($tagTbl, Text => $buff); # just store any other text
|
1288
|
+
$handled = 1;
|
1276
1289
|
}
|
1277
1290
|
}
|
1278
|
-
Process_text($et, \$buff, $tagTbl);
|
1291
|
+
Process_text($et, \$buff, $tagTbl, $handled);
|
1279
1292
|
|
1280
1293
|
} elsif ($processByMetaFormat{$type}) {
|
1281
1294
|
|
@@ -1371,6 +1384,7 @@ sub ProcessFreeGPS($$$)
|
|
1371
1384
|
|
1372
1385
|
if (substr($$dataPt,18,8) eq "\xaa\xaa\xf2\xe1\xf0\xee\x54\x54") {
|
1373
1386
|
|
1387
|
+
$debug and $et->FoundTag(GPSType => '1A');
|
1374
1388
|
# (this is very similar to the encrypted text format)
|
1375
1389
|
# decode encrypted ASCII-based GPS (DashCam Azdome GS63H, ref 5)
|
1376
1390
|
# header looks like this in my sample:
|
@@ -1425,10 +1439,10 @@ sub ProcessFreeGPS($$$)
|
|
1425
1439
|
} elsif ($buf2 =~ /^.{173}([-+]\d{3})([-+]\d{3})([-+]\d{3})/s) { # (Azdome)
|
1426
1440
|
@acc = ($1/100, $2/100, $3/100);
|
1427
1441
|
}
|
1428
|
-
$debug and $et->FoundTag(GPSType => '1A');
|
1429
1442
|
|
1430
1443
|
} elsif ($$dataPt =~ /^.{52}(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/s) {
|
1431
1444
|
|
1445
|
+
$debug and $et->FoundTag(GPSType => '1B');
|
1432
1446
|
# decode NMEA-format GPS data (NextBase 512GW dashcam, ref PH)
|
1433
1447
|
# header looks like this in my sample:
|
1434
1448
|
# 0000: 00 00 80 00 66 72 65 65 47 50 53 20 40 01 00 00 [....freeGPS @...]
|
@@ -1454,10 +1468,10 @@ sub ProcessFreeGPS($$$)
|
|
1454
1468
|
# change to signed integer and divide by 256
|
1455
1469
|
map { $_ = $_ - 4294967296 if $_ >= 0x80000000; $_ /= 256 } @acc;
|
1456
1470
|
}
|
1457
|
-
$debug and $et->FoundTag(GPSType => '1B');
|
1458
1471
|
|
1459
1472
|
} elsif ($$dataPt =~ /^.{37}\0\0\0A([NS])([EW])/s) {
|
1460
1473
|
|
1474
|
+
$debug and $et->FoundTag(GPSType => '1C');
|
1461
1475
|
# decode freeGPS from ViofoA119v3 dashcam (similar to Novatek GPS format)
|
1462
1476
|
# 0000: 00 00 40 00 66 72 65 65 47 50 53 20 f0 03 00 00 [..@.freeGPS ....]
|
1463
1477
|
# 0010: 05 00 00 00 2f 00 00 00 03 00 00 00 13 00 00 00 [..../...........]
|
@@ -1489,10 +1503,10 @@ sub ProcessFreeGPS($$$)
|
|
1489
1503
|
map { $_ = $_ - 4294967296 if $_ >= 0x80000000; $_ /= 256 } @acc;
|
1490
1504
|
}
|
1491
1505
|
SetByteOrder('MM');
|
1492
|
-
$debug and $et->FoundTag(GPSType => '1C');
|
1493
1506
|
|
1494
1507
|
} elsif ($$dataPt =~ /^.{21}\0\0\0A([NS])([EW])/s) {
|
1495
1508
|
|
1509
|
+
$debug and $et->FoundTag(GPSType => '1D');
|
1496
1510
|
# also decode 'gpmd' chunk from Kingslim D4 dashcam videos
|
1497
1511
|
# 0000: 0a 00 00 00 0b 00 00 00 07 00 00 00 e5 07 00 00 [................]
|
1498
1512
|
# 0010: 06 00 00 00 03 00 00 00 41 4e 57 31 91 52 83 45 [........ANW1.R.E]
|
@@ -1518,10 +1532,10 @@ sub ProcessFreeGPS($$$)
|
|
1518
1532
|
$acc[1] = GetFloat($dataPt, 0x30);
|
1519
1533
|
$acc[2] = GetFloat($dataPt, 0x34);
|
1520
1534
|
SetByteOrder('MM');
|
1521
|
-
$debug and $et->FoundTag(GPSType => '1D');
|
1522
1535
|
|
1523
1536
|
} elsif ($$dataPt =~ /^.{60}A\0{3}.{4}([NS])\0{3}.{4}([EW])\0{3}/s) {
|
1524
1537
|
|
1538
|
+
$debug and $et->FoundTag(GPSType => '1E');
|
1525
1539
|
# decode freeGPS from Akaso dashcam
|
1526
1540
|
# 0000: 00 00 80 00 66 72 65 65 47 50 53 20 60 00 00 00 [....freeGPS `...]
|
1527
1541
|
# 0010: 78 2e 78 78 00 00 00 00 00 00 00 00 00 00 00 00 [x.xx............]
|
@@ -1539,10 +1553,10 @@ sub ProcessFreeGPS($$$)
|
|
1539
1553
|
$trk = GetFloat($dataPt, 0x54) + 180; # (why is this off by 180?)
|
1540
1554
|
$trk -= 360 if $trk >= 360;
|
1541
1555
|
SetByteOrder('MM');
|
1542
|
-
$debug and $et->FoundTag(GPSType => '1E');
|
1543
1556
|
|
1544
1557
|
} elsif ($$dataPt =~ /^.{60}4W`b]S</s and length($$dataPt) >= 140) {
|
1545
1558
|
|
1559
|
+
$debug and $et->FoundTag(GPSType => '1F');
|
1546
1560
|
# 0000: 00 00 40 00 66 72 65 65 47 50 53 20 f0 01 00 00 [..@.freeGPS ....]
|
1547
1561
|
# 0010: 5a 58 53 42 4e 58 59 53 00 00 00 00 00 00 00 00 [ZXSBNXYS........]
|
1548
1562
|
# 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
|
@@ -1557,10 +1571,10 @@ sub ProcessFreeGPS($$$)
|
|
1557
1571
|
$yr += ($yr >= 70 ? 1900 : 2000);
|
1558
1572
|
$spd = $9 * $knotsToKph if length $9;
|
1559
1573
|
$trk = $10 if length $10;
|
1560
|
-
$debug and $et->FoundTag(GPSType => '1F');
|
1561
1574
|
|
1562
1575
|
} elsif ($$dataPt =~ /^.{64}[\x01-\x0c]\0{3}[\x01-\x1f]\0{3}A[NS][EW]\0{5}/s) {
|
1563
1576
|
|
1577
|
+
$debug and $et->FoundTag(GPSType => '1G');
|
1564
1578
|
# Akaso V1 dascham
|
1565
1579
|
# 0000: 00 00 80 00 66 72 65 65 47 50 53 20 78 00 00 00 [....freeGPS x...]
|
1566
1580
|
# 0010: 59 6e 64 41 6b 61 73 6f 43 61 72 00 00 00 00 00 [YndAkasoCar.....]
|
@@ -1601,10 +1615,10 @@ sub ProcessFreeGPS($$$)
|
|
1601
1615
|
|
1602
1616
|
SetByteOrder('MM');
|
1603
1617
|
#my $serialNum = substr($$dataPt, 0x68, 20);
|
1604
|
-
$debug and $et->FoundTag(GPSType => '1G');
|
1605
1618
|
|
1606
1619
|
} elsif ($$dataPt =~ /^.{12}\xac\0\0\0.{44}(.{72})/s) {
|
1607
1620
|
|
1621
|
+
$debug and $et->FoundTag(GPSType => '1H');
|
1608
1622
|
# EACHPAI dash cam
|
1609
1623
|
# 0000: 00 00 80 00 66 72 65 65 47 50 53 20 ac 00 00 00 [....freeGPS ....]
|
1610
1624
|
# 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
|
@@ -1624,10 +1638,10 @@ sub ProcessFreeGPS($$$)
|
|
1624
1638
|
# bytes 7-12 are the timestamp in ASCII HHMMSS after xor-ing with 0x70
|
1625
1639
|
substr($time,7,6) = pack 'C*', map { $_ ^= 0x70 } unpack 'C*', substr($time,7,6);
|
1626
1640
|
# (other values are currently unknown)
|
1627
|
-
$debug and $et->FoundTag(GPSType => '1H');
|
1628
1641
|
|
1629
1642
|
} elsif ($$dataPt =~ /^.{64}A([NS])([EW])\0/s) {
|
1630
1643
|
|
1644
|
+
$debug and $et->FoundTag(GPSType => '1I');
|
1631
1645
|
# Vantrue S1 dashcam
|
1632
1646
|
# 0000: 00 00 80 00 66 72 65 65 47 50 53 20 78 00 00 00 [....freeGPS x...]
|
1633
1647
|
# 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
|
@@ -1650,10 +1664,10 @@ sub ProcessFreeGPS($$$)
|
|
1650
1664
|
$trk = GetFloat($dataPt, 0x68);
|
1651
1665
|
$alt = GetFloat($dataPt, 0x6c);
|
1652
1666
|
SetByteOrder('MM');
|
1653
|
-
$debug and $et->FoundTag(GPSType => '1I');
|
1654
1667
|
|
1655
1668
|
} else {
|
1656
1669
|
|
1670
|
+
$debug and $et->FoundTag(GPSType => '1J');
|
1657
1671
|
# decode binary GPS format (Viofo A119S, ref 2)
|
1658
1672
|
# header looks like this in my sample:
|
1659
1673
|
# 0000: 00 00 80 00 66 72 65 65 47 50 53 20 4c 00 00 00 [....freeGPS L...]
|
@@ -1687,7 +1701,6 @@ sub ProcessFreeGPS($$$)
|
|
1687
1701
|
$yr += 2000 if $yr < 2000;
|
1688
1702
|
$spd *= $knotsToKph; # convert speed to km/h
|
1689
1703
|
# ($trk is not confirmed; may be GPSImageDirection, ref PH)
|
1690
|
-
$debug and $et->FoundTag(GPSType => '1J');
|
1691
1704
|
}
|
1692
1705
|
#
|
1693
1706
|
# save tag values extracted by above code
|
@@ -1734,6 +1747,7 @@ sub ProcessFreeGPS2($$$)
|
|
1734
1747
|
|
1735
1748
|
if (substr($$dataPt,0x45,3) eq 'ATC') {
|
1736
1749
|
|
1750
|
+
$debug and $et->FoundTag(GPSType => '2A');
|
1737
1751
|
# header looks like this: (sample 1)
|
1738
1752
|
# 0000: 00 00 80 00 66 72 65 65 47 50 53 20 38 06 00 00 [....freeGPS 8...]
|
1739
1753
|
# 0010: 49 51 53 32 30 31 33 30 33 30 36 42 00 00 00 00 [IQS20130306B....]
|
@@ -1841,11 +1855,11 @@ ATCRec: for ($recPos = 0x30; $recPos + 52 < $dirLen; $recPos += 52) {
|
|
1841
1855
|
}
|
1842
1856
|
# save position of most recent record (needed when parsing the next freeGPS block)
|
1843
1857
|
$$et{FreeGPS2}{RecentRecPos} = $lastRecPos;
|
1844
|
-
$debug and $et->FoundTag(GPSType => '2A');
|
1845
1858
|
return 1;
|
1846
1859
|
|
1847
1860
|
} elsif ($$dataPt =~ /^.{60}A\0.{10}([NS])\0.{14}([EW])\0/s) {
|
1848
1861
|
|
1862
|
+
$debug and $et->FoundTag(GPSType => '2B');
|
1849
1863
|
# header looks like this in my sample:
|
1850
1864
|
# 0000: 00 00 80 00 66 72 65 65 47 50 53 20 08 01 00 00 [....freeGPS ....]
|
1851
1865
|
# 0010: 32 30 31 33 30 38 31 35 2e 30 31 00 00 00 00 00 [20130815.01.....]
|
@@ -1873,7 +1887,6 @@ ATCRec: for ($recPos = 0x30; $recPos + 52 < $dirLen; $recPos += 52) {
|
|
1873
1887
|
$lon = GetDouble($dataPt, 0x50);
|
1874
1888
|
$spd = GetDouble($dataPt, 0x60) * $knotsToKph;
|
1875
1889
|
$trk = GetDouble($dataPt, 0x68);
|
1876
|
-
$debug and $et->FoundTag(GPSType => '2B');
|
1877
1890
|
|
1878
1891
|
} elsif ($$dataPt =~ /^.{72}A([NS])([EW])/s) {
|
1879
1892
|
|
@@ -1900,6 +1913,7 @@ ATCRec: for ($recPos = 0x30; $recPos + 52 < $dirLen; $recPos += 52) {
|
|
1900
1913
|
($latRef, $lonRef) = ($1, $2);
|
1901
1914
|
($hr,$min,$sec,$yr,$mon,$day) = unpack('x48V6', $$dataPt);
|
1902
1915
|
if (substr($$dataPt, 16, 3) eq 'IQS') {
|
1916
|
+
$debug and $et->FoundTag(GPSType => '2C');
|
1903
1917
|
# Type 3b (ref PH)
|
1904
1918
|
# header looks like this in my sample:
|
1905
1919
|
# 0000: 00 00 80 00 66 72 65 65 47 50 53 20 4c 00 00 00 [....freeGPS L...]
|
@@ -1910,20 +1924,20 @@ ATCRec: for ($recPos = 0x30; $recPos + 52 < $dirLen; $recPos += 52) {
|
|
1910
1924
|
$lon = abs Get32s($dataPt, 0x50) / 1e7;
|
1911
1925
|
$spd = Get32s($dataPt, 0x54) / 100 * $mpsToKph;
|
1912
1926
|
$alt = GetFloat($dataPt, 0x58) / 1000; # (NC)
|
1913
|
-
$debug and $et->FoundTag(GPSType => '2C');
|
1914
1927
|
|
1915
1928
|
} else {
|
1929
|
+
$debug and $et->FoundTag(GPSType => '2D');
|
1916
1930
|
# Type 3 (ref 2)
|
1917
1931
|
# (no sample with this format)
|
1918
1932
|
$lat = GetFloat($dataPt, 0x4c);
|
1919
1933
|
$lon = GetFloat($dataPt, 0x50);
|
1920
1934
|
$spd = GetFloat($dataPt, 0x54) * $knotsToKph;
|
1921
1935
|
$trk = GetFloat($dataPt, 0x58);
|
1922
|
-
$debug and $et->FoundTag(GPSType => '2D');
|
1923
1936
|
}
|
1924
1937
|
|
1925
1938
|
} elsif ($$dataPt =~ /^.{60}A\0.{6}([NS])\0.{6}([EW])\0/s and $dirLen >= 112) {
|
1926
1939
|
|
1940
|
+
$debug and $et->FoundTag(GPSType => '2E');
|
1927
1941
|
# header looks like this in my sample (unknown dashcam, "Anticlock 2 2020_1125_1455_007.MOV"):
|
1928
1942
|
# 0000: 00 00 80 00 66 72 65 65 47 50 53 20 68 00 00 00 [....freeGPS h...]
|
1929
1943
|
# 0010: 32 30 31 33 30 33 32 35 41 00 00 00 00 00 00 00 [20130325A.......]
|
@@ -1940,10 +1954,10 @@ ATCRec: for ($recPos = 0x30; $recPos + 52 < $dirLen; $recPos += 52) {
|
|
1940
1954
|
$lon = GetFloat($dataPt, 0x48);
|
1941
1955
|
$spd = GetFloat($dataPt, 0x50);
|
1942
1956
|
$trk = GetFloat($dataPt, 0x54);
|
1943
|
-
$debug and $et->FoundTag(GPSType => '2E');
|
1944
1957
|
|
1945
1958
|
} elsif ($$dataPt =~ /^.{16}A([NS])([EW])\0/s) {
|
1946
1959
|
|
1960
|
+
$debug and $et->FoundTag(GPSType => '2F');
|
1947
1961
|
# INNOVV MP4 video (same format as INNOVV TS)
|
1948
1962
|
while ($$dataPt =~ /(A[NS][EW]\0.{28})/g) {
|
1949
1963
|
my $dat = $1;
|
@@ -1961,11 +1975,36 @@ ATCRec: for ($recPos = 0x30; $recPos + 52 < $dirLen; $recPos += 52) {
|
|
1961
1975
|
$et->HandleTag($tagTbl, GPSTrack => $trk);
|
1962
1976
|
$et->HandleTag($tagTbl, Accelerometer => "@acc");
|
1963
1977
|
}
|
1964
|
-
$debug and $et->FoundTag(GPSType => '2F');
|
1965
1978
|
return 1;
|
1966
1979
|
|
1980
|
+
} elsif ($$dataPt =~ /^.{28}A.{11}([NS]).{15}([EW])/s) {
|
1981
|
+
|
1982
|
+
$debug and $et->FoundTag(GPSType => '2G');
|
1983
|
+
# Vantrue N4 dashcam
|
1984
|
+
# 0000: 00 00 40 00 66 72 65 65 47 50 53 20 f0 03 00 00 [..@.freeGPS ....]
|
1985
|
+
# 0010: 0d 00 00 00 16 00 00 00 1e 00 00 00 41 00 00 00 [............A...]
|
1986
|
+
# 0020: 2c b7 b4 1a 5a 71 b2 40 4e 00 00 00 00 00 00 00 [,...Zq.@N.......]
|
1987
|
+
# 0030: fb ae 08 fe 77 f6 89 40 45 00 00 00 00 00 00 00 [....w..@E.......]
|
1988
|
+
# 0040: be 9f 1a 2f dd 84 36 40 5c 8f c2 f5 28 fc 68 40 [.../..6@\...(.h@]
|
1989
|
+
# 0050: 16 00 00 00 0c 00 00 00 0e 00 00 00 f2 fb ff ff [................]
|
1990
|
+
# 0060: 42 00 00 00 02 00 00 00 20 24 47 4e 52 4d 43 2c [B....... $GNRMC,]
|
1991
|
+
# 0070: 31 33 32 32 33 30 2e 30 30 30 2c 41 2c 34 37 32 [132230.000,A,472]
|
1992
|
+
# 0080: 31 2e 33 35 31 39 37 2c 4e 2c 30 30 38 33 30 2e [1.35197,N,00830.]
|
1993
|
+
# 0090: 38 30 38 35 39 2c 45 2c 32 32 2e 35 31 39 2c 31 [80859,E,22.519,1]
|
1994
|
+
# 00a0: 39 39 2e 38 38 2c 31 34 31 32 32 32 2c 2c 2c 41 [99.88,141222,,,A]
|
1995
|
+
# 00b0: 2a 37 35 0d 0a 00 00 00 00 00 00 00 00 00 00 00 [*75.............]
|
1996
|
+
($latRef, $lonRef) = ($1, $2);
|
1997
|
+
($hr,$min,$sec,$yr,$mon,$day,@acc) = unpack('x16V3x52V3V3',$$dataPt);
|
1998
|
+
$lat = abs(GetDouble($dataPt, 32)); # (abs just to be safe)
|
1999
|
+
$lon = abs(GetDouble($dataPt, 48)); # (abs just to be safe)
|
2000
|
+
$spd = GetDouble($dataPt, 64) * $knotsToKph;
|
2001
|
+
$trk = GetDouble($dataPt, 72);
|
2002
|
+
map { $_ = $_ - 4294967296 if $_ >= 0x80000000; $_ /= 1000 } @acc; # (NC)
|
2003
|
+
# (not necessary to read RMC sentence because we already have it all)
|
2004
|
+
|
1967
2005
|
} else {
|
1968
2006
|
|
2007
|
+
$debug and $et->FoundTag(GPSType => '2H');
|
1969
2008
|
# (look for binary GPS as stored by NextBase 512G, ref PH)
|
1970
2009
|
# header looks like this in my sample:
|
1971
2010
|
# 0000: 00 00 80 00 66 72 65 65 47 50 53 20 78 01 00 00 [....freeGPS x...]
|
@@ -2008,7 +2047,6 @@ ATCRec: for ($recPos = 0x30; $recPos + 52 < $dirLen; $recPos += 52) {
|
|
2008
2047
|
$et->HandleTag($tagTbl, GPSTrack => $trk);
|
2009
2048
|
last if $pos += 0x20 > length($$dataPt) - 0x1e;
|
2010
2049
|
}
|
2011
|
-
$debug and $et->FoundTag(GPSType => '2G');
|
2012
2050
|
return $$et{DOC_NUM} ? 1 : 0; # return 0 if nothing extracted
|
2013
2051
|
}
|
2014
2052
|
#
|
@@ -2025,9 +2063,7 @@ ATCRec: for ($recPos = 0x30; $recPos + 52 < $dirLen; $recPos += 52) {
|
|
2025
2063
|
$et->HandleTag($tagTbl, GPSLongitude => $lon * ($lonRef eq 'W' ? -1 : 1));
|
2026
2064
|
$et->HandleTag($tagTbl, GPSSpeed => $spd) if defined $spd; # (now in km/h)
|
2027
2065
|
$et->HandleTag($tagTbl, GPSTrack => $trk) if defined $trk;
|
2028
|
-
if
|
2029
|
-
$et->HandleTag($tagTbl, GPSAltitude => $alt);
|
2030
|
-
}
|
2066
|
+
$et->HandleTag($tagTbl, GPSAltitude => $alt) if defined $alt;
|
2031
2067
|
$et->HandleTag($tagTbl, Accelerometer => "@acc") if @acc;
|
2032
2068
|
return 1;
|
2033
2069
|
}
|
@@ -2243,6 +2279,7 @@ sub Process_3gf($$$)
|
|
2243
2279
|
|
2244
2280
|
#------------------------------------------------------------------------------
|
2245
2281
|
# Process DuDuBell M1 dashcam / VSYS M6L 'gps0' atom (ref PH)
|
2282
|
+
# (Lamax S9 dual dashcam also uses 'gps0' atom, but encrypted text format)
|
2246
2283
|
# Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
|
2247
2284
|
# Returns: 1 on success
|
2248
2285
|
sub Process_gps0($$$)
|
@@ -2250,14 +2287,28 @@ sub Process_gps0($$$)
|
|
2250
2287
|
my ($et, $dirInfo, $tagTbl) = @_;
|
2251
2288
|
my $dataPt = $$dirInfo{DataPt};
|
2252
2289
|
my $dirLen = $$dirInfo{DirLen};
|
2253
|
-
my $recLen
|
2290
|
+
my ($pos, $recLen);
|
2254
2291
|
$et->VerboseDir('gps0', undef, $dirLen);
|
2292
|
+
# check for encrypted format written by Lamax S9 dual dashcam
|
2293
|
+
# (similar to Ambarella A12, but in multiple 311-byte records)
|
2294
|
+
if ($$dataPt =~ /^.{2}\xf2\xe1\xf0\xeeTT\x98/s) {
|
2295
|
+
$recLen = 311;
|
2296
|
+
for ($pos=0; $pos+$recLen<=$dirLen; $pos+=$recLen) {
|
2297
|
+
my $dat = substr($$dataPt, $pos, $recLen);
|
2298
|
+
last unless $dat =~ /^.{2}\xf2\xe1\xf0\xeeTT\x98/s;
|
2299
|
+
$$et{DOC_NUM} = ++$$et{DOC_COUNT};
|
2300
|
+
Process_text($et, \$dat, $tagTbl);
|
2301
|
+
$pos += $recLen;
|
2302
|
+
}
|
2303
|
+
delete $$et{DOC_NUM};
|
2304
|
+
return 1;
|
2305
|
+
}
|
2306
|
+
$recLen = 32; # 32-byte record length
|
2255
2307
|
SetByteOrder('II');
|
2256
2308
|
if ($dirLen > $recLen and not $et->Options('ExtractEmbedded')) {
|
2257
2309
|
$dirLen = $recLen;
|
2258
2310
|
EEWarn($et);
|
2259
2311
|
}
|
2260
|
-
my $pos;
|
2261
2312
|
for ($pos=0; $pos+$recLen<=$dirLen; $pos+=$recLen) {
|
2262
2313
|
$$et{DOC_NUM} = ++$$et{DOC_COUNT};
|
2263
2314
|
# lat/long are in DDDMM.MMMM format
|
@@ -2307,6 +2358,49 @@ sub Process_gsen($$$)
|
|
2307
2358
|
return 1;
|
2308
2359
|
}
|
2309
2360
|
|
2361
|
+
#------------------------------------------------------------------------------
|
2362
|
+
# Process Kenwood drv-a301w dashcam 'udta' atom (ref PH)
|
2363
|
+
# Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
|
2364
|
+
# Returns: 1 on success
|
2365
|
+
# Sample data:
|
2366
|
+
# 0000: 56 49 44 45 4f 55 55 55 55 55 55 55 55 55 55 55 [VIDEOUUUUUUUUUUU]
|
2367
|
+
# 0010: 55 55 55 55 55 55 55 55 55 55 55 fe fe 32 30 32 [UUUUUUUUUUU..202]
|
2368
|
+
# 0020: 33 30 31 30 37 31 31 31 39 31 34 2e 32 30 32 33 [30107111914.2023]
|
2369
|
+
# 0030: 30 31 30 37 31 31 31 39 31 35 03 4e 34 37 33 37 [0107111915.N4737]
|
2370
|
+
# 0040: 37 30 35 33 57 31 32 32 30 39 39 30 31 34 2b 30 [7053W122099014+0]
|
2371
|
+
# 0050: 30 35 38 30 30 30 2b 30 30 36 2b 30 30 39 2b 30 [058000+006+009+0]
|
2372
|
+
# 0060: 30 34 2b 30 30 32 2b 30 30 39 2b 30 30 35 2b 30 [04+002+009+005+0]
|
2373
|
+
sub ProcessKenwood($$$)
|
2374
|
+
{
|
2375
|
+
my ($et, $dirInfo, $tagTbl) = @_;
|
2376
|
+
my $dataPt = $$dirInfo{DataPt};
|
2377
|
+
my $dirLen = $$dirInfo{DirLen};
|
2378
|
+
while ($$dataPt =~ /\xfe\xfe([^\xfe]+)/g) {
|
2379
|
+
my $dat = $1;
|
2380
|
+
next unless $dat =~ /^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})./gs;
|
2381
|
+
my $time = "$1:$2:$3 $4:$5:$6"; # (likely local time zone, but not confirmed)
|
2382
|
+
# ignore second date (what is this for?)
|
2383
|
+
next unless $dat =~ /\G(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})./gs;
|
2384
|
+
next unless $dat =~ /\G([NS])(\d+)([EW])(\d+)/g;
|
2385
|
+
my ($lat, $lon) = ($2/1e4, $4/1e4);
|
2386
|
+
ConvertLatLon($lat, $lon);
|
2387
|
+
$$et{DOC_NUM} = ++$$et{DOC_COUNT};
|
2388
|
+
$et->HandleTag($tagTbl, GPSDateTime => $time);
|
2389
|
+
$et->HandleTag($tagTbl, GPSLatitude => $lat * ($1 eq 'S' ? -1 : 1));
|
2390
|
+
$et->HandleTag($tagTbl, GPSLongitude => $lon * ($3 eq 'W' ? -1 : 1));
|
2391
|
+
next unless $dat =~ /\G([-+]\d{4})(\d+)/g;
|
2392
|
+
$et->HandleTag($tagTbl, GPSAltitude => $1 + 0); # (NC, educated guess)
|
2393
|
+
$et->HandleTag($tagTbl, GPSSpeed => $2); # (km/h)
|
2394
|
+
my @acc;
|
2395
|
+
while ($dat =~ /\G([-+]\d+)([-+]\d+)([-+]\d+)/g) {
|
2396
|
+
push @acc, $1/1000, $2/1000, $3/1000;
|
2397
|
+
}
|
2398
|
+
$et->HandleTag($tagTbl, Accelerometer => "@acc") if @acc;
|
2399
|
+
}
|
2400
|
+
delete $$et{DOC_NUM};
|
2401
|
+
return 1;
|
2402
|
+
}
|
2403
|
+
|
2310
2404
|
#------------------------------------------------------------------------------
|
2311
2405
|
# Process RIFF-format trailer written by Auto-Vox dashcam (ref PH)
|
2312
2406
|
# Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
|
@@ -3005,7 +3099,7 @@ information like GPS tracks from MOV, MP4 and INSV media data.
|
|
3005
3099
|
|
3006
3100
|
=head1 AUTHOR
|
3007
3101
|
|
3008
|
-
Copyright 2003-
|
3102
|
+
Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
|
3009
3103
|
|
3010
3104
|
This library is free software; you can redistribute it and/or modify it
|
3011
3105
|
under the same terms as Perl itself.
|
@@ -3,6 +3,9 @@ File: Image/ExifTool/README
|
|
3
3
|
|
4
4
|
Description: ExifTool support modules documentation
|
5
5
|
|
6
|
+
Note: This documentation is a reference to be used by developers when
|
7
|
+
adding new tags to ExifTool.
|
8
|
+
|
6
9
|
The ExifTool support modules are loaded by ExifTool to allow processing of
|
7
10
|
various meta information formats.
|
8
11
|
|
@@ -2126,7 +2126,7 @@ including AVI videos, WAV audio files and WEBP images.
|
|
2126
2126
|
|
2127
2127
|
=head1 AUTHOR
|
2128
2128
|
|
2129
|
-
Copyright 2003-
|
2129
|
+
Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
|
2130
2130
|
|
2131
2131
|
This library is free software; you can redistribute it and/or modify it
|
2132
2132
|
under the same terms as Perl itself.
|
@@ -225,7 +225,7 @@ resource files.
|
|
225
225
|
|
226
226
|
=head1 AUTHOR
|
227
227
|
|
228
|
-
Copyright 2003-
|
228
|
+
Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
|
229
229
|
|
230
230
|
This library is free software; you can redistribute it and/or modify it
|
231
231
|
under the same terms as Perl itself.
|
@@ -366,7 +366,7 @@ information from RTF (Rich Text Format) documents.
|
|
366
366
|
|
367
367
|
=head1 AUTHOR
|
368
368
|
|
369
|
-
Copyright 2003-
|
369
|
+
Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
|
370
370
|
|
371
371
|
This library is free software; you can redistribute it and/or modify it
|
372
372
|
under the same terms as Perl itself.
|
@@ -125,7 +125,7 @@ images are a type of high dynamic-range image.
|
|
125
125
|
|
126
126
|
=head1 AUTHOR
|
127
127
|
|
128
|
-
Copyright 2003-
|
128
|
+
Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
|
129
129
|
|
130
130
|
This library is free software; you can redistribute it and/or modify it
|
131
131
|
under the same terms as Perl itself.
|
@@ -168,7 +168,7 @@ information from Rawzor compressed images.
|
|
168
168
|
|
169
169
|
=head1 AUTHOR
|
170
170
|
|
171
|
-
Copyright 2003-
|
171
|
+
Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
|
172
172
|
|
173
173
|
This library is free software; you can redistribute it and/or modify it
|
174
174
|
under the same terms as Perl itself.
|
@@ -715,7 +715,7 @@ little-endian, but the Real format is big-endian.
|
|
715
715
|
|
716
716
|
=head1 AUTHOR
|
717
717
|
|
718
|
-
Copyright 2003-
|
718
|
+
Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
|
719
719
|
|
720
720
|
This library is free software; you can redistribute it and/or modify it
|
721
721
|
under the same terms as Perl itself.
|
@@ -431,7 +431,7 @@ maker notes in images from Reconyx cameras.
|
|
431
431
|
|
432
432
|
=head1 AUTHOR
|
433
433
|
|
434
|
-
Copyright 2003-
|
434
|
+
Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
|
435
435
|
|
436
436
|
This library is free software; you can redistribute it and/or modify it
|
437
437
|
under the same terms as Perl itself.
|
@@ -303,7 +303,7 @@ from Redcode R3D version 1 and 2 video files.
|
|
303
303
|
|
304
304
|
=head1 AUTHOR
|
305
305
|
|
306
|
-
Copyright 2003-
|
306
|
+
Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
|
307
307
|
|
308
308
|
This library is free software; you can redistribute it and/or modify it
|
309
309
|
under the same terms as Perl itself.
|
@@ -1143,7 +1143,7 @@ interpret Ricoh maker notes EXIF meta information.
|
|
1143
1143
|
|
1144
1144
|
=head1 AUTHOR
|
1145
1145
|
|
1146
|
-
Copyright 2003-
|
1146
|
+
Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
|
1147
1147
|
|
1148
1148
|
This library is free software; you can redistribute it and/or modify it
|
1149
1149
|
under the same terms as Perl itself.
|
@@ -1261,8 +1261,10 @@ my %formatMinMax = (
|
|
1261
1261
|
},
|
1262
1262
|
# 0x0b41-name - seen 'SingeShot_DepthMap_1' (Yes, "Singe") (SM-N975X front camera)
|
1263
1263
|
'0x0b41' => { Name => 'SingleShotDepthMap', Binary => 1 },
|
1264
|
+
# 0x0ba1-name - seen 'Original_Path_Hash_Key', 'PhotoEditor_Re_Edit_Data'
|
1264
1265
|
# 0xa050-name - seen 'Jpeg360_2D_Info' (Samsung Gear 360)
|
1265
1266
|
# 0xa050 - seen 'Jpeg3602D' (Samsung Gear 360)
|
1267
|
+
# 0x0c81-name - seen 'Watermark_Info'
|
1266
1268
|
);
|
1267
1269
|
|
1268
1270
|
# DualShot Extra Info (ref PH)
|
@@ -1720,7 +1722,7 @@ Samsung maker notes in EXIF information.
|
|
1720
1722
|
|
1721
1723
|
=head1 AUTHOR
|
1722
1724
|
|
1723
|
-
Copyright 2003-
|
1725
|
+
Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
|
1724
1726
|
|
1725
1727
|
This library is free software; you can redistribute it and/or modify it
|
1726
1728
|
under the same terms as Perl itself.
|
@@ -419,7 +419,7 @@ Sanyo maker notes in EXIF information.
|
|
419
419
|
|
420
420
|
=head1 AUTHOR
|
421
421
|
|
422
|
-
Copyright 2003-
|
422
|
+
Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
|
423
423
|
|
424
424
|
This library is free software; you can redistribute it and/or modify it
|
425
425
|
under the same terms as Perl itself.
|
@@ -128,7 +128,7 @@ metadata from the JPEG APP4 SCALADO segment.
|
|
128
128
|
|
129
129
|
=head1 AUTHOR
|
130
130
|
|
131
|
-
Copyright 2003-
|
131
|
+
Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
|
132
132
|
|
133
133
|
This library is free software; you can redistribute it and/or modify it
|
134
134
|
under the same terms as Perl itself.
|
@@ -632,7 +632,7 @@ limited to the range 1970 to 2038 on 32-bit systems.
|
|
632
632
|
|
633
633
|
=head1 AUTHOR
|
634
634
|
|
635
|
-
Copyright 2003-
|
635
|
+
Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
|
636
636
|
|
637
637
|
This library is free software; you can redistribute it and/or modify it
|
638
638
|
under the same terms as Perl itself.
|
@@ -343,7 +343,7 @@ name prefix.
|
|
343
343
|
|
344
344
|
=head1 AUTHOR
|
345
345
|
|
346
|
-
Copyright 2003-
|
346
|
+
Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
|
347
347
|
|
348
348
|
This library is free software; you can redistribute it and/or modify it
|
349
349
|
under the same terms as Perl itself.
|
@@ -863,7 +863,7 @@ Sigma and Foveon maker notes in EXIF information.
|
|
863
863
|
|
864
864
|
=head1 AUTHOR
|
865
865
|
|
866
|
-
Copyright 2003-
|
866
|
+
Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
|
867
867
|
|
868
868
|
This library is free software; you can redistribute it and/or modify it
|
869
869
|
under the same terms as Perl itself.
|
@@ -674,7 +674,7 @@ Sigma and Foveon X3F images.
|
|
674
674
|
|
675
675
|
=head1 AUTHOR
|
676
676
|
|
677
|
-
Copyright 2003-
|
677
|
+
Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
|
678
678
|
|
679
679
|
This library is free software; you can redistribute it and/or modify it
|
680
680
|
under the same terms as Perl itself.
|
@@ -34,7 +34,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
34
34
|
use Image::ExifTool::Exif;
|
35
35
|
use Image::ExifTool::Minolta;
|
36
36
|
|
37
|
-
$VERSION = '3.
|
37
|
+
$VERSION = '3.56';
|
38
38
|
|
39
39
|
sub ProcessSRF($$$);
|
40
40
|
sub ProcessSR2($$$);
|
@@ -10364,7 +10364,7 @@ my %isoSetting2010 = (
|
|
10364
10364
|
return 'inf' if $val >= 255;
|
10365
10365
|
return (2**($val/16-5) + 1) * $val[1] / 1000;
|
10366
10366
|
},
|
10367
|
-
PrintConv => '$val eq "inf" ? $val : sprintf("%.
|
10367
|
+
PrintConv => '$val eq "inf" ? $val : sprintf("%.4g m", $val)',
|
10368
10368
|
},
|
10369
10369
|
GPSDateTime => {
|
10370
10370
|
Description => 'GPS Date/Time',
|
@@ -11317,7 +11317,7 @@ Minolta.
|
|
11317
11317
|
|
11318
11318
|
=head1 AUTHOR
|
11319
11319
|
|
11320
|
-
Copyright 2003-
|
11320
|
+
Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
|
11321
11321
|
|
11322
11322
|
This library is free software; you can redistribute it and/or modify it
|
11323
11323
|
under the same terms as Perl itself.
|
@@ -379,7 +379,7 @@ write Sony Image Data Converter version 3.0 metadata in ARW images.
|
|
379
379
|
|
380
380
|
=head1 AUTHOR
|
381
381
|
|
382
|
-
Copyright 2003-
|
382
|
+
Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
|
383
383
|
|
384
384
|
This library is free software; you can redistribute it and/or modify it
|
385
385
|
under the same terms as Perl itself.
|
@@ -174,7 +174,7 @@ information.
|
|
174
174
|
|
175
175
|
=head1 AUTHOR
|
176
176
|
|
177
|
-
Copyright 2003-
|
177
|
+
Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
|
178
178
|
|
179
179
|
This library is free software; you can redistribute it and/or modify it
|
180
180
|
under the same terms as Perl itself.
|
@@ -650,7 +650,7 @@ and values.
|
|
650
650
|
|
651
651
|
~head1 AUTHOR
|
652
652
|
|
653
|
-
Copyright 2003-
|
653
|
+
Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
|
654
654
|
|
655
655
|
This library is free software; you can redistribute it and/or modify it
|
656
656
|
under the same terms as Perl itself.
|
@@ -834,7 +834,7 @@ Number of modules updated, or negative on error.
|
|
834
834
|
|
835
835
|
=head1 AUTHOR
|
836
836
|
|
837
|
-
Copyright 2003-
|
837
|
+
Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
|
838
838
|
|
839
839
|
This library is free software; you can redistribute it and/or modify it
|
840
840
|
under the same terms as Perl itself.
|