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.
Files changed (212) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +33 -0
  3. data/bin/MANIFEST +1 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +3 -3
  7. data/bin/exiftool +206 -148
  8. data/bin/lib/File/RandomAccess.pm +1 -1
  9. data/bin/lib/File/RandomAccess.pod +2 -2
  10. data/bin/lib/Image/ExifTool/AAC.pm +1 -1
  11. data/bin/lib/Image/ExifTool/AES.pm +1 -1
  12. data/bin/lib/Image/ExifTool/AFCP.pm +1 -1
  13. data/bin/lib/Image/ExifTool/AIFF.pm +1 -1
  14. data/bin/lib/Image/ExifTool/APE.pm +1 -1
  15. data/bin/lib/Image/ExifTool/APP12.pm +1 -1
  16. data/bin/lib/Image/ExifTool/ASF.pm +1 -1
  17. data/bin/lib/Image/ExifTool/Apple.pm +1 -1
  18. data/bin/lib/Image/ExifTool/Audible.pm +1 -1
  19. data/bin/lib/Image/ExifTool/BMP.pm +1 -1
  20. data/bin/lib/Image/ExifTool/BPG.pm +1 -1
  21. data/bin/lib/Image/ExifTool/BZZ.pm +1 -1
  22. data/bin/lib/Image/ExifTool/BigTIFF.pm +1 -1
  23. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +6 -6
  24. data/bin/lib/Image/ExifTool/CBOR.pm +1 -1
  25. data/bin/lib/Image/ExifTool/Canon.pm +8 -4
  26. data/bin/lib/Image/ExifTool/CanonCustom.pm +1 -1
  27. data/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
  28. data/bin/lib/Image/ExifTool/CanonVRD.pm +1 -1
  29. data/bin/lib/Image/ExifTool/CaptureOne.pm +1 -1
  30. data/bin/lib/Image/ExifTool/Casio.pm +1 -1
  31. data/bin/lib/Image/ExifTool/Charset.pm +1 -1
  32. data/bin/lib/Image/ExifTool/DICOM.pm +1 -1
  33. data/bin/lib/Image/ExifTool/DJI.pm +96 -45
  34. data/bin/lib/Image/ExifTool/DNG.pm +1 -1
  35. data/bin/lib/Image/ExifTool/DPX.pm +1 -1
  36. data/bin/lib/Image/ExifTool/DV.pm +1 -1
  37. data/bin/lib/Image/ExifTool/DarwinCore.pm +1 -1
  38. data/bin/lib/Image/ExifTool/DjVu.pm +1 -1
  39. data/bin/lib/Image/ExifTool/EXE.pm +123 -32
  40. data/bin/lib/Image/ExifTool/Exif.pm +7 -4
  41. data/bin/lib/Image/ExifTool/FITS.pm +1 -1
  42. data/bin/lib/Image/ExifTool/FLAC.pm +1 -1
  43. data/bin/lib/Image/ExifTool/FLIF.pm +1 -1
  44. data/bin/lib/Image/ExifTool/FLIR.pm +1 -1
  45. data/bin/lib/Image/ExifTool/Fixup.pm +1 -1
  46. data/bin/lib/Image/ExifTool/Flash.pm +1 -1
  47. data/bin/lib/Image/ExifTool/FlashPix.pm +1 -1
  48. data/bin/lib/Image/ExifTool/Font.pm +1 -1
  49. data/bin/lib/Image/ExifTool/FotoStation.pm +1 -1
  50. data/bin/lib/Image/ExifTool/FujiFilm.pm +1 -1
  51. data/bin/lib/Image/ExifTool/GE.pm +1 -1
  52. data/bin/lib/Image/ExifTool/GIF.pm +1 -1
  53. data/bin/lib/Image/ExifTool/GIMP.pm +1 -1
  54. data/bin/lib/Image/ExifTool/GM.pm +1 -1
  55. data/bin/lib/Image/ExifTool/GPS.pm +1 -1
  56. data/bin/lib/Image/ExifTool/GeoTiff.pm +1 -1
  57. data/bin/lib/Image/ExifTool/Geolocation.pm +1 -1
  58. data/bin/lib/Image/ExifTool/Geotag.pm +1 -1
  59. data/bin/lib/Image/ExifTool/GoPro.pm +1 -1
  60. data/bin/lib/Image/ExifTool/H264.pm +1 -1
  61. data/bin/lib/Image/ExifTool/HP.pm +1 -1
  62. data/bin/lib/Image/ExifTool/HTML.pm +1 -1
  63. data/bin/lib/Image/ExifTool/HtmlDump.pm +1 -1
  64. data/bin/lib/Image/ExifTool/ICC_Profile.pm +1 -1
  65. data/bin/lib/Image/ExifTool/ICO.pm +1 -1
  66. data/bin/lib/Image/ExifTool/ID3.pm +1 -1
  67. data/bin/lib/Image/ExifTool/IPTC.pm +8 -5
  68. data/bin/lib/Image/ExifTool/ISO.pm +1 -1
  69. data/bin/lib/Image/ExifTool/ITC.pm +1 -1
  70. data/bin/lib/Image/ExifTool/Import.pm +5 -4
  71. data/bin/lib/Image/ExifTool/InDesign.pm +1 -1
  72. data/bin/lib/Image/ExifTool/InfiRay.pm +1 -1
  73. data/bin/lib/Image/ExifTool/JPEG.pm +1 -1
  74. data/bin/lib/Image/ExifTool/JPEGDigest.pm +1 -1
  75. data/bin/lib/Image/ExifTool/JSON.pm +1 -1
  76. data/bin/lib/Image/ExifTool/JVC.pm +1 -1
  77. data/bin/lib/Image/ExifTool/Jpeg2000.pm +1 -1
  78. data/bin/lib/Image/ExifTool/Kodak.pm +1 -1
  79. data/bin/lib/Image/ExifTool/KyoceraRaw.pm +1 -1
  80. data/bin/lib/Image/ExifTool/LIF.pm +1 -1
  81. data/bin/lib/Image/ExifTool/LNK.pm +1 -1
  82. data/bin/lib/Image/ExifTool/Lang/cs.pm +1 -1
  83. data/bin/lib/Image/ExifTool/Lang/de.pm +1 -1
  84. data/bin/lib/Image/ExifTool/Lang/en_ca.pm +1 -1
  85. data/bin/lib/Image/ExifTool/Lang/en_gb.pm +1 -1
  86. data/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
  87. data/bin/lib/Image/ExifTool/Lang/fi.pm +1 -1
  88. data/bin/lib/Image/ExifTool/Lang/fr.pm +1 -1
  89. data/bin/lib/Image/ExifTool/Lang/it.pm +1 -1
  90. data/bin/lib/Image/ExifTool/Lang/ja.pm +1 -1
  91. data/bin/lib/Image/ExifTool/Lang/ko.pm +1 -1
  92. data/bin/lib/Image/ExifTool/Lang/nl.pm +1 -1
  93. data/bin/lib/Image/ExifTool/Lang/pl.pm +1 -1
  94. data/bin/lib/Image/ExifTool/Lang/ru.pm +1 -1
  95. data/bin/lib/Image/ExifTool/Lang/sk.pm +1 -1
  96. data/bin/lib/Image/ExifTool/Lang/sv.pm +1 -1
  97. data/bin/lib/Image/ExifTool/Lang/tr.pm +1 -1
  98. data/bin/lib/Image/ExifTool/Lang/zh_cn.pm +1 -1
  99. data/bin/lib/Image/ExifTool/Lang/zh_tw.pm +1 -1
  100. data/bin/lib/Image/ExifTool/Leaf.pm +1 -1
  101. data/bin/lib/Image/ExifTool/LigoGPS.pm +408 -0
  102. data/bin/lib/Image/ExifTool/Lytro.pm +1 -1
  103. data/bin/lib/Image/ExifTool/M2TS.pm +22 -13
  104. data/bin/lib/Image/ExifTool/MIE.pm +1 -1
  105. data/bin/lib/Image/ExifTool/MIEUnits.pod +1 -1
  106. data/bin/lib/Image/ExifTool/MIFF.pm +1 -1
  107. data/bin/lib/Image/ExifTool/MISB.pm +1 -1
  108. data/bin/lib/Image/ExifTool/MNG.pm +1 -1
  109. data/bin/lib/Image/ExifTool/MOI.pm +1 -1
  110. data/bin/lib/Image/ExifTool/MPC.pm +1 -1
  111. data/bin/lib/Image/ExifTool/MPEG.pm +1 -1
  112. data/bin/lib/Image/ExifTool/MPF.pm +1 -1
  113. data/bin/lib/Image/ExifTool/MRC.pm +1 -1
  114. data/bin/lib/Image/ExifTool/MWG.pm +1 -1
  115. data/bin/lib/Image/ExifTool/MXF.pm +1 -1
  116. data/bin/lib/Image/ExifTool/MacOS.pm +1 -1
  117. data/bin/lib/Image/ExifTool/MakerNotes.pm +1 -1
  118. data/bin/lib/Image/ExifTool/Matroska.pm +12 -4
  119. data/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
  120. data/bin/lib/Image/ExifTool/Minolta.pm +1 -1
  121. data/bin/lib/Image/ExifTool/MinoltaRaw.pm +1 -1
  122. data/bin/lib/Image/ExifTool/Motorola.pm +1 -1
  123. data/bin/lib/Image/ExifTool/Nikon.pm +164 -35
  124. data/bin/lib/Image/ExifTool/NikonCapture.pm +1 -1
  125. data/bin/lib/Image/ExifTool/NikonCustom.pm +1 -1
  126. data/bin/lib/Image/ExifTool/NikonSettings.pm +1 -1
  127. data/bin/lib/Image/ExifTool/Nintendo.pm +1 -1
  128. data/bin/lib/Image/ExifTool/OOXML.pm +1 -1
  129. data/bin/lib/Image/ExifTool/Ogg.pm +1 -1
  130. data/bin/lib/Image/ExifTool/Olympus.pm +1 -1
  131. data/bin/lib/Image/ExifTool/OpenEXR.pm +1 -1
  132. data/bin/lib/Image/ExifTool/Opus.pm +1 -1
  133. data/bin/lib/Image/ExifTool/Other.pm +1 -1
  134. data/bin/lib/Image/ExifTool/PCX.pm +1 -1
  135. data/bin/lib/Image/ExifTool/PDF.pm +1 -1
  136. data/bin/lib/Image/ExifTool/PGF.pm +1 -1
  137. data/bin/lib/Image/ExifTool/PICT.pm +1 -1
  138. data/bin/lib/Image/ExifTool/PLIST.pm +1 -1
  139. data/bin/lib/Image/ExifTool/PLUS.pm +1 -1
  140. data/bin/lib/Image/ExifTool/PNG.pm +1 -1
  141. data/bin/lib/Image/ExifTool/PPM.pm +1 -1
  142. data/bin/lib/Image/ExifTool/PSP.pm +1 -1
  143. data/bin/lib/Image/ExifTool/Palm.pm +1 -1
  144. data/bin/lib/Image/ExifTool/Panasonic.pm +20 -2
  145. data/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -1
  146. data/bin/lib/Image/ExifTool/Parrot.pm +1 -1
  147. data/bin/lib/Image/ExifTool/Pentax.pm +1 -1
  148. data/bin/lib/Image/ExifTool/PhaseOne.pm +1 -1
  149. data/bin/lib/Image/ExifTool/PhotoCD.pm +1 -1
  150. data/bin/lib/Image/ExifTool/PhotoMechanic.pm +1 -1
  151. data/bin/lib/Image/ExifTool/Photoshop.pm +1 -1
  152. data/bin/lib/Image/ExifTool/PostScript.pm +1 -1
  153. data/bin/lib/Image/ExifTool/PrintIM.pm +1 -1
  154. data/bin/lib/Image/ExifTool/Protobuf.pm +24 -14
  155. data/bin/lib/Image/ExifTool/Qualcomm.pm +1 -1
  156. data/bin/lib/Image/ExifTool/QuickTime.pm +46 -17
  157. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +20 -302
  158. data/bin/lib/Image/ExifTool/README +4 -0
  159. data/bin/lib/Image/ExifTool/RIFF.pm +1 -1
  160. data/bin/lib/Image/ExifTool/RSRC.pm +1 -1
  161. data/bin/lib/Image/ExifTool/RTF.pm +1 -1
  162. data/bin/lib/Image/ExifTool/Radiance.pm +1 -1
  163. data/bin/lib/Image/ExifTool/Rawzor.pm +1 -1
  164. data/bin/lib/Image/ExifTool/Real.pm +1 -1
  165. data/bin/lib/Image/ExifTool/Reconyx.pm +1 -1
  166. data/bin/lib/Image/ExifTool/Red.pm +1 -1
  167. data/bin/lib/Image/ExifTool/Ricoh.pm +1 -1
  168. data/bin/lib/Image/ExifTool/Samsung.pm +1 -1
  169. data/bin/lib/Image/ExifTool/Sanyo.pm +1 -1
  170. data/bin/lib/Image/ExifTool/Scalado.pm +1 -1
  171. data/bin/lib/Image/ExifTool/Shift.pl +1 -1
  172. data/bin/lib/Image/ExifTool/Shortcuts.pm +1 -1
  173. data/bin/lib/Image/ExifTool/Sigma.pm +1 -1
  174. data/bin/lib/Image/ExifTool/SigmaRaw.pm +1 -1
  175. data/bin/lib/Image/ExifTool/Sony.pm +1 -1
  176. data/bin/lib/Image/ExifTool/SonyIDC.pm +1 -1
  177. data/bin/lib/Image/ExifTool/Stim.pm +1 -1
  178. data/bin/lib/Image/ExifTool/TagInfoXML.pm +2 -2
  179. data/bin/lib/Image/ExifTool/TagLookup.pm +11 -5
  180. data/bin/lib/Image/ExifTool/TagNames.pod +84 -34
  181. data/bin/lib/Image/ExifTool/Text.pm +1 -1
  182. data/bin/lib/Image/ExifTool/Theora.pm +1 -1
  183. data/bin/lib/Image/ExifTool/Torrent.pm +1 -1
  184. data/bin/lib/Image/ExifTool/Unknown.pm +1 -1
  185. data/bin/lib/Image/ExifTool/VCard.pm +1 -1
  186. data/bin/lib/Image/ExifTool/Validate.pm +1 -1
  187. data/bin/lib/Image/ExifTool/Vorbis.pm +1 -1
  188. data/bin/lib/Image/ExifTool/WPG.pm +1 -1
  189. data/bin/lib/Image/ExifTool/WTV.pm +1 -1
  190. data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
  191. data/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
  192. data/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
  193. data/bin/lib/Image/ExifTool/WritePDF.pl +1 -1
  194. data/bin/lib/Image/ExifTool/WritePNG.pl +1 -1
  195. data/bin/lib/Image/ExifTool/WritePhotoshop.pl +1 -1
  196. data/bin/lib/Image/ExifTool/WritePostScript.pl +1 -1
  197. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +5 -3
  198. data/bin/lib/Image/ExifTool/WriteRIFF.pl +1 -1
  199. data/bin/lib/Image/ExifTool/WriteXMP.pl +1 -1
  200. data/bin/lib/Image/ExifTool/Writer.pl +9 -8
  201. data/bin/lib/Image/ExifTool/XISF.pm +1 -1
  202. data/bin/lib/Image/ExifTool/XMP.pm +1 -1
  203. data/bin/lib/Image/ExifTool/XMP2.pl +1 -1
  204. data/bin/lib/Image/ExifTool/XMPStruct.pl +1 -1
  205. data/bin/lib/Image/ExifTool/ZIP.pm +1 -1
  206. data/bin/lib/Image/ExifTool/ZISRAW.pm +1 -1
  207. data/bin/lib/Image/ExifTool/iWork.pm +1 -1
  208. data/bin/lib/Image/ExifTool.pm +13 -7
  209. data/bin/lib/Image/ExifTool.pod +14 -5
  210. data/bin/perl-Image-ExifTool.spec +1 -1
  211. data/lib/exiftool_vendored/version.rb +1 -1
  212. 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.22';
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-2024, Phil Harvey (philharvey66 at gmail.com)
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-2024, Phil Harvey (philharvey66 at gmail.com)
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-2024, Phil Harvey (philharvey66 at gmail.com)
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-2024, Phil Harvey (philharvey66 at gmail.com)
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-2024, Phil Harvey (philharvey66 at gmail.com)
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-2024, Phil Harvey (philharvey66 at gmail.com)
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-2024, Phil Harvey (philharvey66 at gmail.com)
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-2024, Phil Harvey (philharvey66 at gmail.com)
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-2024, Phil Harvey (philharvey66 at gmail.com)
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-2024, Phil Harvey (philharvey66 at gmail.com)
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.00';
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{ProtocolName}{$dirName} = '*' unless defined $$et{ProtocolName}{$dirName};
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 >= length $$dataPt;
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{ProtocolName}{$dirName} = substr($buff, 0, -6);
138
+ $$et{ProtoPrefix}{$dirName} = substr($buff, 0, -6) . '_';
134
139
  $et->HandleTag($tagTbl, Protocol => $buff);
