source: main/trunk/greenstone2/perllib/cpan/Image/ExifTool/Pentax.pm@ 34921

Last change on this file since 34921 was 34921, checked in by anupama, 3 years ago

Committing the improvements to EmbeddedMetaPlugin's processing of Keywords vs other metadata fields. Keywords were literally stored as arrays of words rather than phrases in PDFs (at least in Diego's sample PDF), whereas other meta fields like Subjects and Creators stored them as arrays of phrases. To get both to work, Kathy updated EXIF to a newer version, to retrieve the actual EXIF values stored in the PDF. And Kathy and Dr Bainbridge came up with a new option that I added called apply_join_before_split_to_metafields that's a regex which can list the metadata fields to apply the join_before_split to and whcih previously always got applied to all metadata fields. Now it's applied to any *Keywords metafields by default, as that's the metafield we have experience of that behaves differently to the others, as it stores by word instead of phrases. Tested on Diego's sample PDF. Diego has double-checked it to works on his sample PDF too, setting the split char to ; and turning on the join_before_split and leaving apply_join_before_split_to_metafields at its default of .*Keywords. File changes are strings.properties for the tooltip, the plugin introducing the option and working with it and Kathy's EXIF updates affecting cpan/File and cpan/Image.

File size: 219.8 KB
Line 
1#------------------------------------------------------------------------------
2# File: Pentax.pm
3#
4# Description: Pentax/Asahi EXIF maker notes tags
5#
6# Revisions: 11/25/2003 - P. Harvey Created
7# 02/10/2004 - P. Harvey Completely re-done
8# 02/16/2004 - W. Smith Updated (see ref 3)
9# 11/10/2004 - P. Harvey Added support for Asahi cameras
10# 01/10/2005 - P. Harvey Added LensType with values from ref 4
11# 03/30/2005 - P. Harvey Added new tags from ref 5
12# 10/04/2005 - P. Harvey Added MOV tags
13# 10/22/2007 - P. Harvey Got my new K10D! (more new tags to decode)
14# 11/03/2010 - P. Harvey Got my new K-5! (a gold mine of new tags to discover!)
15#
16# References: 1) Image::MakerNotes::Pentax
17# 2) http://johnst.org/sw/exiftags/ (Asahi cameras)
18# 3) Wayne Smith private communication (Optio 550)
19# 4) http://kobe1995.jp/~kaz/astro/istD.html
20# 5) John Francis (http://www.panix.com/~johnf/raw/index.html) (ist-D/ist-DS)
21# 6) http://www.cybercom.net/~dcoffin/dcraw/
22# 7) Douglas O'Brien private communication (*istD, K10D)
23# 8) Denis Bourez private communication
24# 9) Kazumichi Kawabata private communication
25# 10) David Buret private communication (*istD)
26# 11) http://forums.dpreview.com/forums/read.asp?forum=1036&message=17465929
27# 12) Derby Chang private communication
28# 13) http://homepage3.nifty.com/kamisaka/makernote/makernote_pentax.htm (2007/02/28)
29# 14) Ger Vermeulen private communication (Optio S6)
30# 15) Barney Garrett private communication (Samsung GX-1S)
31# 16) Axel Kellner private communication (K10D)
32# 17) Cvetan Ivanov private communication (K100D)
33# 18) http://gvsoft.homedns.org/exif/makernote-pentax-type3.html
34# 19) Dave Nicholson private communication (K10D)
35# 20) Bogdan and yeryry (http://www.cpanforum.com/posts/8037)
36# 21) Peter (*istD, http://www.cpanforum.com/posts/8078)
37# 22) Bozi (K10D, http://www.cpanforum.com/posts/8480)
38# 23) Akos Szalkai (https://rt.cpan.org/Ticket/Display.html?id=43743)
39# 24) Albert Bogner private communication
40# 26) https://exiftool.org/forum/index.php/topic,3444.0.html
41# 27) https://exiftool.org/forum/index.php/topic,3833.0.html
42# 28) Klaus Homeister https://exiftool.org/forum/index.php/topic,4803.0.html
43# 29) Louis Granboulan private communication (K-5II)
44# 30) https://exiftool.org/forum/index.php?topic=5433
45# 31) Andras Salamon private communication (K-70)
46# IB) Iliah Borg private communication (LibRaw)
47# JD) Jens Duttke private communication
48# NJ) Niels Kristian Bech Jensen private communication
49#
50# Notes: See POD documentation at the bottom of this file
51#------------------------------------------------------------------------------
52
53package Image::ExifTool::Pentax;
54
55use strict;
56use vars qw($VERSION %pentaxLensTypes);
57use Image::ExifTool::Exif;
58use Image::ExifTool::GPS;
59use Image::ExifTool::HP;
60
61$VERSION = '3.36';
62
63sub CryptShutterCount($$);
64sub PrintFilter($$$);
65sub DecodeAFPoints($$$$;$);
66
67# pentax lens type codes (ref 4)
68# The first number gives the lens series, and the 2nd gives the model number
69# Series numbers: K=1; A=2; F=3; FAJ=4; DFA=4,7; FA=3,4,5,6; FA*=5,6;
70# DA=3,4,7; DA*=7,8; FA645=11; DFA645=13; Q=21
71%pentaxLensTypes = (
72 Notes => q{
73 The first number gives the series of the lens, and the second identifies the
74 lens model. Note that newer series numbers may not always be properly
75 identified by cameras running older firmware versions. Decimal values have
76 been added to differentiate lenses which would otherwise have the same
77 LensType, and are used by the Composite LensID tag when attempting to
78 identify the specific lens model.
79 },
80 OTHER => sub {
81 my ($val, $inv, $conv) = @_;
82 return undef if $inv;
83 # *istD may report a series number of 4 for series 7 lenses
84 $val =~ s/^4 /7 / and $$conv{$val} and return "$$conv{$val} ($_[0])";
85 # cameras that don't recognize SDM lenses (eg. older K10 firmware)
86 # may report series 7 instead of 8
87 $val =~ s/^7 /8 / and $$conv{$val} and return "$$conv{$val} ? ($_[0])";
88 # there seems to some inconsistency between FA and DFA lenses for the 645D...
89 ($val =~ s/^11 /13 / or $val =~ s/^13 /11 /) and $$conv{$val} and return "$$conv{$val} ? ($_[0])";
90 return undef;
91 },
92 '0 0' => 'M-42 or No Lens', #17
93 '1 0' => 'K or M Lens',
94 '2 0' => 'A Series Lens', #7 (from smc PENTAX-A 400mm F5.6)
95 '3 0' => 'Sigma',
96 # (and 'Sigma 18-50mm F2.8 EX Macro')
97 # (and 'Sigma 30mm F1.4 EX DC', ref PH)
98 # (and 'Sigma 50-500mm F4-6.3 DG APO')
99 # (and 'Sigma 70mm F2.8 EX DG Macro')
100 # (and 'Sigma 105mm F2.8 EX DG Macro', ref 24)
101 # (and 'Sigma 180mm F4.5 EX DG Macro')
102 '3 17' => 'smc PENTAX-FA SOFT 85mm F2.8', # (also F version, ref 29)
103 '3 18' => 'smc PENTAX-F 1.7X AF ADAPTER',
104 '3 19' => 'smc PENTAX-F 24-50mm F4',
105 '3 20' => 'smc PENTAX-F 35-80mm F4-5.6',
106 '3 21' => 'smc PENTAX-F 80-200mm F4.7-5.6',
107 '3 22' => 'smc PENTAX-F FISH-EYE 17-28mm F3.5-4.5',
108 '3 23' => 'smc PENTAX-F 100-300mm F4.5-5.6 or Sigma Lens',
109 '3 23.1' => 'Sigma AF 28-300mm F3.5-5.6 DL IF', #JD
110 '3 23.2' => 'Sigma AF 28-300mm F3.5-6.3 DG IF Macro', #JD
111 '3 23.3' => 'Tokina 80-200mm F2.8 ATX-Pro', #Exiv2
112 '3 24' => 'smc PENTAX-F 35-135mm F3.5-4.5',
113 '3 25' => 'smc PENTAX-F 35-105mm F4-5.6 or Sigma or Tokina Lens',
114 '3 25.1' => 'Sigma 55-200mm F4-5.6 DC', #JD
115 '3 25.2' => 'Sigma AF 28-300mm F3.5-5.6 DL IF', #11
116 '3 25.3' => 'Sigma AF 28-300mm F3.5-6.3 DL IF', #Exiv2
117 '3 25.4' => 'Sigma AF 28-300mm F3.5-6.3 DG IF Macro', #JD
118 '3 25.5' => 'Tokina 80-200mm F2.8 ATX-Pro', #12
119 '3 26' => 'smc PENTAX-F* 250-600mm F5.6 ED[IF]',
120 '3 27' => 'smc PENTAX-F 28-80mm F3.5-4.5 or Tokina Lens',
121 '3 27.1' => 'Tokina AT-X Pro AF 28-70mm F2.6-2.8', #JD
122 '3 28' => 'smc PENTAX-F 35-70mm F3.5-4.5 or Tokina Lens',
123 '3 28.1' => 'Tokina 19-35mm F3.5-4.5 AF', #12
124 '3 28.2' => 'Tokina AT-X AF 400mm F5.6', #NJ
125 '3 29' => 'PENTAX-F 28-80mm F3.5-4.5 or Sigma or Tokina Lens',
126 '3 29.1' => 'Sigma AF 18-125mm F3.5-5.6 DC', #11
127 '3 29.2' => 'Tokina AT-X PRO 28-70mm F2.6-2.8', #22
128 '3 30' => 'PENTAX-F 70-200mm F4-5.6',
129 '3 31' => 'smc PENTAX-F 70-210mm F4-5.6 or Tokina or Takumar Lens',
130 '3 31.1' => 'Tokina AF 730 75-300mm F4.5-5.6',
131 '3 31.2' => 'Takumar-F 70-210mm F4-5.6', #JD
132 '3 32' => 'smc PENTAX-F 50mm F1.4',
133 '3 33' => 'smc PENTAX-F 50mm F1.7',
134 '3 34' => 'smc PENTAX-F 135mm F2.8 [IF]',
135 '3 35' => 'smc PENTAX-F 28mm F2.8',
136 '3 36' => 'Sigma 20mm F1.8 EX DG Aspherical RF',
137 '3 38' => 'smc PENTAX-F* 300mm F4.5 ED[IF]',
138 '3 39' => 'smc PENTAX-F* 600mm F4 ED[IF]',
139 '3 40' => 'smc PENTAX-F Macro 100mm F2.8',
140 '3 41' => 'smc PENTAX-F Macro 50mm F2.8 or Sigma Lens', #4
141 '3 41.1' => 'Sigma 50mm F2.8 Macro', #16
142 '3 42' => 'Sigma 300mm F2.8 EX DG APO IF', #27
143 '3 44' => 'Sigma or Tamron Lens (3 44)',
144 '3 44.1' => 'Sigma AF 10-20mm F4-5.6 EX DC', #JD
145 '3 44.2' => 'Sigma 12-24mm F4.5-5.6 EX DG', #12 (added "-5.6", ref 29)
146 '3 44.3' => 'Sigma 17-70mm F2.8-4.5 DC Macro', #(Bart Hickman)
147 '3 44.4' => 'Sigma 18-50mm F3.5-5.6 DC', #4
148 '3 44.5' => 'Sigma 17-35mm F2.8-4 EX DG', #29
149 '3 44.6' => 'Tamron 35-90mm F4-5.6 AF', #12 (added "-5.6", ref IB)
150 '3 44.7' => 'Sigma AF 18-35mm F3.5-4.5 Aspherical', #29
151 '3 46' => 'Sigma or Samsung Lens (3 46)',
152 '3 46.1' => 'Sigma APO 70-200mm F2.8 EX',
153 '3 46.2' => 'Sigma EX APO 100-300mm F4 IF', #JD
154 '3 46.3' => 'Samsung/Schneider D-XENON 50-200mm F4-5.6 ED', #29
155 '3 50' => 'smc PENTAX-FA 28-70mm F4 AL',
156 '3 51' => 'Sigma 28mm F1.8 EX DG Aspherical Macro',
157 '3 52' => 'smc PENTAX-FA 28-200mm F3.8-5.6 AL[IF] or Tamron Lens',
158 '3 52.1' => 'Tamron AF LD 28-200mm F3.8-5.6 [IF] Aspherical (171D)', #JD
159 '3 53' => 'smc PENTAX-FA 28-80mm F3.5-5.6 AL',
160 '3 247' => 'smc PENTAX-DA FISH-EYE 10-17mm F3.5-4.5 ED[IF]',
161 '3 248' => 'smc PENTAX-DA 12-24mm F4 ED AL[IF]',
162 '3 250' => 'smc PENTAX-DA 50-200mm F4-5.6 ED',
163 '3 251' => 'smc PENTAX-DA 40mm F2.8 Limited',
164 '3 252' => 'smc PENTAX-DA 18-55mm F3.5-5.6 AL',
165 '3 253' => 'smc PENTAX-DA 14mm F2.8 ED[IF]',
166 '3 254' => 'smc PENTAX-DA 16-45mm F4 ED AL',
167 '3 255' => 'Sigma Lens (3 255)',
168 '3 255.1' => 'Sigma 18-200mm F3.5-6.3 DC', #8
169 '3 255.2' => 'Sigma DL-II 35-80mm F4-5.6', #12
170 '3 255.3' => 'Sigma DL Zoom 75-300mm F4-5.6', #12
171 '3 255.4' => 'Sigma DF EX Aspherical 28-70mm F2.8', #12
172 '3 255.5' => 'Sigma AF Tele 400mm F5.6 Multi-coated', #JD
173 '3 255.6' => 'Sigma 24-60mm F2.8 EX DG', #PH
174 '3 255.7' => 'Sigma 70-300mm F4-5.6 Macro', #JD
175 '3 255.8' => 'Sigma 55-200mm F4-5.6 DC', #JD
176 '3 255.9' => 'Sigma 18-50mm F2.8 EX DC', #JD (also Macro version - PH)
177 '4 1' => 'smc PENTAX-FA SOFT 28mm F2.8',
178 '4 2' => 'smc PENTAX-FA 80-320mm F4.5-5.6',
179 '4 3' => 'smc PENTAX-FA 43mm F1.9 Limited',
180 '4 6' => 'smc PENTAX-FA 35-80mm F4-5.6',
181 '4 8' => 'Irix 150mm F2.8 Macro', #exiv2 issue 1084
182 '4 9' => 'Irix 11mm F4 Firefly', #27
183 '4 10' => 'Irix 15mm F2.4', #27
184 '4 12' => 'smc PENTAX-FA 50mm F1.4', #17
185 '4 15' => 'smc PENTAX-FA 28-105mm F4-5.6 [IF]',
186 '4 16' => 'Tamron AF 80-210mm F4-5.6 (178D)', #13
187 '4 19' => 'Tamron SP AF 90mm F2.8 (172E)',
188 '4 20' => 'smc PENTAX-FA 28-80mm F3.5-5.6',
189 '4 21' => 'Cosina AF 100-300mm F5.6-6.7', #20
190 '4 22' => 'Tokina 28-80mm F3.5-5.6', #13
191 '4 23' => 'smc PENTAX-FA 20-35mm F4 AL',
192 '4 24' => 'smc PENTAX-FA 77mm F1.8 Limited',
193 '4 25' => 'Tamron SP AF 14mm F2.8', #13
194 '4 26' => 'smc PENTAX-FA Macro 100mm F3.5 or Cosina Lens',
195 '4 26.1' => 'Cosina 100mm F3.5 Macro', #JD
196 '4 27' => 'Tamron AF 28-300mm F3.5-6.3 LD Aspherical[IF] Macro (185D/285D)',
197 '4 28' => 'smc PENTAX-FA 35mm F2 AL',
198 '4 29' => 'Tamron AF 28-200mm F3.8-5.6 LD Super II Macro (371D)', #JD
199 '4 34' => 'smc PENTAX-FA 24-90mm F3.5-4.5 AL[IF]',
200 '4 35' => 'smc PENTAX-FA 100-300mm F4.7-5.8',
201 # '4 36' => 'Tamron AF70-300mm F4-5.6 LD Macro', # both 572D and A17 (Di) - ref JD
202 '4 36' => 'Tamron AF 70-300mm F4-5.6 LD Macro 1:2', #NJ
203 '4 37' => 'Tamron SP AF 24-135mm F3.5-5.6 AD AL (190D)', #13
204 '4 38' => 'smc PENTAX-FA 28-105mm F3.2-4.5 AL[IF]',
205 '4 39' => 'smc PENTAX-FA 31mm F1.8 AL Limited',
206 '4 41' => 'Tamron AF 28-200mm Super Zoom F3.8-5.6 Aspherical XR [IF] Macro (A03)',
207 '4 43' => 'smc PENTAX-FA 28-90mm F3.5-5.6',
208 '4 44' => 'smc PENTAX-FA J 75-300mm F4.5-5.8 AL',
209 '4 45' => 'Tamron Lens (4 45)',
210 '4 45.1' => 'Tamron 28-300mm F3.5-6.3 Ultra zoom XR',
211 '4 45.2' => 'Tamron AF 28-300mm F3.5-6.3 XR Di LD Aspherical [IF] Macro', #JD
212 '4 46' => 'smc PENTAX-FA J 28-80mm F3.5-5.6 AL',
213 '4 47' => 'smc PENTAX-FA J 18-35mm F4-5.6 AL',
214 #'4 49' => 'Tamron SP AF 28-75mm F2.8 XR Di (A09)',
215 '4 49' => 'Tamron SP AF 28-75mm F2.8 XR Di LD Aspherical [IF] Macro', #NJ
216 '4 51' => 'smc PENTAX-D FA 50mm F2.8 Macro',
217 '4 52' => 'smc PENTAX-D FA 100mm F2.8 Macro',
218 '4 55' => 'Samsung/Schneider D-XENOGON 35mm F2', #29
219 '4 56' => 'Samsung/Schneider D-XENON 100mm F2.8 Macro', #Alan Robinson
220 '4 75' => 'Tamron SP AF 70-200mm F2.8 Di LD [IF] Macro (A001)', #JD
221 '4 214' => 'smc PENTAX-DA 35mm F2.4 AL', #PH
222 '4 229' => 'smc PENTAX-DA 18-55mm F3.5-5.6 AL II', #JD
223 '4 230' => 'Tamron SP AF 17-50mm F2.8 XR Di II', #20
224 '4 231' => 'smc PENTAX-DA 18-250mm F3.5-6.3 ED AL [IF]', #21
225 '4 237' => 'Samsung/Schneider D-XENOGON 10-17mm F3.5-4.5', #JD
226 '4 239' => 'Samsung/Schneider D-XENON 12-24mm F4 ED AL [IF]', #23
227 '4 242' => 'smc PENTAX-DA* 16-50mm F2.8 ED AL [IF] SDM (SDM unused)', #Pietu Pohjalainen
228 '4 243' => 'smc PENTAX-DA 70mm F2.4 Limited', #JD
229 '4 244' => 'smc PENTAX-DA 21mm F3.2 AL Limited', #9
230 '4 245' => 'Samsung/Schneider D-XENON 50-200mm F4-5.6', #15
231 '4 246' => 'Samsung/Schneider D-XENON 18-55mm F3.5-5.6', #15
232 '4 247' => 'smc PENTAX-DA FISH-EYE 10-17mm F3.5-4.5 ED[IF]', #10
233 '4 248' => 'smc PENTAX-DA 12-24mm F4 ED AL [IF]', #10
234 '4 249' => 'Tamron XR DiII 18-200mm F3.5-6.3 (A14)',
235 '4 250' => 'smc PENTAX-DA 50-200mm F4-5.6 ED', #8
236 '4 251' => 'smc PENTAX-DA 40mm F2.8 Limited', #9
237 '4 252' => 'smc PENTAX-DA 18-55mm F3.5-5.6 AL', #8
238 '4 253' => 'smc PENTAX-DA 14mm F2.8 ED[IF]',
239 '4 254' => 'smc PENTAX-DA 16-45mm F4 ED AL',
240 '5 1' => 'smc PENTAX-FA* 24mm F2 AL[IF]',
241 '5 2' => 'smc PENTAX-FA 28mm F2.8 AL',
242 '5 3' => 'smc PENTAX-FA 50mm F1.7',
243 '5 4' => 'smc PENTAX-FA 50mm F1.4',
244 '5 5' => 'smc PENTAX-FA* 600mm F4 ED[IF]',
245 '5 6' => 'smc PENTAX-FA* 300mm F4.5 ED[IF]',
246 '5 7' => 'smc PENTAX-FA 135mm F2.8 [IF]',
247 '5 8' => 'smc PENTAX-FA Macro 50mm F2.8',
248 '5 9' => 'smc PENTAX-FA Macro 100mm F2.8',
249 '5 10' => 'smc PENTAX-FA* 85mm F1.4 [IF]',
250 '5 11' => 'smc PENTAX-FA* 200mm F2.8 ED[IF]',
251 '5 12' => 'smc PENTAX-FA 28-80mm F3.5-4.7',
252 '5 13' => 'smc PENTAX-FA 70-200mm F4-5.6',
253 '5 14' => 'smc PENTAX-FA* 250-600mm F5.6 ED[IF]',
254 '5 15' => 'smc PENTAX-FA 28-105mm F4-5.6',
255 '5 16' => 'smc PENTAX-FA 100-300mm F4.5-5.6',
256 '5 98' => 'smc PENTAX-FA 100-300mm F4.5-5.6', #JD (pre-production? - PH)
257 '6 1' => 'smc PENTAX-FA* 85mm F1.4 [IF]',
258 '6 2' => 'smc PENTAX-FA* 200mm F2.8 ED[IF]',
259 '6 3' => 'smc PENTAX-FA* 300mm F2.8 ED[IF]',
260 '6 4' => 'smc PENTAX-FA* 28-70mm F2.8 AL',
261 '6 5' => 'smc PENTAX-FA* 80-200mm F2.8 ED[IF]',
262 '6 6' => 'smc PENTAX-FA* 28-70mm F2.8 AL',
263 '6 7' => 'smc PENTAX-FA* 80-200mm F2.8 ED[IF]',
264 '6 8' => 'smc PENTAX-FA 28-70mm F4AL',
265 '6 9' => 'smc PENTAX-FA 20mm F2.8',
266 '6 10' => 'smc PENTAX-FA* 400mm F5.6 ED[IF]',
267 '6 13' => 'smc PENTAX-FA* 400mm F5.6 ED[IF]',
268 '6 14' => 'smc PENTAX-FA* Macro 200mm F4 ED[IF]',
269 '7 0' => 'smc PENTAX-DA 21mm F3.2 AL Limited', #13
270 '7 58' => 'smc PENTAX-D FA Macro 100mm F2.8 WR', #PH - this bit of information cost me $600 ;)
271 '7 75' => 'Tamron SP AF 70-200mm F2.8 Di LD [IF] Macro (A001)', #(Anton Bondar)
272 '7 201' => 'smc Pentax-DA L 50-200mm F4-5.6 ED WR', #(Bruce Rusk)
273 '7 202' => 'smc PENTAX-DA L 18-55mm F3.5-5.6 AL WR', #29
274 '7 203' => 'HD PENTAX-DA 55-300mm F4-5.8 ED WR', #29
275 '7 204' => 'HD PENTAX-DA 15mm F4 ED AL Limited', #forum5318
276 '7 205' => 'HD PENTAX-DA 35mm F2.8 Macro Limited', #29
277 '7 206' => 'HD PENTAX-DA 70mm F2.4 Limited', #29
278 '7 207' => 'HD PENTAX-DA 21mm F3.2 ED AL Limited', #forum5327
279 '7 208' => 'HD PENTAX-DA 40mm F2.8 Limited', #PH
280 '7 212' => 'smc PENTAX-DA 50mm F1.8', #PH
281 '7 213' => 'smc PENTAX-DA 40mm F2.8 XS', #PH
282 '7 214' => 'smc PENTAX-DA 35mm F2.4 AL', #PH
283 '7 216' => 'smc PENTAX-DA L 55-300mm F4-5.8 ED', #PH
284 '7 217' => 'smc PENTAX-DA 50-200mm F4-5.6 ED WR', #JD
285 '7 218' => 'smc PENTAX-DA 18-55mm F3.5-5.6 AL WR', #JD
286 '7 220' => 'Tamron SP AF 10-24mm F3.5-4.5 Di II LD Aspherical [IF]', #24
287 '7 221' => 'smc PENTAX-DA L 50-200mm F4-5.6 ED', #Ar't
288 '7 222' => 'smc PENTAX-DA L 18-55mm F3.5-5.6', #PH (tag 0x003f -- was '7 229' in LensInfo of one test image)
289 '7 223' => 'Samsung/Schneider D-XENON 18-55mm F3.5-5.6 II', #PH
290 '7 224' => 'smc PENTAX-DA 15mm F4 ED AL Limited', #JD
291 '7 225' => 'Samsung/Schneider D-XENON 18-250mm F3.5-6.3', #8/PH
292 '7 226' => 'smc PENTAX-DA* 55mm F1.4 SDM (SDM unused)', #PH (NC)
293 '7 227' => 'smc PENTAX-DA* 60-250mm F4 [IF] SDM (SDM unused)', #PH (NC)
294 '7 228' => 'Samsung 16-45mm F4 ED', #29
295 '7 229' => 'smc PENTAX-DA 18-55mm F3.5-5.6 AL II', #JD
296 '7 230' => 'Tamron AF 17-50mm F2.8 XR Di-II LD (Model A16)', #JD
297 '7 231' => 'smc PENTAX-DA 18-250mm F3.5-6.3 ED AL [IF]', #JD
298 '7 233' => 'smc PENTAX-DA 35mm F2.8 Macro Limited', #JD
299 '7 234' => 'smc PENTAX-DA* 300mm F4 ED [IF] SDM (SDM unused)', #19 (NC)
300 '7 235' => 'smc PENTAX-DA* 200mm F2.8 ED [IF] SDM (SDM unused)', #PH (NC)
301 '7 236' => 'smc PENTAX-DA 55-300mm F4-5.8 ED', #JD
302 '7 238' => 'Tamron AF 18-250mm F3.5-6.3 Di II LD Aspherical [IF] Macro', #JD
303 '7 241' => 'smc PENTAX-DA* 50-135mm F2.8 ED [IF] SDM (SDM unused)', #PH
304 '7 242' => 'smc PENTAX-DA* 16-50mm F2.8 ED AL [IF] SDM (SDM unused)', #19
305 '7 243' => 'smc PENTAX-DA 70mm F2.4 Limited', #PH
306 '7 244' => 'smc PENTAX-DA 21mm F3.2 AL Limited', #16
307 '8 0' => 'Sigma 50-150mm F2.8 II APO EX DC HSM', #forum2997
308 '8 3' => 'Sigma 18-125mm F3.8-5.6 DC HSM', #forum10167
309 '8 4' => 'Sigma 50mm F1.4 EX DG HSM', #Artur private communication
310 '8 6' => 'Sigma 4.5mm F2.8 EX DC Fisheye', #IB
311 '8 7' => 'Sigma 24-70mm F2.8 IF EX DG HSM', #Exiv2
312 '8 8' => 'Sigma 18-250mm F3.5-6.3 DC OS HSM', #27
313 '8 11' => 'Sigma 10-20mm F3.5 EX DC HSM', #27
314 '8 12' => 'Sigma 70-300mm F4-5.6 DG OS', #forum3382
315 '8 13' => 'Sigma 120-400mm F4.5-5.6 APO DG OS HSM', #26
316 '8 14' => 'Sigma 17-70mm F2.8-4.0 DC Macro OS HSM', #(Hubert Meier)
317 '8 15' => 'Sigma 150-500mm F5-6.3 APO DG OS HSM', #26
318 '8 16' => 'Sigma 70-200mm F2.8 EX DG Macro HSM II', #26
319 '8 17' => 'Sigma 50-500mm F4.5-6.3 DG OS HSM', #(Heike Herrmann) (also APO, ref 26)
320 '8 18' => 'Sigma 8-16mm F4.5-5.6 DC HSM', #forum2998
321 '8 20' => 'Sigma 18-50mm F2.8-4.5 DC HSM', #IB
322 '8 21' => 'Sigma 17-50mm F2.8 EX DC OS HSM', #26
323 '8 22' => 'Sigma 85mm F1.4 EX DG HSM', #26
324 '8 23' => 'Sigma 70-200mm F2.8 APO EX DG OS HSM', #27
325 '8 24' => 'Sigma 17-70mm F2.8-4 DC Macro OS HSM', #27
326 '8 25' => 'Sigma 17-50mm F2.8 EX DC HSM', #Exiv2
327 '8 27' => 'Sigma 18-200mm F3.5-6.3 II DC HSM', #27
328 '8 28' => 'Sigma 18-250mm F3.5-6.3 DC Macro HSM', #27
329 '8 29' => 'Sigma 35mm F1.4 DG HSM', #27
330 '8 30' => 'Sigma 17-70mm F2.8-4 DC Macro HSM | C', #27
331 '8 31' => 'Sigma 18-35mm F1.8 DC HSM', #27
332 '8 32' => 'Sigma 30mm F1.4 DC HSM | A', #27
333 '8 33' => 'Sigma 18-200mm F3.5-6.3 DC Macro HSM', #DieterPearcey (C014)
334 '8 34' => 'Sigma 18-300mm F3.5-6.3 DC Macro HSM', #NJ
335 '8 59' => 'HD PENTAX-D FA 150-450mm F4.5-5.6 ED DC AW', #29
336 '8 60' => 'HD PENTAX-D FA* 70-200mm F2.8 ED DC AW', #29
337 '8 61' => 'HD PENTAX-D FA 28-105mm F3.5-5.6 ED DC WR', #PH
338 '8 62' => 'HD PENTAX-D FA 24-70mm F2.8 ED SDM WR', #PH
339 '8 63' => 'HD PENTAX-D FA 15-30mm F2.8 ED SDM WR', #PH
340 '8 64' => 'HD PENTAX-D FA* 50mm F1.4 SDM AW', #27
341 '8 65' => 'HD PENTAX-D FA 70-210mm F4 ED SDM WR', #PH
342 '8 66' => 'HD PENTAX-D FA 85mm F1.4 ED SDM AW', #James O'Neill
343 '8 196' => 'HD PENTAX-DA* 11-18mm F2.8 ED DC AW', #29
344 '8 197' => 'HD PENTAX-DA 55-300mm F4.5-6.3 ED PLM WR RE', #29
345 '8 198' => 'smc PENTAX-DA L 18-50mm F4-5.6 DC WR RE', #29
346 '8 199' => 'HD PENTAX-DA 18-50mm F4-5.6 DC WR RE', #29
347 '8 200' => 'HD PENTAX-DA 16-85mm F3.5-5.6 ED DC WR', #29
348 '8 209' => 'HD PENTAX-DA 20-40mm F2.8-4 ED Limited DC WR', #29
349 '8 210' => 'smc PENTAX-DA 18-270mm F3.5-6.3 ED SDM', #Helmut Schutz
350 '8 211' => 'HD PENTAX-DA 560mm F5.6 ED AW', #PH
351 '8 215' => 'smc PENTAX-DA 18-135mm F3.5-5.6 ED AL [IF] DC WR', #PH
352 '8 226' => 'smc PENTAX-DA* 55mm F1.4 SDM', #JD
353 '8 227' => 'smc PENTAX-DA* 60-250mm F4 [IF] SDM', #JD
354 '8 232' => 'smc PENTAX-DA 17-70mm F4 AL [IF] SDM', #JD
355 '8 234' => 'smc PENTAX-DA* 300mm F4 ED [IF] SDM', #19
356 '8 235' => 'smc PENTAX-DA* 200mm F2.8 ED [IF] SDM', #JD
357 '8 241' => 'smc PENTAX-DA* 50-135mm F2.8 ED [IF] SDM', #JD
358 '8 242' => 'smc PENTAX-DA* 16-50mm F2.8 ED AL [IF] SDM', #JD
359 '8 255' => 'Sigma Lens (8 255)',
360 '8 255.1' => 'Sigma 70-200mm F2.8 EX DG Macro HSM II', #JD
361 '8 255.2' => 'Sigma 150-500mm F5-6.3 DG APO [OS] HSM', #JD (non-OS version has same type, ref 29)
362 '8 255.3' => 'Sigma 50-150mm F2.8 II APO EX DC HSM', #forum2997
363 '8 255.4' => 'Sigma 4.5mm F2.8 EX DC HSM Circular Fisheye', #PH
364 '8 255.5' => 'Sigma 50-200mm F4-5.6 DC OS', #26
365 '8 255.6' => 'Sigma 24-70mm F2.8 EX DG HSM', #29
366#
367# 645 lenses
368#
369 '9 0' => '645 Manual Lens', #PH (NC)
370 '10 0' => '645 A Series Lens', #PH
371 '11 1' => 'smc PENTAX-FA 645 75mm F2.8', #PH
372 '11 2' => 'smc PENTAX-FA 645 45mm F2.8', #PH
373 '11 3' => 'smc PENTAX-FA* 645 300mm F4 ED [IF]', #PH
374 '11 4' => 'smc PENTAX-FA 645 45-85mm F4.5', #PH
375 '11 5' => 'smc PENTAX-FA 645 400mm F5.6 ED [IF]', #PH
376 '11 7' => 'smc PENTAX-FA 645 Macro 120mm F4', #PH
377 '11 8' => 'smc PENTAX-FA 645 80-160mm F4.5', #PH
378 '11 9' => 'smc PENTAX-FA 645 200mm F4 [IF]', #PH
379 '11 10' => 'smc PENTAX-FA 645 150mm F2.8 [IF]', #PH
380 '11 11' => 'smc PENTAX-FA 645 35mm F3.5 AL [IF]', #PH
381 '11 12' => 'smc PENTAX-FA 645 300mm F5.6 ED [IF]', #29
382 '11 14' => 'smc PENTAX-FA 645 55-110mm F5.6', #PH
383 '11 16' => 'smc PENTAX-FA 645 33-55mm F4.5 AL', #PH
384 '11 17' => 'smc PENTAX-FA 645 150-300mm F5.6 ED [IF]', #PH
385 '11 21' => 'HD PENTAX-D FA 645 35mm F3.5 AL [IF]', #29
386 '13 18' => 'smc PENTAX-D FA 645 55mm F2.8 AL [IF] SDM AW', #PH
387 '13 19' => 'smc PENTAX-D FA 645 25mm F4 AL [IF] SDM AW', #PH
388 '13 20' => 'HD PENTAX-D FA 645 90mm F2.8 ED AW SR', #PH
389 '13 253' => 'HD PENTAX-DA 645 28-45mm F4.5 ED AW SR', #Dominique Schrekling email
390 '13 254' => 'smc PENTAX-DA 645 25mm F4 AL [IF] SDM AW', #forum8253
391#
392# Q-mount lenses (21=auto focus lens, 22=manual focus)
393#
394 '21 0' => 'Pentax Q Manual Lens', #PH
395 '21 1' => '01 Standard Prime 8.5mm F1.9', #PH
396 '21 2' => '02 Standard Zoom 5-15mm F2.8-4.5', #PH
397 '22 3' => '03 Fish-eye 3.2mm F5.6', #PH
398 '22 4' => '04 Toy Lens Wide 6.3mm F7.1', #PH
399 '22 5' => '05 Toy Lens Telephoto 18mm F8', #PH
400 '21 6' => '06 Telephoto Zoom 15-45mm F2.8', #PH
401 '21 7' => '07 Mount Shield 11.5mm F9', #PH (NC)
402 '21 8' => '08 Wide Zoom 3.8-5.9mm F3.7-4', #PH (NC)
403 '21 233' => 'Adapter Q for K-mount Lens', #29
404#
405# Ricoh lenses
406#
407 '31 1' => 'GR Lens', #PH (GR III 28mm F2.8)
408);
409
410# Pentax model ID codes - PH
411my %pentaxModelID = (
412 0x0000d => 'Optio 330/430',
413 0x12926 => 'Optio 230',
414 0x12958 => 'Optio 330GS',
415 0x12962 => 'Optio 450/550',
416 0x1296c => 'Optio S',
417 0x12971 => 'Optio S V1.01',
418 0x12994 => '*ist D',
419 0x129b2 => 'Optio 33L',
420 0x129bc => 'Optio 33LF',
421 0x129c6 => 'Optio 33WR/43WR/555',
422 0x129d5 => 'Optio S4',
423 0x12a02 => 'Optio MX',
424 0x12a0c => 'Optio S40',
425 0x12a16 => 'Optio S4i',
426 0x12a34 => 'Optio 30',
427 0x12a52 => 'Optio S30',
428 0x12a66 => 'Optio 750Z',
429 0x12a70 => 'Optio SV',
430 0x12a75 => 'Optio SVi',
431 0x12a7a => 'Optio X',
432 0x12a8e => 'Optio S5i',
433 0x12a98 => 'Optio S50',
434 0x12aa2 => '*ist DS',
435 0x12ab6 => 'Optio MX4',
436 0x12ac0 => 'Optio S5n',
437 0x12aca => 'Optio WP',
438 0x12afc => 'Optio S55',
439 0x12b10 => 'Optio S5z',
440 0x12b1a => '*ist DL',
441 0x12b24 => 'Optio S60',
442 0x12b2e => 'Optio S45',
443 0x12b38 => 'Optio S6',
444 0x12b4c => 'Optio WPi', #13
445 0x12b56 => 'BenQ DC X600',
446 0x12b60 => '*ist DS2',
447 0x12b62 => 'Samsung GX-1S',
448 0x12b6a => 'Optio A10',
449 0x12b7e => '*ist DL2',
450 0x12b80 => 'Samsung GX-1L',
451 0x12b9c => 'K100D',
452 0x12b9d => 'K110D',
453 0x12ba2 => 'K100D Super', #JD
454 0x12bb0 => 'Optio T10/T20',
455 0x12be2 => 'Optio W10',
456 0x12bf6 => 'Optio M10',
457 0x12c1e => 'K10D',
458 0x12c20 => 'Samsung GX10',
459 0x12c28 => 'Optio S7',
460 0x12c2d => 'Optio L20',
461 0x12c32 => 'Optio M20',
462 0x12c3c => 'Optio W20',
463 0x12c46 => 'Optio A20',
464 0x12c78 => 'Optio E30',
465 0x12c7d => 'Optio E35',
466 0x12c82 => 'Optio T30',
467 0x12c8c => 'Optio M30',
468 0x12c91 => 'Optio L30',
469 0x12c96 => 'Optio W30',
470 0x12ca0 => 'Optio A30',
471 0x12cb4 => 'Optio E40',
472 0x12cbe => 'Optio M40',
473 0x12cc3 => 'Optio L40',
474 0x12cc5 => 'Optio L36',
475 0x12cc8 => 'Optio Z10',
476 0x12cd2 => 'K20D',
477 0x12cd4 => 'Samsung GX20', #8
478 0x12cdc => 'Optio S10',
479 0x12ce6 => 'Optio A40',
480 0x12cf0 => 'Optio V10',
481 0x12cfa => 'K200D',
482 0x12d04 => 'Optio S12',
483 0x12d0e => 'Optio E50',
484 0x12d18 => 'Optio M50',
485 0x12d22 => 'Optio L50',
486 0x12d2c => 'Optio V20',
487 0x12d40 => 'Optio W60',
488 0x12d4a => 'Optio M60',
489 0x12d68 => 'Optio E60/M90',
490 0x12d72 => 'K2000',
491 0x12d73 => 'K-m',
492 0x12d86 => 'Optio P70',
493 0x12d90 => 'Optio L70',
494 0x12d9a => 'Optio E70',
495 0x12dae => 'X70',
496 0x12db8 => 'K-7',
497 0x12dcc => 'Optio W80',
498 0x12dea => 'Optio P80',
499 0x12df4 => 'Optio WS80',
500 0x12dfe => 'K-x',
501 0x12e08 => '645D',
502 0x12e12 => 'Optio E80',
503 0x12e30 => 'Optio W90',
504 0x12e3a => 'Optio I-10',
505 0x12e44 => 'Optio H90',
506 0x12e4e => 'Optio E90',
507 0x12e58 => 'X90',
508 0x12e6c => 'K-r',
509 0x12e76 => 'K-5',
510 0x12e8a => 'Optio RS1000/RS1500',
511 0x12e94 => 'Optio RZ10',
512 0x12e9e => 'Optio LS1000',
513 0x12ebc => 'Optio WG-1 GPS',
514 0x12ed0 => 'Optio S1',
515 0x12ee4 => 'Q',
516 0x12ef8 => 'K-01',
517 0x12f0c => 'Optio RZ18',
518 0x12f16 => 'Optio VS20',
519 0x12f2a => 'Optio WG-2 GPS',
520 0x12f48 => 'Optio LS465',
521 0x12f52 => 'K-30',
522 0x12f5c => 'X-5',
523 0x12f66 => 'Q10',
524 0x12f70 => 'K-5 II',
525 0x12f71 => 'K-5 II s', #forum4515
526 0x12f7a => 'Q7',
527 0x12f84 => 'MX-1',
528 0x12f8e => 'WG-3 GPS',
529 0x12f98 => 'WG-3',
530 0x12fa2 => 'WG-10',
531 0x12fb6 => 'K-50',
532 0x12fc0 => 'K-3', #29
533 0x12fca => 'K-500',
534 0x12fe8 => 'WG-4', # (Ricoh)
535 0x12fde => 'WG-4 GPS', # (Ricoh)
536 0x13006 => 'WG-20', # (Ricoh)
537 0x13010 => '645Z',
538 0x1301a => 'K-S1',
539 0x13024 => 'K-S2', #29 (Ricoh)
540 0x1302e => 'Q-S1',
541 0x13056 => 'WG-30', # (Ricoh)
542 0x1307e => 'WG-30W', # (Ricoh)
543 0x13088 => 'WG-5 GPS', # (Ricoh)
544 0x13092 => 'K-1', #IB (Ricoh)
545 0x1309c => 'K-3 II', #29 (Ricoh)
546 0x131f0 => 'WG-M2', # (Ricoh)
547 0x1320e => 'GR III', # (Ricoh)
548 0x13222 => 'K-70', #29 (Ricoh)
549 0x1322c => 'KP', #29 (Ricoh)
550 0x13240 => 'K-1 Mark II', # (Ricoh)
551 0x13290 => 'WG-70', # (Ricoh)
552);
553
554# Pentax city codes - (PH, Optio WP)
555my %pentaxCities = (
556 0 => 'Pago Pago',
557 1 => 'Honolulu',
558 2 => 'Anchorage',
559 3 => 'Vancouver',
560 4 => 'San Francisco',
561 5 => 'Los Angeles',
562 6 => 'Calgary',
563 7 => 'Denver',
564 8 => 'Mexico City',
565 9 => 'Chicago',
566 10 => 'Miami',
567 11 => 'Toronto',
568 12 => 'New York',
569 13 => 'Santiago',
570 14 => 'Caracus',
571 15 => 'Halifax',
572 16 => 'Buenos Aires',
573 17 => 'Sao Paulo',
574 18 => 'Rio de Janeiro',
575 19 => 'Madrid',
576 20 => 'London',
577 21 => 'Paris',
578 22 => 'Milan',
579 23 => 'Rome',
580 24 => 'Berlin',
581 25 => 'Johannesburg',
582 26 => 'Istanbul',
583 27 => 'Cairo',
584 28 => 'Jerusalem',
585 29 => 'Moscow',
586 30 => 'Jeddah',
587 31 => 'Tehran',
588 32 => 'Dubai',
589 33 => 'Karachi',
590 34 => 'Kabul',
591 35 => 'Male',
592 36 => 'Delhi',
593 37 => 'Colombo',
594 38 => 'Kathmandu',
595 39 => 'Dacca',
596 40 => 'Yangon',
597 41 => 'Bangkok',
598 42 => 'Kuala Lumpur',
599 43 => 'Vientiane',
600 44 => 'Singapore',
601 45 => 'Phnom Penh',
602 46 => 'Ho Chi Minh',
603 47 => 'Jakarta',
604 48 => 'Hong Kong',
605 49 => 'Perth',
606 50 => 'Beijing',
607 51 => 'Shanghai',
608 52 => 'Manila',
609 53 => 'Taipei',
610 54 => 'Seoul',
611 55 => 'Adelaide',
612 56 => 'Tokyo',
613 57 => 'Guam',
614 58 => 'Sydney',
615 59 => 'Noumea',
616 60 => 'Wellington',
617 61 => 'Auckland',
618 62 => 'Lima',
619 63 => 'Dakar',
620 64 => 'Algiers',
621 65 => 'Helsinki',
622 66 => 'Athens',
623 67 => 'Nairobi',
624 68 => 'Amsterdam',
625 69 => 'Stockholm',
626 70 => 'Lisbon', #14
627 71 => 'Copenhagen', #NJ
628 72 => 'Warsaw',
629 73 => 'Prague',
630 74 => 'Budapest',
631);
632
633# digital filter tag information (ref PH, K-5)
634# (also see %filterSettings below for decoding of filter parameters)
635my %digitalFilter = (
636 Format => 'undef[17]',
637 RawConv => '($val!~/^\\0/ or $$self{OPTIONS}{Unknown}) ? join(" ",unpack("Cc*",$val)) : undef',
638 SeparateTable => 'DigitalFilter',
639 ValueConvInv => q{
640 return "\0" x 17 if $val eq "0";
641 $val = pack("Cc*", $val=~/[-+]?\d+/g);
642 length($val)==17 or warn("Expecting 17 values\n"), return undef;
643 return $val;
644 },
645 PrintConv => {
646 OTHER => \&PrintFilter, # this routine actually converts all values
647 0 => 'Off',
648 1 => 'Base Parameter Adjust',
649 2 => 'Soft Focus',
650 3 => 'High Contrast',
651 4 => 'Color Filter',
652 5 => 'Extract Color',
653 6 => 'Monochrome',
654 7 => 'Slim',
655 9 => 'Fisheye',
656 10 => 'Toy Camera',
657 11 => 'Retro',
658 12 => 'Pastel',
659 13 => 'Water Color',
660 14 => 'HDR',
661 16 => 'Miniature',
662 17 => 'Starburst',
663 18 => 'Posterization',
664 19 => 'Sketch Filter',
665 20 => 'Shading', # (Q)
666 21 => 'Invert Color', # (Q)
667 23 => 'Tone Expansion', #Forum5247
668 27 => 'Unicolor Bold', #31
669 28 => 'Bold Monochrome', #31
670 29 => 'Replace Color', #31
671 254 => 'Custom Filter',
672 },
673);
674
675# digital filter setting names and conversions (ref PH, K-5)
676# Note: names must be unique for writing
677my %filterSettings = (
678 1 => ['Brightness', '%+d'], # BPA (-8-+8)
679 2 => ['Saturation', '%+d'], # BPA (-3-+3)
680 3 => ['Hue', '%+d'], # BPA (-3-+3)
681 4 => ['Contrast', '%+d'], # BPA (-3-+3)
682 5 => ['Sharpness', '%+d'], # BPA (-3-+3)
683 6 => ['SoftFocus', '%d'], # Soft Focus/Custom (1-3)
684 7 => ['ShadowBlur', { 0=>'Off',1=>'On' }], # Soft Focus
685 8 => ['HighContrast', '%d'], # High Contrast/Custom (1-5)
686 9 => ['Color', { 1=>'Red',2=>'Magenta',3=>'Blue',4=>'Cyan',5=>'Green',6=>'Yellow' }], # Color Filter
687 10 => ['Density', { 1=>'Light',2=>'Standard',3=>'Dark' }], # Color Filter
688 11 => ['ExtractedColor',{ 0=>'Off',1=>'Red',2=>'Magenta',3=>'Blue',4=>'Cyan',5=>'Green',6=>'Yellow' }], # Extract Color [x2]
689 12 => ['ColorRange', '%+d'], # Extract Color [x2] (-2-+2)
690 13 => ['FilterEffect', { 0=>'Off',1=>'Red',2=>'Green',3=>'Blue',4=>'Infrared'}], # Monochrome
691 14 => ['ToningBA', '%+d'], # Monochrome (-3-+3)
692 15 => ['InvertColor', { 0=>'Off',1=>'On' }], # Custom/Invert Color
693 16 => ['Slim', '%+d'], # Slim (-8-+8)
694 17 => ['EffectDensity', { 1=>'Sparse',2=>'Normal',3=>'Dense' }], # Starburst
695 18 => ['Size', { 1=>'Small',2=>'Medium',3=>'Large' }], # Starburst
696 19 => ['Angle', { 0=>'0deg',2=>'30deg',3=>'45deg',4=>'60deg'}], # Starburst (1 is unused)
697 20 => ['Fisheye', { 1=>'Weak',2=>'Medium',3=>'Strong' }], # Fisheye
698 21 => ['DistortionType', '%d'], # Custom (1-3)
699 22 => ['DistortionLevel',{0=>'Off',1=>'Weak',2=>'Medium',3=>'Strong' }], #Custom
700 23 => ['ShadingType', '%d'], # Custom/Shading (1-6)
701 24 => ['ShadingLevel', '%+d'], # Custom/Shading (-3-+3)
702 25 => ['Shading', '%d'], # Toy Camera (1-3)
703 26 => ['Blur', '%d'], # Toy Camera (1-3)
704 27 => ['ToneBreak', { 0=>'Off',1=>'Red',2=>'Green',3=>'Blue',4=>'Yellow'}], # Toy Camera/Custom
705 28 => ['Toning', '%+d'], # Retro (-3-+3)
706 29 => ['FrameComposite',{ 0=>'None',1=>'Thin',2=>'Medium',3=>'Thick' }], # Retro
707 30 => ['PastelStrength',{ 1=>'Weak',2=>'Medium',3=>'Strong' }], # Pastel
708 31 => ['Intensity', '%d'], # Water Color (1-3)
709 32 => ['Saturation2', { 0=>'Off',1=>'Low',2=>'Medium',3=>'High' }], # Water Color
710 33 => ['HDR', { 1=>'Weak',2=>'Medium',3=>'Strong' }], # HDR
711 # (34 missing)
712 35 => ['FocusPlane', '%+d'], # Miniature (-3-+3)
713 36 => ['FocusWidth', { 1=>'Narrow',2=>'Middle',3=>'Wide' }], # Miniature
714 37 => ['PlaneAngle', { 0=>'Horizontal',1=>'Vertical',2=>'Positive slope',3=>'Negative slope' }], # Miniature
715 38 => ['Blur2', '%d'], # Miniature (1-3)
716 39 => ['Shape', { 1=>'Cross',2=>'Star',3=>'Snowflake',4=>'Heart',5=>'Note'}], # Starburst
717 40 => ['Posterization', '%d'], # Posterization (1-5)
718 41 => ['Contrast2', { 1=>'Low',2=>'Medium',3=>'High'}], # Sketch Filter
719 42 => ['ScratchEffect', { 0=>'Off',1=>'On' }], # Sketch Filter
720 45 => ['ToneExpansion', { 1=>'Low',2=>'Medium',3=>'High' }], # Tone Expansion (ref Forum5247)
721 47 => ['UnicolorBold', { 1=>'Red',2=>'Magenta',3=>'Blue',4=>'Cyan',5=>'Green',6=>'Yellow' }], #31 Unicolor Bold
722 48 => ['BoldMonochrome', '%d'], #31 Bold Monochrome (1-3)
723 49 => ['OriginalColor', { 1=>'Red',2=>'Magenta',3=>'Blue',4=>'Cyan',5=>'Green',6=>'Yellow' }], #31 Replace Color
724 50 => ['NewColor', { 1=>'Red',2=>'Magenta',3=>'Blue',4=>'Cyan',5=>'Green',6=>'Yellow' }], #31 Replace Color
725 51 => ['ColorScale', '%d'], #31 Replace Color (1-5)
726 52 => ['Toning2', '%+d'], #31 Extract Color (-3-+3)
727);
728
729# decoding for Pentax Firmware ID tags - PH
730my %pentaxFirmwareID = (
731 # the first 2 numbers are the firmware version, I'm not sure what the second 2 mean
732 # Note: the byte order may be different for some models
733 # which give, for example, version 0.01 instead of 1.00
734 ValueConv => sub {
735 my $val = shift;
736 return $val unless length($val) == 4;
737 # (value is encrypted by toggling all bits)
738 my @a = map { $_ ^ 0xff } unpack("C*",$val);
739 return sprintf('%d %.2d %.2d %.2d', @a);
740 },
741 ValueConvInv => sub {
742 my $val = shift;
743 my @a = $val=~/\b\d+\b/g;
744 return $val unless @a == 4;
745 @a = map { ($_ & 0xff) ^ 0xff } @a;
746 return pack("C*", @a);
747 },
748 PrintConv => '$val=~tr/ /./; $val',
749 PrintConvInv => '$val=~s/^(\d+)\.(\d+)\.(\d+)\.(\d+)/$1 $2 $3 $4/ ? $val : undef',
750);
751
752# convert 16 or 77 metering segment values to approximate LV equivalent - PH
753my %convertMeteringSegments = (
754 PrintConv => sub { join ' ', map(
755 { $_==255 ? 'n/a' : $_==0 ? '0' : sprintf '%.1f', $_ / 8 - 6 } split(' ',$_[0])
756 ) },
757 PrintConvInv => sub { join ' ', map(
758 { /^n/i ? 255 : $_==0 ? '0' : int(($_ + 6) * 8 + 0.5) } split(' ',$_[0])
759 ) },
760);
761
762# lens code conversions
763my %lensCode = (
764 Unknown => 1,
765 PrintConv => 'sprintf("0x%.2x", $val)',
766 PrintConvInv => 'hex($val)',
767);
768
769# conversions for tags 0x0053-0x005a
770my %colorTemp = (
771 Writable => 'undef',
772 Count => 4,
773 ValueConv => sub {
774 my $val = shift;
775 return $val unless length $val == 4;
776 my @a = unpack 'nCC', $val;
777 $a[0] = 53190 - $a[0];
778 $a[1] = ($a[2] & 0x0f); $a[1] -= 16 if $a[1] >= 8;
779 $a[2] = ($a[2] >> 4); $a[2] -= 16 if $a[2] >= 8;
780 return "@a";
781 },
782 ValueConvInv => sub {
783 my $val = shift;
784 my @a = split ' ', $val;
785 return undef unless @a == 3;
786 return pack 'nCC', 53190 - $a[0], 0, ($a[1] & 0x0f) + (($a[2] & 0x0f) << 4);
787 },
788 PrintConv => sub {
789 $_ = shift;
790 s/ ([1-9])/ +$1/g;
791 s/ 0/ 0/g;
792 return $_;
793 },
794 PrintConvInv => '$val',
795);
796
797# conversions for KelvinWB tags
798my %kelvinWB = (
799 Format => 'int16u[4]',
800 ValueConv => sub {
801 my @a = split ' ', shift;
802 (53190 - $a[0]) . ' ' . $a[1] . ' ' . ($a[2] / 8192) . ' ' . ($a[3] / 8192);
803 },
804 ValueConvInv => sub {
805 my @a = split ' ', shift;
806 (53190 - $a[0]) . ' ' . $a[1] . ' ' . int($a[2]*8192+0.5) . ' ' . int($a[3]*8192+0.5);
807 },
808);
809
810my %noYes = ( 0 => 'No', 1 => 'Yes' );
811
812# common attributes for writable BinaryData directories
813my %binaryDataAttrs = (
814 PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
815 WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
816 CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
817 WRITABLE => 1,
818 FIRST_ENTRY => 0,
819);
820
821# Pentax makernote tags
822%Image::ExifTool::Pentax::Main = (
823 WRITE_PROC => \&Image::ExifTool::Exif::WriteExif,
824 CHECK_PROC => \&Image::ExifTool::Exif::CheckExif,
825 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
826 WRITABLE => 1,
827 0x0000 => { #5
828 Name => 'PentaxVersion',
829 Writable => 'int8u',
830 Count => 4,
831 PrintConv => '$val=~tr/ /./; $val',
832 PrintConvInv => '$val=~tr/./ /; $val',
833 # 0.1.0.3 - PENTAX Optio E40
834 # 3.0.0.0 - K10D
835 # 3.1.0.0 - Optio A40/S10/L36/L40/M40/V10
836 # 3.1.1.0 - Optio L36/L40/M40/V10
837 # 3.1.2.0 - Optio Z10
838 # 4.0.2.0 - Optio E50
839 # 4.1.0.0 - Optio S12
840 # 4.1.1.0 - Optio M50
841 # 4.1.2.0 - K20D, K200D
842 # 4.2.0.0 - Optio L50/V20
843 # 4.2.1.0 - Optio E60/M90
844 # 4.2.2.0 - Optio W60
845 # 4.2.3.0 - Optio M60
846 # 4.4.0.1 - K-m, K2000
847 # 4.5.0.0 - Optio E70/L70
848 # 4.5.0.0 - Optio E70/L70/P70
849 # 4.6.0.0 - Optio E80/E90/W80
850 # 5.0.0.0 - K-7, Optio P80/WS80
851 # 5.1.0.0 - K-x
852 # 5.2.0.0 - Optio I-10
853 # 5.3.0.0 - Optio H90
854 # 5.3.2.0 - Optio W90/X90
855 # 6.0.0.0 - K-r, 645D
856 # 6.1.3.0 - Optio LS1000/RS1000/RS1500/RZ10
857 # 7.0.0.0 - K-5
858 # 7.1.0.0 - Optio WG-1GPS/WG-10/WG-20
859 # 7.2.0.0 - Optio S1
860 # 8.0.0.0 - Q
861 # 8.0.1.0 - Optio RZ18
862 # 8.0.4.0 - Optio VS20
863 # 8.1.0.0 - Optio LS465/WG-2GPS
864 # 9.0.0.0 - K-01
865 # 9.1.2.0 - X-5
866 # 10.0.0.0 - K-30, K-50, K-500, K-5 II, K-5 II s
867 # 10.0.2.0 - Q10
868 # 10.2.0.0 - WG-3/WG-4
869 # 10.2.1.0 - MX-1
870 # 10.4.1.0 - WG-3/4/5 GPS, WG-30/30W
871 # 10.6.1.0 - Q-S1, Q7
872 # 11.0.0.0 - K-3
873 # 11.2.1.0 - 645Z
874 # 11.3.0.0 - K-S1
875 # 11.5.0.0 - K-S2
876 # 11.6.1.0 - K-3 II
877 # 11.7.5.0 - WG-M2
878 # 12.0.0.0 - K-1
879 # 12.1.3.0 - K-70
880 # 12.1.5.0 - KP
881 },
882 0x0001 => { #PH
883 Name => 'PentaxModelType',
884 Writable => 'int16u',
885 # (values of 0-5 seem to group models into 6 categories, ref 13)
886 },
887 0x0002 => { #PH
888 Name => 'PreviewImageSize',
889 Groups => { 2 => 'Image' },
890 Writable => 'int16u',
891 Count => 2,
892 PrintConv => '$val =~ tr/ /x/; $val',
893 PrintConvInv => '$val =~ tr/x/ /; $val',
894 },
895 0x0003 => { #PH
896 Name => 'PreviewImageLength',
897 OffsetPair => 0x0004, # point to associated offset
898 DataTag => 'PreviewImage',
899 Groups => { 2 => 'Image' },
900 Writable => 'int32u',
901 WriteGroup => 'MakerNotes',
902 Protected => 2,
903 },
904 0x0004 => { #PH
905 Name => 'PreviewImageStart',
906 IsOffset => 2, # code to use original base
907 OffsetPair => 0x0003, # point to associated byte count
908 DataTag => 'PreviewImage',
909 Groups => { 2 => 'Image' },
910 Writable => 'int32u',
911 WriteGroup => 'MakerNotes',
912 Protected => 2,
913 },
914 0x0005 => { #13
915 Name => 'PentaxModelID',
916 Writable => 'int32u',
917 PrintHex => 1,
918 SeparateTable => 1,
919 DataMember => 'PentaxModelID',
920 RawConv => '$$self{PentaxModelID} = $val',
921 PrintConv => \%pentaxModelID,
922 },
923 0x0006 => { #5
924 # Note: Year is int16u in MM byte ordering regardless of EXIF byte order
925 Name => 'Date',
926 Groups => { 2 => 'Time' },
927 Notes => 'changing either Date or Time will affect ShutterCount decryption',
928 Writable => 'undef',
929 Count => 4,
930 Shift => 'Time',
931 DataMember => 'PentaxDate',
932 RawConv => '$$self{PentaxDate} = $val', # save to decrypt ShutterCount
933 ValueConv => 'length($val)==4 ? sprintf("%.4d:%.2d:%.2d",unpack("nC2",$val)) : "Unknown ($val)"',
934 ValueConvInv => q{
935 $val =~ s/(\d) .*/$1/; # remove Time
936 my @v = split /:/, $val;
937 return pack("nC2",$v[0],$v[1],$v[2]);
938 },
939 },
940 0x0007 => { #5
941 Name => 'Time',
942 Groups => { 2 => 'Time' },
943 Writable => 'undef',
944 Count => 3,
945 Shift => 'Time',
946 DataMember => 'PentaxTime',
947 RawConv => '$$self{PentaxTime} = $val', # save to decrypt ShutterCount
948 ValueConv => 'length($val)>=3 ? sprintf("%.2d:%.2d:%.2d",unpack("C3",$val)) : "Unknown ($val)"',
949 ValueConvInv => q{
950 $val =~ s/^[0-9:]+ (\d)/$1/; # remove Date
951 return pack("C3",split(/:/,$val));
952 },
953 },
954 0x0008 => { #2
955 Name => 'Quality',
956 Writable => 'int16u',
957 PrintConvColumns => 2,
958 PrintConv => {
959 0 => 'Good',
960 1 => 'Better',
961 2 => 'Best',
962 3 => 'TIFF', #5
963 4 => 'RAW', #5
964 5 => 'Premium', #PH (K20D)
965 7 => 'RAW (pixel shift enabled)', #forum6536 (K-3 II)
966 8 => 'Dynamic Pixel Shift', #IB
967 65535 => 'n/a', #PH (Q MOV video)
968 },
969 },
970 0x0009 => { #3
971 Name => 'PentaxImageSize',
972 Groups => { 2 => 'Image' },
973 Writable => 'int16u',
974 PrintConvColumns => 2,
975 PrintConv => {
976 0 => '640x480',
977 1 => 'Full', #PH - this can mean 2048x1536 or 2240x1680 or ... ?
978 2 => '1024x768',
979 3 => '1280x960', #PH (Optio WP)
980 4 => '1600x1200',
981 5 => '2048x1536',
982 8 => '2560x1920 or 2304x1728', #PH (Optio WP) or #14
983 9 => '3072x2304', #PH (Optio M30)
984 10 => '3264x2448', #13
985 19 => '320x240', #PH (Optio WP)
986 20 => '2288x1712', #13
987 21 => '2592x1944',
988 22 => '2304x1728 or 2592x1944', #2 or #14
989 23 => '3056x2296', #13
990 25 => '2816x2212 or 2816x2112', #13 or #14
991 27 => '3648x2736', #PH (Optio A20)
992 29 => '4000x3000', #PH (X70)
993 30 => '4288x3216', #PH (Optio RS1000)
994 31 => '4608x3456', #PH (Optio RZ18)
995 129 => '1920x1080', #PH (Optio RZ10)
996 135 => '4608x2592', #PH (Q10 stretch filter)
997 257 => '3216x3216', #PH (Optio RZ10)
998 '0 0' => '2304x1728', #13
999 '4 0' => '1600x1200', #PH (Optio MX4)
1000 '5 0' => '2048x1536', #13
1001 '8 0' => '2560x1920', #13
1002 '32 2' => '960x640', #7
1003 '33 2' => '1152x768', #7
1004 '34 2' => '1536x1024', #7
1005 '35 1' => '2400x1600', #7
1006 '36 0' => '3008x2008 or 3040x2024', #PH
1007 '37 0' => '3008x2000', #13
1008 # 65535 - seen for an X-5 panorama (PH)
1009 },
1010 },
1011 0x000b => { #3
1012 Name => 'PictureMode',
1013 Writable => 'int16u',
1014 Count => -1,
1015 Notes => q{
1016 1 or 2 values. Decimal values differentiate Optio 555 modes which are
1017 different from other models
1018 },
1019 ValueConv => '(IsInt($val) and $val < 4 and $$self{Model} =~ /Optio 555\b/) ? $val + 0.1 : $val',
1020 ValueConvInv => 'int $val',
1021 PrintConvColumns => 2,
1022 PrintConv => [{
1023 0 => 'Program', #PH
1024 0.1 => 'Av', #PH (Optio 555)
1025 1 => 'Shutter Speed Priority', #JD
1026 1.1 => 'M', #PH (Optio 555)
1027 2 => 'Program AE', #13
1028 2.1 => 'Tv', #PH (Optio 555)
1029 3 => 'Manual', #13
1030 3.1 => 'USER', #PH (Optio 555)
1031 5 => 'Portrait',
1032 6 => 'Landscape',
1033 8 => 'Sport', #PH
1034 9 => 'Night Scene',
1035 # 10 "full mode"? #13
1036 11 => 'Soft', #PH
1037 12 => 'Surf & Snow',
1038 13 => 'Candlelight', #13
1039 14 => 'Autumn',
1040 15 => 'Macro',
1041 17 => 'Fireworks',
1042 18 => 'Text',
1043 19 => 'Panorama', #PH
1044 20 => '3-D', #PH (Optio 555)
1045 21 => 'Black & White', #PH (Optio 555)
1046 22 => 'Sepia', #PH (Optio 555)
1047 23 => 'Red', #PH (Optio 555)
1048 24 => 'Pink', #PH (Optio 555)
1049 25 => 'Purple', #PH (Optio 555)
1050 26 => 'Blue', #PH (Optio 555)
1051 27 => 'Green', #PH (Optio 555)
1052 28 => 'Yellow', #PH (Optio 555)
1053 30 => 'Self Portrait', #PH
1054 31 => 'Illustrations', #13
1055 33 => 'Digital Filter', #13
1056 35 => 'Night Scene Portrait', #NJ
1057 37 => 'Museum', #PH
1058 38 => 'Food', #PH
1059 39 => 'Underwater', #NJ
1060 40 => 'Green Mode', #PH
1061 49 => 'Light Pet', #PH
1062 50 => 'Dark Pet', #PH
1063 51 => 'Medium Pet', #PH
1064 53 => 'Underwater', #PH
1065 54 => 'Candlelight', #PH
1066 55 => 'Natural Skin Tone', #PH
1067 56 => 'Synchro Sound Record', #PH
1068 58 => 'Frame Composite', #14
1069 59 => 'Report', #NJ
1070 60 => 'Kids', #13
1071 61 => 'Blur Reduction', #13
1072 63 => 'Panorama 2', #PH (X-5)
1073 65 => 'Half-length Portrait', #JD
1074 66 => 'Portrait 2', #PH (LS645)
1075 74 => 'Digital Microscope', #PH (WG-4)
1076 75 => 'Blue Sky', #PH (LS465)
1077 80 => 'Miniature', #PH (VS20)
1078 81 => 'HDR', #PH (LS465)
1079 83 => 'Fisheye', #PH (VS20)
1080 85 => 'Digital Filter 4', #PH (WG-5)
1081 221 => 'P', #PH (Optio 555)
1082 255=> 'PICT', #PH (Optio 555)
1083 }],
1084 },
1085 0x000c => { #PH
1086 Name => 'FlashMode',
1087 Writable => 'int16u',
1088 Count => -1,
1089 PrintHex => 1,
1090 PrintConv => [{
1091 0x000 => 'Auto, Did not fire',
1092 0x001 => 'Off, Did not fire',
1093 0x002 => 'On, Did not fire', #19
1094 0x003 => 'Auto, Did not fire, Red-eye reduction',
1095 0x005 => 'On, Did not fire, Wireless (Master)', #19
1096 0x100 => 'Auto, Fired',
1097 0x102 => 'On, Fired',
1098 0x103 => 'Auto, Fired, Red-eye reduction',
1099 0x104 => 'On, Red-eye reduction',
1100 0x105 => 'On, Wireless (Master)', #19
1101 0x106 => 'On, Wireless (Control)', #19
1102 0x108 => 'On, Soft',
1103 0x109 => 'On, Slow-sync',
1104 0x10a => 'On, Slow-sync, Red-eye reduction',
1105 0x10b => 'On, Trailing-curtain Sync',
1106 },{ #19 (AF-540FGZ flash)
1107 0x000 => 'n/a - Off-Auto-Aperture', #19
1108 0x03f => 'Internal',
1109 0x100 => 'External, Auto',
1110 0x23f => 'External, Flash Problem', #JD
1111 0x300 => 'External, Manual',
1112 0x304 => 'External, P-TTL Auto',
1113 0x305 => 'External, Contrast-control Sync', #JD
1114 0x306 => 'External, High-speed Sync',
1115 0x30c => 'External, Wireless',
1116 0x30d => 'External, Wireless, High-speed Sync',
1117 }],
1118 },
1119 0x000d => [ #2
1120 {
1121 Name => 'FocusMode',
1122 # (can't test for "PENTAX" because MOV videos don't have Make)
1123 Condition => '$$self{Make} !~ /^Asahi/',
1124 Notes => 'Pentax models',
1125 Writable => 'int16u',
1126 PrintConvColumns => 2,
1127 PrintConv => { #PH
1128 0 => 'Normal',
1129 1 => 'Macro',
1130 2 => 'Infinity',
1131 3 => 'Manual',
1132 4 => 'Super Macro', #JD
1133 5 => 'Pan Focus',
1134 # 8 - seen for Ricoh GR III
1135 # 9 - seen for Ricoh GR III
1136 16 => 'AF-S (Focus-priority)', #17
1137 17 => 'AF-C (Focus-priority)', #17
1138 18 => 'AF-A (Focus-priority)', #PH (educated guess)
1139 32 => 'Contrast-detect (Focus-priority)', #PH (K-5)
1140 33 => 'Tracking Contrast-detect (Focus-priority)', #PH (K-5)
1141 # bit 8 indicates release priority
1142 272 => 'AF-S (Release-priority)', #PH (K-5,K-3)
1143 273 => 'AF-C (Release-priority)', #PH (K-5,K-3)
1144 274 => 'AF-A (Release-priority)', #PH (K-3)
1145 288 => 'Contrast-detect (Release-priority)', #PH (K-01)
1146 # 32777 (0x8009) - seen for Ricoh GR III
1147 # 32779 (0x800b) - seen for Ricoh GR III
1148 },
1149 },{
1150 Name => 'FocusMode',
1151 Writable => 'int16u',
1152 Notes => 'Asahi models',
1153 PrintConv => { #2
1154 0 => 'Normal',
1155 1 => 'Macro (1)',
1156 2 => 'Macro (2)',
1157 3 => 'Infinity',
1158 },
1159 },
1160 ],
1161 0x000e => [{ #29
1162 Name => 'AFPointSelected',
1163 Condition => '$$self{Model} =~ /K-1\b/',
1164 Writable => 'int16u',
1165 Notes => 'K-1',
1166 PrintConvColumns => 2,
1167 PrintConv => [{
1168 0xffff => 'Auto',
1169 0xfffe => 'Fixed Center',
1170 0xfffd => 'Automatic Tracking AF', #JD
1171 0xfffc => 'Face Detect AF', #JD
1172 0xfffb => 'AF Select', #PH (Q select from 25-areas)
1173 # AF pattern:
1174 # 01 02 03 04 05
1175 # 06 07 08 09 10 11 12
1176 # 13 14 15 16 17 18 19 20 21
1177 # 22 23 24 25 26 27 28
1178 # 29 30 31 32 33
1179 0 => 'None',
1180 1 => 'Top-left',
1181 2 => 'Top Near-left',
1182 3 => 'Top',
1183 4 => 'Top Near-right',
1184 5 => 'Top-right',
1185 6 => 'Upper Far-left',
1186 7 => 'Upper-left',
1187 8 => 'Upper Near-left',
1188 9 => 'Upper-middle',
1189 10 => 'Upper Near-right',
1190 11 => 'Upper-right',
1191 12 => 'Upper Far-right',
1192 13 => 'Far Far Left',
1193 14 => 'Far Left',
1194 15 => 'Left',
1195 16 => 'Near-left',
1196 17 => 'Center',
1197 18 => 'Near-right',
1198 19 => 'Right',
1199 20 => 'Far Right',
1200 21 => 'Far Far Right',
1201 22 => 'Lower Far-left',
1202 23 => 'Lower-left',
1203 24 => 'Lower Near-left',
1204 25 => 'Lower-middle',
1205 26 => 'Lower Near-right',
1206 27 => 'Lower-right',
1207 28 => 'Lower Far-right',
1208 29 => 'Bottom-left',
1209 30 => 'Bottom Near-left',
1210 31 => 'Bottom',
1211 32 => 'Bottom Near-right',
1212 33 => 'Bottom-right',
1213 263 => 'Zone Select Upper-left', # 01,02;06,07,08;14,15,16
1214 264 => 'Zone Select Upper Near-left', # 01,02,03;07,08,09;15,16,17
1215 265 => 'Zone Select Upper Middle', # 02,03,04;08,09,10;16,17,18
1216 266 => 'Zone Select Upper Near-right', # 03,04,05;09,10,11;17,18,19
1217 267 => 'Zone Select Upper-right', # 04,05;10,11,12;18,19,20
1218 270 => 'Zone Select Far Left', # 06,07;13,14,15;22,23
1219 271 => 'Zone Select Left', # 06,07,08;14,15,16;22,23,24
1220 272 => 'Zone Select Near-left', # 07,08,09;15,16,17;23,24,25
1221 273 => 'Zone Select Center', # 08,09,10;16,17,18;24,25,26
1222 274 => 'Zone Select Near-right', # 09,10,11;17,18,19;25,26,27
1223 275 => 'Zone Select Right', # 10,11,12;18,19,20;26,27,28
1224 276 => 'Zone Select Far Right', # 11,12;19,20,21;27,28
1225 279 => 'Zone Select Lower-left', # 14,15,16;22,23,24;29,30
1226 280 => 'Zone Select Lower Near-left', # 15,16,17;23,24,25;29,30,31
1227 281 => 'Zone Select Lower-middle', # 16,17,18;24,25,26;30,31,32
1228 282 => 'Zone Select Lower Near-right', # 17,18,19;25,26,27;31,32,33
1229 283 => 'Zone Select Lower-right', # 18,19,20;26,27,28;32,33
1230 },{
1231 0 => 'Single Point',
1232 1 => 'Expanded Area 9-point (S)',
1233 3 => 'Expanded Area 25-point (M)',
1234 5 => 'Expanded Area 33-point (L)',
1235 }],
1236 },{
1237 Name => 'AFPointSelected',
1238 Condition => '$$self{Model} =~ /K-3\b/',
1239 Writable => 'int16u',
1240 Notes => 'K-3',
1241 PrintConvColumns => 2,
1242 PrintConv => [{
1243 # 0 - Contrast-detect AF? - PH (K-5)
1244 0xffff => 'Auto',
1245 0xfffe => 'Fixed Center',
1246 0xfffd => 'Automatic Tracking AF', #JD
1247 0xfffc => 'Face Detect AF', #JD
1248 0xfffb => 'AF Select', #PH (Q select from 25-areas)
1249 # AF pattern: (ref forum5422)
1250 # 01 02 03 04 05
1251 # 06 07 08 09 10
1252 # 11 12 13 14 15 16 17
1253 # 18 19 20 21 22
1254 # 23 24 25 26 27
1255 0 => 'None',
1256 1 => 'Top-left',
1257 2 => 'Top Near-left',
1258 3 => 'Top',
1259 4 => 'Top Near-right',
1260 5 => 'Top-right',
1261 6 => 'Upper-left',
1262 7 => 'Upper Near-left',
1263 8 => 'Upper-middle',
1264 9 => 'Upper Near-right',
1265 10 => 'Upper-right',
1266 11 => 'Far Left',
1267 12 => 'Left',
1268 13 => 'Near-left',
1269 14 => 'Center',
1270 15 => 'Near-right',
1271 16 => 'Right',
1272 17 => 'Far Right',
1273 18 => 'Lower-left',
1274 19 => 'Lower Near-left',
1275 20 => 'Lower-middle',
1276 21 => 'Lower Near-right',
1277 22 => 'Lower-right',
1278 23 => 'Bottom-left',
1279 24 => 'Bottom Near-left',
1280 25 => 'Bottom',
1281 26 => 'Bottom Near-right',
1282 27 => 'Bottom-right',
1283 #forum5892
1284 257 => 'Zone Select Top-left',
1285 258 => 'Zone Select Top Near-left',
1286 259 => 'Zone Select Top',
1287 260 => 'Zone Select Top Near-right',
1288 261 => 'Zone Select Top-right',
1289 262 => 'Zone Select Upper-left',
1290 263 => 'Zone Select Upper Near-left',
1291 264 => 'Zone Select Upper-middle',
1292 265 => 'Zone Select Upper Near-right',
1293 266 => 'Zone Select Upper-right',
1294 267 => 'Zone Select Far Left',
1295 268 => 'Zone Select Left',
1296 269 => 'Zone Select Near-left',
1297 270 => 'Zone Select Center',
1298 271 => 'Zone Select Near-right',
1299 272 => 'Zone Select Right',
1300 273 => 'Zone Select Far Right',
1301 274 => 'Zone Select Lower-left',
1302 275 => 'Zone Select Lower Near-left',
1303 276 => 'Zone Select Lower-middle',
1304 277 => 'Zone Select Lower Near-right',
1305 278 => 'Zone Select Lower-right',
1306 279 => 'Zone Select Bottom-left',
1307 280 => 'Zone Select Bottom Near-left',
1308 281 => 'Zone Select Bottom',
1309 282 => 'Zone Select Bottom Near-right',
1310 283 => 'Zone Select Bottom-right',
1311 },{ #forum5892
1312 0 => 'Single Point',
1313 1 => 'Expanded Area 9-point (S)',
1314 3 => 'Expanded Area 25-point (M)',
1315 5 => 'Expanded Area 27-point (L)',
1316 }],
1317 },{ #7
1318 Name => 'AFPointSelected',
1319 Writable => 'int16u',
1320 Notes => 'other models',
1321 PrintConvColumns => 2,
1322 PrintConv => [{
1323 # 0 - Contrast-detect AF? - PH (K-5)
1324 0xffff => 'Auto',
1325 0xfffe => 'Fixed Center',
1326 0xfffd => 'Automatic Tracking AF', #JD
1327 0xfffc => 'Face Detect AF', #JD
1328 0xfffb => 'AF Select', #PH (Q select from 25-areas)
1329 0 => 'None', #PH (Q in manual focus mode)
1330 1 => 'Upper-left',
1331 2 => 'Top',
1332 3 => 'Upper-right',
1333 4 => 'Left',
1334 5 => 'Mid-left',
1335 6 => 'Center',
1336 7 => 'Mid-right',
1337 8 => 'Right',
1338 9 => 'Lower-left',
1339 10 => 'Bottom',
1340 11 => 'Lower-right',
1341 },
1342 # (second number exists for K-5II(s) is usually 0, but is 1 for AF.C with
1343 # AFPointMode=='Select' and extended tracking focus points are enabled in the settings)
1344 ],
1345 }],
1346 0x000f => [{ #PH
1347 Name => 'AFPointsInFocus',
1348 Condition => '$$self{Model} =~ /K-3\b/',
1349 Writable => 'int32u',
1350 Notes => 'K-3 only',
1351 PrintHex => 1,
1352 PrintConv => {
1353 0 => '(none)',
1354 BITMASK => {
1355 0 => 'Top-left',
1356 1 => 'Top Near-left',
1357 2 => 'Top',
1358 3 => 'Top Near-right',
1359 4 => 'Top-right',
1360 5 => 'Upper-left',
1361 6 => 'Upper Near-left',
1362 7 => 'Upper-middle',
1363 8 => 'Upper Near-right',
1364 9 => 'Upper-right',
1365 10 => 'Far Left',
1366 11 => 'Left',
1367 12 => 'Near-left',
1368 13 => 'Center',
1369 14 => 'Near-right',
1370 15 => 'Right',
1371 16 => 'Far Right',
1372 17 => 'Lower-left',
1373 18 => 'Lower Near-left',
1374 19 => 'Lower-middle',
1375 20 => 'Lower Near-right',
1376 21 => 'Lower-right',
1377 22 => 'Bottom-left',
1378 23 => 'Bottom Near-left',
1379 24 => 'Bottom',
1380 25 => 'Bottom Near-right',
1381 26 => 'Bottom-right',
1382 },
1383 },
1384 },{ #PH
1385 Name => 'AFPointsInFocus',
1386 Notes => 'other models',
1387 Writable => 'int16u',
1388 PrintHex => 1,
1389 PrintConv => {
1390 0xffff => 'None',
1391 0 => 'Fixed Center or Multiple', #PH/14
1392 1 => 'Top-left',
1393 2 => 'Top-center',
1394 3 => 'Top-right',
1395 4 => 'Left',
1396 5 => 'Center',
1397 6 => 'Right',
1398 7 => 'Bottom-left',
1399 8 => 'Bottom-center',
1400 9 => 'Bottom-right',
1401 },
1402 }],
1403 0x0010 => { #PH
1404 Name => 'FocusPosition',
1405 Writable => 'int16u',
1406 Notes => 'related to focus distance but affected by focal length',
1407 },
1408 0x0012 => { #PH
1409 Name => 'ExposureTime',
1410 Writable => 'int32u',
1411 Priority => 0,
1412 ValueConv => '$val * 1e-5',
1413 ValueConvInv => '$val * 1e5',
1414 # value may be 0xffffffff in Bulb mode (ref JD)
1415 PrintConv => '$val > 42949 ? "Unknown (Bulb)" : Image::ExifTool::Exif::PrintExposureTime($val)',
1416 PrintConvInv => '$val=~/(unknown|bulb)/i ? $val : Image::ExifTool::Exif::ConvertFraction($val)',
1417 },
1418 0x0013 => { #PH
1419 Name => 'FNumber',
1420 Writable => 'int16u',
1421 Priority => 0,
1422 ValueConv => '$val / 10',
1423 ValueConvInv => '$val * 10',
1424 PrintConv => 'sprintf("%.1f",$val)',
1425 PrintConvInv => '$val',
1426 },
1427 # ISO Tag - Entries confirmed by W. Smith 12 FEB 04
1428 0x0014 => {
1429 Name => 'ISO',
1430 Writable => 'int16u',
1431 Notes => 'may be different than EXIF:ISO, which can round to the nearest full stop',
1432 PrintConvColumns => 4,
1433 PrintConv => {
1434 # 1/3 EV step values
1435 3 => 50,
1436 4 => 64,
1437 5 => 80,
1438 6 => 100,
1439 7 => 125, #PH
1440 8 => 160, #PH
1441 9 => 200,
1442 10 => 250,
1443 11 => 320, #PH
1444 12 => 400,
1445 13 => 500,
1446 14 => 640,
1447 15 => 800,
1448 16 => 1000,
1449 17 => 1250,
1450 18 => 1600, #PH
1451 19 => 2000, #PH
1452 20 => 2500, #PH
1453 21 => 3200, #PH
1454 22 => 4000,
1455 23 => 5000,
1456 24 => 6400, #PH
1457 25 => 8000, #PH
1458 26 => 10000, #PH
1459 27 => 12800, #PH
1460 28 => 16000, #PH
1461 29 => 20000, #PH
1462 30 => 25600, #PH
1463 31 => 32000, #PH
1464 32 => 40000, #PH
1465 33 => 51200, #PH
1466 34 => 64000, #PH (NC)
1467 35 => 80000, #PH (NC)
1468 36 => 102400, #27
1469 37 => 128000, #PH (NC)
1470 38 => 160000, #PH (NC)
1471 39 => 204800, #27
1472 40 => 256000, #PH (NC)
1473 41 => 320000, #PH (NC)
1474 42 => 409600, #PH (NC)
1475 43 => 512000, #PH (NC)
1476 44 => 640000, #PH (NC)
1477 45 => 819200, #PH (KP)
1478 # Optio 330/430 (oddball)
1479 50 => 50, #PH
1480 100 => 100, #PH
1481 200 => 200, #PH
1482 400 => 400, #PH
1483 800 => 800, #PH
1484 1600 => 1600, #PH
1485 3200 => 3200, #PH
1486 # 1/2 EV step values
1487 258 => 50, #PH (NC)
1488 259 => 70, #PH (NC)
1489 260 => 100, #19
1490 261 => 140, #19
1491 262 => 200, #19
1492 263 => 280, #19
1493 264 => 400, #19
1494 265 => 560, #19
1495 266 => 800, #19
1496 267 => 1100, #19
1497 268 => 1600, #19
1498 269 => 2200, #PH
1499 270 => 3200, #PH
1500 271 => 4500, #PH
1501 272 => 6400, #PH
1502 273 => 9000, #PH
1503 274 => 12800, #PH
1504 275 => 18000, #PH
1505 276 => 25600, #PH
1506 277 => 36000, #PH
1507 278 => 51200, #PH
1508 279 => 72000, #PH (NC)
1509 280 => 102400, #PH (NC)
1510 281 => 144000, #PH (NC)
1511 282 => 204800, #PH (NC)
1512 283 => 288000, #PH (NC)
1513 284 => 409600, #PH (NC)
1514 285 => 576000, #PH (NC)
1515 286 => 819200, #PH (NC)
1516 65534 => 'Auto 2', #PH (Q/Q10/Q7 MOV) [how is this different from 65535?]
1517 65535 => 'Auto', #PH/31 (K-01/K-70 MP4)
1518 },
1519 },
1520 0x0015 => { #PH
1521 Name => 'LightReading',
1522 Format => 'int16s', # (because I may have seen negative numbers)
1523 Writable => 'int16u',
1524 # ranges from 0-12 for my Optio WP - PH
1525 Notes => q{
1526 calibrated differently for different models. For the Optio WP, add 6 to get
1527 approximate Light Value. May not be valid for some models, eg. Optio S
1528 },
1529 },
1530 0x0016 => [{ #PH
1531 Name => 'ExposureCompensation',
1532 Condition => '$count == 1',
1533 Notes => q{
1534 some models write two values here. The second value is meaning of the
1535 second value is not yet known
1536 },
1537 Writable => 'int16u',
1538 ValueConv => '($val - 50) / 10',
1539 ValueConvInv => 'int($val * 10 + 50.5)',
1540 PrintConv => '$val ? sprintf("%+.1f", $val) : 0',
1541 PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
1542 },{
1543 Name => 'ExposureCompensation',
1544 Writable => 'int16u',
1545 # (2 values for K-70, etc -- have only seen "0" for the 2nd value - PH)
1546 Count => 2,
1547 ValueConv => '$val =~ s/ .*//; ($val - 50) / 10',
1548 ValueConvInv => 'int($val * 10 + 50.5) . " 0"',
1549 PrintConv => '$val ? sprintf("%+.1f", $val) : 0',
1550 PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
1551 }],
1552 0x0017 => { #3
1553 Name => 'MeteringMode',
1554 Writable => 'int16u',
1555 PrintConv => {
1556 0 => 'Multi-segment',
1557 1 => 'Center-weighted average',
1558 2 => 'Spot',
1559 # have seen value of 16 for E70
1560 },
1561 },
1562 0x0018 => { #PH
1563 Name => 'AutoBracketing',
1564 Writable => 'int16u',
1565 Count => -1,
1566 Notes => q{
1567 1 or 2 values: exposure bracket step in EV, then extended bracket if
1568 available. Extended bracket values are printed as 'WB-BA', 'WB-GM',
1569 'Saturation', 'Sharpness', 'Contrast', 'Hue' or 'HighLowKey' followed by
1570 '+1', '+2' or '+3' for step size
1571 },
1572 # 1=.3ev, 2=.7, 3=1.0 ... 10=.5, 11=1.5, ... 4096=0, 4097=0.5 ... 8192=0, 8193=0.3
1573 # (models like K-1 and K-5 use 0x1000 and 0x2000 to indicate 1/2 and 1/3 EV step
1574 # size -- convert this as a fraction so we can recognize this format when writing)
1575 ValueConv => [ q{
1576 return $val / 3 if $val < 10;
1577 return $val - 9.5 if $val < 20;
1578 return ($val - 0x1000) . '/2' if $val & 0x1000;
1579 return ($val - 0x2000) . '/3' if $val & 0x2000;
1580 return $val; # (shouldn't happen)
1581 }],
1582 ValueConvInv => [ q{
1583 if ($val =~ s{/(\d+)$}{}) {
1584 return $val + 0x1000 if $1 == 2;
1585 return $val + 0x2000 if $1 == 3;
1586 return undef;
1587 }
1588 return abs($val-int($val)-.5)>0.05 ? int($val*3+0.5) : int($val+10);
1589 }],
1590 PrintConv => sub {
1591 my @v = split(' ', shift);
1592 $v[0] = sprintf('%.1f', $v[0]) if $v[0] and $v[0]!~m{/};
1593 if ($v[1]) {
1594 my %s = (1=>'WB-BA',2=>'WB-GM',3=>'Saturation',4=>'Sharpness',
1595 5=>'Contrast',6=>'Hue',7=>'HighLowKey');
1596 my $t = $v[1] >> 8;
1597 $v[1] = sprintf('%s+%d', $s{$t} || "Unknown($t)", $v[1] & 0xff);
1598 } elsif (defined $v[1]) {
1599 $v[1] = 'No Extended Bracket',
1600 }
1601 return join(' EV, ', @v);
1602 },
1603 PrintConvInv => sub {
1604 my @v = split(/, ?/, shift);
1605 $v[0] =~ s/ ?EV//i;
1606 if ($v[1]) {
1607 my %s = ('WB-BA'=>1,'WB-GM'=>2,'Saturation'=>3,'Sharpness'=>4,
1608 'Contrast'=>5,'Hue'=>6,'HighLowKey'=>7);
1609 if ($v[1] =~ /^No\b/i) {
1610 $v[1] = 0;
1611 } elsif ($v[1] =~ /Unknown\((\d+)\)\+(\d+)/i) {
1612 $v[1] = ($1 << 8) + $2;
1613 } elsif ($v[1] =~ /([\w-]+)\+(\d+)/ and $s{$1}) {
1614 $v[1] = ($s{$1} << 8) + $2;
1615 } else {
1616 warn "Bad extended bracket\n";
1617 }
1618 }
1619 return "@v";
1620 },
1621 },
1622 0x0019 => { #3
1623 Name => 'WhiteBalance',
1624 Writable => 'int16u',
1625 PrintConvColumns => 2,
1626 PrintConv => {
1627 0 => 'Auto',
1628 1 => 'Daylight',
1629 2 => 'Shade',
1630 3 => 'Fluorescent', #2
1631 4 => 'Tungsten',
1632 5 => 'Manual',
1633 6 => 'Daylight Fluorescent', #13
1634 7 => 'Day White Fluorescent', #13
1635 8 => 'White Fluorescent', #13
1636 9 => 'Flash', #13
1637 10 => 'Cloudy', #13
1638 11 => 'Warm White Fluorescent', #PH (K-3)
1639 14 => 'Multi Auto', #PH (K-3)
1640 15 => 'Color Temperature Enhancement', #PH
1641 17 => 'Kelvin', #PH
1642 0xfffe => 'Unknown', #13
1643 0xffff => 'User-Selected', #13
1644 },
1645 },
1646 0x001a => { #5
1647 Name => 'WhiteBalanceMode',
1648 Writable => 'int16u',
1649 PrintConv => {
1650 1 => 'Auto (Daylight)',
1651 2 => 'Auto (Shade)',
1652 3 => 'Auto (Flash)',
1653 4 => 'Auto (Tungsten)',
1654 6 => 'Auto (Daylight Fluorescent)', #19 (NC)
1655 7 => 'Auto (Day White Fluorescent)', #17 (K100D guess)
1656 8 => 'Auto (White Fluorescent)', #17 (K100D guess)
1657 10 => 'Auto (Cloudy)', #17 (K100D guess)
1658 # 0xfffd observed in K100D (ref 17)
1659 0xfffe => 'Unknown', #PH (you get this when shooting night sky shots)
1660 0xffff => 'User-Selected',
1661 },
1662 },
1663 0x001b => { #6
1664 Name => 'BlueBalance',
1665 Writable => 'int16u',
1666 ValueConv => '$val / 256',
1667 ValueConvInv => 'int($val * 256 + 0.5)',
1668 },
1669 0x001c => { #6
1670 Name => 'RedBalance',
1671 Writable => 'int16u',
1672 ValueConv => '$val / 256',
1673 ValueConvInv => 'int($val * 256 + 0.5)',
1674 },
1675 0x001d => [
1676 # Would be nice if there was a general way to determine units for FocalLength...
1677 {
1678 # Optio 30, 33WR, 43WR, 450, 550, 555, 750Z, X
1679 Name => 'FocalLength',
1680 Condition => '$self->{Model} =~ /^PENTAX Optio (30|33WR|43WR|450|550|555|750Z|X)\b/',
1681 Writable => 'int32u',
1682 Priority => 0,
1683 ValueConv => '$val / 10',
1684 ValueConvInv => '$val * 10',
1685 PrintConv => 'sprintf("%.1f mm",$val)',
1686 PrintConvInv => '$val=~s/\s*mm//;$val',
1687 },
1688 {
1689 # K100D, Optio 230, 330GS, 33L, 33LF, A10, M10, MX, MX4, S, S30,
1690 # S4, S4i, S5i, S5n, S5z, S6, S45, S50, S55, S60, SV, Svi, W10, WP,
1691 # *ist D, DL, DL2, DS, DS2
1692 # (Note: the Optio S6 seems to report the minimum focal length - PH)
1693 Name => 'FocalLength',
1694 Writable => 'int32u',
1695 Priority => 0,
1696 ValueConv => '$val / 100',
1697 ValueConvInv => '$val * 100',
1698 PrintConv => 'sprintf("%.1f mm",$val)',
1699 PrintConvInv => '$val=~s/\s*mm//;$val',
1700 },
1701 ],
1702 0x001e => { #3
1703 Name => 'DigitalZoom',
1704 Writable => 'int16u',
1705 ValueConv => '$val / 100', #14
1706 ValueConvInv => '$val * 100', #14
1707 },
1708 0x001f => {
1709 Name => 'Saturation',
1710 Writable => 'int16u',
1711 Count => -1,
1712 Notes => '1 or 2 values',
1713 PrintConvColumns => 2,
1714 PrintConv => [{ # the *istD has pairs of values - PH
1715 0 => '-2 (low)', #PH
1716 1 => '0 (normal)', #PH
1717 2 => '+2 (high)', #PH
1718 3 => '-1 (medium low)', #2
1719 4 => '+1 (medium high)', #2
1720 5 => '-3 (very low)', #PH
1721 6 => '+3 (very high)', #PH (NC)
1722 7 => '-4 (minimum)', #PH (NC)
1723 8 => '+4 (maximum)', #PH (K-5)
1724 65535 => 'None', #PH (Monochrome)
1725 }],
1726 },
1727 0x0020 => {
1728 Name => 'Contrast',
1729 Writable => 'int16u',
1730 Count => -1,
1731 Notes => '1 or 2 values',
1732 PrintConvColumns => 2,
1733 PrintConv => [{ # the *istD has pairs of values - PH
1734 0 => '-2 (low)', #PH
1735 1 => '0 (normal)', #PH
1736 2 => '+2 (high)', #PH
1737 3 => '-1 (medium low)', #2
1738 4 => '+1 (medium high)', #2
1739 5 => '-3 (very low)', #PH
1740 6 => '+3 (very high)', #PH (NC)
1741 7 => '-4 (minimum)', #PH (NC)
1742 8 => '+4 (maximum)', #PH (K-5)
1743 65535 => 'n/a', # got this for a Backlight Silhouette - PH (Q)
1744 }],
1745 },
1746 0x0021 => {
1747 Name => 'Sharpness',
1748 Writable => 'int16u',
1749 Count => -1,
1750 Notes => '1 or 2 values',
1751 PrintConvColumns => 2,
1752 PrintConv => [{ # the *istD has pairs of values - PH
1753 0 => '-2 (soft)', #PH
1754 1 => '0 (normal)', #PH
1755 2 => '+2 (hard)', #PH
1756 3 => '-1 (medium soft)', #2
1757 4 => '+1 (medium hard)', #2
1758 5 => '-3 (very soft)', #(NC)
1759 6 => '+3 (very hard)', #(NC)
1760 7 => '-4 (minimum)', #PH (NC)
1761 8 => '+4 (maximum)', #PH (NC)
1762 }],
1763 },
1764 0x0022 => { #PH
1765 Name => 'WorldTimeLocation',
1766 Groups => { 2 => 'Time' },
1767 Writable => 'int16u',
1768 PrintConv => {
1769 0 => 'Hometown',
1770 1 => 'Destination',
1771 },
1772 },
1773 0x0023 => { #PH
1774 Name => 'HometownCity',
1775 Groups => { 2 => 'Time' },
1776 Writable => 'int16u',
1777 SeparateTable => 'City',
1778 PrintConv => \%pentaxCities,
1779 },
1780 0x0024 => { #PH
1781 Name => 'DestinationCity',
1782 Groups => { 2 => 'Time' },
1783 Writable => 'int16u',
1784 SeparateTable => 'City',
1785 PrintConv => \%pentaxCities,
1786 },
1787 0x0025 => { #PH
1788 Name => 'HometownDST',
1789 Groups => { 2 => 'Time' },
1790 Writable => 'int16u',
1791 PrintConv => { 0 => 'No', 1 => 'Yes' },
1792 },
1793 0x0026 => { #PH
1794 Name => 'DestinationDST',
1795 Groups => { 2 => 'Time' },
1796 Writable => 'int16u',
1797 PrintConv => { 0 => 'No', 1 => 'Yes' },
1798 },
1799 0x0027 => { #PH
1800 Name => 'DSPFirmwareVersion',
1801 Writable => 'undef',
1802 # - for K10D, this comes from 4 bytes at offset 0x1c in the firmware file
1803 %pentaxFirmwareID,
1804 },
1805 0x0028 => { #PH
1806 Name => 'CPUFirmwareVersion',
1807 Writable => 'undef',
1808 # - for K10D, this comes from 4 bytes at offset 0x83fbf8 in firmware file
1809 %pentaxFirmwareID,
1810 },
1811 0x0029 => { #5
1812 Name => 'FrameNumber',
1813 # - one report that this has a value of 84 for the first image with a *istDS
1814 # - another report that file number 4 has frameNumber 154 for *istD, and
1815 # that framenumber jumped at about 9700 to around 26000
1816 # - with *istDS firmware 2.0, this tag was removed and ShutterCount was added
1817 Writable => 'int32u',
1818 },
1819 # 0x002b - definitely exposure related somehow - PH
1820 0x002d => [{ #PH
1821 Name => 'EffectiveLV',
1822 Condition => '$format eq "int16u"',
1823 Notes => 'camera-calculated light value, but includes exposure compensation',
1824 Writable => 'int16u',
1825 Format => 'int16s', # (negative values are valid even though Pentax writes int16u)
1826 ValueConv => '$val/1024',
1827 ValueConvInv => '$val * 1024',
1828 PrintConv => 'sprintf("%.1f",$val)',
1829 PrintConvInv => '$val',
1830 },{
1831 Name => 'EffectiveLV',
1832 Condition => '$format eq "int32u"',
1833 Writable => 'int32u',
1834 Format => 'int32s',
1835 ValueConv => '$val/1024',
1836 ValueConvInv => '$val * 1024',
1837 PrintConv => 'sprintf("%.1f",$val)',
1838 PrintConvInv => '$val',
1839 }],
1840 0x0032 => { #13
1841 Name => 'ImageEditing',
1842 Writable => 'undef',
1843 Format => 'int8u',
1844 Count => 4,
1845 PrintConv => {
1846 '0 0' => 'None', #PH
1847 '0 0 0 0' => 'None',
1848 '0 0 0 4' => 'Digital Filter',
1849 '1 0 0 0' => 'Resized', #PH (K-5)
1850 '2 0 0 0' => 'Cropped', #PH
1851 # note: doesn't apply to digital filters applied when picture is taken
1852 '4 0 0 0' => 'Digital Filter 4', #PH (K10D, Ricoh WG-5)
1853 '6 0 0 0' => 'Digital Filter 6', #PH (K-5)
1854 '8 0 0 0' => 'Red-eye Correction', #PH (WG-10)
1855 '16 0 0 0' => 'Frame Synthesis?',
1856 },
1857 },
1858 0x0033 => { #PH (K110D/K100D/K-m)
1859 Name => 'PictureMode',
1860 Writable => 'int8u',
1861 Count => 3,
1862 Relist => [ [0, 1], 2 ], # join values 0 and 1 for PrintConv
1863 PrintConvColumns => 2,
1864 PrintConv => [{
1865 # Program dial modes (from K110D)
1866 '0 0' => 'Program', # (also on K10D, custom settings: Program Line 1, e-dial in Program 3, 4 or 5)
1867 '0 1' => 'Hi-speed Program', #19 (K10D, custom settings: Program Line 2, e-dial in Program 3, 4 or 5)
1868 '0 2' => 'DOF Program', #19 (K10D, custom settings: Program Line 3, e-dial in Program 3, 4 or 5)
1869 '0 3' => 'MTF Program', #19 (K10D, custom settings: Program Line 4, e-dial in Program 3, 4 or 5)
1870 '0 4' => 'Standard', #13
1871 '0 5' => 'Portrait',
1872 '0 6' => 'Landscape',
1873 '0 7' => 'Macro',
1874 '0 8' => 'Sport',
1875 '0 9' => 'Night Scene Portrait',
1876 '0 10' => 'No Flash',
1877 # SCN modes (menu-selected) (from K100D)
1878 '0 11' => 'Night Scene',
1879 '0 12' => 'Surf & Snow',
1880 '0 13' => 'Text',
1881 '0 14' => 'Sunset',
1882 '0 15' => 'Kids',
1883 '0 16' => 'Pet',
1884 '0 17' => 'Candlelight',
1885 '0 18' => 'Museum',
1886 '0 19' => 'Food',
1887 '0 20' => 'Stage Lighting',
1888 '0 21' => 'Night Snap',
1889 '0 23' => 'Blue Sky', # (Q)
1890 '0 24' => 'Sunset', # (Q)
1891 '0 26' => 'Night Scene HDR', # (Q)
1892 '0 27' => 'HDR', # (Q)
1893 '0 28' => 'Quick Macro', # (Q)
1894 '0 29' => 'Forest', # (Q)
1895 '0 30' => 'Backlight Silhouette', # (Q)
1896 # AUTO PICT modes (auto-selected)
1897 '1 4' => 'Auto PICT (Standard)', #13
1898 '1 5' => 'Auto PICT (Portrait)', #7 (K100D)
1899 '1 6' => 'Auto PICT (Landscape)', # K110D
1900 '1 7' => 'Auto PICT (Macro)', #13
1901 '1 8' => 'Auto PICT (Sport)', #13
1902 # *istD modes (ref 7)
1903 '2 0' => 'Program (HyP)', #13 (K-5 Normal program line - PH)
1904 '2 1' => 'Hi-speed Program (HyP)', #19 (K10D, custom settings: Program Line 2, e-dial in Program 1, 2)
1905 '2 2' => 'DOF Program (HyP)', #19 (K10D, custom settings: Program Line 3, e-dial in Program 1, 2)
1906 '2 3' => 'MTF Program (HyP)', #19 (K10D, custom settings: Program Line 4, e-dial in Program 1, 2)
1907 '2 22' => 'Shallow DOF (HyP)', #PH (K-5)
1908 '3 0' => 'Green Mode', #16
1909 '4 0' => 'Shutter Speed Priority',
1910 '5 0' => 'Aperture Priority',
1911 '6 0' => 'Program Tv Shift',
1912 '7 0' => 'Program Av Shift', #19
1913 '8 0' => 'Manual',
1914 '9 0' => 'Bulb',
1915 '10 0' => 'Aperture Priority, Off-Auto-Aperture',
1916 '11 0' => 'Manual, Off-Auto-Aperture',
1917 '12 0' => 'Bulb, Off-Auto-Aperture',
1918 '19 0' => 'Astrotracer', #29
1919 # extra K10D modes (ref 16)
1920 '13 0' => 'Shutter & Aperture Priority AE',
1921 '15 0' => 'Sensitivity Priority AE',
1922 '16 0' => 'Flash X-Sync Speed AE',
1923 '18 0' => 'Auto Program (Normal)', #PH (K-5)
1924 '18 1' => 'Auto Program (Hi-speed)', #PH (NC)
1925 '18 2' => 'Auto Program (DOF)', #PH (K-5)
1926 '18 3' => 'Auto Program (MTF)', #PH (NC)
1927 '18 22' => 'Auto Program (Shallow DOF)', #PH (NC)
1928 '20 22' => 'Blur Control', #PH (Q)
1929 '249 0' => 'Movie (TAv)', #31
1930 '250 0' => 'Movie (TAv, Auto Aperture)', #31
1931 '251 0' => 'Movie (Manual)', #31
1932 '252 0' => 'Movie (Manual, Auto Aperture)', #31
1933 '253 0' => 'Movie (Av)', #31
1934 '254 0' => 'Movie (Av, Auto Aperture)', #31
1935 '255 0' => 'Movie (P, Auto Aperture)', #31
1936 '255 4' => 'Video (4)', #PH (K-x,K-01)
1937 },{
1938 # EV step size (ref 19)
1939 0 => '1/2 EV steps',
1940 1 => '1/3 EV steps',
1941 }],
1942 },
1943 0x0034 => { #7/PH
1944 Name => 'DriveMode',
1945 Writable => 'int8u',
1946 Count => 4,
1947 PrintConv => [{
1948 0 => 'Single-frame', # (also Interval Shooting for K-01 - PH)
1949 1 => 'Continuous', # (K-5 Hi)
1950 2 => 'Continuous (Lo)', #PH (K-5)
1951 3 => 'Burst', #PH (K20D)
1952 4 => 'Continuous (Medium)', #PH (K-3)
1953 255 => 'Video', #PH (K-x)
1954 },{
1955 0 => 'No Timer',
1956 1 => 'Self-timer (12 s)',
1957 2 => 'Self-timer (2 s)',
1958 15 => 'Video', #PH (Q MOV)
1959 16 => 'Mirror Lock-up', # (K-5)
1960 255 => 'n/a', #PH (K-x)
1961 },{
1962 0 => 'Shutter Button', # (also computer remote control - PH)
1963 1 => 'Remote Control (3 s delay)', #19
1964 2 => 'Remote Control', #19
1965 4 => 'Remote Continuous Shooting', # (K-5)
1966 },{
1967 0x00 => 'Single Exposure',
1968 0x01 => 'Multiple Exposure',
1969 0x02 => 'Composite Average', #31
1970 0x03 => 'Composite Additive', #31
1971 0x04 => 'Composite Bright', #31
1972 0x08 => 'Interval Shooting', #31
1973 0x0a => 'Interval Composite Average', #31
1974 0x0b => 'Interval Composite Additive', #31
1975 0x0c => 'Interval Composite Bright', #31
1976 0x0f => 'Interval Movie', #PH (K-01)
1977 0x10 => 'HDR', #PH (645D)
1978 0x20 => 'HDR Strong 1', #PH (NC) (K-5)
1979 0x30 => 'HDR Strong 2', #PH (K-5)
1980 0x40 => 'HDR Strong 3', #PH (K-5)
1981 0x50 => 'HDR Manual', #31 (K-70 HDR 1 and HDR 2)
1982 0xe0 => 'HDR Auto', #PH (K-5, K-70)
1983 0xff => 'Video', #PH (K-x)
1984 }],
1985 },
1986 0x0035 => { #PH
1987 Name => 'SensorSize',
1988 Format => 'int16u',
1989 Count => 2,
1990 Notes => 'includes masked pixels',
1991 # values for various models (not sure why this is in 2um increments):
1992 # 11894 7962 (K10D,K-m) 12012 7987 (*istDS,K100D,K110D) 12012 8019 (*istD),
1993 # 12061 7988 (K-5) 12053 8005 (K-r,K-x) 14352 9535 (K20D,K-7)
1994 # 22315 16711 (645) 12080 8008 (K-01)
1995 ValueConv => 'my @a=split(" ",$val); $_/=500 foreach @a; join(" ",@a)',
1996 ValueConvInv => 'my @a=split(" ",$val); $_*=500 foreach @a; join(" ",@a)',
1997 PrintConv => 'sprintf("%.3f x %.3f mm", split(" ",$val))',
1998 PrintConvInv => '$val=~s/\s*mm$//; $val=~s/\s*x\s*/ /; $val',
1999 },
2000 0x0037 => { #13
2001 Name => 'ColorSpace',
2002 Writable => 'int16u',
2003 PrintConv => {
2004 0 => 'sRGB',
2005 1 => 'Adobe RGB',
2006 },
2007 },
2008 0x0038 => { #5 (PEF only)
2009 Name => 'ImageAreaOffset',
2010 Writable => 'int16u',
2011 Count => 2,
2012 },
2013 0x0039 => { #PH
2014 Name => 'RawImageSize',
2015 Writable => 'int16u',
2016 Count => 2,
2017 PrintConv => '$_=$val;s/ /x/;$_',
2018 },
2019 0x003c => { #7/PH
2020 Name => 'AFPointsInFocus',
2021 # not writable because I'm not decoding these 4 bytes fully:
2022 # Nibble pattern: XSSSYUUU
2023 # X = unknown (AF focused flag?, 0 or 1)
2024 # SSS = selected AF point bitmask (0x000 or 0x7ff if unused)
2025 # Y = unknown (observed 0,6,7,b,e, always 0 if SSS is 0x000 or 0x7ff)
2026 # UUU = af points used
2027 Format => 'int32u',
2028 Notes => '*istD only',
2029 ValueConv => '$val & 0x7ff', # ignore other bits for now
2030 PrintConvColumns => 2,
2031 PrintConv => {
2032 0 => '(none)',
2033 BITMASK => {
2034 0 => 'Upper-left',
2035 1 => 'Top',
2036 2 => 'Upper-right',
2037 3 => 'Left',
2038 4 => 'Mid-left',
2039 5 => 'Center',
2040 6 => 'Mid-right',
2041 7 => 'Right',
2042 8 => 'Lower-left',
2043 9 => 'Bottom',
2044 10 => 'Lower-right',
2045 },
2046 },
2047 },
2048 0x003d => { #IB
2049 Name => 'DataScaling',
2050 Writable => 'int16u',
2051 # divide by the second value of Pentax_0x0201 (WhitePoint), usually
2052 # 8192, to get the floating point normalization factor.
2053 # One of the examples of how this tag can be used is calculation of
2054 # baseline exposure compensation (Adobe-style) for a PEF:
2055 # log2(Pentax_0x007e)-14-0.5+log2(Pentax_0x003d)-13
2056 # or
2057 # log2(Pentax_0x007e*(Pentax_0x003d/(2^13))/(2^14))-0.5
2058 # where
2059 # makernotes:Pentax_0x003d/(2^13) is the normalization factor. (ref IB)
2060 # - 8192 for most images, but occasionally 11571 for K100D/K110D,
2061 # and 8289 or 8456 for the K-x (ref PH)
2062 },
2063 0x003e => { #PH
2064 Name => 'PreviewImageBorders',
2065 Writable => 'int8u',
2066 Count => 4,
2067 Notes => 'top, bottom, left, right',
2068 },
2069 0x003f => { #PH
2070 Name => 'LensRec',
2071 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LensRec' },
2072 },
2073 0x0040 => { #PH
2074 Name => 'SensitivityAdjust',
2075 Writable => 'int16u',
2076 ValueConv => '($val - 50) / 10',
2077 ValueConvInv => '$val * 10 + 50',
2078 PrintConv => '$val ? sprintf("%+.1f", $val) : 0',
2079 PrintConvInv => '$val',
2080 },
2081 0x0041 => { #19
2082 Name => 'ImageEditCount',
2083 Writable => 'int16u',
2084 },
2085 0x0047 => { #PH
2086 Name => 'CameraTemperature', # (chassis temperature, ref forum6677)
2087 Writable => 'int8s',
2088 PrintConv => '"$val C"',
2089 PrintConvInv => '$val=~s/ ?c$//i; $val',
2090 },
2091 0x0048 => { #19
2092 Name => 'AELock',
2093 Writable => 'int16u',
2094 PrintConv => {
2095 0 => 'Off',
2096 1 => 'On',
2097 },
2098 },
2099 0x0049 => { #13
2100 Name => 'NoiseReduction',
2101 Writable => 'int16u',
2102 PrintConv => { 0 => 'Off', 1 => 'On' },
2103 },
2104 0x004d => [{ #PH
2105 Name => 'FlashExposureComp',
2106 Condition => '$count == 1',
2107 Writable => 'int32s',
2108 ValueConv => '$val / 256',
2109 ValueConvInv => 'int($val * 256 + ($val > 0 ? 0.5 : -0.5))',
2110 PrintConv => '$val ? sprintf("%+.1f", $val) : 0',
2111 PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
2112 },{ #PH (K-3)
2113 Name => 'FlashExposureComp',
2114 Writable => 'int8s',
2115 Count => 2, # (don't know what the 2nd number is for)
2116 ValueConv => [ '$val / 6' ],
2117 ValueConvInv => [ '$val / 6' ],
2118 PrintConv => [ '$val ? sprintf("%+.1f", $val) : 0' ],
2119 PrintConvInv => [ 'Image::ExifTool::Exif::ConvertFraction($val)' ],
2120 }],
2121 0x004f => { #PH
2122 Name => 'ImageTone', # (Called CustomImageMode in K20D manual)
2123 Writable => 'int16u',
2124 PrintConvColumns => 2,
2125 PrintConv => {
2126 0 => 'Natural',
2127 1 => 'Bright',
2128 2 => 'Portrait', # (K20D/K200D)
2129 3 => 'Landscape', # (K20D)
2130 4 => 'Vibrant', # (K20D)
2131 5 => 'Monochrome', # (K20D)
2132 6 => 'Muted', # (645D)
2133 7 => 'Reversal Film', # (645D) (Ricoh WG-5 "Slide Film")
2134 8 => 'Bleach Bypass', # (K-5)
2135 9 => 'Radiant', # (Q)
2136 10 => 'Cross Processing', #31 (K-70)
2137 11 => 'Flat', #31 (K-70)
2138 # 256 - seen for GR III
2139 # 262 - seen for GR III
2140 },
2141 },
2142 0x0050 => { #PH
2143 Name => 'ColorTemperature',
2144 Writable => 'int16u',
2145 RawConv => '$val ? $val : undef',
2146 ValueConv => '53190 - $val',
2147 ValueConvInv => '53190 - $val',
2148 },
2149 # 0x0053-0x005a - not in JPEG images - PH
2150 0x0053 => { #28
2151 Name => 'ColorTempDaylight',
2152 %colorTemp,
2153 Notes => '0x0053-0x005a are 3 numbers: Kelvin, shift AB, shift GM',
2154 },
2155 0x0054 => { Name => 'ColorTempShade', %colorTemp }, #28
2156 0x0055 => { Name => 'ColorTempCloudy', %colorTemp }, #28
2157 0x0056 => { Name => 'ColorTempTungsten', %colorTemp }, #28
2158 0x0057 => { Name => 'ColorTempFluorescentD', %colorTemp }, #28
2159 0x0058 => { Name => 'ColorTempFluorescentN', %colorTemp }, #28
2160 0x0059 => { Name => 'ColorTempFluorescentW', %colorTemp }, #28
2161 0x005a => { Name => 'ColorTempFlash', %colorTemp }, #28
2162 0x005c => [{ #PH
2163 Name => 'ShakeReductionInfo',
2164 Condition => '$count == 4', # (2 bytes for the K-3)
2165 Format => 'undef', # (written as int8u) - do this just to save time converting the value
2166 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::SRInfo' },
2167 },{
2168 Name => 'ShakeReductionInfo',
2169 Format => 'undef', # (written as int8u) - do this just to save time converting the value
2170 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::SRInfo2' },
2171 }],
2172 0x005d => { #JD/PH
2173 # (used by all Pentax DSLR's except *istD and *istDS until firmware 2.0 - PH)
2174 # Observed values for the first shot of a new K10D are: 81 [PH], 181 [19],
2175 # 246 [7], and 209 [18 (one of the first 20 shots)], so there must be a number
2176 # of test images shot in the factory. (But my new K-5 started at 1 - PH)
2177 # This count includes shutter actuations even if they don't result in a
2178 # recorded image (eg. manual white balance frame or digital preview), but
2179 # does not include actuations due to Live View or video recording - PH
2180 Name => 'ShutterCount',
2181 Writable => 'undef',
2182 Count => 4,
2183 Notes => q{
2184 Note: May be reset by servicing! Also, does not include shutter actuations
2185 for live view or video recording
2186 },
2187 # raw value is a big-endian 4-byte integer, encrypted using Date and Time
2188 RawConv => 'length($val) == 4 ? unpack("N",$val) : undef',
2189 RawConvInv => q{
2190 my $val = Image::ExifTool::Pentax::CryptShutterCount($val,$self);
2191 return pack('N', $val);
2192 },
2193 ValueConv => \&CryptShutterCount,
2194 ValueConvInv => '$val',
2195 },
2196 # 0x005e -
2197 0x0060 => { #PH (K-5)
2198 Name => 'FaceInfo',
2199 Format => 'undef', # (written as int8u)
2200 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::FaceInfo' },
2201 },
2202 0x0062 => { #forum4803
2203 Name => 'RawDevelopmentProcess',
2204 Condition => '$$self{Make} =~ /^(PENTAX|RICOH)/', # rules out Kodak, which also use this tag
2205 Writable => 'int16u',
2206 PrintConv => {
2207 1 => '1 (K10D,K200D,K2000,K-m)',
2208 3 => '3 (K20D)',
2209 4 => '4 (K-7)',
2210 5 => '5 (K-x)',
2211 6 => '6 (645D)',
2212 7 => '7 (K-r)',
2213 8 => '8 (K-5,K-5II,K-5IIs)',
2214 9 => '9 (Q)',
2215 10 => '10 (K-01,K-30,K-50,K-500)',
2216 11 => '11 (Q10)',
2217 12 => '12 (MX-1,Q-S1,Q7)',
2218 13 => '13 (K-3,K-3II)',
2219 14 => '14 (645Z)',
2220 15 => '15 (K-S1,K-S2)', #PH
2221 16 => '16 (K-1)', #PH
2222 17 => '17 (K-70)', #29
2223 18 => '18 (KP)', #PH
2224 19 => '19 (GR III)', #PH
2225 },
2226 },
2227 0x0067 => { #PH (K-5)
2228 Name => 'Hue',
2229 Writable => 'int16u',
2230 PrintConvColumns => 2,
2231 PrintConv => {
2232 0 => -2,
2233 1 => 'Normal',
2234 2 => 2,
2235 3 => -1,
2236 4 => 1,
2237 5 => -3,
2238 6 => 3,
2239 7 => -4,
2240 8 => 4,
2241 65535 => 'None', # (Monochrome)
2242 },
2243 },
2244 # 0x0067 - int16u: 1 [and 65535 in Monochrome] (K20D,K200D) - PH
2245 0x0068 => { #PH
2246 Name => 'AWBInfo',
2247 Format => 'undef', # (written as int8u)
2248 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::AWBInfo' },
2249 },
2250 0x0069 => { #PH (K20D, K-5, K-01 highlights only)
2251 Name => 'DynamicRangeExpansion',
2252 Notes => q{
2253 called highlight correction by Pentax for the K20D, K-5, K-01 and maybe
2254 other models
2255 },
2256 Writable => 'undef',
2257 Format => 'int8u',
2258 Count => 4,
2259 PrintConv => [{
2260 0 => 'Off',
2261 1 => 'On',
2262 },{
2263 0 => 0,
2264 1 => 'Enabled', # (K-01)
2265 2 => 'Auto', # (K-01)
2266 }],
2267 },
2268 0x006b => { #PH (K-5)
2269 Name => 'TimeInfo',
2270 Format => 'undef', # (written as int8u)
2271 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::TimeInfo' },
2272 },
2273 0x006c => { #PH (K-5)
2274 Name => 'HighLowKeyAdj',
2275 Description => 'High/Low Key Adj',
2276 Writable => 'int16s',
2277 Count => 2,
2278 PrintConvColumns => 3,
2279 PrintConv => {
2280 '-4 0' => -4,
2281 '-3 0' => -3,
2282 '-2 0' => -2,
2283 '-1 0' => -1,
2284 '0 0' => 0,
2285 '1 0' => 1,
2286 '2 0' => 2,
2287 '3 0' => 3,
2288 '4 0' => 4,
2289 },
2290 },
2291 0x006d => { #PH (K-5)
2292 Name => 'ContrastHighlight',
2293 Writable => 'int16s',
2294 Count => 2,
2295 PrintConvColumns => 3,
2296 PrintConv => {
2297 '-4 0' => -4,
2298 '-3 0' => -3,
2299 '-2 0' => -2,
2300 '-1 0' => -1,
2301 '0 0' => 0,
2302 '1 0' => 1,
2303 '2 0' => 2,
2304 '3 0' => 3,
2305 '4 0' => 4,
2306 },
2307 },
2308 0x006e => { #PH (K-5)
2309 Name => 'ContrastShadow',
2310 Writable => 'int16s',
2311 Count => 2,
2312 PrintConvColumns => 3,
2313 PrintConv => {
2314 '-4 0' => -4,
2315 '-3 0' => -3,
2316 '-2 0' => -2,
2317 '-1 0' => -1,
2318 '0 0' => 0,
2319 '1 0' => 1,
2320 '2 0' => 2,
2321 '3 0' => 3,
2322 '4 0' => 4,
2323 },
2324 },
2325 0x006f => { #PH (K-5)
2326 Name => 'ContrastHighlightShadowAdj',
2327 Description => 'Contrast Highlight/Shadow Adj',
2328 Writable => 'int8u',
2329 PrintConv => {
2330 0 => 'Off',
2331 1 => 'On',
2332 },
2333 },
2334 0x0070 => { #PH (K-5)
2335 Name => 'FineSharpness',
2336 Writable => 'int8u',
2337 Count => -1, # 1 for K20/K200, 2 for K-5
2338 PrintConv => [{
2339 0 => 'Off',
2340 1 => 'On',
2341 },{
2342 0 => 'Normal',
2343 2 => 'Extra fine',
2344 }],
2345 },
2346 0x0071 => { #PH (K20D,K-x)
2347 Name => 'HighISONoiseReduction',
2348 Format => 'int8u',
2349 PrintConv => [{
2350 0 => 'Off',
2351 1 => 'Weakest',
2352 2 => 'Weak', # (called "Low" by K-x)
2353 3 => 'Strong', # (called "High" by K-x)
2354 4 => 'Medium',
2355 255 => 'Auto', # (K-5)
2356 },{
2357 0 => 'Inactive',
2358 1 => 'Active',
2359 2 => 'Active (Weak)', # (K-5)
2360 3 => 'Active (Strong)', # (K-5)
2361 4 => 'Active (Medium)', # (K-5)
2362 },{ # Start ISO level for NR (K-x)
2363 48 => 'ISO>400',
2364 56 => 'ISO>800',
2365 64 => 'ISO>1600',
2366 72 => 'ISO>3200',
2367 }],
2368 },
2369 0x0072 => { #JD (K20D)
2370 Name => 'AFAdjustment',
2371 Writable => 'int16s',
2372 },
2373 0x0073 => { #PH (K-5)
2374 Name => 'MonochromeFilterEffect',
2375 Writable => 'int16u',
2376 PrintConvColumns => 2,
2377 PrintConv => {
2378 65535 => 'None',
2379 1 => 'Green',
2380 2 => 'Yellow',
2381 3 => 'Orange',
2382 4 => 'Red',
2383 5 => 'Magenta',
2384 6 => 'Blue',
2385 7 => 'Cyan',
2386 8 => 'Infrared',
2387 },
2388 },
2389 0x0074 => { #PH (K-5)
2390 Name => 'MonochromeToning',
2391 Writable => 'int16u',
2392 PrintConvColumns => 2,
2393 PrintConv => {
2394 65535 => 'None',
2395 0 => -4,
2396 1 => -3,
2397 2 => -2,
2398 3 => -1,
2399 4 => 0,
2400 5 => 1,
2401 6 => 2,
2402 7 => 3,
2403 8 => 4,
2404 },
2405 },
2406 0x0076 => { #PH (K-5)
2407 Name => 'FaceDetect',
2408 Writable => 'int8u',
2409 Count => 2,
2410 # the Optio S12 writes this but not the FacesDetected tag, so get FacesDetected from here
2411 DataMember => 'FacesDetected',
2412 RawConv => '$val =~ / (\d+)/ and $$self{FacesDetected} = $1; $val',
2413 # (the K-3 reports "On" even in phase-detect focus modes)
2414 PrintConv => [
2415 '$val ? "On ($val faces max)" : "Off"',
2416 '"$val faces detected"',
2417 ],
2418 PrintConvInv => [
2419 '$val =~ /(\d+)/ ? $1 : 0',
2420 '$val =~ /(\d+)/ ? $1 : 0',
2421 ],
2422 },
2423 0x0077 => { #PH (K-5)
2424 # set by taking a picture with face detect AF,
2425 # but it isn't reset until camera is turned off? - PH
2426 Name => 'FaceDetectFrameSize',
2427 Writable => 'int16u',
2428 Count => 2,
2429 },
2430 # 0x0078 - int16u[2]: '0 0' (K-5,K-7,K-r,K-x)
2431 0x0079 => { #PH
2432 Name => 'ShadowCorrection',
2433 Writable => 'int8u',
2434 Count => -1,
2435 PrintConvColumns => 2,
2436 PrintConv => {
2437 # (1 value for K-m/K2000, 2 for 645D)
2438 0 => 'Off',
2439 1 => 'On',
2440 2 => 'Auto 2', # (NC, WG-3)
2441 '0 0' => 'Off',
2442 '1 1' => 'Weak',
2443 '1 2' => 'Normal',
2444 '1 3' => 'Strong',
2445 '2 4' => 'Auto', # (K-01)
2446 },
2447 },
2448 0x007a => { #PH
2449 Name => 'ISOAutoParameters',
2450 Writable => 'int8u',
2451 Count => 2,
2452 PrintConv => {
2453 '1 0' => 'Slow',
2454 '2 0' => 'Standard',
2455 '3 0' => 'Fast',
2456 # '1 108' - seen for GR III
2457 },
2458 },
2459 0x007b => { #PH (K-5)
2460 Name => 'CrossProcess',
2461 Writable => 'int8u',
2462 PrintConvColumns => 2,
2463 PrintConv => {
2464 0 => 'Off',
2465 1 => 'Random',
2466 2 => 'Preset 1',
2467 3 => 'Preset 2',
2468 4 => 'Preset 3',
2469 33 => 'Favorite 1',
2470 34 => 'Favorite 2',
2471 35 => 'Favorite 3',
2472 },
2473 },
2474 0x007d => { #PH
2475 Name => 'LensCorr',
2476 Format => 'undef', # (written as int8u)
2477 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LensCorr' },
2478 },
2479 0x007e => { #IB
2480 Name => 'WhiteLevel', # (with black level already subtracted)
2481 Writable => 'int32u',
2482 # 15859,15860,15864,15865,16315 (K-5 PEF/DNG only) - PH
2483 # 3934, 3935 (Q DNG) - PH
2484 },
2485 0x007f => { #PH (K-5)
2486 Name => 'BleachBypassToning',
2487 Writable => 'int16u',
2488 PrintConvColumns => 2,
2489 PrintConv => {
2490 65535 => 'n/a', #31
2491 0 => 'Off', #31
2492 1 => 'Green',
2493 2 => 'Yellow',
2494 3 => 'Orange',
2495 4 => 'Red',
2496 5 => 'Magenta',
2497 6 => 'Purple',
2498 7 => 'Blue',
2499 8 => 'Cyan',
2500 },
2501 },
2502 0x0080 => { #PH (Q)
2503 Name => 'AspectRatio',
2504 PrintConv => {
2505 0 => '4:3',
2506 1 => '3:2',
2507 2 => '16:9',
2508 3 => '1:1',
2509 },
2510 },
2511 # 0x0081 - int8u: 0 (Q)
2512 0x0082 => {
2513 Name => 'BlurControl',
2514 Writable => 'int8u',
2515 Count => 4,
2516 PrintConv => [
2517 {
2518 0 => 'Off',
2519 1 => 'Low',
2520 2 => 'Medium',
2521 3 => 'High',
2522 },
2523 undef, # 0 with BlurControl is Off, seen 0,1,3 when on (related to subject distance?)
2524 undef, # 0 with BlurControl Off, 45 when on
2525 undef, # always 0
2526 ],
2527 },
2528 # 0x0083 - int8u: 0 (Q DNG)
2529 # 0x0084 - int8u: 0 (Q)
2530 0x0085 => { #PH
2531 Name => 'HDR',
2532 Format => 'int8u',
2533 Count => 4,
2534 PrintConv => [{ # (K-01,K-3)
2535 0 => 'Off',
2536 1 => 'HDR Auto',
2537 2 => 'HDR 1',
2538 3 => 'HDR 2',
2539 4 => 'HDR 3',
2540 5 => 'HDR Advanced', #29 (K-1)
2541 },{ # (K-01)
2542 0 => 'Auto-align Off',
2543 1 => 'Auto-align On',
2544 },{
2545 # not sure about this - PH
2546 # - you can set HDR "Exposure Bracket Value" with the K-3
2547 # - guessed from imaging-resource K-3 samples K3OUTBHDR_A{1,2,3}
2548 0 => 'n/a',
2549 4 => '1 EV',
2550 8 => '2 EV',
2551 12 => '3 EV', # (get this from K-01, but can't set EV)
2552 },
2553 # (4th number is always 0)
2554 ],
2555 },
2556 # 0x0086 - int8u: 0, 111[Sport,Pet] (Q) - related to Tracking FocusMode?
2557 # 0x0087 - int8u: 0 (Q)
2558 0x0087 => { #PH
2559 Name => 'ShutterType',
2560 Writable => 'int8u',
2561 PrintConv => {
2562 0 => 'Normal', # ('Mechanical' if the camera has a mechanical shutter)
2563 1 => 'Electronic', # (KP)
2564 },
2565 },
2566 0x0088 => { #PH
2567 Name => 'NeutralDensityFilter',
2568 Writable => 'int8u',
2569 Count => -1,
2570 PrintConv => {
2571 0 => 'Off',
2572 1 => 'On',
2573 '0 2' => 'Off (0 2)', #PH (NC, GR III)
2574 '1 2' => 'On (1 2)', #PH (NC, GR III)
2575 },
2576 },
2577 0x008b => { #PH (LS465)
2578 Name => 'ISO',
2579 Priority => 0,
2580 Writable => 'int32u',
2581 },
2582 0x0092 => { #31
2583 Name => 'IntervalShooting',
2584 Notes => '2 numbers: 1. Shot number 2. Total number of shots',
2585 Writable => 'int16u',
2586 Count => 2,
2587 PrintConv => {
2588 '0 0' => 'Off',
2589 OTHER => sub {
2590 my ($val, $inv) = @_;
2591 if ($inv) {
2592 $val =~ tr/0-9 //dc;
2593 } else {
2594 $val =~ s/(\d+) (\d+)/Shot $1 of $2/;
2595 }
2596 return $val;
2597 },
2598 },
2599 },
2600 0x0095 => { #31
2601 Name => 'SkinToneCorrection',
2602 Writable => 'int8s',
2603 Count => 2,
2604 PrintConv => {
2605 '0 0' => 'Off',
2606 '1 1' => 'On (type 1)',
2607 '1 2' => 'On (type 2)',
2608 },
2609 },
2610 0x0096 => { #31
2611 Name => 'ClarityControl',
2612 Writable => 'int8s',
2613 Count => 2,
2614 PrintConv => {
2615 '0 0' => 'Off',
2616 OTHER => sub {
2617 my ($val, $inv) = @_;
2618 if ($inv) {
2619 $val =~ /(\d+ -?\d+)/ and return $1;
2620 return ("1 $val");
2621 } elsif ($val =~ /^1 (-?\d+)$/) {
2622 return $1 ? sprintf('%+d', $1) : 0;
2623 } else {
2624 return "Unknown ($val)";
2625 }
2626 },
2627 },
2628 },
2629 0x0200 => { #5
2630 Name => 'BlackPoint',
2631 Writable => 'int16u',
2632 Count => 4,
2633 },
2634 0x0201 => { #5
2635 # (this doesn't change for different fixed white balances in JPEG images: Daylight,
2636 # Tungsten, Kelvin, etc -- always "8192 8192 8192 8192", but it varies for these in
2637 # RAW images, all images in Auto, for different Manual WB settings, and for images
2638 # taken via Pentax Remote Assistant) - PH
2639 Name => 'WhitePoint',
2640 Writable => 'int16u',
2641 Count => 4,
2642 },
2643 # 0x0202: int16u[4]: all 0's in all my samples
2644 0x0203 => { #JD (not really sure what these mean)
2645 Name => 'ColorMatrixA', # (camera RGB to sRGB matrix, *ist D, ref IB)
2646 Writable => 'int16s',
2647 Count => 9,
2648 ValueConv => 'join(" ",map({ $_/8192 } split(" ",$val)))',
2649 ValueConvInv => 'join(" ",map({ int($_*8192 + ($_<0?-0.5:0.5)) } split(" ",$val)))',
2650 PrintConv => 'join(" ",map({sprintf("%.5f",$_)} split(" ",$val)))',
2651 PrintConvInv => '"$val"',
2652 },
2653 0x0204 => { #JD
2654 Name => 'ColorMatrixB', # (camera RGB to Adobe RGB matrix, *ist D, ref IB)
2655 Writable => 'int16s',
2656 Count => 9,
2657 ValueConv => 'join(" ",map({ $_/8192 } split(" ",$val)))',
2658 ValueConvInv => 'join(" ",map({ int($_*8192 + ($_<0?-0.5:0.5)) } split(" ",$val)))',
2659 PrintConv => 'join(" ",map({sprintf("%.5f",$_)} split(" ",$val)))',
2660 PrintConvInv => '"$val"',
2661 },
2662 0x0205 => [{ #19
2663 Name => 'CameraSettings',
2664 # size: *istD/*istDs/K100D/K110D=16, K-m/K2000=14, K-7/K-x=19,
2665 # K200D/K20D/K-5/645D=20, K-r=21, K10D=22, K-01=25
2666 Condition => '$count < 25', # (not valid for the K-01)
2667 SubDirectory => {
2668 TagTable => 'Image::ExifTool::Pentax::CameraSettings',
2669 ByteOrder => 'BigEndian',
2670 },
2671 },{
2672 Name => 'CameraSettingsUnknown',
2673 SubDirectory => {
2674 TagTable => 'Image::ExifTool::Pentax::CameraSettingsUnknown',
2675 ByteOrder => 'BigEndian',
2676 },
2677 }],
2678 0x0206 => [{ #PH
2679 Name => 'AEInfo',
2680 # size: *istD/*istDs/K100D/K110D=14, K10D/K200D/K20D=16, K-m/K2000=20,
2681 # K-7/K-x=24, K-5/K-r/645D=25
2682 Condition => '$count <= 25 and $count != 21 and $$self{AEInfoSize} = $count',
2683 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::AEInfo' },
2684 },{
2685 Name => 'AEInfo2',
2686 # size: K-01=21
2687 Condition => '$count == 21',
2688 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::AEInfo2' },
2689 },{
2690 Name => 'AEInfo3',
2691 # size: K-30=48
2692 Condition => '$count == 48',
2693 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::AEInfo3' },
2694 },{
2695 Name => 'AEInfoUnknown',
2696 # size: Q/Q10=34
2697 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::AEInfoUnknown' },
2698 }],
2699 0x0207 => [ #PH
2700 {
2701 Name => 'LensInfo',
2702 # the *ist series (and Samsung GX-1) always use the old format, and all
2703 # other models but the K100D, K110D and K100D Super always use the newer
2704 # format, and for the K110D/K110D we expect ff or 00 00 at byte 20 if
2705 # it is the old format.)
2706 Condition => q{
2707 $$self{Model}=~/(\*ist|GX-1[LS])/ or
2708 ($$self{Model}=~/(K100D|K110D)/ and $$valPt=~/^.{20}(\xff|\0\0)/s)
2709 },
2710 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LensInfo' },
2711 },{
2712 Name => 'LensInfo',
2713 Condition => '$count != 90 and $count != 91 and $count != 80 and $count != 128 and $count != 168',
2714 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LensInfo2' },
2715 },{
2716 Name => 'LensInfo', # 645D
2717 Condition => '$count == 90',
2718 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LensInfo3' },
2719 },{
2720 Name => 'LensInfo', # K-r, K-5, K-5II
2721 Condition => '$count == 91',
2722 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LensInfo4' },
2723 },{
2724 Name => 'LensInfo', # K-01, K-30, K-50, K-500, K-3, K-3II
2725 Condition => '$count == 80 or $count == 128',
2726 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LensInfo5' },
2727 }
2728 # ($count == 168 - Ricoh GR III)
2729 ],
2730 0x0208 => [ #PH
2731 {
2732 Name => 'FlashInfo',
2733 Condition => '$count == 27',
2734 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::FlashInfo' },
2735 },
2736 {
2737 Name => 'FlashInfoUnknown',
2738 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::FlashInfoUnknown' },
2739 },
2740 ],
2741 0x0209 => { #PH
2742 Name => 'AEMeteringSegments',
2743 Format => 'int8u',
2744 Count => -1,
2745 Notes => q{
2746 measurements from each of the 16 AE metering segments for models such as the
2747 K10D, 77 metering segments for models such as the K-5, and 4050 metering
2748 segments for the K-3, converted to LV
2749 },
2750 %convertMeteringSegments,
2751 # 16 metering segment 77 metering segment
2752 # locations (ref JD, K10D) locations (ref PH, K-5)
2753 # +-------------------------+
2754 # | 14 | +----------------------------------+
2755 # | +---+---+---+---+ | | 0 1 2 3 4 5 6 7 8 9 10 |
2756 # | | 5 | 3/1\ 2| 4 | | | 11 12 13 14 15 16 17 18 19 20 21 |
2757 # | +-+-+-+-+ - +-+-+-+-+ | | 22 23 24 25 26 27 28 29 30 31 32 |
2758 # +--+ 9 | 7 ||0|| 6 | 8 +--+ | 33 34 35 36 37 38 39 40 41 42 43 |
2759 # | +-+-+-+-+ - +-+-+-+-+ | | 44 45 46 47 48 49 50 51 52 53 54 |
2760 # | |13 |11\ /10|12 | | | 55 56 57 58 59 60 61 62 63 64 65 |
2761 # | +---+---+---+---+ | | 66 67 68 69 70 71 72 73 74 75 76 |
2762 # | 15 | +----------------------------------+
2763 # +-------------------------+
2764 },
2765 0x020a => { #PH/JD/19
2766 Name => 'FlashMeteringSegments',
2767 Format => 'int8u',
2768 Count => -1,
2769 %convertMeteringSegments,
2770 },
2771 0x020b => { #PH/JD/19
2772 Name => 'SlaveFlashMeteringSegments',
2773 Format => 'int8u',
2774 Count => -1,
2775 Notes => 'used in wireless control mode',
2776 %convertMeteringSegments,
2777 },
2778 0x020d => { #PH
2779 Name => 'WB_RGGBLevelsDaylight',
2780 Writable => 'int16u',
2781 Count => 4,
2782 },
2783 0x020e => { #PH
2784 Name => 'WB_RGGBLevelsShade',
2785 Writable => 'int16u',
2786 Count => 4,
2787 },
2788 0x020f => { #PH
2789 Name => 'WB_RGGBLevelsCloudy',
2790 Writable => 'int16u',
2791 Count => 4,
2792 },
2793 0x0210 => { #PH
2794 Name => 'WB_RGGBLevelsTungsten',
2795 Writable => 'int16u',
2796 Count => 4,
2797 },
2798 0x0211 => { #PH
2799 Name => 'WB_RGGBLevelsFluorescentD',
2800 Writable => 'int16u',
2801 Count => 4,
2802 },
2803 0x0212 => { #PH
2804 Name => 'WB_RGGBLevelsFluorescentN',
2805 Writable => 'int16u',
2806 Count => 4,
2807 },
2808 0x0213 => { #PH
2809 Name => 'WB_RGGBLevelsFluorescentW',
2810 Writable => 'int16u',
2811 Count => 4,
2812 },
2813 0x0214 => { #PH
2814 Name => 'WB_RGGBLevelsFlash',
2815 Writable => 'int16u',
2816 Count => 4,
2817 },
2818 0x0215 => { #PH
2819 Name => 'CameraInfo',
2820 Format => 'undef', # (written as int32u)
2821 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::CameraInfo' },
2822 },
2823 0x0216 => { #PH
2824 Name => 'BatteryInfo',
2825 SubDirectory => {
2826 TagTable => 'Image::ExifTool::Pentax::BatteryInfo',
2827 ByteOrder => 'BigEndian', # have seen makernotes changed to little-endian in DNG!
2828 },
2829 },
2830 # 0x021a - undef[1068] (K-5) - ToneMode/Saturation mapping matrices (ref 28)
2831 0x021b => { #19
2832 Name => 'SaturationInfo',
2833 Flags => [ 'Unknown', 'Binary' ],
2834 Writable => 0,
2835 Notes => 'only in PEF and DNG images',
2836 # K10D values with various Saturation settings (ref 19):
2837 # Very Low: 000000022820f9a0fe4000802660f92002e0fee01e402c40f880fb40ffc02b20f52002e0fe401ee0
2838 # Low: 000000022ae0f700fe20ff402840f88001e0fcc021602f60f560fb40fe602d20f48001c0fbc02280
2839 # Med Low: 000000022dc0f420fe20fe002a20f7e000c0fa8024c032c0f220fb20fce02f60f3c000a0f9202640
2840 # Normal: 000000023120f0e0fe00fc802c40f740ffa0f7e028803660ee80fb20fb4031c0f300ff60f6202a80
2841 # Med High: 0000000234e0ed40fde0fae02ea0f680fe60f5002ca03a80ea80fb00f9603480f220fe00f2e02f20
2842 # High: 0000000238c0e960fde0f9203140f5a0fce0f1e031403f00e600fb00f7803760f120fc60ef403460
2843 # Very High:000000023d20e520fdc0f7203420f4c0fb60ee6036404400e120fae0f5403aa0f020fac0eb403a00
2844 },
2845 # 0x021c - undef[18] (K-5)
2846 # 0x021d - undef[18] (K-5)
2847 # 0x021e - undef[8] (K-5, Q)
2848 0x021f => { #JD
2849 Name => 'AFInfo',
2850 SubDirectory => {
2851 # NOTE: Most of these subdirectories are 'undef' format, and as such the
2852 # byte ordering is not changed when changed via the Pentax software (which
2853 # will write a little-endian TIFF on an Intel system). So we must define
2854 # BigEndian byte ordering for any of these which contain multi-byte values. - PH
2855 ByteOrder => 'BigEndian',
2856 TagTable => 'Image::ExifTool::Pentax::AFInfo',
2857 },
2858 },
2859 0x0220 => { #6
2860 Name => 'HuffmanTable',
2861 Flags => [ 'Unknown', 'Binary' ],
2862 Writable => 0,
2863 Notes => 'found in K10D, K20D and K2000 PEF images',
2864 },
2865 0x0221 => { #28
2866 Name => 'KelvinWB',
2867 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::KelvinWB' },
2868 },
2869 0x0222 => { #PH
2870 Name => 'ColorInfo',
2871 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::ColorInfo' },
2872 },
2873 # 0x0223 - undef[198] (K-5 PEF/DNG only)
2874 0x0224 => { #19
2875 Name => 'EVStepInfo',
2876 Drop => 200, # drop if larger than 200 bytes (40 kB in Pentax Q and Q10)
2877 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::EVStepInfo' },
2878 },
2879 0x0226 => { #PH
2880 Name => 'ShotInfo', # (may want to change this later when more is decoded)
2881 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::ShotInfo' },
2882 },
2883 0x0227 => { #PH
2884 Name => 'FacePos',
2885 Condition => '$$self{FacesDetected}', # ignore if no faces to decode
2886 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::FacePos' },
2887 },
2888 0x0228 => { #PH
2889 Name => 'FaceSize',
2890 Condition => '$$self{FacesDetected}', # ignore if no faces to decode
2891 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::FaceSize' },
2892 },
2893 0x0229 => { #PH (verified) (K-m, K-x, K-7)
2894 Name => 'SerialNumber',
2895 Writable => 'string',
2896 Notes => 'left blank by some cameras',
2897 },
2898 0x022a => [{ #PH (RICOH models (GR III))
2899 Name => 'FilterInfo',
2900 Condition => '$$self{Make} =~ /^RICOH/',
2901 SubDirectory => {
2902 TagTable => 'Image::ExifTool::Pentax::FilterInfo',
2903 ByteOrder => 'LittleEndian',
2904 },
2905 },{ #PH (K-5)
2906 Name => 'FilterInfo',
2907 SubDirectory => {
2908 TagTable => 'Image::ExifTool::Pentax::FilterInfo',
2909 ByteOrder => 'BigEndian',
2910 },
2911 }],
2912 0x022b => { #PH (K-5)
2913 Name => 'LevelInfo',
2914 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LevelInfo' },
2915 },
2916 # 0x022c - undef[46] (K-5)
2917 0x022d => { #28
2918 Name => 'WBLevels',
2919 Condition => '$count == 100', # (just to be safe, but no other counts observed)
2920 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::WBLevels' },
2921 },
2922 0x022e => { #PH (K-5 AVI videos)
2923 Name => 'Artist',
2924 Groups => { 2 => 'Author' },
2925 Writable => 'string',
2926 },
2927 0x022f => { #PH (K-5 AVI videos)
2928 Name => 'Copyright',
2929 Groups => { 2 => 'Author' },
2930 Writable => 'string',
2931 },
2932 0x0230 => { #PH (K-x AVI videos) (and K-70/Q-S1 MOV videos, ref 31)
2933 Name => 'FirmwareVersion',
2934 Notes => 'only in videos',
2935 # this tag only exists in AVI/MOV videos, and for the K-x the value of
2936 # this tag is "K-x Ver 1.00", which is the same as the EXIF Software
2937 # tag. I used a different tag name for this because Pentax uses the
2938 # AVI Software tag for a different string, "PENTAX K-x".
2939 Writable => 'string',
2940 },
2941 0x0231 => { #PH (K-5)
2942 Name => 'ContrastDetectAFArea',
2943 Writable => 'int16u',
2944 Count => 4,
2945 Notes => q{
2946 AF area of the most recent contrast-detect focus operation. Coordinates
2947 are left, top, width and height in a 720x480 frame, with Y downwards
2948 },
2949 },
2950 0x0235 => { #PH (K-5)
2951 Name => 'CrossProcessParams',
2952 # (it would be interesting to know exactly what these mean)
2953 Writable => 'undef',
2954 Format => 'int8u',
2955 Count => 10,
2956 },
2957 # 0x0236 - undef[52] (Q)
2958 # 0x0237 - undef[11] possibly related to smart effect setting? (Q)
2959 # 0x0238 - undef[9] (Q)
2960 0x0239 => { #PH
2961 Name => 'LensInfoQ',
2962 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LensInfoQ' },
2963 },
2964 # 0x023a - undef[10] (Q)
2965 # 0x023b - undef[9] (K-01)
2966 # 01a700500000000000, 91a700500000000000, 41a700500000000000, 002700500000000000
2967 # c00500400000000000, 400500500000000000, 4004ff420100000000, 4087ff480000000000
2968 0x023f => { #31 (K-70 MOV videos)
2969 Name => 'Model',
2970 Description => 'Camera Model Name',
2971 Writable => 'string',
2972 },
2973 0x0243 => { #PH
2974 Name => 'PixelShiftInfo',
2975 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::PixelShiftInfo' },
2976 },
2977 0x0245 => { #29
2978 Name => 'AFPointInfo',
2979 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::AFPointInfo' },
2980 },
2981 0x03fe => { #PH
2982 Name => 'DataDump',
2983 Writable => 0,
2984 PrintConv => '\$val',
2985 },
2986 0x03ff => [ #PH
2987 {
2988 Name => 'TempInfo',
2989 Condition => '$$self{Model} =~ /K-(01|3|30|5|50|500)\b/',
2990 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::TempInfo' },
2991 },{
2992 Name => 'UnknownInfo',
2993 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::UnknownInfo' },
2994 },
2995 ],
2996 0x0402 => { #5
2997 Name => 'ToneCurve',
2998 PrintConv => '\$val',
2999 },
3000 0x0403 => { #5
3001 Name => 'ToneCurves',
3002 PrintConv => '\$val',
3003 },
3004 # 0x0404 - undef[2086] (K-5)
3005 0x0405 => { #PH - undef[24200] (K-5 PEF/DNG only), undef[28672] (Q DNG)
3006 Name => 'UnknownBlock',
3007 Writable => 'undef',
3008 Notes => 'large unknown data block in PEF/DNG images but not JPG images',
3009 Flags => [ 'Unknown', 'Binary', 'Drop' ],
3010 },
3011 # 0x0406 - undef[4116] (K-5)
3012 # 0x0407 - undef[3072] (Q DNG)
3013 # 0x0408 - undef[1024] (Q DNG)
3014 0x0e00 => {
3015 Name => 'PrintIM',
3016 Description => 'Print Image Matching',
3017 Writable => 0,
3018 SubDirectory => {
3019 TagTable => 'Image::ExifTool::PrintIM::Main',
3020 },
3021 },
3022);
3023
3024# shake reduction information (ref PH)
3025%Image::ExifTool::Pentax::SRInfo = (
3026 %binaryDataAttrs,
3027 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
3028 NOTES => 'Shake reduction information.',
3029 0 => {
3030 Name => 'SRResult',
3031 PrintConv => { #PH/JD
3032 0 => 'Not stabilized',
3033 BITMASK => {
3034 0 => 'Stabilized',
3035 # have seen 1 and 4 for 0.5 and 0.3 sec exposures with NR on and Bit 0 also set - ref 19
3036 # have seen bits 1,2,3,4 in K-5 AVI videos - PH
3037 6 => 'Not ready',
3038 },
3039 },
3040 },
3041 1 => {
3042 Name => 'ShakeReduction',
3043 PrintConv => {
3044 0 => 'Off',
3045 1 => 'On',
3046 4 => 'Off (4)', # (K20D, K200D, K-7, K-5)
3047 5 => 'On but Disabled', # (K20D, K-5)
3048 # (can be 5 "On but Disabled" for K-5 with HDR [auto-align off only],
3049 # Composition Adjust, DriveMode = Self-timer or Remote, and movie with SR off!)
3050 6 => 'On (Video)', # (K-7)
3051 7 => 'On (7)', #(NC) (K20D, K200D, K-m, K-5)
3052 15 => 'On (15)', # (K20D with Tamron 10-20mm @ 10mm)
3053 39 => 'On (mode 2)', # (K-01) (on during capture and live view)
3054 135 => 'On (135)', # (K-5IIs)
3055 167 => 'On (mode 1)', # (K-01) (on during capture only)
3056 },
3057 },
3058 2 => {
3059 Name => 'SRHalfPressTime',
3060 # (was SR_SWSToSWRTime: SWS=photometering switch, SWR=shutter release switch)
3061 # (from http://www.patentstorm.us/patents/6597867-description.html)
3062 # (here, SR could more accurately mean Shutter Release, not Shake Reduction)
3063 # (not valid for K-01 - PH)
3064 Notes => q{
3065 time from when the shutter button was half pressed to when the shutter was
3066 released, including time for focusing. Not valid for some models
3067 },
3068 # (constant of 60 determined from times: 2sec=127; 3sec=184,197; 4sec=244,249,243,246 - PH)
3069 ValueConv => '$val / 60',
3070 ValueConvInv => 'my $v=$val*60; $v < 255 ? int($v + 0.5) : 255',
3071 PrintConv => 'sprintf("%.2f s",$val) . ($val > 254.5/60 ? " or longer" : "")',
3072 PrintConvInv => '$val=~tr/0-9.//dc; $val',
3073 },
3074 3 => { #JD
3075 Name => 'SRFocalLength',
3076 ValueConv => '$val & 0x01 ? $val * 4 : $val / 2',
3077 ValueConvInv => '$val <= 127 ? int($val) * 2 : int($val / 4) | 0x01',
3078 PrintConv => '"$val mm"',
3079 PrintConvInv => '$val=~s/\s*mm//;$val',
3080 },
3081);
3082
3083# shake reduction information for the K-3 (ref PH)
3084%Image::ExifTool::Pentax::SRInfo2 = (
3085 %binaryDataAttrs,
3086 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
3087 NOTES => 'Shake reduction information for the K-3.',
3088 0 => {
3089 Name => 'SRResult',
3090 Unknown => 1,
3091 PrintConv => { BITMASK => {
3092 # Bit 0 - have seen this set in a few Pentax samples - PH
3093 # Bit 6 - usually set when SR is Off, and occasionally when On - PH
3094 # Bit 7 - set when AA simulation is on - PH
3095 }},
3096 },
3097 1 => {
3098 Name => 'ShakeReduction',
3099 PrintConv => { #forum5425
3100 0 => 'Off', # (NC for K-3)
3101 1 => 'On', # (NC for K-3)
3102 4 => 'Off (AA simulation off)',
3103 5 => 'On but Disabled', # (NC for K-3)
3104 6 => 'On (Video)', # (NC for K-3)
3105 7 => 'On (AA simulation off)',
3106 8 => 'Off (AA simulation type 1) (8)', #forum8362 (K-70)
3107 12 => 'Off (AA simulation type 1)', # (AA linear motion)
3108 15 => 'On (AA simulation type 1)', # (AA linear motion)
3109 16 => 'Off (AA simulation type 2) (16)', #forum8362 (K-70)
3110 20 => 'Off (AA simulation type 2)', # (AA circular motion)
3111 23 => 'On (AA simulation type 2)', # (AA circular motion)
3112 },
3113 },
3114);
3115
3116# face detection information (ref PH, K-5)
3117%Image::ExifTool::Pentax::FaceInfo = (
3118 %binaryDataAttrs,
3119 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
3120 DATAMEMBER => [ 0 ],
3121 0 => {
3122 Name => 'FacesDetected',
3123 RawConv => '$$self{FacesDetected} = $val',
3124 },
3125 2 => {
3126 Name => 'FacePosition',
3127 Notes => q{
3128 X/Y coordinates of the center of the main face in percent of frame size,
3129 with positive Y downwards
3130 },
3131 Format => 'int8u[2]',
3132 },
3133);
3134
3135# automatic white balance settings (ref PH, K-5)
3136%Image::ExifTool::Pentax::AWBInfo = (
3137 %binaryDataAttrs,
3138 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
3139 # 0 - always 1?
3140 # (data ends here for the K20D, K200D, K-x and K-7)
3141 0 => {
3142 Name => 'WhiteBalanceAutoAdjustment',
3143 PrintConv => {
3144 0 => 'Off',
3145 1 => 'On',
3146 },
3147 },
3148 1 => { # (exists only for K-5)
3149 Name => 'TungstenAWB',
3150 PrintConv => {
3151 0 => 'Subtle Correction',
3152 1 => 'Strong Correction',
3153 },
3154 },
3155);
3156
3157# world time settings (ref PH, K-5)
3158%Image::ExifTool::Pentax::TimeInfo = (
3159 %binaryDataAttrs,
3160 GROUPS => { 0 => 'MakerNotes', 2 => 'Time' },
3161 0.1 => {
3162 Name => 'WorldTimeLocation',
3163 Mask => 0x01,
3164 PrintConv => {
3165 0 => 'Hometown',
3166 1 => 'Destination',
3167 },
3168 },
3169 0.2 => {
3170 Name => 'HometownDST',
3171 Mask => 0x02,
3172 PrintConv => \%noYes,
3173 },
3174 0.3 => {
3175 Name => 'DestinationDST',
3176 Mask => 0x04,
3177 PrintConv => \%noYes,
3178 },
3179 2 => {
3180 Name => 'HometownCity',
3181 SeparateTable => 'City',
3182 PrintConv => \%pentaxCities,
3183 },
3184 3 => {
3185 Name => 'DestinationCity',
3186 SeparateTable => 'City',
3187 PrintConv => \%pentaxCities,
3188 },
3189);
3190
3191# lens distortion correction (ref PH, K-5)
3192%Image::ExifTool::Pentax::LensCorr = (
3193 %binaryDataAttrs,
3194 GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
3195 0 => {
3196 Name => 'DistortionCorrection',
3197 PrintConv => { 0 => 'Off', 1 => 'On' },
3198 },
3199 1 => {
3200 Name => 'ChromaticAberrationCorrection',
3201 PrintConv => { 0 => 'Off', 1 => 'On' },
3202 },
3203 2 => {
3204 Name => 'PeripheralIlluminationCorr',
3205 PrintConv => { 0 => 'Off', 1 => 'On' },
3206 },
3207 3 => {
3208 Name => 'DiffractionCorrection',
3209 PrintConv => { 0 => 'Off', 16 => 'On' },
3210 },
3211);
3212
3213# camera settings (ref 19)
3214%Image::ExifTool::Pentax::CameraSettings = (
3215 %binaryDataAttrs,
3216 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
3217 PRIORITY => 0,
3218 NOTES => 'Camera settings information written by Pentax DSLR cameras.',
3219 0 => {
3220 Name => 'PictureMode2',
3221 PrintConv => {
3222 0 => 'Scene Mode', #PH
3223 1 => 'Auto PICT', #PH (NC)
3224 2 => 'Program AE',
3225 3 => 'Green Mode',
3226 4 => 'Shutter Speed Priority',
3227 5 => 'Aperture Priority',
3228 6 => 'Program Tv Shift', #PH
3229 7 => 'Program Av Shift',
3230 8 => 'Manual', #PH
3231 9 => 'Bulb', #PH
3232 10 => 'Aperture Priority, Off-Auto-Aperture', #PH (NC)
3233 11 => 'Manual, Off-Auto-Aperture', #PH
3234 12 => 'Bulb, Off-Auto-Aperture', #PH (NC)
3235 13 => 'Shutter & Aperture Priority AE',
3236 15 => 'Sensitivity Priority AE',
3237 16 => 'Flash X-Sync Speed AE', #PH
3238 },
3239 },
3240 1.1 => {
3241 Name => 'ProgramLine',
3242 # only set to other than Normal when in Program AE mode
3243 Mask => 0x03,
3244 PrintConv => {
3245 0 => 'Normal',
3246 1 => 'Hi Speed',
3247 2 => 'Depth',
3248 3 => 'MTF',
3249 },
3250 },
3251 1.2 => { # (K10D, K-5)
3252 Name => 'EVSteps',
3253 Mask => 0x20,
3254 PrintConv => {
3255 0 => '1/2 EV Steps',
3256 1 => '1/3 EV Steps',
3257 },
3258 },
3259 1.3 => { # (this bit is set for movies with the K-5 - PH)
3260 Name => 'E-DialInProgram',
3261 # always set even when not in Program AE mode
3262 Mask => 0x40,
3263 PrintConv => {
3264 0 => 'Tv or Av',
3265 1 => 'P Shift',
3266 },
3267 },
3268 1.4 => { # (K10D, K-5)
3269 Name => 'ApertureRingUse',
3270 # always set even Aperture Ring is in A mode
3271 Mask => 0x80,
3272 PrintConv => {
3273 0 => 'Prohibited',
3274 1 => 'Permitted',
3275 },
3276 },
3277 2 => {
3278 Name => 'FlashOptions',
3279 Notes => 'the camera flash options settings, set even if the flash is off',
3280 Mask => 0xf0,
3281 # Note: These tags correlate with the FlashMode and InternalFlashMode values,
3282 # and match what is displayed by the Pentax software
3283 PrintConv => {
3284 0 => 'Normal', # (this value can occur in Green Mode) - ref 19
3285 1 => 'Red-eye reduction', # (this value can occur in Green Mode) - ref 19
3286 2 => 'Auto', # (this value can occur in other than Green Mode) - ref 19
3287 3 => 'Auto, Red-eye reduction', #PH (this value can occur in other than Green Mode) - ref 19
3288 5 => 'Wireless (Master)',
3289 6 => 'Wireless (Control)',
3290 8 => 'Slow-sync',
3291 9 => 'Slow-sync, Red-eye reduction',
3292 10 => 'Trailing-curtain Sync'
3293 },
3294 },
3295 2.1 => {
3296 Name => 'MeteringMode2',
3297 Mask => 0x0f,
3298 Notes => 'may not be valid for some models, eg. *ist D',
3299 PrintConv => {
3300 0 => 'Multi-segment',
3301 BITMASK => {
3302 0 => 'Center-weighted average',
3303 1 => 'Spot',
3304 },
3305 },
3306 },
3307 3 => {
3308 Name => 'AFPointMode',
3309 Mask => 0xf0,
3310 PrintConv => {
3311 0 => 'Auto',
3312 BITMASK => {
3313 0 => 'Select',
3314 1 => 'Fixed Center',
3315 # have seen bit 2 set in pre-production images (firmware 0.20) - PH
3316 },
3317 },
3318 },
3319 3.1 => {
3320 Name => 'FocusMode2',
3321 Mask => 0x0f,
3322 PrintConv => {
3323 0 => 'Manual',
3324 1 => 'AF-S',
3325 2 => 'AF-C',
3326 3 => 'AF-A', #PH
3327 },
3328 },
3329 4 => {
3330 Name => 'AFPointSelected2',
3331 Format => 'int16u',
3332 PrintConv => {
3333 0 => 'Auto',
3334 BITMASK => {
3335 0 => 'Upper-left',
3336 1 => 'Top',
3337 2 => 'Upper-right',
3338 3 => 'Left',
3339 4 => 'Mid-left',
3340 5 => 'Center',
3341 6 => 'Mid-right',
3342 7 => 'Right',
3343 8 => 'Lower-left',
3344 9 => 'Bottom',
3345 10 => 'Lower-right',
3346 },
3347 },
3348 },
3349 6 => {
3350 Name => 'ISOFloor', #PH
3351 # manual ISO or minimum ISO in Auto ISO mode - PH
3352 ValueConv => 'int(100*exp(Image::ExifTool::Pentax::PentaxEv($val-32)*log(2))+0.5)',
3353 ValueConvInv => 'Image::ExifTool::Pentax::PentaxEvInv(log($val/100)/log(2))+32',
3354 },
3355 7 => {
3356 Name => 'DriveMode2',
3357 PrintConv => {
3358 0 => 'Single-frame',
3359 BITMASK => {
3360 0 => 'Continuous', # (K-5 Hi)
3361 1 => 'Continuous (Lo)', #PH (K-5)
3362 2 => 'Self-timer (12 s)', #PH
3363 3 => 'Self-timer (2 s)', #PH
3364 4 => 'Remote Control (3 s delay)',
3365 5 => 'Remote Control',
3366 6 => 'Exposure Bracket', #PH/19
3367 7 => 'Multiple Exposure',
3368 },
3369 },
3370 },
3371 8 => {
3372 Name => 'ExposureBracketStepSize',
3373 # This is set even when Exposure Bracket is Off (and the K10D
3374 # displays "---" as the step size when you press the EB button) - DaveN
3375 # because the last value is remembered and if you turn Exposure Bracket
3376 # on the step size goes back to what it was before.
3377 PrintConv => {
3378 3 => '0.3',
3379 4 => '0.5',
3380 5 => '0.7',
3381 8 => '1.0', #PH
3382 11 => '1.3',
3383 12 => '1.5',
3384 13 => '1.7', #(NC)
3385 16 => '2.0', #PH
3386 },
3387 },
3388 9 => { #PH/19
3389 Name => 'BracketShotNumber',
3390 PrintHex => 1,
3391 PrintConv => {
3392 0 => 'n/a',
3393 0x02 => '1 of 2', #PH (K-5)
3394 0x12 => '2 of 2', #PH (K-5)
3395 0x03 => '1 of 3',
3396 0x13 => '2 of 3',
3397 0x23 => '3 of 3',
3398 0x05 => '1 of 5',
3399 0x15 => '2 of 5',
3400 0x25 => '3 of 5',
3401 0x35 => '4 of 5',
3402 0x45 => '5 of 5',
3403 },
3404 },
3405 10 => {
3406 Name => 'WhiteBalanceSet',
3407 Mask => 0xf0,
3408 # Not necessarily the white balance used; for example if the custom menu is set to
3409 # "WB when using flash" -> "2 Flash", then this tag reports the camera setting while
3410 # tag 0x0019 reports Flash if the Flash was used.
3411 PrintConv => {
3412 0 => 'Auto',
3413 1 => 'Daylight',
3414 2 => 'Shade',
3415 3 => 'Cloudy',
3416 4 => 'Daylight Fluorescent',
3417 5 => 'Day White Fluorescent',
3418 6 => 'White Fluorescent',
3419 7 => 'Tungsten',
3420 8 => 'Flash',
3421 9 => 'Manual',
3422 # The three Set Color Temperature settings refer to the 3 preset settings which
3423 # can be saved in the menu (see page 123 of the K10D manual)
3424 12 => 'Set Color Temperature 1',
3425 13 => 'Set Color Temperature 2',
3426 14 => 'Set Color Temperature 3',
3427 },
3428 },
3429 10.1 => {
3430 Name => 'MultipleExposureSet',
3431 Mask => 0x0f,
3432 PrintConv => {
3433 0 => 'Off',
3434 1 => 'On',
3435 },
3436 },
3437 13 => {
3438 Name => 'RawAndJpgRecording',
3439 Condition => '$$self{Model} =~ /(K10D|GX10)\b/',
3440 Notes => 'K10D only',
3441 # this is actually a bit field: - PH
3442 # bit 0=JPEG, bit 2=PEF, bit 3=DNG; high nibble: 0x00=best, 0x20=better, 0x40=good
3443 PrintHex => 1,
3444 PrintConv => {
3445 0x01 => 'JPEG (Best)', #PH
3446 0x04 => 'RAW (PEF, Best)',
3447 0x05 => 'RAW+JPEG (PEF, Best)',
3448 0x08 => 'RAW (DNG, Best)', #PH (NC)
3449 0x09 => 'RAW+JPEG (DNG, Best)', #PH (NC)
3450 0x21 => 'JPEG (Better)', #PH
3451 0x24 => 'RAW (PEF, Better)',
3452 0x25 => 'RAW+JPEG (PEF, Better)', #PH
3453 0x28 => 'RAW (DNG, Better)', #PH
3454 0x29 => 'RAW+JPEG (DNG, Better)', #PH (NC)
3455 0x41 => 'JPEG (Good)',
3456 0x44 => 'RAW (PEF, Good)', #PH (NC)
3457 0x45 => 'RAW+JPEG (PEF, Good)', #PH (NC)
3458 0x48 => 'RAW (DNG, Good)', #PH (NC)
3459 0x49 => 'RAW+JPEG (DNG, Good)',
3460 # have seen values of 0,2,34 for other models (not K10D) - PH
3461 },
3462 },
3463 14.1 => { #PH
3464 Name => 'JpgRecordedPixels',
3465 Condition => '$$self{Model} =~ /(K10D|GX10)\b/',
3466 Notes => 'K10D only',
3467 Mask => 0x03,
3468 PrintConv => {
3469 0 => '10 MP',
3470 1 => '6 MP',
3471 2 => '2 MP',
3472 },
3473 },
3474 14.2 => { #PH (K-5)
3475 Name => 'LinkAEToAFPoint',
3476 Condition => '$$self{Model} =~ /K-5\b/',
3477 Notes => 'K-5 only',
3478 Mask => 0x01,
3479 PrintConv => { 0 => 'Off', 1 => 'On' },
3480 },
3481 14.3 => { #PH (K-5)
3482 Name => 'SensitivitySteps',
3483 Condition => '$$self{Model} =~ /K-5\b/',
3484 Notes => 'K-5 only',
3485 Mask => 0x02,
3486 PrintConv => {
3487 0 => '1 EV Steps',
3488 1 => 'As EV Steps',
3489 },
3490 },
3491 14.4 => { #PH (K-5)
3492 Name => 'ISOAuto',
3493 Condition => '$$self{Model} =~ /K-5\b/',
3494 Notes => 'K-5 only',
3495 Mask => 0x04,
3496 PrintConv => { 0 => 'Off', 1 => 'On' },
3497 },
3498 # 14.5 Mask 0x80 - changes for K-5
3499 16 => {
3500 Name => 'FlashOptions2',
3501 Condition => '$$self{Model} =~ /(K10D|GX10)\b/',
3502 Notes => 'K10D only; set even if the flash is off',
3503 Mask => 0xf0,
3504 # Note: the Normal and Auto values (0x00 to 0x30) do not tags always
3505 # correlate with the FlashMode, InternalFlashMode and FlashOptions values
3506 # however, these values seem to better match the K10D's actual functionality
3507 # (always Auto in Green mode always Normal otherwise if one of the other options
3508 # isn't selected) - ref 19
3509 # (these tags relate closely to InternalFlashMode values - PH)
3510 PrintConv => {
3511 0 => 'Normal', # (this value never occurs in Green Mode) - ref 19
3512 1 => 'Red-eye reduction', # (this value never occurs in Green Mode) - ref 19
3513 2 => 'Auto', # (this value only occurs in Green Mode) - ref 19
3514 3 => 'Auto, Red-eye reduction', # (this value only occurs in Green Mode) - ref 19
3515 5 => 'Wireless (Master)',
3516 6 => 'Wireless (Control)',
3517 8 => 'Slow-sync',
3518 9 => 'Slow-sync, Red-eye reduction',
3519 10 => 'Trailing-curtain Sync'
3520 },
3521 },
3522 16.1 => {
3523 Name => 'MeteringMode3',
3524 Condition => '$$self{Model} =~ /(K10D|GX10)\b/',
3525 Notes => 'K10D only',
3526 Mask => 0x0f,
3527 PrintConv => {
3528 0 => 'Multi-segment',
3529 BITMASK => {
3530 0 => 'Center-weighted average',
3531 1 => 'Spot',
3532 },
3533 },
3534 },
3535 # 16 Mask 0x0f - changes when changing EV steps? (K-5)
3536 17.1 => {
3537 Name => 'SRActive',
3538 Condition => '$$self{Model} =~ /(K10D|GX10)\b/',
3539 Notes => q{
3540 K10D only; SR is active only when ShakeReduction is On, DriveMode is not
3541 Remote or Self-timer, and Internal/ExternalFlashMode is not "On, Wireless"
3542 },
3543 Mask => 0x80,
3544 PrintConv => \%noYes,
3545 },
3546 17.2 => {
3547 Name => 'Rotation',
3548 Condition => '$$self{Model} =~ /(K10D|GX10)\b/',
3549 Notes => 'K10D only',
3550 Mask => 0x60,
3551 PrintConv => {
3552 0 => 'Horizontal (normal)',
3553 1 => 'Rotate 180',
3554 2 => 'Rotate 90 CW',
3555 3 => 'Rotate 270 CW',
3556 },
3557 },
3558 # Bit 0x08 is set on 3 of my 3000 shots to (All 3 were Shutter Priority
3559 # but this may not mean anything with such a small sample) - ref 19
3560 17.3 => {
3561 Name => 'ISOSetting',
3562 Condition => '$$self{Model} =~ /(K10D|GX10)\b/',
3563 Notes => 'K10D only',
3564 Mask => 0x04,
3565 PrintConv => {
3566 0 => 'Manual',
3567 1 => 'Auto',
3568 },
3569 },
3570 17.4 => {
3571 Name => 'SensitivitySteps',
3572 Condition => '$$self{Model} =~ /(K10D|GX10)\b/',
3573 Notes => 'K10D only',
3574 Mask => 0x02,
3575 PrintConv => {
3576 0 => '1 EV Steps',
3577 1 => 'As EV Steps',
3578 },
3579 },
3580 # 17 Mask 0x08 - changed when changing Auto ISO range (K-5)
3581 18 => {
3582 Name => 'TvExposureTimeSetting',
3583 Condition => '$$self{Model} =~ /(K10D|GX10)\b/',
3584 Notes => 'K10D only',
3585 ValueConv => 'exp(-Image::ExifTool::Pentax::PentaxEv($val-68)*log(2))',
3586 ValueConvInv => 'Image::ExifTool::Pentax::PentaxEvInv(-log($val)/log(2))+68',
3587 PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
3588 PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
3589 },
3590 19 => {
3591 Name => 'AvApertureSetting',
3592 Condition => '$$self{Model} =~ /(K10D|GX10)\b/',
3593 Notes => 'K10D only',
3594 ValueConv => 'exp(Image::ExifTool::Pentax::PentaxEv($val-68)*log(2)/2)',
3595 ValueConvInv => 'Image::ExifTool::Pentax::PentaxEvInv(log($val)*2/log(2))+68',
3596 PrintConv => 'sprintf("%.1f",$val)',
3597 PrintConvInv => '$val',
3598 },
3599 20 => { #PH
3600 Name => 'SvISOSetting',
3601 Condition => '$$self{Model} =~ /(K10D|GX10)\b/',
3602 Notes => 'K10D only',
3603 # ISO setting for sensitivity-priority mode
3604 # (conversion may not give actual displayed values:)
3605 # 32 => 100, 35 => 125, 36 => 140, 37 => 160,
3606 # 40 => 200, 43 => 250, 44 => 280, 45 => 320,
3607 # 48 => 400, 51 => 500, 52 => 560, 53 => 640,
3608 # 56 => 800, 59 => 1000,60 => 1100,61 => 1250, 64 => 1600
3609 ValueConv => 'int(100*exp(Image::ExifTool::Pentax::PentaxEv($val-32)*log(2))+0.5)',
3610 ValueConvInv => 'Image::ExifTool::Pentax::PentaxEvInv(log($val/100)/log(2))+32',
3611 },
3612 21 => { #PH
3613 Name => 'BaseExposureCompensation',
3614 Condition => '$$self{Model} =~ /(K10D|GX10)\b/',
3615 Notes => 'K10D only; exposure compensation without auto bracketing',
3616 ValueConv => 'Image::ExifTool::Pentax::PentaxEv(64-$val)',
3617 ValueConvInv => '64-Image::ExifTool::Pentax::PentaxEvInv($val)',
3618 PrintConv => '$val ? sprintf("%+.1f", $val) : 0',
3619 PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
3620 },
3621);
3622
3623# unknown camera settings (K-01)
3624%Image::ExifTool::Pentax::CameraSettingsUnknown = (
3625 %binaryDataAttrs,
3626 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
3627 NOTES => 'This information has not yet been decoded for models such as the K-01.',
3628);
3629
3630# auto-exposure information (ref PH)
3631%Image::ExifTool::Pentax::AEInfo = (
3632 %binaryDataAttrs,
3633 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
3634 DATAMEMBER => [ 7 ],
3635 NOTES => 'Auto-exposure information for most Pentax models.',
3636 # instead of /8, should these be PentaxEv(), as in CameraSettings? - PH
3637 0 => {
3638 Name => 'AEExposureTime',
3639 Notes => 'val = 24 * 2**((32-raw)/8)',
3640 ValueConv => '24*exp(-($val-32)*log(2)/8)',
3641 ValueConvInv => '-log($val/24)*8/log(2)+32',
3642 PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
3643 PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
3644 },
3645 1 => {
3646 Name => 'AEAperture',
3647 Notes => 'val = 2**((raw-68)/16)',
3648 ValueConv => 'exp(($val-68)*log(2)/16)',
3649 ValueConvInv => 'log($val)*16/log(2)+68',
3650 PrintConv => 'sprintf("%.1f",$val)',
3651 PrintConvInv => '$val',
3652 },
3653 2 => {
3654 Name => 'AE_ISO',
3655 Notes => 'val = 100 * 2**((raw-32)/8)',
3656 ValueConv => '100*exp(($val-32)*log(2)/8)',
3657 ValueConvInv => 'log($val/100)*8/log(2)+32',
3658 PrintConv => 'int($val + 0.5)',
3659 PrintConvInv => '$val',
3660 },
3661 3 => {
3662 Name => 'AEXv',
3663 Notes => 'val = (raw-64)/8',
3664 ValueConv => '($val-64)/8',
3665 ValueConvInv => '$val * 8 + 64',
3666 },
3667 4 => {
3668 Name => 'AEBXv',
3669 Format => 'int8s',
3670 Notes => 'val = raw / 8',
3671 ValueConv => '$val / 8',
3672 ValueConvInv => '$val * 8',
3673 },
3674 5 => {
3675 Name => 'AEMinExposureTime', #19
3676 Notes => 'val = 24 * 2**((32-raw)/8)',
3677 ValueConv => '24*exp(-($val-32)*log(2)/8)', #JD
3678 ValueConvInv => '-log($val/24)*8/log(2)+32',
3679 PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
3680 PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
3681 },
3682 6 => {
3683 Name => 'AEProgramMode',
3684 PrintConvColumns => 2,
3685 PrintConv => {
3686 0 => 'M, P or TAv',
3687 1 => 'Av, B or X',
3688 2 => 'Tv',
3689 3 => 'Sv or Green Mode',
3690 8 => 'Hi-speed Program',
3691 11 => 'Hi-speed Program (P-Shift)', #19
3692 16 => 'DOF Program', #19
3693 19 => 'DOF Program (P-Shift)', #19
3694 24 => 'MTF Program', #19
3695 27 => 'MTF Program (P-Shift)', #19
3696 35 => 'Standard',
3697 43 => 'Portrait',
3698 51 => 'Landscape',
3699 59 => 'Macro',
3700 67 => 'Sport',
3701 75 => 'Night Scene Portrait',
3702 83 => 'No Flash',
3703 91 => 'Night Scene',
3704 # 96 - seen for Pentax Q10
3705 99 => 'Surf & Snow',
3706 104 => 'Night Snap', # (Q)
3707 107 => 'Text',
3708 115 => 'Sunset',
3709 # 116 - seen for Pentax Q (vivid?)
3710 123 => 'Kids',
3711 131 => 'Pet',
3712 139 => 'Candlelight',
3713 144 => 'SCN', # (Q)
3714 160 => 'Program', # (Q)
3715 # 142 - seen for Pentax Q in Program mode
3716 147 => 'Museum',
3717 184 => 'Shallow DOF Program', # (K-5)
3718 216 => 'HDR', # (Q)
3719 },
3720 },
3721 7 => {
3722 Name => 'AEFlags',
3723 Writable => 0,
3724 Hook => '$size > 20 and $varSize += 1',
3725 Notes => 'indices after this are incremented by 1 for some models',
3726 # (this tag can't be unknown because the Hook must be evaluated
3727 # to shift the following offsets if necessary. Instead, ignore
3728 # the return value unless Unknown option used)
3729 RawConv => '$$self{OPTIONS}{Unknown} ? $val : undef',
3730 PrintConv => { #19
3731 # (seems to be the warnings displayed in the viewfinder for several bits)
3732 BITMASK => {
3733 # 0 - seen in extreme low light conditions (e.g. Lens Cap On)
3734 # 1 - seen in 2 cases, Aperture Priority mode, Auto ISO at 100,
3735 # Shutter speed at 1/4000 and aperture opened wider causing under exposure
3736 # 2 - only (but not always) set in Shutter Speed Priority (seems to be when over/under exposed).
3737 # In one case set when auto exposure compensation changed the Tv from 1/250 to 1/80.
3738 # In another case set when external flash was in SB mode so did not fire.
3739 3 => 'AE lock',
3740 4 => 'Flash recommended?', # not 100% sure of this one
3741 # 5 - seen lots...
3742 # 6 - seen lots...
3743 7 => 'Aperture wide open', # mostly true... (Set for all my lenses except for DA* 16-50mm)
3744 },
3745 },
3746 },
3747 # Note: Offsets below shifted by 1 if record size is > 20 bytes
3748 # (implemented by the Hook above)
3749 8 => { #30
3750 Name => 'AEApertureSteps',
3751 Notes => q{
3752 number of steps the aperture has been stopped down from wide open. There
3753 are roughly 8 steps per F-stop for most lenses, or 18 steps for 645D lenses,
3754 but it varies slightly by lens
3755 },
3756 PrintConv => '$val == 255 ? "n/a" : $val',
3757 PrintConvInv => '$val eq "n/a" ? 255 : $val',
3758 },
3759 9 => { #19
3760 Name => 'AEMaxAperture',
3761 Notes => 'val = 2**((raw-68)/16)',
3762 ValueConv => 'exp(($val-68)*log(2)/16)',
3763 ValueConvInv => 'log($val)*16/log(2)+68',
3764 PrintConv => 'sprintf("%.1f",$val)',
3765 PrintConvInv => '$val',
3766 },
3767 10 => { #19
3768 Name => 'AEMaxAperture2',
3769 Notes => 'val = 2**((raw-68)/16)',
3770 ValueConv => 'exp(($val-68)*log(2)/16)',
3771 ValueConvInv => 'log($val)*16/log(2)+68',
3772 PrintConv => 'sprintf("%.1f",$val)',
3773 PrintConvInv => '$val',
3774 },
3775 11 => { #19
3776 Name => 'AEMinAperture',
3777 Notes => 'val = 2**((raw-68)/16)',
3778 ValueConv => 'exp(($val-68)*log(2)/16)',
3779 ValueConvInv => 'log($val)*16/log(2)+68',
3780 PrintConv => 'sprintf("%.0f",$val)',
3781 PrintConvInv => '$val',
3782 },
3783 12 => { #19
3784 Name => 'AEMeteringMode',
3785 PrintConv => {
3786 0 => 'Multi-segment',
3787 BITMASK => {
3788 4 => 'Center-weighted average',
3789 5 => 'Spot',
3790 },
3791 },
3792 },
3793 13 => { #30
3794 Name => 'AEWhiteBalance',
3795 Condition => '$$self{AEInfoSize} == 24', # (not thoroughly tested for other sizes)
3796 Notes => 'K7 and Kx',
3797 Mask => 0xf0,
3798 PrintConv => {
3799 0 => 'Standard',
3800 1 => 'Daylight',
3801 2 => 'Shade',
3802 3 => 'Cloudy',
3803 4 => 'Daylight Fluorescent',
3804 5 => 'Day White Fluorescent',
3805 6 => 'White Fluorescent',
3806 7 => 'Tungsten',
3807 8 => 'Unknown', #31 (or not set due to inadequate lighting)
3808 },
3809 },
3810 13.1 => { #30
3811 Name => 'AEMeteringMode2',
3812 Condition => '$$self{AEInfoSize} == 24', # (not thoroughly tested for other sizes)
3813 Notes => 'K7 and Kx, override for an incompatible metering mode setting',
3814 Mask => 0x0f,
3815 PrintConv => {
3816 0 => 'Multi-segment',
3817 BITMASK => {
3818 0 => 'Center-weighted average',
3819 1 => 'Spot',
3820 # 2 - seen for K7 AVI movie
3821 },
3822 },
3823 },
3824 14 => { #19
3825 Name => 'FlashExposureCompSet',
3826 Description => 'Flash Exposure Comp. Setting',
3827 Format => 'int8s',
3828 Notes => q{
3829 reports the camera setting, unlike tag 0x004d which reports 0 in Green mode
3830 or if flash was on but did not fire. Both this tag and 0x004d report the
3831 setting even if the flash is off
3832 },
3833 ValueConv => 'Image::ExifTool::Pentax::PentaxEv($val)',
3834 ValueConvInv => 'Image::ExifTool::Pentax::PentaxEvInv($val)',
3835 PrintConv => '$val ? sprintf("%+.1f", $val) : 0',
3836 PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
3837 },
3838 21 => { #30
3839 Name => 'LevelIndicator',
3840 PrintConv => '$val == 90 ? "n/a" : $val',
3841 PrintConvInv => '$val eq "n/a" ? 90 : $val',
3842 },
3843);
3844
3845# auto-exposure information for the K-01 (ref PH)
3846%Image::ExifTool::Pentax::AEInfo2 = (
3847 %binaryDataAttrs,
3848 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
3849 NOTES => 'Auto-exposure information for the K-01.',
3850 # instead of /8, should these be PentaxEv(), as in CameraSettings? - PH
3851 2 => {
3852 Name => 'AEExposureTime',
3853 Notes => 'val = 24 * 2**((32-raw)/8)',
3854 ValueConv => '24*exp(-($val-32)*log(2)/8)',
3855 ValueConvInv => '-log($val/24)*8/log(2)+32',
3856 PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
3857 PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
3858 },
3859 3 => {
3860 Name => 'AEAperture',
3861 Notes => 'val = 2**((raw-68)/16)',
3862 ValueConv => 'exp(($val-68)*log(2)/16)',
3863 ValueConvInv => 'log($val)*16/log(2)+68',
3864 PrintConv => 'sprintf("%.1f",$val)',
3865 PrintConvInv => '$val',
3866 },
3867 4 => {
3868 Name => 'AE_ISO',
3869 Notes => 'val = 100 * 2**((raw-32)/8)',
3870 ValueConv => '100*exp(($val-32)*log(2)/8)',
3871 ValueConvInv => 'log($val/100)*8/log(2)+32',
3872 PrintConv => 'int($val + 0.5)',
3873 PrintConvInv => '$val',
3874 },
3875 5 => {
3876 Name => 'AEXv',
3877 # this is the negative of exposure compensation, not including bracketing
3878 Notes => 'val = (raw-64)/8',
3879 ValueConv => '($val-64)/8',
3880 ValueConvInv => '$val * 8 + 64',
3881 },
3882 6 => {
3883 Name => 'AEBXv',
3884 # this is the negative of auto exposure bracketing compensation
3885 Format => 'int8s',
3886 Notes => 'val = raw / 8',
3887 ValueConv => '$val / 8',
3888 ValueConvInv => '$val * 8',
3889 },
3890 8 => {
3891 Name => 'AEError',
3892 Format => 'int8s',
3893 # this is usually zero except in M exposure mode, but it can be non-zero
3894 # in other modes (eg. if you hit an aperture limit in Tv mode)
3895 ValueConv => '-($val-64)/8', # (negate to make overexposed positive)
3896 ValueConvInv => '-$val * 8 + 64',
3897 },
3898 11 => {
3899 Name => 'AEApertureSteps',
3900 Notes => q{
3901 number of steps the aperture has been stopped down from wide open. There
3902 are roughly 8 steps per F-stop, but it varies slightly by lens
3903 },
3904 PrintConv => '$val == 255 ? "n/a" : $val',
3905 PrintConvInv => '$val eq "n/a" ? 255 : $val',
3906 },
3907 15 => {
3908 Name => 'SceneMode',
3909 PrintConvColumns => 2,
3910 PrintConv => {
3911 0 => 'Off',
3912 1 => 'HDR',
3913 4 => 'Auto PICT',
3914 5 => 'Portrait',
3915 6 => 'Landscape',
3916 7 => 'Macro',
3917 8 => 'Sport',
3918 9 => 'Night Scene Portrait',
3919 10 => 'No Flash',
3920 11 => 'Night Scene',
3921 12 => 'Surf & Snow',
3922 14 => 'Sunset',
3923 15 => 'Kids',
3924 16 => 'Pet',
3925 17 => 'Candlelight',
3926 18 => 'Museum',
3927 20 => 'Food',
3928 21 => 'Stage Lighting',
3929 22 => 'Night Snap',
3930 25 => 'Night Scene HDR',
3931 26 => 'Blue Sky',
3932 27 => 'Forest',
3933 29 => 'Backlight Silhouette',
3934 },
3935 },
3936 16 => {
3937 Name => 'AEMaxAperture',
3938 Notes => 'val = 2**((raw-68)/16)',
3939 ValueConv => 'exp(($val-68)*log(2)/16)',
3940 ValueConvInv => 'log($val)*16/log(2)+68',
3941 PrintConv => 'sprintf("%.1f",$val)',
3942 PrintConvInv => '$val',
3943 },
3944 17 => {
3945 Name => 'AEMaxAperture2',
3946 Notes => 'val = 2**((raw-68)/16)',
3947 ValueConv => 'exp(($val-68)*log(2)/16)',
3948 ValueConvInv => 'log($val)*16/log(2)+68',
3949 PrintConv => 'sprintf("%.1f",$val)',
3950 PrintConvInv => '$val',
3951 },
3952 18 => {
3953 Name => 'AEMinAperture',
3954 Notes => 'val = 2**((raw-68)/16)',
3955 ValueConv => 'exp(($val-68)*log(2)/16)',
3956 ValueConvInv => 'log($val)*16/log(2)+68',
3957 PrintConv => 'sprintf("%.0f",$val)',
3958 PrintConvInv => '$val',
3959 },
3960 19 => {
3961 Name => 'AEMinExposureTime',
3962 Notes => 'val = 24 * 2**((32-raw)/8)',
3963 ValueConv => '24*exp(-($val-32)*log(2)/8)',
3964 ValueConvInv => '-log($val/24)*8/log(2)+32',
3965 PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
3966 PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
3967 },
3968);
3969
3970# auto-exposure information for the K-30 (ref PH)
3971%Image::ExifTool::Pentax::AEInfo3 = (
3972 %binaryDataAttrs,
3973 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
3974 NOTES => 'Auto-exposure information for the K-3, K-30, K-50 and K-500.',
3975 # instead of /8, should these be PentaxEv(), as in CameraSettings? - PH
3976 16 => {
3977 Name => 'AEExposureTime',
3978 Notes => 'val = 24 * 2**((32-raw)/8)',
3979 ValueConv => '24*exp(-($val-32)*log(2)/8)',
3980 ValueConvInv => '-log($val/24)*8/log(2)+32',
3981 PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
3982 PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
3983 },
3984 17 => {
3985 Name => 'AEAperture',
3986 Notes => 'val = 2**((raw-68)/16)',
3987 ValueConv => 'exp(($val-68)*log(2)/16)',
3988 ValueConvInv => 'log($val)*16/log(2)+68',
3989 PrintConv => 'sprintf("%.1f",$val)',
3990 PrintConvInv => '$val',
3991 },
3992 18 => {
3993 Name => 'AE_ISO',
3994 Notes => 'val = 100 * 2**((raw-32)/8)',
3995 ValueConv => '100*exp(($val-32)*log(2)/8)',
3996 ValueConvInv => 'log($val/100)*8/log(2)+32',
3997 PrintConv => 'int($val + 0.5)',
3998 PrintConvInv => '$val',
3999 },
4000 28 => {
4001 Name => 'AEMaxAperture',
4002 Notes => 'val = 2**((raw-68)/16)',
4003 ValueConv => 'exp(($val-68)*log(2)/16)',
4004 ValueConvInv => 'log($val)*16/log(2)+68',
4005 PrintConv => 'sprintf("%.1f",$val)',
4006 PrintConvInv => '$val',
4007 },
4008 29 => {
4009 Name => 'AEMaxAperture2',
4010 Notes => 'val = 2**((raw-68)/16)',
4011 ValueConv => 'exp(($val-68)*log(2)/16)',
4012 ValueConvInv => 'log($val)*16/log(2)+68',
4013 PrintConv => 'sprintf("%.1f",$val)',
4014 PrintConvInv => '$val',
4015 },
4016 30 => {
4017 Name => 'AEMinAperture',
4018 Notes => 'val = 2**((raw-68)/16)',
4019 ValueConv => 'exp(($val-68)*log(2)/16)',
4020 ValueConvInv => 'log($val)*16/log(2)+68',
4021 PrintConv => 'sprintf("%.0f",$val)',
4022 PrintConvInv => '$val',
4023 },
4024 31 => {
4025 Name => 'AEMinExposureTime',
4026 Notes => 'val = 24 * 2**((32-raw)/8)',
4027 ValueConv => '24*exp(-($val-32)*log(2)/8)',
4028 ValueConvInv => '-log($val/24)*8/log(2)+32',
4029 PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
4030 PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
4031 },
4032);
4033
4034# unknown auto-exposure information (Q, Q10)
4035%Image::ExifTool::Pentax::AEInfoUnknown = (
4036 %binaryDataAttrs,
4037 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
4038);
4039
4040# lens type
4041%Image::ExifTool::Pentax::LensRec = (
4042 %binaryDataAttrs,
4043 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
4044 NOTES => q{
4045 This record stores the LensType, plus one or two unknown bytes for some
4046 models.
4047 },
4048 0 => {
4049 Name => 'LensType',
4050 Format => 'int8u[2]',
4051 Priority => 0,
4052 ValueConvInv => '$val=~s/\.\d+$//; $val',
4053 PrintConv => \%pentaxLensTypes,
4054 SeparateTable => 1,
4055 },
4056 3 => { #PH
4057 Name => 'ExtenderStatus',
4058 Notes => 'not valid if a non-AF lens is used',
4059 PrintConv => { 0 => 'Not attached', 1 => 'Attached' },
4060 },
4061 # this is a binaryData table because some cameras add an extra
4062 # byte or two here (typically zeros)...
4063);
4064
4065# lens information (ref PH)
4066%Image::ExifTool::Pentax::LensInfo = (
4067 %binaryDataAttrs,
4068 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
4069 IS_SUBDIR => [ 3 ],
4070 NOTES => 'Pentax lens information structure for models such as the *istD.',
4071 0 => {
4072 Name => 'LensType',
4073 Format => 'int8u[2]',
4074 Priority => 0,
4075 ValueConvInv => '$val=~s/\.\d+$//; $val',
4076 PrintConv => \%pentaxLensTypes,
4077 SeparateTable => 1,
4078 },
4079 3 => {
4080 Name => 'LensData',
4081 Format => 'undef[17]',
4082 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LensData' },
4083 },
4084);
4085
4086# lens information for newer models (ref PH)
4087%Image::ExifTool::Pentax::LensInfo2 = (
4088 %binaryDataAttrs,
4089 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
4090 IS_SUBDIR => [ 4 ],
4091 NOTES => 'Pentax lens information structure for models such as the K10D and K20D.',
4092 0 => {
4093 Name => 'LensType',
4094 Format => 'int8u[4]',
4095 Priority => 0,
4096 ValueConv => q{
4097 my @v = split(' ',$val);
4098 $v[0] &= 0x0f;
4099 $v[1] = $v[2] * 256 + $v[3]; # (always high byte first)
4100 return "$v[0] $v[1]";
4101 },
4102 # just fill in the missing bits/bytes with zeros...
4103 ValueConvInv => q{
4104 my @v = split(' ',$val);
4105 return undef unless @v == 2;
4106 $v[2] = ($v[1] >> 8) & 0xff;
4107 $v[3] = $v[1] & 0xff;
4108 $v[1] = 0;
4109 return "@v";
4110 },
4111 PrintConv => \%pentaxLensTypes,
4112 SeparateTable => 1,
4113 },
4114 4 => {
4115 Name => 'LensData',
4116 Format => 'undef[17]',
4117 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LensData' },
4118 },
4119);
4120
4121# lens information for 645D (ref PH)
4122%Image::ExifTool::Pentax::LensInfo3 = (
4123 %binaryDataAttrs,
4124 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
4125 IS_SUBDIR => [ 13 ],
4126 NOTES => 'Pentax lens information structure for 645D.',
4127 1 => {
4128 Name => 'LensType',
4129 Format => 'int8u[4]',
4130 Priority => 0,
4131 ValueConv => q{
4132 my @v = split(' ',$val);
4133 $v[0] &= 0x0f;
4134 $v[1] = $v[2] * 256 + $v[3]; # (always high byte first)
4135 return "$v[0] $v[1]";
4136 },
4137 # just fill in the missing bits/bytes with zeros...
4138 ValueConvInv => q{
4139 my @v = split(' ',$val);
4140 return undef unless @v == 2;
4141 $v[2] = ($v[1] >> 8) & 0xff;
4142 $v[3] = $v[1] & 0xff;
4143 $v[1] = 0;
4144 return "@v";
4145 },
4146 PrintConv => \%pentaxLensTypes,
4147 SeparateTable => 1,
4148 },
4149 13 => {
4150 Name => 'LensData',
4151 Format => 'undef[17]',
4152 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LensData' },
4153 },
4154);
4155
4156# lens information for K-5, K-r, etc (ref PH)
4157%Image::ExifTool::Pentax::LensInfo4 = (
4158 %binaryDataAttrs,
4159 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
4160 IS_SUBDIR => [ 12 ],
4161 NOTES => 'Pentax lens information structure for models such as the K-5 and K-r.',
4162 1 => {
4163 Name => 'LensType',
4164 Format => 'int8u[4]',
4165 Priority => 0,
4166 ValueConv => q{
4167 my @v = split(' ',$val);
4168 $v[0] &= 0x0f;
4169 $v[1] = $v[2] * 256 + $v[3]; # (always high byte first)
4170 return "$v[0] $v[1]";
4171 },
4172 # just fill in the missing bits/bytes with zeros...
4173 ValueConvInv => q{
4174 my @v = split(' ',$val);
4175 return undef unless @v == 2;
4176 $v[2] = ($v[1] >> 8) & 0xff;
4177 $v[3] = $v[1] & 0xff;
4178 $v[1] = 0;
4179 return "@v";
4180 },
4181 PrintConv => \%pentaxLensTypes,
4182 SeparateTable => 1,
4183 },
4184 12 => {
4185 Name => 'LensData',
4186 Format => 'undef[18]',
4187 Condition => '$$self{NewLensData} = 1', # not really a condition, just used to set flag
4188 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LensData' },
4189 },
4190);
4191
4192# lens information for K-01, K-30, K-50, K-500, K-3, K-3II, K-S1 (ref PH)
4193%Image::ExifTool::Pentax::LensInfo5 = (
4194 %binaryDataAttrs,
4195 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
4196 IS_SUBDIR => [ 15 ],
4197 NOTES => 'Pentax lens information structure for the K-01 and newer models.',
4198 1 => {
4199 Name => 'LensType',
4200 Format => 'int8u[5]',
4201 Priority => 0,
4202 ValueConv => q{
4203 my @v = split(' ',$val);
4204 $v[0] &= 0x0f;
4205 $v[1] = $v[3] * 256 + $v[4]; # (always high byte first)
4206 return "$v[0] $v[1]";
4207 },
4208 # just fill in the missing bits/bytes with zeros...
4209 ValueConvInv => q{
4210 my @v = split(' ',$val);
4211 return undef unless @v == 2;
4212 $v[3] = ($v[1] >> 8) & 0xff;
4213 $v[4] = $v[1] & 0xff;
4214 $v[1] = $v[2] = 0;
4215 return "@v";
4216 },
4217 PrintConv => \%pentaxLensTypes,
4218 SeparateTable => 1,
4219 },
4220 15 => {
4221 Name => 'LensData',
4222 Format => 'undef[17]',
4223 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LensData' },
4224 },
4225);
4226
4227# lens data information, including lens codes (ref PH)
4228%Image::ExifTool::Pentax::LensData = (
4229 %binaryDataAttrs,
4230 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
4231 DATAMEMBER => [ 12.1 ],
4232 NOTES => q{
4233 Pentax lens data information. Some of these tags require interesting binary
4234 gymnastics to decode them into useful values.
4235 },
4236 # this byte comes from the lens electrical contacts
4237 # (see http://kmp.bdimitrov.de/technology/K-mount/Ka.html)
4238 0.1 => { #JD
4239 Name => 'AutoAperture',
4240 Condition => 'not $$self{NewLensData}',
4241 Notes => 'not valid for the K-r, K-5 or K-5II', #29
4242 Mask => 0x01,
4243 PrintConv => { 0 => 'On', 1 => 'Off' },
4244 },
4245 0.2 => { #JD
4246 Name => 'MinAperture',
4247 Condition => 'not $$self{NewLensData}',
4248 Notes => 'not valid for the K-r, K-5 or K-5II', #29
4249 Mask => 0x06,
4250 PrintConv => {
4251 0 => 22,
4252 1 => 32,
4253 2 => 45,
4254 3 => 16,
4255 },
4256 },
4257 0.3 => { #JD
4258 Name => 'LensFStops',
4259 Condition => 'not $$self{NewLensData}',
4260 Notes => 'not valid for the K-r, K-5 or K-5II', #29
4261 Mask => 0x70,
4262 ValueConv => '5 + ($val ^ 0x07) / 2',
4263 ValueConvInv => '(($val - 5) * 2) ^ 0x07',
4264 },
4265 # 1-16 look like Lens Codes LC0-LC15, ref patent 5617173 and 5999753 [+notes by PH]
4266 1 => { # LC0 = lens kind + version data
4267 Name => 'LensKind',
4268 %lensCode,
4269 },
4270 2 => { # LC1 = lens data (changes with AF setting)
4271 Name => 'LC1',
4272 %lensCode,
4273 },
4274 # LC2 = distance data
4275 3 => { #29
4276 Name => 'MinFocusDistance',
4277 Notes => 'minimum focus distance for the lens',
4278 Mask => 0xf8,
4279 PrintConv => {
4280 0 => '0.13-0.19 m', # (plus K or M lenses)
4281 1 => '0.20-0.24 m',
4282 2 => '0.25-0.28 m',
4283 3 => '0.28-0.30 m',
4284 4 => '0.35-0.38 m',
4285 5 => '0.40-0.45 m',
4286 6 => '0.49-0.50 m', # (plus many Sigma lenses)
4287 7 => '0.6 m', #PH (NC)
4288 8 => '0.7 m', # (plus Sigma 55-200)
4289 9 => '0.8-0.9 m', #PH (NC) Tokina 28-70/2.6-2.8
4290 10 => '1.0 m', # (plus Sigma 70 macro)
4291 11 => '1.1-1.2 m',
4292 12 => '1.4-1.5 m',
4293 13 => '1.5 m', # Sigma 70-300/4-5.6 macro
4294 14 => '2.0 m',
4295 15 => '2.0-2.1 m', #PH (NC)
4296 16 => '2.1 m', # Sigma 135-400 APO & DG: 2.0-2.2m
4297 17 => '2.2-2.9 m', #PH (NC)
4298 18 => '3.0 m', # Sigma 50-500 : 1.0-3.0m depending on the focal length
4299 ## 50mm, 100mm => 1.0m
4300 ## 200mm => 1.1m
4301 ## 300mm => 1.5m
4302 ## 400mm => 2.2m
4303 ## 500mm => 3.0m
4304 19 => '4-5 m', #PH (NC)
4305 20 => '5.6 m', # Pentax DA 560
4306 # To check: Sigma 120-400 OS: MFD 1.5m
4307 # To check: Sigma 150-500 OS: MFD 2.2m
4308 # To check: Sigma 50-500 has MFD 50-180cm
4309 # 0xd0 - seen for the Sigma 4.5mm F2.8 EX DC HSM Circular Fisheye (ref PH)
4310 },
4311 },
4312 3.1 => { #29
4313 Name => 'FocusRangeIndex',
4314 Mask => 0x07,
4315 PrintConv => {
4316 7 => '0 (very close)',
4317 6 => '1 (close)',
4318 4 => '2',
4319 5 => '3',
4320 1 => '4',
4321 0 => '5',
4322 2 => '6 (far)',
4323 3 => '7 (very far)',
4324 },
4325 },
4326 4 => { # LC3 = K-value data (AF pulses to displace image by unit length)
4327 Name => 'LC3',
4328 %lensCode,
4329 },
4330 5 => { # LC4 = aberration correction, near distance data
4331 Name => 'LC4',
4332 %lensCode,
4333 },
4334 6 => { # LC5 = light color aberration correction data
4335 Name => 'LC5',
4336 %lensCode,
4337 },
4338 7 => { # LC6 = open aberration data
4339 Name => 'LC6',
4340 %lensCode,
4341 },
4342 8 => { # LC7 = AF minimum actuation condition
4343 Name => 'LC7',
4344 %lensCode,
4345 },
4346 9 => [{ # LC8 = focal length data
4347 Name => 'LensFocalLength',
4348 Notes => 'focal length of lens alone, without adapter', #PH
4349 Priority => 0,
4350 Condition => '$$self{Model} !~ /645Z/', #PH (doesn't work for 645Z)
4351 ValueConv => '10*($val>>2) * 4**(($val&0x03)-2)', #JD
4352 ValueConvInv => q{
4353 my $range = int(log($val/10)/(2*log(2)));
4354 warn("Value out of range") and return undef if $range < 0 or $range > 3;
4355 return $range + (int($val/(10*4**($range-2))+0.5) << 2);
4356 },
4357 PrintConv => 'sprintf("%.1f mm", $val)',
4358 PrintConvInv => '$val=~s/\s*mm//; $val',
4359 },{
4360 Name => 'LC8',
4361 %lensCode,
4362 }],
4363 # the following aperture values change with focal length
4364 10 => { # LC9 = nominal AVmin/AVmax data (open/closed aperture values)
4365 Name => 'NominalMaxAperture',
4366 Mask => 0xf0,
4367 ValueConv => '2**($val/4)', #JD
4368 ValueConvInv => '4*log($val)/log(2)',
4369 PrintConv => 'sprintf("%.1f", $val)',
4370 PrintConvInv => '$val',
4371 },
4372 10.1 => { # LC9 = nominal AVmin/AVmax data (open/closed aperture values)
4373 Name => 'NominalMinAperture',
4374 Mask => 0x0f,
4375 ValueConv => '2**(($val+10)/4)', #JD
4376 ValueConvInv => '4*log($val)/log(2) - 10',
4377 PrintConv => 'sprintf("%.0f", $val)',
4378 PrintConvInv => '$val',
4379 },
4380 11 => { # LC10 = mv'/nv' data (full-aperture metering error compensation/marginal lumination compensation)
4381 Name => 'LC10',
4382 %lensCode,
4383 },
4384 12 => { # LC11 = AVC 1/EXP data
4385 Name => 'LC11',
4386 %lensCode,
4387 },
4388 12.1 => {
4389 Name => 'NewLensDataHook',
4390 Hidden => 1,
4391 Hook => '$varSize += 1 if $$self{NewLensData}',
4392 RawConv => 'undef',
4393 },
4394 13 => { # LC12 = mv1 AVminsif data
4395 Name => 'LC12',
4396 Notes => "ID's 13-16 are offset by 1 for the K-r, K-5 and K-5II", #29
4397 %lensCode,
4398 },
4399 # 14 - related to live view for K-5 (normally 3, but 1 or 5 in LV mode)
4400 14.1 => { # LC13 = AVmin (open aperture value) [MaxAperture=(2**((AVmin-1)/32))]
4401 Name => 'MaxAperture',
4402 Condition => '$$self{Model} ne "K-5"',
4403 Notes => 'effective wide open aperture for current focal length',
4404 Mask => 0x7f, # (not sure what the high bit indicates)
4405 # (a value of 1 seems to indicate 'n/a')
4406 RawConv => '$val > 1 ? $val : undef',
4407 ValueConv => '2**(($val-1)/32)',
4408 ValueConvInv => '32*log($val)/log(2) + 1',
4409 PrintConv => 'sprintf("%.1f", $val)',
4410 PrintConvInv => '$val',
4411 },
4412 15 => { # LC14 = UNT_12 UNT_6 data
4413 Name => 'LC14',
4414 %lensCode,
4415 },
4416 16 => { # LC15 = incorporated flash suited END data
4417 Name => 'LC15',
4418 %lensCode,
4419 },
4420);
4421
4422# flash information (ref PH)
4423%Image::ExifTool::Pentax::FlashInfo = (
4424 %binaryDataAttrs,
4425 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
4426 NOTES => 'Flash information tags for the K10D, K20D and K200D.',
4427 0 => {
4428 Name => 'FlashStatus',
4429 PrintHex => 1,
4430 PrintConv => { #19
4431 0x00 => 'Off',
4432 0x01 => 'Off (1)', #PH (K-5)
4433 0x02 => 'External, Did not fire', # 0010
4434 0x06 => 'External, Fired', # 0110
4435 0x08 => 'Internal, Did not fire (0x08)',
4436 0x09 => 'Internal, Did not fire', # 1001
4437 0x0d => 'Internal, Fired', # 1101
4438 },
4439 },
4440 1 => {
4441 Name => 'InternalFlashMode',
4442 PrintHex => 1,
4443 PrintConv => {
4444 0x00 => 'n/a - Off-Auto-Aperture', #19
4445 0x86 => 'Fired, Wireless (Control)', #19
4446 0x95 => 'Fired, Wireless (Master)', #19
4447 0xc0 => 'Fired', # K10D
4448 0xc1 => 'Fired, Red-eye reduction', # *istDS2, K10D
4449 0xc2 => 'Fired, Auto', # K100D, K110D
4450 0xc3 => 'Fired, Auto, Red-eye reduction', #PH
4451 0xc6 => 'Fired, Wireless (Control), Fired normally not as control', #19 (Remote 3s)
4452 0xc8 => 'Fired, Slow-sync', # K10D
4453 0xc9 => 'Fired, Slow-sync, Red-eye reduction', # K10D
4454 0xca => 'Fired, Trailing-curtain Sync', # K10D
4455 0xf0 => 'Did not fire, Normal', #19
4456 0xf1 => 'Did not fire, Red-eye reduction', #19
4457 0xf2 => 'Did not fire, Auto', #19
4458 0xf3 => 'Did not fire, Auto, Red-eye reduction', #19
4459 0xf4 => 'Did not fire, (Unknown 0xf4)', #19
4460 0xf5 => 'Did not fire, Wireless (Master)', #19
4461 0xf6 => 'Did not fire, Wireless (Control)', #19
4462 0xf8 => 'Did not fire, Slow-sync', #19
4463 0xf9 => 'Did not fire, Slow-sync, Red-eye reduction', #19
4464 0xfa => 'Did not fire, Trailing-curtain Sync', #19
4465 },
4466 },
4467 2 => {
4468 Name => 'ExternalFlashMode',
4469 PrintHex => 1,
4470 PrintConv => { #19
4471 0x00 => 'n/a - Off-Auto-Aperture',
4472 0x3f => 'Off',
4473 0x40 => 'On, Auto',
4474 0xbf => 'On, Flash Problem', #JD
4475 0xc0 => 'On, Manual',
4476 0xc4 => 'On, P-TTL Auto',
4477 0xc5 => 'On, Contrast-control Sync', #JD
4478 0xc6 => 'On, High-speed Sync',
4479 0xcc => 'On, Wireless',
4480 0xcd => 'On, Wireless, High-speed Sync',
4481 0xf0 => 'Not Connected', #PH (K-5)
4482 },
4483 },
4484 3 => {
4485 Name => 'InternalFlashStrength',
4486 Notes => 'saved from the most recent flash picture, on a scale of about 0 to 100',
4487 },
4488 4 => 'TTL_DA_AUp',
4489 5 => 'TTL_DA_ADown',
4490 6 => 'TTL_DA_BUp',
4491 7 => 'TTL_DA_BDown',
4492 24.1 => { #19/17
4493 Name => 'ExternalFlashGuideNumber',
4494 Mask => 0x1f,
4495 Notes => 'val = 2**(raw/16 + 4), with a few exceptions',
4496 ValueConv => q{
4497 return 0 unless $val;
4498 $val = -3 if $val == 29; # -3 is stored as 0x1d
4499 return 2**($val/16 + 4);
4500 },
4501 ValueConvInv => q{
4502 return 0 unless $val;
4503 my $raw = int((log($val)/log(2)-4)*16+0.5);
4504 $raw = 29 if $raw < 0; # guide number of 14 gives -3 which is stored as 0x1d
4505 $raw = 31 if $raw > 31; # maximum value is 0x1f
4506 return $raw;
4507 },
4508 PrintConv => '$val ? int($val + 0.5) : "n/a"',
4509 PrintConvInv => '$val=~/^n/ ? 0 : $val',
4510 # observed values for various flash focal lengths/guide numbers:
4511 # AF-540FGZ (ref 19) AF-360FGZ (ref 17)
4512 # 6 => 20mm/21 29 => 20mm/14 (wide angle panel used)
4513 # 16 => 24mm/32 6 => 24mm/21
4514 # 18 => 28mm/35 7 => 28mm/22
4515 # 21 => 35mm/39 10 => 35mm/25
4516 # 24 => 50mm/45 14 => 50mm/30
4517 # 26 => 70mm/50 17 => 70mm/33
4518 # 28 => 85mm/54 19 => 85mm/36
4519 # (I have also seen a value of 31 when both flashes are used together
4520 # in a wired configuration, but I don't know exactly what this means - PH)
4521 },
4522 # 24 - have seen bit 0x80 set when 2 external wired flashes are used - PH
4523 # 24 - have seen bit 0x40 set when wireless high speed sync is used - ref 19
4524 25 => { #19
4525 Name => 'ExternalFlashExposureComp',
4526 PrintConv => {
4527 0 => 'n/a', # Off or Auto Modes
4528 144 => 'n/a (Manual Mode)', # Manual Flash Output
4529 164 => '-3.0',
4530 167 => '-2.5',
4531 168 => '-2.0',
4532 171 => '-1.5',
4533 172 => '-1.0',
4534 175 => '-0.5',
4535 176 => '0.0',
4536 179 => '0.5',
4537 180 => '1.0',
4538 },
4539 },
4540 26 => { #17
4541 Name => 'ExternalFlashBounce',
4542 Notes => 'saved from the most recent external flash picture', #19
4543 PrintConv => {
4544 0 => 'n/a',
4545 16 => 'Direct',
4546 48 => 'Bounce',
4547 },
4548 },
4549 # ? => 'ExternalFlashAOutput',
4550 # ? => 'ExternalFlashBOutput',
4551);
4552
4553%Image::ExifTool::Pentax::FlashInfoUnknown = (
4554 %binaryDataAttrs,
4555 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
4556 # 4 - changes with FEC for K-5 - PH
4557);
4558
4559# camera manufacture information (ref PH)
4560%Image::ExifTool::Pentax::CameraInfo = (
4561 %binaryDataAttrs,
4562 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
4563 FORMAT => 'int32u',
4564 0 => {
4565 Name => 'PentaxModelID',
4566 Priority => 0, # (Optio SVi uses incorrect Optio SV ID here)
4567 SeparateTable => 1,
4568 PrintHex => 1,
4569 PrintConv => \%pentaxModelID,
4570 },
4571 1 => {
4572 Name => 'ManufactureDate',
4573 Groups => { 2 => 'Time' },
4574 Notes => q{
4575 this value, and the values of the tags below, may change if the camera is
4576 serviced
4577 },
4578 ValueConv => q{
4579 $val =~ /^(\d{4})(\d{2})(\d{2})$/ and return "$1:$2:$3";
4580 # Optio A10 and A20 leave "200" off the year
4581 $val =~ /^(\d)(\d{2})(\d{2})$/ and return "200$1:$2:$3";
4582 return "Unknown ($val)";
4583 },
4584 ValueConvInv => '$val=~tr/0-9//dc; $val',
4585 },
4586 2 => {
4587 #(see http://www.pentaxforums.com/forums/pentax-dslr-discussion/25711-k10d-update-model-revision-8-1-yes-no-8.html)
4588 Name => 'ProductionCode', #(previously ModelRevision)
4589 Format => 'int32u[2]',
4590 Note => 'values of 8.x indicate that the camera has been serviced',
4591 ValueConv => '$val=~tr/ /./; $val',
4592 ValueConvInv => '$val=~tr/./ /; $val',
4593 PrintConv => '$val=~/^8\./ ? "$val (camera has been serviced)" : $val',
4594 PrintConvInv => '$val=~s/\s+.*//s; $val',
4595 },
4596 4 => 'InternalSerialNumber',
4597);
4598
4599# battery information (ref PH)
4600%Image::ExifTool::Pentax::BatteryInfo = (
4601 %binaryDataAttrs,
4602 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
4603# size of data:
4604# 4 (K-m,K2000=4xAA), 6 (*istD,K10D,K100D,K110D=2xCR-V3/4xAA),
4605# 7 (K20D=D-LI50, K200D=4xAA), 8 (645D=D-LI90), 10 (K-r pre-production?),
4606# 14 (K-7=D-LI90, K-r=D-LI109/4xAA, K-x=4xAA), 26 (K-5=D-LI90)
4607# battery grips available for:
4608# BG1 (*istD), BG2 (K10D/K20D), BG3 (K200D), BG4 (K-7,K-5)
4609# no grip available: K-x
4610 0.1 => { #19
4611 Name => 'PowerSource',
4612 Mask => 0x0f,
4613 # have seen the upper bit set (value of 0x82) for the
4614 # *istDS and K100D, but I'm not sure what this means - PH
4615 # I've also seen: 0x42 (K2000), 0xf2 (K-7,K-r,K-5), 0x12,0x22 (K-x) - PH
4616 PrintConv => {
4617 1 => 'Camera Battery', #PH (NC, GR III)
4618 2 => 'Body Battery',
4619 3 => 'Grip Battery',
4620 4 => 'External Power Supply', #PH
4621 },
4622 },
4623 1.1 => [
4624 {
4625 Name => 'BodyBatteryState',
4626 Condition => '$$self{Model} =~ /(\*ist|K100D|K200D|K10D|GX10|K20D|GX20|GX-1[LS]?)\b/',
4627 Notes => '*istD, K100D, K200D, K10D and K20D',
4628 Mask => 0xf0,
4629 PrintConv => { #19
4630 1 => 'Empty or Missing',
4631 2 => 'Almost Empty',
4632 3 => 'Running Low',
4633 4 => 'Full',
4634 },
4635 },{
4636 Name => 'BodyBatteryState',
4637 Condition => '$$self{Model} !~ /(K110D|K2000|K-m)\b/',
4638 Notes => 'other models except the K110D, K2000 and K-m',
4639 Mask => 0xf0,
4640 PrintConv => {
4641 1 => 'Empty or Missing',
4642 2 => 'Almost Empty',
4643 3 => 'Running Low',
4644 4 => 'Close to Full',
4645 5 => 'Full',
4646 },
4647 },{
4648 Name => 'BodyBatteryState',
4649 Notes => 'decoding unknown for other models',
4650 Mask => 0xf0,
4651 },
4652 ],
4653 1.2 => [
4654 {
4655 Name => 'GripBatteryState',
4656 Condition => '$$self{Model} =~ /(K10D|GX10|K20D|GX20)\b/',
4657 Notes => 'K10D and K20D',
4658 Mask => 0x0f,
4659 PrintConv => { #19
4660 1 => 'Empty or Missing',
4661 2 => 'Almost Empty',
4662 3 => 'Running Low',
4663 4 => 'Full',
4664 },
4665 },{
4666 Name => 'GripBatteryState',
4667 Notes => 'decoding unknown for other models',
4668 Unknown => 1, # (doesn't appear to be valid for the K-5)
4669 Mask => 0x0f,
4670 },
4671 ],
4672 # internal and grip battery voltage Analogue to Digital measurements,
4673 # open circuit and under load
4674 2 => [
4675 {
4676 Name => 'BodyBatteryADNoLoad',
4677 Description => 'Body Battery A/D No Load',
4678 Condition => '$$self{Model} =~ /(K10D|GX10|K20D|GX20)\b/',
4679 Notes => 'roughly calibrated for K10D with a new Pentax battery',
4680 # rough linear calibration drops quickly below 30% - PH
4681 # DVM readings: 8.18V=186, 8.42-8.40V=192 (full), 6.86V=155 (empty)
4682 PrintConv => 'sprintf("%d (%.1fV, %d%%)",$val,$val*8.18/186,($val-155)*100/35)',
4683 PrintConvInv => '$val=~s/ .*//; $val',
4684 },
4685 {
4686 Name => 'BodyBatteryADNoLoad',
4687 Description => 'Body Battery A/D No Load',
4688 Condition => '$$self{Model} =~ /(\*ist|K100D|K200D|GX-1[LS]?)\b/',
4689 },
4690 {
4691 Name => 'BodyBatteryVoltage1', # (static?)
4692 Condition => '$$self{Model} !~ /(K100D|K110D|K2000|K-m|Q\d*)\b/',
4693 Format => 'int16u',
4694 ValueConv => '$val / 100',
4695 ValueConvInv => '$val * 100',
4696 PrintConv => 'sprintf("%.2f V", $val)',
4697 PrintConvInv => '$val =~ s/\s*V$//',
4698 # For my K-5: Min (0%) Max (100%) At Meas
4699 # BodyBatteryVoltage1 6.24 V 7.75 V 7.66 V
4700 # BodyBatteryVoltage2 5.98 V 7.43 V 7.34 V
4701 # BodyBatteryVoltage3 6.41 V 7.93 V 7.84 V
4702 # BodyBatteryVoltage4 6.10 V 7.55 V 7.45 V
4703 # "Meas" open-circuit voltages with DVM: AB=0V, AC=+8.33V, BC=+8.22V
4704 # (terminal "C" is closest to edge of battery)
4705 },
4706 ],
4707 3 => [
4708 {
4709 Name => 'BodyBatteryADLoad',
4710 Description => 'Body Battery A/D Load',
4711 Condition => '$$self{Model} =~ /(K10D|GX10|K20D|GX20)\b/',
4712 Notes => 'roughly calibrated for K10D with a new Pentax battery',
4713 # [have seen 187] - PH
4714 PrintConv => 'sprintf("%d (%.1fV, %d%%)",$val,$val*8.18/186,($val-152)*100/34)',
4715 PrintConvInv => '$val=~s/ .*//; $val',
4716 },
4717 {
4718 Name => 'BodyBatteryADLoad',
4719 Description => 'Body Battery A/D Load',
4720 Condition => '$$self{Model} =~ /(\*ist|K100D|K200D)\b/',
4721 },
4722 ],
4723 4 => [
4724 {
4725 Name => 'GripBatteryADNoLoad',
4726 Description => 'Grip Battery A/D No Load',
4727 Condition => '$$self{Model} =~ /(\*ist|K10D|GX10|K20D|GX20|GX-1[LS]?)\b/',
4728 },
4729 {
4730 Name => 'BodyBatteryVoltage2', # (less than BodyBatteryVoltage1 -- under load?)
4731 Condition => '$$self{Model} !~ /(K100D|K110D|K2000|K-m|Q\d*)\b/',
4732 Format => 'int16u',
4733 ValueConv => '$val / 100',
4734 ValueConvInv => '$val * 100',
4735 PrintConv => 'sprintf("%.2f V", $val)',
4736 PrintConvInv => '$val =~ s/\s*V$//',
4737 },
4738 ],
4739 5 => {
4740 Name => 'GripBatteryADLoad',
4741 Condition => '$$self{Model} =~ /(\*ist|K10D|GX10|K20D|GX20)\b/',
4742 Description => 'Grip Battery A/D Load',
4743 },
4744 6 => {
4745 Name => 'BodyBatteryVoltage3', # (greater than BodyBatteryVoltage1)
4746 Condition => '$$self{Model} =~ /(K-5|K-r|645D)\b/',
4747 Format => 'int16u',
4748 Notes => 'K-5, K-r and 645D only',
4749 ValueConv => '$val / 100',
4750 ValueConvInv => '$val * 100',
4751 PrintConv => 'sprintf("%.2f V", $val)',
4752 PrintConvInv => '$val =~ s/\s*V$//',
4753 },
4754 8 => {
4755 Name => 'BodyBatteryVoltage4', # (between BodyBatteryVoltage1 and BodyBatteryVoltage2)
4756 Condition => '$$self{Model} =~ /(K-5|K-r)\b/',
4757 Format => 'int16u',
4758 Notes => 'K-5 and K-r only',
4759 ValueConv => '$val / 100',
4760 ValueConvInv => '$val * 100',
4761 PrintConv => 'sprintf("%.2f V", $val)',
4762 PrintConvInv => '$val =~ s/\s*V$//',
4763 },
4764);
4765
4766# auto focus information
4767%Image::ExifTool::Pentax::AFInfo = (
4768 %binaryDataAttrs,
4769 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
4770 # AF Info tag names in K10D debugging output - PH:
4771 # SelectArea, InFocusArea, Predictor, Defocus, IntegTime2msStep,
4772 # CalFlag, ContrastFlag, PrecalFlag, SelectSensor
4773 0x00 => { #PH
4774 Name => 'AFPointsUnknown1',
4775 Unknown => 1,
4776 Format => 'int16u',
4777 ValueConv => '$self->Options("Unknown") ? $val : $val & 0x7ff',
4778 ValueConvInv => '$val',
4779 PrintConvColumns => 2,
4780 PrintConv => {
4781 0 => '(none)',
4782 0x07ff => 'All',
4783 0x0777 => 'Central 9 points',
4784 BITMASK => {
4785 0 => 'Upper-left',
4786 1 => 'Top',
4787 2 => 'Upper-right',
4788 3 => 'Left',
4789 4 => 'Mid-left',
4790 5 => 'Center',
4791 6 => 'Mid-right',
4792 7 => 'Right',
4793 8 => 'Lower-left',
4794 9 => 'Bottom',
4795 10 => 'Lower-right',
4796 # (bits 12-15 are flags of some sort)
4797 },
4798 },
4799 },
4800 0x02 => { #PH
4801 Name => 'AFPointsUnknown2',
4802 Unknown => 1,
4803 Format => 'int16u',
4804 ValueConv => '$self->Options("Unknown") ? $val : $val & 0x7ff',
4805 ValueConvInv => '$val',
4806 PrintConvColumns => 2,
4807 PrintConv => {
4808 0 => 'Auto',
4809 BITMASK => {
4810 0 => 'Upper-left',
4811 1 => 'Top',
4812 2 => 'Upper-right',
4813 3 => 'Left',
4814 4 => 'Mid-left',
4815 5 => 'Center',
4816 6 => 'Mid-right',
4817 7 => 'Right',
4818 8 => 'Lower-left',
4819 9 => 'Bottom',
4820 10 => 'Lower-right',
4821 # (bits 12-15 are flags of some sort)
4822 # bit 15 is set for center focus point only if it is vertical
4823 },
4824 },
4825 },
4826 0x04 => { #PH (educated guess - predicted amount to drive lens)
4827 Name => 'AFPredictor',
4828 Format => 'int16s',
4829 },
4830 0x06 => 'AFDefocus', #PH (educated guess - calculated distance from focused)
4831 0x07 => { #PH
4832 # effective exposure time for AF sensors in 2 ms increments
4833 Name => 'AFIntegrationTime',
4834 Notes => 'times less than 2 ms give a value of 0',
4835 ValueConv => '$val * 2',
4836 ValueConvInv => 'int($val / 2)', # (don't round up)
4837 PrintConv => '"$val ms"',
4838 PrintConvInv => '$val=~tr/0-9//dc; $val',
4839 },
4840 # 0x0a - values: 00,05,0d,15,86,8e,a6,ae
4841 0x0b => { #JD
4842 Name => 'AFPointsInFocus',
4843 Condition => '$$self{Model} !~ /K-[13]\b/',
4844 Notes => q{
4845 models other than the K-1 and K-3. May report two points in focus even
4846 though a single AFPoint has been selected, in which case the selected
4847 AFPoint is the first reported
4848 },
4849 PrintConvColumns => 2,
4850 PrintConv => {
4851 0 => 'None',
4852 1 => 'Lower-left, Bottom',
4853 2 => 'Bottom',
4854 3 => 'Lower-right, Bottom',
4855 4 => 'Mid-left, Center',
4856 5 => 'Center (horizontal)', #PH
4857 6 => 'Mid-right, Center',
4858 7 => 'Upper-left, Top',
4859 8 => 'Top',
4860 9 => 'Upper-right, Top',
4861 10 => 'Right',
4862 11 => 'Lower-left, Mid-left',
4863 12 => 'Upper-left, Mid-left',
4864 13 => 'Bottom, Center',
4865 14 => 'Top, Center',
4866 15 => 'Lower-right, Mid-right',
4867 16 => 'Upper-right, Mid-right',
4868 17 => 'Left',
4869 18 => 'Mid-left',
4870 19 => 'Center (vertical)', #PH
4871 20 => 'Mid-right',
4872 },
4873 },
4874 0x1fd => {
4875 Name => 'AFHold',
4876 Notes => 'decoded only for the K-3 II',
4877 Condition => '$$self{Model} eq "PENTAX K-3 II"',
4878 PrintConv => { 0 => 'Off', 1 => 'Short', 2 => 'Medium', 3 => 'Long' },
4879 },
4880);
4881
4882# Kelvin white balance information (ref 28, topic 4834)
4883%Image::ExifTool::Pentax::KelvinWB = (
4884 %binaryDataAttrs,
4885 FORMAT => 'int16u',
4886 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
4887 NOTES => 'White balance Blue/Red gains as a function of color temperature.',
4888 1 => { Name => 'KelvinWB_Daylight', %kelvinWB },
4889 5 => { Name => 'KelvinWB_01', %kelvinWB },
4890 9 => { Name => 'KelvinWB_02', %kelvinWB },
4891 13 => { Name => 'KelvinWB_03', %kelvinWB },
4892 17 => { Name => 'KelvinWB_04', %kelvinWB },
4893 21 => { Name => 'KelvinWB_05', %kelvinWB },
4894 25 => { Name => 'KelvinWB_06', %kelvinWB },
4895 29 => { Name => 'KelvinWB_07', %kelvinWB },
4896 33 => { Name => 'KelvinWB_08', %kelvinWB },
4897 37 => { Name => 'KelvinWB_09', %kelvinWB },
4898 41 => { Name => 'KelvinWB_10', %kelvinWB },
4899 45 => { Name => 'KelvinWB_11', %kelvinWB },
4900 49 => { Name => 'KelvinWB_12', %kelvinWB },
4901 53 => { Name => 'KelvinWB_13', %kelvinWB },
4902 57 => { Name => 'KelvinWB_14', %kelvinWB },
4903 61 => { Name => 'KelvinWB_15', %kelvinWB },
4904 65 => { Name => 'KelvinWB_16', %kelvinWB },
4905);
4906
4907# color information - PH
4908%Image::ExifTool::Pentax::ColorInfo = (
4909 %binaryDataAttrs,
4910 GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
4911 FORMAT => 'int8s',
4912 16 => {
4913 Name => 'WBShiftAB',
4914 Notes => 'positive is a shift toward blue',
4915 },
4916 17 => {
4917 Name => 'WBShiftGM',
4918 Notes => 'positive is a shift toward green',
4919 },
4920);
4921
4922# EV step size information - ref 19
4923%Image::ExifTool::Pentax::EVStepInfo = (
4924 %binaryDataAttrs,
4925 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
4926 0 => {
4927 Name => 'EVSteps',
4928 PrintConv => {
4929 0 => '1/2 EV Steps',
4930 1 => '1/3 EV Steps',
4931 },
4932 },
4933 1 => {
4934 Name => 'SensitivitySteps',
4935 PrintConv => {
4936 0 => '1 EV Steps',
4937 1 => 'As EV Steps',
4938 },
4939 },
4940);
4941
4942# shot information? - ref PH (K-5)
4943%Image::ExifTool::Pentax::ShotInfo = (
4944 %binaryDataAttrs,
4945 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
4946 # 0: 0xf2/0xf3 (HDR), 0xf0 (otherwise)
4947 1 => { # (presumably this is from an orientation sensor)
4948 Name => 'CameraOrientation',
4949 Condition => '$$self{Model} =~ /K-(5|7|r|x)\b/',
4950 Notes => 'K-5, K-7, K-r and K-x',
4951 PrintHex => 1,
4952 PrintConv => {
4953 0x10 => 'Horizontal (normal)',
4954 0x20 => 'Rotate 180',
4955 0x30 => 'Rotate 90 CW',
4956 0x40 => 'Rotate 270 CW',
4957 0x50 => 'Upwards', # (to the sky)
4958 0x60 => 'Downwards', # (to the ground)
4959 },
4960 },
4961 # 2: 0xd3 (live view), 0xdb (HDR), 0x7b (otherwise)
4962 # 3: 0xff
4963 # 4: 0x64, 0x6a, 0x6f, 0xa4, 0xaa, 0xab, 0xbf
4964 # 5: 0xfe
4965 # 6: 0x0e
4966 # 7: 0x02 (live view), 0x06 (otherwise)
4967 # 8-10: 0x00
4968);
4969
4970# face detect positions - ref PH (Optio RZ10)
4971%Image::ExifTool::Pentax::FacePos = (
4972 %binaryDataAttrs,
4973 GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
4974 FORMAT => 'int16u',
4975 0 => {
4976 Name => 'Face1Position',
4977 Format => 'int16u[2]',
4978 RawConv => '$$self{FacesDetected} < 1 ? undef : $val',
4979 Notes => 'X/Y coordinates of face center in full-sized image',
4980 },
4981 2 => {
4982 Name => 'Face2Position',
4983 Format => 'int16u[2]',
4984 RawConv => '$$self{FacesDetected} < 2 ? undef : $val',
4985 },
4986 4 => {
4987 Name => 'Face3Position',
4988 Format => 'int16u[2]',
4989 RawConv => '$$self{FacesDetected} < 3 ? undef : $val',
4990 },
4991 6 => {
4992 Name => 'Face4Position',
4993 Format => 'int16u[2]',
4994 RawConv => '$$self{FacesDetected} < 4 ? undef : $val',
4995 },
4996 8 => {
4997 Name => 'Face5Position',
4998 Format => 'int16u[2]',
4999 RawConv => '$$self{FacesDetected} < 5 ? undef : $val',
5000 },
5001 10 => {
5002 Name => 'Face6Position',
5003 Format => 'int16u[2]',
5004 RawConv => '$$self{FacesDetected} < 6 ? undef : $val',
5005 },
5006 12 => {
5007 Name => 'Face7Position',
5008 Format => 'int16u[2]',
5009 RawConv => '$$self{FacesDetected} < 7 ? undef : $val',
5010 },
5011 14 => {
5012 Name => 'Face8Position',
5013 Format => 'int16u[2]',
5014 RawConv => '$$self{FacesDetected} < 8 ? undef : $val',
5015 },
5016 16 => {
5017 Name => 'Face9Position',
5018 Format => 'int16u[2]',
5019 RawConv => '$$self{FacesDetected} < 9 ? undef : $val',
5020 },
5021 18 => {
5022 Name => 'Face10Position',
5023 Format => 'int16u[2]',
5024 RawConv => '$$self{FacesDetected} < 10 ? undef : $val',
5025 },
5026 20 => {
5027 Name => 'Face11Position',
5028 Format => 'int16u[2]',
5029 RawConv => '$$self{FacesDetected} < 11 ? undef : $val',
5030 },
5031 22 => {
5032 Name => 'Face12Position',
5033 Format => 'int16u[2]',
5034 RawConv => '$$self{FacesDetected} < 12 ? undef : $val',
5035 },
5036 24 => {
5037 Name => 'Face13Position',
5038 Format => 'int16u[2]',
5039 RawConv => '$$self{FacesDetected} < 13 ? undef : $val',
5040 },
5041 26 => {
5042 Name => 'Face14Position',
5043 Format => 'int16u[2]',
5044 RawConv => '$$self{FacesDetected} < 14 ? undef : $val',
5045 },
5046 28 => {
5047 Name => 'Face15Position',
5048 Format => 'int16u[2]',
5049 RawConv => '$$self{FacesDetected} < 15 ? undef : $val',
5050 },
5051 30 => {
5052 Name => 'Face16Position',
5053 Format => 'int16u[2]',
5054 RawConv => '$$self{FacesDetected} < 16 ? undef : $val',
5055 },
5056 32 => {
5057 Name => 'Face17Position',
5058 Format => 'int16u[2]',
5059 RawConv => '$$self{FacesDetected} < 17 ? undef : $val',
5060 },
5061 34 => {
5062 Name => 'Face18Position',
5063 Format => 'int16u[2]',
5064 RawConv => '$$self{FacesDetected} < 18 ? undef : $val',
5065 },
5066 36 => {
5067 Name => 'Face19Position',
5068 Format => 'int16u[2]',
5069 RawConv => '$$self{FacesDetected} < 19 ? undef : $val',
5070 },
5071 38 => {
5072 Name => 'Face20Position',
5073 Format => 'int16u[2]',
5074 RawConv => '$$self{FacesDetected} < 20 ? undef : $val',
5075 },
5076 40 => {
5077 Name => 'Face21Position',
5078 Format => 'int16u[2]',
5079 RawConv => '$$self{FacesDetected} < 21 ? undef : $val',
5080 },
5081 42 => {
5082 Name => 'Face22Position',
5083 Format => 'int16u[2]',
5084 RawConv => '$$self{FacesDetected} < 22 ? undef : $val',
5085 },
5086 44 => {
5087 Name => 'Face23Position',
5088 Format => 'int16u[2]',
5089 RawConv => '$$self{FacesDetected} < 23 ? undef : $val',
5090 },
5091 46 => {
5092 Name => 'Face24Position',
5093 Format => 'int16u[2]',
5094 RawConv => '$$self{FacesDetected} < 24 ? undef : $val',
5095 },
5096 48 => {
5097 Name => 'Face25Position',
5098 Format => 'int16u[2]',
5099 RawConv => '$$self{FacesDetected} < 25 ? undef : $val',
5100 },
5101 50 => {
5102 Name => 'Face26Position',
5103 Format => 'int16u[2]',
5104 RawConv => '$$self{FacesDetected} < 26 ? undef : $val',
5105 },
5106 52 => {
5107 Name => 'Face27Position',
5108 Format => 'int16u[2]',
5109 RawConv => '$$self{FacesDetected} < 27 ? undef : $val',
5110 },
5111 54 => {
5112 Name => 'Face28Position',
5113 Format => 'int16u[2]',
5114 RawConv => '$$self{FacesDetected} < 28 ? undef : $val',
5115 },
5116 56 => {
5117 Name => 'Face29Position',
5118 Format => 'int16u[2]',
5119 RawConv => '$$self{FacesDetected} < 29 ? undef : $val',
5120 },
5121 58 => {
5122 Name => 'Face30Position',
5123 Format => 'int16u[2]',
5124 RawConv => '$$self{FacesDetected} < 30 ? undef : $val',
5125 },
5126 60 => {
5127 Name => 'Face31Position',
5128 Format => 'int16u[2]',
5129 RawConv => '$$self{FacesDetected} < 31 ? undef : $val',
5130 },
5131 62 => {
5132 Name => 'Face32Position',
5133 Format => 'int16u[2]',
5134 RawConv => '$$self{FacesDetected} < 32 ? undef : $val',
5135 },
5136);
5137
5138# face detect sizes - ref PH (Optio RZ10)
5139%Image::ExifTool::Pentax::FaceSize = (
5140 %binaryDataAttrs,
5141 GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
5142 FORMAT => 'int16u',
5143 0 => {
5144 Name => 'Face1Size',
5145 Format => 'int16u[2]',
5146 RawConv => '$$self{FacesDetected} < 1 ? undef : $val',
5147 },
5148 2 => {
5149 Name => 'Face2Size',
5150 Format => 'int16u[2]',
5151 RawConv => '$$self{FacesDetected} < 2 ? undef : $val',
5152 },
5153 4 => {
5154 Name => 'Face3Size',
5155 Format => 'int16u[2]',
5156 RawConv => '$$self{FacesDetected} < 3 ? undef : $val',
5157 },
5158 6 => {
5159 Name => 'Face4Size',
5160 Format => 'int16u[2]',
5161 RawConv => '$$self{FacesDetected} < 4 ? undef : $val',
5162 },
5163 8 => {
5164 Name => 'Face5Size',
5165 Format => 'int16u[2]',
5166 RawConv => '$$self{FacesDetected} < 5 ? undef : $val',
5167 },
5168 10 => {
5169 Name => 'Face6Size',
5170 Format => 'int16u[2]',
5171 RawConv => '$$self{FacesDetected} < 6 ? undef : $val',
5172 },
5173 12 => {
5174 Name => 'Face7Size',
5175 Format => 'int16u[2]',
5176 RawConv => '$$self{FacesDetected} < 7 ? undef : $val',
5177 },
5178 14 => {
5179 Name => 'Face8Size',
5180 Format => 'int16u[2]',
5181 RawConv => '$$self{FacesDetected} < 8 ? undef : $val',
5182 },
5183 16 => {
5184 Name => 'Face9Size',
5185 Format => 'int16u[2]',
5186 RawConv => '$$self{FacesDetected} < 9 ? undef : $val',
5187 },
5188 18 => {
5189 Name => 'Face10Size',
5190 Format => 'int16u[2]',
5191 RawConv => '$$self{FacesDetected} < 10 ? undef : $val',
5192 },
5193 20 => {
5194 Name => 'Face11Size',
5195 Format => 'int16u[2]',
5196 RawConv => '$$self{FacesDetected} < 11 ? undef : $val',
5197 },
5198 22 => {
5199 Name => 'Face12Size',
5200 Format => 'int16u[2]',
5201 RawConv => '$$self{FacesDetected} < 12 ? undef : $val',
5202 },
5203 24 => {
5204 Name => 'Face13Size',
5205 Format => 'int16u[2]',
5206 RawConv => '$$self{FacesDetected} < 13 ? undef : $val',
5207 },
5208 26 => {
5209 Name => 'Face14Size',
5210 Format => 'int16u[2]',
5211 RawConv => '$$self{FacesDetected} < 14 ? undef : $val',
5212 },
5213 28 => {
5214 Name => 'Face15Size',
5215 Format => 'int16u[2]',
5216 RawConv => '$$self{FacesDetected} < 15 ? undef : $val',
5217 },
5218 30 => {
5219 Name => 'Face16Size',
5220 Format => 'int16u[2]',
5221 RawConv => '$$self{FacesDetected} < 16 ? undef : $val',
5222 },
5223 32 => {
5224 Name => 'Face17Size',
5225 Format => 'int16u[2]',
5226 RawConv => '$$self{FacesDetected} < 17 ? undef : $val',
5227 },
5228 34 => {
5229 Name => 'Face18Size',
5230 Format => 'int16u[2]',
5231 RawConv => '$$self{FacesDetected} < 18 ? undef : $val',
5232 },
5233 36 => {
5234 Name => 'Face19Size',
5235 Format => 'int16u[2]',
5236 RawConv => '$$self{FacesDetected} < 19 ? undef : $val',
5237 },
5238 38 => {
5239 Name => 'Face20Size',
5240 Format => 'int16u[2]',
5241 RawConv => '$$self{FacesDetected} < 20 ? undef : $val',
5242 },
5243 40 => {
5244 Name => 'Face21Size',
5245 Format => 'int16u[2]',
5246 RawConv => '$$self{FacesDetected} < 21 ? undef : $val',
5247 },
5248 42 => {
5249 Name => 'Face22Size',
5250 Format => 'int16u[2]',
5251 RawConv => '$$self{FacesDetected} < 22 ? undef : $val',
5252 },
5253 44 => {
5254 Name => 'Face23Size',
5255 Format => 'int16u[2]',
5256 RawConv => '$$self{FacesDetected} < 23 ? undef : $val',
5257 },
5258 46 => {
5259 Name => 'Face24Size',
5260 Format => 'int16u[2]',
5261 RawConv => '$$self{FacesDetected} < 24 ? undef : $val',
5262 },
5263 48 => {
5264 Name => 'Face25Size',
5265 Format => 'int16u[2]',
5266 RawConv => '$$self{FacesDetected} < 25 ? undef : $val',
5267 },
5268 50 => {
5269 Name => 'Face26Size',
5270 Format => 'int16u[2]',
5271 RawConv => '$$self{FacesDetected} < 26 ? undef : $val',
5272 },
5273 52 => {
5274 Name => 'Face27Size',
5275 Format => 'int16u[2]',
5276 RawConv => '$$self{FacesDetected} < 27 ? undef : $val',
5277 },
5278 54 => {
5279 Name => 'Face28Size',
5280 Format => 'int16u[2]',
5281 RawConv => '$$self{FacesDetected} < 28 ? undef : $val',
5282 },
5283 56 => {
5284 Name => 'Face29Size',
5285 Format => 'int16u[2]',
5286 RawConv => '$$self{FacesDetected} < 29 ? undef : $val',
5287 },
5288 58 => {
5289 Name => 'Face30Size',
5290 Format => 'int16u[2]',
5291 RawConv => '$$self{FacesDetected} < 30 ? undef : $val',
5292 },
5293 60 => {
5294 Name => 'Face31Size',
5295 Format => 'int16u[2]',
5296 RawConv => '$$self{FacesDetected} < 31 ? undef : $val',
5297 },
5298 62 => {
5299 Name => 'Face32Size',
5300 Format => 'int16u[2]',
5301 RawConv => '$$self{FacesDetected} < 32 ? undef : $val',
5302 },
5303);
5304
5305# digital filter information - ref PH (K-5)
5306%Image::ExifTool::Pentax::FilterInfo = (
5307 %binaryDataAttrs,
5308 GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
5309 FORMAT => 'int8u',
5310 NOTES => q{
5311 The parameters associated with each type of digital filter are unique, and
5312 these settings are also extracted with the DigitalFilter tag. Information
5313 is not extracted for filters that are "Off" unless the L<Unknown|../ExifTool.html#Unknown> option is
5314 used.
5315 },
5316 0 => {
5317 Name => 'SourceDirectoryIndex',
5318 Format => 'int16u',
5319 },
5320 2 => {
5321 Name => 'SourceFileIndex',
5322 Format => 'int16u',
5323 },
5324 0x005 => { Name => 'DigitalFilter01', %digitalFilter },
5325 0x016 => { Name => 'DigitalFilter02', %digitalFilter },
5326 0x027 => { Name => 'DigitalFilter03', %digitalFilter },
5327 0x038 => { Name => 'DigitalFilter04', %digitalFilter },
5328 0x049 => { Name => 'DigitalFilter05', %digitalFilter },
5329 0x05a => { Name => 'DigitalFilter06', %digitalFilter },
5330 0x06b => { Name => 'DigitalFilter07', %digitalFilter },
5331 0x07c => { Name => 'DigitalFilter08', %digitalFilter },
5332 0x08d => { Name => 'DigitalFilter09', %digitalFilter },
5333 0x09e => { Name => 'DigitalFilter10', %digitalFilter },
5334 0x0af => { Name => 'DigitalFilter11', %digitalFilter },
5335 0x0c0 => { Name => 'DigitalFilter12', %digitalFilter },
5336 0x0d1 => { Name => 'DigitalFilter13', %digitalFilter },
5337 0x0e2 => { Name => 'DigitalFilter14', %digitalFilter },
5338 0x0f3 => { Name => 'DigitalFilter15', %digitalFilter },
5339 0x104 => { Name => 'DigitalFilter16', %digitalFilter },
5340 0x115 => { Name => 'DigitalFilter17', %digitalFilter },
5341 0x126 => { Name => 'DigitalFilter18', %digitalFilter },
5342 0x137 => { Name => 'DigitalFilter19', %digitalFilter },
5343 0x148 => { Name => 'DigitalFilter20', %digitalFilter },
5344);
5345
5346# electronic level information - ref PH (K-5)
5347%Image::ExifTool::Pentax::LevelInfo = (
5348 %binaryDataAttrs,
5349 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
5350 FORMAT => 'int8s',
5351 NOTES => q{
5352 Tags decoded from the electronic level information for the K-5. May not be
5353 valid for other models.
5354 },
5355 0 => {
5356 Name => 'LevelOrientation',
5357 Mask => 0x0f,
5358 PrintHex => 0,
5359 PrintConv => {
5360 0 => 'n/a', #PH (NC, GR III)
5361 1 => 'Horizontal (normal)',
5362 2 => 'Rotate 180',
5363 3 => 'Rotate 90 CW',
5364 4 => 'Rotate 270 CW',
5365 9 => 'Horizontal; Off Level',
5366 10 => 'Rotate 180; Off Level',
5367 11 => 'Rotate 90 CW; Off Level',
5368 12 => 'Rotate 270 CW; Off Level',
5369 13 => 'Upwards',
5370 14 => 'Downwards',
5371 },
5372 },
5373 0.1 => {
5374 Name => 'CompositionAdjust',
5375 Mask => 0xf0,
5376 PrintConv => {
5377 0 => 'Off',
5378 2 => 'Composition Adjust',
5379 10 => 'Composition Adjust + Horizon Correction',
5380 12 => 'Horizon Correction',
5381 },
5382 },
5383 1 => {
5384 Name => 'RollAngle',
5385 Notes => 'converted to degrees of clockwise camera rotation',
5386 ValueConv => '-$val / 2',
5387 ValueConvInv => '-$val * 2',
5388 },
5389 2 => {
5390 Name => 'PitchAngle',
5391 Notes => 'converted to degrees of upward camera tilt',
5392 ValueConv => '-$val / 2',
5393 ValueConvInv => '-$val * 2',
5394 },
5395 # 3,4 - related somehow to horizon correction and composition adjust
5396 # 5,6,7 - (the notes below refer to how the image moves in the LCD monitor)
5397 5 => {
5398 Name => 'CompositionAdjustX',
5399 Notes => 'steps to the right, 1/16 mm per step',
5400 ValueConv => '-$val',
5401 ValueConvInv => '-$val',
5402 },
5403 6 => {
5404 Name => 'CompositionAdjustY',
5405 Notes => 'steps up, 1/16 mm per step',
5406 ValueConv => '-$val',
5407 ValueConvInv => '-$val',
5408 },
5409 7 => {
5410 Name => 'CompositionAdjustRotation',
5411 Notes => 'steps clockwise, 1/8 degree per step',
5412 ValueConv => '-$val / 2',
5413 ValueConvInv => '-$val * 2',
5414 },
5415);
5416
5417# white balance RGGB levels (ref 28)
5418%Image::ExifTool::Pentax::WBLevels = (
5419 %binaryDataAttrs,
5420 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
5421 # 0 - 11 (number of entries in this table)
5422 # 1 - 0
5423 2 => {
5424 Name => 'WB_RGGBLevelsDaylight',
5425 Format => 'int16u[4]',
5426 },
5427 # 10 - 1
5428 11 => {
5429 Name => 'WB_RGGBLevelsShade',
5430 Format => 'int16u[4]',
5431 },
5432 # 19 - 2
5433 20 => {
5434 Name => 'WB_RGGBLevelsCloudy',
5435 Format => 'int16u[4]',
5436 },
5437 # 28 - 3
5438 29 => {
5439 Name => 'WB_RGGBLevelsTungsten',
5440 Format => 'int16u[4]',
5441 },
5442 # 37 - 4
5443 38 => {
5444 Name => 'WB_RGGBLevelsFluorescentD',
5445 Format => 'int16u[4]',
5446 },
5447 # 46 - 5
5448 47 => {
5449 Name => 'WB_RGGBLevelsFluorescentN',
5450 Format => 'int16u[4]',
5451 },
5452 # 55 - 6
5453 56 => {
5454 Name => 'WB_RGGBLevelsFluorescentW',
5455 Format => 'int16u[4]',
5456 },
5457 # 64 - 7
5458 65 => {
5459 Name => 'WB_RGGBLevelsFlash',
5460 Format => 'int16u[4]',
5461 },
5462 # 73 - 8
5463 74 => {
5464 Name => 'WB_RGGBLevelsFluorescentL',
5465 Format => 'int16u[4]',
5466 },
5467 # 82 - 0xfe
5468 83 => {
5469 Name => 'WB_RGGBLevelsUnknown',
5470 Format => 'int16u[4]',
5471 Unknown => 1,
5472 },
5473 # 91 - 0xff
5474 92 => {
5475 Name => 'WB_RGGBLevelsUserSelected',
5476 Format => 'int16u[4]',
5477 },
5478);
5479
5480# lens information for Penax Q (ref PH)
5481# (306 bytes long, I wonder if this contains vignetting information too?)
5482%Image::ExifTool::Pentax::LensInfoQ = (
5483 %binaryDataAttrs,
5484 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
5485 NOTES => 'More lens information stored by the Pentax Q.',
5486 0x0c => {
5487 Name => 'LensModel',
5488 Format => 'string[30]',
5489 },
5490 0x2a => {
5491 Name => 'LensInfo',
5492 Format => 'string[20]',
5493 ValueConv => '$val=~s/mm/mm /; $val',
5494 ValueConvInv => '$val=~tr/ //d; $val',
5495 }
5496);
5497
5498# Pixel shift information for the K-3II (ref PH)
5499%Image::ExifTool::Pentax::PixelShiftInfo = (
5500 %binaryDataAttrs,
5501 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
5502 NOTES => 'Pixel shift information stored by the K-3 II.',
5503 0x00 => {
5504 Name => 'PixelShiftResolution',
5505 PrintConv => { 0 => 'Off', 1 => 'On' },
5506 },
5507);
5508
5509# AF point information for the K-1 (ref 29)
5510%Image::ExifTool::Pentax::AFPointInfo = (
5511 %binaryDataAttrs,
5512 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
5513 NOTES => 'AF point information written by the K-1.',
5514 # 0 - int16u: 1 (version?)
5515 2 => {
5516 Name => 'NumAFPoints',
5517 Format => 'int16u',
5518 },
5519 4 => {
5520 Name => 'AFPointsInFocus',
5521 Condition => '$$self{Model} =~ /K-1\b/',
5522 Format => 'int8u[9]',
5523 PrintConv => 'Image::ExifTool::Pentax::DecodeAFPoints($val,33,2,0x02)',
5524 },
5525 4.1 => {
5526 Name => 'AFPointsSelected',
5527 Condition => '$$self{Model} =~ /K-1\b/',
5528 Format => 'int8u[9]',
5529 PrintConv => 'Image::ExifTool::Pentax::DecodeAFPoints($val,33,2,0x03)',
5530 },
5531 4.2 => {
5532 Name => 'AFPointsSpecial',
5533 Condition => '$$self{Model} =~ /K-1\b/',
5534 Format => 'int8u[9]',
5535 PrintConv => 'Image::ExifTool::Pentax::DecodeAFPoints($val,33,2,0x03,0x03)',
5536 },
5537);
5538
5539# temperature information for some models - PH
5540%Image::ExifTool::Pentax::TempInfo = (
5541 %binaryDataAttrs,
5542 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
5543 NOTES => q{
5544 A number of additional temperature readings are extracted from this 256-byte
5545 binary-data block in images from models such as the K-01, K-3, K-5, K-50 and
5546 K-500. It is currently not known where the corresponding temperature
5547 sensors are located in the camera.
5548 },
5549 # (it would be nice to know where these temperature sensors are located,
5550 # but since according to the manual the Slow Shutter Speed NR Auto mode
5551 # is based on "internal temperature", my guess is that there must be
5552 # at least one on the sensor itself. These temperatures seem to rise
5553 # more quickly than CameraTemperature when shooting video.)
5554 0x0c => {
5555 Name => 'SensorTemperature', #forum6677 (was CameraTemperature2)
5556 Format => 'int16s',
5557 ValueConv => '$val / 10',
5558 ValueConvInv => '$val * 10',
5559 PrintConv => 'sprintf("%.1f C", $val)',
5560 PrintConvInv => '$val=~s/ ?c$//i; $val',
5561 },
5562 0x0e => {
5563 Name => 'SensorTemperature2', #forum6677 (was CameraTemperature3)
5564 Format => 'int16s',
5565 ValueConv => '$val / 10',
5566 ValueConvInv => '$val * 10',
5567 PrintConv => 'sprintf("%.1f C", $val)',
5568 PrintConvInv => '$val=~s/ ?c$//i; $val',
5569 },
5570 0x14 => {
5571 Name => 'CameraTemperature4',
5572 Condition => '$$self{Model} =~ /K-5\b/',
5573 Format => 'int16s',
5574 PrintConv => '"$val C"',
5575 PrintConvInv => '$val=~s/ ?c$//i; $val',
5576 },
5577 0x16 => { # usually the same as CameraTemperature4, but not always
5578 Name => 'CameraTemperature5',
5579 Condition => '$$self{Model} =~ /K-5\b/',
5580 Format => 'int16s',
5581 PrintConv => '"$val C"',
5582 PrintConvInv => '$val=~s/ ?c$//i; $val',
5583 },
5584 # 0x18,0x1a,0x1c,0x1e = int16u[4] BlackPoint - PH
5585);
5586
5587# currently unknown info
5588%Image::ExifTool::Pentax::UnknownInfo = (
5589 %binaryDataAttrs,
5590 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
5591 # K10D: first 8 bytes seem to be short integers which change with ISO (value
5592 # is usually close to ISO/100) possibly smoothing or gain parameters? - PH
5593 # byte 0-1 - Higher for high color temperatures (red boost or red noise suppression?)
5594 # byte 6-7 - Higher for low color temperatures (blue boost or blue noise suppression?)
5595 # also changing are bytes 10,11,14,15
5596);
5597
5598# Pentax type 2 (Casio-like) maker notes (ref 1)
5599%Image::ExifTool::Pentax::Type2 = (
5600 WRITE_PROC => \&Image::ExifTool::Exif::WriteExif,
5601 CHECK_PROC => \&Image::ExifTool::Exif::CheckExif,
5602 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
5603 WRITABLE => 'int16u',
5604 NOTES => q{
5605 These tags are used by the Pentax Optio 330 and 430, and are similar to the
5606 tags used by Casio.
5607 },
5608 0x0001 => {
5609 Name => 'RecordingMode',
5610 PrintConv => {
5611 0 => 'Auto',
5612 1 => 'Night Scene',
5613 2 => 'Manual',
5614 },
5615 },
5616 0x0002 => {
5617 Name => 'Quality',
5618 PrintConv => {
5619 0 => 'Good',
5620 1 => 'Better',
5621 2 => 'Best',
5622 },
5623 },
5624 0x0003 => {
5625 Name => 'FocusMode',
5626 PrintConv => {
5627 2 => 'Custom',
5628 3 => 'Auto',
5629 },
5630 },
5631 0x0004 => {
5632 Name => 'FlashMode',
5633 PrintConv => {
5634 1 => 'Auto',
5635 2 => 'On',
5636 4 => 'Off',
5637 6 => 'Red-eye reduction',
5638 },
5639 },
5640 # Casio 0x0005 is FlashIntensity
5641 # Casio 0x0006 is ObjectDistance
5642 0x0007 => {
5643 Name => 'WhiteBalance',
5644 PrintConv => {
5645 0 => 'Auto',
5646 1 => 'Daylight',
5647 2 => 'Shade',
5648 3 => 'Tungsten',
5649 4 => 'Fluorescent',
5650 5 => 'Manual',
5651 },
5652 },
5653 0x000a => {
5654 Name => 'DigitalZoom',
5655 Writable => 'int32u',
5656 },
5657 0x000b => {
5658 Name => 'Sharpness',
5659 PrintConv => {
5660 0 => 'Normal',
5661 1 => 'Soft',
5662 2 => 'Hard',
5663 },
5664 },
5665 0x000c => {
5666 Name => 'Contrast',
5667 PrintConv => {
5668 0 => 'Normal',
5669 1 => 'Low',
5670 2 => 'High',
5671 },
5672 },
5673 0x000d => {
5674 Name => 'Saturation',
5675 PrintConv => {
5676 0 => 'Normal',
5677 1 => 'Low',
5678 2 => 'High',
5679 },
5680 },
5681 0x0014 => {
5682 Name => 'ISO',
5683 Priority => 0,
5684 PrintConv => {
5685 10 => 100,
5686 16 => 200,
5687 50 => 50, #PH
5688 100 => 100, #PH
5689 200 => 200, #PH
5690 400 => 400, #PH
5691 800 => 800, #PH
5692 1600 => 1600, #PH
5693 3200 => 3200, #PH
5694 65534 => 'Auto 2', #PH (Q-S1 MOV) [how is this different from 65535?]
5695 65535 => 'Auto', #PH (K-S1 MOV)
5696 },
5697 },
5698 0x0017 => {
5699 Name => 'ColorFilter',
5700 PrintConv => {
5701 1 => 'Full',
5702 2 => 'Black & White',
5703 3 => 'Sepia',
5704 },
5705 },
5706 # Casio 0x0018 is AFPoint
5707 # Casio 0x0019 is FlashIntensity
5708 0x0e00 => {
5709 Name => 'PrintIM',
5710 Description => 'Print Image Matching',
5711 Writable => 0,
5712 SubDirectory => {
5713 TagTable => 'Image::ExifTool::PrintIM::Main',
5714 },
5715 },
5716 0x1000 => {
5717 Name => 'HometownCityCode',
5718 Writable => 'undef',
5719 Count => 4,
5720 },
5721 0x1001 => { #PH
5722 Name => 'DestinationCityCode',
5723 Writable => 'undef',
5724 Count => 4,
5725 },
5726);
5727
5728# ASCII-based maker notes of Optio E20 and E25 - PH
5729%Image::ExifTool::Pentax::Type4 = (
5730 PROCESS_PROC => \&Image::ExifTool::HP::ProcessHP,
5731 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
5732 NOTES => q{
5733 The following few tags are extracted from the wealth of information
5734 available in maker notes of the Optio E20 and E25. These maker notes are
5735 stored as ASCII text in a format very similar to some HP models.
5736 },
5737 'F/W Version' => 'FirmwareVersion',
5738);
5739
5740# tags in Pentax QuickTime videos (PH - tests with Optio WP)
5741# (similar information in Kodak,Minolta,Nikon,Olympus,Pentax and Sanyo videos)
5742%Image::ExifTool::Pentax::MOV = (
5743 PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
5744 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
5745 FIRST_ENTRY => 0,
5746 NOTES => 'This information is found in MOV videos from cameras such as the Optio WP.',
5747 0x00 => {
5748 Name => 'Make',
5749 Format => 'string[24]',
5750 },
5751 # (01 00 at offset 0x20)
5752 0x26 => {
5753 Name => 'ExposureTime',
5754 Format => 'int32u',
5755 ValueConv => '$val ? 10 / $val : 0',
5756 PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
5757 },
5758 0x2a => {
5759 Name => 'FNumber',
5760 Format => 'rational64u',
5761 PrintConv => 'sprintf("%.1f",$val)',
5762 },
5763 0x32 => {
5764 Name => 'ExposureCompensation',
5765 Format => 'rational64s',
5766 PrintConv => '$val ? sprintf("%+.1f", $val) : 0',
5767 },
5768 0x44 => {
5769 Name => 'WhiteBalance',
5770 Format => 'int16u',
5771 PrintConv => {
5772 0 => 'Auto',
5773 1 => 'Daylight',
5774 2 => 'Shade',
5775 3 => 'Fluorescent', #2
5776 4 => 'Tungsten',
5777 5 => 'Manual',
5778 },
5779 },
5780 0x48 => {
5781 Name => 'FocalLength',
5782 Format => 'rational64u',
5783 PrintConv => 'sprintf("%.1f mm",$val)',
5784 },
5785 0xaf => {
5786 Name => 'ISO',
5787 Format => 'int16u',
5788 },
5789);
5790
5791# Pentax metadata in AVI videos (PH)
5792%Image::ExifTool::Pentax::AVI = (
5793 NOTES => 'Pentax-specific RIFF tags found in AVI videos.',
5794 GROUPS => { 0 => 'MakerNotes', 2 => 'Video' },
5795 hymn => {
5796 Name => 'MakerNotes',
5797 SubDirectory => {
5798 TagTable => 'Image::ExifTool::Pentax::Main',
5799 Start => 10,
5800 Base => '$start',
5801 ByteOrder => 'Unknown', # K-70 is little-endian, K-x is big-endian
5802 },
5803 },
5804 mknt => { # (Q-S1)
5805 Name => 'MakerNotes',
5806 SubDirectory => {
5807 TagTable => 'Image::ExifTool::Pentax::Main',
5808 Start => 10,
5809 Base => '$start',
5810 ByteOrder => 'Unknown',
5811 },
5812 },
5813);
5814
5815# Pentax metadata in S1 AVI maker notes (PH)
5816%Image::ExifTool::Pentax::S1 = (
5817 NOTES => 'Tags extracted from the maker notes of AVI videos from the Optio S1.',
5818 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
5819 0x0000 => { #5
5820 Name => 'MakerNoteVersion',
5821 Writable => 'undef',
5822 Count => 4,
5823 },
5824);
5825
5826# Pentax metadata in AVI videos from the RS1000 (PH)
5827%Image::ExifTool::Pentax::Junk = (
5828 NOTES => 'Tags found in the JUNK chunk of AVI videos from the RS1000.',
5829 PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
5830 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
5831 0x0c => {
5832 Name => 'Model',
5833 Description => 'Camera Model Name',
5834 Format => 'string[32]',
5835 },
5836);
5837
5838# PreviewImage information found in PXTH atom of K-01 MOV videos
5839%Image::ExifTool::Pentax::PXTH = (
5840 NOTES => 'Tags found in the PXTH atom of MOV videos from the K-01.',
5841 PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
5842 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
5843 0x00 => {
5844 Name => 'PreviewImageLength',
5845 Format => 'int32u',
5846 },
5847 0x04 => {
5848 Name => 'PreviewImage',
5849 Groups => { 2 => 'Preview' },
5850 Format => 'undef[$val{0}]',
5851 Notes => '640-pixel-wide JPEG preview', # (360 pixels high, may depend on aspect ratio)
5852 RawConv => '$self->ValidateImage(\$val,$tag)',
5853 },
5854);
5855
5856# information in PENT atom of MOV videos from the Optio WG-2 GPS
5857%Image::ExifTool::Pentax::PENT = (
5858 NOTES => 'Tags found in the PENT atom of MOV videos from the Optio WG-2 GPS.',
5859 PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
5860 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
5861 0 => {
5862 Name => 'Make',
5863 Format => 'string[24]',
5864 },
5865 0x1a => {
5866 Name => 'Model',
5867 Description => 'Camera Model Name',
5868 Format => 'string[24]',
5869 },
5870 0x38 => { #(NC)
5871 Name => 'ExposureTime',
5872 Format => 'int32u',
5873 ValueConv => '$val ? 10 / $val : 0',
5874 PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
5875 },
5876 0x3c => {
5877 Name => 'FNumber',
5878 Format => 'rational64u',
5879 PrintConv => 'sprintf("%.1f",$val)',
5880 },
5881 0x44 => { #(NC)
5882 Name => 'ExposureCompensation',
5883 Format => 'rational64s',
5884 PrintConv => '$val ? sprintf("%+.1f", $val) : 0',
5885 },
5886 0x54 => { #(NC)
5887 Name => 'FocalLength',
5888 Format => 'int32u',
5889 PrintConv => '"$val mm"',
5890 },
5891 0x71 => {
5892 Name => 'DateTime1',
5893 Format => 'string[24]',
5894 Groups => { 2 => 'Time' },
5895 },
5896 0x8b => {
5897 Name => 'DateTime2',
5898 Format => 'string[24]',
5899 Groups => { 2 => 'Time' },
5900 },
5901 0xa7 => { #(NC)
5902 Name => 'ISO',
5903 Format => 'int32u',
5904 },
5905 0xc7 => {
5906 Name => 'GPSVersionID',
5907 Format => 'undef[8]',
5908 Groups => { 1 => 'GPS', 2 => 'Location' },
5909 DataMember => 'GPSVersionID',
5910 RawConv => '$$self{GPSVersionID} = ($val=~s/GPS_// ? join(" ",unpack("C*",$val)) : undef)',
5911 PrintConv => '$val =~ tr/ /./; $val',
5912 },
5913 0xcf => {
5914 Name => 'GPSLatitudeRef',
5915 Condition => '$$self{GPSVersionID}',
5916 Format => 'string[2]',
5917 Groups => { 1 => 'GPS', 2 => 'Location' },
5918 PrintConv => {
5919 N => 'North',
5920 S => 'South',
5921 },
5922 },
5923 0xd1 => {
5924 Name => 'GPSLatitude',
5925 Condition => '$$self{GPSVersionID}',
5926 Format => 'rational64u[3]',
5927 Groups => { 1 => 'GPS', 2 => 'Location' },
5928 ValueConv => 'Image::ExifTool::GPS::ToDegrees($val)',
5929 PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1)',
5930 },
5931 0xe9 => {
5932 Name => 'GPSLongitudeRef',
5933 Condition => '$$self{GPSVersionID}',
5934 Format => 'string[2]',
5935 Groups => { 1 => 'GPS', 2 => 'Location' },
5936 PrintConv => {
5937 E => 'East',
5938 W => 'West',
5939 },
5940 },
5941 0xeb => {
5942 Name => 'GPSLongitude',
5943 Condition => '$$self{GPSVersionID}',
5944 Format => 'rational64u[3]',
5945 Groups => { 1 => 'GPS', 2 => 'Location' },
5946 ValueConv => 'Image::ExifTool::GPS::ToDegrees($val)',
5947 PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1)',
5948 },
5949 0x103 => {
5950 Name => 'GPSAltitudeRef',
5951 Condition => '$$self{GPSVersionID}',
5952 Format => 'int8u',
5953 Groups => { 1 => 'GPS', 2 => 'Location' },
5954 PrintConv => {
5955 0 => 'Above Sea Level',
5956 1 => 'Below Sea Level',
5957 },
5958 },
5959 0x104 => {
5960 Name => 'GPSAltitude',
5961 Condition => '$$self{GPSVersionID}',
5962 Format => 'rational64u',
5963 Groups => { 1 => 'GPS', 2 => 'Location' },
5964 PrintConv => '$val =~ /^(inf|undef)$/ ? $val : "$val m"',
5965 },
5966 0x11c => {
5967 Name => 'GPSTimeStamp',
5968 Condition => '$$self{GPSVersionID}',
5969 Groups => { 1 => 'GPS', 2 => 'Time' },
5970 Format => 'rational64u[3]',
5971 ValueConv => 'Image::ExifTool::GPS::ConvertTimeStamp($val)',
5972 PrintConv => 'Image::ExifTool::GPS::PrintTimeStamp($val)',
5973 },
5974 0x134 => {
5975 Name => 'GPSSatellites',
5976 Condition => '$$self{GPSVersionID}',
5977 Format => 'string[3]',
5978 Groups => { 1 => 'GPS', 2 => 'Location' },
5979 },
5980 0x137 => {
5981 Name => 'GPSStatus',
5982 Condition => '$$self{GPSVersionID}',
5983 Format => 'string[2]',
5984 Groups => { 1 => 'GPS', 2 => 'Location' },
5985 PrintConv => {
5986 A => 'Measurement Active',
5987 V => 'Measurement Void',
5988 },
5989 },
5990 0x139 => {
5991 Name => 'GPSMeasureMode',
5992 Condition => '$$self{GPSVersionID}',
5993 Format => 'string[2]',
5994 Groups => { 1 => 'GPS', 2 => 'Location' },
5995 PrintConv => {
5996 2 => '2-Dimensional Measurement',
5997 3 => '3-Dimensional Measurement',
5998 },
5999 },
6000 0x13b => {
6001 Name => 'GPSMapDatum',
6002 Condition => '$$self{GPSVersionID}',
6003 Format => 'string[7]',
6004 Groups => { 1 => 'GPS', 2 => 'Location' },
6005 },
6006 0x142 => {
6007 Name => 'GPSDateStamp',
6008 Condition => '$$self{GPSVersionID}',
6009 Groups => { 1 => 'GPS', 2 => 'Time' },
6010 Format => 'string[11]',
6011 ValueConv => 'Image::ExifTool::Exif::ExifDate($val)',
6012 },
6013 0x173 => { #(NC)
6014 Name => 'AudioCodecID',
6015 Format => 'string[4]',
6016 },
6017 0x7d3 => {
6018 Name => 'PreviewImage',
6019 Groups => { 2 => 'Preview' },
6020 Format => 'undef[$size-0x7d3]',
6021 Notes => '640x480 JPEG preview image', # (black borders pad to 480 pixels high)
6022 RawConv => '$self->ValidateImage(\$val,$tag)',
6023 },
6024);
6025
6026# tags in Pentax Optio RZ18 AVI videos (ref PH)
6027# (very similar to Olympus::AVI tags)
6028%Image::ExifTool::Pentax::Junk2 = (
6029 PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
6030 GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
6031 FIRST_ENTRY => 0,
6032 NOTES => 'This information is found in AVI videos from the Optio RZ18.',
6033 0x12 => {
6034 Name => 'Make',
6035 Format => 'string[24]',
6036 },
6037 0x2c => {
6038 Name => 'Model',
6039 Description => 'Camera Model Name',
6040 Format => 'string[24]',
6041 },
6042 0x5e => {
6043 Name => 'FNumber',
6044 Format => 'rational64u',
6045 PrintConv => 'sprintf("%.1f",$val)',
6046 },
6047 0x83 => {
6048 Name => 'DateTime1',
6049 Format => 'string[24]',
6050 Groups => { 2 => 'Time' },
6051 },
6052 0x9d => {
6053 Name => 'DateTime2',
6054 Format => 'string[24]',
6055 Groups => { 2 => 'Time' },
6056 },
6057 0x12b => {
6058 Name => 'ThumbnailWidth',
6059 Format => 'int16u',
6060 },
6061 0x12d => {
6062 Name => 'ThumbnailHeight',
6063 Format => 'int16u',
6064 },
6065 0x12f => {
6066 Name => 'ThumbnailLength',
6067 Format => 'int32u',
6068 },
6069 0x133 => {
6070 Name => 'ThumbnailImage',
6071 Groups => { 2 => 'Preview' },
6072 Format => 'undef[$val{0x12f}]',
6073 Notes => '160x120 JPEG thumbnail image',
6074 RawConv => '$self->ValidateImage(\$val,$tag)',
6075 },
6076);
6077
6078#------------------------------------------------------------------------------
6079# Convert filter settings (ref PH, K-5)
6080# Inputs: 0) value to convert, 1) flag for inverse conversion, 2) lookup table
6081# Returns: converted value
6082sub PrintFilter($$$)
6083{
6084 my ($val, $inv, $conv) = @_;
6085 my (@vals, @cval, $t, $v);
6086
6087 if (not $inv) {
6088 # forward conversion (reading):
6089 @vals = split ' ',$val;
6090 $t = shift @vals;
6091 push @cval, $$conv{$t} || "Unknown ($t)";
6092 while (@vals) {
6093 $t = shift @vals;
6094 $v = shift @vals;
6095 next unless $t;
6096 last unless defined $v;
6097 my $c = $filterSettings{$t};
6098 if ($c) {
6099 my $c1 = $$c[1];
6100 if (ref $c1) {
6101 $v = $$c1{$v} || "Unknown($v)";
6102 } elsif ($v) {
6103 $v = sprintf $c1, $v;
6104 }
6105 push @cval, "$$c[0]=$v";
6106 } else {
6107 push @cval, "Unknown($t)=$v";
6108 }
6109 }
6110 return @cval ? \@cval : undef;
6111 } else {
6112 # reverse conversion (writing):
6113 @vals = split /,\s*/, $val;
6114 # convert filter name
6115 delete $$conv{OTHER}; # avoid recursion
6116 $v = Image::ExifTool::ReverseLookup(shift(@vals), $conv);
6117 $$conv{OTHER} = \&PrintFilter;
6118 return undef unless defined $v;
6119 push @cval, $v;
6120 # generate a lookup table for the filter setting name
6121 my %settingNames;
6122 $settingNames{$_} = $filterSettings{$_}[0] foreach keys %filterSettings;
6123 # convert filter settings
6124 foreach $v (@vals) {
6125 $v =~ /^(.*)=(.*)$/ or return undef;
6126 ($t, $v) = ($1, $2);
6127 # look up settings name
6128 $t = Image::ExifTool::ReverseLookup($t, \%settingNames);
6129 return undef unless defined $t;
6130 if (ref $filterSettings{$t}[1]) {
6131 # look up settings value
6132 $v = Image::ExifTool::ReverseLookup($v, $filterSettings{$t}[1]);
6133 return undef unless defined $v;
6134 } else {
6135 return undef unless Image::ExifTool::IsInt($v);
6136 }
6137 push @cval, $t, $v;
6138 }
6139 push @cval, (0) x (17 - @cval) if @cval < 17; # pad with zeros if necessary
6140 return join(' ', @cval);
6141 }
6142}
6143
6144#------------------------------------------------------------------------------
6145# Decode AF bit mask (ref 29)
6146# Inputs: 0) raw binary value, 1) number of AF points, 2) number of bits per AF point,
6147# 3) bit mask, 4) bit value (undef for any bit set)
6148sub DecodeAFPoints($$$$;$)
6149{
6150 my ($val, $num, $bits, $mask, $bitVal) = @_;
6151 my @bytes = split ' ', $val;
6152 my $i = 1; # (starts at AF point number 1)
6153 my $shift = 8 - $bits;
6154 my $byte = shift @bytes;
6155 my @bitList;
6156 for (;;) {
6157 if ($bitVal) {
6158 push @bitList, $i if (($byte >> $shift) & $mask) == $bitVal;
6159 } else {
6160 push @bitList, $i if ($byte >> $shift) & $mask;
6161 }
6162 last if ++$i > $num;
6163 $shift -= $bits;
6164 if ($shift < 0) {
6165 last unless @bytes;
6166 $byte = shift @bytes;
6167 $shift += 8;
6168 }
6169 }
6170 return join(',', @bitList);
6171}
6172
6173#------------------------------------------------------------------------------
6174# Convert Pentax hex-based EV (modulo 8) to real number
6175# Inputs: 0) value to convert
6176# eg) 0x00 -> 0
6177# 0x03 -> 0.33333
6178# 0x04 -> 0.5
6179# 0x05 -> 0.66666
6180# 0x08 -> 1 ... etc
6181sub PentaxEv($)
6182{
6183 my $val = shift;
6184 if ($val & 0x01) {
6185 my $sign = $val < 0 ? -1 : 1;
6186 my $frac = ($val * $sign) & 0x07;
6187 if ($frac == 0x03) {
6188 $val += $sign * ( 8 / 3 - $frac);
6189 } elsif ($frac == 0x05) {
6190 $val += $sign * (16 / 3 - $frac);
6191 }
6192 }
6193 return $val / 8;
6194}
6195
6196#------------------------------------------------------------------------------
6197# Convert number to Pentax hex-based EV (modulo 8)
6198# Inputs: 0) number
6199# Returns: Pentax EV code
6200sub PentaxEvInv($)
6201{
6202 my $num = shift;
6203 my $val = $num * 8;
6204 # extra fudging makes sure 0.3 and 0.33333 both round up to 3, etc
6205 my $sign = $num < 0 ? -1 : 1;
6206 my $inum = $num * $sign - int($num * $sign);
6207 if ($inum > 0.29 and $inum < 0.4) {
6208 $val += $sign / 3;
6209 } elsif ($inum > 0.6 and $inum < .71) {
6210 $val -= $sign / 3;
6211 }
6212 return int($val + 0.5 * $sign);
6213}
6214
6215#------------------------------------------------------------------------------
6216# Encrypt or decrypt Pentax ShutterCount (symmetrical encryption) - PH
6217# Inputs: 0) shutter count value, 1) ExifTool object ref
6218# Returns: Encrypted or decrypted ShutterCount
6219sub CryptShutterCount($$)
6220{
6221 my ($val, $et) = @_;
6222 # Pentax Date and Time values are used in the encryption
6223 return undef unless $$et{PentaxDate} and $$et{PentaxTime} and
6224 length($$et{PentaxDate})==4 and length($$et{PentaxTime})>=3;
6225 # get Date and Time as integers (after padding Time with a null byte)
6226 my $date = unpack('N', $$et{PentaxDate});
6227 my $time = unpack('N', $$et{PentaxTime} . "\0");
6228 return $val ^ $date ^ (0xffffffff - $time);
6229}
6230
6231
62321; # end
6233
6234__END__
6235
6236=head1 NAME
6237
6238Image::ExifTool::Pentax - Pentax/Asahi maker notes tags
6239
6240=head1 SYNOPSIS
6241
6242This module is loaded automatically by Image::ExifTool when required.
6243
6244=head1 DESCRIPTION
6245
6246This module contains definitions required by Image::ExifTool to interpret
6247Pentax and Asahi maker notes in EXIF information.
6248
6249=head1 NOTES
6250
6251I couldn't find a good source for Pentax maker notes information, but I've
6252managed to discover a fair bit of information by analyzing sample images
6253downloaded from the internet, and through tests with my own Optio S, Optio
6254WP, K10D, K-01 and K-5, and with help provided by other ExifTool users (see
6255L</ACKNOWLEDGEMENTS>).
6256
6257The Pentax maker notes are stored in standard EXIF format, but the offsets
6258used for some of their cameras are wacky. The Optio 330 gives the offset
6259relative to the offset of the tag in the directory, the Optio WP uses a base
6260offset in the middle of nowhere, and the Optio 550 uses different (and
6261totally illogical) bases for different menu entries. Very weird. (It
6262wouldn't surprise me if Pentax can't read their own maker notes!) Luckily,
6263there are only a few entries in the maker notes which are large enough to
6264require offsets, so this doesn't affect much useful information. ExifTool
6265attempts to make sense of this fiasco by making an assumption about where
6266the information should be stored to deduce the correct offsets.
6267
6268=head1 REFERENCES
6269
6270=over 4
6271
6272=item L<Image::MakerNotes::Pentax|Image::MakerNotes::Pentax>
6273
6274=item L<http://johnst.org/sw/exiftags/> (Asahi models)
6275
6276=item L<http://kobe1995.jp/~kaz/astro/istD.html>
6277
6278=item L<http://www.cybercom.net/~dcoffin/dcraw/>
6279
6280=item (...plus lots of testing with my Optio WP, K10D and K-5!)
6281
6282=back
6283
6284=head1 ACKNOWLEDGEMENTS
6285
6286Thanks to Wayne Smith, John Francis, Douglas O'Brien, Cvetan Ivanov, Jens
6287Duttke, Dave Nicholson, Iliah Borg, Klaus Homeister, Louis Granboulan and
6288Andras Salamon for help figuring out some Pentax tags, Ger Vermeulen and
6289Niels Kristian Bech Jensen for contributing print conversion values for some
6290tags, and everyone who helped contribute to the LensType values.
6291
6292=head1 AUTHOR
6293
6294Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
6295
6296This library is free software; you can redistribute it and/or modify it
6297under the same terms as Perl itself.
6298
6299=head1 SEE ALSO
6300
6301L<Image::ExifTool::TagNames/Pentax Tags>,
6302L<Image::ExifTool(3pm)|Image::ExifTool>,
6303L<Image::Info(3pm)|Image::Info>
6304
6305=cut
Note: See TracBrowser for help on using the repository browser.