exiftool_vendored 13.10.0 → 13.14.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.
- checksums.yaml +4 -4
- data/bin/Changes +82 -19
- data/bin/MANIFEST +6 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +3 -3
- data/bin/arg_files/exif2xmp.args +4 -0
- data/bin/arg_files/xmp2exif.args +2 -1
- data/bin/build_geolocation +1 -1
- data/bin/exiftool +208 -150
- data/bin/lib/File/RandomAccess.pm +1 -1
- data/bin/lib/File/RandomAccess.pod +2 -2
- data/bin/lib/Image/ExifTool/AAC.pm +1 -1
- data/bin/lib/Image/ExifTool/AES.pm +1 -1
- data/bin/lib/Image/ExifTool/AFCP.pm +6 -6
- 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 +1 -1
- 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 +29 -18
- data/bin/lib/Image/ExifTool/CBOR.pm +1 -1
- data/bin/lib/Image/ExifTool/Canon.pm +8 -4
- 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 +1 -1
- 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 +150 -46
- 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 +123 -32
- data/bin/lib/Image/ExifTool/Exif.pm +7 -4
- 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 +1 -1
- 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/GM.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/Geolocation.pm +17 -8
- data/bin/lib/Image/ExifTool/Geotag.pm +1 -1
- 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 +8 -5
- 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 +5 -4
- data/bin/lib/Image/ExifTool/InDesign.pm +1 -1
- data/bin/lib/Image/ExifTool/InfiRay.pm +1 -1
- data/bin/lib/Image/ExifTool/JPEG.pm +6 -2
- 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 +1 -1
- 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 +1 -1
- 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/LigoGPS.pm +409 -0
- data/bin/lib/Image/ExifTool/Lytro.pm +1 -1
- data/bin/lib/Image/ExifTool/M2TS.pm +22 -13
- 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 +12 -4
- 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 +166 -35
- 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 +1 -1
- 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 +20 -2
- 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/Protobuf.pm +48 -20
- data/bin/lib/Image/ExifTool/Qualcomm.pm +1 -1
- data/bin/lib/Image/ExifTool/QuickTime.pm +206 -66
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +21 -303
- data/bin/lib/Image/ExifTool/README +4 -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 +2 -2
- 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 +1 -1
- 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 +3449 -3435
- data/bin/lib/Image/ExifTool/TagNames.pod +164 -47
- 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 +3 -3
- 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/Vivo.pm +124 -0
- data/bin/lib/Image/ExifTool/Vorbis.pm +1 -1
- data/bin/lib/Image/ExifTool/WPG.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 +1 -1
- data/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
- data/bin/lib/Image/ExifTool/WritePDF.pl +1 -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 +74 -43
- 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 +21 -16
- data/bin/lib/Image/ExifTool/XISF.pm +1 -1
- data/bin/lib/Image/ExifTool/XMP.pm +1 -1
- data/bin/lib/Image/ExifTool/XMP2.pl +1 -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 +34 -12
- data/bin/lib/Image/ExifTool.pod +57 -46
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +4 -2
@@ -29,6 +29,7 @@ sub Process360Fly($$$);
|
|
29
29
|
sub ProcessFMAS($$$);
|
30
30
|
sub ProcessWolfbox($$$);
|
31
31
|
sub ProcessCAMM($$$);
|
32
|
+
sub OrderCipherDigits($$$;$);
|
32
33
|
|
33
34
|
# QuickTime data types that have ExifTool equivalents
|
34
35
|
# (ref https://developer.apple.com/library/content/documentation/QuickTime/QTFF/Metadata/Metadata.html#//apple_ref/doc/uid/TP40000939-CH1-SW35)
|
@@ -110,7 +111,7 @@ my %insvLimit = (
|
|
110
111
|
The tags below are extracted from timed metadata in QuickTime and other
|
111
112
|
formats of video files when the ExtractEmbedded option is used. Although
|
112
113
|
most of these tags are combined into the single table below, ExifTool
|
113
|
-
currently reads
|
114
|
+
currently reads 100 different types of timed GPS metadata from video files.
|
114
115
|
},
|
115
116
|
VARS => { NO_ID => 1 },
|
116
117
|
GPSLatitude => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")', RawConv => '$$self{FoundGPSLatitude} = 1; $val' },
|
@@ -146,7 +147,7 @@ my %insvLimit = (
|
|
146
147
|
CameraDateTime=>{ PrintConv => '$self->ConvertDateTime($val)', Groups => { 2 => 'Time' } },
|
147
148
|
DateTimeStamp =>{ PrintConv => '$self->ConvertDateTime($val)', Groups => { 2 => 'Time' } },
|
148
149
|
VideoTimeStamp => { Groups => { 2 => 'Video' } },
|
149
|
-
Accelerometer=> { Notes => '3-axis acceleration in units of g' },
|
150
|
+
Accelerometer=> { Notes => '3-axis acceleration, usually in units of g' },
|
150
151
|
AccelerometerData => { },
|
151
152
|
AngularVelocity => { },
|
152
153
|
GSensor => { },
|
@@ -354,8 +355,7 @@ my %insvLimit = (
|
|
354
355
|
Unknown01 => { Unknown => 1 },
|
355
356
|
Unknown02 => { Unknown => 1 },
|
356
357
|
Unknown03 => { Unknown => 1 },
|
357
|
-
|
358
|
-
H => { Name => 'Unknown_H', Unknown => 1 }, # (from LIGOGPSINFO)
|
358
|
+
MagneticVariation => { }, # (from LIGOGPSINFO)
|
359
359
|
);
|
360
360
|
|
361
361
|
# tags found in 'camm' type 0 timed metadata (ref 4)
|
@@ -1512,7 +1512,7 @@ Sample: for ($i=0; ; ) {
|
|
1512
1512
|
# clean up
|
1513
1513
|
$raf->Seek($tell, 0); # restore original file position
|
1514
1514
|
delete $$et{DOC_NUM};
|
1515
|
-
$$et{HandlerType} =
|
1515
|
+
$$et{HandlerType} = '';
|
1516
1516
|
}
|
1517
1517
|
|
1518
1518
|
#------------------------------------------------------------------------------
|
@@ -1755,31 +1755,34 @@ sub ProcessFreeGPS($$$)
|
|
1755
1755
|
|
1756
1756
|
$debug and $et->FoundTag(GPSType => 5);
|
1757
1757
|
my $pos = length $1;
|
1758
|
-
# iiway s1 dual dash cam
|
1758
|
+
# iiway s1 dual dash cam - offset 16, encrypted and fuzzed with scale 1
|
1759
1759
|
# 0000: 00 00 40 00 66 72 65 65 47 50 53 20 f0 03 00 00 [..@.freeGPS ....]
|
1760
1760
|
# 0010: 4c 49 47 4f 47 50 53 49 4e 46 4f 00 00 00 00 05 [LIGOGPSINFO.....]
|
1761
1761
|
# 0020: 0a 00 00 00 23 23 23 23 6a 00 00 00 c0 20 20 20 [....####j.... ]
|
1762
1762
|
# 0030: 20 f0 12 10 12 22 e1 0e 10 12 2f 90 10 13 02 f2 [ ...."..../.....]
|
1763
|
-
#
|
1764
|
-
# 0000: 00 00 40 00 66 72 65 65 47 50 53 20 f0 03 00 00 [..@.freeGPS ....]
|
1765
|
-
# 0010: 4c 49 47 4f 47 50 53 49 4e 46 4f 00 00 00 00 05 [LIGOGPSINFO.....]
|
1766
|
-
# 0020: 00 00 00 00 23 23 23 23 69 00 00 00 c0 20 20 20 [....####i.... ]
|
1767
|
-
# 0030: 20 f0 12 10 12 23 e5 0e 10 12 2f 99 10 11 02 f2 [ ....#..../.....]
|
1768
|
-
# XGODY 12" 4K Dashcam
|
1763
|
+
# XGODY 12" 4K Dashcam - offset 16, encrypted and fuzzed with scale 1
|
1769
1764
|
# 0000: 00 00 00 a8 66 72 65 65 47 50 53 20 98 00 00 00 [....freeGPS ....]
|
1770
1765
|
# 0010: 4c 49 47 4f 47 50 53 49 4e 46 4f 00 00 00 00 05 [LIGOGPSINFO.....]
|
1771
1766
|
# 0020: cd 61 00 00 23 23 23 23 6d 00 00 00 c1 ec 41 20 [.a..####m.....A ]
|
1772
1767
|
# 0030: 20 f0 12 10 12 24 e5 0e 10 11 2f 92 10 12 00 f6 [ ....$..../.....]
|
1773
|
-
#
|
1768
|
+
# ABASK A8 4K Dashcam - offset 16, encrypted and fuzzed with scale 3
|
1769
|
+
# 0000: 00 00 40 00 66 72 65 65 47 50 53 20 f0 03 00 00 [..@.freeGPS ....]
|
1770
|
+
# 0010: 4c 49 47 4f 47 50 53 49 4e 46 4f 00 00 00 00 05 [LIGOGPSINFO.....]
|
1771
|
+
# 0020: 00 00 00 00 23 23 23 23 69 00 00 00 c0 20 20 20 [....####i.... ]
|
1772
|
+
# 0030: 20 f0 12 10 12 23 e5 0e 10 12 2f 99 10 11 02 f2 [ ....#..../.....]
|
1773
|
+
# Unknown dashcam (forum16060) - offset 16, enciphered and fuzzed with scale 1
|
1774
|
+
# 0000: 00 00 40 00 66 72 65 65 47 50 53 20 98 00 00 00 [..@.freeGPS ....]
|
1775
|
+
# 0010: 4c 49 47 4f 47 50 53 49 4e 46 4f 00 00 00 00 0d [LIGOGPSINFO.....]
|
1776
|
+
# 0020: 0a 00 00 00 23 23 23 23 3b 00 a0 34 46 44 46 31 [....####;..4FDF1]
|
1777
|
+
# 0030: 2f 44 39 2f 45 38 20 44 3d 4c 47 4a 4c 39 38 20 [/D9/E8 D=LGJL98 ]
|
1778
|
+
# Rexing dashcam V1GW-4K - offset 48, encrypted and fuzzed with scale 1
|
1774
1779
|
# 0000: 00 00 40 00 66 72 65 65 47 50 53 20 f0 03 00 00 [..@.freeGPS ....]
|
1775
1780
|
# 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
|
1776
1781
|
# 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
|
1777
1782
|
# 0030: 4c 49 47 4f 47 50 53 49 4e 46 4f 00 00 00 00 05 [LIGOGPSINFO.....]
|
1778
1783
|
# 0040: 01 00 00 00 23 23 23 23 73 00 00 00 c0 20 20 20 [....####s.... ]
|
1779
1784
|
# 0050: 20 f0 12 10 12 23 e5 0e 10 12 2f 95 10 12 01 f3 [ ....#..../.....]
|
1780
|
-
#
|
1781
|
-
# 0070: 13 22 b3 16 10 01 fb 76 18 10 24 fa 0e 11 10 22 [.".....v..$...."]
|
1782
|
-
# Kingslim D4 dashcam
|
1785
|
+
# Kingslim D4 dashcam - offset 80, encrypted and fuzzed with scale 1
|
1783
1786
|
# 0000: 0a 00 00 00 0b 00 00 00 07 00 00 00 e5 07 00 00 [................]
|
1784
1787
|
# 0010: 06 00 00 00 03 00 00 00 41 4e 57 31 91 52 83 45 [........ANW1.R.E]
|
1785
1788
|
# 0020: 15 70 fe c5 29 5c c3 41 ae c7 af 42 00 00 d1 be [.p..)\.A...B....]
|
@@ -1792,7 +1795,7 @@ sub ProcessFreeGPS($$$)
|
|
1792
1795
|
# (this is weak, but the only difference I could find between these 2 headers)
|
1793
1796
|
# (NOTE: ../testpics/gps_video/forum16229.mp4 uses this word for a counter!)
|
1794
1797
|
$$et{LigoGPSScale} = 3 if $pos == 16 and $$dataPt =~ /^.{12}\xf0\x03\0\0.{16}\0{4}/s;
|
1795
|
-
ProcessLigoGPS($et, \%dirInfo, $tagTbl);
|
1798
|
+
Image::ExifTool::LigoGPS::ProcessLigoGPS($et, \%dirInfo, $tagTbl);
|
1796
1799
|
$done = 1;
|
1797
1800
|
|
1798
1801
|
# also... when offset is 0x50 (Kingslim), the GPS also exists in this format:
|
@@ -2735,291 +2738,6 @@ sub Process_nbmt($$$)
|
|
2735
2738
|
return 1;
|
2736
2739
|
}
|
2737
2740
|
|
2738
|
-
#------------------------------------------------------------------------------
|
2739
|
-
# Un-do LIGOGPS fuzzing
|
2740
|
-
# Inputs: 0) fuzzed latitude, 1) fuzzed longitude, 2) scale factor
|
2741
|
-
# Returns: 0) latitude, 1) longitude
|
2742
|
-
sub UnfuzzLigoGPS($$$)
|
2743
|
-
{
|
2744
|
-
my ($lat, $lon, $scl) = @_;
|
2745
|
-
my $lat2 = int($lat / 10) * 10;
|
2746
|
-
my $lon2 = int($lon / 10) * 10;
|
2747
|
-
return($lat2 + ($lon - $lon2) * $scl, $lon2 + ($lat - $lat2) * $scl);
|
2748
|
-
}
|
2749
|
-
|
2750
|
-
#------------------------------------------------------------------------------
|
2751
|
-
# Decrypt LIGOGPSINFO record (starting with "####")
|
2752
|
-
# Inputs: 0) encrypted GPS record incuding 8-byte header
|
2753
|
-
# Returns: decrypted record including 4-byte uint32 header, or undef on error
|
2754
|
-
sub DecryptLigoGPS($)
|
2755
|
-
{
|
2756
|
-
my $str = shift;
|
2757
|
-
my $num = unpack('x4V',$str);
|
2758
|
-
return undef if $num < 4;
|
2759
|
-
$num = 0x84 if $num > 0x84; # (be safe)
|
2760
|
-
my @in = unpack("x8C$num",$str);
|
2761
|
-
my @out;
|
2762
|
-
while (@in) {
|
2763
|
-
my $b = shift @in;
|
2764
|
-
my $steeringBits = $b & 0xe0;
|
2765
|
-
if ($steeringBits >= 0xc0) {
|
2766
|
-
return undef if @in < 4;
|
2767
|
-
push @out, (shift(@in) | $b & 0x01) ^ 0x20,
|
2768
|
-
(shift(@in) | $b & 0x02) ^ 0x20,
|
2769
|
-
(shift(@in) | $b & 0x0c) ^ 0x20,
|
2770
|
-
shift(@in) ^ 0x20 | $b & 0x30;
|
2771
|
-
} elsif ($steeringBits >= 0x40) {
|
2772
|
-
return undef if @in < 3;
|
2773
|
-
if ($steeringBits == 0x40) {
|
2774
|
-
push @out, 0x20,
|
2775
|
-
(shift(@in) | $b & 0x01) ^ 0x20,
|
2776
|
-
(shift(@in) | $b & 0x06) ^ 0x20,
|
2777
|
-
(shift(@in) | $b & 0x18) ^ 0x20;
|
2778
|
-
} elsif ($steeringBits == 0x60) {
|
2779
|
-
push @out, (shift(@in) | $b & 0x03) ^ 0x20,
|
2780
|
-
0x20,
|
2781
|
-
(shift(@in) | $b & 0x04) ^ 0x20,
|
2782
|
-
(shift(@in) | $b & 0x18) ^ 0x20;
|
2783
|
-
} elsif ($steeringBits == 0x80) {
|
2784
|
-
push @out, (shift(@in) | $b & 0x03) ^ 0x20,
|
2785
|
-
(shift(@in) | $b & 0x0c) ^ 0x20,
|
2786
|
-
0x20,
|
2787
|
-
(shift(@in) | $b & 0x10) ^ 0x20;
|
2788
|
-
} else {
|
2789
|
-
push @out, (shift(@in) | $b & 0x01) ^ 0x20,
|
2790
|
-
(shift(@in) | $b & 0x06) ^ 0x20,
|
2791
|
-
(shift(@in) | $b & 0x18) ^ 0x20,
|
2792
|
-
0x20;
|
2793
|
-
}
|
2794
|
-
} elsif ($steeringBits == 0x00) {
|
2795
|
-
return undef if @in < 1;
|
2796
|
-
push @out, shift(@in) | $b & 0x13;
|
2797
|
-
} else {
|
2798
|
-
return undef; # (shouldn't happen)
|
2799
|
-
}
|
2800
|
-
}
|
2801
|
-
return pack 'C*', @out;
|
2802
|
-
}
|
2803
|
-
|
2804
|
-
#------------------------------------------------------------------------------
|
2805
|
-
# Decipher and parse LIGOGPSINFO record (starting with "####")
|
2806
|
-
# Inputs: 0) ExifTool ref, 1) enciphered string, 2) tag table ref
|
2807
|
-
# Returns: true if this looked like an enciphered string
|
2808
|
-
# Notes: handles contained tags, but may defer handling until full cipher is known
|
2809
|
-
sub DecipherLigoGPS($$$)
|
2810
|
-
{
|
2811
|
-
my ($et, $str, $tagTbl) = @_;
|
2812
|
-
|
2813
|
-
# (enciphered characters must be in the range 0x30-0x5f ('0' - '_'))
|
2814
|
-
$str =~ m[^####.{4}([0-_])[0-_]{3}/[0-_]{2}/[0-_]{2} ..([0-_])..([0-_]).([0-_]) ]s or return undef;
|
2815
|
-
return undef unless $2 eq $3; # (colons in time string must be the same)
|
2816
|
-
|
2817
|
-
my $cipherInfo = $$et{LigoCipher};
|
2818
|
-
$cipherInfo or $cipherInfo = $$et{LigoCipher} = { cache => [ ], secs => [ ], two => -1 };
|
2819
|
-
my $decipher = $$cipherInfo{decipher};
|
2820
|
-
my $cache = $$cipherInfo{cache};
|
2821
|
-
|
2822
|
-
# determine the cipher code table based on the advancing 1's digit of seconds
|
2823
|
-
unless ($decipher) {
|
2824
|
-
push @$cache, $str; # cache records until we can decipher them
|
2825
|
-
my ($millennium, $colon) = ($1, $2);
|
2826
|
-
# determine the Caesar cipher lookup table
|
2827
|
-
# (only characters in range 0x30-0x5f are encrypted)
|
2828
|
-
my $secs = $$cipherInfo{secs};
|
2829
|
-
push @$secs, $4 unless @$secs and $${secs}[-1] eq $4;
|
2830
|
-
$$cipherInfo{two} = $#$secs if $4 eq $millennium; # save index of enciphered '2'
|
2831
|
-
return 1 if @$secs < 10; # must cache the data until we know all 10 digits
|
2832
|
-
my $two = $$cipherInfo{two}; # (index of '2' in the array)
|
2833
|
-
my %decipher = ( $colon => ':' ); # (':' is the time separator)
|
2834
|
-
foreach (0..9) {
|
2835
|
-
my $ch = $$secs[($_ + $two - 2 + 10) % 10];
|
2836
|
-
if ($two < 0 or defined $decipher{$ch}) { # (must be a unique code for each digit)
|
2837
|
-
@$cipherInfo{'secs','two'} = ([ ], -1); # reset and try again
|
2838
|
-
$et->Warn('Hiccup while deciphering LIGOGPSINFO');
|
2839
|
-
return 1;
|
2840
|
-
}
|
2841
|
-
$decipher{$ch} = chr($_ + 0x30);
|
2842
|
-
}
|
2843
|
-
# also know the lat/lon quadrant from the signs of the coordinates
|
2844
|
-
if ($str =~ / ([0-_])$colon(-?).*? ([0-_])$colon(-?)/) {
|
2845
|
-
@decipher{$1,$3} = ($2 ? 'S' : 'N', $4 ? 'W' : 'E');
|
2846
|
-
}
|
2847
|
-
# fill in unknown entries with '?' (only chars 0x30-0x5f are enciphered)
|
2848
|
-
defined $decipher{$_} or $decipher{$_} = '?' foreach map(chr, 0x30..0x5f);
|
2849
|
-
$decipher = $$cipherInfo{decipher} = \%decipher;
|
2850
|
-
$str = shift @$cache; # start deciphering at oldest cache entry
|
2851
|
-
}
|
2852
|
-
|
2853
|
-
# apply reverse Caesar cipher and extract GPS information
|
2854
|
-
do {
|
2855
|
-
my $pre = substr($str, 4, 4); # save second 4 bytes of header
|
2856
|
-
($str = substr($str,8)) =~ s/\0+$//; # remove 8-byte header and null padding
|
2857
|
-
$str =~ s/([0-_])/$$decipher{$1}/g; # decipher
|
2858
|
-
if ($$et{OPTIONS}{Verbose} > 1) {
|
2859
|
-
$et->VPrint(1, "$$et{INDENT}\(Deciphered: ".unpack('H8',$pre)." $str)\n");
|
2860
|
-
}
|
2861
|
-
# add back leading 4 bytes (int16u counter plus 2 unknown bytes), and parse
|
2862
|
-
# (not fuzzed in my only sample when found in standard 'skip' atom)
|
2863
|
-
ParseLigoGPS($et, "$pre$str", $tagTbl, $$et{LigoType} eq 'LigoGPSInfo');
|
2864
|
-
} while $str = shift @$cache;
|
2865
|
-
|
2866
|
-
return 1;
|
2867
|
-
}
|
2868
|
-
|
2869
|
-
#------------------------------------------------------------------------------
|
2870
|
-
# Parse decrypted/deciphered (but not defuzzed) LIGOGPSINFO record
|
2871
|
-
# (record starts with 4-byte int32u counter followed by date/time, etc)
|
2872
|
-
# Inputs: 0) ExifTool ref, 1) GPS string, 2) tag table ref, 3) not fuzzed
|
2873
|
-
# Returns: nothing
|
2874
|
-
sub ParseLigoGPS($$$;$)
|
2875
|
-
{
|
2876
|
-
my ($et, $str, $tagTbl, $noFuzz) = @_;
|
2877
|
-
|
2878
|
-
# example string input
|
2879
|
-
# "....2022/09/19 12:45:24 N:31.285065 W:124.759483 46.93 km/h x:-0.000 y:-0.000 z:-0.000"
|
2880
|
-
unless ($str=~ /^.{4}(\S+ \S+)\s+([NS?]):(-?)([.\d]+)\s+([EW?]):(-?)([\.\d]+)\s+([.\d]+)/s) {
|
2881
|
-
$et->Warn('LIGOGPSINFO format error');
|
2882
|
-
return;
|
2883
|
-
}
|
2884
|
-
my ($time,$latRef,$latNeg,$lat,$lonRef,$lonNeg,$lon,$spd) = ($1,$2,$3,$4,$5,$6,$7,$8);
|
2885
|
-
my %gpsScl = ( 1 => 1.524855137, 2 => 1.456027985, 3 => 1.15368 );
|
2886
|
-
my $spdScl = $noFuzz ? $knotsToKph : 1.85407333;
|
2887
|
-
$$et{DOC_NUM} = ++$$et{DOC_COUNT};
|
2888
|
-
$time =~ tr(/)(:);
|
2889
|
-
# convert from DDMM.MMMMMM to DD.DDDDDD if necessary
|
2890
|
-
# (speed wasn't scaled in my 1 sample with this format)
|
2891
|
-
$lat =~ /^\d{3}/ and ConvertLatLon($lat,$lon), $spdScl = 1;
|
2892
|
-
unless ($noFuzz) { # unfuzz the coordinates if necessary
|
2893
|
-
my $scl = $$et{OPTIONS}{LigoGPSScale} || $$et{LigoGPSScale} || 1;
|
2894
|
-
$scl = $gpsScl{$scl} if $gpsScl{$scl};
|
2895
|
-
($lat, $lon) = UnfuzzLigoGPS($lat, $lon, $scl);
|
2896
|
-
}
|
2897
|
-
# a final sanity check
|
2898
|
-
($lat > 90 or $lon > 180) and $et->Warn('LIGOGPSINFO coordinates out of range'), return;
|
2899
|
-
$$et{SET_GROUP1} = 'LIGO';
|
2900
|
-
$et->HandleTag($tagTbl, 'GPSDateTime', $time);
|
2901
|
-
# (ignore N/S/E/W if coordinate is signed)
|
2902
|
-
$et->HandleTag($tagTbl, 'GPSLatitude', $lat * (($latNeg or $latRef eq 'S') ? -1 : 1));
|
2903
|
-
$et->HandleTag($tagTbl, 'GPSLongitude', $lon * (($lonNeg or $lonRef eq 'W') ? -1 : 1));
|
2904
|
-
$et->HandleTag($tagTbl, 'GPSSpeed', $spd * $spdScl);
|
2905
|
-
$et->HandleTag($tagTbl, 'GPSTrack', $1) if $str =~ /\bA:(\S+)/;
|
2906
|
-
# (have a sample where tab is used to separate acc components)
|
2907
|
-
$et->HandleTag($tagTbl, 'Accelerometer',"$1 $2 $3") if $str =~ /x:(\S+)\sy:(\S+)\sz:(\S+)/;
|
2908
|
-
$et->HandleTag($tagTbl, 'M', $1) if $str =~ /\bM:(\S+)/;
|
2909
|
-
$et->HandleTag($tagTbl, 'H', $1) if $str =~ /\bH:(\S+)/;
|
2910
|
-
delete $$et{SET_GROUP1};
|
2911
|
-
}
|
2912
|
-
|
2913
|
-
#------------------------------------------------------------------------------
|
2914
|
-
# Process LIGOGPSINFO data (non-JSON format)
|
2915
|
-
# Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
|
2916
|
-
# 3) 1=LIGOGPS lat/lon/spd weren't fuzzed
|
2917
|
-
# Returns: 1 on success
|
2918
|
-
sub ProcessLigoGPS($$$;$)
|
2919
|
-
{
|
2920
|
-
my ($et, $dirInfo, $tagTbl, $noFuzz) = @_;
|
2921
|
-
my $dataPt = $$dirInfo{DataPt};
|
2922
|
-
my $pos = ($$dirInfo{DirStart} || 0) + 0x14;
|
2923
|
-
my $cipherInfo = $$et{LigoCipher};
|
2924
|
-
return undef if $pos > length $$dataPt;
|
2925
|
-
$$et{LigoType} = $$dirInfo{DirName} || 'LigoGPS';
|
2926
|
-
push @{$$et{PATH}}, $$et{LigoType} unless $$dirInfo{DirID};
|
2927
|
-
# not fuzzed if header is "LIGOGPSINFO\0\0\0\0\x01" (BlueSkySeaDV688)
|
2928
|
-
$noFuzz = 1 if substr($$dataPt, $pos-8, 4) eq "\0\0\0\x01";
|
2929
|
-
$et->VerboseDir($$et{LigoType});
|
2930
|
-
for (; $pos + 0x84 <= length($$dataPt); $pos+=0x84) {
|
2931
|
-
my $dat = substr($$dataPt, $pos, 0x84);
|
2932
|
-
$dat =~ /^####/ or next; # (have seen blank records filled with zeros, so keep trying)
|
2933
|
-
# decipher if we already know the encryption
|
2934
|
-
$cipherInfo and $$cipherInfo{decipher} and DecipherLigoGPS($et, $dat, $tagTbl) and next;
|
2935
|
-
my $str = DecryptLigoGPS($dat);
|
2936
|
-
defined $str or DecipherLigoGPS($et, $dat, $tagTbl), next; # try to decipher
|
2937
|
-
$et->VPrint(1, "$$et{INDENT}\(Decrypted: ",unpack('V',$str),' ',substr($str,4),")\n") if $$et{OPTIONS}{Verbose} > 1;
|
2938
|
-
ParseLigoGPS($et, $str, $tagTbl, $noFuzz);
|
2939
|
-
}
|
2940
|
-
pop @{$$et{PATH}} unless $$dirInfo{DirID};
|
2941
|
-
delete $$et{DOC_NUM};
|
2942
|
-
return 1;
|
2943
|
-
}
|
2944
|
-
|
2945
|
-
#------------------------------------------------------------------------------
|
2946
|
-
# Process LIGOGPSINFO JSON-format GPS (Yada RoadCam Pro 4K BT58189)
|
2947
|
-
# Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
|
2948
|
-
# Returns: 1 on success
|
2949
|
-
# Sample data (chained 512-byte records starting like this):
|
2950
|
-
# 0000: 4c 49 47 4f 47 50 53 49 4e 46 4f 20 7b 22 48 6f [LIGOGPSINFO {"Ho]
|
2951
|
-
# 0010: 75 72 22 3a 20 22 32 33 22 2c 20 22 4d 69 6e 75 [ur": "23", "Minu]
|
2952
|
-
# 0020: 74 65 22 3a 20 22 31 30 22 2c 20 22 53 65 63 6f [te": "10", "Seco]
|
2953
|
-
# 0030: 6e 64 22 3a 20 22 32 32 22 2c 20 22 59 65 61 72 [nd": "22", "Year]
|
2954
|
-
# 0040: 22 3a 20 22 32 30 32 33 22 2c 20 22 4d 6f 6e 74 [": "2023", "Mont]
|
2955
|
-
# 0050: 68 22 3a 20 22 31 32 22 2c 20 22 44 61 79 22 3a [h": "12", "Day":]
|
2956
|
-
# 0060: 20 22 32 38 22 2c 20 22 73 74 61 74 75 73 22 3a [ "28", "status":]
|
2957
|
-
sub ProcessLigoJSON($$$)
|
2958
|
-
{
|
2959
|
-
my ($et, $dirInfo, $tagTbl) = @_;
|
2960
|
-
my $dataPt = $$dirInfo{DataPt};
|
2961
|
-
my $dirLen = $$dirInfo{DirLen};
|
2962
|
-
require Image::ExifTool::Import;
|
2963
|
-
$et->VerboseDir('LIGO_JSON', undef, length($$dataPt));
|
2964
|
-
$$et{SET_GROUP1} = 'LIGO';
|
2965
|
-
while ($$dataPt =~ /LIGOGPSINFO (\{.*?\})/g) {
|
2966
|
-
my $json = $1;
|
2967
|
-
my %dbase;
|
2968
|
-
Image::ExifTool::Import::ReadJSON(\$json, \%dbase);
|
2969
|
-
my $info = $dbase{'*'} or next;
|
2970
|
-
# my sample contains the following JSON fields (in this order):
|
2971
|
-
# Hour Minute Second Year Month Day (GPS UTC time)
|
2972
|
-
# status NS EW Latitude Longitude Speed (speed in knots)
|
2973
|
-
# GsensorX GsensorY GsensorZ (units? - only seen "000" for all)
|
2974
|
-
# MHour MMinute MSecond MYear MMonth MDay (local dashcam clock time)
|
2975
|
-
# OLatitude OLongitude (? same values as Latitude/Longitude)
|
2976
|
-
next unless defined $$info{status} and $$info{status} eq 'A'; # only read if GPS is active
|
2977
|
-
$$et{DOC_NUM} = ++$$et{DOC_COUNT};
|
2978
|
-
my $num = 0;
|
2979
|
-
defined $$info{$_} and ++$num foreach qw(Year Month Day Hour Minute Second);
|
2980
|
-
if ($num == 6) {
|
2981
|
-
# this is the GPS time in UTC
|
2982
|
-
my $time = sprintf('%.4d:%.2d:%.2d %.2d:%.2d:%.2dZ',@$info{qw{Year Month Day Hour Minute Second}});
|
2983
|
-
$et->HandleTag($tagTbl, GPSDateTime => $time);
|
2984
|
-
}
|
2985
|
-
if ($$info{Latitude} and $$info{Longitude}) {
|
2986
|
-
my $lat = $$info{Latitude};
|
2987
|
-
$lat = -$lat if $$info{NS} and $$info{NS} eq 'S';
|
2988
|
-
my $lon = $$info{Longitude};
|
2989
|
-
$lon = -$lon if $$info{EW} and $$info{EW} eq 'W';
|
2990
|
-
$et->HandleTag($tagTbl, GPSLatitude => $lat);
|
2991
|
-
$et->HandleTag($tagTbl, GPSLongitude => $lon);
|
2992
|
-
}
|
2993
|
-
$et->HandleTag($tagTbl, GPSSpeed => $$info{Speed} * $knotsToKph) if defined $$info{Speed};
|
2994
|
-
if (defined $$info{GsensorX} and defined $$info{GsensorY} and defined $$info{GsensorZ}) {
|
2995
|
-
# (don't know conversion factor for accel data, so leave it raw for now)
|
2996
|
-
$et->HandleTag($tagTbl, Accelerometer => "$$info{GsensorX} $$info{GsensorY} $$info{GsensorZ}");
|
2997
|
-
}
|
2998
|
-
$num = 0;
|
2999
|
-
defined $$info{$_} and ++$num foreach qw(MYear MMonth MDay MHour MMinute MSecond);
|
3000
|
-
if ($num == 6) {
|
3001
|
-
# this is the dashcam clock time (local time zone)
|
3002
|
-
my $time = sprintf('%.4d:%.2d:%.2d %.2d:%.2d:%.2d',@$info{qw{MYear MMonth MDay MHour MMinute MSecond}});
|
3003
|
-
$et->HandleTag($tagTbl, DateTimeOriginal => $time);
|
3004
|
-
}
|
3005
|
-
if (defined $$info{OLatitude} and defined $$info{OLongitude}) {
|
3006
|
-
my $lat = $$info{OLatitude};
|
3007
|
-
$lat = -$lat if $$info{NS} and $$info{NS} eq 'S';
|
3008
|
-
my $lon = $$info{OLongitude};
|
3009
|
-
$lon = -$lon if $$info{EW} and $$info{EW} eq 'W';
|
3010
|
-
$et->HandleTag($tagTbl, GPSLatitude2 => $lat);
|
3011
|
-
$et->HandleTag($tagTbl, GPSLongitude2 => $lon);
|
3012
|
-
}
|
3013
|
-
unless ($et->Options('ExtractEmbedded')) {
|
3014
|
-
$et->Warn('Use the ExtractEmbedded option to extract all timed GPS',3);
|
3015
|
-
last;
|
3016
|
-
}
|
3017
|
-
}
|
3018
|
-
delete $$et{DOC_NUM};
|
3019
|
-
delete $$et{SET_GROUP1};
|
3020
|
-
return 1;
|
3021
|
-
}
|
3022
|
-
|
3023
2741
|
#------------------------------------------------------------------------------
|
3024
2742
|
# Process Kenwood drv-a301w dashcam 'udta' atom (ref PH)
|
3025
2743
|
# Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
|
@@ -3912,7 +3630,7 @@ information like GPS tracks from MOV, MP4 and INSV media data.
|
|
3912
3630
|
|
3913
3631
|
=head1 AUTHOR
|
3914
3632
|
|
3915
|
-
Copyright 2003-
|
3633
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
3916
3634
|
|
3917
3635
|
This library is free software; you can redistribute it and/or modify it
|
3918
3636
|
under the same terms as Perl itself.
|
@@ -443,6 +443,10 @@ numerical, and generated automatically otherwise.
|
|
443
443
|
list-type tag (unless it is a list of lang-alt lists, which is
|
444
444
|
uncommon).
|
445
445
|
|
446
|
+
'IsList' - Flag to mark tag as List-type in the documentation
|
447
|
+
without accumulating entries from subsequent tags. Used when
|
448
|
+
the value for a single tag is a complete list.
|
449
|
+
|
446
450
|
'MakerNotes' - set if this tag is maker note data.
|
447
451
|
|
448
452
|
'MakerPreview' - set in the PreviewImageStart tag information
|
@@ -2214,7 +2214,7 @@ including AVI videos, WAV audio files and WEBP images.
|
|
2214
2214
|
|
2215
2215
|
=head1 AUTHOR
|
2216
2216
|
|
2217
|
-
Copyright 2003-
|
2217
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
2218
2218
|
|
2219
2219
|
This library is free software; you can redistribute it and/or modify it
|
2220
2220
|
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-2025, 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-2025, 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-2025, 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-2025, 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-2025, 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-2025, 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-2025, 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.
|
@@ -1252,7 +1252,7 @@ interpret Ricoh maker notes EXIF meta information.
|
|
1252
1252
|
|
1253
1253
|
=head1 AUTHOR
|
1254
1254
|
|
1255
|
-
Copyright 2003-
|
1255
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
1256
1256
|
|
1257
1257
|
This library is free software; you can redistribute it and/or modify it
|
1258
1258
|
under the same terms as Perl itself.
|
@@ -1718,7 +1718,7 @@ SamBlock:
|
|
1718
1718
|
$fixup->AddFixup(length($buff) - $offsetPos);
|
1719
1719
|
$fixup->AddFixup(length($buff) - $offsetPos + 4);
|
1720
1720
|
}
|
1721
|
-
$et->VPrint(0, "Writing Samsung trailer ($dirLen bytes)\n") if $verbose;
|
1721
|
+
$et->VPrint(0, " Writing Samsung trailer ($dirLen bytes)\n") if $verbose;
|
1722
1722
|
Write($$dirInfo{OutFile}, $buff) or return -1;
|
1723
1723
|
return 1;
|
1724
1724
|
}
|
@@ -1762,7 +1762,7 @@ Samsung maker notes in EXIF information.
|
|
1762
1762
|
|
1763
1763
|
=head1 AUTHOR
|
1764
1764
|
|
1765
|
-
Copyright 2003-
|
1765
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
1766
1766
|
|
1767
1767
|
This library is free software; you can redistribute it and/or modify it
|
1768
1768
|
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-2025, 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-2025, 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.
|
@@ -631,7 +631,7 @@ limited to the range 1970 to 2038 on 32-bit systems.
|
|
631
631
|
|
632
632
|
=head1 AUTHOR
|
633
633
|
|
634
|
-
Copyright 2003-
|
634
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
635
635
|
|
636
636
|
This library is free software; you can redistribute it and/or modify it
|
637
637
|
under the same terms as Perl itself.
|
@@ -344,7 +344,7 @@ name prefix.
|
|
344
344
|
|
345
345
|
=head1 AUTHOR
|
346
346
|
|
347
|
-
Copyright 2003-
|
347
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
348
348
|
|
349
349
|
This library is free software; you can redistribute it and/or modify it
|
350
350
|
under the same terms as Perl itself.
|
@@ -864,7 +864,7 @@ Sigma and Foveon maker notes in EXIF information.
|
|
864
864
|
|
865
865
|
=head1 AUTHOR
|
866
866
|
|
867
|
-
Copyright 2003-
|
867
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
868
868
|
|
869
869
|
This library is free software; you can redistribute it and/or modify it
|
870
870
|
under the same terms as Perl itself.
|
@@ -680,7 +680,7 @@ Sigma and Foveon X3F images.
|
|
680
680
|
|
681
681
|
=head1 AUTHOR
|
682
682
|
|
683
|
-
Copyright 2003-
|
683
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
684
684
|
|
685
685
|
This library is free software; you can redistribute it and/or modify it
|
686
686
|
under the same terms as Perl itself.
|
@@ -11759,7 +11759,7 @@ Minolta.
|
|
11759
11759
|
|
11760
11760
|
=head1 AUTHOR
|
11761
11761
|
|
11762
|
-
Copyright 2003-
|
11762
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
11763
11763
|
|
11764
11764
|
This library is free software; you can redistribute it and/or modify it
|
11765
11765
|
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-2025, 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-2025, 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.
|
@@ -651,7 +651,7 @@ and values.
|
|
651
651
|
|
652
652
|
~head1 AUTHOR
|
653
653
|
|
654
|
-
Copyright 2003-
|
654
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
655
655
|
|
656
656
|
This library is free software; you can redistribute it and/or modify it
|
657
657
|
under the same terms as Perl itself.
|
@@ -835,7 +835,7 @@ Number of modules updated, or negative on error.
|
|
835
835
|
|
836
836
|
=head1 AUTHOR
|
837
837
|
|
838
|
-
Copyright 2003-
|
838
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
839
839
|
|
840
840
|
This library is free software; you can redistribute it and/or modify it
|
841
841
|
under the same terms as Perl itself.
|