exiftool_vendored 9.33.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 (864) hide show
  1. checksums.yaml +15 -0
  2. data/bin/Image-ExifTool-9.33/Changes +6241 -0
  3. data/bin/Image-ExifTool-9.33/MANIFEST +859 -0
  4. data/bin/Image-ExifTool-9.33/META.yml +27 -0
  5. data/bin/Image-ExifTool-9.33/Makefile.PL +41 -0
  6. data/bin/Image-ExifTool-9.33/README +227 -0
  7. data/bin/Image-ExifTool-9.33/arg_files/exif2iptc.args +24 -0
  8. data/bin/Image-ExifTool-9.33/arg_files/exif2xmp.args +38 -0
  9. data/bin/Image-ExifTool-9.33/arg_files/gps2xmp.args +20 -0
  10. data/bin/Image-ExifTool-9.33/arg_files/iptc2exif.args +17 -0
  11. data/bin/Image-ExifTool-9.33/arg_files/iptc2xmp.args +53 -0
  12. data/bin/Image-ExifTool-9.33/arg_files/iptcCore.args +172 -0
  13. data/bin/Image-ExifTool-9.33/arg_files/pdf2xmp.args +23 -0
  14. data/bin/Image-ExifTool-9.33/arg_files/xmp2exif.args +39 -0
  15. data/bin/Image-ExifTool-9.33/arg_files/xmp2gps.args +24 -0
  16. data/bin/Image-ExifTool-9.33/arg_files/xmp2iptc.args +62 -0
  17. data/bin/Image-ExifTool-9.33/arg_files/xmp2pdf.args +23 -0
  18. data/bin/Image-ExifTool-9.33/config_files/ExifTool_config +299 -0
  19. data/bin/Image-ExifTool-9.33/config_files/convert_regions.config +81 -0
  20. data/bin/Image-ExifTool-9.33/exiftool +5715 -0
  21. data/bin/Image-ExifTool-9.33/fmt_files/gpx.fmt +29 -0
  22. data/bin/Image-ExifTool-9.33/fmt_files/gpx_wpt.fmt +33 -0
  23. data/bin/Image-ExifTool-9.33/fmt_files/kml.fmt +53 -0
  24. data/bin/Image-ExifTool-9.33/html/ExifTool.html +1959 -0
  25. data/bin/Image-ExifTool-9.33/html/MIE1.1-20070121.pdf +0 -0
  26. data/bin/Image-ExifTool-9.33/html/Shift.html +173 -0
  27. data/bin/Image-ExifTool-9.33/html/TagNames/AFCP.html +53 -0
  28. data/bin/Image-ExifTool-9.33/html/TagNames/AIFF.html +146 -0
  29. data/bin/Image-ExifTool-9.33/html/TagNames/APE.html +149 -0
  30. data/bin/Image-ExifTool-9.33/html/TagNames/APP12.html +188 -0
  31. data/bin/Image-ExifTool-9.33/html/TagNames/ASF.html +1066 -0
  32. data/bin/Image-ExifTool-9.33/html/TagNames/BMP.html +110 -0
  33. data/bin/Image-ExifTool-9.33/html/TagNames/Canon.html +8062 -0
  34. data/bin/Image-ExifTool-9.33/html/TagNames/CanonCustom.html +2044 -0
  35. data/bin/Image-ExifTool-9.33/html/TagNames/CanonRaw.html +561 -0
  36. data/bin/Image-ExifTool-9.33/html/TagNames/CanonVRD.html +1222 -0
  37. data/bin/Image-ExifTool-9.33/html/TagNames/Casio.html +1569 -0
  38. data/bin/Image-ExifTool-9.33/html/TagNames/Composite.html +665 -0
  39. data/bin/Image-ExifTool-9.33/html/TagNames/DICOM.html +15762 -0
  40. data/bin/Image-ExifTool-9.33/html/TagNames/DNG.html +273 -0
  41. data/bin/Image-ExifTool-9.33/html/TagNames/DV.html +75 -0
  42. data/bin/Image-ExifTool-9.33/html/TagNames/DarwinCore.html +1445 -0
  43. data/bin/Image-ExifTool-9.33/html/TagNames/DjVu.html +313 -0
  44. data/bin/Image-ExifTool-9.33/html/TagNames/EXE.html +697 -0
  45. data/bin/Image-ExifTool-9.33/html/TagNames/EXIF.html +3244 -0
  46. data/bin/Image-ExifTool-9.33/html/TagNames/Extra.html +301 -0
  47. data/bin/Image-ExifTool-9.33/html/TagNames/FLAC.html +183 -0
  48. data/bin/Image-ExifTool-9.33/html/TagNames/FLIR.html +931 -0
  49. data/bin/Image-ExifTool-9.33/html/TagNames/Flash.html +419 -0
  50. data/bin/Image-ExifTool-9.33/html/TagNames/FlashPix.html +1435 -0
  51. data/bin/Image-ExifTool-9.33/html/TagNames/Font.html +485 -0
  52. data/bin/Image-ExifTool-9.33/html/TagNames/FotoStation.html +103 -0
  53. data/bin/Image-ExifTool-9.33/html/TagNames/FujiFilm.html +637 -0
  54. data/bin/Image-ExifTool-9.33/html/TagNames/GE.html +40 -0
  55. data/bin/Image-ExifTool-9.33/html/TagNames/GIF.html +116 -0
  56. data/bin/Image-ExifTool-9.33/html/TagNames/GIMP.html +140 -0
  57. data/bin/Image-ExifTool-9.33/html/TagNames/GPS.html +222 -0
  58. data/bin/Image-ExifTool-9.33/html/TagNames/GeoTiff.html +2177 -0
  59. data/bin/Image-ExifTool-9.33/html/TagNames/H264.html +393 -0
  60. data/bin/Image-ExifTool-9.33/html/TagNames/HP.html +155 -0
  61. data/bin/Image-ExifTool-9.33/html/TagNames/HTML.html +666 -0
  62. data/bin/Image-ExifTool-9.33/html/TagNames/ICC_Profile.html +710 -0
  63. data/bin/Image-ExifTool-9.33/html/TagNames/ID3.html +1473 -0
  64. data/bin/Image-ExifTool-9.33/html/TagNames/IPTC.html +895 -0
  65. data/bin/Image-ExifTool-9.33/html/TagNames/ITC.html +90 -0
  66. data/bin/Image-ExifTool-9.33/html/TagNames/JFIF.html +61 -0
  67. data/bin/Image-ExifTool-9.33/html/TagNames/JPEG.html +523 -0
  68. data/bin/Image-ExifTool-9.33/html/TagNames/JVC.html +56 -0
  69. data/bin/Image-ExifTool-9.33/html/TagNames/Jpeg2000.html +464 -0
  70. data/bin/Image-ExifTool-9.33/html/TagNames/Kodak.html +1759 -0
  71. data/bin/Image-ExifTool-9.33/html/TagNames/KyoceraRaw.html +92 -0
  72. data/bin/Image-ExifTool-9.33/html/TagNames/LNK.html +478 -0
  73. data/bin/Image-ExifTool-9.33/html/TagNames/Leaf.html +870 -0
  74. data/bin/Image-ExifTool-9.33/html/TagNames/M2TS.html +133 -0
  75. data/bin/Image-ExifTool-9.33/html/TagNames/MIE.html +1026 -0
  76. data/bin/Image-ExifTool-9.33/html/TagNames/MIFF.html +196 -0
  77. data/bin/Image-ExifTool-9.33/html/TagNames/MNG.html +847 -0
  78. data/bin/Image-ExifTool-9.33/html/TagNames/MPC.html +97 -0
  79. data/bin/Image-ExifTool-9.33/html/TagNames/MPEG.html +249 -0
  80. data/bin/Image-ExifTool-9.33/html/TagNames/MPF.html +199 -0
  81. data/bin/Image-ExifTool-9.33/html/TagNames/MWG.html +563 -0
  82. data/bin/Image-ExifTool-9.33/html/TagNames/MXF.html +6673 -0
  83. data/bin/Image-ExifTool-9.33/html/TagNames/Matroska.html +1069 -0
  84. data/bin/Image-ExifTool-9.33/html/TagNames/Microsoft.html +2066 -0
  85. data/bin/Image-ExifTool-9.33/html/TagNames/Minolta.html +2555 -0
  86. data/bin/Image-ExifTool-9.33/html/TagNames/MinoltaRaw.html +326 -0
  87. data/bin/Image-ExifTool-9.33/html/TagNames/Nikon.html +4467 -0
  88. data/bin/Image-ExifTool-9.33/html/TagNames/NikonCapture.html +776 -0
  89. data/bin/Image-ExifTool-9.33/html/TagNames/NikonCustom.html +3835 -0
  90. data/bin/Image-ExifTool-9.33/html/TagNames/OOXML.html +280 -0
  91. data/bin/Image-ExifTool-9.33/html/TagNames/Ogg.html +44 -0
  92. data/bin/Image-ExifTool-9.33/html/TagNames/Olympus.html +3386 -0
  93. data/bin/Image-ExifTool-9.33/html/TagNames/OpenEXR.html +222 -0
  94. data/bin/Image-ExifTool-9.33/html/TagNames/PDF.html +745 -0
  95. data/bin/Image-ExifTool-9.33/html/TagNames/PGF.html +80 -0
  96. data/bin/Image-ExifTool-9.33/html/TagNames/PICT.html +753 -0
  97. data/bin/Image-ExifTool-9.33/html/TagNames/PLIST.html +86 -0
  98. data/bin/Image-ExifTool-9.33/html/TagNames/PNG.html +515 -0
  99. data/bin/Image-ExifTool-9.33/html/TagNames/PSP.html +160 -0
  100. data/bin/Image-ExifTool-9.33/html/TagNames/Panasonic.html +1452 -0
  101. data/bin/Image-ExifTool-9.33/html/TagNames/PanasonicRaw.html +214 -0
  102. data/bin/Image-ExifTool-9.33/html/TagNames/Pentax.html +4332 -0
  103. data/bin/Image-ExifTool-9.33/html/TagNames/PhaseOne.html +258 -0
  104. data/bin/Image-ExifTool-9.33/html/TagNames/PhotoCD.html +402 -0
  105. data/bin/Image-ExifTool-9.33/html/TagNames/PhotoMechanic.html +196 -0
  106. data/bin/Image-ExifTool-9.33/html/TagNames/Photoshop.html +555 -0
  107. data/bin/Image-ExifTool-9.33/html/TagNames/PostScript.html +125 -0
  108. data/bin/Image-ExifTool-9.33/html/TagNames/PrintIM.html +31 -0
  109. data/bin/Image-ExifTool-9.33/html/TagNames/Qualcomm.html +4778 -0
  110. data/bin/Image-ExifTool-9.33/html/TagNames/QuickTime.html +3104 -0
  111. data/bin/Image-ExifTool-9.33/html/TagNames/RIFF.html +1164 -0
  112. data/bin/Image-ExifTool-9.33/html/TagNames/RSRC.html +74 -0
  113. data/bin/Image-ExifTool-9.33/html/TagNames/RTF.html +150 -0
  114. data/bin/Image-ExifTool-9.33/html/TagNames/Radiance.html +87 -0
  115. data/bin/Image-ExifTool-9.33/html/TagNames/Rawzor.html +45 -0
  116. data/bin/Image-ExifTool-9.33/html/TagNames/Real.html +780 -0
  117. data/bin/Image-ExifTool-9.33/html/TagNames/Reconyx.html +132 -0
  118. data/bin/Image-ExifTool-9.33/html/TagNames/Ricoh.html +456 -0
  119. data/bin/Image-ExifTool-9.33/html/TagNames/Samsung.html +419 -0
  120. data/bin/Image-ExifTool-9.33/html/TagNames/Sanyo.html +366 -0
  121. data/bin/Image-ExifTool-9.33/html/TagNames/Shortcuts.html +237 -0
  122. data/bin/Image-ExifTool-9.33/html/TagNames/Sigma.html +372 -0
  123. data/bin/Image-ExifTool-9.33/html/TagNames/SigmaRaw.html +403 -0
  124. data/bin/Image-ExifTool-9.33/html/TagNames/Sony.html +4279 -0
  125. data/bin/Image-ExifTool-9.33/html/TagNames/SonyIDC.html +267 -0
  126. data/bin/Image-ExifTool-9.33/html/TagNames/Stim.html +200 -0
  127. data/bin/Image-ExifTool-9.33/html/TagNames/Theora.html +102 -0
  128. data/bin/Image-ExifTool-9.33/html/TagNames/Unknown.html +31 -0
  129. data/bin/Image-ExifTool-9.33/html/TagNames/Vorbis.html +228 -0
  130. data/bin/Image-ExifTool-9.33/html/TagNames/XMP.html +7234 -0
  131. data/bin/Image-ExifTool-9.33/html/TagNames/ZIP.html +204 -0
  132. data/bin/Image-ExifTool-9.33/html/TagNames/iWork.html +49 -0
  133. data/bin/Image-ExifTool-9.33/html/TagNames/index.html +192 -0
  134. data/bin/Image-ExifTool-9.33/html/TagNames/style.css +31 -0
  135. data/bin/Image-ExifTool-9.33/html/ancient_history.html +6727 -0
  136. data/bin/Image-ExifTool-9.33/html/canon_raw.html +366 -0
  137. data/bin/Image-ExifTool-9.33/html/commentary.html +319 -0
  138. data/bin/Image-ExifTool-9.33/html/config.html +312 -0
  139. data/bin/Image-ExifTool-9.33/html/data_members.html +265 -0
  140. data/bin/Image-ExifTool-9.33/html/exiftool_pod.html +2338 -0
  141. data/bin/Image-ExifTool-9.33/html/faq.html +1434 -0
  142. data/bin/Image-ExifTool-9.33/html/filename.html +281 -0
  143. data/bin/Image-ExifTool-9.33/html/geotag.html +642 -0
  144. data/bin/Image-ExifTool-9.33/html/history.html +358 -0
  145. data/bin/Image-ExifTool-9.33/html/htmldump.html +732 -0
  146. data/bin/Image-ExifTool-9.33/html/idiosyncracies.html +251 -0
  147. data/bin/Image-ExifTool-9.33/html/index.html +1271 -0
  148. data/bin/Image-ExifTool-9.33/html/install.html +239 -0
  149. data/bin/Image-ExifTool-9.33/html/metafiles.html +266 -0
  150. data/bin/Image-ExifTool-9.33/html/overview.png +0 -0
  151. data/bin/Image-ExifTool-9.33/html/standards.html +277 -0
  152. data/bin/Image-ExifTool-9.33/html/struct.html +342 -0
  153. data/bin/Image-ExifTool-9.33/html/style.css +31 -0
  154. data/bin/Image-ExifTool-9.33/html/under.html +124 -0
  155. data/bin/Image-ExifTool-9.33/html/verbose.html +195 -0
  156. data/bin/Image-ExifTool-9.33/html/writing.html +239 -0
  157. data/bin/Image-ExifTool-9.33/lib/File/RandomAccess.pm +378 -0
  158. data/bin/Image-ExifTool-9.33/lib/File/RandomAccess.pod +231 -0
  159. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool.pm +6815 -0
  160. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool.pod +2385 -0
  161. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/AES.pm +501 -0
  162. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/AFCP.pm +284 -0
  163. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/AIFF.pm +271 -0
  164. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/APE.pm +262 -0
  165. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/APP12.pm +322 -0
  166. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/ASF.pm +884 -0
  167. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/BMP.pm +179 -0
  168. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/BZZ.pm +472 -0
  169. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/BigTIFF.pm +282 -0
  170. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/BuildTagLookup.pm +2400 -0
  171. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Canon.pm +7794 -0
  172. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/CanonCustom.pm +2523 -0
  173. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/CanonRaw.pm +931 -0
  174. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/CanonVRD.pm +1481 -0
  175. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/CaptureOne.pm +235 -0
  176. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Casio.pm +2013 -0
  177. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset.pm +396 -0
  178. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/Arabic.pm +39 -0
  179. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/Baltic.pm +35 -0
  180. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/Cyrillic.pm +45 -0
  181. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/Greek.pm +40 -0
  182. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/Hebrew.pm +36 -0
  183. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/JIS.pm +1735 -0
  184. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/Latin.pm +24 -0
  185. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/Latin2.pm +36 -0
  186. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacArabic.pm +47 -0
  187. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacChineseCN.pm +2088 -0
  188. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacChineseTW.pm +3623 -0
  189. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacCroatian.pm +43 -0
  190. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacCyrillic.pm +47 -0
  191. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacGreek.pm +45 -0
  192. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacHebrew.pm +47 -0
  193. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacIceland.pm +42 -0
  194. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacJapanese.pm +1933 -0
  195. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacKorean.pm +2720 -0
  196. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacLatin2.pm +44 -0
  197. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacRSymbol.pm +2087 -0
  198. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacRoman.pm +42 -0
  199. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacRomanian.pm +42 -0
  200. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacThai.pm +49 -0
  201. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/MacTurkish.pm +42 -0
  202. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/PDFDoc.pm +28 -0
  203. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/ShiftJIS.pm +1835 -0
  204. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/Symbol.pm +54 -0
  205. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/Thai.pm +41 -0
  206. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/Turkish.pm +25 -0
  207. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Charset/Vietnam.pm +27 -0
  208. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/DICOM.pm +3835 -0
  209. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/DNG.pm +835 -0
  210. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/DV.pm +319 -0
  211. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/DarwinCore.pm +317 -0
  212. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/DjVu.pm +376 -0
  213. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/EXE.pm +1228 -0
  214. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Exif.pm +4542 -0
  215. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/FLAC.pm +296 -0
  216. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/FLIR.pm +972 -0
  217. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Fixup.pm +354 -0
  218. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Flash.pm +755 -0
  219. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/FlashPix.pm +1882 -0
  220. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Font.pm +643 -0
  221. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/FotoStation.pm +258 -0
  222. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/FujiFilm.pm +1020 -0
  223. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/GE.pm +80 -0
  224. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/GIF.pm +542 -0
  225. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/GIMP.pm +258 -0
  226. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/GPS.pm +511 -0
  227. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/GeoTiff.pm +2187 -0
  228. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Geotag.pm +1173 -0
  229. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/H264.pm +1102 -0
  230. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/HP.pm +262 -0
  231. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/HTML.pm +576 -0
  232. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/HtmlDump.pm +895 -0
  233. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/ICC_Profile.pm +999 -0
  234. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/ID3.pm +1532 -0
  235. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/IPTC.pm +1244 -0
  236. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/ITC.pm +215 -0
  237. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Import.pm +308 -0
  238. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/InDesign.pm +277 -0
  239. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/JPEG.pm +588 -0
  240. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/JPEGDigest.pm +2511 -0
  241. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/JVC.pm +130 -0
  242. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Jpeg2000.pm +881 -0
  243. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Kodak.pm +2014 -0
  244. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/KyoceraRaw.pm +173 -0
  245. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/LNK.pm +723 -0
  246. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/cs.pm +1586 -0
  247. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/de.pm +7356 -0
  248. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/en_ca.pm +557 -0
  249. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/en_gb.pm +572 -0
  250. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/es.pm +4016 -0
  251. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/fi.pm +2856 -0
  252. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/fr.pm +4720 -0
  253. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/it.pm +7917 -0
  254. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/ja.pm +5815 -0
  255. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/ko.pm +2332 -0
  256. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/nl.pm +3220 -0
  257. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/pl.pm +1140 -0
  258. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/ru.pm +769 -0
  259. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/sv.pm +639 -0
  260. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/tr.pm +544 -0
  261. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/zh_cn.pm +1329 -0
  262. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Lang/zh_tw.pm +802 -0
  263. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Leaf.pm +515 -0
  264. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/M2TS.pm +729 -0
  265. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/MIE.pm +2561 -0
  266. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/MIEUnits.pod +377 -0
  267. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/MIFF.pm +279 -0
  268. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/MNG.pm +684 -0
  269. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/MPC.pm +156 -0
  270. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/MPEG.pm +736 -0
  271. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/MPF.pm +289 -0
  272. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/MWG.pm +736 -0
  273. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/MXF.pm +3032 -0
  274. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/MakerNotes.pm +1573 -0
  275. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Matroska.pm +891 -0
  276. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Microsoft.pm +879 -0
  277. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Minolta.pm +2833 -0
  278. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/MinoltaRaw.pm +534 -0
  279. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Nikon.pm +6116 -0
  280. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/NikonCapture.pm +911 -0
  281. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/NikonCustom.pm +4405 -0
  282. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/OOXML.pm +409 -0
  283. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Ogg.pm +237 -0
  284. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Olympus.pm +3582 -0
  285. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/OpenEXR.pm +324 -0
  286. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/PDF.pm +2327 -0
  287. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/PGF.pm +143 -0
  288. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/PICT.pm +1260 -0
  289. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/PLIST.pm +449 -0
  290. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/PNG.pm +1100 -0
  291. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/PPM.pm +169 -0
  292. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/PSP.pm +305 -0
  293. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Panasonic.pm +1995 -0
  294. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/PanasonicRaw.pm +535 -0
  295. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Pentax.pm +5489 -0
  296. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/PhaseOne.pm +557 -0
  297. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/PhotoCD.pm +507 -0
  298. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/PhotoMechanic.pm +256 -0
  299. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Photoshop.pm +629 -0
  300. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/PostScript.pm +693 -0
  301. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/PrintIM.pm +125 -0
  302. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Qualcomm.pm +1344 -0
  303. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/QuickTime.pm +3519 -0
  304. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/README +944 -0
  305. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/RIFF.pm +1322 -0
  306. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/RSRC.pm +241 -0
  307. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/RTF.pm +383 -0
  308. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Radiance.pm +144 -0
  309. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Rawzor.pm +190 -0
  310. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Real.pm +736 -0
  311. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Reconyx.pm +190 -0
  312. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Ricoh.pm +741 -0
  313. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Samsung.pm +820 -0
  314. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Sanyo.pm +439 -0
  315. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Shift.pl +594 -0
  316. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Shortcuts.pm +291 -0
  317. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Sigma.pm +574 -0
  318. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/SigmaRaw.pm +649 -0
  319. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Sony.pm +5722 -0
  320. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/SonyIDC.pm +330 -0
  321. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Stim.pm +196 -0
  322. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/TagInfoXML.pm +792 -0
  323. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/TagLookup.pm +8005 -0
  324. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/TagNames.pod +25950 -0
  325. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Theora.pm +145 -0
  326. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Unknown.pm +66 -0
  327. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Vorbis.pm +237 -0
  328. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/WriteCanonRaw.pl +637 -0
  329. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/WriteExif.pl +3674 -0
  330. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/WriteIPTC.pl +702 -0
  331. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/WritePDF.pl +759 -0
  332. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/WritePNG.pl +330 -0
  333. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/WritePhotoshop.pl +266 -0
  334. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/WritePostScript.pl +777 -0
  335. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/WriteXMP.pl +1318 -0
  336. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/Writer.pl +5779 -0
  337. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/XMP.pm +3634 -0
  338. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/XMP2.pl +1298 -0
  339. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/XMPStruct.pl +813 -0
  340. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/ZIP.pm +623 -0
  341. data/bin/Image-ExifTool-9.33/lib/Image/ExifTool/iWork.pm +223 -0
  342. data/bin/Image-ExifTool-9.33/perl-Image-ExifTool.spec +104 -0
  343. data/bin/Image-ExifTool-9.33/t/AFCP.t +44 -0
  344. data/bin/Image-ExifTool-9.33/t/AFCP_2.out +37 -0
  345. data/bin/Image-ExifTool-9.33/t/AFCP_3.out +20 -0
  346. data/bin/Image-ExifTool-9.33/t/AIFF.t +28 -0
  347. data/bin/Image-ExifTool-9.33/t/AIFF_2.out +31 -0
  348. data/bin/Image-ExifTool-9.33/t/APE.t +38 -0
  349. data/bin/Image-ExifTool-9.33/t/APE_2.out +28 -0
  350. data/bin/Image-ExifTool-9.33/t/APE_3.out +57 -0
  351. data/bin/Image-ExifTool-9.33/t/ASF.t +28 -0
  352. data/bin/Image-ExifTool-9.33/t/ASF_2.out +54 -0
  353. data/bin/Image-ExifTool-9.33/t/BMP.t +28 -0
  354. data/bin/Image-ExifTool-9.33/t/BMP_2.out +21 -0
  355. data/bin/Image-ExifTool-9.33/t/BigTIFF.t +28 -0
  356. data/bin/Image-ExifTool-9.33/t/BigTIFF_2.out +19 -0
  357. data/bin/Image-ExifTool-9.33/t/Canon.t +41 -0
  358. data/bin/Image-ExifTool-9.33/t/CanonRaw.t +126 -0
  359. data/bin/Image-ExifTool-9.33/t/CanonRaw_2.out +165 -0
  360. data/bin/Image-ExifTool-9.33/t/CanonRaw_4.out +217 -0
  361. data/bin/Image-ExifTool-9.33/t/CanonRaw_5.out +207 -0
  362. data/bin/Image-ExifTool-9.33/t/CanonRaw_6.out +231 -0
  363. data/bin/Image-ExifTool-9.33/t/CanonRaw_7.out +247 -0
  364. data/bin/Image-ExifTool-9.33/t/CanonVRD.t +129 -0
  365. data/bin/Image-ExifTool-9.33/t/CanonVRD_11.out +118 -0
  366. data/bin/Image-ExifTool-9.33/t/CanonVRD_12.out +12 -0
  367. data/bin/Image-ExifTool-9.33/t/CanonVRD_2.out +116 -0
  368. data/bin/Image-ExifTool-9.33/t/CanonVRD_3.out +116 -0
  369. data/bin/Image-ExifTool-9.33/t/CanonVRD_4.out +2 -0
  370. data/bin/Image-ExifTool-9.33/t/CanonVRD_5.out +3 -0
  371. data/bin/Image-ExifTool-9.33/t/CanonVRD_6.out +3 -0
  372. data/bin/Image-ExifTool-9.33/t/CanonVRD_7.out +2 -0
  373. data/bin/Image-ExifTool-9.33/t/CanonVRD_8.out +2 -0
  374. data/bin/Image-ExifTool-9.33/t/CanonVRD_9.out +1 -0
  375. data/bin/Image-ExifTool-9.33/t/Canon_2.out +350 -0
  376. data/bin/Image-ExifTool-9.33/t/Canon_3.out +3 -0
  377. data/bin/Image-ExifTool-9.33/t/Casio.t +54 -0
  378. data/bin/Image-ExifTool-9.33/t/Casio_2.out +70 -0
  379. data/bin/Image-ExifTool-9.33/t/Casio_3.out +100 -0
  380. data/bin/Image-ExifTool-9.33/t/Casio_4.out +26 -0
  381. data/bin/Image-ExifTool-9.33/t/Casio_5.out +78 -0
  382. data/bin/Image-ExifTool-9.33/t/Casio_6.out +115 -0
  383. data/bin/Image-ExifTool-9.33/t/DICOM.t +28 -0
  384. data/bin/Image-ExifTool-9.33/t/DICOM_2.out +108 -0
  385. data/bin/Image-ExifTool-9.33/t/DNG.t +39 -0
  386. data/bin/Image-ExifTool-9.33/t/DNG_2.out +326 -0
  387. data/bin/Image-ExifTool-9.33/t/DNG_3.out +4 -0
  388. data/bin/Image-ExifTool-9.33/t/DV.t +27 -0
  389. data/bin/Image-ExifTool-9.33/t/DV_2.out +24 -0
  390. data/bin/Image-ExifTool-9.33/t/DjVu.t +28 -0
  391. data/bin/Image-ExifTool-9.33/t/DjVu_2.out +44 -0
  392. data/bin/Image-ExifTool-9.33/t/EXE.t +31 -0
  393. data/bin/Image-ExifTool-9.33/t/EXE_2.out +40 -0
  394. data/bin/Image-ExifTool-9.33/t/EXE_3.out +15 -0
  395. data/bin/Image-ExifTool-9.33/t/EXE_4.out +14 -0
  396. data/bin/Image-ExifTool-9.33/t/ExifTool.t +284 -0
  397. data/bin/Image-ExifTool-9.33/t/ExifTool_16.out +180 -0
  398. data/bin/Image-ExifTool-9.33/t/ExifTool_17.out +594 -0
  399. data/bin/Image-ExifTool-9.33/t/ExifTool_2.out +399 -0
  400. data/bin/Image-ExifTool-9.33/t/ExifTool_20.out +1 -0
  401. data/bin/Image-ExifTool-9.33/t/ExifTool_21.out +1 -0
  402. data/bin/Image-ExifTool-9.33/t/ExifTool_22.out +1 -0
  403. data/bin/Image-ExifTool-9.33/t/ExifTool_23.out +6 -0
  404. data/bin/Image-ExifTool-9.33/t/ExifTool_24.out +3 -0
  405. data/bin/Image-ExifTool-9.33/t/ExifTool_25.out +13 -0
  406. data/bin/Image-ExifTool-9.33/t/ExifTool_26.out +12 -0
  407. data/bin/Image-ExifTool-9.33/t/ExifTool_3.out +87 -0
  408. data/bin/Image-ExifTool-9.33/t/ExifTool_4.out +41 -0
  409. data/bin/Image-ExifTool-9.33/t/ExifTool_5.out +6 -0
  410. data/bin/Image-ExifTool-9.33/t/ExifTool_6.out +68 -0
  411. data/bin/Image-ExifTool-9.33/t/ExifTool_7.out +125 -0
  412. data/bin/Image-ExifTool-9.33/t/ExifTool_8.out +125 -0
  413. data/bin/Image-ExifTool-9.33/t/ExifTool_9.out +33 -0
  414. data/bin/Image-ExifTool-9.33/t/FLAC.t +37 -0
  415. data/bin/Image-ExifTool-9.33/t/FLAC_2.out +25 -0
  416. data/bin/Image-ExifTool-9.33/t/FLAC_3.out +19 -0
  417. data/bin/Image-ExifTool-9.33/t/FLIR.t +30 -0
  418. data/bin/Image-ExifTool-9.33/t/FLIR_2.out +104 -0
  419. data/bin/Image-ExifTool-9.33/t/FLIR_3.out +47 -0
  420. data/bin/Image-ExifTool-9.33/t/Flash.t +37 -0
  421. data/bin/Image-ExifTool-9.33/t/FlashPix.t +30 -0
  422. data/bin/Image-ExifTool-9.33/t/FlashPix_2.out +48 -0
  423. data/bin/Image-ExifTool-9.33/t/Flash_2.out +20 -0
  424. data/bin/Image-ExifTool-9.33/t/Flash_3.out +53 -0
  425. data/bin/Image-ExifTool-9.33/t/Font.t +30 -0
  426. data/bin/Image-ExifTool-9.33/t/Font_2.out +23 -0
  427. data/bin/Image-ExifTool-9.33/t/Font_3.out +35 -0
  428. data/bin/Image-ExifTool-9.33/t/Font_4.out +26 -0
  429. data/bin/Image-ExifTool-9.33/t/Font_5.out +26 -0
  430. data/bin/Image-ExifTool-9.33/t/Font_6.out +36 -0
  431. data/bin/Image-ExifTool-9.33/t/Font_7.out +36 -0
  432. data/bin/Image-ExifTool-9.33/t/FotoStation.t +38 -0
  433. data/bin/Image-ExifTool-9.33/t/FotoStation_2.out +39 -0
  434. data/bin/Image-ExifTool-9.33/t/FotoStation_3.out +3 -0
  435. data/bin/Image-ExifTool-9.33/t/FujiFilm.t +78 -0
  436. data/bin/Image-ExifTool-9.33/t/FujiFilm_2.out +87 -0
  437. data/bin/Image-ExifTool-9.33/t/FujiFilm_3.out +88 -0
  438. data/bin/Image-ExifTool-9.33/t/FujiFilm_4.out +117 -0
  439. data/bin/Image-ExifTool-9.33/t/FujiFilm_5.out +1 -0
  440. data/bin/Image-ExifTool-9.33/t/GE.t +46 -0
  441. data/bin/Image-ExifTool-9.33/t/GE_2.out +84 -0
  442. data/bin/Image-ExifTool-9.33/t/GE_3.out +84 -0
  443. data/bin/Image-ExifTool-9.33/t/GIF.t +83 -0
  444. data/bin/Image-ExifTool-9.33/t/GIF_2.out +40 -0
  445. data/bin/Image-ExifTool-9.33/t/GIF_3.out +41 -0
  446. data/bin/Image-ExifTool-9.33/t/GIF_4.out +16 -0
  447. data/bin/Image-ExifTool-9.33/t/GIMP.t +27 -0
  448. data/bin/Image-ExifTool-9.33/t/GIMP_2.out +63 -0
  449. data/bin/Image-ExifTool-9.33/t/GPS.t +42 -0
  450. data/bin/Image-ExifTool-9.33/t/GPS_2.out +94 -0
  451. data/bin/Image-ExifTool-9.33/t/GPS_3.out +96 -0
  452. data/bin/Image-ExifTool-9.33/t/GeoTiff.t +36 -0
  453. data/bin/Image-ExifTool-9.33/t/GeoTiff_2.out +36 -0
  454. data/bin/Image-ExifTool-9.33/t/GeoTiff_3.out +36 -0
  455. data/bin/Image-ExifTool-9.33/t/Geotag.t +164 -0
  456. data/bin/Image-ExifTool-9.33/t/Geotag_2.out +9 -0
  457. data/bin/Image-ExifTool-9.33/t/Geotag_3.out +6 -0
  458. data/bin/Image-ExifTool-9.33/t/Geotag_5.out +1 -0
  459. data/bin/Image-ExifTool-9.33/t/Geotag_6.out +9 -0
  460. data/bin/Image-ExifTool-9.33/t/Geotag_7.out +53 -0
  461. data/bin/Image-ExifTool-9.33/t/Geotag_8.out +15 -0
  462. data/bin/Image-ExifTool-9.33/t/HTML.t +28 -0
  463. data/bin/Image-ExifTool-9.33/t/HTML_2.out +68 -0
  464. data/bin/Image-ExifTool-9.33/t/IPTC.t +157 -0
  465. data/bin/Image-ExifTool-9.33/t/IPTC_2.out +58 -0
  466. data/bin/Image-ExifTool-9.33/t/IPTC_4.out +56 -0
  467. data/bin/Image-ExifTool-9.33/t/IPTC_5.out +1 -0
  468. data/bin/Image-ExifTool-9.33/t/IPTC_6.out +2 -0
  469. data/bin/Image-ExifTool-9.33/t/IPTC_7.out +1 -0
  470. data/bin/Image-ExifTool-9.33/t/IPTC_8.out +20 -0
  471. data/bin/Image-ExifTool-9.33/t/ITC.t +28 -0
  472. data/bin/Image-ExifTool-9.33/t/ITC_2.out +19 -0
  473. data/bin/Image-ExifTool-9.33/t/InDesign.t +61 -0
  474. data/bin/Image-ExifTool-9.33/t/InDesign_2.out +19 -0
  475. data/bin/Image-ExifTool-9.33/t/InDesign_3.out +21 -0
  476. data/bin/Image-ExifTool-9.33/t/InDesign_4.out +11 -0
  477. data/bin/Image-ExifTool-9.33/t/JVC.t +36 -0
  478. data/bin/Image-ExifTool-9.33/t/JVC_2.out +3 -0
  479. data/bin/Image-ExifTool-9.33/t/JVC_3.out +3 -0
  480. data/bin/Image-ExifTool-9.33/t/Jpeg2000.t +49 -0
  481. data/bin/Image-ExifTool-9.33/t/Jpeg2000_2.out +63 -0
  482. data/bin/Image-ExifTool-9.33/t/Jpeg2000_3.out +51 -0
  483. data/bin/Image-ExifTool-9.33/t/Jpeg2000_4.out +15 -0
  484. data/bin/Image-ExifTool-9.33/t/Kodak.t +40 -0
  485. data/bin/Image-ExifTool-9.33/t/Kodak_2.out +109 -0
  486. data/bin/Image-ExifTool-9.33/t/Kodak_3.out +119 -0
  487. data/bin/Image-ExifTool-9.33/t/KyoceraRaw.t +28 -0
  488. data/bin/Image-ExifTool-9.33/t/KyoceraRaw_2.out +27 -0
  489. data/bin/Image-ExifTool-9.33/t/LNK.t +28 -0
  490. data/bin/Image-ExifTool-9.33/t/LNK_2.out +45 -0
  491. data/bin/Image-ExifTool-9.33/t/Lang.t +40 -0
  492. data/bin/Image-ExifTool-9.33/t/Lang_1.out +1 -0
  493. data/bin/Image-ExifTool-9.33/t/Lang_10.out +46 -0
  494. data/bin/Image-ExifTool-9.33/t/Lang_11.out +46 -0
  495. data/bin/Image-ExifTool-9.33/t/Lang_12.out +46 -0
  496. data/bin/Image-ExifTool-9.33/t/Lang_13.out +46 -0
  497. data/bin/Image-ExifTool-9.33/t/Lang_14.out +46 -0
  498. data/bin/Image-ExifTool-9.33/t/Lang_15.out +46 -0
  499. data/bin/Image-ExifTool-9.33/t/Lang_16.out +46 -0
  500. data/bin/Image-ExifTool-9.33/t/Lang_17.out +46 -0
  501. data/bin/Image-ExifTool-9.33/t/Lang_18.out +46 -0
  502. data/bin/Image-ExifTool-9.33/t/Lang_2.out +46 -0
  503. data/bin/Image-ExifTool-9.33/t/Lang_3.out +46 -0
  504. data/bin/Image-ExifTool-9.33/t/Lang_4.out +46 -0
  505. data/bin/Image-ExifTool-9.33/t/Lang_5.out +46 -0
  506. data/bin/Image-ExifTool-9.33/t/Lang_6.out +46 -0
  507. data/bin/Image-ExifTool-9.33/t/Lang_7.out +46 -0
  508. data/bin/Image-ExifTool-9.33/t/Lang_8.out +46 -0
  509. data/bin/Image-ExifTool-9.33/t/Lang_9.out +46 -0
  510. data/bin/Image-ExifTool-9.33/t/M2TS.t +29 -0
  511. data/bin/Image-ExifTool-9.33/t/M2TS_2.out +27 -0
  512. data/bin/Image-ExifTool-9.33/t/MIE.t +82 -0
  513. data/bin/Image-ExifTool-9.33/t/MIE_2.out +67 -0
  514. data/bin/Image-ExifTool-9.33/t/MIE_3.out +134 -0
  515. data/bin/Image-ExifTool-9.33/t/MIE_5.out +1 -0
  516. data/bin/Image-ExifTool-9.33/t/MIE_6.out +1 -0
  517. data/bin/Image-ExifTool-9.33/t/MIFF.t +28 -0
  518. data/bin/Image-ExifTool-9.33/t/MIFF_2.out +108 -0
  519. data/bin/Image-ExifTool-9.33/t/MP3.t +29 -0
  520. data/bin/Image-ExifTool-9.33/t/MP3_2.out +45 -0
  521. data/bin/Image-ExifTool-9.33/t/MWG.t +72 -0
  522. data/bin/Image-ExifTool-9.33/t/MWG_2.out +13 -0
  523. data/bin/Image-ExifTool-9.33/t/MWG_3.out +8 -0
  524. data/bin/Image-ExifTool-9.33/t/MWG_4.out +5 -0
  525. data/bin/Image-ExifTool-9.33/t/MWG_5.out +22 -0
  526. data/bin/Image-ExifTool-9.33/t/MXF.t +27 -0
  527. data/bin/Image-ExifTool-9.33/t/MXF_2.out +78 -0
  528. data/bin/Image-ExifTool-9.33/t/Matroska.t +29 -0
  529. data/bin/Image-ExifTool-9.33/t/Matroska_2.out +64 -0
  530. data/bin/Image-ExifTool-9.33/t/Minolta.t +50 -0
  531. data/bin/Image-ExifTool-9.33/t/Minolta_2.out +133 -0
  532. data/bin/Image-ExifTool-9.33/t/Minolta_3.out +146 -0
  533. data/bin/Image-ExifTool-9.33/t/Minolta_4.out +148 -0
  534. data/bin/Image-ExifTool-9.33/t/Nikon.t +114 -0
  535. data/bin/Image-ExifTool-9.33/t/Nikon_2.out +82 -0
  536. data/bin/Image-ExifTool-9.33/t/Nikon_3.out +98 -0
  537. data/bin/Image-ExifTool-9.33/t/Nikon_4.out +174 -0
  538. data/bin/Image-ExifTool-9.33/t/Nikon_5.out +167 -0
  539. data/bin/Image-ExifTool-9.33/t/Nikon_7.out +260 -0
  540. data/bin/Image-ExifTool-9.33/t/Nikon_8.out +4 -0
  541. data/bin/Image-ExifTool-9.33/t/Olympus.t +85 -0
  542. data/bin/Image-ExifTool-9.33/t/Olympus_2.out +79 -0
  543. data/bin/Image-ExifTool-9.33/t/Olympus_3.out +81 -0
  544. data/bin/Image-ExifTool-9.33/t/Olympus_4.out +192 -0
  545. data/bin/Image-ExifTool-9.33/t/Olympus_5.out +264 -0
  546. data/bin/Image-ExifTool-9.33/t/Olympus_6.out +151 -0
  547. data/bin/Image-ExifTool-9.33/t/Olympus_7.out +482 -0
  548. data/bin/Image-ExifTool-9.33/t/OpenEXR.t +28 -0
  549. data/bin/Image-ExifTool-9.33/t/OpenEXR_2.out +23 -0
  550. data/bin/Image-ExifTool-9.33/t/PDF.t +295 -0
  551. data/bin/Image-ExifTool-9.33/t/PDF_10.out +10 -0
  552. data/bin/Image-ExifTool-9.33/t/PDF_11.out +10 -0
  553. data/bin/Image-ExifTool-9.33/t/PDF_12.out +9 -0
  554. data/bin/Image-ExifTool-9.33/t/PDF_14.out +5 -0
  555. data/bin/Image-ExifTool-9.33/t/PDF_15.out +6 -0
  556. data/bin/Image-ExifTool-9.33/t/PDF_16.out +4 -0
  557. data/bin/Image-ExifTool-9.33/t/PDF_17.out +4 -0
  558. data/bin/Image-ExifTool-9.33/t/PDF_18.out +5 -0
  559. data/bin/Image-ExifTool-9.33/t/PDF_19.out +6 -0
  560. data/bin/Image-ExifTool-9.33/t/PDF_2.out +117 -0
  561. data/bin/Image-ExifTool-9.33/t/PDF_20.out +4 -0
  562. data/bin/Image-ExifTool-9.33/t/PDF_22.out +3 -0
  563. data/bin/Image-ExifTool-9.33/t/PDF_4.out +12 -0
  564. data/bin/Image-ExifTool-9.33/t/PDF_5.out +8 -0
  565. data/bin/Image-ExifTool-9.33/t/PDF_6.out +9 -0
  566. data/bin/Image-ExifTool-9.33/t/PDF_7.out +11 -0
  567. data/bin/Image-ExifTool-9.33/t/PDF_8.out +9 -0
  568. data/bin/Image-ExifTool-9.33/t/PDF_9.out +9 -0
  569. data/bin/Image-ExifTool-9.33/t/PGF.t +28 -0
  570. data/bin/Image-ExifTool-9.33/t/PGF_2.out +32 -0
  571. data/bin/Image-ExifTool-9.33/t/PICT.t +28 -0
  572. data/bin/Image-ExifTool-9.33/t/PICT_2.out +15 -0
  573. data/bin/Image-ExifTool-9.33/t/PLIST.t +31 -0
  574. data/bin/Image-ExifTool-9.33/t/PLIST_2.out +20 -0
  575. data/bin/Image-ExifTool-9.33/t/PLIST_3.out +20 -0
  576. data/bin/Image-ExifTool-9.33/t/PNG.t +75 -0
  577. data/bin/Image-ExifTool-9.33/t/PNG_2.out +22 -0
  578. data/bin/Image-ExifTool-9.33/t/PNG_3.out +118 -0
  579. data/bin/Image-ExifTool-9.33/t/PNG_4.out +12 -0
  580. data/bin/Image-ExifTool-9.33/t/PPM.t +40 -0
  581. data/bin/Image-ExifTool-9.33/t/PPM_2.out +15 -0
  582. data/bin/Image-ExifTool-9.33/t/PPM_3.out +9 -0
  583. data/bin/Image-ExifTool-9.33/t/PSP.t +28 -0
  584. data/bin/Image-ExifTool-9.33/t/PSP_2.out +32 -0
  585. data/bin/Image-ExifTool-9.33/t/Panasonic.t +60 -0
  586. data/bin/Image-ExifTool-9.33/t/Panasonic_2.out +99 -0
  587. data/bin/Image-ExifTool-9.33/t/Panasonic_3.out +119 -0
  588. data/bin/Image-ExifTool-9.33/t/Panasonic_4.out +177 -0
  589. data/bin/Image-ExifTool-9.33/t/Panasonic_5.out +228 -0
  590. data/bin/Image-ExifTool-9.33/t/Pentax.t +50 -0
  591. data/bin/Image-ExifTool-9.33/t/Pentax_2.out +219 -0
  592. data/bin/Image-ExifTool-9.33/t/Pentax_3.out +262 -0
  593. data/bin/Image-ExifTool-9.33/t/Pentax_4.out +123 -0
  594. data/bin/Image-ExifTool-9.33/t/PhotoCD.t +28 -0
  595. data/bin/Image-ExifTool-9.33/t/PhotoCD_2.out +35 -0
  596. data/bin/Image-ExifTool-9.33/t/PhotoMechanic.t +38 -0
  597. data/bin/Image-ExifTool-9.33/t/PhotoMechanic_2.out +81 -0
  598. data/bin/Image-ExifTool-9.33/t/PhotoMechanic_3.out +2 -0
  599. data/bin/Image-ExifTool-9.33/t/Photoshop.t +42 -0
  600. data/bin/Image-ExifTool-9.33/t/Photoshop_2.out +96 -0
  601. data/bin/Image-ExifTool-9.33/t/Photoshop_3.out +108 -0
  602. data/bin/Image-ExifTool-9.33/t/PostScript.t +49 -0
  603. data/bin/Image-ExifTool-9.33/t/PostScript_2.out +64 -0
  604. data/bin/Image-ExifTool-9.33/t/PostScript_3.out +132 -0
  605. data/bin/Image-ExifTool-9.33/t/QuickTime.t +31 -0
  606. data/bin/Image-ExifTool-9.33/t/QuickTime_2.out +128 -0
  607. data/bin/Image-ExifTool-9.33/t/QuickTime_3.out +69 -0
  608. data/bin/Image-ExifTool-9.33/t/RIFF.t +31 -0
  609. data/bin/Image-ExifTool-9.33/t/RIFF_2.out +24 -0
  610. data/bin/Image-ExifTool-9.33/t/RIFF_3.out +52 -0
  611. data/bin/Image-ExifTool-9.33/t/RIFF_4.out +16 -0
  612. data/bin/Image-ExifTool-9.33/t/RTF.t +27 -0
  613. data/bin/Image-ExifTool-9.33/t/RTF_2.out +20 -0
  614. data/bin/Image-ExifTool-9.33/t/Radiance.t +28 -0
  615. data/bin/Image-ExifTool-9.33/t/Radiance_2.out +22 -0
  616. data/bin/Image-ExifTool-9.33/t/Real.t +46 -0
  617. data/bin/Image-ExifTool-9.33/t/Real_2.out +68 -0
  618. data/bin/Image-ExifTool-9.33/t/Real_3.out +18 -0
  619. data/bin/Image-ExifTool-9.33/t/Real_4.out +11 -0
  620. data/bin/Image-ExifTool-9.33/t/Ricoh.t +47 -0
  621. data/bin/Image-ExifTool-9.33/t/Ricoh_2.out +70 -0
  622. data/bin/Image-ExifTool-9.33/t/Ricoh_3.out +98 -0
  623. data/bin/Image-ExifTool-9.33/t/Ricoh_4.out +112 -0
  624. data/bin/Image-ExifTool-9.33/t/Sanyo.t +39 -0
  625. data/bin/Image-ExifTool-9.33/t/Sanyo_2.out +101 -0
  626. data/bin/Image-ExifTool-9.33/t/Sanyo_3.out +111 -0
  627. data/bin/Image-ExifTool-9.33/t/Sigma.t +60 -0
  628. data/bin/Image-ExifTool-9.33/t/Sigma_2.out +91 -0
  629. data/bin/Image-ExifTool-9.33/t/Sigma_3.out +94 -0
  630. data/bin/Image-ExifTool-9.33/t/Sigma_4.out +63 -0
  631. data/bin/Image-ExifTool-9.33/t/Sigma_5.out +192 -0
  632. data/bin/Image-ExifTool-9.33/t/Sony.t +62 -0
  633. data/bin/Image-ExifTool-9.33/t/Sony_2.out +84 -0
  634. data/bin/Image-ExifTool-9.33/t/Sony_3.out +85 -0
  635. data/bin/Image-ExifTool-9.33/t/Sony_5.out +32 -0
  636. data/bin/Image-ExifTool-9.33/t/TestLib.pm +417 -0
  637. data/bin/Image-ExifTool-9.33/t/Unknown.t +36 -0
  638. data/bin/Image-ExifTool-9.33/t/Unknown_2.out +90 -0
  639. data/bin/Image-ExifTool-9.33/t/Unknown_3.out +90 -0
  640. data/bin/Image-ExifTool-9.33/t/Vorbis.t +28 -0
  641. data/bin/Image-ExifTool-9.33/t/Vorbis_2.out +28 -0
  642. data/bin/Image-ExifTool-9.33/t/Writer.t +913 -0
  643. data/bin/Image-ExifTool-9.33/t/Writer_10.out +240 -0
  644. data/bin/Image-ExifTool-9.33/t/Writer_11.out +37 -0
  645. data/bin/Image-ExifTool-9.33/t/Writer_13.out +160 -0
  646. data/bin/Image-ExifTool-9.33/t/Writer_14.out +67 -0
  647. data/bin/Image-ExifTool-9.33/t/Writer_15.out +171 -0
  648. data/bin/Image-ExifTool-9.33/t/Writer_16.out +1 -0
  649. data/bin/Image-ExifTool-9.33/t/Writer_17.out +1 -0
  650. data/bin/Image-ExifTool-9.33/t/Writer_18.out +3 -0
  651. data/bin/Image-ExifTool-9.33/t/Writer_19.out +34 -0
  652. data/bin/Image-ExifTool-9.33/t/Writer_2.out +168 -0
  653. data/bin/Image-ExifTool-9.33/t/Writer_22.out +4 -0
  654. data/bin/Image-ExifTool-9.33/t/Writer_24.out +1 -0
  655. data/bin/Image-ExifTool-9.33/t/Writer_25.out +38 -0
  656. data/bin/Image-ExifTool-9.33/t/Writer_26.out +32 -0
  657. data/bin/Image-ExifTool-9.33/t/Writer_27.out +14 -0
  658. data/bin/Image-ExifTool-9.33/t/Writer_28.out +1 -0
  659. data/bin/Image-ExifTool-9.33/t/Writer_29.out +2 -0
  660. data/bin/Image-ExifTool-9.33/t/Writer_30.out +2 -0
  661. data/bin/Image-ExifTool-9.33/t/Writer_31.out +97 -0
  662. data/bin/Image-ExifTool-9.33/t/Writer_32.out +3 -0
  663. data/bin/Image-ExifTool-9.33/t/Writer_33.out +3 -0
  664. data/bin/Image-ExifTool-9.33/t/Writer_34.out +3 -0
  665. data/bin/Image-ExifTool-9.33/t/Writer_35.out +187 -0
  666. data/bin/Image-ExifTool-9.33/t/Writer_36.out +2 -0
  667. data/bin/Image-ExifTool-9.33/t/Writer_37.out +2 -0
  668. data/bin/Image-ExifTool-9.33/t/Writer_38.out +62 -0
  669. data/bin/Image-ExifTool-9.33/t/Writer_39.out +4 -0
  670. data/bin/Image-ExifTool-9.33/t/Writer_4.out +85 -0
  671. data/bin/Image-ExifTool-9.33/t/Writer_40.out +4 -0
  672. data/bin/Image-ExifTool-9.33/t/Writer_41.out +3 -0
  673. data/bin/Image-ExifTool-9.33/t/Writer_42.out +5 -0
  674. data/bin/Image-ExifTool-9.33/t/Writer_43.out +5 -0
  675. data/bin/Image-ExifTool-9.33/t/Writer_44.out +2 -0
  676. data/bin/Image-ExifTool-9.33/t/Writer_45.out +1 -0
  677. data/bin/Image-ExifTool-9.33/t/Writer_46.out +77 -0
  678. data/bin/Image-ExifTool-9.33/t/Writer_47.out +56 -0
  679. data/bin/Image-ExifTool-9.33/t/Writer_48.out +29 -0
  680. data/bin/Image-ExifTool-9.33/t/Writer_50.out +3 -0
  681. data/bin/Image-ExifTool-9.33/t/Writer_51.out +386 -0
  682. data/bin/Image-ExifTool-9.33/t/Writer_6.out +182 -0
  683. data/bin/Image-ExifTool-9.33/t/Writer_7.out +149 -0
  684. data/bin/Image-ExifTool-9.33/t/Writer_9.out +237 -0
  685. data/bin/Image-ExifTool-9.33/t/XMP.t +521 -0
  686. data/bin/Image-ExifTool-9.33/t/XMP_10.out +33 -0
  687. data/bin/Image-ExifTool-9.33/t/XMP_11.out +59 -0
  688. data/bin/Image-ExifTool-9.33/t/XMP_12.out +4 -0
  689. data/bin/Image-ExifTool-9.33/t/XMP_13.out +5 -0
  690. data/bin/Image-ExifTool-9.33/t/XMP_14.out +3 -0
  691. data/bin/Image-ExifTool-9.33/t/XMP_15.out +3 -0
  692. data/bin/Image-ExifTool-9.33/t/XMP_16.out +5 -0
  693. data/bin/Image-ExifTool-9.33/t/XMP_17.out +6 -0
  694. data/bin/Image-ExifTool-9.33/t/XMP_18.out +10 -0
  695. data/bin/Image-ExifTool-9.33/t/XMP_19.out +35 -0
  696. data/bin/Image-ExifTool-9.33/t/XMP_2.out +138 -0
  697. data/bin/Image-ExifTool-9.33/t/XMP_20.out +35 -0
  698. data/bin/Image-ExifTool-9.33/t/XMP_21.out +38 -0
  699. data/bin/Image-ExifTool-9.33/t/XMP_22.out +38 -0
  700. data/bin/Image-ExifTool-9.33/t/XMP_23.out +9 -0
  701. data/bin/Image-ExifTool-9.33/t/XMP_24.out +31 -0
  702. data/bin/Image-ExifTool-9.33/t/XMP_25.out +28 -0
  703. data/bin/Image-ExifTool-9.33/t/XMP_26.out +52 -0
  704. data/bin/Image-ExifTool-9.33/t/XMP_27.out +93 -0
  705. data/bin/Image-ExifTool-9.33/t/XMP_28.out +44 -0
  706. data/bin/Image-ExifTool-9.33/t/XMP_29.out +24 -0
  707. data/bin/Image-ExifTool-9.33/t/XMP_3.out +136 -0
  708. data/bin/Image-ExifTool-9.33/t/XMP_30.out +90 -0
  709. data/bin/Image-ExifTool-9.33/t/XMP_31.out +19 -0
  710. data/bin/Image-ExifTool-9.33/t/XMP_32.out +2 -0
  711. data/bin/Image-ExifTool-9.33/t/XMP_34.out +2 -0
  712. data/bin/Image-ExifTool-9.33/t/XMP_36.out +18 -0
  713. data/bin/Image-ExifTool-9.33/t/XMP_37.out +35 -0
  714. data/bin/Image-ExifTool-9.33/t/XMP_39.out +44 -0
  715. data/bin/Image-ExifTool-9.33/t/XMP_40.out +3 -0
  716. data/bin/Image-ExifTool-9.33/t/XMP_41.out +175 -0
  717. data/bin/Image-ExifTool-9.33/t/XMP_5.out +29 -0
  718. data/bin/Image-ExifTool-9.33/t/XMP_6.out +87 -0
  719. data/bin/Image-ExifTool-9.33/t/XMP_7.out +118 -0
  720. data/bin/Image-ExifTool-9.33/t/XMP_8.out +17 -0
  721. data/bin/Image-ExifTool-9.33/t/XMP_9.out +36 -0
  722. data/bin/Image-ExifTool-9.33/t/ZIP.t +69 -0
  723. data/bin/Image-ExifTool-9.33/t/ZIP_2.out +18 -0
  724. data/bin/Image-ExifTool-9.33/t/ZIP_3.out +17 -0
  725. data/bin/Image-ExifTool-9.33/t/ZIP_4.out +213 -0
  726. data/bin/Image-ExifTool-9.33/t/ZIP_5.out +134 -0
  727. data/bin/Image-ExifTool-9.33/t/ZIP_6.out +49 -0
  728. data/bin/Image-ExifTool-9.33/t/ZIP_7.out +28 -0
  729. data/bin/Image-ExifTool-9.33/t/images/AFCP.jpg +0 -0
  730. data/bin/Image-ExifTool-9.33/t/images/AIFF.aif +0 -0
  731. data/bin/Image-ExifTool-9.33/t/images/APE.ape +0 -0
  732. data/bin/Image-ExifTool-9.33/t/images/APE.mpc +0 -0
  733. data/bin/Image-ExifTool-9.33/t/images/ASF.wmv +0 -0
  734. data/bin/Image-ExifTool-9.33/t/images/BMP.bmp +0 -0
  735. data/bin/Image-ExifTool-9.33/t/images/BigTIFF.btf +0 -0
  736. data/bin/Image-ExifTool-9.33/t/images/Canon.jpg +0 -0
  737. data/bin/Image-ExifTool-9.33/t/images/Canon1DmkIII.jpg +0 -0
  738. data/bin/Image-ExifTool-9.33/t/images/CanonRaw.cr2 +0 -0
  739. data/bin/Image-ExifTool-9.33/t/images/CanonRaw.crw +0 -0
  740. data/bin/Image-ExifTool-9.33/t/images/CanonVRD.vrd +0 -0
  741. data/bin/Image-ExifTool-9.33/t/images/CaptureOne.eip +0 -0
  742. data/bin/Image-ExifTool-9.33/t/images/Casio.jpg +0 -0
  743. data/bin/Image-ExifTool-9.33/t/images/Casio2.jpg +0 -0
  744. data/bin/Image-ExifTool-9.33/t/images/CasioQVCI.jpg +0 -0
  745. data/bin/Image-ExifTool-9.33/t/images/DICOM.dcm +0 -0
  746. data/bin/Image-ExifTool-9.33/t/images/DNG.dng +0 -0
  747. data/bin/Image-ExifTool-9.33/t/images/DV.dv +0 -0
  748. data/bin/Image-ExifTool-9.33/t/images/DjVu.djvu +0 -0
  749. data/bin/Image-ExifTool-9.33/t/images/EXE.elf +0 -0
  750. data/bin/Image-ExifTool-9.33/t/images/EXE.exe +0 -0
  751. data/bin/Image-ExifTool-9.33/t/images/EXE.macho +0 -0
  752. data/bin/Image-ExifTool-9.33/t/images/ExifTool.jpg +0 -0
  753. data/bin/Image-ExifTool-9.33/t/images/ExifTool.tif +0 -0
  754. data/bin/Image-ExifTool-9.33/t/images/ExtendedXMP.jpg +0 -0
  755. data/bin/Image-ExifTool-9.33/t/images/FLAC.flac +0 -0
  756. data/bin/Image-ExifTool-9.33/t/images/FLAC.ogg +0 -0
  757. data/bin/Image-ExifTool-9.33/t/images/FLIR.fpf +0 -0
  758. data/bin/Image-ExifTool-9.33/t/images/FLIR.jpg +0 -0
  759. data/bin/Image-ExifTool-9.33/t/images/Flash.flv +0 -0
  760. data/bin/Image-ExifTool-9.33/t/images/Flash.swf +0 -0
  761. data/bin/Image-ExifTool-9.33/t/images/FlashPix.ppt +0 -0
  762. data/bin/Image-ExifTool-9.33/t/images/Font.afm +28 -0
  763. data/bin/Image-ExifTool-9.33/t/images/Font.dfont +0 -0
  764. data/bin/Image-ExifTool-9.33/t/images/Font.pfa +38 -0
  765. data/bin/Image-ExifTool-9.33/t/images/Font.pfb +0 -0
  766. data/bin/Image-ExifTool-9.33/t/images/Font.pfm +0 -0
  767. data/bin/Image-ExifTool-9.33/t/images/Font.ttf +0 -0
  768. data/bin/Image-ExifTool-9.33/t/images/FotoStation.jpg +0 -0
  769. data/bin/Image-ExifTool-9.33/t/images/FujiFilm.jpg +0 -0
  770. data/bin/Image-ExifTool-9.33/t/images/FujiFilm.raf +0 -0
  771. data/bin/Image-ExifTool-9.33/t/images/GE.jpg +0 -0
  772. data/bin/Image-ExifTool-9.33/t/images/GIF.gif +0 -0
  773. data/bin/Image-ExifTool-9.33/t/images/GIMP.xcf +0 -0
  774. data/bin/Image-ExifTool-9.33/t/images/GPS.jpg +0 -0
  775. data/bin/Image-ExifTool-9.33/t/images/GeoTiff.tif +0 -0
  776. data/bin/Image-ExifTool-9.33/t/images/Geotag.gpx +23 -0
  777. data/bin/Image-ExifTool-9.33/t/images/Geotag.igc +24 -0
  778. data/bin/Image-ExifTool-9.33/t/images/Geotag.log +13 -0
  779. data/bin/Image-ExifTool-9.33/t/images/Geotag.xml +23 -0
  780. data/bin/Image-ExifTool-9.33/t/images/Geotag2.log +7 -0
  781. data/bin/Image-ExifTool-9.33/t/images/HTML.html +77 -0
  782. data/bin/Image-ExifTool-9.33/t/images/IPTC.jpg +0 -0
  783. data/bin/Image-ExifTool-9.33/t/images/ITC.itc +0 -0
  784. data/bin/Image-ExifTool-9.33/t/images/InDesign.indd +0 -0
  785. data/bin/Image-ExifTool-9.33/t/images/JVC.jpg +0 -0
  786. data/bin/Image-ExifTool-9.33/t/images/JVC2.jpg +0 -0
  787. data/bin/Image-ExifTool-9.33/t/images/Jpeg2000.j2c +0 -0
  788. data/bin/Image-ExifTool-9.33/t/images/Jpeg2000.jp2 +0 -0
  789. data/bin/Image-ExifTool-9.33/t/images/Kodak.jpg +0 -0
  790. data/bin/Image-ExifTool-9.33/t/images/KyoceraRaw.raw +0 -0
  791. data/bin/Image-ExifTool-9.33/t/images/LNK.lnk +0 -0
  792. data/bin/Image-ExifTool-9.33/t/images/M2TS.mts +0 -0
  793. data/bin/Image-ExifTool-9.33/t/images/MIE.mie +0 -0
  794. data/bin/Image-ExifTool-9.33/t/images/MIFF.miff +0 -0
  795. data/bin/Image-ExifTool-9.33/t/images/MP3.mp3 +0 -0
  796. data/bin/Image-ExifTool-9.33/t/images/MWG.jpg +0 -0
  797. data/bin/Image-ExifTool-9.33/t/images/MXF.mxf +0 -0
  798. data/bin/Image-ExifTool-9.33/t/images/Matroska.mkv +0 -0
  799. data/bin/Image-ExifTool-9.33/t/images/Minolta.jpg +0 -0
  800. data/bin/Image-ExifTool-9.33/t/images/Minolta.mrw +0 -0
  801. data/bin/Image-ExifTool-9.33/t/images/Nikon.jpg +0 -0
  802. data/bin/Image-ExifTool-9.33/t/images/Nikon.nef +0 -0
  803. data/bin/Image-ExifTool-9.33/t/images/NikonD2Hs.jpg +0 -0
  804. data/bin/Image-ExifTool-9.33/t/images/NikonD70.jpg +0 -0
  805. data/bin/Image-ExifTool-9.33/t/images/OOXML.docx +0 -0
  806. data/bin/Image-ExifTool-9.33/t/images/Olympus.jpg +0 -0
  807. data/bin/Image-ExifTool-9.33/t/images/Olympus2.jpg +0 -0
  808. data/bin/Image-ExifTool-9.33/t/images/OlympusE1.jpg +0 -0
  809. data/bin/Image-ExifTool-9.33/t/images/OpenDoc.ods +0 -0
  810. data/bin/Image-ExifTool-9.33/t/images/OpenEXR.exr +0 -0
  811. data/bin/Image-ExifTool-9.33/t/images/PDF.pdf +0 -0
  812. data/bin/Image-ExifTool-9.33/t/images/PDF2.pdf +0 -0
  813. data/bin/Image-ExifTool-9.33/t/images/PGF.pgf +0 -0
  814. data/bin/Image-ExifTool-9.33/t/images/PICT.pict +0 -0
  815. data/bin/Image-ExifTool-9.33/t/images/PLIST-bin.plist +0 -0
  816. data/bin/Image-ExifTool-9.33/t/images/PLIST-xml.plist +35 -0
  817. data/bin/Image-ExifTool-9.33/t/images/PNG.png +0 -0
  818. data/bin/Image-ExifTool-9.33/t/images/PPM.ppm +5 -0
  819. data/bin/Image-ExifTool-9.33/t/images/PSP.psp +0 -0
  820. data/bin/Image-ExifTool-9.33/t/images/Panasonic.jpg +0 -0
  821. data/bin/Image-ExifTool-9.33/t/images/Panasonic.rw2 +0 -0
  822. data/bin/Image-ExifTool-9.33/t/images/Pentax.avi +0 -0
  823. data/bin/Image-ExifTool-9.33/t/images/Pentax.jpg +0 -0
  824. data/bin/Image-ExifTool-9.33/t/images/PhotoCD.pcd +0 -0
  825. data/bin/Image-ExifTool-9.33/t/images/PhotoMechanic.jpg +0 -0
  826. data/bin/Image-ExifTool-9.33/t/images/Photoshop.psd +0 -0
  827. data/bin/Image-ExifTool-9.33/t/images/PostScript.eps +108 -0
  828. data/bin/Image-ExifTool-9.33/t/images/QuickTime.m4a +0 -0
  829. data/bin/Image-ExifTool-9.33/t/images/QuickTime.mov +0 -0
  830. data/bin/Image-ExifTool-9.33/t/images/RIFF.avi +0 -0
  831. data/bin/Image-ExifTool-9.33/t/images/RIFF.wav +0 -0
  832. data/bin/Image-ExifTool-9.33/t/images/RIFF.webp +0 -0
  833. data/bin/Image-ExifTool-9.33/t/images/RTF.rtf +25 -0
  834. data/bin/Image-ExifTool-9.33/t/images/Radiance.hdr +0 -0
  835. data/bin/Image-ExifTool-9.33/t/images/Real.ra +0 -0
  836. data/bin/Image-ExifTool-9.33/t/images/Real.ram +1 -0
  837. data/bin/Image-ExifTool-9.33/t/images/Real.rm +0 -0
  838. data/bin/Image-ExifTool-9.33/t/images/Ricoh.jpg +0 -0
  839. data/bin/Image-ExifTool-9.33/t/images/Ricoh2.jpg +0 -0
  840. data/bin/Image-ExifTool-9.33/t/images/Sanyo.jpg +0 -0
  841. data/bin/Image-ExifTool-9.33/t/images/Sigma.jpg +0 -0
  842. data/bin/Image-ExifTool-9.33/t/images/Sigma.x3f +0 -0
  843. data/bin/Image-ExifTool-9.33/t/images/SigmaDP2.x3f +0 -0
  844. data/bin/Image-ExifTool-9.33/t/images/Sony.jpg +0 -0
  845. data/bin/Image-ExifTool-9.33/t/images/Sony.pmp +0 -0
  846. data/bin/Image-ExifTool-9.33/t/images/Unknown.jpg +0 -0
  847. data/bin/Image-ExifTool-9.33/t/images/Vorbis.ogg +0 -0
  848. data/bin/Image-ExifTool-9.33/t/images/Writer.jpg +0 -0
  849. data/bin/Image-ExifTool-9.33/t/images/XMP.inx +108 -0
  850. data/bin/Image-ExifTool-9.33/t/images/XMP.jpg +0 -0
  851. data/bin/Image-ExifTool-9.33/t/images/XMP.svg +33 -0
  852. data/bin/Image-ExifTool-9.33/t/images/XMP.xml +98 -0
  853. data/bin/Image-ExifTool-9.33/t/images/XMP.xmp +99 -0
  854. data/bin/Image-ExifTool-9.33/t/images/XMP2.xmp +25 -0
  855. data/bin/Image-ExifTool-9.33/t/images/XMP3.xmp +43 -0
  856. data/bin/Image-ExifTool-9.33/t/images/XMP4.xmp +93 -0
  857. data/bin/Image-ExifTool-9.33/t/images/XMP5.xmp +158 -0
  858. data/bin/Image-ExifTool-9.33/t/images/ZIP.gz +0 -0
  859. data/bin/Image-ExifTool-9.33/t/images/ZIP.zip +0 -0
  860. data/bin/Image-ExifTool-9.33/t/images/iWork.numbers +0 -0
  861. data/lib/exiftool_vendored.rb +10 -0
  862. data/lib/exiftool_vendored/version.rb +3 -0
  863. data/lib/exiftool_vendored/version_extractor.rb +17 -0
  864. metadata +977 -0
