diff --git a/CMakeLists.txt b/CMakeLists.txt
index 626da7019..d3e2f2c4b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,5 +1,8 @@
if(WIN32)
cmake_minimum_required(VERSION 2.8.4)
+elseif(APPLE)
+ cmake_minimum_required(VERSION 3.3)
+ CMAKE_POLICY(SET CMP0025 NEW)
else()
cmake_minimum_required(VERSION 2.6)
endif()
@@ -54,7 +57,8 @@ set(CACHE_NAME_SUFFIX "" CACHE STRING "RawTherapee's cache folder suffix")
set(PROC_TARGET_NUMBER 0 CACHE STRING "Selected target processor from the list above (taken from ProcessorTargets.cmake)")
# Set special compilation flags for rtengine which get added to CMAKE_CXX_FLAGS:
-set(RTENGINE_CXX_FLAGS "" CACHE STRING "Special compilation flags for RTEngine")
+# Some Linux distros build with -O2 instead of -O3. We explicitly enable auto vectorization by using -ftree-vectorize
+set(RTENGINE_CXX_FLAGS "-ftree-vectorize" CACHE STRING "Special compilation flags for RTEngine")
# Loads the ProcessorTargets list:
include(ProcessorTargets.cmake)
diff --git a/licenses/osx_libiomp5_LICENSE.txt b/licenses/osx_libiomp5_LICENSE.txt
new file mode 100644
index 000000000..18fca0d43
--- /dev/null
+++ b/licenses/osx_libiomp5_LICENSE.txt
@@ -0,0 +1,27 @@
+Copyright (c) 2013-2016, Intel Corporation
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of Intel Corporation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/rtdata/languages/Catala b/rtdata/languages/Catala
index b58aa7004..eda2ad2ad 100644
--- a/rtdata/languages/Catala
+++ b/rtdata/languages/Catala
@@ -1316,6 +1316,9 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!HISTORY_MSG_485;Lens Correction
!HISTORY_MSG_486;Lens Correction - Camera
!HISTORY_MSG_487;Lens Correction - Lens
+!HISTORY_MSG_488;HDR Tone Mapping
+!HISTORY_MSG_489;HDR TM - Threshold
+!HISTORY_MSG_490;HDR TM - Amount
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -1386,6 +1389,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps
!PARTIALPASTE_RAW_PIXELSHIFT;Pixel Shift
!PARTIALPASTE_RETINEX;Retinex
+!PARTIALPASTE_TM_FATTAL;HDR Tone mapping
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_AUTLISLOW;Low
!PREFERENCES_AUTLISMAX;Max - Average of all tiles
@@ -1999,6 +2003,9 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!TP_RGBCURVES_LUMAMODE_TOOLTIP;Luminosity mode allows to vary the contribution of R, G and B channels to the luminosity of the image, without altering image color.
!TP_SAVEDIALOG_OK_TIP;Shortcut: Ctrl-Enter
!TP_SHADOWSHLIGHTS_SHARPMASK;Sharp mask
+!TP_TM_FATTAL_AMOUNT;Amount
+!TP_TM_FATTAL_LABEL;HDR Tone Mapping
+!TP_TM_FATTAL_THRESHOLD;Threshold
!TP_WAVELET_1;Level 1
!TP_WAVELET_2;Level 2
!TP_WAVELET_3;Level 3
diff --git a/rtdata/languages/Chinese (Simplified) b/rtdata/languages/Chinese (Simplified)
index 655125be1..51aed581d 100644
--- a/rtdata/languages/Chinese (Simplified)
+++ b/rtdata/languages/Chinese (Simplified)
@@ -1424,6 +1424,9 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!HISTORY_MSG_485;Lens Correction
!HISTORY_MSG_486;Lens Correction - Camera
!HISTORY_MSG_487;Lens Correction - Lens
+!HISTORY_MSG_488;HDR Tone Mapping
+!HISTORY_MSG_489;HDR TM - Threshold
+!HISTORY_MSG_490;HDR TM - Amount
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
!IPTCPANEL_COPYRIGHT;Copyright notice
@@ -1473,6 +1476,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!MONITOR_PROFILE_SYSTEM;System default
!OPTIONS_DEFIMG_MISSING;The default profile for non-raw photos could not be found or is not set.\n\nPlease check your profiles' directory, it may be missing or damaged.\n\nDefault internal values will be used.
!OPTIONS_DEFRAW_MISSING;The default profile for raw photos could not be found or is not set.\n\nPlease check your profiles' directory, it may be missing or damaged.\n\nDefault internal values will be used.
+!PARTIALPASTE_TM_FATTAL;HDR Tone mapping
!PREFERENCES_AUTOSAVE_TP_OPEN;Automatically save tools collapsed/expanded\nstate before exiting
!PREFERENCES_BEHADDALLHINT;Set all parameters to the Add mode.\nAdjustments of parameters in the batch tool panel will be deltas to the stored values.
!PREFERENCES_BEHSETALLHINT;Set all parameters to the Set mode.\nAdjustments of parameters in the batch tool panel will be absolute, the actual values will be displayed.
@@ -1970,6 +1974,9 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!TP_SHARPENMICRO_LABEL;Microcontrast
!TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5
!TP_SHARPENMICRO_UNIFORMITY;Uniformity
+!TP_TM_FATTAL_AMOUNT;Amount
+!TP_TM_FATTAL_LABEL;HDR Tone Mapping
+!TP_TM_FATTAL_THRESHOLD;Threshold
!TP_VIBRANCE_AVOIDCOLORSHIFT;Avoid color shift
!TP_VIBRANCE_CURVEEDITOR_SKINTONES;HH
!TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL;Skin-tones
diff --git a/rtdata/languages/Chinese (Traditional) b/rtdata/languages/Chinese (Traditional)
index f29361e6a..2476aeb41 100644
--- a/rtdata/languages/Chinese (Traditional)
+++ b/rtdata/languages/Chinese (Traditional)
@@ -976,6 +976,9 @@ TP_WBALANCE_TEMPERATURE;色溫
!HISTORY_MSG_485;Lens Correction
!HISTORY_MSG_486;Lens Correction - Camera
!HISTORY_MSG_487;Lens Correction - Lens
+!HISTORY_MSG_488;HDR Tone Mapping
+!HISTORY_MSG_489;HDR TM - Threshold
+!HISTORY_MSG_490;HDR TM - Amount
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -1115,6 +1118,7 @@ TP_WBALANCE_TEMPERATURE;色溫
!PARTIALPASTE_RGBCURVES;RGB curves
!PARTIALPASTE_SHARPENEDGE;Edges
!PARTIALPASTE_SHARPENMICRO;Microcontrast
+!PARTIALPASTE_TM_FATTAL;HDR Tone mapping
!PARTIALPASTE_VIBRANCE;Vibrance
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_ADD;Add
@@ -1944,6 +1948,9 @@ TP_WBALANCE_TEMPERATURE;色溫
!TP_SHARPENMICRO_LABEL;Microcontrast
!TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5
!TP_SHARPENMICRO_UNIFORMITY;Uniformity
+!TP_TM_FATTAL_AMOUNT;Amount
+!TP_TM_FATTAL_LABEL;HDR Tone Mapping
+!TP_TM_FATTAL_THRESHOLD;Threshold
!TP_VIBRANCE_AVOIDCOLORSHIFT;Avoid color shift
!TP_VIBRANCE_CURVEEDITOR_SKINTONES;HH
!TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL;Skin-tones
diff --git a/rtdata/languages/Czech b/rtdata/languages/Czech
index b8cdab54c..29cf45b3d 100644
--- a/rtdata/languages/Czech
+++ b/rtdata/languages/Czech
@@ -2181,11 +2181,15 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: -
!HISTORY_MSG_485;Lens Correction
!HISTORY_MSG_486;Lens Correction - Camera
!HISTORY_MSG_487;Lens Correction - Lens
+!HISTORY_MSG_488;HDR Tone Mapping
+!HISTORY_MSG_489;HDR TM - Threshold
+!HISTORY_MSG_490;HDR TM - Amount
!LENSPROFILE_CORRECTION_AUTOMATCH;Auto-matched correction parameters
!LENSPROFILE_CORRECTION_LCPFILE;LCP File
!LENSPROFILE_CORRECTION_MANUAL;Manual correction parameters
!LENSPROFILE_LENS_WARNING;Warning: the crop factor used for lens profiling is larger than the crop factor of the camera, the results might be wrong.
!MAIN_TOOLTIP_BACKCOLOR3;Background color of the preview: Middle grey\nShortcut: 9
+!PARTIALPASTE_TM_FATTAL;HDR Tone mapping
!PREFERENCES_AUTOSAVE_TP_OPEN;Automatically save tools collapsed/expanded\nstate before exiting
!PREFERENCES_D50_OLD;5000K
!PREFERENCES_DIRECTORIES;Directories
@@ -2209,3 +2213,6 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: -
!TP_COLORAPP_YB;Yb% (mean luminance)
!TP_COLORAPP_YBSCENE;Yb% (mean luminance)
!TP_COLORAPP_YBSCENE_TOOLTIP;if auto enable, Yb is calculated from the mean value of actual image luminance
+!TP_TM_FATTAL_AMOUNT;Amount
+!TP_TM_FATTAL_LABEL;HDR Tone Mapping
+!TP_TM_FATTAL_THRESHOLD;Threshold
diff --git a/rtdata/languages/Dansk b/rtdata/languages/Dansk
index 868dcc418..0b619b706 100644
--- a/rtdata/languages/Dansk
+++ b/rtdata/languages/Dansk
@@ -972,6 +972,9 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!HISTORY_MSG_485;Lens Correction
!HISTORY_MSG_486;Lens Correction - Camera
!HISTORY_MSG_487;Lens Correction - Lens
+!HISTORY_MSG_488;HDR Tone Mapping
+!HISTORY_MSG_489;HDR TM - Threshold
+!HISTORY_MSG_490;HDR TM - Amount
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -1113,6 +1116,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!PARTIALPASTE_RGBCURVES;RGB curves
!PARTIALPASTE_SHARPENEDGE;Edges
!PARTIALPASTE_SHARPENMICRO;Microcontrast
+!PARTIALPASTE_TM_FATTAL;HDR Tone mapping
!PARTIALPASTE_VIBRANCE;Vibrance
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_ADD;Add
@@ -1943,6 +1947,9 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!TP_SHARPENMICRO_LABEL;Microcontrast
!TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5
!TP_SHARPENMICRO_UNIFORMITY;Uniformity
+!TP_TM_FATTAL_AMOUNT;Amount
+!TP_TM_FATTAL_LABEL;HDR Tone Mapping
+!TP_TM_FATTAL_THRESHOLD;Threshold
!TP_VIBRANCE_AVOIDCOLORSHIFT;Avoid color shift
!TP_VIBRANCE_CURVEEDITOR_SKINTONES;HH
!TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL;Skin-tones
diff --git a/rtdata/languages/Deutsch b/rtdata/languages/Deutsch
index ea41ee0c3..cda1faa42 100644
--- a/rtdata/languages/Deutsch
+++ b/rtdata/languages/Deutsch
@@ -2212,3 +2212,14 @@ ZOOMPANEL_ZOOMFITSCREEN;An Bildschirm anpassen\nTaste: f
ZOOMPANEL_ZOOMIN;Hineinzoomen\nTaste: +
ZOOMPANEL_ZOOMOUT;Herauszoomen\nTaste: -
+!!!!!!!!!!!!!!!!!!!!!!!!!
+! Untranslated keys follow; remove the ! prefix after an entry is translated.
+!!!!!!!!!!!!!!!!!!!!!!!!!
+
+!HISTORY_MSG_488;HDR Tone Mapping
+!HISTORY_MSG_489;HDR TM - Threshold
+!HISTORY_MSG_490;HDR TM - Amount
+!PARTIALPASTE_TM_FATTAL;HDR Tone mapping
+!TP_TM_FATTAL_AMOUNT;Amount
+!TP_TM_FATTAL_LABEL;HDR Tone Mapping
+!TP_TM_FATTAL_THRESHOLD;Threshold
diff --git a/rtdata/languages/English (UK) b/rtdata/languages/English (UK)
index 018ae675a..e4bbcacd8 100644
--- a/rtdata/languages/English (UK)
+++ b/rtdata/languages/English (UK)
@@ -802,6 +802,9 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!HISTORY_MSG_485;Lens Correction
!HISTORY_MSG_486;Lens Correction - Camera
!HISTORY_MSG_487;Lens Correction - Lens
+!HISTORY_MSG_488;HDR Tone Mapping
+!HISTORY_MSG_489;HDR TM - Threshold
+!HISTORY_MSG_490;HDR TM - Amount
!HISTORY_NEWSNAPSHOT;Add
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!HISTORY_SNAPSHOT;Snapshot
@@ -999,6 +1002,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!PARTIALPASTE_SHARPENEDGE;Edges
!PARTIALPASTE_SHARPENING;Sharpening (USM/RL)
!PARTIALPASTE_SHARPENMICRO;Microcontrast
+!PARTIALPASTE_TM_FATTAL;HDR Tone mapping
!PARTIALPASTE_VIBRANCE;Vibrance
!PARTIALPASTE_VIGNETTING;Vignetting correction
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
@@ -1256,7 +1260,6 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!SAVEDLG_FILEFORMAT;File format
!SAVEDLG_FORCEFORMATOPTS;Force saving options
!SAVEDLG_JPEGQUAL;JPEG quality
-!SAVEDLG_PNGCOMPR;PNG compression
!SAVEDLG_PUTTOQUEUE;Put into processing queue
!SAVEDLG_PUTTOQUEUEHEAD;Put to the head of the processing queue
!SAVEDLG_PUTTOQUEUETAIL;Put to the end of the processing queue
@@ -1935,6 +1938,9 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!TP_SHARPENMICRO_LABEL;Microcontrast
!TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5
!TP_SHARPENMICRO_UNIFORMITY;Uniformity
+!TP_TM_FATTAL_AMOUNT;Amount
+!TP_TM_FATTAL_LABEL;HDR Tone Mapping
+!TP_TM_FATTAL_THRESHOLD;Threshold
!TP_VIBRANCE_CURVEEDITOR_SKINTONES;HH
!TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL;Skin-tones
!TP_VIBRANCE_CURVEEDITOR_SKINTONES_RANGE1;Red/Purple
diff --git a/rtdata/languages/English (US) b/rtdata/languages/English (US)
index 00e8e48b7..31093bc2b 100644
--- a/rtdata/languages/English (US)
+++ b/rtdata/languages/English (US)
@@ -720,6 +720,9 @@
!HISTORY_MSG_485;Lens Correction
!HISTORY_MSG_486;Lens Correction - Camera
!HISTORY_MSG_487;Lens Correction - Lens
+!HISTORY_MSG_488;HDR Tone Mapping
+!HISTORY_MSG_489;HDR TM - Threshold
+!HISTORY_MSG_490;HDR TM - Amount
!HISTORY_NEWSNAPSHOT;Add
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!HISTORY_SNAPSHOT;Snapshot
@@ -926,6 +929,7 @@
!PARTIALPASTE_SHARPENEDGE;Edges
!PARTIALPASTE_SHARPENING;Sharpening (USM/RL)
!PARTIALPASTE_SHARPENMICRO;Microcontrast
+!PARTIALPASTE_TM_FATTAL;HDR Tone mapping
!PARTIALPASTE_VIBRANCE;Vibrance
!PARTIALPASTE_VIGNETTING;Vignetting correction
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
@@ -1195,7 +1199,6 @@
!SAVEDLG_FILEFORMAT;File format
!SAVEDLG_FORCEFORMATOPTS;Force saving options
!SAVEDLG_JPEGQUAL;JPEG quality
-!SAVEDLG_PNGCOMPR;PNG compression
!SAVEDLG_PUTTOQUEUE;Put into processing queue
!SAVEDLG_PUTTOQUEUEHEAD;Put to the head of the processing queue
!SAVEDLG_PUTTOQUEUETAIL;Put to the end of the processing queue
@@ -1926,6 +1929,9 @@
!TP_SHARPENMICRO_LABEL;Microcontrast
!TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5
!TP_SHARPENMICRO_UNIFORMITY;Uniformity
+!TP_TM_FATTAL_AMOUNT;Amount
+!TP_TM_FATTAL_LABEL;HDR Tone Mapping
+!TP_TM_FATTAL_THRESHOLD;Threshold
!TP_VIBRANCE_AVOIDCOLORSHIFT;Avoid color shift
!TP_VIBRANCE_CURVEEDITOR_SKINTONES;HH
!TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL;Skin-tones
diff --git a/rtdata/languages/Espanol b/rtdata/languages/Espanol
index ec9b8bddb..ec6dcfb37 100644
--- a/rtdata/languages/Espanol
+++ b/rtdata/languages/Espanol
@@ -1708,6 +1708,9 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: -
!HISTORY_MSG_485;Lens Correction
!HISTORY_MSG_486;Lens Correction - Camera
!HISTORY_MSG_487;Lens Correction - Lens
+!HISTORY_MSG_488;HDR Tone Mapping
+!HISTORY_MSG_489;HDR TM - Threshold
+!HISTORY_MSG_490;HDR TM - Amount
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
!IPTCPANEL_COPYRIGHT;Copyright notice
@@ -1759,6 +1762,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: -
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
!PARTIALPASTE_RAW_PIXELSHIFT;Pixel Shift
!PARTIALPASTE_RETINEX;Retinex
+!PARTIALPASTE_TM_FATTAL;HDR Tone mapping
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_AUTLISLOW;Low
!PREFERENCES_AUTLISMAX;Max - Average of all tiles
@@ -2067,6 +2071,9 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: -
!TP_RETINEX_VIEW_TRAN;Transmission - Auto
!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
+!TP_TM_FATTAL_AMOUNT;Amount
+!TP_TM_FATTAL_LABEL;HDR Tone Mapping
+!TP_TM_FATTAL_THRESHOLD;Threshold
!TP_WAVELET_1;Level 1
!TP_WAVELET_2;Level 2
!TP_WAVELET_3;Level 3
diff --git a/rtdata/languages/Euskara b/rtdata/languages/Euskara
index aa94b6258..8718554f5 100644
--- a/rtdata/languages/Euskara
+++ b/rtdata/languages/Euskara
@@ -972,6 +972,9 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!HISTORY_MSG_485;Lens Correction
!HISTORY_MSG_486;Lens Correction - Camera
!HISTORY_MSG_487;Lens Correction - Lens
+!HISTORY_MSG_488;HDR Tone Mapping
+!HISTORY_MSG_489;HDR TM - Threshold
+!HISTORY_MSG_490;HDR TM - Amount
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -1113,6 +1116,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!PARTIALPASTE_RGBCURVES;RGB curves
!PARTIALPASTE_SHARPENEDGE;Edges
!PARTIALPASTE_SHARPENMICRO;Microcontrast
+!PARTIALPASTE_TM_FATTAL;HDR Tone mapping
!PARTIALPASTE_VIBRANCE;Vibrance
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_ADD;Add
@@ -1943,6 +1947,9 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!TP_SHARPENMICRO_LABEL;Microcontrast
!TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5
!TP_SHARPENMICRO_UNIFORMITY;Uniformity
+!TP_TM_FATTAL_AMOUNT;Amount
+!TP_TM_FATTAL_LABEL;HDR Tone Mapping
+!TP_TM_FATTAL_THRESHOLD;Threshold
!TP_VIBRANCE_AVOIDCOLORSHIFT;Avoid color shift
!TP_VIBRANCE_CURVEEDITOR_SKINTONES;HH
!TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL;Skin-tones
diff --git a/rtdata/languages/Francais b/rtdata/languages/Francais
index e90a61b41..f67b6bf3f 100644
--- a/rtdata/languages/Francais
+++ b/rtdata/languages/Francais
@@ -1896,9 +1896,9 @@ TP_SHARPENMICRO_AMOUNT;Quantité
TP_SHARPENMICRO_LABEL;Microcontraste
TP_SHARPENMICRO_MATRIX;Matrice 3×3 au lieu de 5×5
TP_SHARPENMICRO_UNIFORMITY;Uniformité
+TP_TM_FATTAL_AMOUNT;Quantité
TP_TM_FATTAL_LABEL;Compression Tonale HDR (Fattal02)
TP_TM_FATTAL_THRESHOLD;Seuil
-TP_TM_FATTAL_AMOUNT;Quantité
TP_VIBRANCE_AVOIDCOLORSHIFT;Éviter les dérives de teinte
TP_VIBRANCE_CURVEEDITOR_SKINTONES;TT
TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL;Tons chair
diff --git a/rtdata/languages/Greek b/rtdata/languages/Greek
index e6b376c29..4ffc14338 100644
--- a/rtdata/languages/Greek
+++ b/rtdata/languages/Greek
@@ -971,6 +971,9 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!HISTORY_MSG_485;Lens Correction
!HISTORY_MSG_486;Lens Correction - Camera
!HISTORY_MSG_487;Lens Correction - Lens
+!HISTORY_MSG_488;HDR Tone Mapping
+!HISTORY_MSG_489;HDR TM - Threshold
+!HISTORY_MSG_490;HDR TM - Amount
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -1112,6 +1115,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!PARTIALPASTE_RGBCURVES;RGB curves
!PARTIALPASTE_SHARPENEDGE;Edges
!PARTIALPASTE_SHARPENMICRO;Microcontrast
+!PARTIALPASTE_TM_FATTAL;HDR Tone mapping
!PARTIALPASTE_VIBRANCE;Vibrance
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_ADD;Add
@@ -1942,6 +1946,9 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!TP_SHARPENMICRO_LABEL;Microcontrast
!TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5
!TP_SHARPENMICRO_UNIFORMITY;Uniformity
+!TP_TM_FATTAL_AMOUNT;Amount
+!TP_TM_FATTAL_LABEL;HDR Tone Mapping
+!TP_TM_FATTAL_THRESHOLD;Threshold
!TP_VIBRANCE_AVOIDCOLORSHIFT;Avoid color shift
!TP_VIBRANCE_CURVEEDITOR_SKINTONES;HH
!TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL;Skin-tones
diff --git a/rtdata/languages/Hebrew b/rtdata/languages/Hebrew
index 3bb2528fb..ef8717fa3 100644
--- a/rtdata/languages/Hebrew
+++ b/rtdata/languages/Hebrew
@@ -972,6 +972,9 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!HISTORY_MSG_485;Lens Correction
!HISTORY_MSG_486;Lens Correction - Camera
!HISTORY_MSG_487;Lens Correction - Lens
+!HISTORY_MSG_488;HDR Tone Mapping
+!HISTORY_MSG_489;HDR TM - Threshold
+!HISTORY_MSG_490;HDR TM - Amount
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -1113,6 +1116,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!PARTIALPASTE_RGBCURVES;RGB curves
!PARTIALPASTE_SHARPENEDGE;Edges
!PARTIALPASTE_SHARPENMICRO;Microcontrast
+!PARTIALPASTE_TM_FATTAL;HDR Tone mapping
!PARTIALPASTE_VIBRANCE;Vibrance
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_ADD;Add
@@ -1943,6 +1947,9 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!TP_SHARPENMICRO_LABEL;Microcontrast
!TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5
!TP_SHARPENMICRO_UNIFORMITY;Uniformity
+!TP_TM_FATTAL_AMOUNT;Amount
+!TP_TM_FATTAL_LABEL;HDR Tone Mapping
+!TP_TM_FATTAL_THRESHOLD;Threshold
!TP_VIBRANCE_AVOIDCOLORSHIFT;Avoid color shift
!TP_VIBRANCE_CURVEEDITOR_SKINTONES;HH
!TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL;Skin-tones
diff --git a/rtdata/languages/Italiano b/rtdata/languages/Italiano
index 4e4f59480..034d16928 100644
--- a/rtdata/languages/Italiano
+++ b/rtdata/languages/Italiano
@@ -1582,6 +1582,9 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: -
!HISTORY_MSG_485;Lens Correction
!HISTORY_MSG_486;Lens Correction - Camera
!HISTORY_MSG_487;Lens Correction - Lens
+!HISTORY_MSG_488;HDR Tone Mapping
+!HISTORY_MSG_489;HDR TM - Threshold
+!HISTORY_MSG_490;HDR TM - Amount
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
!IPTCPANEL_COPYRIGHT;Copyright notice
@@ -1629,6 +1632,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: -
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
!PARTIALPASTE_RAW_PIXELSHIFT;Pixel Shift
!PARTIALPASTE_RETINEX;Retinex
+!PARTIALPASTE_TM_FATTAL;HDR Tone mapping
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_AUTLISLOW;Low
!PREFERENCES_AUTLISMAX;Max - Average of all tiles
@@ -2008,6 +2012,9 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: -
!TP_RETINEX_VIEW_TRAN;Transmission - Auto
!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
+!TP_TM_FATTAL_AMOUNT;Amount
+!TP_TM_FATTAL_LABEL;HDR Tone Mapping
+!TP_TM_FATTAL_THRESHOLD;Threshold
!TP_WAVELET_1;Level 1
!TP_WAVELET_2;Level 2
!TP_WAVELET_3;Level 3
diff --git a/rtdata/languages/Japanese b/rtdata/languages/Japanese
index 494aa13c2..ae9ff5b7f 100644
--- a/rtdata/languages/Japanese
+++ b/rtdata/languages/Japanese
@@ -1959,6 +1959,9 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: -
!HISTORY_MSG_485;Lens Correction
!HISTORY_MSG_486;Lens Correction - Camera
!HISTORY_MSG_487;Lens Correction - Lens
+!HISTORY_MSG_488;HDR Tone Mapping
+!HISTORY_MSG_489;HDR TM - Threshold
+!HISTORY_MSG_490;HDR TM - Amount
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
!IPTCPANEL_COPYRIGHT;Copyright notice
@@ -1997,6 +2000,7 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: -
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
!PARTIALPASTE_RAW_PIXELSHIFT;Pixel Shift
!PARTIALPASTE_RETINEX;Retinex
+!PARTIALPASTE_TM_FATTAL;HDR Tone mapping
!PREFERENCES_AUTOSAVE_TP_OPEN;Automatically save tools collapsed/expanded\nstate before exiting
!PREFERENCES_CMMBPC;Black point compensation
!PREFERENCES_D50_OLD;5000K
@@ -2201,5 +2205,8 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: -
!TP_RETINEX_VIEW_TRAN;Transmission - Auto
!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
+!TP_TM_FATTAL_AMOUNT;Amount
+!TP_TM_FATTAL_LABEL;HDR Tone Mapping
+!TP_TM_FATTAL_THRESHOLD;Threshold
!TP_WBALANCE_TEMPBIAS;AWB temperature bias
!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias".
diff --git a/rtdata/languages/Latvian b/rtdata/languages/Latvian
index 353ae8924..56e1fabb7 100644
--- a/rtdata/languages/Latvian
+++ b/rtdata/languages/Latvian
@@ -972,6 +972,9 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!HISTORY_MSG_485;Lens Correction
!HISTORY_MSG_486;Lens Correction - Camera
!HISTORY_MSG_487;Lens Correction - Lens
+!HISTORY_MSG_488;HDR Tone Mapping
+!HISTORY_MSG_489;HDR TM - Threshold
+!HISTORY_MSG_490;HDR TM - Amount
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -1113,6 +1116,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!PARTIALPASTE_RGBCURVES;RGB curves
!PARTIALPASTE_SHARPENEDGE;Edges
!PARTIALPASTE_SHARPENMICRO;Microcontrast
+!PARTIALPASTE_TM_FATTAL;HDR Tone mapping
!PARTIALPASTE_VIBRANCE;Vibrance
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_ADD;Add
@@ -1943,6 +1947,9 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!TP_SHARPENMICRO_LABEL;Microcontrast
!TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5
!TP_SHARPENMICRO_UNIFORMITY;Uniformity
+!TP_TM_FATTAL_AMOUNT;Amount
+!TP_TM_FATTAL_LABEL;HDR Tone Mapping
+!TP_TM_FATTAL_THRESHOLD;Threshold
!TP_VIBRANCE_AVOIDCOLORSHIFT;Avoid color shift
!TP_VIBRANCE_CURVEEDITOR_SKINTONES;HH
!TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL;Skin-tones
diff --git a/rtdata/languages/Magyar b/rtdata/languages/Magyar
index 8f7d7fac8..abddd957a 100644
--- a/rtdata/languages/Magyar
+++ b/rtdata/languages/Magyar
@@ -1245,6 +1245,9 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!HISTORY_MSG_485;Lens Correction
!HISTORY_MSG_486;Lens Correction - Camera
!HISTORY_MSG_487;Lens Correction - Lens
+!HISTORY_MSG_488;HDR Tone Mapping
+!HISTORY_MSG_489;HDR TM - Threshold
+!HISTORY_MSG_490;HDR TM - Amount
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -1322,6 +1325,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps
!PARTIALPASTE_RAW_PIXELSHIFT;Pixel Shift
!PARTIALPASTE_RETINEX;Retinex
+!PARTIALPASTE_TM_FATTAL;HDR Tone mapping
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_AUTLISLOW;Low
!PREFERENCES_AUTLISMAX;Max - Average of all tiles
@@ -1992,6 +1996,9 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!TP_RGBCURVES_LUMAMODE_TOOLTIP;Luminosity mode allows to vary the contribution of R, G and B channels to the luminosity of the image, without altering image color.
!TP_SAVEDIALOG_OK_TIP;Shortcut: Ctrl-Enter
!TP_SHADOWSHLIGHTS_SHARPMASK;Sharp mask
+!TP_TM_FATTAL_AMOUNT;Amount
+!TP_TM_FATTAL_LABEL;HDR Tone Mapping
+!TP_TM_FATTAL_THRESHOLD;Threshold
!TP_VIBRANCE_CURVEEDITOR_SKINTONES;HH
!TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL;Skin-tones
!TP_VIBRANCE_CURVEEDITOR_SKINTONES_RANGE1;Red/Purple
diff --git a/rtdata/languages/Nederlands b/rtdata/languages/Nederlands
index c1c0dbc02..0ea147eb8 100644
--- a/rtdata/languages/Nederlands
+++ b/rtdata/languages/Nederlands
@@ -2153,12 +2153,16 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: -
!HISTORY_MSG_485;Lens Correction
!HISTORY_MSG_486;Lens Correction - Camera
!HISTORY_MSG_487;Lens Correction - Lens
+!HISTORY_MSG_488;HDR Tone Mapping
+!HISTORY_MSG_489;HDR TM - Threshold
+!HISTORY_MSG_490;HDR TM - Amount
!LENSPROFILE_CORRECTION_AUTOMATCH;Auto-matched correction parameters
!LENSPROFILE_CORRECTION_LCPFILE;LCP File
!LENSPROFILE_CORRECTION_MANUAL;Manual correction parameters
!LENSPROFILE_LENS_WARNING;Warning: the crop factor used for lens profiling is larger than the crop factor of the camera, the results might be wrong.
!MAIN_MSG_TOOMANYOPENEDITORS;Too many open editors.\nPlease close an editor to continue.
!MAIN_TOOLTIP_BACKCOLOR3;Background color of the preview: Middle grey\nShortcut: 9
+!PARTIALPASTE_TM_FATTAL;HDR Tone mapping
!PREFERENCES_AUTOSAVE_TP_OPEN;Automatically save tools collapsed/expanded\nstate before exiting
!PREFERENCES_D50_OLD;5000K
!PREFERENCES_DIRECTORIES;Directories
@@ -2190,4 +2194,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: -
!TP_RETINEX_GAINOFFS;Gain and Offset (brightness)
!TP_RETINEX_GAINTRANSMISSION;Gain transmission
!TP_RETINEX_GAINTRANSMISSION_TOOLTIP;Amplify or reduce transmission map to achieve luminance.\nAbscissa: transmission -min from 0, mean, and values (max).\nOrdinate: gain.
+!TP_TM_FATTAL_AMOUNT;Amount
+!TP_TM_FATTAL_LABEL;HDR Tone Mapping
+!TP_TM_FATTAL_THRESHOLD;Threshold
!TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted
diff --git a/rtdata/languages/Norsk BM b/rtdata/languages/Norsk BM
index b0fe3aa6e..7e68880b8 100644
--- a/rtdata/languages/Norsk BM
+++ b/rtdata/languages/Norsk BM
@@ -971,6 +971,9 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!HISTORY_MSG_485;Lens Correction
!HISTORY_MSG_486;Lens Correction - Camera
!HISTORY_MSG_487;Lens Correction - Lens
+!HISTORY_MSG_488;HDR Tone Mapping
+!HISTORY_MSG_489;HDR TM - Threshold
+!HISTORY_MSG_490;HDR TM - Amount
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -1112,6 +1115,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!PARTIALPASTE_RGBCURVES;RGB curves
!PARTIALPASTE_SHARPENEDGE;Edges
!PARTIALPASTE_SHARPENMICRO;Microcontrast
+!PARTIALPASTE_TM_FATTAL;HDR Tone mapping
!PARTIALPASTE_VIBRANCE;Vibrance
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_ADD;Add
@@ -1942,6 +1946,9 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!TP_SHARPENMICRO_LABEL;Microcontrast
!TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5
!TP_SHARPENMICRO_UNIFORMITY;Uniformity
+!TP_TM_FATTAL_AMOUNT;Amount
+!TP_TM_FATTAL_LABEL;HDR Tone Mapping
+!TP_TM_FATTAL_THRESHOLD;Threshold
!TP_VIBRANCE_AVOIDCOLORSHIFT;Avoid color shift
!TP_VIBRANCE_CURVEEDITOR_SKINTONES;HH
!TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL;Skin-tones
diff --git a/rtdata/languages/Polish b/rtdata/languages/Polish
index 6f0f6a3b2..3c54cc184 100644
--- a/rtdata/languages/Polish
+++ b/rtdata/languages/Polish
@@ -1665,6 +1665,9 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: -
!HISTORY_MSG_485;Lens Correction
!HISTORY_MSG_486;Lens Correction - Camera
!HISTORY_MSG_487;Lens Correction - Lens
+!HISTORY_MSG_488;HDR Tone Mapping
+!HISTORY_MSG_489;HDR TM - Threshold
+!HISTORY_MSG_490;HDR TM - Amount
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
!IPTCPANEL_COPYRIGHT;Copyright notice
@@ -1707,6 +1710,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: -
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
!PARTIALPASTE_RAW_PIXELSHIFT;Pixel Shift
!PARTIALPASTE_RETINEX;Retinex
+!PARTIALPASTE_TM_FATTAL;HDR Tone mapping
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_AUTLISLOW;Low
!PREFERENCES_AUTLISMAX;Max - Average of all tiles
@@ -2014,6 +2018,9 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: -
!TP_RETINEX_VIEW_TRAN;Transmission - Auto
!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
+!TP_TM_FATTAL_AMOUNT;Amount
+!TP_TM_FATTAL_LABEL;HDR Tone Mapping
+!TP_TM_FATTAL_THRESHOLD;Threshold
!TP_WAVELET_1;Level 1
!TP_WAVELET_2;Level 2
!TP_WAVELET_3;Level 3
diff --git a/rtdata/languages/Polish (Latin Characters) b/rtdata/languages/Polish (Latin Characters)
index 10c001a06..85b9e3f0b 100644
--- a/rtdata/languages/Polish (Latin Characters)
+++ b/rtdata/languages/Polish (Latin Characters)
@@ -1665,6 +1665,9 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: -
!HISTORY_MSG_485;Lens Correction
!HISTORY_MSG_486;Lens Correction - Camera
!HISTORY_MSG_487;Lens Correction - Lens
+!HISTORY_MSG_488;HDR Tone Mapping
+!HISTORY_MSG_489;HDR TM - Threshold
+!HISTORY_MSG_490;HDR TM - Amount
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
!IPTCPANEL_COPYRIGHT;Copyright notice
@@ -1707,6 +1710,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: -
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
!PARTIALPASTE_RAW_PIXELSHIFT;Pixel Shift
!PARTIALPASTE_RETINEX;Retinex
+!PARTIALPASTE_TM_FATTAL;HDR Tone mapping
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_AUTLISLOW;Low
!PREFERENCES_AUTLISMAX;Max - Average of all tiles
@@ -2014,6 +2018,9 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: -
!TP_RETINEX_VIEW_TRAN;Transmission - Auto
!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
+!TP_TM_FATTAL_AMOUNT;Amount
+!TP_TM_FATTAL_LABEL;HDR Tone Mapping
+!TP_TM_FATTAL_THRESHOLD;Threshold
!TP_WAVELET_1;Level 1
!TP_WAVELET_2;Level 2
!TP_WAVELET_3;Level 3
diff --git a/rtdata/languages/Portugues (Brasil) b/rtdata/languages/Portugues (Brasil)
index 419e40312..661f24483 100644
--- a/rtdata/languages/Portugues (Brasil)
+++ b/rtdata/languages/Portugues (Brasil)
@@ -972,6 +972,9 @@ TP_WBALANCE_TEMPERATURE;Temperatura
!HISTORY_MSG_485;Lens Correction
!HISTORY_MSG_486;Lens Correction - Camera
!HISTORY_MSG_487;Lens Correction - Lens
+!HISTORY_MSG_488;HDR Tone Mapping
+!HISTORY_MSG_489;HDR TM - Threshold
+!HISTORY_MSG_490;HDR TM - Amount
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -1113,6 +1116,7 @@ TP_WBALANCE_TEMPERATURE;Temperatura
!PARTIALPASTE_RGBCURVES;RGB curves
!PARTIALPASTE_SHARPENEDGE;Edges
!PARTIALPASTE_SHARPENMICRO;Microcontrast
+!PARTIALPASTE_TM_FATTAL;HDR Tone mapping
!PARTIALPASTE_VIBRANCE;Vibrance
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_ADD;Add
@@ -1943,6 +1947,9 @@ TP_WBALANCE_TEMPERATURE;Temperatura
!TP_SHARPENMICRO_LABEL;Microcontrast
!TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5
!TP_SHARPENMICRO_UNIFORMITY;Uniformity
+!TP_TM_FATTAL_AMOUNT;Amount
+!TP_TM_FATTAL_LABEL;HDR Tone Mapping
+!TP_TM_FATTAL_THRESHOLD;Threshold
!TP_VIBRANCE_AVOIDCOLORSHIFT;Avoid color shift
!TP_VIBRANCE_CURVEEDITOR_SKINTONES;HH
!TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL;Skin-tones
diff --git a/rtdata/languages/Russian b/rtdata/languages/Russian
index 4573fc5f0..a67674975 100644
--- a/rtdata/languages/Russian
+++ b/rtdata/languages/Russian
@@ -1525,6 +1525,9 @@ ZOOMPANEL_ZOOMOUT;Удалить -
!HISTORY_MSG_485;Lens Correction
!HISTORY_MSG_486;Lens Correction - Camera
!HISTORY_MSG_487;Lens Correction - Lens
+!HISTORY_MSG_488;HDR Tone Mapping
+!HISTORY_MSG_489;HDR TM - Threshold
+!HISTORY_MSG_490;HDR TM - Amount
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
!IPTCPANEL_COPYRIGHT;Copyright notice
@@ -1583,6 +1586,7 @@ ZOOMPANEL_ZOOMOUT;Удалить -
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
!PARTIALPASTE_RAW_PIXELSHIFT;Pixel Shift
!PARTIALPASTE_RETINEX;Retinex
+!PARTIALPASTE_TM_FATTAL;HDR Tone mapping
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_AUTLISLOW;Low
!PREFERENCES_AUTLISMAX;Max - Average of all tiles
@@ -2010,6 +2014,9 @@ ZOOMPANEL_ZOOMOUT;Удалить -
!TP_RETINEX_VIEW_TRAN;Transmission - Auto
!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
+!TP_TM_FATTAL_AMOUNT;Amount
+!TP_TM_FATTAL_LABEL;HDR Tone Mapping
+!TP_TM_FATTAL_THRESHOLD;Threshold
!TP_WAVELET_1;Level 1
!TP_WAVELET_2;Level 2
!TP_WAVELET_3;Level 3
diff --git a/rtdata/languages/Serbian (Cyrilic Characters) b/rtdata/languages/Serbian (Cyrilic Characters)
index 2d231e4c4..b6f614cce 100644
--- a/rtdata/languages/Serbian (Cyrilic Characters)
+++ b/rtdata/languages/Serbian (Cyrilic Characters)
@@ -1558,6 +1558,9 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!HISTORY_MSG_485;Lens Correction
!HISTORY_MSG_486;Lens Correction - Camera
!HISTORY_MSG_487;Lens Correction - Lens
+!HISTORY_MSG_488;HDR Tone Mapping
+!HISTORY_MSG_489;HDR TM - Threshold
+!HISTORY_MSG_490;HDR TM - Amount
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
!IPTCPANEL_COPYRIGHT;Copyright notice
@@ -1615,6 +1618,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
!PARTIALPASTE_RAW_PIXELSHIFT;Pixel Shift
!PARTIALPASTE_RETINEX;Retinex
+!PARTIALPASTE_TM_FATTAL;HDR Tone mapping
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_AUTLISLOW;Low
!PREFERENCES_AUTLISMAX;Max - Average of all tiles
@@ -2009,6 +2013,9 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!TP_RETINEX_VIEW_TRAN;Transmission - Auto
!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
+!TP_TM_FATTAL_AMOUNT;Amount
+!TP_TM_FATTAL_LABEL;HDR Tone Mapping
+!TP_TM_FATTAL_THRESHOLD;Threshold
!TP_WAVELET_1;Level 1
!TP_WAVELET_2;Level 2
!TP_WAVELET_3;Level 3
diff --git a/rtdata/languages/Serbian (Latin Characters) b/rtdata/languages/Serbian (Latin Characters)
index eb1f4c5ab..6feba1bf3 100644
--- a/rtdata/languages/Serbian (Latin Characters)
+++ b/rtdata/languages/Serbian (Latin Characters)
@@ -1558,6 +1558,9 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!HISTORY_MSG_485;Lens Correction
!HISTORY_MSG_486;Lens Correction - Camera
!HISTORY_MSG_487;Lens Correction - Lens
+!HISTORY_MSG_488;HDR Tone Mapping
+!HISTORY_MSG_489;HDR TM - Threshold
+!HISTORY_MSG_490;HDR TM - Amount
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
!IPTCPANEL_COPYRIGHT;Copyright notice
@@ -1615,6 +1618,7 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
!PARTIALPASTE_RAW_PIXELSHIFT;Pixel Shift
!PARTIALPASTE_RETINEX;Retinex
+!PARTIALPASTE_TM_FATTAL;HDR Tone mapping
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_AUTLISLOW;Low
!PREFERENCES_AUTLISMAX;Max - Average of all tiles
@@ -2009,6 +2013,9 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!TP_RETINEX_VIEW_TRAN;Transmission - Auto
!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
+!TP_TM_FATTAL_AMOUNT;Amount
+!TP_TM_FATTAL_LABEL;HDR Tone Mapping
+!TP_TM_FATTAL_THRESHOLD;Threshold
!TP_WAVELET_1;Level 1
!TP_WAVELET_2;Level 2
!TP_WAVELET_3;Level 3
diff --git a/rtdata/languages/Slovak b/rtdata/languages/Slovak
index 16ac150da..f589c3ee1 100644
--- a/rtdata/languages/Slovak
+++ b/rtdata/languages/Slovak
@@ -1034,6 +1034,9 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!HISTORY_MSG_485;Lens Correction
!HISTORY_MSG_486;Lens Correction - Camera
!HISTORY_MSG_487;Lens Correction - Lens
+!HISTORY_MSG_488;HDR Tone Mapping
+!HISTORY_MSG_489;HDR TM - Threshold
+!HISTORY_MSG_490;HDR TM - Amount
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -1166,6 +1169,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!PARTIALPASTE_RGBCURVES;RGB curves
!PARTIALPASTE_SHARPENEDGE;Edges
!PARTIALPASTE_SHARPENMICRO;Microcontrast
+!PARTIALPASTE_TM_FATTAL;HDR Tone mapping
!PARTIALPASTE_VIBRANCE;Vibrance
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_AUTLISLOW;Low
@@ -1951,6 +1955,9 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!TP_SHARPENMICRO_LABEL;Microcontrast
!TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5
!TP_SHARPENMICRO_UNIFORMITY;Uniformity
+!TP_TM_FATTAL_AMOUNT;Amount
+!TP_TM_FATTAL_LABEL;HDR Tone Mapping
+!TP_TM_FATTAL_THRESHOLD;Threshold
!TP_VIBRANCE_AVOIDCOLORSHIFT;Avoid color shift
!TP_VIBRANCE_CURVEEDITOR_SKINTONES;HH
!TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL;Skin-tones
diff --git a/rtdata/languages/Suomi b/rtdata/languages/Suomi
index 72fe637d3..ecdcfff8a 100644
--- a/rtdata/languages/Suomi
+++ b/rtdata/languages/Suomi
@@ -973,6 +973,9 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!HISTORY_MSG_485;Lens Correction
!HISTORY_MSG_486;Lens Correction - Camera
!HISTORY_MSG_487;Lens Correction - Lens
+!HISTORY_MSG_488;HDR Tone Mapping
+!HISTORY_MSG_489;HDR TM - Threshold
+!HISTORY_MSG_490;HDR TM - Amount
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -1114,6 +1117,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!PARTIALPASTE_RGBCURVES;RGB curves
!PARTIALPASTE_SHARPENEDGE;Edges
!PARTIALPASTE_SHARPENMICRO;Microcontrast
+!PARTIALPASTE_TM_FATTAL;HDR Tone mapping
!PARTIALPASTE_VIBRANCE;Vibrance
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_ADD;Add
@@ -1943,6 +1947,9 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!TP_SHARPENMICRO_LABEL;Microcontrast
!TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5
!TP_SHARPENMICRO_UNIFORMITY;Uniformity
+!TP_TM_FATTAL_AMOUNT;Amount
+!TP_TM_FATTAL_LABEL;HDR Tone Mapping
+!TP_TM_FATTAL_THRESHOLD;Threshold
!TP_VIBRANCE_AVOIDCOLORSHIFT;Avoid color shift
!TP_VIBRANCE_CURVEEDITOR_SKINTONES;HH
!TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL;Skin-tones
diff --git a/rtdata/languages/Swedish b/rtdata/languages/Swedish
index 53bdbc3dc..0f3ddaafd 100644
--- a/rtdata/languages/Swedish
+++ b/rtdata/languages/Swedish
@@ -1952,6 +1952,9 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: -
!HISTORY_MSG_485;Lens Correction
!HISTORY_MSG_486;Lens Correction - Camera
!HISTORY_MSG_487;Lens Correction - Lens
+!HISTORY_MSG_488;HDR Tone Mapping
+!HISTORY_MSG_489;HDR TM - Threshold
+!HISTORY_MSG_490;HDR TM - Amount
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
!IPTCPANEL_COPYRIGHT;Copyright notice
@@ -1988,6 +1991,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: -
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
!PARTIALPASTE_RAW_PIXELSHIFT;Pixel Shift
+!PARTIALPASTE_TM_FATTAL;HDR Tone mapping
!PREFERENCES_AUTOSAVE_TP_OPEN;Automatically save tools collapsed/expanded\nstate before exiting
!PREFERENCES_CMMBPC;Black point compensation
!PREFERENCES_D50_OLD;5000K
@@ -2135,6 +2139,9 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: -
!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction.
!TP_RETINEX_VIEW_MASK;Mask
!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+!TP_TM_FATTAL_AMOUNT;Amount
+!TP_TM_FATTAL_LABEL;HDR Tone Mapping
+!TP_TM_FATTAL_THRESHOLD;Threshold
!TP_WAVELET_CBENAB;Toning and Color Balance
!TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted
!TP_WAVELET_CHRO_TOOLTIP;Sets the wavelet level which will be the threshold between saturated and pastel colors.\n1-x: saturated\nx-9: pastel\n\nIf the value exceeds the amount of wavelet levels you are using then it will be ignored.
diff --git a/rtdata/languages/Turkish b/rtdata/languages/Turkish
index a05b499db..937e0dabb 100644
--- a/rtdata/languages/Turkish
+++ b/rtdata/languages/Turkish
@@ -972,6 +972,9 @@ TP_WBALANCE_TEMPERATURE;Isı
!HISTORY_MSG_485;Lens Correction
!HISTORY_MSG_486;Lens Correction - Camera
!HISTORY_MSG_487;Lens Correction - Lens
+!HISTORY_MSG_488;HDR Tone Mapping
+!HISTORY_MSG_489;HDR TM - Threshold
+!HISTORY_MSG_490;HDR TM - Amount
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -1113,6 +1116,7 @@ TP_WBALANCE_TEMPERATURE;Isı
!PARTIALPASTE_RGBCURVES;RGB curves
!PARTIALPASTE_SHARPENEDGE;Edges
!PARTIALPASTE_SHARPENMICRO;Microcontrast
+!PARTIALPASTE_TM_FATTAL;HDR Tone mapping
!PARTIALPASTE_VIBRANCE;Vibrance
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_ADD;Add
@@ -1942,6 +1946,9 @@ TP_WBALANCE_TEMPERATURE;Isı
!TP_SHARPENMICRO_LABEL;Microcontrast
!TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5
!TP_SHARPENMICRO_UNIFORMITY;Uniformity
+!TP_TM_FATTAL_AMOUNT;Amount
+!TP_TM_FATTAL_LABEL;HDR Tone Mapping
+!TP_TM_FATTAL_THRESHOLD;Threshold
!TP_VIBRANCE_AVOIDCOLORSHIFT;Avoid color shift
!TP_VIBRANCE_CURVEEDITOR_SKINTONES;HH
!TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL;Skin-tones
diff --git a/rtdata/languages/default b/rtdata/languages/default
index 2c89629d1..f428aca47 100644
--- a/rtdata/languages/default
+++ b/rtdata/languages/default
@@ -1198,7 +1198,6 @@ SAVEDLG_AUTOSUFFIX;Automatically add a suffix if the file already exists
SAVEDLG_FILEFORMAT;File format
SAVEDLG_FORCEFORMATOPTS;Force saving options
SAVEDLG_JPEGQUAL;JPEG quality
-SAVEDLG_PNGCOMPR;PNG compression
SAVEDLG_PUTTOQUEUE;Put into processing queue
SAVEDLG_PUTTOQUEUEHEAD;Put to the head of the processing queue
SAVEDLG_PUTTOQUEUETAIL;Put to the end of the processing queue
@@ -1929,9 +1928,9 @@ TP_SHARPENMICRO_AMOUNT;Quantity
TP_SHARPENMICRO_LABEL;Microcontrast
TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5
TP_SHARPENMICRO_UNIFORMITY;Uniformity
+TP_TM_FATTAL_AMOUNT;Amount
TP_TM_FATTAL_LABEL;HDR Tone Mapping
TP_TM_FATTAL_THRESHOLD;Threshold
-TP_TM_FATTAL_AMOUNT;Amount
TP_VIBRANCE_AVOIDCOLORSHIFT;Avoid color shift
TP_VIBRANCE_CURVEEDITOR_SKINTONES;HH
TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL;Skin-tones
diff --git a/rtdata/themes/TooWaBlue-GTK3-20_.css b/rtdata/themes/TooWaBlue-GTK3-20_.css
index a22314c2e..1e196bff8 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-2017 TooWaBoo
- Version 2.59
+ Version 2.60
RawTherapee is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -463,6 +463,9 @@ menu separator {
background-color: @view-grid-border;
margin: 0.33334em 0;
}
+#MyFileChooserButton separator {
+ background-color: transparent;
+}
#PlacesPaned .view.separator {
color: @border-color;
@@ -884,12 +887,15 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
border-radius: 0;
}
+#MetaPanelNotebook > stack > box:nth-child(1) > :nth-child(1) {
+ border: 0.08334em solid @bg-dark-grey;
+}
#MetaPanelNotebook > stack > box:nth-child(2) > scrolledwindow scrolledwindow {
background-color: @bg-dark-grey;
padding: 0;
margin: 0;
}
-#MetaPanelNotebook .view {
+#MetaPanelNotebook > stack > box:nth-child(2) .view {
border: 0.08334em solid @bg-dark-grey;
padding: 0.16667em;
margin: 0;
@@ -1036,9 +1042,8 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
}
#EditorTopPanel > box:nth-child(9) > button.image-button {
- min-width: 0;
- padding-left: 0.25em;
- padding-right: 0.25em;
+ min-width: 1.05em;
+ padding: 0;
}
/*Button editor bottom*/
diff --git a/rtengine/CMakeLists.txt b/rtengine/CMakeLists.txt
index 3f32872c3..53b374388 100644
--- a/rtengine/CMakeLists.txt
+++ b/rtengine/CMakeLists.txt
@@ -72,6 +72,7 @@ set(RTENGINESOURCEFILES
imageio.cc
improccoordinator.cc
improcfun.cc
+ impulse_denoise.cc
init.cc
iplab2rgb.cc
ipresize.cc
diff --git a/rtengine/EdgePreservingDecomposition.cc b/rtengine/EdgePreservingDecomposition.cc
index 1424af1b3..1c2d0219f 100644
--- a/rtengine/EdgePreservingDecomposition.cc
+++ b/rtengine/EdgePreservingDecomposition.cc
@@ -6,7 +6,6 @@
#endif
#include "sleef.c"
#include "opthelper.h"
-#define pow_F(a,b) (xexpf(b*xlogf(a)))
#define DIAGONALS 5
#define DIAGONALSP1 6
diff --git a/rtengine/FTblockDN.cc b/rtengine/FTblockDN.cc
index 6cb503f6f..0634deedd 100644
--- a/rtengine/FTblockDN.cc
+++ b/rtengine/FTblockDN.cc
@@ -467,7 +467,7 @@ void ImProcFunctions::Tile_calc(int tilesize, int overlap, int kall, int imwidth
int denoiseNestedLevels = 1;
enum nrquality {QUALITY_STANDARD, QUALITY_HIGH};
-SSEFUNCTION void ImProcFunctions::RGB_denoise(int kall, Imagefloat * src, Imagefloat * dst, Imagefloat * calclum, float * ch_M, float *max_r, float *max_b, bool isRAW, const procparams::DirPyrDenoiseParams & dnparams, const double expcomp, const NoiseCurve & noiseLCurve, const NoiseCurve & noiseCCurve, float &chaut, float &redaut, float &blueaut, float &maxredaut, float &maxblueaut, float &nresi, float &highresi)
+SSEFUNCTION void ImProcFunctions::RGB_denoise(int kall, Imagefloat * src, Imagefloat * dst, Imagefloat * calclum, float * ch_M, float *max_r, float *max_b, bool isRAW, const procparams::DirPyrDenoiseParams & dnparams, const double expcomp, const NoiseCurve & noiseLCurve, const NoiseCurve & noiseCCurve, float &nresi, float &highresi)
{
//#ifdef _DEBUG
MyTime t1e, t2e;
@@ -2839,10 +2839,10 @@ SSEFUNCTION void ImProcFunctions::ShrinkAllAB(wavelet_decomposition &WaveletCoef
}
-SSEFUNCTION void ImProcFunctions::ShrinkAll_info(float ** WavCoeffs_a, float ** WavCoeffs_b, int level,
- int W_ab, int H_ab, int skip_ab, float **noisevarlum, float **noisevarchrom, float **noisevarhue, int width, int height, float noisevar_abr, float noisevar_abb, LabImage * noi, float &chaut, int &Nb, float &redaut, float &blueaut,
- float &maxredaut, float &maxblueaut, float &minredaut, float &minblueaut, bool autoch, int schoice, int lvl, float &chromina, float &sigma, float &lumema, float &sigma_L, float &redyel, float &skinc, float &nsknc,
- float &maxchred, float &maxchblue, float &minchred, float &minchblue, int &nb, float &chau, float &chred, float &chblue, bool denoiseMethodRgb, bool multiThread)
+SSEFUNCTION void ImProcFunctions::ShrinkAll_info(float ** WavCoeffs_a, float ** WavCoeffs_b,
+ int W_ab, int H_ab, float **noisevarlum, float **noisevarchrom, float **noisevarhue, float &chaut, int &Nb, float &redaut, float &blueaut,
+ float &maxredaut, float &maxblueaut, float &minredaut, float &minblueaut, int schoice, int lvl, float &chromina, float &sigma, float &lumema, float &sigma_L, float &redyel, float &skinc, float &nsknc,
+ float &maxchred, float &maxchblue, float &minchred, float &minchblue, int &nb, float &chau, float &chred, float &chblue, bool denoiseMethodRgb)
{
//simple wavelet shrinkage
@@ -2958,8 +2958,8 @@ SSEFUNCTION void ImProcFunctions::ShrinkAll_info(float ** WavCoeffs_a, float **
void ImProcFunctions::WaveletDenoiseAll_info(int levwav, wavelet_decomposition &WaveletCoeffs_a,
- wavelet_decomposition &WaveletCoeffs_b, float **noisevarlum, float **noisevarchrom, float **noisevarhue, int width, int height, float noisevar_abr, float noisevar_abb, LabImage * noi, float &chaut, int &Nb, float &redaut, float &blueaut, float &maxredaut, float &maxblueaut, float &minredaut, float &minblueaut, int schoice, bool autoch,
- float &chromina, float &sigma, float &lumema, float &sigma_L, float &redyel, float &skinc, float &nsknc, float &maxchred, float &maxchblue, float &minchred, float &minchblue, int &nb, float &chau, float &chred, float &chblue, bool denoiseMethodRgb, bool multiThread)
+ wavelet_decomposition &WaveletCoeffs_b, float **noisevarlum, float **noisevarchrom, float **noisevarhue, float &chaut, int &Nb, float &redaut, float &blueaut, float &maxredaut, float &maxblueaut, float &minredaut, float &minblueaut, int schoice,
+ float &chromina, float &sigma, float &lumema, float &sigma_L, float &redyel, float &skinc, float &nsknc, float &maxchred, float &maxchblue, float &minchred, float &minchblue, int &nb, float &chau, float &chred, float &chblue, bool denoiseMethodRgb)
{
int maxlvl = levwav;
@@ -2969,14 +2969,12 @@ void ImProcFunctions::WaveletDenoiseAll_info(int levwav, wavelet_decomposition &
int Wlvl_ab = WaveletCoeffs_a.level_W(lvl);
int Hlvl_ab = WaveletCoeffs_a.level_H(lvl);
- int skip_ab = WaveletCoeffs_a.level_stride(lvl);
-
float ** WavCoeffs_a = WaveletCoeffs_a.level_coeffs(lvl);
float ** WavCoeffs_b = WaveletCoeffs_b.level_coeffs(lvl);
- ShrinkAll_info(WavCoeffs_a, WavCoeffs_b, lvl, Wlvl_ab, Hlvl_ab,
- skip_ab, noisevarlum, noisevarchrom, noisevarhue, width, height, noisevar_abr, noisevar_abb, noi, chaut, Nb, redaut, blueaut, maxredaut, maxblueaut, minredaut, minblueaut,
- autoch, schoice, lvl, chromina, sigma, lumema, sigma_L, redyel, skinc, nsknc, maxchred, maxchblue, minchred, minchblue, nb, chau, chred, chblue, denoiseMethodRgb, multiThread);
+ ShrinkAll_info(WavCoeffs_a, WavCoeffs_b, Wlvl_ab, Hlvl_ab,
+ noisevarlum, noisevarchrom, noisevarhue, chaut, Nb, redaut, blueaut, maxredaut, maxblueaut, minredaut, minblueaut,
+ schoice, lvl, chromina, sigma, lumema, sigma_L, redyel, skinc, nsknc, maxchred, maxchblue, minchred, minchblue, nb, chau, chred, chblue, denoiseMethodRgb);
}
}
@@ -3277,9 +3275,6 @@ SSEFUNCTION void ImProcFunctions::RGB_denoise_info(Imagefloat * src, Imagefloat
noisevarhue[i] = new float[(width + 1) / 2];
}
- // init luma noisevarL
- float noisevarab_b, noisevarab_r;
-
float realred, realblue;
float interm_med = static_cast( dnparams.chroma) / 10.0;
float intermred, intermblue;
@@ -3308,7 +3303,6 @@ SSEFUNCTION void ImProcFunctions::RGB_denoise_info(Imagefloat * src, Imagefloat
realblue = 0.001f;
}
- //TODO: implement using AlignedBufferMP
//fill tile from image; convert RGB to "luma/chroma"
if (isRAW) {//image is raw; use channel differences for chroma channels
@@ -3509,8 +3503,6 @@ SSEFUNCTION void ImProcFunctions::RGB_denoise_info(Imagefloat * src, Imagefloat
//and whether to subsample the image after wavelet filtering. Subsampling is coded as
//binary 1 or 0 for each level, eg subsampling = 0 means no subsampling, 1 means subsample
//the first level only, 7 means subsample the first three levels, etc.
- noisevarab_r = SQR(realred) + 0.01f;
- noisevarab_b = SQR(realblue) + 0.01f;
wavelet_decomposition* adecomp;
wavelet_decomposition* bdecomp;
@@ -3539,8 +3531,6 @@ SSEFUNCTION void ImProcFunctions::RGB_denoise_info(Imagefloat * src, Imagefloat
bdecomp = new wavelet_decomposition (labdn->data + 2 * datalen, labdn->W, labdn->H, levwav, 1);
}
}
- const bool autoch = (settings->leveldnautsimpl == 1 && (dnparams.Cmethod == "AUT" || dnparams.Cmethod == "PRE")) || (settings->leveldnautsimpl == 0 && (dnparams.C2method == "AUTO" || dnparams.C2method == "PREV"));
-
if (comptlevel == 0) {
WaveletDenoiseAll_info(
@@ -3550,11 +3540,6 @@ SSEFUNCTION void ImProcFunctions::RGB_denoise_info(Imagefloat * src, Imagefloat
noisevarlum,
noisevarchrom,
noisevarhue,
- width,
- height,
- noisevarab_r,
- noisevarab_b,
- labdn,
chaut,
Nb,
redaut,
@@ -3564,7 +3549,6 @@ SSEFUNCTION void ImProcFunctions::RGB_denoise_info(Imagefloat * src, Imagefloat
minredaut,
minblueaut,
schoice,
- autoch,
chromina,
sigma,
lumema,
@@ -3580,8 +3564,7 @@ SSEFUNCTION void ImProcFunctions::RGB_denoise_info(Imagefloat * src, Imagefloat
chau,
chred,
chblue,
- denoiseMethodRgb,
- multiThread
+ denoiseMethodRgb
); // Enhance mode
}
diff --git a/rtengine/PF_correct_RT.cc b/rtengine/PF_correct_RT.cc
index 6e1fe75d6..a31c78767 100644
--- a/rtengine/PF_correct_RT.cc
+++ b/rtengine/PF_correct_RT.cc
@@ -655,7 +655,7 @@ SSEFUNCTION void ImProcFunctions::PF_correct_RTcam(CieImage * src, CieImage * ds
free(fringe);
}
-SSEFUNCTION void ImProcFunctions::Badpixelscam(CieImage * src, CieImage * dst, double radius, int thresh, int mode, float b_l, float t_l, float t_r, float b_r, float skinprot, float chrom, int hotbad)
+SSEFUNCTION void ImProcFunctions::Badpixelscam(CieImage * src, CieImage * dst, double radius, int thresh, int mode, float skinprot, float chrom, int hotbad)
{
const int halfwin = ceil(2 * radius) + 1;
MyTime t1, t2;
@@ -1263,7 +1263,7 @@ SSEFUNCTION void ImProcFunctions::Badpixelscam(CieImage * src, CieImage * dst, d
}
-SSEFUNCTION void ImProcFunctions::BadpixelsLab(LabImage * src, LabImage * dst, double radius, int thresh, int mode, float b_l, float t_l, float t_r, float b_r, float skinprot, float chrom)
+SSEFUNCTION void ImProcFunctions::BadpixelsLab(LabImage * src, LabImage * dst, double radius, int thresh, int mode, float skinprot, float chrom)
{
const int halfwin = ceil(2 * radius) + 1;
MyTime t1, t2;
diff --git a/rtengine/alignedbuffer.h b/rtengine/alignedbuffer.h
index 44fd43e81..dd9d7b278 100644
--- a/rtengine/alignedbuffer.h
+++ b/rtengine/alignedbuffer.h
@@ -18,12 +18,8 @@
*/
#ifndef _ALIGNEDBUFFER_
#define _ALIGNEDBUFFER_
-#include
#include
-#include
#include
-#include
-#include "../rtgui/threadutils.h"
// Aligned buffer that should be faster
template class AlignedBuffer
@@ -111,7 +107,6 @@ public:
}
if (real) {
- //data = (T*)( (uintptr_t)real + (alignment-((uintptr_t)real)%alignment) );
data = (T*)( ( uintptr_t(real) + uintptr_t(alignment - 1)) / alignment * alignment);
inUse = true;
} else {
@@ -142,51 +137,4 @@ public:
}
};
-// Multi processor version, use with OpenMP
-template class AlignedBufferMP
-{
-private:
- MyMutex mtx;
- std::vector*> buffers;
- size_t size;
-
-public:
- explicit AlignedBufferMP(size_t sizeP)
- {
- size = sizeP;
- }
-
- ~AlignedBufferMP()
- {
- for (size_t i = 0; i < buffers.size(); i++) {
- delete buffers[i];
- }
- }
-
- AlignedBuffer* acquire()
- {
- MyMutex::MyLock lock(mtx);
-
- // Find available buffer
- for (size_t i = 0; i < buffers.size(); i++) {
- if (!buffers[i]->inUse) {
- buffers[i]->inUse = true;
- return buffers[i];
- }
- }
-
- // Add new buffer if nothing is free
- AlignedBuffer* buffer = new AlignedBuffer(size);
- buffers.push_back(buffer);
-
- return buffer;
- }
-
- void release(AlignedBuffer* buffer)
- {
- MyMutex::MyLock lock(mtx);
-
- buffer->inUse = false;
- }
-};
#endif
diff --git a/rtengine/boxblur.h b/rtengine/boxblur.h
index 0fa31fc2a..5475e8ffc 100644
--- a/rtengine/boxblur.h
+++ b/rtengine/boxblur.h
@@ -34,8 +34,6 @@ namespace rtengine
template void boxblur (T** src, A** dst, int radx, int rady, int W, int H)
{
-
- //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//box blur image; box range = (radx,rady)
AlignedBuffer* buffer = new AlignedBuffer (W * H);
@@ -125,8 +123,6 @@ template void boxblur (T** src, A** dst, int radx, int rady, i
template SSEFUNCTION void boxblur (T** src, A** dst, T* buffer, int radx, int rady, int W, int H)
{
-
- //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//box blur image; box range = (radx,rady)
float* temp = buffer;
@@ -313,13 +309,8 @@ template SSEFUNCTION void boxblur (T** src, A** dst, T* buffer
}
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
template SSEFUNCTION void boxblur (T* src, A* dst, A* buffer, int radx, int rady, int W, int H)
{
-
- //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//box blur image; box range = (radx,rady) i.e. box size is (2*radx+1)x(2*rady+1)
float* temp = buffer;
@@ -505,489 +496,6 @@ template SSEFUNCTION void boxblur (T* src, A* dst, A* buffer,
}
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-template void boxvar (T* src, T* dst, int radx, int rady, int W, int H)
-{
-
- AlignedBuffer buffer1(W * H);
- AlignedBuffer buffer2(W * H);
- float* tempave = buffer1.data;
- float* tempsqave = buffer2.data;
-
- AlignedBufferMP buffer3(H);
-
- //float image_ave = 0;
-
- //box blur image channel; box size = 2*box+1
- //horizontal blur
-#ifdef _OPENMP
- #pragma omp parallel for
-#endif
-
- for (int row = 0; row < H; row++) {
- int len = radx + 1;
- tempave[row * W + 0] = src[row * W + 0] / len;
- tempsqave[row * W + 0] = SQR(src[row * W + 0]) / len;
-
- for (int j = 1; j <= radx; j++) {
- tempave[row * W + 0] += src[row * W + j] / len;
- tempsqave[row * W + 0] += SQR(src[row * W + j]) / len;
- }
-
- for (int col = 1; col <= radx; col++) {
- tempave[row * W + col] = (tempave[row * W + col - 1] * len + src[row * W + col + radx]) / (len + 1);
- tempsqave[row * W + col] = (tempsqave[row * W + col - 1] * len + SQR(src[row * W + col + radx])) / (len + 1);
- len ++;
- }
-
- for (int col = radx + 1; col < W - radx; col++) {
- tempave[row * W + col] = tempave[row * W + col - 1] + (src[row * W + col + radx] - src[row * W + col - radx - 1]) / len;
- tempsqave[row * W + col] = tempsqave[row * W + col - 1] + (SQR(src[row * W + col + radx]) - SQR(src[row * W + col - radx - 1])) / len;
- }
-
- for (int col = W - radx; col < W; col++) {
- tempave[row * W + col] = (tempave[row * W + col - 1] * len - src[row * W + col - radx - 1]) / (len - 1);
- tempsqave[row * W + col] = (tempsqave[row * W + col - 1] * len - SQR(src[row * W + col - radx - 1])) / (len - 1);
- len --;
- }
- }
-
- //vertical blur
-#ifdef _OPENMP
- #pragma omp parallel for
-#endif
-
- for (int col = 0; col < W; col++) {
- AlignedBuffer* pBuf3 = buffer3.acquire();
- T* tempave2 = (T*)pBuf3->data;
-
- int len = rady + 1;
- tempave2[0] = tempave[0 * W + col] / len;
- dst[0 * W + col] = tempsqave[0 * W + col] / len;
-
- for (int i = 1; i <= rady; i++) {
- tempave2[0] += tempave[i * W + col] / len;
- dst[0 * W + col] += tempsqave[i * W + col] / len;
- }
-
- for (int row = 1; row <= rady; row++) {
- tempave2[row] = (tempave2[(row - 1)] * len + tempave[(row + rady) * W + col]) / (len + 1);
- dst[row * W + col] = (dst[(row - 1) * W + col] * len + tempsqave[(row + rady) * W + col]) / (len + 1);
- len ++;
- }
-
- for (int row = rady + 1; row < H - rady; row++) {
- tempave2[row] = tempave2[(row - 1)] + (tempave[(row + rady) * W + col] - tempave[(row - rady - 1) * W + col]) / len;
- dst[row * W + col] = dst[(row - 1) * W + col] + (tempsqave[(row + rady) * W + col] - tempsqave[(row - rady - 1) * W + col]) / len;
- }
-
- for (int row = H - rady; row < H; row++) {
- tempave2[row] = (tempave2[(row - 1)] * len - tempave[(row - rady - 1) * W + col]) / (len - 1);
- dst[row * W + col] = (dst[(row - 1) * W + col] * len - tempsqave[(row - rady - 1) * W + col]) / (len - 1);
- len --;
- }
-
- //now finish off
- for (int row = 0; row < H; row++) {
- dst[row * W + col] = fabs(dst[row * W + col] - SQR(tempave2[row]));
- //image_ave += src[row*W+col];
- }
-
- buffer3.release(pBuf3);
- }
-
- //image_ave /= (W*H);
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-template void boxdev (T* src, T* dst, int radx, int rady, int W, int H)
-{
-
- //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- //box blur image; box range = (radx,rady) i.e. box size is (2*radx+1)x(2*rady+1)
-
- AlignedBuffer* buffer1 = new AlignedBuffer (W * H);
- float* temp = buffer1->data;
-
- AlignedBuffer* buffer2 = new AlignedBuffer (W * H);
- float* tempave = buffer2->data;
-
- if (radx == 0) {
-#ifdef _OPENMP
- #pragma omp parallel for
-#endif
-
- for (int row = 0; row < H; row++)
- for (int col = 0; col < W; col++) {
- temp[row * W + col] = src[row * W + col];
- }
- } else {
- //horizontal blur
-#ifdef _OPENMP
- #pragma omp parallel for
-#endif
-
- for (int row = 0; row < H; row++) {
- int len = radx + 1;
- temp[row * W + 0] = (float)src[row * W + 0] / len;
-
- for (int j = 1; j <= radx; j++) {
- temp[row * W + 0] += (float)src[row * W + j] / len;
- }
-
- for (int col = 1; col <= radx; col++) {
- temp[row * W + col] = (temp[row * W + col - 1] * len + src[row * W + col + radx]) / (len + 1);
- len ++;
- }
-
- for (int col = radx + 1; col < W - radx; col++) {
- temp[row * W + col] = temp[row * W + col - 1] + ((float)(src[row * W + col + radx] - src[row * W + col - radx - 1])) / len;
- }
-
- for (int col = W - radx; col < W; col++) {
- temp[row * W + col] = (temp[row * W + col - 1] * len - src[row * W + col - radx - 1]) / (len - 1);
- len --;
- }
- }
- }
-
- if (rady == 0) {
-#ifdef _OPENMP
- #pragma omp parallel for
-#endif
-
- for (int row = 0; row < H; row++) {
- for (int col = 0; col < W; col++) {
- tempave[row * W + col] = temp[row * W + col];
- }
- }
- } else {
- //vertical blur
-#ifdef _OPENMP
- #pragma omp parallel for
-#endif
-
- for (int col = 0; col < W; col++) {
- int len = rady + 1;
- tempave[0 * W + col] = temp[0 * W + col] / len;
-
- for (int i = 1; i <= rady; i++) {
- tempave[0 * W + col] += temp[i * W + col] / len;
- }
-
- for (int row = 1; row <= rady; row++) {
- tempave[row * W + col] = (tempave[(row - 1) * W + col] * len + temp[(row + rady) * W + col]) / (len + 1);
- len ++;
- }
-
- for (int row = rady + 1; row < H - rady; row++) {
- tempave[row * W + col] = tempave[(row - 1) * W + col] + (temp[(row + rady) * W + col] - temp[(row - rady - 1) * W + col]) / len;
- }
-
- for (int row = H - rady; row < H; row++) {
- tempave[row * W + col] = (tempave[(row - 1) * W + col] * len - temp[(row - rady - 1) * W + col]) / (len - 1);
- len --;
- }
- }
- }
-
- //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- //box blur absolute deviation
-
-
- if (radx == 0) {
-#ifdef _OPENMP
- #pragma omp parallel for
-#endif
-
- for (int row = 0; row < H; row++)
- for (int col = 0; col < W; col++) {
- temp[row * W + col] = fabs(src[row * W + col] - tempave[row * W + col]);
- }
- } else {
- //horizontal blur
-//OpenMP here
-#ifdef _OPENMP
- #pragma omp parallel for
-#endif
-
- for (int row = 0; row < H; row++) {
- int len = radx + 1;
- temp[row * W + 0] = fabs(src[row * W + 0] - tempave[row * W + 0]) / len;
-
- for (int j = 1; j <= radx; j++) {
- temp[row * W + 0] += fabs(src[row * W + j] - tempave[row * W + j]) / len;
- }
-
- for (int col = 1; col <= radx; col++) {
- temp[row * W + col] = (temp[row * W + col - 1] * len + fabs(src[row * W + col + radx] - tempave[row * W + col + radx])) / (len + 1);
- len ++;
- }
-
- for (int col = radx + 1; col < W - radx; col++) {
- temp[row * W + col] = temp[row * W + col - 1] + (fabs(src[row * W + col + radx] - tempave[row * W + col + radx]) - \
- fabs(src[row * W + col - radx - 1] - tempave[row * W + col - radx - 1])) / len;
- }
-
- for (int col = W - radx; col < W; col++) {
- temp[row * W + col] = (temp[row * W + col - 1] * len - fabs(src[row * W + col - radx - 1] - tempave[row * W + col - radx - 1])) / (len - 1);
- len --;
- }
- }
- }
-
- if (rady == 0) {
-#ifdef _OPENMP
- #pragma omp parallel for
-#endif
-
- for (int row = 0; row < H; row++)
- for (int col = 0; col < W; col++) {
- dst[row * W + col] = temp[row * W + col];
- }
- } else {
- //vertical blur
-//OpenMP here
-#ifdef _OPENMP
- #pragma omp parallel for
-#endif
-
- for (int col = 0; col < W; col++) {
- int len = rady + 1;
- dst[0 * W + col] = temp[0 * W + col] / len;
-
- for (int i = 1; i <= rady; i++) {
- dst[0 * W + col] += temp[i * W + col] / len;
- }
-
- for (int row = 1; row <= rady; row++) {
- dst[row * W + col] = (dst[(row - 1) * W + col] * len + temp[(row + rady) * W + col]) / (len + 1);
- len ++;
- }
-
- for (int row = rady + 1; row < H - rady; row++) {
- dst[row * W + col] = dst[(row - 1) * W + col] + (temp[(row + rady) * W + col] - temp[(row - rady - 1) * W + col]) / len;
- }
-
- for (int row = H - rady; row < H; row++) {
- dst[row * W + col] = (dst[(row - 1) * W + col] * len - temp[(row - rady - 1) * W + col]) / (len - 1);
- len --;
- }
- }
- }
-
- delete buffer1;
- delete buffer2;
-
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-template void boxsqblur (T* src, A* dst, int radx, int rady, int W, int H)
-{
-
- //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- //box blur image; box range = (radx,rady) i.e. box size is (2*radx+1)x(2*rady+1)
-
- AlignedBuffer* buffer = new AlignedBuffer (W * H);
- float* temp = buffer->data;
-
- if (radx == 0) {
-#ifdef _OPENMP
- #pragma omp parallel for
-#endif
-
- for (int row = 0; row < H; row++)
- for (int col = 0; col < W; col++) {
- temp[row * W + col] = SQR(src[row * W + col]);
- }
- } else {
- //horizontal blur
-//OpenMP here
-#ifdef _OPENMP
- #pragma omp parallel for
-#endif
-
- for (int row = 0; row < H; row++) {
- int len = radx + 1;
- temp[row * W + 0] = SQR((float)src[row * W + 0]) / len;
-
- for (int j = 1; j <= radx; j++) {
- temp[row * W + 0] += SQR((float)src[row * W + j]) / len;
- }
-
- for (int col = 1; col <= radx; col++) {
- temp[row * W + col] = (temp[row * W + col - 1] * len + SQR(src[row * W + col + radx])) / (len + 1);
- len ++;
- }
-
- for (int col = radx + 1; col < W - radx; col++) {
- temp[row * W + col] = temp[row * W + col - 1] + ((float)(SQR(src[row * W + col + radx]) - SQR(src[row * W + col - radx - 1]))) / len;
- }
-
- for (int col = W - radx; col < W; col++) {
- temp[row * W + col] = (temp[row * W + col - 1] * len - SQR(src[row * W + col - radx - 1])) / (len - 1);
- len --;
- }
- }
- }
-
- if (rady == 0) {
-#ifdef _OPENMP
- #pragma omp parallel for
-#endif
-
- for (int row = 0; row < H; row++)
- for (int col = 0; col < W; col++) {
- dst[row * W + col] = temp[row * W + col];
- }
- } else {
- //vertical blur
-//OpenMP here
-#ifdef _OPENMP
- #pragma omp parallel for
-#endif
-
- for (int col = 0; col < W; col++) {
- int len = rady + 1;
- dst[0 * W + col] = temp[0 * W + col] / len;
-
- for (int i = 1; i <= rady; i++) {
- dst[0 * W + col] += temp[i * W + col] / len;
- }
-
- for (int row = 1; row <= rady; row++) {
- dst[row * W + col] = (dst[(row - 1) * W + col] * len + temp[(row + rady) * W + col]) / (len + 1);
- len ++;
- }
-
- for (int row = rady + 1; row < H - rady; row++) {
- dst[row * W + col] = dst[(row - 1) * W + col] + (temp[(row + rady) * W + col] - temp[(row - rady - 1) * W + col]) / len;
- }
-
- for (int row = H - rady; row < H; row++) {
- dst[row * W + col] = (dst[(row - 1) * W + col] * len - temp[(row - rady - 1) * W + col]) / (len - 1);
- len --;
- }
- }
- }
-
- delete buffer;
-
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-template void boxcorrelate (T* src, A* dst, int dx, int dy, int radx, int rady, int W, int H)
-{
-
- //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- //box blur image; box range = (radx,rady) i.e. box size is (2*radx+1)x(2*rady+1)
-
- AlignedBuffer* buffer = new AlignedBuffer (W * H);
- float* temp = buffer->data;
-
- if (radx == 0) {
- for (int row = 0; row < H; row++) {
- int rr = min(H - 1, max(0, row + dy));
-
- for (int col = 0; col < W; col++) {
- int cc = min(W - 1, max(0, col + dx));
- temp[row * W + col] = dy > 0 ? (src[row * W + col]) * (src[rr * W + cc]) : 0;
- }
- }
- } else {
- //horizontal blur
- for (int row = 0; row < H; row++) {
- int len = radx + 1;
- int rr = min(H - 1, max(0, row + dy));
- int cc = min(W - 1, max(0, 0 + dx));
- temp[row * W + 0] = ((float)src[row * W + 0]) * (src[rr * W + cc]) / len;
-
- for (int j = 1; j <= radx; j++) {
- int cc = min(W - 1, max(0, j + dx));
- temp[row * W + 0] += ((float)src[row * W + j]) * (src[rr * W + cc]) / len;
- }
-
- for (int col = 1; col <= radx; col++) {
- int cc = min(W - 1, max(0, col + dx + radx));
- temp[row * W + col] = (temp[row * W + col - 1] * len + (src[row * W + col + radx]) * (src[rr * W + cc])) / (len + 1);
- len ++;
- }
-
- for (int col = radx + 1; col < W - radx; col++) {
- int cc = min(W - 1, max(0, col + dx + radx));
- int cc1 = min(W - 1, max(0, col + dx - radx - 1));
- temp[row * W + col] = temp[row * W + col - 1] + ((float)((src[row * W + col + radx]) * (src[rr * W + cc]) -
- (src[row * W + col - radx - 1]) * (src[rr * W + cc1]))) / len;
- }
-
- for (int col = W - radx; col < W; col++) {
- int cc1 = min(W - 1, max(0, col + dx - radx - 1));
- temp[row * W + col] = (temp[row * W + col - 1] * len - (src[row * W + col - radx - 1]) * (src[rr * W + cc1])) / (len - 1);
- len --;
- }
- }
- }
-
- if (rady == 0) {
-#ifdef _OPENMP
- #pragma omp parallel for
-#endif
-
- for (int row = 0; row < H; row++)
- for (int col = 0; col < W; col++) {
- dst[row * W + col] = temp[row * W + col];
- }
- } else {
- //vertical blur
-//OpenMP here
-#ifdef _OPENMP
- #pragma omp parallel for
-#endif
-
- for (int col = 0; col < W; col++) {
- int len = rady + 1;
- dst[0 * W + col] = temp[0 * W + col] / len;
-
- for (int i = 1; i <= rady; i++) {
- dst[0 * W + col] += temp[i * W + col] / len;
- }
-
- for (int row = 1; row <= rady; row++) {
- dst[row * W + col] = (dst[(row - 1) * W + col] * len + temp[(row + rady) * W + col]) / (len + 1);
- len ++;
- }
-
- for (int row = rady + 1; row < H - rady; row++) {
- dst[row * W + col] = dst[(row - 1) * W + col] + (temp[(row + rady) * W + col] - temp[(row - rady - 1) * W + col]) / len;
- }
-
- for (int row = H - rady; row < H; row++) {
- dst[row * W + col] = (dst[(row - 1) * W + col] * len - temp[(row - rady - 1) * W + col]) / (len - 1);
- len --;
- }
- }
- }
-
- delete buffer;
-
-}
-
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
template SSEFUNCTION void boxabsblur (T* src, A* dst, int radx, int rady, int W, int H, float * temp)
{
@@ -1131,7 +639,5 @@ template SSEFUNCTION void boxabsblur (T* src, A* dst, int radx
}
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
}
#endif /* _BOXBLUR_H_ */
diff --git a/rtengine/cJSON.c b/rtengine/cJSON.c
index 31c43dd2e..8e9cdcccf 100644
--- a/rtengine/cJSON.c
+++ b/rtengine/cJSON.c
@@ -191,12 +191,21 @@ static const char *parse_string(cJSON *item,const char *str)
len=4;if (uc<0x80) len=1;else if (uc<0x800) len=2;else if (uc<0x10000) len=3; ptr2+=len;
+#if defined( __GNUC__ ) && __GNUC__ >= 7// silence warning
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
+#endif
+
switch (len) {
case 4: *--ptr2 =((uc | 0x80) & 0xBF); uc >>= 6;
case 3: *--ptr2 =((uc | 0x80) & 0xBF); uc >>= 6;
case 2: *--ptr2 =((uc | 0x80) & 0xBF); uc >>= 6;
case 1: *--ptr2 =(uc | firstByteMark[len]);
}
+
+#if defined( __GNUC__ ) && __GNUC__ >= 7
+#pragma GCC diagnostic pop
+#endif
ptr2+=len;
break;
default: *ptr2++=*ptr; break;
diff --git a/rtengine/ciecam02.cc b/rtengine/ciecam02.cc
index 625b77f05..77c57048a 100644
--- a/rtengine/ciecam02.cc
+++ b/rtengine/ciecam02.cc
@@ -30,7 +30,6 @@
#undef CLIPD
#define CLIPD(a) ((a)>0.0?((a)<1.0?(a):1.0):0.0)
#define MAXR(a,b) ((a) > (b) ? (a) : (b))
-#define pow_F(a,b) (xexpf(b*xlogf(a)))
namespace rtengine
{
@@ -780,7 +779,7 @@ void Ciecam02::initcam2float (float gamu, float yb, float pilotd, float f, float
void Ciecam02::xyz2jchqms_ciecam02 ( double &J, double &C, double &h, double &Q, double &M, double &s, double &aw, double &fl, double &wh,
double x, double y, double z, double xw, double yw, double zw,
- double yb, double la, double f, double c, double nc, double pilotd, int gamu, double n, double nbb, double ncb, double pfl, double cz, double d)
+ double c, double nc, int gamu, double n, double nbb, double ncb, double pfl, double cz, double d)
{
double r, g, b;
double rw, gw, bw;
@@ -1040,8 +1039,8 @@ void Ciecam02::xyz2jch_ciecam02float ( float &J, float &C, float &h, float aw, f
void Ciecam02::jch2xyz_ciecam02 ( double &x, double &y, double &z, double J, double C, double h,
- double xw, double yw, double zw, double yb, double la,
- double f, double c, double nc, int gamu, double n, double nbb, double ncb, double fl, double cz, double d, double aw )
+ double xw, double yw, double zw,
+ double c, double nc, int gamu, double n, double nbb, double ncb, double fl, double cz, double d, double aw )
{
double r, g, b;
double rc, gc, bc;
@@ -1075,7 +1074,7 @@ void Ciecam02::jch2xyz_ciecam02 ( double &x, double &y, double &z, double J, dou
void Ciecam02::jch2xyz_ciecam02float ( float &x, float &y, float &z, float J, float C, float h,
float xw, float yw, float zw,
- float f, float c, float nc, int gamu, float pow1, float nbb, float ncb, float fl, float cz, float d, float aw)
+ float c, float nc, int gamu, float pow1, float nbb, float ncb, float fl, float cz, float d, float aw)
{
float r, g, b;
float rc, gc, bc;
@@ -1110,7 +1109,7 @@ void Ciecam02::jch2xyz_ciecam02float ( float &x, float &y, float &z, float J, fl
#ifdef __SSE2__
void Ciecam02::jch2xyz_ciecam02float ( vfloat &x, vfloat &y, vfloat &z, vfloat J, vfloat C, vfloat h,
vfloat xw, vfloat yw, vfloat zw,
- vfloat f, vfloat nc, vfloat pow1, vfloat nbb, vfloat ncb, vfloat fl, vfloat d, vfloat aw, vfloat reccmcz)
+ vfloat nc, vfloat pow1, vfloat nbb, vfloat ncb, vfloat fl, vfloat d, vfloat aw, vfloat reccmcz)
{
vfloat r, g, b;
vfloat rc, gc, bc;
diff --git a/rtengine/ciecam02.h b/rtengine/ciecam02.h
index 1e0f755c1..55d807b7e 100644
--- a/rtengine/ciecam02.h
+++ b/rtengine/ciecam02.h
@@ -82,19 +82,18 @@ public:
static void jch2xyz_ciecam02 ( double &x, double &y, double &z,
double J, double C, double h,
double xw, double yw, double zw,
- double yb, double la,
- double f, double c, double nc, int gamu, double n, double nbb, double ncb, double fl, double cz, double d, double aw);
+ double c, double nc, int gamu, double n, double nbb, double ncb, double fl, double cz, double d, double aw);
static void jch2xyz_ciecam02float ( float &x, float &y, float &z,
float J, float C, float h,
float xw, float yw, float zw,
- float f, float c, float nc, int gamu, float n, float nbb, float ncb, float fl, float cz, float d, float aw );
+ float c, float nc, int gamu, float n, float nbb, float ncb, float fl, float cz, float d, float aw );
#ifdef __SSE2__
static void jch2xyz_ciecam02float ( vfloat &x, vfloat &y, vfloat &z,
vfloat J, vfloat C, vfloat h,
vfloat xw, vfloat yw, vfloat zw,
- vfloat f, vfloat nc, vfloat n, vfloat nbb, vfloat ncb, vfloat fl, vfloat d, vfloat aw, vfloat reccmcz );
+ vfloat nc, vfloat n, vfloat nbb, vfloat ncb, vfloat fl, vfloat d, vfloat aw, vfloat reccmcz );
#endif
/**
* Forward transform from XYZ to CIECAM02 JCh.
@@ -115,8 +114,7 @@ public:
double &Q, double &M, double &s, double &aw, double &fl, double &wh,
double x, double y, double z,
double xw, double yw, double zw,
- double yb, double la,
- double f, double c, double nc, double pilotd, int gamu, double n, double nbb, double ncb, double pfl, double cz, double d );
+ double c, double nc, int gamu, double n, double nbb, double ncb, double pfl, double cz, double d );
static void xyz2jch_ciecam02float ( float &J, float &C, float &h,
float aw, float fl,
diff --git a/rtengine/clutstore.cc b/rtengine/clutstore.cc
index 5731773a4..565db8faa 100644
--- a/rtengine/clutstore.cc
+++ b/rtengine/clutstore.cc
@@ -52,7 +52,7 @@ bool loadFile(
rtengine::procparams::ColorManagementParams icm;
icm.working = working_color_space;
- img_src.getImage(curr_wb, TR_NONE, img_float.get(), pp, rtengine::procparams::ToneCurveParams(), icm, rtengine::procparams::RAWParams());
+ img_src.getImage(curr_wb, TR_NONE, img_float.get(), pp, rtengine::procparams::ToneCurveParams(), rtengine::procparams::RAWParams());
if (!working_color_space.empty()) {
img_src.convertColorSpace(img_float.get(), icm, curr_wb);
diff --git a/rtengine/color.cc b/rtengine/color.cc
index 0957ac71e..7964cc472 100644
--- a/rtengine/color.cc
+++ b/rtengine/color.cc
@@ -25,8 +25,6 @@
#include "opthelper.h"
#include "iccstore.h"
-#define pow_F(a,b) (xexpf(b*xlogf(a)))
-
using namespace std;
namespace rtengine
@@ -1526,9 +1524,9 @@ void Color::interpolateRGBColor (const float balance, const float r1, const floa
void Color::interpolateRGBColor (float realL, float iplow, float iphigh, int algm, const float balance, int twoc, int metchrom,
- bool chr, bool lum, float chromat, float luma, const float r1, const float g1, const float b1,
+ float chromat, float luma, const float r1, const float g1, const float b1,
const float xl, const float yl, const float zl, const float x2, const float y2, const float z2,
- int toDo, const double xyz_rgb[3][3], const double rgb_xyz[3][3], float &ro, float &go, float &bo)
+ const double xyz_rgb[3][3], const double rgb_xyz[3][3], float &ro, float &go, float &bo)
{
float X1, Y1, Z1, X2, Y2, Z2, X, Y, Z, XL, YL, ZL;
float L1 = 0.f, L2, LL, a_1 = 0.f, b_1 = 0.f, a_2 = 0.f, b_2 = 0.f, a_L, b_L;
@@ -1620,7 +1618,7 @@ void Color::interpolateRGBColor (float realL, float iplow, float iphigh, int alg
Color::xyz2rgb(X, Y, Z, ro, go, bo, rgb_xyz);// ro go bo in gamut
}
-void Color::calcGamma (double pwr, double ts, int mode, int imax, GammaValues &gamma)
+void Color::calcGamma (double pwr, double ts, int mode, GammaValues &gamma)
{
//from Dcraw (D.Coffin)
int i;
@@ -2604,7 +2602,7 @@ void Color::gamutLchonly (float2 sincosval, float &Lprov1, float &Chprov1, const
* const double wip[3][3]: matrix for working profile
* bool multiThread : parallelize the loop
*/
-SSEFUNCTION void Color::LabGamutMunsell(float *labL, float *laba, float *labb, const int N, bool corMunsell, bool lumaMuns, bool isHLEnabled, bool gamut, const double wip[3][3], bool multiThread )
+SSEFUNCTION void Color::LabGamutMunsell(float *labL, float *laba, float *labb, const int N, bool corMunsell, bool lumaMuns, bool isHLEnabled, bool gamut, const double wip[3][3])
{
#ifdef _DEBUG
MyTime t1e, t2e;
diff --git a/rtengine/color.h b/rtengine/color.h
index 5889095ca..59e189810 100644
--- a/rtengine/color.h
+++ b/rtengine/color.h
@@ -733,7 +733,7 @@ public:
* @param go green channel of output color [0 ; 65535] (return value)
* @param bo blue channel of output color [0 ; 65535] (return value)
*/
- static void interpolateRGBColor (float realL, float iplow, float iphigh, int algm, const float balance, int twoc, int metchrom, bool chr, bool lum, float chromat, float luma, const float r1, const float g1, const float b1, const float xl, const float yl, const float zl, const float x2, const float y2, const float z2, int channels, const double xyz_rgb[3][3], const double rgb_xyz[3][3], float &ro, float &go, float &bo);
+ static void interpolateRGBColor (float realL, float iplow, float iphigh, int algm, const float balance, int twoc, int metchrom, float chromat, float luma, const float r1, const float g1, const float b1, const float xl, const float yl, const float zl, const float x2, const float y2, const float z2, const double xyz_rgb[3][3], const double rgb_xyz[3][3], float &ro, float &go, float &bo);
/**
@@ -898,7 +898,7 @@ public:
* gamma4 used in ip2Lab2rgb [0 ; 1], usually near 0.03(return value)
* gamma5 used in ip2Lab2rgb [0 ; 1], usually near 0.5 (return value)
*/
- static void calcGamma (double pwr, double ts, int mode, int imax, GammaValues &gamma);
+ static void calcGamma (double pwr, double ts, int mode, GammaValues &gamma);
/**
@@ -1310,7 +1310,7 @@ public:
* @param wip matrix for working profile
* @param multiThread whether to parallelize the loop or not
*/
- static void LabGamutMunsell (float *labL, float *laba, float *labb, const int N, bool corMunsell, bool lumaMuns, bool isHLEnabled, bool gamut, const double wip[3][3], bool multiThread );
+ static void LabGamutMunsell (float *labL, float *laba, float *labb, const int N, bool corMunsell, bool lumaMuns, bool isHLEnabled, bool gamut, const double wip[3][3]);
/*
diff --git a/rtengine/colortemp.cc b/rtengine/colortemp.cc
index ea90f2735..ab318aa73 100644
--- a/rtengine/colortemp.cc
+++ b/rtengine/colortemp.cc
@@ -24,11 +24,6 @@
#include "sleef.c"
#include "settings.h"
-#undef CLIPD
-#define CLIPD(a) ((a)>0.0?((a)<1.0?(a):1.0):0.0)
-#define CLIPQQ(a) ((a)>0?((a)<250?(a):250):0)
-#define MAXR(a,b) ((a) > (b) ? (a) : (b))
-
namespace rtengine
{
@@ -70,48 +65,22 @@ static const double cie_colour_match_jd[97][3] = {//350nm to 830nm 5 nm J.Desm
{0.000001251141, 0.00000045181, 0.000000}
};
-ColorTemp::ColorTemp (double t, double g, double e, const Glib::ustring &m) : temp(t), green(g), equal(e), method(m)
+ColorTemp::ColorTemp (double t, double g, double e, const std::string &m) : temp(t), green(g), equal(e), method(m)
{
-
clip (temp, green, equal);
}
void ColorTemp::clip (double &temp, double &green)
{
-
- if (temp < MINTEMP) {
- temp = MINTEMP;
- } else if (temp > MAXTEMP) {
- temp = MAXTEMP;
- }
-
- if (green < MINGREEN) {
- green = MINGREEN;
- } else if (green > MAXGREEN) {
- green = MAXGREEN;
- }
+ temp = rtengine::LIM(temp, MINTEMP, MAXTEMP);
+ green = rtengine::LIM(green, MINGREEN, MAXGREEN);
}
void ColorTemp::clip (double &temp, double &green, double &equal)
{
-
- if (temp < MINTEMP) {
- temp = MINTEMP;
- } else if (temp > MAXTEMP) {
- temp = MAXTEMP;
- }
-
- if (green < MINGREEN) {
- green = MINGREEN;
- } else if (green > MAXGREEN) {
- green = MAXGREEN;
- }
-
- if(equal < MINEQUAL) {
- equal = MINEQUAL;
- } else if(equal > MAXEQUAL) {
- equal = MAXEQUAL;
- }
+ temp = rtengine::LIM(temp, MINTEMP, MAXTEMP);
+ green = rtengine::LIM(green, MINGREEN, MAXGREEN);
+ equal = rtengine::LIM(equal, MINEQUAL, MAXEQUAL);
}
ColorTemp::ColorTemp (double mulr, double mulg, double mulb, double e) : equal(e), method("Custom")
@@ -122,7 +91,7 @@ ColorTemp::ColorTemp (double mulr, double mulg, double mulb, double e) : equal(e
void ColorTemp::mul2temp (const double rmul, const double gmul, const double bmul, const double equal, double& temp, double& green) const
{
- double maxtemp = double(MAXTEMP), mintemp = double(MINTEMP);
+ double maxtemp = MAXTEMP, mintemp = MINTEMP;
double tmpr, tmpg, tmpb;
temp = (maxtemp + mintemp) / 2;
@@ -354,6 +323,37 @@ const double ColorTemp::Flash6500_spect[97] = {
55.72, 51.97, 54.72, 57.46, 58.89, 60.33
};
+const std::map ColorTemp::spectMap = {
+ {"Daylight", Daylight5300_spect},
+ {"Cloudy", Cloudy6200_spect},
+ {"Shade", Shade7600_spect},
+ {"Tungsten", A2856_spect},
+ {"Fluo F1", FluoF1_spect},
+ {"Fluo F2", FluoF2_spect},
+ {"Fluo F3", FluoF3_spect},
+ {"Fluo F4", FluoF4_spect},
+ {"Fluo F5", FluoF5_spect},
+ {"Fluo F6", FluoF6_spect},
+ {"Fluo F7", FluoF7_spect},
+ {"Fluo F8", FluoF8_spect},
+ {"Fluo F9", FluoF9_spect},
+ {"Fluo F10", FluoF10_spect},
+ {"Fluo F11", FluoF11_spect},
+ {"Fluo F12", FluoF12_spect},
+ {"HMI Lamp", HMI_spect},
+ {"GTI Lamp", GTI_spect},
+ {"JudgeIII Lamp", JudgeIII_spect},
+ {"Solux Lamp 3500K", Solux3500_spect},
+ {"Solux Lamp 4100K", Solux4100_spect},
+ {"Solux Lamp 4700K", Solux4700_spect},
+ {"NG Solux Lamp 4700K", NG_Solux4700_spect},
+ {"LED LSI Lumelex 2040", NG_LEDLSI2040_spect},
+ {"LED CRS SP12 WWMR16", NG_CRSSP12WWMR16_spect},
+ {"Flash 5500K", Flash5500_spect},
+ {"Flash 6000K", Flash6000_spect},
+ {"Flash 6500K", Flash6500_spect}
+ };
+
// Data for Color ==> CRI (Color Rendering Index and Palette
// actually 20 color that must be good enough for CRI
@@ -844,10 +844,7 @@ const double ColorTemp::ColabSky42_0_m24_spect[97] = {
* Gunter Wyszecki and W. S. Stiles, John Wiley & Sons, 1982, pp. 227, 228.
*/
//adaptation to RT by J.Desmis
-#include
-/* LERP(a,b,c) = linear interpolation macro, is 'a' when c == 0.0 and 'b' when c == 1.0 */
-#define LERP(a,b,c) (((b) - (a)) * (c) + (a))
int ColorTemp::XYZtoCorColorTemp(double x0, double y0, double z0, double &temp) const
{
@@ -922,13 +919,13 @@ int ColorTemp::XYZtoCorColorTemp(double x0, double y0, double z0, double &temp)
}
if (i == 31) {
- return(-1); /* bad XYZ input, color temp would be less than minimum of 1666.7 degrees, or too far towards blue */
+ return -1; /* bad XYZ input, color temp would be less than minimum of 1666.7 degrees, or too far towards blue */
}
di = di / sqrt(1.0 + uvt[i ].t * uvt[i ].t);
dm = dm / sqrt(1.0 + uvt[i - 1].t * uvt[i - 1].t);
p = dm / (dm - di); /* p = interpolation parameter, 0.0 : i-1, 1.0 : i */
- p = 1.0 / (LERP(rt[i - 1], rt[i], p));
+ p = 1.0 / rtengine::intp(p, rt[i], rt[i - 1]);
temp = p;
return 0; /* success */
}
@@ -1025,192 +1022,15 @@ void ColorTemp::cieCAT02(double Xw, double Yw, double Zw, double &CAM02BB00, dou
}
-void ColorTemp::temp2mulxyz (double tem, double gree, const std::string &method, double &Xxyz, double &Zxyz)
+void ColorTemp::temp2mulxyz (double temp, const std::string &method, double &Xxyz, double &Zxyz)
{
- double xD, yD, x_D, y_D, interm;
double x, y, z;
- if (method == "Daylight" ) {
- spectrum_to_xyz_preset(Daylight5300_spect, x, y, z);
- } else if(method == "Cloudy" ) {
- spectrum_to_xyz_preset(Cloudy6200_spect, x, y, z);
- } else if(method == "Shade" ) {
- spectrum_to_xyz_preset(Shade7600_spect, x, y, z);
- } else if(method == "Tungsten" ) {
- spectrum_to_xyz_preset(A2856_spect, x, y, z);
- } else if(method == "Fluo F1" ) {
- spectrum_to_xyz_preset(FluoF1_spect, x, y, z);
- } else if(method == "Fluo F2" ) {
- spectrum_to_xyz_preset(FluoF2_spect, x, y, z);
- } else if(method == "Fluo F3" ) {
- spectrum_to_xyz_preset(FluoF3_spect, x, y, z);
- } else if(method == "Fluo F4" ) {
- spectrum_to_xyz_preset(FluoF4_spect, x, y, z);
- } else if(method == "Fluo F5" ) {
- spectrum_to_xyz_preset(FluoF5_spect, x, y, z);
- } else if(method == "Fluo F6" ) {
- spectrum_to_xyz_preset(FluoF6_spect, x, y, z);
- } else if(method == "Fluo F7" ) {
- spectrum_to_xyz_preset(FluoF7_spect, x, y, z);
- } else if(method == "Fluo F8" ) {
- spectrum_to_xyz_preset(FluoF8_spect, x, y, z);
- } else if(method == "Fluo F9" ) {
- spectrum_to_xyz_preset(FluoF9_spect, x, y, z);
- } else if(method == "Fluo F10" ) {
- spectrum_to_xyz_preset(FluoF10_spect, x, y, z);
- } else if(method == "Fluo F11" ) {
- spectrum_to_xyz_preset(FluoF11_spect, x, y, z);
- } else if(method == "Fluo F12" ) {
- spectrum_to_xyz_preset(FluoF12_spect, x, y, z);
- } else if(method == "HMI Lamp" ) {
- spectrum_to_xyz_preset(HMI_spect, x, y, z);
- } else if(method == "GTI Lamp" ) {
- spectrum_to_xyz_preset(GTI_spect, x, y, z);
- } else if(method == "JudgeIII Lamp" ) {
- spectrum_to_xyz_preset(JudgeIII_spect, x, y, z);
- } else if(method == "Solux Lamp 3500K" ) {
- spectrum_to_xyz_preset(Solux3500_spect, x, y, z);
- } else if(method == "Solux Lamp 4100K" ) {
- spectrum_to_xyz_preset(Solux4100_spect, x, y, z);
- } else if(method == "Solux Lamp 4700K" ) {
- spectrum_to_xyz_preset(Solux4700_spect, x, y, z);
- } else if(method == "NG Solux Lamp 4700K" ) {
- spectrum_to_xyz_preset(NG_Solux4700_spect, x, y, z);
- } else if(method == "LED LSI Lumelex 2040") {
- spectrum_to_xyz_preset(NG_LEDLSI2040_spect, x, y, z);
- } else if(method == "LED CRS SP12 WWMR16" ) {
- spectrum_to_xyz_preset(NG_CRSSP12WWMR16_spect, x, y, z);
- } else if(method == "Flash 5500K" ) {
- spectrum_to_xyz_preset(Flash5500_spect, x, y, z);
- } else if(method == "Flash 6000K" ) {
- spectrum_to_xyz_preset(Flash6000_spect, x, y, z);
- } else if(method == "Flash 6500K" ) {
- spectrum_to_xyz_preset(Flash6500_spect, x, y, z);
- } else {
- // otherwise we use the Temp+Green generic solution
- if (tem <= INITIALBLACKBODY) {
- // if temperature is between 2000K and 4000K we use blackbody, because there will be no Daylight reference below 4000K...
- // of course, the previous version of RT used the "magical" but wrong formula of U.Fuchs (Ufraw).
- spectrum_to_xyz_blackbody(tem, x, y, z);
- } else {
- // from 4000K up to 25000K: using the D illuminant (daylight) which is standard
- double m1, m2;
-
- if (tem <= 7000) {
- x_D = -4.6070e9 / (tem * tem * tem) + 2.9678e6 / (tem * tem) + 0.09911e3 / tem + 0.244063;
- } else if (tem <= 25000) {
- x_D = -2.0064e9 / (tem * tem * tem) + 1.9018e6 / (tem * tem) + 0.24748e3 / tem + 0.237040;
- } else /*if (tem > 25000)*/ {
- x_D = -2.0064e9 / (tem * tem * tem) + 1.9018e6 / (tem * tem) + 0.24748e3 / tem + 0.237040 - ((tem - 25000) / 25000) * 0.025; //Jacques empirical adjustemnt for very high temp (underwater !)
- }
-
- y_D = -3.0 * x_D * x_D + 2.87 * x_D - 0.275;
- //calculate D -daylight in function of s0, s1, s2 and temp ==> x_D y_D
- //S(lamda)=So(lambda)+m1*s1(lambda)+m2*s2(lambda)
- interm = (0.0241 + 0.2562 * x_D - 0.734 * y_D);
- m1 = (-1.3515 - 1.7703 * x_D + 5.9114 * y_D) / interm;
- m2 = (0.03 - 31.4424 * x_D + 30.0717 * y_D) / interm;
- spectrum_to_xyz_daylight(m1, m2, x, y, z);
- xD = x;
- yD = y;
- }
-
- }
-
- xD = x;
- yD = y;
-
- double X = xD / yD;
- double Z = (1.0 - xD - yD) / yD;
- Xxyz = X;
- Zxyz = Z;
- //printf("Xxyz=%f Zxyz=%f\n",Xxyz,Zxyz);
-}
-
-void ColorTemp::temp2mul (double temp, double green, double equal, double& rmul, double& gmul, double& bmul) const
-{
-
- clip (temp, green, equal);
-
- //printf("temp=%d green=%.3f equal=%.3f\n", (int)temp, (float) green, (float) equal);
-
- //variables for CRI and display Lab, and palette
- double xD, yD, x_D, y_D, interm;
- double m1, m2;
-
- double x, y, z;
- double Xchk[50], Ychk[50], Zchk[50]; //50 : I think it's a good limit for number of color : for CRI and Palette
- double Xcam02[50], Ycam02[50], Zcam02[50];
-
- double XchkLamp[50], YchkLamp[50], ZchkLamp[50];
- double Xcam02Lamp[50], Ycam02Lamp[50], Zcam02Lamp[50];
- const double epsilon = 0.008856; //Lab
- const double whiteD50[3] = {0.9646019585, 1.0, 0.8244507152}; //calculate with this tool : spect 5nm
- double CAM02BB00, CAM02BB01, CAM02BB02, CAM02BB10, CAM02BB11, CAM02BB12, CAM02BB20, CAM02BB21, CAM02BB22; //for CIECAT02
-
- double xr[50], yr[50], zr[50];
- double fx[50], fy[50], fz[50];
-
-// bool palette = false;
- // double tempalet; // correlated temperature
-
// We first test for specially handled methods
- if (method == "Daylight" ) {
- spectrum_to_xyz_preset(Daylight5300_spect, x, y, z);
- } else if(method == "Cloudy" ) {
- spectrum_to_xyz_preset(Cloudy6200_spect, x, y, z);
- } else if(method == "Shade" ) {
- spectrum_to_xyz_preset(Shade7600_spect, x, y, z);
- } else if(method == "Tungsten" ) {
- spectrum_to_xyz_preset(A2856_spect, x, y, z);
- } else if(method == "Fluo F1" ) {
- spectrum_to_xyz_preset(FluoF1_spect, x, y, z);
- } else if(method == "Fluo F2" ) {
- spectrum_to_xyz_preset(FluoF2_spect, x, y, z);
- } else if(method == "Fluo F3" ) {
- spectrum_to_xyz_preset(FluoF3_spect, x, y, z);
- } else if(method == "Fluo F4" ) {
- spectrum_to_xyz_preset(FluoF4_spect, x, y, z);
- } else if(method == "Fluo F5" ) {
- spectrum_to_xyz_preset(FluoF5_spect, x, y, z);
- } else if(method == "Fluo F6" ) {
- spectrum_to_xyz_preset(FluoF6_spect, x, y, z);
- } else if(method == "Fluo F7" ) {
- spectrum_to_xyz_preset(FluoF7_spect, x, y, z);
- } else if(method == "Fluo F8" ) {
- spectrum_to_xyz_preset(FluoF8_spect, x, y, z);
- } else if(method == "Fluo F9" ) {
- spectrum_to_xyz_preset(FluoF9_spect, x, y, z);
- } else if(method == "Fluo F10" ) {
- spectrum_to_xyz_preset(FluoF10_spect, x, y, z);
- } else if(method == "Fluo F11" ) {
- spectrum_to_xyz_preset(FluoF11_spect, x, y, z);
- } else if(method == "Fluo F12" ) {
- spectrum_to_xyz_preset(FluoF12_spect, x, y, z);
- } else if(method == "HMI Lamp" ) {
- spectrum_to_xyz_preset(HMI_spect, x, y, z);
- } else if(method == "GTI Lamp" ) {
- spectrum_to_xyz_preset(GTI_spect, x, y, z);
- } else if(method == "JudgeIII Lamp" ) {
- spectrum_to_xyz_preset(JudgeIII_spect, x, y, z);
- } else if(method == "Solux Lamp 3500K" ) {
- spectrum_to_xyz_preset(Solux3500_spect, x, y, z);
- } else if(method == "Solux Lamp 4100K" ) {
- spectrum_to_xyz_preset(Solux4100_spect, x, y, z);
- } else if(method == "Solux Lamp 4700K" ) {
- spectrum_to_xyz_preset(Solux4700_spect, x, y, z);
- } else if(method == "NG Solux Lamp 4700K" ) {
- spectrum_to_xyz_preset(NG_Solux4700_spect, x, y, z);
- } else if(method == "LED LSI Lumelex 2040") {
- spectrum_to_xyz_preset(NG_LEDLSI2040_spect, x, y, z);
- } else if(method == "LED CRS SP12 WWMR16" ) {
- spectrum_to_xyz_preset(NG_CRSSP12WWMR16_spect, x, y, z);
- } else if(method == "Flash 5500K" ) {
- spectrum_to_xyz_preset(Flash5500_spect, x, y, z);
- } else if(method == "Flash 6000K" ) {
- spectrum_to_xyz_preset(Flash6000_spect, x, y, z);
- } else if(method == "Flash 6500K" ) {
- spectrum_to_xyz_preset(Flash6500_spect, x, y, z);
+ const auto iterator = spectMap.find(method);
+
+ if (iterator != spectMap.end()) {
+ spectrum_to_xyz_preset(iterator->second, x, y, z);
} else {
// otherwise we use the Temp+Green generic solution
if (temp <= INITIALBLACKBODY) {
@@ -1219,48 +1039,42 @@ void ColorTemp::temp2mul (double temp, double green, double equal, double& rmul,
spectrum_to_xyz_blackbody(temp, x, y, z);
} else {
// from 4000K up to 25000K: using the D illuminant (daylight) which is standard
+ double x_D, y_D;
if (temp <= 7000) {
x_D = -4.6070e9 / (temp * temp * temp) + 2.9678e6 / (temp * temp) + 0.09911e3 / temp + 0.244063;
} else if (temp <= 25000) {
x_D = -2.0064e9 / (temp * temp * temp) + 1.9018e6 / (temp * temp) + 0.24748e3 / temp + 0.237040;
- } else /*if (temp > 25000)*/ { // above 25000 it's unknown..then I have modified to adjust for underwater
- x_D = -2.0064e9 / (temp * temp * temp) + 1.9018e6 / (temp * temp) + 0.24748e3 / temp + 0.237040 - ((temp - 25000) / 25000) * 0.025; //Jacques empirical adjustemnt for very high temp (underwater !)
+ } else /*if (temp > 25000)*/ {
+ x_D = -2.0064e9 / (temp * temp * temp) + 1.9018e6 / (temp * temp) + 0.24748e3 / temp + 0.237040 - ((temp - 25000) / 25000) * 0.025; //Jacques empirical adjustment for very high temp (underwater !)
}
- y_D = (-3.0 * x_D * x_D + 2.87 * x_D - 0.275); //modify blue / red action
+ y_D = -3.0 * x_D * x_D + 2.87 * x_D - 0.275; //modify blue / red action
//calculate D -daylight in function of s0, s1, s2 and temp ==> x_D y_D
//S(lamda)=So(lambda)+m1*s1(lambda)+m2*s2(lambda)
- interm = (0.0241 + 0.2562 * x_D - 0.734 * y_D);
- m1 = (-1.3515 - 1.7703 * x_D + 5.9114 * y_D) / interm;
- m2 = (0.03 - 31.4424 * x_D + 30.0717 * y_D) / interm;
+ double interm = 0.0241 + 0.2562 * x_D - 0.734 * y_D;
+ double m1 = (-1.3515 - 1.7703 * x_D + 5.9114 * y_D) / interm;
+ double m2 = (0.03 - 31.4424 * x_D + 30.0717 * y_D) / interm;
spectrum_to_xyz_daylight(m1, m2, x, y, z);
- xD = x;
- yD = y;
}
}
- xD = x;
- yD = y;
+ Xxyz = x / y;
+ Zxyz = (1.0 - x - y) / y;
+}
+
+void ColorTemp::temp2mul (double temp, double green, double equal, double& rmul, double& gmul, double& bmul) const
+{
+ clip(temp, green, equal);
+ double Xwb, Zwb;
+ temp2mulxyz(temp, method, Xwb, Zwb);
+
float adj = 1.f;
if(equal < 0.9999 || equal > 1.0001 ) {
adj = (100.f + ( 1000.f - (1000.f * (float)equal) ) / 20.f) / 100.f;
}
- //printf("adj=%f\n",adj);
- double Xwb = xD / yD;
- double Ywb = 1.0;
- double Zwb = (1.0 - xD - yD) / yD;
-
- if (settings->verbose) {
- // double u=4*xD/(-2*xD+12*yD+3);
- // double v=6*yD/(-2*xD+12*yD+3);
- // printf("xD=%f yD=%f u=%f v=%f\n",xD,yD,u,v);
- if(settings->CRI_color != 0) {
- printf("xD=%f yD=%f === Xwb=%f Ywb=%f Zwb=%f\n", xD, yD, Xwb, Ywb, Zwb);
- }
- }
/*if (isRaw) {
rmul = sRGB_xyz[0][0]*X + sRGB_xyz[0][1]*Y + sRGB_xyz[0][2]*Z;
@@ -1268,36 +1082,41 @@ void ColorTemp::temp2mul (double temp, double green, double equal, double& rmul,
bmul = sRGB_xyz[2][0]*X + sRGB_xyz[2][1]*Y + sRGB_xyz[2][2]*Z;
} else {*/
//recalculate channels multipliers with new values of XYZ tue to whitebalance
- rmul = sRGBd65_xyz[0][0] * Xwb * adj + sRGBd65_xyz[0][1] * Ywb + sRGBd65_xyz[0][2] * Zwb / adj; // Jacques' empirical modification 5/2013
- gmul = sRGBd65_xyz[1][0] * Xwb + sRGBd65_xyz[1][1] * Ywb + sRGBd65_xyz[1][2] * Zwb;
- bmul = sRGBd65_xyz[2][0] * Xwb * adj + sRGBd65_xyz[2][1] * Ywb + sRGBd65_xyz[2][2] * Zwb / adj;
+ rmul = sRGBd65_xyz[0][0] * Xwb * adj + sRGBd65_xyz[0][1] + sRGBd65_xyz[0][2] * Zwb / adj; // Jacques' empirical modification 5/2013
+ gmul = sRGBd65_xyz[1][0] * Xwb + sRGBd65_xyz[1][1] + sRGBd65_xyz[1][2] * Zwb;
+ bmul = sRGBd65_xyz[2][0] * Xwb * adj + sRGBd65_xyz[2][1] + sRGBd65_xyz[2][2] * Zwb / adj;
//};
gmul /= green;
//printf("rmul=%f gmul=%f bmul=%f\n",rmul, gmul, bmul);
- double max = rmul;
-
- if (gmul > max) {
- max = gmul;
- }
-
- if (bmul > max) {
- max = bmul;
- }
+ double max = rtengine::max(rmul, gmul, bmul);
rmul /= max;
gmul /= max;
bmul /= max;
- // begin CRI_RT : color rendering index RT - adaptation of CRI by J.Desmis
- // CRI = 100 for Blackbody and Daylight
- // calculate from spectral data values X, Y, Z , for color of colorchecker24 , SG, DC, JDC_468
- //only for lamp different of tungstene
- //first calcul with illuminant (choice)
- // and calcul with : blackbody at equivalent temp of lamp
- if(settings->CRI_color != 0) //activate if CRi_color !=0
+ if(settings->CRI_color != 0) { //activate if CRi_color !=0
+ // begin CRI_RT : color rendering index RT - adaptation of CRI by J.Desmis
+ // CRI = 100 for Blackbody and Daylight
+ // calculate from spectral data values X, Y, Z , for color of colorchecker24 , SG, DC, JDC_468
+ // only for lamp different of tungstene
+ // first calcul with illuminant (choice)
+ // and calcul with : blackbody at equivalent temp of lamp
// CRI_color-1 = dispaly Lab values of color CRI_color -1
- {
+ const double whiteD50[3] = {0.9646019585, 1.0, 0.8244507152}; //calculate with this tool : spect 5nm
+ double CAM02BB00, CAM02BB01, CAM02BB02, CAM02BB10, CAM02BB11, CAM02BB12, CAM02BB20, CAM02BB21, CAM02BB22; //for CIECAT02
+ double Xchk[50], Ychk[50], Zchk[50]; //50 : I think it's a good limit for number of color : for CRI and Palette
+ double Xcam02[50], Ycam02[50], Zcam02[50];
+
+ double XchkLamp[50], YchkLamp[50], ZchkLamp[50];
+ double Xcam02Lamp[50], Ycam02Lamp[50], Zcam02Lamp[50];
+ const double epsilon = 0.008856; //Lab
+
+ double xr[50], yr[50], zr[50];
+ double fx[50], fy[50], fz[50];
+ double x, y, z;
+ double Ywb = 1.0;
+
int illum;
int numero_color = settings->CRI_color - 1;
diff --git a/rtengine/colortemp.h b/rtengine/colortemp.h
index 2d346dd81..d96e6f5ce 100644
--- a/rtengine/colortemp.h
+++ b/rtengine/colortemp.h
@@ -19,22 +19,19 @@
#ifndef _COLORTEMP_
#define _COLORTEMP_
-#include
#include
-
-#define pow_F(a,b) (xexpf(b*xlogf(a)))
+#include