libopenraw  0.3.7
arwfile.cpp
1 /*
2  * libopenraw - arwfile.cpp
3  *
4  * Copyright (C) 2006-2023 Hubert Figuière
5  *
6  * This library is free software: you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public License
8  * as published by the Free Software Foundation, either version 3 of
9  * the License, or (at your option) any later version.
10  *
11  * This library 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 GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library. If not, see
18  * <http://www.gnu.org/licenses/>.
19  */
20 
21 #include <libopenraw/cameraids.h>
22 
23 #include "arwfile.hpp"
24 #include "ifdfilecontainer.hpp"
25 #include "rawfile_private.hpp"
26 
27 using namespace Debug;
28 
29 namespace OpenRaw {
30 
31 class RawData;
32 
33 namespace Internals {
34 
35 #define OR_MAKE_SONY_TYPEID(camid) \
36  OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_SONY, camid)
37 
38 static const ModelIdMap modelid_map = {
39  /* source: https://exiftool.org/TagNames/Sony.html */
40  /* SR2 */
41  { 2, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_R1) },
42  /* ARW */
43  { 256, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A100) },
44  { 257, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A900) },
45  { 258, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A700) },
46  { 259, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A200) },
47  { 260, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A350) },
48  { 261, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A300) },
49  // 262 DSLR-A900 (APS-C mode)
50  { 263, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A380) },
51  { 263, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A390) },
52  { 264, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A330) },
53  { 265, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A230) },
54  { 266, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A290) },
55  { 269, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A850) },
56  // 270 DSLR-A850 (APS-C mode)
57  { 273, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A550) },
58  { 274, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A500) },
59  { 275, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A450) },
60  { 278, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_NEX5) },
61  { 279, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_NEX3) },
62  { 280, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_SLTA33) },
63  { 281, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_SLTA55) },
64  { 282, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A560) },
65  { 283, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A580) },
66  { 284, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_NEXC3) },
67  { 285, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_SLTA35) },
68  { 286, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_SLTA65) },
69  { 287, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_SLTA77) },
70  { 288, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_NEX5N) },
71  { 289, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_NEX7) },
72  // 290 NEX-VG20E
73  { 291, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_SLTA37) },
74  { 292, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_SLTA57) },
75  { 293, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_NEXF3) },
76  { 294, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_SLTA99) },
77  { 295, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_NEX6) },
78  { 296, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_NEX5R) },
79  { 297, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX100) },
80  { 298, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX1) },
81  // 299 NEX-VG900
82  // 300 NEX-VG30E
83  { 302, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE3000) },
84  { 303, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_SLTA58) },
85  { 305, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_NEX3N) },
86  { 306, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7) },
87  { 307, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_NEX5T) },
88  { 308, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX100M2) },
89  { 309, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX10) },
90  { 310, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX1R) },
91  { 311, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7R) },
92  { 312, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE6000) },
93  { 313, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE5000) },
94  { 317, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX100M3) },
95  { 318, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7S) },
96  { 319, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCA77M2) },
97  { 339, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE5100) },
98  { 340, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7M2) },
99  { 341, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX100M4) },
100  { 342, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX10M2) },
101  { 344, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX1RM2) },
102  { 346, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCEQX1) },
103  { 347, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7RM2) },
104  { 350, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7SM2) },
105  { 353, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCA68) },
106  { 354, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCA99M2) },
107  { 355, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX10M3) },
108  { 356, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX100M5) },
109  { 357, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE6300) },
110  { 358, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE9) },
111  { 360, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE6500) },
112  { 362, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7RM3) },
113  { 363, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7M3) },
114  { 364, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX0) },
115  { 365, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX10M4) },
116  { 366, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX100M6) },
117  { 367, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_HX99) },
118  { 369, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX100M5A) },
119  { 371, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE6400) },
120  { 372, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX0M2) },
121  { 373, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_HX95) },
122  { 374, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX100M7) },
123  { 375, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7RM4) },
124  { 376, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE9M2) },
125  { 378, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE6600) },
126  { 379, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE6100) },
127  { 380, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ZV1) },
128  { 381, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7C) },
129  { 382, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ZVE10) },
130  { 383, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7SM3) },
131  { 384, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE1) },
132  { 386, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7RM3A) },
133  { 387, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7RM4A) },
134  { 388, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7M4) },
135  { 390, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7RM5) },
136  { 391, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILME_FX30) },
137  { 393, OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ZVE1) },
138 };
139 
140 /* taken from dcraw, by default */
141 static const BuiltinColourMatrix s_matrices[] = {
142  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A100),
143  0,
144  0xfeb,
145  { 9437, -2811, -774, -8405, 16215, 2290, -710, 596, 7181 } },
146  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A200),
147  0,
148  0,
149  { 9847, -3091, -928, -8485, 16345, 2225, -715, 595, 7103 } },
150  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A230),
151  0,
152  0,
153  { 9847, -3091, -928, -8485, 16345, 2225, -715, 595, 7103 } },
154  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A290),
155  0,
156  0,
157  { 6038, -1484, -579, -9145, 16746, 2512, -875, 746, 7218 } },
158  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A300),
159  0,
160  0,
161  { 9847, -3091, -928, -8485, 16345, 2225, -715, 595, 7103 } },
162  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A330),
163  0,
164  0,
165  { 9847, -3091, -928, -8485, 16345, 2225, -715, 595, 7103 } },
166  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A350),
167  0,
168  0,
169  { 6038, -1484, -579, -9145, 16746, 2512, -875, 746, 7218 } },
170  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A380),
171  0,
172  0,
173  { 6038, -1484, -579, -9145, 16746, 2512, -875, 746, 7218 } },
174  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A450),
175  128,
176  0xfeb,
177  { 4950, -580, -103, -5228, 12542, 3029, -709, 1435, 7371 } },
178  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A500),
179  0,
180  0,
181  { 6046, -1127, -278, -5574, 13076, 2786, -691, 1419, 7625 } },
182  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A550),
183  128,
184  0xfeb,
185  { 4950, -580, -103, -5228, 12542, 3029, -709, 1435, 7371 } },
186  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A560),
187  128,
188  0xfeb,
189  { 4950, -580, -103, -5228, 12542, 3029, -709, 1435, 7371 } },
190  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A580),
191  128,
192  0,
193  { 5932, -1492, -411, -4813, 12285, 2856, -741, 1524, 6739 } },
194  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A700),
195  126,
196  0,
197  { 5775, -805, -359, -8574, 16295, 2391, -1943, 2341, 7249 } },
198  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A850),
199  128,
200  0,
201  { 5413, -1162, -365, -5665, 13098, 2866, -608, 1179, 8440 } },
202  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A900),
203  128,
204  0,
205  { 5209, -1072, -397, -8845, 16120, 2919, -1618, 1803, 8654 } },
206  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_SLTA33),
207  128,
208  0,
209  { 6069, -1221, -366, -5221, 12779, 2734, -1024, 2066, 6834 } },
210  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_SLTA35),
211  128,
212  0,
213  { 5986, -1618, -415, -4557, 11820, 3120, -681, 1404, 6971 } },
214  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_SLTA37),
215  128,
216  0,
217  { 5991, -1456, -455, -4764, 12135, 2980, -707, 1425, 6701 } },
218  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_SLTA55),
219  128,
220  0,
221  { 5932, -1492, -411, -4813, 12285, 2856, -741, 1524, 6739 } },
222  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_SLTA57),
223  128,
224  0,
225  { 5991, -1456, -455, -4764, 12135, 2980, -707, 1425, 6701 } },
226  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_SLTA58),
227  128,
228  0,
229  { 5991, -1456, -455, -4764, 12135, 2980, -707, 1425, 6701 } },
230  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_SLTA65),
231  128,
232  0,
233  { 5491, -1192, -363, -4951, 12342, 2948, -911, 1722, 7192 } },
234  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCA68),
235  128,
236  0,
237  { 6435, -1903, -536, -4722, 12449, 2550, -663, 1363, 6517 } },
238  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_SLTA77),
239  128,
240  0,
241  { 5491, -1192, -363, -4951, 12342, 2948, -911, 1722, 7192 } },
242  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCA77M2),
243  128,
244  0,
245  { 5991, -1732, -443, -4100, 11989, 2381, -704, 1467, 5992 } },
246  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_SLTA99),
247  0,
248  0,
249  { 6344, -1612, -462, -4863, 12477, 2681, -865, 1786, 6899 } },
250  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCA99M2),
251  0,
252  0,
253  { 6660, -1918, -471, -4613, 12398, 2485, -649, 1433, 6447 } },
254  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_NEX3),
255  128,
256  0, /* Adobe */
257  { 6549, -1550, -436, -4880, 12435, 2753, -854, 1868, 6976 } },
258  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_HX95),
259  0,
260  0,
261  { 13076, -5686, -1481, -4027, 12851, 1251, -167, 725, 4937 } },
262  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_HX99),
263  0,
264  0,
265  { 13076, -5686, -1481, -4027, 12851, 1251, -167, 725, 4937 } },
266  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_NEX3N),
267  128,
268  0,
269  { 6129, -1545, -418, -4930, 12490, 2743, -977, 1693, 6615 } },
270  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_NEX5),
271  128,
272  0, /* Adobe */
273  { 6549, -1550, -436, -4880, 12435, 2753, -854, 1868, 6976 } },
274  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_NEX5N),
275  128,
276  0,
277  { 5991, -1456, -455, -4764, 12135, 2980, -707, 1425, 6701 } },
278  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_NEX5R),
279  128,
280  0,
281  { 6129, -1545, -418, -4930, 12490, 2743, -977, 1693, 6615 } },
282  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_NEX5T),
283  128,
284  0,
285  { 6129, -1545, -418, -4930, 12490, 2743, -977, 1693, 6615 } },
286  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_NEXC3),
287  128,
288  0,
289  { 5991, -1456, -455, -4764, 12135, 2980, -707, 1425, 6701 } },
290  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_NEXF3),
291  128,
292  0,
293  { 5991, -1456, -455, -4764, 12135, 2980, -707, 1425, 6701 } },
294  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_NEX6),
295  128,
296  0,
297  { 6129, -1545, -418, -4930, 12490, 2743, -977, 1693, 6615 } },
298  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_NEX7),
299  128,
300  0,
301  { 5491, -1192, -363, -4951, 12342, 2948, -911, 1722, 7192 } },
302  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_R1),
303  0,
304  0,
305  { 8512, -2641, -694, -8041, 15670, 2526, -1820, 2117, 7414 } },
306  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX100),
307  0,
308  0,
309  { 8651, -2754, -1057, -3464, 12207, 1373, -568, 1398, 4434 } },
310  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX100M2),
311  0,
312  0,
313  { 6596, -2079, -562, -4782, 13016, 1933, -970, 1581, 5181 } },
314  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX100M3),
315  0,
316  0,
317  { 6596, -2079, -562, -4782, 13016, 1933, -970, 1581, 5181 } },
318  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX100M4),
319  0,
320  0,
321  { 6596, -2079, -562, -4782, 13016, 1933, -970, 1581, 5181 } },
322  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX100M5),
323  0,
324  0,
325  { 6596, -2079, -562, -4782, 13016, 1933, -970, 1581, 5181 } },
326  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX100M5A),
327  0,
328  0,
329  { 11176, -4700, -965, -4004, 12184, 2032, -763, 1726, 5876 } },
330  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX100M6),
331  0,
332  0,
333  { 7325, -2321, -596, -3494, 11674, 2055, -668, 1562, 5031 } },
334  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX100M7),
335  0,
336  0,
337  { 7325, -2321, -596, -3494, 11674, 2055, -668, 1562, 5031 } },
338  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX0),
339  0,
340  0,
341  { 9396, -3507, -843, -2497, 11111, 1572, -343, 1355, 5089 } },
342  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX0M2),
343  0,
344  0,
345  { 9396, -3507, -843, -2497, 11111, 1572, -343, 1355, 5089 } },
346  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX1),
347  0,
348  0,
349  { 6344, -1612, -462, -4863, 12477, 2681, -865, 1786, 6899 } },
350  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX1R),
351  0,
352  0,
353  { 6344, -1612, -462, -4863, 12477, 2681, -865, 1786, 6899 } },
354  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX1RM2),
355  0,
356  0,
357  { 6629, -1900, -483, -4618, 12349, 2550, -622, 1381, 6514 } },
358  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX10),
359  0,
360  0,
361  { 6679, -1825, -745, -5047, 13256, 1953, -1580, 2422, 5183 } },
362  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX10M2),
363  0,
364  0,
365  { 6679, -1825, -745, -5047, 13256, 1953, -1580, 2422, 5183 } },
366  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX10M3),
367  0,
368  0,
369  { 6679, -1825, -745, -5047, 13256, 1953, -1580, 2422, 5183 } },
370  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX10M4),
371  0,
372  0,
373  { 7699, -2566, -629, -2967, 11270, 1928, -378, 1286, 4807 } },
374 
375  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE1),
376  128,
377  0,
378  { 8161, -2947, -739, -4811, 12668, 2389, -437, 1229, 6524 } },
379  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE3000),
380  128,
381  0,
382  { 5991, -1456, -455, -4764, 12135, 2980, -707, 1425, 6701 } },
383  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE5000),
384  128,
385  0,
386  { 5991, -1456, -455, -4764, 12135, 2980, -707, 1425, 6701 } },
387  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE5100),
388  128,
389  0,
390  { 5991, -1456, -455, -4764, 12135, 2980, -707, 1425, 6701 } },
391  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE6000),
392  128,
393  0,
394  { 5991, -1456, -455, -4764, 12135, 2980, -707, 1425, 6701 } },
395  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE6100),
396  128,
397  0,
398  { 7657, -2847, -607, -4083, 11966, 2389, -684, 1418, 5844 } },
399  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE6300),
400  0,
401  0,
402  { 5973, -1695, -419, -3826, 11797, 2293, -639, 1398, 5789 } },
403  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE6400),
404  0,
405  0,
406  { 5973, -1695, -419, -3826, 11797, 2293, -639, 1398, 5789 } },
407  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE6500),
408  0,
409  0,
410  { 5973, -1695, -419, -3826, 11797, 2293, -639, 1398, 5789 } },
411  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE6600),
412  128,
413  0,
414  { 7657, -2847, -607, -4083, 11966, 2389, -684, 1418, 5844 } },
415  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7),
416  128,
417  0,
418  { 5271, -712, -347, -6153, 13653, 2763, -1601, 2366, 7242 } },
419  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7M2),
420  128,
421  0,
422  { 5271, -712, -347, -6153, 13653, 2763, -1601, 2366, 7242 } },
423  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7M3),
424  128,
425  0,
426  { 7374, -2389, -551, -5435, 13162, 2519, -1006, 1795, 6552 } },
427  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7M4),
428  128,
429  0,
430  { 7460, -2365, -588, -5687, 13442, 2474, -624, 1156, 6584 } },
431  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7R),
432  128,
433  0,
434  { 4913, -541, -202, -6130, 13513, 2906, -1564, 2151, 7183 } },
435  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7RM2),
436  0,
437  0,
438  { 6629, -1900, -483, -4618, 12349, 2550, -622, 1381, 6514 } },
439  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7RM3),
440  0,
441  0,
442  { 6640, -1847, -503, -5238, 13010, 2474, -993, 1673, 6527 } },
443  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7RM3A),
444  0,
445  0,
446  { 6640, -1847, -503, -5238, 13010, 2474, -993, 1673, 6527 } },
447  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7RM4),
448  0,
449  0,
450  { 6640, -1847, -503, -5238, 13010, 2474, -993, 1673, 6527 } },
451  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7RM4A),
452  0,
453  0,
454  { 7662, -2686, -660, -5240, 12965, 2530, -796, 1508, 6167 } },
455  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7RM5),
456  0,
457  0,
458  { 8200, -2976, -719, -4296, 12053, 2532, -429, 1282, 5774 } },
459  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7S),
460  128,
461  0,
462  { 5838, -1430, -246, -3497, 11477, 2297, -748, 1885, 5778 } },
463  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7SM2),
464  128,
465  0,
466  { 5838, -1430, -246, -3497, 11477, 2297, -748, 1885, 5778 } },
467  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7SM3),
468  128,
469  0,
470  { 6912, -2127, -469, -4470, 12175, 2587, -398, 1478, 6492 } },
471 
472  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7C),
473  128,
474  0,
475  { 7374, -2389, -551, -5435, 13162, 2519, -1006, 1795, 6552 } },
476  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE9),
477  128,
478  0,
479  { 6389, -1703, -378, -4562, 12265, 2587, -670, 1489, 6550 } },
480  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE9M2),
481  128,
482  0,
483  { 6389, -1703, -378, -4562, 12265, 2587, -670, 1489, 6550 } },
484  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCEQX1),
485  128,
486  0,
487  { 5991, -1456, -455, -4764, 12135, 2980, -707, 1425, 6701 } },
488  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILME_FX30),
489  128,
490  0,
491  { 6972, -2408, -600, -4330, 12101, 2515, -388, 1277, 5847 } },
492  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ZV1),
493  128,
494  0,
495  { 8280, -2987, -703, -3531, 11645, 2133, -550, 1542, 5312 } },
496  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ZVE1),
497  128,
498  0,
499  { 6912, -2127, -469, -4470, 12175, 2587, -398, 1478, 6492 } },
500  { OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ZVE10),
501  128,
502  0,
503  { 6355, -2067, -490, -3653, 11542, 2400, -406, 1258, 5506 } },
504 
505  /* The Hasselblad Lunar is like a Nex7 */
506  { OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_HASSELBLAD,
507  OR_TYPEID_HASSELBLAD_LUNAR),
508  128,
509  0,
510  { 5491, -1192, -363, -4951, 12342, 2948, -911, 1722, 7192 } },
511 
512  { 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
513 };
514 
515 const IfdFile::camera_ids_t ArwFile::s_def[] = {
516  { "DSLR-A100", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A100) },
517  { "DSLR-A200", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A200) },
518  { "DSLR-A230", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A230) },
519  { "DSLR-A290", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A290) },
520  { "DSLR-A300", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A300) },
521  { "DSLR-A330", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A330) },
522  { "DSLR-A350", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A350) },
523  { "DSLR-A380", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A380) },
524  { "DSLR-A390", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A390) },
525  { "DSLR-A450", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A450) },
526  { "DSLR-A500", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A500) },
527  { "DSLR-A550", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A550) },
528  { "DSLR-A560", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A560) },
529  { "DSLR-A580", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A580) },
530  { "DSLR-A700", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A700) },
531  { "DSLR-A850", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A850) },
532  { "DSLR-A900", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_A900) },
533  { "SLT-A33", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_SLTA33) },
534  { "SLT-A35", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_SLTA35) },
535  { "SLT-A37", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_SLTA37) },
536  { "SLT-A55V", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_SLTA55) },
537  { "SLT-A57", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_SLTA57) },
538  { "SLT-A58", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_SLTA58) },
539  { "SLT-A65V", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_SLTA65) },
540  { "SLT-A77V", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_SLTA77) },
541  { "SLT-A99V", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_SLTA99) },
542  { "NEX-3", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_NEX3) },
543  { "NEX-3N", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_NEX3N) },
544  { "NEX-5", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_NEX5) },
545  { "NEX-5N", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_NEX5N) },
546  { "NEX-5R", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_NEX5R) },
547  { "NEX-5T", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_NEX5T) },
548  { "NEX-C3", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_NEXC3) },
549  { "NEX-F3", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_NEXF3) },
550  { "NEX-6", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_NEX6) },
551  { "NEX-7", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_NEX7) },
552  { "DSC-HX95", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_HX95) },
553  { "DSC-HX99", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_HX99) },
554  { "DSC-R1", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_R1) },
555  { "DSC-RX10", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX10) },
556  { "DSC-RX10M2", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX10M2) },
557  { "DSC-RX10M3", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX10M3) },
558  { "DSC-RX10M4", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX10M4) },
559  { "DSC-RX100", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX100) },
560  { "DSC-RX100M2", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX100M2) },
561  { "DSC-RX100M3", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX100M3) },
562  { "DSC-RX100M4", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX100M4) },
563  { "DSC-RX100M5", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX100M5) },
564  { "DSC-RX100M5A", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX100M5A) },
565  { "DSC-RX100M6", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX100M6) },
566  { "DSC-RX100M7", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX100M7) },
567  { "DSC-RX0", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX0) },
568  { "DSC-RX0M2", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX0M2) },
569  { "DSC-RX1", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX1) },
570  { "DSC-RX1R", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX1R) },
571  { "DSC-RX1RM2", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_RX1RM2) },
572  { "ILCA-68", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCA68) },
573  { "ILCA-77M2", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCA77M2) },
574  { "ILCA-99M2", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCA99M2) },
575  { "ILCE-1", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE1) },
576  { "ILCE-3000", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE3000) },
577  { "ILCE-3500", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE3500) },
578  { "ILCE-5000", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE5000) },
579  { "ILCE-5100", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE5100) },
580  { "ILCE-6000", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE6000) },
581  { "ILCE-6100", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE6100) },
582  { "ILCE-6300", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE6300) },
583  { "ILCE-6400", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE6400) },
584  { "ILCE-6500", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE6500) },
585  { "ILCE-6600", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE6600) },
586  { "ILCE-7", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7) },
587  { "ILCE-7C", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7C) },
588  { "ILCE-7M2", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7M2) },
589  { "ILCE-7M3", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7M3) },
590  { "ILCE-7M4", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7M4) },
591  { "ILCE-7R", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7R) },
592  { "ILCE-7RM2", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7RM2) },
593  { "ILCE-7RM3", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7RM3) },
594  { "ILCE-7RM3A", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7RM3A) },
595  { "ILCE-7RM4", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7RM4) },
596  { "ILCE-7RM4A", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7RM4A) },
597  { "ILCE-7RM5", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7RM5) },
598  { "ILCE-7S", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7S) },
599  { "ILCE-7SM2", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7SM2) },
600  { "ILCE-7SM3", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE7SM3) },
601  { "ILCE-9", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE9) },
602  { "ILCE-9M2", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCE9M2) },
603  { "ILCE-QX1", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ILCEQX1) },
604  { "ZV-1", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ZV1) },
605  { "ZV-E1", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ZVE1) },
606  { "ZV-E10", OR_MAKE_SONY_TYPEID(OR_TYPEID_SONY_ZVE10) },
607 
608  { "Lunar", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_HASSELBLAD,
609  OR_TYPEID_HASSELBLAD_LUNAR) },
610  { 0, 0 }
611 };
612 
613 RawFile *ArwFile::factory(const IO::Stream::Ptr &s)
614 {
615  return new ArwFile(s);
616 }
617 
618 ArwFile::ArwFile(const IO::Stream::Ptr &s)
620 {
621  _setIdMap(s_def);
622  _setMatrices(s_matrices);
623 }
624 
625 ArwFile::~ArwFile()
626 {
627 }
628 
629 IfdDir::Ref ArwFile::_locateCfaIfd()
630 {
631  if (!isA100()) {
632  return TiffEpFile::_locateCfaIfd();
633  }
634  return mainIfd();
635 }
636 
637 ::or_error ArwFile::_getRawData(RawData &data, uint32_t options)
638 {
639  if (isA100()) {
640  // TODO implement for A100
641  return OR_ERROR_NOT_FOUND;
642  }
643  return TiffEpFile::_getRawData(data, options);
644 }
645 
646 bool ArwFile::vendorCameraIdLocation(Internals::IfdDir::Ref& ifd, uint16_t& index,
647  const ModelIdMap*& model_map)
648 {
649  auto mn = makerNoteIfd();
650  if (mn) {
651  // There is a camera model ID in the MakerNote tag 0xb001.
652  ifd = mn;
653  index = IFD::MNOTE_SONY_MODEL_ID;
654  model_map = &modelid_map;
655  return true;
656  }
657  return false;
658 }
659 
660 }
661 }
662 /*
663  Local Variables:
664  mode:c++
665  c-file-style:"stroustrup"
666  c-file-offsets:((innamespace . 0))
667  indent-tabs-mode:nil
668  fill-column:80
669  End:
670 */
std::shared_ptr< Stream > Ptr
Definition: stream.hpp:47
std::shared_ptr< IfdDir > Ref
Shared ptr of an IfdDir.
Definition: ifddir.hpp:56
TIFF.EP conformant files.
Definition: tiffepfile.hpp:44
Represent camera raw data.
Definition: rawdata.hpp:38
RAW file.
Definition: rawfile.hpp:66
#define OR_MAKE_FILE_TYPEID(vendor, camera)
Make a or_rawfile_typeid with a vendor and camera.
Definition: consts.h:133
or_error
Error codes returned by libopenraw.
Definition: consts.h:42
@ OR_RAWFILE_TYPE_ARW
Definition: consts.h:65
@ OR_ERROR_NOT_FOUND
Definition: consts.h:48
std::map< uint32_t, ::or_rawfile_typeid > ModelIdMap
Definition: rawfile.hpp:54
Global namespace for libopenraw.
Definition: arwfile.cpp:29