23 #ifndef OR_INTERNALS_MRW_CONTAINER_H_ 24 #define OR_INTERNALS_MRW_CONTAINER_H_ 27 #include <sys/types.h> 32 #include "io/stream.hpp" 33 #include "rawcontainer.hpp" 35 #include "ifdfilecontainer.hpp" 44 const int DataBlockHeaderLength = 8;
50 typedef std::shared_ptr<DataBlock> Ref;
51 typedef std::vector<Ref> RefVec;
75 return std::string(
id);
93 std::string string_val(off_t offset);
95 bool loaded()
const {
return m_loaded; }
113 PRD_SENSOR_LENGTH = 8,
114 PRD_SENSOR_WIDTH = 10,
115 PRD_IMAGE_LENGTH = 12,
116 PRD_IMAGE_WIDTH = 14,
119 PRD_STORAGE_TYPE = 18,
122 PRD_BAYER_PATTERN = 22
126 STORAGE_TYPE_UNPACKED = 0x52,
127 STORAGE_TYPE_PACKED = 0x59
131 BAYER_PATTERN_RGGB = 0x0001,
132 BAYER_PATTERN_GBRG = 0x0004
138 WBG_DENOMINATOR_R = 0,
139 WBG_DENOMINATOR_G1 = 1,
140 WBG_DENOMINATOR_G2 = 2,
141 WBG_DENOMINATOR_B = 3,
143 WBG_NOMINATOR_G1 = 6,
144 WBG_NOMINATOR_G2 = 8,
156 RIF_WHITE_BALANCE = 4,
157 RIF_SUBJECT_PROGRAM = 5,
160 RIF_COLOR_FILTER = 56,
166 WHITE_BALANCE_AUTO = 0,
167 WHITE_BALANCE_DAYLIGHT = 1,
168 WHITE_BALANCE_CLOUDY = 2,
169 WHITE_BALANCE_TUNGSTEN = 3,
170 WHITE_BALANCE_FLUORESCENT = 4
174 SUBJECT_PROGRAM_NONE = 0,
175 SUBJECT_PROGRAM_PORTRAIT = 1,
176 SUBJECT_PROGRAM_TEXT = 2,
177 SUBJECT_PROGRAM_NIGHT_PORTRAIT = 3,
178 SUBJECT_PROGRAM_SUNSET = 4,
179 SUBJECT_PROGRAM_SPORTS_ACTION = 5
183 COLOR_MODE_NORMAL = 0,
184 COLOR_MODE_BLACK_AND_WHITE = 1,
185 COLOR_MODE_VIVID_COLOR = 2,
186 COLOR_MODE_SOLARIZATION = 3,
187 COLOR_MODE_ADOBE_RGB = 4
193 IFDTAG_WIDTH = 0x0100,
194 IFDTAG_HEIGHT = 0x0101,
195 IFDTAG_COMPRESS = 0x0103,
196 IFDTAG_DCFVER = 0x010E,
197 IFDTAG_MANUF = 0x010F,
198 IFDTAG_CAMERA = 0x0110,
199 IFDTAG_FIRMWARE = 0x0131,
200 IFDTAG_DATETIME = 0x0132,
201 IFDTAG_EXIFOFFSET = 0x8769,
202 IFDTAG_PIMOFFSET = 0xC4A5
209 MRWTAG_THUMBNAIL_OFFSET = 0x0088,
210 MRWTAG_THUMBNAIL_LENGTH = 0x0089
232 MRW::DataBlock::Ref mrm;
233 MRW::DataBlock::Ref prd;
234 MRW::DataBlock::Ref ttw;
235 MRW::DataBlock::Ref wbg;
236 MRW::DataBlock::Ref rif;
242 return mrm->offset() + MRW::DataBlockHeaderLength + mrm->length();
246 virtual bool locateDirsPreHook()
override;
249 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)
int8_t int8_val(off_t offset)
uint16_t uint16_val(off_t offset)
uint8_t uint8_val(off_t offset)