merge with dev - suppress unused variable
This commit is contained in:
commit
0db024126c
@ -151,7 +151,9 @@ float* RawImageSource::CA_correct_RT(
|
|||||||
blueFactor = new array2D<float>((W + 1 - 2 * cb) / 2, (H + 1 - 2 * cb) / 2);
|
blueFactor = new array2D<float>((W + 1 - 2 * cb) / 2, (H + 1 - 2 * cb) / 2);
|
||||||
oldraw = new array2D<float>((W + 1- 2 * cb) / 2, H- 2 * cb);
|
oldraw = new array2D<float>((W + 1- 2 * cb) / 2, H- 2 * cb);
|
||||||
// copy raw values before ca correction
|
// copy raw values before ca correction
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
|
#endif
|
||||||
for (int i = cb; i < H - cb; ++i) {
|
for (int i = cb; i < H - cb; ++i) {
|
||||||
for (int j = cb + (FC(i, 0) & 1); j < W - cb; j += 2) {
|
for (int j = cb + (FC(i, 0) & 1); j < W - cb; j += 2) {
|
||||||
(*oldraw)[i - cb][(j - cb) / 2] = rawData[i][j];
|
(*oldraw)[i - cb][(j - cb) / 2] = rawData[i][j];
|
||||||
@ -220,7 +222,9 @@ float* RawImageSource::CA_correct_RT(
|
|||||||
|
|
||||||
constexpr float eps = 1e-5f, eps2 = 1e-10f; //tolerance to avoid dividing by zero
|
constexpr float eps = 1e-5f, eps2 = 1e-10f; //tolerance to avoid dividing by zero
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel
|
#pragma omp parallel
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
int progresscounter = 0;
|
int progresscounter = 0;
|
||||||
|
|
||||||
@ -274,7 +278,9 @@ float* RawImageSource::CA_correct_RT(
|
|||||||
float blocksqavethr[2][2] = {};
|
float blocksqavethr[2][2] = {};
|
||||||
float blockdenomthr[2][2] = {};
|
float blockdenomthr[2][2] = {};
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for collapse(2) schedule(dynamic) nowait
|
#pragma omp for collapse(2) schedule(dynamic) nowait
|
||||||
|
#endif
|
||||||
for (int top = -border ; top < height; top += ts - border2) {
|
for (int top = -border ; top < height; top += ts - border2) {
|
||||||
for (int left = -border; left < width - (W & 1); left += ts - border2) {
|
for (int left = -border; left < width - (W & 1); left += ts - border2) {
|
||||||
memset(bufferThr, 0, buffersize);
|
memset(bufferThr, 0, buffersize);
|
||||||
@ -647,7 +653,9 @@ float* RawImageSource::CA_correct_RT(
|
|||||||
progresscounter++;
|
progresscounter++;
|
||||||
|
|
||||||
if (progresscounter % 8 == 0) {
|
if (progresscounter % 8 == 0) {
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp critical (cadetectpass1)
|
#pragma omp critical (cadetectpass1)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
progress += 4.0 * SQR(ts - border2) / (iterations * height * width);
|
progress += 4.0 * SQR(ts - border2) / (iterations * height * width);
|
||||||
progress = std::min(progress, 1.0);
|
progress = std::min(progress, 1.0);
|
||||||
@ -658,7 +666,9 @@ float* RawImageSource::CA_correct_RT(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
//end of diagnostic pass
|
//end of diagnostic pass
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp critical (cadetectpass2)
|
#pragma omp critical (cadetectpass2)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
for (int dir = 0; dir < 2; dir++) {
|
for (int dir = 0; dir < 2; dir++) {
|
||||||
for (int c = 0; c < 2; c++) {
|
for (int c = 0; c < 2; c++) {
|
||||||
@ -668,9 +678,13 @@ float* RawImageSource::CA_correct_RT(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp barrier
|
#pragma omp barrier
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp single
|
#pragma omp single
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
for (int dir = 0; dir < 2; dir++)
|
for (int dir = 0; dir < 2; dir++)
|
||||||
for (int c = 0; c < 2; c++) {
|
for (int c = 0; c < 2; c++) {
|
||||||
@ -806,7 +820,9 @@ float* RawImageSource::CA_correct_RT(
|
|||||||
float* grbdiff = (float (*)) (data + 2 * sizeof(float) * ts * ts + 3 * 64); // there is no overlap in buffer usage => share
|
float* grbdiff = (float (*)) (data + 2 * sizeof(float) * ts * ts + 3 * 64); // there is no overlap in buffer usage => share
|
||||||
//green interpolated to optical sample points for R/B
|
//green interpolated to optical sample points for R/B
|
||||||
float* gshift = (float (*)) (data + 2 * sizeof(float) * ts * ts + sizeof(float) * ts * tsh + 4 * 64); // there is no overlap in buffer usage => share
|
float* gshift = (float (*)) (data + 2 * sizeof(float) * ts * ts + sizeof(float) * ts * tsh + 4 * 64); // there is no overlap in buffer usage => share
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for schedule(dynamic) collapse(2)
|
#pragma omp for schedule(dynamic) collapse(2)
|
||||||
|
#endif
|
||||||
for (int top = -border; top < height; top += ts - border2) {
|
for (int top = -border; top < height; top += ts - border2) {
|
||||||
for (int left = -border; left < width - (W & 1); left += ts - border2) {
|
for (int left = -border; left < width - (W & 1); left += ts - border2) {
|
||||||
memset(bufferThr, 0, buffersizePassTwo);
|
memset(bufferThr, 0, buffersizePassTwo);
|
||||||
@ -1197,7 +1213,9 @@ float* RawImageSource::CA_correct_RT(
|
|||||||
progresscounter++;
|
progresscounter++;
|
||||||
|
|
||||||
if (progresscounter % 8 == 0)
|
if (progresscounter % 8 == 0)
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp critical (cacorrect)
|
#pragma omp critical (cacorrect)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
progress += 4.0 * SQR(ts - border2) / (iterations * height * width);
|
progress += 4.0 * SQR(ts - border2) / (iterations * height * width);
|
||||||
progress = std::min(progress, 1.0);
|
progress = std::min(progress, 1.0);
|
||||||
@ -1208,7 +1226,9 @@ float* RawImageSource::CA_correct_RT(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// copy temporary image matrix back to image matrix
|
// copy temporary image matrix back to image matrix
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int row = cb; row < height - cb; row++) {
|
for (int row = cb; row < height - cb; row++) {
|
||||||
int col = cb + (FC(row, 0) & 1);
|
int col = cb + (FC(row, 0) & 1);
|
||||||
@ -1232,14 +1252,18 @@ float* RawImageSource::CA_correct_RT(
|
|||||||
// of red and blue channel and apply a gaussian blur to them.
|
// of red and blue channel and apply a gaussian blur to them.
|
||||||
// Then we apply the resulting factors per pixel on the result of raw ca correction
|
// Then we apply the resulting factors per pixel on the result of raw ca correction
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel
|
#pragma omp parallel
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
#ifdef __SSE2__
|
#ifdef __SSE2__
|
||||||
const vfloat onev = F2V(1.f);
|
const vfloat onev = F2V(1.f);
|
||||||
const vfloat twov = F2V(2.f);
|
const vfloat twov = F2V(2.f);
|
||||||
const vfloat zd5v = F2V(0.5f);
|
const vfloat zd5v = F2V(0.5f);
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
for (int i = 0; i < H - 2 * cb; ++i) {
|
for (int i = 0; i < H - 2 * cb; ++i) {
|
||||||
const int firstCol = FC(i, 0) & 1;
|
const int firstCol = FC(i, 0) & 1;
|
||||||
const int colour = FC(i, firstCol);
|
const int colour = FC(i, firstCol);
|
||||||
@ -1260,7 +1284,9 @@ float* RawImageSource::CA_correct_RT(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp single
|
#pragma omp single
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
if (H % 2) {
|
if (H % 2) {
|
||||||
// odd height => factors are not set in last row => use values of preceding row
|
// odd height => factors are not set in last row => use values of preceding row
|
||||||
@ -1287,7 +1313,9 @@ float* RawImageSource::CA_correct_RT(
|
|||||||
gaussianBlur(*blueFactor, *blueFactor, (W + 1 - 2 * cb) / 2, (H + 1 - 2 * cb) / 2, 30.0);
|
gaussianBlur(*blueFactor, *blueFactor, (W + 1 - 2 * cb) / 2, (H + 1 - 2 * cb) / 2, 30.0);
|
||||||
|
|
||||||
// apply correction factors to avoid (reduce) colour shift
|
// apply correction factors to avoid (reduce) colour shift
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
for (int i = 0; i < H - 2 * cb; ++i) {
|
for (int i = 0; i < H - 2 * cb; ++i) {
|
||||||
const int firstCol = FC(i, 0) & 1;
|
const int firstCol = FC(i, 0) & 1;
|
||||||
const int colour = FC(i, firstCol);
|
const int colour = FC(i, firstCol);
|
||||||
|
@ -324,7 +324,9 @@ void MultiDiagonalSymmetricMatrix::VectorProduct(float* RESTRICT Product, float*
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp single
|
#pragma omp single
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
#ifdef __SSE2__
|
#ifdef __SSE2__
|
||||||
|
|
||||||
|
@ -1839,11 +1839,15 @@ BENCHFUN
|
|||||||
|
|
||||||
for (int iteration = 1; iteration <= dnparams.passes; ++iteration) {
|
for (int iteration = 1; iteration <= dnparams.passes; ++iteration) {
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel
|
#pragma omp parallel
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
if (methmed < 2)
|
if (methmed < 2)
|
||||||
{
|
{
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int i = 1; i < hei - 1; ++i) {
|
for (int i = 1; i < hei - 1; ++i) {
|
||||||
if (methmed == 0) {
|
if (methmed == 0) {
|
||||||
@ -1858,7 +1862,9 @@ BENCHFUN
|
|||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int i = 2; i < hei - 2; ++i) {
|
for (int i = 2; i < hei - 2; ++i) {
|
||||||
if (methmed == 3) {
|
if (methmed == 3) {
|
||||||
@ -1902,7 +1908,9 @@ BENCHFUN
|
|||||||
|
|
||||||
if (methmed < 2)
|
if (methmed < 2)
|
||||||
{
|
{
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int i = 1; i < hei - 1; ++i) {
|
for (int i = 1; i < hei - 1; ++i) {
|
||||||
if (methmed == 0) {
|
if (methmed == 0) {
|
||||||
@ -1917,7 +1925,9 @@ BENCHFUN
|
|||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int i = 2; i < hei - 2; ++i) {
|
for (int i = 2; i < hei - 2; ++i) {
|
||||||
if (methmed == 3) {
|
if (methmed == 3) {
|
||||||
@ -1962,7 +1972,9 @@ BENCHFUN
|
|||||||
|
|
||||||
if (methmed < 2)
|
if (methmed < 2)
|
||||||
{
|
{
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int i = 1; i < hei - 1; ++i) {
|
for (int i = 1; i < hei - 1; ++i) {
|
||||||
if (methmed == 0) {
|
if (methmed == 0) {
|
||||||
@ -1977,7 +1989,9 @@ BENCHFUN
|
|||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int i = 2; i < hei - 2; ++i) {
|
for (int i = 2; i < hei - 2; ++i) {
|
||||||
if (methmed == 3) {
|
if (methmed == 3) {
|
||||||
|
@ -152,10 +152,14 @@ template<class T, class A> void bilateral05 (T** src, T** dst, T** buffer, int W
|
|||||||
{
|
{
|
||||||
|
|
||||||
BL_BEGIN(318, 1)
|
BL_BEGIN(318, 1)
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_OPER3(1, 7, 7, 55)
|
BL_OPER3(1, 7, 7, 55)
|
||||||
BL_FREE
|
BL_FREE
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_END(1)
|
BL_END(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -164,10 +168,14 @@ template<class T, class A> void bilateral06 (T** src, T** dst, T** buffer, int W
|
|||||||
{
|
{
|
||||||
|
|
||||||
BL_BEGIN(768, 1)
|
BL_BEGIN(768, 1)
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_OPER3(1, 4, 4, 16)
|
BL_OPER3(1, 4, 4, 16)
|
||||||
BL_FREE
|
BL_FREE
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_END(1)
|
BL_END(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -176,10 +184,14 @@ template<class T, class A> void bilateral07 (T** src, T** dst, T** buffer, int W
|
|||||||
{
|
{
|
||||||
|
|
||||||
BL_BEGIN(366, 2)
|
BL_BEGIN(366, 2)
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_OPER5(0, 0, 1, 0, 8, 21, 1, 21, 59)
|
BL_OPER5(0, 0, 1, 0, 8, 21, 1, 21, 59)
|
||||||
BL_FREE
|
BL_FREE
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_END(2)
|
BL_END(2)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -188,10 +200,14 @@ template<class T, class A> void bilateral08 (T** src, T** dst, T** buffer, int W
|
|||||||
{
|
{
|
||||||
|
|
||||||
BL_BEGIN(753, 2)
|
BL_BEGIN(753, 2)
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_OPER5(0, 0, 1, 0, 5, 10, 1, 10, 23)
|
BL_OPER5(0, 0, 1, 0, 5, 10, 1, 10, 23)
|
||||||
BL_FREE
|
BL_FREE
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_END(2)
|
BL_END(2)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -200,10 +216,14 @@ template<class T, class A> void bilateral09 (T** src, T** dst, T** buffer, int W
|
|||||||
{
|
{
|
||||||
|
|
||||||
BL_BEGIN(595, 2)
|
BL_BEGIN(595, 2)
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_OPER5(0, 1, 2, 1, 6, 12, 2, 12, 22)
|
BL_OPER5(0, 1, 2, 1, 6, 12, 2, 12, 22)
|
||||||
BL_FREE
|
BL_FREE
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_END(2)
|
BL_END(2)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -212,10 +232,14 @@ template<class T, class A> void bilateral10 (T** src, T** dst, T** buffer, int W
|
|||||||
{
|
{
|
||||||
|
|
||||||
BL_BEGIN(910, 2)
|
BL_BEGIN(910, 2)
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_OPER5(0, 1, 2, 1, 4, 7, 2, 7, 12)
|
BL_OPER5(0, 1, 2, 1, 4, 7, 2, 7, 12)
|
||||||
BL_FREE
|
BL_FREE
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_END(2)
|
BL_END(2)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -224,10 +248,14 @@ template<class T, class A> void bilateral11 (T** src, T** dst, T** buffer, int W
|
|||||||
{
|
{
|
||||||
|
|
||||||
BL_BEGIN(209, 3)
|
BL_BEGIN(209, 3)
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_OPER7(0, 0, 1, 1, 0, 2, 5, 8, 1, 5, 18, 27, 1, 8, 27, 41)
|
BL_OPER7(0, 0, 1, 1, 0, 2, 5, 8, 1, 5, 18, 27, 1, 8, 27, 41)
|
||||||
BL_FREE
|
BL_FREE
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_END(3)
|
BL_END(3)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -236,10 +264,14 @@ template<class T, class A> void bilateral12 (T** src, T** dst, T** buffer, int W
|
|||||||
{
|
{
|
||||||
|
|
||||||
BL_BEGIN(322, 3)
|
BL_BEGIN(322, 3)
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_OPER7(0, 0, 1, 1, 0, 1, 4, 6, 1, 4, 11, 16, 1, 6, 16, 23)
|
BL_OPER7(0, 0, 1, 1, 0, 1, 4, 6, 1, 4, 11, 16, 1, 6, 16, 23)
|
||||||
BL_FREE
|
BL_FREE
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_END(3)
|
BL_END(3)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -248,10 +280,14 @@ template<class T, class A> void bilateral13 (T** src, T** dst, T** buffer, int W
|
|||||||
{
|
{
|
||||||
|
|
||||||
BL_BEGIN(336, 3)
|
BL_BEGIN(336, 3)
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_OPER7(0, 0, 1, 1, 0, 2, 4, 6, 1, 4, 11, 14, 1, 6, 14, 19)
|
BL_OPER7(0, 0, 1, 1, 0, 2, 4, 6, 1, 4, 11, 14, 1, 6, 14, 19)
|
||||||
BL_FREE
|
BL_FREE
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_END(3)
|
BL_END(3)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -260,10 +296,14 @@ template<class T, class A> void bilateral14 (T** src, T** dst, T** buffer, int W
|
|||||||
{
|
{
|
||||||
|
|
||||||
BL_BEGIN(195, 3)
|
BL_BEGIN(195, 3)
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_OPER7(0, 1, 2, 3, 1, 4, 8, 10, 2, 8, 17, 21, 3, 10, 21, 28)
|
BL_OPER7(0, 1, 2, 3, 1, 4, 8, 10, 2, 8, 17, 21, 3, 10, 21, 28)
|
||||||
BL_FREE
|
BL_FREE
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_END(3)
|
BL_END(3)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -272,10 +312,14 @@ template<class T, class A> void bilateral15 (T** src, T** dst, T** buffer, int W
|
|||||||
{
|
{
|
||||||
|
|
||||||
BL_BEGIN(132, 4)
|
BL_BEGIN(132, 4)
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_OPER9(0, 0, 0, 1, 1, 0, 1, 2, 4, 5, 0, 2, 6, 12, 14, 1, 4, 12, 22, 28, 1, 5, 14, 28, 35)
|
BL_OPER9(0, 0, 0, 1, 1, 0, 1, 2, 4, 5, 0, 2, 6, 12, 14, 1, 4, 12, 22, 28, 1, 5, 14, 28, 35)
|
||||||
BL_FREE
|
BL_FREE
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_END(4)
|
BL_END(4)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -284,10 +328,14 @@ template<class T, class A> void bilateral16 (T** src, T** dst, T** buffer, int W
|
|||||||
{
|
{
|
||||||
|
|
||||||
BL_BEGIN(180, 4)
|
BL_BEGIN(180, 4)
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_OPER9(0, 0, 0, 1, 1, 0, 1, 2, 3, 4, 0, 2, 5, 9, 10, 1, 3, 9, 15, 19, 1, 4, 10, 19, 23)
|
BL_OPER9(0, 0, 0, 1, 1, 0, 1, 2, 3, 4, 0, 2, 5, 9, 10, 1, 3, 9, 15, 19, 1, 4, 10, 19, 23)
|
||||||
BL_FREE
|
BL_FREE
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_END(4)
|
BL_END(4)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -296,10 +344,14 @@ template<class T, class A> void bilateral17 (T** src, T** dst, T** buffer, int W
|
|||||||
{
|
{
|
||||||
|
|
||||||
BL_BEGIN(195, 4)
|
BL_BEGIN(195, 4)
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_OPER9(0, 0, 1, 1, 1, 0, 1, 2, 3, 4, 1, 2, 5, 8, 9, 1, 3, 8, 13, 16, 1, 4, 9, 16, 19)
|
BL_OPER9(0, 0, 1, 1, 1, 0, 1, 2, 3, 4, 1, 2, 5, 8, 9, 1, 3, 8, 13, 16, 1, 4, 9, 16, 19)
|
||||||
BL_FREE
|
BL_FREE
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_END(4)
|
BL_END(4)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -308,10 +360,14 @@ template<class T, class A> void bilateral18 (T** src, T** dst, T** buffer, int W
|
|||||||
{
|
{
|
||||||
|
|
||||||
BL_BEGIN(151, 4)
|
BL_BEGIN(151, 4)
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_OPER9(0, 0, 1, 2, 2, 0, 1, 3, 5, 5, 1, 3, 6, 10, 12, 2, 5, 10, 16, 19, 2, 5, 12, 19, 22)
|
BL_OPER9(0, 0, 1, 2, 2, 0, 1, 3, 5, 5, 1, 3, 6, 10, 12, 2, 5, 10, 16, 19, 2, 5, 12, 19, 22)
|
||||||
BL_FREE
|
BL_FREE
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_END(4)
|
BL_END(4)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -320,10 +376,14 @@ template<class T, class A> void bilateral19 (T** src, T** dst, T** buffer, int W
|
|||||||
{
|
{
|
||||||
|
|
||||||
BL_BEGIN(151, 4)
|
BL_BEGIN(151, 4)
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_OPER9(0, 0, 1, 2, 2, 0, 1, 3, 4, 5, 1, 3, 5, 8, 9, 2, 4, 8, 12, 14, 2, 5, 9, 14, 16)
|
BL_OPER9(0, 0, 1, 2, 2, 0, 1, 3, 4, 5, 1, 3, 5, 8, 9, 2, 4, 8, 12, 14, 2, 5, 9, 14, 16)
|
||||||
BL_FREE
|
BL_FREE
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_END(4)
|
BL_END(4)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -332,10 +392,14 @@ template<class T, class A> void bilateral20 (T** src, T** dst, T** buffer, int W
|
|||||||
{
|
{
|
||||||
|
|
||||||
BL_BEGIN(116, 5)
|
BL_BEGIN(116, 5)
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_OPER11(0, 0, 0, 1, 1, 1, 0, 0, 1, 2, 3, 3, 0, 1, 2, 4, 7, 7, 1, 2, 4, 8, 12, 14, 1, 3, 7, 12, 18, 20, 1, 3, 7, 14, 20, 23)
|
BL_OPER11(0, 0, 0, 1, 1, 1, 0, 0, 1, 2, 3, 3, 0, 1, 2, 4, 7, 7, 1, 2, 4, 8, 12, 14, 1, 3, 7, 12, 18, 20, 1, 3, 7, 14, 20, 23)
|
||||||
BL_FREE
|
BL_FREE
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_END(5)
|
BL_END(5)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -344,10 +408,14 @@ template<class T, class A> void bilateral21 (T** src, T** dst, T** buffer, int W
|
|||||||
{
|
{
|
||||||
|
|
||||||
BL_BEGIN(127, 5)
|
BL_BEGIN(127, 5)
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_OPER11(0, 0, 0, 1, 1, 1, 0, 0, 1, 2, 3, 3, 0, 1, 2, 4, 6, 7, 1, 2, 4, 8, 11, 12, 1, 3, 6, 11, 15, 17, 1, 3, 7, 12, 17, 19)
|
BL_OPER11(0, 0, 0, 1, 1, 1, 0, 0, 1, 2, 3, 3, 0, 1, 2, 4, 6, 7, 1, 2, 4, 8, 11, 12, 1, 3, 6, 11, 15, 17, 1, 3, 7, 12, 17, 19)
|
||||||
BL_FREE
|
BL_FREE
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_END(5)
|
BL_END(5)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -356,10 +424,14 @@ template<class T, class A> void bilateral22 (T** src, T** dst, T** buffer, int W
|
|||||||
{
|
{
|
||||||
|
|
||||||
BL_BEGIN(109, 5)
|
BL_BEGIN(109, 5)
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_OPER11(0, 0, 0, 1, 1, 2, 0, 1, 2, 3, 3, 4, 1, 2, 3, 5, 7, 8, 1, 3, 5, 9, 12, 13, 1, 3, 7, 12, 16, 18, 2, 4, 8, 13, 18, 20)
|
BL_OPER11(0, 0, 0, 1, 1, 2, 0, 1, 2, 3, 3, 4, 1, 2, 3, 5, 7, 8, 1, 3, 5, 9, 12, 13, 1, 3, 7, 12, 16, 18, 2, 4, 8, 13, 18, 20)
|
||||||
BL_FREE
|
BL_FREE
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_END(5)
|
BL_END(5)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -368,10 +440,14 @@ template<class T, class A> void bilateral23 (T** src, T** dst, T** buffer, int W
|
|||||||
{
|
{
|
||||||
|
|
||||||
BL_BEGIN(132, 5)
|
BL_BEGIN(132, 5)
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_OPER11(0, 0, 1, 1, 1, 1, 0, 1, 1, 2, 3, 3, 1, 1, 3, 5, 6, 7, 1, 2, 5, 7, 10, 11, 1, 3, 6, 10, 13, 14, 1, 3, 7, 11, 14, 16)
|
BL_OPER11(0, 0, 1, 1, 1, 1, 0, 1, 1, 2, 3, 3, 1, 1, 3, 5, 6, 7, 1, 2, 5, 7, 10, 11, 1, 3, 6, 10, 13, 14, 1, 3, 7, 11, 14, 16)
|
||||||
BL_FREE
|
BL_FREE
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_END(5)
|
BL_END(5)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -380,10 +456,14 @@ template<class T, class A> void bilateral24 (T** src, T** dst, T** buffer, int W
|
|||||||
{
|
{
|
||||||
|
|
||||||
BL_BEGIN(156, 5)
|
BL_BEGIN(156, 5)
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_OPER11(0, 0, 1, 1, 1, 1, 0, 1, 1, 2, 3, 3, 1, 1, 3, 4, 5, 6, 1, 2, 4, 6, 8, 9, 1, 3, 5, 8, 10, 11, 1, 3, 6, 9, 11, 12)
|
BL_OPER11(0, 0, 1, 1, 1, 1, 0, 1, 1, 2, 3, 3, 1, 1, 3, 4, 5, 6, 1, 2, 4, 6, 8, 9, 1, 3, 5, 8, 10, 11, 1, 3, 6, 9, 11, 12)
|
||||||
BL_FREE
|
BL_FREE
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_END(5)
|
BL_END(5)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -392,10 +472,14 @@ template<class T, class A> void bilateral25 (T** src, T** dst, T** buffer, int W
|
|||||||
{
|
{
|
||||||
|
|
||||||
BL_BEGIN(173, 5)
|
BL_BEGIN(173, 5)
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_OPER11(0, 0, 1, 1, 1, 1, 0, 1, 1, 2, 3, 3, 1, 1, 2, 4, 5, 5, 1, 2, 4, 5, 7, 7, 1, 3, 5, 7, 9, 9, 1, 3, 5, 7, 9, 10)
|
BL_OPER11(0, 0, 1, 1, 1, 1, 0, 1, 1, 2, 3, 3, 1, 1, 2, 4, 5, 5, 1, 2, 4, 5, 7, 7, 1, 3, 5, 7, 9, 9, 1, 3, 5, 7, 9, 10)
|
||||||
BL_FREE
|
BL_FREE
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
BL_END(5)
|
BL_END(5)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,7 +64,9 @@ void RawImageSource::CLASS cfa_linedn(float noise, bool horizontal, bool vertica
|
|||||||
float noisevarm4 = 4.0f * noisevar;
|
float noisevarm4 = 4.0f * noisevar;
|
||||||
volatile double progress = 0.0;
|
volatile double progress = 0.0;
|
||||||
float* RawDataTmp = (float*)malloc( width * height * sizeof(float));
|
float* RawDataTmp = (float*)malloc( width * height * sizeof(float));
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel
|
#pragma omp parallel
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
|
|
||||||
// allocate memory and assure the arrays don't have same 64 byte boundary to avoid L1 conflict misses
|
// allocate memory and assure the arrays don't have same 64 byte boundary to avoid L1 conflict misses
|
||||||
@ -76,7 +78,9 @@ void RawImageSource::CLASS cfa_linedn(float noise, bool horizontal, bool vertica
|
|||||||
float linehvar[4], linevvar[4], noisefactor[4][8][2], coeffsq;
|
float linehvar[4], linevvar[4], noisefactor[4][8][2], coeffsq;
|
||||||
float dctblock[4][8][8];
|
float dctblock[4][8][8];
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
|
|
||||||
for(int i = 0; i < height; i++)
|
for(int i = 0; i < height; i++)
|
||||||
for(int j = 0; j < width; j++) {
|
for(int j = 0; j < width; j++) {
|
||||||
@ -84,7 +88,9 @@ void RawImageSource::CLASS cfa_linedn(float noise, bool horizontal, bool vertica
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Main algorithm: Tile loop
|
// Main algorithm: Tile loop
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for schedule(dynamic) collapse(2)
|
#pragma omp for schedule(dynamic) collapse(2)
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int top = 0; top < height - 16; top += TS - 32)
|
for (int top = 0; top < height - 16; top += TS - 32)
|
||||||
for (int left = 0; left < width - 16; left += TS - 32) {
|
for (int left = 0; left < width - 16; left += TS - 32) {
|
||||||
@ -251,7 +257,9 @@ void RawImageSource::CLASS cfa_linedn(float noise, bool horizontal, bool vertica
|
|||||||
free(cfain);
|
free(cfain);
|
||||||
|
|
||||||
// copy temporary buffer back to image matrix
|
// copy temporary buffer back to image matrix
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for schedule(dynamic,16)
|
#pragma omp for schedule(dynamic,16)
|
||||||
|
#endif
|
||||||
|
|
||||||
for(int i = 0; i < height; i++) {
|
for(int i = 0; i < height; i++) {
|
||||||
float f = rowblender(i);
|
float f = rowblender(i);
|
||||||
|
@ -1695,7 +1695,9 @@ void CLASS phase_one_correct()
|
|||||||
curve[i] = LIM(num+i,0,65535);
|
curve[i] = LIM(num+i,0,65535);
|
||||||
}
|
}
|
||||||
apply: /* apply to whole image */
|
apply: /* apply to whole image */
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for schedule(dynamic,16)
|
#pragma omp parallel for schedule(dynamic,16)
|
||||||
|
#endif
|
||||||
for (int row=0; row < raw_height; row++) {
|
for (int row=0; row < raw_height; row++) {
|
||||||
for (int col = (tag & 1)*ph1.split_col; col < raw_width; col++) {
|
for (int col = (tag & 1)*ph1.split_col; col < raw_width; col++) {
|
||||||
RAW(row,col) = curve[RAW(row,col)];
|
RAW(row,col) = curve[RAW(row,col)];
|
||||||
@ -1770,8 +1772,10 @@ void CLASS phase_one_correct()
|
|||||||
cx[17] = cf[17] = ((unsigned) ref[15] * 65535) / lc[qr][qc][15];
|
cx[17] = cf[17] = ((unsigned) ref[15] * 65535) / lc[qr][qc][15];
|
||||||
cx[18] = cf[18] = 65535;
|
cx[18] = cf[18] = 65535;
|
||||||
cubic_spline(cx, cf, 19);
|
cubic_spline(cx, cf, 19);
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for schedule(dynamic,16)
|
#pragma omp parallel for schedule(dynamic,16)
|
||||||
for (int row = (qr ? ph1.split_row : 0); row < (qr ? raw_height : ph1.split_row); row++)
|
#endif
|
||||||
|
for (int row = (qr ? ph1.split_row : 0); row < (qr ? raw_height : ph1.split_row); row++)
|
||||||
for (int col = (qc ? ph1.split_col : 0); col < (qc ? raw_width : ph1.split_col); col++)
|
for (int col = (qc ? ph1.split_col : 0); col < (qc ? raw_width : ph1.split_col); col++)
|
||||||
RAW(row,col) = curve[RAW(row,col)];
|
RAW(row,col) = curve[RAW(row,col)];
|
||||||
}
|
}
|
||||||
@ -1787,7 +1791,9 @@ void CLASS phase_one_correct()
|
|||||||
qmult[1][0] = 1.0 + getreal(11);
|
qmult[1][0] = 1.0 + getreal(11);
|
||||||
get4(); get4(); get4();
|
get4(); get4(); get4();
|
||||||
qmult[1][1] = 1.0 + getreal(11);
|
qmult[1][1] = 1.0 + getreal(11);
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for schedule(dynamic,16)
|
#pragma omp parallel for schedule(dynamic,16)
|
||||||
|
#endif
|
||||||
for (int row=0; row < raw_height; row++) {
|
for (int row=0; row < raw_height; row++) {
|
||||||
for (int col=0; col < raw_width; col++) {
|
for (int col=0; col < raw_width; col++) {
|
||||||
int i = qmult[row >= ph1.split_row][col >= ph1.split_col] * RAW(row,col);
|
int i = qmult[row >= ph1.split_row][col >= ph1.split_col] * RAW(row,col);
|
||||||
@ -2329,7 +2335,9 @@ void CLASS hasselblad_correct()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// apply flatfield
|
// apply flatfield
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
|
#endif
|
||||||
for (int row = 0; row < raw_height; row++) {
|
for (int row = 0; row < raw_height; row++) {
|
||||||
int ffs, cur_ffr, i, c;
|
int ffs, cur_ffr, i, c;
|
||||||
if (row < row_offset) {
|
if (row < row_offset) {
|
||||||
@ -4470,7 +4478,9 @@ void CLASS crop_masked_pixels()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
|
#endif
|
||||||
for (int row=0; row < height; row++)
|
for (int row=0; row < height; row++)
|
||||||
for (int col=0; col < width; col++)
|
for (int col=0; col < width; col++)
|
||||||
BAYER2(row,col) = RAW(row+top_margin,col+left_margin);
|
BAYER2(row,col) = RAW(row+top_margin,col+left_margin);
|
||||||
|
@ -1528,7 +1528,7 @@ void RawImageSource::igv_interpolate(int winw, int winh)
|
|||||||
const int v1 = 1 * width, v2 = 2 * width, v3 = 3 * width, v4 = 4 * width, v5 = 5 * width, v6 = 6 * width;
|
const int v1 = 1 * width, v2 = 2 * width, v3 = 3 * width, v4 = 4 * width, v5 = 5 * width, v6 = 6 * width;
|
||||||
float* rgb[3];
|
float* rgb[3];
|
||||||
float* chr[2];
|
float* chr[2];
|
||||||
float (*rgbarray), *vdif, *hdif, (*chrarray);
|
float *rgbarray, *vdif, *hdif, *chrarray;
|
||||||
|
|
||||||
rgbarray = (float (*)) calloc(width * height * 3, sizeof( float));
|
rgbarray = (float (*)) calloc(width * height * 3, sizeof( float));
|
||||||
rgb[0] = rgbarray;
|
rgb[0] = rgbarray;
|
||||||
@ -1789,7 +1789,9 @@ void RawImageSource::nodemosaic(bool bw)
|
|||||||
red(W, H);
|
red(W, H);
|
||||||
green(W, H);
|
green(W, H);
|
||||||
blue(W, H);
|
blue(W, H);
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int i = 0; i < H; i++) {
|
for (int i = 0; i < H; i++) {
|
||||||
for (int j = 0; j < W; j++) {
|
for (int j = 0; j < W; j++) {
|
||||||
|
@ -219,10 +219,14 @@ void dfInfo::updateBadPixelList( RawImage *df )
|
|||||||
if( df->getSensorType() == ST_BAYER || df->getSensorType() == ST_FUJI_XTRANS ) {
|
if( df->getSensorType() == ST_BAYER || df->getSensorType() == ST_FUJI_XTRANS ) {
|
||||||
std::vector<badPix> badPixelsTemp;
|
std::vector<badPix> badPixelsTemp;
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel
|
#pragma omp parallel
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
std::vector<badPix> badPixelsThread;
|
std::vector<badPix> badPixelsThread;
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for nowait
|
#pragma omp for nowait
|
||||||
|
#endif
|
||||||
|
|
||||||
for( int row = 2; row < df->get_height() - 2; row++)
|
for( int row = 2; row < df->get_height() - 2; row++)
|
||||||
for( int col = 2; col < df->get_width() - 2; col++) {
|
for( int col = 2; col < df->get_width() - 2; col++) {
|
||||||
@ -235,7 +239,9 @@ void dfInfo::updateBadPixelList( RawImage *df )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp critical
|
#pragma omp critical
|
||||||
|
#endif
|
||||||
badPixelsTemp.insert(badPixelsTemp.end(), badPixelsThread.begin(), badPixelsThread.end());
|
badPixelsTemp.insert(badPixelsTemp.end(), badPixelsThread.begin(), badPixelsThread.end());
|
||||||
}
|
}
|
||||||
badPixels.insert(badPixels.end(), badPixelsTemp.begin(), badPixelsTemp.end());
|
badPixels.insert(badPixels.end(), badPixelsTemp.begin(), badPixelsTemp.end());
|
||||||
|
@ -145,7 +145,9 @@ void ImProcFunctions :: dirpyr_equalizer(float ** src, float ** dst, int srcwidt
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __SSE2__
|
#ifdef __SSE2__
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int i = 0; i < srcheight; i++) {
|
for (int i = 0; i < srcheight; i++) {
|
||||||
int j;
|
int j;
|
||||||
@ -160,7 +162,9 @@ void ImProcFunctions :: dirpyr_equalizer(float ** src, float ** dst, int srcwidt
|
|||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int i = 0; i < srcheight; i++) {
|
for (int i = 0; i < srcheight; i++) {
|
||||||
for (int j = 0; j < srcwidth; j++) {
|
for (int j = 0; j < srcwidth; j++) {
|
||||||
@ -176,10 +180,14 @@ void ImProcFunctions :: dirpyr_equalizer(float ** src, float ** dst, int srcwidt
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __SSE2__
|
#ifdef __SSE2__
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel
|
#pragma omp parallel
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
__m128 div = _mm_set1_ps(327.68f);
|
__m128 div = _mm_set1_ps(327.68f);
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int i = 0; i < srcheight; i++) {
|
for (int i = 0; i < srcheight; i++) {
|
||||||
int j;
|
int j;
|
||||||
@ -194,7 +202,9 @@ void ImProcFunctions :: dirpyr_equalizer(float ** src, float ** dst, int srcwidt
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int i = 0; i < srcheight; i++) {
|
for (int i = 0; i < srcheight; i++) {
|
||||||
for (int j = 0; j < srcwidth; j++) {
|
for (int j = 0; j < srcwidth; j++) {
|
||||||
@ -230,7 +240,9 @@ void ImProcFunctions :: dirpyr_equalizer(float ** src, float ** dst, int srcwidt
|
|||||||
delete [] tmpHue;
|
delete [] tmpHue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int i = 0; i < srcheight; i++)
|
for (int i = 0; i < srcheight; i++)
|
||||||
for (int j = 0; j < srcwidth; j++) {
|
for (int j = 0; j < srcwidth; j++) {
|
||||||
|
@ -91,9 +91,13 @@ void RawImageSource::dual_demosaic_RT(bool isBayer, const RAWParams &raw, int wi
|
|||||||
{ 0.019334, 0.119193, 0.950227 }
|
{ 0.019334, 0.119193, 0.950227 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel
|
#pragma omp parallel
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
for(int i = 0; i < winh; ++i) {
|
for(int i = 0; i < winh; ++i) {
|
||||||
Color::RGB2L(red[i], green[i], blue[i], L[i], xyz_rgb, winw);
|
Color::RGB2L(red[i], green[i], blue[i], L[i], xyz_rgb, winw);
|
||||||
}
|
}
|
||||||
@ -106,19 +110,25 @@ void RawImageSource::dual_demosaic_RT(bool isBayer, const RAWParams &raw, int wi
|
|||||||
contrast = contrastf * 100.f;
|
contrast = contrastf * 100.f;
|
||||||
|
|
||||||
// the following is split into 3 loops intentionally to avoid cache conflicts on CPUs with only 4-way cache
|
// the following is split into 3 loops intentionally to avoid cache conflicts on CPUs with only 4-way cache
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
|
#endif
|
||||||
for(int i = 0; i < winh; ++i) {
|
for(int i = 0; i < winh; ++i) {
|
||||||
for(int j = 0; j < winw; ++j) {
|
for(int j = 0; j < winw; ++j) {
|
||||||
red[i][j] = intp(blend[i][j], red[i][j], redTmp[i][j]);
|
red[i][j] = intp(blend[i][j], red[i][j], redTmp[i][j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
|
#endif
|
||||||
for(int i = 0; i < winh; ++i) {
|
for(int i = 0; i < winh; ++i) {
|
||||||
for(int j = 0; j < winw; ++j) {
|
for(int j = 0; j < winw; ++j) {
|
||||||
green[i][j] = intp(blend[i][j], green[i][j], greenTmp[i][j]);
|
green[i][j] = intp(blend[i][j], green[i][j], greenTmp[i][j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
|
#endif
|
||||||
for(int i = 0; i < winh; ++i) {
|
for(int i = 0; i < winh; ++i) {
|
||||||
for(int j = 0; j < winw; ++j) {
|
for(int j = 0; j < winw; ++j) {
|
||||||
blue[i][j] = intp(blend[i][j], blue[i][j], blueTmp[i][j]);
|
blue[i][j] = intp(blend[i][j], blue[i][j], blueTmp[i][j]);
|
||||||
|
@ -431,7 +431,9 @@ void RawImageSource::eahd_demosaic ()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Interpolate R and B
|
// Interpolate R and B
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
|
#endif
|
||||||
for (int i = 0; i < H; i++) {
|
for (int i = 0; i < H; i++) {
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
interpolate_row_rb_mul_pp (rawData, red[i], blue[i], nullptr, green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1);
|
interpolate_row_rb_mul_pp (rawData, red[i], blue[i], nullptr, green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1);
|
||||||
@ -443,4 +445,4 @@ void RawImageSource::eahd_demosaic ()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -63,13 +63,17 @@ void RawImageSource::processRawWhitepoint(float expos, float preser, array2D<flo
|
|||||||
// No highlight protection - simple mutiplication
|
// No highlight protection - simple mutiplication
|
||||||
|
|
||||||
if (ri->getSensorType() == ST_BAYER || ri->getSensorType() == ST_FUJI_XTRANS)
|
if (ri->getSensorType() == ST_BAYER || ri->getSensorType() == ST_FUJI_XTRANS)
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
|
#endif
|
||||||
for (int row = 0; row < height; row++)
|
for (int row = 0; row < height; row++)
|
||||||
for (int col = 0; col < width; col++) {
|
for (int col = 0; col < width; col++) {
|
||||||
rawData[row][col] *= expos;
|
rawData[row][col] *= expos;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
|
#endif
|
||||||
for (int row = 0; row < height; row++)
|
for (int row = 0; row < height; row++)
|
||||||
for (int col = 0; col < width; col++) {
|
for (int col = 0; col < width; col++) {
|
||||||
rawData[row][col * 3] *= expos;
|
rawData[row][col * 3] *= expos;
|
||||||
@ -88,12 +92,16 @@ void RawImageSource::processRawWhitepoint(float expos, float preser, array2D<flo
|
|||||||
|
|
||||||
// Find maximum to adjust LUTs. New float engines clips only at the very end
|
// Find maximum to adjust LUTs. New float engines clips only at the very end
|
||||||
float maxValFloat = 0.f;
|
float maxValFloat = 0.f;
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel
|
#pragma omp parallel
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
float maxValFloatThr = 0.f;
|
float maxValFloatThr = 0.f;
|
||||||
|
|
||||||
if (ri->getSensorType() == ST_BAYER || ri->getSensorType() == ST_FUJI_XTRANS)
|
if (ri->getSensorType() == ST_BAYER || ri->getSensorType() == ST_FUJI_XTRANS)
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for schedule(dynamic,16) nowait
|
#pragma omp for schedule(dynamic,16) nowait
|
||||||
|
#endif
|
||||||
for(int row = 0; row < height; row++)
|
for(int row = 0; row < height; row++)
|
||||||
for (int col = 0; col < width; col++) {
|
for (int col = 0; col < width; col++) {
|
||||||
if (rawData[row][col] > maxValFloatThr) {
|
if (rawData[row][col] > maxValFloatThr) {
|
||||||
@ -101,7 +109,9 @@ void RawImageSource::processRawWhitepoint(float expos, float preser, array2D<flo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for schedule(dynamic,16) nowait
|
#pragma omp for schedule(dynamic,16) nowait
|
||||||
|
#endif
|
||||||
for(int row = 0; row < height; row++)
|
for(int row = 0; row < height; row++)
|
||||||
for (int col = 0; col < width; col++) {
|
for (int col = 0; col < width; col++) {
|
||||||
for (int c = 0; c < 3; c++)
|
for (int c = 0; c < 3; c++)
|
||||||
@ -110,7 +120,9 @@ void RawImageSource::processRawWhitepoint(float expos, float preser, array2D<flo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp critical
|
#pragma omp critical
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
if(maxValFloatThr > maxValFloat) {
|
if(maxValFloatThr > maxValFloat) {
|
||||||
maxValFloat = maxValFloatThr;
|
maxValFloat = maxValFloatThr;
|
||||||
@ -141,14 +153,18 @@ void RawImageSource::processRawWhitepoint(float expos, float preser, array2D<flo
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ri->getSensorType() == ST_BAYER || ri->getSensorType() == ST_FUJI_XTRANS)
|
if (ri->getSensorType() == ST_BAYER || ri->getSensorType() == ST_FUJI_XTRANS)
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for schedule(dynamic,16)
|
#pragma omp parallel for schedule(dynamic,16)
|
||||||
|
#endif
|
||||||
for(int row = 0; row < height; row++)
|
for(int row = 0; row < height; row++)
|
||||||
for(int col = 0; col < width; col++) {
|
for(int col = 0; col < width; col++) {
|
||||||
float lumi = 0.299f * red[row][col] + 0.587f * green[row][col] + 0.114f * blue[row][col];
|
float lumi = 0.299f * red[row][col] + 0.587f * green[row][col] + 0.114f * blue[row][col];
|
||||||
rawData[row][col] *= lumi < K ? expos : lut[lumi];
|
rawData[row][col] *= lumi < K ? expos : lut[lumi];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
|
#endif
|
||||||
for(int row = 0; row < height; row++)
|
for(int row = 0; row < height; row++)
|
||||||
for(int col = 0; col < width; col++) {
|
for(int col = 0; col < width; col++) {
|
||||||
float lumi = 0.299f * rawData[row][col * 3] + 0.587f * rawData[row][col * 3 + 1] + 0.114f * rawData[row][col * 3 + 2];
|
float lumi = 0.299f * rawData[row][col * 3] + 0.587f * rawData[row][col * 3 + 1] + 0.114f * rawData[row][col * 3 + 2];
|
||||||
|
@ -77,10 +77,10 @@ void RawImageSource::fast_demosaic()
|
|||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
|
||||||
char (*buffer);
|
char *buffer;
|
||||||
float (*greentile);
|
float *greentile;
|
||||||
float (*redtile);
|
float *redtile;
|
||||||
float (*bluetile);
|
float *bluetile;
|
||||||
#define CLF 1
|
#define CLF 1
|
||||||
// assign working space
|
// assign working space
|
||||||
buffer = (char *) calloc(3 * sizeof(float) * TS * TS + 3 * CLF * 64 + 63, 1);
|
buffer = (char *) calloc(3 * sizeof(float) * TS * TS + 3 * CLF * 64 + 63, 1);
|
||||||
|
@ -336,7 +336,9 @@ void RawImageSource::boxblur_resamp(float **src, float **dst, float ** temp, int
|
|||||||
}
|
}
|
||||||
|
|
||||||
// process remaining columns
|
// process remaining columns
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp single
|
#pragma omp single
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
|
|
||||||
//vertical blur
|
//vertical blur
|
||||||
|
@ -52,7 +52,9 @@ void hphd_vertical(const array2D<float> &rawData, float** hpmap, int col_from, i
|
|||||||
#endif
|
#endif
|
||||||
for (; k < col_to - 7; k += numCols) {
|
for (; k < col_to - 7; k += numCols) {
|
||||||
for (int i = 5; i < H - 5; i++) {
|
for (int i = 5; i < H - 5; i++) {
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp simd
|
#pragma omp simd
|
||||||
|
#endif
|
||||||
for(int h = 0; h < numCols; ++h) {
|
for(int h = 0; h < numCols; ++h) {
|
||||||
temp[i][h] = std::fabs((rawData[i - 5][k + h] - rawData[i + 5][k + h]) - 8 * (rawData[i - 4][k + h] - rawData[i + 4][k + h]) + 27 * (rawData[i - 3][k + h] - rawData[i + 3][k + h]) - 48 * (rawData[i - 2][k + h] - rawData[i + 2][k + h]) + 42 * (rawData[i - 1][k + h] - rawData[i + 1][k + h]));
|
temp[i][h] = std::fabs((rawData[i - 5][k + h] - rawData[i + 5][k + h]) - 8 * (rawData[i - 4][k + h] - rawData[i + 4][k + h]) + 27 * (rawData[i - 3][k + h] - rawData[i + 3][k + h]) - 48 * (rawData[i - 2][k + h] - rawData[i + 2][k + h]) + 42 * (rawData[i - 1][k + h] - rawData[i + 1][k + h]));
|
||||||
}
|
}
|
||||||
@ -68,7 +70,9 @@ void hphd_vertical(const array2D<float> &rawData, float** hpmap, int col_from, i
|
|||||||
STVFU(avg[j][4], avgL2);
|
STVFU(avg[j][4], avgL2);
|
||||||
STVFU(dev[j][4], vmaxf(epsv, (SQRV(LVFU(temp[j - 4][4]) - avgL2) + SQRV(LVFU(temp[j - 3][4]) - avgL2)) + (SQRV(LVFU(temp[j - 2][4]) - avgL2) + SQRV(LVFU(temp[j - 1][4]) - avgL2)) + (SQRV(LVFU(temp[j][4]) - avgL2) + SQRV(LVFU(temp[j + 1][4]) - avgL2)) + (SQRV(LVFU(temp[j + 2][4]) - avgL2) + SQRV(LVFU(temp[j + 3][4]) - avgL2)) + SQRV(LVFU(temp[j + 4][4]) - avgL2)));
|
STVFU(dev[j][4], vmaxf(epsv, (SQRV(LVFU(temp[j - 4][4]) - avgL2) + SQRV(LVFU(temp[j - 3][4]) - avgL2)) + (SQRV(LVFU(temp[j - 2][4]) - avgL2) + SQRV(LVFU(temp[j - 1][4]) - avgL2)) + (SQRV(LVFU(temp[j][4]) - avgL2) + SQRV(LVFU(temp[j + 1][4]) - avgL2)) + (SQRV(LVFU(temp[j + 2][4]) - avgL2) + SQRV(LVFU(temp[j + 3][4]) - avgL2)) + SQRV(LVFU(temp[j + 4][4]) - avgL2)));
|
||||||
#else
|
#else
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp simd
|
#pragma omp simd
|
||||||
|
#endif
|
||||||
for(int h = 0; h < numCols; ++h) {
|
for(int h = 0; h < numCols; ++h) {
|
||||||
const float avgL = ((temp[j - 4][h] + temp[j - 3][h]) + (temp[j - 2][h] + temp[j - 1][h]) + (temp[j][h] + temp[j + 1][h]) + (temp[j + 2][h] + temp[j + 3][h]) + temp[j + 4][h]) / 9.f;
|
const float avgL = ((temp[j - 4][h] + temp[j - 3][h]) + (temp[j - 2][h] + temp[j - 1][h]) + (temp[j][h] + temp[j + 1][h]) + (temp[j + 2][h] + temp[j + 3][h]) + temp[j + 4][h]) / 9.f;
|
||||||
avg[j][h] = avgL;
|
avg[j][h] = avgL;
|
||||||
@ -78,7 +82,9 @@ void hphd_vertical(const array2D<float> &rawData, float** hpmap, int col_from, i
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (int j = 5; j < H - 5; j++) {
|
for (int j = 5; j < H - 5; j++) {
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp simd
|
#pragma omp simd
|
||||||
|
#endif
|
||||||
for(int h = 0; h < numCols; ++h) {
|
for(int h = 0; h < numCols; ++h) {
|
||||||
const float avgL = avg[j - 1][h];
|
const float avgL = avg[j - 1][h];
|
||||||
const float avgR = avg[j + 1][h];
|
const float avgR = avg[j + 1][h];
|
||||||
@ -126,12 +132,16 @@ void hphd_horizontal(const array2D<float> &rawData, float** hpmap, int row_from,
|
|||||||
const vfloat zd8v = F2V(0.8f);
|
const vfloat zd8v = F2V(0.8f);
|
||||||
#endif
|
#endif
|
||||||
for (int i = row_from; i < row_to; i++) {
|
for (int i = row_from; i < row_to; i++) {
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp simd
|
#pragma omp simd
|
||||||
|
#endif
|
||||||
for (int j = 5; j < W - 5; j++) {
|
for (int j = 5; j < W - 5; j++) {
|
||||||
temp[j] = std::fabs((rawData[i][j - 5] - rawData[i][j + 5]) - 8 * (rawData[i][j - 4] - rawData[i][j + 4]) + 27 * (rawData[i][j - 3] - rawData[i][j + 3]) - 48 * (rawData[i][j - 2] - rawData[i][j + 2]) + 42 * (rawData[i][j - 1] - rawData[i][j + 1]));
|
temp[j] = std::fabs((rawData[i][j - 5] - rawData[i][j + 5]) - 8 * (rawData[i][j - 4] - rawData[i][j + 4]) + 27 * (rawData[i][j - 3] - rawData[i][j + 3]) - 48 * (rawData[i][j - 2] - rawData[i][j + 2]) + 42 * (rawData[i][j - 1] - rawData[i][j + 1]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp simd
|
#pragma omp simd
|
||||||
|
#endif
|
||||||
for (int j = 4; j < W - 4; j++) {
|
for (int j = 4; j < W - 4; j++) {
|
||||||
const float avgL = ((temp[j - 4] + temp[j - 3]) + (temp[j - 2] + temp[j - 1]) + (temp[j] + temp[j + 1]) + (temp[j + 2] + temp[j + 3]) + temp[j + 4]) / 9.f;
|
const float avgL = ((temp[j - 4] + temp[j - 3]) + (temp[j - 2] + temp[j - 1]) + (temp[j] + temp[j + 1]) + (temp[j + 2] + temp[j + 3]) + temp[j + 4]) / 9.f;
|
||||||
avg[j] = avgL;
|
avg[j] = avgL;
|
||||||
@ -301,7 +311,7 @@ void RawImageSource::hphd_demosaic ()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
hphd_vertical(hpmap, 0, W, H);
|
hphd_vertical(rawData, hpmap, 0, W, H);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (plistener) {
|
if (plistener) {
|
||||||
@ -322,7 +332,7 @@ void RawImageSource::hphd_demosaic ()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
hphd_horizontal(hpmap, 0, H);
|
hphd_horizontal(rawData, hpmap, 0, H, W);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (plistener) {
|
if (plistener) {
|
||||||
@ -335,7 +345,9 @@ void RawImageSource::hphd_demosaic ()
|
|||||||
plistener->setProgress(0.65);
|
plistener->setProgress(0.65);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
|
#endif
|
||||||
for (int i = 4; i < H - 4; i++) {
|
for (int i = 4; i < H - 4; i++) {
|
||||||
interpolate_row_rb_mul_pp(rawData, red[i], blue[i], green[i - 1], green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1);
|
interpolate_row_rb_mul_pp(rawData, red[i], blue[i], green[i - 1], green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1);
|
||||||
}
|
}
|
||||||
|
@ -108,8 +108,6 @@ void Imagefloat::setScanline (int row, unsigned char* buffer, int bps, unsigned
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
namespace rtengine { extern void filmlike_clip(float *r, float *g, float *b); }
|
|
||||||
|
|
||||||
void Imagefloat::getScanline (int row, unsigned char* buffer, int bps, bool isFloat) const
|
void Imagefloat::getScanline (int row, unsigned char* buffer, int bps, bool isFloat) const
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -441,11 +439,15 @@ void Imagefloat::calcCroppedHistogram(const ProcParams ¶ms, float scale, LUT
|
|||||||
int x1, x2, y1, y2;
|
int x1, x2, y1, y2;
|
||||||
params.crop.mapToResized(width, height, scale, x1, x2, y1, y2);
|
params.crop.mapToResized(width, height, scale, x1, x2, y1, y2);
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel
|
#pragma omp parallel
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
LUTu histThr(65536);
|
LUTu histThr(65536);
|
||||||
histThr.clear();
|
histThr.clear();
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for nowait
|
#pragma omp for nowait
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int y = y1; y < y2; y++) {
|
for (int y = y1; y < y2; y++) {
|
||||||
for (int x = x1; x < x2; x++) {
|
for (int x = x1; x < x2; x++) {
|
||||||
@ -461,7 +463,9 @@ void Imagefloat::calcCroppedHistogram(const ProcParams ¶ms, float scale, LUT
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp critical
|
#pragma omp critical
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
for(int i = 0; i <= 0xffff; i++) {
|
for(int i = 0; i <= 0xffff; i++) {
|
||||||
hist[i] += histThr[i];
|
hist[i] += histThr[i];
|
||||||
|
@ -779,7 +779,6 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
|
|||||||
float **shbuffer = nullptr;
|
float **shbuffer = nullptr;
|
||||||
int sca = 1;
|
int sca = 1;
|
||||||
double huere, chromare, lumare, huerefblu, chromarefblu, lumarefblu, sobelre;
|
double huere, chromare, lumare, huerefblu, chromarefblu, lumarefblu, sobelre;
|
||||||
JaggedArray<float> blend(pW, pH);
|
|
||||||
|
|
||||||
for (int sp = 0; sp < params.locallab.nbspot && sp < (int)params.locallab.spots.size(); sp++) {
|
for (int sp = 0; sp < params.locallab.nbspot && sp < (int)params.locallab.spots.size(); sp++) {
|
||||||
// Set local curves of current spot to LUT
|
// Set local curves of current spot to LUT
|
||||||
@ -1226,9 +1225,13 @@ void ImProcCoordinator::updateLRGBHistograms()
|
|||||||
int x1, y1, x2, y2;
|
int x1, y1, x2, y2;
|
||||||
params.crop.mapToResized(pW, pH, scale, x1, x2, y1, y2);
|
params.crop.mapToResized(pW, pH, scale, x1, x2, y1, y2);
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel sections
|
#pragma omp parallel sections
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp section
|
#pragma omp section
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
histChroma.clear();
|
histChroma.clear();
|
||||||
|
|
||||||
@ -1238,7 +1241,9 @@ void ImProcCoordinator::updateLRGBHistograms()
|
|||||||
histChroma[(int)(sqrtf(SQR(nprevl->a[i][j]) + SQR(nprevl->b[i][j])) / 188.f)]++; //188 = 48000/256
|
histChroma[(int)(sqrtf(SQR(nprevl->a[i][j]) + SQR(nprevl->b[i][j])) / 188.f)]++; //188 = 48000/256
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp section
|
#pragma omp section
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
histLuma.clear();
|
histLuma.clear();
|
||||||
|
|
||||||
@ -1248,7 +1253,9 @@ void ImProcCoordinator::updateLRGBHistograms()
|
|||||||
histLuma[(int)(nprevl->L[i][j] / 128.f)]++;
|
histLuma[(int)(nprevl->L[i][j] / 128.f)]++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp section
|
#pragma omp section
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
histRed.clear();
|
histRed.clear();
|
||||||
histGreen.clear();
|
histGreen.clear();
|
||||||
@ -1480,7 +1487,9 @@ void ImProcCoordinator::saveInputICCReference(const Glib::ustring& fname, bool a
|
|||||||
int cy = params.crop.y;
|
int cy = params.crop.y;
|
||||||
int cw = params.crop.w;
|
int cw = params.crop.w;
|
||||||
int ch = params.crop.h;
|
int ch = params.crop.h;
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int i = cy; i < cy + ch; i++) {
|
for (int i = cy; i < cy + ch; i++) {
|
||||||
for (int j = cx; j < cx + cw; j++) {
|
for (int j = cx; j < cx + cw; j++) {
|
||||||
@ -1495,7 +1504,9 @@ void ImProcCoordinator::saveInputICCReference(const Glib::ustring& fname, bool a
|
|||||||
}
|
}
|
||||||
|
|
||||||
// image may contain out of range samples, clip them to avoid wrap-arounds
|
// image may contain out of range samples, clip them to avoid wrap-arounds
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int i = 0; i < im->getHeight(); i++) {
|
for (int i = 0; i < im->getHeight(); i++) {
|
||||||
for (int j = 0; j < im->getWidth(); j++) {
|
for (int j = 0; j < im->getWidth(); j++) {
|
||||||
|
@ -803,7 +803,9 @@ void ImProcFunctions::ciecam_02float(CieImage* ncie, float adap, int pW, int pwb
|
|||||||
hist16Qthr.clear();
|
hist16Qthr.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for reduction(+:sum)
|
#pragma omp for reduction(+:sum)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
for (int i = 0; i < height; i++)
|
for (int i = 0; i < height; i++)
|
||||||
@ -872,7 +874,9 @@ void ImProcFunctions::ciecam_02float(CieImage* ncie, float adap, int pW, int pwb
|
|||||||
//can be used in case of...
|
//can be used in case of...
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp critical
|
#pragma omp critical
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
if (needJ) {
|
if (needJ) {
|
||||||
hist16J += hist16Jthr;
|
hist16J += hist16Jthr;
|
||||||
@ -1021,7 +1025,9 @@ void ImProcFunctions::ciecam_02float(CieImage* ncie, float adap, int pW, int pwb
|
|||||||
int bufferLength = ((width + 3) / 4) * 4; // bufferLength has to be a multiple of 4
|
int bufferLength = ((width + 3) / 4) * 4; // bufferLength has to be a multiple of 4
|
||||||
#endif
|
#endif
|
||||||
#ifndef _DEBUG
|
#ifndef _DEBUG
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel
|
#pragma omp parallel
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
float minQThr = 10000.f;
|
float minQThr = 10000.f;
|
||||||
@ -1036,7 +1042,9 @@ void ImProcFunctions::ciecam_02float(CieImage* ncie, float adap, int pW, int pwb
|
|||||||
float sbuffer[bufferLength] ALIGNED16;
|
float sbuffer[bufferLength] ALIGNED16;
|
||||||
#endif
|
#endif
|
||||||
#ifndef _DEBUG
|
#ifndef _DEBUG
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for schedule(dynamic, 16)
|
#pragma omp for schedule(dynamic, 16)
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (int i = 0; i < height; i++) {
|
for (int i = 0; i < height; i++) {
|
||||||
@ -1644,7 +1652,9 @@ void ImProcFunctions::ciecam_02float(CieImage* ncie, float adap, int pW, int pwb
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp critical
|
#pragma omp critical
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
if (minQThr < minQ) {
|
if (minQThr < minQ) {
|
||||||
minQ = minQThr;
|
minQ = minQThr;
|
||||||
@ -1757,11 +1767,15 @@ void ImProcFunctions::ciecam_02float(CieImage* ncie, float adap, int pW, int pwb
|
|||||||
|
|
||||||
|
|
||||||
#ifndef _DEBUG
|
#ifndef _DEBUG
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel
|
#pragma omp parallel
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
#ifndef _DEBUG
|
#ifndef _DEBUG
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for schedule(dynamic, 10)
|
#pragma omp for schedule(dynamic, 10)
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (int i = 0; i < height; i++) // update CieImages with new values after sharpening, defringe, contrast by detail level
|
for (int i = 0; i < height; i++) // update CieImages with new values after sharpening, defringe, contrast by detail level
|
||||||
@ -1794,7 +1808,9 @@ void ImProcFunctions::ciecam_02float(CieImage* ncie, float adap, int pW, int pwb
|
|||||||
const float co_e = (pow_F(f_l, 0.25f)) + eps;
|
const float co_e = (pow_F(f_l, 0.25f)) + eps;
|
||||||
|
|
||||||
#ifndef _DEBUG
|
#ifndef _DEBUG
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel
|
#pragma omp parallel
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
#ifdef __SSE2__
|
#ifdef __SSE2__
|
||||||
@ -1808,7 +1824,9 @@ void ImProcFunctions::ciecam_02float(CieImage* ncie, float adap, int pW, int pwb
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef _DEBUG
|
#ifndef _DEBUG
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for schedule(dynamic, 10)
|
#pragma omp for schedule(dynamic, 10)
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (int i = 0; i < height; i++) { // update CIECAM with new values after tone-mapping
|
for (int i = 0; i < height; i++) { // update CIECAM with new values after tone-mapping
|
||||||
@ -4180,7 +4198,9 @@ void ImProcFunctions::luminanceCurve(LabImage* lold, LabImage* lnew, LUTf & curv
|
|||||||
int W = lold->W;
|
int W = lold->W;
|
||||||
int H = lold->H;
|
int H = lold->H;
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for if (multiThread)
|
#pragma omp parallel for if (multiThread)
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int i = 0; i < H; i++)
|
for (int i = 0; i < H; i++)
|
||||||
for (int j = 0; j < W; j++) {
|
for (int j = 0; j < W; j++) {
|
||||||
@ -4445,17 +4465,21 @@ void ImProcFunctions::chromiLuminanceCurve(PipetteBuffer *pipetteBuffer, int pW,
|
|||||||
{wprof[2][0], wprof[2][1], wprof[2][2]}
|
{wprof[2][0], wprof[2][1], wprof[2][2]}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
#pragma omp parallel default(shared) firstprivate(lold, lnew, MunsDebugInfo, pW) if (multiThread)
|
#pragma omp parallel default(shared) firstprivate(lold, lnew, MunsDebugInfo, pW) if (multiThread)
|
||||||
#else
|
#else
|
||||||
#pragma omp parallel if (multiThread)
|
#pragma omp parallel if (multiThread)
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
#ifdef __SSE2__
|
#ifdef __SSE2__
|
||||||
float HHBuffer[W] ALIGNED16;
|
float HHBuffer[W] ALIGNED16;
|
||||||
float CCBuffer[W] ALIGNED16;
|
float CCBuffer[W] ALIGNED16;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for schedule(dynamic, 16)
|
#pragma omp for schedule(dynamic, 16)
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int i = 0; i < H; i++) {
|
for (int i = 0; i < H; i++) {
|
||||||
if (avoidColorShift)
|
if (avoidColorShift)
|
||||||
@ -5200,7 +5224,9 @@ void ImProcFunctions::EPDToneMapCIE(CieImage *ncie, float a_w, float c_, int Wid
|
|||||||
|
|
||||||
EdgePreservingDecomposition epd(Wid, Hei);
|
EdgePreservingDecomposition epd(Wid, Hei);
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int i = 0; i < Hei; i++)
|
for (int i = 0; i < Hei; i++)
|
||||||
for (int j = 0; j < Wid; j++) {
|
for (int j = 0; j < Wid; j++) {
|
||||||
@ -5226,7 +5252,9 @@ void ImProcFunctions::EPDToneMapCIE(CieImage *ncie, float a_w, float c_, int Wid
|
|||||||
//Restore past range, also desaturate a bit per Mantiuk's Color correction for tone mapping.
|
//Restore past range, also desaturate a bit per Mantiuk's Color correction for tone mapping.
|
||||||
float s = (1.0f + 38.7889f) * powf(Compression, 1.5856f) / (1.0f + 38.7889f * powf(Compression, 1.5856f));
|
float s = (1.0f + 38.7889f) * powf(Compression, 1.5856f) / (1.0f + 38.7889f * powf(Compression, 1.5856f));
|
||||||
#ifndef _DEBUG
|
#ifndef _DEBUG
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for schedule(dynamic,10)
|
#pragma omp parallel for schedule(dynamic,10)
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (int i = 0; i < Hei; i++)
|
for (int i = 0; i < Hei; i++)
|
||||||
@ -5414,11 +5442,15 @@ void ImProcFunctions::EPDToneMap(LabImage *lab, unsigned int Iterates, int skip)
|
|||||||
//Due to the taking of logarithms, L must be nonnegative. Further, scale to 0 to 1 using nominal range of L, 0 to 15 bit.
|
//Due to the taking of logarithms, L must be nonnegative. Further, scale to 0 to 1 using nominal range of L, 0 to 15 bit.
|
||||||
float minL = FLT_MAX;
|
float minL = FLT_MAX;
|
||||||
float maxL = 0.f;
|
float maxL = 0.f;
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel
|
#pragma omp parallel
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
float lminL = FLT_MAX;
|
float lminL = FLT_MAX;
|
||||||
float lmaxL = 0.f;
|
float lmaxL = 0.f;
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
|
|
||||||
for (size_t i = 0; i < N; i++) {
|
for (size_t i = 0; i < N; i++) {
|
||||||
if (L[i] < lminL) {
|
if (L[i] < lminL) {
|
||||||
@ -5430,7 +5462,9 @@ void ImProcFunctions::EPDToneMap(LabImage *lab, unsigned int Iterates, int skip)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp critical
|
#pragma omp critical
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
if (lminL < minL) {
|
if (lminL < minL) {
|
||||||
minL = lminL;
|
minL = lminL;
|
||||||
@ -5450,7 +5484,9 @@ void ImProcFunctions::EPDToneMap(LabImage *lab, unsigned int Iterates, int skip)
|
|||||||
maxL = 1.f;
|
maxL = 1.f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
|
#endif
|
||||||
|
|
||||||
for (size_t i = 0; i < N; ++i)
|
for (size_t i = 0; i < N; ++i)
|
||||||
//{L[i] = (L[i] - minL)/32767.0f;
|
//{L[i] = (L[i] - minL)/32767.0f;
|
||||||
|
@ -54,7 +54,9 @@ void ImProcFunctions::Lanczos (const Imagefloat* src, Imagefloat* dst, float sca
|
|||||||
const float sc = min (scale, 1.0f);
|
const float sc = min (scale, 1.0f);
|
||||||
const int support = static_cast<int> (2.0f * a / sc) + 1;
|
const int support = static_cast<int> (2.0f * a / sc) + 1;
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel
|
#pragma omp parallel
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
// storage for precomputed parameters for horisontal interpolation
|
// storage for precomputed parameters for horisontal interpolation
|
||||||
float * wwh = new float[support * dst->getWidth()];
|
float * wwh = new float[support * dst->getWidth()];
|
||||||
@ -97,7 +99,9 @@ void ImProcFunctions::Lanczos (const Imagefloat* src, Imagefloat* dst, float sca
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Phase 2: do actual interpolation
|
// Phase 2: do actual interpolation
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int i = 0; i < dst->getHeight(); i++) {
|
for (int i = 0; i < dst->getHeight(); i++) {
|
||||||
|
|
||||||
|
@ -705,7 +705,9 @@ void ImProcFunctions::transformLuminanceOnly (Imagefloat* original, Imagefloat*
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool darkening = (params->vignetting.amount <= 0.0);
|
bool darkening = (params->vignetting.amount <= 0.0);
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for schedule(dynamic,16) if (multiThread)
|
#pragma omp parallel for schedule(dynamic,16) if (multiThread)
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int y = 0; y < transformed->getHeight(); y++) {
|
for (int y = 0; y < transformed->getHeight(); y++) {
|
||||||
double vig_y_d = applyVignetting ? (double) (y + cy) - vig_h2 : 0.0;
|
double vig_y_d = applyVignetting ? (double) (y + cy) - vig_h2 : 0.0;
|
||||||
@ -817,7 +819,9 @@ void ImProcFunctions::transformGeneral(bool highQuality, Imagefloat *original, I
|
|||||||
#endif
|
#endif
|
||||||
// main cycle
|
// main cycle
|
||||||
bool darkening = (params->vignetting.amount <= 0.0);
|
bool darkening = (params->vignetting.amount <= 0.0);
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for if (multiThread)
|
#pragma omp parallel for if (multiThread)
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int y = 0; y < transformed->getHeight(); y++) {
|
for (int y = 0; y < transformed->getHeight(); y++) {
|
||||||
for (int x = 0; x < transformed->getWidth(); x++) {
|
for (int x = 0; x < transformed->getWidth(); x++) {
|
||||||
@ -964,7 +968,9 @@ void ImProcFunctions::transformLCPCAOnly(Imagefloat *original, Imagefloat *trans
|
|||||||
chTrans[1] = transformed->g.ptrs;
|
chTrans[1] = transformed->g.ptrs;
|
||||||
chTrans[2] = transformed->b.ptrs;
|
chTrans[2] = transformed->b.ptrs;
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for if (multiThread)
|
#pragma omp parallel for if (multiThread)
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int y = 0; y < transformed->getHeight(); y++) {
|
for (int y = 0; y < transformed->getHeight(); y++) {
|
||||||
for (int x = 0; x < transformed->getWidth(); x++) {
|
for (int x = 0; x < transformed->getWidth(); x++) {
|
||||||
|
@ -40,8 +40,6 @@ namespace rtengine
|
|||||||
|
|
||||||
using namespace procparams;
|
using namespace procparams;
|
||||||
|
|
||||||
extern const Settings* settings;
|
|
||||||
|
|
||||||
void fillCurveArrayVib (DiagonalCurve* diagCurve, LUTf &outCurve)
|
void fillCurveArrayVib (DiagonalCurve* diagCurve, LUTf &outCurve)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -170,7 +168,9 @@ void ImProcFunctions::vibrance (LabImage* lab)
|
|||||||
{static_cast<float>(wiprof[2][0]), static_cast<float>(wiprof[2][1]), static_cast<float>(wiprof[2][2])}
|
{static_cast<float>(wiprof[2][0]), static_cast<float>(wiprof[2][1]), static_cast<float>(wiprof[2][2])}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel if (multiThread)
|
#pragma omp parallel if (multiThread)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
|
|
||||||
#ifdef __SSE2__
|
#ifdef __SSE2__
|
||||||
@ -179,7 +179,9 @@ void ImProcFunctions::vibrance (LabImage* lab)
|
|||||||
#endif
|
#endif
|
||||||
float sathue[5], sathue2[4]; // adjust sat in function of hue
|
float sathue[5], sathue2[4]; // adjust sat in function of hue
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for schedule(dynamic, 16)
|
#pragma omp for schedule(dynamic, 16)
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int i = 0; i < height; i++) {
|
for (int i = 0; i < height; i++) {
|
||||||
#ifdef __SSE2__
|
#ifdef __SSE2__
|
||||||
|
@ -107,7 +107,7 @@ IMFILE* fopen (const char* fname)
|
|||||||
void* data = mmap(nullptr, stat_buffer.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
|
void* data = mmap(nullptr, stat_buffer.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
|
||||||
|
|
||||||
if ( data == MAP_FAILED ) {
|
if ( data == MAP_FAILED ) {
|
||||||
printf("no mmap\n");
|
printf("no mmap %s\n", fname);
|
||||||
close(fd);
|
close(fd);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
@ -77,7 +77,9 @@ PreviewImage::PreviewImage (const Glib::ustring &fname, const Glib::ustring &ext
|
|||||||
previewImage = Cairo::ImageSurface::create(Cairo::FORMAT_RGB24, w, h);
|
previewImage = Cairo::ImageSurface::create(Cairo::FORMAT_RGB24, w, h);
|
||||||
previewImage->flush();
|
previewImage->flush();
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
|
#endif
|
||||||
for (unsigned int i = 0; i < (unsigned int)(h); ++i) {
|
for (unsigned int i = 0; i < (unsigned int)(h); ++i) {
|
||||||
const unsigned char *src = data + i * w * 3;
|
const unsigned char *src = data + i * w * 3;
|
||||||
unsigned char *dst = previewImage->get_data() + i * w * 4;
|
unsigned char *dst = previewImage->get_data() + i * w * 4;
|
||||||
@ -119,7 +121,9 @@ PreviewImage::PreviewImage (const Glib::ustring &fname, const Glib::ustring &ext
|
|||||||
rawImage.getImage (wb, TR_NONE, &image, pp, params.toneCurve, params.raw);
|
rawImage.getImage (wb, TR_NONE, &image, pp, params.toneCurve, params.raw);
|
||||||
rtengine::Image8 output(fw, fh);
|
rtengine::Image8 output(fw, fh);
|
||||||
rawImage.convertColorSpace(&image, params.icm, wb);
|
rawImage.convertColorSpace(&image, params.icm, wb);
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for schedule(dynamic, 10)
|
#pragma omp parallel for schedule(dynamic, 10)
|
||||||
|
#endif
|
||||||
for (int i = 0; i < fh; ++i)
|
for (int i = 0; i < fh; ++i)
|
||||||
for (int j = 0; j < fw; ++j) {
|
for (int j = 0; j < fw; ++j) {
|
||||||
image.r(i, j) = Color::gamma2curve[image.r(i, j)];
|
image.r(i, j) = Color::gamma2curve[image.r(i, j)];
|
||||||
@ -139,7 +143,9 @@ PreviewImage::PreviewImage (const Glib::ustring &fname, const Glib::ustring &ext
|
|||||||
previewImage = Cairo::ImageSurface::create(Cairo::FORMAT_RGB24, w, h);
|
previewImage = Cairo::ImageSurface::create(Cairo::FORMAT_RGB24, w, h);
|
||||||
previewImage->flush();
|
previewImage->flush();
|
||||||
|
|
||||||
#pragma omp parallel for
|
#ifdef _OPENMP
|
||||||
|
#pragma omp parallel for
|
||||||
|
#endif
|
||||||
for (unsigned int i = 0; i < (unsigned int)(h); i++) {
|
for (unsigned int i = 0; i < (unsigned int)(h); i++) {
|
||||||
const unsigned char *src = data + i * w * 3;
|
const unsigned char *src = data + i * w * 3;
|
||||||
unsigned char *dst = previewImage->get_data() + i * w * 4;
|
unsigned char *dst = previewImage->get_data() + i * w * 4;
|
||||||
|
@ -129,7 +129,9 @@ void RawImage::get_colorsCoeff(float *pre_mul_, float *scale_mul_, float *cblack
|
|||||||
dsum[FC(1, 0) + 4] += (int)(((W + 1) / 2) * (H / 2));
|
dsum[FC(1, 0) + 4] += (int)(((W + 1) / 2) * (H / 2));
|
||||||
dsum[FC(1, 1) + 4] += (int)((W / 2) * (H / 2));
|
dsum[FC(1, 1) + 4] += (int)((W / 2) * (H / 2));
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel private(val)
|
#pragma omp parallel private(val)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
double dsumthr[8];
|
double dsumthr[8];
|
||||||
memset(dsumthr, 0, sizeof dsumthr);
|
memset(dsumthr, 0, sizeof dsumthr);
|
||||||
@ -144,7 +146,9 @@ void RawImage::get_colorsCoeff(float *pre_mul_, float *scale_mul_, float *cblack
|
|||||||
}
|
}
|
||||||
|
|
||||||
float *tempdata = data[0];
|
float *tempdata = data[0];
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for nowait
|
#pragma omp for nowait
|
||||||
|
#endif
|
||||||
|
|
||||||
for (size_t row = 0; row < H; row += 8) {
|
for (size_t row = 0; row < H; row += 8) {
|
||||||
size_t ymax = row + 8 < H ? row + 8 : H;
|
size_t ymax = row + 8 < H ? row + 8 : H;
|
||||||
@ -178,7 +182,9 @@ skip_block2:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp critical
|
#pragma omp critical
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
for (int c = 0; c < 4; c++) {
|
for (int c = 0; c < 4; c++) {
|
||||||
dsum[c] += dsumthr[c];
|
dsum[c] += dsumthr[c];
|
||||||
@ -196,7 +202,9 @@ skip_block2:
|
|||||||
}
|
}
|
||||||
|
|
||||||
} else if (isXtrans()) {
|
} else if (isXtrans()) {
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel
|
#pragma omp parallel
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
double dsumthr[8];
|
double dsumthr[8];
|
||||||
memset(dsumthr, 0, sizeof dsumthr);
|
memset(dsumthr, 0, sizeof dsumthr);
|
||||||
@ -211,7 +219,9 @@ skip_block2:
|
|||||||
whitefloat[c] = this->get_white(c) - whiteThreshold;
|
whitefloat[c] = this->get_white(c) - whiteThreshold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for nowait
|
#pragma omp for nowait
|
||||||
|
#endif
|
||||||
|
|
||||||
for (size_t row = 0; row < H; row += 8)
|
for (size_t row = 0; row < H; row += 8)
|
||||||
for (size_t col = 0; col < W ; col += 8)
|
for (size_t col = 0; col < W ; col += 8)
|
||||||
@ -241,7 +251,9 @@ skip_block3:
|
|||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp critical
|
#pragma omp critical
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
for (int c = 0; c < 8; c++)
|
for (int c = 0; c < 8; c++)
|
||||||
{
|
{
|
||||||
@ -718,7 +730,9 @@ float** RawImage::compress_image(unsigned int frameNum, bool freeImage)
|
|||||||
|
|
||||||
// copy pixel raw data: the compressed format earns space
|
// copy pixel raw data: the compressed format earns space
|
||||||
if (float_raw_image) {
|
if (float_raw_image) {
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int row = 0; row < height; row++)
|
for (int row = 0; row < height; row++)
|
||||||
for (int col = 0; col < width; col++) {
|
for (int col = 0; col < width; col++) {
|
||||||
@ -728,21 +742,27 @@ float** RawImage::compress_image(unsigned int frameNum, bool freeImage)
|
|||||||
delete [] float_raw_image;
|
delete [] float_raw_image;
|
||||||
float_raw_image = nullptr;
|
float_raw_image = nullptr;
|
||||||
} else if (filters != 0 && !isXtrans()) {
|
} else if (filters != 0 && !isXtrans()) {
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int row = 0; row < height; row++)
|
for (int row = 0; row < height; row++)
|
||||||
for (int col = 0; col < width; col++) {
|
for (int col = 0; col < width; col++) {
|
||||||
this->data[row][col] = image[row * width + col][FC(row, col)];
|
this->data[row][col] = image[row * width + col][FC(row, col)];
|
||||||
}
|
}
|
||||||
} else if (isXtrans()) {
|
} else if (isXtrans()) {
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int row = 0; row < height; row++)
|
for (int row = 0; row < height; row++)
|
||||||
for (int col = 0; col < width; col++) {
|
for (int col = 0; col < width; col++) {
|
||||||
this->data[row][col] = image[row * width + col][XTRANSFC(row, col)];
|
this->data[row][col] = image[row * width + col][XTRANSFC(row, col)];
|
||||||
}
|
}
|
||||||
} else if (colors == 1) {
|
} else if (colors == 1) {
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int row = 0; row < height; row++)
|
for (int row = 0; row < height; row++)
|
||||||
for (int col = 0; col < width; col++) {
|
for (int col = 0; col < width; col++) {
|
||||||
@ -753,8 +773,9 @@ float** RawImage::compress_image(unsigned int frameNum, bool freeImage)
|
|||||||
height -= top_margin;
|
height -= top_margin;
|
||||||
width -= left_margin;
|
width -= left_margin;
|
||||||
}
|
}
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int row = 0; row < height; row++)
|
for (int row = 0; row < height; row++)
|
||||||
for (int col = 0; col < width; col++) {
|
for (int col = 0; col < width; col++) {
|
||||||
|
@ -3418,7 +3418,9 @@ void RawImageSource::cfaboxblur(RawImage *riFlatFile, float* cfablur, int boxH,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp single
|
#pragma omp single
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int col = W - (W % 8); col < W; col++) {
|
for (int col = W - (W % 8); col < W; col++) {
|
||||||
int len = boxH / 2 + 1;
|
int len = boxH / 2 + 1;
|
||||||
|
@ -29,10 +29,6 @@
|
|||||||
#include "rawimagesource.h"
|
#include "rawimagesource.h"
|
||||||
#include "../rtgui/multilangmgr.h"
|
#include "../rtgui/multilangmgr.h"
|
||||||
#include "mytime.h"
|
#include "mytime.h"
|
||||||
#include <iostream>
|
|
||||||
#include <fstream>
|
|
||||||
#include <string>
|
|
||||||
#include "jaggedarray.h"
|
|
||||||
|
|
||||||
|
|
||||||
#undef THREAD_PRIORITY_NORMAL
|
#undef THREAD_PRIORITY_NORMAL
|
||||||
@ -341,13 +337,17 @@ private:
|
|||||||
LUTf gamcurve(65536, 0);
|
LUTf gamcurve(65536, 0);
|
||||||
float gam, gamthresh, gamslope;
|
float gam, gamthresh, gamslope;
|
||||||
ipf.RGB_denoise_infoGamCurve(params.dirpyrDenoise, imgsrc->isRAW(), gamcurve, gam, gamthresh, gamslope);
|
ipf.RGB_denoise_infoGamCurve(params.dirpyrDenoise, imgsrc->isRAW(), gamcurve, gam, gamthresh, gamslope);
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel
|
#pragma omp parallel
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
Imagefloat *origCropPart;//init auto noise
|
Imagefloat *origCropPart;//init auto noise
|
||||||
origCropPart = new Imagefloat(crW, crH); //allocate memory
|
origCropPart = new Imagefloat(crW, crH); //allocate memory
|
||||||
Imagefloat *provicalc = new Imagefloat((crW + 1) / 2, (crH + 1) / 2); //for denoise curves
|
Imagefloat *provicalc = new Imagefloat((crW + 1) / 2, (crH + 1) / 2); //for denoise curves
|
||||||
int skipP = 1;
|
int skipP = 1;
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for schedule(dynamic) collapse(2) nowait
|
#pragma omp for schedule(dynamic) collapse(2) nowait
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int wcr = 0; wcr < numtiles_W; wcr++) {
|
for (int wcr = 0; wcr < numtiles_W; wcr++) {
|
||||||
for (int hcr = 0; hcr < numtiles_H; hcr++) {
|
for (int hcr = 0; hcr < numtiles_H; hcr++) {
|
||||||
@ -563,13 +563,17 @@ private:
|
|||||||
coordH[0] = begH;
|
coordH[0] = begH;
|
||||||
coordH[1] = fh / 2 - crH / 2;
|
coordH[1] = fh / 2 - crH / 2;
|
||||||
coordH[2] = fh - crH - begH;
|
coordH[2] = fh - crH - begH;
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel
|
#pragma omp parallel
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
Imagefloat *origCropPart;//init auto noise
|
Imagefloat *origCropPart;//init auto noise
|
||||||
origCropPart = new Imagefloat(crW, crH); //allocate memory
|
origCropPart = new Imagefloat(crW, crH); //allocate memory
|
||||||
Imagefloat *provicalc = new Imagefloat((crW + 1) / 2, (crH + 1) / 2); //for denoise curves
|
Imagefloat *provicalc = new Imagefloat((crW + 1) / 2, (crH + 1) / 2); //for denoise curves
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for schedule(dynamic) collapse(2) nowait
|
#pragma omp for schedule(dynamic) collapse(2) nowait
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int wcr = 0; wcr <= 2; wcr++) {
|
for (int wcr = 0; wcr <= 2; wcr++) {
|
||||||
for (int hcr = 0; hcr <= 2; hcr++) {
|
for (int hcr = 0; hcr <= 2; hcr++) {
|
||||||
@ -814,7 +818,9 @@ private:
|
|||||||
if (denoiseParams.enabled && (noiseLCurve || noiseCCurve)) {
|
if (denoiseParams.enabled && (noiseLCurve || noiseCCurve)) {
|
||||||
// we only need image reduced to 1/4 here
|
// we only need image reduced to 1/4 here
|
||||||
calclum = new Imagefloat((fw + 1) / 2, (fh + 1) / 2); //for luminance denoise curve
|
calclum = new Imagefloat((fw + 1) / 2, (fh + 1) / 2); //for luminance denoise curve
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int ii = 0; ii < fh; ii += 2) {
|
for (int ii = 0; ii < fh; ii += 2) {
|
||||||
for (int jj = 0; jj < fw; jj += 2) {
|
for (int jj = 0; jj < fw; jj += 2) {
|
||||||
@ -1042,7 +1048,9 @@ private:
|
|||||||
hist16thr[(int)((labView->L[i][j]))]++;
|
hist16thr[(int)((labView->L[i][j]))]++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp critical
|
#pragma omp critical
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
hist16 += hist16thr;
|
hist16 += hist16thr;
|
||||||
}
|
}
|
||||||
@ -1092,7 +1100,6 @@ private:
|
|||||||
|
|
||||||
// int maxspot = 1;
|
// int maxspot = 1;
|
||||||
float** shbuffer = nullptr;
|
float** shbuffer = nullptr;
|
||||||
JaggedArray<float> blend(fw, fh);
|
|
||||||
|
|
||||||
for (int sp = 0; sp < params.locallab.nbspot && sp < (int)params.locallab.spots.size(); sp++) {
|
for (int sp = 0; sp < params.locallab.nbspot && sp < (int)params.locallab.spots.size(); sp++) {
|
||||||
if (params.locallab.spots.at(sp).inverssha) {
|
if (params.locallab.spots.at(sp).inverssha) {
|
||||||
|
@ -187,7 +187,9 @@ void gaussianBlur (const Array2Df& I, Array2Df& L, bool multithread)
|
|||||||
Array2Df T (width, height);
|
Array2Df T (width, height);
|
||||||
|
|
||||||
//--- X blur
|
//--- X blur
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for shared(I, T) if(multithread)
|
#pragma omp parallel for shared(I, T) if(multithread)
|
||||||
|
#endif
|
||||||
|
|
||||||
for ( int y = 0 ; y < height ; y++ ) {
|
for ( int y = 0 ; y < height ; y++ ) {
|
||||||
for ( int x = 1 ; x < width - 1 ; x++ ) {
|
for ( int x = 1 ; x < width - 1 ; x++ ) {
|
||||||
@ -202,7 +204,9 @@ void gaussianBlur (const Array2Df& I, Array2Df& L, bool multithread)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//--- Y blur
|
//--- Y blur
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for if(multithread)
|
#pragma omp parallel for if(multithread)
|
||||||
|
#endif
|
||||||
|
|
||||||
for ( int x = 0 ; x < width - 7 ; x += 8 ) {
|
for ( int x = 0 ; x < width - 7 ; x += 8 ) {
|
||||||
for ( int y = 1 ; y < height - 1 ; y++ ) {
|
for ( int y = 1 ; y < height - 1 ; y++ ) {
|
||||||
@ -279,7 +283,9 @@ float calculateGradients (Array2Df* H, Array2Df* G, int k, bool multithread)
|
|||||||
const float divider = pow ( 2.0f, k + 1 );
|
const float divider = pow ( 2.0f, k + 1 );
|
||||||
double avgGrad = 0.0; // use double precision for large summations
|
double avgGrad = 0.0; // use double precision for large summations
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for reduction(+:avgGrad) if(multithread)
|
#pragma omp parallel for reduction(+:avgGrad) if(multithread)
|
||||||
|
#endif
|
||||||
|
|
||||||
for ( int y = 0 ; y < height ; y++ ) {
|
for ( int y = 0 ; y < height ; y++ ) {
|
||||||
int n = (y == 0 ? 0 : y - 1);
|
int n = (y == 0 ? 0 : y - 1);
|
||||||
@ -354,7 +360,9 @@ void calculateFiMatrix (Array2Df* FI, Array2Df* gradients[],
|
|||||||
|
|
||||||
fi[nlevels - 1] = new Array2Df (width, height);
|
fi[nlevels - 1] = new Array2Df (width, height);
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for shared(fi) if(multithread)
|
#pragma omp parallel for shared(fi) if(multithread)
|
||||||
|
#endif
|
||||||
for ( int k = 0 ; k < width * height ; k++ ) {
|
for ( int k = 0 ; k < width * height ; k++ ) {
|
||||||
(*fi[nlevels - 1]) (k) = 1.0f;
|
(*fi[nlevels - 1]) (k) = 1.0f;
|
||||||
}
|
}
|
||||||
@ -366,7 +374,9 @@ void calculateFiMatrix (Array2Df* FI, Array2Df* gradients[],
|
|||||||
// only apply gradients to levels>=detail_level but at least to the coarsest
|
// only apply gradients to levels>=detail_level but at least to the coarsest
|
||||||
if ((k >= detail_level || k == nlevels - 1) && beta != 1.f) {
|
if ((k >= detail_level || k == nlevels - 1) && beta != 1.f) {
|
||||||
//DEBUG_STR << "calculateFiMatrix: apply gradient to level " << k << endl;
|
//DEBUG_STR << "calculateFiMatrix: apply gradient to level " << k << endl;
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for shared(fi,avgGrad) if(multithread)
|
#pragma omp parallel for shared(fi,avgGrad) if(multithread)
|
||||||
|
#endif
|
||||||
for ( int y = 0; y < height; y++ ) {
|
for ( int y = 0; y < height; y++ ) {
|
||||||
for ( int x = 0; x < width; x++ ) {
|
for ( int x = 0; x < width; x++ ) {
|
||||||
float grad = ((*gradients[k]) (x, y) < 1e-4f) ? 1e-4 : (*gradients[k]) (x, y);
|
float grad = ((*gradients[k]) (x, y) < 1e-4f) ? 1e-4 : (*gradients[k]) (x, y);
|
||||||
@ -455,7 +465,9 @@ void tmo_fattal02 (size_t width,
|
|||||||
// float minLum = Y (0, 0);
|
// float minLum = Y (0, 0);
|
||||||
float maxLum = Y (0, 0);
|
float maxLum = Y (0, 0);
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for reduction(max:maxLum) if(multithread)
|
#pragma omp parallel for reduction(max:maxLum) if(multithread)
|
||||||
|
#endif
|
||||||
|
|
||||||
for ( int i = 0 ; i < size ; i++ ) {
|
for ( int i = 0 ; i < size ; i++ ) {
|
||||||
maxLum = std::max (maxLum, Y (i));
|
maxLum = std::max (maxLum, Y (i));
|
||||||
@ -464,13 +476,17 @@ void tmo_fattal02 (size_t width,
|
|||||||
Array2Df* H = new Array2Df (width, height);
|
Array2Df* H = new Array2Df (width, height);
|
||||||
float temp = 100.f / maxLum;
|
float temp = 100.f / maxLum;
|
||||||
float eps = 1e-4f;
|
float eps = 1e-4f;
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel if(multithread)
|
#pragma omp parallel if(multithread)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
#ifdef __SSE2__
|
#ifdef __SSE2__
|
||||||
vfloat epsv = F2V (eps);
|
vfloat epsv = F2V (eps);
|
||||||
vfloat tempv = F2V (temp);
|
vfloat tempv = F2V (temp);
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for schedule(dynamic,16)
|
#pragma omp for schedule(dynamic,16)
|
||||||
|
#endif
|
||||||
|
|
||||||
for (size_t i = 0 ; i < height ; ++i) {
|
for (size_t i = 0 ; i < height ; ++i) {
|
||||||
size_t j = 0;
|
size_t j = 0;
|
||||||
@ -573,7 +589,9 @@ void tmo_fattal02 (size_t width,
|
|||||||
// boundary conditions, so we need to adjust the assembly of the right hand
|
// boundary conditions, so we need to adjust the assembly of the right hand
|
||||||
// side accordingly (basically fft solver assumes U(-1) = U(1), whereas zero
|
// side accordingly (basically fft solver assumes U(-1) = U(1), whereas zero
|
||||||
// Neumann conditions assume U(-1)=U(0)), see also divergence calculation
|
// Neumann conditions assume U(-1)=U(0)), see also divergence calculation
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for if(multithread)
|
#pragma omp parallel for if(multithread)
|
||||||
|
#endif
|
||||||
|
|
||||||
for ( size_t y = 0 ; y < height ; y++ ) {
|
for ( size_t y = 0 ; y < height ; y++ ) {
|
||||||
// sets index+1 based on the boundary assumption H(N+1)=H(N-1)
|
// sets index+1 based on the boundary assumption H(N+1)=H(N-1)
|
||||||
@ -591,7 +609,9 @@ void tmo_fattal02 (size_t width,
|
|||||||
delete H;
|
delete H;
|
||||||
|
|
||||||
// calculate divergence
|
// calculate divergence
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for if(multithread)
|
#pragma omp parallel for if(multithread)
|
||||||
|
#endif
|
||||||
|
|
||||||
for ( size_t y = 0; y < height; ++y ) {
|
for ( size_t y = 0; y < height; ++y ) {
|
||||||
for ( size_t x = 0; x < width; ++x ) {
|
for ( size_t x = 0; x < width; ++x ) {
|
||||||
@ -626,12 +646,16 @@ void tmo_fattal02 (size_t width,
|
|||||||
delete Gx;
|
delete Gx;
|
||||||
delete FI;
|
delete FI;
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel if(multithread)
|
#pragma omp parallel if(multithread)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
#ifdef __SSE2__
|
#ifdef __SSE2__
|
||||||
vfloat gammav = F2V (gamma);
|
vfloat gammav = F2V (gamma);
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp for schedule(dynamic,16)
|
#pragma omp for schedule(dynamic,16)
|
||||||
|
#endif
|
||||||
|
|
||||||
for (size_t i = 0 ; i < height ; i++) {
|
for (size_t i = 0 ; i < height ; i++) {
|
||||||
size_t j = 0;
|
size_t j = 0;
|
||||||
@ -706,7 +730,9 @@ void transform_ev2normal (Array2Df *A, Array2Df *T, bool multithread)
|
|||||||
|
|
||||||
// the discrete cosine transform is not exactly the transform needed
|
// the discrete cosine transform is not exactly the transform needed
|
||||||
// need to scale input values to get the right transformation
|
// need to scale input values to get the right transformation
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for if(multithread)
|
#pragma omp parallel for if(multithread)
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int y = 1 ; y < height - 1 ; y++ )
|
for (int y = 1 ; y < height - 1 ; y++ )
|
||||||
for (int x = 1 ; x < width - 1 ; x++ ) {
|
for (int x = 1 ; x < width - 1 ; x++ ) {
|
||||||
@ -757,7 +783,9 @@ void transform_normal2ev (Array2Df *A, Array2Df *T, bool multithread)
|
|||||||
|
|
||||||
// need to scale the output matrix to get the right transform
|
// need to scale the output matrix to get the right transform
|
||||||
float factor = (1.0f / ((height - 1) * (width - 1)));
|
float factor = (1.0f / ((height - 1) * (width - 1)));
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for if(multithread)
|
#pragma omp parallel for if(multithread)
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int y = 0 ; y < height ; y++ )
|
for (int y = 0 ; y < height ; y++ )
|
||||||
for (int x = 0 ; x < width ; x++ ) {
|
for (int x = 0 ; x < width ; x++ ) {
|
||||||
@ -876,7 +904,9 @@ void solve_pde_fft (Array2Df *F, Array2Df *U, Array2Df *buf, bool multithread)/*
|
|||||||
std::vector<double> l1 = get_lambda (height);
|
std::vector<double> l1 = get_lambda (height);
|
||||||
std::vector<double> l2 = get_lambda (width);
|
std::vector<double> l2 = get_lambda (width);
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for if(multithread)
|
#pragma omp parallel for if(multithread)
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int y = 0 ; y < height ; y++ ) {
|
for (int y = 0 ; y < height ; y++ ) {
|
||||||
for (int x = 0 ; x < width ; x++ ) {
|
for (int x = 0 ; x < width ; x++ ) {
|
||||||
@ -896,13 +926,17 @@ void solve_pde_fft (Array2Df *F, Array2Df *U, Array2Df *buf, bool multithread)/*
|
|||||||
// (not really needed but good for numerics as we later take exp(U))
|
// (not really needed but good for numerics as we later take exp(U))
|
||||||
//DEBUG_STR << "solve_pde_fft: removing constant from solution" << std::endl;
|
//DEBUG_STR << "solve_pde_fft: removing constant from solution" << std::endl;
|
||||||
float max = 0.f;
|
float max = 0.f;
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for reduction(max:max) if(multithread)
|
#pragma omp parallel for reduction(max:max) if(multithread)
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int i = 0; i < width * height; i++) {
|
for (int i = 0; i < width * height; i++) {
|
||||||
max = std::max (max, (*U) (i));
|
max = std::max (max, (*U) (i));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel for if(multithread)
|
#pragma omp parallel for if(multithread)
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int i = 0; i < width * height; i++) {
|
for (int i = 0; i < width * height; i++) {
|
||||||
(*U) (i) -= max;
|
(*U) (i) -= max;
|
||||||
|
@ -1493,7 +1493,9 @@ void CropWindow::expose (Cairo::RefPtr<Cairo::Context> cr)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
#pragma omp critical
|
#pragma omp critical
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
if(maxthrstdDev_L2 > maxstdDev_L2) {
|
if(maxthrstdDev_L2 > maxstdDev_L2) {
|
||||||
maxstdDev_L2 = maxthrstdDev_L2;
|
maxstdDev_L2 = maxthrstdDev_L2;
|
||||||
|
@ -1522,15 +1522,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited)
|
|||||||
pp->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod = "none";
|
pp->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod = "none";
|
||||||
} else if (qualitycurveMethod->get_active_row_number() == 1) {
|
} else if (qualitycurveMethod->get_active_row_number() == 1) {
|
||||||
pp->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod = "std";
|
pp->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod = "std";
|
||||||
} /* else if (qualitycurveMethod->get_active_row_number() == 2) {
|
}
|
||||||
pp->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod = "enh";
|
|
||||||
} else if (qualitycurveMethod->get_active_row_number() == 3) {
|
|
||||||
pp->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod = "enhsup";
|
|
||||||
} else if (qualitycurveMethod->get_active_row_number() == 4) {
|
|
||||||
pp->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod = "contr";
|
|
||||||
} else if (qualitycurveMethod->get_active_row_number() == 5) {
|
|
||||||
pp->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod = "sob2";
|
|
||||||
}*/
|
|
||||||
|
|
||||||
pp->locallab.spots.at(pp->locallab.selspot).llcurve = llshape->getCurve();
|
pp->locallab.spots.at(pp->locallab.selspot).llcurve = llshape->getCurve();
|
||||||
pp->locallab.spots.at(pp->locallab.selspot).cccurve = ccshape->getCurve();
|
pp->locallab.spots.at(pp->locallab.selspot).cccurve = ccshape->getCurve();
|
||||||
@ -3640,16 +3632,8 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
|
|||||||
qualitycurveMethod->set_active(0);
|
qualitycurveMethod->set_active(0);
|
||||||
} else if (pp->locallab.spots.at(index).qualitycurveMethod == "std") {
|
} else if (pp->locallab.spots.at(index).qualitycurveMethod == "std") {
|
||||||
qualitycurveMethod->set_active(1);
|
qualitycurveMethod->set_active(1);
|
||||||
} /* else if (pp->locallab.spots.at(index).qualitycurveMethod == "enh") {
|
}
|
||||||
qualitycurveMethod->set_active(2);
|
|
||||||
} else if (pp->locallab.spots.at(index).qualitycurveMethod == "enhsup") {
|
|
||||||
qualitycurveMethod->set_active(3);
|
|
||||||
} else if (pp->locallab.spots.at(index).qualitycurveMethod == "contr") {
|
|
||||||
qualitycurveMethod->set_active(4);
|
|
||||||
} else if (pp->locallab.spots.at(index).qualitycurveMethod == "sob2") {
|
|
||||||
qualitycurveMethod->set_active(5);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
llshape->setCurve(pp->locallab.spots.at(index).llcurve);
|
llshape->setCurve(pp->locallab.spots.at(index).llcurve);
|
||||||
ccshape->setCurve(pp->locallab.spots.at(index).cccurve);
|
ccshape->setCurve(pp->locallab.spots.at(index).cccurve);
|
||||||
LHshape->setCurve(pp->locallab.spots.at(index).LHcurve);
|
LHshape->setCurve(pp->locallab.spots.at(index).LHcurve);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user