exiftool_vendored 13.45.0 → 13.47.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 (218) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +27 -1
  3. data/bin/META.json +1 -1
  4. data/bin/META.yml +1 -1
  5. data/bin/README +3 -3
  6. data/bin/exiftool +8 -7
  7. data/bin/lib/File/RandomAccess.pm +1 -1
  8. data/bin/lib/File/RandomAccess.pod +2 -2
  9. data/bin/lib/Image/ExifTool/AAC.pm +1 -1
  10. data/bin/lib/Image/ExifTool/AES.pm +1 -1
  11. data/bin/lib/Image/ExifTool/AFCP.pm +1 -1
  12. data/bin/lib/Image/ExifTool/AIFF.pm +1 -1
  13. data/bin/lib/Image/ExifTool/APE.pm +1 -1
  14. data/bin/lib/Image/ExifTool/APP12.pm +1 -1
  15. data/bin/lib/Image/ExifTool/ASF.pm +1 -1
  16. data/bin/lib/Image/ExifTool/Apple.pm +1 -1
  17. data/bin/lib/Image/ExifTool/Audible.pm +1 -1
  18. data/bin/lib/Image/ExifTool/BMP.pm +1 -1
  19. data/bin/lib/Image/ExifTool/BPG.pm +1 -1
  20. data/bin/lib/Image/ExifTool/BZZ.pm +1 -1
  21. data/bin/lib/Image/ExifTool/BigTIFF.pm +1 -1
  22. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +2 -2
  23. data/bin/lib/Image/ExifTool/CBOR.pm +1 -1
  24. data/bin/lib/Image/ExifTool/Canon.pm +52 -11
  25. data/bin/lib/Image/ExifTool/CanonCustom.pm +1 -1
  26. data/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
  27. data/bin/lib/Image/ExifTool/CanonVRD.pm +1 -1
  28. data/bin/lib/Image/ExifTool/CaptureOne.pm +1 -1
  29. data/bin/lib/Image/ExifTool/Casio.pm +1 -1
  30. data/bin/lib/Image/ExifTool/Charset.pm +1 -1
  31. data/bin/lib/Image/ExifTool/DICOM.pm +1 -1
  32. data/bin/lib/Image/ExifTool/DJI.pm +1 -1
  33. data/bin/lib/Image/ExifTool/DNG.pm +1 -1
  34. data/bin/lib/Image/ExifTool/DPX.pm +1 -1
  35. data/bin/lib/Image/ExifTool/DSF.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 +1 -1
  40. data/bin/lib/Image/ExifTool/Exif.pm +4 -3
  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 +64 -19
  59. data/bin/lib/Image/ExifTool/GoPro.pm +1 -1
  60. data/bin/lib/Image/ExifTool/Google.pm +7 -3
  61. data/bin/lib/Image/ExifTool/H264.pm +1 -1
  62. data/bin/lib/Image/ExifTool/HP.pm +1 -1
  63. data/bin/lib/Image/ExifTool/HTML.pm +1 -1
  64. data/bin/lib/Image/ExifTool/HtmlDump.pm +1 -1
  65. data/bin/lib/Image/ExifTool/ICC_Profile.pm +1 -1
  66. data/bin/lib/Image/ExifTool/ICO.pm +1 -1
  67. data/bin/lib/Image/ExifTool/ID3.pm +1 -1
  68. data/bin/lib/Image/ExifTool/IPTC.pm +1 -1
  69. data/bin/lib/Image/ExifTool/ISO.pm +1 -1
  70. data/bin/lib/Image/ExifTool/ITC.pm +1 -1
  71. data/bin/lib/Image/ExifTool/Import.pm +1 -1
  72. data/bin/lib/Image/ExifTool/InDesign.pm +1 -1
  73. data/bin/lib/Image/ExifTool/InfiRay.pm +1 -1
  74. data/bin/lib/Image/ExifTool/JPEG.pm +1 -1
  75. data/bin/lib/Image/ExifTool/JPEGDigest.pm +1 -1
  76. data/bin/lib/Image/ExifTool/JSON.pm +1 -1
  77. data/bin/lib/Image/ExifTool/JVC.pm +1 -1
  78. data/bin/lib/Image/ExifTool/Jpeg2000.pm +1 -1
  79. data/bin/lib/Image/ExifTool/Kandao.pm +1 -1
  80. data/bin/lib/Image/ExifTool/Kodak.pm +1 -1
  81. data/bin/lib/Image/ExifTool/KyoceraRaw.pm +1 -1
  82. data/bin/lib/Image/ExifTool/LIF.pm +1 -1
  83. data/bin/lib/Image/ExifTool/LNK.pm +1 -1
  84. data/bin/lib/Image/ExifTool/Lang/cs.pm +1 -1
  85. data/bin/lib/Image/ExifTool/Lang/de.pm +1 -1
  86. data/bin/lib/Image/ExifTool/Lang/en_ca.pm +1 -1
  87. data/bin/lib/Image/ExifTool/Lang/en_gb.pm +1 -1
  88. data/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
  89. data/bin/lib/Image/ExifTool/Lang/fi.pm +1 -1
  90. data/bin/lib/Image/ExifTool/Lang/fr.pm +1 -1
  91. data/bin/lib/Image/ExifTool/Lang/it.pm +1 -1
  92. data/bin/lib/Image/ExifTool/Lang/ja.pm +1 -1
  93. data/bin/lib/Image/ExifTool/Lang/ko.pm +1 -1
  94. data/bin/lib/Image/ExifTool/Lang/nl.pm +1 -1
  95. data/bin/lib/Image/ExifTool/Lang/pl.pm +1 -1
  96. data/bin/lib/Image/ExifTool/Lang/ru.pm +1 -1
  97. data/bin/lib/Image/ExifTool/Lang/sk.pm +1 -1
  98. data/bin/lib/Image/ExifTool/Lang/sv.pm +1 -1
  99. data/bin/lib/Image/ExifTool/Lang/tr.pm +1 -1
  100. data/bin/lib/Image/ExifTool/Lang/zh_cn.pm +1 -1
  101. data/bin/lib/Image/ExifTool/Lang/zh_tw.pm +1 -1
  102. data/bin/lib/Image/ExifTool/Leaf.pm +1 -1
  103. data/bin/lib/Image/ExifTool/LigoGPS.pm +1 -1
  104. data/bin/lib/Image/ExifTool/Lytro.pm +1 -1
  105. data/bin/lib/Image/ExifTool/M2TS.pm +1 -1
  106. data/bin/lib/Image/ExifTool/MIE.pm +1 -1
  107. data/bin/lib/Image/ExifTool/MIEUnits.pod +1 -1
  108. data/bin/lib/Image/ExifTool/MIFF.pm +1 -1
  109. data/bin/lib/Image/ExifTool/MISB.pm +1 -1
  110. data/bin/lib/Image/ExifTool/MNG.pm +1 -1
  111. data/bin/lib/Image/ExifTool/MOI.pm +1 -1
  112. data/bin/lib/Image/ExifTool/MPC.pm +1 -1
  113. data/bin/lib/Image/ExifTool/MPEG.pm +1 -1
  114. data/bin/lib/Image/ExifTool/MPF.pm +1 -1
  115. data/bin/lib/Image/ExifTool/MRC.pm +1 -1
  116. data/bin/lib/Image/ExifTool/MWG.pm +1 -1
  117. data/bin/lib/Image/ExifTool/MXF.pm +1 -1
  118. data/bin/lib/Image/ExifTool/MacOS.pm +1 -1
  119. data/bin/lib/Image/ExifTool/MakerNotes.pm +4 -2
  120. data/bin/lib/Image/ExifTool/Matroska.pm +1 -1
  121. data/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
  122. data/bin/lib/Image/ExifTool/Minolta.pm +1 -1
  123. data/bin/lib/Image/ExifTool/MinoltaRaw.pm +1 -1
  124. data/bin/lib/Image/ExifTool/Motorola.pm +1 -1
  125. data/bin/lib/Image/ExifTool/Nikon.pm +1 -1
  126. data/bin/lib/Image/ExifTool/NikonCapture.pm +1 -1
  127. data/bin/lib/Image/ExifTool/NikonCustom.pm +1 -1
  128. data/bin/lib/Image/ExifTool/NikonSettings.pm +1 -1
  129. data/bin/lib/Image/ExifTool/Nintendo.pm +1 -1
  130. data/bin/lib/Image/ExifTool/OOXML.pm +1 -1
  131. data/bin/lib/Image/ExifTool/Ogg.pm +1 -1
  132. data/bin/lib/Image/ExifTool/Olympus.pm +1 -1
  133. data/bin/lib/Image/ExifTool/OpenEXR.pm +1 -1
  134. data/bin/lib/Image/ExifTool/Opus.pm +1 -1
  135. data/bin/lib/Image/ExifTool/Other.pm +1 -1
  136. data/bin/lib/Image/ExifTool/PCAP.pm +1 -1
  137. data/bin/lib/Image/ExifTool/PCX.pm +1 -1
  138. data/bin/lib/Image/ExifTool/PDF.pm +1 -1
  139. data/bin/lib/Image/ExifTool/PGF.pm +1 -1
  140. data/bin/lib/Image/ExifTool/PICT.pm +1 -1
  141. data/bin/lib/Image/ExifTool/PLIST.pm +1 -1
  142. data/bin/lib/Image/ExifTool/PLUS.pm +1 -1
  143. data/bin/lib/Image/ExifTool/PNG.pm +1 -1
  144. data/bin/lib/Image/ExifTool/PPM.pm +1 -1
  145. data/bin/lib/Image/ExifTool/PSP.pm +1 -1
  146. data/bin/lib/Image/ExifTool/Palm.pm +1 -1
  147. data/bin/lib/Image/ExifTool/Panasonic.pm +7 -2
  148. data/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -1
  149. data/bin/lib/Image/ExifTool/Parrot.pm +1 -1
  150. data/bin/lib/Image/ExifTool/Pentax.pm +4 -3
  151. data/bin/lib/Image/ExifTool/PhaseOne.pm +1 -1
  152. data/bin/lib/Image/ExifTool/PhotoCD.pm +1 -1
  153. data/bin/lib/Image/ExifTool/PhotoMechanic.pm +1 -1
  154. data/bin/lib/Image/ExifTool/Photoshop.pm +1 -1
  155. data/bin/lib/Image/ExifTool/Plot.pm +1 -1
  156. data/bin/lib/Image/ExifTool/PostScript.pm +1 -1
  157. data/bin/lib/Image/ExifTool/PrintIM.pm +1 -1
  158. data/bin/lib/Image/ExifTool/Protobuf.pm +5 -4
  159. data/bin/lib/Image/ExifTool/Qualcomm.pm +1 -1
  160. data/bin/lib/Image/ExifTool/QuickTime.pm +9 -5
  161. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +1 -1
  162. data/bin/lib/Image/ExifTool/RIFF.pm +1 -1
  163. data/bin/lib/Image/ExifTool/RSRC.pm +1 -1
  164. data/bin/lib/Image/ExifTool/RTF.pm +1 -1
  165. data/bin/lib/Image/ExifTool/Radiance.pm +1 -1
  166. data/bin/lib/Image/ExifTool/Rawzor.pm +1 -1
  167. data/bin/lib/Image/ExifTool/Real.pm +1 -1
  168. data/bin/lib/Image/ExifTool/Reconyx.pm +1 -1
  169. data/bin/lib/Image/ExifTool/Red.pm +1 -1
  170. data/bin/lib/Image/ExifTool/Ricoh.pm +1 -1
  171. data/bin/lib/Image/ExifTool/Samsung.pm +1 -1
  172. data/bin/lib/Image/ExifTool/Sanyo.pm +1 -1
  173. data/bin/lib/Image/ExifTool/Scalado.pm +1 -1
  174. data/bin/lib/Image/ExifTool/Shift.pl +1 -1
  175. data/bin/lib/Image/ExifTool/Shortcuts.pm +1 -1
  176. data/bin/lib/Image/ExifTool/Sigma.pm +1 -1
  177. data/bin/lib/Image/ExifTool/SigmaRaw.pm +1 -1
  178. data/bin/lib/Image/ExifTool/Sony.pm +1 -1
  179. data/bin/lib/Image/ExifTool/SonyIDC.pm +1 -1
  180. data/bin/lib/Image/ExifTool/Stim.pm +1 -1
  181. data/bin/lib/Image/ExifTool/TNEF.pm +1 -1
  182. data/bin/lib/Image/ExifTool/TagInfoXML.pm +2 -2
  183. data/bin/lib/Image/ExifTool/TagLookup.pm +6976 -6967
  184. data/bin/lib/Image/ExifTool/TagNames.pod +19 -4
  185. data/bin/lib/Image/ExifTool/Text.pm +1 -1
  186. data/bin/lib/Image/ExifTool/Theora.pm +1 -1
  187. data/bin/lib/Image/ExifTool/Torrent.pm +1 -1
  188. data/bin/lib/Image/ExifTool/Trailer.pm +1 -1
  189. data/bin/lib/Image/ExifTool/Unknown.pm +1 -1
  190. data/bin/lib/Image/ExifTool/VCard.pm +1 -1
  191. data/bin/lib/Image/ExifTool/Validate.pm +5 -5
  192. data/bin/lib/Image/ExifTool/Vorbis.pm +1 -1
  193. data/bin/lib/Image/ExifTool/WPG.pm +1 -1
  194. data/bin/lib/Image/ExifTool/WTV.pm +1 -1
  195. data/bin/lib/Image/ExifTool/WavPack.pm +1 -1
  196. data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
  197. data/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
  198. data/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
  199. data/bin/lib/Image/ExifTool/WritePDF.pl +1 -1
  200. data/bin/lib/Image/ExifTool/WritePNG.pl +1 -1
  201. data/bin/lib/Image/ExifTool/WritePhotoshop.pl +1 -1
  202. data/bin/lib/Image/ExifTool/WritePostScript.pl +1 -1
  203. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +8 -4
  204. data/bin/lib/Image/ExifTool/WriteRIFF.pl +1 -1
  205. data/bin/lib/Image/ExifTool/WriteXMP.pl +1 -1
  206. data/bin/lib/Image/ExifTool/Writer.pl +1 -1
  207. data/bin/lib/Image/ExifTool/XISF.pm +1 -1
  208. data/bin/lib/Image/ExifTool/XMP.pm +1 -1
  209. data/bin/lib/Image/ExifTool/XMP2.pl +1 -1
  210. data/bin/lib/Image/ExifTool/XMPStruct.pl +1 -1
  211. data/bin/lib/Image/ExifTool/ZIP.pm +1 -1
  212. data/bin/lib/Image/ExifTool/ZISRAW.pm +1 -1
  213. data/bin/lib/Image/ExifTool/iWork.pm +1 -1
  214. data/bin/lib/Image/ExifTool.pm +7 -5
  215. data/bin/lib/Image/ExifTool.pod +12 -2
  216. data/bin/perl-Image-ExifTool.spec +1 -1
  217. data/lib/exiftool_vendored/version.rb +1 -1
  218. metadata +1 -1
