exiftool_vendored 12.09.0 → 12.14.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of exiftool_vendored might be problematic. Click here for more details.

Files changed (194) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +76 -5
  3. data/bin/MANIFEST +3 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +3 -3
  7. data/bin/exiftool +156 -64
  8. data/bin/lib/File/RandomAccess.pm +1 -1
  9. data/bin/lib/File/RandomAccess.pod +2 -2
  10. data/bin/lib/Image/ExifTool.pm +18 -10
  11. data/bin/lib/Image/ExifTool.pod +14 -10
  12. data/bin/lib/Image/ExifTool/AES.pm +1 -1
  13. data/bin/lib/Image/ExifTool/AFCP.pm +1 -1
  14. data/bin/lib/Image/ExifTool/AIFF.pm +1 -1
  15. data/bin/lib/Image/ExifTool/APE.pm +1 -1
  16. data/bin/lib/Image/ExifTool/APP12.pm +1 -1
  17. data/bin/lib/Image/ExifTool/ASF.pm +1 -1
  18. data/bin/lib/Image/ExifTool/Apple.pm +1 -1
  19. data/bin/lib/Image/ExifTool/Audible.pm +1 -1
  20. data/bin/lib/Image/ExifTool/BMP.pm +1 -1
  21. data/bin/lib/Image/ExifTool/BPG.pm +1 -1
  22. data/bin/lib/Image/ExifTool/BZZ.pm +1 -1
  23. data/bin/lib/Image/ExifTool/BigTIFF.pm +1 -1
  24. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +10 -4
  25. data/bin/lib/Image/ExifTool/Canon.pm +20 -15
  26. data/bin/lib/Image/ExifTool/CanonCustom.pm +1 -1
  27. data/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
  28. data/bin/lib/Image/ExifTool/CanonVRD.pm +1 -1
  29. data/bin/lib/Image/ExifTool/CaptureOne.pm +1 -1
  30. data/bin/lib/Image/ExifTool/Casio.pm +1 -1
  31. data/bin/lib/Image/ExifTool/Charset.pm +1 -1
  32. data/bin/lib/Image/ExifTool/DICOM.pm +1 -1
  33. data/bin/lib/Image/ExifTool/DJI.pm +1 -1
  34. data/bin/lib/Image/ExifTool/DNG.pm +1 -1
  35. data/bin/lib/Image/ExifTool/DPX.pm +1 -1
  36. data/bin/lib/Image/ExifTool/DV.pm +1 -1
  37. data/bin/lib/Image/ExifTool/DarwinCore.pm +1 -1
  38. data/bin/lib/Image/ExifTool/DjVu.pm +1 -1
  39. data/bin/lib/Image/ExifTool/EXE.pm +1 -1
  40. data/bin/lib/Image/ExifTool/Exif.pm +14 -1
  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/GPS.pm +1 -1
  55. data/bin/lib/Image/ExifTool/GeoTiff.pm +1 -1
  56. data/bin/lib/Image/ExifTool/Geotag.pm +30 -11
  57. data/bin/lib/Image/ExifTool/GoPro.pm +1 -1
  58. data/bin/lib/Image/ExifTool/H264.pm +1 -1
  59. data/bin/lib/Image/ExifTool/HP.pm +1 -1
  60. data/bin/lib/Image/ExifTool/HTML.pm +1 -1
  61. data/bin/lib/Image/ExifTool/HtmlDump.pm +1 -1
  62. data/bin/lib/Image/ExifTool/ICC_Profile.pm +1 -1
  63. data/bin/lib/Image/ExifTool/ID3.pm +1 -1
  64. data/bin/lib/Image/ExifTool/IPTC.pm +1 -1
  65. data/bin/lib/Image/ExifTool/ISO.pm +1 -1
  66. data/bin/lib/Image/ExifTool/ITC.pm +1 -1
  67. data/bin/lib/Image/ExifTool/Import.pm +15 -12
  68. data/bin/lib/Image/ExifTool/InDesign.pm +1 -1
  69. data/bin/lib/Image/ExifTool/JPEG.pm +1 -1
  70. data/bin/lib/Image/ExifTool/JPEGDigest.pm +1 -1
  71. data/bin/lib/Image/ExifTool/JSON.pm +1 -1
  72. data/bin/lib/Image/ExifTool/JVC.pm +1 -1
  73. data/bin/lib/Image/ExifTool/Jpeg2000.pm +9 -4
  74. data/bin/lib/Image/ExifTool/Kodak.pm +1 -1
  75. data/bin/lib/Image/ExifTool/KyoceraRaw.pm +1 -1
  76. data/bin/lib/Image/ExifTool/LNK.pm +1 -1
  77. data/bin/lib/Image/ExifTool/Lang/cs.pm +1 -1
  78. data/bin/lib/Image/ExifTool/Lang/de.pm +1 -1
  79. data/bin/lib/Image/ExifTool/Lang/en_ca.pm +1 -1
  80. data/bin/lib/Image/ExifTool/Lang/en_gb.pm +1 -1
  81. data/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
  82. data/bin/lib/Image/ExifTool/Lang/fi.pm +1 -1
  83. data/bin/lib/Image/ExifTool/Lang/fr.pm +1 -1
  84. data/bin/lib/Image/ExifTool/Lang/it.pm +1 -1
  85. data/bin/lib/Image/ExifTool/Lang/ja.pm +1 -1
  86. data/bin/lib/Image/ExifTool/Lang/ko.pm +1 -1
  87. data/bin/lib/Image/ExifTool/Lang/nl.pm +1 -1
  88. data/bin/lib/Image/ExifTool/Lang/pl.pm +1 -1
  89. data/bin/lib/Image/ExifTool/Lang/ru.pm +1 -1
  90. data/bin/lib/Image/ExifTool/Lang/sv.pm +1 -1
  91. data/bin/lib/Image/ExifTool/Lang/tr.pm +1 -1
  92. data/bin/lib/Image/ExifTool/Lang/zh_cn.pm +1 -1
  93. data/bin/lib/Image/ExifTool/Lang/zh_tw.pm +1 -1
  94. data/bin/lib/Image/ExifTool/Leaf.pm +1 -1
  95. data/bin/lib/Image/ExifTool/Lytro.pm +1 -1
  96. data/bin/lib/Image/ExifTool/M2TS.pm +1 -1
  97. data/bin/lib/Image/ExifTool/MIE.pm +1 -1
  98. data/bin/lib/Image/ExifTool/MIEUnits.pod +1 -1
  99. data/bin/lib/Image/ExifTool/MIFF.pm +1 -1
  100. data/bin/lib/Image/ExifTool/MNG.pm +1 -1
  101. data/bin/lib/Image/ExifTool/MOI.pm +1 -1
  102. data/bin/lib/Image/ExifTool/MPC.pm +1 -1
  103. data/bin/lib/Image/ExifTool/MPEG.pm +1 -1
  104. data/bin/lib/Image/ExifTool/MPF.pm +3 -3
  105. data/bin/lib/Image/ExifTool/MWG.pm +1 -1
  106. data/bin/lib/Image/ExifTool/MXF.pm +1 -1
  107. data/bin/lib/Image/ExifTool/MacOS.pm +4 -2
  108. data/bin/lib/Image/ExifTool/MakerNotes.pm +1 -1
  109. data/bin/lib/Image/ExifTool/Matroska.pm +1 -1
  110. data/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
  111. data/bin/lib/Image/ExifTool/Minolta.pm +1 -1
  112. data/bin/lib/Image/ExifTool/MinoltaRaw.pm +1 -1
  113. data/bin/lib/Image/ExifTool/Motorola.pm +1 -1
  114. data/bin/lib/Image/ExifTool/Nikon.pm +7 -5
  115. data/bin/lib/Image/ExifTool/NikonCapture.pm +1 -1
  116. data/bin/lib/Image/ExifTool/NikonCustom.pm +1 -1
  117. data/bin/lib/Image/ExifTool/Nintendo.pm +1 -1
  118. data/bin/lib/Image/ExifTool/OOXML.pm +1 -1
  119. data/bin/lib/Image/ExifTool/Ogg.pm +1 -1
  120. data/bin/lib/Image/ExifTool/Olympus.pm +4 -2
  121. data/bin/lib/Image/ExifTool/OpenEXR.pm +1 -1
  122. data/bin/lib/Image/ExifTool/Opus.pm +1 -1
  123. data/bin/lib/Image/ExifTool/PCX.pm +1 -1
  124. data/bin/lib/Image/ExifTool/PDF.pm +10 -2
  125. data/bin/lib/Image/ExifTool/PGF.pm +1 -1
  126. data/bin/lib/Image/ExifTool/PICT.pm +1 -1
  127. data/bin/lib/Image/ExifTool/PLIST.pm +1 -1
  128. data/bin/lib/Image/ExifTool/PLUS.pm +1 -1
  129. data/bin/lib/Image/ExifTool/PNG.pm +1 -1
  130. data/bin/lib/Image/ExifTool/PPM.pm +1 -1
  131. data/bin/lib/Image/ExifTool/PSP.pm +1 -1
  132. data/bin/lib/Image/ExifTool/Palm.pm +1 -1
  133. data/bin/lib/Image/ExifTool/Panasonic.pm +1 -1
  134. data/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -1
  135. data/bin/lib/Image/ExifTool/Parrot.pm +1 -1
  136. data/bin/lib/Image/ExifTool/Pentax.pm +12 -4
  137. data/bin/lib/Image/ExifTool/PhaseOne.pm +1 -1
  138. data/bin/lib/Image/ExifTool/PhotoCD.pm +1 -1
  139. data/bin/lib/Image/ExifTool/PhotoMechanic.pm +1 -1
  140. data/bin/lib/Image/ExifTool/Photoshop.pm +1 -1
  141. data/bin/lib/Image/ExifTool/PostScript.pm +1 -1
  142. data/bin/lib/Image/ExifTool/PrintIM.pm +1 -1
  143. data/bin/lib/Image/ExifTool/Qualcomm.pm +1 -1
  144. data/bin/lib/Image/ExifTool/QuickTime.pm +28 -18
  145. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +24 -3
  146. data/bin/lib/Image/ExifTool/RIFF.pm +82 -5
  147. data/bin/lib/Image/ExifTool/RSRC.pm +1 -1
  148. data/bin/lib/Image/ExifTool/RTF.pm +1 -1
  149. data/bin/lib/Image/ExifTool/Radiance.pm +1 -1
  150. data/bin/lib/Image/ExifTool/Rawzor.pm +1 -1
  151. data/bin/lib/Image/ExifTool/Real.pm +1 -1
  152. data/bin/lib/Image/ExifTool/Reconyx.pm +1 -1
  153. data/bin/lib/Image/ExifTool/Red.pm +1 -1
  154. data/bin/lib/Image/ExifTool/Ricoh.pm +1 -1
  155. data/bin/lib/Image/ExifTool/Samsung.pm +1 -1
  156. data/bin/lib/Image/ExifTool/Sanyo.pm +1 -1
  157. data/bin/lib/Image/ExifTool/Scalado.pm +1 -1
  158. data/bin/lib/Image/ExifTool/Shift.pl +1 -1
  159. data/bin/lib/Image/ExifTool/Shortcuts.pm +1 -1
  160. data/bin/lib/Image/ExifTool/Sigma.pm +1 -1
  161. data/bin/lib/Image/ExifTool/SigmaRaw.pm +1 -1
  162. data/bin/lib/Image/ExifTool/Sony.pm +16 -12
  163. data/bin/lib/Image/ExifTool/SonyIDC.pm +1 -1
  164. data/bin/lib/Image/ExifTool/Stim.pm +3 -3
  165. data/bin/lib/Image/ExifTool/TagInfoXML.pm +2 -2
  166. data/bin/lib/Image/ExifTool/TagLookup.pm +7 -1
  167. data/bin/lib/Image/ExifTool/TagNames.pod +41 -13
  168. data/bin/lib/Image/ExifTool/Text.pm +1 -1
  169. data/bin/lib/Image/ExifTool/Theora.pm +1 -1
  170. data/bin/lib/Image/ExifTool/Torrent.pm +1 -1
  171. data/bin/lib/Image/ExifTool/Unknown.pm +1 -1
  172. data/bin/lib/Image/ExifTool/VCard.pm +1 -1
  173. data/bin/lib/Image/ExifTool/Validate.pm +1 -1
  174. data/bin/lib/Image/ExifTool/Vorbis.pm +1 -1
  175. data/bin/lib/Image/ExifTool/WTV.pm +1 -1
  176. data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
  177. data/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
  178. data/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
  179. data/bin/lib/Image/ExifTool/WritePDF.pl +1 -1
  180. data/bin/lib/Image/ExifTool/WritePNG.pl +1 -1
  181. data/bin/lib/Image/ExifTool/WritePhotoshop.pl +1 -1
  182. data/bin/lib/Image/ExifTool/WritePostScript.pl +1 -1
  183. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +5 -4
  184. data/bin/lib/Image/ExifTool/WriteXMP.pl +1 -1
  185. data/bin/lib/Image/ExifTool/Writer.pl +31 -17
  186. data/bin/lib/Image/ExifTool/XMP.pm +17 -8
  187. data/bin/lib/Image/ExifTool/XMP2.pl +6 -1
  188. data/bin/lib/Image/ExifTool/XMPStruct.pl +1 -1
  189. data/bin/lib/Image/ExifTool/ZIP.pm +1 -1
  190. data/bin/lib/Image/ExifTool/ZISRAW.pm +1 -1
  191. data/bin/lib/Image/ExifTool/iWork.pm +1 -1
  192. data/bin/perl-Image-ExifTool.spec +1 -1
  193. data/lib/exiftool_vendored/version.rb +1 -1
  194. metadata +3 -3
