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