Speed boost in the median vectors fill via loop unrolling
This commit is contained in:
@@ -150,16 +150,28 @@ void RawImageSource::filmNegativeProcess(const procparams::FilmNegativeParams &p
|
|||||||
// Chose an odd step, not multiple of the CFA size, to get a chance to visit each channel.
|
// Chose an odd step, not multiple of the CFA size, to get a chance to visit each channel.
|
||||||
if(ri->getSensorType() == ST_BAYER) {
|
if(ri->getSensorType() == ST_BAYER) {
|
||||||
for (int row = 0; row < H; row+=5) {
|
for (int row = 0; row < H; row+=5) {
|
||||||
for (int col = 0; col < W; col+=5) {
|
int col = 0;
|
||||||
int c = FC(row, col); // three colors, 0=R, 1=G, 2=B
|
int c0 = FC(row, col);
|
||||||
cvs[c].push_back(rawData[row][col]);
|
int c1 = FC(row, col + 5);
|
||||||
|
for (; col < W - 5; col+=10) {
|
||||||
|
cvs[c0].push_back(rawData[row][col]);
|
||||||
|
cvs[c1].push_back(rawData[row][col + 5]);
|
||||||
|
}
|
||||||
|
if (col < W) {
|
||||||
|
cvs[c0].push_back(rawData[row][col]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if(ri->getSensorType() == ST_FUJI_XTRANS) {
|
} else if(ri->getSensorType() == ST_FUJI_XTRANS) {
|
||||||
for (int row = 0; row < H; row+=5) {
|
for (int row = 0; row < H; row+=5) {
|
||||||
for (int col = 0; col < W; col+=5) {
|
int col = 0;
|
||||||
int c = ri->XTRANSFC(row, col); // three colors, 0=R, 1=G, 2=B
|
const unsigned int cs[6] = {ri->XTRANSFC(row, 0), ri->XTRANSFC(row, 5), ri->XTRANSFC(row, 10), ri->XTRANSFC(row, 15), ri->XTRANSFC(row, 20), ri->XTRANSFC(row, 25)};
|
||||||
cvs[c].push_back(rawData[row][col]);
|
for (; col < W - 25; col += 30) {
|
||||||
|
for (int c = 0; c < 6; ++c) {
|
||||||
|
cvs[cs[c]].push_back(rawData[row][col + c * 5]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int c = 0; col < W; col += 5, ++c) {
|
||||||
|
cvs[cs[c]].push_back(rawData[row][col]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user