22 #include <libopenraw/cameraids.h> 24 #include "rawdata.hpp" 26 #include "ifdfilecontainer.hpp" 28 #include "peffile.hpp" 29 #include "rawfile_private.hpp" 31 using namespace Debug;
36 #define OR_MAKE_PENTAX_TYPEID(camid) \ 37 OR_MAKE_FILE_TYPEID(OR_TYPEID_VENDOR_PENTAX,camid) 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 } },
70 { 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
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) },
92 RawFile *PEFFile::factory(
const IO::Stream::Ptr &s)
97 PEFFile::PEFFile(
const IO::Stream::Ptr &s)
98 :
IfdFile(s, OR_RAWFILE_TYPE_PEF)
101 _setMatrices(s_matrices);
108 IfdDir::Ref PEFFile::_locateCfaIfd()
114 IfdDir::Ref PEFFile::_locateMainIfd()
116 return m_container->setDirectory(0);
119 ::or_error PEFFile::_getRawData(
RawData & data, uint32_t options)
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) {
CIFF is the container for CRW files. It is an attempt from Canon to make this a standard. I guess it failed.
generic IFD based raw file.