exiftool_vendored 13.10.0 → 13.12.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.
- 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.
|