Coverage Report

Created: 2026-04-29 07:00

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/LibRaw/src/metadata/normalize_model.cpp
Line
Count
Source
1
/* -*- C++ -*-
2
 * Copyright 2019-2025 LibRaw LLC (info@libraw.org)
3
 *
4
5
 LibRaw is free software; you can redistribute it and/or modify
6
 it under the terms of the one of two licenses as you choose:
7
8
1. GNU LESSER GENERAL PUBLIC LICENSE version 2.1
9
   (See file LICENSE.LGPL provided in LibRaw distribution archive for details).
10
11
2. COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
12
   (See file LICENSE.CDDL provided in LibRaw distribution archive for details).
13
14
 */
15
16
#include "../../internal/dcraw_defs.h"
17
#include "../../internal/libraw_cameraids.h"
18
19
void LibRaw::GetNormalizedModel()
20
0
{
21
22
0
  int i, j;
23
0
  char *ps;
24
0
  int try_xml = 0;
25
26
0
  static const struct
27
0
  {
28
0
    unsigned long long id;
29
0
    char t_model[20];
30
0
  } unique[] =
31
// clang-format off
32
0
    {
33
0
      { CanonID_EOS_M50,           "EOS M50"}, // Kiss M
34
0
      { CanonID_EOS_M6_Mark_II,    "EOS M6 Mark II"},
35
0
      { CanonID_EOS_M200,          "EOS M200"},
36
0
      { CanonID_EOS_D30,           "EOS D30"},
37
0
      { CanonID_EOS_D60,           "EOS D60"},
38
0
      { CanonID_EOS_M3,            "EOS M3"},
39
0
      { CanonID_EOS_M10,           "EOS M10"},
40
0
      { CanonID_EOS_M5,            "EOS M5"},
41
0
      { CanonID_EOS_M100,          "EOS M100"},
42
0
      { CanonID_EOS_M6,            "EOS M6"},
43
44
0
      { CanonID_EOS_R5_C,          "EOS R5 C"},
45
46
0
      { CanonID_EOS_1D,            "EOS-1D"},
47
0
      { CanonID_EOS_1Ds,           "EOS-1Ds"},
48
0
      { CanonID_EOS_10D,           "EOS 10D"},
49
0
      { CanonID_EOS_1D_Mark_III,   "EOS-1D Mark III"},
50
0
      { CanonID_EOS_300D,          "EOS 300D"}, // Digital Rebel / Kiss Digital
51
0
      { CanonID_EOS_1D_Mark_II,    "EOS-1D Mark II"},
52
0
      { CanonID_EOS_20D,           "EOS 20D"},
53
0
      { CanonID_EOS_450D,          "EOS 450D"}, // Digital Rebel XSi / Kiss X2
54
0
      { CanonID_EOS_1Ds_Mark_II,   "EOS-1Ds Mark II"},
55
0
      { CanonID_EOS_350D,          "EOS 350D"}, // Digital Rebel XT / Kiss Digital N
56
0
      { CanonID_EOS_40D,           "EOS 40D"},
57
0
      { CanonID_EOS_5D,            "EOS 5D"},
58
0
      { CanonID_EOS_1Ds_Mark_III,  "EOS-1Ds Mark III"},
59
0
      { CanonID_EOS_5D_Mark_II,    "EOS 5D Mark II"},
60
0
      { CanonID_EOS_1D_Mark_II_N,  "EOS-1D Mark II N"},
61
0
      { CanonID_EOS_30D,           "EOS 30D"},
62
0
      { CanonID_EOS_400D,          "EOS 400D"}, // Digital Rebel XTi / Kiss Digital X
63
0
      { CanonID_EOS_7D,            "EOS 7D"},
64
0
      { CanonID_EOS_500D,          "EOS 500D"},   // Rebel T1i / Kiss X3
65
0
      { CanonID_EOS_1000D,         "EOS 1000D"}, // Digital Rebel XS / Kiss F
66
0
      { CanonID_EOS_50D,           "EOS 50D"},
67
0
      { CanonID_EOS_1D_X,          "EOS-1D X"},
68
0
      { CanonID_EOS_550D,          "EOS 550D"}, // Rebel T2i / Kiss X4
69
0
      { CanonID_EOS_1D_Mark_IV,    "EOS-1D Mark IV"},
70
0
      { CanonID_EOS_5D_Mark_III,   "EOS 5D Mark III"},
71
0
      { CanonID_EOS_600D,          "EOS 600D"}, // Rebel T3i / Kiss X5
72
0
      { CanonID_EOS_60D,           "EOS 60D"},
73
0
      { CanonID_EOS_1100D,         "EOS 1100D"}, // Rebel T3 / Kiss X50
74
0
      { CanonID_EOS_7D_Mark_II,    "EOS 7D Mark II"},
75
0
      { CanonID_EOS_650D,          "EOS 650D"}, // Rebel T4i / Kiss X6i
76
0
      { CanonID_EOS_6D,            "EOS 6D"},
77
0
      { CanonID_EOS_1D_C,          "EOS-1D C"},
78
0
      { CanonID_EOS_70D,           "EOS 70D"},
79
0
      { CanonID_EOS_700D,          "EOS 700D"},   // Rebel T5i / Kiss X7i
80
0
      { CanonID_EOS_1200D,         "EOS 1200D"}, // Rebel T5 / Kiss X70 / Hi
81
0
      { CanonID_EOS_1D_X_Mark_II,  "EOS-1D X Mark II"},
82
0
      { CanonID_EOS_M,             "EOS M"},
83
0
      { CanonID_EOS_100D,          "EOS 100D"}, // Rebel SL1 / Kiss X7
84
0
      { CanonID_EOS_760D,          "EOS 760D"}, // Rebel T6s / 8000D
85
0
      { CanonID_EOS_5D_Mark_IV,    "EOS 5D Mark IV"},
86
0
      { CanonID_EOS_80D,           "EOS 80D"},
87
0
      { CanonID_EOS_M2,            "EOS M2"},
88
0
      { CanonID_EOS_5DS,           "EOS 5DS"},
89
0
      { CanonID_EOS_750D,          "EOS 750D"}, // Rebel T6i / Kiss X8i
90
0
      { CanonID_EOS_5DS_R,         "EOS 5DS R"},
91
0
      { CanonID_EOS_1300D,         "EOS 1300D"}, // Rebel T6 / Kiss X80
92
0
      { CanonID_EOS_800D,          "EOS 800D"},   // Rebel T7i / Kiss X9i
93
0
      { CanonID_EOS_6D_Mark_II,    "EOS 6D Mark II"},
94
0
      { CanonID_EOS_77D,           "EOS 77D"},     // 9000D
95
0
      { CanonID_EOS_200D,          "EOS 200D"},   // Rebel SL2 / Kiss X9
96
0
      { CanonID_EOS_R5,            "EOS R5"},
97
0
      { CanonID_EOS_3000D,         "EOS 3000D"}, // Rebel T100 / 4000D
98
0
      { CanonID_EOS_R,             "EOS R"},
99
0
      { CanonID_EOS_1D_X_Mark_III, "EOS-1D X Mark III"},
100
0
      { CanonID_EOS_1500D,         "EOS 1500D"}, // Rebel T7 / 2000D / Kiss X90
101
0
      { CanonID_EOS_RP,            "EOS RP"},
102
0
      { CanonID_EOS_850D,          "EOS 850D"},  // EOS Rebel T8i / X10i
103
0
      { CanonID_EOS_250D,          "EOS 250D"}, // Rebel SL3 / 200D II / Kiss X10
104
0
      { CanonID_EOS_90D,           "EOS 90D"},
105
0
      { CanonID_EOS_R3,            "EOS R3"},
106
0
      { CanonID_EOS_R6,            "EOS R6"},
107
0
      { CanonID_EOS_R7,            "EOS R7"},
108
0
      { CanonID_EOS_R10,           "EOS R10"},
109
0
      { CanonID_EOS_M50_Mark_II,   "EOS M50 Mark II"}, // M50m2, Kiss M2
110
0
      { CanonID_EOS_R50,           "EOS R50"},
111
0
      { CanonID_EOS_R6m2,          "EOS R6 Mark II"},
112
0
      { CanonID_EOS_R8,            "EOS R8"},
113
0
      { CanonID_EOS_R1,            "EOS R1"},
114
0
      { CanonID_EOS_R5_Mark_II,    "EOS R5 Mark II"}, // EOS R5m2
115
0
      { CanonID_EOS_R100,          "EOS R100"}
116
0
    },
117
#if 0
118
    olyque[] = {
119
      { OlyID_E_20,            "E-20"},
120
      { OlyID_E_20,            "E-20,E-20N,E-20P"},
121
      { OlyID_E_1,             "E-1"},
122
      { OlyID_E_300,           "E-300"},
123
      { OlyID_SP_550UZ,        "SP-550UZ"},
124
      { OlyID_SP_550UZ,        "SP550UZ"},
125
      { OlyID_SP_510UZ,        "SP-510UZ"},
126
      { OlyID_SP_510UZ,        "SP510UZ"},
127
      { OlyID_SP_560UZ,        "SP-560UZ"},
128
      { OlyID_SP_560UZ,        "SP560UZ"},
129
      { OlyID_SP_570UZ,        "SP-570UZ"},
130
      { OlyID_SP_570UZ,        "SP570UZ"},
131
      { OlyID_SP_565UZ,        "SP-565UZ"},
132
      { OlyID_SP_565UZ,        "SP565UZ"},
133
      { OlyID_XZ_1,            "XZ-1"},
134
      { OlyID_XZ_2,            "XZ-2"},
135
      { OlyID_XZ_10,           "XZ-10"},
136
      { OlyID_STYLUS_1,        "Stylus 1"},
137
      { OlyID_STYLUS_1,        "STYLUS1"},
138
      { OlyID_STYLUS_1,        "STYLUS1,1s"},
139
      { OlyID_SH_2,            "SH-2"},
140
      { OlyID_TG_4,            "TG-4"},
141
      { OlyID_TG_5,            "TG-5"},
142
      { OlyID_TG_6,            "TG-6"},
143
      { OlyID_TG_7,            "TG-7"},
144
      { OlyID_E_10,            "E-10"},
145
      { OlyID_AIR_A01,         "AIR A01"},
146
      { OlyID_AIR_A01,         "AIR-A01"},
147
      { OlyID_E_330,           "E-330"},
148
      { OlyID_E_500,           "E-500"},
149
      { OlyID_E_400,           "E-400"},
150
      { OlyID_E_510,           "E-510"},
151
      { OlyID_E_3,             "E-3"},
152
      { OlyID_E_410,           "E-410"},
153
      { OlyID_E_420,           "E-420"},
154
      { OlyID_E_30,            "E-30"},
155
      { OlyID_E_520,           "E-520"},
156
      { OlyID_E_P1,            "E-P1"},
157
      { OlyID_E_620,           "E-620"},
158
      { OlyID_E_P2,            "E-P2"},
159
      { OlyID_E_PL1,           "E-PL1"},
160
      { OlyID_E_450,           "E-450"},
161
      { OlyID_E_600,           "E-600"},
162
      { OlyID_E_P3,            "E-P3"},
163
      { OlyID_E_5,             "E-5"},
164
      { OlyID_E_PL2,           "E-PL2"},
165
      { OlyID_E_M5,            "E-M5"},
166
      { OlyID_E_PL3,           "E-PL3"},
167
      { OlyID_E_PM1,           "E-PM1"},
168
      { OlyID_E_PL1s,          "E-PL1s"},
169
      { OlyID_E_PL5,           "E-PL5"},
170
      { OlyID_E_PM2,           "E-PM2"},
171
      { OlyID_E_P5,            "E-P5"},
172
      { OlyID_E_PL6,           "E-PL6"},
173
      { OlyID_E_PL7,           "E-PL7"},
174
      { OlyID_E_M1,            "E-M1"},
175
      { OlyID_E_M10,           "E-M10"},
176
      { OlyID_E_M5_Mark_II,    "E-M5 Mark II"},
177
      { OlyID_E_M5_Mark_II,    "E-M5MarkII"},
178
      { OlyID_E_M5_Mark_II,    "E-M5_M2"},
179
      { OlyID_E_M10_Mark_II,   "E-M10 Mark II"}, // Clauss piX 5oo
180
      { OlyID_E_M10_Mark_II,   "E-M10MarkII"},
181
      { OlyID_E_M10_Mark_II,   "E-M10_M2"},
182
      { OlyID_PEN_F,           "PEN-F"},
183
      { OlyID_E_PL8,           "E-PL8"},
184
      { OlyID_E_M1_Mark_II,    "E-M1 Mark II"},
185
      { OlyID_E_M1_Mark_II,    "E-M1MarkII"},
186
      { OlyID_E_M1_Mark_II,    "E-M1_M2"},
187
      { OlyID_E_M10_Mark_III,  "E-M10 Mark III"},
188
      { OlyID_E_M10_Mark_III,  "E-M10_M3"},
189
      { OlyID_E_PL9,           "E-PL9"},
190
      { OlyID_E_M1X,           "E-M1X"},
191
      { OlyID_E_PL10,          "E-PL10"},
192
      { OlyID_E_M10_Mark_IV,   "E-M10 Mark IV"},
193
      { OlyID_E_M10_Mark_IV,   "E-M10MarkIV"},
194
      { OlyID_E_M10_Mark_IV,   "E-M10_M4"},
195
      { OlyID_E_M5_Mark_III,   "E-M5 Mark III"},
196
      { OlyID_E_M5_Mark_III,   "E-M5MarkIII"},
197
      { OlyID_E_M5_Mark_III,   "E-M5_M3"},
198
      { OlyID_E_M1_Mark_III,   "E-M1 Mark III"},
199
      { OlyID_E_M1_Mark_III,   "E-M1MarkIII"},
200
      { OlyID_E_M1_Mark_III,   "E-M1_M3"},
201
      { OlyID_E_P7             "E-P7"},
202
      { OlyID_C_3030Z,         "C-3030Z"},
203
      { OlyID_C_3030Z,         "C3030Z"},
204
      { OlyID_C_5050Z,         "C-5050Z"},
205
      { OlyID_C_5050Z,         "C5050Z"},
206
      { OlyID_C_350Z,          "C-350Z"},
207
      { OlyID_C_350Z,          "X200,D560Z,C350Z"},
208
      { OlyID_C_740UZ,         "C-740UZ"},
209
      { OlyID_C_740UZ,         "C740UZ"},
210
      { OlyID_C_5060WZ,        "C-5060WZ"},
211
      { OlyID_C_5060WZ,        "C5060WZ"},
212
      { OlyID_C_8080WZ,        "C-8080WZ"},
213
      { OlyID_C_8080WZ,        "C8080WZ"},
214
      { OlyID_C_770UZ,         "C-770UZ"},
215
      { OlyID_C_770UZ,         "C770UZ"},
216
      { OlyID_C_7070WZ,        "C-7070WZ"},
217
      { OlyID_C_7070WZ,        "C7070WZ"},
218
      { OlyID_C_7000Z,         "C-7000Z"},
219
      { OlyID_C_7000Z,         "C70Z,C7000Z"},
220
      { OlyID_SP_500UZ,        "SP-500UZ"},
221
      { OlyID_SP_500UZ,        "SP500UZ"},
222
      { OlyID_SP_310,          "SP-310"},
223
      { OlyID_SP_310,          "SP310"},
224
      { OlyID_SP_350,          "SP-350"},
225
      { OlyID_SP_350,          "SP350"},
226
      { OlyID_SP_320,          "SP-320"},
227
      { OlyID_SP_320,          "SP320"},
228
    },
229
230
    penique[] = {
231
      { PentaxID_Optio_S,      "Optio S"},
232
      { PentaxID_Optio_S_V101, "Optio S V1.01"},
233
      { PentaxID_staristD,     "*istD"},
234
      { PentaxID_staristD,     "*ist D"},
235
      { PentaxID_Optio_33WR,   "Optio 33WR"},
236
      { PentaxID_Optio_S4,     "Optio S4"},
237
      { PentaxID_Optio_750Z,   "Optio 750Z"},
238
      { PentaxID_staristDS,    "*istDS"},
239
      { PentaxID_staristDS,    "*ist DS"},
240
      { PentaxID_staristDL,    "*istDL"},
241
      { PentaxID_staristDL,    "*ist DL"},
242
      { PentaxID_staristDS2,   "*istDS2"},
243
      { PentaxID_staristDS2,   "*ist DS2"},
244
      { PentaxID_GX_1S,        "GX-1S"},        // Samsung
245
      { PentaxID_staristDL2,   "*istDL2"},
246
      { PentaxID_staristDL2,   "*ist DL2"},
247
      { PentaxID_GX_1L,        "GX-1L"},        // Samsung
248
      { PentaxID_K100D,        "K100D"},
249
      { PentaxID_K110D,        "K110D"},
250
      { PentaxID_K100D_Super,  "K100D Super"},
251
      { PentaxID_K10D,         "K10D"},
252
      { PentaxID_GX10,         "GX10"},         // Samsung
253
      { PentaxID_GX10,         "GX-10"},        // Samsung
254
      { PentaxID_K20D,         "K20D"},
255
      { PentaxID_GX20,         "GX20"},         // Samsung
256
      { PentaxID_GX20,         "GX-20"},        // Samsung
257
      { PentaxID_K200D,        "K200D"},
258
      { PentaxID_K2000,        "K2000"},
259
      { PentaxID_K_m,          "K-m"},
260
      { PentaxID_K_7,          "K-7"},
261
      { PentaxID_K_x,          "K-x"},
262
      { PentaxID_645D,         "645D"},
263
      { PentaxID_K_r,          "K-r"},
264
      { PentaxID_K_5,          "K-5"},
265
      { PentaxID_Q,            "Q"},
266
      { PentaxID_K_01,         "K-01"},
267
      { PentaxID_K_30,         "K-30"},
268
      { PentaxID_Q10,          "Q10"},
269
      { PentaxID_K_5_II,       "K-5 II"},
270
      { PentaxID_K_5_II_s,     "K-5 II s"},
271
      { PentaxID_Q7,           "Q7"},
272
      { PentaxID_MX_1,         "MX-1"},
273
      { PentaxID_K_50,         "K-50"},
274
      { PentaxID_K_3,          "K-3"},
275
      { PentaxID_K_500,        "K-500"},
276
      { PentaxID_645Z,         "645Z"},
277
      { PentaxID_K_S1,         "K-S1"},
278
      { PentaxID_K_S2,         "K-S2"},         // Ricoh
279
      { PentaxID_Q_S1,         "Q-S1"},
280
      { PentaxID_K_1,          "K-1"},          // Ricoh
281
      { PentaxID_K_3_II,       "K-3 II"},       // Ricoh
282
      { PentaxID_GR_III,       "GR III"},       // Ricoh
283
      { PentaxID_K_70,         "K-70"},         // Ricoh
284
      { PentaxID_KF,           "KF"},           // Ricoh
285
      { PentaxID_KP,           "KP"},           // Ricoh
286
      { PentaxID_K_1_Mark_II,  "K-1 Mark II"},  // Ricoh
287
      { PentaxID_K_3_III,      "K-3 Mark III"}, // Ricoh
288
      { PentaxID_GR_IIIx,      "GR IIIx"},
289
      { PentaxID_K_3_III_Mono, "K-3 Mark III Monochrome"},
290
    },
291
#endif
292
0
    sonique[] = {
293
0
      { SonyID_DSC_R1,         "DSC-R1"},
294
0
      { SonyID_DSLR_A100,      "DSLR-A100"},
295
0
      { SonyID_DSLR_A900,      "DSLR-A900"},
296
0
      { SonyID_DSLR_A700,      "DSLR-A700"},
297
0
      { SonyID_DSLR_A200,      "DSLR-A200"},
298
0
      { SonyID_DSLR_A350,      "DSLR-A350"},
299
0
      { SonyID_DSLR_A300,      "DSLR-A300"},
300
0
      { SonyID_DSLR_A900_APSC, "DSLR-A900"},
301
0
      { SonyID_DSLR_A380,      "DSLR-A380"},    // DSLR-A390
302
0
      { SonyID_DSLR_A330,      "DSLR-A330"},
303
0
      { SonyID_DSLR_A230,      "DSLR-A230"},
304
0
      { SonyID_DSLR_A290,      "DSLR-A290"},
305
0
      { SonyID_DSLR_A850,      "DSLR-A850"},
306
0
      { SonyID_DSLR_A850_APSC, "DSLR-A850"},
307
0
      { SonyID_DSLR_A550,      "DSLR-A550"},
308
0
      { SonyID_DSLR_A500,      "DSLR-A500"},
309
0
      { SonyID_DSLR_A450,      "DSLR-A450"},
310
0
      { SonyID_NEX_5,          "NEX-5"},
311
0
      { SonyID_NEX_3,          "NEX-3"},
312
0
      { SonyID_SLT_A33,        "SLT-A33"},
313
0
      { SonyID_SLT_A55,        "SLT-A55"},      // SLT-A55V
314
0
      { SonyID_DSLR_A560,      "DSLR-A560"},
315
0
      { SonyID_DSLR_A580,      "DSLR-A580"},
316
0
      { SonyID_NEX_C3,         "NEX-C3"},
317
0
      { SonyID_SLT_A35,        "SLT-A35"},
318
0
      { SonyID_SLT_A65,        "SLT-A65"},      // SLT-A65V
319
0
      { SonyID_SLT_A77,        "SLT-A77"},      // SLT-A77V
320
0
      { SonyID_NEX_5N,         "NEX-5N"},
321
0
      { SonyID_NEX_7,          "NEX-7"},        // Hasselblad Lunar
322
0
      { SonyID_NEX_VG20,       "NEX-VG20"},
323
0
      { SonyID_SLT_A37,        "SLT-A37"},
324
0
      { SonyID_SLT_A57,        "SLT-A57"},
325
0
      { SonyID_NEX_F3,         "NEX-F3"},
326
0
      { SonyID_SLT_A99,        "SLT-A99"},      // SLT-A99V / Hasselblad HV
327
0
      { SonyID_NEX_6,          "NEX-6"},
328
0
      { SonyID_NEX_5R,         "NEX-5R"},
329
0
      { SonyID_DSC_RX100,      "DSC-RX100"},    // Hasselblad Stellar
330
0
      { SonyID_DSC_RX1,        "DSC-RX1"},
331
0
      { SonyID_NEX_VG900,      "NEX-VG900"},
332
0
      { SonyID_NEX_VG30,       "NEX-VG30"},
333
0
      { SonyID_ILCE_3000,      "ILCE-3000"},    // ILCE-3500
334
0
      { SonyID_SLT_A58,        "SLT-A58"},
335
0
      { SonyID_NEX_3N,         "NEX-3N"},
336
0
      { SonyID_ILCE_7,         "ILCE-7"},
337
0
      { SonyID_NEX_5T,         "NEX-5T"},
338
0
      { SonyID_DSC_RX100M2,    "DSC-RX100M2"},  // Hasselblad Stellar II
339
0
      { SonyID_DSC_RX10,       "DSC-RX10"},
340
0
      { SonyID_DSC_RX1R,       "DSC-RX1R"},
341
0
      { SonyID_ILCE_7R,        "ILCE-7R"},      // Hasselblad Lusso
342
0
      { SonyID_ILCE_6000,      "ILCE-6000"},
343
0
      { SonyID_ILCE_5000,      "ILCE-5000"},
344
0
      { SonyID_DSC_RX100M3,    "DSC-RX100M3"},
345
0
      { SonyID_ILCE_7S,        "ILCE-7S"},
346
0
      { SonyID_ILCA_77M2,      "ILCA-77M2"},
347
0
      { SonyID_ILCE_5100,      "ILCE-5100"},
348
0
      { SonyID_ILCE_7M2,       "ILCE-7M2"},
349
0
      { SonyID_DSC_RX100M4,    "DSC-RX100M4"},
350
0
      { SonyID_DSC_RX10M2,     "DSC-RX10M2"},
351
0
      { SonyID_DSC_RX1RM2,     "DSC-RX1RM2"},
352
0
      { SonyID_ILCE_QX1,       "ILCE-QX1"},     // Sony UMC-R10C
353
0
      { SonyID_ILCE_7RM2,      "ILCE-7RM2"},
354
0
      { SonyID_ILCE_7SM2,      "ILCE-7SM2"},
355
0
      { SonyID_ILCA_68,        "ILCA-68"},
356
0
      { SonyID_ILCA_99M2,      "ILCA-99M2"},
357
0
      { SonyID_DSC_RX10M3,     "DSC-RX10M3"},
358
0
      { SonyID_DSC_RX100M5,    "DSC-RX100M5"},
359
0
      { SonyID_ILCE_6300,      "ILCE-6300"},
360
0
      { SonyID_ILCE_9,         "ILCE-9"},
361
0
      { SonyID_ILCE_6500,      "ILCE-6500"},
362
0
      { SonyID_ILCE_7RM3,      "ILCE-7RM3"},
363
0
      { SonyID_ILCE_7M3,       "ILCE-7M3"},
364
0
      { SonyID_DSC_RX0,        "DSC-RX0"},
365
0
      { SonyID_DSC_RX10M4,     "DSC-RX10M4"},
366
0
      { SonyID_DSC_RX100M6,    "DSC-RX100M6"},
367
0
      { SonyID_DSC_HX99,       "DSC-HX99"},
368
0
      { SonyID_DSC_RX100M5A,   "DSC-RX100M5A"},
369
0
      { SonyID_ILCE_6400,      "ILCE-6400"},
370
0
      { SonyID_DSC_RX0M2,      "DSC-RX0M2"},
371
0
      { SonyID_DSC_HX95,       "DSC-HX95"},
372
0
      { SonyID_DSC_RX100M7,    "DSC-RX100M7"},
373
0
      { SonyID_ILCE_7RM4,      "ILCE-7RM4"},
374
0
      { SonyID_ILCE_9M2,       "ILCE-9M2"},
375
0
      { SonyID_ILCE_6600,      "ILCE-6600"},
376
0
      { SonyID_ILCE_6100,      "ILCE-6100"},
377
0
      { SonyID_ZV_1,           "ZV-1"},
378
0
      { SonyID_ILCE_7C,        "ILCE-7C"},
379
0
      { SonyID_ZV_E10,         "ZV-E10"},
380
0
      { SonyID_ILCE_7SM3,      "ILCE-7SM3"},
381
0
      { SonyID_ILCE_1,         "ILCE-1"},
382
0
      { SonyID_ILCE_1M2,       "ILCE-1M2"},
383
0
      { SonyID_ILME_FX3,       "ILME-FX3"},
384
0
      { SonyID_ILCE_7RM3A,     "ILCE-7RM3A"},
385
0
      { SonyID_ILCE_7RM4A,     "ILCE-7RM4A"},
386
0
      { SonyID_ILCE_7M4,       "ILCE-7M4"},
387
388
// Sony ZV-1F doesn't save raw
389
//      { SonyID_ZV_1F,          "ZV-1F"},
390
391
0
      { SonyID_ILCE_7RM5,      "ILCE-7RM5"},
392
0
      { SonyID_ILME_FX30,      "ILME-FX30"},
393
0
      { SonyID_ILCE_9M3,       "ILCE-9M3"},
394
0
      { SonyID_ZV_E1,          "ZV-E1"},
395
0
      { SonyID_ILCE_6700,      "ILCE-6700"},
396
0
      { SonyID_ZV_1M2,         "ZV-1M2"},
397
0
      { SonyID_ILCE_7CR,       "ILCE-7CR"},
398
0
      { SonyID_ILCE_7CM2,      "ILCE-7CM2"},
399
0
      { SonyID_ILX_LR1,        "ILX-LR1"},
400
0
      { SonyID_ZV_E10M2,       "ZV-E10M2"},
401
0
      { SonyID_ILME_FX2,       "ILME-FX2"},
402
0
};
403
404
0
  static const char *orig;
405
406
0
  static const char fujialias[][16] = {
407
0
    "@DBP for GX680", "DX-2000",
408
0
    "@F500EXR", "F505EXR",
409
0
    "@F600EXR", "F605EXR",
410
0
    "@F770EXR", "F775EXR",
411
0
    "@HS10", "HS10 HS11",
412
0
    "@HS20EXR", "HS22EXR",
413
0
    "@HS30EXR", "HS33EXR", "HS35EXR",
414
0
    "@S5100", "S5500",
415
0
    "@S5200", "S5600",
416
0
    "@S6000fd", "S6500fd",
417
0
    "@S9000", "S9500",
418
0
    "@S9100", "S9600",
419
0
    "@S200EXR", "S205EXR",
420
0
    "@X-T1 IR", "X-T1IR",
421
0
    "@GFX 100 II", "GFX100 II",
422
0
    "@GFX 100S II", "GFX100S II",
423
0
    "@GFX 100S", "GFX100S",
424
0
    "@GFX 50S II", "GFX50S II"
425
0
  };
426
427
0
  static const char kodakalias[][16] = {
428
0
    "@DCS Pro 14N", "Camerz ZDS 14", // Camerz rebadge make: "Photo Control"
429
0
    "@DCS720X", "SCS2000",
430
0
    "@DCS520C", "EOS D2000C", "EOS D2000", // EOS rebadge make: Canon
431
0
    "@DCS560C", "EOS D6000C", "EOS D6000", // EOS rebadge make: Canon
432
0
    "@DCS460M", "DCS460A", // 'A' was supposed to stand for 'achromatic', marketing changed it to 'M'
433
0
    "@DCS460",  "DCS460C", "DCS460D",
434
0
    "@DCS465",  "DCS465C", "DCS465D",
435
0
    "@EOSDCS1", "EOSDCS1B", "EOSDCS1C",
436
0
    "@EOSDCS3", "EOSDCS3B", "EOSDCS3C",
437
0
  };
438
439
0
  static const struct
440
0
  {
441
0
    const char *Kmodel;
442
0
    ushort mount;
443
0
  } Kodak_mounts[] = {
444
0
      {"DCS465", LIBRAW_MOUNT_DigitalBack},
445
0
      {"DCS5", LIBRAW_MOUNT_Canon_EF},
446
0
      {"DCS Pro SLR/c", LIBRAW_MOUNT_Canon_EF},
447
0
      {"DCS", LIBRAW_MOUNT_Nikon_F},
448
0
      {"EOS", LIBRAW_MOUNT_Canon_EF},
449
0
      {"NC2000", LIBRAW_MOUNT_Nikon_F}, // AP "News Camera"
450
0
      {"Pixpro S-1", LIBRAW_MOUNT_mFT},
451
0
      {"ProBack", LIBRAW_MOUNT_DigitalBack},
452
0
      {"SCS1000", LIBRAW_MOUNT_Canon_EF},
453
0
  };
454
455
0
  static const char *KodakMonochrome[] = {
456
0
      "DCS420M",    "DCS420A",  "DCS420I",
457
0
      "DCS460M",    "DCS460A",  "DCS460I",
458
0
      "DCS465M",    "DCS465A",  "DCS465I",
459
0
      "DCS560M",    "DCS660M",  "DCS760M", "EOS D2000M", "EOS D6000M",
460
0
      "EOSDCS1M",   "EOSDCS1I",
461
0
      "EOSDCS3M",   "EOSDCS3I",
462
0
      "EOSDCS5M",   "EOSDCS5I",
463
0
      "NC2000M",    "NC2000A",  "NC2000I",
464
0
  };
465
466
0
  static const char leafalias[][16] = {
467
      // Leaf re-badged to Mamiya
468
0
    "@Aptus-II 5",  "DM22",
469
0
    "@Aptus-II 6",  "DM28",
470
0
    "@Aptus-II 7",  "DM33",
471
0
    "@Aptus-II 8",  "DM40",
472
0
    "@Aptus-II 10", "DM56",
473
0
  };
474
475
0
  static const char KonicaMinolta_aliases[][24] = {
476
0
    "@DG-5D", "DYNAX 5D", "MAXXUM 5D", "ALPHA-5 DIGITAL", "ALPHA SWEET DIGITAL",
477
0
    "@DG-7D", "DYNAX 7D", "MAXXUM 7D", "ALPHA-7 DIGITAL",
478
0
  };
479
480
0
  static const char nikonalias[][16] = {
481
0
      "@COOLPIX 2100",  "E2100",         "@COOLPIX 2500",  "E2500",
482
0
      "@COOLPIX 3200",  "E3200",         "@COOLPIX 3700",  "E3700",
483
0
      "@COOLPIX 4300",  "E4300",         "@COOLPIX 4500",  "E4500",
484
0
      "@COOLPIX 5000",  "E5000",         "@COOLPIX 5400",  "E5400",
485
0
      "@COOLPIX 5700",  "E5700",         "@COOLPIX 8400",  "E8400",
486
0
      "@COOLPIX 8700",  "E8700",         "@COOLPIX 8800",  "E8800",
487
0
      "@COOLPIX 700",   "E700",          "@COOLPIX 800",   "E800",
488
0
      "@COOLPIX 880",   "E880",          "@COOLPIX 900",   "E900",
489
0
      "@COOLPIX 950",   "E950",          "@COOLPIX 990",   "E990",
490
0
      "@COOLPIX 995",   "E995",          "@COOLPIX P7700", "COOLPIX Deneb",
491
0
      "@COOLPIX P7800", "COOLPIX Kalon",
492
0
  };
493
494
0
  static const char olyalias[][32] = { // Olympus
495
0
    "@AIR A01", "AIR-A01",
496
0
    "@C-3030Z", "C3030Z",
497
0
    "@C-5050Z", "C5050Z",
498
0
    "@C-5060WZ", "C5060WZ",
499
0
    "@C-7000Z", "C7000Z", "C70Z,C7000Z", "C70Z",
500
0
    "@C-7070WZ", "C7070WZ",
501
0
    "@C-8080WZ", "C8080WZ",
502
0
    "@C-350Z", "C350Z", "X200,D560Z,C350Z", "X200", "D560Z",
503
0
    "@C-740UZ", "C740UZ",
504
0
    "@C-770UZ", "C770UZ",
505
0
    "@E-20", "E-20,E-20N,E-20P", "E-20N", "E-20P",
506
0
    "@E-M10 Mark II", "E-M10MarkII", "E-M10_M2", "piX 5oo",
507
0
    "@E-M10 Mark III", "E-M10MarkIII", "E-M10_M3",
508
0
    "@E-M10 Mark IV", "E-M10MarkIV", "E-M10_M4",
509
0
    "@E-M1 Mark II", "E-M1MarkII", "E-M1_M2",
510
0
    "@E-M1 Mark III", "E-M1MarkIII", "E-M1_M3",
511
0
    "@E-M5 Mark II", "E-M5MarkII", "E-M5_M2",
512
0
    "@E-M5 Mark III", "E-M5MarkIII", "E-M5_M3",
513
0
    "@OM-1 Mark II", "OM-1MarkII", "OM-1_M2",
514
0
    "@SH-2", "SH-3",
515
0
    "@SP-310", "SP310",
516
0
    "@SP-320", "SP320",
517
0
    "@SP-350", "SP350",
518
0
    "@SP-500UZ", "SP500UZ",
519
0
    "@SP-510UZ", "SP510UZ",
520
0
    "@SP-550UZ", "SP550UZ",
521
0
    "@SP-560UZ", "SP560UZ",
522
0
    "@SP-565UZ", "SP565UZ",
523
0
    "@SP-570UZ", "SP570UZ",
524
0
    "@Stylus 1", "STYLUS1", "STYLUS1s", "STYLUS1,1s",
525
0
  };
526
527
0
  static const char panalias[][16] = { // Panasonic, PanaLeica
528
// fixed lens
529
0
    "@DMC-FX150", "DMC-FX180",
530
0
    "@DC-FZ1000M2", "DC-FZ10002", "V-Lux 5",
531
0
    "@DMC-FZ1000", "V-LUX (Typ 114)",
532
0
    "@DMC-FZ2500", "DMC-FZ2000", "DMC-FZH1",
533
0
    "@DMC-FZ100", "V-LUX 2",
534
0
    "@DMC-FZ150", "V-LUX 3",
535
0
    "@DMC-FZ200", "V-LUX 4",
536
0
    "@DMC-FZ300", "DMC-FZ330",
537
0
    "@DMC-FZ35", "DMC-FZ38",
538
0
    "@DMC-FZ40", "DMC-FZ42", "DMC-FZ45", "DC-FZ40", "DC-FZ42", "DC-FZ45",
539
0
    "@DMC-FZ50", "V-LUX 1", "V-LUX1",
540
0
    "@DMC-FZ70", "DMC-FZ72",
541
0
    "@DC-FZ80", "DC-FZ81", "DC-FZ82", "DC-FZ83", "DC-FZ85",
542
0
    "@DMC-LC1", "DIGILUX 2", "Digilux 2", "DIGILUX2",
543
0
    "@DMC-LF1", "C (Typ 112)",
544
0
    "@DC-LX100M2", "D-Lux 7",
545
0
    "@DMC-LX100", "D-LUX (Typ 109)", "D-Lux (Typ 109)",
546
0
    "@DMC-LX1", "D-Lux2", "D-LUX2", "D-LUX 2",
547
0
    "@DMC-LX2", "D-LUX 3", "D-LUX3",
548
0
    "@DMC-LX3", "D-LUX 4",
549
0
    "@DMC-LX5", "D-LUX 5",
550
0
    "@DMC-LX7", "D-LUX 6",
551
0
    "@DMC-LX9", "DMC-LX10", "DMC-LX15",
552
0
    "@DMC-ZS100", "DMC-ZS110", "DMC-TZ100", "DMC-TZ101", "DMC-TZ110", "DMC-TX1",
553
0
    "@DC-ZS200", "DC-ZS220", "DC-TZ200", "DC-TZ202", "DC-TZ220", "DC-TZ200D", "DC-TZ202D", "DC-TZ220D", "DC-ZS200D", "DC-ZS220D" "DC-TX2", "C-Lux", "CAM-DC25",
554
0
    "@DMC-ZS40", "DMC-TZ60", "DMC-TZ61",
555
0
    "@DMC-ZS50", "DMC-TZ70", "DMC-TZ71",
556
0
    "@DMC-ZS60", "DMC-TZ80", "DMC-TZ81", "DMC-TZ82", "DMC-TZ85",
557
0
    "@DC-ZS70", "DC-TZ90", "DC-TZ91", "DC-TZ92", "DC-TZ93",
558
0
    "@DC-ZS80", "DC-TZ95", "DC-TZ96", "DC-TZ97",
559
560
// interchangeable lens
561
0
    "@DC-G100",  "DC-G110",
562
0
    "@DC-G99",   "DC-G90",   "DC-G91",  "DC-G95",
563
0
    "@DMC-G7",   "DMC-G70",
564
0
    "@DMC-G8",   "DMC-G80",  "DMC-G81", "DMC-G85",
565
0
    "@DMC-GH4",  "AG-GH4",   "CGO4",
566
0
    "@DC-GF10",  "DC-GF90",  "DC-GX880",
567
0
    "@DC-GF9",   "DC-GX850", "DC-GX800",
568
0
    "@DMC-GM1",  "DMC-GM1S",
569
0
    "@DMC-GX85", "DMC-GX80", "DMC-GX7MK2",
570
0
    "@DC-GX9",   "DC-GX7MK3",
571
0
    "@DMC-L1",   "DIGILUX 3", "DIGILUX3", // full 4/3 mount, not m43
572
0
  };
573
574
0
  static const char phase1alias[][16] = {
575
0
    "@H20",  "H 20",
576
0
    "@H25",  "H 25",
577
0
    "@P20+", "P 20+",
578
0
    "@P20",  "P 20",
579
0
    "@P21+", "P 21+", "M18", // "Mamiya M18"
580
0
    "@P21",  "P 21",
581
0
    "@P25+", "P 25+", "M22", // "Mamiya M22"
582
0
    "@P25",  "P 25",
583
0
    "@P30+", "P 30+", "M31", // "Mamiya M31"
584
0
    "@P30",  "P 30",
585
0
    "@P40+", "P 40+",
586
0
    "@P40",  "P 40",
587
0
    "@P45+", "P 45+",
588
0
    "@P45",  "P 45",
589
0
    "@P65+", "P 65+",
590
0
    "@P65",  "P 65",
591
0
  };
592
593
0
  static const char SamsungPentax_aliases[][16] = {
594
0
    "@*istDL2", "*ist DL2", "GX-1L",
595
0
    "@*istDS2", "*ist DS2", "GX-1S",
596
0
    "@*istDL",  "*ist DL",
597
0
    "@*istDS",  "*ist DS",
598
0
    "@*istD",   "*ist D",
599
0
    "@K10D", "GX10", "GX-10",
600
0
    "@K20D", "GX20", "GX-20",
601
0
    "@K-m", "K2000",
602
0
  };
603
604
0
  static const char samsungalias[][64] = {
605
0
    "@EX1", "TL500",
606
0
    "@NX U", "EK-GN100", "EK-GN110", "EK-GN120", "EK-KN120", "Galaxy NX",
607
0
    "@NX mini", "NXF1",
608
0
    "@WB2000", "TL350",
609
      //    "@WB5000", "WB5000/HZ25W", // no spaces around the slash separating names
610
      //    "@WB5500", "WB5500 / VLUU WB5500 / SAMSUNG HZ50W",
611
      //    "@WB500", "WB510 / VLUU WB500 / SAMSUNG HZ10W",
612
      //    "@WB550", "WB560 / VLUU WB550 / SAMSUNG HZ15W",
613
      //    "@WB650", "SAMSUNG WB650 / VLUU WB650 / SAMSUNG WB660" aka HZ35W
614
0
  };
615
616
//clang-format on
617
0
  if (makeIs(LIBRAW_CAMERAMAKER_VLUU)) {
618
0
    setMakeFromIndex(LIBRAW_CAMERAMAKER_Samsung);
619
0
  }
620
621
0
  if (makeIs(LIBRAW_CAMERAMAKER_Samsung) &&
622
0
      (ilm.CameraMount == LIBRAW_MOUNT_Pentax_K)) {
623
0
    setMakeFromIndex(LIBRAW_CAMERAMAKER_Pentax);
624
625
0
  } else if (makeIs(LIBRAW_CAMERAMAKER_Unknown)) {
626
0
    if (strcasestr(model, "Google")) {
627
0
      setMakeFromIndex(LIBRAW_CAMERAMAKER_Google);
628
0
    }
629
#ifdef USE_6BY9RPI
630
  else if(strcasestr(make,"RaspberryPi"))
631
    setMakeFromIndex(LIBRAW_CAMERAMAKER_RaspberryPi);
632
#endif
633
0
  }
634
0
  else if (makeIs(LIBRAW_CAMERAMAKER_Hasselblad) && is_Sony)
635
0
  {
636
0
    setMakeFromIndex(LIBRAW_CAMERAMAKER_Sony);
637
0
  }
638
0
  else if (makeIs(LIBRAW_CAMERAMAKER_OmDigital))
639
0
  {
640
0
    setMakeFromIndex(LIBRAW_CAMERAMAKER_Olympus);
641
0
  }
642
0
  else if (makeIs(LIBRAW_CAMERAMAKER_Clauss) && (OlyID == OlyID_E_M10_Mark_II))
643
0
  {
644
0
    setMakeFromIndex(LIBRAW_CAMERAMAKER_Olympus);
645
0
  } else if (makeIs(LIBRAW_CAMERAMAKER_Canon) &&
646
0
             (!strncmp(model, "EOS D2000", 9) || // don't use unique_id here
647
0
              !strncmp(model, "EOS D6000", 9) || // because ids for Monochrome models are unknown
648
0
              !strncmp(model, "EOSDCS", 6))) {
649
0
    setMakeFromIndex(LIBRAW_CAMERAMAKER_Kodak);
650
//    if (unique_id == CanonID_EOS_D2000C) {
651
//
652
//    } else if (unique_id  == CanonID_EOS_D6000C) {
653
///
654
//    }
655
656
0
  } else if (makeIs(LIBRAW_CAMERAMAKER_PhotoControl) &&
657
0
             !strncasecmp(model, "Camerz ZDS 14", 13)) {
658
0
    setMakeFromIndex(LIBRAW_CAMERAMAKER_Kodak);
659
660
0
  } else {
661
0
    strcpy(normalized_make, make);
662
0
  }
663
664
0
  if (makeIs(LIBRAW_CAMERAMAKER_Apple)) {
665
0
    if ((imgdata.color.UniqueCameraModel[0]) &&
666
0
        (!strncmp(model, "iPad", 4) || !strncmp(model, "iPhone", 6)))
667
0
    strcpy(model, imgdata.color.UniqueCameraModel);
668
669
0
  } else if (makeIs(LIBRAW_CAMERAMAKER_Kodak)) {
670
0
    if ((model[6] == ' ') &&
671
0
        (!strncmp(model, "DCS4", 4) ||
672
0
         !strncmp(model, "NC2000", 6)))
673
0
    {
674
0
      model[6] = 0;
675
0
    }
676
0
    if ((model[6] != 'A') &&
677
0
        (model[6] != 'I') &&
678
0
        (model[6] != 'M') &&
679
0
        !strncmp(model, "NC2000", 6))
680
0
    {
681
0
      model[6] = 0;
682
0
    }
683
0
  }
684
685
0
  else if (makeIs(LIBRAW_CAMERAMAKER_Ricoh) &&
686
0
           !strncmp(model, "GXR", 3)) {
687
0
    strcpy(ilm.body, "Ricoh GXR");
688
0
    if (!imgdata.lens.Lens[0] && imgdata.color.UniqueCameraModel[0]) {
689
0
      strcpy (imgdata.lens.Lens, imgdata.color.UniqueCameraModel);
690
0
      remove_caseSubstr (imgdata.lens.Lens, (char *)"Ricoh");
691
0
      remove_caseSubstr (imgdata.lens.Lens, (char *)"Lens");
692
0
      removeExcessiveSpaces (imgdata.lens.Lens);
693
0
    }
694
0
    if (ilm.LensID == LIBRAW_LENS_NOT_SET) {
695
0
      if (strstr(imgdata.lens.Lens, "50mm"))
696
0
        ilm.LensID = 1;
697
0
      else if (strstr(imgdata.lens.Lens, "S10"))
698
0
        ilm.LensID = 2;
699
0
      else if (strstr(imgdata.lens.Lens, "P10"))
700
0
        ilm.LensID = 3;
701
0
      else if (strstr(imgdata.lens.Lens, "28mm"))
702
0
        ilm.LensID = 5;
703
0
      else if (strstr(imgdata.lens.Lens, "A16"))
704
0
        ilm.LensID = 6;
705
0
    }
706
0
    switch (ilm.LensID) {
707
0
    case 1: // GR Lens A12 50mm F2.5 Macro
708
0
      strcpy(model, "GXR A12 50mm");
709
0
      ilm.CameraFormat = ilm.LensFormat = LIBRAW_FORMAT_APSC;
710
0
      ilm.CameraMount = LIBRAW_MOUNT_RicohModule;
711
0
      ilm.LensMount = LIBRAW_MOUNT_FixedLens;
712
0
      ilm.FocalType = LIBRAW_FT_PRIME_LENS;
713
0
      break;
714
0
    case 2:
715
0
      strcpy(model, "GXR S10");
716
0
      ilm.CameraFormat = ilm.LensFormat = LIBRAW_FORMAT_1div1p7INCH;
717
0
      ilm.CameraMount = LIBRAW_MOUNT_RicohModule;
718
0
      ilm.LensMount = LIBRAW_MOUNT_FixedLens;
719
0
      ilm.FocalType = LIBRAW_FT_ZOOM_LENS;
720
0
      break;
721
0
    case 3: // Ricoh Lens P10 28-300mm F3.5-5.6 VC
722
0
      strcpy(model, "GXR P10");
723
0
      ilm.CameraFormat = ilm.LensFormat = LIBRAW_FORMAT_1div2p3INCH;
724
0
      ilm.CameraMount = LIBRAW_MOUNT_RicohModule;
725
0
      ilm.LensMount = LIBRAW_MOUNT_FixedLens;
726
0
      ilm.FocalType = LIBRAW_FT_ZOOM_LENS;
727
0
      break;
728
0
    case 5: // GR Lens A12 28mm F2.5
729
0
      strcpy(model, "GXR A12 28mm");
730
0
      ilm.CameraFormat = ilm.LensFormat = LIBRAW_FORMAT_APSC;
731
0
      ilm.CameraMount = LIBRAW_MOUNT_RicohModule;
732
0
      ilm.LensMount = LIBRAW_MOUNT_FixedLens;
733
0
      ilm.FocalType = LIBRAW_FT_PRIME_LENS;
734
0
      break;
735
0
    case 6: // Ricoh Lens A16 24-85mm F3.5-5.5
736
0
      strcpy(model, "GXR A16");
737
0
      ilm.CameraFormat = ilm.LensFormat = LIBRAW_FORMAT_APSC;
738
0
      ilm.CameraMount = LIBRAW_MOUNT_RicohModule;
739
0
      ilm.LensMount = LIBRAW_MOUNT_FixedLens;
740
0
      ilm.FocalType = LIBRAW_FT_ZOOM_LENS;
741
0
      break;
742
0
    case 8: // Ricoh Mount A12 (Leica M lenses)
743
0
      strcpy(model, "GXR Mount A12");
744
0
      ilm.CameraFormat = LIBRAW_FORMAT_APSC;
745
0
      ilm.CameraMount = LIBRAW_MOUNT_Leica_M;
746
0
      ilm.LensID = LIBRAW_LENS_NOT_SET;
747
0
      break;
748
0
    }
749
0
  }
750
751
0
  strcpy(normalized_model, model);
752
753
0
  if (makeIs(LIBRAW_CAMERAMAKER_Canon))
754
0
  {
755
0
    if (unique_id)
756
0
    {
757
0
      if ((unique_id != CanonID_EOS_D2000C) &&
758
0
          (unique_id != CanonID_EOS_D6000C))
759
0
      {
760
0
        for (i = 0; i < int(sizeof unique / sizeof *unique); i++)
761
0
        {
762
0
          if (unique_id == unique[i].id)
763
0
          {
764
0
            if (!strcmp(model, "EOS Ra")) {
765
0
              strcpy(normalized_model, model);
766
0
            } else {
767
0
              strcpy(model, unique[i].t_model);
768
0
              strcpy(normalized_model, unique[i].t_model);
769
0
            }
770
0
            break;
771
0
          }
772
0
        }
773
0
      }
774
0
    }
775
0
    else
776
0
    {
777
0
      if ((dng_version) &&
778
0
          (strlen(imgdata.color.UniqueCameraModel) > 6) &&
779
0
          strncmp(imgdata.color.UniqueCameraModel+6, "PowerShot", 9))
780
0
      {
781
0
        if (!strcmp(model, "EOS Ra")) {
782
0
          ilm.CamID = unique_id = CanonID_EOS_R;
783
0
          strcpy(normalized_model, model);
784
          // try_xml = 1; // ??
785
0
        } else {
786
0
          for (i = 0; i < int(sizeof unique / sizeof *unique); i++)
787
0
          {
788
0
            if (!strcmp(unique[i].t_model, imgdata.color.UniqueCameraModel+6))
789
0
            {
790
0
              ilm.CamID = unique_id = unique[i].id;
791
0
              strcpy(normalized_model, unique[i].t_model);
792
0
              try_xml = 1;
793
0
              break;
794
0
            }
795
0
          }
796
0
        }
797
0
      }
798
0
    }
799
0
  }
800
0
  else if (makeIs(LIBRAW_CAMERAMAKER_Fujifilm))
801
0
  {
802
0
    for (i = 0; i < int(sizeof fujialias / sizeof *fujialias); i++)
803
0
    {
804
0
      if (fujialias[i][0] == '@')
805
0
      {
806
0
        orig = fujialias[i] + 1;
807
0
        if (!strcmp(model, orig)) break;
808
0
      }
809
0
      else if (!strcmp(model, fujialias[i]))
810
0
      {
811
0
        strcpy(normalized_model, orig);
812
0
        break;
813
0
      }
814
0
    }
815
816
0
  } else if (makeIs(LIBRAW_CAMERAMAKER_Hasselblad)) {
817
0
    parseHassyModel();
818
0
  }
819
0
  else if (makeIs(LIBRAW_CAMERAMAKER_Mamiya))
820
0
  {
821
0
    for (i = 0; i < int(sizeof phase1alias / sizeof *phase1alias); i++)
822
0
    { // re-badged Phase One backs
823
0
      if (phase1alias[i][0] == '@') orig = phase1alias[i] + 1;
824
0
      else if (!strcmp(model, phase1alias[i]))
825
0
      {
826
0
        setMakeFromIndex(LIBRAW_CAMERAMAKER_PhaseOne);
827
0
        strcpy(normalized_model, orig);
828
0
        break;
829
0
      }
830
0
    }
831
0
    for (i = 0; i < int(sizeof leafalias / sizeof *leafalias); i++)
832
0
    { // re-badged Leaf backs
833
0
      if (leafalias[i][0] == '@') orig = leafalias[i] + 1;
834
0
      else if (!strcmp(model, leafalias[i]))
835
0
      {
836
0
        setMakeFromIndex(LIBRAW_CAMERAMAKER_Leaf);
837
0
        strcpy(normalized_model, orig);
838
0
        break;
839
0
      }
840
0
    }
841
842
    /* repeating, because make for some Mamiya re-badged Leaf backs is set to
843
     * Leaf */
844
0
  }
845
0
  else if (makeIs(LIBRAW_CAMERAMAKER_Leaf))
846
0
  {
847
0
    for (i = 0; i < int(sizeof leafalias / sizeof *leafalias); i++)
848
0
    { // re-badged Leaf backs
849
0
      if (leafalias[i][0] == '@')
850
0
      {
851
0
        orig = leafalias[i] + 1;
852
0
        if (!strcmp(model, orig)) break;
853
0
      }
854
0
      else if (!strcmp(model, leafalias[i]))
855
0
      { // maybe to change regular "make" to "Mamiya" too
856
0
        strcpy(normalized_model, orig);
857
0
        break;
858
0
      }
859
0
    }
860
0
    if ((ps = strchr(normalized_model, '(')))
861
0
      *ps = 0;
862
0
  }
863
0
  else if (makeIs(LIBRAW_CAMERAMAKER_Minolta) ||
864
0
           makeIs(LIBRAW_CAMERAMAKER_Konica))
865
0
  {
866
0
    if (makeIs(LIBRAW_CAMERAMAKER_Konica) && !strncasecmp(model, "DiMAGE", 6))
867
0
    {
868
0
      setMakeFromIndex(LIBRAW_CAMERAMAKER_Minolta);
869
0
      strcpy(make, "Minolta");
870
0
    }
871
0
    else
872
0
    {
873
0
      for (i = 0;
874
0
           i<int(sizeof KonicaMinolta_aliases / sizeof *KonicaMinolta_aliases);
875
0
           i++)
876
0
      {
877
0
        if (KonicaMinolta_aliases[i][0] == '@')
878
0
        {
879
0
          orig = KonicaMinolta_aliases[i] + 1;
880
0
          if (!strcmp(model, orig))
881
0
          {
882
0
            setMakeFromIndex(LIBRAW_CAMERAMAKER_Minolta);
883
0
            strcpy(make, "Minolta");
884
0
            break;
885
0
          }
886
0
        }
887
0
        else if (!strcasecmp(model, KonicaMinolta_aliases[i]))
888
0
        {
889
0
          setMakeFromIndex(LIBRAW_CAMERAMAKER_Minolta);
890
0
          strcpy(make, "Minolta");
891
0
          strcpy(normalized_model, orig);
892
0
          break;
893
0
        }
894
0
      }
895
0
    }
896
0
  }
897
0
  else if (makeIs(LIBRAW_CAMERAMAKER_Nikon))
898
0
  {
899
0
    for (i = 0; i < int(sizeof nikonalias / sizeof *nikonalias); i++)
900
0
    {
901
0
      if (nikonalias[i][0] == '@')
902
0
      {
903
0
        orig = nikonalias[i] + 1;
904
0
        if (!strcmp(model, orig)) break;
905
0
      }
906
0
      else if (!strcmp(model, nikonalias[i]))
907
0
      {
908
0
        strcpy(normalized_model, orig);
909
0
        break;
910
0
      }
911
0
    }
912
913
0
  } else if (makeIs(LIBRAW_CAMERAMAKER_Olympus)) {
914
0
    for (i = 0; i < int(sizeof olyalias / sizeof *olyalias); i++) {
915
0
      if (olyalias[i][0] == '@') {
916
0
        orig = olyalias[i] + 1;
917
0
        if (!strcmp(model, orig)) break;
918
0
      } else if (!strcmp(model, olyalias[i])) {
919
0
        strcpy(normalized_model, orig);
920
0
        break;
921
0
      }
922
0
    }
923
924
0
    if (!OlyID) {
925
0
      if (!strcmp(normalized_model, "C-740UZ")) {
926
0
        ilm.CamID = OlyID = unique_id = OlyID_C_740UZ;
927
928
0
      } else if (!strcmp(normalized_model, "C-770UZ")) {
929
0
        ilm.CamID = OlyID = unique_id = OlyID_C_770UZ;
930
0
      }
931
0
    }
932
933
0
  } else if (makeIs(LIBRAW_CAMERAMAKER_Panasonic) ||
934
0
             makeIs(LIBRAW_CAMERAMAKER_Leica) ||
935
0
             makeIs(LIBRAW_CAMERAMAKER_Yuneec))
936
0
  {
937
0
    for (i = 0; i < int(sizeof panalias / sizeof *panalias); i++)
938
0
    {
939
0
      if (panalias[i][0] == '@')
940
0
      {
941
0
        orig = panalias[i] + 1;
942
0
        if (!strcmp(model, orig)) break;
943
0
      }
944
0
      else if (!strcmp(model, panalias[i]))
945
0
      {
946
0
        setMakeFromIndex(LIBRAW_CAMERAMAKER_Panasonic);
947
0
        strcpy(normalized_model, orig);
948
0
        break;
949
0
      }
950
0
    }
951
0
  } else if (makeIs(LIBRAW_CAMERAMAKER_Pentax)) {
952
0
    if (!unique_id) {
953
0
      if (!strcmp(model, "Optio S")) {
954
0
        ilm.CamID = unique_id = PentaxID_Optio_S;
955
0
      } else if (!strcmp(model, "Optio S V1.01")) {
956
0
        ilm.CamID = unique_id = PentaxID_Optio_S_V101;
957
0
      } else if (!strcmp(model, "Optio S4")) {
958
0
        ilm.CamID = unique_id = PentaxID_Optio_S4;
959
0
      } else if (!strcmp(model, "Optio 750Z")) {
960
0
        ilm.CamID = unique_id = PentaxID_Optio_750Z;
961
0
      } else if (!strcmp(model, "Optio 33WR")) {
962
0
        ilm.CamID = unique_id = PentaxID_Optio_33WR;
963
0
      }
964
0
    }
965
966
0
    for (i = 0;
967
0
    i < int(sizeof SamsungPentax_aliases / sizeof *SamsungPentax_aliases);
968
0
    i++) {
969
0
      if (SamsungPentax_aliases[i][0] == '@') {
970
0
        orig = SamsungPentax_aliases[i] + 1;
971
0
        if (!strcmp(model, orig)) break;
972
0
      } else if (!strcmp(model, SamsungPentax_aliases[i])) {
973
0
        strcpy(normalized_model, orig);
974
0
        break;
975
0
      }
976
0
    }
977
0
    if (!strncmp(model, "GR", 2)) {
978
0
    setMakeFromIndex(LIBRAW_CAMERAMAKER_Ricoh);
979
0
      strcpy(make, "Ricoh");
980
0
    }
981
982
0
  } else if (makeIs(LIBRAW_CAMERAMAKER_PhaseOne))
983
0
  {
984
0
    for (i = 0; i < int(sizeof phase1alias / sizeof *phase1alias); i++)
985
0
    {
986
0
      if (phase1alias[i][0] == '@')
987
0
      {
988
0
        orig = phase1alias[i] + 1;
989
0
        if (!strcmp(model, orig)) break;
990
0
      }
991
0
      else if (!strcmp(model, phase1alias[i]))
992
0
      {
993
0
        strcpy(normalized_model, orig);
994
0
        break;
995
0
      }
996
0
    }
997
0
  if (strstr(imPhaseOne.FirmwareString, "Achromatic"))
998
0
  {
999
0
    colors = 1;
1000
0
    filters = 0;
1001
0
  }
1002
0
  }
1003
0
  else if (makeIs(LIBRAW_CAMERAMAKER_Samsung))
1004
0
  {
1005
0
    j = 0;
1006
0
    if (strstr(model, "WB5500") || strstr(model, "HZ50W"))
1007
0
    {
1008
0
      strcpy(model, "WB5500");
1009
0
      j++;
1010
0
    }
1011
0
    else if (strstr(model, "WB5000") || strstr(model, "HZ25W"))
1012
0
    {
1013
0
      strcpy(model, "WB5000");
1014
0
      j++;
1015
0
    }
1016
0
    else if (strstr(model, "WB550") || strstr(model, "HZ15W"))
1017
0
    {
1018
0
      strcpy(model, "WB550");
1019
0
      j++;
1020
0
    }
1021
0
    else if (strstr(model, "WB500") || strstr(model, "HZ10W"))
1022
0
    {
1023
0
      strcpy(model, "WB500");
1024
0
      j++;
1025
0
    }
1026
0
    if (j)
1027
0
    {
1028
0
      strcpy(normalized_model, model);
1029
0
    }
1030
0
    else
1031
0
    {
1032
0
      for (i = 0; i < int(sizeof samsungalias / sizeof *samsungalias); i++)
1033
0
      {
1034
0
        if (samsungalias[i][0] == '@')
1035
0
        {
1036
0
          orig = samsungalias[i] + 1;
1037
0
          if (!strcmp(model, orig)) break;
1038
0
        }
1039
0
        else if (!strcmp(model, samsungalias[i]))
1040
0
        {
1041
0
          strcpy(normalized_model, orig);
1042
0
          break;
1043
0
        }
1044
0
      }
1045
0
    }
1046
1047
0
  } else if (makeIs(LIBRAW_CAMERAMAKER_Sony)) {
1048
0
    if (unique_id)
1049
0
    {
1050
0
      for (i = 0; i < int(sizeof sonique / sizeof *sonique); i++)
1051
0
      {
1052
0
        if (unique_id == sonique[i].id)
1053
0
        {
1054
0
          if (!strcmp(make, "Sony"))
1055
0
            strcpy(model, sonique[i].t_model);
1056
0
          strcpy(normalized_model, sonique[i].t_model);
1057
0
          break;
1058
0
        }
1059
0
      }
1060
0
    }
1061
1062
/*
1063
char pgroup9050 = '-';
1064
char cameratype[16] = "unknown";
1065
switch (imSony.CameraType) {
1066
  case LIBRAW_SONY_DSC:  strcpy(cameratype, "DSC");  break;
1067
  case LIBRAW_SONY_DSLR: strcpy(cameratype, "DSLR"); break;
1068
  case LIBRAW_SONY_NEX:  strcpy(cameratype, "NEX");  break;
1069
  case LIBRAW_SONY_SLT:  strcpy(cameratype, "SLT");  break;
1070
  case LIBRAW_SONY_ILCE: strcpy(cameratype, "ILCE"); break;
1071
  case LIBRAW_SONY_ILCA: strcpy(cameratype, "ILCA"); break;
1072
}
1073
switch (imSony.group9050) {
1074
 case LIBRAW_SONY_Tag9050a:
1075
  pgroup9050 = 'a';
1076
  break;
1077
 case LIBRAW_SONY_Tag9050b:
1078
  pgroup9050 = 'b';
1079
  break;
1080
 case LIBRAW_SONY_Tag9050c:
1081
  pgroup9050 = 'c';
1082
  break;
1083
 case LIBRAW_SONY_Tag9050d:
1084
  pgroup9050 = 'd';
1085
  break;
1086
}
1087
printf("catchme\t%s\t%s\t%s\t9050%c\t%d\t%d\n",
1088
  model, normalized_model, cameratype, pgroup9050, imSony.len_group9050, imSony.FileFormat);
1089
*/
1090
1091
0
  } else if (makeIs(LIBRAW_CAMERAMAKER_Kodak)) {
1092
0
    remove_caseSubstr (normalized_model, (char *)"EasyShare");
1093
0
    remove_caseSubstr (normalized_model, (char *)"ZOOM");
1094
0
    removeExcessiveSpaces (normalized_model);
1095
0
    for (i = 0; i < int(sizeof kodakalias / sizeof *kodakalias); i++)
1096
0
    {
1097
0
      if (kodakalias[i][0] == '@')
1098
0
      {
1099
0
        orig = kodakalias[i] + 1;
1100
0
        if (!strcmp(model, orig)) break;
1101
0
      }
1102
0
      else if (!strcmp(model, kodakalias[i]))
1103
0
      {
1104
0
        strcpy(normalized_model, orig);
1105
0
        break;
1106
0
      }
1107
0
    }
1108
1109
0
    if (strstr(model, "DC25"))
1110
0
    {
1111
0
      strcpy(model, "DC25");
1112
0
      strcpy(normalized_model, model);
1113
0
    }
1114
0
    else if (!strcmp(model, "40"))
1115
0
    {
1116
0
      strcpy(model, "DC40");
1117
0
      strcpy(normalized_model, model);
1118
0
    }
1119
0
    else if (strstr(model, "DC50"))
1120
0
    {
1121
0
      strcpy(model, "DC50");
1122
0
      strcpy(normalized_model, model);
1123
0
    }
1124
0
    else if (strstr(model, "DC120"))
1125
0
    {
1126
0
      strcpy(model, "DC120");
1127
0
      strcpy(normalized_model, model);
1128
0
    }
1129
1130
0
    for (i = 0; i < int(sizeof KodakMonochrome / sizeof *KodakMonochrome); i++)
1131
0
    {
1132
0
      if (!strncmp(model, KodakMonochrome[i], strlen(KodakMonochrome[i])))
1133
0
      {
1134
0
        colors = 1;
1135
0
        filters = 0;
1136
0
      }
1137
0
    }
1138
0
  }
1139
1140
0
  if (ilm.body[0])
1141
0
  {
1142
0
    if ((ilm.CameraMount != LIBRAW_MOUNT_Hasselblad_V) &&
1143
0
        !strncmp(ilm.body, "Hasselblad ", 11) &&
1144
0
        ((ilm.body[11] == 'C') || (ilm.body[11] == '2') ||
1145
0
         (ilm.body[11] == '5') || (ilm.body[11] == '9')))
1146
0
    {
1147
0
      ilm.CameraFormat = LIBRAW_FORMAT_66;
1148
0
      ilm.CameraMount = LIBRAW_MOUNT_Hasselblad_V;
1149
0
    }
1150
0
    else if (!strncmp(ilm.body, "XF", 2) || !strncmp(ilm.body, "645DF", 5))
1151
0
    {
1152
0
      ilm.CameraMount = LIBRAW_MOUNT_Mamiya645;
1153
0
      ilm.CameraFormat = LIBRAW_FORMAT_645;
1154
0
    }
1155
0
    else if (!strncmp(ilm.body, "Sinarcam", 2))
1156
0
    {
1157
0
      ilm.CameraMount = LIBRAW_MOUNT_LF;
1158
0
      ilm.CameraFormat = LIBRAW_FORMAT_LF;
1159
0
      strcat(ilm.body, " shutter system");
1160
0
    }
1161
0
  }
1162
1163
0
  if (makeIs(LIBRAW_CAMERAMAKER_Kodak))
1164
0
  {
1165
0
    if (((ilm.CameraMount == LIBRAW_MOUNT_DigitalBack) ||
1166
0
         (ilm.CameraMount == LIBRAW_MOUNT_Unknown)) &&
1167
0
        !strncmp(model2, "PB645", 5))
1168
0
    {
1169
0
      ilm.CameraFormat = LIBRAW_FORMAT_645;
1170
0
      if (model2[5] == 'C')
1171
0
      {
1172
0
        ilm.CameraMount = LIBRAW_MOUNT_Contax645;
1173
0
        strcpy(ilm.body, "Contax 645");
1174
0
      }
1175
0
      else if (model2[5] == 'H')
1176
0
      {
1177
0
        ilm.CameraMount = LIBRAW_MOUNT_Hasselblad_H;
1178
0
        strcpy(ilm.body, "Hasselblad H1/H2");
1179
0
      }
1180
0
      else if (model2[5] == 'M')
1181
0
      {
1182
0
        ilm.CameraMount = LIBRAW_MOUNT_Mamiya645;
1183
0
        strcpy(ilm.body, "Mamiya 645");
1184
0
      }
1185
1186
0
    } else if (!strncasecmp(model, "PIXPRO S-1", 10)) {
1187
0
      ilm.CameraFormat = LIBRAW_FORMAT_FT;
1188
0
    } else if (!strncasecmp(model, "PIXPRO ", 7)) {
1189
0
      ilm.CameraFormat = LIBRAW_FORMAT_1div2p3INCH;
1190
0
    }
1191
0
  }
1192
1193
0
  else if (makeIs(LIBRAW_CAMERAMAKER_Fujifilm))
1194
0
  {
1195
0
    if (!strncmp(normalized_model, "DBP", 3))
1196
0
    {
1197
0
      strcpy(ilm.body, "Fujifilm GX680");
1198
0
    }
1199
0
  }
1200
1201
0
  if ((ilm.CameraFormat == LIBRAW_FORMAT_Unknown) ||
1202
0
      (ilm.CameraMount == LIBRAW_MOUNT_Unknown) ||
1203
0
      (ilm.CameraMount == LIBRAW_MOUNT_IL_UM))
1204
0
  {
1205
1206
0
    if (makeIs(LIBRAW_CAMERAMAKER_Canon))
1207
0
    {
1208
0
      if (strncmp(normalized_model, "EOS", 3))
1209
0
      {
1210
0
        ilm.CameraMount = LIBRAW_MOUNT_FixedLens;
1211
0
      }
1212
0
    }
1213
0
    else if (makeIs(LIBRAW_CAMERAMAKER_Nikon))
1214
0
    {
1215
0
      if (normalized_model[0] == 'D')
1216
0
      {
1217
0
        ilm.CameraMount = LIBRAW_MOUNT_Nikon_F;
1218
0
      }
1219
0
      else
1220
0
      {
1221
0
        ilm.CameraMount = LIBRAW_MOUNT_FixedLens;
1222
0
      }
1223
0
    }
1224
0
    else if (makeIs(LIBRAW_CAMERAMAKER_Panasonic))
1225
0
    {
1226
0
      if (!strncmp(normalized_model, "DC-S", 4))
1227
0
      {
1228
0
        ilm.CameraFormat = LIBRAW_FORMAT_FF;
1229
0
        ilm.CameraMount = LIBRAW_MOUNT_LPS_L;
1230
0
      }
1231
0
      else if (!strncmp(normalized_model, "DMC-L1", 6) ||
1232
0
               !strncmp(normalized_model, "DMC-L10", 7))
1233
0
      {
1234
0
        ilm.CameraFormat = ilm.CameraMount = LIBRAW_FORMAT_FT;
1235
0
      }
1236
0
      else if (!strncmp(normalized_model + 2, "-G", 2) ||
1237
0
               !strncmp(normalized_model + 3, "-G", 2))
1238
0
      {
1239
0
        ilm.CameraFormat = LIBRAW_FORMAT_FT;
1240
0
        ilm.CameraMount = LIBRAW_MOUNT_mFT;
1241
0
      }
1242
0
      else
1243
0
      {
1244
0
        ilm.CameraMount = LIBRAW_MOUNT_FixedLens;
1245
0
        ilm.FocalType = LIBRAW_FT_ZOOM_LENS;
1246
0
        if (!strncmp(normalized_model + 2, "-LX100", 6) || // DC-LX100M2
1247
0
            !strncmp(normalized_model + 3, "-LX100", 6))
1248
0
        { // DMC-LX100
1249
0
          ilm.CameraFormat = ilm.LensFormat = LIBRAW_FORMAT_FT;
1250
0
        }
1251
0
        else if (!strncmp(normalized_model, "DMC-CM1", 7))
1252
0
        {
1253
0
          ilm.FocalType = LIBRAW_FT_PRIME_LENS;
1254
0
        }
1255
0
      }
1256
0
    }
1257
0
    else if (makeIs(LIBRAW_CAMERAMAKER_Fujifilm))
1258
0
    {
1259
0
      if (!strncmp(normalized_model, "GFX ", 4))
1260
0
      {
1261
0
        ilm.CameraFormat = LIBRAW_FORMAT_CROP645;
1262
0
        ilm.CameraMount = LIBRAW_MOUNT_Fuji_GF;
1263
0
      }
1264
0
      else if (!strncmp(normalized_model, "X-", 2) &&
1265
0
               (strncmp(normalized_model, "X-S1", 4)  ||
1266
0
               !strncmp(normalized_model, "X-S10", 5) ||
1267
0
               !strncmp(normalized_model, "X-S20", 5)))
1268
0
      {
1269
0
        ilm.CameraFormat = LIBRAW_FORMAT_APSC;
1270
0
        ilm.CameraMount = LIBRAW_MOUNT_Fuji_X;
1271
0
      }
1272
0
      else if (((normalized_model[0] == 'S') && // S2Pro, S3Pro, S5Pro
1273
0
                (normalized_model[2] == 'P')) ||
1274
0
               !strncasecmp(normalized_model, "IS Pro", 6))
1275
0
      {
1276
0
        ilm.CameraFormat = LIBRAW_FORMAT_APSC;
1277
0
        ilm.CameraMount = LIBRAW_MOUNT_Nikon_F;
1278
0
      }
1279
0
      else if (!strncmp(normalized_model, "DBP", 3))
1280
0
      {
1281
0
        ilm.CameraFormat = LIBRAW_FORMAT_68;
1282
0
        ilm.CameraMount = LIBRAW_MOUNT_Fuji_GX;
1283
0
      }
1284
0
      else
1285
0
      {
1286
0
        ilm.CameraMount = LIBRAW_MOUNT_FixedLens;
1287
0
      }
1288
0
    }
1289
0
    else if (makeIs(LIBRAW_CAMERAMAKER_Samsung))
1290
0
    {
1291
0
      if ((normalized_model[0] == 'N') &&
1292
0
          (normalized_model[1] == 'X')) // DNG converters delete makernotes
1293
0
      {
1294
0
        if ((normalized_model[2] == 'F') && (normalized_model[3] == '1'))
1295
0
        {
1296
0
          ilm.CameraMount = LIBRAW_MOUNT_Samsung_NX_M;
1297
0
          ilm.CameraFormat = LIBRAW_FORMAT_1INCH;
1298
0
        }
1299
0
        else
1300
0
        {
1301
0
          ilm.CameraMount = LIBRAW_MOUNT_Samsung_NX;
1302
0
          ilm.CameraFormat = LIBRAW_FORMAT_APSC;
1303
0
        }
1304
0
      }
1305
0
      else
1306
0
      {
1307
0
        ilm.CameraMount = LIBRAW_MOUNT_FixedLens;
1308
0
      }
1309
0
    }
1310
0
    else if (makeIs(LIBRAW_CAMERAMAKER_Kodak))
1311
0
    {
1312
0
      ilm.CameraMount = LIBRAW_MOUNT_FixedLens;
1313
0
      for (i = 0; i < int(sizeof Kodak_mounts / sizeof *Kodak_mounts); i++)
1314
0
      {
1315
0
        if (!strncmp(normalized_model, Kodak_mounts[i].Kmodel,
1316
0
                     strlen(Kodak_mounts[i].Kmodel)))
1317
0
        {
1318
0
          ilm.CameraMount = Kodak_mounts[i].mount;
1319
0
          break;
1320
0
        }
1321
0
      }
1322
0
    }
1323
0
    else if (makeIs(LIBRAW_CAMERAMAKER_Minolta))
1324
0
    {
1325
0
      if (!strcmp(normalized_model, "DG-5D") ||
1326
0
          !strcmp(normalized_model, "DG-7D"))
1327
0
      {
1328
0
        ilm.CameraFormat = LIBRAW_FORMAT_APSC;
1329
0
        ilm.CameraMount = LIBRAW_MOUNT_Minolta_A;
1330
0
      }
1331
0
      else if (!strncasecmp(normalized_model, "DiMAGE", 6))
1332
0
      {
1333
0
        ilm.CameraMount = LIBRAW_MOUNT_FixedLens;
1334
0
      }
1335
0
    }
1336
0
    else if (makeIs(LIBRAW_CAMERAMAKER_Casio) ||
1337
0
             makeIs(LIBRAW_CAMERAMAKER_Creative))
1338
0
    {
1339
0
      ilm.CameraMount = LIBRAW_MOUNT_FixedLens;
1340
0
    }
1341
0
    else if (makeIs(LIBRAW_CAMERAMAKER_Sigma))
1342
0
    {
1343
0
      if (!strncmp(normalized_model, "fp", 2))
1344
0
      {
1345
0
        ilm.CameraFormat = LIBRAW_FORMAT_FF;
1346
0
        ilm.CameraMount = LIBRAW_MOUNT_LPS_L;
1347
0
      }
1348
0
      else if (!strncasecmp(normalized_model, "SD", 2))
1349
0
      {
1350
0
        ilm.CameraMount = LIBRAW_MOUNT_Sigma_X3F;
1351
0
        if (!strcmp(normalized_model, "SD1") || (normalized_model[4] == 'M'))
1352
0
        {
1353
0
          ilm.CameraFormat = LIBRAW_FORMAT_SigmaMerrill;
1354
0
        }
1355
0
        else if (normalized_model[11] == 'H')
1356
0
        { // 'sd Quattro H'
1357
0
          ilm.CameraFormat = LIBRAW_FORMAT_SigmaAPSH;
1358
0
        }
1359
0
        else if (normalized_model[4] == 'Q')
1360
0
        { // 'sd Quattro'
1361
0
          ilm.CameraFormat = LIBRAW_FORMAT_APSC;
1362
0
        }
1363
0
        else
1364
0
        {
1365
0
          ilm.CameraFormat = LIBRAW_FORMAT_SigmaAPSC;
1366
0
        }
1367
0
      }
1368
0
      else if (!strncasecmp(normalized_model, "DP", 2))
1369
0
      {
1370
0
        ilm.CameraMount = LIBRAW_MOUNT_FixedLens;
1371
0
        if (normalized_model[4] == 'M')
1372
0
        {
1373
0
          ilm.CameraFormat = LIBRAW_FORMAT_SigmaMerrill;
1374
0
        }
1375
0
        else if (normalized_model[4] == 'Q')
1376
0
        {
1377
0
          ilm.CameraFormat = LIBRAW_FORMAT_APSC;
1378
0
        }
1379
0
        else
1380
0
        {
1381
0
          ilm.CameraFormat = LIBRAW_FORMAT_SigmaAPSC;
1382
0
        }
1383
0
      }
1384
0
    }
1385
0
    else if (makeIs(LIBRAW_CAMERAMAKER_Konica))
1386
0
    {
1387
0
      if (!strncmp(model, "KD-", 3))
1388
0
      { // Konica KD-400Z, KD-510Z
1389
0
        ilm.CameraMount = LIBRAW_MOUNT_FixedLens;
1390
0
      }
1391
0
    }
1392
0
    else if (makeIs(LIBRAW_CAMERAMAKER_Mamiya))
1393
0
    {
1394
0
      if (!strncmp(normalized_model, "ZD", 2))
1395
0
      {
1396
0
        ilm.CameraFormat = LIBRAW_FORMAT_3648;
1397
0
        ilm.CameraMount = LIBRAW_MOUNT_Mamiya645;
1398
0
      }
1399
0
    }
1400
0
    else if (makeIs(LIBRAW_CAMERAMAKER_Sony))
1401
0
    {
1402
0
      if (!strncmp(normalized_model, "XCD-", 4))
1403
0
      {
1404
0
        ilm.CameraMount = LIBRAW_MOUNT_C;
1405
0
      }
1406
0
      else if (!strncmp(normalized_model, "DSC-V3", 6) ||
1407
0
               !strncmp(normalized_model, "DSC-F828", 8))
1408
0
      {
1409
0
        ilm.CameraMount = LIBRAW_MOUNT_FixedLens;
1410
0
        imSony.CameraType = LIBRAW_SONY_DSC;
1411
0
      }
1412
0
    }
1413
0
    else if (makeIs(LIBRAW_CAMERAMAKER_Polaroid) &&
1414
0
             !strncmp(normalized_model, "x530", 4))
1415
0
    {
1416
0
      ilm.CameraMount = LIBRAW_MOUNT_FixedLens;
1417
0
    }
1418
0
    else if (makeIs(LIBRAW_CAMERAMAKER_Rollei) &&
1419
0
             !strncmp(normalized_model, "d530flex", 8))
1420
0
    {
1421
0
      ilm.CameraMount = LIBRAW_MOUNT_FixedLens;
1422
0
    }
1423
0
    else if (makeIs(LIBRAW_CAMERAMAKER_Pentax) &&
1424
0
             !strncmp(normalized_model, "Optio", 5)) {
1425
0
        ilm.CameraMount = LIBRAW_MOUNT_FixedLens;
1426
0
    }
1427
0
    else if (makeIs(LIBRAW_CAMERAMAKER_Epson) &&
1428
0
             !strncmp(normalized_model, "R-D1", 4))
1429
0
    {
1430
0
      ilm.CameraMount = LIBRAW_MOUNT_Leica_M;
1431
0
      ilm.CameraFormat = LIBRAW_FORMAT_APSC;
1432
0
    }
1433
0
  }
1434
1435
0
  if ((ilm.LensMount == LIBRAW_MOUNT_Canon_RF) &&
1436
0
      (ilm.LensID == 61182)                    &&
1437
0
      (imCanon.RF_lensID != 0))                {
1438
0
    ilm.LensID = imCanon.RF_lensID;
1439
0
  }
1440
1441
0
  if (ilm.LensMount == LIBRAW_MOUNT_Unknown)
1442
0
  {
1443
0
    if (makeIs(LIBRAW_CAMERAMAKER_Samsung))
1444
0
    {
1445
0
      if ((imgdata.lens.Lens[0] == 'N') &&
1446
0
          (imgdata.lens.Lens[1] == 'X')) // same DNG problem
1447
0
      {
1448
0
        if (imgdata.lens.Lens[2] == '-')
1449
0
        {
1450
0
          ilm.LensMount = LIBRAW_MOUNT_Samsung_NX_M;
1451
0
          ilm.LensFormat = LIBRAW_FORMAT_1INCH;
1452
0
        }
1453
0
        else
1454
0
        {
1455
0
          ilm.LensMount = LIBRAW_MOUNT_Samsung_NX;
1456
0
          ilm.LensFormat = LIBRAW_FORMAT_APSC;
1457
0
        }
1458
0
      }
1459
0
    }
1460
0
  }
1461
1462
0
  if ((ilm.LensID == LIBRAW_LENS_NOT_SET) &&
1463
0
      xmpdata &&
1464
0
      (strlen(xmpdata) > 9))
1465
0
  {
1466
0
    if (makeIs(LIBRAW_CAMERAMAKER_Canon) &&
1467
0
        try_xml &&
1468
0
        (ps = strstr(xmpdata, "LensID=\"")))
1469
0
    {
1470
0
      ilm.LensID = atoi(ps + 8);
1471
0
      if (ilm.LensID == 61182)
1472
0
      {
1473
0
        ilm.LensMount = ilm.CameraMount = LIBRAW_MOUNT_Canon_RF;
1474
0
      }
1475
0
    }
1476
0
    else if (makeIs(LIBRAW_CAMERAMAKER_Samsung))
1477
0
    {
1478
0
      if ((ilm.LensMount == LIBRAW_MOUNT_Samsung_NX) &&
1479
0
          (ps = strstr(xmpdata, "LensID=\"(")))
1480
0
      {
1481
0
        ilm.LensID = atoi(ps + 9);
1482
0
      }
1483
0
    }
1484
0
  }
1485
1486
0
  if (ilm.CameraMount == LIBRAW_MOUNT_FixedLens)
1487
0
  {
1488
0
    if (ilm.CameraFormat)
1489
0
      ilm.LensFormat = ilm.CameraFormat;
1490
0
    if (ilm.LensMount == LIBRAW_MOUNT_Unknown)
1491
0
      ilm.LensMount = LIBRAW_MOUNT_FixedLens;
1492
0
  }
1493
1494
0
  if ((ilm.CameraMount != LIBRAW_MOUNT_Unknown) &&
1495
0
      (ilm.CameraMount != LIBRAW_MOUNT_FixedLens) &&
1496
0
      (ilm.LensMount == LIBRAW_MOUNT_Unknown)) {
1497
0
    if (ilm.LensID == LIBRAW_LENS_NOT_SET) ilm.LensMount = LIBRAW_MOUNT_IL_UM;
1498
0
    else ilm.LensMount = ilm.CameraMount;
1499
0
    }
1500
0
}
1501
1502
0
void LibRaw::SetStandardIlluminants (unsigned makerIdx, const char* /*normModel*/) {
1503
//  int i = -1;
1504
0
  int c;
1505
0
  if (!icWBC[LIBRAW_WBI_Ill_A][0] &&
1506
0
      !icWBC[LIBRAW_WBI_D65][0]) {
1507
0
    if (makerIdx == LIBRAW_CAMERAMAKER_Olympus ) {
1508
0
    for (int i = 0; i < 64 && icWBCCTC[i][0]; i++) {
1509
0
        if (icWBCCTC[i][0] == 3000)
1510
0
          FORC4 icWBC[LIBRAW_WBI_Ill_A][c] = int(icWBCCTC[i][c+1]);
1511
0
        else if (icWBCCTC[i][0] == 6600)
1512
0
          FORC4 icWBC[LIBRAW_WBI_D65][c] = int(icWBCCTC[i][c+1]);
1513
0
      }
1514
0
    }
1515
0
  }
1516
1517
0
  if (!icWBC[LIBRAW_WBI_Ill_A][0] && icWBC[LIBRAW_WBI_Tungsten][0])
1518
0
    FORC4 icWBC[LIBRAW_WBI_Ill_A][c] = icWBC[LIBRAW_WBI_Tungsten][c];
1519
1520
0
  if (!icWBC[LIBRAW_WBI_D65][0] && icWBC[LIBRAW_WBI_FL_N][0])
1521
0
    FORC4 icWBC[LIBRAW_WBI_D65][c] = icWBC[LIBRAW_WBI_FL_N][c];
1522
1523
0
  return;
1524
0
}