exiftool-vendored.exe 12.72.0 → 12.76.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 (202) hide show
  1. package/bin/exiftool_files/Changes +64 -1
  2. package/bin/exiftool_files/README +47 -46
  3. package/bin/exiftool_files/exiftool.pl +121 -90
  4. package/bin/exiftool_files/lib/File/RandomAccess.pm +32 -6
  5. package/bin/exiftool_files/lib/File/RandomAccess.pod +6 -6
  6. package/bin/exiftool_files/lib/Image/ExifTool/7Z.pm +3 -3
  7. package/bin/exiftool_files/lib/Image/ExifTool/AAC.pm +8 -6
  8. package/bin/exiftool_files/lib/Image/ExifTool/AES.pm +1 -1
  9. package/bin/exiftool_files/lib/Image/ExifTool/AFCP.pm +3 -3
  10. package/bin/exiftool_files/lib/Image/ExifTool/AIFF.pm +1 -1
  11. package/bin/exiftool_files/lib/Image/ExifTool/APE.pm +1 -1
  12. package/bin/exiftool_files/lib/Image/ExifTool/APP12.pm +1 -1
  13. package/bin/exiftool_files/lib/Image/ExifTool/ASF.pm +1 -1
  14. package/bin/exiftool_files/lib/Image/ExifTool/Apple.pm +1 -1
  15. package/bin/exiftool_files/lib/Image/ExifTool/Audible.pm +1 -1
  16. package/bin/exiftool_files/lib/Image/ExifTool/BMP.pm +1 -1
  17. package/bin/exiftool_files/lib/Image/ExifTool/BPG.pm +1 -1
  18. package/bin/exiftool_files/lib/Image/ExifTool/BZZ.pm +3 -3
  19. package/bin/exiftool_files/lib/Image/ExifTool/BigTIFF.pm +1 -1
  20. package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +9 -9
  21. package/bin/exiftool_files/lib/Image/ExifTool/CBOR.pm +1 -1
  22. package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +7 -6
  23. package/bin/exiftool_files/lib/Image/ExifTool/CanonCustom.pm +1 -1
  24. package/bin/exiftool_files/lib/Image/ExifTool/CanonRaw.pm +1 -1
  25. package/bin/exiftool_files/lib/Image/ExifTool/CanonVRD.pm +3 -3
  26. package/bin/exiftool_files/lib/Image/ExifTool/CaptureOne.pm +1 -1
  27. package/bin/exiftool_files/lib/Image/ExifTool/Casio.pm +1 -1
  28. package/bin/exiftool_files/lib/Image/ExifTool/Charset.pm +1 -1
  29. package/bin/exiftool_files/lib/Image/ExifTool/DICOM.pm +3 -3
  30. package/bin/exiftool_files/lib/Image/ExifTool/DJI.pm +1 -1
  31. package/bin/exiftool_files/lib/Image/ExifTool/DNG.pm +5 -5
  32. package/bin/exiftool_files/lib/Image/ExifTool/DPX.pm +1 -1
  33. package/bin/exiftool_files/lib/Image/ExifTool/DV.pm +1 -1
  34. package/bin/exiftool_files/lib/Image/ExifTool/DarwinCore.pm +1 -1
  35. package/bin/exiftool_files/lib/Image/ExifTool/DjVu.pm +1 -1
  36. package/bin/exiftool_files/lib/Image/ExifTool/EXE.pm +1 -1
  37. package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +4 -3
  38. package/bin/exiftool_files/lib/Image/ExifTool/FITS.pm +1 -1
  39. package/bin/exiftool_files/lib/Image/ExifTool/FLAC.pm +1 -1
  40. package/bin/exiftool_files/lib/Image/ExifTool/FLIF.pm +1 -1
  41. package/bin/exiftool_files/lib/Image/ExifTool/FLIR.pm +3 -3
  42. package/bin/exiftool_files/lib/Image/ExifTool/Fixup.pm +4 -4
  43. package/bin/exiftool_files/lib/Image/ExifTool/Flash.pm +1 -1
  44. package/bin/exiftool_files/lib/Image/ExifTool/FlashPix.pm +61 -8
  45. package/bin/exiftool_files/lib/Image/ExifTool/Font.pm +1 -1
  46. package/bin/exiftool_files/lib/Image/ExifTool/FotoStation.pm +1 -1
  47. package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +9 -4
  48. package/bin/exiftool_files/lib/Image/ExifTool/GE.pm +1 -1
  49. package/bin/exiftool_files/lib/Image/ExifTool/GIF.pm +1 -1
  50. package/bin/exiftool_files/lib/Image/ExifTool/GIMP.pm +1 -1
  51. package/bin/exiftool_files/lib/Image/ExifTool/GPS.pm +1 -1
  52. package/bin/exiftool_files/lib/Image/ExifTool/GeoTiff.pm +1 -1
  53. package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +4 -4
  54. package/bin/exiftool_files/lib/Image/ExifTool/GoPro.pm +1 -1
  55. package/bin/exiftool_files/lib/Image/ExifTool/H264.pm +1 -1
  56. package/bin/exiftool_files/lib/Image/ExifTool/HP.pm +1 -1
  57. package/bin/exiftool_files/lib/Image/ExifTool/HTML.pm +1 -1
  58. package/bin/exiftool_files/lib/Image/ExifTool/HtmlDump.pm +7 -5
  59. package/bin/exiftool_files/lib/Image/ExifTool/ICC_Profile.pm +1 -1
  60. package/bin/exiftool_files/lib/Image/ExifTool/ICO.pm +1 -1
  61. package/bin/exiftool_files/lib/Image/ExifTool/ID3.pm +3 -3
  62. package/bin/exiftool_files/lib/Image/ExifTool/IPTC.pm +1 -1
  63. package/bin/exiftool_files/lib/Image/ExifTool/ISO.pm +1 -1
  64. package/bin/exiftool_files/lib/Image/ExifTool/ITC.pm +1 -1
  65. package/bin/exiftool_files/lib/Image/ExifTool/Import.pm +6 -6
  66. package/bin/exiftool_files/lib/Image/ExifTool/InDesign.pm +1 -1
  67. package/bin/exiftool_files/lib/Image/ExifTool/InfiRay.pm +1 -1
  68. package/bin/exiftool_files/lib/Image/ExifTool/JPEG.pm +5 -2
  69. package/bin/exiftool_files/lib/Image/ExifTool/JPEGDigest.pm +1 -1
  70. package/bin/exiftool_files/lib/Image/ExifTool/JSON.pm +3 -3
  71. package/bin/exiftool_files/lib/Image/ExifTool/JVC.pm +3 -3
  72. package/bin/exiftool_files/lib/Image/ExifTool/Jpeg2000.pm +67 -17
  73. package/bin/exiftool_files/lib/Image/ExifTool/Kodak.pm +1 -1
  74. package/bin/exiftool_files/lib/Image/ExifTool/KyoceraRaw.pm +1 -1
  75. package/bin/exiftool_files/lib/Image/ExifTool/LIF.pm +1 -1
  76. package/bin/exiftool_files/lib/Image/ExifTool/LNK.pm +1 -1
  77. package/bin/exiftool_files/lib/Image/ExifTool/Lang/cs.pm +1 -1
  78. package/bin/exiftool_files/lib/Image/ExifTool/Lang/de.pm +1 -1
  79. package/bin/exiftool_files/lib/Image/ExifTool/Lang/en_ca.pm +1 -1
  80. package/bin/exiftool_files/lib/Image/ExifTool/Lang/en_gb.pm +1 -1
  81. package/bin/exiftool_files/lib/Image/ExifTool/Lang/es.pm +4 -4
  82. package/bin/exiftool_files/lib/Image/ExifTool/Lang/fi.pm +1 -1
  83. package/bin/exiftool_files/lib/Image/ExifTool/Lang/fr.pm +4 -5
  84. package/bin/exiftool_files/lib/Image/ExifTool/Lang/it.pm +3 -3
  85. package/bin/exiftool_files/lib/Image/ExifTool/Lang/ja.pm +1 -1
  86. package/bin/exiftool_files/lib/Image/ExifTool/Lang/ko.pm +1 -1
  87. package/bin/exiftool_files/lib/Image/ExifTool/Lang/nl.pm +1 -1
  88. package/bin/exiftool_files/lib/Image/ExifTool/Lang/pl.pm +1 -1
  89. package/bin/exiftool_files/lib/Image/ExifTool/Lang/ru.pm +1 -1
  90. package/bin/exiftool_files/lib/Image/ExifTool/Lang/sk.pm +1 -1
  91. package/bin/exiftool_files/lib/Image/ExifTool/Lang/sv.pm +1 -1
  92. package/bin/exiftool_files/lib/Image/ExifTool/Lang/tr.pm +1 -1
  93. package/bin/exiftool_files/lib/Image/ExifTool/Lang/zh_cn.pm +1 -1
  94. package/bin/exiftool_files/lib/Image/ExifTool/Lang/zh_tw.pm +1 -1
  95. package/bin/exiftool_files/lib/Image/ExifTool/Leaf.pm +3 -3
  96. package/bin/exiftool_files/lib/Image/ExifTool/Lytro.pm +1 -1
  97. package/bin/exiftool_files/lib/Image/ExifTool/M2TS.pm +1 -1
  98. package/bin/exiftool_files/lib/Image/ExifTool/MIE.pm +5 -5
  99. package/bin/exiftool_files/lib/Image/ExifTool/MIEUnits.pod +1 -1
  100. package/bin/exiftool_files/lib/Image/ExifTool/MIFF.pm +1 -1
  101. package/bin/exiftool_files/lib/Image/ExifTool/MISB.pm +1 -1
  102. package/bin/exiftool_files/lib/Image/ExifTool/MNG.pm +1 -1
  103. package/bin/exiftool_files/lib/Image/ExifTool/MOI.pm +1 -1
  104. package/bin/exiftool_files/lib/Image/ExifTool/MPC.pm +1 -1
  105. package/bin/exiftool_files/lib/Image/ExifTool/MPEG.pm +1 -1
  106. package/bin/exiftool_files/lib/Image/ExifTool/MPF.pm +1 -1
  107. package/bin/exiftool_files/lib/Image/ExifTool/MRC.pm +1 -1
  108. package/bin/exiftool_files/lib/Image/ExifTool/MWG.pm +1 -1
  109. package/bin/exiftool_files/lib/Image/ExifTool/MXF.pm +1 -1
  110. package/bin/exiftool_files/lib/Image/ExifTool/MacOS.pm +1 -1
  111. package/bin/exiftool_files/lib/Image/ExifTool/MakerNotes.pm +1 -1
  112. package/bin/exiftool_files/lib/Image/ExifTool/Matroska.pm +1 -1
  113. package/bin/exiftool_files/lib/Image/ExifTool/Microsoft.pm +1 -1
  114. package/bin/exiftool_files/lib/Image/ExifTool/Minolta.pm +1 -1
  115. package/bin/exiftool_files/lib/Image/ExifTool/MinoltaRaw.pm +3 -3
  116. package/bin/exiftool_files/lib/Image/ExifTool/Motorola.pm +1 -1
  117. package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +11 -8
  118. package/bin/exiftool_files/lib/Image/ExifTool/NikonCapture.pm +1 -1
  119. package/bin/exiftool_files/lib/Image/ExifTool/NikonCustom.pm +4 -4
  120. package/bin/exiftool_files/lib/Image/ExifTool/NikonSettings.pm +1 -1
  121. package/bin/exiftool_files/lib/Image/ExifTool/Nintendo.pm +1 -1
  122. package/bin/exiftool_files/lib/Image/ExifTool/OOXML.pm +1 -1
  123. package/bin/exiftool_files/lib/Image/ExifTool/Ogg.pm +3 -3
  124. package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +1 -1
  125. package/bin/exiftool_files/lib/Image/ExifTool/OpenEXR.pm +1 -1
  126. package/bin/exiftool_files/lib/Image/ExifTool/Opus.pm +1 -1
  127. package/bin/exiftool_files/lib/Image/ExifTool/Other.pm +1 -1
  128. package/bin/exiftool_files/lib/Image/ExifTool/PCX.pm +1 -1
  129. package/bin/exiftool_files/lib/Image/ExifTool/PDF.pm +55 -5
  130. package/bin/exiftool_files/lib/Image/ExifTool/PGF.pm +1 -1
  131. package/bin/exiftool_files/lib/Image/ExifTool/PICT.pm +1 -1
  132. package/bin/exiftool_files/lib/Image/ExifTool/PLIST.pm +4 -4
  133. package/bin/exiftool_files/lib/Image/ExifTool/PLUS.pm +1 -1
  134. package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +24 -2
  135. package/bin/exiftool_files/lib/Image/ExifTool/PPM.pm +1 -1
  136. package/bin/exiftool_files/lib/Image/ExifTool/PSP.pm +1 -1
  137. package/bin/exiftool_files/lib/Image/ExifTool/Palm.pm +1 -1
  138. package/bin/exiftool_files/lib/Image/ExifTool/Panasonic.pm +27 -2
  139. package/bin/exiftool_files/lib/Image/ExifTool/PanasonicRaw.pm +4 -4
  140. package/bin/exiftool_files/lib/Image/ExifTool/Parrot.pm +1 -1
  141. package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +32 -11
  142. package/bin/exiftool_files/lib/Image/ExifTool/PhaseOne.pm +6 -6
  143. package/bin/exiftool_files/lib/Image/ExifTool/PhotoCD.pm +1 -1
  144. package/bin/exiftool_files/lib/Image/ExifTool/PhotoMechanic.pm +1 -1
  145. package/bin/exiftool_files/lib/Image/ExifTool/Photoshop.pm +4 -4
  146. package/bin/exiftool_files/lib/Image/ExifTool/PostScript.pm +3 -3
  147. package/bin/exiftool_files/lib/Image/ExifTool/PrintIM.pm +1 -1
  148. package/bin/exiftool_files/lib/Image/ExifTool/Qualcomm.pm +1 -1
  149. package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +55 -101
  150. package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +97 -7
  151. package/bin/exiftool_files/lib/Image/ExifTool/RIFF.pm +1 -1
  152. package/bin/exiftool_files/lib/Image/ExifTool/RSRC.pm +3 -3
  153. package/bin/exiftool_files/lib/Image/ExifTool/RTF.pm +1 -1
  154. package/bin/exiftool_files/lib/Image/ExifTool/Radiance.pm +1 -1
  155. package/bin/exiftool_files/lib/Image/ExifTool/Rawzor.pm +1 -1
  156. package/bin/exiftool_files/lib/Image/ExifTool/Real.pm +1 -1
  157. package/bin/exiftool_files/lib/Image/ExifTool/Reconyx.pm +1 -1
  158. package/bin/exiftool_files/lib/Image/ExifTool/Red.pm +1 -1
  159. package/bin/exiftool_files/lib/Image/ExifTool/Ricoh.pm +3 -3
  160. package/bin/exiftool_files/lib/Image/ExifTool/Samsung.pm +5 -5
  161. package/bin/exiftool_files/lib/Image/ExifTool/Sanyo.pm +1 -1
  162. package/bin/exiftool_files/lib/Image/ExifTool/Scalado.pm +1 -1
  163. package/bin/exiftool_files/lib/Image/ExifTool/Shift.pl +2 -3
  164. package/bin/exiftool_files/lib/Image/ExifTool/Shortcuts.pm +1 -1
  165. package/bin/exiftool_files/lib/Image/ExifTool/Sigma.pm +1 -1
  166. package/bin/exiftool_files/lib/Image/ExifTool/SigmaRaw.pm +4 -4
  167. package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +5 -5
  168. package/bin/exiftool_files/lib/Image/ExifTool/SonyIDC.pm +1 -1
  169. package/bin/exiftool_files/lib/Image/ExifTool/Stim.pm +1 -1
  170. package/bin/exiftool_files/lib/Image/ExifTool/TagInfoXML.pm +4 -4
  171. package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +3879 -3862
  172. package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +11439 -11374
  173. package/bin/exiftool_files/lib/Image/ExifTool/Text.pm +1 -1
  174. package/bin/exiftool_files/lib/Image/ExifTool/Theora.pm +1 -1
  175. package/bin/exiftool_files/lib/Image/ExifTool/Torrent.pm +1 -1
  176. package/bin/exiftool_files/lib/Image/ExifTool/Unknown.pm +1 -1
  177. package/bin/exiftool_files/lib/Image/ExifTool/VCard.pm +1 -1
  178. package/bin/exiftool_files/lib/Image/ExifTool/Validate.pm +1 -1
  179. package/bin/exiftool_files/lib/Image/ExifTool/Vorbis.pm +1 -1
  180. package/bin/exiftool_files/lib/Image/ExifTool/WPG.pm +1 -1
  181. package/bin/exiftool_files/lib/Image/ExifTool/WTV.pm +1 -1
  182. package/bin/exiftool_files/lib/Image/ExifTool/WriteCanonRaw.pl +2 -2
  183. package/bin/exiftool_files/lib/Image/ExifTool/WriteExif.pl +27 -24
  184. package/bin/exiftool_files/lib/Image/ExifTool/WriteIPTC.pl +1 -1
  185. package/bin/exiftool_files/lib/Image/ExifTool/WritePDF.pl +2 -2
  186. package/bin/exiftool_files/lib/Image/ExifTool/WritePNG.pl +1 -1
  187. package/bin/exiftool_files/lib/Image/ExifTool/WritePhotoshop.pl +1 -1
  188. package/bin/exiftool_files/lib/Image/ExifTool/WritePostScript.pl +1 -1
  189. package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +5 -2
  190. package/bin/exiftool_files/lib/Image/ExifTool/WriteRIFF.pl +1 -1
  191. package/bin/exiftool_files/lib/Image/ExifTool/WriteXMP.pl +9 -5
  192. package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +74 -45
  193. package/bin/exiftool_files/lib/Image/ExifTool/XISF.pm +1 -1
  194. package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +20 -3
  195. package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +10 -1
  196. package/bin/exiftool_files/lib/Image/ExifTool/XMPStruct.pl +1 -1
  197. package/bin/exiftool_files/lib/Image/ExifTool/ZIP.pm +7 -7
  198. package/bin/exiftool_files/lib/Image/ExifTool/ZISRAW.pm +1 -1
  199. package/bin/exiftool_files/lib/Image/ExifTool/iWork.pm +1 -1
  200. package/bin/exiftool_files/lib/Image/ExifTool.pm +59 -28
  201. package/bin/exiftool_files/lib/Image/ExifTool.pod +81 -68
  202. package/package.json +6 -6
