class Exif::Olympus
Public Class Methods
new(fin, tiff_origin, dataPos, byteOrder_module)
click to toggle source
# File lib/exifparser/makernote/olympus.rb, line 169 def initialize(fin, tiff_origin, dataPos, byteOrder_module) @fin = fin @tiffHeader0 = tiff_origin @dataPos = dataPos @byteOrder_module = byteOrder_module self.extend @byteOrder_module end
Public Instance Methods
scan_IFD() { |obj| ... }
click to toggle source
# File lib/exifparser/makernote/olympus.rb, line 177 def scan_IFD # # Olympus MakerNote starts from 8 byte from the origin. # @fin.pos = @dataPos + 8 # # get the number of tags # num_dirs = decode_ushort(fin_read_n(2)) # # now scan them # 1.upto(num_dirs) { curpos_tag = @fin.pos tag = parseTagID(fin_read_n(2)) tagclass = Tag.find(tag.hex, Tag::OlympusIFDTable) unit, formatter = Tag::Format::Unit[decode_ushort(fin_read_n(2))] count = decode_ulong(fin_read_n(4)) tagdata = fin_read_n(4) obj = tagclass.new(tag, "MakerNote", count) obj.extend formatter, @byteOrder_module obj.pos = curpos_tag if unit * count > 4 curpos = @fin.pos begin @fin.pos = @tiffHeader0 + decode_ulong(tagdata) obj.dataPos = @fin.pos obj.data = fin_read_n(unit*count) ensure @fin.pos = curpos end else obj.dataPos = @fin.pos - 4 obj.data = tagdata end obj.processData yield obj } end
Private Instance Methods
fin_read_n(n)
click to toggle source
# File lib/exifparser/makernote/olympus.rb, line 219 def fin_read_n(n) @fin.read(n) end