23 #ifndef OR_INTERNALS_MRW_CONTAINER_H_ 24 #define OR_INTERNALS_MRW_CONTAINER_H_ 27 #include <sys/types.h> 32 #include "io/stream.hpp" 34 #include "rawcontainer.hpp" 36 #include "ifdfilecontainer.hpp" 45 const int DataBlockHeaderLength = 8;
51 typedef std::shared_ptr<DataBlock> Ref;
52 typedef std::vector<Ref> RefVec;
76 return std::string(
id);
96 bool loaded()
const {
return m_loaded; }
114 PRD_SENSOR_LENGTH = 8,
115 PRD_SENSOR_WIDTH = 10,
116 PRD_IMAGE_LENGTH = 12,
117 PRD_IMAGE_WIDTH = 14,
120 PRD_STORAGE_TYPE = 18,
123 PRD_BAYER_PATTERN = 22
127 STORAGE_TYPE_UNPACKED = 0x52,
128 STORAGE_TYPE_PACKED = 0x59
132 BAYER_PATTERN_RGGB = 0x0001,
133 BAYER_PATTERN_GBRG = 0x0004
139 WBG_DENOMINATOR_R = 0,
140 WBG_DENOMINATOR_G1 = 1,
141 WBG_DENOMINATOR_G2 = 2,
142 WBG_DENOMINATOR_B = 3,
144 WBG_NOMINATOR_G1 = 6,
145 WBG_NOMINATOR_G2 = 8,
157 RIF_WHITE_BALANCE = 4,
158 RIF_SUBJECT_PROGRAM = 5,
161 RIF_COLOR_FILTER = 56,
167 WHITE_BALANCE_AUTO = 0,
168 WHITE_BALANCE_DAYLIGHT = 1,
169 WHITE_BALANCE_CLOUDY = 2,
170 WHITE_BALANCE_TUNGSTEN = 3,
171 WHITE_BALANCE_FLUORESCENT = 4
175 SUBJECT_PROGRAM_NONE = 0,
176 SUBJECT_PROGRAM_PORTRAIT = 1,
177 SUBJECT_PROGRAM_TEXT = 2,
178 SUBJECT_PROGRAM_NIGHT_PORTRAIT = 3,
179 SUBJECT_PROGRAM_SUNSET = 4,
180 SUBJECT_PROGRAM_SPORTS_ACTION = 5
184 COLOR_MODE_NORMAL = 0,
185 COLOR_MODE_BLACK_AND_WHITE = 1,
186 COLOR_MODE_VIVID_COLOR = 2,
187 COLOR_MODE_SOLARIZATION = 3,
188 COLOR_MODE_ADOBE_RGB = 4
194 IFDTAG_WIDTH = 0x0100,
195 IFDTAG_HEIGHT = 0x0101,
196 IFDTAG_COMPRESS = 0x0103,
197 IFDTAG_DCFVER = 0x010E,
198 IFDTAG_MANUF = 0x010F,
199 IFDTAG_CAMERA = 0x0110,
200 IFDTAG_FIRMWARE = 0x0131,
201 IFDTAG_DATETIME = 0x0132,
202 IFDTAG_EXIFOFFSET = 0x8769,
203 IFDTAG_PIMOFFSET = 0xC4A5
210 MRWTAG_THUMBNAIL_OFFSET = 0x0088,
211 MRWTAG_THUMBNAIL_LENGTH = 0x0089
233 MRW::DataBlock::Ref mrm;
234 MRW::DataBlock::Ref prd;
235 MRW::DataBlock::Ref ttw;
236 MRW::DataBlock::Ref wbg;
237 MRW::DataBlock::Ref rif;
243 return mrm->offset() + MRW::DataBlockHeaderLength + mrm->length();
247 virtual bool locateDirsPreHook()
override;
250 std::string m_version;
CIFF is the container for CRW files. It is an attempt from Canon to make this a standard. I guess it failed.
DataBlock(off_t start, MRWContainer *container)
Option< uint16_t > uint16_val(off_t offset)
Option< int8_t > int8_val(off_t offset)
Option< uint8_t > uint8_val(off_t offset)