exiftool-vendored.pl 13.0.1 → 13.17.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 (216) hide show
  1. package/bin/Changes +269 -20
  2. package/bin/MANIFEST +10 -0
  3. package/bin/META.json +1 -1
  4. package/bin/META.yml +1 -1
  5. package/bin/README +3 -3
  6. package/bin/arg_files/exif2xmp.args +4 -0
  7. package/bin/arg_files/xmp2exif.args +2 -1
  8. package/bin/build_geolocation +1 -1
  9. package/bin/exiftool +356 -213
  10. package/bin/lib/File/RandomAccess.pm +1 -1
  11. package/bin/lib/File/RandomAccess.pod +2 -2
  12. package/bin/lib/Image/ExifTool/AAC.pm +1 -1
  13. package/bin/lib/Image/ExifTool/AES.pm +1 -1
  14. package/bin/lib/Image/ExifTool/AFCP.pm +6 -6
  15. package/bin/lib/Image/ExifTool/AIFF.pm +2 -2
  16. package/bin/lib/Image/ExifTool/APE.pm +2 -2
  17. package/bin/lib/Image/ExifTool/APP12.pm +1 -1
  18. package/bin/lib/Image/ExifTool/ASF.pm +2 -2
  19. package/bin/lib/Image/ExifTool/Apple.pm +11 -9
  20. package/bin/lib/Image/ExifTool/Audible.pm +1 -1
  21. package/bin/lib/Image/ExifTool/BMP.pm +1 -1
  22. package/bin/lib/Image/ExifTool/BPG.pm +1 -1
  23. package/bin/lib/Image/ExifTool/BZZ.pm +1 -1
  24. package/bin/lib/Image/ExifTool/BigTIFF.pm +1 -1
  25. package/bin/lib/Image/ExifTool/BuildTagLookup.pm +46 -26
  26. package/bin/lib/Image/ExifTool/CBOR.pm +5 -2
  27. package/bin/lib/Image/ExifTool/Canon.pm +68 -28
  28. package/bin/lib/Image/ExifTool/CanonCustom.pm +1 -1
  29. package/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
  30. package/bin/lib/Image/ExifTool/CanonVRD.pm +1 -1
  31. package/bin/lib/Image/ExifTool/CaptureOne.pm +1 -1
  32. package/bin/lib/Image/ExifTool/Casio.pm +1 -1
  33. package/bin/lib/Image/ExifTool/Charset.pm +1 -1
  34. package/bin/lib/Image/ExifTool/DICOM.pm +1 -1
  35. package/bin/lib/Image/ExifTool/DJI.pm +196 -30
  36. package/bin/lib/Image/ExifTool/DNG.pm +1 -1
  37. package/bin/lib/Image/ExifTool/DPX.pm +1 -1
  38. package/bin/lib/Image/ExifTool/DV.pm +1 -1
  39. package/bin/lib/Image/ExifTool/DarwinCore.pm +1 -1
  40. package/bin/lib/Image/ExifTool/DjVu.pm +1 -1
  41. package/bin/lib/Image/ExifTool/EXE.pm +138 -33
  42. package/bin/lib/Image/ExifTool/Exif.pm +29 -16
  43. package/bin/lib/Image/ExifTool/FITS.pm +3 -3
  44. package/bin/lib/Image/ExifTool/FLAC.pm +1 -1
  45. package/bin/lib/Image/ExifTool/FLIF.pm +3 -3
  46. package/bin/lib/Image/ExifTool/FLIR.pm +1 -1
  47. package/bin/lib/Image/ExifTool/Fixup.pm +1 -1
  48. package/bin/lib/Image/ExifTool/Flash.pm +1 -1
  49. package/bin/lib/Image/ExifTool/FlashPix.pm +17 -21
  50. package/bin/lib/Image/ExifTool/Font.pm +2 -2
  51. package/bin/lib/Image/ExifTool/FotoStation.pm +1 -1
  52. package/bin/lib/Image/ExifTool/FujiFilm.pm +1 -1
  53. package/bin/lib/Image/ExifTool/GE.pm +1 -1
  54. package/bin/lib/Image/ExifTool/GIF.pm +144 -93
  55. package/bin/lib/Image/ExifTool/GIMP.pm +1 -1
  56. package/bin/lib/Image/ExifTool/GM.pm +1 -1
  57. package/bin/lib/Image/ExifTool/GPS.pm +34 -30
  58. package/bin/lib/Image/ExifTool/GeoTiff.pm +1 -1
  59. package/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
  60. package/bin/lib/Image/ExifTool/Geolocation.pm +19 -9
  61. package/bin/lib/Image/ExifTool/Geotag.pm +46 -12
  62. package/bin/lib/Image/ExifTool/GoPro.pm +120 -8
  63. package/bin/lib/Image/ExifTool/H264.pm +1 -1
  64. package/bin/lib/Image/ExifTool/HP.pm +2 -2
  65. package/bin/lib/Image/ExifTool/HTML.pm +1 -1
  66. package/bin/lib/Image/ExifTool/HtmlDump.pm +1 -1
  67. package/bin/lib/Image/ExifTool/ICC_Profile.pm +81 -2
  68. package/bin/lib/Image/ExifTool/ICO.pm +1 -1
  69. package/bin/lib/Image/ExifTool/ID3.pm +8 -8
  70. package/bin/lib/Image/ExifTool/IPTC.pm +10 -7
  71. package/bin/lib/Image/ExifTool/ISO.pm +1 -1
  72. package/bin/lib/Image/ExifTool/ITC.pm +1 -1
  73. package/bin/lib/Image/ExifTool/Import.pm +5 -4
  74. package/bin/lib/Image/ExifTool/InDesign.pm +2 -2
  75. package/bin/lib/Image/ExifTool/InfiRay.pm +1 -1
  76. package/bin/lib/Image/ExifTool/JPEG.pm +38 -5
  77. package/bin/lib/Image/ExifTool/JPEGDigest.pm +1 -1
  78. package/bin/lib/Image/ExifTool/JSON.pm +1 -1
  79. package/bin/lib/Image/ExifTool/JVC.pm +1 -1
  80. package/bin/lib/Image/ExifTool/Jpeg2000.pm +10 -9
  81. package/bin/lib/Image/ExifTool/Kodak.pm +1 -1
  82. package/bin/lib/Image/ExifTool/KyoceraRaw.pm +1 -1
  83. package/bin/lib/Image/ExifTool/LIF.pm +1 -1
  84. package/bin/lib/Image/ExifTool/LNK.pm +2 -2
  85. package/bin/lib/Image/ExifTool/Lang/cs.pm +1 -1
  86. package/bin/lib/Image/ExifTool/Lang/de.pm +1 -1
  87. package/bin/lib/Image/ExifTool/Lang/en_ca.pm +1 -1
  88. package/bin/lib/Image/ExifTool/Lang/en_gb.pm +1 -1
  89. package/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
  90. package/bin/lib/Image/ExifTool/Lang/fi.pm +1 -1
  91. package/bin/lib/Image/ExifTool/Lang/fr.pm +1 -1
  92. package/bin/lib/Image/ExifTool/Lang/it.pm +1 -1
  93. package/bin/lib/Image/ExifTool/Lang/ja.pm +1 -1
  94. package/bin/lib/Image/ExifTool/Lang/ko.pm +1 -1
  95. package/bin/lib/Image/ExifTool/Lang/nl.pm +1 -1
  96. package/bin/lib/Image/ExifTool/Lang/pl.pm +1 -1
  97. package/bin/lib/Image/ExifTool/Lang/ru.pm +1 -1
  98. package/bin/lib/Image/ExifTool/Lang/sk.pm +1 -1
  99. package/bin/lib/Image/ExifTool/Lang/sv.pm +1 -1
  100. package/bin/lib/Image/ExifTool/Lang/tr.pm +1 -1
  101. package/bin/lib/Image/ExifTool/Lang/zh_cn.pm +1 -1
  102. package/bin/lib/Image/ExifTool/Lang/zh_tw.pm +1 -1
  103. package/bin/lib/Image/ExifTool/Leaf.pm +1 -1
  104. package/bin/lib/Image/ExifTool/LigoGPS.pm +409 -0
  105. package/bin/lib/Image/ExifTool/Lytro.pm +1 -1
  106. package/bin/lib/Image/ExifTool/M2TS.pm +57 -18
  107. package/bin/lib/Image/ExifTool/MIE.pm +15 -6
  108. package/bin/lib/Image/ExifTool/MIEUnits.pod +1 -1
  109. package/bin/lib/Image/ExifTool/MIFF.pm +1 -1
  110. package/bin/lib/Image/ExifTool/MISB.pm +1 -1
  111. package/bin/lib/Image/ExifTool/MNG.pm +1 -1
  112. package/bin/lib/Image/ExifTool/MOI.pm +1 -1
  113. package/bin/lib/Image/ExifTool/MPC.pm +1 -1
  114. package/bin/lib/Image/ExifTool/MPEG.pm +1 -1
  115. package/bin/lib/Image/ExifTool/MPF.pm +1 -1
  116. package/bin/lib/Image/ExifTool/MRC.pm +1 -1
  117. package/bin/lib/Image/ExifTool/MWG.pm +1 -1
  118. package/bin/lib/Image/ExifTool/MXF.pm +3 -3
  119. package/bin/lib/Image/ExifTool/MacOS.pm +3 -2
  120. package/bin/lib/Image/ExifTool/MakerNotes.pm +1 -1
  121. package/bin/lib/Image/ExifTool/Matroska.pm +22 -6
  122. package/bin/lib/Image/ExifTool/Microsoft.pm +2 -2
  123. package/bin/lib/Image/ExifTool/Minolta.pm +1 -1
  124. package/bin/lib/Image/ExifTool/MinoltaRaw.pm +1 -1
  125. package/bin/lib/Image/ExifTool/Motorola.pm +1 -1
  126. package/bin/lib/Image/ExifTool/Nikon.pm +457 -103
  127. package/bin/lib/Image/ExifTool/NikonCapture.pm +1 -1
  128. package/bin/lib/Image/ExifTool/NikonCustom.pm +6 -6
  129. package/bin/lib/Image/ExifTool/NikonSettings.pm +1 -1
  130. package/bin/lib/Image/ExifTool/Nintendo.pm +1 -1
  131. package/bin/lib/Image/ExifTool/OOXML.pm +8 -8
  132. package/bin/lib/Image/ExifTool/Ogg.pm +1 -1
  133. package/bin/lib/Image/ExifTool/Olympus.pm +1 -1
  134. package/bin/lib/Image/ExifTool/OpenEXR.pm +1 -1
  135. package/bin/lib/Image/ExifTool/Opus.pm +1 -1
  136. package/bin/lib/Image/ExifTool/Other.pm +1 -1
  137. package/bin/lib/Image/ExifTool/PCX.pm +1 -1
  138. package/bin/lib/Image/ExifTool/PDF.pm +49 -18
  139. package/bin/lib/Image/ExifTool/PGF.pm +1 -1
  140. package/bin/lib/Image/ExifTool/PICT.pm +1 -1
  141. package/bin/lib/Image/ExifTool/PLIST.pm +4 -4
  142. package/bin/lib/Image/ExifTool/PLUS.pm +1 -1
  143. package/bin/lib/Image/ExifTool/PNG.pm +20 -8
  144. package/bin/lib/Image/ExifTool/PPM.pm +12 -3
  145. package/bin/lib/Image/ExifTool/PSP.pm +1 -1
  146. package/bin/lib/Image/ExifTool/Palm.pm +1 -1
  147. package/bin/lib/Image/ExifTool/Panasonic.pm +27 -3
  148. package/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -1
  149. package/bin/lib/Image/ExifTool/Parrot.pm +1 -1
  150. package/bin/lib/Image/ExifTool/Pentax.pm +1 -1
  151. package/bin/lib/Image/ExifTool/PhaseOne.pm +4 -4
  152. package/bin/lib/Image/ExifTool/PhotoCD.pm +1 -1
  153. package/bin/lib/Image/ExifTool/PhotoMechanic.pm +1 -1
  154. package/bin/lib/Image/ExifTool/Photoshop.pm +65 -4
  155. package/bin/lib/Image/ExifTool/PostScript.pm +1 -1
  156. package/bin/lib/Image/ExifTool/PrintIM.pm +1 -1
  157. package/bin/lib/Image/ExifTool/Protobuf.pm +270 -0
  158. package/bin/lib/Image/ExifTool/Qualcomm.pm +1 -1
  159. package/bin/lib/Image/ExifTool/QuickTime.pm +327 -88
  160. package/bin/lib/Image/ExifTool/QuickTimeStream.pl +199 -195
  161. package/bin/lib/Image/ExifTool/README +12 -2
  162. package/bin/lib/Image/ExifTool/RIFF.pm +21 -6
  163. package/bin/lib/Image/ExifTool/RSRC.pm +1 -1
  164. package/bin/lib/Image/ExifTool/RTF.pm +2 -2
  165. package/bin/lib/Image/ExifTool/Radiance.pm +1 -1
  166. package/bin/lib/Image/ExifTool/Rawzor.pm +1 -1
  167. package/bin/lib/Image/ExifTool/Real.pm +1 -1
  168. package/bin/lib/Image/ExifTool/Reconyx.pm +1 -1
  169. package/bin/lib/Image/ExifTool/Red.pm +1 -1
  170. package/bin/lib/Image/ExifTool/Ricoh.pm +4 -4
  171. package/bin/lib/Image/ExifTool/Samsung.pm +6 -2
  172. package/bin/lib/Image/ExifTool/Sanyo.pm +1 -1
  173. package/bin/lib/Image/ExifTool/Scalado.pm +1 -1
  174. package/bin/lib/Image/ExifTool/Shift.pl +1 -1
  175. package/bin/lib/Image/ExifTool/Shortcuts.pm +1 -1
  176. package/bin/lib/Image/ExifTool/Sigma.pm +1 -1
  177. package/bin/lib/Image/ExifTool/SigmaRaw.pm +1 -1
  178. package/bin/lib/Image/ExifTool/Sony.pm +6 -5
  179. package/bin/lib/Image/ExifTool/SonyIDC.pm +1 -1
  180. package/bin/lib/Image/ExifTool/Stim.pm +1 -1
  181. package/bin/lib/Image/ExifTool/TagInfoXML.pm +6 -5
  182. package/bin/lib/Image/ExifTool/TagLookup.pm +7028 -6968
  183. package/bin/lib/Image/ExifTool/TagNames.pod +12079 -11630
  184. package/bin/lib/Image/ExifTool/Text.pm +4 -3
  185. package/bin/lib/Image/ExifTool/Theora.pm +1 -1
  186. package/bin/lib/Image/ExifTool/Torrent.pm +3 -3
  187. package/bin/lib/Image/ExifTool/Trailer.pm +318 -0
  188. package/bin/lib/Image/ExifTool/Unknown.pm +1 -1
  189. package/bin/lib/Image/ExifTool/VCard.pm +3 -3
  190. package/bin/lib/Image/ExifTool/Validate.pm +6 -6
  191. package/bin/lib/Image/ExifTool/Vorbis.pm +1 -1
  192. package/bin/lib/Image/ExifTool/WPG.pm +1 -1
  193. package/bin/lib/Image/ExifTool/WTV.pm +1 -1
  194. package/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
  195. package/bin/lib/Image/ExifTool/WriteExif.pl +3 -3
  196. package/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
  197. package/bin/lib/Image/ExifTool/WritePDF.pl +1 -1
  198. package/bin/lib/Image/ExifTool/WritePNG.pl +1 -1
  199. package/bin/lib/Image/ExifTool/WritePhotoshop.pl +1 -1
  200. package/bin/lib/Image/ExifTool/WritePostScript.pl +1 -1
  201. package/bin/lib/Image/ExifTool/WriteQuickTime.pl +170 -79
  202. package/bin/lib/Image/ExifTool/WriteRIFF.pl +17 -6
  203. package/bin/lib/Image/ExifTool/WriteXMP.pl +3 -3
  204. package/bin/lib/Image/ExifTool/Writer.pl +89 -96
  205. package/bin/lib/Image/ExifTool/XISF.pm +1 -1
  206. package/bin/lib/Image/ExifTool/XMP.pm +28 -13
  207. package/bin/lib/Image/ExifTool/XMP2.pl +106 -3
  208. package/bin/lib/Image/ExifTool/XMPStruct.pl +2 -3
  209. package/bin/lib/Image/ExifTool/ZIP.pm +2 -2
  210. package/bin/lib/Image/ExifTool/ZISRAW.pm +1 -1
  211. package/bin/lib/Image/ExifTool/iWork.pm +1 -1
  212. package/bin/lib/Image/ExifTool.pm +467 -228
  213. package/bin/lib/Image/ExifTool.pod +118 -72
  214. package/bin/perl-Image-ExifTool.spec +1 -1
  215. package/bin/windows_exiftool.txt +96 -51
  216. package/package.json +6 -6
