exiftool_vendored 9.37.0 → 9.41.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of exiftool_vendored might be problematic. Click here for more details.
- checksums.yaml +6 -14
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/Changes +74 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/MANIFEST +14 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/META.yml +1 -1
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/Makefile.PL +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/README +30 -30
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/arg_files/exif2iptc.args +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/arg_files/exif2xmp.args +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/arg_files/gps2xmp.args +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/arg_files/iptc2exif.args +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/arg_files/iptc2xmp.args +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/arg_files/iptcCore.args +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/arg_files/pdf2xmp.args +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/arg_files/xmp2exif.args +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/arg_files/xmp2gps.args +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/arg_files/xmp2iptc.args +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/arg_files/xmp2pdf.args +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/config_files/ExifTool_config +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/config_files/convert_regions.config +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/exiftool +266 -226
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/fmt_files/gpx.fmt +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/fmt_files/gpx_wpt.fmt +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/fmt_files/kml.fmt +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/ExifTool.html +79 -54
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/MIE1.1-20070121.pdf +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/Shift.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/AFCP.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/AIFF.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/APE.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/APP12.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/ASF.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Apple.html +11 -8
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/BMP.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Canon.html +138 -14
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/CanonCustom.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/CanonRaw.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/CanonVRD.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Casio.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Composite.html +19 -13
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/DICOM.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/DNG.html +0 -0
- data/bin/Image-ExifTool-9.41/html/TagNames/DPX.html +190 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/DV.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/DarwinCore.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/DjVu.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/EXE.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/EXIF.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Extra.html +13 -6
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/FLAC.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/FLIR.html +166 -2
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Flash.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/FlashPix.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Font.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/FotoStation.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/FujiFilm.html +11 -1
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/GE.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/GIF.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/GIMP.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/GPS.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/GeoTiff.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/H264.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/HP.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/HTML.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/ICC_Profile.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/ID3.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/IPTC.html +3 -3
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/ITC.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/JFIF.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/JPEG.html +6 -4
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/JVC.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Jpeg2000.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Kodak.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/KyoceraRaw.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/LNK.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Leaf.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/M2TS.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/MIE.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/MIFF.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/MNG.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/MPC.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/MPEG.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/MPF.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/MWG.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/MXF.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Matroska.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Microsoft.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Minolta.html +30 -19
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/MinoltaRaw.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Nikon.html +81 -60
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/NikonCapture.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/NikonCustom.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/OOXML.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Ogg.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Olympus.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/OpenEXR.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/PDF.html +6 -6
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/PGF.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/PICT.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/PLIST.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/PNG.html +25 -18
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/PSP.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Panasonic.html +51 -14
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/PanasonicRaw.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Pentax.html +23 -6
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/PhaseOne.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/PhotoCD.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/PhotoMechanic.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Photoshop.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/PostScript.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/PrintIM.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Qualcomm.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/QuickTime.html +404 -126
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/RIFF.html +19 -13
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/RSRC.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/RTF.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Radiance.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Rawzor.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Real.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Reconyx.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Ricoh.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Samsung.html +27 -1
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Sanyo.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Scalado.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Shortcuts.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Sigma.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/SigmaRaw.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Sony.html +491 -121
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/SonyIDC.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Stim.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Theora.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Torrent.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Unknown.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/Vorbis.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/XMP.html +824 -175
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/ZIP.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/iWork.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/index.html +7 -5
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/TagNames/style.css +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/ancient_history.html +201 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/canon_raw.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/commentary.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/config.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/data_members.html +9 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/exiftool_pod.html +92 -71
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/faq.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/filename.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/geotag.html +13 -9
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/history.html +82 -201
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/htmldump.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/idiosyncracies.html +4 -2
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/index.html +46 -35
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/install.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/metafiles.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/overview.png +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/standards.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/struct.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/style.css +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/under.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/verbose.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/html/writing.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/File/RandomAccess.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/File/RandomAccess.pod +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool.pm +387 -331
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool.pod +101 -81
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/AES.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/AFCP.pm +14 -14
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/AIFF.pm +17 -17
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/APE.pm +18 -18
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/APP12.pm +21 -21
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/ASF.pm +48 -48
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Apple.pm +31 -19
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/BMP.pm +4 -4
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/BZZ.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/BigTIFF.pm +36 -36
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/BuildTagLookup.pm +12 -12
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Canon.pm +126 -38
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/CanonCustom.pm +37 -37
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/CanonRaw.pm +30 -30
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/CanonVRD.pm +75 -75
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/CaptureOne.pm +18 -18
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Casio.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Charset.pm +13 -13
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Charset/Arabic.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Charset/Baltic.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Charset/Cyrillic.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Charset/Greek.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Charset/Hebrew.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Charset/JIS.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Charset/Latin.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Charset/Latin2.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Charset/MacArabic.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Charset/MacChineseCN.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Charset/MacChineseTW.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Charset/MacCroatian.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Charset/MacCyrillic.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Charset/MacGreek.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Charset/MacHebrew.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Charset/MacIceland.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Charset/MacJapanese.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Charset/MacKorean.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Charset/MacLatin2.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Charset/MacRSymbol.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Charset/MacRoman.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Charset/MacRomanian.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Charset/MacThai.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Charset/MacTurkish.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Charset/PDFDoc.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Charset/ShiftJIS.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Charset/Symbol.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Charset/Thai.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Charset/Turkish.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Charset/Vietnam.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/DICOM.pm +56 -17
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/DNG.pm +85 -85
- data/bin/Image-ExifTool-9.41/lib/Image/ExifTool/DPX.pm +151 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/DV.pm +6 -6
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/DarwinCore.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/DjVu.pm +14 -14
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/EXE.pm +47 -47
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Exif.pm +126 -116
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/FLAC.pm +14 -14
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/FLIR.pm +282 -22
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Fixup.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Flash.pm +41 -41
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/FlashPix.pm +97 -97
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Font.pm +46 -46
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/FotoStation.pm +21 -20
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/FujiFilm.pm +40 -38
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/GE.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/GIF.pm +32 -32
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/GIMP.pm +11 -11
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/GPS.pm +3 -3
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/GeoTiff.pm +19 -19
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Geotag.pm +69 -66
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/H264.pm +42 -42
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/HP.pm +9 -9
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/HTML.pm +16 -16
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/HtmlDump.pm +10 -10
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/ICC_Profile.pm +48 -48
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/ID3.pm +84 -84
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/IPTC.pm +38 -38
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/ITC.pm +11 -11
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Import.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/InDesign.pm +18 -18
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/JPEG.pm +10 -6
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/JPEGDigest.pm +4 -4
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/JVC.pm +8 -8
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Jpeg2000.pm +50 -58
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Kodak.pm +15 -15
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/KyoceraRaw.pm +4 -4
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/LNK.pm +24 -24
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Lang/cs.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Lang/de.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Lang/en_ca.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Lang/en_gb.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Lang/es.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Lang/fi.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Lang/fr.pm +1 -1
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Lang/it.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Lang/ja.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Lang/ko.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Lang/nl.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Lang/pl.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Lang/ru.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Lang/sv.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Lang/tr.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Lang/zh_cn.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Lang/zh_tw.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Leaf.pm +11 -11
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/M2TS.pm +37 -37
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/MIE.pm +95 -95
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/MIEUnits.pod +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/MIFF.pm +17 -17
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/MNG.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/MPC.pm +11 -11
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/MPEG.pm +28 -28
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/MPF.pm +22 -22
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/MWG.pm +9 -9
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/MXF.pm +46 -46
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/MakerNotes.pm +61 -59
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Matroska.pm +27 -27
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Microsoft.pm +8 -8
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Minolta.pm +50 -28
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/MinoltaRaw.pm +17 -17
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Nikon.pm +80 -63
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/NikonCapture.pm +29 -29
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/NikonCustom.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/OOXML.pm +20 -20
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Ogg.pm +19 -19
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Olympus.pm +3 -3
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/OpenEXR.pm +16 -16
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/PDF.pm +126 -126
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/PGF.pm +7 -7
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/PICT.pm +18 -18
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/PLIST.pm +39 -39
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/PNG.pm +141 -95
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/PPM.pm +11 -11
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/PSP.pm +14 -14
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Panasonic.pm +82 -37
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/PanasonicRaw.pm +40 -40
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Pentax.pm +86 -14
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/PhaseOne.pm +36 -36
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/PhotoCD.pm +4 -4
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/PhotoMechanic.pm +12 -12
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Photoshop.pm +23 -23
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/PostScript.pm +36 -36
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/PrintIM.pm +10 -10
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Qualcomm.pm +5 -5
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/QuickTime.pm +528 -219
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/README +5 -3
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/RIFF.pm +40 -32
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/RSRC.pm +15 -15
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/RTF.pm +15 -15
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Radiance.pm +9 -9
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Rawzor.pm +19 -19
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Real.pm +43 -43
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Reconyx.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Ricoh.pm +24 -24
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Samsung.pm +41 -15
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Sanyo.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Scalado.pm +5 -5
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Shift.pl +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Shortcuts.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Sigma.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/SigmaRaw.pm +56 -56
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Sony.pm +450 -166
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/SonyIDC.pm +9 -9
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Stim.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/TagInfoXML.pm +6 -4
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/TagLookup.pm +1707 -1468
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/TagNames.pod +568 -102
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Theora.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Torrent.pm +11 -11
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Unknown.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Vorbis.pm +5 -5
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/WriteCanonRaw.pl +51 -51
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/WriteExif.pl +273 -273
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/WriteIPTC.pl +44 -44
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/WritePDF.pl +45 -39
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/WritePNG.pl +86 -40
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/WritePhotoshop.pl +27 -27
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/WritePostScript.pl +47 -47
- data/bin/Image-ExifTool-9.41/lib/Image/ExifTool/WriteQuickTime.pl +344 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/WriteXMP.pl +112 -112
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/Writer.pl +428 -360
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/XMP.pm +195 -104
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/XMP2.pl +1 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/XMPStruct.pl +53 -52
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/ZIP.pm +50 -50
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/lib/Image/ExifTool/iWork.pm +17 -17
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/perl-Image-ExifTool.spec +31 -31
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/AFCP.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/AFCP_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/AFCP_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/AIFF.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/AIFF_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/APE.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/APE_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/APE_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/ASF.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/ASF_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/BMP.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/BMP_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/BigTIFF.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/BigTIFF_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Canon.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/CanonRaw.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/CanonRaw_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/CanonRaw_4.out +5 -7
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/CanonRaw_5.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/CanonRaw_6.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/CanonRaw_7.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/CanonVRD.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/CanonVRD_11.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/CanonVRD_12.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/CanonVRD_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/CanonVRD_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/CanonVRD_4.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/CanonVRD_5.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/CanonVRD_6.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/CanonVRD_7.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/CanonVRD_8.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/CanonVRD_9.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Canon_2.out +4 -3
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Canon_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Casio.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Casio_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Casio_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Casio_4.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Casio_5.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Casio_6.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/DICOM.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/DICOM_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/DNG.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/DNG_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/DNG_3.out +0 -0
- data/bin/Image-ExifTool-9.41/t/DPX.t +28 -0
- data/bin/Image-ExifTool-9.41/t/DPX_2.out +35 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/DV.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/DV_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/DjVu.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/DjVu_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/EXE.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/EXE_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/EXE_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/EXE_4.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/ExifTool.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/ExifTool_16.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/ExifTool_17.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/ExifTool_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/ExifTool_20.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/ExifTool_21.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/ExifTool_22.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/ExifTool_23.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/ExifTool_24.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/ExifTool_25.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/ExifTool_26.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/ExifTool_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/ExifTool_4.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/ExifTool_5.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/ExifTool_6.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/ExifTool_7.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/ExifTool_8.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/ExifTool_9.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/FLAC.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/FLAC_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/FLAC_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/FLIR.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/FLIR_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/FLIR_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Flash.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/FlashPix.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/FlashPix_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Flash_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Flash_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Font.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Font_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Font_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Font_4.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Font_5.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Font_6.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Font_7.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/FotoStation.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/FotoStation_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/FotoStation_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/FujiFilm.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/FujiFilm_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/FujiFilm_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/FujiFilm_4.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/FujiFilm_5.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/GE.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/GE_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/GE_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/GIF.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/GIF_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/GIF_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/GIF_4.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/GIMP.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/GIMP_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/GPS.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/GPS_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/GPS_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/GeoTiff.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/GeoTiff_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/GeoTiff_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Geotag.t +18 -1
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Geotag_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Geotag_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Geotag_5.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Geotag_6.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Geotag_7.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Geotag_8.out +0 -0
- data/bin/Image-ExifTool-9.41/t/Geotag_9.out +7 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/HTML.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/HTML_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/IPTC.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/IPTC_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/IPTC_4.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/IPTC_5.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/IPTC_6.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/IPTC_7.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/IPTC_8.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/ITC.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/ITC_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/InDesign.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/InDesign_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/InDesign_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/InDesign_4.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/JVC.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/JVC_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/JVC_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Jpeg2000.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Jpeg2000_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Jpeg2000_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Jpeg2000_4.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Kodak.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Kodak_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Kodak_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/KyoceraRaw.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/KyoceraRaw_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/LNK.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/LNK_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Lang.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Lang_1.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Lang_10.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Lang_11.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Lang_12.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Lang_13.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Lang_14.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Lang_15.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Lang_16.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Lang_17.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Lang_18.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Lang_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Lang_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Lang_4.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Lang_5.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Lang_6.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Lang_7.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Lang_8.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Lang_9.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/M2TS.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/M2TS_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/MIE.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/MIE_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/MIE_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/MIE_5.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/MIE_6.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/MIFF.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/MIFF_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/MP3.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/MP3_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/MWG.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/MWG_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/MWG_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/MWG_4.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/MWG_5.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/MWG_6.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/MXF.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/MXF_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Matroska.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Matroska_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Minolta.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Minolta_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Minolta_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Minolta_4.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Nikon.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Nikon_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Nikon_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Nikon_4.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Nikon_5.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Nikon_7.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Nikon_8.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Olympus.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Olympus_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Olympus_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Olympus_4.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Olympus_5.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Olympus_6.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Olympus_7.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/OpenEXR.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/OpenEXR_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PDF.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PDF_10.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PDF_11.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PDF_12.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PDF_14.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PDF_15.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PDF_16.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PDF_17.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PDF_18.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PDF_19.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PDF_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PDF_20.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PDF_22.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PDF_4.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PDF_5.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PDF_6.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PDF_7.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PDF_8.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PDF_9.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PGF.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PGF_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PICT.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PICT_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PLIST.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PLIST_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PLIST_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PNG.t +31 -1
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PNG_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PNG_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PNG_4.out +0 -0
- data/bin/Image-ExifTool-9.41/t/PNG_5.out +17 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PPM.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PPM_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PPM_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PSP.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PSP_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Panasonic.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Panasonic_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Panasonic_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Panasonic_4.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Panasonic_5.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Pentax.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Pentax_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Pentax_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Pentax_4.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PhotoCD.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PhotoCD_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PhotoMechanic.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PhotoMechanic_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PhotoMechanic_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Photoshop.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Photoshop_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Photoshop_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PostScript.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PostScript_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/PostScript_3.out +0 -0
- data/bin/Image-ExifTool-9.41/t/QuickTime.t +54 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/QuickTime_2.out +10 -8
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/QuickTime_3.out +10 -8
- data/bin/Image-ExifTool-9.41/t/QuickTime_4.out +16 -0
- data/bin/Image-ExifTool-9.41/t/QuickTime_5.out +12 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/RIFF.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/RIFF_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/RIFF_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/RIFF_4.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/RTF.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/RTF_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Radiance.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Radiance_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Real.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Real_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Real_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Real_4.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Ricoh.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Ricoh_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Ricoh_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Ricoh_4.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Sanyo.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Sanyo_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Sanyo_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Sigma.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Sigma_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Sigma_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Sigma_4.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Sigma_5.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Sony.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Sony_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Sony_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Sony_5.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/TestLib.pm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Torrent.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Torrent_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Unknown.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Unknown_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Unknown_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Vorbis.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Vorbis_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer.t +53 -1
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_10.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_11.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_13.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_14.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_15.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_16.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_17.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_18.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_19.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_22.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_24.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_25.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_26.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_27.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_28.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_29.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_30.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_31.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_32.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_33.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_34.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_35.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_36.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_37.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_38.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_39.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_4.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_40.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_41.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_42.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_43.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_44.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_45.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_46.out +8 -6
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_47.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_48.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_50.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_51.out +0 -0
- data/bin/Image-ExifTool-9.41/t/Writer_52.out +22 -0
- data/bin/Image-ExifTool-9.41/t/Writer_53.out +33 -0
- data/bin/Image-ExifTool-9.41/t/Writer_54.out +2 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_6.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_7.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/Writer_9.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_10.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_11.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_12.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_13.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_14.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_15.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_16.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_17.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_18.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_19.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_20.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_21.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_22.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_23.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_24.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_25.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_26.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_27.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_28.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_29.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_30.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_31.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_32.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_34.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_36.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_37.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_39.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_40.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_41.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_5.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_6.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_7.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_8.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/XMP_9.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/ZIP.t +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/ZIP_2.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/ZIP_3.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/ZIP_4.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/ZIP_5.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/ZIP_6.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/ZIP_7.out +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/AFCP.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/AIFF.aif +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/APE.ape +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/APE.mpc +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/ASF.wmv +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/BMP.bmp +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/BigTIFF.btf +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Canon.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Canon1DmkIII.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/CanonRaw.cr2 +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/CanonRaw.crw +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/CanonVRD.vrd +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/CaptureOne.eip +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Casio.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Casio2.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/CasioQVCI.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/DICOM.dcm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/DNG.dng +0 -0
- data/bin/Image-ExifTool-9.41/t/images/DPX.dpx +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/DV.dv +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/DjVu.djvu +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/EXE.elf +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/EXE.exe +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/EXE.macho +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/ExifTool.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/ExifTool.tif +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/ExtendedXMP.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/FLAC.flac +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/FLAC.ogg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/FLIR.fpf +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/FLIR.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Flash.flv +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Flash.swf +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/FlashPix.ppt +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Font.afm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Font.dfont +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Font.pfa +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Font.pfb +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Font.pfm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Font.ttf +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/FotoStation.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/FujiFilm.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/FujiFilm.raf +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/GE.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/GIF.gif +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/GIMP.xcf +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/GPS.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/GeoTiff.tif +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Geotag.gpx +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Geotag.igc +0 -0
- data/bin/Image-ExifTool-9.41/t/images/Geotag.kml +55 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Geotag.log +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Geotag.xml +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Geotag2.log +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/HTML.html +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/IPTC.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/ITC.itc +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/InDesign.indd +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/JVC.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/JVC2.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Jpeg2000.j2c +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Jpeg2000.jp2 +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Kodak.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/KyoceraRaw.raw +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/LNK.lnk +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/M2TS.mts +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/MIE.mie +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/MIFF.miff +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/MP3.mp3 +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/MWG.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/MXF.mxf +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Matroska.mkv +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Minolta.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Minolta.mrw +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Nikon.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Nikon.nef +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/NikonD2Hs.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/NikonD70.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/OOXML.docx +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Olympus.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Olympus2.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/OlympusE1.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/OpenDoc.ods +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/OpenEXR.exr +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/PDF.pdf +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/PDF2.pdf +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/PGF.pgf +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/PICT.pict +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/PLIST-bin.plist +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/PLIST-xml.plist +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/PNG.png +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/PPM.ppm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/PSP.psp +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Panasonic.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Panasonic.rw2 +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Pentax.avi +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Pentax.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/PhotoCD.pcd +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/PhotoMechanic.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Photoshop.psd +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/PostScript.eps +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/QuickTime.m4a +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/QuickTime.mov +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/RIFF.avi +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/RIFF.wav +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/RIFF.webp +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/RTF.rtf +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Radiance.hdr +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Real.ra +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Real.ram +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Real.rm +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Ricoh.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Ricoh2.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Sanyo.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Sigma.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Sigma.x3f +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/SigmaDP2.x3f +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Sony.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Sony.pmp +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Torrent.torrent +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Unknown.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Vorbis.ogg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/Writer.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/XMP.inx +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/XMP.jpg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/XMP.svg +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/XMP.xml +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/XMP.xmp +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/XMP2.xmp +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/XMP3.xmp +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/XMP4.xmp +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/XMP5.xmp +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/ZIP.gz +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/ZIP.zip +0 -0
- data/bin/{Image-ExifTool-9.37 → Image-ExifTool-9.41}/t/images/iWork.numbers +0 -0
- data/lib/exiftool_vendored.rb +11 -3
- data/lib/exiftool_vendored/version.rb +1 -1
- data/lib/exiftool_vendored/version_extractor.rb +5 -7
- metadata +942 -886
- data/bin/Image-ExifTool-9.37/t/QuickTime.t +0 -31
File without changes
|
@@ -14,7 +14,7 @@ use strict;
|
|
14
14
|
use vars qw($VERSION);
|
15
15
|
use Image::ExifTool qw(:DataAccess :Utils);
|
16
16
|
|
17
|
-
$VERSION = '1.
|
17
|
+
$VERSION = '1.02';
|
18
18
|
|
19
19
|
sub ReadBencode($$);
|
20
20
|
sub ExtractTags($$$;$$@);
|
@@ -183,7 +183,7 @@ sub ReadBencode($$)
|
|
183
183
|
# Returns: number of tags extracted
|
184
184
|
sub ExtractTags($$$;$$@)
|
185
185
|
{
|
186
|
-
my ($
|
186
|
+
my ($et, $hashPtr, $tagTablePtr, $baseID, $baseName, @index) = @_;
|
187
187
|
my $count = 0;
|
188
188
|
my $tag;
|
189
189
|
foreach $tag (sort keys %$hashPtr) {
|
@@ -198,9 +198,9 @@ sub ExtractTags($$$;$$@)
|
|
198
198
|
$name = "Tag$name" if length($name) < 2 or $name !~ /^[A-Z]/;
|
199
199
|
$name = $baseName . $name if defined $baseName; # add base name if necessary
|
200
200
|
AddTagToTable($tagTablePtr, $id, { Name => $name });
|
201
|
-
$
|
201
|
+
$et->VPrint(0, " [adding $id '$name']\n");
|
202
202
|
}
|
203
|
-
my $tagInfo = $
|
203
|
+
my $tagInfo = $et->GetTagInfo($tagTablePtr, $id) or next;
|
204
204
|
if (ref $val eq 'ARRAY') {
|
205
205
|
if ($$tagInfo{JoinPath}) {
|
206
206
|
$val = join '/', @$val;
|
@@ -229,7 +229,7 @@ sub ExtractTags($$$;$$@)
|
|
229
229
|
}
|
230
230
|
AddTagToTable($tagTablePtr, $id, { %$tagInfo, Name => $name });
|
231
231
|
}
|
232
|
-
$tagInfo = $
|
232
|
+
$tagInfo = $et->GetTagInfo($tagTablePtr, $id) or next;
|
233
233
|
}
|
234
234
|
if (ref $val eq 'HASH') {
|
235
235
|
# extract tags from this dictionary
|
@@ -242,10 +242,10 @@ sub ExtractTags($$$;$$@)
|
|
242
242
|
$rootID = $id;
|
243
243
|
$rootName = $$tagInfo{Name};
|
244
244
|
}
|
245
|
-
$count += ExtractTags($
|
245
|
+
$count += ExtractTags($et, $val, $table, $rootID, $rootName, @index);
|
246
246
|
} else {
|
247
247
|
# handle this simple tag value
|
248
|
-
$
|
248
|
+
$et->HandleTag($tagTablePtr, $id, $val);
|
249
249
|
++$count;
|
250
250
|
}
|
251
251
|
}
|
@@ -260,18 +260,18 @@ sub ExtractTags($$$;$$@)
|
|
260
260
|
# Returns: 1 on success, 0 if this wasn't a valid BitTorrent file
|
261
261
|
sub ProcessTorrent($$)
|
262
262
|
{
|
263
|
-
my ($
|
263
|
+
my ($et, $dirInfo) = @_;
|
264
264
|
my $success = 0;
|
265
265
|
my $raf = $$dirInfo{RAF};
|
266
266
|
my $buff = '';
|
267
267
|
pos($buff) = 0;
|
268
268
|
my $dict = ReadBencode($raf, \$buff);
|
269
269
|
my $err = $$raf{BencodeError};
|
270
|
-
$
|
270
|
+
$et->Warn("Bencode error: $err") if $err;
|
271
271
|
if (ref $dict eq 'HASH' and $$dict{announce}) {
|
272
|
-
$
|
272
|
+
$et->SetFileType('TORRENT');
|
273
273
|
my $tagTablePtr = GetTagTable('Image::ExifTool::Torrent::Main');
|
274
|
-
ExtractTags($
|
274
|
+
ExtractTags($et, $dict, $tagTablePtr) and $success = 1;
|
275
275
|
}
|
276
276
|
return $success;
|
277
277
|
}
|
File without changes
|
@@ -17,7 +17,7 @@ use strict;
|
|
17
17
|
use vars qw($VERSION);
|
18
18
|
use Image::ExifTool qw(:DataAccess :Utils);
|
19
19
|
|
20
|
-
$VERSION = '1.
|
20
|
+
$VERSION = '1.07';
|
21
21
|
|
22
22
|
sub ProcessComments($$$);
|
23
23
|
|
@@ -139,7 +139,7 @@ Image::ExifTool::AddCompositeTags('Image::ExifTool::Vorbis');
|
|
139
139
|
# Returns: 1 on success, otherwise returns 0 and sets a Warning
|
140
140
|
sub ProcessComments($$$)
|
141
141
|
{
|
142
|
-
my ($
|
142
|
+
my ($et, $dirInfo, $tagTablePtr) = @_;
|
143
143
|
my $dataPt = $$dirInfo{DataPt};
|
144
144
|
my $dataPos = $$dirInfo{DataPos};
|
145
145
|
my $pos = $$dirInfo{DirStart} || 0;
|
@@ -165,7 +165,7 @@ sub ProcessComments($$$)
|
|
165
165
|
$tag = 'vendor';
|
166
166
|
$val = $buff;
|
167
167
|
$num = ($pos + 4 < $end) ? Get32u($dataPt, $pos) : 0;
|
168
|
-
$
|
168
|
+
$et->VPrint(0, " + [Vorbis comments with $num entries]\n");
|
169
169
|
$pos += 4;
|
170
170
|
}
|
171
171
|
# add tag to table unless it exists already
|
@@ -176,7 +176,7 @@ sub ProcessComments($$$)
|
|
176
176
|
$name =~ s/([a-z0-9])_([a-z])/$1\U$2/g;
|
177
177
|
AddTagToTable($tagTablePtr, $tag, { Name => $name });
|
178
178
|
}
|
179
|
-
$
|
179
|
+
$et->HandleTag($tagTablePtr, $tag, $et->Decode($val, 'UTF8'),
|
180
180
|
Index => $index,
|
181
181
|
DataPt => $dataPt,
|
182
182
|
DataPos => $dataPos,
|
@@ -187,7 +187,7 @@ sub ProcessComments($$$)
|
|
187
187
|
$num-- or return 1;
|
188
188
|
$index = (defined $index) ? $index + 1 : 0;
|
189
189
|
}
|
190
|
-
$
|
190
|
+
$et->Warn('Format error in Vorbis comments');
|
191
191
|
return 0;
|
192
192
|
}
|
193
193
|
|
@@ -60,8 +60,8 @@ my %mapRotation = (
|
|
60
60
|
# Inputs: 0) ExifTool object reference
|
61
61
|
sub InitMakerNotes($)
|
62
62
|
{
|
63
|
-
my $
|
64
|
-
|
63
|
+
my $et = shift;
|
64
|
+
$$et{MAKER_NOTE_INFO} = {
|
65
65
|
Entries => { }, # directory entries keyed by tagID
|
66
66
|
ValBuff => "\0\0\0\0", # value data buffer (start with zero nextIFD pointer)
|
67
67
|
FixupTags => { }, # flags for tags with data in value buffer
|
@@ -76,7 +76,7 @@ sub InitMakerNotes($)
|
|
76
76
|
# file, which isn't sequential (but Canon's version isn't sequential either...)
|
77
77
|
sub BuildMakerNotes($$$$$$)
|
78
78
|
{
|
79
|
-
my ($
|
79
|
+
my ($et, $rawTag, $tagInfo, $valuePt, $formName, $count) = @_;
|
80
80
|
|
81
81
|
my $tagID = $mapRawTag{$rawTag} || return;
|
82
82
|
$formName or warn(sprintf "No format for tag 0x%x!\n",$rawTag), return;
|
@@ -100,7 +100,7 @@ sub BuildMakerNotes($$$$$$)
|
|
100
100
|
$value = $$valuePt;
|
101
101
|
}
|
102
102
|
my $offsetVal;
|
103
|
-
my $makerInfo =
|
103
|
+
my $makerInfo = $$et{MAKER_NOTE_INFO};
|
104
104
|
if ($size > 4) {
|
105
105
|
my $len = length $makerInfo->{ValBuff};
|
106
106
|
$offsetVal = Set32u($len);
|
@@ -122,10 +122,10 @@ sub BuildMakerNotes($$$$$$)
|
|
122
122
|
# Inputs: 0) ExifTool object reference
|
123
123
|
sub SaveMakerNotes($)
|
124
124
|
{
|
125
|
-
my $
|
125
|
+
my $et = shift;
|
126
126
|
# save maker notes
|
127
|
-
my $makerInfo =
|
128
|
-
delete
|
127
|
+
my $makerInfo = $$et{MAKER_NOTE_INFO};
|
128
|
+
delete $$et{MAKER_NOTE_INFO};
|
129
129
|
my $dirEntries = $makerInfo->{Entries};
|
130
130
|
my $numEntries = scalar(keys %$dirEntries);
|
131
131
|
my $fixup = new Image::ExifTool::Fixup;
|
@@ -142,24 +142,24 @@ sub SaveMakerNotes($)
|
|
142
142
|
}
|
143
143
|
# save position of maker notes for pointer fixups
|
144
144
|
$fixup->{Shift} += length($makerNotes);
|
145
|
-
|
146
|
-
|
145
|
+
$$et{MAKER_NOTE_FIXUP} = $fixup;
|
146
|
+
$$et{MAKER_NOTE_BYTE_ORDER} = GetByteOrder();
|
147
147
|
# add value data
|
148
148
|
$makerNotes .= $makerInfo->{ValBuff};
|
149
149
|
# get MakerNotes tag info
|
150
150
|
my $tagTablePtr = Image::ExifTool::GetTagTable('Image::ExifTool::Exif::Main');
|
151
|
-
my $tagInfo = $
|
151
|
+
my $tagInfo = $et->GetTagInfo($tagTablePtr, 0x927c, \$makerNotes);
|
152
152
|
# save the MakerNotes
|
153
|
-
$
|
153
|
+
$et->FoundTag($tagInfo, $makerNotes);
|
154
154
|
# save the garbage collection some work later
|
155
155
|
delete $makerInfo->{Entries};
|
156
156
|
delete $makerInfo->{ValBuff};
|
157
157
|
delete $makerInfo->{FixupTags};
|
158
158
|
# also generate Orientation tag since Rotation isn't transferred from RAW info
|
159
|
-
my $rotation = $
|
159
|
+
my $rotation = $et->GetValue('Rotation', 'ValueConv');
|
160
160
|
if (defined $rotation and defined $mapRotation{$rotation}) {
|
161
|
-
$tagInfo = $
|
162
|
-
$
|
161
|
+
$tagInfo = $et->GetTagInfo($tagTablePtr, 0x112);
|
162
|
+
$et->FoundTag($tagInfo, $mapRotation{$rotation});
|
163
163
|
}
|
164
164
|
}
|
165
165
|
|
@@ -170,10 +170,10 @@ sub SaveMakerNotes($)
|
|
170
170
|
# Returns: error string or undef (and may change value) on success
|
171
171
|
sub CheckCanonRaw($$$)
|
172
172
|
{
|
173
|
-
my ($
|
173
|
+
my ($et, $tagInfo, $valPtr) = @_;
|
174
174
|
my $tagName = $$tagInfo{Name};
|
175
175
|
if ($tagName eq 'JpgFromRaw' or $tagName eq 'ThumbnailImage') {
|
176
|
-
unless ($$valPtr =~ /^\xff\xd8/ or $
|
176
|
+
unless ($$valPtr =~ /^\xff\xd8/ or $et->Options('IgnoreMinorErrors')) {
|
177
177
|
return '[minor] Not a valid image';
|
178
178
|
}
|
179
179
|
} else {
|
@@ -195,7 +195,7 @@ sub CheckCanonRaw($$$)
|
|
195
195
|
# Returns: true on success
|
196
196
|
sub WriteCR2($$$)
|
197
197
|
{
|
198
|
-
my ($
|
198
|
+
my ($et, $dirInfo, $tagTablePtr) = @_;
|
199
199
|
my $dataPt = $$dirInfo{DataPt} or return 0;
|
200
200
|
my $outfile = $$dirInfo{OutFile} or return 0;
|
201
201
|
$$dirInfo{RAF} or return 0;
|
@@ -211,15 +211,15 @@ sub WriteCR2($$$)
|
|
211
211
|
} else {
|
212
212
|
$msg = 'Unrecognized Canon RAW file';
|
213
213
|
}
|
214
|
-
return 0 if $
|
214
|
+
return 0 if $et->Error($msg, $minor);
|
215
215
|
}
|
216
216
|
|
217
217
|
# CR2 has a 16-byte header
|
218
218
|
$$dirInfo{NewDataPos} = 16;
|
219
|
-
my $newData = $
|
219
|
+
my $newData = $et->WriteDirectory($dirInfo, $tagTablePtr);
|
220
220
|
return 0 unless defined $newData;
|
221
221
|
unless ($$dirInfo{LastIFD}) {
|
222
|
-
$
|
222
|
+
$et->Error("CR2 image IFD may not be deleted");
|
223
223
|
return 0;
|
224
224
|
}
|
225
225
|
|
@@ -235,7 +235,7 @@ sub WriteCR2($$$)
|
|
235
235
|
|
236
236
|
# copy over image data now if necessary
|
237
237
|
if (ref $$dirInfo{ImageData}) {
|
238
|
-
$
|
238
|
+
$et->CopyImageData($$dirInfo{ImageData}, $outfile) or return 0;
|
239
239
|
delete $$dirInfo{ImageData};
|
240
240
|
}
|
241
241
|
}
|
@@ -255,16 +255,16 @@ sub WriteCR2($$$)
|
|
255
255
|
# OutFile on the fly --> much faster, efficient, and less demanding on memory!
|
256
256
|
sub WriteCanonRaw($$$)
|
257
257
|
{
|
258
|
-
my ($
|
259
|
-
$
|
258
|
+
my ($et, $dirInfo, $tagTablePtr) = @_;
|
259
|
+
$et or return 1; # allow dummy access to autoload this package
|
260
260
|
my $blockStart = $$dirInfo{DirStart};
|
261
261
|
my $blockSize = $$dirInfo{DirLen};
|
262
262
|
my $raf = $$dirInfo{RAF} or return 0;
|
263
263
|
my $outfile = $$dirInfo{OutFile} or return 0;
|
264
264
|
my $outPos = $$dirInfo{OutPos} or return 0;
|
265
265
|
my $outBase = $outPos;
|
266
|
-
my $verbose = $
|
267
|
-
my $out = $
|
266
|
+
my $verbose = $et->Options('Verbose');
|
267
|
+
my $out = $et->Options('TextOut');
|
268
268
|
my ($buff, $tagInfo);
|
269
269
|
|
270
270
|
# 4 bytes at end of block give directory position within block
|
@@ -279,7 +279,7 @@ sub WriteCanonRaw($$$)
|
|
279
279
|
my $newDir = '';
|
280
280
|
|
281
281
|
# get hash of new information keyed by tagID
|
282
|
-
my $newTags = $
|
282
|
+
my $newTags = $et->GetNewTagInfoHash($tagTablePtr);
|
283
283
|
|
284
284
|
# generate list of tags to add or delete (currently, we only allow JpgFromRaw
|
285
285
|
# and ThumbnailImage, to be added or deleted from the root CanonRaw directory)
|
@@ -307,7 +307,7 @@ sub WriteCanonRaw($$$)
|
|
307
307
|
if (@addTags and (not defined($tag) or $tag >= $addTags[0])) {
|
308
308
|
my $addTag = shift @addTags;
|
309
309
|
$tagInfo = $$newTags{$addTag};
|
310
|
-
my $newVal = $
|
310
|
+
my $newVal = $et->GetNewValues($tagInfo);
|
311
311
|
if (defined $newVal) {
|
312
312
|
# pad value to an even length (Canon ImageBrowser and ZoomBrowser
|
313
313
|
# version 6.1.1 have problems with odd-sized embedded JPEG images
|
@@ -321,7 +321,7 @@ sub WriteCanonRaw($$$)
|
|
321
321
|
Write($outfile, $newVal) or return 0;
|
322
322
|
$outPos += length($newVal); # update current position
|
323
323
|
$verbose > 1 and print $out " + CanonRaw:$$tagInfo{Name}\n";
|
324
|
-
|
324
|
+
++$$et{CHANGED};
|
325
325
|
}
|
326
326
|
# set flag to delete this tag if found later
|
327
327
|
$delTag{$addTag} = 1;
|
@@ -332,7 +332,7 @@ sub WriteCanonRaw($$$)
|
|
332
332
|
my $tagType = ($tag >> 8) & 0x38; # get tag type
|
333
333
|
my $valueInDir = ($tag & 0x4000); # flag for value in directory
|
334
334
|
|
335
|
-
my $tagInfo = $
|
335
|
+
my $tagInfo = $et->GetTagInfo($tagTablePtr,$tagID);
|
336
336
|
my $format = $crwTagFormat{$tagType};
|
337
337
|
my ($count, $subdir);
|
338
338
|
if ($tagInfo) {
|
@@ -363,7 +363,7 @@ sub WriteCanonRaw($$$)
|
|
363
363
|
OutFile => $outfile,
|
364
364
|
OutPos => $outPos,
|
365
365
|
);
|
366
|
-
my $result = $
|
366
|
+
my $result = $et->WriteDirectory(\%subdirInfo, $tagTablePtr);
|
367
367
|
return 0 unless $result;
|
368
368
|
# set size and pointer for this new directory
|
369
369
|
$size = $subdirInfo{OutPos} - $outPos;
|
@@ -406,9 +406,9 @@ sub WriteCanonRaw($$$)
|
|
406
406
|
);
|
407
407
|
#### eval Validate ($dirData, $subdirStart, $size)
|
408
408
|
if (defined $$subdir{Validate} and not eval $$subdir{Validate}) {
|
409
|
-
$
|
409
|
+
$et->Warn("Invalid $name data");
|
410
410
|
} else {
|
411
|
-
$subdir = $
|
411
|
+
$subdir = $et->WriteDirectory(\%subdirInfo, $newTagTable);
|
412
412
|
if (defined $subdir and length $subdir) {
|
413
413
|
if ($subdirStart) {
|
414
414
|
# add header before data directory
|
@@ -421,7 +421,7 @@ sub WriteCanonRaw($$$)
|
|
421
421
|
} elsif ($$newTags{$tagID}) {
|
422
422
|
if ($delTag{$tagID}) {
|
423
423
|
$verbose > 1 and print $out " - CanonRaw:$$tagInfo{Name}\n";
|
424
|
-
|
424
|
+
++$$et{CHANGED};
|
425
425
|
next; # next since we already added this tag
|
426
426
|
}
|
427
427
|
my $oldVal;
|
@@ -430,9 +430,9 @@ sub WriteCanonRaw($$$)
|
|
430
430
|
} else {
|
431
431
|
$oldVal = $value;
|
432
432
|
}
|
433
|
-
my $nvHash = $
|
434
|
-
if ($
|
435
|
-
my $newVal = $
|
433
|
+
my $nvHash = $et->GetNewValueHash($tagInfo);
|
434
|
+
if ($et->IsOverwriting($nvHash, $oldVal)) {
|
435
|
+
my $newVal = $et->GetNewValues($nvHash);
|
436
436
|
my $verboseVal;
|
437
437
|
$verboseVal = $newVal if $verbose > 1;
|
438
438
|
# convert to specified format if necessary
|
@@ -441,9 +441,9 @@ sub WriteCanonRaw($$$)
|
|
441
441
|
}
|
442
442
|
if (defined $newVal) {
|
443
443
|
$value = $newVal;
|
444
|
-
|
445
|
-
$
|
446
|
-
$
|
444
|
+
++$$et{CHANGED};
|
445
|
+
$et->VerboseValue("- CanonRaw:$$tagInfo{Name}", $oldVal);
|
446
|
+
$et->VerboseValue("+ CanonRaw:$$tagInfo{Name}", $verboseVal);
|
447
447
|
}
|
448
448
|
}
|
449
449
|
}
|
@@ -505,7 +505,7 @@ sub WriteCanonRaw($$$)
|
|
505
505
|
# or -1 if a write error occurred
|
506
506
|
sub WriteCRW($$)
|
507
507
|
{
|
508
|
-
my ($
|
508
|
+
my ($et, $dirInfo) = @_;
|
509
509
|
my $outfile = $$dirInfo{OutFile};
|
510
510
|
my $raf = $$dirInfo{RAF};
|
511
511
|
my $rtnVal = 0;
|
@@ -519,18 +519,18 @@ sub WriteCRW($$)
|
|
519
519
|
my $type = $1;
|
520
520
|
my $hlen = Get32u(\$buff, 0); # get header length
|
521
521
|
|
522
|
-
if (
|
522
|
+
if ($$et{DEL_GROUP}{MakerNotes}) {
|
523
523
|
if ($type eq 'CCDR') {
|
524
|
-
$
|
524
|
+
$et->Error("Can't delete MakerNotes group in CRW file");
|
525
525
|
return 0;
|
526
526
|
} else {
|
527
|
-
|
527
|
+
++$$et{CHANGED};
|
528
528
|
return 1;
|
529
529
|
}
|
530
530
|
}
|
531
531
|
# make XMP the preferred group for CRW files
|
532
|
-
if ($$
|
533
|
-
$
|
532
|
+
if ($$et{FILE_TYPE} eq 'CRW') {
|
533
|
+
$et->InitWriteDirs(\%crwMap, 'XMP');
|
534
534
|
}
|
535
535
|
|
536
536
|
# write header
|
@@ -554,7 +554,7 @@ sub WriteCRW($$)
|
|
554
554
|
);
|
555
555
|
# process the raw directory
|
556
556
|
my $tagTablePtr = Image::ExifTool::GetTagTable('Image::ExifTool::CanonRaw::Main');
|
557
|
-
my $success = $
|
557
|
+
my $success = $et->WriteDirectory(\%dirInfo, $tagTablePtr);
|
558
558
|
|
559
559
|
my $trailPt;
|
560
560
|
while ($success) {
|
@@ -563,7 +563,7 @@ sub WriteCRW($$)
|
|
563
563
|
# rewrite the trailer(s)
|
564
564
|
$buff = '';
|
565
565
|
$$trailInfo{OutFile} = \$buff;
|
566
|
-
$success = $
|
566
|
+
$success = $et->ProcessTrailers($trailInfo) or last;
|
567
567
|
$trailPt = $$trailInfo{OutFile};
|
568
568
|
# nothing to write if trailers were deleted
|
569
569
|
undef $trailPt if length($$trailPt) < 4;
|
@@ -571,13 +571,13 @@ sub WriteCRW($$)
|
|
571
571
|
}
|
572
572
|
if ($success) {
|
573
573
|
# add CanonVRD trailer if writing as a block
|
574
|
-
$trailPt = $
|
575
|
-
if (not $trailPt and $$
|
574
|
+
$trailPt = $et->AddNewTrailers($trailPt,'CanonVRD');
|
575
|
+
if (not $trailPt and $$et{ADD_DIRS}{CanonVRD}) {
|
576
576
|
# create CanonVRD from scratch if necessary
|
577
577
|
my $outbuff = '';
|
578
578
|
my $saveOrder = GetByteOrder();
|
579
579
|
require Image::ExifTool::CanonVRD;
|
580
|
-
if (Image::ExifTool::CanonVRD::ProcessCanonVRD($
|
580
|
+
if (Image::ExifTool::CanonVRD::ProcessCanonVRD($et, { OutFile => \$outbuff }) > 0) {
|
581
581
|
$trailPt = \$outbuff;
|
582
582
|
}
|
583
583
|
SetByteOrder($saveOrder);
|
@@ -592,7 +592,7 @@ sub WriteCRW($$)
|
|
592
592
|
}
|
593
593
|
$rtnVal = $err ? -1 : 1;
|
594
594
|
} else {
|
595
|
-
$
|
595
|
+
$et->Error('Error rewriting CRW file');
|
596
596
|
}
|
597
597
|
return $rtnVal;
|
598
598
|
}
|
@@ -1318,10 +1318,10 @@ sub GetCFAPattern($)
|
|
1318
1318
|
# Returns: error string or undef (and possibly changes value) on success
|
1319
1319
|
sub CheckExif($$$)
|
1320
1320
|
{
|
1321
|
-
my ($
|
1322
|
-
my $format = $$tagInfo{Format} || $$tagInfo{Writable} ||
|
1321
|
+
my ($et, $tagInfo, $valPtr) = @_;
|
1322
|
+
my $format = $$tagInfo{Format} || $$tagInfo{Writable} || $$tagInfo{Table}{WRITABLE};
|
1323
1323
|
if (not $format or $format eq '1') {
|
1324
|
-
if (
|
1324
|
+
if ($$tagInfo{Groups}{0} eq 'MakerNotes') {
|
1325
1325
|
return undef; # OK to have no format for makernotes
|
1326
1326
|
} else {
|
1327
1327
|
return 'No writable format';
|
@@ -1337,11 +1337,11 @@ sub CheckExif($$$)
|
|
1337
1337
|
# Note: MUST be called Raw conversion time so the EXIF byte order is known!
|
1338
1338
|
sub EncodeExifText($$)
|
1339
1339
|
{
|
1340
|
-
my ($
|
1340
|
+
my ($et, $val) = @_;
|
1341
1341
|
# does the string contain special characters?
|
1342
1342
|
if ($val =~ /[\x80-\xff]/) {
|
1343
|
-
my $order = $
|
1344
|
-
return "UNICODE\0" . $
|
1343
|
+
my $order = $et->GetNewValues('ExifUnicodeByteOrder');
|
1344
|
+
return "UNICODE\0" . $et->Encode($val,'UTF16',$order);
|
1345
1345
|
} else {
|
1346
1346
|
return "ASCII\0\0\0$val";
|
1347
1347
|
}
|
@@ -1355,7 +1355,7 @@ sub InsertWritableProperties($$;$)
|
|
1355
1355
|
{
|
1356
1356
|
my ($tagTablePtr, $writeTablePtr, $checkProc) = @_;
|
1357
1357
|
my $tag;
|
1358
|
-
$checkProc and
|
1358
|
+
$checkProc and $$tagTablePtr{CHECK_PROC} = $checkProc;
|
1359
1359
|
foreach $tag (keys %$writeTablePtr) {
|
1360
1360
|
my $writeInfo = $$writeTablePtr{$tag};
|
1361
1361
|
my @infoList = GetTagInfoList($tagTablePtr, $tag);
|
@@ -1384,7 +1384,7 @@ sub InsertWritableProperties($$;$)
|
|
1384
1384
|
# Returns: new maker note data (and creates MAKER_NOTE_FIXUP), or undef on error
|
1385
1385
|
sub RebuildMakerNotes($$$)
|
1386
1386
|
{
|
1387
|
-
my ($
|
1387
|
+
my ($et, $tagTablePtr, $dirInfo) = @_;
|
1388
1388
|
my $dirStart = $$dirInfo{DirStart};
|
1389
1389
|
my $dirLen = $$dirInfo{DirLen};
|
1390
1390
|
my $dataPt = $$dirInfo{DataPt};
|
@@ -1392,7 +1392,7 @@ sub RebuildMakerNotes($$$)
|
|
1392
1392
|
my $rtnValue;
|
1393
1393
|
my %subdirInfo = %$dirInfo;
|
1394
1394
|
|
1395
|
-
delete
|
1395
|
+
delete $$et{MAKER_NOTE_FIXUP};
|
1396
1396
|
|
1397
1397
|
# don't need to rebuild text, BinaryData or PreviewImage maker notes
|
1398
1398
|
my $tagInfo = $$dirInfo{TagInfo};
|
@@ -1406,40 +1406,40 @@ sub RebuildMakerNotes($$$)
|
|
1406
1406
|
return substr($$dataPt, $dirStart, $dirLen);
|
1407
1407
|
}
|
1408
1408
|
my $saveOrder = GetByteOrder();
|
1409
|
-
my $loc = Image::ExifTool::MakerNotes::LocateIFD($
|
1409
|
+
my $loc = Image::ExifTool::MakerNotes::LocateIFD($et,\%subdirInfo);
|
1410
1410
|
if (defined $loc) {
|
1411
1411
|
my $makerFixup = $subdirInfo{Fixup} = new Image::ExifTool::Fixup;
|
1412
1412
|
# create new exiftool object to rewrite the directory without changing it
|
1413
1413
|
my $newTool = new Image::ExifTool;
|
1414
1414
|
$newTool->Options(
|
1415
|
-
IgnoreMinorErrors => $$
|
1416
|
-
FixBase => $$
|
1415
|
+
IgnoreMinorErrors => $$et{OPTIONS}{IgnoreMinorErrors},
|
1416
|
+
FixBase => $$et{OPTIONS}{FixBase},
|
1417
1417
|
);
|
1418
1418
|
$newTool->Init(); # must do this before calling WriteDirectory()!
|
1419
1419
|
# don't copy over preview image
|
1420
1420
|
$newTool->SetNewValue(PreviewImage => '');
|
1421
1421
|
# copy all transient members over in case they are used for writing
|
1422
1422
|
# (Make, Model, etc)
|
1423
|
-
foreach (grep /[a-z]/, keys %$
|
1424
|
-
$$newTool{$_} = $$
|
1423
|
+
foreach (grep /[a-z]/, keys %$et) {
|
1424
|
+
$$newTool{$_} = $$et{$_};
|
1425
1425
|
}
|
1426
1426
|
# fix base offsets if specified
|
1427
|
-
$newTool->Options(FixBase => $
|
1427
|
+
$newTool->Options(FixBase => $et->Options('FixBase'));
|
1428
1428
|
# set GENERATE_PREVIEW_INFO flag so PREVIEW_INFO will be generated
|
1429
|
-
|
1429
|
+
$$newTool{GENERATE_PREVIEW_INFO} = 1;
|
1430
1430
|
# drop any large tags
|
1431
|
-
|
1431
|
+
$$newTool{DROP_TAGS} = 1;
|
1432
1432
|
# initialize other necessary data members
|
1433
|
-
|
1434
|
-
|
1433
|
+
$$newTool{FILE_TYPE} = $$et{FILE_TYPE};
|
1434
|
+
$$newTool{TIFF_TYPE} = $$et{TIFF_TYPE};
|
1435
1435
|
# rewrite maker notes
|
1436
1436
|
$rtnValue = $newTool->WriteDirectory(\%subdirInfo, $tagTablePtr);
|
1437
1437
|
if (defined $rtnValue and length $rtnValue) {
|
1438
1438
|
# add the dummy/empty preview image if necessary
|
1439
|
-
if (
|
1439
|
+
if ($$newTool{PREVIEW_INFO}) {
|
1440
1440
|
$makerFixup->SetMarkerPointers(\$rtnValue, 'PreviewImage', length($rtnValue));
|
1441
|
-
$rtnValue .=
|
1442
|
-
delete
|
1441
|
+
$rtnValue .= $$newTool{PREVIEW_INFO}{Data};
|
1442
|
+
delete $$newTool{PREVIEW_INFO};
|
1443
1443
|
}
|
1444
1444
|
# add makernote header
|
1445
1445
|
if ($loc) {
|
@@ -1448,25 +1448,25 @@ sub RebuildMakerNotes($$$)
|
|
1448
1448
|
# (in JPEG, Pentax makernotes are absolute and start with "AOC\0")
|
1449
1449
|
if ($hdr =~ s/^(PENTAX |SAMSUNG)\0/AOC\0/) {
|
1450
1450
|
# save fixup so we will adjust to absolute offsets when writing
|
1451
|
-
|
1451
|
+
$$et{MAKER_NOTE_FIXUP} = $makerFixup;
|
1452
1452
|
}
|
1453
1453
|
$rtnValue = $hdr . $rtnValue;
|
1454
1454
|
# adjust fixup for shift in start position
|
1455
|
-
|
1455
|
+
$$makerFixup{Start} += length $hdr;
|
1456
1456
|
}
|
1457
1457
|
# shift offsets according to original position of maker notes,
|
1458
1458
|
# and relative to the makernotes Base
|
1459
|
-
|
1460
|
-
|
1459
|
+
$$makerFixup{Shift} += $dataPos + $dirStart +
|
1460
|
+
$$dirInfo{Base} - $subdirInfo{Base};
|
1461
1461
|
# repair incorrect offsets if offsets were fixed
|
1462
|
-
|
1462
|
+
$$makerFixup{Shift} += $subdirInfo{FixedBy} || 0;
|
1463
1463
|
# fix up pointers to the specified offset
|
1464
1464
|
$makerFixup->ApplyFixup(\$rtnValue);
|
1465
1465
|
# save fixup information unless offsets were relative
|
1466
1466
|
unless ($subdirInfo{Relative}) {
|
1467
1467
|
# set shift so offsets are all relative to start of maker notes
|
1468
|
-
|
1469
|
-
|
1468
|
+
$$makerFixup{Shift} -= $dataPos + $dirStart;
|
1469
|
+
$$et{MAKER_NOTE_FIXUP} = $makerFixup; # save fixup for later
|
1470
1470
|
}
|
1471
1471
|
}
|
1472
1472
|
}
|
@@ -1575,11 +1575,11 @@ sub GetOffList($$$$$)
|
|
1575
1575
|
# Inputs: 0) ExifTool ref, 1) end of valid TIFF data
|
1576
1576
|
sub UpdateTiffEnd($$)
|
1577
1577
|
{
|
1578
|
-
my ($
|
1579
|
-
if (defined
|
1580
|
-
|
1578
|
+
my ($et, $end) = @_;
|
1579
|
+
if (defined $$et{TIFF_END} and
|
1580
|
+
$$et{TIFF_END} < $end)
|
1581
1581
|
{
|
1582
|
-
|
1582
|
+
$$et{TIFF_END} = $end;
|
1583
1583
|
}
|
1584
1584
|
}
|
1585
1585
|
|
@@ -1589,14 +1589,14 @@ sub UpdateTiffEnd($$)
|
|
1589
1589
|
# Returns: undef on fatal error, or '' if minor error is ignored
|
1590
1590
|
sub ExifErr($$$)
|
1591
1591
|
{
|
1592
|
-
my ($
|
1592
|
+
my ($et, $errStr, $tagTablePtr) = @_;
|
1593
1593
|
# MakerNote errors are minor by default
|
1594
|
-
my $minor = (
|
1595
|
-
if (
|
1596
|
-
$
|
1594
|
+
my $minor = ($$tagTablePtr{GROUPS}{0} eq 'MakerNotes');
|
1595
|
+
if ($$tagTablePtr{VARS} and $$tagTablePtr{VARS}{MINOR_ERRORS}) {
|
1596
|
+
$et->Warn("$errStr. IFD dropped.") and return '' if $minor;
|
1597
1597
|
$minor = 1;
|
1598
1598
|
}
|
1599
|
-
return undef if $
|
1599
|
+
return undef if $et->Error($errStr, $minor);
|
1600
1600
|
return '';
|
1601
1601
|
}
|
1602
1602
|
|
@@ -1607,12 +1607,12 @@ sub ExifErr($$$)
|
|
1607
1607
|
# Writing: new data block or undef on error
|
1608
1608
|
sub ProcessTiffIFD($$$)
|
1609
1609
|
{
|
1610
|
-
my ($
|
1611
|
-
$
|
1610
|
+
my ($et, $dirInfo, $tagTablePtr) = @_;
|
1611
|
+
$et or return 1; # allow dummy access
|
1612
1612
|
my $raf = $$dirInfo{RAF};
|
1613
1613
|
my $base = $$dirInfo{Base} || 0;
|
1614
1614
|
my $dirName = $$dirInfo{DirName};
|
1615
|
-
my $magic =
|
1615
|
+
my $magic = $$dirInfo{Subdir}{Magic} || 0x002a;
|
1616
1616
|
my $buff;
|
1617
1617
|
|
1618
1618
|
# structured with a TIFF-like header and relative offsets
|
@@ -1620,10 +1620,10 @@ sub ProcessTiffIFD($$$)
|
|
1620
1620
|
unless (SetByteOrder(substr($buff,0,2)) and Get16u(\$buff, 2) == $magic) {
|
1621
1621
|
my $msg = "Invalid $dirName header";
|
1622
1622
|
if ($$dirInfo{IsWriting}) {
|
1623
|
-
$
|
1623
|
+
$et->Error($msg);
|
1624
1624
|
return undef;
|
1625
1625
|
} else {
|
1626
|
-
$
|
1626
|
+
$et->Warn($msg);
|
1627
1627
|
return 0;
|
1628
1628
|
}
|
1629
1629
|
}
|
@@ -1642,19 +1642,19 @@ sub ProcessTiffIFD($$$)
|
|
1642
1642
|
);
|
1643
1643
|
if ($$dirInfo{IsWriting}) {
|
1644
1644
|
# rewrite the Camera Profile IFD
|
1645
|
-
my $newDir = WriteExif($
|
1645
|
+
my $newDir = WriteExif($et, \%dirInfo, $tagTablePtr);
|
1646
1646
|
# don't add header if error writing directory ($newDir is undef)
|
1647
1647
|
# or if directory is being deleted ($newDir is empty)
|
1648
1648
|
return $newDir unless $newDir;
|
1649
1649
|
# return directory with TIFF-like header
|
1650
1650
|
return GetByteOrder() . Set16u($magic) . Set32u(8) . $newDir;
|
1651
1651
|
}
|
1652
|
-
if (
|
1652
|
+
if ($$et{HTML_DUMP}) {
|
1653
1653
|
my $tip = sprintf("Byte order: %s endian\nIdentifier: 0x%.4x\n%s offset: 0x%.4x",
|
1654
1654
|
(GetByteOrder() eq 'II') ? 'Little' : 'Big', $magic, $dirName, $offset);
|
1655
|
-
$
|
1655
|
+
$et->HDump($base, 8, "$dirName header", $tip, 0);
|
1656
1656
|
}
|
1657
|
-
return ProcessExif($
|
1657
|
+
return ProcessExif($et, \%dirInfo, $tagTablePtr);
|
1658
1658
|
}
|
1659
1659
|
|
1660
1660
|
#------------------------------------------------------------------------------
|
@@ -1671,8 +1671,8 @@ sub ProcessTiffIFD($$$)
|
|
1671
1671
|
# 5. Thumbnail and/or image data for each IFD, with IFD0 image last
|
1672
1672
|
sub WriteExif($$$)
|
1673
1673
|
{
|
1674
|
-
my ($
|
1675
|
-
$
|
1674
|
+
my ($et, $dirInfo, $tagTablePtr) = @_;
|
1675
|
+
$et or return 1; # allow dummy access to autoload this package
|
1676
1676
|
my $origDirInfo = $dirInfo; # save original dirInfo
|
1677
1677
|
my $dataPt = $$dirInfo{DataPt};
|
1678
1678
|
unless ($dataPt) {
|
@@ -1689,8 +1689,8 @@ sub WriteExif($$$)
|
|
1689
1689
|
my $dirName = $$dirInfo{DirName} || 'unknown';
|
1690
1690
|
my $fixup = $$dirInfo{Fixup} || new Image::ExifTool::Fixup;
|
1691
1691
|
my $imageDataFlag = $$dirInfo{ImageData} || '';
|
1692
|
-
my $verbose = $
|
1693
|
-
my $out = $
|
1692
|
+
my $verbose = $et->Options('Verbose');
|
1693
|
+
my $out = $et->Options('TextOut');
|
1694
1694
|
my ($nextIfdPos, %offsetData, $inMakerNotes);
|
1695
1695
|
my (@offsetInfo, %xDelete, $strEnc);
|
1696
1696
|
my $deleteAll = 0;
|
@@ -1700,11 +1700,11 @@ sub WriteExif($$$)
|
|
1700
1700
|
$name = $dirName unless $name and $dirName eq 'MakerNotes' and $name !~ /^MakerNote/;
|
1701
1701
|
|
1702
1702
|
# set encoding for strings
|
1703
|
-
$strEnc = $
|
1703
|
+
$strEnc = $et->Options('CharsetEXIF') if $$tagTablePtr{GROUPS}{0} eq 'EXIF';
|
1704
1704
|
|
1705
1705
|
# allow multiple IFD's in IFD0-IFD1-IFD2... chain
|
1706
1706
|
$$dirInfo{Multi} = 1 if $dirName =~ /^(IFD0|SubIFD)$/ and not defined $$dirInfo{Multi};
|
1707
|
-
$inMakerNotes = 1 if
|
1707
|
+
$inMakerNotes = 1 if $$tagTablePtr{GROUPS}{0} eq 'MakerNotes';
|
1708
1708
|
my $ifd;
|
1709
1709
|
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
1710
1710
|
# loop through each IFD
|
@@ -1729,12 +1729,12 @@ sub WriteExif($$$)
|
|
1729
1729
|
my $offset = $dirStart + $dataPos;
|
1730
1730
|
my ($buff, $buf2);
|
1731
1731
|
unless ($raf->Seek($offset + $base, 0) and $raf->Read($buff,2) == 2) {
|
1732
|
-
return ExifErr($
|
1732
|
+
return ExifErr($et, "Bad IFD or truncated file in $name", $tagTablePtr);
|
1733
1733
|
}
|
1734
1734
|
my $len = 12 * Get16u(\$buff,0);
|
1735
1735
|
# (also read next IFD pointer if available)
|
1736
1736
|
unless ($raf->Read($buf2, $len+4) >= $len) {
|
1737
|
-
return ExifErr($
|
1737
|
+
return ExifErr($et, "Error reading $name", $tagTablePtr);
|
1738
1738
|
}
|
1739
1739
|
$buff .= $buf2;
|
1740
1740
|
# make copy of dirInfo since we're going to modify it
|
@@ -1748,12 +1748,12 @@ sub WriteExif($$$)
|
|
1748
1748
|
$dirLen = $$dirInfo{DirLen} = $dataLen;
|
1749
1749
|
# only account for nextIFD pointer if we are going to use it
|
1750
1750
|
$len += 4 if $dataLen==$len+6 and ($$dirInfo{Multi} or $buff =~ /\0{4}$/);
|
1751
|
-
UpdateTiffEnd($
|
1751
|
+
UpdateTiffEnd($et, $offset+$base+2+$len);
|
1752
1752
|
} elsif ($dirLen) {
|
1753
1753
|
# error if we can't load IFD (unless we are creating
|
1754
1754
|
# from scratch, in which case dirLen will be zero)
|
1755
|
-
my $str = $
|
1756
|
-
$
|
1755
|
+
my $str = $et->Options('IgnoreMinorErrors') ? 'Deleted bad' : 'Bad';
|
1756
|
+
$et->Error("$str $name directory", 1);
|
1757
1757
|
}
|
1758
1758
|
}
|
1759
1759
|
my ($index, $dirEnd, $numEntries);
|
@@ -1761,7 +1761,7 @@ sub WriteExif($$$)
|
|
1761
1761
|
$numEntries = Get16u($dataPt, $dirStart);
|
1762
1762
|
$dirEnd = $dirStart + 2 + 12 * $numEntries;
|
1763
1763
|
if ($dirEnd > $dataLen) {
|
1764
|
-
return ExifErr($
|
1764
|
+
return ExifErr($et, "Truncated $name directory", $tagTablePtr);
|
1765
1765
|
}
|
1766
1766
|
# sort entries if necessary (but not in maker notes IFDs)
|
1767
1767
|
unless ($inMakerNotes) {
|
@@ -1771,7 +1771,7 @@ sub WriteExif($$$)
|
|
1771
1771
|
# check for proper sequence (but ignore null entries at end)
|
1772
1772
|
if ($tagID < $lastID and $tagID) {
|
1773
1773
|
SortIFD($dataPt, $dirStart, $numEntries);
|
1774
|
-
$
|
1774
|
+
$et->Warn("Entries in $name were out of sequence. Fixed.",1);
|
1775
1775
|
last;
|
1776
1776
|
}
|
1777
1777
|
$lastID = $tagID;
|
@@ -1785,14 +1785,14 @@ sub WriteExif($$$)
|
|
1785
1785
|
# loop through new values and accumulate all information for this IFD
|
1786
1786
|
my (%set, %mayDelete, $tagInfo);
|
1787
1787
|
my $wrongDir = $crossDelete{$dirName};
|
1788
|
-
foreach $tagInfo ($
|
1788
|
+
foreach $tagInfo ($et->GetNewTagInfoList($tagTablePtr)) {
|
1789
1789
|
my $tagID = $$tagInfo{TagID};
|
1790
1790
|
# evaluate conditional lists now if necessary
|
1791
|
-
if (ref
|
1792
|
-
my $curInfo = $
|
1791
|
+
if (ref $$tagTablePtr{$tagID} eq 'ARRAY' or $$tagInfo{Condition}) {
|
1792
|
+
my $curInfo = $et->GetTagInfo($tagTablePtr, $tagID);
|
1793
1793
|
if (defined $curInfo and not $curInfo) {
|
1794
1794
|
# need value to evaluate the condition
|
1795
|
-
my ($val) = $
|
1795
|
+
my ($val) = $et->GetNewValues($tagInfo);
|
1796
1796
|
# must convert to binary for evaluating in Condition
|
1797
1797
|
if ($$tagInfo{Format} and defined $val) {
|
1798
1798
|
$val = WriteValue($val, $$tagInfo{Format}, $$tagInfo{Count});
|
@@ -1815,7 +1815,7 @@ sub WriteExif($$$)
|
|
1815
1815
|
}
|
1816
1816
|
}
|
1817
1817
|
}
|
1818
|
-
$curInfo = $
|
1818
|
+
$curInfo = $et->GetTagInfo($tagTablePtr, $tagID, \$val, $fmt, $cnt);
|
1819
1819
|
} else {
|
1820
1820
|
# may want to delete this, but we need to see the value first
|
1821
1821
|
$mayDelete{$tagID} = 1;
|
@@ -1825,25 +1825,25 @@ sub WriteExif($$$)
|
|
1825
1825
|
next unless defined $curInfo and $curInfo eq $tagInfo;
|
1826
1826
|
}
|
1827
1827
|
if ($$tagInfo{WriteCondition}) {
|
1828
|
-
my $self = $
|
1828
|
+
my $self = $et; # set $self to be used in eval
|
1829
1829
|
#### eval WriteCondition ($self)
|
1830
1830
|
unless (eval $$tagInfo{WriteCondition}) {
|
1831
1831
|
$@ and warn $@;
|
1832
1832
|
next;
|
1833
1833
|
}
|
1834
1834
|
}
|
1835
|
-
my $nvHash = $
|
1835
|
+
my $nvHash = $et->GetNewValueHash($tagInfo, $dirName);
|
1836
1836
|
unless ($nvHash) {
|
1837
1837
|
next unless $wrongDir;
|
1838
1838
|
# delete stuff from the wrong directory if setting somewhere else
|
1839
|
-
$nvHash = $
|
1839
|
+
$nvHash = $et->GetNewValueHash($tagInfo, $wrongDir);
|
1840
1840
|
# don't cross delete if not overwriting
|
1841
|
-
next unless $
|
1841
|
+
next unless $et->IsOverwriting($nvHash);
|
1842
1842
|
# don't cross delete if specifically deleting from the other directory
|
1843
1843
|
# (Note: don't call GetValue() here because it shouldn't be called
|
1844
1844
|
# if IsOverwriting returns < 0 -- ie. when shifting)
|
1845
|
-
next if not defined $$nvHash{Value} and
|
1846
|
-
lc(
|
1845
|
+
next if not defined $$nvHash{Value} and $$nvHash{WantGroup} and
|
1846
|
+
lc($$nvHash{WantGroup}) eq lc($wrongDir);
|
1847
1847
|
# remove this tag if found in this IFD
|
1848
1848
|
$xDelete{$tagID} = 1;
|
1849
1849
|
}
|
@@ -1856,7 +1856,7 @@ sub WriteExif($$$)
|
|
1856
1856
|
if ($tagID == 0x927c and $dirName =~ /^(ExifIFD|IFD0)$/) {
|
1857
1857
|
next if $$tagInfo{Name} eq 'PreviewImage';
|
1858
1858
|
} else {
|
1859
|
-
$
|
1859
|
+
$et->Warn(sprintf("Multiple new values for $name tag 0x%.4x",$tagID));
|
1860
1860
|
}
|
1861
1861
|
}
|
1862
1862
|
$set{$tagID} = $tagInfo;
|
@@ -1864,8 +1864,8 @@ sub WriteExif($$$)
|
|
1864
1864
|
|
1865
1865
|
# fix base offsets (some cameras incorrectly write maker notes in IFD0)
|
1866
1866
|
if ($dirName eq 'MakerNotes' and $$dirInfo{Parent} =~ /^(ExifIFD|IFD0)$/ and
|
1867
|
-
$$
|
1868
|
-
Image::ExifTool::MakerNotes::FixBase($
|
1867
|
+
$$et{TIFF_TYPE} !~ /^(ARW|SR2)$/ and not $$et{LeicaTrailerPos} and
|
1868
|
+
Image::ExifTool::MakerNotes::FixBase($et, $dirInfo))
|
1869
1869
|
{
|
1870
1870
|
# update local variables from fixed values
|
1871
1871
|
$base = $$dirInfo{Base};
|
@@ -1877,11 +1877,11 @@ sub WriteExif($$$)
|
|
1877
1877
|
my ($allMandatory, $addMandatory);
|
1878
1878
|
if ($mandatory) {
|
1879
1879
|
# use X/Y resolution values from JFIF if available
|
1880
|
-
if ($dirName eq 'IFD0' and defined $$
|
1880
|
+
if ($dirName eq 'IFD0' and defined $$et{JFIFYResolution}) {
|
1881
1881
|
my %ifd0Vals = %$mandatory;
|
1882
|
-
$ifd0Vals{0x011a} = $$
|
1883
|
-
$ifd0Vals{0x011b} = $$
|
1884
|
-
$ifd0Vals{0x0128} = $$
|
1882
|
+
$ifd0Vals{0x011a} = $$et{JFIFXResolution};
|
1883
|
+
$ifd0Vals{0x011b} = $$et{JFIFYResolution};
|
1884
|
+
$ifd0Vals{0x0128} = $$et{JFIFResolutionUnit} + 1;
|
1885
1885
|
$mandatory = \%ifd0Vals;
|
1886
1886
|
}
|
1887
1887
|
$allMandatory = $addMandatory = 0; # initialize to zero
|
@@ -1908,7 +1908,7 @@ sub WriteExif($$$)
|
|
1908
1908
|
@newTags = sort { $a <=> $b } @newTags if @newTags > 1;
|
1909
1909
|
} else {
|
1910
1910
|
# get a hash of directories we will be writing in this one
|
1911
|
-
$addDirs = $
|
1911
|
+
$addDirs = $et->GetAddDirHash($tagTablePtr, $dirName);
|
1912
1912
|
# make a union of tags & dirs (can set whole dirs, like MakerNotes)
|
1913
1913
|
my %allTags = ( %set, %$addDirs );
|
1914
1914
|
# make sorted list of new tags to be added
|
@@ -1929,7 +1929,7 @@ sub WriteExif($$$)
|
|
1929
1929
|
my $newID = -1;
|
1930
1930
|
|
1931
1931
|
# patch for Canon EOS 40D firmware 1.0.4 bug (incorrect directory counts)
|
1932
|
-
if ($inMakerNotes and $$
|
1932
|
+
if ($inMakerNotes and $$et{Model} eq 'Canon EOS 40D') {
|
1933
1933
|
my $fmt = Get16u($dataPt, $dirStart + 2 + 12 * ($numEntries - 1) + 2);
|
1934
1934
|
if ($fmt < 1 or $fmt > 13) {
|
1935
1935
|
# adjust the number of directory entries
|
@@ -1959,14 +1959,14 @@ Entry: for (;;) {
|
|
1959
1959
|
# patch to preserve invalid directory entries in SubIFD3 of
|
1960
1960
|
# various Kodak Z-series cameras (Z812, Z1085IS, Z1275)
|
1961
1961
|
# and some Sony cameras such as the DSC-P10
|
1962
|
-
if ($dirName eq 'MakerNotes' and (($$
|
1962
|
+
if ($dirName eq 'MakerNotes' and (($$et{Make}=~/KODAK/i and
|
1963
1963
|
$$dirInfo{Name} and $$dirInfo{Name} eq 'SubIFD3') or
|
1964
|
-
($numEntries == 12 and $$
|
1964
|
+
($numEntries == 12 and $$et{Make} eq 'SONY' and $index >= 8)))
|
1965
1965
|
{
|
1966
1966
|
$dirBuff .= substr($$dataPt, $entry, 12);
|
1967
1967
|
++$index;
|
1968
1968
|
$newID = $oldID; # we wrote this
|
1969
|
-
$
|
1969
|
+
$et->Warn($msg, 1);
|
1970
1970
|
next;
|
1971
1971
|
}
|
1972
1972
|
# don't write out null directory entry
|
@@ -1978,7 +1978,7 @@ Entry: for (;;) {
|
|
1978
1978
|
$newID = $oldID; # pretend we wrote this
|
1979
1979
|
next;
|
1980
1980
|
}
|
1981
|
-
return ExifErr($
|
1981
|
+
return ExifErr($et, $msg, $tagTablePtr);
|
1982
1982
|
}
|
1983
1983
|
$readFormName = $oldFormName = $formatName[$oldFormat];
|
1984
1984
|
$valueDataPt = $dataPt;
|
@@ -1990,9 +1990,9 @@ Entry: for (;;) {
|
|
1990
1990
|
if (ref $oldInfo ne 'HASH' or $$oldInfo{Condition}) {
|
1991
1991
|
# must get unknown tags too
|
1992
1992
|
# (necessary so we don't miss a tag we want to Drop)
|
1993
|
-
my $unk = $
|
1994
|
-
$oldInfo = $
|
1995
|
-
$
|
1993
|
+
my $unk = $et->Options(Unknown => 1);
|
1994
|
+
$oldInfo = $et->GetTagInfo($tagTablePtr, $oldID);
|
1995
|
+
$et->Options(Unknown => $unk);
|
1996
1996
|
}
|
1997
1997
|
# patch incorrect count in Kodak SubIFD3 tags
|
1998
1998
|
if ($oldCount < 2 and $oldInfo and $$oldInfo{FixCount}) {
|
@@ -2015,9 +2015,9 @@ Entry: for (;;) {
|
|
2015
2015
|
#### eval FixOffsets ($valuePtr, $valEnd, $size, $tagID, $wFlag)
|
2016
2016
|
eval $$dirInfo{FixOffsets};
|
2017
2017
|
unless (defined $valuePtr) {
|
2018
|
-
unless ($$
|
2018
|
+
unless ($$et{DROP_TAGS}) {
|
2019
2019
|
my $tagStr = $oldInfo ? $$oldInfo{Name} : sprintf("tag 0x%.4x",$oldID);
|
2020
|
-
return undef if $
|
2020
|
+
return undef if $et->Error("Bad $name offset for $tagStr", $inMakerNotes);
|
2021
2021
|
}
|
2022
2022
|
++$index; $oldID = $newID; next; # drop this tag
|
2023
2023
|
}
|
@@ -2026,7 +2026,7 @@ Entry: for (;;) {
|
|
2026
2026
|
my $suspect = ($valuePtr < 8);
|
2027
2027
|
# convert offset to pointer in $$dataPt
|
2028
2028
|
if ($$dirInfo{EntryBased} or (ref $$tagTablePtr{$oldID} eq 'HASH' and
|
2029
|
-
|
2029
|
+
$$tagTablePtr{$oldID}{EntryBased}))
|
2030
2030
|
{
|
2031
2031
|
$valuePtr += $entry;
|
2032
2032
|
} else {
|
@@ -2041,7 +2041,7 @@ Entry: for (;;) {
|
|
2041
2041
|
$tagStr = $$oldInfo{Name};
|
2042
2042
|
$leicaTrailer = $$oldInfo{LeicaTrailer};
|
2043
2043
|
} elsif (defined $oldInfo) {
|
2044
|
-
$tmpInfo = $
|
2044
|
+
$tmpInfo = $et->GetTagInfo($tagTablePtr, $oldID, \ '', $oldFormName, $oldCount);
|
2045
2045
|
if ($tmpInfo) {
|
2046
2046
|
$tagStr = $$tmpInfo{Name};
|
2047
2047
|
$leicaTrailer = $$tmpInfo{LeicaTrailer};
|
@@ -2051,7 +2051,7 @@ Entry: for (;;) {
|
|
2051
2051
|
# allow PreviewImage to run outside EXIF segment in JPEG images
|
2052
2052
|
if (not $raf) {
|
2053
2053
|
if ($tagStr eq 'PreviewImage') {
|
2054
|
-
$raf =
|
2054
|
+
$raf = $$et{RAF};
|
2055
2055
|
if ($raf) {
|
2056
2056
|
$pos = $raf->Tell();
|
2057
2057
|
if ($oldInfo and $$oldInfo{ChangeBase}) {
|
@@ -2065,7 +2065,7 @@ Entry: for (;;) {
|
|
2065
2065
|
}
|
2066
2066
|
} elsif ($leicaTrailer) {
|
2067
2067
|
# save information about Leica makernote trailer
|
2068
|
-
$$
|
2068
|
+
$$et{LeicaTrailer} = {
|
2069
2069
|
TagInfo => $oldInfo || $tmpInfo,
|
2070
2070
|
Offset => $base + $valuePtr + $dataPos,
|
2071
2071
|
Size => $oldSize,
|
@@ -2103,16 +2103,16 @@ Entry: for (;;) {
|
|
2103
2103
|
}
|
2104
2104
|
}
|
2105
2105
|
unless ($success) {
|
2106
|
-
return undef if $
|
2106
|
+
return undef if $et->Error("Error reading value for $name entry $index", $inMakerNotes);
|
2107
2107
|
++$index; $oldID = $newID; next; # drop this tag
|
2108
2108
|
}
|
2109
2109
|
} elsif (not $invalidPreview) {
|
2110
|
-
return undef if $
|
2110
|
+
return undef if $et->Error("Bad $name offset for $tagStr", $inMakerNotes);
|
2111
2111
|
++$index; $oldID = $newID; next; # drop this tag
|
2112
2112
|
}
|
2113
2113
|
if ($invalidPreview) {
|
2114
2114
|
# set value for invalid preview
|
2115
|
-
if (
|
2115
|
+
if ($$et{FILE_TYPE} eq 'JPEG') {
|
2116
2116
|
# define dummy value for preview (or Leica MakerNote) to write later
|
2117
2117
|
# (value must be larger than 4 bytes to generate PREVIEW_INFO,
|
2118
2118
|
# and an even number of bytes so it won't be padded)
|
@@ -2123,7 +2123,7 @@ Entry: for (;;) {
|
|
2123
2123
|
}
|
2124
2124
|
$valuePtr = 0;
|
2125
2125
|
} else {
|
2126
|
-
UpdateTiffEnd($
|
2126
|
+
UpdateTiffEnd($et, $base+$valuePtr+$dataPos+$oldSize);
|
2127
2127
|
}
|
2128
2128
|
# update pointers for value just read from file
|
2129
2129
|
$valueDataPt = \$oldValue;
|
@@ -2136,9 +2136,9 @@ Entry: for (;;) {
|
|
2136
2136
|
my $tagStr = $oldInfo ? $$oldInfo{Name} : sprintf('tag 0x%.4x', $oldID);
|
2137
2137
|
my $str = "Suspicious $name offset for $tagStr";
|
2138
2138
|
if ($inMakerNotes) {
|
2139
|
-
$
|
2139
|
+
$et->Warn($str, 1);
|
2140
2140
|
} else {
|
2141
|
-
return undef if $
|
2141
|
+
return undef if $et->Error($str, 1);
|
2142
2142
|
}
|
2143
2143
|
}
|
2144
2144
|
}
|
@@ -2146,16 +2146,16 @@ Entry: for (;;) {
|
|
2146
2146
|
$oldValue = substr($$valueDataPt, $valuePtr, $oldSize) unless $readFromFile;
|
2147
2147
|
# get tagInfo using value if necessary
|
2148
2148
|
if (defined $oldInfo and not $oldInfo) {
|
2149
|
-
my $unk = $
|
2150
|
-
$oldInfo = $
|
2151
|
-
$
|
2149
|
+
my $unk = $et->Options(Unknown => 1);
|
2150
|
+
$oldInfo = $et->GetTagInfo($tagTablePtr, $oldID, \$oldValue, $oldFormName, $oldCount);
|
2151
|
+
$et->Options(Unknown => $unk);
|
2152
2152
|
# now that we have the value, we can resolve the Condition to finally
|
2153
2153
|
# determine whether we want to delete this tag or not
|
2154
2154
|
if ($mayDelete{$oldID} and $oldInfo and (not @newTags or $newTags[0] != $oldID)) {
|
2155
|
-
my $nvHash = $
|
2155
|
+
my $nvHash = $et->GetNewValueHash($oldInfo, $dirName);
|
2156
2156
|
if (not $nvHash and $wrongDir) {
|
2157
2157
|
# delete from wrong directory if necessary
|
2158
|
-
$nvHash = $
|
2158
|
+
$nvHash = $et->GetNewValueHash($oldInfo, $wrongDir);
|
2159
2159
|
$nvHash and $xDelete{$oldID} = 1;
|
2160
2160
|
}
|
2161
2161
|
if ($nvHash) {
|
@@ -2170,7 +2170,7 @@ Entry: for (;;) {
|
|
2170
2170
|
(not $oldInfo or not $$oldInfo{SubIFD}))
|
2171
2171
|
{
|
2172
2172
|
my $str = sprintf('%s tag 0x%.4x IFD format not handled', $name, $oldID);
|
2173
|
-
$
|
2173
|
+
$et->Error($str, $inMakerNotes);
|
2174
2174
|
}
|
2175
2175
|
# override format we use to read the value if specified
|
2176
2176
|
if ($oldInfo) {
|
@@ -2178,10 +2178,10 @@ Entry: for (;;) {
|
|
2178
2178
|
if (($$oldInfo{IsOffset} or $$oldInfo{SubIFD}) and
|
2179
2179
|
not $intFormat{$oldFormName})
|
2180
2180
|
{
|
2181
|
-
$
|
2181
|
+
$et->Error("Invalid format ($oldFormName) for $name $$oldInfo{Name}", $inMakerNotes);
|
2182
2182
|
++$index; $oldID = $newID; next; # drop this tag
|
2183
2183
|
}
|
2184
|
-
if ($$oldInfo{Drop} and $$
|
2184
|
+
if ($$oldInfo{Drop} and $$et{DROP_TAGS} and
|
2185
2185
|
($$oldInfo{Drop} == 1 or $$oldInfo{Drop} < $oldSize))
|
2186
2186
|
{
|
2187
2187
|
++$index; $oldID = $newID; next; # drop this tag
|
@@ -2201,9 +2201,9 @@ Entry: for (;;) {
|
|
2201
2201
|
if ($oldID <= $lastTagID and not $inMakerNotes) {
|
2202
2202
|
my $str = $oldInfo ? "$$oldInfo{Name} tag" : sprintf('tag 0x%x',$oldID);
|
2203
2203
|
if ($oldID == $lastTagID) {
|
2204
|
-
$
|
2204
|
+
$et->Warn("Duplicate $str in $name");;
|
2205
2205
|
} else {
|
2206
|
-
$
|
2206
|
+
$et->Warn("\u$str out of sequence in $name");
|
2207
2207
|
}
|
2208
2208
|
}
|
2209
2209
|
$lastTagID = $oldID;
|
@@ -2250,16 +2250,16 @@ Entry: for (;;) {
|
|
2250
2250
|
$newInfo = $set{$newID};
|
2251
2251
|
$newCount = $$newInfo{Count};
|
2252
2252
|
my ($val, $newVal, $n);
|
2253
|
-
my $nvHash = $
|
2253
|
+
my $nvHash = $et->GetNewValueHash($newInfo, $dirName);
|
2254
2254
|
if ($isNew > 0) {
|
2255
2255
|
# don't create new entry unless requested
|
2256
2256
|
if ($nvHash) {
|
2257
2257
|
next unless $$nvHash{IsCreating};
|
2258
2258
|
if ($$newInfo{IsOverwriting}) {
|
2259
2259
|
my $proc = $$newInfo{IsOverwriting};
|
2260
|
-
$isOverwriting = &$proc($
|
2260
|
+
$isOverwriting = &$proc($et, $nvHash, $val, \$newVal);
|
2261
2261
|
} else {
|
2262
|
-
$isOverwriting = $
|
2262
|
+
$isOverwriting = $et->IsOverwriting($nvHash);
|
2263
2263
|
}
|
2264
2264
|
} else {
|
2265
2265
|
next if $xDelete{$newID}; # don't create if cross deleting
|
@@ -2281,7 +2281,7 @@ Entry: for (;;) {
|
|
2281
2281
|
$newFormat = $formatNumber{$newFormName};
|
2282
2282
|
} elsif ($nvHash or $xDelete{$newID}) {
|
2283
2283
|
unless ($nvHash) {
|
2284
|
-
$nvHash = $
|
2284
|
+
$nvHash = $et->GetNewValueHash($newInfo, $wrongDir);
|
2285
2285
|
}
|
2286
2286
|
# read value
|
2287
2287
|
if (length $oldValue >= $oldSize) {
|
@@ -2314,13 +2314,13 @@ Entry: for (;;) {
|
|
2314
2314
|
}
|
2315
2315
|
if ($$newInfo{IsOverwriting}) {
|
2316
2316
|
my $proc = $$newInfo{IsOverwriting};
|
2317
|
-
$isOverwriting = &$proc($
|
2317
|
+
$isOverwriting = &$proc($et, $nvHash, $val, \$newVal);
|
2318
2318
|
} else {
|
2319
|
-
$isOverwriting = $
|
2319
|
+
$isOverwriting = $et->IsOverwriting($nvHash, $val);
|
2320
2320
|
}
|
2321
2321
|
}
|
2322
2322
|
if ($isOverwriting) {
|
2323
|
-
$newVal = $
|
2323
|
+
$newVal = $et->GetNewValues($nvHash) unless defined $newVal;
|
2324
2324
|
# value undefined if deleting this tag
|
2325
2325
|
# (also delete tag if cross-deleting and this isn't a date/time shift)
|
2326
2326
|
if (not defined $newVal or ($xDelete{$newID} and not defined $$nvHash{Shift})) {
|
@@ -2329,8 +2329,8 @@ Entry: for (;;) {
|
|
2329
2329
|
goto NoOverwrite; # GOTO!
|
2330
2330
|
}
|
2331
2331
|
unless ($isNew) {
|
2332
|
-
|
2333
|
-
$
|
2332
|
+
++$$et{CHANGED};
|
2333
|
+
$et->VerboseValue("- $dirName:$$newInfo{Name}", $val);
|
2334
2334
|
}
|
2335
2335
|
next;
|
2336
2336
|
}
|
@@ -2342,30 +2342,30 @@ Entry: for (;;) {
|
|
2342
2342
|
# convert to binary format
|
2343
2343
|
$newValue = WriteValue($newVal, $newFormName, $newCount);
|
2344
2344
|
unless (defined $newValue) {
|
2345
|
-
$
|
2345
|
+
$et->Warn("Invalid value for $dirName:$$newInfo{Name}");
|
2346
2346
|
goto NoOverwrite; # GOTO!
|
2347
2347
|
}
|
2348
2348
|
if (length $newValue) {
|
2349
2349
|
# limit maximum value length in JPEG images
|
2350
2350
|
# (max segment size is 65533 bytes and the min EXIF size is 96 incl an additional IFD entry)
|
2351
|
-
if ($$
|
2351
|
+
if ($$et{FILE_TYPE} eq 'JPEG' and length($newValue) > 65436 and
|
2352
2352
|
$$newInfo{Name} ne 'PreviewImage')
|
2353
2353
|
{
|
2354
2354
|
my $name = $$newInfo{MakerNotes} ? 'MakerNotes' : $$newInfo{Name};
|
2355
|
-
$
|
2355
|
+
$et->Warn("$name too large to write in JPEG segment");
|
2356
2356
|
goto NoOverwrite; # GOTO!
|
2357
2357
|
}
|
2358
2358
|
# re-code if necessary
|
2359
2359
|
if ($strEnc and $newFormName eq 'string') {
|
2360
|
-
$newValue = $
|
2360
|
+
$newValue = $et->Encode($newValue, $strEnc);
|
2361
2361
|
}
|
2362
2362
|
} else {
|
2363
|
-
$
|
2363
|
+
$et->Warn("Can't write zero length $$newInfo{Name} in $$tagTablePtr{GROUPS}{1}");
|
2364
2364
|
goto NoOverwrite; # GOTO!
|
2365
2365
|
}
|
2366
2366
|
if ($isNew >= 0) {
|
2367
2367
|
$newCount = length($newValue) / $formatSize[$newFormat];
|
2368
|
-
|
2368
|
+
++$$et{CHANGED};
|
2369
2369
|
if (defined $allMandatory) {
|
2370
2370
|
# not all mandatory if we are writing any tag specifically
|
2371
2371
|
if ($nvHash) {
|
@@ -2376,9 +2376,9 @@ Entry: for (;;) {
|
|
2376
2376
|
}
|
2377
2377
|
}
|
2378
2378
|
if ($verbose > 1) {
|
2379
|
-
$
|
2379
|
+
$et->VerboseValue("- $dirName:$$newInfo{Name}", $val) unless $isNew;
|
2380
2380
|
my $str = $nvHash ? '' : ' (mandatory)';
|
2381
|
-
$
|
2381
|
+
$et->VerboseValue("+ $dirName:$$newInfo{Name}", $newVal, $str);
|
2382
2382
|
}
|
2383
2383
|
}
|
2384
2384
|
} else {
|
@@ -2402,8 +2402,8 @@ NoOverwrite: next if $isNew > 0;
|
|
2402
2402
|
# or a SubIFD
|
2403
2403
|
next if $$newInfo{MakerNotes} or $$newInfo{Name} eq 'SubIFD';
|
2404
2404
|
my $subTable;
|
2405
|
-
if (
|
2406
|
-
$subTable = Image::ExifTool::GetTagTable(
|
2405
|
+
if ($$newInfo{SubDirectory}{TagTable}) {
|
2406
|
+
$subTable = Image::ExifTool::GetTagTable($$newInfo{SubDirectory}{TagTable});
|
2407
2407
|
} else {
|
2408
2408
|
$subTable = $tagTablePtr;
|
2409
2409
|
}
|
@@ -2412,8 +2412,8 @@ NoOverwrite: next if $isNew > 0;
|
|
2412
2412
|
Parent => $dirName,
|
2413
2413
|
Fixup => new Image::ExifTool::Fixup,
|
2414
2414
|
);
|
2415
|
-
$sourceDir{DirName} =
|
2416
|
-
$newValue = $
|
2415
|
+
$sourceDir{DirName} = $$newInfo{Groups}{1} if $$newInfo{SubIFD};
|
2416
|
+
$newValue = $et->WriteDirectory(\%sourceDir, $subTable);
|
2417
2417
|
# only add new directory if it isn't empty
|
2418
2418
|
next unless defined $newValue and length($newValue);
|
2419
2419
|
# set the fixup start location
|
@@ -2476,14 +2476,14 @@ NoOverwrite: next if $isNew > 0;
|
|
2476
2476
|
# prefer tag from Composite table if it exists (otherwise
|
2477
2477
|
# PreviewImage data would be taken from Extra tag)
|
2478
2478
|
my $compInfo = $Image::ExifTool::Composite{$dataTag};
|
2479
|
-
$offsetData{$dataTag} = $
|
2479
|
+
$offsetData{$dataTag} = $et->GetNewValues($compInfo || $dataTag);
|
2480
2480
|
my $err;
|
2481
2481
|
if (defined $offsetData{$dataTag}) {
|
2482
2482
|
my $len = length $offsetData{$dataTag};
|
2483
2483
|
if ($dataTag eq 'PreviewImage') {
|
2484
2484
|
# must set DEL_PREVIEW flag now if preview fit into IFD
|
2485
|
-
$$
|
2486
|
-
} elsif (
|
2485
|
+
$$et{DEL_PREVIEW} = 1 if $len <= 4;
|
2486
|
+
} elsif ($$et{FILE_TYPE} eq 'JPEG' and $len > 60000) {
|
2487
2487
|
delete $offsetData{$dataTag};
|
2488
2488
|
$err = "$dataTag not written (too large for JPEG segment)";
|
2489
2489
|
}
|
@@ -2491,7 +2491,7 @@ NoOverwrite: next if $isNew > 0;
|
|
2491
2491
|
$err = "$dataTag not found";
|
2492
2492
|
}
|
2493
2493
|
if ($err) {
|
2494
|
-
$
|
2494
|
+
$et->Warn($err) if $$newInfo{IsOffset};
|
2495
2495
|
delete $set{$newID}; # remove from list of tags we are setting
|
2496
2496
|
next;
|
2497
2497
|
}
|
@@ -2502,11 +2502,11 @@ NoOverwrite: next if $isNew > 0;
|
|
2502
2502
|
#
|
2503
2503
|
if ($$newInfo{MakerNotes}) {
|
2504
2504
|
# don't write new makernotes if we are deleting this group
|
2505
|
-
if (
|
2506
|
-
(
|
2505
|
+
if ($$et{DEL_GROUP}{MakerNotes} and
|
2506
|
+
($$et{DEL_GROUP}{MakerNotes} != 2 or $isNew <= 0))
|
2507
2507
|
{
|
2508
2508
|
if ($isNew <= 0) {
|
2509
|
-
|
2509
|
+
++$$et{CHANGED};
|
2510
2510
|
$verbose and print $out " Deleting MakerNotes\n";
|
2511
2511
|
}
|
2512
2512
|
next;
|
@@ -2515,12 +2515,12 @@ NoOverwrite: next if $isNew > 0;
|
|
2515
2515
|
if ($isNew >= 0 and $set{$newID}) {
|
2516
2516
|
# we are writing a whole new maker note block
|
2517
2517
|
# --> add fixup information if necessary
|
2518
|
-
my $nvHash = $
|
2519
|
-
if ($nvHash and
|
2518
|
+
my $nvHash = $et->GetNewValueHash($newInfo, $dirName);
|
2519
|
+
if ($nvHash and $$nvHash{MAKER_NOTE_FIXUP}) {
|
2520
2520
|
# must clone fixup because we will be shifting it
|
2521
|
-
my $makerFixup =
|
2521
|
+
my $makerFixup = $$nvHash{MAKER_NOTE_FIXUP}->Clone();
|
2522
2522
|
my $valLen = length($valBuff);
|
2523
|
-
|
2523
|
+
$$makerFixup{Start} += $valLen;
|
2524
2524
|
push @valFixups, $makerFixup;
|
2525
2525
|
}
|
2526
2526
|
} else {
|
@@ -2554,7 +2554,7 @@ NoOverwrite: next if $isNew > 0;
|
|
2554
2554
|
$writeProc = $$oldInfo{SubDirectory}{WriteProc};
|
2555
2555
|
$notIFD = $$oldInfo{NotIFD};
|
2556
2556
|
} else {
|
2557
|
-
$
|
2557
|
+
$et->Warn('Internal problem getting maker notes tag table');
|
2558
2558
|
}
|
2559
2559
|
$subTable or $subTable = $tagTablePtr;
|
2560
2560
|
if ($writeProc and
|
@@ -2564,15 +2564,15 @@ NoOverwrite: next if $isNew > 0;
|
|
2564
2564
|
$loc = 0;
|
2565
2565
|
} elsif (not $notIFD) {
|
2566
2566
|
# look for IFD-style maker notes
|
2567
|
-
$loc = Image::ExifTool::MakerNotes::LocateIFD($
|
2567
|
+
$loc = Image::ExifTool::MakerNotes::LocateIFD($et,\%subdirInfo);
|
2568
2568
|
}
|
2569
2569
|
if (defined $loc) {
|
2570
2570
|
# we need fixup data for this subdirectory
|
2571
2571
|
$subdirInfo{Fixup} = new Image::ExifTool::Fixup;
|
2572
2572
|
# rewrite maker notes
|
2573
|
-
my $changed = $$
|
2574
|
-
$subdir = $
|
2575
|
-
if ($changed == $$
|
2573
|
+
my $changed = $$et{CHANGED};
|
2574
|
+
$subdir = $et->WriteDirectory(\%subdirInfo, $subTable, $writeProc);
|
2575
|
+
if ($changed == $$et{CHANGED} and $subdirInfo{Fixup}->IsEmpty()) {
|
2576
2576
|
# return original data if nothing changed and no fixups
|
2577
2577
|
undef $subdir;
|
2578
2578
|
}
|
@@ -2590,13 +2590,13 @@ NoOverwrite: next if $isNew > 0;
|
|
2590
2590
|
$loc = 0;
|
2591
2591
|
}
|
2592
2592
|
# rewrite maker notes
|
2593
|
-
$subdir = $
|
2593
|
+
$subdir = $et->WriteDirectory(\%subdirInfo, $subTable);
|
2594
2594
|
} elsif (not $notIFD) {
|
2595
2595
|
my $msg = 'Maker notes could not be parsed';
|
2596
|
-
if ($$
|
2597
|
-
$
|
2596
|
+
if ($$et{FILE_TYPE} eq 'JPEG') {
|
2597
|
+
$et->Warn($msg, 1);
|
2598
2598
|
} else {
|
2599
|
-
$
|
2599
|
+
$et->Error($msg, 1);
|
2600
2600
|
}
|
2601
2601
|
}
|
2602
2602
|
if (defined $subdir) {
|
@@ -2606,27 +2606,27 @@ NoOverwrite: next if $isNew > 0;
|
|
2606
2606
|
# maker notes for the old value
|
2607
2607
|
$newValue = substr($oldValue, 0, $loc) . $subdir;
|
2608
2608
|
my $makerFixup = $subdirInfo{Fixup};
|
2609
|
-
my $previewInfo =
|
2609
|
+
my $previewInfo = $$et{PREVIEW_INFO};
|
2610
2610
|
if ($subdirInfo{Relative}) {
|
2611
2611
|
# apply a one-time fixup to $loc since offsets are relative
|
2612
|
-
|
2612
|
+
$$makerFixup{Start} += $loc;
|
2613
2613
|
# shift all offsets to be relative to new base
|
2614
2614
|
my $baseShift = $valueDataPos + $valuePtr + $base - $subdirInfo{Base};
|
2615
|
-
|
2615
|
+
$$makerFixup{Shift} += $baseShift;
|
2616
2616
|
$makerFixup->ApplyFixup(\$newValue);
|
2617
2617
|
if ($previewInfo) {
|
2618
2618
|
# remove all but PreviewImage fixup (since others shouldn't change)
|
2619
|
-
foreach (keys %{
|
2620
|
-
/_PreviewImage$/ or delete
|
2619
|
+
foreach (keys %{$$makerFixup{Pointers}}) {
|
2620
|
+
/_PreviewImage$/ or delete $$makerFixup{Pointers}{$_};
|
2621
2621
|
}
|
2622
2622
|
# zero pointer so we can see how it gets shifted later
|
2623
2623
|
$makerFixup->SetMarkerPointers(\$newValue, 'PreviewImage', 0);
|
2624
2624
|
# set the pointer to the start of the EXIF information
|
2625
2625
|
# add preview image fixup to list of value fixups
|
2626
|
-
|
2626
|
+
$$makerFixup{Start} += $valLen;
|
2627
2627
|
push @valFixups, $makerFixup;
|
2628
|
-
|
2629
|
-
|
2628
|
+
$$previewInfo{BaseShift} = $baseShift;
|
2629
|
+
$$previewInfo{Relative} = 1;
|
2630
2630
|
}
|
2631
2631
|
# don't shift anything if relative flag set to zero (Pentax patch)
|
2632
2632
|
} elsif (not defined $subdirInfo{Relative}) {
|
@@ -2640,22 +2640,22 @@ NoOverwrite: next if $isNew > 0;
|
|
2640
2640
|
# allow negative base shift if offsets are bigger (PentaxOptioWP.jpg)
|
2641
2641
|
(not $subdirInfo{MinOffset} or $subdirInfo{MinOffset} + $baseShift < 0))
|
2642
2642
|
{
|
2643
|
-
my $fixBase = $
|
2643
|
+
my $fixBase = $et->Options('FixBase');
|
2644
2644
|
if (not defined $fixBase) {
|
2645
|
-
my $str = $
|
2646
|
-
$
|
2645
|
+
my $str = $et->Options('IgnoreMinorErrors') ? 'ignored' : 'fix or ignore?';
|
2646
|
+
$et->Error("MakerNotes offsets may be incorrect ($str)", 1);
|
2647
2647
|
} elsif ($fixBase eq '') {
|
2648
|
-
$
|
2648
|
+
$et->Warn('Fixed incorrect MakerNotes offsets');
|
2649
2649
|
$baseShift = 0;
|
2650
2650
|
}
|
2651
2651
|
}
|
2652
|
-
|
2653
|
-
|
2652
|
+
$$makerFixup{Start} += $valLen + $loc;
|
2653
|
+
$$makerFixup{Shift} += $baseShift;
|
2654
2654
|
# permanently fix makernote offset errors
|
2655
|
-
|
2655
|
+
$$makerFixup{Shift} += $subdirInfo{FixedBy} || 0;
|
2656
2656
|
push @valFixups, $makerFixup;
|
2657
|
-
if ($previewInfo and not
|
2658
|
-
|
2657
|
+
if ($previewInfo and not $$previewInfo{NoBaseShift}) {
|
2658
|
+
$$previewInfo{BaseShift} = $baseShift;
|
2659
2659
|
}
|
2660
2660
|
}
|
2661
2661
|
$newValuePt = \$newValue; # write new value
|
@@ -2679,13 +2679,13 @@ NoOverwrite: next if $isNew > 0;
|
|
2679
2679
|
$subTable = Image::ExifTool::GetTagTable($$subdir{TagTable});
|
2680
2680
|
}
|
2681
2681
|
# determine directory name for this IFD
|
2682
|
-
my $subdirName =
|
2682
|
+
my $subdirName = $$newInfo{Groups}{1} || $$newInfo{Name};
|
2683
2683
|
# all makernotes directory names must be 'MakerNotes'
|
2684
|
-
$subdirName = 'MakerNotes' if
|
2684
|
+
$subdirName = 'MakerNotes' if $$subTable{GROUPS}{0} eq 'MakerNotes';
|
2685
2685
|
# must handle sub-IFD's specially since the values
|
2686
2686
|
# are actually offsets to subdirectories
|
2687
2687
|
unless ($readCount) { # can't have zero count
|
2688
|
-
return undef if $
|
2688
|
+
return undef if $et->Error("$name entry $index has zero count", 2);
|
2689
2689
|
next;
|
2690
2690
|
}
|
2691
2691
|
my $writeCount = 0;
|
@@ -2736,18 +2736,18 @@ NoOverwrite: next if $isNew > 0;
|
|
2736
2736
|
$subdirInfo{DataLen} = 0;
|
2737
2737
|
} else {
|
2738
2738
|
my @err = ("Can't read $subdirName data", $inMakerNotes);
|
2739
|
-
if ($$subTable{VARS} and
|
2740
|
-
$
|
2741
|
-
} elsif ($
|
2739
|
+
if ($$subTable{VARS} and $$subTable{VARS}{MINOR_ERRORS}) {
|
2740
|
+
$et->Warn($err[0] . '. Ignored.');
|
2741
|
+
} elsif ($et->Error(@err)) {
|
2742
2742
|
return undef;
|
2743
2743
|
}
|
2744
2744
|
next Entry; # don't write this directory
|
2745
2745
|
}
|
2746
2746
|
}
|
2747
|
-
my $subdirData = $
|
2747
|
+
my $subdirData = $et->WriteDirectory(\%subdirInfo, $subTable, $$subdir{WriteProc});
|
2748
2748
|
unless (defined $subdirData) {
|
2749
2749
|
# WriteDirectory should have issued an error, but check just in case
|
2750
|
-
$
|
2750
|
+
$et->Error("Error writing $subdirName") unless $$et{VALUE}{Error};
|
2751
2751
|
return undef;
|
2752
2752
|
}
|
2753
2753
|
unless (length $subdirData) {
|
@@ -2844,13 +2844,13 @@ NoOverwrite: next if $isNew > 0;
|
|
2844
2844
|
my $subTable = Image::ExifTool::GetTagTable($$subdir{TagTable});
|
2845
2845
|
my $oldOrder = GetByteOrder();
|
2846
2846
|
SetByteOrder($$subdir{ByteOrder}) if $$subdir{ByteOrder};
|
2847
|
-
$newValue = $
|
2847
|
+
$newValue = $et->WriteDirectory(\%subdirInfo, $subTable, $$subdir{WriteProc});
|
2848
2848
|
SetByteOrder($oldOrder);
|
2849
2849
|
if (defined $newValue) {
|
2850
2850
|
my $hdrLen = $subdirStart - $valuePtr;
|
2851
2851
|
if ($hdrLen) {
|
2852
2852
|
$newValue = substr($$valueDataPt, $valuePtr, $hdrLen) . $newValue;
|
2853
|
-
|
2853
|
+
$$subFixup{Start} += $hdrLen;
|
2854
2854
|
}
|
2855
2855
|
$newValuePt = \$newValue;
|
2856
2856
|
} else {
|
@@ -2860,8 +2860,8 @@ NoOverwrite: next if $isNew > 0;
|
|
2860
2860
|
# don't delete a previously empty makernote directory
|
2861
2861
|
next if $oldSize or not $inMakerNotes;
|
2862
2862
|
}
|
2863
|
-
if (
|
2864
|
-
|
2863
|
+
if ($$subFixup{Pointers} and $subdirInfo{Base} == $base) {
|
2864
|
+
$$subFixup{Start} += length $valBuff;
|
2865
2865
|
push @valFixups, $subFixup;
|
2866
2866
|
} else {
|
2867
2867
|
# apply fixup in case we added a header ($hdrLen above)
|
@@ -2877,11 +2877,11 @@ NoOverwrite: next if $isNew > 0;
|
|
2877
2877
|
if ($dataTag eq 'CanonVRD') {
|
2878
2878
|
# must decide now if we will write CanonVRD information
|
2879
2879
|
my $hasVRD;
|
2880
|
-
if (
|
2880
|
+
if ($$et{NEW_VALUE}{$Image::ExifTool::Extra{CanonVRD}}) {
|
2881
2881
|
# adding or deleting as a block
|
2882
|
-
$hasVRD = $
|
2883
|
-
} elsif (
|
2884
|
-
|
2882
|
+
$hasVRD = $et->GetNewValues('CanonVRD') ? 1 : 0;
|
2883
|
+
} elsif ($$et{DEL_GROUP}{CanonVRD} or
|
2884
|
+
$$et{DEL_GROUP}{Trailer})
|
2885
2885
|
{
|
2886
2886
|
$hasVRD = 0; # deleting as a group
|
2887
2887
|
} else {
|
@@ -2901,29 +2901,29 @@ NoOverwrite: next if $isNew > 0;
|
|
2901
2901
|
# invalidated anyway by our edits
|
2902
2902
|
my $odd;
|
2903
2903
|
my $oddInfo = $Image::ExifTool::Composite{OriginalDecisionData};
|
2904
|
-
if ($oddInfo and
|
2905
|
-
$odd = $
|
2904
|
+
if ($oddInfo and $$et{NEW_VALUE}{$oddInfo}) {
|
2905
|
+
$odd = $et->GetNewValues($dataTag);
|
2906
2906
|
if ($verbose > 1) {
|
2907
2907
|
print $out " - $dirName:$dataTag\n" if $$newValuePt ne "\0\0\0\0";
|
2908
2908
|
print $out " + $dirName:$dataTag\n" if $odd;
|
2909
2909
|
}
|
2910
|
-
|
2910
|
+
++$$et{CHANGED};
|
2911
2911
|
} elsif ($$newValuePt ne "\0\0\0\0") {
|
2912
2912
|
if (length($$newValuePt) == 4) {
|
2913
2913
|
require Image::ExifTool::Canon;
|
2914
2914
|
my $offset = Get32u($newValuePt,0);
|
2915
2915
|
# absolute offset in JPEG images only
|
2916
|
-
$offset += $base unless $$
|
2917
|
-
$odd = Image::ExifTool::Canon::ReadODD($
|
2916
|
+
$offset += $base unless $$et{FILE_TYPE} eq 'JPEG';
|
2917
|
+
$odd = Image::ExifTool::Canon::ReadODD($et, $offset);
|
2918
2918
|
$odd = $$odd if ref $odd;
|
2919
2919
|
} else {
|
2920
|
-
$
|
2920
|
+
$et->Error("Invalid $$newInfo{Name}",1);
|
2921
2921
|
}
|
2922
2922
|
}
|
2923
2923
|
if ($odd) {
|
2924
2924
|
my $newOffset = length($valBuff);
|
2925
2925
|
# (ODD offset is absolute in JPEG, so add base offset!)
|
2926
|
-
$newOffset += $base if $$
|
2926
|
+
$newOffset += $base if $$et{FILE_TYPE} eq 'JPEG';
|
2927
2927
|
$newValue = Set32u($newOffset);
|
2928
2928
|
$dirFixup->AddFixup(length($dirBuff) + 8, $dataTag);
|
2929
2929
|
$valBuff .= $odd; # add original decision data
|
@@ -2962,7 +2962,7 @@ NoOverwrite: next if $isNew > 0;
|
|
2962
2962
|
my $ptr = $newStart + length($dirBuff) + 10;
|
2963
2963
|
$newCount or $newCount = 1; # make sure count is set for offsetInfo
|
2964
2964
|
# save value pointer and value count for each tag
|
2965
|
-
|
2965
|
+
$$offsetInfo{$newID} = [$newInfo, $ptr, $newCount, \@vals, $newFormat];
|
2966
2966
|
}
|
2967
2967
|
|
2968
2968
|
} elsif ($$newInfo{DataMember}) {
|
@@ -2982,14 +2982,14 @@ NoOverwrite: next if $isNew > 0;
|
|
2982
2982
|
if ($conv) {
|
2983
2983
|
# let the RawConv store the (possibly converted) data member
|
2984
2984
|
if (ref $conv eq 'CODE') {
|
2985
|
-
&$conv($val, $
|
2985
|
+
&$conv($val, $et);
|
2986
2986
|
} else {
|
2987
|
-
my ($self, $tag, $taginfo) = ($
|
2987
|
+
my ($self, $tag, $taginfo) = ($et, $$newInfo{Name}, $newInfo);
|
2988
2988
|
#### eval RawConv ($self, $val, $tag, $tagInfo)
|
2989
2989
|
eval $conv;
|
2990
2990
|
}
|
2991
2991
|
} else {
|
2992
|
-
$$
|
2992
|
+
$$et{$$newInfo{DataMember}} = $val;
|
2993
2993
|
}
|
2994
2994
|
}
|
2995
2995
|
}
|
@@ -3017,22 +3017,22 @@ NoOverwrite: next if $isNew > 0;
|
|
3017
3017
|
my ($dataTag, $putFirst);
|
3018
3018
|
($dataTag, $putFirst) = @$newInfo{'DataTag','PutFirst'} if $newInfo;
|
3019
3019
|
if ($dataTag) {
|
3020
|
-
if ($dataTag eq 'PreviewImage' and (
|
3021
|
-
$$
|
3020
|
+
if ($dataTag eq 'PreviewImage' and ($$et{FILE_TYPE} eq 'JPEG' or
|
3021
|
+
$$et{GENERATE_PREVIEW_INFO}))
|
3022
3022
|
{
|
3023
3023
|
# hold onto the PreviewImage until we can determine if it fits
|
3024
|
-
|
3024
|
+
$$et{PREVIEW_INFO} or $$et{PREVIEW_INFO} = {
|
3025
3025
|
Data => $$newValuePt,
|
3026
3026
|
Fixup => new Image::ExifTool::Fixup,
|
3027
3027
|
};
|
3028
|
-
|
3028
|
+
$$et{PREVIEW_INFO}{ChangeBase} = 1 if $$newInfo{ChangeBase};
|
3029
3029
|
if ($$newInfo{IsOffset} and $$newInfo{IsOffset} eq '2') {
|
3030
|
-
|
3030
|
+
$$et{PREVIEW_INFO}{NoBaseShift} = 1;
|
3031
3031
|
}
|
3032
3032
|
# use original preview size if we will attempt to load it later
|
3033
3033
|
$newCount = $oldCount if $$newValuePt eq 'LOAD_PREVIEW';
|
3034
3034
|
$$newValuePt = '';
|
3035
|
-
} elsif ($dataTag eq 'LeicaTrailer' and $$
|
3035
|
+
} elsif ($dataTag eq 'LeicaTrailer' and $$et{LeicaTrailer}) {
|
3036
3036
|
$$newValuePt = '';
|
3037
3037
|
}
|
3038
3038
|
}
|
@@ -3077,11 +3077,11 @@ NoOverwrite: next if $isNew > 0;
|
|
3077
3077
|
if ($ignoreCount) {
|
3078
3078
|
my $y = $ignoreCount > 1 ? 'ies' : 'y';
|
3079
3079
|
my $verb = $$dirInfo{FixBase} ? 'Ignored' : 'Removed';
|
3080
|
-
$
|
3080
|
+
$et->Warn("$verb $ignoreCount invalid entr$y from $name", 1);
|
3081
3081
|
}
|
3082
3082
|
if ($fixCount) {
|
3083
3083
|
my $s = $fixCount > 1 ? 's' : '';
|
3084
|
-
$
|
3084
|
+
$et->Warn("Fixed invalid count$s for $fixCount $name tag$s", 1);
|
3085
3085
|
}
|
3086
3086
|
#..............................................................................
|
3087
3087
|
# write directory counts and nextIFD pointer and add value data to end of IFD
|
@@ -3096,8 +3096,8 @@ NoOverwrite: next if $isNew > 0;
|
|
3096
3096
|
my $isNextIFD = ($$dirInfo{Multi} and ($nextIfdOffset or
|
3097
3097
|
# account for the case where we will create the next IFD
|
3098
3098
|
# (IFD1 only, but not in TIFF-format images)
|
3099
|
-
($dirName eq 'IFD0' and $$
|
3100
|
-
$$
|
3099
|
+
($dirName eq 'IFD0' and $$et{ADD_DIRS}{'IFD1'} and
|
3100
|
+
$$et{FILE_TYPE} ne 'TIFF')));
|
3101
3101
|
# calculate number of entries in new directory
|
3102
3102
|
my $newEntries = length($dirBuff) / 12;
|
3103
3103
|
# delete entire directory if we deleted a tag and only mandatory tags remain or we
|
@@ -3109,7 +3109,7 @@ NoOverwrite: next if $isNew > 0;
|
|
3109
3109
|
undef $dirFixup; # no fixups in this directory
|
3110
3110
|
++$deleteAll if defined $deleteAll;
|
3111
3111
|
$verbose > 1 and print $out " - $allMandatory mandatory tag(s)\n";
|
3112
|
-
|
3112
|
+
$$et{CHANGED} -= $addMandatory; # didn't change these after all
|
3113
3113
|
}
|
3114
3114
|
if ($ifd and not $newEntries) {
|
3115
3115
|
$verbose and print $out " Deleting IFD1\n";
|
@@ -3117,7 +3117,7 @@ NoOverwrite: next if $isNew > 0;
|
|
3117
3117
|
}
|
3118
3118
|
# apply one-time fixup for entry-based offsets
|
3119
3119
|
if ($entryBasedFixup) {
|
3120
|
-
|
3120
|
+
$$entryBasedFixup{Shift} = length($dirBuff) + 4;
|
3121
3121
|
$entryBasedFixup->ApplyFixup(\$dirBuff);
|
3122
3122
|
undef $entryBasedFixup;
|
3123
3123
|
}
|
@@ -3173,7 +3173,7 @@ NoOverwrite: next if $isNew > 0;
|
|
3173
3173
|
$offset += $newStart + 2; # get offset in newData
|
3174
3174
|
# check to be sure we got the right offset
|
3175
3175
|
unless (Get32u(\$newData, $offset) == 0xfeedf00d) {
|
3176
|
-
$
|
3176
|
+
$et->Error("Internal error while rewriting $name");
|
3177
3177
|
return undef;
|
3178
3178
|
}
|
3179
3179
|
# set the offset to the subdirectory data
|
@@ -3184,14 +3184,14 @@ NoOverwrite: next if $isNew > 0;
|
|
3184
3184
|
# add fixup for all offsets in directory according to value data position
|
3185
3185
|
# (which is at the end of this directory)
|
3186
3186
|
if ($dirFixup) {
|
3187
|
-
|
3188
|
-
|
3187
|
+
$$dirFixup{Start} = $newStart + 2;
|
3188
|
+
$$dirFixup{Shift} = $valPos - $$dirFixup{Start};
|
3189
3189
|
$fixup->AddFixup($dirFixup);
|
3190
3190
|
}
|
3191
3191
|
# add valueData fixups, adjusting for position of value data
|
3192
3192
|
my $valFixup;
|
3193
3193
|
foreach $valFixup (@valFixups) {
|
3194
|
-
|
3194
|
+
$$valFixup{Start} += $valPos;
|
3195
3195
|
$fixup->AddFixup($valFixup);
|
3196
3196
|
}
|
3197
3197
|
# stop if no next IFD pointer
|
@@ -3212,32 +3212,32 @@ NoOverwrite: next if $isNew > 0;
|
|
3212
3212
|
$dirName .= $ifdNum + 1;
|
3213
3213
|
$name =~ s/\d+$//;
|
3214
3214
|
$name .= $ifdNum + 1;
|
3215
|
-
$$
|
3215
|
+
$$et{DIR_NAME} = $$et{PATH}[-1] = $dirName;
|
3216
3216
|
next unless $nextIfdOffset;
|
3217
3217
|
|
3218
3218
|
# guard against writing the same directory twice
|
3219
3219
|
my $addr = $nextIfdOffset + $base;
|
3220
|
-
if (
|
3221
|
-
$
|
3220
|
+
if ($$et{PROCESSED}{$addr}) {
|
3221
|
+
$et->Error("$name pointer references previous $$et{PROCESSED}{$addr} directory", 1);
|
3222
3222
|
last;
|
3223
3223
|
}
|
3224
|
-
|
3224
|
+
$$et{PROCESSED}{$addr} = $name;
|
3225
3225
|
|
3226
3226
|
if ($dirName eq 'SubIFD1' and not ValidateIFD($dirInfo, $dirStart)) {
|
3227
|
-
if (
|
3228
|
-
$
|
3227
|
+
if ($$et{TIFF_TYPE} eq 'TIFF') {
|
3228
|
+
$et->Error('Ignored bad IFD linked from SubIFD', 1);
|
3229
3229
|
} elsif ($verbose) {
|
3230
|
-
$
|
3230
|
+
$et->Warn('Ignored bad IFD linked from SubIFD');
|
3231
3231
|
}
|
3232
3232
|
last; # don't write bad IFD
|
3233
3233
|
}
|
3234
|
-
if (
|
3234
|
+
if ($$et{DEL_GROUP}{$dirName}) {
|
3235
3235
|
$verbose and print $out " Deleting $dirName\n";
|
3236
|
-
$raf and $
|
3236
|
+
$raf and $et->Error("Deleting $dirName also deletes subsequent" .
|
3237
3237
|
" IFD's and possibly image data", 1);
|
3238
|
-
|
3239
|
-
if (
|
3240
|
-
|
3238
|
+
++$$et{CHANGED};
|
3239
|
+
if ($$et{DEL_GROUP}{$dirName} == 2 and
|
3240
|
+
$$et{ADD_DIRS}{$dirName})
|
3241
3241
|
{
|
3242
3242
|
my $emptyIFD = "\0" x 2; # start with empty IFD
|
3243
3243
|
$dataPt = \$emptyIFD;
|
@@ -3280,16 +3280,16 @@ NoOverwrite: next if $isNew > 0;
|
|
3280
3280
|
if ($stripOffsets and $$stripOffsets[0]{PanasonicHack}) {
|
3281
3281
|
require Image::ExifTool::PanasonicRaw;
|
3282
3282
|
my $err = Image::ExifTool::PanasonicRaw::PatchRawDataOffset($offsetInfo, $raf, $ifd);
|
3283
|
-
$err and $
|
3283
|
+
$err and $et->Error($err);
|
3284
3284
|
}
|
3285
3285
|
my $tagID;
|
3286
3286
|
# loop through all tags in reverse order so we save thumbnail
|
3287
3287
|
# data before main image data if both exist in the same IFD
|
3288
3288
|
foreach $tagID (reverse sort keys %$offsetInfo) {
|
3289
|
-
my $tagInfo =
|
3289
|
+
my $tagInfo = $$offsetInfo{$tagID}[0];
|
3290
3290
|
next unless $$tagInfo{IsOffset}; # handle byte counts with offsets
|
3291
|
-
my $sizeInfo =
|
3292
|
-
$sizeInfo or $
|
3291
|
+
my $sizeInfo = $$offsetInfo{$$tagInfo{OffsetPair}};
|
3292
|
+
$sizeInfo or $et->Error("No size tag for $dirName:$$tagInfo{Name}"), next;
|
3293
3293
|
my $dataTag = $$tagInfo{DataTag};
|
3294
3294
|
# write TIFF image data (strips or tiles) later if requested
|
3295
3295
|
if ($raf and defined $$origDirInfo{ImageData} and
|
@@ -3301,9 +3301,9 @@ NoOverwrite: next if $isNew > 0;
|
|
3301
3301
|
# but don't defer writing if replacing with new value
|
3302
3302
|
(not defined $dataTag or not defined $offsetData{$dataTag}))
|
3303
3303
|
{
|
3304
|
-
push @writeLater, [
|
3304
|
+
push @writeLater, [ $$offsetInfo{$tagID}, $sizeInfo ];
|
3305
3305
|
} else {
|
3306
|
-
push @offsetList, [
|
3306
|
+
push @offsetList, [ $$offsetInfo{$tagID}, $sizeInfo ];
|
3307
3307
|
}
|
3308
3308
|
}
|
3309
3309
|
} else {
|
@@ -3316,7 +3316,7 @@ NoOverwrite: next if $isNew > 0;
|
|
3316
3316
|
my ($cntInfo, $byteCounts, $count2, $oldSize, $format) = @{$$offsetPair[1]};
|
3317
3317
|
# must be the same number of offset and byte count values
|
3318
3318
|
unless ($count == $count2) {
|
3319
|
-
$
|
3319
|
+
$et->Error("Offsets/ByteCounts disagree on count for $$tagInfo{Name}");
|
3320
3320
|
return undef;
|
3321
3321
|
}
|
3322
3322
|
my $formatStr = $formatName[$format];
|
@@ -3325,7 +3325,7 @@ NoOverwrite: next if $isNew > 0;
|
|
3325
3325
|
my $n = $count * $formatSize[$format];
|
3326
3326
|
$n > 4 and $byteCounts = Get32u(\$newData, $byteCounts);
|
3327
3327
|
if ($byteCounts < 0 or $byteCounts + $n > length($newData)) {
|
3328
|
-
$
|
3328
|
+
$et->Error("Error reading $$tagInfo{Name} byte counts");
|
3329
3329
|
return undef;
|
3330
3330
|
}
|
3331
3331
|
# get offset base and data pos (abnormal for some preview images)
|
@@ -3339,7 +3339,7 @@ NoOverwrite: next if $isNew > 0;
|
|
3339
3339
|
}
|
3340
3340
|
# use different base if necessary for some offsets (Minolta A200)
|
3341
3341
|
if ($$tagInfo{WrongBase}) {
|
3342
|
-
my $self = $
|
3342
|
+
my $self = $et;
|
3343
3343
|
#### eval WrongBase ($self)
|
3344
3344
|
$wrongBase = eval $$tagInfo{WrongBase} || 0;
|
3345
3345
|
$dbase += $wrongBase;
|
@@ -3358,7 +3358,7 @@ NoOverwrite: next if $isNew > 0;
|
|
3358
3358
|
# calculate end offset of this block
|
3359
3359
|
$oldEnd = $$oldOffset[$n] + $$oldSize[$n];
|
3360
3360
|
# update TIFF_END as if we read this data from file
|
3361
|
-
UpdateTiffEnd($
|
3361
|
+
UpdateTiffEnd($et, $oldEnd + $dbase);
|
3362
3362
|
}
|
3363
3363
|
my $offsetPos = $offsets + $n * 4;
|
3364
3364
|
my $byteCountPos = $byteCounts + $n * $formatSize[$format];
|
@@ -3373,7 +3373,7 @@ NoOverwrite: next if $isNew > 0;
|
|
3373
3373
|
if (defined $offset) {
|
3374
3374
|
$offset -= $dpos;
|
3375
3375
|
} elsif ($size != 0xfeedfeed) {
|
3376
|
-
$
|
3376
|
+
$et->Error('Internal error (no offset)');
|
3377
3377
|
return undef;
|
3378
3378
|
}
|
3379
3379
|
my $newOffset = length($newData) - $wrongBase;
|
@@ -3381,20 +3381,20 @@ NoOverwrite: next if $isNew > 0;
|
|
3381
3381
|
# look for 'feed' code to use our new data
|
3382
3382
|
if ($size == 0xfeedfeed) {
|
3383
3383
|
unless (defined $dataTag) {
|
3384
|
-
$
|
3384
|
+
$et->Error("No DataTag defined for $$tagInfo{Name}");
|
3385
3385
|
return undef;
|
3386
3386
|
}
|
3387
3387
|
unless (defined $offsetData{$dataTag}) {
|
3388
|
-
$
|
3388
|
+
$et->Error("Internal error (no $dataTag)");
|
3389
3389
|
return undef;
|
3390
3390
|
}
|
3391
3391
|
if ($count > 1) {
|
3392
|
-
$
|
3392
|
+
$et->Error("Can't modify $$tagInfo{Name} with count $count");
|
3393
3393
|
return undef;
|
3394
3394
|
}
|
3395
3395
|
$buff = $offsetData{$dataTag};
|
3396
3396
|
if ($formatSize[$format] != 4) {
|
3397
|
-
$
|
3397
|
+
$et->Error("$$cntInfo{Name} is not int32");
|
3398
3398
|
return undef;
|
3399
3399
|
}
|
3400
3400
|
# set the data size
|
@@ -3425,7 +3425,7 @@ NoOverwrite: next if $isNew > 0;
|
|
3425
3425
|
} elsif ($offset >= 0 and $offset+$size <= $dataLen) {
|
3426
3426
|
# take data from old dir data buffer
|
3427
3427
|
$buff = substr($$dataPt, $offset, $size);
|
3428
|
-
} elsif ($$
|
3428
|
+
} elsif ($$et{TIFF_TYPE} eq 'MRW') {
|
3429
3429
|
# TTW segment must be an even 4 bytes long, so pad now if necessary
|
3430
3430
|
my $n = length $newData;
|
3431
3431
|
$buff = ($n & 0x03) ? "\0" x (4 - ($n & 0x03)) : '';
|
@@ -3438,8 +3438,8 @@ NoOverwrite: next if $isNew > 0;
|
|
3438
3438
|
{
|
3439
3439
|
# (data was read OK)
|
3440
3440
|
# patch incorrect ThumbnailOffset in Sony A100 1.00 ARW images
|
3441
|
-
if ($$
|
3442
|
-
$$
|
3441
|
+
if ($$et{TIFF_TYPE} eq 'ARW' and $$tagInfo{Name} eq 'ThumbnailOffset' and
|
3442
|
+
$$et{Model} eq 'DSLR-A100' and $buff !~ /^\xff\xd8\xff/)
|
3443
3443
|
{
|
3444
3444
|
my $pos = $offset + $dbase + $dpos;
|
3445
3445
|
my $try;
|
@@ -3447,15 +3447,15 @@ NoOverwrite: next if $isNew > 0;
|
|
3447
3447
|
$raf->Read($try,$size) == $size and $try =~ /^\xff\xd8\xff/)
|
3448
3448
|
{
|
3449
3449
|
$buff = $try;
|
3450
|
-
$
|
3450
|
+
$et->Warn('Adjusted incorrect A100 ThumbnailOffset', 1);
|
3451
3451
|
} else {
|
3452
|
-
$
|
3452
|
+
$et->Error('Invalid ThumbnailImage');
|
3453
3453
|
}
|
3454
3454
|
}
|
3455
3455
|
} elsif ($$tagInfo{Name} eq 'ThumbnailOffset' and $offset>=0 and $offset<$dataLen) {
|
3456
3456
|
# Grrr. The Canon 350D writes the thumbnail with an incorrect byte count
|
3457
3457
|
my $diff = $offset + $size - $dataLen;
|
3458
|
-
$
|
3458
|
+
$et->Warn("ThumbnailImage runs outside EXIF data by $diff bytes (truncated)",1);
|
3459
3459
|
# set the size to the available data
|
3460
3460
|
$size -= $diff;
|
3461
3461
|
unless (WriteValue($size, $formatStr, 1, \$newData, $byteCountPos)) {
|
@@ -3463,45 +3463,45 @@ NoOverwrite: next if $isNew > 0;
|
|
3463
3463
|
}
|
3464
3464
|
# get the truncated image
|
3465
3465
|
$buff = substr($$dataPt, $offset, $size);
|
3466
|
-
} elsif ($$tagInfo{Name} eq 'PreviewImageStart' and
|
3466
|
+
} elsif ($$tagInfo{Name} eq 'PreviewImageStart' and $$et{FILE_TYPE} eq 'JPEG') {
|
3467
3467
|
# try to load the preview image using the specified offset
|
3468
3468
|
undef $buff;
|
3469
|
-
my $r =
|
3469
|
+
my $r = $$et{RAF};
|
3470
3470
|
if ($r and not $raf) {
|
3471
3471
|
my $tell = $r->Tell();
|
3472
3472
|
# read and validate
|
3473
3473
|
undef $buff unless $r->Seek($offset+$base+$dataPos,0) and
|
3474
3474
|
$r->Read($buff,$size) == $size and
|
3475
3475
|
$buff =~ /^.\xd8\xff[\xc4\xdb\xe0-\xef]/s;
|
3476
|
-
$r->Seek($tell, 0) or $
|
3476
|
+
$r->Seek($tell, 0) or $et->Error('Seek error'), return undef;
|
3477
3477
|
}
|
3478
3478
|
# set flag if we must load PreviewImage
|
3479
3479
|
$buff = 'LOAD_PREVIEW' unless defined $buff;
|
3480
3480
|
} else {
|
3481
3481
|
my $dataName = $dataTag || $$tagInfo{Name};
|
3482
|
-
return undef if $
|
3482
|
+
return undef if $et->Error("Error reading $dataName data in $name", $inMakerNotes);
|
3483
3483
|
$buff = '';
|
3484
3484
|
}
|
3485
3485
|
if ($$tagInfo{Name} eq 'PreviewImageStart') {
|
3486
|
-
if ($$
|
3486
|
+
if ($$et{FILE_TYPE} eq 'JPEG' and not $$tagInfo{MakerPreview}) {
|
3487
3487
|
# hold onto the PreviewImage until we can determine if it fits
|
3488
|
-
|
3488
|
+
$$et{PREVIEW_INFO} or $$et{PREVIEW_INFO} = {
|
3489
3489
|
Data => $buff,
|
3490
3490
|
Fixup => new Image::ExifTool::Fixup,
|
3491
3491
|
};
|
3492
3492
|
if ($$tagInfo{IsOffset} and $$tagInfo{IsOffset} eq '2') {
|
3493
|
-
|
3493
|
+
$$et{PREVIEW_INFO}{NoBaseShift} = 1;
|
3494
3494
|
}
|
3495
3495
|
if ($offset >= 0 and $offset+$size <= $dataLen) {
|
3496
3496
|
# set flag indicating this preview wasn't in a trailer
|
3497
|
-
|
3497
|
+
$$et{PREVIEW_INFO}{WasContained} = 1;
|
3498
3498
|
}
|
3499
3499
|
$buff = '';
|
3500
|
-
} elsif ($$
|
3500
|
+
} elsif ($$et{TIFF_TYPE} eq 'ARW' and $$et{Model} eq 'DSLR-A100') {
|
3501
3501
|
# the A100 double-references the same preview, so ignore the
|
3502
3502
|
# second one (the offset and size will be patched later)
|
3503
|
-
next if $$
|
3504
|
-
$$
|
3503
|
+
next if $$et{A100PreviewLength};
|
3504
|
+
$$et{A100PreviewLength} = length $buff if defined $buff;
|
3505
3505
|
}
|
3506
3506
|
}
|
3507
3507
|
# update offset accordingly and add to end of new data
|
@@ -3529,7 +3529,7 @@ NoOverwrite: next if $isNew > 0;
|
|
3529
3529
|
}
|
3530
3530
|
# verify that nothing else got written after determining TTW length
|
3531
3531
|
if (defined $ttwLen and $ttwLen != length($newData)) {
|
3532
|
-
$
|
3532
|
+
$et->Error('Internal error writing MRW TTW');
|
3533
3533
|
}
|
3534
3534
|
}
|
3535
3535
|
#
|
@@ -3541,7 +3541,7 @@ NoOverwrite: next if $isNew > 0;
|
|
3541
3541
|
if (defined $entry) {
|
3542
3542
|
my $format = Get16u(\$newData, $entry + 2);
|
3543
3543
|
if ($format < 1 or $format > 13) {
|
3544
|
-
$
|
3544
|
+
$et->Error('Internal error copying huge value');
|
3545
3545
|
last;
|
3546
3546
|
} else {
|
3547
3547
|
# set count and offset in directory entry
|
@@ -3564,7 +3564,7 @@ NoOverwrite: next if $isNew > 0;
|
|
3564
3564
|
# our offset expects the data at the end of the SubIFD block (BlockLen + Start),
|
3565
3565
|
# but it will actually be at length($newData) + $blockSize. So adjust
|
3566
3566
|
# accordingly (and subtract an extra Start because this shift is applied later)
|
3567
|
-
|
3567
|
+
$$subFix{Shift} += length($newData) - $$subFix{BlockLen} - 2 * $$subFix{Start} + $blockSize;
|
3568
3568
|
$subFix->ApplyFixup(\$newData);
|
3569
3569
|
}
|
3570
3570
|
$blockSize += $size + $pad;
|
@@ -3583,45 +3583,45 @@ NoOverwrite: next if $isNew > 0;
|
|
3583
3583
|
# this when editing JPEG images anyway))
|
3584
3584
|
$fixup->SetMarkerPointers(\$newData, 'CanonVRD', length($newData) + $blockSize);
|
3585
3585
|
if ($newDataPos) {
|
3586
|
-
|
3586
|
+
$$fixup{Shift} += $newDataPos;
|
3587
3587
|
$fixup->ApplyFixup(\$newData);
|
3588
3588
|
}
|
3589
3589
|
# save fixup for adjusting Leica trailer offset if necessary
|
3590
|
-
$$
|
3590
|
+
$$et{LeicaTrailer}{Fixup}->AddFixup($fixup) if $$et{LeicaTrailer};
|
3591
3591
|
# save fixup for PreviewImage in JPEG file if necessary
|
3592
|
-
my $previewInfo =
|
3592
|
+
my $previewInfo = $$et{PREVIEW_INFO};
|
3593
3593
|
if ($previewInfo) {
|
3594
|
-
my $pt =
|
3594
|
+
my $pt = \$$previewInfo{Data}; # image data or 'LOAD_PREVIEW' flag
|
3595
3595
|
# now that we know the size of the EXIF data, first test to see if our new image fits
|
3596
3596
|
# inside the EXIF segment (remember about the TIFF and EXIF headers: 8+6 bytes)
|
3597
3597
|
if (($$pt ne 'LOAD_PREVIEW' and length($$pt) + length($newData) + 14 <= 0xfffd and
|
3598
|
-
not
|
3599
|
-
|
3598
|
+
not $$previewInfo{IsTrailer}) or
|
3599
|
+
$$previewInfo{IsShort}) # must fit in this segment if using short pointers
|
3600
3600
|
{
|
3601
3601
|
# It fits! (or must exist in EXIF segment), so fixup the
|
3602
3602
|
# PreviewImage pointers and stuff the preview image in here
|
3603
3603
|
my $newPos = length($newData) + $newDataPos;
|
3604
|
-
$newPos += (
|
3605
|
-
if (
|
3604
|
+
$newPos += ($$previewInfo{BaseShift} || 0);
|
3605
|
+
if ($$previewInfo{Relative}) {
|
3606
3606
|
# calculate our base by looking at how far the pointer got shifted
|
3607
3607
|
$newPos -= ($fixup->GetMarkerPointers(\$newData, 'PreviewImage') || 0);
|
3608
3608
|
}
|
3609
3609
|
$fixup->SetMarkerPointers(\$newData, 'PreviewImage', $newPos);
|
3610
3610
|
$newData .= $$pt;
|
3611
3611
|
# set flag to delete old preview unless it was contained in the EXIF
|
3612
|
-
|
3613
|
-
delete
|
3612
|
+
$$et{DEL_PREVIEW} = 1 unless $$et{PREVIEW_INFO}{WasContained};
|
3613
|
+
delete $$et{PREVIEW_INFO}; # done with our preview data
|
3614
3614
|
} else {
|
3615
3615
|
# Doesn't fit, or we still don't know, so save fixup information
|
3616
3616
|
# and put the preview at the end of the file
|
3617
|
-
|
3618
|
-
|
3617
|
+
$$previewInfo{Fixup} or $$previewInfo{Fixup} = new Image::ExifTool::Fixup;
|
3618
|
+
$$previewInfo{Fixup}->AddFixup($fixup);
|
3619
3619
|
}
|
3620
3620
|
} elsif (defined $newData and $deleteAll) {
|
3621
3621
|
$newData = ''; # delete both IFD0 and IFD1 since only mandatory tags remain
|
3622
|
-
} elsif ($$
|
3622
|
+
} elsif ($$et{A100PreviewLength}) {
|
3623
3623
|
# save preview image start for patching A100 quirks later
|
3624
|
-
$$
|
3624
|
+
$$et{A100PreviewStart} = $fixup->GetMarkerPointers(\$newData, 'PreviewImage');
|
3625
3625
|
}
|
3626
3626
|
# save location of last IFD for use in Canon RAW header
|
3627
3627
|
if ($newDataPos == 16) {
|
@@ -3629,10 +3629,10 @@ NoOverwrite: next if $isNew > 0;
|
|
3629
3629
|
$$origDirInfo{LastIFD} = pop @ifdPos;
|
3630
3630
|
}
|
3631
3631
|
# recrypt SR2 SubIFD data if necessary
|
3632
|
-
my $key = $$
|
3632
|
+
my $key = $$et{SR2SubIFDKey};
|
3633
3633
|
if ($key) {
|
3634
3634
|
my $start = $fixup->GetMarkerPointers(\$newData, 'SR2SubIFDOffset');
|
3635
|
-
my $len = $$
|
3635
|
+
my $len = $$et{SR2SubIFDLength};
|
3636
3636
|
# (must subtract 8 for size of TIFF header)
|
3637
3637
|
if ($start and $start - 8 + $len <= length $newData) {
|
3638
3638
|
require Image::ExifTool::Sony;
|