@@ -2586,7 +2586,7 @@ Definitions for PLUS (Picture Licensing Universal System) tags.
2586
2586
 
2587
2587
  =head1 AUTHOR
2588
2588
 
2589
- Copyright 2003-2020, Phil Harvey (philharvey66 at gmail.com)
2589
+ Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
2590
2590
 
2591
2591
  This library is free software; you can redistribute it and/or modify it
2592
2592
  under the same terms as Perl itself.
@@ -1531,7 +1531,7 @@ and JNG (JPEG Network Graphics) images.
1531
1531
 
1532
1532
  =head1 AUTHOR
1533
1533
 
1534
- Copyright 2003-2020, Phil Harvey (philharvey66 at gmail.com)
1534
+ Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
1535
1535
 
1536
1536
  This library is free software; you can redistribute it and/or modify it
1537
1537
  under the same terms as Perl itself.
@@ -143,7 +143,7 @@ BitMap) images.
143
143
 
144
144
  =head1 AUTHOR
145
145
 
146
- Copyright 2003-2020, Phil Harvey (philharvey66 at gmail.com)
146
+ Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
147
147
 
148
148
  This library is free software; you can redistribute it and/or modify it
149
149
  under the same terms as Perl itself.
@@ -284,7 +284,7 @@ information from Paint Shop Pro images.
284
284
 