@@ -32,7 +32,7 @@ use strict;
32
32
  use vars qw($VERSION);
33
33
  use Image::ExifTool qw(:DataAccess :Utils);
34
34
 
35
- $VERSION = '1.26';
35
+ $VERSION = '1.29';
36
36
 
37
37
  # program map table "stream_type" lookup (ref 6/1/9)
38
38
  my %streamType = (
@@ -305,6 +305,15 @@ sub ParsePID($$$$$)
305
305
  # MPEG-1/MPEG-2 Audio
306
306
  require Image::ExifTool::MPEG;
307
307
  Image::ExifTool::MPEG::ParseMPEGAudio($et, $dataPt);
308
+ } elsif ($type == 6 and $pid == 0x0300) {
309
+ # LIGOGPSINFO from unknown dashcam (../testpics/gps_video/Wrong Way pass.ts)
310
+ if ($$dataPt =~ /^LIGOGPSINFO/s) {
311
+ my $tbl = GetTagTable('Image::ExifTool::QuickTime::Stream');
312
+ my %dirInfo = ( DataPt => $dataPt, DirName => 'Ligo0x0300' );
313
+ Image::ExifTool::LigoGPS::ProcessLigoGPS($et, \%dirInfo, $tbl, 1);
314
+ $$et{FoundGoodGPS} = 1;
315
+ $more = 1;
316
+ }
308
317
  } elsif ($type == 0x1b) {
309
318
  # H.264 Video
310
319
  require Image::ExifTool::H264;
@@ -313,7 +322,7 @@ sub ParsePID($$$$$)
313
322
  if ($$et{OPTIONS}{ExtractEmbedded}) {
314
323
  $more = 1;
315
324
  } elsif (not $$et{OPTIONS}{Validate}) {
316
- $et->WarnOnce('The ExtractEmbedded option may find more tags in the video data',3);
325
+ $et->Warn('The ExtractEmbedded option may find more tags in the video data',3);
317
326
  }
318
327
  } elsif ($type == 0x81 or $type == 0x87 or $type == 0x91) {
319
328
  # AC-3 audio
@@ -428,13 +437,16 @@ sub ParsePID($$$$$)
428
437
  $more = 1;
429
438
  } elsif ($$dataPt =~ /\$GPRMC,/) {
430
439
  # Jomise T860S-GM dashcam
431
- # $GPRMC,hhmmss.ss,A,ddmm.mmmmm,N,dddmm.mmmmm,W,spd-kts,dir-dg,DDMMYY,,*cs
432
- # $GPRMC,172255.00,A,:985.95194,N,17170.14674,W,029.678,170.68,240822,,,D*7B
433
- # $GPRMC,172355.00,A,:984.76779,N,17170.00473,W,032.219,172.04,240822,,,D*7B
434
- # ddmm.mmmm: from 4742.2568 12209.2028 (should be)
435
- # to 4741.7696 12209.1056
436
- # stamped on video: 47.70428N, 122.15338W, 35mph (dd.ddddd)
437
- # to 47.69616N, 122.15176W, 37mph
440
+ # $GPRMC,hhmmss.ss,A,ddmm.mmmmm,N,dddmm.mmmmm,W,spd-kts,dir-dg,DDMMYY,,M*cs - lat,lon,spd from video
441
+ # $GPRMC,172255.00,A,:985.95194,N,17170.14674,W,029.678,170.68,240822,,,D*7B - N47.70428,W122.15338,35mph
442
+ # $GPRMC,192643.00,A,:987.94979,N,17171.07268,W,010.059,079.61,111122,,,A*73 - N47.71862,W122.16437,12mph
443
+ # $GPRMC,192743.00,A,:988.72110,N,17171.04873,W,017.477,001.03,111122,,,A*78 - N47.72421,W122.16408,20mph
444
+ # $GPRMC,192844.00,A,:989.43771,N,17171.03538,W,016.889,001.20,111122,,,A*7B - N47.72932,W122.16393,19mph
445
+ # $GPRMC,005241.00,A,:987.70873,N,17171.81293,W,000.284,354.78,141122,,,A*7F - N47.71687,W122.17318,0mph
446
+ # $GPRMC,005341.00,A,:987.90851,N,17171.85380,W,000.080,349.36,141122,,,A*7C - N47.71832,W122.17367,0mph
447
+ # $GPRMC,005441.00,A,:987.94538,N,17171.21783,W,029.686,091.09,141122,,,A*7A - N47.71859,W122.16630,35mph
448
+ # $GPRMC,002816.00,A,6820.67273,N,13424.26599,W,000.045,000.00,261122,,,A*79 - N29.52096,W95.55953,0mph (seattle)
449
+ # $GPRMC,035136.00,A,:981.47322,N,17170.14105,W,024.594,180.50,291122,,,D*79 - N47.67180,W122.15328,28mph
438
450
  my $tagTbl = GetTagTable('Image::ExifTool::QuickTime::Stream');
439
451
  while ($$dataPt =~ /\$[A-Z]{2}RMC,(\d{2})(\d{2})(\d+(\.\d*)?),A?,(.{2})(\d{2}\.\d+),([NS]),(.{3})(\d{2}\.\d+),([EW]),(\d*\.?\d*),(\d*\.?\d*),(\d{2})(\d{2})(\d+)/g and
440
452
  # do some basic sanity checks on the date
@@ -459,15 +471,20 @@ sub ParsePID($$$$$)
459
471
  $bad = 1 if $_ < 0x30 or $_ > 0x39;
460
472
  }
461
473
  if ($bad) {
462
- $et->WarnOnce('Error decrypting GPS degrees');
474
+ $et->Warn('Error decrypting GPS degrees');
463
475
  } else {
464
476
  my $la = pack('C*', @chars[0,1]);
465
477
  my $lo = pack('C*', @chars[2,3,4]);
466
- $et->WarnOnce('Decryption of this GPS is highly experimental. More testing samples are required');
478
+ $et->Warn('Decryption of this GPS is highly experimental. More testing samples are required');
467
479
  $et->HandleTag($tagTbl, GPSLatitude => (($la || 0) + (($6-85.95194)/2.43051724137931+42.2568)/60) * ($7 eq 'N' ? 1 : -1));
468
480
  $et->HandleTag($tagTbl, GPSLongitude => (($lo || 0) + (($9-70.14674)/1.460987654320988+9.2028)/60) * ($10 eq 'E' ? 1 : -1));
469
481
  }
470
482
  }
