exiftool_vendored 13.10.0 → 13.12.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 +33 -0
- data/bin/MANIFEST +1 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +3 -3
- data/bin/exiftool +206 -148
- data/bin/lib/File/RandomAccess.pm +1 -1
- data/bin/lib/File/RandomAccess.pod +2 -2
- data/bin/lib/Image/ExifTool/AAC.pm +1 -1
- data/bin/lib/Image/ExifTool/AES.pm +1 -1
- data/bin/lib/Image/ExifTool/AFCP.pm +1 -1
- data/bin/lib/Image/ExifTool/AIFF.pm +1 -1
- data/bin/lib/Image/ExifTool/APE.pm +1 -1
- data/bin/lib/Image/ExifTool/APP12.pm +1 -1
- data/bin/lib/Image/ExifTool/ASF.pm +1 -1
- data/bin/lib/Image/ExifTool/Apple.pm +1 -1
- data/bin/lib/Image/ExifTool/Audible.pm +1 -1
- data/bin/lib/Image/ExifTool/BMP.pm +1 -1
- data/bin/lib/Image/ExifTool/BPG.pm +1 -1
- data/bin/lib/Image/ExifTool/BZZ.pm +1 -1
- data/bin/lib/Image/ExifTool/BigTIFF.pm +1 -1
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +6 -6
- data/bin/lib/Image/ExifTool/CBOR.pm +1 -1
- data/bin/lib/Image/ExifTool/Canon.pm +8 -4
- data/bin/lib/Image/ExifTool/CanonCustom.pm +1 -1
- data/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/CanonVRD.pm +1 -1
- data/bin/lib/Image/ExifTool/CaptureOne.pm +1 -1
- data/bin/lib/Image/ExifTool/Casio.pm +1 -1
- data/bin/lib/Image/ExifTool/Charset.pm +1 -1
- data/bin/lib/Image/ExifTool/DICOM.pm +1 -1
- data/bin/lib/Image/ExifTool/DJI.pm +96 -45
- data/bin/lib/Image/ExifTool/DNG.pm +1 -1
- data/bin/lib/Image/ExifTool/DPX.pm +1 -1
- data/bin/lib/Image/ExifTool/DV.pm +1 -1
- data/bin/lib/Image/ExifTool/DarwinCore.pm +1 -1
- data/bin/lib/Image/ExifTool/DjVu.pm +1 -1
- data/bin/lib/Image/ExifTool/EXE.pm +123 -32
- data/bin/lib/Image/ExifTool/Exif.pm +7 -4
- data/bin/lib/Image/ExifTool/FITS.pm +1 -1
- data/bin/lib/Image/ExifTool/FLAC.pm +1 -1
- data/bin/lib/Image/ExifTool/FLIF.pm +1 -1
- data/bin/lib/Image/ExifTool/FLIR.pm +1 -1
- data/bin/lib/Image/ExifTool/Fixup.pm +1 -1
- data/bin/lib/Image/ExifTool/Flash.pm +1 -1
- data/bin/lib/Image/ExifTool/FlashPix.pm +1 -1
- data/bin/lib/Image/ExifTool/Font.pm +1 -1
- data/bin/lib/Image/ExifTool/FotoStation.pm +1 -1
- data/bin/lib/Image/ExifTool/FujiFilm.pm +1 -1
- data/bin/lib/Image/ExifTool/GE.pm +1 -1
- data/bin/lib/Image/ExifTool/GIF.pm +1 -1
- data/bin/lib/Image/ExifTool/GIMP.pm +1 -1
- data/bin/lib/Image/ExifTool/GM.pm +1 -1
- data/bin/lib/Image/ExifTool/GPS.pm +1 -1
- data/bin/lib/Image/ExifTool/GeoTiff.pm +1 -1
- data/bin/lib/Image/ExifTool/Geolocation.pm +1 -1
- data/bin/lib/Image/ExifTool/Geotag.pm +1 -1
- data/bin/lib/Image/ExifTool/GoPro.pm +1 -1
- data/bin/lib/Image/ExifTool/H264.pm +1 -1
- data/bin/lib/Image/ExifTool/HP.pm +1 -1
- data/bin/lib/Image/ExifTool/HTML.pm +1 -1
- data/bin/lib/Image/ExifTool/HtmlDump.pm +1 -1
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +1 -1
- data/bin/lib/Image/ExifTool/ICO.pm +1 -1
- data/bin/lib/Image/ExifTool/ID3.pm +1 -1
- data/bin/lib/Image/ExifTool/IPTC.pm +8 -5
- data/bin/lib/Image/ExifTool/ISO.pm +1 -1
- data/bin/lib/Image/ExifTool/ITC.pm +1 -1
- data/bin/lib/Image/ExifTool/Import.pm +5 -4
- data/bin/lib/Image/ExifTool/InDesign.pm +1 -1
- data/bin/lib/Image/ExifTool/InfiRay.pm +1 -1
- data/bin/lib/Image/ExifTool/JPEG.pm +1 -1
- data/bin/lib/Image/ExifTool/JPEGDigest.pm +1 -1
- data/bin/lib/Image/ExifTool/JSON.pm +1 -1
- data/bin/lib/Image/ExifTool/JVC.pm +1 -1
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +1 -1
- data/bin/lib/Image/ExifTool/Kodak.pm +1 -1
- data/bin/lib/Image/ExifTool/KyoceraRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/LIF.pm +1 -1
- data/bin/lib/Image/ExifTool/LNK.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/cs.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/de.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/en_ca.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/en_gb.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/fi.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/fr.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/it.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/ja.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/ko.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/nl.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/pl.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/ru.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/sk.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/sv.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/tr.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/zh_cn.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/zh_tw.pm +1 -1
- data/bin/lib/Image/ExifTool/Leaf.pm +1 -1
- data/bin/lib/Image/ExifTool/LigoGPS.pm +408 -0
- data/bin/lib/Image/ExifTool/Lytro.pm +1 -1
- data/bin/lib/Image/ExifTool/M2TS.pm +22 -13
- data/bin/lib/Image/ExifTool/MIE.pm +1 -1
- data/bin/lib/Image/ExifTool/MIEUnits.pod +1 -1
- data/bin/lib/Image/ExifTool/MIFF.pm +1 -1
- data/bin/lib/Image/ExifTool/MISB.pm +1 -1
- data/bin/lib/Image/ExifTool/MNG.pm +1 -1
- data/bin/lib/Image/ExifTool/MOI.pm +1 -1
- data/bin/lib/Image/ExifTool/MPC.pm +1 -1
- data/bin/lib/Image/ExifTool/MPEG.pm +1 -1
- data/bin/lib/Image/ExifTool/MPF.pm +1 -1
- data/bin/lib/Image/ExifTool/MRC.pm +1 -1
- data/bin/lib/Image/ExifTool/MWG.pm +1 -1
- data/bin/lib/Image/ExifTool/MXF.pm +1 -1
- data/bin/lib/Image/ExifTool/MacOS.pm +1 -1
- data/bin/lib/Image/ExifTool/MakerNotes.pm +1 -1
- data/bin/lib/Image/ExifTool/Matroska.pm +12 -4
- data/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
- data/bin/lib/Image/ExifTool/Minolta.pm +1 -1
- data/bin/lib/Image/ExifTool/MinoltaRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/Motorola.pm +1 -1
- data/bin/lib/Image/ExifTool/Nikon.pm +164 -35
- data/bin/lib/Image/ExifTool/NikonCapture.pm +1 -1
- data/bin/lib/Image/ExifTool/NikonCustom.pm +1 -1
- data/bin/lib/Image/ExifTool/NikonSettings.pm +1 -1
- data/bin/lib/Image/ExifTool/Nintendo.pm +1 -1
- data/bin/lib/Image/ExifTool/OOXML.pm +1 -1
- data/bin/lib/Image/ExifTool/Ogg.pm +1 -1
- data/bin/lib/Image/ExifTool/Olympus.pm +1 -1
- data/bin/lib/Image/ExifTool/OpenEXR.pm +1 -1
- data/bin/lib/Image/ExifTool/Opus.pm +1 -1
- data/bin/lib/Image/ExifTool/Other.pm +1 -1
- data/bin/lib/Image/ExifTool/PCX.pm +1 -1
- data/bin/lib/Image/ExifTool/PDF.pm +1 -1
- data/bin/lib/Image/ExifTool/PGF.pm +1 -1
- data/bin/lib/Image/ExifTool/PICT.pm +1 -1
- data/bin/lib/Image/ExifTool/PLIST.pm +1 -1
- data/bin/lib/Image/ExifTool/PLUS.pm +1 -1
- data/bin/lib/Image/ExifTool/PNG.pm +1 -1
- data/bin/lib/Image/ExifTool/PPM.pm +1 -1
- data/bin/lib/Image/ExifTool/PSP.pm +1 -1
- data/bin/lib/Image/ExifTool/Palm.pm +1 -1
- data/bin/lib/Image/ExifTool/Panasonic.pm +20 -2
- data/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/Parrot.pm +1 -1
- data/bin/lib/Image/ExifTool/Pentax.pm +1 -1
- data/bin/lib/Image/ExifTool/PhaseOne.pm +1 -1
- data/bin/lib/Image/ExifTool/PhotoCD.pm +1 -1
- data/bin/lib/Image/ExifTool/PhotoMechanic.pm +1 -1
- data/bin/lib/Image/ExifTool/Photoshop.pm +1 -1
- data/bin/lib/Image/ExifTool/PostScript.pm +1 -1
- data/bin/lib/Image/ExifTool/PrintIM.pm +1 -1
- data/bin/lib/Image/ExifTool/Protobuf.pm +24 -14
- data/bin/lib/Image/ExifTool/Qualcomm.pm +1 -1
- data/bin/lib/Image/ExifTool/QuickTime.pm +46 -17
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +20 -302
- data/bin/lib/Image/ExifTool/README +4 -0
- data/bin/lib/Image/ExifTool/RIFF.pm +1 -1
- data/bin/lib/Image/ExifTool/RSRC.pm +1 -1
- data/bin/lib/Image/ExifTool/RTF.pm +1 -1
- data/bin/lib/Image/ExifTool/Radiance.pm +1 -1
- data/bin/lib/Image/ExifTool/Rawzor.pm +1 -1
- data/bin/lib/Image/ExifTool/Real.pm +1 -1
- data/bin/lib/Image/ExifTool/Reconyx.pm +1 -1
- data/bin/lib/Image/ExifTool/Red.pm +1 -1
- data/bin/lib/Image/ExifTool/Ricoh.pm +1 -1
- data/bin/lib/Image/ExifTool/Samsung.pm +1 -1
- data/bin/lib/Image/ExifTool/Sanyo.pm +1 -1
- data/bin/lib/Image/ExifTool/Scalado.pm +1 -1
- data/bin/lib/Image/ExifTool/Shift.pl +1 -1
- data/bin/lib/Image/ExifTool/Shortcuts.pm +1 -1
- data/bin/lib/Image/ExifTool/Sigma.pm +1 -1
- data/bin/lib/Image/ExifTool/SigmaRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/Sony.pm +1 -1
- data/bin/lib/Image/ExifTool/SonyIDC.pm +1 -1
- data/bin/lib/Image/ExifTool/Stim.pm +1 -1
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +2 -2
- data/bin/lib/Image/ExifTool/TagLookup.pm +11 -5
- data/bin/lib/Image/ExifTool/TagNames.pod +84 -34
- 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 +1 -1
- data/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
- data/bin/lib/Image/ExifTool/WritePDF.pl +1 -1
- data/bin/lib/Image/ExifTool/WritePNG.pl +1 -1
- data/bin/lib/Image/ExifTool/WritePhotoshop.pl +1 -1
- data/bin/lib/Image/ExifTool/WritePostScript.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +5 -3
- data/bin/lib/Image/ExifTool/WriteRIFF.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteXMP.pl +1 -1
- data/bin/lib/Image/ExifTool/Writer.pl +9 -8
- data/bin/lib/Image/ExifTool/XISF.pm +1 -1
- data/bin/lib/Image/ExifTool/XMP.pm +1 -1
- data/bin/lib/Image/ExifTool/XMP2.pl +1 -1
- data/bin/lib/Image/ExifTool/XMPStruct.pl +1 -1
- data/bin/lib/Image/ExifTool/ZIP.pm +1 -1
- data/bin/lib/Image/ExifTool/ZISRAW.pm +1 -1
- data/bin/lib/Image/ExifTool/iWork.pm +1 -1
- data/bin/lib/Image/ExifTool.pm +13 -7
- data/bin/lib/Image/ExifTool.pod +14 -5
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +3 -2
@@ -37,7 +37,7 @@ use vars qw($VERSION %leicaLensTypes);
|
|
37
37
|
use Image::ExifTool qw(:DataAccess :Utils);
|
38
38
|
use Image::ExifTool::Exif;
|
39
39
|
|
40
|
-
$VERSION = '2.
|
40
|
+
$VERSION = '2.23';
|
41
41
|
|
42
42
|
sub ProcessLeicaLEIC($$$);
|
43
43
|
sub WhiteBalanceConv($;$$);
|
@@ -360,12 +360,16 @@ my %shootingMode = (
|
|
360
360
|
'16' => 'Normal?', # (only mode for DMC-LC20)
|
361
361
|
'16 0' => '1-area', # (FZ8)
|
362
362
|
'16 16' => '1-area (high speed)', # (FZ8)
|
363
|
+
'16 32' => '1-area +', #forum16903 (G9M2)
|
364
|
+
'17 0' => 'Full Area', #forum16903 (G9M2)
|
363
365
|
# '32 0' is Face Detect for FS7, and Face Detect or Focus Tracking
|
364
366
|
# for the DMC-FZ200 (ref 17), and Auto is DMC-L1 guess,
|
365
367
|
'32 0' => 'Tracking',
|
366
368
|
'32 1' => '3-area (left)?', # (DMC-L1 guess)
|
367
369
|
'32 2' => '3-area (center)?', # (DMC-L1 guess)
|
368
370
|
'32 3' => '3-area (right)?', # (DMC-L1 guess)
|
371
|
+
'32 16' => 'Zone', #forum16903 (G9M2)
|
372
|
+
'32 18' => 'Zone (horizontal/vertical)', #forum16903 (G9M2)
|
369
373
|
# '32 16' ? (DC-GH6)
|
370
374
|
'64 0' => 'Face Detect',
|
371
375
|
'64 1' => 'Face Detect (animal detect on)', #forum11194
|
@@ -1448,6 +1452,20 @@ my %shootingMode = (
|
|
1448
1452
|
Name => 'MinimumISO',
|
1449
1453
|
Writable => 'int32u',
|
1450
1454
|
},
|
1455
|
+
0xe9 => { #forum16903 (DC-G9M2)
|
1456
|
+
Name => 'AFSubjectDetection',
|
1457
|
+
Writable => 'int16u',
|
1458
|
+
PrintConv => {
|
1459
|
+
0 => 'n/a',
|
1460
|
+
1 => 'Human Eye/Face/Body',
|
1461
|
+
2 => 'Animal', #PH (NC) (DC-S5 and DC-S5M2)
|
1462
|
+
3 => 'Human Eye/Face',
|
1463
|
+
4 => 'Animal Body',
|
1464
|
+
5 => 'Animal Eye/Body',
|
1465
|
+
6 => 'Car',
|
1466
|
+
7 => 'Motorcycle',
|
1467
|
+
}
|
1468
|
+
},
|
1451
1469
|
0xee => { #PH (DC-GH6)
|
1452
1470
|
Name => 'DynamicRangeBoost',
|
1453
1471
|
Writable => 'int16u',
|
@@ -2902,7 +2920,7 @@ Panasonic and Leica maker notes in EXIF information.
|
|
2902
2920
|
|
2903
2921
|
=head1 AUTHOR
|
2904
2922
|
|
2905
|
-
Copyright 2003-
|
2923
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
2906
2924
|
|
2907
2925
|
This library is free software; you can redistribute it and/or modify it
|
2908
2926
|
under the same terms as Perl itself.
|
@@ -935,7 +935,7 @@ write meta information in Panasonic/Leica RAW, RW2 and RWL images.
|
|
935
935
|
|
936
936
|
=head1 AUTHOR
|
937
937
|
|
938
|
-
Copyright 2003-
|
938
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
939
939
|
|
940
940
|
This library is free software; you can redistribute it and/or modify it
|
941
941
|
under the same terms as Perl itself.
|
@@ -825,7 +825,7 @@ timed metadata from the 'mett' frame found in Parrot drone MP4 videos.
|
|
825
825
|
|
826
826
|
=head1 AUTHOR
|
827
827
|
|
828
|
-
Copyright 2003-
|
828
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
829
829
|
|
830
830
|
This library is free software; you can redistribute it and/or modify it
|
831
831
|
under the same terms as Perl itself.
|
@@ -6477,7 +6477,7 @@ tags, and everyone who helped contribute to the LensType values.
|
|
6477
6477
|
|
6478
6478
|
=head1 AUTHOR
|
6479
6479
|
|
6480
|
-
Copyright 2003-
|
6480
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
6481
6481
|
|
6482
6482
|
This library is free software; you can redistribute it and/or modify it
|
6483
6483
|
under the same terms as Perl itself.
|
@@ -726,7 +726,7 @@ One maker notes.
|
|
726
726
|
|
727
727
|
=head1 AUTHOR
|
728
728
|
|
729
|
-
Copyright 2003-
|
729
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
730
730
|
|
731
731
|
This library is free software; you can redistribute it and/or modify it
|
732
732
|
under the same terms as Perl itself.
|
@@ -484,7 +484,7 @@ information from Kodak Photo CD Image Pac (PCD) files.
|
|
484
484
|
|
485
485
|
=head1 AUTHOR
|
486
486
|
|
487
|
-
Copyright 2003-
|
487
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
488
488
|
|
489
489
|
This library is free software; you can redistribute it and/or modify it
|
490
490
|
under the same terms as Perl itself.
|
@@ -237,7 +237,7 @@ write information written by the Camera Bits Photo Mechanic software.
|
|
237
237
|
|
238
238
|
=head1 AUTHOR
|
239
239
|
|
240
|
-
Copyright 2003-
|
240
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
241
241
|
|
242
242
|
This library is free software; you can redistribute it and/or modify it
|
243
243
|
under the same terms as Perl itself.
|
@@ -1262,7 +1262,7 @@ be preserved when copying Photoshop information via user-defined tags.
|
|
1262
1262
|
|
1263
1263
|
=head1 AUTHOR
|
1264
1264
|
|
1265
|
-
Copyright 2003-
|
1265
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
1266
1266
|
|
1267
1267
|
This library is free software; you can redistribute it and/or modify it
|
1268
1268
|
under the same terms as Perl itself.
|
@@ -768,7 +768,7 @@ This code reads meta information from EPS (Encapsulated PostScript), PS
|
|
768
768
|
|
769
769
|
=head1 AUTHOR
|
770
770
|
|
771
|
-
Copyright 2003-
|
771
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
772
772
|
|
773
773
|
This library is free software; you can redistribute it and/or modify it
|
774
774
|
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-2025, 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.
|
@@ -17,7 +17,7 @@ use strict;
|
|
17
17
|
use vars qw($VERSION);
|
18
18
|
use Image::ExifTool qw(:DataAccess :Utils);
|
19
19
|
|
20
|
-
$VERSION = '1.
|
20
|
+
$VERSION = '1.01';
|
21
21
|
|
22
22
|
sub ProcessProtobuf($$$;$);
|
23
23
|
|
@@ -105,7 +105,7 @@ sub IsProtobuf($)
|
|
105
105
|
|
106
106
|
#------------------------------------------------------------------------------
|
107
107
|
# Process protobuf data (eg. DJI djmd timed data from Action4 videos) (ref 1)
|
108
|
-
# Inputs: 0) ExifTool ref, 1) dirInfo ref with DataPt, DirName and Base,
|
108
|
+
# Inputs: 0) ExifTool ref, 1) dirInfo ref with DataPt, DataPos, DirName and Base,
|
109
109
|
# 2) tag table ptr, 3) prefix of parent protobuf ID's
|
110
110
|
# Returns: true on success
|
111
111
|
sub ProcessProtobuf($$$;$)
|
@@ -113,27 +113,32 @@ sub ProcessProtobuf($$$;$)
|
|
113
113
|
my ($et, $dirInfo, $tagTbl, $prefix) = @_;
|
114
114
|
my $dataPt = $$dirInfo{DataPt};
|
115
115
|
my $dirName = $$dirInfo{DirName};
|
116
|
+
my $dirStart = $$dirInfo{DirStart} || 0;
|
117
|
+
my $dirLen = $$dirInfo{DirLen} || (length($$dataPt) - $dirStart);
|
118
|
+
my $dirEnd = $dirStart + $dirLen;
|
119
|
+
my $dataPos = ($$dirInfo{Base} || 0) + ($$dirInfo{DataPos} || 0);
|
116
120
|
my $unknown = $et->Options('Unknown') || $et->Options('Verbose');
|
117
121
|
|
118
122
|
$$dirInfo{Pos} = $$dirInfo{DirStart} || 0; # initialize buffer Pos
|
123
|
+
$et->VerboseDir('Protobuf', undef, $dirLen);
|
119
124
|
|
120
125
|
unless ($prefix) {
|
121
126
|
$prefix = '';
|
122
|
-
$$et{
|
127
|
+
$$et{ProtoPrefix}{$dirName} = '' unless defined $$et{ProtoPrefix}{$dirName};
|
123
128
|
SetByteOrder('II');
|
124
129
|
}
|
125
130
|
# loop through protobuf records
|
126
131
|
for (;;) {
|
127
132
|
my $pos = $$dirInfo{Pos};
|
128
|
-
last if $pos >=
|
133
|
+
last if $pos >= $dirEnd;
|
129
134
|
my ($buff, $id, $type) = ReadRecord($dirInfo);
|
130
135
|
defined $buff or $et->Warn('Protobuf format error'), last;
|
131
136
|
if ($type == 2 and $buff =~ /\.proto$/) {
|
132
137
|
# save protocol name separately for directory type
|
133
|
-
$$et{
|
138
|
+
$$et{ProtoPrefix}{$dirName} = substr($buff, 0, -6) . '_';
|
134
139
|
$et->HandleTag($tagTbl, Protocol => $buff);
|
135
140
|
}
|
136
|
-
my $tag = "$$et{
|
141
|
+
my $tag = "$$et{ProtoPrefix}{$dirName}$prefix$id";
|
137
142
|
my $tagInfo = $$tagTbl{$tag};
|
138
143
|
if ($tagInfo) {
|
139
144
|
next if $type != 2 and $$tagInfo{Unknown} and not $unknown;
|
@@ -168,12 +173,17 @@ sub ProcessProtobuf($$$;$)
|
|
168
173
|
} elsif ($type == 1) {
|
169
174
|
$val = '0x' . unpack('H*', $buff) . ' (double ' . GetDouble(\$buff,0) . ')';
|
170
175
|
} elsif ($type == 2) {
|
171
|
-
if ($$tagInfo{
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
+
if ($$tagInfo{SubDirectory}) {
|
177
|
+
# (fall through to process known SubDirectory)
|
178
|
+
} elsif ($$tagInfo{IsProtobuf}) {
|
179
|
+
# process Unknown protobuf directories
|
180
|
+
$et->VPrint(1, "$$et{INDENT}Protobuf $tag (" . length($buff) . " bytes) -->\n");
|
181
|
+
my $addr = $dataPos + $$dirInfo{Pos} - length($buff);
|
182
|
+
$et->VerboseDump(\$buff, Addr => $addr, Prefix => $$et{INDENT});
|
183
|
+
my %subdir = ( DataPt => \$buff, DataPos => $addr, DirName => $dirName );
|
184
|
+
$$et{INDENT} .= '| ';
|
176
185
|
ProcessProtobuf($et, \%subdir, $tagTbl, "$prefix$id-");
|
186
|
+
$$et{INDENT} = substr($$et{INDENT}, 0, -2);
|
177
187
|
next;
|
178
188
|
} elsif ($buff !~ /[^\x20-\x7e]/) {
|
179
189
|
$val = $buff; # assume this is an ASCII string
|
@@ -193,7 +203,7 @@ sub ProcessProtobuf($$$;$)
|
|
193
203
|
my $start = $type == 0 ? $pos + 1 : $$dirInfo{Pos} - length $buff;
|
194
204
|
$et->HandleTag($tagTbl, $tag, $val,
|
195
205
|
DataPt => $dataPt,
|
196
|
-
DataPos=>
|
206
|
+
DataPos=> $dataPos,
|
197
207
|
Start => $start,
|
198
208
|
Size => $$dirInfo{Pos} - $start,
|
199
209
|
Extra => ", type=$type",
|
@@ -201,7 +211,7 @@ sub ProcessProtobuf($$$;$)
|
|
201
211
|
);
|
202
212
|
}
|
203
213
|
# warn if we didn't finish exactly at the end of the buffer
|
204
|
-
$et->Warn('Truncated protobuf data') unless $prefix or $$dirInfo{Pos} ==
|
214
|
+
$et->Warn('Truncated protobuf data') unless $prefix or $$dirInfo{Pos} == $dirEnd;
|
205
215
|
return 1;
|
206
216
|
}
|
207
217
|
|
@@ -222,7 +232,7 @@ information in protocol buffer (protobuf) format.
|
|
222
232
|
|
223
233
|
=head1 AUTHOR
|
224
234
|
|
225
|
-
Copyright 2003-
|
235
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
226
236
|
|
227
237
|
This library is free software; you can redistribute it and/or modify it
|
228
238
|
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-2025, 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 = '3.
|
51
|
+
$VERSION = '3.08';
|
52
52
|
|
53
53
|
sub ProcessMOV($$;$);
|
54
54
|
sub ProcessKeys($$$);
|
@@ -69,8 +69,6 @@ sub Process_gps0($$$);
|
|
69
69
|
sub Process_gsen($$$);
|
70
70
|
sub Process_gdat($$$);
|
71
71
|
sub Process_nbmt($$$);
|
72
|
-
sub ProcessLigoGPS($$$;$);
|
73
|
-
sub ProcessLigoJSON($$$);
|
74
72
|
sub ProcessKenwood($$$);
|
75
73
|
sub ProcessRIFFTrailer($$$);
|
76
74
|
sub ProcessTTAD($$$);
|
@@ -253,15 +251,20 @@ my %timeInfo = (
|
|
253
251
|
# Note: This value will be in UTC if generated by a system that is aware of the time zone
|
254
252
|
# (also note: this code is duplicated for the CreateDate tag)
|
255
253
|
RawConv => q{
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
254
|
+
if ($val) {
|
255
|
+
my $offset = (66 * 365 + 17) * 24 * 3600;
|
256
|
+
if ($val >= $offset or $$self{OPTIONS}{QuickTimeUTC}) {
|
257
|
+
$val -= $offset;
|
258
|
+
} elsif (not $$self{IsWriting}) {
|
259
|
+
$self->Warn('Patched incorrect time zero for QuickTime date/time tag',1);
|
260
|
+
}
|
261
|
+
} else {
|
262
|
+
undef $val if $self->Options('StrictDate');
|
260
263
|
}
|
261
264
|
return $val;
|
262
265
|
},
|
263
266
|
RawConvInv => q{
|
264
|
-
if ($$self{FileType} eq 'CR3' and not $self->Options('QuickTimeUTC')) {
|
267
|
+
if ($val and $$self{FileType} eq 'CR3' and not $self->Options('QuickTimeUTC')) {
|
265
268
|
# convert to UTC
|
266
269
|
my $offset = (66 * 365 + 17) * 24 * 3600;
|
267
270
|
$val = ConvertUnixTime($val - $offset);
|
@@ -274,10 +277,14 @@ my %timeInfo = (
|
|
274
277
|
ValueConvInv => q{
|
275
278
|
$val = GetUnixTime($val, $self->Options("QuickTimeUTC"));
|
276
279
|
return undef unless defined $val;
|
280
|
+
return $val unless $val;
|
277
281
|
return $val + (66 * 365 + 17) * 24 * 3600;
|
278
282
|
},
|
279
283
|
PrintConv => '$self->ConvertDateTime($val)',
|
280
|
-
PrintConvInv =>
|
284
|
+
PrintConvInv => q{
|
285
|
+
return $val if $val eq '0000:00:00 00:00:00';
|
286
|
+
return $self->InverseDateTime($val);
|
287
|
+
}
|
281
288
|
# (can't put Groups here because they aren't constant!)
|
282
289
|
);
|
283
290
|
# properties for ISO 8601 format date/time tags
|
@@ -590,7 +597,7 @@ my %userDefined = (
|
|
590
597
|
Condition => '$$valPt =~ /^LIGOGPSINFO\0/',
|
591
598
|
SubDirectory => {
|
592
599
|
TagTable => 'Image::ExifTool::QuickTime::Stream',
|
593
|
-
ProcessProc =>
|
600
|
+
ProcessProc => 'Image::ExifTool::LigoGPS::ProcessLigoGPS',
|
594
601
|
},
|
595
602
|
},
|
596
603
|
{ Name => 'Skip', Unknown => 1, Binary => 1 },
|
@@ -775,7 +782,7 @@ my %userDefined = (
|
|
775
782
|
Condition => '$$valPt =~ /^LIGOGPSINFO \{/',
|
776
783
|
SubDirectory => {
|
777
784
|
TagTable => 'Image::ExifTool::QuickTime::Stream',
|
778
|
-
ProcessProc =>
|
785
|
+
ProcessProc => 'Image::ExifTool::LigoGPS::ProcessLigoJSON',
|
779
786
|
},
|
780
787
|
},{
|
781
788
|
Name => 'FLIRData',
|
@@ -1412,11 +1419,15 @@ my %userDefined = (
|
|
1412
1419
|
Groups => { 2 => 'Time' },
|
1413
1420
|
%timeInfo,
|
1414
1421
|
RawConv => q{
|
1415
|
-
|
1416
|
-
|
1417
|
-
$val
|
1418
|
-
|
1419
|
-
|
1422
|
+
if ($val) {
|
1423
|
+
my $offset = (66 * 365 + 17) * 24 * 3600;
|
1424
|
+
if ($val >= $offset or $$self{OPTIONS}{QuickTimeUTC}) {
|
1425
|
+
$val -= $offset;
|
1426
|
+
} elsif (not $$self{IsWriting}) {
|
1427
|
+
$self->Warn('Patched incorrect time zero for QuickTime date/time tag',1);
|
1428
|
+
}
|
1429
|
+
} else {
|
1430
|
+
undef $val if $$self{OPTIONS}{StrictDate};
|
1420
1431
|
}
|
1421
1432
|
return $$self{CreateDate} = $val;
|
1422
1433
|
},
|
@@ -10280,6 +10291,24 @@ sub ProcessQTIF($$)
|
|
10280
10291
|
return ProcessMOV($et, $dirInfo, $table);
|
10281
10292
|
}
|
10282
10293
|
|
10294
|
+
#==============================================================================
|
10295
|
+
# Autoload LigoGPS module if necessary
|
10296
|
+
# NOTE: Switches to package LigoGPS!
|
10297
|
+
#
|
10298
|
+
package Image::ExifTool::LigoGPS;
|
10299
|
+
use vars qw($AUTOLOAD);
|
10300
|
+
sub AUTOLOAD {
|
10301
|
+
require Image::ExifTool::LigoGPS;
|
10302
|
+
unless (defined &$AUTOLOAD) {
|
10303
|
+
my @caller = caller(0);
|
10304
|
+
# reproduce Perl's standard 'undefined subroutine' message:
|
10305
|
+
die "Undefined subroutine $AUTOLOAD called at $caller[1] line $caller[2]\n";
|
10306
|
+
}
|
10307
|
+
no strict 'refs';
|
10308
|
+
return &$AUTOLOAD(@_); # call the function
|
10309
|
+
}
|
10310
|
+
#==============================================================================
|
10311
|
+
|
10283
10312
|
1; # end
|
10284
10313
|
|
10285
10314
|
__END__
|
@@ -10299,7 +10328,7 @@ information from QuickTime and MP4 video, M4A audio, and HEIC image files.
|
|
10299
10328
|
|
10300
10329
|
=head1 AUTHOR
|
10301
10330
|
|
10302
|
-
Copyright 2003-
|
10331
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
10303
10332
|
|
10304
10333
|
This library is free software; you can redistribute it and/or modify it
|
10305
10334
|
under the same terms as Perl itself.
|