exiftool-vendored.exe 12.99.0 → 13.16.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.exe +0 -0
- package/bin/exiftool_files/exiftool.pl +183 -70
- package/bin/exiftool_files/lib/File/RandomAccess.pm +1 -1
- package/bin/exiftool_files/lib/File/RandomAccess.pod +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/AAC.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/AES.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/AFCP.pm +6 -6
- package/bin/exiftool_files/lib/Image/ExifTool/AIFF.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/APE.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/APP12.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/ASF.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Apple.pm +11 -9
- package/bin/exiftool_files/lib/Image/ExifTool/Audible.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/BMP.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/BPG.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/BZZ.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/BigTIFF.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +36 -22
- package/bin/exiftool_files/lib/Image/ExifTool/CBOR.pm +5 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +66 -27
- package/bin/exiftool_files/lib/Image/ExifTool/CanonCustom.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/CanonRaw.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/CanonVRD.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/CaptureOne.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Casio.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Charset.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/DICOM.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/DJI.pm +196 -30
- package/bin/exiftool_files/lib/Image/ExifTool/DNG.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/DPX.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/DV.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/DarwinCore.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/DjVu.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/EXE.pm +138 -33
- package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +30 -17
- package/bin/exiftool_files/lib/Image/ExifTool/FITS.pm +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/FLAC.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/FLIF.pm +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/FLIR.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Fixup.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Flash.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/FlashPix.pm +17 -21
- package/bin/exiftool_files/lib/Image/ExifTool/Font.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/FotoStation.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/GE.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/GIF.pm +144 -93
- package/bin/exiftool_files/lib/Image/ExifTool/GIMP.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/GM.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/GPS.pm +34 -30
- package/bin/exiftool_files/lib/Image/ExifTool/GeoTiff.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Geolocation.dat +0 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Geolocation.pm +19 -9
- package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +49 -14
- package/bin/exiftool_files/lib/Image/ExifTool/GoPro.pm +120 -8
- package/bin/exiftool_files/lib/Image/ExifTool/H264.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/HP.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/HTML.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/HtmlDump.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/ICC_Profile.pm +81 -2
- package/bin/exiftool_files/lib/Image/ExifTool/ICO.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/ID3.pm +8 -8
- package/bin/exiftool_files/lib/Image/ExifTool/IPTC.pm +10 -7
- package/bin/exiftool_files/lib/Image/ExifTool/ISO.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/ITC.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Import.pm +5 -4
- package/bin/exiftool_files/lib/Image/ExifTool/InDesign.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/InfiRay.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/JPEG.pm +32 -5
- package/bin/exiftool_files/lib/Image/ExifTool/JPEGDigest.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/JSON.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/JVC.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Jpeg2000.pm +10 -9
- package/bin/exiftool_files/lib/Image/ExifTool/Kodak.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/KyoceraRaw.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/LIF.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/LNK.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/cs.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/de.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/en_ca.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/en_gb.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/es.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/fi.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/fr.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/it.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/ja.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/ko.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/nl.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/pl.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/ru.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/sk.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/sv.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/tr.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/zh_cn.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/zh_tw.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Leaf.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/LigoGPS.pm +409 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Lytro.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/M2TS.pm +58 -19
- package/bin/exiftool_files/lib/Image/ExifTool/MIE.pm +15 -6
- package/bin/exiftool_files/lib/Image/ExifTool/MIEUnits.pod +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/MIFF.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/MISB.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/MNG.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/MOI.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/MPC.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/MPEG.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/MPF.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/MRC.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/MWG.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/MXF.pm +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/MacOS.pm +3 -2
- package/bin/exiftool_files/lib/Image/ExifTool/MakerNotes.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Matroska.pm +22 -6
- package/bin/exiftool_files/lib/Image/ExifTool/Microsoft.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Minolta.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/MinoltaRaw.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Motorola.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +495 -39
- package/bin/exiftool_files/lib/Image/ExifTool/NikonCapture.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/NikonCustom.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/NikonSettings.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Nintendo.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/OOXML.pm +8 -8
- package/bin/exiftool_files/lib/Image/ExifTool/Ogg.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/OpenEXR.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Opus.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Other.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/PCX.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/PDF.pm +49 -18
- package/bin/exiftool_files/lib/Image/ExifTool/PGF.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/PICT.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/PLIST.pm +4 -4
- package/bin/exiftool_files/lib/Image/ExifTool/PLUS.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +20 -8
- package/bin/exiftool_files/lib/Image/ExifTool/PPM.pm +12 -3
- package/bin/exiftool_files/lib/Image/ExifTool/PSP.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Palm.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Panasonic.pm +27 -3
- package/bin/exiftool_files/lib/Image/ExifTool/PanasonicRaw.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Parrot.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/PhaseOne.pm +6 -5
- package/bin/exiftool_files/lib/Image/ExifTool/PhotoCD.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/PhotoMechanic.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Photoshop.pm +65 -4
- package/bin/exiftool_files/lib/Image/ExifTool/PostScript.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/PrintIM.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Protobuf.pm +270 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Qualcomm.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +326 -88
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +266 -200
- package/bin/exiftool_files/lib/Image/ExifTool/README +12 -2
- package/bin/exiftool_files/lib/Image/ExifTool/RIFF.pm +21 -6
- package/bin/exiftool_files/lib/Image/ExifTool/RSRC.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/RTF.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Radiance.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Rawzor.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Real.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Reconyx.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Red.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Ricoh.pm +4 -4
- package/bin/exiftool_files/lib/Image/ExifTool/Samsung.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Sanyo.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Scalado.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Shift.pl +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Shortcuts.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Sigma.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/SigmaRaw.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +5 -4
- package/bin/exiftool_files/lib/Image/ExifTool/SonyIDC.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Stim.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/TagInfoXML.pm +6 -5
- package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +7025 -6967
- package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +477 -46
- package/bin/exiftool_files/lib/Image/ExifTool/Text.pm +4 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Theora.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Torrent.pm +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Unknown.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/VCard.pm +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Validate.pm +6 -6
- package/bin/exiftool_files/lib/Image/ExifTool/Vivo.pm +124 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Vorbis.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/WPG.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/WTV.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/WriteExif.pl +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/WriteIPTC.pl +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/WritePDF.pl +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/WritePNG.pl +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/WritePhotoshop.pl +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/WritePostScript.pl +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +166 -79
- package/bin/exiftool_files/lib/Image/ExifTool/WriteRIFF.pl +17 -6
- package/bin/exiftool_files/lib/Image/ExifTool/WriteXMP.pl +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +89 -96
- package/bin/exiftool_files/lib/Image/ExifTool/XISF.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +39 -14
- package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +103 -1
- package/bin/exiftool_files/lib/Image/ExifTool/XMPStruct.pl +2 -3
- package/bin/exiftool_files/lib/Image/ExifTool/ZIP.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/ZISRAW.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/iWork.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool.pm +338 -166
- package/bin/exiftool_files/lib/Image/ExifTool.pod +119 -73
- package/bin/exiftool_files/readme_windows.txt +8 -13
- package/bin/exiftool_files/windows_exiftool.txt +102 -53
- package/package.json +11 -11
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
# 2022/06/21 - PH Added ability to read Google Takeout JSON files
|
|
18
18
|
# 2024/04/23 - PH Added ability to read more OpenTracks GPS tags
|
|
19
19
|
# 2024/08/28 - PH Added support for new Google Takeout JSON format
|
|
20
|
+
# 2024/11/26 - PH Also write GPSMeasureMode and GPSDOP
|
|
20
21
|
#
|
|
21
22
|
# References: 1) http://www.topografix.com/GPX/1/1/
|
|
22
23
|
# 2) http://www.gpsinformation.org/dale/nmea.htm#GSA
|
|
@@ -31,7 +32,7 @@ use vars qw($VERSION);
|
|
|
31
32
|
use Image::ExifTool qw(:Public);
|
|
32
33
|
use Image::ExifTool::GPS;
|
|
33
34
|
|
|
34
|
-
$VERSION = '1.
|
|
35
|
+
$VERSION = '1.81';
|
|
35
36
|
|
|
36
37
|
sub JITTER() { return 2 } # maximum time jitter
|
|
37
38
|
|
|
@@ -90,12 +91,25 @@ my %fixInfoKeys = (
|
|
|
90
91
|
orient => [ 'dir', 'pitch', 'roll' ],
|
|
91
92
|
atemp => [ 'atemp' ],
|
|
92
93
|
err => [ 'err' ],
|
|
94
|
+
dop => [ 'hdop', 'vdop', 'pdop' ],
|
|
93
95
|
);
|
|
94
96
|
|
|
95
|
-
|
|
97
|
+
# category for select keys
|
|
98
|
+
my %keyCategory = (
|
|
99
|
+
dir => 'orient',
|
|
100
|
+
pitch => 'orient',
|
|
101
|
+
roll => 'orient',
|
|
102
|
+
hdop => 'dop',
|
|
103
|
+
pdop => 'dop',
|
|
104
|
+
vdop => 'dop',
|
|
105
|
+
);
|
|
96
106
|
|
|
97
107
|
# tags which may exist separately in some formats (eg. CSV)
|
|
98
|
-
my %sepTags = (
|
|
108
|
+
my %sepTags = (
|
|
109
|
+
dir => 1, pitch => 1, roll => 1, track => 1, speed => 1,
|
|
110
|
+
# (plus other tags we don't want to scan outwards for)
|
|
111
|
+
hdop => 1, pdop => 1, vdop => 1,
|
|
112
|
+
);
|
|
99
113
|
|
|
100
114
|
# conversion factors for GPSSpeed (standard EXIF units only)
|
|
101
115
|
my %speedConv = (
|
|
@@ -348,8 +362,8 @@ sub LoadTrackLog($$;$)
|
|
|
348
362
|
my $tag = $xmlTag{lc $2};
|
|
349
363
|
if ($tag) {
|
|
350
364
|
$$fix{$tag} = $4;
|
|
351
|
-
if ($
|
|
352
|
-
$$has{
|
|
365
|
+
if ($keyCategory{$tag}) {
|
|
366
|
+
$$has{$keyCategory{$tag}} = 1;
|
|
353
367
|
} elsif ($tag eq 'alt') {
|
|
354
368
|
# validate altitude
|
|
355
369
|
undef $$fix{alt} if defined $$fix{alt} and $$fix{alt} !~ /^[+-]?\d+\.?\d*/;
|
|
@@ -394,8 +408,8 @@ sub LoadTrackLog($$;$)
|
|
|
394
408
|
} else {
|
|
395
409
|
$$fix{$tag} = $1;
|
|
396
410
|
}
|
|
397
|
-
if ($
|
|
398
|
-
$$has{
|
|
411
|
+
if ($keyCategory{$tag}) {
|
|
412
|
+
$$has{$keyCategory{$tag}} = 1;
|
|
399
413
|
} elsif ($tag eq 'alt') {
|
|
400
414
|
# validate altitude
|
|
401
415
|
undef $$fix{alt} if defined $$fix{alt} and $$fix{alt} !~ /^[+-]?\d+\.?\d*/;
|
|
@@ -562,8 +576,8 @@ DoneFix: $isDate = 1;
|
|
|
562
576
|
next;
|
|
563
577
|
} elsif ($format eq 'JSON') {
|
|
564
578
|
# Google Takeout JSON format
|
|
565
|
-
if (/"(latitudeE7|longitudeE7|latE7|lngE7|timestamp|startTime|point|durationMinutesOffsetFromStartTime)"\s*:\s*"?(.*?)"?,?\s*[\x0d\x0a]/) {
|
|
566
|
-
if ($1 eq 'timestamp') {
|
|
579
|
+
if (/"(latitudeE7|longitudeE7|latE7|lngE7|timestamp|startTime|point|durationMinutesOffsetFromStartTime|time)"\s*:\s*"?(.*?)"?,?\s*[\x0d\x0a]/) {
|
|
580
|
+
if ($1 eq 'timestamp' or $1 eq 'time') {
|
|
567
581
|
$time = GetTime($2);
|
|
568
582
|
goto DoneFix if $time and $$fix{lat} and $$fix{lon};
|
|
569
583
|
} elsif ($1 eq 'startTime') { # (new format)
|
|
@@ -1127,8 +1141,9 @@ sub SetGeoValues($$;$)
|
|
|
1127
1141
|
$iExt = $i1;
|
|
1128
1142
|
}
|
|
1129
1143
|
if (abs($time - $tn) > $geoMaxExtSecs) {
|
|
1130
|
-
$err or $err = 'Time is too far from nearest GPS fix'
|
|
1131
|
-
$et->VPrint(2, ' Nearest fix: ', PrintFixTime($tn),
|
|
1144
|
+
$err or $err = 'Time is too far from nearest GPS fix';
|
|
1145
|
+
$et->VPrint(2, ' Nearest fix: ', PrintFixTime($tn), ' (',
|
|
1146
|
+
int(abs $time-$tn), " sec away)\n") if $verbose > 2;
|
|
1132
1147
|
$fix = { } if $$geotag{DateTimeOnly};
|
|
1133
1148
|
} else {
|
|
1134
1149
|
$fix = $$points{$tn};
|
|
@@ -1144,7 +1159,7 @@ sub SetGeoValues($$;$)
|
|
|
1144
1159
|
# loop through available fix information categories
|
|
1145
1160
|
# (pos, track, alt, orient)
|
|
1146
1161
|
my ($category, $key);
|
|
1147
|
-
Category: foreach $category (qw{pos track alt orient atemp err}) {
|
|
1162
|
+
Category: foreach $category (qw{pos track alt orient atemp err dop}) {
|
|
1148
1163
|
next unless $$has{$category};
|
|
1149
1164
|
my ($f, $p0b, $p1b, $f0b);
|
|
1150
1165
|
# loop through specific fix information keys
|
|
@@ -1302,6 +1317,25 @@ Category: foreach $category (qw{pos track alt orient atemp err}) {
|
|
|
1302
1317
|
if ($$has{err}) {
|
|
1303
1318
|
@r = $et->SetNewValue(GPSHPositioningError => $$fix{err}, %opts);
|
|
1304
1319
|
}
|
|
1320
|
+
if ($$has{dop}) {
|
|
1321
|
+
my ($dop, $mm);
|
|
1322
|
+
if (defined $$fix{pdop}) {
|
|
1323
|
+
$dop = $$fix{pdop};
|
|
1324
|
+
$mm = 3;
|
|
1325
|
+
} elsif (defined $$fix{hdop}) {
|
|
1326
|
+
if (defined $$fix{vdop}) {
|
|
1327
|
+
$dop = sqrt($$fix{hdop} * $$fix{hdop} + $$fix{vdop} * $$fix{vdop});
|
|
1328
|
+
$mm = 3;
|
|
1329
|
+
} else {
|
|
1330
|
+
$dop = $$fix{hdop};
|
|
1331
|
+
$mm = 2;
|
|
1332
|
+
}
|
|
1333
|
+
}
|
|
1334
|
+
if (defined $dop) {
|
|
1335
|
+
$et->SetNewValue(GPSMeasureMode => $mm, %opts);
|
|
1336
|
+
$et->SetNewValue(GPSDOP => $dop, %opts);
|
|
1337
|
+
}
|
|
1338
|
+
}
|
|
1305
1339
|
unless ($xmp) {
|
|
1306
1340
|
my ($latRef, $lonRef);
|
|
1307
1341
|
$latRef = ($$fix{lat} > 0 ? 'N' : 'S') if defined $$fix{lat};
|
|
@@ -1327,7 +1361,8 @@ Category: foreach $category (qw{pos track alt orient atemp err}) {
|
|
|
1327
1361
|
GPSAltitude GPSAltitudeRef GPSDateStamp GPSTimeStamp GPSDateTime
|
|
1328
1362
|
GPSTrack GPSTrackRef GPSSpeed GPSSpeedRef GPSImgDirection
|
|
1329
1363
|
GPSImgDirectionRef GPSPitch GPSRoll CameraElevationAngle
|
|
1330
|
-
AmbientTemperature GPSHPositioningError GPSCoordinates
|
|
1364
|
+
AmbientTemperature GPSHPositioningError GPSCoordinates
|
|
1365
|
+
GPSMeasureMode GPSDOP))
|
|
1331
1366
|
{
|
|
1332
1367
|
my @r = $et->SetNewValue($_, undef, %opts);
|
|
1333
1368
|
}
|
|
@@ -1526,7 +1561,7 @@ user-defined tag GPSRoll, must be active.
|
|
|
1526
1561
|
|
|
1527
1562
|
=head1 AUTHOR
|
|
1528
1563
|
|
|
1529
|
-
Copyright 2003-
|
|
1564
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
1530
1565
|
|
|
1531
1566
|
This library is free software; you can redistribute it and/or modify it
|
|
1532
1567
|
under the same terms as Perl itself.
|
|
@@ -16,7 +16,7 @@ use vars qw($VERSION);
|
|
|
16
16
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
17
17
|
use Image::ExifTool::QuickTime;
|
|
18
18
|
|
|
19
|
-
$VERSION = '1.
|
|
19
|
+
$VERSION = '1.11';
|
|
20
20
|
|
|
21
21
|
sub ProcessGoPro($$$);
|
|
22
22
|
sub ProcessString($$$);
|
|
@@ -72,6 +72,7 @@ my %addUnits = (
|
|
|
72
72
|
let me know if you discover the meaning of any of these unknown tags. See
|
|
73
73
|
L<https://github.com/gopro/gpmf-parser> for details about this format.
|
|
74
74
|
},
|
|
75
|
+
# ABSC (GPMF) - seen: 0 (fmt f)
|
|
75
76
|
ACCL => { #2 (gpmd)
|
|
76
77
|
Name => 'Accelerometer',
|
|
77
78
|
Notes => 'accelerator readings in m/s2',
|
|
@@ -81,7 +82,9 @@ my %addUnits = (
|
|
|
81
82
|
# ANGY (GPMF-GEOC) - seen 179.9 (fmt d, Max)
|
|
82
83
|
# ANGZ (GPMF-GEOC) - seen 0.152 (fmt d, Max)
|
|
83
84
|
ALLD => 'AutoLowLightDuration', #1 (gpmd) (untested)
|
|
84
|
-
# APTO (GPMF) - seen: 'RAW', 'DYNM' (fmt c)
|
|
85
|
+
# APTO (GPMF) - seen: 'OFF', 'RAW', 'DYNM' (fmt c)
|
|
86
|
+
# ARUW (GPMF) - seen: 1.14285719394684 (fmt f)
|
|
87
|
+
# ARWA (GPMF) - seen: 1.14285719394684 (fmt f)
|
|
85
88
|
ATTD => { #PH (Karma)
|
|
86
89
|
Name => 'Attitude',
|
|
87
90
|
# UNIT=s,rad,rad,rad,rad/s,rad/s,rad/s,
|
|
@@ -96,8 +99,10 @@ my %addUnits = (
|
|
|
96
99
|
# SCAL=1000 1 1 1 1
|
|
97
100
|
Binary => 1,
|
|
98
101
|
},
|
|
102
|
+
# AUBT (GPMF) - seen: ''N' (type c)
|
|
99
103
|
AUDO => 'AudioSetting', #PH (GPMF - seen: 'WIND', fmt c)
|
|
100
104
|
# AUPT (GPMF) - seen: 'N','Y' (fmt c)
|
|
105
|
+
# BITR (GPMF) - seen: 'STANDARD' (fmt c)
|
|
101
106
|
BPOS => { #PH (Karma)
|
|
102
107
|
Name => 'Controller',
|
|
103
108
|
Unknown => 1,
|
|
@@ -111,9 +116,16 @@ my %addUnits = (
|
|
|
111
116
|
# CALH (GPMF-GEOC) - seen 3040 (fmt L, Max)
|
|
112
117
|
# CALW (GPMF-GEOC) - seen 4056 (fmt L, Max)
|
|
113
118
|
CASN => 'CameraSerialNumber', #PH (GPMF - seen: 'C3221324545448', fmt c)
|
|
119
|
+
# CDAT (GPMF) - seen: 1732152823 (fmt J)
|
|
120
|
+
# CDTM (GPMF) - seen: 0 (fmt L)
|
|
114
121
|
# CINF (GPMF) - seen: 0x67376be7709bc8876a8baf3940908618, 0xe230988539b30cf5f016627ae8fc5395,
|
|
115
122
|
# 0x8bcbe424acc5b37d7d77001635198b3b (fmt B) (Camera INFormation?)
|
|
123
|
+
# CLDP (GPMF) - seen: 'Y' (fmt c)
|
|
124
|
+
# CLKC (GPMF) - seen: 0 (fmt L)
|
|
125
|
+
# CLKS (GPMF) - seen: 2 (fmt B)
|
|
116
126
|
# CMOD (GPMF) - seen: 12,13,17 [12 360 video, 13 time-laps video, 17 JPEG] (fmt B)
|
|
127
|
+
# CPID (GPMF) - seen: '1194885996 3387225026 733916448 2433577768' (fmt L)
|
|
128
|
+
# CPIN (GPMF) - seen: 1
|
|
117
129
|
# CRTX (GPMF-BACK/FRNT) - double[1]
|
|
118
130
|
# CRTY (GPMF-BACK/FRNT) - double[1]
|
|
119
131
|
CSEN => { #PH (Karma)
|
|
@@ -123,6 +135,7 @@ my %addUnits = (
|
|
|
123
135
|
# SCAL=1000 1 1 1 1 1 1 1 1 1 1
|
|
124
136
|
Binary => 1,
|
|
125
137
|
},
|
|
138
|
+
# CTRL (GPMF) - seen: 'Pro' (fmt c)
|
|
126
139
|
CYTS => { #PH (Karma)
|
|
127
140
|
Name => 'CoyoteStatus',
|
|
128
141
|
# UNIT=s,,,,,rad,rad,rad,,
|
|
@@ -141,6 +154,8 @@ my %addUnits = (
|
|
|
141
154
|
# (Max) DVID='FRNT',DVNM='Front Lens',KLNS,CTRX,CTRY,MFOV,SFTR
|
|
142
155
|
# (Max) DVID='HLMT',DVNM='Highlights'
|
|
143
156
|
},
|
|
157
|
+
# DNSC (GPMF) - seen: 'HIGH' (fmt c)
|
|
158
|
+
# DUST (GPMF) - seen: 'NO_LIMIT' (fmt c)
|
|
144
159
|
# DVID (GPMF) - DeviceID; seen: 1 (fmt L), HLMT (fmt F), GEOC (fmt F), 'BACK' (fmt F, Max)
|
|
145
160
|
DVID => { Name => 'DeviceID', Unknown => 1 }, #2 (gpmd)
|
|
146
161
|
# DVNM (GPMF) seen: 'Video Global Settings' (fmt c), 'Highlights' (fmt c), 'Geometry Calibrations' (Max)
|
|
@@ -150,6 +165,7 @@ my %addUnits = (
|
|
|
150
165
|
Name => 'DigitalZoom',
|
|
151
166
|
PrintConv => { N => 'No', Y => 'Yes' },
|
|
152
167
|
},
|
|
168
|
+
# DZMX (GPMF) - seen: 1.39999997615814 (fmt f)
|
|
153
169
|
# DZST (GPMF) - seen: 0 (fmt L) (something to do with digital zoom maybe?)
|
|
154
170
|
EISA => { #PH (GPMF) - seen: 'Y','N','HS EIS','N/A' (fmt c) [N was for a time-lapse video]
|
|
155
171
|
Name => 'ElectronicImageStabilization',
|
|
@@ -188,10 +204,20 @@ my %addUnits = (
|
|
|
188
204
|
},
|
|
189
205
|
GPS5 => { #2 (gpmd)
|
|
190
206
|
Name => 'GPSInfo',
|
|
207
|
+
# UNIT=deg,deg,m,m/s,m/s
|
|
208
|
+
# TYPE=l
|
|
191
209
|
# SCAL=10000000,10000000,1000,1000,100
|
|
192
210
|
RawConv => '$val', # necessary to use scaled value instead of raw data as subdir data
|
|
193
211
|
SubDirectory => { TagTable => 'Image::ExifTool::GoPro::GPS5' },
|
|
194
212
|
},
|
|
213
|
+
GPS9 => { #PH (gpmd, Hero 13)
|
|
214
|
+
Name => 'GPSInfo9',
|
|
215
|
+
# UNIT=deg,deg,m,m/s,m/s,,s,,
|
|
216
|
+
# TYPE=lllllllSS
|
|
217
|
+
# SCAL=10000000 10000000 1000 1000 100 1 1000 100 1
|
|
218
|
+
RawConv => '$val', # necessary to use scaled value instead of raw data as subdir data
|
|
219
|
+
SubDirectory => { TagTable => 'Image::ExifTool::GoPro::GPS9' },
|
|
220
|
+
},
|
|
195
221
|
GPSF => { #2 (gpmd)
|
|
196
222
|
Name => 'GPSMeasureMode',
|
|
197
223
|
PrintConv => {
|
|
@@ -216,7 +242,10 @@ my %addUnits = (
|
|
|
216
242
|
Notes => 'gyroscope readings in rad/s',
|
|
217
243
|
Binary => 1,
|
|
218
244
|
},
|
|
245
|
+
# HCTL (GPMF) - seen: "Off" (fmt c)
|
|
246
|
+
# HDRV (GPMF) - seen: "N" (fmt c)
|
|
219
247
|
# HFLG (APP6) - seen: 0
|
|
248
|
+
# HSGT (GPMF) - seen: 'OFF' (fmt c)
|
|
220
249
|
ISOE => 'ISOSpeeds', #PH (gpmd)
|
|
221
250
|
ISOG => { #2 (gpmd)
|
|
222
251
|
Name => 'ImageSensorGain',
|
|
@@ -232,6 +261,7 @@ my %addUnits = (
|
|
|
232
261
|
},
|
|
233
262
|
# KLNS (GPMF-BACK/FRNT) - double[5] (fmt d, Max)
|
|
234
263
|
# LINF (GPMF) - seen: LAJ7061916601668,C3341326002180,C33632245450981 (fmt c) (Lens INFormation?)
|
|
264
|
+
# LMOD (GPMF) - seen: 'NONE' (fmt F)
|
|
235
265
|
LNED => { #PH (Karma)
|
|
236
266
|
Name => 'LocalPositionNED',
|
|
237
267
|
# UNIT=s,m,m,m,m/s,m/s,m/s
|
|
@@ -240,14 +270,20 @@ my %addUnits = (
|
|
|
240
270
|
Binary => 1,
|
|
241
271
|
},
|
|
242
272
|
MAGN => 'Magnetometer', #1 (gpmd) (units of uT)
|
|
273
|
+
# MAPX (GPMF) - seen: 1 (fmt f)
|
|
274
|
+
# MAPY (GPMF) - seen: 1 (fmt f)
|
|
243
275
|
# MFOV (GPMF-BACK/FRNT) - seen: 100 (fmt d, Max)
|
|
244
276
|
MINF => { #PH (GPMF - seen: HERO6 Black, fmt c)
|
|
245
277
|
Name => 'Model',
|
|
246
278
|
Groups => { 2 => 'Camera' },
|
|
247
279
|
Description => 'Camera Model Name',
|
|
248
280
|
},
|
|
281
|
+
# MMOD (GPMF) - seen: 'STEREO' (fmt c)
|
|
249
282
|
# MTYP (GPMF) - seen: 0,1,5,11 [1 for time-lapse video, 5 for 360 video, 11 for JPEG] (fmt B)
|
|
250
283
|
# MUID (GPMF) - seen: 3882563431 2278071152 967805802 411471936 0 0 0 0 (fmt L)
|
|
284
|
+
# MXCF (GPMF) - seen: 'x1' (fmt c)
|
|
285
|
+
# MYCF (GPMF) - seen: 'y1' (fmt c)
|
|
286
|
+
# ORDP (GPMF) - seen: 'Y' (fmt c)
|
|
251
287
|
OREN => { #PH (GPMF - seen: 'U', fmt c)
|
|
252
288
|
Name => 'AutoRotation',
|
|
253
289
|
PrintConv => {
|
|
@@ -258,11 +294,16 @@ my %addUnits = (
|
|
|
258
294
|
},
|
|
259
295
|
# (most of the "P" tags are ProTune settings - PH)
|
|
260
296
|
PHDR => 'HDRSetting', #PH (APP6 - seen: 0)
|
|
297
|
+
# PIMD (GPMF) - seen: 'AUTO' (fmt c)
|
|
261
298
|
PIMN => 'AutoISOMin', #PH (GPMF - seen: 100, fmt L)
|
|
262
299
|
PIMX => 'AutoISOMax', #PH (GPMF - seen: 1600, fmt L)
|
|
300
|
+
# POLY (GPMF) - seen: '0 2.11120247840881 0.14325800538063 -1.030...' (fmt f)
|
|
263
301
|
# PRAW (APP6) - seen: 0, 'N', 'Y' (fmt c)
|
|
302
|
+
# PRCN (GPMF) - seen: 65 zeros (fmt B)
|
|
264
303
|
PRES => 'PhotoResolution', #PH (APP6 - seen: '12MP_W')
|
|
265
304
|
# PRJT (APP6) - seen: 'GPRO','EACO' (fmt F, Hero8, Max)
|
|
305
|
+
# PRNA (GPMF) - seen 10 (fmt B)
|
|
306
|
+
# PRNU (GPMF) - seen 0 (fmt B)
|
|
266
307
|
PRTN => { #PH (GPMF - seen: 'N', fmt c)
|
|
267
308
|
Name => 'ProTune',
|
|
268
309
|
PrintConv => {
|
|
@@ -275,6 +316,9 @@ my %addUnits = (
|
|
|
275
316
|
PTSH => 'Sharpness', #PH (GPMF - seen: 'HIGH', fmt c)
|
|
276
317
|
PTWB => 'WhiteBalance', #PH (GPMF - seen: 'AUTO', fmt c)
|
|
277
318
|
# PVUL (APP6) - seen: 'F' (fmt c, Hero8, Max)
|
|
319
|
+
# PWPR (GPMF) - seen: 'PERFORMANCE' (fmt c)
|
|
320
|
+
# PYCF (GPMF) - seen: '[r0,r1,r2,r3,r4,r5,r6]' (fmt c)
|
|
321
|
+
# RAMP (GPMF) - seen: empty string (fmt c)
|
|
278
322
|
RATE => 'Rate', #PH (GPMF - seen: '0_5SEC', fmt c; APP6 - seen: '4_1SEC')
|
|
279
323
|
RMRK => { #2 (gpmd)
|
|
280
324
|
Name => 'Comments',
|
|
@@ -284,6 +328,7 @@ my %addUnits = (
|
|
|
284
328
|
Name => 'ScaleFactor',
|
|
285
329
|
Unknown => 1,
|
|
286
330
|
},
|
|
331
|
+
# SCAP (GPMF) - seen: 'N' (fmt c)
|
|
287
332
|
SCPR => { #PH (Karma) [stream was empty]
|
|
288
333
|
Name => 'ScaledPressure',
|
|
289
334
|
# UNIT=s,Pa,Pa,degC
|
|
@@ -291,6 +336,7 @@ my %addUnits = (
|
|
|
291
336
|
# SCAL=1000 0.00999999977648258 0.00999999977648258 100
|
|
292
337
|
%addUnits,
|
|
293
338
|
},
|
|
339
|
+
# SCTM (GPMF) - seen 0 (fmt L)
|
|
294
340
|
# SFTR (GPMF-BACK/FRNT) - seen 0.999,1.00004 (fmt d, Max)
|
|
295
341
|
# SHFX (GPMF-GEOC) - seen 22.92 (fmt d, Max)
|
|
296
342
|
# SHFY (GPMF-GEOC) - seen 0.123 (fmt d, Max)
|
|
@@ -355,6 +401,10 @@ my %addUnits = (
|
|
|
355
401
|
# TOCK => { Name => 'OutTime', Unknown => 1, ValueConv => '$val/1000' }, #1 (gpmd)
|
|
356
402
|
TSMP => { Name => 'TotalSamples', Unknown => 1 }, #2 (gpmd)
|
|
357
403
|
TYPE => { Name => 'StructureType', Unknown => 1 }, #2 (gpmd,GPMF - eg 'LLLllfFff', fmt c)
|
|
404
|
+
TZON => { # (GPMF) - seen: 60 (fmt s)
|
|
405
|
+
Name => 'TimeZone',
|
|
406
|
+
PrintConv => 'Image::ExifTool::TimeZoneString($val)',
|
|
407
|
+
},
|
|
358
408
|
UNIT => { #2 (gpmd) alternative units
|
|
359
409
|
Name => 'Units',
|
|
360
410
|
Unknown => 1,
|
|
@@ -373,6 +423,7 @@ my %addUnits = (
|
|
|
373
423
|
},
|
|
374
424
|
},
|
|
375
425
|
# VLTA (GPMF) - seen: 78 ('N') (fmt B -- wrong format?)
|
|
426
|
+
VFPS => { Name => 'VideoFrameRate', PrintConv => '$val=~s( )(/);$val' }, #PH (GPMF, fmt L)
|
|
376
427
|
VFRH => { #PH (Karma)
|
|
377
428
|
Name => 'VisualFlightRulesHUD',
|
|
378
429
|
BinaryData => 1,
|
|
@@ -380,13 +431,17 @@ my %addUnits = (
|
|
|
380
431
|
# TYPE=ffffsS
|
|
381
432
|
},
|
|
382
433
|
# VLTE (GPMF) - seen: 'Y','N' (fmt c)
|
|
434
|
+
VRES => { Name => 'VideoFrameSize', PrintConv => '$val=~s/ /x/;$val' }, #PH (GPMF, fmt L)
|
|
383
435
|
WBAL => 'ColorTemperatures', #PH (gpmd)
|
|
384
436
|
WRGB => { #PH (gpmd)
|
|
385
437
|
Name => 'WhiteBalanceRGB',
|
|
386
438
|
Binary => 1,
|
|
387
439
|
},
|
|
388
440
|
# ZFOV (APP6,GPMF) - seen: 148.34, 0 (fmt f, Hero8, Max)
|
|
389
|
-
#
|
|
441
|
+
# ZMPL (GPMF) - seen: 0.652929663658142 (fmt f)
|
|
442
|
+
#
|
|
443
|
+
# the following ref forum12825
|
|
444
|
+
#
|
|
390
445
|
MUID => {
|
|
391
446
|
Name => 'MediaUniqueID',
|
|
392
447
|
PrintConv => q{
|
|
@@ -418,7 +473,7 @@ my %addUnits = (
|
|
|
418
473
|
YAVG => 'LumaAverage',
|
|
419
474
|
);
|
|
420
475
|
|
|
421
|
-
# GoPro GPS5 tags (ref 2) (Hero5,Hero6)
|
|
476
|
+
# GoPro GPS5 tags (ref 2) (Hero5,Hero6,Hero9)
|
|
422
477
|
%Image::ExifTool::GoPro::GPS5 = (
|
|
423
478
|
PROCESS_PROC => \&ProcessString,
|
|
424
479
|
GROUPS => { 1 => 'GoPro', 2 => 'Location' },
|
|
@@ -435,8 +490,65 @@ my %addUnits = (
|
|
|
435
490
|
Name => 'GPSAltitude',
|
|
436
491
|
PrintConv => '"$val m"',
|
|
437
492
|
},
|
|
438
|
-
3 =>
|
|
439
|
-
|
|
493
|
+
3 => {
|
|
494
|
+
Name => 'GPSSpeed',
|
|
495
|
+
Notes => 'stored as m/s but converted to km/h when extracted',
|
|
496
|
+
ValueConv => '$val * 3.6',
|
|
497
|
+
},
|
|
498
|
+
4 => {
|
|
499
|
+
Name => 'GPSSpeed3D',
|
|
500
|
+
Notes => 'stored as m/s but converted to km/h when extracted',
|
|
501
|
+
ValueConv => '$val * 3.6',
|
|
502
|
+
},
|
|
503
|
+
);
|
|
504
|
+
|
|
505
|
+
# GoPro GPS9 tags (Hero13)
|
|
506
|
+
%Image::ExifTool::GoPro::GPS9 = (
|
|
507
|
+
PROCESS_PROC => \&ProcessString,
|
|
508
|
+
GROUPS => { 1 => 'GoPro', 2 => 'Location' },
|
|
509
|
+
VARS => { HEX_ID => 0, ID_LABEL => 'Index' },
|
|
510
|
+
0 => { # (unit='deg')
|
|
511
|
+
Name => 'GPSLatitude',
|
|
512
|
+
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")',
|
|
513
|
+
},
|
|
514
|
+
1 => { # (unit='deg')
|
|
515
|
+
Name => 'GPSLongitude',
|
|
516
|
+
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")',
|
|
517
|
+
},
|
|
518
|
+
2 => { # (unit='m')
|
|
519
|
+
Name => 'GPSAltitude',
|
|
520
|
+
PrintConv => '"$val m"',
|
|
521
|
+
},
|
|
522
|
+
3 => {
|
|
523
|
+
Name => 'GPSSpeed',
|
|
524
|
+
Notes => 'stored as m/s but converted to km/h when extracted',
|
|
525
|
+
ValueConv => '$val * 3.6',
|
|
526
|
+
},
|
|
527
|
+
4 => {
|
|
528
|
+
Name => 'GPSSpeed3D',
|
|
529
|
+
Notes => 'stored as m/s but converted to km/h when extracted',
|
|
530
|
+
ValueConv => '$val * 3.6',
|
|
531
|
+
},
|
|
532
|
+
5 => { # days since 2000
|
|
533
|
+
Name => 'GPSDays',
|
|
534
|
+
RawConv => '$$self{GPSDays} = $val; undef',
|
|
535
|
+
Hidden => 1,
|
|
536
|
+
},
|
|
537
|
+
6 => { # seconds of date/time
|
|
538
|
+
Name => 'GPSDateTime',
|
|
539
|
+
Groups => { 2 => 'Time' },
|
|
540
|
+
# (10957 days from Jan 1 1970 to Jan 1 2000)
|
|
541
|
+
RawConv => 'ConvertUnixTime(($$self{GPSDays} + 10957) * 24 * 3600 + $val, undef, 3)',
|
|
542
|
+
PrintConv => '$self->ConvertDateTime($val)',
|
|
543
|
+
},
|
|
544
|
+
7 => 'GPSDOP',
|
|
545
|
+
8 => {
|
|
546
|
+
Name => 'GPSMeasureMode', #PH (NC)
|
|
547
|
+
PrintConv => {
|
|
548
|
+
2 => '2-Dimensional Measurement',
|
|
549
|
+
3 => '3-Dimensional Measurement',
|
|
550
|
+
},
|
|
551
|
+
},
|
|
440
552
|
);
|
|
441
553
|
|
|
442
554
|
# GoPro GPRI tags (ref PH) (Karma)
|
|
@@ -604,7 +716,7 @@ sub ScaleValues($$)
|
|
|
604
716
|
sub AddUnits($$$)
|
|
605
717
|
{
|
|
606
718
|
my ($et, $val, $tag) = @_;
|
|
607
|
-
if ($et and $$et{TAG_EXTRA}{$tag}
|
|
719
|
+
if ($et and $$et{TAG_EXTRA}{$tag}{Units}) {
|
|
608
720
|
my $u = $$et{TAG_EXTRA}{$tag}{Units};
|
|
609
721
|
$u = [ $u ] unless ref $u eq 'ARRAY';
|
|
610
722
|
my @a = split ' ', $val;
|
|
@@ -748,7 +860,7 @@ metadata from GoPro MP4 videos.
|
|
|
748
860
|
|
|
749
861
|
=head1 AUTHOR
|
|
750
862
|
|
|
751
|
-
Copyright 2003-
|
|
863
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
752
864
|
|
|
753
865
|
This library is free software; you can redistribute it and/or modify it
|
|
754
866
|
under the same terms as Perl itself.
|
|
@@ -1123,7 +1123,7 @@ information from H.264 video streams.
|
|
|
1123
1123
|
|
|
1124
1124
|
=head1 AUTHOR
|
|
1125
1125
|
|
|
1126
|
-
Copyright 2003-
|
|
1126
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
1127
1127
|
|
|
1128
1128
|
This library is free software; you can redistribute it and/or modify it
|
|
1129
1129
|
under the same terms as Perl itself.
|
|
@@ -225,7 +225,7 @@ sub ProcessHP($$$)
|
|
|
225
225
|
# scan for other tag ID's
|
|
226
226
|
foreach $tagID (sort(TagTableKeys($tagTablePtr))) {
|
|
227
227
|
next if $tagID eq 'PreviewImage';
|
|
228
|
-
next unless $$dataPt =~ /$tagID:\s*([\x20-\
|
|
228
|
+
next unless $$dataPt =~ /$tagID:\s*([\x20-\x7e]+)/i;
|
|
229
229
|
$et->HandleTag($tagTablePtr, $tagID, $1);
|
|
230
230
|
}
|
|
231
231
|
return 1;
|
|
@@ -250,7 +250,7 @@ Hewlett-Packard maker notes.
|
|
|
250
250
|
|
|
251
251
|
=head1 AUTHOR
|
|
252
252
|
|
|
253
|
-
Copyright 2003-
|
|
253
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
254
254
|
|
|
255
255
|
This library is free software; you can redistribute it and/or modify it
|
|
256
256
|
under the same terms as Perl itself.
|
|
@@ -555,7 +555,7 @@ meta information from HTML documents.
|
|
|
555
555
|
|
|
556
556
|
=head1 AUTHOR
|
|
557
557
|
|
|
558
|
-
Copyright 2003-
|
|
558
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
559
559
|
|
|
560
560
|
This library is free software; you can redistribute it and/or modify it
|
|
561
561
|
under the same terms as Perl itself.
|
|
@@ -920,7 +920,7 @@ page.
|
|
|
920
920
|
|
|
921
921
|
=head1 AUTHOR
|
|
922
922
|
|
|
923
|
-
Copyright 2003-
|
|
923
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
924
924
|
|
|
925
925
|
This library is free software; you can redistribute it and/or modify it
|
|
926
926
|
under the same terms as Perl itself.
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
# 5) http://www.color.org/icc_specs2.xalter (approved revisions, 2010-07-16)
|
|
13
13
|
# 6) Eef Vreeland private communication
|
|
14
14
|
# 7) https://color.org/specification/ICC.2-2019.pdf
|
|
15
|
+
# 8) https://www.color.org/specification/ICC.1-2022-05.pdf
|
|
15
16
|
#
|
|
16
17
|
# Notes: The ICC profile information is different: the format of each
|
|
17
18
|
# tag is embedded in the information instead of in the directory
|
|
@@ -25,7 +26,7 @@ use strict;
|
|
|
25
26
|
use vars qw($VERSION);
|
|
26
27
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
27
28
|
|
|
28
|
-
$VERSION = '1.
|
|
29
|
+
$VERSION = '1.41';
|
|
29
30
|
|
|
30
31
|
sub ProcessICC($$);
|
|
31
32
|
sub ProcessICC_Profile($$$);
|
|
@@ -367,6 +368,7 @@ my %manuSig = ( #6
|
|
|
367
368
|
Groups => { 2 => 'Time' },
|
|
368
369
|
PrintConv => '$self->ConvertDateTime($val)',
|
|
369
370
|
},
|
|
371
|
+
|
|
370
372
|
targ => {
|
|
371
373
|
Name => 'CharTarget',
|
|
372
374
|
ValueConv => '$val=~s/\0.*//; length $val > 128 ? \$val : $val',
|
|
@@ -493,6 +495,10 @@ my %manuSig = ( #6
|
|
|
493
495
|
},
|
|
494
496
|
},
|
|
495
497
|
ciis => 'ColorimetricIntentImageState', #5
|
|
498
|
+
cicp => { #8 (Coding-independent Code Points)
|
|
499
|
+
Name => 'ColorRepresentation',
|
|
500
|
+
SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::ColorRep' },
|
|
501
|
+
},
|
|
496
502
|
scoe => 'SceneColorimetryEstimates', #5
|
|
497
503
|
sape => 'SceneAppearanceEstimates', #5
|
|
498
504
|
fpce => 'FocalPlaneColorimetryEstimates', #5
|
|
@@ -628,6 +634,7 @@ my %manuSig = ( #6
|
|
|
628
634
|
s2cp => 'StandardToCustomPcc',
|
|
629
635
|
smap => 'SurfaceMap',
|
|
630
636
|
# smwp ? (seen in some v5 samples [was a mistake in sample production])
|
|
637
|
+
hdgm => { Name => 'HDGainMapInfo', Binary => 1 }, #PH
|
|
631
638
|
|
|
632
639
|
# the following entry represents the ICC profile header, and doesn't
|
|
633
640
|
# exist as a tag in the directory. It is only in this table to provide
|
|
@@ -747,6 +754,78 @@ my %manuSig = ( #6
|
|
|
747
754
|
},
|
|
748
755
|
);
|
|
749
756
|
|
|
757
|
+
# Coding-independent code points (cicp) definition
|
|
758
|
+
# (NOTE: conversions are the same as Image::ExifTool::QuickTime::ColorRep tags)
|
|
759
|
+
%Image::ExifTool::ICC_Profile::ColorRep = (
|
|
760
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
761
|
+
GROUPS => { 0 => 'ICC_Profile', 1 => 'ICC-cicp', 2 => 'Image' },
|
|
762
|
+
8 => {
|
|
763
|
+
Name => 'ColorPrimaries',
|
|
764
|
+
PrintConv => {
|
|
765
|
+
1 => 'BT.709',
|
|
766
|
+
2 => 'Unspecified',
|
|
767
|
+
4 => 'BT.470 System M (historical)',
|
|
768
|
+
5 => 'BT.470 System B, G (historical)',
|
|
769
|
+
6 => 'BT.601',
|
|
770
|
+
7 => 'SMPTE 240',
|
|
771
|
+
8 => 'Generic film (color filters using illuminant C)',
|
|
772
|
+
9 => 'BT.2020, BT.2100',
|
|
773
|
+
10 => 'SMPTE 428 (CIE 1931 XYZ)', #forum14766
|
|
774
|
+
11 => 'SMPTE RP 431-2',
|
|
775
|
+
12 => 'SMPTE EG 432-1',
|
|
776
|
+
22 => 'EBU Tech. 3213-E',
|
|
777
|
+
},
|
|
778
|
+
},
|
|
779
|
+
9 => {
|
|
780
|
+
Name => 'TransferCharacteristics',
|
|
781
|
+
PrintConv => {
|
|
782
|
+
0 => 'For future use (0)',
|
|
783
|
+
1 => 'BT.709',
|
|
784
|
+
2 => 'Unspecified',
|
|
785
|
+
3 => 'For future use (3)',
|
|
786
|
+
4 => 'BT.470 System M (historical)', # Gamma 2.2? (ref forum14960)
|
|
787
|
+
5 => 'BT.470 System B, G (historical)', # Gamma 2.8? (ref forum14960)
|
|
788
|
+
6 => 'BT.601',
|
|
789
|
+
7 => 'SMPTE 240 M',
|
|
790
|
+
8 => 'Linear',
|
|
791
|
+
9 => 'Logarithmic (100 : 1 range)',
|
|
792
|
+
10 => 'Logarithmic (100 * Sqrt(10) : 1 range)',
|
|
793
|
+
11 => 'IEC 61966-2-4',
|
|
794
|
+
12 => 'BT.1361',
|
|
795
|
+
13 => 'sRGB or sYCC',
|
|
796
|
+
14 => 'BT.2020 10-bit systems',
|
|
797
|
+
15 => 'BT.2020 12-bit systems',
|
|
798
|
+
16 => 'SMPTE ST 2084, ITU BT.2100 PQ',
|
|
799
|
+
17 => 'SMPTE ST 428',
|
|
800
|
+
18 => 'BT.2100 HLG, ARIB STD-B67',
|
|
801
|
+
},
|
|
802
|
+
},
|
|
803
|
+
10 => {
|
|
804
|
+
Name => 'MatrixCoefficients',
|
|
805
|
+
PrintConv => {
|
|
806
|
+
0 => 'Identity matrix',
|
|
807
|
+
1 => 'BT.709',
|
|
808
|
+
2 => 'Unspecified',
|
|
809
|
+
3 => 'For future use (3)',
|
|
810
|
+
4 => 'US FCC 73.628',
|
|
811
|
+
5 => 'BT.470 System B, G (historical)',
|
|
812
|
+
6 => 'BT.601',
|
|
813
|
+
7 => 'SMPTE 240 M',
|
|
814
|
+
8 => 'YCgCo',
|
|
815
|
+
9 => 'BT.2020 non-constant luminance, BT.2100 YCbCr',
|
|
816
|
+
10 => 'BT.2020 constant luminance',
|
|
817
|
+
11 => 'SMPTE ST 2085 YDzDx',
|
|
818
|
+
12 => 'Chromaticity-derived non-constant luminance',
|
|
819
|
+
13 => 'Chromaticity-derived constant luminance',
|
|
820
|
+
14 => 'BT.2100 ICtCp',
|
|
821
|
+
},
|
|
822
|
+
},
|
|
823
|
+
11 => {
|
|
824
|
+
Name => 'VideoFullRangeFlag',
|
|
825
|
+
PrintConv => { 0 => 'Limited', 1 => 'Full' },
|
|
826
|
+
},
|
|
827
|
+
);
|
|
828
|
+
|
|
750
829
|
# viewingConditionsType (view) definition
|
|
751
830
|
%Image::ExifTool::ICC_Profile::ViewingConditions = (
|
|
752
831
|
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
@@ -1357,7 +1436,7 @@ data created on one device into another device's native color space.
|
|
|
1357
1436
|
|
|
1358
1437
|
=head1 AUTHOR
|
|
1359
1438
|
|
|
1360
|
-
Copyright 2003-
|
|
1439
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
1361
1440
|
|
|
1362
1441
|
This library is free software; you can redistribute it and/or modify it
|
|
1363
1442
|
under the same terms as Perl itself.
|
|
@@ -121,7 +121,7 @@ information from Windows ICO (icon) and CUR (cursor) files.
|
|
|
121
121
|
|
|
122
122
|
=head1 AUTHOR
|
|
123
123
|
|
|
124
|
-
Copyright 2003-
|
|
124
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
125
125
|
|
|
126
126
|
This library is free software; you can redistribute it and/or modify it
|
|
127
127
|
under the same terms as Perl itself.
|