exiftool-vendored.exe 12.33.0 → 12.40.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/LICENSE +254 -247
- package/bin/exiftool_files/Changes +116 -0
- package/bin/exiftool_files/README +45 -45
- package/bin/exiftool_files/config_files/acdsee.config +6 -6
- package/bin/exiftool_files/config_files/photoshop_paths.config +30 -7
- package/bin/exiftool_files/config_files/picasa_faces.config +1 -1
- package/bin/exiftool_files/config_files/pix4d.config +2 -2
- package/bin/exiftool_files/config_files/tiff_version.config +2 -2
- package/bin/exiftool_files/exiftool.pl +112 -82
- 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/AES.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/AFCP.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/AIFF.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/APE.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/APP12.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/ASF.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Apple.pm +1 -1
- 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 +15 -4
- package/bin/exiftool_files/lib/Image/ExifTool/CBOR.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +225 -13
- package/bin/exiftool_files/lib/Image/ExifTool/CanonCustom.pm +13 -3
- 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 +3 -1
- package/bin/exiftool_files/lib/Image/ExifTool/DICOM.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/DJI.pm +1 -1
- 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 +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/DjVu.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/EXE.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +64 -20
- package/bin/exiftool_files/lib/Image/ExifTool/FITS.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/FLAC.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/FLIF.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/FLIR.pm +48 -11
- 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 +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Font.pm +1 -1
- 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 +6 -2
- package/bin/exiftool_files/lib/Image/ExifTool/GIMP.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/GPS.pm +15 -11
- package/bin/exiftool_files/lib/Image/ExifTool/GeoTiff.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +4 -3
- package/bin/exiftool_files/lib/Image/ExifTool/GoPro.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/H264.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/HP.pm +1 -1
- 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 +97 -5
- package/bin/exiftool_files/lib/Image/ExifTool/ID3.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/IPTC.pm +1 -1
- 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 +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/InDesign.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/JPEG.pm +6 -2
- 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 +109 -12
- 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 +1 -1
- 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/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/Lytro.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/M2TS.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/MIE.pm +1 -1
- 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/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 +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/MacOS.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/MakerNotes.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Matroska.pm +9 -5
- package/bin/exiftool_files/lib/Image/ExifTool/Microsoft.pm +1 -1
- 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 +1918 -72
- package/bin/exiftool_files/lib/Image/ExifTool/NikonCapture.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/NikonCustom.pm +523 -6
- package/bin/exiftool_files/lib/Image/ExifTool/NikonSettings.pm +150 -87
- package/bin/exiftool_files/lib/Image/ExifTool/Nintendo.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/OOXML.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Ogg.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +7 -7
- package/bin/exiftool_files/lib/Image/ExifTool/OpenEXR.pm +5 -3
- 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 +6 -4
- 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 +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/PLUS.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +29 -8
- package/bin/exiftool_files/lib/Image/ExifTool/PPM.pm +1 -1
- 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 +1 -1
- 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 +3 -2
- package/bin/exiftool_files/lib/Image/ExifTool/PhaseOne.pm +1 -1
- 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 +1 -1
- 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/Qualcomm.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +25 -7
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +40 -4
- package/bin/exiftool_files/lib/Image/ExifTool/README +4 -0
- package/bin/exiftool_files/lib/Image/ExifTool/RIFF.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/RSRC.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/RTF.pm +1 -1
- 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 +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Samsung.pm +6 -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 +3 -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 +34 -12
- 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 +11 -6
- package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +6581 -5893
- package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +1641 -59
- package/bin/exiftool_files/lib/Image/ExifTool/Text.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Theora.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Torrent.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Unknown.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/VCard.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Validate.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Vorbis.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 +1 -1
- 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 +30 -10
- 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 +19 -4
- package/bin/exiftool_files/lib/Image/ExifTool/WriteXMP.pl +13 -12
- package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +56 -10
- package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +169 -54
- package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +6 -4
- package/bin/exiftool_files/lib/Image/ExifTool/XMPStruct.pl +22 -8
- package/bin/exiftool_files/lib/Image/ExifTool/ZIP.pm +10 -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 +93 -13
- package/bin/exiftool_files/lib/Image/ExifTool.pod +80 -70
- package/package.json +3 -3
|
@@ -56,7 +56,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
|
|
|
56
56
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
57
57
|
use Image::ExifTool::MakerNotes;
|
|
58
58
|
|
|
59
|
-
$VERSION = '4.
|
|
59
|
+
$VERSION = '4.39';
|
|
60
60
|
|
|
61
61
|
sub ProcessExif($$$);
|
|
62
62
|
sub WriteExif($$$);
|
|
@@ -415,7 +415,14 @@ my %opcodeInfo = (
|
|
|
415
415
|
WriteGroup => 'IFD0',
|
|
416
416
|
# set priority directory if this is the full resolution image
|
|
417
417
|
DataMember => 'SubfileType',
|
|
418
|
-
RawConv =>
|
|
418
|
+
RawConv => q{
|
|
419
|
+
if ($val == ($val & 0x02)) {
|
|
420
|
+
$self->SetPriorityDir() if $val == 0;
|
|
421
|
+
$$self{PageCount} = ($$self{PageCount} || 0) + 1;
|
|
422
|
+
$$self{MultiPage} = 1 if $val == 2 or $$self{PageCount} > 1;
|
|
423
|
+
}
|
|
424
|
+
$$self{SubfileType} = $val;
|
|
425
|
+
},
|
|
419
426
|
PrintConv => \%subfileType,
|
|
420
427
|
},
|
|
421
428
|
0xff => {
|
|
@@ -425,7 +432,14 @@ my %opcodeInfo = (
|
|
|
425
432
|
Writable => 'int16u',
|
|
426
433
|
WriteGroup => 'IFD0',
|
|
427
434
|
# set priority directory if this is the full resolution image
|
|
428
|
-
RawConv =>
|
|
435
|
+
RawConv => q{
|
|
436
|
+
if ($val == 1 or $val == 3) {
|
|
437
|
+
$self->SetPriorityDir() if $val == 1;
|
|
438
|
+
$$self{PageCount} = ($$self{PageCount} || 0) + 1;
|
|
439
|
+
$$self{MultiPage} = 1 if $val == 3 or $$self{PageCount} > 1;
|
|
440
|
+
}
|
|
441
|
+
$val;
|
|
442
|
+
},
|
|
429
443
|
PrintConv => {
|
|
430
444
|
1 => 'Full-resolution image',
|
|
431
445
|
2 => 'Reduced-resolution image',
|
|
@@ -2144,7 +2158,7 @@ my %opcodeInfo = (
|
|
|
2144
2158
|
Notes => 'displayed in seconds, but stored as an APEX value',
|
|
2145
2159
|
Format => 'rational64s', # Leica M8 patch (incorrectly written as rational64u)
|
|
2146
2160
|
Writable => 'rational64s',
|
|
2147
|
-
ValueConv => 'abs($val)<100 ? 2**(-$val) : 0',
|
|
2161
|
+
ValueConv => 'IsFloat($val) && abs($val)<100 ? 2**(-$val) : 0',
|
|
2148
2162
|
ValueConvInv => '$val>0 ? -log($val)/log(2) : -100',
|
|
2149
2163
|
PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
|
|
2150
2164
|
PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
|
|
@@ -4816,11 +4830,32 @@ my %subSecConv = (
|
|
|
4816
4830
|
},
|
|
4817
4831
|
GPSPosition => {
|
|
4818
4832
|
Groups => { 2 => 'Location' },
|
|
4833
|
+
Writable => 1,
|
|
4834
|
+
Protected => 1,
|
|
4835
|
+
WriteAlso => {
|
|
4836
|
+
GPSLatitude => '$val =~ /(.*?)( ?[NS])?,/ ? $1 : undef',
|
|
4837
|
+
GPSLatitudeRef => '$val =~ /(-?)(.*?) ?([NS]?),/ ? ($3 || ($1 ? "S" : "N")) : undef',
|
|
4838
|
+
GPSLongitude => '$val =~ /, ?(.*?)( ?[EW]?)$/ ? $1 : undef',
|
|
4839
|
+
GPSLongitudeRef => '$val =~ /, ?(-?)(.*?) ?([EW]?)$/ ? ($3 || ($1 ? "W" : "E")) : undef',
|
|
4840
|
+
},
|
|
4841
|
+
PrintConvInv => q{
|
|
4842
|
+
return undef unless $val =~ /(.*? ?[NS]?), ?(.*? ?[EW]?)$/;
|
|
4843
|
+
my ($lat, $lon) = ($1, $2);
|
|
4844
|
+
require Image::ExifTool::GPS;
|
|
4845
|
+
$lat = Image::ExifTool::GPS::ToDegrees($lat, 1, "lat");
|
|
4846
|
+
$lon = Image::ExifTool::GPS::ToDegrees($lon, 1, "lon");
|
|
4847
|
+
return "$lat, $lon";
|
|
4848
|
+
},
|
|
4819
4849
|
Require => {
|
|
4820
4850
|
0 => 'GPSLatitude',
|
|
4821
4851
|
1 => 'GPSLongitude',
|
|
4822
4852
|
},
|
|
4823
4853
|
Priority => 0,
|
|
4854
|
+
Notes => q{
|
|
4855
|
+
when written, writes GPSLatitude, GPSLatitudeRef, GPSLongitude and
|
|
4856
|
+
GPSLongitudeRef. This tag may be written using the same coordinate
|
|
4857
|
+
format as provided by Google Maps when right-clicking on a location
|
|
4858
|
+
},
|
|
4824
4859
|
ValueConv => '(length($val[0]) or length($val[1])) ? "$val[0] $val[1]" : undef',
|
|
4825
4860
|
PrintConv => '"$prt[0], $prt[1]"',
|
|
4826
4861
|
},
|
|
@@ -5228,6 +5263,7 @@ sub RedBlueBalance($@)
|
|
|
5228
5263
|
sub PrintExposureTime($)
|
|
5229
5264
|
{
|
|
5230
5265
|
my $secs = shift;
|
|
5266
|
+
return $secs unless Image::ExifTool::IsFloat($secs);
|
|
5231
5267
|
if ($secs < 0.25001 and $secs > 0) {
|
|
5232
5268
|
return sprintf("1/%d",int(0.5 + 1/$secs));
|
|
5233
5269
|
}
|
|
@@ -5833,7 +5869,7 @@ sub ProcessExif($$$)
|
|
|
5833
5869
|
unless ($path =~ /^(JPEG-APP1-IFD0|TIFF-IFD0|PSD-EXIFInfo-IFD0)$/) {
|
|
5834
5870
|
if ($Image::ExifTool::MWG::strict) {
|
|
5835
5871
|
$et->Warn("Ignored non-standard EXIF at $path");
|
|
5836
|
-
return
|
|
5872
|
+
return 0;
|
|
5837
5873
|
} else {
|
|
5838
5874
|
$et->Warn("Non-standard EXIF at $path", 1);
|
|
5839
5875
|
}
|
|
@@ -5876,10 +5912,6 @@ sub ProcessExif($$$)
|
|
|
5876
5912
|
# also read next IFD pointer if available
|
|
5877
5913
|
if ($raf->Read($buf2, $len+4) >= $len) {
|
|
5878
5914
|
$buff .= $buf2;
|
|
5879
|
-
# make copy of dirInfo since we're going to modify it
|
|
5880
|
-
my %newDirInfo = %$dirInfo;
|
|
5881
|
-
$dirInfo = \%newDirInfo;
|
|
5882
|
-
# update directory parameters for the newly loaded IFD
|
|
5883
5915
|
$dataPt = $$dirInfo{DataPt} = \$buff;
|
|
5884
5916
|
$dataPos = $$dirInfo{DataPos} = $offset;
|
|
5885
5917
|
$dataLen = $$dirInfo{DataLen} = length $buff;
|
|
@@ -6686,28 +6718,40 @@ sub ProcessExif($$$)
|
|
|
6686
6718
|
|
|
6687
6719
|
# scan for subsequent IFD's if specified
|
|
6688
6720
|
if ($$dirInfo{Multi} and $bytesFromEnd >= 4) {
|
|
6689
|
-
|
|
6690
|
-
|
|
6691
|
-
|
|
6692
|
-
|
|
6693
|
-
|
|
6694
|
-
|
|
6695
|
-
|
|
6696
|
-
|
|
6721
|
+
# use same directory information for trailing directory,
|
|
6722
|
+
# but change the start location (ProcessDirectory will
|
|
6723
|
+
# test to make sure we don't reprocess the same dir twice)
|
|
6724
|
+
my %newDirInfo = %$dirInfo;
|
|
6725
|
+
$newDirInfo{Multi} = 0; # prevent recursion
|
|
6726
|
+
$newDirInfo{OffsetName} = $nextOffName;
|
|
6727
|
+
$$et{INDENT} =~ s/..$//; # keep indent the same
|
|
6728
|
+
for (;;) {
|
|
6729
|
+
my $offset = Get32u($dataPt, $dirEnd) or last;
|
|
6730
|
+
$newDirInfo{DirStart} = $offset - $dataPos;
|
|
6697
6731
|
# increment IFD number
|
|
6698
6732
|
my $ifdNum = $newDirInfo{DirName} =~ s/(\d+)$// ? $1 : 0;
|
|
6699
6733
|
$newDirInfo{DirName} .= $ifdNum + 1;
|
|
6700
|
-
$newDirInfo{OffsetName} = $nextOffName;
|
|
6701
6734
|
# must validate SubIFD1 because the nextIFD pointer is invalid for some RAW formats
|
|
6702
6735
|
if ($newDirInfo{DirName} ne 'SubIFD1' or ValidateIFD(\%newDirInfo)) {
|
|
6703
|
-
$$et{INDENT} =~ s/..$//; # keep indent the same
|
|
6704
6736
|
my $cur = pop @{$$et{PATH}};
|
|
6705
6737
|
$et->ProcessDirectory(\%newDirInfo, $tagTablePtr) or $success = 0;
|
|
6706
6738
|
push @{$$et{PATH}}, $cur;
|
|
6739
|
+
if ($success and $newDirInfo{BytesFromEnd} >= 4) {
|
|
6740
|
+
$dataPt = $newDirInfo{DataPt};
|
|
6741
|
+
$dataPos = $newDirInfo{DataPos};
|
|
6742
|
+
$dirEnd = $newDirInfo{DirEnd};
|
|
6743
|
+
next;
|
|
6744
|
+
}
|
|
6707
6745
|
} elsif ($verbose or $$et{TIFF_TYPE} eq 'TIFF') {
|
|
6708
6746
|
$et->Warn('Ignored bad IFD linked from SubIFD');
|
|
6709
6747
|
}
|
|
6748
|
+
last;
|
|
6710
6749
|
}
|
|
6750
|
+
} elsif (defined $$dirInfo{Multi}) {
|
|
6751
|
+
# return necessary parameters for parsing next IFD
|
|
6752
|
+
$$dirInfo{DirEnd} = $dirEnd;
|
|
6753
|
+
$$dirInfo{OffsetName} = $nextOffName;
|
|
6754
|
+
$$dirInfo{BytesFromEnd} = $bytesFromEnd;
|
|
6711
6755
|
}
|
|
6712
6756
|
return $success;
|
|
6713
6757
|
}
|
|
@@ -6731,7 +6775,7 @@ EXIF and TIFF meta information.
|
|
|
6731
6775
|
|
|
6732
6776
|
=head1 AUTHOR
|
|
6733
6777
|
|
|
6734
|
-
Copyright 2003-
|
|
6778
|
+
Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
|
|
6735
6779
|
|
|
6736
6780
|
This library is free software; you can redistribute it and/or modify it
|
|
6737
6781
|
under the same terms as Perl itself.
|
|
@@ -137,7 +137,7 @@ information from FITS (Flexible Image Transport System) images.
|
|
|
137
137
|
|
|
138
138
|
=head1 AUTHOR
|
|
139
139
|
|
|
140
|
-
Copyright 2003-
|
|
140
|
+
Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
|
|
141
141
|
|
|
142
142
|
This library is free software; you can redistribute it and/or modify it
|
|
143
143
|
under the same terms as Perl itself.
|
|
@@ -284,7 +284,7 @@ information from Free Lossless Audio Codec (FLAC) audio files.
|
|
|
284
284
|
|
|
285
285
|
=head1 AUTHOR
|
|
286
286
|
|
|
287
|
-
Copyright 2003-
|
|
287
|
+
Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
|
|
288
288
|
|
|
289
289
|
This library is free software; you can redistribute it and/or modify it
|
|
290
290
|
under the same terms as Perl itself.
|
|
@@ -329,7 +329,7 @@ meta information in FLIF (Free Lossless Image Format) images.
|
|
|
329
329
|
|
|
330
330
|
=head1 AUTHOR
|
|
331
331
|
|
|
332
|
-
Copyright 2003-
|
|
332
|
+
Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
|
|
333
333
|
|
|
334
334
|
This library is free software; you can redistribute it and/or modify it
|
|
335
335
|
under the same terms as Perl itself.
|
|
@@ -24,7 +24,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
24
24
|
use Image::ExifTool::Exif;
|
|
25
25
|
use Image::ExifTool::GPS;
|
|
26
26
|
|
|
27
|
-
$VERSION = '1.
|
|
27
|
+
$VERSION = '1.20';
|
|
28
28
|
|
|
29
29
|
sub ProcessFLIR($$;$);
|
|
30
30
|
sub ProcessFLIRText($$$);
|
|
@@ -99,7 +99,7 @@ my %float8g = ( Format => 'float', PrintConv => 'sprintf("%.8g",$val)' );
|
|
|
99
99
|
NOTES => q{
|
|
100
100
|
Information extracted from FLIR FFF images and the APP1 FLIR segment of JPEG
|
|
101
101
|
images. These tags may also be extracted from the first frame of an FLIR
|
|
102
|
-
SEQ file.
|
|
102
|
+
SEQ file, or all frames if the ExtractEmbedded option is used.
|
|
103
103
|
},
|
|
104
104
|
"_header" => {
|
|
105
105
|
Name => 'FFFHeader',
|
|
@@ -691,7 +691,15 @@ my %float8g = ( Format => 'float', PrintConv => 'sprintf("%.8g",$val)' );
|
|
|
691
691
|
T => 'True North',
|
|
692
692
|
},
|
|
693
693
|
},
|
|
694
|
-
|
|
694
|
+
0x48 => { #PH (NC)
|
|
695
|
+
Name => 'GPSImgDirectionRef',
|
|
696
|
+
Format => 'string[2]',
|
|
697
|
+
RawConv => 'length($val) ? $val : undef',
|
|
698
|
+
PrintConv => {
|
|
699
|
+
M => 'Magnetic North',
|
|
700
|
+
T => 'True North',
|
|
701
|
+
},
|
|
702
|
+
},
|
|
695
703
|
0x4c => {
|
|
696
704
|
Name => 'GPSSpeed',
|
|
697
705
|
%float2f,
|
|
@@ -702,7 +710,11 @@ my %float8g = ( Format => 'float', PrintConv => 'sprintf("%.8g",$val)' );
|
|
|
702
710
|
%float2f,
|
|
703
711
|
RawConv => '$val < 0 ? undef : $val',
|
|
704
712
|
},
|
|
705
|
-
|
|
713
|
+
0x54 => {
|
|
714
|
+
Name => 'GPSImgDirection',
|
|
715
|
+
%float2f,
|
|
716
|
+
RawConv => '$val < 0 ? undef : $val',
|
|
717
|
+
},
|
|
706
718
|
0x58 => {
|
|
707
719
|
Name => 'GPSMapDatum',
|
|
708
720
|
Format => 'string[16]',
|
|
@@ -1457,6 +1469,7 @@ sub ProcessFLIR($$;$)
|
|
|
1457
1469
|
my $raf = $$dirInfo{RAF} || new File::RandomAccess($$dirInfo{DataPt});
|
|
1458
1470
|
my $verbose = $et->Options('Verbose');
|
|
1459
1471
|
my $out = $et->Options('TextOut');
|
|
1472
|
+
my $base = $raf->Tell();
|
|
1460
1473
|
my ($i, $hdr, $buff, $rec);
|
|
1461
1474
|
|
|
1462
1475
|
# read and verify FFF header
|
|
@@ -1485,15 +1498,18 @@ sub ProcessFLIR($$;$)
|
|
|
1485
1498
|
my $ver = Get32u(\$hdr, 0x14);
|
|
1486
1499
|
last if $ver >= 100 and $ver < 200; # (have seen 100 and 101 - PH)
|
|
1487
1500
|
ToggleByteOrder();
|
|
1488
|
-
|
|
1501
|
+
next unless $i;
|
|
1502
|
+
return 0 if $$et{DOC_NUM};
|
|
1503
|
+
$et->Warn("Unsupported FLIR $type version");
|
|
1504
|
+
return 1;
|
|
1489
1505
|
}
|
|
1490
1506
|
|
|
1491
1507
|
# read the FLIR record directory
|
|
1492
1508
|
my $pos = Get32u(\$hdr, 0x18);
|
|
1493
1509
|
my $num = Get32u(\$hdr, 0x1c);
|
|
1494
|
-
unless ($raf->Seek($pos) and $raf->Read($buff, $num * 0x20) == $num * 0x20) {
|
|
1510
|
+
unless ($raf->Seek($base+$pos) and $raf->Read($buff, $num * 0x20) == $num * 0x20) {
|
|
1495
1511
|
$et->Warn('Truncated FLIR FFF directory');
|
|
1496
|
-
return 1;
|
|
1512
|
+
return $$et{DOC_NUM} ? 0 : 1;
|
|
1497
1513
|
}
|
|
1498
1514
|
|
|
1499
1515
|
unless ($tagTablePtr) {
|
|
@@ -1504,6 +1520,7 @@ sub ProcessFLIR($$;$)
|
|
|
1504
1520
|
# process the header data
|
|
1505
1521
|
$et->HandleTag($tagTablePtr, '_header', $hdr);
|
|
1506
1522
|
|
|
1523
|
+
my $success = 1;
|
|
1507
1524
|
my $oldIndent = $$et{INDENT};
|
|
1508
1525
|
$$et{INDENT} .= '| ';
|
|
1509
1526
|
$et->VerboseDir($type, $num);
|
|
@@ -1533,12 +1550,22 @@ sub ProcessFLIR($$;$)
|
|
|
1533
1550
|
$verbose and printf $out "%s%d) FLIR Record 0x%.2x, offset 0x%.4x, length 0x%.4x\n",
|
|
1534
1551
|
$$et{INDENT}, $i, $recType, $recPos, $recLen;
|
|
1535
1552
|
|
|
1536
|
-
|
|
1537
|
-
|
|
1553
|
+
# skip RawData records for embedded documents
|
|
1554
|
+
if ($recType == 1 and $$et{DOC_NUM}) {
|
|
1555
|
+
$raf->Seek($base+$recPos+$recLen) or $success = 0, last;
|
|
1556
|
+
next;
|
|
1557
|
+
}
|
|
1558
|
+
unless ($raf->Seek($base+$recPos) and $raf->Read($rec, $recLen) == $recLen) {
|
|
1559
|
+
if ($$et{DOC_NUM}) {
|
|
1560
|
+
$success = 0; # abort processing more documents
|
|
1561
|
+
} else {
|
|
1562
|
+
$et->Warn('Invalid FLIR record');
|
|
1563
|
+
}
|
|
1538
1564
|
last;
|
|
1539
1565
|
}
|
|
1540
1566
|
if ($$tagTablePtr{$recType}) {
|
|
1541
1567
|
$et->HandleTag($tagTablePtr, $recType, undef,
|
|
1568
|
+
Base => $base,
|
|
1542
1569
|
DataPt => \$rec,
|
|
1543
1570
|
DataPos => $recPos,
|
|
1544
1571
|
Start => 0,
|
|
@@ -1550,7 +1577,17 @@ sub ProcessFLIR($$;$)
|
|
|
1550
1577
|
}
|
|
1551
1578
|
delete $$et{SET_GROUP0};
|
|
1552
1579
|
$$et{INDENT} = $oldIndent;
|
|
1553
|
-
|
|
1580
|
+
|
|
1581
|
+
# extract information from subsequent frames in SEQ file if ExtractEmbedded is used
|
|
1582
|
+
if ($$dirInfo{RAF} and $et->Options('ExtractEmbedded') and not $$et{DOC_NUM}) {
|
|
1583
|
+
for (;;) {
|
|
1584
|
+
$$et{DOC_NUM} = $$et{DOC_COUNT} + 1;
|
|
1585
|
+
last unless ProcessFLIR($et, $dirInfo, $tagTablePtr);
|
|
1586
|
+
# (DOC_COUNT will be incremented automatically if we extracted any tags)
|
|
1587
|
+
}
|
|
1588
|
+
delete $$et{DOC_NUM};
|
|
1589
|
+
}
|
|
1590
|
+
return $success;
|
|
1554
1591
|
}
|
|
1555
1592
|
|
|
1556
1593
|
#------------------------------------------------------------------------------
|
|
@@ -1594,7 +1631,7 @@ Systems Inc. thermal image files (FFF, FPF and JPEG format).
|
|
|
1594
1631
|
|
|
1595
1632
|
=head1 AUTHOR
|
|
1596
1633
|
|
|
1597
|
-
Copyright 2003-
|
|
1634
|
+
Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
|
|
1598
1635
|
|
|
1599
1636
|
This library is free software; you can redistribute it and/or modify it
|
|
1600
1637
|
under the same terms as Perl itself.
|
|
@@ -354,7 +354,7 @@ linear list when ApplyFixups() is called.
|
|
|
354
354
|
|
|
355
355
|
=head1 AUTHOR
|
|
356
356
|
|
|
357
|
-
Copyright 2003-
|
|
357
|
+
Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
|
|
358
358
|
|
|
359
359
|
This library is free software; you can redistribute it and/or modify it
|
|
360
360
|
under the same terms as Perl itself.
|
|
@@ -721,7 +721,7 @@ will add AMF3 support.
|
|
|
721
721
|
|
|
722
722
|
=head1 AUTHOR
|
|
723
723
|
|
|
724
|
-
Copyright 2003-
|
|
724
|
+
Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
|
|
725
725
|
|
|
726
726
|
This library is free software; you can redistribute it and/or modify it
|
|
727
727
|
under the same terms as Perl itself.
|
|
@@ -2395,7 +2395,7 @@ JPEG images.
|
|
|
2395
2395
|
|
|
2396
2396
|
=head1 AUTHOR
|
|
2397
2397
|
|
|
2398
|
-
Copyright 2003-
|
|
2398
|
+
Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
|
|
2399
2399
|
|
|
2400
2400
|
This library is free software; you can redistribute it and/or modify it
|
|
2401
2401
|
under the same terms as Perl itself.
|
|
@@ -622,7 +622,7 @@ extracted from these formats.
|
|
|
622
622
|
|
|
623
623
|
=head1 AUTHOR
|
|
624
624
|
|
|
625
|
-
Copyright 2003-
|
|
625
|
+
Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
|
|
626
626
|
|
|
627
627
|
This library is free software; you can redistribute it and/or modify it
|
|
628
628
|
under the same terms as Perl itself.
|
|
@@ -243,7 +243,7 @@ write information from the FotoWare FotoStation trailer.
|
|
|
243
243
|
|
|
244
244
|
=head1 AUTHOR
|
|
245
245
|
|
|
246
|
-
Copyright 2003-
|
|
246
|
+
Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
|
|
247
247
|
|
|
248
248
|
This library is free software; you can redistribute it and/or modify it
|
|
249
249
|
under the same terms as Perl itself.
|
|
@@ -1670,7 +1670,7 @@ FujiFilm maker notes in EXIF information, and to read/write FujiFilm RAW
|
|
|
1670
1670
|
|
|
1671
1671
|
=head1 AUTHOR
|
|
1672
1672
|
|
|
1673
|
-
Copyright 2003-
|
|
1673
|
+
Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
|
|
1674
1674
|
|
|
1675
1675
|
This library is free software; you can redistribute it and/or modify it
|
|
1676
1676
|
under the same terms as Perl itself.
|
|
@@ -68,7 +68,7 @@ General Imaging maker notes.
|
|
|
68
68
|
|
|
69
69
|
=head1 AUTHOR
|
|
70
70
|
|
|
71
|
-
Copyright 2003-
|
|
71
|
+
Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
|
|
72
72
|
|
|
73
73
|
This library is free software; you can redistribute it and/or modify it
|
|
74
74
|
under the same terms as Perl itself.
|
|
@@ -20,7 +20,7 @@ use strict;
|
|
|
20
20
|
use vars qw($VERSION);
|
|
21
21
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
22
22
|
|
|
23
|
-
$VERSION = '1.
|
|
23
|
+
$VERSION = '1.19';
|
|
24
24
|
|
|
25
25
|
# road map of directory locations in GIF images
|
|
26
26
|
my %gifMap = (
|
|
@@ -54,6 +54,7 @@ my %gifMap = (
|
|
|
54
54
|
Extensions => { # (for documentation only)
|
|
55
55
|
SubDirectory => { TagTable => 'Image::ExifTool::GIF::Extensions' },
|
|
56
56
|
},
|
|
57
|
+
TransparentColor => { },
|
|
57
58
|
);
|
|
58
59
|
|
|
59
60
|
# GIF89a application extensions:
|
|
@@ -475,6 +476,9 @@ Block:
|
|
|
475
476
|
my $delay = Get16u(\$buff, 1);
|
|
476
477
|
$delayTime += $delay;
|
|
477
478
|
$verbose and printf $out "Graphic Control: delay=%.2f\n", $delay / 100;
|
|
479
|
+
# get transparent colour
|
|
480
|
+
my $bits = Get8u(\$buff, 0);
|
|
481
|
+
$et->HandleTag($tagTablePtr, 'TransparentColor', Get8u(\$buff,3)) if $bits & 0x01;
|
|
478
482
|
$raf->Seek(-$length, 1) or last;
|
|
479
483
|
|
|
480
484
|
} elsif ($a == 0x01 and $length == 12) { # plain text extension
|
|
@@ -537,7 +541,7 @@ write GIF meta information.
|
|
|
537
541
|
|
|
538
542
|
=head1 AUTHOR
|
|
539
543
|
|
|
540
|
-
Copyright 2003-
|
|
544
|
+
Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
|
|
541
545
|
|
|
542
546
|
This library is free software; you can redistribute it and/or modify it
|
|
543
547
|
under the same terms as Perl itself.
|
|
@@ -270,7 +270,7 @@ GIMP software.
|
|
|
270
270
|
|
|
271
271
|
=head1 AUTHOR
|
|
272
272
|
|
|
273
|
-
Copyright 2003-
|
|
273
|
+
Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
|
|
274
274
|
|
|
275
275
|
This library is free software; you can redistribute it and/or modify it
|
|
276
276
|
under the same terms as Perl itself.
|
|
@@ -137,22 +137,26 @@ my %coordConv = (
|
|
|
137
137
|
my ($v, $et) = @_;
|
|
138
138
|
$v = $et->TimeNow() if lc($v) eq 'now';
|
|
139
139
|
my @tz;
|
|
140
|
-
if ($v =~ s/([-+])(
|
|
140
|
+
if ($v =~ s/([-+])(\d{1,2}):?(\d{2})\s*(DST)?$//i) { # remove timezone
|
|
141
141
|
my $s = $1 eq '-' ? 1 : -1; # opposite sign to convert back to UTC
|
|
142
142
|
my $t = $2;
|
|
143
|
-
@tz = ($s*$
|
|
143
|
+
@tz = ($s*$2, $s*$3);
|
|
144
144
|
}
|
|
145
|
-
|
|
146
|
-
|
|
145
|
+
# (note: we must allow '.' as a time separator, eg. '10.30.00', with is tricky due to decimal seconds)
|
|
146
|
+
# YYYYmmddHHMMSS[.ss] format
|
|
147
|
+
my @a = ($v =~ /^[^\d]*\d{4}[^\d]*\d{1,2}[^\d]*\d{1,2}[^\d]*(\d{1,2})[^\d]*(\d{2})[^\d]*(\d{2}(?:\.\d+)?)[^\d]*$/);
|
|
148
|
+
# HHMMSS[.ss] format
|
|
149
|
+
@a or @a = ($v =~ /^[^\d]*(\d{1,2})[^\d]*(\d{2})[^\d]*(\d{2}(?:\.\d+)?)[^\d]*$/);
|
|
150
|
+
@a or warn('Invalid time (use HH:MM:SS[.ss][+/-HH:MM|Z])'), return undef;
|
|
147
151
|
if (@tz) {
|
|
148
152
|
# adjust to UTC
|
|
149
|
-
$a[
|
|
150
|
-
$a[
|
|
151
|
-
while ($a[
|
|
152
|
-
while ($a[
|
|
153
|
-
$a[
|
|
153
|
+
$a[1] += $tz[1];
|
|
154
|
+
$a[0] += $tz[0];
|
|
155
|
+
while ($a[1] >= 60) { $a[1] -= 60; ++$a[0] }
|
|
156
|
+
while ($a[1] < 0) { $a[1] += 60; --$a[0] }
|
|
157
|
+
$a[0] = ($a[0] + 24) % 24;
|
|
154
158
|
}
|
|
155
|
-
return
|
|
159
|
+
return join(':', @a);
|
|
156
160
|
},
|
|
157
161
|
},
|
|
158
162
|
0x0008 => {
|
|
@@ -575,7 +579,7 @@ GPS (Global Positioning System) meta information in EXIF data.
|
|
|
575
579
|
|
|
576
580
|
=head1 AUTHOR
|
|
577
581
|
|
|
578
|
-
Copyright 2003-
|
|
582
|
+
Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
|
|
579
583
|
|
|
580
584
|
This library is free software; you can redistribute it and/or modify it
|
|
581
585
|
under the same terms as Perl itself.
|
|
@@ -2242,7 +2242,7 @@ coordinates.
|
|
|
2242
2242
|
|
|
2243
2243
|
=head1 AUTHOR
|
|
2244
2244
|
|
|
2245
|
-
Copyright 2003-
|
|
2245
|
+
Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
|
|
2246
2246
|
|
|
2247
2247
|
This library is free software; you can redistribute it and/or modify it
|
|
2248
2248
|
under the same terms as Perl itself.
|
|
@@ -28,7 +28,7 @@ use vars qw($VERSION);
|
|
|
28
28
|
use Image::ExifTool qw(:Public);
|
|
29
29
|
use Image::ExifTool::GPS;
|
|
30
30
|
|
|
31
|
-
$VERSION = '1.
|
|
31
|
+
$VERSION = '1.66';
|
|
32
32
|
|
|
33
33
|
sub JITTER() { return 2 } # maximum time jitter
|
|
34
34
|
|
|
@@ -210,13 +210,14 @@ sub LoadTrackLog($$;$)
|
|
|
210
210
|
$raf->ReadLine($_) or last;
|
|
211
211
|
# determine file format
|
|
212
212
|
if (not $format) {
|
|
213
|
+
s/^\xef\xbb\xbf//; # remove leading BOM if it exists
|
|
213
214
|
if (/^<(\?xml|gpx)[\s>]/) { # look for XML or GPX header
|
|
214
215
|
$format = 'XML';
|
|
215
216
|
# check for NMEA sentence
|
|
216
217
|
# (must ONLY start with ones that have timestamps! eg. not GSA or PTNTHPR!)
|
|
217
218
|
} elsif (/^.*\$([A-Z]{2}(RMC|GGA|GLL|ZDA)|PMGNTRK),/) {
|
|
218
219
|
$format = 'NMEA';
|
|
219
|
-
$nmeaStart = $2 || $1;
|
|
220
|
+
$nmeaStart = $2 || $1; # save type of first sentence
|
|
220
221
|
} elsif (/^A(FLA|XSY|FIL)/) {
|
|
221
222
|
# (don't set format yet because we want to read HFDTE first)
|
|
222
223
|
$nmeaStart = 'B' ;
|
|
@@ -1423,7 +1424,7 @@ user-defined tag GPSRoll, must be active.
|
|
|
1423
1424
|
|
|
1424
1425
|
=head1 AUTHOR
|
|
1425
1426
|
|
|
1426
|
-
Copyright 2003-
|
|
1427
|
+
Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
|
|
1427
1428
|
|
|
1428
1429
|
This library is free software; you can redistribute it and/or modify it
|
|
1429
1430
|
under the same terms as Perl itself.
|
|
@@ -733,7 +733,7 @@ metadata from GoPro MP4 videos.
|
|
|
733
733
|
|
|
734
734
|
=head1 AUTHOR
|
|
735
735
|
|
|
736
|
-
Copyright 2003-
|
|
736
|
+
Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
|
|
737
737
|
|
|
738
738
|
This library is free software; you can redistribute it and/or modify it
|
|
739
739
|
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-2022, 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.
|
|
@@ -250,7 +250,7 @@ Hewlett-Packard maker notes.
|
|
|
250
250
|
|
|
251
251
|
=head1 AUTHOR
|
|
252
252
|
|
|
253
|
-
Copyright 2003-
|
|
253
|
+
Copyright 2003-2022, 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-2022, 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.
|
|
@@ -917,7 +917,7 @@ page.
|
|
|
917
917
|
|
|
918
918
|
=head1 AUTHOR
|
|
919
919
|
|
|
920
|
-
Copyright 2003-
|
|
920
|
+
Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
|
|
921
921
|
|
|
922
922
|
This library is free software; you can redistribute it and/or modify it
|
|
923
923
|
under the same terms as Perl itself.
|