483
+ } elsif ($$dataPt =~ /\$GSENSORD,\s*(\d+),\s*(\d+),\s*(\d+),/) {
484
+ # Jomise T860S-GM dashcam
485
+ my $tagTbl = GetTagTable('Image::ExifTool::QuickTime::Stream');
486
+ $$et{DOC_NUM} = $$et{DOC_COUNT};
487
+ $et->HandleTag($tagTbl, Accelerometer => "$1 $2 $3"); # (NC - values range from 0 to 6)
471
488
  } elsif ($$dataPt =~ /^.{44}A\0{3}.{4}([NS])\0{3}.{4}([EW])\0{3}/s and length($$dataPt) >= 84) {
472
489
  #forum11320
473
490
  SetByteOrder('II');
@@ -476,7 +493,7 @@ sub ParsePID($$$$$)
476
493
  my $lon = abs(GetFloat($dataPt, 56)); # (abs just to be safe)
477
494
  my $spd = GetFloat($dataPt, 64);
478
495
  my $trk = GetFloat($dataPt, 68);
479
- $et->WarnOnce('GPSLatitude/Longitude encryption is not yet known, so these will be wrong');
496
+ $et->Warn('GPSLatitude/Longitude encryption is not yet known, so these will be wrong');
480
497
  $$et{DOC_NUM} = ++$$et{DOC_COUNT};
481
498
  my @date = unpack('x32V3x28V3', $$dataPt);
482
499
  $date[3] += 2000;
@@ -514,9 +531,16 @@ sub ParsePID($$$$$)
514
531
  $et->HandleTag($tagTbl, GPSTrack => $a[2] / 100);
515
532
  }