@@ -298,7 +298,7 @@ information from Free Lossless Audio Codec (FLAC) audio files.
298
298
 
299
299
  =head1 AUTHOR
300
300
 
301
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
301
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
302
302
 
303
303
  This library is free software; you can redistribute it and/or modify it
304
304
  under the same terms as Perl itself.
@@ -329,7 +329,7 @@ meta information in FLIF (Free Lossless Image Format) images.
329
329
 
330
330
  =head1 AUTHOR
331
331
 
332
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
332
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
333
333
 
334
334
  This library is free software; you can redistribute it and/or modify it
335
335
  under the same terms as Perl itself.
@@ -1633,7 +1633,7 @@ Systems Inc. thermal image files (FFF, FPF and JPEG format).
1633
1633
 
1634
1634
  =head1 AUTHOR
1635
1635
 
1636
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
1636
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
1637
1637
 
1638
1638
  This library is free software; you can redistribute it and/or modify it
1639
1639
  under the same terms as Perl itself.
@@ -354,7 +354,7 @@ linear list when ApplyFixups() is called.
354
354
 
355
355
  =head1 AUTHOR
356
356
 
357
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
357
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
358
358
 
359
359
  This library is free software; you can redistribute it and/or modify it
360
360
  under the same terms as Perl itself.
