libopenraw  0.3.7
dngfile.cpp
1 /*
2  * libopenraw - dngfile.cpp
3  *
4  * Copyright (C) 2006-2023 Hubert Figuière
5  * Copyright (C) 2008 Novell, Inc.
6  *
7  * This library is free software: you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public License
9  * as published by the Free Software Foundation, either version 3 of
10  * the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library. If not, see
19  * <http://www.gnu.org/licenses/>.
20  */
21 
22 #include <stddef.h>
23 
24 #include <string>
25 #include <memory>
26 
27 #include <libopenraw/cameraids.h>
28 #include <libopenraw/debug.h>
29 
30 #include "rawdata.hpp"
31 #include "trace.hpp"
32 #include "io/memstream.hpp"
33 #include "jfifcontainer.hpp"
34 #include "ljpegdecompressor.hpp"
35 #include "ifd.hpp"
36 #include "ifddir.hpp"
37 #include "ifdentry.hpp"
38 #include "dngfile.hpp"
39 
40 using namespace Debug;
41 
42 namespace OpenRaw {
43 namespace Internals {
44 
45 // The model here is definitely the "Model" tag, not the "UniqueModelId"
46 // One day this will be a problem.
47 const IfdFile::camera_ids_t DngFile::s_def[] = {
48  { "PENTAX 645Z ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_PENTAX,
49  OR_TYPEID_PENTAX_645Z_DNG) },
50  { "PENTAX 645D ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_PENTAX,
51  OR_TYPEID_PENTAX_645D_DNG) },
52  { "PENTAX K10D ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_PENTAX,
53  OR_TYPEID_PENTAX_K10D_DNG) },
54  { "PENTAX Q ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_PENTAX,
55  OR_TYPEID_PENTAX_Q_DNG) },
56  { "PENTAX K200D ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_PENTAX,
57  OR_TYPEID_PENTAX_K200D_DNG) },
58  { "PENTAX K2000 ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_PENTAX,
59  OR_TYPEID_PENTAX_K2000_DNG) },
60  { "PENTAX Q10 ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_PENTAX,
61  OR_TYPEID_PENTAX_Q10_DNG) },
62  { "PENTAX Q7 ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_PENTAX,
63  OR_TYPEID_PENTAX_Q7_DNG) },
64  { "PENTAX Q-S1 ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_PENTAX,
65  OR_TYPEID_PENTAX_QS1_DNG) },
66  { "PENTAX K-x ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_PENTAX,
67  OR_TYPEID_PENTAX_KX_DNG) },
68  { "PENTAX K-r ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_PENTAX,
69  OR_TYPEID_PENTAX_KR_DNG) },
70  { "PENTAX K-01 ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_PENTAX,
71  OR_TYPEID_PENTAX_K01_DNG) },
72  { "PENTAX K-1 ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_PENTAX,
73  OR_TYPEID_PENTAX_K1_DNG) },
74  { "PENTAX K-1 Mark II ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_PENTAX,
75  OR_TYPEID_PENTAX_K1_MKII_DNG) },
76  { "PENTAX K10D ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_PENTAX,
77  OR_TYPEID_PENTAX_K10D_DNG) },
78  { "PENTAX K-30 ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_PENTAX,
79  OR_TYPEID_PENTAX_K30_DNG) },
80  { "PENTAX K-5 II ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_PENTAX,
81  OR_TYPEID_PENTAX_K5_II_DNG) },
82  { "PENTAX K-5 II s ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_PENTAX,
83  OR_TYPEID_PENTAX_K5_IIS_DNG) },
84  { "PENTAX K-50 ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_PENTAX,
85  OR_TYPEID_PENTAX_K50_DNG) },
86  { "PENTAX K-500 ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_PENTAX,
87  OR_TYPEID_PENTAX_K500_DNG) },
88  { "PENTAX K-3 ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_PENTAX,
89  OR_TYPEID_PENTAX_K3_DNG) },
90  { "PENTAX K-3 II ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_PENTAX,
91  OR_TYPEID_PENTAX_K3_II_DNG) },
92  { "PENTAX K-3 Mark III ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_PENTAX,
93  OR_TYPEID_PENTAX_K3_II_DNG) },
94  { "PENTAX K-7 ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_PENTAX,
95  OR_TYPEID_PENTAX_K7_DNG) },
96  { "PENTAX K-70 ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_PENTAX,
97  OR_TYPEID_PENTAX_K70_DNG) },
98  { "PENTAX K-S1 ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_PENTAX,
99  OR_TYPEID_PENTAX_KS1_DNG) },
100  { "PENTAX KP ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_PENTAX,
101  OR_TYPEID_PENTAX_KP_DNG) },
102  { "PENTAX MX-1 ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_PENTAX,
103  OR_TYPEID_PENTAX_MX1_DNG) },
104  { "R9 - Digital Back DMR", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_LEICA,
105  OR_TYPEID_LEICA_DMR) },
106  { "M8 Digital Camera", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_LEICA,
107  OR_TYPEID_LEICA_M8) },
108  { "M9 Digital Camera", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_LEICA,
109  OR_TYPEID_LEICA_M9) },
110  { "M Monochrom", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_LEICA,
111  OR_TYPEID_LEICA_M_MONOCHROM) },
112  { "LEICA M (Typ 240)", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_LEICA,
113  OR_TYPEID_LEICA_M_TYP240) },
114  { "LEICA M MONOCHROM (Typ 246)", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_LEICA,
115  OR_TYPEID_LEICA_M_MONOCHROM_TYP246) },
116  { "LEICA M10", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_LEICA,
117  OR_TYPEID_LEICA_M10) },
118  { "LEICA M10-P", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_LEICA,
119  OR_TYPEID_LEICA_M10P) },
120  { "LEICA M10-D", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_LEICA,
121  OR_TYPEID_LEICA_M10D) },
122  { "LEICA M10-R", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_LEICA,
123  OR_TYPEID_LEICA_M10R) },
124  { "LEICA M10 MONOCHROM", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_LEICA,
125  OR_TYPEID_LEICA_M10_MONOCHROM) },
126  { "LEICA M11", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_LEICA,
127  OR_TYPEID_LEICA_M11) },
128  { "LEICA M11 Monochrom", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_LEICA,
129  OR_TYPEID_LEICA_M11_MONOCHROM) },
130  { "LEICA X1 ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_LEICA,
131  OR_TYPEID_LEICA_X1) },
132  { "LEICA X2", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_LEICA,
133  OR_TYPEID_LEICA_X2) },
134  { "Leica S2", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_LEICA,
135  OR_TYPEID_LEICA_S2) },
136  { "LEICA X VARIO (Typ 107)", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_LEICA,
137  OR_TYPEID_LEICA_X_VARIO) },
138  { "LEICA X (Typ 113)", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_LEICA,
139  OR_TYPEID_LEICA_X_TYP113) },
140  { "LEICA SL (Typ 601)", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_LEICA,
141  OR_TYPEID_LEICA_SL_TYP601) },
142  { "LEICA SL2", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_LEICA,
143  OR_TYPEID_LEICA_SL2) },
144  { "LEICA T (Typ 701)", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_LEICA,
145  OR_TYPEID_LEICA_T_TYP701) },
146  { "LEICA TL2", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_LEICA,
147  OR_TYPEID_LEICA_TL2) },
148  { "LEICA Q (Typ 116)", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_LEICA,
149  OR_TYPEID_LEICA_Q_TYP116) },
150  { "LEICA Q2", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_LEICA,
151  OR_TYPEID_LEICA_Q2) },
152  { "LEICA Q3", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_LEICA,
153  OR_TYPEID_LEICA_Q3) },
154  { "LEICA CL", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_LEICA,
155  OR_TYPEID_LEICA_CL) },
156  { "LEICA SL2-S", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_LEICA,
157  OR_TYPEID_LEICA_SL2S) },
158  { "LEICA Q2 MONO", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_LEICA,
159  OR_TYPEID_LEICA_Q2_MONOCHROM) },
160  { "GR DIGITAL 2 ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_RICOH,
161  OR_TYPEID_RICOH_GR2) },
162  { "GR ",
163  OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_RICOH,
164  OR_TYPEID_RICOH_GR) },
165  { "GR II ",
166  OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_RICOH,
167  OR_TYPEID_RICOH_GRII) },
168  { "RICOH GR III ",
169  OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_RICOH, OR_TYPEID_RICOH_GRIII) },
170  { "RICOH GR IIIx ",
171  OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_RICOH, OR_TYPEID_RICOH_GRIIIX) },
172  { "GXR ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_RICOH,
173  OR_TYPEID_RICOH_GXR) },
174  { "GXR A16 ",
175  OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_RICOH, OR_TYPEID_RICOH_GXR_A16) },
176  { "RICOH GX200 ",
177  OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_RICOH, OR_TYPEID_RICOH_GX200) },
178  { "SAMSUNG GX10 ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_SAMSUNG,
179  OR_TYPEID_SAMSUNG_GX10) },
180  { "Pro 815 ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_SAMSUNG,
181  OR_TYPEID_SAMSUNG_PRO815) },
182  { "M1 ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_XIAOYI,
183  OR_TYPEID_XIAOYI_M1) },
184  { "YDXJ 2", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_XIAOYI,
185  OR_TYPEID_XIAOYI_YDXJ_2) },
186  { "YIAC 3", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_XIAOYI,
187  OR_TYPEID_XIAOYI_YIAC_3) },
188  { "iPhone 6s Plus", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_APPLE,
189  OR_TYPEID_APPLE_IPHONE_6SPLUS) },
190  { "iPhone 7 Plus", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_APPLE,
191  OR_TYPEID_APPLE_IPHONE_7PLUS) },
192  { "iPhone 8", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_APPLE,
193  OR_TYPEID_APPLE_IPHONE_8) },
194  { "iPhone 12 Pro", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_APPLE,
195  OR_TYPEID_APPLE_IPHONE_12_PRO) },
196  { "iPhone 13 Pro", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_APPLE,
197  OR_TYPEID_APPLE_IPHONE_13_PRO) },
198  { "iPhone SE", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_APPLE,
199  OR_TYPEID_APPLE_IPHONE_SE) },
200  { "iPhone XS", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_APPLE,
201  OR_TYPEID_APPLE_IPHONE_XS) },
202 
203  { "Blackmagic Pocket Cinema Camera", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_BLACKMAGIC,
204  OR_TYPEID_BLACKMAGIC_POCKET_CINEMA) },
205  { "SIGMA fp", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_SIGMA,
206  OR_TYPEID_SIGMA_FP) },
207  { "SIGMA fp L", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_SIGMA,
208  OR_TYPEID_SIGMA_FP_L) },
209  { "L1D-20c", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_HASSELBLAD,
210  OR_TYPEID_HASSELBLAD_L1D_20C) },
211  { "L2D-20c", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_HASSELBLAD,
212  OR_TYPEID_HASSELBLAD_L2D_20C) },
213  { "HERO5 Black", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_GOPRO,
214  OR_TYPEID_GOPRO_HERO5_BLACK) },
215  { "HERO6 Black", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_GOPRO,
216  OR_TYPEID_GOPRO_HERO6_BLACK) },
217  { "HERO7 Black", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_GOPRO,
218  OR_TYPEID_GOPRO_HERO7_BLACK) },
219  { "HERO8 Black", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_GOPRO,
220  OR_TYPEID_GOPRO_HERO8_BLACK) },
221  { "HERO9 Black", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_GOPRO,
222  OR_TYPEID_GOPRO_HERO9_BLACK) },
223  { "HERO10 Black", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_GOPRO,
224  OR_TYPEID_GOPRO_HERO10_BLACK) },
225  { "ZX1", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_ZEISS,
226  OR_TYPEID_ZEISS_ZX1) },
227  { "FC220", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_DJI,
228  OR_TYPEID_DJI_FC220) },
229  { "FC350", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_DJI,
230  OR_TYPEID_DJI_FC350) },
231  { "FC3582", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_DJI,
232  OR_TYPEID_DJI_FC3582) },
233  { "FC6310", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_DJI,
234  OR_TYPEID_DJI_FC6310) },
235  { "FC7303", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_DJI,
236  OR_TYPEID_DJI_FC7303) },
237  { "DJI Osmo Action", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_DJI,
238  OR_TYPEID_DJI_OSMO_ACTION) },
241 };
242 
243 RawFile *DngFile::factory(const IO::Stream::Ptr &s)
244 {
245  return new DngFile(s);
246 }
247 
248 
249 DngFile::DngFile(const IO::Stream::Ptr &s)
250  : TiffEpFile(s, OR_RAWFILE_TYPE_DNG)
251 {
252  _setIdMap(s_def);
253 }
254 
255 DngFile::~DngFile()
256 {
257 }
258 
260 DngFile::getColourMatrixOrigin() const
261 {
263 }
264 
265 ::or_error DngFile::_enumThumbnailSizes(std::vector<uint32_t>& list)
266 {
267  auto err = OR_ERROR_NOT_FOUND;
268 
269  err = TiffEpFile::_enumThumbnailSizes(list);
270 
271  auto makerNote = makerNoteIfd();
272  if (makerNote) {
273  if (makerNote->getId() == "Leica6") {
274  // File with Leica6 MakerNote (Leica M Typ-240) have a
275  // larger preview in the MakerNote
276  auto e = makerNote->getEntry(MNOTE_LEICA_PREVIEW_IMAGE);
277  _addThumbnailFromEntry(e, makerNote->getMnoteOffset(), list);
278  }
279  }
280  return err;
281 }
282 
283 ::or_error DngFile::_getRawData(RawData & data, uint32_t options)
284 {
286  const IfdDir::Ref & _cfaIfd = cfaIfd();
287 
288  LOGDBG1("_getRawData()\n");
289 
290  if (!_cfaIfd) {
291  LOGDBG1("cfaIfd is NULL: not found\n");
292  return OR_ERROR_NOT_FOUND;
293  }
294  ret = _getRawDataFromDir(data, _cfaIfd);
295 
296  if(ret != OR_ERROR_NONE) {
297  LOGERR("couldn't find raw data\n");
298  return ret;
299  }
300 
301  auto result = _cfaIfd->getValue<uint16_t>(IFD::EXIF_TAG_COMPRESSION);
302  if (result && (result.value() == IFD::COMPRESS_LJPEG)) {
303  // if the option is not set, decompress
304  if ((options & OR_OPTIONS_DONT_DECOMPRESS) == 0) {
305  auto s = std::make_shared<IO::MemStream>((const uint8_t*)data.data(),
306  data.size());
307  s->open(); // TODO check success
308  auto jfif = std::make_unique<JfifContainer>(s, 0);
309  LJpegDecompressor decomp(s.get(), jfif.get());
310  RawDataPtr dData = decomp.decompress();
311  if (dData) {
312  dData->setMosaicInfo(data.mosaicInfo());
313  dData->setPhotometricInterpretation(data.getPhotometricInterpretation());
314  data.swap(*dData);
315  }
316  }
317  }
318  else {
320  }
321  uint32_t crop_x, crop_y, crop_w, crop_h;
322  auto e = _cfaIfd->getEntry(IFD::DNG_TAG_ACTIVE_AREA);
323  if (e) {
324  crop_y = _cfaIfd->getEntryIntegerArrayItemValue(*e, 0);
325  crop_x = _cfaIfd->getEntryIntegerArrayItemValue(*e, 1);
326  crop_h = _cfaIfd->getEntryIntegerArrayItemValue(*e, 2);
327  crop_w = _cfaIfd->getEntryIntegerArrayItemValue(*e, 3);
328  } else {
329  crop_x = crop_y = 0;
330  crop_w = data.width();
331  crop_h = data.height();
332  }
333 
334  data.setActiveArea(crop_x, crop_y, crop_w, crop_h);
335 
336 #if 0
337  IfdEntry::Ref e = _cfaIfd->getEntry(IFD::DNG_TAG_DEFAULT_CROP_ORIGIN);
338  if(e) {
339  crop_x = _cfaIfd->getEntryIntegerArrayItemValue(*e, 0);
340  crop_y = _cfaIfd->getEntryIntegerArrayItemValue(*e, 1);
341  }
342  else {
343  crop_x = crop_y = 0;
344  }
345  e = _cfaIfd->getEntry(IFD::DNG_TAG_DEFAULT_CROP_SIZE);
346  if(e) {
347  crop_w = _cfaIfd->getEntryIntegerArrayItemValue(*e, 0);
348  crop_h = _cfaIfd->getEntryIntegerArrayItemValue(*e, 1);
349  }
350  else {
351  crop_w = data.width();
352  crop_h = data.height();
353  }
354 #endif
355 
356  return ret;
357 }
358 
359 void DngFile::_identifyId()
360 {
361  TiffEpFile::_identifyId();
362  // XXX what if the DNG file match the non DNG?
363  // XXX maybe we should hint of the type in the camera ID table
364  if (OR_GET_FILE_TYPEID_CAMERA(_typeId()) == 0) {
365  const IfdDir::Ref & _mainIfd = mainIfd();
366 
367  // It's an error to not find the mainIfd()
368  if (!_mainIfd) {
369  LOGERR("No main IFD to identify.\n");
370  return;
371  }
372 
373  auto uniqueCameraModel =
374  _mainIfd->getValue<std::string>(IFD::DNG_TAG_UNIQUE_CAMERA_MODEL);
375  if (uniqueCameraModel) {
376  // set a generic DNG type if we found a
377  // unique camera model
378  _setTypeId(
381  }
382  }
383 }
384 
385 }
386 }
387 /*
388  Local Variables:
389  mode:c++
390  c-file-style:"stroustrup"
391  c-file-offsets:((innamespace . 0))
392  indent-tabs-mode:nil
393  fill-column:80
394  End:
395 */
void setDataType(DataType _type)
Set the data type.
Definition: bitmapdata.cpp:91
uint32_t width() const
Width of the image data.
Definition: bitmapdata.cpp:137
uint32_t height() const
Height of the image data.
Definition: bitmapdata.cpp:142
size_t size() const
Get the size of the data.
Definition: bitmapdata.cpp:120
std::shared_ptr< IfdDir > Ref
Shared ptr of an IfdDir.
Definition: ifddir.hpp:56
std::shared_ptr< IfdEntry > Ref
IfdEntry reference (ie shared pointer)
Definition: ifdentry.hpp:202
virtual RawDataPtr decompress() override
Represent camera raw data.
Definition: rawdata.hpp:38
void swap(RawData &with)
Definition: rawdata.cpp:282
const MosaicInfo * mosaicInfo() const
Definition: rawdata.cpp:335
@ OR_TYPEID_VENDOR_ADOBE
Definition: cameraids.h:58
@ OR_TYPEID_ADOBE_DNG_GENERIC
Definition: cameraids.h:77
#define OR_MAKE_FILE_TYPEID(vendor, camera)
Make a or_rawfile_typeid with a vendor and camera.
Definition: consts.h:133
#define OR_GET_FILE_TYPEID_CAMERA(ftypeid)
Get the camera from the or_rawfile_typeid.
Definition: consts.h:137
or_colour_matrix_origin
Where the colour matrix comes from. Typically DNG is provided. The others are built-in.
Definition: consts.h:121
or_error
Error codes returned by libopenraw.
Definition: consts.h:42
@ OR_DATA_TYPE_RAW
Definition: consts.h:87
@ OR_OPTIONS_DONT_DECOMPRESS
Definition: consts.h:114
@ OR_RAWFILE_TYPE_DNG
Definition: consts.h:66
@ OR_COLOUR_MATRIX_PROVIDED
Definition: consts.h:124
@ OR_ERROR_NONE
Definition: consts.h:43
@ OR_ERROR_NOT_FOUND
Definition: consts.h:48
Global namespace for libopenraw.
Definition: arwfile.cpp:29