516
533
  # Note: 10 bytes after last GPS record look like a single 3-axis accelerometer reading:
517
- # eg. fd ff 00 00 ff ff 00 00 01 00
534
+ # eg. fd ff 00 00 ff ff 00 00 01 00
518
535
  $$et{FoundGoodGPS} = 1; # so we skip over unrecognized packets
519
536
  $more = 1;
537
+ } elsif ($$dataPt =~ /^skip.{4}LIGOGPSINFO\0/s) {
538
+ # (this record contains 2 copies of the same 'skip' atom in my sample --
539
+ # only extract data from the first one)
540
+ my $tbl = GetTagTable('Image::ExifTool::QuickTime::Stream');
541
+ my %dirInfo = ( DataPt => $dataPt, DirStart => 8, DirName => sprintf('Ligo0x%.4x',$pid));
542
+ Image::ExifTool::LigoGPS::ProcessLigoGPS($et, \%dirInfo, $tbl, 1);
543
+ $$et{FoundGoodGPS} = 1;
520
544
  } elsif ($$et{FoundGoodGPS}) {
521
545
  $more = 1;
522
546
  }
@@ -576,7 +600,8 @@ sub ProcessM2TS($$)
576
600
  my %gpsPID = (
577
601
  0x0300 => 1, # Novatek INNOVV, DOD_LS600W
578
602
  0x01e4 => 1, # vsys a6l dashcam
579
- 0x0e1b => 1, # Jomise T860S-GM dashcam
603
+ 0x0e1b => 1, # Jomise T860S-GM dashcam GPS
604
+ 0x0e1a => 1, # Jomise T860S-GM dashcam accelerometer
580
605
  );