@@ -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 = '2.91';
51
+ $VERSION = '2.93';
52
52
 
53
53
  sub ProcessMOV($$;$);
54
54
  sub ProcessKeys($$$);
@@ -64,6 +64,7 @@ sub Process_3gf($$$);
64
64
  sub Process_gps0($$$);
65
65
  sub Process_gsen($$$);
66
66
  sub ProcessKenwood($$$);
67
+ sub ProcessLIGO_JSON($$$);
67
68
  sub ProcessRIFFTrailer($$$);
68
69
  sub ProcessTTAD($$$);
69
70
  sub ProcessNMEA($$$);
@@ -267,6 +268,24 @@ my %timeInfo = (
267
268
  PrintConvInv => '$self->InverseDateTime($val)',
268
269
  # (can't put Groups here because they aren't constant!)
269
270
  );
271
+ # properties for ISO 8601 format date/time tags
272
+ my %iso8601Date = (
273
+ Shift => 'Time',
274
+ ValueConv => q{
275
+ require Image::ExifTool::XMP;
276
+ $val = Image::ExifTool::XMP::ConvertXMPDate($val);
277
+ $val =~ s/([-+]\d{2})(\d{2})$/$1:$2/; # add colon to timezone if necessary
278
+ return $val;
279
+ },
280
+ ValueConvInv => q{
281
+ require Image::ExifTool::XMP;
282
+ my $tmp = Image::ExifTool::XMP::FormatXMPDate($val);
283
+ ($val = $tmp) =~ s/([-+]\d{2}):(\d{2})$/$1$2/ if defined $tmp; # remove time zone colon
284
+ return $val;
285
+ },
286
+ PrintConv => '$self->ConvertDateTime($val)',
287
+ PrintConvInv => '$self->InverseDateTime($val,1)', # (add time zone if it didn't exist)
288
+ );
270
289
  # information for duration tags