285
285
  =head1 AUTHOR
286
286
 
287
- Copyright 2003-2020, Phil Harvey (philharvey66 at gmail.com)
287
+ Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
288
288
 
289
289
  This library is free software; you can redistribute it and/or modify it
290
290
  under the same terms as Perl itself.
@@ -379,7 +379,7 @@ KF7 and KF8 books (AZW and AZW3).
379
379
 
380
380
  =head1 AUTHOR
381
381
 
382
- Copyright 2003-2020, Phil Harvey (philharvey66 at gmail.com)
382
+ Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
383
383
 
384
384
  This library is free software; you can redistribute it and/or modify it
385
385
  under the same terms as Perl itself.
@@ -2812,7 +2812,7 @@ Panasonic and Leica maker notes in EXIF information.
2812
2812
 
2813
2813
  =head1 AUTHOR
2814
2814
 
2815
- Copyright 2003-2020, Phil Harvey (philharvey66 at gmail.com)
2815
+ Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
2816
2816
 
2817
2817
  This library is free software; you can redistribute it and/or modify it
2818
2818
  under the same terms as Perl itself.
@@ -888,7 +888,7 @@ write meta information in Panasonic/Leica RAW, RW2 and RWL images.
888
888
 
889
889
  =head1 AUTHOR
890
890
 
891
- Copyright 2003-2020, Phil Harvey (philharvey66 at gmail.com)
891
+ Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
892
892
 
893
893
  This library is free software; you can redistribute it and/or modify it
894
894
  under the same terms as Perl itself.
@@ -731,7 +731,7 @@ timed metadata from the 'mett' frame found in Parrot drone MP4 videos.
731
731
 