581
606
  my $pEnd = 0;
582
607
 
@@ -694,7 +719,7 @@ sub ProcessM2TS($$)
694
719
  # or if we are just looking for the last timestamp
695
720
  next unless $payload_data_exists and not defined $backScan;
696
721
 
697
- # decode payload data
722
+ # decode payload data
698
723
  if ($pid == 0 or # program association table
699
724
  defined $pmt{$pid}) # program map table(s)
700
725
  {
@@ -787,7 +812,7 @@ sub ProcessM2TS($$)
787
812
  last if $j + $descriptor_length > $program_info_length;
788
813
  my $desc = substr($buf2, $pos+$j, $descriptor_length);
789
814
  $j += $descriptor_length;
790
- $desc =~ s/([\x00-\x1f\x80-\xff])/sprintf("\\x%.2x",ord $1)/eg;
815
+ $desc =~ s/([\x00-\x1f\x7f-\xff])/sprintf("\\x%.2x",ord $1)/eg;
791
816
  printf $out " Program Descriptor: Type=0x%.2x \"$desc\"\n", $descriptor_tag;
792
817
  }}
793
818
  $pos += $program_info_length; # skip descriptors (for now)
@@ -822,7 +847,7 @@ sub ProcessM2TS($$)
822
847
  $j += $descriptor_length;
