merge with dev

This commit is contained in:
Desmis
2019-12-29 08:47:44 +01:00
3 changed files with 44 additions and 35 deletions

View File

@@ -42,7 +42,7 @@
#include "../rtgui/options.h"
//#define BENCHMARK
//#include "StopWatch.h"
#include "StopWatch.h"
#ifdef _OPENMP
#include <omp.h>
@@ -2408,11 +2408,10 @@ void RawImageSource::HLRecovery_Global(const ToneCurveParams &hrp)
*/
void RawImageSource::copyOriginalPixels(const RAWParams &raw, RawImage *src, RawImage *riDark, RawImage *riFlatFile, array2D<float> &rawData)
{
// TODO: Change type of black[] to float to avoid conversions
unsigned short black[4] = {
(unsigned short)ri->get_cblack(0), (unsigned short)ri->get_cblack(1),
(unsigned short)ri->get_cblack(2), (unsigned short)ri->get_cblack(3)
};
const float black[4] = {
static_cast<float>(ri->get_cblack(0)), static_cast<float>(ri->get_cblack(1)),
static_cast<float>(ri->get_cblack(2)), static_cast<float>(ri->get_cblack(3))
};
if (ri->getSensorType() == ST_BAYER || ri->getSensorType() == ST_FUJI_XTRANS) {
if (!rawData) {
@@ -2420,11 +2419,22 @@ void RawImageSource::copyOriginalPixels(const RAWParams &raw, RawImage *src, Raw
}
if (riDark && W == riDark->get_width() && H == riDark->get_height()) { // This works also for xtrans-sensors, because black[0] to black[4] are equal for these
StopWatch Stop1("darkframe subtraction");
#ifdef _OPENMP
#pragma omp parallel for
#endif
for (int row = 0; row < H; row++) {
for (int col = 0; col < W; col++) {
int c = FC(row, col);
int c4 = (c == 1 && !(row & 1)) ? 3 : c;
rawData[row][col] = max(src->data[row][col] + black[c4] - riDark->data[row][col], 0.0f);
const int c0 = FC(row, 0);
const float black0 = black[(c0 == 1 && !(row & 1) ) ? 3 : c0];
const int c1 = FC(row, 1);
const float black1 = black[(c1 == 1 && !(row & 1) ) ? 3 : c1];
int col;
for (col = 0; col < W - 1; col += 2) {
rawData[row][col] = max(src->data[row][col] + black0 - riDark->data[row][col], 0.0f);
rawData[row][col + 1] = max(src->data[row][col + 1] + black1 - riDark->data[row][col + 1], 0.0f);
}
if (col < W) {
rawData[row][col] = max(src->data[row][col] + black0 - riDark->data[row][col], 0.0f);
}
}
} else {