732
732
  =head1 AUTHOR
733
733
 
734
- Copyright 2003-2020, Phil Harvey (philharvey66 at gmail.com)
734
+ Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
735
735
 
736
736
  This library is free software; you can redistribute it and/or modify it
737
737
  under the same terms as Perl itself.
@@ -58,7 +58,7 @@ use Image::ExifTool::Exif;
58
58
  use Image::ExifTool::GPS;
59
59
  use Image::ExifTool::HP;
60
60
 
61
- $VERSION = '3.34';
61
+ $VERSION = '3.36';
62
62
 
63
63
  sub CryptShutterCount($$);
64
64
  sub PrintFilter($$$);
@@ -322,6 +322,7 @@ sub DecodeAFPoints($$$$;$);
322
322
  '8 21' => 'Sigma 17-50mm F2.8 EX DC OS HSM', #26
323
323
  '8 22' => 'Sigma 85mm F1.4 EX DG HSM', #26
324
324
  '8 23' => 'Sigma 70-200mm F2.8 APO EX DG OS HSM', #27
325
+ '8 24' => 'Sigma 17-70mm F2.8-4 DC Macro OS HSM', #27
325
326
  '8 25' => 'Sigma 17-50mm F2.8 EX DC HSM', #Exiv2
326
327
  '8 27' => 'Sigma 18-200mm F3.5-6.3 II DC HSM', #27
327
328
  '8 28' => 'Sigma 18-250mm F3.5-6.3 DC Macro HSM', #27
@@ -2894,13 +2895,20 @@ my %binaryDataAttrs = (
2894
2895
  Writable => 'string',
2895
2896
  Notes => 'left blank by some cameras',
2896
2897
  },