823
848
  if ($verbose > 1) {
824
849
  my $dstr = $desc;
825
- $dstr =~ s/([\x00-\x1f\x80-\xff])/sprintf("\\x%.2x",ord $1)/eg;
850
+ $dstr =~ s/([\x00-\x1f\x7f-\xff])/sprintf("\\x%.2x",ord $1)/eg;
826
851
  printf $out " ES Descriptor: Type=0x%.2x \"$dstr\"\n", $descriptor_tag;
827
852
  }
828
853
  # parse type-specific descriptor information (once)
@@ -954,6 +979,20 @@ sub ProcessM2TS($$)
954
979
  ParsePID($et, $pid, $pidType{$pid}, $pidName{$pid}, \$data{$pid});
955
980
  delete $data{$pid};
956
981
  }
982
+
983
+ # look for LIGOGPSINFO trailer
984
+ if ($et->Options('ExtractEmbedded') and
985
+ $raf->Seek(-8, 2) and $raf->Read($buff, 8) == 8 and
986
+ $buff =~ /^&&&&/)
987
+ {
988
+ my $len = unpack('x4N', $buff);
989
+ if ($len < $raf->Tell() and $raf->Seek(-$len, 2) and $raf->Read($buff,$len) == $len) {
990
+ my $tbl = GetTagTable('Image::ExifTool::QuickTime::Stream');
991
+ my %dirInfo = ( DataPt => \$buff, DirStart => 8, DirName => 'LigoTrailer' );
992
+ Image::ExifTool::LigoGPS::ProcessLigoGPS($et, \%dirInfo, $tbl);
993
+ }
994
+ }
995
+
957
996
  return 1;
958
997
  }
959
998
 
@@ -977,7 +1016,7 @@ video.
977
1016
 
978
1017
  =head1 AUTHOR
979
1018
 
980
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
1019
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
981
1020
 
982
1021
  This library is free software; you can redistribute it and/or modify it
983
1022
  under the same terms as Perl itself.
@@ -14,7 +14,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
14
14
  use Image::ExifTool::Exif;
15
15
  use Image::ExifTool::GPS;
16
16
 
17
- $VERSION = '1.54';
17
+ $VERSION = '1.56';
18
18
 
19
19
  sub ProcessMIE($$);
20
20
  sub ProcessMIEGroup($$$);
@@ -1376,8 +1376,9 @@ sub WriteMIEGroup($$$)
1376
1376
  my $term = "~\0\0\0";
1377
1377
  unless ($$dirInfo{Parent}) {
1378
1378
  # write extended terminator for file-level group
1379
- my $len = ref $outfile eq 'SCALAR' ? length($$outfile) : tell $outfile;
1380
- $len += 10; # include length of terminator itself
1379
+ my $len = ref $outfile eq 'SCALAR' ? length($$outfile) || 0 : tell $outfile;
1380
+ # include length of terminator itself minus original $outfile position
1381
+ $len += 10 - ($$dirInfo{OutPos} || 0);
1381
1382
  if ($len and $len <= 0x7fffffff) {
1382
1383
  $term = "~\0\0\x06" . Set32u($len) . MIEGroupFormat(1) . "\x04";
1383
1384
  }
@@ -1596,9 +1597,10 @@ sub ProcessMIEGroup($$$)
1596
1597
  } else {
1597
1598
  # process MIE data format types
1598
1599
  if ($tagInfo) {
1599
- my $rational;
1600
+ my ($rational, $binVal);
1600
1601
  # extract tag value
1601
1602
  my $val = ReadMIEValue(\$value, 0, $formatStr, undef, $valLen, \$rational);
1603
+ $binVal = substr($value, 0, $valLen) if $$et{OPTIONS}{SaveBin};
1602
1604
  unless (defined $val) {
1603
1605
  $et->Warn("Error reading $tag value");
1604
1606
  $val = '<err>';
@@ -1661,7 +1663,12 @@ sub ProcessMIEGroup($$$)
1661
1663
  $val .= "($units)" if defined $units;
1662
1664
  }
1663
1665
  my $key = $et->FoundTag($tagInfo, $val);
1664
- $$et{RATIONAL}{$key} = $rational if defined $rational and defined $key;
1666
+ if (defined $key) {
1667
+ my $ex = $$et{TAG_EXTRA}{$key};
1668
+ $$ex{Rational} = $rational if defined $rational;
1669
+ $$ex{BinVal} = $binVal if defined $binVal;
1670
+ $$ex{G6} = $formatStr if $$et{OPTIONS}{SaveFormat};
1671
+ }
1665
1672
  }
1666
1673
  } else {
1667
1674
  # skip over unknown information or free bytes
@@ -1796,6 +1803,8 @@ sub ProcessMIE($$)
1796
1803
  # don't define Parent so WriteMIEGroup() writes extended terminator
1797
1804
  );
