From 1f80469fb73521afbad511d4018b5acedb96caad Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Wed, 26 Dec 2018 23:16:54 +0100 Subject: [PATCH 01/41] Updated AppData file, closes #5117 - Renamed AppData file to use reverse-DNG scheme. - Updated id to use reverse-DNG scheme. - Added launchable-type. - Added releases. - Add provides. --- ...data.xml => com.rawtherapee.RawTherapee.appdata.xml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) rename rawtherapee.appdata.xml => com.rawtherapee.RawTherapee.appdata.xml (91%) diff --git a/rawtherapee.appdata.xml b/com.rawtherapee.RawTherapee.appdata.xml similarity index 91% rename from rawtherapee.appdata.xml rename to com.rawtherapee.RawTherapee.appdata.xml index 6a15e723a..4f4bf4bed 100644 --- a/rawtherapee.appdata.xml +++ b/com.rawtherapee.RawTherapee.appdata.xml @@ -1,6 +1,6 @@ - rawtherapee.desktop + com.rawtherapee.RawTherapee.desktop RawTherapee An advanced raw photo development program Program pro konverzi a zpracování digitálních raw fotografií @@ -33,6 +33,14 @@ http://rawpedia.rawtherapee.com/ http://rawtherapee.com/ https://discuss.pixls.us/t/localization-how-to-translate-rawtherapee-and-rawpedia/2594 + com.rawtherapee.RawTherapee.desktop + + + + + rawtherapee + rawtherapee-cli + HDR DNG of a misty morning in the countryside From 618a462b9155d6482f5e97450af8030454001785 Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Wed, 26 Dec 2018 23:49:41 +0100 Subject: [PATCH 02/41] Reverted desktop-id --- com.rawtherapee.RawTherapee.appdata.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/com.rawtherapee.RawTherapee.appdata.xml b/com.rawtherapee.RawTherapee.appdata.xml index 4f4bf4bed..2ad130600 100644 --- a/com.rawtherapee.RawTherapee.appdata.xml +++ b/com.rawtherapee.RawTherapee.appdata.xml @@ -33,7 +33,7 @@ http://rawpedia.rawtherapee.com/ http://rawtherapee.com/ https://discuss.pixls.us/t/localization-how-to-translate-rawtherapee-and-rawpedia/2594 - com.rawtherapee.RawTherapee.desktop + rawtherapee.desktop From 9bc361540b6f6986f7f503ad508c5a420485d190 Mon Sep 17 00:00:00 2001 From: TooWaBoo Date: Wed, 23 Jan 2019 22:51:49 +0100 Subject: [PATCH 03/41] Update TWB-Theme / cosmetic changes --- rtdata/themes/TooWaBlue-GTK3-20_.css | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/rtdata/themes/TooWaBlue-GTK3-20_.css b/rtdata/themes/TooWaBlue-GTK3-20_.css index 33017626a..73cc9c58b 100644 --- a/rtdata/themes/TooWaBlue-GTK3-20_.css +++ b/rtdata/themes/TooWaBlue-GTK3-20_.css @@ -2,7 +2,7 @@ This file is part of RawTherapee. Copyright (c) 2016-2018 TooWaBoo - Version 3.00 + Version 3.02 RawTherapee is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -957,10 +957,9 @@ window.csd:not(.fullscreen) #MainNotebook > header.top { padding-right: 0.25em; } -#RightNotebook > stack > :nth-child(1) > * > box, -#RightNotebook > stack > :nth-child(4) > * > box { - padding: 0.5em; - border: 0.083333333333333333em solid @bg-entry-border; +#RightNotebook > stack > scrolledwindow > viewport { + padding: 0 0.5em; + border: 0.083333333333333333em solid @bg-dark-grey; } #PrefNotebook > header { @@ -1061,7 +1060,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top { min-width: 0; padding: 0; } -#FileBrowserQueryToolbar { +#FileBrowserQueryToolbar > viewport > box { margin: 0 0 0.416666666666666666em 0; min-height: 0; min-width: 0; @@ -1646,7 +1645,7 @@ messagedialog .dialog-action-area button:not(:only-child):nth-child(2) { min-width: 1.666666666666666666em;/*x*/ margin: 0; border-radius: 0 0.2em 0.2em 0; - box-shadow: inset 0 0.1em rgba(0, 0, 0, 0.1), inset -0.1em -0.1em rgba(230, 230, 230, 0.09); + box-shadow: inset 0 0.1em rgba(0, 0, 0, 0.1), inset -0.1em -0.1em rgba(230, 230, 230, 0.07); border: 0.083333333333333333em solid @bg-entry-border; background-color: @bg-scale-entry; padding: 0; @@ -1866,19 +1865,17 @@ spinbutton { min-height: 1.666666666666666666em;/*x*/ min-width: 0; border-radius: 0.2em; - box-shadow: inset 0.1em 0.1em rgba(0, 0, 0, 0.1), inset -0.1em -0.1em rgba(230, 230, 230, 0.09); + box-shadow: inset 0.1em 0.1em rgba(0, 0, 0, 0.1), inset -0.1em -0.1em rgba(230, 230, 230, 0.07); border: 0.083333333333333333em solid @bg-entry-border; background-color: @bg-scale-entry; } #FileBrowserQueryToolbar entry, #FileBrowserIconToolbar entry { - min-height: 1.666666666666666666em;/*x*/ - min-width: 0; margin: 0; border-right: none; border-top-right-radius: 0; border-bottom-right-radius: 0; - box-shadow: inset 0.1em 0.1em rgba(0, 0, 0, 0.1), inset 0 -0.1em rgba(230, 230, 230, 0.09); + box-shadow: inset 0.1em 0.1em rgba(0, 0, 0, 0.1), inset 0 -0.1em rgba(230, 230, 230, 0.07); } #FileBrowserIconToolbar box > entry { From a4acc1dca353700ee2960b82cb72d22a9eaf08d9 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Wed, 30 Jan 2019 22:56:44 +0100 Subject: [PATCH 04/41] Speedup for hphd demosaic --- rtengine/demosaic_algos.cc | 241 +++++++++++++++++++------------------ 1 file changed, 126 insertions(+), 115 deletions(-) diff --git a/rtengine/demosaic_algos.cc b/rtengine/demosaic_algos.cc index aa763f01f..5acf87489 100644 --- a/rtengine/demosaic_algos.cc +++ b/rtengine/demosaic_algos.cc @@ -37,7 +37,7 @@ #include "sleef.c" #include "opthelper.h" #include "median.h" -//#define BENCHMARK +#define BENCHMARK #include "StopWatch.h" #ifdef _OPENMP #include @@ -62,88 +62,100 @@ extern const Settings* settings; void RawImageSource::hphd_vertical (float** hpmap, int col_from, int col_to) { - float* temp = new float[max(W, H)]; - float* avg = new float[max(W, H)]; - float* dev = new float[max(W, H)]; +// BENCHFUN + constexpr int numCols = 8; + JaggedArray temp(numCols, H, true); + JaggedArray avg(numCols, H, true); + JaggedArray dev(numCols, H, true); - memset (temp, 0, max(W, H)*sizeof(float)); - memset (avg, 0, max(W, H)*sizeof(float)); - memset (dev, 0, max(W, H)*sizeof(float)); - - for (int k = col_from; k < col_to; k++) { + int k = col_from; + for (; k < col_to - 7; k += numCols) { for (int i = 5; i < H - 5; i++) { - temp[i] = (rawData[i - 5][k] - 8 * rawData[i - 4][k] + 27 * rawData[i - 3][k] - 48 * rawData[i - 2][k] + 42 * rawData[i - 1][k] - - (rawData[i + 5][k] - 8 * rawData[i + 4][k] + 27 * rawData[i + 3][k] - 48 * rawData[i + 2][k] + 42 * rawData[i + 1][k])) / 100.0; - temp[i] = ABS(temp[i]); + #pragma omp simd + 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])); + } } for (int j = 4; j < H - 4; j++) { - 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.0; - avg[j] = avgL; - float devL = ((temp[j - 4] - avgL) * (temp[j - 4] - avgL) + (temp[j - 3] - avgL) * (temp[j - 3] - avgL) + (temp[j - 2] - avgL) * (temp[j - 2] - avgL) + (temp[j - 1] - avgL) * (temp[j - 1] - avgL) + (temp[j] - avgL) * (temp[j] - avgL) + (temp[j + 1] - avgL) * (temp[j + 1] - avgL) + (temp[j + 2] - avgL) * (temp[j + 2] - avgL) + (temp[j + 3] - avgL) * (temp[j + 3] - avgL) + (temp[j + 4] - avgL) * (temp[j + 4] - avgL)) / 9.0; - - if (devL < 0.001) { - devL = 0.001; + #pragma omp simd + 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; + avg[j][h] = avgL; + dev[j][h] = std::max(0.001f, SQR(temp[j - 4][h] - avgL) + SQR(temp[j - 3][h] - avgL) + SQR(temp[j - 2][h] - avgL) + SQR(temp[j - 1][h] - avgL) + SQR(temp[j][h] - avgL) + SQR(temp[j + 1][h] - avgL) + SQR(temp[j + 2][h] - avgL) + SQR(temp[j + 3][h] - avgL) + SQR(temp[j + 4][h] - avgL)); } - - dev[j] = devL; } for (int j = 5; j < H - 5; j++) { - float avgL = avg[j - 1]; - float avgR = avg[j + 1]; - float devL = dev[j - 1]; - float devR = dev[j + 1]; + #pragma omp simd + for(int h = 0; h < numCols; ++h) { + const float avgL = avg[j - 1][h]; + const float avgR = avg[j + 1][h]; + const float devL = dev[j - 1][h]; + const float devR = dev[j + 1][h]; + hpmap[j][k + h] = avgL + (avgR - avgL) * devL / (devL + devR); + } + } + } + for (; k < col_to; k++) { + for (int i = 5; i < H - 5; i++) { + temp[i][0] = std::fabs((rawData[i - 5][k] - rawData[i + 5][k]) - 8 * (rawData[i - 4][k] - rawData[i + 4][k]) + 27 * (rawData[i - 3][k] - rawData[i + 3][k]) - 48 * (rawData[i - 2][k] - rawData[i + 2][k]) + 42 * (rawData[i - 1][k] -rawData[i + 1][k])); + } + + for (int j = 4; j < H - 4; j++) { + const float avgL = (temp[j - 4][0] + temp[j - 3][0] + temp[j - 2][0] + temp[j - 1][0] + temp[j][0] + temp[j + 1][0] + temp[j + 2][0] + temp[j + 3][0] + temp[j + 4][0]) / 9.f; + avg[j][0] = avgL; + dev[j][0] = std::max(0.001f, SQR(temp[j - 4][0] - avgL) + SQR(temp[j - 3][0] - avgL) + SQR(temp[j - 2][0] - avgL) + SQR(temp[j - 1][0] - avgL) + SQR(temp[j][0] - avgL) + SQR(temp[j + 1][0] - avgL) + SQR(temp[j + 2][0] - avgL) + SQR(temp[j + 3][0] - avgL) + SQR(temp[j + 4][0] - avgL)); + } + + for (int j = 5; j < H - 5; j++) { + const float avgL = avg[j - 1][0]; + const float avgR = avg[j + 1][0]; + const float devL = dev[j - 1][0]; + const float devR = dev[j + 1][0]; hpmap[j][k] = avgL + (avgR - avgL) * devL / (devL + devR); } } - delete [] temp; - delete [] avg; - delete [] dev; } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% void RawImageSource::hphd_horizontal (float** hpmap, int row_from, int row_to) { - float* temp = new float[max(W, H)]; - float* avg = new float[max(W, H)]; - float* dev = new float[max(W, H)]; +// BENCHFUN + float* temp = new float[W]; + float* avg = new float[W]; + float* dev = new float[W]; - memset (temp, 0, max(W, H)*sizeof(float)); - memset (avg, 0, max(W, H)*sizeof(float)); - memset (dev, 0, max(W, H)*sizeof(float)); + memset(temp, 0, W * sizeof(float)); + memset(avg, 0, W * sizeof(float)); + memset(dev, 0, W * sizeof(float)); for (int i = row_from; i < row_to; i++) { + #pragma omp simd for (int j = 5; j < W - 5; j++) { - temp[j] = (rawData[i][j - 5] - 8 * rawData[i][j - 4] + 27 * rawData[i][j - 3] - 48 * rawData[i][j - 2] + 42 * rawData[i][j - 1] - - (rawData[i][j + 5] - 8 * rawData[i][j + 4] + 27 * rawData[i][j + 3] - 48 * rawData[i][j + 2] + 42 * rawData[i][j + 1])) / 100; - temp[j] = ABS(temp[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])); } + #pragma omp simd for (int j = 4; j < W - 4; j++) { - 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.0; + 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; - float devL = ((temp[j - 4] - avgL) * (temp[j - 4] - avgL) + (temp[j - 3] - avgL) * (temp[j - 3] - avgL) + (temp[j - 2] - avgL) * (temp[j - 2] - avgL) + (temp[j - 1] - avgL) * (temp[j - 1] - avgL) + (temp[j] - avgL) * (temp[j] - avgL) + (temp[j + 1] - avgL) * (temp[j + 1] - avgL) + (temp[j + 2] - avgL) * (temp[j + 2] - avgL) + (temp[j + 3] - avgL) * (temp[j + 3] - avgL) + (temp[j + 4] - avgL) * (temp[j + 4] - avgL)) / 9.0; - - if (devL < 0.001) { - devL = 0.001; - } - - dev[j] = devL; + dev[j] = std::max(0.001f, SQR(temp[j - 4] - avgL) + SQR(temp[j - 3] - avgL) + SQR(temp[j - 2] - avgL) + SQR(temp[j - 1] - avgL) + SQR(temp[j] - avgL) + SQR(temp[j + 1] - avgL) + SQR(temp[j + 2] - avgL) + SQR(temp[j + 3] - avgL) + SQR(temp[j + 4] - avgL)); } + #pragma omp simd for (int j = 5; j < W - 5; j++) { - float avgL = avg[j - 1]; - float avgR = avg[j + 1]; - float devL = dev[j - 1]; - float devR = dev[j + 1]; - float hpv = avgL + (avgR - avgL) * devL / (devL + devR); + const float avgL = avg[j - 1]; + const float avgR = avg[j + 1]; + const float devL = dev[j - 1]; + const float devR = dev[j + 1]; + const float hpv = avgL + (avgR - avgL) * devL / (devL + devR); - if (hpmap[i][j] < 0.8 * hpv) { + if (hpmap[i][j] < 0.8f * hpv) { hpmap[i][j] = 2; - } else if (hpv < 0.8 * hpmap[i][j]) { + } else if (hpv < 0.8f * hpmap[i][j]) { hpmap[i][j] = 1; } else { hpmap[i][j] = 0; @@ -160,8 +172,11 @@ void RawImageSource::hphd_horizontal (float** hpmap, int row_from, int row_to) void RawImageSource::hphd_green (float** hpmap) { +// BENCHFUN + + constexpr float eps = 0.001f; #ifdef _OPENMP - #pragma omp parallel for + #pragma omp parallel for schedule(dynamic, 16) #endif for (int i = 3; i < H - 3; i++) { @@ -170,81 +185,81 @@ void RawImageSource::hphd_green (float** hpmap) green[i][j] = rawData[i][j]; } else { if (hpmap[i][j] == 1) { - int g2 = rawData[i][j + 1] + ((rawData[i][j] - rawData[i][j + 2]) / 2); - int g4 = rawData[i][j - 1] + ((rawData[i][j] - rawData[i][j - 2]) / 2); + const float g2 = rawData[i][j + 1] + (rawData[i][j] - rawData[i][j + 2]) * 0.5f; + const float g4 = rawData[i][j - 1] + (rawData[i][j] - rawData[i][j - 2]) * 0.5f; - int dx = rawData[i][j + 1] - rawData[i][j - 1]; - int d1 = rawData[i][j + 3] - rawData[i][j + 1]; - int d2 = rawData[i][j + 2] - rawData[i][j]; - int d3 = (rawData[i - 1][j + 2] - rawData[i - 1][j]) / 2; - int d4 = (rawData[i + 1][j + 2] - rawData[i + 1][j]) / 2; + const float dx = eps + std::fabs(rawData[i][j + 1] - rawData[i][j - 1]); + float d1 = rawData[i][j + 3] - rawData[i][j + 1]; + float d2 = rawData[i][j + 2] - rawData[i][j]; + float d3 = rawData[i - 1][j + 2] - rawData[i - 1][j]; + float d4 = rawData[i + 1][j + 2] - rawData[i + 1][j]; - double e2 = 1.0 / (1.0 + ABS(dx) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4)); + const float e2 = 1.f / (dx + std::fabs(d1) + std::fabs(d2) + (std::fabs(d3) + std::fabs(d4)) * 0.5f); d1 = rawData[i][j - 3] - rawData[i][j - 1]; d2 = rawData[i][j - 2] - rawData[i][j]; - d3 = (rawData[i - 1][j - 2] - rawData[i - 1][j]) / 2; - d4 = (rawData[i + 1][j - 2] - rawData[i + 1][j]) / 2; + d3 = rawData[i - 1][j - 2] - rawData[i - 1][j]; + d4 = rawData[i + 1][j - 2] - rawData[i + 1][j]; - double e4 = 1.0 / (1.0 + ABS(dx) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4)); + const float e4 = 1.f / (dx + std::fabs(d1) + std::fabs(d2) + (std::fabs(d3) + std::fabs(d4)) * 0.5f); green[i][j] = (e2 * g2 + e4 * g4) / (e2 + e4); } else if (hpmap[i][j] == 2) { - int g1 = rawData[i - 1][j] + ((rawData[i][j] - rawData[i - 2][j]) / 2); - int g3 = rawData[i + 1][j] + ((rawData[i][j] - rawData[i + 2][j]) / 2); + const float g1 = rawData[i - 1][j] + (rawData[i][j] - rawData[i - 2][j]) * 0.5f; + const float g3 = rawData[i + 1][j] + (rawData[i][j] - rawData[i + 2][j]) * 0.5f; - int dy = rawData[i + 1][j] - rawData[i - 1][j]; - int d1 = rawData[i - 1][j] - rawData[i - 3][j]; - int d2 = rawData[i][j] - rawData[i - 2][j]; - int d3 = (rawData[i][j - 1] - rawData[i - 2][j - 1]) / 2; - int d4 = (rawData[i][j + 1] - rawData[i - 2][j + 1]) / 2; + const float dy = eps + std::fabs(rawData[i + 1][j] - rawData[i - 1][j]); + float d1 = rawData[i - 1][j] - rawData[i - 3][j]; + float d2 = rawData[i][j] - rawData[i - 2][j]; + float d3 = rawData[i][j - 1] - rawData[i - 2][j - 1]; + float d4 = rawData[i][j + 1] - rawData[i - 2][j + 1]; - double e1 = 1.0 / (1.0 + ABS(dy) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4)); + const float e1 = 1.f / (dy + std::fabs(d1) + std::fabs(d2) + (std::fabs(d3) + std::fabs(d4)) * 0.5f); d1 = rawData[i + 1][j] - rawData[i + 3][j]; d2 = rawData[i][j] - rawData[i + 2][j]; - d3 = (rawData[i][j - 1] - rawData[i + 2][j - 1]) / 2; - d4 = (rawData[i][j + 1] - rawData[i + 2][j + 1]) / 2; + d3 = rawData[i][j - 1] - rawData[i + 2][j - 1]; + d4 = rawData[i][j + 1] - rawData[i + 2][j + 1]; - double e3 = 1.0 / (1.0 + ABS(dy) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4)); + const float e3 = 1.f / (dy + std::fabs(d1) + std::fabs(d2) + (std::fabs(d3) + std::fabs(d4)) * 0.5f); green[i][j] = (e1 * g1 + e3 * g3) / (e1 + e3); } else { - int g1 = rawData[i - 1][j] + ((rawData[i][j] - rawData[i - 2][j]) / 2); - int g2 = rawData[i][j + 1] + ((rawData[i][j] - rawData[i][j + 2]) / 2); - int g3 = rawData[i + 1][j] + ((rawData[i][j] - rawData[i + 2][j]) / 2); - int g4 = rawData[i][j - 1] + ((rawData[i][j] - rawData[i][j - 2]) / 2); + const float g1 = rawData[i - 1][j] + (rawData[i][j] - rawData[i - 2][j]) * 0.5f; + const float g2 = rawData[i][j + 1] + (rawData[i][j] - rawData[i][j + 2]) * 0.5f; + const float g3 = rawData[i + 1][j] + (rawData[i][j] - rawData[i + 2][j]) * 0.5f; + const float g4 = rawData[i][j - 1] + (rawData[i][j] - rawData[i][j - 2]) * 0.5f; - int dx = rawData[i][j + 1] - rawData[i][j - 1]; - int dy = rawData[i + 1][j] - rawData[i - 1][j]; + const float dx = eps + std::fabs(rawData[i][j + 1] - rawData[i][j - 1]); + const float dy = eps + std::fabs(rawData[i + 1][j] - rawData[i - 1][j]); - int d1 = rawData[i - 1][j] - rawData[i - 3][j]; - int d2 = rawData[i][j] - rawData[i - 2][j]; - int d3 = (rawData[i][j - 1] - rawData[i - 2][j - 1]) / 2; - int d4 = (rawData[i][j + 1] - rawData[i - 2][j + 1]) / 2; + float d1 = rawData[i - 1][j] - rawData[i - 3][j]; + float d2 = rawData[i][j] - rawData[i - 2][j]; + float d3 = rawData[i][j - 1] - rawData[i - 2][j - 1]; + float d4 = rawData[i][j + 1] - rawData[i - 2][j + 1]; - double e1 = 1.0 / (1.0 + ABS(dy) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4)); + const float e1 = 1.f / (dy + std::fabs(d1) + std::fabs(d2) + (std::fabs(d3) + std::fabs(d4)) * 0.5f); d1 = rawData[i][j + 3] - rawData[i][j + 1]; d2 = rawData[i][j + 2] - rawData[i][j]; - d3 = (rawData[i - 1][j + 2] - rawData[i - 1][j]) / 2; - d4 = (rawData[i + 1][j + 2] - rawData[i + 1][j]) / 2; + d3 = rawData[i - 1][j + 2] - rawData[i - 1][j]; + d4 = rawData[i + 1][j + 2] - rawData[i + 1][j]; - double e2 = 1.0 / (1.0 + ABS(dx) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4)); + const float e2 = 1.f / (dx + std::fabs(d1) + std::fabs(d2) + (std::fabs(d3) + std::fabs(d4)) * 0.5f); d1 = rawData[i + 1][j] - rawData[i + 3][j]; d2 = rawData[i][j] - rawData[i + 2][j]; - d3 = (rawData[i][j - 1] - rawData[i + 2][j - 1]) / 2; - d4 = (rawData[i][j + 1] - rawData[i + 2][j + 1]) / 2; + d3 = rawData[i][j - 1] - rawData[i + 2][j - 1]; + d4 = rawData[i][j + 1] - rawData[i + 2][j + 1]; - double e3 = 1.0 / (1.0 + ABS(dy) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4)); + const float e3 = 1.f / (dy + std::fabs(d1) + std::fabs(d2) + (std::fabs(d3) + std::fabs(d4)) * 0.5f); d1 = rawData[i][j - 3] - rawData[i][j - 1]; d2 = rawData[i][j - 2] - rawData[i][j]; - d3 = (rawData[i - 1][j - 2] - rawData[i - 1][j]) / 2; - d4 = (rawData[i + 1][j - 2] - rawData[i + 1][j]) / 2; + d3 = rawData[i - 1][j - 2] - rawData[i - 1][j]; + d4 = rawData[i + 1][j - 2] - rawData[i + 1][j]; - double e4 = 1.0 / (1.0 + ABS(dx) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4)); + const float e4 = 1.f / (dx + std::fabs(d1) + std::fabs(d2) + (std::fabs(d3) + std::fabs(d4)) * 0.5f); green[i][j] = (e1 * g1 + e2 * g2 + e3 * g3 + e4 * g4) / (e1 + e2 + e3 + e4); } @@ -257,12 +272,13 @@ void RawImageSource::hphd_green (float** hpmap) void RawImageSource::hphd_demosaic () { + BENCHFUN if (plistener) { - plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::HPHD))); - plistener->setProgress (0.0); + plistener->setProgressStr(Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::HPHD))); + plistener->setProgress(0.0); } - JaggedArray hpmap (W, H, true); + JaggedArray hpmap(W, H, true); #ifdef _OPENMP #pragma omp parallel @@ -272,17 +288,17 @@ void RawImageSource::hphd_demosaic () int blk = W / nthreads; if (tid < nthreads - 1) { - hphd_vertical (hpmap, tid * blk, (tid + 1)*blk); + hphd_vertical(hpmap, tid * blk, (tid + 1)*blk); } else { - hphd_vertical (hpmap, tid * blk, W); + hphd_vertical(hpmap, tid * blk, W); } } #else - hphd_vertical (hpmap, 0, W); + hphd_vertical(hpmap, 0, W); #endif if (plistener) { - plistener->setProgress (0.33); + plistener->setProgress(0.33); } #ifdef _OPENMP @@ -293,35 +309,30 @@ void RawImageSource::hphd_demosaic () int blk = H / nthreads; if (tid < nthreads - 1) { - hphd_horizontal (hpmap, tid * blk, (tid + 1)*blk); + hphd_horizontal(hpmap, tid * blk, (tid + 1)*blk); } else { - hphd_horizontal (hpmap, tid * blk, H); + hphd_horizontal(hpmap, tid * blk, H); } } #else - hphd_horizontal (hpmap, 0, H); + hphd_horizontal(hpmap, 0, H); #endif - hphd_green (hpmap); + hphd_green(hpmap); if (plistener) { - plistener->setProgress (0.66); + plistener->setProgress(0.66); } - for (int i = 0; i < H; i++) { - 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); - } else if (i == H - 1) { - interpolate_row_rb_mul_pp (rawData, red[i], blue[i], green[i - 1], green[i], nullptr, i, 1.0, 1.0, 1.0, 0, W, 1); - } else { - 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); - } + #pragma omp parallel for + 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); } border_interpolate2(W, H, 4, rawData, red, green, blue); if (plistener) { - plistener->setProgress (1.0); + plistener->setProgress(1.0); } } From ac152ac423a779f0c9b4406527140ea71cc4f062 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Thu, 31 Jan 2019 22:20:23 +0100 Subject: [PATCH 05/41] hphd demosaic: small speedup and own compilation unit, #5159 --- rtengine/CMakeLists.txt | 1 + rtengine/demosaic_algos.cc | 283 ---------------------------- rtengine/hphd_demosaic_RT.cc | 352 +++++++++++++++++++++++++++++++++++ rtengine/rawimagesource.h | 3 - 4 files changed, 353 insertions(+), 286 deletions(-) create mode 100644 rtengine/hphd_demosaic_RT.cc diff --git a/rtengine/CMakeLists.txt b/rtengine/CMakeLists.txt index 4ffad24a1..cf3d8c8b6 100644 --- a/rtengine/CMakeLists.txt +++ b/rtengine/CMakeLists.txt @@ -63,6 +63,7 @@ set(RTENGINESOURCEFILES gauss.cc green_equil_RT.cc hilite_recon.cc + hphd_demosaic_RT.cc iccjpeg.cc iccstore.cc icons.cc diff --git a/rtengine/demosaic_algos.cc b/rtengine/demosaic_algos.cc index 5acf87489..a4d896eec 100644 --- a/rtengine/demosaic_algos.cc +++ b/rtengine/demosaic_algos.cc @@ -20,16 +20,9 @@ #include #include "rawimagesource.h" -#include "rawimagesource_i.h" -#include "jaggedarray.h" #include "rawimage.h" #include "mytime.h" -#include "iccmatrices.h" -#include "iccstore.h" #include "image8.h" -#include "curves.h" -#include "dfmanager.h" -#include "slicer.h" #include "rt_math.h" #include "color.h" #include "../rtgui/multilangmgr.h" @@ -60,282 +53,6 @@ extern const Settings* settings; #define x00625(a) xdivf(a, 4) #define x0125(a) xdivf(a, 3) -void RawImageSource::hphd_vertical (float** hpmap, int col_from, int col_to) -{ -// BENCHFUN - constexpr int numCols = 8; - JaggedArray temp(numCols, H, true); - JaggedArray avg(numCols, H, true); - JaggedArray dev(numCols, H, true); - - int k = col_from; - for (; k < col_to - 7; k += numCols) { - for (int i = 5; i < H - 5; i++) { - #pragma omp simd - 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])); - } - } - - for (int j = 4; j < H - 4; j++) { - #pragma omp simd - 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; - avg[j][h] = avgL; - dev[j][h] = std::max(0.001f, SQR(temp[j - 4][h] - avgL) + SQR(temp[j - 3][h] - avgL) + SQR(temp[j - 2][h] - avgL) + SQR(temp[j - 1][h] - avgL) + SQR(temp[j][h] - avgL) + SQR(temp[j + 1][h] - avgL) + SQR(temp[j + 2][h] - avgL) + SQR(temp[j + 3][h] - avgL) + SQR(temp[j + 4][h] - avgL)); - } - } - - for (int j = 5; j < H - 5; j++) { - #pragma omp simd - for(int h = 0; h < numCols; ++h) { - const float avgL = avg[j - 1][h]; - const float avgR = avg[j + 1][h]; - const float devL = dev[j - 1][h]; - const float devR = dev[j + 1][h]; - hpmap[j][k + h] = avgL + (avgR - avgL) * devL / (devL + devR); - } - } - } - for (; k < col_to; k++) { - for (int i = 5; i < H - 5; i++) { - temp[i][0] = std::fabs((rawData[i - 5][k] - rawData[i + 5][k]) - 8 * (rawData[i - 4][k] - rawData[i + 4][k]) + 27 * (rawData[i - 3][k] - rawData[i + 3][k]) - 48 * (rawData[i - 2][k] - rawData[i + 2][k]) + 42 * (rawData[i - 1][k] -rawData[i + 1][k])); - } - - for (int j = 4; j < H - 4; j++) { - const float avgL = (temp[j - 4][0] + temp[j - 3][0] + temp[j - 2][0] + temp[j - 1][0] + temp[j][0] + temp[j + 1][0] + temp[j + 2][0] + temp[j + 3][0] + temp[j + 4][0]) / 9.f; - avg[j][0] = avgL; - dev[j][0] = std::max(0.001f, SQR(temp[j - 4][0] - avgL) + SQR(temp[j - 3][0] - avgL) + SQR(temp[j - 2][0] - avgL) + SQR(temp[j - 1][0] - avgL) + SQR(temp[j][0] - avgL) + SQR(temp[j + 1][0] - avgL) + SQR(temp[j + 2][0] - avgL) + SQR(temp[j + 3][0] - avgL) + SQR(temp[j + 4][0] - avgL)); - } - - for (int j = 5; j < H - 5; j++) { - const float avgL = avg[j - 1][0]; - const float avgR = avg[j + 1][0]; - const float devL = dev[j - 1][0]; - const float devR = dev[j + 1][0]; - hpmap[j][k] = avgL + (avgR - avgL) * devL / (devL + devR); - } - } - -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -void RawImageSource::hphd_horizontal (float** hpmap, int row_from, int row_to) -{ -// BENCHFUN - float* temp = new float[W]; - float* avg = new float[W]; - float* dev = new float[W]; - - memset(temp, 0, W * sizeof(float)); - memset(avg, 0, W * sizeof(float)); - memset(dev, 0, W * sizeof(float)); - - for (int i = row_from; i < row_to; i++) { - #pragma omp simd - 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])); - } - - #pragma omp simd - 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; - avg[j] = avgL; - dev[j] = std::max(0.001f, SQR(temp[j - 4] - avgL) + SQR(temp[j - 3] - avgL) + SQR(temp[j - 2] - avgL) + SQR(temp[j - 1] - avgL) + SQR(temp[j] - avgL) + SQR(temp[j + 1] - avgL) + SQR(temp[j + 2] - avgL) + SQR(temp[j + 3] - avgL) + SQR(temp[j + 4] - avgL)); - } - - #pragma omp simd - for (int j = 5; j < W - 5; j++) { - const float avgL = avg[j - 1]; - const float avgR = avg[j + 1]; - const float devL = dev[j - 1]; - const float devR = dev[j + 1]; - const float hpv = avgL + (avgR - avgL) * devL / (devL + devR); - - if (hpmap[i][j] < 0.8f * hpv) { - hpmap[i][j] = 2; - } else if (hpv < 0.8f * hpmap[i][j]) { - hpmap[i][j] = 1; - } else { - hpmap[i][j] = 0; - } - } - } - - delete [] temp; - delete [] avg; - delete [] dev; -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -void RawImageSource::hphd_green (float** hpmap) -{ -// BENCHFUN - - constexpr float eps = 0.001f; -#ifdef _OPENMP - #pragma omp parallel for schedule(dynamic, 16) -#endif - - for (int i = 3; i < H - 3; i++) { - for (int j = 3; j < W - 3; j++) { - if (ri->ISGREEN(i, j)) { - green[i][j] = rawData[i][j]; - } else { - if (hpmap[i][j] == 1) { - const float g2 = rawData[i][j + 1] + (rawData[i][j] - rawData[i][j + 2]) * 0.5f; - const float g4 = rawData[i][j - 1] + (rawData[i][j] - rawData[i][j - 2]) * 0.5f; - - const float dx = eps + std::fabs(rawData[i][j + 1] - rawData[i][j - 1]); - float d1 = rawData[i][j + 3] - rawData[i][j + 1]; - float d2 = rawData[i][j + 2] - rawData[i][j]; - float d3 = rawData[i - 1][j + 2] - rawData[i - 1][j]; - float d4 = rawData[i + 1][j + 2] - rawData[i + 1][j]; - - const float e2 = 1.f / (dx + std::fabs(d1) + std::fabs(d2) + (std::fabs(d3) + std::fabs(d4)) * 0.5f); - - d1 = rawData[i][j - 3] - rawData[i][j - 1]; - d2 = rawData[i][j - 2] - rawData[i][j]; - d3 = rawData[i - 1][j - 2] - rawData[i - 1][j]; - d4 = rawData[i + 1][j - 2] - rawData[i + 1][j]; - - const float e4 = 1.f / (dx + std::fabs(d1) + std::fabs(d2) + (std::fabs(d3) + std::fabs(d4)) * 0.5f); - - green[i][j] = (e2 * g2 + e4 * g4) / (e2 + e4); - } else if (hpmap[i][j] == 2) { - const float g1 = rawData[i - 1][j] + (rawData[i][j] - rawData[i - 2][j]) * 0.5f; - const float g3 = rawData[i + 1][j] + (rawData[i][j] - rawData[i + 2][j]) * 0.5f; - - const float dy = eps + std::fabs(rawData[i + 1][j] - rawData[i - 1][j]); - float d1 = rawData[i - 1][j] - rawData[i - 3][j]; - float d2 = rawData[i][j] - rawData[i - 2][j]; - float d3 = rawData[i][j - 1] - rawData[i - 2][j - 1]; - float d4 = rawData[i][j + 1] - rawData[i - 2][j + 1]; - - const float e1 = 1.f / (dy + std::fabs(d1) + std::fabs(d2) + (std::fabs(d3) + std::fabs(d4)) * 0.5f); - - d1 = rawData[i + 1][j] - rawData[i + 3][j]; - d2 = rawData[i][j] - rawData[i + 2][j]; - d3 = rawData[i][j - 1] - rawData[i + 2][j - 1]; - d4 = rawData[i][j + 1] - rawData[i + 2][j + 1]; - - const float e3 = 1.f / (dy + std::fabs(d1) + std::fabs(d2) + (std::fabs(d3) + std::fabs(d4)) * 0.5f); - - green[i][j] = (e1 * g1 + e3 * g3) / (e1 + e3); - } else { - const float g1 = rawData[i - 1][j] + (rawData[i][j] - rawData[i - 2][j]) * 0.5f; - const float g2 = rawData[i][j + 1] + (rawData[i][j] - rawData[i][j + 2]) * 0.5f; - const float g3 = rawData[i + 1][j] + (rawData[i][j] - rawData[i + 2][j]) * 0.5f; - const float g4 = rawData[i][j - 1] + (rawData[i][j] - rawData[i][j - 2]) * 0.5f; - - const float dx = eps + std::fabs(rawData[i][j + 1] - rawData[i][j - 1]); - const float dy = eps + std::fabs(rawData[i + 1][j] - rawData[i - 1][j]); - - float d1 = rawData[i - 1][j] - rawData[i - 3][j]; - float d2 = rawData[i][j] - rawData[i - 2][j]; - float d3 = rawData[i][j - 1] - rawData[i - 2][j - 1]; - float d4 = rawData[i][j + 1] - rawData[i - 2][j + 1]; - - const float e1 = 1.f / (dy + std::fabs(d1) + std::fabs(d2) + (std::fabs(d3) + std::fabs(d4)) * 0.5f); - - d1 = rawData[i][j + 3] - rawData[i][j + 1]; - d2 = rawData[i][j + 2] - rawData[i][j]; - d3 = rawData[i - 1][j + 2] - rawData[i - 1][j]; - d4 = rawData[i + 1][j + 2] - rawData[i + 1][j]; - - const float e2 = 1.f / (dx + std::fabs(d1) + std::fabs(d2) + (std::fabs(d3) + std::fabs(d4)) * 0.5f); - - d1 = rawData[i + 1][j] - rawData[i + 3][j]; - d2 = rawData[i][j] - rawData[i + 2][j]; - d3 = rawData[i][j - 1] - rawData[i + 2][j - 1]; - d4 = rawData[i][j + 1] - rawData[i + 2][j + 1]; - - const float e3 = 1.f / (dy + std::fabs(d1) + std::fabs(d2) + (std::fabs(d3) + std::fabs(d4)) * 0.5f); - - d1 = rawData[i][j - 3] - rawData[i][j - 1]; - d2 = rawData[i][j - 2] - rawData[i][j]; - d3 = rawData[i - 1][j - 2] - rawData[i - 1][j]; - d4 = rawData[i + 1][j - 2] - rawData[i + 1][j]; - - const float e4 = 1.f / (dx + std::fabs(d1) + std::fabs(d2) + (std::fabs(d3) + std::fabs(d4)) * 0.5f); - - green[i][j] = (e1 * g1 + e2 * g2 + e3 * g3 + e4 * g4) / (e1 + e2 + e3 + e4); - } - } - } - } -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -void RawImageSource::hphd_demosaic () -{ - BENCHFUN - if (plistener) { - plistener->setProgressStr(Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::HPHD))); - plistener->setProgress(0.0); - } - - JaggedArray hpmap(W, H, true); - -#ifdef _OPENMP - #pragma omp parallel - { - int tid = omp_get_thread_num(); - int nthreads = omp_get_num_threads(); - int blk = W / nthreads; - - if (tid < nthreads - 1) { - hphd_vertical(hpmap, tid * blk, (tid + 1)*blk); - } else { - hphd_vertical(hpmap, tid * blk, W); - } - } -#else - hphd_vertical(hpmap, 0, W); -#endif - - if (plistener) { - plistener->setProgress(0.33); - } - -#ifdef _OPENMP - #pragma omp parallel - { - int tid = omp_get_thread_num(); - int nthreads = omp_get_num_threads(); - int blk = H / nthreads; - - if (tid < nthreads - 1) { - hphd_horizontal(hpmap, tid * blk, (tid + 1)*blk); - } else { - hphd_horizontal(hpmap, tid * blk, H); - } - } -#else - hphd_horizontal(hpmap, 0, H); -#endif - - hphd_green(hpmap); - - if (plistener) { - plistener->setProgress(0.66); - } - - #pragma omp parallel for - 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); - } - - border_interpolate2(W, H, 4, rawData, red, green, blue); - - if (plistener) { - plistener->setProgress(1.0); - } -} - #undef fc #define fc(row,col) \ (ri->get_filters() >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3) diff --git a/rtengine/hphd_demosaic_RT.cc b/rtengine/hphd_demosaic_RT.cc new file mode 100644 index 000000000..d5a21a4d0 --- /dev/null +++ b/rtengine/hphd_demosaic_RT.cc @@ -0,0 +1,352 @@ +/* + * This file is part of RawTherapee. + * + * Copyright (c) 2004-2019 Gabor Horvath + * + * RawTherapee is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * RawTherapee is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with RawTherapee. If not, see . + */ +#include + +#include "rawimagesource.h" +#include "rawimagesource_i.h" +#include "jaggedarray.h" +#include "rawimage.h" +#include "rt_math.h" +#include "../rtgui/multilangmgr.h" +#include "opthelper.h" +#define BENCHMARK +#include "StopWatch.h" +#ifdef _OPENMP +#include +#endif + +using namespace std; +using namespace rtengine; + +namespace { + +void hphd_vertical(const array2D &rawData, float** hpmap, int col_from, int col_to, int H) +{ + + // process 'numCols' columns for better usage of L1 cpu cache (especially faster for large values of H) + constexpr int numCols = 8; + JaggedArray temp(numCols, H, true); + JaggedArray avg(numCols, H, true); + JaggedArray dev(numCols, H, true); + + int k = col_from; +#ifdef __SSE2__ + const vfloat ninev = F2V(9.f); + const vfloat epsv = F2V(0.001f); +#endif + for (; k < col_to - 7; k += numCols) { + for (int i = 5; i < H - 5; i++) { + #pragma omp simd + 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])); + } + } + + for (int j = 4; j < H - 4; j++) { +#ifdef __SSE2__ + // faster than #pragma omp simd... + const vfloat avgL1 = ((LVFU(temp[j - 4][0]) + LVFU(temp[j - 3][0])) + (LVFU(temp[j - 2][0]) + LVFU(temp[j - 1][0])) + (LVFU(temp[j][0]) + LVFU(temp[j + 1][0])) + (LVFU(temp[j + 2][0]) + LVFU(temp[j + 3][0])) + LVFU(temp[j + 4][0])) / ninev; + STVFU(avg[j][0], avgL1); + STVFU(dev[j][0], vmaxf(epsv, (SQRV(LVFU(temp[j - 4][0]) - avgL1) + SQRV(LVFU(temp[j - 3][0]) - avgL1)) + (SQRV(LVFU(temp[j - 2][0]) - avgL1) + SQRV(LVFU(temp[j - 1][0]) - avgL1)) + (SQRV(LVFU(temp[j][0]) - avgL1) + SQRV(LVFU(temp[j + 1][0]) - avgL1)) + (SQRV(LVFU(temp[j + 2][0]) - avgL1) + SQRV(LVFU(temp[j + 3][0]) - avgL1)) + SQRV(LVFU(temp[j + 4][0]) - avgL1))); + const vfloat avgL2 = ((LVFU(temp[j - 4][4]) + LVFU(temp[j - 3][4])) + (LVFU(temp[j - 2][4]) + LVFU(temp[j - 1][4])) + (LVFU(temp[j][4]) + LVFU(temp[j + 1][4])) + (LVFU(temp[j + 2][4]) + LVFU(temp[j + 3][4])) + LVFU(temp[j + 4][4])) / ninev; + 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))); +#else + #pragma omp simd + 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; + avg[j][h] = avgL; + dev[j][h] = std::max(0.001f, (SQR(temp[j - 4][h] - avgL) + SQR(temp[j - 3][h] - avgL)) + (SQR(temp[j - 2][h] - avgL) + SQR(temp[j - 1][h] - avgL)) + (SQR(temp[j][h] - avgL) + SQR(temp[j + 1][h] - avgL)) + (SQR(temp[j + 2][h] - avgL) + SQR(temp[j + 3][h] - avgL)) + SQR(temp[j + 4][h] - avgL)); + } +#endif + } + + for (int j = 5; j < H - 5; j++) { + #pragma omp simd + for(int h = 0; h < numCols; ++h) { + const float avgL = avg[j - 1][h]; + const float avgR = avg[j + 1][h]; + const float devL = dev[j - 1][h]; + const float devR = dev[j + 1][h]; + hpmap[j][k + h] = avgL + (avgR - avgL) * devL / (devL + devR); + } + } + } + for (; k < col_to; k++) { + for (int i = 5; i < H - 5; i++) { + temp[i][0] = std::fabs((rawData[i - 5][k] - rawData[i + 5][k]) - 8 * (rawData[i - 4][k] - rawData[i + 4][k]) + 27 * (rawData[i - 3][k] - rawData[i + 3][k]) - 48 * (rawData[i - 2][k] - rawData[i + 2][k]) + 42 * (rawData[i - 1][k] -rawData[i + 1][k])); + } + + for (int j = 4; j < H - 4; j++) { + const float avgL = (temp[j - 4][0] + temp[j - 3][0] + temp[j - 2][0] + temp[j - 1][0] + temp[j][0] + temp[j + 1][0] + temp[j + 2][0] + temp[j + 3][0] + temp[j + 4][0]) / 9.f; + avg[j][0] = avgL; + dev[j][0] = std::max(0.001f, SQR(temp[j - 4][0] - avgL) + SQR(temp[j - 3][0] - avgL) + SQR(temp[j - 2][0] - avgL) + SQR(temp[j - 1][0] - avgL) + SQR(temp[j][0] - avgL) + SQR(temp[j + 1][0] - avgL) + SQR(temp[j + 2][0] - avgL) + SQR(temp[j + 3][0] - avgL) + SQR(temp[j + 4][0] - avgL)); + } + + for (int j = 5; j < H - 5; j++) { + const float avgL = avg[j - 1][0]; + const float avgR = avg[j + 1][0]; + const float devL = dev[j - 1][0]; + const float devR = dev[j + 1][0]; + hpmap[j][k] = avgL + (avgR - avgL) * devL / (devL + devR); + } + } +} + +void hphd_horizontal(const array2D &rawData, float** hpmap, int row_from, int row_to, int W) +{ + + float* temp = new float[W]; + float* avg = new float[W]; + float* dev = new float[W]; + + memset(temp, 0, W * sizeof(float)); + memset(avg, 0, W * sizeof(float)); + memset(dev, 0, W * sizeof(float)); + +#ifdef __SSE2__ + const vfloat onev = F2V(1.f); + const vfloat twov = F2V(2.f); + const vfloat zd8v = F2V(0.8f); +#endif + for (int i = row_from; i < row_to; i++) { + #pragma omp simd + 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])); + } + + #pragma omp simd + 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; + avg[j] = avgL; + dev[j] = std::max(0.001f, (SQR(temp[j - 4] - avgL) + SQR(temp[j - 3] - avgL)) + (SQR(temp[j - 2] - avgL) + SQR(temp[j - 1] - avgL)) + (SQR(temp[j] - avgL) + SQR(temp[j + 1] - avgL)) + (SQR(temp[j + 2] - avgL) + SQR(temp[j + 3] - avgL)) + SQR(temp[j + 4] - avgL)); + } + + int j = 5; +#ifdef __SSE2__ + // faster than #pragma omp simd + for (; j < W - 8; j+=4) { + const vfloat avgL = LVFU(avg[j - 1]); + const vfloat avgR = LVFU(avg[j + 1]); + const vfloat devL = LVFU(dev[j - 1]); + const vfloat devR = LVFU(dev[j + 1]); + const vfloat hpv = avgL + (avgR - avgL) * devL / (devL + devR); + + const vfloat hpmapoldv = LVFU(hpmap[i][j]); + const vfloat hpmapv = vselfzero(vmaskf_lt(hpmapoldv, zd8v * hpv), twov); + STVFU(hpmap[i][j], vself(vmaskf_lt(hpv, zd8v * hpmapoldv), onev, hpmapv)); + } +#endif + for (; j < W - 5; j++) { + const float avgL = avg[j - 1]; + const float avgR = avg[j + 1]; + const float devL = dev[j - 1]; + const float devR = dev[j + 1]; + const float hpv = avgL + (avgR - avgL) * devL / (devL + devR); + + if (hpmap[i][j] < 0.8f * hpv) { + hpmap[i][j] = 2; + } else if (hpv < 0.8f * hpmap[i][j]) { + hpmap[i][j] = 1; + } else { + hpmap[i][j] = 0; + } + } + } + + delete [] temp; + delete [] avg; + delete [] dev; +} + +void hphd_green(const RawImage *ri, const array2D &rawData, float** hpmap, int W, int H, array2D &green) +{ + + constexpr float eps = 0.001f; +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic, 16) +#endif + + for (int i = 3; i < H - 3; i++) { + for (int j = 3; j < W - 3; j++) { + if (ri->ISGREEN(i, j)) { + green[i][j] = rawData[i][j]; + } else { + if (hpmap[i][j] == 1) { + const float g2 = rawData[i][j + 1] - rawData[i][j + 2] * 0.5f; + const float g4 = rawData[i][j - 1] - rawData[i][j - 2] * 0.5f; + + const float dx = eps + std::fabs(rawData[i][j + 1] - rawData[i][j - 1]); + float d1 = rawData[i][j + 3] - rawData[i][j + 1]; + float d2 = rawData[i][j + 2] - rawData[i][j]; + float d3 = rawData[i - 1][j + 2] - rawData[i - 1][j]; + float d4 = rawData[i + 1][j + 2] - rawData[i + 1][j]; + + const float e2 = 1.f / (dx + (std::fabs(d1) + std::fabs(d2)) + (std::fabs(d3) + std::fabs(d4)) * 0.5f); + + d1 = rawData[i][j - 3] - rawData[i][j - 1]; + d2 = rawData[i][j - 2] - rawData[i][j]; + d3 = rawData[i - 1][j - 2] - rawData[i - 1][j]; + d4 = rawData[i + 1][j - 2] - rawData[i + 1][j]; + + const float e4 = 1.f / (dx + (std::fabs(d1) + std::fabs(d2)) + (std::fabs(d3) + std::fabs(d4)) * 0.5f); + + green[i][j] = rawData[i][j] * 0.5f + (e2 * g2 + e4 * g4) / (e2 + e4); + } else if (hpmap[i][j] == 2) { + const float g1 = rawData[i - 1][j] - rawData[i - 2][j] * 0.5f; + const float g3 = rawData[i + 1][j] - rawData[i + 2][j] * 0.5f; + + const float dy = eps + std::fabs(rawData[i + 1][j] - rawData[i - 1][j]); + float d1 = rawData[i - 1][j] - rawData[i - 3][j]; + float d2 = rawData[i][j] - rawData[i - 2][j]; + float d3 = rawData[i][j - 1] - rawData[i - 2][j - 1]; + float d4 = rawData[i][j + 1] - rawData[i - 2][j + 1]; + + const float e1 = 1.f / (dy + (std::fabs(d1) + std::fabs(d2)) + (std::fabs(d3) + std::fabs(d4)) * 0.5f); + + d1 = rawData[i + 1][j] - rawData[i + 3][j]; + d2 = rawData[i][j] - rawData[i + 2][j]; + d3 = rawData[i][j - 1] - rawData[i + 2][j - 1]; + d4 = rawData[i][j + 1] - rawData[i + 2][j + 1]; + + const float e3 = 1.f / (dy + (std::fabs(d1) + std::fabs(d2)) + (std::fabs(d3) + std::fabs(d4)) * 0.5f); + + green[i][j] = rawData[i][j] * 0.5f + (e1 * g1 + e3 * g3) / (e1 + e3); + } else { + const float g1 = rawData[i - 1][j] - rawData[i - 2][j] * 0.5f; + const float g2 = rawData[i][j + 1] - rawData[i][j + 2] * 0.5f; + const float g3 = rawData[i + 1][j] - rawData[i + 2][j] * 0.5f; + const float g4 = rawData[i][j - 1] - rawData[i][j - 2] * 0.5f; + + const float dx = eps + std::fabs(rawData[i][j + 1] - rawData[i][j - 1]); + const float dy = eps + std::fabs(rawData[i + 1][j] - rawData[i - 1][j]); + + float d1 = rawData[i - 1][j] - rawData[i - 3][j]; + float d2 = rawData[i][j] - rawData[i - 2][j]; + float d3 = rawData[i][j - 1] - rawData[i - 2][j - 1]; + float d4 = rawData[i][j + 1] - rawData[i - 2][j + 1]; + + const float e1 = 1.f / (dy + (std::fabs(d1) + std::fabs(d2)) + (std::fabs(d3) + std::fabs(d4)) * 0.5f); + + d1 = rawData[i][j + 3] - rawData[i][j + 1]; + d2 = rawData[i][j + 2] - rawData[i][j]; + d3 = rawData[i - 1][j + 2] - rawData[i - 1][j]; + d4 = rawData[i + 1][j + 2] - rawData[i + 1][j]; + + const float e2 = 1.f / (dx + (std::fabs(d1) + std::fabs(d2)) + (std::fabs(d3) + std::fabs(d4)) * 0.5f); + + d1 = rawData[i + 1][j] - rawData[i + 3][j]; + d2 = rawData[i][j] - rawData[i + 2][j]; + d3 = rawData[i][j - 1] - rawData[i + 2][j - 1]; + d4 = rawData[i][j + 1] - rawData[i + 2][j + 1]; + + const float e3 = 1.f / (dy + (std::fabs(d1) + std::fabs(d2)) + (std::fabs(d3) + std::fabs(d4)) * 0.5f); + + d1 = rawData[i][j - 3] - rawData[i][j - 1]; + d2 = rawData[i][j - 2] - rawData[i][j]; + d3 = rawData[i - 1][j - 2] - rawData[i - 1][j]; + d4 = rawData[i + 1][j - 2] - rawData[i + 1][j]; + + const float e4 = 1.f / (dx + (std::fabs(d1) + std::fabs(d2)) + (std::fabs(d3) + std::fabs(d4)) * 0.5f); + + green[i][j] = rawData[i][j] * 0.5f + ((e1 * g1 + e2 * g2) + (e3 * g3 + e4 * g4)) / (e1 + e2 + e3 + e4); + } + } + } + } +} + +} + +namespace rtengine +{ + +void RawImageSource::hphd_demosaic () +{ + BENCHFUN + if (plistener) { + plistener->setProgressStr(Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::HPHD))); + plistener->setProgress(0.0); + } + + JaggedArray hpmap(W, H, true); + +#ifdef _OPENMP + #pragma omp parallel + { + int tid = omp_get_thread_num(); + int nthreads = omp_get_num_threads(); + int blk = W / nthreads; + + if (tid < nthreads - 1) { + hphd_vertical(rawData, hpmap, tid * blk, (tid + 1)*blk, H); + } else { + hphd_vertical(rawData, hpmap, tid * blk, W, H); + } + } +#else + hphd_vertical(hpmap, 0, W, H); +#endif + + if (plistener) { + plistener->setProgress(0.35); + } + +#ifdef _OPENMP + #pragma omp parallel + { + int tid = omp_get_thread_num(); + int nthreads = omp_get_num_threads(); + int blk = H / nthreads; + + if (tid < nthreads - 1) { + hphd_horizontal(rawData, hpmap, tid * blk, (tid + 1)*blk, W); + } else { + hphd_horizontal(rawData, hpmap, tid * blk, H, W); + } + } +#else + hphd_horizontal(hpmap, 0, H); +#endif + + if (plistener) { + plistener->setProgress(0.43); + } + + hphd_green(ri, rawData, hpmap, W, H, green); + + if (plistener) { + plistener->setProgress(0.65); + } + + #pragma omp parallel for + 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); + } + + border_interpolate2(W, H, 4, rawData, red, green, blue); + + if (plistener) { + plistener->setProgress(1.0); + } +} + + + +} /* namespace */ diff --git a/rtengine/rawimagesource.h b/rtengine/rawimagesource.h index 470fd138b..a23e9c3cb 100644 --- a/rtengine/rawimagesource.h +++ b/rtengine/rawimagesource.h @@ -93,9 +93,6 @@ protected: std::vector histMatchingCache; ColorManagementParams histMatchingParams; - void hphd_vertical (float** hpmap, int col_from, int col_to); - void hphd_horizontal (float** hpmap, int row_from, int row_to); - void hphd_green (float** hpmap); void processFalseColorCorrectionThread (Imagefloat* im, array2D &rbconv_Y, array2D &rbconv_I, array2D &rbconv_Q, array2D &rbout_I, array2D &rbout_Q, const int row_from, const int row_to); void hlRecovery (const std::string &method, float* red, float* green, float* blue, int width, float* hlmax); void transformRect (const PreviewProps &pp, int tran, int &sx1, int &sy1, int &width, int &height, int &fw); From 7c3707a39233cc3162aa198be8e3d756f798282f Mon Sep 17 00:00:00 2001 From: heckflosse Date: Thu, 31 Jan 2019 22:27:34 +0100 Subject: [PATCH 06/41] hphd dempsaic: disable timing code, #5159 --- rtengine/hphd_demosaic_RT.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtengine/hphd_demosaic_RT.cc b/rtengine/hphd_demosaic_RT.cc index d5a21a4d0..964b73e80 100644 --- a/rtengine/hphd_demosaic_RT.cc +++ b/rtengine/hphd_demosaic_RT.cc @@ -25,7 +25,7 @@ #include "rt_math.h" #include "../rtgui/multilangmgr.h" #include "opthelper.h" -#define BENCHMARK +//#define BENCHMARK #include "StopWatch.h" #ifdef _OPENMP #include From a5427f32a23ea9d2daccabfaf906e12a896c8dd6 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Thu, 31 Jan 2019 23:31:06 +0100 Subject: [PATCH 07/41] hphd demosaic: fix wrong index, #5159 --- rtengine/hphd_demosaic_RT.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rtengine/hphd_demosaic_RT.cc b/rtengine/hphd_demosaic_RT.cc index 964b73e80..7afb7daa6 100644 --- a/rtengine/hphd_demosaic_RT.cc +++ b/rtengine/hphd_demosaic_RT.cc @@ -25,7 +25,7 @@ #include "rt_math.h" #include "../rtgui/multilangmgr.h" #include "opthelper.h" -//#define BENCHMARK +#define BENCHMARK #include "StopWatch.h" #ifdef _OPENMP #include @@ -54,7 +54,7 @@ void hphd_vertical(const array2D &rawData, float** hpmap, int col_from, i for (int i = 5; i < H - 5; i++) { #pragma omp simd 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])); } } From 8207d174a0cc6c815b6e23ef29af5f34d6fd9dc0 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Thu, 31 Jan 2019 23:37:33 +0100 Subject: [PATCH 08/41] hphd demosaic: disable timing code, #5159 --- rtengine/hphd_demosaic_RT.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtengine/hphd_demosaic_RT.cc b/rtengine/hphd_demosaic_RT.cc index 7afb7daa6..fd2e5cce1 100644 --- a/rtengine/hphd_demosaic_RT.cc +++ b/rtengine/hphd_demosaic_RT.cc @@ -25,7 +25,7 @@ #include "rt_math.h" #include "../rtgui/multilangmgr.h" #include "opthelper.h" -#define BENCHMARK +//#define BENCHMARK #include "StopWatch.h" #ifdef _OPENMP #include From 9210a56ca4f7a295809f1565dddc5947bcab308a Mon Sep 17 00:00:00 2001 From: heckflosse Date: Mon, 4 Feb 2019 22:18:14 +0100 Subject: [PATCH 09/41] Log filename in case mmap failed --- rtengine/myfile.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtengine/myfile.cc b/rtengine/myfile.cc index 920421188..28d187e4c 100644 --- a/rtengine/myfile.cc +++ b/rtengine/myfile.cc @@ -107,7 +107,7 @@ IMFILE* fopen (const char* fname) void* data = mmap(nullptr, stat_buffer.st_size, PROT_READ, MAP_PRIVATE, fd, 0); if ( data == MAP_FAILED ) { - printf("no mmap\n"); + printf("no mmap %s\n", fname); close(fd); return nullptr; } From 37027e46bdd381310c9e32eeb326d393c2cd5150 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=B6ssie?= Date: Wed, 6 Feb 2019 06:54:31 +0100 Subject: [PATCH 10/41] Fix non-OpenMP build --- rtengine/CA_correct_RT.cc | 28 +++++++++ rtengine/EdgePreservingDecomposition.cc | 2 + rtengine/FTblockDN.cc | 14 +++++ rtengine/bilateral2.h | 84 +++++++++++++++++++++++++ rtengine/cfa_linedn_RT.cc | 8 +++ rtengine/dcraw.cc | 12 +++- rtengine/demosaic_algos.cc | 4 +- rtengine/dfmanager.cc | 6 ++ rtengine/dirpyr_equalizer.cc | 12 ++++ rtengine/dual_demosaic_RT.cc | 10 +++ rtengine/eahd_demosaic.cc | 4 +- rtengine/expo_before_b.cc | 16 +++++ rtengine/fast_demo.cc | 8 +-- rtengine/hilite_recon.cc | 2 + rtengine/hphd_demosaic_RT.cc | 16 ++++- rtengine/imagefloat.cc | 8 ++- rtengine/improccoordinator.cc | 12 ++++ rtengine/improcfun.cc | 36 +++++++++++ rtengine/ipresize.cc | 4 ++ rtengine/iptransform.cc | 6 ++ rtengine/ipvibrance.cc | 6 +- rtengine/previewimage.cc | 8 ++- rtengine/rawimage.cc | 22 +++++++ rtengine/rawimagesource.cc | 2 + rtengine/simpleprocess.cc | 12 ++++ rtengine/tmo_fattal02.cc | 34 ++++++++++ rtgui/cropwindow.cc | 2 + 27 files changed, 364 insertions(+), 14 deletions(-) diff --git a/rtengine/CA_correct_RT.cc b/rtengine/CA_correct_RT.cc index 2fa589110..e27f894ee 100644 --- a/rtengine/CA_correct_RT.cc +++ b/rtengine/CA_correct_RT.cc @@ -151,7 +151,9 @@ float* RawImageSource::CA_correct_RT( blueFactor = new array2D((W + 1 - 2 * cb) / 2, (H + 1 - 2 * cb) / 2); oldraw = new array2D((W + 1- 2 * cb) / 2, H- 2 * cb); // copy raw values before ca correction +#ifdef _OPENMP #pragma omp parallel for +#endif for (int i = cb; i < H - cb; ++i) { for (int j = cb + (FC(i, 0) & 1); j < W - cb; j += 2) { (*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 +#ifdef _OPENMP #pragma omp parallel +#endif { int progresscounter = 0; @@ -274,7 +278,9 @@ float* RawImageSource::CA_correct_RT( float blocksqavethr[2][2] = {}; float blockdenomthr[2][2] = {}; +#ifdef _OPENMP #pragma omp for collapse(2) schedule(dynamic) nowait +#endif for (int top = -border ; top < height; top += ts - border2) { for (int left = -border; left < width - (W & 1); left += ts - border2) { memset(bufferThr, 0, buffersize); @@ -647,7 +653,9 @@ float* RawImageSource::CA_correct_RT( progresscounter++; if (progresscounter % 8 == 0) { +#ifdef _OPENMP #pragma omp critical (cadetectpass1) +#endif { progress += 4.0 * SQR(ts - border2) / (iterations * height * width); progress = std::min(progress, 1.0); @@ -658,7 +666,9 @@ float* RawImageSource::CA_correct_RT( } } //end of diagnostic pass +#ifdef _OPENMP #pragma omp critical (cadetectpass2) +#endif { for (int dir = 0; dir < 2; dir++) { for (int c = 0; c < 2; c++) { @@ -668,9 +678,13 @@ float* RawImageSource::CA_correct_RT( } } } +#ifdef _OPENMP #pragma omp barrier +#endif +#ifdef _OPENMP #pragma omp single +#endif { for (int dir = 0; dir < 2; dir++) 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 //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 +#ifdef _OPENMP #pragma omp for schedule(dynamic) collapse(2) +#endif for (int top = -border; top < height; top += ts - border2) { for (int left = -border; left < width - (W & 1); left += ts - border2) { memset(bufferThr, 0, buffersizePassTwo); @@ -1197,7 +1213,9 @@ float* RawImageSource::CA_correct_RT( progresscounter++; if (progresscounter % 8 == 0) +#ifdef _OPENMP #pragma omp critical (cacorrect) +#endif { progress += 4.0 * SQR(ts - border2) / (iterations * height * width); progress = std::min(progress, 1.0); @@ -1208,7 +1226,9 @@ float* RawImageSource::CA_correct_RT( } // copy temporary image matrix back to image matrix +#ifdef _OPENMP #pragma omp for +#endif for (int row = cb; row < height - cb; row++) { 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. // Then we apply the resulting factors per pixel on the result of raw ca correction +#ifdef _OPENMP #pragma omp parallel +#endif { #ifdef __SSE2__ const vfloat onev = F2V(1.f); const vfloat twov = F2V(2.f); const vfloat zd5v = F2V(0.5f); #endif +#ifdef _OPENMP #pragma omp for +#endif for (int i = 0; i < H - 2 * cb; ++i) { const int firstCol = FC(i, 0) & 1; const int colour = FC(i, firstCol); @@ -1260,7 +1284,9 @@ float* RawImageSource::CA_correct_RT( } } +#ifdef _OPENMP #pragma omp single +#endif { if (H % 2) { // 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); // apply correction factors to avoid (reduce) colour shift +#ifdef _OPENMP #pragma omp for +#endif for (int i = 0; i < H - 2 * cb; ++i) { const int firstCol = FC(i, 0) & 1; const int colour = FC(i, firstCol); diff --git a/rtengine/EdgePreservingDecomposition.cc b/rtengine/EdgePreservingDecomposition.cc index f71e0043e..d946fe0f3 100644 --- a/rtengine/EdgePreservingDecomposition.cc +++ b/rtengine/EdgePreservingDecomposition.cc @@ -324,7 +324,9 @@ void MultiDiagonalSymmetricMatrix::VectorProduct(float* RESTRICT Product, float* } #endif +#ifdef _OPENMP #pragma omp single +#endif { #ifdef __SSE2__ diff --git a/rtengine/FTblockDN.cc b/rtengine/FTblockDN.cc index 1a3b80036..2a1a9fcb4 100644 --- a/rtengine/FTblockDN.cc +++ b/rtengine/FTblockDN.cc @@ -1838,11 +1838,15 @@ BENCHFUN for (int iteration = 1; iteration <= dnparams.passes; ++iteration) { +#ifdef _OPENMP #pragma omp parallel +#endif { if (methmed < 2) { +#ifdef _OPENMP #pragma omp for +#endif for (int i = 1; i < hei - 1; ++i) { if (methmed == 0) { @@ -1857,7 +1861,9 @@ BENCHFUN } } else { +#ifdef _OPENMP #pragma omp for +#endif for (int i = 2; i < hei - 2; ++i) { if (methmed == 3) { @@ -1901,7 +1907,9 @@ BENCHFUN if (methmed < 2) { +#ifdef _OPENMP #pragma omp for +#endif for (int i = 1; i < hei - 1; ++i) { if (methmed == 0) { @@ -1916,7 +1924,9 @@ BENCHFUN } } else { +#ifdef _OPENMP #pragma omp for +#endif for (int i = 2; i < hei - 2; ++i) { if (methmed == 3) { @@ -1961,7 +1971,9 @@ BENCHFUN if (methmed < 2) { +#ifdef _OPENMP #pragma omp for +#endif for (int i = 1; i < hei - 1; ++i) { if (methmed == 0) { @@ -1976,7 +1988,9 @@ BENCHFUN } } else { +#ifdef _OPENMP #pragma omp for +#endif for (int i = 2; i < hei - 2; ++i) { if (methmed == 3) { diff --git a/rtengine/bilateral2.h b/rtengine/bilateral2.h index 3356843b2..e754ac891 100644 --- a/rtengine/bilateral2.h +++ b/rtengine/bilateral2.h @@ -152,10 +152,14 @@ template void bilateral05 (T** src, T** dst, T** buffer, int W { BL_BEGIN(318, 1) +#ifdef _OPENMP #pragma omp for +#endif BL_OPER3(1, 7, 7, 55) BL_FREE +#ifdef _OPENMP #pragma omp for +#endif BL_END(1) } @@ -164,10 +168,14 @@ template void bilateral06 (T** src, T** dst, T** buffer, int W { BL_BEGIN(768, 1) +#ifdef _OPENMP #pragma omp for +#endif BL_OPER3(1, 4, 4, 16) BL_FREE +#ifdef _OPENMP #pragma omp for +#endif BL_END(1) } @@ -176,10 +184,14 @@ template void bilateral07 (T** src, T** dst, T** buffer, int W { BL_BEGIN(366, 2) +#ifdef _OPENMP #pragma omp for +#endif BL_OPER5(0, 0, 1, 0, 8, 21, 1, 21, 59) BL_FREE +#ifdef _OPENMP #pragma omp for +#endif BL_END(2) } @@ -188,10 +200,14 @@ template void bilateral08 (T** src, T** dst, T** buffer, int W { BL_BEGIN(753, 2) +#ifdef _OPENMP #pragma omp for +#endif BL_OPER5(0, 0, 1, 0, 5, 10, 1, 10, 23) BL_FREE +#ifdef _OPENMP #pragma omp for +#endif BL_END(2) } @@ -200,10 +216,14 @@ template void bilateral09 (T** src, T** dst, T** buffer, int W { BL_BEGIN(595, 2) +#ifdef _OPENMP #pragma omp for +#endif BL_OPER5(0, 1, 2, 1, 6, 12, 2, 12, 22) BL_FREE +#ifdef _OPENMP #pragma omp for +#endif BL_END(2) } @@ -212,10 +232,14 @@ template void bilateral10 (T** src, T** dst, T** buffer, int W { BL_BEGIN(910, 2) +#ifdef _OPENMP #pragma omp for +#endif BL_OPER5(0, 1, 2, 1, 4, 7, 2, 7, 12) BL_FREE +#ifdef _OPENMP #pragma omp for +#endif BL_END(2) } @@ -224,10 +248,14 @@ template void bilateral11 (T** src, T** dst, T** buffer, int W { BL_BEGIN(209, 3) +#ifdef _OPENMP #pragma omp for +#endif BL_OPER7(0, 0, 1, 1, 0, 2, 5, 8, 1, 5, 18, 27, 1, 8, 27, 41) BL_FREE +#ifdef _OPENMP #pragma omp for +#endif BL_END(3) } @@ -236,10 +264,14 @@ template void bilateral12 (T** src, T** dst, T** buffer, int W { BL_BEGIN(322, 3) +#ifdef _OPENMP #pragma omp for +#endif BL_OPER7(0, 0, 1, 1, 0, 1, 4, 6, 1, 4, 11, 16, 1, 6, 16, 23) BL_FREE +#ifdef _OPENMP #pragma omp for +#endif BL_END(3) } @@ -248,10 +280,14 @@ template void bilateral13 (T** src, T** dst, T** buffer, int W { BL_BEGIN(336, 3) +#ifdef _OPENMP #pragma omp for +#endif BL_OPER7(0, 0, 1, 1, 0, 2, 4, 6, 1, 4, 11, 14, 1, 6, 14, 19) BL_FREE +#ifdef _OPENMP #pragma omp for +#endif BL_END(3) } @@ -260,10 +296,14 @@ template void bilateral14 (T** src, T** dst, T** buffer, int W { BL_BEGIN(195, 3) +#ifdef _OPENMP #pragma omp for +#endif BL_OPER7(0, 1, 2, 3, 1, 4, 8, 10, 2, 8, 17, 21, 3, 10, 21, 28) BL_FREE +#ifdef _OPENMP #pragma omp for +#endif BL_END(3) } @@ -272,10 +312,14 @@ template void bilateral15 (T** src, T** dst, T** buffer, int W { BL_BEGIN(132, 4) +#ifdef _OPENMP #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_FREE +#ifdef _OPENMP #pragma omp for +#endif BL_END(4) } @@ -284,10 +328,14 @@ template void bilateral16 (T** src, T** dst, T** buffer, int W { BL_BEGIN(180, 4) +#ifdef _OPENMP #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_FREE +#ifdef _OPENMP #pragma omp for +#endif BL_END(4) } @@ -296,10 +344,14 @@ template void bilateral17 (T** src, T** dst, T** buffer, int W { BL_BEGIN(195, 4) +#ifdef _OPENMP #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_FREE +#ifdef _OPENMP #pragma omp for +#endif BL_END(4) } @@ -308,10 +360,14 @@ template void bilateral18 (T** src, T** dst, T** buffer, int W { BL_BEGIN(151, 4) +#ifdef _OPENMP #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_FREE +#ifdef _OPENMP #pragma omp for +#endif BL_END(4) } @@ -320,10 +376,14 @@ template void bilateral19 (T** src, T** dst, T** buffer, int W { BL_BEGIN(151, 4) +#ifdef _OPENMP #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_FREE +#ifdef _OPENMP #pragma omp for +#endif BL_END(4) } @@ -332,10 +392,14 @@ template void bilateral20 (T** src, T** dst, T** buffer, int W { BL_BEGIN(116, 5) +#ifdef _OPENMP #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_FREE +#ifdef _OPENMP #pragma omp for +#endif BL_END(5) } @@ -344,10 +408,14 @@ template void bilateral21 (T** src, T** dst, T** buffer, int W { BL_BEGIN(127, 5) +#ifdef _OPENMP #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_FREE +#ifdef _OPENMP #pragma omp for +#endif BL_END(5) } @@ -356,10 +424,14 @@ template void bilateral22 (T** src, T** dst, T** buffer, int W { BL_BEGIN(109, 5) +#ifdef _OPENMP #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_FREE +#ifdef _OPENMP #pragma omp for +#endif BL_END(5) } @@ -368,10 +440,14 @@ template void bilateral23 (T** src, T** dst, T** buffer, int W { BL_BEGIN(132, 5) +#ifdef _OPENMP #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_FREE +#ifdef _OPENMP #pragma omp for +#endif BL_END(5) } @@ -380,10 +456,14 @@ template void bilateral24 (T** src, T** dst, T** buffer, int W { BL_BEGIN(156, 5) +#ifdef _OPENMP #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_FREE +#ifdef _OPENMP #pragma omp for +#endif BL_END(5) } @@ -392,10 +472,14 @@ template void bilateral25 (T** src, T** dst, T** buffer, int W { BL_BEGIN(173, 5) +#ifdef _OPENMP #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_FREE +#ifdef _OPENMP #pragma omp for +#endif BL_END(5) } diff --git a/rtengine/cfa_linedn_RT.cc b/rtengine/cfa_linedn_RT.cc index 2bb3649b6..f5563e3de 100644 --- a/rtengine/cfa_linedn_RT.cc +++ b/rtengine/cfa_linedn_RT.cc @@ -64,7 +64,9 @@ void RawImageSource::CLASS cfa_linedn(float noise, bool horizontal, bool vertica float noisevarm4 = 4.0f * noisevar; volatile double progress = 0.0; float* RawDataTmp = (float*)malloc( width * height * sizeof(float)); +#ifdef _OPENMP #pragma omp parallel +#endif { // 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 dctblock[4][8][8]; +#ifdef _OPENMP #pragma omp for +#endif for(int i = 0; i < height; i++) 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 +#ifdef _OPENMP #pragma omp for schedule(dynamic) collapse(2) +#endif for (int top = 0; top < height - 16; top += 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); // copy temporary buffer back to image matrix +#ifdef _OPENMP #pragma omp for schedule(dynamic,16) +#endif for(int i = 0; i < height; i++) { float f = rowblender(i); diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc index 660d65385..af5d38c6c 100644 --- a/rtengine/dcraw.cc +++ b/rtengine/dcraw.cc @@ -1695,7 +1695,9 @@ void CLASS phase_one_correct() curve[i] = LIM(num+i,0,65535); } apply: /* apply to whole image */ +#ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) +#endif for (int row=0; row < raw_height; row++) { for (int col = (tag & 1)*ph1.split_col; col < raw_width; 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[18] = cf[18] = 65535; cubic_spline(cx, cf, 19); +#ifdef _OPENMP #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++) RAW(row,col) = curve[RAW(row,col)]; } @@ -1787,7 +1791,9 @@ void CLASS phase_one_correct() qmult[1][0] = 1.0 + getreal(11); get4(); get4(); get4(); qmult[1][1] = 1.0 + getreal(11); +#ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) +#endif for (int row=0; row < raw_height; row++) { for (int col=0; col < raw_width; 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 +#ifdef _OPENMP #pragma omp parallel for +#endif for (int row = 0; row < raw_height; row++) { int ffs, cur_ffr, i, c; if (row < row_offset) { @@ -4470,7 +4478,9 @@ void CLASS crop_masked_pixels() } } } else { +#ifdef _OPENMP #pragma omp parallel for +#endif for (int row=0; row < height; row++) for (int col=0; col < width; col++) BAYER2(row,col) = RAW(row+top_margin,col+left_margin); diff --git a/rtengine/demosaic_algos.cc b/rtengine/demosaic_algos.cc index a4d896eec..617feb3b4 100644 --- a/rtengine/demosaic_algos.cc +++ b/rtengine/demosaic_algos.cc @@ -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; float* rgb[3]; float* chr[2]; - float (*rgbarray), *vdif, *hdif, (*chrarray); + float *rgbarray, *vdif, *hdif, *chrarray; rgbarray = (float (*)) calloc(width * height * 3, sizeof( float)); rgb[0] = rgbarray; @@ -1789,7 +1789,9 @@ void RawImageSource::nodemosaic(bool bw) red(W, H); green(W, H); blue(W, H); +#ifdef _OPENMP #pragma omp parallel for +#endif for (int i = 0; i < H; i++) { for (int j = 0; j < W; j++) { diff --git a/rtengine/dfmanager.cc b/rtengine/dfmanager.cc index 96b8ddc59..5f1035a8e 100644 --- a/rtengine/dfmanager.cc +++ b/rtengine/dfmanager.cc @@ -219,10 +219,14 @@ void dfInfo::updateBadPixelList( RawImage *df ) if( df->getSensorType() == ST_BAYER || df->getSensorType() == ST_FUJI_XTRANS ) { std::vector badPixelsTemp; +#ifdef _OPENMP #pragma omp parallel +#endif { std::vector badPixelsThread; +#ifdef _OPENMP #pragma omp for nowait +#endif for( int row = 2; row < df->get_height() - 2; row++) for( int col = 2; col < df->get_width() - 2; col++) { @@ -235,7 +239,9 @@ void dfInfo::updateBadPixelList( RawImage *df ) } } +#ifdef _OPENMP #pragma omp critical +#endif badPixelsTemp.insert(badPixelsTemp.end(), badPixelsThread.begin(), badPixelsThread.end()); } badPixels.insert(badPixels.end(), badPixelsTemp.begin(), badPixelsTemp.end()); diff --git a/rtengine/dirpyr_equalizer.cc b/rtengine/dirpyr_equalizer.cc index 5e33fd3b3..4a30b48a8 100644 --- a/rtengine/dirpyr_equalizer.cc +++ b/rtengine/dirpyr_equalizer.cc @@ -143,7 +143,9 @@ void ImProcFunctions :: dirpyr_equalizer(float ** src, float ** dst, int srcwidt } #ifdef __SSE2__ +#ifdef _OPENMP #pragma omp parallel for +#endif for(int i = 0; i < srcheight; i++) { int j; @@ -158,7 +160,9 @@ void ImProcFunctions :: dirpyr_equalizer(float ** src, float ** dst, int srcwidt } #else +#ifdef _OPENMP #pragma omp parallel for +#endif for(int i = 0; i < srcheight; i++) { for(int j = 0; j < srcwidth; j++) { @@ -174,10 +178,14 @@ void ImProcFunctions :: dirpyr_equalizer(float ** src, float ** dst, int srcwidt } #ifdef __SSE2__ +#ifdef _OPENMP #pragma omp parallel +#endif { __m128 div = _mm_set1_ps(327.68f); +#ifdef _OPENMP #pragma omp for +#endif for(int i = 0; i < srcheight; i++) { int j; @@ -192,7 +200,9 @@ void ImProcFunctions :: dirpyr_equalizer(float ** src, float ** dst, int srcwidt } } #else +#ifdef _OPENMP #pragma omp parallel for +#endif for(int i = 0; i < srcheight; i++) { for(int j = 0; j < srcwidth; j++) { @@ -228,7 +238,9 @@ void ImProcFunctions :: dirpyr_equalizer(float ** src, float ** dst, int srcwidt delete [] tmpHue; } +#ifdef _OPENMP #pragma omp parallel for +#endif for (int i = 0; i < srcheight; i++) for (int j = 0; j < srcwidth; j++) { diff --git a/rtengine/dual_demosaic_RT.cc b/rtengine/dual_demosaic_RT.cc index 4ffac9296..790275d7e 100644 --- a/rtengine/dual_demosaic_RT.cc +++ b/rtengine/dual_demosaic_RT.cc @@ -91,9 +91,13 @@ void RawImageSource::dual_demosaic_RT(bool isBayer, const RAWParams &raw, int wi { 0.019334, 0.119193, 0.950227 } }; +#ifdef _OPENMP #pragma omp parallel +#endif { +#ifdef _OPENMP #pragma omp for +#endif for(int i = 0; i < winh; ++i) { 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; // 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 +#endif for(int i = 0; i < winh; ++i) { for(int j = 0; j < winw; ++j) { red[i][j] = intp(blend[i][j], red[i][j], redTmp[i][j]); } } +#ifdef _OPENMP #pragma omp parallel for +#endif for(int i = 0; i < winh; ++i) { for(int j = 0; j < winw; ++j) { green[i][j] = intp(blend[i][j], green[i][j], greenTmp[i][j]); } } +#ifdef _OPENMP #pragma omp parallel for +#endif for(int i = 0; i < winh; ++i) { for(int j = 0; j < winw; ++j) { blue[i][j] = intp(blend[i][j], blue[i][j], blueTmp[i][j]); diff --git a/rtengine/eahd_demosaic.cc b/rtengine/eahd_demosaic.cc index 816f4bf55..18883586c 100644 --- a/rtengine/eahd_demosaic.cc +++ b/rtengine/eahd_demosaic.cc @@ -431,7 +431,9 @@ void RawImageSource::eahd_demosaic () } // Interpolate R and B +#ifdef _OPENMP #pragma omp parallel for +#endif for (int i = 0; i < H; i++) { 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); @@ -443,4 +445,4 @@ void RawImageSource::eahd_demosaic () } } -} \ No newline at end of file +} diff --git a/rtengine/expo_before_b.cc b/rtengine/expo_before_b.cc index eda8c9e37..cd5e77df5 100644 --- a/rtengine/expo_before_b.cc +++ b/rtengine/expo_before_b.cc @@ -63,13 +63,17 @@ void RawImageSource::processRawWhitepoint(float expos, float preser, array2DgetSensorType() == ST_BAYER || ri->getSensorType() == ST_FUJI_XTRANS) +#ifdef _OPENMP #pragma omp parallel for +#endif for (int row = 0; row < height; row++) for (int col = 0; col < width; col++) { rawData[row][col] *= expos; } else +#ifdef _OPENMP #pragma omp parallel for +#endif for (int row = 0; row < height; row++) for (int col = 0; col < width; col++) { rawData[row][col * 3] *= expos; @@ -88,12 +92,16 @@ void RawImageSource::processRawWhitepoint(float expos, float preser, array2DgetSensorType() == ST_BAYER || ri->getSensorType() == ST_FUJI_XTRANS) +#ifdef _OPENMP #pragma omp for schedule(dynamic,16) nowait +#endif for(int row = 0; row < height; row++) for (int col = 0; col < width; col++) { if (rawData[row][col] > maxValFloatThr) { @@ -101,7 +109,9 @@ void RawImageSource::processRawWhitepoint(float expos, float preser, array2D maxValFloat) { maxValFloat = maxValFloatThr; @@ -141,14 +153,18 @@ void RawImageSource::processRawWhitepoint(float expos, float preser, array2DgetSensorType() == ST_BAYER || ri->getSensorType() == ST_FUJI_XTRANS) +#ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) +#endif for(int row = 0; row < height; row++) for(int col = 0; col < width; 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]; } else +#ifdef _OPENMP #pragma omp parallel for +#endif for(int row = 0; row < height; row++) 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]; diff --git a/rtengine/fast_demo.cc b/rtengine/fast_demo.cc index e88661485..1584c4ca2 100644 --- a/rtengine/fast_demo.cc +++ b/rtengine/fast_demo.cc @@ -77,10 +77,10 @@ void RawImageSource::fast_demosaic() #endif { - char (*buffer); - float (*greentile); - float (*redtile); - float (*bluetile); + char *buffer; + float *greentile; + float *redtile; + float *bluetile; #define CLF 1 // assign working space buffer = (char *) calloc(3 * sizeof(float) * TS * TS + 3 * CLF * 64 + 63, 1); diff --git a/rtengine/hilite_recon.cc b/rtengine/hilite_recon.cc index b8ad23e70..bb173f11a 100644 --- a/rtengine/hilite_recon.cc +++ b/rtengine/hilite_recon.cc @@ -336,7 +336,9 @@ void RawImageSource::boxblur_resamp(float **src, float **dst, float ** temp, int } // process remaining columns +#ifdef _OPENMP #pragma omp single +#endif { //vertical blur diff --git a/rtengine/hphd_demosaic_RT.cc b/rtengine/hphd_demosaic_RT.cc index fd2e5cce1..5c15469ca 100644 --- a/rtengine/hphd_demosaic_RT.cc +++ b/rtengine/hphd_demosaic_RT.cc @@ -52,7 +52,9 @@ void hphd_vertical(const array2D &rawData, float** hpmap, int col_from, i #endif for (; k < col_to - 7; k += numCols) { for (int i = 5; i < H - 5; i++) { +#ifdef _OPENMP #pragma omp simd +#endif 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])); } @@ -68,7 +70,9 @@ void hphd_vertical(const array2D &rawData, float** hpmap, int col_from, i 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))); #else +#ifdef _OPENMP #pragma omp simd +#endif 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; avg[j][h] = avgL; @@ -78,7 +82,9 @@ void hphd_vertical(const array2D &rawData, float** hpmap, int col_from, i } for (int j = 5; j < H - 5; j++) { +#ifdef _OPENMP #pragma omp simd +#endif for(int h = 0; h < numCols; ++h) { const float avgL = avg[j - 1][h]; const float avgR = avg[j + 1][h]; @@ -126,12 +132,16 @@ void hphd_horizontal(const array2D &rawData, float** hpmap, int row_from, const vfloat zd8v = F2V(0.8f); #endif for (int i = row_from; i < row_to; i++) { +#ifdef _OPENMP #pragma omp simd +#endif 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])); } +#ifdef _OPENMP #pragma omp simd +#endif 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; avg[j] = avgL; @@ -301,7 +311,7 @@ void RawImageSource::hphd_demosaic () } } #else - hphd_vertical(hpmap, 0, W, H); + hphd_vertical(rawData, hpmap, 0, W, H); #endif if (plistener) { @@ -322,7 +332,7 @@ void RawImageSource::hphd_demosaic () } } #else - hphd_horizontal(hpmap, 0, H); + hphd_horizontal(rawData, hpmap, 0, H, W); #endif if (plistener) { @@ -335,7 +345,9 @@ void RawImageSource::hphd_demosaic () plistener->setProgress(0.65); } +#ifdef _OPENMP #pragma omp parallel for +#endif 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); } diff --git a/rtengine/imagefloat.cc b/rtengine/imagefloat.cc index 0d978aa5b..34ec06492 100644 --- a/rtengine/imagefloat.cc +++ b/rtengine/imagefloat.cc @@ -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 { @@ -441,11 +439,15 @@ void Imagefloat::calcCroppedHistogram(const ProcParams ¶ms, float scale, LUT int x1, x2, y1, y2; params.crop.mapToResized(width, height, scale, x1, x2, y1, y2); +#ifdef _OPENMP #pragma omp parallel +#endif { LUTu histThr(65536); histThr.clear(); +#ifdef _OPENMP #pragma omp for nowait +#endif for (int y = y1; y < y2; y++) { 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 +#endif { for(int i = 0; i <= 0xffff; i++) { hist[i] += histThr[i]; diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 24107ea1f..12ef0c226 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -1048,9 +1048,13 @@ void ImProcCoordinator::updateLRGBHistograms() int x1, y1, x2, y2; params.crop.mapToResized(pW, pH, scale, x1, x2, y1, y2); +#ifdef _OPENMP #pragma omp parallel sections +#endif { +#ifdef _OPENMP #pragma omp section +#endif { histChroma.clear(); @@ -1060,7 +1064,9 @@ void ImProcCoordinator::updateLRGBHistograms() histChroma[(int)(sqrtf(SQR(nprevl->a[i][j]) + SQR(nprevl->b[i][j])) / 188.f)]++; //188 = 48000/256 } } +#ifdef _OPENMP #pragma omp section +#endif { histLuma.clear(); @@ -1070,7 +1076,9 @@ void ImProcCoordinator::updateLRGBHistograms() histLuma[(int)(nprevl->L[i][j] / 128.f)]++; } } +#ifdef _OPENMP #pragma omp section +#endif { histRed.clear(); histGreen.clear(); @@ -1302,7 +1310,9 @@ void ImProcCoordinator::saveInputICCReference(const Glib::ustring& fname, bool a int cy = params.crop.y; int cw = params.crop.w; int ch = params.crop.h; +#ifdef _OPENMP #pragma omp parallel for +#endif for (int i = cy; i < cy + ch; i++) { for (int j = cx; j < cx + cw; j++) { @@ -1317,7 +1327,9 @@ void ImProcCoordinator::saveInputICCReference(const Glib::ustring& fname, bool a } // image may contain out of range samples, clip them to avoid wrap-arounds +#ifdef _OPENMP #pragma omp parallel for +#endif for (int i = 0; i < im->getHeight(); i++) { for (int j = 0; j < im->getWidth(); j++) { diff --git a/rtengine/improcfun.cc b/rtengine/improcfun.cc index 404229d10..fb8093de9 100644 --- a/rtengine/improcfun.cc +++ b/rtengine/improcfun.cc @@ -777,7 +777,9 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw hist16Qthr.clear(); } +#ifdef _OPENMP #pragma omp for reduction(+:sum) +#endif for (int i = 0; i < height; i++) @@ -846,7 +848,9 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw //can be used in case of... } +#ifdef _OPENMP #pragma omp critical +#endif { if (needJ) { hist16J += hist16Jthr; @@ -995,7 +999,9 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw int bufferLength = ((width + 3) / 4) * 4; // bufferLength has to be a multiple of 4 #endif #ifndef _DEBUG +#ifdef _OPENMP #pragma omp parallel +#endif #endif { float minQThr = 10000.f; @@ -1010,7 +1016,9 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw float sbuffer[bufferLength] ALIGNED16; #endif #ifndef _DEBUG +#ifdef _OPENMP #pragma omp for schedule(dynamic, 16) +#endif #endif for (int i = 0; i < height; i++) { @@ -1618,7 +1626,9 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw #endif } +#ifdef _OPENMP #pragma omp critical +#endif { if (minQThr < minQ) { minQ = minQThr; @@ -1731,11 +1741,15 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw #ifndef _DEBUG +#ifdef _OPENMP #pragma omp parallel +#endif #endif { #ifndef _DEBUG +#ifdef _OPENMP #pragma omp for schedule(dynamic, 10) +#endif #endif for (int i = 0; i < height; i++) // update CieImages with new values after sharpening, defringe, contrast by detail level @@ -1768,7 +1782,9 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw const float co_e = (pow_F (f_l, 0.25f)) + eps; #ifndef _DEBUG +#ifdef _OPENMP #pragma omp parallel +#endif #endif { #ifdef __SSE2__ @@ -1782,7 +1798,9 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw #endif #ifndef _DEBUG +#ifdef _OPENMP #pragma omp for schedule(dynamic, 10) +#endif #endif for (int i = 0; i < height; i++) { // update CIECAM with new values after tone-mapping @@ -4120,7 +4138,9 @@ void ImProcFunctions::luminanceCurve (LabImage* lold, LabImage* lnew, LUTf & cur int W = lold->W; int H = lold->H; +#ifdef _OPENMP #pragma omp parallel for if (multiThread) +#endif for (int i = 0; i < H; i++) for (int j = 0; j < W; j++) { @@ -4386,17 +4406,21 @@ void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBuffer, int pW {wprof[2][0], wprof[2][1], wprof[2][2]} }; +#ifdef _OPENMP #ifdef _DEBUG #pragma omp parallel default(shared) firstprivate(lold, lnew, MunsDebugInfo, pW) if (multiThread) #else #pragma omp parallel if (multiThread) +#endif #endif { #ifdef __SSE2__ float HHBuffer[W] ALIGNED16; float CCBuffer[W] ALIGNED16; #endif +#ifdef _OPENMP #pragma omp for schedule(dynamic, 16) +#endif for (int i = 0; i < H; i++) { if (avoidColorShift) @@ -5136,7 +5160,9 @@ void ImProcFunctions::EPDToneMapCIE (CieImage *ncie, float a_w, float c_, int Wi EdgePreservingDecomposition epd (Wid, Hei); +#ifdef _OPENMP #pragma omp parallel for +#endif for (int i = 0; i < Hei; i++) for (int j = 0; j < Wid; j++) { @@ -5162,7 +5188,9 @@ void ImProcFunctions::EPDToneMapCIE (CieImage *ncie, float a_w, float c_, int Wi //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)); #ifndef _DEBUG +#ifdef _OPENMP #pragma omp parallel for schedule(dynamic,10) +#endif #endif for (int i = 0; i < Hei; i++) @@ -5243,11 +5271,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. float minL = FLT_MAX; float maxL = 0.f; +#ifdef _OPENMP #pragma omp parallel +#endif { float lminL = FLT_MAX; float lmaxL = 0.f; +#ifdef _OPENMP #pragma omp for +#endif for (size_t i = 0; i < N; i++) { if (L[i] < lminL) { @@ -5259,7 +5291,9 @@ void ImProcFunctions::EPDToneMap (LabImage *lab, unsigned int Iterates, int skip } } +#ifdef _OPENMP #pragma omp critical +#endif { if (lminL < minL) { minL = lminL; @@ -5279,7 +5313,9 @@ void ImProcFunctions::EPDToneMap (LabImage *lab, unsigned int Iterates, int skip maxL = 1.f; } +#ifdef _OPENMP #pragma omp parallel for +#endif for (size_t i = 0; i < N; ++i) //{L[i] = (L[i] - minL)/32767.0f; diff --git a/rtengine/ipresize.cc b/rtengine/ipresize.cc index 2d12417e1..a14115120 100644 --- a/rtengine/ipresize.cc +++ b/rtengine/ipresize.cc @@ -54,7 +54,9 @@ void ImProcFunctions::Lanczos (const Imagefloat* src, Imagefloat* dst, float sca const float sc = min (scale, 1.0f); const int support = static_cast (2.0f * a / sc) + 1; +#ifdef _OPENMP #pragma omp parallel +#endif { // storage for precomputed parameters for horisontal interpolation 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 +#ifdef _OPENMP #pragma omp for +#endif for (int i = 0; i < dst->getHeight(); i++) { diff --git a/rtengine/iptransform.cc b/rtengine/iptransform.cc index a5ade7c53..8c06252c1 100644 --- a/rtengine/iptransform.cc +++ b/rtengine/iptransform.cc @@ -705,7 +705,9 @@ void ImProcFunctions::transformLuminanceOnly (Imagefloat* original, Imagefloat* } bool darkening = (params->vignetting.amount <= 0.0); +#ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) if (multiThread) +#endif for (int y = 0; y < transformed->getHeight(); y++) { 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 // main cycle bool darkening = (params->vignetting.amount <= 0.0); +#ifdef _OPENMP #pragma omp parallel for if (multiThread) +#endif for (int y = 0; y < transformed->getHeight(); y++) { 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[2] = transformed->b.ptrs; +#ifdef _OPENMP #pragma omp parallel for if (multiThread) +#endif for (int y = 0; y < transformed->getHeight(); y++) { for (int x = 0; x < transformed->getWidth(); x++) { diff --git a/rtengine/ipvibrance.cc b/rtengine/ipvibrance.cc index 86c942731..5f178b5c0 100644 --- a/rtengine/ipvibrance.cc +++ b/rtengine/ipvibrance.cc @@ -40,8 +40,6 @@ namespace rtengine using namespace procparams; -extern const Settings* settings; - void fillCurveArrayVib (DiagonalCurve* diagCurve, LUTf &outCurve) { @@ -170,7 +168,9 @@ void ImProcFunctions::vibrance (LabImage* lab) {static_cast(wiprof[2][0]), static_cast(wiprof[2][1]), static_cast(wiprof[2][2])} }; +#ifdef _OPENMP #pragma omp parallel if (multiThread) +#endif { #ifdef __SSE2__ @@ -179,7 +179,9 @@ void ImProcFunctions::vibrance (LabImage* lab) #endif float sathue[5], sathue2[4]; // adjust sat in function of hue +#ifdef _OPENMP #pragma omp for schedule(dynamic, 16) +#endif for (int i = 0; i < height; i++) { #ifdef __SSE2__ diff --git a/rtengine/previewimage.cc b/rtengine/previewimage.cc index f180469ad..1538ae5fa 100644 --- a/rtengine/previewimage.cc +++ b/rtengine/previewimage.cc @@ -77,7 +77,9 @@ PreviewImage::PreviewImage (const Glib::ustring &fname, const Glib::ustring &ext previewImage = Cairo::ImageSurface::create(Cairo::FORMAT_RGB24, w, h); previewImage->flush(); +#ifdef _OPENMP #pragma omp parallel for +#endif for (unsigned int i = 0; i < (unsigned int)(h); ++i) { const unsigned char *src = data + i * w * 3; 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); rtengine::Image8 output(fw, fh); rawImage.convertColorSpace(&image, params.icm, wb); +#ifdef _OPENMP #pragma omp parallel for schedule(dynamic, 10) +#endif for (int i = 0; i < fh; ++i) for (int j = 0; j < fw; ++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->flush(); - #pragma omp parallel for +#ifdef _OPENMP + #pragma omp parallel for +#endif for (unsigned int i = 0; i < (unsigned int)(h); i++) { const unsigned char *src = data + i * w * 3; unsigned char *dst = previewImage->get_data() + i * w * 4; diff --git a/rtengine/rawimage.cc b/rtengine/rawimage.cc index ced3fbb23..18848274a 100644 --- a/rtengine/rawimage.cc +++ b/rtengine/rawimage.cc @@ -127,7 +127,9 @@ void RawImage::get_colorsCoeff( float *pre_mul_, float *scale_mul_, float *cblac dsum[FC(1, 0) + 4] += (int)(((W + 1) / 2) * (H / 2)); dsum[FC(1, 1) + 4] += (int)((W / 2) * (H / 2)); +#ifdef _OPENMP #pragma omp parallel private(val) +#endif { double dsumthr[8]; memset(dsumthr, 0, sizeof dsumthr); @@ -142,7 +144,9 @@ void RawImage::get_colorsCoeff( float *pre_mul_, float *scale_mul_, float *cblac } float *tempdata = data[0]; +#ifdef _OPENMP #pragma omp for nowait +#endif for (size_t row = 0; row < H; row += 8) { size_t ymax = row + 8 < H ? row + 8 : H; @@ -176,7 +180,9 @@ skip_block2: } } +#ifdef _OPENMP #pragma omp critical +#endif { for (int c = 0; c < 4; c++) { dsum[c] += dsumthr[c]; @@ -194,7 +200,9 @@ skip_block2: } } else if(isXtrans()) { +#ifdef _OPENMP #pragma omp parallel +#endif { double dsumthr[8]; memset(dsumthr, 0, sizeof dsumthr); @@ -209,7 +217,9 @@ skip_block2: whitefloat[c] = this->get_white(c) - whiteThreshold; } +#ifdef _OPENMP #pragma omp for nowait +#endif for (size_t row = 0; row < H; row += 8) for (size_t col = 0; col < W ; col += 8) @@ -239,7 +249,9 @@ skip_block3: ; } +#ifdef _OPENMP #pragma omp critical +#endif { for (int c = 0; c < 8; c++) { @@ -716,7 +728,9 @@ float** RawImage::compress_image(unsigned int frameNum, bool freeImage) // copy pixel raw data: the compressed format earns space if( float_raw_image ) { +#ifdef _OPENMP #pragma omp parallel for +#endif for (int row = 0; row < height; row++) for (int col = 0; col < width; col++) { @@ -726,21 +740,27 @@ float** RawImage::compress_image(unsigned int frameNum, bool freeImage) delete [] float_raw_image; float_raw_image = nullptr; } else if (filters != 0 && !isXtrans()) { +#ifdef _OPENMP #pragma omp parallel for +#endif for (int row = 0; row < height; row++) for (int col = 0; col < width; col++) { this->data[row][col] = image[row * width + col][FC(row, col)]; } } else if (isXtrans()) { +#ifdef _OPENMP #pragma omp parallel for +#endif for (int row = 0; row < height; row++) for (int col = 0; col < width; col++) { this->data[row][col] = image[row * width + col][XTRANSFC(row, col)]; } } else if (colors == 1) { +#ifdef _OPENMP #pragma omp parallel for +#endif for (int row = 0; row < height; row++) for (int col = 0; col < width; col++) { @@ -751,7 +771,9 @@ float** RawImage::compress_image(unsigned int frameNum, bool freeImage) height -= top_margin; width -= left_margin; } +#ifdef _OPENMP #pragma omp parallel for +#endif for (int row = 0; row < height; row++) for (int col = 0; col < width; col++) { diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index b59e8ecab..f551eb0dc 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -3407,7 +3407,9 @@ void RawImageSource::cfaboxblur(RawImage *riFlatFile, float* cfablur, int boxH, } +#ifdef _OPENMP #pragma omp single +#endif for (int col = W - (W % 8); col < W; col++) { int len = boxH / 2 + 1; diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index dd844ad5c..46f1a91c8 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -335,13 +335,17 @@ private: LUTf gamcurve (65536, 0); float gam, gamthresh, gamslope; ipf.RGB_denoise_infoGamCurve (params.dirpyrDenoise, imgsrc->isRAW(), gamcurve, gam, gamthresh, gamslope); +#ifdef _OPENMP #pragma omp parallel +#endif { Imagefloat *origCropPart;//init auto noise origCropPart = new Imagefloat (crW, crH);//allocate memory Imagefloat *provicalc = new Imagefloat ((crW + 1) / 2, (crH + 1) / 2); //for denoise curves int skipP = 1; +#ifdef _OPENMP #pragma omp for schedule(dynamic) collapse(2) nowait +#endif for (int wcr = 0; wcr < numtiles_W; wcr++) { for (int hcr = 0; hcr < numtiles_H; hcr++) { @@ -557,13 +561,17 @@ private: coordH[0] = begH; coordH[1] = fh / 2 - crH / 2; coordH[2] = fh - crH - begH; +#ifdef _OPENMP #pragma omp parallel +#endif { Imagefloat *origCropPart;//init auto noise origCropPart = new Imagefloat (crW, crH);//allocate memory Imagefloat *provicalc = new Imagefloat ((crW + 1) / 2, (crH + 1) / 2); //for denoise curves +#ifdef _OPENMP #pragma omp for schedule(dynamic) collapse(2) nowait +#endif for (int wcr = 0; wcr <= 2; wcr++) { for (int hcr = 0; hcr <= 2; hcr++) { @@ -807,7 +815,9 @@ private: if (denoiseParams.enabled && (noiseLCurve || noiseCCurve )) { // we only need image reduced to 1/4 here calclum = new Imagefloat ((fw + 1) / 2, (fh + 1) / 2); //for luminance denoise curve +#ifdef _OPENMP #pragma omp parallel for +#endif for (int ii = 0; ii < fh; ii += 2) { for (int jj = 0; jj < fw; jj += 2) { @@ -1031,7 +1041,9 @@ private: hist16thr[ (int) ((labView->L[i][j]))]++; } +#ifdef _OPENMP #pragma omp critical +#endif { hist16 += hist16thr; } diff --git a/rtengine/tmo_fattal02.cc b/rtengine/tmo_fattal02.cc index 124cdbfb1..e4788f3f8 100644 --- a/rtengine/tmo_fattal02.cc +++ b/rtengine/tmo_fattal02.cc @@ -187,7 +187,9 @@ void gaussianBlur (const Array2Df& I, Array2Df& L, bool multithread) Array2Df T (width, height); //--- X blur +#ifdef _OPENMP #pragma omp parallel for shared(I, T) if(multithread) +#endif for ( int y = 0 ; y < height ; y++ ) { for ( int x = 1 ; x < width - 1 ; x++ ) { @@ -202,7 +204,9 @@ void gaussianBlur (const Array2Df& I, Array2Df& L, bool multithread) } //--- Y blur +#ifdef _OPENMP #pragma omp parallel for if(multithread) +#endif for ( int x = 0 ; x < width - 7 ; x += 8 ) { 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 ); double avgGrad = 0.0; // use double precision for large summations +#ifdef _OPENMP #pragma omp parallel for reduction(+:avgGrad) if(multithread) +#endif for ( int y = 0 ; y < height ; y++ ) { int n = (y == 0 ? 0 : y - 1); @@ -354,7 +360,9 @@ void calculateFiMatrix (Array2Df* FI, Array2Df* gradients[], fi[nlevels - 1] = new Array2Df (width, height); +#ifdef _OPENMP #pragma omp parallel for shared(fi) if(multithread) +#endif for ( int k = 0 ; k < width * height ; k++ ) { (*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 if ((k >= detail_level || k == nlevels - 1) && beta != 1.f) { //DEBUG_STR << "calculateFiMatrix: apply gradient to level " << k << endl; +#ifdef _OPENMP #pragma omp parallel for shared(fi,avgGrad) if(multithread) +#endif for ( int y = 0; y < height; y++ ) { for ( int x = 0; x < width; x++ ) { 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 maxLum = Y (0, 0); +#ifdef _OPENMP #pragma omp parallel for reduction(max:maxLum) if(multithread) +#endif for ( int i = 0 ; i < size ; i++ ) { maxLum = std::max (maxLum, Y (i)); @@ -464,13 +476,17 @@ void tmo_fattal02 (size_t width, Array2Df* H = new Array2Df (width, height); float temp = 100.f / maxLum; float eps = 1e-4f; +#ifdef _OPENMP #pragma omp parallel if(multithread) +#endif { #ifdef __SSE2__ vfloat epsv = F2V (eps); vfloat tempv = F2V (temp); #endif +#ifdef _OPENMP #pragma omp for schedule(dynamic,16) +#endif for (size_t i = 0 ; i < height ; ++i) { 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 // side accordingly (basically fft solver assumes U(-1) = U(1), whereas zero // Neumann conditions assume U(-1)=U(0)), see also divergence calculation +#ifdef _OPENMP #pragma omp parallel for if(multithread) +#endif for ( size_t y = 0 ; y < height ; y++ ) { // 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; // calculate divergence +#ifdef _OPENMP #pragma omp parallel for if(multithread) +#endif for ( size_t y = 0; y < height; ++y ) { for ( size_t x = 0; x < width; ++x ) { @@ -626,12 +646,16 @@ void tmo_fattal02 (size_t width, delete Gx; delete FI; +#ifdef _OPENMP #pragma omp parallel if(multithread) +#endif { #ifdef __SSE2__ vfloat gammav = F2V (gamma); #endif +#ifdef _OPENMP #pragma omp for schedule(dynamic,16) +#endif for (size_t i = 0 ; i < height ; i++) { 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 // need to scale input values to get the right transformation +#ifdef _OPENMP #pragma omp parallel for if(multithread) +#endif for (int y = 1 ; y < height - 1 ; y++ ) 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 float factor = (1.0f / ((height - 1) * (width - 1))); +#ifdef _OPENMP #pragma omp parallel for if(multithread) +#endif for (int y = 0 ; y < height ; y++ ) 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 l1 = get_lambda (height); std::vector l2 = get_lambda (width); +#ifdef _OPENMP #pragma omp parallel for if(multithread) +#endif for (int y = 0 ; y < height ; y++ ) { 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)) //DEBUG_STR << "solve_pde_fft: removing constant from solution" << std::endl; float max = 0.f; +#ifdef _OPENMP #pragma omp parallel for reduction(max:max) if(multithread) +#endif for (int i = 0; i < width * height; i++) { max = std::max (max, (*U) (i)); } +#ifdef _OPENMP #pragma omp parallel for if(multithread) +#endif for (int i = 0; i < width * height; i++) { (*U) (i) -= max; diff --git a/rtgui/cropwindow.cc b/rtgui/cropwindow.cc index 50d8f9543..345b3e583 100644 --- a/rtgui/cropwindow.cc +++ b/rtgui/cropwindow.cc @@ -1493,7 +1493,9 @@ void CropWindow::expose (Cairo::RefPtr cr) } } +#ifdef _OPENMP #pragma omp critical +#endif { if(maxthrstdDev_L2 > maxstdDev_L2) { maxstdDev_L2 = maxthrstdDev_L2; From 5ddbefd8c49159535bf0f493557e141587a130fb Mon Sep 17 00:00:00 2001 From: heckflosse Date: Wed, 6 Feb 2019 13:25:57 +0100 Subject: [PATCH 11/41] Do not take logarithm of values <= 0, fixes #5164 --- rtengine/EdgePreservingDecomposition.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rtengine/EdgePreservingDecomposition.cc b/rtengine/EdgePreservingDecomposition.cc index d946fe0f3..6505cedab 100644 --- a/rtengine/EdgePreservingDecomposition.cc +++ b/rtengine/EdgePreservingDecomposition.cc @@ -894,12 +894,12 @@ void EdgePreservingDecomposition::CompressDynamicRange(float *Source, float Scal #endif for(int ii = 0; ii < n - 3; ii += 4) { - _mm_storeu_ps( &Source[ii], xlogf(LVFU(Source[ii]) + epsv)); + _mm_storeu_ps( &Source[ii], xlogf(vmaxf(LVFU(Source[ii]), ZEROV) + epsv)); } } for(int ii = n - (n % 4); ii < n; ii++) { - Source[ii] = xlogf(Source[ii] + eps); + Source[ii] = xlogf(std::max(Source[ii], 0.f) + eps); } #else @@ -908,7 +908,7 @@ void EdgePreservingDecomposition::CompressDynamicRange(float *Source, float Scal #endif for(int ii = 0; ii < n; ii++) { - Source[ii] = xlogf(Source[ii] + eps); + Source[ii] = xlogf(std::max(Source[ii], 0.f) + eps); } #endif From 07f62ef1682f953f5bc60f1d7b747038f58427f5 Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Wed, 6 Feb 2019 21:56:57 +0100 Subject: [PATCH 12/41] rtexif updated to exiftool-11.26 --- rtexif/canonattribs.cc | 3 ++- rtexif/nikonattribs.cc | 3 +++ rtexif/sonyminoltaattribs.cc | 18 +++++++++++++++--- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/rtexif/canonattribs.cc b/rtexif/canonattribs.cc index 940206e31..987743a93 100644 --- a/rtexif/canonattribs.cc +++ b/rtexif/canonattribs.cc @@ -900,7 +900,8 @@ public: {495, "Sigma 24-70mm F2.8 DG OS HSM | A"}, {496, "Canon EF 200-400mm f/4L IS USM"}, {499, "Canon EF 200-400mm f/4L IS USM + 1.4x"}, - {502, "Canon EF 28mm f/2.8 IS USM"}, + {502, "Canon EF 28mm f/2.8 IS USM or Tamron Lens"}, + {502, "Tamron 35mm f/1.8 Di VC USD (F012)"}, {503, "Canon EF 24mm f/2.8 IS USM"}, {504, "Canon EF 24-70mm f/4L IS USM"}, {505, "Canon EF 35mm f/2 IS USM"}, diff --git a/rtexif/nikonattribs.cc b/rtexif/nikonattribs.cc index 84ebd22be..da47cf99a 100644 --- a/rtexif/nikonattribs.cc +++ b/rtexif/nikonattribs.cc @@ -999,6 +999,7 @@ const std::map NALensDataInterpreter::lenses = { {"A1 40 18 37 2C 34 A3 06", "AF-S DX Nikkor 10-24mm f/3.5-4.5G ED"}, {"A1 41 19 31 2C 2C 4B 06", "Sigma 10-20mm f/3.5 EX DC HSM"}, {"A1 54 55 55 0C 0C BC 06", "AF-S Nikkor 58mm f/1.4G"}, + {"A2 38 5C 8E 34 40 CD 86", "AF-P DX Nikkor 70-300mm f/4.5-6.3G VR"}, {"A2 40 2D 53 2C 3C BD 0E", "AF-S DX Nikkor 18-55mm f/3.5-5.6G VR II"}, {"A2 48 5C 80 24 24 A4 0E", "AF-S Nikkor 70-200mm f/2.8G ED VR II"}, {"A3 38 5C 8E 34 40 CE 0E", "AF-P DX Nikkor 70-300mm f/4.5-6.3G ED"}, @@ -1075,11 +1076,13 @@ const std::map NALensDataInterpreter::lenses = { {"C8 54 62 62 0C 0C 4B 46", "Sigma 85mm f/1.4 DG HSM | A"}, {"C9 48 37 5C 24 24 4B 4E", "Sigma 24-70mm f/2.8 DG OS HSM | A"}, {"CA 48 27 3E 24 24 DF 4E", "Tamron SP 15-30mm f/2.8 Di VC USD G2 (A041)"}, + {"CB 3C 2B 44 24 31 DF 46", "Tamron 17-35mm f/2.8-4 Di OSD (A037)"}, {"CC 4C 50 68 14 14 4B 06", "Sigma 50-100mm f/1.8 DC HSM | A"}, {"CD 3D 2D 70 2E 3C 4B 0E", "Sigma 18-125mm f/3.8-5.6 DC OS HSM"}, {"CE 34 76 A0 38 40 4B 0E", "Sigma 150-500mm f/5-6.3 DG OS APO HSM"}, {"CE 47 37 5C 25 25 DF 4E", "Tamron SP 24-70mm f/2.8 Di VC USD G2 (A032)"}, {"CF 38 6E 98 34 3C 4B 0E", "Sigma APO 120-400mm f/4.5-5.6 DG OS HSM"}, + {"CF 47 5C 8E 31 3D DF 0E", "Tamron SP 70-300mm f/4-5.6 Di VC USD (A030)"}, {"DC 48 19 19 24 24 4B 06", "Sigma 10mm f/2.8 EX DC HSM Fisheye"}, {"DE 54 50 50 0C 0C 4B 06", "Sigma 50mm f/1.4 EX DG HSM"}, {"E0 3C 5C 8E 30 3C 4B 06", "Sigma 70-300mm f/4-5.6 APO DG Macro HSM"}, diff --git a/rtexif/sonyminoltaattribs.cc b/rtexif/sonyminoltaattribs.cc index 04cb6a548..6dc2406b9 100644 --- a/rtexif/sonyminoltaattribs.cc +++ b/rtexif/sonyminoltaattribs.cc @@ -895,6 +895,9 @@ public: {6553, "Sigma 30mm f/1.4 DC DN | C"}, {6553, "Sigma 85mm f/1.4 DG HSM | A"}, {6553, "Sigma 16mm f/1.4 DC DN | C"}, + {6553, "Sigma 105mm f/1.4 DG HSM | A"}, + {6553, "Sigma 56mm f/1.4 DC DN | C"}, + {6553, "Sigma 70-200mm f/2.8 DG OS HSM | S"}, {6553, "Sigma 70mm f/2.8 DG MACRO | A"}, {6553, "Tamron 18-200mm f/3.5-6.3 Di III VC"}, {6553, "Tamron 28-75mm f/2.8 Di III RXD"}, @@ -905,6 +908,7 @@ public: {6553, "Voigtlander MACRO APO-LANTHAR 65mm f/2 Aspherical"}, {6553, "Voigtlander NOKTON 40mm f/1.2 Aspherical"}, {6553, "Voigtlander NOKTON classic 35mm f/1.4"}, + {6553, "Voigtlander MACRO APO-LANTHAR 110mm f/2.5"}, {6553, "Voigtlander COLOR-SKOPAR 21mm f/3.5 Aspherical"}, {6553, "Zeiss Touit 12mm f/2.8"}, {6553, "Zeiss Touit 32mm f/1.8"}, @@ -1116,6 +1120,9 @@ public: {65535, "Sigma 30mm f/1.4 DC DN | C"}, {65535, "Sigma 85mm f/1.4 DG HSM | A"}, {65535, "Sigma 16mm f/1.4 DC DN | C"}, + {65535, "Sigma 105mm f/1.4 DG HSM | A"}, + {65535, "Sigma 56mm f/1.4 DC DN | C"}, + {65535, "Sigma 70-200mm f/2.8 DG OS HSM | S"}, {65535, "Sigma 70mm f/2.8 DG MACRO | A"}, {65535, "Tamron 18-200mm f/3.5-6.3 Di III VC"}, {65535, "Tamron 28-75mm f/2.8 Di III RXD"}, @@ -1126,6 +1133,7 @@ public: {65535, "Voigtlander MACRO APO-LANTHAR 65mm f/2 Aspherical"}, {65535, "Voigtlander NOKTON 40mm f/1.2 Aspherical"}, {65535, "Voigtlander NOKTON classic 35mm f/1.4"}, + {65535, "Voigtlander MACRO APO-LANTHAR 110mm f/2.5"}, {65535, "Voigtlander COLOR-SKOPAR 21mm f/3.5 Aspherical"}, {65535, "Zeiss Touit 12mm f/2.8"}, {65535, "Zeiss Touit 32mm f/1.8"}, @@ -1146,7 +1154,7 @@ public: {65535, "Samyang 500mm Mirror f/8.0"}, {65535, "Pentacon Auto 135mm f/2.8"}, {65535, "Pentacon Auto 29mm f/2.8"}, - {65535, "Helios 44-2 58mm f/2.0"} + {65535, "Helios 44-2 58mm f/2.0"}, }; } @@ -1269,13 +1277,13 @@ public: choices.insert (p_t (49236, "Zeiss Loxia 25mm f/2.4")); choices.insert (p_t (49457, "Tamron 28-75mm f/2.8 Di III RXD")); choices.insert (p_t (50480, "Sigma 30mm f/1.4 DC DN | C")); - choices.insert (p_t (50481, "Sigma 50mm f/1.4 DG HSM | A + MC-11")); + choices.insert (p_t (50481, "Sigma 50mm f/1.4 DG HSM | A")); choices.insert (p_t (50482, "Sigma 18-300mm f/3.5-6.3 DC MACRO OS HSM | C + MC-11")); choices.insert (p_t (50483, "Sigma 18-35mm f/1.8 DC HSM | A + MC-11")); choices.insert (p_t (50484, "Sigma 24-35mm f/2 DG HSM | A + MC-11")); choices.insert (p_t (50486, "Sigma 150-600mm f/5-6.3 DG OS HSM | C + MC-11")); choices.insert (p_t (50487, "Sigma 20mm f/1.4 DG HSM | A + MC-11")); - choices.insert (p_t (50488, "Sigma 35mm f/1.4 DG HSM | A + MC-11")); + choices.insert (p_t (50488, "Sigma 35mm f/1.4 DG HSM | A")); choices.insert (p_t (50489, "Sigma 150-600mm f/5-6.3 DG OS HSM | S + MC-11")); choices.insert (p_t (50490, "Sigma 120-300mm f/2.8 DG OS HSM | S + MC-11")); choices.insert (p_t (50492, "Sigma 24-105mm f/4 DG OS HSM | A + MC-11")); @@ -1284,6 +1292,9 @@ public: choices.insert (p_t (50499, "Sigma 85mm f/1.4 DG HSM | A")); choices.insert (p_t (50501, "Sigma 100-400mm f/5-6.3 DG OS HSM | C + MC-11")); choices.insert (p_t (50503, "Sigma 16mm f/1.4 DC DN | C")); + choices.insert (p_t (50507, "Sigma 105mm f/1.4 DG HSM | A")); + choices.insert (p_t (50508, "Sigma 56mm f/1.4 DC DN | C")); + choices.insert (p_t (50512, "Sigma 70-200mm f/2.8 DG OS HSM | S")); choices.insert (p_t (50513, "Sigma 70mm f/2.8 DG MACRO | A")); choices.insert (p_t (50992, "Voigtlander SUPER WIDE-HELIAR 15mm f/4.5 III")); choices.insert (p_t (50993, "Voigtlander HELIAR-HYPER WIDE 10mm f/5.6")); @@ -1291,6 +1302,7 @@ public: choices.insert (p_t (50995, "Voigtlander MACRO APO-LANTHAR 65mm f/2 Aspherical")); choices.insert (p_t (50996, "Voigtlander NOKTON 40mm f/1.2 Aspherical")); choices.insert (p_t (50997, "Voigtlander NOKTON classic 35mm f/1.4")); + choices.insert (p_t (50998, "Voigtlander MACRO APO-LANTHAR 110mm f/2.5")); choices.insert (p_t (50999, "Voigtlander COLOR-SKOPAR 21mm f/3.5 Aspherical")); choices.insert (p_t (51505, "Samyang AF 14mm f/2.8 FE or Samyang AF 35mm f/2.8 FE")); choices.insert (p_t (51505, "Samyang AF 35mm f/2.8 FE")); From 9802feee8638421a40504b4defdd696021d7ad7d Mon Sep 17 00:00:00 2001 From: heckflosse Date: Sat, 9 Feb 2019 14:34:56 +0100 Subject: [PATCH 13/41] Fix crash in cropwindow.cc, fixes #5169 --- rtgui/cropwindow.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/rtgui/cropwindow.cc b/rtgui/cropwindow.cc index 345b3e583..0e6530882 100644 --- a/rtgui/cropwindow.cc +++ b/rtgui/cropwindow.cc @@ -1055,13 +1055,13 @@ void CropWindow::pointerMoved (int bstate, int x, int y) // pmlistener->pointerMoved (true, mx, my, pix[0], pix[1], pix[2]); int imwidth = cropHandler.cropPixbuftrue->get_width(); int imheight = cropHandler.cropPixbuftrue->get_height(); - guint8* pix = cropHandler.cropPixbuftrue->get_pixels() + vy * cropHandler.cropPixbuftrue->get_rowstride() + vx * 3; - int rval = pix[0]; - int gval = pix[1]; - int bval = pix[2]; - bool isRaw = false; if (vx < imwidth && vy < imheight) { + guint8* pix = cropHandler.cropPixbuftrue->get_pixels() + vy * cropHandler.cropPixbuftrue->get_rowstride() + vx * 3; + int rval = pix[0]; + int gval = pix[1]; + int bval = pix[2]; + bool isRaw = false; rtengine::StagedImageProcessor* ipc = iarea->getImProcCoordinator(); if(ipc) { procparams::ProcParams params; From 1813d880d024095f14bec898fff02f80823bbe75 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Mon, 11 Feb 2019 20:35:52 +0100 Subject: [PATCH 14/41] Fix segfault on very large files, #5170 --- rtengine/improcfun.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtengine/improcfun.cc b/rtengine/improcfun.cc index fb8093de9..3c8b0d430 100644 --- a/rtengine/improcfun.cc +++ b/rtengine/improcfun.cc @@ -5376,7 +5376,7 @@ void ImProcFunctions::getAutoExp (const LUTu &histogram, int histcompr, double histogram.getSumAndAverage (sum, ave); //find median of luminance - int median = 0, count = histogram[0]; + size_t median = 0, count = histogram[0]; while (count < sum / 2) { median++; From ff00226d9751745e95541ab15a7d2bfc81ff379f Mon Sep 17 00:00:00 2001 From: heckflosse Date: Mon, 11 Feb 2019 22:40:31 +0100 Subject: [PATCH 15/41] Fix segfault opining very large jpeg files in editor, #5170 --- rtengine/iimage.h | 32 ++++++++++++++++---------------- rtengine/image8.cc | 2 +- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/rtengine/iimage.h b/rtengine/iimage.h index 3549d4dae..9cb303946 100644 --- a/rtengine/iimage.h +++ b/rtengine/iimage.h @@ -139,7 +139,7 @@ protected: AlignedBuffer ab; public: #if CHECK_BOUNDS - int width_, height_; + size_t width_, height_; #endif T** ptrs; @@ -149,7 +149,7 @@ public: PlanarPtr() : ptrs (nullptr) {} #endif - bool resize(int newSize) + bool resize(size_t newSize) { if (ab.resize(newSize)) { ptrs = ab.data; @@ -167,7 +167,7 @@ public: ptrs = tmpsPtrs; #if CHECK_BOUNDS - int tmp = other.width_; + size_t tmp = other.width_; other.width_ = width_; width_ = tmp; tmp = other.height_; @@ -176,7 +176,7 @@ public: #endif } - T*& operator() (unsigned row) + T*& operator() (size_t row) { #if CHECK_BOUNDS assert (row < height_); @@ -184,7 +184,7 @@ public: return ptrs[row]; } // Will send back the start of a row, starting with a red, green or blue value - T* operator() (unsigned row) const + T* operator() (size_t row) const { #if CHECK_BOUNDS assert (row < height_); @@ -192,14 +192,14 @@ public: return ptrs[row]; } // Will send back a value at a given row, col position - T& operator() (unsigned row, unsigned col) + T& operator() (size_t row, size_t col) { #if CHECK_BOUNDS assert (row < height_ && col < width_); #endif return ptrs[row][col]; } - const T operator() (unsigned row, unsigned col) const + const T operator() (size_t row, size_t col) const { #if CHECK_BOUNDS assert (row < height_ && col < width_); @@ -1180,10 +1180,10 @@ class ChunkyPtr { private: T* ptr; - int width; + ssize_t width; public: #if CHECK_BOUNDS - int width_, height_; + size_t width_, height_; #endif #if CHECK_BOUNDS @@ -1191,7 +1191,7 @@ public: #else ChunkyPtr() : ptr (nullptr), width(-1) {} #endif - void init(T* base, int w = -1) + void init(T* base, ssize_t w = -1) { ptr = base; width = w; @@ -1202,12 +1202,12 @@ public: other.ptr = ptr; ptr = tmpsPtr; - int tmpWidth = other.width; + ssize_t tmpWidth = other.width; other.width = width; width = tmpWidth; #if CHECK_BOUNDS - int tmp = other.width_; + size_t tmp = other.width_; other.width_ = width_; width_ = tmp; tmp = other.height_; @@ -1218,7 +1218,7 @@ public: } // Will send back the start of a row, starting with a red, green or blue value - T* operator() (unsigned row) const + T* operator() (size_t row) const { #if CHECK_BOUNDS assert (row < height_); @@ -1226,14 +1226,14 @@ public: return &ptr[3 * (row * width)]; } // Will send back a value at a given row, col position - T& operator() (unsigned row, unsigned col) + T& operator() (size_t row, size_t col) { #if CHECK_BOUNDS assert (row < height_ && col < width_); #endif return ptr[3 * (row * width + col)]; } - const T operator() (unsigned row, unsigned col) const + const T operator() (size_t row, size_t col) const { #if CHECK_BOUNDS assert (row < height_ && col < width_); @@ -1315,7 +1315,7 @@ public: b.height_ = height; #endif - abData.resize(width * height * 3u); + abData.resize((size_t)width * (size_t)height * (size_t)3); if (!abData.isEmpty()) { data = abData.data; diff --git a/rtengine/image8.cc b/rtengine/image8.cc index edced2fe5..513b0049e 100644 --- a/rtengine/image8.cc +++ b/rtengine/image8.cc @@ -69,7 +69,7 @@ void Image8::setScanline (int row, unsigned char* buffer, int bps, unsigned int data[row * width * 3 + 3 * i] = data[row * width * 3 + 3 * i + 1] = data[row * width * 3 + 3 * i + 2] = buffer[i]; } } else { - memcpy (data + row * width * 3u, buffer, width * 3); + memcpy (data + (uint64_t)row * (uint64_t)width * (uint64_t)3u, buffer, width * 3); } break; From 2d167d923b66655e612f50dc77100a1145b19e1b Mon Sep 17 00:00:00 2001 From: heckflosse Date: Wed, 13 Feb 2019 00:36:57 +0100 Subject: [PATCH 16/41] Reduce peak memorey usage for processing non raw files in queue by width * height * 3 * bytedepth, #5170 --- rtengine/stdimagesource.cc | 5 +++++ rtengine/stdimagesource.h | 1 + 2 files changed, 6 insertions(+) diff --git a/rtengine/stdimagesource.cc b/rtengine/stdimagesource.cc index 37d438863..298cf16ef 100644 --- a/rtengine/stdimagesource.cc +++ b/rtengine/stdimagesource.cc @@ -338,5 +338,10 @@ ColorTemp StdImageSource::getSpotWB (std::vector &red, std::vectorallocate(0, 0); +}; + + } diff --git a/rtengine/stdimagesource.h b/rtengine/stdimagesource.h index 500641f72..8f16880dc 100644 --- a/rtengine/stdimagesource.h +++ b/rtengine/stdimagesource.h @@ -101,6 +101,7 @@ public: void getRawValues(int x, int y, int rotate, int &R, int &G, int &B) override { R = G = B = 0;} + void flushRGB () override; }; } From 8eba1c40a65b2f6e730f5e09d1f91edd6db55a13 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Wed, 13 Feb 2019 00:38:11 +0100 Subject: [PATCH 17/41] Fix segfaults when processing very large files in queue, #5170 --- rtengine/iimage.h | 17 ++++++++--------- rtengine/labimage.cc | 8 ++++---- rtengine/labimage.h | 2 +- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/rtengine/iimage.h b/rtengine/iimage.h index 9cb303946..3b518e223 100644 --- a/rtengine/iimage.h +++ b/rtengine/iimage.h @@ -215,7 +215,7 @@ class PlanarWhateverData : virtual public ImageDatas private: AlignedBuffer abData; - int rowstride; // Plan size, in bytes (all padding bytes included) + size_t rowstride; // Plan size, in bytes (all padding bytes included) public: T* data; @@ -228,7 +228,7 @@ public: } // Send back the row stride. WARNING: unit = byte, not element! - int getRowStride () const + size_t getRowStride () const { return rowstride; } @@ -259,7 +259,6 @@ public: * Can be safely used to reallocate an existing image */ void allocate (int W, int H) override { - if (W == width && H == height) { return; } @@ -591,8 +590,8 @@ class PlanarRGBData : virtual public ImageDatas private: AlignedBuffer abData; - int rowstride; // Plan size, in bytes (all padding bytes included) - int planestride; // Row length, in bytes (padding bytes included) + size_t rowstride; // Plan size, in bytes (all padding bytes included) + size_t planestride; // Row length, in bytes (padding bytes included) protected: T* data; @@ -602,18 +601,18 @@ public: PlanarPtr b; PlanarRGBData() : rowstride(0), planestride(0), data (nullptr) {} - PlanarRGBData(int w, int h) : rowstride(0), planestride(0), data (nullptr) + PlanarRGBData(size_t w, size_t h) : rowstride(0), planestride(0), data (nullptr) { allocate(w, h); } // Send back the row stride. WARNING: unit = byte, not element! - int getRowStride () const + size_t getRowStride () const { return rowstride; } // Send back the plane stride. WARNING: unit = byte, not element! - int getPlaneStride () const + size_t getPlaneStride () const { return planestride; } @@ -710,7 +709,7 @@ public: char *bluestart = (char*)(data) + 2 * planestride; for (int i = 0; i < height; ++i) { - int k = i * rowstride; + size_t k = i * rowstride; r(i) = (T*)(redstart + k); g(i) = (T*)(greenstart + k); b(i) = (T*)(bluestart + k); diff --git a/rtengine/labimage.cc b/rtengine/labimage.cc index f4e13049a..81b1a4303 100644 --- a/rtengine/labimage.cc +++ b/rtengine/labimage.cc @@ -64,7 +64,7 @@ void LabImage::getPipetteData (float &v1, float &v2, float &v3, int posX, int po v3 = n ? accumulator_b / float(n) : 0.f; } -void LabImage::allocLab(int w, int h) +void LabImage::allocLab(size_t w, size_t h) { L = new float*[h]; a = new float*[h]; @@ -73,19 +73,19 @@ void LabImage::allocLab(int w, int h) data = new float [w * h * 3]; float * index = data; - for (int i = 0; i < h; i++) { + for (size_t i = 0; i < h; i++) { L[i] = index + i * w; } index += w * h; - for (int i = 0; i < h; i++) { + for (size_t i = 0; i < h; i++) { a[i] = index + i * w; } index += w * h; - for (int i = 0; i < h; i++) { + for (size_t i = 0; i < h; i++) { b[i] = index + i * w; } } diff --git a/rtengine/labimage.h b/rtengine/labimage.h index 93f3887b6..28bb891a9 100644 --- a/rtengine/labimage.h +++ b/rtengine/labimage.h @@ -25,7 +25,7 @@ namespace rtengine class LabImage { private: - void allocLab(int w, int h); + void allocLab(size_t w, size_t h); public: int W, H; From d1e3085932ff1c78f42c48d6f1b14fa2c3319485 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Thu, 14 Feb 2019 13:11:27 +0100 Subject: [PATCH 18/41] Reduce peak memory usage of guided filter by width * height * 8 byte --- rtengine/guidedfilter.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/rtengine/guidedfilter.cc b/rtengine/guidedfilter.cc index 790245b20..1aad138e3 100644 --- a/rtengine/guidedfilter.cc +++ b/rtengine/guidedfilter.cc @@ -211,11 +211,13 @@ void guidedFilter(const array2D &guide, const array2D &src, array2 f_mean(meanb, b, r1); DEBUG_DUMP(meanb); + blur_buf.resize(0); // frees W * H * 4 byte + array2D meanA(W, H); f_upsample(meanA, meana); DEBUG_DUMP(meanA); - array2D meanB(W, H); + array2D &meanB = q; f_upsample(meanB, meanb); DEBUG_DUMP(meanB); From 788d62e5d12e1e9defb42f194f6db936d79dfde5 Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Thu, 14 Feb 2019 13:50:57 +0100 Subject: [PATCH 19/41] Renamed appdata filename in CMakeLists --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 72c6a510b..c1141caa4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -516,7 +516,7 @@ if(WIN32) endif() if(UNIX) - install(FILES rawtherapee.appdata.xml DESTINATION "${APPDATADIR}") + install(FILES com.rawtherapee.RawTherapee.appdata.xml DESTINATION "${APPDATADIR}") endif() # check whether the used version of lensfun has lfDatabase::LoadDirectory From b65e3c32a6cbd262000e1d1e99c506567179c29b Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Thu, 14 Feb 2019 13:55:20 +0100 Subject: [PATCH 20/41] Improved support for Sigma SD14 Closes #5173 --- rtengine/camconst.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/rtengine/camconst.json b/rtengine/camconst.json index 55acf8307..d609c7aed 100644 --- a/rtengine/camconst.json +++ b/rtengine/camconst.json @@ -2244,9 +2244,8 @@ Camera constants: "make_model": "Sigma SD14", "dcraw_matrix": [ 16411,-4764,-2383,8110,2603,-645,3135,3878,1984 ], // experimental inverted icc wp12 - build with BL=15 //"dcraw_matrix": [ 13804,-4156,-1896,6917,1909,-431,2768,2989,1741 ], // experimental inverted icc wp10 - build with BL=15 - "ranges": { "black": 0, "white": 16383 }, // peripheral black stripes give BL around 37 - "raw_crop": [ 0, 0, -0, -0 ] - //"raw_crop": [ 18, 12, 2652, 1768 ] + "ranges": { "black": 15, "white": 7000 }, + "raw_crop": [ 18, 12, 2652, 1768 ] }, { // Quality C, correction for frame width From 43a80b03416e0903c8849b1dab06f967b87e8541 Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Thu, 14 Feb 2019 14:12:28 +0100 Subject: [PATCH 21/41] Further AppData changes Removed '.desktop' suffix from id https://github.com/Beep6581/RawTherapee/commit/ad6033ff1f83b65c29a9d748873f7f6860e44d28#r32317629 Updated component type. --- com.rawtherapee.RawTherapee.appdata.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/com.rawtherapee.RawTherapee.appdata.xml b/com.rawtherapee.RawTherapee.appdata.xml index 2ad130600..0dace6772 100644 --- a/com.rawtherapee.RawTherapee.appdata.xml +++ b/com.rawtherapee.RawTherapee.appdata.xml @@ -1,6 +1,6 @@ - - com.rawtherapee.RawTherapee.desktop + + com.rawtherapee.RawTherapee RawTherapee An advanced raw photo development program Program pro konverzi a zpracování digitálních raw fotografií From 9e1fcb31ef3a1ab26cfae68b11d8c99ca4fc8657 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Thu, 14 Feb 2019 15:30:05 +0100 Subject: [PATCH 22/41] guided filter: further small reduction of peak memory usage --- rtengine/guidedfilter.cc | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/rtengine/guidedfilter.cc b/rtengine/guidedfilter.cc index 1aad138e3..78f6306ad 100644 --- a/rtengine/guidedfilter.cc +++ b/rtengine/guidedfilter.cc @@ -32,7 +32,8 @@ #include "boxblur.h" #include "rescale.h" #include "imagefloat.h" - +#define BENCHMARK +#include "StopWatch.h" namespace rtengine { #if 0 @@ -78,6 +79,7 @@ int calculate_subsampling(int w, int h, int r) void guidedFilter(const array2D &guide, const array2D &src, array2D &dst, int r, float epsilon, bool multithread, int subsampling) { + BENCHFUN const int W = src.width(); const int H = src.height(); @@ -135,16 +137,6 @@ void guidedFilter(const array2D &guide, const array2D &src, array2 const array2D &p = src; array2D &q = dst; - AlignedBuffer blur_buf(I.width() * I.height()); - const auto f_mean = - [&](array2D &d, array2D &s, int rad) -> void - { - rad = LIM(rad, 0, (min(s.width(), s.height()) - 1) / 2 - 1); - float **src = s; - float **dst = d; - boxblur(src, dst, blur_buf.data, rad, rad, s.width(), s.height()); - }; - const auto f_subsample = [=](array2D &d, const array2D &s) -> void { @@ -153,8 +145,18 @@ void guidedFilter(const array2D &guide, const array2D &src, array2 const auto f_upsample = f_subsample; - const int w = W / subsampling; - const int h = H / subsampling; + const size_t w = W / subsampling; + const size_t h = H / subsampling; + + AlignedBuffer blur_buf(w * h); + const auto f_mean = + [&](array2D &d, array2D &s, int rad) -> void + { + rad = LIM(rad, 0, (min(s.width(), s.height()) - 1) / 2 - 1); + float **src = s; + float **dst = d; + boxblur(src, dst, blur_buf.data, rad, rad, s.width(), s.height()); + }; array2D I1(w, h); array2D p1(w, h); @@ -203,6 +205,9 @@ void guidedFilter(const array2D &guide, const array2D &src, array2 apply(SUBMUL, b, a, meanI, meanp); DEBUG_DUMP(b); + meanI.free(); // frees w * h * 4 byte + meanp.free(); // frees w * h * 4 byte + array2D &meana = a; f_mean(meana, a, r1); DEBUG_DUMP(meana); @@ -211,7 +216,7 @@ void guidedFilter(const array2D &guide, const array2D &src, array2 f_mean(meanb, b, r1); DEBUG_DUMP(meanb); - blur_buf.resize(0); // frees W * H * 4 byte + blur_buf.resize(0); // frees w * h * 4 byte array2D meanA(W, H); f_upsample(meanA, meana); From 6292b4e994872b9678290dc58e086b8246fb8f22 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Thu, 14 Feb 2019 15:46:19 +0100 Subject: [PATCH 23/41] Panasonic DC-GH5S raw support. Thanks to @agriggio for the patch, fixes #4675 --- rtengine/dcraw.cc | 104 ++++++++++++++++++++++++++++++++++++---------- rtengine/dcraw.h | 13 +++++- 2 files changed, 94 insertions(+), 23 deletions(-) diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc index af5d38c6c..c4118dd19 100644 --- a/rtengine/dcraw.cc +++ b/rtengine/dcraw.cc @@ -2672,43 +2672,92 @@ void CLASS canon_rmf_load_raw() maximum = curve[0x3ff]; } -unsigned CLASS pana_bits_t::operator() (int nbits) +unsigned CLASS pana_bits_t::operator() (int nbits, unsigned *bytes) { /*RT static uchar buf[0x4000]; */ /*RT static int vbits;*/ int byte; - if (!nbits) return vbits=0; + if (!nbits && !bytes) return vbits=0; if (!vbits) { fread (buf+load_flags, 1, 0x4000-load_flags, ifp); fread (buf, 1, load_flags, ifp); } - vbits = (vbits - nbits) & 0x1ffff; - byte = vbits >> 3 ^ 0x3ff0; - return (buf[byte] | buf[byte+1] << 8) >> (vbits & 7) & ~(-1 << nbits); + if (encoding == 5) { + for (byte = 0; byte < 16; byte++) + { + bytes[byte] = buf[vbits++]; + vbits &= 0x3FFF; + } + return 0; + } else { + vbits = (vbits - nbits) & 0x1ffff; + byte = vbits >> 3 ^ 0x3ff0; + return (buf[byte] | buf[byte+1] << 8) >> (vbits & 7) & ~(-1 << nbits); + } } void CLASS panasonic_load_raw() { - pana_bits_t pana_bits(ifp,load_flags); + pana_bits_t pana_bits(ifp,load_flags, RT_pana_info.encoding); int row, col, i, j, sh=0, pred[2], nonz[2]; + unsigned bytes[16] = {}; + ushort *raw_block_data; - pana_bits(0); - for (row=0; row < height; row++) - for (col=0; col < raw_width; col++) { - if ((i = col % 14) == 0) - pred[0] = pred[1] = nonz[0] = nonz[1] = 0; - if (i % 3 == 2) sh = 4 >> (3 - pana_bits(2)); - if (nonz[i & 1]) { - if ((j = pana_bits(8))) { - if ((pred[i & 1] -= 0x80 << sh) < 0 || sh == 4) - pred[i & 1] &= ~(-1 << sh); - pred[i & 1] += j << sh; - } - } else if ((nonz[i & 1] = pana_bits(8)) || i > 11) - pred[i & 1] = nonz[i & 1] << 4 | pana_bits(4); - if ((RAW(row,col) = pred[col & 1]) > 4098 && col < width) derror(); + pana_bits(0, 0); + int enc_blck_size = RT_pana_info.bpp == 12 ? 10 : 9; + if (RT_pana_info.encoding == 5) { + for (row = 0; row < raw_height; row++) + { + raw_block_data = raw_image + row * raw_width; + + for (col = 0; col < raw_width; col += enc_blck_size) { + pana_bits(0, bytes); + + if (RT_pana_info.bpp == 12) { + raw_block_data[col] = ((bytes[1] & 0xF) << 8) + bytes[0]; + raw_block_data[col + 1] = 16 * bytes[2] + (bytes[1] >> 4); + raw_block_data[col + 2] = ((bytes[4] & 0xF) << 8) + bytes[3]; + raw_block_data[col + 3] = 16 * bytes[5] + (bytes[4] >> 4); + raw_block_data[col + 4] = ((bytes[7] & 0xF) << 8) + bytes[6]; + raw_block_data[col + 5] = 16 * bytes[8] + (bytes[7] >> 4); + raw_block_data[col + 6] = ((bytes[10] & 0xF) << 8) + bytes[9]; + raw_block_data[col + 7] = 16 * bytes[11] + (bytes[10] >> 4); + raw_block_data[col + 8] = ((bytes[13] & 0xF) << 8) + bytes[12]; + raw_block_data[col + 9] = 16 * bytes[14] + (bytes[13] >> 4); + } + else if (RT_pana_info.bpp == 14) { + raw_block_data[col] = bytes[0] + ((bytes[1] & 0x3F) << 8); + raw_block_data[col + 1] = (bytes[1] >> 6) + 4 * (bytes[2]) + + ((bytes[3] & 0xF) << 10); + raw_block_data[col + 2] = (bytes[3] >> 4) + 16 * (bytes[4]) + + ((bytes[5] & 3) << 12); + raw_block_data[col + 3] = ((bytes[5] & 0xFC) >> 2) + (bytes[6] << 6); + raw_block_data[col + 4] = bytes[7] + ((bytes[8] & 0x3F) << 8); + raw_block_data[col + 5] = (bytes[8] >> 6) + 4 * bytes[9] + ((bytes[10] & 0xF) << 10); + raw_block_data[col + 6] = (bytes[10] >> 4) + 16 * bytes[11] + ((bytes[12] & 3) << 12); + raw_block_data[col + 7] = ((bytes[12] & 0xFC) >> 2) + (bytes[13] << 6); + raw_block_data[col + 8] = bytes[14] + ((bytes[15] & 0x3F) << 8); + } + } } + } else { + for (row=0; row < height; row++) + for (col=0; col < raw_width; col++) { + if ((i = col % 14) == 0) + pred[0] = pred[1] = nonz[0] = nonz[1] = 0; + if (i % 3 == 2) sh = 4 >> (3 - pana_bits(2)); + if (nonz[i & 1]) { + if ((j = pana_bits(8))) { + if ((pred[i & 1] -= 0x80 << sh) < 0 || sh == 4) + pred[i & 1] &= ~(-1 << sh); + pred[i & 1] += j << sh; + } + } else if ((nonz[i & 1] = pana_bits(8)) || i > 11) + pred[i & 1] = nonz[i & 1] << 4 | pana_bits(4); + if ((RAW(row,col) = pred[col & 1]) > 4098 && col < width) derror(); + } + } } void CLASS olympus_load_raw() @@ -6081,6 +6130,7 @@ int CLASS parse_tiff_ifd (int base) unsigned *buf, sony_offset=0, sony_length=0, sony_key=0; struct jhead jh; /*RT*/ IMFILE *sfp; +/*RT*/ int pana_raw = 0; if (tiff_nifds >= sizeof tiff_ifd / sizeof tiff_ifd[0]) return 1; @@ -6096,10 +6146,16 @@ int CLASS parse_tiff_ifd (int base) while (entries--) { tiff_get (base, &tag, &type, &len, &save); switch (tag) { + case 1: if (len == 4) pana_raw = get4(); break; case 5: width = get2(); break; case 6: height = get2(); break; case 7: width += get2(); break; case 9: if ((i = get2())) filters = i; break; + case 10: + if (pana_raw && len == 1 && type == 3) { + RT_pana_info.bpp = get2(); + } + break; case 17: case 18: if (type == 3 && len == 1) cam_mul[(tag-17)*2] = get2() / 256.0; @@ -6119,6 +6175,12 @@ int CLASS parse_tiff_ifd (int base) fseek (ifp, 12, SEEK_CUR); FORC3 cam_mul[c] = get2(); break; + case 45: + if (pana_raw && len == 1 && type == 3) + { + RT_pana_info.encoding = get2(); + } + break; case 46: if (type != 7 || fgetc(ifp) != 0xff || fgetc(ifp) != 0xd8) break; thumb_offset = ftell(ifp) - 2; diff --git a/rtengine/dcraw.h b/rtengine/dcraw.h index 96d778815..ea43d2176 100644 --- a/rtengine/dcraw.h +++ b/rtengine/dcraw.h @@ -159,6 +159,13 @@ protected: std::string RT_software; double RT_baseline_exposure; + struct PanasonicRW2Info { + ushort bpp; + ushort encoding; + PanasonicRW2Info(): bpp(0), encoding(0) {} + }; + PanasonicRW2Info RT_pana_info; + float cam_mul[4], pre_mul[4], cmatrix[3][4], rgb_cam[3][4]; int histogram[4][0x2000]; @@ -395,13 +402,15 @@ void nokia_load_raw(); class pana_bits_t{ public: - pana_bits_t(IMFILE *i, unsigned &u): ifp(i), load_flags(u), vbits(0) {} - unsigned operator()(int nbits); + pana_bits_t(IMFILE *i, unsigned &u, unsigned enc): + ifp(i), load_flags(u), vbits(0), encoding(enc) {} + unsigned operator()(int nbits, unsigned *bytes=nullptr); private: IMFILE *ifp; unsigned &load_flags; uchar buf[0x4000]; int vbits; + unsigned encoding; }; void canon_rmf_load_raw(); From 0f1f12d29ab2782a260f8552cd4a60315bbbbbb2 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Thu, 14 Feb 2019 15:49:02 +0100 Subject: [PATCH 24/41] guided filter: removed timing code --- rtengine/guidedfilter.cc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/rtengine/guidedfilter.cc b/rtengine/guidedfilter.cc index 78f6306ad..e64ef4e3e 100644 --- a/rtengine/guidedfilter.cc +++ b/rtengine/guidedfilter.cc @@ -32,8 +32,7 @@ #include "boxblur.h" #include "rescale.h" #include "imagefloat.h" -#define BENCHMARK -#include "StopWatch.h" + namespace rtengine { #if 0 @@ -79,7 +78,7 @@ int calculate_subsampling(int w, int h, int r) void guidedFilter(const array2D &guide, const array2D &src, array2D &dst, int r, float epsilon, bool multithread, int subsampling) { - BENCHFUN + const int W = src.width(); const int H = src.height(); From 94926b83151023d311a6acef4235375289c292f5 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Thu, 14 Feb 2019 20:40:49 +0100 Subject: [PATCH 25/41] Support for Nikon Z7 uncompressed NEF files, fixes #4801 --- rtengine/dcraw.cc | 52 +++++++++++++++++++++++++++++++++++++++++++---- rtengine/dcraw.h | 2 ++ 2 files changed, 50 insertions(+), 4 deletions(-) diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc index c4118dd19..22ee660e2 100644 --- a/rtengine/dcraw.cc +++ b/rtengine/dcraw.cc @@ -6866,13 +6866,15 @@ void CLASS apply_tiff() } else if ((raw_width * 2 * tiff_bps / 16 + 8) * raw_height == tiff_ifd[raw].bytes) { // 14 bit uncompressed from Nikon Z7, still wrong // each line has 8 padding byte. - row_padding = 8; - load_raw = &CLASS packed_load_raw; + //row_padding = 8; + //load_raw = &CLASS packed_load_raw; + load_raw = &CLASS nikon_14bit_load_raw; } else if ((raw_width * 2 * tiff_bps / 16 + 12) * raw_height == tiff_ifd[raw].bytes) { // 14 bit uncompressed from Nikon Z6, still wrong // each line has 12 padding byte. - row_padding = 12; - load_raw = &CLASS packed_load_raw; + // row_padding = 12; + // load_raw = &CLASS packed_load_raw; + load_raw = &CLASS nikon_14bit_load_raw; } else load_raw = &CLASS nikon_load_raw; break; case 65535: @@ -10674,6 +10676,48 @@ struct tiff_hdr { #include "fujicompressed.cc" +//----------------------------------------------------------------------------- +/* Taken from LibRaw + +LibRaw is free software; you can redistribute it and/or modify +it under the terms of the one of two licenses as you choose: +1. GNU LESSER GENERAL PUBLIC LICENSE version 2.1 + (See file LICENSE.LGPL provided in LibRaw distribution archive for details). +2. COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0 + (See file LICENSE.CDDL provided in LibRaw distribution archive for details). + */ + +namespace { + +inline void unpack7bytesto4x16_nikon(unsigned char *src, unsigned short *dest) +{ + dest[3] = (src[6] << 6) | (src[5] >> 2); + dest[2] = ((src[5] & 0x3) << 12) | (src[4] << 4) | (src[3] >> 4); + dest[1] = (src[3] & 0xf) << 10 | (src[2] << 2) | (src[1] >> 6); + dest[0] = ((src[1] & 0x3f) << 8) | src[0]; +} + +} // namespace + +void CLASS nikon_14bit_load_raw() +{ + const unsigned linelen = (unsigned)(ceilf((float)(raw_width * 7 / 4) / 16.0)) * 16; // 14512; // S.raw_width * 7 / 4; + const unsigned pitch = raw_width; //S.raw_pitch ? S.raw_pitch / 2 : S.raw_width; + unsigned char *buf = (unsigned char *)malloc(linelen); + merror(buf, "nikon_14bit_load_raw()"); + for (int row = 0; row < raw_height; row++) + { + unsigned bytesread = fread(buf, 1, linelen, ifp); + unsigned short *dest = &raw_image[pitch * row]; + //swab32arr((unsigned *)buf, bytesread / 4); + for (int sp = 0, dp = 0; dp < pitch - 3 && sp < linelen - 6 && sp < bytesread - 6; sp += 7, dp += 4) + unpack7bytesto4x16_nikon(buf + sp, dest + dp); + } + free(buf); +} + +//----------------------------------------------------------------------------- + /* RT: Delete from here */ /*RT*/#undef SQR /*RT*/#undef MAX diff --git a/rtengine/dcraw.h b/rtengine/dcraw.h index ea43d2176..81da41718 100644 --- a/rtengine/dcraw.h +++ b/rtengine/dcraw.h @@ -526,6 +526,8 @@ void shiftXtransMatrix( const int offsy, const int offsx) { } } +void nikon_14bit_load_raw(); // ported from LibRaw + }; From 8c7555f4a80270bfa9270a9d70fb359128e7a9d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=B6ssie?= Date: Thu, 14 Feb 2019 21:28:49 +0100 Subject: [PATCH 26/41] Fix experimental C++17 build (fixes #5175) --- rtgui/previewloader.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtgui/previewloader.cc b/rtgui/previewloader.cc index f4cfe2b1b..34b42dcb7 100644 --- a/rtgui/previewloader.cc +++ b/rtgui/previewloader.cc @@ -59,7 +59,7 @@ public: }; */ struct JobCompare { - bool operator()(const Job& lhs, const Job& rhs) + bool operator()(const Job& lhs, const Job& rhs) const { if ( lhs.dir_id_ == rhs.dir_id_ ) { return lhs.dir_entry_ < rhs.dir_entry_; From e491c42b5ed7a3cf9053a4900b2047e927619038 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=B6ssie?= Date: Sun, 17 Feb 2019 10:23:13 +0100 Subject: [PATCH 27/41] Conform to OpenMP 4.0 (fixes #5177) --- rtengine/demosaic_algos.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rtengine/demosaic_algos.cc b/rtengine/demosaic_algos.cc index 617feb3b4..7339981e5 100644 --- a/rtengine/demosaic_algos.cc +++ b/rtengine/demosaic_algos.cc @@ -388,7 +388,7 @@ void RawImageSource::jdl_interpolate_omp() // from "Lassus" } #ifdef _OPENMP - #pragma omp parallel default(none) shared(image,width,height,u,w,v,y,x,z,dif,chr) private(row,col,f,g,indx,c,d,i) + #pragma omp parallel shared(image,width,height,u,w,v,y,x,z,dif,chr) private(row,col,f,g,indx,c,d,i) #endif { #ifdef _OPENMP @@ -1159,7 +1159,7 @@ void RawImageSource::igv_interpolate(int winw, int winh) } #ifdef _OPENMP - #pragma omp parallel default(none) shared(rgb,vdif,hdif,chr) + #pragma omp parallel shared(rgb,vdif,hdif,chr) #endif { __m128 ngv, egv, wgv, sgv, nvv, evv, wvv, svv, nwgv, negv, swgv, segv, nwvv, nevv, swvv, sevv, tempv, temp1v, temp2v, temp3v, temp4v, temp5v, temp6v, temp7v, temp8v; @@ -1548,7 +1548,7 @@ void RawImageSource::igv_interpolate(int winw, int winh) } #ifdef _OPENMP - #pragma omp parallel default(none) shared(rgb,vdif,hdif,chr) + #pragma omp parallel shared(rgb,vdif,hdif,chr) #endif { From c85dc2811b132198223607ad600df171d1ff543f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=B6ssie?= Date: Sun, 17 Feb 2019 12:07:48 +0100 Subject: [PATCH 28/41] Fix most Clang 7 warnings (fixes #4972) --- rtengine/ipretinex.cc | 2 +- rtengine/shmap.cc | 2 +- rtengine/shmap.h | 3 +- rtexif/canonattribs.cc | 80 +++++++++--------- rtexif/fujiattribs.cc | 28 +++---- rtexif/nikonattribs.cc | 4 +- rtexif/olympusattribs.cc | 26 +++--- rtexif/pentaxattribs.cc | 92 ++++++++++----------- rtexif/rtexif.h | 27 ++++--- rtexif/sonyminoltaattribs.cc | 152 +++++++++++++++++------------------ rtexif/stdattribs.cc | 42 +++++----- rtgui/batchqueue.h | 2 + rtgui/filebrowser.h | 2 + rtgui/guiutils.h | 2 + 14 files changed, 237 insertions(+), 227 deletions(-) diff --git a/rtengine/ipretinex.cc b/rtengine/ipretinex.cc index fa961fbbb..6239575d6 100644 --- a/rtengine/ipretinex.cc +++ b/rtengine/ipretinex.cc @@ -393,7 +393,7 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, float **e pond /= log(elogt); } - auto shmap = ((mapmet == 2 || mapmet == 3 || mapmet == 4) && it == 1) ? new SHMap (W_L, H_L, true) : nullptr; + auto shmap = ((mapmet == 2 || mapmet == 3 || mapmet == 4) && it == 1) ? new SHMap (W_L, H_L) : nullptr; float *buffer = new float[W_L * H_L];; diff --git a/rtengine/shmap.cc b/rtengine/shmap.cc index f819bf1bd..1eb911220 100644 --- a/rtengine/shmap.cc +++ b/rtengine/shmap.cc @@ -30,7 +30,7 @@ namespace rtengine extern const Settings* settings; -SHMap::SHMap (int w, int h, bool multiThread) : max_f(0.f), min_f(0.f), avg(0.f), W(w), H(h), multiThread(multiThread) +SHMap::SHMap (int w, int h) : max_f(0.f), min_f(0.f), avg(0.f), W(w), H(h) { map = new float*[H]; diff --git a/rtengine/shmap.h b/rtengine/shmap.h index 9bb496b54..4234e203d 100644 --- a/rtengine/shmap.h +++ b/rtengine/shmap.h @@ -34,7 +34,7 @@ public: float** map; float max_f, min_f, avg; - SHMap (int w, int h, bool multiThread); + SHMap (int w, int h); ~SHMap (); void update (Imagefloat* img, double radius, double lumi[3], bool hq, int skip); @@ -43,7 +43,6 @@ public: private: int W, H; - bool multiThread; void fillLuminance( Imagefloat * img, float **luminance, double lumi[3] ); void fillLuminanceL( float ** L, float **luminance ); diff --git a/rtexif/canonattribs.cc b/rtexif/canonattribs.cc index 987743a93..7b30d9ae6 100644 --- a/rtexif/canonattribs.cc +++ b/rtexif/canonattribs.cc @@ -78,7 +78,7 @@ public: }; CAApertureInterpreter caApertureInterpreter; -class CAMacroModeInterpreter : public ChoiceInterpreter +class CAMacroModeInterpreter : public ChoiceInterpreter<> { public: CAMacroModeInterpreter() @@ -107,7 +107,7 @@ public: }; CASelfTimerInterpreter caSelfTimerInterpreter; -class CAQualityInterpreter : public ChoiceInterpreter +class CAQualityInterpreter : public ChoiceInterpreter<> { public: CAQualityInterpreter() @@ -121,7 +121,7 @@ public: }; CAQualityInterpreter caQualityInterpreter; -class CAFlashModeInterpreter : public ChoiceInterpreter +class CAFlashModeInterpreter : public ChoiceInterpreter<> { public: CAFlashModeInterpreter() @@ -138,7 +138,7 @@ public: }; CAFlashModeInterpreter caFlashModeInterpreter; -class CAContinuousDriveInterpreter : public ChoiceInterpreter +class CAContinuousDriveInterpreter : public ChoiceInterpreter<> { public: CAContinuousDriveInterpreter() @@ -156,7 +156,7 @@ public: }; CAContinuousDriveInterpreter caContinuousDriveInterpreter; -class CAFocusModeInterpreter : public ChoiceInterpreter +class CAFocusModeInterpreter : public ChoiceInterpreter<> { public: CAFocusModeInterpreter() @@ -176,7 +176,7 @@ public: }; CAFocusModeInterpreter caFocusModeInterpreter; -class CARecordModeInterpreter : public ChoiceInterpreter +class CARecordModeInterpreter : public ChoiceInterpreter<> { public: CARecordModeInterpreter() @@ -194,7 +194,7 @@ public: }; CARecordModeInterpreter caRecordModeInterpreter; -class CAImageSizeInterpreter : public ChoiceInterpreter +class CAImageSizeInterpreter : public ChoiceInterpreter<> { public: CAImageSizeInterpreter () @@ -220,7 +220,7 @@ public: }; CAImageSizeInterpreter caImageSizeInterpreter; -class CAEasyModeInterpreter : public ChoiceInterpreter +class CAEasyModeInterpreter : public ChoiceInterpreter<> { public: CAEasyModeInterpreter () @@ -300,7 +300,7 @@ public: }; CAEasyModeInterpreter caEasyModeInterpreter; -class CADigitalZoomInterpreter : public ChoiceInterpreter +class CADigitalZoomInterpreter : public ChoiceInterpreter<> { public: CADigitalZoomInterpreter() @@ -313,7 +313,7 @@ public: }; CADigitalZoomInterpreter caDigitalZoomInterpreter; -class CAMeteringModeInterpreter : public ChoiceInterpreter +class CAMeteringModeInterpreter : public ChoiceInterpreter<> { public: CAMeteringModeInterpreter() @@ -328,7 +328,7 @@ public: }; CAMeteringModeInterpreter caMeteringModeInterpreter; -class CAFocusRangeInterpreter : public ChoiceInterpreter +class CAFocusRangeInterpreter : public ChoiceInterpreter<> { public: CAFocusRangeInterpreter() @@ -348,7 +348,7 @@ public: }; CAFocusRangeInterpreter caFocusRangeInterpreter; -class CAAFPointInterpreter : public ChoiceInterpreter +class CAAFPointInterpreter : public ChoiceInterpreter<> { public: CAAFPointInterpreter() @@ -365,7 +365,7 @@ public: }; CAAFPointInterpreter caAFPointInterpreter; -class CAExposureModeInterpreter : public ChoiceInterpreter +class CAExposureModeInterpreter : public ChoiceInterpreter<> { public: CAExposureModeInterpreter() @@ -431,7 +431,7 @@ public: }; CAFlashBitsInterpreter caFlashBitsInterpreter; -class CAFocusContinuousInterpreter : public ChoiceInterpreter +class CAFocusContinuousInterpreter : public ChoiceInterpreter<> { public: CAFocusContinuousInterpreter() @@ -443,7 +443,7 @@ public: }; CAFocusContinuousInterpreter caFocusContinuousInterpreter; -class CAAESettingsInterpreter : public ChoiceInterpreter +class CAAESettingsInterpreter : public ChoiceInterpreter<> { public: CAAESettingsInterpreter() @@ -457,7 +457,7 @@ public: }; CAAESettingsInterpreter caAESettingsInterpreter; -class CAStabilizationInterpreter : public ChoiceInterpreter +class CAStabilizationInterpreter : public ChoiceInterpreter<> { public: CAStabilizationInterpreter() @@ -476,7 +476,7 @@ public: }; CAStabilizationInterpreter caStabilizationInterpreter; -class CASpotMeteringInterpreter : public ChoiceInterpreter +class CASpotMeteringInterpreter : public ChoiceInterpreter<> { public: CASpotMeteringInterpreter() @@ -487,7 +487,7 @@ public: }; CASpotMeteringInterpreter caSpotMeteringInterpreter; -class CAPhotoEffectInterpreter : public ChoiceInterpreter +class CAPhotoEffectInterpreter : public ChoiceInterpreter<> { public: CAPhotoEffectInterpreter() @@ -504,7 +504,7 @@ public: }; CAPhotoEffectInterpreter caPhotoEffectInterpreter; -class CAManualFlashInterpreter : public ChoiceInterpreter +class CAManualFlashInterpreter : public ChoiceInterpreter<> { public: CAManualFlashInterpreter() @@ -518,7 +518,7 @@ public: }; CAManualFlashInterpreter caManualFlashInterpreter; -class CARAWQualityInterpreter : public ChoiceInterpreter +class CARAWQualityInterpreter : public ChoiceInterpreter<> { public: CARAWQualityInterpreter() @@ -1094,7 +1094,7 @@ public: }; CALensInterpreter caLensInterpreter; -class CAFocalTypeInterpreter : public ChoiceInterpreter +class CAFocalTypeInterpreter : public ChoiceInterpreter<> { public: CAFocalTypeInterpreter() @@ -1183,7 +1183,7 @@ public: }; CABaseISOInterpreter caBaseISOInterpreter; -class CAToneCurveInterpreter : public ChoiceInterpreter +class CAToneCurveInterpreter : public ChoiceInterpreter<> { public: CAToneCurveInterpreter() @@ -1195,7 +1195,7 @@ public: }; CAToneCurveInterpreter caToneCurveInterpreter; -class CASharpnessFrequencyInterpreter : public ChoiceInterpreter +class CASharpnessFrequencyInterpreter : public ChoiceInterpreter<> { public: CASharpnessFrequencyInterpreter() @@ -1210,7 +1210,7 @@ public: }; CASharpnessFrequencyInterpreter caSharpnessFrequencyInterpreter; -class CAWhiteBalanceInterpreter : public ChoiceInterpreter +class CAWhiteBalanceInterpreter : public ChoiceInterpreter<> { public: CAWhiteBalanceInterpreter() @@ -1241,7 +1241,7 @@ public: }; CAWhiteBalanceInterpreter caWhiteBalanceInterpreter; -class CAPictureStyleInterpreter : public ChoiceInterpreter +class CAPictureStyleInterpreter : public ChoiceInterpreter<> { public: CAPictureStyleInterpreter() @@ -1272,7 +1272,7 @@ public: }; CAPictureStyleInterpreter caPictureStyleInterpreter; -class CASlowShutterInterpreter : public ChoiceInterpreter +class CASlowShutterInterpreter : public ChoiceInterpreter<> { public: CASlowShutterInterpreter() @@ -1303,7 +1303,7 @@ public: }; CAFlashGuideNumberInterpreter caFlashGuideNumberInterpreter; -class CAAFPointsInFocusInterpreter : public ChoiceInterpreter +class CAAFPointsInFocusInterpreter : public ChoiceInterpreter<> { public: CAAFPointsInFocusInterpreter() @@ -1320,7 +1320,7 @@ public: }; CAAFPointsInFocusInterpreter caAFPointsInFocusInterpreter; -class CAAutoExposureBracketingInterpreter : public ChoiceInterpreter +class CAAutoExposureBracketingInterpreter : public ChoiceInterpreter { public: CAAutoExposureBracketingInterpreter() @@ -1334,7 +1334,7 @@ public: }; CAAutoExposureBracketingInterpreter caAutoExposureBracketingInterpreter; -class CAControModeInterpreter : public ChoiceInterpreter +class CAControModeInterpreter : public ChoiceInterpreter<> { public: CAControModeInterpreter() @@ -1370,7 +1370,7 @@ public: }; CAMeasuredEVInterpreter caMeasuredEVInterpreter; -class CACameraTypeInterpreter : public ChoiceInterpreter +class CACameraTypeInterpreter : public ChoiceInterpreter<> { public: CACameraTypeInterpreter() @@ -1383,7 +1383,7 @@ public: }; CACameraTypeInterpreter caCameraTypeInterpreter; -class CAAutoRotateInterpreter : public ChoiceInterpreter +class CAAutoRotateInterpreter : public ChoiceInterpreter { public: CAAutoRotateInterpreter() @@ -1397,7 +1397,7 @@ public: }; CAAutoRotateInterpreter caAutoRotateInterpreter; -class CABracketModeInterpreter : public ChoiceInterpreter +class CABracketModeInterpreter : public ChoiceInterpreter<> { public: CABracketModeInterpreter() @@ -1411,7 +1411,7 @@ public: }; CABracketModeInterpreter caBracketModeInterpreter; -class CARAWJpegQualityInterpreter : public ChoiceInterpreter +class CARAWJpegQualityInterpreter : public ChoiceInterpreter<> { public: CARAWJpegQualityInterpreter() @@ -1427,7 +1427,7 @@ public: }; CARAWJpegQualityInterpreter caRAWJpegQualityInterpreter; -class CAJpegSizeInterpreter : public ChoiceInterpreter +class CAJpegSizeInterpreter : public ChoiceInterpreter<> { public: CAJpegSizeInterpreter() @@ -1453,7 +1453,7 @@ public: }; CAJpegSizeInterpreter caJpegSizeInterpreter; -class CAWBBracketModeInterpreter : public ChoiceInterpreter +class CAWBBracketModeInterpreter : public ChoiceInterpreter<> { public: CAWBBracketModeInterpreter() @@ -1465,7 +1465,7 @@ public: }; CAWBBracketModeInterpreter caWBBracketModeInterpreter; -class CAFilterEffectInterpreter : public ChoiceInterpreter +class CAFilterEffectInterpreter : public ChoiceInterpreter<> { public: CAFilterEffectInterpreter() @@ -1479,7 +1479,7 @@ public: }; CAFilterEffectInterpreter caFilterEffectInterpreter; -class CAToningEffectInterpreter : public ChoiceInterpreter +class CAToningEffectInterpreter : public ChoiceInterpreter<> { public: CAToningEffectInterpreter() @@ -1507,7 +1507,7 @@ public: CAFileNumberInterpreter caFileNumberInterpreter; // CanonModelID -class CAModelIDInterpreter : public ChoiceInterpreter +class CAModelIDInterpreter : public ChoiceInterpreter<> { public: CAModelIDInterpreter () @@ -1843,7 +1843,7 @@ public: }; CAModelIDInterpreter caModelIDInterpreter; -class CAPanoramaDirectionInterpreter : public ChoiceInterpreter +class CAPanoramaDirectionInterpreter : public ChoiceInterpreter<> { public: CAPanoramaDirectionInterpreter() @@ -1857,7 +1857,7 @@ public: }; CAPanoramaDirectionInterpreter caPanoramaDirectionInterpreter; -class CAAspectRatioInterpreter : public ChoiceInterpreter +class CAAspectRatioInterpreter : public ChoiceInterpreter<> { public: CAAspectRatioInterpreter() diff --git a/rtexif/fujiattribs.cc b/rtexif/fujiattribs.cc index 6f76a64b5..2e17a68f9 100644 --- a/rtexif/fujiattribs.cc +++ b/rtexif/fujiattribs.cc @@ -24,7 +24,7 @@ namespace rtexif { -class FAOnOffInterpreter : public ChoiceInterpreter +class FAOnOffInterpreter : public ChoiceInterpreter<> { public: FAOnOffInterpreter () @@ -35,7 +35,7 @@ public: }; FAOnOffInterpreter faOnOffInterpreter; -class FASharpnessInterpreter : public ChoiceInterpreter +class FASharpnessInterpreter : public ChoiceInterpreter<> { public: FASharpnessInterpreter () @@ -53,7 +53,7 @@ public: }; FASharpnessInterpreter faSharpnessInterpreter; -class FAWhiteBalanceInterpreter : public ChoiceInterpreter +class FAWhiteBalanceInterpreter : public ChoiceInterpreter<> { public: FAWhiteBalanceInterpreter () @@ -79,7 +79,7 @@ public: }; FAWhiteBalanceInterpreter faWhiteBalanceInterpreter; -class FASaturationInterpreter : public ChoiceInterpreter +class FASaturationInterpreter : public ChoiceInterpreter<> { public: FASaturationInterpreter () @@ -104,7 +104,7 @@ public: }; FASaturationInterpreter faSaturationInterpreter; -class FAContrastInterpreter : public ChoiceInterpreter +class FAContrastInterpreter : public ChoiceInterpreter<> { public: FAContrastInterpreter () @@ -119,7 +119,7 @@ public: }; FAContrastInterpreter faContrastInterpreter; -class FAContrast2Interpreter : public ChoiceInterpreter +class FAContrast2Interpreter : public ChoiceInterpreter<> { public: FAContrast2Interpreter () @@ -131,7 +131,7 @@ public: }; FAContrast2Interpreter faContrast2Interpreter; -class FANoiseReductionInterpreter : public ChoiceInterpreter +class FANoiseReductionInterpreter : public ChoiceInterpreter<> { public: FANoiseReductionInterpreter () @@ -143,7 +143,7 @@ public: }; FANoiseReductionInterpreter faNoiseReductionInterpreter; -class FAFlashInterpreter : public ChoiceInterpreter +class FAFlashInterpreter : public ChoiceInterpreter<> { public: // FujiFlashMode @@ -158,7 +158,7 @@ public: }; FAFlashInterpreter faFlashInterpreter; -class FAFocusModeInterpreter : public ChoiceInterpreter +class FAFocusModeInterpreter : public ChoiceInterpreter<> { public: FAFocusModeInterpreter () @@ -169,7 +169,7 @@ public: }; FAFocusModeInterpreter faFocusModeInterpreter; -class FAColorModeInterpreter : public ChoiceInterpreter +class FAColorModeInterpreter : public ChoiceInterpreter<> { public: FAColorModeInterpreter () @@ -181,7 +181,7 @@ public: }; FAColorModeInterpreter faColorModeInterpreter; -class FADynamicRangeInterpreter : public ChoiceInterpreter +class FADynamicRangeInterpreter : public ChoiceInterpreter<> { public: FADynamicRangeInterpreter () @@ -192,7 +192,7 @@ public: }; FADynamicRangeInterpreter faDynamicRangeInterpreter; -class FAFilmModeInterpreter : public ChoiceInterpreter +class FAFilmModeInterpreter : public ChoiceInterpreter<> { public: FAFilmModeInterpreter () @@ -212,7 +212,7 @@ public: }; FAFilmModeInterpreter faFilmModeInterpreter; -class FADRSettingInterpreter : public ChoiceInterpreter +class FADRSettingInterpreter : public ChoiceInterpreter<> { public: // DynamicRangeSetting @@ -228,7 +228,7 @@ public: }; FADRSettingInterpreter faDRSettingInterpreter; -class FAPictureModeInterpreter : public ChoiceInterpreter +class FAPictureModeInterpreter : public ChoiceInterpreter<> { public: FAPictureModeInterpreter () diff --git a/rtexif/nikonattribs.cc b/rtexif/nikonattribs.cc index da47cf99a..70246d6b2 100644 --- a/rtexif/nikonattribs.cc +++ b/rtexif/nikonattribs.cc @@ -155,7 +155,7 @@ public: }; NALensTypeInterpreter naLensTypeInterpreter; -class NAFlashModeInterpreter : public ChoiceInterpreter +class NAFlashModeInterpreter : public ChoiceInterpreter<> { public: NAFlashModeInterpreter () @@ -170,7 +170,7 @@ public: }; NAFlashModeInterpreter naFlashModeInterpreter; -class NAHiISONRInterpreter : public ChoiceInterpreter +class NAHiISONRInterpreter : public ChoiceInterpreter<> { public: // HighISONoiseReduction diff --git a/rtexif/olympusattribs.cc b/rtexif/olympusattribs.cc index e590a71de..ccf28d0ca 100644 --- a/rtexif/olympusattribs.cc +++ b/rtexif/olympusattribs.cc @@ -214,7 +214,7 @@ public: }; OLLensTypeInterpreter olLensTypeInterpreter; -class OLFlashTypeInterpreter : public ChoiceInterpreter +class OLFlashTypeInterpreter : public ChoiceInterpreter<> { public: OLFlashTypeInterpreter () @@ -226,7 +226,7 @@ public: }; OLFlashTypeInterpreter olFlashTypeInterpreter; -class OLExposureModeInterpreter : public ChoiceInterpreter +class OLExposureModeInterpreter : public ChoiceInterpreter<> { public: OLExposureModeInterpreter () @@ -240,7 +240,7 @@ public: }; OLExposureModeInterpreter olExposureModeInterpreter; -class OLMeteringModeInterpreter : public ChoiceInterpreter +class OLMeteringModeInterpreter : public ChoiceInterpreter<> { public: OLMeteringModeInterpreter () @@ -255,7 +255,7 @@ public: }; OLMeteringModeInterpreter olMeteringModeInterpreter; -class OLFocusModeInterpreter : public ChoiceInterpreter +class OLFocusModeInterpreter : public ChoiceInterpreter<> { public: OLFocusModeInterpreter () @@ -270,7 +270,7 @@ public: }; OLFocusModeInterpreter olFocusModeInterpreter; -class OLWhitebalance2Interpreter : public ChoiceInterpreter +class OLWhitebalance2Interpreter : public ChoiceInterpreter<> { public: OLWhitebalance2Interpreter () @@ -302,7 +302,7 @@ public: }; OLWhitebalance2Interpreter olWhitebalance2Interpreter; -class OLSceneModeInterpreter : public ChoiceInterpreter +class OLSceneModeInterpreter : public ChoiceInterpreter<> { public: OLSceneModeInterpreter () @@ -368,7 +368,7 @@ public: }; OLSceneModeInterpreter olSceneModeInterpreter; -class OLPictureModeBWFilterInterpreter : public ChoiceInterpreter +class OLPictureModeBWFilterInterpreter : public ChoiceInterpreter<> { public: OLPictureModeBWFilterInterpreter () @@ -383,7 +383,7 @@ public: }; OLPictureModeBWFilterInterpreter olPictureModeBWFilterInterpreter; -class OLPictureModeToneInterpreter : public ChoiceInterpreter +class OLPictureModeToneInterpreter : public ChoiceInterpreter<> { public: OLPictureModeToneInterpreter () @@ -398,7 +398,7 @@ public: }; OLPictureModeToneInterpreter olPictureModeToneInterpreter; -class OLImageQuality2Interpreter : public ChoiceInterpreter +class OLImageQuality2Interpreter : public ChoiceInterpreter<> { public: OLImageQuality2Interpreter () @@ -412,7 +412,7 @@ public: }; OLImageQuality2Interpreter olImageQuality2Interpreter; -class OLDevEngineInterpreter : public ChoiceInterpreter +class OLDevEngineInterpreter : public ChoiceInterpreter<> { public: // RawDevEngine @@ -426,7 +426,7 @@ public: }; OLDevEngineInterpreter olDevEngineInterpreter; -class OLPictureModeInterpreter : public ChoiceInterpreter +class OLPictureModeInterpreter : public ChoiceInterpreter<> { public: OLPictureModeInterpreter () @@ -449,7 +449,7 @@ public: }; OLPictureModeInterpreter olPictureModeInterpreter; -class OLColorSpaceInterpreter : public ChoiceInterpreter +class OLColorSpaceInterpreter : public ChoiceInterpreter<> { public: OLColorSpaceInterpreter () @@ -522,7 +522,7 @@ public: }; OLNoiseReductionInterpreter olNoiseReductionInterpreter; -class OLFlashModelInterpreter : public ChoiceInterpreter +class OLFlashModelInterpreter : public ChoiceInterpreter<> { public: OLFlashModelInterpreter () diff --git a/rtexif/pentaxattribs.cc b/rtexif/pentaxattribs.cc index 4120f6b46..971f07ce1 100644 --- a/rtexif/pentaxattribs.cc +++ b/rtexif/pentaxattribs.cc @@ -31,7 +31,7 @@ namespace rtexif { -class PAQualityInterpreter : public ChoiceInterpreter +class PAQualityInterpreter : public ChoiceInterpreter<> { public: PAQualityInterpreter () @@ -50,7 +50,7 @@ public: }; PAQualityInterpreter paQualityInterpreter; -class PAOnOffInterpreter : public ChoiceInterpreter +class PAOnOffInterpreter : public ChoiceInterpreter<> { public: PAOnOffInterpreter () @@ -61,7 +61,7 @@ public: }; PAOnOffInterpreter paOnOffInterpreter; -class PAShakeReductionInterpreter : public ChoiceInterpreter +class PAShakeReductionInterpreter : public ChoiceInterpreter<> { public: PAShakeReductionInterpreter () @@ -80,7 +80,7 @@ public: }; PAShakeReductionInterpreter paShakeReductionInterpreter; -class PAShakeReduction2Interpreter : public ChoiceInterpreter +class PAShakeReduction2Interpreter : public ChoiceInterpreter<> { public: // ShakeReduction @@ -100,7 +100,7 @@ public: }; PAShakeReduction2Interpreter paShakeReduction2Interpreter; -class PAPictureModeInterpreter : public ChoiceInterpreter +class PAPictureModeInterpreter : public ChoiceInterpreter<> { public: PAPictureModeInterpreter () @@ -164,7 +164,7 @@ public: }; PAPictureModeInterpreter paPictureModeInterpreter; -class PASceneModeInterpreter : public ChoiceInterpreter +class PASceneModeInterpreter : public ChoiceInterpreter<> { public: PASceneModeInterpreter () @@ -196,7 +196,7 @@ public: }; PASceneModeInterpreter paSceneModeInterpreter; -class PAAEProgramModeInterpreter : public ChoiceInterpreter +class PAAEProgramModeInterpreter : public ChoiceInterpreter<> { public: PAAEProgramModeInterpreter () @@ -235,7 +235,7 @@ public: }; PAAEProgramModeInterpreter paAEProgramModeInterpreter; -class PAFlashModeInterpreter : public ChoiceInterpreter +class PAFlashModeInterpreter : public ChoiceInterpreter<> { public: PAFlashModeInterpreter () @@ -259,7 +259,7 @@ public: }; PAFlashModeInterpreter paFlashModeInterpreter; -class PAFocusModeInterpreter : public ChoiceInterpreter +class PAFocusModeInterpreter : public ChoiceInterpreter<> { public: PAFocusModeInterpreter () @@ -283,7 +283,7 @@ public: }; PAFocusModeInterpreter paFocusModeInterpreter; -class PAAFPointInterpreter : public ChoiceInterpreter +class PAAFPointInterpreter : public ChoiceInterpreter<> { public: // AFPointSelected @@ -310,7 +310,7 @@ public: }; PAAFPointInterpreter paAFPointInterpreter; -class PAAFFocusInterpreter : public ChoiceInterpreter +class PAAFFocusInterpreter : public ChoiceInterpreter<> { public: // AFPointsInFocus @@ -331,7 +331,7 @@ public: }; PAAFFocusInterpreter paAFFocusInterpreter; -class PAISOInterpreter : public ChoiceInterpreter +class PAISOInterpreter : public ChoiceInterpreter<> { public: PAISOInterpreter () @@ -430,7 +430,7 @@ public: }; PAFNumberInterpreter paFNumberInterpreter; -class PAMeteringModeInterpreter : public ChoiceInterpreter +class PAMeteringModeInterpreter : public ChoiceInterpreter<> { public: PAMeteringModeInterpreter () @@ -442,7 +442,7 @@ public: }; PAMeteringModeInterpreter paMeteringModeInterpreter; -class PAWhiteBalanceInterpreter : public ChoiceInterpreter +class PAWhiteBalanceInterpreter : public ChoiceInterpreter<> { public: PAWhiteBalanceInterpreter () @@ -468,7 +468,7 @@ public: }; PAWhiteBalanceInterpreter paWhiteBalanceInterpreter; -class PAWhiteBalanceModeInterpreter : public ChoiceInterpreter +class PAWhiteBalanceModeInterpreter : public ChoiceInterpreter<> { public: PAWhiteBalanceModeInterpreter () @@ -487,7 +487,7 @@ public: }; PAWhiteBalanceModeInterpreter paWhiteBalanceModeInterpreter; -class PASaturationInterpreter : public ChoiceInterpreter +class PASaturationInterpreter : public ChoiceInterpreter<> { public: PASaturationInterpreter () @@ -506,7 +506,7 @@ public: }; PASaturationInterpreter paSaturationInterpreter; -class PAContrastInterpreter : public ChoiceInterpreter +class PAContrastInterpreter : public ChoiceInterpreter<> { public: PAContrastInterpreter () @@ -525,7 +525,7 @@ public: }; PAContrastInterpreter paContrastInterpreter; -class PASharpnessInterpreter : public ChoiceInterpreter +class PASharpnessInterpreter : public ChoiceInterpreter<> { public: PASharpnessInterpreter () @@ -543,7 +543,7 @@ public: }; PASharpnessInterpreter paSharpnessInterpreter; -class PAPictureModeInterpreter2: public ChoiceInterpreter +class PAPictureModeInterpreter2: public ChoiceInterpreter<> { public: PAPictureModeInterpreter2() @@ -613,7 +613,7 @@ public: std::string toString (Tag* t) override { int c = 256 * t->toInt (0, BYTE) + t->toInt (1, BYTE); - std::map::iterator r = choices.find (c); + const ChoicesIterator r = choices.find (c); if (r != choices.end()) { std::ostringstream s; @@ -635,7 +635,7 @@ public: }; PAPictureModeInterpreter2 paPictureModeInterpreter2; -class PADriveModeInterpreter : public ChoiceInterpreter +class PADriveModeInterpreter : public ChoiceInterpreter<> { std::map choices1; std::map choices2; @@ -671,7 +671,7 @@ public: } std::string toString (Tag* t) override { - std::map::iterator r = choices.find (t->toInt (0, BYTE)); + const ChoicesIterator r = choices.find (t->toInt (0, BYTE)); std::map::iterator r1 = choices1.find (t->toInt (1, BYTE)); std::map::iterator r2 = choices2.find (t->toInt (2, BYTE)); std::map::iterator r3 = choices3.find (t->toInt (3, BYTE)); @@ -685,7 +685,7 @@ public: }; PADriveModeInterpreter paDriveModeInterpreter; -class PAColorSpaceInterpreter: public ChoiceInterpreter +class PAColorSpaceInterpreter: public ChoiceInterpreter<> { public: PAColorSpaceInterpreter() @@ -1079,7 +1079,7 @@ public: }; PASRResultInterpreter paSRResultInterpreter; -class PAHighISONoiseInterpreter: public ChoiceInterpreter +class PAHighISONoiseInterpreter: public ChoiceInterpreter<> { public: // HighISONoiseReduction @@ -1095,7 +1095,7 @@ public: }; PAHighISONoiseInterpreter paHighISONoiseInterpreter; -class PAMonochromeFilterEffectInterpreter: public ChoiceInterpreter +class PAMonochromeFilterEffectInterpreter: public ChoiceInterpreter<> { public: PAMonochromeFilterEffectInterpreter() @@ -1113,7 +1113,7 @@ public: }; PAMonochromeFilterEffectInterpreter paMonochromeFilterEffectInterpreter; -class PAMonochromeToningInterpreter: public ChoiceInterpreter +class PAMonochromeToningInterpreter: public ChoiceInterpreter<> { public: PAMonochromeToningInterpreter() @@ -1132,7 +1132,7 @@ public: }; PAMonochromeToningInterpreter paMonochromeToningInterpreter; -class PAShadowCorrectionInterpreter: public ChoiceInterpreter +class PAShadowCorrectionInterpreter: public ChoiceInterpreter<> { public: PAShadowCorrectionInterpreter() @@ -1156,7 +1156,7 @@ public: idx = t->toInt (0, BYTE) << 8 | t->toInt (1, BYTE); } - std::map::iterator r = choices.find (idx); + const ChoicesIterator r = choices.find (idx); std::ostringstream s; s << ((r != choices.end()) ? r->second : "n/a"); return s.str(); @@ -1164,7 +1164,7 @@ public: }; PAShadowCorrectionInterpreter paShadowCorrectionInterpreter; -class PAISOAutoParametersInterpreter: public ChoiceInterpreter +class PAISOAutoParametersInterpreter: public ChoiceInterpreter<> { public: PAISOAutoParametersInterpreter() @@ -1175,7 +1175,7 @@ public: } std::string toString (Tag* t) override { - std::map::iterator r = choices.find (t->toInt (0, BYTE)); + const ChoicesIterator r = choices.find (t->toInt (0, BYTE)); std::ostringstream s; s << ((r != choices.end()) ? r->second : "n/a"); return s.str(); @@ -1183,7 +1183,7 @@ public: }; PAISOAutoParametersInterpreter paISOAutoParametersInterpreter; -class PABleachBypassToningInterpreter: public ChoiceInterpreter +class PABleachBypassToningInterpreter: public ChoiceInterpreter<> { public: PABleachBypassToningInterpreter() @@ -1201,7 +1201,7 @@ public: }; PABleachBypassToningInterpreter paBleachBypassToningInterpreter; -class PABlurControlInterpreter: public ChoiceInterpreter +class PABlurControlInterpreter: public ChoiceInterpreter<> { public: PABlurControlInterpreter() @@ -1213,7 +1213,7 @@ public: } std::string toString (Tag* t) override { - std::map::iterator r = choices.find (t->toInt (0, BYTE)); + const ChoicesIterator r = choices.find (t->toInt (0, BYTE)); std::ostringstream s; s << ((r != choices.end()) ? r->second : "n/a"); return s.str(); @@ -1221,7 +1221,7 @@ public: }; PABlurControlInterpreter paBlurControlInterpreter; -class PAHDRInterpreter: public ChoiceInterpreter +class PAHDRInterpreter: public ChoiceInterpreter<> { std::map choices1; std::map choices2; @@ -1245,7 +1245,7 @@ public: } std::string toString (Tag* t) override { - std::map::iterator r = choices.find (t->toInt (0, BYTE)); + const ChoicesIterator r = choices.find (t->toInt (0, BYTE)); std::map::iterator r1 = choices1.find (t->toInt (1, BYTE)); std::map::iterator r2 = choices2.find (t->toInt (2, BYTE)); std::ostringstream s; @@ -1257,7 +1257,7 @@ public: }; PAHDRInterpreter paHDRInterpreter; -class PACrossProcessInterpreter: public ChoiceInterpreter +class PACrossProcessInterpreter: public ChoiceInterpreter<> { public: PACrossProcessInterpreter() @@ -1274,7 +1274,7 @@ public: }; PACrossProcessInterpreter paCrossProcessInterpreter; -class PAPowerSourceInterpreter: public ChoiceInterpreter +class PAPowerSourceInterpreter: public ChoiceInterpreter<> { public: PAPowerSourceInterpreter() @@ -1592,7 +1592,7 @@ public: }; PANominalMaxApertureInterpreter paNominalMaxApertureInterpreter; -class PAFlashStatusInterpreter: public ChoiceInterpreter +class PAFlashStatusInterpreter: public ChoiceInterpreter<> { public: PAFlashStatusInterpreter() @@ -1608,7 +1608,7 @@ public: }; PAFlashStatusInterpreter paFlashStatusInterpreter; -class PAInternalFlashModeInterpreter: public ChoiceInterpreter +class PAInternalFlashModeInterpreter: public ChoiceInterpreter<> { public: PAInternalFlashModeInterpreter() @@ -1638,7 +1638,7 @@ public: }; PAInternalFlashModeInterpreter paInternalFlashModeInterpreter; -class PAExternalFlashModeInterpreter: public ChoiceInterpreter +class PAExternalFlashModeInterpreter: public ChoiceInterpreter<> { public: PAExternalFlashModeInterpreter() @@ -1658,7 +1658,7 @@ public: }; PAExternalFlashModeInterpreter paExternalFlashModeInterpreter; -class PAExternalFlashExposureCompInterpreter: public ChoiceInterpreter +class PAExternalFlashExposureCompInterpreter: public ChoiceInterpreter<> { public: PAExternalFlashExposureCompInterpreter() @@ -1678,7 +1678,7 @@ public: }; PAExternalFlashExposureCompInterpreter paExternalFlashExposureCompInterpreter; -class PAExternalFlashBounceInterpreter: public ChoiceInterpreter +class PAExternalFlashBounceInterpreter: public ChoiceInterpreter<> { public: PAExternalFlashBounceInterpreter() @@ -1761,7 +1761,7 @@ public: }; PAApertureRingUseInterpreter paApertureRingUseInterpreter; -class PAFlashOptionInterpreter: public ChoiceInterpreter +class PAFlashOptionInterpreter: public ChoiceInterpreter<> { public: PAFlashOptionInterpreter() @@ -1778,7 +1778,7 @@ public: } std::string toString (Tag* t) override { - std::map::iterator r = choices.find (t->toInt (0, BYTE) >> 4); + const ChoicesIterator r = choices.find (t->toInt (0, BYTE) >> 4); if (r != choices.end()) { return r->second; @@ -1813,7 +1813,7 @@ public: }; PAMeteringMode2Interpreter paMeteringMode2Interpreter; -class PAExposureBracketStepSizeInterpreter: public ChoiceInterpreter +class PAExposureBracketStepSizeInterpreter: public ChoiceInterpreter<> { public: PAExposureBracketStepSizeInterpreter() @@ -1830,7 +1830,7 @@ public: }; PAExposureBracketStepSizeInterpreter paExposureBracketStepSizeInterpreter; -class PAPictureMode2Interpreter: public ChoiceInterpreter +class PAPictureMode2Interpreter: public ChoiceInterpreter<> { public: PAPictureMode2Interpreter() diff --git a/rtexif/rtexif.h b/rtexif/rtexif.h index 2b68a6754..995717593 100644 --- a/rtexif/rtexif.h +++ b/rtexif/rtexif.h @@ -19,15 +19,16 @@ #ifndef _MEXIF3_ #define _MEXIF3_ -#include -#include -#include -#include -#include -#include -#include #include +#include +#include +#include +#include +#include #include +#include +#include +#include #include @@ -482,22 +483,26 @@ public: }; extern Interpreter stdInterpreter; + +template class ChoiceInterpreter : public Interpreter { protected: - std::map choices; + using Choices = std::map; + using ChoicesIterator = typename Choices::const_iterator; + Choices choices; public: ChoiceInterpreter () {}; std::string toString (Tag* t) override { - std::map::iterator r = choices.find (t->toInt()); + const typename std::map::const_iterator r = choices.find(t->toInt()); if (r != choices.end()) { return r->second; } else { char buffer[1024]; - t->toString (buffer); - return std::string (buffer); + t->toString(buffer); + return buffer; } } }; diff --git a/rtexif/sonyminoltaattribs.cc b/rtexif/sonyminoltaattribs.cc index 6dc2406b9..c8bbeb91d 100644 --- a/rtexif/sonyminoltaattribs.cc +++ b/rtexif/sonyminoltaattribs.cc @@ -25,7 +25,7 @@ namespace rtexif { -class SANoYesInterpreter : public ChoiceInterpreter +class SANoYesInterpreter : public ChoiceInterpreter<> { public: SANoYesInterpreter () @@ -36,7 +36,7 @@ public: }; SANoYesInterpreter saNoYesInterpreter; -class SAOnOffInterpreter : public ChoiceInterpreter +class SAOnOffInterpreter : public ChoiceInterpreter<> { public: SAOnOffInterpreter () @@ -48,7 +48,7 @@ public: }; SAOnOffInterpreter saOnOffInterpreter; -class SAOnOffInterpreter2 : public ChoiceInterpreter +class SAOnOffInterpreter2 : public ChoiceInterpreter<> { public: SAOnOffInterpreter2 () @@ -59,7 +59,7 @@ public: }; SAOnOffInterpreter2 saOnOffInterpreter2; -class SAOnOffInterpreter3 : public ChoiceInterpreter +class SAOnOffInterpreter3 : public ChoiceInterpreter<> { public: SAOnOffInterpreter3 () @@ -71,7 +71,7 @@ public: }; SAOnOffInterpreter3 saOnOffInterpreter3; -class SAOnOffInterpreter4 : public ChoiceInterpreter +class SAOnOffInterpreter4 : public ChoiceInterpreter<> { public: SAOnOffInterpreter4 () @@ -84,7 +84,7 @@ public: }; SAOnOffInterpreter4 saOnOffInterpreter4; -class SAOnOffInterpreter5 : public ChoiceInterpreter +class SAOnOffInterpreter5 : public ChoiceInterpreter<> { public: SAOnOffInterpreter5 () @@ -95,7 +95,7 @@ public: }; SAOnOffInterpreter5 saOnOffInterpreter5; -class SAHighISONoiseReduction : public ChoiceInterpreter +class SAHighISONoiseReduction : public ChoiceInterpreter<> { public: SAHighISONoiseReduction () @@ -110,7 +110,7 @@ public: }; SAHighISONoiseReduction saHighISONoiseReduction; -class SAHighISONoiseReduction2 : public ChoiceInterpreter +class SAHighISONoiseReduction2 : public ChoiceInterpreter<> { public: SAHighISONoiseReduction2 () @@ -124,7 +124,7 @@ public: }; SAHighISONoiseReduction2 saHighISONoiseReduction2; -class SAHighISONoiseReduction3 : public ChoiceInterpreter +class SAHighISONoiseReduction3 : public ChoiceInterpreter<> { public: SAHighISONoiseReduction3 () @@ -137,7 +137,7 @@ public: }; SAHighISONoiseReduction3 saHighISONoiseReduction3; -class SAHighISONoiseReduction4 : public ChoiceInterpreter +class SAHighISONoiseReduction4 : public ChoiceInterpreter<> { public: SAHighISONoiseReduction4 () @@ -150,7 +150,7 @@ public: }; SAHighISONoiseReduction4 saHighISONoiseReduction4; -class SAHighISONoiseReduction5 : public ChoiceInterpreter +class SAHighISONoiseReduction5 : public ChoiceInterpreter<> { public: SAHighISONoiseReduction5 () @@ -161,7 +161,7 @@ public: }; SAHighISONoiseReduction5 saHighISONoiseReduction5; -class SASmileShutterMode : public ChoiceInterpreter +class SASmileShutterMode : public ChoiceInterpreter<> { public: SASmileShutterMode () @@ -173,7 +173,7 @@ public: }; SASmileShutterMode saSmileShutterMode; -class SAHDRLevel : public ChoiceInterpreter +class SAHDRLevel : public ChoiceInterpreter<> { public: SAHDRLevel () @@ -191,7 +191,7 @@ public: }; SAHDRLevel saHDRLevel; -class SAViewingMode : public ChoiceInterpreter +class SAViewingMode : public ChoiceInterpreter<> { public: SAViewingMode () @@ -204,7 +204,7 @@ public: }; SAViewingMode saViewingMode; -class SAFlashAction : public ChoiceInterpreter +class SAFlashAction : public ChoiceInterpreter<> { public: SAFlashAction () @@ -215,7 +215,7 @@ public: }; SAFlashAction saFlashAction; -class SALiveViewFocusMode : public ChoiceInterpreter +class SALiveViewFocusMode : public ChoiceInterpreter<> { public: SALiveViewFocusMode () @@ -227,7 +227,7 @@ public: }; SALiveViewFocusMode saLiveViewFocusMode; -class SALensMount : public ChoiceInterpreter +class SALensMount : public ChoiceInterpreter<> { public: SALensMount () @@ -239,7 +239,7 @@ public: }; SALensMount saLensMount; -class SASweepPanoramaSize : public ChoiceInterpreter +class SASweepPanoramaSize : public ChoiceInterpreter<> { public: SASweepPanoramaSize () @@ -250,7 +250,7 @@ public: }; SASweepPanoramaSize saSweepPanoramaSize; -class SASweepPanoramaDirection : public ChoiceInterpreter +class SASweepPanoramaDirection : public ChoiceInterpreter<> { public: SASweepPanoramaDirection () @@ -263,7 +263,7 @@ public: }; SASweepPanoramaDirection saSweepPanoramaDirection; -class SALiveViewAFSetting : public ChoiceInterpreter +class SALiveViewAFSetting : public ChoiceInterpreter<> { public: SALiveViewAFSetting () @@ -275,7 +275,7 @@ public: }; SALiveViewAFSetting saLiveViewAFSetting; -class SAPanoramaSize3D : public ChoiceInterpreter +class SAPanoramaSize3D : public ChoiceInterpreter<> { public: SAPanoramaSize3D () @@ -288,7 +288,7 @@ public: }; SAPanoramaSize3D saPanoramaSize3D; -class SALiveViewMetering : public ChoiceInterpreter +class SALiveViewMetering : public ChoiceInterpreter<> { public: SALiveViewMetering () @@ -300,7 +300,7 @@ public: }; SALiveViewMetering saLiveViewMetering; -class SAWhiteBalanceInterpreter: public ChoiceInterpreter +class SAWhiteBalanceInterpreter: public ChoiceInterpreter<> { public: SAWhiteBalanceInterpreter() @@ -319,7 +319,7 @@ public: }; SAWhiteBalanceInterpreter saWhiteBalanceInterpreter; -class SAWhiteBalanceSettingInterpreter: public ChoiceInterpreter +class SAWhiteBalanceSettingInterpreter: public ChoiceInterpreter<> { public: SAWhiteBalanceSettingInterpreter() @@ -379,7 +379,7 @@ public: }; SAWhiteBalanceSettingInterpreter saWhiteBalanceSettingInterpreter; -class SASceneModeInterpreter : public ChoiceInterpreter +class SASceneModeInterpreter : public ChoiceInterpreter<> { public: SASceneModeInterpreter () @@ -413,7 +413,7 @@ public: }; SASceneModeInterpreter saSceneModeInterpreter; -class SAZoneMatchingInterpreter : public ChoiceInterpreter +class SAZoneMatchingInterpreter : public ChoiceInterpreter<> { public: SAZoneMatchingInterpreter () @@ -425,7 +425,7 @@ public: }; SAZoneMatchingInterpreter saZoneMatchingInterpreter; -class SADynamicRangeOptimizerInterpreter : public ChoiceInterpreter +class SADynamicRangeOptimizerInterpreter : public ChoiceInterpreter<> { public: SADynamicRangeOptimizerInterpreter () @@ -448,7 +448,7 @@ public: }; SADynamicRangeOptimizerInterpreter saDynamicRangeOptimizerInterpreter; -class SAColorModeInterpreter : public ChoiceInterpreter +class SAColorModeInterpreter : public ChoiceInterpreter<> { public: SAColorModeInterpreter () @@ -477,7 +477,7 @@ public: }; SAColorModeInterpreter saColorModeInterpreter; -class SAExposureModeInterpreter : public ChoiceInterpreter +class SAExposureModeInterpreter : public ChoiceInterpreter<> { public: SAExposureModeInterpreter () @@ -517,7 +517,7 @@ public: }; SAExposureModeInterpreter saExposureModeInterpreter; -class SAQualityInterpreter : public ChoiceInterpreter +class SAQualityInterpreter : public ChoiceInterpreter<> { public: SAQualityInterpreter () @@ -528,7 +528,7 @@ public: }; SAQualityInterpreter saQualityInterpreter; -class SAAntiBlurInterpreter : public ChoiceInterpreter +class SAAntiBlurInterpreter : public ChoiceInterpreter<> { public: SAAntiBlurInterpreter () @@ -1343,7 +1343,7 @@ public: }; SALensID2Interpreter saLensID2Interpreter; -class MATeleconverterInterpreter : public ChoiceInterpreter +class MATeleconverterInterpreter : public ChoiceInterpreter<> { public: MATeleconverterInterpreter () @@ -1361,7 +1361,7 @@ public: }; MATeleconverterInterpreter maTeleconverterInterpreter; -class MAQualityInterpreter : public ChoiceInterpreter +class MAQualityInterpreter : public ChoiceInterpreter<> { public: MAQualityInterpreter () @@ -1379,7 +1379,7 @@ public: }; MAQualityInterpreter maQualityInterpreter; -class MAImageSizeInterpreter : public ChoiceInterpreter +class MAImageSizeInterpreter : public ChoiceInterpreter<> { public: MAImageSizeInterpreter () @@ -1394,7 +1394,7 @@ public: }; MAImageSizeInterpreter maImageSizeInterpreter; -class SAQualityInterpreter2 : public ChoiceInterpreter +class SAQualityInterpreter2 : public ChoiceInterpreter<> { public: SAQualityInterpreter2 () @@ -1410,7 +1410,7 @@ public: }; SAQualityInterpreter2 saQualityInterpreter2; -class SAQualityInterpreter3 : public ChoiceInterpreter +class SAQualityInterpreter3 : public ChoiceInterpreter<> { public: SAQualityInterpreter3 () @@ -1423,7 +1423,7 @@ public: }; SAQualityInterpreter3 saQualityInterpreter3; -class SADriveMode : public ChoiceInterpreter +class SADriveMode : public ChoiceInterpreter<> { public: SADriveMode () @@ -1445,7 +1445,7 @@ public: }; SADriveMode saDriveMode; -class SADriveMode2 : public ChoiceInterpreter +class SADriveMode2 : public ChoiceInterpreter<> { public: SADriveMode2 () @@ -1461,7 +1461,7 @@ public: }; SADriveMode2 saDriveMode2; -class SADriveMode3 : public ChoiceInterpreter +class SADriveMode3 : public ChoiceInterpreter<> { public: SADriveMode3 () @@ -1487,7 +1487,7 @@ public: }; SADriveMode3 saDriveMode3; -class SAFocusMode: public ChoiceInterpreter +class SAFocusMode: public ChoiceInterpreter<> { public: SAFocusMode () @@ -1502,7 +1502,7 @@ public: }; SAFocusMode saFocusMode; -class SAFocusMode2: public ChoiceInterpreter +class SAFocusMode2: public ChoiceInterpreter<> { public: SAFocusMode2 () @@ -1516,7 +1516,7 @@ public: }; SAFocusMode2 saFocusMode2; -class SAFocusModeSetting3: public ChoiceInterpreter +class SAFocusModeSetting3: public ChoiceInterpreter<> { public: SAFocusModeSetting3 () @@ -1531,7 +1531,7 @@ public: }; SAFocusModeSetting3 saFocusModeSetting3; -class SAAFMode: public ChoiceInterpreter +class SAAFMode: public ChoiceInterpreter<> { public: SAAFMode() @@ -1549,7 +1549,7 @@ public: }; SAAFMode saAFMode; -class SAAFAreaMode: public ChoiceInterpreter +class SAAFAreaMode: public ChoiceInterpreter<> { public: SAAFAreaMode () @@ -1561,7 +1561,7 @@ public: }; SAAFAreaMode saAFAreaMode; -class SAAFAreaMode2: public ChoiceInterpreter +class SAAFAreaMode2: public ChoiceInterpreter<> { public: SAAFAreaMode2 () @@ -1574,7 +1574,7 @@ public: }; SAAFAreaMode2 saAFAreaMode2; -class SAAFPointSelected: public ChoiceInterpreter +class SAAFPointSelected: public ChoiceInterpreter<> { public: SAAFPointSelected () @@ -1594,7 +1594,7 @@ public: }; SAAFPointSelected saAFPointSelected; -class SACameraInfoAFPointSelected: public ChoiceInterpreter +class SACameraInfoAFPointSelected: public ChoiceInterpreter<> { public: SACameraInfoAFPointSelected () @@ -1619,7 +1619,7 @@ public: }; SACameraInfoAFPointSelected saCameraInfoAFPointSelected; -class SACameraInfoAFPoint: public ChoiceInterpreter +class SACameraInfoAFPoint: public ChoiceInterpreter<> { public: SACameraInfoAFPoint () @@ -1647,7 +1647,7 @@ public: }; SACameraInfoAFPoint saCameraInfoAFPoint; -class SAAFPointSelected2: public ChoiceInterpreter +class SAAFPointSelected2: public ChoiceInterpreter<> { public: SAAFPointSelected2 () @@ -1665,7 +1665,7 @@ public: }; SAAFPointSelected2 saAFPointSelected2; -class SAMeteringMode0_3: public ChoiceInterpreter +class SAMeteringMode0_3: public ChoiceInterpreter<> { public: SAMeteringMode0_3 () @@ -1677,7 +1677,7 @@ public: }; SAMeteringMode0_3 saMeteringMode0_3; -class SAMeteringMode1_3: public ChoiceInterpreter +class SAMeteringMode1_3: public ChoiceInterpreter<> { public: SAMeteringMode1_3 () @@ -1689,7 +1689,7 @@ public: }; SAMeteringMode1_3 saMeteringMode1_3; -class SAMeteringMode1_4: public ChoiceInterpreter +class SAMeteringMode1_4: public ChoiceInterpreter<> { public: SAMeteringMode1_4 () @@ -1701,7 +1701,7 @@ public: }; SAMeteringMode1_4 saMeteringMode1_4; -class SADynamicRangeOptimizerMode: public ChoiceInterpreter +class SADynamicRangeOptimizerMode: public ChoiceInterpreter<> { public: SADynamicRangeOptimizerMode () @@ -1715,7 +1715,7 @@ public: }; SADynamicRangeOptimizerMode saDynamicRangeOptimizerMode; -class SADynamicRangeOptimizerSetting: public ChoiceInterpreter +class SADynamicRangeOptimizerSetting: public ChoiceInterpreter<> { public: SADynamicRangeOptimizerSetting () @@ -1727,7 +1727,7 @@ public: }; SADynamicRangeOptimizerSetting saDynamicRangeOptimizerSetting; -class SACreativeStyle: public ChoiceInterpreter +class SACreativeStyle: public ChoiceInterpreter<> { public: SACreativeStyle () @@ -1750,7 +1750,7 @@ public: }; SACreativeStyle saCreativeStyle; -class SACreativeStyle2: public ChoiceInterpreter +class SACreativeStyle2: public ChoiceInterpreter<> { public: SACreativeStyle2 () @@ -1766,7 +1766,7 @@ public: }; SACreativeStyle2 saCreativeStyle2; -class SACreativeStyleSetting: public ChoiceInterpreter +class SACreativeStyleSetting: public ChoiceInterpreter<> { public: SACreativeStyleSetting () @@ -1781,7 +1781,7 @@ public: }; SACreativeStyleSetting saCreativeStyleSetting; -class SAFlashControl: public ChoiceInterpreter +class SAFlashControl: public ChoiceInterpreter<> { public: SAFlashControl () @@ -1792,7 +1792,7 @@ public: }; SAFlashControl saFlashControl; -class SAFlashMode: public ChoiceInterpreter +class SAFlashMode: public ChoiceInterpreter<> { public: SAFlashMode () @@ -1803,7 +1803,7 @@ public: }; SAFlashMode saFlashMode; -class SAFlashMode2: public ChoiceInterpreter +class SAFlashMode2: public ChoiceInterpreter<> { public: SAFlashMode2 () @@ -1818,7 +1818,7 @@ public: }; SAFlashMode2 saFlashMode2; -class SAExposureProgram: public ChoiceInterpreter +class SAExposureProgram: public ChoiceInterpreter<> { public: SAExposureProgram () @@ -1841,7 +1841,7 @@ public: }; SAExposureProgram saExposureProgram; -class SAExposureProgram2: public ChoiceInterpreter +class SAExposureProgram2: public ChoiceInterpreter<> { public: SAExposureProgram2 () @@ -1882,7 +1882,7 @@ public: }; SAExposureProgram2 saExposureProgram2; -class SARotation: public ChoiceInterpreter +class SARotation: public ChoiceInterpreter<> { public: SARotation () @@ -1895,7 +1895,7 @@ public: }; SARotation saRotation; -class SASonyImageSize: public ChoiceInterpreter +class SASonyImageSize: public ChoiceInterpreter<> { public: SASonyImageSize () @@ -1907,7 +1907,7 @@ public: }; SASonyImageSize saSonyImageSize; -class SASonyImageSize3: public ChoiceInterpreter +class SASonyImageSize3: public ChoiceInterpreter<> { public: SASonyImageSize3 () @@ -1922,7 +1922,7 @@ public: }; SASonyImageSize3 saSonyImageSize3; -class SAAspectRatio: public ChoiceInterpreter +class SAAspectRatio: public ChoiceInterpreter<> { public: SAAspectRatio () @@ -1933,7 +1933,7 @@ public: }; SAAspectRatio saAspectRatio; -class SAAspectRatio2: public ChoiceInterpreter +class SAAspectRatio2: public ChoiceInterpreter<> { public: SAAspectRatio2 () @@ -1944,7 +1944,7 @@ public: }; SAAspectRatio2 saAspectRatio2; -class SAExposureLevelIncrements: public ChoiceInterpreter +class SAExposureLevelIncrements: public ChoiceInterpreter<> { public: SAExposureLevelIncrements () @@ -1955,7 +1955,7 @@ public: }; SAExposureLevelIncrements saExposureLevelIncrements; -class SAAFIlluminator: public ChoiceInterpreter +class SAAFIlluminator: public ChoiceInterpreter<> { public: SAAFIlluminator () @@ -1967,7 +1967,7 @@ public: }; SAAFIlluminator saAFIlluminator; -class SAColorSpace1_2: public ChoiceInterpreter +class SAColorSpace1_2: public ChoiceInterpreter<> { public: SAColorSpace1_2 () @@ -1978,7 +1978,7 @@ public: }; SAColorSpace1_2 saColorSpace1_2; -class SAColorSpace0_5: public ChoiceInterpreter +class SAColorSpace0_5: public ChoiceInterpreter<> { public: SAColorSpace0_5 () @@ -1990,7 +1990,7 @@ public: }; SAColorSpace0_5 saColorSpace0_5; -class SAColorSpace5_6: public ChoiceInterpreter +class SAColorSpace5_6: public ChoiceInterpreter<> { public: SAColorSpace5_6 () @@ -2001,7 +2001,7 @@ public: }; SAColorSpace5_6 saColorSpace5_6; -class SAReleaseModeInterpreter: public ChoiceInterpreter +class SAReleaseModeInterpreter: public ChoiceInterpreter<> { public: SAReleaseModeInterpreter () @@ -2016,7 +2016,7 @@ public: }; SAReleaseModeInterpreter saReleaseModeInterpreter; -class SAImageStyleInterpreter: public ChoiceInterpreter +class SAImageStyleInterpreter: public ChoiceInterpreter<> { public: SAImageStyleInterpreter () @@ -2040,7 +2040,7 @@ public: }; SAImageStyleInterpreter saImageStyleInterpreter; -class SAPictureEffectInterpreter: public ChoiceInterpreter +class SAPictureEffectInterpreter: public ChoiceInterpreter<> { public: SAPictureEffectInterpreter() @@ -2085,7 +2085,7 @@ public: }; SAPictureEffectInterpreter saPictureEffectInterpreter; -class SACameraInfoFocusStatusInterpreter : public ChoiceInterpreter +class SACameraInfoFocusStatusInterpreter : public ChoiceInterpreter<> { public: SACameraInfoFocusStatusInterpreter() diff --git a/rtexif/stdattribs.cc b/rtexif/stdattribs.cc index 76ba1f633..aa8ed2b97 100644 --- a/rtexif/stdattribs.cc +++ b/rtexif/stdattribs.cc @@ -28,7 +28,7 @@ namespace rtexif { -class ColorSpaceInterpreter : public ChoiceInterpreter +class ColorSpaceInterpreter : public ChoiceInterpreter<> { public: @@ -41,7 +41,7 @@ public: }; ColorSpaceInterpreter colorSpaceInterpreter; -class PreviewColorSpaceInterpreter : public ChoiceInterpreter +class PreviewColorSpaceInterpreter : public ChoiceInterpreter<> { public: @@ -56,7 +56,7 @@ public: }; PreviewColorSpaceInterpreter previewColorSpaceInterpreter; -class LinearSRGBInterpreter : public ChoiceInterpreter +class LinearSRGBInterpreter : public ChoiceInterpreter<> { public: @@ -68,7 +68,7 @@ public: }; LinearSRGBInterpreter linearSRGBInterpreter; -class DefaultBlackRenderInterpreter : public ChoiceInterpreter +class DefaultBlackRenderInterpreter : public ChoiceInterpreter<> { public: @@ -80,7 +80,7 @@ public: }; DefaultBlackRenderInterpreter defaultBlackRenderInterpreter; -class ExposureProgramInterpreter : public ChoiceInterpreter +class ExposureProgramInterpreter : public ChoiceInterpreter<> { public: @@ -99,7 +99,7 @@ public: }; ExposureProgramInterpreter exposureProgramInterpreter; -class MeteringModeInterpreter : public ChoiceInterpreter +class MeteringModeInterpreter : public ChoiceInterpreter<> { public: @@ -117,7 +117,7 @@ public: }; MeteringModeInterpreter meteringModeInterpreter; -class ExposureModeInterpreter : public ChoiceInterpreter +class ExposureModeInterpreter : public ChoiceInterpreter<> { public: @@ -130,7 +130,7 @@ public: }; ExposureModeInterpreter exposureModeInterpreter; -class WhiteBalanceInterpreter : public ChoiceInterpreter +class WhiteBalanceInterpreter : public ChoiceInterpreter<> { public: @@ -142,7 +142,7 @@ public: }; WhiteBalanceInterpreter whiteBalanceInterpreter; -class SceneCaptureInterpreter : public ChoiceInterpreter +class SceneCaptureInterpreter : public ChoiceInterpreter<> { public: @@ -156,7 +156,7 @@ public: }; SceneCaptureInterpreter sceneCaptureInterpreter; -class GainControlInterpreter : public ChoiceInterpreter +class GainControlInterpreter : public ChoiceInterpreter<> { public: @@ -171,7 +171,7 @@ public: }; GainControlInterpreter gainControlInterpreter; -class ContrastInterpreter : public ChoiceInterpreter +class ContrastInterpreter : public ChoiceInterpreter<> { public: @@ -184,7 +184,7 @@ public: }; ContrastInterpreter contrastInterpreter; -class SharpnessInterpreter : public ChoiceInterpreter +class SharpnessInterpreter : public ChoiceInterpreter<> { public: @@ -197,7 +197,7 @@ public: }; SharpnessInterpreter sharpnessInterpreter; -class SaturationInterpreter : public ChoiceInterpreter +class SaturationInterpreter : public ChoiceInterpreter<> { public: @@ -210,7 +210,7 @@ public: }; SaturationInterpreter saturationInterpreter; -class FlashInterpreter : public ChoiceInterpreter +class FlashInterpreter : public ChoiceInterpreter<> { public: @@ -242,7 +242,7 @@ public: }; FlashInterpreter flashInterpreter; -class LightSourceInterpreter : public ChoiceInterpreter +class LightSourceInterpreter : public ChoiceInterpreter<> { public: @@ -273,7 +273,7 @@ public: }; LightSourceInterpreter lightSourceInterpreter; -class CompressionInterpreter : public ChoiceInterpreter +class CompressionInterpreter : public ChoiceInterpreter<> { public: @@ -285,7 +285,7 @@ public: }; CompressionInterpreter compressionInterpreter; -class PhotometricInterpreter : public ChoiceInterpreter +class PhotometricInterpreter : public ChoiceInterpreter<> { public: @@ -297,7 +297,7 @@ public: }; PhotometricInterpreter photometricInterpreter; -class ProfileEmbedPolicyInterpreter : public ChoiceInterpreter +class ProfileEmbedPolicyInterpreter : public ChoiceInterpreter<> { public: @@ -311,7 +311,7 @@ public: }; ProfileEmbedPolicyInterpreter profileEmbedPolicyInterpreter; -class PlanarConfigInterpreter : public ChoiceInterpreter +class PlanarConfigInterpreter : public ChoiceInterpreter<> { public: @@ -591,7 +591,7 @@ public: }; CFAInterpreter cfaInterpreter; -class OrientationInterpreter : public ChoiceInterpreter +class OrientationInterpreter : public ChoiceInterpreter<> { public: OrientationInterpreter () @@ -610,7 +610,7 @@ public: }; OrientationInterpreter orientationInterpreter; -class UnitsInterpreter : public ChoiceInterpreter +class UnitsInterpreter : public ChoiceInterpreter<> { public: UnitsInterpreter() diff --git a/rtgui/batchqueue.h b/rtgui/batchqueue.h index 7751ec176..95d92aef2 100644 --- a/rtgui/batchqueue.h +++ b/rtgui/batchqueue.h @@ -99,6 +99,8 @@ private: bool saveBatchQueue (); void notifyListener (); + using ThumbBrowserBase::redrawNeeded; + BatchQueueEntry* processing; // holds the currently processed image FileCatalog* fileCatalog; int sequence; // holds the current sequence index diff --git a/rtgui/filebrowser.h b/rtgui/filebrowser.h index 209399135..f876872eb 100644 --- a/rtgui/filebrowser.h +++ b/rtgui/filebrowser.h @@ -61,6 +61,8 @@ class FileBrowser : public ThumbBrowserBase, private: typedef sigc::signal type_trash_changed; + using ThumbBrowserBase::redrawNeeded; + IdleRegister idle_register; unsigned int session_id_; diff --git a/rtgui/guiutils.h b/rtgui/guiutils.h index a5705630f..fdf1ea5c7 100644 --- a/rtgui/guiutils.h +++ b/rtgui/guiutils.h @@ -194,6 +194,8 @@ private: ExpanderBox* expBox; /// Frame that includes the child and control its visibility Gtk::EventBox *imageEvBox; /// Enable/Disable or Open/Close arrow event box + using Gtk::Container::add; + /// Triggered on opened/closed event bool on_toggle(GdkEventButton* event); /// Triggered on enabled/disabled change -> will emit a toggle event to the connected objects From e2154f9feb53ccc3196b5028fbb7c27b1cdd636c Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Mon, 18 Feb 2019 15:25:35 +0100 Subject: [PATCH 29/41] Fix a race in get_dark_channel() --- rtengine/ipdehaze.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtengine/ipdehaze.cc b/rtengine/ipdehaze.cc index 97c1883c9..2129b1f92 100644 --- a/rtengine/ipdehaze.cc +++ b/rtengine/ipdehaze.cc @@ -66,7 +66,7 @@ int get_dark_channel(const array2D &R, const array2D &G, const arr int npatches = 0; #ifdef _OPENMP - #pragma omp parallel for if (multithread) + #pragma omp parallel for reduction(+:npatches) if (multithread) #endif for (int y = 0; y < H; y += patchsize) { int pH = min(y+patchsize, H); From 8d8aeb00a740f27af72bcacff2163df369b5020c Mon Sep 17 00:00:00 2001 From: Ingo Weyrich Date: Mon, 18 Feb 2019 16:56:39 +0100 Subject: [PATCH 30/41] Fix segfault when dehaze depth map is enabled --- rtengine/ipdehaze.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtengine/ipdehaze.cc b/rtengine/ipdehaze.cc index 2129b1f92..c9b1a3cdb 100644 --- a/rtengine/ipdehaze.cc +++ b/rtengine/ipdehaze.cc @@ -311,7 +311,7 @@ void ImProcFunctions::dehaze(Imagefloat *img) } float mt = max(t[y][x], t0, tl + teps, tu + teps); if (params->dehaze.showDepthMap) { - img->r(y, x) = img->g(y, x) = img->b(y, x) = 1.f - mt; + img->r(y, x) = img->g(y, x) = img->b(y, x) = LIM01(1.f - mt); } else { float r = (rgb[0] - ambient[0]) / mt + ambient[0]; float g = (rgb[1] - ambient[1]) / mt + ambient[1]; From 069584c50582d17a7265fc64cdd80e34b3a65b1f Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Mon, 18 Feb 2019 22:06:34 +0100 Subject: [PATCH 31/41] Fix L* and CC curve background histograms The histograms were not being drawn using the full available width. Patch by Ingo Weyrich, fixes #4933 --- rtengine/improcfun.cc | 26 ++++---------------------- 1 file changed, 4 insertions(+), 22 deletions(-) diff --git a/rtengine/improcfun.cc b/rtengine/improcfun.cc index 3c8b0d430..465e3ffe8 100644 --- a/rtengine/improcfun.cc +++ b/rtengine/improcfun.cc @@ -4289,17 +4289,8 @@ void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBuffer, int pW } - LUTu hist16Clad; - LUTu hist16Llad; - - //preparate for histograms CIECAM - if (pW != 1) { //only with improccoordinator - hist16Clad (65536); - hist16Clad.clear(); - hist16Llad (65536); - hist16Llad.clear(); - - } + const float histLFactor = pW != 1 ? histLCurve.getSize() / 100.f : 1.f; + const float histCFactor = pW != 1 ? histCCurve.getSize() / 48000.f : 1.f; #ifdef _DEBUG MyTime t1e, t2e; @@ -4799,8 +4790,7 @@ void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBuffer, int pW //update histogram C if (pW != 1) { //only with improccoordinator - int posp = (int)sqrt (atmp * atmp + btmp * btmp); - hist16Clad[posp]++; + histCCurve[histCFactor * sqrt(atmp * atmp + btmp * btmp)]++; } if (editPipette && editID == EUID_Lab_LCCurve) { @@ -4855,8 +4845,7 @@ void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBuffer, int pW //update histo LC if (pW != 1) { //only with improccoordinator - int posl = Lprov1 * 327.68f; - hist16Llad[posl]++; + histLCurve[Lprov1 * histLFactor]++; } Chprov1 = sqrt (SQR (atmp) + SQR (btmp)) / 327.68f; @@ -4943,13 +4932,6 @@ void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBuffer, int pW } } // end of parallelization - if (pW != 1) { //only with improccoordinator - //update histogram C with data chromaticity and not with CC curve - hist16Clad.compressTo (histCCurve); - //update histogram L with data luminance - hist16Llad.compressTo (histLCurve); - } - #ifdef _DEBUG if (settings->verbose) { From 41495853d69f08743946837d0e0d9fdd267531da Mon Sep 17 00:00:00 2001 From: heckflosse Date: Mon, 18 Feb 2019 23:28:05 +0100 Subject: [PATCH 32/41] guidedfilter: multithreaded boxblur --- rtengine/guidedfilter.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/rtengine/guidedfilter.cc b/rtengine/guidedfilter.cc index e64ef4e3e..e7fe9b8af 100644 --- a/rtengine/guidedfilter.cc +++ b/rtengine/guidedfilter.cc @@ -154,6 +154,9 @@ void guidedFilter(const array2D &guide, const array2D &src, array2 rad = LIM(rad, 0, (min(s.width(), s.height()) - 1) / 2 - 1); float **src = s; float **dst = d; +#ifdef _OPENMP + #pragma omp parallel if (multithread) +#endif boxblur(src, dst, blur_buf.data, rad, rad, s.width(), s.height()); }; From cbdf3267e0af8709bd8df2e0563ecaf33565e05c Mon Sep 17 00:00:00 2001 From: heckflosse Date: Tue, 19 Feb 2019 21:37:04 +0100 Subject: [PATCH 33/41] Haze removal doesn't work with images with large overexposed regions, fixes #5181, patch by @agriggio and @heckflosse --- rtengine/ipdehaze.cc | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/rtengine/ipdehaze.cc b/rtengine/ipdehaze.cc index c9b1a3cdb..54dfa0cf6 100644 --- a/rtengine/ipdehaze.cc +++ b/rtengine/ipdehaze.cc @@ -58,23 +58,20 @@ namespace { #endif -int get_dark_channel(const array2D &R, const array2D &G, const array2D &B, array2D &dst, int patchsize, float *ambient, bool clip, bool multithread) +int get_dark_channel(const array2D &R, const array2D &G, const array2D &B, array2D &dst, int patchsize, const float ambient[3], bool clip, bool multithread) { const int W = R.width(); const int H = R.height(); - int npatches = 0; - #ifdef _OPENMP - #pragma omp parallel for reduction(+:npatches) if (multithread) + #pragma omp parallel for if (multithread) #endif for (int y = 0; y < H; y += patchsize) { - int pH = min(y+patchsize, H); - for (int x = 0; x < W; x += patchsize, ++npatches) { + const int pH = min(y + patchsize, H); + for (int x = 0; x < W; x += patchsize) { float val = RT_INFINITY_F; - int pW = min(x+patchsize, W); + const int pW = min(x + patchsize, W); for (int yy = y; yy < pH; ++yy) { - float yval = RT_INFINITY_F; for (int xx = x; xx < pW; ++xx) { float r = R[yy][xx]; float g = G[yy][xx]; @@ -84,20 +81,19 @@ int get_dark_channel(const array2D &R, const array2D &G, const arr g /= ambient[1]; b /= ambient[2]; } - yval = min(yval, r, g, b); + val = min(val, r, g, b); } - val = min(val, yval); } if (clip) { val = LIM01(val); } for (int yy = y; yy < pH; ++yy) { - std::fill(dst[yy]+x, dst[yy]+pW, val); + std::fill(dst[yy] + x, dst[yy] + pW, val); } } } - return npatches; + return (W / patchsize + ((W % patchsize) > 0)) * (H / patchsize + ((H % patchsize) > 0)); } @@ -121,7 +117,7 @@ float estimate_ambient_light(const array2D &R, const array2D &G, c std::priority_queue p; for (int y = 0; y < H; y += patchsize) { for (int x = 0; x < W; x += patchsize) { - if (!OOG(dark[y][x], 1.f)) { + if (!OOG(dark[y][x], 1.f - 1e-5f)) { p.push(dark[y][x]); } } @@ -221,7 +217,7 @@ void ImProcFunctions::dehaze(Imagefloat *img) const int W = img->getWidth(); const int H = img->getHeight(); - float strength = LIM01(float(params->dehaze.strength) / 100.f * 0.9f); + const float strength = LIM01(float(params->dehaze.strength) / 100.f * 0.9f); if (options.rtSettings.verbose) { std::cout << "dehaze: strength = " << strength << std::endl; From b37f5453911cac58b2f57889655315ea6885130d Mon Sep 17 00:00:00 2001 From: heckflosse Date: Tue, 19 Feb 2019 21:50:34 +0100 Subject: [PATCH 34/41] Support Fuji SN EXR mode RAFs, #4830 --- rtdata/languages/default | 3 ++- rtengine/rawimagesource.cc | 13 +++++++++++++ rtengine/rawimagesource.h | 9 +++++++-- rtgui/bayerprocess.cc | 5 ++++- 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index fb024b3d5..5ec37ce8b 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -1874,7 +1874,8 @@ TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, bu TP_RAW_HPHD;HPHD TP_RAW_IGV;IGV TP_RAW_IMAGENUM;Sub-image -TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. +TP_RAW_IMAGENUM_SN;SN mode +TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. TP_RAW_LABEL;Demosaicing TP_RAW_LMMSE;LMMSE TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index f551eb0dc..79922adbd 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -1793,6 +1793,19 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le copyOriginalPixels(raw, riFrames[i], rid, rif, *rawDataFrames[i]); } } + } else if (numFrames == 2 && currFrame == 2) { // average the frames + if(!rawDataBuffer[0]) { + rawDataBuffer[0] = new array2D; + } + rawDataFrames[1] = rawDataBuffer[0]; + copyOriginalPixels(raw, riFrames[1], rid, rif, *rawDataFrames[1]); + copyOriginalPixels(raw, ri, rid, rif, rawData); + + for (int i = 0; i < H; ++i) { + for (int j = 0; j < W; ++j) { + rawData[i][j] = (rawData[i][j] + (*rawDataFrames[1])[i][j]) * 0.5f; + } + } } else { copyOriginalPixels(raw, ri, rid, rif, rawData); } diff --git a/rtengine/rawimagesource.h b/rtengine/rawimagesource.h index a23e9c3cb..2c83b9bd3 100644 --- a/rtengine/rawimagesource.h +++ b/rtengine/rawimagesource.h @@ -201,8 +201,13 @@ public: static void init (); static void cleanup (); void setCurrentFrame(unsigned int frameNum) override { - currFrame = std::min(numFrames - 1, frameNum); - ri = riFrames[currFrame]; + if (numFrames == 2 && frameNum == 2) { // special case for averaging of two frames + currFrame = frameNum; + ri = riFrames[0]; + } else { + currFrame = std::min(numFrames - 1, frameNum); + ri = riFrames[currFrame]; + } } int getFrameCount() override {return numFrames;} int getFlatFieldAutoClipValue() override {return flatFieldAutoClipValue;} diff --git a/rtgui/bayerprocess.cc b/rtgui/bayerprocess.cc index 74cf27dde..279e68bd6 100644 --- a/rtgui/bayerprocess.cc +++ b/rtgui/bayerprocess.cc @@ -730,7 +730,10 @@ void BayerProcess::FrameCountChanged(int n, int frameNum) entry << i; imageNumber->append(entry.str()); } - imageNumber->set_active(std::min(frameNum, n - 1)); + if (n == 2) { + imageNumber->append(M("TP_RAW_IMAGENUM_SN")); + } + imageNumber->set_active(std::min(frameNum, n == 2 ? n : n - 1)); if (n == 1) { imageNumberBox->hide(); } else { From e39726dbf7c88e9bfce2bf338ff32ef3669b52ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=B6ssie?= Date: Wed, 20 Feb 2019 20:55:07 +0100 Subject: [PATCH 35/41] Return first frame in `FramesData` on OOB access (#4830) --- rtengine/imagedata.cc | 213 ++++++++++++++++++++++----- rtengine/imagefloat.cc | 1 - rtexif/rtexif.h | 4 +- rtgui/addsetids.h | 14 +- rtgui/diagonalcurveeditorsubgroup.cc | 12 +- rtgui/histogrampanel.cc | 2 +- 6 files changed, 191 insertions(+), 55 deletions(-) diff --git a/rtengine/imagedata.cc b/rtengine/imagedata.cc index 892a9efed..9b2de3e3b 100644 --- a/rtengine/imagedata.cc +++ b/rtengine/imagedata.cc @@ -16,6 +16,7 @@ * You should have received a copy of the GNU General Public License * along with RawTherapee. If not, see . */ +#include #include #include #include @@ -43,6 +44,22 @@ Glib::ustring to_utf8 (const std::string& str) } } +template +T getFromFrame( + const std::vector>& frames, + std::size_t frame, + const std::function& function +) +{ + if (frame < frames.size()) { + return function(*frames[frame]); + } + if (!frames.empty()) { + return function(*frames[0]); + } + return {}; +} + } FramesMetaData* FramesMetaData::fromFile (const Glib::ustring& fname, std::unique_ptr rml, bool firstFrameOnly) @@ -900,74 +917,196 @@ procparams::IPTCPairs FramesData::getIPTCData (unsigned int frame) const } } -bool FramesData::hasExif (unsigned int frame) const +bool FramesData::hasExif(unsigned int frame) const { - return frames.empty() || frame >= frames.size() ? false : frames.at(frame)->hasExif (); -} -bool FramesData::hasIPTC (unsigned int frame) const -{ - return frames.empty() || frame >= frames.size() ? false : frames.at(frame)->hasIPTC (); + return getFromFrame( + frames, + frame, + [](const FrameData& frame_data) + { + return frame_data.hasExif(); + } + ); } -tm FramesData::getDateTime (unsigned int frame) const +bool FramesData::hasIPTC(unsigned int frame) const { - if (frames.empty() || frame >= frames.size() ) { - return {}; - } else { - return frames.at(frame)->getDateTime (); - } + return getFromFrame( + frames, + frame, + [](const FrameData& frame_data) + { + return frame_data.hasIPTC(); + } + ); } + +tm FramesData::getDateTime(unsigned int frame) const +{ + return getFromFrame( + frames, + frame, + [](const FrameData& frame_data) + { + return frame_data.getDateTime(); + } + ); +} + time_t FramesData::getDateTimeAsTS(unsigned int frame) const { - return frames.empty() || frame >= frames.size() ? 0 : frames.at(frame)->getDateTimeAsTS (); + return getFromFrame( + frames, + frame, + [](const FrameData& frame_data) + { + return frame_data.getDateTimeAsTS(); + } + ); } -int FramesData::getISOSpeed (unsigned int frame) const + +int FramesData::getISOSpeed(unsigned int frame) const { - return frames.empty() || frame >= frames.size() ? 0 : frames.at(frame)->getISOSpeed (); + return getFromFrame( + frames, + frame, + [](const FrameData& frame_data) + { + return frame_data.getISOSpeed(); + } + ); } -double FramesData::getFNumber (unsigned int frame) const + +double FramesData::getFNumber(unsigned int frame) const { - return frames.empty() || frame >= frames.size() ? 0. : frames.at(frame)->getFNumber (); + return getFromFrame( + frames, + frame, + [](const FrameData& frame_data) + { + return frame_data.getFNumber(); + } + ); } -double FramesData::getFocalLen (unsigned int frame) const + +double FramesData::getFocalLen(unsigned int frame) const { - return frames.empty() || frame >= frames.size() ? 0. : frames.at(frame)->getFocalLen (); + return getFromFrame( + frames, + frame, + [](const FrameData& frame_data) + { + return frame_data.getFocalLen(); + } + ); } -double FramesData::getFocalLen35mm (unsigned int frame) const + +double FramesData::getFocalLen35mm(unsigned int frame) const { - return frames.empty() || frame >= frames.size() ? 0. : frames.at(frame)->getFocalLen35mm (); + return getFromFrame( + frames, + frame, + [](const FrameData& frame_data) + { + return frame_data.getFocalLen35mm(); + } + ); } -float FramesData::getFocusDist (unsigned int frame) const + +float FramesData::getFocusDist(unsigned int frame) const { - return frames.empty() || frame >= frames.size() ? 0.f : frames.at(frame)->getFocusDist (); + return getFromFrame( + frames, + frame, + [](const FrameData& frame_data) + { + return frame_data.getFocusDist(); + } + ); } -double FramesData::getShutterSpeed (unsigned int frame) const + +double FramesData::getShutterSpeed(unsigned int frame) const { - return frames.empty() || frame >= frames.size() ? 0. : frames.at(frame)->getShutterSpeed (); + return getFromFrame( + frames, + frame, + [](const FrameData& frame_data) + { + return frame_data.getShutterSpeed(); + } + ); } -double FramesData::getExpComp (unsigned int frame) const + +double FramesData::getExpComp(unsigned int frame) const { - return frames.empty() || frame >= frames.size() ? 0. : frames.at(frame)->getExpComp (); + return getFromFrame( + frames, + frame, + [](const FrameData& frame_data) + { + return frame_data.getExpComp(); + } + ); } -std::string FramesData::getMake (unsigned int frame) const + +std::string FramesData::getMake(unsigned int frame) const { - return frames.empty() || frame >= frames.size() ? std::string() : frames.at(frame)->getMake (); + return getFromFrame( + frames, + frame, + [](const FrameData& frame_data) + { + return frame_data.getMake(); + } + ); } -std::string FramesData::getModel (unsigned int frame) const + +std::string FramesData::getModel(unsigned int frame) const { - return frames.empty() || frame >= frames.size() ? std::string() : frames.at(frame)->getModel (); + return getFromFrame( + frames, + frame, + [](const FrameData& frame_data) + { + return frame_data.getModel(); + } + ); } -std::string FramesData::getLens (unsigned int frame) const + +std::string FramesData::getLens(unsigned int frame) const { - return frames.empty() || frame >= frames.size() ? std::string() : frames.at(frame)->getLens (); + return getFromFrame( + frames, + frame, + [](const FrameData& frame_data) + { + return frame_data.getLens(); + } + ); } -std::string FramesData::getSerialNumber (unsigned int frame) const + +std::string FramesData::getSerialNumber(unsigned int frame) const { - return frames.empty() || frame >= frames.size() ? std::string() : frames.at(frame)->getSerialNumber (); + return getFromFrame( + frames, + frame, + [](const FrameData& frame_data) + { + return frame_data.getSerialNumber(); + } + ); } -std::string FramesData::getOrientation (unsigned int frame) const + +std::string FramesData::getOrientation(unsigned int frame) const { - return frames.empty() || frame >= frames.size() ? std::string() : frames.at(frame)->getOrientation (); + return getFromFrame( + frames, + frame, + [](const FrameData& frame_data) + { + return frame_data.getOrientation(); + } + ); } diff --git a/rtengine/imagefloat.cc b/rtengine/imagefloat.cc index 34ec06492..74233741c 100644 --- a/rtengine/imagefloat.cc +++ b/rtengine/imagefloat.cc @@ -499,7 +499,6 @@ void Imagefloat::ExecCMSTransform(cmsHTRANSFORM hTransform) *(p++) = *(pR++); *(p++) = *(pG++); *(p++) = *(pB++); - } cmsDoTransform (hTransform, pBuf.data, pBuf.data, width); diff --git a/rtexif/rtexif.h b/rtexif/rtexif.h index 995717593..242e02dea 100644 --- a/rtexif/rtexif.h +++ b/rtexif/rtexif.h @@ -488,8 +488,8 @@ template class ChoiceInterpreter : public Interpreter { protected: - using Choices = std::map; - using ChoicesIterator = typename Choices::const_iterator; + using Choices = std::map; + using ChoicesIterator = typename Choices::const_iterator; Choices choices; public: ChoiceInterpreter () {}; diff --git a/rtgui/addsetids.h b/rtgui/addsetids.h index 1d9c621eb..86361b720 100644 --- a/rtgui/addsetids.h +++ b/rtgui/addsetids.h @@ -134,13 +134,13 @@ enum { ADDSET_FATTAL_ANCHOR, ADDSET_SHARPENMICRO_CONTRAST, ADDSET_SHARP_CONTRAST, - ADDSET_BAYER_FALSE_COLOR_SUPPRESSION, - ADDSET_BAYER_ITER, - ADDSET_BAYER_PS_SMOOTH, - ADDSET_BAYER_PS_EPERISO, - ADDSET_BAYER_PS_SIGMA, - ADDSET_BAYER_DUALDEMOZCONTRAST, - ADDSET_XTRANS_FALSE_COLOR_SUPPRESSION, + ADDSET_BAYER_FALSE_COLOR_SUPPRESSION, + ADDSET_BAYER_ITER, + ADDSET_BAYER_PS_SMOOTH, + ADDSET_BAYER_PS_EPERISO, + ADDSET_BAYER_PS_SIGMA, + ADDSET_BAYER_DUALDEMOZCONTRAST, + ADDSET_XTRANS_FALSE_COLOR_SUPPRESSION, ADDSET_SOFTLIGHT_STRENGTH, ADDSET_DEHAZE_STRENGTH, diff --git a/rtgui/diagonalcurveeditorsubgroup.cc b/rtgui/diagonalcurveeditorsubgroup.cc index e8b92062a..8f48ea3d7 100644 --- a/rtgui/diagonalcurveeditorsubgroup.cc +++ b/rtgui/diagonalcurveeditorsubgroup.cc @@ -56,7 +56,7 @@ DiagonalCurveEditorSubGroup::DiagonalCurveEditorSubGroup (CurveEditorGroup* prt, customCurve = Gtk::manage (new MyDiagonalCurve ()); customCurve->setType (DCT_Spline); - + Gtk::Grid* customCurveBox= Gtk::manage (new Gtk::Grid ()); customCurveBox->get_style_context()->add_class("curve-curvebox"); customCurveBox->add(*customCurve); @@ -148,7 +148,7 @@ DiagonalCurveEditorSubGroup::DiagonalCurveEditorSubGroup (CurveEditorGroup* prt, NURBSCurve = Gtk::manage (new MyDiagonalCurve ()); NURBSCurve->setType (DCT_NURBS); - + Gtk::Grid* NURBSCurveBox= Gtk::manage (new Gtk::Grid ()); NURBSCurveBox->get_style_context()->add_class("curve-curvebox"); NURBSCurveBox->add(*NURBSCurve); @@ -240,7 +240,7 @@ DiagonalCurveEditorSubGroup::DiagonalCurveEditorSubGroup (CurveEditorGroup* prt, paramCurve = Gtk::manage (new MyDiagonalCurve ()); paramCurve->setType (DCT_Parametric); - + Gtk::Grid* paramCurveBox= Gtk::manage (new Gtk::Grid ()); paramCurveBox->get_style_context()->add_class("curve-curvebox"); paramCurveBox->add(*paramCurve); @@ -669,9 +669,7 @@ void DiagonalCurveEditorSubGroup::switchGUI() } else { // dCurve ave a ColorProvider or a background gradient defined, so we create/update the object if (!leftBar) { - leftBar = new ColoredBar(RTO_Bottom2Top); - - + leftBar = new ColoredBar(RTO_Bottom2Top); } if (barColorProvider) { @@ -1197,7 +1195,7 @@ bool DiagonalCurveEditorSubGroup::curveReset(CurveEditor *ce) customCurve->reset (dce->customResetCurve, dce->getIdentityValue()); return true; - case (DCT_CatumullRom) : + case (DCT_CatumullRom) : customCurve->reset (dce->catmullRomResetCurve, dce->getIdentityValue()); return true; diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index b6756a59c..8ee19eca8 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -647,7 +647,7 @@ bool HistogramRGBArea::on_button_press_event (GdkEventButton* event) void HistogramRGBArea::factorChanged (double newFactor) { - factor = newFactor; + factor = newFactor; } // From 36f7d4ae3bcc7d7eac74a8ef65d05a93d235f0b6 Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Thu, 21 Feb 2019 12:52:12 +0100 Subject: [PATCH 36/41] Japanese translation updated by firefly/Yz2house, closes #5184 --- rtdata/languages/Japanese | 95 ++++++++++++++++++++------------------- 1 file changed, 48 insertions(+), 47 deletions(-) diff --git a/rtdata/languages/Japanese b/rtdata/languages/Japanese index 302a2ee75..7e543daaf 100644 --- a/rtdata/languages/Japanese +++ b/rtdata/languages/Japanese @@ -116,7 +116,7 @@ EXPORT_BYPASS;迂回させる機能 EXPORT_BYPASS_ALL;全て選択 / 全て解除 EXPORT_BYPASS_DEFRINGE;フリンジ低減を迂回 EXPORT_BYPASS_DIRPYRDENOISE;ノイズ低減を迂回 -EXPORT_BYPASS_DIRPYREQUALIZER;ディテール・レベルのコントラストを迂回 +EXPORT_BYPASS_DIRPYREQUALIZER;詳細レベルによるコントラスト調整を迂回 EXPORT_BYPASS_EQUALIZER;ウェーブレットのレベルを迂回 EXPORT_BYPASS_RAW_CA;[raw] 色収差補正を迂回 EXPORT_BYPASS_RAW_CCSTEPS;[raw] 偽色抑制を迂回 @@ -127,8 +127,8 @@ EXPORT_BYPASS_RAW_FF;[raw] フラットフィールドを迂回 EXPORT_BYPASS_RAW_GREENTHRESH;[raw] グリーン平衡化を迂回 EXPORT_BYPASS_RAW_LINENOISE;[raw] ラインノイズ フィルタを迂回 EXPORT_BYPASS_RAW_LMMSE_ITERATIONS;[raw] LMMSE 拡張処理を迂回 -EXPORT_BYPASS_SHARPENEDGE;エッジ・シャープ化を迂回 -EXPORT_BYPASS_SHARPENING;シャープ化を迂回 +EXPORT_BYPASS_SHARPENEDGE;エッジ・シャープニングを迂回 +EXPORT_BYPASS_SHARPENING;シャープニングを迂回 EXPORT_BYPASS_SHARPENMICRO;マイクロコントラストを迂回 EXPORT_BYPASS_SH_HQ;シャドウ/ハイライト(高画質)を迂回 EXPORT_FASTEXPORTOPTIONS;高速書き出しオプション @@ -307,16 +307,16 @@ HISTORY_MSG_16;輝度 黒レベル HISTORY_MSG_17;輝度 ハイライト圧縮 HISTORY_MSG_18;輝度 シャドウ圧縮 HISTORY_MSG_19;L*a*b* - L*カーブ -HISTORY_MSG_20;シャープ化 -HISTORY_MSG_21;シャープ化 半径 -HISTORY_MSG_22;シャープ化 適用量 -HISTORY_MSG_23;シャープ化 しきい値 -HISTORY_MSG_24;シャープ化 エッジのみ -HISTORY_MSG_25;シャープ化 エッジ検出 半径 -HISTORY_MSG_26;シャープ化 エッジ許容 -HISTORY_MSG_27;シャープ化 ハロ抑制 +HISTORY_MSG_20;シャープニング +HISTORY_MSG_21;シャープニング 半径 +HISTORY_MSG_22;シャープニング 適用量 +HISTORY_MSG_23;シャープニング しきい値 +HISTORY_MSG_24;シャープニング エッジのみ +HISTORY_MSG_25;シャープニング エッジ検出 半径 +HISTORY_MSG_26;シャープニング エッジ許容 +HISTORY_MSG_27;シャープニング ハロ抑制 HISTORY_MSG_28;ハロ抑制 適用量 -HISTORY_MSG_29;シャープ化 方式 +HISTORY_MSG_29;シャープニング 方式 HISTORY_MSG_30;デコンボリューション 半径 HISTORY_MSG_31;デコンボリューション 適用量 HISTORY_MSG_32;デコンボリューション 減衰 @@ -380,8 +380,8 @@ HISTORY_MSG_89;ノイズ低減 HISTORY_MSG_90;輝度ノイズの低減 HISTORY_MSG_91;色ノイズの低減 HISTORY_MSG_92;ノイズ低減のガンマ -HISTORY_MSG_93;ディテールのコントラスト係数 -HISTORY_MSG_94;ディテールのコントラスト +HISTORY_MSG_93;詳細レベルコントラスト係数 +HISTORY_MSG_94;詳細レベルコントラスト HISTORY_MSG_95;L*a*b* - 色度 HISTORY_MSG_96;L*a*b* - a*カーブ HISTORY_MSG_97;L*a*b* - b*カーブ @@ -429,12 +429,12 @@ HISTORY_MSG_138;黒レベル レッド HISTORY_MSG_139;黒レベル ブルー HISTORY_MSG_140;黒レベル グリーン 2 HISTORY_MSG_141;黒レベル グリーン 連動 -HISTORY_MSG_142;エッジ シャープ化 - 反復 -HISTORY_MSG_143;エッジ シャープ化 - 適用量 +HISTORY_MSG_142;エッジ シャープニング - 反復 +HISTORY_MSG_143;エッジ シャープニング - 適用量 HISTORY_MSG_144;マイクロコントラスト - 適用量 HISTORY_MSG_145;マイクロコントラスト - 均等 -HISTORY_MSG_146;エッジ シャープ化 -HISTORY_MSG_147;エッジ シャープ化 - 輝度のみ +HISTORY_MSG_146;エッジ シャープニング +HISTORY_MSG_147;エッジ シャープニング - 輝度のみ HISTORY_MSG_148;マイクロコントラスト HISTORY_MSG_149;マイクロコントラスト - 3×3 マトリクス HISTORY_MSG_150;デモザイク後にアーティファクトとノイズを軽減 @@ -535,7 +535,7 @@ HISTORY_MSG_245;ビネットフィルター 中央 HISTORY_MSG_246;L*a*b* CL カーブ HISTORY_MSG_247;L*a*b* LH カーブ HISTORY_MSG_248;L*a*b* HH カーブ -HISTORY_MSG_249;ディテールレベルのコントラスト - しきい値 +HISTORY_MSG_249;詳細レベルによるコントラスト調整 - しきい値 HISTORY_MSG_250;ノイズ低減 - 強化 HISTORY_MSG_251;白黒 - アルゴリズム HISTORY_MSG_252;CbDL 肌色の目標/保護 @@ -549,15 +549,15 @@ HISTORY_MSG_259;カラートーン調整 - 不透明度のカーブ HISTORY_MSG_260;カラートーン調整 - a*(b*)の不透明度 HISTORY_MSG_261;カラートーン調整 - 方法 HISTORY_MSG_262;カラートーン調整 - b*の不透明度 -HISTORY_MSG_263;カラートーン調整 - シャドウのレッド -HISTORY_MSG_264;カラートーン調整 - シャドウのグリーン -HISTORY_MSG_265;カラートーン調整 - シャドウのブルー +HISTORY_MSG_263;カラートーン調整 - シャドウのレッド +HISTORY_MSG_264;カラートーン調整 - シャドウのグリーン +HISTORY_MSG_265;カラートーン調整 - シャドウのブルー HISTORY_MSG_266;カラートーン調整 - 中間トーンのレッド HISTORY_MSG_267;カラートーン調整 - 中間トーンのグリーン HISTORY_MSG_268;カラートーン調整 - 中間トーンのブルー -HISTORY_MSG_269;カラートーン調整 - ハイライトのレッド -HISTORY_MSG_270;カラートーン調整 - ハイライトのグリーン -HISTORY_MSG_271;カラートーン調整 - ハイライトのブルー +HISTORY_MSG_269;カラートーン調整 - ハイライトのレッド +HISTORY_MSG_270;カラートーン調整 - ハイライトのグリーン +HISTORY_MSG_271;カラートーン調整 - ハイライトのブルー HISTORY_MSG_272;カラートーン調整 - バランス HISTORY_MSG_273;カラートーン調整 - SMHでカラーバランス HISTORY_MSG_274;カラートーン調整 - シャドウの彩度 @@ -599,7 +599,7 @@ HISTORY_MSG_309;W- ES ディテール HISTORY_MSG_310;W- 残差 青空の目標/保護 HISTORY_MSG_311;W- ウェーブレットのレベル HISTORY_MSG_312;W- 残差 シャドウのしきい値 -HISTORY_MSG_313;W- 色度 明星色/純色 +HISTORY_MSG_313;W- 色度 明清色/純色 HISTORY_MSG_314;W- 色域 アーティファクトの軽減 HISTORY_MSG_315;W- 残差 コントラスト HISTORY_MSG_316;W- 色域 肌色の目標/保護 @@ -610,7 +610,7 @@ HISTORY_MSG_320;W- コントラスト シャドウ範囲 HISTORY_MSG_321;W- コントラスト シャドウレベル HISTORY_MSG_322;W- 色域 色ずれの回避 HISTORY_MSG_323;W- ES ローカルコントラスト -HISTORY_MSG_324;W- 色度 明星色 +HISTORY_MSG_324;W- 色度 明清色 HISTORY_MSG_325;W- 色度 純色 HISTORY_MSG_326;W- 色度 方法 HISTORY_MSG_327;W- コントラスト 適用先 @@ -657,7 +657,7 @@ HISTORY_MSG_367;W- ES ローカルコントラストカーブ HISTORY_MSG_368;W- 最終 コントラストバランス HISTORY_MSG_369;W- 最終 バランスの方法 HISTORY_MSG_370;W- 最終 ローカルコントラストカーブ -HISTORY_MSG_371;リサイズ後のシャープ化(PRS) +HISTORY_MSG_371;リサイズ後のシャープニング(PRS) HISTORY_MSG_372;PRS アンシャープマスク - 半径 HISTORY_MSG_373;PRS アンシャープマスク - 適用量 HISTORY_MSG_374;PRS アンシャープマスク - しきい値 @@ -726,7 +726,7 @@ HISTORY_MSG_436;レティネックス - M - 半径 HISTORY_MSG_437;レティネックス - M - 方式 HISTORY_MSG_438;レティネックス - M - イコライザ HISTORY_MSG_439;レティネックス - プロセス -HISTORY_MSG_440;ディテールのコントラスト - 適用 +HISTORY_MSG_440;詳細レベルコントラスト - 適用 HISTORY_MSG_441;レティネックス - 透過率の増加 HISTORY_MSG_442;レティネックス - スケール HISTORY_MSG_443;出力のブラックポイント補正 @@ -759,7 +759,7 @@ HISTORY_MSG_485;レンズ補正 HISTORY_MSG_486;レンズ補正 - カメラ HISTORY_MSG_487;レンズ補正 - レンズ HISTORY_MSG_488;ダイナミックレンジ圧縮 -HISTORY_MSG_489;DRC - ディテール +HISTORY_MSG_489;DRC - CbDL HISTORY_MSG_490;DRC - 量 HISTORY_MSG_491;ホワイトバランス HISTORY_MSG_492;RGBカーブ @@ -807,7 +807,8 @@ HISTORY_MSG_RAWCACORR_AUTOIT;Rawの色収差補正 - 繰り返し HISTORY_MSG_RAWCACORR_COLORSHIFT;Rawの色収差補正 - 色ずれを回避 HISTORY_MSG_RAW_BORDER;Rawの境界 HISTORY_MSG_RESIZE_ALLOWUPSCALING;リサイズ - アップスケーリングを可能にする -HISTORY_MSG_SHARPENING_CONTRAST;シャープ化 - コントラストのしきい値 +HISTORY_MSG_SHARPENING_BLUR;シャープニング - ぼかしの半径 +HISTORY_MSG_SHARPENING_CONTRAST;シャープニング - コントラストのしきい値 HISTORY_MSG_SH_COLORSPACE;S/H - 色空間 HISTORY_MSG_SOFTLIGHT_ENABLED;ソフトライト HISTORY_MSG_SOFTLIGHT_STRENGTH;ソフトライト - 強さ @@ -940,13 +941,15 @@ MAIN_TAB_ADVANCED;高度な機能 MAIN_TAB_ADVANCED_TOOLTIP;ショートカット: Alt-w MAIN_TAB_COLOR;カラー MAIN_TAB_COLOR_TOOLTIP;ショートカット: Alt-c -MAIN_TAB_DETAIL;ディテール +MAIN_TAB_DETAIL;CbDL MAIN_TAB_DETAIL_TOOLTIP;ショートカット: Alt-d MAIN_TAB_DEVELOP;一括編集 MAIN_TAB_EXIF;Exif MAIN_TAB_EXPORT;高速書き出し MAIN_TAB_EXPOSURE;露光 MAIN_TAB_EXPOSURE_TOOLTIP;ショートカット: Alt-e +MAIN_TAB_FAVORITES;お気に入り +MAIN_TAB_FAVORITES_TOOLTIP;ショートカット: Alt-u MAIN_TAB_FILTER;絞り込み MAIN_TAB_INSPECT;カメラ出しJPEG MAIN_TAB_IPTC;IPTC @@ -969,7 +972,7 @@ MAIN_TOOLTIP_PREVIEWFOCUSMASK;フォーカス・マスク表示\nショ MAIN_TOOLTIP_PREVIEWG;グリーン チャンネル表示\nショートカット: g MAIN_TOOLTIP_PREVIEWL;輝度表示\nショートカット: v\n\n0.299*R + 0.587*G + 0.114*B MAIN_TOOLTIP_PREVIEWR;レッド チャンネル表示\nショートカット: r -MAIN_TOOLTIP_PREVIEWSHARPMASK;プレビューで見るシャープ化機能のコントラストマスク\nショートカット: p\n\nこの機能が使えるのはシャープ化機能が有効で、画像が100%以上に拡大されている場合だけ +MAIN_TOOLTIP_PREVIEWSHARPMASK;プレビューで見るシャープニング機能のコントラストマスク\nショートカット: p\n\nこの機能が使えるのはシャープニング機能が有効で、画像が100%以上に拡大されている場合だけ MAIN_TOOLTIP_QINFO;画像の情報\nショートカット: i MAIN_TOOLTIP_SHOWHIDELP1;表示/非表示 左パネル\nショートカット: l MAIN_TOOLTIP_SHOWHIDERP1;表示/非表示 右パネル\nショートカット: Alt-l @@ -1011,7 +1014,7 @@ PARTIALPASTE_DEHAZE;霞除去 PARTIALPASTE_DETAILGROUP;ディテールの設定 PARTIALPASTE_DIALOGLABEL;処理プロファイルの部分ペースト PARTIALPASTE_DIRPYRDENOISE;ノイズ低減 -PARTIALPASTE_DIRPYREQUALIZER;ディテール・レベルのコントラスト +PARTIALPASTE_DIRPYREQUALIZER;詳細レベルによるコントラスト調整 PARTIALPASTE_DISTORTION;歪曲補正 PARTIALPASTE_EPD;トーンマッピング PARTIALPASTE_EQUALIZER;ウェーブレット @@ -1042,7 +1045,7 @@ PARTIALPASTE_PREPROCESS_GREENEQUIL;グリーン 平衡化 PARTIALPASTE_PREPROCESS_HOTPIXFILT;ホットピクセルフィルターを適用 PARTIALPASTE_PREPROCESS_LINEDENOISE;ラインノイズ フィルタ PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF ラインフィルタ -PARTIALPASTE_PRSHARPENING;リサイズ後のシャープ化 +PARTIALPASTE_PRSHARPENING;リサイズ後のシャープニング PARTIALPASTE_RAWCACORR_AUTO;自動色収差補正 PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA 色ずれを回避 PARTIALPASTE_RAWCACORR_CAREDBLUE;色収差 レッドとブルー @@ -1064,7 +1067,7 @@ PARTIALPASTE_RGBCURVES;RGB カーブ PARTIALPASTE_ROTATION;回転 PARTIALPASTE_SHADOWSHIGHLIGHTS;シャドウ/ハイライト PARTIALPASTE_SHARPENEDGE;エッジ -PARTIALPASTE_SHARPENING;シャープ化 (USM/RL) +PARTIALPASTE_SHARPENING;シャープニング (USM/RL) PARTIALPASTE_SHARPENMICRO;マイクロコントラスト PARTIALPASTE_SOFTLIGHT;ソフトな明るさ PARTIALPASTE_TM_FATTAL;ダイナミックレンジ圧縮 @@ -1411,7 +1414,7 @@ TP_CACORRECTION_RED;レッド TP_CBDL_AFT;白黒適用の後 TP_CBDL_BEF;白黒適用の前 TP_CBDL_METHOD;処理の順番 -TP_CBDL_METHOD_TOOLTIP;ディテールレベルのコントラストの処理を白黒処理の前に行うか、後に行うか選びます。前を選んだ場合は同機能の作業色空間はRGBとなり、後を選んだ場合はL*a*b*となります。 +TP_CBDL_METHOD_TOOLTIP;詳細レベルによるコントラスト調整の処理を白黒処理の前に行うか、後に行うか選びます。前を選んだ場合は同機能の作業色空間はRGBとなり、後を選んだ場合はL*a*b*となります。 TP_CHMIXER_BLUE;ブルー TP_CHMIXER_GREEN;グリーン TP_CHMIXER_LABEL;チャンネルミキサー @@ -1639,7 +1642,7 @@ TP_DIRPYREQUALIZER_ALGO_TOOLTIP;ファイン:撮影の肌色に近い部分に TP_DIRPYREQUALIZER_ARTIF;アーティファクトを軽減 TP_DIRPYREQUALIZER_HUESKIN;肌色の色相 TP_DIRPYREQUALIZER_HUESKIN_TOOLTIP;このカーブは上部ほど、アルゴリズムが効率良く働くことを示しています。\n下部ほど、色相の遷移が見られる部分です。\nコントロールポイントを左右に大きく動かす必要が生じたり、アーティファクトが生じたりする場合は、ホワイトバランスが妥当ではない時です。\n他の色への影響を避けるには、調整範囲を少し減らします -TP_DIRPYREQUALIZER_LABEL;ディテールレベルのコントラスト +TP_DIRPYREQUALIZER_LABEL;詳細レベルによるコントラスト調整 TP_DIRPYREQUALIZER_LUMACOARSEST;粗い TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;コントラスト- TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;コントラスト+ @@ -1857,8 +1860,8 @@ TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;垂直方向 TP_PREPROCESS_NO_FOUND;未検出 TP_PREPROCESS_PDAFLINESFILTER;PDAFラインフィルタ TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Sonyのミラーレスカメラの一部では、PDAFイメージセンサが原因で、ゴーストが出るバックライトの画像でストライプノイズが発生することがあり、これを軽減します。 -TP_PRSHARPENING_LABEL;リサイズ後のシャープ化 -TP_PRSHARPENING_TOOLTIP;リサイズ後の画像をシャープ化します。但し、リサイズの方式がランチョスの場合に限ります。プレビュー画面でこの機能の効果を見ることは出来ません。使用法に関してはRawPediaを参照して下さい。 +TP_PRSHARPENING_LABEL;リサイズ後のシャープニング +TP_PRSHARPENING_TOOLTIP;リサイズ後の画像をシャープニングします。但し、リサイズの方式がランチョスの場合に限ります。プレビュー画面でこの機能の効果を見ることは出来ません。使用法に関してはRawPediaを参照して下さい。 TP_RAWCACORR_AUTO;自動補正 TP_RAWCACORR_AUTOIT;繰り返し TP_RAWCACORR_AUTOIT_TOOLTIP;”自動補正”が有効になっている場合にこの設定が可能です。\n自動補正の作用は控えめなため、全ての色収差が常に補正されるとは限りません。\n残りの色収差を補正するためには、自動色収差補正の繰り返しを最大5回行います。\n繰り返すたびに、直前の繰り返しで残った色収差を軽減しますが、その分処理時間は増えます。 @@ -2067,14 +2070,15 @@ TP_SHARPENEDGE_LABEL;エッジ TP_SHARPENEDGE_PASSES;反復 TP_SHARPENEDGE_THREE;輝度のみ TP_SHARPENING_AMOUNT;適用量 +TP_SHARPENING_BLUR;ぼかしの半径 TP_SHARPENING_CONTRAST;コントラストのしきい値 TP_SHARPENING_EDRADIUS;半径 TP_SHARPENING_EDTOLERANCE;エッジ許容 TP_SHARPENING_HALOCONTROL;ハロ抑制 TP_SHARPENING_HCAMOUNT;適用量 -TP_SHARPENING_LABEL;シャープ化 +TP_SHARPENING_LABEL;シャープニング TP_SHARPENING_METHOD;方式 -TP_SHARPENING_ONLYEDGES;エッジのみシャープ化 +TP_SHARPENING_ONLYEDGES;エッジのみシャープニング TP_SHARPENING_RADIUS;半径 TP_SHARPENING_RLD;RL デコンボリューション TP_SHARPENING_RLD_AMOUNT;適用量 @@ -2198,7 +2202,7 @@ TP_WAVELET_EDGREINF_TOOLTIP;最初のレベルに対する作用を強めたり TP_WAVELET_EDGTHRESH;ディテール TP_WAVELET_EDGTHRESH_TOOLTIP;低いレベルと他のレベルの区分を変更します。しきい値を高くするほど、低いレベルに作用の重点が置かれます。注意:マイナス値の設定は高いレベルに重点が置かれ、アーティファクトが発生することがあります。 TP_WAVELET_EDRAD;半径 -TP_WAVELET_EDRAD_TOOLTIP;この機能の半径は、他のシャープ化機能の半径とは大きく異なります。複雑な関数を使って各レベルの値を比較します。そのため、半径がゼロでも何らかの効果があります +TP_WAVELET_EDRAD_TOOLTIP;この機能の半径は、他のシャープニング機能の半径とは大きく異なります。複雑な関数を使って各レベルの値を比較します。そのため、半径がゼロでも何らかの効果があります TP_WAVELET_EDSL;しきい値スライダー TP_WAVELET_EDTYPE;ローカルコントラストの方式 TP_WAVELET_EDVAL;強さ @@ -2341,7 +2345,4 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: - ! Untranslated keys follow; remove the ! prefix after an entry is translated. !!!!!!!!!!!!!!!!!!!!!!!!! -!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius -!MAIN_TAB_FAVORITES;Favorites -!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u -!TP_SHARPENING_BLUR;Blur radius +!TP_RAW_IMAGENUM_SN;SN mode From 04f8fc6cc87ff16d9d063cf119151b45dc352561 Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Thu, 21 Feb 2019 12:52:30 +0100 Subject: [PATCH 37/41] generateTranslationDiffs --- rtdata/languages/Catala | 3 ++- rtdata/languages/Chinese (Simplified) | 3 ++- rtdata/languages/Chinese (Traditional) | 3 ++- rtdata/languages/Czech | 1 + rtdata/languages/Dansk | 3 ++- rtdata/languages/Deutsch | 9 +++++---- rtdata/languages/English (UK) | 3 ++- rtdata/languages/English (US) | 3 ++- rtdata/languages/Espanol | 1 + rtdata/languages/Euskara | 3 ++- rtdata/languages/Francais | 1 + rtdata/languages/Greek | 3 ++- rtdata/languages/Hebrew | 3 ++- rtdata/languages/Italiano | 3 ++- rtdata/languages/Latvian | 3 ++- rtdata/languages/Magyar | 3 ++- rtdata/languages/Nederlands | 3 ++- rtdata/languages/Norsk BM | 3 ++- rtdata/languages/Polish | 3 ++- rtdata/languages/Polish (Latin Characters) | 3 ++- rtdata/languages/Portugues (Brasil) | 1 + rtdata/languages/Russian | 3 ++- rtdata/languages/Serbian (Cyrilic Characters) | 3 ++- rtdata/languages/Serbian (Latin Characters) | 3 ++- rtdata/languages/Slovak | 3 ++- rtdata/languages/Suomi | 3 ++- rtdata/languages/Swedish | 3 ++- rtdata/languages/Turkish | 3 ++- 28 files changed, 55 insertions(+), 27 deletions(-) diff --git a/rtdata/languages/Catala b/rtdata/languages/Catala index 235f35401..3212a263e 100644 --- a/rtdata/languages/Catala +++ b/rtdata/languages/Catala @@ -2008,7 +2008,8 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_RAW_HPHD;HPHD !TP_RAW_IGV;IGV !TP_RAW_IMAGENUM;Sub-image -!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. +!TP_RAW_IMAGENUM_SN;SN mode +!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. !TP_RAW_LMMSE;LMMSE !TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps !TP_RAW_LMMSE_TOOLTIP;Adds gamma (step 1), median (steps 2-4) and refinement (steps 5-6) to reduce artifacts and improve the signal-to-noise ratio. diff --git a/rtdata/languages/Chinese (Simplified) b/rtdata/languages/Chinese (Simplified) index ad3104b5f..49b60964a 100644 --- a/rtdata/languages/Chinese (Simplified) +++ b/rtdata/languages/Chinese (Simplified) @@ -1980,7 +1980,8 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: - !TP_RAW_HPHD;HPHD !TP_RAW_IGV;IGV !TP_RAW_IMAGENUM;Sub-image -!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. +!TP_RAW_IMAGENUM_SN;SN mode +!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. !TP_RAW_LABEL;Demosaicing !TP_RAW_LMMSE;LMMSE !TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps diff --git a/rtdata/languages/Chinese (Traditional) b/rtdata/languages/Chinese (Traditional) index 8b3c23fbd..78fecbc5a 100644 --- a/rtdata/languages/Chinese (Traditional) +++ b/rtdata/languages/Chinese (Traditional) @@ -1928,7 +1928,8 @@ TP_WBALANCE_TEMPERATURE;色溫 !TP_RAW_HPHD;HPHD !TP_RAW_IGV;IGV !TP_RAW_IMAGENUM;Sub-image -!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. +!TP_RAW_IMAGENUM_SN;SN mode +!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. !TP_RAW_LABEL;Demosaicing !TP_RAW_LMMSE;LMMSE !TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps diff --git a/rtdata/languages/Czech b/rtdata/languages/Czech index fd61b1ab0..acab88606 100644 --- a/rtdata/languages/Czech +++ b/rtdata/languages/Czech @@ -2351,4 +2351,5 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius !MAIN_TAB_FAVORITES;Favorites !MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u +!TP_RAW_IMAGENUM_SN;SN mode !TP_SHARPENING_BLUR;Blur radius diff --git a/rtdata/languages/Dansk b/rtdata/languages/Dansk index 367747256..fc6c23d8a 100644 --- a/rtdata/languages/Dansk +++ b/rtdata/languages/Dansk @@ -1923,7 +1923,8 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_RAW_HPHD;HPHD !TP_RAW_IGV;IGV !TP_RAW_IMAGENUM;Sub-image -!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. +!TP_RAW_IMAGENUM_SN;SN mode +!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. !TP_RAW_LABEL;Demosaicing !TP_RAW_LMMSE;LMMSE !TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps diff --git a/rtdata/languages/Deutsch b/rtdata/languages/Deutsch index 5f232a286..e46744297 100644 --- a/rtdata/languages/Deutsch +++ b/rtdata/languages/Deutsch @@ -852,6 +852,7 @@ HISTORY_MSG_RAWCACORR_AUTOIT;(Sensor-Matrix)\nChromatische Aberration\nIteration HISTORY_MSG_RAWCACORR_COLORSHIFT;(Sensor-Matrix)\nChromatische Aberration\nFarbverschiebungen\nvermeiden HISTORY_MSG_RAW_BORDER;(Sensor-Matrix)\nFarbinterpolation\nBildrand HISTORY_MSG_RESIZE_ALLOWUPSCALING;(Skalieren)\nHochskalieren zulassen +HISTORY_MSG_SHARPENING_BLUR;(Schärfung)\nWeichzeichnerradius HISTORY_MSG_SHARPENING_CONTRAST;(Schärfung)\nKontrastschwelle HISTORY_MSG_SH_COLORSPACE;Farbraum HISTORY_MSG_SOFTLIGHT_ENABLED;(Weiches Licht) @@ -992,6 +993,8 @@ MAIN_TAB_EXIF;Exif MAIN_TAB_EXPORT; Exportieren MAIN_TAB_EXPOSURE;Belichtung MAIN_TAB_EXPOSURE_TOOLTIP;Taste: Alt + e +MAIN_TAB_FAVORITES;Favoriten +MAIN_TAB_FAVORITES_TOOLTIP;Taste: Alt + u MAIN_TAB_FILTER; Filter MAIN_TAB_INSPECT; Prüfen MAIN_TAB_IPTC;IPTC @@ -2139,6 +2142,7 @@ TP_SHARPENEDGE_LABEL;Kantenschärfung TP_SHARPENEDGE_PASSES;Iterationen TP_SHARPENEDGE_THREE;Nur Luminanz TP_SHARPENING_AMOUNT;Intensität +TP_SHARPENING_BLUR;Weichzeichnerradius TP_SHARPENING_CONTRAST;Kontrastschwelle TP_SHARPENING_EDRADIUS;Radius TP_SHARPENING_EDTOLERANCE;Kantentoleranz @@ -2413,7 +2417,4 @@ ZOOMPANEL_ZOOMOUT;Herauszoomen\nTaste: - ! Untranslated keys follow; remove the ! prefix after an entry is translated. !!!!!!!!!!!!!!!!!!!!!!!!! -HISTORY_MSG_SHARPENING_BLUR;(Schärfung)\nWeichzeichnerradius -MAIN_TAB_FAVORITES;Favoriten -MAIN_TAB_FAVORITES_TOOLTIP;Taste: Alt + u -TP_SHARPENING_BLUR;Weichzeichnerradius +!TP_RAW_IMAGENUM_SN;SN mode diff --git a/rtdata/languages/English (UK) b/rtdata/languages/English (UK) index db2c57068..8c4d53306 100644 --- a/rtdata/languages/English (UK) +++ b/rtdata/languages/English (UK) @@ -1887,7 +1887,8 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !TP_RAW_HPHD;HPHD !TP_RAW_IGV;IGV !TP_RAW_IMAGENUM;Sub-image -!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. +!TP_RAW_IMAGENUM_SN;SN mode +!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. !TP_RAW_LABEL;Demosaicing !TP_RAW_LMMSE;LMMSE !TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps diff --git a/rtdata/languages/English (US) b/rtdata/languages/English (US) index dacd13b4f..0ae647a24 100644 --- a/rtdata/languages/English (US) +++ b/rtdata/languages/English (US) @@ -1875,7 +1875,8 @@ !TP_RAW_HPHD;HPHD !TP_RAW_IGV;IGV !TP_RAW_IMAGENUM;Sub-image -!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. +!TP_RAW_IMAGENUM_SN;SN mode +!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. !TP_RAW_LABEL;Demosaicing !TP_RAW_LMMSE;LMMSE !TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps diff --git a/rtdata/languages/Espanol b/rtdata/languages/Espanol index 9cb020dcd..d2f0bc4dd 100644 --- a/rtdata/languages/Espanol +++ b/rtdata/languages/Espanol @@ -2462,4 +2462,5 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius !MAIN_TAB_FAVORITES;Favorites !MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u +!TP_RAW_IMAGENUM_SN;SN mode !TP_SHARPENING_BLUR;Blur radius diff --git a/rtdata/languages/Euskara b/rtdata/languages/Euskara index d763c24e3..6478433fb 100644 --- a/rtdata/languages/Euskara +++ b/rtdata/languages/Euskara @@ -1924,7 +1924,8 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !TP_RAW_HPHD;HPHD !TP_RAW_IGV;IGV !TP_RAW_IMAGENUM;Sub-image -!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. +!TP_RAW_IMAGENUM_SN;SN mode +!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. !TP_RAW_LABEL;Demosaicing !TP_RAW_LMMSE;LMMSE !TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps diff --git a/rtdata/languages/Francais b/rtdata/languages/Francais index 7f63a8796..54108b344 100644 --- a/rtdata/languages/Francais +++ b/rtdata/languages/Francais @@ -2340,4 +2340,5 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius !MAIN_TAB_FAVORITES;Favorites !MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u +!TP_RAW_IMAGENUM_SN;SN mode !TP_SHARPENING_BLUR;Blur radius diff --git a/rtdata/languages/Greek b/rtdata/languages/Greek index 94dba53b7..7f3e06086 100644 --- a/rtdata/languages/Greek +++ b/rtdata/languages/Greek @@ -1923,7 +1923,8 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !TP_RAW_HPHD;HPHD !TP_RAW_IGV;IGV !TP_RAW_IMAGENUM;Sub-image -!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. +!TP_RAW_IMAGENUM_SN;SN mode +!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. !TP_RAW_LABEL;Demosaicing !TP_RAW_LMMSE;LMMSE !TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps diff --git a/rtdata/languages/Hebrew b/rtdata/languages/Hebrew index 4fd30cfc0..789ebfe77 100644 --- a/rtdata/languages/Hebrew +++ b/rtdata/languages/Hebrew @@ -1924,7 +1924,8 @@ TP_WBALANCE_TEMPERATURE;מידת חום !TP_RAW_HPHD;HPHD !TP_RAW_IGV;IGV !TP_RAW_IMAGENUM;Sub-image -!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. +!TP_RAW_IMAGENUM_SN;SN mode +!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. !TP_RAW_LABEL;Demosaicing !TP_RAW_LMMSE;LMMSE !TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps diff --git a/rtdata/languages/Italiano b/rtdata/languages/Italiano index 0ec22370d..92d8c47e8 100644 --- a/rtdata/languages/Italiano +++ b/rtdata/languages/Italiano @@ -2023,7 +2023,8 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_RAW_HPHD;HPHD !TP_RAW_IGV;IGV !TP_RAW_IMAGENUM;Sub-image -!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. +!TP_RAW_IMAGENUM_SN;SN mode +!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. !TP_RAW_LMMSE;LMMSE !TP_RAW_MONO;Mono !TP_RAW_NONE;None (Shows sensor pattern) diff --git a/rtdata/languages/Latvian b/rtdata/languages/Latvian index a15ec130d..20736ed12 100644 --- a/rtdata/languages/Latvian +++ b/rtdata/languages/Latvian @@ -1924,7 +1924,8 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !TP_RAW_HPHD;HPHD !TP_RAW_IGV;IGV !TP_RAW_IMAGENUM;Sub-image -!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. +!TP_RAW_IMAGENUM_SN;SN mode +!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. !TP_RAW_LABEL;Demosaicing !TP_RAW_LMMSE;LMMSE !TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps diff --git a/rtdata/languages/Magyar b/rtdata/languages/Magyar index 19033e458..2a6ce45a6 100644 --- a/rtdata/languages/Magyar +++ b/rtdata/languages/Magyar @@ -2000,7 +2000,8 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_RAW_HPHD;HPHD !TP_RAW_IGV;IGV !TP_RAW_IMAGENUM;Sub-image -!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. +!TP_RAW_IMAGENUM_SN;SN mode +!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. !TP_RAW_LMMSE;LMMSE !TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps !TP_RAW_LMMSE_TOOLTIP;Adds gamma (step 1), median (steps 2-4) and refinement (steps 5-6) to reduce artifacts and improve the signal-to-noise ratio. diff --git a/rtdata/languages/Nederlands b/rtdata/languages/Nederlands index 8c91bf3c8..028b02955 100644 --- a/rtdata/languages/Nederlands +++ b/rtdata/languages/Nederlands @@ -2331,7 +2331,8 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_RAW_DUALDEMOSAICAUTOCONTRAST;Auto threshold !TP_RAW_DUALDEMOSAICAUTOCONTRAST_TOOLTIP;If the checkbox is checked (recommended), RawTherapee calculates an optimum value based on flat regions in the image.\nIf there is no flat region in the image or the image is too noisy, the value will be set to 0.\nTo set the value manually, uncheck the checkbox first (reasonable values depend on the image). !TP_RAW_DUALDEMOSAICCONTRAST;Contrast threshold -!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. +!TP_RAW_IMAGENUM_SN;SN mode +!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. !TP_RAW_PIXELSHIFTDMETHOD;Demosaic method for motion !TP_RAW_PIXELSHIFTEPERISO;Sensitivity !TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images. diff --git a/rtdata/languages/Norsk BM b/rtdata/languages/Norsk BM index 245c3befc..799019625 100644 --- a/rtdata/languages/Norsk BM +++ b/rtdata/languages/Norsk BM @@ -1923,7 +1923,8 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_RAW_HPHD;HPHD !TP_RAW_IGV;IGV !TP_RAW_IMAGENUM;Sub-image -!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. +!TP_RAW_IMAGENUM_SN;SN mode +!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. !TP_RAW_LABEL;Demosaicing !TP_RAW_LMMSE;LMMSE !TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps diff --git a/rtdata/languages/Polish b/rtdata/languages/Polish index d0ac7f833..e5a55241a 100644 --- a/rtdata/languages/Polish +++ b/rtdata/languages/Polish @@ -2032,7 +2032,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_RAW_HPHD;HPHD !TP_RAW_IGV;IGV !TP_RAW_IMAGENUM;Sub-image -!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. +!TP_RAW_IMAGENUM_SN;SN mode +!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. !TP_RAW_LMMSE;LMMSE !TP_RAW_MONO;Mono !TP_RAW_NONE;None (Shows sensor pattern) diff --git a/rtdata/languages/Polish (Latin Characters) b/rtdata/languages/Polish (Latin Characters) index b19183f5e..39f1c2b89 100644 --- a/rtdata/languages/Polish (Latin Characters) +++ b/rtdata/languages/Polish (Latin Characters) @@ -2032,7 +2032,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: - !TP_RAW_HPHD;HPHD !TP_RAW_IGV;IGV !TP_RAW_IMAGENUM;Sub-image -!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. +!TP_RAW_IMAGENUM_SN;SN mode +!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. !TP_RAW_LMMSE;LMMSE !TP_RAW_MONO;Mono !TP_RAW_NONE;None (Shows sensor pattern) diff --git a/rtdata/languages/Portugues (Brasil) b/rtdata/languages/Portugues (Brasil) index 030e838ec..249214f7a 100644 --- a/rtdata/languages/Portugues (Brasil) +++ b/rtdata/languages/Portugues (Brasil) @@ -2313,6 +2313,7 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift !TP_RAW_DUALDEMOSAICAUTOCONTRAST;Auto threshold !TP_RAW_DUALDEMOSAICAUTOCONTRAST_TOOLTIP;If the checkbox is checked (recommended), RawTherapee calculates an optimum value based on flat regions in the image.\nIf there is no flat region in the image or the image is too noisy, the value will be set to 0.\nTo set the value manually, uncheck the checkbox first (reasonable values depend on the image). +!TP_RAW_IMAGENUM_SN;SN mode !TP_RETINEX_CONTEDIT_MAP;Equalizer !TP_RETINEX_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. !TP_RETINEX_MAP;Method diff --git a/rtdata/languages/Russian b/rtdata/languages/Russian index 28231e869..12802db23 100644 --- a/rtdata/languages/Russian +++ b/rtdata/languages/Russian @@ -2054,7 +2054,8 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_RAW_DUALDEMOSAICAUTOCONTRAST_TOOLTIP;If the checkbox is checked (recommended), RawTherapee calculates an optimum value based on flat regions in the image.\nIf there is no flat region in the image or the image is too noisy, the value will be set to 0.\nTo set the value manually, uncheck the checkbox first (reasonable values depend on the image). !TP_RAW_DUALDEMOSAICCONTRAST;Contrast threshold !TP_RAW_IMAGENUM;Sub-image -!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. +!TP_RAW_IMAGENUM_SN;SN mode +!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. !TP_RAW_PIXELSHIFTBLUR;Blur motion mask !TP_RAW_PIXELSHIFTDMETHOD;Demosaic method for motion !TP_RAW_PIXELSHIFTEPERISO;Sensitivity diff --git a/rtdata/languages/Serbian (Cyrilic Characters) b/rtdata/languages/Serbian (Cyrilic Characters) index 29ec6210f..a337eb3a3 100644 --- a/rtdata/languages/Serbian (Cyrilic Characters) +++ b/rtdata/languages/Serbian (Cyrilic Characters) @@ -2024,7 +2024,8 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_RAW_HPHD;HPHD !TP_RAW_IGV;IGV !TP_RAW_IMAGENUM;Sub-image -!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. +!TP_RAW_IMAGENUM_SN;SN mode +!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. !TP_RAW_LMMSE;LMMSE !TP_RAW_MONO;Mono !TP_RAW_NONE;None (Shows sensor pattern) diff --git a/rtdata/languages/Serbian (Latin Characters) b/rtdata/languages/Serbian (Latin Characters) index 35bbecbf0..4a7733ae1 100644 --- a/rtdata/languages/Serbian (Latin Characters) +++ b/rtdata/languages/Serbian (Latin Characters) @@ -2024,7 +2024,8 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !TP_RAW_HPHD;HPHD !TP_RAW_IGV;IGV !TP_RAW_IMAGENUM;Sub-image -!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. +!TP_RAW_IMAGENUM_SN;SN mode +!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. !TP_RAW_LMMSE;LMMSE !TP_RAW_MONO;Mono !TP_RAW_NONE;None (Shows sensor pattern) diff --git a/rtdata/languages/Slovak b/rtdata/languages/Slovak index ff2051053..1948d6554 100644 --- a/rtdata/languages/Slovak +++ b/rtdata/languages/Slovak @@ -1936,7 +1936,8 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !TP_RAW_HPHD;HPHD !TP_RAW_IGV;IGV !TP_RAW_IMAGENUM;Sub-image -!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. +!TP_RAW_IMAGENUM_SN;SN mode +!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. !TP_RAW_LABEL;Demosaicing !TP_RAW_LMMSE;LMMSE !TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps diff --git a/rtdata/languages/Suomi b/rtdata/languages/Suomi index 338107277..7adcd2ae3 100644 --- a/rtdata/languages/Suomi +++ b/rtdata/languages/Suomi @@ -1924,7 +1924,8 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !TP_RAW_HPHD;HPHD !TP_RAW_IGV;IGV !TP_RAW_IMAGENUM;Sub-image -!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. +!TP_RAW_IMAGENUM_SN;SN mode +!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. !TP_RAW_LABEL;Demosaicing !TP_RAW_LMMSE;LMMSE !TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps diff --git a/rtdata/languages/Swedish b/rtdata/languages/Swedish index f36493695..dac05a20b 100644 --- a/rtdata/languages/Swedish +++ b/rtdata/languages/Swedish @@ -2213,7 +2213,8 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_RAW_HPHD;HPHD !TP_RAW_IGV;IGV !TP_RAW_IMAGENUM;Sub-image -!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. +!TP_RAW_IMAGENUM_SN;SN mode +!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. !TP_RAW_LMMSE;LMMSE !TP_RAW_MONO;Mono !TP_RAW_NONE;None (Shows sensor pattern) diff --git a/rtdata/languages/Turkish b/rtdata/languages/Turkish index e89df45f0..5af14f592 100644 --- a/rtdata/languages/Turkish +++ b/rtdata/languages/Turkish @@ -1923,7 +1923,8 @@ TP_WBALANCE_TEMPERATURE;Isı !TP_RAW_HPHD;HPHD !TP_RAW_IGV;IGV !TP_RAW_IMAGENUM;Sub-image -!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. +!TP_RAW_IMAGENUM_SN;SN mode +!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. !TP_RAW_LABEL;Demosaicing !TP_RAW_LMMSE;LMMSE !TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps From 46aabd2003d64f497ce364073f27cd28a2809c11 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Sat, 23 Feb 2019 14:00:45 +0100 Subject: [PATCH 38/41] Unfix fixed white level, #5187 --- rtengine/CMakeLists.txt | 1 - rtengine/expo_before_b.cc | 187 ----------------------------------- rtengine/procevents.h | 14 +-- rtengine/procparams.cc | 4 - rtengine/procparams.h | 1 - rtengine/rawimagesource.cc | 35 +++---- rtengine/rawimagesource.h | 1 - rtengine/refreshmap.cc | 2 +- rtgui/addsetids.h | 1 - rtgui/batchtoolpanelcoord.cc | 5 +- rtgui/paramsedited.cc | 8 +- rtgui/paramsedited.h | 1 - rtgui/partialpastedlg.cc | 9 -- rtgui/partialpastedlg.h | 3 +- rtgui/preferences.cc | 1 - rtgui/rawexposure.cc | 26 +---- rtgui/rawexposure.h | 3 +- 17 files changed, 29 insertions(+), 273 deletions(-) delete mode 100644 rtengine/expo_before_b.cc diff --git a/rtengine/CMakeLists.txt b/rtengine/CMakeLists.txt index cf3d8c8b6..fc5ac236e 100644 --- a/rtengine/CMakeLists.txt +++ b/rtengine/CMakeLists.txt @@ -56,7 +56,6 @@ set(RTENGINESOURCEFILES dual_demosaic_RT.cc dynamicprofile.cc eahd_demosaic.cc - expo_before_b.cc fast_demo.cc ffmanager.cc flatcurves.cc diff --git a/rtengine/expo_before_b.cc b/rtengine/expo_before_b.cc deleted file mode 100644 index cd5e77df5..000000000 --- a/rtengine/expo_before_b.cc +++ /dev/null @@ -1,187 +0,0 @@ - -//////////////////////////////////////////////////////////////// -// -// //exposure correction before interpolation -// -// code dated: December 27, 2010 -// -// Expo_before.cc is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -//////////////////////////////////////////////////////////////// - - - -// Jacques Desmis -// use fast-demo(provisional) from Emil Martinec -// inspired from work Guillermo Luijk and Manuel LLorens(Perfectraw) -// Ingo Weyrich (2014-07-07) -// optimized the highlight protection case -// needs 2*width*height*sizeof(float) byte less memory than before -// needs about 60% less processing time than before -// -// This function uses parameters: -// exposure (linear): 2^(-8..0..8): currently 0.5 +3 -// preserve (log) : 0..8 : currently 0.1 1 - -#include "rtengine.h" -#include "rawimagesource.h" -#include "mytime.h" -#include "rt_math.h" - -namespace rtengine -{ - -extern const Settings* settings; - -void RawImageSource::processRawWhitepoint(float expos, float preser, array2D &rawData) -{ - MyTime t1e, t2e; - - if (settings->verbose) { - t1e.set(); - } - - int width = W, height = H; - // exposure correction inspired from G.Luijk - - for (int c = 0; c < 4; c++) { - chmax[c] *= expos; - } - - if (fabs(preser) < 0.001f) { - // No highlight protection - simple mutiplication - - if (ri->getSensorType() == ST_BAYER || ri->getSensorType() == ST_FUJI_XTRANS) -#ifdef _OPENMP - #pragma omp parallel for -#endif - for (int row = 0; row < height; row++) - for (int col = 0; col < width; col++) { - rawData[row][col] *= expos; - } - else -#ifdef _OPENMP - #pragma omp parallel for -#endif - for (int row = 0; row < height; row++) - for (int col = 0; col < width; col++) { - rawData[row][col * 3] *= expos; - rawData[row][col * 3 + 1] *= expos; - rawData[row][col * 3 + 2] *= expos; - } - } else { - if (ri->getSensorType() == ST_BAYER || ri->getSensorType() == ST_FUJI_XTRANS) { - // Demosaic to allow calculation of luminosity. - if(ri->getSensorType() == ST_BAYER) { - fast_demosaic(); - } else { - fast_xtrans_interpolate(rawData, red, green, blue); - } - } - - // Find maximum to adjust LUTs. New float engines clips only at the very end - float maxValFloat = 0.f; -#ifdef _OPENMP - #pragma omp parallel -#endif - { - float maxValFloatThr = 0.f; - - if (ri->getSensorType() == ST_BAYER || ri->getSensorType() == ST_FUJI_XTRANS) -#ifdef _OPENMP - #pragma omp for schedule(dynamic,16) nowait -#endif - for(int row = 0; row < height; row++) - for (int col = 0; col < width; col++) { - if (rawData[row][col] > maxValFloatThr) { - maxValFloatThr = rawData[row][col]; - } - } - else -#ifdef _OPENMP - #pragma omp for schedule(dynamic,16) nowait -#endif - for(int row = 0; row < height; row++) - for (int col = 0; col < width; col++) { - for (int c = 0; c < 3; c++) - if (rawData[row][col * 3 + c] > maxValFloatThr) { - maxValFloatThr = rawData[row][col * 3 + c]; - } - } - -#ifdef _OPENMP - #pragma omp critical -#endif - { - if(maxValFloatThr > maxValFloat) { - maxValFloat = maxValFloatThr; - } - } - } - - // Exposure correction with highlight preservation - int maxVal = maxValFloat; - LUTf lut(maxVal + 1); - float K; - - if(expos > 1) { - // Positive exposure - K = (float) maxVal / expos * exp(-preser * log(2.0)); - - for (int j = max(1, (int)K); j <= maxVal; j++) { - lut[(int)j] = (((float)maxVal - K * expos) / ((float)maxVal - K) * (j - maxVal) + (float) maxVal) / j; - } - } else { - // Negative exposure - float EV = log(expos) / log(2.0); // Convert exp. linear to EV - K = (float)maxVal * exp(-preser * log(2.0)); - - for (int j = 0; j <= maxVal; j++) { - lut[(int)j] = exp(EV * ((float)maxVal - j) / ((float)maxVal - K) * log(2.0)); - } - } - - if (ri->getSensorType() == ST_BAYER || ri->getSensorType() == ST_FUJI_XTRANS) -#ifdef _OPENMP - #pragma omp parallel for schedule(dynamic,16) -#endif - for(int row = 0; row < height; row++) - for(int col = 0; col < width; 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]; - } - else -#ifdef _OPENMP - #pragma omp parallel for -#endif - for(int row = 0; row < height; row++) - 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 fac = lumi < K ? expos : lut[lumi]; - - for (int c = 0; c < 3; c++) { - rawData[row][col * 3 + c] *= fac; - } - } - - } - - if (settings->verbose) { - t2e.set(); - printf("Exposure before %d usec\n", t2e.etime(t1e)); - } - -} - -} //namespace diff --git a/rtengine/procevents.h b/rtengine/procevents.h index a35a709f9..95144aec0 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -70,10 +70,10 @@ enum ProcEventCode { EvToneCurveMode1 = 40, EvToneCurve2 = 41, EvToneCurveMode2 = 42, - EvLDNRadius = 43, // obsolete - EvLDNEdgeTolerance = 44, // obsolete - EvCDNEnabled = 45, // obsolete - EvBlendCMSMatrix = 46, // obsolete + obsolete_43 = 43, // obsolete + obsolete_44 = 44, // obsolete + obsolete_45 = 45, // obsolete + obsolete_46 = 46, // obsolete EvDCPToneCurve = 47, EvDCPIlluminant = 48, EvSHEnabled = 49, @@ -93,7 +93,7 @@ enum ProcEventCode { EvCrop = 63, EvCACorr = 64, EvHREnabled = 65, - EvHRAmount = 66, //obsolete + obsolete_66 = 66, //obsolete EvHRMethod = 67, EvWProfile = 68, EvOProfile = 69, @@ -138,7 +138,7 @@ enum ProcEventCode { EvResizeBoundingBox = 108, EvResizeAppliesTo = 109, EvLAvoidColorShift = 110, - EvLSatLimiter = 111, // obsolete + obsolete_111 = 111, // obsolete EvLRSTProtection = 112, EvDemosaicDCBIter = 113, EvDemosaicFalseColorIter = 114, @@ -151,7 +151,7 @@ enum ProcEventCode { EvPreProcessAutoDF = 121, EvPreProcessDFFile = 122, EvPreProcessExpCorrLinear = 123, - EvPreProcessExpCorrPH = 124, + obsolete_124 = 124, // obsolete EvFlatFieldFile = 125, EvFlatFieldAutoSelect = 126, EvFlatFieldBlurRadius = 127, diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index fe4512691..33ea7e5cc 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2665,7 +2665,6 @@ RAWParams::RAWParams() : cared(0.0), cablue(0.0), expos(1.0), - preser(0.0), hotPixelFilter(false), deadPixelFilter(false), hotdeadpix_thresh(100) @@ -2691,7 +2690,6 @@ bool RAWParams::operator ==(const RAWParams& other) const && cared == other.cared && cablue == other.cablue && expos == other.expos - && preser == other.preser && hotPixelFilter == other.hotPixelFilter && deadPixelFilter == other.deadPixelFilter && hotdeadpix_thresh == other.hotdeadpix_thresh; @@ -3561,7 +3559,6 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo // Raw exposition saveToKeyfile(!pedited || pedited->raw.exPos, "RAW", "PreExposure", raw.expos, keyFile); - saveToKeyfile(!pedited || pedited->raw.exPreser, "RAW", "PrePreserv", raw.preser, keyFile); // MetaData saveToKeyfile(!pedited || pedited->metadata.mode, "MetaData", "Mode", metadata.mode, keyFile); @@ -4991,7 +4988,6 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "RAW", "DeadPixelFilter", pedited, raw.deadPixelFilter, pedited->raw.deadPixelFilter); assignFromKeyfile(keyFile, "RAW", "HotDeadPixelThresh", pedited, raw.hotdeadpix_thresh, pedited->raw.hotdeadpix_thresh); assignFromKeyfile(keyFile, "RAW", "PreExposure", pedited, raw.expos, pedited->raw.exPos); - assignFromKeyfile(keyFile, "RAW", "PrePreserv", pedited, raw.preser, pedited->raw.exPreser); if (ppVersion < 320) { assignFromKeyfile(keyFile, "RAW", "Method", pedited, raw.bayersensor.method, pedited->raw.bayersensor.method); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 50e77d32e..d79fc5ae4 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1411,7 +1411,6 @@ struct RAWParams { // exposure before interpolation double expos; - double preser; bool hotPixelFilter; bool deadPixelFilter; diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 79922adbd..6dbeea643 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -428,7 +428,6 @@ RawImageSource::RawImageSource () , plistener(nullptr) , scale_mul{} , c_black{} - , c_white{} , cblacksom{} , ref_pre_mul{} , refwb_red(0.0) @@ -637,6 +636,11 @@ void RawImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* ima bool isMono = (ri->getSensorType() == ST_FUJI_XTRANS && raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::MONO)) || (ri->getSensorType() == ST_BAYER && raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::MONO)); + + for (int i = 0; i < 4; ++i) { + c_white[i] = (ri->get_white(i) - cblacksom[i]) / raw.expos + cblacksom[i]; + } + float gain = calculate_scale_mul(new_scale_mul, new_pre_mul, c_white, cblacksom, isMono, ri->get_colors()); rm = new_scale_mul[0] / scale_mul[0] * gain; gm = new_scale_mul[1] / scale_mul[1] * gain; @@ -1616,10 +1620,6 @@ int RawImageSource::load (const Glib::ustring &fname, bool firstFrameOnly) camProfile = ICCStore::getInstance()->createFromMatrix (imatrices.xyz_cam, false, "Camera"); inverse33 (imatrices.xyz_cam, imatrices.cam_xyz); - for (int c = 0; c < 4; c++) { - c_white[c] = ri->get_white(c); - } - // First we get the "as shot" ("Camera") white balance and store it float pre_mul[4]; // FIXME: get_colorsCoeff not so much used nowadays, when we have calculate_scale_mul() function here @@ -2041,16 +2041,6 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le } } - if ( raw.expos != 1 ) { - if(numFrames == 4) { - for(int i = 0; i < 4; ++i) { - processRawWhitepoint(raw.expos, raw.preser, *rawDataFrames[i]); - } - } else { - processRawWhitepoint(raw.expos, raw.preser, rawData); - } - } - if(prepareDenoise && dirpyrdenoiseExpComp == INFINITY) { LUTu aehist; int aehistcompr; @@ -3532,6 +3522,11 @@ void RawImageSource::scaleColors(int winx, int winy, int winw, int winh, const R cblacksom[i] = max( c_black[i] + black_lev[i], 0.0f ); // adjust black level } + c_white[0] = (ri->get_white(0) - cblacksom[0]) / raw.expos + cblacksom[0]; + c_white[1] = (ri->get_white(1) - cblacksom[1]) / raw.expos + cblacksom[1]; + c_white[2] = (ri->get_white(2) - cblacksom[2]) / raw.expos + cblacksom[2]; + c_white[3] = (ri->get_white(3) - cblacksom[3]) / raw.expos + cblacksom[3]; + initialGain = calculate_scale_mul(scale_mul, ref_pre_mul, c_white, cblacksom, isMono, ri->get_colors()); // recalculate scale colors with adjusted levels //fprintf(stderr, "recalc: %f [%f %f %f %f]\n", initialGain, scale_mul[0], scale_mul[1], scale_mul[2], scale_mul[3]); @@ -4736,13 +4731,13 @@ void RawImageSource::getRAWHistogram (LUTu & histRedRaw, LUTu & histGreenRaw, LU histGreenRaw.clear(); histBlueRaw.clear(); - const float maxWhite = rtengine::max(ri->get_white(0), ri->get_white(1), ri->get_white(2), ri->get_white(3)); + const float maxWhite = rtengine::max(c_white[0], c_white[1], c_white[2], c_white[3]); const float scale = maxWhite <= 1.f ? 65535.f : 1.f; // special case for float raw images in [0.0;1.0] range const float multScale = maxWhite <= 1.f ? 1.f / 255.f : 255.f; - const float mult[4] = { multScale / (ri->get_white(0) - cblacksom[0]), - multScale / (ri->get_white(1) - cblacksom[1]), - multScale / (ri->get_white(2) - cblacksom[2]), - multScale / (ri->get_white(3) - cblacksom[3]) + const float mult[4] = { multScale / (c_white[0] - cblacksom[0]), + multScale / (c_white[1] - cblacksom[1]), + multScale / (c_white[2] - cblacksom[2]), + multScale / (c_white[3] - cblacksom[3]) }; const bool fourColours = ri->getSensorType() == ST_BAYER && ((mult[1] != mult[3] || cblacksom[1] != cblacksom[3]) || FC(0, 0) == 3 || FC(0, 1) == 3 || FC(1, 0) == 3 || FC(1, 1) == 3); diff --git a/rtengine/rawimagesource.h b/rtengine/rawimagesource.h index 2c83b9bd3..acf2deccb 100644 --- a/rtengine/rawimagesource.h +++ b/rtengine/rawimagesource.h @@ -252,7 +252,6 @@ protected: bool freeBuffer ); void ddct8x8s(int isgn, float a[8][8]); - void processRawWhitepoint (float expos, float preser, array2D &rawData); // exposure before interpolation int interpolateBadPixelsBayer( PixelsMap &bitmapBads, array2D &rawData ); int interpolateBadPixelsNColours( PixelsMap &bitmapBads, const int colours ); diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index 89ddbceb2..7a5214d75 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -151,7 +151,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = { DARKFRAME, // EvPreProcessAutoDF DARKFRAME, // EvPreProcessDFFile DARKFRAME, // EvPreProcessExpCorrLinear - DARKFRAME, // EvPreProcessExpCorrPH + 0, // --unused-- FLATFIELD, // EvFlatFieldFile, FLATFIELD, // EvFlatFieldAutoSelect, FLATFIELD, // EvFlatFieldBlurRadius, diff --git a/rtgui/addsetids.h b/rtgui/addsetids.h index 86361b720..163bc27ef 100644 --- a/rtgui/addsetids.h +++ b/rtgui/addsetids.h @@ -42,7 +42,6 @@ enum { ADDSET_PREPROCESS_LINEDENOISE, ADDSET_RAWCACORR, ADDSET_RAWEXPOS_LINEAR, - ADDSET_RAWEXPOS_PRESER, ADDSET_RAWEXPOS_BLACKS, ADDSET_SHARPENEDGE_AMOUNT, ADDSET_SHARPENMICRO_AMOUNT, diff --git a/rtgui/batchtoolpanelcoord.cc b/rtgui/batchtoolpanelcoord.cc index db06ea59e..1a0eaeb28 100644 --- a/rtgui/batchtoolpanelcoord.cc +++ b/rtgui/batchtoolpanelcoord.cc @@ -172,7 +172,7 @@ void BatchToolPanelCoordinator::initSession () bayerpreprocess->setAdjusterBehavior (false, false); rawcacorrection->setAdjusterBehavior (false); flatfield->setAdjusterBehavior(false); - rawexposure->setAdjusterBehavior (false, false); + rawexposure->setAdjusterBehavior (false); bayerrawexposure->setAdjusterBehavior (false); xtransrawexposure->setAdjusterBehavior (false); } else { @@ -220,7 +220,7 @@ void BatchToolPanelCoordinator::initSession () bayerpreprocess->setAdjusterBehavior (options.baBehav[ADDSET_PREPROCESS_LINEDENOISE], options.baBehav[ADDSET_PREPROCESS_GREENEQUIL]); rawcacorrection->setAdjusterBehavior (options.baBehav[ADDSET_RAWCACORR]); flatfield->setAdjusterBehavior(options.baBehav[ADDSET_RAWFFCLIPCONTROL]); - rawexposure->setAdjusterBehavior (options.baBehav[ADDSET_RAWEXPOS_LINEAR], options.baBehav[ADDSET_RAWEXPOS_PRESER]); + rawexposure->setAdjusterBehavior (options.baBehav[ADDSET_RAWEXPOS_LINEAR]); bayerrawexposure->setAdjusterBehavior (options.baBehav[ADDSET_RAWEXPOS_BLACKS]); xtransrawexposure->setAdjusterBehavior (options.baBehav[ADDSET_RAWEXPOS_BLACKS]); @@ -352,7 +352,6 @@ void BatchToolPanelCoordinator::initSession () if (options.baBehav[ADDSET_DIRPYRDN_GAMMA]) { pparams.dirpyrDenoise.gamma = 0; } if (options.baBehav[ADDSET_RAWCACORR]) { pparams.raw.cablue = pparams.raw.cared = 0; } if (options.baBehav[ADDSET_RAWEXPOS_LINEAR]) { pparams.raw.expos = 0; } - if (options.baBehav[ADDSET_RAWEXPOS_PRESER]) { pparams.raw.preser = 0; } if (options.baBehav[ADDSET_RAWEXPOS_BLACKS]) { pparams.raw.bayersensor.black0 = pparams.raw.bayersensor.black1 = pparams.raw.bayersensor.black2 = pparams.raw.bayersensor.black3 = pparams.raw.xtranssensor.blackred = pparams.raw.xtranssensor.blackgreen = pparams.raw.xtranssensor.blackblue = 0; diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 7f44c7738..5d7396f19 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -453,7 +453,6 @@ void ParamsEdited::set(bool v) raw.ff_AutoClipControl = v; raw.ff_clipControl = v; raw.exPos = v; - raw.exPreser = v; wavelet.enabled = v; wavelet.strength = v; wavelet.balance = v; @@ -1020,7 +1019,6 @@ void ParamsEdited::initFrom(const std::vector& raw.ff_AutoClipControl = raw.ff_AutoClipControl && p.raw.ff_AutoClipControl == other.raw.ff_AutoClipControl; raw.ff_clipControl = raw.ff_clipControl && p.raw.ff_clipControl == other.raw.ff_clipControl; raw.exPos = raw.exPos && p.raw.expos == other.raw.expos; - raw.exPreser = raw.exPreser && p.raw.preser == other.raw.preser; wavelet.enabled = wavelet.enabled && p.wavelet.enabled == other.wavelet.enabled; wavelet.strength = wavelet.strength && p.wavelet.strength == other.wavelet.strength; wavelet.balance = wavelet.balance && p.wavelet.balance == other.wavelet.balance; @@ -2694,10 +2692,6 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.raw.expos = dontforceSet && options.baBehav[ADDSET_RAWEXPOS_LINEAR] ? toEdit.raw.expos + mods.raw.expos : mods.raw.expos; } - if (raw.exPreser) { - toEdit.raw.preser = dontforceSet && options.baBehav[ADDSET_RAWEXPOS_PRESER] ? toEdit.raw.preser + mods.raw.preser : mods.raw.preser; - } - if (raw.hotPixelFilter) { toEdit.raw.hotPixelFilter = mods.raw.hotPixelFilter; } @@ -3200,7 +3194,7 @@ bool RAWParamsEdited::XTransSensor::isUnchanged() const bool RAWParamsEdited::isUnchanged() const { return bayersensor.isUnchanged() && xtranssensor.isUnchanged() && ca_autocorrect && ca_avoidcolourshift && caautoiterations && cared && cablue && hotPixelFilter && deadPixelFilter && hotdeadpix_thresh && darkFrame - && df_autoselect && ff_file && ff_AutoSelect && ff_BlurRadius && ff_BlurType && exPos && exPreser && ff_AutoClipControl && ff_clipControl; + && df_autoselect && ff_file && ff_AutoSelect && ff_BlurRadius && ff_BlurType && exPos && ff_AutoClipControl && ff_clipControl; } bool LensProfParamsEdited::isUnchanged() const diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 3e77fcf56..0bad2ab3c 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -818,7 +818,6 @@ public: bool ff_AutoClipControl; bool ff_clipControl; bool exPos; - bool exPreser; bool isUnchanged() const; }; diff --git a/rtgui/partialpastedlg.cc b/rtgui/partialpastedlg.cc index e0e6a7219..1f3ef8b77 100644 --- a/rtgui/partialpastedlg.cc +++ b/rtgui/partialpastedlg.cc @@ -120,7 +120,6 @@ PartialPasteDlg::PartialPasteDlg (const Glib::ustring &title, Gtk::Window* paren raw_pdaf_lines_filter = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_PREPROCESS_PDAFLINESFILTER"))); //--- raw_expos = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWEXPOS_LINEAR"))); - raw_preser = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWEXPOS_PRESER"))); raw_black = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWEXPOS_BLACK"))); //--- df_file = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DARKFRAMEFILE"))); @@ -236,7 +235,6 @@ PartialPasteDlg::PartialPasteDlg (const Glib::ustring &title, Gtk::Window* paren vboxes[7]->pack_start (*raw_pdaf_lines_filter, Gtk::PACK_SHRINK, 2); vboxes[7]->pack_start (*Gtk::manage (new Gtk::HSeparator ()), Gtk::PACK_SHRINK, 0); vboxes[7]->pack_start (*raw_expos, Gtk::PACK_SHRINK, 2); - vboxes[7]->pack_start (*raw_preser, Gtk::PACK_SHRINK, 2); vboxes[7]->pack_start (*raw_black, Gtk::PACK_SHRINK, 2); vboxes[7]->pack_start (*Gtk::manage (new Gtk::HSeparator ()), Gtk::PACK_SHRINK, 0); vboxes[7]->pack_start (*df_file, Gtk::PACK_SHRINK, 2); @@ -384,7 +382,6 @@ PartialPasteDlg::PartialPasteDlg (const Glib::ustring &title, Gtk::Window* paren raw_pdaf_lines_filterConn = raw_pdaf_lines_filter->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true)); //--- raw_exposConn = raw_expos->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true)); - raw_preserConn = raw_preser->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true)); raw_blackConn = raw_black->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true)); //--- df_fileConn = df_file->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true)); @@ -459,7 +456,6 @@ void PartialPasteDlg::rawToggled () ConnectionBlocker raw_deadpix_filtBlocker(raw_deadpix_filtConn); ConnectionBlocker raw_pdaf_lines_filterBlocker(raw_pdaf_lines_filterConn); ConnectionBlocker raw_exposBlocker(raw_exposConn); - ConnectionBlocker raw_preserBlocker(raw_preserConn); ConnectionBlocker raw_blackBlocker(raw_blackConn); ConnectionBlocker df_fileBlocker(df_fileConn); ConnectionBlocker df_AutoSelectBlocker(df_AutoSelectConn); @@ -488,7 +484,6 @@ void PartialPasteDlg::rawToggled () raw_deadpix_filt->set_active (raw->get_active ()); raw_pdaf_lines_filter->set_active (raw->get_active ()); raw_expos->set_active (raw->get_active ()); - raw_preser->set_active (raw->get_active ()); raw_black->set_active (raw->get_active ()); df_file->set_active (raw->get_active ()); df_AutoSelect->set_active (raw->get_active ()); @@ -911,10 +906,6 @@ void PartialPasteDlg::applyPaste (rtengine::procparams::ProcParams* dstPP, Param filterPE.raw.exPos = falsePE.raw.exPos; } - if (!raw_preser->get_active ()) { - filterPE.raw.exPreser = falsePE.raw.exPreser; - } - if (!raw_ca_autocorrect->get_active ()) { filterPE.raw.ca_autocorrect = falsePE.raw.ca_autocorrect; filterPE.raw.caautoiterations = falsePE.raw.caautoiterations; diff --git a/rtgui/partialpastedlg.h b/rtgui/partialpastedlg.h index f551ac134..dbcb912e3 100644 --- a/rtgui/partialpastedlg.h +++ b/rtgui/partialpastedlg.h @@ -102,7 +102,6 @@ public: // options in raw: Gtk::CheckButton* raw_expos; - Gtk::CheckButton* raw_preser; Gtk::CheckButton* raw_black; Gtk::CheckButton* raw_ca_autocorrect; Gtk::CheckButton* raw_caredblue; @@ -138,7 +137,7 @@ public: sigc::connection coarserotConn, finerotConn, cropConn, resizeConn, prsharpeningConn, perspectiveConn, commonTransConn; sigc::connection metadataConn, exifchConn, iptcConn, icmConn; sigc::connection df_fileConn, df_AutoSelectConn, ff_fileConn, ff_AutoSelectConn, ff_BlurRadiusConn, ff_BlurTypeConn, ff_ClipControlConn; - sigc::connection raw_caredblueConn, raw_ca_autocorrectConn, raw_ca_avoid_colourshiftconn, raw_hotpix_filtConn, raw_deadpix_filtConn, raw_pdaf_lines_filterConn, raw_linenoiseConn, raw_greenthreshConn, raw_ccStepsConn, raw_methodConn, raw_borderConn, raw_imagenumConn, raw_dcb_iterationsConn, raw_lmmse_iterationsConn, raw_pixelshiftConn, raw_dcb_enhanceConn, raw_exposConn, raw_preserConn, raw_blackConn; + sigc::connection raw_caredblueConn, raw_ca_autocorrectConn, raw_ca_avoid_colourshiftconn, raw_hotpix_filtConn, raw_deadpix_filtConn, raw_pdaf_lines_filterConn, raw_linenoiseConn, raw_greenthreshConn, raw_ccStepsConn, raw_methodConn, raw_borderConn, raw_imagenumConn, raw_dcb_iterationsConn, raw_lmmse_iterationsConn, raw_pixelshiftConn, raw_dcb_enhanceConn, raw_exposConn, raw_blackConn; public: PartialPasteDlg (const Glib::ustring &title, Gtk::Window* parent); diff --git a/rtgui/preferences.cc b/rtgui/preferences.cc index 4151eacd4..c10c37b1f 100644 --- a/rtgui/preferences.cc +++ b/rtgui/preferences.cc @@ -404,7 +404,6 @@ Gtk::Widget* Preferences::getBatchProcPanel () mi = behModel->append (); mi->set_value (behavColumns.label, M ("TP_EXPOS_WHITEPOINT_LABEL")); appendBehavList (mi, M ("TP_RAWEXPOS_LINEAR"), ADDSET_RAWEXPOS_LINEAR, false); - appendBehavList (mi, M ("TP_RAWEXPOS_PRESER"), ADDSET_RAWEXPOS_PRESER, false); mi = behModel->append (); mi->set_value (behavColumns.label, M ("TP_RAWEXPOS_BLACKS")); diff --git a/rtgui/rawexposure.cc b/rtgui/rawexposure.cc index af0766e31..0c5191476 100644 --- a/rtgui/rawexposure.cc +++ b/rtgui/rawexposure.cc @@ -33,19 +33,7 @@ RAWExposure::RAWExposure () : FoldableToolPanel(this, "rawexposure", M("TP_EXPOS } PexPos->show(); - PexPreser = Gtk::manage(new Adjuster (M("TP_RAWEXPOS_PRESER"), 0, 2.5, 0.1, 0)); - PexPreser->setAdjusterListener (this); - - if (PexPreser->delay < options.adjusterMaxDelay) { - PexPreser->delay = options.adjusterMaxDelay; - } - - PexPreser->show(); - pack_start( *PexPos, Gtk::PACK_SHRINK, 4);//exposi - // raw highlight exposure setting is obsolete, removing from GUI - //pack_start( *PexPreser, Gtk::PACK_SHRINK, 4); - PexPos->setLogScale(100, 0); } @@ -55,11 +43,9 @@ void RAWExposure::read(const rtengine::procparams::ProcParams* pp, const ParamsE if(pedited ) { PexPos->setEditedState( pedited->raw.exPos ? Edited : UnEdited ); - PexPreser->setEditedState( pedited->raw.exPreser ? Edited : UnEdited ); } PexPos->setValue (pp->raw.expos); - PexPreser->setValue (pp->raw.preser);//exposi enableListener (); } @@ -67,11 +53,9 @@ void RAWExposure::read(const rtengine::procparams::ProcParams* pp, const ParamsE void RAWExposure::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pedited) { pp->raw.expos = PexPos->getValue(); - pp->raw.preser = PexPreser->getValue();//exposi if (pedited) { pedited->raw.exPos = PexPos->getEditedState (); - pedited->raw.exPreser = PexPreser->getEditedState ();//exposi } } @@ -83,8 +67,6 @@ void RAWExposure::adjusterChanged(Adjuster* a, double newval) if (a == PexPos ) { listener->panelChanged (EvPreProcessExpCorrLinear, value ); - } else if (a == PexPreser && ABS(PexPos->getValue() - 1.0) > 0.0001) { // update takes long, only do it if it would have an effect - listener->panelChanged (EvPreProcessExpCorrPH, value ); } } } @@ -97,33 +79,27 @@ void RAWExposure::setBatchMode(bool batchMode) { ToolPanel::setBatchMode (batchMode); PexPos->showEditedCB (); - PexPreser->showEditedCB ();//exposure } void RAWExposure::setDefaults(const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited) { PexPos->setDefault( defParams->raw.expos); - PexPreser->setDefault( defParams->raw.preser); if (pedited) { PexPos->setDefaultEditedState( pedited->raw.exPos ? Edited : UnEdited); - PexPreser->setDefaultEditedState( pedited->raw.exPreser ? Edited : UnEdited); } else { PexPos->setDefaultEditedState( Irrelevant ); - PexPreser->setDefaultEditedState( Irrelevant ); } } -void RAWExposure::setAdjusterBehavior (bool pexposadd, bool pexpreseradd) +void RAWExposure::setAdjusterBehavior (bool pexposadd) { PexPos->setAddMode(pexposadd); - PexPreser->setAddMode(pexpreseradd); } void RAWExposure::trimValues (rtengine::procparams::ProcParams* pp) { PexPos->trimValue(pp->raw.expos); - PexPreser->trimValue(pp->raw.preser); } diff --git a/rtgui/rawexposure.h b/rtgui/rawexposure.h index a04d0e3db..f34776d19 100644 --- a/rtgui/rawexposure.h +++ b/rtgui/rawexposure.h @@ -29,7 +29,6 @@ class RAWExposure : public ToolParamBlock, public AdjusterListener, public Folda protected: Adjuster* PexPos; - Adjuster* PexPreser; private: // Gtk::CheckButton* PextwoGreen; @@ -43,7 +42,7 @@ public: void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr) override; void adjusterChanged (Adjuster* a, double newval) override; void adjusterAutoToggled (Adjuster* a, bool newval) override; - void setAdjusterBehavior (bool pexposadd, bool pexpreseradd); + void setAdjusterBehavior (bool pexposadd); void trimValues (rtengine::procparams::ProcParams* pp) override; }; From 1ac5fbb7092638ffcef7e3ae34c3a0d152eddf44 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Sat, 23 Feb 2019 14:13:12 +0100 Subject: [PATCH 39/41] another loop --- rtengine/rawimagesource.cc | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 6dbeea643..b7f90ba3a 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -3522,10 +3522,9 @@ void RawImageSource::scaleColors(int winx, int winy, int winw, int winh, const R cblacksom[i] = max( c_black[i] + black_lev[i], 0.0f ); // adjust black level } - c_white[0] = (ri->get_white(0) - cblacksom[0]) / raw.expos + cblacksom[0]; - c_white[1] = (ri->get_white(1) - cblacksom[1]) / raw.expos + cblacksom[1]; - c_white[2] = (ri->get_white(2) - cblacksom[2]) / raw.expos + cblacksom[2]; - c_white[3] = (ri->get_white(3) - cblacksom[3]) / raw.expos + cblacksom[3]; + for (int i = 0; i < 4; ++i) { + c_white[i] = (ri->get_white(i) - cblacksom[i]) / raw.expos + cblacksom[i]; + } initialGain = calculate_scale_mul(scale_mul, ref_pre_mul, c_white, cblacksom, isMono, ri->get_colors()); // recalculate scale colors with adjusted levels From e6f6b2b4fb35bfead7a0013b34ce65a1b9edd8d1 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Mon, 25 Feb 2019 15:38:45 +0100 Subject: [PATCH 40/41] Removed some keys --- rtdata/languages/default | 3 --- 1 file changed, 3 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 5ec37ce8b..3d74db023 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -380,7 +380,6 @@ HISTORY_MSG_121;Raw CA Correction - Auto HISTORY_MSG_122;Dark-Frame - Auto-selection HISTORY_MSG_123;Dark-Frame - File HISTORY_MSG_124;White point correction -HISTORY_MSG_125;Highlight preservation HISTORY_MSG_126;Flat-Field - File HISTORY_MSG_127;Flat-Field - Auto-selection HISTORY_MSG_128;Flat-Field - Blur radius @@ -1018,7 +1017,6 @@ PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue PARTIALPASTE_RAWEXPOS_BLACK;Black levels PARTIALPASTE_RAWEXPOS_LINEAR;White point correction -PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation PARTIALPASTE_RAWGROUP;Raw Settings PARTIALPASTE_RAW_BORDER;Raw border PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement @@ -1844,7 +1842,6 @@ TP_RAWEXPOS_BLACK_BLUE;Blue TP_RAWEXPOS_BLACK_GREEN;Green TP_RAWEXPOS_BLACK_RED;Red TP_RAWEXPOS_LINEAR;White-point correction -TP_RAWEXPOS_PRESER;Highlight preservation TP_RAWEXPOS_RGB;Red, Green, Blue TP_RAWEXPOS_TWOGREEN;Link greens TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) From 625bee2e21e6a1fd3b4be49ad5d406f8193e8756 Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Mon, 25 Feb 2019 15:50:34 +0100 Subject: [PATCH 41/41] Removed keys made obsolete by previous commit --- rtdata/languages/Catala | 3 --- rtdata/languages/Chinese (Simplified) | 3 --- rtdata/languages/Chinese (Traditional) | 3 --- rtdata/languages/Czech | 3 --- rtdata/languages/Dansk | 3 --- rtdata/languages/Deutsch | 3 --- rtdata/languages/English (UK) | 3 --- rtdata/languages/English (US) | 3 --- rtdata/languages/Espanol | 3 --- rtdata/languages/Euskara | 3 --- rtdata/languages/Francais | 3 --- rtdata/languages/Greek | 3 --- rtdata/languages/Hebrew | 3 --- rtdata/languages/Italiano | 3 --- rtdata/languages/Japanese | 3 --- rtdata/languages/Latvian | 3 --- rtdata/languages/Magyar | 3 --- rtdata/languages/Nederlands | 3 --- rtdata/languages/Norsk BM | 3 --- rtdata/languages/Polish | 3 --- rtdata/languages/Polish (Latin Characters) | 3 --- rtdata/languages/Portugues (Brasil) | 3 --- rtdata/languages/Russian | 3 --- rtdata/languages/Serbian (Cyrilic Characters) | 3 --- rtdata/languages/Serbian (Latin Characters) | 3 --- rtdata/languages/Slovak | 3 --- rtdata/languages/Suomi | 3 --- rtdata/languages/Swedish | 3 --- rtdata/languages/Turkish | 3 --- 29 files changed, 87 deletions(-) diff --git a/rtdata/languages/Catala b/rtdata/languages/Catala index 3212a263e..c38ec1cb5 100644 --- a/rtdata/languages/Catala +++ b/rtdata/languages/Catala @@ -302,7 +302,6 @@ HISTORY_MSG_121;Raw auto CA HISTORY_MSG_122;Auto marc fosc HISTORY_MSG_123;Fitxer de camp fosc HISTORY_MSG_124;Correc. expo. linear -HISTORY_MSG_125;Correc. exposició preservant HL HISTORY_MSG_126;Fitxer de camp pla HISTORY_MSG_127;Auto-sel. camp pla HISTORY_MSG_128;Camp pla borrós - radi @@ -470,7 +469,6 @@ PARTIALPASTE_PREPROCESS_LINEDENOISE;Filtre línia de soroll PARTIALPASTE_RAWCACORR_AUTO;Auto-correcció AC PARTIALPASTE_RAWEXPOS_BLACK;Nivell negre PARTIALPASTE_RAWEXPOS_LINEAR;Factor de corr. linear de punt blanc -PARTIALPASTE_RAWEXPOS_PRESER;Corr. punt blanc preservant HL (EV) PARTIALPASTE_RAWGROUP;Ajustos raw PARTIALPASTE_RAW_DCBENHANCE;Aplica pas de millora DCB PARTIALPASTE_RAW_DCBITERATIONS;Nombre d'iteracions DCB @@ -798,7 +796,6 @@ TP_RAWCACORR_CABLUE;Blau TP_RAWCACORR_CARED;Vermell TP_RAWEXPOS_BLACKS;Nivells negres TP_RAWEXPOS_LINEAR;Punt blanc: factor de correcció linear -TP_RAWEXPOS_PRESER;Punt blanc: correc. clars preservant (EV) TP_RAWEXPOS_TWOGREEN;Dos verds junts TP_RAW_DCBENHANCE;Aplica pas de millora DCB TP_RAW_DCBITERATIONS;Nombre d'iteracions DCB diff --git a/rtdata/languages/Chinese (Simplified) b/rtdata/languages/Chinese (Simplified) index 49b60964a..3badf67eb 100644 --- a/rtdata/languages/Chinese (Simplified) +++ b/rtdata/languages/Chinese (Simplified) @@ -463,7 +463,6 @@ PARTIALPASTE_RAWCACORR_AUTO;CA自动更正 PARTIALPASTE_RAWCACORR_CAREDBLUE;红蓝色散 PARTIALPASTE_RAWEXPOS_BLACK;黑色等级 PARTIALPASTE_RAWEXPOS_LINEAR;白点纠正 -PARTIALPASTE_RAWEXPOS_PRESER;高光补偿 PARTIALPASTE_RAWGROUP;Raw设置 PARTIALPASTE_RAW_DCBENHANCE;DCB 增强 PARTIALPASTE_RAW_DCBITERATIONS;DCB 反复 @@ -1055,7 +1054,6 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: - !HISTORY_MSG_118;Raw CA correction - Blue !HISTORY_MSG_120;Green equilibration !HISTORY_MSG_121;Raw CA Correction - Auto -!HISTORY_MSG_125;Highlight preservation !HISTORY_MSG_131;NR - Luma !HISTORY_MSG_132;NR - Chroma !HISTORY_MSG_133;Output gamma @@ -1950,7 +1948,6 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: - !TP_RAWEXPOS_BLACK_GREEN;Green !TP_RAWEXPOS_BLACK_RED;Red !TP_RAWEXPOS_LINEAR;White-point correction -!TP_RAWEXPOS_PRESER;Highlight preservation !TP_RAWEXPOS_RGB;Red, Green, Blue !TP_RAWEXPOS_TWOGREEN;Link greens !TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) diff --git a/rtdata/languages/Chinese (Traditional) b/rtdata/languages/Chinese (Traditional) index 78fecbc5a..6fd045ce8 100644 --- a/rtdata/languages/Chinese (Traditional) +++ b/rtdata/languages/Chinese (Traditional) @@ -631,7 +631,6 @@ TP_WBALANCE_TEMPERATURE;色溫 !HISTORY_MSG_122;Dark-Frame - Auto-selection !HISTORY_MSG_123;Dark-Frame - File !HISTORY_MSG_124;White point correction -!HISTORY_MSG_125;Highlight preservation !HISTORY_MSG_126;Flat-Field - File !HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_128;Flat-Field - Blur radius @@ -1206,7 +1205,6 @@ TP_WBALANCE_TEMPERATURE;色溫 !PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue !PARTIALPASTE_RAWEXPOS_BLACK;Black levels !PARTIALPASTE_RAWEXPOS_LINEAR;White point correction -!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation !PARTIALPASTE_RAWGROUP;Raw Settings !PARTIALPASTE_RAW_BORDER;Raw border !PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement @@ -1898,7 +1896,6 @@ TP_WBALANCE_TEMPERATURE;色溫 !TP_RAWEXPOS_BLACK_GREEN;Green !TP_RAWEXPOS_BLACK_RED;Red !TP_RAWEXPOS_LINEAR;White-point correction -!TP_RAWEXPOS_PRESER;Highlight preservation !TP_RAWEXPOS_RGB;Red, Green, Blue !TP_RAWEXPOS_TWOGREEN;Link greens !TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) diff --git a/rtdata/languages/Czech b/rtdata/languages/Czech index acab88606..8d3296a1c 100644 --- a/rtdata/languages/Czech +++ b/rtdata/languages/Czech @@ -421,7 +421,6 @@ HISTORY_MSG_121;Raw korekce CA - automatická HISTORY_MSG_122;Tmavé snímky - Automatický výběr HISTORY_MSG_123;Tmavé snímky - Soubor HISTORY_MSG_124;Korekce bílého bodu -HISTORY_MSG_125;Zachování světel HISTORY_MSG_126;Flat Field - Soubor HISTORY_MSG_127;Flat Field - Automatický výběr HISTORY_MSG_128;Flat Field - Poloměr rozostření @@ -1056,7 +1055,6 @@ PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA zabránit posunu barev PARTIALPASTE_RAWCACORR_CAREDBLUE;CA červená a modrá PARTIALPASTE_RAWEXPOS_BLACK;Úrovně černé PARTIALPASTE_RAWEXPOS_LINEAR;Korekce bílého bodu -PARTIALPASTE_RAWEXPOS_PRESER;Zachování světel PARTIALPASTE_RAWGROUP;Nastavení Raw PARTIALPASTE_RAW_BORDER;Okraj Raw PARTIALPASTE_RAW_DCBENHANCE;Vylepšení DCB @@ -1882,7 +1880,6 @@ TP_RAWEXPOS_BLACK_BLUE;Modrá TP_RAWEXPOS_BLACK_GREEN;Zelená TP_RAWEXPOS_BLACK_RED;Červená TP_RAWEXPOS_LINEAR;Korekce bílého bodu -TP_RAWEXPOS_PRESER;Zachování světel TP_RAWEXPOS_RGB;Červená, telená, modrá TP_RAWEXPOS_TWOGREEN;Spojit zelené TP_RAW_1PASSMEDIUM;Jeden průchod (Markesteijn) diff --git a/rtdata/languages/Dansk b/rtdata/languages/Dansk index fc6c23d8a..ff3c2a8e4 100644 --- a/rtdata/languages/Dansk +++ b/rtdata/languages/Dansk @@ -626,7 +626,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur !HISTORY_MSG_122;Dark-Frame - Auto-selection !HISTORY_MSG_123;Dark-Frame - File !HISTORY_MSG_124;White point correction -!HISTORY_MSG_125;Highlight preservation !HISTORY_MSG_126;Flat-Field - File !HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_128;Flat-Field - Blur radius @@ -1203,7 +1202,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur !PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue !PARTIALPASTE_RAWEXPOS_BLACK;Black levels !PARTIALPASTE_RAWEXPOS_LINEAR;White point correction -!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation !PARTIALPASTE_RAWGROUP;Raw Settings !PARTIALPASTE_RAW_BORDER;Raw border !PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement @@ -1895,7 +1893,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_RAWEXPOS_BLACK_GREEN;Green !TP_RAWEXPOS_BLACK_RED;Red !TP_RAWEXPOS_LINEAR;White-point correction -!TP_RAWEXPOS_PRESER;Highlight preservation !TP_RAWEXPOS_RGB;Red, Green, Blue !TP_RAWEXPOS_TWOGREEN;Link greens !TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) diff --git a/rtdata/languages/Deutsch b/rtdata/languages/Deutsch index e46744297..6975587c7 100644 --- a/rtdata/languages/Deutsch +++ b/rtdata/languages/Deutsch @@ -457,7 +457,6 @@ HISTORY_MSG_121;(Sensor-Matrix)\nChromatische Aberration\nAutomatische Korrektur HISTORY_MSG_122;(Dunkelbild)\nAutomatische Auswahl HISTORY_MSG_123;(Dunkelbild) - Datei HISTORY_MSG_124;(Weißpunkt)\nKorrekturfaktor -HISTORY_MSG_125;(Belichtungskorrektur)\nLichter schützen HISTORY_MSG_126;(Weißbild) - Datei HISTORY_MSG_127;(Weißbild)\nAutomatische Auswahl HISTORY_MSG_128;(Weißbild)\nUnschärferadius @@ -1098,7 +1097,6 @@ PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;Chromatische Aberration: Farbverschiebung PARTIALPASTE_RAWCACORR_CAREDBLUE;Chromatische Aberration: Rot & Blau PARTIALPASTE_RAWEXPOS_BLACK;Weißpunkt: Schwarzpegel PARTIALPASTE_RAWEXPOS_LINEAR;Weißpunkt: Korrekturfaktor -PARTIALPASTE_RAWEXPOS_PRESER;Weißpunkt: Lichter schützen (EV) PARTIALPASTE_RAWGROUP;RAW PARTIALPASTE_RAW_BORDER;Farbinterpolation: Bildrand PARTIALPASTE_RAW_DCBENHANCE;Farbinterpolation: DCB-Verbesserung @@ -1931,7 +1929,6 @@ TP_RAWEXPOS_BLACK_BLUE;Blau TP_RAWEXPOS_BLACK_GREEN;Grün TP_RAWEXPOS_BLACK_RED;Rot TP_RAWEXPOS_LINEAR;Korrekturfaktor -TP_RAWEXPOS_PRESER;Weißpunkt: Lichter schützen TP_RAWEXPOS_RGB;Rot, Grün, Blau TP_RAWEXPOS_TWOGREEN;Grün-Werte automatisch angleichen TP_RAW_1PASSMEDIUM;1-Pass (Markesteijn) diff --git a/rtdata/languages/English (UK) b/rtdata/languages/English (UK) index 8c4d53306..f6f3cc518 100644 --- a/rtdata/languages/English (UK) +++ b/rtdata/languages/English (UK) @@ -489,7 +489,6 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !HISTORY_MSG_122;Dark-Frame - Auto-selection !HISTORY_MSG_123;Dark-Frame - File !HISTORY_MSG_124;White point correction -!HISTORY_MSG_125;Highlight preservation !HISTORY_MSG_126;Flat-Field - File !HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_128;Flat-Field - Blur radius @@ -1098,7 +1097,6 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue !PARTIALPASTE_RAWEXPOS_BLACK;Black levels !PARTIALPASTE_RAWEXPOS_LINEAR;White point correction -!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation !PARTIALPASTE_RAWGROUP;Raw Settings !PARTIALPASTE_RAW_BORDER;Raw border !PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement @@ -1858,7 +1856,6 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !TP_RAWEXPOS_BLACK_GREEN;Green !TP_RAWEXPOS_BLACK_RED;Red !TP_RAWEXPOS_LINEAR;White-point correction -!TP_RAWEXPOS_PRESER;Highlight preservation !TP_RAWEXPOS_RGB;Red, Green, Blue !TP_RAWEXPOS_TWOGREEN;Link greens !TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) diff --git a/rtdata/languages/English (US) b/rtdata/languages/English (US) index 0ae647a24..34975d449 100644 --- a/rtdata/languages/English (US) +++ b/rtdata/languages/English (US) @@ -381,7 +381,6 @@ !HISTORY_MSG_122;Dark-Frame - Auto-selection !HISTORY_MSG_123;Dark-Frame - File !HISTORY_MSG_124;White point correction -!HISTORY_MSG_125;Highlight preservation !HISTORY_MSG_126;Flat-Field - File !HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_128;Flat-Field - Blur radius @@ -1019,7 +1018,6 @@ !PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue !PARTIALPASTE_RAWEXPOS_BLACK;Black levels !PARTIALPASTE_RAWEXPOS_LINEAR;White point correction -!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation !PARTIALPASTE_RAWGROUP;Raw Settings !PARTIALPASTE_RAW_BORDER;Raw border !PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement @@ -1845,7 +1843,6 @@ !TP_RAWEXPOS_BLACK_GREEN;Green !TP_RAWEXPOS_BLACK_RED;Red !TP_RAWEXPOS_LINEAR;White-point correction -!TP_RAWEXPOS_PRESER;Highlight preservation !TP_RAWEXPOS_RGB;Red, Green, Blue !TP_RAWEXPOS_TWOGREEN;Link greens !TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) diff --git a/rtdata/languages/Espanol b/rtdata/languages/Espanol index d2f0bc4dd..d32a430fd 100644 --- a/rtdata/languages/Espanol +++ b/rtdata/languages/Espanol @@ -440,7 +440,6 @@ HISTORY_MSG_121;Corrección automática AC HISTORY_MSG_122;Auto selección de arch. de Toma Negra HISTORY_MSG_123;Archivo de Toma Negra HISTORY_MSG_124;Corrección de punto blanco -HISTORY_MSG_125;Preservar Luces Altas HISTORY_MSG_126;Archivo de campo plano HISTORY_MSG_127;Auto selección archivo de campo plano HISTORY_MSG_128;Radio de difuminado de campo plano @@ -1081,7 +1080,6 @@ PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA evitar el cambio de color PARTIALPASTE_RAWCACORR_CAREDBLUE;CA Rojo & Azul PARTIALPASTE_RAWEXPOS_BLACK;Nivel de negro PARTIALPASTE_RAWEXPOS_LINEAR;Corrección de punto blanco -PARTIALPASTE_RAWEXPOS_PRESER;Preservar Luces Altas PARTIALPASTE_RAWGROUP;Ajustes Raw PARTIALPASTE_RAW_BORDER;Raw margen/borde PARTIALPASTE_RAW_DCBENHANCE;Aplicar paso de mejora DCB @@ -1972,7 +1970,6 @@ TP_RAWEXPOS_BLACK_BLUE;Azul TP_RAWEXPOS_BLACK_GREEN;Verde TP_RAWEXPOS_BLACK_RED;Rojo TP_RAWEXPOS_LINEAR;Corrección de punto blanco -TP_RAWEXPOS_PRESER;Preservación de Luces Altas TP_RAWEXPOS_RGB;Rojo, Verde, Azul TP_RAWEXPOS_TWOGREEN;Vincular verdes TP_RAW_1PASSMEDIUM;1-pasaje (medio) diff --git a/rtdata/languages/Euskara b/rtdata/languages/Euskara index 6478433fb..7c934c7cb 100644 --- a/rtdata/languages/Euskara +++ b/rtdata/languages/Euskara @@ -627,7 +627,6 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !HISTORY_MSG_122;Dark-Frame - Auto-selection !HISTORY_MSG_123;Dark-Frame - File !HISTORY_MSG_124;White point correction -!HISTORY_MSG_125;Highlight preservation !HISTORY_MSG_126;Flat-Field - File !HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_128;Flat-Field - Blur radius @@ -1204,7 +1203,6 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue !PARTIALPASTE_RAWEXPOS_BLACK;Black levels !PARTIALPASTE_RAWEXPOS_LINEAR;White point correction -!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation !PARTIALPASTE_RAWGROUP;Raw Settings !PARTIALPASTE_RAW_BORDER;Raw border !PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement @@ -1896,7 +1894,6 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !TP_RAWEXPOS_BLACK_GREEN;Green !TP_RAWEXPOS_BLACK_RED;Red !TP_RAWEXPOS_LINEAR;White-point correction -!TP_RAWEXPOS_PRESER;Highlight preservation !TP_RAWEXPOS_RGB;Red, Green, Blue !TP_RAWEXPOS_TWOGREEN;Link greens !TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) diff --git a/rtdata/languages/Francais b/rtdata/languages/Francais index 54108b344..562db238c 100644 --- a/rtdata/languages/Francais +++ b/rtdata/languages/Francais @@ -379,7 +379,6 @@ HISTORY_MSG_121;A.C. Raw - Auto HISTORY_MSG_122;Sélection auto de trame noire HISTORY_MSG_123;Fichier de trame noire HISTORY_MSG_124;Correct. du point blanc -HISTORY_MSG_125;Préservation des HL HISTORY_MSG_126;Champ Uniforme - Fichier HISTORY_MSG_127;Champ Uniforme - Sélection auto HISTORY_MSG_128;Champ Uniforme - Rayon @@ -1018,7 +1017,6 @@ PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;A.C. Raw - Éviter les dérives couleurs PARTIALPASTE_RAWCACORR_CAREDBLUE;A.C. Raw - Rouge et bleu PARTIALPASTE_RAWEXPOS_BLACK;Niveaux de noir PARTIALPASTE_RAWEXPOS_LINEAR;Correction du point blanc -PARTIALPASTE_RAWEXPOS_PRESER;Préservation des hautes humières PARTIALPASTE_RAWGROUP;Réglages RAW PARTIALPASTE_RAW_BORDER;Bord Raw PARTIALPASTE_RAW_DCBENHANCE;Amélioration de DCB @@ -1852,7 +1850,6 @@ TP_RAWEXPOS_BLACK_BLUE;Bleu TP_RAWEXPOS_BLACK_GREEN;Vert TP_RAWEXPOS_BLACK_RED;Rouge TP_RAWEXPOS_LINEAR;Corr. du Point Blanc -TP_RAWEXPOS_PRESER;Préservation des HL TP_RAWEXPOS_RGB;Rouge, Vert, Bleu TP_RAWEXPOS_TWOGREEN;Lier les verts TP_RAW_1PASSMEDIUM;1-Passe (Medium) diff --git a/rtdata/languages/Greek b/rtdata/languages/Greek index 7f3e06086..b7787fa7d 100644 --- a/rtdata/languages/Greek +++ b/rtdata/languages/Greek @@ -626,7 +626,6 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !HISTORY_MSG_122;Dark-Frame - Auto-selection !HISTORY_MSG_123;Dark-Frame - File !HISTORY_MSG_124;White point correction -!HISTORY_MSG_125;Highlight preservation !HISTORY_MSG_126;Flat-Field - File !HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_128;Flat-Field - Blur radius @@ -1203,7 +1202,6 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue !PARTIALPASTE_RAWEXPOS_BLACK;Black levels !PARTIALPASTE_RAWEXPOS_LINEAR;White point correction -!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation !PARTIALPASTE_RAWGROUP;Raw Settings !PARTIALPASTE_RAW_BORDER;Raw border !PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement @@ -1895,7 +1893,6 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !TP_RAWEXPOS_BLACK_GREEN;Green !TP_RAWEXPOS_BLACK_RED;Red !TP_RAWEXPOS_LINEAR;White-point correction -!TP_RAWEXPOS_PRESER;Highlight preservation !TP_RAWEXPOS_RGB;Red, Green, Blue !TP_RAWEXPOS_TWOGREEN;Link greens !TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) diff --git a/rtdata/languages/Hebrew b/rtdata/languages/Hebrew index 789ebfe77..440b96b3f 100644 --- a/rtdata/languages/Hebrew +++ b/rtdata/languages/Hebrew @@ -627,7 +627,6 @@ TP_WBALANCE_TEMPERATURE;מידת חום !HISTORY_MSG_122;Dark-Frame - Auto-selection !HISTORY_MSG_123;Dark-Frame - File !HISTORY_MSG_124;White point correction -!HISTORY_MSG_125;Highlight preservation !HISTORY_MSG_126;Flat-Field - File !HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_128;Flat-Field - Blur radius @@ -1204,7 +1203,6 @@ TP_WBALANCE_TEMPERATURE;מידת חום !PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue !PARTIALPASTE_RAWEXPOS_BLACK;Black levels !PARTIALPASTE_RAWEXPOS_LINEAR;White point correction -!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation !PARTIALPASTE_RAWGROUP;Raw Settings !PARTIALPASTE_RAW_BORDER;Raw border !PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement @@ -1896,7 +1894,6 @@ TP_WBALANCE_TEMPERATURE;מידת חום !TP_RAWEXPOS_BLACK_GREEN;Green !TP_RAWEXPOS_BLACK_RED;Red !TP_RAWEXPOS_LINEAR;White-point correction -!TP_RAWEXPOS_PRESER;Highlight preservation !TP_RAWEXPOS_RGB;Red, Green, Blue !TP_RAWEXPOS_TWOGREEN;Link greens !TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) diff --git a/rtdata/languages/Italiano b/rtdata/languages/Italiano index 92d8c47e8..8f68d5cf9 100644 --- a/rtdata/languages/Italiano +++ b/rtdata/languages/Italiano @@ -332,7 +332,6 @@ HISTORY_MSG_121;AC automatica (Raw) HISTORY_MSG_122;Dark Frame - Automatico HISTORY_MSG_123;Dark Frame - File HISTORY_MSG_124;Correzione Punto di Bianco -HISTORY_MSG_125;Protezione AlteLuci HISTORY_MSG_126;Flat Field - File HISTORY_MSG_127;Flat Field - Automatico HISTORY_MSG_128;Flat Field - Raggio di Sfocamento @@ -600,7 +599,6 @@ PARTIALPASTE_PREPROCESS_LINEDENOISE;Filtro per rumore a bande PARTIALPASTE_RAWCACORR_AUTO;Autocorrezione AC PARTIALPASTE_RAWEXPOS_BLACK;Punto del Nero PARTIALPASTE_RAWEXPOS_LINEAR;Correzione Punto del Bianco -PARTIALPASTE_RAWEXPOS_PRESER;Conservazione Alteluci PARTIALPASTE_RAWGROUP;Impostazioni del Raw PARTIALPASTE_RAW_DCBENHANCE;Miglioramento DCB PARTIALPASTE_RAW_DCBITERATIONS;Numero di iterazioni DCB @@ -1135,7 +1133,6 @@ TP_RAWCACORR_CABLUE;Blu TP_RAWCACORR_CARED;Rosso TP_RAWEXPOS_BLACKS;Livelli del nero TP_RAWEXPOS_LINEAR;Punto del Bianco - Correzione -TP_RAWEXPOS_PRESER;Punto del Bianco - Protezione Alteluci TP_RAWEXPOS_TWOGREEN;Valori del verde uniti TP_RAW_DCBENHANCE;Miglioramento DCB TP_RAW_DCBITERATIONS;Numero di iterazioni DCB diff --git a/rtdata/languages/Japanese b/rtdata/languages/Japanese index 7e543daaf..a05eaacda 100644 --- a/rtdata/languages/Japanese +++ b/rtdata/languages/Japanese @@ -412,7 +412,6 @@ HISTORY_MSG_121;raw 色収差 自動 HISTORY_MSG_122;ダークフレーム 自動 HISTORY_MSG_123;ダークフレーム ファイル HISTORY_MSG_124;リニア露光補正 -HISTORY_MSG_125;露光補正 HLを保持 HISTORY_MSG_126;フラットフィールド ファイル HISTORY_MSG_127;フラットフィールド 自動選択 HISTORY_MSG_128;フラットフィールド・ぼかし半径 @@ -1051,7 +1050,6 @@ PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA 色ずれを回避 PARTIALPASTE_RAWCACORR_CAREDBLUE;色収差 レッドとブルー PARTIALPASTE_RAWEXPOS_BLACK;黒レベル PARTIALPASTE_RAWEXPOS_LINEAR;raw ホワイトポイント リニア補正係数 -PARTIALPASTE_RAWEXPOS_PRESER;raw ホワイトポイント ハイライトを保持したまま補正 (EV) PARTIALPASTE_RAWGROUP;raw 設定 PARTIALPASTE_RAW_BORDER;Rawの境界 PARTIALPASTE_RAW_DCBENHANCE;DCB 拡張処理適用 @@ -1878,7 +1876,6 @@ TP_RAWEXPOS_BLACK_BLUE;ブルー TP_RAWEXPOS_BLACK_GREEN;グリーン TP_RAWEXPOS_BLACK_RED;レッド TP_RAWEXPOS_LINEAR;ホワイトポイント補正 -TP_RAWEXPOS_PRESER;ハイライトを保持 TP_RAWEXPOS_RGB;レッド、グリーン、ブルー TP_RAWEXPOS_TWOGREEN;2つのグリーンを連動 TP_RAW_1PASSMEDIUM;1-パス (Markesteijn) diff --git a/rtdata/languages/Latvian b/rtdata/languages/Latvian index 20736ed12..dd5b3ca46 100644 --- a/rtdata/languages/Latvian +++ b/rtdata/languages/Latvian @@ -627,7 +627,6 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !HISTORY_MSG_122;Dark-Frame - Auto-selection !HISTORY_MSG_123;Dark-Frame - File !HISTORY_MSG_124;White point correction -!HISTORY_MSG_125;Highlight preservation !HISTORY_MSG_126;Flat-Field - File !HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_128;Flat-Field - Blur radius @@ -1204,7 +1203,6 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue !PARTIALPASTE_RAWEXPOS_BLACK;Black levels !PARTIALPASTE_RAWEXPOS_LINEAR;White point correction -!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation !PARTIALPASTE_RAWGROUP;Raw Settings !PARTIALPASTE_RAW_BORDER;Raw border !PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement @@ -1896,7 +1894,6 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !TP_RAWEXPOS_BLACK_GREEN;Green !TP_RAWEXPOS_BLACK_RED;Red !TP_RAWEXPOS_LINEAR;White-point correction -!TP_RAWEXPOS_PRESER;Highlight preservation !TP_RAWEXPOS_RGB;Red, Green, Blue !TP_RAWEXPOS_TWOGREEN;Link greens !TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) diff --git a/rtdata/languages/Magyar b/rtdata/languages/Magyar index 2a6ce45a6..8725d2789 100644 --- a/rtdata/languages/Magyar +++ b/rtdata/languages/Magyar @@ -295,7 +295,6 @@ HISTORY_MSG_121;Auto CA HISTORY_MSG_122;Auto ref. feketekép (dark frame) HISTORY_MSG_123;Ref. feketekép állománya HISTORY_MSG_124;Lineáris exp. korrekció -HISTORY_MSG_125;Exp. korrekció csúcsfények megőrzésével HISTORY_MSG_126;Flat Field állomány HISTORY_MSG_127;Flat Field automatikus kivál. HISTORY_MSG_128;Flat Field elmosás sugara @@ -454,7 +453,6 @@ PARTIALPASTE_PREPROCESS_LINEDENOISE;Soronkénti zajszűrés PARTIALPASTE_RAWCACORR_AUTO;CA autokorrekció PARTIALPASTE_RAWEXPOS_BLACK;Feketeszint PARTIALPASTE_RAWEXPOS_LINEAR;Raw fehérszint lineáris korrekciós faktor (FÉ) -PARTIALPASTE_RAWEXPOS_PRESER;Raw fehérszint csúcsfény-megőrző faktor (FÉ) PARTIALPASTE_RAWGROUP;Raw beállítások PARTIALPASTE_RAW_DCBENHANCE;DCB javítási lépés alkalmazása PARTIALPASTE_RAW_DCBITERATIONS;DCB iterációk száma @@ -729,7 +727,6 @@ TP_RAWCACORR_CABLUE;Kék TP_RAWCACORR_CARED;Vörös TP_RAWEXPOS_BLACKS;Feketeszintek TP_RAWEXPOS_LINEAR;Fehérszint: lineáris korrelációs faktor -TP_RAWEXPOS_PRESER;Fehérszint: csúcsfény-megőrző korrekció (FÉ) TP_RAWEXPOS_TWOGREEN;Zöldek együtt TP_RAW_DCBENHANCE;DCB helyesbítő lépés alkalmazása TP_RAW_DCBITERATIONS;DCB iterációk száma diff --git a/rtdata/languages/Nederlands b/rtdata/languages/Nederlands index 028b02955..7a7d4e6f6 100644 --- a/rtdata/languages/Nederlands +++ b/rtdata/languages/Nederlands @@ -376,7 +376,6 @@ HISTORY_MSG_121;RAW CA-correctie - Auto HISTORY_MSG_122;Donkerframe - Autom. selectie HISTORY_MSG_123;Donkerframe - Bestand HISTORY_MSG_124;Witpunt correctie -HISTORY_MSG_125;Hoge lichten behouden HISTORY_MSG_126;Vlakveld - Bestand HISTORY_MSG_127;Vlakveld - Autom. selectie HISTORY_MSG_128;Vlakveld - Verzachten straal @@ -881,7 +880,6 @@ PARTIALPASTE_RAWCACORR_AUTO;Autom. C/A-correctie PARTIALPASTE_RAWCACORR_CAREDBLUE;CA rood & blauw PARTIALPASTE_RAWEXPOS_BLACK;Zwartniveau PARTIALPASTE_RAWEXPOS_LINEAR;Raw witpunt- lineaire corr. factor -PARTIALPASTE_RAWEXPOS_PRESER;Raw witpunt- herstel hoge lichten (EV) PARTIALPASTE_RAWGROUP;Raw-instellingen PARTIALPASTE_RAW_DCBENHANCE;Pas DCB-verbetering toe PARTIALPASTE_RAW_DCBITERATIONS;aantal DCB-herhalingen @@ -1593,7 +1591,6 @@ TP_RAWEXPOS_BLACK_BLUE;Blauw TP_RAWEXPOS_BLACK_GREEN;Groen TP_RAWEXPOS_BLACK_RED;Rood TP_RAWEXPOS_LINEAR;Witpunt Correctie -TP_RAWEXPOS_PRESER;Herstel hoge lichten TP_RAWEXPOS_RGB;Rood, Groen, Blauw TP_RAWEXPOS_TWOGREEN;Koppel Groen 1 en 2 TP_RAW_1PASSMEDIUM;1 keer (Gemiddeld) diff --git a/rtdata/languages/Norsk BM b/rtdata/languages/Norsk BM index 799019625..f9a53a15e 100644 --- a/rtdata/languages/Norsk BM +++ b/rtdata/languages/Norsk BM @@ -626,7 +626,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur !HISTORY_MSG_122;Dark-Frame - Auto-selection !HISTORY_MSG_123;Dark-Frame - File !HISTORY_MSG_124;White point correction -!HISTORY_MSG_125;Highlight preservation !HISTORY_MSG_126;Flat-Field - File !HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_128;Flat-Field - Blur radius @@ -1203,7 +1202,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur !PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue !PARTIALPASTE_RAWEXPOS_BLACK;Black levels !PARTIALPASTE_RAWEXPOS_LINEAR;White point correction -!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation !PARTIALPASTE_RAWGROUP;Raw Settings !PARTIALPASTE_RAW_BORDER;Raw border !PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement @@ -1895,7 +1893,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_RAWEXPOS_BLACK_GREEN;Green !TP_RAWEXPOS_BLACK_RED;Red !TP_RAWEXPOS_LINEAR;White-point correction -!TP_RAWEXPOS_PRESER;Highlight preservation !TP_RAWEXPOS_RGB;Red, Green, Blue !TP_RAWEXPOS_TWOGREEN;Link greens !TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) diff --git a/rtdata/languages/Polish b/rtdata/languages/Polish index e5a55241a..68693adce 100644 --- a/rtdata/languages/Polish +++ b/rtdata/languages/Polish @@ -336,7 +336,6 @@ HISTORY_MSG_121;Autokorekcja aberracji chromatycznej HISTORY_MSG_122;Czarna klatka - Auto-wybór HISTORY_MSG_123;Czarna klatka - Wybór HISTORY_MSG_124;Korekcja punktu bieli -HISTORY_MSG_125;Zachowanie prześwietleń HISTORY_MSG_126;Puste pole - Wybór HISTORY_MSG_127;Puste pole - Auto-wybór HISTORY_MSG_128;Puste pole - Promień rozmycia @@ -649,7 +648,6 @@ PARTIALPASTE_PREPROCESS_LINEDENOISE;Redukcja szumów liniowych PARTIALPASTE_RAWCACORR_AUTO;Autokorekcja aberracji chr. PARTIALPASTE_RAWEXPOS_BLACK;Poziomy czerni PARTIALPASTE_RAWEXPOS_LINEAR;Korekcja punktu bieli -PARTIALPASTE_RAWEXPOS_PRESER;Zachowanie prześwietleń PARTIALPASTE_RAWGROUP;Ustawienia raw PARTIALPASTE_RAW_DCBENHANCE;Zastosuj poprawę DCB PARTIALPASTE_RAW_DCBITERATIONS;Liczba powtórzeń DCB @@ -1252,7 +1250,6 @@ TP_RAWEXPOS_BLACK_BLUE;Niebieski TP_RAWEXPOS_BLACK_GREEN;Zielony TP_RAWEXPOS_BLACK_RED;Czerwony TP_RAWEXPOS_LINEAR;Liniowy współczynnik korekcji -TP_RAWEXPOS_PRESER;Zachowanie prześwietleń TP_RAWEXPOS_RGB;Czerwony, Zielony, Niebieski TP_RAWEXPOS_TWOGREEN;Połącz obie zielenie TP_RAW_DCBENHANCE;Zastosuj poprawę DCB diff --git a/rtdata/languages/Polish (Latin Characters) b/rtdata/languages/Polish (Latin Characters) index 39f1c2b89..f15870f2b 100644 --- a/rtdata/languages/Polish (Latin Characters) +++ b/rtdata/languages/Polish (Latin Characters) @@ -336,7 +336,6 @@ HISTORY_MSG_121;Autokorekcja aberracji chromatycznej HISTORY_MSG_122;Czarna klatka - Auto-wybor HISTORY_MSG_123;Czarna klatka - Wybor HISTORY_MSG_124;Korekcja punktu bieli -HISTORY_MSG_125;Zachowanie przeswietlen HISTORY_MSG_126;Puste pole - Wybor HISTORY_MSG_127;Puste pole - Auto-wybor HISTORY_MSG_128;Puste pole - Promien rozmycia @@ -649,7 +648,6 @@ PARTIALPASTE_PREPROCESS_LINEDENOISE;Redukcja szumow liniowych PARTIALPASTE_RAWCACORR_AUTO;Autokorekcja aberracji chr. PARTIALPASTE_RAWEXPOS_BLACK;Poziomy czerni PARTIALPASTE_RAWEXPOS_LINEAR;Korekcja punktu bieli -PARTIALPASTE_RAWEXPOS_PRESER;Zachowanie przeswietlen PARTIALPASTE_RAWGROUP;Ustawienia raw PARTIALPASTE_RAW_DCBENHANCE;Zastosuj poprawe DCB PARTIALPASTE_RAW_DCBITERATIONS;Liczba powtorzen DCB @@ -1252,7 +1250,6 @@ TP_RAWEXPOS_BLACK_BLUE;Niebieski TP_RAWEXPOS_BLACK_GREEN;Zielony TP_RAWEXPOS_BLACK_RED;Czerwony TP_RAWEXPOS_LINEAR;Liniowy wspolczynnik korekcji -TP_RAWEXPOS_PRESER;Zachowanie przeswietlen TP_RAWEXPOS_RGB;Czerwony, Zielony, Niebieski TP_RAWEXPOS_TWOGREEN;Polacz obie zielenie TP_RAW_DCBENHANCE;Zastosuj poprawe DCB diff --git a/rtdata/languages/Portugues (Brasil) b/rtdata/languages/Portugues (Brasil) index 249214f7a..c3c4f43e3 100644 --- a/rtdata/languages/Portugues (Brasil) +++ b/rtdata/languages/Portugues (Brasil) @@ -370,7 +370,6 @@ HISTORY_MSG_121;Raw CA Correção - Automática HISTORY_MSG_122;Quadro Escuro - Seleção Automática HISTORY_MSG_123;Quadro Escuro - Arquivo HISTORY_MSG_124;Correção de ponto branco -HISTORY_MSG_125;Preservação da nitidez HISTORY_MSG_126;Flat-Field - Arquivo HISTORY_MSG_127;Flat-Field - Seleção automática HISTORY_MSG_128;Flat-Field - Raio de desfoque @@ -982,7 +981,6 @@ PARTIALPASTE_RAWCACORR_AUTO;Auto correção CA PARTIALPASTE_RAWCACORR_CAREDBLUE;vermelho & azul CA PARTIALPASTE_RAWEXPOS_BLACK;Níveis de preto PARTIALPASTE_RAWEXPOS_LINEAR;Correção de ponto branco -PARTIALPASTE_RAWEXPOS_PRESER;preservação do realce PARTIALPASTE_RAWGROUP;Configurações Raw PARTIALPASTE_RAW_BORDER;Borda raw PARTIALPASTE_RAW_DCBENHANCE;Aprimoramento DCB @@ -1758,7 +1756,6 @@ TP_RAWEXPOS_BLACK_BLUE;Azul TP_RAWEXPOS_BLACK_GREEN;Verde TP_RAWEXPOS_BLACK_RED;Vermelho TP_RAWEXPOS_LINEAR;Correção de ponto branco -TP_RAWEXPOS_PRESER;Preservação do realce TP_RAWEXPOS_RGB;Vermelho, Verde, Azul TP_RAWEXPOS_TWOGREEN;Ligações verdes TP_RAW_1PASSMEDIUM;1-Passar (Medio) diff --git a/rtdata/languages/Russian b/rtdata/languages/Russian index 12802db23..f36bbe194 100644 --- a/rtdata/languages/Russian +++ b/rtdata/languages/Russian @@ -368,7 +368,6 @@ HISTORY_MSG_121;(raw) Авто ХА HISTORY_MSG_122;Авто темновой кадр HISTORY_MSG_123;Файл темнового кадра HISTORY_MSG_124;Коррекция баланса белого -HISTORY_MSG_125;Сохранение пересветов HISTORY_MSG_126;Файл плоского поля HISTORY_MSG_127;Автовыбор плоского поля HISTORY_MSG_128;Радиус размытия плоского поля @@ -704,7 +703,6 @@ PARTIALPASTE_PREPROCESS_LINEDENOISE;Фильтр полосообразного PARTIALPASTE_RAWCACORR_AUTO;Автоматическая коррекция ХА PARTIALPASTE_RAWEXPOS_BLACK;Уровень черного PARTIALPASTE_RAWEXPOS_LINEAR;Коррекция точки белого -PARTIALPASTE_RAWEXPOS_PRESER;Сохранение пересветов PARTIALPASTE_RAWGROUP;Настройки Raw PARTIALPASTE_RAW_DCBENHANCE;Применить расширенный DCB PARTIALPASTE_RAW_DCBITERATIONS;Количество проходов DCB @@ -1322,7 +1320,6 @@ TP_RAWEXPOS_BLACK_BLUE;Синий TP_RAWEXPOS_BLACK_GREEN;Зелёный TP_RAWEXPOS_BLACK_RED;Красный TP_RAWEXPOS_LINEAR;Коррекция точки белого -TP_RAWEXPOS_PRESER;Сохранение пересветов TP_RAWEXPOS_RGB;Красный, Зелёный, Синий TP_RAWEXPOS_TWOGREEN;Два зеленых совместно TP_RAW_AHD;AHD diff --git a/rtdata/languages/Serbian (Cyrilic Characters) b/rtdata/languages/Serbian (Cyrilic Characters) index a337eb3a3..7bbebe45d 100644 --- a/rtdata/languages/Serbian (Cyrilic Characters) +++ b/rtdata/languages/Serbian (Cyrilic Characters) @@ -312,7 +312,6 @@ HISTORY_MSG_121;Сам исправи аберације HISTORY_MSG_122;Сам примени тамни кадар HISTORY_MSG_123;Датотека за тамни кадар HISTORY_MSG_124;Линеарна исправка експ. -HISTORY_MSG_125;Поправка експ. уз очување светлог HISTORY_MSG_126;Датотека са равним пољем HISTORY_MSG_127;Сам изабери равно поље HISTORY_MSG_128;Полупречник равног поља @@ -570,7 +569,6 @@ PARTIALPASTE_PREPROCESS_LINEDENOISE;Линијски филтер шума PARTIALPASTE_RAWCACORR_AUTO;Ауто хроматске аберације PARTIALPASTE_RAWEXPOS_BLACK;Ниво црне PARTIALPASTE_RAWEXPOS_LINEAR;Линеарни фактор исправке RAW беле тачке -PARTIALPASTE_RAWEXPOS_PRESER;Raw тачка беле уз очување светлих делова PARTIALPASTE_RAWGROUP;Raw подешавања PARTIALPASTE_RAW_DCBENHANCE;Примени корак ДЦБ побољшања PARTIALPASTE_RAW_DCBITERATIONS;Број ДЦБ понављања @@ -1092,7 +1090,6 @@ TP_RAWCACORR_CABLUE;Плава TP_RAWCACORR_CARED;Црвена TP_RAWEXPOS_BLACKS;Ниво црне TP_RAWEXPOS_LINEAR;Линеарни фактор корекције -TP_RAWEXPOS_PRESER;Очување светлих делова TP_RAWEXPOS_TWOGREEN;Обе зелене TP_RAW_DCBENHANCE;Примени ДЦБ побољшање TP_RAW_DCBITERATIONS;Број ДЦБ пролаза diff --git a/rtdata/languages/Serbian (Latin Characters) b/rtdata/languages/Serbian (Latin Characters) index 4a7733ae1..597402cea 100644 --- a/rtdata/languages/Serbian (Latin Characters) +++ b/rtdata/languages/Serbian (Latin Characters) @@ -312,7 +312,6 @@ HISTORY_MSG_121;Sam ispravi aberacije HISTORY_MSG_122;Sam primeni tamni kadar HISTORY_MSG_123;Datoteka za tamni kadar HISTORY_MSG_124;Linearna ispravka eksp. -HISTORY_MSG_125;Popravka eksp. uz očuvanje svetlog HISTORY_MSG_126;Datoteka sa ravnim poljem HISTORY_MSG_127;Sam izaberi ravno polje HISTORY_MSG_128;Poluprečnik ravnog polja @@ -570,7 +569,6 @@ PARTIALPASTE_PREPROCESS_LINEDENOISE;Linijski filter šuma PARTIALPASTE_RAWCACORR_AUTO;Auto hromatske aberacije PARTIALPASTE_RAWEXPOS_BLACK;Nivo crne PARTIALPASTE_RAWEXPOS_LINEAR;Linearni faktor ispravke RAW bele tačke -PARTIALPASTE_RAWEXPOS_PRESER;Raw tačka bele uz očuvanje svetlih delova PARTIALPASTE_RAWGROUP;Raw podešavanja PARTIALPASTE_RAW_DCBENHANCE;Primeni korak DCB poboljšanja PARTIALPASTE_RAW_DCBITERATIONS;Broj DCB ponavljanja @@ -1092,7 +1090,6 @@ TP_RAWCACORR_CABLUE;Plava TP_RAWCACORR_CARED;Crvena TP_RAWEXPOS_BLACKS;Nivo crne TP_RAWEXPOS_LINEAR;Linearni faktor korekcije -TP_RAWEXPOS_PRESER;Očuvanje svetlih delova TP_RAWEXPOS_TWOGREEN;Obe zelene TP_RAW_DCBENHANCE;Primeni DCB poboljšanje TP_RAW_DCBITERATIONS;Broj DCB prolaza diff --git a/rtdata/languages/Slovak b/rtdata/languages/Slovak index 1948d6554..8d2e16790 100644 --- a/rtdata/languages/Slovak +++ b/rtdata/languages/Slovak @@ -688,7 +688,6 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !HISTORY_MSG_122;Dark-Frame - Auto-selection !HISTORY_MSG_123;Dark-Frame - File !HISTORY_MSG_124;White point correction -!HISTORY_MSG_125;Highlight preservation !HISTORY_MSG_126;Flat-Field - File !HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_128;Flat-Field - Blur radius @@ -1256,7 +1255,6 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue !PARTIALPASTE_RAWEXPOS_BLACK;Black levels !PARTIALPASTE_RAWEXPOS_LINEAR;White point correction -!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation !PARTIALPASTE_RAWGROUP;Raw Settings !PARTIALPASTE_RAW_BORDER;Raw border !PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement @@ -1910,7 +1908,6 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !TP_RAWEXPOS_BLACK_GREEN;Green !TP_RAWEXPOS_BLACK_RED;Red !TP_RAWEXPOS_LINEAR;White-point correction -!TP_RAWEXPOS_PRESER;Highlight preservation !TP_RAWEXPOS_RGB;Red, Green, Blue !TP_RAWEXPOS_TWOGREEN;Link greens !TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) diff --git a/rtdata/languages/Suomi b/rtdata/languages/Suomi index 7adcd2ae3..13c389d39 100644 --- a/rtdata/languages/Suomi +++ b/rtdata/languages/Suomi @@ -628,7 +628,6 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !HISTORY_MSG_122;Dark-Frame - Auto-selection !HISTORY_MSG_123;Dark-Frame - File !HISTORY_MSG_124;White point correction -!HISTORY_MSG_125;Highlight preservation !HISTORY_MSG_126;Flat-Field - File !HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_128;Flat-Field - Blur radius @@ -1205,7 +1204,6 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue !PARTIALPASTE_RAWEXPOS_BLACK;Black levels !PARTIALPASTE_RAWEXPOS_LINEAR;White point correction -!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation !PARTIALPASTE_RAWGROUP;Raw Settings !PARTIALPASTE_RAW_BORDER;Raw border !PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement @@ -1896,7 +1894,6 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !TP_RAWEXPOS_BLACK_GREEN;Green !TP_RAWEXPOS_BLACK_RED;Red !TP_RAWEXPOS_LINEAR;White-point correction -!TP_RAWEXPOS_PRESER;Highlight preservation !TP_RAWEXPOS_RGB;Red, Green, Blue !TP_RAWEXPOS_TWOGREEN;Link greens !TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) diff --git a/rtdata/languages/Swedish b/rtdata/languages/Swedish index dac05a20b..d16e7b95d 100644 --- a/rtdata/languages/Swedish +++ b/rtdata/languages/Swedish @@ -346,7 +346,6 @@ HISTORY_MSG_121;Automat. CA-reducering HISTORY_MSG_122;Automat. svartbildsval HISTORY_MSG_123;Svartbildsfil HISTORY_MSG_124;Vitpunktskorrigering -HISTORY_MSG_125;Högdagerbevarande HISTORY_MSG_126;Plattfältsfil HISTORY_MSG_127;Automatiskt val av plattfält HISTORY_MSG_128;Oskärperadie för plattfält @@ -788,7 +787,6 @@ PARTIALPASTE_PRSHARPENING;Skärpning efter storleksändring PARTIALPASTE_RAWCACORR_AUTO;Reducera kromatiska abberationer automatiskt PARTIALPASTE_RAWEXPOS_BLACK;Svärta PARTIALPASTE_RAWEXPOS_LINEAR;Vitpunktskorrigering -PARTIALPASTE_RAWEXPOS_PRESER;Korrigering av högdagrar PARTIALPASTE_RAWGROUP;Råbildsinställningar PARTIALPASTE_RAW_DCBENHANCE;DCB-förbättringssteg PARTIALPASTE_RAW_DCBITERATIONS;Antal DCB-iterationer @@ -1458,7 +1456,6 @@ TP_RAWEXPOS_BLACK_BLUE;Blå TP_RAWEXPOS_BLACK_GREEN;Grön TP_RAWEXPOS_BLACK_RED;Röd TP_RAWEXPOS_LINEAR;Vitpunktskorrigering -TP_RAWEXPOS_PRESER;Bevara högdagrar TP_RAWEXPOS_RGB;Röd, grön, blå TP_RAWEXPOS_TWOGREEN;Två gröna tillsammans TP_RAW_DCBENHANCE;DCB-förbättringssteg diff --git a/rtdata/languages/Turkish b/rtdata/languages/Turkish index 5af14f592..59b2e8478 100644 --- a/rtdata/languages/Turkish +++ b/rtdata/languages/Turkish @@ -627,7 +627,6 @@ TP_WBALANCE_TEMPERATURE;Isı !HISTORY_MSG_122;Dark-Frame - Auto-selection !HISTORY_MSG_123;Dark-Frame - File !HISTORY_MSG_124;White point correction -!HISTORY_MSG_125;Highlight preservation !HISTORY_MSG_126;Flat-Field - File !HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_128;Flat-Field - Blur radius @@ -1204,7 +1203,6 @@ TP_WBALANCE_TEMPERATURE;Isı !PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue !PARTIALPASTE_RAWEXPOS_BLACK;Black levels !PARTIALPASTE_RAWEXPOS_LINEAR;White point correction -!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation !PARTIALPASTE_RAWGROUP;Raw Settings !PARTIALPASTE_RAW_BORDER;Raw border !PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement @@ -1895,7 +1893,6 @@ TP_WBALANCE_TEMPERATURE;Isı !TP_RAWEXPOS_BLACK_GREEN;Green !TP_RAWEXPOS_BLACK_RED;Red !TP_RAWEXPOS_LINEAR;White-point correction -!TP_RAWEXPOS_PRESER;Highlight preservation !TP_RAWEXPOS_RGB;Red, Green, Blue !TP_RAWEXPOS_TWOGREEN;Link greens !TP_RAW_1PASSMEDIUM;1-pass (Markesteijn)