exiftool_vendored 9.45.0 → 9.46.0

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

Potentially problematic release.


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

Files changed (1073) hide show
  1. checksums.yaml +8 -8
  2. data/bin/Image-ExifTool-9.46/Changes +6444 -0
  3. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/MANIFEST +0 -0
  4. data/bin/Image-ExifTool-9.46/META.yml +27 -0
  5. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/Makefile.PL +0 -0
  6. data/bin/Image-ExifTool-9.46/README +228 -0
  7. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/arg_files/exif2iptc.args +0 -0
  8. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/arg_files/exif2xmp.args +0 -0
  9. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/arg_files/gps2xmp.args +0 -0
  10. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/arg_files/iptc2exif.args +0 -0
  11. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/arg_files/iptc2xmp.args +0 -0
  12. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/arg_files/iptcCore.args +0 -0
  13. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/arg_files/pdf2xmp.args +0 -0
  14. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/arg_files/xmp2exif.args +0 -0
  15. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/arg_files/xmp2gps.args +0 -0
  16. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/arg_files/xmp2iptc.args +0 -0
  17. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/arg_files/xmp2pdf.args +0 -0
  18. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/config_files/ExifTool_config +0 -0
  19. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/config_files/convert_regions.config +0 -0
  20. data/bin/Image-ExifTool-9.46/exiftool +5767 -0
  21. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/fmt_files/gpx.fmt +0 -0
  22. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/fmt_files/gpx_wpt.fmt +0 -0
  23. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/fmt_files/kml.fmt +0 -0
  24. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/ExifTool.html +0 -0
  25. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/MIE1.1-20070121.pdf +0 -0
  26. data/bin/Image-ExifTool-9.46/html/Shift.html +173 -0
  27. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/AFCP.html +0 -0
  28. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/AIFF.html +0 -0
  29. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/APE.html +0 -0
  30. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/APP12.html +0 -0
  31. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/ASF.html +0 -0
  32. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Apple.html +0 -0
  33. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/BMP.html +0 -0
  34. data/bin/Image-ExifTool-9.46/html/TagNames/Canon.html +8322 -0
  35. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/CanonCustom.html +0 -0
  36. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/CanonRaw.html +0 -0
  37. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/CanonVRD.html +0 -0
  38. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Casio.html +0 -0
  39. data/bin/Image-ExifTool-9.46/html/TagNames/Composite.html +673 -0
  40. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/DICOM.html +0 -0
  41. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/DNG.html +0 -0
  42. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/DPX.html +0 -0
  43. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/DV.html +0 -0
  44. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/DarwinCore.html +0 -0
  45. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/DjVu.html +0 -0
  46. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/EXE.html +0 -0
  47. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/EXIF.html +0 -0
  48. data/bin/Image-ExifTool-9.46/html/TagNames/Extra.html +309 -0
  49. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/FLAC.html +0 -0
  50. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/FLIR.html +0 -0
  51. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Flash.html +0 -0
  52. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/FlashPix.html +0 -0
  53. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Font.html +0 -0
  54. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/FotoStation.html +0 -0
  55. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/FujiFilm.html +0 -0
  56. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/GE.html +0 -0
  57. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/GIF.html +0 -0
  58. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/GIMP.html +0 -0
  59. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/GPS.html +0 -0
  60. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/GeoTiff.html +0 -0
  61. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/H264.html +0 -0
  62. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/HP.html +0 -0
  63. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/HTML.html +0 -0
  64. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/ICC_Profile.html +0 -0
  65. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/ID3.html +0 -0
  66. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/IPTC.html +0 -0
  67. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/ITC.html +0 -0
  68. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/JFIF.html +0 -0
  69. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/JPEG.html +0 -0
  70. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/JVC.html +0 -0
  71. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Jpeg2000.html +0 -0
  72. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Kodak.html +0 -0
  73. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/KyoceraRaw.html +0 -0
  74. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/LNK.html +0 -0
  75. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Leaf.html +0 -0
  76. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/M2TS.html +0 -0
  77. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/MIE.html +0 -0
  78. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/MIFF.html +0 -0
  79. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/MNG.html +0 -0
  80. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/MPC.html +0 -0
  81. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/MPEG.html +0 -0
  82. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/MPF.html +0 -0
  83. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/MWG.html +0 -0
  84. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/MXF.html +0 -0
  85. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Matroska.html +0 -0
  86. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Microsoft.html +0 -0
  87. data/bin/Image-ExifTool-9.46/html/TagNames/Minolta.html +2568 -0
  88. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/MinoltaRaw.html +0 -0
  89. data/bin/Image-ExifTool-9.46/html/TagNames/Nikon.html +4498 -0
  90. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/NikonCapture.html +0 -0
  91. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/NikonCustom.html +0 -0
  92. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/OOXML.html +0 -0
  93. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Ogg.html +0 -0
  94. data/bin/Image-ExifTool-9.46/html/TagNames/Olympus.html +3401 -0
  95. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/OpenEXR.html +0 -0
  96. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/PDF.html +0 -0
  97. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/PGF.html +0 -0
  98. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/PICT.html +0 -0
  99. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/PLIST.html +0 -0
  100. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/PNG.html +0 -0
  101. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/PSP.html +0 -0
  102. data/bin/Image-ExifTool-9.46/html/TagNames/Panasonic.html +1599 -0
  103. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/PanasonicRaw.html +0 -0
  104. data/bin/Image-ExifTool-9.46/html/TagNames/Pentax.html +4528 -0
  105. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/PhaseOne.html +0 -0
  106. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/PhotoCD.html +0 -0
  107. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/PhotoMechanic.html +0 -0
  108. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Photoshop.html +0 -0
  109. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/PostScript.html +0 -0
  110. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/PrintIM.html +0 -0
  111. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Qualcomm.html +0 -0
  112. data/bin/Image-ExifTool-9.46/html/TagNames/QuickTime.html +3438 -0
  113. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/RIFF.html +0 -0
  114. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/RSRC.html +0 -0
  115. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/RTF.html +0 -0
  116. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Radiance.html +0 -0
  117. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Rawzor.html +0 -0
  118. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Real.html +0 -0
  119. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Reconyx.html +0 -0
  120. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Ricoh.html +0 -0
  121. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Samsung.html +0 -0
  122. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Sanyo.html +0 -0
  123. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Scalado.html +0 -0
  124. data/bin/Image-ExifTool-9.46/html/TagNames/Shortcuts.html +240 -0
  125. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Sigma.html +0 -0
  126. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/SigmaRaw.html +0 -0
  127. data/bin/Image-ExifTool-9.46/html/TagNames/Sony.html +5721 -0
  128. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/SonyIDC.html +0 -0
  129. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Stim.html +0 -0
  130. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Theora.html +0 -0
  131. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Torrent.html +0 -0
  132. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Unknown.html +0 -0
  133. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/Vorbis.html +0 -0
  134. data/bin/Image-ExifTool-9.46/html/TagNames/XMP.html +7939 -0
  135. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/ZIP.html +0 -0
  136. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/iWork.html +0 -0
  137. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/index.html +0 -0
  138. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/TagNames/style.css +0 -0
  139. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/ancient_history.html +0 -0
  140. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/canon_raw.html +0 -0
  141. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/commentary.html +0 -0
  142. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/config.html +0 -0
  143. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/data_members.html +0 -0
  144. data/bin/Image-ExifTool-9.46/html/exiftool_pod.html +2370 -0
  145. data/bin/Image-ExifTool-9.46/html/faq.html +1435 -0
  146. data/bin/Image-ExifTool-9.46/html/filename.html +294 -0
  147. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/geotag.html +0 -0
  148. data/bin/Image-ExifTool-9.46/html/history.html +377 -0
  149. data/bin/Image-ExifTool-9.46/html/htmldump.html +733 -0
  150. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/idiosyncracies.html +0 -0
  151. data/bin/Image-ExifTool-9.46/html/index.html +1283 -0
  152. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/install.html +0 -0
  153. data/bin/Image-ExifTool-9.46/html/metafiles.html +274 -0
  154. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/overview.png +0 -0
  155. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/standards.html +0 -0
  156. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/struct.html +0 -0
  157. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/style.css +0 -0
  158. data/bin/Image-ExifTool-9.46/html/under.html +126 -0
  159. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/verbose.html +0 -0
  160. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/html/writing.html +0 -0
  161. data/bin/Image-ExifTool-9.46/lib/File/RandomAccess.pm +378 -0
  162. data/bin/Image-ExifTool-9.46/lib/File/RandomAccess.pod +231 -0
  163. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool.pm +6916 -0
  164. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool.pod +2406 -0
  165. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/AES.pm +501 -0
  166. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/AFCP.pm +284 -0
  167. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/AIFF.pm +271 -0
  168. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/APE.pm +262 -0
  169. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/APP12.pm +322 -0
  170. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/ASF.pm +884 -0
  171. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Apple.pm +113 -0
  172. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/BMP.pm +179 -0
  173. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/BZZ.pm +472 -0
  174. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/BigTIFF.pm +282 -0
  175. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/BuildTagLookup.pm +2425 -0
  176. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Canon.pm +7983 -0
  177. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/CanonCustom.pm +2523 -0
  178. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/CanonRaw.pm +931 -0
  179. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/CanonVRD.pm +1481 -0
  180. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/CaptureOne.pm +235 -0
  181. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Casio.pm +2013 -0
  182. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Charset.pm +396 -0
  183. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/Arabic.pm +0 -0
  184. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/Baltic.pm +0 -0
  185. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/Cyrillic.pm +0 -0
  186. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/Greek.pm +0 -0
  187. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/Hebrew.pm +0 -0
  188. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/JIS.pm +0 -0
  189. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/Latin.pm +0 -0
  190. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/Latin2.pm +0 -0
  191. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacArabic.pm +0 -0
  192. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacChineseCN.pm +0 -0
  193. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacChineseTW.pm +0 -0
  194. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacCroatian.pm +0 -0
  195. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacCyrillic.pm +0 -0
  196. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacGreek.pm +0 -0
  197. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacHebrew.pm +0 -0
  198. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacIceland.pm +0 -0
  199. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacJapanese.pm +0 -0
  200. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacKorean.pm +0 -0
  201. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacLatin2.pm +0 -0
  202. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacRSymbol.pm +0 -0
  203. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacRoman.pm +0 -0
  204. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacRomanian.pm +0 -0
  205. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacThai.pm +0 -0
  206. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/MacTurkish.pm +0 -0
  207. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/PDFDoc.pm +0 -0
  208. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/ShiftJIS.pm +0 -0
  209. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/Symbol.pm +0 -0
  210. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/Thai.pm +0 -0
  211. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/Turkish.pm +0 -0
  212. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/Charset/Vietnam.pm +0 -0
  213. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/DICOM.pm +3874 -0
  214. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/DNG.pm +835 -0
  215. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/DPX.pm +151 -0
  216. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/DV.pm +319 -0
  217. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/DarwinCore.pm +317 -0
  218. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/DjVu.pm +376 -0
  219. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/EXE.pm +1228 -0
  220. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Exif.pm +4596 -0
  221. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/FLAC.pm +296 -0
  222. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/FLIR.pm +1232 -0
  223. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Fixup.pm +354 -0
  224. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Flash.pm +755 -0
  225. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/FlashPix.pm +1882 -0
  226. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Font.pm +643 -0
  227. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/FotoStation.pm +259 -0
  228. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/FujiFilm.pm +1088 -0
  229. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/GE.pm +80 -0
  230. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/GIF.pm +542 -0
  231. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/GIMP.pm +258 -0
  232. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/GPS.pm +514 -0
  233. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/GeoTiff.pm +2187 -0
  234. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Geotag.pm +1176 -0
  235. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/H264.pm +1102 -0
  236. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/HP.pm +262 -0
  237. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/HTML.pm +576 -0
  238. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/HtmlDump.pm +895 -0
  239. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/ICC_Profile.pm +999 -0
  240. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/ID3.pm +1532 -0
  241. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/IPTC.pm +1244 -0
  242. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/ITC.pm +215 -0
  243. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Import.pm +308 -0
  244. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/InDesign.pm +277 -0
  245. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/JPEG.pm +522 -0
  246. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/JPEGDigest.pm +2511 -0
  247. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/JVC.pm +130 -0
  248. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Jpeg2000.pm +873 -0
  249. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Kodak.pm +2014 -0
  250. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/KyoceraRaw.pm +173 -0
  251. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/LNK.pm +723 -0
  252. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/cs.pm +1586 -0
  253. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/de.pm +7356 -0
  254. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/en_ca.pm +557 -0
  255. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/en_gb.pm +572 -0
  256. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/es.pm +4017 -0
  257. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/fi.pm +2856 -0
  258. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/fr.pm +4738 -0
  259. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/it.pm +7918 -0
  260. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/ja.pm +5815 -0
  261. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/ko.pm +2332 -0
  262. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/nl.pm +3220 -0
  263. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/pl.pm +1140 -0
  264. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/ru.pm +769 -0
  265. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/sv.pm +639 -0
  266. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/tr.pm +544 -0
  267. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/zh_cn.pm +1329 -0
  268. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Lang/zh_tw.pm +802 -0
  269. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Leaf.pm +515 -0
  270. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/M2TS.pm +725 -0
  271. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/MIE.pm +2561 -0
  272. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/MIEUnits.pod +377 -0
  273. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/MIFF.pm +279 -0
  274. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/MNG.pm +684 -0
  275. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/MPC.pm +156 -0
  276. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/MPEG.pm +736 -0
  277. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/MPF.pm +289 -0
  278. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/MWG.pm +748 -0
  279. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/MXF.pm +3032 -0
  280. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/MakerNotes.pm +1598 -0
  281. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Matroska.pm +891 -0
  282. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Microsoft.pm +879 -0
  283. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Minolta.pm +2861 -0
  284. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/MinoltaRaw.pm +534 -0
  285. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Nikon.pm +6145 -0
  286. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/NikonCapture.pm +911 -0
  287. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/NikonCustom.pm +4405 -0
  288. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/OOXML.pm +409 -0
  289. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Ogg.pm +237 -0
  290. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Olympus.pm +3630 -0
  291. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/OpenEXR.pm +324 -0
  292. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/PDF.pm +2327 -0
  293. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/PGF.pm +143 -0
  294. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/PICT.pm +1260 -0
  295. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/PLIST.pm +453 -0
  296. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/PNG.pm +1161 -0
  297. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/PPM.pm +169 -0
  298. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/PSP.pm +305 -0
  299. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Panasonic.pm +2205 -0
  300. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/PanasonicRaw.pm +535 -0
  301. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Pentax.pm +5792 -0
  302. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/PhaseOne.pm +557 -0
  303. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/PhotoCD.pm +507 -0
  304. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/PhotoMechanic.pm +256 -0
  305. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Photoshop.pm +629 -0
  306. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/PostScript.pm +693 -0
  307. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/PrintIM.pm +125 -0
  308. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Qualcomm.pm +1344 -0
  309. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/QuickTime.pm +3910 -0
  310. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/lib/Image/ExifTool/README +0 -0
  311. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/RIFF.pm +1332 -0
  312. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/RSRC.pm +241 -0
  313. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/RTF.pm +383 -0
  314. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Radiance.pm +144 -0
  315. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Rawzor.pm +190 -0
  316. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Real.pm +736 -0
  317. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Reconyx.pm +190 -0
  318. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Ricoh.pm +1039 -0
  319. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Samsung.pm +846 -0
  320. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Sanyo.pm +439 -0
  321. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Scalado.pm +141 -0
  322. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Shift.pl +594 -0
  323. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Shortcuts.pm +298 -0
  324. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Sigma.pm +574 -0
  325. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/SigmaRaw.pm +649 -0
  326. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Sony.pm +7072 -0
  327. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/SonyIDC.pm +330 -0
  328. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Stim.pm +196 -0
  329. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/TagInfoXML.pm +794 -0
  330. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/TagLookup.pm +8365 -0
  331. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/TagNames.pod +26883 -0
  332. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Theora.pm +145 -0
  333. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Torrent.pm +317 -0
  334. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Unknown.pm +66 -0
  335. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Vorbis.pm +237 -0
  336. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/WriteCanonRaw.pl +637 -0
  337. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/WriteExif.pl +3685 -0
  338. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/WriteIPTC.pl +702 -0
  339. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/WritePDF.pl +765 -0
  340. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/WritePNG.pl +376 -0
  341. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/WritePhotoshop.pl +266 -0
  342. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/WritePostScript.pl +777 -0
  343. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/WriteQuickTime.pl +344 -0
  344. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/WriteXMP.pl +1318 -0
  345. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/Writer.pl +5851 -0
  346. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/XMP.pm +3755 -0
  347. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/XMP2.pl +1303 -0
  348. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/XMPStruct.pl +814 -0
  349. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/ZIP.pm +623 -0
  350. data/bin/Image-ExifTool-9.46/lib/Image/ExifTool/iWork.pm +223 -0
  351. data/bin/Image-ExifTool-9.46/perl-Image-ExifTool.spec +105 -0
  352. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/AFCP.t +0 -0
  353. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/AFCP_2.out +0 -0
  354. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/AFCP_3.out +0 -0
  355. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/AIFF.t +0 -0
  356. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/AIFF_2.out +0 -0
  357. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/APE.t +0 -0
  358. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/APE_2.out +0 -0
  359. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/APE_3.out +0 -0
  360. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ASF.t +0 -0
  361. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ASF_2.out +0 -0
  362. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/BMP.t +0 -0
  363. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/BMP_2.out +0 -0
  364. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/BigTIFF.t +0 -0
  365. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/BigTIFF_2.out +0 -0
  366. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Canon.t +0 -0
  367. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonRaw.t +0 -0
  368. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonRaw_2.out +0 -0
  369. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonRaw_4.out +0 -0
  370. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonRaw_5.out +0 -0
  371. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonRaw_6.out +0 -0
  372. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonRaw_7.out +0 -0
  373. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonVRD.t +0 -0
  374. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonVRD_11.out +0 -0
  375. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonVRD_12.out +0 -0
  376. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonVRD_2.out +0 -0
  377. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonVRD_3.out +0 -0
  378. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonVRD_4.out +0 -0
  379. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonVRD_5.out +0 -0
  380. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonVRD_6.out +0 -0
  381. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonVRD_7.out +0 -0
  382. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonVRD_8.out +0 -0
  383. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/CanonVRD_9.out +0 -0
  384. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Canon_2.out +0 -0
  385. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Canon_3.out +0 -0
  386. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Casio.t +0 -0
  387. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Casio_2.out +0 -0
  388. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Casio_3.out +0 -0
  389. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Casio_4.out +0 -0
  390. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Casio_5.out +0 -0
  391. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Casio_6.out +0 -0
  392. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/DICOM.t +0 -0
  393. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/DICOM_2.out +0 -0
  394. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/DNG.t +0 -0
  395. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/DNG_2.out +0 -0
  396. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/DNG_3.out +0 -0
  397. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/DPX.t +0 -0
  398. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/DPX_2.out +0 -0
  399. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/DV.t +0 -0
  400. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/DV_2.out +0 -0
  401. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/DjVu.t +0 -0
  402. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/DjVu_2.out +0 -0
  403. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/EXE.t +0 -0
  404. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/EXE_2.out +0 -0
  405. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/EXE_3.out +0 -0
  406. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/EXE_4.out +0 -0
  407. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool.t +0 -0
  408. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_16.out +0 -0
  409. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_17.out +0 -0
  410. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_2.out +0 -0
  411. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_20.out +0 -0
  412. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_21.out +0 -0
  413. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_22.out +0 -0
  414. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_23.out +0 -0
  415. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_24.out +0 -0
  416. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_25.out +0 -0
  417. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_26.out +0 -0
  418. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_3.out +0 -0
  419. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_4.out +0 -0
  420. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_5.out +0 -0
  421. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_6.out +0 -0
  422. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_7.out +0 -0
  423. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_8.out +0 -0
  424. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ExifTool_9.out +0 -0
  425. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FLAC.t +0 -0
  426. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FLAC_2.out +0 -0
  427. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FLAC_3.out +0 -0
  428. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FLIR.t +0 -0
  429. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FLIR_2.out +0 -0
  430. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FLIR_3.out +0 -0
  431. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Flash.t +0 -0
  432. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FlashPix.t +0 -0
  433. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FlashPix_2.out +0 -0
  434. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Flash_2.out +0 -0
  435. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Flash_3.out +0 -0
  436. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Font.t +0 -0
  437. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Font_2.out +0 -0
  438. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Font_3.out +0 -0
  439. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Font_4.out +0 -0
  440. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Font_5.out +0 -0
  441. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Font_6.out +0 -0
  442. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Font_7.out +0 -0
  443. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FotoStation.t +0 -0
  444. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FotoStation_2.out +0 -0
  445. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FotoStation_3.out +0 -0
  446. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FujiFilm.t +0 -0
  447. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FujiFilm_2.out +0 -0
  448. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FujiFilm_3.out +0 -0
  449. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FujiFilm_4.out +0 -0
  450. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/FujiFilm_5.out +0 -0
  451. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/GE.t +0 -0
  452. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/GE_2.out +0 -0
  453. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/GE_3.out +0 -0
  454. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/GIF.t +0 -0
  455. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/GIF_2.out +0 -0
  456. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/GIF_3.out +0 -0
  457. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/GIF_4.out +0 -0
  458. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/GIMP.t +0 -0
  459. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/GIMP_2.out +0 -0
  460. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/GPS.t +0 -0
  461. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/GPS_2.out +0 -0
  462. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/GPS_3.out +0 -0
  463. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/GeoTiff.t +0 -0
  464. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/GeoTiff_2.out +0 -0
  465. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/GeoTiff_3.out +0 -0
  466. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Geotag.t +0 -0
  467. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Geotag_2.out +0 -0
  468. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Geotag_3.out +0 -0
  469. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Geotag_5.out +0 -0
  470. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Geotag_6.out +0 -0
  471. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Geotag_7.out +0 -0
  472. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Geotag_8.out +0 -0
  473. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Geotag_9.out +0 -0
  474. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/HTML.t +0 -0
  475. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/HTML_2.out +0 -0
  476. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/IPTC.t +0 -0
  477. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/IPTC_2.out +0 -0
  478. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/IPTC_4.out +0 -0
  479. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/IPTC_5.out +0 -0
  480. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/IPTC_6.out +0 -0
  481. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/IPTC_7.out +0 -0
  482. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/IPTC_8.out +0 -0
  483. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ITC.t +0 -0
  484. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ITC_2.out +0 -0
  485. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/InDesign.t +0 -0
  486. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/InDesign_2.out +0 -0
  487. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/InDesign_3.out +0 -0
  488. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/InDesign_4.out +0 -0
  489. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/JVC.t +0 -0
  490. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/JVC_2.out +0 -0
  491. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/JVC_3.out +0 -0
  492. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Jpeg2000.t +0 -0
  493. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Jpeg2000_2.out +0 -0
  494. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Jpeg2000_3.out +0 -0
  495. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Jpeg2000_4.out +0 -0
  496. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Kodak.t +0 -0
  497. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Kodak_2.out +0 -0
  498. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Kodak_3.out +0 -0
  499. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/KyoceraRaw.t +0 -0
  500. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/KyoceraRaw_2.out +0 -0
  501. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/LNK.t +0 -0
  502. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/LNK_2.out +0 -0
  503. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang.t +0 -0
  504. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_1.out +0 -0
  505. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_10.out +0 -0
  506. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_11.out +0 -0
  507. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_12.out +0 -0
  508. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_13.out +0 -0
  509. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_14.out +0 -0
  510. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_15.out +0 -0
  511. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_16.out +0 -0
  512. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_17.out +0 -0
  513. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_18.out +0 -0
  514. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_2.out +0 -0
  515. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_3.out +0 -0
  516. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_4.out +0 -0
  517. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_5.out +0 -0
  518. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_6.out +0 -0
  519. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_7.out +0 -0
  520. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_8.out +0 -0
  521. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Lang_9.out +0 -0
  522. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/M2TS.t +0 -0
  523. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/M2TS_2.out +0 -0
  524. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MIE.t +0 -0
  525. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MIE_2.out +0 -0
  526. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MIE_3.out +0 -0
  527. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MIE_5.out +0 -0
  528. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MIE_6.out +0 -0
  529. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MIFF.t +0 -0
  530. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MIFF_2.out +0 -0
  531. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MP3.t +0 -0
  532. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MP3_2.out +0 -0
  533. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MWG.t +0 -0
  534. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MWG_2.out +0 -0
  535. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MWG_3.out +0 -0
  536. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MWG_4.out +0 -0
  537. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MWG_5.out +0 -0
  538. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MWG_6.out +0 -0
  539. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MXF.t +0 -0
  540. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/MXF_2.out +0 -0
  541. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Matroska.t +0 -0
  542. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Matroska_2.out +0 -0
  543. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Minolta.t +0 -0
  544. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Minolta_2.out +0 -0
  545. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Minolta_3.out +0 -0
  546. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Minolta_4.out +0 -0
  547. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Nikon.t +0 -0
  548. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Nikon_2.out +0 -0
  549. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Nikon_3.out +0 -0
  550. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Nikon_4.out +0 -0
  551. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Nikon_5.out +0 -0
  552. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Nikon_7.out +0 -0
  553. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Nikon_8.out +0 -0
  554. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Olympus.t +0 -0
  555. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Olympus_2.out +0 -0
  556. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Olympus_3.out +0 -0
  557. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Olympus_4.out +0 -0
  558. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Olympus_5.out +0 -0
  559. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Olympus_6.out +0 -0
  560. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Olympus_7.out +0 -0
  561. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/OpenEXR.t +0 -0
  562. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/OpenEXR_2.out +0 -0
  563. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF.t +0 -0
  564. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_10.out +0 -0
  565. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_11.out +0 -0
  566. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_12.out +0 -0
  567. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_14.out +0 -0
  568. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_15.out +0 -0
  569. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_16.out +0 -0
  570. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_17.out +0 -0
  571. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_18.out +0 -0
  572. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_19.out +0 -0
  573. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_2.out +0 -0
  574. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_20.out +0 -0
  575. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_22.out +0 -0
  576. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_4.out +0 -0
  577. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_5.out +0 -0
  578. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_6.out +0 -0
  579. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_7.out +0 -0
  580. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_8.out +0 -0
  581. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PDF_9.out +0 -0
  582. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PGF.t +0 -0
  583. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PGF_2.out +0 -0
  584. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PICT.t +0 -0
  585. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PICT_2.out +0 -0
  586. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PLIST.t +0 -0
  587. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PLIST_2.out +0 -0
  588. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PLIST_3.out +0 -0
  589. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PNG.t +0 -0
  590. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PNG_2.out +0 -0
  591. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PNG_3.out +0 -0
  592. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PNG_4.out +0 -0
  593. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PNG_5.out +0 -0
  594. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PPM.t +0 -0
  595. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PPM_2.out +0 -0
  596. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PPM_3.out +0 -0
  597. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PSP.t +0 -0
  598. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PSP_2.out +0 -0
  599. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Panasonic.t +0 -0
  600. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Panasonic_2.out +0 -0
  601. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Panasonic_3.out +0 -0
  602. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Panasonic_4.out +0 -0
  603. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Panasonic_5.out +0 -0
  604. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Pentax.t +0 -0
  605. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Pentax_2.out +0 -0
  606. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Pentax_3.out +0 -0
  607. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Pentax_4.out +0 -0
  608. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PhotoCD.t +0 -0
  609. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PhotoCD_2.out +0 -0
  610. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PhotoMechanic.t +0 -0
  611. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PhotoMechanic_2.out +0 -0
  612. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PhotoMechanic_3.out +0 -0
  613. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Photoshop.t +0 -0
  614. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Photoshop_2.out +0 -0
  615. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Photoshop_3.out +0 -0
  616. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PostScript.t +0 -0
  617. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PostScript_2.out +0 -0
  618. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/PostScript_3.out +0 -0
  619. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/QuickTime.t +0 -0
  620. data/bin/Image-ExifTool-9.46/t/QuickTime_2.out +131 -0
  621. data/bin/Image-ExifTool-9.46/t/QuickTime_3.out +72 -0
  622. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/QuickTime_4.out +0 -0
  623. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/QuickTime_5.out +0 -0
  624. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/RIFF.t +0 -0
  625. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/RIFF_2.out +0 -0
  626. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/RIFF_3.out +0 -0
  627. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/RIFF_4.out +0 -0
  628. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/RTF.t +0 -0
  629. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/RTF_2.out +0 -0
  630. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Radiance.t +0 -0
  631. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Radiance_2.out +0 -0
  632. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Real.t +0 -0
  633. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Real_2.out +0 -0
  634. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Real_3.out +0 -0
  635. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Real_4.out +0 -0
  636. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Ricoh.t +0 -0
  637. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Ricoh_2.out +0 -0
  638. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Ricoh_3.out +0 -0
  639. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Ricoh_4.out +0 -0
  640. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Sanyo.t +0 -0
  641. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Sanyo_2.out +0 -0
  642. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Sanyo_3.out +0 -0
  643. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Sigma.t +0 -0
  644. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Sigma_2.out +0 -0
  645. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Sigma_3.out +0 -0
  646. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Sigma_4.out +0 -0
  647. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Sigma_5.out +0 -0
  648. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Sony.t +0 -0
  649. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Sony_2.out +0 -0
  650. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Sony_3.out +0 -0
  651. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Sony_5.out +0 -0
  652. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/TestLib.pm +0 -0
  653. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Torrent.t +0 -0
  654. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Torrent_2.out +0 -0
  655. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Unknown.t +0 -0
  656. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Unknown_2.out +0 -0
  657. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Unknown_3.out +0 -0
  658. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Vorbis.t +0 -0
  659. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Vorbis_2.out +0 -0
  660. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer.t +0 -0
  661. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_10.out +0 -0
  662. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_11.out +0 -0
  663. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_13.out +0 -0
  664. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_14.out +0 -0
  665. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_15.out +0 -0
  666. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_16.out +0 -0
  667. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_17.out +0 -0
  668. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_18.out +0 -0
  669. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_19.out +0 -0
  670. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_2.out +0 -0
  671. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_22.out +0 -0
  672. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_24.out +0 -0
  673. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_25.out +0 -0
  674. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_26.out +0 -0
  675. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_27.out +0 -0
  676. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_28.out +0 -0
  677. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_29.out +0 -0
  678. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_30.out +0 -0
  679. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_31.out +0 -0
  680. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_32.out +0 -0
  681. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_33.out +0 -0
  682. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_34.out +0 -0
  683. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_35.out +0 -0
  684. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_36.out +0 -0
  685. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_37.out +0 -0
  686. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_38.out +0 -0
  687. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_39.out +0 -0
  688. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_4.out +0 -0
  689. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_40.out +0 -0
  690. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_41.out +0 -0
  691. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_42.out +0 -0
  692. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_43.out +0 -0
  693. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_44.out +0 -0
  694. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_45.out +0 -0
  695. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_46.out +0 -0
  696. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_47.out +0 -0
  697. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_48.out +0 -0
  698. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_50.out +0 -0
  699. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_51.out +0 -0
  700. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_52.out +0 -0
  701. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_53.out +0 -0
  702. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_54.out +0 -0
  703. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_6.out +0 -0
  704. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_7.out +0 -0
  705. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/Writer_9.out +0 -0
  706. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP.t +0 -0
  707. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_10.out +0 -0
  708. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_11.out +0 -0
  709. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_12.out +0 -0
  710. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_13.out +0 -0
  711. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_14.out +0 -0
  712. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_15.out +0 -0
  713. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_16.out +0 -0
  714. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_17.out +0 -0
  715. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_18.out +0 -0
  716. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_19.out +0 -0
  717. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_2.out +0 -0
  718. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_20.out +0 -0
  719. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_21.out +0 -0
  720. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_22.out +0 -0
  721. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_23.out +0 -0
  722. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_24.out +0 -0
  723. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_25.out +0 -0
  724. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_26.out +0 -0
  725. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_27.out +0 -0
  726. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_28.out +0 -0
  727. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_29.out +0 -0
  728. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_3.out +0 -0
  729. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_30.out +0 -0
  730. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_31.out +0 -0
  731. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_32.out +0 -0
  732. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_34.out +0 -0
  733. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_36.out +0 -0
  734. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_37.out +0 -0
  735. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_39.out +0 -0
  736. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_40.out +0 -0
  737. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_41.out +0 -0
  738. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_5.out +0 -0
  739. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_6.out +0 -0
  740. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_7.out +0 -0
  741. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_8.out +0 -0
  742. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/XMP_9.out +0 -0
  743. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ZIP.t +0 -0
  744. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ZIP_2.out +0 -0
  745. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ZIP_3.out +0 -0
  746. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ZIP_4.out +0 -0
  747. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ZIP_5.out +0 -0
  748. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ZIP_6.out +0 -0
  749. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/ZIP_7.out +0 -0
  750. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/AFCP.jpg +0 -0
  751. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/AIFF.aif +0 -0
  752. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/APE.ape +0 -0
  753. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/APE.mpc +0 -0
  754. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/ASF.wmv +0 -0
  755. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/BMP.bmp +0 -0
  756. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/BigTIFF.btf +0 -0
  757. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Canon.jpg +0 -0
  758. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Canon1DmkIII.jpg +0 -0
  759. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/CanonRaw.cr2 +0 -0
  760. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/CanonRaw.crw +0 -0
  761. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/CanonVRD.vrd +0 -0
  762. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/CaptureOne.eip +0 -0
  763. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Casio.jpg +0 -0
  764. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Casio2.jpg +0 -0
  765. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/CasioQVCI.jpg +0 -0
  766. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/DICOM.dcm +0 -0
  767. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/DNG.dng +0 -0
  768. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/DPX.dpx +0 -0
  769. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/DV.dv +0 -0
  770. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/DjVu.djvu +0 -0
  771. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/EXE.elf +0 -0
  772. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/EXE.exe +0 -0
  773. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/EXE.macho +0 -0
  774. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/ExifTool.jpg +0 -0
  775. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/ExifTool.tif +0 -0
  776. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/ExtendedXMP.jpg +0 -0
  777. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/FLAC.flac +0 -0
  778. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/FLAC.ogg +0 -0
  779. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/FLIR.fpf +0 -0
  780. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/FLIR.jpg +0 -0
  781. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Flash.flv +0 -0
  782. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Flash.swf +0 -0
  783. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/FlashPix.ppt +0 -0
  784. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Font.afm +0 -0
  785. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Font.dfont +0 -0
  786. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Font.pfa +0 -0
  787. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Font.pfb +0 -0
  788. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Font.pfm +0 -0
  789. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Font.ttf +0 -0
  790. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/FotoStation.jpg +0 -0
  791. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/FujiFilm.jpg +0 -0
  792. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/FujiFilm.raf +0 -0
  793. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/GE.jpg +0 -0
  794. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/GIF.gif +0 -0
  795. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/GIMP.xcf +0 -0
  796. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/GPS.jpg +0 -0
  797. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/GeoTiff.tif +0 -0
  798. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Geotag.gpx +0 -0
  799. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Geotag.igc +0 -0
  800. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Geotag.kml +0 -0
  801. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Geotag.log +0 -0
  802. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Geotag.xml +0 -0
  803. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Geotag2.log +0 -0
  804. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/HTML.html +0 -0
  805. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/IPTC.jpg +0 -0
  806. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/ITC.itc +0 -0
  807. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/InDesign.indd +0 -0
  808. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/JVC.jpg +0 -0
  809. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/JVC2.jpg +0 -0
  810. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Jpeg2000.j2c +0 -0
  811. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Jpeg2000.jp2 +0 -0
  812. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Kodak.jpg +0 -0
  813. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/KyoceraRaw.raw +0 -0
  814. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/LNK.lnk +0 -0
  815. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/M2TS.mts +0 -0
  816. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/MIE.mie +0 -0
  817. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/MIFF.miff +0 -0
  818. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/MP3.mp3 +0 -0
  819. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/MWG.jpg +0 -0
  820. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/MXF.mxf +0 -0
  821. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Matroska.mkv +0 -0
  822. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Minolta.jpg +0 -0
  823. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Minolta.mrw +0 -0
  824. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Nikon.jpg +0 -0
  825. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Nikon.nef +0 -0
  826. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/NikonD2Hs.jpg +0 -0
  827. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/NikonD70.jpg +0 -0
  828. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/OOXML.docx +0 -0
  829. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Olympus.jpg +0 -0
  830. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Olympus2.jpg +0 -0
  831. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/OlympusE1.jpg +0 -0
  832. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/OpenDoc.ods +0 -0
  833. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/OpenEXR.exr +0 -0
  834. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/PDF.pdf +0 -0
  835. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/PDF2.pdf +0 -0
  836. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/PGF.pgf +0 -0
  837. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/PICT.pict +0 -0
  838. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/PLIST-bin.plist +0 -0
  839. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/PLIST-xml.plist +0 -0
  840. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/PNG.png +0 -0
  841. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/PPM.ppm +0 -0
  842. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/PSP.psp +0 -0
  843. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Panasonic.jpg +0 -0
  844. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Panasonic.rw2 +0 -0
  845. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Pentax.avi +0 -0
  846. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Pentax.jpg +0 -0
  847. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/PhotoCD.pcd +0 -0
  848. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/PhotoMechanic.jpg +0 -0
  849. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Photoshop.psd +0 -0
  850. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/PostScript.eps +0 -0
  851. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/QuickTime.m4a +0 -0
  852. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/QuickTime.mov +0 -0
  853. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/RIFF.avi +0 -0
  854. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/RIFF.wav +0 -0
  855. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/RIFF.webp +0 -0
  856. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/RTF.rtf +0 -0
  857. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Radiance.hdr +0 -0
  858. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Real.ra +0 -0
  859. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Real.ram +0 -0
  860. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Real.rm +0 -0
  861. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Ricoh.jpg +0 -0
  862. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Ricoh2.jpg +0 -0
  863. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Sanyo.jpg +0 -0
  864. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Sigma.jpg +0 -0
  865. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Sigma.x3f +0 -0
  866. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/SigmaDP2.x3f +0 -0
  867. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Sony.jpg +0 -0
  868. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Sony.pmp +0 -0
  869. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Torrent.torrent +0 -0
  870. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Unknown.jpg +0 -0
  871. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Vorbis.ogg +0 -0
  872. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/Writer.jpg +0 -0
  873. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/XMP.inx +0 -0
  874. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/XMP.jpg +0 -0
  875. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/XMP.svg +0 -0
  876. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/XMP.xml +0 -0
  877. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/XMP.xmp +0 -0
  878. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/XMP2.xmp +0 -0
  879. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/XMP3.xmp +0 -0
  880. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/XMP4.xmp +0 -0
  881. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/XMP5.xmp +0 -0
  882. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/ZIP.gz +0 -0
  883. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/ZIP.zip +0 -0
  884. data/bin/{Image-ExifTool-9.45 → Image-ExifTool-9.46}/t/images/iWork.numbers +0 -0
  885. data/lib/exiftool_vendored/version.rb +1 -1
  886. metadata +886 -886
  887. data/bin/Image-ExifTool-9.45/Changes +0 -6430
  888. data/bin/Image-ExifTool-9.45/META.yml +0 -27
  889. data/bin/Image-ExifTool-9.45/README +0 -228
  890. data/bin/Image-ExifTool-9.45/exiftool +0 -5767
  891. data/bin/Image-ExifTool-9.45/html/Shift.html +0 -173
  892. data/bin/Image-ExifTool-9.45/html/TagNames/Canon.html +0 -8302
  893. data/bin/Image-ExifTool-9.45/html/TagNames/Composite.html +0 -672
  894. data/bin/Image-ExifTool-9.45/html/TagNames/Extra.html +0 -308
  895. data/bin/Image-ExifTool-9.45/html/TagNames/Minolta.html +0 -2568
  896. data/bin/Image-ExifTool-9.45/html/TagNames/Nikon.html +0 -4495
  897. data/bin/Image-ExifTool-9.45/html/TagNames/Olympus.html +0 -3400
  898. data/bin/Image-ExifTool-9.45/html/TagNames/Panasonic.html +0 -1585
  899. data/bin/Image-ExifTool-9.45/html/TagNames/Pentax.html +0 -4527
  900. data/bin/Image-ExifTool-9.45/html/TagNames/QuickTime.html +0 -3397
  901. data/bin/Image-ExifTool-9.45/html/TagNames/Shortcuts.html +0 -239
  902. data/bin/Image-ExifTool-9.45/html/TagNames/Sony.html +0 -5721
  903. data/bin/Image-ExifTool-9.45/html/TagNames/XMP.html +0 -7927
  904. data/bin/Image-ExifTool-9.45/html/exiftool_pod.html +0 -2370
  905. data/bin/Image-ExifTool-9.45/html/faq.html +0 -1434
  906. data/bin/Image-ExifTool-9.45/html/filename.html +0 -282
  907. data/bin/Image-ExifTool-9.45/html/history.html +0 -362
  908. data/bin/Image-ExifTool-9.45/html/htmldump.html +0 -732
  909. data/bin/Image-ExifTool-9.45/html/index.html +0 -1283
  910. data/bin/Image-ExifTool-9.45/html/metafiles.html +0 -266
  911. data/bin/Image-ExifTool-9.45/html/under.html +0 -124
  912. data/bin/Image-ExifTool-9.45/lib/File/RandomAccess.pm +0 -378
  913. data/bin/Image-ExifTool-9.45/lib/File/RandomAccess.pod +0 -231
  914. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool.pm +0 -6894
  915. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool.pod +0 -2406
  916. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/AES.pm +0 -501
  917. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/AFCP.pm +0 -284
  918. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/AIFF.pm +0 -271
  919. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/APE.pm +0 -262
  920. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/APP12.pm +0 -322
  921. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/ASF.pm +0 -884
  922. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Apple.pm +0 -113
  923. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/BMP.pm +0 -179
  924. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/BZZ.pm +0 -472
  925. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/BigTIFF.pm +0 -282
  926. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/BuildTagLookup.pm +0 -2421
  927. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Canon.pm +0 -7985
  928. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/CanonCustom.pm +0 -2523
  929. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/CanonRaw.pm +0 -931
  930. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/CanonVRD.pm +0 -1481
  931. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/CaptureOne.pm +0 -235
  932. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Casio.pm +0 -2013
  933. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Charset.pm +0 -396
  934. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/DICOM.pm +0 -3874
  935. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/DNG.pm +0 -835
  936. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/DPX.pm +0 -151
  937. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/DV.pm +0 -319
  938. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/DarwinCore.pm +0 -317
  939. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/DjVu.pm +0 -376
  940. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/EXE.pm +0 -1228
  941. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Exif.pm +0 -4596
  942. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/FLAC.pm +0 -296
  943. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/FLIR.pm +0 -1232
  944. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Fixup.pm +0 -354
  945. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Flash.pm +0 -755
  946. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/FlashPix.pm +0 -1882
  947. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Font.pm +0 -643
  948. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/FotoStation.pm +0 -259
  949. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/FujiFilm.pm +0 -1088
  950. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/GE.pm +0 -80
  951. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/GIF.pm +0 -542
  952. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/GIMP.pm +0 -258
  953. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/GPS.pm +0 -514
  954. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/GeoTiff.pm +0 -2187
  955. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Geotag.pm +0 -1176
  956. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/H264.pm +0 -1102
  957. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/HP.pm +0 -262
  958. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/HTML.pm +0 -576
  959. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/HtmlDump.pm +0 -895
  960. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/ICC_Profile.pm +0 -999
  961. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/ID3.pm +0 -1532
  962. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/IPTC.pm +0 -1244
  963. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/ITC.pm +0 -215
  964. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Import.pm +0 -308
  965. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/InDesign.pm +0 -277
  966. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/JPEG.pm +0 -522
  967. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/JPEGDigest.pm +0 -2511
  968. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/JVC.pm +0 -130
  969. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Jpeg2000.pm +0 -873
  970. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Kodak.pm +0 -2014
  971. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/KyoceraRaw.pm +0 -173
  972. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/LNK.pm +0 -723
  973. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/cs.pm +0 -1586
  974. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/de.pm +0 -7356
  975. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/en_ca.pm +0 -557
  976. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/en_gb.pm +0 -572
  977. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/es.pm +0 -4017
  978. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/fi.pm +0 -2856
  979. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/fr.pm +0 -4720
  980. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/it.pm +0 -7918
  981. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/ja.pm +0 -5815
  982. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/ko.pm +0 -2332
  983. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/nl.pm +0 -3220
  984. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/pl.pm +0 -1140
  985. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/ru.pm +0 -769
  986. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/sv.pm +0 -639
  987. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/tr.pm +0 -544
  988. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/zh_cn.pm +0 -1329
  989. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Lang/zh_tw.pm +0 -802
  990. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Leaf.pm +0 -515
  991. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/M2TS.pm +0 -725
  992. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/MIE.pm +0 -2561
  993. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/MIEUnits.pod +0 -377
  994. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/MIFF.pm +0 -279
  995. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/MNG.pm +0 -684
  996. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/MPC.pm +0 -156
  997. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/MPEG.pm +0 -736
  998. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/MPF.pm +0 -289
  999. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/MWG.pm +0 -748
  1000. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/MXF.pm +0 -3032
  1001. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/MakerNotes.pm +0 -1598
  1002. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Matroska.pm +0 -891
  1003. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Microsoft.pm +0 -879
  1004. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Minolta.pm +0 -2859
  1005. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/MinoltaRaw.pm +0 -534
  1006. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Nikon.pm +0 -6141
  1007. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/NikonCapture.pm +0 -911
  1008. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/NikonCustom.pm +0 -4405
  1009. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/OOXML.pm +0 -409
  1010. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Ogg.pm +0 -237
  1011. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Olympus.pm +0 -3628
  1012. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/OpenEXR.pm +0 -324
  1013. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/PDF.pm +0 -2327
  1014. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/PGF.pm +0 -143
  1015. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/PICT.pm +0 -1260
  1016. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/PLIST.pm +0 -453
  1017. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/PNG.pm +0 -1161
  1018. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/PPM.pm +0 -169
  1019. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/PSP.pm +0 -305
  1020. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Panasonic.pm +0 -2180
  1021. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/PanasonicRaw.pm +0 -535
  1022. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Pentax.pm +0 -5788
  1023. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/PhaseOne.pm +0 -557
  1024. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/PhotoCD.pm +0 -507
  1025. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/PhotoMechanic.pm +0 -256
  1026. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Photoshop.pm +0 -629
  1027. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/PostScript.pm +0 -693
  1028. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/PrintIM.pm +0 -125
  1029. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Qualcomm.pm +0 -1344
  1030. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/QuickTime.pm +0 -3849
  1031. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/RIFF.pm +0 -1332
  1032. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/RSRC.pm +0 -241
  1033. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/RTF.pm +0 -383
  1034. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Radiance.pm +0 -144
  1035. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Rawzor.pm +0 -190
  1036. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Real.pm +0 -736
  1037. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Reconyx.pm +0 -190
  1038. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Ricoh.pm +0 -1039
  1039. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Samsung.pm +0 -846
  1040. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Sanyo.pm +0 -439
  1041. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Scalado.pm +0 -141
  1042. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Shift.pl +0 -594
  1043. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Shortcuts.pm +0 -293
  1044. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Sigma.pm +0 -574
  1045. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/SigmaRaw.pm +0 -649
  1046. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Sony.pm +0 -7072
  1047. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/SonyIDC.pm +0 -330
  1048. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Stim.pm +0 -196
  1049. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/TagInfoXML.pm +0 -794
  1050. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/TagLookup.pm +0 -8351
  1051. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/TagNames.pod +0 -26867
  1052. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Theora.pm +0 -145
  1053. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Torrent.pm +0 -317
  1054. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Unknown.pm +0 -66
  1055. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Vorbis.pm +0 -237
  1056. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/WriteCanonRaw.pl +0 -637
  1057. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/WriteExif.pl +0 -3685
  1058. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/WriteIPTC.pl +0 -702
  1059. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/WritePDF.pl +0 -765
  1060. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/WritePNG.pl +0 -376
  1061. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/WritePhotoshop.pl +0 -266
  1062. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/WritePostScript.pl +0 -777
  1063. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/WriteQuickTime.pl +0 -344
  1064. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/WriteXMP.pl +0 -1318
  1065. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/Writer.pl +0 -5851
  1066. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/XMP.pm +0 -3755
  1067. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/XMP2.pl +0 -1299
  1068. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/XMPStruct.pl +0 -814
  1069. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/ZIP.pm +0 -623
  1070. data/bin/Image-ExifTool-9.45/lib/Image/ExifTool/iWork.pm +0 -223
  1071. data/bin/Image-ExifTool-9.45/perl-Image-ExifTool.spec +0 -105
  1072. data/bin/Image-ExifTool-9.45/t/QuickTime_2.out +0 -130
  1073. data/bin/Image-ExifTool-9.45/t/QuickTime_3.out +0 -71
