exiftool_vendored 12.72.0 → 12.74.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/Changes +42 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +3 -3
- data/bin/exiftool +75 -53
- data/bin/lib/File/RandomAccess.pm +32 -6
- data/bin/lib/File/RandomAccess.pod +6 -6
- data/bin/lib/Image/ExifTool/7Z.pm +3 -3
- data/bin/lib/Image/ExifTool/AAC.pm +8 -6
- data/bin/lib/Image/ExifTool/AES.pm +1 -1
- data/bin/lib/Image/ExifTool/AFCP.pm +3 -3
- 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 +3 -3
- data/bin/lib/Image/ExifTool/BigTIFF.pm +1 -1
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +7 -7
- data/bin/lib/Image/ExifTool/CBOR.pm +1 -1
- data/bin/lib/Image/ExifTool/Canon.pm +4 -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 +3 -3
- 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 +3 -3
- data/bin/lib/Image/ExifTool/DJI.pm +1 -1
- data/bin/lib/Image/ExifTool/DNG.pm +5 -5
- data/bin/lib/Image/ExifTool/DPX.pm +1 -1
- data/bin/lib/Image/ExifTool/DV.pm +1 -1
- data/bin/lib/Image/ExifTool/DarwinCore.pm +1 -1
- data/bin/lib/Image/ExifTool/DjVu.pm +1 -1
- data/bin/lib/Image/ExifTool/EXE.pm +1 -1
- data/bin/lib/Image/ExifTool/Exif.pm +3 -3
- 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 +3 -3
- data/bin/lib/Image/ExifTool/Fixup.pm +4 -4
- data/bin/lib/Image/ExifTool/Flash.pm +1 -1
- data/bin/lib/Image/ExifTool/FlashPix.pm +61 -8
- 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 +9 -4
- data/bin/lib/Image/ExifTool/GE.pm +1 -1
- data/bin/lib/Image/ExifTool/GIF.pm +1 -1
- data/bin/lib/Image/ExifTool/GIMP.pm +1 -1
- data/bin/lib/Image/ExifTool/GPS.pm +1 -1
- data/bin/lib/Image/ExifTool/GeoTiff.pm +1 -1
- data/bin/lib/Image/ExifTool/Geotag.pm +4 -4
- 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 +3 -3
- 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 +3 -3
- data/bin/lib/Image/ExifTool/IPTC.pm +1 -1
- data/bin/lib/Image/ExifTool/ISO.pm +1 -1
- data/bin/lib/Image/ExifTool/ITC.pm +1 -1
- data/bin/lib/Image/ExifTool/Import.pm +6 -6
- 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 +5 -2
- data/bin/lib/Image/ExifTool/JPEGDigest.pm +1 -1
- data/bin/lib/Image/ExifTool/JSON.pm +3 -3
- data/bin/lib/Image/ExifTool/JVC.pm +3 -3
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +18 -7
- 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 +4 -4
- data/bin/lib/Image/ExifTool/Lang/fi.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/fr.pm +4 -5
- data/bin/lib/Image/ExifTool/Lang/it.pm +3 -3
- 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 +3 -3
- data/bin/lib/Image/ExifTool/Lytro.pm +1 -1
- data/bin/lib/Image/ExifTool/M2TS.pm +1 -1
- data/bin/lib/Image/ExifTool/MIE.pm +5 -5
- 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 +1 -1
- 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 +3 -3
- data/bin/lib/Image/ExifTool/Motorola.pm +1 -1
- data/bin/lib/Image/ExifTool/Nikon.pm +11 -8
- data/bin/lib/Image/ExifTool/NikonCapture.pm +1 -1
- data/bin/lib/Image/ExifTool/NikonCustom.pm +4 -4
- 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 +3 -3
- 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 +4 -4
- data/bin/lib/Image/ExifTool/PLUS.pm +1 -1
- data/bin/lib/Image/ExifTool/PNG.pm +24 -2
- 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 +27 -2
- data/bin/lib/Image/ExifTool/PanasonicRaw.pm +4 -4
- data/bin/lib/Image/ExifTool/Parrot.pm +1 -1
- data/bin/lib/Image/ExifTool/Pentax.pm +32 -11
- data/bin/lib/Image/ExifTool/PhaseOne.pm +6 -6
- 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 +4 -4
- data/bin/lib/Image/ExifTool/PostScript.pm +3 -3
- data/bin/lib/Image/ExifTool/PrintIM.pm +1 -1
- data/bin/lib/Image/ExifTool/Qualcomm.pm +1 -1
- data/bin/lib/Image/ExifTool/QuickTime.pm +54 -101
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +97 -7
- data/bin/lib/Image/ExifTool/RIFF.pm +1 -1
- data/bin/lib/Image/ExifTool/RSRC.pm +3 -3
- 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 +3 -3
- data/bin/lib/Image/ExifTool/Samsung.pm +5 -5
- 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 +2 -2
- 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 +4 -4
- data/bin/lib/Image/ExifTool/Sony.pm +5 -5
- 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 +4 -4
- data/bin/lib/Image/ExifTool/TagLookup.pm +3876 -3862
- data/bin/lib/Image/ExifTool/TagNames.pod +11420 -11382
- data/bin/lib/Image/ExifTool/Text.pm +1 -1
- data/bin/lib/Image/ExifTool/Theora.pm +1 -1
- data/bin/lib/Image/ExifTool/Torrent.pm +1 -1
- data/bin/lib/Image/ExifTool/Unknown.pm +1 -1
- data/bin/lib/Image/ExifTool/VCard.pm +1 -1
- data/bin/lib/Image/ExifTool/Validate.pm +1 -1
- data/bin/lib/Image/ExifTool/Vorbis.pm +1 -1
- data/bin/lib/Image/ExifTool/WPG.pm +1 -1
- data/bin/lib/Image/ExifTool/WTV.pm +1 -1
- data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +2 -2
- data/bin/lib/Image/ExifTool/WriteExif.pl +16 -16
- data/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
- data/bin/lib/Image/ExifTool/WritePDF.pl +2 -2
- 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 +5 -2
- data/bin/lib/Image/ExifTool/WriteRIFF.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteXMP.pl +9 -5
- data/bin/lib/Image/ExifTool/Writer.pl +72 -43
- data/bin/lib/Image/ExifTool/XISF.pm +1 -1
- data/bin/lib/Image/ExifTool/XMP.pm +19 -3
- 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 +7 -7
- data/bin/lib/Image/ExifTool/ZISRAW.pm +1 -1
- data/bin/lib/Image/ExifTool/iWork.pm +1 -1
- data/bin/lib/Image/ExifTool.pm +44 -25
- data/bin/lib/Image/ExifTool.pod +12 -3
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
@@ -28,7 +28,7 @@ use strict;
|
|
28
28
|
use vars qw($VERSION $AUTOLOAD $iptcDigestInfo %printFlags);
|
29
29
|
use Image::ExifTool qw(:DataAccess :Utils);
|
30
30
|
|
31
|
-
$VERSION = '1.
|
31
|
+
$VERSION = '1.70';
|
32
32
|
|
33
33
|
sub ProcessPhotoshop($$$);
|
34
34
|
sub WritePhotoshop($$$);
|
@@ -70,7 +70,7 @@ my %thumbnailInfo = (
|
|
70
70
|
Protected => 1,
|
71
71
|
RawConv => 'my $img=substr($val,0x1c); $self->ValidateImage(\$img,$tag)',
|
72
72
|
ValueConvInv => q{
|
73
|
-
my $et =
|
73
|
+
my $et = Image::ExifTool->new;
|
74
74
|
my @tags = qw{ImageWidth ImageHeight FileType};
|
75
75
|
my $info = $et->ImageInfo(\$val, @tags);
|
76
76
|
my ($w, $h, $type) = @$info{@tags};
|
@@ -892,7 +892,7 @@ sub ProcessDocumentData($$$)
|
|
892
892
|
unless ($raf) {
|
893
893
|
my $dataPt = $$dirInfo{DataPt};
|
894
894
|
my $start = $$dirInfo{DirStart} || 0;
|
895
|
-
$raf =
|
895
|
+
$raf = File::RandomAccess->new($dataPt);
|
896
896
|
$raf->Seek($start, 0) if $start;
|
897
897
|
$dirLen = length $$dataPt - $start unless defined $dirLen;
|
898
898
|
$et->VerboseDump($dataPt, Start => $start, Len => $dirLen, Base => $$dirInfo{Base});
|
@@ -1201,7 +1201,7 @@ be preserved when copying Photoshop information via user-defined tags.
|
|
1201
1201
|
|
1202
1202
|
=head1 AUTHOR
|
1203
1203
|
|
1204
|
-
Copyright 2003-
|
1204
|
+
Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
|
1205
1205
|
|
1206
1206
|
This library is free software; you can redistribute it and/or modify it
|
1207
1207
|
under the same terms as Perl itself.
|
@@ -16,7 +16,7 @@ use strict;
|
|
16
16
|
use vars qw($VERSION $AUTOLOAD);
|
17
17
|
use Image::ExifTool qw(:DataAccess :Utils);
|
18
18
|
|
19
|
-
$VERSION = '1.
|
19
|
+
$VERSION = '1.45';
|
20
20
|
|
21
21
|
sub WritePS($$);
|
22
22
|
sub ProcessPS($$;$);
|
@@ -430,7 +430,7 @@ sub ProcessPS($$;$)
|
|
430
430
|
|
431
431
|
# allow read from data
|
432
432
|
unless ($raf) {
|
433
|
-
$raf =
|
433
|
+
$raf = File::RandomAccess->new($$dirInfo{DataPt});
|
434
434
|
$et->VerboseDir('PostScript');
|
435
435
|
}
|
436
436
|
#
|
@@ -777,7 +777,7 @@ This code reads meta information from EPS (Encapsulated PostScript), PS
|
|
777
777
|
|
778
778
|
=head1 AUTHOR
|
779
779
|
|
780
|
-
Copyright 2003-
|
780
|
+
Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
|
781
781
|
|
782
782
|
This library is free software; you can redistribute it and/or modify it
|
783
783
|
under the same terms as Perl itself.
|
@@ -112,7 +112,7 @@ Print Image Matching meta information.
|
|
112
112
|
|
113
113
|
=head1 AUTHOR
|
114
114
|
|
115
|
-
Copyright 2003-
|
115
|
+
Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
|
116
116
|
|
117
117
|
This library is free software; you can redistribute it and/or modify it
|
118
118
|
under the same terms as Perl itself.
|
@@ -1331,7 +1331,7 @@ information from the APP7 Qualcomm segment in JPEG images.
|
|
1331
1331
|
|
1332
1332
|
=head1 AUTHOR
|
1333
1333
|
|
1334
|
-
Copyright 2003-
|
1334
|
+
Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
|
1335
1335
|
|
1336
1336
|
This library is free software; you can redistribute it and/or modify it
|
1337
1337
|
under the same terms as Perl itself.
|
@@ -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.92';
|
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',
|
@@ -707,6 +726,13 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
707
726
|
TagTable => 'Image::ExifTool::QuickTime::Stream',
|
708
727
|
ProcessProc => \&ProcessKenwood,
|
709
728
|
},
|
729
|
+
},{
|
730
|
+
Name => 'LIGO_JSON',
|
731
|
+
Condition => '$$valPt =~ /^LIGOGPSINFO \{/',
|
732
|
+
SubDirectory => {
|
733
|
+
TagTable => 'Image::ExifTool::QuickTime::Stream',
|
734
|
+
ProcessProc => \&ProcessLIGO_JSON,
|
735
|
+
},
|
710
736
|
},{
|
711
737
|
Name => 'FLIRData',
|
712
738
|
SubDirectory => { TagTable => 'Image::ExifTool::FLIR::UserData' },
|
@@ -825,6 +851,7 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
825
851
|
# note that this may be written and/or deleted, but can't currently be added back again
|
826
852
|
Writable => 1,
|
827
853
|
},
|
854
|
+
# '35AX'? - seen "AT" (Yada RoadCam Pro 4K dashcam)
|
828
855
|
);
|
829
856
|
|
830
857
|
# stuff seen in 'skip' atom (70mai Pro Plus+ MP4 videos)
|
@@ -1565,22 +1592,7 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
1565
1592
|
"\xa9day" => {
|
1566
1593
|
Name => 'ContentCreateDate',
|
1567
1594
|
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)
|
1595
|
+
%iso8601Date,
|
1584
1596
|
},
|
1585
1597
|
"\xa9ART" => 'Artist', #PH (iTunes 8.0.2)
|
1586
1598
|
"\xa9alb" => 'Album', #PH (iTunes 8.0.2)
|
@@ -1864,21 +1876,7 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
1864
1876
|
Apple Photos has been reported to show a crazy date/time for some MP4 files
|
1865
1877
|
containing this tag, but perhaps only if it is missing a time zone
|
1866
1878
|
}, #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)
|
1879
|
+
%iso8601Date,
|
1882
1880
|
},
|
1883
1881
|
manu => { # (SX280)
|
1884
1882
|
Name => 'Make',
|
@@ -2301,23 +2299,9 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
2301
2299
|
symbol in these tag ID's for the Ricoh Theta Z1 and maybe other models
|
2302
2300
|
},
|
2303
2301
|
Groups => { 2 => 'Time' },
|
2304
|
-
Shift => 'Time',
|
2305
2302
|
Avoid => 1,
|
2306
2303
|
# 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)
|
2304
|
+
%iso8601Date,
|
2321
2305
|
},
|
2322
2306
|
'@xyz' => { #PH (iPhone 3GS)
|
2323
2307
|
Name => 'GPSCoordinates',
|
@@ -3330,22 +3314,7 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
3330
3314
|
"\xa9day" => {
|
3331
3315
|
Name => 'ContentCreateDate',
|
3332
3316
|
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)
|
3317
|
+
%iso8601Date,
|
3349
3318
|
},
|
3350
3319
|
"\xa9des" => 'Description', #4
|
3351
3320
|
"\xa9enc" => 'EncodedBy', #10
|
@@ -6394,12 +6363,10 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
6394
6363
|
ValueConvInv => '$val * 1000',
|
6395
6364
|
PrintConv => 'ConvertDuration($val)',
|
6396
6365
|
PrintConvInv => q{
|
6397
|
-
|
6398
|
-
|
6399
|
-
|
6400
|
-
|
6401
|
-
$a[0] += shift(@a) * 60 while @a > 1;
|
6402
|
-
return $a[0] * $sign;
|
6366
|
+
my $sign = ($val =~ s/^-//) ? -1 : 1;
|
6367
|
+
my @a = $val =~ /(\d+(?:\.\d+)?)/g;
|
6368
|
+
unshift @a, 0 while @a < 4;
|
6369
|
+
return $sign * (((($a[0] * 24) + $a[1]) * 60 + $a[2]) * 60 + $a[3]);
|
6403
6370
|
},
|
6404
6371
|
},
|
6405
6372
|
|
@@ -6513,21 +6480,7 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
6513
6480
|
creationdate=> {
|
6514
6481
|
Name => 'CreationDate',
|
6515
6482
|
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)
|
6483
|
+
%iso8601Date,
|
6531
6484
|
},
|
6532
6485
|
description => { },
|
6533
6486
|
director => { },
|
@@ -6577,21 +6530,7 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
6577
6530
|
'location.date' => {
|
6578
6531
|
Name => 'LocationDate',
|
6579
6532
|
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)
|
6533
|
+
%iso8601Date,
|
6595
6534
|
},
|
6596
6535
|
'location.accuracy.horizontal' => { Name => 'LocationAccuracyHorizontal' },
|
6597
6536
|
'live-photo.auto' => { Name => 'LivePhotoAuto', Writable => 'int8u' },
|
@@ -6684,6 +6623,16 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
6684
6623
|
'detected-face.roll-angle' => { Name => 'DetectedFaceRollAngle', Writable => 0 },
|
6685
6624
|
# (fiel)com.apple.quicktime.detected-face.yaw-angle (dtyp=23, float)
|
6686
6625
|
'detected-face.yaw-angle' => { Name => 'DetectedFaceYawAngle', Writable => 0 },
|
6626
|
+
# the following tags generated by ShutterEncoder when "preserve metadata" is selected (forum15610)
|
6627
|
+
major_brand => { Name => 'MajorBrand', Avoid => 1 },
|
6628
|
+
minor_version => { Name => 'MinorVersion', Avoid => 1 },
|
6629
|
+
compatible_brands => { Name => 'CompatibleBrands', Avoid => 1 },
|
6630
|
+
creation_time => {
|
6631
|
+
Name => 'CreationTime',
|
6632
|
+
Groups => { 2 => 'Time' },
|
6633
|
+
Avoid => 1,
|
6634
|
+
%iso8601Date,
|
6635
|
+
},
|
6687
6636
|
#
|
6688
6637
|
# seen in Apple ProRes RAW file
|
6689
6638
|
#
|
@@ -7315,6 +7264,10 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
7315
7264
|
Name => 'SpatialAudio',
|
7316
7265
|
SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::SpatialAudio' },
|
7317
7266
|
},
|
7267
|
+
btrt => {
|
7268
|
+
Name => 'BitrateInfo',
|
7269
|
+
SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Bitrate' },
|
7270
|
+
},
|
7318
7271
|
# alac - 28 bytes
|
7319
7272
|
# adrm - AAX DRM atom? 148 bytes
|
7320
7273
|
# aabd - AAX unknown 17kB (contains 'aavd' strings)
|
@@ -9353,7 +9306,7 @@ sub ProcessMOV($$;$)
|
|
9353
9306
|
}
|
9354
9307
|
# more convenient to package data as a RandomAccess file
|
9355
9308
|
unless ($raf) {
|
9356
|
-
$raf =
|
9309
|
+
$raf = File::RandomAccess->new($dataPt);
|
9357
9310
|
$dirEnd = $dataPos + $$dirInfo{DirLen} + ($$dirInfo{DirStart} || 0) if $$dirInfo{DirLen};
|
9358
9311
|
}
|
9359
9312
|
# skip leading bytes if necessary
|
@@ -10009,7 +9962,7 @@ information from QuickTime and MP4 video, M4A audio, and HEIC image files.
|
|
10009
9962
|
|
10010
9963
|
=head1 AUTHOR
|
10011
9964
|
|
10012
|
-
Copyright 2003-
|
9965
|
+
Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
|
10013
9966
|
|
10014
9967
|
This library is free software; you can redistribute it and/or modify it
|
10015
9968
|
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.
|