@@ -721,7 +721,7 @@ will add AMF3 support.
721
721
 
722
722
  =head1 AUTHOR
723
723
 
724
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
724
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
725
725
 
726
726
  This library is free software; you can redistribute it and/or modify it
727
727
  under the same terms as Perl itself.
@@ -2402,7 +2402,7 @@ JPEG images.
2402
2402
 
2403
2403
  =head1 AUTHOR
2404
2404
 
2405
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
2405
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
2406
2406
 
2407
2407
  This library is free software; you can redistribute it and/or modify it
2408
2408
  under the same terms as Perl itself.
@@ -896,7 +896,7 @@ WOFF2.
896
896
 
897
897
  =head1 AUTHOR
898
898
 
899
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
899
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
900
900
 
901
901
  This library is free software; you can redistribute it and/or modify it
902
902
  under the same terms as Perl itself.
@@ -243,7 +243,7 @@ write information from the FotoWare FotoStation trailer.
243
243
 
244
244
  =head1 AUTHOR
245
245
 
246
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
246
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
247
247
 
248
248
  This library is free software; you can redistribute it and/or modify it
249
249
  under the same terms as Perl itself.
@@ -2029,7 +2029,7 @@ FujiFilm maker notes in EXIF information, and to read/write FujiFilm RAW
2029
2029
 
