libopenraw
peffile.cpp
1 /*
2  * libopenraw - peffile.cpp
3  *
4  * Copyright (C) 2006-2016 Hubert Figuiere
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 
22 #include <libopenraw/cameraids.h>
23 
24 #include "rawdata.hpp"
25 #include "ifd.hpp"
26 #include "ifdfilecontainer.hpp"
27 #include "ifddir.hpp"
28 #include "peffile.hpp"
29 #include "rawfile_private.hpp"
30 
31 using namespace Debug;
32 
33 namespace OpenRaw {
34 namespace Internals {
35 
36 #define OR_MAKE_PENTAX_TYPEID(camid) \
37  OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_PENTAX,camid)
38 
39 /* taken from dcraw, by default */
40 static const BuiltinColourMatrix s_matrices[] = {
41  { OR_MAKE_PENTAX_TYPEID(OR_TYPEID_PENTAX_IST_D_PEF), 0, 0,
42  { 9651,-2059,-1189,-8881,16512,2487,-1460,1345,10687 } },
43  { OR_MAKE_PENTAX_TYPEID(OR_TYPEID_PENTAX_IST_DL_PEF), 0, 0,
44  { 10829,-2838,-1115,-8339,15817,2696,-837,680,11939 } },
45  { OR_MAKE_PENTAX_TYPEID(OR_TYPEID_PENTAX_IST_DS_PEF), 0, 0,
46  { 10371,-2333,-1206,-8688,16231,2602,-1230,1116,11282 } },
47  { OR_MAKE_PENTAX_TYPEID(OR_TYPEID_PENTAX_K10D_PEF), 0, 0,
48  { 9566,-2863,-803,-7170,15172,2112,-818,803,9705 } },
49  { OR_MAKE_PENTAX_TYPEID(OR_TYPEID_PENTAX_K100D_PEF), 0, 0,
50  { 11095,-3157,-1324,-8377,15834,2720,-1108,947,11688 } },
51  { OR_MAKE_PENTAX_TYPEID(OR_TYPEID_PENTAX_K100D_PEF), 0, 0,
52  { 11095,-3157,-1324,-8377,15834,2720,-1108,947,11688 } },
53  { OR_MAKE_PENTAX_TYPEID(OR_TYPEID_PENTAX_K20D_PEF), 0, 0,
54  { 9427,-2714,-868,-7493,16092,1373,-2199,3264,7180 } },
55  { OR_MAKE_PENTAX_TYPEID(OR_TYPEID_PENTAX_K200D_PEF), 0, 0,
56  { 9186,-2678,-907,-8693,16517,2260,-1129,1094,8524 } },
57  { OR_MAKE_PENTAX_TYPEID(OR_TYPEID_PENTAX_KR_PEF), 0, 0,
58  { 9895,-3077,-850,-5304,13035,2521,-883,1768,6936 } },
59  { OR_MAKE_PENTAX_TYPEID(OR_TYPEID_PENTAX_K5_PEF), 0, 0,
60  { 8713,-2833,-743,-4342,11900,2772,-722,1543,6247 } },
61  { OR_MAKE_PENTAX_TYPEID(OR_TYPEID_PENTAX_K5_IIS_PEF), 0, 0,
62  { 8170,-2725,-639,-4440,12017,2744,-771,1465,6599 } },
63  { OR_MAKE_PENTAX_TYPEID(OR_TYPEID_PENTAX_K7_PEF), 0, 0,
64  { 9142,-2947,-678,-8648,16967,1663,-2224,2898,8615 } },
65  { OR_MAKE_PENTAX_TYPEID(OR_TYPEID_PENTAX_KX_PEF), 0, 0,
66  { 8843,-2837,-625,-5025,12644,2668,-411,1234,7410 } },
67  { OR_MAKE_PENTAX_TYPEID(OR_TYPEID_PENTAX_645D_PEF), 0, 0x3e00,
68  { 10646,-3593,-1158,-3329,11699,1831,-667,2874,6287 } },
69 
70  { 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
71 };
72 
73 const struct IfdFile::camera_ids_t PEFFile::s_def[] = {
74  { "PENTAX *ist D ", OR_MAKE_PENTAX_TYPEID(OR_TYPEID_PENTAX_IST_D_PEF) },
75  { "PENTAX *ist DL ", OR_MAKE_PENTAX_TYPEID(OR_TYPEID_PENTAX_IST_DL_PEF) },
76  { "PENTAX *ist DS ", OR_MAKE_PENTAX_TYPEID(OR_TYPEID_PENTAX_IST_DS_PEF) },
77  { "PENTAX K10D ", OR_MAKE_PENTAX_TYPEID(OR_TYPEID_PENTAX_K10D_PEF) },
78  { "PENTAX K100D ", OR_MAKE_PENTAX_TYPEID(OR_TYPEID_PENTAX_K100D_PEF) },
79  { "PENTAX K100D Super ", OR_MAKE_PENTAX_TYPEID(OR_TYPEID_PENTAX_K100D_PEF) },
80  { "PENTAX K20D ", OR_MAKE_PENTAX_TYPEID(OR_TYPEID_PENTAX_K20D_PEF) },
81  { "PENTAX K200D ", OR_MAKE_PENTAX_TYPEID(OR_TYPEID_PENTAX_K200D_PEF) },
82  { "PENTAX K-r ", OR_MAKE_PENTAX_TYPEID(OR_TYPEID_PENTAX_KR_PEF) },
83  { "PENTAX K-5 ", OR_MAKE_PENTAX_TYPEID(OR_TYPEID_PENTAX_K5_PEF) },
84  { "PENTAX K-5 II s ", OR_MAKE_PENTAX_TYPEID(OR_TYPEID_PENTAX_K5_IIS_PEF) },
85  { "PENTAX K-7 ", OR_MAKE_PENTAX_TYPEID(OR_TYPEID_PENTAX_K7_PEF) },
86  { "PENTAX K-x ", OR_MAKE_PENTAX_TYPEID(OR_TYPEID_PENTAX_KX_PEF) },
87  { "PENTAX 645D ", OR_MAKE_PENTAX_TYPEID(OR_TYPEID_PENTAX_645D_PEF) },
88  { 0, 0 }
89 };
90 
91 
92 RawFile *PEFFile::factory(const IO::Stream::Ptr &s)
93 {
94  return new PEFFile(s);
95 }
96 
97 PEFFile::PEFFile(const IO::Stream::Ptr &s)
98  : IfdFile(s, OR_RAWFILE_TYPE_PEF)
99 {
100  _setIdMap(s_def);
101  _setMatrices(s_matrices);
102 }
103 
104 PEFFile::~PEFFile()
105 {
106 }
107 
108 IfdDir::Ref PEFFile::_locateCfaIfd()
109 {
110  // in PEF the CFA IFD is the main IFD
111  return mainIfd();
112 }
113 
114 IfdDir::Ref PEFFile::_locateMainIfd()
115 {
116  return m_container->setDirectory(0);
117 }
118 
119 ::or_error PEFFile::_getRawData(RawData & data, uint32_t options)
120 {
121  ::or_error err;
122  const IfdDir::Ref & _cfaIfd = cfaIfd();
123  err = _getRawDataFromDir(data, _cfaIfd);
124  if(err == OR_ERROR_NONE) {
125  uint16_t compression = data.compression();
126  switch(compression) {
127  case IFD::COMPRESS_CUSTOM:
128  if((options & OR_OPTIONS_DONT_DECOMPRESS) == 0) {
129  // TODO decompress
130  }
131  break;
132  default:
133  break;
134  }
135  }
136  return err;
137 }
138 
139 }
140 }
141 /*
142  Local Variables:
143  mode:c++
144  c-file-style:"stroustrup"
145  c-file-offsets:((innamespace . 0))
146  indent-tabs-mode:nil
147  fill-column:80
148  End:
149 */
150 
CIFF is the container for CRW files. It is an attempt from Canon to make this a standard. I guess it failed.
Definition: arwfile.cpp:30
Definition: trace.cpp:30
generic IFD based raw file.
Definition: ifdfile.hpp:48