1 /* 2 * This file is part of RawTherapee. 3 * 4 * Copyright (c) 2004-2010 Gabor Horvath <hgabor@rawtherapee.com> 5 * 6 * RawTherapee is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation, either version 3 of the License, or 9 * (at your option) any later version. 10 * 11 * RawTherapee is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with RawTherapee. If not, see <https://www.gnu.org/licenses/>. 18 */ 19 #ifndef _OLYMPUSATTRIBS_ 20 #define _OLYMPUSATTRIBS_ 21 22 #include <string> 23 #include <cmath> 24 #include <iomanip> 25 #include <sstream> 26 27 #include "rtexif.h" 28 29 namespace rtexif 30 { 31 32 class OLOnOffInterpreter : public Interpreter 33 { 34 public: OLOnOffInterpreter()35 OLOnOffInterpreter () {} toString(const Tag * t) const36 std::string toString (const Tag* t) const override 37 { 38 if (t->toInt() == 0) { 39 return "Off"; 40 } else { 41 return "On"; 42 } 43 } 44 }; 45 OLOnOffInterpreter olOnOffInterpreter; 46 47 class OLYesNoInterpreter : public Interpreter 48 { 49 public: OLYesNoInterpreter()50 OLYesNoInterpreter () {} toString(const Tag * t) const51 std::string toString (const Tag* t) const override 52 { 53 if (t->toInt() == 0) { 54 return "No"; 55 } else { 56 return "Yes"; 57 } 58 } 59 }; 60 OLYesNoInterpreter olYesNoInterpreter; 61 62 class OLApertureInterpreter : public Interpreter 63 { 64 public: OLApertureInterpreter()65 OLApertureInterpreter () {} toString(const Tag * t) const66 std::string toString (const Tag* t) const override 67 { 68 std::ostringstream str; 69 str.precision (2); 70 str << pow (2, t->toInt() / 512.0); 71 return str.str(); 72 } 73 }; 74 OLApertureInterpreter olApertureInterpreter; 75 76 class OLLensTypeInterpreter : public Interpreter 77 { 78 std::map<std::string, std::string> lenses; 79 public: OLLensTypeInterpreter()80 OLLensTypeInterpreter () 81 { 82 lenses["00 01 00"] = "Olympus Zuiko Digital ED 50mm f/2.0 Macro"; 83 lenses["00 01 01"] = "Olympus Zuiko Digital 40-150mm f/3.5-4.5"; 84 lenses["00 01 10"] = "Olympus M.Zuiko Digital ED 14-42mm f/3.5-5.6"; 85 lenses["00 02 00"] = "Olympus Zuiko Digital ED 150mm f/2.0"; 86 lenses["00 02 10"] = "Olympus M.Zuiko Digital 17mm f/2.8 Pancake"; 87 lenses["00 03 00"] = "Olympus Zuiko Digital ED 300mm f/2.8"; 88 lenses["00 03 10"] = "Olympus M.Zuiko Digital ED 14-150mm f/4.0-5.6 [II]"; 89 lenses["00 04 10"] = "Olympus M.Zuiko Digital ED 9-18mm f/4.0-5.6"; 90 lenses["00 05 00"] = "Olympus Zuiko Digital 14-54mm f/2.8-3.5"; 91 lenses["00 05 01"] = "Olympus Zuiko Digital Pro ED 90-250mm f/2.8"; 92 lenses["00 05 10"] = "Olympus M.Zuiko Digital ED 14-42mm f/3.5-5.6 L"; 93 lenses["00 06 00"] = "Olympus Zuiko Digital ED 50-200mm f/2.8-3.5"; 94 lenses["00 06 01"] = "Olympus Zuiko Digital ED 8mm f/3.5 Fisheye"; 95 lenses["00 06 10"] = "Olympus M.Zuiko Digital ED 40-150mm f/4.0-5.6"; 96 lenses["00 07 00"] = "Olympus Zuiko Digital 11-22mm f/2.8-3.5"; 97 lenses["00 07 01"] = "Olympus Zuiko Digital 18-180mm f/3.5-6.3"; 98 lenses["00 07 10"] = "Olympus M.Zuiko Digital ED 12mm f/2.0"; 99 lenses["00 08 01"] = "Olympus Zuiko Digital 70-300mm f/4.0-5.6"; 100 lenses["00 08 10"] = "Olympus M.Zuiko Digital ED 75-300mm f/4.8-6.7"; 101 lenses["00 09 10"] = "Olympus M.Zuiko Digital 14-42mm f/3.5-5.6 II"; 102 lenses["00 10 01"] = "Kenko Tokina Reflex 300mm f/6.3 MF Macro"; 103 lenses["00 10 10"] = "Olympus M.Zuiko Digital ED 12-50mm f/3.5-6.3 EZ"; 104 lenses["00 11 10"] = "Olympus M.Zuiko Digital 45mm f/1.8"; 105 lenses["00 12 10"] = "Olympus M.Zuiko Digital ED 60mm f/2.8 Macro"; 106 lenses["00 13 10"] = "Olympus M.Zuiko Digital 14-42mm f/3.5-5.6 II R"; 107 lenses["00 14 10"] = "Olympus M.Zuiko Digital ED 40-150mm f/4.0-5.6 R"; 108 lenses["00 15 00"] = "Olympus Zuiko Digital ED 7-14mm f/4.0"; 109 lenses["00 15 10"] = "Olympus M.Zuiko Digital ED 75mm f/1.8"; 110 lenses["00 16 10"] = "Olympus M.Zuiko Digital 17mm f/1.8"; 111 lenses["00 17 00"] = "Olympus Zuiko Digital Pro ED 35-100mm f/2.0"; 112 lenses["00 18 00"] = "Olympus Zuiko Digital 14-45mm f/3.5-5.6"; 113 lenses["00 18 10"] = "Olympus M.Zuiko Digital ED 75-300mm f/4.8-6.7 II"; 114 lenses["00 19 10"] = "Olympus M.Zuiko Digital ED 12-40mm f/2.8 Pro"; 115 lenses["00 20 00"] = "Olympus Zuiko Digital 35mm f/3.5 Macro"; 116 lenses["00 20 10"] = "Olympus M.Zuiko Digital ED 40-150mm f/2.8 Pro"; 117 lenses["00 21 10"] = "Olympus M.Zuiko Digital ED 14-42mm f/3.5-5.6 EZ"; 118 lenses["00 22 00"] = "Olympus Zuiko Digital 17.5-45mm f/3.5-5.6"; 119 lenses["00 22 10"] = "Olympus M.Zuiko Digital 25mm f/1.8"; 120 lenses["00 23 00"] = "Olympus Zuiko Digital ED 14-42mm f/3.5-5.6"; 121 lenses["00 23 10"] = "Olympus M.Zuiko Digital ED 7-14mm f/2.8 Pro"; 122 lenses["00 24 00"] = "Olympus Zuiko Digital ED 40-150mm f/4.0-5.6"; 123 lenses["00 24 10"] = "Olympus M.Zuiko Digital ED 300mm f/4.0 IS Pro"; 124 lenses["00 25 10"] = "Olympus M.Zuiko Digital ED 8mm f/1.8 Fisheye Pro"; 125 lenses["00 26 10"] = "Olympus M.Zuiko Digital ED 12-100mm f/4.0 IS Pro"; 126 lenses["00 27 10"] = "Olympus M.Zuiko Digital ED 30mm f/3.5 Macro"; 127 lenses["00 28 10"] = "Olympus M.Zuiko Digital ED 25mm f/1.2 Pro"; 128 lenses["00 29 10"] = "Olympus M.Zuiko Digital ED 17mm f/1.2 Pro"; 129 lenses["00 30 00"] = "Olympus Zuiko Digital ED 50-200mm f/2.8-3.5 SWD"; 130 lenses["00 30 10"] = "Olympus M.Zuiko Digital ED 45mm f/1.2 Pro"; 131 lenses["00 31 00"] = "Olympus Zuiko Digital ED 12-60mm f/2.8-4.0 SWD"; 132 lenses["00 32 00"] = "Olympus Zuiko Digital ED 14-35mm f/2.0 SWD"; 133 lenses["00 32 10"] = "Olympus M.Zuiko Digital ED 12-200mm f/3.5-6.3"; 134 lenses["00 33 00"] = "Olympus Zuiko Digital 25mm f/2.8"; 135 lenses["00 34 00"] = "Olympus Zuiko Digital ED 9-18mm f/4.0-5.6"; 136 lenses["00 35 00"] = "Olympus Zuiko Digital 14-54mm f/2.8-3.5 II"; 137 lenses["01 01 00"] = "Sigma 18-50mm f/3.5-5.6 DC"; 138 lenses["01 01 10"] = "Sigma 30mm f/2.8 EX DN"; 139 lenses["01 02 00"] = "Sigma 55-200mm f/4.0-5.6 DC"; 140 lenses["01 02 10"] = "Sigma 19mm f/2.8 EX DN"; 141 lenses["01 03 00"] = "Sigma 18-125mm f/3.5-5.6 DC"; 142 lenses["01 03 10"] = "Sigma 30mm f/2.8 DN | A"; 143 lenses["01 04 00"] = "Sigma 18-125mm f/3.5-5.6 DC"; 144 lenses["01 04 10"] = "Sigma 19mm f/2.8 DN | A"; 145 lenses["01 05 00"] = "Sigma 30mm f/1.4 EX DC HSM"; 146 lenses["01 05 10"] = "Sigma 60mm f/2.8 DN | A"; 147 lenses["01 06 00"] = "Sigma APO 50-500mm f/4.0-6.3 EX DG HSM"; 148 lenses["01 06 10"] = "Sigma 30mm f/1.4 DC DN | C"; 149 lenses["01 07 00"] = "Sigma Macro 105mm f/2.8 EX DG"; 150 lenses["01 07 10"] = "Sigma 16mm f/1.4 DC DN | C (017)"; 151 lenses["01 08 00"] = "Sigma APO Macro 150mm f/2.8 EX DG HSM"; 152 lenses["01 09 00"] = "Sigma 18-50mm f/2.8 EX DC Macro"; 153 lenses["01 10 00"] = "Sigma 24mm f/1.8 EX DG Aspherical Macro"; 154 lenses["01 11 00"] = "Sigma APO 135-400mm f/4.5-5.6 DG"; 155 lenses["01 12 00"] = "Sigma APO 300-800mm f/5.6 EX DG HSM"; 156 lenses["01 13 00"] = "Sigma 30mm f/1.4 EX DC HSM"; 157 lenses["01 14 00"] = "Sigma APO 50-500mm f/4.0-6.3 EX DG HSM"; 158 lenses["01 15 00"] = "Sigma 10-20mm f/4.0-5.6 EX DC HSM"; 159 lenses["01 16 00"] = "Sigma APO 70-200mm f/2.8 II EX DG Macro HSM"; 160 lenses["01 17 00"] = "Sigma 50mm f/1.4 EX DG HSM"; 161 lenses["02 01 00"] = "Leica D Vario Elmarit 14-50mm f/2.8-3.5 Asph."; 162 lenses["02 01 10"] = "Lumix G Vario 14-45mm f/3.5-5.6 Asph. Mega OIS"; 163 lenses["02 02 00"] = "Leica D Summilux 25mm f/1.4 Asph."; 164 lenses["02 02 10"] = "Lumix G Vario 45-200mm f/4.0-5.6 Mega OIS"; 165 lenses["02 03 00"] = "Leica D Vario Elmar 14-50mm f/3.8-5.6 Asph. Mega OIS"; 166 lenses["02 03 01"] = "Leica D Vario Elmar 14-50mm f/3.8-5.6 Asph."; 167 lenses["02 03 10"] = "Lumix G Vario HD 14-140mm f/4.0-5.8 Asph. Mega OIS"; 168 lenses["02 04 00"] = "Leica D Vario Elmar 14-150mm f/3.5-5.6"; 169 lenses["02 04 10"] = "Lumix G Vario 7-14mm f/4.0 Asph."; 170 lenses["02 05 10"] = "Lumix G 20mm f/1.7 Asph."; 171 lenses["02 06 10"] = "Leica DG Macro-Elmarit 45mm f/2.8 Asph. Mega OIS"; 172 lenses["02 07 10"] = "Lumix G Vario 14-42mm f/3.5-5.6 Asph. Mega OIS"; 173 lenses["02 08 10"] = "Lumix G Fisheye 8mm f/3.5"; 174 lenses["02 09 10"] = "Lumix G Vario 100-300mm f/4.0-5.6 Mega OIS"; 175 lenses["02 10 10"] = "Lumix G 14mm f/2.5 Asph."; 176 lenses["02 11 10"] = "Lumix G 12.5mm f/12 3D"; 177 lenses["02 12 10"] = "Leica DG Summilux 25mm f/1.4 Asph."; 178 lenses["02 13 10"] = "Lumix G X Vario PZ 45-175mm f/4.0-5.6 Asph. Power OIS"; 179 lenses["02 14 10"] = "Lumix G X Vario PZ 14-42mm f/3.5-5.6 Asph. Power OIS"; 180 lenses["02 15 10"] = "Lumix G X Vario 12-35mm f/2.8 Asph. Power OIS"; 181 lenses["02 16 10"] = "Lumix G Vario 45-150mm f/4.0-5.6 Asph. Mega OIS"; 182 lenses["02 17 10"] = "Lumix G X Vario 35-100mm f/2.8 Power OIS"; 183 lenses["02 18 10"] = "Lumix G Vario 14-42mm f/3.5-5.6 II Asph. Mega OIS"; 184 lenses["02 19 10"] = "Lumix G Vario 14-140mm f/3.5-5.6 Asph. Power OIS"; 185 lenses["02 20 10"] = "Lumix G Vario 12-32mm f/3.5-5.6 Asph. Mega OIS"; 186 lenses["02 21 10"] = "Leica DG Nocticron 42.5mm f/1.2 Asph. Power OIS"; 187 lenses["02 22 10"] = "Leica DG Summilux 15mm f/1.7 Asph."; 188 lenses["02 23 10"] = "Lumix G Vario 35-100mm f/4.0-5.6 Asph. Mega OIS"; 189 lenses["02 24 10"] = "Lumix G Macro 30mm f/2.8 Asph. Mega OIS"; 190 lenses["02 25 10"] = "Lumix G 42.5mm f/1.7 Asph. Power OIS"; 191 lenses["02 26 10"] = "Lumix G 25mm f/1.7 Asph."; 192 lenses["02 27 10"] = "Leica DG Vario-Elmar 100-400mm f/4.0-6.3 Asph. Power OIS"; 193 lenses["02 28 10"] = "Lumix G Vario 12-60mm f/3.5-5.6 Asph. Power OIS"; 194 lenses["02 29 10"] = "Leica DG Summilux 12mm f/1.4 Asph."; 195 lenses["02 30 10"] = "Leica DG Vario-Elmarit 12-60mm f/2.8-4 Asph. Power OIS"; 196 lenses["02 33 10"] = "Lumix G X Vario 12-35mm f/2.8 II Asph. Power OIS"; 197 lenses["02 35 10"] = "Leica DG Vario-Elmarit 8-18mm f/2.8-4 Asph."; 198 lenses["02 36 10"] = "Leica DG Elmarit 200mm f/2.8 Power OIS"; 199 lenses["02 37 10"] = "Leica DG Vario-Elmarit 50-200mm f/2.8-4 Asph. Power OIS"; 200 lenses["02 38 10"] = "Leica DG Vario-Summilux 10-25mm f/1.7 Asph."; 201 lenses["03 01 00"] = "Leica D Vario Elmarit 14-50mm f/2.8-3.5 Asph."; 202 lenses["03 02 00"] = "Leica D Summilux 25mm f/1.4 Asph."; 203 lenses["05 01 10"] = "Tamron 14-150mm f/3.5-5.8 Di III"; 204 } toString(const Tag * t) const205 std::string toString (const Tag* t) const override 206 { 207 std::ostringstream lid; 208 lid.setf (std::ios_base::hex, std::ios_base::basefield); 209 lid.setf (std::ios_base::uppercase); 210 lid << std::setw (2) << std::setfill ('0') << t->toInt (0) << ' '; //maker 211 lid << std::setw (2) << std::setfill ('0') << t->toInt (2) << ' '; //model 212 lid << std::setw (2) << std::setfill ('0') << t->toInt (3); // submodel 213 214 std::map<std::string, std::string>::const_iterator r = lenses.find (lid.str()); 215 216 if (r != lenses.end()) { 217 return r->second; 218 } else { 219 return "Unknown"; 220 } 221 } 222 }; 223 OLLensTypeInterpreter olLensTypeInterpreter; 224 225 class OLFlashTypeInterpreter : public ChoiceInterpreter<> 226 { 227 public: OLFlashTypeInterpreter()228 OLFlashTypeInterpreter () 229 { 230 choices[0] = "None"; 231 choices[2] = "Simple E-System"; 232 choices[3] = "E-System"; 233 } 234 }; 235 OLFlashTypeInterpreter olFlashTypeInterpreter; 236 237 class OLExposureModeInterpreter : public ChoiceInterpreter<> 238 { 239 public: OLExposureModeInterpreter()240 OLExposureModeInterpreter () 241 { 242 choices[1] = "Manual"; 243 choices[2] = "Program"; 244 choices[3] = "Aperture-priority AE"; 245 choices[4] = "Shutter speed priority AE"; 246 choices[5] = "Program-shift"; 247 } 248 }; 249 OLExposureModeInterpreter olExposureModeInterpreter; 250 251 class OLMeteringModeInterpreter : public ChoiceInterpreter<> 252 { 253 public: OLMeteringModeInterpreter()254 OLMeteringModeInterpreter () 255 { 256 choices[2] = "Center-weighted average"; 257 choices[3] = "Spot"; 258 choices[5] = "ESP"; 259 choices[261] = "Pattern+AF"; 260 choices[515] = "Spot+Highlight control"; 261 choices[1027] = "Spot+Shadow control"; 262 } 263 }; 264 OLMeteringModeInterpreter olMeteringModeInterpreter; 265 266 class OLFocusModeInterpreter : public ChoiceInterpreter<> 267 { 268 public: OLFocusModeInterpreter()269 OLFocusModeInterpreter () 270 { 271 choices[0] = "Single AF"; 272 choices[1] = "Sequential shooting AF"; 273 choices[2] = "Continuous AF"; 274 choices[3] = "Multi AF"; 275 choices[4] = "Face detect"; 276 choices[10] = "MF"; 277 } 278 }; 279 OLFocusModeInterpreter olFocusModeInterpreter; 280 281 class OLWhitebalance2Interpreter : public ChoiceInterpreter<> 282 { 283 public: OLWhitebalance2Interpreter()284 OLWhitebalance2Interpreter () 285 { 286 choices[0] = "Auto"; 287 choices[1] = "Auto (Keep Warm Color Off)"; 288 choices[16] = "7500K (Fine Weather with Shade)"; 289 choices[17] = "6000K (Cloudy)"; 290 choices[18] = "5300K (Fine Weather)"; 291 choices[20] = "3000K (Tungsten light)"; 292 choices[21] = "3600K (Tungsten light-like)"; 293 choices[22] = "Auto Setup"; 294 choices[23] = "5500K (Flash)"; 295 choices[33] = "6600K (Daylight fluorescent)"; 296 choices[34] = "4500K (Neutral white fluorescent)"; 297 choices[35] = "4000K (Cool white fluorescent)"; 298 choices[36] = "White Fluorescent"; 299 choices[48] = "3600K (Tungsten light-like)"; 300 choices[67] = "Underwater"; 301 choices[256] = "One Touch WB 1"; 302 choices[257] = "One Touch WB 2"; 303 choices[258] = "One Touch WB 3"; 304 choices[259] = "One Touch WB 4"; 305 choices[512] = "Custom WB 1"; 306 choices[513] = "Custom WB 2"; 307 choices[514] = "Custom WB 3"; 308 choices[515] = "Custom WB 4"; 309 } 310 }; 311 OLWhitebalance2Interpreter olWhitebalance2Interpreter; 312 313 class OLSceneModeInterpreter : public ChoiceInterpreter<> 314 { 315 public: OLSceneModeInterpreter()316 OLSceneModeInterpreter () 317 { 318 choices[0] = "Standard"; 319 choices[6] = "Auto"; 320 choices[7] = "Sport"; 321 choices[8] = "Portrait"; 322 choices[9] = "Landscape+Portrait"; 323 choices[10] = "Landscape"; 324 choices[11] = "Night Scene"; 325 choices[12] = "Self Portrait"; 326 choices[13] = "Panorama"; 327 choices[14] = "2 in 1"; 328 choices[15] = "Movie"; 329 choices[16] = "Landscape+Portrait"; 330 choices[17] = "Night+Portrait"; 331 choices[18] = "Indoor"; 332 choices[19] = "Fireworks"; 333 choices[20] = "Sunset"; 334 choices[21] = "Beauty Skin"; 335 choices[22] = "Macro"; 336 choices[23] = "Super Macro"; 337 choices[24] = "Food"; 338 choices[25] = "Documents"; 339 choices[26] = "Museum"; 340 choices[27] = "Shoot & Select"; 341 choices[28] = "Beach & Snow"; 342 choices[29] = "Self Protrait+Timer"; 343 choices[30] = "Candle"; 344 choices[31] = "Available Light"; 345 choices[32] = "Behind Glass"; 346 choices[33] = "My Mode"; 347 choices[34] = "Pet"; 348 choices[35] = "Underwater Wide1"; 349 choices[36] = "Underwater Macro"; 350 choices[37] = "Shoot & Select1"; 351 choices[38] = "Shoot & Select2"; 352 choices[39] = "High Key"; 353 choices[40] = "Digital Image Stabilization"; 354 choices[41] = "Auction"; 355 choices[42] = "Beach"; 356 choices[43] = "Snow"; 357 choices[44] = "Underwater Wide2"; 358 choices[45] = "Low Key"; 359 choices[46] = "Children"; 360 choices[47] = "Vivid"; 361 choices[48] = "Nature Macro"; 362 choices[49] = "Underwater Snapshot"; 363 choices[50] = "Shooting Guide"; 364 choices[54] = "Face Portrait"; 365 choices[57] = "Bulb"; 366 choices[59] = "Smile Shot"; 367 choices[60] = "Quick Shutter"; 368 choices[63] = "Slow Shutter"; 369 choices[64] = "Bird Watching"; 370 choices[65] = "Multiple Exposure"; 371 choices[66] = "e-Portrait"; 372 choices[67] = "Soft Background Shot"; 373 choices[142] = "Hand-held Starlight"; 374 choices[154] = "HDR"; 375 } 376 }; 377 OLSceneModeInterpreter olSceneModeInterpreter; 378 379 class OLPictureModeBWFilterInterpreter : public ChoiceInterpreter<> 380 { 381 public: OLPictureModeBWFilterInterpreter()382 OLPictureModeBWFilterInterpreter () 383 { 384 choices[0] = "n/a"; 385 choices[1] = "Neutral"; 386 choices[2] = "Yellow"; 387 choices[3] = "Orange"; 388 choices[4] = "Red"; 389 choices[5] = "Green"; 390 } 391 }; 392 OLPictureModeBWFilterInterpreter olPictureModeBWFilterInterpreter; 393 394 class OLPictureModeToneInterpreter : public ChoiceInterpreter<> 395 { 396 public: OLPictureModeToneInterpreter()397 OLPictureModeToneInterpreter () 398 { 399 choices[0] = "n/a"; 400 choices[1] = "Neutral"; 401 choices[2] = "Sepia"; 402 choices[3] = "Blue"; 403 choices[4] = "Purple"; 404 choices[5] = "Green"; 405 } 406 }; 407 OLPictureModeToneInterpreter olPictureModeToneInterpreter; 408 409 class OLImageQuality2Interpreter : public ChoiceInterpreter<> 410 { 411 public: OLImageQuality2Interpreter()412 OLImageQuality2Interpreter () 413 { 414 choices[1] = "SQ"; 415 choices[2] = "HQ"; 416 choices[3] = "SHQ"; 417 choices[4] = "RAW"; 418 choices[5] = "SQ (5)"; 419 } 420 }; 421 OLImageQuality2Interpreter olImageQuality2Interpreter; 422 423 class OLDevEngineInterpreter : public ChoiceInterpreter<> 424 { 425 public: 426 // RawDevEngine OLDevEngineInterpreter()427 OLDevEngineInterpreter () 428 { 429 choices[0] = "High Speed"; 430 choices[1] = "High Function"; 431 choices[2] = "Advanced High Speed"; 432 choices[3] = "Advanced High Function"; 433 } 434 }; 435 OLDevEngineInterpreter olDevEngineInterpreter; 436 437 class OLPictureModeInterpreter : public ChoiceInterpreter<> 438 { 439 public: OLPictureModeInterpreter()440 OLPictureModeInterpreter () 441 { 442 choices[1] = "Vivid"; 443 choices[2] = "Natural"; 444 choices[3] = "Muted"; 445 choices[4] = "Portrait"; 446 choices[5] = "i-Enhance"; 447 choices[7] = "Color Creator"; 448 choices[9] = "Color Profile 1"; 449 choices[10] = "Color Profile 2"; 450 choices[11] = "Color Profile 3"; 451 choices[12] = "Monochrome Profile 1"; 452 choices[13] = "Monochrome Profile 2"; 453 choices[14] = "Monochrome Profile 3"; 454 choices[256] = "Monotone"; 455 choices[512] = "Sepia"; 456 } 457 }; 458 OLPictureModeInterpreter olPictureModeInterpreter; 459 460 class OLColorSpaceInterpreter : public ChoiceInterpreter<> 461 { 462 public: OLColorSpaceInterpreter()463 OLColorSpaceInterpreter () 464 { 465 choices[0] = "sRGB"; 466 choices[1] = "Adobe RGB"; 467 choices[2] = "Pro Photo RGB"; 468 } 469 }; 470 OLColorSpaceInterpreter olColorSpaceInterpreter; 471 472 class OLNoiseFilterInterpreter : public Interpreter 473 { 474 public: OLNoiseFilterInterpreter()475 OLNoiseFilterInterpreter () {} toString(const Tag * t) const476 std::string toString (const Tag* t) const override 477 { 478 int a = t->toInt (0); 479 int b = t->toInt (2); 480 int c = t->toInt (4); 481 482 if (a == -1 && b == -2 && c == 1) { 483 return "Low"; 484 } else if (a == -2 && b == -2 && c == 1) { 485 return "Off"; 486 } else if (a == 0 && b == -2 && c == 1) { 487 return "Standard"; 488 } else if (a == 1 && b == -2 && c == 1) { 489 return "High"; 490 } else { 491 return "Unknown"; 492 } 493 } 494 }; 495 OLNoiseFilterInterpreter olNoiseFilterInterpreter; 496 497 class OLFlashModeInterpreter : public Interpreter 498 { 499 public: OLFlashModeInterpreter()500 OLFlashModeInterpreter () {} toString(const Tag * t) const501 std::string toString (const Tag* t) const override 502 { 503 std::ostringstream str; 504 int a = t->toInt (); 505 str << "Flash Used = " << ((a & 1) ? "Yes" : "No") << std::endl; 506 str << "Fill-in = " << ((a & 2) ? "On" : "Off") << std::endl; 507 str << "Red-eye = " << ((a & 4) ? "On" : "Off") << std::endl; 508 str << "Slow-sync = " << ((a & 8) ? "On" : "Off") << std::endl; 509 str << "Forced On = " << ((a & 16) ? "On" : "Off") << std::endl; 510 str << "2nd Curtain = " << ((a & 32) ? "On" : "Off"); 511 return str.str(); 512 } 513 }; 514 OLFlashModeInterpreter olFlashModeInterpreter; 515 516 class OLNoiseReductionInterpreter : public Interpreter 517 { 518 public: OLNoiseReductionInterpreter()519 OLNoiseReductionInterpreter () {} toString(const Tag * t) const520 std::string toString (const Tag* t) const override 521 { 522 std::ostringstream str; 523 int a = t->toInt (); 524 str << "Noise Reduction = " << ((a & 1) ? "On" : "Off") << std::endl; 525 str << "Noise Filter = " << ((a & 2) ? "On" : "Off") << std::endl; 526 str << "Noise Filter (ISO Boost) = " << ((a & 4) ? "On" : "Off") << std::endl; 527 str << "Auto = " << ((a & 8) ? "On" : "Off"); 528 return str.str(); 529 } 530 }; 531 OLNoiseReductionInterpreter olNoiseReductionInterpreter; 532 533 class OLFlashModelInterpreter : public ChoiceInterpreter<> 534 { 535 public: OLFlashModelInterpreter()536 OLFlashModelInterpreter () 537 { 538 choices[0] = "None"; 539 choices[1] = "FL-20"; 540 choices[2] = "FL-50"; 541 choices[3] = "RF-11"; 542 choices[4] = "TF-22"; 543 choices[5] = "FL-36"; 544 choices[6] = "FL-50R"; 545 choices[7] = "FL-36R"; 546 choices[9] = "FL-14"; 547 choices[11] = "FL-600R"; 548 } 549 }; 550 OLFlashModelInterpreter olFlashModelInterpreter; 551 552 const TagAttrib olyFocusInfoAttribs[] = { 553 {0, AC_WRITE, 0, nullptr, 0x0000, AUTO, "FocusInfoVersion", &stdInterpreter}, 554 {0, AC_WRITE, 0, nullptr, 0x0209, AUTO, "AutoFocus", &olOnOffInterpreter}, 555 {0, AC_WRITE, 0, nullptr, 0x0210, AUTO, "SceneDetect", &stdInterpreter}, 556 {0, AC_WRITE, 0, nullptr, 0x0211, AUTO, "SceneArea", &stdInterpreter}, 557 {0, AC_WRITE, 0, nullptr, 0x0212, AUTO, "SceneDetectData", &stdInterpreter}, 558 {0, AC_WRITE, 0, nullptr, 0x0300, AUTO, "ZoomStepCount", &stdInterpreter}, 559 {0, AC_WRITE, 0, nullptr, 0x0301, AUTO, "FocusStepCount", &stdInterpreter}, 560 {0, AC_WRITE, 0, nullptr, 0x0303, AUTO, "FocusStepInfinity", &stdInterpreter}, 561 {0, AC_WRITE, 0, nullptr, 0x0304, AUTO, "FocusStepNear", &stdInterpreter}, 562 {0, AC_WRITE, 0, nullptr, 0x0305, AUTO, "FocusDistance", &stdInterpreter}, 563 {0, AC_WRITE, 0, nullptr, 0x0308, AUTO, "AFPoint", &stdInterpreter}, 564 {0, AC_WRITE, 0, nullptr, 0x1201, AUTO, "ExternalFlash", &olOnOffInterpreter}, 565 {0, AC_WRITE, 0, nullptr, 0x1203, AUTO, "ExternalFlashGuideNumber", &stdInterpreter}, 566 {0, AC_WRITE, 0, nullptr, 0x1204, AUTO, "ExternalFlashBounce", &stdInterpreter}, 567 {0, AC_WRITE, 0, nullptr, 0x1205, AUTO, "ExternalFlashZoom", &stdInterpreter}, 568 {0, AC_WRITE, 0, nullptr, 0x1208, AUTO, "InternalFlash", &olOnOffInterpreter}, 569 {0, AC_WRITE, 0, nullptr, 0x1209, AUTO, "ManualFlash", &olOnOffInterpreter}, 570 {0, AC_WRITE, 0, nullptr, 0x1500, AUTO, "SensorTemperature", &stdInterpreter}, 571 {0, AC_WRITE, 0, nullptr, 0x1600, AUTO, "ImageStabilization", &stdInterpreter}, 572 { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} 573 }; 574 575 const TagAttrib olyImageProcessingAttribs[] = { 576 {0, AC_WRITE, 0, nullptr, 0x0000, AUTO, "ImageProcessingVersion", &stdInterpreter}, 577 {0, AC_WRITE, 0, nullptr, 0x0100, AUTO, "WB_RBLevels", &stdInterpreter}, 578 {0, AC_WRITE, 0, nullptr, 0x0102, AUTO, "WB_RBLevels3000K", &stdInterpreter}, 579 {0, AC_WRITE, 0, nullptr, 0x0103, AUTO, "WB_RBLevels3300K", &stdInterpreter}, 580 {0, AC_WRITE, 0, nullptr, 0x0104, AUTO, "WB_RBLevels3600K", &stdInterpreter}, 581 {0, AC_WRITE, 0, nullptr, 0x0105, AUTO, "WB_RBLevels3900K", &stdInterpreter}, 582 {0, AC_WRITE, 0, nullptr, 0x0106, AUTO, "WB_RBLevels4000K", &stdInterpreter}, 583 {0, AC_WRITE, 0, nullptr, 0x0107, AUTO, "WB_RBLevels4300K", &stdInterpreter}, 584 {0, AC_WRITE, 0, nullptr, 0x0108, AUTO, "WB_RBLevels4500K", &stdInterpreter}, 585 {0, AC_WRITE, 0, nullptr, 0x0109, AUTO, "WB_RBLevels4800K", &stdInterpreter}, 586 {0, AC_WRITE, 0, nullptr, 0x010a, AUTO, "WB_RBLevels5300K", &stdInterpreter}, 587 {0, AC_WRITE, 0, nullptr, 0x010b, AUTO, "WB_RBLevels6000K", &stdInterpreter}, 588 {0, AC_WRITE, 0, nullptr, 0x010c, AUTO, "WB_RBLevels6600K", &stdInterpreter}, 589 {0, AC_WRITE, 0, nullptr, 0x010d, AUTO, "WB_RBLevels7500K", &stdInterpreter}, 590 {0, AC_WRITE, 0, nullptr, 0x010e, AUTO, "WB_RBLevelsCWB1", &stdInterpreter}, 591 {0, AC_WRITE, 0, nullptr, 0x010f, AUTO, "WB_RBLevelsCWB2", &stdInterpreter}, 592 {0, AC_WRITE, 0, nullptr, 0x0110, AUTO, "WB_RBLevelsCWB3", &stdInterpreter}, 593 {0, AC_WRITE, 0, nullptr, 0x0111, AUTO, "WB_RBLevelsCWB4", &stdInterpreter}, 594 {0, AC_WRITE, 0, nullptr, 0x0113, AUTO, "WB_GLevel3000K", &stdInterpreter}, 595 {0, AC_WRITE, 0, nullptr, 0x0114, AUTO, "WB_GLevel3300K", &stdInterpreter}, 596 {0, AC_WRITE, 0, nullptr, 0x0115, AUTO, "WB_GLevel3600K", &stdInterpreter}, 597 {0, AC_WRITE, 0, nullptr, 0x0116, AUTO, "WB_GLevel3900K", &stdInterpreter}, 598 {0, AC_WRITE, 0, nullptr, 0x0117, AUTO, "WB_GLevel4000K", &stdInterpreter}, 599 {0, AC_WRITE, 0, nullptr, 0x0118, AUTO, "WB_GLevel4300K", &stdInterpreter}, 600 {0, AC_WRITE, 0, nullptr, 0x0119, AUTO, "WB_GLevel4500K", &stdInterpreter}, 601 {0, AC_WRITE, 0, nullptr, 0x011a, AUTO, "WB_GLevel4800K", &stdInterpreter}, 602 {0, AC_WRITE, 0, nullptr, 0x011b, AUTO, "WB_GLevel5300K", &stdInterpreter}, 603 {0, AC_WRITE, 0, nullptr, 0x011c, AUTO, "WB_GLevel6000K", &stdInterpreter}, 604 {0, AC_WRITE, 0, nullptr, 0x011d, AUTO, "WB_GLevel6600K", &stdInterpreter}, 605 {0, AC_WRITE, 0, nullptr, 0x011e, AUTO, "WB_GLevel7500K", &stdInterpreter}, 606 {0, AC_WRITE, 0, nullptr, 0x011f, AUTO, "WB_GLevel", &stdInterpreter}, 607 {0, AC_WRITE, 0, nullptr, 0x0200, AUTO, "ColorMatrix", &stdInterpreter}, 608 {0, AC_WRITE, 0, nullptr, 0x0300, AUTO, "Enhancer", &stdInterpreter}, 609 {0, AC_WRITE, 0, nullptr, 0x0301, AUTO, "EnhancerValues", &stdInterpreter}, 610 {0, AC_WRITE, 0, nullptr, 0x0310, AUTO, "CoringFilter", &stdInterpreter}, 611 {0, AC_WRITE, 0, nullptr, 0x0311, AUTO, "CoringValues", &stdInterpreter}, 612 {0, AC_WRITE, 0, nullptr, 0x0600, AUTO, "BlackLevel2", &stdInterpreter}, 613 {0, AC_WRITE, 0, nullptr, 0x0610, AUTO, "GainBase", &stdInterpreter}, 614 {0, AC_WRITE, 0, nullptr, 0x0611, AUTO, "ValidBits", &stdInterpreter}, 615 {0, AC_WRITE, 0, nullptr, 0x0612, AUTO, "CropLeft", &stdInterpreter}, 616 {0, AC_WRITE, 0, nullptr, 0x0613, AUTO, "CropTop", &stdInterpreter}, 617 {0, AC_WRITE, 0, nullptr, 0x0614, AUTO, "CropWidth", &stdInterpreter}, 618 {0, AC_WRITE, 0, nullptr, 0x0615, AUTO, "CropHeight", &stdInterpreter}, 619 {0, AC_WRITE, 0, nullptr, 0x1010, AUTO, "NoiseReduction2", &stdInterpreter}, 620 {0, AC_WRITE, 0, nullptr, 0x1011, AUTO, "DistortionCorrection2", &olOnOffInterpreter}, 621 {0, AC_WRITE, 0, nullptr, 0x1012, AUTO, "ShadingCompensation2", &olOnOffInterpreter}, 622 {1, AC_WRITE, 0, nullptr, 0x1103, AUTO, "UnknownBlock", &stdInterpreter}, 623 {0, AC_WRITE, 0, nullptr, 0x1200, AUTO, "FaceDetect", &olOnOffInterpreter}, 624 {0, AC_WRITE, 0, nullptr, 0x1201, AUTO, "FaceDetectArea", &stdInterpreter}, 625 { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} 626 }; 627 628 const TagAttrib olyRawDevelopmentAttribs[] = { 629 {0, AC_WRITE, 0, nullptr, 0x0000, AUTO, "RawDevVersion", &stdInterpreter}, 630 {0, AC_WRITE, 0, nullptr, 0x0100, AUTO, "RawDevExposureBiasValue", &stdInterpreter}, 631 {0, AC_WRITE, 0, nullptr, 0x0101, AUTO, "RawDevWhiteBalanceValue", &stdInterpreter}, 632 {0, AC_WRITE, 0, nullptr, 0x0102, AUTO, "RawDevWBFineAdjustment", &stdInterpreter}, 633 {0, AC_WRITE, 0, nullptr, 0x0103, AUTO, "RawDevGrayPoint", &stdInterpreter}, 634 {0, AC_WRITE, 0, nullptr, 0x0104, AUTO, "RawDevSaturationEmphasis", &stdInterpreter}, 635 {0, AC_WRITE, 0, nullptr, 0x0105, AUTO, "RawDevMemoryColorEmphasis", &stdInterpreter}, 636 {0, AC_WRITE, 0, nullptr, 0x0106, AUTO, "RawDevContrastValue", &stdInterpreter}, 637 {0, AC_WRITE, 0, nullptr, 0x0107, AUTO, "RawDevSharpnessValue", &stdInterpreter}, 638 {0, AC_WRITE, 0, nullptr, 0x0108, AUTO, "RawDevColorSpace", &olColorSpaceInterpreter}, 639 {0, AC_WRITE, 0, nullptr, 0x0109, AUTO, "RawDevEngine", &olDevEngineInterpreter}, 640 {0, AC_WRITE, 0, nullptr, 0x010a, AUTO, "RawDevNoiseReduction", &olNoiseReductionInterpreter}, 641 {0, AC_WRITE, 0, nullptr, 0x010b, AUTO, "RawDevEditStatus", &stdInterpreter}, 642 {0, AC_WRITE, 0, nullptr, 0x010c, AUTO, "RawDevSettings", &stdInterpreter}, 643 { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} 644 }; 645 646 const TagAttrib olyRawDevelopment2Attribs[] = { 647 {0, AC_WRITE, 0, nullptr, 0x0000, AUTO, "RawDevVersion", &stdInterpreter}, 648 {0, AC_WRITE, 0, nullptr, 0x0100, AUTO, "RawDevExposureBiasValue", &stdInterpreter}, 649 {0, AC_WRITE, 0, nullptr, 0x0101, AUTO, "RawDevWhiteBalance", &stdInterpreter}, 650 {0, AC_WRITE, 0, nullptr, 0x0102, AUTO, "RawDevWhiteBalanceValue", &stdInterpreter}, 651 {0, AC_WRITE, 0, nullptr, 0x0103, AUTO, "RawDevWBFineAdjustment", &stdInterpreter}, 652 {0, AC_WRITE, 0, nullptr, 0x0104, AUTO, "RawDevGrayPoint", &stdInterpreter}, 653 {0, AC_WRITE, 0, nullptr, 0x0105, AUTO, "RawDevContrastValue", &stdInterpreter}, 654 {0, AC_WRITE, 0, nullptr, 0x0106, AUTO, "RawDevSharpnessValue", &stdInterpreter}, 655 {0, AC_WRITE, 0, nullptr, 0x0107, AUTO, "RawDevSaturationEmphasis", &stdInterpreter}, 656 {0, AC_WRITE, 0, nullptr, 0x0108, AUTO, "RawDevMemoryColorEmphasis", &stdInterpreter}, 657 {0, AC_WRITE, 0, nullptr, 0x0109, AUTO, "RawDevColorSpace", &olColorSpaceInterpreter}, 658 {0, AC_WRITE, 0, nullptr, 0x010a, AUTO, "RawDevNoiseReduction", &olNoiseReductionInterpreter}, 659 {0, AC_WRITE, 0, nullptr, 0x010b, AUTO, "RawDevEngine", &olDevEngineInterpreter}, 660 {0, AC_WRITE, 0, nullptr, 0x010c, AUTO, "RawDevPictureMode", &olPictureModeInterpreter}, 661 {0, AC_WRITE, 0, nullptr, 0x010d, AUTO, "RawDevPMSaturation", &stdInterpreter}, 662 {0, AC_WRITE, 0, nullptr, 0x010e, AUTO, "RawDevPMContrast", &stdInterpreter}, 663 {0, AC_WRITE, 0, nullptr, 0x010f, AUTO, "RawDevPMSharpness", &stdInterpreter}, 664 {0, AC_WRITE, 0, nullptr, 0x0110, AUTO, "RawDevPM_BWFilter", &olPictureModeBWFilterInterpreter}, 665 {0, AC_WRITE, 0, nullptr, 0x0111, AUTO, "RawDevPMPictureTone", &olPictureModeToneInterpreter}, 666 {0, AC_WRITE, 0, nullptr, 0x0112, AUTO, "RawDevGradation", &stdInterpreter}, 667 {0, AC_WRITE, 0, nullptr, 0x0113, AUTO, "RawDevSaturation3", &stdInterpreter}, 668 {0, AC_WRITE, 0, nullptr, 0x0119, AUTO, "RawDevAutoGradation", &olOnOffInterpreter}, 669 {0, AC_WRITE, 0, nullptr, 0x0120, AUTO, "RawDevPMNoiseFilter", &stdInterpreter}, 670 { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} 671 }; 672 673 const TagAttrib olyCameraSettingsAttribs[] = { 674 {0, AC_WRITE, 0, nullptr, 0x0000, AUTO, "CameraSettingsVersion", &stdInterpreter}, 675 {1, AC_WRITE, 0, nullptr, 0x0100, AUTO, "PreviewImageValid", &olYesNoInterpreter}, 676 {1, AC_WRITE, 0, nullptr, 0x0101, AUTO, "PreviewImageStart", &stdInterpreter}, 677 {1, AC_WRITE, 0, nullptr, 0x0102, AUTO, "PreviewImageLength", &stdInterpreter}, 678 {0, AC_WRITE, 0, nullptr, 0x0200, AUTO, "ExposureMode", &olExposureModeInterpreter}, 679 {0, AC_WRITE, 0, nullptr, 0x0201, AUTO, "AELock", &olOnOffInterpreter}, 680 {0, AC_WRITE, 0, nullptr, 0x0202, AUTO, "MeteringMode", &olMeteringModeInterpreter}, 681 {0, AC_WRITE, 0, nullptr, 0x0300, AUTO, "MacroMode", &olOnOffInterpreter}, 682 {0, AC_WRITE, 0, nullptr, 0x0301, AUTO, "FocusMode", &olFocusModeInterpreter}, 683 {0, AC_WRITE, 0, nullptr, 0x0302, AUTO, "FocusProcess", &stdInterpreter}, 684 {0, AC_WRITE, 0, nullptr, 0x0303, AUTO, "AFSearch", &stdInterpreter}, 685 {0, AC_WRITE, 0, nullptr, 0x0304, AUTO, "AFAreas", &stdInterpreter}, 686 {0, AC_WRITE, 0, nullptr, 0x0400, AUTO, "FlashMode", &stdInterpreter}, 687 {0, AC_WRITE, 0, nullptr, 0x0401, AUTO, "FlashExposureComp", &stdInterpreter}, 688 {0, AC_WRITE, 0, nullptr, 0x0500, AUTO, "WhiteBalance2", &olWhitebalance2Interpreter}, 689 {0, AC_WRITE, 0, nullptr, 0x0501, AUTO, "WhiteBalanceTemperature", &stdInterpreter}, 690 {0, AC_WRITE, 0, nullptr, 0x0502, AUTO, "WhiteBalanceBracket", &stdInterpreter}, 691 {0, AC_WRITE, 0, nullptr, 0x0503, AUTO, "CustomSaturation", &stdInterpreter}, 692 {0, AC_WRITE, 0, nullptr, 0x0504, AUTO, "ModifiedSaturation", &stdInterpreter}, 693 {0, AC_WRITE, 0, nullptr, 0x0505, AUTO, "ContrastSetting", &stdInterpreter}, 694 {0, AC_WRITE, 0, nullptr, 0x0506, AUTO, "SharpnessSetting", &stdInterpreter}, 695 {0, AC_WRITE, 0, nullptr, 0x0507, AUTO, "ColorSpace", &olColorSpaceInterpreter}, 696 {0, AC_WRITE, 0, nullptr, 0x0509, AUTO, "SceneMode", &olSceneModeInterpreter}, 697 {0, AC_WRITE, 0, nullptr, 0x050a, AUTO, "NoiseReduction", &olNoiseReductionInterpreter}, 698 {0, AC_WRITE, 0, nullptr, 0x050b, AUTO, "DistortionCorrection", &olOnOffInterpreter}, 699 {0, AC_WRITE, 0, nullptr, 0x050c, AUTO, "ShadingCompensation", &olOnOffInterpreter}, 700 {0, AC_WRITE, 0, nullptr, 0x050d, AUTO, "CompressionFactor", &stdInterpreter}, 701 {0, AC_WRITE, 0, nullptr, 0x050f, AUTO, "Gradation", &stdInterpreter}, 702 {0, AC_WRITE, 0, nullptr, 0x0520, AUTO, "PictureMode", &olPictureModeInterpreter}, 703 {0, AC_WRITE, 0, nullptr, 0x0521, AUTO, "PictureModeSaturation", &stdInterpreter}, 704 {0, AC_WRITE, 0, nullptr, 0x0522, AUTO, "PictureModeHue", &stdInterpreter}, 705 {0, AC_WRITE, 0, nullptr, 0x0523, AUTO, "PictureModeContrast", &stdInterpreter}, 706 {0, AC_WRITE, 0, nullptr, 0x0524, AUTO, "PictureModeSharpness", &stdInterpreter}, 707 {0, AC_WRITE, 0, nullptr, 0x0525, AUTO, "PictureModeBWFilter", &olPictureModeBWFilterInterpreter}, 708 {0, AC_WRITE, 0, nullptr, 0x0526, AUTO, "PictureModeTone", &olPictureModeToneInterpreter}, 709 {0, AC_WRITE, 0, nullptr, 0x0527, AUTO, "NoiseFilter", &olNoiseFilterInterpreter}, 710 {0, AC_WRITE, 0, nullptr, 0x0600, AUTO, "DriveMode", &stdInterpreter}, 711 {0, AC_WRITE, 0, nullptr, 0x0601, AUTO, "PanoramaMode", &stdInterpreter}, 712 {0, AC_WRITE, 0, nullptr, 0x0603, AUTO, "ImageQuality2", &olImageQuality2Interpreter}, 713 {0, AC_WRITE, 0, nullptr, 0x0900, AUTO, "ManometerPressure", &stdInterpreter}, 714 {0, AC_WRITE, 0, nullptr, 0x0901, AUTO, "ManometerReading", &stdInterpreter}, 715 {0, AC_WRITE, 0, nullptr, 0x0902, AUTO, "ExtendedWBDetect", &olOnOffInterpreter}, 716 { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} 717 }; 718 719 const TagAttrib olyEquipmentAttribs[] = { 720 {0, AC_WRITE, 0, nullptr, 0x0000, AUTO, "EquipmentVersion", &stdInterpreter}, 721 {0, AC_WRITE, 0, nullptr, 0x0100, AUTO, "CameraType2", &stdInterpreter}, 722 {0, AC_WRITE, 0, nullptr, 0x0101, AUTO, "SerialNumber", &stdInterpreter}, 723 {0, AC_WRITE, 0, nullptr, 0x0102, AUTO, "InternalSerialNumber", &stdInterpreter}, 724 {0, AC_WRITE, 0, nullptr, 0x0103, AUTO, "FocalPlaneDiagonal", &stdInterpreter}, 725 {0, AC_WRITE, 0, nullptr, 0x0104, AUTO, "BodyFirmwareVersion", &stdInterpreter}, 726 {0, AC_WRITE, 0, nullptr, 0x0201, AUTO, "LensType", &olLensTypeInterpreter}, 727 {0, AC_WRITE, 0, nullptr, 0x0202, AUTO, "LensSerialNumber", &stdInterpreter}, 728 {0, AC_WRITE, 0, nullptr, 0x0204, AUTO, "LensFirmwareVersion", &stdInterpreter}, 729 {0, AC_WRITE, 0, nullptr, 0x0205, AUTO, "MaxApertureAtMinFocal", &olApertureInterpreter}, 730 {0, AC_WRITE, 0, nullptr, 0x0206, AUTO, "MaxApertureAtMaxFocal", &olApertureInterpreter}, 731 {0, AC_WRITE, 0, nullptr, 0x0207, AUTO, "MinFocalLength", &stdInterpreter}, 732 {0, AC_WRITE, 0, nullptr, 0x0208, AUTO, "MaxFocalLength", &stdInterpreter}, 733 {0, AC_WRITE, 0, nullptr, 0x020a, AUTO, "MaxApertureAtCurrentFocal", &olApertureInterpreter}, 734 {0, AC_WRITE, 0, nullptr, 0x020b, AUTO, "LensProperties", &stdInterpreter}, 735 {0, AC_WRITE, 0, nullptr, 0x0301, AUTO, "Extender", &stdInterpreter}, 736 {0, AC_WRITE, 0, nullptr, 0x0302, AUTO, "ExtenderSerialNumber", &stdInterpreter}, 737 {0, AC_WRITE, 0, nullptr, 0x0303, AUTO, "ExtenderModel", &stdInterpreter}, 738 {0, AC_WRITE, 0, nullptr, 0x0304, AUTO, "ExtenderFirmwareVersion", &stdInterpreter}, 739 {0, AC_WRITE, 0, nullptr, 0x1000, AUTO, "FlashType", &olFlashTypeInterpreter}, 740 {0, AC_WRITE, 0, nullptr, 0x1001, AUTO, "FlashModel", &olFlashModelInterpreter}, 741 {0, AC_WRITE, 0, nullptr, 0x1002, AUTO, "FlashFirmwareVersion", &stdInterpreter}, 742 {0, AC_WRITE, 0, nullptr, 0x1003, AUTO, "FlashSerialNumber", &stdInterpreter}, 743 { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} 744 }; 745 746 const TagAttrib olympusAttribs[] = { 747 {0, AC_WRITE, 0, nullptr, 0x0104, AUTO, "BodyFirmwareVersion", &stdInterpreter}, 748 {0, AC_WRITE, 0, nullptr, 0x0200, AUTO, "SpecialMode", &stdInterpreter}, 749 {0, AC_WRITE, 0, nullptr, 0x0201, AUTO, "Quality", &stdInterpreter}, 750 {0, AC_WRITE, 0, nullptr, 0x0202, AUTO, "Macro", &olOnOffInterpreter}, 751 {0, AC_WRITE, 0, nullptr, 0x0203, AUTO, "BWMode", &olOnOffInterpreter}, 752 {0, AC_WRITE, 0, nullptr, 0x0204, AUTO, "DigitalZoom", &stdInterpreter}, 753 {0, AC_WRITE, 0, nullptr, 0x0205, AUTO, "FocalPlaneDiagonal", &stdInterpreter}, 754 {0, AC_WRITE, 0, nullptr, 0x0206, AUTO, "LensDistortionParams", &stdInterpreter}, 755 {0, AC_WRITE, 0, nullptr, 0x0207, AUTO, "CameraType", &stdInterpreter}, 756 {1, AC_WRITE, 0, nullptr, 0x0208, AUTO, "TextInfo", &stdInterpreter}, 757 {0, AC_WRITE, 0, nullptr, 0x0209, AUTO, "CameraID", &stdInterpreter}, 758 {0, AC_WRITE, 0, nullptr, 0x020b, AUTO, "EpsonImageWidth", &stdInterpreter}, 759 {0, AC_WRITE, 0, nullptr, 0x020c, AUTO, "EpsonImageHeight", &stdInterpreter}, 760 {0, AC_WRITE, 0, nullptr, 0x020d, AUTO, "EpsonSoftware", &stdInterpreter}, 761 {0, AC_SYSTEM, 0, nullptr, 0x0280, AUTO, "PreviewImage", &stdInterpreter}, 762 {0, AC_WRITE, 0, nullptr, 0x0300, AUTO, "PreCaptureFrames", &stdInterpreter}, 763 {0, AC_WRITE, 0, nullptr, 0x0301, AUTO, "WhiteBoard", &stdInterpreter}, 764 {0, AC_WRITE, 0, nullptr, 0x0302, AUTO, "OneTouchWB", &olOnOffInterpreter}, 765 {0, AC_WRITE, 0, nullptr, 0x0303, AUTO, "WhiteBalanceBracket", &stdInterpreter}, 766 {0, AC_WRITE, 0, nullptr, 0x0304, AUTO, "WhiteBalanceBias", &stdInterpreter}, 767 {0, AC_WRITE, 0, nullptr, 0x0403, AUTO, "SceneMode", &stdInterpreter}, 768 {0, AC_WRITE, 0, nullptr, 0x0404, AUTO, "SerialNumber", &stdInterpreter}, 769 {0, AC_WRITE, 0, nullptr, 0x0405, AUTO, "Firmware", &stdInterpreter}, 770 {1, AC_WRITE, 0, nullptr, 0x0e00, AUTO, "PrintIM", &stdInterpreter}, 771 {0, AC_WRITE, 0, nullptr, 0x0f00, AUTO, "DataDump", &stdInterpreter}, 772 {0, AC_WRITE, 0, nullptr, 0x0f01, AUTO, "DataDump2", &stdInterpreter}, 773 {0, AC_WRITE, 0, nullptr, 0x1000, AUTO, "ShutterSpeedValue", &stdInterpreter}, 774 {0, AC_WRITE, 0, nullptr, 0x1001, AUTO, "ISOValue", &stdInterpreter}, 775 {0, AC_WRITE, 0, nullptr, 0x1002, AUTO, "ApertureValue", &stdInterpreter}, 776 {0, AC_WRITE, 0, nullptr, 0x1003, AUTO, "BrightnessValue", &stdInterpreter}, 777 {0, AC_WRITE, 0, nullptr, 0x1004, AUTO, "FlashMode", &stdInterpreter}, 778 {0, AC_WRITE, 0, nullptr, 0x1005, AUTO, "FlashDevice", &stdInterpreter}, 779 {0, AC_WRITE, 0, nullptr, 0x1006, AUTO, "ExposureCompensation", &stdInterpreter}, 780 {0, AC_WRITE, 0, nullptr, 0x1007, AUTO, "SensorTemperature", &stdInterpreter}, 781 {0, AC_WRITE, 0, nullptr, 0x1008, AUTO, "LensTemperature", &stdInterpreter}, 782 {0, AC_WRITE, 0, nullptr, 0x1009, AUTO, "LightCondition", &stdInterpreter}, 783 {0, AC_WRITE, 0, nullptr, 0x100a, AUTO, "FocusRange", &stdInterpreter}, 784 {0, AC_WRITE, 0, nullptr, 0x100b, AUTO, "FocusMode", &stdInterpreter}, 785 {0, AC_WRITE, 0, nullptr, 0x100c, AUTO, "ManualFocusDistance", &stdInterpreter}, 786 {0, AC_WRITE, 0, nullptr, 0x100d, AUTO, "ZoomStepCount", &stdInterpreter}, 787 {0, AC_WRITE, 0, nullptr, 0x100e, AUTO, "FocusStepCount", &stdInterpreter}, 788 {0, AC_WRITE, 0, nullptr, 0x100f, AUTO, "Sharpness", &stdInterpreter}, 789 {0, AC_WRITE, 0, nullptr, 0x1010, AUTO, "FlashChargeLevel", &stdInterpreter}, 790 {0, AC_WRITE, 0, nullptr, 0x1011, AUTO, "ColorMatrix", &stdInterpreter}, 791 {0, AC_WRITE, 0, nullptr, 0x1012, AUTO, "BlackLevel", &stdInterpreter}, 792 {0, AC_WRITE, 0, nullptr, 0x1013, AUTO, "ColorTemperatureBG", &stdInterpreter}, 793 {0, AC_WRITE, 0, nullptr, 0x1014, AUTO, "ColorTemperatureRG", &stdInterpreter}, 794 {0, AC_WRITE, 0, nullptr, 0x1015, AUTO, "WBMode", &stdInterpreter}, 795 {0, AC_WRITE, 0, nullptr, 0x1017, AUTO, "RedBalance", &stdInterpreter}, 796 {0, AC_WRITE, 0, nullptr, 0x1018, AUTO, "BlueBalance", &stdInterpreter}, 797 {0, AC_WRITE, 0, nullptr, 0x1019, AUTO, "ColorMatrixNumber", &stdInterpreter}, 798 {0, AC_WRITE, 0, nullptr, 0x101a, AUTO, "SerialNumber", &stdInterpreter}, 799 {0, AC_WRITE, 0, nullptr, 0x101b, AUTO, "ExternalFlashAE1_0", &stdInterpreter}, 800 {0, AC_WRITE, 0, nullptr, 0x101c, AUTO, "ExternalFlashAE2_0", &stdInterpreter}, 801 {0, AC_WRITE, 0, nullptr, 0x101d, AUTO, "InternalFlashAE1_0", &stdInterpreter}, 802 {0, AC_WRITE, 0, nullptr, 0x101e, AUTO, "InternalFlashAE2_0", &stdInterpreter}, 803 {0, AC_WRITE, 0, nullptr, 0x101f, AUTO, "ExternalFlashAE1", &stdInterpreter}, 804 {0, AC_WRITE, 0, nullptr, 0x1020, AUTO, "ExternalFlashAE2", &stdInterpreter}, 805 {0, AC_WRITE, 0, nullptr, 0x1021, AUTO, "InternalFlashAE1", &stdInterpreter}, 806 {0, AC_WRITE, 0, nullptr, 0x1022, AUTO, "InternalFlashAE2", &stdInterpreter}, 807 {0, AC_WRITE, 0, nullptr, 0x1023, AUTO, "FlashExposureComp", &stdInterpreter}, 808 {0, AC_WRITE, 0, nullptr, 0x1024, AUTO, "InternalFlashTable", &stdInterpreter}, 809 {0, AC_WRITE, 0, nullptr, 0x1025, AUTO, "ExternalFlashGValue", &stdInterpreter}, 810 {0, AC_WRITE, 0, nullptr, 0x1026, AUTO, "ExternalFlashBounce", &olYesNoInterpreter}, 811 {0, AC_WRITE, 0, nullptr, 0x1027, AUTO, "ExternalFlashZoom", &stdInterpreter}, 812 {0, AC_WRITE, 0, nullptr, 0x1028, AUTO, "ExternalFlashMode", &stdInterpreter}, 813 {0, AC_WRITE, 0, nullptr, 0x1029, AUTO, "Contrast", &stdInterpreter}, 814 {0, AC_WRITE, 0, nullptr, 0x102a, AUTO, "SharpnessFactor", &stdInterpreter}, 815 {0, AC_WRITE, 0, nullptr, 0x102b, AUTO, "ColorControl", &stdInterpreter}, 816 {0, AC_WRITE, 0, nullptr, 0x102c, AUTO, "ValidBits", &stdInterpreter}, 817 {0, AC_WRITE, 0, nullptr, 0x102d, AUTO, "CoringFilter", &stdInterpreter}, 818 {0, AC_WRITE, 0, nullptr, 0x102e, AUTO, "OlympusImageWidth", &stdInterpreter}, 819 {0, AC_WRITE, 0, nullptr, 0x102f, AUTO, "OlympusImageHeight", &stdInterpreter}, 820 {0, AC_WRITE, 0, nullptr, 0x1030, AUTO, "SceneDetect", &stdInterpreter}, 821 {0, AC_WRITE, 0, nullptr, 0x1031, AUTO, "SceneArea", &stdInterpreter}, 822 {0, AC_WRITE, 0, nullptr, 0x1033, AUTO, "SceneDetectData", &stdInterpreter}, 823 {0, AC_WRITE, 0, nullptr, 0x1034, AUTO, "CompressionRatio", &stdInterpreter}, 824 {1, AC_WRITE, 0, nullptr, 0x1035, AUTO, "PreviewImageValid", &olYesNoInterpreter}, 825 {1, AC_WRITE, 0, nullptr, 0x1036, AUTO, "PreviewImageStart", &stdInterpreter}, 826 {1, AC_WRITE, 0, nullptr, 0x1037, AUTO, "PreviewImageLength", &stdInterpreter}, 827 {0, AC_WRITE, 0, nullptr, 0x1038, AUTO, "AFResult", &stdInterpreter}, 828 {0, AC_WRITE, 0, nullptr, 0x1039, AUTO, "CCDScanMode", &stdInterpreter}, 829 {0, AC_WRITE, 0, nullptr, 0x103a, AUTO, "NoiseReduction", &olOnOffInterpreter}, 830 {0, AC_WRITE, 0, nullptr, 0x103b, AUTO, "InfinityLensStep", &stdInterpreter}, 831 {0, AC_WRITE, 0, nullptr, 0x103c, AUTO, "NearLensStep", &stdInterpreter}, 832 {0, AC_WRITE, 0, nullptr, 0x103d, AUTO, "LightValueCenter", &stdInterpreter}, 833 {0, AC_WRITE, 0, nullptr, 0x103e, AUTO, "LightValuePeriphery", &stdInterpreter}, 834 {0, AC_WRITE, 0, nullptr, 0x103f, AUTO, "FieldCount", &stdInterpreter}, 835 {0, AC_WRITE, 0, olyEquipmentAttribs, 0x2010, AUTO, "Equipment", &stdInterpreter}, 836 {0, AC_WRITE, 0, olyCameraSettingsAttribs, 0x2020, AUTO, "CameraSettings", &stdInterpreter}, 837 {0, AC_WRITE, 0, olyRawDevelopmentAttribs, 0x2030, AUTO, "RawDevelopment", &stdInterpreter}, 838 {0, AC_WRITE, 0, olyRawDevelopment2Attribs, 0x2031, AUTO, "RawDev2", &stdInterpreter}, 839 {0, AC_WRITE, 0, olyImageProcessingAttribs, 0x2040, AUTO, "ImageProcessing", &stdInterpreter}, 840 {0, AC_WRITE, 0, olyFocusInfoAttribs, 0x2050, AUTO, "FocusInfo", &stdInterpreter}, 841 {1, AC_WRITE, 0, nullptr, 0x2100, AUTO, "Olympus2100", &stdInterpreter}, 842 {1, AC_WRITE, 0, nullptr, 0x2300, AUTO, "Olympus2300", &stdInterpreter}, 843 {1, AC_WRITE, 0, nullptr, 0x2400, AUTO, "Olympus2400", &stdInterpreter}, 844 {1, AC_WRITE, 0, nullptr, 0x2500, AUTO, "Olympus2500", &stdInterpreter}, 845 {1, AC_WRITE, 0, nullptr, 0x2600, AUTO, "Olympus2600", &stdInterpreter}, 846 {1, AC_WRITE, 0, nullptr, 0x2700, AUTO, "Olympus2700", &stdInterpreter}, 847 {1, AC_WRITE, 0, nullptr, 0x2800, AUTO, "Olympus2800", &stdInterpreter}, 848 {1, AC_WRITE, 0, nullptr, 0x2900, AUTO, "Olympus2900", &stdInterpreter}, 849 {0, AC_WRITE, 0, nullptr, 0x3000, AUTO, "RawInfo", &stdInterpreter}, 850 { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} 851 }; 852 } 853 #endif 854 855