@@ -1,3849 +0,0 @@
1
- #------------------------------------------------------------------------------
2
- # File: QuickTime.pm
3
- #
4
- # Description: Read QuickTime, MP4 and M4A meta information
5
- #
6
- # Revisions: 10/04/2005 - P. Harvey Created
7
- # 12/19/2005 - P. Harvey Added MP4 support
8
- # 09/22/2006 - P. Harvey Added M4A support
9
- # 07/27/2010 - P. Harvey Updated to 2010-05-03 QuickTime spec
10
- #
11
- # References:
12
- #
13
- # 1) http://developer.apple.com/mac/library/documentation/QuickTime/QTFF/QTFFChap1/qtff1.html
14
- # 2) http://search.cpan.org/dist/MP4-Info-1.04/
15
- # 3) http://www.geocities.com/xhelmboyx/quicktime/formats/mp4-layout.txt
16
- # 4) http://wiki.multimedia.cx/index.php?title=Apple_QuickTime
17
- # 5) ISO 14496-12 (http://read.pudn.com/downloads64/ebook/226547/ISO_base_media_file_format.pdf)
18
- # 6) ISO 14496-16 (http://www.iec-normen.de/previewpdf/info_isoiec14496-16%7Bed2.0%7Den.pdf)
19
- # 7) http://atomicparsley.sourceforge.net/mpeg-4files.html
20
- # 8) http://wiki.multimedia.cx/index.php?title=QuickTime_container
21
- # 9) http://www.adobe.com/devnet/xmp/pdfs/XMPSpecificationPart3.pdf (Oct 2008)
22
- # 10) http://code.google.com/p/mp4v2/wiki/iTunesMetadata
23
- # 11) http://www.canieti.com.mx/assets/files/1011/IEC_100_1384_DC.pdf
24
- # 12) QuickTime file format specification 2010-05-03
25
- # 13) http://www.adobe.com/devnet/flv/pdf/video_file_format_spec_v10.pdf
26
- # 14) http://standards.iso.org/ittf/PubliclyAvailableStandards/c051533_ISO_IEC_14496-12_2008.zip
27
- # 15) http://getid3.sourceforge.net/source/module.audio-video.quicktime.phps
28
- # 16) http://qtra.apple.com/atoms.html
29
- # 17) http://www.etsi.org/deliver/etsi_ts/126200_126299/126244/10.01.00_60/ts_126244v100100p.pdf
30
- # 18) https://github.com/appsec-labs/iNalyzer/blob/master/scinfo.m
31
- # 19) http://nah6.com/~itsme/cvs-xdadevtools/iphone/tools/decodesinf.pl
32
- # 20) https://developer.apple.com/legacy/library/documentation/quicktime/reference/QT7-1_Update_Reference/QT7-1_Update_Reference.pdf
33
- #------------------------------------------------------------------------------
34
-
35
- package Image::ExifTool::QuickTime;
36
-
37
- use strict;
38
- use vars qw($VERSION $AUTOLOAD);
39
- use Image::ExifTool qw(:DataAccess :Utils);
40
- use Image::ExifTool::Exif;
41
-
42
- $VERSION = '1.74';
43
-
44
- sub FixWrongFormat($);
45
- sub ProcessMOV($$;$);
46
- sub ProcessKeys($$$);
47
- sub ProcessMetaData($$$);
48
- sub ProcessEncodingParams($$$);
49
- sub ProcessHybrid($$$);
50
- sub ProcessRights($$$);
51
- sub ConvertISO6709($);
52
- sub PrintGPSCoordinates($);
53
- sub UnpackLang($);
54
- sub WriteQuickTime($$$);
55
- sub WriteMOV($$);
56
-
57
- # MIME types for all entries in the ftypLookup with file extensions
58
- # (defaults to 'video/mp4' if not found in this lookup)
59
- my %mimeLookup = (
60
- '3G2' => 'video/3gpp2',
61
- '3GP' => 'video/3gpp',
62
- DVB => 'video/vnd.dvb.file',
63
- F4A => 'audio/mp4',
64
- F4B => 'audio/mp4',
65
- JP2 => 'image/jp2',
66
- JPM => 'image/jpm',
67
- JPX => 'image/jpx',
68
- M4A => 'audio/mp4',
69
- M4B => 'audio/mp4',
70
- M4P => 'audio/mp4',
71
- M4V => 'video/x-m4v',
72
- MOV => 'video/quicktime',
73
- MQV => 'video/quicktime',
74
- );
75
-
76
- # look up file type from ftyp atom type, with MIME type in comment if known
77
- # (ref http://www.ftyps.com/)
78
- my %ftypLookup = (
79
- '3g2a' => '3GPP2 Media (.3G2) compliant with 3GPP2 C.S0050-0 V1.0', # video/3gpp2
80
- '3g2b' => '3GPP2 Media (.3G2) compliant with 3GPP2 C.S0050-A V1.0.0', # video/3gpp2
81
- '3g2c' => '3GPP2 Media (.3G2) compliant with 3GPP2 C.S0050-B v1.0', # video/3gpp2
82
- '3ge6' => '3GPP (.3GP) Release 6 MBMS Extended Presentations', # video/3gpp
83
- '3ge7' => '3GPP (.3GP) Release 7 MBMS Extended Presentations', # video/3gpp
84
- '3gg6' => '3GPP Release 6 General Profile', # video/3gpp
85
- '3gp1' => '3GPP Media (.3GP) Release 1 (probably non-existent)', # video/3gpp
86
- '3gp2' => '3GPP Media (.3GP) Release 2 (probably non-existent)', # video/3gpp
87
- '3gp3' => '3GPP Media (.3GP) Release 3 (probably non-existent)', # video/3gpp
88
- '3gp4' => '3GPP Media (.3GP) Release 4', # video/3gpp
89
- '3gp5' => '3GPP Media (.3GP) Release 5', # video/3gpp
90
- '3gp6' => '3GPP Media (.3GP) Release 6 Basic Profile', # video/3gpp
91
- '3gp6' => '3GPP Media (.3GP) Release 6 Progressive Download', # video/3gpp
92
- '3gp6' => '3GPP Media (.3GP) Release 6 Streaming Servers', # video/3gpp
93
- '3gs7' => '3GPP Media (.3GP) Release 7 Streaming Servers', # video/3gpp
94
- 'avc1' => 'MP4 Base w/ AVC ext [ISO 14496-12:2005]', # video/mp4
95
- 'CAEP' => 'Canon Digital Camera',
96
- 'caqv' => 'Casio Digital Camera',
97
- 'CDes' => 'Convergent Design',
98
- 'da0a' => 'DMB MAF w/ MPEG Layer II aud, MOT slides, DLS, JPG/PNG/MNG images',
99
- 'da0b' => 'DMB MAF, extending DA0A, with 3GPP timed text, DID, TVA, REL, IPMP',
100
- 'da1a' => 'DMB MAF audio with ER-BSAC audio, JPG/PNG/MNG images',
101
- 'da1b' => 'DMB MAF, extending da1a, with 3GPP timed text, DID, TVA, REL, IPMP',
102
- 'da2a' => 'DMB MAF aud w/ HE-AAC v2 aud, MOT slides, DLS, JPG/PNG/MNG images',
103
- 'da2b' => 'DMB MAF, extending da2a, with 3GPP timed text, DID, TVA, REL, IPMP',
104
- 'da3a' => 'DMB MAF aud with HE-AAC aud, JPG/PNG/MNG images',
105
- 'da3b' => 'DMB MAF, extending da3a w/ BIFS, 3GPP timed text, DID, TVA, REL, IPMP',
106
- 'dmb1' => 'DMB MAF supporting all the components defined in the specification',
107
- 'dmpf' => 'Digital Media Project', # various
108
- 'drc1' => 'Dirac (wavelet compression), encapsulated in ISO base media (MP4)',
109
- 'dv1a' => 'DMB MAF vid w/ AVC vid, ER-BSAC aud, BIFS, JPG/PNG/MNG images, TS',
110
- 'dv1b' => 'DMB MAF, extending dv1a, with 3GPP timed text, DID, TVA, REL, IPMP',
111
- 'dv2a' => 'DMB MAF vid w/ AVC vid, HE-AAC v2 aud, BIFS, JPG/PNG/MNG images, TS',
112
- 'dv2b' => 'DMB MAF, extending dv2a, with 3GPP timed text, DID, TVA, REL, IPMP',
113
- 'dv3a' => 'DMB MAF vid w/ AVC vid, HE-AAC aud, BIFS, JPG/PNG/MNG images, TS',
114
- 'dv3b' => 'DMB MAF, extending dv3a, with 3GPP timed text, DID, TVA, REL, IPMP',
115
- 'dvr1' => 'DVB (.DVB) over RTP', # video/vnd.dvb.file
116
- 'dvt1' => 'DVB (.DVB) over MPEG-2 Transport Stream', # video/vnd.dvb.file
117
- 'F4A ' => 'Audio for Adobe Flash Player 9+ (.F4A)', # audio/mp4
118
- 'F4B ' => 'Audio Book for Adobe Flash Player 9+ (.F4B)', # audio/mp4
119
- 'F4P ' => 'Protected Video for Adobe Flash Player 9+ (.F4P)', # video/mp4
120
- 'F4V ' => 'Video for Adobe Flash Player 9+ (.F4V)', # video/mp4
121
- 'isc2' => 'ISMACryp 2.0 Encrypted File', # ?/enc-isoff-generic
122
- 'iso2' => 'MP4 Base Media v2 [ISO 14496-12:2005]', # video/mp4
123
- 'isom' => 'MP4 Base Media v1 [IS0 14496-12:2003]', # video/mp4
124
- 'JP2 ' => 'JPEG 2000 Image (.JP2) [ISO 15444-1 ?]', # image/jp2
125
- 'JP20' => 'Unknown, from GPAC samples (prob non-existent)',
126
- 'jpm ' => 'JPEG 2000 Compound Image (.JPM) [ISO 15444-6]', # image/jpm
127
- 'jpx ' => 'JPEG 2000 with extensions (.JPX) [ISO 15444-2]', # image/jpx
128
- 'KDDI' => '3GPP2 EZmovie for KDDI 3G cellphones', # video/3gpp2
129
- #LCAG => (found in CompatibleBrands of Leica MOV videos)
130
- 'M4A ' => 'Apple iTunes AAC-LC (.M4A) Audio', # audio/x-m4a
131
- 'M4B ' => 'Apple iTunes AAC-LC (.M4B) Audio Book', # audio/mp4
132
- 'M4P ' => 'Apple iTunes AAC-LC (.M4P) AES Protected Audio', # audio/mp4
133
- 'M4V ' => 'Apple iTunes Video (.M4V) Video', # video/x-m4v
134
- 'M4VH' => 'Apple TV (.M4V)', # video/x-m4v
135
- 'M4VP' => 'Apple iPhone (.M4V)', # video/x-m4v
136
- 'mj2s' => 'Motion JPEG 2000 [ISO 15444-3] Simple Profile', # video/mj2
137
- 'mjp2' => 'Motion JPEG 2000 [ISO 15444-3] General Profile', # video/mj2
138
- 'mmp4' => 'MPEG-4/3GPP Mobile Profile (.MP4/3GP) (for NTT)', # video/mp4
139
- 'mp21' => 'MPEG-21 [ISO/IEC 21000-9]', # various
140
- 'mp41' => 'MP4 v1 [ISO 14496-1:ch13]', # video/mp4
141
- 'mp42' => 'MP4 v2 [ISO 14496-14]', # video/mp4
142
- 'mp71' => 'MP4 w/ MPEG-7 Metadata [per ISO 14496-12]', # various
143
- 'MPPI' => 'Photo Player, MAF [ISO/IEC 23000-3]', # various
144
- 'mqt ' => 'Sony / Mobile QuickTime (.MQV) US Patent 7,477,830 (Sony Corp)', # video/quicktime
145
- 'MSNV' => 'MPEG-4 (.MP4) for SonyPSP', # audio/mp4
146
- 'NDAS' => 'MP4 v2 [ISO 14496-14] Nero Digital AAC Audio', # audio/mp4
147
- 'NDSC' => 'MPEG-4 (.MP4) Nero Cinema Profile', # video/mp4
148
- 'NDSH' => 'MPEG-4 (.MP4) Nero HDTV Profile', # video/mp4
149
- 'NDSM' => 'MPEG-4 (.MP4) Nero Mobile Profile', # video/mp4
150
- 'NDSP' => 'MPEG-4 (.MP4) Nero Portable Profile', # video/mp4
151
- 'NDSS' => 'MPEG-4 (.MP4) Nero Standard Profile', # video/mp4
152
- 'NDXC' => 'H.264/MPEG-4 AVC (.MP4) Nero Cinema Profile', # video/mp4
153
- 'NDXH' => 'H.264/MPEG-4 AVC (.MP4) Nero HDTV Profile', # video/mp4
154
- 'NDXM' => 'H.264/MPEG-4 AVC (.MP4) Nero Mobile Profile', # video/mp4
155
- 'NDXP' => 'H.264/MPEG-4 AVC (.MP4) Nero Portable Profile', # video/mp4
156
- 'NDXS' => 'H.264/MPEG-4 AVC (.MP4) Nero Standard Profile', # video/mp4
157
- 'odcf' => 'OMA DCF DRM Format 2.0 (OMA-TS-DRM-DCF-V2_0-20060303-A)', # various
158
- 'opf2' => 'OMA PDCF DRM Format 2.1 (OMA-TS-DRM-DCF-V2_1-20070724-C)',
159
- 'opx2' => 'OMA PDCF DRM + XBS extensions (OMA-TS-DRM_XBS-V1_0-20070529-C)',
160
- 'pana' => 'Panasonic Digital Camera',
161
- 'qt ' => 'Apple QuickTime (.MOV/QT)', # video/quicktime
162
- 'ROSS' => 'Ross Video',
163
- 'sdv ' => 'SD Memory Card Video', # various?
164
- 'ssc1' => 'Samsung stereoscopic, single stream',
165
- 'ssc2' => 'Samsung stereoscopic, dual stream',
166
- );
167
-
168
- # information for time/date-based tags (time zero is Jan 1, 1904)
169
- my %timeInfo = (
170
- Notes => 'converted from UTC to local time if the QuickTimeUTC option is set',
171
- # It is not uncommon for brain-dead software to use the wrong time zero,
172
- # so assume a time zero of Jan 1, 1970 if the date is before this
173
- RawConv => q{
174
- my $offset = (66 * 365 + 17) * 24 * 3600;
175
- return $val - $offset if $val >= $offset;
176
- $self->WarnOnce('Patched incorrect time zero for QuickTime date/time tag',1) if $val;
177
- return $val;
178
- },
179
- Shift => 'Time',
180
- Writable => 1,
181
- Permanent => 1,
182
- DelValue => 0,
183
- # Note: This value will be in UTC if generated by a system that is aware of the time zone
184
- ValueConv => 'ConvertUnixTime($val, $self->Options("QuickTimeUTC"))',
185
- ValueConvInv => 'GetUnixTime($val, $self->Options("QuickTimeUTC")) + (66 * 365 + 17) * 24 * 3600',
186
- PrintConv => '$self->ConvertDateTime($val)',
187
- PrintConvInv => '$self->InverseDateTime($val)',
188
- # (can't put Groups here because they aren't constant!)
189
- );
190
- # information for duration tags
191
- my %durationInfo = (
192
- ValueConv => '$$self{TimeScale} ? $val / $$self{TimeScale} : $val',
193
- PrintConv => '$$self{TimeScale} ? ConvertDuration($val) : $val',
194
- );
195
- # parsing for most of the 3gp udta language text boxes
196
- my %langText = (
197
- RawConv => sub {
198
- my ($val, $self) = @_;
199
- return '<err>' unless length $val >= 6;
200
- my $lang = UnpackLang(Get16u(\$val, 4));
201
- $lang = $lang ? "($lang) " : '';
202
- $val = substr($val, 6); # isolate string
203
- $val = $self->Decode($val, 'UCS2') if $val =~ /^\xfe\xff/;
204
- return $lang . $val;
205
- },
206
- );
207
-
208
- # 4-character Vendor ID codes (ref PH)
209
- my %vendorID = (
210
- appl => 'Apple',
211
- fe20 => 'Olympus (fe20)', # (FE200)
212
- FFMP => 'FFmpeg',
213
- 'GIC '=> 'General Imaging Co.',
214
- kdak => 'Kodak',
215
- KMPI => 'Konica-Minolta',
216
- leic => 'Leica',
217
- mino => 'Minolta',
218
- niko => 'Nikon',
219
- NIKO => 'Nikon',
220
- olym => 'Olympus',
221
- pana => 'Panasonic',
222
- pent => 'Pentax',
223
- pr01 => 'Olympus (pr01)', # (FE100,FE110,FE115)
224
- sany => 'Sanyo',
225
- 'SMI '=> 'Sorenson Media Inc.',
226
- ZORA => 'Zoran Corporation',
227
- );
228
-
229
- # QuickTime data atom encodings for string types (ref 12)
230
- my %stringEncoding = (
231
- 1 => 'UTF8',
232
- 2 => 'UTF16',
233
- 3 => 'ShiftJIS',
234
- 4 => 'UTF8',
235
- 5 => 'UTF16',
236
- );
237
-
238
- my %graphicsMode = (
239
- # (ref http://homepage.mac.com/vanhoek/MovieGuts%20docs/64.html)
240
- 0x00 => 'srcCopy',
241
- 0x01 => 'srcOr',
242
- 0x02 => 'srcXor',
243
- 0x03 => 'srcBic',
244
- 0x04 => 'notSrcCopy',
245
- 0x05 => 'notSrcOr',
246
- 0x06 => 'notSrcXor',
247
- 0x07 => 'notSrcBic',
248
- 0x08 => 'patCopy',
249
- 0x09 => 'patOr',
250
- 0x0a => 'patXor',
251
- 0x0b => 'patBic',
252
- 0x0c => 'notPatCopy',
253
- 0x0d => 'notPatOr',
254
- 0x0e => 'notPatXor',
255
- 0x0f => 'notPatBic',
256
- 0x20 => 'blend',
257
- 0x21 => 'addPin',
258
- 0x22 => 'addOver',
259
- 0x23 => 'subPin',
260
- 0x24 => 'transparent',
261
- 0x25 => 'addMax',
262
- 0x26 => 'subOver',
263
- 0x27 => 'addMin',
264
- 0x31 => 'grayishTextOr',
265
- 0x32 => 'hilite',
266
- 0x40 => 'ditherCopy',
267
- # the following ref ISO/IEC 15444-3
268
- 0x100 => 'Alpha',
269
- 0x101 => 'White Alpha',
270
- 0x102 => 'Pre-multiplied Black Alpha',
271
- 0x110 => 'Component Alpha',
272
- );
273
-
274
- # QuickTime atoms
275
- %Image::ExifTool::QuickTime::Main = (
276
- PROCESS_PROC => \&ProcessMOV,
277
- WRITE_PROC => \&WriteQuickTime,
278
- GROUPS => { 2 => 'Video' },
279
- NOTES => q{
280
- The QuickTime format is used for many different types of audio, video and
281
- image files (most commonly, MOV and MP4 videos). Exiftool extracts standard
282
- meta information a variety of audio, video and image parameters, as well as
283
- proprietary information written by many camera models. Tags with a question
284
- mark after their name are not extracted unless the Unknown option is set.
285
-
286
- ExifTool has the ability to write/create XMP, and edit date/time tags in
287
- QuickTime format files.
288
-
289
- According to the specification, many QuickTime date/time tags should be
290
- stored as UTC. Unfortunately, digital cameras often store local time values
291
- instead (presumably because they don't know the time zone). For this
292
- reason, by default ExifTool does not assume a time zone for these values.
293
- However, if the QuickTimeUTC option is set via the API or the ExifTool
294
- configuration file, then ExifTool will assume these values are properly
295
- stored as UTC, and will convert them to local time when extracting.
296
-
297
- See
298
- L<http://developer.apple.com/mac/library/documentation/QuickTime/QTFF/QTFFChap1/qtff1.html>
299
- for the official specification.
300
- },
301
- free => [
302
- {
303
- Name => 'KodakFree',
304
- # (found in Kodak M5370 MP4 videos)
305
- Condition => '$$valPt =~ /^\0\0\0.Seri/s',
306
- SubDirectory => { TagTable => 'Image::ExifTool::Kodak::Free' },
307
- },{
308
- Unknown => 1,
309
- Binary => 1,
310
- },
311
- # (also Samsung WB750 uncompressed thumbnail data starting with "SDIC\0")
312
- ],
313
- skip => [
314
- {
315
- Name => 'CanonSkip',
316
- Condition => '$$valPt =~ /^\0.{3}(CNDB|CNCV|CNMN|CNFV|CNTH|CNDM)/s',
317
- SubDirectory => { TagTable => 'Image::ExifTool::Canon::Skip' },
318
- },
319
- { Name => 'Skip', Unknown => 1, Binary => 1 },
320
- ],
321
- wide => { Unknown => 1, Binary => 1 },
322
- ftyp => { #MP4
323
- Name => 'FileType',
324
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::FileType' },
325
- },
326
- pnot => {
327
- Name => 'Preview',
328
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Preview' },
329
- },
330
- PICT => {
331
- Name => 'PreviewPICT',
332
- Binary => 1,
333
- },
334
- pict => { #8
335
- Name => 'PreviewPICT',
336
- Binary => 1,
337
- },
338
- moov => {
339
- Name => 'Movie',
340
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Movie' },
341
- },
342
- mdat => { Name => 'MovieData', Unknown => 1, Binary => 1 },
343
- 'mdat-size' => {
344
- Name => 'MovieDataSize',
345
- Notes => q{
346
- not a real tag ID, this tag represents the size of the 'mdat' data in bytes
347
- and is used in the AvgBitrate calculation
348
- },
349
- },
350
- junk => { Unknown => 1, Binary => 1 }, #8
351
- uuid => [
352
- { #9 (MP4 files)
353
- Name => 'UUID-XMP',
354
- # *** this is where ExifTool writes XMP in MP4 videos (as per XMP spec) ***
355
- Condition => '$$valPt=~/^\xbe\x7a\xcf\xcb\x97\xa9\x42\xe8\x9c\x71\x99\x94\x91\xe3\xaf\xac/',
356
- SubDirectory => {
357
- TagTable => 'Image::ExifTool::XMP::Main',
358
- Start => 16,
359
- },
360
- },
361
- { #11 (MP4 files)
362
- Name => 'UUID-PROF',
363
- Condition => '$$valPt=~/^PROF!\xd2\x4f\xce\xbb\x88\x69\x5c\xfa\xc9\xc7\x40/',
364
- SubDirectory => {
365
- TagTable => 'Image::ExifTool::QuickTime::Profile',
366
- Start => 24, # uid(16) + version(1) + flags(3) + count(4)
367
- },
368
- },
369
- { #PH (Flip MP4 files)
370
- Name => 'UUID-Flip',
371
- Condition => '$$valPt=~/^\x4a\xb0\x3b\x0f\x61\x8d\x40\x75\x82\xb2\xd9\xfa\xce\xd3\x5f\xf5/',
372
- SubDirectory => {
373
- TagTable => 'Image::ExifTool::QuickTime::Flip',
374
- Start => 16,
375
- },
376
- },
377
- # "\x98\x7f\xa3\xdf\x2a\x85\x43\xc0\x8f\x8f\xd9\x7c\x47\x1e\x8e\xea" - unknown data in Flip videos
378
- { #8
379
- Name => 'UUID-Unknown',
380
- Unknown => 1,
381
- Binary => 1,
382
- },
383
- ],
384
- _htc => {
385
- Name => 'HTCInfo',
386
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::HTC' },
387
- },
388
- udta => {
389
- Name => 'UserData',
390
- SubDirectory => { TagTable => 'Image::ExifTool::FLIR::UserData' },
391
- },
392
- thum => { #PH
393
- Name => 'ThumbnailImage',
394
- Groups => { 2 => 'Image' },
395
- Binary => 1,
396
- },
397
- );
398
-
399
- # MPEG-4 'ftyp' atom
400
- # (ref http://developer.apple.com/mac/library/documentation/QuickTime/QTFF/QTFFChap1/qtff1.html)
401
- %Image::ExifTool::QuickTime::FileType = (
402
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
403
- GROUPS => { 2 => 'Video' },
404
- FORMAT => 'int32u',
405
- 0 => {
406
- Name => 'MajorBrand',
407
- Format => 'undef[4]',
408
- PrintConv => \%ftypLookup,
409
- },
410
- 1 => {
411
- Name => 'MinorVersion',
412
- Format => 'undef[4]',
413
- ValueConv => 'sprintf("%x.%x.%x", unpack("nCC", $val))',
414
- },
415
- 2 => {
416
- Name => 'CompatibleBrands',
417
- Format => 'undef[$size-8]',
418
- # ignore any entry with a null, and return others as a list
419
- ValueConv => 'my @a=($val=~/.{4}/sg); @a=grep(!/\0/,@a); \@a',
420
- },
421
- );
422
-
423
- # proprietary HTC atom (HTC One MP4 video)
424
- %Image::ExifTool::QuickTime::HTC = (
425
- PROCESS_PROC => \&ProcessMOV,
426
- GROUPS => { 2 => 'Video' },
427
- NOTES => 'Tags written by some HTC camera phones.',
428
- slmt => {
429
- Name => 'Unknown_slmt',
430
- Unknown => 1,
431
- Format => 'int32u', # (observed values: 4)
432
- },
433
- );
434
-
435
- # atoms used in QTIF files
436
- %Image::ExifTool::QuickTime::ImageFile = (
437
- PROCESS_PROC => \&ProcessMOV,
438
- GROUPS => { 2 => 'Image' },
439
- NOTES => 'Tags used in QTIF QuickTime Image Files.',
440
- idsc => {
441
- Name => 'ImageDescription',
442
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::ImageDesc' },
443
- },
444
- idat => {
445
- Name => 'ImageData',
446
- Binary => 1,
447
- },
448
- iicc => {
449
- Name => 'ICC_Profile',
450
- SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main' },
451
- },
452
- );
453
-
454
- # image description data block
455
- %Image::ExifTool::QuickTime::ImageDesc = (
456
- PROCESS_PROC => \&ProcessHybrid,
457
- VARS => { ID_LABEL => 'ID/Index' },
458
- GROUPS => { 2 => 'Image' },
459
- FORMAT => 'int16u',
460
- 2 => {
461
- Name => 'CompressorID',
462
- Format => 'string[4]',
463
- # not very useful since this isn't a complete list and name is given below
464
- # # ref http://developer.apple.com/mac/library/documentation/QuickTime/QTFF/QTFFChap3/qtff3.html
465
- # PrintConv => {
466
- # cvid => 'Cinepak',
467
- # jpeg => 'JPEG',
468
- # 'smc '=> 'Graphics',
469
- # 'rle '=> 'Animation',
470
- # rpza => 'Apple Video',
471
- # kpcd => 'Kodak Photo CD',
472
- # 'png '=> 'Portable Network Graphics',
473
- # mjpa => 'Motion-JPEG (format A)',
474
- # mjpb => 'Motion-JPEG (format B)',
475
- # SVQ1 => 'Sorenson video, version 1',
476
- # SVQ3 => 'Sorenson video, version 3',
477
- # mp4v => 'MPEG-4 video',
478
- # 'dvc '=> 'NTSC DV-25 video',
479
- # dvcp => 'PAL DV-25 video',
480
- # 'gif '=> 'Compuserve Graphics Interchange Format',
481
- # h263 => 'H.263 video',
482
- # tiff => 'Tagged Image File Format',
483
- # 'raw '=> 'Uncompressed RGB',
484
- # '2vuY'=> "Uncompressed Y'CbCr, 3x8-bit 4:2:2 (2vuY)",
485
- # 'yuv2'=> "Uncompressed Y'CbCr, 3x8-bit 4:2:2 (yuv2)",
486
- # v308 => "Uncompressed Y'CbCr, 8-bit 4:4:4",
487
- # v408 => "Uncompressed Y'CbCr, 8-bit 4:4:4:4",
488
- # v216 => "Uncompressed Y'CbCr, 10, 12, 14, or 16-bit 4:2:2",
489
- # v410 => "Uncompressed Y'CbCr, 10-bit 4:4:4",
490
- # v210 => "Uncompressed Y'CbCr, 10-bit 4:2:2",
491
- # },
492
- },
493
- 10 => {
494
- Name => 'VendorID',
495
- Format => 'string[4]',
496
- RawConv => 'length $val ? $val : undef',
497
- PrintConv => \%vendorID,
498
- SeparateTable => 'VendorID',
499
- },
500
- # 14 - ("Quality" in QuickTime docs) ??
501
- 16 => 'SourceImageWidth',
502
- 17 => 'SourceImageHeight',
503
- 18 => { Name => 'XResolution', Format => 'fixed32u' },
504
- 20 => { Name => 'YResolution', Format => 'fixed32u' },
505
- # 24 => 'FrameCount', # always 1 (what good is this?)
506
- 25 => {
507
- Name => 'CompressorName',
508
- Format => 'string[32]',
509
- # (sometimes this is a Pascal string, and sometimes it is a C string)
510
- RawConv => q{
511
- $val=substr($val,1,ord($1)) if $val=~/^([\0-\x1f])/ and ord($1)<length($val);
512
- length $val ? $val : undef;
513
- },
514
- },
515
- 41 => 'BitDepth',
516
- #
517
- # Observed offsets for child atoms of various CompressorID types:
518
- #
519
- # CompressorID Offset Child atoms
520
- # ----------- ------ ----------------
521
- # avc1 86 avcC, btrt, colr, pasp, fiel, clap
522
- # mp4v 86 esds, pasp
523
- # s263 86 d263
524
- #
525
- btrt => {
526
- Name => 'BitrateInfo',
527
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Bitrate' },
528
- },
529
- # Reference for fiel, colr, pasp, clap:
530
- # https://developer.apple.com/library/mac/technotes/tn2162/_index.html#//apple_ref/doc/uid/DTS40013070-CH1-TNTAG9
531
- fiel => {
532
- Name => 'VideoFieldOrder',
533
- ValueConv => 'join(" ", unpack("C*",$val))',
534
- PrintConv => [{
535
- 1 => 'Progressive',
536
- 2 => '2:1 Interlaced',
537
- }],
538
- },
539
- colr => {
540
- Name => 'ColorRepresentation',
541
- ValueConv => 'join(" ", substr($val,0,4), unpack("x4n*",$val))',
542
- },
543
- pasp => {
544
- Name => 'PixelAspectRatio',
545
- ValueConv => 'join(":", unpack("N*",$val))',
546
- },
547
- clap => {
548
- Name => 'CleanAperture',
549
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::CleanAperture' },
550
- },
551
- # avcC - AVC configuration (ref http://thompsonng.blogspot.ca/2010/11/mp4-file-format-part-2.html)
552
- # esds - elementary stream descriptor
553
- # d263
554
- gama => { Name => 'Gamma', Format => 'fixed32u' },
555
- # mjqt - default quantization table for MJPEG
556
- # mjht - default Huffman table for MJPEG
557
- );
558
-
559
- # 'btrt' atom information (ref http://lists.freedesktop.org/archives/gstreamer-commits/2011-October/054459.html)
560
- %Image::ExifTool::QuickTime::Bitrate = (
561
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
562
- GROUPS => { 2 => 'Video' },
563
- FORMAT => 'int32u',
564
- PRIORITY => 0, # often filled with zeros
565
- 0 => 'BufferSize',
566
- 1 => 'MaxBitrate',
567
- 2 => 'AverageBitrate',
568
- );
569
-
570
- # 'clap' atom information (ref https://developer.apple.com/library/mac/technotes/tn2162/_index.html#//apple_ref/doc/uid/DTS40013070-CH1-TNTAG9)
571
- %Image::ExifTool::QuickTime::CleanAperture = (
572
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
573
- GROUPS => { 2 => 'Video' },
574
- FORMAT => 'rational64u',
575
- 0 => 'CleanApertureWidth',
576
- 1 => 'CleanApertureHeight',
577
- 2 => 'CleanApertureOffsetX',
578
- 3 => 'CleanApertureOffsetY',
579
- );
580
-
581
- # preview data block
582
- %Image::ExifTool::QuickTime::Preview = (
583
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
584
- WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
585
- GROUPS => { 2 => 'Image' },
586
- FORMAT => 'int16u',
587
- 0 => {
588
- Name => 'PreviewDate',
589
- Format => 'int32u',
590
- Groups => { 2 => 'Time' },
591
- %timeInfo,
592
- },
593
- 2 => 'PreviewVersion',
594
- 3 => {
595
- Name => 'PreviewAtomType',
596
- Format => 'string[4]',
597
- },
598
- 5 => 'PreviewAtomIndex',
599
- );
600
-
601
- # movie atoms
602
- %Image::ExifTool::QuickTime::Movie = (
603
- PROCESS_PROC => \&ProcessMOV,
604
- WRITE_PROC => \&WriteQuickTime,
605
- GROUPS => { 2 => 'Video' },
606
- mvhd => {
607
- Name => 'MovieHeader',
608
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::MovieHeader' },
609
- },
610
- trak => {
611
- Name => 'Track',
612
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Track' },
613
- },
614
- udta => {
615
- Name => 'UserData',
616
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::UserData' },
617
- },
618
- meta => { # 'meta' is found here in my EX-F1 MOV sample - PH
619
- Name => 'Meta',
620
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Meta' },
621
- },
622
- iods => {
623
- Name => 'InitialObjectDescriptor',
624
- Flags => ['Binary','Unknown'],
625
- },
626
- uuid => [
627
- { #11 (MP4 files) (also found in QuickTime::Track)
628
- Name => 'UUID-USMT',
629
- Condition => '$$valPt=~/^USMT!\xd2\x4f\xce\xbb\x88\x69\x5c\xfa\xc9\xc7\x40/',
630
- SubDirectory => {
631
- TagTable => 'Image::ExifTool::QuickTime::UserMedia',
632
- Start => 16,
633
- },
634
- },
635
- { #PH (Canon SX280)
636
- Name => 'UUID-Canon',
637
- Condition => '$$valPt=~/^\x85\xc0\xb6\x87\x82\x0f\x11\xe0\x81\x11\xf4\xce\x46\x2b\x6a\x48/',
638
- SubDirectory => {
639
- TagTable => 'Image::ExifTool::Canon::uuid',
640
- Start => 16,
641
- },
642
- },
643
- {
644
- Name => 'UUID-Unknown',
645
- Unknown => 1,
646
- Binary => 1,
647
- },
648
- ],
649
- cmov => {
650
- Name => 'CompressedMovie',
651
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::CMovie' },
652
- },
653
- # prfl - Profile (ref 12)
654
- # clip - clipping --> contains crgn (clip region) (ref 12)
655
- # mvex - movie extends --> contains mehd (movie extends header), trex (track extends) (ref 14)
656
- );
657
-
658
- # movie header data block
659
- %Image::ExifTool::QuickTime::MovieHeader = (
660
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
661
- WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
662
- GROUPS => { 2 => 'Video' },
663
- FORMAT => 'int32u',
664
- DATAMEMBER => [ 0, 1, 2, 3, 4 ],
665
- 0 => {
666
- Name => 'MovieHeaderVersion',
667
- Format => 'int8u',
668
- RawConv => '$$self{MovieHeaderVersion} = $val',
669
- },
670
- 1 => {
671
- Name => 'CreateDate',
672
- Groups => { 2 => 'Time' },
673
- %timeInfo,
674
- # this is int64u if MovieHeaderVersion == 1 (ref 13)
675
- Hook => '$$self{MovieHeaderVersion} and $format = "int64u", $varSize += 4',
676
- },
677
- 2 => {
678
- Name => 'ModifyDate',
679
- Groups => { 2 => 'Time' },
680
- %timeInfo,
681
- # this is int64u if MovieHeaderVersion == 1 (ref 13)
682
- Hook => '$$self{MovieHeaderVersion} and $format = "int64u", $varSize += 4',
683
- },
684
- 3 => {
685
- Name => 'TimeScale',
686
- RawConv => '$$self{TimeScale} = $val',
687
- },
688
- 4 => {
689
- Name => 'Duration',
690
- %durationInfo,
691
- # this is int64u if MovieHeaderVersion == 1 (ref 13)
692
- Hook => '$$self{MovieHeaderVersion} and $format = "int64u", $varSize += 4',
693
- },
694
- 5 => {
695
- Name => 'PreferredRate',
696
- ValueConv => '$val / 0x10000',
697
- },
698
- 6 => {
699
- Name => 'PreferredVolume',
700
- Format => 'int16u',
701
- ValueConv => '$val / 256',
702
- PrintConv => 'sprintf("%.2f%%", $val * 100)',
703
- },
704
- 9 => {
705
- Name => 'MatrixStructure',
706
- Format => 'fixed32s[9]',
707
- # (the right column is fixed 2.30 instead of 16.16)
708
- ValueConv => q{
709
- my @a = split ' ',$val;
710
- $_ /= 0x4000 foreach @a[2,5,8];
711
- return "@a";
712
- },
713
- },
714
- 18 => { Name => 'PreviewTime', %durationInfo },
715
- 19 => { Name => 'PreviewDuration', %durationInfo },
716
- 20 => { Name => 'PosterTime', %durationInfo },
717
- 21 => { Name => 'SelectionTime', %durationInfo },
718
- 22 => { Name => 'SelectionDuration',%durationInfo },
719
- 23 => { Name => 'CurrentTime', %durationInfo },
720
- 24 => 'NextTrackID',
721
- );
722
-
723
- # track atoms
724
- %Image::ExifTool::QuickTime::Track = (
725
- PROCESS_PROC => \&ProcessMOV,
726
- WRITE_PROC => \&WriteQuickTime,
727
- GROUPS => { 1 => 'Track#', 2 => 'Video' },
728
- tkhd => {
729
- Name => 'TrackHeader',
730
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::TrackHeader' },
731
- },
732
- udta => {
733
- Name => 'UserData',
734
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::UserData' },
735
- },
736
- mdia => { #MP4
737
- Name => 'Media',
738
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Media' },
739
- },
740
- meta => { #PH (MOV)
741
- Name => 'Meta',
742
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Meta' },
743
- },
744
- tref => {
745
- Name => 'TrackRef',
746
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::TrackRef' },
747
- },
748
- tapt => {
749
- Name => 'TrackAperture',
750
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::TrackAperture' },
751
- },
752
- uuid => [
753
- { #11 (MP4 files) (also found in QuickTime::Movie)
754
- Name => 'UUID-USMT',
755
- Condition => '$$valPt=~/^USMT!\xd2\x4f\xce\xbb\x88\x69\x5c\xfa\xc9\xc7\x40/',
756
- SubDirectory => {
757
- TagTable => 'Image::ExifTool::QuickTime::UserMedia',
758
- Start => 16,
759
- },
760
- },
761
- {
762
- Name => 'UUID-Unknown',
763
- Unknown => 1,
764
- Binary => 1,
765
- },
766
- ],
767
- # edts - edits --> contains elst (edit list)
768
- # clip - clipping --> contains crgn (clip region)
769
- # matt - track matt --> contains kmat (compressed matt)
770
- # load - track loading settings
771
- # imap - track input map --> contains ' in' --> contains ' ty', obid
772
- # prfl - Profile (ref 12)
773
- );
774
-
775
- # track header data block
776
- %Image::ExifTool::QuickTime::TrackHeader = (
777
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
778
- WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
779
- GROUPS => { 1 => 'Track#', 2 => 'Video' },
780
- FORMAT => 'int32u',
781
- DATAMEMBER => [ 0, 1, 2, 5 ],
782
- 0 => {
783
- Name => 'TrackHeaderVersion',
784
- Format => 'int8u',
785
- Priority => 0,
786
- RawConv => '$$self{TrackHeaderVersion} = $val',
787
- },
788
- 1 => {
789
- Name => 'TrackCreateDate',
790
- Priority => 0,
791
- Groups => { 2 => 'Time' },
792
- %timeInfo,
793
- # this is int64u if TrackHeaderVersion == 1 (ref 13)
794
- Hook => '$$self{TrackHeaderVersion} and $format = "int64u", $varSize += 4',
795
- },
796
- 2 => {
797
- Name => 'TrackModifyDate',
798
- Priority => 0,
799
- Groups => { 2 => 'Time' },
800
- %timeInfo,
801
- # this is int64u if TrackHeaderVersion == 1 (ref 13)
802
- Hook => '$$self{TrackHeaderVersion} and $format = "int64u", $varSize += 4',
803
- },
804
- 3 => {
805
- Name => 'TrackID',
806
- Priority => 0,
807
- },
808
- 5 => {
809
- Name => 'TrackDuration',
810
- Priority => 0,
811
- %durationInfo,
812
- # this is int64u if TrackHeaderVersion == 1 (ref 13)
813
- Hook => '$$self{TrackHeaderVersion} and $format = "int64u", $varSize += 4',
814
- },
815
- 8 => {
816
- Name => 'TrackLayer',
817
- Format => 'int16u',
818
- Priority => 0,
819
- },
820
- 9 => {
821
- Name => 'TrackVolume',
822
- Format => 'int16u',
823
- Priority => 0,
824
- ValueConv => '$val / 256',
825
- PrintConv => 'sprintf("%.2f%%", $val * 100)',
826
- },
827
- 10 => {
828
- Name => 'MatrixStructure',
829
- Format => 'fixed32s[9]',
830
- # (the right column is fixed 2.30 instead of 16.16)
831
- ValueConv => q{
832
- my @a = split ' ',$val;
833
- $_ /= 0x4000 foreach @a[2,5,8];
834
- return "@a";
835
- },
836
- },
837
- 19 => {
838
- Name => 'ImageWidth',
839
- Priority => 0,
840
- RawConv => \&FixWrongFormat,
841
- },
842
- 20 => {
843
- Name => 'ImageHeight',
844
- Priority => 0,
845
- RawConv => \&FixWrongFormat,
846
- },
847
- );
848
-
849
- # user data atoms
850
- %Image::ExifTool::QuickTime::UserData = (
851
- PROCESS_PROC => \&ProcessMOV,
852
- WRITE_PROC => \&WriteQuickTime,
853
- GROUPS => { 2 => 'Video' },
854
- NOTES => q{
855
- Tag ID's beginning with the copyright symbol (hex 0xa9) are multi-language
856
- text. Alternate language tags are accessed by adding a dash followed by the
857
- language/country code to the tag name. ExifTool will extract any
858
- multi-language user data tags found, even if they don't exist in this table.
859
- },
860
- "\xa9cpy" => { Name => 'Copyright', Groups => { 2 => 'Author' } },
861
- "\xa9day" => {
862
- Name => 'CreateDate',
863
- Groups => { 2 => 'Time' },
864
- # handle values in the form "2010-02-12T13:27:14-0800" (written by Apple iPhone)
865
- ValueConv => q{
866
- require Image::ExifTool::XMP;
867
- $val = Image::ExifTool::XMP::ConvertXMPDate($val);
868
- $val =~ s/([-+]\d{2})(\d{2})$/$1:$2/; # add colon to timezone if necessary
869
- return $val;
870
- },
871
- PrintConv => '$self->ConvertDateTime($val)',
872
- },
873
- "\xa9ART" => 'Artist', #PH (iTunes 8.0.2)
874
- "\xa9alb" => 'Album', #PH (iTunes 8.0.2)
875
- "\xa9arg" => 'Arranger', #12
876
- "\xa9ark" => 'ArrangerKeywords', #12
877
- "\xa9cmt" => 'Comment', #PH (iTunes 8.0.2)
878
- "\xa9cok" => 'ComposerKeywords', #12
879
- "\xa9com" => 'Composer', #12
880
- "\xa9dir" => 'Director', #12
881
- "\xa9ed1" => 'Edit1',
882
- "\xa9ed2" => 'Edit2',
883
- "\xa9ed3" => 'Edit3',
884
- "\xa9ed4" => 'Edit4',
885
- "\xa9ed5" => 'Edit5',
886
- "\xa9ed6" => 'Edit6',
887
- "\xa9ed7" => 'Edit7',
888
- "\xa9ed8" => 'Edit8',
889
- "\xa9ed9" => 'Edit9',
890
- "\xa9fmt" => 'Format',
891
- "\xa9gen" => 'Genre', #PH (iTunes 8.0.2)
892
- "\xa9grp" => 'Grouping', #PH (NC)
893
- "\xa9inf" => 'Information',
894
- "\xa9isr" => 'ISRCCode', #12
895
- "\xa9lab" => 'RecordLabelName', #12
896
- "\xa9lal" => 'RecordLabelURL', #12
897
- "\xa9lyr" => 'Lyrics', #PH (NC)
898
- "\xa9mak" => 'Make', #12
899
- "\xa9mal" => 'MakerURL', #12
900
- "\xa9mod" => 'Model', #PH
901
- "\xa9nam" => 'Title', #12
902
- "\xa9pdk" => 'ProducerKeywords', #12
903
- "\xa9phg" => 'RecordingCopyright', #12
904
- "\xa9prd" => 'Producer',
905
- "\xa9prf" => 'Performers',
906
- "\xa9prk" => 'PerformerKeywords', #12
907
- "\xa9prl" => 'PerformerURL',
908
- "\xa9dir" => 'Director', #12
909
- "\xa9req" => 'Requirements',
910
- "\xa9snk" => 'SubtitleKeywords', #12
911
- "\xa9snm" => 'Subtitle', #12
912
- "\xa9src" => 'SourceCredits', #12
913
- "\xa9swf" => 'SongWriter', #12
914
- "\xa9swk" => 'SongWriterKeywords', #12
915
- "\xa9swr" => 'SoftwareVersion', #12
916
- "\xa9too" => 'Encoder', #PH (NC)
917
- "\xa9trk" => 'Track', #PH (NC)
918
- "\xa9wrt" => 'Composer',
919
- "\xa9xyz" => { #PH (iPhone 3GS)
920
- Name => 'GPSCoordinates',
921
- Groups => { 2 => 'Location' },
922
- ValueConv => \&ConvertISO6709,
923
- PrintConv => \&PrintGPSCoordinates,
924
- },
925
- name => 'Name',
926
- WLOC => {
927
- Name => 'WindowLocation',
928
- Format => 'int16u',
929
- },
930
- LOOP => {
931
- Name => 'LoopStyle',
932
- Format => 'int32u',
933
- PrintConv => {
934
- 1 => 'Normal',
935
- 2 => 'Palindromic',
936
- },
937
- },
938
- SelO => {
939
- Name => 'PlaySelection',
940
- Format => 'int8u',
941
- },
942
- AllF => {
943
- Name => 'PlayAllFrames',
944
- Format => 'int8u',
945
- },
946
- meta => {
947
- Name => 'Meta',
948
- SubDirectory => {
949
- TagTable => 'Image::ExifTool::QuickTime::Meta',
950
- Start => 4, # must skip 4-byte version number header
951
- },
952
- },
953
- 'ptv '=> {
954
- Name => 'PrintToVideo',
955
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Video' },
956
- },
957
- hnti => {
958
- Name => 'HintInfo',
959
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::HintInfo' },
960
- },
961
- hinf => {
962
- Name => 'HintTrackInfo',
963
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::HintTrackInfo' },
964
- },
965
- hinv => 'HintVersion', #PH (guess)
966
- XMP_ => { #PH (Adobe CS3 Bridge)
967
- Name => 'XMP',
968
- # *** this is where ExifTool writes XMP in MOV videos (as per XMP spec) ***
969
- SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main' },
970
- },
971
- # the following are 3gp tags, references:
972
- # http://atomicparsley.sourceforge.net
973
- # http://www.3gpp.org/ftp/tsg_sa/WG4_CODEC/TSGS4_25/Docs/
974
- cprt => { Name => 'Copyright', %langText, Groups => { 2 => 'Author' } },
975
- auth => { Name => 'Author', %langText, Groups => { 2 => 'Author' } },
976
- titl => { Name => 'Title', %langText },
977
- dscp => { Name => 'Description',%langText },
978
- perf => { Name => 'Performer', %langText },
979
- gnre => { Name => 'Genre', %langText },
980
- albm => { Name => 'Album', %langText },
981
- coll => { Name => 'CollectionName', %langText }, #17
982
- rtng => {
983
- Name => 'Rating',
984
- # (4-byte flags, 4-char entity, 4-char criteria, 2-byte lang, string)
985
- RawConv => q{
986
- return '<err>' unless length $val >= 14;
987
- my $str = 'Entity=' . substr($val,4,4) . ' Criteria=' . substr($val,8,4);
988
- $str =~ tr/\0-\x1f\x7f-\xff//d; # remove unprintable characters
989
- my $lang = Image::ExifTool::QuickTime::UnpackLang(Get16u(\$val, 12));
990
- $lang = $lang ? "($lang) " : '';
991
- $val = substr($val, 14);
992
- $val = $self->Decode($val, 'UCS2') if $val =~ /^\xfe\xff/;
993
- return $lang . $str . ' ' . $val;
994
- },
995
- },
996
- clsf => {
997
- Name => 'Classification',
998
- # (4-byte flags, 4-char entity, 2-byte index, 2-byte lang, string)
999
- RawConv => q{
1000
- return '<err>' unless length $val >= 12;
1001
- my $str = 'Entity=' . substr($val,4,4) . ' Index=' . Get16u(\$val,8);
1002
- $str =~ tr/\0-\x1f\x7f-\xff//d; # remove unprintable characters
1003
- my $lang = Image::ExifTool::QuickTime::UnpackLang(Get16u(\$val, 10));
1004
- $lang = $lang ? "($lang) " : '';
1005
- $val = substr($val, 12);
1006
- $val = $self->Decode($val, 'UCS2') if $val =~ /^\xfe\xff/;
1007
- return $lang . $str . ' ' . $val;
1008
- },
1009
- },
1010
- kywd => {
1011
- Name => 'Keywords',
1012
- # (4 byte flags, 2-byte lang, 1-byte count, count x pascal strings)
1013
- RawConv => q{
1014
- return '<err>' unless length $val >= 7;
1015
- my $lang = Image::ExifTool::QuickTime::UnpackLang(Get16u(\$val, 4));
1016
- $lang = $lang ? "($lang) " : '';
1017
- my $num = Get8u(\$val, 6);
1018
- my ($i, @vals);
1019
- my $pos = 7;
1020
- for ($i=0; $i<$num; ++$i) {
1021
- last if $pos >= length $val;
1022
- my $len = Get8u(\$val, $pos++);
1023
- last if $pos + $len > length $val;
1024
- my $v = substr($val, $pos, $len);
1025
- $v = $self->Decode($v, 'UCS2') if $v =~ /^\xfe\xff/;
1026
- push @vals, $v;
1027
- $pos += $len;
1028
- }
1029
- my $sep = $self->Options('ListSep');
1030
- return $lang . join($sep, @vals);
1031
- },
1032
- },
1033
- loci => {
1034
- Name => 'LocationInformation',
1035
- Groups => { 2 => 'Location' },
1036
- # (4-byte flags, 2-byte lang, location string, 1-byte role, 4-byte fixed longitude,
1037
- # 4-byte fixed latitude, 4-byte fixed altitude, body string, notes string)
1038
- RawConv => q{
1039
- return '<err>' unless length $val >= 6;
1040
- my $lang = Image::ExifTool::QuickTime::UnpackLang(Get16u(\$val, 4));
1041
- $lang = $lang ? "($lang) " : '';
1042
- $val = substr($val, 6);
1043
- my $str;
1044
- if ($val =~ /^\xfe\xff/) {
1045
- $val =~ s/^(\xfe\xff(.{2})*?)\0\0//s or return '<err>';
1046
- $str = $self->Decode($1, 'UCS2');
1047
- } else {
1048
- $val =~ s/^(.*?)\0//s or return '<err>';
1049
- $str = $1;
1050
- }
1051
- $str = '(none)' unless length $str;
1052
- return '<err>' if length $val < 13;
1053
- my $role = Get8u(\$val, 0);
1054
- my $lon = GetFixed32s(\$val, 1);
1055
- my $lat = GetFixed32s(\$val, 5);
1056
- my $alt = GetFixed32s(\$val, 9);
1057
- my $roleStr = {0=>'shooting',1=>'real',2=>'fictional',3=>'reserved'}->{$role};
1058
- $str .= ' Role=' . ($roleStr || "unknown($role)");
1059
- $str .= sprintf(' Lat=%.5f Lon=%.5f Alt=%.2f', $lat, $lon, $alt);
1060
- $val = substr($val, 13);
1061
- if ($val =~ s/^(\xfe\xff(.{2})*?)\0\0//s) {
1062
- $str .= ' Body=' . $self->Decode($1, 'UCS2');
1063
- } elsif ($val =~ s/^(.*?)\0//s) {
1064
- $str .= " Body=$1";
1065
- }
1066
- if ($val =~ s/^(\xfe\xff(.{2})*?)\0\0//s) {
1067
- $str .= ' Notes=' . $self->Decode($1, 'UCS2');
1068
- } elsif ($val =~ s/^(.*?)\0//s) {
1069
- $str .= " Notes=$1";
1070
- }
1071
- return $lang . $str;
1072
- },
1073
- },
1074
- yrrc => {
1075
- Name => 'Year',
1076
- Groups => { 2 => 'Time' },
1077
- RawConv => 'length($val) >= 6 ? Get16u(\$val,4) : "<err>"',
1078
- },
1079
- urat => { #17
1080
- Name => 'UserRating',
1081
- RawConv => q{
1082
- return '<err>' unless length $val >= 8;
1083
- return Get8u(\$val, 7);
1084
- },
1085
- },
1086
- # tsel - TrackSelection (ref 17)
1087
- # Apple tags (ref 16)
1088
- angl => { Name => 'CameraAngle', Format => 'string' }, # (NC)
1089
- clfn => { Name => 'ClipFileName', Format => 'string' }, # (NC)
1090
- clid => { Name => 'ClipID', Format => 'string' }, # (NC)
1091
- cmid => { Name => 'CameraID', Format => 'string' }, # (NC)
1092
- cmnm => { # (NC)
1093
- Name => 'Model',
1094
- Description => 'Camera Model Name',
1095
- Format => 'string', # (necessary to remove the trailing NULL)
1096
- },
1097
- date => { # (NC)
1098
- Name => 'DateTimeOriginal',
1099
- Groups => { 2 => 'Time' },
1100
- ValueConv => q{
1101
- require Image::ExifTool::XMP;
1102
- $val = Image::ExifTool::XMP::ConvertXMPDate($val);
1103
- $val =~ s/([-+]\d{2})(\d{2})$/$1:$2/; # add colon to timezone if necessary
1104
- return $val;
1105
- },
1106
- PrintConv => '$self->ConvertDateTime($val)',
1107
- },
1108
- manu => { # (SX280)
1109
- Name => 'Make',
1110
- # (with Canon there are 6 unknown bytes before the model: "\0\0\0\0\x15\xc7")
1111
- RawConv => '$val=~s/^\0{4}..//s; $val=~s/\0.*//; $val',
1112
- },
1113
- modl => { # (Samsung GT-S8530, Canon SX280)
1114
- Name => 'Model',
1115
- Description => 'Camera Model Name',
1116
- # (with Canon there are 6 unknown bytes before the model: "\0\0\0\0\x15\xc7")
1117
- RawConv => '$val=~s/^\0{4}..//s; $val=~s/\0.*//; $val',
1118
- },
1119
- reel => { Name => 'ReelName', Format => 'string' }, # (NC)
1120
- scen => { Name => 'Scene', Format => 'string' }, # (NC)
1121
- shot => { Name => 'ShotName', Format => 'string' }, # (NC)
1122
- slno => { Name => 'SerialNumber', Format => 'string' }, # (NC)
1123
- apmd => { Name => 'ApertureMode', Format => 'undef' }, #20
1124
- kgtt => { #http://lists.ffmpeg.org/pipermail/ffmpeg-devel-irc/2012-June/000707.html
1125
- # 'TrackType' will expand to 'Track#Type' when found inside a track
1126
- Name => 'TrackType',
1127
- # set flag to process this as international text
1128
- # even though the tag ID doesn't start with 0xa9
1129
- IText => 1,
1130
- },
1131
- # other non-Apple tags (ref 16)
1132
- # hpix - HipixRichPicture (ref 16, HIPIX)
1133
- # strk - sub-track information (ref 16, ISO)
1134
- #
1135
- # Manufacturer-specific metadata
1136
- #
1137
- TAGS => [ #PH
1138
- # these tags were initially discovered in a Pentax movie,
1139
- # but similar information is found in videos from other manufacturers
1140
- {
1141
- Name => 'FujiFilmTags',
1142
- Condition => '$$valPt =~ /^FUJIFILM DIGITAL CAMERA\0/',
1143
- SubDirectory => {
1144
- TagTable => 'Image::ExifTool::FujiFilm::MOV',
1145
- ByteOrder => 'LittleEndian',
1146
- },
1147
- },
1148
- {
1149
- Name => 'KodakTags',
1150
- Condition => '$$valPt =~ /^EASTMAN KODAK COMPANY/',
1151
- SubDirectory => {
1152
- TagTable => 'Image::ExifTool::Kodak::MOV',
1153
- ByteOrder => 'LittleEndian',
1154
- },
1155
- },
1156
- {
1157
- Name => 'KonicaMinoltaTags',
1158
- Condition => '$$valPt =~ /^KONICA MINOLTA DIGITAL CAMERA/',
1159
- SubDirectory => {
1160
- TagTable => 'Image::ExifTool::Minolta::MOV1',
1161
- ByteOrder => 'LittleEndian',
1162
- },
1163
- },
1164
- {
1165
- Name => 'MinoltaTags',
1166
- Condition => '$$valPt =~ /^MINOLTA DIGITAL CAMERA/',
1167
- SubDirectory => {
1168
- TagTable => 'Image::ExifTool::Minolta::MOV2',
1169
- ByteOrder => 'LittleEndian',
1170
- },
1171
- },
1172
- {
1173
- Name => 'NikonTags',
1174
- Condition => '$$valPt =~ /^NIKON DIGITAL CAMERA\0/',
1175
- SubDirectory => {
1176
- TagTable => 'Image::ExifTool::Nikon::MOV',
1177
- ByteOrder => 'LittleEndian',
1178
- },
1179
- },
1180
- {
1181
- Name => 'OlympusTags1',
1182
- Condition => '$$valPt =~ /^OLYMPUS DIGITAL CAMERA\0.{9}\x01\0/s',
1183
- SubDirectory => {
1184
- TagTable => 'Image::ExifTool::Olympus::MOV1',
1185
- ByteOrder => 'LittleEndian',
1186
- },
1187
- },
1188
- {
1189
- Name => 'OlympusTags2',
1190
- Condition => '$$valPt =~ /^OLYMPUS DIGITAL CAMERA(?!\0.{21}\x0a\0{3})/s',
1191
- SubDirectory => {
1192
- TagTable => 'Image::ExifTool::Olympus::MOV2',
1193
- ByteOrder => 'LittleEndian',
1194
- },
1195
- },
1196
- {
1197
- Name => 'OlympusTags3',
1198
- Condition => '$$valPt =~ /^OLYMPUS DIGITAL CAMERA\0/',
1199
- SubDirectory => {
1200
- TagTable => 'Image::ExifTool::Olympus::MP4',
1201
- ByteOrder => 'LittleEndian',
1202
- },
1203
- },
1204
- {
1205
- Name => 'OlympusTags4',
1206
- Condition => '$$valPt =~ /^.{16}OLYM\0/s',
1207
- SubDirectory => {
1208
- TagTable => 'Image::ExifTool::Olympus::MOV3',
1209
- Start => 12,
1210
- },
1211
- },
1212
- {
1213
- Name => 'PentaxTags',
1214
- Condition => '$$valPt =~ /^PENTAX DIGITAL CAMERA\0/',
1215
- SubDirectory => {
1216
- TagTable => 'Image::ExifTool::Pentax::MOV',
1217
- ByteOrder => 'LittleEndian',
1218
- },
1219
- },
1220
- {
1221
- Name => 'SamsungTags',
1222
- Condition => '$$valPt =~ /^SAMSUNG DIGITAL CAMERA\0/',
1223
- SubDirectory => {
1224
- TagTable => 'Image::ExifTool::Samsung::MP4',
1225
- ByteOrder => 'LittleEndian',
1226
- },
1227
- },
1228
- {
1229
- Name => 'SanyoMOV',
1230
- Condition => q{
1231
- $$valPt =~ /^SANYO DIGITAL CAMERA\0/ and
1232
- $self->{VALUE}->{FileType} eq "MOV"
1233
- },
1234
- SubDirectory => {
1235
- TagTable => 'Image::ExifTool::Sanyo::MOV',
1236
- ByteOrder => 'LittleEndian',
1237
- },
1238
- },
1239
- {
1240
- Name => 'SanyoMP4',
1241
- Condition => q{
1242
- $$valPt =~ /^SANYO DIGITAL CAMERA\0/ and
1243
- $self->{VALUE}->{FileType} eq "MP4"
1244
- },
1245
- SubDirectory => {
1246
- TagTable => 'Image::ExifTool::Sanyo::MP4',
1247
- ByteOrder => 'LittleEndian',
1248
- },
1249
- },
1250
- {
1251
- Name => 'UnknownTags',
1252
- Unknown => 1,
1253
- Binary => 1
1254
- },
1255
- ],
1256
- # ---- Canon ----
1257
- CNCV => { Name => 'CompressorVersion', Format => 'string' }, #PH (5D Mark II)
1258
- CNMN => {
1259
- Name => 'Model', #PH (EOS 550D)
1260
- Description => 'Camera Model Name',
1261
- Format => 'string', # (necessary to remove the trailing NULL)
1262
- },
1263
- CNFV => { Name => 'FirmwareVersion', Format => 'string' }, #PH (EOS 550D)
1264
- CNTH => { #PH (PowerShot S95)
1265
- Name => 'CanonCNTH',
1266
- SubDirectory => { TagTable => 'Image::ExifTool::Canon::CNTH' },
1267
- },
1268
- # CNDB - 2112 bytes (550D)
1269
- # CNDM - 4 bytes - 0xff,0xd8,0xff,0xd9 (S95)
1270
- # ---- Casio ----
1271
- QVMI => { #PH
1272
- Name => 'CasioQVMI',
1273
- # Casio stores standard EXIF-format information in MOV videos (ie. EX-S880)
1274
- SubDirectory => {
1275
- TagTable => 'Image::ExifTool::Exif::Main',
1276
- ProcessProc => \&Image::ExifTool::Exif::ProcessExif, # (because ProcessMOV is default)
1277
- DirName => 'IFD0',
1278
- Multi => 0, # (no NextIFD pointer)
1279
- Start => 10,
1280
- ByteOrder => 'BigEndian',
1281
- },
1282
- },
1283
- # ---- FujiFilm ----
1284
- FFMV => { #PH (FinePix HS20EXR)
1285
- Name => 'FujiFilmFFMV',
1286
- SubDirectory => { TagTable => 'Image::ExifTool::FujiFilm::FFMV' },
1287
- },
1288
- MVTG => { #PH (FinePix HS20EXR)
1289
- Name => 'FujiFilmMVTG',
1290
- SubDirectory => {
1291
- TagTable => 'Image::ExifTool::Exif::Main',
1292
- ProcessProc => \&Image::ExifTool::Exif::ProcessExif, # (because ProcessMOV is default)
1293
- DirName => 'IFD0',
1294
- Start => 16,
1295
- Base => '$start',
1296
- ByteOrder => 'LittleEndian',
1297
- },
1298
- },
1299
- # ---- GoPro ----
1300
- GoPr => 'GoProType', #PH
1301
- # ---- Kodak ----
1302
- DcMD => {
1303
- Name => 'KodakDcMD',
1304
- SubDirectory => { TagTable => 'Image::ExifTool::Kodak::DcMD' },
1305
- },
1306
- # AMBA => Ambarella AVC atom (unknown data written by Kodak Playsport video cam)
1307
- # ---- Microsoft ----
1308
- Xtra => { #PH (microsoft)
1309
- Name => 'MicrosoftXtra',
1310
- SubDirectory => { TagTable => 'Image::ExifTool::Microsoft::Xtra' },
1311
- },
1312
- # ---- Minolta ----
1313
- MMA0 => { #PH (DiMage 7Hi)
1314
- Name => 'MinoltaMMA0',
1315
- SubDirectory => { TagTable => 'Image::ExifTool::Minolta::MMA' },
1316
- },
1317
- MMA1 => { #PH (Dimage A2)
1318
- Name => 'MinoltaMMA1',
1319
- SubDirectory => { TagTable => 'Image::ExifTool::Minolta::MMA' },
1320
- },
1321
- # ---- Nikon ----
1322
- NCDT => { #PH
1323
- Name => 'NikonNCDT',
1324
- SubDirectory => { TagTable => 'Image::ExifTool::Nikon::NCDT' },
1325
- },
1326
- # ---- Olympus ----
1327
- scrn => { #PH (TG-810)
1328
- Name => 'OlympusPreview',
1329
- Condition => '$$valPt =~ /^.{4}\xff\xd8\xff\xdb/s',
1330
- SubDirectory => { TagTable => 'Image::ExifTool::Olympus::scrn' },
1331
- },
1332
- # ---- Panasonic/Leica ----
1333
- PANA => { #PH
1334
- Name => 'PanasonicPANA',
1335
- SubDirectory => { TagTable => 'Image::ExifTool::Panasonic::PANA' },
1336
- },
1337
- LEIC => { #PH
1338
- Name => 'LeicaLEIC',
1339
- SubDirectory => { TagTable => 'Image::ExifTool::Panasonic::PANA' },
1340
- },
1341
- # ---- Pentax ----
1342
- thmb => [ # (apparently defined by 3gpp, ref 16)
1343
- { #PH (Pentax Q)
1344
- Name => 'MakerNotePentax5a',
1345
- Condition => '$$valPt =~ /^PENTAX \0II/',
1346
- SubDirectory => {
1347
- TagTable => 'Image::ExifTool::Pentax::Main',
1348
- ProcessProc => \&Image::ExifTool::Exif::ProcessExif, # (because ProcessMOV is default)
1349
- Start => 10,
1350
- Base => '$start - 10',
1351
- ByteOrder => 'LittleEndian',
1352
- },
1353
- },{ #PH (TG-810)
1354
- Name => 'OlympusThumbnail',
1355
- Condition => '$$valPt =~ /^.{4}\xff\xd8\xff\xdb/s',
1356
- SubDirectory => { TagTable => 'Image::ExifTool::Olympus::thmb' },
1357
- },{ #17 (format is in bytes 3-7)
1358
- Name => 'ThumbnailImage',
1359
- Condition => '$$valPt =~ /^.{8}\xff\xd8\xff\xdb/s',
1360
- ValueConv => 'substr($val, 8)',
1361
- },{ #17 (format is in bytes 3-7)
1362
- Name => 'ThumbnailPNG',
1363
- Condition => '$$valPt =~ /^.{8}\x89PNG\r\n\x1a\n/s',
1364
- ValueConv => 'substr($val, 8)',
1365
- },{
1366
- Name => 'UnknownThumbnail',
1367
- Binary => 1,
1368
- },
1369
- ],
1370
- PENT => { #PH
1371
- Name => 'PentaxPENT',
1372
- SubDirectory => {
1373
- TagTable => 'Image::ExifTool::Pentax::PENT',
1374
- ByteOrder => 'LittleEndian',
1375
- },
1376
- },
1377
- PXTH => { #PH (Pentax K-01)
1378
- Name => 'PentaxPreview',
1379
- SubDirectory => { TagTable => 'Image::ExifTool::Pentax::PXTH' },
1380
- },
1381
- PXMN => { #PH (Pentax K-01)
1382
- Name => 'MakerNotePentax5b',
1383
- Condition => '$$valPt =~ /^PENTAX \0MM/',
1384
- SubDirectory => {
1385
- TagTable => 'Image::ExifTool::Pentax::Main',
1386
- ProcessProc => \&Image::ExifTool::Exif::ProcessExif, # (because ProcessMOV is default)
1387
- Start => 10,
1388
- Base => '$start - 10',
1389
- ByteOrder => 'BigEndian',
1390
- },
1391
- },
1392
- # ---- Ricoh ----
1393
- RTHU => { #PH (GR)
1394
- Name => 'PreviewImage',
1395
- RawConv => '$self->ValidateImage(\$val, $tag)',
1396
- },
1397
- RMKN => { #PH (GR)
1398
- Name => 'RicohRMKN',
1399
- SubDirectory => {
1400
- TagTable => 'Image::ExifTool::Exif::Main',
1401
- ProcessProc => \&Image::ExifTool::ProcessTIFF, # (because ProcessMOV is default)
1402
- },
1403
- },
1404
- # ---- Samsung ----
1405
- vndr => 'Vendor', #PH (Samsung PL70)
1406
- SDLN => 'PlayMode', #PH (NC, Samsung ST80 "SEQ_PLAY")
1407
- INFO => {
1408
- Name => 'SamsungINFO',
1409
- SubDirectory => { TagTable => 'Image::ExifTool::Samsung::INFO' },
1410
- },
1411
- # ducp - 4 bytes all zero (Samsung ST96,WB750), 52 bytes all zero (Samsung WB30F)
1412
- # edli - 52 bytes all zero (Samsung WB30F)
1413
- # @etc - 4 bytes all zero (Samsung WB30F)
1414
- # smrd - string "TRUEBLUE" (Samsung SM-C101)
1415
- '@sec' => { #PH (Samsung WB30F)
1416
- Name => 'SamsungSec',
1417
- SubDirectory => { TagTable => 'Image::ExifTool::Samsung::sec' },
1418
- },
1419
- 'smta' => { #PH (Samsung SM-C101)
1420
- Name => 'SamsungSmta',
1421
- SubDirectory => {
1422
- TagTable => 'Image::ExifTool::Samsung::smta',
1423
- Start => 4,
1424
- },
1425
- },
1426
- #
1427
- # other 3rd-party tags
1428
- # (ref http://code.google.com/p/mp4parser/source/browse/trunk/isoparser/src/main/resources/isoparser-default.properties?r=814)
1429
- #
1430
- ccid => 'ContentID',
1431
- icnu => 'IconURI',
1432
- infu => 'InfoURL',
1433
- cdis => 'ContentDistributorID',
1434
- albr => { Name => 'AlbumArtist', Groups => { 2 => 'Author' } },
1435
- cvru => 'CoverURI',
1436
- lrcu => 'LyricsURI',
1437
- );
1438
-
1439
- # User-specific media data atoms (ref 11)
1440
- %Image::ExifTool::QuickTime::UserMedia = (
1441
- PROCESS_PROC => \&ProcessMOV,
1442
- GROUPS => { 2 => 'Video' },
1443
- MTDT => {
1444
- Name => 'MetaData',
1445
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::MetaData' },
1446
- },
1447
- );
1448
-
1449
- # User-specific media data atoms (ref 11)
1450
- %Image::ExifTool::QuickTime::MetaData = (
1451
- PROCESS_PROC => \&Image::ExifTool::QuickTime::ProcessMetaData,
1452
- GROUPS => { 2 => 'Video' },
1453
- TAG_PREFIX => 'MetaData',
1454
- 0x01 => 'Title',
1455
- 0x03 => {
1456
- Name => 'ProductionDate',
1457
- Groups => { 2 => 'Time' },
1458
- # translate from format "YYYY/mm/dd HH:MM:SS"
1459
- ValueConv => '$val=~tr{/}{:}; $val',
1460
- PrintConv => '$self->ConvertDateTime($val)',
1461
- },
1462
- 0x04 => 'Software',
1463
- 0x05 => 'Product',
1464
- 0x0a => {
1465
- Name => 'TrackProperty',
1466
- RawConv => 'my @a=unpack("Nnn",$val); "@a"',
1467
- PrintConv => [
1468
- { 0 => 'No presentation', BITMASK => { 0 => 'Main track' } },
1469
- { 0 => 'No attributes', BITMASK => { 15 => 'Read only' } },
1470
- '"Priority $val"',
1471
- ],
1472
- },
1473
- 0x0b => {
1474
- Name => 'TimeZone',
1475
- Groups => { 2 => 'Time' },
1476
- RawConv => 'Get16s(\$val,0)',
1477
- PrintConv => 'TimeZoneString($val)',
1478
- },
1479
- 0x0c => {
1480
- Name => 'ModifyDate',
1481
- Groups => { 2 => 'Time' },
1482
- # translate from format "YYYY/mm/dd HH:MM:SS"
1483
- ValueConv => '$val=~tr{/}{:}; $val',
1484
- PrintConv => '$self->ConvertDateTime($val)',
1485
- },
1486
- );
1487
-
1488
- # compressed movie atoms (ref http://wiki.multimedia.cx/index.php?title=QuickTime_container#cmov)
1489
- %Image::ExifTool::QuickTime::CMovie = (
1490
- PROCESS_PROC => \&ProcessMOV,
1491
- GROUPS => { 2 => 'Video' },
1492
- dcom => 'Compression',
1493
- # cmvd - compressed movie data
1494
- );
1495
-
1496
- # Profile atoms (ref 11)
1497
- %Image::ExifTool::QuickTime::Profile = (
1498
- PROCESS_PROC => \&ProcessMOV,
1499
- GROUPS => { 2 => 'Video' },
1500
- FPRF => {
1501
- Name => 'FileGlobalProfile',
1502
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::FileProf' },
1503
- },
1504
- APRF => {
1505
- Name => 'AudioProfile',
1506
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::AudioProf' },
1507
- },
1508
- VPRF => {
1509
- Name => 'VideoProfile',
1510
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::VideoProf' },
1511
- },
1512
- OLYM => { #PH
1513
- Name => 'OlympusOLYM',
1514
- SubDirectory => {
1515
- TagTable => 'Image::ExifTool::Olympus::OLYM',
1516
- ByteOrder => 'BigEndian',
1517
- },
1518
- },
1519
- );
1520
-
1521
- # FPRF atom information (ref 11)
1522
- %Image::ExifTool::QuickTime::FileProf = (
1523
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
1524
- GROUPS => { 2 => 'Video' },
1525
- FORMAT => 'int32u',
1526
- 0 => { Name => 'FileProfileVersion', Unknown => 1 }, # unknown = uninteresting
1527
- 1 => {
1528
- Name => 'FileFunctionFlags',
1529
- PrintConv => { BITMASK => {
1530
- 28 => 'Fragmented',
1531
- 29 => 'Additional tracks',
1532
- 30 => 'Edited', # (main AV track is edited)
1533
- }},
1534
- },
1535
- # 2 - reserved
1536
- );
1537
-
1538
- # APRF atom information (ref 11)
1539
- %Image::ExifTool::QuickTime::AudioProf = (
1540
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
1541
- GROUPS => { 2 => 'Audio' },
1542
- FORMAT => 'int32u',
1543
- 0 => { Name => 'AudioProfileVersion', Unknown => 1 },
1544
- 1 => 'AudioTrackID',
1545
- 2 => {
1546
- Name => 'AudioCodec',
1547
- Format => 'undef[4]',
1548
- },
1549
- 3 => {
1550
- Name => 'AudioCodecInfo',
1551
- Unknown => 1,
1552
- PrintConv => 'sprintf("0x%.4x", $val)',
1553
- },
1554
- 4 => {
1555
- Name => 'AudioAttributes',
1556
- PrintConv => { BITMASK => {
1557
- 0 => 'Encrypted',
1558
- 1 => 'Variable bitrate',
1559
- 2 => 'Dual mono',
1560
- }},
1561
- },
1562
- 5 => {
1563
- Name => 'AudioAvgBitrate',
1564
- ValueConv => '$val * 1000',
1565
- PrintConv => 'ConvertBitrate($val)',
1566
- },
1567
- 6 => {
1568
- Name => 'AudioMaxBitrate',
1569
- ValueConv => '$val * 1000',
1570
- PrintConv => 'ConvertBitrate($val)',
1571
- },
1572
- 7 => 'AudioSampleRate',
1573
- 8 => 'AudioChannels',
1574
- );
1575
-
1576
- # VPRF atom information (ref 11)
1577
- %Image::ExifTool::QuickTime::VideoProf = (
1578
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
1579
- GROUPS => { 2 => 'Video' },
1580
- FORMAT => 'int32u',
1581
- 0 => { Name => 'VideoProfileVersion', Unknown => 1 },
1582
- 1 => 'VideoTrackID',
1583
- 2 => {
1584
- Name => 'VideoCodec',
1585
- Format => 'undef[4]',
1586
- },
1587
- 3 => {
1588
- Name => 'VideoCodecInfo',
1589
- Unknown => 1,
1590
- PrintConv => 'sprintf("0x%.4x", $val)',
1591
- },
1592
- 4 => {
1593
- Name => 'VideoAttributes',
1594
- PrintConv => { BITMASK => {
1595
- 0 => 'Encrypted',
1596
- 1 => 'Variable bitrate',
1597
- 2 => 'Variable frame rate',
1598
- 3 => 'Interlaced',
1599
- }},
1600
- },
1601
- 5 => {
1602
- Name => 'VideoAvgBitrate',
1603
- ValueConv => '$val * 1000',
1604
- PrintConv => 'ConvertBitrate($val)',
1605
- },
1606
- 6 => {
1607
- Name => 'VideoMaxBitrate',
1608
- ValueConv => '$val * 1000',
1609
- PrintConv => 'ConvertBitrate($val)',
1610
- },
1611
- 7 => {
1612
- Name => 'VideoAvgFrameRate',
1613
- Format => 'fixed32u',
1614
- PrintConv => 'int($val * 1000 + 0.5) / 1000',
1615
- },
1616
- 8 => {
1617
- Name => 'VideoMaxFrameRate',
1618
- Format => 'fixed32u',
1619
- PrintConv => 'int($val * 1000 + 0.5) / 1000',
1620
- },
1621
- 9 => {
1622
- Name => 'VideoSize',
1623
- Format => 'int16u[2]',
1624
- PrintConv => '$val=~tr/ /x/; $val',
1625
- },
1626
- 10 => {
1627
- Name => 'PixelAspectRatio',
1628
- Format => 'int16u[2]',
1629
- PrintConv => '$val=~tr/ /:/; $val',
1630
- },
1631
- );
1632
-
1633
- # meta atoms
1634
- %Image::ExifTool::QuickTime::Meta = (
1635
- PROCESS_PROC => \&ProcessMOV,
1636
- GROUPS => { 2 => 'Video' },
1637
- ilst => {
1638
- Name => 'ItemList',
1639
- SubDirectory => {
1640
- TagTable => 'Image::ExifTool::QuickTime::ItemList',
1641
- HasData => 1, # process atoms as containers with 'data' elements
1642
- },
1643
- },
1644
- # MP4 tags (ref 5)
1645
- hdlr => {
1646
- Name => 'Handler',
1647
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Handler' },
1648
- },
1649
- dinf => {
1650
- Name => 'DataInformation',
1651
- Flags => ['Binary','Unknown'],
1652
- },
1653
- ipmc => {
1654
- Name => 'IPMPControl',
1655
- Flags => ['Binary','Unknown'],
1656
- },
1657
- iloc => {
1658
- Name => 'ItemLocation',
1659
- Flags => ['Binary','Unknown'],
1660
- },
1661
- ipro => {
1662
- Name => 'ItemProtection',
1663
- Flags => ['Binary','Unknown'],
1664
- },
1665
- iinf => {
1666
- Name => 'ItemInformation',
1667
- Flags => ['Binary','Unknown'],
1668
- },
1669
- 'xml ' => {
1670
- Name => 'XML',
1671
- Flags => [ 'Binary', 'Protected', 'BlockExtract' ],
1672
- SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main' },
1673
- },
1674
- 'keys' => {
1675
- Name => 'Keys',
1676
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Keys' },
1677
- },
1678
- bxml => {
1679
- Name => 'BinaryXML',
1680
- Flags => ['Binary','Unknown'],
1681
- },
1682
- pitm => {
1683
- Name => 'PrimaryItemReference',
1684
- Flags => ['Binary','Unknown'],
1685
- },
1686
- free => { #PH
1687
- Name => 'Free',
1688
- Flags => ['Binary','Unknown'],
1689
- },
1690
- );
1691
-
1692
- # track reference atoms
1693
- %Image::ExifTool::QuickTime::TrackRef = (
1694
- PROCESS_PROC => \&ProcessMOV,
1695
- GROUPS => { 1 => 'Track#', 2 => 'Video' },
1696
- chap => { Name => 'ChapterList', Format => 'int32u' },
1697
- tmcd => { Name => 'TimeCode', Format => 'int32u' },
1698
- mpod => { #PH (FLIR MP4)
1699
- Name => 'ElementaryStreamTrack',
1700
- Format => 'int32u',
1701
- ValueConv => '$val =~ s/^1 //; $val', # (why 2 numbers? -- ignore the first if "1")
1702
- },
1703
- # also: sync, scpt, ssrc, iTunesInfo
1704
- );
1705
-
1706
- # track aperture mode dimensions atoms
1707
- # (ref https://developer.apple.com/library/mac/#documentation/QuickTime/QTFF/QTFFChap2/qtff2.html)
1708
- %Image::ExifTool::QuickTime::TrackAperture = (
1709
- PROCESS_PROC => \&ProcessMOV,
1710
- GROUPS => { 1 => 'Track#', 2 => 'Video' },
1711
- clef => {
1712
- Name => 'CleanApertureDimensions',
1713
- Format => 'fixed32u',
1714
- Count => 3,
1715
- ValueConv => '$val =~ s/^.*? //; $val', # remove flags word
1716
- PrintConv => '$val =~ tr/ /x/; $val',
1717
- },
1718
- prof => {
1719
- Name => 'ProductionApertureDimensions',
1720
- Format => 'fixed32u',
1721
- Count => 3,
1722
- ValueConv => '$val =~ s/^.*? //; $val',
1723
- PrintConv => '$val =~ tr/ /x/; $val',
1724
- },
1725
- enof => {
1726
- Name => 'EncodedPixelsDimensions',
1727
- Format => 'fixed32u',
1728
- Count => 3,
1729
- ValueConv => '$val =~ s/^.*? //; $val',
1730
- PrintConv => '$val =~ tr/ /x/; $val',
1731
- },
1732
- );
1733
-
1734
- # item list atoms
1735
- # -> these atoms are unique, and contain one or more 'data' atoms
1736
- %Image::ExifTool::QuickTime::ItemList = (
1737
- PROCESS_PROC => \&ProcessMOV,
1738
- GROUPS => { 2 => 'Audio' },
1739
- NOTES => q{
1740
- As well as these tags, the 'mdta' handler uses numerical tag ID's which are
1741
- added dynamically to this table after processing the Meta Keys information.
1742
- },
1743
- # in this table, binary 1 and 2-byte "data"-type tags are interpreted as
1744
- # int8u and int16u. Multi-byte binary "data" tags are extracted as binary data
1745
- "\xa9ART" => 'Artist',
1746
- "\xa9alb" => 'Album',
1747
- "\xa9cmt" => 'Comment',
1748
- "\xa9com" => 'Composer',
1749
- "\xa9day" => { Name => 'Year', Groups => { 2 => 'Time' } },
1750
- "\xa9des" => 'Description', #4
1751
- "\xa9enc" => 'EncodedBy', #10
1752
- "\xa9gen" => 'Genre',
1753
- "\xa9grp" => 'Grouping',
1754
- "\xa9lyr" => 'Lyrics',
1755
- "\xa9nam" => 'Title',
1756
- # "\xa9st3" ? #10
1757
- "\xa9too" => 'Encoder',
1758
- "\xa9trk" => 'Track',
1759
- "\xa9wrt" => 'Composer',
1760
- '----' => {
1761
- Name => 'iTunesInfo',
1762
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::iTunesInfo' },
1763
- },
1764
- aART => 'AlbumArtist',
1765
- covr => 'CoverArt',
1766
- cpil => { #10
1767
- Name => 'Compilation',
1768
- PrintConv => { 0 => 'No', 1 => 'Yes' },
1769
- },
1770
- disk => {
1771
- Name => 'DiskNumber',
1772
- Format => 'undef', # (necessary to prevent decoding as string!)
1773
- ValueConv => 'length($val) >= 6 ? join(" of ",unpack("x2nn",$val)) : \$val',
1774
- },
1775
- pgap => { #10
1776
- Name => 'PlayGap',
1777
- PrintConv => {
1778
- 0 => 'Insert Gap',
1779
- 1 => 'No Gap',
1780
- },
1781
- },
1782
- tmpo => {
1783
- Name => 'BeatsPerMinute',
1784
- Format => 'int16u', # marked as boolean but really int16u in my sample
1785
- },
1786
- trkn => {
1787
- Name => 'TrackNumber',
1788
- Format => 'undef', # (necessary to prevent decoding as string!)
1789
- ValueConv => 'length($val) >= 6 ? join(" of ",unpack("x2nn",$val)) : \$val',
1790
- },
1791
- #
1792
- # Note: it is possible that the tags below are not being decoded properly
1793
- # because I don't have samples to verify many of these - PH
1794
- #
1795
- akID => { #10
1796
- Name => 'AppleStoreAccountType',
1797
- PrintConv => {
1798
- 0 => 'iTunes',
1799
- 1 => 'AOL',
1800
- },
1801
- },
1802
- albm => 'Album', #(ffmpeg source)
1803
- apID => 'AppleStoreAccount',
1804
- atID => { #10 (or TV series)
1805
- Name => 'AlbumTitleID',
1806
- Format => 'int32u',
1807
- },
1808
- auth => { Name => 'Author', Groups => { 2 => 'Author' } },
1809
- catg => 'Category', #7
1810
- cnID => { #10
1811
- Name => 'AppleStoreCatalogID',
1812
- Format => 'int32u',
1813
- },
1814
- cprt => { Name => 'Copyright', Groups => { 2 => 'Author' } },
1815
- dscp => 'Description',
1816
- desc => 'Description', #7
1817
- gnre => { #10
1818
- Name => 'Genre',
1819
- PrintConv => q{
1820
- return $val unless $val =~ /^\d+$/;
1821
- require Image::ExifTool::ID3;
1822
- Image::ExifTool::ID3::PrintGenre($val - 1); # note the "- 1"
1823
- },
1824
- },
1825
- egid => 'EpisodeGlobalUniqueID', #7
1826
- geID => { #10
1827
- Name => 'GenreID',
1828
- Format => 'int32u',
1829
- # 4005 = Kids
1830
- # 4010 = Teens
1831
- },
1832
- grup => 'Grouping', #10
1833
- hdvd => { #10
1834
- Name => 'HDVideo',
1835
- PrintConv => { 0 => 'No', 1 => 'Yes' },
1836
- },
1837
- keyw => 'Keyword', #7
1838
- ldes => 'LongDescription', #10
1839
- pcst => { #7
1840
- Name => 'Podcast',
1841
- PrintConv => { 0 => 'No', 1 => 'Yes' },
1842
- },
1843
- perf => 'Performer',
1844
- plID => { #10 (or TV season)
1845
- Name => 'PlayListID',
1846
- Format => 'int8u', # actually int64u, but split it up
1847
- },
1848
- purd => 'PurchaseDate', #7
1849
- purl => 'PodcastURL', #7
1850
- rtng => { #10
1851
- Name => 'Rating',
1852
- PrintConv => {
1853
- 0 => 'none',
1854
- 2 => 'Clean',
1855
- 4 => 'Explicit',
1856
- },
1857
- },
1858
- sfID => { #10
1859
- Name => 'AppleStoreCountry',
1860
- Format => 'int32u',
1861
- PrintConvColumns => 2,
1862
- PrintConv => {
1863
- 143460 => 'Australia',
1864
- 143445 => 'Austria',
1865
- 143446 => 'Belgium',
1866
- 143455 => 'Canada',
1867
- 143458 => 'Denmark',
1868
- 143447 => 'Finland',
1869
- 143442 => 'France',
1870
- 143443 => 'Germany',
1871
- 143448 => 'Greece',
1872
- 143449 => 'Ireland',
1873
- 143450 => 'Italy',
1874
- 143462 => 'Japan',
1875
- 143451 => 'Luxembourg',
1876
- 143452 => 'Netherlands',
1877
- 143461 => 'New Zealand',
1878
- 143457 => 'Norway',
1879
- 143453 => 'Portugal',
1880
- 143454 => 'Spain',
1881
- 143456 => 'Sweden',
1882
- 143459 => 'Switzerland',
1883
- 143444 => 'United Kingdom',
1884
- 143441 => 'United States',
1885
- },
1886
- },
1887
- soaa => 'SortAlbumArtist', #10
1888
- soal => 'SortAlbum', #10
1889
- soar => 'SortArtist', #10
1890
- soco => 'SortComposer', #10
1891
- sonm => 'SortName', #10
1892
- sosn => 'SortShow', #10
1893
- stik => { #10
1894
- Name => 'MediaType',
1895
- PrintConvColumns => 2,
1896
- PrintConv => { #(http://weblog.xanga.com/gryphondwb/615474010/iphone-ringtones---what-did-itunes-741-really-do.html)
1897
- 0 => 'Movie',
1898
- 1 => 'Normal (Music)',
1899
- 2 => 'Audiobook',
1900
- 5 => 'Whacked Bookmark',
1901
- 6 => 'Music Video',
1902
- 9 => 'Short Film',
1903
- 10 => 'TV Show',
1904
- 11 => 'Booklet',
1905
- 14 => 'Ringtone',
1906
- 21 => 'Podcast', #15
1907
- },
1908
- },
1909
- titl => 'Title',
1910
- tven => 'TVEpisodeID', #7
1911
- tves => { #7/10
1912
- Name => 'TVEpisode',
1913
- Format => 'int32u',
1914
- },
1915
- tvnn => 'TVNetworkName', #7
1916
- tvsh => 'TVShow', #10
1917
- tvsn => { #7/10
1918
- Name => 'TVSeason',
1919
- Format => 'int32u',
1920
- },
1921
- yrrc => 'Year', #(ffmpeg source)
1922
- itnu => { #PH (iTunes 10.5)
1923
- Name => 'iTunesU',
1924
- Description => 'iTunes U',
1925
- PrintConv => { 0 => 'No', 1 => 'Yes' },
1926
- },
1927
- );
1928
-
1929
- # item list keys (ref PH)
1930
- %Image::ExifTool::QuickTime::Keys = (
1931
- PROCESS_PROC => \&Image::ExifTool::QuickTime::ProcessKeys,
1932
- VARS => { LONG_TAGS => 1 },
1933
- NOTES => q{
1934
- This directory contains a list of key names which are used to decode
1935
- ItemList tags written by the "mdta" handler. The prefix of
1936
- "com.apple.quicktime." has been removed from all TagID's below.
1937
- },
1938
- version => 'Version',
1939
- album => 'Album',
1940
- artist => { },
1941
- artwork => { },
1942
- author => { Name => 'Author', Groups => { 2 => 'Author' } },
1943
- comment => { },
1944
- copyright => { Name => 'Copyright', Groups => { 2 => 'Author' } },
1945
- creationdate=> {
1946
- Name => 'CreationDate',
1947
- Groups => { 2 => 'Time' },
1948
- ValueConv => q{
1949
- require Image::ExifTool::XMP;
1950
- $val = Image::ExifTool::XMP::ConvertXMPDate($val,1);
1951
- $val =~ s/([-+]\d{2})(\d{2})$/$1:$2/; # add colon to timezone if necessary
1952
- return $val;
1953
- },
1954
- PrintConv => '$self->ConvertDateTime($val)',
1955
- },
1956
- description => { },
1957
- director => { },
1958
- genre => { },
1959
- information => { },
1960
- keywords => { },
1961
- make => { Name => 'Make', Groups => { 2 => 'Camera' } },
1962
- model => { Name => 'Model', Groups => { 2 => 'Camera' } },
1963
- publisher => { },
1964
- software => { },
1965
- year => { Groups => { 2 => 'Time' } },
1966
- 'camera.identifier' => 'CameraIdentifier', # (iPhone 4)
1967
- 'camera.framereadouttimeinmicroseconds' => { # (iPhone 4)
1968
- Name => 'FrameReadoutTime',
1969
- ValueConv => '$val * 1e-6',
1970
- PrintConv => '$val * 1e6 . " microseconds"',
1971
- },
1972
- 'location.ISO6709' => {
1973
- Name => 'GPSCoordinates',
1974
- Groups => { 2 => 'Location' },
1975
- ValueConv => \&ConvertISO6709,
1976
- PrintConv => \&PrintGPSCoordinates,
1977
- },
1978
- 'location.name' => { Name => 'LocationName', Groups => { 2 => 'Location' } },
1979
- 'location.body' => { Name => 'LocationBody', Groups => { 2 => 'Location' } },
1980
- 'location.note' => { Name => 'LocationNote', Groups => { 2 => 'Location' } },
1981
- 'location.role' => {
1982
- Name => 'LocationRole',
1983
- Groups => { 2 => 'Location' },
1984
- PrintConv => {
1985
- 0 => 'Shooting Location',
1986
- 1 => 'Real Location',
1987
- 2 => 'Fictional Location',
1988
- },
1989
- },
1990
- 'location.date' => {
1991
- Name => 'LocationDate',
1992
- Groups => { 2 => 'Time' },
1993
- ValueConv => q{
1994
- require Image::ExifTool::XMP;
1995
- $val = Image::ExifTool::XMP::ConvertXMPDate($val);
1996
- $val =~ s/([-+]\d{2})(\d{2})$/$1:$2/; # add colon to timezone if necessary
1997
- return $val;
1998
- },
1999
- PrintConv => '$self->ConvertDateTime($val)',
2000
- },
2001
- 'direction.facing' => { Name => 'CameraDirection', Groups => { 2 => 'Location' } },
2002
- 'direction.motion' => { Name => 'CameraMotion', Groups => { 2 => 'Location' } },
2003
- 'location.body' => { Name => 'LocationBody', Groups => { 2 => 'Location' } },
2004
- 'player.version' => 'PlayerVersion',
2005
- 'player.movie.visual.brightness'=> 'Brightness',
2006
- 'player.movie.visual.color' => 'Color',
2007
- 'player.movie.visual.tint' => 'Tint',
2008
- 'player.movie.visual.contrast' => 'Contrast',
2009
- 'player.movie.audio.gain' => 'AudioGain',
2010
- 'player.movie.audio.treble' => 'Trebel',
2011
- 'player.movie.audio.bass' => 'Bass',
2012
- 'player.movie.audio.balance' => 'Balance',
2013
- 'player.movie.audio.pitchshift' => 'PitchShift',
2014
- 'player.movie.audio.mute' => {
2015
- Name => 'Mute',
2016
- Format => 'int8u',
2017
- PrintConv => { 0 => 'Off', 1 => 'On' },
2018
- },
2019
- 'rating.user' => 'UserRating', # (Canon ELPH 510 HS)
2020
- 'Encoded_With' => 'EncodedWith',
2021
- );
2022
-
2023
- # iTunes info ('----') atoms
2024
- %Image::ExifTool::QuickTime::iTunesInfo = (
2025
- PROCESS_PROC => \&ProcessMOV,
2026
- GROUPS => { 2 => 'Audio' },
2027
- NOTES => q{
2028
- ExifTool will extract any iTunesInfo tags that exist, even if they are not
2029
- defined in this table.
2030
- },
2031
- # 'mean'/'name'/'data' atoms form a triplet, but unfortunately
2032
- # I haven't been able to find any documentation on this.
2033
- # 'mean' is normally 'com.apple.iTunes'
2034
- mean => {
2035
- Name => 'Mean',
2036
- # the 'Triplet' flag tells ProcessMOV() to generate
2037
- # a single tag from the mean/name/data triplet
2038
- Triplet => 1,
2039
- Hidden => 1,
2040
- },
2041
- name => {
2042
- Name => 'Name',
2043
- Triplet => 1,
2044
- Hidden => 1,
2045
- },
2046
- data => {
2047
- Name => 'Data',
2048
- Triplet => 1,
2049
- Hidden => 1,
2050
- },
2051
- # the tag ID's below are composed from "mean/name",
2052
- # but "mean/" is omitted if it is "com.apple.iTunes/":
2053
- 'iTunMOVI' => {
2054
- Name => 'iTunMOVI',
2055
- SubDirectory => { TagTable => 'Image::ExifTool::PLIST::Main' },
2056
- },
2057
- 'tool' => {
2058
- Name => 'iTunTool',
2059
- Description => 'iTunTool',
2060
- Format => 'int32u',
2061
- PrintConv => 'sprintf("0x%.8x",$val)',
2062
- },
2063
- 'iTunEXTC' => {
2064
- Name => 'ContentRating',
2065
- Notes => 'standard | rating | score | reasons',
2066
- # ie. 'us-tv|TV-14|500|V', 'mpaa|PG-13|300|For violence and sexuality'
2067
- # (see http://shadowofged.blogspot.ca/2008/06/itunes-content-ratings.html)
2068
- },
2069
- 'iTunNORM' => {
2070
- Name => 'VolumeNormalization',
2071
- PrintConv => '$val=~s/ 0+(\w)/ $1/g; $val=~s/^\s+//; $val',
2072
- },
2073
- 'iTunSMPB' => {
2074
- Name => 'iTunSMPB',
2075
- Description => 'iTunSMPB',
2076
- # hex format, similar to iTunNORM, but 12 words instead of 10,
2077
- # and 4th word is 16 hex digits (all others are 8)
2078
- # (gives AAC encoder delay, ref http://code.google.com/p/l-smash/issues/detail?id=1)
2079
- PrintConv => '$val=~s/ 0+(\w)/ $1/g; $val=~s/^\s+//; $val',
2080
- },
2081
- # (CDDB = Compact Disc DataBase)
2082
- # iTunes_CDDB_1 = <CDDB1 disk ID>+<# tracks>+<logical block address for each track>...
2083
- 'iTunes_CDDB_1' => 'CDDB1Info',
2084
- 'iTunes_CDDB_TrackNumber' => 'CDDBTrackNumber',
2085
- 'Encoding Params' => {
2086
- Name => 'EncodingParams',
2087
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::EncodingParams' },
2088
- }
2089
- # also heard about 'iTunPGAP', but I haven't seen a sample
2090
- );
2091
-
2092
- # iTunes audio encoding parameters
2093
- # ref https://developer.apple.com/library/mac/#documentation/MusicAudio/Reference/AudioCodecServicesRef/Reference/reference.html
2094
- %Image::ExifTool::QuickTime::EncodingParams = (
2095
- PROCESS_PROC => \&ProcessEncodingParams,
2096
- GROUPS => { 2 => 'Audio' },
2097
- # (I have commented out the ones that don't have integer values because they
2098
- # probably don't appear, and definitly wouldn't work with current decoding - PH)
2099
-
2100
- # global codec properties
2101
- #'lnam' => 'AudioCodecName',
2102
- #'lmak' => 'AudioCodecManufacturer',
2103
- #'lfor' => 'AudioCodecFormat',
2104
- 'vpk?' => 'AudioHasVariablePacketByteSizes',
2105
- #'ifm#' => 'AudioSupportedInputFormats',
2106
- #'ofm#' => 'AudioSupportedOutputFormats',
2107
- #'aisr' => 'AudioAvailableInputSampleRates',
2108
- #'aosr' => 'AudioAvailableOutputSampleRates',
2109
- 'abrt' => 'AudioAvailableBitRateRange',
2110
- 'mnip' => 'AudioMinimumNumberInputPackets',
2111
- 'mnop' => 'AudioMinimumNumberOutputPackets',
2112
- 'cmnc' => 'AudioAvailableNumberChannels',
2113
- 'lmrc' => 'AudioDoesSampleRateConversion',
2114
- #'aicl' => 'AudioAvailableInputChannelLayoutTags',
2115
- #'aocl' => 'AudioAvailableOutputChannelLayoutTags',
2116
- #'if4o' => 'AudioInputFormatsForOutputFormat',
2117
- #'of4i' => 'AudioOutputFormatsForInputFormat',
2118
- #'acfi' => 'AudioFormatInfo',
2119
-
2120
- # instance codec properties
2121
- 'tbuf' => 'AudioInputBufferSize',
2122
- 'pakf' => 'AudioPacketFrameSize',
2123
- 'pakb' => 'AudioMaximumPacketByteSize',
2124
- #'ifmt' => 'AudioCurrentInputFormat',
2125
- #'ofmt' => 'AudioCurrentOutputFormat',
2126
- #'kuki' => 'AudioMagicCookie',
2127
- 'ubuf' => 'AudioUsedInputBufferSize',
2128
- 'init' => 'AudioIsInitialized',
2129
- 'brat' => 'AudioCurrentTargetBitRate',
2130
- #'cisr' => 'AudioCurrentInputSampleRate',
2131
- #'cosr' => 'AudioCurrentOutputSampleRate',
2132
- 'srcq' => 'AudioQualitySetting',
2133
- #'brta' => 'AudioApplicableBitRateRange',
2134
- #'isra' => 'AudioApplicableInputSampleRates',
2135
- #'osra' => 'AudioApplicableOutputSampleRates',
2136
- 'pad0' => 'AudioZeroFramesPadded',
2137
- 'prmm' => 'AudioCodecPrimeMethod',
2138
- #'prim' => 'AudioCodecPrimeInfo',
2139
- #'icl ' => 'AudioInputChannelLayout',
2140
- #'ocl ' => 'AudioOutputChannelLayout',
2141
- #'acs ' => 'AudioCodecSettings',
2142
- #'acfl' => 'AudioCodecFormatList',
2143
- 'acbf' => 'AudioBitRateControlMode',
2144
- 'vbrq' => 'AudioVBRQuality',
2145
- 'mdel' => 'AudioMinimumDelayMode',
2146
-
2147
- # deprecated
2148
- 'pakd' => 'AudioRequiresPacketDescription',
2149
- #'brt#' => 'AudioAvailableBitRates',
2150
- 'acef' => 'AudioExtendFrequencies',
2151
- 'ursr' => 'AudioUseRecommendedSampleRate',
2152
- 'oppr' => 'AudioOutputPrecedence',
2153
- #'loud' => 'AudioCurrentLoudnessStatistics',
2154
-
2155
- # others
2156
- 'vers' => 'AudioEncodingParamsVersion', #PH
2157
- 'cdcv' => { #PH
2158
- Name => 'AudioComponentVersion',
2159
- ValueConv => 'join ".", unpack("ncc", pack("N",$val))',
2160
- },
2161
- );
2162
-
2163
- # print to video data block
2164
- %Image::ExifTool::QuickTime::Video = (
2165
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
2166
- GROUPS => { 2 => 'Video' },
2167
- 0 => {
2168
- Name => 'DisplaySize',
2169
- PrintConv => {
2170
- 0 => 'Normal',
2171
- 1 => 'Double Size',
2172
- 2 => 'Half Size',
2173
- 3 => 'Full Screen',
2174
- 4 => 'Current Size',
2175
- },
2176
- },
2177
- 6 => {
2178
- Name => 'SlideShow',
2179
- PrintConv => {
2180
- 0 => 'No',
2181
- 1 => 'Yes',
2182
- },
2183
- },
2184
- );
2185
-
2186
- # 'hnti' atoms
2187
- %Image::ExifTool::QuickTime::HintInfo = (
2188
- PROCESS_PROC => \&ProcessMOV,
2189
- GROUPS => { 2 => 'Video' },
2190
- 'rtp ' => {
2191
- Name => 'RealtimeStreamingProtocol',
2192
- PrintConv => '$val=~s/^sdp /(SDP) /; $val',
2193
- },
2194
- 'sdp ' => 'StreamingDataProtocol',
2195
- );
2196
-
2197
- # 'hinf' atoms
2198
- %Image::ExifTool::QuickTime::HintTrackInfo = (
2199
- PROCESS_PROC => \&ProcessMOV,
2200
- GROUPS => { 2 => 'Video' },
2201
- trpY => { Name => 'TotalBytes', Format => 'int64u' }, #(documented)
2202
- trpy => { Name => 'TotalBytes', Format => 'int64u' }, #(observed)
2203
- totl => { Name => 'TotalBytes', Format => 'int32u' },
2204
- nump => { Name => 'NumPackets', Format => 'int64u' },
2205
- npck => { Name => 'NumPackets', Format => 'int32u' },
2206
- tpyl => { Name => 'TotalBytesNoRTPHeaders', Format => 'int64u' },
2207
- tpaY => { Name => 'TotalBytesNoRTPHeaders', Format => 'int32u' }, #(documented)
2208
- tpay => { Name => 'TotalBytesNoRTPHeaders', Format => 'int32u' }, #(observed)
2209
- maxr => {
2210
- Name => 'MaxDataRate',
2211
- Format => 'int32u',
2212
- Count => 2,
2213
- PrintConv => 'my @a=split(" ",$val);sprintf("%d bytes in %.3f s",$a[1],$a[0]/1000)',
2214
- },
2215
- dmed => { Name => 'MediaTrackBytes', Format => 'int64u' },
2216
- dimm => { Name => 'ImmediateDataBytes', Format => 'int64u' },
2217
- drep => { Name => 'RepeatedDataBytes', Format => 'int64u' },
2218
- tmin => {
2219
- Name => 'MinTransmissionTime',
2220
- Format => 'int32u',
2221
- PrintConv => 'sprintf("%.3f s",$val/1000)',
2222
- },
2223
- tmax => {
2224
- Name => 'MaxTransmissionTime',
2225
- Format => 'int32u',
2226
- PrintConv => 'sprintf("%.3f s",$val/1000)',
2227
- },
2228
- pmax => { Name => 'LargestPacketSize', Format => 'int32u' },
2229
- dmax => {
2230
- Name => 'LargestPacketDuration',
2231
- Format => 'int32u',
2232
- PrintConv => 'sprintf("%.3f s",$val/1000)',
2233
- },
2234
- payt => {
2235
- Name => 'PayloadType',
2236
- Format => 'undef', # (necessary to prevent decoding as string!)
2237
- ValueConv => 'unpack("N",$val) . " " . substr($val, 5)',
2238
- PrintConv => '$val=~s/ /, /;$val',
2239
- },
2240
- );
2241
-
2242
- # MP4 media box (ref 5)
2243
- %Image::ExifTool::QuickTime::Media = (
2244
- PROCESS_PROC => \&ProcessMOV,
2245
- WRITE_PROC => \&WriteQuickTime,
2246
- GROUPS => { 1 => 'Track#', 2 => 'Video' },
2247
- NOTES => 'MP4 media box.',
2248
- mdhd => {
2249
- Name => 'MediaHeader',
2250
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::MediaHeader' },
2251
- },
2252
- hdlr => {
2253
- Name => 'Handler',
2254
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Handler' },
2255
- },
2256
- minf => {
2257
- Name => 'MediaInfo',
2258
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::MediaInfo' },
2259
- },
2260
- );
2261
-
2262
- # MP4 media header box (ref 5)
2263
- %Image::ExifTool::QuickTime::MediaHeader = (
2264
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
2265
- WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
2266
- GROUPS => { 1 => 'Track#', 2 => 'Video' },
2267
- FORMAT => 'int32u',
2268
- DATAMEMBER => [ 0, 1, 2, 3, 4 ],
2269
- 0 => {
2270
- Name => 'MediaHeaderVersion',
2271
- RawConv => '$$self{MediaHeaderVersion} = $val',
2272
- },
2273
- 1 => {
2274
- Name => 'MediaCreateDate',
2275
- Groups => { 2 => 'Time' },
2276
- %timeInfo,
2277
- # this is int64u if MediaHeaderVersion == 1 (ref 5/13)
2278
- Hook => '$$self{MediaHeaderVersion} and $format = "int64u", $varSize += 4',
2279
- },
2280
- 2 => {
2281
- Name => 'MediaModifyDate',
2282
- Groups => { 2 => 'Time' },
2283
- %timeInfo,
2284
- # this is int64u if MediaHeaderVersion == 1 (ref 5/13)
2285
- Hook => '$$self{MediaHeaderVersion} and $format = "int64u", $varSize += 4',
2286
- },
2287
- 3 => {
2288
- Name => 'MediaTimeScale',
2289
- RawConv => '$$self{MediaTS} = $val',
2290
- },
2291
- 4 => {
2292
- Name => 'MediaDuration',
2293
- RawConv => '$$self{MediaTS} ? $val / $$self{MediaTS} : $val',
2294
- PrintConv => '$$self{MediaTS} ? ConvertDuration($val) : $val',
2295
- # this is int64u if MediaHeaderVersion == 1 (ref 5/13)
2296
- Hook => '$$self{MediaHeaderVersion} and $format = "int64u", $varSize += 4',
2297
- },
2298
- 5 => {
2299
- Name => 'MediaLanguageCode',
2300
- Format => 'int16u',
2301
- RawConv => '$val ? $val : undef',
2302
- # allow both Macintosh (for MOV files) and ISO (for MP4 files) language codes
2303
- ValueConv => '$val < 0x400 ? $val : pack "C*", map { (($val>>$_)&0x1f)+0x60 } 10, 5, 0',
2304
- PrintConv => q{
2305
- return $val unless $val =~ /^\d+$/;
2306
- require Image::ExifTool::Font;
2307
- return $Image::ExifTool::Font::ttLang{Macintosh}{$val} || "Unknown ($val)";
2308
- },
2309
- },
2310
- );
2311
-
2312
- # MP4 media information box (ref 5)
2313
- %Image::ExifTool::QuickTime::MediaInfo = (
2314
- PROCESS_PROC => \&ProcessMOV,
2315
- GROUPS => { 1 => 'Track#', 2 => 'Video' },
2316
- NOTES => 'MP4 media info box.',
2317
- vmhd => {
2318
- Name => 'VideoHeader',
2319
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::VideoHeader' },
2320
- },
2321
- smhd => {
2322
- Name => 'AudioHeader',
2323
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::AudioHeader' },
2324
- },
2325
- hmhd => {
2326
- Name => 'HintHeader',
2327
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::HintHeader' },
2328
- },
2329
- nmhd => {
2330
- Name => 'NullMediaHeader',
2331
- Flags => ['Binary','Unknown'],
2332
- },
2333
- dinf => {
2334
- Name => 'DataInfo',
2335
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::DataInfo' },
2336
- },
2337
- gmhd => {
2338
- Name => 'GenMediaHeader',
2339
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::GenMediaHeader' },
2340
- },
2341
- hdlr => { #PH
2342
- Name => 'Handler',
2343
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Handler' },
2344
- },
2345
- stbl => {
2346
- Name => 'SampleTable',
2347
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::SampleTable' },
2348
- },
2349
- );
2350
-
2351
- # MP4 video media header (ref 5)
2352
- %Image::ExifTool::QuickTime::VideoHeader = (
2353
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
2354
- GROUPS => { 2 => 'Video' },
2355
- NOTES => 'MP4 video media header.',
2356
- FORMAT => 'int16u',
2357
- 2 => {
2358
- Name => 'GraphicsMode',
2359
- PrintHex => 1,
2360
- SeparateTable => 'GraphicsMode',
2361
- PrintConv => \%graphicsMode,
2362
- },
2363
- 3 => { Name => 'OpColor', Format => 'int16u[3]' },
2364
- );
2365
-
2366
- # MP4 audio media header (ref 5)
2367
- %Image::ExifTool::QuickTime::AudioHeader = (
2368
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
2369
- GROUPS => { 2 => 'Audio' },
2370
- NOTES => 'MP4 audio media header.',
2371
- FORMAT => 'int16u',
2372
- 2 => { Name => 'Balance', Format => 'fixed16s' },
2373
- );
2374
-
2375
- # MP4 hint media header (ref 5)
2376
- %Image::ExifTool::QuickTime::HintHeader = (
2377
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
2378
- NOTES => 'MP4 hint media header.',
2379
- FORMAT => 'int16u',
2380
- 2 => 'MaxPDUSize',
2381
- 3 => 'AvgPDUSize',
2382
- 4 => { Name => 'MaxBitrate', Format => 'int32u', PrintConv => 'ConvertBitrate($val)' },
2383
- 6 => { Name => 'AvgBitrate', Format => 'int32u', PrintConv => 'ConvertBitrate($val)' },
2384
- );
2385
-
2386
- # MP4 sample table box (ref 5)
2387
- %Image::ExifTool::QuickTime::SampleTable = (
2388
- PROCESS_PROC => \&ProcessMOV,
2389
- GROUPS => { 2 => 'Video' },
2390
- NOTES => 'MP4 sample table box.',
2391
- stsd => [
2392
- {
2393
- Name => 'AudioSampleDesc',
2394
- Condition => '$$self{HandlerType} and $$self{HandlerType} eq "soun"',
2395
- SubDirectory => {
2396
- TagTable => 'Image::ExifTool::QuickTime::AudioSampleDesc',
2397
- Start => 8, # skip version number and count
2398
- },
2399
- },{
2400
- Name => 'VideoSampleDesc',
2401
- Condition => '$$self{HandlerType} and $$self{HandlerType} eq "vide"',
2402
- SubDirectory => {
2403
- TagTable => 'Image::ExifTool::QuickTime::ImageDesc',
2404
- Start => 8, # skip version number and count
2405
- },
2406
- },{
2407
- Name => 'HintSampleDesc',
2408
- Condition => '$$self{HandlerType} and $$self{HandlerType} eq "hint"',
2409
- SubDirectory => {
2410
- TagTable => 'Image::ExifTool::QuickTime::HintSampleDesc',
2411
- Start => 8, # skip version number and count
2412
- },
2413
- },{
2414
- Name => 'OtherSampleDesc',
2415
- SubDirectory => {
2416
- TagTable => 'Image::ExifTool::QuickTime::OtherSampleDesc',
2417
- Start => 8, # skip version number and count
2418
- },
2419
- },
2420
- # (Note: "alis" HandlerType handled by the parent audio or video handler)
2421
- ],
2422
- stts => [ # decoding time-to-sample table
2423
- {
2424
- Name => 'VideoFrameRate',
2425
- Notes => 'average rate calculated from time-to-sample table for video media',
2426
- Condition => '$$self{HandlerType} and $$self{HandlerType} eq "vide"',
2427
- Format => 'undef', # (necessary to prevent decoding as string!)
2428
- # (must be RawConv so appropriate MediaTS is used in calculation)
2429
- RawConv => 'Image::ExifTool::QuickTime::CalcSampleRate($self, \$val)',
2430
- PrintConv => 'int($val * 1000 + 0.5) / 1000',
2431
- },
2432
- {
2433
- Name => 'TimeToSampleTable',
2434
- Flags => ['Binary','Unknown'],
2435
- },
2436
- ],
2437
- ctts => {
2438
- Name => 'CompositionTimeToSample',
2439
- Flags => ['Binary','Unknown'],
2440
- },
2441
- stsc => {
2442
- Name => 'SampleToChunk',
2443
- Flags => ['Binary','Unknown'],
2444
- },
2445
- stsz => {
2446
- Name => 'SampleSizes',
2447
- Flags => ['Binary','Unknown'],
2448
- },
2449
- stz2 => {
2450
- Name => 'CompactSampleSizes',
2451
- Flags => ['Binary','Unknown'],
2452
- },
2453
- stco => {
2454
- Name => 'ChunkOffset',
2455
- Flags => ['Binary','Unknown'],
2456
- },
2457
- co64 => {
2458
- Name => 'ChunkOffset64',
2459
- Flags => ['Binary','Unknown'],
2460
- },
2461
- stss => {
2462
- Name => 'SyncSampleTable',
2463
- Flags => ['Binary','Unknown'],
2464
- },
2465
- stsh => {
2466
- Name => 'ShadowSyncSampleTable',
2467
- Flags => ['Binary','Unknown'],
2468
- },
2469
- padb => {
2470
- Name => 'SamplePaddingBits',
2471
- Flags => ['Binary','Unknown'],
2472
- },
2473
- stdp => {
2474
- Name => 'SampleDegradationPriority',
2475
- Flags => ['Binary','Unknown'],
2476
- },
2477
- sdtp => {
2478
- Name => 'IdependentAndDisposableSamples',
2479
- Flags => ['Binary','Unknown'],
2480
- },
2481
- sbgp => {
2482
- Name => 'SampleToGroup',
2483
- Flags => ['Binary','Unknown'],
2484
- },
2485
- sgpd => {
2486
- Name => 'SampleGroupDescription',
2487
- Flags => ['Binary','Unknown'],
2488
- },
2489
- subs => {
2490
- Name => 'Sub-sampleInformation',
2491
- Flags => ['Binary','Unknown'],
2492
- },
2493
- cslg => {
2494
- Name => 'CompositionToDecodeTimelineMapping',
2495
- Flags => ['Binary','Unknown'],
2496
- },
2497
- );
2498
-
2499
- # MP4 audio sample description box (ref 5/AtomicParsley 0.9.4 parsley.cpp)
2500
- %Image::ExifTool::QuickTime::AudioSampleDesc = (
2501
- PROCESS_PROC => \&ProcessHybrid,
2502
- VARS => { ID_LABEL => 'ID/Index' },
2503
- GROUPS => { 2 => 'Audio' },
2504
- NOTES => q{
2505
- MP4 audio sample description. This hybrid atom contains both data and child
2506
- atoms.
2507
- },
2508
- 4 => {
2509
- Name => 'AudioFormat',
2510
- Format => 'undef[4]',
2511
- RawConv => q{
2512
- $$self{AudioFormat} = $val;
2513
- return undef unless $val =~ /^[\w ]{4}$/i;
2514
- # check for protected audio format
2515
- $self->OverrideFileType('M4P') if $val eq 'drms' and $$self{VALUE}{FileType} eq 'M4A';
2516
- return $val;
2517
- },
2518
- },
2519
- 20 => { #PH
2520
- Name => 'AudioVendorID',
2521
- Condition => '$$self{AudioFormat} ne "mp4s"',
2522
- Format => 'undef[4]',
2523
- RawConv => '$val eq "\0\0\0\0" ? undef : $val',
2524
- PrintConv => \%vendorID,
2525
- SeparateTable => 'VendorID',
2526
- },
2527
- 24 => { Name => 'AudioChannels', Format => 'int16u' },
2528
- 26 => { Name => 'AudioBitsPerSample', Format => 'int16u' },
2529
- 32 => { Name => 'AudioSampleRate', Format => 'fixed32u' },
2530
- #
2531
- # Observed offsets for child atoms of various AudioFormat types:
2532
- #
2533
- # AudioFormat Offset Child atoms
2534
- # ----------- ------ ----------------
2535
- # mp4a 52 * wave, chan, esds
2536
- # in24 52 wave, chan
2537
- # "ms\0\x11" 52 wave
2538
- # sowt 52 chan
2539
- # mp4a 36 * esds, pinf
2540
- # drms 36 esds, sinf
2541
- # samr 36 damr
2542
- # alac 36 alac
2543
- #
2544
- # (* child atoms found at different offsets in mp4a)
2545
- #
2546
- pinf => {
2547
- Name => 'PurchaseInfo',
2548
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::ProtectionInfo' },
2549
- },
2550
- sinf => { # "protection scheme information"
2551
- Name => 'ProtectionInfo', #3
2552
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::ProtectionInfo' },
2553
- },
2554
- # chan - 16/36 bytes
2555
- # esds - 31/40/42/43 bytes - ES descriptor (ref 3)
2556
- damr => { #3
2557
- Name => 'DecodeConfig',
2558
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::DecodeConfig' },
2559
- },
2560
- wave => {
2561
- Name => 'Wave',
2562
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Wave' },
2563
- },
2564
- # alac - 28 bytes
2565
- );
2566
-
2567
- # AMR decode config box (ref 3)
2568
- %Image::ExifTool::QuickTime::DecodeConfig = (
2569
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
2570
- GROUPS => { 2 => 'Audio' },
2571
- 0 => {
2572
- Name => 'EncoderVendor',
2573
- Format => 'undef[4]',
2574
- },
2575
- 4 => 'EncoderVersion',
2576
- # 5 - int16u - packet modes
2577
- # 7 - int8u - number of packet mode changes
2578
- # 8 - int8u - bytes per packet
2579
- );
2580
-
2581
- %Image::ExifTool::QuickTime::ProtectionInfo = (
2582
- PROCESS_PROC => \&ProcessMOV,
2583
- GROUPS => { 2 => 'Audio' },
2584
- NOTES => 'Child atoms found in "sinf" and/or "pinf" atoms.',
2585
- frma => 'OriginalFormat',
2586
- # imif - IPMP information
2587
- schm => {
2588
- Name => 'SchemeType',
2589
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::SchemeType' },
2590
- },
2591
- schi => {
2592
- Name => 'SchemeInfo',
2593
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::SchemeInfo' },
2594
- },
2595
- # skcr
2596
- # enda
2597
- );
2598
-
2599
- %Image::ExifTool::QuickTime::Wave = (
2600
- PROCESS_PROC => \&ProcessMOV,
2601
- frma => 'PurchaseFileFormat',
2602
- # "ms\0\x11" - 20 bytes
2603
- );
2604
-
2605
- # scheme type atom
2606
- # ref http://xhelmboyx.tripod.com/formats/mp4-layout.txt
2607
- %Image::ExifTool::QuickTime::SchemeType = (
2608
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
2609
- GROUPS => { 2 => 'Audio' },
2610
- # 0 - 4 bytes version
2611
- 4 => { Name => 'SchemeType', Format => 'undef[4]' },
2612
- 8 => { Name => 'SchemeVersion', Format => 'int16u' },
2613
- 10 => { Name => 'SchemeURL', Format => 'string[$size-10]' },
2614
- );
2615
-
2616
- %Image::ExifTool::QuickTime::SchemeInfo = (
2617
- PROCESS_PROC => \&ProcessMOV,
2618
- GROUPS => { 2 => 'Audio' },
2619
- user => {
2620
- Name => 'UserID',
2621
- Groups => { 2 => 'Author' },
2622
- ValueConv => '"0x" . unpack("H*",$val)',
2623
- },
2624
- cert => { # ref http://www.onvif.org/specs/stream/ONVIF-ExportFileFormat-Spec-v100.pdf
2625
- Name => 'Certificate',
2626
- ValueConv => '"0x" . unpack("H*",$val)',
2627
- },
2628
- 'key ' => {
2629
- Name => 'KeyID',
2630
- ValueConv => '"0x" . unpack("H*",$val)',
2631
- },
2632
- iviv => {
2633
- Name => 'InitializationVector',
2634
- ValueConv => 'unpack("H*",$val)',
2635
- },
2636
- righ => {
2637
- Name => 'Rights',
2638
- Groups => { 2 => 'Author' },
2639
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Rights' },
2640
- },
2641
- name => { Name => 'UserName', Groups => { 2 => 'Author' } },
2642
- # chtb
2643
- # priv - private data
2644
- # sign
2645
- # adkm - Adobe DRM key management system (ref http://download.macromedia.com/f4v/video_file_format_spec_v10_1.pdf)
2646
- # iKMS
2647
- # iSFM
2648
- # iSLT
2649
- );
2650
-
2651
- %Image::ExifTool::QuickTime::Rights = (
2652
- PROCESS_PROC => \&ProcessRights,
2653
- GROUPS => { 2 => 'Audio' },
2654
- veID => 'ItemVendorID', #PH ("VendorID" ref 19)
2655
- plat => 'Platform', #18?
2656
- aver => 'VersionRestrictions', #19 ("appversion?" ref 18)
2657
- tran => 'TransactionID', #18
2658
- song => 'ItemID', #19 ("appid" ref 18)
2659
- tool => {
2660
- Name => 'ItemTool', #PH (guess) ("itunes build?" ref 18)
2661
- Format => 'string',
2662
- },
2663
- medi => 'MediaFlags', #PH (?)
2664
- mode => 'ModeFlags', #PH (?) 0x04 is HD flag (https://compilr.com/heksesang/requiem-mac/UnDrm.java)
2665
- );
2666
-
2667
- # MP4 hint sample description box (ref 5)
2668
- # (ref https://developer.apple.com/library/mac/documentation/QuickTime/QTFF/QTFFChap3/qtff3.html#//apple_ref/doc/uid/TP40000939-CH205-SW1)
2669
- %Image::ExifTool::QuickTime::HintSampleDesc = (
2670
- PROCESS_PROC => \&ProcessHybrid,
2671
- VARS => { ID_LABEL => 'ID/Index' },
2672
- NOTES => 'MP4 hint sample description.',
2673
- 4 => { Name => 'HintFormat', Format => 'undef[4]' },
2674
- # 14 - int16u DataReferenceIndex
2675
- 16 => { Name => 'HintTrackVersion', Format => 'int16u' },
2676
- # 18 - int16u LastCompatibleHintTrackVersion
2677
- 20 => { Name => 'MaxPacketSize', Format => 'int32u' },
2678
- #
2679
- # Observed offsets for child atoms of various HintFormat types:
2680
- #
2681
- # HintFormat Offset Child atoms
2682
- # ----------- ------ ----------------
2683
- # "rtp " 24 tims
2684
- #
2685
- tims => { Name => 'RTPTimeScale', Format => 'int32u' },
2686
- tsro => { Name => 'TimestampRandomOffset', Format => 'int32u' },
2687
- snro => { Name => 'SequenceNumberRandomOffset', Format => 'int32u' },
2688
- );
2689
-
2690
- # MP4 generic sample description box
2691
- %Image::ExifTool::QuickTime::OtherSampleDesc = (
2692
- PROCESS_PROC => \&ProcessHybrid,
2693
- 4 => { Name => 'OtherFormat', Format => 'undef[4]' },
2694
- #
2695
- # Observed offsets for child atoms of various OtherFormat types:
2696
- #
2697
- # OtherFormat Offset Child atoms
2698
- # ----------- ------ ----------------
2699
- # avc1 86 avcC
2700
- # mp4a 36 esds
2701
- # mp4s 16 esds
2702
- # tmcd 34 name
2703
- #
2704
- );
2705
-
2706
- # MP4 data information box (ref 5)
2707
- %Image::ExifTool::QuickTime::DataInfo = (
2708
- PROCESS_PROC => \&ProcessMOV,
2709
- NOTES => 'MP4 data information box.',
2710
- dref => {
2711
- Name => 'DataRef',
2712
- SubDirectory => {
2713
- TagTable => 'Image::ExifTool::QuickTime::DataRef',
2714
- Start => 8,
2715
- },
2716
- },
2717
- );
2718
-
2719
- # Generic media header
2720
- %Image::ExifTool::QuickTime::GenMediaHeader = (
2721
- PROCESS_PROC => \&ProcessMOV,
2722
- gmin => {
2723
- Name => 'GenMediaInfo',
2724
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::GenMediaInfo' },
2725
- },
2726
- text => {
2727
- Name => 'Text',
2728
- Flags => ['Binary','Unknown'],
2729
- },
2730
- tmcd => {
2731
- Name => 'TimeCode',
2732
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::TimeCode' },
2733
- },
2734
- );
2735
-
2736
- # TimeCode header
2737
- %Image::ExifTool::QuickTime::TimeCode = (
2738
- PROCESS_PROC => \&ProcessMOV,
2739
- tcmi => {
2740
- Name => 'TCMediaInfo',
2741
- SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::TCMediaInfo' },
2742
- },
2743
- );
2744
-
2745
- # TimeCode media info (ref 12)
2746
- %Image::ExifTool::QuickTime::TCMediaInfo = (
2747
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
2748
- GROUPS => { 2 => 'Video' },
2749
- 4 => {
2750
- Name => 'TextFont',
2751
- Format => 'int16u',
2752
- PrintConv => { 0 => 'System' },
2753
- },
2754
- 6 => {
2755
- Name => 'TextFace',
2756
- Format => 'int16u',
2757
- PrintConv => {
2758
- 0 => 'Plain',
2759
- BITMASK => {
2760
- 0 => 'Bold',
2761
- 1 => 'Italic',
2762
- 2 => 'Underline',
2763
- 3 => 'Outline',
2764
- 4 => 'Shadow',
2765
- 5 => 'Condense',
2766
- 6 => 'Extend',
2767
- },
2768
- },
2769
- },
2770
- 8 => {
2771
- Name => 'TextSize',
2772
- Format => 'int16u',
2773
- },
2774
- # 10 - reserved
2775
- 12 => {
2776
- Name => 'TextColor',
2777
- Format => 'int16u[3]',
2778
- },
2779
- 18 => {
2780
- Name => 'BackgroundColor',
2781
- Format => 'int16u[3]',
2782
- },
2783
- 24 => {
2784
- Name => 'FontName',
2785
- Format => 'pstring',
2786
- ValueConv => '$self->Decode($val, $self->Options("CharsetQuickTime"))',
2787
- },
2788
- );
2789
-
2790
- # Generic media info (ref http://sourceforge.jp/cvs/view/ntvrec/ntvrec/libqtime/gmin.h?view=co)
2791
- %Image::ExifTool::QuickTime::GenMediaInfo = (
2792
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
2793
- GROUPS => { 2 => 'Video' },
2794
- 0 => 'GenMediaVersion',
2795
- 1 => { Name => 'GenFlags', Format => 'int8u[3]' },
2796
- 4 => { Name => 'GenGraphicsMode',
2797
- Format => 'int16u',
2798
- PrintHex => 1,
2799
- SeparateTable => 'GraphicsMode',
2800
- PrintConv => \%graphicsMode,
2801
- },
2802
- 6 => { Name => 'GenOpColor', Format => 'int16u[3]' },
2803
- 12 => { Name => 'GenBalance', Format => 'fixed16s' },
2804
- );
2805
-
2806
- # MP4 data reference box (ref 5)
2807
- %Image::ExifTool::QuickTime::DataRef = (
2808
- PROCESS_PROC => \&ProcessMOV,
2809
- NOTES => 'MP4 data reference box.',
2810
- 'url ' => {
2811
- Name => 'URL',
2812
- Format => 'undef', # (necessary to prevent decoding as string!)
2813
- RawConv => q{
2814
- # ignore if self-contained (flags bit 0 set)
2815
- return undef if unpack("N",$val) & 0x01;
2816
- $_ = substr($val,4); s/\0.*//s; $_;
2817
- },
2818
- },
2819
- 'urn ' => {
2820
- Name => 'URN',
2821
- Format => 'undef', # (necessary to prevent decoding as string!)
2822
- RawConv => q{
2823
- return undef if unpack("N",$val) & 0x01;
2824
- $_ = substr($val,4); s/\0.*//s; $_;
2825
- },
2826
- },
2827
- );
2828
-
2829
- # MP4 handler box (ref 5)
2830
- %Image::ExifTool::QuickTime::Handler = (
2831
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
2832
- GROUPS => { 2 => 'Video' },
2833
- 4 => { #PH
2834
- Name => 'HandlerClass',
2835
- Format => 'undef[4]',
2836
- RawConv => '$val eq "\0\0\0\0" ? undef : $val',
2837
- PrintConv => {
2838
- mhlr => 'Media Handler',
2839
- dhlr => 'Data Handler',
2840
- },
2841
- },
2842
- 8 => {
2843
- Name => 'HandlerType',
2844
- Format => 'undef[4]',
2845
- RawConv => '$$self{HandlerType} = $val unless $val eq "alis"; $val',
2846
- PrintConvColumns => 2,
2847
- PrintConv => {
2848
- alis => 'Alias Data', #PH
2849
- crsm => 'Clock Reference', #3
2850
- hint => 'Hint Track',
2851
- ipsm => 'IPMP', #3
2852
- m7sm => 'MPEG-7 Stream', #3
2853
- mdir => 'Metadata', #3
2854
- mdta => 'Metadata Tags', #PH
2855
- mjsm => 'MPEG-J', #3
2856
- ocsm => 'Object Content', #3
2857
- odsm => 'Object Descriptor', #3
2858
- priv => 'Private', #PH
2859
- sdsm => 'Scene Description', #3
2860
- soun => 'Audio Track',
2861
- text => 'Text', #PH (but what type? subtitle?)
2862
- tmcd => 'Time Code', #PH
2863
- 'url '=> 'URL', #3
2864
- vide => 'Video Track',
2865
- },
2866
- },
2867
- 12 => { #PH
2868
- Name => 'HandlerVendorID',
2869
- Format => 'undef[4]',
2870
- RawConv => '$val eq "\0\0\0\0" ? undef : $val',
2871
- PrintConv => \%vendorID,
2872
- SeparateTable => 'VendorID',
2873
- },
2874
- 24 => {
2875
- Name => 'HandlerDescription',
2876
- Format => 'string',
2877
- # (sometimes this is a Pascal string, and sometimes it is a C string)
2878
- RawConv => q{
2879
- $val=substr($val,1,ord($1)) if $val=~/^([\0-\x1f])/ and ord($1)<length($val);
2880
- length $val ? $val : undef;
2881
- },
2882
- },
2883
- );
2884
-
2885
- # Flip uuid data (ref PH)
2886
- %Image::ExifTool::QuickTime::Flip = (
2887
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
2888
- FORMAT => 'int32u',
2889
- FIRST_ENTRY => 0,
2890
- NOTES => 'Found in MP4 files from Flip Video cameras.',
2891
- GROUPS => { 1 => 'MakerNotes', 2 => 'Image' },
2892
- 1 => 'PreviewImageWidth',
2893
- 2 => 'PreviewImageHeight',
2894
- 13 => 'PreviewImageLength',
2895
- 14 => { # (confirmed for FlipVideoMinoHD)
2896
- Name => 'SerialNumber',
2897
- Groups => { 2 => 'Camera' },
2898
- Format => 'string[16]',
2899
- },
2900
- 28 => {
2901
- Name => 'PreviewImage',
2902
- Format => 'undef[$val{13}]',
2903
- RawConv => '$self->ValidateImage(\$val, $tag)',
2904
- },
2905
- );
2906
-
2907
- # QuickTime composite tags
2908
- %Image::ExifTool::QuickTime::Composite = (
2909
- GROUPS => { 2 => 'Video' },
2910
- Rotation => {
2911
- Require => {
2912
- 0 => 'QuickTime:MatrixStructure',
2913
- 1 => 'QuickTime:HandlerType',
2914
- },
2915
- ValueConv => 'Image::ExifTool::QuickTime::CalcRotation($self)',
2916
- },
2917
- AvgBitrate => {
2918
- Priority => 0, # let QuickTime::AvgBitrate take priority
2919
- Require => {
2920
- 0 => 'QuickTime::MovieDataSize',
2921
- 1 => 'QuickTime::Duration',
2922
- },
2923
- RawConv => q{
2924
- return undef unless $val[1];
2925
- $val[1] /= $$self{TimeScale} if $$self{TimeScale};
2926
- my $key = 'MovieDataSize';
2927
- my $size = $val[0];
2928
- for (;;) {
2929
- $key = $self->NextTagKey($key) or last;
2930
- $size += $self->GetValue($key);
2931
- }
2932
- return int($size * 8 / $val[1] + 0.5);
2933
- },
2934
- PrintConv => 'ConvertBitrate($val)',
2935
- },
2936
- GPSLatitude => {
2937
- Require => 'QuickTime:GPSCoordinates',
2938
- Groups => { 2 => 'Location' },
2939
- ValueConv => 'my @c = split " ", $val; $c[0]',
2940
- PrintConv => q{
2941
- require Image::ExifTool::GPS;
2942
- Image::ExifTool::GPS::ToDMS($self, $val, 1, 'N');
2943
- },
2944
- },
2945
- GPSLongitude => {
2946
- Require => 'QuickTime:GPSCoordinates',
2947
- Groups => { 2 => 'Location' },
2948
- ValueConv => 'my @c = split " ", $val; $c[1]',
2949
- PrintConv => q{
2950
- require Image::ExifTool::GPS;
2951
- Image::ExifTool::GPS::ToDMS($self, $val, 1, 'E');
2952
- },
2953
- },
2954
- # split altitude into GPSAltitude/GPSAltitudeRef like EXIF and XMP
2955
- GPSAltitude => {
2956
- Require => 'QuickTime:GPSCoordinates',
2957
- Groups => { 2 => 'Location' },
2958
- Priority => 0, # (because it may not exist)
2959
- ValueConv => 'my @c = split " ", $val; defined $c[2] ? abs($c[2]) : undef',
2960
- PrintConv => '"$val m"',
2961
- },
2962
- GPSAltitudeRef => {
2963
- Require => 'QuickTime:GPSCoordinates',
2964
- Groups => { 2 => 'Location' },
2965
- Priority => 0, # (because altitude information may not exist)
2966
- ValueConv => 'my @c = split " ", $val; defined $c[2] ? ($c[2] < 0 ? 1 : 0) : undef',
2967
- PrintConv => {
2968
- 0 => 'Above Sea Level',
2969
- 1 => 'Below Sea Level',
2970
- },
2971
- },
2972
- GPSLatitude2 => {
2973
- Name => 'GPSLatitude',
2974
- Require => 'QuickTime:LocationInformation',
2975
- Groups => { 2 => 'Location' },
2976
- ValueConv => '$val =~ /Lat=([-+.\d]+)/; abs($1)',
2977
- PrintConv => q{
2978
- require Image::ExifTool::GPS;
2979
- Image::ExifTool::GPS::ToDMS($self, $val, 1, 'N');
2980
- },
2981
- },
2982
- GPSLongitude2 => {
2983
- Name => 'GPSLongitude',
2984
- Require => 'QuickTime:LocationInformation',
2985
- Groups => { 2 => 'Location' },
2986
- ValueConv => '$val =~ /Lon=([-+.\d]+)/; abs($1)',
2987
- PrintConv => q{
2988
- require Image::ExifTool::GPS;
2989
- Image::ExifTool::GPS::ToDMS($self, $val, 1, 'E');
2990
- },
2991
- },
2992
- GPSAltitude2 => {
2993
- Name => 'GPSAltitude',
2994
- Require => 'QuickTime:LocationInformation',
2995
- Groups => { 2 => 'Location' },
2996
- ValueConv => '$val =~ /Alt=([-+.\d]+)/; abs($1)',
2997
- PrintConv => '"$val m"',
2998
- },
2999
- GPSAltitudeRef2 => {
3000
- Name => 'GPSAltitudeRef',
3001
- Require => 'QuickTime:LocationInformation',
3002
- Groups => { 2 => 'Location' },
3003
- ValueConv => '$val =~ /Alt=([-+.\d]+)/; $1 < 0 ? 1 : 0',
3004
- PrintConv => {
3005
- 0 => 'Above Sea Level',
3006
- 1 => 'Below Sea Level',
3007
- },
3008
- },
3009
- CDDBDiscPlayTime => {
3010
- Require => 'CDDB1Info',
3011
- Groups => { 2 => 'Audio' },
3012
- ValueConv => '$val =~ /^..([a-z0-9]{4})/i ? hex($1) : undef',
3013
- PrintConv => 'ConvertDuration($val)',
3014
- },
3015
- CDDBDiscTracks => {
3016
- Require => 'CDDB1Info',
3017
- Groups => { 2 => 'Audio' },
3018
- ValueConv => '$val =~ /^.{6}([a-z0-9]{2})/i ? hex($1) : undef',
3019
- },
3020
- );
3021
-
3022
- # add our composite tags
3023
- Image::ExifTool::AddCompositeTags('Image::ExifTool::QuickTime');
3024
-
3025
-
3026
- #------------------------------------------------------------------------------
3027
- # AutoLoad our writer routines when necessary
3028
- #
3029
- sub AUTOLOAD
3030
- {
3031
- return Image::ExifTool::DoAutoLoad($AUTOLOAD, @_);
3032
- }
3033
-
3034
- #------------------------------------------------------------------------------
3035
- # Calculate rotation of video track
3036
- # Inputs: 0) ExifTool object ref
3037
- # Returns: rotation angle or undef
3038
- sub CalcRotation($)
3039
- {
3040
- my $et = shift;
3041
- my $value = $$et{VALUE};
3042
- my ($i, $track);
3043
- # get the video track family 1 group (ie. "Track1");
3044
- for ($i=0; ; ++$i) {
3045
- my $idx = $i ? " ($i)" : '';
3046
- my $tag = "HandlerType$idx";
3047
- last unless $$value{$tag};
3048
- next unless $$value{$tag} eq 'vide';
3049
- $track = $et->GetGroup($tag, 1);
3050
- last;
3051
- }
3052
- return undef unless $track;
3053
- # get the video track matrix
3054
- for ($i=0; ; ++$i) {
3055
- my $idx = $i ? " ($i)" : '';
3056
- my $tag = "MatrixStructure$idx";
3057
- last unless $$value{$tag};
3058
- next unless $et->GetGroup($tag, 1) eq $track;
3059
- my @a = split ' ', $$value{$tag};
3060
- return undef unless $a[0] or $a[1];
3061
- # calculate the rotation angle (assume uniform rotation)
3062
- my $angle = atan2($a[1], $a[0]) * 180 / 3.14159;
3063
- $angle += 360 if $angle < 0;
3064
- return int($angle * 1000 + 0.5) / 1000;
3065
- }
3066
- return undef;
3067
- }
3068
-
3069
- #------------------------------------------------------------------------------
3070
- # Determine the average sample rate from a time-to-sample table
3071
- # Inputs: 0) ExifTool object ref, 1) time-to-sample table data ref
3072
- # Returns: average sample rate (in Hz)
3073
- sub CalcSampleRate($$)
3074
- {
3075
- my ($et, $valPt) = @_;
3076
- my @dat = unpack('N*', $$valPt);
3077
- my ($num, $dur) = (0, 0);
3078
- my $i;
3079
- for ($i=2; $i<@dat-1; $i+=2) {
3080
- $num += $dat[$i]; # total number of samples
3081
- $dur += $dat[$i] * $dat[$i+1]; # total sample duration
3082
- }
3083
- return undef unless $num and $dur and $$et{MediaTS};
3084
- return $num * $$et{MediaTS} / $dur;
3085
- }
3086
-
3087
- #------------------------------------------------------------------------------
3088
- # Fix incorrect format for ImageWidth/Height as written by Pentax
3089
- sub FixWrongFormat($)
3090
- {
3091
- my $val = shift;
3092
- return undef unless $val;
3093
- if ($val & 0xffff0000) {
3094
- $val = unpack('n',pack('N',$val));
3095
- }
3096
- return $val;
3097
- }
3098
-
3099
- #------------------------------------------------------------------------------
3100
- # Convert ISO 6709 string to standard lag/lon format
3101
- # Inputs: 0) ISO 6709 string (lat, lon, and optional alt)
3102
- # Returns: position in decimal degress with altitude if available
3103
- # Notes: Wikipedia indicates altitude may be in feet -- how is this specified?
3104
- sub ConvertISO6709($)
3105
- {
3106
- my $val = shift;
3107
- if ($val =~ /^([-+]\d{2}(?:\.\d*)?)([-+]\d{3}(?:\.\d*)?)([-+]\d+)?/) {
3108
- $val = ($1 + 0) . ' ' . ($2 + 0);
3109
- $val .= ' ' . ($3 + 0) if $3;
3110
- } elsif ($val =~ /^([-+])(\d{2})(\d{2}(?:\.\d*)?)([-+])(\d{3})(\d{2}(?:\.\d*)?)([-+]\d+)?/) {
3111
- my $lat = $2 + $3 / 60;
3112
- $lat = -$lat if $1 eq '-';
3113
- my $lon = $5 + $6 / 60;
3114
- $lon = -$lon if $4 eq '-';
3115
- $val = "$lat $lon";
3116
- $val .= ' ' . ($7 + 0) if $7;
3117
- } elsif ($val =~ /^([-+])(\d{2})(\d{2})(\d{2}(?:\.\d*)?)([-+])(\d{3})(\d{2})(\d{2}(?:\.\d*)?)([-+]\d+)?/) {
3118
- my $lat = $2 + $3 / 60 + $4 / 3600;
3119
- $lat = -$lat if $1 eq '-';
3120
- my $lon = $6 + $7 / 60 + $8 / 3600;
3121
- $lon = -$lon if $5 eq '-';
3122
- $val = "$lat $lon";
3123
- $val .= ' ' . ($9 + 0) if $9;
3124
- }
3125
- return $val;
3126
- }
3127
-
3128
- #------------------------------------------------------------------------------
3129
- # Format GPSCoordinates for printing
3130
- # Inputs: 0) string with numerical lat, lon and optional alt, separated by spaces
3131
- # 1) ExifTool object reference
3132
- # Returns: PrintConv value
3133
- sub PrintGPSCoordinates($)
3134
- {
3135
- my ($val, $et) = @_;
3136
- require Image::ExifTool::GPS;
3137
- my @v = split ' ', $val;
3138
- my $prt = Image::ExifTool::GPS::ToDMS($et, $v[0], 1, "N") . ', ' .
3139
- Image::ExifTool::GPS::ToDMS($et, $v[1], 1, "E");
3140
- if (defined $v[2]) {
3141
- $prt .= ', ' . ($v[2] < 0 ? -$v[2] . ' m Below' : $v[2] . ' m Above') . ' Sea Level';
3142
- }
3143
- return $prt;
3144
- }
3145
-
3146
- #------------------------------------------------------------------------------
3147
- # Unpack packed ISO 639/T language code
3148
- # Inputs: 0) packed language code (or undef)
3149
- # Returns: language code, or undef for default language, or 'err' for format error
3150
- sub UnpackLang($)
3151
- {
3152
- my $lang = shift;
3153
- if ($lang) {
3154
- # language code is packed in 5-bit characters
3155
- $lang = pack "C*", map { (($lang>>$_)&0x1f)+0x60 } 10, 5, 0;
3156
- # validate language code
3157
- if ($lang =~ /^[a-z]+$/) {
3158
- # treat 'eng' or 'und' as the default language
3159
- undef $lang if $lang eq 'und' or $lang eq 'eng';
3160
- } else {
3161
- $lang = 'err'; # invalid language code
3162
- }
3163
- }
3164
- return $lang;
3165
- }
3166
-
3167
- #------------------------------------------------------------------------------
3168
- # Process MPEG-4 MTDT atom (ref 11)
3169
- # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
3170
- # Returns: 1 on success
3171
- sub ProcessMetaData($$$)
3172
- {
3173
- my ($et, $dirInfo, $tagTablePtr) = @_;
3174
- my $dataPt = $$dirInfo{DataPt};
3175
- my $dirLen = length $$dataPt;
3176
- my $verbose = $et->Options('Verbose');
3177
- return 0 unless $dirLen >= 2;
3178
- my $count = Get16u($dataPt, 0);
3179
- $verbose and $et->VerboseDir('MetaData', $count);
3180
- my $i;
3181
- my $pos = 2;
3182
- for ($i=0; $i<$count; ++$i) {
3183
- last if $pos + 10 > $dirLen;
3184
- my $size = Get16u($dataPt, $pos);
3185
- last if $size < 10 or $size + $pos > $dirLen;
3186
- my $tag = Get32u($dataPt, $pos + 2);
3187
- my $lang = Get16u($dataPt, $pos + 6);
3188
- my $enc = Get16u($dataPt, $pos + 8);
3189
- my $val = substr($$dataPt, $pos + 10, $size);
3190
- my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag);
3191
- if ($tagInfo) {
3192
- # convert language code to ASCII (ignore read-only bit)
3193
- $lang = UnpackLang($lang);
3194
- # handle alternate languages
3195
- if ($lang) {
3196
- my $langInfo = Image::ExifTool::GetLangInfo($tagInfo, $lang);
3197
- $tagInfo = $langInfo if $langInfo;
3198
- }
3199
- $verbose and $et->VerboseInfo($tag, $tagInfo,
3200
- Value => $val,
3201
- DataPt => $dataPt,
3202
- Start => $pos + 10,
3203
- Size => $size - 10,
3204
- );
3205
- # convert from UTF-16 BE if necessary
3206
- $val = $et->Decode($val, 'UCS2') if $enc == 1;
3207
- if ($enc == 0 and $$tagInfo{Unknown}) {
3208
- # binary data
3209
- $et->FoundTag($tagInfo, \$val);
3210
- } else {
3211
- $et->FoundTag($tagInfo, $val);
3212
- }
3213
- }
3214
- $pos += $size;
3215
- }
3216
- return 1;
3217
- }
3218
-
3219
- #------------------------------------------------------------------------------
3220
- # Process hybrid binary data + QuickTime container (ref PH)
3221
- # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
3222
- # Returns: 1 on success
3223
- sub ProcessHybrid($$$)
3224
- {
3225
- my ($et, $dirInfo, $tagTablePtr) = @_;
3226
- # brute-force search for child atoms after first 8 bytes of binary data
3227
- my $dataPt = $$dirInfo{DataPt};
3228
- my $pos = ($$dirInfo{DirStart} || 0) + 8;
3229
- my $len = length($$dataPt);
3230
- my $try = $pos;
3231
- my $childPos;
3232
-
3233
- while ($pos <= $len - 8) {
3234
- my $tag = substr($$dataPt, $try+4, 4);
3235
- # look only for well-behaved tag ID's
3236
- $tag =~ /[^\w ]/ and $try = ++$pos, next;
3237
- my $size = Get32u($dataPt, $try);
3238
- if ($size + $try == $len) {
3239
- # the atom ends exactly at the end of the parent -- this must be it
3240
- $childPos = $pos;
3241
- $$dirInfo{DirLen} = $pos; # the binary data ends at the first child atom
3242
- last;
3243
- }
3244
- if ($size < 8 or $size + $try > $len - 8) {
3245
- $try = ++$pos; # fail. try next position
3246
- } else {
3247
- $try += $size; # could be another atom following this
3248
- }
3249
- }
3250
- # process binary data
3251
- $$dirInfo{MixedTags} = 1; # ignore non-integer tag ID's
3252
- $et->ProcessBinaryData($dirInfo, $tagTablePtr);
3253
- # process child atoms if found
3254
- if ($childPos) {
3255
- $$dirInfo{DirStart} = $childPos;
3256
- $$dirInfo{DirLen} = $len - $childPos;
3257
- ProcessMOV($et, $dirInfo, $tagTablePtr);
3258
- }
3259
- return 1;
3260
- }
3261
-
3262
- #------------------------------------------------------------------------------
3263
- # Process iTunes 'righ' atom (ref PH)
3264
- # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
3265
- # Returns: 1 on success
3266
- sub ProcessRights($$$)
3267
- {
3268
- my ($et, $dirInfo, $tagTablePtr) = @_;
3269
- my $dataPt = $$dirInfo{DataPt};
3270
- my $dataPos = $$dirInfo{Base};
3271
- my $dirLen = length $$dataPt;
3272
- my $unknown = $$et{OPTIONS}{Unkown} || $$et{OPTIONS}{Verbose};
3273
- my $pos;
3274
- $et->VerboseDir('righ', $dirLen / 8);
3275
- for ($pos = 0; $pos + 8 <= $dirLen; $pos += 8) {
3276
- my $tag = substr($$dataPt, $pos, 4);
3277
- last if $tag eq "\0\0\0\0";
3278
- my $val = substr($$dataPt, $pos + 4, 4);
3279
- my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag);
3280
- unless ($tagInfo) {
3281
- next unless $unknown;
3282
- my $name = $tag;
3283
- $name =~ s/([\x00-\x1f\x7f-\xff])/'x'.unpack('H*',$1)/eg;
3284
- $tagInfo = {
3285
- Name => "Unknown_$name",
3286
- Description => "Unknown $name",
3287
- Unknown => 1,
3288
- },
3289
- AddTagToTable($tagTablePtr, $tag, $tagInfo);
3290
- }
3291
- $val = '0x' . unpack('H*', $val) unless $$tagInfo{Format};
3292
- $et->HandleTag($tagTablePtr, $tag, $val,
3293
- DataPt => $dataPt,
3294
- DataPos => $dataPos,
3295
- Start => $pos + 4,
3296
- Size => 4,
3297
- );
3298
- }
3299
- return 1;
3300
- }
3301
-
3302
- #------------------------------------------------------------------------------
3303
- # Process iTunes Encoding Params (ref PH)
3304
- # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
3305
- # Returns: 1 on success
3306
- sub ProcessEncodingParams($$$)
3307
- {
3308
- my ($et, $dirInfo, $tagTablePtr) = @_;
3309
- my $dataPt = $$dirInfo{DataPt};
3310
- my $dirLen = length $$dataPt;
3311
- my $pos;
3312
- $et->VerboseDir('Encoding Params', $dirLen / 8);
3313
- for ($pos = 0; $pos + 8 <= $dirLen; $pos += 8) {
3314
- my ($tag, $val) = unpack("x${pos}a4N", $$dataPt);
3315
- $et->HandleTag($tagTablePtr, $tag, $val);
3316
- }
3317
- return 1;
3318
- }
3319
-
3320
- #------------------------------------------------------------------------------
3321
- # Process Meta keys and add tags to the ItemList table ('mdta' handler) (ref PH)
3322
- # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
3323
- # Returns: 1 on success
3324
- sub ProcessKeys($$$)
3325
- {
3326
- my ($et, $dirInfo, $tagTablePtr) = @_;
3327
- my $dataPt = $$dirInfo{DataPt};
3328
- my $dirLen = length $$dataPt;
3329
- my $out;
3330
- if ($et->Options('Verbose')) {
3331
- $et->VerboseDir('Keys');
3332
- $out = $et->Options('TextOut');
3333
- }
3334
- my $pos = 8;
3335
- my $index = 1;
3336
- my $infoTable = GetTagTable('Image::ExifTool::QuickTime::ItemList');
3337
- my $userTable = GetTagTable('Image::ExifTool::QuickTime::UserData');
3338
- while ($pos < $dirLen - 4) {
3339
- my $len = unpack("x${pos}N", $$dataPt);
3340
- last if $len < 8 or $pos + $len > $dirLen;
3341
- delete $$tagTablePtr{$index};
3342
- my $ns = substr($$dataPt, $pos + 4, 4);
3343
- my $tag = substr($$dataPt, $pos + 8, $len - 8);
3344
- $tag =~ s/\0.*//s; # truncate at null
3345
- if ($ns eq 'mdta') {
3346
- $tag =~ s/^com\.apple\.quicktime\.//; # remove common apple quicktime domain
3347
- }
3348
- next unless $tag;
3349
- # (I have some samples where the tag is a reversed ItemList or UserData tag ID)
3350
- my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag);
3351
- unless ($tagInfo) {
3352
- $tagInfo = $et->GetTagInfo($infoTable, $tag);
3353
- unless ($tagInfo) {
3354
- $tagInfo = $et->GetTagInfo($userTable, $tag);
3355
- if (not $tagInfo and $tag =~ /^\w{3}\xa9$/) {
3356
- $tag = pack('N', unpack('V', $tag));
3357
- $tagInfo = $et->GetTagInfo($infoTable, $tag);
3358
- $tagInfo or $tagInfo = $et->GetTagInfo($userTable, $tag);
3359
- }
3360
- }
3361
- }
3362
- my ($newInfo, $msg);
3363
- if ($tagInfo) {
3364
- $newInfo = {
3365
- Name => $$tagInfo{Name},
3366
- Format => $$tagInfo{Format},
3367
- ValueConv => $$tagInfo{ValueConv},
3368
- PrintConv => $$tagInfo{PrintConv},
3369
- };
3370
- my $groups = $$tagInfo{Groups};
3371
- $$newInfo{Groups} = { %$groups } if $groups;
3372
- } elsif ($tag =~ /^[-\w.]+$/) {
3373
- # create info for tags with reasonable id's
3374
- my $name = $tag;
3375
- $name =~ s/\.(.)/\U$1/g;
3376
- $newInfo = { Name => ucfirst($name) };
3377
- $msg = ' (Unknown)';
3378
- }
3379
- # substitute this tag in the ItemList table with the given index
3380
- delete $$infoTable{$index};
3381
- if ($newInfo) {
3382
- $msg or $msg = '';
3383
- AddTagToTable($infoTable, $index, $newInfo);
3384
- $out and printf $out "%sAdded ItemList Tag 0x%.4x = $tag$msg\n", $$et{INDENT}, $index;
3385
- }
3386
- $pos += $len;
3387
- ++$index;
3388
- }
3389
- return 1;
3390
- }
3391
-
3392
- #------------------------------------------------------------------------------
3393
- # Process a QuickTime atom
3394
- # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) optional tag table ref
3395
- # Returns: 1 on success
3396
- sub ProcessMOV($$;$)
3397
- {
3398
- my ($et, $dirInfo, $tagTablePtr) = @_;
3399
- my $raf = $$dirInfo{RAF};
3400
- my $dataPt = $$dirInfo{DataPt};
3401
- my $verbose = $et->Options('Verbose');
3402
- my $dataPos = $$dirInfo{Base} || 0;
3403
- my $charsetQuickTime = $et->Options('CharsetQuickTime');
3404
- my ($buff, $tag, $size, $track, $isUserData, %triplet);
3405
-
3406
- # more convenient to package data as a RandomAccess file
3407
- $raf or $raf = new File::RandomAccess($dataPt);
3408
- # skip leading bytes if necessary
3409
- if ($$dirInfo{DirStart}) {
3410
- $raf->Seek($$dirInfo{DirStart}, 1) or return 0;
3411
- $dataPos += $$dirInfo{DirStart};
3412
- }
3413
- # read size/tag name atom header
3414
- $raf->Read($buff,8) == 8 or return 0;
3415
- $dataPos += 8;
3416
- if ($tagTablePtr) {
3417
- $isUserData = ($tagTablePtr eq \%Image::ExifTool::QuickTime::UserData);
3418
- } else {
3419
- $tagTablePtr = GetTagTable('Image::ExifTool::QuickTime::Main');
3420
- }
3421
- ($size, $tag) = unpack('Na4', $buff);
3422
- if ($dataPt) {
3423
- $verbose and $et->VerboseDir($$dirInfo{DirName});
3424
- } else {
3425
- # check on file type if called with a RAF
3426
- $$tagTablePtr{$tag} or return 0;
3427
- if ($tag eq 'ftyp' and $size >= 12) {
3428
- # read ftyp atom to see what type of file this is
3429
- my $fileType;
3430
- if ($raf->Read($buff, $size-8) == $size-8) {
3431
- $raf->Seek(-($size-8), 1);
3432
- my $type = substr($buff, 0, 4);
3433
- # see if we know the extension for this file type
3434
- if ($ftypLookup{$type} and $ftypLookup{$type} =~ /\(\.(\w+)/) {
3435
- $fileType = $1;
3436
- # check compatible brands
3437
- } elsif ($buff =~ /^.{8}(.{4})+(mp41|mp42)/s) {
3438
- $fileType = 'MP4';
3439
- } elsif ($buff =~ /^.{8}(.{4})+(f4v )/s) {
3440
- $fileType = 'F4V';
3441
- } elsif ($buff =~ /^.{8}(.{4})+(qt )/s) {
3442
- $fileType = 'MOV';
3443
- }
3444
- }
3445
- $fileType or $fileType = 'MP4'; # default to MP4
3446
- $et->SetFileType($fileType, $mimeLookup{$fileType} || 'video/mp4');
3447
- } else {
3448
- $et->SetFileType(); # MOV
3449
- }
3450
- SetByteOrder('MM');
3451
- }
3452
- for (;;) {
3453
- if ($size < 8) {
3454
- if ($size == 0) {
3455
- if ($dataPt) {
3456
- # a zero size isn't legal for contained atoms, but Canon uses it to
3457
- # terminate the CNTH atom (ie. CanonEOS100D.mov), so tolerate it here
3458
- my $pos = $raf->Tell() - 4;
3459
- $raf->Seek(0,2);
3460
- my $str = $$dirInfo{DirName} . ' with ' . ($raf->Tell() - $pos) . ' bytes';
3461
- $et->VPrint(0,"$$et{INDENT}\[Terminator found in $str remaining]");
3462
- } else {
3463
- $tag = sprintf("0x%.8x",Get32u(\$tag,0)) if $tag =~ /[\x00-\x1f\x7f-\xff]/;
3464
- $et->VPrint(0,"$$et{INDENT}Tag '$tag' extends to end of file");
3465
- }
3466
- last;
3467
- }
3468
- $size == 1 or $et->Warn('Invalid atom size'), last;
3469
- # read extended atom size
3470
- $raf->Read($buff, 8) == 8 or last;
3471
- $dataPos += 8;
3472
- my ($hi, $lo) = unpack('NN', $buff);
3473
- if ($hi or $lo > 0x7fffffff) {
3474
- if ($hi > 0x7fffffff) {
3475
- $et->Warn('Invalid atom size');
3476
- last;
3477
- } elsif (not $et->Options('LargeFileSupport')) {
3478
- $et->Warn('End of processing at large atom (LargeFileSupport not enabled)');
3479
- last;
3480
- }
3481
- }
3482
- $size = $hi * 4294967296 + $lo - 16;
3483
- $size < 0 and $et->Warn('Invalid extended size'), last;
3484
- } else {
3485
- $size -= 8;
3486
- }
3487
- if ($isUserData and $$et{SET_GROUP1}) {
3488
- my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag);
3489
- # add track name to UserData tags inside tracks
3490
- $tag = $$et{SET_GROUP1} . $tag;
3491
- if (not $$tagTablePtr{$tag} and $tagInfo) {
3492
- my %newInfo = %$tagInfo;
3493
- foreach ('Name', 'Description') {
3494
- next unless $$tagInfo{$_};
3495
- $newInfo{$_} = $$et{SET_GROUP1} . $$tagInfo{$_};
3496
- $newInfo{$_} =~ s/^(Track\d+)Track/$1/; # remove duplicate "Track" in name
3497
- }
3498
- AddTagToTable($tagTablePtr, $tag, \%newInfo);
3499
- }
3500
- }
3501
- my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag);
3502
- # allow numerical tag ID's
3503
- unless ($tagInfo) {
3504
- my $num = unpack('N', $tag);
3505
- if ($$tagTablePtr{$num}) {
3506
- $tagInfo = $et->GetTagInfo($tagTablePtr, $num);
3507
- $tag = $num;
3508
- }
3509
- }
3510
- # generate tagInfo if Unknown option set
3511
- if (not defined $tagInfo and ($$et{OPTIONS}{Unknown} or
3512
- $verbose or $tag =~ /^\xa9/))
3513
- {
3514
- my $name = $tag;
3515
- my $n = ($name =~ s/([\x00-\x1f\x7f-\xff])/'x'.unpack('H*',$1)/eg);
3516
- # print in hex if tag is numerical
3517
- $name = sprintf('0x%.4x',unpack('N',$tag)) if $n > 2;
3518
- if ($name =~ /^xa9(.*)/) {
3519
- $tagInfo = {
3520
- Name => "UserData_$1",
3521
- Description => "User Data $1",
3522
- };
3523
- } else {
3524
- $tagInfo = {
3525
- Name => "Unknown_$name",
3526
- Description => "Unknown $name",
3527
- Unknown => 1,
3528
- Binary => 1,
3529
- };
3530
- }
3531
- AddTagToTable($tagTablePtr, $tag, $tagInfo);
3532
- }
3533
- # save required tag sizes
3534
- $et->HandleTag($tagTablePtr, "$tag-size", $size) if $$tagTablePtr{"$tag-size"};
3535
- # load values only if associated with a tag (or verbose) and < 16MB long
3536
- if ((defined $tagInfo or $verbose) and $size < 0x1000000) {
3537
- my $val;
3538
- my $missing = $size - $raf->Read($val, $size);
3539
- if ($missing) {
3540
- $et->Warn("Truncated '$tag' data (missing $missing bytes)");
3541
- last;
3542
- }
3543
- # use value to get tag info if necessary
3544
- $tagInfo or $tagInfo = $et->GetTagInfo($tagTablePtr, $tag, \$val);
3545
- my $hasData = ($$dirInfo{HasData} and $val =~ /\0...data\0/s);
3546
- if ($verbose and not $hasData) {
3547
- my $tval;
3548
- if ($tagInfo and $$tagInfo{Format}) {
3549
- $tval = ReadValue(\$val, 0, $$tagInfo{Format}, $$tagInfo{Count}, length($val));
3550
- }
3551
- $et->VerboseInfo($tag, $tagInfo,
3552
- Value => $tval,
3553
- DataPt => \$val,
3554
- DataPos => $dataPos,
3555
- Size => $size,
3556
- Format => $tagInfo ? $$tagInfo{Format} : undef,
3557
- );
3558
- }
3559
- # handle iTunesInfo mean/name/data triplets
3560
- if ($tagInfo and $$tagInfo{Triplet}) {
3561
- if ($tag eq 'data' and $triplet{mean} and $triplet{name}) {
3562
- $tag = $triplet{name};
3563
- # add 'mean' to name unless it is 'com.apple.iTunes'
3564
- $tag = $triplet{mean} . '/' . $tag unless $triplet{mean} eq 'com.apple.iTunes';
3565
- $tagInfo = $et->GetTagInfo($tagTablePtr, $tag, \$val);
3566
- unless ($tagInfo) {
3567
- my $name = $triplet{name};
3568
- my $desc = $name;
3569
- $name =~ tr/-_a-zA-Z0-9//dc;
3570
- $desc =~ tr/_/ /;
3571
- $tagInfo = {
3572
- Name => $name,
3573
- Description => $desc,
3574
- };
3575
- AddTagToTable($tagTablePtr, $tag, $tagInfo);
3576
- }
3577
- # ignore 8-byte header
3578
- $val = substr($val, 8) if length($val) >= 8;
3579
- unless ($$tagInfo{Format} or $$tagInfo{SubDirectory}) {
3580
- # extract as binary if it contains any non-ASCII or control characters
3581
- if ($val =~ /[^\x20-\x7e]/) {
3582
- my $buff = $val;
3583
- $val = \$buff;
3584
- }
3585
- }
3586
- undef %triplet;
3587
- } else {
3588
- undef %triplet if $tag eq 'mean';
3589
- $triplet{$tag} = substr($val,4) if length($val) > 4;
3590
- undef $tagInfo; # don't store this tag
3591
- }
3592
- }
3593
- if ($tagInfo) {
3594
- my $subdir = $$tagInfo{SubDirectory};
3595
- if ($subdir) {
3596
- my $start = $$subdir{Start} || 0;
3597
- my ($base, $dPos) = ($dataPos, 0);
3598
- if ($$subdir{Base}) {
3599
- $dPos -= eval $$subdir{Base};
3600
- $base -= $dPos;
3601
- }
3602
- my %dirInfo = (
3603
- DataPt => \$val,
3604
- DataLen => $size,
3605
- DirStart => $start,
3606
- DirLen => $size - $start,
3607
- DirName => $$subdir{DirName} || $$tagInfo{Name},
3608
- HasData => $$subdir{HasData},
3609
- Multi => $$subdir{Multi},
3610
- DataPos => $dPos,
3611
- # Base needed for IsOffset tags in binary data
3612
- Base => $base,
3613
- );
3614
- $dirInfo{BlockInfo} = $tagInfo if $$tagInfo{BlockExtract};
3615
- if ($$subdir{ByteOrder} and $$subdir{ByteOrder} =~ /^Little/) {
3616
- SetByteOrder('II');
3617
- }
3618
- my $oldGroup1 = $$et{SET_GROUP1};
3619
- if ($$tagInfo{Name} eq 'Track') {
3620
- $track or $track = 0;
3621
- $$et{SET_GROUP1} = 'Track' . (++$track);
3622
- }
3623
- my $subTable = GetTagTable($$subdir{TagTable});
3624
- my $proc = $$subdir{ProcessProc};
3625
- # make ProcessMOV() the default processing procedure for subdirectories
3626
- $proc = \&ProcessMOV unless $proc or $$subTable{PROCESS_PROC};
3627
- $et->ProcessDirectory(\%dirInfo, $subTable, $proc) if $size > $start;
3628
- $$et{SET_GROUP1} = $oldGroup1;
3629
- SetByteOrder('MM');
3630
- } elsif ($hasData) {
3631
- # handle atoms containing 'data' tags
3632
- # (currently ignore contained atoms: 'itif', 'name', etc.)
3633
- my $pos = 0;
3634
- for (;;) {
3635
- last if $pos + 16 > $size;
3636
- my ($len, $type, $flags, $ctry, $lang) = unpack("x${pos}Na4Nnn", $val);
3637
- last if $pos + $len > $size;
3638
- my $value;
3639
- my $format = $$tagInfo{Format};
3640
- if ($type eq 'data' and $len >= 16) {
3641
- $pos += 16;
3642
- $len -= 16;
3643
- $value = substr($val, $pos, $len);
3644
- # format flags (ref 12):
3645
- # 0x0=binary, 0x1=UTF-8, 0x2=UTF-16, 0x3=ShiftJIS,
3646
- # 0x4=UTF-8 0x5=UTF-16, 0xd=JPEG, 0xe=PNG,
3647
- # 0x15=signed int, 0x16=unsigned int, 0x17=float,
3648
- # 0x18=double, 0x1b=BMP, 0x1c='meta' atom
3649
- if ($stringEncoding{$flags}) {
3650
- # handle all string formats
3651
- $value = $et->Decode($value, $stringEncoding{$flags});
3652
- } else {
3653
- if (not $format) {
3654
- if ($flags == 0x15 or $flags == 0x16) {
3655
- $format = { 1=>'int8', 2=>'int16', 4=>'int32' }->{$len};
3656
- $format .= $flags == 0x15 ? 's' : 'u' if $format;
3657
- } elsif ($flags == 0x17) {
3658
- $format = 'float';
3659
- } elsif ($flags == 0x18) {
3660
- $format = 'double';
3661
- } elsif ($flags == 0x00) {
3662
- # read 1 and 2-byte binary as integers
3663
- if ($len == 1) {
3664
- $format = 'int8u',
3665
- } elsif ($len == 2) {
3666
- $format = 'int16u',
3667
- }
3668
- }
3669
- }
3670
- if ($format) {
3671
- $value = ReadValue(\$value, 0, $format, $$tagInfo{Count}, $len);
3672
- } elsif (not $$tagInfo{ValueConv}) {
3673
- # make binary data a scalar reference unless a ValueConv exists
3674
- my $buf = $value;
3675
- $value = \$buf;
3676
- }
3677
- }
3678
- }
3679
- my $langInfo;
3680
- if ($ctry or $lang) {
3681
- # ignore country ('ctry') and language lists ('lang') for now
3682
- undef $ctry if $ctry and $ctry <= 255;
3683
- undef $lang if $lang and $lang <= 255;
3684
- $lang = UnpackLang($lang);
3685
- # add country code if specified
3686
- if ($ctry) {
3687
- $ctry = unpack('a2',pack('n',$ctry)); # unpack as ISO 3166-1
3688
- # treat 'ZZ' like a default country (see ref 12)
3689
- undef $ctry if $ctry eq 'ZZ';
3690
- if ($ctry and $ctry =~ /^[A-Z]{2}$/) {
3691
- $lang or $lang = 'und';
3692
- $lang .= "-$ctry";
3693
- }
3694
- }
3695
- $langInfo = Image::ExifTool::GetLangInfo($tagInfo, $lang) if $lang;
3696
- }
3697
- $langInfo or $langInfo = $tagInfo;
3698
- $et->VerboseInfo($tag, $langInfo,
3699
- Value => ref $value ? $$value : $value,
3700
- DataPt => \$val,
3701
- DataPos => $dataPos,
3702
- Start => $pos,
3703
- Size => $len,
3704
- Format => $format,
3705
- Extra => sprintf(", Type='$type', Flags=0x%x",$flags)
3706
- ) if $verbose;
3707
- $et->FoundTag($langInfo, $value) if defined $value;
3708
- $pos += $len;
3709
- }
3710
- } elsif ($tag =~ /^\xa9/ or $$tagInfo{IText}) {
3711
- # parse international text to extract all languages
3712
- my $pos = 0;
3713
- for (;;) {
3714
- last if $pos + 4 > $size;
3715
- my ($len, $lang) = unpack("x${pos}nn", $val);
3716
- $pos += 4;
3717
- # according to the QuickTime spec (ref 12), $len should include
3718
- # 4 bytes for length and type words, but nobody (including
3719
- # Apple, Pentax and Kodak) seems to add these in, so try
3720
- # to allow for either
3721
- if ($pos + $len > $size) {
3722
- $len -= 4;
3723
- last if $pos + $len > $size or $len < 0;
3724
- }
3725
- # ignore any empty entries (or null padding) after the first
3726
- next if not $len and $pos;
3727
- my $str = substr($val, $pos, $len);
3728
- my $langInfo;
3729
- if ($lang < 0x400) {
3730
- # this is a Macintosh language code
3731
- # a language code of 0 is Macintosh english, so treat as default
3732
- if ($lang) {
3733
- # use Font.pm to look up language string
3734
- require Image::ExifTool::Font;
3735
- $lang = $Image::ExifTool::Font::ttLang{Macintosh}{$lang};
3736
- }
3737
- # the spec says only "Macintosh text encoding", but
3738
- # allow this to be configured by the user
3739
- $str = $et->Decode($str, $charsetQuickTime);
3740
- } else {
3741
- # convert language code to ASCII (ignore read-only bit)
3742
- $lang = UnpackLang($lang);
3743
- # may be either UTF-8 or UTF-16BE
3744
- my $enc = $str=~s/^\xfe\xff// ? 'UTF16' : 'UTF8';
3745
- $str = $et->Decode($str, $enc);
3746
- }
3747
- $langInfo = Image::ExifTool::GetLangInfo($tagInfo, $lang) if $lang;
3748
- $et->FoundTag($langInfo || $tagInfo, $str);
3749
- $pos += $len;
3750
- }
3751
- } else {
3752
- my $format = $$tagInfo{Format};
3753
- if ($format) {
3754
- $val = ReadValue(\$val, 0, $format, $$tagInfo{Count}, length($val));
3755
- }
3756
- my $key = $et->FoundTag($tagInfo, $val);
3757
- # decode if necessary (NOTE: must be done after RawConv)
3758
- if (defined $key and (not $format or $format =~ /^string/) and
3759
- not $$tagInfo{Unknown} and not $$tagInfo{ValueConv} and
3760
- not $$tagInfo{Binary} and defined $$et{VALUE}{$key} and not ref $val)
3761
- {
3762
- my $vp = \$$et{VALUE}{$key};
3763
- if (not ref $$vp and length($$vp) <= 65536 and $$vp =~ /[\x80-\xff]/) {
3764
- # the encoding of this is not specified, so use CharsetQuickTime
3765
- $$vp = $et->Decode($$vp, $charsetQuickTime);
3766
- }
3767
- }
3768
- }
3769
- }
3770
- } else {
3771
- $et->VerboseInfo($tag, $tagInfo,
3772
- Size => $size,
3773
- Extra => sprintf(' at offset 0x%.4x', $raf->Tell()),
3774
- ) if $verbose;
3775
- $raf->Seek($size, 1) or $et->Warn("Truncated '$tag' data"), last;
3776
- }
3777
- $raf->Read($buff, 8) == 8 or last;
3778
- $dataPos += $size + 8;
3779
- ($size, $tag) = unpack('Na4', $buff);
3780
- }
3781
- return 1;
3782
- }
3783
-
3784
- #------------------------------------------------------------------------------
3785
- # Process a QuickTime Image File
3786
- # Inputs: 0) ExifTool object reference, 1) directory information reference
3787
- # Returns: 1 on success
3788
- sub ProcessQTIF($$)
3789
- {
3790
- my ($et, $dirInfo) = @_;
3791
- my $table = GetTagTable('Image::ExifTool::QuickTime::ImageFile');
3792
- return ProcessMOV($et, $dirInfo, $table);
3793
- }
3794
-
3795
- 1; # end
3796
-
3797
- __END__
3798
-
3799
- =head1 NAME
3800
-
3801
- Image::ExifTool::QuickTime - Read QuickTime and MP4 meta information
3802
-
3803
- =head1 SYNOPSIS
3804
-
3805
- This module is used by Image::ExifTool
3806
-
3807
- =head1 DESCRIPTION
3808
-
3809
- This module contains routines required by Image::ExifTool to extract
3810
- information from QuickTime and MP4 video, and M4A audio files.
3811
-
3812
- =head1 AUTHOR
3813
-
3814
- Copyright 2003-2013, Phil Harvey (phil at owl.phy.queensu.ca)
3815
-
3816
- This library is free software; you can redistribute it and/or modify it
3817
- under the same terms as Perl itself.
3818
-
3819
- =head1 REFERENCES
3820
-
3821
- =over 4
3822
-
3823
- =item L<http://developer.apple.com/mac/library/documentation/QuickTime/QTFF/QTFFChap1/qtff1.html>
3824
-
3825
- =item L<http://search.cpan.org/dist/MP4-Info-1.04/>
3826
-
3827
- =item L<http://www.geocities.com/xhelmboyx/quicktime/formats/mp4-layout.txt>
3828
-
3829
- =item L<http://wiki.multimedia.cx/index.php?title=Apple_QuickTime>
3830
-
3831
- =item L<http://atomicparsley.sourceforge.net/mpeg-4files.html>
3832
-
3833
- =item L<http://wiki.multimedia.cx/index.php?title=QuickTime_container>
3834
-
3835
- =item L<http://code.google.com/p/mp4v2/wiki/iTunesMetadata>
3836
-
3837
- =item L<http://www.canieti.com.mx/assets/files/1011/IEC_100_1384_DC.pdf>
3838
-
3839
- =item L<http://www.adobe.com/devnet/flv/pdf/video_file_format_spec_v10.pdf>
3840
-
3841
- =back
3842
-
3843
- =head1 SEE ALSO
3844
-
3845
- L<Image::ExifTool::TagNames/QuickTime Tags>,
3846
- L<Image::ExifTool(3pm)|Image::ExifTool>
3847
-
3848
- =cut
3849
-