2897
- 0x022a => { #PH (K-5)
2898
+ 0x022a => [{ #PH (RICOH models (GR III))
2899
+ Name => 'FilterInfo',
2900
+ Condition => '$$self{Make} =~ /^RICOH/',
2901
+ SubDirectory => {
2902
+ TagTable => 'Image::ExifTool::Pentax::FilterInfo',
2903
+ ByteOrder => 'LittleEndian',
2904
+ },
2905
+ },{ #PH (K-5)
2898
2906
  Name => 'FilterInfo',
2899
2907
  SubDirectory => {
2900
2908
  TagTable => 'Image::ExifTool::Pentax::FilterInfo',
2901
2909
  ByteOrder => 'BigEndian',
2902
2910
  },
2903
- },
2911
+ }],
2904
2912
  0x022b => { #PH (K-5)
2905
2913
  Name => 'LevelInfo',
2906
2914
  SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LevelInfo' },
@@ -6283,7 +6291,7 @@ tags, and everyone who helped contribute to the LensType values.
6283
6291
 
6284
6292
  =head1 AUTHOR
6285
6293
 
6286
- Copyright 2003-2020, Phil Harvey (philharvey66 at gmail.com)
6294
+ Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
6287
6295
 
6288
6296
  This library is free software; you can redistribute it and/or modify it
6289
6297
  under the same terms as Perl itself.
@@ -711,7 +711,7 @@ One maker notes.
711
711
 
712
712
  =head1 AUTHOR
713
713
 
714
- Copyright 2003-2020, Phil Harvey (philharvey66 at gmail.com)
714
+ Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
715
715
 
716
716
  This library is free software; you can redistribute it and/or modify it
717
717
  under the same terms as Perl itself.
@@ -484,7 +484,7 @@ information from Kodak Photo CD Image Pac (PCD) files.
484
484
 
485
485
  =head1 AUTHOR
486
486
 
487
- Copyright 2003-2020, Phil Harvey (philharvey66 at gmail.com)
487
+ Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
488
488
 
489
489
  This library is free software; you can redistribute it and/or modify it
490
490
  under the same terms as Perl itself.
@@ -236,7 +236,7 @@ write information written by the Camera Bits Photo Mechanic software.
236
236
 
237
237
  =head1 AUTHOR
238
238
 
239
- Copyright 2003-2020, Phil Harvey (philharvey66 at gmail.com)
239
+ Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
240
240
 
241
241
  This library is free software; you can redistribute it and/or modify it
242
242
  under the same terms as Perl itself.
@@ -1137,7 +1137,7 @@ be preserved when copying Photoshop information via user-defined tags.
1137
1137
 
1138
1138
  =head1 AUTHOR
1139
1139
 
1140
- Copyright 2003-2020, Phil Harvey (philharvey66 at gmail.com)
1140
+ Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
1141
1141
 
1142
1142
  This library is free software; you can redistribute it and/or modify it
1143
1143
  under the same terms as Perl itself.
@@ -777,7 +777,7 @@ This code reads meta information from EPS (Encapsulated PostScript), PS
777
777
 
778
778
  =head1 AUTHOR
779
779
 
780
- Copyright 2003-2020, Phil Harvey (philharvey66 at gmail.com)
780
+ Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
781
781
 
782
782
  This library is free software; you can redistribute it and/or modify it
783
783
  under the same terms as Perl itself.
@@ -112,7 +112,7 @@ Print Image Matching meta information.
112
112
 
113
113
  =head1 AUTHOR
114
114
 
115
- Copyright 2003-2020, Phil Harvey (philharvey66 at gmail.com)
115
+ Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
116
116
 
117
117
  This library is free software; you can redistribute it and/or modify it
118
118
  under the same terms as Perl itself.
@@ -1331,7 +1331,7 @@ information from the APP7 Qualcomm segment in JPEG images.
1331
1331
 
1332
1332
  =head1 AUTHOR
1333
1333
 
1334
- Copyright 2003-2020, Phil Harvey (philharvey66 at gmail.com)
1334
+ Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
1335
1335
 
1336
1336
  This library is free software; you can redistribute it and/or modify it
1337
1337
  under the same terms as Perl itself.
@@ -47,7 +47,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
47
47
  use Image::ExifTool::Exif;
48
48
  use Image::ExifTool::GPS;
49
49
 
50
- $VERSION = '2.54';
50
+ $VERSION = '2.56';
51
51
 
52
52
  sub ProcessMOV($$;$);
53
53
  sub ProcessKeys($$$);
@@ -214,11 +214,16 @@ my %ftypLookup = (
214
214
  'crx ' => 'Canon Raw (.CRX)', #PH (CR3 or CRM; use Canon CompressorVersion to decide)
215
215
  );
216
216
 
217
- # information for time/date-based tags (time zero is Jan 1, 1904)
217
+ # information for int32u date/time tags (time zero is Jan 1, 1904)
218
218
  my %timeInfo = (
219
219
  Notes => 'converted from UTC to local time if the QuickTimeUTC option is set',
220
+ Shift => 'Time',
221
+ Writable => 1,
222
+ Permanent => 1,
223
+ DelValue => 0,
220
224
  # It is not uncommon for brain-dead software to use the wrong time zero,
221
225
  # so assume a time zero of Jan 1, 1970 if the date is before this
226
+ # Note: This value will be in UTC if generated by a system that is aware of the time zone
222
227
  RawConv => q{
223
228
  my $offset = (66 * 365 + 17) * 24 * 3600;
224
229
  return $val - $offset if $val >= $offset or $$self{OPTIONS}{QuickTimeUTC};
@@ -227,12 +232,17 @@ my %timeInfo = (
227
232
  }
228
233
  return $val;
229
234
  },
230
- Shift => 'Time',
231
- Writable => 1,
232
- Permanent => 1,
233
- DelValue => 0,
234
- # Note: This value will be in UTC if generated by a system that is aware of the time zone
235
- ValueConv => 'ConvertUnixTime($val, $self->Options("QuickTimeUTC"))',
235
+ RawConvInv => q{
236
+ if ($$self{FileType} eq 'CR3' and not $self->Options('QuickTimeUTC')) {
237
+ # convert to UTC
238
+ my $offset = (66 * 365 + 17) * 24 * 3600;
239
+ $val = ConvertUnixTime($val - $offset);
240
+ $val = GetUnixTime($val, 1) + $offset;
241
+ }
242
+ return $val;
243
+ },
244
+ # (all CR3 files store UTC times - PH)
245
+ ValueConv => 'ConvertUnixTime($val, $self->Options("QuickTimeUTC") || $$self{FileType} eq "CR3")',
236
246
  ValueConvInv => 'GetUnixTime($val, $self->Options("QuickTimeUTC")) + (66 * 365 + 17) * 24 * 3600',
237
247
  PrintConv => '$self->ConvertDateTime($val)',
238
248
  PrintConvInv => '$self->InverseDateTime($val)',
@@ -672,7 +682,7 @@ my %eeBox = (
672
682
  ValueConv => '$val=~tr/-/:/; $val',
673
683
  ValueConvInv => '$val=~s/(\d+):(\d+):/$1-$2-/; $val',
674
684
  PrintConv => '$self->ConvertDateTime($val)',
675
- PrintConvInv => '$self->InverseDateTime($val)',
685
+ PrintConvInv => '$self->InverseDateTime($val,1)', # (add time zone if it didn't exist)
676
686
  },
677
687
  gps0 => { #PH (DuDuBell M1, VSYS M6L)
678
688
  Name => 'GPSTrack',
@@ -1405,7 +1415,7 @@ my %eeBox = (
1405
1415
  return $val;
1406
1416
  },
1407
1417
  PrintConv => '$self->ConvertDateTime($val)',
1408
- PrintConvInv => '$self->InverseDateTime($val)',
1418
+ PrintConvInv => '$self->InverseDateTime($val,1)', # (add time zone if it didn't exist)
1409
1419
  },
1410
1420
  "\xa9ART" => 'Artist', #PH (iTunes 8.0.2)
1411
1421
  "\xa9alb" => 'Album', #PH (iTunes 8.0.2)
@@ -1679,7 +1689,7 @@ my %eeBox = (
1679
1689
  return $val;
1680
1690
  },
1681
1691
  PrintConv => '$self->ConvertDateTime($val)',
1682
- PrintConvInv => '$self->InverseDateTime($val)',
1692
+ PrintConvInv => '$self->InverseDateTime($val,1)', # (add time zone if it didn't exist)
1683
1693
  },
1684
1694
  manu => { # (SX280)
1685
1695
  Name => 'Make',
@@ -2114,7 +2124,7 @@ my %eeBox = (
2114
2124
  return $val;
2115
2125
  },
2116
2126
  PrintConv => '$self->ConvertDateTime($val)',
2117
- PrintConvInv => '$self->InverseDateTime($val)',
2127
+ PrintConvInv => '$self->InverseDateTime($val,1)', # (add time zone if it didn't exist)
2118
2128
  },
2119
2129
  '@xyz' => { #PH (iPhone 3GS)
2120
2130
  Name => 'GPSCoordinates',
@@ -3012,7 +3022,7 @@ my %eeBox = (
3012
3022
  return $val;
3013
3023
  },
3014
3024
  PrintConv => '$self->ConvertDateTime($val)',
3015
- PrintConvInv => '$self->InverseDateTime($val)',
3025
+ PrintConvInv => '$self->InverseDateTime($val,1)', # (add time zone if it didn't exist)
3016
3026
  },
3017
3027
  "\xa9des" => 'Description', #4
3018
3028
  "\xa9enc" => 'EncodedBy', #10
@@ -6190,7 +6200,7 @@ my %eeBox = (
6190
6200
  return $val;
6191
6201
  },
6192
6202
  PrintConv => '$self->ConvertDateTime($val)',
6193
- PrintConvInv => '$self->InverseDateTime($val)',
6203
+ PrintConvInv => '$self->InverseDateTime($val,1)', # (add time zone if it didn't exist)
6194
6204
  },