2030
2030
  =head1 AUTHOR
2031
2031
 
2032
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
2032
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
2033
2033
 
2034
2034
  This library is free software; you can redistribute it and/or modify it
2035
2035
  under the same terms as Perl itself.
@@ -68,7 +68,7 @@ General Imaging maker notes.
68
68
 
69
69
  =head1 AUTHOR
70
70
 
71
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
71
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
72
72
 
73
73
  This library is free software; you can redistribute it and/or modify it
74
74
  under the same terms as Perl itself.
@@ -596,7 +596,7 @@ write GIF meta information.
596
596
 
597
597
  =head1 AUTHOR
598
598
 
599
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
599
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
600
600
 
601
601
  This library is free software; you can redistribute it and/or modify it
602
602
  under the same terms as Perl itself.
@@ -270,7 +270,7 @@ GIMP software.
270
270
 
271
271
  =head1 AUTHOR
272
272
 
273
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
273
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
274
274
 
275
275
  This library is free software; you can redistribute it and/or modify it
276
276
  under the same terms as Perl itself.
@@ -531,7 +531,7 @@ metadata from videos written by some GM models such as Corvette and Camero.
531
531
 
532
532
  =head1 AUTHOR
533
533
 
534
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
534
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
535
535
 
536
536
  This library is free software; you can redistribute it and/or modify it
537
537
  under the same terms as Perl itself.
@@ -619,7 +619,7 @@ GPS (Global Positioning System) meta information in EXIF data.
619
619
 
620
620
  =head1 AUTHOR
621
621
 
622
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
622
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
623
623
 
624
624
  This library is free software; you can redistribute it and/or modify it
625
625
  under the same terms as Perl itself.
@@ -2242,7 +2242,7 @@ coordinates.
2242
2242
 
2243
2243
  =head1 AUTHOR
2244
2244
 
2245
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
2245
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
2246
2246
 
2247
2247
  This library is free software; you can redistribute it and/or modify it
2248
2248
  under the same terms as Perl itself.
@@ -1020,7 +1020,7 @@ the input arguments of the AddEntry method.
1020
1020
 
1021
1021
  =head1 AUTHOR
1022
1022
 
1023
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
1023
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
1024
1024
 