271
290
  my %durationInfo = (
272
291
  ValueConv => '$$self{TimeScale} ? $val / $$self{TimeScale} : $val',
@@ -644,6 +663,7 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
644
663
  Deletable => 1,
645
664
  SubDirectory => {
646
665
  TagTable => 'Image::ExifTool::Jpeg2000::Main',
666
+ DirName => 'JUMBF',
647
667
  # 16 bytes uuid
648
668
  # +4 bytes 0
649
669
  # +9 bytes "manifest\0"
@@ -707,6 +727,13 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
707
727
  TagTable => 'Image::ExifTool::QuickTime::Stream',
708
728
  ProcessProc => \&ProcessKenwood,
709
729
  },
730
+ },{
731
+ Name => 'LIGO_JSON',
732
+ Condition => '$$valPt =~ /^LIGOGPSINFO \{/',
733
+ SubDirectory => {
734
+ TagTable => 'Image::ExifTool::QuickTime::Stream',
735
+ ProcessProc => \&ProcessLIGO_JSON,
736
+ },
710
737
  },{
711
738
  Name => 'FLIRData',
712
739
  SubDirectory => { TagTable => 'Image::ExifTool::FLIR::UserData' },
@@ -825,6 +852,7 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
825
852
  # note that this may be written and/or deleted, but can't currently be added back again
826
853
  Writable => 1,
827
854
  },