6195
6205
  description => { },
6196
6206
  director => { },
@@ -6250,7 +6260,7 @@ my %eeBox = (
6250
6260
  return $val;
6251
6261
  },
6252
6262
  PrintConv => '$self->ConvertDateTime($val)',
6253
- PrintConvInv => '$self->InverseDateTime($val)',
6263
+ PrintConvInv => '$self->InverseDateTime($val,1)', # (add time zone if it didn't exist)
6254
6264
  },
6255
6265
  'direction.facing' => { Name => 'CameraDirection', Groups => { 2 => 'Location' } },
6256
6266
  'direction.motion' => { Name => 'CameraMotion', Groups => { 2 => 'Location' } },
@@ -8638,10 +8648,10 @@ sub ProcessSampleDesc($$$)
8638
8648
  my $dirLen = $$dirInfo{DirLen} || (length($$dataPt) - $pos);
8639
8649
  return 0 if $pos + 8 > $dirLen;
8640
8650
 
8641
- my $num = Get32u($dataPt, 4); # get number of sample descriptions in table
8651
+ my $num = Get32u($dataPt, 4); # get number of sample entries in table
8642
8652
  $pos += 8;
8643
8653
  my $i;
8644
- for ($i=0; $i<$num; ++$i) { # loop through sample descriptions
8654
+ for ($i=0; $i<$num; ++$i) { # loop through sample entries
8645
8655
  last if $pos + 8 > $dirLen;
8646
8656
  my $size = Get32u($dataPt, $pos);
8647
8657
  last if $pos + $size > $dirLen;
@@ -9490,7 +9500,7 @@ information from QuickTime and MP4 video, M4A audio, and HEIC image files.
9490
9500
 
9491
9501
  =head1 AUTHOR
9492
9502
 
9493
- Copyright 2003-2020, Phil Harvey (philharvey66 at gmail.com)
9503
+ Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
9494
9504
 
9495
9505
  This library is free software; you can redistribute it and/or modify it
9496
9506
  under the same terms as Perl itself.
@@ -1771,6 +1771,25 @@ ATCRec: for ($recPos = 0x30; $recPos + 52 < $dirLen; $recPos += 52) {
1771
1771
  $trk = GetFloat($dataPt, 0x58);
1772
1772
  }
1773
1773
 
1774
+ } elsif ($$dataPt =~ /^.{60}A\0.{6}([NS])\0.{6}([EW])\0/s and $dirLen >= 112) {
1775
+
1776
+ # header looks like this in my sample (unknown dashcam, "Anticlock 2 2020_1125_1455_007.MOV"):
1777
+ # 0000: 00 00 80 00 66 72 65 65 47 50 53 20 68 00 00 00 [....freeGPS h...]
1778
+ # 0010: 32 30 31 33 30 33 32 35 41 00 00 00 00 00 00 00 [20130325A.......]
1779
+ # 0020: 41 70 72 20 20 36 20 32 30 31 36 2c 20 31 36 3a [Apr 6 2016, 16:]
1780
+ # 0030: 0e 00 00 00 38 00 00 00 22 00 00 00 41 00 00 00 [....8..."...A...]
1781
+ # 0040: 8a 63 24 45 53 00 00 00 9f e6 42 45 45 00 00 00 [.c$ES.....BEE...]
1782
+ # 0050: 59 c0 04 3f 52 b8 42 41 14 00 00 00 0b 00 00 00 [Y..?R.BA........]
1783
+ # 0060: 19 00 00 00 06 00 00 00 05 00 00 00 f6 ff ff ff [................]
1784
+ # 0070: 03 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 [................]
1785
+ ($latRef, $lonRef) = ($1, $2);
1786
+ ($hr,$min,$sec,$yr,$mon,$day,@acc) = unpack('x48V3x28V6',$$dataPt);
1787
+ map { $_ = $_ - 4294967296 if $_ >= 0x80000000; $_ /= 1000 } @acc; # (NC)
1788
+ $lat = GetFloat($dataPt, 0x40);
1789
+ $lon = GetFloat($dataPt, 0x48);
1790
+ $spd = GetFloat($dataPt, 0x50);
1791
+ $trk = GetFloat($dataPt, 0x54);
1792
+
1774
1793
  } else {
1775
1794
 
1776
1795
  # (look for binary GPS as stored by NextBase 512G, ref PH)
@@ -1836,8 +1855,10 @@ ATCRec: for ($recPos = 0x30; $recPos + 52 < $dirLen; $recPos += 52) {
1836
1855
  $et->HandleTag($tagTbl, GPSDateTime => $time);
1837
1856
  $et->HandleTag($tagTbl, GPSLatitude => $lat * ($latRef eq 'S' ? -1 : 1));
1838
1857
  $et->HandleTag($tagTbl, GPSLongitude => $lon * ($lonRef eq 'W' ? -1 : 1));
1839
- $et->HandleTag($tagTbl, GPSSpeed => $spd); # (now in km/h)
1840
- $et->HandleTag($tagTbl, GPSSpeedRef => 'K');
1858
+ if (defined $spd) {
1859
+ $et->HandleTag($tagTbl, GPSSpeed => $spd); # (now in km/h)
1860
+ $et->HandleTag($tagTbl, GPSSpeedRef => 'K');
1861
+ }
1841
1862
  if (defined $trk) {
1842
1863
  $et->HandleTag($tagTbl, GPSTrack => $trk);
1843
1864
  $et->HandleTag($tagTbl, GPSTrackRef => 'T');
@@ -2649,7 +2670,7 @@ information like GPS tracks from MOV, MP4 and INSV media data.
2649
2670
 
2650
2671
  =head1 AUTHOR
2651
2672
 
2652
- Copyright 2003-2020, Phil Harvey (philharvey66 at gmail.com)
2673
+ Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
2653
2674
 
2654
2675
  This library is free software; you can redistribute it and/or modify it
2655
2676
  under the same terms as Perl itself.
@@ -482,6 +482,15 @@ my %code2charset = (
482
482
  Name => 'CharacterSet',
483
483
  SubDirectory => { TagTable => 'Image::ExifTool::RIFF::CSET' },
484
484
  },
485
+ # tx_ tags are generated based on the Codec used for the txts stream
486
+ tx_USER => {
487
+ Name => 'UserText',
488
+ SubDirectory => { TagTable => 'Image::ExifTool::RIFF::UserText' },
489
+ },
490
+ tx_Unknown => { # (untested)
491
+ Name => 'Text',
492
+ Notes => 'streamed text, extracted when the ExtractEmbedded option is used',
493
+ },
485
494
  #
486
495
  # WebP-specific tags
487
496
  #
@@ -995,6 +1004,12 @@ my %code2charset = (
995
1004
  Condition => '$$self{RIFFStreamType} eq "vids"',
996
1005
  SubDirectory => { TagTable => 'Image::ExifTool::BMP::Main' },
997
1006
  },
1007
+ {
1008
+ Name => 'TextFormat',
1009
+ Condition => '$$self{RIFFStreamType} eq "txts"',
1010
+ Hidden => 1,
1011
+ RawConv => '$self->Options("ExtractEmbedded") or $self->WarnOnce("Use ExtractEmbedded option to extract timed text"); undef',
1012
+ },
998
1013
  ],
999
1014
  );
1000
1015
 
@@ -1025,7 +1040,7 @@ my %code2charset = (
1025
1040
  0 => {
1026
1041
  Name => 'StreamType',
1027
1042
  Format => 'string[4]',
1028
- RawConv => '$$self{RIFFStreamType} = $val',
1043
+ RawConv => '$$self{RIFFStreamNum} = ($$self{RIFFStreamNum} || 0) + 1; $$self{RIFFStreamType} = $val',
1029
1044
  PrintConv => {
1030
1045
  auds => 'Audio',
1031
1046
  mids => 'MIDI',
@@ -1038,16 +1053,19 @@ my %code2charset = (
1038
1053
  {
1039
1054
  Name => 'AudioCodec',
1040
1055
  Condition => '$$self{RIFFStreamType} eq "auds"',
1056
+ RawConv => '$$self{RIFFStreamCodec}[$$self{RIFFStreamNum}-1] = $val',
1041
1057
  Format => 'string[4]',
1042
1058
  },
1043
1059
  {
1044
1060
  Name => 'VideoCodec',
1045
1061
  Condition => '$$self{RIFFStreamType} eq "vids"',
1062
+ RawConv => '$$self{RIFFStreamCodec}[$$self{RIFFStreamNum}-1] = $val',
1046
1063
  Format => 'string[4]',
1047
1064
  },
1048
1065
  {
1049
1066
  Name => 'Codec',
1050
1067
  Format => 'string[4]',
1068
+ RawConv => '$$self{RIFFStreamCodec}[$$self{RIFFStreamNum}-1] = $val',
1051
1069
  },
1052
1070
  ],
1053
1071
  # 2 => 'StreamFlags',
@@ -1243,6 +1261,54 @@ my %code2charset = (
1243
1261
  },
1244
1262
  );
1245
1263
 
1264
+ # streamed USER txts written by some dashcam (ref PH)
1265
+ %Image::ExifTool::RIFF::UserText = (
1266
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
1267
+ GROUPS => { 2 => 'Location' },
1268
+ NOTES => q{
1269
+ Tags decoded from the USER-format txts stream written by an unknown dashcam.
1270
+ Extracted only if the ExtractEmbedded option is used.
1271
+ },
1272
+ # 0 - int32u: 0
1273
+ # 4 - int32u: sample number (starting from unknown offset)
1274
+ # 8 - int8u[4]: "0 x y z" ? (z mostly 5-8)
1275
+ # 12 - int8u[4]: "0 x 1 0" ? (x incrementing once per second)
1276
+ # 16 - int8u[4]: "0 32 0 x" ?
1277
+ # 20 - int32u: 100-150(mostly), 250-300(once per second)
1278
+ # 24 - int8u[4]: "0 x y 0" ?
1279
+ 28 => { Name => 'GPSAltitude', Format => 'int32u', ValueConv => '$val / 10' }, # (NC)
1280
+ # 32 - int32u: 0(mostly), 23(once per second)
1281
+ # 36 - int32u: 1
1282
+ 40 => { Name => 'Accelerometer', Format => 'float[3]' },
1283
+ # 52 - int32u: 1
1284
+ 56 => { Name => 'GPSSpeed', Format => 'float' }, # km/h
1285
+ 60 => {
1286
+ Name => 'GPSLatitude',
1287
+ Format => 'float',
1288
+ # Note: these values are unsigned and I don't know where the hemisphere is stored,
1289
+ # but my only sample is from the U.S., so assume a positive latitude (for now)
1290
+ ValueConv => 'my $deg = int($val / 100); $deg + ($val - $deg * 100) / 60',
1291
+ PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")',
1292
+ },
1293
+ 64 => {
1294
+ Name => 'GPSLongitude',
1295
+ Format => 'float',
1296
+ # Note: these values are unsigned and I don't know where the hemisphere is stored,
1297
+ # but my only sample is from the U.S., so assume a negative longitude (for now)
1298
+ ValueConv => 'my $deg = int($val / 100); -($deg + ($val - $deg * 100) / 60)',
1299
+ PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")',
1300
+ },
1301
+ 68 => {
1302
+ Name => 'GPSDateTime',
1303
+ Description => 'GPS Date/Time',
1304
+ Groups => { 2 => 'Time' },
1305
+ Format => 'int32u',
1306
+ ValueConv => 'ConvertUnixTime($val)',
1307
+ # (likely local time, but clock seemed off by 3 hours in my sample)
1308
+ PrintConv => '$self->ConvertDateTime($val)',
1309
+ },
1310
+ );
1311
+
1246
1312
  # WebP alpha info (ref 14)
1247
1313
  %Image::ExifTool::RIFF::ALPH = (
1248
1314
  PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
@@ -1752,6 +1818,7 @@ sub ProcessRIFF($$)
1752
1818
  my ($buff, $buf2, $type, $mime, $err, $rf64);
1753
1819
  my $verbose = $et->Options('Verbose');
1754
1820
  my $unknown = $et->Options('Unknown');
1821
+ my $ee = $et->Options('ExtractEmbedded');
1755
1822
 
1756
1823
  # verify this is a valid RIFF file
1757
1824
  return 0 unless $raf->Read($buff, 12) == 12;
@@ -1769,7 +1836,8 @@ sub ProcessRIFF($$)
1769
1836
  $mime = $riffMimeType{$type} if $type;
1770
1837
  $et->SetFileType($type, $mime);
1771
1838
  $$et{VALUE}{FileType} .= ' (RF64)' if $rf64;
1772
- $$et{RIFFStreamType} = ''; # initialize stream type
1839
+ $$et{RIFFStreamType} = ''; # initialize stream type
1840
+ $$et{RIFFStreamCodec} = []; # initialize codec array
1773
1841
  SetByteOrder('II');
1774
1842
  my $tagTbl = GetTagTable('Image::ExifTool::RIFF::Main');
1775
1843
  my $pos = 12;
@@ -1808,14 +1876,20 @@ sub ProcessRIFF($$)
1808
1876
  # stop when we hit the audio data or AVI index or AVI movie data
1809
1877
  # --> no more because Adobe Bridge stores XMP after this!!
1810
1878
  # (so now we only do this on the FastScan option)
1811
- if (($tag eq 'data' or $tag eq 'idx1' or $tag eq 'LIST_movi') and
1812
- $et->Options('FastScan'))
1879
+ if ($et->Options('FastScan') and ($tag eq 'data' or $tag eq 'idx1' or
1880
+ ($tag eq 'LIST_movi' and not $ee)))
1813
1881
  {
1814
1882
  $et->VPrint(0, "(end of parsing)\n");
1815
1883
  last;
1816
1884
  }
1817
1885
  # RIFF chunks are padded to an even number of bytes
1818
1886
  my $len2 = $len + ($len & 0x01);
1887
+ # change name of stream txts data depending on the Codec
1888
+ if ($ee and $tag =~ /^(\d{2})tx$/) {
1889
+ $tag = 'tx_' . ($$et{RIFFStreamCodec}[$1] || 'Unknown');
1890
+ $tag = "tx_Unknown" unless defined $$tagTbl{$tag};
1891
+ $$et{DOC_NUM} = ++$$et{DOC_COUNT};
1892
+ }
1819
1893
  my $tagInfo = $$tagTbl{$tag};
1820
1894
  if ($tagInfo or (($verbose or $unknown) and $tag !~ /^(data|idx1|LIST_movi|RIFF)$/)) {
1821
1895
  $raf->Read($buff, $len2) == $len2 or $err=1, last;
@@ -1835,11 +1909,14 @@ sub ProcessRIFF($$)
1835
1909
  delete $$et{SET_GROUP0};
1836
1910
  delete $$et{SET_GROUP1};
1837
1911
  }
1912
+ delete $$et{DOC_NUM} if $ee;
1838
1913
  } elsif ($tag eq 'RIFF') {
1839
1914
  # don't read into RIFF chunk (eg. concatenated video file)
1840
1915
  $raf->Read($buff, 4) == 4 or $err=1, last;
1841
1916
  # extract information from remaining file as an embedded file
1842
1917
  $$et{DOC_NUM} = ++$$et{DOC_COUNT}
1918
+ } elsif ($tag eq 'LIST_movi' and $ee) {
1919
+ next; # parse into movi chunk
1843
1920
  } else {
1844
1921
  if ($len > 0x7fffffff and not $et->Options('LargeFileSupport')) {
1845
1922
  $et->Warn("Stopped parsing at large $tag chunk (LargeFileSupport not set)");
@@ -1874,7 +1951,7 @@ including AVI videos, WAV audio files and WEBP images.
1874
1951
 
1875
1952
  =head1 AUTHOR
1876
1953
 
1877
- Copyright 2003-2020, Phil Harvey (philharvey66 at gmail.com)
1954
+ Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
1878
1955
 
1879
1956
  This library is free software; you can redistribute it and/or modify it
1880
1957
  under the same terms as Perl itself.