1025
1025
  This library is free software; you can redistribute it and/or modify it
1026
1026
  under the same terms as Perl itself. The associated database files are
@@ -21,6 +21,7 @@
21
21
  # 2024/11/05 - PH Added support for Google Maps "Export timeline data"
22
22
  # JSON format
23
23
  # 2025/09/22 - PH Added ability to read Columbus CSV log files
24
+ # 2026/01/24 - PH Added GeoUserTag feature
24
25
  #
25
26
  # References: 1) http://www.topografix.com/GPX/1/1/
26
27
  # 2) http://www.gpsinformation.org/dale/nmea.htm#GSA
@@ -35,7 +36,7 @@ use vars qw($VERSION);
35
36
  use Image::ExifTool qw(:Public);
36
37
  use Image::ExifTool::GPS;
37
38
 
38
- $VERSION = '1.84';
39
+ $VERSION = '1.86';
39
40
 
40
41
  sub JITTER() { return 2 } # maximum time jitter
41
42
 
@@ -43,6 +44,7 @@ sub GetTime($);
43
44
  sub SetGeoValues($$;$);
44
45
  sub PrintFixTime($);
45
46
  sub PrintFix($@);
47
+ sub InitUserTags($);
46
48
 
47
49
  # XML tags that we recognize (keys are forced to lower case)
48
50
  my %xmlTag = (
@@ -82,6 +84,8 @@ my %xmlTag = (
82
84
  placemark => '', # KML
83
85
  );
84
86
 
87
+ my %userTag; # user-defined XML tags
88
+
85
89
  # fix information keys which must be interpolated around a circle
86
90
  my %cyclical = (lon => 1, track => 1, dir => 1, pitch => 1, roll => 1);
87
91
  my %cyc180 = (lon => 1, pitch => 1, roll => 1); # wraps from 180 to -180
@@ -174,6 +178,8 @@ sub LoadTrackLog($$;$)
174
178
  unless (eval { require Time::Local }) {
175
179
  return 'Geotag feature requires Time::Local installed';
176
180
  }
181
+ InitUserTags($et);
182
+
177
183
  # add data to existing track
178
184
  my $geotag = $et->GetNewValue('Geotag') || { };
179
185
 
@@ -330,6 +336,8 @@ sub LoadTrackLog($$;$)
330
336
  $param = 'roll';
331
337
  } elsif (/^Img ?Dir/i) {
332
338
  $param = 'dir';
339
+ } elsif ($userTag{lc $_}) {
340
+ $param = $userTag{lc $_};
333
341
  }