855
+ # '35AX'? - seen "AT" (Yada RoadCam Pro 4K dashcam)
828
856
  );
829
857
 
830
858
  # stuff seen in 'skip' atom (70mai Pro Plus+ MP4 videos)
@@ -1565,22 +1593,7 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
1565
1593
  "\xa9day" => {
1566
1594
  Name => 'ContentCreateDate',
1567
1595
  Groups => { 2 => 'Time' },
1568
- Shift => 'Time',
1569
- # handle values in the form "2010-02-12T13:27:14-0800" (written by Apple iPhone)
1570
- ValueConv => q{
1571
- require Image::ExifTool::XMP;
1572
- $val = Image::ExifTool::XMP::ConvertXMPDate($val);
1573
- $val =~ s/([-+]\d{2})(\d{2})$/$1:$2/; # add colon to timezone if necessary
1574
- return $val;
1575
- },
1576
- ValueConvInv => q{
1577
- require Image::ExifTool::XMP;
1578
- my $tmp = Image::ExifTool::XMP::FormatXMPDate($val);
1579
- ($val = $tmp) =~ s/([-+]\d{2}):(\d{2})$/$1$2/ if defined $tmp; # remove time zone colon
1580
- return $val;
1581
- },
1582
- PrintConv => '$self->ConvertDateTime($val)',
1583
- PrintConvInv => '$self->InverseDateTime($val,1)', # (add time zone if it didn't exist)
1596
+ %iso8601Date,
1584
1597
  },
1585
1598
  "\xa9ART" => 'Artist', #PH (iTunes 8.0.2)
1586
1599
  "\xa9alb" => 'Album', #PH (iTunes 8.0.2)
@@ -1864,21 +1877,7 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
1864
1877
  Apple Photos has been reported to show a crazy date/time for some MP4 files
1865
1878
  containing this tag, but perhaps only if it is missing a time zone
1866
1879
  }, #forum10690/11125
1867
- Shift => 'Time',
1868
- ValueConv => q{
1869
- require Image::ExifTool::XMP;
1870
- $val = Image::ExifTool::XMP::ConvertXMPDate($val);
1871
- $val =~ s/([-+]\d{2})(\d{2})$/$1:$2/; # add colon to timezone if necessary
1872
- return $val;
1873
- },
1874
- ValueConvInv => q{
1875
- require Image::ExifTool::XMP;
1876
- $val = Image::ExifTool::XMP::FormatXMPDate($val);
1877
- $val =~ s/([-+]\d{2}):(\d{2})$/$1$2/; # remove time zone colon
1878
- return $val;
1879
- },
1880
- PrintConv => '$self->ConvertDateTime($val)',
1881
- PrintConvInv => '$self->InverseDateTime($val,1)', # (add time zone if it didn't exist)
1880
+ %iso8601Date,
1882
1881
  },
1883
1882
  manu => { # (SX280)
1884
1883
  Name => 'Make',
@@ -2301,23 +2300,9 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
2301
2300
  symbol in these tag ID's for the Ricoh Theta Z1 and maybe other models
2302
2301
  },
2303
2302
  Groups => { 2 => 'Time' },
2304
- Shift => 'Time',
2305
2303
  Avoid => 1,
2306
2304
  # handle values in the form "2010-02-12T13:27:14-0800"
2307
- ValueConv => q{
2308
- require Image::ExifTool::XMP;
2309
- $val = Image::ExifTool::XMP::ConvertXMPDate($val);
2310
- $val =~ s/([-+]\d{2})(\d{2})$/$1:$2/; # add colon to timezone if necessary
2311
- return $val;
2312
- },
2313
- ValueConvInv => q{
2314
- require Image::ExifTool::XMP;
2315
- my $tmp = Image::ExifTool::XMP::FormatXMPDate($val);
2316
- ($val = $tmp) =~ s/([-+]\d{2}):(\d{2})$/$1$2/ if defined $tmp; # remove time zone colon
2317
- return $val;
2318
- },
2319
- PrintConv => '$self->ConvertDateTime($val)',
2320
- PrintConvInv => '$self->InverseDateTime($val,1)', # (add time zone if it didn't exist)
2305
+ %iso8601Date,
2321
2306
  },
