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,1102 @@
1
+ #------------------------------------------------------------------------------
2
+ # File: H264.pm
3
+ #
4
+ # Description: Read meta information from H.264 video
5
+ #
6
+ # Revisions: 2010/01/31 - P. Harvey Created
7
+ #
8
+ # References: 1) http://www.itu.int/rec/T-REC-H.264/e (T-REC-H.264-200305-S!!PDF-E.pdf)
9
+ # 2) http://miffteevee.co.uk/documentation/development/H264Parser_8cpp-source.html
10
+ # 3) http://ffmpeg.org/
11
+ # 4) US Patent 2009/0052875 A1
12
+ # 5) European Patent (EP2 051 528A1) application no. 07792522.0 filed 08.08.2007
13
+ # 6) Dave Nicholson private communication
14
+ # 7) http://www.freepatentsonline.com/20050076039.pdf
15
+ # 8) Michael Reitinger private communication (RX100)
16
+ #
17
+ # Glossary: RBSP = Raw Byte Sequence Payload
18
+ #------------------------------------------------------------------------------
19
+
20
+ package Image::ExifTool::H264;
21
+
22
+ use strict;
23
+ use vars qw($VERSION %convMake);
24
+ use Image::ExifTool qw(:DataAccess :Utils);
25
+ use Image::ExifTool::Exif;
26
+
27
+ $VERSION = '1.09';
28
+
29
+ sub ProcessSEI($$);
30
+
31
+ my $parsePictureTiming; # flag to enable parsing of picture timing information (test only)
32
+
33
+ # lookup for camera manufacturer name
34
+ %convMake = (
35
+ 0x0103 => 'Panasonic',
36
+ 0x0108 => 'Sony',
37
+ 0x1011 => 'Canon',
38
+ 0x1104 => 'JVC', #Rob Lewis
39
+ );
40
+
41
+ # information extracted from H.264 video streams
42
+ %Image::ExifTool::H264::Main = (
43
+ GROUPS => { 2 => 'Video' },
44
+ VARS => { NO_ID => 1 },
45
+ NOTES => q{
46
+ Tags extracted from H.264 video streams. The metadata for AVCHD videos is
47
+ stored in this stream.
48
+ },
49
+ ImageWidth => { },
50
+ ImageHeight => { },
51
+ MDPM => { SubDirectory => { TagTable => 'Image::ExifTool::H264::MDPM' } },
52
+ );
53
+
54
+ # H.264 Supplemental Enhancement Information User Data (ref PH/4)
55
+ %Image::ExifTool::H264::MDPM = (
56
+ GROUPS => { 2 => 'Camera' },
57
+ PROCESS_PROC => \&ProcessSEI,
58
+ TAG_PREFIX => 'MDPM',
59
+ NOTES => q{
60
+ The following tags are decoded from the Modified Digital Video Pack Metadata
61
+ (MDPM) of the unregistered user data with UUID
62
+ 17ee8c60f84d11d98cd60800200c9a66 in the H.264 Supplemental Enhancement
63
+ Information (SEI). I<[Yes, this description is confusing, but nothing
64
+ compared to the challenge of actually decoding the data!]> This information
65
+ may exist at regular intervals through the entire video, but only the first
66
+ occurrence is extracted unless the ExtractEmbedded (-ee) option is used (in
67
+ which case subsequent occurrences are extracted as sub-documents).
68
+ },
69
+ # (Note: all these are explained in IEC 61834-4, but it costs money so it is useless to me)
70
+ # 0x00 - ControlCassetteID (ref 7)
71
+ # 0x01 - ControlTapeLength (ref 7)
72
+ # 0x02 - ControlTimerActDate (ref 7)
73
+ # 0x03 - ControlTimerACS_S_S (ref 7)
74
+ # 0x04-0x05 - ControlPR_StartPoint (ref 7)
75
+ # 0x06 - ControlTagIDNoGenre (ref 7)
76
+ # 0x07 - ControlTopicPageHeader (ref 7)
77
+ # 0x08 - ControlTextHeader (ref 7)
78
+ # 0x09 - ControlText (ref 7)
79
+ # 0x0a-0x0b - ControlTag (ref 7)
80
+ # 0x0c - ControlTeletextInfo (ref 7)
81
+ # 0x0d - ControlKey (ref 7)
82
+ # 0x0e-0x0f - ControlZoneEnd (ref 7)
83
+ # 0x10 - TitleTotalTime (ref 7)
84
+ # 0x11 - TitleRemainTime (ref 7)
85
+ # 0x12 - TitleChapterTotalNo (ref 7)
86
+ 0x13 => {
87
+ Name => 'TimeCode',
88
+ Notes => 'hours:minutes:seconds:frames',
89
+ ValueConv => 'sprintf("%.2x:%.2x:%.2x:%.2x",reverse unpack("C*",$val))',
90
+ },
91
+ # 0x14 - TitleBinaryGroup
92
+ # 0x15 - TitleCassetteNo (ref 7)
93
+ # 0x16-0x17 - TitleSoftID (ref 7)
94
+ # (0x18,0x19 listed as TitleTextHeader/TitleText by ref 7)
95
+ 0x18 => {
96
+ Name => 'DateTimeOriginal',
97
+ Description => 'Date/Time Original',
98
+ Groups => { 2 => 'Time' },
99
+ Notes => 'combined with tag 0x19',
100
+ Combine => 1, # the next tag (0x19) contains the rest of the date
101
+ # first byte is timezone information:
102
+ # 0x80 - unused
103
+ # 0x40 - DST flag (currently not decoded)
104
+ # 0x20 - TimeZoneSign
105
+ # 0x1e - TimeZoneValue
106
+ # 0x01 - half-hour flag
107
+ ValueConv => q{
108
+ my ($tz, @a) = unpack('C*',$val);
109
+ return sprintf('%.2x%.2x:%.2x:%.2x %.2x:%.2x:%.2x%s%.2d:%s', @a,
110
+ $tz & 0x20 ? '-' : '+', ($tz >> 1) & 0x0f,
111
+ $tz & 0x01 ? '30' : '00');
112
+ },
113
+ PrintConv => '$self->ConvertDateTime($val)',
114
+ },
115
+ # 0x1a-0x1b - TitleStart (ref 7)
116
+ # 0x1c-0x1d - TitleReelID (ref 7)
117
+ # 0x1e-0x1f - TitleEnd (ref 7)
118
+ # 0x20 - ChapterTotalTime (ref 7)
119
+ # 0x42 - ProgramRecDTime (ref 7)
120
+ # 0x50/0x60 - (AAUX/VAUX)Source (ref 7)
121
+ # 0x51/0x61 - (AAUX/VAUX)SourceControl (ref 7)
122
+ # 0x52/0x62 - (AAUX/VAUX)RecDate (ref 7)
123
+ # 0x53/0x63 - (AAUX/VAUX)RecTime (ref 7)
124
+ # 0x54/0x64 - (AAUX/VAUX)BinaryGroup (ref 7)
125
+ # 0x55/0x65 - (AAUX/VAUX)ClosedCaption (ref 7)
126
+ # 0x56/0x66 - (AAUX/VAUX)TR (ref 7)
127
+ 0x70 => { # ConsumerCamera1
128
+ Name => 'Camera1',
129
+ SubDirectory => { TagTable => 'Image::ExifTool::H264::Camera1' },
130
+ },
131
+ 0x71 => { # ConsumerCamera2
132
+ Name => 'Camera2',
133
+ SubDirectory => { TagTable => 'Image::ExifTool::H264::Camera2' },
134
+ },
135
+ # 0x73 Lens - val: 0x75ffffd3,0x0effffd3,0x59ffffd3,0x79ffffd3,0xffffffd3...
136
+ # 0x74 Gain
137
+ # 0x75 Pedestal
138
+ # 0x76 Gamma
139
+ # 0x77 Detail
140
+ # 0x7b CameraPreset
141
+ # 0x7c Flare
142
+ # 0x7d Shading
143
+ # 0x7e Knee
144
+ 0x7f => { # Shutter
145
+ Name => 'Shutter',
146
+ SubDirectory => {
147
+ TagTable => 'Image::ExifTool::H264::Shutter',
148
+ ByteOrder => 'LittleEndian', # weird
149
+ },
150
+ },
151
+ 0xa0 => {
152
+ Name => 'ExposureTime',
153
+ Format => 'rational32u',
154
+ Groups => { 2 => 'Image' },
155
+ PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
156
+ },
157
+ 0xa1 => {
158
+ Name => 'FNumber',
159
+ Format => 'rational32u',
160
+ Groups => { 2 => 'Image' },
161
+ },
162
+ 0xa2 => {
163
+ Name => 'ExposureProgram',
164
+ Format => 'int32u', # (guess)
165
+ PrintConv => {
166
+ 0 => 'Not Defined',
167
+ 1 => 'Manual',
168
+ 2 => 'Program AE',
169
+ 3 => 'Aperture-priority AE',
170
+ 4 => 'Shutter speed priority AE',
171
+ 5 => 'Creative (Slow speed)',
172
+ 6 => 'Action (High speed)',
173
+ 7 => 'Portrait',
174
+ 8 => 'Landscape',
175
+ },
176
+ },
177
+ 0xa3 => {
178
+ Name => 'BrightnessValue',
179
+ Format => 'rational32s',
180
+ Groups => { 2 => 'Image' },
181
+ },
182
+ 0xa4 => {
183
+ Name => 'ExposureCompensation',
184
+ Format => 'rational32s',
185
+ Groups => { 2 => 'Image' },
186
+ PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)',
187
+ },
188
+ 0xa5 => {
189
+ Name => 'MaxApertureValue',
190
+ Format => 'rational32u',
191
+ ValueConv => '2 ** ($val / 2)',
192
+ PrintConv => 'sprintf("%.1f",$val)',
193
+ },
194
+ 0xa6 => {
195
+ Name => 'Flash',
196
+ Format => 'int32u', # (guess)
197
+ Flags => 'PrintHex',
198
+ SeparateTable => 'EXIF Flash',
199
+ PrintConv => \%Image::ExifTool::Exif::flash,
200
+ },
201
+ 0xa7 => {
202
+ Name => 'CustomRendered',
203
+ Format => 'int32u', # (guess)
204
+ Groups => { 2 => 'Image' },
205
+ PrintConv => {
206
+ 0 => 'Normal',
207
+ 1 => 'Custom',
208
+ },
209
+ },
210
+ 0xa8 => {
211
+ Name => 'WhiteBalance',
212
+ Format => 'int32u', # (guess)
213
+ Priority => 0,
214
+ PrintConv => {
215
+ 0 => 'Auto',
216
+ 1 => 'Manual',
217
+ },
218
+ },
219
+ 0xa9 => {
220
+ Name => 'FocalLengthIn35mmFormat',
221
+ Format => 'rational32u',
222
+ PrintConv => '"$val mm"',
223
+ },
224
+ 0xaa => {
225
+ Name => 'SceneCaptureType',
226
+ Format => 'int32u', # (guess)
227
+ PrintConv => {
228
+ 0 => 'Standard',
229
+ 1 => 'Landscape',
230
+ 2 => 'Portrait',
231
+ 3 => 'Night',
232
+ },
233
+ },
234
+ # 0xab-0xaf ExifOption
235
+ 0xb0 => {
236
+ Name => 'GPSVersionID',
237
+ Format => 'int8u',
238
+ Count => 4,
239
+ Groups => { 1 => 'GPS', 2 => 'Location' },
240
+ PrintConv => '$val =~ tr/ /./; $val',
241
+ },
242
+ 0xb1 => {
243
+ Name => 'GPSLatitudeRef',
244
+ Format => 'string',
245
+ Groups => { 1 => 'GPS', 2 => 'Location' },
246
+ PrintConv => {
247
+ N => 'North',
248
+ S => 'South',
249
+ },
250
+ },
251
+ 0xb2 => {
252
+ Name => 'GPSLatitude',
253
+ Format => 'rational32u',
254
+ Groups => { 1 => 'GPS', 2 => 'Location' },
255
+ Notes => 'combined with tags 0xb3 and 0xb4',
256
+ Combine => 2, # combine the next 2 tags (0xb2=deg, 0xb3=min, 0xb4=sec)
257
+ ValueConv => 'Image::ExifTool::GPS::ToDegrees($val)',
258
+ PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1)',
259
+ },
260
+ 0xb5 => {
261
+ Name => 'GPSLongitudeRef',
262
+ Format => 'string',
263
+ Groups => { 1 => 'GPS', 2 => 'Location' },
264
+ PrintConv => {
265
+ E => 'East',
266
+ W => 'West',
267
+ },
268
+ },
269
+ 0xb6 => {
270
+ Name => 'GPSLongitude',
271
+ Format => 'rational32u',
272
+ Groups => { 1 => 'GPS', 2 => 'Location' },
273
+ Combine => 2, # combine the next 2 tags (0xb6=deg, 0xb7=min, 0xb8=sec)
274
+ Notes => 'combined with tags 0xb7 and 0xb8',
275
+ ValueConv => 'Image::ExifTool::GPS::ToDegrees($val)',
276
+ PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1)',
277
+ },
278
+ 0xb9 => {
279
+ Name => 'GPSAltitudeRef',
280
+ Format => 'int32u', # (guess)
281
+ Groups => { 1 => 'GPS', 2 => 'Location' },
282
+ ValueConv => '$val ? 1 : 0', # because I'm not sure about the Format
283
+ PrintConv => {
284
+ 0 => 'Above Sea Level',
285
+ 1 => 'Below Sea Level',
286
+ },
287
+ },
288
+ 0xba => {
289
+ Name => 'GPSAltitude',
290
+ Format => 'rational32u',
291
+ Groups => { 1 => 'GPS', 2 => 'Location' },
292
+ },
293
+ 0xbb => {
294
+ Name => 'GPSTimeStamp',
295
+ Format => 'rational32u',
296
+ Groups => { 1 => 'GPS', 2 => 'Time' },
297
+ Combine => 2, # the next tags (0xbc/0xbd) contain the minutes/seconds
298
+ Notes => 'combined with tags 0xbc and 0xbd',
299
+ ValueConv => 'Image::ExifTool::GPS::ConvertTimeStamp($val)',
300
+ },
301
+ 0xbe => {
302
+ Name => 'GPSStatus',
303
+ Format => 'string',
304
+ Groups => { 1 => 'GPS', 2 => 'Location' },
305
+ PrintConv => {
306
+ A => 'Measurement Active',
307
+ V => 'Measurement Void',
308
+ },
309
+ },
310
+ 0xbf => {
311
+ Name => 'GPSMeasureMode',
312
+ Format => 'string',
313
+ Groups => { 1 => 'GPS', 2 => 'Location' },
314
+ PrintConv => {
315
+ 2 => '2-Dimensional Measurement',
316
+ 3 => '3-Dimensional Measurement',
317
+ },
318
+ },
319
+ 0xc0 => {
320
+ Name => 'GPSDOP',
321
+ Description => 'GPS Dilution Of Precision',
322
+ Format => 'rational32u',
323
+ Groups => { 1 => 'GPS', 2 => 'Location' },
324
+ },
325
+ 0xc1 => {
326
+ Name => 'GPSSpeedRef',
327
+ Format => 'string',
328
+ Groups => { 1 => 'GPS', 2 => 'Location' },
329
+ PrintConv => {
330
+ K => 'km/h',
331
+ M => 'mph',
332
+ N => 'knots',
333
+ },
334
+ },
335
+ 0xc2 => {
336
+ Name => 'GPSSpeed',
337
+ Format => 'rational32u',
338
+ Groups => { 1 => 'GPS', 2 => 'Location' },
339
+ },
340
+ 0xc3 => {
341
+ Name => 'GPSTrackRef',
342
+ Format => 'string',
343
+ Groups => { 1 => 'GPS', 2 => 'Location' },
344
+ PrintConv => {
345
+ M => 'Magnetic North',
346
+ T => 'True North',
347
+ },
348
+ },
349
+ 0xc4 => {
350
+ Name => 'GPSTrack',
351
+ Format => 'rational32u',
352
+ Groups => { 1 => 'GPS', 2 => 'Location' },
353
+ },
354
+ 0xc5 => {
355
+ Name => 'GPSImgDirectionRef',
356
+ Format => 'string',
357
+ Groups => { 1 => 'GPS', 2 => 'Location' },
358
+ PrintConv => {
359
+ M => 'Magnetic North',
360
+ T => 'True North',
361
+ },
362
+ },
363
+ 0xc6 => {
364
+ Name => 'GPSImgDirection',
365
+ Format => 'rational32u',
366
+ Groups => { 1 => 'GPS', 2 => 'Location' },
367
+ },
368
+ 0xc7 => {
369
+ Name => 'GPSMapDatum',
370
+ Format => 'string',
371
+ Groups => { 1 => 'GPS', 2 => 'Location' },
372
+ Combine => 1, # the next tag (0xc8) contains the rest of the string
373
+ Notes => 'combined with tag 0xc8',
374
+ },
375
+ # 0xc9-0xcf - GPSOption
376
+ 0xe0 => {
377
+ Name => 'MakeModel',
378
+ SubDirectory => { TagTable => 'Image::ExifTool::H264::MakeModel' },
379
+ },
380
+ # 0xe1-0xef - MakerOption
381
+ # 0xe1 - val: 0x01000670,0x01000678,0x06ffffff,0x01ffffff,0x01000020,0x01000400...
382
+ # 0xe2-0xe8 - val: 0x00000000 in many samples
383
+ 0xe1 => { #6
384
+ Name => 'RecInfo',
385
+ Condition => '$$self{Make} eq "Canon"',
386
+ Notes => 'Canon only',
387
+ SubDirectory => { TagTable => 'Image::ExifTool::H264::RecInfo' },
388
+ },
389
+ 0xe4 => { #PH
390
+ Name => 'Model',
391
+ Condition => '$$self{Make} eq "Sony"',
392
+ Description => 'Camera Model Name',
393
+ Notes => 'Sony cameras only, combined with tags 0xe5 and 0xe6',
394
+ Format => 'string',
395
+ Combine => 2, # (not sure about 0xe6, but include it just in case)
396
+ RawConv => '$val eq "" ? undef : $val',
397
+ },
398
+ 0xee => { #6 (HFS200)
399
+ Name => 'FrameInfo',
400
+ Condition => '$$self{Make} eq "Canon"',
401
+ Notes => 'Canon only',
402
+ SubDirectory => { TagTable => 'Image::ExifTool::H264::FrameInfo' },
403
+ },
404
+ );
405
+
406
+ # ConsumerCamera1 information (ref PH)
407
+ %Image::ExifTool::H264::Camera1 = (
408
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
409
+ GROUPS => { 2 => 'Camera' },
410
+ TAG_PREFIX => 'Camera1',
411
+ PRINT_CONV => 'sprintf("0x%.2x",$val)',
412
+ FIRST_ENTRY => 0,
413
+ 0 => {
414
+ Name => 'ApertureSetting',
415
+ PrintHex => 1,
416
+ PrintConv => {
417
+ 0xff => 'Auto',
418
+ 0xfe => 'Closed',
419
+ OTHER => sub { sprintf('%.1f', 2 ** (($_[0] & 0x3f) / 8)) },
420
+ },
421
+ },
422
+ 1 => {
423
+ Name => 'Gain',
424
+ Mask => 0x0f,
425
+ # (0x0f would translate to 42 dB, but this value is used by the Sony
426
+ # HXR-NX5U for any out-of-range value such as -6 dB or "hyper gain" - PH)
427
+ ValueConv => '($val - 1) * 3',
428
+ PrintConv => '$val==42 ? "Out of range" : "$val dB"',
429
+ },
430
+ 1.1 => {
431
+ Name => 'ExposureProgram',
432
+ Mask => 0xf0,
433
+ ValueConv => '$val == 0xf0 ? undef : $val',
434
+ PrintConv => {
435
+ 0x00 => 'Program AE',
436
+ 0x10 => 'Gain', #?
437
+ 0x20 => 'Shutter speed priority AE',
438
+ 0x30 => 'Aperture-priority AE',
439
+ 0x40 => 'Manual',
440
+ },
441
+ },
442
+ 2.1 => {
443
+ Name => 'WhiteBalance',
444
+ Mask => 0xe0,
445
+ ValueConv => '$val == 0xe0 ? undef : $val',
446
+ PrintConv => {
447
+ 0x00 => 'Auto',
448
+ 0x20 => 'Hold',
449
+ 0x40 => '1-Push',
450
+ 0x60 => 'Daylight',
451
+ },
452
+ },
453
+ 3 => {
454
+ Name => 'Focus',
455
+ ValueConv => '$val == 0xff ? undef : $val',
456
+ PrintConv => q{
457
+ my $foc = ($val & 0x7e) / (($val & 0x01) ? 40 : 400);
458
+ return ($val & 0x80 ? 'Manual' : 'Auto') . " ($foc)";
459
+ },
460
+ },
461
+ );
462
+
463
+ # ConsumerCamera2 information (ref PH)
464
+ %Image::ExifTool::H264::Camera2 = (
465
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
466
+ GROUPS => { 2 => 'Camera' },
467
+ TAG_PREFIX => 'Camera2',
468
+ PRINT_CONV => 'sprintf("0x%.2x",$val)',
469
+ FIRST_ENTRY => 0,
470
+ 1 => {
471
+ Name => 'ImageStabilization',
472
+ PrintHex => 1,
473
+ PrintConv => {
474
+ 0 => 'Off',
475
+ 0x3f => 'On (0x3f)', #8
476
+ 0xbf => 'Off (0xbf)', #8
477
+ 0xff => 'n/a',
478
+ OTHER => sub {
479
+ my $val = shift;
480
+ sprintf("%s (0x%.2x)", $val & 0x10 ? "On" : "Off", $val);
481
+ },
482
+ },
483
+ },
484
+ );
485
+
486
+ # camera info 0x7f (ref PH)
487
+ %Image::ExifTool::H264::Shutter = (
488
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
489
+ GROUPS => { 2 => 'Image' },
490
+ TAG_PREFIX => 'Shutter',
491
+ PRINT_CONV => 'sprintf("0x%.2x",$val)',
492
+ FIRST_ENTRY => 0,
493
+ FORMAT => 'int16u',
494
+ 1.1 => { #6
495
+ Name => 'ExposureTime',
496
+ Mask => 0x7fff, # (what is bit 0x8000 for?)
497
+ RawConv => '$val == 0x7fff ? undef : $val', #7
498
+ ValueConv => '$val / 33640', #PH (conversion factor determined empirically)
499
+ PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
500
+ },
501
+ );
502
+
503
+ # camera info 0xe0 (ref PH)
504
+ %Image::ExifTool::H264::MakeModel = (
505
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
506
+ GROUPS => { 2 => 'Camera' },
507
+ FORMAT => 'int16u',
508
+ FIRST_ENTRY => 0,
509
+ 0 => {
510
+ Name => 'Make',
511
+ PrintHex => 1,
512
+ RawConv => '$$self{Make} = ($Image::ExifTool::H264::convMake{$val} || "Unknown"); $val',
513
+ PrintConv => \%convMake,
514
+ },
515
+ # 1 => ModelIDCode according to ref 4/5 (I think not)
516
+ # vals: 0x3001 - Sony HDR-CX105E/TG3E/XR500V
517
+ # 0x1000 - Sony HDR-UX1
518
+ # 0x3000 - Canon HF100 (30p)
519
+ # 0x2000 - Canon HF100 (60i)
520
+ # 0x3101 - Canon HFM300 (PH, all qualities and frame rates)
521
+ );
522
+
523
+ # camera info 0xe1 (ref 6)
524
+ %Image::ExifTool::H264::RecInfo = (
525
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
526
+ GROUPS => { 2 => 'Camera' },
527
+ FORMAT => 'int8u',
528
+ NOTES => 'Recording information stored by some Canon video cameras.',
529
+ FIRST_ENTRY => 0,
530
+ 0 => {
531
+ Name => 'RecordingMode',
532
+ PrintConv => {
533
+ 0x02 => 'XP+', # High Quality 12 Mbps
534
+ 0x04 => 'SP', # Standard Play 7 Mbps
535
+ 0x05 => 'LP', # Long Play 5 Mbps
536
+ 0x06 => 'FXP', # High Quality 17 Mbps
537
+ 0x07 => 'MXP', # High Quality 24 Mbps
538
+ },
539
+ },
540
+ );
541
+
542
+ # camera info 0xee (ref 6)
543
+ %Image::ExifTool::H264::FrameInfo = (
544
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
545
+ GROUPS => { 2 => 'Video' },
546
+ FORMAT => 'int8u',
547
+ NOTES => 'Frame rate information stored by some Canon video cameras.',
548
+ FIRST_ENTRY => 0,
549
+ 0 => 'CaptureFrameRate',
550
+ 1 => 'VideoFrameRate',
551
+ # 2 - 8=60i, 10=PF30, 74=PF24 (PH, HFM300)
552
+ );
553
+
554
+ #==============================================================================
555
+ # Bitstream functions (used for H264 video)
556
+ #
557
+ # Member variables:
558
+ # Mask = mask for next bit to read (0 when all data has been read)
559
+ # Pos = byte offset of next word to read
560
+ # Word = current data word
561
+ # Len = total data length in bytes
562
+ # DataPt = data pointer
563
+ #..............................................................................
564
+
565
+ #------------------------------------------------------------------------------
566
+ # Read next word from bitstream
567
+ # Inputs: 0) BitStream ref
568
+ # Returns: true if there is more data (and updates
569
+ # Mask, Pos and Word for first bit in next word)
570
+ sub ReadNextWord($)
571
+ {
572
+ my $bstr = shift;
573
+ my $pos = $$bstr{Pos};
574
+ if ($pos + 4 <= $$bstr{Len}) {
575
+ $$bstr{Word} = unpack("x$pos N", ${$$bstr{DataPt}});
576
+ $$bstr{Mask} = 0x80000000;
577
+ $$bstr{Pos} += 4;
578
+ } elsif ($pos < $$bstr{Len}) {
579
+ my @bytes = unpack("x$pos C*", ${$$bstr{DataPt}});
580
+ my ($word, $mask) = (shift(@bytes), 0x80);
581
+ while (@bytes) {
582
+ $word = ($word << 8) | shift(@bytes);
583
+ $mask <<= 8;
584
+ }
585
+ $$bstr{Word} = $word;
586
+ $$bstr{Mask} = $mask;
587
+ $$bstr{Pos} = $$bstr{Len};
588
+ } else {
589
+ return 0;
590
+ }
591
+ return 1;
592
+ }
593
+
594
+ #------------------------------------------------------------------------------
595
+ # Create a new BitStream object
596
+ # Inputs: 0) data ref
597
+ # Returns: BitStream ref, or null if data is empty
598
+ sub NewBitStream($)
599
+ {
600
+ my $dataPt = shift;
601
+ my $bstr = {
602
+ DataPt => $dataPt,
603
+ Len => length($$dataPt),
604
+ Pos => 0,
605
+ Mask => 0,
606
+ };
607
+ ReadNextWord($bstr) or undef $bstr;
608
+ return $bstr;
609
+ }
610
+
611
+ #------------------------------------------------------------------------------
612
+ # Get number of bits remaining in bit stream
613
+ # Inputs: 0) BitStream ref
614
+ # Returns: number of bits remaining
615
+ sub BitsLeft($)
616
+ {
617
+ my $bstr = shift;
618
+ my $bits = 0;
619
+ my $mask = $$bstr{Mask};
620
+ while ($mask) {
621
+ ++$bits;
622
+ $mask >>= 1;
623
+ }
624
+ return $bits + 8 * ($$bstr{Len} - $$bstr{Pos});
625
+ }
626
+
627
+ #------------------------------------------------------------------------------
628
+ # Get integer from bitstream
629
+ # Inputs: 0) BitStream ref, 1) number of bits
630
+ # Returns: integer (and increments position in bitstream)
631
+ sub GetIntN($$)
632
+ {
633
+ my ($bstr, $bits) = @_;
634
+ my $val = 0;
635
+ while ($bits--) {
636
+ $val <<= 1;
637
+ ++$val if $$bstr{Mask} & $$bstr{Word};
638
+ $$bstr{Mask} >>= 1 and next;
639
+ ReadNextWord($bstr) or last;
640
+ }
641
+ return $val;
642
+ }
643
+
644
+ #------------------------------------------------------------------------------
645
+ # Get Exp-Golomb integer from bitstream
646
+ # Inputs: 0) BitStream ref
647
+ # Returns: integer (and increments position in bitstream)
648
+ sub GetGolomb($)
649
+ {
650
+ my $bstr = shift;
651
+ # first, count the number of zero bits to get the integer bit width
652
+ my $count = 0;
653
+ until ($$bstr{Mask} & $$bstr{Word}) {
654
+ ++$count;
655
+ $$bstr{Mask} >>= 1 and next;
656
+ ReadNextWord($bstr) or last;
657
+ }
658
+ # then return the adjusted integer
659
+ return GetIntN($bstr, $count + 1) - 1;
660
+ }
661
+
662
+ #------------------------------------------------------------------------------
663
+ # Get signed Exp-Golomb integer from bitstream
664
+ # Inputs: 0) BitStream ref
665
+ # Returns: integer (and increments position in bitstream)
666
+ sub GetGolombS($)
667
+ {
668
+ my $bstr = shift;
669
+ my $val = GetGolomb($bstr) + 1;
670
+ return ($val & 1) ? -($val >> 1) : ($val >> 1);
671
+ }
672
+
673
+ # end bitstream functions
674
+ #==============================================================================
675
+
676
+ #------------------------------------------------------------------------------
677
+ # Decode H.264 scaling matrices
678
+ # Inputs: 0) BitStream ref
679
+ # Reference: http://ffmpeg.org/
680
+ sub DecodeScalingMatrices($)
681
+ {
682
+ my $bstr = shift;
683
+ if (GetIntN($bstr, 1)) {
684
+ my ($i, $j);
685
+ for ($i=0; $i<8; ++$i) {
686
+ my $size = $i<6 ? 16 : 64;
687
+ next unless GetIntN($bstr, 1);
688
+ my ($last, $next) = (8, 8);
689
+ for ($j=0; $j<$size; ++$j) {
690
+ $next = ($last + GetGolombS($bstr)) & 0xff if $next;
691
+ last unless $j or $next;
692
+ }
693
+ }
694
+ }
695
+ }
696
+
697
+ #------------------------------------------------------------------------------
698
+ # Parse H.264 sequence parameter set RBSP (ref 1)
699
+ # Inputs) 0) ExifTool ref, 1) tag table ref, 2) data ref
700
+ sub ParseSeqParamSet($$$)
701
+ {
702
+ my ($exifTool, $tagTablePtr, $dataPt) = @_;
703
+ # initialize our bitstream object
704
+ my $bstr = NewBitStream($dataPt) or return;
705
+ my ($t, $i, $j, $n);
706
+ # the messy nature of H.264 encoding makes it difficult to use
707
+ # data-driven structure parsing, so I code it explicitly (yuck!)
708
+ $t = GetIntN($bstr, 8); # profile_idc
709
+ GetIntN($bstr, 16); # constraints and level_idc
710
+ GetGolomb($bstr); # seq_parameter_set_id
711
+ if ($t >= 100) { # (ref b)
712
+ $t = GetGolomb($bstr); # chroma_format_idc
713
+ if ($t == 3) {
714
+ GetIntN($bstr, 1); # separate_colour_plane_flag
715
+ $n = 12;
716
+ } else {
717
+ $n = 8;
718
+ }
719
+ GetGolomb($bstr); # bit_depth_luma_minus8
720
+ GetGolomb($bstr); # bit_depth_chroma_minus8
721
+ GetIntN($bstr, 1); # qpprime_y_zero_transform_bypass_flag
722
+ DecodeScalingMatrices($bstr);
723
+ }
724
+ GetGolomb($bstr); # log2_max_frame_num_minus4
725
+ $t = GetGolomb($bstr); # pic_order_cnt_type
726
+ if ($t == 0) {
727
+ GetGolomb($bstr); # log2_max_pic_order_cnt_lsb_minus4
728
+ } elsif ($t == 1) {
729
+ GetIntN($bstr, 1); # delta_pic_order_always_zero_flag
730
+ GetGolomb($bstr); # offset_for_non_ref_pic
731
+ GetGolomb($bstr); # offset_for_top_to_bottom_field
732
+ $n = GetGolomb($bstr); # num_ref_frames_in_pic_order_cnt_cycle
733
+ for ($i=0; $i<$n; ++$i) {
734
+ GetGolomb($bstr); # offset_for_ref_frame[i]
735
+ }
736
+ }
737
+ GetGolomb($bstr); # num_ref_frames
738
+ GetIntN($bstr, 1); # gaps_in_frame_num_value_allowed_flag
739
+ my $w = GetGolomb($bstr); # pic_width_in_mbs_minus1
740
+ my $h = GetGolomb($bstr); # pic_height_in_map_units_minus1
741
+ my $f = GetIntN($bstr, 1); # frame_mbs_only_flag
742
+ $f or GetIntN($bstr, 1); # mb_adaptive_frame_field_flag
743
+ GetIntN($bstr, 1); # direct_8x8_inference_flag
744
+ # convert image size to pixels
745
+ $w = ($w + 1) * 16;
746
+ $h = (2 - $f) * ($h + 1) * 16;
747
+ # account for cropping (if any)
748
+ $t = GetIntN($bstr, 1); # frame_cropping_flag
749
+ if ($t) {
750
+ my $m = 4 - $f * 2;
751
+ $w -= 4 * GetGolomb($bstr);# frame_crop_left_offset
752
+ $w -= 4 * GetGolomb($bstr);# frame_crop_right_offset
753
+ $h -= $m * GetGolomb($bstr);# frame_crop_top_offset
754
+ $h -= $m * GetGolomb($bstr);# frame_crop_bottom_offset
755
+ }
756
+ # quick validity checks (just in case)
757
+ return unless $$bstr{Mask};
758
+ if ($w>=160 and $w<=4096 and $h>=120 and $h<=3072) {
759
+ $exifTool->HandleTag($tagTablePtr, ImageWidth => $w);
760
+ $exifTool->HandleTag($tagTablePtr, ImageHeight => $h);
761
+ # (whew! -- so much work just to get ImageSize!!)
762
+ }
763
+ # return now unless interested in picture timing information
764
+ return unless $parsePictureTiming;
765
+
766
+ # parse vui parameters if they exist
767
+ GetIntN($bstr, 1) or return; # vui_parameters_present_flag
768
+ $t = GetIntN($bstr, 1); # aspect_ratio_info_present_flag
769
+ if ($t) {
770
+ $t = GetIntN($bstr, 8); # aspect_ratio_idc
771
+ if ($t == 255) { # Extended_SAR ?
772
+ GetIntN($bstr, 32); # sar_width/sar_height
773
+ }
774
+ }
775
+ $t = GetIntN($bstr, 1); # overscan_info_present_flag
776
+ GetIntN($bstr, 1) if $t; # overscan_appropriate_flag
777
+ $t = GetIntN($bstr, 1); # video_signal_type_present_flag
778
+ if ($t) {
779
+ GetIntN($bstr, 4); # video_format/video_full_range_flag
780
+ $t = GetIntN($bstr, 1); # colour_description_present_flag
781
+ GetIntN($bstr, 24) if $t; # colour_primaries/transfer_characteristics/matrix_coefficients
782
+ }
783
+ $t = GetIntN($bstr, 1); # chroma_loc_info_present_flag
784
+ if ($t) {
785
+ GetGolomb($bstr); # chroma_sample_loc_type_top_field
786
+ GetGolomb($bstr); # chroma_sample_loc_type_bottom_field
787
+ }
788
+ $t = GetIntN($bstr, 1); # timing_info_present_flag
789
+ if ($t) {
790
+ return if BitsLeft($bstr) < 65;
791
+ $$exifTool{VUI_units} = GetIntN($bstr, 32); # num_units_in_tick
792
+ $$exifTool{VUI_scale} = GetIntN($bstr, 32); # time_scale
793
+ GetIntN($bstr, 1); # fixed_frame_rate_flag
794
+ }
795
+ my $hard;
796
+ for ($j=0; $j<2; ++$j) {
797
+ $t = GetIntN($bstr, 1); # nal_/vcl_hrd_parameters_present_flag
798
+ if ($t) {
799
+ $$exifTool{VUI_hard} = 1;
800
+ $hard = 1;
801
+ $n = GetGolomb($bstr); # cpb_cnt_minus1
802
+ GetIntN($bstr, 8); # bit_rate_scale/cpb_size_scale
803
+ for ($i=0; $i<=$n; ++$i) {
804
+ GetGolomb($bstr); # bit_rate_value_minus1[SchedSelIdx]
805
+ GetGolomb($bstr); # cpb_size_value_minus1[SchedSelIdx]
806
+ GetIntN($bstr, 1); # cbr_flag[SchedSelIdx]
807
+ }
808
+ GetIntN($bstr, 5); # initial_cpb_removal_delay_length_minus1
809
+ $$exifTool{VUI_clen} = GetIntN($bstr, 5); # cpb_removal_delay_length_minus1
810
+ $$exifTool{VUI_dlen} = GetIntN($bstr, 5); # dpb_output_delay_length_minus1
811
+ $$exifTool{VUI_toff} = GetIntN($bstr, 5); # time_offset_length
812
+ }
813
+ }
814
+ GetIntN($bstr, 1) if $hard; # low_delay_hrd_flag
815
+ $$exifTool{VUI_pic} = GetIntN($bstr, 1); # pic_struct_present_flag
816
+ # (don't yet decode the rest of the vui data)
817
+ }
818
+
819
+ #------------------------------------------------------------------------------
820
+ # Parse H.264 picture timing SEI message (payload type 1) (ref 1)
821
+ # Inputs) 0) ExifTool ref, 1) data ref
822
+ sub ParsePictureTiming($$)
823
+ {
824
+ my ($exifTool, $dataPt) = @_;
825
+ my $bstr = NewBitStream($dataPt) or return;
826
+ my ($i, $t, $n);
827
+ # the specification is very odd on this point: the following delays
828
+ # exist if the VUI hardware parameters are present, or if
829
+ # "determined by the application, by some means not specified" -- WTF??
830
+ if ($$exifTool{VUI_hard}) {
831
+ GetIntN($bstr, $$exifTool{VUI_clen} + 1); # cpb_removal_delay
832
+ GetIntN($bstr, $$exifTool{VUI_dlen} + 1); # dpb_output_delay
833
+ }
834
+ if ($$exifTool{VUI_pic}) {
835
+ $t = GetIntN($bstr, 4); # pic_struct
836
+ # determine NumClockTS ($n)
837
+ $n = { 0=>1, 1=>1, 2=>1, 3=>2, 4=>2, 5=>3, 6=>3, 7=>2, 8=>3 }->{$t};
838
+ $n or return;
839
+ for ($i=0; $i<$n; ++$i) {
840
+ $t = GetIntN($bstr, 1); # clock_timestamp_flag[i]
841
+ next unless $t;
842
+ my ($nu, $s, $m, $h, $o);
843
+ GetIntN($bstr, 2); # ct_type
844
+ $nu = GetIntN($bstr, 1);# nuit_field_based_flag
845
+ GetIntN($bstr, 5); # counting_type
846
+ $t = GetIntN($bstr, 1); # full_timestamp_flag
847
+ GetIntN($bstr, 1); # discontinuity_flag
848
+ GetIntN($bstr, 1); # cnt_dropped_flag
849
+ GetIntN($bstr, 8); # n_frames
850
+ if ($t) {
851
+ $s = GetIntN($bstr, 6); # seconds_value
852
+ $m = GetIntN($bstr, 6); # minutes_value
853
+ $h = GetIntN($bstr, 5); # hours_value
854
+ } else {
855
+ $t = GetIntN($bstr, 1); # seconds_flag
856
+ if ($t) {
857
+ $s = GetIntN($bstr, 6); # seconds_value
858
+ $t = GetIntN($bstr, 1); # minutes_flag
859
+ if ($t) {
860
+ $m = GetIntN($bstr, 6); # minutes_value
861
+ $t = GetIntN($bstr, 1); # hours_flag
862
+ $h = GetIntN($bstr, 5) if $t; # hours_value
863
+ }
864
+ }
865
+ }
866
+ if ($$exifTool{VUI_toff}) {
867
+ $o = GetIntN($bstr, $$exifTool{VUI_toff}); # time_offset
868
+ }
869
+ last; # only parse the first clock timestamp found
870
+ }
871
+ }
872
+ }
873
+
874
+ #------------------------------------------------------------------------------
875
+ # Process H.264 Supplementary Enhancement Information (ref 1/PH)
876
+ # Inputs: 0) Exiftool ref, 1) dirInfo ref, 2) tag table ref
877
+ # Returns: 1 if we processed payload type 5
878
+ sub ProcessSEI($$)
879
+ {
880
+ my ($exifTool, $dirInfo) = @_;
881
+ my $dataPt = $$dirInfo{DataPt};
882
+ my $end = length($$dataPt);
883
+ my $pos = 0;
884
+ my ($type, $size, $index, $t);
885
+
886
+ # scan through SEI payload for type 5 (the unregistered user data)
887
+ for (;;) {
888
+ $type = 0;
889
+ for (;;) {
890
+ return 0 if $pos >= $end;
891
+ $t = Get8u($dataPt, $pos++); # payload type
892
+ $type += $t;
893
+ last unless $t == 255;
894
+ }
895
+ return 0 if $type == 0x80; # terminator (ref PH - maybe byte alignment bits?)
896
+ $size = 0;
897
+ for (;;) {
898
+ return 0 if $pos >= $end;
899
+ $t = Get8u($dataPt, $pos++); # payload data length
900
+ $size += $t;
901
+ last unless $t == 255;
902
+ }
903
+ return 0 if $pos + $size > $end;
904
+ if ($type == 1) { # picture timing information
905
+ if ($parsePictureTiming) {
906
+ my $buff = substr($$dataPt, $pos, $size);
907
+ ParsePictureTiming($exifTool, $dataPt);
908
+ }
909
+ } elsif ($type == 5) { # unregistered user data
910
+ last; # exit loop to process user data now
911
+ }
912
+ $pos += $size;
913
+ }
914
+
915
+ # look for our 16-byte UUID
916
+ # - plus "MDPM" for "ModifiedDVPackMeta"
917
+ # - plus "GA94" for closed-caption data (currently not decoded)
918
+ return 0 unless $size > 20 and substr($$dataPt, $pos, 20) eq
919
+ "\x17\xee\x8c\x60\xf8\x4d\x11\xd9\x8c\xd6\x08\0\x20\x0c\x9a\x66MDPM";
920
+
921
+ # load the GPS module because it contains conversion routines and
922
+ # Composite tags needed for a number of tags we may be extracting
923
+ require Image::ExifTool::GPS;
924
+ #
925
+ # parse the MDPM records in the UUID 17ee8c60f84d11d98cd60800200c9a66
926
+ # unregistered user data payload (ref PH)
927
+ #
928
+ my $tagTablePtr = GetTagTable('Image::ExifTool::H264::MDPM');
929
+ my $oldIndent = $$exifTool{INDENT};
930
+ $$exifTool{INDENT} .= '| ';
931
+ $end = $pos + $size; # end of payload
932
+ $pos += 20; # skip UUID + "MDPM"
933
+ my $num = Get8u($dataPt, $pos++); # get entry count
934
+ my $lastTag = 0;
935
+ $exifTool->VerboseDir('MDPM', $num) if $exifTool->Options('Verbose');
936
+ # walk through entries in the MDPM payload
937
+ for ($index=0; $index<$num and $pos<$end; ++$index) {
938
+ my $tag = Get8u($dataPt, $pos);
939
+ if ($tag <= $lastTag) { # should be in numerical order (PH)
940
+ $exifTool->Warn('Entries in MDPM directory are out of sequence');
941
+ last;
942
+ }
943
+ $lastTag = $tag;
944
+ my $buff = substr($$dataPt, $pos + 1, 4);
945
+ my $from;
946
+ my $tagInfo = $exifTool->GetTagInfo($tagTablePtr, $tag);
947
+ if ($tagInfo) {
948
+ # use our own print conversion for Unknown tags
949
+ if ($$tagInfo{Unknown} and not $$tagInfo{SetPrintConv}) {
950
+ $$tagInfo{PrintConv} = 'sprintf("0x%.8x", unpack("N", $val))';
951
+ $$tagInfo{SetPrintConv} = 1;
952
+ }
953
+ # combine with next value(s) if necessary
954
+ my $combine = $$tagTablePtr{$tag}{Combine};
955
+ while ($combine) {
956
+ last if $pos + 5 >= $end;
957
+ my $t = Get8u($dataPt, $pos + 5);
958
+ last if $t != $lastTag + 1; # must be consecutive tag ID's
959
+ $pos += 5;
960
+ $buff .= substr($$dataPt, $pos + 1, 4);
961
+ $from = $index unless defined $from;
962
+ ++$index;
963
+ ++$lastTag;
964
+ --$combine;
965
+ }
966
+ $exifTool->HandleTag($tagTablePtr, $tag, undef,
967
+ TagInfo => $tagInfo,
968
+ DataPt => \$buff,
969
+ Size => length($buff),
970
+ Index => defined $from ? "$from-$index" : $index,
971
+ );
972
+ }
973
+ $pos += 5;
974
+ }
975
+ $$exifTool{INDENT} = $oldIndent;
976
+ return 1;
977
+ }
978
+
979
+ #------------------------------------------------------------------------------
980
+ # Extract information from H.264 video stream
981
+ # Inputs: 0) ExifTool ref, 1) data ref
982
+ # Returns: 0 = done parsing, 1 = we want to parse more of these
983
+ sub ParseH264Video($$)
984
+ {
985
+ my ($exifTool, $dataPt) = @_;
986
+ my $verbose = $exifTool->Options('Verbose');
987
+ my $out = $exifTool->Options('TextOut');
988
+ my $tagTablePtr = GetTagTable('Image::ExifTool::H264::Main');
989
+ my %parseNalUnit = ( 0x06 => 1, 0x07 => 1 ); # NAL unit types to parse
990
+ my $foundUserData;
991
+ my $len = length $$dataPt;
992
+ my $pos = 0;
993
+ while ($pos < $len) {
994
+ my ($nextPos, $end);
995
+ # find start of next NAL unit
996
+ if ($$dataPt =~ /(\0{2,3}\x01)/g) {
997
+ $nextPos = pos $$dataPt;
998
+ $end = $nextPos - length $1;
999
+ $pos or $pos = $nextPos, next;
1000
+ } else {
1001
+ last unless $pos;
1002
+ $nextPos = $end = $len;
1003
+ }
1004
+ last if $pos >= $len;
1005
+ # parse NAL unit from $pos to $end
1006
+ my $nal_unit_type = Get8u($dataPt, $pos);
1007
+ ++$pos;
1008
+ # check forbidden_zero_bit
1009
+ $nal_unit_type & 0x80 and $exifTool->Warn('H264 forbidden bit error'), last;
1010
+ $nal_unit_type &= 0x1f;
1011
+ # ignore this NAL unit unless we will parse it
1012
+ $parseNalUnit{$nal_unit_type} or $verbose or $pos = $nextPos, next;
1013
+ # read NAL unit (and convert all 0x000003's to 0x0000 as per spec.)
1014
+ my $buff = '';
1015
+ pos($$dataPt) = $pos + 1;
1016
+ while ($$dataPt =~ /\0\0\x03/g) {
1017
+ last if pos $$dataPt > $end;
1018
+ $buff .= substr($$dataPt, $pos, pos($$dataPt)-1-$pos);
1019
+ $pos = pos $$dataPt;
1020
+ }
1021
+ $buff .= substr($$dataPt, $pos, $end - $pos);
1022
+ if ($verbose > 1) {
1023
+ printf $out " NAL Unit Type: 0x%x (%d bytes)\n",$nal_unit_type, length $buff;
1024
+ my %parms = ( Out => $out );
1025
+ $parms{MaxLen} = 96 if $verbose < 4;
1026
+ Image::ExifTool::HexDump(\$buff, undef, %parms) if $verbose > 2;
1027
+ }
1028
+ pos($$dataPt) = $pos = $nextPos;
1029
+
1030
+ if ($nal_unit_type == 0x06) { # sei_rbsp (supplemental enhancement info)
1031
+
1032
+ if ($$exifTool{GotNAL06}) {
1033
+ # process only the first SEI unless ExtractEmbedded is set
1034
+ next unless $exifTool->Options('ExtractEmbedded');
1035
+ $$exifTool{DOC_NUM} = $$exifTool{GotNAL06};
1036
+ }
1037
+ $foundUserData = ProcessSEI($exifTool, { DataPt => \$buff } );
1038
+ delete $$exifTool{DOC_NUM};
1039
+ # keep parsing SEI's until we find the user data
1040
+ next unless $foundUserData;
1041
+ $$exifTool{GotNAL06} = ($$exifTool{GotNAL06} || 0) + 1;
1042
+
1043
+ } elsif ($nal_unit_type == 0x07) { # sequence_parameter_set_rbsp
1044
+
1045
+ # process this NAL unit type only once
1046
+ next if $$exifTool{GotNAL07};
1047
+ $$exifTool{GotNAL07} = 1;
1048
+ ParseSeqParamSet($exifTool, $tagTablePtr, \$buff);
1049
+ }
1050
+ # we were successful, so don't parse this NAL unit type again
1051
+ delete $parseNalUnit{$nal_unit_type};
1052
+ }
1053
+ # parse one extra H264 frame if we didn't find the user data in this one
1054
+ # (Panasonic cameras don't put the SEI in the first frame)
1055
+ return 0 if $foundUserData or $$exifTool{ParsedH264};
1056
+ $$exifTool{ParsedH264} = 1;
1057
+ return 1;
1058
+ }
1059
+
1060
+ 1; # end
1061
+
1062
+ __END__
1063
+
1064
+ =head1 NAME
1065
+
1066
+ Image::ExifTool::H264 - Read meta information from H.264 video
1067
+
1068
+ =head1 SYNOPSIS
1069
+
1070
+ This module is used by Image::ExifTool
1071
+
1072
+ =head1 DESCRIPTION
1073
+
1074
+ This module contains routines required by Image::ExifTool to extract
1075
+ information from H.264 video streams.
1076
+
1077
+ =head1 AUTHOR
1078
+
1079
+ Copyright 2003-2013, Phil Harvey (phil at owl.phy.queensu.ca)
1080
+
1081
+ This library is free software; you can redistribute it and/or modify it
1082
+ under the same terms as Perl itself.
1083
+
1084
+ =head1 REFERENCES
1085
+
1086
+ =over 4
1087
+
1088
+ =item L<http://www.itu.int/rec/T-REC-H.264/e>
1089
+
1090
+ =item L<http://miffteevee.co.uk/documentation/development/H264Parser_8cpp-source.html>
1091
+
1092
+ =item L<http://ffmpeg.org/>
1093
+
1094
+ =back
1095
+
1096
+ =head1 SEE ALSO
1097
+
1098
+ L<Image::ExifTool::TagNames/H264 Tags>,
1099
+ L<Image::ExifTool(3pm)|Image::ExifTool>
1100
+
1101
+ =cut
1102
+