334
342
  if ($param) {
335
343
  $et->VPrint(2, "CSV column '${head}' is $param$xtra\n");
@@ -357,16 +365,24 @@ sub LoadTrackLog($$;$)
357
365
  # XML format (GPX, KML, Garmin XML/TCX etc)
358
366
  #
359
367
  if ($format eq 'XML') {
360
- my ($arg, $tok, $td);
361
- s/\s*=\s*(['"])\s*/=$1/g; # remove unnecessary white space in attributes
362
- # Workaround for KML generated by Google Location History:
363
- # lat/lon/alt are space-separated; we want commas.
364
- s{(\S+)\s+(\S+)\s+(\S+)(</gx:coord>)}{$1,$2,$3$4};
365
- foreach $arg (split) {
368
+ my (@args, $arg, $tok, $td, $value);
369
+ if (/^([^<]+<\/[^>]+>)/) {
370
+ # handle simple property
371
+ s/^\s+</</; # remove whitespace if only whitespace before "<"
372
+ # Workaround for KML generated by Google Location History:
373
+ # lat/lon/alt are space-separated; we want commas.
374
+ s{(\S+)\s+(\S+)\s+(\S+)(</gx:coord>)}{$1,$2,$3$4};
375
+ push @args, $_;
376
+ } else {
377
+ # handle property with attributes
378
+ s/\s*=\s*(['"])\s*/=$1/g; # remove unnecessary white space in attributes
379
+ push @args, split;
380
+ }
381
+ foreach $arg (@args) {
366
382
  # parse attributes (eg. GPX 'lat' and 'lon')
367
383
  # (note: ignore namespace prefixes if they exist)
368
384
  if ($arg =~ /^(\w+:)?(\w+)=(['"])(.*?)\3/g) {
369
- my $tag = $xmlTag{lc $2};
385
+ my $tag = $xmlTag{lc $2} || $userTag{lc $2};
370
386
  if ($tag) {
371
387
  $$fix{$tag} = $4;
372
388
  if ($keyCategory{$tag}) {
@@ -382,7 +398,8 @@ sub LoadTrackLog($$;$)
382
398
  }
383
399
  # loop through XML elements
384
400
  while ($arg =~ m{([^<>]*)<(/)?(\w+:)?(\w+)(>|$)}g) {
385
- my $tag = $xmlTag{$tok = lc $4};
401
+ $tok = lc $4;
402
+ my $tag = $xmlTag{$tok} || $userTag{$tok};
386
403
  # parse as a simple property if this element has a value
387
404
  if (defined $tag and not $tag) {
388
405
  # a containing property was opened or closed
@@ -566,6 +583,8 @@ DoneFix: $isDate = 1;
566
583
  } elsif ($param eq 'runtime') {
567
584
  $date = $trackTime;
568
585
  $secs = $val;
586
+ } elsif ($param =~ /^_/) {
587
+ $$fix{$param} = $val;
569
588
  } else {
570
589
  $val /= $scaleSpeed if $scaleSpeed and $param eq 'speed';
571
590
  $$fix{$param} = $val;
@@ -1137,20 +1156,20 @@ sub SetGeoValues($$;$)
1137
1156
  my $p1 = $$points{$t1};
1138
1157
  # check to see if we are extrapolating before the first entry in a track
1139
1158
  my $maxSecs = ($$p1{first} and $geoMaxIntSecs) ? $geoMaxExtSecs : $geoMaxIntSecs;
1159
+ my $tn; # find time of nearest fix
1160
+ if ($time - $t0 < $t1 - $time) {
1161
+ $tn = $t0;
1162
+ $iExt = $i0;
1163
+ } else {
1164
+ $tn = $t1;
1165
+ $iExt = $i1;
1166
+ }
1140
1167
  # don't interpolate if fixes are too far apart
1141
1168
  # (but always interpolate fixes inside the same TimeSpan)
1142
1169
  if ($t1 - $t0 > $maxSecs and (not $$p1{span} or not $$points{$t0}{span} or
1143
1170
  $$p1{span} != $$points{$t0}{span}))
1144
1171
  {
1145
1172
  # treat as an extrapolation -- use nearest fix if close enough
1146
- my $tn;
1147
- if ($time - $t0 < $t1 - $time) {
1148
- $tn = $t0;
1149
- $iExt = $i0;
1150
- } else {
1151
- $tn = $t1;
1152
- $iExt = $i1;
1153
- }
1154
1173
  if (abs($time - $tn) > $geoMaxExtSecs) {
1155
1174
  $err or $err = 'Time is too far from nearest GPS fix';
1156
1175
  $et->VPrint(2, ' Nearest fix: ', PrintFixTime($tn), ' (',
@@ -1167,6 +1186,8 @@ sub SetGeoValues($$;$)
1167
1186
  $et->VPrint(2, " Interpolating between fixes (f=$f0):\n",
1168
1187
  PrintFix($points, $t0, $t1)) if $verbose > 2;
1169
1188
  $fix = { };
1189
+ # copy user-defined tags from nearest fix
1190
+ $$fix{$_} = $$points{$tn}{$_} foreach values %userTag;
1170
1191
  # loop through available fix information categories
1171
1192
  # (pos, track, alt, orient)
1172
1193
  my ($category, $key);
@@ -1379,11 +1400,19 @@ Category: foreach $category (qw{pos track alt orient atemp err dop}) {
1379
1400
  unless ($exif) {
1380
1401
  @r = $et->SetNewValue(GPSDateTime => "$gpsDate $gpsTime", %opts);
1381
1402
  }
1403
+ # set user-defined tags
1404
+ foreach (sort values %userTag) {
1405
+ @r = $et->SetNewValue(substr($_, 1) => $$fix{$_}) if defined $$fix{$_};
1406
+ }
1382
1407
  } else {
1383
1408
  my %opts = ( IgnorePermanent => 1 );
1384
1409
  $opts{Replace} = 2 if defined $val; # remove existing new values
1410
+ # reset user-defined GPX tags
1411
+ InitUserTags($et); # (won't be set yet because we didn't read a GPX file)
1412
+ foreach (values %userTag) {
1413
+ my @r = $et->SetNewValue(substr($_, 1), undef, %opts);
1414
+ }
1385
1415
  $opts{Group} = $writeGroup if $writeGroup;
1386
-
1387
1416
  # reset any GPS values we might have already set
1388
1417
  foreach (qw(GPSLatitude GPSLatitudeRef GPSLongitude GPSLongitudeRef
1389
1418
  GPSAltitude GPSAltitudeRef GPSDateStamp GPSTimeStamp GPSDateTime
@@ -1556,6 +1585,22 @@ sub PrintFix($@)
1556
1585
  return $str;
1557
1586
  }
1558
1587
 
1588
+ #------------------------------------------------------------------------------
1589
+ # Initialize %userTag for reading user-defined GPX tags
1590
+ # Inputs: 0) ExifTool ref
1591
+ sub InitUserTags($)
1592
+ {
1593
+ my $et = shift;
1594
+ %userTag = ( );
1595
+ if ($$et{OPTIONS}{GeoUserTag}) {
1596
+ foreach (split /\s*,\s*/, $$et{OPTIONS}{GeoUserTag}) {
1597
+ next unless /^(.+)=(.+)$/;
1598
+ $xmlTag{lc $2} and $et->Warn("User-defined GPX tag '${2}' conflicts with existing tag"), next;
1599
+ $userTag{lc $2} = "_$1"; # (leading underline prevents conflicts)
1600
+ }
1601
+ }
1602
+ }
1603
+
1559
1604
  #------------------------------------------------------------------------------
1560
1605
  1; # end
1561
1606
 
@@ -1590,7 +1635,7 @@ user-defined tag GPSRoll, must be active.
1590
1635
 
1591
1636
  =head1 AUTHOR
1592
1637
 
1593
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
1638
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
1594
1639
 
1595
1640
  This library is free software; you can redistribute it and/or modify it
1596
1641
  under the same terms as Perl itself.
@@ -918,7 +918,7 @@ metadata from GoPro MP4 videos.
918
918
 
919
919
  =head1 AUTHOR
920
920
 
921
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
921
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
922
922
 
923
923
  This library is free software; you can redistribute it and/or modify it
924
924
  under the same terms as Perl itself.
@@ -15,7 +15,7 @@ use vars qw($VERSION);
15
15
  use Image::ExifTool qw(:DataAccess :Utils);
16
16
  use Image::ExifTool::XMP;
17
17
 
18
- $VERSION = '1.00';
18
+ $VERSION = '1.01';
19
19
 
20
20
  sub ProcessHDRP($$$);
21
21
 
@@ -130,7 +130,8 @@ my %sAppInfo = (
130
130
  NAMESPACE => 'GPano',
131
131
  NOTES => q{
132
132
  Panorama tags written by Google Photosphere. See
133
- L<https://developers.google.com/panorama/metadata/> for the specification.
133
+ L<https://developers.google.com/streetview/spherical-metadata> for the
134
+ specification.
134
135
  },
135
136
  UsePanoramaViewer => { Writable => 'boolean' },
136
137
  CaptureSoftware => { },
@@ -671,8 +672,11 @@ sub ProcessHDRP($$$)
671
672
  my $tagInfo = $$dirInfo{TagInfo};
672
673
  my $tagName = $tagInfo ? $$tagInfo{Name} : '';
673
674
  my $verbose = $et->Options('Verbose');
675
+ my $fast = $et->Options('FastScan') || 0;
674
676
  my ($ver, $valPt);
675
677
 
678
+ return undef if $fast > 1;
679
+
676
680
  if ($$dirInfo{DirStart}) {
677
681
  my $dat = substr($$dataPt, $$dirInfo{DirStart}, $$dirInfo{DirLen});
678
682
  $dataPt = \$dat;
@@ -793,7 +797,7 @@ Google maker notes and write Google XMP tags.
793
797
 
794
798
  =head1 AUTHOR
795
799
 
796
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
800
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
797
801
 
798
802
  This library is free software; you can redistribute it and/or modify it
799
803
  under the same terms as Perl itself.
@@ -1123,7 +1123,7 @@ information from H.264 video streams.
1123
1123
 
1124
1124
  =head1 AUTHOR
1125
1125
 
1126
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
1126
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
1127
1127
 
1128
1128
  This library is free software; you can redistribute it and/or modify it
1129
1129
  under the same terms as Perl itself.
@@ -250,7 +250,7 @@ Hewlett-Packard maker notes.
250
250
 
251
251
  =head1 AUTHOR
252
252
 
253
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
253
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
254
254
 
255
255
  This library is free software; you can redistribute it and/or modify it
256
256
  under the same terms as Perl itself.
@@ -555,7 +555,7 @@ meta information from HTML documents.
555
555
 
556
556
  =head1 AUTHOR
557
557
 
558
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
558
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
559
559
 
560
560
  This library is free software; you can redistribute it and/or modify it
561
561
  under the same terms as Perl itself.
@@ -920,7 +920,7 @@ page.
920
920
 
921
921
  =head1 AUTHOR
922
922
 
923
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
923
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
924
924
 
925
925
  This library is free software; you can redistribute it and/or modify it
926
926
  under the same terms as Perl itself.
@@ -1437,7 +1437,7 @@ data created on one device into another device's native color space.
1437
1437
 
1438
1438
  =head1 AUTHOR
1439
1439
 
1440
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
1440
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
1441
1441
 
1442
1442
  This library is free software; you can redistribute it and/or modify it
1443
1443
  under the same terms as Perl itself.
@@ -121,7 +121,7 @@ information from Windows ICO (icon) and CUR (cursor) files.
121
121
 
122
122
  =head1 AUTHOR
123
123
 
124
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
124
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
125
125
 
126
126
  This library is free software; you can redistribute it and/or modify it
127
127
  under the same terms as Perl itself.
@@ -1747,7 +1747,7 @@ other types of audio files.
1747
1747
 
1748
1748
  =head1 AUTHOR
1749
1749
 
1750
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
1750
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
1751
1751
 
1752
1752
  This library is free software; you can redistribute it and/or modify it
1753
1753
  under the same terms as Perl itself.
@@ -1287,7 +1287,7 @@ image files.
1287
1287
 
1288
1288
  =head1 AUTHOR
1289
1289
 
1290
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
1290
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
1291
1291
 
1292
1292
  This library is free software; you can redistribute it and/or modify it
1293
1293
  under the same terms as Perl itself.
@@ -184,7 +184,7 @@ information from ISO 9660 disk images.
184
184
 
185
185
  =head1 AUTHOR
186
186
 
187
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
187
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
188
188
 
189
189
  This library is free software; you can redistribute it and/or modify it
190
190
  under the same terms as Perl itself.
@@ -191,7 +191,7 @@ information (including artwork images) from iTunes Cover Flow files.
191
191
 
192
192
  =head1 AUTHOR
193
193
 
194
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
194
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
195
195
 
196
196
  This library is free software; you can redistribute it and/or modify it
197
197
  under the same terms as Perl itself.
@@ -356,7 +356,7 @@ ARRAY reference in a special "_ordered_keys_" element of this hash.
356
356
 
357
357
  =head1 AUTHOR
358
358
 
359
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
359
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
360
360
 
361
361
  This library is free software; you can redistribute it and/or modify it
362
362
  under the same terms as Perl itself.
@@ -277,7 +277,7 @@ them and the LargeFileSupport option is enabled.
277
277
 
278
278
  =head1 AUTHOR
279
279
 
280
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
280
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
281
281
 
282
282
  This library is free software; you can redistribute it and/or modify it
283
283
  under the same terms as Perl itself.
@@ -206,7 +206,7 @@ IJPEG SDK, used in cameras such as the P2 Pro.
206
206
 
207
207
  =head1 AUTHOR
208
208
 
209
- Copyright 2003-2025, Marcos Del Sol Vives (marcos at orca.pet)
209
+ Copyright 2003-2026, Marcos Del Sol Vives (marcos at orca.pet)
210
210
 
211
211
  This library is free software; you can redistribute it and/or modify it
212
212
  under the same terms as Perl itself.
@@ -821,7 +821,7 @@ segments are included in the Image::ExifTool module itself.
821
821
 
822
822
  =head1 AUTHOR
823
823
 
824
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
824
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
825
825
 
826
826
  This library is free software; you can redistribute it and/or modify it
827
827
  under the same terms as Perl itself.
@@ -2590,7 +2590,7 @@ estimated JPEG quality if requested.
2590
2590
 
2591
2591
  =head1 AUTHOR
2592
2592
 
2593
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
2593
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
2594
2594
 
2595
2595
  This library is free software; you can redistribute it and/or modify it
2596
2596
  under the same terms as Perl itself.
@@ -188,7 +188,7 @@ information from JSON files.
188
188
 
189
189
  =head1 AUTHOR
190
190
 
191
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
191
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
192
192
 
193
193
  This library is free software; you can redistribute it and/or modify it
194
194
  under the same terms as Perl itself.
@@ -117,7 +117,7 @@ notes.
117
117
 
118
118
  =head1 AUTHOR
119
119
 
120
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
120
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
121
121
 
122
122
  This library is free software; you can redistribute it and/or modify it
123
123
  under the same terms as Perl itself.
@@ -1671,7 +1671,7 @@ files.
1671
1671
 
1672
1672
  =head1 AUTHOR
1673
1673
 
1674
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
1674
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
1675
1675
 
1676
1676
  This library is free software; you can redistribute it and/or modify it
1677
1677
  under the same terms as Perl itself.
@@ -385,7 +385,7 @@ atoms in MP4 videos as shot by the Kandao QOOCAM 3 ULTRA.
385
385
 
386
386
  =head1 AUTHOR
387
387
 
388
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
388
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
389
389
 
390
390
  This library is free software; you can redistribute it and/or modify it
391
391
  under the same terms as Perl itself.
@@ -3253,7 +3253,7 @@ interpret Kodak maker notes EXIF meta information.
3253
3253
 
3254
3254
  =head1 AUTHOR
3255
3255
 
3256
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
3256
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
3257
3257
 
3258
3258
  This library is free software; you can redistribute it and/or modify it
3259
3259
  under the same terms as Perl itself.
@@ -152,7 +152,7 @@ meta information from Kyocera Contax N Digital RAW images.
152
152
 
153
153
  =head1 AUTHOR
154
154
 
155
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
155
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
156
156
 
157
157
  This library is free software; you can redistribute it and/or modify it
158
158
  under the same terms as Perl itself.
@@ -147,7 +147,7 @@ metadata from Leica Image File (LIF) images.
147
147
 
148
148
  =head1 AUTHOR
149
149
 
150
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
150
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
151
151
 
152
152
  This library is free software; you can redistribute it and/or modify it
153
153
  under the same terms as Perl itself.
@@ -796,7 +796,7 @@ information MS Shell Link (Windows shortcut) files.
796
796
 
797
797
  =head1 AUTHOR
798
798
 
799
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
799
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
800
800
 
801
801
  This library is free software; you can redistribute it and/or modify it
802
802
  under the same terms as Perl itself.
@@ -1569,7 +1569,7 @@ and values.
1569
1569
 
1570
1570
  =head1 AUTHOR
1571
1571
 
1572
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
1572
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
1573
1573
 
1574
1574
  This library is free software; you can redistribute it and/or modify it
1575
1575
  under the same terms as Perl itself.