exiftool_vendored 9.33.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 (864) hide show
  1. checksums.yaml +15 -0
  2. data/bin/Image-ExifTool-9.33/Changes +6241 -0
  3. data/bin/Image-ExifTool-9.33/MANIFEST +859 -0
  4. data/bin/Image-ExifTool-9.33/META.yml +27 -0
  5. data/bin/Image-ExifTool-9.33/Makefile.PL +41 -0
  6. data/bin/Image-ExifTool-9.33/README +227 -0
  7. data/bin/Image-ExifTool-9.33/arg_files/exif2iptc.args +24 -0
  8. data/bin/Image-ExifTool-9.33/arg_files/exif2xmp.args +38 -0
  9. data/bin/Image-ExifTool-9.33/arg_files/gps2xmp.args +20 -0
  10. data/bin/Image-ExifTool-9.33/arg_files/iptc2exif.args +17 -0
  11. data/bin/Image-ExifTool-9.33/arg_files/iptc2xmp.args +53 -0
  12. data/bin/Image-ExifTool-9.33/arg_files/iptcCore.args +172 -0
  13. data/bin/Image-ExifTool-9.33/arg_files/pdf2xmp.args +23 -0
  14. data/bin/Image-ExifTool-9.33/arg_files/xmp2exif.args +39 -0
  15. data/bin/Image-ExifTool-9.33/arg_files/xmp2gps.args +24 -0
  16. data/bin/Image-ExifTool-9.33/arg_files/xmp2iptc.args +62 -0
  17. data/bin/Image-ExifTool-9.33/arg_files/xmp2pdf.args +23 -0
  18. data/bin/Image-ExifTool-9.33/config_files/ExifTool_config +299 -0
  19. data/bin/Image-ExifTool-9.33/config_files/convert_regions.config +81 -0
  20. data/bin/Image-ExifTool-9.33/exiftool +5715 -0
  21. data/bin/Image-ExifTool-9.33/fmt_files/gpx.fmt +29 -0
  22. data/bin/Image-ExifTool-9.33/fmt_files/gpx_wpt.fmt +33 -0
  23. data/bin/Image-ExifTool-9.33/fmt_files/kml.fmt +53 -0
  24. data/bin/Image-ExifTool-9.33/html/ExifTool.html +1959 -0
  25. data/bin/Image-ExifTool-9.33/html/MIE1.1-20070121.pdf +0 -0
  26. data/bin/Image-ExifTool-9.33/html/Shift.html +173 -0
  27. data/bin/Image-ExifTool-9.33/html/TagNames/AFCP.html +53 -0
  28. data/bin/Image-ExifTool-9.33/html/TagNames/AIFF.html +146 -0
  29. data/bin/Image-ExifTool-9.33/html/TagNames/APE.html +149 -0
  30. data/bin/Image-ExifTool-9.33/html/TagNames/APP12.html +188 -0
  31. data/bin/Image-ExifTool-9.33/html/TagNames/ASF.html +1066 -0
  32. data/bin/Image-ExifTool-9.33/html/TagNames/BMP.html +110 -0
  33. data/bin/Image-ExifTool-9.33/html/TagNames/Canon.html +8062 -0
  34. data/bin/Image-ExifTool-9.33/html/TagNames/CanonCustom.html +2044 -0
  35. data/bin/Image-ExifTool-9.33/html/TagNames/CanonRaw.html +561 -0
  36. data/bin/Image-ExifTool-9.33/html/TagNames/CanonVRD.html +1222 -0
  37. data/bin/Image-ExifTool-9.33/html/TagNames/Casio.html +1569 -0
  38. data/bin/Image-ExifTool-9.33/html/TagNames/Composite.html +665 -0
  39. data/bin/Image-ExifTool-9.33/html/TagNames/DICOM.html +15762 -0
  40. data/bin/Image-ExifTool-9.33/html/TagNames/DNG.html +273 -0
  41. data/bin/Image-ExifTool-9.33/html/TagNames/DV.html +75 -0
  42. data/bin/Image-ExifTool-9.33/html/TagNames/DarwinCore.html +1445 -0
  43. data/bin/Image-ExifTool-9.33/html/TagNames/DjVu.html +313 -0
  44. data/bin/Image-ExifTool-9.33/html/TagNames/EXE.html +697 -0
  45. data/bin/Image-ExifTool-9.33/html/TagNames/EXIF.html +3244 -0
  46. data/bin/Image-ExifTool-9.33/html/TagNames/Extra.html +301 -0
  47. data/bin/Image-ExifTool-9.33/html/TagNames/FLAC.html +183 -0
  48. data/bin/Image-ExifTool-9.33/html/TagNames/FLIR.html +931 -0
  49. data/bin/Image-ExifTool-9.33/html/TagNames/Flash.html +419 -0
  50. data/bin/Image-ExifTool-9.33/html/TagNames/FlashPix.html +1435 -0
  51. data/bin/Image-ExifTool-9.33/html/TagNames/Font.html +485 -0
  52. data/bin/Image-ExifTool-9.33/html/TagNames/FotoStation.html +103 -0
  53. data/bin/Image-ExifTool-9.33/html/TagNames/FujiFilm.html +637 -0
  54. data/bin/Image-ExifTool-9.33/html/TagNames/GE.html +40 -0
  55. data/bin/Image-ExifTool-9.33/html/TagNames/GIF.html +116 -0
  56. data/bin/Image-ExifTool-9.33/html/TagNames/GIMP.html +140 -0
  57. data/bin/Image-ExifTool-9.33/html/TagNames/GPS.html +222 -0
  58. data/bin/Image-ExifTool-9.33/html/TagNames/GeoTiff.html +2177 -0
  59. data/bin/Image-ExifTool-9.33/html/TagNames/H264.html +393 -0
  60. data/bin/Image-ExifTool-9.33/html/TagNames/HP.html +155 -0
  61. data/bin/Image-ExifTool-9.33/html/TagNames/HTML.html +666 -0
  62. data/bin/Image-ExifTool-9.33/html/TagNames/ICC_Profile.html +710 -0
  63. data/bin/Image-ExifTool-9.33/html/TagNames/ID3.html +1473 -0
  64. data/bin/Image-ExifTool-9.33/html/TagNames/IPTC.html +895 -0
  65. data/bin/Image-ExifTool-9.33/html/TagNames/ITC.html +90 -0
  66. data/bin/Image-ExifTool-9.33/html/TagNames/JFIF.html +61 -0
  67. data/bin/Image-ExifTool-9.33/html/TagNames/JPEG.html +523 -0
  68. data/bin/Image-ExifTool-9.33/html/TagNames/JVC.html +56 -0
  69. data/bin/Image-ExifTool-9.33/html/TagNames/Jpeg2000.html +464 -0
  70. data/bin/Image-ExifTool-9.33/html/TagNames/Kodak.html +1759 -0
  71. data/bin/Image-ExifTool-9.33/html/TagNames/KyoceraRaw.html +92 -0
  72. data/bin/Image-ExifTool-9.33/html/TagNames/LNK.html +478 -0
  73. data/bin/Image-ExifTool-9.33/html/TagNames/Leaf.html +870 -0
  74. data/bin/Image-ExifTool-9.33/html/TagNames/M2TS.html +133 -0
  75. data/bin/Image-ExifTool-9.33/html/TagNames/MIE.html +1026 -0
  76. data/bin/Image-ExifTool-9.33/html/TagNames/MIFF.html +196 -0
  77. data/bin/Image-ExifTool-9.33/html/TagNames/MNG.html +847 -0
  78. data/bin/Image-ExifTool-9.33/html/TagNames/MPC.html +97 -0
  79. data/bin/Image-ExifTool-9.33/html/TagNames/MPEG.html +249 -0
  80. data/bin/Image-ExifTool-9.33/html/TagNames/MPF.html +199 -0
  81. data/bin/Image-ExifTool-9.33/html/TagNames/MWG.html +563 -0
  82. data/bin/Image-ExifTool-9.33/html/TagNames/MXF.html +6673 -0
  83. data/bin/Image-ExifTool-9.33/html/TagNames/Matroska.html +1069 -0
  84. data/bin/Image-ExifTool-9.33/html/TagNames/Microsoft.html +2066 -0
  85. data/bin/Image-ExifTool-9.33/html/TagNames/Minolta.html +2555 -0
  86. data/bin/Image-ExifTool-9.33/html/TagNames/MinoltaRaw.html +326 -0
  87. data/bin/Image-ExifTool-9.33/html/TagNames/Nikon.html +4467 -0
  88. data/bin/Image-ExifTool-9.33/html/TagNames/NikonCapture.html +776 -0
  89. data/bin/Image-ExifTool-9.33/html/TagNames/NikonCustom.html +3835 -0
  90. data/bin/Image-ExifTool-9.33/html/TagNames/OOXML.html +280 -0
  91. data/bin/Image-ExifTool-9.33/html/TagNames/Ogg.html +44 -0
  92. data/bin/Image-ExifTool-9.33/html/TagNames/Olympus.html +3386 -0
  93. data/bin/Image-ExifTool-9.33/html/TagNames/OpenEXR.html +222 -0
  94. data/bin/Image-ExifTool-9.33/html/TagNames/PDF.html +745 -0
  95. data/bin/Image-ExifTool-9.33/html/TagNames/PGF.html +80 -0
  96. data/bin/Image-ExifTool-9.33/html/TagNames/PICT.html +753 -0
  97. data/bin/Image-ExifTool-9.33/html/TagNames/PLIST.html +86 -0
  98. data/bin/Image-ExifTool-9.33/html/TagNames/PNG.html +515 -0
  99. data/bin/Image-ExifTool-9.33/html/TagNames/PSP.html +160 -0
  100. data/bin/Image-ExifTool-9.33/html/TagNames/Panasonic.html +1452 -0
  101. data/bin/Image-ExifTool-9.33/html/TagNames/PanasonicRaw.html +214 -0
  102. data/bin/Image-ExifTool-9.33/html/TagNames/Pentax.html +4332 -0
  103. data/bin/Image-ExifTool-9.33/html/TagNames/PhaseOne.html +258 -0
  104. data/bin/Image-ExifTool-9.33/html/TagNames/PhotoCD.html +402 -0
  105. data/bin/Image-ExifTool-9.33/html/TagNames/PhotoMechanic.html +196 -0
  106. data/bin/Image-ExifTool-9.33/html/TagNames/Photoshop.html +555 -0
  107. data/bin/Image-ExifTool-9.33/html/TagNames/PostScript.html +125 -0
  108. data/bin/Image-ExifTool-9.33/html/TagNames/PrintIM.html +31 -0
  109. data/bin/Image-ExifTool-9.33/html/TagNames/Qualcomm.html +4778 -0
  110. data/bin/Image-ExifTool-9.33/html/TagNames/QuickTime.html +3104 -0
  111. data/bin/Image-ExifTool-9.33/html/TagNames/RIFF.html +1164 -0
  112. data/bin/Image-ExifTool-9.33/html/TagNames/RSRC.html +74 -0
  113. data/bin/Image-ExifTool-9.33/html/TagNames/RTF.html +150 -0
  114. data/bin/Image-ExifTool-9.33/html/TagNames/Radiance.html +87 -0
  115. data/bin/Image-ExifTool-9.33/html/TagNames/Rawzor.html +45 -0
  116. data/bin/Image-ExifTool-9.33/html/TagNames/Real.html +780 -0
  117. data/bin/Image-ExifTool-9.33/html/TagNames/Reconyx.html +132 -0
  118. data/bin/Image-ExifTool-9.33/html/TagNames/Ricoh.html +456 -0
  119. data/bin/Image-ExifTool-9.33/html/TagNames/Samsung.html +419 -0
  120. data/bin/Image-ExifTool-9.33/html/TagNames/Sanyo.html +366 -0
  121. data/bin/Image-ExifTool-9.33/html/TagNames/Shortcuts.html +237 -0
  122. data/bin/Image-ExifTool-9.33/html/TagNames/Sigma.html +372 -0
  123. data/bin/Image-ExifTool-9.33/html/TagNames/SigmaRaw.html +403 -0
  124. data/bin/Image-ExifTool-9.33/html/TagNames/Sony.html +4279 -0
  125. data/bin/Image-ExifTool-9.33/html/TagNames/SonyIDC.html +267 -0
  126. data/bin/Image-ExifTool-9.33/html/TagNames/Stim.html +200 -0
  127. data/bin/Image-ExifTool-9.33/html/TagNames/Theora.html +102 -0
  128. data/bin/Image-ExifTool-9.33/html/TagNames/Unknown.html +31 -0
  129. data/bin/Image-ExifTool-9.33/html/TagNames/Vorbis.html +228 -0
  130. data/bin/Image-ExifTool-9.33/html/TagNames/XMP.html +7234 -0
  131. data/bin/Image-ExifTool-9.33/html/TagNames/ZIP.html +204 -0
  132. data/bin/Image-ExifTool-9.33/html/TagNames/iWork.html +49 -0
  133. data/bin/Image-ExifTool-9.33/html/TagNames/index.html +192 -0
  134. data/bin/Image-ExifTool-9.33/html/TagNames/style.css +31 -0
  135. data/bin/Image-ExifTool-9.33/html/ancient_history.html +6727 -0
  136. data/bin/Image-ExifTool-9.33/html/canon_raw.html +366 -0
  137. data/bin/Image-ExifTool-9.33/html/commentary.html +319 -0
  138. data/bin/Image-ExifTool-9.33/html/config.html +312 -0
  139. data/bin/Image-ExifTool-9.33/html/data_members.html +265 -0
  140. data/bin/Image-ExifTool-9.33/html/exiftool_pod.html +2338 -0
  141. data/bin/Image-ExifTool-9.33/html/faq.html +1434 -0
  142. data/bin/Image-ExifTool-9.33/html/filename.html +281 -0
  143. data/bin/Image-ExifTool-9.33/html/geotag.html +642 -0
  144. data/bin/Image-ExifTool-9.33/html/history.html +358 -0
  145. data/bin/Image-ExifTool-9.33/html/htmldump.html +732 -0
  146. data/bin/Image-ExifTool-9.33/html/idiosyncracies.html +251 -0
  147. data/bin/Image-ExifTool-9.33/html/index.html +1271 -0
  148. data/bin/Image-ExifTool-9.33/html/install.html +239 -0
  149. data/bin/Image-ExifTool-9.33/html/metafiles.html +266 -0
  150. data/bin/Image-ExifTool-9.33/html/overview.png +0 -0
  151. data/bin/Image-ExifTool-9.33/html/standards.html +277 -0
  152. data/bin/Image-ExifTool-9.33/html/struct.html +342 -0
  153. data/bin/Image-ExifTool-9.33/html/style.css +31 -0
  154. data/bin/Image-ExifTool-9.33/html/under.html +124 -0
  155. data/bin/Image-ExifTool-9.33/html/verbose.html +195 -0
  156. data/bin/Image-ExifTool-9.33/html/writing.html +239 -0
  157. data/bin/Image-ExifTool-9.33/lib/File/RandomAccess.pm +378 -0
  158. data/bin/Image-ExifTool-9.33/lib/File/RandomAccess.pod +231 -0
  159. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool.pm +6815 -0
  160. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool.pod +2385 -0
  161. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/AES.pm +501 -0
  162. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/AFCP.pm +284 -0
  163. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/AIFF.pm +271 -0
  164. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/APE.pm +262 -0
  165. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/APP12.pm +322 -0
  166. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/ASF.pm +884 -0
  167. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/BMP.pm +179 -0
  168. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/BZZ.pm +472 -0
  169. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/BigTIFF.pm +282 -0
  170. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/BuildTagLookup.pm +2400 -0
  171. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Canon.pm +7794 -0
  172. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/CanonCustom.pm +2523 -0
  173. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/CanonRaw.pm +931 -0
  174. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/CanonVRD.pm +1481 -0
  175. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/CaptureOne.pm +235 -0
  176. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Casio.pm +2013 -0
  177. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset.pm +396 -0
  178. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/Arabic.pm +39 -0
  179. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/Baltic.pm +35 -0
  180. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/Cyrillic.pm +45 -0
  181. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/Greek.pm +40 -0
  182. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/Hebrew.pm +36 -0
  183. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/JIS.pm +1735 -0
  184. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/Latin.pm +24 -0
  185. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/Latin2.pm +36 -0
  186. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacArabic.pm +47 -0
  187. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacChineseCN.pm +2088 -0
  188. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacChineseTW.pm +3623 -0
  189. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacCroatian.pm +43 -0
  190. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacCyrillic.pm +47 -0
  191. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacGreek.pm +45 -0
  192. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacHebrew.pm +47 -0
  193. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacIceland.pm +42 -0
  194. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacJapanese.pm +1933 -0
  195. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacKorean.pm +2720 -0
  196. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacLatin2.pm +44 -0
  197. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacRSymbol.pm +2087 -0
  198. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacRoman.pm +42 -0
  199. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacRomanian.pm +42 -0
  200. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacThai.pm +49 -0
  201. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacTurkish.pm +42 -0
  202. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/PDFDoc.pm +28 -0
  203. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/ShiftJIS.pm +1835 -0
  204. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/Symbol.pm +54 -0
  205. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/Thai.pm +41 -0
  206. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/Turkish.pm +25 -0
  207. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/Vietnam.pm +27 -0
  208. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/DICOM.pm +3835 -0
  209. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/DNG.pm +835 -0
  210. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/DV.pm +319 -0
  211. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/DarwinCore.pm +317 -0
  212. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/DjVu.pm +376 -0
  213. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/EXE.pm +1228 -0
  214. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Exif.pm +4542 -0
  215. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/FLAC.pm +296 -0
  216. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/FLIR.pm +972 -0
  217. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Fixup.pm +354 -0
  218. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Flash.pm +755 -0
  219. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/FlashPix.pm +1882 -0
  220. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Font.pm +643 -0
  221. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/FotoStation.pm +258 -0
  222. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/FujiFilm.pm +1020 -0
  223. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/GE.pm +80 -0
  224. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/GIF.pm +542 -0
  225. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/GIMP.pm +258 -0
  226. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/GPS.pm +511 -0
  227. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/GeoTiff.pm +2187 -0
  228. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Geotag.pm +1173 -0
  229. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/H264.pm +1102 -0
  230. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/HP.pm +262 -0
  231. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/HTML.pm +576 -0
  232. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/HtmlDump.pm +895 -0
  233. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/ICC_Profile.pm +999 -0
  234. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/ID3.pm +1532 -0
  235. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/IPTC.pm +1244 -0
  236. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/ITC.pm +215 -0
  237. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Import.pm +308 -0
  238. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/InDesign.pm +277 -0
  239. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/JPEG.pm +588 -0
  240. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/JPEGDigest.pm +2511 -0
  241. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/JVC.pm +130 -0
  242. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Jpeg2000.pm +881 -0
  243. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Kodak.pm +2014 -0
  244. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/KyoceraRaw.pm +173 -0
  245. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/LNK.pm +723 -0
  246. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/cs.pm +1586 -0
  247. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/de.pm +7356 -0
  248. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/en_ca.pm +557 -0
  249. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/en_gb.pm +572 -0
  250. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/es.pm +4016 -0
  251. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/fi.pm +2856 -0
  252. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/fr.pm +4720 -0
  253. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/it.pm +7917 -0
  254. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/ja.pm +5815 -0
  255. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/ko.pm +2332 -0
  256. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/nl.pm +3220 -0
  257. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/pl.pm +1140 -0
  258. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/ru.pm +769 -0
  259. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/sv.pm +639 -0
  260. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/tr.pm +544 -0
  261. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/zh_cn.pm +1329 -0
  262. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/zh_tw.pm +802 -0
  263. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Leaf.pm +515 -0
  264. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/M2TS.pm +729 -0
  265. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/MIE.pm +2561 -0
  266. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/MIEUnits.pod +377 -0
  267. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/MIFF.pm +279 -0
  268. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/MNG.pm +684 -0
  269. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/MPC.pm +156 -0
  270. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/MPEG.pm +736 -0
  271. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/MPF.pm +289 -0
  272. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/MWG.pm +736 -0
  273. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/MXF.pm +3032 -0
  274. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/MakerNotes.pm +1573 -0
  275. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Matroska.pm +891 -0
  276. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Microsoft.pm +879 -0
  277. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Minolta.pm +2833 -0
  278. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/MinoltaRaw.pm +534 -0
  279. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Nikon.pm +6116 -0
  280. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/NikonCapture.pm +911 -0
  281. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/NikonCustom.pm +4405 -0
  282. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/OOXML.pm +409 -0
  283. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Ogg.pm +237 -0
  284. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Olympus.pm +3582 -0
  285. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/OpenEXR.pm +324 -0
  286. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/PDF.pm +2327 -0
  287. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/PGF.pm +143 -0
  288. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/PICT.pm +1260 -0
  289. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/PLIST.pm +449 -0
  290. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/PNG.pm +1100 -0
  291. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/PPM.pm +169 -0
  292. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/PSP.pm +305 -0
  293. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Panasonic.pm +1995 -0
  294. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/PanasonicRaw.pm +535 -0
  295. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Pentax.pm +5489 -0
  296. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/PhaseOne.pm +557 -0
  297. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/PhotoCD.pm +507 -0
  298. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/PhotoMechanic.pm +256 -0
  299. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Photoshop.pm +629 -0
  300. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/PostScript.pm +693 -0
  301. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/PrintIM.pm +125 -0
  302. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Qualcomm.pm +1344 -0
  303. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/QuickTime.pm +3519 -0
  304. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/README +944 -0
  305. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/RIFF.pm +1322 -0
  306. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/RSRC.pm +241 -0
  307. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/RTF.pm +383 -0
  308. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Radiance.pm +144 -0
  309. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Rawzor.pm +190 -0
  310. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Real.pm +736 -0
  311. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Reconyx.pm +190 -0
  312. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Ricoh.pm +741 -0
  313. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Samsung.pm +820 -0
  314. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Sanyo.pm +439 -0
  315. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Shift.pl +594 -0
  316. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Shortcuts.pm +291 -0
  317. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Sigma.pm +574 -0
  318. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/SigmaRaw.pm +649 -0
  319. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Sony.pm +5722 -0
  320. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/SonyIDC.pm +330 -0
  321. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Stim.pm +196 -0
  322. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/TagInfoXML.pm +792 -0
  323. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/TagLookup.pm +8005 -0
  324. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/TagNames.pod +25950 -0
  325. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Theora.pm +145 -0
  326. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Unknown.pm +66 -0
  327. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Vorbis.pm +237 -0
  328. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/WriteCanonRaw.pl +637 -0
  329. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/WriteExif.pl +3674 -0
  330. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/WriteIPTC.pl +702 -0
  331. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/WritePDF.pl +759 -0
  332. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/WritePNG.pl +330 -0
  333. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/WritePhotoshop.pl +266 -0
  334. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/WritePostScript.pl +777 -0
  335. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/WriteXMP.pl +1318 -0
  336. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Writer.pl +5779 -0
  337. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/XMP.pm +3634 -0
  338. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/XMP2.pl +1298 -0
  339. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/XMPStruct.pl +813 -0
  340. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/ZIP.pm +623 -0
  341. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/iWork.pm +223 -0
  342. data/bin/Image-ExifTool-9.33/perl-Image-ExifTool.spec +104 -0
  343. data/bin/Image-ExifTool-9.33/t/AFCP.t +44 -0
  344. data/bin/Image-ExifTool-9.33/t/AFCP_2.out +37 -0
  345. data/bin/Image-ExifTool-9.33/t/AFCP_3.out +20 -0
  346. data/bin/Image-ExifTool-9.33/t/AIFF.t +28 -0
  347. data/bin/Image-ExifTool-9.33/t/AIFF_2.out +31 -0
  348. data/bin/Image-ExifTool-9.33/t/APE.t +38 -0
  349. data/bin/Image-ExifTool-9.33/t/APE_2.out +28 -0
  350. data/bin/Image-ExifTool-9.33/t/APE_3.out +57 -0
  351. data/bin/Image-ExifTool-9.33/t/ASF.t +28 -0
  352. data/bin/Image-ExifTool-9.33/t/ASF_2.out +54 -0
  353. data/bin/Image-ExifTool-9.33/t/BMP.t +28 -0
  354. data/bin/Image-ExifTool-9.33/t/BMP_2.out +21 -0
  355. data/bin/Image-ExifTool-9.33/t/BigTIFF.t +28 -0
  356. data/bin/Image-ExifTool-9.33/t/BigTIFF_2.out +19 -0
  357. data/bin/Image-ExifTool-9.33/t/Canon.t +41 -0
  358. data/bin/Image-ExifTool-9.33/t/CanonRaw.t +126 -0
  359. data/bin/Image-ExifTool-9.33/t/CanonRaw_2.out +165 -0
  360. data/bin/Image-ExifTool-9.33/t/CanonRaw_4.out +217 -0
  361. data/bin/Image-ExifTool-9.33/t/CanonRaw_5.out +207 -0
  362. data/bin/Image-ExifTool-9.33/t/CanonRaw_6.out +231 -0
  363. data/bin/Image-ExifTool-9.33/t/CanonRaw_7.out +247 -0
  364. data/bin/Image-ExifTool-9.33/t/CanonVRD.t +129 -0
  365. data/bin/Image-ExifTool-9.33/t/CanonVRD_11.out +118 -0
  366. data/bin/Image-ExifTool-9.33/t/CanonVRD_12.out +12 -0
  367. data/bin/Image-ExifTool-9.33/t/CanonVRD_2.out +116 -0
  368. data/bin/Image-ExifTool-9.33/t/CanonVRD_3.out +116 -0
  369. data/bin/Image-ExifTool-9.33/t/CanonVRD_4.out +2 -0
  370. data/bin/Image-ExifTool-9.33/t/CanonVRD_5.out +3 -0
  371. data/bin/Image-ExifTool-9.33/t/CanonVRD_6.out +3 -0
  372. data/bin/Image-ExifTool-9.33/t/CanonVRD_7.out +2 -0
  373. data/bin/Image-ExifTool-9.33/t/CanonVRD_8.out +2 -0
  374. data/bin/Image-ExifTool-9.33/t/CanonVRD_9.out +1 -0
  375. data/bin/Image-ExifTool-9.33/t/Canon_2.out +350 -0
  376. data/bin/Image-ExifTool-9.33/t/Canon_3.out +3 -0
  377. data/bin/Image-ExifTool-9.33/t/Casio.t +54 -0
  378. data/bin/Image-ExifTool-9.33/t/Casio_2.out +70 -0
  379. data/bin/Image-ExifTool-9.33/t/Casio_3.out +100 -0
  380. data/bin/Image-ExifTool-9.33/t/Casio_4.out +26 -0
  381. data/bin/Image-ExifTool-9.33/t/Casio_5.out +78 -0
  382. data/bin/Image-ExifTool-9.33/t/Casio_6.out +115 -0
  383. data/bin/Image-ExifTool-9.33/t/DICOM.t +28 -0
  384. data/bin/Image-ExifTool-9.33/t/DICOM_2.out +108 -0
  385. data/bin/Image-ExifTool-9.33/t/DNG.t +39 -0
  386. data/bin/Image-ExifTool-9.33/t/DNG_2.out +326 -0
  387. data/bin/Image-ExifTool-9.33/t/DNG_3.out +4 -0
  388. data/bin/Image-ExifTool-9.33/t/DV.t +27 -0
  389. data/bin/Image-ExifTool-9.33/t/DV_2.out +24 -0
  390. data/bin/Image-ExifTool-9.33/t/DjVu.t +28 -0
  391. data/bin/Image-ExifTool-9.33/t/DjVu_2.out +44 -0
  392. data/bin/Image-ExifTool-9.33/t/EXE.t +31 -0
  393. data/bin/Image-ExifTool-9.33/t/EXE_2.out +40 -0
  394. data/bin/Image-ExifTool-9.33/t/EXE_3.out +15 -0
  395. data/bin/Image-ExifTool-9.33/t/EXE_4.out +14 -0
  396. data/bin/Image-ExifTool-9.33/t/ExifTool.t +284 -0
  397. data/bin/Image-ExifTool-9.33/t/ExifTool_16.out +180 -0
  398. data/bin/Image-ExifTool-9.33/t/ExifTool_17.out +594 -0
  399. data/bin/Image-ExifTool-9.33/t/ExifTool_2.out +399 -0
  400. data/bin/Image-ExifTool-9.33/t/ExifTool_20.out +1 -0
  401. data/bin/Image-ExifTool-9.33/t/ExifTool_21.out +1 -0
  402. data/bin/Image-ExifTool-9.33/t/ExifTool_22.out +1 -0
  403. data/bin/Image-ExifTool-9.33/t/ExifTool_23.out +6 -0
  404. data/bin/Image-ExifTool-9.33/t/ExifTool_24.out +3 -0
  405. data/bin/Image-ExifTool-9.33/t/ExifTool_25.out +13 -0
  406. data/bin/Image-ExifTool-9.33/t/ExifTool_26.out +12 -0
  407. data/bin/Image-ExifTool-9.33/t/ExifTool_3.out +87 -0
  408. data/bin/Image-ExifTool-9.33/t/ExifTool_4.out +41 -0
  409. data/bin/Image-ExifTool-9.33/t/ExifTool_5.out +6 -0
  410. data/bin/Image-ExifTool-9.33/t/ExifTool_6.out +68 -0
  411. data/bin/Image-ExifTool-9.33/t/ExifTool_7.out +125 -0
  412. data/bin/Image-ExifTool-9.33/t/ExifTool_8.out +125 -0
  413. data/bin/Image-ExifTool-9.33/t/ExifTool_9.out +33 -0
  414. data/bin/Image-ExifTool-9.33/t/FLAC.t +37 -0
  415. data/bin/Image-ExifTool-9.33/t/FLAC_2.out +25 -0
  416. data/bin/Image-ExifTool-9.33/t/FLAC_3.out +19 -0
  417. data/bin/Image-ExifTool-9.33/t/FLIR.t +30 -0
  418. data/bin/Image-ExifTool-9.33/t/FLIR_2.out +104 -0
  419. data/bin/Image-ExifTool-9.33/t/FLIR_3.out +47 -0
  420. data/bin/Image-ExifTool-9.33/t/Flash.t +37 -0
  421. data/bin/Image-ExifTool-9.33/t/FlashPix.t +30 -0
  422. data/bin/Image-ExifTool-9.33/t/FlashPix_2.out +48 -0
  423. data/bin/Image-ExifTool-9.33/t/Flash_2.out +20 -0
  424. data/bin/Image-ExifTool-9.33/t/Flash_3.out +53 -0
  425. data/bin/Image-ExifTool-9.33/t/Font.t +30 -0
  426. data/bin/Image-ExifTool-9.33/t/Font_2.out +23 -0
  427. data/bin/Image-ExifTool-9.33/t/Font_3.out +35 -0
  428. data/bin/Image-ExifTool-9.33/t/Font_4.out +26 -0
  429. data/bin/Image-ExifTool-9.33/t/Font_5.out +26 -0
  430. data/bin/Image-ExifTool-9.33/t/Font_6.out +36 -0
  431. data/bin/Image-ExifTool-9.33/t/Font_7.out +36 -0
  432. data/bin/Image-ExifTool-9.33/t/FotoStation.t +38 -0
  433. data/bin/Image-ExifTool-9.33/t/FotoStation_2.out +39 -0
  434. data/bin/Image-ExifTool-9.33/t/FotoStation_3.out +3 -0
  435. data/bin/Image-ExifTool-9.33/t/FujiFilm.t +78 -0
  436. data/bin/Image-ExifTool-9.33/t/FujiFilm_2.out +87 -0
  437. data/bin/Image-ExifTool-9.33/t/FujiFilm_3.out +88 -0
  438. data/bin/Image-ExifTool-9.33/t/FujiFilm_4.out +117 -0
  439. data/bin/Image-ExifTool-9.33/t/FujiFilm_5.out +1 -0
  440. data/bin/Image-ExifTool-9.33/t/GE.t +46 -0
  441. data/bin/Image-ExifTool-9.33/t/GE_2.out +84 -0
  442. data/bin/Image-ExifTool-9.33/t/GE_3.out +84 -0
  443. data/bin/Image-ExifTool-9.33/t/GIF.t +83 -0
  444. data/bin/Image-ExifTool-9.33/t/GIF_2.out +40 -0
  445. data/bin/Image-ExifTool-9.33/t/GIF_3.out +41 -0
  446. data/bin/Image-ExifTool-9.33/t/GIF_4.out +16 -0
  447. data/bin/Image-ExifTool-9.33/t/GIMP.t +27 -0
  448. data/bin/Image-ExifTool-9.33/t/GIMP_2.out +63 -0
  449. data/bin/Image-ExifTool-9.33/t/GPS.t +42 -0
  450. data/bin/Image-ExifTool-9.33/t/GPS_2.out +94 -0
  451. data/bin/Image-ExifTool-9.33/t/GPS_3.out +96 -0
  452. data/bin/Image-ExifTool-9.33/t/GeoTiff.t +36 -0
  453. data/bin/Image-ExifTool-9.33/t/GeoTiff_2.out +36 -0
  454. data/bin/Image-ExifTool-9.33/t/GeoTiff_3.out +36 -0
  455. data/bin/Image-ExifTool-9.33/t/Geotag.t +164 -0
  456. data/bin/Image-ExifTool-9.33/t/Geotag_2.out +9 -0
  457. data/bin/Image-ExifTool-9.33/t/Geotag_3.out +6 -0
  458. data/bin/Image-ExifTool-9.33/t/Geotag_5.out +1 -0
  459. data/bin/Image-ExifTool-9.33/t/Geotag_6.out +9 -0
  460. data/bin/Image-ExifTool-9.33/t/Geotag_7.out +53 -0
  461. data/bin/Image-ExifTool-9.33/t/Geotag_8.out +15 -0
  462. data/bin/Image-ExifTool-9.33/t/HTML.t +28 -0
  463. data/bin/Image-ExifTool-9.33/t/HTML_2.out +68 -0
  464. data/bin/Image-ExifTool-9.33/t/IPTC.t +157 -0
  465. data/bin/Image-ExifTool-9.33/t/IPTC_2.out +58 -0
  466. data/bin/Image-ExifTool-9.33/t/IPTC_4.out +56 -0
  467. data/bin/Image-ExifTool-9.33/t/IPTC_5.out +1 -0
  468. data/bin/Image-ExifTool-9.33/t/IPTC_6.out +2 -0
  469. data/bin/Image-ExifTool-9.33/t/IPTC_7.out +1 -0
  470. data/bin/Image-ExifTool-9.33/t/IPTC_8.out +20 -0
  471. data/bin/Image-ExifTool-9.33/t/ITC.t +28 -0
  472. data/bin/Image-ExifTool-9.33/t/ITC_2.out +19 -0
  473. data/bin/Image-ExifTool-9.33/t/InDesign.t +61 -0
  474. data/bin/Image-ExifTool-9.33/t/InDesign_2.out +19 -0
  475. data/bin/Image-ExifTool-9.33/t/InDesign_3.out +21 -0
  476. data/bin/Image-ExifTool-9.33/t/InDesign_4.out +11 -0
  477. data/bin/Image-ExifTool-9.33/t/JVC.t +36 -0
  478. data/bin/Image-ExifTool-9.33/t/JVC_2.out +3 -0
  479. data/bin/Image-ExifTool-9.33/t/JVC_3.out +3 -0
  480. data/bin/Image-ExifTool-9.33/t/Jpeg2000.t +49 -0
  481. data/bin/Image-ExifTool-9.33/t/Jpeg2000_2.out +63 -0
  482. data/bin/Image-ExifTool-9.33/t/Jpeg2000_3.out +51 -0
  483. data/bin/Image-ExifTool-9.33/t/Jpeg2000_4.out +15 -0
  484. data/bin/Image-ExifTool-9.33/t/Kodak.t +40 -0
  485. data/bin/Image-ExifTool-9.33/t/Kodak_2.out +109 -0
  486. data/bin/Image-ExifTool-9.33/t/Kodak_3.out +119 -0
  487. data/bin/Image-ExifTool-9.33/t/KyoceraRaw.t +28 -0
  488. data/bin/Image-ExifTool-9.33/t/KyoceraRaw_2.out +27 -0
  489. data/bin/Image-ExifTool-9.33/t/LNK.t +28 -0
  490. data/bin/Image-ExifTool-9.33/t/LNK_2.out +45 -0
  491. data/bin/Image-ExifTool-9.33/t/Lang.t +40 -0
  492. data/bin/Image-ExifTool-9.33/t/Lang_1.out +1 -0
  493. data/bin/Image-ExifTool-9.33/t/Lang_10.out +46 -0
  494. data/bin/Image-ExifTool-9.33/t/Lang_11.out +46 -0
  495. data/bin/Image-ExifTool-9.33/t/Lang_12.out +46 -0
  496. data/bin/Image-ExifTool-9.33/t/Lang_13.out +46 -0
  497. data/bin/Image-ExifTool-9.33/t/Lang_14.out +46 -0
  498. data/bin/Image-ExifTool-9.33/t/Lang_15.out +46 -0
  499. data/bin/Image-ExifTool-9.33/t/Lang_16.out +46 -0
  500. data/bin/Image-ExifTool-9.33/t/Lang_17.out +46 -0
  501. data/bin/Image-ExifTool-9.33/t/Lang_18.out +46 -0
  502. data/bin/Image-ExifTool-9.33/t/Lang_2.out +46 -0
  503. data/bin/Image-ExifTool-9.33/t/Lang_3.out +46 -0
  504. data/bin/Image-ExifTool-9.33/t/Lang_4.out +46 -0
  505. data/bin/Image-ExifTool-9.33/t/Lang_5.out +46 -0
  506. data/bin/Image-ExifTool-9.33/t/Lang_6.out +46 -0
  507. data/bin/Image-ExifTool-9.33/t/Lang_7.out +46 -0
  508. data/bin/Image-ExifTool-9.33/t/Lang_8.out +46 -0
  509. data/bin/Image-ExifTool-9.33/t/Lang_9.out +46 -0
  510. data/bin/Image-ExifTool-9.33/t/M2TS.t +29 -0
  511. data/bin/Image-ExifTool-9.33/t/M2TS_2.out +27 -0
  512. data/bin/Image-ExifTool-9.33/t/MIE.t +82 -0
  513. data/bin/Image-ExifTool-9.33/t/MIE_2.out +67 -0
  514. data/bin/Image-ExifTool-9.33/t/MIE_3.out +134 -0
  515. data/bin/Image-ExifTool-9.33/t/MIE_5.out +1 -0
  516. data/bin/Image-ExifTool-9.33/t/MIE_6.out +1 -0
  517. data/bin/Image-ExifTool-9.33/t/MIFF.t +28 -0
  518. data/bin/Image-ExifTool-9.33/t/MIFF_2.out +108 -0
  519. data/bin/Image-ExifTool-9.33/t/MP3.t +29 -0
  520. data/bin/Image-ExifTool-9.33/t/MP3_2.out +45 -0
  521. data/bin/Image-ExifTool-9.33/t/MWG.t +72 -0
  522. data/bin/Image-ExifTool-9.33/t/MWG_2.out +13 -0
  523. data/bin/Image-ExifTool-9.33/t/MWG_3.out +8 -0
  524. data/bin/Image-ExifTool-9.33/t/MWG_4.out +5 -0
  525. data/bin/Image-ExifTool-9.33/t/MWG_5.out +22 -0
  526. data/bin/Image-ExifTool-9.33/t/MXF.t +27 -0
  527. data/bin/Image-ExifTool-9.33/t/MXF_2.out +78 -0
  528. data/bin/Image-ExifTool-9.33/t/Matroska.t +29 -0
  529. data/bin/Image-ExifTool-9.33/t/Matroska_2.out +64 -0
  530. data/bin/Image-ExifTool-9.33/t/Minolta.t +50 -0
  531. data/bin/Image-ExifTool-9.33/t/Minolta_2.out +133 -0
  532. data/bin/Image-ExifTool-9.33/t/Minolta_3.out +146 -0
  533. data/bin/Image-ExifTool-9.33/t/Minolta_4.out +148 -0
  534. data/bin/Image-ExifTool-9.33/t/Nikon.t +114 -0
  535. data/bin/Image-ExifTool-9.33/t/Nikon_2.out +82 -0
  536. data/bin/Image-ExifTool-9.33/t/Nikon_3.out +98 -0
  537. data/bin/Image-ExifTool-9.33/t/Nikon_4.out +174 -0
  538. data/bin/Image-ExifTool-9.33/t/Nikon_5.out +167 -0
  539. data/bin/Image-ExifTool-9.33/t/Nikon_7.out +260 -0
  540. data/bin/Image-ExifTool-9.33/t/Nikon_8.out +4 -0
  541. data/bin/Image-ExifTool-9.33/t/Olympus.t +85 -0
  542. data/bin/Image-ExifTool-9.33/t/Olympus_2.out +79 -0
  543. data/bin/Image-ExifTool-9.33/t/Olympus_3.out +81 -0
  544. data/bin/Image-ExifTool-9.33/t/Olympus_4.out +192 -0
  545. data/bin/Image-ExifTool-9.33/t/Olympus_5.out +264 -0
  546. data/bin/Image-ExifTool-9.33/t/Olympus_6.out +151 -0
  547. data/bin/Image-ExifTool-9.33/t/Olympus_7.out +482 -0
  548. data/bin/Image-ExifTool-9.33/t/OpenEXR.t +28 -0
  549. data/bin/Image-ExifTool-9.33/t/OpenEXR_2.out +23 -0
  550. data/bin/Image-ExifTool-9.33/t/PDF.t +295 -0
  551. data/bin/Image-ExifTool-9.33/t/PDF_10.out +10 -0
  552. data/bin/Image-ExifTool-9.33/t/PDF_11.out +10 -0
  553. data/bin/Image-ExifTool-9.33/t/PDF_12.out +9 -0
  554. data/bin/Image-ExifTool-9.33/t/PDF_14.out +5 -0
  555. data/bin/Image-ExifTool-9.33/t/PDF_15.out +6 -0
  556. data/bin/Image-ExifTool-9.33/t/PDF_16.out +4 -0
  557. data/bin/Image-ExifTool-9.33/t/PDF_17.out +4 -0
  558. data/bin/Image-ExifTool-9.33/t/PDF_18.out +5 -0
  559. data/bin/Image-ExifTool-9.33/t/PDF_19.out +6 -0
  560. data/bin/Image-ExifTool-9.33/t/PDF_2.out +117 -0
  561. data/bin/Image-ExifTool-9.33/t/PDF_20.out +4 -0
  562. data/bin/Image-ExifTool-9.33/t/PDF_22.out +3 -0
  563. data/bin/Image-ExifTool-9.33/t/PDF_4.out +12 -0
  564. data/bin/Image-ExifTool-9.33/t/PDF_5.out +8 -0
  565. data/bin/Image-ExifTool-9.33/t/PDF_6.out +9 -0
  566. data/bin/Image-ExifTool-9.33/t/PDF_7.out +11 -0
  567. data/bin/Image-ExifTool-9.33/t/PDF_8.out +9 -0
  568. data/bin/Image-ExifTool-9.33/t/PDF_9.out +9 -0
  569. data/bin/Image-ExifTool-9.33/t/PGF.t +28 -0
  570. data/bin/Image-ExifTool-9.33/t/PGF_2.out +32 -0
  571. data/bin/Image-ExifTool-9.33/t/PICT.t +28 -0
  572. data/bin/Image-ExifTool-9.33/t/PICT_2.out +15 -0
  573. data/bin/Image-ExifTool-9.33/t/PLIST.t +31 -0
  574. data/bin/Image-ExifTool-9.33/t/PLIST_2.out +20 -0
  575. data/bin/Image-ExifTool-9.33/t/PLIST_3.out +20 -0
  576. data/bin/Image-ExifTool-9.33/t/PNG.t +75 -0
  577. data/bin/Image-ExifTool-9.33/t/PNG_2.out +22 -0
  578. data/bin/Image-ExifTool-9.33/t/PNG_3.out +118 -0
  579. data/bin/Image-ExifTool-9.33/t/PNG_4.out +12 -0
  580. data/bin/Image-ExifTool-9.33/t/PPM.t +40 -0
  581. data/bin/Image-ExifTool-9.33/t/PPM_2.out +15 -0
  582. data/bin/Image-ExifTool-9.33/t/PPM_3.out +9 -0
  583. data/bin/Image-ExifTool-9.33/t/PSP.t +28 -0
  584. data/bin/Image-ExifTool-9.33/t/PSP_2.out +32 -0
  585. data/bin/Image-ExifTool-9.33/t/Panasonic.t +60 -0
  586. data/bin/Image-ExifTool-9.33/t/Panasonic_2.out +99 -0
  587. data/bin/Image-ExifTool-9.33/t/Panasonic_3.out +119 -0
  588. data/bin/Image-ExifTool-9.33/t/Panasonic_4.out +177 -0
  589. data/bin/Image-ExifTool-9.33/t/Panasonic_5.out +228 -0
  590. data/bin/Image-ExifTool-9.33/t/Pentax.t +50 -0
  591. data/bin/Image-ExifTool-9.33/t/Pentax_2.out +219 -0
  592. data/bin/Image-ExifTool-9.33/t/Pentax_3.out +262 -0
  593. data/bin/Image-ExifTool-9.33/t/Pentax_4.out +123 -0
  594. data/bin/Image-ExifTool-9.33/t/PhotoCD.t +28 -0
  595. data/bin/Image-ExifTool-9.33/t/PhotoCD_2.out +35 -0
  596. data/bin/Image-ExifTool-9.33/t/PhotoMechanic.t +38 -0
  597. data/bin/Image-ExifTool-9.33/t/PhotoMechanic_2.out +81 -0
  598. data/bin/Image-ExifTool-9.33/t/PhotoMechanic_3.out +2 -0
  599. data/bin/Image-ExifTool-9.33/t/Photoshop.t +42 -0
  600. data/bin/Image-ExifTool-9.33/t/Photoshop_2.out +96 -0
  601. data/bin/Image-ExifTool-9.33/t/Photoshop_3.out +108 -0
  602. data/bin/Image-ExifTool-9.33/t/PostScript.t +49 -0
  603. data/bin/Image-ExifTool-9.33/t/PostScript_2.out +64 -0
  604. data/bin/Image-ExifTool-9.33/t/PostScript_3.out +132 -0
  605. data/bin/Image-ExifTool-9.33/t/QuickTime.t +31 -0
  606. data/bin/Image-ExifTool-9.33/t/QuickTime_2.out +128 -0
  607. data/bin/Image-ExifTool-9.33/t/QuickTime_3.out +69 -0
  608. data/bin/Image-ExifTool-9.33/t/RIFF.t +31 -0
  609. data/bin/Image-ExifTool-9.33/t/RIFF_2.out +24 -0
  610. data/bin/Image-ExifTool-9.33/t/RIFF_3.out +52 -0
  611. data/bin/Image-ExifTool-9.33/t/RIFF_4.out +16 -0
  612. data/bin/Image-ExifTool-9.33/t/RTF.t +27 -0
  613. data/bin/Image-ExifTool-9.33/t/RTF_2.out +20 -0
  614. data/bin/Image-ExifTool-9.33/t/Radiance.t +28 -0
  615. data/bin/Image-ExifTool-9.33/t/Radiance_2.out +22 -0
  616. data/bin/Image-ExifTool-9.33/t/Real.t +46 -0
  617. data/bin/Image-ExifTool-9.33/t/Real_2.out +68 -0
  618. data/bin/Image-ExifTool-9.33/t/Real_3.out +18 -0
  619. data/bin/Image-ExifTool-9.33/t/Real_4.out +11 -0
  620. data/bin/Image-ExifTool-9.33/t/Ricoh.t +47 -0
  621. data/bin/Image-ExifTool-9.33/t/Ricoh_2.out +70 -0
  622. data/bin/Image-ExifTool-9.33/t/Ricoh_3.out +98 -0
  623. data/bin/Image-ExifTool-9.33/t/Ricoh_4.out +112 -0
  624. data/bin/Image-ExifTool-9.33/t/Sanyo.t +39 -0
  625. data/bin/Image-ExifTool-9.33/t/Sanyo_2.out +101 -0
  626. data/bin/Image-ExifTool-9.33/t/Sanyo_3.out +111 -0
  627. data/bin/Image-ExifTool-9.33/t/Sigma.t +60 -0
  628. data/bin/Image-ExifTool-9.33/t/Sigma_2.out +91 -0
  629. data/bin/Image-ExifTool-9.33/t/Sigma_3.out +94 -0
  630. data/bin/Image-ExifTool-9.33/t/Sigma_4.out +63 -0
  631. data/bin/Image-ExifTool-9.33/t/Sigma_5.out +192 -0
  632. data/bin/Image-ExifTool-9.33/t/Sony.t +62 -0
  633. data/bin/Image-ExifTool-9.33/t/Sony_2.out +84 -0
  634. data/bin/Image-ExifTool-9.33/t/Sony_3.out +85 -0
  635. data/bin/Image-ExifTool-9.33/t/Sony_5.out +32 -0
  636. data/bin/Image-ExifTool-9.33/t/TestLib.pm +417 -0
  637. data/bin/Image-ExifTool-9.33/t/Unknown.t +36 -0
  638. data/bin/Image-ExifTool-9.33/t/Unknown_2.out +90 -0
  639. data/bin/Image-ExifTool-9.33/t/Unknown_3.out +90 -0
  640. data/bin/Image-ExifTool-9.33/t/Vorbis.t +28 -0
  641. data/bin/Image-ExifTool-9.33/t/Vorbis_2.out +28 -0
  642. data/bin/Image-ExifTool-9.33/t/Writer.t +913 -0
  643. data/bin/Image-ExifTool-9.33/t/Writer_10.out +240 -0
  644. data/bin/Image-ExifTool-9.33/t/Writer_11.out +37 -0
  645. data/bin/Image-ExifTool-9.33/t/Writer_13.out +160 -0
  646. data/bin/Image-ExifTool-9.33/t/Writer_14.out +67 -0
  647. data/bin/Image-ExifTool-9.33/t/Writer_15.out +171 -0
  648. data/bin/Image-ExifTool-9.33/t/Writer_16.out +1 -0
  649. data/bin/Image-ExifTool-9.33/t/Writer_17.out +1 -0
  650. data/bin/Image-ExifTool-9.33/t/Writer_18.out +3 -0
  651. data/bin/Image-ExifTool-9.33/t/Writer_19.out +34 -0
  652. data/bin/Image-ExifTool-9.33/t/Writer_2.out +168 -0
  653. data/bin/Image-ExifTool-9.33/t/Writer_22.out +4 -0
  654. data/bin/Image-ExifTool-9.33/t/Writer_24.out +1 -0
  655. data/bin/Image-ExifTool-9.33/t/Writer_25.out +38 -0
  656. data/bin/Image-ExifTool-9.33/t/Writer_26.out +32 -0
  657. data/bin/Image-ExifTool-9.33/t/Writer_27.out +14 -0
  658. data/bin/Image-ExifTool-9.33/t/Writer_28.out +1 -0
  659. data/bin/Image-ExifTool-9.33/t/Writer_29.out +2 -0
  660. data/bin/Image-ExifTool-9.33/t/Writer_30.out +2 -0
  661. data/bin/Image-ExifTool-9.33/t/Writer_31.out +97 -0
  662. data/bin/Image-ExifTool-9.33/t/Writer_32.out +3 -0
  663. data/bin/Image-ExifTool-9.33/t/Writer_33.out +3 -0
  664. data/bin/Image-ExifTool-9.33/t/Writer_34.out +3 -0
  665. data/bin/Image-ExifTool-9.33/t/Writer_35.out +187 -0
  666. data/bin/Image-ExifTool-9.33/t/Writer_36.out +2 -0
  667. data/bin/Image-ExifTool-9.33/t/Writer_37.out +2 -0
  668. data/bin/Image-ExifTool-9.33/t/Writer_38.out +62 -0
  669. data/bin/Image-ExifTool-9.33/t/Writer_39.out +4 -0
  670. data/bin/Image-ExifTool-9.33/t/Writer_4.out +85 -0
  671. data/bin/Image-ExifTool-9.33/t/Writer_40.out +4 -0
  672. data/bin/Image-ExifTool-9.33/t/Writer_41.out +3 -0
  673. data/bin/Image-ExifTool-9.33/t/Writer_42.out +5 -0
  674. data/bin/Image-ExifTool-9.33/t/Writer_43.out +5 -0
  675. data/bin/Image-ExifTool-9.33/t/Writer_44.out +2 -0
  676. data/bin/Image-ExifTool-9.33/t/Writer_45.out +1 -0
  677. data/bin/Image-ExifTool-9.33/t/Writer_46.out +77 -0
  678. data/bin/Image-ExifTool-9.33/t/Writer_47.out +56 -0
  679. data/bin/Image-ExifTool-9.33/t/Writer_48.out +29 -0
  680. data/bin/Image-ExifTool-9.33/t/Writer_50.out +3 -0
  681. data/bin/Image-ExifTool-9.33/t/Writer_51.out +386 -0
  682. data/bin/Image-ExifTool-9.33/t/Writer_6.out +182 -0
  683. data/bin/Image-ExifTool-9.33/t/Writer_7.out +149 -0
  684. data/bin/Image-ExifTool-9.33/t/Writer_9.out +237 -0
  685. data/bin/Image-ExifTool-9.33/t/XMP.t +521 -0
  686. data/bin/Image-ExifTool-9.33/t/XMP_10.out +33 -0
  687. data/bin/Image-ExifTool-9.33/t/XMP_11.out +59 -0
  688. data/bin/Image-ExifTool-9.33/t/XMP_12.out +4 -0
  689. data/bin/Image-ExifTool-9.33/t/XMP_13.out +5 -0
  690. data/bin/Image-ExifTool-9.33/t/XMP_14.out +3 -0
  691. data/bin/Image-ExifTool-9.33/t/XMP_15.out +3 -0
  692. data/bin/Image-ExifTool-9.33/t/XMP_16.out +5 -0
  693. data/bin/Image-ExifTool-9.33/t/XMP_17.out +6 -0
  694. data/bin/Image-ExifTool-9.33/t/XMP_18.out +10 -0
  695. data/bin/Image-ExifTool-9.33/t/XMP_19.out +35 -0
  696. data/bin/Image-ExifTool-9.33/t/XMP_2.out +138 -0
  697. data/bin/Image-ExifTool-9.33/t/XMP_20.out +35 -0
  698. data/bin/Image-ExifTool-9.33/t/XMP_21.out +38 -0
  699. data/bin/Image-ExifTool-9.33/t/XMP_22.out +38 -0
  700. data/bin/Image-ExifTool-9.33/t/XMP_23.out +9 -0
  701. data/bin/Image-ExifTool-9.33/t/XMP_24.out +31 -0
  702. data/bin/Image-ExifTool-9.33/t/XMP_25.out +28 -0
  703. data/bin/Image-ExifTool-9.33/t/XMP_26.out +52 -0
  704. data/bin/Image-ExifTool-9.33/t/XMP_27.out +93 -0
  705. data/bin/Image-ExifTool-9.33/t/XMP_28.out +44 -0
  706. data/bin/Image-ExifTool-9.33/t/XMP_29.out +24 -0
  707. data/bin/Image-ExifTool-9.33/t/XMP_3.out +136 -0
  708. data/bin/Image-ExifTool-9.33/t/XMP_30.out +90 -0
  709. data/bin/Image-ExifTool-9.33/t/XMP_31.out +19 -0
  710. data/bin/Image-ExifTool-9.33/t/XMP_32.out +2 -0
  711. data/bin/Image-ExifTool-9.33/t/XMP_34.out +2 -0
  712. data/bin/Image-ExifTool-9.33/t/XMP_36.out +18 -0
  713. data/bin/Image-ExifTool-9.33/t/XMP_37.out +35 -0
  714. data/bin/Image-ExifTool-9.33/t/XMP_39.out +44 -0
  715. data/bin/Image-ExifTool-9.33/t/XMP_40.out +3 -0
  716. data/bin/Image-ExifTool-9.33/t/XMP_41.out +175 -0
  717. data/bin/Image-ExifTool-9.33/t/XMP_5.out +29 -0
  718. data/bin/Image-ExifTool-9.33/t/XMP_6.out +87 -0
  719. data/bin/Image-ExifTool-9.33/t/XMP_7.out +118 -0
  720. data/bin/Image-ExifTool-9.33/t/XMP_8.out +17 -0
  721. data/bin/Image-ExifTool-9.33/t/XMP_9.out +36 -0
  722. data/bin/Image-ExifTool-9.33/t/ZIP.t +69 -0
  723. data/bin/Image-ExifTool-9.33/t/ZIP_2.out +18 -0
  724. data/bin/Image-ExifTool-9.33/t/ZIP_3.out +17 -0
  725. data/bin/Image-ExifTool-9.33/t/ZIP_4.out +213 -0
  726. data/bin/Image-ExifTool-9.33/t/ZIP_5.out +134 -0
  727. data/bin/Image-ExifTool-9.33/t/ZIP_6.out +49 -0
  728. data/bin/Image-ExifTool-9.33/t/ZIP_7.out +28 -0
  729. data/bin/Image-ExifTool-9.33/t/images/AFCP.jpg +0 -0
  730. data/bin/Image-ExifTool-9.33/t/images/AIFF.aif +0 -0
  731. data/bin/Image-ExifTool-9.33/t/images/APE.ape +0 -0
  732. data/bin/Image-ExifTool-9.33/t/images/APE.mpc +0 -0
  733. data/bin/Image-ExifTool-9.33/t/images/ASF.wmv +0 -0
  734. data/bin/Image-ExifTool-9.33/t/images/BMP.bmp +0 -0
  735. data/bin/Image-ExifTool-9.33/t/images/BigTIFF.btf +0 -0
  736. data/bin/Image-ExifTool-9.33/t/images/Canon.jpg +0 -0
  737. data/bin/Image-ExifTool-9.33/t/images/Canon1DmkIII.jpg +0 -0
  738. data/bin/Image-ExifTool-9.33/t/images/CanonRaw.cr2 +0 -0
  739. data/bin/Image-ExifTool-9.33/t/images/CanonRaw.crw +0 -0
  740. data/bin/Image-ExifTool-9.33/t/images/CanonVRD.vrd +0 -0
  741. data/bin/Image-ExifTool-9.33/t/images/CaptureOne.eip +0 -0
  742. data/bin/Image-ExifTool-9.33/t/images/Casio.jpg +0 -0
  743. data/bin/Image-ExifTool-9.33/t/images/Casio2.jpg +0 -0
  744. data/bin/Image-ExifTool-9.33/t/images/CasioQVCI.jpg +0 -0
  745. data/bin/Image-ExifTool-9.33/t/images/DICOM.dcm +0 -0
  746. data/bin/Image-ExifTool-9.33/t/images/DNG.dng +0 -0
  747. data/bin/Image-ExifTool-9.33/t/images/DV.dv +0 -0
  748. data/bin/Image-ExifTool-9.33/t/images/DjVu.djvu +0 -0
  749. data/bin/Image-ExifTool-9.33/t/images/EXE.elf +0 -0
  750. data/bin/Image-ExifTool-9.33/t/images/EXE.exe +0 -0
  751. data/bin/Image-ExifTool-9.33/t/images/EXE.macho +0 -0
  752. data/bin/Image-ExifTool-9.33/t/images/ExifTool.jpg +0 -0
  753. data/bin/Image-ExifTool-9.33/t/images/ExifTool.tif +0 -0
  754. data/bin/Image-ExifTool-9.33/t/images/ExtendedXMP.jpg +0 -0
  755. data/bin/Image-ExifTool-9.33/t/images/FLAC.flac +0 -0
  756. data/bin/Image-ExifTool-9.33/t/images/FLAC.ogg +0 -0
  757. data/bin/Image-ExifTool-9.33/t/images/FLIR.fpf +0 -0
  758. data/bin/Image-ExifTool-9.33/t/images/FLIR.jpg +0 -0
  759. data/bin/Image-ExifTool-9.33/t/images/Flash.flv +0 -0
  760. data/bin/Image-ExifTool-9.33/t/images/Flash.swf +0 -0
  761. data/bin/Image-ExifTool-9.33/t/images/FlashPix.ppt +0 -0
  762. data/bin/Image-ExifTool-9.33/t/images/Font.afm +28 -0
  763. data/bin/Image-ExifTool-9.33/t/images/Font.dfont +0 -0
  764. data/bin/Image-ExifTool-9.33/t/images/Font.pfa +38 -0
  765. data/bin/Image-ExifTool-9.33/t/images/Font.pfb +0 -0
  766. data/bin/Image-ExifTool-9.33/t/images/Font.pfm +0 -0
  767. data/bin/Image-ExifTool-9.33/t/images/Font.ttf +0 -0
  768. data/bin/Image-ExifTool-9.33/t/images/FotoStation.jpg +0 -0
  769. data/bin/Image-ExifTool-9.33/t/images/FujiFilm.jpg +0 -0
  770. data/bin/Image-ExifTool-9.33/t/images/FujiFilm.raf +0 -0
  771. data/bin/Image-ExifTool-9.33/t/images/GE.jpg +0 -0
  772. data/bin/Image-ExifTool-9.33/t/images/GIF.gif +0 -0
  773. data/bin/Image-ExifTool-9.33/t/images/GIMP.xcf +0 -0
  774. data/bin/Image-ExifTool-9.33/t/images/GPS.jpg +0 -0
  775. data/bin/Image-ExifTool-9.33/t/images/GeoTiff.tif +0 -0
  776. data/bin/Image-ExifTool-9.33/t/images/Geotag.gpx +23 -0
  777. data/bin/Image-ExifTool-9.33/t/images/Geotag.igc +24 -0
  778. data/bin/Image-ExifTool-9.33/t/images/Geotag.log +13 -0
  779. data/bin/Image-ExifTool-9.33/t/images/Geotag.xml +23 -0
  780. data/bin/Image-ExifTool-9.33/t/images/Geotag2.log +7 -0
  781. data/bin/Image-ExifTool-9.33/t/images/HTML.html +77 -0
  782. data/bin/Image-ExifTool-9.33/t/images/IPTC.jpg +0 -0
  783. data/bin/Image-ExifTool-9.33/t/images/ITC.itc +0 -0
  784. data/bin/Image-ExifTool-9.33/t/images/InDesign.indd +0 -0
  785. data/bin/Image-ExifTool-9.33/t/images/JVC.jpg +0 -0
  786. data/bin/Image-ExifTool-9.33/t/images/JVC2.jpg +0 -0
  787. data/bin/Image-ExifTool-9.33/t/images/Jpeg2000.j2c +0 -0
  788. data/bin/Image-ExifTool-9.33/t/images/Jpeg2000.jp2 +0 -0
  789. data/bin/Image-ExifTool-9.33/t/images/Kodak.jpg +0 -0
  790. data/bin/Image-ExifTool-9.33/t/images/KyoceraRaw.raw +0 -0
  791. data/bin/Image-ExifTool-9.33/t/images/LNK.lnk +0 -0
  792. data/bin/Image-ExifTool-9.33/t/images/M2TS.mts +0 -0
  793. data/bin/Image-ExifTool-9.33/t/images/MIE.mie +0 -0
  794. data/bin/Image-ExifTool-9.33/t/images/MIFF.miff +0 -0
  795. data/bin/Image-ExifTool-9.33/t/images/MP3.mp3 +0 -0
  796. data/bin/Image-ExifTool-9.33/t/images/MWG.jpg +0 -0
  797. data/bin/Image-ExifTool-9.33/t/images/MXF.mxf +0 -0
  798. data/bin/Image-ExifTool-9.33/t/images/Matroska.mkv +0 -0
  799. data/bin/Image-ExifTool-9.33/t/images/Minolta.jpg +0 -0
  800. data/bin/Image-ExifTool-9.33/t/images/Minolta.mrw +0 -0
  801. data/bin/Image-ExifTool-9.33/t/images/Nikon.jpg +0 -0
  802. data/bin/Image-ExifTool-9.33/t/images/Nikon.nef +0 -0
  803. data/bin/Image-ExifTool-9.33/t/images/NikonD2Hs.jpg +0 -0
  804. data/bin/Image-ExifTool-9.33/t/images/NikonD70.jpg +0 -0
  805. data/bin/Image-ExifTool-9.33/t/images/OOXML.docx +0 -0
  806. data/bin/Image-ExifTool-9.33/t/images/Olympus.jpg +0 -0
  807. data/bin/Image-ExifTool-9.33/t/images/Olympus2.jpg +0 -0
  808. data/bin/Image-ExifTool-9.33/t/images/OlympusE1.jpg +0 -0
  809. data/bin/Image-ExifTool-9.33/t/images/OpenDoc.ods +0 -0
  810. data/bin/Image-ExifTool-9.33/t/images/OpenEXR.exr +0 -0
  811. data/bin/Image-ExifTool-9.33/t/images/PDF.pdf +0 -0
  812. data/bin/Image-ExifTool-9.33/t/images/PDF2.pdf +0 -0
  813. data/bin/Image-ExifTool-9.33/t/images/PGF.pgf +0 -0
  814. data/bin/Image-ExifTool-9.33/t/images/PICT.pict +0 -0
  815. data/bin/Image-ExifTool-9.33/t/images/PLIST-bin.plist +0 -0
  816. data/bin/Image-ExifTool-9.33/t/images/PLIST-xml.plist +35 -0
  817. data/bin/Image-ExifTool-9.33/t/images/PNG.png +0 -0
  818. data/bin/Image-ExifTool-9.33/t/images/PPM.ppm +5 -0
  819. data/bin/Image-ExifTool-9.33/t/images/PSP.psp +0 -0
  820. data/bin/Image-ExifTool-9.33/t/images/Panasonic.jpg +0 -0
  821. data/bin/Image-ExifTool-9.33/t/images/Panasonic.rw2 +0 -0
  822. data/bin/Image-ExifTool-9.33/t/images/Pentax.avi +0 -0
  823. data/bin/Image-ExifTool-9.33/t/images/Pentax.jpg +0 -0
  824. data/bin/Image-ExifTool-9.33/t/images/PhotoCD.pcd +0 -0
  825. data/bin/Image-ExifTool-9.33/t/images/PhotoMechanic.jpg +0 -0
  826. data/bin/Image-ExifTool-9.33/t/images/Photoshop.psd +0 -0
  827. data/bin/Image-ExifTool-9.33/t/images/PostScript.eps +108 -0
  828. data/bin/Image-ExifTool-9.33/t/images/QuickTime.m4a +0 -0
  829. data/bin/Image-ExifTool-9.33/t/images/QuickTime.mov +0 -0
  830. data/bin/Image-ExifTool-9.33/t/images/RIFF.avi +0 -0
  831. data/bin/Image-ExifTool-9.33/t/images/RIFF.wav +0 -0
  832. data/bin/Image-ExifTool-9.33/t/images/RIFF.webp +0 -0
  833. data/bin/Image-ExifTool-9.33/t/images/RTF.rtf +25 -0
  834. data/bin/Image-ExifTool-9.33/t/images/Radiance.hdr +0 -0
  835. data/bin/Image-ExifTool-9.33/t/images/Real.ra +0 -0
  836. data/bin/Image-ExifTool-9.33/t/images/Real.ram +1 -0
  837. data/bin/Image-ExifTool-9.33/t/images/Real.rm +0 -0
  838. data/bin/Image-ExifTool-9.33/t/images/Ricoh.jpg +0 -0
  839. data/bin/Image-ExifTool-9.33/t/images/Ricoh2.jpg +0 -0
  840. data/bin/Image-ExifTool-9.33/t/images/Sanyo.jpg +0 -0
  841. data/bin/Image-ExifTool-9.33/t/images/Sigma.jpg +0 -0
  842. data/bin/Image-ExifTool-9.33/t/images/Sigma.x3f +0 -0
  843. data/bin/Image-ExifTool-9.33/t/images/SigmaDP2.x3f +0 -0
  844. data/bin/Image-ExifTool-9.33/t/images/Sony.jpg +0 -0
  845. data/bin/Image-ExifTool-9.33/t/images/Sony.pmp +0 -0
  846. data/bin/Image-ExifTool-9.33/t/images/Unknown.jpg +0 -0
  847. data/bin/Image-ExifTool-9.33/t/images/Vorbis.ogg +0 -0
  848. data/bin/Image-ExifTool-9.33/t/images/Writer.jpg +0 -0
  849. data/bin/Image-ExifTool-9.33/t/images/XMP.inx +108 -0
  850. data/bin/Image-ExifTool-9.33/t/images/XMP.jpg +0 -0
  851. data/bin/Image-ExifTool-9.33/t/images/XMP.svg +33 -0
  852. data/bin/Image-ExifTool-9.33/t/images/XMP.xml +98 -0
  853. data/bin/Image-ExifTool-9.33/t/images/XMP.xmp +99 -0
  854. data/bin/Image-ExifTool-9.33/t/images/XMP2.xmp +25 -0
  855. data/bin/Image-ExifTool-9.33/t/images/XMP3.xmp +43 -0
  856. data/bin/Image-ExifTool-9.33/t/images/XMP4.xmp +93 -0
  857. data/bin/Image-ExifTool-9.33/t/images/XMP5.xmp +158 -0
  858. data/bin/Image-ExifTool-9.33/t/images/ZIP.gz +0 -0
  859. data/bin/Image-ExifTool-9.33/t/images/ZIP.zip +0 -0
  860. data/bin/Image-ExifTool-9.33/t/images/iWork.numbers +0 -0
  861. data/lib/exiftool_vendored.rb +10 -0
  862. data/lib/exiftool_vendored/version.rb +3 -0
  863. data/lib/exiftool_vendored/version_extractor.rb +17 -0
  864. metadata +977 -0
