1 | #------------------------------------------------------------------------------
|
---|
2 | # File: KyoceraRaw.pm
|
---|
3 | #
|
---|
4 | # Description: Read Kyocera RAW meta information
|
---|
5 | #
|
---|
6 | # Revisions: 02/17/2006 - P. Harvey Created
|
---|
7 | #
|
---|
8 | # References: 1) http://www.cybercom.net/~dcoffin/dcraw/
|
---|
9 | #------------------------------------------------------------------------------
|
---|
10 |
|
---|
11 | package Image::ExifTool::KyoceraRaw;
|
---|
12 |
|
---|
13 | use strict;
|
---|
14 | use vars qw($VERSION);
|
---|
15 | use Image::ExifTool qw(:DataAccess);
|
---|
16 |
|
---|
17 | $VERSION = '1.00';
|
---|
18 |
|
---|
19 | sub ProcessRAW($$);
|
---|
20 |
|
---|
21 | # utility to reverse order of characters in a string
|
---|
22 | sub ReverseString($) { pack('C*',reverse unpack('C*',shift)) }
|
---|
23 |
|
---|
24 | # Contax N Digital tags (ref PH)
|
---|
25 | %Image::ExifTool::KyoceraRaw::Main = (
|
---|
26 | PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
---|
27 | GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
---|
28 | NOTES => 'Tags for Kyocera Contax N Digital RAW images.',
|
---|
29 | 0x01 => {
|
---|
30 | Name => 'FirmwareVersion',
|
---|
31 | Format => 'string[10]',
|
---|
32 | ValueConv => \&ReverseString,
|
---|
33 | },
|
---|
34 | 0x0c => {
|
---|
35 | Name => 'Model',
|
---|
36 | Format => 'string[12]',
|
---|
37 | ValueConv => \&ReverseString,
|
---|
38 | },
|
---|
39 | 0x19 => { #1
|
---|
40 | Name => 'Make',
|
---|
41 | Format => 'string[7]',
|
---|
42 | ValueConv => \&ReverseString,
|
---|
43 | },
|
---|
44 | 0x21 => { #1
|
---|
45 | Name => 'DateTimeOriginal',
|
---|
46 | Groups => { 2 => 'Time' },
|
---|
47 | Format => 'string[20]',
|
---|
48 | ValueConv => \&ReverseString,
|
---|
49 | },
|
---|
50 | 0x34 => {
|
---|
51 | Name => 'ISO',
|
---|
52 | Groups => { 2 => 'Image' },
|
---|
53 | Format => 'int32u',
|
---|
54 | PrintConv => {
|
---|
55 | 7 => 25,
|
---|
56 | 8 => 32,
|
---|
57 | 9 => 40,
|
---|
58 | 10 => 50,
|
---|
59 | 11 => 64,
|
---|
60 | 12 => 80,
|
---|
61 | 13 => 100,
|
---|
62 | 14 => 125,
|
---|
63 | 15 => 160,
|
---|
64 | 16 => 200,
|
---|
65 | 17 => 250,
|
---|
66 | 18 => 320,
|
---|
67 | 19 => 400,
|
---|
68 | },
|
---|
69 | },
|
---|
70 | 0x38 => {
|
---|
71 | Name => 'ExposureTime',
|
---|
72 | Groups => { 2 => 'Image' },
|
---|
73 | Format => 'int32u',
|
---|
74 | ValueConv => '2**($val / 8) / 16000',
|
---|
75 | PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
|
---|
76 | },
|
---|
77 | 0x3c => { #1
|
---|
78 | Name => 'WB_RGGBLevels',
|
---|
79 | Groups => { 2 => 'Image' },
|
---|
80 | Format => 'int32u[4]',
|
---|
81 | },
|
---|
82 | 0x58 => {
|
---|
83 | Name => 'FNumber',
|
---|
84 | Groups => { 2 => 'Image' },
|
---|
85 | Format => 'int32u',
|
---|
86 | ValueConv => '2**($val/16)',
|
---|
87 | PrintConv => 'sprintf("%.2g",$val)',
|
---|
88 | },
|
---|
89 | 0x68 => {
|
---|
90 | Name => 'MaxAperture',
|
---|
91 | Format => 'int32u',
|
---|
92 | ValueConv => '2**($val/16)',
|
---|
93 | PrintConv => 'sprintf("%.2g",$val)',
|
---|
94 | },
|
---|
95 | 0x70 => {
|
---|
96 | Name => 'FocalLength',
|
---|
97 | Format => 'int32u',
|
---|
98 | PrintConv => '"${val}mm"',
|
---|
99 | },
|
---|
100 | 0x7c => {
|
---|
101 | Name => 'Lens',
|
---|
102 | Format => 'string[32]',
|
---|
103 | },
|
---|
104 | );
|
---|
105 |
|
---|
106 | #------------------------------------------------------------------------------
|
---|
107 | # Extract information from Kyocera RAW image
|
---|
108 | # Inputs: 0) ExifTool object reference, 1) dirInfo reference
|
---|
109 | # Returns: 1 if this was a valid Kyocera RAW image
|
---|
110 | sub ProcessRAW($$)
|
---|
111 | {
|
---|
112 | my ($exifTool, $dirInfo) = @_;
|
---|
113 | my $raf = $$dirInfo{RAF};
|
---|
114 | my $size = 156; # size of header
|
---|
115 | my $buff;
|
---|
116 |
|
---|
117 | $raf->Read($buff, $size) == $size or return 0;
|
---|
118 | # validate Make string ('KYOCERA' reversed)
|
---|
119 | substr($buff, 0x19, 7) eq 'ARECOYK' or return 0;
|
---|
120 | $exifTool->SetFileType();
|
---|
121 | SetByteOrder('MM');
|
---|
122 | my %dirInfo = (
|
---|
123 | DataPt => \$buff,
|
---|
124 | DataPos => 0,
|
---|
125 | DataLen => $size,
|
---|
126 | DirStart => 0,
|
---|
127 | DirLen => $size,
|
---|
128 | );
|
---|
129 | my $tagTablePtr = Image::ExifTool::GetTagTable('Image::ExifTool::KyoceraRaw::Main');
|
---|
130 | $exifTool->ProcessDirectory(\%dirInfo, $tagTablePtr);
|
---|
131 | return 1;
|
---|
132 | }
|
---|
133 |
|
---|
134 | 1; # end
|
---|
135 |
|
---|
136 | __END__
|
---|
137 |
|
---|
138 | =head1 NAME
|
---|
139 |
|
---|
140 | Image::ExifTool::KyoceraRaw - Read Kyocera RAW meta information
|
---|
141 |
|
---|
142 | =head1 SYNOPSIS
|
---|
143 |
|
---|
144 | This module is loaded automatically by Image::ExifTool when required.
|
---|
145 |
|
---|
146 | =head1 DESCRIPTION
|
---|
147 |
|
---|
148 | This module contains definitions required by Image::ExifTool to read
|
---|
149 | meta information from Kyocera Contax N Digital RAW images.
|
---|
150 |
|
---|
151 | =head1 AUTHOR
|
---|
152 |
|
---|
153 | Copyright 2003-2007, Phil Harvey (phil at owl.phy.queensu.ca)
|
---|
154 |
|
---|
155 | This library is free software; you can redistribute it and/or modify it
|
---|
156 | under the same terms as Perl itself.
|
---|
157 |
|
---|
158 | =head1 REFERENCES
|
---|
159 |
|
---|
160 | =over 4
|
---|
161 |
|
---|
162 | =item L<http://www.cybercom.net/~dcoffin/dcraw/>
|
---|
163 |
|
---|
164 | =back
|
---|
165 |
|
---|
166 | =head1 SEE ALSO
|
---|
167 |
|
---|
168 | L<Image::ExifTool::TagNames/KyoceraRaw Tags>,
|
---|
169 | L<Image::ExifTool(3pm)|Image::ExifTool>
|
---|
170 |
|
---|
171 | =cut
|
---|