exiftool-vendored.pl 13.0.1 → 13.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/Changes +254 -20
- package/bin/MANIFEST +10 -0
- package/bin/META.json +1 -1
- package/bin/META.yml +1 -1
- package/bin/README +3 -3
- package/bin/arg_files/exif2xmp.args +4 -0
- package/bin/arg_files/xmp2exif.args +2 -1
- package/bin/build_geolocation +1 -1
- package/bin/exiftool +356 -213
- package/bin/lib/File/RandomAccess.pm +1 -1
- package/bin/lib/File/RandomAccess.pod +2 -2
- package/bin/lib/Image/ExifTool/AAC.pm +1 -1
- package/bin/lib/Image/ExifTool/AES.pm +1 -1
- package/bin/lib/Image/ExifTool/AFCP.pm +6 -6
- package/bin/lib/Image/ExifTool/AIFF.pm +2 -2
- package/bin/lib/Image/ExifTool/APE.pm +2 -2
- package/bin/lib/Image/ExifTool/APP12.pm +1 -1
- package/bin/lib/Image/ExifTool/ASF.pm +2 -2
- package/bin/lib/Image/ExifTool/Apple.pm +11 -9
- package/bin/lib/Image/ExifTool/Audible.pm +1 -1
- package/bin/lib/Image/ExifTool/BMP.pm +1 -1
- package/bin/lib/Image/ExifTool/BPG.pm +1 -1
- package/bin/lib/Image/ExifTool/BZZ.pm +1 -1
- package/bin/lib/Image/ExifTool/BigTIFF.pm +1 -1
- package/bin/lib/Image/ExifTool/BuildTagLookup.pm +36 -22
- package/bin/lib/Image/ExifTool/CBOR.pm +5 -2
- package/bin/lib/Image/ExifTool/Canon.pm +66 -27
- package/bin/lib/Image/ExifTool/CanonCustom.pm +1 -1
- package/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
- package/bin/lib/Image/ExifTool/CanonVRD.pm +1 -1
- package/bin/lib/Image/ExifTool/CaptureOne.pm +1 -1
- package/bin/lib/Image/ExifTool/Casio.pm +1 -1
- package/bin/lib/Image/ExifTool/Charset.pm +1 -1
- package/bin/lib/Image/ExifTool/DICOM.pm +1 -1
- package/bin/lib/Image/ExifTool/DJI.pm +196 -30
- package/bin/lib/Image/ExifTool/DNG.pm +1 -1
- package/bin/lib/Image/ExifTool/DPX.pm +1 -1
- package/bin/lib/Image/ExifTool/DV.pm +1 -1
- package/bin/lib/Image/ExifTool/DarwinCore.pm +1 -1
- package/bin/lib/Image/ExifTool/DjVu.pm +1 -1
- package/bin/lib/Image/ExifTool/EXE.pm +138 -33
- package/bin/lib/Image/ExifTool/Exif.pm +29 -16
- package/bin/lib/Image/ExifTool/FITS.pm +3 -3
- package/bin/lib/Image/ExifTool/FLAC.pm +1 -1
- package/bin/lib/Image/ExifTool/FLIF.pm +3 -3
- package/bin/lib/Image/ExifTool/FLIR.pm +1 -1
- package/bin/lib/Image/ExifTool/Fixup.pm +1 -1
- package/bin/lib/Image/ExifTool/Flash.pm +1 -1
- package/bin/lib/Image/ExifTool/FlashPix.pm +17 -21
- package/bin/lib/Image/ExifTool/Font.pm +2 -2
- package/bin/lib/Image/ExifTool/FotoStation.pm +1 -1
- package/bin/lib/Image/ExifTool/FujiFilm.pm +1 -1
- package/bin/lib/Image/ExifTool/GE.pm +1 -1
- package/bin/lib/Image/ExifTool/GIF.pm +144 -93
- package/bin/lib/Image/ExifTool/GIMP.pm +1 -1
- package/bin/lib/Image/ExifTool/GM.pm +1 -1
- package/bin/lib/Image/ExifTool/GPS.pm +34 -30
- package/bin/lib/Image/ExifTool/GeoTiff.pm +1 -1
- package/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
- package/bin/lib/Image/ExifTool/Geolocation.pm +19 -9
- package/bin/lib/Image/ExifTool/Geotag.pm +46 -12
- package/bin/lib/Image/ExifTool/GoPro.pm +120 -8
- package/bin/lib/Image/ExifTool/H264.pm +1 -1
- package/bin/lib/Image/ExifTool/HP.pm +2 -2
- package/bin/lib/Image/ExifTool/HTML.pm +1 -1
- package/bin/lib/Image/ExifTool/HtmlDump.pm +1 -1
- package/bin/lib/Image/ExifTool/ICC_Profile.pm +81 -2
- package/bin/lib/Image/ExifTool/ICO.pm +1 -1
- package/bin/lib/Image/ExifTool/ID3.pm +8 -8
- package/bin/lib/Image/ExifTool/IPTC.pm +10 -7
- package/bin/lib/Image/ExifTool/ISO.pm +1 -1
- package/bin/lib/Image/ExifTool/ITC.pm +1 -1
- package/bin/lib/Image/ExifTool/Import.pm +5 -4
- package/bin/lib/Image/ExifTool/InDesign.pm +2 -2
- package/bin/lib/Image/ExifTool/InfiRay.pm +1 -1
- package/bin/lib/Image/ExifTool/JPEG.pm +32 -5
- package/bin/lib/Image/ExifTool/JPEGDigest.pm +1 -1
- package/bin/lib/Image/ExifTool/JSON.pm +1 -1
- package/bin/lib/Image/ExifTool/JVC.pm +1 -1
- package/bin/lib/Image/ExifTool/Jpeg2000.pm +10 -9
- package/bin/lib/Image/ExifTool/Kodak.pm +1 -1
- package/bin/lib/Image/ExifTool/KyoceraRaw.pm +1 -1
- package/bin/lib/Image/ExifTool/LIF.pm +1 -1
- package/bin/lib/Image/ExifTool/LNK.pm +2 -2
- package/bin/lib/Image/ExifTool/Lang/cs.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/de.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/en_ca.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/en_gb.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/fi.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/fr.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/it.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/ja.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/ko.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/nl.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/pl.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/ru.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/sk.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/sv.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/tr.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/zh_cn.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/zh_tw.pm +1 -1
- package/bin/lib/Image/ExifTool/Leaf.pm +1 -1
- package/bin/lib/Image/ExifTool/LigoGPS.pm +409 -0
- package/bin/lib/Image/ExifTool/Lytro.pm +1 -1
- package/bin/lib/Image/ExifTool/M2TS.pm +57 -18
- package/bin/lib/Image/ExifTool/MIE.pm +15 -6
- package/bin/lib/Image/ExifTool/MIEUnits.pod +1 -1
- package/bin/lib/Image/ExifTool/MIFF.pm +1 -1
- package/bin/lib/Image/ExifTool/MISB.pm +1 -1
- package/bin/lib/Image/ExifTool/MNG.pm +1 -1
- package/bin/lib/Image/ExifTool/MOI.pm +1 -1
- package/bin/lib/Image/ExifTool/MPC.pm +1 -1
- package/bin/lib/Image/ExifTool/MPEG.pm +1 -1
- package/bin/lib/Image/ExifTool/MPF.pm +1 -1
- package/bin/lib/Image/ExifTool/MRC.pm +1 -1
- package/bin/lib/Image/ExifTool/MWG.pm +1 -1
- package/bin/lib/Image/ExifTool/MXF.pm +3 -3
- package/bin/lib/Image/ExifTool/MacOS.pm +3 -2
- package/bin/lib/Image/ExifTool/MakerNotes.pm +1 -1
- package/bin/lib/Image/ExifTool/Matroska.pm +22 -6
- package/bin/lib/Image/ExifTool/Microsoft.pm +2 -2
- package/bin/lib/Image/ExifTool/Minolta.pm +1 -1
- package/bin/lib/Image/ExifTool/MinoltaRaw.pm +1 -1
- package/bin/lib/Image/ExifTool/Motorola.pm +1 -1
- package/bin/lib/Image/ExifTool/Nikon.pm +495 -39
- package/bin/lib/Image/ExifTool/NikonCapture.pm +1 -1
- package/bin/lib/Image/ExifTool/NikonCustom.pm +2 -2
- package/bin/lib/Image/ExifTool/NikonSettings.pm +1 -1
- package/bin/lib/Image/ExifTool/Nintendo.pm +1 -1
- package/bin/lib/Image/ExifTool/OOXML.pm +8 -8
- package/bin/lib/Image/ExifTool/Ogg.pm +1 -1
- package/bin/lib/Image/ExifTool/Olympus.pm +1 -1
- package/bin/lib/Image/ExifTool/OpenEXR.pm +1 -1
- package/bin/lib/Image/ExifTool/Opus.pm +1 -1
- package/bin/lib/Image/ExifTool/Other.pm +1 -1
- package/bin/lib/Image/ExifTool/PCX.pm +1 -1
- package/bin/lib/Image/ExifTool/PDF.pm +49 -18
- package/bin/lib/Image/ExifTool/PGF.pm +1 -1
- package/bin/lib/Image/ExifTool/PICT.pm +1 -1
- package/bin/lib/Image/ExifTool/PLIST.pm +4 -4
- package/bin/lib/Image/ExifTool/PLUS.pm +1 -1
- package/bin/lib/Image/ExifTool/PNG.pm +20 -8
- package/bin/lib/Image/ExifTool/PPM.pm +12 -3
- package/bin/lib/Image/ExifTool/PSP.pm +1 -1
- package/bin/lib/Image/ExifTool/Palm.pm +1 -1
- package/bin/lib/Image/ExifTool/Panasonic.pm +27 -3
- package/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -1
- package/bin/lib/Image/ExifTool/Parrot.pm +1 -1
- package/bin/lib/Image/ExifTool/Pentax.pm +1 -1
- package/bin/lib/Image/ExifTool/PhaseOne.pm +4 -4
- package/bin/lib/Image/ExifTool/PhotoCD.pm +1 -1
- package/bin/lib/Image/ExifTool/PhotoMechanic.pm +1 -1
- package/bin/lib/Image/ExifTool/Photoshop.pm +65 -4
- package/bin/lib/Image/ExifTool/PostScript.pm +1 -1
- package/bin/lib/Image/ExifTool/PrintIM.pm +1 -1
- package/bin/lib/Image/ExifTool/Protobuf.pm +270 -0
- package/bin/lib/Image/ExifTool/Qualcomm.pm +1 -1
- package/bin/lib/Image/ExifTool/QuickTime.pm +326 -88
- package/bin/lib/Image/ExifTool/QuickTimeStream.pl +199 -195
- package/bin/lib/Image/ExifTool/README +12 -2
- package/bin/lib/Image/ExifTool/RIFF.pm +21 -6
- package/bin/lib/Image/ExifTool/RSRC.pm +1 -1
- package/bin/lib/Image/ExifTool/RTF.pm +2 -2
- package/bin/lib/Image/ExifTool/Radiance.pm +1 -1
- package/bin/lib/Image/ExifTool/Rawzor.pm +1 -1
- package/bin/lib/Image/ExifTool/Real.pm +1 -1
- package/bin/lib/Image/ExifTool/Reconyx.pm +1 -1
- package/bin/lib/Image/ExifTool/Red.pm +1 -1
- package/bin/lib/Image/ExifTool/Ricoh.pm +4 -4
- package/bin/lib/Image/ExifTool/Samsung.pm +2 -2
- package/bin/lib/Image/ExifTool/Sanyo.pm +1 -1
- package/bin/lib/Image/ExifTool/Scalado.pm +1 -1
- package/bin/lib/Image/ExifTool/Shift.pl +1 -1
- package/bin/lib/Image/ExifTool/Shortcuts.pm +1 -1
- package/bin/lib/Image/ExifTool/Sigma.pm +1 -1
- package/bin/lib/Image/ExifTool/SigmaRaw.pm +1 -1
- package/bin/lib/Image/ExifTool/Sony.pm +5 -4
- package/bin/lib/Image/ExifTool/SonyIDC.pm +1 -1
- package/bin/lib/Image/ExifTool/Stim.pm +1 -1
- package/bin/lib/Image/ExifTool/TagInfoXML.pm +6 -5
- package/bin/lib/Image/ExifTool/TagLookup.pm +7023 -6968
- package/bin/lib/Image/ExifTool/TagNames.pod +445 -29
- package/bin/lib/Image/ExifTool/Text.pm +4 -3
- package/bin/lib/Image/ExifTool/Theora.pm +1 -1
- package/bin/lib/Image/ExifTool/Torrent.pm +3 -3
- package/bin/lib/Image/ExifTool/Unknown.pm +1 -1
- package/bin/lib/Image/ExifTool/VCard.pm +3 -3
- package/bin/lib/Image/ExifTool/Validate.pm +6 -6
- package/bin/lib/Image/ExifTool/Vivo.pm +124 -0
- package/bin/lib/Image/ExifTool/Vorbis.pm +1 -1
- package/bin/lib/Image/ExifTool/WPG.pm +1 -1
- package/bin/lib/Image/ExifTool/WTV.pm +1 -1
- package/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
- package/bin/lib/Image/ExifTool/WriteExif.pl +3 -3
- package/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
- package/bin/lib/Image/ExifTool/WritePDF.pl +1 -1
- package/bin/lib/Image/ExifTool/WritePNG.pl +1 -1
- package/bin/lib/Image/ExifTool/WritePhotoshop.pl +1 -1
- package/bin/lib/Image/ExifTool/WritePostScript.pl +1 -1
- package/bin/lib/Image/ExifTool/WriteQuickTime.pl +166 -79
- package/bin/lib/Image/ExifTool/WriteRIFF.pl +17 -6
- package/bin/lib/Image/ExifTool/WriteXMP.pl +3 -3
- package/bin/lib/Image/ExifTool/Writer.pl +89 -96
- package/bin/lib/Image/ExifTool/XISF.pm +1 -1
- package/bin/lib/Image/ExifTool/XMP.pm +28 -13
- package/bin/lib/Image/ExifTool/XMP2.pl +103 -1
- package/bin/lib/Image/ExifTool/XMPStruct.pl +2 -3
- package/bin/lib/Image/ExifTool/ZIP.pm +2 -2
- package/bin/lib/Image/ExifTool/ZISRAW.pm +1 -1
- package/bin/lib/Image/ExifTool/iWork.pm +1 -1
- package/bin/lib/Image/ExifTool.pm +335 -163
- package/bin/lib/Image/ExifTool.pod +119 -73
- package/bin/perl-Image-ExifTool.spec +1 -1
- package/bin/windows_exiftool.txt +96 -51
- package/package.json +6 -6
|
@@ -15,7 +15,7 @@ use strict;
|
|
|
15
15
|
use vars qw($VERSION);
|
|
16
16
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
17
17
|
|
|
18
|
-
$VERSION = '1.
|
|
18
|
+
$VERSION = '1.05';
|
|
19
19
|
|
|
20
20
|
# Text tags
|
|
21
21
|
%Image::ExifTool::Text::Main = (
|
|
@@ -191,7 +191,8 @@ sub ProcessTXT($$)
|
|
|
191
191
|
$enc = 'unknown-8bit';
|
|
192
192
|
}
|
|
193
193
|
}
|
|
194
|
-
|
|
194
|
+
# ($$et{VALUE}{MIMEEncoding} may be undef if it was ignored)
|
|
195
|
+
if (defined $$et{VALUE}{MIMEEncoding} and $$et{VALUE}{MIMEEncoding} ne $enc) {
|
|
195
196
|
$$et{VALUE}{MIMEEncoding} = $enc;
|
|
196
197
|
$et->VPrint(0," MIMEEncoding [override] = $enc\n");
|
|
197
198
|
}
|
|
@@ -221,7 +222,7 @@ characteristics of TXT and CSV files.
|
|
|
221
222
|
|
|
222
223
|
=head1 AUTHOR
|
|
223
224
|
|
|
224
|
-
Copyright 2003-
|
|
225
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
225
226
|
|
|
226
227
|
This library is free software; you can redistribute it and/or modify it
|
|
227
228
|
under the same terms as Perl itself.
|
|
@@ -122,7 +122,7 @@ information from Theora video streams.
|
|
|
122
122
|
|
|
123
123
|
=head1 AUTHOR
|
|
124
124
|
|
|
125
|
-
Copyright 2003-
|
|
125
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
126
126
|
|
|
127
127
|
This library is free software; you can redistribute it and/or modify it
|
|
128
128
|
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.07';
|
|
18
18
|
|
|
19
19
|
sub ReadBencode($$$);
|
|
20
20
|
sub ExtractTags($$$;$$@);
|
|
@@ -282,7 +282,7 @@ sub ProcessTorrent($$)
|
|
|
282
282
|
my $dict = ReadBencode($et, $raf, \$buff);
|
|
283
283
|
my $err = $$raf{BencodeError};
|
|
284
284
|
$et->Warn("Bencode error: $err") if $err;
|
|
285
|
-
if (ref $dict eq 'HASH' and ($$dict{announce} or $$dict{'created by'})) {
|
|
285
|
+
if (ref $dict eq 'HASH' and ($$dict{announce} or $$dict{'created by'} or $$dict{info})) {
|
|
286
286
|
$et->SetFileType();
|
|
287
287
|
my $tagTablePtr = GetTagTable('Image::ExifTool::Torrent::Main');
|
|
288
288
|
ExtractTags($et, $dict, $tagTablePtr) and $success = 1;
|
|
@@ -309,7 +309,7 @@ bencoded information from BitTorrent files.
|
|
|
309
309
|
|
|
310
310
|
=head1 AUTHOR
|
|
311
311
|
|
|
312
|
-
Copyright 2003-
|
|
312
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
313
313
|
|
|
314
314
|
This library is free software; you can redistribute it and/or modify it
|
|
315
315
|
under the same terms as Perl itself.
|
|
@@ -53,7 +53,7 @@ unknown manufacturers.
|
|
|
53
53
|
|
|
54
54
|
=head1 AUTHOR
|
|
55
55
|
|
|
56
|
-
Copyright 2003-
|
|
56
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
57
57
|
|
|
58
58
|
This library is free software; you can redistribute it and/or modify it
|
|
59
59
|
under the same terms as Perl itself.
|
|
@@ -325,7 +325,7 @@ sub ProcessVCard($$)
|
|
|
325
325
|
$$et{DOC_NUM} = ++$$et{DOC_COUNT}; # read next card as a new document
|
|
326
326
|
}
|
|
327
327
|
unless ($val =~ s/^([-A-Za-z0-9.]+)//) {
|
|
328
|
-
$et->
|
|
328
|
+
$et->Warn("Unrecognized line in $lbl file");
|
|
329
329
|
next;
|
|
330
330
|
}
|
|
331
331
|
my $tag = $1;
|
|
@@ -379,7 +379,7 @@ sub ProcessVCard($$)
|
|
|
379
379
|
$param{$p} = '';
|
|
380
380
|
}
|
|
381
381
|
}
|
|
382
|
-
$val =~ s/^:// or $et->
|
|
382
|
+
$val =~ s/^:// or $et->Warn("Invalid line in $lbl file"), next;
|
|
383
383
|
# add 'Type' parameter to id and name if it exists
|
|
384
384
|
$param{Type} and $tag .= $param{Type}, $name .= $param{Type};
|
|
385
385
|
# convert base64-encoded data
|
|
@@ -430,7 +430,7 @@ information from vCard VCF and iCalendar ICS files.
|
|
|
430
430
|
|
|
431
431
|
=head1 AUTHOR
|
|
432
432
|
|
|
433
|
-
Copyright 2003-
|
|
433
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
434
434
|
|
|
435
435
|
This library is free software; you can redistribute it and/or modify it
|
|
436
436
|
under the same terms as Perl itself.
|
|
@@ -17,7 +17,7 @@ package Image::ExifTool::Validate;
|
|
|
17
17
|
use strict;
|
|
18
18
|
use vars qw($VERSION %exifSpec);
|
|
19
19
|
|
|
20
|
-
$VERSION = '1.
|
|
20
|
+
$VERSION = '1.24';
|
|
21
21
|
|
|
22
22
|
use Image::ExifTool qw(:Utils);
|
|
23
23
|
use Image::ExifTool::Exif;
|
|
@@ -421,7 +421,7 @@ sub ValidateExif($$$$$$$$)
|
|
|
421
421
|
{
|
|
422
422
|
my ($et, $tagTablePtr, $tag, $tagInfo, $lastTag, $ifd, $count, $formatStr) = @_;
|
|
423
423
|
|
|
424
|
-
$et->
|
|
424
|
+
$et->Warn("Entries in $ifd are out of order") if $tag <= $lastTag;
|
|
425
425
|
|
|
426
426
|
# (get tagInfo for unknown tags if Unknown option not used)
|
|
427
427
|
if (not defined $tagInfo and $$tagTablePtr{$tag} and ref $$tagTablePtr{$tag} eq 'HASH') {
|
|
@@ -532,8 +532,8 @@ sub ValidateOffsetInfo($$$;$)
|
|
|
532
532
|
while (@offsets) {
|
|
533
533
|
my $start = pop @offsets;
|
|
534
534
|
my $end = $start + pop @sizes;
|
|
535
|
-
$et->
|
|
536
|
-
$et->
|
|
535
|
+
$et->Warn("$dirName:$$offsets[0]{Name} is zero", $minor) if $start == 0;
|
|
536
|
+
$et->Warn("$dirName:$$sizes[0]{Name} is zero", $minor) if $start == $end;
|
|
537
537
|
next unless $end > $fileSize;
|
|
538
538
|
if ($start >= $fileSize) {
|
|
539
539
|
if ($start == 0xffffffff) {
|
|
@@ -575,7 +575,7 @@ sub FinishValidate($$)
|
|
|
575
575
|
# get all tags in this group
|
|
576
576
|
foreach $key (sort keys %{$$et{VALUE}}) {
|
|
577
577
|
next unless $et->GetGroup($key, 1) eq $grp;
|
|
578
|
-
next if $$et{TAG_EXTRA}{$key}
|
|
578
|
+
next if $$et{TAG_EXTRA}{$key}{G3}; # ignore sub-documents
|
|
579
579
|
# fill in %val lookup with values based on tag ID
|
|
580
580
|
my $tag = $$et{TAG_INFO}{$key}{TagID};
|
|
581
581
|
$val{$tag} = $$et{VALUE}{$key};
|
|
@@ -678,7 +678,7 @@ ExifTool Validate option is enabled.
|
|
|
678
678
|
|
|
679
679
|
=head1 AUTHOR
|
|
680
680
|
|
|
681
|
-
Copyright 2003-
|
|
681
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
682
682
|
|
|
683
683
|
This library is free software; you can redistribute it and/or modify it
|
|
684
684
|
under the same terms as Perl itself.
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
#------------------------------------------------------------------------------
|
|
2
|
+
# File: Vivo.pm
|
|
3
|
+
#
|
|
4
|
+
# Description: Read trailer written by Vivo phones
|
|
5
|
+
#
|
|
6
|
+
# Revisions: 2025-01-13 - P. Harvey Created
|
|
7
|
+
#------------------------------------------------------------------------------
|
|
8
|
+
|
|
9
|
+
package Image::ExifTool::Vivo;
|
|
10
|
+
|
|
11
|
+
use strict;
|
|
12
|
+
use vars qw($VERSION);
|
|
13
|
+
use Image::ExifTool qw(:DataAccess :Utils);
|
|
14
|
+
use Image::ExifTool::XMP;
|
|
15
|
+
|
|
16
|
+
$VERSION = '1.00';
|
|
17
|
+
|
|
18
|
+
%Image::ExifTool::Vivo::Main = (
|
|
19
|
+
GROUPS => { 0 => 'Trailer', 1 => 'Vivo', 2 => 'Image' },
|
|
20
|
+
VARS => { NO_ID => 1 },
|
|
21
|
+
NOTES => 'Proprietary information written by some Vivo phones.',
|
|
22
|
+
# (don't know for sure what type of image this is, but it is in JPEG format)
|
|
23
|
+
HDRImage => {
|
|
24
|
+
Notes => 'highlights of HDR image',
|
|
25
|
+
Groups => { 2 => 'Preview' },
|
|
26
|
+
Binary => 1,
|
|
27
|
+
},
|
|
28
|
+
JSONInfo => { },
|
|
29
|
+
HiddenData => {
|
|
30
|
+
Notes => 'hidden in EXIF, not in trailer. This data is lost if the file is edited',
|
|
31
|
+
Groups => { 0 => 'EXIF' },
|
|
32
|
+
},
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
#------------------------------------------------------------------------------
|
|
36
|
+
# Process Vivo trailer
|
|
37
|
+
# Inputs: 0) ExifTool object reference, 1) dirInfo reference
|
|
38
|
+
# Returns: 1 on success, -1 if we must scan for the start of the trailer
|
|
39
|
+
# - takes Offset as positive offset from end of trailer to end of file,
|
|
40
|
+
# and returns DataPos and DirLen, and updates OutFile when writing
|
|
41
|
+
sub ProcessVivo($$)
|
|
42
|
+
{
|
|
43
|
+
my ($et, $dirInfo) = @_;
|
|
44
|
+
my $raf = $$dirInfo{RAF};
|
|
45
|
+
my $buff;
|
|
46
|
+
|
|
47
|
+
# return now unless we are at a position to scan for the trailer
|
|
48
|
+
# (must scan because the trailer footer doesn't indicate the trailer length)
|
|
49
|
+
return -1 unless $$dirInfo{ScanForTrailer};
|
|
50
|
+
|
|
51
|
+
my $pos = $raf->Tell();
|
|
52
|
+
$raf->Seek(0, 2) or return 0;
|
|
53
|
+
my $len = $raf->Tell() - $pos - $$dirInfo{Offset};
|
|
54
|
+
$raf->Seek($pos, 0) or return 0;
|
|
55
|
+
return 0 unless $len > 0 and $len < 1e7 and $raf->Read($buff, $len) == $len and
|
|
56
|
+
$buff =~ /\xff{4}\x1b\*9HWfu\x84\x93\xa2\xb1$/ and # validate footer
|
|
57
|
+
$buff =~ /(streamdata|vivo\{")/g; # find start
|
|
58
|
+
my $start = pos($buff) - length($1);
|
|
59
|
+
if ($start) {
|
|
60
|
+
$pos += $start;
|
|
61
|
+
$len -= $start;
|
|
62
|
+
$buff = substr($buff, $start);
|
|
63
|
+
}
|
|
64
|
+
# set trailer position and length
|
|
65
|
+
@$dirInfo{'DataPos','DirLen'} = ($pos, $len);
|
|
66
|
+
|
|
67
|
+
if ($$dirInfo{OutFile}) {
|
|
68
|
+
if ($$et{DEL_GROUP}{Vivo}) {
|
|
69
|
+
$et->VPrint(0, " Deleting Vivo trailer ($len bytes)\n");
|
|
70
|
+
++$$et{CHANGED};
|
|
71
|
+
} else {
|
|
72
|
+
$et->VPrint(0, " Copying Vivo trailer ($len bytes)\n");
|
|
73
|
+
Write($$dirInfo{OutFile}, $buff);
|
|
74
|
+
}
|
|
75
|
+
} else {
|
|
76
|
+
$et->DumpTrailer($dirInfo) if $$et{OPTIONS}{Verbose} or $$et{HTML_DUMP};
|
|
77
|
+
my $tbl = GetTagTable('Image::ExifTool::Vivo::Main');
|
|
78
|
+
pos($buff) = 0; # rewind search to start of buffer
|
|
79
|
+
if ($buff =~ /^streamdata\xff\xd8\xff/ and $buff =~ /\xff\xd9stream(info|coun)/g) {
|
|
80
|
+
$et->HandleTag($tbl, HDRImage => substr($buff, 10, pos($buff)-20));
|
|
81
|
+
}
|
|
82
|
+
# continue looking for Vivo JSON data
|
|
83
|
+
if ($buff =~ /vivo\{"/g) {
|
|
84
|
+
my $jsonStart = pos($buff) - 2;
|
|
85
|
+
if ($buff =~ /\}\0/g) {
|
|
86
|
+
my $jsonLen = pos($buff) - 1 - $jsonStart;
|
|
87
|
+
$et->HandleTag($tbl, JSONInfo => substr($buff, $jsonStart, $jsonLen));
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return 1;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
1; # end
|
|
95
|
+
|
|
96
|
+
__END__
|
|
97
|
+
|
|
98
|
+
=head1 NAME
|
|
99
|
+
|
|
100
|
+
Image::ExifTool::Vivo - Read trailer written by Vivo phones
|
|
101
|
+
|
|
102
|
+
=head1 SYNOPSIS
|
|
103
|
+
|
|
104
|
+
This module is used by Image::ExifTool
|
|
105
|
+
|
|
106
|
+
=head1 DESCRIPTION
|
|
107
|
+
|
|
108
|
+
This module contains definitions required by Image::ExifTool to read
|
|
109
|
+
metadata the trailer written by some Vivo phones.
|
|
110
|
+
|
|
111
|
+
=head1 AUTHOR
|
|
112
|
+
|
|
113
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
114
|
+
|
|
115
|
+
This library is free software; you can redistribute it and/or modify it
|
|
116
|
+
under the same terms as Perl itself.
|
|
117
|
+
|
|
118
|
+
=head1 SEE ALSO
|
|
119
|
+
|
|
120
|
+
L<Image::ExifTool::TagNames/Vivo Tags>,
|
|
121
|
+
L<Image::ExifTool(3pm)|Image::ExifTool>
|
|
122
|
+
|
|
123
|
+
=cut
|
|
124
|
+
|
|
@@ -228,7 +228,7 @@ information from Ogg Vorbis audio headers.
|
|
|
228
228
|
|
|
229
229
|
=head1 AUTHOR
|
|
230
230
|
|
|
231
|
-
Copyright 2003-
|
|
231
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
232
232
|
|
|
233
233
|
This library is free software; you can redistribute it and/or modify it
|
|
234
234
|
under the same terms as Perl itself.
|
|
@@ -271,7 +271,7 @@ This module contains definitions required by Image::ExifTool to read WPG
|
|
|
271
271
|
|
|
272
272
|
=head1 AUTHOR
|
|
273
273
|
|
|
274
|
-
Copyright 2003-
|
|
274
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
275
275
|
|
|
276
276
|
This library is free software; you can redistribute it and/or modify it
|
|
277
277
|
under the same terms as Perl itself.
|
|
@@ -297,7 +297,7 @@ This module contains definitions required by Image::ExifTool to read WTV
|
|
|
297
297
|
|
|
298
298
|
=head1 AUTHOR
|
|
299
299
|
|
|
300
|
-
Copyright 2003-
|
|
300
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
301
301
|
|
|
302
302
|
This library is free software; you can redistribute it and/or modify it
|
|
303
303
|
under the same terms as Perl itself.
|
|
@@ -630,7 +630,7 @@ JPEG files, and would lead to far fewer problems with corrupted metadata.
|
|
|
630
630
|
|
|
631
631
|
=head1 AUTHOR
|
|
632
632
|
|
|
633
|
-
Copyright 2003-
|
|
633
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
634
634
|
|
|
635
635
|
This library is free software; you can redistribute it and/or modify it
|
|
636
636
|
under the same terms as Perl itself.
|
|
@@ -387,8 +387,8 @@ sub ValidateImageData($$$;$)
|
|
|
387
387
|
}
|
|
388
388
|
push @bitsPerSample, $bitsPerSample[0] while @bitsPerSample < $samplesPerPix;
|
|
389
389
|
foreach (@bitsPerSample) {
|
|
390
|
-
$et->
|
|
391
|
-
$et->
|
|
390
|
+
$et->Warn("$dirName BitsPerSample values are different", $minor) if $_ ne $bitsPerSample[0];
|
|
391
|
+
$et->Warn("Invalid $dirName BitsPerSample value", $minor) if $_ < 1 or $_ > 32;
|
|
392
392
|
}
|
|
393
393
|
}
|
|
394
394
|
my $bitsPerPixel = 0;
|
|
@@ -2725,7 +2725,7 @@ This file contains routines to write EXIF metadata.
|
|
|
2725
2725
|
|
|
2726
2726
|
=head1 AUTHOR
|
|
2727
2727
|
|
|
2728
|
-
Copyright 2003-
|
|
2728
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
2729
2729
|
|
|
2730
2730
|
This library is free software; you can redistribute it and/or modify it
|
|
2731
2731
|
under the same terms as Perl itself.
|
|
@@ -711,7 +711,7 @@ seldom-used routines.
|
|
|
711
711
|
|
|
712
712
|
=head1 AUTHOR
|
|
713
713
|
|
|
714
|
-
Copyright 2003-
|
|
714
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
715
715
|
|
|
716
716
|
This library is free software; you can redistribute it and/or modify it
|
|
717
717
|
under the same terms as Perl itself.
|
|
@@ -779,7 +779,7 @@ C<PDF-update> pseudo group).
|
|
|
779
779
|
|
|
780
780
|
=head1 AUTHOR
|
|
781
781
|
|
|
782
|
-
Copyright 2003-
|
|
782
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
783
783
|
|
|
784
784
|
This library is free software; you can redistribute it and/or modify it
|
|
785
785
|
under the same terms as Perl itself.
|
|
@@ -401,7 +401,7 @@ strings).
|
|
|
401
401
|
|
|
402
402
|
=head1 AUTHOR
|
|
403
403
|
|
|
404
|
-
Copyright 2003-
|
|
404
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
405
405
|
|
|
406
406
|
This library is free software; you can redistribute it and/or modify it
|
|
407
407
|
under the same terms as Perl itself.
|
|
@@ -257,7 +257,7 @@ default resource name, and applied if no appended name is provided.
|
|
|
257
257
|
|
|
258
258
|
=head1 AUTHOR
|
|
259
259
|
|
|
260
|
-
Copyright 2003-
|
|
260
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
261
261
|
|
|
262
262
|
This library is free software; you can redistribute it and/or modify it
|
|
263
263
|
under the same terms as Perl itself.
|
|
@@ -687,7 +687,7 @@ Thanks to Tim Kordick for his help testing the EPS writer.
|
|
|
687
687
|
|
|
688
688
|
=head1 AUTHOR
|
|
689
689
|
|
|
690
|
-
Copyright 2003-
|
|
690
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
691
691
|
|
|
692
692
|
This library is free software; you can redistribute it and/or modify it
|
|
693
693
|
under the same terms as Perl itself.
|