class Exif::Tag::MakerNote::LensParameters

0x0098 - LensParamaters

Constants

XLAT0
XLAT1

Public Instance Methods

_format0(data) click to toggle source
# File lib/exifparser/makernote/nikon2.rb, line 333
def _format0(data)
  data.unpack("C*").collect{|e| e.to_i}
end
decrypt_data(data, serial, count) click to toggle source
# File lib/exifparser/makernote/nikon2.rb, line 407
def decrypt_data(data, serial, count)
  serialno = serial.to_i
  if serialno == 0
    if serial[0,3] == "D50"
      serialno = 0x22
    else
      serialno = 0x60
    end
  end

  key = 0
  4.times do |i|
    key ^= ((count >> (i*8)) & 0xff)
  end

  ci = XLAT0[serialno & 0xff]
  cj = XLAT1[key]
  ck = 0x60;
  pdata = []

  data.each do |dat|
    cj += ((ci * ck) & 0xff)
    cj &= 0xff
    ck += 1
    pdata.push(dat ^= cj)
  end

  return pdata
end
to_hex() click to toggle source
# File lib/exifparser/makernote/nikon2.rb, line 337
def to_hex
  str = ""
  @formatted.each do |dat|
    str += sprintf("%02x ", dat)
  end
  return str
end
to_s() click to toggle source
# File lib/exifparser/makernote/nikon2.rb, line 379
def to_s
  data = @formatted
  lens_data = ""
  version = data[0, 4].pack('C*')
  case version
  when "0100"
    lens_data = data[6, 7]

  when "0101"
    lens_data = data[11, 7]

  when "0201", "0202", "0203"
    decryptted = decrypt_data(data[4..(data.length - 1)], @@nikon_serial_no, @@release_count)
    lens_data = decryptted[7, 7]
    
  when "0204"
    decryptted = decrypt_data(data[4..(data.length - 1)], @@nikon_serial_no, @@release_count)
    lens_data = decryptted[8, 7]
  end

  return "" if lens_data.length == 0

  self.extend NikonFmount
  ret = Tag::NikonFmount::LensName[lens_data]
  return ret != nil ? ret : ""

end