diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml
index 992bf4db3..d075594fd 100644
--- a/.github/workflows/macos.yml
+++ b/.github/workflows/macos.yml
@@ -13,7 +13,7 @@ on:
jobs:
build:
- runs-on: macos-11
+ runs-on: macos-12
steps:
- uses: actions/checkout@v3
- name: Install dependencies
diff --git a/AUTHORS.txt b/AUTHORS.txt
index 374a7935b..3afd09dc2 100644
--- a/AUTHORS.txt
+++ b/AUTHORS.txt
@@ -20,6 +20,7 @@ Development contributors, in last name alphabetical order:
Rüdiger Franke
Jean-Christophe Frisch
Ilias Giarimis
+ Scott Gilbertson
Alberto Griggio
Steve Herrell
Philippe Hupé
diff --git a/CMakeLists.txt b/CMakeLists.txt
index abb86a108..7b7c797d9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -538,6 +538,10 @@ pkg_check_modules(LCMS REQUIRED lcms2>=2.6)
pkg_check_modules(EXPAT REQUIRED expat>=2.1)
pkg_check_modules(FFTW3F REQUIRED fftw3f)
+# By default little-cms2 uses 'register' keyword which is deprecated and removed in c++17
+# This definition forces not to use it
+add_definitions("-DCMS_NO_REGISTER_KEYWORD")
+
#Set the appropriate FFTW flags on macOS
if(APPLE AND OPTION_OMP)
set(EXTRA_LIB "-L${LOCAL_PREFIX}/lib -lfftw3f_omp -lfftw3f -lm")
diff --git a/rtdata/languages/default b/rtdata/languages/default
index 5bdcc7b0f..8c4aa3f74 100644
--- a/rtdata/languages/default
+++ b/rtdata/languages/default
@@ -1450,6 +1450,7 @@ HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius
HISTORY_MSG_LOCALLAB_TE_PIVOT;Local - Equalizer pivot
HISTORY_MSG_LOCAL_DEHAZE_BLACK;Local - Dehaze - black
HISTORY_MSG_LOCAL_GAMUTMUNSEL;Local - SC - Avoid Color Shift
+HISTORY_MSG_LOCAL_TMO_SATUR;Local Exp Fattal Saturation
HISTORY_MSG_METADATA_MODE;Metadata copy mode
HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold
HISTORY_MSG_PDSHARPEN_AUTO_CONTRAST;CS - Auto threshold
@@ -2041,7 +2042,7 @@ PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles
PREFERENCES_WBA;White Balance
PREFERENCES_WBACORR;White Balance - Automatic temperature correlation
PREFERENCES_WBACORR_TOOLTIP;These settings allow, depending on the images (type of raw file, colorimetry, etc.), an adaptation of the " Temperature correlation " algorithm in order to obtain the best overall results. There is no absolute rule, linking these parameters to the results obtained.\n\nThe settings are of 3 types: \n* those accessible to the user from the GUI.\n* those accessible only in reading from each pp3 file : Itcwb_minsize=20, Itcwb_delta=4 Itcwb_rgreen=1 Itcwb_nopurple=false (See Rawpedia)\n* those accessible to the user in 'options' (see Rawpedia)\n You can use "Awb temperature bias" and "Green refinement" to adjust the results. Each movement of these commands brings a new calculation of temperature, tint and correlation.\n\nPlease note that the 3 indicators 'Correlation factor', 'Patch chroma' and ΔE are given for information only. It is not because one of these indicators is better that the result will necessarily be better.
-PREFERENCES_WBAENA;Show White Balance auto Temperature correlation Settings
+PREFERENCES_WBAENA;Show White Balance Auto temperature correlation settings
PREFERENCES_WBAENACUSTOM;Use Custom temperature & tint
PREFERENCES_WBAFORC;Forces Extra algoritm
PREFERENCES_WBAGREENDELTA;Delta temperature in green iterate loop (if Force Extra enabled)
@@ -2102,10 +2103,12 @@ QINFO_PIXELSHIFT;Pixel Shift / %2 frame(s)
QUEUE_AUTOSTART;Auto-start
QUEUE_AUTOSTART_TOOLTIP;Start processing automatically when a new job arrives.
QUEUE_DESTFILENAME;Path and file name
+QUEUE_DESTPREVIEW_TITLE;Select a thumbnail to preview its destination path here
+QUEUE_DESTPREVIEW_TOOLTIP;Destination path for the first selected image appears here
QUEUE_FORMAT_TITLE;File Format
QUEUE_LOCATION_FOLDER;Save to folder
QUEUE_LOCATION_TEMPLATE;Use template
-QUEUE_LOCATION_TEMPLATE_TOOLTIP;Specify the output location based on the source photo's location, rank, trash status or position in the queue.\n\nUsing the following pathname as an example:\n/home/tom/photos/2010-10-31/photo1.raw\nthe meaning of the formatting strings follows:\n%d4 = home\n%d3 = tom\n%d2 = photos\n%d1 = 2010-10-31\n%f = photo1\n%p1 = /home/tom/photos/2010-10-31/\n%p2 = /home/tom/photos/\n%p3 = /home/tom/\n%p4 = /home/\n\n%r will be replaced by the photo's rank. If the photo is unranked, '0' is used. If the photo is in the trash, 'x' is used.\n\n%s1, ..., %s9 will be replaced by the photo's initial position in the queue at the time the queue is started. The number specifies the padding, e.g. %s3 results in '001'.\n\nIf you want to save the output image alongside the source image, write:\n%p1/%f\n\nIf you want to save the output image in a folder named 'converted' located in the source photo's folder, write:\n%p1/converted/%f\n\nIf you want to save the output image in\n'/home/tom/photos/converted/2010-10-31', write:\n%p2/converted/%d1/%f
+QUEUE_LOCATION_TEMPLATE_TOOLTIP;Specify the output location based on the source photo's location, rank, trash status or position in the queue.\n\n%dN, %d-N, %pN, %p-N, %PN and %P-N (N = 1..9) will be replaced by elements of the image file's directory path (not including the file name):\n%dN = Nth directory from the end of the path\n%d-N = Nth directory from the start of the path\n%pN = all directories up to the Nth from the end of the path\n%p-N = the first N directories in the path\n%PN = the last N directories in the path\n%P-N = all directories from the Nth to the end of the path\n%f = base filename (no extension)\nFor Windows paths, %d-1 is the drive letter and colon, and %d-2 is the base directory on that drive.\n\nUsing the following pathname as an example:\n/home/tom/photos/2010-10-31/photo1.raw\nthe meaning of the formatting strings follows:\n%d4 = %d-1 = home\n%d3 = %d-2 = tom\n%d2 = %d-3 = photos\n%d1 = %d-4 = 2010-10-31\n%p1 = %p-4 = /home/tom/photos/2010-10-31/\n%p2 = %p-3 = /home/tom/photos/\n%p3 = %p-2 = /home/tom/\n%p4 = %p-1 = /home/\n%P1 = %P-4 = 2010-10-31/\n%P2 = %P-3 = photos/2010-10-31/\n%P3 = %P-2 = tom/photos/2010-10-31/\n%P4 = %P-1 = /home/tom/photos/2010-10-31/\n%f = photo1\n\n%r will be replaced by the photo's rank. If the photo is unranked, '0' is used. If the photo is in the trash, 'x' is used.\n\n%s1, ..., %s9 will be replaced by the photo's initial position in the queue at the time the queue is started. The number specifies the padding, e.g. %s3 results in '001'.\n\nIf you want to save the output image alongside the source image, write:\n%p1/%f\n\nIf you want to save the output image in a folder named 'converted' located in the source photo's folder, write:\n%p1/converted/%f\n\nIf you want to save the output image in\n'/home/tom/photos/converted/2010-10-31', write:\n%p-3/converted/%P-4/%f
QUEUE_LOCATION_TITLE;Output Location
QUEUE_STARTSTOP_TOOLTIP;Start or stop processing the images in the queue.\n\nShortcut: Ctrl+s
SAMPLEFORMAT_0;Unknown data format
@@ -2963,6 +2966,7 @@ TP_LOCALLAB_EXP_TOOLNAME;Dynamic Range & Exposure
TP_LOCALLAB_FATAMOUNT;Amount
TP_LOCALLAB_FATANCHOR;Anchor
TP_LOCALLAB_FATDETAIL;Detail
+TP_LOCALLAB_FATSAT;Saturation control
TP_LOCALLAB_FATFRA;Dynamic Range Compression ƒ
TP_LOCALLAB_FATFRAME_TOOLTIP;PDE Fattal – uses the Fattal Tone-mapping algorithm.
TP_LOCALLAB_FATLEVEL;Sigma
@@ -4173,7 +4177,7 @@ TP_WBALANCE_ITCWB_CUSTOM;Use Custom temperature & tint
TP_WBALANCE_ITCWB_DELTA;Delta temperature in green loop
TP_WBALANCE_ITCWB_FGREEN;Find green student
TP_WBALANCE_ITCWB_FORCED;Close to full CIE diagram
-TP_WBALANCE_ITCWB_FRA;Auto Temperature correlation Settings
+TP_WBALANCE_ITCWB_FRA;Auto temperature correlation settings
TP_WBALANCE_ITCWB_FRA_TOOLTIP;These settings allow, depending on the images (type of raw, colorimetry, etc.), an adaptation of the 'Temperature correlation' algorithm. There is no absolute rule linking these parameters to the results obtained.
TP_WBALANCE_ITCWB_MINSIZEPATCH;Patch minimum size
TP_WBALANCE_ITCWB_NOPURPLE;Filter on purple color
diff --git a/rtengine/CMakeLists.txt b/rtengine/CMakeLists.txt
index 5a9b2d953..6f329f7be 100644
--- a/rtengine/CMakeLists.txt
+++ b/rtengine/CMakeLists.txt
@@ -120,6 +120,7 @@ set(RTENGINESOURCEFILES
imagedimensions.cc
imagefloat.cc
imageio.cc
+ imagesource.cc
improccoordinator.cc
improcfun.cc
impulse_denoise.cc
diff --git a/rtengine/camconst.json b/rtengine/camconst.json
index 998ddff19..59a2110b2 100644
--- a/rtengine/camconst.json
+++ b/rtengine/camconst.json
@@ -389,13 +389,18 @@ Camera constants:
"ranges": {
// black levels are read from raw masked pixels
// white levels are same for all colors all ISOs, but safety margin vary on ISO
+ // actually not, 160 & 320 & 640 seem to have different white levels per color
"white": [
{ "iso": 50, "levels": 16350 }, // typical for all ISOs: 16383, stdev 2.25
{ "iso": 100, "levels": 16350 }, // stdev 2.25
- { "iso": [ 125, 160, 200, 250 ], "levels": 16340 }, // stdev 2.5
- { "iso": [ 320, 400, 500 ], "levels": 16330 }, // stdev 2.95
- { "iso": [ 640, 800, 1000 ], "levels": 16320 }, // stdev x, 4.0 , x
- { "iso": [ 1250, 1600, 2000 ], "levels": 16300 }, // stdev x, 6.0 , x
+ { "iso": [ 125, 200, 250 ], "levels": 16340 }, // stdev 2.5
+ { "iso": 160, "levels": [ 16340, 14450, 15600 ] }, // based on CarVac's testing
+ { "iso": [ 400, 500 ], "levels": 16330 }, // stdev 2.95
+ { "iso": 320, "levels": [ 16330, 16000, 16330 ] }, // based on CarVac's testing
+ { "iso": [ 800, 1000 ], "levels": 16320 }, // stdev x, 4.0 , x
+ { "iso": 640, "levels": [ 16320, 15800, 16320 ] }, // based on CarVac's testing
+ { "iso": [ 1600, 2000 ], "levels": 16300 }, // stdev x, 6.0 , x
+ { "iso": 1250, "levels": [ 16300, 16050, 16300 ] }, // based on CarVac's testing
{ "iso": [ 2500, 3200, 4000 ], "levels": 16250 }, // STDEV x, 9.8 , x
{ "iso": [ 5000, 6400, 8000 ], "levels": 16150 }, // stdev x, 17, x
{ "iso": [ 10000, 12800, 16000 ], "levels": 16100 }, // stdev x, 34 , x
diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc
index 6abfc7aba..85661edd3 100644
--- a/rtengine/dcrop.cc
+++ b/rtengine/dcrop.cc
@@ -781,7 +781,7 @@ void Crop::update(int todo)
if (need_fattal) {
parent->ipf.dehaze(f, params.dehaze);
- parent->ipf.ToneMapFattal02(f, params.fattal, 3, 0, nullptr, 0, 0, 0);
+ parent->ipf.ToneMapFattal02(f, params.fattal, 3, 0, nullptr, 0, 0, 0, false);
}
// crop back to the size expected by the rest of the pipeline
diff --git a/rtengine/dfmanager.cc b/rtengine/dfmanager.cc
index 52de10339..5ad664b52 100644
--- a/rtengine/dfmanager.cc
+++ b/rtengine/dfmanager.cc
@@ -317,7 +317,6 @@ private:
typedef std::map > bpList_t;
dfList_t dfList;
bpList_t bpList;
- bool initialized;
Glib::ustring currentPath;
dfInfo* addFileInfo(const Glib::ustring &filename, bool pool = true);
dfInfo* find(const std::string &mak, const std::string &mod, int isospeed, double shut, time_t t);
diff --git a/rtengine/iccstore.cc b/rtengine/iccstore.cc
index 8ba5fb4af..af1b94fbe 100644
--- a/rtengine/iccstore.cc
+++ b/rtengine/iccstore.cc
@@ -18,6 +18,7 @@
*/
#include
#include