2322
2307
  '@xyz' => { #PH (iPhone 3GS)
2323
2308
  Name => 'GPSCoordinates',
@@ -3330,22 +3315,7 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
3330
3315
  "\xa9day" => {
3331
3316
  Name => 'ContentCreateDate',
3332
3317
  Groups => { 2 => 'Time' },
3333
- Shift => 'Time',
3334
- # handle values in the form "2010-02-12T13:27:14-0800"
3335
- ValueConv => q{
3336
- require Image::ExifTool::XMP;
3337
- $val = Image::ExifTool::XMP::ConvertXMPDate($val);
3338
- $val =~ s/([-+]\d{2})(\d{2})$/$1:$2/; # add colon to timezone if necessary
3339
- return $val;
3340
- },
3341
- ValueConvInv => q{
3342
- require Image::ExifTool::XMP;
3343
- $val = Image::ExifTool::XMP::FormatXMPDate($val);
3344
- $val =~ s/([-+]\d{2}):(\d{2})$/$1$2/; # remove time zone colon
3345
- return $val;
3346
- },
3347
- PrintConv => '$self->ConvertDateTime($val)',
3348
- PrintConvInv => '$self->InverseDateTime($val,1)', # (add time zone if it didn't exist)
3318
+ %iso8601Date,
3349
3319
  },
3350
3320
  "\xa9des" => 'Description', #4
3351
3321
  "\xa9enc" => 'EncodedBy', #10
@@ -6394,12 +6364,10 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
6394
6364
  ValueConvInv => '$val * 1000',
6395
6365
  PrintConv => 'ConvertDuration($val)',
6396
6366
  PrintConvInv => q{
6397
- $val =~ s/ s$//;
6398
- my @a = split /(:| days )/, $val;
6399
- my $sign = ($val =~ s/^-//) ? -1 : 1;
6400
- $a[0] += shift(@a) * 24 if @a == 4;
6401
- $a[0] += shift(@a) * 60 while @a > 1;
6402
- return $a[0] * $sign;
6367
+ my $sign = ($val =~ s/^-//) ? -1 : 1;
6368
+ my @a = $val =~ /(\d+(?:\.\d+)?)/g;
6369
+ unshift @a, 0 while @a < 4;
6370
+ return $sign * (((($a[0] * 24) + $a[1]) * 60 + $a[2]) * 60 + $a[3]);
6403
6371
  },
6404
6372
  },
6405
6373
 
@@ -6513,21 +6481,7 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
6513
6481
  creationdate=> {
6514
6482
  Name => 'CreationDate',
6515
6483
  Groups => { 2 => 'Time' },
6516
- Shift => 'Time',
6517
- ValueConv => q{
6518
- require Image::ExifTool::XMP;
6519
- $val = Image::ExifTool::XMP::ConvertXMPDate($val,1);
6520
- $val =~ s/([-+]\d{2})(\d{2})$/$1:$2/; # add colon to timezone if necessary
6521
- return $val;
6522
- },
6523
- ValueConvInv => q{
6524
- require Image::ExifTool::XMP;
6525
- $val = Image::ExifTool::XMP::FormatXMPDate($val);
6526
- $val =~ s/([-+]\d{2}):(\d{2})$/$1$2/; # remove time zone colon
6527
- return $val;
6528
- },
6529
- PrintConv => '$self->ConvertDateTime($val)',
6530
- PrintConvInv => '$self->InverseDateTime($val,1)', # (add time zone if it didn't exist)
6484
+ %iso8601Date,
6531
6485
  },
6532
6486
  description => { },
6533
6487
  director => { },
@@ -6577,21 +6531,7 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
6577
6531
  'location.date' => {
6578
6532
  Name => 'LocationDate',
6579
6533
  Groups => { 2 => 'Time' },
6580
- Shift => 'Time',
6581
- ValueConv => q{
6582
- require Image::ExifTool::XMP;
6583
- $val = Image::ExifTool::XMP::ConvertXMPDate($val);
6584
- $val =~ s/([-+]\d{2})(\d{2})$/$1:$2/; # add colon to timezone if necessary
6585
- return $val;
6586
- },
6587
- ValueConvInv => q{
6588
- require Image::ExifTool::XMP;
6589
- $val = Image::ExifTool::XMP::FormatXMPDate($val);
6590
- $val =~ s/([-+]\d{2}):(\d{2})$/$1$2/; # remove time zone colon
6591
- return $val;
6592
- },
6593
- PrintConv => '$self->ConvertDateTime($val)',
6594
- PrintConvInv => '$self->InverseDateTime($val,1)', # (add time zone if it didn't exist)
6534
+ %iso8601Date,
6595
6535
  },
6596
6536
  'location.accuracy.horizontal' => { Name => 'LocationAccuracyHorizontal' },
6597
6537
  'live-photo.auto' => { Name => 'LivePhotoAuto', Writable => 'int8u' },
@@ -6684,6 +6624,16 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
6684
6624
  'detected-face.roll-angle' => { Name => 'DetectedFaceRollAngle', Writable => 0 },
6685
6625
  # (fiel)com.apple.quicktime.detected-face.yaw-angle (dtyp=23, float)
6686
6626
  'detected-face.yaw-angle' => { Name => 'DetectedFaceYawAngle', Writable => 0 },
6627
+ # the following tags generated by ShutterEncoder when "preserve metadata" is selected (forum15610)
6628
+ major_brand => { Name => 'MajorBrand', Avoid => 1 },
6629
+ minor_version => { Name => 'MinorVersion', Avoid => 1 },
6630
+ compatible_brands => { Name => 'CompatibleBrands', Avoid => 1 },
6631
+ creation_time => {
6632
+ Name => 'CreationTime',
6633
+ Groups => { 2 => 'Time' },
6634
+ Avoid => 1,
6635
+ %iso8601Date,
6636
+ },
6687
6637
  #
6688
6638
  # seen in Apple ProRes RAW file
6689
6639
  #
@@ -7315,6 +7265,10 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
7315
7265
  Name => 'SpatialAudio',
7316
7266
  SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::SpatialAudio' },
7317
7267
  },
7268
+ btrt => {
7269
+ Name => 'BitrateInfo',
7270
+ SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Bitrate' },
7271
+ },
7318
7272
  # alac - 28 bytes
7319
7273
  # adrm - AAX DRM atom? 148 bytes
7320
7274
  # aabd - AAX unknown 17kB (contains 'aavd' strings)
@@ -9353,7 +9307,7 @@ sub ProcessMOV($$;$)
9353
9307
  }
9354
9308
  # more convenient to package data as a RandomAccess file
9355
9309
  unless ($raf) {
9356
- $raf = new File::RandomAccess($dataPt);
9310
+ $raf = File::RandomAccess->new($dataPt);
9357
9311
  $dirEnd = $dataPos + $$dirInfo{DirLen} + ($$dirInfo{DirStart} || 0) if $$dirInfo{DirLen};
9358
9312
  }
9359
9313
  # skip leading bytes if necessary
@@ -10009,7 +9963,7 @@ information from QuickTime and MP4 video, M4A audio, and HEIC image files.
10009
9963
 
10010
9964
  =head1 AUTHOR
10011
9965
 
10012
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
9966
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
10013
9967
 
10014
9968
  This library is free software; you can redistribute it and/or modify it
10015
9969
  under the same terms as Perl itself.
@@ -109,11 +109,13 @@ my %insvLimit = (
109
109
  The tags below are extracted from timed metadata in QuickTime and other
110
110
  formats of video files when the ExtractEmbedded option is used. Although
111
111
  most of these tags are combined into the single table below, ExifTool
112
- currently reads 67 different formats of timed GPS metadata from video files.
112
+ currently reads 68 different formats of timed GPS metadata from video files.
113
113
  },
