23 #include <sys/types.h>
29 #include <libopenraw/cameraids.h>
30 #include <libopenraw/debug.h>
31 #include <libopenraw/metadata.h>
33 #include "rawdata.hpp"
34 #include "rawfile.hpp"
35 #include "metavalue.hpp"
39 #include "ifdentry.hpp"
40 #include "ifdfilecontainer.hpp"
41 #include "rawfile_private.hpp"
42 #include "raffile.hpp"
43 #include "rafcontainer.hpp"
44 #include "rafmetacontainer.hpp"
45 #include "jfifcontainer.hpp"
46 #include "makernotedir.hpp"
49 #include "io/streamclone.hpp"
50 #include "xtranspattern.hpp"
55 #define OR_MAKE_FUJIFILM_TYPEID(camid) \
56 OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_FUJIFILM, camid)
59 static const BuiltinColourMatrix s_matrices[] = {
60 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_F550EXR),
63 { 1369, -5358, -1474, -3369, 11600, 1998, -132, 1554, 4395 } },
64 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_F700),
67 { 10004, -3219, -1201, -7036, 15047, 2107, -1863, 2565, 7736 } },
68 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_F810),
71 { 11044, -3888, -1120, -7248, 15168, 2208, -1531, 2277, 8069 } },
72 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_E900),
75 { 9183, -2526, -1078, -7461, 15071, 2574, -2022, 2440, 8639 } },
76 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_S2PRO),
79 { 12492, -4690, -1402, -7033, 15423, 1647, -1507, 2111, 7697 } },
80 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_S3PRO),
83 { 11807, -4612, -1294, -8927, 16968, 1988, -2120, 2741, 8006 } },
84 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_S5PRO),
87 { 12300, -5110, -1304, -9117, 17143, 1998, -1947, 2448, 8100 } },
88 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_S5000),
91 { 8754, -2732, -1019, -7204, 15069, 2276, -1702, 2334, 6982 } },
92 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_S5600),
95 { 9636, -2804, -988, -7442, 15040, 2589, -1803, 2311, 8621 } },
96 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_S9500),
99 { 10491, -3423, -1145, -7385, 15027, 2538, -1809, 2275, 8692 } },
100 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_S6000FD),
103 { 12628, -4886, -1401, -6860, 14997, 1962, -2198, 2782, 7091 } },
104 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_S6500FD),
107 { 12628, -4887, -1401, -6861, 14996, 1962, -2198, 2782, 7091 } },
108 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_SL1000),
111 { 11705, -4262, -1107, -2282, 10791, 1709, -555, 1713, 4945 } },
112 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_HS10),
115 { 12440, -3954, -1183, -1123, 9674, 1708, -83, 1614, 4086 } },
117 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_HS30EXR),
120 { 1369, -5358, -1474, -3369, 11600, 1998, -132, 1554, 4395 } },
121 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_HS50EXR),
124 { 12085, -4727, -953, -3257, 11489, 2002, -511, 2046, 4592 } },
125 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_X100),
128 { 12161, -4457, -1069, -5034, 12874, 2400, -795, 1724, 6904 } },
130 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_X100S),
133 { 10592, -4262, -1008, -3514, 11355, 2465, -870, 2025, 6386 } },
134 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_X100T),
137 { 10592, -4262, -1008, -3514, 11355, 2465, -870, 2025, 6386 } },
139 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_X100F),
142 { 11434, -4948, -1210, -3746, 12042, 1903, -666, 1479, 5235 } },
143 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_X100V),
146 { 13426, -6334, -1177, -4244, 12136, 2371, -580, 1303, 5980 } },
147 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_X10),
150 { 13509, -6199, -1254, -4430, 12733, 1865, -331, 1441, 5022 } },
152 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_X20),
155 { 11768, -4971, -1133, -4904, 12927, 2183, -480, 1723, 4605 } },
157 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_X30),
160 { 12328, -5256, -1144, -4469, 12927, 1675, -87, 1291, 4351 } },
161 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_X70),
164 { 10450, -4329, -878, -3217, 11105, 2421, -752, 1758, 6519 } },
165 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XPRO1),
168 { 10413, -3996, -993, -3721, 11640, 2361, -733, 1540, 6011 } },
169 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XPRO2),
172 { 11434, -4948, -1210, -3746, 12042, 1903, -666, 1479, 5235 } },
173 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XPRO3),
176 { 13426, -6334, -1177, -4244, 12136, 2371, -580, 1303, 5980 } },
177 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XA1),
180 { 11086, -4555, -839, -3512, 11310, 2517, -815, 1341, 5940 } },
181 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XA10),
184 { 11540, -4999, -991, -2949, 10963, 2278, -382, 1049, 5605 } },
185 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XA2),
188 { 10763, -4560, -917, -3346, 11311, 2322, -475, 1135, 5843 } },
190 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XA3),
193 { 12407, -5222, -1086, -2971, 11116, 2120, -294, 1029, 5284 } },
195 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XA5),
198 { 11673, -476, -1041, -3988, 12058, 2166, -771, 1417, 5569 } },
199 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XA7),
202 { 15055, -7391, -1274, -4062, 12071, 2238, -610, 1217, 6147 } },
204 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XQ1),
207 { 9252, -2704, -1064, -5893, 14265, 1717, -1101, 2341, 4349 } },
209 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XQ2),
212 { 9252, -2704, -1064, -5893, 14265, 1717, -1101, 2341, 4349 } },
213 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XE1),
216 { 10413, -3996, -993, -3721, 11640, 2361, -733, 1540, 6011 } },
217 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XE2),
220 { 8458, -2451, -855, -4597, 12447, 2407, -1475, 2482, 6526 } },
221 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XE2S),
224 { 11562, -5118, -961, -3022, 11007, 2311, -525, 1569, 6097 } },
225 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XE3),
228 { 11434, -4948, -1210, -3746, 12042, 1903, -666, 1479, 5235 } },
229 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XE4),
232 { 13426, -6334, -1177, -4244, 12136, 2371, -580, 1303, 5980 } },
234 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XH1),
237 { 11434, -4948, -1210, -3746, 12042, 1903, -666, 1479, 5235 } },
238 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XH2),
241 { 11809, -5358, -1141, -4248, 12164, 2343, -514, 1097, 5848 } },
242 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XH2S),
245 { 12836, -5909, -1032, -3087, 11132, 2236, -35, 872, 5330 } },
246 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XM1),
249 { 10413, -3996, -993, -3721, 11640, 2361, -733, 1540, 6011 } },
250 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XT1),
253 { 8458, -2451, -855, -4597, 12447, 2407, -1475, 2482, 6526 } },
254 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XT10),
257 { 8458, -2451, -855, -4597, 12447, 2407, -1475, 2482, 6526 } },
258 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XT100),
261 { 11673, -476, -1041, -3988, 12058, 2166, -771, 1417, 5569 } },
262 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XT2),
265 { 11434, -4948, -1210, -3746, 12042, 1903, -666, 1479, 5235 } },
266 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XT20),
269 { 11434, -4948, -1210, -3746, 12042, 1903, -666, 1479, 5235 } },
270 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XT200),
273 { 15055, -7391, -1274, -4062, 12071, 2238, -610, 1217, 6147 } },
274 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XT3),
277 { 16393, -7740, -1436, -4238, 12131, 2371, -633, 1424, 6553 } },
278 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XT30),
281 { 13426, -6334, -1177, -4244, 12136, 2371, -580, 1303, 5980 } },
282 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XT30_II),
285 { 13426, -6334, -1177, -4244, 12136, 2371, -580, 1303, 5980 } },
286 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XT4),
289 { 13426, -6334, -1177, -4244, 12136, 2371, -580, 1303, 5980 } },
290 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XT5),
293 { 11809, -5358, -1141, -4248, 12164, 2343, -514, 1097, 5848 } },
295 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XS1),
298 { 13509, -6199, -1254, -4430, 12733, 1865, -331, 1441, 5022 } },
299 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XS10),
302 { 13426, -6334, -1177, -4244, 12136, 2371, -580, 1303, 5980 } },
303 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XF1),
306 { 13509, -6199, -1254, -4430, 12733, 1865, -331, 1441, 5022 } },
307 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XF10),
310 { 11673, -476, -1041, -3988, 12058, 2166, -771, 1417, 5569 } },
311 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_S200EXR),
314 { 11401, -4498, -1312, -5088, 12751, 2613, -838, 1568, 5941 } },
315 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_S100FS),
318 { 11521, -4355, -1065, -6524, 13768, 3059, -1466, 1984, 6045 } },
319 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_GFX50S),
322 { 11756, -4754, -874, -3056, 11045, 2305, -381, 1457, 6006 } },
323 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_GFX50S_II),
326 { 11756, -4754, -874, -3056, 11045, 2305, -381, 1457, 6006 } },
328 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_GFX50R),
331 { 11756, -4754, -874, -3056, 11045, 2305, -381, 1457, 6006 } },
332 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_GFX100),
335 { 16212, -8423, -1583, -4336, 12583, 1937, -195, 726, 6199 } },
336 { OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_GFX100S),
339 { 16212, -8423, -1583, -4336, 12583, 1937, -195, 726, 6199 } },
341 { 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
344 const RawFile::camera_ids_t RafFile::s_def[] = {
345 {
"GFX 50S", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_GFX50S) },
346 {
"GFX50S II", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_GFX50S_II) },
347 {
"GFX 50R", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_GFX50R) },
348 {
"GFX 100", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_GFX100) },
349 {
"GFX100S", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_GFX100S) },
350 {
"FinePix F550EXR", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_F550EXR) },
351 {
"FinePix F700 ", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_F700) },
352 {
"FinePix F810 ", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_F810) },
353 {
"FinePix E900 ", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_E900) },
354 {
"FinePixS2Pro", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_S2PRO) },
355 {
"FinePix S3Pro ", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_S3PRO) },
356 {
"FinePix S5Pro ", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_S5PRO) },
357 {
"FinePix S5000 ", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_S5000) },
358 {
"FinePix S5600 ", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_S5600) },
359 {
"FinePix S6000fd", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_S6000FD) },
360 {
"FinePix S6500fd", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_S6500FD) },
361 {
"FinePix S9500 ", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_S9500) },
362 {
"FinePix SL1000", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_SL1000) },
363 {
"FinePix HS10 HS11", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_HS10) },
364 {
"FinePix HS30EXR", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_HS30EXR) },
365 {
"FinePix HS33EXR", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_HS33EXR) },
366 {
"FinePix HS50EXR", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_HS50EXR) },
367 {
"FinePix S100FS ", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_S100FS) },
368 {
"FinePix S200EXR", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_S200EXR) },
369 {
"FinePix X100", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_X100) },
370 {
"X10", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_X10) },
371 {
"X20", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_X20) },
372 {
"X30", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_X30) },
373 {
"X70", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_X70) },
374 {
"X-Pro1", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XPRO1) },
375 {
"X-Pro2", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XPRO2) },
376 {
"X-Pro3", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XPRO3) },
377 {
"X-S1", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XS1) },
378 {
"X-S10", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XS10) },
379 {
"X-A1", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XA1) },
380 {
"X-A10", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XA10) },
381 {
"X-A2", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XA2) },
382 {
"X-A3", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XA3) },
383 {
"X-A5", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XA5) },
384 {
"X-A7", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XA7) },
385 {
"XQ1", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XQ1) },
386 {
"XQ2", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XQ2) },
387 {
"X-E1", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XE1) },
388 {
"X-E2", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XE2) },
389 {
"X-E2S", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XE2S) },
390 {
"X-E3", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XE3) },
391 {
"X-E4", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XE4) },
392 {
"X-M1", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XM1) },
393 {
"X-T1", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XT1) },
394 {
"X-T10", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XT10) },
395 {
"X-T100", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XT100) },
396 {
"X-T2", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XT2) },
397 {
"X-T20", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XT20) },
398 {
"X-T200", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XT200) },
399 {
"X-T3", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XT3) },
400 {
"X-T30", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XT30) },
401 {
"X-T30 II", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XT30_II) },
402 {
"X-T4", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XT4) },
403 {
"X-T5", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XT5) },
404 {
"XF1", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XF1) },
405 {
"XF10", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XF10) },
406 {
"X100S", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_X100S) },
407 {
"X100T", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_X100T) },
408 {
"X100F", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_X100F) },
409 {
"X100V", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_X100V) },
410 {
"X-H1", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XH1) },
411 {
"X-H2", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XH2) },
412 {
"X-H2S", OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XH2S) },
419 return new RafFile(s);
426 _setMatrices(s_matrices);
446 ::or_error RafFile::_enumThumbnailSizes(std::vector<uint32_t> &list)
456 if (jpegPreview->getDimensions(x, y)) {
457 uint32_t size = std::max(x, y);
459 list.push_back(size);
461 m_container->getJpegOffset(),
462 m_container->getJpegLength()));
472 auto result = dir->getIntegerValue(IFD::EXIF_TAG_IMAGE_WIDTH);
475 result = dir->getIntegerValue(IFD::EXIF_TAG_IMAGE_LENGTH);
476 y = result.value_or(0);
479 if (result.empty()) {
481 dir->getValue<uint32_t>(IFD::EXIF_TAG_JPEG_INTERCHANGE_FORMAT);
482 if (result.empty()) {
485 uint32_t jpeg_offset = result.value() + jpegPreview->
exifOffset();
487 result = dir->getValue<uint32_t>(IFD::EXIF_TAG_JPEG_INTERCHANGE_FORMAT_LENGTH);
488 if (result.empty()) {
491 uint32_t jpeg_size = result.value();
493 auto s = std::make_shared<IO::StreamClone>(jpegPreview->file(), jpeg_offset);
494 auto thumb = std::make_unique<JfifContainer>(s, 0);
496 if (thumb->getDimensions(x, y)) {
497 uint32_t size = std::max(x, y);
499 list.push_back(size);
502 jpeg_offset + m_container->getJpegOffset(),
517 RafFile::isXTrans(RawFile::TypeId type_)
const
520 case OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XPRO1):
521 case OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XPRO2):
522 case OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XPRO3):
523 case OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XE1):
524 case OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XE2):
525 case OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XE2S):
526 case OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XE3):
527 case OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XE4):
528 case OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XH1):
529 case OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XH2):
530 case OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XH2S):
531 case OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XM1):
532 case OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XQ1):
533 case OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XQ2):
534 case OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XT1):
535 case OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XT10):
536 case OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XT2):
537 case OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XT20):
538 case OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XT3):
539 case OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XT30):
540 case OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XT30_II):
541 case OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XT4):
542 case OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XT5):
543 case OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_X100S):
544 case OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_X100T):
545 case OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_X100F):
546 case OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_X100V):
547 case OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_X20):
548 case OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_X30):
549 case OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_X70):
550 case OR_MAKE_FUJIFILM_TYPEID(OR_TYPEID_FUJIFILM_XS10):
564 LOGERR(
"RAF: Can't get meta container\n");
568 RafMetaValue::Ref value = meta->getValue(RAF_TAG_SENSOR_DIMENSION);
571 value = meta->getValue(RAF_TAG_IMG_HEIGHT_WIDTH);
573 uint32_t dims = value->get().getUInteger(0);
574 uint16_t h = (dims & 0xFFFF0000) >> 16;
575 uint16_t w = (dims & 0x0000FFFF);
577 value = meta->getValue(RAF_TAG_RAW_INFO);
578 uint32_t rawProps = value->get().getUInteger(0);
581 uint8_t compressed = ((rawProps & 0xFF0000) >> 16) & 8;
587 if (isXTrans(typeId())) {
588 data.setMosaicInfo(XTransPattern::xtransPattern());
590 data.setCfaPatternType(OR_CFA_PATTERN_GBRG);
594 size_t byte_size = m_container->getCfaLength() - 2048;
596 off_t offset = m_container->getCfaOffset() + 2048;
598 uint32_t finaldatalen = 2 * h * w;
599 bool is_compressed = byte_size < finaldatalen;
600 uint32_t datalen = (is_compressed ? byte_size : finaldatalen);
601 void *buf = data.allocData(finaldatalen);
603 LOGDBG2(
"byte_size = %lu finaldatalen = %u compressed = %u", (LSIZE)byte_size,
604 finaldatalen, compressed);
609 Unpack unpack(w, IFD::COMPRESS_NONE);
610 size_t blocksize = unpack.block_size();
611 std::unique_ptr<uint8_t[]> block(
new uint8_t[blocksize]);
612 uint16_t *outdata = (uint16_t *)data.data();
613 size_t outsize = finaldatalen;
616 got = m_container->fetchData(block.get(), offset, blocksize);
623 block.get(), got, out);
627 LOGDBG2(
"error is %d\n",
static_cast<int>(err));
632 }
while ((got != 0) && (fetched < datalen));
634 m_container->fetchData(buf, offset, datalen);
647 LOGERR(
"RAF: Can't get JPEG preview\n");
654 return dir->makeMetaValue(*e);
661 void RafFile::_identifyId()
663 _setTypeId(_typeIdFromModel(
"FUJIFILM", m_container->getModel()));
void setDataType(DataType _type)
Set the data type.
std::shared_ptr< Stream > Ptr
std::shared_ptr< IfdDir > Ref
Shared ptr of an IfdDir.
std::shared_ptr< IfdEntry > Ref
IfdEntry reference (ie shared pointer)
IfdDir::Ref getIfdDirAt(int idx)
size_t exifOffset() const
Generic interface for the RAW file container.
or_error unpack_be12to16(uint16_t *dest, size_t destsize, const uint8_t *src, size_t size, size_t &outsize) const
Represent camera raw data.
virtual void setDimensions(uint32_t x, uint32_t y) override
Set the pixel dimensions of the bitmap.
or_error
Error codes returned by libopenraw.
Global namespace for libopenraw.