123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- #------------------------------------------------------------------------------
- # File: KyoceraRaw.pm
- #
- # Description: Read Kyocera RAW meta information
- #
- # Revisions: 02/17/2006 - P. Harvey Created
- #
- # References: 1) http://www.cybercom.net/~dcoffin/dcraw/
- #------------------------------------------------------------------------------
- package Image::ExifTool::KyoceraRaw;
- use strict;
- use vars qw($VERSION);
- use Image::ExifTool qw(:DataAccess :Utils);
- $VERSION = '1.03';
- sub ProcessRAW($$);
- # utility to reverse order of characters in a string
- sub ReverseString($) { pack('C*',reverse unpack('C*',shift)) }
- # Contax N Digital tags (ref PH)
- %Image::ExifTool::KyoceraRaw::Main = (
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- NOTES => 'Tags for Kyocera Contax N Digital RAW images.',
- 0x01 => {
- Name => 'FirmwareVersion',
- Format => 'string[10]',
- ValueConv => \&ReverseString,
- },
- 0x0c => {
- Name => 'Model',
- Format => 'string[12]',
- ValueConv => \&ReverseString,
- },
- 0x19 => { #1
- Name => 'Make',
- Format => 'string[7]',
- ValueConv => \&ReverseString,
- },
- 0x21 => { #1
- Name => 'DateTimeOriginal',
- Description => 'Date/Time Original',
- Groups => { 2 => 'Time' },
- Format => 'string[20]',
- ValueConv => \&ReverseString,
- PrintConv => '$self->ConvertDateTime($val)',
- },
- 0x34 => {
- Name => 'ISO',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- PrintConv => {
- 7 => 25,
- 8 => 32,
- 9 => 40,
- 10 => 50,
- 11 => 64,
- 12 => 80,
- 13 => 100,
- 14 => 125,
- 15 => 160,
- 16 => 200,
- 17 => 250,
- 18 => 320,
- 19 => 400,
- },
- },
- 0x38 => {
- Name => 'ExposureTime',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- ValueConv => '2**($val / 8) / 16000',
- PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
- },
- 0x3c => { #1
- Name => 'WB_RGGBLevels',
- Groups => { 2 => 'Image' },
- Format => 'int32u[4]',
- },
- 0x58 => {
- Name => 'FNumber',
- Groups => { 2 => 'Image' },
- Format => 'int32u',
- ValueConv => '2**($val/16)',
- PrintConv => 'sprintf("%.2g",$val)',
- },
- 0x68 => {
- Name => 'MaxAperture',
- Format => 'int32u',
- ValueConv => '2**($val/16)',
- PrintConv => 'sprintf("%.2g",$val)',
- },
- 0x70 => {
- Name => 'FocalLength',
- Format => 'int32u',
- PrintConv => '"$val mm"',
- },
- 0x7c => {
- Name => 'Lens',
- Format => 'string[32]',
- },
- );
- #------------------------------------------------------------------------------
- # Extract information from Kyocera RAW image
- # Inputs: 0) ExifTool object reference, 1) dirInfo reference
- # Returns: 1 if this was a valid Kyocera RAW image
- sub ProcessRAW($$)
- {
- my ($et, $dirInfo) = @_;
- my $raf = $$dirInfo{RAF};
- my $size = 156; # size of header
- my $buff;
- $raf->Read($buff, $size) == $size or return 0;
- # validate Make string ('KYOCERA' reversed)
- substr($buff, 0x19, 7) eq 'ARECOYK' or return 0;
- $et->SetFileType();
- SetByteOrder('MM');
- my %dirInfo = (
- DataPt => \$buff,
- DataPos => 0,
- DataLen => $size,
- DirStart => 0,
- DirLen => $size,
- );
- my $tagTablePtr = GetTagTable('Image::ExifTool::KyoceraRaw::Main');
- $et->ProcessDirectory(\%dirInfo, $tagTablePtr);
- return 1;
- }
- 1; # end
- __END__
- =head1 NAME
- Image::ExifTool::KyoceraRaw - Read Kyocera RAW meta information
- =head1 SYNOPSIS
- This module is loaded automatically by Image::ExifTool when required.
- =head1 DESCRIPTION
- This module contains definitions required by Image::ExifTool to read
- meta information from Kyocera Contax N Digital RAW images.
- =head1 AUTHOR
- Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca)
- This library is free software; you can redistribute it and/or modify it
- under the same terms as Perl itself.
- =head1 REFERENCES
- =over 4
- =item L<http://www.cybercom.net/~dcoffin/dcraw/>
- =back
- =head1 SEE ALSO
- L<Image::ExifTool::TagNames/KyoceraRaw Tags>,
- L<Image::ExifTool(3pm)|Image::ExifTool>
- =cut
|