26 #include <boost/static_assert.hpp> 28 #include <libopenraw/consts.h> 30 #include "cfapattern.hpp" 37 static const uint8_t RED = OR_PATTERN_COLOUR_RED;
38 static const uint8_t GREEN = OR_PATTERN_COLOUR_GREEN;
39 static const uint8_t BLUE = OR_PATTERN_COLOUR_BLUE;
41 static const uint8_t RGGB_PATTERN[] = { RED, GREEN, GREEN, BLUE };
42 static const uint8_t GBRG_PATTERN[] = { GREEN, BLUE, RED, GREEN };
43 static const uint8_t BGGR_PATTERN[] = { BLUE, GREEN, GREEN, RED };
44 static const uint8_t GRBG_PATTERN[] = { GREEN, RED, BLUE, GREEN };
54 case OR_CFA_PATTERN_RGGB:
57 case OR_CFA_PATTERN_GBRG:
60 case OR_CFA_PATTERN_BGGR:
63 case OR_CFA_PATTERN_GRBG:
79 static std::array<CfaPattern*, _OR_CFA_PATTERN_INVALID> s_patterns
80 = { { NULL, NULL, NULL, NULL, NULL, NULL } };
82 BOOST_STATIC_ASSERT(_OR_CFA_PATTERN_INVALID == 6);
84 if((pattern == OR_CFA_PATTERN_NON_RGB22) ||
85 (pattern >= _OR_CFA_PATTERN_INVALID)) {
92 s_patterns[pattern] = pat;
105 : x(0), y(0), n_colours(0)
106 , pattern_type(OR_CFA_PATTERN_NONE)
113 ::or_cfa_pattern pattern_type;
114 const uint8_t* pattern;
117 CfaPattern::CfaPattern()
122 CfaPattern::CfaPattern(::or_cfa_pattern pattern,
123 uint16_t width, uint16_t height)
127 setPatternType(pattern);
130 CfaPattern::~CfaPattern()
139 if(x != 2 || y != 2) {
140 d->pattern_type = OR_CFA_PATTERN_NON_RGB22;
143 d->pattern_type = OR_CFA_PATTERN_NONE;
149 return (d->pattern_type != OR_CFA_PATTERN_NONE)
150 && (d->pattern_type != OR_CFA_PATTERN_NON_RGB22);
156 if(count != d->x * d->y) {
161 d->pattern = pattern;
165 CfaPattern::patternPattern(uint16_t& count)
const 176 void CfaPattern::setPatternType(::or_cfa_pattern pattern)
178 d->pattern_type = pattern;
188 return d->pattern_type;
CIFF is the container for CRW files. It is an attempt from Canon to make this a standard. I guess it failed.
static const CfaPattern * twoByTwoPattern(::or_cfa_pattern)
void setPatternPattern(const uint8_t *pattern, uint16_t count)
::or_cfa_pattern patternType() const
void setSize(uint16_t x, uint16_t y)