mini_exiftool_vendored 8.9.7.v2 → 9.2.7.v1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1023) hide show
  1. checksums.yaml +7 -0
  2. data/lib/mini_exiftool_vendored.rb +1 -1
  3. data/lib/mini_exiftool_vendored/version.rb +2 -2
  4. data/mini_exiftool_vendored.gemspec +1 -1
  5. data/vendor/Image-ExifTool-9.27/Changes +6162 -0
  6. data/vendor/Image-ExifTool-9.27/MANIFEST +858 -0
  7. data/vendor/Image-ExifTool-9.27/META.yml +26 -0
  8. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/Makefile.PL +0 -0
  9. data/vendor/Image-ExifTool-9.27/README +227 -0
  10. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27/arg_files}/exif2iptc.args +0 -0
  11. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27/arg_files}/exif2xmp.args +0 -0
  12. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27/arg_files}/gps2xmp.args +0 -0
  13. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27/arg_files}/iptc2exif.args +0 -0
  14. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27/arg_files}/iptc2xmp.args +0 -0
  15. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27/arg_files}/iptcCore.args +0 -0
  16. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27/arg_files}/pdf2xmp.args +0 -0
  17. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27/arg_files}/xmp2exif.args +0 -0
  18. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27/arg_files}/xmp2gps.args +0 -0
  19. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27/arg_files}/xmp2iptc.args +0 -0
  20. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27/arg_files}/xmp2pdf.args +0 -0
  21. data/vendor/Image-ExifTool-9.27/config_files/ExifTool_config +299 -0
  22. data/vendor/Image-ExifTool-9.27/config_files/convert_regions.config +81 -0
  23. data/vendor/Image-ExifTool-9.27/exiftool +5655 -0
  24. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27/fmt_files}/gpx.fmt +0 -0
  25. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27/fmt_files}/gpx_wpt.fmt +0 -0
  26. data/vendor/Image-ExifTool-9.27/fmt_files/kml.fmt +53 -0
  27. data/vendor/Image-ExifTool-9.27/html/ExifTool.html +1951 -0
  28. data/vendor/Image-ExifTool-9.27/html/MIE1.1-20070121.pdf +0 -0
  29. data/vendor/Image-ExifTool-9.27/html/Shift.html +173 -0
  30. data/vendor/Image-ExifTool-9.27/html/TagNames/AFCP.html +49 -0
  31. data/vendor/Image-ExifTool-9.27/html/TagNames/AIFF.html +146 -0
  32. data/vendor/Image-ExifTool-9.27/html/TagNames/APE.html +149 -0
  33. data/vendor/Image-ExifTool-9.27/html/TagNames/APP12.html +188 -0
  34. data/vendor/Image-ExifTool-9.27/html/TagNames/ASF.html +1075 -0
  35. data/vendor/Image-ExifTool-9.27/html/TagNames/BMP.html +110 -0
  36. data/vendor/Image-ExifTool-9.27/html/TagNames/Canon.html +8021 -0
  37. data/vendor/Image-ExifTool-9.27/html/TagNames/CanonCustom.html +2044 -0
  38. data/vendor/Image-ExifTool-9.27/html/TagNames/CanonRaw.html +561 -0
  39. data/vendor/Image-ExifTool-9.27/html/TagNames/CanonVRD.html +1222 -0
  40. data/vendor/Image-ExifTool-9.27/html/TagNames/Casio.html +1569 -0
  41. data/vendor/Image-ExifTool-9.27/html/TagNames/Composite.html +659 -0
  42. data/vendor/Image-ExifTool-9.27/html/TagNames/DICOM.html +15762 -0
  43. data/vendor/Image-ExifTool-9.27/html/TagNames/DNG.html +273 -0
  44. data/vendor/Image-ExifTool-9.27/html/TagNames/DV.html +75 -0
  45. data/vendor/Image-ExifTool-9.27/html/TagNames/DarwinCore.html +1445 -0
  46. data/vendor/Image-ExifTool-9.27/html/TagNames/DjVu.html +312 -0
  47. data/vendor/Image-ExifTool-9.27/html/TagNames/EXE.html +697 -0
  48. data/vendor/Image-ExifTool-9.27/html/TagNames/EXIF.html +3244 -0
  49. data/vendor/Image-ExifTool-9.27/html/TagNames/Extra.html +300 -0
  50. data/vendor/Image-ExifTool-9.27/html/TagNames/FLAC.html +183 -0
  51. data/vendor/Image-ExifTool-9.27/html/TagNames/FLIR.html +615 -0
  52. data/vendor/Image-ExifTool-9.27/html/TagNames/Flash.html +419 -0
  53. data/vendor/Image-ExifTool-9.27/html/TagNames/FlashPix.html +1435 -0
  54. data/vendor/Image-ExifTool-9.27/html/TagNames/Font.html +485 -0
  55. data/vendor/Image-ExifTool-9.27/html/TagNames/FotoStation.html +103 -0
  56. data/vendor/Image-ExifTool-9.27/html/TagNames/FujiFilm.html +636 -0
  57. data/vendor/Image-ExifTool-9.27/html/TagNames/GE.html +40 -0
  58. data/vendor/Image-ExifTool-9.27/html/TagNames/GIF.html +116 -0
  59. data/vendor/Image-ExifTool-9.27/html/TagNames/GIMP.html +140 -0
  60. data/vendor/Image-ExifTool-9.27/html/TagNames/GPS.html +221 -0
  61. data/vendor/Image-ExifTool-9.27/html/TagNames/GeoTiff.html +2177 -0
  62. data/vendor/Image-ExifTool-9.27/html/TagNames/H264.html +387 -0
  63. data/vendor/Image-ExifTool-9.27/html/TagNames/HP.html +155 -0
  64. data/vendor/Image-ExifTool-9.27/html/TagNames/HTML.html +666 -0
  65. data/vendor/Image-ExifTool-9.27/html/TagNames/ICC_Profile.html +710 -0
  66. data/vendor/Image-ExifTool-9.27/html/TagNames/ID3.html +1429 -0
  67. data/vendor/Image-ExifTool-9.27/html/TagNames/IPTC.html +895 -0
  68. data/vendor/Image-ExifTool-9.27/html/TagNames/ITC.html +90 -0
  69. data/vendor/Image-ExifTool-9.27/html/TagNames/JFIF.html +61 -0
  70. data/vendor/Image-ExifTool-9.27/html/TagNames/JPEG.html +523 -0
  71. data/vendor/Image-ExifTool-9.27/html/TagNames/JVC.html +56 -0
  72. data/vendor/Image-ExifTool-9.27/html/TagNames/Jpeg2000.html +464 -0
  73. data/vendor/Image-ExifTool-9.27/html/TagNames/Kodak.html +1759 -0
  74. data/vendor/Image-ExifTool-9.27/html/TagNames/KyoceraRaw.html +92 -0
  75. data/vendor/Image-ExifTool-9.27/html/TagNames/LNK.html +478 -0
  76. data/vendor/Image-ExifTool-9.27/html/TagNames/Leaf.html +870 -0
  77. data/vendor/Image-ExifTool-9.27/html/TagNames/M2TS.html +133 -0
  78. data/vendor/Image-ExifTool-9.27/html/TagNames/MIE.html +1026 -0
  79. data/vendor/Image-ExifTool-9.27/html/TagNames/MIFF.html +196 -0
  80. data/vendor/Image-ExifTool-9.27/html/TagNames/MNG.html +847 -0
  81. data/vendor/Image-ExifTool-9.27/html/TagNames/MPC.html +97 -0
  82. data/vendor/Image-ExifTool-9.27/html/TagNames/MPEG.html +249 -0
  83. data/vendor/Image-ExifTool-9.27/html/TagNames/MPF.html +199 -0
  84. data/vendor/Image-ExifTool-9.27/html/TagNames/MWG.html +519 -0
  85. data/vendor/Image-ExifTool-9.27/html/TagNames/MXF.html +6673 -0
  86. data/vendor/Image-ExifTool-9.27/html/TagNames/Matroska.html +1069 -0
  87. data/vendor/Image-ExifTool-9.27/html/TagNames/Microsoft.html +2066 -0
  88. data/vendor/Image-ExifTool-9.27/html/TagNames/Minolta.html +2550 -0
  89. data/vendor/Image-ExifTool-9.27/html/TagNames/MinoltaRaw.html +326 -0
  90. data/vendor/Image-ExifTool-9.27/html/TagNames/Nikon.html +4453 -0
  91. data/vendor/Image-ExifTool-9.27/html/TagNames/NikonCapture.html +776 -0
  92. data/vendor/Image-ExifTool-9.27/html/TagNames/NikonCustom.html +3835 -0
  93. data/vendor/Image-ExifTool-9.27/html/TagNames/OOXML.html +280 -0
  94. data/vendor/Image-ExifTool-9.27/html/TagNames/Ogg.html +44 -0
  95. data/vendor/Image-ExifTool-9.27/html/TagNames/Olympus.html +3331 -0
  96. data/vendor/Image-ExifTool-9.27/html/TagNames/OpenEXR.html +222 -0
  97. data/vendor/Image-ExifTool-9.27/html/TagNames/PDF.html +745 -0
  98. data/vendor/Image-ExifTool-9.27/html/TagNames/PGF.html +80 -0
  99. data/vendor/Image-ExifTool-9.27/html/TagNames/PICT.html +753 -0
  100. data/vendor/Image-ExifTool-9.27/html/TagNames/PLIST.html +86 -0
  101. data/vendor/Image-ExifTool-9.27/html/TagNames/PNG.html +515 -0
  102. data/vendor/Image-ExifTool-9.27/html/TagNames/PSP.html +160 -0
  103. data/vendor/Image-ExifTool-9.27/html/TagNames/Panasonic.html +1359 -0
  104. data/vendor/Image-ExifTool-9.27/html/TagNames/PanasonicRaw.html +214 -0
  105. data/vendor/Image-ExifTool-9.27/html/TagNames/Pentax.html +4329 -0
  106. data/vendor/Image-ExifTool-9.27/html/TagNames/PhaseOne.html +258 -0
  107. data/vendor/Image-ExifTool-9.27/html/TagNames/PhotoCD.html +402 -0
  108. data/vendor/Image-ExifTool-9.27/html/TagNames/PhotoMechanic.html +196 -0
  109. data/vendor/Image-ExifTool-9.27/html/TagNames/Photoshop.html +460 -0
  110. data/vendor/Image-ExifTool-9.27/html/TagNames/PostScript.html +125 -0
  111. data/vendor/Image-ExifTool-9.27/html/TagNames/PrintIM.html +31 -0
  112. data/vendor/Image-ExifTool-9.27/html/TagNames/Qualcomm.html +4778 -0
  113. data/vendor/Image-ExifTool-9.27/html/TagNames/QuickTime.html +2967 -0
  114. data/vendor/Image-ExifTool-9.27/html/TagNames/RIFF.html +1164 -0
  115. data/vendor/Image-ExifTool-9.27/html/TagNames/RSRC.html +74 -0
  116. data/vendor/Image-ExifTool-9.27/html/TagNames/RTF.html +150 -0
  117. data/vendor/Image-ExifTool-9.27/html/TagNames/Radiance.html +87 -0
  118. data/vendor/Image-ExifTool-9.27/html/TagNames/Rawzor.html +45 -0
  119. data/vendor/Image-ExifTool-9.27/html/TagNames/Real.html +780 -0
  120. data/vendor/Image-ExifTool-9.27/html/TagNames/Reconyx.html +132 -0
  121. data/vendor/Image-ExifTool-9.27/html/TagNames/Ricoh.html +456 -0
  122. data/vendor/Image-ExifTool-9.27/html/TagNames/Samsung.html +377 -0
  123. data/vendor/Image-ExifTool-9.27/html/TagNames/Sanyo.html +366 -0
  124. data/vendor/Image-ExifTool-9.27/html/TagNames/Shortcuts.html +237 -0
  125. data/vendor/Image-ExifTool-9.27/html/TagNames/Sigma.html +372 -0
  126. data/vendor/Image-ExifTool-9.27/html/TagNames/SigmaRaw.html +403 -0
  127. data/vendor/Image-ExifTool-9.27/html/TagNames/Sony.html +4052 -0
  128. data/vendor/Image-ExifTool-9.27/html/TagNames/SonyIDC.html +267 -0
  129. data/vendor/Image-ExifTool-9.27/html/TagNames/Stim.html +200 -0
  130. data/vendor/Image-ExifTool-9.27/html/TagNames/Theora.html +102 -0
  131. data/vendor/Image-ExifTool-9.27/html/TagNames/Unknown.html +31 -0
  132. data/vendor/Image-ExifTool-9.27/html/TagNames/Vorbis.html +228 -0
  133. data/vendor/Image-ExifTool-9.27/html/TagNames/XMP.html +7188 -0
  134. data/vendor/Image-ExifTool-9.27/html/TagNames/ZIP.html +204 -0
  135. data/vendor/Image-ExifTool-9.27/html/TagNames/iWork.html +49 -0
  136. data/vendor/Image-ExifTool-9.27/html/TagNames/index.html +192 -0
  137. data/vendor/Image-ExifTool-9.27/html/TagNames/style.css +31 -0
  138. data/vendor/Image-ExifTool-9.27/html/ancient_history.html +6564 -0
  139. data/vendor/Image-ExifTool-9.27/html/canon_raw.html +366 -0
  140. data/vendor/Image-ExifTool-9.27/html/commentary.html +319 -0
  141. data/vendor/Image-ExifTool-9.27/html/config.html +312 -0
  142. data/vendor/Image-ExifTool-9.27/html/data_members.html +264 -0
  143. data/vendor/Image-ExifTool-9.27/html/exiftool_pod.html +2325 -0
  144. data/vendor/Image-ExifTool-9.27/html/faq.html +1427 -0
  145. data/vendor/Image-ExifTool-9.27/html/filename.html +281 -0
  146. data/vendor/Image-ExifTool-9.27/html/geotag.html +642 -0
  147. data/vendor/Image-ExifTool-9.27/html/history.html +433 -0
  148. data/vendor/Image-ExifTool-9.27/html/htmldump.html +732 -0
  149. data/vendor/Image-ExifTool-9.27/html/idiosyncracies.html +251 -0
  150. data/vendor/Image-ExifTool-9.27/html/index.html +1266 -0
  151. data/vendor/Image-ExifTool-9.27/html/install.html +239 -0
  152. data/vendor/Image-ExifTool-9.27/html/metafiles.html +266 -0
  153. data/vendor/Image-ExifTool-9.27/html/overview.png +0 -0
  154. data/vendor/Image-ExifTool-9.27/html/standards.html +277 -0
  155. data/vendor/Image-ExifTool-9.27/html/struct.html +342 -0
  156. data/vendor/Image-ExifTool-9.27/html/style.css +31 -0
  157. data/vendor/Image-ExifTool-9.27/html/under.html +120 -0
  158. data/vendor/Image-ExifTool-9.27/html/verbose.html +195 -0
  159. data/vendor/Image-ExifTool-9.27/html/writing.html +239 -0
  160. data/vendor/Image-ExifTool-9.27/lib/File/RandomAccess.pm +378 -0
  161. data/vendor/Image-ExifTool-9.27/lib/File/RandomAccess.pod +231 -0
  162. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool.pm +6811 -0
  163. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool.pod +2353 -0
  164. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/AES.pm +501 -0
  165. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/AFCP.pm +280 -0
  166. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/AIFF.pm +271 -0
  167. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/APE.pm +262 -0
  168. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/APP12.pm +322 -0
  169. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/ASF.pm +871 -0
  170. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/BMP.pm +179 -0
  171. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/BZZ.pm +472 -0
  172. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/BigTIFF.pm +282 -0
  173. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/BuildTagLookup.pm +2391 -0
  174. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Canon.pm +7736 -0
  175. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/CanonCustom.pm +2523 -0
  176. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/CanonRaw.pm +931 -0
  177. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/CanonVRD.pm +1481 -0
  178. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/CaptureOne.pm +235 -0
  179. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Casio.pm +2013 -0
  180. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Charset.pm +396 -0
  181. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/Arabic.pm +0 -0
  182. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/Baltic.pm +0 -0
  183. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/Cyrillic.pm +0 -0
  184. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/Greek.pm +0 -0
  185. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/Hebrew.pm +0 -0
  186. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/JIS.pm +0 -0
  187. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/Latin.pm +0 -0
  188. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/Latin2.pm +0 -0
  189. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacArabic.pm +0 -0
  190. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacChineseCN.pm +0 -0
  191. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacChineseTW.pm +0 -0
  192. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacCroatian.pm +0 -0
  193. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacCyrillic.pm +0 -0
  194. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacGreek.pm +0 -0
  195. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacHebrew.pm +0 -0
  196. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacIceland.pm +0 -0
  197. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacJapanese.pm +0 -0
  198. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacKorean.pm +0 -0
  199. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacLatin2.pm +0 -0
  200. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacRSymbol.pm +0 -0
  201. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacRoman.pm +0 -0
  202. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacRomanian.pm +0 -0
  203. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacThai.pm +0 -0
  204. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacTurkish.pm +0 -0
  205. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/PDFDoc.pm +0 -0
  206. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/ShiftJIS.pm +0 -0
  207. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/Symbol.pm +0 -0
  208. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/Thai.pm +0 -0
  209. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/Turkish.pm +0 -0
  210. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/Vietnam.pm +0 -0
  211. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/DICOM.pm +3835 -0
  212. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/DNG.pm +835 -0
  213. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/DV.pm +319 -0
  214. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/DarwinCore.pm +317 -0
  215. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/DjVu.pm +373 -0
  216. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/EXE.pm +1228 -0
  217. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Exif.pm +4526 -0
  218. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/FLAC.pm +296 -0
  219. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/FLIR.pm +672 -0
  220. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Fixup.pm +354 -0
  221. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Flash.pm +755 -0
  222. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/FlashPix.pm +1882 -0
  223. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Font.pm +643 -0
  224. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/FotoStation.pm +258 -0
  225. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/FujiFilm.pm +1019 -0
  226. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/GE.pm +80 -0
  227. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/GIF.pm +542 -0
  228. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/GIMP.pm +258 -0
  229. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/GPS.pm +511 -0
  230. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/GeoTiff.pm +2187 -0
  231. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Geotag.pm +1173 -0
  232. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/H264.pm +1097 -0
  233. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/HP.pm +262 -0
  234. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/HTML.pm +576 -0
  235. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/HtmlDump.pm +895 -0
  236. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/ICC_Profile.pm +999 -0
  237. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/ID3.pm +1486 -0
  238. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/IPTC.pm +1244 -0
  239. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/ITC.pm +215 -0
  240. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Import.pm +308 -0
  241. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/InDesign.pm +277 -0
  242. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/JPEG.pm +588 -0
  243. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/JPEGDigest.pm +2511 -0
  244. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/JVC.pm +130 -0
  245. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Jpeg2000.pm +881 -0
  246. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Kodak.pm +2014 -0
  247. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/KyoceraRaw.pm +173 -0
  248. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/LNK.pm +723 -0
  249. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/cs.pm +1586 -0
  250. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/de.pm +7356 -0
  251. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/en_ca.pm +557 -0
  252. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/en_gb.pm +572 -0
  253. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/es.pm +4016 -0
  254. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/fi.pm +2856 -0
  255. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/fr.pm +4720 -0
  256. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/it.pm +7917 -0
  257. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/ja.pm +5815 -0
  258. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/ko.pm +2332 -0
  259. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/nl.pm +3220 -0
  260. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/pl.pm +1140 -0
  261. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/ru.pm +769 -0
  262. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/sv.pm +639 -0
  263. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/tr.pm +544 -0
  264. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/zh_cn.pm +1329 -0
  265. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/zh_tw.pm +802 -0
  266. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Leaf.pm +515 -0
  267. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/M2TS.pm +729 -0
  268. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/MIE.pm +2561 -0
  269. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/MIEUnits.pod +377 -0
  270. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/MIFF.pm +279 -0
  271. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/MNG.pm +684 -0
  272. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/MPC.pm +156 -0
  273. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/MPEG.pm +736 -0
  274. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/MPF.pm +289 -0
  275. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/MWG.pm +736 -0
  276. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/MXF.pm +3032 -0
  277. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/MakerNotes.pm +1569 -0
  278. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Matroska.pm +891 -0
  279. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Microsoft.pm +879 -0
  280. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Minolta.pm +2823 -0
  281. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/MinoltaRaw.pm +534 -0
  282. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Nikon.pm +6105 -0
  283. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/NikonCapture.pm +911 -0
  284. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/NikonCustom.pm +4405 -0
  285. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/OOXML.pm +409 -0
  286. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Ogg.pm +237 -0
  287. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Olympus.pm +3540 -0
  288. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/OpenEXR.pm +324 -0
  289. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/PDF.pm +2327 -0
  290. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/PGF.pm +143 -0
  291. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/PICT.pm +1260 -0
  292. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/PLIST.pm +449 -0
  293. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/PNG.pm +1100 -0
  294. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/PPM.pm +169 -0
  295. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/PSP.pm +305 -0
  296. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Panasonic.pm +1921 -0
  297. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/PanasonicRaw.pm +535 -0
  298. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Pentax.pm +5486 -0
  299. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/PhaseOne.pm +557 -0
  300. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/PhotoCD.pm +507 -0
  301. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/PhotoMechanic.pm +256 -0
  302. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Photoshop.pm +597 -0
  303. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/PostScript.pm +693 -0
  304. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/PrintIM.pm +125 -0
  305. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Qualcomm.pm +1344 -0
  306. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/QuickTime.pm +3316 -0
  307. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/README +943 -0
  308. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/RIFF.pm +1322 -0
  309. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/RSRC.pm +241 -0
  310. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/RTF.pm +383 -0
  311. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Radiance.pm +144 -0
  312. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Rawzor.pm +190 -0
  313. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Real.pm +736 -0
  314. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Reconyx.pm +190 -0
  315. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Ricoh.pm +740 -0
  316. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Samsung.pm +769 -0
  317. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Sanyo.pm +439 -0
  318. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Shift.pl +594 -0
  319. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Shortcuts.pm +291 -0
  320. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Sigma.pm +574 -0
  321. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/SigmaRaw.pm +649 -0
  322. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Sony.pm +5388 -0
  323. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/SonyIDC.pm +330 -0
  324. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Stim.pm +196 -0
  325. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/TagInfoXML.pm +792 -0
  326. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/TagLookup.pm +7911 -0
  327. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/TagNames.pod +25645 -0
  328. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Theora.pm +145 -0
  329. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Unknown.pm +66 -0
  330. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Vorbis.pm +237 -0
  331. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/WriteCanonRaw.pl +637 -0
  332. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/WriteExif.pl +3674 -0
  333. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/WriteIPTC.pl +702 -0
  334. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/WritePDF.pl +759 -0
  335. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/WritePNG.pl +330 -0
  336. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/WritePhotoshop.pl +266 -0
  337. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/WritePostScript.pl +777 -0
  338. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/WriteXMP.pl +1318 -0
  339. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Writer.pl +5755 -0
  340. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/XMP.pm +3535 -0
  341. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/XMP2.pl +1298 -0
  342. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/XMPStruct.pl +813 -0
  343. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/ZIP.pm +623 -0
  344. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/iWork.pm +223 -0
  345. data/vendor/Image-ExifTool-9.27/perl-Image-ExifTool.spec +104 -0
  346. data/vendor/Image-ExifTool-9.27/t/AFCP.t +44 -0
  347. data/vendor/Image-ExifTool-9.27/t/AFCP_2.out +37 -0
  348. data/vendor/Image-ExifTool-9.27/t/AFCP_3.out +20 -0
  349. data/vendor/Image-ExifTool-9.27/t/AIFF.t +28 -0
  350. data/vendor/Image-ExifTool-9.27/t/AIFF_2.out +31 -0
  351. data/vendor/Image-ExifTool-9.27/t/APE.t +38 -0
  352. data/vendor/Image-ExifTool-9.27/t/APE_2.out +28 -0
  353. data/vendor/Image-ExifTool-9.27/t/APE_3.out +57 -0
  354. data/vendor/Image-ExifTool-9.27/t/ASF.t +28 -0
  355. data/vendor/Image-ExifTool-9.27/t/ASF_2.out +48 -0
  356. data/vendor/Image-ExifTool-9.27/t/BMP.t +28 -0
  357. data/vendor/Image-ExifTool-9.27/t/BMP_2.out +21 -0
  358. data/vendor/Image-ExifTool-9.27/t/BigTIFF.t +28 -0
  359. data/vendor/Image-ExifTool-9.27/t/BigTIFF_2.out +19 -0
  360. data/vendor/Image-ExifTool-9.27/t/Canon.t +41 -0
  361. data/vendor/Image-ExifTool-9.27/t/CanonRaw.t +126 -0
  362. data/vendor/Image-ExifTool-9.27/t/CanonRaw_2.out +165 -0
  363. data/vendor/Image-ExifTool-9.27/t/CanonRaw_4.out +214 -0
  364. data/vendor/Image-ExifTool-9.27/t/CanonRaw_5.out +207 -0
  365. data/vendor/Image-ExifTool-9.27/t/CanonRaw_6.out +231 -0
  366. data/vendor/Image-ExifTool-9.27/t/CanonRaw_7.out +246 -0
  367. data/vendor/Image-ExifTool-9.27/t/CanonVRD.t +129 -0
  368. data/vendor/Image-ExifTool-9.27/t/CanonVRD_11.out +118 -0
  369. data/vendor/Image-ExifTool-9.27/t/CanonVRD_12.out +12 -0
  370. data/vendor/Image-ExifTool-9.27/t/CanonVRD_2.out +116 -0
  371. data/vendor/Image-ExifTool-9.27/t/CanonVRD_3.out +116 -0
  372. data/vendor/Image-ExifTool-9.27/t/CanonVRD_4.out +2 -0
  373. data/vendor/Image-ExifTool-9.27/t/CanonVRD_5.out +3 -0
  374. data/vendor/Image-ExifTool-9.27/t/CanonVRD_6.out +3 -0
  375. data/vendor/Image-ExifTool-9.27/t/CanonVRD_7.out +2 -0
  376. data/vendor/Image-ExifTool-9.27/t/CanonVRD_8.out +2 -0
  377. data/vendor/Image-ExifTool-9.27/t/CanonVRD_9.out +1 -0
  378. data/vendor/Image-ExifTool-9.27/t/Canon_2.out +350 -0
  379. data/vendor/Image-ExifTool-9.27/t/Canon_3.out +3 -0
  380. data/vendor/Image-ExifTool-9.27/t/Casio.t +54 -0
  381. data/vendor/Image-ExifTool-9.27/t/Casio_2.out +70 -0
  382. data/vendor/Image-ExifTool-9.27/t/Casio_3.out +100 -0
  383. data/vendor/Image-ExifTool-9.27/t/Casio_4.out +26 -0
  384. data/vendor/Image-ExifTool-9.27/t/Casio_5.out +78 -0
  385. data/vendor/Image-ExifTool-9.27/t/Casio_6.out +115 -0
  386. data/vendor/Image-ExifTool-9.27/t/DICOM.t +28 -0
  387. data/vendor/Image-ExifTool-9.27/t/DICOM_2.out +108 -0
  388. data/vendor/Image-ExifTool-9.27/t/DNG.t +39 -0
  389. data/vendor/Image-ExifTool-9.27/t/DNG_2.out +326 -0
  390. data/vendor/Image-ExifTool-9.27/t/DNG_3.out +4 -0
  391. data/vendor/Image-ExifTool-9.27/t/DV.t +27 -0
  392. data/vendor/Image-ExifTool-9.27/t/DV_2.out +24 -0
  393. data/vendor/Image-ExifTool-9.27/t/DjVu.t +28 -0
  394. data/vendor/Image-ExifTool-9.27/t/DjVu_2.out +44 -0
  395. data/vendor/Image-ExifTool-9.27/t/EXE.t +31 -0
  396. data/vendor/Image-ExifTool-9.27/t/EXE_2.out +40 -0
  397. data/vendor/Image-ExifTool-9.27/t/EXE_3.out +15 -0
  398. data/vendor/Image-ExifTool-9.27/t/EXE_4.out +14 -0
  399. data/vendor/Image-ExifTool-9.27/t/ExifTool.t +284 -0
  400. data/vendor/Image-ExifTool-9.27/t/ExifTool_16.out +180 -0
  401. data/vendor/Image-ExifTool-9.27/t/ExifTool_17.out +594 -0
  402. data/vendor/Image-ExifTool-9.27/t/ExifTool_2.out +399 -0
  403. data/vendor/Image-ExifTool-9.27/t/ExifTool_20.out +1 -0
  404. data/vendor/Image-ExifTool-9.27/t/ExifTool_21.out +1 -0
  405. data/vendor/Image-ExifTool-9.27/t/ExifTool_22.out +1 -0
  406. data/vendor/Image-ExifTool-9.27/t/ExifTool_23.out +6 -0
  407. data/vendor/Image-ExifTool-9.27/t/ExifTool_24.out +3 -0
  408. data/vendor/Image-ExifTool-9.27/t/ExifTool_25.out +13 -0
  409. data/vendor/Image-ExifTool-9.27/t/ExifTool_26.out +12 -0
  410. data/vendor/Image-ExifTool-9.27/t/ExifTool_3.out +87 -0
  411. data/vendor/Image-ExifTool-9.27/t/ExifTool_4.out +41 -0
  412. data/vendor/Image-ExifTool-9.27/t/ExifTool_5.out +6 -0
  413. data/vendor/Image-ExifTool-9.27/t/ExifTool_6.out +68 -0
  414. data/vendor/Image-ExifTool-9.27/t/ExifTool_7.out +125 -0
  415. data/vendor/Image-ExifTool-9.27/t/ExifTool_8.out +125 -0
  416. data/vendor/Image-ExifTool-9.27/t/ExifTool_9.out +33 -0
  417. data/vendor/Image-ExifTool-9.27/t/FLAC.t +37 -0
  418. data/vendor/Image-ExifTool-9.27/t/FLAC_2.out +25 -0
  419. data/vendor/Image-ExifTool-9.27/t/FLAC_3.out +19 -0
  420. data/vendor/Image-ExifTool-9.27/t/FLIR.t +30 -0
  421. data/vendor/Image-ExifTool-9.27/t/FLIR_2.out +93 -0
  422. data/vendor/Image-ExifTool-9.27/t/FLIR_3.out +47 -0
  423. data/vendor/Image-ExifTool-9.27/t/Flash.t +37 -0
  424. data/vendor/Image-ExifTool-9.27/t/FlashPix.t +30 -0
  425. data/vendor/Image-ExifTool-9.27/t/FlashPix_2.out +48 -0
  426. data/vendor/Image-ExifTool-9.27/t/Flash_2.out +20 -0
  427. data/vendor/Image-ExifTool-9.27/t/Flash_3.out +53 -0
  428. data/vendor/Image-ExifTool-9.27/t/Font.t +30 -0
  429. data/vendor/Image-ExifTool-9.27/t/Font_2.out +23 -0
  430. data/vendor/Image-ExifTool-9.27/t/Font_3.out +35 -0
  431. data/vendor/Image-ExifTool-9.27/t/Font_4.out +26 -0
  432. data/vendor/Image-ExifTool-9.27/t/Font_5.out +26 -0
  433. data/vendor/Image-ExifTool-9.27/t/Font_6.out +36 -0
  434. data/vendor/Image-ExifTool-9.27/t/Font_7.out +36 -0
  435. data/vendor/Image-ExifTool-9.27/t/FotoStation.t +38 -0
  436. data/vendor/Image-ExifTool-9.27/t/FotoStation_2.out +39 -0
  437. data/vendor/Image-ExifTool-9.27/t/FotoStation_3.out +3 -0
  438. data/vendor/Image-ExifTool-9.27/t/FujiFilm.t +78 -0
  439. data/vendor/Image-ExifTool-9.27/t/FujiFilm_2.out +87 -0
  440. data/vendor/Image-ExifTool-9.27/t/FujiFilm_3.out +88 -0
  441. data/vendor/Image-ExifTool-9.27/t/FujiFilm_4.out +117 -0
  442. data/vendor/Image-ExifTool-9.27/t/FujiFilm_5.out +1 -0
  443. data/vendor/Image-ExifTool-9.27/t/GE.t +46 -0
  444. data/vendor/Image-ExifTool-9.27/t/GE_2.out +84 -0
  445. data/vendor/Image-ExifTool-9.27/t/GE_3.out +84 -0
  446. data/vendor/Image-ExifTool-9.27/t/GIF.t +83 -0
  447. data/vendor/Image-ExifTool-9.27/t/GIF_2.out +40 -0
  448. data/vendor/Image-ExifTool-9.27/t/GIF_3.out +41 -0
  449. data/vendor/Image-ExifTool-9.27/t/GIF_4.out +16 -0
  450. data/vendor/Image-ExifTool-9.27/t/GIMP.t +27 -0
  451. data/vendor/Image-ExifTool-9.27/t/GIMP_2.out +63 -0
  452. data/vendor/Image-ExifTool-9.27/t/GPS.t +42 -0
  453. data/vendor/Image-ExifTool-9.27/t/GPS_2.out +94 -0
  454. data/vendor/Image-ExifTool-9.27/t/GPS_3.out +96 -0
  455. data/vendor/Image-ExifTool-9.27/t/GeoTiff.t +36 -0
  456. data/vendor/Image-ExifTool-9.27/t/GeoTiff_2.out +36 -0
  457. data/vendor/Image-ExifTool-9.27/t/GeoTiff_3.out +36 -0
  458. data/vendor/Image-ExifTool-9.27/t/Geotag.t +164 -0
  459. data/vendor/Image-ExifTool-9.27/t/Geotag_2.out +9 -0
  460. data/vendor/Image-ExifTool-9.27/t/Geotag_3.out +6 -0
  461. data/vendor/Image-ExifTool-9.27/t/Geotag_5.out +1 -0
  462. data/vendor/Image-ExifTool-9.27/t/Geotag_6.out +9 -0
  463. data/vendor/Image-ExifTool-9.27/t/Geotag_7.out +53 -0
  464. data/vendor/Image-ExifTool-9.27/t/Geotag_8.out +15 -0
  465. data/vendor/Image-ExifTool-9.27/t/HTML.t +28 -0
  466. data/vendor/Image-ExifTool-9.27/t/HTML_2.out +68 -0
  467. data/vendor/Image-ExifTool-9.27/t/IPTC.t +157 -0
  468. data/vendor/Image-ExifTool-9.27/t/IPTC_2.out +58 -0
  469. data/vendor/Image-ExifTool-9.27/t/IPTC_4.out +56 -0
  470. data/vendor/Image-ExifTool-9.27/t/IPTC_5.out +1 -0
  471. data/vendor/Image-ExifTool-9.27/t/IPTC_6.out +2 -0
  472. data/vendor/Image-ExifTool-9.27/t/IPTC_7.out +1 -0
  473. data/vendor/Image-ExifTool-9.27/t/IPTC_8.out +20 -0
  474. data/vendor/Image-ExifTool-9.27/t/ITC.t +28 -0
  475. data/vendor/Image-ExifTool-9.27/t/ITC_2.out +19 -0
  476. data/vendor/Image-ExifTool-9.27/t/InDesign.t +61 -0
  477. data/vendor/Image-ExifTool-9.27/t/InDesign_2.out +19 -0
  478. data/vendor/Image-ExifTool-9.27/t/InDesign_3.out +21 -0
  479. data/vendor/Image-ExifTool-9.27/t/InDesign_4.out +11 -0
  480. data/vendor/Image-ExifTool-9.27/t/JVC.t +36 -0
  481. data/vendor/Image-ExifTool-9.27/t/JVC_2.out +3 -0
  482. data/vendor/Image-ExifTool-9.27/t/JVC_3.out +3 -0
  483. data/vendor/Image-ExifTool-9.27/t/Jpeg2000.t +49 -0
  484. data/vendor/Image-ExifTool-9.27/t/Jpeg2000_2.out +63 -0
  485. data/vendor/Image-ExifTool-9.27/t/Jpeg2000_3.out +51 -0
  486. data/vendor/Image-ExifTool-9.27/t/Jpeg2000_4.out +15 -0
  487. data/vendor/Image-ExifTool-9.27/t/Kodak.t +40 -0
  488. data/vendor/Image-ExifTool-9.27/t/Kodak_2.out +109 -0
  489. data/vendor/Image-ExifTool-9.27/t/Kodak_3.out +119 -0
  490. data/vendor/Image-ExifTool-9.27/t/KyoceraRaw.t +28 -0
  491. data/vendor/Image-ExifTool-9.27/t/KyoceraRaw_2.out +27 -0
  492. data/vendor/Image-ExifTool-9.27/t/LNK.t +28 -0
  493. data/vendor/Image-ExifTool-9.27/t/LNK_2.out +45 -0
  494. data/vendor/Image-ExifTool-9.27/t/Lang.t +40 -0
  495. data/vendor/Image-ExifTool-9.27/t/Lang_1.out +1 -0
  496. data/vendor/Image-ExifTool-9.27/t/Lang_10.out +46 -0
  497. data/vendor/Image-ExifTool-9.27/t/Lang_11.out +46 -0
  498. data/vendor/Image-ExifTool-9.27/t/Lang_12.out +46 -0
  499. data/vendor/Image-ExifTool-9.27/t/Lang_13.out +46 -0
  500. data/vendor/Image-ExifTool-9.27/t/Lang_14.out +46 -0
  501. data/vendor/Image-ExifTool-9.27/t/Lang_15.out +46 -0
  502. data/vendor/Image-ExifTool-9.27/t/Lang_16.out +46 -0
  503. data/vendor/Image-ExifTool-9.27/t/Lang_17.out +46 -0
  504. data/vendor/Image-ExifTool-9.27/t/Lang_18.out +46 -0
  505. data/vendor/Image-ExifTool-9.27/t/Lang_2.out +46 -0
  506. data/vendor/Image-ExifTool-9.27/t/Lang_3.out +46 -0
  507. data/vendor/Image-ExifTool-9.27/t/Lang_4.out +46 -0
  508. data/vendor/Image-ExifTool-9.27/t/Lang_5.out +46 -0
  509. data/vendor/Image-ExifTool-9.27/t/Lang_6.out +46 -0
  510. data/vendor/Image-ExifTool-9.27/t/Lang_7.out +46 -0
  511. data/vendor/Image-ExifTool-9.27/t/Lang_8.out +46 -0
  512. data/vendor/Image-ExifTool-9.27/t/Lang_9.out +46 -0
  513. data/vendor/Image-ExifTool-9.27/t/M2TS.t +29 -0
  514. data/vendor/Image-ExifTool-9.27/t/M2TS_2.out +27 -0
  515. data/vendor/Image-ExifTool-9.27/t/MIE.t +82 -0
  516. data/vendor/Image-ExifTool-9.27/t/MIE_2.out +67 -0
  517. data/vendor/Image-ExifTool-9.27/t/MIE_3.out +134 -0
  518. data/vendor/Image-ExifTool-9.27/t/MIE_5.out +1 -0
  519. data/vendor/Image-ExifTool-9.27/t/MIE_6.out +1 -0
  520. data/vendor/Image-ExifTool-9.27/t/MIFF.t +28 -0
  521. data/vendor/Image-ExifTool-9.27/t/MIFF_2.out +108 -0
  522. data/vendor/Image-ExifTool-9.27/t/MP3.t +29 -0
  523. data/vendor/Image-ExifTool-9.27/t/MP3_2.out +45 -0
  524. data/vendor/Image-ExifTool-9.27/t/MWG.t +72 -0
  525. data/vendor/Image-ExifTool-9.27/t/MWG_2.out +13 -0
  526. data/vendor/Image-ExifTool-9.27/t/MWG_3.out +8 -0
  527. data/vendor/Image-ExifTool-9.27/t/MWG_4.out +5 -0
  528. data/vendor/Image-ExifTool-9.27/t/MWG_5.out +22 -0
  529. data/vendor/Image-ExifTool-9.27/t/MXF.t +27 -0
  530. data/vendor/Image-ExifTool-9.27/t/MXF_2.out +78 -0
  531. data/vendor/Image-ExifTool-9.27/t/Matroska.t +29 -0
  532. data/vendor/Image-ExifTool-9.27/t/Matroska_2.out +64 -0
  533. data/vendor/Image-ExifTool-9.27/t/Minolta.t +50 -0
  534. data/vendor/Image-ExifTool-9.27/t/Minolta_2.out +133 -0
  535. data/vendor/Image-ExifTool-9.27/t/Minolta_3.out +146 -0
  536. data/vendor/Image-ExifTool-9.27/t/Minolta_4.out +148 -0
  537. data/vendor/Image-ExifTool-9.27/t/Nikon.t +114 -0
  538. data/vendor/Image-ExifTool-9.27/t/Nikon_2.out +82 -0
  539. data/vendor/Image-ExifTool-9.27/t/Nikon_3.out +98 -0
  540. data/vendor/Image-ExifTool-9.27/t/Nikon_4.out +173 -0
  541. data/vendor/Image-ExifTool-9.27/t/Nikon_5.out +167 -0
  542. data/vendor/Image-ExifTool-9.27/t/Nikon_7.out +260 -0
  543. data/vendor/Image-ExifTool-9.27/t/Nikon_8.out +4 -0
  544. data/vendor/Image-ExifTool-9.27/t/Olympus.t +85 -0
  545. data/vendor/Image-ExifTool-9.27/t/Olympus_2.out +79 -0
  546. data/vendor/Image-ExifTool-9.27/t/Olympus_3.out +81 -0
  547. data/vendor/Image-ExifTool-9.27/t/Olympus_4.out +192 -0
  548. data/vendor/Image-ExifTool-9.27/t/Olympus_5.out +264 -0
  549. data/vendor/Image-ExifTool-9.27/t/Olympus_6.out +151 -0
  550. data/vendor/Image-ExifTool-9.27/t/Olympus_7.out +482 -0
  551. data/vendor/Image-ExifTool-9.27/t/OpenEXR.t +28 -0
  552. data/vendor/Image-ExifTool-9.27/t/OpenEXR_2.out +23 -0
  553. data/vendor/Image-ExifTool-9.27/t/PDF.t +295 -0
  554. data/vendor/Image-ExifTool-9.27/t/PDF_10.out +10 -0
  555. data/vendor/Image-ExifTool-9.27/t/PDF_11.out +10 -0
  556. data/vendor/Image-ExifTool-9.27/t/PDF_12.out +9 -0
  557. data/vendor/Image-ExifTool-9.27/t/PDF_14.out +5 -0
  558. data/vendor/Image-ExifTool-9.27/t/PDF_15.out +6 -0
  559. data/vendor/Image-ExifTool-9.27/t/PDF_16.out +4 -0
  560. data/vendor/Image-ExifTool-9.27/t/PDF_17.out +4 -0
  561. data/vendor/Image-ExifTool-9.27/t/PDF_18.out +5 -0
  562. data/vendor/Image-ExifTool-9.27/t/PDF_19.out +6 -0
  563. data/vendor/Image-ExifTool-9.27/t/PDF_2.out +117 -0
  564. data/vendor/Image-ExifTool-9.27/t/PDF_20.out +4 -0
  565. data/vendor/Image-ExifTool-9.27/t/PDF_22.out +3 -0
  566. data/vendor/Image-ExifTool-9.27/t/PDF_4.out +12 -0
  567. data/vendor/Image-ExifTool-9.27/t/PDF_5.out +8 -0
  568. data/vendor/Image-ExifTool-9.27/t/PDF_6.out +9 -0
  569. data/vendor/Image-ExifTool-9.27/t/PDF_7.out +11 -0
  570. data/vendor/Image-ExifTool-9.27/t/PDF_8.out +9 -0
  571. data/vendor/Image-ExifTool-9.27/t/PDF_9.out +9 -0
  572. data/vendor/Image-ExifTool-9.27/t/PGF.t +28 -0
  573. data/vendor/Image-ExifTool-9.27/t/PGF_2.out +32 -0
  574. data/vendor/Image-ExifTool-9.27/t/PICT.t +28 -0
  575. data/vendor/Image-ExifTool-9.27/t/PICT_2.out +15 -0
  576. data/vendor/Image-ExifTool-9.27/t/PLIST.t +31 -0
  577. data/vendor/Image-ExifTool-9.27/t/PLIST_2.out +20 -0
  578. data/vendor/Image-ExifTool-9.27/t/PLIST_3.out +20 -0
  579. data/vendor/Image-ExifTool-9.27/t/PNG.t +75 -0
  580. data/vendor/Image-ExifTool-9.27/t/PNG_2.out +22 -0
  581. data/vendor/Image-ExifTool-9.27/t/PNG_3.out +118 -0
  582. data/vendor/Image-ExifTool-9.27/t/PNG_4.out +12 -0
  583. data/vendor/Image-ExifTool-9.27/t/PPM.t +40 -0
  584. data/vendor/Image-ExifTool-9.27/t/PPM_2.out +15 -0
  585. data/vendor/Image-ExifTool-9.27/t/PPM_3.out +9 -0
  586. data/vendor/Image-ExifTool-9.27/t/PSP.t +28 -0
  587. data/vendor/Image-ExifTool-9.27/t/PSP_2.out +32 -0
  588. data/vendor/Image-ExifTool-9.27/t/Panasonic.t +60 -0
  589. data/vendor/Image-ExifTool-9.27/t/Panasonic_2.out +99 -0
  590. data/vendor/Image-ExifTool-9.27/t/Panasonic_3.out +119 -0
  591. data/vendor/Image-ExifTool-9.27/t/Panasonic_4.out +177 -0
  592. data/vendor/Image-ExifTool-9.27/t/Panasonic_5.out +228 -0
  593. data/vendor/Image-ExifTool-9.27/t/Pentax.t +50 -0
  594. data/vendor/Image-ExifTool-9.27/t/Pentax_2.out +219 -0
  595. data/vendor/Image-ExifTool-9.27/t/Pentax_3.out +262 -0
  596. data/vendor/Image-ExifTool-9.27/t/Pentax_4.out +123 -0
  597. data/vendor/Image-ExifTool-9.27/t/PhotoCD.t +28 -0
  598. data/vendor/Image-ExifTool-9.27/t/PhotoCD_2.out +35 -0
  599. data/vendor/Image-ExifTool-9.27/t/PhotoMechanic.t +38 -0
  600. data/vendor/Image-ExifTool-9.27/t/PhotoMechanic_2.out +81 -0
  601. data/vendor/Image-ExifTool-9.27/t/PhotoMechanic_3.out +2 -0
  602. data/vendor/Image-ExifTool-9.27/t/Photoshop.t +42 -0
  603. data/vendor/Image-ExifTool-9.27/t/Photoshop_2.out +96 -0
  604. data/vendor/Image-ExifTool-9.27/t/Photoshop_3.out +108 -0
  605. data/vendor/Image-ExifTool-9.27/t/PostScript.t +49 -0
  606. data/vendor/Image-ExifTool-9.27/t/PostScript_2.out +64 -0
  607. data/vendor/Image-ExifTool-9.27/t/PostScript_3.out +132 -0
  608. data/vendor/Image-ExifTool-9.27/t/QuickTime.t +31 -0
  609. data/vendor/Image-ExifTool-9.27/t/QuickTime_2.out +128 -0
  610. data/vendor/Image-ExifTool-9.27/t/QuickTime_3.out +69 -0
  611. data/vendor/Image-ExifTool-9.27/t/RIFF.t +31 -0
  612. data/vendor/Image-ExifTool-9.27/t/RIFF_2.out +24 -0
  613. data/vendor/Image-ExifTool-9.27/t/RIFF_3.out +52 -0
  614. data/vendor/Image-ExifTool-9.27/t/RIFF_4.out +16 -0
  615. data/vendor/Image-ExifTool-9.27/t/RTF.t +27 -0
  616. data/vendor/Image-ExifTool-9.27/t/RTF_2.out +20 -0
  617. data/vendor/Image-ExifTool-9.27/t/Radiance.t +28 -0
  618. data/vendor/Image-ExifTool-9.27/t/Radiance_2.out +22 -0
  619. data/vendor/Image-ExifTool-9.27/t/Real.t +46 -0
  620. data/vendor/Image-ExifTool-9.27/t/Real_2.out +68 -0
  621. data/vendor/Image-ExifTool-9.27/t/Real_3.out +18 -0
  622. data/vendor/Image-ExifTool-9.27/t/Real_4.out +11 -0
  623. data/vendor/Image-ExifTool-9.27/t/Ricoh.t +47 -0
  624. data/vendor/Image-ExifTool-9.27/t/Ricoh_2.out +70 -0
  625. data/vendor/Image-ExifTool-9.27/t/Ricoh_3.out +98 -0
  626. data/vendor/Image-ExifTool-9.27/t/Ricoh_4.out +112 -0
  627. data/vendor/Image-ExifTool-9.27/t/Sanyo.t +39 -0
  628. data/vendor/Image-ExifTool-9.27/t/Sanyo_2.out +101 -0
  629. data/vendor/Image-ExifTool-9.27/t/Sanyo_3.out +111 -0
  630. data/vendor/Image-ExifTool-9.27/t/Sigma.t +60 -0
  631. data/vendor/Image-ExifTool-9.27/t/Sigma_2.out +91 -0
  632. data/vendor/Image-ExifTool-9.27/t/Sigma_3.out +94 -0
  633. data/vendor/Image-ExifTool-9.27/t/Sigma_4.out +63 -0
  634. data/vendor/Image-ExifTool-9.27/t/Sigma_5.out +192 -0
  635. data/vendor/Image-ExifTool-9.27/t/Sony.t +62 -0
  636. data/vendor/Image-ExifTool-9.27/t/Sony_2.out +84 -0
  637. data/vendor/Image-ExifTool-9.27/t/Sony_3.out +85 -0
  638. data/vendor/Image-ExifTool-9.27/t/Sony_5.out +32 -0
  639. data/vendor/Image-ExifTool-9.27/t/TestLib.pm +417 -0
  640. data/vendor/Image-ExifTool-9.27/t/Unknown.t +36 -0
  641. data/vendor/Image-ExifTool-9.27/t/Unknown_2.out +90 -0
  642. data/vendor/Image-ExifTool-9.27/t/Unknown_3.out +90 -0
  643. data/vendor/Image-ExifTool-9.27/t/Vorbis.t +28 -0
  644. data/vendor/Image-ExifTool-9.27/t/Vorbis_2.out +28 -0
  645. data/vendor/Image-ExifTool-9.27/t/Writer.t +896 -0
  646. data/vendor/Image-ExifTool-9.27/t/Writer_10.out +239 -0
  647. data/vendor/Image-ExifTool-9.27/t/Writer_11.out +37 -0
  648. data/vendor/Image-ExifTool-9.27/t/Writer_13.out +160 -0
  649. data/vendor/Image-ExifTool-9.27/t/Writer_14.out +67 -0
  650. data/vendor/Image-ExifTool-9.27/t/Writer_15.out +171 -0
  651. data/vendor/Image-ExifTool-9.27/t/Writer_16.out +1 -0
  652. data/vendor/Image-ExifTool-9.27/t/Writer_17.out +1 -0
  653. data/vendor/Image-ExifTool-9.27/t/Writer_18.out +3 -0
  654. data/vendor/Image-ExifTool-9.27/t/Writer_19.out +34 -0
  655. data/vendor/Image-ExifTool-9.27/t/Writer_2.out +168 -0
  656. data/vendor/Image-ExifTool-9.27/t/Writer_22.out +4 -0
  657. data/vendor/Image-ExifTool-9.27/t/Writer_24.out +1 -0
  658. data/vendor/Image-ExifTool-9.27/t/Writer_25.out +38 -0
  659. data/vendor/Image-ExifTool-9.27/t/Writer_26.out +32 -0
  660. data/vendor/Image-ExifTool-9.27/t/Writer_27.out +14 -0
  661. data/vendor/Image-ExifTool-9.27/t/Writer_28.out +1 -0
  662. data/vendor/Image-ExifTool-9.27/t/Writer_29.out +2 -0
  663. data/vendor/Image-ExifTool-9.27/t/Writer_30.out +2 -0
  664. data/vendor/Image-ExifTool-9.27/t/Writer_31.out +97 -0
  665. data/vendor/Image-ExifTool-9.27/t/Writer_32.out +3 -0
  666. data/vendor/Image-ExifTool-9.27/t/Writer_33.out +3 -0
  667. data/vendor/Image-ExifTool-9.27/t/Writer_34.out +3 -0
  668. data/vendor/Image-ExifTool-9.27/t/Writer_35.out +187 -0
  669. data/vendor/Image-ExifTool-9.27/t/Writer_36.out +2 -0
  670. data/vendor/Image-ExifTool-9.27/t/Writer_37.out +2 -0
  671. data/vendor/Image-ExifTool-9.27/t/Writer_38.out +62 -0
  672. data/vendor/Image-ExifTool-9.27/t/Writer_39.out +4 -0
  673. data/vendor/Image-ExifTool-9.27/t/Writer_4.out +85 -0
  674. data/vendor/Image-ExifTool-9.27/t/Writer_40.out +4 -0
  675. data/vendor/Image-ExifTool-9.27/t/Writer_41.out +3 -0
  676. data/vendor/Image-ExifTool-9.27/t/Writer_42.out +5 -0
  677. data/vendor/Image-ExifTool-9.27/t/Writer_43.out +5 -0
  678. data/vendor/Image-ExifTool-9.27/t/Writer_44.out +2 -0
  679. data/vendor/Image-ExifTool-9.27/t/Writer_45.out +1 -0
  680. data/vendor/Image-ExifTool-9.27/t/Writer_46.out +77 -0
  681. data/vendor/Image-ExifTool-9.27/t/Writer_47.out +56 -0
  682. data/vendor/Image-ExifTool-9.27/t/Writer_48.out +29 -0
  683. data/vendor/Image-ExifTool-9.27/t/Writer_50.out +3 -0
  684. data/vendor/Image-ExifTool-9.27/t/Writer_6.out +182 -0
  685. data/vendor/Image-ExifTool-9.27/t/Writer_7.out +149 -0
  686. data/vendor/Image-ExifTool-9.27/t/Writer_9.out +236 -0
  687. data/vendor/Image-ExifTool-9.27/t/XMP.t +521 -0
  688. data/vendor/Image-ExifTool-9.27/t/XMP_10.out +33 -0
  689. data/vendor/Image-ExifTool-9.27/t/XMP_11.out +59 -0
  690. data/vendor/Image-ExifTool-9.27/t/XMP_12.out +4 -0
  691. data/vendor/Image-ExifTool-9.27/t/XMP_13.out +5 -0
  692. data/vendor/Image-ExifTool-9.27/t/XMP_14.out +3 -0
  693. data/vendor/Image-ExifTool-9.27/t/XMP_15.out +3 -0
  694. data/vendor/Image-ExifTool-9.27/t/XMP_16.out +5 -0
  695. data/vendor/Image-ExifTool-9.27/t/XMP_17.out +6 -0
  696. data/vendor/Image-ExifTool-9.27/t/XMP_18.out +10 -0
  697. data/vendor/Image-ExifTool-9.27/t/XMP_19.out +35 -0
  698. data/vendor/Image-ExifTool-9.27/t/XMP_2.out +138 -0
  699. data/vendor/Image-ExifTool-9.27/t/XMP_20.out +35 -0
  700. data/vendor/Image-ExifTool-9.27/t/XMP_21.out +37 -0
  701. data/vendor/Image-ExifTool-9.27/t/XMP_22.out +37 -0
  702. data/vendor/Image-ExifTool-9.27/t/XMP_23.out +9 -0
  703. data/vendor/Image-ExifTool-9.27/t/XMP_24.out +31 -0
  704. data/vendor/Image-ExifTool-9.27/t/XMP_25.out +28 -0
  705. data/vendor/Image-ExifTool-9.27/t/XMP_26.out +52 -0
  706. data/vendor/Image-ExifTool-9.27/t/XMP_27.out +93 -0
  707. data/vendor/Image-ExifTool-9.27/t/XMP_28.out +44 -0
  708. data/vendor/Image-ExifTool-9.27/t/XMP_29.out +24 -0
  709. data/vendor/Image-ExifTool-9.27/t/XMP_3.out +136 -0
  710. data/vendor/Image-ExifTool-9.27/t/XMP_30.out +90 -0
  711. data/vendor/Image-ExifTool-9.27/t/XMP_31.out +19 -0
  712. data/vendor/Image-ExifTool-9.27/t/XMP_32.out +2 -0
  713. data/vendor/Image-ExifTool-9.27/t/XMP_34.out +2 -0
  714. data/vendor/Image-ExifTool-9.27/t/XMP_36.out +18 -0
  715. data/vendor/Image-ExifTool-9.27/t/XMP_37.out +35 -0
  716. data/vendor/Image-ExifTool-9.27/t/XMP_39.out +44 -0
  717. data/vendor/Image-ExifTool-9.27/t/XMP_40.out +3 -0
  718. data/vendor/Image-ExifTool-9.27/t/XMP_41.out +175 -0
  719. data/vendor/Image-ExifTool-9.27/t/XMP_5.out +29 -0
  720. data/vendor/Image-ExifTool-9.27/t/XMP_6.out +87 -0
  721. data/vendor/Image-ExifTool-9.27/t/XMP_7.out +118 -0
  722. data/vendor/Image-ExifTool-9.27/t/XMP_8.out +17 -0
  723. data/vendor/Image-ExifTool-9.27/t/XMP_9.out +36 -0
  724. data/vendor/Image-ExifTool-9.27/t/ZIP.t +69 -0
  725. data/vendor/Image-ExifTool-9.27/t/ZIP_2.out +18 -0
  726. data/vendor/Image-ExifTool-9.27/t/ZIP_3.out +17 -0
  727. data/vendor/Image-ExifTool-9.27/t/ZIP_4.out +213 -0
  728. data/vendor/Image-ExifTool-9.27/t/ZIP_5.out +134 -0
  729. data/vendor/Image-ExifTool-9.27/t/ZIP_6.out +49 -0
  730. data/vendor/Image-ExifTool-9.27/t/ZIP_7.out +28 -0
  731. data/vendor/Image-ExifTool-9.27/t/images/AFCP.jpg +0 -0
  732. data/vendor/Image-ExifTool-9.27/t/images/AIFF.aif +0 -0
  733. data/vendor/Image-ExifTool-9.27/t/images/APE.ape +0 -0
  734. data/vendor/Image-ExifTool-9.27/t/images/APE.mpc +0 -0
  735. data/vendor/Image-ExifTool-9.27/t/images/ASF.wmv +0 -0
  736. data/vendor/Image-ExifTool-9.27/t/images/BMP.bmp +0 -0
  737. data/vendor/Image-ExifTool-9.27/t/images/BigTIFF.btf +0 -0
  738. data/vendor/Image-ExifTool-9.27/t/images/Canon.jpg +0 -0
  739. data/vendor/Image-ExifTool-9.27/t/images/Canon1DmkIII.jpg +0 -0
  740. data/vendor/Image-ExifTool-9.27/t/images/CanonRaw.cr2 +0 -0
  741. data/vendor/Image-ExifTool-9.27/t/images/CanonRaw.crw +0 -0
  742. data/vendor/Image-ExifTool-9.27/t/images/CanonVRD.vrd +0 -0
  743. data/vendor/Image-ExifTool-9.27/t/images/CaptureOne.eip +0 -0
  744. data/vendor/Image-ExifTool-9.27/t/images/Casio.jpg +0 -0
  745. data/vendor/Image-ExifTool-9.27/t/images/Casio2.jpg +0 -0
  746. data/vendor/Image-ExifTool-9.27/t/images/CasioQVCI.jpg +0 -0
  747. data/vendor/Image-ExifTool-9.27/t/images/DICOM.dcm +0 -0
  748. data/vendor/Image-ExifTool-9.27/t/images/DNG.dng +0 -0
  749. data/vendor/Image-ExifTool-9.27/t/images/DV.dv +0 -0
  750. data/vendor/Image-ExifTool-9.27/t/images/DjVu.djvu +0 -0
  751. data/vendor/Image-ExifTool-9.27/t/images/EXE.elf +0 -0
  752. data/vendor/Image-ExifTool-9.27/t/images/EXE.exe +0 -0
  753. data/vendor/Image-ExifTool-9.27/t/images/EXE.macho +0 -0
  754. data/vendor/Image-ExifTool-9.27/t/images/ExifTool.jpg +0 -0
  755. data/vendor/Image-ExifTool-9.27/t/images/ExifTool.tif +0 -0
  756. data/vendor/Image-ExifTool-9.27/t/images/ExtendedXMP.jpg +0 -0
  757. data/vendor/Image-ExifTool-9.27/t/images/FLAC.flac +0 -0
  758. data/vendor/Image-ExifTool-9.27/t/images/FLAC.ogg +0 -0
  759. data/vendor/Image-ExifTool-9.27/t/images/FLIR.fpf +0 -0
  760. data/vendor/Image-ExifTool-9.27/t/images/FLIR.jpg +0 -0
  761. data/vendor/Image-ExifTool-9.27/t/images/Flash.flv +0 -0
  762. data/vendor/Image-ExifTool-9.27/t/images/Flash.swf +0 -0
  763. data/vendor/Image-ExifTool-9.27/t/images/FlashPix.ppt +0 -0
  764. data/vendor/Image-ExifTool-9.27/t/images/Font.afm +28 -0
  765. data/vendor/Image-ExifTool-9.27/t/images/Font.dfont +0 -0
  766. data/vendor/Image-ExifTool-9.27/t/images/Font.pfa +38 -0
  767. data/vendor/Image-ExifTool-9.27/t/images/Font.pfb +0 -0
  768. data/vendor/Image-ExifTool-9.27/t/images/Font.pfm +0 -0
  769. data/vendor/Image-ExifTool-9.27/t/images/Font.ttf +0 -0
  770. data/vendor/Image-ExifTool-9.27/t/images/FotoStation.jpg +0 -0
  771. data/vendor/Image-ExifTool-9.27/t/images/FujiFilm.jpg +0 -0
  772. data/vendor/Image-ExifTool-9.27/t/images/FujiFilm.raf +0 -0
  773. data/vendor/Image-ExifTool-9.27/t/images/GE.jpg +0 -0
  774. data/vendor/Image-ExifTool-9.27/t/images/GIF.gif +0 -0
  775. data/vendor/Image-ExifTool-9.27/t/images/GIMP.xcf +0 -0
  776. data/vendor/Image-ExifTool-9.27/t/images/GPS.jpg +0 -0
  777. data/vendor/Image-ExifTool-9.27/t/images/GeoTiff.tif +0 -0
  778. data/vendor/Image-ExifTool-9.27/t/images/Geotag.gpx +23 -0
  779. data/vendor/Image-ExifTool-9.27/t/images/Geotag.igc +24 -0
  780. data/vendor/Image-ExifTool-9.27/t/images/Geotag.log +13 -0
  781. data/vendor/Image-ExifTool-9.27/t/images/Geotag.xml +23 -0
  782. data/vendor/Image-ExifTool-9.27/t/images/Geotag2.log +7 -0
  783. data/vendor/Image-ExifTool-9.27/t/images/HTML.html +77 -0
  784. data/vendor/Image-ExifTool-9.27/t/images/IPTC.jpg +0 -0
  785. data/vendor/Image-ExifTool-9.27/t/images/ITC.itc +0 -0
  786. data/vendor/Image-ExifTool-9.27/t/images/InDesign.indd +0 -0
  787. data/vendor/Image-ExifTool-9.27/t/images/JVC.jpg +0 -0
  788. data/vendor/Image-ExifTool-9.27/t/images/JVC2.jpg +0 -0
  789. data/vendor/Image-ExifTool-9.27/t/images/Jpeg2000.j2c +0 -0
  790. data/vendor/Image-ExifTool-9.27/t/images/Jpeg2000.jp2 +0 -0
  791. data/vendor/Image-ExifTool-9.27/t/images/Kodak.jpg +0 -0
  792. data/vendor/Image-ExifTool-9.27/t/images/KyoceraRaw.raw +0 -0
  793. data/vendor/Image-ExifTool-9.27/t/images/LNK.lnk +0 -0
  794. data/vendor/Image-ExifTool-9.27/t/images/M2TS.mts +0 -0
  795. data/vendor/Image-ExifTool-9.27/t/images/MIE.mie +0 -0
  796. data/vendor/Image-ExifTool-9.27/t/images/MIFF.miff +0 -0
  797. data/vendor/Image-ExifTool-9.27/t/images/MP3.mp3 +0 -0
  798. data/vendor/Image-ExifTool-9.27/t/images/MWG.jpg +0 -0
  799. data/vendor/Image-ExifTool-9.27/t/images/MXF.mxf +0 -0
  800. data/vendor/Image-ExifTool-9.27/t/images/Matroska.mkv +0 -0
  801. data/vendor/Image-ExifTool-9.27/t/images/Minolta.jpg +0 -0
  802. data/vendor/Image-ExifTool-9.27/t/images/Minolta.mrw +0 -0
  803. data/vendor/Image-ExifTool-9.27/t/images/Nikon.jpg +0 -0
  804. data/vendor/Image-ExifTool-9.27/t/images/Nikon.nef +0 -0
  805. data/vendor/Image-ExifTool-9.27/t/images/NikonD2Hs.jpg +0 -0
  806. data/vendor/Image-ExifTool-9.27/t/images/NikonD70.jpg +0 -0
  807. data/vendor/Image-ExifTool-9.27/t/images/OOXML.docx +0 -0
  808. data/vendor/Image-ExifTool-9.27/t/images/Olympus.jpg +0 -0
  809. data/vendor/Image-ExifTool-9.27/t/images/Olympus2.jpg +0 -0
  810. data/vendor/Image-ExifTool-9.27/t/images/OlympusE1.jpg +0 -0
  811. data/vendor/Image-ExifTool-9.27/t/images/OpenDoc.ods +0 -0
  812. data/vendor/Image-ExifTool-9.27/t/images/OpenEXR.exr +0 -0
  813. data/vendor/Image-ExifTool-9.27/t/images/PDF.pdf +0 -0
  814. data/vendor/Image-ExifTool-9.27/t/images/PDF2.pdf +0 -0
  815. data/vendor/Image-ExifTool-9.27/t/images/PGF.pgf +0 -0
  816. data/vendor/Image-ExifTool-9.27/t/images/PICT.pict +0 -0
  817. data/vendor/Image-ExifTool-9.27/t/images/PLIST-bin.plist +0 -0
  818. data/vendor/Image-ExifTool-9.27/t/images/PLIST-xml.plist +35 -0
  819. data/vendor/Image-ExifTool-9.27/t/images/PNG.png +0 -0
  820. data/vendor/Image-ExifTool-9.27/t/images/PPM.ppm +5 -0
  821. data/vendor/Image-ExifTool-9.27/t/images/PSP.psp +0 -0
  822. data/vendor/Image-ExifTool-9.27/t/images/Panasonic.jpg +0 -0
  823. data/vendor/Image-ExifTool-9.27/t/images/Panasonic.rw2 +0 -0
  824. data/vendor/Image-ExifTool-9.27/t/images/Pentax.avi +0 -0
  825. data/vendor/Image-ExifTool-9.27/t/images/Pentax.jpg +0 -0
  826. data/vendor/Image-ExifTool-9.27/t/images/PhotoCD.pcd +0 -0
  827. data/vendor/Image-ExifTool-9.27/t/images/PhotoMechanic.jpg +0 -0
  828. data/vendor/Image-ExifTool-9.27/t/images/Photoshop.psd +0 -0
  829. data/vendor/Image-ExifTool-9.27/t/images/PostScript.eps +108 -0
  830. data/vendor/Image-ExifTool-9.27/t/images/QuickTime.m4a +0 -0
  831. data/vendor/Image-ExifTool-9.27/t/images/QuickTime.mov +0 -0
  832. data/vendor/Image-ExifTool-9.27/t/images/RIFF.avi +0 -0
  833. data/vendor/Image-ExifTool-9.27/t/images/RIFF.wav +0 -0
  834. data/vendor/Image-ExifTool-9.27/t/images/RIFF.webp +0 -0
  835. data/vendor/Image-ExifTool-9.27/t/images/RTF.rtf +25 -0
  836. data/vendor/Image-ExifTool-9.27/t/images/Radiance.hdr +0 -0
  837. data/vendor/Image-ExifTool-9.27/t/images/Real.ra +0 -0
  838. data/vendor/Image-ExifTool-9.27/t/images/Real.ram +1 -0
  839. data/vendor/Image-ExifTool-9.27/t/images/Real.rm +0 -0
  840. data/vendor/Image-ExifTool-9.27/t/images/Ricoh.jpg +0 -0
  841. data/vendor/Image-ExifTool-9.27/t/images/Ricoh2.jpg +0 -0
  842. data/vendor/Image-ExifTool-9.27/t/images/Sanyo.jpg +0 -0
  843. data/vendor/Image-ExifTool-9.27/t/images/Sigma.jpg +0 -0
  844. data/vendor/Image-ExifTool-9.27/t/images/Sigma.x3f +0 -0
  845. data/vendor/Image-ExifTool-9.27/t/images/SigmaDP2.x3f +0 -0
  846. data/vendor/Image-ExifTool-9.27/t/images/Sony.jpg +0 -0
  847. data/vendor/Image-ExifTool-9.27/t/images/Sony.pmp +0 -0
  848. data/vendor/Image-ExifTool-9.27/t/images/Unknown.jpg +0 -0
  849. data/vendor/Image-ExifTool-9.27/t/images/Vorbis.ogg +0 -0
  850. data/vendor/Image-ExifTool-9.27/t/images/Writer.jpg +0 -0
  851. data/vendor/Image-ExifTool-9.27/t/images/XMP.inx +108 -0
  852. data/vendor/Image-ExifTool-9.27/t/images/XMP.jpg +0 -0
  853. data/vendor/Image-ExifTool-9.27/t/images/XMP.svg +33 -0
  854. data/vendor/Image-ExifTool-9.27/t/images/XMP.xml +98 -0
  855. data/vendor/Image-ExifTool-9.27/t/images/XMP.xmp +99 -0
  856. data/vendor/Image-ExifTool-9.27/t/images/XMP2.xmp +25 -0
  857. data/vendor/Image-ExifTool-9.27/t/images/XMP3.xmp +43 -0
  858. data/vendor/Image-ExifTool-9.27/t/images/XMP4.xmp +93 -0
  859. data/vendor/Image-ExifTool-9.27/t/images/XMP5.xmp +158 -0
  860. data/vendor/Image-ExifTool-9.27/t/images/ZIP.gz +0 -0
  861. data/vendor/Image-ExifTool-9.27/t/images/ZIP.zip +0 -0
  862. data/vendor/Image-ExifTool-9.27/t/images/iWork.numbers +0 -0
  863. metadata +868 -218
  864. data/vendor/Image-ExifTool-8.97/.DS_Store +0 -0
  865. data/vendor/Image-ExifTool-8.97/Changes +0 -5753
  866. data/vendor/Image-ExifTool-8.97/ExifTool_config +0 -299
  867. data/vendor/Image-ExifTool-8.97/MANIFEST +0 -831
  868. data/vendor/Image-ExifTool-8.97/META.yml +0 -26
  869. data/vendor/Image-ExifTool-8.97/README +0 -221
  870. data/vendor/Image-ExifTool-8.97/exiftool +0 -5207
  871. data/vendor/Image-ExifTool-8.97/kml.fmt +0 -63
  872. data/vendor/Image-ExifTool-8.97/lib/File/RandomAccess.pm +0 -378
  873. data/vendor/Image-ExifTool-8.97/lib/File/RandomAccess.pod +0 -231
  874. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool.pm +0 -6623
  875. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool.pod +0 -2276
  876. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/AES.pm +0 -501
  877. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/AFCP.pm +0 -280
  878. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/AIFF.pm +0 -271
  879. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/APE.pm +0 -254
  880. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/APP12.pm +0 -322
  881. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/ASF.pm +0 -871
  882. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/BMP.pm +0 -179
  883. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/BZZ.pm +0 -472
  884. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/BigTIFF.pm +0 -286
  885. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/BuildTagLookup.pm +0 -2311
  886. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Canon.pm +0 -7435
  887. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/CanonCustom.pm +0 -2484
  888. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/CanonRaw.pm +0 -927
  889. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/CanonVRD.pm +0 -1481
  890. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/CaptureOne.pm +0 -235
  891. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Casio.pm +0 -2013
  892. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Charset.pm +0 -396
  893. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/DICOM.pm +0 -3832
  894. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/DNG.pm +0 -835
  895. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/DV.pm +0 -319
  896. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/DjVu.pm +0 -373
  897. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/EXE.pm +0 -1228
  898. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Exif.pm +0 -4344
  899. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/FLAC.pm +0 -296
  900. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Fixup.pm +0 -333
  901. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Flash.pm +0 -755
  902. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/FlashPix.pm +0 -1882
  903. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Font.pm +0 -643
  904. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/FotoStation.pm +0 -258
  905. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/FujiFilm.pm +0 -968
  906. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/GE.pm +0 -80
  907. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/GIF.pm +0 -525
  908. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/GIMP.pm +0 -258
  909. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/GPS.pm +0 -511
  910. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/GeoTiff.pm +0 -2187
  911. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Geotag.pm +0 -1171
  912. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/H264.pm +0 -1093
  913. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/HP.pm +0 -262
  914. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/HTML.pm +0 -576
  915. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/HtmlDump.pm +0 -886
  916. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/ICC_Profile.pm +0 -997
  917. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/ID3.pm +0 -1276
  918. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/IPTC.pm +0 -1233
  919. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/ITC.pm +0 -215
  920. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Import.pm +0 -307
  921. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/InDesign.pm +0 -277
  922. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/JPEG.pm +0 -584
  923. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/JPEGDigest.pm +0 -2511
  924. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/JVC.pm +0 -130
  925. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Jpeg2000.pm +0 -823
  926. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Kodak.pm +0 -2012
  927. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/KyoceraRaw.pm +0 -173
  928. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/LNK.pm +0 -723
  929. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/cs.pm +0 -1581
  930. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/de.pm +0 -5503
  931. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/en_ca.pm +0 -557
  932. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/en_gb.pm +0 -572
  933. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/es.pm +0 -1718
  934. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/fi.pm +0 -2831
  935. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/fr.pm +0 -4716
  936. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/it.pm +0 -2201
  937. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/ja.pm +0 -5793
  938. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/ko.pm +0 -2324
  939. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/nl.pm +0 -3212
  940. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/pl.pm +0 -1134
  941. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/ru.pm +0 -761
  942. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/sv.pm +0 -632
  943. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/tr.pm +0 -539
  944. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/zh_cn.pm +0 -1320
  945. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/zh_tw.pm +0 -794
  946. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Leaf.pm +0 -515
  947. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/M2TS.pm +0 -729
  948. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/MIE.pm +0 -2552
  949. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/MIEUnits.pod +0 -377
  950. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/MIFF.pm +0 -279
  951. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/MNG.pm +0 -684
  952. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/MPC.pm +0 -156
  953. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/MPEG.pm +0 -736
  954. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/MPF.pm +0 -286
  955. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/MWG.pm +0 -586
  956. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/MXF.pm +0 -3032
  957. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/MakerNotes.pm +0 -1551
  958. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Matroska.pm +0 -891
  959. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Microsoft.pm +0 -861
  960. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Minolta.pm +0 -2786
  961. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/MinoltaRaw.pm +0 -534
  962. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Nikon.pm +0 -5568
  963. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/NikonCapture.pm +0 -911
  964. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/NikonCustom.pm +0 -3724
  965. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/OOXML.pm +0 -409
  966. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Ogg.pm +0 -237
  967. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Olympus.pm +0 -4027
  968. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/OpenEXR.pm +0 -324
  969. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/PDF.pm +0 -1986
  970. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/PGF.pm +0 -143
  971. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/PICT.pm +0 -1260
  972. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/PNG.pm +0 -1100
  973. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/PPM.pm +0 -169
  974. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/PSP.pm +0 -305
  975. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Panasonic.pm +0 -1852
  976. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/PanasonicRaw.pm +0 -383
  977. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Pentax.pm +0 -5044
  978. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/PhotoCD.pm +0 -507
  979. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/PhotoMechanic.pm +0 -250
  980. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Photoshop.pm +0 -594
  981. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/PostScript.pm +0 -691
  982. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/PrintIM.pm +0 -125
  983. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Qualcomm.pm +0 -1344
  984. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/QuickTime.pm +0 -2920
  985. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/README +0 -922
  986. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/RIFF.pm +0 -1278
  987. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/RSRC.pm +0 -240
  988. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/RTF.pm +0 -383
  989. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Radiance.pm +0 -144
  990. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Rawzor.pm +0 -190
  991. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Real.pm +0 -736
  992. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Reconyx.pm +0 -190
  993. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Ricoh.pm +0 -714
  994. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Samsung.pm +0 -764
  995. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Sanyo.pm +0 -439
  996. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Shift.pl +0 -594
  997. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Shortcuts.pm +0 -289
  998. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Sigma.pm +0 -488
  999. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/SigmaRaw.pm +0 -676
  1000. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Sony.pm +0 -3844
  1001. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/SonyIDC.pm +0 -330
  1002. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Stim.pm +0 -196
  1003. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/TagInfoXML.pm +0 -763
  1004. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/TagLookup.pm +0 -7305
  1005. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/TagNames.pod +0 -24147
  1006. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Theora.pm +0 -145
  1007. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Unknown.pm +0 -66
  1008. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Vorbis.pm +0 -221
  1009. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/WriteCanonRaw.pl +0 -637
  1010. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/WriteExif.pl +0 -3513
  1011. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/WriteIPTC.pl +0 -700
  1012. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/WritePDF.pl +0 -757
  1013. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/WritePNG.pl +0 -329
  1014. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/WritePhotoshop.pl +0 -266
  1015. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/WritePostScript.pl +0 -776
  1016. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/WriteXMP.pl +0 -1296
  1017. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Writer.pl +0 -5577
  1018. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/XMP.pm +0 -3589
  1019. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/XMP2.pl +0 -1315
  1020. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/XMPStruct.pl +0 -814
  1021. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/ZIP.pm +0 -623
  1022. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/iWork.pm +0 -223
  1023. data/vendor/Image-ExifTool-8.97/perl-Image-ExifTool.spec +0 -103
