23 #include <libopenraw/libopenraw.h>
24 #include <libopenraw++/thumbnail.h>
25 #include <libopenraw++/rawdata.h>
27 #include <boost/scoped_ptr.hpp>
31 #include "io/memstream.h"
32 #include "ifdfilecontainer.h"
33 #include "jfifcontainer.h"
34 #include "ljpegdecompressor.h"
38 using namespace Debug;
44 const IFDFile::camera_ids_t DNGFile::s_def[] = {
45 {
"PENTAX K10D ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_PENTAX,
46 OR_TYPEID_PENTAX_K10D_DNG) },
47 {
"R9 - Digital Back DMR", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_LEICA,
48 OR_TYPEID_LEICA_DMR) },
49 {
"M8 Digital Camera", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_LEICA,
50 OR_TYPEID_LEICA_M8) },
51 {
"LEICA X1 ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_LEICA,
52 OR_TYPEID_LEICA_X1) },
53 {
"GR DIGITAL 2 ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_RICOH,
54 OR_TYPEID_RICOH_GR2) },
55 {
"GXR ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_RICOH,
56 OR_TYPEID_RICOH_GXR) },
57 {
"SAMSUNG GX10 ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_SAMSUNG,
58 OR_TYPEID_SAMSUNG_GX10) },
59 {
"Pro 815 ", OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_SAMSUNG,
60 OR_TYPEID_SAMSUNG_PRO815) },
61 { 0, OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_ADOBE,
62 OR_TYPEID_ADOBE_DNG_GENERIC) }
65 RawFile *DNGFile::factory(IO::Stream *s)
67 return new DNGFile(s);
71 DNGFile::DNGFile(IO::Stream *s)
72 : TiffEpFile(s, OR_RAWFILE_TYPE_DNG)
83 ::or_error ret = OR_ERROR_NONE;
88 Trace(DEBUG1) <<
"_getRawData()\n";
93 if(ret == OR_ERROR_NONE) {
94 uint16_t compression = 0;
95 if (
m_cfaIfd->getValue(IFD::EXIF_TAG_COMPRESSION, compression) &&
98 if ((options & OR_OPTIONS_DONT_DECOMPRESS) == 0) {
99 boost::scoped_ptr<IO::Stream> s(
new IO::MemStream(data.data(),
102 boost::scoped_ptr<JFIFContainer> jfif(
new JFIFContainer(s.get(), 0));
104 RawData *dData = decomp.decompress();
106 dData->setCfaPattern(data.cfaPattern());
117 Trace(ERROR) <<
"couldn't find raw data\n";
121 ret = OR_ERROR_NOT_FOUND;
CIFF is the container for CRW files. It is an attempt from Canon to make this a standard. I guess it failed.
void setDataType(DataType _type)
virtual ::or_error _getRawData(RawData &data, uint32_t options)
::or_error _getRawDataFromDir(RawData &data, IFDDir::Ref &dir)