@@ -0,0 +1,354 @@
1
+ #------------------------------------------------------------------------------
2
+ # File: Fixup.pm
3
+ #
4
+ # Description: Utility to handle pointer fixups
5
+ #
6
+ # Revisions: 01/19/2005 - P. Harvey Created
7
+ # 04/11/2005 - P. Harvey Allow fixups to be tagged with a marker,
8
+ # and add new marker-related routines
9
+ # 06/21/2006 - P. Harvey Patch to work with negative offsets
10
+ # 07/07/2006 - P. Harvey Added support for 16-bit pointers
11
+ # 02/19/2013 - P. Harvey Added IsEmpty()
12
+ #
13
+ # Data Members:
14
+ #
15
+ # Start - Position in data where a zero pointer points to.
16
+ # Shift - Amount to shift offsets (relative to Start).
17
+ # Fixups - List of Fixup object references to to shift relative to this Fixup.
18
+ # Pointers - Hash of references to fixup pointer arrays, keyed by ByteOrder
19
+ # string (with "2" added if pointer is 16-bit [default is 32-bit],
20
+ # plus "_$marker" suffix if tagged with a marker name).
21
+ #------------------------------------------------------------------------------
22
+
23
+ package Image::ExifTool::Fixup;
24
+
25
+ use strict;
26
+ use Image::ExifTool qw(GetByteOrder SetByteOrder Get32u Get32s Set32u
27
+ Get16u Get16s Set16u);
28
+ use vars qw($VERSION);
29
+
30
+ $VERSION = '1.05';
31
+
32
+ sub AddFixup($$;$$);
33
+ sub ApplyFixup($$);
34
+ sub Dump($;$);
35
+
36
+ #------------------------------------------------------------------------------
37
+ # New - create new Fixup object
38
+ # Inputs: 0) reference to Fixup object or Fixup class name
39
+ sub new
40
+ {
41
+ local $_;
42
+ my $that = shift;
43
+ my $class = ref($that) || $that || 'Image::ExifTool::Fixup';
44
+ my $self = bless {}, $class;
45
+
46
+ # initialize required members
47
+ $self->{Start} = 0;
48
+ $self->{Shift} = 0;
49
+
50
+ return $self;
51
+ }
52
+
53
+ #------------------------------------------------------------------------------
54
+ # Clone this object
55
+ # Inputs: 0) reference to Fixup object or Fixup class name
56
+ # Returns: reference to new Fixup object
57
+ sub Clone($)
58
+ {
59
+ my $self = shift;
60
+ my $clone = new Image::ExifTool::Fixup;
61
+ $clone->{Start} = $self->{Start};
62
+ $clone->{Shift} = $self->{Shift};
63
+ my $phash = $self->{Pointers};
64
+ if ($phash) {
65
+ $clone->{Pointers} = { };
66
+ my $byteOrder;
67
+ foreach $byteOrder (keys %$phash) {
68
+ my @pointers = @{$phash->{$byteOrder}};
69
+ $clone->{Pointers}->{$byteOrder} = \@pointers;
70
+ }
71
+ }
72
+ if ($self->{Fixups}) {
73
+ $clone->{Fixups} = [ ];
74
+ my $subFixup;
75
+ foreach $subFixup (@{$self->{Fixups}}) {
76
+ push @{$clone->{Fixups}}, $subFixup->Clone();
77
+ }
78
+ }
79
+ return $clone;
80
+ }
81
+
82
+ #------------------------------------------------------------------------------
83
+ # Add fixup pointer or another fixup object below this one
84
+ # Inputs: 0) Fixup object reference
85
+ # 1) Scalar for pointer offset, or reference to Fixup object
86
+ # 2) Optional marker name for the pointer
87
+ # 3) Optional pointer format ('int16u' or 'int32u', defaults to 'int32u')
88
+ # Notes: Byte ordering must be set properly for the pointer being added (must keep
89
+ # track of the byte order of each offset since MakerNotes may have different byte order!)
90
+ sub AddFixup($$;$$)
91
+ {
92
+ my ($self, $pointer, $marker, $format) = @_;
93
+ if (ref $pointer) {
94
+ $self->{Fixups} or $self->{Fixups} = [ ];
95
+ push @{$self->{Fixups}}, $pointer;
96
+ } else {
97
+ my $byteOrder = GetByteOrder();
98
+ if (defined $format) {
99
+ if ($format eq 'int16u') {
100
+ $byteOrder .= '2';
101
+ } elsif ($format ne 'int32u') {
102
+ warn "Bad Fixup pointer format $format\n";
103
+ }
104
+ }
105
+ $byteOrder .= "_$marker" if defined $marker;
106
+ my $phash = $self->{Pointers};
107
+ $phash or $phash = $self->{Pointers} = { };
108
+ $phash->{$byteOrder} or $phash->{$byteOrder} = [ ];
109
+ push @{$phash->{$byteOrder}}, $pointer;
110
+ }
111
+ }
112
+
113
+ #------------------------------------------------------------------------------
114
+ # fix up pointer offsets
115
+ # Inputs: 0) Fixup object reference, 1) data reference
116
+ # Outputs: Collapses fixup hierarchy into linear lists of fixup pointers
117
+ sub ApplyFixup($$)
118
+ {
119
+ my ($self, $dataPt) = @_;
120
+
121
+ my $start = $self->{Start};
122
+ my $shift = $self->{Shift} + $start; # make shift relative to start
123
+ my $phash = $self->{Pointers};
124
+
125
+ # fix up pointers in this fixup
126
+ if ($phash and ($start or $shift)) {
127
+ my $saveOrder = GetByteOrder(); # save original byte ordering
128
+ my ($byteOrder, $ptr);
129
+ foreach $byteOrder (keys %$phash) {
130
+ SetByteOrder(substr($byteOrder,0,2));
131
+ # apply the fixup offset shift (must get as signed integer
132
+ # to avoid overflow in case it was negative before)
133
+ my ($get, $set) = ($byteOrder =~ /^(II2|MM2)/) ?
134
+ (\&Get16s, \&Set16u) : (\&Get32s, \&Set32u);
135
+ foreach $ptr (@{$phash->{$byteOrder}}) {
136
+ $ptr += $start; # update pointer to new start location
137
+ next unless $shift;
138
+ &$set(&$get($dataPt, $ptr) + $shift, $dataPt, $ptr);
139
+ }
140
+ }
141
+ SetByteOrder($saveOrder); # restore original byte ordering
142
+ }
143
+ # recurse into contained fixups
144
+ if ($self->{Fixups}) {
145
+ # create our pointer hash if it doesn't exist
146
+ $phash or $phash = $self->{Pointers} = { };
147
+ # loop through all contained fixups
148
+ my $subFixup;
149
+ foreach $subFixup (@{$self->{Fixups}}) {
150
+ # adjust the subfixup start and shift
151
+ $subFixup->{Start} += $start;
152
+ $subFixup->{Shift} += $shift - $start;
153
+ # recursively apply contained fixups
154
+ ApplyFixup($subFixup, $dataPt);
155
+ my $shash = $subFixup->{Pointers} or next;
156
+ # add all pointers to our collapsed lists
157
+ my $byteOrder;
158
+ foreach $byteOrder (keys %$shash) {
159
+ $phash->{$byteOrder} or $phash->{$byteOrder} = [ ];
160
+ push @{$phash->{$byteOrder}}, @{$shash->{$byteOrder}};
161
+ delete $shash->{$byteOrder};
162
+ }
163
+ delete $subFixup->{Pointers};
164
+ }
165
+ delete $self->{Fixups}; # remove our contained fixups
166
+ }
167
+ # reset our Start/Shift for the collapsed fixup
168
+ $self->{Start} = $self->{Shift} = 0;
169
+ }
170
+
171
+ #------------------------------------------------------------------------------
172
+ # Is this Fixup empty?
173
+ # Inputs: 0) Fixup object ref
174
+ # Returns: True if there are no offsets to fix
175
+ sub IsEmpty($)
176
+ {
177
+ my $self = shift;
178
+ my $phash = $self->{Pointers};
179
+ if ($phash) {
180
+ my $key;
181
+ foreach $key (keys %$phash) {
182
+ next unless ref $$phash{$key} eq 'ARRAY';
183
+ return 0 if @{$$phash{$key}};
184
+ }
185
+ }
186
+ return 1;
187
+ }
188
+
189
+ #------------------------------------------------------------------------------
190
+ # Does specified marker exist?
191
+ # Inputs: 0) Fixup object reference, 1) marker name
192
+ # Returns: True if fixup contains specified marker name
193
+ sub HasMarker($$)
194
+ {
195
+ my ($self, $marker) = @_;
196
+ my $phash = $self->{Pointers};
197
+ return 0 unless $phash;
198
+ return 1 if grep /_$marker$/, keys %$phash;
199
+ return 0 unless $self->{Fixups};
200
+ my $subFixup;
201
+ foreach $subFixup (@{$self->{Fixups}}) {
202
+ return 1 if $subFixup->HasMarker($marker);
203
+ }
204
+ return 0;
205
+ }
206
+
207
+ #------------------------------------------------------------------------------
208
+ # Set all marker pointers to specified value
209
+ # Inputs: 0) Fixup object reference, 1) data reference
210
+ # 2) marker name, 3) pointer value, 4) offset to start of data
211
+ sub SetMarkerPointers($$$$;$)
212
+ {
213
+ my ($self, $dataPt, $marker, $value, $startOffset) = @_;
214
+ my $start = $self->{Start} + ($startOffset || 0);
215
+ my $phash = $self->{Pointers};
216
+
217
+ if ($phash) {
218
+ my $saveOrder = GetByteOrder(); # save original byte ordering
219
+ my ($byteOrder, $ptr);
220
+ foreach $byteOrder (keys %$phash) {
221
+ next unless $byteOrder =~ /^(II|MM)(2?)_$marker$/;
222
+ SetByteOrder($1);
223
+ my $set = $2 ? \&Set16u : \&Set32u;
224
+ foreach $ptr (@{$phash->{$byteOrder}}) {
225
+ &$set($value, $dataPt, $ptr + $start);
226
+ }
227
+ }
228
+ SetByteOrder($saveOrder); # restore original byte ordering
229
+ }
230
+ if ($self->{Fixups}) {
231
+ my $subFixup;
232
+ foreach $subFixup (@{$self->{Fixups}}) {
233
+ $subFixup->SetMarkerPointers($dataPt, $marker, $value, $start);
234
+ }
235
+ }
236
+ }
237
+
238
+ #------------------------------------------------------------------------------
239
+ # Get pointer values for specified marker
240
+ # Inputs: 0) Fixup object reference, 1) data reference,
241
+ # 2) marker name, 3) offset to start of data
242
+ # Returns: List of marker pointers in list context, or first marker pointer otherwise
243
+ sub GetMarkerPointers($$$;$)
244
+ {
245
+ my ($self, $dataPt, $marker, $startOffset) = @_;
246
+ my $start = $self->{Start} + ($startOffset || 0);
247
+ my $phash = $self->{Pointers};
248
+ my @pointers;
249
+
250
+ if ($phash) {
251
+ my $saveOrder = GetByteOrder();
252
+ my ($byteOrder, $ptr);
253
+ foreach $byteOrder (grep /_$marker$/, keys %$phash) {
254
+ SetByteOrder(substr($byteOrder,0,2));
255
+ my $get = ($byteOrder =~ /^(II2|MM2)/) ? \&Get16u : \&Get32u;
256
+ foreach $ptr (@{$phash->{$byteOrder}}) {
257
+ push @pointers, &$get($dataPt, $ptr + $start);
258
+ }
259
+ }
260
+ SetByteOrder($saveOrder); # restore original byte ordering
261
+ }
262
+ if ($self->{Fixups}) {
263
+ my $subFixup;
264
+ foreach $subFixup (@{$self->{Fixups}}) {
265
+ push @pointers, $subFixup->GetMarkerPointers($dataPt, $marker, $start);
266
+ }
267
+ }
268
+ return @pointers if wantarray;
269
+ return $pointers[0];
270
+ }
271
+
272
+ #------------------------------------------------------------------------------
273
+ # Dump fixup to console for debugging
274
+ # Inputs: 0) Fixup object reference, 1) optional initial indent string
275
+ sub Dump($;$)
276
+ {
277
+ my ($self, $indent) = @_;
278
+ $indent or $indent = '';
279
+ printf "${indent}Fixup start=0x%x shift=0x%x\n", $self->{Start}, $self->{Shift};
280
+ my $phash = $self->{Pointers};
281
+ if ($phash) {
282
+ my $byteOrder;
283
+ foreach $byteOrder (sort keys %$phash) {
284
+ print "$indent $byteOrder: ", join(' ',@{$phash->{$byteOrder}}),"\n";
285
+ }
286
+ }
287
+ if ($self->{Fixups}) {
288
+ my $subFixup;
289
+ foreach $subFixup (@{$self->{Fixups}}) {
290
+ Dump($subFixup, $indent . ' ');
291
+ }
292
+ }
293
+ }
294
+
295
+
296
+ 1; # end
297
+
298
+ __END__
299
+
300
+ =head1 NAME
301
+
302
+ Image::ExifTool::Fixup - Utility to handle pointer fixups
303
+
304
+ =head1 SYNOPSIS
305
+
306
+ use Image::ExifTool::Fixup;
307
+
308
+ $fixup = new Image::ExifTool::Fixup;
309
+
310
+ # add a new fixup to a pointer at the specified offset in data
311
+ $fixup->AddFixup($offset);
312
+
313
+ # add a new Fixup object to the tree
314
+ $fixup->AddFixup($subFixup);
315
+
316
+ $fixup->{Start} += $shift1; # shift pointer offsets and values
317
+
318
+ $fixup->{Shift} += $shift2; # shift pointer values only
319
+
320
+ # recursively apply fixups to the specified data
321
+ $fixup->ApplyFixups(\$data);
322
+
323
+ $fixup->Dump(); # dump debugging information
324
+
325
+ $fixup->IsEmpty(); # return true if no offsets to fix
326
+
327
+ =head1 DESCRIPTION
328
+
329
+ This module contains the code to keep track of pointers in memory and to
330
+ shift these pointers as required. It is used by ExifTool to maintain the
331
+ pointers in image file directories (IFD's).
332
+
333
+ =head1 NOTES
334
+
335
+ Keeps track of pointers with different byte ordering, and relies on
336
+ Image::ExifTool::GetByteOrder() to determine the current byte ordering
337
+ when adding new pointers to a fixup.
338
+
339
+ Maintains a hierarchical list of fixups so that the whole hierarchy can
340
+ be shifted by a simple shift at the base. Hierarchy is collapsed to a
341
+ linear list when ApplyFixups() is called.
342
+
343
+ =head1 AUTHOR
344
+
345
+ Copyright 2003-2013, Phil Harvey (phil at owl.phy.queensu.ca)
346
+
347
+ This library is free software; you can redistribute it and/or modify it
348
+ under the same terms as Perl itself.
349
+
350
+ =head1 SEE ALSO
351
+
352
+ L<Image::ExifTool(3pm)|Image::ExifTool>
353
+
354
+ =cut
@@ -0,0 +1,755 @@
1
+ #------------------------------------------------------------------------------
2
+ # File: Flash.pm
3
+ #
4
+ # Description: Read Shockwave Flash meta information
5
+ #
6
+ # Revisions: 05/16/2006 - P. Harvey Created
7
+ # 06/07/2007 - PH Added support for FLV (Flash Video) files
8
+ # 10/23/2008 - PH Added support for XMP in FLV and SWF
9
+ #
10
+ # References: 1) http://www.the-labs.com/MacromediaFlash/SWF-Spec/SWFfileformat.html
11
+ # 2) http://sswf.sourceforge.net/SWFalexref.html
12
+ # 3) http://osflash.org/flv/
13
+ # 4) http://www.irisa.fr/texmex/people/dufouil/ffmpegdoxy/flv_8h.html
14
+ # 5) http://www.adobe.com/devnet/xmp/pdfs/XMPSpecificationPart3.pdf (Oct 2008)
15
+ # 6) http://www.adobe.com/devnet/swf/pdf/swf_file_format_spec_v9.pdf
16
+ # 7) http://help.adobe.com/en_US/FlashMediaServer/3.5_Deving/WS5b3ccc516d4fbf351e63e3d11a0773d56e-7ff6.html
17
+ # 8) http://www.adobe.com/devnet/flv/pdf/video_file_format_spec_v10.pdf
18
+ #
19
+ # Notes: I'll add AMF3 support if someone sends me a FLV with AMF3 data
20
+ #------------------------------------------------------------------------------
21
+
22
+ package Image::ExifTool::Flash;
23
+
24
+ use strict;
25
+ use vars qw($VERSION);
26
+ use Image::ExifTool qw(:DataAccess :Utils);
27
+ use Image::ExifTool::FLAC;
28
+
29
+ $VERSION = '1.09';
30
+
31
+ sub ProcessMeta($$$;$);
32
+
33
+ # Meta packets that we process
34
+ my %processMetaPacket = ( onMetaData => 1, onXMPData => 1 );
35
+
36
+ # information extracted from SWF header
37
+ %Image::ExifTool::Flash::Main = (
38
+ GROUPS => { 2 => 'Video' },
39
+ VARS => { ALPHA_FIRST => 1 },
40
+ NOTES => q{
41
+ The information below is extracted from SWF (Shockwave Flash) files. Tags
42
+ with string ID's represent information extracted from the file header.
43
+ },
44
+ FlashVersion => { },
45
+ Compressed => { PrintConv => { 0 => 'False', 1 => 'True' } },
46
+ ImageWidth => { },
47
+ ImageHeight => { },
48
+ FrameRate => { },
49
+ FrameCount => { },
50
+ Duration => {
51
+ Notes => 'calculated from FrameRate and FrameCount',
52
+ PrintConv => 'ConvertDuration($val)',
53
+ },
54
+ 69 => {
55
+ Name => 'FileAttributes',
56
+ PrintConv => { BITMASK => {
57
+ 0 => 'UseNetwork',
58
+ 3 => 'ActionScript3',
59
+ 4 => 'HasMetadata',
60
+ } },
61
+ },
62
+ 77 => {
63
+ Name => 'XMP',
64
+ SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main' },
65
+ },
66
+ );
67
+
68
+ # packets in Flash Video files
69
+ %Image::ExifTool::Flash::FLV = (
70
+ NOTES => q{
71
+ Information is extracted from the following packets in FLV (Flash Video)
72
+ files.
73
+ },
74
+ 0x08 => {
75
+ Name => 'Audio',
76
+ BitMask => 0x04,
77
+ SubDirectory => { TagTable => 'Image::ExifTool::Flash::Audio' },
78
+ },
79
+ 0x09 => {
80
+ Name => 'Video',
81
+ BitMask => 0x01,
82
+ SubDirectory => { TagTable => 'Image::ExifTool::Flash::Video' },
83
+ },
84
+ 0x12 => {
85
+ Name => 'Meta',
86
+ SubDirectory => { TagTable => 'Image::ExifTool::Flash::Meta' },
87
+ },
88
+ );
89
+
90
+ # tags in Flash Video packet header
91
+ %Image::ExifTool::Flash::Audio = (
92
+ PROCESS_PROC => \&Image::ExifTool::FLAC::ProcessBitStream,
93
+ GROUPS => { 2 => 'Audio' },
94
+ NOTES => 'Information extracted from the Flash Audio header.',
95
+ 'Bit0-3' => {
96
+ Name => 'AudioEncoding',
97
+ PrintConv => {
98
+ 0 => 'PCM-BE (uncompressed)', # PCM-BE according to ref 4
99
+ 1 => 'ADPCM',
100
+ 2 => 'MP3',
101
+ 3 => 'PCM-LE (uncompressed)', #4
102
+ 4 => 'Nellymoser 16kHz Mono', #8
103
+ 5 => 'Nellymoser 8kHz Mono',
104
+ 6 => 'Nellymoser',
105
+ 7 => 'G.711 A-law logarithmic PCM', #8
106
+ 8 => 'G.711 mu-law logarithmic PCM', #8
107
+ # (9 is reserved, ref 8)
108
+ 10 => 'AAC', #8
109
+ 11 => 'Speex', #8
110
+ 13 => 'MP3 8-Khz', #8
111
+ 15 => 'Device-specific sound', #8
112
+ },
113
+ },
114
+ 'Bit4-5' => {
115
+ Name => 'AudioSampleRate',
116
+ ValueConv => {
117
+ 0 => 5512,
118
+ 1 => 11025,
119
+ 2 => 22050,
120
+ 3 => 44100,
121
+ },
122
+ },
123
+ 'Bit6' => {
124
+ Name => 'AudioBitsPerSample',
125
+ ValueConv => '8 * ($val + 1)',
126
+ },
127
+ 'Bit7' => {
128
+ Name => 'AudioChannels',
129
+ ValueConv => '$val + 1',
130
+ PrintConv => {
131
+ 1 => '1 (mono)',
132
+ 2 => '2 (stereo)',
133
+ },
134
+ },
135
+ );
136
+
137
+ # tags in Flash Video packet header
138
+ %Image::ExifTool::Flash::Video = (
139
+ PROCESS_PROC => \&Image::ExifTool::FLAC::ProcessBitStream,
140
+ GROUPS => { 2 => 'Video' },
141
+ NOTES => 'Information extracted from the Flash Video header.',
142
+ 'Bit4-7' => {
143
+ Name => 'VideoEncoding',
144
+ PrintConv => {
145
+ 1 => 'JPEG', #8
146
+ 2 => 'Sorensen H.263',
147
+ 3 => 'Screen Video',
148
+ 4 => 'On2 VP6',
149
+ 5 => 'On2 VP6 Alpha', #3
150
+ 6 => 'Screen Video 2', #3
151
+ 7 => 'H.264', #7 (called "AVC" by ref 8)
152
+ },
153
+ },
154
+ );
155
+
156
+ # tags in Flash META packet (in ActionScript Message Format)
157
+ %Image::ExifTool::Flash::Meta = (
158
+ PROCESS_PROC => \&ProcessMeta,
159
+ GROUPS => { 2 => 'Video' },
160
+ NOTES => q{
161
+ Below are a few observed FLV Meta tags, but ExifTool will attempt to extract
162
+ information from any tag found.
163
+ },
164
+ 'audiocodecid' => { Name => 'AudioCodecID', Groups => { 2 => 'Audio' } },
165
+ 'audiodatarate' => {
166
+ Name => 'AudioBitrate',
167
+ Groups => { 2 => 'Audio' },
168
+ ValueConv => '$val * 1000',
169
+ PrintConv => 'ConvertBitrate($val)',
170
+ },
171
+ 'audiodelay' => { Name => 'AudioDelay', Groups => { 2 => 'Audio' } },
172
+ 'audiosamplerate'=>{ Name => 'AudioSampleRate', Groups => { 2 => 'Audio' } },
173
+ 'audiosamplesize'=>{ Name => 'AudioSampleSize', Groups => { 2 => 'Audio' } },
174
+ 'audiosize' => { Name => 'AudioSize', Groups => { 2 => 'Audio' } },
175
+ 'bytelength' => 'ByteLength', # (youtube)
176
+ 'canseekontime' => 'CanSeekOnTime', # (youtube)
177
+ 'canSeekToEnd' => 'CanSeekToEnd',
178
+ 'creationdate' => {
179
+ # (not an AMF date type in my sample)
180
+ Name => 'CreateDate',
181
+ Groups => { 2 => 'Time' },
182
+ ValueConv => '$val=~s/\s+$//; $val', # trim trailing whitespace
183
+ },
184
+ 'createdby' => 'CreatedBy', #7
185
+ 'cuePoints' => {
186
+ Name => 'CuePoint',
187
+ SubDirectory => { TagTable => 'Image::ExifTool::Flash::CuePoint' },
188
+ },
189
+ 'datasize' => 'DataSize',
190
+ 'duration' => {
191
+ Name => 'Duration',
192
+ PrintConv => 'ConvertDuration($val)',
193
+ },
194
+ 'filesize' => 'FileSizeBytes',
195
+ 'framerate' => {
196
+ Name => 'FrameRate',
197
+ PrintConv => 'int($val * 1000 + 0.5) / 1000',
198
+ },
199
+ 'hasAudio' => { Name => 'HasAudio', Groups => { 2 => 'Audio' } },
200
+ 'hasCuePoints' => 'HasCuePoints',
201
+ 'hasKeyframes' => 'HasKeyFrames',
202
+ 'hasMetadata' => 'HasMetadata',
203
+ 'hasVideo' => 'HasVideo',
204
+ 'height' => 'ImageHeight',
205
+ 'httphostheader'=> 'HTTPHostHeader', # (youtube)
206
+ 'keyframesTimes'=> 'KeyFramesTimes',
207
+ 'keyframesFilepositions' => 'KeyFramePositions',
208
+ 'lasttimestamp' => 'LastTimeStamp',
209
+ 'lastkeyframetimestamp' => 'LastKeyFrameTime',
210
+ 'metadatacreator'=>'MetadataCreator',
211
+ 'metadatadate' => {
212
+ Name => 'MetadataDate',
213
+ Groups => { 2 => 'Time' },
214
+ PrintConv => '$self->ConvertDateTime($val)',
215
+ },
216
+ 'purl' => 'URL', # (youtube) (what does P mean?)
217
+ 'pmsg' => 'Message', # (youtube) (what does P mean?)
218
+ 'sourcedata' => 'SourceData', # (youtube)
219
+ 'starttime' => { # (youtube)
220
+ Name => 'StartTime',
221
+ PrintConv => 'ConvertDuration($val)',
222
+ },
223
+ 'stereo' => { Name => 'Stereo', Groups => { 2 => 'Audio' } },
224
+ 'totalduration' => { # (youtube)
225
+ Name => 'TotalDuration',
226
+ PrintConv => 'ConvertDuration($val)',
227
+ },
228
+ 'totaldatarate' => { # (youtube)
229
+ Name => 'TotalDataRate',
230
+ ValueConv => '$val * 1000',
231
+ PrintConv => 'int($val + 0.5)',
232
+ },
233
+ 'totalduration' => 'TotalDuration',
234
+ 'videocodecid' => 'VideoCodecID',
235
+ 'videodatarate' => {
236
+ Name => 'VideoBitrate',
237
+ ValueConv => '$val * 1000',
238
+ PrintConv => 'ConvertBitrate($val)',
239
+ },
240
+ 'videosize' => 'VideoSize',
241
+ 'width' => 'ImageWidth',
242
+ # tags in 'onXMPData' packets
243
+ 'liveXML' => { #5
244
+ Name => 'XMP',
245
+ SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main' },
246
+ },
247
+ );
248
+
249
+ # tags in Flash META CuePoint structure
250
+ %Image::ExifTool::Flash::CuePoint = (
251
+ PROCESS_PROC => \&ProcessMeta,
252
+ GROUPS => { 2 => 'Video' },
253
+ NOTES => q{
254
+ These tag names are added to the CuePoint name to generate complete tag
255
+ names like "CuePoint0Name".
256
+ },
257
+ 'name' => 'Name',
258
+ 'type' => 'Type',
259
+ 'time' => 'Time',
260
+ 'parameters' => {
261
+ Name => 'Parameter',
262
+ SubDirectory => { TagTable => 'Image::ExifTool::Flash::Parameter' },
263
+ },
264
+ );
265
+
266
+ # tags in Flash META CuePoint Parameter structure
267
+ %Image::ExifTool::Flash::Parameter = (
268
+ PROCESS_PROC => \&ProcessMeta,
269
+ GROUPS => { 2 => 'Video' },
270
+ NOTES => q{
271
+ There are no pre-defined parameter tags, but ExifTool will extract any
272
+ existing parameters, with tag names like "CuePoint0ParameterXxx".
273
+ },
274
+ );
275
+
276
+ # name lookup for known AMF data types
277
+ my @amfType = qw(double boolean string object movieClip null undefined reference
278
+ mixedArray objectEnd array date longString unsupported recordSet
279
+ XML typedObject AMF3data);
280
+
281
+ # test for AMF structure types (object, mixed array or typed object)
282
+ my %isStruct = ( 0x03 => 1, 0x08 => 1, 0x10 => 1 );
283
+
284
+ #------------------------------------------------------------------------------
285
+ # Process Flash Video AMF Meta packet (ref 3)
286
+ # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
287
+ # 3) Set to extract single type/value only
288
+ # Returns: 1 on success, (or type/value if extracting single value)
289
+ # Notes: Updates DataPos in dirInfo if extracting single value
290
+ sub ProcessMeta($$$;$)
291
+ {
292
+ my ($exifTool, $dirInfo, $tagTablePtr, $single) = @_;
293
+ my $dataPt = $$dirInfo{DataPt};
294
+ my $dataPos = $$dirInfo{DataPos};
295
+ my $dirLen = $$dirInfo{DirLen} || length($$dataPt);
296
+ my $pos = $$dirInfo{Pos} || 0;
297
+ my ($type, $val, $rec);
298
+
299
+ $exifTool->VerboseDir('Meta') unless $single;
300
+
301
+ Record: for ($rec=0; ; ++$rec) {
302
+ last if $pos >= $dirLen;
303
+ $type = ord(substr($$dataPt, $pos));
304
+ ++$pos;
305
+ if ($type == 0x00 or $type == 0x0b) { # double or date
306
+ last if $pos + 8 > $dirLen;
307
+ $val = GetDouble($dataPt, $pos);
308
+ $pos += 8;
309
+ if ($type == 0x0b) { # date
310
+ $val /= 1000; # convert to seconds
311
+ my $frac = $val - int($val); # fractional seconds
312
+ # get time zone
313
+ last if $pos + 2 > $dirLen;
314
+ my $tz = Get16s($dataPt, $pos);
315
+ $pos += 2;
316
+ # construct date/time string
317
+ $val = Image::ExifTool::ConvertUnixTime(int($val));
318
+ if ($frac) {
319
+ $frac = sprintf('%.6f', $frac);
320
+ $frac =~ s/(^0|0+$)//g;
321
+ $val .= $frac;
322
+ }
323
+ # add timezone
324
+ if ($tz < 0) {
325
+ $val .= '-';
326
+ $tz *= -1;
327
+ } else {
328
+ $val .= '+';
329
+ }
330
+ $val .= sprintf('%.2d:%.2d', int($tz/60), $tz%60);
331
+ }
332
+ } elsif ($type == 0x01) { # boolean
333
+ last if $pos + 1 > $dirLen;
334
+ $val = Get8u($dataPt, $pos);
335
+ $val = { 0 => 'No', 1 => 'Yes' }->{$val} if $val < 2;
336
+ ++$pos;
337
+ } elsif ($type == 0x02) { # string
338
+ last if $pos + 2 > $dirLen;
339
+ my $len = Get16u($dataPt, $pos);
340
+ last if $pos + 2 + $len > $dirLen;
341
+ $val = substr($$dataPt, $pos + 2, $len);
342
+ $pos += 2 + $len;
343
+ } elsif ($isStruct{$type}) { # object, mixed array or typed object
344
+ $exifTool->VPrint(1, " + [$amfType[$type]]\n");
345
+ my $getName;
346
+ $val = ''; # dummy value
347
+ if ($type == 0x08) { # mixed array
348
+ # skip last array index for mixed array
349
+ last if $pos + 4 > $dirLen;
350
+ $pos += 4;
351
+ } elsif ($type == 0x10) { # typed object
352
+ $getName = 1;
353
+ }
354
+ for (;;) {
355
+ # get tag ID (or typed object name)
356
+ last Record if $pos + 2 > $dirLen;
357
+ my $len = Get16u($dataPt, $pos);
358
+ if ($pos + 2 + $len > $dirLen) {
359
+ $exifTool->Warn("Truncated $amfType[$type] record");
360
+ last Record;
361
+ }
362
+ my $tag = substr($$dataPt, $pos + 2, $len);
363
+ $pos += 2 + $len;
364
+ # first string of a typed object is the object name
365
+ if ($getName) {
366
+ $exifTool->VPrint(1," | (object name '$tag')\n");
367
+ undef $getName;
368
+ next; # (ignore name for now)
369
+ }
370
+ my $subTablePtr = $tagTablePtr;
371
+ my $tagInfo = $$subTablePtr{$tag};
372
+ # switch to subdirectory table if necessary
373
+ if ($tagInfo and $$tagInfo{SubDirectory}) {
374
+ my $subTable = $tagInfo->{SubDirectory}->{TagTable};
375
+ # descend into Flash SubDirectory
376
+ if ($subTable =~ /^Image::ExifTool::Flash::/) {
377
+ $tag = $$tagInfo{Name}; # use our name for the tag
378
+ $subTablePtr = GetTagTable($subTable);
379
+ }
380
+ }
381
+ # get object value
382
+ my $valPos = $pos + 1;
383
+ $$dirInfo{Pos} = $pos;
384
+ my $structName = $$dirInfo{StructName};
385
+ # add structure name to start of tag name
386
+ $tag = $structName . ucfirst($tag) if defined $structName;
387
+ $$dirInfo{StructName} = $tag; # set new structure name
388
+ my ($t, $v) = ProcessMeta($exifTool, $dirInfo, $subTablePtr, 1);
389
+ $$dirInfo{StructName} = $structName;# restore original structure name
390
+ $pos = $$dirInfo{Pos}; # update to new position in packet
391
+ # all done if this value contained tags
392
+ last Record unless defined $t and defined $v;
393
+ next if $isStruct{$t}; # already handled tags in sub-structures
394
+ next if ref($v) eq 'ARRAY' and not @$v; # ignore empty arrays
395
+ last if $t == 0x09; # (end of object)
396
+ if (not $$subTablePtr{$tag} and $tag =~ /^\w+$/) {
397
+ AddTagToTable($subTablePtr, $tag, { Name => ucfirst($tag) });
398
+ $exifTool->VPrint(1, " | (adding $tag)\n");
399
+ }
400
+ $exifTool->HandleTag($subTablePtr, $tag, $v,
401
+ DataPt => $dataPt,
402
+ DataPos => $dataPos,
403
+ Start => $valPos,
404
+ Size => $pos - $valPos,
405
+ Format => $amfType[$t] || sprintf('0x%x',$t),
406
+ );
407
+ }
408
+ # } elsif ($type == 0x04) { # movie clip (not supported)
409
+ } elsif ($type == 0x05 or $type == 0x06 or $type == 0x09 or $type == 0x0d) {
410
+ # null, undefined, dirLen of object, or unsupported
411
+ $val = '';
412
+ } elsif ($type == 0x07) { # reference
413
+ last if $pos + 2 > $dirLen;
414
+ $val = Get16u($dataPt, $pos);
415
+ $pos += 2;
416
+ } elsif ($type == 0x0a) { # array
417
+ last if $pos + 4 > $dirLen;
418
+ my $num = Get32u($dataPt, $pos);
419
+ $$dirInfo{Pos} = $pos + 4;
420
+ my ($i, @vals);
421
+ # add array index to compount tag name
422
+ my $structName = $$dirInfo{StructName};
423
+ for ($i=0; $i<$num; ++$i) {
424
+ $$dirInfo{StructName} = $structName . $i if defined $structName;
425
+ my ($t, $v) = ProcessMeta($exifTool, $dirInfo, $tagTablePtr, 1);
426
+ last Record unless defined $v;
427
+ # save value unless contained in a sub-structure
428
+ push @vals, $v unless $isStruct{$t};
429
+ }
430
+ $$dirInfo{StructName} = $structName;
431
+ $pos = $$dirInfo{Pos};
432
+ $val = \@vals;
433
+ } elsif ($type == 0x0c or $type == 0x0f) { # long string or XML
434
+ last if $pos + 4 > $dirLen;
435
+ my $len = Get32u($dataPt, $pos);
436
+ last if $pos + 4 + $len > $dirLen;
437
+ $val = substr($$dataPt, $pos + 4, $len);
438
+ $pos += 4 + $len;
439
+ # } elsif ($type == 0x0e) { # record set (not supported)
440
+ # } elsif ($type == 0x11) { # AMF3 data (can't add support for this without a test sample)
441
+ } else {
442
+ my $t = $amfType[$type] || sprintf('type 0x%x',$type);
443
+ $exifTool->Warn("AMF $t record not yet supported");
444
+ undef $type; # (so we don't print another warning)
445
+ last; # can't continue
446
+ }
447
+ last if $single; # all done if extracting single value
448
+ unless ($isStruct{$type}) {
449
+ # only process certain Meta packets
450
+ if ($type == 0x02 and not $rec) {
451
+ my $verb = $processMetaPacket{$val} ? 'processing' : 'ignoring';
452
+ $exifTool->VPrint(0, " | ($verb $val information)\n");
453
+ last unless $processMetaPacket{$val};
454
+ } else {
455
+ # give verbose indication if we ignore a lone value
456
+ my $t = $amfType[$type] || sprintf('type 0x%x',$type);
457
+ $exifTool->VPrint(1, " | (ignored lone $t value '$val')\n");
458
+ }
459
+ }
460
+ }
461
+ if (not defined $val and defined $type) {
462
+ $exifTool->Warn(sprintf("Truncated AMF record 0x%x",$type));
463
+ }
464
+ return 1 unless $single; # all done
465
+ $$dirInfo{Pos} = $pos; # update position
466
+ return($type,$val); # return single type/value pair
467
+ }
468
+
469
+ #------------------------------------------------------------------------------
470
+ # Read information frame a Flash Video file
471
+ # Inputs: 0) ExifTool object reference, 1) Directory information reference
472
+ # Returns: 1 on success, 0 if this wasn't a valid Flash Video file
473
+ sub ProcessFLV($$)
474
+ {
475
+ my ($exifTool, $dirInfo) = @_;
476
+ my $verbose = $exifTool->Options('Verbose');
477
+ my $raf = $$dirInfo{RAF};
478
+ my $buff;
479
+
480
+ $raf->Read($buff, 9) == 9 or return 0;
481
+ $buff =~ /^FLV\x01/ or return 0;
482
+ SetByteOrder('MM');
483
+ $exifTool->SetFileType();
484
+ my ($flags, $offset) = unpack('x4CN', $buff);
485
+ $raf->Seek($offset-9, 1) or return 1 if $offset > 9;
486
+ $flags &= 0x05; # only look for audio/video
487
+ my $found = 0;
488
+ my $tagTablePtr = GetTagTable('Image::ExifTool::Flash::FLV');
489
+ for (;;) {
490
+ $raf->Read($buff, 15) == 15 or last;
491
+ my $len = unpack('x4N', $buff);
492
+ my $type = $len >> 24;
493
+ $len &= 0x00ffffff;
494
+ my $tagInfo = $exifTool->GetTagInfo($tagTablePtr, $type);
495
+ if ($verbose > 1) {
496
+ my $name = $tagInfo ? $$tagInfo{Name} : "type $type";
497
+ $exifTool->VPrint(1, "FLV $name packet, len $len\n");
498
+ }
499
+ undef $buff;
500
+ if ($tagInfo and $$tagInfo{SubDirectory}) {
501
+ my $mask = $$tagInfo{BitMask};
502
+ if ($mask) {
503
+ # handle audio or video packet
504
+ unless ($found & $mask) {
505
+ $found |= $mask;
506
+ $flags &= ~$mask;
507
+ if ($len>=1 and $raf->Read($buff, 1) == 1) {
508
+ $len -= 1;
509
+ } else {
510
+ $exifTool->Warn("Bad $$tagInfo{Name} packet");
511
+ last;
512
+ }
513
+ }
514
+ } elsif ($raf->Read($buff, $len) == $len) {
515
+ $len = 0;
516
+ } else {
517
+ $exifTool->Warn('Truncated Meta packet');
518
+ last;
519
+ }
520
+ }
521
+ if (defined $buff) {
522
+ $exifTool->HandleTag($tagTablePtr, $type, undef,
523
+ DataPt => \$buff,
524
+ DataPos => $raf->Tell() - length($buff),
525
+ );
526
+ }
527
+ last unless $flags;
528
+ $raf->Seek($len, 1) or last if $len;
529
+ }
530
+ return 1;
531
+ }
532
+
533
+ #------------------------------------------------------------------------------
534
+ # Found a Flash tag
535
+ # Inputs: 0) ExifTool object ref, 1) tag name, 2) tag value
536
+ sub FoundFlashTag($$$)
537
+ {
538
+ my ($exifTool, $tag, $val) = @_;
539
+ $exifTool->HandleTag(\%Image::ExifTool::Flash::Main, $tag, $val);
540
+ }
541
+
542
+ #------------------------------------------------------------------------------
543
+ # Read data from possibly compressed file
544
+ # Inputs: 0) RAF reference, 1) data buffer, 2) bytes to read, 2) compressed flag
545
+ # Returns: number of bytes read (may be greater than requested bytes if compressed)
546
+ # - concatenates data to current buffer
547
+ # - updates compressed flag with reference to inflate object for future calls
548
+ # (or sets to error message and returns zero on error)
549
+ sub ReadCompressed($$$$)
550
+ {
551
+ my ($raf, $len, $inflate) = ($_[0], $_[2], $_[3]);
552
+ my $buff;
553
+ unless ($raf->Read($buff, $len)) {
554
+ $_[3] = 'Error reading file';
555
+ return 0;
556
+ }
557
+ # uncompress if necessary
558
+ if ($inflate) {
559
+ unless (ref $inflate) {
560
+ unless (eval 'require Compress::Zlib') {
561
+ $_[3] = 'Install Compress::Zlib to extract compressed information';
562
+ return 0;
563
+ }
564
+ $inflate = Compress::Zlib::inflateInit();
565
+ unless ($inflate) {
566
+ $_[3] = 'Error initializing inflate for Flash data';
567
+ return 0;
568
+ }
569
+ $_[3] = $inflate; # pass inflate object back to caller
570
+ }
571
+ my $tmp = $buff;
572
+ $buff = '';
573
+ # read 64 more bytes at a time and inflate until we get enough uncompressed data
574
+ for (;;) {
575
+ my ($dat, $stat) = $inflate->inflate($tmp);
576
+ if ($stat == Compress::Zlib::Z_STREAM_END() or
577
+ $stat == Compress::Zlib::Z_OK())
578
+ {
579
+ $buff .= $dat; # add inflated data to buffer
580
+ last if length $buff >= $len or $stat == Compress::Zlib::Z_STREAM_END();
581
+ $raf->Read($tmp,64) or last; # must read a bit more data
582
+ } else {
583
+ $buff = '';
584
+ last;
585
+ }
586
+ }
587
+ $_[3] = 'Error inflating compressed Flash data' unless length $buff;
588
+ }
589
+ $_[1] = defined $_[1] ? $_[1] . $buff : $buff;
590
+ return length $buff;
591
+ }
592
+
593
+ #------------------------------------------------------------------------------
594
+ # Read information frame a Flash file
595
+ # Inputs: 0) ExifTool object reference, 1) Directory information reference
596
+ # Returns: 1 on success, 0 if this wasn't a valid Flash file
597
+ sub ProcessSWF($$)
598
+ {
599
+ my ($exifTool, $dirInfo) = @_;
600
+ my $raf = $$dirInfo{RAF};
601
+ my ($buff, $hasMeta);
602
+
603
+ $raf->Read($buff, 8) == 8 or return 0;
604
+ $buff =~ /^(F|C)WS([^\0])/ or return 0;
605
+ my ($compressed, $vers) = ($1 eq 'C' ? 1 : 0, ord($2));
606
+
607
+ SetByteOrder('II');
608
+ $exifTool->SetFileType();
609
+ GetTagTable('Image::ExifTool::Flash::Main'); # make sure table is initialized
610
+
611
+ FoundFlashTag($exifTool, FlashVersion => $vers);
612
+ FoundFlashTag($exifTool, Compressed => $compressed);
613
+
614
+ # read the next 64 bytes of the file (and inflate if necessary)
615
+ $buff = '';
616
+ unless (ReadCompressed($raf, $buff, 64, $compressed)) {
617
+ $exifTool->Warn($compressed) if $compressed;
618
+ return 1;
619
+ }
620
+
621
+ # unpack elements of bit-packed Flash Rect structure
622
+ my $nBits = unpack('C', $buff) >> 3; # bits in x1,x2,y1,y2 elements
623
+ my $totBits = 5 + $nBits * 4; # total bits in Rect structure
624
+ my $nBytes = int(($totBits + 7) / 8); # byte length of Rect structure
625
+ if (length $buff < $nBytes + 4) {
626
+ $exifTool->Warn('Truncated Flash file');
627
+ return 1;
628
+ }
629
+ my $bits = unpack("B$totBits", $buff);
630
+ # isolate Rect elements and convert from ASCII bit strings to integers
631
+ my @vals = unpack('x5' . "a$nBits" x 4, $bits);
632
+ # (do conversion the hard way because oct("0b$val") requires Perl 5.6)
633
+ map { $_ = unpack('N', pack('B32', '0' x (32 - length $_) . $_)) } @vals;
634
+
635
+ # calculate and store ImageWidth/Height
636
+ FoundFlashTag($exifTool, ImageWidth => ($vals[1] - $vals[0]) / 20);
637
+ FoundFlashTag($exifTool, ImageHeight => ($vals[3] - $vals[2]) / 20);
638
+
639
+ # get frame rate and count
640
+ @vals = unpack("x${nBytes}v2", $buff);
641
+ FoundFlashTag($exifTool, FrameRate => $vals[0] / 256);
642
+ FoundFlashTag($exifTool, FrameCount => $vals[1]);
643
+ FoundFlashTag($exifTool, Duration => $vals[1] * 256 / $vals[0]) if $vals[0];
644
+
645
+ # scan through the tags to find FileAttributes and XMP
646
+ $buff = substr($buff, $nBytes + 4);
647
+ for (;;) {
648
+ my $buffLen = length $buff;
649
+ last if $buffLen < 2;
650
+ my $code = Get16u(\$buff, 0);
651
+ my $pos = 2;
652
+ my $tag = $code >> 6;
653
+ my $size = $code & 0x3f;
654
+ $exifTool->VPrint(1, "SWF tag $tag ($size bytes):\n");
655
+ last unless $tag == 69 or $tag == 77 or $hasMeta;
656
+ # read enough to get a complete short record
657
+ if ($pos + $size > $buffLen) {
658
+ # (read 2 extra bytes if available to get next tag word)
659
+ unless (ReadCompressed($raf, $buff, $size + 2, $compressed)) {
660
+ $exifTool->Warn($compressed) if $compressed;
661
+ return 1;
662
+ }
663
+ $buffLen = length $buff;
664
+ last if $pos + $size > $buffLen;
665
+ }
666
+ # read extended record if necessary
667
+ if ($size == 0x3f) {
668
+ last if $pos + 4 > $buffLen;
669
+ $size = Get32u(\$buff, $pos);
670
+ $pos += 4;
671
+ last if $size > 1000000; # don't read anything huge
672
+ if ($pos + $size > $buffLen) {
673
+ unless (ReadCompressed($raf, $buff, $size + 2, $compressed)) {
674
+ $exifTool->Warn($compressed) if $compressed;
675
+ return 1;
676
+ }
677
+ $buffLen = length $buff;
678
+ last if $pos + $size > $buffLen;
679
+ }
680
+ $exifTool->VPrint(1, " [extended size $size bytes]\n");
681
+ }
682
+ if ($tag == 69) { # FileAttributes
683
+ last unless $size;
684
+ my $flags = Get8u(\$buff, $pos);
685
+ FoundFlashTag($exifTool, $tag => $flags);
686
+ last unless $flags & 0x10; # only continue if we have metadata (XMP)
687
+ $hasMeta = 1;
688
+ } elsif ($tag == 77) { # Metadata
689
+ my $val = substr($buff, $pos, $size);
690
+ FoundFlashTag($exifTool, $tag => $val);
691
+ last;
692
+ }
693
+ last if $pos + 2 > $buffLen;
694
+ $buff = substr($buff, $pos); # remove everything before the next tag
695
+ }
696
+ return 1;
697
+ }
698
+
699
+ 1; # end
700
+
701
+ __END__
702
+
703
+ =head1 NAME
704
+
705
+ Image::ExifTool::Flash - Read Shockwave Flash meta information
706
+
707
+ =head1 SYNOPSIS
708
+
709
+ This module is used by Image::ExifTool
710
+
711
+ =head1 DESCRIPTION
712
+
713
+ This module contains definitions required by Image::ExifTool to read SWF
714
+ (Shockwave Flash) and FLV (Flash Video) files.
715
+
716
+ =head1 NOTES
717
+
718
+ Flash Video AMF3 support has not yet been added because I haven't yet found
719
+ a FLV file containing AMF3 information. If someone sends me a sample then I
720
+ will add AMF3 support.
721
+
722
+ =head1 AUTHOR
723
+
724
+ Copyright 2003-2013, Phil Harvey (phil at owl.phy.queensu.ca)
725
+
726
+ This library is free software; you can redistribute it and/or modify it
727
+ under the same terms as Perl itself.
728
+
729
+ =head1 REFERENCES
730
+
731
+ =over 4
732
+
733
+ =item L<http://www.the-labs.com/MacromediaFlash/SWF-Spec/SWFfileformat.html>
734
+
735
+ =item L<http://sswf.sourceforge.net/SWFalexref.html>
736
+
737
+ =item L<http://osflash.org/flv/>
738
+
739
+ =item L<http://www.irisa.fr/texmex/people/dufouil/ffmpegdoxy/flv_8h.html>
740
+
741
+ =item L<http://help.adobe.com/en_US/FlashMediaServer/3.5_Deving/WS5b3ccc516d4fbf351e63e3d11a0773d56e-7ff6.html>
742
+
743
+ =item L<http://www.adobe.com/devnet/swf/pdf/swf_file_format_spec_v9.pdf>
744
+
745
+ =item L<http://www.adobe.com/devnet/flv/pdf/video_file_format_spec_v10.pdf>
746
+
747
+ =back
748
+
749
+ =head1 SEE ALSO
750
+
751
+ L<Image::ExifTool::TagNames/Flash Tags>,
752
+ L<Image::ExifTool(3pm)|Image::ExifTool>
753
+
754
+ =cut
755
+