135
140
  }
136
- my $tag = "$$et{ProtocolName}{$dirName}_$prefix$id";
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{IsProtobuf}) {
172
- $et->VPrint(1, "+ Protobuf $tag (" . length($buff) . " bytes)\n");
173
- my $addr = $$dirInfo{Base} + $$dirInfo{Pos} - length($buff);
174
- $et->VerboseDump(\$buff, Addr => $addr);
175
- my %subdir = ( DataPt => \$buff, Base => $addr, DirName => $dirName );
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=> $$dirInfo{Base},
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} == length $$dataPt;
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-2024, Phil Harvey (philharvey66 at gmail.com)
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-2024, Phil Harvey (philharvey66 at gmail.com)
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.07';
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
- my $offset = (66 * 365 + 17) * 24 * 3600;
257
- return $val - $offset if $val >= $offset or $$self{OPTIONS}{QuickTimeUTC};
258
- if ($val and not $$self{IsWriting}) {
259
- $self->Warn('Patched incorrect time zero for QuickTime date/time tag',1);
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 => '$self->InverseDateTime($val)',
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 => \&ProcessLigoGPS,
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 => \&ProcessLigoJSON,
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
- my $offset = (66 * 365 + 17) * 24 * 3600;
1416
- if ($val >= $offset or $$self{OPTIONS}{QuickTimeUTC}) {
1417
- $val -= $offset;
1418
- } elsif ($val and not $$self{IsWriting}) {
1419
- $self->Warn('Patched incorrect time zero for QuickTime date/time tag',1);
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-2024, Phil Harvey (philharvey66 at gmail.com)
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.