exiftool-vendored.exe 12.72.0 → 12.76.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_files/Changes +64 -1
- package/bin/exiftool_files/README +47 -46
- package/bin/exiftool_files/exiftool.pl +121 -90
- package/bin/exiftool_files/lib/File/RandomAccess.pm +32 -6
- package/bin/exiftool_files/lib/File/RandomAccess.pod +6 -6
- package/bin/exiftool_files/lib/Image/ExifTool/7Z.pm +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/AAC.pm +8 -6
- package/bin/exiftool_files/lib/Image/ExifTool/AES.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/AFCP.pm +3 -3
- 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 +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/BigTIFF.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +9 -9
- package/bin/exiftool_files/lib/Image/ExifTool/CBOR.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +7 -6
- 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 +3 -3
- 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 +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/DJI.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/DNG.pm +5 -5
- 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 +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +4 -3
- 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 +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Fixup.pm +4 -4
- package/bin/exiftool_files/lib/Image/ExifTool/Flash.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/FlashPix.pm +61 -8
- 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 +9 -4
- package/bin/exiftool_files/lib/Image/ExifTool/GE.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/GIF.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/GIMP.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/GPS.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/GeoTiff.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +4 -4
- 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 +7 -5
- package/bin/exiftool_files/lib/Image/ExifTool/ICC_Profile.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/ICO.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/ID3.pm +3 -3
- 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 +6 -6
- package/bin/exiftool_files/lib/Image/ExifTool/InDesign.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/InfiRay.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/JPEG.pm +5 -2
- package/bin/exiftool_files/lib/Image/ExifTool/JPEGDigest.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/JSON.pm +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/JVC.pm +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Jpeg2000.pm +67 -17
- 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 +4 -4
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/fi.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/fr.pm +4 -5
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/it.pm +3 -3
- 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 +3 -3
- 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 +5 -5
- 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 +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 +1 -1
- 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 +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Motorola.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +11 -8
- package/bin/exiftool_files/lib/Image/ExifTool/NikonCapture.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/NikonCustom.pm +4 -4
- 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 +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Ogg.pm +3 -3
- 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 +55 -5
- 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 +24 -2
- 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 +27 -2
- package/bin/exiftool_files/lib/Image/ExifTool/PanasonicRaw.pm +4 -4
- package/bin/exiftool_files/lib/Image/ExifTool/Parrot.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +32 -11
- package/bin/exiftool_files/lib/Image/ExifTool/PhaseOne.pm +6 -6
- 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 +4 -4
- package/bin/exiftool_files/lib/Image/ExifTool/PostScript.pm +3 -3
- 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 +55 -101
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +97 -7
- package/bin/exiftool_files/lib/Image/ExifTool/RIFF.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/RSRC.pm +3 -3
- 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 +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Samsung.pm +5 -5
- 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 +2 -3
- 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 +4 -4
- package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +5 -5
- 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 +4 -4
- package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +3879 -3862
- package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +11439 -11374
- 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/WPG.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/WTV.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/WriteCanonRaw.pl +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/WriteExif.pl +27 -24
- package/bin/exiftool_files/lib/Image/ExifTool/WriteIPTC.pl +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/WritePDF.pl +2 -2
- 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 +5 -2
- package/bin/exiftool_files/lib/Image/ExifTool/WriteRIFF.pl +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/WriteXMP.pl +9 -5
- package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +74 -45
- package/bin/exiftool_files/lib/Image/ExifTool/XISF.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +20 -3
- package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +10 -1
- package/bin/exiftool_files/lib/Image/ExifTool/XMPStruct.pl +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/ZIP.pm +7 -7
- 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 +59 -28
- package/bin/exiftool_files/lib/Image/ExifTool.pod +81 -68
- package/package.json +6 -6
|
@@ -48,7 +48,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
48
48
|
use Image::ExifTool::Exif;
|
|
49
49
|
use Image::ExifTool::GPS;
|
|
50
50
|
|
|
51
|
-
$VERSION = '2.
|
|
51
|
+
$VERSION = '2.93';
|
|
52
52
|
|
|
53
53
|
sub ProcessMOV($$;$);
|
|
54
54
|
sub ProcessKeys($$$);
|
|
@@ -64,6 +64,7 @@ sub Process_3gf($$$);
|
|
|
64
64
|
sub Process_gps0($$$);
|
|
65
65
|
sub Process_gsen($$$);
|
|
66
66
|
sub ProcessKenwood($$$);
|
|
67
|
+
sub ProcessLIGO_JSON($$$);
|
|
67
68
|
sub ProcessRIFFTrailer($$$);
|
|
68
69
|
sub ProcessTTAD($$$);
|
|
69
70
|
sub ProcessNMEA($$$);
|
|
@@ -267,6 +268,24 @@ my %timeInfo = (
|
|
|
267
268
|
PrintConvInv => '$self->InverseDateTime($val)',
|
|
268
269
|
# (can't put Groups here because they aren't constant!)
|
|
269
270
|
);
|
|
271
|
+
# properties for ISO 8601 format date/time tags
|
|
272
|
+
my %iso8601Date = (
|
|
273
|
+
Shift => 'Time',
|
|
274
|
+
ValueConv => q{
|
|
275
|
+
require Image::ExifTool::XMP;
|
|
276
|
+
$val = Image::ExifTool::XMP::ConvertXMPDate($val);
|
|
277
|
+
$val =~ s/([-+]\d{2})(\d{2})$/$1:$2/; # add colon to timezone if necessary
|
|
278
|
+
return $val;
|
|
279
|
+
},
|
|
280
|
+
ValueConvInv => q{
|
|
281
|
+
require Image::ExifTool::XMP;
|
|
282
|
+
my $tmp = Image::ExifTool::XMP::FormatXMPDate($val);
|
|
283
|
+
($val = $tmp) =~ s/([-+]\d{2}):(\d{2})$/$1$2/ if defined $tmp; # remove time zone colon
|
|
284
|
+
return $val;
|
|
285
|
+
},
|
|
286
|
+
PrintConv => '$self->ConvertDateTime($val)',
|
|
287
|
+
PrintConvInv => '$self->InverseDateTime($val,1)', # (add time zone if it didn't exist)
|
|
288
|
+
);
|
|
270
289
|
# information for duration tags
|
|
271
290
|
my %durationInfo = (
|
|
272
291
|
ValueConv => '$$self{TimeScale} ? $val / $$self{TimeScale} : $val',
|
|
@@ -644,6 +663,7 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
|
644
663
|
Deletable => 1,
|
|
645
664
|
SubDirectory => {
|
|
646
665
|
TagTable => 'Image::ExifTool::Jpeg2000::Main',
|
|
666
|
+
DirName => 'JUMBF',
|
|
647
667
|
# 16 bytes uuid
|
|
648
668
|
# +4 bytes 0
|
|
649
669
|
# +9 bytes "manifest\0"
|
|
@@ -707,6 +727,13 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
|
707
727
|
TagTable => 'Image::ExifTool::QuickTime::Stream',
|
|
708
728
|
ProcessProc => \&ProcessKenwood,
|
|
709
729
|
},
|
|
730
|
+
},{
|
|
731
|
+
Name => 'LIGO_JSON',
|
|
732
|
+
Condition => '$$valPt =~ /^LIGOGPSINFO \{/',
|
|
733
|
+
SubDirectory => {
|
|
734
|
+
TagTable => 'Image::ExifTool::QuickTime::Stream',
|
|
735
|
+
ProcessProc => \&ProcessLIGO_JSON,
|
|
736
|
+
},
|
|
710
737
|
},{
|
|
711
738
|
Name => 'FLIRData',
|
|
712
739
|
SubDirectory => { TagTable => 'Image::ExifTool::FLIR::UserData' },
|
|
@@ -825,6 +852,7 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
|
825
852
|
# note that this may be written and/or deleted, but can't currently be added back again
|
|
826
853
|
Writable => 1,
|
|
827
854
|
},
|
|
855
|
+
# '35AX'? - seen "AT" (Yada RoadCam Pro 4K dashcam)
|
|
828
856
|
);
|
|
829
857
|
|
|
830
858
|
# stuff seen in 'skip' atom (70mai Pro Plus+ MP4 videos)
|
|
@@ -1565,22 +1593,7 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
|
1565
1593
|
"\xa9day" => {
|
|
1566
1594
|
Name => 'ContentCreateDate',
|
|
1567
1595
|
Groups => { 2 => 'Time' },
|
|
1568
|
-
|
|
1569
|
-
# handle values in the form "2010-02-12T13:27:14-0800" (written by Apple iPhone)
|
|
1570
|
-
ValueConv => q{
|
|
1571
|
-
require Image::ExifTool::XMP;
|
|
1572
|
-
$val = Image::ExifTool::XMP::ConvertXMPDate($val);
|
|
1573
|
-
$val =~ s/([-+]\d{2})(\d{2})$/$1:$2/; # add colon to timezone if necessary
|
|
1574
|
-
return $val;
|
|
1575
|
-
},
|
|
1576
|
-
ValueConvInv => q{
|
|
1577
|
-
require Image::ExifTool::XMP;
|
|
1578
|
-
my $tmp = Image::ExifTool::XMP::FormatXMPDate($val);
|
|
1579
|
-
($val = $tmp) =~ s/([-+]\d{2}):(\d{2})$/$1$2/ if defined $tmp; # remove time zone colon
|
|
1580
|
-
return $val;
|
|
1581
|
-
},
|
|
1582
|
-
PrintConv => '$self->ConvertDateTime($val)',
|
|
1583
|
-
PrintConvInv => '$self->InverseDateTime($val,1)', # (add time zone if it didn't exist)
|
|
1596
|
+
%iso8601Date,
|
|
1584
1597
|
},
|
|
1585
1598
|
"\xa9ART" => 'Artist', #PH (iTunes 8.0.2)
|
|
1586
1599
|
"\xa9alb" => 'Album', #PH (iTunes 8.0.2)
|
|
@@ -1864,21 +1877,7 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
|
1864
1877
|
Apple Photos has been reported to show a crazy date/time for some MP4 files
|
|
1865
1878
|
containing this tag, but perhaps only if it is missing a time zone
|
|
1866
1879
|
}, #forum10690/11125
|
|
1867
|
-
|
|
1868
|
-
ValueConv => q{
|
|
1869
|
-
require Image::ExifTool::XMP;
|
|
1870
|
-
$val = Image::ExifTool::XMP::ConvertXMPDate($val);
|
|
1871
|
-
$val =~ s/([-+]\d{2})(\d{2})$/$1:$2/; # add colon to timezone if necessary
|
|
1872
|
-
return $val;
|
|
1873
|
-
},
|
|
1874
|
-
ValueConvInv => q{
|
|
1875
|
-
require Image::ExifTool::XMP;
|
|
1876
|
-
$val = Image::ExifTool::XMP::FormatXMPDate($val);
|
|
1877
|
-
$val =~ s/([-+]\d{2}):(\d{2})$/$1$2/; # remove time zone colon
|
|
1878
|
-
return $val;
|
|
1879
|
-
},
|
|
1880
|
-
PrintConv => '$self->ConvertDateTime($val)',
|
|
1881
|
-
PrintConvInv => '$self->InverseDateTime($val,1)', # (add time zone if it didn't exist)
|
|
1880
|
+
%iso8601Date,
|
|
1882
1881
|
},
|
|
1883
1882
|
manu => { # (SX280)
|
|
1884
1883
|
Name => 'Make',
|
|
@@ -2301,23 +2300,9 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
|
2301
2300
|
symbol in these tag ID's for the Ricoh Theta Z1 and maybe other models
|
|
2302
2301
|
},
|
|
2303
2302
|
Groups => { 2 => 'Time' },
|
|
2304
|
-
Shift => 'Time',
|
|
2305
2303
|
Avoid => 1,
|
|
2306
2304
|
# handle values in the form "2010-02-12T13:27:14-0800"
|
|
2307
|
-
|
|
2308
|
-
require Image::ExifTool::XMP;
|
|
2309
|
-
$val = Image::ExifTool::XMP::ConvertXMPDate($val);
|
|
2310
|
-
$val =~ s/([-+]\d{2})(\d{2})$/$1:$2/; # add colon to timezone if necessary
|
|
2311
|
-
return $val;
|
|
2312
|
-
},
|
|
2313
|
-
ValueConvInv => q{
|
|
2314
|
-
require Image::ExifTool::XMP;
|
|
2315
|
-
my $tmp = Image::ExifTool::XMP::FormatXMPDate($val);
|
|
2316
|
-
($val = $tmp) =~ s/([-+]\d{2}):(\d{2})$/$1$2/ if defined $tmp; # remove time zone colon
|
|
2317
|
-
return $val;
|
|
2318
|
-
},
|
|
2319
|
-
PrintConv => '$self->ConvertDateTime($val)',
|
|
2320
|
-
PrintConvInv => '$self->InverseDateTime($val,1)', # (add time zone if it didn't exist)
|
|
2305
|
+
%iso8601Date,
|
|
2321
2306
|
},
|
|
2322
2307
|
'@xyz' => { #PH (iPhone 3GS)
|
|
2323
2308
|
Name => 'GPSCoordinates',
|
|
@@ -3330,22 +3315,7 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
|
3330
3315
|
"\xa9day" => {
|
|
3331
3316
|
Name => 'ContentCreateDate',
|
|
3332
3317
|
Groups => { 2 => 'Time' },
|
|
3333
|
-
|
|
3334
|
-
# handle values in the form "2010-02-12T13:27:14-0800"
|
|
3335
|
-
ValueConv => q{
|
|
3336
|
-
require Image::ExifTool::XMP;
|
|
3337
|
-
$val = Image::ExifTool::XMP::ConvertXMPDate($val);
|
|
3338
|
-
$val =~ s/([-+]\d{2})(\d{2})$/$1:$2/; # add colon to timezone if necessary
|
|
3339
|
-
return $val;
|
|
3340
|
-
},
|
|
3341
|
-
ValueConvInv => q{
|
|
3342
|
-
require Image::ExifTool::XMP;
|
|
3343
|
-
$val = Image::ExifTool::XMP::FormatXMPDate($val);
|
|
3344
|
-
$val =~ s/([-+]\d{2}):(\d{2})$/$1$2/; # remove time zone colon
|
|
3345
|
-
return $val;
|
|
3346
|
-
},
|
|
3347
|
-
PrintConv => '$self->ConvertDateTime($val)',
|
|
3348
|
-
PrintConvInv => '$self->InverseDateTime($val,1)', # (add time zone if it didn't exist)
|
|
3318
|
+
%iso8601Date,
|
|
3349
3319
|
},
|
|
3350
3320
|
"\xa9des" => 'Description', #4
|
|
3351
3321
|
"\xa9enc" => 'EncodedBy', #10
|
|
@@ -6394,12 +6364,10 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
|
6394
6364
|
ValueConvInv => '$val * 1000',
|
|
6395
6365
|
PrintConv => 'ConvertDuration($val)',
|
|
6396
6366
|
PrintConvInv => q{
|
|
6397
|
-
|
|
6398
|
-
|
|
6399
|
-
|
|
6400
|
-
|
|
6401
|
-
$a[0] += shift(@a) * 60 while @a > 1;
|
|
6402
|
-
return $a[0] * $sign;
|
|
6367
|
+
my $sign = ($val =~ s/^-//) ? -1 : 1;
|
|
6368
|
+
my @a = $val =~ /(\d+(?:\.\d+)?)/g;
|
|
6369
|
+
unshift @a, 0 while @a < 4;
|
|
6370
|
+
return $sign * (((($a[0] * 24) + $a[1]) * 60 + $a[2]) * 60 + $a[3]);
|
|
6403
6371
|
},
|
|
6404
6372
|
},
|
|
6405
6373
|
|
|
@@ -6513,21 +6481,7 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
|
6513
6481
|
creationdate=> {
|
|
6514
6482
|
Name => 'CreationDate',
|
|
6515
6483
|
Groups => { 2 => 'Time' },
|
|
6516
|
-
|
|
6517
|
-
ValueConv => q{
|
|
6518
|
-
require Image::ExifTool::XMP;
|
|
6519
|
-
$val = Image::ExifTool::XMP::ConvertXMPDate($val,1);
|
|
6520
|
-
$val =~ s/([-+]\d{2})(\d{2})$/$1:$2/; # add colon to timezone if necessary
|
|
6521
|
-
return $val;
|
|
6522
|
-
},
|
|
6523
|
-
ValueConvInv => q{
|
|
6524
|
-
require Image::ExifTool::XMP;
|
|
6525
|
-
$val = Image::ExifTool::XMP::FormatXMPDate($val);
|
|
6526
|
-
$val =~ s/([-+]\d{2}):(\d{2})$/$1$2/; # remove time zone colon
|
|
6527
|
-
return $val;
|
|
6528
|
-
},
|
|
6529
|
-
PrintConv => '$self->ConvertDateTime($val)',
|
|
6530
|
-
PrintConvInv => '$self->InverseDateTime($val,1)', # (add time zone if it didn't exist)
|
|
6484
|
+
%iso8601Date,
|
|
6531
6485
|
},
|
|
6532
6486
|
description => { },
|
|
6533
6487
|
director => { },
|
|
@@ -6577,21 +6531,7 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
|
6577
6531
|
'location.date' => {
|
|
6578
6532
|
Name => 'LocationDate',
|
|
6579
6533
|
Groups => { 2 => 'Time' },
|
|
6580
|
-
|
|
6581
|
-
ValueConv => q{
|
|
6582
|
-
require Image::ExifTool::XMP;
|
|
6583
|
-
$val = Image::ExifTool::XMP::ConvertXMPDate($val);
|
|
6584
|
-
$val =~ s/([-+]\d{2})(\d{2})$/$1:$2/; # add colon to timezone if necessary
|
|
6585
|
-
return $val;
|
|
6586
|
-
},
|
|
6587
|
-
ValueConvInv => q{
|
|
6588
|
-
require Image::ExifTool::XMP;
|
|
6589
|
-
$val = Image::ExifTool::XMP::FormatXMPDate($val);
|
|
6590
|
-
$val =~ s/([-+]\d{2}):(\d{2})$/$1$2/; # remove time zone colon
|
|
6591
|
-
return $val;
|
|
6592
|
-
},
|
|
6593
|
-
PrintConv => '$self->ConvertDateTime($val)',
|
|
6594
|
-
PrintConvInv => '$self->InverseDateTime($val,1)', # (add time zone if it didn't exist)
|
|
6534
|
+
%iso8601Date,
|
|
6595
6535
|
},
|
|
6596
6536
|
'location.accuracy.horizontal' => { Name => 'LocationAccuracyHorizontal' },
|
|
6597
6537
|
'live-photo.auto' => { Name => 'LivePhotoAuto', Writable => 'int8u' },
|
|
@@ -6684,6 +6624,16 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
|
6684
6624
|
'detected-face.roll-angle' => { Name => 'DetectedFaceRollAngle', Writable => 0 },
|
|
6685
6625
|
# (fiel)com.apple.quicktime.detected-face.yaw-angle (dtyp=23, float)
|
|
6686
6626
|
'detected-face.yaw-angle' => { Name => 'DetectedFaceYawAngle', Writable => 0 },
|
|
6627
|
+
# the following tags generated by ShutterEncoder when "preserve metadata" is selected (forum15610)
|
|
6628
|
+
major_brand => { Name => 'MajorBrand', Avoid => 1 },
|
|
6629
|
+
minor_version => { Name => 'MinorVersion', Avoid => 1 },
|
|
6630
|
+
compatible_brands => { Name => 'CompatibleBrands', Avoid => 1 },
|
|
6631
|
+
creation_time => {
|
|
6632
|
+
Name => 'CreationTime',
|
|
6633
|
+
Groups => { 2 => 'Time' },
|
|
6634
|
+
Avoid => 1,
|
|
6635
|
+
%iso8601Date,
|
|
6636
|
+
},
|
|
6687
6637
|
#
|
|
6688
6638
|
# seen in Apple ProRes RAW file
|
|
6689
6639
|
#
|
|
@@ -7315,6 +7265,10 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
|
7315
7265
|
Name => 'SpatialAudio',
|
|
7316
7266
|
SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::SpatialAudio' },
|
|
7317
7267
|
},
|
|
7268
|
+
btrt => {
|
|
7269
|
+
Name => 'BitrateInfo',
|
|
7270
|
+
SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Bitrate' },
|
|
7271
|
+
},
|
|
7318
7272
|
# alac - 28 bytes
|
|
7319
7273
|
# adrm - AAX DRM atom? 148 bytes
|
|
7320
7274
|
# aabd - AAX unknown 17kB (contains 'aavd' strings)
|
|
@@ -9353,7 +9307,7 @@ sub ProcessMOV($$;$)
|
|
|
9353
9307
|
}
|
|
9354
9308
|
# more convenient to package data as a RandomAccess file
|
|
9355
9309
|
unless ($raf) {
|
|
9356
|
-
$raf =
|
|
9310
|
+
$raf = File::RandomAccess->new($dataPt);
|
|
9357
9311
|
$dirEnd = $dataPos + $$dirInfo{DirLen} + ($$dirInfo{DirStart} || 0) if $$dirInfo{DirLen};
|
|
9358
9312
|
}
|
|
9359
9313
|
# skip leading bytes if necessary
|
|
@@ -10009,7 +9963,7 @@ information from QuickTime and MP4 video, M4A audio, and HEIC image files.
|
|
|
10009
9963
|
|
|
10010
9964
|
=head1 AUTHOR
|
|
10011
9965
|
|
|
10012
|
-
Copyright 2003-
|
|
9966
|
+
Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
|
|
10013
9967
|
|
|
10014
9968
|
This library is free software; you can redistribute it and/or modify it
|
|
10015
9969
|
under the same terms as Perl itself.
|
|
@@ -109,11 +109,13 @@ my %insvLimit = (
|
|
|
109
109
|
The tags below are extracted from timed metadata in QuickTime and other
|
|
110
110
|
formats of video files when the ExtractEmbedded option is used. Although
|
|
111
111
|
most of these tags are combined into the single table below, ExifTool
|
|
112
|
-
currently reads
|
|
112
|
+
currently reads 68 different formats of timed GPS metadata from video files.
|
|
113
113
|
},
|
|
114
114
|
VARS => { NO_ID => 1 },
|
|
115
115
|
GPSLatitude => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")', RawConv => '$$self{FoundGPSLatitude} = 1; $val' },
|
|
116
116
|
GPSLongitude => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")' },
|
|
117
|
+
GPSLatitude2 => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")' },
|
|
118
|
+
GPSLongitude2=> { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")' },
|
|
117
119
|
GPSAltitude => { PrintConv => '(sprintf("%.4f", $val) + 0) . " m"' }, # round to 4 decimals
|
|
118
120
|
GPSSpeed => { PrintConv => 'sprintf("%.4f", $val) + 0', Notes => 'in km/h unless GPSSpeedRef says otherwise' },
|
|
119
121
|
GPSSpeedRef => { PrintConv => { K => 'km/h', M => 'mph', N => 'knots' } },
|
|
@@ -125,6 +127,11 @@ my %insvLimit = (
|
|
|
125
127
|
RawConv => '$$self{FoundGPSDateTime} = 1; $val',
|
|
126
128
|
PrintConv => '$self->ConvertDateTime($val)',
|
|
127
129
|
},
|
|
130
|
+
DateTimeOriginal => {
|
|
131
|
+
Groups => { 2 => 'Time' },
|
|
132
|
+
Description => 'Date/Time Original',
|
|
133
|
+
PrintConv => '$self->ConvertDateTime($val)',
|
|
134
|
+
},
|
|
128
135
|
GPSTimeStamp => { PrintConv => 'Image::ExifTool::GPS::PrintTimeStamp($val)', Groups => { 2 => 'Time' } },
|
|
129
136
|
GPSSatellites=> { },
|
|
130
137
|
GPSDOP => { Description => 'GPS Dilution Of Precision' },
|
|
@@ -841,11 +848,11 @@ sub FoundSomething($$;$$)
|
|
|
841
848
|
#------------------------------------------------------------------------------
|
|
842
849
|
# Approximate GPSDateTime value from sample time and CreateDate
|
|
843
850
|
# Inputs: 0) ExifTool ref, 1) tag table ptr, 2) sample time (s)
|
|
844
|
-
# 3) true if CreateDate is at end of video
|
|
851
|
+
# 3) true if CreateDate is at end of video, 4) flag if CreateDate is UTC
|
|
845
852
|
# Notes: Uses ExifTool CreateDateAtEnd as flag to subtract video duration
|
|
846
|
-
sub SetGPSDateTime(
|
|
853
|
+
sub SetGPSDateTime($$$;$)
|
|
847
854
|
{
|
|
848
|
-
my ($et, $tagTbl, $sampleTime) = @_;
|
|
855
|
+
my ($et, $tagTbl, $sampleTime, $isUTC) = @_;
|
|
849
856
|
my $value = $$et{VALUE};
|
|
850
857
|
if (defined $sampleTime and $$value{CreateDate}) {
|
|
851
858
|
$sampleTime += $$value{CreateDate}; # adjust sample time to seconds since the epoch
|
|
@@ -856,7 +863,9 @@ sub SetGPSDateTime($$$)
|
|
|
856
863
|
} else {
|
|
857
864
|
$et->WarnOnce('Approximating GPSDateTime as CreateDate + SampleTime', 1);
|
|
858
865
|
}
|
|
859
|
-
|
|
866
|
+
my $utc = $et->Options('QuickTimeUTC');
|
|
867
|
+
$utc = $isUTC unless defined $utc; # (allow QuickTimeUTC=0 to override $isUTC default)
|
|
868
|
+
unless ($utc) {
|
|
860
869
|
my $tzOff = $$et{tzOff}; # use previously calculated offset
|
|
861
870
|
unless (defined $tzOff) {
|
|
862
871
|
# adjust to UTC, assuming time is local
|
|
@@ -1337,7 +1346,7 @@ Sample: for ($i=0; ; ) {
|
|
|
1337
1346
|
$et->HandleTag($tagTbl, GPSLatitude => Get32s(\$buff, 12+$n) * 180/0x80000000);
|
|
1338
1347
|
$et->HandleTag($tagTbl, GPSLongitude => Get32s(\$buff, 16+$n) * 180/0x80000000);
|
|
1339
1348
|
$et->HandleTag($tagTbl, GPSSpeed => Get16u(\$buff, 8+$n) * $mphToKph);
|
|
1340
|
-
SetGPSDateTime($et, $tagTbl, $time[$i]);
|
|
1349
|
+
SetGPSDateTime($et, $tagTbl, $time[$i], 1);
|
|
1341
1350
|
next; # all done (don't store/process as text)
|
|
1342
1351
|
}
|
|
1343
1352
|
unless (defined $val) {
|
|
@@ -2426,6 +2435,83 @@ sub Process_gsen($$$)
|
|
|
2426
2435
|
return 1;
|
|
2427
2436
|
}
|
|
2428
2437
|
|
|
2438
|
+
#------------------------------------------------------------------------------
|
|
2439
|
+
# Process LIGOGPS JSON-format GPS from Yada RoadCam Pro 4K BT58189
|
|
2440
|
+
# Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
|
|
2441
|
+
# Returns: 1 on success
|
|
2442
|
+
# Sample data (chained 512-byte records starting like this):
|
|
2443
|
+
# 0000: 4c 49 47 4f 47 50 53 49 4e 46 4f 20 7b 22 48 6f [LIGOGPSINFO {"Ho]
|
|
2444
|
+
# 0010: 75 72 22 3a 20 22 32 33 22 2c 20 22 4d 69 6e 75 [ur": "23", "Minu]
|
|
2445
|
+
# 0020: 74 65 22 3a 20 22 31 30 22 2c 20 22 53 65 63 6f [te": "10", "Seco]
|
|
2446
|
+
# 0030: 6e 64 22 3a 20 22 32 32 22 2c 20 22 59 65 61 72 [nd": "22", "Year]
|
|
2447
|
+
# 0040: 22 3a 20 22 32 30 32 33 22 2c 20 22 4d 6f 6e 74 [": "2023", "Mont]
|
|
2448
|
+
# 0050: 68 22 3a 20 22 31 32 22 2c 20 22 44 61 79 22 3a [h": "12", "Day":]
|
|
2449
|
+
# 0060: 20 22 32 38 22 2c 20 22 73 74 61 74 75 73 22 3a [ "28", "status":]
|
|
2450
|
+
sub ProcessLIGO_JSON($$$)
|
|
2451
|
+
{
|
|
2452
|
+
my ($et, $dirInfo, $tagTbl) = @_;
|
|
2453
|
+
my $dataPt = $$dirInfo{DataPt};
|
|
2454
|
+
my $dirLen = $$dirInfo{DirLen};
|
|
2455
|
+
require Image::ExifTool::Import;
|
|
2456
|
+
$et->VerboseDir('LIGO_JSON', undef, length($$dataPt));
|
|
2457
|
+
while ($$dataPt =~ /LIGOGPSINFO (\{.*?\})/g) {
|
|
2458
|
+
my $json = $1;
|
|
2459
|
+
my $raf = File::RandomAccess->new(\$json);
|
|
2460
|
+
my %dbase;
|
|
2461
|
+
Image::ExifTool::Import::ReadJSON($raf, \%dbase);
|
|
2462
|
+
my $info = $dbase{'*'} or next;
|
|
2463
|
+
# my sample contains the following JSON fields (in this order):
|
|
2464
|
+
# Hour Minute Second Year Month Day (GPS UTC time)
|
|
2465
|
+
# status NS EW Latitude Longitude Speed (speed in knots)
|
|
2466
|
+
# GsensorX GsensorY GsensorZ (units? - only seen "000" for all)
|
|
2467
|
+
# MHour MMinute MSecond MYear MMonth MDay (local dashcam clock time)
|
|
2468
|
+
# OLatitude OLongitude (? same values as Latitude/Longitude)
|
|
2469
|
+
next unless defined $$info{status} and $$info{status} eq 'A'; # only read if GPS is active
|
|
2470
|
+
$$et{DOC_NUM} = ++$$et{DOC_COUNT};
|
|
2471
|
+
my $num = 0;
|
|
2472
|
+
defined $$info{$_} and ++$num foreach qw(Year Month Day Hour Minute Second);
|
|
2473
|
+
if ($num == 6) {
|
|
2474
|
+
# this is the GPS time in UTC
|
|
2475
|
+
my $time = sprintf('%.4d:%.2d:%.2d %.2d:%.2d:%.2dZ',@$info{qw{Year Month Day Hour Minute Second}});
|
|
2476
|
+
$et->HandleTag($tagTbl, GPSDateTime => $time);
|
|
2477
|
+
}
|
|
2478
|
+
if ($$info{Latitude} and $$info{Longitude}) {
|
|
2479
|
+
my $lat = $$info{Latitude};
|
|
2480
|
+
$lat = -$lat if $$info{NS} and $$info{NS} eq 'S';
|
|
2481
|
+
my $lon = $$info{Longitude};
|
|
2482
|
+
$lon = -$lon if $$info{EW} and $$info{EW} eq 'W';
|
|
2483
|
+
$et->HandleTag($tagTbl, GPSLatitude => $lat);
|
|
2484
|
+
$et->HandleTag($tagTbl, GPSLongitude => $lon);
|
|
2485
|
+
}
|
|
2486
|
+
$et->HandleTag($tagTbl, GPSSpeed => $$info{Speed} * $knotsToKph) if defined $$info{Speed};
|
|
2487
|
+
if (defined $$info{GsensorX} and defined $$info{GsensorY} and defined $$info{GsensorZ}) {
|
|
2488
|
+
# (don't know conversion factor for accel data, so leave it raw for now)
|
|
2489
|
+
$et->HandleTag($tagTbl, Accelerometer => "$$info{GsensorX} $$info{GsensorY} $$info{GsensorZ}");
|
|
2490
|
+
}
|
|
2491
|
+
$num = 0;
|
|
2492
|
+
defined $$info{$_} and ++$num foreach qw(MYear MMonth MDay MHour MMinute MSecond);
|
|
2493
|
+
if ($num == 6) {
|
|
2494
|
+
# this is the dashcam clock time (local time zone)
|
|
2495
|
+
my $time = sprintf('%.4d:%.2d:%.2d %.2d:%.2d:%.2d',@$info{qw{MYear MMonth MDay MHour MMinute MSecond}});
|
|
2496
|
+
$et->HandleTag($tagTbl, DateTimeOriginal => $time);
|
|
2497
|
+
}
|
|
2498
|
+
if (defined $$info{OLatitude} and defined $$info{OLongitude}) {
|
|
2499
|
+
my $lat = $$info{OLatitude};
|
|
2500
|
+
$lat = -$lat if $$info{NS} and $$info{NS} eq 'S';
|
|
2501
|
+
my $lon = $$info{OLongitude};
|
|
2502
|
+
$lon = -$lon if $$info{EW} and $$info{EW} eq 'W';
|
|
2503
|
+
$et->HandleTag($tagTbl, GPSLatitude2 => $lat);
|
|
2504
|
+
$et->HandleTag($tagTbl, GPSLongitude2 => $lon);
|
|
2505
|
+
}
|
|
2506
|
+
unless ($et->Options('ExtractEmbedded')) {
|
|
2507
|
+
$et->WarnOnce('Use the ExtractEmbedded option to extract all timed GPS',3);
|
|
2508
|
+
last;
|
|
2509
|
+
}
|
|
2510
|
+
}
|
|
2511
|
+
delete $$et{DOC_NUM};
|
|
2512
|
+
return 1;
|
|
2513
|
+
}
|
|
2514
|
+
|
|
2429
2515
|
#------------------------------------------------------------------------------
|
|
2430
2516
|
# Process Kenwood drv-a301w dashcam 'udta' atom (ref PH)
|
|
2431
2517
|
# Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
|
|
@@ -2464,6 +2550,10 @@ sub ProcessKenwood($$$)
|
|
|
2464
2550
|
push @acc, $1/1000, $2/1000, $3/1000;
|
|
2465
2551
|
}
|
|
2466
2552
|
$et->HandleTag($tagTbl, Accelerometer => "@acc") if @acc;
|
|
2553
|
+
unless ($et->Options('ExtractEmbedded')) {
|
|
2554
|
+
$et->WarnOnce('Use the ExtractEmbedded option to extract all timed GPS',3);
|
|
2555
|
+
last;
|
|
2556
|
+
}
|
|
2467
2557
|
}
|
|
2468
2558
|
delete $$et{DOC_NUM};
|
|
2469
2559
|
return 1;
|
|
@@ -3221,7 +3311,7 @@ information like GPS tracks from MOV, MP4 and INSV media data.
|
|
|
3221
3311
|
|
|
3222
3312
|
=head1 AUTHOR
|
|
3223
3313
|
|
|
3224
|
-
Copyright 2003-
|
|
3314
|
+
Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
|
|
3225
3315
|
|
|
3226
3316
|
This library is free software; you can redistribute it and/or modify it
|
|
3227
3317
|
under the same terms as Perl itself.
|
|
@@ -2199,7 +2199,7 @@ including AVI videos, WAV audio files and WEBP images.
|
|
|
2199
2199
|
|
|
2200
2200
|
=head1 AUTHOR
|
|
2201
2201
|
|
|
2202
|
-
Copyright 2003-
|
|
2202
|
+
Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
|
|
2203
2203
|
|
|
2204
2204
|
This library is free software; you can redistribute it and/or modify it
|
|
2205
2205
|
under the same terms as Perl itself.
|
|
@@ -14,7 +14,7 @@ use strict;
|
|
|
14
14
|
use vars qw($VERSION);
|
|
15
15
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
16
16
|
|
|
17
|
-
$VERSION = '1.
|
|
17
|
+
$VERSION = '1.10';
|
|
18
18
|
|
|
19
19
|
sub ProcessRSRC($$);
|
|
20
20
|
|
|
@@ -70,7 +70,7 @@ sub ProcessRSRC($$)
|
|
|
70
70
|
my ($hdr, $map, $buff, $i, $j);
|
|
71
71
|
|
|
72
72
|
# allow access with data reference
|
|
73
|
-
$raf or $raf =
|
|
73
|
+
$raf or $raf = File::RandomAccess->new($$dirInfo{DataPt});
|
|
74
74
|
|
|
75
75
|
# attempt to validate the format as thoroughly as practical
|
|
76
76
|
return 0 unless $raf->Read($hdr, 30) == 30;
|
|
@@ -225,7 +225,7 @@ resource files.
|
|
|
225
225
|
|
|
226
226
|
=head1 AUTHOR
|
|
227
227
|
|
|
228
|
-
Copyright 2003-
|
|
228
|
+
Copyright 2003-2024, 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-2024, 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-2024, 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-2024, 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-2024, 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-2024, 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-2024, 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.
|
|
@@ -21,7 +21,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
21
21
|
use Image::ExifTool::Exif;
|
|
22
22
|
use Image::ExifTool::GPS;
|
|
23
23
|
|
|
24
|
-
$VERSION = '1.
|
|
24
|
+
$VERSION = '1.38';
|
|
25
25
|
|
|
26
26
|
sub ProcessRicohText($$$);
|
|
27
27
|
sub ProcessRicohRMETA($$$);
|
|
@@ -1078,7 +1078,7 @@ sub ProcessRicohText($$$)
|
|
|
1078
1078
|
$tagInfo = {
|
|
1079
1079
|
Name => "Ricoh_Text_$tag",
|
|
1080
1080
|
Unknown => 1,
|
|
1081
|
-
PrintConv =>
|
|
1081
|
+
PrintConv => \&Image::ExifTool::LimitLongValues,
|
|
1082
1082
|
};
|
|
1083
1083
|
# add tag information to table
|
|
1084
1084
|
AddTagToTable($tagTablePtr, $tag, $tagInfo);
|
|
@@ -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-2024, 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.
|
|
@@ -22,7 +22,7 @@ use vars qw($VERSION %samsungLensTypes);
|
|
|
22
22
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
23
23
|
use Image::ExifTool::Exif;
|
|
24
24
|
|
|
25
|
-
$VERSION = '1.
|
|
25
|
+
$VERSION = '1.56';
|
|
26
26
|
|
|
27
27
|
sub WriteSTMN($$$);
|
|
28
28
|
sub ProcessINFO($$$);
|
|
@@ -1546,7 +1546,7 @@ sub ProcessSamsung($$$)
|
|
|
1546
1546
|
my ($buff, $buf2, $index, $offsetPos, $audioNOff, $audioSize);
|
|
1547
1547
|
|
|
1548
1548
|
unless ($raf) {
|
|
1549
|
-
$raf =
|
|
1549
|
+
$raf = File::RandomAccess->new($$dirInfo{DataPt});
|
|
1550
1550
|
$et->VerboseDir('SamsungTrailer');
|
|
1551
1551
|
}
|
|
1552
1552
|
return 0 unless $raf->Seek(-6-$offset, 2) and $raf->Read($buff, 6) == 6 and
|
|
@@ -1675,7 +1675,7 @@ SamBlock:
|
|
|
1675
1675
|
# add a fixup so the calling routine can apply further shifts if necessary
|
|
1676
1676
|
require Image::ExifTool::Fixup;
|
|
1677
1677
|
my $fixup = $$dirInfo{Fixup};
|
|
1678
|
-
$fixup or $fixup = $$dirInfo{Fixup} =
|
|
1678
|
+
$fixup or $fixup = $$dirInfo{Fixup} = Image::ExifTool::Fixup->new;
|
|
1679
1679
|
$fixup->AddFixup(length($buff) - $offsetPos);
|
|
1680
1680
|
$fixup->AddFixup(length($buff) - $offsetPos + 4);
|
|
1681
1681
|
}
|
|
@@ -1697,7 +1697,7 @@ sub WriteSTMN($$$)
|
|
|
1697
1697
|
{
|
|
1698
1698
|
my ($et, $dirInfo, $tagTablePtr) = @_;
|
|
1699
1699
|
# create a Fixup for the PreviewImage
|
|
1700
|
-
$$dirInfo{Fixup} =
|
|
1700
|
+
$$dirInfo{Fixup} = Image::ExifTool::Fixup->new;
|
|
1701
1701
|
my $val = Image::ExifTool::WriteBinaryData($et, $dirInfo, $tagTablePtr);
|
|
1702
1702
|
# force PreviewImage into the trailer even if it fits in EXIF segment
|
|
1703
1703
|
$$et{PREVIEW_INFO}{IsTrailer} = 1 if $$et{PREVIEW_INFO};
|
|
@@ -1723,7 +1723,7 @@ Samsung maker notes in EXIF information.
|
|
|
1723
1723
|
|
|
1724
1724
|
=head1 AUTHOR
|
|
1725
1725
|
|
|
1726
|
-
Copyright 2003-
|
|
1726
|
+
Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
|
|
1727
1727
|
|
|
1728
1728
|
This library is free software; you can redistribute it and/or modify it
|
|
1729
1729
|
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-2024, 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-2024, 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.
|
|
@@ -361,7 +361,7 @@ sub ShiftTime($;$$$)
|
|
|
361
361
|
};
|
|
362
362
|
# not a problem if we failed here since we'll just try again next time,
|
|
363
363
|
# so don't return error message
|
|
364
|
-
unless (
|
|
364
|
+
unless ($@) {
|
|
365
365
|
my $mode;
|
|
366
366
|
if (defined $time[0]) {
|
|
367
367
|
$mode = defined $time[3] ? 'DateTime' : 'Date';
|
|
@@ -403,7 +403,6 @@ sub ShiftTime($;$$$)
|
|
|
403
403
|
};
|
|
404
404
|
$@ and return CleanWarning($@);
|
|
405
405
|
$tm += $$shiftOffset{$mode}; # apply the shift
|
|
406
|
-
$tm < 0 and return 'Shift results in negative time';
|
|
407
406
|
# save fractional seconds in shifted time
|
|
408
407
|
$frac = $tm - int($tm);
|
|
409
408
|
if ($frac) {
|
|
@@ -632,7 +631,7 @@ limited to the range 1970 to 2038 on 32-bit systems.
|
|
|
632
631
|
|
|
633
632
|
=head1 AUTHOR
|
|
634
633
|
|
|
635
|
-
Copyright 2003-
|
|
634
|
+
Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
|
|
636
635
|
|
|
637
636
|
This library is free software; you can redistribute it and/or modify it
|
|
638
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-2024, 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.
|