1798
1805
  if ($outfile) {
1806
+ # save start position in $outfile
1807
+ $subdirInfo{OutPos} = ref $outfile eq 'SCALAR' ? length($$outfile) || 0 : tell $outfile;
1799
1808
  # generate lookup for MIE format codes if not done already
1800
1809
  unless (%mieCode) {
1801
1810
  foreach (keys %mieFormat) {
@@ -2551,7 +2560,7 @@ tag name. For example:
2551
2560
 
2552
2561
  =head1 AUTHOR
2553
2562
 
2554
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
2563
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
2555
2564
 
2556
2565
  This library is free software; you can redistribute it and/or modify it
2557
2566
  under the same terms as Perl itself. The MIE format itself is also
@@ -356,7 +356,7 @@ A few examples of combined units strings:
356
356
 
357
357
  =head1 AUTHOR
358
358
 
359
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
359
+ Copyright 2003-2025, 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.
@@ -255,7 +255,7 @@ This module contains routines required by Image::ExifTool to read MIFF
255
255
 
256
256
  =head1 AUTHOR
257
257
 
258
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
258
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
259
259
 
260
260
  This library is free software; you can redistribute it and/or modify it
261
261
  under the same terms as Perl itself.
@@ -468,7 +468,7 @@ Board (MISB) KLV-format metadata from M2TS videos.
468
468
 
469
469
  =head1 AUTHOR
470
470
 
471
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
471
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
472
472
 
473
473
  This library is free software; you can redistribute it and/or modify it
474
474
  under the same terms as Perl itself.
@@ -661,7 +661,7 @@ This module contains definitions required by Image::ExifTool to read MNG
661
661
 
662
662
  =head1 AUTHOR
663
663
 
664
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
664
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
665
665
 
666
666
  This library is free software; you can redistribute it and/or modify it
667
667
  under the same terms as Perl itself.
@@ -137,7 +137,7 @@ information from MOI files.
137
137
 
138
138
  =head1 AUTHOR
139
139
 
140
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
140
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
141
141
 
142
142
  This library is free software; you can redistribute it and/or modify it
143
143
  under the same terms as Perl itself.
@@ -134,7 +134,7 @@ information from Musepack (MPC) audio files.
134
134
 
135
135
  =head1 AUTHOR
136
136
 
137
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
137
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
138
138
 
139
139
  This library is free software; you can redistribute it and/or modify it
140
140
  under the same terms as Perl itself.
@@ -704,7 +704,7 @@ based on unofficial sources which may be incomplete, inaccurate or outdated.
704
704
 
705
705
  =head1 AUTHOR
706
706
 
707
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
707
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
708
708
 
709
709
  This library is free software; you can redistribute it and/or modify it
710
710
  under the same terms as Perl itself.
@@ -267,7 +267,7 @@ Format (MPF) information from JPEG images.
267
267
 
268
268
  =head1 AUTHOR
269
269
 
270
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
270
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
271
271
 
272
272
  This library is free software; you can redistribute it and/or modify it
273
273
  under the same terms as Perl itself.
@@ -315,7 +315,7 @@ metadata from Medical Research Council (MRC) images.
315
315
 
316
316
  =head1 AUTHOR
317
317
 
318
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
318
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
319
319
 
320
320
  This library is free software; you can redistribute it and/or modify it
321
321
  under the same terms as Perl itself.
@@ -757,7 +757,7 @@ must be loaded explicitly as described above.
757
757
 
758
758
  =head1 AUTHOR
759
759
 
760
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
760
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
761
761
 
762
762
  This library is free software; you can redistribute it and/or modify it
763
763
  under the same terms as Perl itself.
@@ -2525,7 +2525,7 @@ sub ReadMXFValue($$$)
2525
2525
  } elsif ($type =~ /(Array|Batch)/ and $len > 16) {
2526
2526
  my ($count, $size) = unpack('NN', $val);
2527
2527
  # validate data length
2528
- $len == 8 + $count * $size or $et->WarnOnce("Bad array or batch size");
2528
+ $len == 8 + $count * $size or $et->Warn("Bad array or batch size");
2529
2529
  my ($i, @a);
2530
2530
  for ($i=0; $i<$count; ++$i) {
2531
2531
  my $pos = 8 + $i * $size;
@@ -2626,7 +2626,7 @@ sub ProcessLocalSet($$$)
2626
2626
  $extra = sprintf(', Local 0x%.4x', $loc);
2627
2627
  } else {
2628
2628
  $tag = $loc;
2629
- # $et->WarnOnce('Missing local key for at least one tag');
2629
+ # $et->Warn('Missing local key for at least one tag');
2630
2630
  $extra = ', NOT IN PRIMER!';
2631
2631
  }
2632
2632
  my $tagInfo = $$tagTablePtr{$tag};
@@ -2987,7 +2987,7 @@ information from MXF (Material Exchange Format) files.
2987
2987
 
2988
2988
  =head1 AUTHOR
2989
2989
 
2990
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
2990
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
2991
2991
 
2992
2992
  This library is free software; you can redistribute it and/or modify it
2993
2993
  under the same terms as Perl itself.
@@ -12,7 +12,7 @@ use strict;
12
12
  use vars qw($VERSION);
13
13
  use Image::ExifTool qw(:DataAccess :Utils);
14
14
 
15
- $VERSION = '1.13';
15
+ $VERSION = '1.14';
16
16
 
17
17
  sub MDItemLocalTime($);
18
18
  sub ProcessATTR($$$);
@@ -394,6 +394,7 @@ sub SetMacOSTags($$$)
394
394
  if ($val =~ /[-+Z]/) {
395
395
  my $time = Image::ExifTool::GetUnixTime($val, 1);
396
396
  $val = Image::ExifTool::ConvertUnixTime($time, 1) if $time;
397
+ $val =~ s/[-+].*//; # remove time zone
397
398
  }
398
399
  $val =~ s{(\d{4}):(\d{2}):(\d{2})}{$2/$3/$1}; # reformat for setfile
399
400
  $cmd = "/usr/bin/setfile -d '${val}' '${f}'";
@@ -736,7 +737,7 @@ Writable tags use "xattr", "setfile" or "osascript" for writing.
736
737
 
737
738
  =head1 AUTHOR
738
739
 
739
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
740
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
740
741
 
741
742
  This library is free software; you can redistribute it and/or modify it
742
743
  under the same terms as Perl itself.
@@ -1831,7 +1831,7 @@ maker notes in EXIF information.
1831
1831
 
1832
1832
  =head1 AUTHOR
1833
1833
 
1834
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
1834
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
1835
1835
 
1836
1836
  This library is free software; you can redistribute it and/or modify it
1837
1837
  under the same terms as Perl itself.
@@ -15,7 +15,7 @@ use strict;
15
15
  use vars qw($VERSION);
16
16
  use Image::ExifTool qw(:DataAccess :Utils);
17
17
 
18
- $VERSION = '1.16';
18
+ $VERSION = '1.18';
19
19
 
20
20
  sub HandleStruct($$;$$$$);
21
21
 
@@ -685,6 +685,14 @@ my %uidInfo = (
685
685
  Name => 'Projection',
686
686
  SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Projection' },
687
687
  },
688
+ #
689
+ # other
690
+ #
691
+ 0x5345414c => { # ('SEAL' in hex)
692
+ Name => 'SEAL',
693
+ NotEBML => 1, # don't process SubDirectory as EBML elements
694
+ SubDirectory => { TagTable => 'Image::ExifTool::XMP::SEAL' },
695
+ },
688
696
  );
689
697
 
690
698
  # Spherical video v2 projection tags (ref https://github.com/google/spatial-media/blob/master/docs/spherical-video-v2-rfc.md)
@@ -744,7 +752,11 @@ my %uidInfo = (
744
752
  SUBTITLE => 'Subtitle',
745
753
  URL => 'URL', # nested
746
754
  SORT_WITH => 'SortWith', # nested
747
- INSTRUMENTS => 'Instruments', # nested
755
+ INSTRUMENTS => { # nested
756
+ Name => 'Instruments',
757
+ IsList => 1,
758
+ ValueConv => 'my @a = split /,\s?/, $val; \@a',
759
+ },
748
760
  EMAIL => 'Email', # nested
749
761
  ADDRESS => 'Address', # nested
750
762
  FAX => 'FAX', # nested
@@ -788,7 +800,11 @@ my %uidInfo = (
788
800
  CONTENT_TYPE => 'ContentType',
789
801
  SUBJECT => 'Subject',
790
802
  DESCRIPTION => 'Description',
791
- KEYWORDS => 'Keywords',
803
+ KEYWORDS => {
804
+ Name => 'Keywords',
805
+ IsList => 1,
806
+ ValueConv => 'my @a = split /,\s?/, $val; \@a',
807
+ },
792
808
  SUMMARY => 'Summary',
793
809
  SYNOPSIS => 'Synopsis',
794
810
  INITIAL_KEY => 'InitialKey',
@@ -1047,7 +1063,7 @@ sub ProcessMKV($$)
1047
1063
  $seekInfoOnly = 1;
1048
1064
  }
1049
1065
  if ($tagInfo) {
1050
- if ($$tagInfo{SubDirectory}) {
1066
+ if ($$tagInfo{SubDirectory} and not $$tagInfo{NotEBML}) {
1051
1067
  # stop processing at first cluster unless we are using -v -U or -ee
1052
1068
  # or there are Tags after this
1053
1069
  if ($$tagInfo{Name} eq 'Cluster' and $processAll < 2) {
@@ -1089,7 +1105,7 @@ sub ProcessMKV($$)
1089
1105
  if ($more >= 0x80000000) {
1090
1106
  last unless $et->Options('LargeFileSupport');
1091
1107
  if ($et->Options('LargeFileSupport') eq '2') {
1092
- $et->WarnOnce('Processing large block (LargeFileSupport is 2)');
1108
+ $et->Warn('Processing large block (LargeFileSupport is 2)');
1093
1109
  }
1094
1110
  }
1095
1111
  $raf->Seek($more, 1) or last;
@@ -1211,7 +1227,7 @@ information from Matroska multimedia files (MKA, MKV, MKS and WEBM).
1211
1227
 
1212
1228
  =head1 AUTHOR
1213
1229
 
1214
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
1230
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
1215
1231
 
1216
1232
  This library is free software; you can redistribute it and/or modify it
1217
1233
  under the same terms as Perl itself.
@@ -907,7 +907,7 @@ sub WriteXtraValue($$$)
907
907
  $type = 72;
908
908
  }
909
909
  } else {
910
- $et->WarnOnce("Error converting value for Microsoft:$$tagInfo{Name}");
910
+ $et->Warn("Error converting value for Microsoft:$$tagInfo{Name}");
911
911
  }
912
912
  SetByteOrder('MM');
913
913
  if (defined $type) {
@@ -1100,7 +1100,7 @@ Xtra tags in videos.
1100
1100
 
1101
1101
  =head1 AUTHOR
1102
1102
 
1103
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
1103
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
1104
1104
 
1105
1105
  This library is free software; you can redistribute it and/or modify it
1106
1106
  under the same terms as Perl itself.
@@ -2927,7 +2927,7 @@ and write Minolta RAW (MRW) images.
2927
2927
 
2928
2928
  =head1 AUTHOR
2929
2929
 
2930
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
2930
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
2931
2931
 
2932
2932
  This library is free software; you can redistribute it and/or modify it
2933
2933
  under the same terms as Perl itself.
@@ -513,7 +513,7 @@ write Konica-Minolta RAW (MRW) images.
513
513
 
514
514
  =head1 AUTHOR
515
515
 
516
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
516
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
517
517
 
518
518
  This library is free software; you can redistribute it and/or modify it
519
519
  under the same terms as Perl itself.
@@ -165,7 +165,7 @@ cell phone images.
165
165
 
166
166
  =head1 AUTHOR
167
167
 
168
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
168
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
169
169
 
170
170
  This library is free software; you can redistribute it and/or modify it
171
171
  under the same terms as Perl itself.