@@ -0,0 +1,1995 @@
1
+ #------------------------------------------------------------------------------
2
+ # File: Panasonic.pm
3
+ #
4
+ # Description: Panasonic/Leica maker notes tags
5
+ #
6
+ # Revisions: 11/10/2004 - P. Harvey Created
7
+ #
8
+ # References: 1) http://www.compton.nu/panasonic.html (based on FZ10)
9
+ # 2) Derived from DMC-FZ3 samples from dpreview.com
10
+ # 3) http://johnst.org/sw/exiftags/
11
+ # 4) Tels (http://bloodgate.com/) private communication (tests with FZ5)
12
+ # 7) http://homepage3.nifty.com/kamisaka/makernote/makernote_pana.htm (2007/10/02)
13
+ # 8) Marcel Coenen private communication (DMC-FZ50)
14
+ # 9) http://forums.dpreview.com/forums/read.asp?forum=1033&message=22756430
15
+ # 10) http://bretteville.com/pdfs/M8Metadata_v2.pdf
16
+ # 11) http://www.digital-leica.com/lens_codes/index.html
17
+ # 12) Joerg - http://www.cpanforum.com/threads/11602 (LX3 firmware 2.0)
18
+ # 13) Michael Byczkowski private communication (Leica M9)
19
+ # 14) Carl Bretteville private communication (M9)
20
+ # 15) Zdenek Mihula private communication (TZ8)
21
+ # 16) Olaf Ulrich private communication
22
+ # 17) http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,4922.0.html
23
+ # 18) Thomas private communication (G6)
24
+ # JD) Jens Duttke private communication (TZ3,FZ30,FZ50)
25
+ #------------------------------------------------------------------------------
26
+
27
+ package Image::ExifTool::Panasonic;
28
+
29
+ use strict;
30
+ use vars qw($VERSION %leicaLensTypes);
31
+ use Image::ExifTool qw(:DataAccess :Utils);
32
+ use Image::ExifTool::Exif;
33
+
34
+ $VERSION = '1.74';
35
+
36
+ sub ProcessPanasonicType2($$$);
37
+ sub WhiteBalanceConv($;$$);
38
+
39
+ # Leica lens types (ref 10)
40
+ %leicaLensTypes = (
41
+ OTHER => sub {
42
+ my ($val, $inv, $conv) = @_;
43
+ return undef if $inv or not $val =~ s/ .*//;
44
+ return $$conv{$val};
45
+ },
46
+ Notes => q{
47
+ the LensType value is obtained by splitting the stored value into 2
48
+ integers: The stored value divided by 4, and its lower 2 bits. The second
49
+ number is used only if necessary to identify certain manually coded lenses
50
+ on the M9, or the focal length of some multi-focal lenses.
51
+ },
52
+ # All M9 codes (two numbers: first the LensID then the lower 2 bits)
53
+ # are ref PH with samples from ref 13. From ref 10, the lower 2 bits of
54
+ # the LensType value give the frame selector position for most lenses,
55
+ # although for the 28-35-50mm (at least) it gives the focal length selection.
56
+ # The M9 also gives the focal length selection but for other lenses the
57
+ # lower 3 bits don't change with frame selector position except for the lens
58
+ # shows as uncoded for certain lenses and some incorrect positions of the
59
+ # frame selector. The bits are zero for uncoded lenses when manually coding
60
+ # from the menu on the M9. - PH
61
+ # Frame selector bits (from ref 10, M8):
62
+ # 1 => '28/90mm frame lines engaged',
63
+ # 2 => '24/35mm frame lines engaged',
64
+ # 3 => '50/75mm frame lines engaged',
65
+ '0 0' => 'Uncoded lens',
66
+ #
67
+ # NOTE: MUST ADD ENTRY TO %frameSelectorBits below when a new lens is added!!!!
68
+ #
69
+ # model number(s):
70
+ 1 => 'Elmarit-M 21mm f/2.8', # 11134
71
+ 3 => 'Elmarit-M 28mm f/2.8 (III)', # 11804
72
+ 4 => 'Tele-Elmarit-M 90mm f/2.8 (II)', # 11800
73
+ 5 => 'Summilux-M 50mm f/1.4 (II)', # 11868/11856/11114
74
+ 6 => 'Summicron-M 35mm f/2 (IV)', # 11310/11311
75
+ '6 0' => 'Summilux-M 35mm f/1.4', # 11869/11870/11860
76
+ 7 => 'Summicron-M 90mm f/2 (II)', # 11136/11137
77
+ 9 => 'Elmarit-M 135mm f/2.8 (I/II)', # 11829
78
+ '9 0' => 'Apo-Telyt-M 135mm f/3.4', # 11889
79
+ 16 => 'Tri-Elmar-M 16-18-21mm f/4 ASPH.',# 11626
80
+ '16 1' => 'Tri-Elmar-M 16-18-21mm f/4 ASPH. (at 16mm)',
81
+ '16 2' => 'Tri-Elmar-M 16-18-21mm f/4 ASPH. (at 18mm)',
82
+ '16 3' => 'Tri-Elmar-M 16-18-21mm f/4 ASPH. (at 21mm)',
83
+ 23 => 'Summicron-M 50mm f/2 (III)', # 11817, version (I) in camera menu
84
+ 24 => 'Elmarit-M 21mm f/2.8 ASPH.', # 11135/11897
85
+ 25 => 'Elmarit-M 24mm f/2.8 ASPH.', # 11878/11898
86
+ 26 => 'Summicron-M 28mm f/2 ASPH.', # 11604
87
+ 27 => 'Elmarit-M 28mm f/2.8 (IV)', # 11809
88
+ 28 => 'Elmarit-M 28mm f/2.8 ASPH.', # 11606
89
+ 29 => 'Summilux-M 35mm f/1.4 ASPH.', # 11874/11883
90
+ '29 0' => 'Summilux-M 35mm f/1.4 ASPHERICAL', # 11873 (different from "ASPH." model!)
91
+ 30 => 'Summicron-M 35mm f/2 ASPH.', # 11879/11882
92
+ 31 => 'Noctilux-M 50mm f/1', # 11821/11822
93
+ '31 0' => 'Noctilux-M 50mm f/1.2', # 11820
94
+ 32 => 'Summilux-M 50mm f/1.4 ASPH.', # 11891/11892
95
+ 33 => 'Summicron-M 50mm f/2 (IV, V)', # 11819/11825/11826/11816, version (II,III) in camera menu
96
+ 34 => 'Elmar-M 50mm f/2.8', # 11831/11823/11825
97
+ 35 => 'Summilux-M 75mm f/1.4', # 11814/11815/11810
98
+ 36 => 'Apo-Summicron-M 75mm f/2 ASPH.', # 11637
99
+ 37 => 'Apo-Summicron-M 90mm f/2 ASPH.', # 11884/11885
100
+ 38 => 'Elmarit-M 90mm f/2.8', # 11807/11808, version (II) in camera menu
101
+ 39 => 'Macro-Elmar-M 90mm f/4', # 11633/11634
102
+ '39 0' => 'Tele-Elmar-M 135mm f/4 (II)',# 11861
103
+ 40 => 'Macro-Adapter M', # 14409
104
+ '41 3' => 'Apo-Summicron-M 50mm f/2 Asph', #16
105
+ 42 => 'Tri-Elmar-M 28-35-50mm f/4 ASPH.',# 11625
106
+ '42 1' => 'Tri-Elmar-M 28-35-50mm f/4 ASPH. (at 28mm)',
107
+ '42 2' => 'Tri-Elmar-M 28-35-50mm f/4 ASPH. (at 35mm)',
108
+ '42 3' => 'Tri-Elmar-M 28-35-50mm f/4 ASPH. (at 50mm)',
109
+ 43 => 'Summarit-M 35mm f/2.5', # ? (ref PH)
110
+ 44 => 'Summarit-M 50mm f/2.5', # ? (ref PH)
111
+ 45 => 'Summarit-M 75mm f/2.5', # ? (ref PH)
112
+ 46 => 'Summarit-M 90mm f/2.5', # ?
113
+ 47 => 'Summilux-M 21mm f/1.4 ASPH.', # ? (ref 11)
114
+ 48 => 'Summilux-M 24mm f/1.4 ASPH.', # ? (ref 11)
115
+ 49 => 'Noctilux-M 50mm f/0.95 ASPH.', # ? (ref 11)
116
+ 50 => 'Elmar-M 24mm f/3.8 ASPH.', # ? (ref 11)
117
+ 51 => 'Super-Elmar-M 21mm f/3.4 Asph', # ? (ref 16, frameSelectorBits=1)
118
+ '51 2' => 'Super-Elmar-M 14mm f/3.8 Asph', # ? (ref 16)
119
+ 52 => 'Super-Elmar-M 18mm f/3.8 ASPH.', # ? (ref PH/11)
120
+ '53 2' => 'Apo-Telyt-M 135mm f/3.4', #16
121
+ );
122
+
123
+ # M9 frame selector bits for each lens
124
+ # 1 = towards lens = 28/90mm or 21mm or Adapter (or Elmarit-M 135mm f/2.8)
125
+ # 2 = away from lens = 24/35mm (or 35/135mm on the M9)
126
+ # 3 = middle position = 50/75mm or 18mm
127
+ my %frameSelectorBits = (
128
+ 1 => 1,
129
+ 3 => 1,
130
+ 4 => 1,
131
+ 5 => 3,
132
+ 6 => 2,
133
+ 7 => 1,
134
+ 9 => 1, # (because lens has special magnifier for the rangefinder)
135
+ 16 => 1, # or 2 or 3
136
+ 23 => 3,
137
+ 24 => 1,
138
+ 25 => 2,
139
+ 26 => 1,
140
+ 27 => 1,
141
+ 28 => 1,
142
+ 29 => 2,
143
+ 30 => 2,
144
+ 31 => 3,
145
+ 32 => 3,
146
+ 33 => 3,
147
+ 34 => 3,
148
+ 35 => 3,
149
+ 36 => 3,
150
+ 37 => 1,
151
+ 38 => 1,
152
+ 39 => 1,
153
+ 40 => 1,
154
+ 42 => 1, # or 2 or 3
155
+ 43 => 2, # (NC)
156
+ 44 => 3, # (NC)
157
+ 45 => 3,
158
+ 46 => 1, # (NC)
159
+ 47 => 1, # (NC)
160
+ 48 => 2, # (NC)
161
+ 49 => 3, # (NC)
162
+ 50 => 2, # (NC)
163
+ 51 => 1, # or 2 (ref 16)
164
+ 52 => 3,
165
+ 53 => 2, #16
166
+ );
167
+
168
+ # conversions for ShootingMode and SceneMode
169
+ my %shootingMode = (
170
+ 1 => 'Normal',
171
+ 2 => 'Portrait',
172
+ 3 => 'Scenery',
173
+ 4 => 'Sports',
174
+ 5 => 'Night Portrait',
175
+ 6 => 'Program',
176
+ 7 => 'Aperture Priority',
177
+ 8 => 'Shutter Priority',
178
+ 9 => 'Macro',
179
+ 10 => 'Spot', #7
180
+ 11 => 'Manual',
181
+ 12 => 'Movie Preview', #PH (LZ6)
182
+ 13 => 'Panning',
183
+ 14 => 'Simple', #PH (LZ6)
184
+ 15 => 'Color Effects', #7
185
+ 16 => 'Self Portrait', #PH (TZ5)
186
+ 17 => 'Economy', #7
187
+ 18 => 'Fireworks',
188
+ 19 => 'Party',
189
+ 20 => 'Snow',
190
+ 21 => 'Night Scenery',
191
+ 22 => 'Food', #7
192
+ 23 => 'Baby', #JD
193
+ 24 => 'Soft Skin', #PH (LZ6)
194
+ 25 => 'Candlelight', #PH (LZ6)
195
+ 26 => 'Starry Night', #PH (LZ6)
196
+ 27 => 'High Sensitivity', #7 (LZ6)
197
+ 28 => 'Panorama Assist', #7
198
+ 29 => 'Underwater', #7
199
+ 30 => 'Beach', #PH (LZ6)
200
+ 31 => 'Aerial Photo', #PH (LZ6)
201
+ 32 => 'Sunset', #PH (LZ6)
202
+ 33 => 'Pet', #JD
203
+ 34 => 'Intelligent ISO', #PH (LZ6)
204
+ 35 => 'Clipboard', #7
205
+ 36 => 'High Speed Continuous Shooting', #7
206
+ 37 => 'Intelligent Auto', #7
207
+ 39 => 'Multi-aspect', #PH (TZ5)
208
+ 41 => 'Transform', #PH (FS7)
209
+ 42 => 'Flash Burst', #PH (FZ28)
210
+ 43 => 'Pin Hole', #PH (FZ28)
211
+ 44 => 'Film Grain', #PH (FZ28)
212
+ 45 => 'My Color', #PH (GF1)
213
+ 46 => 'Photo Frame', #PH (FS7)
214
+ # 49 - seen for FS4 (snow?)
215
+ 51 => 'HDR', #12
216
+ 55 => 'Handheld Night Shot', #PH (FZ47)
217
+ 57 => '3D', #PH (3D1)
218
+ 59 => 'Creative Control', #PH (FZ47)
219
+ 62 => 'Panorama', #17
220
+ 63 => 'Glass Through', #17
221
+ 64 => 'HDR', #17
222
+ 66 => 'Digital Filter', #PH (GF5 "Impressive Art", "Cross Process", "Color Select", "Star")
223
+ 67 => 'Clear Portrait', #18
224
+ 68 => 'Silky Skin', #18
225
+ 69 => 'Backlit Softness', #18
226
+ 70 => 'Clear in Backlight', #18
227
+ 71 => 'Relaxing Tone', #18
228
+ 72 => "Sweet Child's Face", #18
229
+ 73 => 'Distinct Scenery', #18
230
+ 74 => 'Bright Blue Sky', #18
231
+ 75 => 'Romantic Sunset Glow', #18
232
+ 76 => 'Vivid Sunset Glow', #18
233
+ 77 => 'Glistening Water', #18
234
+ 78 => 'Clear Nightscape', #18
235
+ 79 => 'Cool Night Sky', #18
236
+ 80 => 'Warm Glowing Nightscape', #18
237
+ 81 => 'Artistic Nightscape', #18
238
+ 82 => 'Glittering Illuminations', #18
239
+ 83 => 'Clear Night Portrait', #18
240
+ 84 => 'Soft Image of a Flower', #18
241
+ 85 => 'Appetizing Food', #18
242
+ 86 => 'Cute Desert', #18
243
+ 87 => 'Freeze Animal Motion', #18
244
+ 88 => 'Clear Sports Shot', #18
245
+ 89 => 'Monochrome', #18
246
+ 90 => 'Creative Control', #18
247
+ );
248
+
249
+ %Image::ExifTool::Panasonic::Main = (
250
+ WRITE_PROC => \&Image::ExifTool::Exif::WriteExif,
251
+ CHECK_PROC => \&Image::ExifTool::Exif::CheckExif,
252
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
253
+ WRITABLE => 1,
254
+ 0x01 => {
255
+ Name => 'ImageQuality',
256
+ Writable => 'int16u',
257
+ PrintConv => {
258
+ 1 => 'TIFF', #PH (FZ20)
259
+ 2 => 'High',
260
+ 3 => 'Normal',
261
+ # 5 - seen this for 1920x1080, 30fps SZ7 video - PH
262
+ 6 => 'Very High', #3 (Leica)
263
+ 7 => 'Raw', #3 (Leica)
264
+ 9 => 'Motion Picture', #PH (LZ6)
265
+ },
266
+ },
267
+ 0x02 => {
268
+ Name => 'FirmwareVersion',
269
+ Writable => 'undef',
270
+ Notes => q{
271
+ for some camera models such as the FZ30 this may be an internal production
272
+ reference number and not the actual firmware version
273
+ }, # (ref http://www.stevesforums.com/forums/view_topic.php?id=87764&forum_id=23&)
274
+ # (can be either binary or ascii -- add decimal points if binary)
275
+ ValueConv => '$val=~/[\0-\x2f]/ ? join(" ",unpack("C*",$val)) : $val',
276
+ ValueConvInv => q{
277
+ $val =~ /(\d+ ){3}\d+/ and $val = pack('C*',split(' ', $val));
278
+ length($val) == 4 or warn "Version must be 4 numbers\n";
279
+ return $val;
280
+ },
281
+ PrintConv => '$val=~tr/ /./; $val',
282
+ PrintConvInv => '$val=~tr/./ /; $val',
283
+ },
284
+ 0x03 => {
285
+ Name => 'WhiteBalance',
286
+ Writable => 'int16u',
287
+ PrintConv => {
288
+ 1 => 'Auto',
289
+ 2 => 'Daylight',
290
+ 3 => 'Cloudy',
291
+ 4 => 'Incandescent', #PH
292
+ 5 => 'Manual',
293
+ 8 => 'Flash',
294
+ 10 => 'Black & White', #3 (Leica)
295
+ 11 => 'Manual', #PH (FZ8)
296
+ 12 => 'Shade', #PH (FS7)
297
+ 13 => 'Kelvin', #PeterK (NC)
298
+ },
299
+ },
300
+ 0x07 => {
301
+ Name => 'FocusMode',
302
+ Writable => 'int16u',
303
+ PrintConv => {
304
+ 1 => 'Auto',
305
+ 2 => 'Manual',
306
+ 4 => 'Auto, Focus button', #4
307
+ 5 => 'Auto, Continuous', #4
308
+ 6 => 'AF-S', #18 (also seen for GF1 - PH)
309
+ 7 => 'AF-C', #18
310
+ 8 => 'AF-F', #18 (auto-focus flexible)
311
+ },
312
+ },
313
+ 0x0f => [
314
+ {
315
+ Name => 'AFAreaMode',
316
+ Condition => '$$self{Model} =~ /DMC-FZ10\b/', #JD
317
+ Writable => 'int8u',
318
+ Count => 2,
319
+ Notes => 'DMC-FZ10',
320
+ PrintConv => {
321
+ '0 1' => 'Spot Mode On',
322
+ '0 16' => 'Spot Mode Off',
323
+ },
324
+ },{
325
+ Name => 'AFAreaMode',
326
+ Writable => 'int8u',
327
+ Count => 2,
328
+ Notes => 'other models',
329
+ PrintConv => { #PH
330
+ '0 1' => '9-area', # (FS7)
331
+ '0 16' => '3-area (high speed)', # (FZ8)
332
+ '0 23' => '23-area', #PH (FZ47,NC)
333
+ '1 0' => 'Spot Focusing', # (FZ8)
334
+ '1 1' => '5-area', # (FZ8)
335
+ '16' => 'Normal?', # (only mode for DMC-LC20)
336
+ '16 0' => '1-area', # (FZ8)
337
+ '16 16' => '1-area (high speed)', # (FZ8)
338
+ # '32 0' is Face Detect for FS7, and Face Detect or Focus Tracking
339
+ # for the DMC-FZ200 (ref 17), and Auto is DMC-L1 guess,
340
+ '32 0' => 'Tracking',
341
+ '32 1' => '3-area (left)?', # (DMC-L1 guess)
342
+ '32 2' => '3-area (center)?', # (DMC-L1 guess)
343
+ '32 3' => '3-area (right)?', # (DMC-L1 guess)
344
+ '64 0' => 'Face Detect',
345
+ '128 0' => 'Spot Focusing 2', #18
346
+ },
347
+ },
348
+ ],
349
+ 0x1a => {
350
+ Name => 'ImageStabilization',
351
+ Writable => 'int16u',
352
+ PrintConv => {
353
+ 2 => 'On, Mode 1',
354
+ 3 => 'Off',
355
+ 4 => 'On, Mode 2',
356
+ 5 => 'Panning', #18
357
+ # GF1 also has a "Mode 3" - PH
358
+ },
359
+ },
360
+ 0x1c => {
361
+ Name => 'MacroMode',
362
+ Writable => 'int16u',
363
+ PrintConv => {
364
+ 1 => 'On',
365
+ 2 => 'Off',
366
+ 0x101 => 'Tele-Macro', #7
367
+ 0x201 => 'Macro Zoom', #PH (FS7)
368
+ },
369
+ },
370
+ 0x1f => {
371
+ Name => 'ShootingMode',
372
+ Writable => 'int16u',
373
+ PrintConvColumns => 2,
374
+ PrintConv => \%shootingMode,
375
+ },
376
+ 0x20 => {
377
+ Name => 'Audio',
378
+ Writable => 'int16u',
379
+ PrintConv => {
380
+ 1 => 'Yes',
381
+ 2 => 'No',
382
+ 3 => 'Stereo', #PH (NC)
383
+ },
384
+ },
385
+ 0x21 => { #2
386
+ Name => 'DataDump',
387
+ Writable => 0,
388
+ Binary => 1,
389
+ },
390
+ # 0x22 - normally 0, but 2 for 'Simple' ShootingMode in LZ6 sample - PH
391
+ 0x23 => {
392
+ Name => 'WhiteBalanceBias',
393
+ Format => 'int16s',
394
+ Writable => 'int16s',
395
+ ValueConv => '$val / 3',
396
+ ValueConvInv => '$val * 3',
397
+ PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)',
398
+ PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
399
+ },
400
+ 0x24 => {
401
+ Name => 'FlashBias',
402
+ Format => 'int16s',
403
+ Writable => 'int16s',
404
+ ValueConv => '$val / 3', #17 (older models may not have factor of 3? - PH)
405
+ ValueConvInv => '$val * 3',
406
+ PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)',
407
+ PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
408
+ },
409
+ 0x25 => { #PH
410
+ Name => 'InternalSerialNumber',
411
+ Writable => 'undef',
412
+ Count => 16,
413
+ Notes => q{
414
+ this number is unique, and contains the date of manufacture, but is not the
415
+ same as the number printed on the camera body
416
+ },
417
+ PrintConv => q{
418
+ return $val unless $val=~/^([A-Z]\d{2})(\d{2})(\d{2})(\d{2})(\d{4})/;
419
+ my $yr = $2 + ($2 < 70 ? 2000 : 1900);
420
+ return "($1) $yr:$3:$4 no. $5";
421
+ },
422
+ PrintConvInv => '$_=$val; tr/A-Z0-9//dc; s/(.{3})(19|20)/$1/; $_',
423
+ },
424
+ 0x26 => { #PH
425
+ Name => 'PanasonicExifVersion',
426
+ Writable => 'undef',
427
+ },
428
+ # 0x27 - values: 0 (LZ6,FX10K)
429
+ 0x28 => {
430
+ Name => 'ColorEffect',
431
+ Writable => 'int16u',
432
+ # FX30 manual: (ColorMode) natural, vivid, cool, warm, b/w, sepia
433
+ PrintConv => {
434
+ 1 => 'Off',
435
+ 2 => 'Warm',
436
+ 3 => 'Cool',
437
+ 4 => 'Black & White',
438
+ 5 => 'Sepia',
439
+ 6 => 'Happy', #PH (FX70) (yes, really. you wouldn't want sad colors now would you?)
440
+ },
441
+ },
442
+ 0x29 => { #JD
443
+ Name => 'TimeSincePowerOn',
444
+ Writable => 'int32u',
445
+ Notes => q{
446
+ time in 1/100 s from when the camera was powered on to when the image is
447
+ written to memory card
448
+ },
449
+ ValueConv => '$val / 100',
450
+ ValueConvInv => '$val * 100',
451
+ PrintConv => sub { # convert to format "[DD days ]HH:MM:SS.ss"
452
+ my $val = shift;
453
+ my $str = '';
454
+ if ($val >= 24 * 3600) {
455
+ my $d = int($val / (24 * 3600));
456
+ $str .= "$d days ";
457
+ $val -= $d * 24 * 3600;
458
+ }
459
+ my $h = int($val / 3600);
460
+ $val -= $h * 3600;
461
+ my $m = int($val / 60);
462
+ $val -= $m * 60;
463
+ my $s = int($val);
464
+ my $f = 100 * ($val - int($val));
465
+ return sprintf("%s%.2d:%.2d:%.2d.%.2d",$str,$h,$m,$s,$f);
466
+ },
467
+ PrintConvInv => sub {
468
+ my $val = shift;
469
+ my @vals = ($val =~ /\d+(?:\.\d*)?/g);
470
+ my $sec = 0;
471
+ $sec += 24 * 3600 * shift(@vals) if @vals > 3;
472
+ $sec += 3600 * shift(@vals) if @vals > 2;
473
+ $sec += 60 * shift(@vals) if @vals > 1;
474
+ $sec += shift(@vals) if @vals;
475
+ return $sec;
476
+ },
477
+ },
478
+ 0x2a => { #4
479
+ Name => 'BurstMode',
480
+ Writable => 'int16u',
481
+ Notes => 'decoding may be different for some models',
482
+ PrintConv => {
483
+ 0 => 'Off',
484
+ 1 => 'On', #PH (TZ5) [was "Low/High Quality" from ref 4]
485
+ 2 => 'Auto Exposure Bracketing (AEB)', #17
486
+ 4 => 'Unlimited', #PH (TZ5)
487
+ },
488
+ },
489
+ 0x2b => { #4
490
+ Name => 'SequenceNumber',
491
+ Writable => 'int32u',
492
+ },
493
+ 0x2c => [
494
+ {
495
+ Name => 'ContrastMode',
496
+ Condition => '$$self{Model} !~ /^DMC-(FX10|G1|L1|L10|LC80|GF\d+|G2|TZ10|ZS7)$/',
497
+ Flags => 'PrintHex',
498
+ Writable => 'int16u',
499
+ Notes => q{
500
+ this decoding seems to work for some models such as the LC1, LX2, FZ7, FZ8,
501
+ FZ18 and FZ50, but may not be correct for other models such as the FX10, G1, L1,
502
+ L10 and LC80
503
+ },
504
+ PrintConv => {
505
+ 0 => 'Normal',
506
+ 1 => 'Low',
507
+ 2 => 'High',
508
+ # 3 - observed with LZ6 and TZ5 in Fireworks mode - PH
509
+ # 5 - observed with FX01, FX40 and FP8 (EXIF contrast "Normal") - PH
510
+ 6 => 'Medium Low', #PH (FZ18)
511
+ 7 => 'Medium High', #PH (FZ18)
512
+ 13 => 'High Dynamic', #PH (FZ47 in ?)
513
+ # DMC-LC1 values:
514
+ 0x100 => 'Low',
515
+ 0x110 => 'Normal',
516
+ 0x120 => 'High',
517
+ }
518
+ },{
519
+ Name => 'ContrastMode',
520
+ Condition => '$$self{Model} =~ /^DMC-(GF\d+|G2)$/',
521
+ Notes => 'these values are used by the G2, GF1, GF2, GF3, GF5 and GF6',
522
+ Writable => 'int16u',
523
+ PrintConv => { # (decoded for GF1 unless otherwise noted)
524
+ 0 => '-2',
525
+ 1 => '-1',
526
+ 2 => 'Normal',
527
+ 3 => '+1',
528
+ 4 => '+2',
529
+ # Note: Other Contrast tags will be "Normal" in any of these modes:
530
+ 5 => 'Normal 2', # 5 - seen for Portrait (FX80) and Normal (GF6)
531
+ 7 => 'Nature (Color Film)', # (GF1,G2; GF3 "Miniature")
532
+ 9 => 'Expressive', #(GF3)
533
+ 12 => 'Smooth (Color Film) or Pure (My Color)', #(GF1,G2 "Smooth Color")
534
+ 17 => 'Dynamic (B&W Film)', #(GF1,G2)
535
+ 22 => 'Smooth (B&W Film)', #(GF1,G2)
536
+ 25 => 'High Dynamic', #(GF5)
537
+ 26 => 'Retro', #(GF5)
538
+ 27 => 'Dynamic (Color Film)', #(GF1,G2) (GF3 "High Key")
539
+ 28 => 'Low Key', #(GF5)
540
+ 29 => 'Toy Effect', #(GF5)
541
+ 32 => 'Vibrant (Color Film) or Expressive (My Color)', # (GF1; G2 "Vibrant"; GF2,GF5 "Expressive")
542
+ 33 => 'Elegant (My Color)',
543
+ 37 => 'Nostalgic (Color Film)', # (GF1,G2; GF5 "Sepia")
544
+ 41 => 'Dynamic Art (My Color)', # (GF5 "High Key")
545
+ 42 => 'Retro (My Color)',
546
+ 45 => 'Cinema', #(GF2)
547
+ 47 => 'Dynamic Mono', #(GF5)
548
+ 50 => 'Impressive Art', #(GF5)
549
+ 51 => 'Cross Process', #(GF5)
550
+ 107 => 'Expressive 2', #(GF6)
551
+ 122 => 'Dynamic Monochrome', #(GF6)
552
+ # more new modes for GF6:
553
+ # ? => 'Old Days',
554
+ # ? => 'Toy Pop',
555
+ # ? => 'Bleach Bypass',
556
+ # ? => 'Fantasy',
557
+ # ? => 'Star Filter',
558
+ # ? => 'One Point Color',
559
+ # ? => 'Sunshine',
560
+ },
561
+ },{
562
+ Name => 'ContrastMode',
563
+ Condition => '$$self{Model} =~ /^DMC-(TZ10|ZS7)$/',
564
+ Notes => 'these values are used by the TZ10 and ZS7',
565
+ Writable => 'int16u',
566
+ PrintConv => {
567
+ 0 => 'Normal',
568
+ 1 => '-2',
569
+ 2 => '+2',
570
+ 5 => '-1',
571
+ 6 => '+1',
572
+ },
573
+ },{
574
+ Name => 'ContrastMode',
575
+ Writable => 'int16u',
576
+ },
577
+ ],
578
+ 0x2d => {
579
+ Name => 'NoiseReduction',
580
+ Writable => 'int16u',
581
+ PrintConv => {
582
+ 0 => 'Standard',
583
+ 1 => 'Low (-1)',
584
+ 2 => 'High (+1)',
585
+ 3 => 'Lowest (-2)', #JD
586
+ 4 => 'Highest (+2)', #JD
587
+ },
588
+ },
589
+ 0x2e => { #4
590
+ Name => 'SelfTimer',
591
+ Writable => 'int16u',
592
+ PrintConv => {
593
+ 1 => 'Off',
594
+ 2 => '10 s',
595
+ 3 => '2 s',
596
+ 4 => '10 s / 3 pictures', #17
597
+ },
598
+ },
599
+ # 0x2f - values: 1 (LZ6,FX10K)
600
+ 0x30 => { #7
601
+ Name => 'Rotation',
602
+ Writable => 'int16u',
603
+ PrintConv => {
604
+ 1 => 'Horizontal (normal)',
605
+ 3 => 'Rotate 180', #PH
606
+ 6 => 'Rotate 90 CW', #PH (ref 7 gives 270 CW)
607
+ 8 => 'Rotate 270 CW', #PH (ref 7 gives 90 CW)
608
+ },
609
+ },
610
+ 0x31 => { #PH (FS7)
611
+ Name => 'AFAssistLamp',
612
+ Writable => 'int16u',
613
+ PrintConv => {
614
+ 1 => 'Fired',
615
+ 2 => 'Enabled but Not Used',
616
+ 3 => 'Disabled but Required',
617
+ 4 => 'Disabled and Not Required',
618
+ # have seen a value of 5 - PH
619
+ # values possibly related to FOC-L? - JD
620
+ },
621
+ },
622
+ 0x32 => { #7
623
+ Name => 'ColorMode',
624
+ Writable => 'int16u',
625
+ PrintConv => {
626
+ 0 => 'Normal',
627
+ 1 => 'Natural',
628
+ 2 => 'Vivid',
629
+ # have seen 3 for GF2 - PH
630
+ },
631
+ },
632
+ 0x33 => { #JD
633
+ Name => 'BabyAge',
634
+ Writable => 'string',
635
+ Notes => 'or pet age', #PH
636
+ PrintConv => '$val eq "9999:99:99 00:00:00" ? "(not set)" : $val',
637
+ PrintConvInv => '$val =~ /^\d/ ? $val : "9999:99:99 00:00:00"',
638
+ },
639
+ 0x34 => { #7/PH
640
+ Name => 'OpticalZoomMode',
641
+ Writable => 'int16u',
642
+ PrintConv => {
643
+ 1 => 'Standard',
644
+ 2 => 'Extended',
645
+ },
646
+ },
647
+ 0x35 => { #9
648
+ Name => 'ConversionLens',
649
+ Writable => 'int16u',
650
+ PrintConv => { #PH (unconfirmed)
651
+ 1 => 'Off',
652
+ 2 => 'Wide',
653
+ 3 => 'Telephoto',
654
+ 4 => 'Macro',
655
+ },
656
+ },
657
+ 0x36 => { #8
658
+ Name => 'TravelDay',
659
+ Writable => 'int16u',
660
+ PrintConv => '$val == 65535 ? "n/a" : $val',
661
+ PrintConvInv => '$val =~ /(\d+)/ ? $1 : $val',
662
+ },
663
+ # 0x37 - values: 0,1,2 (LZ6, 0 for movie preview); 257 (FX10K); 0,256 (TZ5, 0 for movie preview)
664
+ # 0x38 - values: 0,1,2 (LZ6, same as 0x37); 1,2 (FX10K); 0,256 (TZ5, 0 for movie preview)
665
+ 0x39 => { #7 (L1/L10)
666
+ Name => 'Contrast',
667
+ Format => 'int16s',
668
+ Writable => 'int16u',
669
+ %Image::ExifTool::Exif::printParameter,
670
+ },
671
+ 0x3a => {
672
+ Name => 'WorldTimeLocation',
673
+ Writable => 'int16u',
674
+ PrintConv => {
675
+ 1 => 'Home',
676
+ 2 => 'Destination',
677
+ },
678
+ },
679
+ 0x3b => { #PH (TZ5/FS7)
680
+ # (tags 0x3b, 0x3e, 0x8008 and 0x8009 have the same values in all my samples - PH)
681
+ Name => 'TextStamp',
682
+ Writable => 'int16u',
683
+ PrintConv => { 1 => 'Off', 2 => 'On' },
684
+ },
685
+ 0x3c => { #PH
686
+ Name => 'ProgramISO', # (maybe should rename this ISOSetting?)
687
+ Writable => 'int16u',
688
+ PrintConv => {
689
+ OTHER => sub { shift },
690
+ 65534 => 'Intelligent ISO', #PH (FS7)
691
+ 65535 => 'n/a',
692
+ },
693
+ },
694
+ 0x3d => { #PH
695
+ Name => 'AdvancedSceneType',
696
+ Writable => 'int16u',
697
+ Notes => 'used together with SceneMode to derive Composite AdvancedSceneMode',
698
+ },
699
+ 0x3e => { #PH (TZ5/FS7)
700
+ # (tags 0x3b, 0x3e, 0x8008 and 0x8009 have the same values in all my samples - PH)
701
+ Name => 'TextStamp',
702
+ Writable => 'int16u',
703
+ PrintConv => { 1 => 'Off', 2 => 'On' },
704
+ },
705
+ 0x3f => { #PH (TZ7)
706
+ Name => 'FacesDetected',
707
+ Writable => 'int16u',
708
+ },
709
+ 0x40 => { #7 (L1/L10)
710
+ Name => 'Saturation',
711
+ Format => 'int16s',
712
+ Writable => 'int16u',
713
+ %Image::ExifTool::Exif::printParameter,
714
+ },
715
+ 0x41 => { #7 (L1/L10)
716
+ Name => 'Sharpness',
717
+ Format => 'int16s',
718
+ Writable => 'int16u',
719
+ %Image::ExifTool::Exif::printParameter,
720
+ },
721
+ 0x42 => { #7 (DMC-L1)
722
+ Name => 'FilmMode',
723
+ Writable => 'int16u',
724
+ PrintConv => {
725
+ 0 => 'n/a', #PH (ie. FZ100 "Photo Frame" ShootingMode)
726
+ 1 => 'Standard (color)',
727
+ 2 => 'Dynamic (color)',
728
+ 3 => 'Nature (color)',
729
+ 4 => 'Smooth (color)',
730
+ 5 => 'Standard (B&W)',
731
+ 6 => 'Dynamic (B&W)',
732
+ 7 => 'Smooth (B&W)',
733
+ # 8 => 'My Film 1'? (from owner manual)
734
+ # 9 => 'My Film 2'?
735
+ 10 => 'Nostalgic', #(GH1)
736
+ 11 => 'Vibrant', #(GH1)
737
+ # 12 => 'Multi Film'? (in the GH1 specs)
738
+ },
739
+ },
740
+ # 0x43 - int16u: 2,3
741
+ 0x44 => {
742
+ Name => 'ColorTempKelvin',
743
+ Format => 'int16u',
744
+ },
745
+ # 0x45 - int16u: 0
746
+ 0x46 => { #PH/JD
747
+ Name => 'WBShiftAB',
748
+ Format => 'int16s',
749
+ Writable => 'int16u',
750
+ Notes => 'positive is a shift toward blue',
751
+ },
752
+ 0x47 => { #PH/JD
753
+ Name => 'WBShiftGM',
754
+ Format => 'int16s',
755
+ Writable => 'int16u',
756
+ Notes => 'positive is a shift toward green',
757
+ },
758
+ 0x48 => { #17
759
+ Name => 'FlashCurtain',
760
+ Writable => 'int16u',
761
+ PrintConv => {
762
+ 0 => 'n/a',
763
+ 1 => '1st',
764
+ 2 => '2nd',
765
+ },
766
+ },
767
+ # 0x48 - int16u: 0
768
+ # 0x49 - int16u: 2
769
+ # 0x4a - int16u: 0
770
+ 0x4b => { #PH
771
+ Name => 'PanasonicImageWidth',
772
+ Writable => 'int32u',
773
+ },
774
+ 0x4c => { #PH
775
+ Name => 'PanasonicImageHeight',
776
+ Writable => 'int32u',
777
+ },
778
+ 0x4d => { #PH (FS7)
779
+ Name => 'AFPointPosition',
780
+ Writable => 'rational64u',
781
+ Count => 2,
782
+ Notes => 'X Y coordinates of primary AF area center, in the range 0.0 to 1.0',
783
+ PrintConv => q{
784
+ return 'none' if $val eq '16777216 16777216';
785
+ my @a = split ' ', $val;
786
+ sprintf("%.2g %.2g",@a);
787
+ },
788
+ PrintConvInv => '$val eq "none" ? "16777216 16777216" : $val',
789
+ },
790
+ 0x4e => { #PH
791
+ Name => 'FaceDetInfo',
792
+ PrintConv => 'length $val',
793
+ SubDirectory => {
794
+ TagTable => 'Image::ExifTool::Panasonic::FaceDetInfo',
795
+ },
796
+ },
797
+ # 0x4f,0x50 - int16u: 0
798
+ 0x51 => {
799
+ Name => 'LensType',
800
+ Writable => 'string',
801
+ ValueConv => '$val=~s/ +$//; $val', # trim trailing spaces
802
+ ValueConvInv => '$val',
803
+ },
804
+ 0x52 => { #7 (DMC-L1)
805
+ Name => 'LensSerialNumber',
806
+ Writable => 'string',
807
+ ValueConv => '$val=~s/ +$//; $val', # trim trailing spaces
808
+ ValueConvInv => '$val',
809
+ },
810
+ 0x53 => { #7 (DMC-L1)
811
+ Name => 'AccessoryType',
812
+ Writable => 'string',
813
+ ValueConv => '$val=~s/ +$//; $val', # trim trailing spaces
814
+ ValueConvInv => '$val',
815
+ },
816
+ # 0x54 - string[14]: "0000000"
817
+ # 0x55 - int16u: 1
818
+ # 0x57 - int16u: 0
819
+ 0x59 => { #PH (FS7)
820
+ Name => 'Transform',
821
+ Writable => 'undef',
822
+ Notes => 'decoded as two 16-bit signed integers',
823
+ Format => 'int16s',
824
+ Count => 2,
825
+ PrintConv => {
826
+ '-3 2' => 'Slim High',
827
+ '-1 1' => 'Slim Low',
828
+ '0 0' => 'Off',
829
+ '1 1' => 'Stretch Low',
830
+ '3 2' => 'Stretch High',
831
+ },
832
+ },
833
+ # 0x5a - int16u: 0,2
834
+ # 0x5b - int16u: 0
835
+ # 0x5c - int16u: 0,2
836
+ 0x5d => { #PH (GF1, FZ35)
837
+ Name => 'IntelligentExposure',
838
+ Notes => 'not valid for some models', # (doesn't change in ZS7 and GH1 images)
839
+ Writable => 'int16u',
840
+ PrintConv => {
841
+ 0 => 'Off',
842
+ 1 => 'Low',
843
+ 2 => 'Standard',
844
+ 3 => 'High',
845
+ },
846
+ },
847
+ # 0x5e,0x5f,0x60 - undef[4]
848
+ 0x61 => { #PH
849
+ Name => 'FaceRecInfo',
850
+ SubDirectory => {
851
+ TagTable => 'Image::ExifTool::Panasonic::FaceRecInfo',
852
+ },
853
+ },
854
+ 0x62 => { #PH (FS7)
855
+ Name => 'FlashWarning',
856
+ Writable => 'int16u',
857
+ PrintConv => { 0 => 'No', 1 => 'Yes (flash required but disabled)' },
858
+ },
859
+ 0x63 => { #PH
860
+ # not sure exactly what this means, but in my samples this is
861
+ # FacesRecognized bytes of 0x01, padded with 0x00 to a length of 4 - PH
862
+ Name => 'RecognizedFaceFlags',
863
+ Format => 'int8u',
864
+ Count => 4,
865
+ Writable => 'undef',
866
+ Unknown => 1,
867
+ },
868
+ 0x65 => { #15
869
+ Name => 'Title',
870
+ Format => 'string',
871
+ Writable => 'undef', # (Count 64)
872
+ },
873
+ 0x66 => { #15
874
+ Name => 'BabyName',
875
+ Notes => 'or pet name',
876
+ Format => 'string',
877
+ Writable => 'undef', # (Count 64)
878
+ },
879
+ 0x67 => { #15
880
+ Name => 'Location',
881
+ Groups => { 2 => 'Location' },
882
+ Format => 'string',
883
+ Writable => 'undef', # (Count 64)
884
+ },
885
+ # 0x68 - int8u: 1
886
+ 0x69 => { #PH (ZS7)
887
+ Name => 'Country', # (Country/Region)
888
+ Groups => { 2 => 'Location' },
889
+ Format => 'string',
890
+ Writable => 'undef', # (Count 72)
891
+ },
892
+ # 0x6a - int8u: 1
893
+ 0x6b => { #PH (ZS7)
894
+ Name => 'State', # (State/Province/Count -- what is Count?)
895
+ Groups => { 2 => 'Location' },
896
+ Format => 'string',
897
+ Writable => 'undef', # (Count 72)
898
+ },
899
+ # 0x6c - int8u: 1
900
+ 0x6d => { #PH (ZS7)
901
+ Name => 'City', # (City/Town)
902
+ Groups => { 2 => 'Location' },
903
+ Format => 'string',
904
+ Writable => 'undef', # (Count 72)
905
+ },
906
+ # 0x6e - int8u: 1
907
+ 0x6f => { #PH (ZS7)
908
+ Name => 'Landmark', # (Landmark)
909
+ Groups => { 2 => 'Location' },
910
+ Format => 'string',
911
+ Writable => 'undef', # (Count 128)
912
+ },
913
+ 0x70 => { #PH (ZS7)
914
+ Name => 'IntelligentResolution',
915
+ Writable => 'int8u',
916
+ PrintConv => {
917
+ 0 => 'Off',
918
+ # Note: I think these values make sense for the GH2, but meanings
919
+ # may be different for other models
920
+ 1 => 'Low',
921
+ 2 => 'Standard',
922
+ 3 => 'High',
923
+ 4 => 'Extended',
924
+ },
925
+ },
926
+ # 0x71 - undef[128] (maybe text stamp text?)
927
+ # 0x72,0x73,0x74,0x75,0x77,0x78: 0
928
+ # 0x76: 0, (3 for G6 with HDR on, ref 18)
929
+ 0x79 => { #PH (GH2)
930
+ Name => 'IntelligentD-Range',
931
+ Writable => 'int16u',
932
+ PrintConv => {
933
+ 0 => 'Off',
934
+ 1 => 'Low',
935
+ 2 => 'Standard',
936
+ 3 => 'High',
937
+ },
938
+ },
939
+ # 0x7a,0x7b: 0
940
+ 0x86 => { #http://dev.exiv2.org/issues/825
941
+ Name => 'ManometerPressure',
942
+ Writable => 'int16u',
943
+ RawConv => '$val==65535 ? undef : $val',
944
+ ValueConv => '$val / 10',
945
+ ValueConvInv => '$val * 10',
946
+ PrintConv => 'sprintf("%.1f kPa",$val)',
947
+ PrintConvInv => '$val=~s/ ?kPa//i; $val',
948
+ },
949
+ 0x89 => {
950
+ Name => 'PhotoStyle',
951
+ Writable => 'int16u',
952
+ PrintConv => {
953
+ 0 => 'Auto',
954
+ 1 => 'Standard or Custom',
955
+ 2 => 'Vivid',
956
+ 3 => 'Natural',
957
+ 4 => 'Monochrome',
958
+ 5 => 'Scenery',
959
+ 6 => 'Portrait',
960
+ },
961
+ },
962
+ 0x96 => { #18
963
+ Name => 'TimerRecording',
964
+ Writable => 'int8u',
965
+ PrintConv => {
966
+ 0 => 'Off',
967
+ 1 => 'Time Lapse',
968
+ 2 => 'Stop-motion Animation',
969
+ },
970
+ },
971
+ 0x9e => { #18
972
+ Name => 'HDR',
973
+ Writable => 'int16u',
974
+ PrintConv => {
975
+ 0 => 'Off',
976
+ 100 => '1 EV',
977
+ 200 => '2 EV',
978
+ 300 => '3 EV',
979
+ 32868 => '1 EV (Auto)',
980
+ 32968 => '2 EV (Auto)',
981
+ 33068 => '3 EV (Auto)',
982
+ },
983
+ },
984
+ 0x9f => { #18
985
+ Name => 'ShutterType',
986
+ Writable => 'int16u',
987
+ PrintConv => {
988
+ 0 => 'Mechanical',
989
+ 1 => 'Electronic',
990
+ },
991
+ },
992
+ 0xab => { #18
993
+ Name => 'TouchAE',
994
+ Writable => 'int16u',
995
+ PrintConv => { 0 => 'Off', 1 => 'On' },
996
+ },
997
+ 0x0e00 => {
998
+ Name => 'PrintIM',
999
+ Description => 'Print Image Matching',
1000
+ Writable => 0,
1001
+ SubDirectory => {
1002
+ TagTable => 'Image::ExifTool::PrintIM::Main',
1003
+ },
1004
+ },
1005
+ 0x8000 => { #PH
1006
+ Name => 'MakerNoteVersion',
1007
+ Format => 'undef',
1008
+ },
1009
+ 0x8001 => { #7/PH/JD
1010
+ Name => 'SceneMode',
1011
+ Writable => 'int16u',
1012
+ PrintConvColumns => 2,
1013
+ PrintConv => {
1014
+ 0 => 'Off',
1015
+ %shootingMode,
1016
+ },
1017
+ },
1018
+ # 0x8002 - values: 1,2 related to focus? (PH/JD)
1019
+ # 1 for HDR modes, 2 for Portrait (ref 12)
1020
+ # 0x8003 - values: 1,2 related to focus? (PH/JD)
1021
+ 0x8004 => { #PH/JD
1022
+ Name => 'WBRedLevel',
1023
+ Writable => 'int16u',
1024
+ },
1025
+ 0x8005 => { #PH/JD
1026
+ Name => 'WBGreenLevel',
1027
+ Writable => 'int16u',
1028
+ },
1029
+ 0x8006 => { #PH/JD
1030
+ Name => 'WBBlueLevel',
1031
+ Writable => 'int16u',
1032
+ },
1033
+ 0x8007 => { #PH
1034
+ Name => 'FlashFired',
1035
+ Writable => 'int16u',
1036
+ PrintConv => { 1 => 'No', 2 => 'Yes' },
1037
+ },
1038
+ 0x8008 => { #PH (TZ5/FS7)
1039
+ # (tags 0x3b, 0x3e, 0x8008 and 0x8009 have the same values in all my samples - PH)
1040
+ Name => 'TextStamp',
1041
+ Writable => 'int16u',
1042
+ PrintConv => { 1 => 'Off', 2 => 'On' },
1043
+ },
1044
+ 0x8009 => { #PH (TZ5/FS7)
1045
+ # (tags 0x3b, 0x3e, 0x8008 and 0x8009 have the same values in all my samples - PH)
1046
+ Name => 'TextStamp',
1047
+ Writable => 'int16u',
1048
+ PrintConv => { 1 => 'Off', 2 => 'On' },
1049
+ },
1050
+ 0x8010 => { #PH
1051
+ Name => 'BabyAge',
1052
+ Writable => 'string',
1053
+ Notes => 'or pet age',
1054
+ PrintConv => '$val eq "9999:99:99 00:00:00" ? "(not set)" : $val',
1055
+ PrintConvInv => '$val =~ /^\d/ ? $val : "9999:99:99 00:00:00"',
1056
+ },
1057
+ 0x8012 => { #PH (FS7)
1058
+ Name => 'Transform',
1059
+ Writable => 'undef',
1060
+ Notes => 'decoded as two 16-bit signed integers',
1061
+ Format => 'int16s',
1062
+ Count => 2,
1063
+ PrintConv => {
1064
+ '-3 2' => 'Slim High',
1065
+ '-1 1' => 'Slim Low',
1066
+ '0 0' => 'Off',
1067
+ '1 1' => 'Stretch Low',
1068
+ '3 2' => 'Stretch High',
1069
+ },
1070
+ },
1071
+ );
1072
+
1073
+ # Leica type2 maker notes (ref 10)
1074
+ %Image::ExifTool::Panasonic::Leica2 = (
1075
+ WRITE_PROC => \&Image::ExifTool::Exif::WriteExif,
1076
+ CHECK_PROC => \&Image::ExifTool::Exif::CheckExif,
1077
+ GROUPS => { 0 => 'MakerNotes', 1 => 'Leica', 2 => 'Camera' },
1078
+ WRITABLE => 1,
1079
+ NOTES => 'These tags are used by the Leica M8.',
1080
+ 0x300 => {
1081
+ Name => 'Quality',
1082
+ Writable => 'int16u',
1083
+ PrintConv => {
1084
+ 1 => 'Fine',
1085
+ 2 => 'Basic',
1086
+ },
1087
+ },
1088
+ 0x302 => {
1089
+ Name => 'UserProfile',
1090
+ Writable => 'int32u',
1091
+ PrintConv => {
1092
+ 1 => 'User Profile 1',
1093
+ 2 => 'User Profile 2',
1094
+ 3 => 'User Profile 3',
1095
+ 4 => 'User Profile 0 (Dynamic)',
1096
+ },
1097
+ },
1098
+ 0x303 => {
1099
+ Name => 'SerialNumber',
1100
+ Writable => 'int32u',
1101
+ PrintConv => 'sprintf("%.7d", $val)',
1102
+ PrintConvInv => '$val',
1103
+ },
1104
+ 0x304 => {
1105
+ Name => 'WhiteBalance',
1106
+ Writable => 'int16u',
1107
+ Notes => 'values above 0x8000 are converted to Kelvin color temperatures',
1108
+ PrintConv => {
1109
+ 0 => 'Auto or Manual',
1110
+ 1 => 'Daylight',
1111
+ 2 => 'Fluorescent',
1112
+ 3 => 'Tungsten',
1113
+ 4 => 'Flash',
1114
+ 10 => 'Cloudy',
1115
+ 11 => 'Shade',
1116
+ OTHER => \&WhiteBalanceConv,
1117
+ },
1118
+ },
1119
+ 0x310 => {
1120
+ Name => 'LensType',
1121
+ Writable => 'int32u',
1122
+ SeparateTable => 1,
1123
+ ValueConv => '($val >> 2) . " " . ($val & 0x3)',
1124
+ ValueConvInv => \&LensTypeConvInv,
1125
+ PrintConv => \%leicaLensTypes,
1126
+ },
1127
+ 0x311 => {
1128
+ Name => 'ExternalSensorBrightnessValue',
1129
+ Format => 'rational64s', # (incorrectly unsigned in JPEG images)
1130
+ Writable => 'rational64s',
1131
+ Notes => '"blue dot" measurement',
1132
+ PrintConv => 'sprintf("%.2f", $val)',
1133
+ PrintConvInv => '$val',
1134
+ },
1135
+ 0x312 => {
1136
+ Name => 'MeasuredLV',
1137
+ Format => 'rational64s', # (incorrectly unsigned in JPEG images)
1138
+ Writable => 'rational64s',
1139
+ Notes => 'imaging sensor or TTL exposure meter measurement',
1140
+ PrintConv => 'sprintf("%.2f", $val)',
1141
+ PrintConvInv => '$val',
1142
+ },
1143
+ 0x313 => {
1144
+ Name => 'ApproximateFNumber',
1145
+ Writable => 'rational64u',
1146
+ PrintConv => 'sprintf("%.1f", $val)',
1147
+ PrintConvInv => '$val',
1148
+ },
1149
+ 0x320 => {
1150
+ Name => 'CameraTemperature',
1151
+ Writable => 'int32s',
1152
+ PrintConv => '"$val C"',
1153
+ PrintConvInv => '$val=~s/ ?C//; $val',
1154
+ },
1155
+ 0x321 => { Name => 'ColorTemperature', Writable => 'int32u' },
1156
+ 0x322 => { Name => 'WBRedLevel', Writable => 'rational64u' },
1157
+ 0x323 => { Name => 'WBGreenLevel', Writable => 'rational64u' },
1158
+ 0x324 => { Name => 'WBBlueLevel', Writable => 'rational64u' },
1159
+ 0x325 => {
1160
+ Name => 'UV-IRFilterCorrection',
1161
+ Description => 'UV/IR Filter Correction',
1162
+ Writable => 'int32u',
1163
+ PrintConv => {
1164
+ 0 => 'Not Active',
1165
+ 1 => 'Active',
1166
+ },
1167
+ },
1168
+ 0x330 => { Name => 'CCDVersion', Writable => 'int32u' },
1169
+ 0x331 => { Name => 'CCDBoardVersion', Writable => 'int32u' },
1170
+ 0x332 => { Name => 'ControllerBoardVersion', Writable => 'int32u' },
1171
+ 0x333 => { Name => 'M16CVersion', Writable => 'int32u' },
1172
+ 0x340 => { Name => 'ImageIDNumber', Writable => 'int32u' },
1173
+ );
1174
+
1175
+ # Leica type3 maker notes (ref PH)
1176
+ %Image::ExifTool::Panasonic::Leica3 = (
1177
+ WRITE_PROC => \&Image::ExifTool::Exif::WriteExif,
1178
+ CHECK_PROC => \&Image::ExifTool::Exif::CheckExif,
1179
+ GROUPS => { 0 => 'MakerNotes', 1 => 'Leica', 2 => 'Camera' },
1180
+ WRITABLE => 1,
1181
+ NOTES => 'These tags are used by the Leica R8 and R9 digital backs.',
1182
+ 0x0d => {
1183
+ Name => 'WB_RGBLevels',
1184
+ Writable => 'int16u',
1185
+ Count => 3,
1186
+ },
1187
+ );
1188
+
1189
+ # Leica type4 maker notes (ref PH) (M9)
1190
+ %Image::ExifTool::Panasonic::Leica4 = (
1191
+ WRITE_PROC => \&Image::ExifTool::Exif::WriteExif,
1192
+ CHECK_PROC => \&Image::ExifTool::Exif::CheckExif,
1193
+ GROUPS => { 0 => 'MakerNotes', 1 => 'Leica', 2 => 'Camera' },
1194
+ WRITABLE => 1,
1195
+ NOTES => 'This information is written by the M9.',
1196
+ 0x3000 => {
1197
+ Name => 'Subdir3000',
1198
+ SubDirectory => {
1199
+ TagTable => 'Image::ExifTool::Panasonic::Subdir',
1200
+ ByteOrder => 'Unknown',
1201
+ },
1202
+ },
1203
+ 0x3100 => {
1204
+ Name => 'Subdir3100',
1205
+ SubDirectory => {
1206
+ TagTable => 'Image::ExifTool::Panasonic::Subdir',
1207
+ ByteOrder => 'Unknown',
1208
+ },
1209
+ },
1210
+ 0x3400 => {
1211
+ Name => 'Subdir3400',
1212
+ SubDirectory => {
1213
+ TagTable => 'Image::ExifTool::Panasonic::Subdir',
1214
+ ByteOrder => 'Unknown',
1215
+ },
1216
+ },
1217
+ 0x3900 => {
1218
+ Name => 'Subdir3900',
1219
+ SubDirectory => {
1220
+ TagTable => 'Image::ExifTool::Panasonic::Subdir',
1221
+ ByteOrder => 'Unknown',
1222
+ },
1223
+ },
1224
+ );
1225
+
1226
+ # Leica M9 SubDirectory tags (ref PH)
1227
+ %Image::ExifTool::Panasonic::Subdir = (
1228
+ WRITE_PROC => \&Image::ExifTool::Exif::WriteExif,
1229
+ CHECK_PROC => \&Image::ExifTool::Exif::CheckExif,
1230
+ GROUPS => { 0 => 'MakerNotes', 1 => 'Leica', 2 => 'Camera' },
1231
+ TAG_PREFIX => 'Leica_Subdir',
1232
+ WRITABLE => 1,
1233
+ # 0x3001 - normally 0 but value of 2 when manual coding is used
1234
+ # with a coded lens (but only tested with Elmar-M 50mm f/2.8) - PH
1235
+ 0x300a => {
1236
+ Name => 'Contrast',
1237
+ Writable => 'int32u',
1238
+ PrintConv => {
1239
+ 0 => 'Low',
1240
+ 1 => 'Medium Low',
1241
+ 2 => 'Normal',
1242
+ 3 => 'Medium High',
1243
+ 4 => 'High',
1244
+ },
1245
+ },
1246
+ 0x300b => {
1247
+ Name => 'Sharpening',
1248
+ Writable => 'int32u',
1249
+ PrintConv => {
1250
+ 0 => 'Off',
1251
+ 1 => 'Low',
1252
+ 2 => 'Normal',
1253
+ 3 => 'Medium High',
1254
+ 4 => 'High',
1255
+ },
1256
+ },
1257
+ 0x300d => {
1258
+ Name => 'Saturation',
1259
+ Writable => 'int32u',
1260
+ PrintConv => {
1261
+ 0 => 'Low',
1262
+ 1 => 'Medium Low',
1263
+ 2 => 'Normal',
1264
+ 3 => 'Medium High',
1265
+ 4 => 'High',
1266
+ 5 => 'Black & White',
1267
+ 6 => 'Vintage B&W',
1268
+ },
1269
+ },
1270
+ # 0x3032 - some sort of RGB coefficients? (zeros unless Kelvin WB, but same for all Color Temps)
1271
+ 0x3033 => {
1272
+ Name => 'WhiteBalance',
1273
+ Writable => 'int32u',
1274
+ PrintConv => { #13
1275
+ 0 => 'Auto',
1276
+ 1 => 'Tungsten',
1277
+ 2 => 'Fluorescent',
1278
+ 3 => 'Daylight Fluorescent',
1279
+ 4 => 'Daylight',
1280
+ 5 => 'Flash',
1281
+ 6 => 'Cloudy',
1282
+ 7 => 'Shade',
1283
+ 8 => 'Manual',
1284
+ 9 => 'Kelvin',
1285
+ },
1286
+ },
1287
+ 0x3034 => {
1288
+ Name => 'JPEGQuality',
1289
+ Writable => 'int32u',
1290
+ PrintConv => {
1291
+ 94 => 'Basic',
1292
+ 97 => 'Fine',
1293
+ },
1294
+ },
1295
+ # 0x3035 (int32u): -1 unless Manual WB (2 in my Manual sample)
1296
+ 0x3036 => {
1297
+ Name => 'WB_RGBLevels',
1298
+ Writable => 'rational64u',
1299
+ Count => 3,
1300
+ },
1301
+ 0x3038 => {
1302
+ Name => 'UserProfile', # (CameraProfile according to ref 14)
1303
+ Writable => 'string',
1304
+ },
1305
+ 0x303a => {
1306
+ Name => 'JPEGSize',
1307
+ Writable => 'int32u',
1308
+ PrintConv => {
1309
+ 0 => '5216x3472',
1310
+ 1 => '3840x2592',
1311
+ 2 => '2592x1728',
1312
+ 3 => '1728x1152',
1313
+ 4 => '1280x864',
1314
+ },
1315
+ },
1316
+ 0x3103 => { #13 (valid for FW 1.116 and later)
1317
+ Name => 'SerialNumber',
1318
+ Writable => 'string',
1319
+ },
1320
+ # 0x3104 body-dependent string ("00012905000000") (not serial number)
1321
+ # 0x3105 body-dependent string ("00012905000000")
1322
+ # 0x3107 - body-dependent string ("4H205800116800") (not serial number)
1323
+ 0x3109 => {
1324
+ Name => 'FirmwareVersion',
1325
+ Writable => 'string',
1326
+ },
1327
+ 0x312a => { #14 (NC)
1328
+ Name => 'BaseISO',
1329
+ Writable => 'int32u',
1330
+ },
1331
+ 0x312b => {
1332
+ Name => 'SensorWidth',
1333
+ Writable => 'int32u',
1334
+ },
1335
+ 0x312c => {
1336
+ Name => 'SensorHeight',
1337
+ Writable => 'int32u',
1338
+ },
1339
+ 0x312d => { #14 (NC)
1340
+ Name => 'SensorBitDepth',
1341
+ Writable => 'int32u',
1342
+ },
1343
+ 0x3402 => { #PH/13
1344
+ Name => 'CameraTemperature',
1345
+ Writable => 'int32s',
1346
+ PrintConv => '"$val C"',
1347
+ PrintConvInv => '$val=~s/ ?C//; $val',
1348
+ },
1349
+ 0x3405 => {
1350
+ Name => 'LensType',
1351
+ Writable => 'int32u',
1352
+ SeparateTable => 1,
1353
+ ValueConv => '($val >> 2) . " " . ($val & 0x3)',
1354
+ ValueConvInv => \&LensTypeConvInv,
1355
+ PrintConv => \%leicaLensTypes,
1356
+ },
1357
+ 0x3406 => { #PH/13
1358
+ Name => 'ApproximateFNumber',
1359
+ Writable => 'rational64u',
1360
+ PrintConv => 'sprintf("%.1f", $val)',
1361
+ PrintConvInv => '$val',
1362
+ },
1363
+ 0x3407 => { #14
1364
+ Name => 'MeasuredLV',
1365
+ Writable => 'int32s',
1366
+ Notes => 'imaging sensor or TTL exposure meter measurement',
1367
+ ValueConv => '$val / 1e5', #PH (NC)
1368
+ ValueConvInv => '$val * 1e5', #PH (NC)
1369
+ PrintConv => 'sprintf("%.2f", $val)',
1370
+ PrintConvInv => '$val',
1371
+ },
1372
+ 0x3408 => { #14
1373
+ Name => 'ExternalSensorBrightnessValue',
1374
+ Writable => 'int32s',
1375
+ Notes => '"blue dot" measurement',
1376
+ ValueConv => '$val / 1e5', #PH (NC)
1377
+ ValueConvInv => '$val * 1e5', #PH (NC)
1378
+ PrintConv => 'sprintf("%.2f", $val)',
1379
+ PrintConvInv => '$val',
1380
+ },
1381
+ 0x3901 => {
1382
+ Name => 'Data1',
1383
+ SubDirectory => { TagTable => 'Image::ExifTool::Panasonic::Data1' },
1384
+ },
1385
+ 0x3902 => {
1386
+ Name => 'Data2',
1387
+ SubDirectory => { TagTable => 'Image::ExifTool::Panasonic::Data2' },
1388
+ },
1389
+ # 0x3903 - larger binary data block
1390
+ );
1391
+
1392
+ %Image::ExifTool::Panasonic::Data1 = (
1393
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
1394
+ WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
1395
+ CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
1396
+ GROUPS => { 0 => 'MakerNotes', 1 => 'Leica', 2 => 'Camera' },
1397
+ WRITABLE => 1,
1398
+ TAG_PREFIX => 'Leica_Data1',
1399
+ FIRST_ENTRY => 0,
1400
+ 0x0016 => {
1401
+ Name => 'LensType',
1402
+ Writable => 'int32u',
1403
+ Priority => 0,
1404
+ SeparateTable => 1,
1405
+ ValueConv => '($val >> 2) . " " . ($val & 0x3)',
1406
+ ValueConvInv => \&LensTypeConvInv,
1407
+ PrintConv => \%leicaLensTypes,
1408
+ },
1409
+ );
1410
+
1411
+ %Image::ExifTool::Panasonic::Data2 = (
1412
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
1413
+ GROUPS => { 0 => 'MakerNotes', 1 => 'Leica', 2 => 'Camera' },
1414
+ TAG_PREFIX => 'Leica_Data2',
1415
+ FIRST_ENTRY => 0,
1416
+ );
1417
+
1418
+ # Leica type5 maker notes (ref PH) (X1)
1419
+ %Image::ExifTool::Panasonic::Leica5 = (
1420
+ WRITE_PROC => \&Image::ExifTool::Exif::WriteExif,
1421
+ CHECK_PROC => \&Image::ExifTool::Exif::CheckExif,
1422
+ GROUPS => { 0 => 'MakerNotes', 1 => 'Leica', 2 => 'Camera' },
1423
+ WRITABLE => 1,
1424
+ NOTES => 'This information is written by the X1.',
1425
+ # 0x0406 - saturation or sharpness
1426
+ 0x0407 => { Name => 'OriginalFileName', Writable => 'string' },
1427
+ 0x0408 => { Name => 'OriginalDirectory',Writable => 'string' },
1428
+ # 0x040b - related to white balance
1429
+ 0x040d => {
1430
+ Name => 'ExposureMode',
1431
+ Format => 'int8u',
1432
+ Count => 4,
1433
+ PrintConv => {
1434
+ '0 0 0 0' => 'Program AE',
1435
+ '1 0 0 0' => 'Aperture-priority AE',
1436
+ '2 0 0 0' => 'Shutter speed priority AE', #(guess)
1437
+ '3 0 0 0' => 'Manual',
1438
+ },
1439
+ },
1440
+ 0x0410 => {
1441
+ Name => 'ShotInfo',
1442
+ SubDirectory => { TagTable => 'Image::ExifTool::Panasonic::ShotInfo' },
1443
+ },
1444
+ # 0x0410 - int8u[16]: first byte is FileNumber
1445
+ # 0x0411 - int8u[4]: first number is FilmMode (1=Standard,2=Vivid,3=Natural,4=BW Natural,5=BW High Contrast)
1446
+ 0x0412 => { Name => 'FilmMode', Writable => 'string' },
1447
+ 0x0413 => { Name => 'WB_RGBLevels', Writable => 'rational64u', Count => 3 },
1448
+ );
1449
+
1450
+ # Leica type5 ShotInfo (ref PH) (X2)
1451
+ %Image::ExifTool::Panasonic::ShotInfo = (
1452
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
1453
+ WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
1454
+ CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
1455
+ GROUPS => { 0 => 'MakerNotes', 1 => 'Leica', 2 => 'Camera' },
1456
+ TAG_PREFIX => 'Leica_ShotInfo',
1457
+ FIRST_ENTRY => 0,
1458
+ WRITABLE => 1,
1459
+ 0 => {
1460
+ Name => 'FileIndex',
1461
+ Format => 'int16u',
1462
+ },
1463
+ );
1464
+
1465
+ # Leica type6 maker notes (ref PH) (S2)
1466
+ %Image::ExifTool::Panasonic::Leica6 = (
1467
+ WRITE_PROC => \&Image::ExifTool::Exif::WriteExif,
1468
+ CHECK_PROC => \&Image::ExifTool::Exif::CheckExif,
1469
+ GROUPS => { 0 => 'MakerNotes', 1 => 'Leica', 2 => 'Camera' },
1470
+ NOTES => 'This information is written by the S2 (as a trailer in JPEG images).',
1471
+ 0x300 => {
1472
+ Name => 'PreviewImage',
1473
+ Writable => 'undef',
1474
+ Notes => 'S2',
1475
+ DataTag => 'PreviewImage',
1476
+ RawConv => q{
1477
+ return \$val if $val =~ /^Binary/;
1478
+ return \$val if $val =~ /^\xff\xd8\xff/;
1479
+ $$self{PreviewError} = 1 unless $val eq 'none';
1480
+ return undef;
1481
+ },
1482
+ ValueConvInv => '$val || "none"',
1483
+ WriteCheck => 'return $val=~/^(none|\xff\xd8\xff)/s ? undef : "Not a valid image"',
1484
+ ChangeBase => '$dirStart + $dataPos - 8',
1485
+ },
1486
+ 0x301 => {
1487
+ Name => 'UnknownBlock',
1488
+ Notes => 'unknown 320kB block, not copied to JPEG images',
1489
+ Flags => [ 'Unknown', 'Binary', 'Drop' ],
1490
+ },
1491
+ # 0x302 - same value as 4 unknown bytes at the end of JPEG or after the DNG TIFF header
1492
+ 0x303 => {
1493
+ Name => 'LensType',
1494
+ Writable => 'string',
1495
+ ValueConv => '$val=~s/ +$//; $val', # trim trailing spaces
1496
+ ValueConvInv => '$val',
1497
+ },
1498
+ # 0x340 - same as 0x302
1499
+ );
1500
+
1501
+ # Type 2 tags (ref PH)
1502
+ %Image::ExifTool::Panasonic::Type2 = (
1503
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
1504
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
1505
+ FIRST_ENTRY => 0,
1506
+ FORMAT => 'int16u',
1507
+ NOTES => q{
1508
+ This type of maker notes is used by models such as the NV-DS65, PV-D2002,
1509
+ PV-DC3000, PV-DV203, PV-DV401, PV-DV702, PV-L2001, PV-SD4090, PV-SD5000 and
1510
+ iPalm.
1511
+ },
1512
+ 0 => {
1513
+ Name => 'MakerNoteType',
1514
+ Format => 'string[4]',
1515
+ },
1516
+ # seems to vary inversely with amount of light, so I'll call it 'Gain' - PH
1517
+ # (minimum is 16, maximum is 136. Value is 0 for pictures captured from video)
1518
+ 3 => 'Gain',
1519
+ );
1520
+
1521
+ # Face detection position information (ref PH)
1522
+ %Image::ExifTool::Panasonic::FaceDetInfo = (
1523
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
1524
+ WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
1525
+ CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
1526
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
1527
+ WRITABLE => 1,
1528
+ FORMAT => 'int16u',
1529
+ FIRST_ENTRY => 0,
1530
+ DATAMEMBER => [ 0 ],
1531
+ NOTES => 'Face detection position information.',
1532
+ 0 => {
1533
+ Name => 'NumFacePositions',
1534
+ Format => 'int16u',
1535
+ DataMember => 'NumFacePositions',
1536
+ RawConv => '$$self{NumFacePositions} = $val',
1537
+ Notes => q{
1538
+ number of detected face positions stored in this record. May be less than
1539
+ FacesDetected
1540
+ },
1541
+ },
1542
+ 1 => {
1543
+ Name => 'Face1Position',
1544
+ Format => 'int16u[4]',
1545
+ RawConv => '$$self{NumFacePositions} < 1 ? undef : $val',
1546
+ Notes => q{
1547
+ 4 numbers: X/Y coordinates of the face center and width/height of face.
1548
+ Coordinates are relative to an image twice the size of the thumbnail, or 320
1549
+ pixels wide
1550
+ },
1551
+ },
1552
+ 5 => {
1553
+ Name => 'Face2Position',
1554
+ Format => 'int16u[4]',
1555
+ RawConv => '$$self{NumFacePositions} < 2 ? undef : $val',
1556
+ },
1557
+ 9 => {
1558
+ Name => 'Face3Position',
1559
+ Format => 'int16u[4]',
1560
+ RawConv => '$$self{NumFacePositions} < 3 ? undef : $val',
1561
+ },
1562
+ 13 => {
1563
+ Name => 'Face4Position',
1564
+ Format => 'int16u[4]',
1565
+ RawConv => '$$self{NumFacePositions} < 4 ? undef : $val',
1566
+ },
1567
+ 17 => {
1568
+ Name => 'Face5Position',
1569
+ Format => 'int16u[4]',
1570
+ RawConv => '$$self{NumFacePositions} < 5 ? undef : $val',
1571
+ },
1572
+ );
1573
+
1574
+ # Face recognition information from DMC-TZ7 (ref PH)
1575
+ %Image::ExifTool::Panasonic::FaceRecInfo = (
1576
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
1577
+ WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
1578
+ CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
1579
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
1580
+ WRITABLE => 1,
1581
+ FIRST_ENTRY => 0,
1582
+ DATAMEMBER => [ 0 ],
1583
+ NOTES => q{
1584
+ Tags written by cameras with facial recognition. These cameras not only
1585
+ detect faces in an image, but also recognize specific people based a
1586
+ user-supplied set of known faces.
1587
+ },
1588
+ 0 => {
1589
+ Name => 'FacesRecognized',
1590
+ Format => 'int16u',
1591
+ DataMember => 'FacesRecognized',
1592
+ RawConv => '$$self{FacesRecognized} = $val',
1593
+ },
1594
+ 4 => {
1595
+ Name => 'RecognizedFace1Name',
1596
+ Format => 'string[20]',
1597
+ RawConv => '$$self{FacesRecognized} < 1 ? undef : $val',
1598
+ },
1599
+ 24 => {
1600
+ Name => 'RecognizedFace1Position',
1601
+ Format => 'int16u[4]',
1602
+ RawConv => '$$self{FacesRecognized} < 1 ? undef : $val',
1603
+ Notes => 'coordinates in same format as face detection tags above',
1604
+ },
1605
+ 32 => {
1606
+ Name => 'RecognizedFace1Age',
1607
+ Format => 'string[20]',
1608
+ RawConv => '$$self{FacesRecognized} < 1 ? undef : $val',
1609
+ },
1610
+ 52 => {
1611
+ Name => 'RecognizedFace2Name',
1612
+ Format => 'string[20]',
1613
+ RawConv => '$$self{FacesRecognized} < 2 ? undef : $val',
1614
+ },
1615
+ 72 => {
1616
+ Name => 'RecognizedFace2Position',
1617
+ Format => 'int16u[4]',
1618
+ RawConv => '$$self{FacesRecognized} < 2 ? undef : $val',
1619
+ },
1620
+ 80 => {
1621
+ Name => 'RecognizedFace2Age',
1622
+ Format => 'string[20]',
1623
+ RawConv => '$$self{FacesRecognized} < 2 ? undef : $val',
1624
+ },
1625
+ 100 => {
1626
+ Name => 'RecognizedFace3Name',
1627
+ Format => 'string[20]',
1628
+ RawConv => '$$self{FacesRecognized} < 3 ? undef : $val',
1629
+ },
1630
+ 120 => {
1631
+ Name => 'RecognizedFace3Position',
1632
+ Format => 'int16u[4]',
1633
+ RawConv => '$$self{FacesRecognized} < 3 ? undef : $val',
1634
+ },
1635
+ 128 => {
1636
+ Name => 'RecognizedFace3Age',
1637
+ Format => 'string[20]',
1638
+ RawConv => '$$self{FacesRecognized} < 3 ? undef : $val',
1639
+ },
1640
+ );
1641
+
1642
+ %Image::ExifTool::Panasonic::PANA = (
1643
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
1644
+ GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
1645
+ NOTES => q{
1646
+ Tags extracted from the PANA user data found in MP4 videos from models such
1647
+ as the DMC-FT20.
1648
+ },
1649
+ 4 => {
1650
+ Name => 'Model',
1651
+ Description => 'Camera Model Name',
1652
+ Format => 'string[16]',
1653
+ },
1654
+ 0x58 => {
1655
+ Name => 'ThumbnailWidth',
1656
+ Format => 'int16u',
1657
+ },
1658
+ 0x5a => {
1659
+ Name => 'ThumbnailHeight',
1660
+ Format => 'int16u',
1661
+ },
1662
+ 0x5c => {
1663
+ Name => 'ThumbnailImage',
1664
+ Format => 'undef[16384]',
1665
+ RawConv => '$val=~/^\xff\xd8\xff/ ? $val : undef',
1666
+ ValueConv => '$val=~s/\0*$//; \$val', # remove trailing zeros
1667
+ },
1668
+ 0x4068 => {
1669
+ Name => 'ExifData',
1670
+ Condition => '$$valPt =~ /^\xff\xd8\xff\xe1..Exif\0\0/s',
1671
+ SubDirectory => {
1672
+ TagTable => 'Image::ExifTool::Exif::Main',
1673
+ ProcessProc => \&Image::ExifTool::ProcessTIFF,
1674
+ Start => 12,
1675
+ },
1676
+ },
1677
+ );
1678
+
1679
+ # Panasonic Composite tags
1680
+ %Image::ExifTool::Panasonic::Composite = (
1681
+ GROUPS => { 2 => 'Camera' },
1682
+ AdvancedSceneMode => {
1683
+ SeparateTable => 'Panasonic AdvancedSceneMode', # print values in a separate table
1684
+ Require => {
1685
+ 0 => 'SceneMode',
1686
+ 1 => 'AdvancedSceneType',
1687
+ },
1688
+ ValueConv => '"$val[0] $val[1]"',
1689
+ PrintConv => { #PH
1690
+ OTHER => sub {
1691
+ my $val = shift;
1692
+ my @v = split ' ', $val;
1693
+ my $prt = $shootingMode{$v[0]};
1694
+ return $v[1] == 1 ? $prt : "$prt ($v[1])" if $prt;
1695
+ return "Unknown ($val)";
1696
+ },
1697
+ Notes => 'A Composite tag derived from SceneMode and AdvancedSceneType.',
1698
+ '0 1' => 'Off',
1699
+ '2 2' => 'Outdoor Portrait', #(FZ28)
1700
+ '2 3' => 'Indoor Portrait', #(FZ28)
1701
+ '2 4' => 'Creative Portrait', #(FZ28)
1702
+ '3 2' => 'Nature', #(FZ28)
1703
+ '3 3' => 'Architecture', #(FZ28)
1704
+ '3 4' => 'Creative Scenery', #(FZ28)
1705
+ #'3 5' - ? (FT1)
1706
+ '4 2' => 'Outdoor Sports', #(FZ28)
1707
+ '4 3' => 'Indoor Sports', #(FZ28)
1708
+ '4 4' => 'Creative Sports', #(FZ28)
1709
+ '9 2' => 'Flower', #(FZ28)
1710
+ '9 3' => 'Objects', #(FZ28)
1711
+ '9 4' => 'Creative Macro', #(FZ28)
1712
+ #'9 5' - ? (GF3)
1713
+ '21 2' => 'Illuminations', #(FZ28)
1714
+ '21 4' => 'Creative Night Scenery', #(FZ28)
1715
+ #'21 5' - ? (LX3)
1716
+ #'37 5' - ? (various)
1717
+ '45 2' => 'Cinema', #(GF2)
1718
+ '45 7' => 'Expressive', #(GF1,GF2)
1719
+ '45 8' => 'Retro', #(GF1,GF2)
1720
+ '45 9' => 'Pure', #(GF1,GF2)
1721
+ '45 10' => 'Elegant', #(GF1,GF2)
1722
+ '45 12' => 'Monochrome', #(GF1,GF2)
1723
+ '45 13' => 'Dynamic Art', #(GF1,GF2)
1724
+ '45 14' => 'Silhouette', #(GF1,GF2)
1725
+ '51 2' => 'HDR Art', #12
1726
+ '51 3' => 'HDR B&W', #12
1727
+ '59 1' => 'Expressive', #(GF5)
1728
+ '59 2' => 'Retro', #(GF5)
1729
+ '59 3' => 'High Key', #(GF5)
1730
+ '59 4' => 'Sepia', #(GF3,GF5)
1731
+ '59 5' => 'High Dynamic', #(GF3,GF5)
1732
+ '59 6' => 'Minature', #(GF3)
1733
+ '59 9' => 'Low Key', #(GF5)
1734
+ '59 10' => 'Toy Effect', #(GF5)
1735
+ '59 11' => 'Dynamic Monochrome', #(GF5)
1736
+ '59 12' => 'Soft', #(GF5)
1737
+ '66 2' => 'Cross Process', #(GF5)
1738
+ '66 3' => 'Color Select', #(GF5)
1739
+ '66 4' => 'Star', #(GF5)
1740
+ '90 3' => 'Old Days', #18
1741
+ '90 4' => 'Sunshine', #18
1742
+ '90 5' => 'Bleach Bypass', #18
1743
+ '90 6' => 'Toy Pop', #18
1744
+ '90 7' => 'Fantasy', #18
1745
+ },
1746
+ },
1747
+ );
1748
+
1749
+ # add our composite tags
1750
+ Image::ExifTool::AddCompositeTags('Image::ExifTool::Panasonic');
1751
+
1752
+ #------------------------------------------------------------------------------
1753
+ # Inverse conversion for Leica M9 lens codes
1754
+ # Inputs: 0) value
1755
+ # Returns: Converted value, or undef on error
1756
+ sub LensTypeConvInv($)
1757
+ {
1758
+ my $val = shift;
1759
+ if ($val =~ /^(\d+) (\d+)$/) {
1760
+ return ($1 << 2) + ($2 & 0x03);
1761
+ } elsif ($val =~ /^\d+$/) {
1762
+ my $bits = $frameSelectorBits{$val};
1763
+ return undef unless defined $bits;
1764
+ return ($val << 2) | $bits;
1765
+ } else {
1766
+ return undef;
1767
+ }
1768
+ }
1769
+
1770
+ #------------------------------------------------------------------------------
1771
+ # Convert Leica Kelvin white balance
1772
+ # Inputs: 0) value, 1) flag to perform inverse conversion
1773
+ # Returns: Converted value, or undef on error
1774
+ sub WhiteBalanceConv($;$$)
1775
+ {
1776
+ my ($val, $inv) = @_;
1777
+ if ($inv) {
1778
+ return $1 + 0x8000 if $val =~ /(\d+)/;
1779
+ } else {
1780
+ return ($val - 0x8000) . ' Kelvin' if $val > 0x8000;
1781
+ }
1782
+ return undef;
1783
+ }
1784
+
1785
+ #------------------------------------------------------------------------------
1786
+ # Process MakerNote trailer written by Leica S2
1787
+ # Inputs: 0) ExifTool object ref, 1) new absolute position of Leica trailer when writing
1788
+ # Returns: On success: 1 when reading, directory data when writing; othewise undef
1789
+ # Notes:
1790
+ # - may be called twice for a file if the first call doesn't succeed
1791
+ # - must leave RAF position unchanged
1792
+ # - uses information from LeicaTrailer member:
1793
+ # TagInfo = tag info ref for MakerNote SubDirectory
1794
+ # Offset/Size = value offset/size from MakerNote IFD
1795
+ # TrailStart/TrailLen = actual JPEG trailer position/size (2nd call only)
1796
+ # - deletes LeicaTrailer member and sets LeicaTrailerPos when successful
1797
+ sub ProcessLeicaTrailer($;$)
1798
+ {
1799
+ my ($exifTool, $newPos) = @_;
1800
+ my $trail = $$exifTool{LeicaTrailer};
1801
+ my $raf = $$exifTool{RAF};
1802
+ my $trailPos = $$trail{TrailPos};
1803
+ my $pos = $trailPos || $$trail{Offset};
1804
+ my $len = $$trail{TrailLen} || $$trail{Size};
1805
+ my ($buff, $result, %tagPtr);
1806
+
1807
+ delete $$exifTool{LeicaTrailer} if $trailPos; # done after this
1808
+ unless ($len > 0) {
1809
+ $exifTool->Warn('Missing Leica MakerNote trailer', 1) if $trailPos;
1810
+ delete $$exifTool{LeicaTrailer};
1811
+ return undef;
1812
+ }
1813
+ my $oldPos = $raf->Tell();
1814
+ my $ok = ($raf->Seek($pos, 0) and $raf->Read($buff, $len) == $len);
1815
+ $raf->Seek($oldPos, 0);
1816
+ unless ($ok) {
1817
+ $exifTool->Warn('Error reading Leica MakerNote trailer', 1) if $trailPos;
1818
+ return undef;
1819
+ }
1820
+ # look for Leica MakerNote header (should be at start of
1821
+ # trailer, but allow up to 256 bytes of garbage just in case)
1822
+ if ($buff !~ /^(.{0,256})LEICA\0..../sg) {
1823
+ my $what = $trailPos ? 'trailer' : 'offset';
1824
+ $exifTool->Warn("Invalid Leica MakerNote $what", 1);
1825
+ return undef;
1826
+ }
1827
+ my $junk = $1;
1828
+ my $start = pos($buff) - 10;
1829
+ if ($start and not $trailPos) {
1830
+ $exifTool->Warn('Invalid Leica MakerNote offset', 1);
1831
+ return undef;
1832
+ }
1833
+ #
1834
+ # all checks passed -- go ahead and process the trailer now
1835
+ #
1836
+ my $hdrLen = 8;
1837
+ my $dirStart = $start + $hdrLen;
1838
+ my $tagInfo = $$trail{TagInfo};
1839
+ if ($$exifTool{HTML_DUMP}) {
1840
+ my $name = $$tagInfo{Name};
1841
+ $exifTool->HDump($pos+$start, $len-$start, "$name value", 'Leica MakerNote trailer', 4);
1842
+ $exifTool->HDump($pos+$start, $hdrLen, "MakerNotes header", $name);
1843
+ } elsif ($exifTool->Options('Verbose')) {
1844
+ my $where = sprintf('at offset 0x%x', $pos);
1845
+ $exifTool->VPrint(0, "Leica MakerNote trailer ($len bytes $where):\n");
1846
+ }
1847
+ # delete LeicaTrailer member so we don't try to process it again
1848
+ delete $$exifTool{LeicaTrailer};
1849
+ $$exifTool{LeicaTrailerPos} = $pos + $start; # return actual start position of Leica trailer
1850
+
1851
+ my $oldOrder = GetByteOrder();
1852
+ my $num = Get16u(\$buff, $dirStart); # get entry count
1853
+ ToggleByteOrder() if ($num>>8) > ($num&0xff); # set byte order
1854
+
1855
+ # use specialized algorithm to automatically fix offsets
1856
+ my $valStart = $dirStart + 2 + 12 * $num + 4;
1857
+ my $fix = 0;
1858
+ if ($valStart < $len) {
1859
+ my $valBlock = Image::ExifTool::MakerNotes::GetValueBlocks(\$buff, $dirStart, \%tagPtr);
1860
+ # find the minimum offset (excluding the PreviewImage tag 0x300)
1861
+ my $minPtr;
1862
+ foreach (keys %tagPtr) {
1863
+ my $ptr = $tagPtr{$_};
1864
+ next if $_ == 0x300 or not $ptr;
1865
+ $minPtr = $ptr if not defined $minPtr or $minPtr > $ptr;
1866
+ }
1867
+ if ($minPtr) {
1868
+ my $diff = $minPtr - ($valStart + $pos);
1869
+ # scan value data for the first non-zero byte
1870
+ pos($buff) = $valStart;
1871
+ if ($buff =~ /[^\0]/g) {
1872
+ my $n = pos($buff) - 1 - $valStart; # number of zero bytes
1873
+ # S2 writes 282 bytes of zeros, exiftool writes none
1874
+ my $expect = $n >= 282 ? 282 : 0;
1875
+ my $fixBase = $exifTool->Options('FixBase');
1876
+ if ($diff != $expect or defined $fixBase) {
1877
+ $fix = $expect - $diff;
1878
+ if (defined $fixBase) {
1879
+ $fix = $fixBase if $fixBase ne '';
1880
+ $exifTool->Warn("Adjusted MakerNotes base by $fix",1);
1881
+ } else {
1882
+ $exifTool->Warn("Possibly incorrect maker notes offsets (fixed by $fix)",1);
1883
+ }
1884
+ }
1885
+ }
1886
+ }
1887
+ }
1888
+ # generate dirInfo for Leica MakerNote directory
1889
+ my %dirInfo = (
1890
+ Name => $$tagInfo{Name},
1891
+ Base => $fix,
1892
+ DataPt => \$buff,
1893
+ DataPos => $pos - $fix,
1894
+ DataLen => $len,
1895
+ DirStart => $dirStart,
1896
+ DirLen => $len - $dirStart,
1897
+ DirName => 'MakerNotes',
1898
+ Parent => 'ExifIFD',
1899
+ TagInfo => $tagInfo,
1900
+ );
1901
+ my $tagTablePtr = GetTagTable($$tagInfo{SubDirectory}{TagTable});
1902
+ if ($newPos) { # are we writing?
1903
+ # set position of new MakerNote IFD (+ 8 for Leica MakerNote header)
1904
+ $dirInfo{NewDataPos} = $newPos + $start + 8;
1905
+ $result = $exifTool->WriteDirectory(\%dirInfo, $tagTablePtr);
1906
+ # write preview image last if necessary and fix up the preview offsets
1907
+ my $previewInfo = $$exifTool{PREVIEW_INFO};
1908
+ delete $$exifTool{PREVIEW_INFO};
1909
+ if ($result) {
1910
+ if ($previewInfo) {
1911
+ my $fixup = $previewInfo->{Fixup};
1912
+ # set preview offset (relative to start of makernotes, + 8 for makernote header)
1913
+ $fixup->SetMarkerPointers(\$result, 'PreviewImage', length($result) + 8);
1914
+ $result .= $$previewInfo{Data};
1915
+ }
1916
+ return $junk . substr($buff, $start, $hdrLen) . $result;
1917
+ }
1918
+ } else {
1919
+ # extract information
1920
+ $result = $exifTool->ProcessDirectory(\%dirInfo, $tagTablePtr);
1921
+ # also extract as a block if necessary
1922
+ if ($exifTool->Options('MakerNotes') or
1923
+ $exifTool->{REQ_TAG_LOOKUP}{lc($$tagInfo{Name})})
1924
+ {
1925
+ # makernote header must be included in RebuildMakerNotes call
1926
+ $dirInfo{DirStart} -= 8;
1927
+ $dirInfo{DirLen} += 8;
1928
+ $exifTool->{MAKER_NOTE_BYTE_ORDER} = GetByteOrder();
1929
+ # rebuild maker notes (creates $exifTool->{MAKER_NOTE_FIXUP})
1930
+ my $val = Image::ExifTool::Exif::RebuildMakerNotes($exifTool, $tagTablePtr, \%dirInfo);
1931
+ unless (defined $val) {
1932
+ $exifTool->Warn('Error rebuilding maker notes (may be corrupt)') if $len > 4;
1933
+ $val = $buff,
1934
+ }
1935
+ my $key = $exifTool->FoundTag($tagInfo, $val);
1936
+ $exifTool->SetGroup($key, 'ExifIFD');
1937
+ }
1938
+ }
1939
+ SetByteOrder($oldOrder);
1940
+ return $result;
1941
+ }
1942
+
1943
+ 1; # end
1944
+
1945
+ __END__
1946
+
1947
+ =head1 NAME
1948
+
1949
+ Image::ExifTool::Panasonic - Panasonic/Leica maker notes tags
1950
+
1951
+ =head1 SYNOPSIS
1952
+
1953
+ This module is loaded automatically by Image::ExifTool when required.
1954
+
1955
+ =head1 DESCRIPTION
1956
+
1957
+ This module contains definitions required by Image::ExifTool to interpret
1958
+ Panasonic and Leica maker notes in EXIF information.
1959
+
1960
+ =head1 AUTHOR
1961
+
1962
+ Copyright 2003-2013, Phil Harvey (phil at owl.phy.queensu.ca)
1963
+
1964
+ This library is free software; you can redistribute it and/or modify it
1965
+ under the same terms as Perl itself.
1966
+
1967
+ =head1 REFERENCES
1968
+
1969
+ =over 4
1970
+
1971
+ =item L<http://www.compton.nu/panasonic.html>
1972
+
1973
+ =item L<http://johnst.org/sw/exiftags/>
1974
+
1975
+ =item L<http://homepage3.nifty.com/kamisaka/makernote/makernote_pana.htm>
1976
+
1977
+ =item L<http://bretteville.com/pdfs/M8Metadata_v2.pdf>
1978
+
1979
+ =item L<http://www.digital-leica.com/lens_codes/index.html>
1980
+
1981
+ =item (...plus lots of testing with store demos and my wife's DMC-FS7!)
1982
+
1983
+ =back
1984
+
1985
+ =head1 ACKNOWLEDGEMENTS
1986
+
1987
+ Thanks to Tels, Marcel Coenen, Jens Duttke, Joerg, Michael Byczkowski, Carl
1988
+ Bretteville, Zdenek Mihula and Olaf Ulrich for their contributions.
1989
+
1990
+ =head1 SEE ALSO
1991
+
1992
+ L<Image::ExifTool::TagNames/Panasonic Tags>,
1993
+ L<Image::ExifTool(3pm)|Image::ExifTool>
1994
+
1995
+ =cut