114
114
  VARS => { NO_ID => 1 },
115
115
  GPSLatitude => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")', RawConv => '$$self{FoundGPSLatitude} = 1; $val' },
116
116
  GPSLongitude => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")' },
117
+ GPSLatitude2 => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")' },
118
+ GPSLongitude2=> { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")' },
117
119
  GPSAltitude => { PrintConv => '(sprintf("%.4f", $val) + 0) . " m"' }, # round to 4 decimals
118
120
  GPSSpeed => { PrintConv => 'sprintf("%.4f", $val) + 0', Notes => 'in km/h unless GPSSpeedRef says otherwise' },
119
121
  GPSSpeedRef => { PrintConv => { K => 'km/h', M => 'mph', N => 'knots' } },
@@ -125,6 +127,11 @@ my %insvLimit = (
125
127
  RawConv => '$$self{FoundGPSDateTime} = 1; $val',
126
128
  PrintConv => '$self->ConvertDateTime($val)',
127
129
  },
130
+ DateTimeOriginal => {
131
+ Groups => { 2 => 'Time' },
132
+ Description => 'Date/Time Original',
133
+ PrintConv => '$self->ConvertDateTime($val)',
134
+ },
128
135
  GPSTimeStamp => { PrintConv => 'Image::ExifTool::GPS::PrintTimeStamp($val)', Groups => { 2 => 'Time' } },
129
136
  GPSSatellites=> { },
130
137
  GPSDOP => { Description => 'GPS Dilution Of Precision' },
@@ -841,11 +848,11 @@ sub FoundSomething($$;$$)
841
848
  #------------------------------------------------------------------------------
842
849
  # Approximate GPSDateTime value from sample time and CreateDate
843
850
  # Inputs: 0) ExifTool ref, 1) tag table ptr, 2) sample time (s)
844
- # 3) true if CreateDate is at end of video
851
+ # 3) true if CreateDate is at end of video, 4) flag if CreateDate is UTC
845
852
  # Notes: Uses ExifTool CreateDateAtEnd as flag to subtract video duration
846
- sub SetGPSDateTime($$$)
853
+ sub SetGPSDateTime($$$;$)
847
854
  {
848
- my ($et, $tagTbl, $sampleTime) = @_;
855
+ my ($et, $tagTbl, $sampleTime, $isUTC) = @_;
849
856
  my $value = $$et{VALUE};
850
857
  if (defined $sampleTime and $$value{CreateDate}) {
851
858
  $sampleTime += $$value{CreateDate}; # adjust sample time to seconds since the epoch
@@ -856,7 +863,9 @@ sub SetGPSDateTime($$$)
856
863
  } else {
857
864
  $et->WarnOnce('Approximating GPSDateTime as CreateDate + SampleTime', 1);
858
865
  }
859
- unless ($et->Options('QuickTimeUTC')) {
866
+ my $utc = $et->Options('QuickTimeUTC');
867
+ $utc = $isUTC unless defined $utc; # (allow QuickTimeUTC=0 to override $isUTC default)
868
+ unless ($utc) {
860
869
  my $tzOff = $$et{tzOff}; # use previously calculated offset
861
870
  unless (defined $tzOff) {
862
871
  # adjust to UTC, assuming time is local
@@ -1337,7 +1346,7 @@ Sample: for ($i=0; ; ) {
1337
1346
  $et->HandleTag($tagTbl, GPSLatitude => Get32s(\$buff, 12+$n) * 180/0x80000000);
1338
1347
  $et->HandleTag($tagTbl, GPSLongitude => Get32s(\$buff, 16+$n) * 180/0x80000000);
1339
1348
  $et->HandleTag($tagTbl, GPSSpeed => Get16u(\$buff, 8+$n) * $mphToKph);
1340
- SetGPSDateTime($et, $tagTbl, $time[$i]);
1349
+ SetGPSDateTime($et, $tagTbl, $time[$i], 1);
1341
1350
  next; # all done (don't store/process as text)
1342
1351
  }
1343
1352
  unless (defined $val) {
@@ -2426,6 +2435,83 @@ sub Process_gsen($$$)
2426
2435
  return 1;
2427
2436
  }
2428
2437
 
2438
+ #------------------------------------------------------------------------------
2439
+ # Process LIGOGPS JSON-format GPS from Yada RoadCam Pro 4K BT58189
2440
+ # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
2441
+ # Returns: 1 on success
2442
+ # Sample data (chained 512-byte records starting like this):
2443
+ # 0000: 4c 49 47 4f 47 50 53 49 4e 46 4f 20 7b 22 48 6f [LIGOGPSINFO {"Ho]
2444
+ # 0010: 75 72 22 3a 20 22 32 33 22 2c 20 22 4d 69 6e 75 [ur": "23", "Minu]
2445
+ # 0020: 74 65 22 3a 20 22 31 30 22 2c 20 22 53 65 63 6f [te": "10", "Seco]
2446
+ # 0030: 6e 64 22 3a 20 22 32 32 22 2c 20 22 59 65 61 72 [nd": "22", "Year]
2447
+ # 0040: 22 3a 20 22 32 30 32 33 22 2c 20 22 4d 6f 6e 74 [": "2023", "Mont]
2448
+ # 0050: 68 22 3a 20 22 31 32 22 2c 20 22 44 61 79 22 3a [h": "12", "Day":]
2449
+ # 0060: 20 22 32 38 22 2c 20 22 73 74 61 74 75 73 22 3a [ "28", "status":]
2450
+ sub ProcessLIGO_JSON($$$)
2451
+ {
2452
+ my ($et, $dirInfo, $tagTbl) = @_;
2453
+ my $dataPt = $$dirInfo{DataPt};
2454
+ my $dirLen = $$dirInfo{DirLen};
2455
+ require Image::ExifTool::Import;
2456
+ $et->VerboseDir('LIGO_JSON', undef, length($$dataPt));
2457
+ while ($$dataPt =~ /LIGOGPSINFO (\{.*?\})/g) {
2458
+ my $json = $1;
2459
+ my $raf = File::RandomAccess->new(\$json);
2460
+ my %dbase;
2461
+ Image::ExifTool::Import::ReadJSON($raf, \%dbase);
2462
+ my $info = $dbase{'*'} or next;
2463
+ # my sample contains the following JSON fields (in this order):
2464
+ # Hour Minute Second Year Month Day (GPS UTC time)
2465
+ # status NS EW Latitude Longitude Speed (speed in knots)
2466
+ # GsensorX GsensorY GsensorZ (units? - only seen "000" for all)
2467
+ # MHour MMinute MSecond MYear MMonth MDay (local dashcam clock time)
2468
+ # OLatitude OLongitude (? same values as Latitude/Longitude)
2469
+ next unless defined $$info{status} and $$info{status} eq 'A'; # only read if GPS is active
2470
+ $$et{DOC_NUM} = ++$$et{DOC_COUNT};
2471
+ my $num = 0;
2472
+ defined $$info{$_} and ++$num foreach qw(Year Month Day Hour Minute Second);
2473
+ if ($num == 6) {
2474
+ # this is the GPS time in UTC
2475
+ my $time = sprintf('%.4d:%.2d:%.2d %.2d:%.2d:%.2dZ',@$info{qw{Year Month Day Hour Minute Second}});
2476
+ $et->HandleTag($tagTbl, GPSDateTime => $time);
2477
+ }
2478
+ if ($$info{Latitude} and $$info{Longitude}) {
2479
+ my $lat = $$info{Latitude};
2480
+ $lat = -$lat if $$info{NS} and $$info{NS} eq 'S';
2481
+ my $lon = $$info{Longitude};
2482
+ $lon = -$lon if $$info{EW} and $$info{EW} eq 'W';
2483
+ $et->HandleTag($tagTbl, GPSLatitude => $lat);
2484
+ $et->HandleTag($tagTbl, GPSLongitude => $lon);
2485
+ }
2486
+ $et->HandleTag($tagTbl, GPSSpeed => $$info{Speed} * $knotsToKph) if defined $$info{Speed};
2487
+ if (defined $$info{GsensorX} and defined $$info{GsensorY} and defined $$info{GsensorZ}) {
2488
+ # (don't know conversion factor for accel data, so leave it raw for now)
2489
+ $et->HandleTag($tagTbl, Accelerometer => "$$info{GsensorX} $$info{GsensorY} $$info{GsensorZ}");
2490
+ }
2491
+ $num = 0;
2492
+ defined $$info{$_} and ++$num foreach qw(MYear MMonth MDay MHour MMinute MSecond);
2493
+ if ($num == 6) {
2494
+ # this is the dashcam clock time (local time zone)
2495
+ my $time = sprintf('%.4d:%.2d:%.2d %.2d:%.2d:%.2d',@$info{qw{MYear MMonth MDay MHour MMinute MSecond}});
2496
+ $et->HandleTag($tagTbl, DateTimeOriginal => $time);
2497
+ }
2498
+ if (defined $$info{OLatitude} and defined $$info{OLongitude}) {
2499
+ my $lat = $$info{OLatitude};
2500
+ $lat = -$lat if $$info{NS} and $$info{NS} eq 'S';
2501
+ my $lon = $$info{OLongitude};
2502
+ $lon = -$lon if $$info{EW} and $$info{EW} eq 'W';
2503
+ $et->HandleTag($tagTbl, GPSLatitude2 => $lat);
2504
+ $et->HandleTag($tagTbl, GPSLongitude2 => $lon);
2505
+ }
2506
+ unless ($et->Options('ExtractEmbedded')) {
2507
+ $et->WarnOnce('Use the ExtractEmbedded option to extract all timed GPS',3);
2508
+ last;
2509
+ }
2510
+ }
2511
+ delete $$et{DOC_NUM};
2512
+ return 1;
2513
+ }
2514
+
2429
2515
  #------------------------------------------------------------------------------
2430
2516
  # Process Kenwood drv-a301w dashcam 'udta' atom (ref PH)
2431
2517
  # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
@@ -2464,6 +2550,10 @@ sub ProcessKenwood($$$)
2464
2550
  push @acc, $1/1000, $2/1000, $3/1000;
2465
2551
  }
2466
2552
  $et->HandleTag($tagTbl, Accelerometer => "@acc") if @acc;
2553
+ unless ($et->Options('ExtractEmbedded')) {
2554
+ $et->WarnOnce('Use the ExtractEmbedded option to extract all timed GPS',3);
2555
+ last;
2556
+ }
2467
2557
  }
2468
2558
  delete $$et{DOC_NUM};
2469
2559
  return 1;
@@ -3221,7 +3311,7 @@ information like GPS tracks from MOV, MP4 and INSV media data.
3221
3311
 
3222
3312
  =head1 AUTHOR
3223
3313
 
3224
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
3314
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
3225
3315
 
3226
3316
  This library is free software; you can redistribute it and/or modify it
3227
3317
  under the same terms as Perl itself.
@@ -2199,7 +2199,7 @@ including AVI videos, WAV audio files and WEBP images.
2199
2199
 
2200
2200
  =head1 AUTHOR
2201
2201
 
2202
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
2202
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
2203
2203
 
2204
2204
  This library is free software; you can redistribute it and/or modify it
2205
2205
  under the same terms as Perl itself.
@@ -14,7 +14,7 @@ use strict;
14
14
  use vars qw($VERSION);
15
15
  use Image::ExifTool qw(:DataAccess :Utils);
16
16
 
17
- $VERSION = '1.09';
17
+ $VERSION = '1.10';
18
18
 
19
19
  sub ProcessRSRC($$);
20
20
 
@@ -70,7 +70,7 @@ sub ProcessRSRC($$)
70
70
  my ($hdr, $map, $buff, $i, $j);
71
71
 
72
72
  # allow access with data reference
73
- $raf or $raf = new File::RandomAccess($$dirInfo{DataPt});
73
+ $raf or $raf = File::RandomAccess->new($$dirInfo{DataPt});
74
74
 
75
75
  # attempt to validate the format as thoroughly as practical
76
76
  return 0 unless $raf->Read($hdr, 30) == 30;
@@ -225,7 +225,7 @@ resource files.
225
225
 
226
226
  =head1 AUTHOR
227
227
 
228
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
228
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
229
229
 
230
230
  This library is free software; you can redistribute it and/or modify it
231
231
  under the same terms as Perl itself.
@@ -366,7 +366,7 @@ information from RTF (Rich Text Format) documents.
366
366
 
367
367
  =head1 AUTHOR
368
368
 
369
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
369
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
370
370
 
371
371
  This library is free software; you can redistribute it and/or modify it
372
372
  under the same terms as Perl itself.
@@ -125,7 +125,7 @@ images are a type of high dynamic-range image.
125
125
 
126
126
  =head1 AUTHOR
127
127
 
128
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
128
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
129
129
 
130
130
  This library is free software; you can redistribute it and/or modify it
131
131
  under the same terms as Perl itself.
@@ -168,7 +168,7 @@ information from Rawzor compressed images.
168
168
 
169
169
  =head1 AUTHOR
170
170
 
171
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
171
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
172
172
 
173
173
  This library is free software; you can redistribute it and/or modify it
174
174
  under the same terms as Perl itself.
@@ -715,7 +715,7 @@ little-endian, but the Real format is big-endian.
715
715
 
716
716
  =head1 AUTHOR
717
717
 
718
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
718
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
719
719
 
720
720
  This library is free software; you can redistribute it and/or modify it
721
721
  under the same terms as Perl itself.
@@ -431,7 +431,7 @@ maker notes in images from Reconyx cameras.
431
431
 
432
432
  =head1 AUTHOR
433
433
 
434
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
434
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
435
435
 
436
436
  This library is free software; you can redistribute it and/or modify it
437
437
  under the same terms as Perl itself.
@@ -303,7 +303,7 @@ from Redcode R3D version 1 and 2 video files.
303
303
 
304
304
  =head1 AUTHOR
305
305
 
306
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
306
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
307
307
 
308
308
  This library is free software; you can redistribute it and/or modify it
309
309
  under the same terms as Perl itself.
@@ -21,7 +21,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
21
21
  use Image::ExifTool::Exif;
22
22
  use Image::ExifTool::GPS;
23
23
 
24
- $VERSION = '1.37';
24
+ $VERSION = '1.38';
25
25
 
26
26
  sub ProcessRicohText($$$);
27
27
  sub ProcessRicohRMETA($$$);
@@ -1078,7 +1078,7 @@ sub ProcessRicohText($$$)
1078
1078
  $tagInfo = {
1079
1079
  Name => "Ricoh_Text_$tag",
1080
1080
  Unknown => 1,
1081
- PrintConv => 'length($val) > 60 ? substr($val,0,55) . "[...]" : $val',
1081
+ PrintConv => \&Image::ExifTool::LimitLongValues,
1082
1082
  };
1083
1083
  # add tag information to table
1084
1084
  AddTagToTable($tagTablePtr, $tag, $tagInfo);
@@ -1252,7 +1252,7 @@ interpret Ricoh maker notes EXIF meta information.
1252
1252
 
1253
1253
  =head1 AUTHOR
1254
1254
 
1255
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
1255
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
1256
1256
 
1257
1257
  This library is free software; you can redistribute it and/or modify it
1258
1258
  under the same terms as Perl itself.
@@ -22,7 +22,7 @@ use vars qw($VERSION %samsungLensTypes);
22
22
  use Image::ExifTool qw(:DataAccess :Utils);
23
23
  use Image::ExifTool::Exif;
24
24
 
25
- $VERSION = '1.55';
25
+ $VERSION = '1.56';
26
26
 
27
27
  sub WriteSTMN($$$);
28
28
  sub ProcessINFO($$$);
@@ -1546,7 +1546,7 @@ sub ProcessSamsung($$$)
1546
1546
  my ($buff, $buf2, $index, $offsetPos, $audioNOff, $audioSize);
1547
1547
 
1548
1548
  unless ($raf) {
1549
- $raf = new File::RandomAccess($$dirInfo{DataPt});
1549
+ $raf = File::RandomAccess->new($$dirInfo{DataPt});
1550
1550
  $et->VerboseDir('SamsungTrailer');
1551
1551
  }
1552
1552
  return 0 unless $raf->Seek(-6-$offset, 2) and $raf->Read($buff, 6) == 6 and
@@ -1675,7 +1675,7 @@ SamBlock:
1675
1675
  # add a fixup so the calling routine can apply further shifts if necessary
1676
1676
  require Image::ExifTool::Fixup;
1677
1677
  my $fixup = $$dirInfo{Fixup};
1678
- $fixup or $fixup = $$dirInfo{Fixup} = new Image::ExifTool::Fixup;
1678
+ $fixup or $fixup = $$dirInfo{Fixup} = Image::ExifTool::Fixup->new;
1679
1679
  $fixup->AddFixup(length($buff) - $offsetPos);
1680
1680
  $fixup->AddFixup(length($buff) - $offsetPos + 4);
1681
1681
  }
@@ -1697,7 +1697,7 @@ sub WriteSTMN($$$)
1697
1697
  {
1698
1698
  my ($et, $dirInfo, $tagTablePtr) = @_;
1699
1699
  # create a Fixup for the PreviewImage
1700
- $$dirInfo{Fixup} = new Image::ExifTool::Fixup;
1700
+ $$dirInfo{Fixup} = Image::ExifTool::Fixup->new;
1701
1701
  my $val = Image::ExifTool::WriteBinaryData($et, $dirInfo, $tagTablePtr);
1702
1702
  # force PreviewImage into the trailer even if it fits in EXIF segment
1703
1703
  $$et{PREVIEW_INFO}{IsTrailer} = 1 if $$et{PREVIEW_INFO};
@@ -1723,7 +1723,7 @@ Samsung maker notes in EXIF information.
1723
1723
 
1724
1724
  =head1 AUTHOR
1725
1725
 
1726
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
1726
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
1727
1727
 
1728
1728
  This library is free software; you can redistribute it and/or modify it
1729
1729
  under the same terms as Perl itself.
@@ -419,7 +419,7 @@ Sanyo maker notes in EXIF information.
419
419
 
420
420
  =head1 AUTHOR
421
421
 
422
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
422
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
423
423
 
424
424
  This library is free software; you can redistribute it and/or modify it
425
425
  under the same terms as Perl itself.
@@ -128,7 +128,7 @@ metadata from the JPEG APP4 SCALADO segment.
128
128
 
129
129
  =head1 AUTHOR
130
130
 
131
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
131
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
132
132
 
133
133
  This library is free software; you can redistribute it and/or modify it
134
134
  under the same terms as Perl itself.
@@ -361,7 +361,7 @@ sub ShiftTime($;$$$)
361
361
  };
362
362
  # not a problem if we failed here since we'll just try again next time,
363
363
  # so don't return error message
364
- unless (@$) {
364
+ unless ($@) {
365
365
  my $mode;
366
366
  if (defined $time[0]) {
367
367
  $mode = defined $time[3] ? 'DateTime' : 'Date';
@@ -403,7 +403,6 @@ sub ShiftTime($;$$$)
403
403
  };
404
404
  $@ and return CleanWarning($@);
405
405
  $tm += $$shiftOffset{$mode}; # apply the shift
406
- $tm < 0 and return 'Shift results in negative time';
407
406
  # save fractional seconds in shifted time
408
407
  $frac = $tm - int($tm);
409
408
  if ($frac) {
@@ -632,7 +631,7 @@ limited to the range 1970 to 2038 on 32-bit systems.
632
631
 
633
632
  =head1 AUTHOR
634
633
 
635
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
634
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
636
635
 
637
636
  This library is free software; you can redistribute it and/or modify it
638
637
  under the same terms as Perl itself.
@@ -344,7 +344,7 @@ name prefix.
344
344
 
345
345
  =head1 AUTHOR
346
346
 
347
- Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
347
+ Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
348
348
 
349
349
  This library is free software; you can redistribute it and/or modify it
350
350
  under the same terms as Perl itself.