@@ -1,3844 +0,0 @@
1
- #------------------------------------------------------------------------------
2
- # File: Sony.pm
3
- #
4
- # Description: Sony EXIF Maker Notes tags
5
- #
6
- # Revisions: 04/06/2004 - P. Harvey Created
7
- #
8
- # References: 1) http://www.cybercom.net/~dcoffin/dcraw/
9
- # 2) http://homepage3.nifty.com/kamisaka/makernote/makernote_sony.htm (2006/08/06)
10
- # 3) Thomas Bodenmann private communication
11
- # 4) Philippe Devaux private communication (A700)
12
- # 5) Marcus Holland-Moritz private communication (A700)
13
- # 6) Andrey Tverdokhleb private communication
14
- # 7) Rudiger Lange private communication (A700)
15
- # 8) Igal Milchtaich private communication
16
- # 9) Michael Reitinger private communication (DSC-TX7)
17
- # 10) http://www.klingebiel.com/tempest/hd/pmp.html
18
- # 11) Mike Battilana private communication
19
- # 12) Jos Roost private communication (A580)
20
- # JD) Jens Duttke private communication
21
- #------------------------------------------------------------------------------
22
-
23
- package Image::ExifTool::Sony;
24
-
25
- use strict;
26
- use vars qw($VERSION %sonyLensTypes);
27
- use Image::ExifTool qw(:DataAccess :Utils);
28
- use Image::ExifTool::Exif;
29
- use Image::ExifTool::Minolta;
30
-
31
- $VERSION = '1.68';
32
-
33
- sub ProcessSRF($$$);
34
- sub ProcessSR2($$$);
35
- sub ProcessMoreInfo($$$);
36
- sub WriteSR2($$$);
37
- sub ConvLensSpec($);
38
- sub ConvInvLensSpec($);
39
- sub PrintLensSpec($);
40
- sub PrintInvLensSpec($);
41
-
42
- # (%sonyLensTypes is filled in based on Minolta LensType's)
43
-
44
- # ExposureProgram values (ref PH, mainly decoded from A200)
45
- my %sonyExposureProgram = (
46
- 0 => 'Auto', # (same as 'Program AE'?)
47
- 1 => 'Manual',
48
- 2 => 'Program AE',
49
- 3 => 'Aperture-priority AE',
50
- 4 => 'Shutter speed priority AE',
51
- 8 => 'Program Shift A', #7
52
- 9 => 'Program Shift S', #7
53
- 19 => 'Night Portrait', # (A330)
54
- 18 => 'Sunset', # (A330)
55
- 17 => 'Sports', # (A330)
56
- 21 => 'Macro', # (A330)
57
- 20 => 'Landscape', # (A330)
58
- 16 => 'Portrait', # (A330)
59
- 35 => 'Auto No Flash', # (A330)
60
- );
61
-
62
- # ExposureProgram values in CameraSettings3 (ref 12)
63
- my %sonyExposureProgram2 = ( # A580 Mode Dial setting:
64
- 1 => 'Program AE', # P
65
- 2 => 'Aperture-priority AE', # A
66
- 3 => 'Shutter speed priority AE', # S
67
- 4 => 'Manual', # M
68
- 5 => 'Cont. Priority AE', # (A35)
69
- 16 => 'Auto', # AUTO
70
- 17 => 'Auto No Flash', # "flash strike-out" symbol
71
- 18 => 'Auto+', #PH (A33)
72
- 49 => 'Portrait', # SCN
73
- 50 => 'Landscape', # SCN
74
- 51 => 'Macro', # SCN
75
- 52 => 'Sports', # SCN
76
- 53 => 'Sunset', # SCN
77
- 54 => 'Night view', # SCN
78
- 55 => 'Night view/portrait', # SCN
79
- 56 => 'Handheld Night Shot', # SCN (also called "Hand-held Twilight")
80
- 57 => '3D Sweep Panorama', # "Panorama" symbol
81
- 64 => 'Auto 2', #PH (A33 AUTO)
82
- 65 => 'Auto 3', # (A35) (manual focus? ref 12)
83
- 80 => 'Sweep Panorama', # "Panorama" symbol
84
- 96 => 'Anti Motion Blur', #PH (NEX-5)
85
- # 128-138 are A35 picture effects (combined SCN/Picture effect mode dial position)
86
- 128 => 'Toy Camera',
87
- 129 => 'Pop Color',
88
- 130 => 'Posterization',
89
- 131 => 'Posterization B/W',
90
- 132 => 'Retro Photo',
91
- 133 => 'High-key',
92
- 134 => 'Partial Color Red',
93
- 135 => 'Partial Color Green',
94
- 136 => 'Partial Color Blue',
95
- 137 => 'Partial Color Yellow',
96
- 138 => 'High Contrast Monochrome',
97
- );
98
-
99
- # WhiteBalanceSetting values (ref 12)
100
- my %whiteBalanceSetting = (
101
- 0x10 => 'Auto (-3)', #(NC)
102
- 0x11 => 'Auto (-2)', #(NC)
103
- 0x12 => 'Auto (-1)', #(NC)
104
- 0x13 => 'Auto (0)',
105
- 0x14 => 'Auto (+1)', #(NC)
106
- 0x15 => 'Auto (+2)', #(NC)
107
- 0x16 => 'Auto (+3)', #(NC)
108
- 0x20 => 'Daylight (-3)',
109
- 0x21 => 'Daylight (-2)', #(NC)
110
- 0x22 => 'Daylight (-1)', #(NC)
111
- 0x23 => 'Daylight (0)',
112
- 0x24 => 'Daylight (+1)',
113
- 0x25 => 'Daylight (+2)',
114
- 0x26 => 'Daylight (+3)',
115
- 0x30 => 'Shade (-3)', #(NC)
116
- 0x31 => 'Shade (-2)', #(NC)
117
- 0x32 => 'Shade (-1)', #(NC)
118
- 0x33 => 'Shade (0)',
119
- 0x34 => 'Shade (+1)', #(NC)
120
- 0x35 => 'Shade (+2)', #(NC)
121
- 0x36 => 'Shade (+3)',
122
- 0x40 => 'Cloudy (-3)', #(NC)
123
- 0x41 => 'Cloudy (-2)', #(NC)
124
- 0x42 => 'Cloudy (-1)', #(NC)
125
- 0x43 => 'Cloudy (0)',
126
- 0x44 => 'Cloudy (+1)', #(NC)
127
- 0x45 => 'Cloudy (+2)', #(NC)
128
- 0x46 => 'Cloudy (+3)', #(NC)
129
- 0x50 => 'Tungsten (-3)', #(NC)
130
- 0x51 => 'Tungsten (-2)', #(NC)
131
- 0x52 => 'Tungsten (-1)', #(NC)
132
- 0x53 => 'Tungsten (0)',
133
- 0x54 => 'Tungsten (+1)', #(NC)
134
- 0x55 => 'Tungsten (+2)', #(NC)
135
- 0x56 => 'Tungsten (+3)', #(NC)
136
- 0x60 => 'Fluorescent (-3)', #(NC)
137
- 0x61 => 'Fluorescent (-2)', #(NC)
138
- 0x62 => 'Fluorescent (-1)', #(NC)
139
- 0x63 => 'Fluorescent (0)',
140
- 0x64 => 'Fluorescent (+1)', #(NC)
141
- 0x65 => 'Fluorescent (+2)', #(NC)
142
- 0x66 => 'Fluorescent (+3)', #(NC)
143
- 0x70 => 'Flash (-3)', #(NC)
144
- 0x71 => 'Flash (-2)', #(NC)
145
- 0x72 => 'Flash (-1)', #(NC)
146
- 0x73 => 'Flash (0)',
147
- 0x74 => 'Flash (+1)', #(NC)
148
- 0x75 => 'Flash (+2)', #(NC)
149
- 0x76 => 'Flash (+3)', #(NC)
150
- 0xa3 => 'Custom',
151
- 0xf3 => 'Color Temperature/Color Filter',
152
- );
153
-
154
- my %binaryDataAttrs = (
155
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
156
- WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
157
- CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
158
- WRITABLE => 1,
159
- FIRST_ENTRY => 0,
160
- );
161
-
162
- # Sony maker notes tags (some elements in common with %Image::ExifTool::Minolta::Main)
163
- %Image::ExifTool::Sony::Main = (
164
- WRITE_PROC => \&Image::ExifTool::Exif::WriteExif,
165
- CHECK_PROC => \&Image::ExifTool::Exif::CheckExif,
166
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
167
- NOTES => q{
168
- The following information has been decoded from the MakerNotes of Sony
169
- cameras. Some of these tags have been inherited from the Minolta
170
- MakerNotes.
171
- },
172
- 0x0010 => [ #PH
173
- {
174
- Name => 'CameraInfo',
175
- # count: A33/A35/A55V/A450/A500/A550/A560/A580/NEX3/5/C3/VG10E=15360
176
- Condition => '$count == 15360',
177
- SubDirectory => { TagTable => 'Image::ExifTool::Sony::CameraInfo' },
178
- },{
179
- Name => 'CameraInfo2',
180
- # count: A850/A900=5478, A200/A300/A350=5506, A230/A290/A330/A380/A390=6118, A700=368
181
- SubDirectory => { TagTable => 'Image::ExifTool::Sony::CameraInfo2' },
182
- }
183
- ],
184
- # 0x0018 - starts with "GYRO" for sweep panorama images (ref 12)
185
- # - contains ImageStabilization information for Minolta
186
- 0x0020 => [
187
- {
188
- Name => 'FocusInfo', #PH
189
- # count: A200/A230/A290/A300/A330/A350/A380/A390==19154, A700/A850/A900=19148
190
- Condition => '$count == 19154 or $count == 19148',
191
- SubDirectory => {
192
- TagTable => 'Image::ExifTool::Sony::FocusInfo',
193
- ByteOrder => 'BigEndian',
194
- },
195
- },{
196
- Name => 'MoreInfo', #12
197
- # count: A450/A500/A550/A560/A580/A33/A35/A55/NEX-3/5/C3/VG10E==20480
198
- SubDirectory => {
199
- TagTable => 'Image::ExifTool::Sony::MoreInfo',
200
- ByteOrder => 'LittleEndian',
201
- },
202
- },
203
- ],
204
- 0x0102 => { #5/JD
205
- Name => 'Quality',
206
- Writable => 'int32u',
207
- PrintConv => {
208
- 0 => 'RAW',
209
- 1 => 'Super Fine',
210
- 2 => 'Fine',
211
- 3 => 'Standard',
212
- 4 => 'Economy',
213
- 5 => 'Extra Fine',
214
- 6 => 'RAW + JPEG',
215
- 7 => 'Compressed RAW',
216
- 8 => 'Compressed RAW + JPEG',
217
- 0xffffffff => 'n/a', #PH (SLT-A57 panorama)
218
- },
219
- },
220
- 0x0104 => { #5/JD
221
- Name => 'FlashExposureComp',
222
- Description => 'Flash Exposure Compensation',
223
- Writable => 'rational64s',
224
- },
225
- 0x0105 => { #5/JD
226
- Name => 'Teleconverter',
227
- Writable => 'int32u',
228
- PrintHex => 1,
229
- PrintConv => \%Image::ExifTool::Minolta::minoltaTeleconverters,
230
- },
231
- 0x0112 => { #JD
232
- Name => 'WhiteBalanceFineTune',
233
- Format => 'int32s',
234
- Writable => 'int32u',
235
- },
236
- 0x0114 => [ #PH
237
- {
238
- Name => 'CameraSettings',
239
- # count: A200/A300/A350/A700=280, A850/A900=364
240
- Condition => '$count == 280 or $count == 364',
241
- SubDirectory => {
242
- TagTable => 'Image::ExifTool::Sony::CameraSettings',
243
- ByteOrder => 'BigEndian',
244
- },
245
- },
246
- {
247
- Name => 'CameraSettings2',
248
- # count: A230/A290/A330/A380/A390=332
249
- Condition => '$count == 332',
250
- SubDirectory => {
251
- TagTable => 'Image::ExifTool::Sony::CameraSettings2',
252
- ByteOrder => 'BigEndian',
253
- },
254
- },
255
- {
256
- Name => 'CameraSettings3',
257
- # count: A560/A580/A33/A35/A55/NEX3/5/C3/VG10E=1536, A450/A500/A550=2048
258
- Condition => '$count == 1536 || $count == 2048',
259
- SubDirectory => {
260
- TagTable => 'Image::ExifTool::Sony::CameraSettings3',
261
- ByteOrder => 'LittleEndian',
262
- },
263
- },
264
- {
265
- Name => 'CameraSettingsUnknown',
266
- SubDirectory => {
267
- TagTable => 'Image::ExifTool::Sony::CameraSettingsUnknown',
268
- ByteOrder => 'BigEndian',
269
- },
270
- },
271
- ],
272
- 0x0115 => { #JD
273
- Name => 'WhiteBalance',
274
- Writable => 'int32u',
275
- PrintHex => 1,
276
- PrintConv => {
277
- 0x00 => 'Auto',
278
- 0x01 => 'Color Temperature/Color Filter',
279
- 0x10 => 'Daylight',
280
- 0x20 => 'Cloudy',
281
- 0x30 => 'Shade',
282
- 0x40 => 'Tungsten',
283
- 0x50 => 'Flash',
284
- 0x60 => 'Fluorescent',
285
- 0x70 => 'Custom',
286
- },
287
- },
288
- 0x0e00 => {
289
- Name => 'PrintIM',
290
- Description => 'Print Image Matching',
291
- SubDirectory => {
292
- TagTable => 'Image::ExifTool::PrintIM::Main',
293
- },
294
- },
295
- # the next 3 tags have a different meaning for some models (with format int32u)
296
- 0x1000 => { #9 (F88, multi burst mode only)
297
- Name => 'MultiBurstMode',
298
- Condition => '$format eq "undef"',
299
- Notes => 'MultiBurst tags valid only for models with this feature, like the F88',
300
- Writable => 'undef',
301
- Format => 'int8u',
302
- PrintConv => { 0 => 'Off', 1 => 'On' },
303
- },
304
- 0x1001 => { #9 (F88, multi burst mode only)
305
- Name => 'MultiBurstImageWidth',
306
- Condition => '$format eq "int16u"',
307
- Writable => 'int16u',
308
- },
309
- 0x1002 => { #9 (F88, multi burst mode only)
310
- Name => 'MultiBurstImageHeight',
311
- Condition => '$format eq "int16u"',
312
- Writable => 'int16u',
313
- },
314
- 0x1003 => { #9 (TX7, panorama mode only)
315
- Name => 'Panorama',
316
- SubDirectory => { TagTable => 'Image::ExifTool::Sony::Panorama' },
317
- },
318
- # 0x2000 - undef[1]
319
- 0x2001 => { #PH (JPEG images from all DSLR's except the A100)
320
- Name => 'PreviewImage',
321
- Writable => 'undef',
322
- DataTag => 'PreviewImage',
323
- # Note: the preview data starts with a 32-byte proprietary Sony header
324
- WriteCheck => 'return $val=~/^(none|.{32}\xff\xd8\xff)/s ? undef : "Not a valid image"',
325
- RawConv => q{
326
- return \$val if $val =~ /^Binary/;
327
- $val = substr($val,0x20) if length($val) > 0x20;
328
- return \$val if $val =~ s/^.(\xd8\xff\xdb)/\xff$1/s;
329
- $$self{PreviewError} = 1 unless $val eq 'none';
330
- return undef;
331
- },
332
- # must construct 0x20-byte header which contains length, width and height
333
- ValueConvInv => q{
334
- return 'none' unless $val;
335
- my $e = new Image::ExifTool;
336
- my $info = $e->ImageInfo(\$val,'ImageWidth','ImageHeight');
337
- return undef unless $$info{ImageWidth} and $$info{ImageHeight};
338
- my $size = Set32u($$info{ImageWidth}) . Set32u($$info{ImageHeight});
339
- return Set32u(length $val) . $size . ("\0" x 8) . $size . ("\0" x 4) . $val;
340
- },
341
- },
342
- 0x2002 => { #12 (written by Sony IDC)
343
- Name => 'Rating',
344
- Writable => 'int32u', # (0-5 stars)
345
- },
346
- # 0x2003 - string[256]
347
- 0x2004 => { #PH (NEX-5)
348
- Name => 'Contrast',
349
- Writable => 'int32s',
350
- PrintConv => '$val > 0 ? "+$val" : $val',
351
- PrintConvInv => '$val',
352
- },
353
- 0x2005 => { #PH (NEX-5)
354
- Name => 'Saturation',
355
- Writable => 'int32s',
356
- PrintConv => '$val > 0 ? "+$val" : $val',
357
- PrintConvInv => '$val',
358
- },
359
- 0x2006 => { #PH
360
- Name => 'Sharpness',
361
- Writable => 'int32s',
362
- PrintConv => '$val > 0 ? "+$val" : $val',
363
- PrintConvInv => '$val',
364
- },
365
- 0x2007 => { #PH
366
- Name => 'Brightness',
367
- Writable => 'int32s',
368
- PrintConv => '$val > 0 ? "+$val" : $val',
369
- PrintConvInv => '$val',
370
- },
371
- 0x2008 => { #PH
372
- Name => 'LongExposureNoiseReduction',
373
- Writable => 'int32u',
374
- PrintHex => 1,
375
- PrintConv => {
376
- 0 => 'Off',
377
- 1 => 'On (unused)',
378
- 0x10001 => 'On (dark subtracted)', # (NEX-C3)
379
- 0xffff0000 => 'Off (65535)',
380
- 0xffff0001 => 'On (65535)',
381
- 0xffffffff => 'n/a',
382
- },
383
- },
384
- 0x2009 => { #PH
385
- Name => 'HighISONoiseReduction',
386
- Writable => 'int16u',
387
- PrintConv => {
388
- 0 => 'Off',
389
- 1 => 'Low',
390
- 2 => 'Normal',
391
- 3 => 'High',
392
- 256 => 'Auto',
393
- 65535 => 'n/a',
394
- },
395
- },
396
- 0x200a => { #PH (A550)
397
- Name => 'HDR',
398
- Writable => 'int32u',
399
- Format => 'int16u',
400
- Count => 2,
401
- Notes => 'stored as a 32-bit integer, but read as two 16-bit integers',
402
- PrintHex => 1,
403
- PrintConv => [{
404
- 0x0 => 'Off',
405
- 0x01 => 'Auto',
406
- 0x10 => '1.0 EV',
407
- 0x11 => '1.5 EV',
408
- 0x12 => '2.0 EV',
409
- 0x13 => '2.5 EV',
410
- 0x14 => '3.0 EV',
411
- 0x15 => '3.5 EV',
412
- 0x16 => '4.0 EV',
413
- 0x17 => '4.5 EV',
414
- 0x18 => '5.0 EV',
415
- 0x19 => '5.5 EV',
416
- 0x1a => '6.0 EV',
417
- },{ #12 (A580)
418
- 0 => 'Uncorrected image', # A580 stores 2 images: uncorrected and HDR
419
- 1 => 'HDR image (good)',
420
- 2 => 'HDR image (fail 1)', # alignment problem?
421
- 3 => 'HDR image (fail 2)', # contrast problem?
422
- }],
423
- },
424
- 0x200b => { #PH
425
- Name => 'MultiFrameNoiseReduction',
426
- Writable => 'int32u',
427
- Notes => 'may not be valid for RS100', # (RS100 sample was 0 when this feature was turned on)
428
- PrintConv => {
429
- 0 => 'Off',
430
- 1 => 'On',
431
- 255 => 'n/a',
432
- },
433
- },
434
- # 0x200c - int32u[3]: '0 0 0'
435
- # 0x200d - rational64u: 10/10
436
- 0x200e => { #PH (HX20V)
437
- Name => 'PictureEffect',
438
- Writable => 'int16u',
439
- PrintConv => {
440
- 0 => 'Off',
441
- 1 => 'Toy Camera', #12 (A35)
442
- 2 => 'Pop Color', # (also A35/NEX-C3, ref 12)
443
- 3 => 'Posterization', #12 (A35)
444
- 4 => 'Posterization B/W', #12 (A35)
445
- 5 => 'Retro Photo', #12 (A35, NEX-5)
446
- 6 => 'Soft High Key', # (also A65V, A35/NEX-C3 call this "High-key", ref 12)
447
- 7 => 'Partial Color (red)', #12 (A35)
448
- 8 => 'Partial Color (green)', #12 (A35, NEX-5)
449
- 9 => 'Partial Color (blue)', #12 (A35)
450
- 10 => 'Partial Color (yellow)', #12 (A35, NEX-5)
451
- 13 => 'High Contrast Monochrome', #12 (A35)
452
- 16 => 'Toy Camera (normal)', # (also A65, ref 12)
453
- 17 => 'Toy Camera (cool)', # (RX100)
454
- 18 => 'Toy Camera (warm)', # (RX100)
455
- 19 => 'Toy Camera (green)', # (RX100)
456
- 20 => 'Toy Camera (magenta)', # (RX100)
457
- 32 => 'Soft Focus (low)', #12 (RX100)
458
- 33 => 'Soft Focus', #12 (A65V)
459
- 34 => 'Soft Focus (high)', # (RX100)
460
- 48 => 'Miniature (auto)', #12 (A65V/NEX-7, horizontal) ('auto' for RX100)
461
- 49 => 'Miniature (on)', # ? (RX100)
462
- 50 => 'Miniature (beside)', # (WX100/HX20V, horizontal) ('beside' for RX100)
463
- 51 => 'Miniature (below)', # (WX100, rotate 90 CW) ('below' for RX100)
464
- 52 => 'Miniature (left)', # (RX100)
465
- 53 => 'Miniature (vertical)', # (RX100)
466
- 54 => 'Miniature (right)', # (RX100)
467
- 64 => 'HDR Painting (low)', # (RX100)
468
- 65 => 'HDR Painting', # (also A65V, ref 12)
469
- 66 => 'HDR Painting (high)', # (RX100)
470
- 80 => 'Rich-tone Monochrome', # (also A65V, ref 12)
471
- 97 => 'Water Color', # (HX200V)
472
- 98 => 'Water Color 2',
473
- 112 => 'Illustration (low)', # (RX100)
474
- 113 => 'Illustration', # (RX100)
475
- 114 => 'Illustration (high)', # (RX100)
476
- },
477
- },
478
- # 0x200f - int32u: 0 (A57/A65/A77/NEX-C3/NEX-VG20), 0xffffffff (A35)
479
- 0x2011 => { #PH (A77, NEX-5N)
480
- Name => 'VignettingCorrection',
481
- Writable => 'int32u',
482
- PrintConv => {
483
- 0 => 'Off',
484
- 2 => 'Auto',
485
- 0xffffffff => 'n/a', # (RX100)
486
- },
487
- },
488
- 0x2012 => { #PH (A77, NEX-5N)
489
- Name => 'LateralChromaticAberration',
490
- Writable => 'int32u',
491
- PrintConv => {
492
- 0 => 'Off',
493
- 2 => 'Auto',
494
- 0xffffffff => 'n/a', # (RX100)
495
- },
496
- },
497
- 0x2013 => { #PH (A77, NEX-5N)
498
- Name => 'DistortionCorrection',
499
- Writable => 'int32u',
500
- PrintConv => {
501
- 0 => 'Off',
502
- 2 => 'Auto',
503
- 0xffffffff => 'n/a', # (RX100)
504
- },
505
- },
506
- # 0x2014 - int32s[2]: '0 0', '0 -1', '0 -2' (2nd value seems to match 0xb022, ref 12)
507
- # 0x2015 - int16u: 65535
508
- 0x3000 => {
509
- Name => 'ShotInfo',
510
- SubDirectory => {
511
- TagTable => 'Image::ExifTool::Sony::ShotInfo',
512
- },
513
- },
514
- # 0x3000: data block that includes DateTimeOriginal string
515
- 0xb000 => { #8
516
- Name => 'FileFormat',
517
- Writable => 'int8u',
518
- Count => 4,
519
- # dynamically set the file type to SR2 because we could have assumed ARW up till now
520
- RawConv => q{
521
- $self->OverrideFileType($$self{TIFF_TYPE} = 'SR2') if $val eq '1 0 0 0';
522
- return $val;
523
- },
524
- PrintConvColumns => 2,
525
- PrintConv => {
526
- '0 0 0 2' => 'JPEG',
527
- '1 0 0 0' => 'SR2',
528
- '2 0 0 0' => 'ARW 1.0',
529
- '3 0 0 0' => 'ARW 2.0',
530
- '3 1 0 0' => 'ARW 2.1',
531
- '3 2 0 0' => 'ARW 2.2', #PH (NEX-5)
532
- '3 3 0 0' => 'ARW 2.3', #PH (SLT-A65,SLT-A77)
533
- # what about cRAW images?
534
- },
535
- },
536
- 0xb001 => { # ref http://forums.dpreview.com/forums/read.asp?forum=1037&message=33609644
537
- # (ARW and SR2 images only until the SLT-A65V started writing them to JPEG too)
538
- Name => 'SonyModelID',
539
- Writable => 'int16u',
540
- PrintConvColumns => 2,
541
- PrintConv => {
542
- 2 => 'DSC-R1',
543
- 256 => 'DSLR-A100',
544
- 257 => 'DSLR-A900',
545
- 258 => 'DSLR-A700',
546
- 259 => 'DSLR-A200',
547
- 260 => 'DSLR-A350',
548
- 261 => 'DSLR-A300',
549
- 262 => 'DSLR-A900 (APS-C mode)', #http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3994.0.html
550
- 263 => 'DSLR-A380/A390', #PH (A390)
551
- 264 => 'DSLR-A330',
552
- 265 => 'DSLR-A230',
553
- 266 => 'DSLR-A290', #PH
554
- 269 => 'DSLR-A850',
555
- 270 => 'DSLR-A850 (APS-C mode)', #http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3994.0.html
556
- 273 => 'DSLR-A550',
557
- 274 => 'DSLR-A500', #PH
558
- 275 => 'DSLR-A450', #http://dev.exiv2.org/issues/show/0000611
559
- 278 => 'NEX-5', #PH
560
- 279 => 'NEX-3', #PH
561
- 280 => 'SLT-A33', #PH
562
- 281 => 'SLT-A55V', #PH
563
- 282 => 'DSLR-A560', #PH
564
- 283 => 'DSLR-A580', #http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,2881.0.html
565
- 284 => 'NEX-C3', #PH
566
- 285 => 'SLT-A35', #12
567
- 286 => 'SLT-A65V', #PH
568
- 287 => 'SLT-A77V', #PH
569
- 288 => 'NEX-5N', #PH
570
- 289 => 'NEX-7', #PH
571
- 290 => 'NEX-VG20E', #12
572
- 291 => 'SLT-A37', #12
573
- 292 => 'SLT-A57', #12
574
- 293 => 'NEX-F3', #PH
575
- 297 => 'DSC-RX100', #PH
576
- },
577
- },
578
- 0xb020 => { #2
579
- Name => 'ColorReproduction',
580
- # observed values: None, Standard, Vivid, Real, AdobeRGB - PH
581
- Writable => 'string',
582
- },
583
- 0xb021 => { #2
584
- Name => 'ColorTemperature',
585
- Writable => 'int32u',
586
- PrintConv => '$val ? $val : "Auto"',
587
- PrintConvInv => '$val=~/Auto/i ? 0 : $val',
588
- },
589
- 0xb022 => { #7
590
- Name => 'ColorCompensationFilter',
591
- Format => 'int32s',
592
- Writable => 'int32u', # (written incorrectly as unsigned by Sony)
593
- Notes => 'negative is green, positive is magenta',
594
- },
595
- 0xb023 => { #PH (A100) - (set by mode dial)
596
- Name => 'SceneMode',
597
- Writable => 'int32u',
598
- PrintConvColumns => 2,
599
- PrintConv => \%Image::ExifTool::Minolta::minoltaSceneMode,
600
- },
601
- 0xb024 => { #PH (A100)
602
- Name => 'ZoneMatching',
603
- Writable => 'int32u',
604
- PrintConv => {
605
- 0 => 'ISO Setting Used',
606
- 1 => 'High Key',
607
- 2 => 'Low Key',
608
- },
609
- },
610
- 0xb025 => { #PH (A100)
611
- Name => 'DynamicRangeOptimizer',
612
- Writable => 'int32u',
613
- PrintConvColumns => 2,
614
- PrintConv => {
615
- 0 => 'Off',
616
- 1 => 'Standard',
617
- 2 => 'Advanced Auto',
618
- 3 => 'Auto', # (A550)
619
- 8 => 'Advanced Lv1', #JD
620
- 9 => 'Advanced Lv2', #JD
621
- 10 => 'Advanced Lv3', #JD
622
- 11 => 'Advanced Lv4', #JD
623
- 12 => 'Advanced Lv5', #JD
624
- 16 => 'Lv1', # (NEX-5)
625
- 17 => 'Lv2',
626
- 18 => 'Lv3',
627
- 19 => 'Lv4',
628
- 20 => 'Lv5',
629
- },
630
- },
631
- 0xb026 => { #PH (A100)
632
- Name => 'ImageStabilization',
633
- Writable => 'int32u',
634
- PrintConv => { 0 => 'Off', 1 => 'On' },
635
- },
636
- 0xb027 => { #2
637
- Name => 'LensType',
638
- Writable => 'int32u',
639
- SeparateTable => 1,
640
- ValueConvInv => 'int($val)', # (must truncate decimal part)
641
- PrintConv => \%sonyLensTypes,
642
- },
643
- 0xb028 => { #2
644
- # (used by the DSLR-A100)
645
- Name => 'MinoltaMakerNote',
646
- # must check for zero since apparently a value of zero indicates the IFD doesn't exist
647
- # (dumb Sony -- they shouldn't write this tag if the IFD is missing!)
648
- Condition => '$$valPt ne "\0\0\0\0"',
649
- Flags => 'SubIFD',
650
- SubDirectory => {
651
- TagTable => 'Image::ExifTool::Minolta::Main',
652
- Start => '$val',
653
- },
654
- },
655
- 0xb029 => { #2 (set by creative style menu)
656
- Name => 'ColorMode',
657
- Writable => 'int32u',
658
- PrintConvColumns => 2,
659
- PrintConv => \%Image::ExifTool::Minolta::sonyColorMode,
660
- },
661
- 0xb02a => {
662
- Name => 'LensSpec',
663
- Format => 'undef',
664
- Writable => 'int8u',
665
- Count => 8,
666
- Notes => q{
667
- like LensInfo, but also specifies lens features: DT, E, ZA, G, SSM, SAM,
668
- OSS, STF, Reflex, Macro and Fisheye
669
- },
670
- ValueConv => \&ConvLensSpec,
671
- ValueConvInv => \&ConvInvLensSpec,
672
- PrintConv => \&PrintLensSpec,
673
- PrintConvInv => \&PrintInvLensSpec,
674
- },
675
- 0xb02b => { #PH (A550 JPEG and A200, A230, A300, A350, A380, A700 and A900 ARW)
676
- Name => 'FullImageSize',
677
- Writable => 'int32u',
678
- Count => 2,
679
- # values stored height first, so swap to get "width height"
680
- ValueConv => 'join(" ", reverse split(" ", $val))',
681
- ValueConvInv => 'join(" ", reverse split(" ", $val))',
682
- PrintConv => '$val =~ tr/ /x/; $val',
683
- PrintConvInv => '$val =~ tr/x/ /; $val',
684
- },
685
- 0xb02c => { #PH (A550 JPEG and A200, A230, A300, A350, A380, A700 and A900 ARW)
686
- Name => 'PreviewImageSize',
687
- Writable => 'int32u',
688
- Count => 2,
689
- ValueConv => 'join(" ", reverse split(" ", $val))',
690
- ValueConvInv => 'join(" ", reverse split(" ", $val))',
691
- PrintConv => '$val =~ tr/ /x/; $val',
692
- PrintConvInv => '$val =~ tr/x/ /; $val',
693
- },
694
- 0xb040 => { #2
695
- Name => 'Macro',
696
- Writable => 'int16u',
697
- RawConv => '$val == 65535 ? undef : $val',
698
- PrintConv => {
699
- 0 => 'Off',
700
- 1 => 'On',
701
- 2 => 'Close Focus', #9
702
- 65535 => 'n/a', #PH (A100)
703
- },
704
- },
705
- 0xb041 => { #2
706
- Name => 'ExposureMode',
707
- Writable => 'int16u',
708
- RawConv => '$val == 65535 ? undef : $val',
709
- PrintConvColumns => 2,
710
- PrintConv => {
711
- 0 => 'Auto',
712
- 1 => 'Portrait', #PH (HX1)
713
- 2 => 'Beach', #9
714
- 4 => 'Snow', #9
715
- 5 => 'Landscape',
716
- 6 => 'Program',
717
- 7 => 'Aperture Priority',
718
- 8 => 'Shutter Priority',
719
- 9 => 'Night Scene / Twilight',#2/9
720
- 10 => 'Hi-Speed Shutter', #9
721
- 11 => 'Twilight Portrait', #9
722
- 12 => 'Soft Snap', #9
723
- 13 => 'Fireworks', #9
724
- 14 => 'Smile Shutter', #9 (T200)
725
- 15 => 'Manual',
726
- 18 => 'High Sensitivity', #9
727
- 19 => 'Macro', #12
728
- 20 => 'Advanced Sports Shooting', #9
729
- 29 => 'Underwater', #9
730
- 33 => 'Gourmet', #9
731
- 34 => 'Panorama', #PH (HX1)
732
- 35 => 'Handheld Night Shot', #PH (HX1/TX1, also called "Hand-held Twilight")
733
- 36 => 'Anti Motion Blur', #PH (TX1)
734
- 37 => 'Pet', #9
735
- 38 => 'Backlight Correction HDR', #9
736
- #39 => seen for portrait with red-eye fix (post processed?) (PH, HX20V)
737
- 40 => 'Background Defocus', #PH (HX20V)
738
- #41 => seen for portrait (PH, HX200V)
739
- 65535 => 'n/a', #PH (A100)
740
- },
741
- },
742
- 0xb042 => { #9
743
- Name => 'FocusMode',
744
- Writable => 'int16u',
745
- RawConv => '$val == 65535 ? undef : $val',
746
- PrintConv => {
747
- # 0 - seen this for panorama shot
748
- 1 => 'AF-S', # (called Single-AF by Sony)
749
- 2 => 'AF-C', # (called Monitor-AF by Sony)
750
- 4 => 'Permanent-AF', # (TX7)
751
- 65535 => 'n/a', #PH (A100)
752
- },
753
- },
754
- 0xb043 => { #9
755
- Name => 'AFMode',
756
- Writable => 'int16u',
757
- RawConv => '$val == 65535 ? undef : $val',
758
- PrintConv => {
759
- 0 => 'Default', # (takes this value after camera reset, but can't be set back once changed)
760
- 1 => 'Multi AF',
761
- 2 => 'Center AF',
762
- 3 => 'Spot AF',
763
- 4 => 'Flexible Spot AF', # (T200)
764
- 6 => 'Touch AF',
765
- 14 => 'Manual Focus', # (T200)
766
- 15 => 'Face Detected', # (not set when in face detect mode and no faces detected)
767
- 65535 => 'n/a', #PH (A100)
768
- },
769
- },
770
- 0xb044 => { #9
771
- Name => 'AFIlluminator',
772
- Writable => 'int16u',
773
- RawConv => '$val == 65535 ? undef : $val',
774
- PrintConv => {
775
- 0 => 'Off',
776
- 1 => 'Auto',
777
- 65535 => 'n/a', #PH (A100)
778
- },
779
- },
780
- # 0xb045 - int16u: 0
781
- # 0xb046 - int16u: 0
782
- 0xb047 => { #2
783
- Name => 'Quality',
784
- Writable => 'int16u',
785
- RawConv => '$val == 65535 ? undef : $val',
786
- PrintConv => {
787
- 0 => 'Normal',
788
- 1 => 'Fine',
789
- 65535 => 'n/a', #PH (A100)
790
- },
791
- },
792
- 0xb048 => { #9
793
- Name => 'FlashLevel',
794
- Writable => 'int16s',
795
- RawConv => '($val == -1 and $$self{Model} =~ /DSLR-A100\b/) ? undef : $val',
796
- PrintConv => {
797
- -32768 => 'Low',
798
- -3 => '-3/3',
799
- -2 => '-2/3',
800
- -1 => '-1/3', # (for the A100, -1 is effectively 'n/a' - PH)
801
- 0 => 'Normal',
802
- 1 => '+1/3',
803
- 2 => '+2/3',
804
- 3 => '+3/3',
805
- # 4 - seen for R1, normal flash - PH
806
- # 5 - seen for R1, slow sync flash - PH
807
- # 128 - have seen this
808
- 32767 => 'High',
809
- },
810
- },
811
- 0xb049 => { #9
812
- Name => 'ReleaseMode',
813
- Writable => 'int16u',
814
- RawConv => '$val == 65535 ? undef : $val',
815
- PrintConv => {
816
- 0 => 'Normal',
817
- 2 => 'Burst',
818
- 5 => 'Exposure Bracketing',
819
- 6 => 'White Balance Bracketing', # (HX5)
820
- 65535 => 'n/a', #PH (A100)
821
- },
822
- },
823
- 0xb04a => { #9
824
- Name => 'SequenceNumber',
825
- Notes => 'shot number in continuous burst',
826
- Writable => 'int16u',
827
- RawConv => '$val == 65535 ? undef : $val',
828
- PrintConv => {
829
- 0 => 'Single',
830
- 65535 => 'n/a', #PH (A100)
831
- OTHER => sub { shift }, # pass all other numbers straight through
832
- },
833
- },
834
- 0xb04b => { #2/PH
835
- Name => 'Anti-Blur',
836
- Writable => 'int16u',
837
- RawConv => '$val == 65535 ? undef : $val',
838
- PrintConv => {
839
- 0 => 'Off',
840
- 1 => 'On (Continuous)', #PH (NC)
841
- 2 => 'On (Shooting)', #PH (NC)
842
- 65535 => 'n/a',
843
- },
844
- },
845
- # 0xb04c - rational64u: 10/10
846
- # 0xb04d - int16u: 0
847
- # 0xb050 - int16u: 65535
848
- # 0xb051/0xb053 - int16u: 0
849
- 0xb04e => { #2
850
- Name => 'LongExposureNoiseReduction',
851
- Writable => 'int16u',
852
- RawConv => '$val == 65535 ? undef : $val',
853
- PrintConv => {
854
- 0 => 'Off',
855
- 1 => 'On',
856
- 2 => 'On 2', #PH (TX10, TX100, WX9, WX10, etc)
857
- # 4 - seen this (CX360E, CX700E)
858
- 65535 => 'n/a', #PH (A100)
859
- },
860
- },
861
- 0xb04f => { #PH (TX1)
862
- Name => 'DynamicRangeOptimizer',
863
- Writable => 'int16u',
864
- Priority => 0, # (unreliable for the A77)
865
- PrintConv => {
866
- 0 => 'Off',
867
- 1 => 'Standard',
868
- 2 => 'Plus',
869
- # 8 for HDR models - what does this mean?
870
- },
871
- },
872
- 0xb052 => { #PH (TX1)
873
- Name => 'IntelligentAuto',
874
- Writable => 'int16u',
875
- PrintConv => {
876
- 0 => 'Off',
877
- 1 => 'On',
878
- 2 => 'Advanced', #9
879
- },
880
- },
881
- 0xb054 => { #PH (TX1)
882
- Name => 'WhiteBalance',
883
- Writable => 'int16u',
884
- Priority => 0, # (until more values are filled in)
885
- PrintConv => {
886
- 0 => 'Auto',
887
- 4 => 'Manual',
888
- 5 => 'Daylight',
889
- 6 => 'Cloudy', #9
890
- 7 => 'White Flourescent', #9 (Sony "Fluorescent 1 (White)")
891
- 8 => 'Cool White Flourescent', #9 (Sony "Fluorescent 2 (Natural White)")
892
- 9 => 'Day White Flourescent', #9 (Sony "Fluorescent 3 (Day White)")
893
- 14 => 'Incandescent',
894
- 15 => 'Flash', #9
895
- 17 => 'Underwater 1 (Blue Water)', #9
896
- 18 => 'Underwater 2 (Green Water)', #9
897
- },
898
- },
899
- );
900
-
901
- # "SEMC MS" maker notes
902
- %Image::ExifTool::Sony::Ericsson = (
903
- WRITE_PROC => \&Image::ExifTool::Exif::WriteExif,
904
- CHECK_PROC => \&Image::ExifTool::Exif::CheckExif,
905
- GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
906
- NOTES => 'Maker notes found in images from some Sony Ericsson phones.',
907
- 0x2000 => {
908
- Name => 'MakerNoteVersion',
909
- Writable => 'undef',
910
- Count => 4,
911
- },
912
- 0x201 => {
913
- Name => 'PreviewImageStart',
914
- IsOffset => 1,
915
- MakerPreview => 1, # force preview inside maker notes
916
- OffsetPair => 0x202,
917
- DataTag => 'PreviewImage',
918
- Writable => 'int32u',
919
- Protected => 2,
920
- Notes => 'a small 320x200 preview image',
921
- },
922
- 0x202 => {
923
- Name => 'PreviewImageLength',
924
- OffsetPair => 0x201,
925
- DataTag => 'PreviewImage',
926
- Writable => 'int32u',
927
- Protected => 2,
928
- },
929
- );
930
-
931
- # Camera information for the A55 (ref PH)
932
- # (also valid for A33, A35, A560, A580 - ref 12)
933
- %Image::ExifTool::Sony::CameraInfo = (
934
- %binaryDataAttrs,
935
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
936
- NOTES => q{
937
- Camera information stored by the A33, A35, A55, A450, A500, A550, A560,
938
- A580, NEX-3/5/C3 and VG10E. Some tags are valid only for some of these
939
- models.
940
- },
941
- 0x00 => { #12
942
- Name => 'LensSpec',
943
- Format => 'undef[8]',
944
- ValueConv => \&ConvLensSpec,
945
- ValueConvInv => \&ConvInvLensSpec,
946
- PrintConv => \&PrintLensSpec,
947
- PrintConvInv => \&PrintInvLensSpec,
948
- },
949
- 0x0e => { #12
950
- Name => 'FocalLength',
951
- Condition => '$$self{Model} !~ /^(DSLR-(A450|A500|A550)$)/',
952
- Format => 'int16u',
953
- Priority => 0,
954
- ValueConv => '$val / 10',
955
- ValueConvInv => '$val * 10',
956
- PrintConv => 'sprintf("%.1f mm",$val)',
957
- PrintConvInv => '$val =~ s/ mm//; $val',
958
- },
959
- 0x10 => { #12
960
- Name => 'FocalLengthTeleZoom',
961
- Condition => '$$self{Model} !~ /^(DSLR-(A450|A500|A550)$)/',
962
- Format => 'int16u',
963
- ValueConv => '$val * 2 / 3',
964
- ValueConvInv => 'int($val * 3 / 2 + 0.5)',
965
- PrintConv => 'sprintf("%.1f mm",$val)',
966
- PrintConvInv => '$val =~ s/ mm//; $val',
967
- },
968
- 0x1c => {
969
- Name => 'AFPointSelected', # (v8.88: renamed from LocalAFAreaPointSelected)
970
- Condition => '$$self{Model} =~ /^(SLT-|DSLR-A(560|580))\b/',
971
- Notes => 'not valid for Contrast AF', #12
972
- # (all of these cameras have an 15-point three-cross AF system, ref 12)
973
- PrintConvColumns => 2,
974
- PrintConv => {
975
- 0 => 'Auto', # (seen in Wide mode)
976
- 1 => 'Center',
977
- 2 => 'Top',
978
- 3 => 'Upper-right',
979
- 4 => 'Right',
980
- 5 => 'Lower-right',
981
- 6 => 'Bottom',
982
- 7 => 'Lower-left',
983
- 8 => 'Left',
984
- 9 => 'Upper-left',
985
- 10 => 'Far Right',
986
- 11 => 'Far Left',
987
- 12 => 'Upper-middle',
988
- 13 => 'Near Right',
989
- 14 => 'Lower-middle',
990
- 15 => 'Near Left',
991
- },
992
- },
993
- 0x1d => {
994
- Name => 'FocusMode',
995
- Condition => '$$self{Model} =~ /^(SLT-|DSLR-A(560|580))\b/',
996
- PrintConv => {
997
- 0 => 'Manual',
998
- 1 => 'AF-S',
999
- 2 => 'AF-C',
1000
- 3 => 'AF-A',
1001
- },
1002
- },
1003
- 0x20 => { #12
1004
- Name => 'AFPoint', # (v8.88: renamed from LocalAFAreaPointUsed)
1005
- Condition => '$$self{Model} =~ /^(SLT-|DSLR-A(560|580))\b/',
1006
- Notes => 'the AF sensor used for focusing. Not valid for Contrast AF',
1007
- PrintConvColumns => 2,
1008
- PrintConv => {
1009
- 0 => 'Upper-left',
1010
- 1 => 'Left',
1011
- 2 => 'Lower-left',
1012
- 3 => 'Far Left',
1013
- 4 => 'Top (horizontal)',
1014
- 5 => 'Near Right',
1015
- 6 => 'Center (horizontal)',
1016
- 7 => 'Near Left',
1017
- 8 => 'Bottom (horizontal)',
1018
- 9 => 'Top (vertical)',
1019
- 10 => 'Center (vertical)',
1020
- 11 => 'Bottom (vertical)',
1021
- 12 => 'Far Right',
1022
- 13 => 'Upper-right',
1023
- 14 => 'Right',
1024
- 15 => 'Lower-right',
1025
- 16 => 'Upper-middle',
1026
- 17 => 'Lower-middle',
1027
- 255 => '(none)', #PH (A55, guess; also A35 with non-AF lens, ref 12)
1028
- },
1029
- },
1030
- # 0x0166 - starting here there are 96 unknown blocks of 155 bytes each for the
1031
- # A33/35/55, A560/580, but NOT for NEX or A450/500/550, and not
1032
- # for the A580 in Contrast-AF mode (ref 12)
1033
- );
1034
-
1035
- # camera information for other DSLR and NEX models (ref PH)
1036
- %Image::ExifTool::Sony::CameraInfo2 = (
1037
- %binaryDataAttrs,
1038
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
1039
- NOTES => 'Camera information for other DSLR and NEX models.',
1040
- 0x00 => [ #12
1041
- {
1042
- Name => 'LensSpec',
1043
- # the A700/A850/A900 use a different int16 byte ordering! - PH
1044
- Condition => '$$self{Model} =~ /^DSLR-A(700|850|900)\b/',
1045
- Format => 'undef[8]',
1046
- ValueConv => sub {
1047
- my $val = shift;;
1048
- return ConvLensSpec(pack('v*', unpack('n*', $val)));
1049
- },
1050
- ValueConvInv => sub {
1051
- my $val = shift;
1052
- return pack('v*', unpack('n*', ConvInvLensSpec($val)));
1053
- },
1054
- PrintConv => \&PrintLensSpec,
1055
- PrintConvInv => \&PrintInvLensSpec,
1056
- },{
1057
- Name => 'LensSpec',
1058
- Format => 'undef[8]',
1059
- ValueConv => \&ConvLensSpec,
1060
- ValueConvInv => \&ConvInvLensSpec,
1061
- PrintConv => \&PrintLensSpec,
1062
- PrintConvInv => \&PrintInvLensSpec,
1063
- },
1064
- ],
1065
- );
1066
-
1067
- # white balance and other camera information (ref PH)
1068
- %Image::ExifTool::Sony::FocusInfo = (
1069
- %binaryDataAttrs,
1070
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
1071
- PRIORITY => 0,
1072
- NOTES => q{
1073
- More camera settings and focus information decoded for models such as the
1074
- A200, A230, A290, A300, A330, A350, A380, A390, A700, A850 and A900.
1075
- },
1076
- 0x0e => [{ #7/12
1077
- Name => 'DriveMode2',
1078
- Condition => '$$self{Model} =~ /^DSLR-A(230|290|330|380|390)$/',
1079
- Notes => 'A230, A290, A330, A380 and A390',
1080
- ValueConvInv => '$val',
1081
- PrintHex => 1,
1082
- PrintConv => { # (values confirmed for specified models - PH)
1083
- 0x01 => 'Single Frame', # (A230,A330,A380)
1084
- 0x02 => 'Continuous High', #PH (A230,A330)
1085
- 0x04 => 'Self-timer 10 sec', # (A230)
1086
- 0x05 => 'Self-timer 2 sec, Mirror Lock-up', # (A230,A290,A330,A380,390)
1087
- 0x07 => 'Continuous Bracketing', # (A230,A330)
1088
- 0x0a => 'Remote Commander', # (A230)
1089
- 0x0b => 'Continuous Self-timer', # (A230,A330)
1090
- },
1091
- },{
1092
- Name => 'DriveMode2',
1093
- Notes => 'A200, A300, A350, A700, A850 and A900',
1094
- ValueConvInv => '$val',
1095
- PrintHex => 1,
1096
- PrintConv => {
1097
- 0x01 => 'Single Frame',
1098
- 0x02 => 'Continuous High', # A700/A900; not on A850
1099
- 0x12 => 'Continuous Low', #12
1100
- 0x04 => 'Self-timer 10 sec',
1101
- 0x05 => 'Self-timer 2 sec, Mirror Lock-up',
1102
- 0x06 => 'Single-frame Bracketing',
1103
- 0x07 => 'Continuous Bracketing',
1104
- 0x18 => 'White Balance Bracketing Low', #12
1105
- 0x28 => 'White Balance Bracketing High', #12
1106
- 0x19 => 'D-Range Optimizer Bracketing Low', #12
1107
- 0x29 => 'D-Range Optimizer Bracketing High', #12
1108
- 0x0a => 'Remote Commander', #12
1109
- 0x0b => 'Mirror Lock-up', #12 (A850/A900; not on A700)
1110
- },
1111
- }],
1112
- 0x10 => { #12 (1 and 2 inverted!)
1113
- Name => 'Rotation',
1114
- PrintConv => {
1115
- 0 => 'Horizontal (normal)',
1116
- 1 => 'Rotate 270 CW',
1117
- 2 => 'Rotate 90 CW',
1118
- },
1119
- },
1120
- 0x14 => {
1121
- Name => 'ImageStabilizationSetting',
1122
- PrintConv => { 0 => 'Off', 1 => 'On' },
1123
- },
1124
- 0x15 => { #7
1125
- Name => 'DynamicRangeOptimizerMode',
1126
- PrintConv => {
1127
- 0 => 'Off',
1128
- 1 => 'Standard',
1129
- 2 => 'Advanced Auto',
1130
- 3 => 'Advanced Level',
1131
- },
1132
- },
1133
- 0x2b => { #12 seen 2,1,3 for both WB and DRO bracketing
1134
- Name => 'BracketShotNumber',
1135
- Notes => 'WB and DRO bracketing',
1136
- },
1137
- 0x2c => { #12
1138
- Name => 'WhiteBalanceBracketing',
1139
- PrintConv => {
1140
- 0 => 'Off',
1141
- 1 => 'Low',
1142
- 2 => 'High',
1143
- },
1144
- },
1145
- 0x2d => { #12 seen 2,1,3 for both WB and DRO bracketing
1146
- Name => 'BracketShotNumber2',
1147
- },
1148
- 0x2e => { # 12
1149
- Name => 'DynamicRangeOptimizerBracket',
1150
- PrintConv => {
1151
- 0 => 'Off',
1152
- 1 => 'Low',
1153
- 2 => 'High',
1154
- },
1155
- },
1156
- 0x2f => { #12 seen 0,1,2 and 0,1,2,3,4 for 3 and 5 image bracketing sequences
1157
- Name => 'ExposureBracketShotNumber',
1158
- },
1159
- 0x3f => { #12
1160
- Name => 'ExposureProgram',
1161
- PrintConv => \%sonyExposureProgram,
1162
- },
1163
- 0x41 => { #12 style actually used (combination of mode dial + creative style menu)
1164
- Name => 'CreativeStyle',
1165
- PrintConvColumns => 2,
1166
- PrintConv => {
1167
- 1 => 'Standard',
1168
- 2 => 'Vivid',
1169
- 3 => 'Portrait',
1170
- 4 => 'Landscape',
1171
- 5 => 'Sunset',
1172
- 6 => 'Night View/Portrait',
1173
- 8 => 'B&W',
1174
- 9 => 'Adobe RGB', # A700
1175
- 11 => 'Neutral',
1176
- 12 => 'Clear', #7
1177
- 13 => 'Deep', #7
1178
- 14 => 'Light', #7
1179
- 15 => 'Autumn', #7
1180
- 16 => 'Sepia', #7
1181
- },
1182
- },
1183
- 0x09bb => { #PH (validated only for DSLR-A850)
1184
- Condition => '$$self{Model} =~ /^DSLR-A(200|230|290|300|330|350|380|390|700|850|900)$/',
1185
- Notes => 'only valid for some DSLR models',
1186
- Name => 'FocusPosition', # 128 = infinity -- see Composite:FocusDistance below
1187
- },
1188
- );
1189
-
1190
- # more camera setting information (ref 12)
1191
- # - many of these tags are the same as in CameraSettings3
1192
- %Image::ExifTool::Sony::MoreInfo = (
1193
- PROCESS_PROC => \&ProcessMoreInfo,
1194
- WRITE_PROC => \&ProcessMoreInfo,
1195
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
1196
- NOTES => q{
1197
- More camera settings information decoded for the A450, A500, A550, A560,
1198
- A580, A33, A35, A55, NEX-3/5/C3 and VG10E.
1199
- },
1200
- 0x0001 => { # (256 bytes)
1201
- Name => 'MoreSettings',
1202
- SubDirectory => { TagTable => 'Image::ExifTool::Sony::MoreSettings' },
1203
- },
1204
- # (byte sizes for a single A580 image -- not checked for other images)
1205
- 0x0002 => { # (256 bytes)
1206
- Name => 'FaceInfo',
1207
- Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/',
1208
- SubDirectory => { TagTable => 'Image::ExifTool::Sony::FaceInfo' },
1209
- },
1210
- # 0x0101: 512 bytes
1211
- # 0x0102: 1804 bytes
1212
- # 0x0103: 176 bytes
1213
- # 0x0104: 1088 bytes
1214
- # 0x0105: 160 bytes (all zero unless flash is used, ref 12)
1215
- # 0x0106: 256 bytes (faces detected if first byte is non-zero? ref 12)
1216
- 0x0107 => { # (7200 bytes: 3 sets of 40x30 int16u values in the range 0-1023)
1217
- Name => 'TiffMeteringImage',
1218
- Notes => q{
1219
- 10-bit RGB data from the 1200 AE metering segments, converted to a 16-bit
1220
- TIFF image
1221
- },
1222
- ValueConv => sub {
1223
- my ($val, $exifTool) = @_;
1224
- return undef unless length $val >= 7200;
1225
- return \ "Binary data 7404 bytes" unless $exifTool->Options('Binary');
1226
- my @dat = unpack('v*', $val);
1227
- # TIFF header for a 16-bit RGB 10dpi 40x30 image
1228
- $val = "\x49\x49\x2a\0\x08\0\0\0\x0e\0" . # 14 menu entries:
1229
- "\xfe\x00\x04\0\x01\0\0\0\x00\0\0\0" . # SubfileType = 0
1230
- "\x00\x01\x04\0\x01\0\0\0\x28\0\0\0" . # ImageWidth = 40
1231
- "\x01\x01\x04\0\x01\0\0\0\x1e\0\0\0" . # ImageHeight = 30
1232
- "\x02\x01\x03\0\x03\0\0\0\xb6\0\0\0" . # BitsPerSample
1233
- "\x03\x01\x03\0\x01\0\0\0\x01\0\0\0" . # Compression = 1
1234
- "\x06\x01\x03\0\x01\0\0\0\x02\0\0\0" . # PhotometricInterpretation = 2
1235
- "\x11\x01\x04\0\x01\0\0\0\xcc\0\0\0" . # StripOffsets = 204
1236
- "\x15\x01\x03\0\x01\0\0\0\x03\0\0\0" . # SamplesPerPixel = 3
1237
- "\x16\x01\x04\0\x01\0\0\0\x1e\0\0\0" . # RowsPerStrip = 30
1238
- "\x17\x01\x04\0\x01\0\0\0\x20\x1c\0\0". # StripByteCounts = 7200
1239
- "\x1a\x01\x05\0\x01\0\0\0\xbc\0\0\0" . # XResolution
1240
- "\x1b\x01\x05\0\x01\0\0\0\xc4\0\0\0" . # YResolution
1241
- "\x1c\x01\x03\0\x01\0\0\0\x01\0\0\0" . # PlanarConfiguration = 1
1242
- "\x28\x01\x03\0\x01\0\0\0\x02\0\0\0" . # ResolutionUnit = 2
1243
- "\0\0\0\0" . # (no IFD1)
1244
- "\x10\0\x10\0\x10\0" . # BitsPerSample = 16x16x16
1245
- "\x64\0\0\0\x0a\0\0\0". # XResolution = 10
1246
- "\x64\0\0\0\x0a\0\0\0"; # YResolution = 10
1247
- # re-order data to RGB pixels
1248
- my ($i, @val);
1249
- for ($i=0; $i<40*30; ++$i) {
1250
- # data is 10-bit (max 1023), shift left to fill 16 bits
1251
- # (typically, this gives a very dark image since the data should
1252
- # really be anti-logged to convert from EV to perceived brightness)
1253
- push @val, $dat[$i]<<6, $dat[$i+1200]<<6, $dat[$i+2400]<<6;
1254
- }
1255
- $val .= pack('v*', @val); # add TIFF strip data
1256
- return \$val;
1257
- },
1258
- },
1259
- # 0x0108: 140 bytes
1260
- # 0x0109: 256 bytes
1261
- # 0x010a: 256 bytes
1262
- # 0x0306: 276 bytes
1263
- # 0x0307: 256 bytes
1264
- # 0x0308: 96 bytes
1265
- # 0x0309: 112 bytes
1266
- # 0xffff: 788 bytes
1267
- # 0x0201: 368 bytes
1268
- # 0x0202: 144 bytes
1269
- # 0x0401: 4608 bytes
1270
- );
1271
-
1272
- # more camera setting information (ref 12)
1273
- # - many of these tags are the same as in CameraSettings3
1274
- %Image::ExifTool::Sony::MoreSettings = (
1275
- %binaryDataAttrs,
1276
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
1277
- PRIORITY => 0,
1278
- 0x01 => { # interesting: somewhere between CameraSettings3 0x04 and 0x34
1279
- Name => 'DriveMode2',
1280
- PrintHex => 1,
1281
- PrintConv => {
1282
- 0x10 => 'Single Frame',
1283
- 0x21 => 'Continuous High', # also automatically selected for Scene mode Sports-action (0x05=52)
1284
- 0x22 => 'Continuous Low',
1285
- 0x30 => 'Speed Priority Continuous',
1286
- 0x51 => 'Self-timer 10 sec',
1287
- 0x52 => 'Self-timer 2 sec, Mirror Lock-up',
1288
- 0x71 => 'Continuous Bracketing 0.3 EV',
1289
- 0x75 => 'Continuous Bracketing 0.7 EV',
1290
- 0x91 => 'White Balance Bracketing Low',
1291
- 0x92 => 'White Balance Bracketing High',
1292
- 0xc0 => 'Remote Commander',
1293
- },
1294
- },
1295
- 0x02 => {
1296
- Name => 'ExposureProgram',
1297
- PrintConv => \%sonyExposureProgram2,
1298
- },
1299
- 0x03 => {
1300
- Name => 'MeteringMode',
1301
- PrintConv => {
1302
- 1 => 'Multi-segment',
1303
- 2 => 'Center-weighted average',
1304
- 3 => 'Spot',
1305
- },
1306
- },
1307
- 0x04 => {
1308
- Name => 'DynamicRangeOptimizerSetting',
1309
- PrintConv => {
1310
- 1 => 'Off',
1311
- 16 => 'On (Auto)',
1312
- 17 => 'On (Manual)',
1313
- },
1314
- },
1315
- 0x05 => 'DynamicRangeOptimizerLevel',
1316
- 0x06 => {
1317
- Name => 'ColorSpace',
1318
- PrintConv => {
1319
- 1 => 'sRGB',
1320
- 2 => 'Adobe RGB',
1321
- },
1322
- },
1323
- 0x07 => {
1324
- Name => 'CreativeStyleSetting',
1325
- PrintConvColumns => 2,
1326
- PrintConv => {
1327
- 16 => 'Standard',
1328
- 32 => 'Vivid',
1329
- 64 => 'Portrait',
1330
- 80 => 'Landscape',
1331
- 96 => 'B&W',
1332
- 160 => 'Sunset',
1333
- },
1334
- },
1335
- 0x08 => { #12
1336
- Name => 'ContrastSetting',
1337
- Format => 'int8s',
1338
- PrintConv => '$val > 0 ? "+$val" : $val',
1339
- PrintConvInv => '$val',
1340
- },
1341
- 0x09 => {
1342
- Name => 'SaturationSetting',
1343
- Format => 'int8s',
1344
- PrintConv => '$val > 0 ? "+$val" : $val',
1345
- PrintConvInv => '$val',
1346
- },
1347
- 0x0a => {
1348
- Name => 'SharpnessSetting',
1349
- Format => 'int8s',
1350
- PrintConv => '$val > 0 ? "+$val" : $val',
1351
- PrintConvInv => '$val',
1352
- },
1353
- 0x0d => {
1354
- Name => 'WhiteBalanceSetting',
1355
- # many guessed, based on "logical system" as observed for Daylight and Shade and steps of 16 between the modes
1356
- PrintHex => 1,
1357
- PrintConvColumns => 2,
1358
- PrintConv => \%whiteBalanceSetting,
1359
- SeparateTable => 1,
1360
- },
1361
- 0x0e => {
1362
- Name => 'ColorTemperatureSetting',
1363
- # matches "0xb021 ColorTemperature" when WB set to "Custom" or "Color Temperature/Color Filter"
1364
- ValueConv => '$val * 100',
1365
- ValueConvInv => '$val / 100',
1366
- PrintConv => '"$val K"',
1367
- PrintConvInv => '$val =~ s/ ?K$//i; $val',
1368
- },
1369
- 0x0f => {
1370
- Name => 'ColorCompensationFilterSet',
1371
- # seen 0, 1-9 and 245-255, corresponding to 0, M1-M9 and G9-G1 on camera display
1372
- # matches "0xb022 ColorCompensationFilter" when WB set to "Custom" or "Color Temperature/Color Filter"
1373
- Format => 'int8s',
1374
- Notes => 'negative is green, positive is magenta',
1375
- PrintConv => '$val > 0 ? "+$val" : $val',
1376
- PrintConvInv => '$val',
1377
- },
1378
- 0x10 => {
1379
- Name => 'FlashMode',
1380
- PrintConvColumns => 2,
1381
- PrintConv => {
1382
- 1 => 'Flash Off',
1383
- 16 => 'Autoflash',
1384
- 17 => 'Fill-flash',
1385
- 18 => 'Slow Sync',
1386
- 19 => 'Rear Sync',
1387
- 20 => 'Wireless',
1388
- },
1389
- },
1390
- 0x11 => {
1391
- Name => 'LongExposureNoiseReduction',
1392
- PrintConv => {
1393
- 1 => 'Off',
1394
- 16 => 'On', # (unused or dark subject)
1395
- },
1396
- },
1397
- 0x12 => {
1398
- Name => 'HighISONoiseReduction',
1399
- PrintConv => {
1400
- 16 => 'Low',
1401
- 19 => 'Auto',
1402
- },
1403
- },
1404
- 0x13 => { # why is this not valid for A450/A500/A550 ?
1405
- Name => 'FocusMode',
1406
- Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/',
1407
- PrintConv => {
1408
- 17 => 'AF-S',
1409
- 18 => 'AF-C',
1410
- 19 => 'AF-A',
1411
- 32 => 'Manual',
1412
- },
1413
- },
1414
- 0x15 => {
1415
- Name => 'MultiFrameNoiseReduction',
1416
- Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/',
1417
- PrintConv => {
1418
- 0 => 'n/a', # seen for A450/A500/A550
1419
- 1 => 'Off',
1420
- 16 => 'On',
1421
- 255 => 'None', # seen for NEX-3/5/C3
1422
- },
1423
- },
1424
- 0x16 => {
1425
- Name => 'HDRSetting',
1426
- PrintConv => {
1427
- 1 => 'Off',
1428
- 16 => 'On (Auto)',
1429
- 17 => 'On (Manual)',
1430
- },
1431
- },
1432
- 0x17 => {
1433
- Name => 'HDRLevel',
1434
- PrintConvColumns => 2,
1435
- PrintConv => {
1436
- 33 => '1 EV',
1437
- 35 => '2 EV',
1438
- 37 => '3 EV',
1439
- 39 => '4 EV',
1440
- 40 => '5 EV',
1441
- 41 => '6 EV',
1442
- },
1443
- },
1444
- 0x18 => {
1445
- Name => 'ViewingMode',
1446
- PrintConv => {
1447
- 16 => 'ViewFinder',
1448
- 33 => 'Focus Check Live View',
1449
- 34 => 'Quick AF Live View',
1450
- },
1451
- },
1452
- 0x19 => {
1453
- Name => 'FaceDetection',
1454
- PrintConv => {
1455
- 1 => 'Off',
1456
- 16 => 'On',
1457
- },
1458
- },
1459
- # 0x1a - same as CameraSettings3 0x19 (ref 12)
1460
- # 0x1b - same as CameraSettings3 0x1a (ref 12)
1461
- # 0x1c - same as CameraSettings3 0x1d (ref 12)
1462
- # 0x1d - same as CameraSettings3 0x1e (ref 12)
1463
- 0x1e => {
1464
- Name => 'ExposureCompensationSet',
1465
- Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/',
1466
- ValueConv => '($val - 128) / 24', #PH
1467
- ValueConvInv => 'int($val * 24 + 128.5)',
1468
- PrintConv => '$val ? sprintf("%+.1f",$val) : $val',
1469
- PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
1470
- },
1471
- 0x1f => {
1472
- Name => 'FlashExposureCompSet',
1473
- Description => 'Flash Exposure Comp. Setting',
1474
- Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/',
1475
- ValueConv => '($val - 128) / 24', #PH
1476
- ValueConvInv => 'int($val * 24 + 128.5)',
1477
- PrintConv => '$val ? sprintf("%+.1f",$val) : $val',
1478
- PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
1479
- },
1480
- 0x20 => {
1481
- Name => 'LiveViewAFMethod',
1482
- Condition => '$$self{Model} !~ /^(NEX-|DSLR-(A450|A500|A550)$)/',
1483
- PrintConv => {
1484
- 0 => 'n/a',
1485
- 1 => 'Phase-detect AF',
1486
- 2 => 'Contrast AF',
1487
- # Contrast AF is only available with SSM/SAM lenses and in Focus Check LV,
1488
- # NOT in Quick AF LV, and is automatically set when mounting SSM/SAM lens
1489
- # - changes into Phase-AF when switching to Quick AF LV.
1490
- },
1491
- },
1492
- 0x26 => { # (this is not in CameraSettings3)
1493
- Name => 'FNumber',
1494
- Condition => '$$self{Model} !~ /^(NEX-(3|5)|DSLR-(A450|A500|A550)$)/',
1495
- ValueConv => '2 ** (($val/8 - 1) / 2)',
1496
- ValueConvInv => 'int((log($val) * 2 / log(2) + 1) * 8 + 0.5)',
1497
- PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)',
1498
- PrintConvInv => '$val',
1499
- },
1500
- 0x27 => { # (this is not in CameraSettings3)
1501
- Name => 'ExposureTime',
1502
- Condition => '$$self{Model} !~ /^(NEX-(3|5)|DSLR-(A450|A500|A550)$)/',
1503
- ValueConv => '$val ? 2 ** (6 - $val/8) : 0',
1504
- ValueConvInv => '$val ? int((6 - log($val) / log(2)) * 8 + 0.5) : 0',
1505
- PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"',
1506
- PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)',
1507
- },
1508
- # 0x86: 17=fill flash, 18=slow sync (PH, A550)
1509
- # 0x89: FlashExposureComp = ($val-128)/24 (PH, A550) [same in MoreInfo_0002]
1510
- # 0xfa: same as 0x86 (PH, A550) [same in MoreInfo_0002]
1511
- );
1512
-
1513
- # Face detection information (ref 12)
1514
- my %faceInfo = (
1515
- Format => 'int16u[4]',
1516
- # re-order to top,left,height,width and scale to full-sized image like other Sony models
1517
- ValueConv => 'my @v=split(" ",$val); $_*=15 foreach @v; "$v[1] $v[0] $v[3] $v[2]"',
1518
- ValueConvInv => 'my @v=split(" ",$val); $_=int($_/15+0.5) foreach @v; "$v[1] $v[0] $v[3] $v[2]"',
1519
- );
1520
- %Image::ExifTool::Sony::FaceInfo = (
1521
- %binaryDataAttrs,
1522
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
1523
- FORMAT => 'int16u',
1524
- DATAMEMBER => [ 0x00 ],
1525
- 0x00 => {
1526
- Name => 'FacesDetected',
1527
- DataMember => 'FacesDetected',
1528
- Format => 'int16s',
1529
- RawConv => '$$self{FacesDetected} = ($val == -1 ? 0 : $val); $val',
1530
- PrintConv => {
1531
- OTHER => sub { shift }, # pass other values straight through
1532
- -1 => 'n/a',
1533
- },
1534
- },
1535
- 0x01 => {
1536
- Name => 'Face1Position',
1537
- Condition => '$$self{FacesDetected} >= 1',
1538
- %faceInfo,
1539
- Notes => q{
1540
- re-ordered and scaled to return the top, left, height and width of detected
1541
- face, with coordinates relative to the full-sized unrotated image and
1542
- increasing Y downwards
1543
- },
1544
- },
1545
- 0x06 => {
1546
- Name => 'Face2Position',
1547
- Condition => '$$self{FacesDetected} >= 2',
1548
- %faceInfo,
1549
- },
1550
- 0x0b => {
1551
- Name => 'Face3Position',
1552
- Condition => '$$self{FacesDetected} >= 3',
1553
- %faceInfo,
1554
- },
1555
- 0x10 => {
1556
- Name => 'Face4Position',
1557
- Condition => '$$self{FacesDetected} >= 4',
1558
- %faceInfo,
1559
- },
1560
- 0x15 => {
1561
- Name => 'Face5Position',
1562
- Condition => '$$self{FacesDetected} >= 5',
1563
- %faceInfo,
1564
- },
1565
- 0x1a => {
1566
- Name => 'Face6Position',
1567
- Condition => '$$self{FacesDetected} >= 6',
1568
- %faceInfo,
1569
- },
1570
- 0x1f => {
1571
- Name => 'Face7Position',
1572
- Condition => '$$self{FacesDetected} >= 7',
1573
- %faceInfo,
1574
- },
1575
- 0x24 => {
1576
- Name => 'Face8Position',
1577
- Condition => '$$self{FacesDetected} >= 8',
1578
- %faceInfo,
1579
- },
1580
- );
1581
-
1582
- # Camera settings (ref PH) (decoded mainly from A200)
1583
- %Image::ExifTool::Sony::CameraSettings = (
1584
- %binaryDataAttrs,
1585
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
1586
- FORMAT => 'int16u',
1587
- PRIORITY => 0,
1588
- NOTES => 'Camera settings for the A200, A300, A350, A700, A850 and A900.',
1589
- 0x00 => { #12
1590
- Name => 'ExposureTime',
1591
- ValueConv => '$val ? 2 ** (6 - $val/8) : 0',
1592
- ValueConvInv => '$val ? int((6 - log($val) / log(2)) * 8 + 0.5) : 0',
1593
- PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"',
1594
- PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)',
1595
- },
1596
- 0x01 => { #12
1597
- Name => 'FNumber',
1598
- ValueConv => '2 ** (($val/8 - 1) / 2)',
1599
- ValueConvInv => 'int((log($val) * 2 / log(2) + 1) * 8 + 0.5)',
1600
- PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)',
1601
- PrintConvInv => '$val',
1602
- },
1603
- 0x04 => { #7/12
1604
- Name => 'DriveMode',
1605
- Mask => 0xff, # (not sure what upper byte is for)
1606
- PrintConv => {
1607
- 0x01 => 'Single Frame',
1608
- 0x02 => 'Continuous High', # A700/A900; not on A850
1609
- 0x12 => 'Continuous Low', #12
1610
- 0x04 => 'Self-timer 10 sec',
1611
- 0x05 => 'Self-timer 2 sec, Mirror Lock-up',
1612
- 0x06 => 'Single-frame Bracketing',
1613
- 0x07 => 'Continuous Bracketing', # (A200 val=0x1107)
1614
- 0x18 => 'White Balance Bracketing Low', #12
1615
- 0x28 => 'White Balance Bracketing High', #12
1616
- 0x19 => 'D-Range Optimizer Bracketing Low', #12
1617
- 0x29 => 'D-Range Optimizer Bracketing High', #12
1618
- 0x0a => 'Remote Commander', #12
1619
- 0x0b => 'Mirror Lock-up', #12 (A850/A900; not on A700)
1620
- },
1621
- },
1622
- 0x06 => { #7 (A700, not valid for other models?)
1623
- Name => 'WhiteBalanceFineTune',
1624
- Condition => '$$self{Model} =~ /DSLR-A700\b/',
1625
- Format => 'int16s',
1626
- Notes => 'A700 only',
1627
- },
1628
- 0x0c => { #12
1629
- Name => 'ColorTemperatureSetting',
1630
- # matches "0xb021 ColorTemperature" when WB set to "Custom" or "Color Temperature/Color Filter"
1631
- ValueConv => '$val * 100',
1632
- ValueConvInv => '$val / 100',
1633
- PrintConv => '"$val K"',
1634
- PrintConvInv => '$val =~ s/ ?K$//i; $val',
1635
- },
1636
- 0x0d => { #12
1637
- Name => 'ColorCompensationFilterSet',
1638
- Notes => 'negative is green, positive is magenta',
1639
- ValueConv => '$val > 128 ? $val - 256 : $val',
1640
- ValueConvInv => '$val < 0 ? $val + 256 : $val',
1641
- PrintConv => '$val > 0 ? "+$val" : $val',
1642
- PrintConvInv => '$val',
1643
- },
1644
- 0x10 => { #7 (A700)
1645
- Name => 'FocusModeSetting',
1646
- PrintConv => {
1647
- 0 => 'Manual',
1648
- 1 => 'AF-S',
1649
- 2 => 'AF-C',
1650
- 3 => 'AF-A',
1651
- },
1652
- },
1653
- 0x11 => { #JD (A700)
1654
- Name => 'AFAreaMode',
1655
- PrintConv => {
1656
- 0 => 'Wide',
1657
- 1 => 'Local',
1658
- 2 => 'Spot',
1659
- },
1660
- },
1661
- 0x12 => { #7 (A700)
1662
- Name => 'AFPointSelected',
1663
- Format => 'int16u',
1664
- # A200, A300, A350: 9-point centre-cross (ref 12)
1665
- # A700: 11-point centre-dual-cross (ref 12)
1666
- # A850, A900: 9-point centre-dual-cross with 10 assist-points (ref 12)
1667
- PrintConvColumns => 2,
1668
- PrintConv => {
1669
- 1 => 'Center',
1670
- 2 => 'Top',
1671
- 3 => 'Top-Right',
1672
- 4 => 'Right',
1673
- 5 => 'Bottom-Right',
1674
- 6 => 'Bottom',
1675
- 7 => 'Bottom-Left',
1676
- 8 => 'Left',
1677
- 9 => 'Top-Left',
1678
- 10 => 'Far Right', # (presumably A700 only)
1679
- 11 => 'Far Left', # (presumably A700 only)
1680
- },
1681
- },
1682
- 0x15 => { #7
1683
- Name => 'MeteringMode',
1684
- PrintConv => {
1685
- 1 => 'Multi-segment',
1686
- 2 => 'Center-weighted Average',
1687
- 4 => 'Spot',
1688
- },
1689
- },
1690
- 0x16 => {
1691
- Name => 'ISOSetting',
1692
- # 0 indicates 'Auto' (I think)
1693
- ValueConv => '$val ? exp(($val/8-6)*log(2))*100 : $val',
1694
- ValueConvInv => '$val ? 8*(log($val/100)/log(2)+6) : $val',
1695
- PrintConv => '$val ? sprintf("%.0f",$val) : "Auto"',
1696
- PrintConvInv => '$val =~ /auto/i ? 0 : $val',
1697
- },
1698
- 0x18 => { #7
1699
- Name => 'DynamicRangeOptimizerMode',
1700
- PrintConv => {
1701
- 0 => 'Off',
1702
- 1 => 'Standard',
1703
- 2 => 'Advanced Auto',
1704
- 3 => 'Advanced Level',
1705
- },
1706
- },
1707
- 0x19 => { #7
1708
- Name => 'DynamicRangeOptimizerLevel',
1709
- },
1710
- 0x1a => { # style actually used (combination of mode dial + creative style menu)
1711
- Name => 'CreativeStyle',
1712
- PrintConvColumns => 2,
1713
- PrintConv => {
1714
- 1 => 'Standard',
1715
- 2 => 'Vivid',
1716
- 3 => 'Portrait',
1717
- 4 => 'Landscape',
1718
- 5 => 'Sunset',
1719
- 6 => 'Night View/Portrait',
1720
- 8 => 'B&W',
1721
- 9 => 'Adobe RGB', # A700
1722
- 11 => 'Neutral',
1723
- 12 => 'Clear', #7
1724
- 13 => 'Deep', #7
1725
- 14 => 'Light', #7
1726
- 15 => 'Autumn', #7
1727
- 16 => 'Sepia', #7
1728
- },
1729
- },
1730
- 0x1b => { #12
1731
- Name => 'ColorSpace',
1732
- PrintConv => {
1733
- 0 => 'sRGB',
1734
- 1 => 'Adobe RGB', # (A850, selected via Colorspace menu item)
1735
- 5 => 'Adobe RGB (A700)', # (A700, selected via CreativeStyle menu)
1736
- },
1737
- },
1738
- 0x1c => {
1739
- Name => 'Sharpness',
1740
- ValueConv => '$val - 10',
1741
- ValueConvInv => '$val + 10',
1742
- PrintConv => '$val > 0 ? "+$val" : $val',
1743
- PrintConvInv => '$val',
1744
- },
1745
- 0x1d => {
1746
- Name => 'Contrast',
1747
- ValueConv => '$val - 10',
1748
- ValueConvInv => '$val + 10',
1749
- PrintConv => '$val > 0 ? "+$val" : $val',
1750
- PrintConvInv => '$val',
1751
- },
1752
- 0x1e => {
1753
- Name => 'Saturation',
1754
- ValueConv => '$val - 10',
1755
- ValueConvInv => '$val + 10',
1756
- PrintConv => '$val > 0 ? "+$val" : $val',
1757
- PrintConvInv => '$val',
1758
- },
1759
- 0x1f => { #7
1760
- Name => 'ZoneMatchingValue',
1761
- ValueConv => '$val - 10',
1762
- ValueConvInv => '$val + 10',
1763
- PrintConv => '$val > 0 ? "+$val" : $val',
1764
- PrintConvInv => '$val',
1765
- },
1766
- 0x22 => { #7
1767
- Name => 'Brightness',
1768
- ValueConv => '$val - 10',
1769
- ValueConvInv => '$val + 10',
1770
- PrintConv => '$val > 0 ? "+$val" : $val',
1771
- PrintConvInv => '$val',
1772
- },
1773
- 0x23 => {
1774
- Name => 'FlashMode',
1775
- PrintConv => {
1776
- 0 => 'ADI',
1777
- 1 => 'TTL',
1778
- },
1779
- },
1780
- 0x28 => { #7
1781
- Name => 'PrioritySetupShutterRelease',
1782
- PrintConv => {
1783
- 0 => 'AF',
1784
- 1 => 'Release',
1785
- },
1786
- },
1787
- 0x29 => { #7
1788
- Name => 'AFIlluminator',
1789
- PrintConv => {
1790
- 0 => 'Auto',
1791
- 1 => 'Off',
1792
- },
1793
- },
1794
- 0x2a => { #7
1795
- Name => 'AFWithShutter',
1796
- PrintConv => { 0 => 'On', 1 => 'Off' },
1797
- },
1798
- 0x2b => { #7
1799
- Name => 'LongExposureNoiseReduction',
1800
- PrintConv => { 0 => 'Off', 1 => 'On' },
1801
- },
1802
- 0x2c => { #7
1803
- Name => 'HighISONoiseReduction',
1804
- PrintConv => {
1805
- 0 => 'Normal',
1806
- 1 => 'Low',
1807
- 2 => 'High',
1808
- 3 => 'Off',
1809
- },
1810
- },
1811
- 0x2d => { #7
1812
- Name => 'ImageStyle',
1813
- PrintConvColumns => 2,
1814
- PrintConv => {
1815
- 1 => 'Standard',
1816
- 2 => 'Vivid',
1817
- 3 => 'Portrait', #PH
1818
- 4 => 'Landscape', #PH
1819
- 5 => 'Sunset', #PH
1820
- 7 => 'Night View/Portrait', #PH (A200/A350 when CreativeStyle was 6!)
1821
- 8 => 'B&W', #PH (guess)
1822
- 9 => 'Adobe RGB',
1823
- 11 => 'Neutral',
1824
- 129 => 'StyleBox1',
1825
- 130 => 'StyleBox2',
1826
- 131 => 'StyleBox3',
1827
- 132 => 'StyleBox4', #12 (A850)
1828
- 133 => 'StyleBox5', #12 (A850)
1829
- 134 => 'StyleBox6', #12 (A850)
1830
- },
1831
- },
1832
- 0x2e => { #12 (may not apply to A200/A300/A350 -- they don't have the AF/MF button)
1833
- Name => 'FocusModeSwitch',
1834
- PrintConv => {
1835
- 0 => 'AF',
1836
- 1 => 'Manual',
1837
- },
1838
- },
1839
- 0x2f => { #12
1840
- Name => 'ShutterSpeedSetting',
1841
- Notes => 'used in M, S and Program Shift S modes',
1842
- ValueConv => '$val ? 2 ** (6 - $val/8) : 0',
1843
- ValueConvInv => '$val ? int((6 - log($val) / log(2)) * 8 + 0.5) : 0',
1844
- PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"',
1845
- PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)',
1846
- },
1847
- 0x30 => { #12
1848
- Name => 'ApertureSetting',
1849
- Notes => 'used in M, A and Program Shift A modes',
1850
- ValueConv => '2 ** (($val/8 - 1) / 2)',
1851
- ValueConvInv => 'int((log($val) * 2 / log(2) + 1) * 8 + 0.5)',
1852
- PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)',
1853
- PrintConvInv => '$val',
1854
- },
1855
- 0x3c => {
1856
- Name => 'ExposureProgram',
1857
- PrintConv => \%sonyExposureProgram,
1858
- },
1859
- 0x3d => {
1860
- Name => 'ImageStabilizationSetting',
1861
- PrintConv => { 0 => 'Off', 1 => 'On' },
1862
- },
1863
- 0x3f => { # (verified for A330/A380)
1864
- Name => 'Rotation',
1865
- PrintConv => {
1866
- 0 => 'Horizontal (normal)',
1867
- 1 => 'Rotate 90 CW', #(NC)
1868
- 2 => 'Rotate 270 CW',
1869
- },
1870
- },
1871
- 0x4d => { #12
1872
- Name => 'FocusMode', # (focus mode actually used)
1873
- PrintConv => {
1874
- 0 => 'Manual',
1875
- 1 => 'AF-S',
1876
- 2 => 'AF-C',
1877
- 3 => 'AF-A',
1878
- },
1879
- },
1880
- 0x53 => { #12
1881
- Name => 'FocusStatus',
1882
- PrintConv => {
1883
- 0 => 'Not confirmed',
1884
- 4 => 'Not confirmed, Tracking',
1885
- BITMASK => {
1886
- 0 => 'Confirmed',
1887
- 1 => 'Failed',
1888
- 2 => 'Tracking',
1889
- },
1890
- },
1891
- },
1892
- 0x54 => {
1893
- Name => 'SonyImageSize',
1894
- PrintConv => {
1895
- 1 => 'Large',
1896
- 2 => 'Medium',
1897
- 3 => 'Small',
1898
- },
1899
- },
1900
- 0x55 => { #7
1901
- Name => 'AspectRatio',
1902
- PrintConv => {
1903
- 1 => '3:2',
1904
- 2 => '16:9',
1905
- },
1906
- },
1907
- 0x56 => { #PH/7
1908
- Name => 'Quality',
1909
- PrintConv => {
1910
- 0 => 'RAW',
1911
- 2 => 'CRAW',
1912
- 34 => 'RAW + JPEG',
1913
- 35 => 'CRAW + JPEG',
1914
- 16 => 'Extra Fine',
1915
- 32 => 'Fine',
1916
- 48 => 'Standard',
1917
- },
1918
- },
1919
- 0x58 => { #7
1920
- Name => 'ExposureLevelIncrements',
1921
- PrintConv => {
1922
- 33 => '1/3 EV',
1923
- 50 => '1/2 EV',
1924
- },
1925
- },
1926
- 0x9b => { #12
1927
- Name => 'ImageNumber',
1928
- ValueConv => '$val & 0x3fff', #PH (not sure what the upper 2 bits are for)
1929
- ValueConvInv => '$val',
1930
- PrintConv => 'sprintf("%.4d",$val)',
1931
- PrintConvInv => '$val',
1932
- },
1933
- );
1934
-
1935
- # Camera settings (ref PH) (A230, A290, A330, A380 and A390)
1936
- %Image::ExifTool::Sony::CameraSettings2 = (
1937
- %binaryDataAttrs,
1938
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
1939
- FORMAT => 'int16u',
1940
- PRIORITY => 0,
1941
- NOTES => 'Camera settings for the A230, A290, A330, A380 and A390.',
1942
- ### 0x00-0x03: same TagID as CameraSettings
1943
- 0x00 => { #12
1944
- Name => 'ExposureTime',
1945
- ValueConv => '$val ? 2 ** (6 - $val/8) : 0',
1946
- ValueConvInv => '$val ? int((6 - log($val) / log(2)) * 8 + 0.5) : 0',
1947
- PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"',
1948
- PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)',
1949
- },
1950
- 0x01 => { #12
1951
- Name => 'FNumber',
1952
- ValueConv => '2 ** (($val/8 - 1) / 2)',
1953
- ValueConvInv => 'int((log($val) * 2 / log(2) + 1) * 8 + 0.5)',
1954
- PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)',
1955
- PrintConvInv => '$val',
1956
- },
1957
- ### 0x04-0x11: subtract 1 from CameraSettings TagID
1958
- # 0x05 - maybe WhiteBalanceFineTune
1959
- 0x0b => { #12
1960
- Name => 'ColorTemperatureSetting',
1961
- # matches "0xb021 ColorTemperature" when WB set to "Custom" or "Color Temperature/Color Filter"
1962
- ValueConv => '$val * 100',
1963
- ValueConvInv => '$val / 100',
1964
- PrintConv => '"$val K"',
1965
- PrintConvInv => '$val =~ s/ ?K$//i; $val',
1966
- },
1967
- 0x0c => { #12
1968
- Name => 'ColorCompensationFilterSet',
1969
- Notes => 'negative is green, positive is magenta',
1970
- ValueConv => '$val > 128 ? $val - 256 : $val',
1971
- ValueConvInv => '$val < 0 ? $val + 256 : $val',
1972
- PrintConv => '$val > 0 ? "+$val" : $val',
1973
- PrintConvInv => '$val',
1974
- },
1975
- 0x0f => { #12/PH (educated guess)
1976
- Name => 'FocusModeSetting',
1977
- PrintConv => {
1978
- 0 => 'Manual',
1979
- 1 => 'AF-S',
1980
- 2 => 'AF-C',
1981
- 3 => 'AF-A',
1982
- # seen 5 for A380 (FocusMode was Manual and FocusStatus was Confirmed)
1983
- },
1984
- },
1985
- 0x10 => { #12/PH (educated guess)
1986
- Name => 'AFAreaMode',
1987
- PrintConv => {
1988
- 0 => 'Wide',
1989
- 1 => 'Local',
1990
- 2 => 'Spot',
1991
- },
1992
- },
1993
- 0x11 => { #12/PH (educated guess)
1994
- Name => 'AFPointSelected',
1995
- Format => 'int16u',
1996
- # (all of these cameras have a 9-point centre-cross AF system, ref 12)
1997
- PrintConvColumns => 2,
1998
- PrintConv => {
1999
- 1 => 'Center',
2000
- 2 => 'Top',
2001
- 3 => 'Top-Right',
2002
- 4 => 'Right',
2003
- 5 => 'Bottom-Right',
2004
- 6 => 'Bottom',
2005
- 7 => 'Bottom-Left',
2006
- 8 => 'Left',
2007
- 9 => 'Top-Left',
2008
- },
2009
- },
2010
- ### 0x12-0x18: subtract 2 from CameraSettings TagID
2011
- 0x13 => {
2012
- Name => 'MeteringMode',
2013
- PrintConv => {
2014
- 1 => 'Multi-segment',
2015
- 2 => 'Center-weighted Average',
2016
- 4 => 'Spot',
2017
- },
2018
- },
2019
- 0x14 => { # A330/A380
2020
- Name => 'ISOSetting',
2021
- # 0 indicates 'Auto' (?)
2022
- ValueConv => '$val ? exp(($val/8-6)*log(2))*100 : $val',
2023
- ValueConvInv => '$val ? 8*(log($val/100)/log(2)+6) : $val',
2024
- PrintConv => '$val ? sprintf("%.0f",$val) : "Auto"',
2025
- PrintConvInv => '$val =~ /auto/i ? 0 : $val',
2026
- },
2027
- 0x16 => {
2028
- Name => 'DynamicRangeOptimizerMode',
2029
- PrintConv => {
2030
- 0 => 'Off',
2031
- 1 => 'Standard',
2032
- 2 => 'Advanced Auto',
2033
- 3 => 'Advanced Level',
2034
- },
2035
- },
2036
- 0x17 => 'DynamicRangeOptimizerLevel',
2037
- 0x18 => { # A380
2038
- Name => 'CreativeStyle',
2039
- PrintConvColumns => 2,
2040
- PrintConv => {
2041
- 1 => 'Standard',
2042
- 2 => 'Vivid',
2043
- 3 => 'Portrait',
2044
- 4 => 'Landscape',
2045
- 5 => 'Sunset',
2046
- 6 => 'Night View/Portrait',
2047
- 8 => 'B&W',
2048
- # (these models don't have Neutral - PH)
2049
- },
2050
- },
2051
- ### 0x19-0x1b: subtract 3 from CameraSettings TagID
2052
- 0x19 => {
2053
- Name => 'Sharpness',
2054
- ValueConv => '$val - 10',
2055
- ValueConvInv => '$val + 10',
2056
- PrintConv => '$val > 0 ? "+$val" : $val',
2057
- PrintConvInv => '$val',
2058
- },
2059
- 0x1a => {
2060
- Name => 'Contrast',
2061
- ValueConv => '$val - 10',
2062
- ValueConvInv => '$val + 10',
2063
- PrintConv => '$val > 0 ? "+$val" : $val',
2064
- PrintConvInv => '$val',
2065
- },
2066
- 0x1b => {
2067
- Name => 'Saturation',
2068
- ValueConv => '$val - 10',
2069
- ValueConvInv => '$val + 10',
2070
- PrintConv => '$val > 0 ? "+$val" : $val',
2071
- PrintConvInv => '$val',
2072
- },
2073
- ### 0x1c-0x24: subtract 4 from CameraSettings TagID (not sure about 0x1c)
2074
- 0x1f => { #PH (educated guess)
2075
- Name => 'FlashMode',
2076
- PrintConv => {
2077
- 0 => 'ADI',
2078
- 1 => 'TTL',
2079
- },
2080
- },
2081
- ### 0x25-0x27: subtract 6 from CameraSettings TagID
2082
- 0x25 => { #PH
2083
- Name => 'LongExposureNoiseReduction',
2084
- PrintConv => { 0 => 'Off', 1 => 'On' },
2085
- },
2086
- 0x26 => { #PH
2087
- Name => 'HighISONoiseReduction',
2088
- # (Note: the order is different from that in CameraSettings)
2089
- PrintConv => {
2090
- 0 => 'Off',
2091
- 1 => 'Low',
2092
- 2 => 'Normal',
2093
- 3 => 'High',
2094
- },
2095
- },
2096
- 0x27 => { #PH
2097
- Name => 'ImageStyle',
2098
- PrintConvColumns => 2,
2099
- PrintConv => {
2100
- 1 => 'Standard',
2101
- 2 => 'Vivid',
2102
- 3 => 'Portrait', #PH
2103
- 4 => 'Landscape', #PH
2104
- 5 => 'Sunset', #PH
2105
- 7 => 'Night View/Portrait', #PH (A200 when CreativeStyle was 6!)
2106
- 8 => 'B&W', #PH (A380)
2107
- # (these models don't have Neutral - PH)
2108
- },
2109
- },
2110
- ### 0x28-0x3b: subtract 7 from CameraSettings TagID
2111
- 0x28 => { #PH
2112
- Name => 'ShutterSpeedSetting',
2113
- Notes => 'used in M, S and Program Shift S modes',
2114
- ValueConv => '$val ? 2 ** (6 - $val/8) : 0',
2115
- ValueConvInv => '$val ? int((6 - log($val) / log(2)) * 8 + 0.5) : 0',
2116
- PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"',
2117
- PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)',
2118
- },
2119
- 0x29 => { #PH
2120
- Name => 'ApertureSetting',
2121
- Notes => 'used in M, A and Program Shift A modes',
2122
- ValueConv => '2 ** (($val/8 - 1) / 2)',
2123
- ValueConvInv => 'int((log($val) * 2 / log(2) + 1) * 8 + 0.5)',
2124
- PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)',
2125
- PrintConvInv => '$val',
2126
- },
2127
- ### 0x3c-0x59: same TagID as CameraSettings
2128
- 0x3c => {
2129
- Name => 'ExposureProgram',
2130
- PrintConv => \%sonyExposureProgram,
2131
- },
2132
- 0x3d => { # (copied from CameraSettings, ref 12)
2133
- Name => 'ImageStabilizationSetting',
2134
- PrintConv => { 0 => 'Off', 1 => 'On' },
2135
- },
2136
- 0x3f => { # (verified for A330/A380)
2137
- Name => 'Rotation',
2138
- PrintConv => {
2139
- 0 => 'Horizontal (normal)',
2140
- 1 => 'Rotate 90 CW', #(NC)
2141
- 2 => 'Rotate 270 CW',
2142
- },
2143
- },
2144
- 0x4d => { #12
2145
- Name => 'FocusMode', # (focus mode actually used)
2146
- PrintConv => {
2147
- 0 => 'Manual',
2148
- 1 => 'AF-S',
2149
- 2 => 'AF-C',
2150
- 3 => 'AF-A',
2151
- },
2152
- },
2153
- 0x53 => { #12 (copied from CameraSettings, but all bits may not be applicable for these models)
2154
- Name => 'FocusStatus',
2155
- PrintConv => {
2156
- 0 => 'Not confirmed',
2157
- 4 => 'Not confirmed, Tracking',
2158
- BITMASK => {
2159
- 0 => 'Confirmed',
2160
- 1 => 'Failed',
2161
- 2 => 'Tracking',
2162
- },
2163
- },
2164
- },
2165
- 0x54 => {
2166
- Name => 'SonyImageSize',
2167
- PrintConv => {
2168
- 1 => 'Large',
2169
- 2 => 'Medium',
2170
- 3 => 'Small',
2171
- },
2172
- },
2173
- 0x55 => { # (copied from CameraSettings, ref 12)
2174
- Name => 'AspectRatio',
2175
- PrintConv => {
2176
- 1 => '3:2',
2177
- 2 => '16:9',
2178
- },
2179
- },
2180
- 0x56 => { # (copied from CameraSettings, ref 12)
2181
- Name => 'Quality',
2182
- PrintConv => {
2183
- 0 => 'RAW',
2184
- 2 => 'CRAW',
2185
- 34 => 'RAW + JPEG',
2186
- 35 => 'CRAW + JPEG',
2187
- 16 => 'Extra Fine',
2188
- 32 => 'Fine',
2189
- 48 => 'Standard',
2190
- },
2191
- },
2192
- 0x58 => { # (copied from CameraSettings, ref 12)
2193
- Name => 'ExposureLevelIncrements',
2194
- PrintConv => {
2195
- 33 => '1/3 EV',
2196
- 50 => '1/2 EV',
2197
- },
2198
- },
2199
- ### 0x5a onwards: subtract 1 from CameraSettings TagID
2200
- 0x7e => { #12
2201
- Name => 'DriveMode',
2202
- Mask => 0xff, # (not sure what upper byte is for)
2203
- PrintConv => { # (values confirmed for specified models - PH)
2204
- 0x01 => 'Single Frame', # (A230,A330,A380)
2205
- 0x02 => 'Continuous High', #PH (A230,A330)
2206
- 0x04 => 'Self-timer 10 sec', # (A230)
2207
- 0x05 => 'Self-timer 2 sec, Mirror Lock-up', # (A230,A290,A330,A380,390)
2208
- 0x07 => 'Continuous Bracketing', # (A230 val=0x1107, A330 val=0x1307 [0.7 EV])
2209
- 0x0a => 'Remote Commander', # (A230)
2210
- 0x0b => 'Continuous Self-timer', # (A230 val=0x800b [5 shots], A330 val=0x400b [3 shots])
2211
- },
2212
- },
2213
- 0x83 => { #PH
2214
- Name => 'ColorSpace',
2215
- PrintConv => {
2216
- 5 => 'Adobe RGB',
2217
- 6 => 'sRGB',
2218
- },
2219
- },
2220
- );
2221
-
2222
- # more Camera settings (ref PH)
2223
- # This was decoded for the A55, but it seems to apply to the following models:
2224
- # A33, A35, A55, A450, A500, A550, A560, A580, NEX-3, NEX-5, NEX-C3 and NEX-VG10E
2225
- %Image::ExifTool::Sony::CameraSettings3 = (
2226
- %binaryDataAttrs,
2227
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
2228
- FORMAT => 'int8u',
2229
- PRIORITY => 0,
2230
- NOTES => q{
2231
- Camera settings for models such as the A33, A35, A55, A450, A500, A550,
2232
- A560, A580, NEX-3, NEX-5, NEX-C3 and NEX-VG10E.
2233
- },
2234
- 0x00 => { #12
2235
- Name => 'ShutterSpeedSetting',
2236
- Notes => 'used only in M and S exposure modes',
2237
- ValueConv => '$val ? 2 ** (6 - $val/8) : 0',
2238
- ValueConvInv => '$val ? int((6 - log($val) / log(2)) * 8 + 0.5) : 0',
2239
- PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"',
2240
- PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)',
2241
- },
2242
- 0x01 => { #12
2243
- Name => 'ApertureSetting',
2244
- Notes => 'used only in M and A exposure modes',
2245
- ValueConv => '2 ** (($val/8 - 1) / 2)',
2246
- ValueConvInv => 'int((log($val) * 2 / log(2) + 1) * 8 + 0.5)',
2247
- PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)',
2248
- PrintConvInv => '$val',
2249
- },
2250
- 0x02 => {
2251
- Name => 'ISOSetting',
2252
- ValueConv => '($val and $val < 254) ? exp(($val/8-6)*log(2))*100 : $val',
2253
- ValueConvInv => '($val and $val != 254) ? 8*(log($val/100)/log(2)+6) : $val',
2254
- PrintConv => {
2255
- OTHER => sub {
2256
- my ($val, $inv) = @_;
2257
- return int($val + 0.5) unless $inv;
2258
- return Image::ExifTool::IsFloat($val) ? $val : undef;
2259
- },
2260
- 0 => 'Auto',
2261
- 254 => 'n/a', # get this for multi-shot noise reduction
2262
- },
2263
- },
2264
- 0x03 => { #12
2265
- Name => 'ExposureCompensationSet',
2266
- ValueConv => '($val - 128) / 24', #PH
2267
- ValueConvInv => 'int($val * 24 + 128.5)',
2268
- PrintConv => '$val ? sprintf("%+.1f",$val) : $val',
2269
- PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
2270
- },
2271
- 0x04 => { #12
2272
- Name => 'DriveModeSetting',
2273
- # Same drivemode info is repeated in 0x0034, but with at least the following exceptions:
2274
- # - 0x0034 not for A550 ? - seen "0"
2275
- # - hand-held night (0x05=56): 0x0004=0x10 and 0x0034=0xd3
2276
- # - 3D sweep panorama (0x05=57): 0x0004=0x10 and 0x0034=0xd6
2277
- # - sweep panorama (0x05=80): 0x0004=0x10 and 0x0034=0xd5
2278
- # preliminary conclusion: 0x0004 is Drivemode as pre-set, but may be overruled by Scene/Panorama mode selections
2279
- # 0x0034 is Divemode as actually used
2280
- PrintHex => 1,
2281
- PrintConv => {
2282
- 0x10 => 'Single Frame',
2283
- 0x21 => 'Continuous High', # also automatically selected for Scene mode Sports-action (0x05=52)
2284
- 0x22 => 'Continuous Low',
2285
- 0x30 => 'Speed Priority Continuous',
2286
- 0x51 => 'Self-timer 10 sec',
2287
- 0x52 => 'Self-timer 2 sec, Mirror Lock-up',
2288
- 0x71 => 'Continuous Bracketing 0.3 EV',
2289
- 0x75 => 'Continuous Bracketing 0.7 EV',
2290
- 0x91 => 'White Balance Bracketing Low',
2291
- 0x92 => 'White Balance Bracketing High',
2292
- 0xc0 => 'Remote Commander',
2293
- },
2294
- },
2295
- 0x05 => { #12
2296
- Name => 'ExposureProgram',
2297
- # Camera exposure program/mode as selected with the Mode dial.
2298
- # For SCN a further selection is done via the menu
2299
- # Matches OK with 0xb023
2300
- PrintConv => \%sonyExposureProgram2,
2301
- },
2302
- 0x06 => { #12
2303
- Name => 'FocusModeSetting',
2304
- PrintConv => {
2305
- 17 => 'AF-S',
2306
- 18 => 'AF-C',
2307
- 19 => 'AF-A',
2308
- 32 => 'Manual',
2309
- },
2310
- },
2311
- 0x07 => { #12
2312
- Name => 'MeteringMode',
2313
- PrintConv => {
2314
- 1 => 'Multi-segment',
2315
- 2 => 'Center-weighted average',
2316
- 3 => 'Spot',
2317
- },
2318
- },
2319
- 0x09 => { #12
2320
- Name => 'SonyImageSize',
2321
- PrintConv => { # values confirmed as noted for the A580 and A33
2322
- 21 => 'Large (3:2)', # A580: 16M (4912x3264), A33: 14M (4592x3056)
2323
- 22 => 'Medium (3:2)', # A580: 8.4M (3568x2368), A33: 7.4M (3344x2224)
2324
- 23 => 'Small (3:2)', # A580: 4.0M (2448x1624), A33: 3.5M (2288x1520)
2325
- 25 => 'Large (16:9)', # A580: 14M (4912x2760)
2326
- 26 => 'Medium (16:9)', # A580: 7.1M (3568x2000)
2327
- 27 => 'Small (16:9)', # A580: 3.4M (2448x1376)
2328
- },
2329
- },
2330
- 0x0a => { #12
2331
- Name => 'AspectRatio',
2332
- # normally 4 for A580 3:2 ratio images
2333
- # seen 8 when selecting 16:9 via menu, and when selecting Panorama mode
2334
- PrintConv => {
2335
- 4 => '3:2',
2336
- 8 => '16:9',
2337
- },
2338
- },
2339
- 0x0b => { #12
2340
- Name => 'Quality',
2341
- PrintConv => {
2342
- 2 => 'RAW',
2343
- 4 => 'RAW + JPEG',
2344
- 6 => 'Fine',
2345
- 7 => 'Standard',
2346
- },
2347
- },
2348
- 0x0c => {
2349
- Name => 'DynamicRangeOptimizerSetting',
2350
- PrintConv => {
2351
- 1 => 'Off',
2352
- 16 => 'On (Auto)',
2353
- 17 => 'On (Manual)',
2354
- },
2355
- },
2356
- 0x0d => 'DynamicRangeOptimizerLevel',
2357
- 0x0e => { #12
2358
- Name => 'ColorSpace',
2359
- PrintConv => {
2360
- 1 => 'sRGB',
2361
- 2 => 'Adobe RGB',
2362
- },
2363
- },
2364
- 0x0f => { #12
2365
- Name => 'CreativeStyleSetting',
2366
- PrintConvColumns => 2,
2367
- PrintConv => {
2368
- 16 => 'Standard',
2369
- 32 => 'Vivid',
2370
- 64 => 'Portrait',
2371
- 80 => 'Landscape',
2372
- 96 => 'B&W',
2373
- 160 => 'Sunset',
2374
- },
2375
- },
2376
- 0x10 => { #12 (seen values 253, 254, 255, 0, 1, 2, 3)
2377
- Name => 'ContrastSetting',
2378
- Format => 'int8s',
2379
- PrintConv => '$val > 0 ? "+$val" : $val',
2380
- PrintConvInv => '$val',
2381
- },
2382
- 0x11 => { #12
2383
- Name => 'SaturationSetting',
2384
- Format => 'int8s',
2385
- PrintConv => '$val > 0 ? "+$val" : $val',
2386
- PrintConvInv => '$val',
2387
- },
2388
- 0x12 => { #12
2389
- Name => 'SharpnessSetting',
2390
- Format => 'int8s',
2391
- PrintConv => '$val > 0 ? "+$val" : $val',
2392
- PrintConvInv => '$val',
2393
- },
2394
- 0x16 => { #12
2395
- Name => 'WhiteBalanceSetting',
2396
- # many guessed, based on "logical system" as observed for Daylight and Shade and steps of 16 between the modes
2397
- PrintHex => 1,
2398
- PrintConvColumns => 2,
2399
- PrintConv => \%whiteBalanceSetting,
2400
- SeparateTable => 1,
2401
- },
2402
- 0x17 => { #12
2403
- Name => 'ColorTemperatureSetting',
2404
- # matches "0xb021 ColorTemperature" when WB set to "Custom" or "Color Temperature/Color Filter"
2405
- ValueConv => '$val * 100',
2406
- ValueConvInv => '$val / 100',
2407
- PrintConv => '"$val K"',
2408
- PrintConvInv => '$val =~ s/ ?K$//i; $val',
2409
- },
2410
- 0x18 => { #12
2411
- Name => 'ColorCompensationFilterSet',
2412
- # seen 0, 1-9 and 245-255, corresponding to 0, M1-M9 and G9-G1 on camera display
2413
- # matches "0xb022 ColorCompensationFilter" when WB set to "Custom" or "Color Temperature/Color Filter"
2414
- Format => 'int8s',
2415
- Notes => 'negative is green, positive is magenta',
2416
- PrintConv => '$val > 0 ? "+$val" : $val',
2417
- PrintConvInv => '$val',
2418
- },
2419
- # 0x19 - 0x1e are probably related to Custom WB measurements performed by the camera.
2420
- # The values change only each time when measuring and setting a new Custom WB.
2421
- # (0x19,0x1a) and (0x1d,0x1e) are same as MoreSettings (0x1a,0x1b) and (0x1c,0x1d)
2422
- # 0x19 - 0 if never Custom WB set, seen 1, 2 and 4 when set, 1 and 4 with "Custom WB error" (ref 12)
2423
- # 0x1a - 0 if never Custom WB set, variable when set - some measured value ?? (ref 12)
2424
- # 0x1b - 0 if never Custom WB set, 1 when set (ref 12)
2425
- # 0x1c - always 0 (ref 12)
2426
- # 0x1d - 0 if never Custom WB set, 1 or 2 when set (ref 12)
2427
- # 0x1e - 0 if never Custom WB set, variable when set - some measured value ?? (ref 12)
2428
- # 0x1f - always 2 (ref 12)
2429
- 0x20 => { #12
2430
- Name => 'FlashMode',
2431
- PrintConvColumns => 2,
2432
- PrintConv => {
2433
- 1 => 'Flash Off',
2434
- 16 => 'Autoflash',
2435
- 17 => 'Fill-flash',
2436
- 18 => 'Slow Sync',
2437
- 19 => 'Rear Sync',
2438
- 20 => 'Wireless',
2439
- },
2440
- },
2441
- 0x21 => { #12
2442
- Name => 'FlashControl',
2443
- PrintConv => {
2444
- 1 => 'ADI Flash',
2445
- 2 => 'Pre-flash TTL',
2446
- },
2447
- },
2448
- 0x23 => { #12
2449
- Name => 'FlashExposureCompSet',
2450
- Description => 'Flash Exposure Comp. Setting',
2451
- # (as pre-selected by the user, not zero if flash didn't fire)
2452
- ValueConv => '($val - 128) / 24', #PH
2453
- ValueConvInv => 'int($val * 24 + 128.5)',
2454
- PrintConv => '$val ? sprintf("%+.1f",$val) : $val',
2455
- PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
2456
- },
2457
- 0x24 => {
2458
- Name => 'AFAreaMode',
2459
- PrintConv => {
2460
- 1 => 'Wide',
2461
- 2 => 'Spot',
2462
- 3 => 'Local',
2463
- 4 => 'Flexible', #12
2464
- # (Flexible Spot is a grid of 17x11 points for the NEX-5)
2465
- },
2466
- },
2467
- 0x25 => { #12
2468
- Name => 'LongExposureNoiseReduction',
2469
- PrintConv => {
2470
- 1 => 'Off',
2471
- 16 => 'On', # (unused or dark subject)
2472
- },
2473
- },
2474
- 0x26 => { #12
2475
- Name => 'HighISONoiseReduction',
2476
- PrintConv => {
2477
- 16 => 'Low',
2478
- 19 => 'Auto',
2479
- },
2480
- },
2481
- 0x27 => { #12
2482
- Name => 'SmileShutterMode',
2483
- PrintConv => {
2484
- 17 => 'Slight Smile',
2485
- 18 => 'Normal Smile',
2486
- 19 => 'Big Smile',
2487
- },
2488
- },
2489
- 0x28 => { #12
2490
- Name => 'RedEyeReduction',
2491
- PrintConv => {
2492
- 1 => 'Off',
2493
- 16 => 'On',
2494
- },
2495
- },
2496
- 0x2d => {
2497
- Name => 'HDRSetting',
2498
- PrintConv => {
2499
- 1 => 'Off',
2500
- 16 => 'On (Auto)',
2501
- 17 => 'On (Manual)',
2502
- },
2503
- },
2504
- 0x2e => {
2505
- Name => 'HDRLevel',
2506
- PrintConvColumns => 2,
2507
- PrintConv => {
2508
- 33 => '1 EV',
2509
- 35 => '2 EV',
2510
- 37 => '3 EV',
2511
- 39 => '4 EV',
2512
- 40 => '5 EV',
2513
- 41 => '6 EV',
2514
- },
2515
- },
2516
- 0x2f => { #12 (not sure what is difference with 0x85)
2517
- Name => 'ViewingMode',
2518
- PrintConv => {
2519
- 16 => 'ViewFinder',
2520
- 33 => 'Focus Check Live View',
2521
- 34 => 'Quick AF Live View',
2522
- },
2523
- },
2524
- 0x30 => { #12
2525
- Name => 'FaceDetection',
2526
- PrintConv => {
2527
- 1 => 'Off',
2528
- 16 => 'On',
2529
- },
2530
- },
2531
- 0x31 => { #12
2532
- Name => 'SmileShutter',
2533
- PrintConv => {
2534
- 1 => 'Off',
2535
- 16 => 'On',
2536
- },
2537
- },
2538
- 0x32 => { #12
2539
- Name => 'SweepPanoramaSize',
2540
- Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/',
2541
- PrintConv => {
2542
- 1 => 'Standard',
2543
- 2 => 'Wide',
2544
- },
2545
- },
2546
- 0x33 => { #12
2547
- Name => 'SweepPanoramaDirection',
2548
- Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/',
2549
- PrintConv => {
2550
- 1 => 'Right',
2551
- 2 => 'Left',
2552
- 3 => 'Up',
2553
- 4 => 'Down',
2554
- },
2555
- },
2556
- 0x34 => { #12
2557
- Name => 'DriveMode', # (drive mode actually used)
2558
- Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/',
2559
- PrintHex => 1,
2560
- PrintConv => {
2561
- 0x10 => 'Single Frame',
2562
- 0x21 => 'Continuous High', # also automatically selected for Scene mode Sports-action (0x05=52)
2563
- 0x22 => 'Continuous Low',
2564
- 0x30 => 'Speed Priority Continuous',
2565
- 0x51 => 'Self-timer 10 sec',
2566
- 0x52 => 'Self-timer 2 sec, Mirror Lock-up',
2567
- 0x71 => 'Continuous Bracketing 0.3 EV',
2568
- 0x75 => 'Continuous Bracketing 0.7 EV',
2569
- 0x91 => 'White Balance Bracketing Low',
2570
- 0x92 => 'White Balance Bracketing High',
2571
- 0xc0 => 'Remote Commander',
2572
- 0xd1 => 'Continuous - HDR',
2573
- 0xd2 => 'Continuous - Multi Frame NR',
2574
- 0xd3 => 'Continuous - Handheld Night Shot', # (also called "Hand-held Twilight")
2575
- 0xd4 => 'Continuous - Anti Motion Blur', #PH (NEX-5)
2576
- 0xd5 => 'Continuous - Sweep Panorama',
2577
- 0xd6 => 'Continuous - 3D Sweep Panorama',
2578
- },
2579
- },
2580
- 0x35 => {
2581
- Name => 'MultiFrameNoiseReduction',
2582
- Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/',
2583
- PrintConv => {
2584
- 0 => 'n/a', # seen for A450/A500/A550
2585
- 1 => 'Off',
2586
- 16 => 'On',
2587
- 255 => 'None', # seen for NEX-3/5/C3
2588
- },
2589
- },
2590
- 0x36 => { #12 (not 100% sure about this one)
2591
- Name => 'LiveViewAFSetting',
2592
- Condition => '$$self{Model} !~ /^(NEX-|DSLR-(A450|A500|A550)$)/',
2593
- PrintConv => {
2594
- 0 => 'n/a',
2595
- 1 => 'Phase-detect AF',
2596
- 2 => 'Contrast AF',
2597
- # Contrast AF is only available with SSM/SAM lenses and in Focus Check LV,
2598
- # NOT in Quick AF LV, and is automatically set when mounting SSM/SAM lens
2599
- # - changes into Phase-AF when switching to Quick AF LV.
2600
- },
2601
- },
2602
- 0x38 => { #12
2603
- Name => '3DPanoramaSize',
2604
- Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/',
2605
- PrintConv => {
2606
- 0 => 'n/a',
2607
- 1 => 'Standard',
2608
- 2 => 'Wide',
2609
- 3 => '16:9',
2610
- },
2611
- },
2612
- 0x84 => { #12 (not 100% sure about this one)
2613
- Name => 'LiveViewMetering',
2614
- Condition => '$$self{Model} !~ /^(NEX-|DSLR-(A450|A500|A550)$)/',
2615
- PrintConv => {
2616
- 0 => 'n/a',
2617
- 16 => '40 Segment', # DSLR with LiveView/OVF switch in OVF position
2618
- 32 => '1200-zone Evaluative', # SLT, or DSLR with LiveView/OVF switch in LiveView position
2619
- },
2620
- },
2621
- 0x85 => { #12 (not sure what is difference with 0x2f)
2622
- Name => 'ViewingMode2',
2623
- Condition => '$$self{Model} !~ /^(NEX-|DSLR-(A450|A500|A550)$)/',
2624
- PrintConv => {
2625
- 0 => 'n/a',
2626
- 16 => 'Viewfinder',
2627
- 33 => 'Focus Check Live View',
2628
- 34 => 'Quick AF Live View',
2629
- },
2630
- },
2631
- 0x87 => { #12
2632
- Name => 'FlashAction',
2633
- Condition => '$$self{Model} !~ /^(NEX-|DSLR-(A450|A500|A550)$)/', # seen 0 for A550, so better exclude ?
2634
- PrintConv => {
2635
- 1 => 'Did not fire',
2636
- 2 => 'Fired',
2637
- },
2638
- },
2639
- 0x8b => { #12
2640
- Name => 'LiveViewFocusMode',
2641
- Condition => '$$self{Model} !~ /^(NEX-|DSLR-(A450|A500|A550)$)/',
2642
- PrintConv => {
2643
- 0 => 'n/a',
2644
- 1 => 'AF',
2645
- 16 => 'Manual',
2646
- },
2647
- },
2648
- 0x10c => { #12
2649
- Name => 'SequenceNumber',
2650
- Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', # seen 18 for A550, so better exclude ?
2651
- # normally 0; seen 1,2,3 for bracketing, 6 for Handheld Night Shot, 3 for HDR, 6 for MFNR
2652
- PrintConv => {
2653
- 0 => 'Single',
2654
- 255 => 'n/a',
2655
- OTHER => sub { shift }, # pass all other numbers straight through
2656
- },
2657
- },
2658
- 0x114 => { #12
2659
- Name => 'ImageNumber',
2660
- Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', #PH
2661
- Format => 'int16u',
2662
- Mask => 0x3fff, #PH (not sure what the upper 2 bits are for)
2663
- ValueConvInv => '$val',
2664
- PrintConv => 'sprintf("%.4d",$val)',
2665
- PrintConvInv => '$val',
2666
- },
2667
- );
2668
-
2669
- # Camera settings for other models
2670
- %Image::ExifTool::Sony::CameraSettingsUnknown = (
2671
- %binaryDataAttrs,
2672
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
2673
- FORMAT => 'int16u',
2674
- );
2675
-
2676
- # shot information (ref PH)
2677
- %Image::ExifTool::Sony::ShotInfo = (
2678
- %binaryDataAttrs,
2679
- GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
2680
- DATAMEMBER => [ 0x02, 0x30, 0x32 ],
2681
- IS_SUBDIR => [ 0x48, 0x5e ],
2682
- # 0x00 - byte order 'II'
2683
- 0x02 => {
2684
- Name => 'FaceInfoOffset',
2685
- Format => 'int16u',
2686
- DataMember => 'FaceInfoOffset',
2687
- Writable => 0,
2688
- RawConv => '$$self{FaceInfoOffset} = $val',
2689
- },
2690
- 0x06 => {
2691
- Name => 'SonyDateTime',
2692
- Format => 'string[20]',
2693
- Groups => { 2 => 'Time' },
2694
- Shift => 'Time',
2695
- PrintConv => '$self->ConvertDateTime($val)',
2696
- PrintConvInv => '$self->InverseDateTime($val,0)',
2697
- },
2698
- 0x1a => { #12
2699
- Name => 'SonyImageHeight',
2700
- Format => 'int16u',
2701
- },
2702
- 0x1c => { #12
2703
- Name => 'SonyImageWidth',
2704
- Format => 'int16u',
2705
- },
2706
- 0x30 => { #Jeffrey Friedl
2707
- Name => 'FacesDetected',
2708
- DataMember => 'FacesDetected',
2709
- Format => 'int16u',
2710
- RawConv => '$$self{FacesDetected} = $val',
2711
- },
2712
- 0x32 => {
2713
- Name => 'FaceInfoLength', # length of a single FaceInfo entry
2714
- DataMember => 'FaceInfoLength',
2715
- Format => 'int16u',
2716
- Writable => 0,
2717
- RawConv => '$$self{FaceInfoLength} = $val',
2718
- },
2719
- #0x34 => {
2720
- # # values: 'DC5303320222000', 'DC6303320222000' or 'DC7303320222000'
2721
- # Name => 'UnknownString',
2722
- # Format => 'string[16]',
2723
- # Unknown => 1,
2724
- #},
2725
- 0x48 => { # (most models: DC5303320222000 and DC6303320222000)
2726
- Name => 'FaceInfo1',
2727
- Condition => q{
2728
- $$self{FacesDetected} and
2729
- $$self{FaceInfoOffset} == 0x48 and
2730
- $$self{FaceInfoLength} == 0x20
2731
- },
2732
- SubDirectory => { TagTable => 'Image::ExifTool::Sony::FaceInfo1' },
2733
- },
2734
- 0x5e => { # (HX7V: DC7303320222000)
2735
- Name => 'FaceInfo2',
2736
- Condition => q{
2737
- $$self{FacesDetected} and
2738
- $$self{FaceInfoOffset} == 0x5e and
2739
- $$self{FaceInfoLength} == 0x25
2740
- },
2741
- SubDirectory => { TagTable => 'Image::ExifTool::Sony::FaceInfo2' },
2742
- },
2743
- );
2744
-
2745
- %Image::ExifTool::Sony::FaceInfo1 = (
2746
- %binaryDataAttrs,
2747
- GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
2748
- 0x00 => {
2749
- Name => 'Face1Position',
2750
- Format => 'int16u[4]',
2751
- Notes => q{
2752
- top, left, height and width of detected face. Coordinates are relative to
2753
- the full-sized unrotated image, with increasing Y downwards
2754
- },
2755
- RawConv => '$$self{FacesDetected} < 1 ? undef : $val',
2756
- },
2757
- 0x20 => {
2758
- Name => 'Face2Position',
2759
- Format => 'int16u[4]',
2760
- RawConv => '$$self{FacesDetected} < 2 ? undef : $val',
2761
- },
2762
- 0x40 => {
2763
- Name => 'Face3Position',
2764
- Format => 'int16u[4]',
2765
- RawConv => '$$self{FacesDetected} < 3 ? undef : $val',
2766
- },
2767
- 0x60 => {
2768
- Name => 'Face4Position',
2769
- Format => 'int16u[4]',
2770
- RawConv => '$$self{FacesDetected} < 4 ? undef : $val',
2771
- },
2772
- 0x80 => {
2773
- Name => 'Face5Position',
2774
- Format => 'int16u[4]',
2775
- RawConv => '$$self{FacesDetected} < 5 ? undef : $val',
2776
- },
2777
- 0xa0 => {
2778
- Name => 'Face6Position',
2779
- Format => 'int16u[4]',
2780
- RawConv => '$$self{FacesDetected} < 6 ? undef : $val',
2781
- },
2782
- 0xc0 => {
2783
- Name => 'Face7Position',
2784
- Format => 'int16u[4]',
2785
- RawConv => '$$self{FacesDetected} < 7 ? undef : $val',
2786
- },
2787
- 0xe0 => {
2788
- Name => 'Face8Position',
2789
- Format => 'int16u[4]',
2790
- RawConv => '$$self{FacesDetected} < 8 ? undef : $val',
2791
- },
2792
- );
2793
-
2794
- %Image::ExifTool::Sony::FaceInfo2 = (
2795
- %binaryDataAttrs,
2796
- GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
2797
- 0x00 => {
2798
- Name => 'Face1Position',
2799
- Format => 'int16u[4]',
2800
- Notes => q{
2801
- top, left, height and width of detected face. Coordinates are relative to
2802
- the full-sized unrotated image, with increasing Y downwards
2803
- },
2804
- RawConv => '$$self{FacesDetected} < 1 ? undef : $val',
2805
- },
2806
- 0x25 => {
2807
- Name => 'Face2Position',
2808
- Format => 'int16u[4]',
2809
- RawConv => '$$self{FacesDetected} < 2 ? undef : $val',
2810
- },
2811
- 0x4a => {
2812
- Name => 'Face3Position',
2813
- Format => 'int16u[4]',
2814
- RawConv => '$$self{FacesDetected} < 3 ? undef : $val',
2815
- },
2816
- 0x6f => {
2817
- Name => 'Face4Position',
2818
- Format => 'int16u[4]',
2819
- RawConv => '$$self{FacesDetected} < 4 ? undef : $val',
2820
- },
2821
- 0x94 => {
2822
- Name => 'Face5Position',
2823
- Format => 'int16u[4]',
2824
- RawConv => '$$self{FacesDetected} < 5 ? undef : $val',
2825
- },
2826
- 0xb9 => {
2827
- Name => 'Face6Position',
2828
- Format => 'int16u[4]',
2829
- RawConv => '$$self{FacesDetected} < 6 ? undef : $val',
2830
- },
2831
- 0xde => {
2832
- Name => 'Face7Position',
2833
- Format => 'int16u[4]',
2834
- RawConv => '$$self{FacesDetected} < 7 ? undef : $val',
2835
- },
2836
- 0x103 => {
2837
- Name => 'Face8Position',
2838
- Format => 'int16u[4]',
2839
- RawConv => '$$self{FacesDetected} < 8 ? undef : $val',
2840
- },
2841
- );
2842
-
2843
- # panorama info for cameras such as the HX1, HX5, TX7 (ref 9/PH)
2844
- %Image::ExifTool::Sony::Panorama = (
2845
- %binaryDataAttrs,
2846
- GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
2847
- FORMAT => 'int32u',
2848
- NOTES => q{
2849
- Tags found only in panorama images from Sony cameras such as the HX1, HX5
2850
- and TX7. The width/height values of these tags are not affected by camera
2851
- rotation -- the width is always the longer dimension.
2852
- },
2853
- # 0: 257
2854
- 1 => 'PanoramaFullWidth', # (including black/grey borders)
2855
- 2 => 'PanoramaFullHeight',
2856
- 3 => {
2857
- Name => 'PanoramaDirection',
2858
- PrintConv => {
2859
- 0 => 'Right to Left',
2860
- 1 => 'Left to Right',
2861
- },
2862
- },
2863
- # crop area to remove black/grey borders from full image
2864
- 4 => 'PanoramaCropLeft',
2865
- 5 => 'PanoramaCropTop', #PH guess (NC)
2866
- 6 => 'PanoramaCropRight',
2867
- 7 => 'PanoramaCropBottom',
2868
- # 8: 1728 (HX1), 1824 (HX5/TX7) (value8/value9 = 16/9)
2869
- 8 => 'PanoramaFrameWidth', #PH guess (NC)
2870
- # 9: 972 (HX1), 1026 (HX5/TX7)
2871
- 9 => 'PanoramaFrameHeight', #PH guess (NC)
2872
- # 10: 3200-3800 (HX1), 4000-4900 (HX5/TX7)
2873
- 10 => 'PanoramaSourceWidth', #PH guess (NC)
2874
- # 11: 800-1800 (larger for taller panoramas)
2875
- 11 => 'PanoramaSourceHeight', #PH guess (NC)
2876
- # 12-15: 0
2877
- );
2878
-
2879
- # tag table for SRF0 IFD (ref 1)
2880
- %Image::ExifTool::Sony::SRF = (
2881
- PROCESS_PROC => \&ProcessSRF,
2882
- GROUPS => { 0 => 'MakerNotes', 1 => 'SRF#', 2 => 'Camera' },
2883
- NOTES => q{
2884
- The maker notes in SRF (Sony Raw Format) images contain 7 IFD's with family
2885
- 1 group names SRF0 through SRF6. SRF0 and SRF1 use the tags in this table,
2886
- while SRF2 through SRF5 use the tags in the next table, and SRF6 uses
2887
- standard EXIF tags. All information other than SRF0 is encrypted, but
2888
- thanks to Dave Coffin the decryption algorithm is known. SRF images are
2889
- written by the Sony DSC-F828 and DSC-V3.
2890
- },
2891
- # tags 0-1 are used in SRF1
2892
- 0 => {
2893
- Name => 'SRF2Key',
2894
- Notes => 'key to decrypt maker notes from the start of SRF2',
2895
- RawConv => '$self->{SRF2Key} = $val',
2896
- },
2897
- 1 => {
2898
- Name => 'DataKey',
2899
- Notes => 'key to decrypt the rest of the file from the end of the maker notes',
2900
- RawConv => '$self->{SRFDataKey} = $val',
2901
- },
2902
- # SRF0 contains a single unknown tag with TagID 0x0003
2903
- );
2904
-
2905
- # tag table for Sony RAW Format (ref 1)
2906
- %Image::ExifTool::Sony::SRF2 = (
2907
- PROCESS_PROC => \&ProcessSRF,
2908
- GROUPS => { 0 => 'MakerNotes', 1 => 'SRF#', 2 => 'Camera' },
2909
- NOTES => "These tags are found in the SRF2 through SRF5 IFD's.",
2910
- # the following tags are used in SRF2-5
2911
- 2 => 'SRF6Offset', #PH
2912
- # SRFDataOffset references 2220 bytes of unknown data for the DSC-F828 - PH
2913
- 3 => { Name => 'SRFDataOffset', Unknown => 1 }, #PH
2914
- 4 => { Name => 'RawDataOffset' }, #PH
2915
- 5 => { Name => 'RawDataLength' }, #PH
2916
- );
2917
-
2918
- # tag table for Sony RAW 2 Format Private IFD (ref 1)
2919
- %Image::ExifTool::Sony::SR2Private = (
2920
- PROCESS_PROC => \&ProcessSR2,
2921
- WRITE_PROC => \&WriteSR2,
2922
- GROUPS => { 0 => 'MakerNotes', 1 => 'SR2', 2 => 'Camera' },
2923
- NOTES => q{
2924
- The SR2 format uses the DNGPrivateData tag to reference a private IFD
2925
- containing these tags. SR2 images are written by the Sony DSC-R1, but
2926
- this information is also written to ARW images by other models.
2927
- },
2928
- 0x7200 => {
2929
- Name => 'SR2SubIFDOffset',
2930
- # (adjusting offset messes up calculations for AdobeSR2 in DNG images)
2931
- # Flags => 'IsOffset',
2932
- # (can't set OffsetPair or else DataMember won't be set when writing)
2933
- # OffsetPair => 0x7201,
2934
- DataMember => 'SR2SubIFDOffset',
2935
- RawConv => '$$self{SR2SubIFDOffset} = $val',
2936
- },
2937
- 0x7201 => {
2938
- Name => 'SR2SubIFDLength',
2939
- # (can't set OffsetPair or else DataMember won't be set when writing)
2940
- # OffsetPair => 0x7200,
2941
- DataMember => 'SR2SubIFDLength',
2942
- RawConv => '$$self{SR2SubIFDLength} = $val',
2943
- },
2944
- 0x7221 => {
2945
- Name => 'SR2SubIFDKey',
2946
- Format => 'int32u',
2947
- Notes => 'key to decrypt SR2SubIFD',
2948
- DataMember => 'SR2SubIFDKey',
2949
- RawConv => '$$self{SR2SubIFDKey} = $val',
2950
- PrintConv => 'sprintf("0x%.8x", $val)',
2951
- },
2952
- 0x7240 => { #PH
2953
- Name => 'IDC_IFD',
2954
- Groups => { 1 => 'SonyIDC' },
2955
- Condition => '$$valPt !~ /^\0\0\0\0/', # (just in case this could be zero)
2956
- Flags => 'SubIFD',
2957
- SubDirectory => {
2958
- DirName => 'SonyIDC',
2959
- TagTable => 'Image::ExifTool::SonyIDC::Main',
2960
- Start => '$val',
2961
- },
2962
- },
2963
- 0x7241 => { #PH
2964
- Name => 'IDC2_IFD',
2965
- Groups => { 1 => 'SonyIDC' },
2966
- Condition => '$$valPt !~ /^\0\0\0\0/', # may be zero if dir doesn't exist
2967
- Flags => 'SubIFD',
2968
- SubDirectory => {
2969
- DirName => 'SonyIDC2',
2970
- TagTable => 'Image::ExifTool::SonyIDC::Main',
2971
- Start => '$val',
2972
- Base => '$start',
2973
- MaxSubdirs => 20, # (A900 has 10 null entries, but IDC writes only 1)
2974
- RelativeBase => 1, # needed to write SubIFD with relative offsets
2975
- },
2976
- },
2977
- 0x7250 => { #1
2978
- Name => 'MRWInfo',
2979
- Condition => '$$valPt !~ /^\0\0\0\0/', # (just in case this could be zero)
2980
- SubDirectory => {
2981
- TagTable => 'Image::ExifTool::MinoltaRaw::Main',
2982
- },
2983
- },
2984
- );
2985
-
2986
- %Image::ExifTool::Sony::SR2SubIFD = (
2987
- WRITE_PROC => \&Image::ExifTool::Exif::WriteExif,
2988
- CHECK_PROC => \&Image::ExifTool::Exif::CheckExif,
2989
- GROUPS => { 0 => 'MakerNotes', 1 => 'SR2SubIFD', 2 => 'Camera' },
2990
- SET_GROUP1 => 1, # set group1 name to directory name for all tags in table
2991
- NOTES => 'Tags in the encrypted SR2SubIFD',
2992
- 0x7303 => 'WB_GRBGLevels', #1
2993
- 0x74c0 => { #PH
2994
- Name => 'SR2DataIFD',
2995
- Groups => { 1 => 'SR2DataIFD' }, # (needed to set SubIFD DirName)
2996
- Flags => 'SubIFD',
2997
- SubDirectory => {
2998
- TagTable => 'Image::ExifTool::Sony::SR2DataIFD',
2999
- Start => '$val',
3000
- MaxSubdirs => 20, # an A700 ARW has 14 of these! - PH
3001
- },
3002
- },
3003
- 0x7313 => 'WB_RGGBLevels', #6
3004
- 0x74a0 => 'MaxApertureAtMaxFocal', #PH
3005
- 0x74a1 => 'MaxApertureAtMinFocal', #PH
3006
- 0x7820 => 'WB_RGBLevelsDaylight', #6
3007
- 0x7821 => 'WB_RGBLevelsCloudy', #6
3008
- 0x7822 => 'WB_RGBLevelsTungsten', #6
3009
- 0x7825 => 'WB_RGBLevelsShade', #6
3010
- 0x7826 => 'WB_RGBLevelsFluorescent', #6
3011
- 0x7828 => 'WB_RGBLevelsFlash', #6
3012
- );
3013
-
3014
- %Image::ExifTool::Sony::SR2DataIFD = (
3015
- WRITE_PROC => \&Image::ExifTool::Exif::WriteExif,
3016
- CHECK_PROC => \&Image::ExifTool::Exif::CheckExif,
3017
- GROUPS => { 0 => 'MakerNotes', 1 => 'SR2DataIFD', 2 => 'Camera' },
3018
- SET_GROUP1 => 1, # set group1 name to directory name for all tags in table
3019
- # 0x7313 => 'WB_RGGBLevels', (duplicated in all SR2DataIFD's)
3020
- 0x7770 => { #PH
3021
- Name => 'ColorMode',
3022
- Priority => 0,
3023
- },
3024
- );
3025
-
3026
- # tags found in DSC-F1 PMP header (ref 10)
3027
- %Image::ExifTool::Sony::PMP = (
3028
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
3029
- GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
3030
- FIRST_ENTRY => 0,
3031
- NOTES => q{
3032
- These tags are written in the proprietary-format header of PMP images from
3033
- the DSC-F1.
3034
- },
3035
- 8 => { #PH
3036
- Name => 'JpgFromRawStart',
3037
- Format => 'int32u',
3038
- Notes => q{
3039
- OK, not really a RAW file, but this mechanism is used to allow extraction of
3040
- the JPEG image from a PMP file
3041
- },
3042
- },
3043
- 12 => { Name => 'JpgFromRawLength',Format => 'int32u' },
3044
- 22 => { Name => 'SonyImageWidth', Format => 'int16u' },
3045
- 24 => { Name => 'SonyImageHeight', Format => 'int16u' },
3046
- 27 => {
3047
- Name => 'Orientation',
3048
- PrintConv => {
3049
- 0 => 'Horizontal (normal)',
3050
- 1 => 'Rotate 270 CW',#11
3051
- 2 => 'Rotate 180',
3052
- 3 => 'Rotate 90 CW',#11
3053
- },
3054
- },
3055
- 29 => {
3056
- Name => 'ImageQuality',
3057
- PrintConv => {
3058
- 8 => 'Snap Shot',
3059
- 23 => 'Standard',
3060
- 51 => 'Fine',
3061
- },
3062
- },
3063
- # 40 => ImageWidth again (int16u)
3064
- # 42 => ImageHeight again (int16u)
3065
- 52 => { Name => 'Comment', Format => 'string[19]' },
3066
- 76 => {
3067
- Name => 'DateTimeOriginal',
3068
- Description => 'Date/Time Original',
3069
- Format => 'int8u[6]',
3070
- Groups => { 2 => 'Time' },
3071
- ValueConv => q{
3072
- my @a = split ' ', $val;
3073
- $a[0] += $a[0] < 70 ? 2000 : 1900;
3074
- sprintf('%.4d:%.2d:%.2d %.2d:%.2d:%.2d', @a);
3075
- },
3076
- PrintConv => '$self->ConvertDateTime($val)',
3077
- },
3078
- 84 => {
3079
- Name => 'ModifyDate',
3080
- Format => 'int8u[6]',
3081
- Groups => { 2 => 'Time' },
3082
- ValueConv => q{
3083
- my @a = split ' ', $val;
3084
- $a[0] += $a[0] < 70 ? 2000 : 1900;
3085
- sprintf('%.4d:%.2d:%.2d %.2d:%.2d:%.2d', @a);
3086
- },
3087
- PrintConv => '$self->ConvertDateTime($val)',
3088
- },
3089
- 102 => {
3090
- Name => 'ExposureTime',
3091
- Format => 'int16s',
3092
- RawConv => '$val <= 0 ? undef : $val',
3093
- ValueConv => '2 ** (-$val / 100)',
3094
- PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
3095
- },
3096
- 106 => { # (NC -- not written by DSC-F1)
3097
- Name => 'FNumber',
3098
- Format => 'int16s',
3099
- RawConv => '$val <= 0 ? undef : $val',
3100
- ValueConv => '$val / 100', # (likely wrong)
3101
- },
3102
- 108 => { # (NC -- not written by DSC-F1)
3103
- Name => 'ExposureCompensation',
3104
- Format => 'int16s',
3105
- RawConv => '($val == -1 or $val == -32768) ? undef : $val',
3106
- ValueConv => '$val / 100', # (probably wrong too)
3107
- },
3108
- 112 => { # (NC -- not written by DSC-F1)
3109
- Name => 'FocalLength',
3110
- Format => 'int16s',
3111
- Groups => { 2 => 'Camera' },
3112
- RawConv => '$val <= 0 ? undef : $val',
3113
- ValueConv => '$val / 100',
3114
- PrintConv => 'sprintf("%.1f mm",$val)',
3115
- },
3116
- 118 => {
3117
- Name => 'Flash',
3118
- Groups => { 2 => 'Camera' },
3119
- PrintConv => { 0 => 'No Flash', 1 => 'Fired' },
3120
- },
3121
- );
3122
-
3123
- # Composite Sony tags
3124
- %Image::ExifTool::Sony::Composite = (
3125
- GROUPS => { 2 => 'Camera' },
3126
- FocusDistance => {
3127
- Require => {
3128
- 0 => 'Sony:FocusPosition',
3129
- 1 => 'FocalLength',
3130
- },
3131
- Notes => 'distance in metres = FocusPosition * FocalLength / 1000',
3132
- ValueConv => '$val >= 128 ? "inf" : $val * $val[1] / 1000',
3133
- PrintConv => '$val eq "inf" ? $val : "$val m"',
3134
- },
3135
- );
3136
-
3137
- # add our composite tags
3138
- Image::ExifTool::AddCompositeTags('Image::ExifTool::Sony');
3139
-
3140
- # fill in Sony LensType lookup based on Minolta values
3141
- {
3142
- my $minoltaTypes = \%Image::ExifTool::Minolta::minoltaLensTypes;
3143
- %sonyLensTypes = %$minoltaTypes;
3144
- delete $$minoltaTypes{Notes}; # (temporarily)
3145
- my $id;
3146
- # 5-digit lens ID's are missing the last digit (usually "1") in the metadata for
3147
- # some Sony models, so generate corresponding 4-digit entries for these cameras
3148
- foreach $id (sort { $a <=> $b } keys %$minoltaTypes) {
3149
- next if $id < 10000;
3150
- my $sid = int($id/10);
3151
- my $i;
3152
- my $lens = $$minoltaTypes{$id};
3153
- if ($sonyLensTypes{$sid}) {
3154
- # put lens name with "or" first in list
3155
- if ($lens =~ / or /) {
3156
- my $tmp = $sonyLensTypes{$sid};
3157
- $sonyLensTypes{$sid} = $lens;
3158
- $lens = $tmp;
3159
- }
3160
- for (;;) {
3161
- $i = ($i || 0) + 1;
3162
- $sid = int($id/10) . ".$i";
3163
- last unless $sonyLensTypes{$sid};
3164
- }
3165
- }
3166
- $sonyLensTypes{$sid} = $lens;
3167
- }
3168
- $$minoltaTypes{Notes} = $sonyLensTypes{Notes}; # (restore original Notes)
3169
- }
3170
-
3171
- #------------------------------------------------------------------------------
3172
- # LensSpec value conversions
3173
- # Inputs: 0) value
3174
- # Returns: converted value
3175
- # Notes: unpacks in format compatible with LensInfo, with extra flags bytes at start and end
3176
- sub ConvLensSpec($)
3177
- {
3178
- my $val = shift;
3179
- return \$val unless length($val) == 8;
3180
- my @a = unpack("H2H4H4H2H2H2",$val);
3181
- $a[1] += 0; $a[2] += 0; # remove leading zeros from focal lengths
3182
- $a[3] /= 10; $a[4] /= 10; # divide f-numbers by 10
3183
- return join ' ', @a;
3184
- }
3185
- sub ConvInvLensSpec($)
3186
- {
3187
- my $val = shift;
3188
- my @a=split(" ", $val);
3189
- return $val unless @a == 6;
3190
- $a[3] *= 10; $a[4] *= 10; # f-numbers are multiplied by 10
3191
- $_ = hex foreach @a; # convert from hex
3192
- return pack 'CnnCCC', @a;
3193
- }
3194
-
3195
- #------------------------------------------------------------------------------
3196
- # Print Sony LensSpec value
3197
- # Inputs: 0) LensSpec numerical value
3198
- # Returns: converted LensSpec string (ie. "DT 18-55mm F3.5-5.6 SAM")
3199
- # Refs: http://equational.org/importphotos/alphalensinfo.html
3200
- # http://www.dyxum.com/dforum/the-lens-information-different-from-lensid_topic37682.html
3201
- my @lensFeatures = (
3202
- # lens features in the order they are added to the LensSpec string
3203
- # (high byte of Mask/Bits represents byte 0 of LensSpec, low byte is byte 7)
3204
- # Mask { Bits Name Bits Name } Prefix flag
3205
- # ------ ------ ----- ------ ----- -----------
3206
- [ 0x0300, { 0x0100 => 'DT', 0x0300 => 'E' }, 1 ],
3207
- [ 0x000c, { 0x0004 => 'ZA', 0x0008 => 'G' } ],
3208
- [ 0x00e0, { 0x0020 => 'STF', 0x0040 => 'Reflex', 0x0060 => 'Macro', 0x0080 => 'Fisheye' } ],
3209
- [ 0x0003, { 0x0001 => 'SSM', 0x0002 => 'SAM' } ],
3210
- [ 0x8000, { 0x8000 => 'OSS' } ],
3211
- );
3212
- sub PrintLensSpec($)
3213
- {
3214
- my $val = shift;
3215
- # 0=flags1, 1=short focal, 2=long focal, 3=max aperture at short focal,
3216
- # 4=max aperture at long focal, 5=flags2
3217
- my ($f1, $sf, $lf, $sa, $la, $f2) = split ' ', $val;
3218
- my ($rtnVal, $feature);
3219
- # crude validation of focal length and aperture values
3220
- if ($sf != 0 and $sa != 0 and ($lf == 0 or $lf >= $sf) and ($la == 0 or $la >= $sa)) {
3221
- # use focal and aperture range if this is a zoom lens
3222
- $sf .= '-' . $lf if $lf != $sf and $lf != 0;
3223
- $sa .= '-' . $la if $sa != $la and $la != 0;
3224
- $rtnVal = "${sf}mm F$sa"; # heart of LensSpec is a LensInfo string
3225
- # loop through available lens features
3226
- my $flags = hex($f1 . $f2);
3227
- foreach $feature (@lensFeatures) {
3228
- my $bits = $$feature[0] & $flags;
3229
- next unless $bits or $$feature[1]{$bits};
3230
- # add feature name as a prefix or suffix to the LensSpec
3231
- my $str = $$feature[1]{$bits} || sprintf('Unknown(%.4x)',$bits);
3232
- $rtnVal = $$feature[2] ? "$str $rtnVal" : "$rtnVal $str";
3233
- }
3234
- } else {
3235
- $rtnVal = "Unknown ($val)";
3236
- }
3237
- return $rtnVal;
3238
- }
3239
- # inverse conversion
3240
- sub PrintInvLensSpec($)
3241
- {
3242
- my $val = shift;
3243
- return $1 if $val =~ /Unknown ?\((.*)\)/i;
3244
- my ($sf, $lf, $sa, $la) = Image::ExifTool::Exif::GetLensInfo($val);
3245
- $sf or return undef;
3246
- # fixed focal length and aperture have zero for 2nd number
3247
- $lf = 0 if $lf == $sf;
3248
- $la = 0 if $la == $sa;
3249
- my $flags = 0;
3250
- my ($feature, $bits);
3251
- foreach $feature (@lensFeatures) {
3252
- foreach $bits (keys %{$$feature[1]}) {
3253
- # set corresponding flag bits for each feature name found
3254
- my $name = $$feature[1]{$bits};
3255
- $val =~ /\b$name\b/i and $flags |= $bits;
3256
- }
3257
- }
3258
- return sprintf "%.2x $sf $lf $sa $la %.2x", $flags>>8, $flags&0xff;
3259
- }
3260
-
3261
- #------------------------------------------------------------------------------
3262
- # Read/Write MoreInfo information (tag 0x0020, count 20480)
3263
- # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
3264
- # Returns: 1 on success when reading, or new directory when writing (IsWriting set)
3265
- sub ProcessMoreInfo($$$)
3266
- {
3267
- my ($exifTool, $dirInfo, $tagTablePtr) = @_;
3268
- $exifTool or return 1; # allow dummy access to write routine
3269
- my $dataPt = $$dirInfo{DataPt};
3270
- my $start = $$dirInfo{DirStart} || 0;
3271
- my $dirLen = $$dirInfo{DirLen} || length($$dataPt);
3272
- my $isWriting = $$dirInfo{IsWriting};
3273
- my $rtnVal = $isWriting ? undef : 0;
3274
- return $rtnVal if $dirLen < 4;
3275
-
3276
- my $num = Get16u($dataPt, $start); # number of entries
3277
- my $len = Get16u($dataPt, $start + 2); # total data length
3278
-
3279
- if ($dirLen < 4 + $num * 4) {
3280
- $exifTool->Warn('Truncated MoreInfo data', 1);
3281
- return $rtnVal;
3282
- }
3283
-
3284
- $exifTool->VerboseDir('MoreInfo', $num, $len) unless $isWriting;
3285
-
3286
- if ($len > $dirLen) {
3287
- $exifTool->Warn('MoreInfo data length too large', 1);
3288
- $len = $dirLen;
3289
- }
3290
- # loop through the MoreInfo index section to get the block offsets and tag ID's
3291
- # (in case they are out of order, even though this may never happen)
3292
- my ($i, @offset, @tagID, %blockSize);
3293
- for ($i=0; $i<$num; ++$i) {
3294
- my $entry = $start + 4 + $i * 4;
3295
- push @tagID, Get16u($dataPt, $entry);
3296
- push @offset, Get16u($dataPt, $entry + 2);
3297
- if ($offset[-1] > $len and $offset[-1] <= $dirLen) {
3298
- $exifTool->Warn('MoreInfo data length too small', 1);
3299
- $len = $dirLen;
3300
- }
3301
- }
3302
- # generate a lookup table of block sizes
3303
- my @sorted = sort { $a <=> $b } @offset;
3304
- push @sorted, 0xffff; # (simplifies logic in loop below)
3305
- for ($i=0; $i<$num; ++$i) {
3306
- my $offset = $sorted[$i];
3307
- my $size = $sorted[$i+1] - $offset;
3308
- # note that block size will be negative for blocks with starting
3309
- # offsets greater than $dirLen, but we will ignore these below
3310
- $size = $len - $offset if $size > $len - $offset;
3311
- # (if blockSize is already defined for this offset, then there
3312
- # are 2 blocks with the same starting offset and the existing
3313
- # size must be zero. Since we can't know which block is
3314
- # actually non-zero size, the reasonable thing to do is
3315
- # assume that both have a size of zero)
3316
- $blockSize{$offset} = $size unless defined $blockSize{$offset};
3317
- }
3318
- # initialize successful return value
3319
- $rtnVal = $isWriting ? substr($$dataPt, $start, $dirLen) : 1;
3320
- # now process each block
3321
- my $unknown = $exifTool->{OPTIONS}{Unknown};
3322
- for ($i=0; $i<$num; ++$i) {
3323
- next if $offset[$i] > $dirLen; # ignore bad offsets
3324
- my $tag = $tagID[$i];
3325
- if ($isWriting) {
3326
- # write new tags
3327
- my $tagInfo = $$tagTablePtr{$tag};
3328
- next unless ref $tagInfo eq 'HASH' and $$tagInfo{SubDirectory};
3329
- my $offset = $offset[$i];
3330
- my $size = $blockSize{$offset};
3331
- my %dirInfo = (
3332
- DirName => $$tagInfo{Name},
3333
- Parent => $$dirInfo{DirName},
3334
- DataPt => \$rtnVal,
3335
- DirStart => $offset,
3336
- DirLen => $size,
3337
- );
3338
- my $subTable = GetTagTable($$tagInfo{SubDirectory}{TagTable});
3339
- my $val = $exifTool->WriteDirectory(\%dirInfo, $subTable);
3340
- # update this block in the returned MoreInfo data
3341
- substr($rtnVal, $offset, $size) = $val if defined $val;
3342
- next;
3343
- }
3344
- # generate binary tables for unknown tags if -U option used
3345
- if (not defined $$tagTablePtr{$tag} and $unknown > 1) {
3346
- my $name = sprintf('MoreInfo%.4x', $tag);
3347
- my $table = "Image::ExifTool::Sony::$name";
3348
- no strict 'refs';
3349
- %$table = (
3350
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
3351
- FIRST_ENTRY => 0,
3352
- GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
3353
- );
3354
- use strict 'refs';
3355
- my %tagInfo = (
3356
- Name => $name,
3357
- SubDirectory => { TagTable => $table },
3358
- );
3359
- AddTagToTable($tagTablePtr, $tag, \%tagInfo);
3360
- }
3361
- $exifTool->HandleTag($tagTablePtr, $tag, undef,
3362
- Index => $i,
3363
- DataPt => $dataPt,
3364
- DataPos => $$dirInfo{DataPos},
3365
- Start => $start + $offset[$i],
3366
- Size => $blockSize{$offset[$i]},
3367
- );
3368
- }
3369
- return $rtnVal;
3370
- }
3371
-
3372
- #------------------------------------------------------------------------------
3373
- # Read Sony DSC-F1 PMP file
3374
- # Inputs: 0) ExifTool object ref, 1) dirInfo ref
3375
- # Returns: 1 on success when reading, 0 if this isn't a valid PMP file
3376
- sub ProcessPMP($$)
3377
- {
3378
- my ($exifTool, $dirInfo) = @_;
3379
- my $raf = $$dirInfo{RAF};
3380
- my $buff;
3381
- $raf->Read($buff, 128) == 128 or return 0;
3382
- # validate header length (124 bytes)
3383
- $buff =~ /^.{8}\0{3}\x7c.{112}\xff\xd8\xff\xdb$/s or return 0;
3384
- $exifTool->SetFileType();
3385
- SetByteOrder('MM');
3386
- $exifTool->FoundTag(Make => 'Sony');
3387
- $exifTool->FoundTag(Model => 'DSC-F1');
3388
- # extract information from 124-byte header
3389
- my $tagTablePtr = GetTagTable('Image::ExifTool::Sony::PMP');
3390
- my %dirInfo = ( DataPt => \$buff, DirName => 'PMP' );
3391
- $exifTool->ProcessDirectory(\%dirInfo, $tagTablePtr);
3392
- # process JPEG image
3393
- $raf->Seek(124, 0);
3394
- $$dirInfo{Base} = 124;
3395
- $exifTool->ProcessJPEG($dirInfo);
3396
- return 1;
3397
- }
3398
-
3399
- #------------------------------------------------------------------------------
3400
- # Decrypt/Encrypt Sony data (ref 1) (reversible encryption)
3401
- # Inputs: 0) data reference, 1) start offset, 2) data length, 3) decryption key
3402
- # Returns: nothing (original data buffer is updated with decrypted data)
3403
- # Notes: data length should be a multiple of 4
3404
- sub Decrypt($$$$)
3405
- {
3406
- my ($dataPt, $start, $len, $key) = @_;
3407
- my ($i, $j, @pad);
3408
- my $words = int ($len / 4);
3409
-
3410
- for ($i=0; $i<4; ++$i) {
3411
- my $lo = ($key & 0xffff) * 0x0edd + 1;
3412
- my $hi = ($key >> 16) * 0x0edd + ($key & 0xffff) * 0x02e9 + ($lo >> 16);
3413
- $pad[$i] = $key = (($hi & 0xffff) << 16) + ($lo & 0xffff);
3414
- }
3415
- $pad[3] = ($pad[3] << 1 | ($pad[0]^$pad[2]) >> 31) & 0xffffffff;
3416
- for ($i=4; $i<0x7f; ++$i) {
3417
- $pad[$i] = (($pad[$i-4]^$pad[$i-2]) << 1 |
3418
- ($pad[$i-3]^$pad[$i-1]) >> 31) & 0xffffffff;
3419
- }
3420
- my @data = unpack("x$start N$words", $$dataPt);
3421
- for ($i=0x7f,$j=0; $j<$words; ++$i,++$j) {
3422
- $data[$j] ^= $pad[$i & 0x7f] = $pad[($i+1) & 0x7f] ^ $pad[($i+65) & 0x7f];
3423
- }
3424
- substr($$dataPt, $start, $words*4) = pack('N*', @data);
3425
- }
3426
-
3427
- #------------------------------------------------------------------------------
3428
- # Set the ARW file type and decide between SubIFD and A100DataOffset
3429
- # Inputs: 0) ExifTool object ref, 1) reference to tag 0x14a raw data
3430
- # Returns: true if tag 0x14a is a SubIFD, false otherwise
3431
- sub SetARW($$)
3432
- {
3433
- my ($exifTool, $valPt) = @_;
3434
-
3435
- # assume ARW for now -- SR2's get identified when FileFormat is parsed
3436
- $exifTool->OverrideFileType($$exifTool{TIFF_TYPE} = 'ARW');
3437
-
3438
- # this should always be a SubIFD for models other than the A100
3439
- return 1 unless $$exifTool{Model} eq 'DSLR-A100' and length $$valPt == 4;
3440
-
3441
- # for the A100, IFD0 tag 0x14a is either a pointer to the raw data if this is
3442
- # an original image, or a SubIFD offset if the image was edited by Sony IDC,
3443
- # so assume it points to the raw data if it isn't a valid IFD (this assumption
3444
- # will be checked later when we try to parse the SR2Private directory)
3445
- my %subdir = (
3446
- DirStart => Get32u($valPt, 0),
3447
- Base => 0,
3448
- RAF => $$exifTool{RAF},
3449
- AllowOutOfOrderTags => 1, # doh!
3450
- );
3451
- return Image::ExifTool::Exif::ValidateIFD(\%subdir);
3452
- }
3453
-
3454
- #------------------------------------------------------------------------------
3455
- # Finish writing ARW image, patching necessary Sony quirks, etc
3456
- # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) EXIF data ref, 3) image data reference
3457
- # Returns: undef on success, error string otherwise
3458
- # Notes: (it turns that all of this is for the A100 only)
3459
- sub FinishARW($$$$)
3460
- {
3461
- my ($exifTool, $dirInfo, $dataPt, $imageData) = @_;
3462
-
3463
- # pre-scan IFD0 to get IFD entry offsets for each tag
3464
- my $dataLen = length $$dataPt;
3465
- return 'Truncated IFD0' if $dataLen < 2;
3466
- my $n = Get16u($dataPt, 0);
3467
- return 'Truncated IFD0' if $dataLen < 2 + 12 * $n;
3468
- my ($i, %entry, $dataBlock, $pad, $dataOffset);
3469
- for ($i=0; $i<$n; ++$i) {
3470
- my $entry = 2 + $i * 12;
3471
- $entry{Get16u($dataPt, $entry)} = $entry;
3472
- }
3473
- # fix up SR2Private offset and A100DataOffset (A100 only)
3474
- if ($entry{0xc634} and $$exifTool{MRWDirData}) {
3475
- return 'Unexpected MRW block' unless $$exifTool{Model} eq 'DSLR-A100';
3476
- return 'Missing A100DataOffset' unless $entry{0x14a} and $$exifTool{A100DataOffset};
3477
- # account for total length of image data
3478
- my $totalLen = 8 + $dataLen;
3479
- if (ref $imageData) {
3480
- foreach $dataBlock (@$imageData) {
3481
- my ($pos, $size, $pad) = @$dataBlock;
3482
- $totalLen += $size + $pad;
3483
- }
3484
- }
3485
- # align MRW block on an even 4-byte boundary
3486
- my $remain = $totalLen & 0x03;
3487
- $pad = 4 - $remain and $totalLen += $pad if $remain;
3488
- # set offset for the MRW directory data
3489
- Set32u($totalLen, $dataPt, $entry{0xc634} + 8);
3490
- # also pad MRWDirData data to an even 4 bytes (just to be safe)
3491
- $remain = length($$exifTool{MRWDirData}) & 0x03;
3492
- $$exifTool{MRWDirData} .= "\0" x (4 - $remain) if $remain;
3493
- $totalLen += length $$exifTool{MRWDirData};
3494
- # fix up A100DataOffset
3495
- $dataOffset = $$exifTool{A100DataOffset};
3496
- Set32u($totalLen, $dataPt, $entry{0x14a} + 8);
3497
- }
3498
- # patch double-referenced and incorrectly-sized A100 PreviewImage
3499
- if ($entry{0x201} and $$exifTool{A100PreviewStart} and
3500
- $entry{0x202} and $$exifTool{A100PreviewLength})
3501
- {
3502
- Set32u($$exifTool{A100PreviewStart}, $dataPt, $entry{0x201} + 8);
3503
- Set32u($$exifTool{A100PreviewLength}, $dataPt, $entry{0x202} + 8);
3504
- }
3505
- # write TIFF IFD structure
3506
- my $outfile = $$dirInfo{OutFile};
3507
- my $header = GetByteOrder() . Set16u(0x2a) . Set32u(8);
3508
- Write($outfile, $header, $$dataPt) or return 'Error writing';
3509
- # copy over image data
3510
- if (ref $imageData) {
3511
- $exifTool->CopyImageData($imageData, $outfile) or return 'Error copying image data';
3512
- }
3513
- # write MRW data if necessary
3514
- if ($$exifTool{MRWDirData}) {
3515
- Write($outfile, "\0" x $pad) if $pad; # write padding if necessary
3516
- Write($outfile, $$exifTool{MRWDirData});
3517
- delete $$exifTool{MRWDirData};
3518
- # set TIFF_END to copy over the MRW image data
3519
- $$exifTool{TIFF_END} = $dataOffset if $dataOffset;
3520
- }
3521
- return undef;
3522
- }
3523
-
3524
- #------------------------------------------------------------------------------
3525
- # Process SRF maker notes
3526
- # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
3527
- # Returns: 1 on success
3528
- sub ProcessSRF($$$)
3529
- {
3530
- my ($exifTool, $dirInfo, $tagTablePtr) = @_;
3531
- my $dataPt = $$dirInfo{DataPt};
3532
- my $start = $$dirInfo{DirStart};
3533
- my $verbose = $exifTool->Options('Verbose');
3534
-
3535
- # process IFD chain
3536
- my ($ifd, $success);
3537
- for ($ifd=0; ; ) {
3538
- # switch tag table for SRF2-5 and SRF6
3539
- if ($ifd == 2) {
3540
- $tagTablePtr = GetTagTable('Image::ExifTool::Sony::SRF2');
3541
- } elsif ($ifd == 6) {
3542
- # SRF6 uses standard EXIF tags
3543
- $tagTablePtr = GetTagTable('Image::ExifTool::Exif::Main');
3544
- }
3545
- my $srf = $$dirInfo{DirName} = "SRF$ifd";
3546
- $exifTool->{SET_GROUP1} = $srf;
3547
- $success = Image::ExifTool::Exif::ProcessExif($exifTool, $dirInfo, $tagTablePtr);
3548
- delete $exifTool->{SET_GROUP1};
3549
- last unless $success;
3550
- #
3551
- # get pointer to next IFD
3552
- #
3553
- my $count = Get16u($dataPt, $$dirInfo{DirStart});
3554
- my $dirEnd = $$dirInfo{DirStart} + 2 + $count * 12;
3555
- last if $dirEnd + 4 > length($$dataPt);
3556
- my $nextIFD = Get32u($dataPt, $dirEnd);
3557
- last unless $nextIFD;
3558
- $nextIFD -= $$dirInfo{DataPos}; # adjust for position of makernotes data
3559
- $$dirInfo{DirStart} = $nextIFD;
3560
- #
3561
- # decrypt next IFD data if necessary
3562
- #
3563
- ++$ifd;
3564
- my ($key, $len);
3565
- if ($ifd == 1) {
3566
- # get the key to decrypt IFD1
3567
- my $cp = $start + 0x8ddc; # why?
3568
- my $ip = $cp + 4 * unpack("x$cp C", $$dataPt);
3569
- $key = unpack("x$ip N", $$dataPt);
3570
- $len = $cp + $nextIFD; # decrypt up to $cp
3571
- } elsif ($ifd == 2) {
3572
- # get the key to decrypt IFD2
3573
- $key = $exifTool->{SRF2Key};
3574
- $len = length($$dataPt) - $nextIFD; # decrypt rest of maker notes
3575
- } else {
3576
- next; # no decryption needed
3577
- }
3578
- # decrypt data
3579
- Decrypt($dataPt, $nextIFD, $len, $key) if defined $key;
3580
- next unless $verbose > 2;
3581
- # display decrypted data in verbose mode
3582
- $exifTool->VerboseDir("Decrypted SRF$ifd", 0, $nextIFD + $len);
3583
- $exifTool->VerboseDump($dataPt,
3584
- Prefix => "$exifTool->{INDENT} ",
3585
- Start => $nextIFD,
3586
- DataPos => $$dirInfo{DataPos},
3587
- );
3588
- }
3589
- }
3590
-
3591
- #------------------------------------------------------------------------------
3592
- # Write SR2 data
3593
- # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
3594
- # Returns: 1 on success when reading, or SR2 directory or undef when writing
3595
- sub WriteSR2($$$)
3596
- {
3597
- my ($exifTool, $dirInfo, $tagTablePtr) = @_;
3598
- $exifTool or return 1; # allow dummy access
3599
- my $buff = '';
3600
- $$dirInfo{OutFile} = \$buff;
3601
- return ProcessSR2($exifTool, $dirInfo, $tagTablePtr);
3602
- }
3603
-
3604
- #------------------------------------------------------------------------------
3605
- # Read/Write SR2 IFD and its encrypted subdirectories
3606
- # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
3607
- # Returns: 1 on success when reading, or SR2 directory or undef when writing
3608
- sub ProcessSR2($$$)
3609
- {
3610
- my ($exifTool, $dirInfo, $tagTablePtr) = @_;
3611
- my $raf = $$dirInfo{RAF};
3612
- my $dataPt = $$dirInfo{DataPt};
3613
- my $dataPos = $$dirInfo{DataPos};
3614
- my $dataLen = $$dirInfo{DataLen} || length $$dataPt;
3615
- my $base = $$dirInfo{Base} || 0;
3616
- my $outfile = $$dirInfo{OutFile};
3617
-
3618
- # clear SR2 member variables to be safe
3619
- delete $$exifTool{SR2SubIFDOffset};
3620
- delete $$exifTool{SR2SubIFDLength};
3621
- delete $$exifTool{SR2SubIFDKey};
3622
-
3623
- # make sure we have the first 4 bytes available to test directory type
3624
- my $buff;
3625
- if ($dataLen < 4 and $raf) {
3626
- my $pos = $dataPos + ($$dirInfo{DirStart}||0) + $base;
3627
- if ($raf->Seek($pos, 0) and $raf->Read($buff, 4) == 4) {
3628
- $dataPt = \$buff;
3629
- undef $$dirInfo{DataPt}; # must load data from file
3630
- $raf->Seek($pos, 0);
3631
- }
3632
- }
3633
- # this may either be a normal IFD, or a MRW data block
3634
- # (only original ARW images from the A100 use the MRW block)
3635
- my $dataOffset;
3636
- if ($dataPt and $$dataPt =~ /^\0MR[IM]/) {
3637
- my ($err, $srfPos, $srfLen, $dataOffset);
3638
- $dataOffset = $$exifTool{A100DataOffset};
3639
- if ($dataOffset) {
3640
- # save information about the RAW data trailer so it will be preserved
3641
- $$exifTool{KnownTrailer} = { Name => 'A100 RAW Data', Start => $dataOffset };
3642
- } else {
3643
- $err = 'A100DataOffset tag is missing from A100 ARW image';
3644
- }
3645
- $raf or $err = 'Unrecognized SR2 structure';
3646
- unless ($err) {
3647
- $srfPos = $raf->Tell();
3648
- $srfLen = $dataOffset - $srfPos;
3649
- unless ($srfLen > 0 and $raf->Read($buff, $srfLen) == $srfLen) {
3650
- $err = 'Error reading MRW directory';
3651
- }
3652
- }
3653
- if ($err) {
3654
- $outfile and $exifTool->Error($err), return undef;
3655
- $exifTool->Warn($err);
3656
- return 0;
3657
- }
3658
- my %dirInfo = ( DataPt => \$buff );
3659
- require Image::ExifTool::MinoltaRaw;
3660
- if ($outfile) {
3661
- # save MRW data to be written last
3662
- $$exifTool{MRWDirData} = Image::ExifTool::MinoltaRaw::WriteMRW($exifTool, \%dirInfo);
3663
- return $$exifTool{MRWDirData} ? "\0\0\0\0\0\0" : undef;
3664
- } else {
3665
- if (not $outfile and $$exifTool{HTML_DUMP}) {
3666
- $exifTool->HDump($srfPos, $srfLen, '[A100 SRF Data]');
3667
- }
3668
- return Image::ExifTool::MinoltaRaw::ProcessMRW($exifTool, \%dirInfo);
3669
- }
3670
- } elsif ($$exifTool{A100DataOffset}) {
3671
- my $err = 'Unexpected A100DataOffset tag';
3672
- $outfile and $exifTool->Error($err), return undef;
3673
- $exifTool->Warn($err);
3674
- return 0;
3675
- }
3676
- my $verbose = $exifTool->Options('Verbose');
3677
- my $result;
3678
- if ($outfile) {
3679
- $result = Image::ExifTool::Exif::WriteExif($exifTool, $dirInfo, $tagTablePtr);
3680
- return undef unless $result;
3681
- $$outfile .= $result;
3682
-
3683
- } else {
3684
- $result = Image::ExifTool::Exif::ProcessExif($exifTool, $dirInfo, $tagTablePtr);
3685
- }
3686
- return $result unless $result and $$exifTool{SR2SubIFDOffset};
3687
- # only take first offset value if more than one!
3688
- my @offsets = split ' ', $exifTool->{SR2SubIFDOffset};
3689
- my $offset = shift @offsets;
3690
- my $length = $exifTool->{SR2SubIFDLength};
3691
- my $key = $exifTool->{SR2SubIFDKey};
3692
- my @subifdPos;
3693
- if ($offset and $length and defined $key) {
3694
- my $buff;
3695
- # read encrypted SR2SubIFD from file
3696
- if (($raf and $raf->Seek($offset+$base, 0) and
3697
- $raf->Read($buff, $length) == $length) or
3698
- # or read from data (when processing Adobe DNGPrivateData)
3699
- ($offset - $dataPos >= 0 and $offset - $dataPos + $length < $dataLen and
3700
- ($buff = substr($$dataPt, $offset - $dataPos, $length))))
3701
- {
3702
- Decrypt(\$buff, 0, $length, $key);
3703
- # display decrypted data in verbose mode
3704
- if ($verbose > 2 and not $outfile) {
3705
- $exifTool->VerboseDir("Decrypted SR2SubIFD", 0, $length);
3706
- $exifTool->VerboseDump(\$buff, Addr => $offset + $base);
3707
- }
3708
- my $num = '';
3709
- my $dPos = $offset;
3710
- for (;;) {
3711
- my %dirInfo = (
3712
- Base => $base,
3713
- DataPt => \$buff,
3714
- DataLen => length $buff,
3715
- DirStart => $offset - $dPos,
3716
- DirName => "SR2SubIFD$num",
3717
- DataPos => $dPos,
3718
- );
3719
- my $subTable = GetTagTable('Image::ExifTool::Sony::SR2SubIFD');
3720
- if ($outfile) {
3721
- my $fixup = new Image::ExifTool::Fixup;
3722
- $dirInfo{Fixup} = $fixup;
3723
- $result = $exifTool->WriteDirectory(\%dirInfo, $subTable);
3724
- return undef unless $result;
3725
- # save position of this SubIFD
3726
- push @subifdPos, length($$outfile);
3727
- # add this directory to the returned data
3728
- $$fixup{Start} += length($$outfile);
3729
- $$outfile .= $result;
3730
- $dirInfo->{Fixup}->AddFixup($fixup);
3731
- } else {
3732
- $result = $exifTool->ProcessDirectory(\%dirInfo, $subTable);
3733
- }
3734
- last unless @offsets;
3735
- $offset = shift @offsets;
3736
- $num = ($num || 1) + 1;
3737
- }
3738
-
3739
- } else {
3740
- $exifTool->Warn('Error reading SR2 data');
3741
- }
3742
- }
3743
- if ($outfile and @subifdPos) {
3744
- # the SR2SubIFD must be padded to a multiple of 4 bytes for the encryption
3745
- my $sr2Len = length($$outfile) - $subifdPos[0];
3746
- if ($sr2Len & 0x03) {
3747
- my $pad = 4 - ($sr2Len & 0x03);
3748
- $sr2Len += $pad;
3749
- $$outfile .= ' ' x $pad;
3750
- }
3751
- # save the new SR2SubIFD Length and Key to be used later for encryption
3752
- $$exifTool{SR2SubIFDLength} = $sr2Len;
3753
- my $newKey = $$exifTool{VALUE}{SR2SubIFDKey};
3754
- $$exifTool{SR2SubIFDKey} = $newKey if defined $newKey;
3755
- # update SubIFD pointers manually and add to fixup, and set SR2SubIFDLength
3756
- my $n = Get16u($outfile, 0);
3757
- my ($i, %found);
3758
- for ($i=0; $i<$n; ++$i) {
3759
- my $entry = 2 + 12 * $i;
3760
- my $tagID = Get16u($outfile, $entry);
3761
- # only interested in SR2SubIFDOffset (0x7200) and SR2SubIFDLength (0x7201)
3762
- next unless $tagID == 0x7200 or $tagID == 0x7201;
3763
- $found{$tagID} = 1;
3764
- my $fmt = Get16u($outfile, $entry + 2);
3765
- if ($fmt != 0x04) { # must be int32u
3766
- $exifTool->Error("Unexpected format ($fmt) for SR2SubIFD tag");
3767
- return undef;
3768
- }
3769
- if ($tagID == 0x7201) { # SR2SubIFDLength
3770
- Set32u($sr2Len, $outfile, $entry + 8);
3771
- next;
3772
- }
3773
- my $tag = 'SR2SubIFDOffset';
3774
- my $valuePtr = @subifdPos < 2 ? $entry+8 : Get32u($outfile, $entry+8);
3775
- my $pos;
3776
- foreach $pos (@subifdPos) {
3777
- Set32u($pos, $outfile, $valuePtr);
3778
- $dirInfo->{Fixup}->AddFixup($valuePtr, $tag);
3779
- undef $tag;
3780
- $valuePtr += 4;
3781
- }
3782
- }
3783
- unless ($found{0x7200} and $found{0x7201}) {
3784
- $exifTool->Error('Missing SR2SubIFD tag');
3785
- return undef;
3786
- }
3787
- }
3788
- return $outfile ? $$outfile : $result;
3789
- }
3790
-
3791
- 1; # end
3792
-
3793
- __END__
3794
-
3795
- =head1 NAME
3796
-
3797
- Image::ExifTool::Sony - Sony EXIF maker notes tags
3798
-
3799
- =head1 SYNOPSIS
3800
-
3801
- This module is loaded automatically by Image::ExifTool when required.
3802
-
3803
- =head1 DESCRIPTION
3804
-
3805
- This module contains definitions required by Image::ExifTool to interpret
3806
- Sony maker notes EXIF meta information.
3807
-
3808
- =head1 NOTES
3809
-
3810
- Also see Minolta.pm since Sony DSLR models use structures originating from
3811
- Minolta.
3812
-
3813
- =head1 AUTHOR
3814
-
3815
- Copyright 2003-2012, Phil Harvey (phil at owl.phy.queensu.ca)
3816
-
3817
- This library is free software; you can redistribute it and/or modify it
3818
- under the same terms as Perl itself.
3819
-
3820
- =head1 REFERENCES
3821
-
3822
- =over 4
3823
-
3824
- =item L<http://www.cybercom.net/~dcoffin/dcraw/>
3825
-
3826
- =item L<http://homepage3.nifty.com/kamisaka/makernote/makernote_sony.htm>
3827
-
3828
- =item L<http://www.klingebiel.com/tempest/hd/pmp.html>
3829
-
3830
- =back
3831
-
3832
- =head1 ACKNOWLEDGEMENTS
3833
-
3834
- Thanks to Thomas Bodenmann, Philippe Devaux, Jens Duttke, Marcus
3835
- Holland-Moritz, Andrey Tverdokhleb, Rudiger Lange, Igal Milchtaich, Michael
3836
- Reitinger and Jos Roost for help decoding some tags.
3837
-
3838
- =head1 SEE ALSO
3839
-
3840
- L<Image::ExifTool::TagNames/Sony Tags>,
3841
- L<Image::ExifTool::TagNames/Minolta Tags>,
3842
- L<Image::ExifTool(3pm)|Image::ExifTool>
3843
-
3844
- =cut