diff --git a/CMakeLists.txt b/CMakeLists.txt
index 31a04b569..a7e29e03a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -296,7 +296,7 @@ endif (WITH_PROF)
if (OPTION_OMP)
find_package(OpenMP)
if (OPENMP_FOUND)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS} -Werror=unknown-pragmas")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS} -Werror=unknown-pragmas -Wall -Wno-unused-result -Wno-deprecated-declarations")
endif (OPENMP_FOUND)
endif (OPTION_OMP)
diff --git a/rtdata/languages/Catala b/rtdata/languages/Catala
index e311b3a40..d2c610e9e 100644
--- a/rtdata/languages/Catala
+++ b/rtdata/languages/Catala
@@ -983,8 +983,13 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!DYNPROFILEEDITOR_PROFILE;Processing Profile
!EDIT_OBJECT_TOOLTIP;Displays a widget on the preview window which lets you adjust this tool.
!EDIT_PIPETTE_TOOLTIP;To add an adjustment point to the curve, hold the Ctrl key while left-clicking the desired spot in the image preview.\nTo adjust the point, hold the Ctrl key while left-clicking the corresponding area in the preview, then let go of Ctrl (unless you desire fine control) and while still holding the left mouse button move the mouse up or down to move that point up or down in the curve.
+!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_EQUALIZER;Bypass Wavelet Levels
!EXPORT_BYPASS_RAW_LMMSE_ITERATIONS;Bypass [raw] LMMSE Enhancement Steps
+!EXPORT_PIPELINE;Processing pipeline
+!EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image)
+!EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality.
+!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end)
!FILEBROWSER_COLORLABEL_TOOLTIP;Color label.\n\nUse dropdown menu or shortcuts:\nShift-Ctrl-0 No Color\nShift-Ctrl-1 Red\nShift-Ctrl-2 Yellow\nShift-Ctrl-3 Green\nShift-Ctrl-4 Blue\nShift-Ctrl-5 Purple
!FILEBROWSER_POPUPCOLORLABEL0;Label: None
!FILEBROWSER_POPUPCOLORLABEL1;Label: Red
@@ -1003,6 +1008,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!FILEBROWSER_RANK3_TOOLTIP;Rank 3 *\nShortcut: Shift-3
!FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nShortcut: Shift-4
!FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nShortcut: Shift-5
+!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
!FILEBROWSER_SHOWNOTTRASHHINT;Show only non-deleted images.
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
!FILEBROWSER_UNRANK_TOOLTIP;Unrank.\nShortcut: Shift-0
@@ -1379,8 +1385,11 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!PARTIALPASTE_PREPROCESS_DEADPIXFILT;Dead pixel filter
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
+!PARTIALPASTE_RAWCACORR_CAAUTOSTRENGTH;CA auto-correction strength
+!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
!PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps
+!PARTIALPASTE_RAW_PIXELSHIFT;PixelShift
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_AUTLISLOW;Low
@@ -1417,6 +1426,8 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4
!PREFERENCES_DAUB_TOOLTIP;The Noise Reduction and Wavelet Levels tools use a Debauchies mother wavelet. If you choose D6 instead of D4 you increase the number of orthogonal Daubechies coefficients and probably increase quality of small-scale levels. There is no memory or processing time difference between the two.
!PREFERENCES_EXPAUT;Expert
+!PREFERENCES_EXTENDEDZOOMLEVELS;Use finer-grained zoom levels for "fit to screen" zooming
+!PREFERENCES_EXTENDEDZOOMLEVELS_TOOLTIP;This allows to better fill the editor window when using one of the "fit to screen" zoom modes. However, the preview quality might be slightly degraded, depending on the actual zoom factor computed.
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FLUOF2;Fluorescent F2
!PREFERENCES_FLUOF7;Fluorescent F7
@@ -1817,28 +1828,28 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!TP_RAWEXPOS_BLACK_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_RGB;Red, Green, Blue
-!TP_RAW_1-PASS (MEDIUM);1-pass (medium)
-!TP_RAW_3-PASS (BEST);3-pass (best)
-!TP_RAW_AHD;ahd
+!TP_RAW_1PASSMEDIUM;1-Pass (Medium)
+!TP_RAW_3PASSBEST;3-Pass (Best)
+!TP_RAW_AHD;AHD
!TP_RAW_AMAZE;AMaZE
-!TP_RAW_DCB;dcb
+!TP_RAW_DCB;DCB
!TP_RAW_DMETHOD_PROGRESSBAR;%1 demosaicing...
!TP_RAW_DMETHOD_PROGRESSBAR_REFINE;Demosaicing refinement...
-!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixelshift is for Pentax pixelshift files. It falls back to Amaze for non pixelshift files.
-!TP_RAW_EAHD;eahd
-!TP_RAW_FAST;fast
+!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixel Shift is for Pentax Pixel Shift files. It falls back to AMaZE for non-Pixel Shift files.
+!TP_RAW_EAHD;EAHD
+!TP_RAW_FAST;Fast
!TP_RAW_HD;Threshold
!TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, but false positives may lead to artifacts. If you notice any artifacts appearing when enabling the Hot/Dead Pixel Filters, gradually increase the threshold value until they disappear.
-!TP_RAW_HPHD;hphd
-!TP_RAW_IGV;igv
+!TP_RAW_HPHD;HPHD
+!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
-!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel-Shift, Dual Sensitivity). Use this button to select the sub-image.\n\nThe last sub-image will be used if you select a value beyond the real sub-image count.
-!TP_RAW_LMMSE;lmmse
+!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel Shift, Dual Pixel, Dual Sensitivity). Use this button to select the sub-image.
+!TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps
!TP_RAW_LMMSE_TOOLTIP;Adds gamma (step 1), median (steps 2-4) and refinement (steps 5-6) to reduce artifacts and improve the signal-to-noise ratio.
-!TP_RAW_MONO;mono
-!TP_RAW_NONE;none (show sensor pattern)
-!TP_RAW_PIXELSHIFT;Pixel Shift (Pentax)
+!TP_RAW_MONO;Mono
+!TP_RAW_NONE;None (Shows sensor pattern)
+!TP_RAW_PIXELSHIFT;Pixel Shift
!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
!TP_RAW_PIXELSHIFTBLUR_TOOLTIP;Blur motion mask
@@ -1887,7 +1898,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
!TP_RAW_SENSOR_XTRANS_LABEL;Sensor with X-Trans Matrix
-!TP_RAW_VNG4;vng4
+!TP_RAW_VNG4;VNG4
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
diff --git a/rtdata/languages/Chinese (Simplified) b/rtdata/languages/Chinese (Simplified)
index b5a74f58d..0955d7ea8 100644
--- a/rtdata/languages/Chinese (Simplified)
+++ b/rtdata/languages/Chinese (Simplified)
@@ -815,6 +815,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!EDIT_PIPETTE_TOOLTIP;To add an adjustment point to the curve, hold the Ctrl key while left-clicking the desired spot in the image preview.\nTo adjust the point, hold the Ctrl key while left-clicking the corresponding area in the preview, then let go of Ctrl (unless you desire fine control) and while still holding the left mouse button move the mouse up or down to move that point up or down in the curve.
!EXIFFILTER_EXPOSURECOMPENSATION;Exposure compensation (EV)
!EXIFFILTER_METADATAFILTER;Enable metadata filters
+!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_DEFRINGE;Bypass Defringe
!EXPORT_BYPASS_DIRPYRDENOISE;Bypass Noise Reduction
!EXPORT_BYPASS_DIRPYREQUALIZER;Bypass Contrast by Detail Levels
@@ -831,7 +832,11 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!EXPORT_BYPASS_SHARPENMICRO;Bypass Microcontrast
!EXPORT_BYPASS_SH_HQ;Bypass Sharp Mask Shadows/Highlights
!EXPORT_INSTRUCTIONS;Fast Export options provide overrides to bypass time and resource consuming development settings and to run queue processing using the fast export settings instead. This method is recommended for quicker generation of lower resolution images when speed is a priority or when resized output is desired for one or many images without making modifications to their saved development parameters.
+!EXPORT_PIPELINE;Processing pipeline
!EXPORT_RAW_DMETHOD;Demosaic method
+!EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image)
+!EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality.
+!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end)
!EXTPROGTARGET_2;queue-processed
!FILEBROWSER_ADDDELTEMPLATE;Add/Del templates...
!FILEBROWSER_APPLYPROFILE_PARTIAL;Apply - partial
@@ -854,6 +859,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!FILEBROWSER_POPUPRANK;Rank
!FILEBROWSER_POPUPRANK0;Unrank
!FILEBROWSER_QUERYHINT;Type filenames to search for. Supports partial filenames. Separate the search terms using commas, e.g.\n1001,1004,1199\n\nExclude search terms by prefixing them with !=\ne.g.\n!=1001,1004,1199\n\nShortcuts:\nCtrl-f - focus the Find box,\nEnter - search,\nEsc - clear the Find box,\nShift-Esc - defocus the Find box.
+!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
!FILEBROWSER_SHOWCOLORLABEL1HINT;Show images labeled Red.\nShortcut: Alt-1
!FILEBROWSER_SHOWCOLORLABEL2HINT;Show images labeled Yellow.\nShortcut: Alt-2
!FILEBROWSER_SHOWCOLORLABEL3HINT;Show images labeled Green.\nShortcut: Alt-3
@@ -1302,6 +1308,8 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!PARTIALPASTE_PREPROCESS_DEADPIXFILT;Dead pixel filter
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
+!PARTIALPASTE_RAWCACORR_CAAUTOSTRENGTH;CA auto-correction strength
+!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
@@ -1311,6 +1319,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!PARTIALPASTE_RAW_FALSECOLOR;False color suppression
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
!PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps
+!PARTIALPASTE_RAW_PIXELSHIFT;PixelShift
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_AUTLISLOW;Low
@@ -1351,6 +1360,8 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!PREFERENCES_DIRDARKFRAMES;Dark-frames directory
!PREFERENCES_EDITORLAYOUT;Editor Layout
!PREFERENCES_EXPAUT;Expert
+!PREFERENCES_EXTENDEDZOOMLEVELS;Use finer-grained zoom levels for "fit to screen" zooming
+!PREFERENCES_EXTENDEDZOOMLEVELS_TOOLTIP;This allows to better fill the editor window when using one of the "fit to screen" zoom modes. However, the preview quality might be slightly degraded, depending on the actual zoom factor computed.
!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display)
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FLATFIELDSDIR;Flat-fields directory
@@ -1781,33 +1792,33 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens
-!TP_RAW_1-PASS (MEDIUM);1-pass (medium)
-!TP_RAW_3-PASS (BEST);3-pass (best)
-!TP_RAW_AHD;ahd
+!TP_RAW_1PASSMEDIUM;1-Pass (Medium)
+!TP_RAW_3PASSBEST;3-Pass (Best)
+!TP_RAW_AHD;AHD
!TP_RAW_AMAZE;AMaZE
-!TP_RAW_DCB;dcb
+!TP_RAW_DCB;DCB
!TP_RAW_DCBENHANCE;DCB enhancement
!TP_RAW_DCBITERATIONS;Number of DCB iterations
!TP_RAW_DMETHOD;Method
!TP_RAW_DMETHOD_PROGRESSBAR;%1 demosaicing...
!TP_RAW_DMETHOD_PROGRESSBAR_REFINE;Demosaicing refinement...
-!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixelshift is for Pentax pixelshift files. It falls back to Amaze for non pixelshift files.
-!TP_RAW_EAHD;eahd
+!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixel Shift is for Pentax Pixel Shift files. It falls back to AMaZE for non-Pixel Shift files.
+!TP_RAW_EAHD;EAHD
!TP_RAW_FALSECOLOR;False color suppression steps
-!TP_RAW_FAST;fast
+!TP_RAW_FAST;Fast
!TP_RAW_HD;Threshold
!TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, but false positives may lead to artifacts. If you notice any artifacts appearing when enabling the Hot/Dead Pixel Filters, gradually increase the threshold value until they disappear.
-!TP_RAW_HPHD;hphd
-!TP_RAW_IGV;igv
+!TP_RAW_HPHD;HPHD
+!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
-!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel-Shift, Dual Sensitivity). Use this button to select the sub-image.\n\nThe last sub-image will be used if you select a value beyond the real sub-image count.
+!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel Shift, Dual Pixel, Dual Sensitivity). Use this button to select the sub-image.
!TP_RAW_LABEL;Demosaicing
-!TP_RAW_LMMSE;lmmse
+!TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps
!TP_RAW_LMMSE_TOOLTIP;Adds gamma (step 1), median (steps 2-4) and refinement (steps 5-6) to reduce artifacts and improve the signal-to-noise ratio.
-!TP_RAW_MONO;mono
-!TP_RAW_NONE;none (show sensor pattern)
-!TP_RAW_PIXELSHIFT;Pixel Shift (Pentax)
+!TP_RAW_MONO;Mono
+!TP_RAW_NONE;None (Shows sensor pattern)
+!TP_RAW_PIXELSHIFT;Pixel Shift
!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
!TP_RAW_PIXELSHIFTBLUR_TOOLTIP;Blur motion mask
@@ -1856,7 +1867,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
!TP_RAW_SENSOR_XTRANS_LABEL;Sensor with X-Trans Matrix
-!TP_RAW_VNG4;vng4
+!TP_RAW_VNG4;VNG4
!TP_RESIZE_APPLIESTO;Applies to:
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
diff --git a/rtdata/languages/Chinese (Traditional) b/rtdata/languages/Chinese (Traditional)
index 0c94d8f3b..4501bcd86 100644
--- a/rtdata/languages/Chinese (Traditional)
+++ b/rtdata/languages/Chinese (Traditional)
@@ -473,6 +473,7 @@ TP_WBALANCE_TEMPERATURE;色溫
!EXIFFILTER_EXPOSURECOMPENSATION;Exposure compensation (EV)
!EXIFFILTER_FILETYPE;File type
!EXIFFILTER_METADATAFILTER;Enable metadata filters
+!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_ALL;Select / Unselect All
!EXPORT_BYPASS_DEFRINGE;Bypass Defringe
!EXPORT_BYPASS_DIRPYRDENOISE;Bypass Noise Reduction
@@ -495,8 +496,12 @@ TP_WBALANCE_TEMPERATURE;色溫
!EXPORT_INSTRUCTIONS;Fast Export options provide overrides to bypass time and resource consuming development settings and to run queue processing using the fast export settings instead. This method is recommended for quicker generation of lower resolution images when speed is a priority or when resized output is desired for one or many images without making modifications to their saved development parameters.
!EXPORT_MAXHEIGHT;Maximum height:
!EXPORT_MAXWIDTH;Maximum width:
+!EXPORT_PIPELINE;Processing pipeline
!EXPORT_PUTTOQUEUEFAST; Put to queue for fast export
!EXPORT_RAW_DMETHOD;Demosaic method
+!EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image)
+!EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality.
+!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end)
!EXTPROGTARGET_1;raw
!EXTPROGTARGET_2;queue-processed
!FILEBROWSER_ADDDELTEMPLATE;Add/Del templates...
@@ -512,7 +517,6 @@ TP_WBALANCE_TEMPERATURE;色溫
!FILEBROWSER_CURRENT_NAME;Current name:
!FILEBROWSER_DARKFRAME;Dark-frame
!FILEBROWSER_DELETEDLGMSGINCLPROC;Are you sure you want to delete the selected %1 files including a queue-processed version?
-!FILEBROWSER_EXEC_CPB;Custom Profile Builder
!FILEBROWSER_EXTPROGMENU;Open with
!FILEBROWSER_FLATFIELD;Flat-Field
!FILEBROWSER_MOVETODARKFDIR;Move to dark-frames directory
@@ -547,6 +551,7 @@ TP_WBALANCE_TEMPERATURE;色溫
!FILEBROWSER_RANK3_TOOLTIP;Rank 3 *\nShortcut: Shift-3
!FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nShortcut: Shift-4
!FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nShortcut: Shift-5
+!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
!FILEBROWSER_SELECTDARKFRAME;Select dark-frame...
!FILEBROWSER_SELECTFLATFIELD;Select flat-field...
!FILEBROWSER_SHOWCOLORLABEL1HINT;Show images labeled Red.\nShortcut: Alt-1
@@ -1091,8 +1096,8 @@ TP_WBALANCE_TEMPERATURE;色溫
!PARTIALPASTE_PREPROCESS_LINEDENOISE;Line noise filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
-!PARTIALPASTE_RAWCACORR_CABLUE;CA blue
-!PARTIALPASTE_RAWCACORR_CARED;CA red
+!PARTIALPASTE_RAWCACORR_CAAUTOSTRENGTH;CA auto-correction strength
+!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
@@ -1103,6 +1108,7 @@ TP_WBALANCE_TEMPERATURE;色溫
!PARTIALPASTE_RAW_FALSECOLOR;False color suppression
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
!PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps
+!PARTIALPASTE_RAW_PIXELSHIFT;PixelShift
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_RGBCURVES;RGB curves
!PARTIALPASTE_SHARPENEDGE;Edges
@@ -1157,6 +1163,8 @@ TP_WBALANCE_TEMPERATURE;色溫
!PREFERENCES_DIRDARKFRAMES;Dark-frames directory
!PREFERENCES_EDITORLAYOUT;Editor Layout
!PREFERENCES_EXPAUT;Expert
+!PREFERENCES_EXTENDEDZOOMLEVELS;Use finer-grained zoom levels for "fit to screen" zooming
+!PREFERENCES_EXTENDEDZOOMLEVELS_TOOLTIP;This allows to better fill the editor window when using one of the "fit to screen" zoom modes. However, the preview quality might be slightly degraded, depending on the actual zoom factor computed.
!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display)
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FLATFIELD;Flat-Field
@@ -1739,33 +1747,33 @@ TP_WBALANCE_TEMPERATURE;色溫
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens
-!TP_RAW_1-PASS (MEDIUM);1-pass (medium)
-!TP_RAW_3-PASS (BEST);3-pass (best)
-!TP_RAW_AHD;ahd
+!TP_RAW_1PASSMEDIUM;1-Pass (Medium)
+!TP_RAW_3PASSBEST;3-Pass (Best)
+!TP_RAW_AHD;AHD
!TP_RAW_AMAZE;AMaZE
-!TP_RAW_DCB;dcb
+!TP_RAW_DCB;DCB
!TP_RAW_DCBENHANCE;DCB enhancement
!TP_RAW_DCBITERATIONS;Number of DCB iterations
!TP_RAW_DMETHOD;Method
!TP_RAW_DMETHOD_PROGRESSBAR;%1 demosaicing...
!TP_RAW_DMETHOD_PROGRESSBAR_REFINE;Demosaicing refinement...
-!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixelshift is for Pentax pixelshift files. It falls back to Amaze for non pixelshift files.
-!TP_RAW_EAHD;eahd
+!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixel Shift is for Pentax Pixel Shift files. It falls back to AMaZE for non-Pixel Shift files.
+!TP_RAW_EAHD;EAHD
!TP_RAW_FALSECOLOR;False color suppression steps
-!TP_RAW_FAST;fast
+!TP_RAW_FAST;Fast
!TP_RAW_HD;Threshold
!TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, but false positives may lead to artifacts. If you notice any artifacts appearing when enabling the Hot/Dead Pixel Filters, gradually increase the threshold value until they disappear.
-!TP_RAW_HPHD;hphd
-!TP_RAW_IGV;igv
+!TP_RAW_HPHD;HPHD
+!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
-!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel-Shift, Dual Sensitivity). Use this button to select the sub-image.\n\nThe last sub-image will be used if you select a value beyond the real sub-image count.
+!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel Shift, Dual Pixel, Dual Sensitivity). Use this button to select the sub-image.
!TP_RAW_LABEL;Demosaicing
-!TP_RAW_LMMSE;lmmse
+!TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps
!TP_RAW_LMMSE_TOOLTIP;Adds gamma (step 1), median (steps 2-4) and refinement (steps 5-6) to reduce artifacts and improve the signal-to-noise ratio.
-!TP_RAW_MONO;mono
-!TP_RAW_NONE;none (show sensor pattern)
-!TP_RAW_PIXELSHIFT;Pixel Shift (Pentax)
+!TP_RAW_MONO;Mono
+!TP_RAW_NONE;None (Shows sensor pattern)
+!TP_RAW_PIXELSHIFT;Pixel Shift
!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
!TP_RAW_PIXELSHIFTBLUR_TOOLTIP;Blur motion mask
@@ -1814,7 +1822,7 @@ TP_WBALANCE_TEMPERATURE;色溫
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
!TP_RAW_SENSOR_XTRANS_LABEL;Sensor with X-Trans Matrix
-!TP_RAW_VNG4;vng4
+!TP_RAW_VNG4;VNG4
!TP_RESIZE_APPLIESTO;Applies to:
!TP_RESIZE_CROPPEDAREA;Cropped Area
!TP_RESIZE_FITBOX;Bounding Box
diff --git a/rtdata/languages/Czech b/rtdata/languages/Czech
index 7e2d5889c..0ba7bbcc8 100644
--- a/rtdata/languages/Czech
+++ b/rtdata/languages/Czech
@@ -2083,6 +2083,12 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: -
!DYNPROFILEEDITOR_NEW;New
!DYNPROFILEEDITOR_NEW_RULE;New Dynamic Profile Rule
!DYNPROFILEEDITOR_PROFILE;Processing Profile
+!EXPORT_BYPASS;Processing steps to bypass
+!EXPORT_PIPELINE;Processing pipeline
+!EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image)
+!EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality.
+!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end)
+!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
!HISTORY_MSG_444;WB - Temp bias
!HISTORY_MSG_445;Raw Sub-Image
!HISTORY_MSG_446;EvPixelShiftMotion
@@ -2114,24 +2120,29 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: -
!HISTORY_MSG_472;PS Smooth transitions
!HISTORY_MSG_473;PS Use lmmse
!HISTORY_MSG_474;PS Equalize
+!PARTIALPASTE_RAWCACORR_CAAUTOSTRENGTH;CA auto-correction strength
+!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
+!PARTIALPASTE_RAW_PIXELSHIFT;PixelShift
+!PREFERENCES_EXTENDEDZOOMLEVELS;Use finer-grained zoom levels for "fit to screen" zooming
+!PREFERENCES_EXTENDEDZOOMLEVELS_TOOLTIP;This allows to better fill the editor window when using one of the "fit to screen" zoom modes. However, the preview quality might be slightly degraded, depending on the actual zoom factor computed.
!PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules
!PROFILEPANEL_PDYNAMIC;Dynamic
-!TP_RAW_1-PASS (MEDIUM);1-pass (medium)
-!TP_RAW_3-PASS (BEST);3-pass (best)
-!TP_RAW_AHD;ahd
+!TP_RAW_1PASSMEDIUM;1-Pass (Medium)
+!TP_RAW_3PASSBEST;3-Pass (Best)
+!TP_RAW_AHD;AHD
!TP_RAW_AMAZE;AMaZE
-!TP_RAW_DCB;dcb
-!TP_RAW_EAHD;eahd
-!TP_RAW_FAST;fast
-!TP_RAW_HPHD;hphd
-!TP_RAW_IGV;igv
+!TP_RAW_DCB;DCB
+!TP_RAW_EAHD;EAHD
+!TP_RAW_FAST;Fast
+!TP_RAW_HPHD;HPHD
+!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
-!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel-Shift, Dual Sensitivity). Use this button to select the sub-image.\n\nThe last sub-image will be used if you select a value beyond the real sub-image count.
-!TP_RAW_LMMSE;lmmse
-!TP_RAW_MONO;mono
-!TP_RAW_NONE;none (show sensor pattern)
-!TP_RAW_PIXELSHIFT;Pixel Shift (Pentax)
+!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel Shift, Dual Pixel, Dual Sensitivity). Use this button to select the sub-image.
+!TP_RAW_LMMSE;LMMSE
+!TP_RAW_MONO;Mono
+!TP_RAW_NONE;None (Shows sensor pattern)
+!TP_RAW_PIXELSHIFT;Pixel Shift
!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
!TP_RAW_PIXELSHIFTBLUR_TOOLTIP;Blur motion mask
@@ -2177,6 +2188,6 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: -
!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
-!TP_RAW_VNG4;vng4
+!TP_RAW_VNG4;VNG4
!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/Dansk b/rtdata/languages/Dansk
index 9c72632d2..61002e376 100644
--- a/rtdata/languages/Dansk
+++ b/rtdata/languages/Dansk
@@ -465,6 +465,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!EXIFFILTER_EXPOSURECOMPENSATION;Exposure compensation (EV)
!EXIFFILTER_FILETYPE;File type
!EXIFFILTER_METADATAFILTER;Enable metadata filters
+!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_ALL;Select / Unselect All
!EXPORT_BYPASS_DEFRINGE;Bypass Defringe
!EXPORT_BYPASS_DIRPYRDENOISE;Bypass Noise Reduction
@@ -487,8 +488,12 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!EXPORT_INSTRUCTIONS;Fast Export options provide overrides to bypass time and resource consuming development settings and to run queue processing using the fast export settings instead. This method is recommended for quicker generation of lower resolution images when speed is a priority or when resized output is desired for one or many images without making modifications to their saved development parameters.
!EXPORT_MAXHEIGHT;Maximum height:
!EXPORT_MAXWIDTH;Maximum width:
+!EXPORT_PIPELINE;Processing pipeline
!EXPORT_PUTTOQUEUEFAST; Put to queue for fast export
!EXPORT_RAW_DMETHOD;Demosaic method
+!EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image)
+!EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality.
+!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end)
!EXTPROGTARGET_1;raw
!EXTPROGTARGET_2;queue-processed
!FILEBROWSER_ADDDELTEMPLATE;Add/Del templates...
@@ -504,7 +509,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!FILEBROWSER_CURRENT_NAME;Current name:
!FILEBROWSER_DARKFRAME;Dark-frame
!FILEBROWSER_DELETEDLGMSGINCLPROC;Are you sure you want to delete the selected %1 files including a queue-processed version?
-!FILEBROWSER_EXEC_CPB;Custom Profile Builder
!FILEBROWSER_EXTPROGMENU;Open with
!FILEBROWSER_FLATFIELD;Flat-Field
!FILEBROWSER_MOVETODARKFDIR;Move to dark-frames directory
@@ -539,6 +543,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!FILEBROWSER_RANK3_TOOLTIP;Rank 3 *\nShortcut: Shift-3
!FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nShortcut: Shift-4
!FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nShortcut: Shift-5
+!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
!FILEBROWSER_SELECTDARKFRAME;Select dark-frame...
!FILEBROWSER_SELECTFLATFIELD;Select flat-field...
!FILEBROWSER_SHOWCOLORLABEL1HINT;Show images labeled Red.\nShortcut: Alt-1
@@ -1089,8 +1094,8 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!PARTIALPASTE_PREPROCESS_LINEDENOISE;Line noise filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
-!PARTIALPASTE_RAWCACORR_CABLUE;CA blue
-!PARTIALPASTE_RAWCACORR_CARED;CA red
+!PARTIALPASTE_RAWCACORR_CAAUTOSTRENGTH;CA auto-correction strength
+!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
@@ -1101,6 +1106,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!PARTIALPASTE_RAW_FALSECOLOR;False color suppression
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
!PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps
+!PARTIALPASTE_RAW_PIXELSHIFT;PixelShift
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_RGBCURVES;RGB curves
!PARTIALPASTE_SHARPENEDGE;Edges
@@ -1155,6 +1161,8 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!PREFERENCES_DIRDARKFRAMES;Dark-frames directory
!PREFERENCES_EDITORLAYOUT;Editor Layout
!PREFERENCES_EXPAUT;Expert
+!PREFERENCES_EXTENDEDZOOMLEVELS;Use finer-grained zoom levels for "fit to screen" zooming
+!PREFERENCES_EXTENDEDZOOMLEVELS_TOOLTIP;This allows to better fill the editor window when using one of the "fit to screen" zoom modes. However, the preview quality might be slightly degraded, depending on the actual zoom factor computed.
!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display)
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FLATFIELD;Flat-Field
@@ -1737,31 +1745,31 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens
-!TP_RAW_1-PASS (MEDIUM);1-pass (medium)
-!TP_RAW_3-PASS (BEST);3-pass (best)
-!TP_RAW_AHD;ahd
+!TP_RAW_1PASSMEDIUM;1-Pass (Medium)
+!TP_RAW_3PASSBEST;3-Pass (Best)
+!TP_RAW_AHD;AHD
!TP_RAW_AMAZE;AMaZE
-!TP_RAW_DCB;dcb
+!TP_RAW_DCB;DCB
!TP_RAW_DCBENHANCE;DCB enhancement
!TP_RAW_DCBITERATIONS;Number of DCB iterations
!TP_RAW_DMETHOD_PROGRESSBAR;%1 demosaicing...
!TP_RAW_DMETHOD_PROGRESSBAR_REFINE;Demosaicing refinement...
-!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixelshift is for Pentax pixelshift files. It falls back to Amaze for non pixelshift files.
-!TP_RAW_EAHD;eahd
-!TP_RAW_FAST;fast
+!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixel Shift is for Pentax Pixel Shift files. It falls back to AMaZE for non-Pixel Shift files.
+!TP_RAW_EAHD;EAHD
+!TP_RAW_FAST;Fast
!TP_RAW_HD;Threshold
!TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, but false positives may lead to artifacts. If you notice any artifacts appearing when enabling the Hot/Dead Pixel Filters, gradually increase the threshold value until they disappear.
-!TP_RAW_HPHD;hphd
-!TP_RAW_IGV;igv
+!TP_RAW_HPHD;HPHD
+!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
-!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel-Shift, Dual Sensitivity). Use this button to select the sub-image.\n\nThe last sub-image will be used if you select a value beyond the real sub-image count.
+!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel Shift, Dual Pixel, Dual Sensitivity). Use this button to select the sub-image.
!TP_RAW_LABEL;Demosaicing
-!TP_RAW_LMMSE;lmmse
+!TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps
!TP_RAW_LMMSE_TOOLTIP;Adds gamma (step 1), median (steps 2-4) and refinement (steps 5-6) to reduce artifacts and improve the signal-to-noise ratio.
-!TP_RAW_MONO;mono
-!TP_RAW_NONE;none (show sensor pattern)
-!TP_RAW_PIXELSHIFT;Pixel Shift (Pentax)
+!TP_RAW_MONO;Mono
+!TP_RAW_NONE;None (Shows sensor pattern)
+!TP_RAW_PIXELSHIFT;Pixel Shift
!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
!TP_RAW_PIXELSHIFTBLUR_TOOLTIP;Blur motion mask
@@ -1810,7 +1818,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
!TP_RAW_SENSOR_XTRANS_LABEL;Sensor with X-Trans Matrix
-!TP_RAW_VNG4;vng4
+!TP_RAW_VNG4;VNG4
!TP_RESIZE_APPLIESTO;Applies to:
!TP_RESIZE_CROPPEDAREA;Cropped Area
!TP_RESIZE_FITBOX;Bounding Box
diff --git a/rtdata/languages/Deutsch b/rtdata/languages/Deutsch
index ebc0297c8..5d2a9ad88 100644
--- a/rtdata/languages/Deutsch
+++ b/rtdata/languages/Deutsch
@@ -35,7 +35,9 @@
#34 2017-01-07 IPTC (TooWaBoo) RT4.2.1492
#35 2017-02-18 AWB bias (TooWaBoo) RT 5.0 r1
#36 2017-02-23 Korrekturen (TooWaBoo) RT 5.0 r1
-#37 2017-03-06 Dynamisches Profil (TooWaBoo)
+#37 2017-03-06 Dynamisches Profil (TooWaBoo) RT 5.0 r1
+#38 2017-03-26 Pixel Shift (TooWaBoo) RT 5.0 r1
+#39 06.04.2017 Fast Export (TooWaBoo) RT 5.0 r1
ABOUT_TAB_BUILD;Version
ABOUT_TAB_CREDITS;Danksagungen
@@ -106,13 +108,14 @@ EXIFPANEL_RESETALL;Alle zurücksetzen
EXIFPANEL_RESETALLHINT;Alle Attribute auf die ursprünglichen Werte zurücksetzen
EXIFPANEL_RESETHINT;Gewählte Attribute auf die ursprünglichen Werte zurücksetzen
EXIFPANEL_SUBDIRECTORY;Unterverzeichnis
+EXPORT_BYPASS;Verarbeitungsschritte überspringen
EXPORT_BYPASS_ALL;Alle/Keine auswählen
EXPORT_BYPASS_DEFRINGE;Farbsaum entfernen überspringen
EXPORT_BYPASS_DIRPYRDENOISE;Rauschreduzierung überspringen
EXPORT_BYPASS_DIRPYREQUALIZER;Detailebenenkontrast überspringen
EXPORT_BYPASS_EQUALIZER;Waveletebenen überspringen
EXPORT_BYPASS_RAW_CA;CA-Korrektur überspringen [RAW]
-EXPORT_BYPASS_RAW_CCSTEPS;Falschfarbenunterdrückung überspringen\n[RAW]
+EXPORT_BYPASS_RAW_CCSTEPS;Falschfarbenreduzierung überspringen\n[RAW]
EXPORT_BYPASS_RAW_DCB_ENHANCE;DCB-Verbesserungsstufen überspringen\n[RAW]
EXPORT_BYPASS_RAW_DCB_ITERATIONS;DCB-Interationen überspringen [RAW]
EXPORT_BYPASS_RAW_DF;Dunkelbild überspringen [RAW]
@@ -128,8 +131,12 @@ EXPORT_FASTEXPORTOPTIONS;Schnell-Export - Einstellungen
EXPORT_INSTRUCTIONS;Die Einstellungen zum schnellen Export\nerlauben es, zeit- und ressourcenintensive\nEntwicklungsschritte zu überspringen und dafür\ndie Warteschlangenverarbeitung mit\nschnellen Export-Einstellungen auszuführen.\nDieses Vorgehen wird zur schnelleren\nGenerierung von gering aufgelösten Bildern\nempfohlen, falls es auf die Geschwindigkeit\nankommt oder für ein oder mehrere Bilder\nandere Ausgabegrößen gewünscht werden,\nohne Änderungen an deren gespeicherten\nParameter vornehmen zu müssen.
EXPORT_MAXHEIGHT;Maximale Höhe:
EXPORT_MAXWIDTH;Maximale Breite:
+EXPORT_PIPELINE;Verarbeitungspipeline
EXPORT_PUTTOQUEUEFAST; Zur Warteschlange “Schneller Export“ hinzufügen
EXPORT_RAW_DMETHOD;Demosaikmethode
+EXPORT_USE_FAST_PIPELINE;Priorität Geschwindigkeit
+EXPORT_USE_FAST_PIPELINE_TIP;Wendet alle Bearbeitungsschritte, im Gegensatz\nzu „Standard“ , auf das bereits skalierte Bild an.\nDadurch steigt die Verarbeitungsgeschwindigkeit\nauf Kosten der Qualität.
+EXPORT_USE_NORMAL_PIPELINE;Standard
EXTPROGTARGET_1;RAW
EXTPROGTARGET_2;Stapelverarbeitung beendet
FILEBROWSER_ADDDELTEMPLATE;Vorlagen hinzufügen/entfernen...
@@ -202,6 +209,7 @@ FILEBROWSER_RANK3_TOOLTIP;Bewertung 3 ***\nTaste: Umschalt + 3
FILEBROWSER_RANK4_TOOLTIP;Bewertung 4 ****\nTaste: Umschalt + 4
FILEBROWSER_RANK5_TOOLTIP;Bewertung 5 *****\nTaste: Umschalt + 5
FILEBROWSER_RENAMEDLGLABEL;Datei umbenennen
+FILEBROWSER_RESETDEFAULTPROFILE;Profil auf Vorgabe zurücksetzen
FILEBROWSER_SELECTDARKFRAME;Dunkelbild wählen...
FILEBROWSER_SELECTFLATFIELD;Weißbild wählen...
FILEBROWSER_SHOWCOLORLABEL1HINT;Nur rot markierte Bilder anzeigen\nTaste: Alt + 1
@@ -390,14 +398,14 @@ HISTORY_MSG_110;(Skalieren) - Anwenden auf:
HISTORY_MSG_111;(L*a*b*) - Farbverschiebung\nvermeiden
HISTORY_MSG_112;--unused--
HISTORY_MSG_113;(L*a*b*) - Hautfarbtöne\nschützen
-HISTORY_MSG_114;(Sensor Bayer-Matrix)\nFarbinterpolation\nDCB-Iterationen
-HISTORY_MSG_115;(Sensor-Matrix)\nFarbinterpolation\nFalschfarbenunterdrückung
-HISTORY_MSG_116;(Sensor Bayer-Matrix)\nFarbinterpolation\nDCB-Verbesserung
-HISTORY_MSG_117;(Sensor Bayer-Matrix)\nChromatische Aberration\nRot
-HISTORY_MSG_118;(Sensor Bayer-Matrix)\nChromatische Aberration\nBlau
-HISTORY_MSG_119;(Sensor Bayer-Matrix)\nVorverarbeitung\nZeilenrauschfilter
-HISTORY_MSG_120;(Sensor Bayer-Matrix)\nVorverarbeitung\nGrün-Ausgleich
-HISTORY_MSG_121;(Sensor Bayer-Matrix)\nChromatische Aberration\nAutomatische Korrektur
+HISTORY_MSG_114;(Sensor-Matrix)\nFarbinterpolation\nDCB-Iterationen
+HISTORY_MSG_115;(Sensor-Matrix)\nFarbinterpolation\nFalschfarbenreduzierung
+HISTORY_MSG_116;(Sensor-Matrix)\nFarbinterpolation\nDCB-Verbesserung
+HISTORY_MSG_117;(Sensor-Matrix)\nChromatische Aberration\nRot
+HISTORY_MSG_118;(Sensor-Matrix)\nChromatische Aberration\nBlau
+HISTORY_MSG_119;(Sensor-Matrix)\nVorverarbeitung\nZeilenrauschfilter
+HISTORY_MSG_120;(Sensor-Matrix)\nVorverarbeitung\nGrün-Ausgleich
+HISTORY_MSG_121;(Sensor-Matrix)\nChromatische Aberration\nAutomatische Korrektur
HISTORY_MSG_122;(Dunkelbild)\nAutomatische Auswahl
HISTORY_MSG_123;(Dunkelbild) - Datei
HISTORY_MSG_124;(Weißpunkt)\nKorrekturfaktor
@@ -413,11 +421,11 @@ HISTORY_MSG_133;(Farbmanagement)\nAusgabeprofil\nAusgabe-Gamma
HISTORY_MSG_134;(Farbmanagement)\nAusgabeprofil\nGamma
HISTORY_MSG_135;(Farbmanagement)\nAusgabeprofil\nFreies Gamma
HISTORY_MSG_136;(Farbmanagement)\nAusgabeprofil\nGradient (linear)
-HISTORY_MSG_137;(Sensor Bayer-Matrix)\nSchwarzpunkt - Grün 1
-HISTORY_MSG_138;(Sensor Bayer-Matrix)\nSchwarzpunkt - Rot
-HISTORY_MSG_139;(Sensor Bayer-Matrix)\nSchwarzpunkt - Blau
-HISTORY_MSG_140;(Sensor Bayer-Matrix)\nSchwarzpunkt - Grün 2
-HISTORY_MSG_141;(Sensor Bayer-Matrix)\nSchwarzpunkt\nGrün-Werte angleichen
+HISTORY_MSG_137;(Sensor-Matrix)\nSchwarzpunkt - Grün 1
+HISTORY_MSG_138;(Sensor-Matrix)\nSchwarzpunkt - Rot
+HISTORY_MSG_139;(Sensor-Matrix)\nSchwarzpunkt - Blau
+HISTORY_MSG_140;(Sensor-Matrix)\nSchwarzpunkt - Grün 2
+HISTORY_MSG_141;(Sensor-Matrix)\nSchwarzpunkt\nGrün-Werte angleichen
HISTORY_MSG_142;(Kantenschärfung)\nIterationen
HISTORY_MSG_143;(Kantenschärfung)\nIntensität
HISTORY_MSG_144;(Mikrokontrast)\nIntensität
@@ -480,7 +488,7 @@ HISTORY_MSG_200;(CIECAM02)\nDynamikkompression
HISTORY_MSG_201;(Rauschreduzierung)\nDelta-Chrominanz\nRot / Grün
HISTORY_MSG_202;(Rauschreduzierung)\nDelta-Chrominanz\nBlau / Gelb
HISTORY_MSG_203;(Rauschreduzierung)\nMethode
-HISTORY_MSG_204;(Sensor Bayer-Matrix)\nFarbinterpolation\nLMMSE-Verbesserung
+HISTORY_MSG_204;(Sensor-Matrix)\nFarbinterpolation\nLMMSE-Verbesserung
HISTORY_MSG_205;(CIECAM02)\nBetrachtungsbed.\nHot / Bad-Pixelfilter
HISTORY_MSG_206;(CIECAM02) - Szene\nAuto-Leuchtstärke
HISTORY_MSG_207;(Farbsaum entfernen)\nFarbtonkurve
@@ -565,9 +573,9 @@ HISTORY_MSG_286;(Rauschreduzierung)\nMediantyp
HISTORY_MSG_287;(Rauschreduzierung)\nMedianiterationen
HISTORY_MSG_288;(Weißbild)\nKontrolle zu heller Bereiche
HISTORY_MSG_289;(Weißbild)\nAuto-Kontrolle zu\nheller Bereiche
-HISTORY_MSG_290;(Sensor X-Trans-Matrix)\nSchwarzpunkt - Rot
-HISTORY_MSG_291;(Sensor X-Trans-Matrix)\nSchwarzpunkt - Grün
-HISTORY_MSG_292;(Sensor X-Trans-Matrix)\nSchwarzpunkt - Blau
+HISTORY_MSG_290;(Sensor-Matrix)\nSchwarzpunkt - Rot
+HISTORY_MSG_291;(Sensor-Matrix)\nSchwarzpunkt - Grün
+HISTORY_MSG_292;(Sensor-Matrix)\nSchwarzpunkt - Blau
HISTORY_MSG_293;(Filmsimulation)
HISTORY_MSG_294;(Filmsimulation)\nIntensität
HISTORY_MSG_295;(Filmsimulation) - Film
@@ -720,6 +728,36 @@ HISTORY_MSG_441;(Retinex) - Einstellungen\nVerstärkung und Ausgleich\nTransmiss
HISTORY_MSG_442;(Retinex) - Einstellungen\nTransmission - Skalierung
HISTORY_MSG_443;(Farbmanagement)\nAusgabeprofil\nSchwarzpunkt-Kompensation
HISTORY_MSG_444;(Weißabgleich)\nAWB-Temperatur-Korrektur
+HISTORY_MSG_445;(Sensor-Matrix)\nFarbinterpolation\nUnterbild
+HISTORY_MSG_446;EvPixelShiftMotion
+HISTORY_MSG_447;EvPixelShiftMotionCorrection
+HISTORY_MSG_448;EvPixelShiftStddevFactorGreen
+HISTORY_MSG_449;(Sensor-Matrix)\nFarbinterpolation\nISO-Anpassung
+HISTORY_MSG_450;EvPixelShiftNreadIso
+HISTORY_MSG_451;EvPixelShiftPrnu
+HISTORY_MSG_452;(Sensor-Matrix)\nFarbinterpolation\nBewegungsmaske\nanzeigen
+HISTORY_MSG_453;(Sensor-Matrix)\nFarbinterpolation\nNur Maske anzeigen
+HISTORY_MSG_454;EvPixelShiftAutomatic
+HISTORY_MSG_455;EvPixelShiftNonGreenHorizontal
+HISTORY_MSG_456;EvPixelShiftNonGreenVertical
+HISTORY_MSG_457;(Sensor-Matrix)\nFarbinterpolation\nBewegung im Rot/Blau-\nKanal erkennen
+HISTORY_MSG_458;EvPixelShiftStddevFactorRed
+HISTORY_MSG_459;EvPixelShiftStddevFactorBlue
+HISTORY_MSG_460;EvPixelShiftGreenAmaze
+HISTORY_MSG_461;EvPixelShiftNonGreenAmaze
+HISTORY_MSG_462;(Sensor-Matrix)\nFarbinterpolation\nBewegung im Grün-\nKanal erkennen
+HISTORY_MSG_463;EvPixelShiftRedBlueWeight
+HISTORY_MSG_464;(Sensor-Matrix)\nFarbinterpolation\nUnschärfebewegungsmaske
+HISTORY_MSG_465;(Sensor-Matrix)\nFarbinterpolation\nUnschärferadius
+HISTORY_MSG_466;EvPixelShiftSum
+HISTORY_MSG_467;EvPixelShiftExp0
+HISTORY_MSG_468;(Sensor-Matrix)\nFarbinterpolation\nLücken in der Bewegungs-\nmaske erkennen
+HISTORY_MSG_469;(Sensor-Matrix)\nFarbinterpolation\nMedian
+HISTORY_MSG_470;EvPixelShiftMedian3
+HISTORY_MSG_471;(Sensor-Matrix)\nFarbinterpolation\nBewegungskorrektur
+HISTORY_MSG_472;(Sensor-Matrix)\nFarbinterpolation\nWeicher Übergang
+HISTORY_MSG_473;(Sensor-Matrix)\nFarbinterpolation\nLMMSE für Bewegungs-\nteile verwenden
+HISTORY_MSG_474;(Sensor-Matrix)\nFarbinterpolation\nFrame-Helligkeit angleichen
HISTORY_NEWSNAPSHOT;Hinzufügen
HISTORY_NEWSNAPSHOT_TOOLTIP;Taste: Alt + s
HISTORY_SNAPSHOT;Schnappschuss
@@ -900,8 +938,10 @@ PARTIALPASTE_PREPROCESS_HOTPIXFILT;Vorverarbeitung: Hot-Pixel-Filter
PARTIALPASTE_PREPROCESS_LINEDENOISE;Vorverarbeitung: Zeilenrauschfilter
PARTIALPASTE_PRSHARPENING;Schärfung nach Größenänderung
PARTIALPASTE_RAWCACORR_AUTO;Chromatische Aberration: Automatische Korrektur
+PARTIALPASTE_RAWCACORR_CAAUTOSTRENGTH;CA auto-correction strength
PARTIALPASTE_RAWCACORR_CABLUE;Chromatische Aberration: Blau
PARTIALPASTE_RAWCACORR_CARED;Chromatische Aberration: Rot
+PARTIALPASTE_RAWCACORR_CAREDBLUE;Chromatische Aberration: Rot & Blau
PARTIALPASTE_RAWEXPOS_BLACK;Weißpunkt: Schwarzpegel
PARTIALPASTE_RAWEXPOS_LINEAR;Weißpunkt: Korrekturfaktor
PARTIALPASTE_RAWEXPOS_PRESER;Weißpunkt: Lichter schützen (EV)
@@ -909,8 +949,10 @@ PARTIALPASTE_RAWGROUP;RAW
PARTIALPASTE_RAW_DCBENHANCE;Farbinterpolation: DCB-Verbesserung
PARTIALPASTE_RAW_DCBITERATIONS;Farbinterpolation: Anzahl der DCB-Iterationen
PARTIALPASTE_RAW_DMETHOD;Farbinterpolation: Methode
-PARTIALPASTE_RAW_FALSECOLOR;Farbinterpolation: Falschfarbenunterdrückung
+PARTIALPASTE_RAW_FALSECOLOR;Farbinterpolation: Falschfarbenreduzierung
+PARTIALPASTE_RAW_IMAGENUM;Farbinterpolation: Unterbild
PARTIALPASTE_RAW_LMMSEITERATIONS;Farbinterpolation: LMMSE-Verbesserungsstufen
+PARTIALPASTE_RAW_PIXELSHIFT;Farbinterpolation: Pixel Shift
PARTIALPASTE_RESIZE;Skalieren
PARTIALPASTE_RETINEX;Retinex (Bildschleier entfernen)
PARTIALPASTE_RGBCURVES;RGB-Kurven
@@ -989,6 +1031,8 @@ PREFERENCES_DIRSOFTWARE;Installationsverzeichnis
PREFERENCES_EDITORCMDLINE;Befehlszeile
PREFERENCES_EDITORLAYOUT;Editor-Layout
PREFERENCES_EXPAUT;Experte
+PREFERENCES_EXTENDEDZOOMLEVELS;Use finer-grained zoom levels for "fit to screen" zooming
+PREFERENCES_EXTENDEDZOOMLEVELS_TOOLTIP;This allows to better fill the editor window when using one of the "fit to screen" zoom modes. However, the preview quality might be slightly degraded, depending on the actual zoom factor computed.
PREFERENCES_EXTERNALEDITOR;Externer Editor
PREFERENCES_FBROWSEROPTS;Bildinformationen und Miniaturbilder
PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Einzeilige Toolbar\n(Bei geringer Bildschirmauflösung deaktivieren)
@@ -1173,7 +1217,7 @@ PROGRESSBAR_SNAPSHOT_ADDED;Schnappschuss hinzugefügt
PROGRESSDLG_PROFILECHANGEDINBROWSER;Profil wurde in der Dateiverwaltung geändert
QINFO_ISO;ISO
QINFO_NOEXIF;Keine Exif-Daten vorhanden.
-SAVEDLG_AUTOSUFFIX;Suffix anfügen, falls unter dem Namen bereits eine Datei existiert
+SAVEDLG_AUTOSUFFIX;Suffix anfügen, wenn die Datei bereits existiert
SAVEDLG_FILEFORMAT;Dateiformat
SAVEDLG_FORCEFORMATOPTS;Erzwinge Speicheroptionen
SAVEDLG_JPEGQUAL;JPEG-Qualität
@@ -1690,21 +1734,82 @@ TP_RAWEXPOS_LINEAR;Korrekturfaktor
TP_RAWEXPOS_PRESER;Weißpunkt: Lichter schützen
TP_RAWEXPOS_RGB;Rot, Grün, Blau
TP_RAWEXPOS_TWOGREEN;Grün-Werte automatisch angleichen
+TP_RAW_1PASSMEDIUM;1-Pass (Medium)
+TP_RAW_3PASSBEST;3-Pass (Beste)
+TP_RAW_AHD;AHD
+TP_RAW_AMAZE;AMaZE
+TP_RAW_DCB;DCB
TP_RAW_DCBENHANCE;DCB-Verbesserung
TP_RAW_DCBITERATIONS;Anzahl der DCB-Iterationen
TP_RAW_DMETHOD;Methode
TP_RAW_DMETHOD_PROGRESSBAR;%1 verarbeitet
TP_RAW_DMETHOD_PROGRESSBAR_REFINE;Demosaikoptimierung
-TP_RAW_DMETHOD_TOOLTIP;Hinweis: IGV und LMMSE ist speziell für Bilder\nmit hohen ISO-Werten reserviert und verbessert\ndie Rauschreduzierung.
-TP_RAW_FALSECOLOR;Falschfarbenunterdrückung
+TP_RAW_DMETHOD_TOOLTIP;IGV und LMMSE sind speziel für High-ISO-Aufnahmen um die\nRauschreduzierung zu unterstützen ohne zu Maze-Mustern,\nPosterisierung oder einem ausgewaschenen Look zu führen.\n\nPixel Shift ist für “Pentax Pixel Shift“-Dateien. Für "Nicht-Pixel-\nShift"-Dateien wird automatisch AMaZE verwendet.
+TP_RAW_EAHD;EAHD
+TP_RAW_FALSECOLOR;Falschfarbenreduzierung
+TP_RAW_FAST;Schnell
TP_RAW_HD;Schwelle
TP_RAW_HD_TOOLTIP;Je niedriger der Wert, umso empfindlicher reagiert\ndie “Hot / Dead-Pixel-Erkennung“.\nIst die Empfindlichkeit zu hoch, können Artefakte\nentstehen. Erhöhen Sie in diesem Fall die Schwelle,\nbis die Artefakte verschwinden.
+TP_RAW_HPHD;HPHD
+TP_RAW_IGV;IGV
+TP_RAW_IMAGENUM;Unterbild
+TP_RAW_IMAGENUM_TOOLTIP;Einige RAW-Formate beinhalten möglicherweise mehrere\nUnterbilder (HDR, Pixel-Shift, Dual Pixel, Dual Sensitivity).\nWählen Sie das passende Unterbild aus.\n\nIst die Bildnummer größer als die Anzahl\nder Unterbilder wird das letzte Unterbild benutzt.
TP_RAW_LABEL;Farbinterpolation
+TP_RAW_LMMSE;LMMSE
TP_RAW_LMMSEITERATIONS;LMMSE-Verbesserungsstufen
TP_RAW_LMMSE_TOOLTIP;Fügt Gamma (Stufe 1), Median (Stufe 2-4)\nund Optimierung (Stufe 5-6) zur Minimierung\nvon Artefakten hinzu und verbessert das\nSignalrauschverhältnis.
+TP_RAW_MONO;Mono
+TP_RAW_NONE;Keine
+TP_RAW_PIXELSHIFT;Pixel Shift
+TP_RAW_PIXELSHIFTADAPTIVE;Adaptive Erkennung
+TP_RAW_PIXELSHIFTBLUR;Unschärfebewegungsmaske
+TP_RAW_PIXELSHIFTBLUR_TOOLTIP;Unschärfebewegungsmaske
+TP_RAW_PIXELSHIFTEPERISO;ISO-Anpassung
+TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;Der Standardwert (0.0) empfiehlt sich für die Basis-ISO.\nErhöhen Sie den Wert, um die Bewegungserkennung für höhere ISO-Werte zu verbessern.\nErhöhen Sie den Wert nur in kleinen Schritten und achten Sie dabei auf die Bewegungsmaske.
+TP_RAW_PIXELSHIFTEQUALBRIGHT;Frame-Helligkeit angleichen
+TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Gleicht die Helligkeit der Frames an den aktuellen Frame an.\n\nSind überbelichtete Bereiche vorhanden wählen Sie den hellsten Frame aus um\nMagenta-Farbstiche zu vermeiden oder aktivieren Sie die Bewegungskorrektur.
+TP_RAW_PIXELSHIFTEXP0;Experimentell
+TP_RAW_PIXELSHIFTGREEN;Bewegung im Grün-Kanal erkennen
+TP_RAW_PIXELSHIFTHOLEFILL;Lücken in der Bewegungsmaske erkennen
+TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Lücken in der Bewegungsmaske erkennen
+TP_RAW_PIXELSHIFTLMMSE;LMMSE für Bewegungsbereiche verwenden
+TP_RAW_PIXELSHIFTLMMSE_TOOLTIP;LMMSE anstatt AMaZE für bewegte Bildbereiche verwenden.\nSinnvoll bei High-ISO-Aufnahmen.
+TP_RAW_PIXELSHIFTMASKTHRESHOLD;3x3 new threshold
+TP_RAW_PIXELSHIFTMEDIAN;Median
+TP_RAW_PIXELSHIFTMEDIAN3;Aktuellen Frame vom Median ausschließen.
+TP_RAW_PIXELSHIFTMEDIAN3_TOOLTIP;Schließt den aktuellen Frame vom Median aus.\nNützlich, wenn sich bewegte Objekte im Frame 2\nund 3 überlappen.
+TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Verwenden Sie den Median aller Frames anstelle des\nausgewählten Frames für Regionen mit Bewegung.\nEntfernt Objekte, die an verschiedenen Stellen in allen\nFrames vorkommen. Erzeugt einen Bewegungseffekt\nauf langsame (überlappende) Objekte.
+TP_RAW_PIXELSHIFTMM_AUTO;Automatisch
+TP_RAW_PIXELSHIFTMM_CUSTOM;Benutzerdefiniert
+TP_RAW_PIXELSHIFTMM_OFF;Aus
+TP_RAW_PIXELSHIFTMOTION;Motion detection level (deprecated)
+TP_RAW_PIXELSHIFTMOTIONCORRECTION;Green motion correction size
+TP_RAW_PIXELSHIFTMOTIONCORRECTION_TOOLTIP;1 = 2 Pixel\n3 = 3x3 Raster\n5 = 5x5 Raster
+TP_RAW_PIXELSHIFTMOTIONMETHOD;Bewegungskorrektur
+TP_RAW_PIXELSHIFTMOTION_TOOLTIP;0 = Keine Bewegungserkennung\n1 - 99 = Bewegung wird entsprechend dem Wert erkannt.\nHöhere Werte erhöhen die Trefferquote\n100 = Der mit AMaZE interpolierte Frame wird verwendet.
+TP_RAW_PIXELSHIFTNONGREENAMAZE;Check red/blue amaze
+TP_RAW_PIXELSHIFTNONGREENCROSS;Bewegung im Rot/Blau-Kanal erkennen
+TP_RAW_PIXELSHIFTNONGREENCROSS2;Check green amaze
+TP_RAW_PIXELSHIFTNONGREENHORIZONTAL;Check red/blue horizontal
+TP_RAW_PIXELSHIFTNONGREENVERTICAL;Check red/blue vertical
+TP_RAW_PIXELSHIFTNREADISO;nRead
+TP_RAW_PIXELSHIFTPRNU;PRNU (%)
+TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Red&Blue weight
+TP_RAW_PIXELSHIFTSHOWMOTION;Bewegungsmaske anzeigen
+TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Nur Maske anzeigen
+TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Zeigt die Bewegungsmaske ohne Bild.
+TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Überlagert das Bild mit einer Maske um die\nBereiche mit Bewegung hervorzuheben.
+TP_RAW_PIXELSHIFTSIGMA;Unschärferadius
+TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;Der Standard-Radius von 1,0 passt in der Regel für die Basis-ISO.\nErhöhen Sie den Wert für High-ISO-Aufnahmen, 5,0 ist ein guter\nAusgangspunkt für High-ISO-Aufnahmen. Achten Sie auf die\nBewegungsmaske, während Sie den Wert ändern.
+TP_RAW_PIXELSHIFTSMOOTH;Weicher Übergang
+TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Weicher Übergang zwischen Bereichen mit und ohne Bewegung.\n0 = Aus\n1 = AMaZE/LMMSE oder Median
+TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
+TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
+TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
TP_RAW_SENSOR_BAYER_LABEL;Sensor mit Bayer-Matrix
-TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;Mit “3-pass“ erzielt man die besten Ergebnisse\n(empfohlen bei Bildern mit niedrigen ISO-Werten).\n\nBei hohen ISO-Werten unterscheidet sich “1-pass“\nkaum gegenüber “3-pass“, ist aber deutlich schneller.
+TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;Mit “3-Pass“ erzielt man die besten Ergebnisse\n(empfohlen bei Bildern mit niedrigen ISO-Werten).\n\nBei hohen ISO-Werten unterscheidet sich “1-Pass“\nkaum gegenüber “3-Pass“, ist aber deutlich schneller.
TP_RAW_SENSOR_XTRANS_LABEL;Sensor mit X-Trans-Matrix
+TP_RAW_VNG4;VNG4
TP_RESIZE_APPLIESTO;Anwenden auf:
TP_RESIZE_CROPPEDAREA;Ausschnitt
TP_RESIZE_FITBOX;Begrenzungsrahmen
@@ -2084,99 +2189,3 @@ 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_445;Raw Sub-Image
-!HISTORY_MSG_446;EvPixelShiftMotion
-!HISTORY_MSG_447;EvPixelShiftMotionCorrection
-!HISTORY_MSG_448;EvPixelShiftStddevFactorGreen
-!HISTORY_MSG_449;PS ISO adaption
-!HISTORY_MSG_450;EvPixelShiftNreadIso
-!HISTORY_MSG_451;EvPixelShiftPrnu
-!HISTORY_MSG_452;PS Show motion
-!HISTORY_MSG_453;PS Show mask only
-!HISTORY_MSG_454;EvPixelShiftAutomatic
-!HISTORY_MSG_455;EvPixelShiftNonGreenHorizontal
-!HISTORY_MSG_456;EvPixelShiftNonGreenVertical
-!HISTORY_MSG_457;PS Check red/blue
-!HISTORY_MSG_458;EvPixelShiftStddevFactorRed
-!HISTORY_MSG_459;EvPixelShiftStddevFactorBlue
-!HISTORY_MSG_460;EvPixelShiftGreenAmaze
-!HISTORY_MSG_461;EvPixelShiftNonGreenAmaze
-!HISTORY_MSG_462;PS Check green
-!HISTORY_MSG_463;EvPixelShiftRedBlueWeight
-!HISTORY_MSG_464;PS Blur motion mask
-!HISTORY_MSG_465;PS Blur radius
-!HISTORY_MSG_466;EvPixelShiftSum
-!HISTORY_MSG_467;EvPixelShiftExp0
-!HISTORY_MSG_468;PS Fill holes
-!HISTORY_MSG_469;PS Median
-!HISTORY_MSG_470;EvPixelShiftMedian3
-!HISTORY_MSG_471;PS Motion correction
-!HISTORY_MSG_472;PS Smooth transitions
-!HISTORY_MSG_473;PS Use lmmse
-!HISTORY_MSG_474;PS Equalize
-!PARTIALPASTE_RAW_IMAGENUM;Sub-image
-!TP_RAW_1-PASS (MEDIUM);1-pass (medium)
-!TP_RAW_3-PASS (BEST);3-pass (best)
-!TP_RAW_AHD;ahd
-!TP_RAW_AMAZE;AMaZE
-!TP_RAW_DCB;dcb
-!TP_RAW_EAHD;eahd
-!TP_RAW_FAST;fast
-!TP_RAW_HPHD;hphd
-!TP_RAW_IGV;igv
-!TP_RAW_IMAGENUM;Sub-image
-!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel-Shift, Dual Sensitivity). Use this button to select the sub-image.\n\nThe last sub-image will be used if you select a value beyond the real sub-image count.
-!TP_RAW_LMMSE;lmmse
-!TP_RAW_MONO;mono
-!TP_RAW_NONE;none (show sensor pattern)
-!TP_RAW_PIXELSHIFT;Pixel Shift (Pentax)
-!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
-!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
-!TP_RAW_PIXELSHIFTBLUR_TOOLTIP;Blur motion mask
-!TP_RAW_PIXELSHIFTEPERISO;ISO adaption
-!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value (0.0) should work fine for base ISO.\nIncrease the value to improve motion detection for higher ISO.\nIncrease in small steps and watch the motion mask while increasing.
-!TP_RAW_PIXELSHIFTEQUALBRIGHT;Equalize brightness of frames
-!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta colour cast in overexposed areas or enable motion correction.
-!TP_RAW_PIXELSHIFTEXP0;Experimental
-!TP_RAW_PIXELSHIFTGREEN;Check green channel for motion
-!TP_RAW_PIXELSHIFTHOLEFILL;Fill holes in motion mask
-!TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Fill holes in motion mask
-!TP_RAW_PIXELSHIFTLMMSE;Use lmmse for motion parts
-!TP_RAW_PIXELSHIFTLMMSE_TOOLTIP;Use lmmse instead of amaze for motion areas.\nUseful for High ISO images.
-!TP_RAW_PIXELSHIFTMASKTHRESHOLD;3x3 new threshold
-!TP_RAW_PIXELSHIFTMEDIAN;Median
-!TP_RAW_PIXELSHIFTMEDIAN3;Exclude selected frame from median
-!TP_RAW_PIXELSHIFTMEDIAN3_TOOLTIP;Excludes selected frame from median.\nUseful if moving objects overlap in frame 2 and 3
-!TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Use median of all frames instead of selected frame for regions with motion.\nRemoves objects which are at different places in all frames.\nGives motion effect on slow moving (overlapping) objects.
-!TP_RAW_PIXELSHIFTMM_AUTO;Automatic
-!TP_RAW_PIXELSHIFTMM_CUSTOM;Custom
-!TP_RAW_PIXELSHIFTMM_OFF;Off
-!TP_RAW_PIXELSHIFTMOTION;Motion detection level (deprecated)
-!TP_RAW_PIXELSHIFTMOTIONCORRECTION;Green motion correction size
-!TP_RAW_PIXELSHIFTMOTIONCORRECTION_TOOLTIP;1 = 2 pixels\n3 = 3x3 grid\n5 = 5x5 grid
-!TP_RAW_PIXELSHIFTMOTIONMETHOD;Motion Correction
-!TP_RAW_PIXELSHIFTMOTION_TOOLTIP;0 means no motion detection\n1 - 99 means motion will be detected according to this value. Increase value to increase detection rate\n100 means the Amaze demosaiced frame will be used
-!TP_RAW_PIXELSHIFTNONGREENAMAZE;Check red/blue amaze
-!TP_RAW_PIXELSHIFTNONGREENCROSS;Check red/blue channels for motion
-!TP_RAW_PIXELSHIFTNONGREENCROSS2;Check green amaze
-!TP_RAW_PIXELSHIFTNONGREENHORIZONTAL;Check red/blue horizontal
-!TP_RAW_PIXELSHIFTNONGREENVERTICAL;Check red/blue vertical
-!TP_RAW_PIXELSHIFTNREADISO;nRead
-!TP_RAW_PIXELSHIFTPRNU;PRNU (%)
-!TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Red&Blue weight
-!TP_RAW_PIXELSHIFTSHOWMOTION;Show motion
-!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Show mask only
-!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Shows the motion mask without the image
-!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a mask showing the regions with motion
-!TP_RAW_PIXELSHIFTSIGMA;Blur radius
-!TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;Default radius of 1.0 usually fits good for base ISO. Increase value for high ISO shots,\n5.0 is a good starting point for high ISO shots.\nWatch motion mask while changing the value.
-!TP_RAW_PIXELSHIFTSMOOTH;Smooth transitions
-!TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions between areas with and without motion.\nSet to 0 to disable smooth transitions\nSet to 1 to get Amaze/lmmse or Median
-!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
-!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
-!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
-!TP_RAW_VNG4;vng4
diff --git a/rtdata/languages/English (UK) b/rtdata/languages/English (UK)
index a74829fa5..ff0781eb1 100644
--- a/rtdata/languages/English (UK)
+++ b/rtdata/languages/English (UK)
@@ -177,6 +177,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!EXIFPANEL_RESETALLHINT;Reset all tags to their original values.
!EXIFPANEL_RESETHINT;Reset the selected tags to their original values.
!EXIFPANEL_SUBDIRECTORY;Subdirectory
+!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_ALL;Select / Unselect All
!EXPORT_BYPASS_DEFRINGE;Bypass Defringe
!EXPORT_BYPASS_DIRPYRDENOISE;Bypass Noise Reduction
@@ -198,8 +199,12 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!EXPORT_INSTRUCTIONS;Fast Export options provide overrides to bypass time and resource consuming development settings and to run queue processing using the fast export settings instead. This method is recommended for quicker generation of lower resolution images when speed is a priority or when resized output is desired for one or many images without making modifications to their saved development parameters.
!EXPORT_MAXHEIGHT;Maximum height:
!EXPORT_MAXWIDTH;Maximum width:
+!EXPORT_PIPELINE;Processing pipeline
!EXPORT_PUTTOQUEUEFAST; Put to queue for fast export
!EXPORT_RAW_DMETHOD;Demosaic method
+!EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image)
+!EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality.
+!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end)
!EXTPROGTARGET_1;raw
!EXTPROGTARGET_2;queue-processed
!FILEBROWSER_ADDDELTEMPLATE;Add/Del templates...
@@ -221,7 +226,6 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!FILEBROWSER_DELETEDLGMSGINCLPROC;Are you sure you want to delete the selected %1 files including a queue-processed version?
!FILEBROWSER_EMPTYTRASH;Empty trash
!FILEBROWSER_EMPTYTRASHHINT;Permanently delete the files from trash.
-!FILEBROWSER_EXEC_CPB;Custom Profile Builder
!FILEBROWSER_EXTPROGMENU;Open with
!FILEBROWSER_FLATFIELD;Flat-Field
!FILEBROWSER_MOVETODARKFDIR;Move to dark-frames directory
@@ -270,6 +274,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nShortcut: Shift-4
!FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nShortcut: Shift-5
!FILEBROWSER_RENAMEDLGLABEL;Rename file
+!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
!FILEBROWSER_SELECTDARKFRAME;Select dark-frame...
!FILEBROWSER_SELECTFLATFIELD;Select flat-field...
!FILEBROWSER_SHOWCOLORLABEL1HINT;Show images labeled Red.\nShortcut: Alt-1
@@ -971,8 +976,8 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!PARTIALPASTE_PREPROCESS_LINEDENOISE;Line noise filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
-!PARTIALPASTE_RAWCACORR_CABLUE;CA blue
-!PARTIALPASTE_RAWCACORR_CARED;CA red
+!PARTIALPASTE_RAWCACORR_CAAUTOSTRENGTH;CA auto-correction strength
+!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
@@ -982,6 +987,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!PARTIALPASTE_RAW_DMETHOD;Demosaic method
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
!PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps
+!PARTIALPASTE_RAW_PIXELSHIFT;PixelShift
!PARTIALPASTE_RESIZE;Resize
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_RGBCURVES;RGB curves
@@ -1057,6 +1063,8 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!PREFERENCES_EDITORCMDLINE;Other command line
!PREFERENCES_EDITORLAYOUT;Editor Layout
!PREFERENCES_EXPAUT;Expert
+!PREFERENCES_EXTENDEDZOOMLEVELS;Use finer-grained zoom levels for "fit to screen" zooming
+!PREFERENCES_EXTENDEDZOOMLEVELS_TOOLTIP;This allows to better fill the editor window when using one of the "fit to screen" zoom modes. However, the preview quality might be slightly degraded, depending on the actual zoom factor computed.
!PREFERENCES_EXTERNALEDITOR;External Editor
!PREFERENCES_FBROWSEROPTS;File Browser / Thumbnail Options
!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display)
@@ -1698,32 +1706,32 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens
-!TP_RAW_1-PASS (MEDIUM);1-pass (medium)
-!TP_RAW_3-PASS (BEST);3-pass (best)
-!TP_RAW_AHD;ahd
+!TP_RAW_1PASSMEDIUM;1-Pass (Medium)
+!TP_RAW_3PASSBEST;3-Pass (Best)
+!TP_RAW_AHD;AHD
!TP_RAW_AMAZE;AMaZE
-!TP_RAW_DCB;dcb
+!TP_RAW_DCB;DCB
!TP_RAW_DCBENHANCE;DCB enhancement
!TP_RAW_DCBITERATIONS;Number of DCB iterations
!TP_RAW_DMETHOD;Method
!TP_RAW_DMETHOD_PROGRESSBAR;%1 demosaicing...
!TP_RAW_DMETHOD_PROGRESSBAR_REFINE;Demosaicing refinement...
-!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixelshift is for Pentax pixelshift files. It falls back to Amaze for non pixelshift files.
-!TP_RAW_EAHD;eahd
-!TP_RAW_FAST;fast
+!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixel Shift is for Pentax Pixel Shift files. It falls back to AMaZE for non-Pixel Shift files.
+!TP_RAW_EAHD;EAHD
+!TP_RAW_FAST;Fast
!TP_RAW_HD;Threshold
!TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, but false positives may lead to artifacts. If you notice any artifacts appearing when enabling the Hot/Dead Pixel Filters, gradually increase the threshold value until they disappear.
-!TP_RAW_HPHD;hphd
-!TP_RAW_IGV;igv
+!TP_RAW_HPHD;HPHD
+!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
-!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel-Shift, Dual Sensitivity). Use this button to select the sub-image.\n\nThe last sub-image will be used if you select a value beyond the real sub-image count.
+!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel Shift, Dual Pixel, Dual Sensitivity). Use this button to select the sub-image.
!TP_RAW_LABEL;Demosaicing
-!TP_RAW_LMMSE;lmmse
+!TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps
!TP_RAW_LMMSE_TOOLTIP;Adds gamma (step 1), median (steps 2-4) and refinement (steps 5-6) to reduce artifacts and improve the signal-to-noise ratio.
-!TP_RAW_MONO;mono
-!TP_RAW_NONE;none (show sensor pattern)
-!TP_RAW_PIXELSHIFT;Pixel Shift (Pentax)
+!TP_RAW_MONO;Mono
+!TP_RAW_NONE;None (Shows sensor pattern)
+!TP_RAW_PIXELSHIFT;Pixel Shift
!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
!TP_RAW_PIXELSHIFTBLUR_TOOLTIP;Blur motion mask
@@ -1772,7 +1780,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
!TP_RAW_SENSOR_XTRANS_LABEL;Sensor with X-Trans Matrix
-!TP_RAW_VNG4;vng4
+!TP_RAW_VNG4;VNG4
!TP_RESIZE_APPLIESTO;Applies to:
!TP_RESIZE_CROPPEDAREA;Cropped Area
!TP_RESIZE_FITBOX;Bounding Box
diff --git a/rtdata/languages/English (US) b/rtdata/languages/English (US)
index 56a13fe7c..1284d8395 100644
--- a/rtdata/languages/English (US)
+++ b/rtdata/languages/English (US)
@@ -72,6 +72,7 @@
!EXIFPANEL_RESETALLHINT;Reset all tags to their original values.
!EXIFPANEL_RESETHINT;Reset the selected tags to their original values.
!EXIFPANEL_SUBDIRECTORY;Subdirectory
+!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_ALL;Select / Unselect All
!EXPORT_BYPASS_DEFRINGE;Bypass Defringe
!EXPORT_BYPASS_DIRPYRDENOISE;Bypass Noise Reduction
@@ -94,8 +95,12 @@
!EXPORT_INSTRUCTIONS;Fast Export options provide overrides to bypass time and resource consuming development settings and to run queue processing using the fast export settings instead. This method is recommended for quicker generation of lower resolution images when speed is a priority or when resized output is desired for one or many images without making modifications to their saved development parameters.
!EXPORT_MAXHEIGHT;Maximum height:
!EXPORT_MAXWIDTH;Maximum width:
+!EXPORT_PIPELINE;Processing pipeline
!EXPORT_PUTTOQUEUEFAST; Put to queue for fast export
!EXPORT_RAW_DMETHOD;Demosaic method
+!EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image)
+!EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality.
+!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end)
!EXTPROGTARGET_1;raw
!EXTPROGTARGET_2;queue-processed
!FILEBROWSER_ADDDELTEMPLATE;Add/Del templates...
@@ -118,7 +123,6 @@
!FILEBROWSER_DELETEDLGMSGINCLPROC;Are you sure you want to delete the selected %1 files including a queue-processed version?
!FILEBROWSER_EMPTYTRASH;Empty trash
!FILEBROWSER_EMPTYTRASHHINT;Permanently delete the files from trash.
-!FILEBROWSER_EXEC_CPB;Custom Profile Builder
!FILEBROWSER_EXTPROGMENU;Open with
!FILEBROWSER_FLATFIELD;Flat-Field
!FILEBROWSER_MOVETODARKFDIR;Move to dark-frames directory
@@ -168,6 +172,7 @@
!FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nShortcut: Shift-4
!FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nShortcut: Shift-5
!FILEBROWSER_RENAMEDLGLABEL;Rename file
+!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
!FILEBROWSER_SELECTDARKFRAME;Select dark-frame...
!FILEBROWSER_SELECTFLATFIELD;Select flat-field...
!FILEBROWSER_SHOWCOLORLABEL1HINT;Show images labeled Red.\nShortcut: Alt-1
@@ -896,8 +901,8 @@
!PARTIALPASTE_PREPROCESS_LINEDENOISE;Line noise filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
-!PARTIALPASTE_RAWCACORR_CABLUE;CA blue
-!PARTIALPASTE_RAWCACORR_CARED;CA red
+!PARTIALPASTE_RAWCACORR_CAAUTOSTRENGTH;CA auto-correction strength
+!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
@@ -908,6 +913,7 @@
!PARTIALPASTE_RAW_FALSECOLOR;False color suppression
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
!PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps
+!PARTIALPASTE_RAW_PIXELSHIFT;PixelShift
!PARTIALPASTE_RESIZE;Resize
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_RGBCURVES;RGB curves
@@ -986,6 +992,8 @@
!PREFERENCES_EDITORCMDLINE;Other command line
!PREFERENCES_EDITORLAYOUT;Editor Layout
!PREFERENCES_EXPAUT;Expert
+!PREFERENCES_EXTENDEDZOOMLEVELS;Use finer-grained zoom levels for "fit to screen" zooming
+!PREFERENCES_EXTENDEDZOOMLEVELS_TOOLTIP;This allows to better fill the editor window when using one of the "fit to screen" zoom modes. However, the preview quality might be slightly degraded, depending on the actual zoom factor computed.
!PREFERENCES_EXTERNALEDITOR;External Editor
!PREFERENCES_FBROWSEROPTS;File Browser / Thumbnail Options
!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display)
@@ -1687,33 +1695,33 @@
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens
-!TP_RAW_1-PASS (MEDIUM);1-pass (medium)
-!TP_RAW_3-PASS (BEST);3-pass (best)
-!TP_RAW_AHD;ahd
+!TP_RAW_1PASSMEDIUM;1-Pass (Medium)
+!TP_RAW_3PASSBEST;3-Pass (Best)
+!TP_RAW_AHD;AHD
!TP_RAW_AMAZE;AMaZE
-!TP_RAW_DCB;dcb
+!TP_RAW_DCB;DCB
!TP_RAW_DCBENHANCE;DCB enhancement
!TP_RAW_DCBITERATIONS;Number of DCB iterations
!TP_RAW_DMETHOD;Method
!TP_RAW_DMETHOD_PROGRESSBAR;%1 demosaicing...
!TP_RAW_DMETHOD_PROGRESSBAR_REFINE;Demosaicing refinement...
-!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixelshift is for Pentax pixelshift files. It falls back to Amaze for non pixelshift files.
-!TP_RAW_EAHD;eahd
+!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixel Shift is for Pentax Pixel Shift files. It falls back to AMaZE for non-Pixel Shift files.
+!TP_RAW_EAHD;EAHD
!TP_RAW_FALSECOLOR;False color suppression steps
-!TP_RAW_FAST;fast
+!TP_RAW_FAST;Fast
!TP_RAW_HD;Threshold
!TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, but false positives may lead to artifacts. If you notice any artifacts appearing when enabling the Hot/Dead Pixel Filters, gradually increase the threshold value until they disappear.
-!TP_RAW_HPHD;hphd
-!TP_RAW_IGV;igv
+!TP_RAW_HPHD;HPHD
+!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
-!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel-Shift, Dual Sensitivity). Use this button to select the sub-image.\n\nThe last sub-image will be used if you select a value beyond the real sub-image count.
+!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel Shift, Dual Pixel, Dual Sensitivity). Use this button to select the sub-image.
!TP_RAW_LABEL;Demosaicing
-!TP_RAW_LMMSE;lmmse
+!TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps
!TP_RAW_LMMSE_TOOLTIP;Adds gamma (step 1), median (steps 2-4) and refinement (steps 5-6) to reduce artifacts and improve the signal-to-noise ratio.
-!TP_RAW_MONO;mono
-!TP_RAW_NONE;none (show sensor pattern)
-!TP_RAW_PIXELSHIFT;Pixel Shift (Pentax)
+!TP_RAW_MONO;Mono
+!TP_RAW_NONE;None (Shows sensor pattern)
+!TP_RAW_PIXELSHIFT;Pixel Shift
!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
!TP_RAW_PIXELSHIFTBLUR_TOOLTIP;Blur motion mask
@@ -1762,7 +1770,7 @@
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
!TP_RAW_SENSOR_XTRANS_LABEL;Sensor with X-Trans Matrix
-!TP_RAW_VNG4;vng4
+!TP_RAW_VNG4;VNG4
!TP_RESIZE_APPLIESTO;Applies to:
!TP_RESIZE_CROPPEDAREA;Cropped Area
!TP_RESIZE_FITBOX;Bounding Box
diff --git a/rtdata/languages/Espanol b/rtdata/languages/Espanol
index 077d6a64e..38691cf95 100644
--- a/rtdata/languages/Espanol
+++ b/rtdata/languages/Espanol
@@ -1523,8 +1523,14 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: -
!DYNPROFILEEDITOR_NEW;New
!DYNPROFILEEDITOR_NEW_RULE;New Dynamic Profile Rule
!DYNPROFILEEDITOR_PROFILE;Processing Profile
+!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_EQUALIZER;Bypass Wavelet Levels
+!EXPORT_PIPELINE;Processing pipeline
+!EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image)
+!EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality.
+!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end)
!FILEBROWSER_POPUPCOLORLABEL0;Label: None
+!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
!FILEBROWSER_SHOWNOTTRASHHINT;Show only non-deleted images.
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
!FILECHOOSER_FILTER_ANY;All files
@@ -1755,7 +1761,10 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: -
!PARTIALPASTE_EQUALIZER;Wavelet levels
!PARTIALPASTE_GRADIENT;Graduated filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
+!PARTIALPASTE_RAWCACORR_CAAUTOSTRENGTH;CA auto-correction strength
+!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
+!PARTIALPASTE_RAW_PIXELSHIFT;PixelShift
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_AUTLISLOW;Low
@@ -1776,6 +1785,8 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: -
!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4
!PREFERENCES_DAUB_TOOLTIP;The Noise Reduction and Wavelet Levels tools use a Debauchies mother wavelet. If you choose D6 instead of D4 you increase the number of orthogonal Daubechies coefficients and probably increase quality of small-scale levels. There is no memory or processing time difference between the two.
!PREFERENCES_EXPAUT;Expert
+!PREFERENCES_EXTENDEDZOOMLEVELS;Use finer-grained zoom levels for "fit to screen" zooming
+!PREFERENCES_EXTENDEDZOOMLEVELS_TOOLTIP;This allows to better fill the editor window when using one of the "fit to screen" zoom modes. However, the preview quality might be slightly degraded, depending on the actual zoom factor computed.
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser.
!PREFERENCES_GREYSC;Scene Yb luminance (%)
@@ -1898,23 +1909,23 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: -
!TP_PRSHARPENING_LABEL;Post-Resize Sharpening
!TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions.
!TP_RAWCACORR_CASTR;Strength
-!TP_RAW_1-PASS (MEDIUM);1-pass (medium)
-!TP_RAW_3-PASS (BEST);3-pass (best)
-!TP_RAW_AHD;ahd
+!TP_RAW_1PASSMEDIUM;1-Pass (Medium)
+!TP_RAW_3PASSBEST;3-Pass (Best)
+!TP_RAW_AHD;AHD
!TP_RAW_AMAZE;AMaZE
-!TP_RAW_DCB;dcb
-!TP_RAW_EAHD;eahd
-!TP_RAW_FAST;fast
+!TP_RAW_DCB;DCB
+!TP_RAW_EAHD;EAHD
+!TP_RAW_FAST;Fast
!TP_RAW_HD;Threshold
!TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, but false positives may lead to artifacts. If you notice any artifacts appearing when enabling the Hot/Dead Pixel Filters, gradually increase the threshold value until they disappear.
-!TP_RAW_HPHD;hphd
-!TP_RAW_IGV;igv
+!TP_RAW_HPHD;HPHD
+!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
-!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel-Shift, Dual Sensitivity). Use this button to select the sub-image.\n\nThe last sub-image will be used if you select a value beyond the real sub-image count.
-!TP_RAW_LMMSE;lmmse
-!TP_RAW_MONO;mono
-!TP_RAW_NONE;none (show sensor pattern)
-!TP_RAW_PIXELSHIFT;Pixel Shift (Pentax)
+!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel Shift, Dual Pixel, Dual Sensitivity). Use this button to select the sub-image.
+!TP_RAW_LMMSE;LMMSE
+!TP_RAW_MONO;Mono
+!TP_RAW_NONE;None (Shows sensor pattern)
+!TP_RAW_PIXELSHIFT;Pixel Shift
!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
!TP_RAW_PIXELSHIFTBLUR_TOOLTIP;Blur motion mask
@@ -1960,7 +1971,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: -
!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
-!TP_RAW_VNG4;vng4
+!TP_RAW_VNG4;VNG4
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
diff --git a/rtdata/languages/Euskara b/rtdata/languages/Euskara
index e8f9deeae..7022450b9 100644
--- a/rtdata/languages/Euskara
+++ b/rtdata/languages/Euskara
@@ -465,6 +465,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!EXIFFILTER_EXPOSURECOMPENSATION;Exposure compensation (EV)
!EXIFFILTER_FILETYPE;File type
!EXIFFILTER_METADATAFILTER;Enable metadata filters
+!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_ALL;Select / Unselect All
!EXPORT_BYPASS_DEFRINGE;Bypass Defringe
!EXPORT_BYPASS_DIRPYRDENOISE;Bypass Noise Reduction
@@ -487,8 +488,12 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!EXPORT_INSTRUCTIONS;Fast Export options provide overrides to bypass time and resource consuming development settings and to run queue processing using the fast export settings instead. This method is recommended for quicker generation of lower resolution images when speed is a priority or when resized output is desired for one or many images without making modifications to their saved development parameters.
!EXPORT_MAXHEIGHT;Maximum height:
!EXPORT_MAXWIDTH;Maximum width:
+!EXPORT_PIPELINE;Processing pipeline
!EXPORT_PUTTOQUEUEFAST; Put to queue for fast export
!EXPORT_RAW_DMETHOD;Demosaic method
+!EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image)
+!EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality.
+!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end)
!EXTPROGTARGET_1;raw
!EXTPROGTARGET_2;queue-processed
!FILEBROWSER_ADDDELTEMPLATE;Add/Del templates...
@@ -504,7 +509,6 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!FILEBROWSER_CURRENT_NAME;Current name:
!FILEBROWSER_DARKFRAME;Dark-frame
!FILEBROWSER_DELETEDLGMSGINCLPROC;Are you sure you want to delete the selected %1 files including a queue-processed version?
-!FILEBROWSER_EXEC_CPB;Custom Profile Builder
!FILEBROWSER_EXTPROGMENU;Open with
!FILEBROWSER_FLATFIELD;Flat-Field
!FILEBROWSER_MOVETODARKFDIR;Move to dark-frames directory
@@ -539,6 +543,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!FILEBROWSER_RANK3_TOOLTIP;Rank 3 *\nShortcut: Shift-3
!FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nShortcut: Shift-4
!FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nShortcut: Shift-5
+!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
!FILEBROWSER_SELECTDARKFRAME;Select dark-frame...
!FILEBROWSER_SELECTFLATFIELD;Select flat-field...
!FILEBROWSER_SHOWCOLORLABEL1HINT;Show images labeled Red.\nShortcut: Alt-1
@@ -1089,8 +1094,8 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!PARTIALPASTE_PREPROCESS_LINEDENOISE;Line noise filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
-!PARTIALPASTE_RAWCACORR_CABLUE;CA blue
-!PARTIALPASTE_RAWCACORR_CARED;CA red
+!PARTIALPASTE_RAWCACORR_CAAUTOSTRENGTH;CA auto-correction strength
+!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
@@ -1101,6 +1106,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!PARTIALPASTE_RAW_FALSECOLOR;False color suppression
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
!PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps
+!PARTIALPASTE_RAW_PIXELSHIFT;PixelShift
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_RGBCURVES;RGB curves
!PARTIALPASTE_SHARPENEDGE;Edges
@@ -1155,6 +1161,8 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!PREFERENCES_DIRDARKFRAMES;Dark-frames directory
!PREFERENCES_EDITORLAYOUT;Editor Layout
!PREFERENCES_EXPAUT;Expert
+!PREFERENCES_EXTENDEDZOOMLEVELS;Use finer-grained zoom levels for "fit to screen" zooming
+!PREFERENCES_EXTENDEDZOOMLEVELS_TOOLTIP;This allows to better fill the editor window when using one of the "fit to screen" zoom modes. However, the preview quality might be slightly degraded, depending on the actual zoom factor computed.
!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display)
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FLATFIELD;Flat-Field
@@ -1737,31 +1745,31 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens
-!TP_RAW_1-PASS (MEDIUM);1-pass (medium)
-!TP_RAW_3-PASS (BEST);3-pass (best)
-!TP_RAW_AHD;ahd
+!TP_RAW_1PASSMEDIUM;1-Pass (Medium)
+!TP_RAW_3PASSBEST;3-Pass (Best)
+!TP_RAW_AHD;AHD
!TP_RAW_AMAZE;AMaZE
-!TP_RAW_DCB;dcb
+!TP_RAW_DCB;DCB
!TP_RAW_DCBENHANCE;DCB enhancement
!TP_RAW_DCBITERATIONS;Number of DCB iterations
!TP_RAW_DMETHOD_PROGRESSBAR;%1 demosaicing...
!TP_RAW_DMETHOD_PROGRESSBAR_REFINE;Demosaicing refinement...
-!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixelshift is for Pentax pixelshift files. It falls back to Amaze for non pixelshift files.
-!TP_RAW_EAHD;eahd
-!TP_RAW_FAST;fast
+!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixel Shift is for Pentax Pixel Shift files. It falls back to AMaZE for non-Pixel Shift files.
+!TP_RAW_EAHD;EAHD
+!TP_RAW_FAST;Fast
!TP_RAW_HD;Threshold
!TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, but false positives may lead to artifacts. If you notice any artifacts appearing when enabling the Hot/Dead Pixel Filters, gradually increase the threshold value until they disappear.
-!TP_RAW_HPHD;hphd
-!TP_RAW_IGV;igv
+!TP_RAW_HPHD;HPHD
+!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
-!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel-Shift, Dual Sensitivity). Use this button to select the sub-image.\n\nThe last sub-image will be used if you select a value beyond the real sub-image count.
+!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel Shift, Dual Pixel, Dual Sensitivity). Use this button to select the sub-image.
!TP_RAW_LABEL;Demosaicing
-!TP_RAW_LMMSE;lmmse
+!TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps
!TP_RAW_LMMSE_TOOLTIP;Adds gamma (step 1), median (steps 2-4) and refinement (steps 5-6) to reduce artifacts and improve the signal-to-noise ratio.
-!TP_RAW_MONO;mono
-!TP_RAW_NONE;none (show sensor pattern)
-!TP_RAW_PIXELSHIFT;Pixel Shift (Pentax)
+!TP_RAW_MONO;Mono
+!TP_RAW_NONE;None (Shows sensor pattern)
+!TP_RAW_PIXELSHIFT;Pixel Shift
!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
!TP_RAW_PIXELSHIFTBLUR_TOOLTIP;Blur motion mask
@@ -1810,7 +1818,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
!TP_RAW_SENSOR_XTRANS_LABEL;Sensor with X-Trans Matrix
-!TP_RAW_VNG4;vng4
+!TP_RAW_VNG4;VNG4
!TP_RESIZE_APPLIESTO;Applies to:
!TP_RESIZE_CROPPEDAREA;Cropped Area
!TP_RESIZE_FITBOX;Bounding Box
diff --git a/rtdata/languages/Francais b/rtdata/languages/Francais
index c8f1c8891..22deca58a 100644
--- a/rtdata/languages/Francais
+++ b/rtdata/languages/Francais
@@ -853,8 +853,8 @@ PARTIALPASTE_PREPROCESS_HOTPIXFILT;Filtrage des pixels chauds
PARTIALPASTE_PREPROCESS_LINEDENOISE;Filtre de bruit de ligne
PARTIALPASTE_PRSHARPENING;Netteté post-redim.
PARTIALPASTE_RAWCACORR_AUTO;Corr. auto. de l'aberr. chromatique
-PARTIALPASTE_RAWCACORR_CABLUE;Aberr. chromatique bleu
-PARTIALPASTE_RAWCACORR_CARED;Aberr. chromatique rouge
+PARTIALPASTE_RAWCACORR_CAAUTOSTRENGTH;Force aberr. chromatique auto
+PARTIALPASTE_RAWCACORR_CAREDBLUE;Aberr. chromatique rouge et bleu
PARTIALPASTE_RAWEXPOS_BLACK;Niveaux de noir
PARTIALPASTE_RAWEXPOS_LINEAR;Correction du point blanc
PARTIALPASTE_RAWEXPOS_PRESER;Préservation des hautes humières
@@ -864,6 +864,7 @@ PARTIALPASTE_RAW_DCBITERATIONS;Nombre d'itération de DCB
PARTIALPASTE_RAW_DMETHOD;Algorithme de dématriçage
PARTIALPASTE_RAW_FALSECOLOR;Nbr d'itération des fausses couleurs
PARTIALPASTE_RAW_LMMSEITERATIONS;Niveau d'amélioration LMMSE
+PARTIALPASTE_RAW_PIXELSHIFT;PixelShift
PARTIALPASTE_RESIZE;Redimentionnement
PARTIALPASTE_RETINEX;Retinex
PARTIALPASTE_RGBCURVES;Courbes RVB
@@ -1629,7 +1630,7 @@ TP_PRSHARPENING_TOOLTIP;Augmente la netteté de l'image après le redimentionnem
TP_RAWCACORR_AUTO;Correction automatique
TP_RAWCACORR_CABLUE;Bleu
TP_RAWCACORR_CARED;Rouge
-TP_RAWCACORR_CASTR;force
+TP_RAWCACORR_CASTR;Force
TP_RAWEXPOS_BLACKS;Niveaux de noir
TP_RAWEXPOS_BLACK_0;Vert 1 (maître)
TP_RAWEXPOS_BLACK_1;Rouge
@@ -2048,6 +2049,12 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: -
!DYNPROFILEEDITOR_NEW;New
!DYNPROFILEEDITOR_NEW_RULE;New Dynamic Profile Rule
!DYNPROFILEEDITOR_PROFILE;Processing Profile
+!EXPORT_BYPASS;Processing steps to bypass
+!EXPORT_PIPELINE;Processing pipeline
+!EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image)
+!EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality.
+!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end)
+!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
!HISTORY_MSG_444;WB - Temp bias
!HISTORY_MSG_445;Raw Sub-Image
!HISTORY_MSG_446;EvPixelShiftMotion
@@ -2080,23 +2087,25 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: -
!HISTORY_MSG_473;PS Use lmmse
!HISTORY_MSG_474;PS Equalize
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
+!PREFERENCES_EXTENDEDZOOMLEVELS;Use finer-grained zoom levels for "fit to screen" zooming
+!PREFERENCES_EXTENDEDZOOMLEVELS_TOOLTIP;This allows to better fill the editor window when using one of the "fit to screen" zoom modes. However, the preview quality might be slightly degraded, depending on the actual zoom factor computed.
!PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules
!PROFILEPANEL_PDYNAMIC;Dynamic
-!TP_RAW_1-PASS (MEDIUM);1-pass (medium)
-!TP_RAW_3-PASS (BEST);3-pass (best)
-!TP_RAW_AHD;ahd
+!TP_RAW_1PASSMEDIUM;1-Pass (Medium)
+!TP_RAW_3PASSBEST;3-Pass (Best)
+!TP_RAW_AHD;AHD
!TP_RAW_AMAZE;AMaZE
-!TP_RAW_DCB;dcb
-!TP_RAW_EAHD;eahd
-!TP_RAW_FAST;fast
-!TP_RAW_HPHD;hphd
-!TP_RAW_IGV;igv
+!TP_RAW_DCB;DCB
+!TP_RAW_EAHD;EAHD
+!TP_RAW_FAST;Fast
+!TP_RAW_HPHD;HPHD
+!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
-!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel-Shift, Dual Sensitivity). Use this button to select the sub-image.\n\nThe last sub-image will be used if you select a value beyond the real sub-image count.
-!TP_RAW_LMMSE;lmmse
-!TP_RAW_MONO;mono
-!TP_RAW_NONE;none (show sensor pattern)
-!TP_RAW_PIXELSHIFT;Pixel Shift (Pentax)
+!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel Shift, Dual Pixel, Dual Sensitivity). Use this button to select the sub-image.
+!TP_RAW_LMMSE;LMMSE
+!TP_RAW_MONO;Mono
+!TP_RAW_NONE;None (Shows sensor pattern)
+!TP_RAW_PIXELSHIFT;Pixel Shift
!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
!TP_RAW_PIXELSHIFTBLUR_TOOLTIP;Blur motion mask
@@ -2142,6 +2151,6 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: -
!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
-!TP_RAW_VNG4;vng4
+!TP_RAW_VNG4;VNG4
!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/Greek b/rtdata/languages/Greek
index 0771b0252..67ef64f46 100644
--- a/rtdata/languages/Greek
+++ b/rtdata/languages/Greek
@@ -464,6 +464,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!EXIFFILTER_EXPOSURECOMPENSATION;Exposure compensation (EV)
!EXIFFILTER_FILETYPE;File type
!EXIFFILTER_METADATAFILTER;Enable metadata filters
+!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_ALL;Select / Unselect All
!EXPORT_BYPASS_DEFRINGE;Bypass Defringe
!EXPORT_BYPASS_DIRPYRDENOISE;Bypass Noise Reduction
@@ -486,8 +487,12 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!EXPORT_INSTRUCTIONS;Fast Export options provide overrides to bypass time and resource consuming development settings and to run queue processing using the fast export settings instead. This method is recommended for quicker generation of lower resolution images when speed is a priority or when resized output is desired for one or many images without making modifications to their saved development parameters.
!EXPORT_MAXHEIGHT;Maximum height:
!EXPORT_MAXWIDTH;Maximum width:
+!EXPORT_PIPELINE;Processing pipeline
!EXPORT_PUTTOQUEUEFAST; Put to queue for fast export
!EXPORT_RAW_DMETHOD;Demosaic method
+!EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image)
+!EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality.
+!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end)
!EXTPROGTARGET_1;raw
!EXTPROGTARGET_2;queue-processed
!FILEBROWSER_ADDDELTEMPLATE;Add/Del templates...
@@ -503,7 +508,6 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!FILEBROWSER_CURRENT_NAME;Current name:
!FILEBROWSER_DARKFRAME;Dark-frame
!FILEBROWSER_DELETEDLGMSGINCLPROC;Are you sure you want to delete the selected %1 files including a queue-processed version?
-!FILEBROWSER_EXEC_CPB;Custom Profile Builder
!FILEBROWSER_EXTPROGMENU;Open with
!FILEBROWSER_FLATFIELD;Flat-Field
!FILEBROWSER_MOVETODARKFDIR;Move to dark-frames directory
@@ -538,6 +542,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!FILEBROWSER_RANK3_TOOLTIP;Rank 3 *\nShortcut: Shift-3
!FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nShortcut: Shift-4
!FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nShortcut: Shift-5
+!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
!FILEBROWSER_SELECTDARKFRAME;Select dark-frame...
!FILEBROWSER_SELECTFLATFIELD;Select flat-field...
!FILEBROWSER_SHOWCOLORLABEL1HINT;Show images labeled Red.\nShortcut: Alt-1
@@ -1088,8 +1093,8 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!PARTIALPASTE_PREPROCESS_LINEDENOISE;Line noise filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
-!PARTIALPASTE_RAWCACORR_CABLUE;CA blue
-!PARTIALPASTE_RAWCACORR_CARED;CA red
+!PARTIALPASTE_RAWCACORR_CAAUTOSTRENGTH;CA auto-correction strength
+!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
@@ -1100,6 +1105,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!PARTIALPASTE_RAW_FALSECOLOR;False color suppression
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
!PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps
+!PARTIALPASTE_RAW_PIXELSHIFT;PixelShift
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_RGBCURVES;RGB curves
!PARTIALPASTE_SHARPENEDGE;Edges
@@ -1154,6 +1160,8 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!PREFERENCES_DIRDARKFRAMES;Dark-frames directory
!PREFERENCES_EDITORLAYOUT;Editor Layout
!PREFERENCES_EXPAUT;Expert
+!PREFERENCES_EXTENDEDZOOMLEVELS;Use finer-grained zoom levels for "fit to screen" zooming
+!PREFERENCES_EXTENDEDZOOMLEVELS_TOOLTIP;This allows to better fill the editor window when using one of the "fit to screen" zoom modes. However, the preview quality might be slightly degraded, depending on the actual zoom factor computed.
!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display)
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FLATFIELD;Flat-Field
@@ -1736,31 +1744,31 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens
-!TP_RAW_1-PASS (MEDIUM);1-pass (medium)
-!TP_RAW_3-PASS (BEST);3-pass (best)
-!TP_RAW_AHD;ahd
+!TP_RAW_1PASSMEDIUM;1-Pass (Medium)
+!TP_RAW_3PASSBEST;3-Pass (Best)
+!TP_RAW_AHD;AHD
!TP_RAW_AMAZE;AMaZE
-!TP_RAW_DCB;dcb
+!TP_RAW_DCB;DCB
!TP_RAW_DCBENHANCE;DCB enhancement
!TP_RAW_DCBITERATIONS;Number of DCB iterations
!TP_RAW_DMETHOD_PROGRESSBAR;%1 demosaicing...
!TP_RAW_DMETHOD_PROGRESSBAR_REFINE;Demosaicing refinement...
-!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixelshift is for Pentax pixelshift files. It falls back to Amaze for non pixelshift files.
-!TP_RAW_EAHD;eahd
-!TP_RAW_FAST;fast
+!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixel Shift is for Pentax Pixel Shift files. It falls back to AMaZE for non-Pixel Shift files.
+!TP_RAW_EAHD;EAHD
+!TP_RAW_FAST;Fast
!TP_RAW_HD;Threshold
!TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, but false positives may lead to artifacts. If you notice any artifacts appearing when enabling the Hot/Dead Pixel Filters, gradually increase the threshold value until they disappear.
-!TP_RAW_HPHD;hphd
-!TP_RAW_IGV;igv
+!TP_RAW_HPHD;HPHD
+!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
-!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel-Shift, Dual Sensitivity). Use this button to select the sub-image.\n\nThe last sub-image will be used if you select a value beyond the real sub-image count.
+!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel Shift, Dual Pixel, Dual Sensitivity). Use this button to select the sub-image.
!TP_RAW_LABEL;Demosaicing
-!TP_RAW_LMMSE;lmmse
+!TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps
!TP_RAW_LMMSE_TOOLTIP;Adds gamma (step 1), median (steps 2-4) and refinement (steps 5-6) to reduce artifacts and improve the signal-to-noise ratio.
-!TP_RAW_MONO;mono
-!TP_RAW_NONE;none (show sensor pattern)
-!TP_RAW_PIXELSHIFT;Pixel Shift (Pentax)
+!TP_RAW_MONO;Mono
+!TP_RAW_NONE;None (Shows sensor pattern)
+!TP_RAW_PIXELSHIFT;Pixel Shift
!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
!TP_RAW_PIXELSHIFTBLUR_TOOLTIP;Blur motion mask
@@ -1809,7 +1817,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
!TP_RAW_SENSOR_XTRANS_LABEL;Sensor with X-Trans Matrix
-!TP_RAW_VNG4;vng4
+!TP_RAW_VNG4;VNG4
!TP_RESIZE_APPLIESTO;Applies to:
!TP_RESIZE_CROPPEDAREA;Cropped Area
!TP_RESIZE_FITBOX;Bounding Box
diff --git a/rtdata/languages/Hebrew b/rtdata/languages/Hebrew
index 71fe69f20..5d51653e3 100644
--- a/rtdata/languages/Hebrew
+++ b/rtdata/languages/Hebrew
@@ -465,6 +465,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!EXIFFILTER_EXPOSURECOMPENSATION;Exposure compensation (EV)
!EXIFFILTER_FILETYPE;File type
!EXIFFILTER_METADATAFILTER;Enable metadata filters
+!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_ALL;Select / Unselect All
!EXPORT_BYPASS_DEFRINGE;Bypass Defringe
!EXPORT_BYPASS_DIRPYRDENOISE;Bypass Noise Reduction
@@ -487,8 +488,12 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!EXPORT_INSTRUCTIONS;Fast Export options provide overrides to bypass time and resource consuming development settings and to run queue processing using the fast export settings instead. This method is recommended for quicker generation of lower resolution images when speed is a priority or when resized output is desired for one or many images without making modifications to their saved development parameters.
!EXPORT_MAXHEIGHT;Maximum height:
!EXPORT_MAXWIDTH;Maximum width:
+!EXPORT_PIPELINE;Processing pipeline
!EXPORT_PUTTOQUEUEFAST; Put to queue for fast export
!EXPORT_RAW_DMETHOD;Demosaic method
+!EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image)
+!EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality.
+!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end)
!EXTPROGTARGET_1;raw
!EXTPROGTARGET_2;queue-processed
!FILEBROWSER_ADDDELTEMPLATE;Add/Del templates...
@@ -504,7 +509,6 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!FILEBROWSER_CURRENT_NAME;Current name:
!FILEBROWSER_DARKFRAME;Dark-frame
!FILEBROWSER_DELETEDLGMSGINCLPROC;Are you sure you want to delete the selected %1 files including a queue-processed version?
-!FILEBROWSER_EXEC_CPB;Custom Profile Builder
!FILEBROWSER_EXTPROGMENU;Open with
!FILEBROWSER_FLATFIELD;Flat-Field
!FILEBROWSER_MOVETODARKFDIR;Move to dark-frames directory
@@ -539,6 +543,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!FILEBROWSER_RANK3_TOOLTIP;Rank 3 *\nShortcut: Shift-3
!FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nShortcut: Shift-4
!FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nShortcut: Shift-5
+!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
!FILEBROWSER_SELECTDARKFRAME;Select dark-frame...
!FILEBROWSER_SELECTFLATFIELD;Select flat-field...
!FILEBROWSER_SHOWCOLORLABEL1HINT;Show images labeled Red.\nShortcut: Alt-1
@@ -1089,8 +1094,8 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!PARTIALPASTE_PREPROCESS_LINEDENOISE;Line noise filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
-!PARTIALPASTE_RAWCACORR_CABLUE;CA blue
-!PARTIALPASTE_RAWCACORR_CARED;CA red
+!PARTIALPASTE_RAWCACORR_CAAUTOSTRENGTH;CA auto-correction strength
+!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
@@ -1101,6 +1106,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!PARTIALPASTE_RAW_FALSECOLOR;False color suppression
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
!PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps
+!PARTIALPASTE_RAW_PIXELSHIFT;PixelShift
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_RGBCURVES;RGB curves
!PARTIALPASTE_SHARPENEDGE;Edges
@@ -1155,6 +1161,8 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!PREFERENCES_DIRDARKFRAMES;Dark-frames directory
!PREFERENCES_EDITORLAYOUT;Editor Layout
!PREFERENCES_EXPAUT;Expert
+!PREFERENCES_EXTENDEDZOOMLEVELS;Use finer-grained zoom levels for "fit to screen" zooming
+!PREFERENCES_EXTENDEDZOOMLEVELS_TOOLTIP;This allows to better fill the editor window when using one of the "fit to screen" zoom modes. However, the preview quality might be slightly degraded, depending on the actual zoom factor computed.
!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display)
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FLATFIELD;Flat-Field
@@ -1737,31 +1745,31 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens
-!TP_RAW_1-PASS (MEDIUM);1-pass (medium)
-!TP_RAW_3-PASS (BEST);3-pass (best)
-!TP_RAW_AHD;ahd
+!TP_RAW_1PASSMEDIUM;1-Pass (Medium)
+!TP_RAW_3PASSBEST;3-Pass (Best)
+!TP_RAW_AHD;AHD
!TP_RAW_AMAZE;AMaZE
-!TP_RAW_DCB;dcb
+!TP_RAW_DCB;DCB
!TP_RAW_DCBENHANCE;DCB enhancement
!TP_RAW_DCBITERATIONS;Number of DCB iterations
!TP_RAW_DMETHOD_PROGRESSBAR;%1 demosaicing...
!TP_RAW_DMETHOD_PROGRESSBAR_REFINE;Demosaicing refinement...
-!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixelshift is for Pentax pixelshift files. It falls back to Amaze for non pixelshift files.
-!TP_RAW_EAHD;eahd
-!TP_RAW_FAST;fast
+!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixel Shift is for Pentax Pixel Shift files. It falls back to AMaZE for non-Pixel Shift files.
+!TP_RAW_EAHD;EAHD
+!TP_RAW_FAST;Fast
!TP_RAW_HD;Threshold
!TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, but false positives may lead to artifacts. If you notice any artifacts appearing when enabling the Hot/Dead Pixel Filters, gradually increase the threshold value until they disappear.
-!TP_RAW_HPHD;hphd
-!TP_RAW_IGV;igv
+!TP_RAW_HPHD;HPHD
+!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
-!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel-Shift, Dual Sensitivity). Use this button to select the sub-image.\n\nThe last sub-image will be used if you select a value beyond the real sub-image count.
+!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel Shift, Dual Pixel, Dual Sensitivity). Use this button to select the sub-image.
!TP_RAW_LABEL;Demosaicing
-!TP_RAW_LMMSE;lmmse
+!TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps
!TP_RAW_LMMSE_TOOLTIP;Adds gamma (step 1), median (steps 2-4) and refinement (steps 5-6) to reduce artifacts and improve the signal-to-noise ratio.
-!TP_RAW_MONO;mono
-!TP_RAW_NONE;none (show sensor pattern)
-!TP_RAW_PIXELSHIFT;Pixel Shift (Pentax)
+!TP_RAW_MONO;Mono
+!TP_RAW_NONE;None (Shows sensor pattern)
+!TP_RAW_PIXELSHIFT;Pixel Shift
!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
!TP_RAW_PIXELSHIFTBLUR_TOOLTIP;Blur motion mask
@@ -1810,7 +1818,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
!TP_RAW_SENSOR_XTRANS_LABEL;Sensor with X-Trans Matrix
-!TP_RAW_VNG4;vng4
+!TP_RAW_VNG4;VNG4
!TP_RESIZE_APPLIESTO;Applies to:
!TP_RESIZE_CROPPEDAREA;Cropped Area
!TP_RESIZE_FITBOX;Bounding Box
diff --git a/rtdata/languages/Italiano b/rtdata/languages/Italiano
index 207deb019..d4482acfc 100644
--- a/rtdata/languages/Italiano
+++ b/rtdata/languages/Italiano
@@ -1354,7 +1354,13 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: -
!DYNPROFILEEDITOR_NEW;New
!DYNPROFILEEDITOR_NEW_RULE;New Dynamic Profile Rule
!DYNPROFILEEDITOR_PROFILE;Processing Profile
+!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_EQUALIZER;Bypass Wavelet Levels
+!EXPORT_PIPELINE;Processing pipeline
+!EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image)
+!EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality.
+!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end)
+!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
!FILEBROWSER_SHOWNOTTRASHHINT;Show only non-deleted images.
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
!FILECHOOSER_FILTER_ANY;All files
@@ -1624,7 +1630,10 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: -
!PARTIALPASTE_PREPROCESS_DEADPIXFILT;Dead pixel filter
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
+!PARTIALPASTE_RAWCACORR_CAAUTOSTRENGTH;CA auto-correction strength
+!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
+!PARTIALPASTE_RAW_PIXELSHIFT;PixelShift
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_AUTLISLOW;Low
@@ -1646,6 +1655,8 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: -
!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4
!PREFERENCES_DAUB_TOOLTIP;The Noise Reduction and Wavelet Levels tools use a Debauchies mother wavelet. If you choose D6 instead of D4 you increase the number of orthogonal Daubechies coefficients and probably increase quality of small-scale levels. There is no memory or processing time difference between the two.
!PREFERENCES_EXPAUT;Expert
+!PREFERENCES_EXTENDEDZOOMLEVELS;Use finer-grained zoom levels for "fit to screen" zooming
+!PREFERENCES_EXTENDEDZOOMLEVELS_TOOLTIP;This allows to better fill the editor window when using one of the "fit to screen" zoom modes. However, the preview quality might be slightly degraded, depending on the actual zoom factor computed.
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser.
@@ -1836,23 +1847,23 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: -
!TP_RAWEXPOS_BLACK_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_RGB;Red, Green, Blue
-!TP_RAW_1-PASS (MEDIUM);1-pass (medium)
-!TP_RAW_3-PASS (BEST);3-pass (best)
-!TP_RAW_AHD;ahd
+!TP_RAW_1PASSMEDIUM;1-Pass (Medium)
+!TP_RAW_3PASSBEST;3-Pass (Best)
+!TP_RAW_AHD;AHD
!TP_RAW_AMAZE;AMaZE
-!TP_RAW_DCB;dcb
-!TP_RAW_EAHD;eahd
-!TP_RAW_FAST;fast
+!TP_RAW_DCB;DCB
+!TP_RAW_EAHD;EAHD
+!TP_RAW_FAST;Fast
!TP_RAW_HD;Threshold
!TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, but false positives may lead to artifacts. If you notice any artifacts appearing when enabling the Hot/Dead Pixel Filters, gradually increase the threshold value until they disappear.
-!TP_RAW_HPHD;hphd
-!TP_RAW_IGV;igv
+!TP_RAW_HPHD;HPHD
+!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
-!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel-Shift, Dual Sensitivity). Use this button to select the sub-image.\n\nThe last sub-image will be used if you select a value beyond the real sub-image count.
-!TP_RAW_LMMSE;lmmse
-!TP_RAW_MONO;mono
-!TP_RAW_NONE;none (show sensor pattern)
-!TP_RAW_PIXELSHIFT;Pixel Shift (Pentax)
+!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel Shift, Dual Pixel, Dual Sensitivity). Use this button to select the sub-image.
+!TP_RAW_LMMSE;LMMSE
+!TP_RAW_MONO;Mono
+!TP_RAW_NONE;None (Shows sensor pattern)
+!TP_RAW_PIXELSHIFT;Pixel Shift
!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
!TP_RAW_PIXELSHIFTBLUR_TOOLTIP;Blur motion mask
@@ -1901,7 +1912,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: -
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
!TP_RAW_SENSOR_XTRANS_LABEL;Sensor with X-Trans Matrix
-!TP_RAW_VNG4;vng4
+!TP_RAW_VNG4;VNG4
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
diff --git a/rtdata/languages/Japanese b/rtdata/languages/Japanese
index a49b54cd3..c882fcca6 100644
--- a/rtdata/languages/Japanese
+++ b/rtdata/languages/Japanese
@@ -1893,6 +1893,12 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: -
!DYNPROFILEEDITOR_NEW;New
!DYNPROFILEEDITOR_NEW_RULE;New Dynamic Profile Rule
!DYNPROFILEEDITOR_PROFILE;Processing Profile
+!EXPORT_BYPASS;Processing steps to bypass
+!EXPORT_PIPELINE;Processing pipeline
+!EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image)
+!EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality.
+!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end)
+!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
!GENERAL_APPLY;Apply
!GENERAL_OPEN;Open
@@ -1993,9 +1999,14 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: -
!MAIN_BUTTON_SENDTOEDITOR;Edit image in external editor
!MONITOR_PROFILE_SYSTEM;System default
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
+!PARTIALPASTE_RAWCACORR_CAAUTOSTRENGTH;CA auto-correction strength
+!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
+!PARTIALPASTE_RAW_PIXELSHIFT;PixelShift
!PARTIALPASTE_RETINEX;Retinex
!PREFERENCES_CMMBPC;Black point compensation
+!PREFERENCES_EXTENDEDZOOMLEVELS;Use finer-grained zoom levels for "fit to screen" zooming
+!PREFERENCES_EXTENDEDZOOMLEVELS_TOOLTIP;This allows to better fill the editor window when using one of the "fit to screen" zoom modes. However, the preview quality might be slightly degraded, depending on the actual zoom factor computed.
!PREFERENCES_MONINTENT;Default rendering intent
!PREFERENCES_MONITOR;Monitor
!PREFERENCES_MONPROFILE;Default color profile
@@ -2034,21 +2045,21 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: -
!TP_ICM_SAVEREFERENCE;Save Reference Image
!TP_NEUTRAL;Reset
!TP_RAWCACORR_CASTR;Strength
-!TP_RAW_1-PASS (MEDIUM);1-pass (medium)
-!TP_RAW_3-PASS (BEST);3-pass (best)
-!TP_RAW_AHD;ahd
+!TP_RAW_1PASSMEDIUM;1-Pass (Medium)
+!TP_RAW_3PASSBEST;3-Pass (Best)
+!TP_RAW_AHD;AHD
!TP_RAW_AMAZE;AMaZE
-!TP_RAW_DCB;dcb
-!TP_RAW_EAHD;eahd
-!TP_RAW_FAST;fast
-!TP_RAW_HPHD;hphd
-!TP_RAW_IGV;igv
+!TP_RAW_DCB;DCB
+!TP_RAW_EAHD;EAHD
+!TP_RAW_FAST;Fast
+!TP_RAW_HPHD;HPHD
+!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
-!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel-Shift, Dual Sensitivity). Use this button to select the sub-image.\n\nThe last sub-image will be used if you select a value beyond the real sub-image count.
-!TP_RAW_LMMSE;lmmse
-!TP_RAW_MONO;mono
-!TP_RAW_NONE;none (show sensor pattern)
-!TP_RAW_PIXELSHIFT;Pixel Shift (Pentax)
+!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel Shift, Dual Pixel, Dual Sensitivity). Use this button to select the sub-image.
+!TP_RAW_LMMSE;LMMSE
+!TP_RAW_MONO;Mono
+!TP_RAW_NONE;None (Shows sensor pattern)
+!TP_RAW_PIXELSHIFT;Pixel Shift
!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
!TP_RAW_PIXELSHIFTBLUR_TOOLTIP;Blur motion mask
@@ -2094,7 +2105,7 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: -
!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
-!TP_RAW_VNG4;vng4
+!TP_RAW_VNG4;VNG4
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
diff --git a/rtdata/languages/Latvian b/rtdata/languages/Latvian
index d4661ecaf..1eee14523 100644
--- a/rtdata/languages/Latvian
+++ b/rtdata/languages/Latvian
@@ -465,6 +465,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!EXIFFILTER_EXPOSURECOMPENSATION;Exposure compensation (EV)
!EXIFFILTER_FILETYPE;File type
!EXIFFILTER_METADATAFILTER;Enable metadata filters
+!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_ALL;Select / Unselect All
!EXPORT_BYPASS_DEFRINGE;Bypass Defringe
!EXPORT_BYPASS_DIRPYRDENOISE;Bypass Noise Reduction
@@ -487,8 +488,12 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!EXPORT_INSTRUCTIONS;Fast Export options provide overrides to bypass time and resource consuming development settings and to run queue processing using the fast export settings instead. This method is recommended for quicker generation of lower resolution images when speed is a priority or when resized output is desired for one or many images without making modifications to their saved development parameters.
!EXPORT_MAXHEIGHT;Maximum height:
!EXPORT_MAXWIDTH;Maximum width:
+!EXPORT_PIPELINE;Processing pipeline
!EXPORT_PUTTOQUEUEFAST; Put to queue for fast export
!EXPORT_RAW_DMETHOD;Demosaic method
+!EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image)
+!EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality.
+!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end)
!EXTPROGTARGET_1;raw
!EXTPROGTARGET_2;queue-processed
!FILEBROWSER_ADDDELTEMPLATE;Add/Del templates...
@@ -504,7 +509,6 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!FILEBROWSER_CURRENT_NAME;Current name:
!FILEBROWSER_DARKFRAME;Dark-frame
!FILEBROWSER_DELETEDLGMSGINCLPROC;Are you sure you want to delete the selected %1 files including a queue-processed version?
-!FILEBROWSER_EXEC_CPB;Custom Profile Builder
!FILEBROWSER_EXTPROGMENU;Open with
!FILEBROWSER_FLATFIELD;Flat-Field
!FILEBROWSER_MOVETODARKFDIR;Move to dark-frames directory
@@ -539,6 +543,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!FILEBROWSER_RANK3_TOOLTIP;Rank 3 *\nShortcut: Shift-3
!FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nShortcut: Shift-4
!FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nShortcut: Shift-5
+!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
!FILEBROWSER_SELECTDARKFRAME;Select dark-frame...
!FILEBROWSER_SELECTFLATFIELD;Select flat-field...
!FILEBROWSER_SHOWCOLORLABEL1HINT;Show images labeled Red.\nShortcut: Alt-1
@@ -1089,8 +1094,8 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!PARTIALPASTE_PREPROCESS_LINEDENOISE;Line noise filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
-!PARTIALPASTE_RAWCACORR_CABLUE;CA blue
-!PARTIALPASTE_RAWCACORR_CARED;CA red
+!PARTIALPASTE_RAWCACORR_CAAUTOSTRENGTH;CA auto-correction strength
+!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
@@ -1101,6 +1106,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!PARTIALPASTE_RAW_FALSECOLOR;False color suppression
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
!PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps
+!PARTIALPASTE_RAW_PIXELSHIFT;PixelShift
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_RGBCURVES;RGB curves
!PARTIALPASTE_SHARPENEDGE;Edges
@@ -1155,6 +1161,8 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!PREFERENCES_DIRDARKFRAMES;Dark-frames directory
!PREFERENCES_EDITORLAYOUT;Editor Layout
!PREFERENCES_EXPAUT;Expert
+!PREFERENCES_EXTENDEDZOOMLEVELS;Use finer-grained zoom levels for "fit to screen" zooming
+!PREFERENCES_EXTENDEDZOOMLEVELS_TOOLTIP;This allows to better fill the editor window when using one of the "fit to screen" zoom modes. However, the preview quality might be slightly degraded, depending on the actual zoom factor computed.
!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display)
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FLATFIELD;Flat-Field
@@ -1737,31 +1745,31 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens
-!TP_RAW_1-PASS (MEDIUM);1-pass (medium)
-!TP_RAW_3-PASS (BEST);3-pass (best)
-!TP_RAW_AHD;ahd
+!TP_RAW_1PASSMEDIUM;1-Pass (Medium)
+!TP_RAW_3PASSBEST;3-Pass (Best)
+!TP_RAW_AHD;AHD
!TP_RAW_AMAZE;AMaZE
-!TP_RAW_DCB;dcb
+!TP_RAW_DCB;DCB
!TP_RAW_DCBENHANCE;DCB enhancement
!TP_RAW_DCBITERATIONS;Number of DCB iterations
!TP_RAW_DMETHOD_PROGRESSBAR;%1 demosaicing...
!TP_RAW_DMETHOD_PROGRESSBAR_REFINE;Demosaicing refinement...
-!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixelshift is for Pentax pixelshift files. It falls back to Amaze for non pixelshift files.
-!TP_RAW_EAHD;eahd
-!TP_RAW_FAST;fast
+!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixel Shift is for Pentax Pixel Shift files. It falls back to AMaZE for non-Pixel Shift files.
+!TP_RAW_EAHD;EAHD
+!TP_RAW_FAST;Fast
!TP_RAW_HD;Threshold
!TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, but false positives may lead to artifacts. If you notice any artifacts appearing when enabling the Hot/Dead Pixel Filters, gradually increase the threshold value until they disappear.
-!TP_RAW_HPHD;hphd
-!TP_RAW_IGV;igv
+!TP_RAW_HPHD;HPHD
+!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
-!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel-Shift, Dual Sensitivity). Use this button to select the sub-image.\n\nThe last sub-image will be used if you select a value beyond the real sub-image count.
+!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel Shift, Dual Pixel, Dual Sensitivity). Use this button to select the sub-image.
!TP_RAW_LABEL;Demosaicing
-!TP_RAW_LMMSE;lmmse
+!TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps
!TP_RAW_LMMSE_TOOLTIP;Adds gamma (step 1), median (steps 2-4) and refinement (steps 5-6) to reduce artifacts and improve the signal-to-noise ratio.
-!TP_RAW_MONO;mono
-!TP_RAW_NONE;none (show sensor pattern)
-!TP_RAW_PIXELSHIFT;Pixel Shift (Pentax)
+!TP_RAW_MONO;Mono
+!TP_RAW_NONE;None (Shows sensor pattern)
+!TP_RAW_PIXELSHIFT;Pixel Shift
!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
!TP_RAW_PIXELSHIFTBLUR_TOOLTIP;Blur motion mask
@@ -1810,7 +1818,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
!TP_RAW_SENSOR_XTRANS_LABEL;Sensor with X-Trans Matrix
-!TP_RAW_VNG4;vng4
+!TP_RAW_VNG4;VNG4
!TP_RESIZE_APPLIESTO;Applies to:
!TP_RESIZE_CROPPEDAREA;Cropped Area
!TP_RESIZE_FITBOX;Bounding Box
diff --git a/rtdata/languages/Magyar b/rtdata/languages/Magyar
index 174ccc202..39475006e 100644
--- a/rtdata/languages/Magyar
+++ b/rtdata/languages/Magyar
@@ -898,8 +898,13 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!DYNPROFILEEDITOR_PROFILE;Processing Profile
!EDIT_OBJECT_TOOLTIP;Displays a widget on the preview window which lets you adjust this tool.
!EDIT_PIPETTE_TOOLTIP;To add an adjustment point to the curve, hold the Ctrl key while left-clicking the desired spot in the image preview.\nTo adjust the point, hold the Ctrl key while left-clicking the corresponding area in the preview, then let go of Ctrl (unless you desire fine control) and while still holding the left mouse button move the mouse up or down to move that point up or down in the curve.
+!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_EQUALIZER;Bypass Wavelet Levels
!EXPORT_BYPASS_RAW_LMMSE_ITERATIONS;Bypass [raw] LMMSE Enhancement Steps
+!EXPORT_PIPELINE;Processing pipeline
+!EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image)
+!EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality.
+!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end)
!EXTPROGTARGET_1;raw
!EXTPROGTARGET_2;queue-processed
!FILEBROWSER_COLORLABEL_TOOLTIP;Color label.\n\nUse dropdown menu or shortcuts:\nShift-Ctrl-0 No Color\nShift-Ctrl-1 Red\nShift-Ctrl-2 Yellow\nShift-Ctrl-3 Green\nShift-Ctrl-4 Blue\nShift-Ctrl-5 Purple
@@ -923,6 +928,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!FILEBROWSER_RANK3_TOOLTIP;Rank 3 *\nShortcut: Shift-3
!FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nShortcut: Shift-4
!FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nShortcut: Shift-5
+!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
!FILEBROWSER_SHOWNOTTRASHHINT;Show only non-deleted images.
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
!FILEBROWSER_UNRANK_TOOLTIP;Unrank.\nShortcut: Shift-0
@@ -1315,8 +1321,11 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!PARTIALPASTE_PREPROCESS_DEADPIXFILT;Dead pixel filter
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
+!PARTIALPASTE_RAWCACORR_CAAUTOSTRENGTH;CA auto-correction strength
+!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
!PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps
+!PARTIALPASTE_RAW_PIXELSHIFT;PixelShift
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_AUTLISLOW;Low
@@ -1353,6 +1362,8 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4
!PREFERENCES_DAUB_TOOLTIP;The Noise Reduction and Wavelet Levels tools use a Debauchies mother wavelet. If you choose D6 instead of D4 you increase the number of orthogonal Daubechies coefficients and probably increase quality of small-scale levels. There is no memory or processing time difference between the two.
!PREFERENCES_EXPAUT;Expert
+!PREFERENCES_EXTENDEDZOOMLEVELS;Use finer-grained zoom levels for "fit to screen" zooming
+!PREFERENCES_EXTENDEDZOOMLEVELS_TOOLTIP;This allows to better fill the editor window when using one of the "fit to screen" zoom modes. However, the preview quality might be slightly degraded, depending on the actual zoom factor computed.
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FLUOF2;Fluorescent F2
!PREFERENCES_FLUOF7;Fluorescent F7
@@ -1810,28 +1821,28 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!TP_RAWEXPOS_BLACK_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_RGB;Red, Green, Blue
-!TP_RAW_1-PASS (MEDIUM);1-pass (medium)
-!TP_RAW_3-PASS (BEST);3-pass (best)
-!TP_RAW_AHD;ahd
+!TP_RAW_1PASSMEDIUM;1-Pass (Medium)
+!TP_RAW_3PASSBEST;3-Pass (Best)
+!TP_RAW_AHD;AHD
!TP_RAW_AMAZE;AMaZE
-!TP_RAW_DCB;dcb
+!TP_RAW_DCB;DCB
!TP_RAW_DMETHOD_PROGRESSBAR;%1 demosaicing...
!TP_RAW_DMETHOD_PROGRESSBAR_REFINE;Demosaicing refinement...
-!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixelshift is for Pentax pixelshift files. It falls back to Amaze for non pixelshift files.
-!TP_RAW_EAHD;eahd
-!TP_RAW_FAST;fast
+!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixel Shift is for Pentax Pixel Shift files. It falls back to AMaZE for non-Pixel Shift files.
+!TP_RAW_EAHD;EAHD
+!TP_RAW_FAST;Fast
!TP_RAW_HD;Threshold
!TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, but false positives may lead to artifacts. If you notice any artifacts appearing when enabling the Hot/Dead Pixel Filters, gradually increase the threshold value until they disappear.
-!TP_RAW_HPHD;hphd
-!TP_RAW_IGV;igv
+!TP_RAW_HPHD;HPHD
+!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
-!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel-Shift, Dual Sensitivity). Use this button to select the sub-image.\n\nThe last sub-image will be used if you select a value beyond the real sub-image count.
-!TP_RAW_LMMSE;lmmse
+!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel Shift, Dual Pixel, Dual Sensitivity). Use this button to select the sub-image.
+!TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps
!TP_RAW_LMMSE_TOOLTIP;Adds gamma (step 1), median (steps 2-4) and refinement (steps 5-6) to reduce artifacts and improve the signal-to-noise ratio.
-!TP_RAW_MONO;mono
-!TP_RAW_NONE;none (show sensor pattern)
-!TP_RAW_PIXELSHIFT;Pixel Shift (Pentax)
+!TP_RAW_MONO;Mono
+!TP_RAW_NONE;None (Shows sensor pattern)
+!TP_RAW_PIXELSHIFT;Pixel Shift
!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
!TP_RAW_PIXELSHIFTBLUR_TOOLTIP;Blur motion mask
@@ -1880,7 +1891,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
!TP_RAW_SENSOR_XTRANS_LABEL;Sensor with X-Trans Matrix
-!TP_RAW_VNG4;vng4
+!TP_RAW_VNG4;VNG4
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
diff --git a/rtdata/languages/Nederlands b/rtdata/languages/Nederlands
index 2d5e6a717..4d96c2290 100644
--- a/rtdata/languages/Nederlands
+++ b/rtdata/languages/Nederlands
@@ -2007,6 +2007,12 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: -
!DYNPROFILEEDITOR_NEW;New
!DYNPROFILEEDITOR_NEW_RULE;New Dynamic Profile Rule
!DYNPROFILEEDITOR_PROFILE;Processing Profile
+!EXPORT_BYPASS;Processing steps to bypass
+!EXPORT_PIPELINE;Processing pipeline
+!EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image)
+!EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality.
+!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end)
+!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
!GENERAL_APPLY;Apply
!GENERAL_OPEN;Open
!HISTORY_MSG_439;Retinex - Process
@@ -2069,8 +2075,13 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: -
!IPTCPANEL_TITLEHINT;Enter a short verbal and human readable name for the image, this may be the file name.
!IPTCPANEL_TRANSREFERENCE;Job ID
!IPTCPANEL_TRANSREFERENCEHINT;Enter a number or identifier needed for workflow control or tracking.
+!PARTIALPASTE_RAWCACORR_CAAUTOSTRENGTH;CA auto-correction strength
+!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
+!PARTIALPASTE_RAW_PIXELSHIFT;PixelShift
!PREFERENCES_CMMBPC;Black point compensation
+!PREFERENCES_EXTENDEDZOOMLEVELS;Use finer-grained zoom levels for "fit to screen" zooming
+!PREFERENCES_EXTENDEDZOOMLEVELS_TOOLTIP;This allows to better fill the editor window when using one of the "fit to screen" zoom modes. However, the preview quality might be slightly degraded, depending on the actual zoom factor computed.
!PREFERENCES_MONITOR;Monitor
!PREFERENCES_MONPROFILE;Default color profile
!PREFERENCES_MONPROFILE_WARNOSX;Due to MacOS limitations, only sRGB is supported.
@@ -2096,21 +2107,21 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: -
!TP_ICM_BPC;Black Point Compensation
!TP_ICM_BPC_TOOLTIP;Enable this to fit the Luminosity channel to the output color space with a fix White Point
!TP_ICM_SAVEREFERENCE;Save Reference Image
-!TP_RAW_1-PASS (MEDIUM);1-pass (medium)
-!TP_RAW_3-PASS (BEST);3-pass (best)
-!TP_RAW_AHD;ahd
+!TP_RAW_1PASSMEDIUM;1-Pass (Medium)
+!TP_RAW_3PASSBEST;3-Pass (Best)
+!TP_RAW_AHD;AHD
!TP_RAW_AMAZE;AMaZE
-!TP_RAW_DCB;dcb
-!TP_RAW_EAHD;eahd
-!TP_RAW_FAST;fast
-!TP_RAW_HPHD;hphd
-!TP_RAW_IGV;igv
+!TP_RAW_DCB;DCB
+!TP_RAW_EAHD;EAHD
+!TP_RAW_FAST;Fast
+!TP_RAW_HPHD;HPHD
+!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
-!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel-Shift, Dual Sensitivity). Use this button to select the sub-image.\n\nThe last sub-image will be used if you select a value beyond the real sub-image count.
-!TP_RAW_LMMSE;lmmse
-!TP_RAW_MONO;mono
-!TP_RAW_NONE;none (show sensor pattern)
-!TP_RAW_PIXELSHIFT;Pixel Shift (Pentax)
+!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel Shift, Dual Pixel, Dual Sensitivity). Use this button to select the sub-image.
+!TP_RAW_LMMSE;LMMSE
+!TP_RAW_MONO;Mono
+!TP_RAW_NONE;None (Shows sensor pattern)
+!TP_RAW_PIXELSHIFT;Pixel Shift
!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
!TP_RAW_PIXELSHIFTBLUR_TOOLTIP;Blur motion mask
@@ -2156,7 +2167,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: -
!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
-!TP_RAW_VNG4;vng4
+!TP_RAW_VNG4;VNG4
!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.
diff --git a/rtdata/languages/Norsk BM b/rtdata/languages/Norsk BM
index ed85637b3..19c0c2b92 100644
--- a/rtdata/languages/Norsk BM
+++ b/rtdata/languages/Norsk BM
@@ -464,6 +464,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!EXIFFILTER_EXPOSURECOMPENSATION;Exposure compensation (EV)
!EXIFFILTER_FILETYPE;File type
!EXIFFILTER_METADATAFILTER;Enable metadata filters
+!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_ALL;Select / Unselect All
!EXPORT_BYPASS_DEFRINGE;Bypass Defringe
!EXPORT_BYPASS_DIRPYRDENOISE;Bypass Noise Reduction
@@ -486,8 +487,12 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!EXPORT_INSTRUCTIONS;Fast Export options provide overrides to bypass time and resource consuming development settings and to run queue processing using the fast export settings instead. This method is recommended for quicker generation of lower resolution images when speed is a priority or when resized output is desired for one or many images without making modifications to their saved development parameters.
!EXPORT_MAXHEIGHT;Maximum height:
!EXPORT_MAXWIDTH;Maximum width:
+!EXPORT_PIPELINE;Processing pipeline
!EXPORT_PUTTOQUEUEFAST; Put to queue for fast export
!EXPORT_RAW_DMETHOD;Demosaic method
+!EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image)
+!EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality.
+!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end)
!EXTPROGTARGET_1;raw
!EXTPROGTARGET_2;queue-processed
!FILEBROWSER_ADDDELTEMPLATE;Add/Del templates...
@@ -503,7 +508,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!FILEBROWSER_CURRENT_NAME;Current name:
!FILEBROWSER_DARKFRAME;Dark-frame
!FILEBROWSER_DELETEDLGMSGINCLPROC;Are you sure you want to delete the selected %1 files including a queue-processed version?
-!FILEBROWSER_EXEC_CPB;Custom Profile Builder
!FILEBROWSER_EXTPROGMENU;Open with
!FILEBROWSER_FLATFIELD;Flat-Field
!FILEBROWSER_MOVETODARKFDIR;Move to dark-frames directory
@@ -538,6 +542,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!FILEBROWSER_RANK3_TOOLTIP;Rank 3 *\nShortcut: Shift-3
!FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nShortcut: Shift-4
!FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nShortcut: Shift-5
+!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
!FILEBROWSER_SELECTDARKFRAME;Select dark-frame...
!FILEBROWSER_SELECTFLATFIELD;Select flat-field...
!FILEBROWSER_SHOWCOLORLABEL1HINT;Show images labeled Red.\nShortcut: Alt-1
@@ -1088,8 +1093,8 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!PARTIALPASTE_PREPROCESS_LINEDENOISE;Line noise filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
-!PARTIALPASTE_RAWCACORR_CABLUE;CA blue
-!PARTIALPASTE_RAWCACORR_CARED;CA red
+!PARTIALPASTE_RAWCACORR_CAAUTOSTRENGTH;CA auto-correction strength
+!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
@@ -1100,6 +1105,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!PARTIALPASTE_RAW_FALSECOLOR;False color suppression
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
!PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps
+!PARTIALPASTE_RAW_PIXELSHIFT;PixelShift
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_RGBCURVES;RGB curves
!PARTIALPASTE_SHARPENEDGE;Edges
@@ -1154,6 +1160,8 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!PREFERENCES_DIRDARKFRAMES;Dark-frames directory
!PREFERENCES_EDITORLAYOUT;Editor Layout
!PREFERENCES_EXPAUT;Expert
+!PREFERENCES_EXTENDEDZOOMLEVELS;Use finer-grained zoom levels for "fit to screen" zooming
+!PREFERENCES_EXTENDEDZOOMLEVELS_TOOLTIP;This allows to better fill the editor window when using one of the "fit to screen" zoom modes. However, the preview quality might be slightly degraded, depending on the actual zoom factor computed.
!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display)
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FLATFIELD;Flat-Field
@@ -1736,31 +1744,31 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens
-!TP_RAW_1-PASS (MEDIUM);1-pass (medium)
-!TP_RAW_3-PASS (BEST);3-pass (best)
-!TP_RAW_AHD;ahd
+!TP_RAW_1PASSMEDIUM;1-Pass (Medium)
+!TP_RAW_3PASSBEST;3-Pass (Best)
+!TP_RAW_AHD;AHD
!TP_RAW_AMAZE;AMaZE
-!TP_RAW_DCB;dcb
+!TP_RAW_DCB;DCB
!TP_RAW_DCBENHANCE;DCB enhancement
!TP_RAW_DCBITERATIONS;Number of DCB iterations
!TP_RAW_DMETHOD_PROGRESSBAR;%1 demosaicing...
!TP_RAW_DMETHOD_PROGRESSBAR_REFINE;Demosaicing refinement...
-!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixelshift is for Pentax pixelshift files. It falls back to Amaze for non pixelshift files.
-!TP_RAW_EAHD;eahd
-!TP_RAW_FAST;fast
+!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixel Shift is for Pentax Pixel Shift files. It falls back to AMaZE for non-Pixel Shift files.
+!TP_RAW_EAHD;EAHD
+!TP_RAW_FAST;Fast
!TP_RAW_HD;Threshold
!TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, but false positives may lead to artifacts. If you notice any artifacts appearing when enabling the Hot/Dead Pixel Filters, gradually increase the threshold value until they disappear.
-!TP_RAW_HPHD;hphd
-!TP_RAW_IGV;igv
+!TP_RAW_HPHD;HPHD
+!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
-!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel-Shift, Dual Sensitivity). Use this button to select the sub-image.\n\nThe last sub-image will be used if you select a value beyond the real sub-image count.
+!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel Shift, Dual Pixel, Dual Sensitivity). Use this button to select the sub-image.
!TP_RAW_LABEL;Demosaicing
-!TP_RAW_LMMSE;lmmse
+!TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps
!TP_RAW_LMMSE_TOOLTIP;Adds gamma (step 1), median (steps 2-4) and refinement (steps 5-6) to reduce artifacts and improve the signal-to-noise ratio.
-!TP_RAW_MONO;mono
-!TP_RAW_NONE;none (show sensor pattern)
-!TP_RAW_PIXELSHIFT;Pixel Shift (Pentax)
+!TP_RAW_MONO;Mono
+!TP_RAW_NONE;None (Shows sensor pattern)
+!TP_RAW_PIXELSHIFT;Pixel Shift
!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
!TP_RAW_PIXELSHIFTBLUR_TOOLTIP;Blur motion mask
@@ -1809,7 +1817,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
!TP_RAW_SENSOR_XTRANS_LABEL;Sensor with X-Trans Matrix
-!TP_RAW_VNG4;vng4
+!TP_RAW_VNG4;VNG4
!TP_RESIZE_APPLIESTO;Applies to:
!TP_RESIZE_CROPPEDAREA;Cropped Area
!TP_RESIZE_FITBOX;Bounding Box
diff --git a/rtdata/languages/Polish b/rtdata/languages/Polish
index 42692fccd..a83c2ce48 100644
--- a/rtdata/languages/Polish
+++ b/rtdata/languages/Polish
@@ -1481,7 +1481,13 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: -
!DYNPROFILEEDITOR_NEW;New
!DYNPROFILEEDITOR_NEW_RULE;New Dynamic Profile Rule
!DYNPROFILEEDITOR_PROFILE;Processing Profile
+!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_EQUALIZER;Bypass Wavelet Levels
+!EXPORT_PIPELINE;Processing pipeline
+!EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image)
+!EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality.
+!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end)
+!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
!FILEBROWSER_SHOWNOTTRASHHINT;Show only non-deleted images.
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
!FILECHOOSER_FILTER_ANY;All files
@@ -1703,7 +1709,10 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: -
!MONITOR_PROFILE_SYSTEM;System default
!PARTIALPASTE_EQUALIZER;Wavelet levels
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
+!PARTIALPASTE_RAWCACORR_CAAUTOSTRENGTH;CA auto-correction strength
+!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
+!PARTIALPASTE_RAW_PIXELSHIFT;PixelShift
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_AUTLISLOW;Low
@@ -1724,6 +1733,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: -
!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4
!PREFERENCES_DAUB_TOOLTIP;The Noise Reduction and Wavelet Levels tools use a Debauchies mother wavelet. If you choose D6 instead of D4 you increase the number of orthogonal Daubechies coefficients and probably increase quality of small-scale levels. There is no memory or processing time difference between the two.
!PREFERENCES_EXPAUT;Expert
+!PREFERENCES_EXTENDEDZOOMLEVELS;Use finer-grained zoom levels for "fit to screen" zooming
+!PREFERENCES_EXTENDEDZOOMLEVELS_TOOLTIP;This allows to better fill the editor window when using one of the "fit to screen" zoom modes. However, the preview quality might be slightly degraded, depending on the actual zoom factor computed.
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser.
!PREFERENCES_GREYSC;Scene Yb luminance (%)
@@ -1845,23 +1856,23 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: -
!TP_PRSHARPENING_LABEL;Post-Resize Sharpening
!TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions.
!TP_RAWCACORR_CASTR;Strength
-!TP_RAW_1-PASS (MEDIUM);1-pass (medium)
-!TP_RAW_3-PASS (BEST);3-pass (best)
-!TP_RAW_AHD;ahd
+!TP_RAW_1PASSMEDIUM;1-Pass (Medium)
+!TP_RAW_3PASSBEST;3-Pass (Best)
+!TP_RAW_AHD;AHD
!TP_RAW_AMAZE;AMaZE
-!TP_RAW_DCB;dcb
-!TP_RAW_EAHD;eahd
-!TP_RAW_FAST;fast
+!TP_RAW_DCB;DCB
+!TP_RAW_EAHD;EAHD
+!TP_RAW_FAST;Fast
!TP_RAW_HD;Threshold
!TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, but false positives may lead to artifacts. If you notice any artifacts appearing when enabling the Hot/Dead Pixel Filters, gradually increase the threshold value until they disappear.
-!TP_RAW_HPHD;hphd
-!TP_RAW_IGV;igv
+!TP_RAW_HPHD;HPHD
+!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
-!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel-Shift, Dual Sensitivity). Use this button to select the sub-image.\n\nThe last sub-image will be used if you select a value beyond the real sub-image count.
-!TP_RAW_LMMSE;lmmse
-!TP_RAW_MONO;mono
-!TP_RAW_NONE;none (show sensor pattern)
-!TP_RAW_PIXELSHIFT;Pixel Shift (Pentax)
+!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel Shift, Dual Pixel, Dual Sensitivity). Use this button to select the sub-image.
+!TP_RAW_LMMSE;LMMSE
+!TP_RAW_MONO;Mono
+!TP_RAW_NONE;None (Shows sensor pattern)
+!TP_RAW_PIXELSHIFT;Pixel Shift
!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
!TP_RAW_PIXELSHIFTBLUR_TOOLTIP;Blur motion mask
@@ -1907,7 +1918,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: -
!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
-!TP_RAW_VNG4;vng4
+!TP_RAW_VNG4;VNG4
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
diff --git a/rtdata/languages/Polish (Latin Characters) b/rtdata/languages/Polish (Latin Characters)
index b961fa959..12ba19e83 100644
--- a/rtdata/languages/Polish (Latin Characters)
+++ b/rtdata/languages/Polish (Latin Characters)
@@ -1481,7 +1481,13 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: -
!DYNPROFILEEDITOR_NEW;New
!DYNPROFILEEDITOR_NEW_RULE;New Dynamic Profile Rule
!DYNPROFILEEDITOR_PROFILE;Processing Profile
+!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_EQUALIZER;Bypass Wavelet Levels
+!EXPORT_PIPELINE;Processing pipeline
+!EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image)
+!EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality.
+!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end)
+!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
!FILEBROWSER_SHOWNOTTRASHHINT;Show only non-deleted images.
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
!FILECHOOSER_FILTER_ANY;All files
@@ -1703,7 +1709,10 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: -
!MONITOR_PROFILE_SYSTEM;System default
!PARTIALPASTE_EQUALIZER;Wavelet levels
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
+!PARTIALPASTE_RAWCACORR_CAAUTOSTRENGTH;CA auto-correction strength
+!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
+!PARTIALPASTE_RAW_PIXELSHIFT;PixelShift
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_AUTLISLOW;Low
@@ -1724,6 +1733,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: -
!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4
!PREFERENCES_DAUB_TOOLTIP;The Noise Reduction and Wavelet Levels tools use a Debauchies mother wavelet. If you choose D6 instead of D4 you increase the number of orthogonal Daubechies coefficients and probably increase quality of small-scale levels. There is no memory or processing time difference between the two.
!PREFERENCES_EXPAUT;Expert
+!PREFERENCES_EXTENDEDZOOMLEVELS;Use finer-grained zoom levels for "fit to screen" zooming
+!PREFERENCES_EXTENDEDZOOMLEVELS_TOOLTIP;This allows to better fill the editor window when using one of the "fit to screen" zoom modes. However, the preview quality might be slightly degraded, depending on the actual zoom factor computed.
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser.
!PREFERENCES_GREYSC;Scene Yb luminance (%)
@@ -1845,23 +1856,23 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: -
!TP_PRSHARPENING_LABEL;Post-Resize Sharpening
!TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions.
!TP_RAWCACORR_CASTR;Strength
-!TP_RAW_1-PASS (MEDIUM);1-pass (medium)
-!TP_RAW_3-PASS (BEST);3-pass (best)
-!TP_RAW_AHD;ahd
+!TP_RAW_1PASSMEDIUM;1-Pass (Medium)
+!TP_RAW_3PASSBEST;3-Pass (Best)
+!TP_RAW_AHD;AHD
!TP_RAW_AMAZE;AMaZE
-!TP_RAW_DCB;dcb
-!TP_RAW_EAHD;eahd
-!TP_RAW_FAST;fast
+!TP_RAW_DCB;DCB
+!TP_RAW_EAHD;EAHD
+!TP_RAW_FAST;Fast
!TP_RAW_HD;Threshold
!TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, but false positives may lead to artifacts. If you notice any artifacts appearing when enabling the Hot/Dead Pixel Filters, gradually increase the threshold value until they disappear.
-!TP_RAW_HPHD;hphd
-!TP_RAW_IGV;igv
+!TP_RAW_HPHD;HPHD
+!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
-!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel-Shift, Dual Sensitivity). Use this button to select the sub-image.\n\nThe last sub-image will be used if you select a value beyond the real sub-image count.
-!TP_RAW_LMMSE;lmmse
-!TP_RAW_MONO;mono
-!TP_RAW_NONE;none (show sensor pattern)
-!TP_RAW_PIXELSHIFT;Pixel Shift (Pentax)
+!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel Shift, Dual Pixel, Dual Sensitivity). Use this button to select the sub-image.
+!TP_RAW_LMMSE;LMMSE
+!TP_RAW_MONO;Mono
+!TP_RAW_NONE;None (Shows sensor pattern)
+!TP_RAW_PIXELSHIFT;Pixel Shift
!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
!TP_RAW_PIXELSHIFTBLUR_TOOLTIP;Blur motion mask
@@ -1907,7 +1918,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: -
!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
-!TP_RAW_VNG4;vng4
+!TP_RAW_VNG4;VNG4
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
diff --git a/rtdata/languages/Portugues (Brasil) b/rtdata/languages/Portugues (Brasil)
index cf85697a8..b325ef4bd 100644
--- a/rtdata/languages/Portugues (Brasil)
+++ b/rtdata/languages/Portugues (Brasil)
@@ -465,6 +465,7 @@ TP_WBALANCE_TEMPERATURE;Temperatura
!EXIFFILTER_EXPOSURECOMPENSATION;Exposure compensation (EV)
!EXIFFILTER_FILETYPE;File type
!EXIFFILTER_METADATAFILTER;Enable metadata filters
+!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_ALL;Select / Unselect All
!EXPORT_BYPASS_DEFRINGE;Bypass Defringe
!EXPORT_BYPASS_DIRPYRDENOISE;Bypass Noise Reduction
@@ -487,8 +488,12 @@ TP_WBALANCE_TEMPERATURE;Temperatura
!EXPORT_INSTRUCTIONS;Fast Export options provide overrides to bypass time and resource consuming development settings and to run queue processing using the fast export settings instead. This method is recommended for quicker generation of lower resolution images when speed is a priority or when resized output is desired for one or many images without making modifications to their saved development parameters.
!EXPORT_MAXHEIGHT;Maximum height:
!EXPORT_MAXWIDTH;Maximum width:
+!EXPORT_PIPELINE;Processing pipeline
!EXPORT_PUTTOQUEUEFAST; Put to queue for fast export
!EXPORT_RAW_DMETHOD;Demosaic method
+!EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image)
+!EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality.
+!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end)
!EXTPROGTARGET_1;raw
!EXTPROGTARGET_2;queue-processed
!FILEBROWSER_ADDDELTEMPLATE;Add/Del templates...
@@ -504,7 +509,6 @@ TP_WBALANCE_TEMPERATURE;Temperatura
!FILEBROWSER_CURRENT_NAME;Current name:
!FILEBROWSER_DARKFRAME;Dark-frame
!FILEBROWSER_DELETEDLGMSGINCLPROC;Are you sure you want to delete the selected %1 files including a queue-processed version?
-!FILEBROWSER_EXEC_CPB;Custom Profile Builder
!FILEBROWSER_EXTPROGMENU;Open with
!FILEBROWSER_FLATFIELD;Flat-Field
!FILEBROWSER_MOVETODARKFDIR;Move to dark-frames directory
@@ -539,6 +543,7 @@ TP_WBALANCE_TEMPERATURE;Temperatura
!FILEBROWSER_RANK3_TOOLTIP;Rank 3 *\nShortcut: Shift-3
!FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nShortcut: Shift-4
!FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nShortcut: Shift-5
+!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
!FILEBROWSER_SELECTDARKFRAME;Select dark-frame...
!FILEBROWSER_SELECTFLATFIELD;Select flat-field...
!FILEBROWSER_SHOWCOLORLABEL1HINT;Show images labeled Red.\nShortcut: Alt-1
@@ -1089,8 +1094,8 @@ TP_WBALANCE_TEMPERATURE;Temperatura
!PARTIALPASTE_PREPROCESS_LINEDENOISE;Line noise filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
-!PARTIALPASTE_RAWCACORR_CABLUE;CA blue
-!PARTIALPASTE_RAWCACORR_CARED;CA red
+!PARTIALPASTE_RAWCACORR_CAAUTOSTRENGTH;CA auto-correction strength
+!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
@@ -1101,6 +1106,7 @@ TP_WBALANCE_TEMPERATURE;Temperatura
!PARTIALPASTE_RAW_FALSECOLOR;False color suppression
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
!PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps
+!PARTIALPASTE_RAW_PIXELSHIFT;PixelShift
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_RGBCURVES;RGB curves
!PARTIALPASTE_SHARPENEDGE;Edges
@@ -1155,6 +1161,8 @@ TP_WBALANCE_TEMPERATURE;Temperatura
!PREFERENCES_DIRDARKFRAMES;Dark-frames directory
!PREFERENCES_EDITORLAYOUT;Editor Layout
!PREFERENCES_EXPAUT;Expert
+!PREFERENCES_EXTENDEDZOOMLEVELS;Use finer-grained zoom levels for "fit to screen" zooming
+!PREFERENCES_EXTENDEDZOOMLEVELS_TOOLTIP;This allows to better fill the editor window when using one of the "fit to screen" zoom modes. However, the preview quality might be slightly degraded, depending on the actual zoom factor computed.
!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display)
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FLATFIELD;Flat-Field
@@ -1737,31 +1745,31 @@ TP_WBALANCE_TEMPERATURE;Temperatura
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens
-!TP_RAW_1-PASS (MEDIUM);1-pass (medium)
-!TP_RAW_3-PASS (BEST);3-pass (best)
-!TP_RAW_AHD;ahd
+!TP_RAW_1PASSMEDIUM;1-Pass (Medium)
+!TP_RAW_3PASSBEST;3-Pass (Best)
+!TP_RAW_AHD;AHD
!TP_RAW_AMAZE;AMaZE
-!TP_RAW_DCB;dcb
+!TP_RAW_DCB;DCB
!TP_RAW_DCBENHANCE;DCB enhancement
!TP_RAW_DCBITERATIONS;Number of DCB iterations
!TP_RAW_DMETHOD_PROGRESSBAR;%1 demosaicing...
!TP_RAW_DMETHOD_PROGRESSBAR_REFINE;Demosaicing refinement...
-!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixelshift is for Pentax pixelshift files. It falls back to Amaze for non pixelshift files.
-!TP_RAW_EAHD;eahd
-!TP_RAW_FAST;fast
+!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixel Shift is for Pentax Pixel Shift files. It falls back to AMaZE for non-Pixel Shift files.
+!TP_RAW_EAHD;EAHD
+!TP_RAW_FAST;Fast
!TP_RAW_HD;Threshold
!TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, but false positives may lead to artifacts. If you notice any artifacts appearing when enabling the Hot/Dead Pixel Filters, gradually increase the threshold value until they disappear.
-!TP_RAW_HPHD;hphd
-!TP_RAW_IGV;igv
+!TP_RAW_HPHD;HPHD
+!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
-!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel-Shift, Dual Sensitivity). Use this button to select the sub-image.\n\nThe last sub-image will be used if you select a value beyond the real sub-image count.
+!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel Shift, Dual Pixel, Dual Sensitivity). Use this button to select the sub-image.
!TP_RAW_LABEL;Demosaicing
-!TP_RAW_LMMSE;lmmse
+!TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps
!TP_RAW_LMMSE_TOOLTIP;Adds gamma (step 1), median (steps 2-4) and refinement (steps 5-6) to reduce artifacts and improve the signal-to-noise ratio.
-!TP_RAW_MONO;mono
-!TP_RAW_NONE;none (show sensor pattern)
-!TP_RAW_PIXELSHIFT;Pixel Shift (Pentax)
+!TP_RAW_MONO;Mono
+!TP_RAW_NONE;None (Shows sensor pattern)
+!TP_RAW_PIXELSHIFT;Pixel Shift
!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
!TP_RAW_PIXELSHIFTBLUR_TOOLTIP;Blur motion mask
@@ -1810,7 +1818,7 @@ TP_WBALANCE_TEMPERATURE;Temperatura
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
!TP_RAW_SENSOR_XTRANS_LABEL;Sensor with X-Trans Matrix
-!TP_RAW_VNG4;vng4
+!TP_RAW_VNG4;VNG4
!TP_RESIZE_APPLIESTO;Applies to:
!TP_RESIZE_CROPPEDAREA;Cropped Area
!TP_RESIZE_FITBOX;Bounding Box
diff --git a/rtdata/languages/Russian b/rtdata/languages/Russian
index 343526a17..b3ce61cfa 100644
--- a/rtdata/languages/Russian
+++ b/rtdata/languages/Russian
@@ -1292,8 +1292,14 @@ ZOOMPANEL_ZOOMOUT;Удалить -
!DYNPROFILEEDITOR_PROFILE;Processing Profile
!EDIT_OBJECT_TOOLTIP;Displays a widget on the preview window which lets you adjust this tool.
!EDIT_PIPETTE_TOOLTIP;To add an adjustment point to the curve, hold the Ctrl key while left-clicking the desired spot in the image preview.\nTo adjust the point, hold the Ctrl key while left-clicking the corresponding area in the preview, then let go of Ctrl (unless you desire fine control) and while still holding the left mouse button move the mouse up or down to move that point up or down in the curve.
+!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_EQUALIZER;Bypass Wavelet Levels
+!EXPORT_PIPELINE;Processing pipeline
+!EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image)
+!EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality.
+!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end)
!FILEBROWSER_POPUPRANK0;Unrank
+!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
!FILEBROWSER_SHOWNOTTRASHHINT;Show only non-deleted images.
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
!FILECHOOSER_FILTER_ANY;All files
@@ -1578,7 +1584,10 @@ ZOOMPANEL_ZOOMOUT;Удалить -
!PARTIALPASTE_PREPROCESS_DEADPIXFILT;Dead pixel filter
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
+!PARTIALPASTE_RAWCACORR_CAAUTOSTRENGTH;CA auto-correction strength
+!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
+!PARTIALPASTE_RAW_PIXELSHIFT;PixelShift
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_AUTLISLOW;Low
@@ -1600,6 +1609,8 @@ ZOOMPANEL_ZOOMOUT;Удалить -
!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4
!PREFERENCES_DAUB_TOOLTIP;The Noise Reduction and Wavelet Levels tools use a Debauchies mother wavelet. If you choose D6 instead of D4 you increase the number of orthogonal Daubechies coefficients and probably increase quality of small-scale levels. There is no memory or processing time difference between the two.
!PREFERENCES_EXPAUT;Expert
+!PREFERENCES_EXTENDEDZOOMLEVELS;Use finer-grained zoom levels for "fit to screen" zooming
+!PREFERENCES_EXTENDEDZOOMLEVELS_TOOLTIP;This allows to better fill the editor window when using one of the "fit to screen" zoom modes. However, the preview quality might be slightly degraded, depending on the actual zoom factor computed.
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser.
@@ -1838,23 +1849,23 @@ ZOOMPANEL_ZOOMOUT;Удалить -
!TP_RAWEXPOS_BLACK_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_RGB;Red, Green, Blue
-!TP_RAW_1-PASS (MEDIUM);1-pass (medium)
-!TP_RAW_3-PASS (BEST);3-pass (best)
-!TP_RAW_AHD;ahd
+!TP_RAW_1PASSMEDIUM;1-Pass (Medium)
+!TP_RAW_3PASSBEST;3-Pass (Best)
+!TP_RAW_AHD;AHD
!TP_RAW_AMAZE;AMaZE
-!TP_RAW_DCB;dcb
-!TP_RAW_EAHD;eahd
-!TP_RAW_FAST;fast
+!TP_RAW_DCB;DCB
+!TP_RAW_EAHD;EAHD
+!TP_RAW_FAST;Fast
!TP_RAW_HD;Threshold
!TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, but false positives may lead to artifacts. If you notice any artifacts appearing when enabling the Hot/Dead Pixel Filters, gradually increase the threshold value until they disappear.
-!TP_RAW_HPHD;hphd
-!TP_RAW_IGV;igv
+!TP_RAW_HPHD;HPHD
+!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
-!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel-Shift, Dual Sensitivity). Use this button to select the sub-image.\n\nThe last sub-image will be used if you select a value beyond the real sub-image count.
-!TP_RAW_LMMSE;lmmse
-!TP_RAW_MONO;mono
-!TP_RAW_NONE;none (show sensor pattern)
-!TP_RAW_PIXELSHIFT;Pixel Shift (Pentax)
+!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel Shift, Dual Pixel, Dual Sensitivity). Use this button to select the sub-image.
+!TP_RAW_LMMSE;LMMSE
+!TP_RAW_MONO;Mono
+!TP_RAW_NONE;None (Shows sensor pattern)
+!TP_RAW_PIXELSHIFT;Pixel Shift
!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
!TP_RAW_PIXELSHIFTBLUR_TOOLTIP;Blur motion mask
@@ -1903,7 +1914,7 @@ ZOOMPANEL_ZOOMOUT;Удалить -
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
!TP_RAW_SENSOR_XTRANS_LABEL;Sensor with X-Trans Matrix
-!TP_RAW_VNG4;vng4
+!TP_RAW_VNG4;VNG4
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
diff --git a/rtdata/languages/Serbian (Cyrilic Characters) b/rtdata/languages/Serbian (Cyrilic Characters)
index a8742d98b..3a29d9cdb 100644
--- a/rtdata/languages/Serbian (Cyrilic Characters)
+++ b/rtdata/languages/Serbian (Cyrilic Characters)
@@ -1448,7 +1448,12 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!DYNPROFILEEDITOR_PROFILE;Processing Profile
!EDIT_OBJECT_TOOLTIP;Displays a widget on the preview window which lets you adjust this tool.
!EDIT_PIPETTE_TOOLTIP;To add an adjustment point to the curve, hold the Ctrl key while left-clicking the desired spot in the image preview.\nTo adjust the point, hold the Ctrl key while left-clicking the corresponding area in the preview, then let go of Ctrl (unless you desire fine control) and while still holding the left mouse button move the mouse up or down to move that point up or down in the curve.
+!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_EQUALIZER;Bypass Wavelet Levels
+!EXPORT_PIPELINE;Processing pipeline
+!EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image)
+!EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality.
+!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end)
!FILEBROWSER_POPUPCOLORLABEL0;Label: None
!FILEBROWSER_POPUPCOLORLABEL1;Label: Red
!FILEBROWSER_POPUPCOLORLABEL2;Label: Yellow
@@ -1462,6 +1467,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!FILEBROWSER_POPUPRANK3;Rank 3 ***
!FILEBROWSER_POPUPRANK4;Rank 4 ****
!FILEBROWSER_POPUPRANK5;Rank 5 *****
+!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
!FILEBROWSER_SHOWNOTTRASHHINT;Show only non-deleted images.
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
!FILECHOOSER_FILTER_ANY;All files
@@ -1744,7 +1750,10 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!PARTIALPASTE_PREPROCESS_DEADPIXFILT;Dead pixel filter
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
+!PARTIALPASTE_RAWCACORR_CAAUTOSTRENGTH;CA auto-correction strength
+!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
+!PARTIALPASTE_RAW_PIXELSHIFT;PixelShift
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_AUTLISLOW;Low
@@ -1766,6 +1775,8 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4
!PREFERENCES_DAUB_TOOLTIP;The Noise Reduction and Wavelet Levels tools use a Debauchies mother wavelet. If you choose D6 instead of D4 you increase the number of orthogonal Daubechies coefficients and probably increase quality of small-scale levels. There is no memory or processing time difference between the two.
!PREFERENCES_EXPAUT;Expert
+!PREFERENCES_EXTENDEDZOOMLEVELS;Use finer-grained zoom levels for "fit to screen" zooming
+!PREFERENCES_EXTENDEDZOOMLEVELS_TOOLTIP;This allows to better fill the editor window when using one of the "fit to screen" zoom modes. However, the preview quality might be slightly degraded, depending on the actual zoom factor computed.
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser.
@@ -1971,23 +1982,23 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!TP_RAWEXPOS_BLACK_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_RGB;Red, Green, Blue
-!TP_RAW_1-PASS (MEDIUM);1-pass (medium)
-!TP_RAW_3-PASS (BEST);3-pass (best)
-!TP_RAW_AHD;ahd
+!TP_RAW_1PASSMEDIUM;1-Pass (Medium)
+!TP_RAW_3PASSBEST;3-Pass (Best)
+!TP_RAW_AHD;AHD
!TP_RAW_AMAZE;AMaZE
-!TP_RAW_DCB;dcb
-!TP_RAW_EAHD;eahd
-!TP_RAW_FAST;fast
+!TP_RAW_DCB;DCB
+!TP_RAW_EAHD;EAHD
+!TP_RAW_FAST;Fast
!TP_RAW_HD;Threshold
!TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, but false positives may lead to artifacts. If you notice any artifacts appearing when enabling the Hot/Dead Pixel Filters, gradually increase the threshold value until they disappear.
-!TP_RAW_HPHD;hphd
-!TP_RAW_IGV;igv
+!TP_RAW_HPHD;HPHD
+!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
-!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel-Shift, Dual Sensitivity). Use this button to select the sub-image.\n\nThe last sub-image will be used if you select a value beyond the real sub-image count.
-!TP_RAW_LMMSE;lmmse
-!TP_RAW_MONO;mono
-!TP_RAW_NONE;none (show sensor pattern)
-!TP_RAW_PIXELSHIFT;Pixel Shift (Pentax)
+!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel Shift, Dual Pixel, Dual Sensitivity). Use this button to select the sub-image.
+!TP_RAW_LMMSE;LMMSE
+!TP_RAW_MONO;Mono
+!TP_RAW_NONE;None (Shows sensor pattern)
+!TP_RAW_PIXELSHIFT;Pixel Shift
!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
!TP_RAW_PIXELSHIFTBLUR_TOOLTIP;Blur motion mask
@@ -2036,7 +2047,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
!TP_RAW_SENSOR_XTRANS_LABEL;Sensor with X-Trans Matrix
-!TP_RAW_VNG4;vng4
+!TP_RAW_VNG4;VNG4
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
diff --git a/rtdata/languages/Serbian (Latin Characters) b/rtdata/languages/Serbian (Latin Characters)
index 2a57b01eb..269c941d4 100644
--- a/rtdata/languages/Serbian (Latin Characters)
+++ b/rtdata/languages/Serbian (Latin Characters)
@@ -1448,7 +1448,12 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!DYNPROFILEEDITOR_PROFILE;Processing Profile
!EDIT_OBJECT_TOOLTIP;Displays a widget on the preview window which lets you adjust this tool.
!EDIT_PIPETTE_TOOLTIP;To add an adjustment point to the curve, hold the Ctrl key while left-clicking the desired spot in the image preview.\nTo adjust the point, hold the Ctrl key while left-clicking the corresponding area in the preview, then let go of Ctrl (unless you desire fine control) and while still holding the left mouse button move the mouse up or down to move that point up or down in the curve.
+!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_EQUALIZER;Bypass Wavelet Levels
+!EXPORT_PIPELINE;Processing pipeline
+!EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image)
+!EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality.
+!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end)
!FILEBROWSER_POPUPCOLORLABEL0;Label: None
!FILEBROWSER_POPUPCOLORLABEL1;Label: Red
!FILEBROWSER_POPUPCOLORLABEL2;Label: Yellow
@@ -1462,6 +1467,7 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!FILEBROWSER_POPUPRANK3;Rank 3 ***
!FILEBROWSER_POPUPRANK4;Rank 4 ****
!FILEBROWSER_POPUPRANK5;Rank 5 *****
+!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
!FILEBROWSER_SHOWNOTTRASHHINT;Show only non-deleted images.
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
!FILECHOOSER_FILTER_ANY;All files
@@ -1744,7 +1750,10 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!PARTIALPASTE_PREPROCESS_DEADPIXFILT;Dead pixel filter
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
+!PARTIALPASTE_RAWCACORR_CAAUTOSTRENGTH;CA auto-correction strength
+!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
+!PARTIALPASTE_RAW_PIXELSHIFT;PixelShift
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_AUTLISLOW;Low
@@ -1766,6 +1775,8 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4
!PREFERENCES_DAUB_TOOLTIP;The Noise Reduction and Wavelet Levels tools use a Debauchies mother wavelet. If you choose D6 instead of D4 you increase the number of orthogonal Daubechies coefficients and probably increase quality of small-scale levels. There is no memory or processing time difference between the two.
!PREFERENCES_EXPAUT;Expert
+!PREFERENCES_EXTENDEDZOOMLEVELS;Use finer-grained zoom levels for "fit to screen" zooming
+!PREFERENCES_EXTENDEDZOOMLEVELS_TOOLTIP;This allows to better fill the editor window when using one of the "fit to screen" zoom modes. However, the preview quality might be slightly degraded, depending on the actual zoom factor computed.
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser
!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser.
@@ -1971,23 +1982,23 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!TP_RAWEXPOS_BLACK_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_RGB;Red, Green, Blue
-!TP_RAW_1-PASS (MEDIUM);1-pass (medium)
-!TP_RAW_3-PASS (BEST);3-pass (best)
-!TP_RAW_AHD;ahd
+!TP_RAW_1PASSMEDIUM;1-Pass (Medium)
+!TP_RAW_3PASSBEST;3-Pass (Best)
+!TP_RAW_AHD;AHD
!TP_RAW_AMAZE;AMaZE
-!TP_RAW_DCB;dcb
-!TP_RAW_EAHD;eahd
-!TP_RAW_FAST;fast
+!TP_RAW_DCB;DCB
+!TP_RAW_EAHD;EAHD
+!TP_RAW_FAST;Fast
!TP_RAW_HD;Threshold
!TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, but false positives may lead to artifacts. If you notice any artifacts appearing when enabling the Hot/Dead Pixel Filters, gradually increase the threshold value until they disappear.
-!TP_RAW_HPHD;hphd
-!TP_RAW_IGV;igv
+!TP_RAW_HPHD;HPHD
+!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
-!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel-Shift, Dual Sensitivity). Use this button to select the sub-image.\n\nThe last sub-image will be used if you select a value beyond the real sub-image count.
-!TP_RAW_LMMSE;lmmse
-!TP_RAW_MONO;mono
-!TP_RAW_NONE;none (show sensor pattern)
-!TP_RAW_PIXELSHIFT;Pixel Shift (Pentax)
+!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel Shift, Dual Pixel, Dual Sensitivity). Use this button to select the sub-image.
+!TP_RAW_LMMSE;LMMSE
+!TP_RAW_MONO;Mono
+!TP_RAW_NONE;None (Shows sensor pattern)
+!TP_RAW_PIXELSHIFT;Pixel Shift
!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
!TP_RAW_PIXELSHIFTBLUR_TOOLTIP;Blur motion mask
@@ -2036,7 +2047,7 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
!TP_RAW_SENSOR_XTRANS_LABEL;Sensor with X-Trans Matrix
-!TP_RAW_VNG4;vng4
+!TP_RAW_VNG4;VNG4
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
diff --git a/rtdata/languages/Slovak b/rtdata/languages/Slovak
index 68b277f00..2ebc31ab7 100644
--- a/rtdata/languages/Slovak
+++ b/rtdata/languages/Slovak
@@ -546,6 +546,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!EDIT_PIPETTE_TOOLTIP;To add an adjustment point to the curve, hold the Ctrl key while left-clicking the desired spot in the image preview.\nTo adjust the point, hold the Ctrl key while left-clicking the corresponding area in the preview, then let go of Ctrl (unless you desire fine control) and while still holding the left mouse button move the mouse up or down to move that point up or down in the curve.
!EXIFFILTER_EXPOSURECOMPENSATION;Exposure compensation (EV)
!EXIFFILTER_FILETYPE;File type
+!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_ALL;Select / Unselect All
!EXPORT_BYPASS_DEFRINGE;Bypass Defringe
!EXPORT_BYPASS_DIRPYRDENOISE;Bypass Noise Reduction
@@ -568,8 +569,12 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!EXPORT_INSTRUCTIONS;Fast Export options provide overrides to bypass time and resource consuming development settings and to run queue processing using the fast export settings instead. This method is recommended for quicker generation of lower resolution images when speed is a priority or when resized output is desired for one or many images without making modifications to their saved development parameters.
!EXPORT_MAXHEIGHT;Maximum height:
!EXPORT_MAXWIDTH;Maximum width:
+!EXPORT_PIPELINE;Processing pipeline
!EXPORT_PUTTOQUEUEFAST; Put to queue for fast export
!EXPORT_RAW_DMETHOD;Demosaic method
+!EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image)
+!EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality.
+!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end)
!EXTPROGTARGET_1;raw
!EXTPROGTARGET_2;queue-processed
!FILEBROWSER_APPLYPROFILE_PARTIAL;Apply - partial
@@ -583,7 +588,6 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!FILEBROWSER_COLORLABEL_TOOLTIP;Color label.\n\nUse dropdown menu or shortcuts:\nShift-Ctrl-0 No Color\nShift-Ctrl-1 Red\nShift-Ctrl-2 Yellow\nShift-Ctrl-3 Green\nShift-Ctrl-4 Blue\nShift-Ctrl-5 Purple
!FILEBROWSER_DARKFRAME;Dark-frame
!FILEBROWSER_DELETEDLGMSGINCLPROC;Are you sure you want to delete the selected %1 files including a queue-processed version?
-!FILEBROWSER_EXEC_CPB;Custom Profile Builder
!FILEBROWSER_EXTPROGMENU;Open with
!FILEBROWSER_FLATFIELD;Flat-Field
!FILEBROWSER_MOVETODARKFDIR;Move to dark-frames directory
@@ -617,6 +621,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!FILEBROWSER_RANK3_TOOLTIP;Rank 3 *\nShortcut: Shift-3
!FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nShortcut: Shift-4
!FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nShortcut: Shift-5
+!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
!FILEBROWSER_SELECTDARKFRAME;Select dark-frame...
!FILEBROWSER_SELECTFLATFIELD;Select flat-field...
!FILEBROWSER_SHOWCOLORLABEL1HINT;Show images labeled Red.\nShortcut: Alt-1
@@ -1143,8 +1148,8 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!PARTIALPASTE_PREPROCESS_LINEDENOISE;Line noise filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
-!PARTIALPASTE_RAWCACORR_CABLUE;CA blue
-!PARTIALPASTE_RAWCACORR_CARED;CA red
+!PARTIALPASTE_RAWCACORR_CAAUTOSTRENGTH;CA auto-correction strength
+!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
@@ -1155,6 +1160,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!PARTIALPASTE_RAW_FALSECOLOR;False color suppression
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
!PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps
+!PARTIALPASTE_RAW_PIXELSHIFT;PixelShift
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_RGBCURVES;RGB curves
!PARTIALPASTE_SHARPENEDGE;Edges
@@ -1205,6 +1211,8 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!PREFERENCES_DAUB_TOOLTIP;The Noise Reduction and Wavelet Levels tools use a Debauchies mother wavelet. If you choose D6 instead of D4 you increase the number of orthogonal Daubechies coefficients and probably increase quality of small-scale levels. There is no memory or processing time difference between the two.
!PREFERENCES_DIRDARKFRAMES;Dark-frames directory
!PREFERENCES_EXPAUT;Expert
+!PREFERENCES_EXTENDEDZOOMLEVELS;Use finer-grained zoom levels for "fit to screen" zooming
+!PREFERENCES_EXTENDEDZOOMLEVELS_TOOLTIP;This allows to better fill the editor window when using one of the "fit to screen" zoom modes. However, the preview quality might be slightly degraded, depending on the actual zoom factor computed.
!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display)
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FLATFIELD;Flat-Field
@@ -1750,29 +1758,29 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens
-!TP_RAW_1-PASS (MEDIUM);1-pass (medium)
-!TP_RAW_3-PASS (BEST);3-pass (best)
-!TP_RAW_AHD;ahd
+!TP_RAW_1PASSMEDIUM;1-Pass (Medium)
+!TP_RAW_3PASSBEST;3-Pass (Best)
+!TP_RAW_AHD;AHD
!TP_RAW_AMAZE;AMaZE
-!TP_RAW_DCB;dcb
+!TP_RAW_DCB;DCB
!TP_RAW_DMETHOD_PROGRESSBAR;%1 demosaicing...
!TP_RAW_DMETHOD_PROGRESSBAR_REFINE;Demosaicing refinement...
-!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixelshift is for Pentax pixelshift files. It falls back to Amaze for non pixelshift files.
-!TP_RAW_EAHD;eahd
-!TP_RAW_FAST;fast
+!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixel Shift is for Pentax Pixel Shift files. It falls back to AMaZE for non-Pixel Shift files.
+!TP_RAW_EAHD;EAHD
+!TP_RAW_FAST;Fast
!TP_RAW_HD;Threshold
!TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, but false positives may lead to artifacts. If you notice any artifacts appearing when enabling the Hot/Dead Pixel Filters, gradually increase the threshold value until they disappear.
-!TP_RAW_HPHD;hphd
-!TP_RAW_IGV;igv
+!TP_RAW_HPHD;HPHD
+!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
-!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel-Shift, Dual Sensitivity). Use this button to select the sub-image.\n\nThe last sub-image will be used if you select a value beyond the real sub-image count.
+!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel Shift, Dual Pixel, Dual Sensitivity). Use this button to select the sub-image.
!TP_RAW_LABEL;Demosaicing
-!TP_RAW_LMMSE;lmmse
+!TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps
!TP_RAW_LMMSE_TOOLTIP;Adds gamma (step 1), median (steps 2-4) and refinement (steps 5-6) to reduce artifacts and improve the signal-to-noise ratio.
-!TP_RAW_MONO;mono
-!TP_RAW_NONE;none (show sensor pattern)
-!TP_RAW_PIXELSHIFT;Pixel Shift (Pentax)
+!TP_RAW_MONO;Mono
+!TP_RAW_NONE;None (Shows sensor pattern)
+!TP_RAW_PIXELSHIFT;Pixel Shift
!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
!TP_RAW_PIXELSHIFTBLUR_TOOLTIP;Blur motion mask
@@ -1821,7 +1829,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
!TP_RAW_SENSOR_XTRANS_LABEL;Sensor with X-Trans Matrix
-!TP_RAW_VNG4;vng4
+!TP_RAW_VNG4;VNG4
!TP_RESIZE_APPLIESTO;Applies to:
!TP_RESIZE_CROPPEDAREA;Cropped Area
!TP_RESIZE_FITBOX;Bounding Box
diff --git a/rtdata/languages/Suomi b/rtdata/languages/Suomi
index 925727ba7..b6556bbb0 100644
--- a/rtdata/languages/Suomi
+++ b/rtdata/languages/Suomi
@@ -466,6 +466,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!EXIFFILTER_EXPOSURECOMPENSATION;Exposure compensation (EV)
!EXIFFILTER_FILETYPE;File type
!EXIFFILTER_METADATAFILTER;Enable metadata filters
+!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_ALL;Select / Unselect All
!EXPORT_BYPASS_DEFRINGE;Bypass Defringe
!EXPORT_BYPASS_DIRPYRDENOISE;Bypass Noise Reduction
@@ -488,8 +489,12 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!EXPORT_INSTRUCTIONS;Fast Export options provide overrides to bypass time and resource consuming development settings and to run queue processing using the fast export settings instead. This method is recommended for quicker generation of lower resolution images when speed is a priority or when resized output is desired for one or many images without making modifications to their saved development parameters.
!EXPORT_MAXHEIGHT;Maximum height:
!EXPORT_MAXWIDTH;Maximum width:
+!EXPORT_PIPELINE;Processing pipeline
!EXPORT_PUTTOQUEUEFAST; Put to queue for fast export
!EXPORT_RAW_DMETHOD;Demosaic method
+!EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image)
+!EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality.
+!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end)
!EXTPROGTARGET_1;raw
!EXTPROGTARGET_2;queue-processed
!FILEBROWSER_ADDDELTEMPLATE;Add/Del templates...
@@ -505,7 +510,6 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!FILEBROWSER_CURRENT_NAME;Current name:
!FILEBROWSER_DARKFRAME;Dark-frame
!FILEBROWSER_DELETEDLGMSGINCLPROC;Are you sure you want to delete the selected %1 files including a queue-processed version?
-!FILEBROWSER_EXEC_CPB;Custom Profile Builder
!FILEBROWSER_EXTPROGMENU;Open with
!FILEBROWSER_FLATFIELD;Flat-Field
!FILEBROWSER_MOVETODARKFDIR;Move to dark-frames directory
@@ -540,6 +544,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!FILEBROWSER_RANK3_TOOLTIP;Rank 3 *\nShortcut: Shift-3
!FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nShortcut: Shift-4
!FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nShortcut: Shift-5
+!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
!FILEBROWSER_SELECTDARKFRAME;Select dark-frame...
!FILEBROWSER_SELECTFLATFIELD;Select flat-field...
!FILEBROWSER_SHOWCOLORLABEL1HINT;Show images labeled Red.\nShortcut: Alt-1
@@ -1090,8 +1095,8 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!PARTIALPASTE_PREPROCESS_LINEDENOISE;Line noise filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
-!PARTIALPASTE_RAWCACORR_CABLUE;CA blue
-!PARTIALPASTE_RAWCACORR_CARED;CA red
+!PARTIALPASTE_RAWCACORR_CAAUTOSTRENGTH;CA auto-correction strength
+!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
@@ -1102,6 +1107,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!PARTIALPASTE_RAW_FALSECOLOR;False color suppression
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
!PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps
+!PARTIALPASTE_RAW_PIXELSHIFT;PixelShift
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_RGBCURVES;RGB curves
!PARTIALPASTE_SHARPENEDGE;Edges
@@ -1156,6 +1162,8 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!PREFERENCES_DIRDARKFRAMES;Dark-frames directory
!PREFERENCES_EDITORLAYOUT;Editor Layout
!PREFERENCES_EXPAUT;Expert
+!PREFERENCES_EXTENDEDZOOMLEVELS;Use finer-grained zoom levels for "fit to screen" zooming
+!PREFERENCES_EXTENDEDZOOMLEVELS_TOOLTIP;This allows to better fill the editor window when using one of the "fit to screen" zoom modes. However, the preview quality might be slightly degraded, depending on the actual zoom factor computed.
!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display)
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FLATFIELD;Flat-Field
@@ -1737,31 +1745,31 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens
-!TP_RAW_1-PASS (MEDIUM);1-pass (medium)
-!TP_RAW_3-PASS (BEST);3-pass (best)
-!TP_RAW_AHD;ahd
+!TP_RAW_1PASSMEDIUM;1-Pass (Medium)
+!TP_RAW_3PASSBEST;3-Pass (Best)
+!TP_RAW_AHD;AHD
!TP_RAW_AMAZE;AMaZE
-!TP_RAW_DCB;dcb
+!TP_RAW_DCB;DCB
!TP_RAW_DCBENHANCE;DCB enhancement
!TP_RAW_DCBITERATIONS;Number of DCB iterations
!TP_RAW_DMETHOD_PROGRESSBAR;%1 demosaicing...
!TP_RAW_DMETHOD_PROGRESSBAR_REFINE;Demosaicing refinement...
-!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixelshift is for Pentax pixelshift files. It falls back to Amaze for non pixelshift files.
-!TP_RAW_EAHD;eahd
-!TP_RAW_FAST;fast
+!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixel Shift is for Pentax Pixel Shift files. It falls back to AMaZE for non-Pixel Shift files.
+!TP_RAW_EAHD;EAHD
+!TP_RAW_FAST;Fast
!TP_RAW_HD;Threshold
!TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, but false positives may lead to artifacts. If you notice any artifacts appearing when enabling the Hot/Dead Pixel Filters, gradually increase the threshold value until they disappear.
-!TP_RAW_HPHD;hphd
-!TP_RAW_IGV;igv
+!TP_RAW_HPHD;HPHD
+!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
-!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel-Shift, Dual Sensitivity). Use this button to select the sub-image.\n\nThe last sub-image will be used if you select a value beyond the real sub-image count.
+!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel Shift, Dual Pixel, Dual Sensitivity). Use this button to select the sub-image.
!TP_RAW_LABEL;Demosaicing
-!TP_RAW_LMMSE;lmmse
+!TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps
!TP_RAW_LMMSE_TOOLTIP;Adds gamma (step 1), median (steps 2-4) and refinement (steps 5-6) to reduce artifacts and improve the signal-to-noise ratio.
-!TP_RAW_MONO;mono
-!TP_RAW_NONE;none (show sensor pattern)
-!TP_RAW_PIXELSHIFT;Pixel Shift (Pentax)
+!TP_RAW_MONO;Mono
+!TP_RAW_NONE;None (Shows sensor pattern)
+!TP_RAW_PIXELSHIFT;Pixel Shift
!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
!TP_RAW_PIXELSHIFTBLUR_TOOLTIP;Blur motion mask
@@ -1810,7 +1818,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
!TP_RAW_SENSOR_XTRANS_LABEL;Sensor with X-Trans Matrix
-!TP_RAW_VNG4;vng4
+!TP_RAW_VNG4;VNG4
!TP_RESIZE_APPLIESTO;Applies to:
!TP_RESIZE_CROPPEDAREA;Cropped Area
!TP_RESIZE_FITBOX;Bounding Box
diff --git a/rtdata/languages/Swedish b/rtdata/languages/Swedish
index 722ec8f53..1fffdb51f 100644
--- a/rtdata/languages/Swedish
+++ b/rtdata/languages/Swedish
@@ -1904,6 +1904,12 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: -
!DYNPROFILEEDITOR_NEW;New
!DYNPROFILEEDITOR_NEW_RULE;New Dynamic Profile Rule
!DYNPROFILEEDITOR_PROFILE;Processing Profile
+!EXPORT_BYPASS;Processing steps to bypass
+!EXPORT_PIPELINE;Processing pipeline
+!EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image)
+!EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality.
+!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end)
+!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
!HISTORY_MSG_257;Color Toning
!HISTORY_MSG_288;Flat Field - Clip control
!HISTORY_MSG_289;Flat Field - Clip control - Auto
@@ -1985,8 +1991,13 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: -
!IPTCPANEL_TRANSREFERENCEHINT;Enter a number or identifier needed for workflow control or tracking.
!PARTIALPASTE_COLORTONING;Color toning
!PARTIALPASTE_FLATFIELDCLIPCONTROL;Flat-field clip control
+!PARTIALPASTE_RAWCACORR_CAAUTOSTRENGTH;CA auto-correction strength
+!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
+!PARTIALPASTE_RAW_PIXELSHIFT;PixelShift
!PREFERENCES_CMMBPC;Black point compensation
+!PREFERENCES_EXTENDEDZOOMLEVELS;Use finer-grained zoom levels for "fit to screen" zooming
+!PREFERENCES_EXTENDEDZOOMLEVELS_TOOLTIP;This allows to better fill the editor window when using one of the "fit to screen" zoom modes. However, the preview quality might be slightly degraded, depending on the actual zoom factor computed.
!PREFERENCES_INSPECT_MAXBUFFERS_TOOLTIP;Set the maximum number of images stored in cache when hovering over them in the File Browser; systems with little RAM (2GB) should keep this value set to 1 or 2.
!PREFERENCES_LISS;Auto multi-zone smoothing
!PREFERENCES_MONINTENT;Default rendering intent
@@ -2025,21 +2036,21 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: -
!TP_ICM_BPC_TOOLTIP;Enable this to fit the Luminosity channel to the output color space with a fix White Point
!TP_ICM_PROFILEINTENT;Rendering Intent
!TP_ICM_SAVEREFERENCE;Save Reference Image
-!TP_RAW_1-PASS (MEDIUM);1-pass (medium)
-!TP_RAW_3-PASS (BEST);3-pass (best)
-!TP_RAW_AHD;ahd
+!TP_RAW_1PASSMEDIUM;1-Pass (Medium)
+!TP_RAW_3PASSBEST;3-Pass (Best)
+!TP_RAW_AHD;AHD
!TP_RAW_AMAZE;AMaZE
-!TP_RAW_DCB;dcb
-!TP_RAW_EAHD;eahd
-!TP_RAW_FAST;fast
-!TP_RAW_HPHD;hphd
-!TP_RAW_IGV;igv
+!TP_RAW_DCB;DCB
+!TP_RAW_EAHD;EAHD
+!TP_RAW_FAST;Fast
+!TP_RAW_HPHD;HPHD
+!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
-!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel-Shift, Dual Sensitivity). Use this button to select the sub-image.\n\nThe last sub-image will be used if you select a value beyond the real sub-image count.
-!TP_RAW_LMMSE;lmmse
-!TP_RAW_MONO;mono
-!TP_RAW_NONE;none (show sensor pattern)
-!TP_RAW_PIXELSHIFT;Pixel Shift (Pentax)
+!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel Shift, Dual Pixel, Dual Sensitivity). Use this button to select the sub-image.
+!TP_RAW_LMMSE;LMMSE
+!TP_RAW_MONO;Mono
+!TP_RAW_NONE;None (Shows sensor pattern)
+!TP_RAW_PIXELSHIFT;Pixel Shift
!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
!TP_RAW_PIXELSHIFTBLUR_TOOLTIP;Blur motion mask
@@ -2085,7 +2096,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: -
!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
-!TP_RAW_VNG4;vng4
+!TP_RAW_VNG4;VNG4
!TP_RETINEX_CONTEDIT_MAP;Mask equalizer
!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts.
!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
diff --git a/rtdata/languages/Turkish b/rtdata/languages/Turkish
index e22ccd1b9..b84ef05a8 100644
--- a/rtdata/languages/Turkish
+++ b/rtdata/languages/Turkish
@@ -465,6 +465,7 @@ TP_WBALANCE_TEMPERATURE;Isı
!EXIFFILTER_EXPOSURECOMPENSATION;Exposure compensation (EV)
!EXIFFILTER_FILETYPE;File type
!EXIFFILTER_METADATAFILTER;Enable metadata filters
+!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_ALL;Select / Unselect All
!EXPORT_BYPASS_DEFRINGE;Bypass Defringe
!EXPORT_BYPASS_DIRPYRDENOISE;Bypass Noise Reduction
@@ -487,8 +488,12 @@ TP_WBALANCE_TEMPERATURE;Isı
!EXPORT_INSTRUCTIONS;Fast Export options provide overrides to bypass time and resource consuming development settings and to run queue processing using the fast export settings instead. This method is recommended for quicker generation of lower resolution images when speed is a priority or when resized output is desired for one or many images without making modifications to their saved development parameters.
!EXPORT_MAXHEIGHT;Maximum height:
!EXPORT_MAXWIDTH;Maximum width:
+!EXPORT_PIPELINE;Processing pipeline
!EXPORT_PUTTOQUEUEFAST; Put to queue for fast export
!EXPORT_RAW_DMETHOD;Demosaic method
+!EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image)
+!EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality.
+!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end)
!EXTPROGTARGET_1;raw
!EXTPROGTARGET_2;queue-processed
!FILEBROWSER_ADDDELTEMPLATE;Add/Del templates...
@@ -504,7 +509,6 @@ TP_WBALANCE_TEMPERATURE;Isı
!FILEBROWSER_CURRENT_NAME;Current name:
!FILEBROWSER_DARKFRAME;Dark-frame
!FILEBROWSER_DELETEDLGMSGINCLPROC;Are you sure you want to delete the selected %1 files including a queue-processed version?
-!FILEBROWSER_EXEC_CPB;Custom Profile Builder
!FILEBROWSER_EXTPROGMENU;Open with
!FILEBROWSER_FLATFIELD;Flat-Field
!FILEBROWSER_MOVETODARKFDIR;Move to dark-frames directory
@@ -539,6 +543,7 @@ TP_WBALANCE_TEMPERATURE;Isı
!FILEBROWSER_RANK3_TOOLTIP;Rank 3 *\nShortcut: Shift-3
!FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nShortcut: Shift-4
!FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nShortcut: Shift-5
+!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
!FILEBROWSER_SELECTDARKFRAME;Select dark-frame...
!FILEBROWSER_SELECTFLATFIELD;Select flat-field...
!FILEBROWSER_SHOWCOLORLABEL1HINT;Show images labeled Red.\nShortcut: Alt-1
@@ -1089,8 +1094,8 @@ TP_WBALANCE_TEMPERATURE;Isı
!PARTIALPASTE_PREPROCESS_LINEDENOISE;Line noise filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
-!PARTIALPASTE_RAWCACORR_CABLUE;CA blue
-!PARTIALPASTE_RAWCACORR_CARED;CA red
+!PARTIALPASTE_RAWCACORR_CAAUTOSTRENGTH;CA auto-correction strength
+!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
@@ -1101,6 +1106,7 @@ TP_WBALANCE_TEMPERATURE;Isı
!PARTIALPASTE_RAW_FALSECOLOR;False color suppression
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
!PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps
+!PARTIALPASTE_RAW_PIXELSHIFT;PixelShift
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_RGBCURVES;RGB curves
!PARTIALPASTE_SHARPENEDGE;Edges
@@ -1155,6 +1161,8 @@ TP_WBALANCE_TEMPERATURE;Isı
!PREFERENCES_DIRDARKFRAMES;Dark-frames directory
!PREFERENCES_EDITORLAYOUT;Editor Layout
!PREFERENCES_EXPAUT;Expert
+!PREFERENCES_EXTENDEDZOOMLEVELS;Use finer-grained zoom levels for "fit to screen" zooming
+!PREFERENCES_EXTENDEDZOOMLEVELS_TOOLTIP;This allows to better fill the editor window when using one of the "fit to screen" zoom modes. However, the preview quality might be slightly degraded, depending on the actual zoom factor computed.
!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display)
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FLATFIELD;Flat-Field
@@ -1736,31 +1744,31 @@ TP_WBALANCE_TEMPERATURE;Isı
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens
-!TP_RAW_1-PASS (MEDIUM);1-pass (medium)
-!TP_RAW_3-PASS (BEST);3-pass (best)
-!TP_RAW_AHD;ahd
+!TP_RAW_1PASSMEDIUM;1-Pass (Medium)
+!TP_RAW_3PASSBEST;3-Pass (Best)
+!TP_RAW_AHD;AHD
!TP_RAW_AMAZE;AMaZE
-!TP_RAW_DCB;dcb
+!TP_RAW_DCB;DCB
!TP_RAW_DCBENHANCE;DCB enhancement
!TP_RAW_DCBITERATIONS;Number of DCB iterations
!TP_RAW_DMETHOD_PROGRESSBAR;%1 demosaicing...
!TP_RAW_DMETHOD_PROGRESSBAR_REFINE;Demosaicing refinement...
-!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixelshift is for Pentax pixelshift files. It falls back to Amaze for non pixelshift files.
-!TP_RAW_EAHD;eahd
-!TP_RAW_FAST;fast
+!TP_RAW_DMETHOD_TOOLTIP;Note: IGV and LMMSE are dedicated to high ISO images to aid in noise reduction without leading to maze patterns, posterization or a washed-out look.\nPixel Shift is for Pentax Pixel Shift files. It falls back to AMaZE for non-Pixel Shift files.
+!TP_RAW_EAHD;EAHD
+!TP_RAW_FAST;Fast
!TP_RAW_HD;Threshold
!TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, but false positives may lead to artifacts. If you notice any artifacts appearing when enabling the Hot/Dead Pixel Filters, gradually increase the threshold value until they disappear.
-!TP_RAW_HPHD;hphd
-!TP_RAW_IGV;igv
+!TP_RAW_HPHD;HPHD
+!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
-!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel-Shift, Dual Sensitivity). Use this button to select the sub-image.\n\nThe last sub-image will be used if you select a value beyond the real sub-image count.
+!TP_RAW_IMAGENUM_TOOLTIP;Some raw files might embed several sub-images (HDR, Pixel Shift, Dual Pixel, Dual Sensitivity). Use this button to select the sub-image.
!TP_RAW_LABEL;Demosaicing
-!TP_RAW_LMMSE;lmmse
+!TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps
!TP_RAW_LMMSE_TOOLTIP;Adds gamma (step 1), median (steps 2-4) and refinement (steps 5-6) to reduce artifacts and improve the signal-to-noise ratio.
-!TP_RAW_MONO;mono
-!TP_RAW_NONE;none (show sensor pattern)
-!TP_RAW_PIXELSHIFT;Pixel Shift (Pentax)
+!TP_RAW_MONO;Mono
+!TP_RAW_NONE;None (Shows sensor pattern)
+!TP_RAW_PIXELSHIFT;Pixel Shift
!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
!TP_RAW_PIXELSHIFTBLUR_TOOLTIP;Blur motion mask
@@ -1809,7 +1817,7 @@ TP_WBALANCE_TEMPERATURE;Isı
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
!TP_RAW_SENSOR_XTRANS_LABEL;Sensor with X-Trans Matrix
-!TP_RAW_VNG4;vng4
+!TP_RAW_VNG4;VNG4
!TP_RESIZE_APPLIESTO;Applies to:
!TP_RESIZE_CROPPEDAREA;Cropped Area
!TP_RESIZE_FITBOX;Bounding Box
diff --git a/rtdata/languages/default b/rtdata/languages/default
index 5f400baea..fdb1ebfe9 100644
--- a/rtdata/languages/default
+++ b/rtdata/languages/default
@@ -71,6 +71,7 @@ EXIFPANEL_RESETALL;Reset All
EXIFPANEL_RESETALLHINT;Reset all tags to their original values.
EXIFPANEL_RESETHINT;Reset the selected tags to their original values.
EXIFPANEL_SUBDIRECTORY;Subdirectory
+EXPORT_BYPASS;Processing steps to bypass
EXPORT_BYPASS_ALL;Select / Unselect All
EXPORT_BYPASS_DEFRINGE;Bypass Defringe
EXPORT_BYPASS_DIRPYRDENOISE;Bypass Noise Reduction
@@ -93,8 +94,12 @@ EXPORT_FASTEXPORTOPTIONS;Fast Export Options
EXPORT_INSTRUCTIONS;Fast Export options provide overrides to bypass time and resource consuming development settings and to run queue processing using the fast export settings instead. This method is recommended for quicker generation of lower resolution images when speed is a priority or when resized output is desired for one or many images without making modifications to their saved development parameters.
EXPORT_MAXHEIGHT;Maximum height:
EXPORT_MAXWIDTH;Maximum width:
+EXPORT_PIPELINE;Processing pipeline
EXPORT_PUTTOQUEUEFAST; Put to queue for fast export
EXPORT_RAW_DMETHOD;Demosaic method
+EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image)
+EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality.
+EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end)
EXTPROGTARGET_1;raw
EXTPROGTARGET_2;queue-processed
FILEBROWSER_ADDDELTEMPLATE;Add/Del templates...
@@ -117,7 +122,6 @@ FILEBROWSER_DELETEDLGMSG;Are you sure you want to delete the selected %1
FILEBROWSER_DELETEDLGMSGINCLPROC;Are you sure you want to delete the selected %1 files including a queue-processed version?
FILEBROWSER_EMPTYTRASH;Empty trash
FILEBROWSER_EMPTYTRASHHINT;Permanently delete the files from trash.
-FILEBROWSER_EXEC_CPB;Custom Profile Builder
FILEBROWSER_EXTPROGMENU;Open with
FILEBROWSER_FLATFIELD;Flat-Field
FILEBROWSER_MOVETODARKFDIR;Move to dark-frames directory
@@ -167,6 +171,7 @@ FILEBROWSER_RANK3_TOOLTIP;Rank 3 *\nShortcut: Shift-3
FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nShortcut: Shift-4
FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nShortcut: Shift-5
FILEBROWSER_RENAMEDLGLABEL;Rename file
+FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
FILEBROWSER_SELECTDARKFRAME;Select dark-frame...
FILEBROWSER_SELECTFLATFIELD;Select flat-field...
FILEBROWSER_SHOWCOLORLABEL1HINT;Show images labeled Red.\nShortcut: Alt-1
@@ -965,8 +970,8 @@ PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
PARTIALPASTE_PREPROCESS_LINEDENOISE;Line noise filter
PARTIALPASTE_PRSHARPENING;Post-resize sharpening
PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
-PARTIALPASTE_RAWCACORR_CABLUE;CA blue
-PARTIALPASTE_RAWCACORR_CARED;CA red
+PARTIALPASTE_RAWCACORR_CAAUTOSTRENGTH;CA auto-correction strength
+PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
PARTIALPASTE_RAWEXPOS_BLACK;Black levels
PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
@@ -977,6 +982,7 @@ PARTIALPASTE_RAW_DMETHOD;Demosaic method
PARTIALPASTE_RAW_FALSECOLOR;False color suppression
PARTIALPASTE_RAW_IMAGENUM;Sub-image
PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps
+PARTIALPASTE_RAW_PIXELSHIFT;PixelShift
PARTIALPASTE_RESIZE;Resize
PARTIALPASTE_RETINEX;Retinex
PARTIALPASTE_RGBCURVES;RGB curves
@@ -1056,6 +1062,8 @@ PREFERENCES_DIRSOFTWARE;Installation directory
PREFERENCES_EDITORCMDLINE;Other command line
PREFERENCES_EDITORLAYOUT;Editor Layout
PREFERENCES_EXPAUT;Expert
+PREFERENCES_EXTENDEDZOOMLEVELS;Use finer-grained zoom levels for "fit to screen" zooming
+PREFERENCES_EXTENDEDZOOMLEVELS_TOOLTIP;This allows to better fill the editor window when using one of the "fit to screen" zoom modes. However, the preview quality might be slightly degraded, depending on the actual zoom factor computed.
PREFERENCES_EXTERNALEDITOR;External Editor
PREFERENCES_FBROWSEROPTS;File Browser / Thumbnail Options
PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display)
@@ -1164,8 +1172,6 @@ PREFERENCES_PRTPROFILE;Color profile
PREFERENCES_PSPATH;Adobe Photoshop installation directory
PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset
PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
-PREFERENCES_EXTENDEDZOOMLEVELS;Use finer-grained zoom levels for "fit to screen" zooming
-PREFERENCES_EXTENDEDZOOMLEVELS_TOOLTIP;This allows to better fill the editor window when using one of the "fit to screen" zoom modes. However, the preview quality might be slightly degraded, depending on the actual zoom factor computed.
PREFERENCES_RGBDTL_LABEL;Max number of threads for Noise Reduction and Wavelet Levels
PREFERENCES_RGBDTL_TOOLTIP;Leave the setting at "0" to automatically use as many threads as possible. The more threads run in parallel, the faster the computation. Refer to RawPedia for memory requirements.
PREFERENCES_SELECTFONT;Select main font
diff --git a/rtengine/CA_correct_RT.cc b/rtengine/CA_correct_RT.cc
index fc9967619..8471a1393 100644
--- a/rtengine/CA_correct_RT.cc
+++ b/rtengine/CA_correct_RT.cc
@@ -241,7 +241,6 @@ void RawImageSource::CA_correct_RT(const bool autoCA, const double cared, const
for (int row = rr + top, cc = ccmin; cc < ccmax; cc++) {
int col = cc + left;
int c = FC(rr, cc);
- int indx = row * width + col;
int indx1 = rr * ts + cc;
rgb[c][indx1] = (rawData[row][col]) / 65535.0f;
}
@@ -966,10 +965,9 @@ void RawImageSource::CA_correct_RT(const bool autoCA, const double cared, const
// copy CA corrected results to temporary image matrix
for (int rr = border; rr < rr1 - border; rr++) {
- int c = FC(rr + top, left + border + FC(rr + top, 2) & 1);
+ int c = FC(rr + top, left + border + (FC(rr + top, 2) & 1));
for (int row = rr + top, cc = border + (FC(rr, 2) & 1), indx = (row * width + cc + left) >> 1; cc < cc1 - border; cc += 2, indx++) {
- int col = cc + left;
RawDataTmp[indx] = 65535.0f * rgb[c][(rr) * ts + cc] + 0.5f;
}
}
diff --git a/rtengine/EdgePreservingDecomposition.cc b/rtengine/EdgePreservingDecomposition.cc
index 7bc292c3f..43a68f024 100644
--- a/rtengine/EdgePreservingDecomposition.cc
+++ b/rtengine/EdgePreservingDecomposition.cc
@@ -21,7 +21,7 @@ Takes less memory with OkToModify_b = true, and Preconditioner = nullptr. */
float *SparseConjugateGradient(void Ax(float *Product, float *x, void *Pass), float *b, int n, bool OkToModify_b,
float *x, float RMSResidual, void *Pass, int MaximumIterates, void Preconditioner(float *Product, float *x, void *Pass))
{
- int iterate, i;
+ int iterate;
float* buffer = (float*)malloc(2 * n * sizeof(float) + 128);
float *r = (buffer + 16);
@@ -411,7 +411,7 @@ bool MultiDiagonalSymmetricMatrix::CreateIncompleteCholeskyFactorization(int Max
//How many diagonals in the decomposition?
MaxFillAbove++; //Conceptually, now "fill" includes an existing diagonal. Simpler in the math that follows.
- int i, j, mic, fp;
+ int j, mic, fp;
mic = 1;
fp = 1;
@@ -441,8 +441,8 @@ bool MultiDiagonalSymmetricMatrix::CreateIncompleteCholeskyFactorization(int Max
}
//It's all initialized? Uhkay. Do the actual math then.
- int sss, ss;
- int MaxStartRow = StartRows[m - 1]; //Handy number.
+ int sss;
+ // int MaxStartRow = StartRows[m - 1]; //Handy number.
float **l = ic->Diagonals;
float *d = ic->Diagonals[0]; //Describes D in LDLt.
int icm = ic->m;
diff --git a/rtengine/FTblockDN.cc b/rtengine/FTblockDN.cc
index 1d5897cc6..285562d17 100644
--- a/rtengine/FTblockDN.cc
+++ b/rtengine/FTblockDN.cc
@@ -125,7 +125,7 @@ void ImProcFunctions::Median_Denoise(float **src, float **dst, const int width,
medBuffer[1] = dst;
}
- float ** medianIn, ** medianOut;
+ float ** medianIn, ** medianOut = nullptr;
int BufferIndex = 0;
for (int iteration = 1; iteration <= iterations; ++iteration) {
@@ -454,10 +454,10 @@ SSEFUNCTION void ImProcFunctions::RGB_denoise(int kall, Imagefloat * src, Imagef
const bool useNoiseLCurve = (noiseLCurve && noiseLCurve.getSum() >= 7.f);
const bool autoch = (settings->leveldnautsimpl == 1 && (dnparams.Cmethod == "AUT" || dnparams.Cmethod == "PRE")) || (settings->leveldnautsimpl == 0 && (dnparams.C2method == "AUTO" || dnparams.C2method == "PREV"));
- float** lumcalc;
- float* lumcalcBuffer;
- float** ccalc;
- float* ccalcBuffer;
+ float** lumcalc = nullptr;
+ float* lumcalcBuffer = nullptr;
+ float** ccalc = nullptr;
+ float* ccalcBuffer = nullptr;
bool ponder = false;
float ponderCC = 1.f;
@@ -518,7 +518,7 @@ SSEFUNCTION void ImProcFunctions::RGB_denoise(int kall, Imagefloat * src, Imagef
ccalc[i] = ccalcBuffer + (i * wid);
}
- float cn100Precalc;
+ float cn100Precalc = 0.f;
if (useNoiseCCurve) {
cn100Precalc = SQR(1.f + ponderCC * (4.f * noiseCCurve[100.f / 60.f]));
diff --git a/rtengine/LUT.h b/rtengine/LUT.h
index d83a431ca..df95dde7f 100644
--- a/rtengine/LUT.h
+++ b/rtengine/LUT.h
@@ -579,7 +579,7 @@ public:
numVals = std::min(numVals, passThrough.getSize());
float mult = dest.size - 1;
- for (int i = 0; i < numVals; i++) {
+ for (unsigned int i = 0; i < numVals; i++) {
int hi = (int)(mult * passThrough[i]);
dest[hi] += this->data[i] ;
}
@@ -599,7 +599,7 @@ public:
vint sumv = (vint)ZEROV;
vfloat avgv = ZEROV;
- for(; i < size - 3; i += 4) {
+ for(; i < static_cast(size) - 3; i += 4) {
vint datav = _mm_loadu_si128((__m128i*)&data[i]);
sumv += datav;
avgv += iv * _mm_cvtepi32_ps(datav);
@@ -611,7 +611,7 @@ public:
avg = vhadd(avgv);
#endif
- for (; i < size; i++) {
+ for (; i < static_cast(size); i++) {
T val = data[i];
sum += val;
avg += i * val;
diff --git a/rtengine/array2D.h b/rtengine/array2D.h
index 8a77bfc3c..c05c739dc 100644
--- a/rtengine/array2D.h
+++ b/rtengine/array2D.h
@@ -113,7 +113,7 @@ public:
// use as empty declaration, resize before use!
// very useful as a member object
array2D() :
- x(0), y(0), owner(0), ptr(nullptr), data(nullptr), lock(0), flags(0)
+ x(0), y(0), owner(0), flags(0), ptr(nullptr), data(nullptr), lock(0)
{
//printf("got empty array2D init\n");
}
diff --git a/rtengine/clutstore.cc b/rtengine/clutstore.cc
index 7a5f6fd19..ba117a2fd 100644
--- a/rtengine/clutstore.cc
+++ b/rtengine/clutstore.cc
@@ -32,7 +32,7 @@ bool loadFile(
bool res = false;
if (fw == fh) {
- unsigned int level = 1;
+ int level = 1;
while (level * level * level < fw) {
++level;
diff --git a/rtengine/color.cc b/rtengine/color.cc
index 5cf1d45b1..acb50eae5 100644
--- a/rtengine/color.cc
+++ b/rtengine/color.cc
@@ -1530,18 +1530,8 @@ void Color::interpolateRGBColor (float realL, float iplow, float iphigh, int alg
int toDo, 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, L2, LL, a_1, b_1, a_2, b_2, a, b, a_L, b_L;
- float c1, c2, h1, h2, cL, hL;
- float RR, GG, BB;
- float Lr;
- float slc = 0.f;
- float hh = 0.f;
- float ll = 0.f;
- float sh = 0.f;
- bool LCH = false;
+ float L1 = 0.f, L2, LL, a_1 = 0.f, b_1 = 0.f, a_2, b_2, a_L, b_L;
- float ha, hb, hc, ba;
- float c_1, h_1;
// converting color 1 to Lab (image)
Color::rgbxyz(r1, g1, b1, X1, Y1, Z1, xyz_rgb);
@@ -1566,19 +1556,16 @@ void Color::interpolateRGBColor (float realL, float iplow, float iphigh, int alg
X2 = x2;
Y2 = y2;
Z2 = z2;
- float c_2, h_2;
if(algm == 1 ) {
Color::XYZ2Lab(X2, Y2, Z2, L2, a_2, b_2);
//Color::Lab2Lch(a_2, b_2, c_2, h_2) ;
}
- float bal, balH, cal, calH, calm;
- bal = balH = balance;
+ float cal, calH, calm;
cal = calH = calm = 1.f - chromat;
float med = 1.f;
float medH = 0.f;
- float medL = (iphigh + iplow) / 2.f;
float calan;
calan = chromat;
@@ -1589,19 +1576,6 @@ void Color::interpolateRGBColor (float realL, float iplow, float iphigh, int alg
if(twoc == 0) { // 2 colours
calan = chromat;
- //calculate new balance in function of (arbitrary) "med".. I hope no error !!
- if (realL > iplow && realL <= med) {
- bal = realL * balance / (iplow - med) - med * balance / (iplow - med);
- } else if (realL <= iplow) {
- bal = realL * balance / iplow;
- }
-
- if (realL > medH && realL <= iphigh) {
- balH = realL * balance / (iphigh - medH) - medH * balance / (iphigh - medH);
- } else if (realL > iphigh) {
- balH = realL * balance * (iphigh - 1.f) - balance * (iphigh - 1.f);
- }
-
//calculate new balance chroma
if (realL > iplow && realL <= med) {
cal = realL * calan / (iplow - med) - med * calan / (iplow - med);
@@ -1616,8 +1590,7 @@ void Color::interpolateRGBColor (float realL, float iplow, float iphigh, int alg
}
}
- float hX = 0.f;
- float hLL, hH, ccL, ccH, llH, aaH, bbH;
+ float aaH, bbH;
if(algm <= 1) {
if(twoc == 0 && metchrom == 3) { // 2 colours only with special "ab"
@@ -1639,8 +1612,6 @@ void Color::interpolateRGBColor (float realL, float iplow, float iphigh, int alg
b_1 = b_1 + (b_2 - b_1) * calby * balance;
}
}
- } else {
- h1 = hX;
}
Color::Lab2XYZ(L1, a_1, b_1, X, Y, Z);
diff --git a/rtengine/curves.cc b/rtengine/curves.cc
index a4c35b90e..60f8b14d2 100644
--- a/rtengine/curves.cc
+++ b/rtengine/curves.cc
@@ -44,8 +44,7 @@ using namespace std;
namespace rtengine
{
-
-Curve::Curve () : N (0), ppn (0), x (nullptr), y (nullptr), mc (0.0), mfc (0.0), msc (0.0), mhc (0.0), ypp (nullptr), x1 (0.0), y1 (0.0), x2 (0.0), y2 (0.0), x3 (0.0), y3 (0.0), firstPointIncluded (false), increment (0.0), nbr_points (0), hashSize (1000 /* has to be initialized to the maximum value */) {}
+Curve::Curve () : N (0), ppn (0), x (nullptr), y (nullptr), mc (0.0), mfc (0.0), msc (0.0), mhc (0.0), hashSize (1000 /* has to be initialized to the maximum value */), ypp (nullptr), x1 (0.0), y1 (0.0), x2 (0.0), y2 (0.0), x3 (0.0), y3 (0.0), firstPointIncluded (false), increment (0.0), nbr_points (0) {}
void Curve::AddPolygons ()
{
@@ -104,7 +103,7 @@ void Curve::fillHash()
milestone = 0.;
polyIter = 0;
- for (unsigned int i = 0; i < (hashSize + 1);) {
+ for (unsigned int i = 0; i < hashSize + 1u;) {
while (poly_x[polyIter] < (milestone + increment)) {
++polyIter;
}
@@ -1732,7 +1731,7 @@ void ColorGradientCurve::SetXYZ (const Curve *pCurve, const double xyz_rgb[3][3]
}
float r, g, b, xx, yy, zz;
- float lr1, lr2;
+ float lr1, lr2 = 0.f;
int upperBound = lut1.getUpperBound();
if (pCurve->isIdentity()) {
@@ -2121,7 +2120,7 @@ float PerceptualToneCurve::get_curve_val (float x, float range[2], float lut[],
int idx = (int)xm;
- if (idx >= lut_size - 1) {
+ if (idx >= static_cast (lut_size) - 1) {
return lut[lut_size - 1];
}
@@ -2146,7 +2145,7 @@ float PerceptualToneCurve::calculateToneCurveContrastValue() const
const float xd = 0.07;
const float tx[] = { 0.30, 0.35, 0.40, 0.45 }; // we only look in the midtone range
- for (int i = 0; i < sizeof (tx) / sizeof (tx[0]); i++) {
+ for (size_t i = 0; i < sizeof (tx) / sizeof (tx[0]); i++) {
float x0 = tx[i] - xd;
float y0 = CurveFactory::gamma2 (lutToneCurve[CurveFactory::igamma2 (x0) * 65535.f] / 65535.f) - k * x0;
float x1 = tx[i] + xd;
@@ -2163,7 +2162,7 @@ float PerceptualToneCurve::calculateToneCurveContrastValue() const
{
const float tx[] = { 0.20, 0.25, 0.50, 0.55 }; // we only look in the midtone range
- for (int i = 0; i < sizeof (tx) / sizeof (tx[0]); i++) {
+ for (size_t i = 0; i < sizeof (tx) / sizeof (tx[0]); i++) {
float x0 = tx[i] - xd;
float y0 = CurveFactory::gamma2 (lutToneCurve[CurveFactory::igamma2 (x0) * 65535.f] / 65535.f) - k * x0;
float x1 = tx[i] + xd;
@@ -2496,8 +2495,8 @@ void PerceptualToneCurve::initApplyState (PerceptualToneCurveState & state, Glib
state.isProphoto = true;
} else {
state.isProphoto = false;
- TMatrix Work = ICCStore::getInstance()->workingSpaceMatrix(workingSpace);
- memset(state.Working2Prophoto, 0, sizeof(state.Working2Prophoto));
+ TMatrix Work = ICCStore::getInstance()->workingSpaceMatrix (workingSpace);
+ memset (state.Working2Prophoto, 0, sizeof (state.Working2Prophoto));
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
@@ -2506,7 +2505,7 @@ void PerceptualToneCurve::initApplyState (PerceptualToneCurveState & state, Glib
}
Work = ICCStore::getInstance()->workingSpaceInverseMatrix (workingSpace);
- memset(state.Prophoto2Working, 0, sizeof(state.Prophoto2Working));
+ memset (state.Prophoto2Working, 0, sizeof (state.Prophoto2Working));
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
diff --git a/rtengine/dcp.cc b/rtengine/dcp.cc
index 57e25691f..ad0621ce0 100644
--- a/rtengine/dcp.cc
+++ b/rtengine/dcp.cc
@@ -309,8 +309,6 @@ double xyCoordToTemperature(const std::array& white_xy)
{ 600, 0.33724, 0.36051, -116.45 }
};
- constexpr double tint_scale = -3000.0;
-
double res = 0;
// Convert to uv space.
@@ -847,7 +845,7 @@ DCPProfile::DCPProfile(const Glib::ustring& filename) :
// Saturation maps. Need to be unwinded.
tag = tagDir->getTag(toUnderlying(TagKey::PROFILE_HUE_SAT_MAP_DATA_2));
- for (int i = 0; i < delta_info.array_count; ++i) {
+ for (unsigned int i = 0; i < delta_info.array_count; ++i) {
deltas_2[i].hue_shift = tag->toDouble((i * 3) * tiff_float_size);
deltas_2[i].sat_scale = tag->toDouble((i * 3 + 1) * tiff_float_size);
deltas_2[i].val_scale = tag->toDouble((i * 3 + 2) * tiff_float_size);
diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc
index c1d2e670a..eca373337 100644
--- a/rtengine/dcraw.cc
+++ b/rtengine/dcraw.cc
@@ -1,3 +1,14 @@
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Warray-bounds"
+#pragma GCC diagnostic ignored "-Wsign-compare"
+#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
+#pragma GCC diagnostic ignored "-Wparentheses"
+#if (__GNUC__ == 6)
+#pragma GCC diagnostic ignored "-Wmisleading-indentation"
+#endif
+#endif
+
/*RT*/#include
/*RT*/#include
/*RT*/#undef MAX
@@ -251,7 +262,11 @@ void CLASS derror()
if (feof(ifp))
fprintf (stderr,_("Unexpected end of file\n"));
else
+#ifdef WIN32
+ fprintf (stderr,_("Corrupt data near 0x%I64x\n"), (INT64) ftello(ifp));
+#else
fprintf (stderr,_("Corrupt data near 0x%llx\n"), (INT64) ftello(ifp));
+#endif
}
data_error++;
/*RT Issue 2467 longjmp (failure, 1);*/
@@ -1840,8 +1855,8 @@ void CLASS parse_hasselblad_gain()
not be seen as clipped).
*/
- ushort raw_h, count, ch_count, u16;
- int i, offset;
+ ushort raw_h;
+ int offset;
off_t base;
base = ftell(ifp);
@@ -4511,6 +4526,7 @@ void CLASS colorcheck()
// free (fimg);
//}
+/*
void CLASS scale_colors()
{
unsigned bottom, right, size, row, col, ur, uc, i, x, y, c, sum[8];
@@ -4626,6 +4642,7 @@ skip_block: ;
}
}
+*/
void CLASS pre_interpolate()
{
ushort (*img)[4];
@@ -5897,7 +5914,7 @@ int CLASS parse_tiff_ifd (int base)
break;
case 33422: /* CFAPattern */
if (filters == 9) {
- FORC(36) ((char *)xtrans)[c] = fgetc(ifp) & 3;
+ FORC(36) ((int *)xtrans)[c] = fgetc(ifp) & 3;
break;
}
case 64777: /* Kodak P-series */
@@ -9020,7 +9037,7 @@ canon_a5:
}
if (fuji_layout) raw_width *= is_raw;
if (filters == 9)
- FORC(36) ((char *)xtrans)[c] =
+ FORC(36) ((int *)xtrans)[c] =
xtrans_abs[(c/6+top_margin) % 6][(c+left_margin) % 6];
} else if (!strcmp(model,"KD-400Z")) {
height = 1712;
@@ -9492,7 +9509,7 @@ dng_skip:
adobe_coeff (make, model);
if(!strncmp(make, "Samsung", 7) && !strncmp(model, "NX1",3))
adobe_coeff (make, model);
- if(!strncmp(make, "Pentax", 6) && (!strncmp(model, "K10D",4) || !strncmp(model, "K-70",4) || !strncmp(model, "K-1",3)))
+ if((!strncmp(make, "Pentax", 6) && (!strncmp(model, "K10D",4) || !strncmp(model, "K-70",4) || !strncmp(model, "K-1",3))) && filters != 0)
adobe_coeff (make, model);
if(!strncmp(make, "Leica", 5) && !strncmp(model, "Q",1))
adobe_coeff (make, model);
@@ -9881,3 +9898,6 @@ struct tiff_hdr {
/*RT*/#undef LIM
/*RT*/#undef ULIM
/*RT*/#undef CLIP
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
\ No newline at end of file
diff --git a/rtengine/dcraw.h b/rtengine/dcraw.h
index 3c5719db8..6a1a83391 100644
--- a/rtengine/dcraw.h
+++ b/rtengine/dcraw.h
@@ -76,7 +76,8 @@ protected:
FILE *ofp;
short order;
const char *ifname;
- char *meta_data, xtrans[6][6],xtrans_abs[6][6];
+ char *meta_data;
+ int xtrans[6][6],xtrans_abs[6][6];
char cdesc[5], desc[512], make[64], model[64], model2[64], model3[64], artist[64];
float flash_used, canon_ev, iso_speed, shutter, aperture, focal_len;
time_t timestamp;
@@ -409,23 +410,10 @@ void foveon_make_curves(short **curvep, float dq[3], float div[3], float filt);
int foveon_apply_curve (short *curve, int i);
void foveon_interpolate();
-//void xtrans_interpolate (int passes);
-//void cielab (ushort rgb[3], short lab[3]);
-
-//void remove_zeroes();
-//void bad_pixels (const char *cfname);
-//void subtract (const char *fname);
void gamma_curve (double pwr, double ts, int mode, int imax);
void pseudoinverse (double (*in)[3], double (*out)[3], int size);
void cam_xyz_coeff (float rgb_cam[3][4], double cam_xyz[4][3]);
-//void hat_transform (float *temp, float *base, int st, int size, int sc);
-//void wavelet_denoise();
-void scale_colors();
void pre_interpolate();
-//void border_interpolate (int border);
-//void median_filter();
-//void blend_highlights();
-//void recover_highlights();
void crop_masked_pixels();
void tiff_get (unsigned base, unsigned *tag, unsigned *type, unsigned *len, unsigned *save);
diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc
index e8c8e7ba5..db68396fb 100644
--- a/rtengine/dcrop.cc
+++ b/rtengine/dcrop.cc
@@ -1568,10 +1568,15 @@ void Crop::freeAll ()
}
-namespace {
-
-bool check_need_larger_crop_for_lcp_distortion(const ProcParams ¶ms)
+namespace
{
+
+bool check_need_larger_crop_for_lcp_distortion (int fw, int fh, int x, int y, int w, int h, const ProcParams ¶ms)
+{
+ if (x == 0 && y == 0 && w == fw && h == fh) {
+ return false;
+ }
+
return (params.lensProf.lcpFile.length() > 0 &&
params.lensProf.useDist);
}
@@ -1625,35 +1630,39 @@ bool Crop::setCropSizes (int rcx, int rcy, int rcw, int rch, int skip, bool inte
// determine which part of the source image is required to compute the crop rectangle
int orx, ory, orw, orh;
+ orx = bx1;
+ ory = by1;
+ orw = bw;
+ orh = bh;
ProcParams& params = parent->params;
+
parent->ipf.transCoord (parent->fw, parent->fh, bx1, by1, bw, bh, orx, ory, orw, orh);
+ if (check_need_larger_crop_for_lcp_distortion (parent->fw, parent->fh, orx, ory, orw, orh, parent->params)) {
+ double dW = double (parent->fw) * 0.15 / skip; // TODO - this is hardcoded ATM!
+ double dH = double (parent->fh) * 0.15 / skip; // this is an estimate of the max
+ // distortion relative to the image
+ // size. BUT IS 15% REALLY ENOUGH?
+ // In fact, is there a better way??
+ orx = max (int (orx - dW / 2.0), 0);
+ ory = max (int (ory - dH / 2.0), 0);
+ orw = min (int (orw + dW), parent->fw - orx);
+ orh = min (int (orh + dH), parent->fh - ory);
+ }
+
+
PreviewProps cp (orx, ory, orw, orh, skip);
int orW, orH;
parent->imgsrc->getSize (cp, orW, orH);
- if (check_need_larger_crop_for_lcp_distortion(parent->params)) {
- int fW, fH;
- parent->imgsrc->getFullSize(fW, fH);
- double dW = double(fW) * 0.15; // TODO - this is hardcoded ATM!
- double dH = double(fH) * 0.15; // this is an estimate of the max
- // distortion relative to the image
- // size. BUT IS 15% REALLY ENOUGH?
- // In fact, is there a better way??
- orW = min(int(orW + dW), fW);
- orH = min(int(orH + dH), fH);
- trafx = max(int(orx - dW/2.0), 0);
- trafy = max(int(ory - dH/2.0), 0);
- } else {
- trafx = orx;
- trafy = ory;
- }
+ trafx = orx;
+ trafy = ory;
- int cw = skips(bw, skip);
- int ch = skips(bh, skip);
+ int cw = skips (bw, skip);
+ int ch = skips (bh, skip);
- leftBorder = skips(rqx1 - bx1, skip);
- upperBorder = skips(rqy1 - by1, skip);
+ leftBorder = skips (rqx1 - bx1, skip);
+ upperBorder = skips (rqy1 - by1, skip);
if (settings->verbose) {
printf ("setsizes starts (%d, %d, %d, %d, %d, %d)\n", orW, orH, trafw, trafh, cw, ch);
diff --git a/rtengine/demosaic_algos.cc b/rtengine/demosaic_algos.cc
index 877df35a4..847af784f 100644
--- a/rtengine/demosaic_algos.cc
+++ b/rtengine/demosaic_algos.cc
@@ -1,4 +1,3 @@
-/*
/*
* This file is part of RawTherapee.
*
@@ -602,7 +601,7 @@ void RawImageSource::vng4_demosaic ()
const unsigned prefilters = ri->prefilters;
const int width = W, height = H;
- const int colors = 4;
+ constexpr unsigned int colors = 4;
float (*image)[4];
image = (float (*)[4]) calloc (height * width, sizeof * image);
@@ -648,7 +647,7 @@ void RawImageSource::vng4_demosaic ()
int colcount = 0;
- for (int c = 0; c < colors; c++)
+ for (unsigned int c = 0; c < colors; c++)
if (c != fc(row, col)) {
*ip++ = c;
csum[row][col][colcount] = sum[c];
@@ -671,7 +670,7 @@ void RawImageSource::vng4_demosaic ()
sum[ip[1]] += pix[ip[0]] * mul[row & 15][col & 15][i];
}
- for (int i = 0; i < colors - 1; i++, ip++) {
+ for (unsigned int i = 0; i < colors - 1; i++, ip++) {
pix[ip[0]] = sum[ip[0]] / csum[row & 15][col & 15][i];
}
}
@@ -694,7 +693,7 @@ void RawImageSource::vng4_demosaic ()
int x2 = *cp++;
int weight = *cp++;
int grads = *cp++;
- int color = fc(row + y1, col + x1);
+ unsigned int color = fc(row + y1, col + x1);
if (fc(row + y2, col + x2) != color) {
continue;
@@ -724,7 +723,7 @@ void RawImageSource::vng4_demosaic ()
int y = *cp++;
int x = *cp++;
*ip++ = (y * width + x) * 4;
- int color = fc(row, col);
+ unsigned int color = fc(row, col);
if (fc(row + y, col + x) != color && fc(row + y * 2, col + x * 2) == color) {
*ip++ = (y * width + x) * 8 + color;
@@ -878,7 +877,7 @@ void RawImageSource::vng4_demosaic ()
#define fc(row,col) \
(ri->get_filters() >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3)
-#define FORCC for (int c=0; c < colors; c++)
+#define FORCC for (unsigned int c=0; c < colors; c++)
/*
Patterned Pixel Grouping Interpolation by Alain Desbiolles
@@ -887,7 +886,7 @@ void RawImageSource::ppg_demosaic()
{
int width = W, height = H;
int dir[5] = { 1, width, -1, -width, 1 };
- int row, col, diff[2], guess[2], c, d, i;
+ int row, col, diff[2] = {}, guess[2], c, d, i;
float (*pix)[4];
float (*image)[4];
@@ -998,7 +997,7 @@ void RawImageSource::ppg_demosaic()
void RawImageSource::border_interpolate(unsigned int border, float (*image)[4], unsigned int start, unsigned int end)
{
- unsigned row, col, y, x, f, c, sum[8];
+ unsigned row, col, y, x, f, sum[8];
unsigned int width = W, height = H;
unsigned int colors = 3;
@@ -1338,8 +1337,8 @@ SSEFUNCTION void RawImageSource::lmmse_interpolate_omp(int winw, int winh, array
h2 /= hs;
h3 /= hs;
h4 /= hs;
- int passref;
- int iter;
+ int passref = 0;
+ int iter = 0;
if(iterations <= 4) {
iter = iterations - 1;
@@ -2631,7 +2630,7 @@ void RawImageSource::ahd_demosaic(int winx, int winy, int winw, int winh)
int width = W, height = H;
float (*image)[4];
- int colors = 3;
+ unsigned int colors = 3;
const double xyz_rgb[3][3] = { /* XYZ from RGB */
{ 0.412453, 0.357580, 0.180423 },
@@ -2661,7 +2660,7 @@ void RawImageSource::ahd_demosaic(int winx, int winy, int winw, int winh)
}
for (i = 0; i < 3; i++)
- for (j = 0; j < colors; j++)
+ for (unsigned int j = 0; j < colors; j++)
for (xyz_cam[i][j] = k = 0; k < 3; k++) {
xyz_cam[i][j] += xyz_rgb[i][k] * imatrices.rgb_cam[k][j] / d65_white[i];
}
@@ -3293,12 +3292,12 @@ void RawImageSource::fill_raw( float (*cache )[3], int x0, int y0, float** rawDa
void RawImageSource::fill_border( float (*cache )[3], int border, int x0, int y0)
{
- unsigned row, col, y, x, f, c;
+ unsigned f;
float sum[8];
- const unsigned int colors = 3; // used in FORCC
+ constexpr unsigned int colors = 3; // used in FORCC
- for (row = y0; row < y0 + TILESIZE + TILEBORDER && row < H; row++) {
- for (col = x0; col < x0 + TILESIZE + TILEBORDER && col < W; col++) {
+ for (int row = y0; row < y0 + TILESIZE + TILEBORDER && row < H; row++) {
+ for (int col = x0; col < x0 + TILESIZE + TILEBORDER && col < W; col++) {
if (col >= border && col < W - border && row >= border && row < H - border) {
col = W - border;
@@ -3309,8 +3308,8 @@ void RawImageSource::fill_border( float (*cache )[3], int border, int x0, int y0
memset(sum, 0, sizeof sum);
- for (y = row - 1; y != row + 2; y++)
- for (x = col - 1; x != col + 2; x++)
+ for (int y = row - 1; y != row + 2; y++)
+ for (int x = col - 1; x != col + 2; x++)
if (y < H && y < y0 + TILESIZE + TILEBORDER && x < W && x < x0 + TILESIZE + TILEBORDER) {
f = fc(y, x);
sum[f] += cache[(y - y0 + TILEBORDER) * CACHESIZE + TILEBORDER + x - x0][f];
@@ -3361,13 +3360,13 @@ void RawImageSource::restore_from_buffer(float (*image)[3], float (*buffer)[2])
void RawImageSource::dcb_hid(float (*image)[3], int x0, int y0)
{
const int u = CACHESIZE;
- int rowMin, colMin, rowMax, colMax, c;
+ int rowMin, colMin, rowMax, colMax;
dcb_initTileLimits(colMin, rowMin, colMax, rowMax, x0, y0, 2);
// simple green bilinear in R and B pixels
for (int row = rowMin; row < rowMax; row++)
- for (int col = colMin + (FC(y0 - TILEBORDER + row, x0 - TILEBORDER + colMin) & 1), indx = row * CACHESIZE + col, c = FC(y0 - TILEBORDER + row, x0 - TILEBORDER + col); col < colMax; col += 2, indx += 2) {
- assert(indx - u - 1 >= 0 && indx + u + 1 < u * u && c >= 0 && c < 3);
+ for (int col = colMin + (FC(y0 - TILEBORDER + row, x0 - TILEBORDER + colMin) & 1), indx = row * CACHESIZE + col; col < colMax; col += 2, indx += 2) {
+ assert(indx - u - 1 >= 0 && indx + u + 1 < u * u);
image[indx][1] = 0.25*(image[indx-1][1]+image[indx+1][1]+image[indx-u][1]+image[indx+u][1]);
}
@@ -3418,13 +3417,13 @@ void RawImageSource::dcb_color(float (*image)[3], int x0, int y0)
// green correction
void RawImageSource::dcb_hid2(float (*image)[3], int x0, int y0)
{
- const int u = CACHESIZE, v = 2 * CACHESIZE;
+ const int v = 2 * CACHESIZE;
int rowMin, colMin, rowMax, colMax;
dcb_initTileLimits(colMin, rowMin, colMax, rowMax, x0, y0, 2);
for (int row = rowMin; row < rowMax; row++) {
for (int col = colMin + (FC(y0 - TILEBORDER + row, x0 - TILEBORDER + colMin) & 1), indx = row * CACHESIZE + col, c = FC(y0 - TILEBORDER + row, x0 - TILEBORDER + col); col < colMax; col += 2, indx += 2) {
- assert(indx - v >= 0 && indx + v < u * u);
+ assert(indx - v >= 0 && indx + v < CACHESIZE * CACHESIZE);
//Jacek comment: one multiplication less
image[indx][1] = image[indx][c] +
@@ -3592,11 +3591,11 @@ void RawImageSource::dcb_correction2(float (*image)[3], uint8_t *map, int x0, in
// image refinement
void RawImageSource::dcb_refinement(float (*image)[3], uint8_t *map, int x0, int y0)
{
- const int u = CACHESIZE, v = 2 * CACHESIZE, w = 3 * CACHESIZE;
+ const int u = CACHESIZE, v = 2 * CACHESIZE;
int rowMin, colMin, rowMax, colMax;
dcb_initTileLimits(colMin, rowMin, colMax, rowMax, x0, y0, 4);
- float f0, f1, f2, g1, h0, h1, h2, g2, current;
+ float f0, f1, f2, g1, h0, h1, h2, g2;
for (int row = rowMin; row < rowMax; row++)
for (int col = colMin + (FC(y0 - TILEBORDER + row, x0 - TILEBORDER + colMin) & 1), indx = row * CACHESIZE + col, c = FC(y0 - TILEBORDER + row, x0 - TILEBORDER + col); col < colMax; col += 2, indx += 2) {
@@ -3937,7 +3936,7 @@ void RawImageSource::xtransborder_interpolate (int border)
{
const int height = H, width = W;
- char xtrans[6][6];
+ int xtrans[6][6];
ri->getXtransMatrix(xtrans);
for (int row = 0; row < height; row++)
@@ -4001,7 +4000,7 @@ void RawImageSource::xtrans_interpolate (const int passes, const bool useCieLab)
plistener->setProgress (progress);
}
- char xtrans[6][6];
+ int xtrans[6][6];
ri->getXtransMatrix(xtrans);
constexpr short orth[12] = { 1, 0, 0, 1, -1, 0, 0, -1, 1, 0, 0, 1 },
@@ -4012,7 +4011,7 @@ void RawImageSource::xtrans_interpolate (const int passes, const bool useCieLab)
// sgrow/sgcol is the offset in the sensor matrix of the solitary
// green pixels
- ushort sgrow, sgcol;
+ ushort sgrow = 0, sgcol = 0;
const int height = H, width = W;
@@ -4721,17 +4720,16 @@ void RawImageSource::xtrans_interpolate (const int passes, const bool useCieLab)
/* Average the most homogeneous pixels for the final result: */
- uint8_t hm[8];
+ uint8_t hm[8] = {};
for (int row = MIN(top, 8); row < mrow - 8; row++)
for (int col = MIN(left, 8); col < mcol - 8; col++) {
- int d = 0;
- for (; d < 4; d++) {
+ for (int d = 0; d < 4; d++) {
hm[d] = homosum[d][row][col];
}
- for (; d < ndir; d++) {
+ for (int d = 4; d < ndir; d++) {
hm[d] = homosum[d][row][col];
if (hm[d - 4] < hm[d]) {
@@ -4745,7 +4743,7 @@ void RawImageSource::xtrans_interpolate (const int passes, const bool useCieLab)
uint8_t maxval = homosummax[row][col];
- for (d = 0; d < ndir; d++)
+ for (int d = 0; d < ndir; d++)
if (hm[d] >= maxval) {
FORC3 avg[c] += rgb[d][row][col][c];
avg[3]++;
@@ -4792,7 +4790,7 @@ void RawImageSource::fast_xtrans_interpolate ()
const int height = H, width = W;
xtransborder_interpolate (1);
- char xtrans[6][6];
+ int xtrans[6][6];
ri->getXtransMatrix(xtrans);
#pragma omp parallel for
diff --git a/rtengine/diagonalcurves.cc b/rtengine/diagonalcurves.cc
index 2178e3dac..9ab17a0f4 100644
--- a/rtengine/diagonalcurves.cc
+++ b/rtengine/diagonalcurves.cc
@@ -241,8 +241,8 @@ void DiagonalCurve::NURBS_set ()
nbr_points = (int)(((double)(ppn + N - 2) * sc_length[i / 3] ) / total_length);
if (nbr_points < 0) {
- for(size_t it = 0; it < sc_x.size(); it += 3) {
- printf("sc_length[%zu/3]=%f \n", it, sc_length[it / 3]);
+ for(unsigned int it = 0; it < sc_x.size(); it += 3) { // used unsigned int instead of size_t to avoid %zu in printf
+ printf("sc_length[%u/3]=%f \n", it, sc_length[it / 3]);
}
printf("NURBS diagonal curve: error detected!\n i=%u nbr_points=%d ppn=%d N=%d sc_length[i/3]=%f total_length=%f", i, nbr_points, ppn, N, sc_length[i / 3], total_length);
diff --git a/rtengine/dirpyr_equalizer.cc b/rtengine/dirpyr_equalizer.cc
index e5aced0fc..1ebc0b5e5 100644
--- a/rtengine/dirpyr_equalizer.cc
+++ b/rtengine/dirpyr_equalizer.cc
@@ -55,40 +55,40 @@ extern const Settings* settings;
//sequence of scales
-SSEFUNCTION void ImProcFunctions :: dirpyr_equalizer(float ** src, float ** dst, int srcwidth, int srcheight, float ** l_a, float ** l_b, float ** dest_a, float ** dest_b, const double * mult, const double dirpyrThreshold, const double skinprot, const bool gamutlab, float b_l, float t_l, float t_r, float b_r, int choice, int scaleprev)
+SSEFUNCTION void ImProcFunctions :: dirpyr_equalizer (float ** src, float ** dst, int srcwidth, int srcheight, float ** l_a, float ** l_b, float ** dest_a, float ** dest_b, const double * mult, const double dirpyrThreshold, const double skinprot, const bool gamutlab, float b_l, float t_l, float t_r, float b_r, int choice, int scaleprev)
{
int lastlevel = maxlevel;
- if(settings->verbose) {
- printf("Dirpyr scaleprev=%i\n", scaleprev);
+ if (settings->verbose) {
+ printf ("Dirpyr scaleprev=%i\n", scaleprev);
}
float atten123 = (float) settings->level123_cbdl;
- if(atten123 > 50.f) {
+ if (atten123 > 50.f) {
atten123 = 50.f;
}
- if(atten123 < 0.f) {
+ if (atten123 < 0.f) {
atten123 = 0.f;
}
float atten0 = (float) settings->level0_cbdl;
- if(atten0 > 40.f) {
+ if (atten0 > 40.f) {
atten123 = 40.f;
}
- if(atten0 < 0.f) {
+ if (atten0 < 0.f) {
atten0 = 0.f;
}
- if((t_r - t_l) < 0.55f) {
+ if ((t_r - t_l) < 0.55f) {
t_l = t_r + 0.55f; //avoid too small range
}
- while (lastlevel > 0 && fabs(mult[lastlevel - 1] - 1) < 0.001) {
+ while (lastlevel > 0 && fabs (mult[lastlevel - 1] - 1) < 0.001) {
lastlevel--;
//printf("last level to process %d \n",lastlevel);
}
@@ -101,17 +101,17 @@ SSEFUNCTION void ImProcFunctions :: dirpyr_equalizer(float ** src, float ** dst,
float multi[6] = {1.f, 1.f, 1.f, 1.f, 1.f, 1.f};
float scalefl[6];
- for(int lv = 0; lv < 6; lv++) {
+ for (int lv = 0; lv < 6; lv++) {
scalefl[lv] = ((float) scales[lv]) / (float) scaleprev;
- if(lv >= 1) {
- if(scalefl[lv] < 1.f) {
+ if (lv >= 1) {
+ if (scalefl[lv] < 1.f) {
multi[lv] = (atten123 * ((float) mult[lv] - 1.f) / 100.f) + 1.f; //modulate action if zoom < 100%
} else {
multi[lv] = (float) mult[lv];
}
} else {
- if(scalefl[lv] < 1.f) {
+ if (scalefl[lv] < 1.f) {
multi[lv] = (atten0 * ((float) mult[lv] - 1.f) / 100.f) + 1.f; //modulate action if zoom < 100%
} else {
multi[lv] = (float) mult[lv];
@@ -120,8 +120,8 @@ SSEFUNCTION void ImProcFunctions :: dirpyr_equalizer(float ** src, float ** dst,
}
- if(settings->verbose) {
- printf("CbDL mult0=%f 1=%f 2=%f 3=%f 4=%f 5=%f\n", multi[0], multi[1], multi[2], multi[3], multi[4], multi[5]);
+ if (settings->verbose) {
+ printf ("CbDL mult0=%f 1=%f 2=%f 3=%f 4=%f 5=%f\n", multi[0], multi[1], multi[2], multi[3], multi[4], multi[5]);
}
multi_array2D dirpyrlo (srcwidth, srcheight);
@@ -129,33 +129,33 @@ SSEFUNCTION void ImProcFunctions :: dirpyr_equalizer(float ** src, float ** dst,
level = 0;
//int thresh = 100 * mult[5];
- int scale = (int)(scales[level]) / scaleprev;
+ int scale = (int) (scales[level]) / scaleprev;
- if(scale < 1) {
+ if (scale < 1) {
scale = 1;
}
- dirpyr_channel(src, dirpyrlo[0], srcwidth, srcheight, 0, scale);
+ dirpyr_channel (src, dirpyrlo[0], srcwidth, srcheight, 0, scale);
level = 1;
- while(level < lastlevel) {
+ while (level < lastlevel) {
- scale = (int)(scales[level]) / scaleprev;
+ scale = (int) (scales[level]) / scaleprev;
- if(scale < 1) {
+ if (scale < 1) {
scale = 1;
}
- dirpyr_channel(dirpyrlo[level - 1], dirpyrlo[level], srcwidth, srcheight, level, scale);
+ dirpyr_channel (dirpyrlo[level - 1], dirpyrlo[level], srcwidth, srcheight, level, scale);
level ++;
}
- float **tmpHue, **tmpChr;
+ float **tmpHue = nullptr, **tmpChr = nullptr;
- if(skinprot != 0.f) {
+ if (skinprot != 0.f) {
// precalculate hue and chroma, use SSE, if available
// by precalculating these values we can greatly reduce the number of calculations in idirpyr_eq_channel()
// but we need two additional buffers for this preprocessing
@@ -168,24 +168,24 @@ SSEFUNCTION void ImProcFunctions :: dirpyr_equalizer(float ** src, float ** dst,
#ifdef __SSE2__
#pragma omp parallel for
- for(int i = 0; i < srcheight; i++) {
+ for (int i = 0; i < srcheight; i++) {
int j;
- for(j = 0; j < srcwidth - 3; j += 4) {
- _mm_storeu_ps(&tmpHue[i][j], xatan2f(LVFU(l_b[i][j]), LVFU(l_a[i][j])));
+ for (j = 0; j < srcwidth - 3; j += 4) {
+ _mm_storeu_ps (&tmpHue[i][j], xatan2f (LVFU (l_b[i][j]), LVFU (l_a[i][j])));
}
- for(; j < srcwidth; j++) {
- tmpHue[i][j] = xatan2f(l_b[i][j], l_a[i][j]);
+ for (; j < srcwidth; j++) {
+ tmpHue[i][j] = xatan2f (l_b[i][j], l_a[i][j]);
}
}
#else
#pragma omp parallel for
- for(int i = 0; i < srcheight; i++) {
- for(int j = 0; j < srcwidth; j++) {
- tmpHue[i][j] = xatan2f(l_b[i][j], l_a[i][j]);
+ for (int i = 0; i < srcheight; i++) {
+ for (int j = 0; j < srcwidth; j++) {
+ tmpHue[i][j] = xatan2f (l_b[i][j], l_a[i][j]);
}
}
@@ -199,27 +199,27 @@ SSEFUNCTION void ImProcFunctions :: dirpyr_equalizer(float ** src, float ** dst,
#ifdef __SSE2__
#pragma omp parallel
{
- __m128 div = _mm_set1_ps(327.68f);
+ __m128 div = _mm_set1_ps (327.68f);
#pragma omp for
- for(int i = 0; i < srcheight; i++) {
+ for (int i = 0; i < srcheight; i++) {
int j;
- for(j = 0; j < srcwidth - 3; j += 4) {
- _mm_storeu_ps(&tmpChr[i][j], _mm_sqrt_ps(SQRV(LVFU(l_b[i][j])) + SQRV(LVFU(l_a[i][j]))) / div);
+ for (j = 0; j < srcwidth - 3; j += 4) {
+ _mm_storeu_ps (&tmpChr[i][j], _mm_sqrt_ps (SQRV (LVFU (l_b[i][j])) + SQRV (LVFU (l_a[i][j]))) / div);
}
- for(; j < srcwidth; j++) {
- tmpChr[i][j] = sqrtf(SQR((l_b[i][j])) + SQR((l_a[i][j]))) / 327.68f;
+ for (; j < srcwidth; j++) {
+ tmpChr[i][j] = sqrtf (SQR ((l_b[i][j])) + SQR ((l_a[i][j]))) / 327.68f;
}
}
}
#else
#pragma omp parallel for
- for(int i = 0; i < srcheight; i++) {
- for(int j = 0; j < srcwidth; j++) {
- tmpChr[i][j] = sqrtf(SQR((l_b[i][j])) + SQR((l_a[i][j]))) / 327.68f;
+ for (int i = 0; i < srcheight; i++) {
+ for (int j = 0; j < srcwidth; j++) {
+ tmpChr[i][j] = sqrtf (SQR ((l_b[i][j])) + SQR ((l_a[i][j]))) / 327.68f;
}
}
@@ -229,15 +229,15 @@ SSEFUNCTION void ImProcFunctions :: dirpyr_equalizer(float ** src, float ** dst,
// with the current implementation of idirpyr_eq_channel we can safely use the buffer from last level as buffer, saves some memory
float ** buffer = dirpyrlo[lastlevel - 1];
- for(int level = lastlevel - 1; level > 0; level--) {
- idirpyr_eq_channel(dirpyrlo[level], dirpyrlo[level - 1], buffer, srcwidth, srcheight, level, multi, dirpyrThreshold, tmpHue, tmpChr, skinprot, gamutlab, b_l, t_l, t_r, b_r, choice );
+ for (int level = lastlevel - 1; level > 0; level--) {
+ idirpyr_eq_channel (dirpyrlo[level], dirpyrlo[level - 1], buffer, srcwidth, srcheight, level, multi, dirpyrThreshold, tmpHue, tmpChr, skinprot, gamutlab, b_l, t_l, t_r, b_r, choice );
}
scale = scales[0];
- idirpyr_eq_channel(dirpyrlo[0], dst, buffer, srcwidth, srcheight, 0, multi, dirpyrThreshold, tmpHue, tmpChr, skinprot, gamutlab, b_l, t_l, t_r, b_r, choice );
+ idirpyr_eq_channel (dirpyrlo[0], dst, buffer, srcwidth, srcheight, 0, multi, dirpyrThreshold, tmpHue, tmpChr, skinprot, gamutlab, b_l, t_l, t_r, b_r, choice );
- if(skinprot != 0.f) {
+ if (skinprot != 0.f) {
for (int i = 0; i < srcheight; i++) {
delete [] tmpChr[i];
}
@@ -256,44 +256,44 @@ SSEFUNCTION void ImProcFunctions :: dirpyr_equalizer(float ** src, float ** dst,
for (int i = 0; i < srcheight; i++)
for (int j = 0; j < srcwidth; j++) {
- dst[i][j] = CLIP(buffer[i][j]); // TODO: Really a clip necessary?
+ dst[i][j] = CLIP (buffer[i][j]); // TODO: Really a clip necessary?
}
}
-SSEFUNCTION void ImProcFunctions :: cbdl_local_temp(float ** src, float ** dst, float ** loctemp, int srcwidth, int srcheight, const float * mult, const double dirpyrThreshold, const double skinprot, const bool gamutlab, float b_l, float t_l, float t_r, float b_r, int choice, int scaleprev)
+SSEFUNCTION void ImProcFunctions :: cbdl_local_temp (float ** src, float ** dst, float ** loctemp, int srcwidth, int srcheight, const float * mult, const double dirpyrThreshold, const double skinprot, const bool gamutlab, float b_l, float t_l, float t_r, float b_r, int choice, int scaleprev)
{
int lastlevel = maxlevelloc;
- if(settings->verbose) {
- printf("Dirpyr scaleprev=%i\n", scaleprev);
+ if (settings->verbose) {
+ printf ("Dirpyr scaleprev=%i\n", scaleprev);
}
float atten123 = (float) settings->level123_cbdl;
- if(atten123 > 50.f) {
+ if (atten123 > 50.f) {
atten123 = 50.f;
}
- if(atten123 < 0.f) {
+ if (atten123 < 0.f) {
atten123 = 0.f;
}
float atten0 = (float) settings->level0_cbdl;
- if(atten0 > 40.f) {
+ if (atten0 > 40.f) {
atten123 = 40.f;
}
- if(atten0 < 0.f) {
+ if (atten0 < 0.f) {
atten0 = 0.f;
}
- if((t_r - t_l) < 0.55f) {
+ if ((t_r - t_l) < 0.55f) {
t_l = t_r + 0.55f; //avoid too small range
}
- while (lastlevel > 0 && fabs(mult[lastlevel - 1] - 1) < 0.001) {
+ while (lastlevel > 0 && fabs (mult[lastlevel - 1] - 1) < 0.001) {
lastlevel--;
//printf("last level to process %d \n",lastlevel);
@@ -307,17 +307,17 @@ SSEFUNCTION void ImProcFunctions :: cbdl_local_temp(float ** src, float ** dst,
float multi[5] = {1.f, 1.f, 1.f, 1.f, 1.f};
float scalefl[5];
- for(int lv = 0; lv < 5; lv++) {
+ for (int lv = 0; lv < 5; lv++) {
scalefl[lv] = ((float) scalesloc[lv]) / (float) scaleprev;
- if(lv >= 1) {
- if(scalefl[lv] < 1.f) {
+ if (lv >= 1) {
+ if (scalefl[lv] < 1.f) {
multi[lv] = (atten123 * ((float) mult[lv] - 1.f) / 100.f) + 1.f; //modulate action if zoom < 100%
} else {
multi[lv] = (float) mult[lv];
}
} else {
- if(scalefl[lv] < 1.f) {
+ if (scalefl[lv] < 1.f) {
multi[lv] = (atten0 * ((float) mult[lv] - 1.f) / 100.f) + 1.f; //modulate action if zoom < 100%
} else {
multi[lv] = (float) mult[lv];
@@ -326,8 +326,8 @@ SSEFUNCTION void ImProcFunctions :: cbdl_local_temp(float ** src, float ** dst,
}
- if(settings->verbose) {
- printf("CbDL local mult0=%f 1=%f 2=%f 3=%f 4=%f\n", multi[0], multi[1], multi[2], multi[3], multi[4]);
+ if (settings->verbose) {
+ printf ("CbDL local mult0=%f 1=%f 2=%f 3=%f 4=%f\n", multi[0], multi[1], multi[2], multi[3], multi[4]);
}
multi_array2D dirpyrlo (srcwidth, srcheight);
@@ -335,26 +335,26 @@ SSEFUNCTION void ImProcFunctions :: cbdl_local_temp(float ** src, float ** dst,
level = 0;
//int thresh = 100 * mult[5];
- int scale = (int)(scalesloc[level]) / scaleprev;
+ int scale = (int) (scalesloc[level]) / scaleprev;
- if(scale < 1) {
+ if (scale < 1) {
scale = 1;
}
- dirpyr_channel(src, dirpyrlo[0], srcwidth, srcheight, 0, scale);
+ dirpyr_channel (src, dirpyrlo[0], srcwidth, srcheight, 0, scale);
level = 1;
- while(level < lastlevel) {
+ while (level < lastlevel) {
- scale = (int)(scalesloc[level]) / scaleprev;
+ scale = (int) (scalesloc[level]) / scaleprev;
- if(scale < 1) {
+ if (scale < 1) {
scale = 1;
}
- dirpyr_channel(dirpyrlo[level - 1], dirpyrlo[level], srcwidth, srcheight, level, scale);
+ dirpyr_channel (dirpyrlo[level - 1], dirpyrlo[level], srcwidth, srcheight, level, scale);
level ++;
}
@@ -363,20 +363,20 @@ SSEFUNCTION void ImProcFunctions :: cbdl_local_temp(float ** src, float ** dst,
// with the current implementation of idirpyr_eq_channel we can safely use the buffer from last level as buffer, saves some memory
float ** buffer = dirpyrlo[lastlevel - 1];
- for(int level = lastlevel - 1; level > 0; level--) {
- idirpyr_eq_channel_loc(dirpyrlo[level], dirpyrlo[level - 1], loctemp, buffer, srcwidth, srcheight, level, multi, dirpyrThreshold, tmpHue, tmpChr, skinprot, gamutlab, b_l, t_l, t_r, b_r, choice );
+ for (int level = lastlevel - 1; level > 0; level--) {
+ idirpyr_eq_channel_loc (dirpyrlo[level], dirpyrlo[level - 1], loctemp, buffer, srcwidth, srcheight, level, multi, dirpyrThreshold, tmpHue, tmpChr, skinprot, gamutlab, b_l, t_l, t_r, b_r, choice );
}
scale = scalesloc[0];
- idirpyr_eq_channel_loc(dirpyrlo[0], dst, loctemp, buffer, srcwidth, srcheight, 0, multi, dirpyrThreshold, tmpHue, tmpChr, skinprot, gamutlab, b_l, t_l, t_r, b_r, choice );
+ idirpyr_eq_channel_loc (dirpyrlo[0], dst, loctemp, buffer, srcwidth, srcheight, 0, multi, dirpyrThreshold, tmpHue, tmpChr, skinprot, gamutlab, b_l, t_l, t_r, b_r, choice );
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#pragma omp parallel for
for (int i = 0; i < srcheight; i++)
for (int j = 0; j < srcwidth; j++) {
dst[i][j] = src[i][j];
- loctemp[i][j] = CLIP(buffer[i][j]); // TODO: Really a clip necessary?
+ loctemp[i][j] = CLIP (buffer[i][j]); // TODO: Really a clip necessary?
}
}
@@ -386,36 +386,36 @@ void ImProcFunctions :: dirpyr_equalizercam (CieImage *ncie, float ** src, float
{
int lastlevel = maxlevel;
- if(settings->verbose) {
- printf("CAM dirpyr scaleprev=%i\n", scaleprev);
+ if (settings->verbose) {
+ printf ("CAM dirpyr scaleprev=%i\n", scaleprev);
}
float atten123 = (float) settings->level123_cbdl;
- if(atten123 > 50.f) {
+ if (atten123 > 50.f) {
atten123 = 50.f;
}
- if(atten123 < 0.f) {
+ if (atten123 < 0.f) {
atten123 = 0.f;
}
// printf("atten=%f\n",atten);
float atten0 = (float) settings->level0_cbdl;
- if(atten0 > 40.f) {
+ if (atten0 > 40.f) {
atten123 = 40.f;
}
- if(atten0 < 0.f) {
+ if (atten0 < 0.f) {
atten0 = 0.f;
}
- if((t_r - t_l) < 0.55f) {
+ if ((t_r - t_l) < 0.55f) {
t_l = t_r + 0.55f; //avoid too small range
}
- while (fabs(mult[lastlevel - 1] - 1) < 0.001 && lastlevel > 0) {
+ while (fabs (mult[lastlevel - 1] - 1) < 0.001 && lastlevel > 0) {
lastlevel--;
//printf("last level to process %d \n",lastlevel);
}
@@ -429,18 +429,18 @@ void ImProcFunctions :: dirpyr_equalizercam (CieImage *ncie, float ** src, float
float multi[6] = {1.f, 1.f, 1.f, 1.f, 1.f, 1.f};
float scalefl[6];
- for(int lv = 0; lv < 6; lv++) {
+ for (int lv = 0; lv < 6; lv++) {
scalefl[lv] = ((float) scales[lv]) / (float) scaleprev;
// if(scalefl[lv] < 1.f) multi[lv] = 1.f; else multi[lv]=(float) mult[lv];
if (lv >= 1) {
- if(scalefl[lv] < 1.f) {
+ if (scalefl[lv] < 1.f) {
multi[lv] = (atten123 * ((float) mult[lv] - 1.f) / 100.f) + 1.f;
} else {
multi[lv] = (float) mult[lv];
}
} else {
- if(scalefl[lv] < 1.f) {
+ if (scalefl[lv] < 1.f) {
multi[lv] = (atten0 * ((float) mult[lv] - 1.f) / 100.f) + 1.f;
} else {
multi[lv] = (float) mult[lv];
@@ -450,8 +450,8 @@ void ImProcFunctions :: dirpyr_equalizercam (CieImage *ncie, float ** src, float
}
- if(settings->verbose) {
- printf("CAM CbDL mult0=%f 1=%f 2=%f 3=%f 4=%f 5=%f\n", multi[0], multi[1], multi[2], multi[3], multi[4], multi[5]);
+ if (settings->verbose) {
+ printf ("CAM CbDL mult0=%f 1=%f 2=%f 3=%f 4=%f 5=%f\n", multi[0], multi[1], multi[2], multi[3], multi[4], multi[5]);
}
@@ -461,24 +461,24 @@ void ImProcFunctions :: dirpyr_equalizercam (CieImage *ncie, float ** src, float
level = 0;
- int scale = (int)(scales[level]) / scaleprev;
+ int scale = (int) (scales[level]) / scaleprev;
- if(scale < 1) {
+ if (scale < 1) {
scale = 1;
}
- dirpyr_channel(src, dirpyrlo[0], srcwidth, srcheight, 0, scale);
+ dirpyr_channel (src, dirpyrlo[0], srcwidth, srcheight, 0, scale);
level = 1;
- while(level < lastlevel) {
- scale = (int)(scales[level]) / scaleprev;
+ while (level < lastlevel) {
+ scale = (int) (scales[level]) / scaleprev;
- if(scale < 1) {
+ if (scale < 1) {
scale = 1;
}
- dirpyr_channel(dirpyrlo[level - 1], dirpyrlo[level], srcwidth, srcheight, level, scale);
+ dirpyr_channel (dirpyrlo[level - 1], dirpyrlo[level], srcwidth, srcheight, level, scale);
level ++;
}
@@ -487,26 +487,26 @@ void ImProcFunctions :: dirpyr_equalizercam (CieImage *ncie, float ** src, float
// with the current implementation of idirpyr_eq_channel we can safely use the buffer from last level as buffer, saves some memory
float ** buffer = dirpyrlo[lastlevel - 1];
- for(int level = lastlevel - 1; level > 0; level--) {
- idirpyr_eq_channelcam(dirpyrlo[level], dirpyrlo[level - 1], buffer, srcwidth, srcheight, level, multi, dirpyrThreshold , h_p, C_p, skinprot, b_l, t_l, t_r);
+ for (int level = lastlevel - 1; level > 0; level--) {
+ idirpyr_eq_channelcam (dirpyrlo[level], dirpyrlo[level - 1], buffer, srcwidth, srcheight, level, multi, dirpyrThreshold , h_p, C_p, skinprot, b_l, t_l, t_r);
}
scale = scales[0];
- idirpyr_eq_channelcam(dirpyrlo[0], dst, buffer, srcwidth, srcheight, 0, multi, dirpyrThreshold, h_p, C_p, skinprot, b_l, t_l, t_r);
+ idirpyr_eq_channelcam (dirpyrlo[0], dst, buffer, srcwidth, srcheight, 0, multi, dirpyrThreshold, h_p, C_p, skinprot, b_l, t_l, t_r);
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- if(execdir) {
+ if (execdir) {
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16)
#endif
for (int i = 0; i < srcheight; i++)
for (int j = 0; j < srcwidth; j++) {
- if(ncie->J_p[i][j] > 8.f && ncie->J_p[i][j] < 92.f) {
- dst[i][j] = CLIP( buffer[i][j] ); // TODO: Really a clip necessary?
+ if (ncie->J_p[i][j] > 8.f && ncie->J_p[i][j] < 92.f) {
+ dst[i][j] = CLIP ( buffer[i][j] ); // TODO: Really a clip necessary?
} else {
dst[i][j] = src[i][j];
}
@@ -514,20 +514,20 @@ void ImProcFunctions :: dirpyr_equalizercam (CieImage *ncie, float ** src, float
} else
for (int i = 0; i < srcheight; i++)
for (int j = 0; j < srcwidth; j++) {
- dst[i][j] = CLIP( buffer[i][j] ); // TODO: Really a clip necessary?
+ dst[i][j] = CLIP ( buffer[i][j] ); // TODO: Really a clip necessary?
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
}
-SSEFUNCTION void ImProcFunctions::dirpyr_channel(float ** data_fine, float ** data_coarse, int width, int height, int level, int scale)
+SSEFUNCTION void ImProcFunctions::dirpyr_channel (float ** data_fine, float ** data_coarse, int width, int height, int level, int scale)
{
//scale is spacing of directional averaging weights
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
// calculate weights, compute directionally weighted average
- if(level > 1) {
+ if (level > 1) {
//generate domain kernel
int domker[5][5] = {{1, 1, 1, 1, 1}, {1, 2, 2, 2, 1}, {1, 2, 2, 2, 1}, {1, 2, 2, 2, 1}, {1, 1, 1, 1, 1}};
// int domker[5][5] = {{1,1,1,1,1},{1,1,1,1,1},{1,1,1,1,1},{1,1,1,1,1},{1,1,1,1,1}};
@@ -538,7 +538,7 @@ SSEFUNCTION void ImProcFunctions::dirpyr_channel(float ** data_fine, float ** da
#endif
{
#ifdef __SSE2__
- __m128 thousandv = _mm_set1_ps( 1000.0f );
+ __m128 thousandv = _mm_set1_ps ( 1000.0f );
__m128 dirwtv, valv, normv, dftemp1v, dftemp2v;
// multiplied each value of domkerv by 1000 to avoid multiplication by 1000 inside the loop
float domkerv[5][5][4] ALIGNED16 = {{{1000, 1000, 1000, 1000}, {1000, 1000, 1000, 1000}, {1000, 1000, 1000, 1000}, {1000, 1000, 1000, 1000}, {1000, 1000, 1000, 1000}}, {{1000, 1000, 1000, 1000}, {2000, 2000, 2000, 2000}, {2000, 2000, 2000, 2000}, {2000, 2000, 2000, 2000}, {1000, 1000, 1000, 1000}}, {{1000, 1000, 1000, 1000}, {2000, 2000, 2000, 2000}, {2000, 2000, 2000, 2000}, {2000, 2000, 2000, 2000}, {1000, 1000, 1000, 1000}}, {{1000, 1000, 1000, 1000}, {2000, 2000, 2000, 2000}, {2000, 2000, 2000, 2000}, {2000, 2000, 2000, 2000}, {1000, 1000, 1000, 1000}}, {{1000, 1000, 1000, 1000}, {1000, 1000, 1000, 1000}, {1000, 1000, 1000, 1000}, {1000, 1000, 1000, 1000}, {1000, 1000, 1000, 1000}}};
@@ -549,18 +549,18 @@ SSEFUNCTION void ImProcFunctions::dirpyr_channel(float ** data_fine, float ** da
#pragma omp for //schedule (dynamic,8)
#endif
- for(int i = 0; i < height; i++) {
+ for (int i = 0; i < height; i++) {
float dirwt;
- for(j = 0; j < scalewin; j++) {
+ for (j = 0; j < scalewin; j++) {
float val = 0.f;
float norm = 0.f;
- for(int inbr = max(0, i - scalewin); inbr <= min(height - 1, i + scalewin); inbr += scale) {
- for (int jnbr = max(0, j - scalewin); jnbr <= j + scalewin; jnbr += scale) {
+ for (int inbr = max (0, i - scalewin); inbr <= min (height - 1, i + scalewin); inbr += scale) {
+ for (int jnbr = max (0, j - scalewin); jnbr <= j + scalewin; jnbr += scale) {
//printf("i=%d ",(inbr-i)/scale+halfwin);
- dirwt = DIRWT(inbr, jnbr, i, j);
+ dirwt = DIRWT (inbr, jnbr, i, j);
val += dirwt * data_fine[inbr][jnbr];
norm += dirwt;
}
@@ -571,32 +571,32 @@ SSEFUNCTION void ImProcFunctions::dirpyr_channel(float ** data_fine, float ** da
#ifdef __SSE2__
- for(; j < width - scalewin - 3; j += 4) {
+ for (; j < width - scalewin - 3; j += 4) {
valv = _mm_setzero_ps();
normv = _mm_setzero_ps();
- dftemp1v = LVFU(data_fine[i][j]);
+ dftemp1v = LVFU (data_fine[i][j]);
- for(int inbr = MAX(0, i - scalewin); inbr <= MIN(height - 1, i + scalewin); inbr += scale) {
+ for (int inbr = MAX (0, i - scalewin); inbr <= MIN (height - 1, i + scalewin); inbr += scale) {
int indexihlp = (inbr - i) / scale + halfwin;
for (int jnbr = j - scalewin, indexjhlp = 0; jnbr <= j + scalewin; jnbr += scale, indexjhlp++) {
- dftemp2v = LVFU(data_fine[inbr][jnbr]);
- dirwtv = LVF(domkerv[indexihlp][indexjhlp]) / (vabsf(dftemp1v - dftemp2v) + thousandv);
+ dftemp2v = LVFU (data_fine[inbr][jnbr]);
+ dirwtv = LVF (domkerv[indexihlp][indexjhlp]) / (vabsf (dftemp1v - dftemp2v) + thousandv);
valv += dirwtv * dftemp2v;
normv += dirwtv;
}
}
- _mm_storeu_ps( &data_coarse[i][j], valv / normv); //low pass filter
+ _mm_storeu_ps ( &data_coarse[i][j], valv / normv); //low pass filter
}
- for(; j < width - scalewin; j++) {
+ for (; j < width - scalewin; j++) {
float val = 0.f;
float norm = 0.f;
- for(int inbr = max(0, i - scalewin); inbr <= min(height - 1, i + scalewin); inbr += scale) {
+ for (int inbr = max (0, i - scalewin); inbr <= min (height - 1, i + scalewin); inbr += scale) {
for (int jnbr = j - scalewin; jnbr <= j + scalewin; jnbr += scale) {
- dirwt = DIRWT(inbr, jnbr, i, j);
+ dirwt = DIRWT (inbr, jnbr, i, j);
val += dirwt * data_fine[inbr][jnbr];
norm += dirwt;
}
@@ -607,13 +607,13 @@ SSEFUNCTION void ImProcFunctions::dirpyr_channel(float ** data_fine, float ** da
#else
- for(; j < width - scalewin; j++) {
+ for (; j < width - scalewin; j++) {
float val = 0.f;
float norm = 0.f;
- for(int inbr = max(0, i - scalewin); inbr <= min(height - 1, i + scalewin); inbr += scale) {
+ for (int inbr = max (0, i - scalewin); inbr <= min (height - 1, i + scalewin); inbr += scale) {
for (int jnbr = j - scalewin; jnbr <= j + scalewin; jnbr += scale) {
- dirwt = DIRWT(inbr, jnbr, i, j);
+ dirwt = DIRWT (inbr, jnbr, i, j);
val += dirwt * data_fine[inbr][jnbr];
norm += dirwt;
}
@@ -624,13 +624,13 @@ SSEFUNCTION void ImProcFunctions::dirpyr_channel(float ** data_fine, float ** da
#endif
- for(; j < width; j++) {
+ for (; j < width; j++) {
float val = 0.f;
float norm = 0.f;
- for(int inbr = max(0, i - scalewin); inbr <= min(height - 1, i + scalewin); inbr += scale) {
- for (int jnbr = j - scalewin; jnbr <= min(width - 1, j + scalewin); jnbr += scale) {
- dirwt = DIRWT(inbr, jnbr, i, j);
+ for (int inbr = max (0, i - scalewin); inbr <= min (height - 1, i + scalewin); inbr += scale) {
+ for (int jnbr = j - scalewin; jnbr <= min (width - 1, j + scalewin); jnbr += scale) {
+ dirwt = DIRWT (inbr, jnbr, i, j);
val += dirwt * data_fine[inbr][jnbr];
norm += dirwt;
}
@@ -647,7 +647,7 @@ SSEFUNCTION void ImProcFunctions::dirpyr_channel(float ** data_fine, float ** da
#endif
{
#ifdef __SSE2__
- __m128 thousandv = _mm_set1_ps( 1000.0f );
+ __m128 thousandv = _mm_set1_ps ( 1000.0f );
__m128 dirwtv, valv, normv, dftemp1v, dftemp2v;
#endif // __SSE2__
int j;
@@ -655,17 +655,17 @@ SSEFUNCTION void ImProcFunctions::dirpyr_channel(float ** data_fine, float ** da
#pragma omp for schedule(dynamic,16)
#endif
- for(int i = 0; i < height; i++)
+ for (int i = 0; i < height; i++)
{
float dirwt;
- for(j = 0; j < scale; j++) {
+ for (j = 0; j < scale; j++) {
float val = 0.f;
float norm = 0.f;
- for(int inbr = max(0, i - scale); inbr <= min(height - 1, i + scale); inbr += scale) {
- for (int jnbr = max(0, j - scale); jnbr <= j + scale; jnbr += scale) {
- dirwt = RANGEFN(fabsf(data_fine[inbr][jnbr] - data_fine[i][j]));
+ for (int inbr = max (0, i - scale); inbr <= min (height - 1, i + scale); inbr += scale) {
+ for (int jnbr = max (0, j - scale); jnbr <= j + scale; jnbr += scale) {
+ dirwt = RANGEFN (fabsf (data_fine[inbr][jnbr] - data_fine[i][j]));
val += dirwt * data_fine[inbr][jnbr];
norm += dirwt;
}
@@ -676,30 +676,30 @@ SSEFUNCTION void ImProcFunctions::dirpyr_channel(float ** data_fine, float ** da
#ifdef __SSE2__
- for(; j < width - scale - 3; j += 4) {
+ for (; j < width - scale - 3; j += 4) {
valv = _mm_setzero_ps();
normv = _mm_setzero_ps();
- dftemp1v = LVFU(data_fine[i][j]);
+ dftemp1v = LVFU (data_fine[i][j]);
- for(int inbr = MAX(0, i - scale); inbr <= MIN(height - 1, i + scale); inbr += scale) {
+ for (int inbr = MAX (0, i - scale); inbr <= MIN (height - 1, i + scale); inbr += scale) {
for (int jnbr = j - scale; jnbr <= j + scale; jnbr += scale) {
- dftemp2v = LVFU(data_fine[inbr][jnbr]);
- dirwtv = thousandv / (vabsf(dftemp2v - dftemp1v) + thousandv);
+ dftemp2v = LVFU (data_fine[inbr][jnbr]);
+ dirwtv = thousandv / (vabsf (dftemp2v - dftemp1v) + thousandv);
valv += dirwtv * dftemp2v;
normv += dirwtv;
}
}
- _mm_storeu_ps( &data_coarse[i][j], valv / normv); //low pass filter
+ _mm_storeu_ps ( &data_coarse[i][j], valv / normv); //low pass filter
}
- for(; j < width - scale; j++) {
+ for (; j < width - scale; j++) {
float val = 0.f;
float norm = 0.f;
- for(int inbr = max(0, i - scale); inbr <= min(height - 1, i + scale); inbr += scale) {
+ for (int inbr = max (0, i - scale); inbr <= min (height - 1, i + scale); inbr += scale) {
for (int jnbr = j - scale; jnbr <= j + scale; jnbr += scale) {
- dirwt = RANGEFN(fabsf(data_fine[inbr][jnbr] - data_fine[i][j]));
+ dirwt = RANGEFN (fabsf (data_fine[inbr][jnbr] - data_fine[i][j]));
val += dirwt * data_fine[inbr][jnbr];
norm += dirwt;
}
@@ -710,13 +710,13 @@ SSEFUNCTION void ImProcFunctions::dirpyr_channel(float ** data_fine, float ** da
#else
- for(; j < width - scale; j++) {
+ for (; j < width - scale; j++) {
float val = 0.f;
float norm = 0.f;
- for(int inbr = max(0, i - scale); inbr <= min(height - 1, i + scale); inbr += scale) {
+ for (int inbr = max (0, i - scale); inbr <= min (height - 1, i + scale); inbr += scale) {
for (int jnbr = j - scale; jnbr <= j + scale; jnbr += scale) {
- dirwt = RANGEFN(fabsf(data_fine[inbr][jnbr] - data_fine[i][j]));
+ dirwt = RANGEFN (fabsf (data_fine[inbr][jnbr] - data_fine[i][j]));
val += dirwt * data_fine[inbr][jnbr];
norm += dirwt;
}
@@ -727,13 +727,13 @@ SSEFUNCTION void ImProcFunctions::dirpyr_channel(float ** data_fine, float ** da
#endif
- for(; j < width; j++) {
+ for (; j < width; j++) {
float val = 0.f;
float norm = 0.f;
- for(int inbr = max(0, i - scale); inbr <= min(height - 1, i + scale); inbr += scale) {
- for (int jnbr = j - scale; jnbr <= min(width - 1, j + scale); jnbr += scale) {
- dirwt = RANGEFN(fabsf(data_fine[inbr][jnbr] - data_fine[i][j]));
+ for (int inbr = max (0, i - scale); inbr <= min (height - 1, i + scale); inbr += scale) {
+ for (int jnbr = j - scale; jnbr <= min (width - 1, j + scale); jnbr += scale) {
+ dirwt = RANGEFN (fabsf (data_fine[inbr][jnbr] - data_fine[i][j]));
val += dirwt * data_fine[inbr][jnbr];
norm += dirwt;
}
@@ -747,14 +747,14 @@ SSEFUNCTION void ImProcFunctions::dirpyr_channel(float ** data_fine, float ** da
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-void ImProcFunctions::idirpyr_eq_channel_loc(float ** data_coarse, float ** data_fine, float ** loctemp, float ** buffer, int width, int height, int level, float mult[5], const double dirpyrThreshold, float ** hue, float ** chrom, const double skinprot, const bool gamutlab, float b_l, float t_l, float t_r, float b_r , int choice)
+void ImProcFunctions::idirpyr_eq_channel_loc (float ** data_coarse, float ** data_fine, float ** loctemp, float ** buffer, int width, int height, int level, float mult[5], const double dirpyrThreshold, float ** hue, float ** chrom, const double skinprot, const bool gamutlab, float b_l, float t_l, float t_r, float b_r , int choice)
{
- const float skinprotneg = -skinprot;
- const float factorHard = (1.f - skinprotneg / 100.f);
+// const float skinprotneg = -skinprot;
+// const float factorHard = (1.f - skinprotneg / 100.f);
float offs;
- if(skinprot == 0.f) {
+ if (skinprot == 0.f) {
offs = 0.f;
} else {
offs = -1.f;
@@ -764,7 +764,7 @@ void ImProcFunctions::idirpyr_eq_channel_loc(float ** data_coarse, float ** data
multbis[level] = mult[level]; //multbis to reduce artifacts for high values mult
- if(level == 4 && mult[level] > 1.f) {
+ if (level == 4 && mult[level] > 1.f) {
multbis[level] = 1.f + 0.65f * (mult[level] - 1.f);
}
@@ -774,28 +774,28 @@ void ImProcFunctions::idirpyr_eq_channel_loc(float ** data_coarse, float ** data
LUTf irangefn (0x20000);
{
- const float noisehi = 1.33f * noise * dirpyrThreshold / expf(level * log(3.0)), noiselo = 0.66f * noise * dirpyrThreshold / expf(level * log(3.0));
+ const float noisehi = 1.33f * noise * dirpyrThreshold / expf (level * log (3.0)), noiselo = 0.66f * noise * dirpyrThreshold / expf (level * log (3.0));
//printf("level=%i multlev=%f noisehi=%f noiselo=%f skinprot=%f\n",level,mult[level], noisehi, noiselo, skinprot);
for (int i = 0; i < 0x20000; i++) {
- if (abs(i - 0x10000) > noisehi || multbis[level] < 1.0) {
+ if (abs (i - 0x10000) > noisehi || multbis[level] < 1.0) {
irangefn[i] = multbis[level] + offs;
} else {
- if (abs(i - 0x10000) < noiselo) {
+ if (abs (i - 0x10000) < noiselo) {
irangefn[i] = 1.f + offs ;
} else {
- irangefn[i] = 1.f + offs + (multbis[level] - 1.f) * (noisehi - abs(i - 0x10000)) / (noisehi - noiselo + 0.01f) ;
+ irangefn[i] = 1.f + offs + (multbis[level] - 1.f) * (noisehi - abs (i - 0x10000)) / (noisehi - noiselo + 0.01f) ;
}
}
}
}
- if(skinprot == 0.f)
+ if (skinprot == 0.f)
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16)
#endif
- for(int i = 0; i < height; i++) {
- for(int j = 0; j < width; j++) {
+ for (int i = 0; i < height; i++) {
+ for (int j = 0; j < width; j++) {
float hipass = (data_fine[i][j] - data_coarse[i][j]);
buffer[i][j] += irangefn[hipass + 0x10000] * hipass;
}
@@ -844,14 +844,14 @@ void ImProcFunctions::idirpyr_eq_channel_loc(float ** data_coarse, float ** data
-void ImProcFunctions::idirpyr_eq_channel(float ** data_coarse, float ** data_fine, float ** buffer, int width, int height, int level, float mult[5], const double dirpyrThreshold, float ** hue, float ** chrom, const double skinprot, const bool gamutlab, float b_l, float t_l, float t_r, float b_r , int choice)
+void ImProcFunctions::idirpyr_eq_channel (float ** data_coarse, float ** data_fine, float ** buffer, int width, int height, int level, float mult[5], const double dirpyrThreshold, float ** hue, float ** chrom, const double skinprot, const bool gamutlab, float b_l, float t_l, float t_r, float b_r , int choice)
{
const float skinprotneg = -skinprot;
const float factorHard = (1.f - skinprotneg / 100.f);
float offs;
- if(skinprot == 0.f) {
+ if (skinprot == 0.f) {
offs = 0.f;
} else {
offs = -1.f;
@@ -861,48 +861,48 @@ void ImProcFunctions::idirpyr_eq_channel(float ** data_coarse, float ** data_fin
multbis[level] = mult[level]; //multbis to reduce artifacts for high values mult
- if(level == 4 && mult[level] > 1.f) {
+ if (level == 4 && mult[level] > 1.f) {
multbis[level] = 1.f + 0.65f * (mult[level] - 1.f);
}
- if(level == 5 && mult[level] > 1.f) {
+ if (level == 5 && mult[level] > 1.f) {
multbis[level] = 1.f + 0.45f * (mult[level] - 1.f);
}
LUTf irangefn (0x20000);
{
- const float noisehi = 1.33f * noise * dirpyrThreshold / expf(level * log(3.0)), noiselo = 0.66f * noise * dirpyrThreshold / expf(level * log(3.0));
+ const float noisehi = 1.33f * noise * dirpyrThreshold / expf (level * log (3.0)), noiselo = 0.66f * noise * dirpyrThreshold / expf (level * log (3.0));
//printf("level=%i multlev=%f noisehi=%f noiselo=%f skinprot=%f\n",level,mult[level], noisehi, noiselo, skinprot);
for (int i = 0; i < 0x20000; i++) {
- if (abs(i - 0x10000) > noisehi || multbis[level] < 1.0) {
+ if (abs (i - 0x10000) > noisehi || multbis[level] < 1.0) {
irangefn[i] = multbis[level] + offs;
} else {
- if (abs(i - 0x10000) < noiselo) {
+ if (abs (i - 0x10000) < noiselo) {
irangefn[i] = 1.f + offs ;
} else {
- irangefn[i] = 1.f + offs + (multbis[level] - 1.f) * (noisehi - abs(i - 0x10000)) / (noisehi - noiselo + 0.01f) ;
+ irangefn[i] = 1.f + offs + (multbis[level] - 1.f) * (noisehi - abs (i - 0x10000)) / (noisehi - noiselo + 0.01f) ;
}
}
}
}
- if(skinprot == 0.f)
+ if (skinprot == 0.f)
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16)
#endif
- for(int i = 0; i < height; i++) {
- for(int j = 0; j < width; j++) {
+ for (int i = 0; i < height; i++) {
+ for (int j = 0; j < width; j++) {
float hipass = (data_fine[i][j] - data_coarse[i][j]);
buffer[i][j] += irangefn[hipass + 0x10000] * hipass;
}
}
- else if(skinprot > 0.f)
+ else if (skinprot > 0.f)
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16)
#endif
- for(int i = 0; i < height; i++) {
- for(int j = 0; j < width; j++) {
+ for (int i = 0; i < height; i++) {
+ for (int j = 0; j < width; j++) {
float scale = 1.f;
float hipass = (data_fine[i][j] - data_coarse[i][j]);
// These values are precalculated now
@@ -916,8 +916,8 @@ void ImProcFunctions::idirpyr_eq_channel(float ** data_coarse, float ** data_fin
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16)
#endif
- for(int i = 0; i < height; i++) {
- for(int j = 0; j < width; j++) {
+ for (int i = 0; i < height; i++) {
+ for (int j = 0; j < width; j++) {
float scale = 1.f;
float hipass = (data_fine[i][j] - data_coarse[i][j]);
// These values are precalculated now
@@ -936,7 +936,7 @@ void ImProcFunctions::idirpyr_eq_channel(float ** data_coarse, float ** data_fin
}
-void ImProcFunctions::idirpyr_eq_channelcam(float ** data_coarse, float ** data_fine, float ** buffer, int width, int height, int level, float mult[5], const double dirpyrThreshold, float ** l_a_h, float ** l_b_c, const double skinprot, float b_l, float t_l, float t_r)
+void ImProcFunctions::idirpyr_eq_channelcam (float ** data_coarse, float ** data_fine, float ** buffer, int width, int height, int level, float mult[5], const double dirpyrThreshold, float ** l_a_h, float ** l_b_c, const double skinprot, float b_l, float t_l, float t_r)
{
const float skinprotneg = -skinprot;
@@ -944,7 +944,7 @@ void ImProcFunctions::idirpyr_eq_channelcam(float ** data_coarse, float ** data_
float offs;
- if(skinprot == 0.f) {
+ if (skinprot == 0.f) {
offs = 0.f;
} else {
offs = -1.f;
@@ -954,48 +954,48 @@ void ImProcFunctions::idirpyr_eq_channelcam(float ** data_coarse, float ** data_
multbis[level] = mult[level]; //multbis to reduce artifacts for high values mult
- if(level == 4 && mult[level] > 1.f) {
+ if (level == 4 && mult[level] > 1.f) {
multbis[level] = 1.f + 0.65f * (mult[level] - 1.f);
}
- if(level == 5 && mult[level] > 1.f) {
+ if (level == 5 && mult[level] > 1.f) {
multbis[level] = 1.f + 0.45f * (mult[level] - 1.f);
}
LUTf irangefn (0x20000);
{
- const float noisehi = 1.33f * noise * dirpyrThreshold / expf(level * log(3.0)), noiselo = 0.66f * noise * dirpyrThreshold / expf(level * log(3.0));
+ const float noisehi = 1.33f * noise * dirpyrThreshold / expf (level * log (3.0)), noiselo = 0.66f * noise * dirpyrThreshold / expf (level * log (3.0));
//printf("level=%i multlev=%f noisehi=%f noiselo=%f skinprot=%f\n",level,mult[level], noisehi, noiselo, skinprot);
for (int i = 0; i < 0x20000; i++) {
- if (abs(i - 0x10000) > noisehi || multbis[level] < 1.0) {
+ if (abs (i - 0x10000) > noisehi || multbis[level] < 1.0) {
irangefn[i] = multbis[level] + offs;
} else {
- if (abs(i - 0x10000) < noiselo) {
+ if (abs (i - 0x10000) < noiselo) {
irangefn[i] = 1.f + offs ;
} else {
- irangefn[i] = 1.f + offs + (multbis[level] - 1.f) * (noisehi - abs(i - 0x10000)) / (noisehi - noiselo + 0.01f) ;
+ irangefn[i] = 1.f + offs + (multbis[level] - 1.f) * (noisehi - abs (i - 0x10000)) / (noisehi - noiselo + 0.01f) ;
}
}
}
}
- if(skinprot == 0.f)
+ if (skinprot == 0.f)
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16)
#endif
- for(int i = 0; i < height; i++) {
- for(int j = 0; j < width; j++) {
+ for (int i = 0; i < height; i++) {
+ for (int j = 0; j < width; j++) {
float hipass = (data_fine[i][j] - data_coarse[i][j]);
buffer[i][j] += irangefn[hipass + 0x10000] * hipass ;
}
}
- else if(skinprot > 0.f)
+ else if (skinprot > 0.f)
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16)
#endif
- for(int i = 0; i < height; i++) {
- for(int j = 0; j < width; j++) {
+ for (int i = 0; i < height; i++) {
+ for (int j = 0; j < width; j++) {
float hipass = (data_fine[i][j] - data_coarse[i][j]);
float scale = 1.f;
Color::SkinSatCbdlCam ((data_fine[i][j]) / 327.68f, l_a_h[i][j] , l_b_c[i][j], skinprot, scale, true, b_l, t_l, t_r);
@@ -1006,8 +1006,8 @@ void ImProcFunctions::idirpyr_eq_channelcam(float ** data_coarse, float ** data_
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16)
#endif
- for(int i = 0; i < height; i++) {
- for(int j = 0; j < width; j++) {
+ for (int i = 0; i < height; i++) {
+ for (int j = 0; j < width; j++) {
float hipass = (data_fine[i][j] - data_coarse[i][j]);
float scale = 1.f;
float correct;
diff --git a/rtengine/fast_demo.cc b/rtengine/fast_demo.cc
index d5bca20b9..12286d9f1 100644
--- a/rtengine/fast_demo.cc
+++ b/rtengine/fast_demo.cc
@@ -277,7 +277,6 @@ SSEFUNCTION void RawImageSource::fast_demosaic(int winx, int winy, int winw, int
int j, cc;
__m128 wtuv, wtdv, wtlv, wtrv;
__m128 greenv, tempv, absv, abs2v;
- __m128 onev = _mm_set1_ps( 1.0f );
__m128 c16v = _mm_set1_ps( 16.0f );
__m128 fourv = _mm_set1_ps( 4.0f );
vmask selmask;
diff --git a/rtengine/fujicompressed.cc b/rtengine/fujicompressed.cc
index 2e0b83485..75ca46c04 100644
--- a/rtengine/fujicompressed.cc
+++ b/rtengine/fujicompressed.cc
@@ -20,7 +20,7 @@ it under the terms of the one of three licenses as you choose:
void CLASS init_fuji_compr (struct fuji_compressed_params* info)
{
- int cur_val, i;
+ int cur_val;
char *qt;
if ((fuji_block_width % 3 && fuji_raw_type == 16) || (fuji_block_width & 1 && fuji_raw_type == 0)) {
@@ -171,7 +171,7 @@ void CLASS copy_line_to_xtrans (struct fuji_compressed_block* info, int cur_line
while (row_count < 6) {
pixel_count = 0;
- while (pixel_count < cur_block_width) {
+ while (static_cast(pixel_count) < cur_block_width) {
switch (xtrans_abs[row_count][ (pixel_count % 6)]) {
case 0: // red
line_buf = lineBufR[row_count >> 1];
@@ -182,11 +182,12 @@ void CLASS copy_line_to_xtrans (struct fuji_compressed_block* info, int cur_line
break;
case 2: // blue
+ default:
line_buf = lineBufB[row_count >> 1];
break;
}
- index = (((pixel_count * 2 / 3) & 0x7FFFFFFE) | (pixel_count % 3) & 1) + ((pixel_count % 3) >> 1);
+ index = (((pixel_count * 2 / 3) & 0x7FFFFFFE) | ((pixel_count % 3) & 1)) + ((pixel_count % 3) >> 1);
raw_block_data[pixel_count] = line_buf[index];
++pixel_count;
@@ -228,7 +229,7 @@ void CLASS copy_line_to_bayer (struct fuji_compressed_block *info, int cur_line,
while (row_count < 6) {
pixel_count = 0;
- while (pixel_count < cur_block_width) {
+ while (static_cast(pixel_count) < cur_block_width) {
switch (fuji_bayer[row_count & 1][pixel_count & 1]) {
case 0: // red
line_buf = lineBufR[row_count >> 1];
@@ -897,12 +898,11 @@ void CLASS fuji_compressed_load_raw()
{
struct fuji_compressed_params common_info;
int cur_block;
- unsigned line_size, *block_sizes;
+ unsigned *block_sizes;
INT64 raw_offset, *raw_block_offsets;
//struct fuji_compressed_block info;
init_fuji_compr (&common_info);
- line_size = sizeof (ushort) * (common_info.line_width + 2);
// read block sizes
block_sizes = (unsigned*) malloc (sizeof (unsigned) * fuji_total_blocks);
diff --git a/rtengine/gauss.cc b/rtengine/gauss.cc
index 22339d27c..741b2e3da 100644
--- a/rtengine/gauss.cc
+++ b/rtengine/gauss.cc
@@ -231,8 +231,8 @@ template void gaussHorizontal3 (T** src, T** dst, int W, int H, const f
#ifdef __SSE2__
template SSEFUNCTION void gaussVertical3 (T** src, T** dst, int W, int H, const float c0, const float c1)
{
- vfloat Tv, Tm1v, Tp1v;
- vfloat Tv1, Tm1v1, Tp1v1;
+ vfloat Tv = F2V(0.f), Tm1v, Tp1v;
+ vfloat Tv1 = F2V(0.f), Tm1v1, Tp1v1;
vfloat c0v, c1v;
c0v = F2V(c0);
c1v = F2V(c1);
@@ -921,7 +921,7 @@ template void gaussVertical (T** src, T** dst, const int W, const int H
#pragma omp for nowait
#endif
- for (int i = 0; i < W - numcols + 1; i += numcols) {
+ for (unsigned int i = 0; i < static_cast(std::max(0, W - numcols + 1)); i += numcols) {
for (int k = 0; k < numcols; k++) {
temp2[0][k] = B * src[0][i + k] + b1 * src[0][i + k] + b2 * src[0][i + k] + b3 * src[0][i + k];
temp2[1][k] = B * src[1][i + k] + b1 * temp2[0][k] + b2 * src[0][i + k] + b3 * src[0][i + k];
diff --git a/rtengine/hilite_recon.cc b/rtengine/hilite_recon.cc
index 9f618ace5..b0b211e3d 100644
--- a/rtengine/hilite_recon.cc
+++ b/rtengine/hilite_recon.cc
@@ -398,23 +398,20 @@ void RawImageSource :: HLRecovery_inpaint (float** red, float** green, float** b
int height = H;
int width = W;
- static const int range = 2;
- static const int pitch = 4;
+ constexpr int range = 2;
+ constexpr int pitch = 4;
- static const int numdirs = 4;
-
- static const float threshpct = 0.25f;
- static const float fixthreshpct = 0.7f;
- static const float maxpct = 0.95f;
- static const float epsilon = 0.00001f;
+ constexpr float threshpct = 0.25f;
+ constexpr float maxpct = 0.95f;
+ constexpr float epsilon = 0.00001f;
//%%%%%%%%%%%%%%%%%%%%
//for blend algorithm:
- static const float blendthresh = 1.0;
- static const int ColorCount = 3;
+ constexpr float blendthresh = 1.0;
+ constexpr int ColorCount = 3;
// Transform matrixes rgb>lab and back
- static const float trans[ColorCount][ColorCount] =
+ constexpr float trans[ColorCount][ColorCount] =
{ { 1.f, 1.f, 1.f }, { 1.7320508f, -1.7320508f, 0.f }, { -1.f, -1.f, 2.f } };
- static const float itrans[ColorCount][ColorCount] =
+ constexpr float itrans[ColorCount][ColorCount] =
{ { 1.f, 0.8660254f, -0.5f }, { 1.f, -0.8660254f, -0.5f }, { 1.f, 0.f, 1.f } };
if(settings->verbose)
diff --git a/rtengine/imagedata.cc b/rtengine/imagedata.cc
index fa3651571..de5988d9b 100644
--- a/rtengine/imagedata.cc
+++ b/rtengine/imagedata.cc
@@ -331,7 +331,7 @@ void ImageData::extractInfo ()
if (mnote->getTag ("LensData")) {
std::string ldata = mnote->getTag ("LensData")->valueToString ();
- int pos;
+ size_t pos;
if (ldata.size() > 10 && (pos = ldata.find ("Lens = ")) != Glib::ustring::npos) {
lens = ldata.substr (pos + 7);
@@ -339,7 +339,7 @@ void ImageData::extractInfo ()
if (lens.compare (0, 7, "Unknown")) {
lensOk = true;
} else {
- int pos = lens.find("$FL$"); // is there a placeholder for focallength?
+ size_t pos = lens.find("$FL$"); // is there a placeholder for focallength?
if(pos != Glib::ustring::npos) { // then fill in focallength
lens = lens.replace(pos, 4, exif->getTag ("FocalLength")->valueToString ());
diff --git a/rtengine/imageio.cc b/rtengine/imageio.cc
index f24842b65..197055858 100644
--- a/rtengine/imageio.cc
+++ b/rtengine/imageio.cc
@@ -216,9 +216,8 @@ int ImageIO::getPNGSampleFormat (Glib::ustring fname, IIOSampleFormat &sFormat,
//reading PNG header
unsigned char header[8];
- fread (header, 1, 8, file);
- if (png_sig_cmp (header, 0, 8)) {
+ if (fread (header, 1, 8, file) != 8 || png_sig_cmp (header, 0, 8)) {
fclose(file);
return IMIO_HEADERERROR;
}
@@ -295,9 +294,8 @@ int ImageIO::loadPNG (Glib::ustring fname)
//reading PNG header
unsigned char header[8];
- fread (header, 1, 8, file);
- if (png_sig_cmp (header, 0, 8)) {
+ if (fread (header, 1, 8, file) != 8 || png_sig_cmp (header, 0, 8)) {
fclose(file);
return IMIO_HEADERERROR;
}
@@ -1245,7 +1243,7 @@ int ImageIO::saveTIFF (Glib::ustring fname, int bps, bool uncompressed)
// The maximum lenght is strangely not the same than for the JPEG file...
// Which maximum length is the good one ?
- if (size > 0 && size <= bufferSize) {
+ if (size > 0 && size <= static_cast(bufferSize)) {
fwrite (buffer, size, 1, file);
}
diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc
index 82fe5eada..f4aacd283 100644
--- a/rtengine/improccoordinator.cc
+++ b/rtengine/improccoordinator.cc
@@ -43,8 +43,8 @@ ImProcCoordinator::ImProcCoordinator ()
ncie (nullptr), imgsrc (nullptr), shmap (nullptr), lastAwbEqual (0.), lastAwbTempBias (0.0), ipf (¶ms, true), monitorIntent (RI_RELATIVE),
softProof (false), gamutCheck (false), scale (10), highDetailPreprocessComputed (false), highDetailRawComputed (false),
allocated (false), bwAutoR (-9000.f), bwAutoG (-9000.f), bwAutoB (-9000.f), CAMMean (NAN), coordX (0), coordY (0), localX (0), localY (0),
- dataspot (nullptr), retistr (nullptr), retistrsav (nullptr), llstr (nullptr), lhstr (nullptr), ccstr (nullptr),
- ctColorCurve(),
+ dataspot (nullptr), retistr (nullptr), llstr (nullptr), lhstr (nullptr), ccstr (nullptr), retistrsav (nullptr),
+// ctColorCurve(),
// localcurve(65536, 0),
hltonecurve (65536),
shtonecurve (65536),
@@ -55,6 +55,7 @@ ImProcCoordinator::ImProcCoordinator ()
satcurve (65536, 0),
lhskcurve (65536, 0),
clcurve (65536, 0),
+ conversionBuffer (1, 1),
wavclCurve (65536, 0),
clToningcurve (65536, 0),
lllocalcurve (65536, 0),
@@ -164,15 +165,17 @@ ImProcCoordinator::ImProcCoordinator ()
rCurve(),
gCurve(),
bCurve(),
- rcurvehist(256), rcurvehistCropped(256), rbeforehist(256),
- gcurvehist(256), gcurvehistCropped(256), gbeforehist(256),
- bcurvehist(256), bcurvehistCropped(256), bbeforehist(256),
- fw(0), fh(0), tr(0),
- fullw(1), fullh(1),
- pW(-1), pH(-1),
- plistener(nullptr), imageListener(nullptr), aeListener(nullptr), acListener(nullptr), abwListener(nullptr), awbListener(nullptr), aloListener(nullptr), actListener(nullptr), adnListener(nullptr), awavListener(nullptr), dehaListener(nullptr), frameCountListener(nullptr), imageTypeListener(nullptr), hListener(nullptr),
- resultValid(false), lastOutputProfile("BADFOOD"), lastOutputIntent(RI__COUNT), lastOutputBPC(false), thread(nullptr), changeSinceLast(0), updaterRunning(false), destroying(false), utili(false), autili(false), wavcontlutili(false),
- butili(false), ccutili(false), cclutili(false), clcutili(false), opautili(false), conversionBuffer(1, 1), colourToningSatLimit(0.f), colourToningSatLimitOpacity(0.f)
+ ctColorCurve(),
+ rcurvehist (256), rcurvehistCropped (256), rbeforehist (256),
+ gcurvehist (256), gcurvehistCropped (256), gbeforehist (256),
+ bcurvehist (256), bcurvehistCropped (256), bbeforehist (256),
+ fw (0), fh (0), tr (0),
+ fullw (1), fullh (1),
+ pW (-1), pH (-1),
+ //conversionBuffer(1, 1),
+ plistener (nullptr), imageListener (nullptr), aeListener (nullptr), acListener (nullptr), abwListener (nullptr), awbListener (nullptr), aloListener (nullptr), actListener (nullptr), adnListener (nullptr), awavListener (nullptr), dehaListener (nullptr), frameCountListener (nullptr), imageTypeListener (nullptr), hListener (nullptr),
+ resultValid (false), lastOutputProfile ("BADFOOD"), lastOutputIntent (RI__COUNT), lastOutputBPC (false), thread (nullptr), changeSinceLast (0), updaterRunning (false), destroying (false), utili (false), autili (false), wavcontlutili (false),
+ butili (false), ccutili (false), cclutili (false), clcutili (false), opautili (false), colourToningSatLimit (0.f), colourToningSatLimitOpacity (0.f)
{}
void ImProcCoordinator::assign (ImageSource* imgsrc)
@@ -266,16 +269,16 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall)
progress ("Applying white balance, color correction & sRGB conversion...", 100 * readyphase / numofphases);
- if(frameCountListener) {
- frameCountListener->FrameCountChanged(imgsrc->getFrameCount(), params.raw.bayersensor.imageNum);
+ if (frameCountListener) {
+ frameCountListener->FrameCountChanged (imgsrc->getFrameCount(), params.raw.bayersensor.imageNum);
}
// raw auto CA is bypassed if no high detail is needed, so we have to compute it when high detail is needed
if ( (todo & M_PREPROC) || (!highDetailPreprocessComputed && highDetailNeeded)) {
- imgsrc->setCurrentFrame(params.raw.bayersensor.imageNum);
+ imgsrc->setCurrentFrame (params.raw.bayersensor.imageNum);
- imgsrc->preprocess( rp, params.lensProf, params.coarse );
- imgsrc->getRAWHistogram( histRedRaw, histGreenRaw, histBlueRaw );
+ imgsrc->preprocess ( rp, params.lensProf, params.coarse );
+ imgsrc->getRAWHistogram ( histRedRaw, histGreenRaw, histBlueRaw );
if (highDetailNeeded) {
highDetailPreprocessComputed = true;
@@ -296,8 +299,8 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall)
*/
// If high detail (=100%) is newly selected, do a demosaic update, since the last was just with FAST
- if(imageTypeListener) {
- imageTypeListener->imageTypeChanged(imgsrc->isRAW(), imgsrc->getSensorType() == ST_BAYER, imgsrc->getSensorType() == ST_FUJI_XTRANS);
+ if (imageTypeListener) {
+ imageTypeListener->imageTypeChanged (imgsrc->isRAW(), imgsrc->getSensorType() == ST_BAYER, imgsrc->getSensorType() == ST_FUJI_XTRANS);
}
if ( (todo & M_RAW)
@@ -307,7 +310,7 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall)
if (settings->verbose) {
if (imgsrc->getSensorType() == ST_BAYER) {
- printf("Demosaic Bayer image n.%d using method: %s\n", rp.bayersensor.imageNum + 1, rp.bayersensor.method.c_str());
+ printf ("Demosaic Bayer image n.%d using method: %s\n", rp.bayersensor.imageNum + 1, rp.bayersensor.method.c_str());
} else if (imgsrc->getSensorType() == ST_FUJI_XTRANS) {
printf ("Demosaic X-Trans image with using method: %s\n", rp.xtranssensor.method.c_str());
}
@@ -553,7 +556,7 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall)
opautili = false;
- if(params.colorToning.enabled) {
+ if (params.colorToning.enabled) {
TMatrix wprof = ICCStore::getInstance()->workingSpaceMatrix (params.icm.working);
double wp[3][3] = {
{wprof[0][0], wprof[0][1], wprof[0][2]},
@@ -787,7 +790,7 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall)
printf ("mip files in=%s\n", datal.c_str());
// if(! fic0.fail()) {
- float **shbuffer;
+ float **shbuffer = nullptr;
versionmip = 0;
int maxdat;
int sca = 1;
@@ -1261,7 +1264,7 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall)
//end save
- int ns;
+ int ns = 0;
int realsp = params.locallab.nbspot;
bool excurvret = true;
bool excurvll = true;
@@ -1640,7 +1643,7 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall)
std::string line2;
std::string spotline2;
int cont2 = 0;
- int ns2;
+ int ns2 = 0;
int maxin = 58;
int sizecu2;
int sizell2;
@@ -1770,7 +1773,7 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall)
for (int sp = 1; sp < maxspot; sp++) { //spots default
params.locallab.hueref = dataspot[58][sp] / 100.;
params.locallab.chromaref = dataspot[59][sp];
- bool locutili = locutili;
+ bool locutili = false;
params.locallab.lumaref = dataspot[60][sp];
params.locallab.circrad = circrads[sp] = dataspot[2][sp];
params.locallab.locX = locx[sp] = dataspot[3][sp];
diff --git a/rtengine/improccoordinator.h b/rtengine/improccoordinator.h
index 472663002..71e9aecb1 100644
--- a/rtengine/improccoordinator.h
+++ b/rtengine/improccoordinator.h
@@ -91,8 +91,9 @@ protected:
// Precomputed values used by DetailedCrop ----------------------------------------------
float bwAutoR, bwAutoG, bwAutoB;
- int coordX, coordY, localX, localY;
float CAMMean;
+ int coordX, coordY, localX, localY;
+
LUTf hltonecurve;
LUTf shtonecurve;
LUTf tonecurve;
diff --git a/rtengine/improcfun.cc b/rtengine/improcfun.cc
index c6a18bd50..271e14637 100644
--- a/rtengine/improcfun.cc
+++ b/rtengine/improcfun.cc
@@ -91,7 +91,7 @@ void ImProcFunctions::updateColorProfiles (const Glib::ustring& monitorProfile,
MyMutex::MyLock lcmsLock (*lcmsMutex);
cmsUInt32Number flags;
- cmsHPROFILE iprof = cmsCreateLab4Profile(nullptr);
+ cmsHPROFILE iprof = cmsCreateLab4Profile (nullptr);
bool softProofCreated = false;
@@ -99,7 +99,7 @@ void ImProcFunctions::updateColorProfiles (const Glib::ustring& monitorProfile,
cmsHPROFILE oprof = nullptr;
if (!settings->printerProfile.empty()) {
- oprof = ICCStore::getInstance()->getProfile(settings->printerProfile);
+ oprof = ICCStore::getInstance()->getProfile (settings->printerProfile);
}
if (oprof) {
@@ -114,7 +114,7 @@ void ImProcFunctions::updateColorProfiles (const Glib::ustring& monitorProfile,
flags |= cmsFLAGS_GAMUTCHECK;
}
- monitorTransform = cmsCreateProofingTransform(
+ monitorTransform = cmsCreateProofingTransform (
iprof, TYPE_Lab_FLT,
monitor, TYPE_RGB_8,
oprof,
@@ -138,7 +138,7 @@ void ImProcFunctions::updateColorProfiles (const Glib::ustring& monitorProfile,
monitorTransform = cmsCreateTransform (iprof, TYPE_Lab_FLT, monitor, TYPE_RGB_8, monitorIntent, flags);
}
- cmsCloseProfile(iprof);
+ cmsCloseProfile (iprof);
}
}
@@ -153,19 +153,19 @@ void ImProcFunctions::firstAnalysis (const Imagefloat* const original, const Pro
int W = original->getWidth();
int H = original->getHeight();
- float lumimulf[3] = {static_cast(lumimul[0]), static_cast(lumimul[1]), static_cast(lumimul[2])};
+ float lumimulf[3] = {static_cast (lumimul[0]), static_cast (lumimul[1]), static_cast (lumimul[2])};
// calculate histogram of the y channel needed for contrast curve calculation in exposure adjustments
histogram.clear();
- if(multiThread) {
+ if (multiThread) {
#ifdef _OPENMP
- const int numThreads = min(max(W * H / (int)histogram.getSize(), 1), omp_get_max_threads());
+ const int numThreads = min (max (W * H / (int)histogram.getSize(), 1), omp_get_max_threads());
#pragma omp parallel num_threads(numThreads) if(numThreads>1)
#endif
{
- LUTu hist(histogram.getSize());
+ LUTu hist (histogram.getSize());
hist.clear();
#ifdef _OPENMP
#pragma omp for nowait
@@ -174,9 +174,9 @@ void ImProcFunctions::firstAnalysis (const Imagefloat* const original, const Pro
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
- float r = original->r(i, j);
- float g = original->g(i, j);
- float b = original->b(i, j);
+ float r = original->r (i, j);
+ float g = original->g (i, j);
+ float b = original->b (i, j);
int y = (lumimulf[0] * r + lumimulf[1] * g + lumimulf[2] * b);
hist[y]++;
@@ -193,9 +193,9 @@ void ImProcFunctions::firstAnalysis (const Imagefloat* const original, const Pro
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
- float r = original->r(i, j);
- float g = original->g(i, j);
- float b = original->b(i, j);
+ float r = original->r (i, j);
+ float g = original->g (i, j);
+ float b = original->b (i, j);
int y = (lumimulf[0] * r + lumimulf[1] * g + lumimulf[2] * b);
histogram[y]++;
@@ -210,7 +210,7 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
const ColorAppearance & customColCurve1, const ColorAppearance & customColCurve2, const ColorAppearance & customColCurve3,
LUTu & histLCAM, LUTu & histCCAM, LUTf & CAMBrightCurveJ, LUTf & CAMBrightCurveQ, float &mean, int Iterates, int scale, bool execsharp, double &d, int scalecd, int rtt)
{
- if(params->colorappearance.enabled) {
+ if (params->colorappearance.enabled) {
//int lastskip;
//if(rtt==1) {lastskip=scalecd;} //not for Rtthumbnail
@@ -224,15 +224,15 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
float val;
//preparate for histograms CIECAM
- if(pW != 1) { //only with improccoordinator
- dLcurve(65536, 0);
+ if (pW != 1) { //only with improccoordinator
+ dLcurve (65536, 0);
dLcurve.clear();
- hist16JCAM(65536, 0);
+ hist16JCAM (65536, 0);
hist16JCAM.clear();
for (int i = 0; i < 32768; i++) { //# 32768*1.414 approximation maxi for chroma
val = (double)i / 32767.0;
- dLcurve[i] = CLIPD(val);
+ dLcurve[i] = CLIPD (val);
}
}
@@ -241,23 +241,21 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
bool chropC = false;
float valc;
- if(pW != 1) { //only with improccoordinator
- dCcurve(65536, 0);
- hist16_CCAM(65536);
+ if (pW != 1) { //only with improccoordinator
+ dCcurve (65536, 0);
+ hist16_CCAM (65536);
hist16_CCAM.clear();
for (int i = 0; i < 48000; i++) { //# 32768*1.414 approximation maxi for chroma
valc = (double)i / 47999.0;
- dCcurve[i] = CLIPD(valc);
+ dCcurve[i] = CLIPD (valc);
}
}
//end preparate histogram
int width = lab->W, height = lab->H;
float minQ = 10000.f;
- float minM = 10000.f;
float maxQ = -1000.f;
- float maxM = -1000.f;
float w_h;
float a_w;
float c_;
@@ -265,9 +263,9 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
double Yw;
Yw = 1.0;
double Xw, Zw;
- double f, c, nc, yb, la, xw, yw, zw, f2, c2, nc2, yb2, la2;
+ double f, c, nc, yb = 0., la, xw, yw, zw, f2 = 0., c2 = 0., nc2 = 0., yb2 = 0., la2;
double fl, n, nbb, ncb, aw;
- double xwd, ywd, zwd;
+ double xwd = 0., ywd, zwd = 0.;
int alg = 0;
bool algepd = false;
float sum = 0.f;
@@ -277,22 +275,22 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
ColorTemp::temp2mulxyz (params->wb.temperature, params->wb.green, params->wb.method, Xw, Zw); //compute white Xw Yw Zw : white current WB
//viewing condition for surround
- if(params->colorappearance.surround == "Average") {
+ if (params->colorappearance.surround == "Average") {
f = 1.00;
c = 0.69;
nc = 1.00;
f2 = 1.0, c2 = 0.69, nc2 = 1.0;
- } else if(params->colorappearance.surround == "Dim") {
+ } else if (params->colorappearance.surround == "Dim") {
f2 = 0.9;
c2 = 0.59;
nc2 = 0.9;
f = 1.0, c = 0.69, nc = 1.0;
- } else if(params->colorappearance.surround == "Dark") {
+ } else if (params->colorappearance.surround == "Dark") {
f2 = 0.8;
c2 = 0.525;
nc2 = 0.8;
f = 1.0, c = 0.69, nc = 1.0;
- } else if(params->colorappearance.surround == "ExtremelyDark") {
+ } else if (params->colorappearance.surround == "ExtremelyDark") {
f2 = 0.8;
c2 = 0.41;
nc2 = 0.8;
@@ -300,7 +298,7 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
}
//scene condition for surround
- if(params->colorappearance.surrsource) {
+ if (params->colorappearance.surrsource) {
f = 0.85; // if user => source image has surround very dark
c = 0.55;
nc = 0.85;
@@ -309,12 +307,12 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
//with which algorithme
if (params->colorappearance.algo == "JC") {
alg = 0;
- } else if(params->colorappearance.algo == "JS") {
+ } else if (params->colorappearance.algo == "JS") {
alg = 1;
- } else if(params->colorappearance.algo == "QM") {
+ } else if (params->colorappearance.algo == "QM") {
alg = 2;
algepd = true;
- } else if(params->colorappearance.algo == "ALL") {
+ } else if (params->colorappearance.algo == "ALL") {
alg = 3;
algepd = true;
}
@@ -323,35 +321,35 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
bool needQ = (alg == 2 || alg == 3);
//settings white point of output device - or illuminant viewing
- if(settings->viewingdevice == 0) {
+ if (settings->viewingdevice == 0) {
xwd = 96.42; //5000K
ywd = 100.0;
zwd = 82.52;
- } else if(settings->viewingdevice == 1) {
+ } else if (settings->viewingdevice == 1) {
xwd = 95.68; //5500
ywd = 100.0;
zwd = 92.15;
- } else if(settings->viewingdevice == 2) {
+ } else if (settings->viewingdevice == 2) {
xwd = 95.24; //6000
ywd = 100.0;
zwd = 100.81;
- } else if(settings->viewingdevice == 3) {
+ } else if (settings->viewingdevice == 3) {
xwd = 95.04; //6500
ywd = 100.0;
zwd = 108.88;
- } else if(settings->viewingdevice == 4) {
+ } else if (settings->viewingdevice == 4) {
xwd = 109.85; //tungsten
ywd = 100.0;
zwd = 35.58;
- } else if(settings->viewingdevice == 5) {
+ } else if (settings->viewingdevice == 5) {
xwd = 99.18; //fluo F2
ywd = 100.0;
zwd = 67.39;
- } else if(settings->viewingdevice == 6) {
+ } else if (settings->viewingdevice == 6) {
xwd = 95.04; //fluo F7
ywd = 100.0;
zwd = 108.75;
- } else if(settings->viewingdevice == 7) {
+ } else if (settings->viewingdevice == 7) {
xwd = 100.96; //fluo F11
ywd = 100.0;
zwd = 64.35;
@@ -359,32 +357,32 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
//settings mean Luminance Y of output device or viewing
- if(settings->viewingdevicegrey == 0) {
+ if (settings->viewingdevicegrey == 0) {
yb2 = 5.0;
- } else if(settings->viewingdevicegrey == 1) {
+ } else if (settings->viewingdevicegrey == 1) {
yb2 = 10.0;
- } else if(settings->viewingdevicegrey == 2) {
+ } else if (settings->viewingdevicegrey == 2) {
yb2 = 15.0;
- } else if(settings->viewingdevicegrey == 3) {
+ } else if (settings->viewingdevicegrey == 3) {
yb2 = 18.0;
- } else if(settings->viewingdevicegrey == 4) {
+ } else if (settings->viewingdevicegrey == 4) {
yb2 = 23.0;
- } else if(settings->viewingdevicegrey == 5) {
+ } else if (settings->viewingdevicegrey == 5) {
yb2 = 30.0;
- } else if(settings->viewingdevicegrey == 6) {
+ } else if (settings->viewingdevicegrey == 6) {
yb2 = 40.0;
}
//La and la2 = ambiant luminosity scene and viewing
- la = double(params->colorappearance.adapscen);
+ la = double (params->colorappearance.adapscen);
- if(pwb == 2) {
- if(params->colorappearance.autoadapscen) {
+ if (pwb == 2) {
+ if (params->colorappearance.autoadapscen) {
la = adap;
}
}
- la2 = double(params->colorappearance.adaplum);
+ la2 = double (params->colorappearance.adaplum);
// level of adaptation
double deg = (params->colorappearance.degree) / 100.0;
@@ -401,20 +399,20 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
float hue = params->colorappearance.colorh;
double rstprotection = 100. - params->colorappearance.rstprotection;
- if(schr > 0.0) {
+ if (schr > 0.0) {
schr = schr / 2.0f; //divide sensibility for saturation
}
// extracting datas from 'params' to avoid cache flush (to be confirmed)
ColorAppearanceParams::eTCModeId curveMode = params->colorappearance.curveMode;
ColorAppearanceParams::eTCModeId curveMode2 = params->colorappearance.curveMode2;
- bool hasColCurve1 = bool(customColCurve1);
- bool hasColCurve2 = bool(customColCurve2);
+ bool hasColCurve1 = bool (customColCurve1);
+ bool hasColCurve2 = bool (customColCurve2);
ColorAppearanceParams::eCTCModeId curveMode3 = params->colorappearance.curveMode3;
- bool hasColCurve3 = bool(customColCurve3);
+ bool hasColCurve3 = bool (customColCurve3);
- if(CAMBrightCurveJ.dirty || CAMBrightCurveQ.dirty) {
+ if (CAMBrightCurveJ.dirty || CAMBrightCurveQ.dirty) {
LUTu hist16J;
LUTu hist16Q;
@@ -438,34 +436,34 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
if (currL > 95.) {
koef = 1.f;
- } else if(currL > 85.) {
+ } else if (currL > 85.) {
koef = 0.97f;
- } else if(currL > 80.) {
+ } else if (currL > 80.) {
koef = 0.93f;
- } else if(currL > 70.) {
+ } else if (currL > 70.) {
koef = 0.87f;
- } else if(currL > 60.) {
+ } else if (currL > 60.) {
koef = 0.85f;
- } else if(currL > 50.) {
+ } else if (currL > 50.) {
koef = 0.8f;
- } else if(currL > 40.) {
+ } else if (currL > 40.) {
koef = 0.75f;
- } else if(currL > 30.) {
+ } else if (currL > 30.) {
koef = 0.7f;
- } else if(currL > 20.) {
+ } else if (currL > 20.) {
koef = 0.7f;
- } else if(currL > 10.) {
+ } else if (currL > 10.) {
koef = 0.9f;
- } else if(currL > 0.) {
+ } else if (currL > 0.) {
koef = 1.0f;
}
if (needJ) {
- hist16J[CLIP((int)((koef * lab->L[i][j])))]++; //evaluate histogram luminance L # J
+ hist16J[CLIP ((int) ((koef * lab->L[i][j])))]++; //evaluate histogram luminance L # J
}
if (needQ) {
- hist16Q[CLIP((int) (32768.f * sqrt((koef * (lab->L[i][j])) / 32768.f)))]++; //for brightness Q : approximation for Q=wh*sqrt(J/100) J not equal L
+ hist16Q[CLIP ((int) (32768.f * sqrt ((koef * (lab->L[i][j])) / 32768.f)))]++; //for brightness Q : approximation for Q=wh*sqrt(J/100) J not equal L
}
sum += koef * lab->L[i][j]; //evaluate mean J to calcualte Yb
@@ -477,7 +475,7 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
//evaluate lightness, contrast
if (needJ) {
if (!CAMBrightCurveJ) {
- CAMBrightCurveJ(65536, 0);
+ CAMBrightCurveJ (65536, 0);
CAMBrightCurveJ.dirty = false;
}
@@ -486,7 +484,7 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
if (needQ) {
if (!CAMBrightCurveQ) {
- CAMBrightCurveQ(65536, 0);
+ CAMBrightCurveQ (65536, 0);
CAMBrightCurveQ.dirty = false;
}
@@ -494,40 +492,40 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
}
}
- if(settings->viewinggreySc == 0) { //auto
+ if (settings->viewinggreySc == 0) { //auto
if (mean < 15.f) {
yb = 3.0;
- } else if(mean < 30.f) {
+ } else if (mean < 30.f) {
yb = 5.0;
- } else if(mean < 40.f) {
+ } else if (mean < 40.f) {
yb = 10.0;
- } else if(mean < 45.f) {
+ } else if (mean < 45.f) {
yb = 15.0;
- } else if(mean < 50.f) {
+ } else if (mean < 50.f) {
yb = 18.0;
- } else if(mean < 55.f) {
+ } else if (mean < 55.f) {
yb = 23.0;
- } else if(mean < 60.f) {
+ } else if (mean < 60.f) {
yb = 30.0;
- } else if(mean < 70.f) {
+ } else if (mean < 70.f) {
yb = 40.0;
- } else if(mean < 80.f) {
+ } else if (mean < 80.f) {
yb = 60.0;
- } else if(mean < 90.f) {
+ } else if (mean < 90.f) {
yb = 80.0;
} else {
yb = 90.0;
}
}
- if(settings->viewinggreySc == 1) {
+ if (settings->viewinggreySc == 1) {
yb = 18.0;
}
int gamu = 0;
bool highlight = params->toneCurve.hrenabled; //Get the value if "highlight reconstruction" is activated
- if(params->colorappearance.gamut) {
+ if (params->colorappearance.gamut) {
gamu = 1; //enabled gamut control
}
@@ -537,7 +535,7 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
double xw1, yw1, zw1, xw2, yw2, zw2;
// settings of WB: scene and viewing
- if(params->colorappearance.wbmodel == "RawT") {
+ if (params->colorappearance.wbmodel == "RawT") {
xw1 = 96.46; //use RT WB; CAT 02 is used for output device (see prefreneces)
yw1 = 100.0;
zw1 = 82.445;
@@ -554,9 +552,9 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
}
double cz, wh, pfl;
- Ciecam02::initcam1(gamu, yb, pilot, f, la, xw, yw, zw, n, d, nbb, ncb, cz, aw, wh, pfl, fl, c);
+ Ciecam02::initcam1 (gamu, yb, pilot, f, la, xw, yw, zw, n, d, nbb, ncb, cz, aw, wh, pfl, fl, c);
double nj, dj, nbbj, ncbj, czj, awj, flj;
- Ciecam02::initcam2(gamu, yb2, f2, la2, xw2, yw2, zw2, nj, dj, nbbj, ncbj, czj, awj, flj);
+ Ciecam02::initcam2 (gamu, yb2, f2, la2, xw2, yw2, zw2, nj, dj, nbbj, ncbj, czj, awj, flj);
@@ -589,7 +587,7 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
double x, y, z;
double epsil = 0.0001;
//convert Lab => XYZ
- Color::Lab2XYZ(L, a, b, x1, y1, z1);
+ Color::Lab2XYZ (L, a, b, x1, y1, z1);
// double J, C, h, Q, M, s, aw, fl, wh;
double J, C, h, Q, M, s;
@@ -604,12 +602,12 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
y = (double)y1 / 655.35;
z = (double)z1 / 655.35;
//process source==> normal
- Ciecam02::xyz2jchqms_ciecam02( J, C, h,
- Q, M, s, aw, fl, wh,
- x, y, z,
- xw1, yw1, zw1,
- yb, la,
- f, c, nc, pilot, gamu , n, nbb, ncb, pfl, cz, d );
+ Ciecam02::xyz2jchqms_ciecam02 ( J, C, h,
+ Q, M, s, aw, fl, wh,
+ x, y, z,
+ xw1, yw1, zw1,
+ yb, la,
+ f, c, nc, pilot, gamu , n, nbb, ncb, pfl, cz, d );
Jpro = J;
Cpro = C;
hpro = h;
@@ -622,60 +620,60 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
f_l = fl;
// we cannot have all algoritms with all chroma curves
- if(alg == 1) {
+ if (alg == 1) {
// Lightness saturation
- if(Jpro > 99.9f) {
+ if (Jpro > 99.9f) {
Jpro = 99.9f;
}
- Jpro = (CAMBrightCurveJ[(float)(Jpro * 327.68)]) / 327.68; //ligthness CIECAM02 + contrast
+ Jpro = (CAMBrightCurveJ[ (float) (Jpro * 327.68)]) / 327.68; //ligthness CIECAM02 + contrast
double sres;
double Sp = spro / 100.0;
double parsat = 1.5; //parsat=1.5 =>saturation ; 1.8 => chroma ; 2.5 => colorfullness (personal evaluation)
- if(schr == -100.0) {
+ if (schr == -100.0) {
schr = -99.8;
}
- Ciecam02::curvecolor(schr, Sp , sres, parsat);
- double coe = pow(fl, 0.25);
+ Ciecam02::curvecolor (schr, Sp , sres, parsat);
+ double coe = pow (fl, 0.25);
float dred = 100.f; // in C mode
float protect_red = 80.0f; // in C mode
- dred = 100.0 * sqrt((dred * coe) / Qpro);
- protect_red = 100.0 * sqrt((protect_red * coe) / Qpro);
+ dred = 100.0 * sqrt ((dred * coe) / Qpro);
+ protect_red = 100.0 * sqrt ((protect_red * coe) / Qpro);
int sk = 0;
float ko = 100.f;
- Color::skinred(Jpro, hpro, sres, Sp, dred, protect_red, sk, rstprotection, ko, spro);
- Qpro = ( 4.0 / c ) * sqrt( Jpro / 100.0 ) * ( aw + 4.0 ) ;
+ Color::skinred (Jpro, hpro, sres, Sp, dred, protect_red, sk, rstprotection, ko, spro);
+ Qpro = ( 4.0 / c ) * sqrt ( Jpro / 100.0 ) * ( aw + 4.0 ) ;
Cpro = (spro * spro * Qpro) / (10000.0);
- } else if(alg == 3 || alg == 0 || alg == 2) {
+ } else if (alg == 3 || alg == 0 || alg == 2) {
double coef = 32760. / wh;
- if(alg == 3 || alg == 2) {
- if(Qpro * coef > 32767.0f) {
- Qpro = (CAMBrightCurveQ[(float)32767.0f]) / coef; //brightness and contrast
+ if (alg == 3 || alg == 2) {
+ if (Qpro * coef > 32767.0f) {
+ Qpro = (CAMBrightCurveQ[ (float)32767.0f]) / coef; //brightness and contrast
} else {
- Qpro = (CAMBrightCurveQ[(float)(Qpro * coef)]) / coef; //brightness and contrast
+ Qpro = (CAMBrightCurveQ[ (float) (Qpro * coef)]) / coef; //brightness and contrast
}
}
double Mp, sres;
- double coe = pow(fl, 0.25);
+ double coe = pow (fl, 0.25);
Mp = Mpro / 100.0;
double parsat = 2.5;
- if(mchr == -100.0) {
+ if (mchr == -100.0) {
mchr = -99.8 ;
}
- if(mchr == 100.0) {
+ if (mchr == 100.0) {
mchr = 99.9;
}
- if(alg == 3 || alg == 2) {
- Ciecam02::curvecolor(mchr, Mp , sres, parsat);
+ if (alg == 3 || alg == 2) {
+ Ciecam02::curvecolor (mchr, Mp , sres, parsat);
} else {
- Ciecam02::curvecolor(0.0, Mp , sres, parsat); //colorfullness
+ Ciecam02::curvecolor (0.0, Mp , sres, parsat); //colorfullness
}
float dred = 100.f; //in C mode
@@ -684,77 +682,77 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
protect_red *= coe; //M mode
int sk = 0;
float ko = 100.f;
- Color::skinred(Jpro, hpro, sres, Mp, dred, protect_red, sk, rstprotection, ko, Mpro);
+ Color::skinred (Jpro, hpro, sres, Mp, dred, protect_red, sk, rstprotection, ko, Mpro);
Jpro = (100.0 * Qpro * Qpro) / (wh * wh);
Cpro = Mpro / coe;
- spro = 100.0 * sqrt( Mpro / Qpro );
+ spro = 100.0 * sqrt ( Mpro / Qpro );
- if(alg != 2) {
- if(Jpro > 99.9f) {
+ if (alg != 2) {
+ if (Jpro > 99.9f) {
Jpro = 99.9f;
}
- Jpro = (CAMBrightCurveJ[(float)(Jpro * 327.68f)]) / 327.68f; //ligthness CIECAM02 + contrast
+ Jpro = (CAMBrightCurveJ[ (float) (Jpro * 327.68f)]) / 327.68f; //ligthness CIECAM02 + contrast
}
double Cp;
double Sp = spro / 100.0;
parsat = 1.5;
- if(schr == -100.0) {
+ if (schr == -100.0) {
schr = -99.;
}
- if(schr == 100.0) {
+ if (schr == 100.0) {
schr = 98.;
}
- if(alg == 3) {
- Ciecam02::curvecolor(schr, Sp , sres, parsat);
+ if (alg == 3) {
+ Ciecam02::curvecolor (schr, Sp , sres, parsat);
} else {
- Ciecam02::curvecolor(0.0, Sp , sres, parsat); //saturation
+ Ciecam02::curvecolor (0.0, Sp , sres, parsat); //saturation
}
dred = 100.f; // in C mode
protect_red = 80.0f; // in C mode
- dred = 100.0 * sqrt((dred * coe) / Q);
- protect_red = 100.0 * sqrt((protect_red * coe) / Q);
+ dred = 100.0 * sqrt ((dred * coe) / Q);
+ protect_red = 100.0 * sqrt ((protect_red * coe) / Q);
sk = 0;
- Color::skinred(Jpro, hpro, sres, Sp, dred, protect_red, sk, rstprotection, ko, spro);
+ Color::skinred (Jpro, hpro, sres, Sp, dred, protect_red, sk, rstprotection, ko, spro);
//double Q1;
- Qpro = ( 4.0 / c ) * sqrt( Jpro / 100.0 ) * ( aw + 4.0 ) ;
+ Qpro = ( 4.0 / c ) * sqrt ( Jpro / 100.0 ) * ( aw + 4.0 ) ;
Cpro = (spro * spro * Qpro) / (10000.0);
Cp = Cpro / 100.0;
parsat = 1.8; //parsat=1.5 =>saturation ; 1.8 => chroma ; 2.5 => colorfullness (personal evaluation : for not)
- if(chr == -100.0) {
+ if (chr == -100.0) {
chr = -99.8;
}
- if(alg != 2) {
- Ciecam02::curvecolor(chr, Cp , sres, parsat);
+ if (alg != 2) {
+ Ciecam02::curvecolor (chr, Cp , sres, parsat);
} else {
- Ciecam02::curvecolor(0.0, Cp , sres, parsat); //chroma
+ Ciecam02::curvecolor (0.0, Cp , sres, parsat); //chroma
}
dred = 55.f;
protect_red = 30.0f;
sk = 1;
- Color::skinred(Jpro, hpro, sres, Cp, dred, protect_red, sk, rstprotection, ko, Cpro);
+ Color::skinred (Jpro, hpro, sres, Cp, dred, protect_red, sk, rstprotection, ko, Cpro);
- if(Jpro < 1. && Cpro > 12.) {
+ if (Jpro < 1. && Cpro > 12.) {
Cpro = 12.; //reduce artifacts by "pseudo gamut control CIECAM"
- } else if(Jpro < 2. && Cpro > 15.) {
+ } else if (Jpro < 2. && Cpro > 15.) {
Cpro = 15.;
- } else if(Jpro < 4. && Cpro > 30.) {
+ } else if (Jpro < 4. && Cpro > 30.) {
Cpro = 30.;
- } else if(Jpro < 7. && Cpro > 50.) {
+ } else if (Jpro < 7. && Cpro > 50.) {
Cpro = 50.;
}
hpro = hpro + hue;
- if( hpro < 0.0 ) {
+ if ( hpro < 0.0 ) {
hpro += 360.0; //hue
}
}
@@ -772,28 +770,28 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
float Jold100 = (float) Jpro;
float redu = 25.f;
float reduc = 1.f;
- const Lightcurve& userColCurveJ1 = static_cast(customColCurve1);
- userColCurveJ1.Apply(Jj);
+ const Lightcurve& userColCurveJ1 = static_cast (customColCurve1);
+ userColCurveJ1.Apply (Jj);
- if(Jj > Jold) {
- if(Jj < 65535.f) {
- if(Jold < 327.68f * redu) {
+ if (Jj > Jold) {
+ if (Jj < 65535.f) {
+ if (Jold < 327.68f * redu) {
Jj = 0.3f * (Jj - Jold) + Jold; //divide sensibility
} else {
- reduc = LIM((100.f - Jold100) / (100.f - redu), 0.f, 1.f);
+ reduc = LIM ((100.f - Jold100) / (100.f - redu), 0.f, 1.f);
Jj = 0.3f * reduc * (Jj - Jold) + Jold; //reduct sensibility in highlights
}
}
- } else if(Jj > 10.f) {
+ } else if (Jj > 10.f) {
Jj = 0.8f * (Jj - Jold) + Jold;
} else if (Jj >= 0.f) {
Jj = 0.90f * (Jj - Jold) + Jold; // not zero ==>artifacts
}
- Jpro = (double)(Jj / 327.68f);
+ Jpro = (double) (Jj / 327.68f);
- if(Jpro < 1.) {
+ if (Jpro < 1.) {
Jpro = 1.;
}
@@ -808,29 +806,29 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
float redu = 20.f;
float reduc = 1.f;
- const Brightcurve& userColCurveB1 = static_cast(customColCurve1);
- userColCurveB1.Apply(Qq);
+ const Brightcurve& userColCurveB1 = static_cast (customColCurve1);
+ userColCurveB1.Apply (Qq);
- if(Qq > Qold) {
- if(Qq < 65535.f) {
- if(Qold < 327.68f * redu) {
+ if (Qq > Qold) {
+ if (Qq < 65535.f) {
+ if (Qold < 327.68f * redu) {
Qq = 0.25f * (Qq - Qold) + Qold; //divide sensibility
} else {
- reduc = LIM((100.f - Qold100) / (100.f - redu), 0.f, 1.f);
+ reduc = LIM ((100.f - Qold100) / (100.f - redu), 0.f, 1.f);
Qq = 0.25f * reduc * (Qq - Qold) + Qold; //reduct sensibility in highlights
}
}
- } else if(Qq > 10.f) {
+ } else if (Qq > 10.f) {
Qq = 0.5f * (Qq - Qold) + Qold;
} else if (Qq >= 0.f) {
Qq = 0.7f * (Qq - Qold) + Qold; // not zero ==>artifacts
}
- Qpro = (double)(Qq * (coef) / 327.68f);
- Jpro = 100.*(Qpro * Qpro) / ((4.0 / c) * (4.0 / c) * (aw + 4.0) * (aw + 4.0));
+ Qpro = (double) (Qq * (coef) / 327.68f);
+ Jpro = 100.* (Qpro * Qpro) / ((4.0 / c) * (4.0 / c) * (aw + 4.0) * (aw + 4.0));
t1B = true;
- if(Jpro < 1.) {
+ if (Jpro < 1.) {
Jpro = 1.;
}
@@ -849,35 +847,35 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
float Jold100 = (float) Jpro;
float redu = 25.f;
float reduc = 1.f;
- const Lightcurve& userColCurveJ2 = static_cast(customColCurve2);
- userColCurveJ2.Apply(Jj);
+ const Lightcurve& userColCurveJ2 = static_cast (customColCurve2);
+ userColCurveJ2.Apply (Jj);
- if(Jj > Jold) {
- if(Jj < 65535.f) {
- if(Jold < 327.68f * redu) {
+ if (Jj > Jold) {
+ if (Jj < 65535.f) {
+ if (Jold < 327.68f * redu) {
Jj = 0.3f * (Jj - Jold) + Jold; //divide sensibility
} else {
- reduc = LIM((100.f - Jold100) / (100.f - redu), 0.f, 1.f);
+ reduc = LIM ((100.f - Jold100) / (100.f - redu), 0.f, 1.f);
Jj = 0.3f * reduc * (Jj - Jold) + Jold; //reduct sensibility in highlights
}
}
- } else if(Jj > 10.f) {
- if(!t1L) {
+ } else if (Jj > 10.f) {
+ if (!t1L) {
Jj = 0.8f * (Jj - Jold) + Jold;
} else {
Jj = 0.4f * (Jj - Jold) + Jold;
}
} else if (Jj >= 0.f) {
- if(!t1L) {
+ if (!t1L) {
Jj = 0.90f * (Jj - Jold) + Jold; // not zero ==>artifacts
} else {
Jj = 0.5f * (Jj - Jold) + Jold;
}
}
- Jpro = (double)(Jj / 327.68f);
+ Jpro = (double) (Jj / 327.68f);
- if(Jpro < 1.) {
+ if (Jpro < 1.) {
Jpro = 1.;
}
@@ -890,40 +888,40 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
float redu = 20.f;
float reduc = 1.f;
- const Brightcurve& userColCurveB2 = static_cast(customColCurve2);
- userColCurveB2.Apply(Qq);
+ const Brightcurve& userColCurveB2 = static_cast (customColCurve2);
+ userColCurveB2.Apply (Qq);
- if(Qq > Qold) {
- if(Qq < 65535.f) {
- if(Qold < 327.68f * redu) {
+ if (Qq > Qold) {
+ if (Qq < 65535.f) {
+ if (Qold < 327.68f * redu) {
Qq = 0.25f * (Qq - Qold) + Qold; //divide sensibility
} else {
- reduc = LIM((100.f - Qold100) / (100.f - redu), 0.f, 1.f);
+ reduc = LIM ((100.f - Qold100) / (100.f - redu), 0.f, 1.f);
Qq = 0.25f * reduc * (Qq - Qold) + Qold; //reduct sensibility in highlights
}
}
- } else if(Qq > 10.f) {
+ } else if (Qq > 10.f) {
Qq = 0.5f * (Qq - Qold) + Qold;
} else if (Qq >= 0.f) {
Qq = 0.7f * (Qq - Qold) + Qold; // not zero ==>artifacts
}
- Qpro = (double)(Qq * (coef) / 327.68f);
- Jpro = 100.*(Qpro * Qpro) / ((4.0 / c) * (4.0 / c) * (aw + 4.0) * (aw + 4.0));
+ Qpro = (double) (Qq * (coef) / 327.68f);
+ Jpro = 100.* (Qpro * Qpro) / ((4.0 / c) * (4.0 / c) * (aw + 4.0) * (aw + 4.0));
t2B = true;
- if(t1L) { //to workaround the problem if we modify curve1-lightnees after curve2 brightness(the cat that bites its own tail!) in fact it's another type of curve only for this case
+ if (t1L) { //to workaround the problem if we modify curve1-lightnees after curve2 brightness(the cat that bites its own tail!) in fact it's another type of curve only for this case
coef = 2.f; //adapt Q to J approximation
Qq = (float) Qpro * coef;
Qold = Qq;
- const Lightcurve& userColCurveJ1 = static_cast(customColCurve1);
- userColCurveJ1.Apply(Qq);
+ const Lightcurve& userColCurveJ1 = static_cast (customColCurve1);
+ userColCurveJ1.Apply (Qq);
Qq = 0.1f * (Qq - Qold) + Qold; //approximative adaptation
- Qpro = (double)(Qq / coef);
- Jpro = 100.*(Qpro * Qpro) / ((4.0 / c) * (4.0 / c) * (aw + 4.0) * (aw + 4.0));
+ Qpro = (double) (Qq / coef);
+ Jpro = 100.* (Qpro * Qpro) / ((4.0 / c) * (4.0 / c) * (aw + 4.0) * (aw + 4.0));
}
- if(Jpro < 1.) {
+ if (Jpro < 1.) {
Jpro = 1.;
}
}
@@ -935,21 +933,21 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
double coef = 327.68 / parsat;
float Cc = (float) Cpro * coef;
float Ccold = Cc;
- const Chromacurve& userColCurve = static_cast(customColCurve3);
- userColCurve.Apply(Cc);
+ const Chromacurve& userColCurve = static_cast (customColCurve3);
+ userColCurve.Apply (Cc);
float dred = 55.f;
float protect_red = 30.0f;
float sk = 1;
float ko = 1.f / coef;
- Color::skinred(Jpro, hpro, Cc, Ccold, dred, protect_red, sk, rstprotection, ko, Cpro);
+ Color::skinred (Jpro, hpro, Cc, Ccold, dred, protect_red, sk, rstprotection, ko, Cpro);
- if(Jpro < 1. && Cpro > 12.) {
+ if (Jpro < 1. && Cpro > 12.) {
Cpro = 12.; //reduce artifacts by "pseudo gamut control CIECAM"
- } else if(Jpro < 2. && Cpro > 15.) {
+ } else if (Jpro < 2. && Cpro > 15.) {
Cpro = 15.;
- } else if(Jpro < 4. && Cpro > 30.) {
+ } else if (Jpro < 4. && Cpro > 30.) {
Cpro = 30.;
- } else if(Jpro < 7. && Cpro > 50.) {
+ } else if (Jpro < 7. && Cpro > 50.) {
Cpro = 50.;
}
@@ -959,18 +957,18 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
double coef = 327.68 / parsat;
float Ss = (float) spro * coef;
float Sold = Ss;
- const Saturcurve& userColCurve = static_cast(customColCurve3);
- userColCurve.Apply(Ss);
+ const Saturcurve& userColCurve = static_cast (customColCurve3);
+ userColCurve.Apply (Ss);
Ss = 0.6f * (Ss - Sold) + Sold; //divide sensibility saturation
- double coe = pow(fl, 0.25);
+ double coe = pow (fl, 0.25);
float dred = 100.f; // in C mode
float protect_red = 80.0f; // in C mode
- dred = 100.0 * sqrt((dred * coe) / Qpro);
- protect_red = 100.0 * sqrt((protect_red * coe) / Qpro);
+ dred = 100.0 * sqrt ((dred * coe) / Qpro);
+ protect_red = 100.0 * sqrt ((protect_red * coe) / Qpro);
int sk = 0;
float ko = 1.f / coef;
- Color::skinred(Jpro, hpro, Ss, Sold, dred, protect_red, sk, rstprotection, ko, spro);
- Qpro = ( 4.0 / c ) * sqrt( Jpro / 100.0 ) * ( aw + 4.0 ) ;
+ Color::skinred (Jpro, hpro, Ss, Sold, dred, protect_red, sk, rstprotection, ko, spro);
+ Qpro = ( 4.0 / c ) * sqrt ( Jpro / 100.0 ) * ( aw + 4.0 ) ;
Cpro = (spro * spro * Qpro) / (10000.0);
c1s = 1;
@@ -979,25 +977,25 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
double coef = 327.68 / parsat;
float Mm = (float) Mpro * coef;
float Mold = Mm;
- const Colorfcurve& userColCurve = static_cast(customColCurve3);
- userColCurve.Apply(Mm);
- double coe = pow(fl, 0.25);
+ const Colorfcurve& userColCurve = static_cast (customColCurve3);
+ userColCurve.Apply (Mm);
+ double coe = pow (fl, 0.25);
float dred = 100.f; //in C mode
float protect_red = 80.0f; // in C mode
dred *= coe; //in M mode
protect_red *= coe;
int sk = 0;
float ko = 1.f / coef;
- Color::skinred(Jpro, hpro, Mm, Mold, dred, protect_red, sk, rstprotection, ko, Mpro);
+ Color::skinred (Jpro, hpro, Mm, Mold, dred, protect_red, sk, rstprotection, ko, Mpro);
Cpro = Mpro / coe;
- if(Jpro < 1. && Mpro > 12.*coe) {
+ if (Jpro < 1. && Mpro > 12.*coe) {
Mpro = 12.*coe; //reduce artifacts by "pseudo gamut control CIECAM"
- } else if(Jpro < 2. && Mpro > 15.*coe) {
+ } else if (Jpro < 2. && Mpro > 15.*coe) {
Mpro = 15.*coe;
- } else if(Jpro < 4. && Mpro > 30.*coe) {
+ } else if (Jpro < 4. && Mpro > 30.*coe) {
Mpro = 30.*coe;
- } else if(Jpro < 7. && Mpro > 50.*coe) {
+ } else if (Jpro < 7. && Mpro > 50.*coe) {
Mpro = 50.*coe;
}
@@ -1007,17 +1005,17 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
}
//to retrieve the correct values of variables
- if(t2B && t1B) {
+ if (t2B && t1B) {
Jpro = (100.0 * Qpro * Qpro) / (wh * wh); // for brightness curve
}
- if(c1s == 1) {
- Qpro = ( 4.0 / c ) * sqrt( Jpro / 100.0 ) * ( aw + 4.0 ) ; //for saturation curve
+ if (c1s == 1) {
+ Qpro = ( 4.0 / c ) * sqrt ( Jpro / 100.0 ) * ( aw + 4.0 ) ; //for saturation curve
Cpro = (spro * spro * Qpro) / (10000.0);
}
- if(c1co == 1) {
- double coe = pow(fl, 0.25); // for colorfullness curve
+ if (c1co == 1) {
+ double coe = pow (fl, 0.25); // for colorfullness curve
Cpro = Mpro / coe;
}
@@ -1029,7 +1027,7 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
h = hpro;
s = spro;
- if(params->colorappearance.tonecie || settings->autocielab) { //use pointer for tonemapping with CIECAM and also sharpening , defringe, contrast detail
+ if (params->colorappearance.tonecie || settings->autocielab) { //use pointer for tonemapping with CIECAM and also sharpening , defringe, contrast detail
// if(params->colorappearance.tonecie || params->colorappearance.sharpcie){//use pointer for tonemapping with CIECAM and also sharpening , defringe, contrast detail
float Qred = ( 4.0 / c) * ( aw + 4.0 ); //estimate Q max if J=100.0
ncie->Q_p[i][j] = (float)Q + epsil; //epsil to avoid Q=0
@@ -1038,19 +1036,19 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
ncie->h_p[i][j] = (float)h;
ncie->C_p[i][j] = (float)C + epsil;
// ncie->s_p[i][j]=(float)s;
- ncie->sh_p[i][j] = (float) 32768.*(( 4.0 / c ) * sqrt( J / 100.0 ) * ( aw + 4.0 )) / Qred ;
+ ncie->sh_p[i][j] = (float) 32768.* (( 4.0 / c ) * sqrt ( J / 100.0 ) * ( aw + 4.0 )) / Qred ;
// ncie->ch_p[i][j]=(float) 327.68*C;
- if(ncie->Q_p[i][j] < minQ) {
+ if (ncie->Q_p[i][j] < minQ) {
minQ = ncie->Q_p[i][j]; //minima
}
- if(ncie->Q_p[i][j] > maxQ) {
+ if (ncie->Q_p[i][j] > maxQ) {
maxQ = ncie->Q_p[i][j]; //maxima
}
}
- if(!params->colorappearance.tonecie || !settings->autocielab || !params->epd.enabled ) {
+ if (!params->colorappearance.tonecie || !settings->autocielab || !params->epd.enabled ) {
// if(!params->epd.enabled || !params->colorappearance.tonecie || !settings->autocielab){
// if(!params->epd.enabled || !params->colorappearance.tonecie || !params->colorappearance.sharpcie){
@@ -1059,10 +1057,10 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
int libr = 0;
int colch = 0;
- if(curveMode == ColorAppearanceParams::TC_MODE_BRIGHT) {
+ if (curveMode == ColorAppearanceParams::TC_MODE_BRIGHT) {
brli = 70.0;
libr = 1;
- } else if(curveMode == ColorAppearanceParams::TC_MODE_LIGHT) {
+ } else if (curveMode == ColorAppearanceParams::TC_MODE_LIGHT) {
brli = 327.;
libr = 0;
}
@@ -1070,26 +1068,26 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
if (curveMode3 == ColorAppearanceParams::TC_MODE_CHROMA) {
chsacol = 327.;
colch = 0;
- } else if(curveMode3 == ColorAppearanceParams::TC_MODE_SATUR) {
+ } else if (curveMode3 == ColorAppearanceParams::TC_MODE_SATUR) {
chsacol = 450.0;
colch = 1;
- } else if(curveMode3 == ColorAppearanceParams::TC_MODE_COLORF) {
+ } else if (curveMode3 == ColorAppearanceParams::TC_MODE_COLORF) {
chsacol = 327.0;
colch = 2;
}
- if(ciedata) {
+ if (ciedata) {
// Data for J Q M s and C histograms
//update histogram
jp = true;
- if(pW != 1) { //only with improccoordinator
+ if (pW != 1) { //only with improccoordinator
int posl;
- if(libr == 1) {
- posl = CLIP((int)(Q * brli)); //40.0 to 100.0 approximative factor for Q - 327 for J
+ if (libr == 1) {
+ posl = CLIP ((int) (Q * brli)); //40.0 to 100.0 approximative factor for Q - 327 for J
} else { /*if(libr == 0)*/
- posl = CLIP((int)(J * brli)); //327 for J
+ posl = CLIP ((int) (J * brli)); //327 for J
}
hist16JCAM[posl]++;
@@ -1097,15 +1095,15 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
chropC = true;
- if(pW != 1) { //only with improccoordinator
+ if (pW != 1) { //only with improccoordinator
int posc;
- if(colch == 0) {
- posc = CLIP((int)(C * chsacol)); //450.0 approximative factor for s 320 for M
- } else if(colch == 1) {
- posc = CLIP((int)(s * chsacol));
+ if (colch == 0) {
+ posc = CLIP ((int) (C * chsacol)); //450.0 approximative factor for s 320 for M
+ } else if (colch == 1) {
+ posc = CLIP ((int) (s * chsacol));
} else { /*if(colch == 2)*/
- posc = CLIP((int)(M * chsacol));
+ posc = CLIP ((int) (M * chsacol));
}
hist16_CCAM[posc]++;
@@ -1115,42 +1113,42 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
double xx, yy, zz;
//double nj, nbbj, ncbj, flj, czj, dj, awj;
//process normal==> viewing
- Ciecam02::jch2xyz_ciecam02( xx, yy, zz,
- J, C, h,
- xw2, yw2, zw2,
- yb2, la2,
- f2, c2, nc2, gamu, nj, nbbj, ncbj, flj, czj, dj, awj);
+ Ciecam02::jch2xyz_ciecam02 ( xx, yy, zz,
+ J, C, h,
+ xw2, yw2, zw2,
+ yb2, la2,
+ f2, c2, nc2, gamu, nj, nbbj, ncbj, flj, czj, dj, awj);
x = (float)xx * 655.35;
y = (float)yy * 655.35;
z = (float)zz * 655.35;
float Ll, aa, bb;
//convert xyz=>lab
- Color::XYZ2Lab(x, y, z, Ll, aa, bb);
+ Color::XYZ2Lab (x, y, z, Ll, aa, bb);
lab->L[i][j] = Ll;
lab->a[i][j] = aa;
lab->b[i][j] = bb;
// gamut control in Lab mode; I must study how to do with cIECAM only
- if(gamu == 1) {
+ if (gamu == 1) {
float R, G, B;
float HH, Lprov1, Chprov1;
Lprov1 = lab->L[i][j] / 327.68f;
- Chprov1 = sqrt(SQR(lab->a[i][j] / 327.68f) + SQR(lab->b[i][j] / 327.68f));
- HH = atan2(lab->b[i][j], lab->a[i][j]);
+ Chprov1 = sqrt (SQR (lab->a[i][j] / 327.68f) + SQR (lab->b[i][j] / 327.68f));
+ HH = atan2 (lab->b[i][j], lab->a[i][j]);
#ifdef _DEBUG
bool neg = false;
bool more_rgb = false;
//gamut control : Lab values are in gamut
- Color::gamutLchonly(HH, Lprov1, Chprov1, R, G, B, wip, highlight, 0.15f, 0.96f, neg, more_rgb);
+ Color::gamutLchonly (HH, Lprov1, Chprov1, R, G, B, wip, highlight, 0.15f, 0.96f, neg, more_rgb);
#else
//gamut control : Lab values are in gamut
- Color::gamutLchonly(HH, Lprov1, Chprov1, R, G, B, wip, highlight, 0.15f, 0.96f);
+ Color::gamutLchonly (HH, Lprov1, Chprov1, R, G, B, wip, highlight, 0.15f, 0.96f);
#endif
lab->L[i][j] = Lprov1 * 327.68f;
- lab->a[i][j] = 327.68f * Chprov1 * cos(HH);
- lab->b[i][j] = 327.68f * Chprov1 * sin(HH);
+ lab->a[i][j] = 327.68f * Chprov1 * cos (HH);
+ lab->b[i][j] = 327.68f * Chprov1 * sin (HH);
}
}
@@ -1158,26 +1156,26 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
}
// End of parallelization
- if(!params->epd.enabled || !params->colorappearance.tonecie || !settings->autocielab) { //normal
+ if (!params->epd.enabled || !params->colorappearance.tonecie || !settings->autocielab) { //normal
//if(!params->epd.enabled || !params->colorappearance.tonecie || !params->colorappearance.sharpcie){//normal
- if(ciedata) {
+ if (ciedata) {
//update histogram J
- if(pW != 1) { //only with improccoordinator
+ if (pW != 1) { //only with improccoordinator
for (int i = 0; i < 32768; i++) { //
if (jp) {
float hval = dLcurve[i];
- int hi = (int)(255.0 * CLIPD(hval)); //
+ int hi = (int) (255.0 * CLIPD (hval)); //
histLCAM[hi] += hist16JCAM[i] ;
}
}
}
- if(pW != 1) { //only with improccoordinator
+ if (pW != 1) { //only with improccoordinator
for (int i = 0; i < 48000; i++) { //
if (chropC) {
float hvalc = dCcurve[i];
- int hic = (int)(255.0 * CLIPD(hvalc)); //
+ int hic = (int) (255.0 * CLIPD (hvalc)); //
histCCAM[hic] += hist16_CCAM[i] ;
}
}
@@ -1189,37 +1187,35 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
if (settings->verbose) {
t2e.set();
- printf("CIECAM02 performed in %d usec:\n", t2e.etime(t1e));
+ printf ("CIECAM02 performed in %d usec:\n", t2e.etime (t1e));
// printf("minc=%f maxc=%f minj=%f maxj=%f\n",minc,maxc,minj,maxj);
}
#endif
- if(settings->autocielab) {
+ if (settings->autocielab) {
//if(params->colorappearance.sharpcie) {
//all this treatments reduce artifacts, but can lead to slightly different results
- if(params->defringe.enabled) if(execsharp) {
+ if (params->defringe.enabled) if (execsharp) {
ImProcFunctions::defringecam (ncie); //
}
//if(params->dirpyrequalizer.enabled) if(execsharp) {
- if(params->dirpyrequalizer.enabled) {
- if(params->dirpyrequalizer.gamutlab /*&& execsharp*/) {
- float b_l = static_cast(params->dirpyrequalizer.hueskin.value[0]) / 100.0f;
- float t_l = static_cast(params->dirpyrequalizer.hueskin.value[1]) / 100.0f;
- float b_r = static_cast(params->dirpyrequalizer.hueskin.value[2]) / 100.0f;
- float t_r = static_cast(params->dirpyrequalizer.hueskin.value[3]) / 100.0f;
- int choice = 0;
+ if (params->dirpyrequalizer.enabled) {
+ if (params->dirpyrequalizer.gamutlab /*&& execsharp*/) {
+ float b_l = static_cast (params->dirpyrequalizer.hueskin.value[0]) / 100.0f;
+ float t_l = static_cast (params->dirpyrequalizer.hueskin.value[1]) / 100.0f;
+ float b_r = static_cast (params->dirpyrequalizer.hueskin.value[2]) / 100.0f;
+ float t_r = static_cast (params->dirpyrequalizer.hueskin.value[3]) / 100.0f;
- bool alread = false;
float artifact = (float) settings->artifact_cbdl;
- if(artifact > 6.f) {
+ if (artifact > 6.f) {
artifact = 6.f;
}
- if(artifact < 0.f) {
+ if (artifact < 0.f) {
artifact = 1.f;
}
@@ -1227,43 +1223,42 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
float chrom = 50.f;
{
ImProcFunctions::badpixcam (ncie, artifact, 5, 2 , b_l, t_l, t_r, b_r, params->dirpyrequalizer.skinprotect , chrom, hotbad); //enabled remove artifacts for cbDL
- alread = true;
}
}
}
- if(params->colorappearance.badpixsl > 0) if(execsharp) {
+ if (params->colorappearance.badpixsl > 0) if (execsharp) {
int mode = params->colorappearance.badpixsl;
ImProcFunctions::badpixcam (ncie, 3.4, 5, mode, 0, 0, 0, 0, 0, 0, 1);//for bad pixels CIECAM
}
- if (params->sharpenMicro.enabled)if(execsharp) {
- ImProcFunctions::MLmicrocontrastcam(ncie);
+ if (params->sharpenMicro.enabled)if (execsharp) {
+ ImProcFunctions::MLmicrocontrastcam (ncie);
}
- if(params->sharpening.enabled)
- if(execsharp) {
+ if (params->sharpening.enabled)
+ if (execsharp) {
float **buffer = lab->L; // We can use the L-buffer from lab as buffer to save some memory
ImProcFunctions::sharpeningcam (ncie, buffer); // sharpening adapted to CIECAM
}
//if(params->dirpyrequalizer.enabled) if(execsharp) {
- if(params->dirpyrequalizer.enabled /*&& (execsharp)*/) {
- float b_l = static_cast(params->dirpyrequalizer.hueskin.value[0]) / 100.0f;
- float t_l = static_cast(params->dirpyrequalizer.hueskin.value[1]) / 100.0f;
- float b_r = static_cast(params->dirpyrequalizer.hueskin.value[2]) / 100.0f;
- float t_r = static_cast(params->dirpyrequalizer.hueskin.value[3]) / 100.0f;
+ if (params->dirpyrequalizer.enabled /*&& (execsharp)*/) {
+ float b_l = static_cast (params->dirpyrequalizer.hueskin.value[0]) / 100.0f;
+ float t_l = static_cast (params->dirpyrequalizer.hueskin.value[1]) / 100.0f;
+ float b_r = static_cast (params->dirpyrequalizer.hueskin.value[2]) / 100.0f;
+ float t_r = static_cast (params->dirpyrequalizer.hueskin.value[3]) / 100.0f;
int choice = 0; //not disabled in case of ! always 0
// if (params->dirpyrequalizer.algo=="FI") choice=0;
// else if(params->dirpyrequalizer.algo=="LA") choice=1;
- if(rtt == 1) {
- dirpyr_equalizercam(ncie, ncie->sh_p, ncie->sh_p, ncie->W, ncie->H, ncie->h_p, ncie->C_p, params->dirpyrequalizer.mult, params->dirpyrequalizer.threshold, params->dirpyrequalizer.skinprotect, true, params->dirpyrequalizer.gamutlab, b_l, t_l, t_r, b_r, choice, scalecd); //contrast by detail adapted to CIECAM
+ if (rtt == 1) {
+ dirpyr_equalizercam (ncie, ncie->sh_p, ncie->sh_p, ncie->W, ncie->H, ncie->h_p, ncie->C_p, params->dirpyrequalizer.mult, params->dirpyrequalizer.threshold, params->dirpyrequalizer.skinprotect, true, params->dirpyrequalizer.gamutlab, b_l, t_l, t_r, b_r, choice, scalecd); //contrast by detail adapted to CIECAM
}
}
float Qredi = ( 4.0 / c_) * ( a_w + 4.0 );
- float co_e = (pow(f_l, 0.25f));
+ float co_e = (pow (f_l, 0.25f));
#ifndef _DEBUG
#pragma omp parallel default(shared) firstprivate(height,width, Qredi,a_w,c_)
@@ -1277,18 +1272,18 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
for (int j = 0; j < width; j++) {
float interm = Qredi * ncie->sh_p[i][j] / (32768.f);
ncie->J_p[i][j] = 100.0 * interm * interm / ((a_w + 4.) * (a_w + 4.) * (4. / c_) * (4. / c_));
- ncie->Q_p[i][j] = ( 4.0 / c_) * ( a_w + 4.0 ) * sqrt(ncie->J_p[i][j] / 100.f);
+ ncie->Q_p[i][j] = ( 4.0 / c_) * ( a_w + 4.0 ) * sqrt (ncie->J_p[i][j] / 100.f);
ncie->M_p[i][j] = ncie->C_p[i][j] * co_e;
}
}
}
- if((params->colorappearance.tonecie || (params->colorappearance.tonecie && params->epd.enabled)) || (params->sharpening.enabled && settings->autocielab)
+ if ((params->colorappearance.tonecie || (params->colorappearance.tonecie && params->epd.enabled)) || (params->sharpening.enabled && settings->autocielab)
|| (params->dirpyrequalizer.enabled && settings->autocielab) || (params->defringe.enabled && settings->autocielab) || (params->sharpenMicro.enabled && settings->autocielab)
|| (params->colorappearance.badpixsl > 0 && settings->autocielab)) {
- if(params->epd.enabled && params->colorappearance.tonecie && algepd) {
- ImProcFunctions::EPDToneMapCIE(ncie, a_w, c_, w_h, width, height, begh, endh, minQ, maxQ, Iterates, scale );
+ if (params->epd.enabled && params->colorappearance.tonecie && algepd) {
+ ImProcFunctions::EPDToneMapCIE (ncie, a_w, c_, w_h, width, height, begh, endh, minQ, maxQ, Iterates, scale );
}
//EPDToneMapCIE adapted to CIECAM
@@ -1317,11 +1312,11 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
double xx, yy, zz;
float x, y, z;
const float eps = 0.0001;
- float co_e = (pow(f_l, 0.25f)) + eps;
+ float co_e = (pow (f_l, 0.25f)) + eps;
// if(params->epd.enabled) ncie->J_p[i][j]=(100.0* ncie->Q_p[i][j]*ncie->Q_p[i][j])/(w_h*w_h);
- if(params->epd.enabled) {
- ncie->J_p[i][j] = (100.0 * ncie->Q_p[i][j] * ncie->Q_p[i][j]) / SQR((4. / c) * (aw + 4.));
+ if (params->epd.enabled) {
+ ncie->J_p[i][j] = (100.0 * ncie->Q_p[i][j] * ncie->Q_p[i][j]) / SQR ((4. / c) * (aw + 4.));
}
ncie->C_p[i][j] = (ncie->M_p[i][j]) / co_e;
@@ -1332,10 +1327,10 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
int colch = 0;
float sa_t;
- if(curveMode == ColorAppearanceParams::TC_MODE_BRIGHT) {
+ if (curveMode == ColorAppearanceParams::TC_MODE_BRIGHT) {
brli = 70.0;
libr = 1;
- } else if(curveMode == ColorAppearanceParams::TC_MODE_LIGHT) {
+ } else if (curveMode == ColorAppearanceParams::TC_MODE_LIGHT) {
brli = 327.;
libr = 0;
}
@@ -1343,26 +1338,26 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
if (curveMode3 == ColorAppearanceParams::TC_MODE_CHROMA) {
chsacol = 327.;
colch = 0;
- } else if(curveMode3 == ColorAppearanceParams::TC_MODE_SATUR) {
+ } else if (curveMode3 == ColorAppearanceParams::TC_MODE_SATUR) {
chsacol = 450.0;
colch = 1;
- } else if(curveMode3 == ColorAppearanceParams::TC_MODE_COLORF) {
+ } else if (curveMode3 == ColorAppearanceParams::TC_MODE_COLORF) {
chsacol = 327.0;
colch = 2;
}
- if(ciedata) {
+ if (ciedata) {
// Data for J Q M s and C histograms
//update histogram
jp = true;
- if(pW != 1) { //only with improccoordinator
+ if (pW != 1) { //only with improccoordinator
int posl;
- if(libr == 1) {
- posl = CLIP((int)(ncie->Q_p[i][j] * brli)); //40.0 to 100.0 approximative factor for Q - 327 for J
+ if (libr == 1) {
+ posl = CLIP ((int) (ncie->Q_p[i][j] * brli)); //40.0 to 100.0 approximative factor for Q - 327 for J
} else { /*if(libr == 0)*/
- posl = CLIP((int)(ncie->J_p[i][j] * brli)); //327 for J
+ posl = CLIP ((int) (ncie->J_p[i][j] * brli)); //327 for J
}
hist16JCAM[posl]++;
@@ -1370,16 +1365,16 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
chropC = true;
- if(pW != 1) { //only with improccoordinator
+ if (pW != 1) { //only with improccoordinator
int posc;
- if(colch == 0) {
- posc = CLIP((int)(ncie->C_p[i][j] * chsacol)); //450.0 approximative factor for s 320 for M
- } else if(colch == 1) {
- sa_t = 100.f * sqrt(ncie->C_p[i][j] / ncie->Q_p[i][j]); //Q_p always > 0
- posc = CLIP((int)(sa_t * chsacol));
+ if (colch == 0) {
+ posc = CLIP ((int) (ncie->C_p[i][j] * chsacol)); //450.0 approximative factor for s 320 for M
+ } else if (colch == 1) {
+ sa_t = 100.f * sqrt (ncie->C_p[i][j] / ncie->Q_p[i][j]); //Q_p always > 0
+ posc = CLIP ((int) (sa_t * chsacol));
} else { /*if(colch == 2)*/
- posc = CLIP((int)(ncie->M_p[i][j] * chsacol));
+ posc = CLIP ((int) (ncie->M_p[i][j] * chsacol));
}
hist16_CCAM[posc]++;
@@ -1388,41 +1383,41 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
//end histograms
// double nd, nbbd, ncbd, fld, czd, dd, awd;
- Ciecam02::jch2xyz_ciecam02( xx, yy, zz,
- ncie->J_p[i][j], ncie->C_p[i][j], ncie->h_p[i][j],
- xw2, yw2, zw2,
- yb2, la2,
- f2, c2, nc2, gamu, nj, nbbj, ncbj, flj, czj, dj, awj);
+ Ciecam02::jch2xyz_ciecam02 ( xx, yy, zz,
+ ncie->J_p[i][j], ncie->C_p[i][j], ncie->h_p[i][j],
+ xw2, yw2, zw2,
+ yb2, la2,
+ f2, c2, nc2, gamu, nj, nbbj, ncbj, flj, czj, dj, awj);
x = (float)xx * 655.35;
y = (float)yy * 655.35;
z = (float)zz * 655.35;
float Ll, aa, bb;
//convert xyz=>lab
- Color::XYZ2Lab(x, y, z, Ll, aa, bb);
+ Color::XYZ2Lab (x, y, z, Ll, aa, bb);
lab->L[i][j] = Ll;
lab->a[i][j] = aa;
lab->b[i][j] = bb;
- if(gamu == 1) {
+ if (gamu == 1) {
float R, G, B;
float HH, Lprov1, Chprov1;
Lprov1 = lab->L[i][j] / 327.68f;
- Chprov1 = sqrt(SQR(lab->a[i][j] / 327.68f) + SQR(lab->b[i][j] / 327.68f));
- HH = atan2(lab->b[i][j], lab->a[i][j]);
+ Chprov1 = sqrt (SQR (lab->a[i][j] / 327.68f) + SQR (lab->b[i][j] / 327.68f));
+ HH = atan2 (lab->b[i][j], lab->a[i][j]);
#ifdef _DEBUG
bool neg = false;
bool more_rgb = false;
//gamut control : Lab values are in gamut
- Color::gamutLchonly(HH, Lprov1, Chprov1, R, G, B, wipa, highlight, 0.15f, 0.96f, neg, more_rgb);
+ Color::gamutLchonly (HH, Lprov1, Chprov1, R, G, B, wipa, highlight, 0.15f, 0.96f, neg, more_rgb);
#else
//gamut control : Lab values are in gamut
- Color::gamutLchonly(HH, Lprov1, Chprov1, R, G, B, wipa, highlight, 0.15f, 0.96f);
+ Color::gamutLchonly (HH, Lprov1, Chprov1, R, G, B, wipa, highlight, 0.15f, 0.96f);
#endif
lab->L[i][j] = Lprov1 * 327.68f;
- lab->a[i][j] = 327.68f * Chprov1 * cos(HH);
- lab->b[i][j] = 327.68f * Chprov1 * sin(HH);
+ lab->a[i][j] = 327.68f * Chprov1 * cos (HH);
+ lab->b[i][j] = 327.68f * Chprov1 * sin (HH);
}
}
@@ -1431,24 +1426,24 @@ void ImProcFunctions::ciecam_02 (CieImage* ncie, double adap, int begh, int endh
//end parallelization
//show CIECAM histograms
- if(ciedata) {
+ if (ciedata) {
//update histogram J and Q
- if(pW != 1) { //only with improccoordinator
+ if (pW != 1) { //only with improccoordinator
for (int i = 0; i < 32768; i++) { //
if (jp) {
float hval = dLcurve[i];
- int hi = (int)(255.0 * CLIPD(hval)); //
+ int hi = (int) (255.0 * CLIPD (hval)); //
histLCAM[hi] += hist16JCAM[i] ;
}
}
}
//update color histogram M,s,C
- if(pW != 1) { //only with improccoordinator
+ if (pW != 1) { //only with improccoordinator
for (int i = 0; i < 48000; i++) { //
if (chropC) {
float hvalc = dCcurve[i];
- int hic = (int)(255.0 * CLIPD(hvalc)); //
+ int hic = (int) (255.0 * CLIPD (hvalc)); //
histCCAM[hic] += hist16_CCAM[i] ;
}
}
@@ -1467,7 +1462,7 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
const ColorAppearance & customColCurve1, const ColorAppearance & customColCurve2, const ColorAppearance & customColCurve3,
LUTu & histLCAM, LUTu & histCCAM, LUTf & CAMBrightCurveJ, LUTf & CAMBrightCurveQ, float &mean, int Iterates, int scale, bool execsharp, float &d, int scalecd, int rtt)
{
- if(params->colorappearance.enabled) {
+ if (params->colorappearance.enabled) {
#ifdef _DEBUG
MyTime t1e, t2e;
@@ -1478,10 +1473,10 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
LUTu hist16JCAM;
LUTu hist16_CCAM;
- if(pW != 1 && params->colorappearance.datacie) { //only with improccoordinator
- hist16JCAM(32768);
+ if (pW != 1 && params->colorappearance.datacie) { //only with improccoordinator
+ hist16JCAM (32768);
hist16JCAM.clear();
- hist16_CCAM(48000);
+ hist16_CCAM (48000);
hist16_CCAM.clear();
}
@@ -1492,36 +1487,36 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
float Yw;
Yw = 1.0;
double Xw, Zw;
- float f, nc, yb, la, c, xw, yw, zw, f2, c2, nc2, yb2;
+ float f, nc, yb = 0.f, la, c, xw, yw, zw, f2 = 1.f, c2 = 1.f, nc2 = 1.f, yb2;
float fl, n, nbb, ncb, aw; //d
float xwd, ywd, zwd;
int alg = 0;
bool algepd = false;
const bool epdEnabled = params->epd.enabled;
- bool ciedata = (params->colorappearance.datacie && pW != 1) && !((params->colorappearance.tonecie && (epdEnabled)) || (params->sharpening.enabled && settings->autocielab && execsharp)
+ bool ciedata = (params->colorappearance.datacie && pW != 1) && ! ((params->colorappearance.tonecie && (epdEnabled)) || (params->sharpening.enabled && settings->autocielab && execsharp)
|| (params->dirpyrequalizer.enabled && settings->autocielab) || (params->defringe.enabled && settings->autocielab) || (params->sharpenMicro.enabled && settings->autocielab)
|| (params->impulseDenoise.enabled && settings->autocielab) || (params->colorappearance.badpixsl > 0 && settings->autocielab));
ColorTemp::temp2mulxyz (params->wb.temperature, params->wb.green, params->wb.method, Xw, Zw); //compute white Xw Yw Zw : white current WB
//viewing condition for surround
- if(params->colorappearance.surround == "Average") {
+ if (params->colorappearance.surround == "Average") {
f = 1.00f;
c = 0.69f;
nc = 1.00f;
f2 = 1.0f, c2 = 0.69f, nc2 = 1.0f;
- } else if(params->colorappearance.surround == "Dim") {
+ } else if (params->colorappearance.surround == "Dim") {
f2 = 0.9f;
c2 = 0.59f;
nc2 = 0.9f;
f = 1.0f, c = 0.69f, nc = 1.0f;
- } else if(params->colorappearance.surround == "Dark") {
+ } else if (params->colorappearance.surround == "Dark") {
f2 = 0.8f;
c2 = 0.525f;
nc2 = 0.8f;
f = 1.0f, c = 0.69f, nc = 1.0f;
- } else if(params->colorappearance.surround == "ExtremelyDark") {
+ } else if (params->colorappearance.surround == "ExtremelyDark") {
f2 = 0.8f;
c2 = 0.41f;
nc2 = 0.8f;
@@ -1529,7 +1524,7 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
}
//scene condition for surround
- if(params->colorappearance.surrsource) {
+ if (params->colorappearance.surrsource) {
f = 0.85f; // if user => source image has surround very dark
c = 0.55f;
nc = 0.85f;
@@ -1538,9 +1533,9 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
//with which algorithm
if (params->colorappearance.algo == "JC") {
alg = 0;
- } else if(params->colorappearance.algo == "JS") {
+ } else if (params->colorappearance.algo == "JS") {
alg = 1;
- } else if(params->colorappearance.algo == "QM") {
+ } else if (params->colorappearance.algo == "QM") {
alg = 2;
algepd = true;
} else { /*if(params->colorappearance.algo == "ALL")*/
@@ -1549,31 +1544,31 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
}
//settings white point of output device - or illuminant viewing
- if(settings->viewingdevice == 0) {
+ if (settings->viewingdevice == 0) {
xwd = 96.42f; //5000K
ywd = 100.0f;
zwd = 82.52f;
- } else if(settings->viewingdevice == 1) {
+ } else if (settings->viewingdevice == 1) {
xwd = 95.68f; //5500
ywd = 100.0f;
zwd = 92.15f;
- } else if(settings->viewingdevice == 2) {
+ } else if (settings->viewingdevice == 2) {
xwd = 95.24f; //6000
ywd = 100.0f;
zwd = 100.81f;
- } else if(settings->viewingdevice == 3) {
+ } else if (settings->viewingdevice == 3) {
xwd = 95.04f; //6500
ywd = 100.0f;
zwd = 108.88f;
- } else if(settings->viewingdevice == 4) {
+ } else if (settings->viewingdevice == 4) {
xwd = 109.85f; //tungsten
ywd = 100.0f;
zwd = 35.58f;
- } else if(settings->viewingdevice == 5) {
+ } else if (settings->viewingdevice == 5) {
xwd = 99.18f; //fluo F2
ywd = 100.0f;
zwd = 67.39f;
- } else if(settings->viewingdevice == 6) {
+ } else if (settings->viewingdevice == 6) {
xwd = 95.04f; //fluo F7
ywd = 100.0f;
zwd = 108.75f;
@@ -1585,32 +1580,32 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
//settings mean Luminance Y of output device or viewing
- if(settings->viewingdevicegrey == 0) {
+ if (settings->viewingdevicegrey == 0) {
yb2 = 5.0f;
- } else if(settings->viewingdevicegrey == 1) {
+ } else if (settings->viewingdevicegrey == 1) {
yb2 = 10.0f;
- } else if(settings->viewingdevicegrey == 2) {
+ } else if (settings->viewingdevicegrey == 2) {
yb2 = 15.0f;
- } else if(settings->viewingdevicegrey == 3) {
+ } else if (settings->viewingdevicegrey == 3) {
yb2 = 18.0f;
- } else if(settings->viewingdevicegrey == 4) {
+ } else if (settings->viewingdevicegrey == 4) {
yb2 = 23.0f;
- } else if(settings->viewingdevicegrey == 5) {
+ } else if (settings->viewingdevicegrey == 5) {
yb2 = 30.0f;
} else { /* if(settings->viewingdevicegrey == 6)*/
yb2 = 40.0f;
}
//La and la2 = ambiant luminosity scene and viewing
- la = float(params->colorappearance.adapscen);
+ la = float (params->colorappearance.adapscen);
- if(pwb == 2) {
- if(params->colorappearance.autoadapscen) {
+ if (pwb == 2) {
+ if (params->colorappearance.autoadapscen) {
la = adap;
}
}
- const float la2 = float(params->colorappearance.adaplum);
+ const float la2 = float (params->colorappearance.adaplum);
// level of adaptation
const float deg = (params->colorappearance.degree) / 100.0f;
@@ -1619,33 +1614,33 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
//algoritm's params
float chr = 0.f;
- if(alg == 0 || alg == 3) {
+ if (alg == 0 || alg == 3) {
chr = params->colorappearance.chroma;
- if(chr == -100.0f) {
+ if (chr == -100.0f) {
chr = -99.8f;
}
}
float schr = 0.f;
- if(alg == 3 || alg == 1) {
+ if (alg == 3 || alg == 1) {
schr = params->colorappearance.schroma;
- if(schr > 0.0) {
+ if (schr > 0.0) {
schr = schr / 2.0f; //divide sensibility for saturation
}
- if(alg == 3) {
- if(schr == -100.0f) {
+ if (alg == 3) {
+ if (schr == -100.0f) {
schr = -99.f;
}
- if(schr == 100.0f) {
+ if (schr == 100.0f) {
schr = 98.f;
}
} else {
- if(schr == -100.0f) {
+ if (schr == -100.0f) {
schr = -99.8f;
}
}
@@ -1653,14 +1648,14 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
float mchr = 0.f;
- if(alg == 3 || alg == 2) {
+ if (alg == 3 || alg == 2) {
mchr = params->colorappearance.mchroma;
- if(mchr == -100.0f) {
+ if (mchr == -100.0f) {
mchr = -99.8f ;
}
- if(mchr == 100.0f) {
+ if (mchr == 100.0f) {
mchr = 99.9f;
}
}
@@ -1670,35 +1665,21 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
// extracting datas from 'params' to avoid cache flush (to be confirmed)
const ColorAppearanceParams::eTCModeId curveMode = params->colorappearance.curveMode;
- const bool hasColCurve1 = bool(customColCurve1);
- bool t1L = false;
- bool t1B = false;
-
- if (hasColCurve1 && curveMode == ColorAppearanceParams::TC_MODE_LIGHT) {
- t1L = true;
- }
-
- if(hasColCurve1 && curveMode == ColorAppearanceParams::TC_MODE_BRIGHT) {
- t1B = true;
- }
+ const bool hasColCurve1 = bool (customColCurve1);
+ const bool t1L = hasColCurve1 && curveMode == ColorAppearanceParams::TC_MODE_LIGHT;
const ColorAppearanceParams::eTCModeId curveMode2 = params->colorappearance.curveMode2;
- const bool hasColCurve2 = bool(customColCurve2);
- bool t2B = false;
-
- if(hasColCurve2 && curveMode2 == ColorAppearanceParams::TC_MODE_BRIGHT) {
- t2B = true;
- }
+ const bool hasColCurve2 = bool (customColCurve2);
const ColorAppearanceParams::eCTCModeId curveMode3 = params->colorappearance.curveMode3;
- const bool hasColCurve3 = bool(customColCurve3);
+ const bool hasColCurve3 = bool (customColCurve3);
bool needJ = (alg == 0 || alg == 1 || alg == 3);
bool needQ = (alg == 2 || alg == 3);
LUTu hist16J;
LUTu hist16Q;
- if((needJ && CAMBrightCurveJ.dirty) || (needQ && CAMBrightCurveQ.dirty) || (std::isnan(mean) && settings->viewinggreySc != 0)) {
+ if ((needJ && CAMBrightCurveJ.dirty) || (needQ && CAMBrightCurveQ.dirty) || (std::isnan (mean) && settings->viewinggreySc != 0)) {
if (needJ) {
hist16J (32768);
@@ -1713,7 +1694,7 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
float sum = 0.f;
#ifdef _OPENMP
- const int numThreads = min(max(width * height / 65536, 1), omp_get_max_threads());
+ const int numThreads = min (max (width * height / 65536, 1), omp_get_max_threads());
#pragma omp parallel num_threads(numThreads) if(numThreads>1)
#endif
{
@@ -1721,12 +1702,12 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
LUTu hist16Qthr;
if (needJ) {
- hist16Jthr(hist16J.getSize());
+ hist16Jthr (hist16J.getSize());
hist16Jthr.clear();
}
if (needQ) {
- hist16Qthr(hist16Q.getSize());
+ hist16Qthr (hist16Q.getSize());
hist16Qthr.clear();
}
@@ -1737,10 +1718,10 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
float currL = lab->L[i][j] / 327.68f;
float koef; //rough correspondence between L and J
- if(currL > 50.f) {
- if(currL > 70.f) {
- if(currL > 80.f) {
- if(currL > 85.f) {
+ if (currL > 50.f) {
+ if (currL > 70.f) {
+ if (currL > 80.f) {
+ if (currL > 85.f) {
koef = 0.97f;
} else {
koef = 0.93f;
@@ -1756,9 +1737,9 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
}
}
} else {
- if(currL > 10.f) {
- if(currL > 20.f) {
- if(currL > 40.f) {
+ if (currL > 10.f) {
+ if (currL > 20.f) {
+ if (currL > 40.f) {
koef = 0.75f;
} else {
koef = 0.7f;
@@ -1772,11 +1753,11 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
}
if (needJ) {
- hist16Jthr[(int)((koef * lab->L[i][j]))]++; //evaluate histogram luminance L # J
+ hist16Jthr[ (int) ((koef * lab->L[i][j]))]++; //evaluate histogram luminance L # J
}
if (needQ) {
- hist16Qthr[(int) (sqrtf((koef * (lab->L[i][j])) * 32768.f))]++; //for brightness Q : approximation for Q=wh*sqrt(J/100) J not equal L
+ hist16Qthr[ (int) (sqrtf ((koef * (lab->L[i][j])) * 32768.f))]++; //for brightness Q : approximation for Q=wh*sqrt(J/100) J not equal L
}
sum += koef * lab->L[i][j]; //evaluate mean J to calculate Yb
@@ -1784,17 +1765,17 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
#pragma omp critical
{
- if(needJ) {
+ if (needJ) {
hist16J += hist16Jthr;
}
- if(needQ) {
+ if (needQ) {
hist16Q += hist16Qthr;
}
}
- if(std::isnan(mean)) {
+ if (std::isnan (mean)) {
mean = (sum / ((height) * width)) / 327.68f; //for Yb for all image...if one day "pipette" we can adapt Yb for each zone
}
}
@@ -1804,31 +1785,31 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
//evaluate lightness, contrast
}
- if(settings->viewinggreySc == 0) { //auto
+ if (settings->viewinggreySc == 0) { //auto
if (mean < 15.f) {
yb = 3.0f;
- } else if(mean < 30.f) {
+ } else if (mean < 30.f) {
yb = 5.0f;
- } else if(mean < 40.f) {
+ } else if (mean < 40.f) {
yb = 10.0f;
- } else if(mean < 45.f) {
+ } else if (mean < 45.f) {
yb = 15.0f;
- } else if(mean < 50.f) {
+ } else if (mean < 50.f) {
yb = 18.0f;
- } else if(mean < 55.f) {
+ } else if (mean < 55.f) {
yb = 23.0f;
- } else if(mean < 60.f) {
+ } else if (mean < 60.f) {
yb = 30.0f;
- } else if(mean < 70.f) {
+ } else if (mean < 70.f) {
yb = 40.0f;
- } else if(mean < 80.f) {
+ } else if (mean < 80.f) {
yb = 60.0f;
- } else if(mean < 90.f) {
+ } else if (mean < 90.f) {
yb = 80.0f;
} else {
yb = 90.0f;
}
- } else if(settings->viewinggreySc == 1) {
+ } else if (settings->viewinggreySc == 1) {
yb = 18.0f; //fixed
}
@@ -1841,7 +1822,7 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
float xw1, yw1, zw1, xw2, yw2, zw2;
// settings of WB: scene and viewing
- if(params->colorappearance.wbmodel == "RawT") {
+ if (params->colorappearance.wbmodel == "RawT") {
xw1 = 96.46f; //use RT WB; CAT 02 is used for output device (see prefreneces)
yw1 = 100.0f;
zw1 = 82.445f;
@@ -1858,12 +1839,12 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
}
float cz, wh, pfl;
- Ciecam02::initcam1float(gamu, yb, pilot, f, la, xw, yw, zw, n, d, nbb, ncb, cz, aw, wh, pfl, fl, c);
- const float pow1 = pow_F( 1.64f - pow_F( 0.29f, n ), 0.73f );
+ Ciecam02::initcam1float (gamu, yb, pilot, f, la, xw, yw, zw, n, d, nbb, ncb, cz, aw, wh, pfl, fl, c);
+ const float pow1 = pow_F ( 1.64f - pow_F ( 0.29f, n ), 0.73f );
float nj, dj, nbbj, ncbj, czj, awj, flj;
- Ciecam02::initcam2float(gamu, yb2, f2, la2, xw2, yw2, zw2, nj, dj, nbbj, ncbj, czj, awj, flj);
+ Ciecam02::initcam2float (gamu, yb2, f2, la2, xw2, yw2, zw2, nj, dj, nbbj, ncbj, czj, awj, flj);
const float reccmcz = 1.f / (c2 * czj);
- const float pow1n = pow_F( 1.64f - pow_F( 0.29f, nj ), 0.73f );
+ const float pow1n = pow_F ( 1.64f - pow_F ( 0.29f, nj ), 0.73f );
const float epsil = 0.0001f;
const float w_h = wh + epsil;
@@ -1871,19 +1852,19 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
const float a_w = aw;
const float c_ = c;
const float f_l = fl;
- const float coe = pow_F(fl, 0.25f);
+ const float coe = pow_F (fl, 0.25f);
const float QproFactor = ( 0.4f / c ) * ( aw + 4.0f ) ;
- const bool LabPassOne = !((params->colorappearance.tonecie && (epdEnabled)) || (params->sharpening.enabled && settings->autocielab && execsharp)
- || (params->dirpyrequalizer.enabled && settings->autocielab) || (params->defringe.enabled && settings->autocielab) || (params->sharpenMicro.enabled && settings->autocielab)
- || (params->impulseDenoise.enabled && settings->autocielab) || (params->colorappearance.badpixsl > 0 && settings->autocielab));
+ const bool LabPassOne = ! ((params->colorappearance.tonecie && (epdEnabled)) || (params->sharpening.enabled && settings->autocielab && execsharp)
+ || (params->dirpyrequalizer.enabled && settings->autocielab) || (params->defringe.enabled && settings->autocielab) || (params->sharpenMicro.enabled && settings->autocielab)
+ || (params->impulseDenoise.enabled && settings->autocielab) || (params->colorappearance.badpixsl > 0 && settings->autocielab));
if (needJ) {
if (!CAMBrightCurveJ) {
- CAMBrightCurveJ(32768, LUT_CLIP_ABOVE);
+ CAMBrightCurveJ (32768, LUT_CLIP_ABOVE);
}
- if(CAMBrightCurveJ.dirty) {
+ if (CAMBrightCurveJ.dirty) {
Ciecam02::curveJfloat (params->colorappearance.jlight, params->colorappearance.contrast, hist16J, CAMBrightCurveJ);//lightness and contrast J
CAMBrightCurveJ /= 327.68f;
CAMBrightCurveJ.dirty = false;
@@ -1892,10 +1873,10 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
if (needQ) {
if (!CAMBrightCurveQ) {
- CAMBrightCurveQ(32768, LUT_CLIP_ABOVE);
+ CAMBrightCurveQ (32768, LUT_CLIP_ABOVE);
}
- if(CAMBrightCurveQ.dirty) {
+ if (CAMBrightCurveQ.dirty) {
Ciecam02::curveJfloat (params->colorappearance.qbright, params->colorappearance.qcontrast, hist16Q, CAMBrightCurveQ);//brightness and contrast Q
CAMBrightCurveQ /= coefQ;
CAMBrightCurveQ.dirty = false;
@@ -1906,9 +1887,9 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
//matrix for current working space
TMatrix wiprof = ICCStore::getInstance()->workingSpaceInverseMatrix (params->icm.working);
const float wip[3][3] = {
- {(float)wiprof[0][0], (float)wiprof[0][1], (float)wiprof[0][2]},
- {(float)wiprof[1][0], (float)wiprof[1][1], (float)wiprof[1][2]},
- {(float)wiprof[2][0], (float)wiprof[2][1], (float)wiprof[2][2]}
+ { (float)wiprof[0][0], (float)wiprof[0][1], (float)wiprof[0][2]},
+ { (float)wiprof[1][0], (float)wiprof[1][1], (float)wiprof[1][2]},
+ { (float)wiprof[2][0], (float)wiprof[2][1], (float)wiprof[2][2]}
};
#ifdef __SSE2__
@@ -1940,42 +1921,42 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
vfloat x, y, z;
vfloat J, C, h, Q, M, s;
- vfloat c655d35 = F2V(655.35f);
+ vfloat c655d35 = F2V (655.35f);
- for(k = 0; k < width - 3; k += 4) {
- Color::Lab2XYZ(LVFU(lab->L[i][k]), LVFU(lab->a[i][k]), LVFU(lab->b[i][k]), x, y, z);
+ for (k = 0; k < width - 3; k += 4) {
+ Color::Lab2XYZ (LVFU (lab->L[i][k]), LVFU (lab->a[i][k]), LVFU (lab->b[i][k]), x, y, z);
x = x / c655d35;
y = y / c655d35;
z = z / c655d35;
- Ciecam02::xyz2jchqms_ciecam02float( J, C, h,
- Q, M, s, F2V(aw), F2V(fl), F2V(wh),
- x, y, z,
- F2V(xw1), F2V(yw1), F2V(zw1),
- F2V(c), F2V(nc), F2V(pow1), F2V(nbb), F2V(ncb), F2V(pfl), F2V(cz), F2V(d));
- STVF(Jbuffer[k], J);
- STVF(Cbuffer[k], C);
- STVF(hbuffer[k], h);
- STVF(Qbuffer[k], Q);
- STVF(Mbuffer[k], M);
- STVF(sbuffer[k], s);
+ Ciecam02::xyz2jchqms_ciecam02float ( J, C, h,
+ Q, M, s, F2V (aw), F2V (fl), F2V (wh),
+ x, y, z,
+ F2V (xw1), F2V (yw1), F2V (zw1),
+ F2V (c), F2V (nc), F2V (pow1), F2V (nbb), F2V (ncb), F2V (pfl), F2V (cz), F2V (d));
+ STVF (Jbuffer[k], J);
+ STVF (Cbuffer[k], C);
+ STVF (hbuffer[k], h);
+ STVF (Qbuffer[k], Q);
+ STVF (Mbuffer[k], M);
+ STVF (sbuffer[k], s);
}
- for(; k < width; k++) {
+ for (; k < width; k++) {
float L = lab->L[i][k];
float a = lab->a[i][k];
float b = lab->b[i][k];
float x, y, z;
//convert Lab => XYZ
- Color::Lab2XYZ(L, a, b, x, y, z);
+ Color::Lab2XYZ (L, a, b, x, y, z);
x = x / 655.35f;
y = y / 655.35f;
z = z / 655.35f;
float J, C, h, Q, M, s;
- Ciecam02::xyz2jchqms_ciecam02float( J, C, h,
- Q, M, s, aw, fl, wh,
- x, y, z,
- xw1, yw1, zw1,
- c, nc, gamu, pow1, nbb, ncb, pfl, cz, d);
+ Ciecam02::xyz2jchqms_ciecam02float ( J, C, h,
+ Q, M, s, aw, fl, wh,
+ x, y, z,
+ xw1, yw1, zw1,
+ c, nc, gamu, pow1, nbb, ncb, pfl, cz, d);
Jbuffer[k] = J;
Cbuffer[k] = C;
hbuffer[k] = h;
@@ -2004,16 +1985,16 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
float b = lab->b[i][j];
float x1, y1, z1;
//convert Lab => XYZ
- Color::Lab2XYZ(L, a, b, x1, y1, z1);
+ Color::Lab2XYZ (L, a, b, x1, y1, z1);
x = (float)x1 / 655.35f;
y = (float)y1 / 655.35f;
z = (float)z1 / 655.35f;
//process source==> normal
- Ciecam02::xyz2jchqms_ciecam02float( J, C, h,
- Q, M, s, aw, fl, wh,
- x, y, z,
- xw1, yw1, zw1,
- c, nc, gamu, pow1, nbb, ncb, pfl, cz, d);
+ Ciecam02::xyz2jchqms_ciecam02float ( J, C, h,
+ Q, M, s, aw, fl, wh,
+ x, y, z,
+ xw1, yw1, zw1,
+ c, nc, gamu, pow1, nbb, ncb, pfl, cz, d);
#endif
float Jpro, Cpro, hpro, Qpro, Mpro, spro;
Jpro = J;
@@ -2024,75 +2005,75 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
spro = s;
// we cannot have all algorithms with all chroma curves
- if(alg == 0) {
+ if (alg == 0) {
Jpro = CAMBrightCurveJ[Jpro * 327.68f]; //lightness CIECAM02 + contrast
- Qpro = QproFactor * sqrtf(Jpro);
+ Qpro = QproFactor * sqrtf (Jpro);
float Cp = (spro * spro * Qpro) / (1000000.f);
Cpro = Cp * 100.f;
float sres;
- Ciecam02::curvecolorfloat(chr, Cp , sres, 1.8f);
- Color::skinredfloat(Jpro, hpro, sres, Cp, 55.f, 30.f, 1, rstprotection, 100.f, Cpro);
- } else if(alg == 1) {
+ Ciecam02::curvecolorfloat (chr, Cp , sres, 1.8f);
+ Color::skinredfloat (Jpro, hpro, sres, Cp, 55.f, 30.f, 1, rstprotection, 100.f, Cpro);
+ } else if (alg == 1) {
// Lightness saturation
Jpro = CAMBrightCurveJ[Jpro * 327.68f]; //lightness CIECAM02 + contrast
float sres;
float Sp = spro / 100.0f;
float parsat = 1.5f; //parsat=1.5 =>saturation ; 1.8 => chroma ; 2.5 => colorfullness (personal evaluation)
- Ciecam02::curvecolorfloat(schr, Sp , sres, parsat);
+ Ciecam02::curvecolorfloat (schr, Sp , sres, parsat);
float dred = 100.f; // in C mode
float protect_red = 80.0f; // in C mode
- dred = 100.0f * sqrtf((dred * coe) / Qpro);
- protect_red = 100.0f * sqrtf((protect_red * coe) / Qpro);
- Color::skinredfloat(Jpro, hpro, sres, Sp, dred, protect_red, 0, rstprotection, 100.f, spro);
- Qpro = QproFactor * sqrtf(Jpro);
+ dred = 100.0f * sqrtf ((dred * coe) / Qpro);
+ protect_red = 100.0f * sqrtf ((protect_red * coe) / Qpro);
+ Color::skinredfloat (Jpro, hpro, sres, Sp, dred, protect_red, 0, rstprotection, 100.f, spro);
+ Qpro = QproFactor * sqrtf (Jpro);
Cpro = (spro * spro * Qpro) / (10000.0f);
- } else if(alg == 2) {
- Qpro = CAMBrightCurveQ[(float)(Qpro * coefQ)]; //brightness and contrast
+ } else if (alg == 2) {
+ Qpro = CAMBrightCurveQ[ (float) (Qpro * coefQ)]; //brightness and contrast
float Mp, sres;
Mp = Mpro / 100.0f;
- Ciecam02::curvecolorfloat(mchr, Mp , sres, 2.5f);
+ Ciecam02::curvecolorfloat (mchr, Mp , sres, 2.5f);
float dred = 100.f; //in C mode
float protect_red = 80.0f; // in C mode
dred *= coe; //in M mode
protect_red *= coe; //M mode
- Color::skinredfloat(Jpro, hpro, sres, Mp, dred, protect_red, 0, rstprotection, 100.f, Mpro);
- Jpro = SQR((10.f * Qpro) / wh);
+ Color::skinredfloat (Jpro, hpro, sres, Mp, dred, protect_red, 0, rstprotection, 100.f, Mpro);
+ Jpro = SQR ((10.f * Qpro) / wh);
Cpro = Mpro / coe;
Qpro = (Qpro == 0.f ? epsil : Qpro); // avoid division by zero
- spro = 100.0f * sqrtf( Mpro / Qpro );
+ spro = 100.0f * sqrtf ( Mpro / Qpro );
} else { /*if(alg == 3) */
- Qpro = CAMBrightCurveQ[(float)(Qpro * coefQ)]; //brightness and contrast
+ Qpro = CAMBrightCurveQ[ (float) (Qpro * coefQ)]; //brightness and contrast
float Mp, sres;
Mp = Mpro / 100.0f;
- Ciecam02::curvecolorfloat(mchr, Mp , sres, 2.5f);
+ Ciecam02::curvecolorfloat (mchr, Mp , sres, 2.5f);
float dred = 100.f; //in C mode
float protect_red = 80.0f; // in C mode
dred *= coe; //in M mode
protect_red *= coe; //M mode
- Color::skinredfloat(Jpro, hpro, sres, Mp, dred, protect_red, 0, rstprotection, 100.f, Mpro);
- Jpro = SQR((10.f * Qpro) / wh);
+ Color::skinredfloat (Jpro, hpro, sres, Mp, dred, protect_red, 0, rstprotection, 100.f, Mpro);
+ Jpro = SQR ((10.f * Qpro) / wh);
Cpro = Mpro / coe;
Qpro = (Qpro == 0.f ? epsil : Qpro); // avoid division by zero
- spro = 100.0f * sqrtf( Mpro / Qpro );
+ spro = 100.0f * sqrtf ( Mpro / Qpro );
- if(Jpro > 99.9f) {
+ if (Jpro > 99.9f) {
Jpro = 99.9f;
}
- Jpro = CAMBrightCurveJ[(float)(Jpro * 327.68f)]; //lightness CIECAM02 + contrast
+ Jpro = CAMBrightCurveJ[ (float) (Jpro * 327.68f)]; //lightness CIECAM02 + contrast
float Sp = spro / 100.0f;
- Ciecam02::curvecolorfloat(schr, Sp , sres, 1.5f);
+ Ciecam02::curvecolorfloat (schr, Sp , sres, 1.5f);
dred = 100.f; // in C mode
protect_red = 80.0f; // in C mode
- dred = 100.0f * sqrtf((dred * coe) / Q);
- protect_red = 100.0f * sqrtf((protect_red * coe) / Q);
- Color::skinredfloat(Jpro, hpro, sres, Sp, dred, protect_red, 0, rstprotection, 100.f, spro);
- Qpro = QproFactor * sqrtf(Jpro);
+ dred = 100.0f * sqrtf ((dred * coe) / Q);
+ protect_red = 100.0f * sqrtf ((protect_red * coe) / Q);
+ Color::skinredfloat (Jpro, hpro, sres, Sp, dred, protect_red, 0, rstprotection, 100.f, spro);
+ Qpro = QproFactor * sqrtf (Jpro);
float Cp = (spro * spro * Qpro) / (1000000.f);
Cpro = Cp * 100.f;
- Ciecam02::curvecolorfloat(chr, Cp , sres, 1.8f);
- Color::skinredfloat(Jpro, hpro, sres, Cp, 55.f, 30.f, 1, rstprotection, 100.f, Cpro);
+ Ciecam02::curvecolorfloat (chr, Cp , sres, 1.8f);
+ Color::skinredfloat (Jpro, hpro, sres, Cp, 55.f, 30.f, 1, rstprotection, 100.f, Cpro);
// disabled this code, Issue 2690
// if(Jpro < 1.f && Cpro > 12.f) Cpro=12.f;//reduce artifacts by "pseudo gamut control CIECAM"
// else if(Jpro < 2.f && Cpro > 15.f) Cpro=15.f;
@@ -2100,7 +2081,7 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
// else if(Jpro < 7.f && Cpro > 50.f) Cpro=50.f;
hpro = hpro + hue;
- if( hpro < 0.0f ) {
+ if ( hpro < 0.0f ) {
hpro += 360.0f; //hue
}
}
@@ -2112,27 +2093,27 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
float Jold100 = (float) Jpro;
float redu = 25.f;
float reduc = 1.f;
- const Lightcurve& userColCurveJ1 = static_cast(customColCurve1);
- userColCurveJ1.Apply(Jj);
+ const Lightcurve& userColCurveJ1 = static_cast (customColCurve1);
+ userColCurveJ1.Apply (Jj);
- if(Jj > Jold) {
- if(Jj < 65535.f) {
- if(Jold < 327.68f * redu) {
+ if (Jj > Jold) {
+ if (Jj < 65535.f) {
+ if (Jold < 327.68f * redu) {
Jj = 0.3f * (Jj - Jold) + Jold; //divide sensibility
} else {
- reduc = LIM((100.f - Jold100) / (100.f - redu), 0.f, 1.f);
+ reduc = LIM ((100.f - Jold100) / (100.f - redu), 0.f, 1.f);
Jj = 0.3f * reduc * (Jj - Jold) + Jold; //reduct sensibility in highlights
}
}
- } else if(Jj > 10.f) {
+ } else if (Jj > 10.f) {
Jj = 0.8f * (Jj - Jold) + Jold;
} else if (Jj >= 0.f) {
Jj = 0.90f * (Jj - Jold) + Jold; // not zero ==>artifacts
}
- Jpro = (float)(Jj / 327.68f);
+ Jpro = (float) (Jj / 327.68f);
- if(Jpro < 1.f) {
+ if (Jpro < 1.f) {
Jpro = 1.f;
}
} else if (curveMode == ColorAppearanceParams::TC_MODE_BRIGHT) {
@@ -2145,28 +2126,28 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
float redu = 20.f;
float reduc = 1.f;
- const Brightcurve& userColCurveB1 = static_cast(customColCurve1);
- userColCurveB1.Apply(Qq);
+ const Brightcurve& userColCurveB1 = static_cast (customColCurve1);
+ userColCurveB1.Apply (Qq);
- if(Qq > Qold) {
- if(Qq < 65535.f) {
- if(Qold < 327.68f * redu) {
+ if (Qq > Qold) {
+ if (Qq < 65535.f) {
+ if (Qold < 327.68f * redu) {
Qq = 0.25f * (Qq - Qold) + Qold; //divide sensibility
} else {
- reduc = LIM((100.f - Qold100) / (100.f - redu), 0.f, 1.f);
+ reduc = LIM ((100.f - Qold100) / (100.f - redu), 0.f, 1.f);
Qq = 0.25f * reduc * (Qq - Qold) + Qold; //reduct sensibility in highlights
}
}
- } else if(Qq > 10.f) {
+ } else if (Qq > 10.f) {
Qq = 0.5f * (Qq - Qold) + Qold;
} else if (Qq >= 0.f) {
Qq = 0.7f * (Qq - Qold) + Qold; // not zero ==>artifacts
}
- Qpro = (float)(Qq * (coef) / 327.68f);
+ Qpro = (float) (Qq * (coef) / 327.68f);
Jpro = 100.f * (Qpro * Qpro) / ((4.0f / c) * (4.0f / c) * (aw + 4.0f) * (aw + 4.0f));
- if(Jpro < 1.f) {
+ if (Jpro < 1.f) {
Jpro = 1.f;
}
}
@@ -2179,35 +2160,35 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
float Jold100 = (float) Jpro;
float redu = 25.f;
float reduc = 1.f;
- const Lightcurve& userColCurveJ2 = static_cast(customColCurve2);
- userColCurveJ2.Apply(Jj);
+ const Lightcurve& userColCurveJ2 = static_cast (customColCurve2);
+ userColCurveJ2.Apply (Jj);
- if(Jj > Jold) {
- if(Jj < 65535.f) {
- if(Jold < 327.68f * redu) {
+ if (Jj > Jold) {
+ if (Jj < 65535.f) {
+ if (Jold < 327.68f * redu) {
Jj = 0.3f * (Jj - Jold) + Jold; //divide sensibility
} else {
- reduc = LIM((100.f - Jold100) / (100.f - redu), 0.f, 1.f);
+ reduc = LIM ((100.f - Jold100) / (100.f - redu), 0.f, 1.f);
Jj = 0.3f * reduc * (Jj - Jold) + Jold; //reduct sensibility in highlights
}
}
- } else if(Jj > 10.f) {
- if(!t1L) {
+ } else if (Jj > 10.f) {
+ if (!t1L) {
Jj = 0.8f * (Jj - Jold) + Jold;
} else {
Jj = 0.4f * (Jj - Jold) + Jold;
}
} else if (Jj >= 0.f) {
- if(!t1L) {
+ if (!t1L) {
Jj = 0.90f * (Jj - Jold) + Jold; // not zero ==>artifacts
} else {
Jj = 0.5f * (Jj - Jold) + Jold;
}
}
- Jpro = (float)(Jj / 327.68f);
+ Jpro = (float) (Jj / 327.68f);
- if(Jpro < 1.f) {
+ if (Jpro < 1.f) {
Jpro = 1.f;
}
@@ -2220,39 +2201,39 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
float redu = 20.f;
float reduc = 1.f;
- const Brightcurve& userColCurveB2 = static_cast(customColCurve2);
- userColCurveB2.Apply(Qq);
+ const Brightcurve& userColCurveB2 = static_cast (customColCurve2);
+ userColCurveB2.Apply (Qq);
- if(Qq > Qold) {
- if(Qq < 65535.f) {
- if(Qold < 327.68f * redu) {
+ if (Qq > Qold) {
+ if (Qq < 65535.f) {
+ if (Qold < 327.68f * redu) {
Qq = 0.25f * (Qq - Qold) + Qold; //divide sensibility
} else {
- reduc = LIM((100.f - Qold100) / (100.f - redu), 0.f, 1.f);
+ reduc = LIM ((100.f - Qold100) / (100.f - redu), 0.f, 1.f);
Qq = 0.25f * reduc * (Qq - Qold) + Qold; //reduct sensibility in highlights
}
}
- } else if(Qq > 10.f) {
+ } else if (Qq > 10.f) {
Qq = 0.5f * (Qq - Qold) + Qold;
} else if (Qq >= 0.f) {
Qq = 0.7f * (Qq - Qold) + Qold; // not zero ==>artifacts
}
- Qpro = (float)(Qq * (coef) / 327.68f);
+ Qpro = (float) (Qq * (coef) / 327.68f);
Jpro = 100.f * (Qpro * Qpro) / ((4.0f / c) * (4.0f / c) * (aw + 4.0f) * (aw + 4.0f));
- if(t1L) { //to workaround the problem if we modify curve1-lightnees after curve2 brightness(the cat that bites its own tail!) in fact it's another type of curve only for this case
+ if (t1L) { //to workaround the problem if we modify curve1-lightnees after curve2 brightness(the cat that bites its own tail!) in fact it's another type of curve only for this case
coef = 2.f; //adapt Q to J approximation
Qq = (float) Qpro * coef;
Qold = Qq;
- const Lightcurve& userColCurveJ1 = static_cast(customColCurve1);
- userColCurveJ1.Apply(Qq);
+ const Lightcurve& userColCurveJ1 = static_cast (customColCurve1);
+ userColCurveJ1.Apply (Qq);
Qq = 0.05f * (Qq - Qold) + Qold; //approximative adaptation
- Qpro = (float)(Qq / coef);
+ Qpro = (float) (Qq / coef);
Jpro = 100.f * (Qpro * Qpro) / ((4.0f / c) * (4.0f / c) * (aw + 4.0f) * (aw + 4.0f));
}
- if(Jpro < 1.f) {
+ if (Jpro < 1.f) {
Jpro = 1.f;
}
}
@@ -2264,13 +2245,13 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
float coef = 327.68f / parsat;
float Cc = (float) Cpro * coef;
float Ccold = Cc;
- const Chromacurve& userColCurve = static_cast(customColCurve3);
- userColCurve.Apply(Cc);
+ const Chromacurve& userColCurve = static_cast (customColCurve3);
+ userColCurve.Apply (Cc);
float dred = 55.f;
float protect_red = 30.0f;
int sk = 1;
float ko = 1.f / coef;
- Color::skinredfloat(Jpro, hpro, Cc, Ccold, dred, protect_red, sk, rstprotection, ko, Cpro);
+ Color::skinredfloat (Jpro, hpro, Cc, Ccold, dred, protect_red, sk, rstprotection, ko, Cpro);
/*
if(Jpro < 1.f && Cpro > 12.f) {
Cpro = 12.f; //reduce artifacts by "pseudo gamut control CIECAM"
@@ -2287,32 +2268,32 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
float coef = 327.68f / parsat;
float Ss = (float) spro * coef;
float Sold = Ss;
- const Saturcurve& userColCurve = static_cast(customColCurve3);
- userColCurve.Apply(Ss);
+ const Saturcurve& userColCurve = static_cast (customColCurve3);
+ userColCurve.Apply (Ss);
Ss = 0.6f * (Ss - Sold) + Sold; //divide sensibility saturation
float dred = 100.f; // in C mode
float protect_red = 80.0f; // in C mode
- dred = 100.0f * sqrtf((dred * coe) / Qpro);
- protect_red = 100.0f * sqrtf((protect_red * coe) / Qpro);
+ dred = 100.0f * sqrtf ((dred * coe) / Qpro);
+ protect_red = 100.0f * sqrtf ((protect_red * coe) / Qpro);
int sk = 0;
float ko = 1.f / coef;
- Color::skinredfloat(Jpro, hpro, Ss, Sold, dred, protect_red, sk, rstprotection, ko, spro);
- Qpro = ( 4.0f / c ) * sqrtf( Jpro / 100.0f ) * ( aw + 4.0f ) ;
+ Color::skinredfloat (Jpro, hpro, Ss, Sold, dred, protect_red, sk, rstprotection, ko, spro);
+ Qpro = ( 4.0f / c ) * sqrtf ( Jpro / 100.0f ) * ( aw + 4.0f ) ;
Cpro = (spro * spro * Qpro) / (10000.0f);
} else if (curveMode3 == ColorAppearanceParams::TC_MODE_COLORF) { //
float parsat = 0.8f; //0.68;
float coef = 327.68f / parsat;
float Mm = (float) Mpro * coef;
float Mold = Mm;
- const Colorfcurve& userColCurve = static_cast(customColCurve3);
- userColCurve.Apply(Mm);
+ const Colorfcurve& userColCurve = static_cast (customColCurve3);
+ userColCurve.Apply (Mm);
float dred = 100.f; //in C mode
float protect_red = 80.0f; // in C mode
dred *= coe; //in M mode
protect_red *= coe;
int sk = 0;
float ko = 1.f / coef;
- Color::skinredfloat(Jpro, hpro, Mm, Mold, dred, protect_red, sk, rstprotection, ko, Mpro);
+ Color::skinredfloat (Jpro, hpro, Mm, Mold, dred, protect_red, sk, rstprotection, ko, Mpro);
/*
if(Jpro < 1.f && Mpro > 12.f * coe) {
Mpro = 12.f * coe; //reduce artifacts by "pseudo gamut control CIECAM"
@@ -2339,28 +2320,28 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
h = hpro;
s = spro;
- if(params->colorappearance.tonecie || settings->autocielab) { //use pointer for tonemapping with CIECAM and also sharpening , defringe, contrast detail
+ if (params->colorappearance.tonecie || settings->autocielab) { //use pointer for tonemapping with CIECAM and also sharpening , defringe, contrast detail
ncie->Q_p[i][j] = (float)Q + epsil; //epsil to avoid Q=0
ncie->M_p[i][j] = (float)M + epsil;
ncie->J_p[i][j] = (float)J + epsil;
ncie->h_p[i][j] = (float)h;
ncie->C_p[i][j] = (float)C + epsil;
- ncie->sh_p[i][j] = (float) 3276.8f * (sqrtf( J ) ) ;
+ ncie->sh_p[i][j] = (float) 3276.8f * (sqrtf ( J ) ) ;
- if(epdEnabled) {
- if(ncie->Q_p[i][j] < minQThr) {
+ if (epdEnabled) {
+ if (ncie->Q_p[i][j] < minQThr) {
minQThr = ncie->Q_p[i][j]; //minima
}
- if(ncie->Q_p[i][j] > maxQThr) {
+ if (ncie->Q_p[i][j] > maxQThr) {
maxQThr = ncie->Q_p[i][j]; //maxima
}
}
}
- if(!params->colorappearance.tonecie || !settings->autocielab || !epdEnabled) {
+ if (!params->colorappearance.tonecie || !settings->autocielab || !epdEnabled) {
- if(ciedata) { //only with improccoordinator
+ if (ciedata) { //only with improccoordinator
// Data for J Q M s and C histograms
int posl, posc;
float brli = 327.f;
@@ -2369,7 +2350,7 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
float colch;
//update histogram
- if(curveMode == ColorAppearanceParams::TC_MODE_BRIGHT) {
+ if (curveMode == ColorAppearanceParams::TC_MODE_BRIGHT) {
brli = 70.0f;
libr = Q; //40.0 to 100.0 approximative factor for Q - 327 for J
} else { /*if(curveMode == ColorAppearanceParams::TC_MODE_LIGHT)*/
@@ -2377,13 +2358,13 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
libr = J; //327 for J
}
- posl = (int)(libr * brli);
+ posl = (int) (libr * brli);
hist16JCAM[posl]++;
if (curveMode3 == ColorAppearanceParams::TC_MODE_CHROMA) {
chsacol = 327.f;
colch = C; //450.0 approximative factor for s 320 for M
- } else if(curveMode3 == ColorAppearanceParams::TC_MODE_SATUR) {
+ } else if (curveMode3 == ColorAppearanceParams::TC_MODE_SATUR) {
chsacol = 450.0f;
colch = s;
} else { /*if(curveMode3 == ColorAppearanceParams::TC_MODE_COLORF)*/
@@ -2391,12 +2372,12 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
colch = M;
}
- posc = (int)(colch * chsacol);
+ posc = (int) (colch * chsacol);
hist16_CCAM[posc]++;
}
- if(LabPassOne) {
+ if (LabPassOne) {
#ifdef __SSE2__
// write to line buffers
Jbuffer[j] = J;
@@ -2406,27 +2387,27 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
float xx, yy, zz;
//process normal==> viewing
- Ciecam02::jch2xyz_ciecam02float( xx, yy, zz,
- J, C, h,
- xw2, yw2, zw2,
- f2, c2, nc2, gamu, pow1n, nbbj, ncbj, flj, czj, dj, awj);
+ Ciecam02::jch2xyz_ciecam02float ( xx, yy, zz,
+ J, C, h,
+ xw2, yw2, zw2,
+ f2, c2, nc2, gamu, pow1n, nbbj, ncbj, flj, czj, dj, awj);
float x, y, z;
x = xx * 655.35f;
y = yy * 655.35f;
z = zz * 655.35f;
float Ll, aa, bb;
//convert xyz=>lab
- Color::XYZ2Lab(x, y, z, Ll, aa, bb);
+ Color::XYZ2Lab (x, y, z, Ll, aa, bb);
// gamut control in Lab mode; I must study how to do with cIECAM only
- if(gamu == 1) {
+ if (gamu == 1) {
float HH, Lprov1, Chprov1;
Lprov1 = Ll / 327.68f;
- Chprov1 = sqrtf(SQR(aa) + SQR(bb)) / 327.68f;
- HH = xatan2f(bb, aa);
+ Chprov1 = sqrtf (SQR (aa) + SQR (bb)) / 327.68f;
+ HH = xatan2f (bb, aa);
float2 sincosval;
- if(Chprov1 == 0.0f) {
+ if (Chprov1 == 0.0f) {
sincosval.y = 1.f;
sincosval.x = 0.0f;
} else {
@@ -2439,10 +2420,10 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
bool neg = false;
bool more_rgb = false;
//gamut control : Lab values are in gamut
- Color::gamutLchonly(sincosval, Lprov1, Chprov1, wip, highlight, 0.15f, 0.96f, neg, more_rgb);
+ Color::gamutLchonly (sincosval, Lprov1, Chprov1, wip, highlight, 0.15f, 0.96f, neg, more_rgb);
#else
//gamut control : Lab values are in gamut
- Color::gamutLchonly(sincosval, Lprov1, Chprov1, wip, highlight, 0.15f, 0.96f);
+ Color::gamutLchonly (sincosval, Lprov1, Chprov1, wip, highlight, 0.15f, 0.96f);
#endif
lab->L[i][j] = Lprov1 * 327.68f;
@@ -2466,32 +2447,31 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
float *ybuffer = Mbuffer;
float *zbuffer = sbuffer;
- for(k = 0; k < bufferLength; k += 4) {
- Ciecam02::jch2xyz_ciecam02float( x, y, z,
- LVF(Jbuffer[k]), LVF(Cbuffer[k]), LVF(hbuffer[k]),
- F2V(xw2), F2V(yw2), F2V(zw2),
- F2V(f2), F2V(nc2), F2V(pow1n), F2V(nbbj), F2V(ncbj), F2V(flj), F2V(dj), F2V(awj), F2V(reccmcz));
- STVF(xbuffer[k], x * c655d35);
- STVF(ybuffer[k], y * c655d35);
- STVF(zbuffer[k], z * c655d35);
+ for (k = 0; k < bufferLength; k += 4) {
+ Ciecam02::jch2xyz_ciecam02float ( x, y, z,
+ LVF (Jbuffer[k]), LVF (Cbuffer[k]), LVF (hbuffer[k]),
+ F2V (xw2), F2V (yw2), F2V (zw2),
+ F2V (f2), F2V (nc2), F2V (pow1n), F2V (nbbj), F2V (ncbj), F2V (flj), F2V (dj), F2V (awj), F2V (reccmcz));
+ STVF (xbuffer[k], x * c655d35);
+ STVF (ybuffer[k], y * c655d35);
+ STVF (zbuffer[k], z * c655d35);
}
// XYZ2Lab uses a lookup table. The function behind that lut is a cube root.
// SSE can't beat the speed of that lut, so it doesn't make sense to use SSE
- for(int j = 0; j < width; j++) {
+ for (int j = 0; j < width; j++) {
float Ll, aa, bb;
//convert xyz=>lab
- Color::XYZ2Lab(xbuffer[j], ybuffer[j], zbuffer[j], Ll, aa, bb);
+ Color::XYZ2Lab (xbuffer[j], ybuffer[j], zbuffer[j], Ll, aa, bb);
// gamut control in Lab mode; I must study how to do with cIECAM only
- if(gamu == 1) {
- float HH, Lprov1, Chprov1;
+ if (gamu == 1) {
+ float Lprov1, Chprov1;
Lprov1 = Ll / 327.68f;
- Chprov1 = sqrtf(SQR(aa) + SQR(bb)) / 327.68f;
- HH = xatan2f(bb, aa);
+ Chprov1 = sqrtf (SQR (aa) + SQR (bb)) / 327.68f;
float2 sincosval;
- if(Chprov1 == 0.0f) {
+ if (Chprov1 == 0.0f) {
sincosval.y = 1.f;
sincosval.x = 0.0f;
} else {
@@ -2503,10 +2483,10 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
bool neg = false;
bool more_rgb = false;
//gamut control : Lab values are in gamut
- Color::gamutLchonly(sincosval, Lprov1, Chprov1, wip, highlight, 0.15f, 0.96f, neg, more_rgb);
+ Color::gamutLchonly (sincosval, Lprov1, Chprov1, wip, highlight, 0.15f, 0.96f, neg, more_rgb);
#else
//gamut control : Lab values are in gamut
- Color::gamutLchonly(sincosval, Lprov1, Chprov1, wip, highlight, 0.15f, 0.96f);
+ Color::gamutLchonly (sincosval, Lprov1, Chprov1, wip, highlight, 0.15f, 0.96f);
#endif
lab->L[i][j] = Lprov1 * 327.68f;
lab->a[i][j] = 327.68f * Chprov1 * sincosval.y;
@@ -2523,24 +2503,24 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
#pragma omp critical
{
- if(minQThr < minQ) {
+ if (minQThr < minQ) {
minQ = minQThr;
}
- if(maxQThr > maxQ) {
+ if (maxQThr > maxQ) {
maxQ = maxQThr;
}
}
}
// End of parallelization
- if(!params->colorappearance.tonecie || !settings->autocielab) { //normal
+ if (!params->colorappearance.tonecie || !settings->autocielab) { //normal
- if(ciedata) {
+ if (ciedata) {
//update histogram J
- hist16JCAM.compressTo(histLCAM);
+ hist16JCAM.compressTo (histLCAM);
//update histogram C
- hist16_CCAM.compressTo(histCCAM);
+ hist16_CCAM.compressTo (histCCAM);
}
}
@@ -2548,14 +2528,14 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
if (settings->verbose) {
t2e.set();
- printf("CIECAM02 performed in %d usec:\n", t2e.etime(t1e));
+ printf ("CIECAM02 performed in %d usec:\n", t2e.etime (t1e));
// printf("minc=%f maxc=%f minj=%f maxj=%f\n",minc,maxc,minj,maxj);
}
#endif
- if(settings->autocielab) {
- if((params->colorappearance.tonecie && (epdEnabled)) || (params->sharpening.enabled && settings->autocielab && execsharp)
+ if (settings->autocielab) {
+ if ((params->colorappearance.tonecie && (epdEnabled)) || (params->sharpening.enabled && settings->autocielab && execsharp)
|| (params->dirpyrequalizer.enabled && settings->autocielab) || (params->defringe.enabled && settings->autocielab) || (params->sharpenMicro.enabled && settings->autocielab)
|| (params->impulseDenoise.enabled && settings->autocielab) || (params->colorappearance.badpixsl > 0 && settings->autocielab)) {
@@ -2563,27 +2543,27 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
//all this treatments reduce artefacts, but can leed to slighty different results
- if(params->defringe.enabled)
- if(execsharp) {
+ if (params->defringe.enabled)
+ if (execsharp) {
lab->deleteLab();
ImProcFunctions::defringecam (ncie);//defringe adapted to CIECAM
lab->reallocLab();
}
//if(params->dirpyrequalizer.enabled) if(execsharp) {
- if(params->dirpyrequalizer.enabled) {
- if(params->dirpyrequalizer.gamutlab /*&& execsharp*/) {//remove artifacts by gaussian blur - skin control
- float b_l = static_cast(params->dirpyrequalizer.hueskin.value[0]) / 100.0f;
- float t_l = static_cast(params->dirpyrequalizer.hueskin.value[1]) / 100.0f;
- float b_r = static_cast(params->dirpyrequalizer.hueskin.value[2]) / 100.0f;
- float t_r = static_cast(params->dirpyrequalizer.hueskin.value[3]) / 100.0f;
+ if (params->dirpyrequalizer.enabled) {
+ if (params->dirpyrequalizer.gamutlab /*&& execsharp*/) { //remove artifacts by gaussian blur - skin control
+ float b_l = static_cast (params->dirpyrequalizer.hueskin.value[0]) / 100.0f;
+ float t_l = static_cast (params->dirpyrequalizer.hueskin.value[1]) / 100.0f;
+ float b_r = static_cast (params->dirpyrequalizer.hueskin.value[2]) / 100.0f;
+ float t_r = static_cast (params->dirpyrequalizer.hueskin.value[3]) / 100.0f;
float artifact = (float) settings->artifact_cbdl;
- if(artifact > 6.f) {
+ if (artifact > 6.f) {
artifact = 6.f;
}
- if(artifact < 0.f) {
+ if (artifact < 0.f) {
artifact = 1.f;
}
@@ -2596,14 +2576,14 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
}
//if(params->colorappearance.badpixsl > 0) { int mode=params->colorappearance.badpixsl;
- if(params->colorappearance.badpixsl > 0) if(execsharp) {
+ if (params->colorappearance.badpixsl > 0) if (execsharp) {
int mode = params->colorappearance.badpixsl;
lab->deleteLab();
ImProcFunctions::badpixcam (ncie, 3.0, 10, mode, 0, 0, 0, 0, 0, 0, 1);//for bad pixels CIECAM
lab->reallocLab();
}
- if(params->impulseDenoise.enabled) if(execsharp) {
+ if (params->impulseDenoise.enabled) if (execsharp) {
float **buffers[3];
buffers[0] = lab->L;
buffers[1] = lab->a;
@@ -2611,29 +2591,29 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
ImProcFunctions::impulsedenoisecam (ncie, buffers); //impulse adapted to CIECAM
}
- if (params->sharpenMicro.enabled)if(execsharp) {
- ImProcFunctions::MLmicrocontrastcam(ncie);
+ if (params->sharpenMicro.enabled)if (execsharp) {
+ ImProcFunctions::MLmicrocontrastcam (ncie);
}
- if(params->sharpening.enabled)
- if(execsharp) {
+ if (params->sharpening.enabled)
+ if (execsharp) {
float **buffer = lab->L; // We can use the L-buffer from lab as buffer to save some memory
ImProcFunctions::sharpeningcam (ncie, buffer); // sharpening adapted to CIECAM
}
//if(params->dirpyrequalizer.enabled) if(execsharp) {
- if(params->dirpyrequalizer.enabled /*&& execsharp*/) {
- float b_l = static_cast(params->dirpyrequalizer.hueskin.value[0]) / 100.0f;
- float t_l = static_cast(params->dirpyrequalizer.hueskin.value[1]) / 100.0f;
- float b_r = static_cast(params->dirpyrequalizer.hueskin.value[2]) / 100.0f;
- float t_r = static_cast(params->dirpyrequalizer.hueskin.value[3]) / 100.0f;
+ if (params->dirpyrequalizer.enabled /*&& execsharp*/) {
+ float b_l = static_cast (params->dirpyrequalizer.hueskin.value[0]) / 100.0f;
+ float t_l = static_cast (params->dirpyrequalizer.hueskin.value[1]) / 100.0f;
+ float b_r = static_cast (params->dirpyrequalizer.hueskin.value[2]) / 100.0f;
+ float t_r = static_cast (params->dirpyrequalizer.hueskin.value[3]) / 100.0f;
int choice = 0; // I have not suppress this statement in case of !! always to 0
// if(params->dirpyrequalizer.algo=="FI") choice=0;
// else if(params->dirpyrequalizer.algo=="LA") choice=1;
- if(rtt == 1) {
+ if (rtt == 1) {
lab->deleteLab();
- dirpyr_equalizercam(ncie, ncie->sh_p, ncie->sh_p, ncie->W, ncie->H, ncie->h_p, ncie->C_p, params->dirpyrequalizer.mult, params->dirpyrequalizer.threshold, params->dirpyrequalizer.skinprotect, true, params->dirpyrequalizer.gamutlab, b_l, t_l, t_r, b_r, choice, scalecd); //contrast by detail adapted to CIECAM
+ dirpyr_equalizercam (ncie, ncie->sh_p, ncie->sh_p, ncie->W, ncie->H, ncie->h_p, ncie->C_p, params->dirpyrequalizer.mult, params->dirpyrequalizer.threshold, params->dirpyrequalizer.skinprotect, true, params->dirpyrequalizer.gamutlab, b_l, t_l, t_r, b_r, choice, scalecd); //contrast by detail adapted to CIECAM
lab->reallocLab();
}
@@ -2646,7 +2626,7 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
}
const float Qredi = ( 4.0f / c_) * ( a_w + 4.0f );
- const float co_e = (pow_F(f_l, 0.25f));
+ const float co_e = (pow_F (f_l, 0.25f));
#ifndef _DEBUG
@@ -2659,8 +2639,8 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
for (int i = 0; i < height; i++) // update CieImages with new values after sharpening, defringe, contrast by detail level
for (int j = 0; j < width; j++) {
- float interm = fabsf(ncie->sh_p[i][j] / (32768.f));
- ncie->J_p[i][j] = 100.0f * SQR(interm);
+ float interm = fabsf (ncie->sh_p[i][j] / (32768.f));
+ ncie->J_p[i][j] = 100.0f * SQR (interm);
ncie->Q_p[i][j] = interm * Qredi;
ncie->M_p[i][j] = ncie->C_p[i][j] * co_e;
}
@@ -2668,15 +2648,15 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
}
}
- if((params->colorappearance.tonecie && (epdEnabled)) || (params->sharpening.enabled && settings->autocielab && execsharp)
+ if ((params->colorappearance.tonecie && (epdEnabled)) || (params->sharpening.enabled && settings->autocielab && execsharp)
|| (params->dirpyrequalizer.enabled && settings->autocielab) || (params->defringe.enabled && settings->autocielab) || (params->sharpenMicro.enabled && settings->autocielab)
|| (params->impulseDenoise.enabled && settings->autocielab) || (params->colorappearance.badpixsl > 0 && settings->autocielab)) {
ciedata = (params->colorappearance.datacie && pW != 1);
- if(epdEnabled && params->colorappearance.tonecie && algepd) {
+ if (epdEnabled && params->colorappearance.tonecie && algepd) {
lab->deleteLab();
- ImProcFunctions::EPDToneMapCIE(ncie, a_w, c_, w_h, width, height, begh, endh, minQ, maxQ, Iterates, scale );
+ ImProcFunctions::EPDToneMapCIE (ncie, a_w, c_, w_h, width, height, begh, endh, minQ, maxQ, Iterates, scale );
lab->reallocLab();
}
@@ -2684,7 +2664,7 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
constexpr float eps = 0.0001f;
- const float co_e = (pow_F(f_l, 0.25f)) + eps;
+ const float co_e = (pow_F (f_l, 0.25f)) + eps;
#ifndef _DEBUG
#pragma omp parallel
@@ -2708,14 +2688,14 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
for (int j = 0; j < width; j++) {
// if(epdEnabled) ncie->J_p[i][j]=(100.0f* ncie->Q_p[i][j]*ncie->Q_p[i][j])/(w_h*w_h);
- if(epdEnabled) {
- ncie->J_p[i][j] = (100.0f * ncie->Q_p[i][j] * ncie->Q_p[i][j]) / SQR((4.f / c) * (aw + 4.f));
+ if (epdEnabled) {
+ ncie->J_p[i][j] = (100.0f * ncie->Q_p[i][j] * ncie->Q_p[i][j]) / SQR ((4.f / c) * (aw + 4.f));
}
const float ncie_C_p = (ncie->M_p[i][j]) / co_e;
//show histogram in CIECAM mode (Q,J, M,s,C)
- if(ciedata) {
+ if (ciedata) {
// Data for J Q M s and C histograms
int posl, posc;
float brli = 327.f;
@@ -2723,7 +2703,7 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
float libr;
float colch;
- if(curveMode == ColorAppearanceParams::TC_MODE_BRIGHT) {
+ if (curveMode == ColorAppearanceParams::TC_MODE_BRIGHT) {
brli = 70.0f;
libr = ncie->Q_p[i][j]; //40.0 to 100.0 approximative factor for Q - 327 for J
} else { /*if(curveMode == ColorAppearanceParams::TC_MODE_LIGHT)*/
@@ -2731,21 +2711,21 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
libr = ncie->J_p[i][j]; //327 for J
}
- posl = (int)(libr * brli);
+ posl = (int) (libr * brli);
hist16JCAM[posl]++;
if (curveMode3 == ColorAppearanceParams::TC_MODE_CHROMA) {
chsacol = 327.f;
colch = ncie_C_p;
- } else if(curveMode3 == ColorAppearanceParams::TC_MODE_SATUR) {
+ } else if (curveMode3 == ColorAppearanceParams::TC_MODE_SATUR) {
chsacol = 450.0f;
- colch = 100.f * sqrtf(ncie_C_p / ncie->Q_p[i][j]);
+ colch = 100.f * sqrtf (ncie_C_p / ncie->Q_p[i][j]);
} else { /*if(curveMode3 == ColorAppearanceParams::TC_MODE_COLORF)*/
chsacol = 327.0f;
colch = ncie->M_p[i][j];
}
- posc = (int)(colch * chsacol);
+ posc = (int) (colch * chsacol);
hist16_CCAM[posc]++;
}
@@ -2757,24 +2737,24 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
hbuffer[j] = ncie->h_p[i][j];
#else
float xx, yy, zz;
- Ciecam02::jch2xyz_ciecam02float( xx, yy, zz,
- ncie->J_p[i][j], ncie_C_p, ncie->h_p[i][j],
- xw2, yw2, zw2,
- f2, c2, nc2, gamu, pow1n, nbbj, ncbj, flj, czj, dj, awj);
+ Ciecam02::jch2xyz_ciecam02float ( xx, yy, zz,
+ ncie->J_p[i][j], ncie_C_p, ncie->h_p[i][j],
+ xw2, yw2, zw2,
+ f2, c2, nc2, gamu, pow1n, nbbj, ncbj, flj, czj, dj, awj);
float x = (float)xx * 655.35f;
float y = (float)yy * 655.35f;
float z = (float)zz * 655.35f;
float Ll, aa, bb;
//convert xyz=>lab
- Color::XYZ2Lab(x, y, z, Ll, aa, bb);
+ Color::XYZ2Lab (x, y, z, Ll, aa, bb);
- if(gamu == 1) {
+ if (gamu == 1) {
float Lprov1, Chprov1;
Lprov1 = Ll / 327.68f;
- Chprov1 = sqrtf(SQR(aa) + SQR(bb)) / 327.68f;
+ Chprov1 = sqrtf (SQR (aa) + SQR (bb)) / 327.68f;
float2 sincosval;
- if(Chprov1 == 0.0f) {
+ if (Chprov1 == 0.0f) {
sincosval.y = 1.f;
sincosval.x = 0.0f;
} else {
@@ -2787,10 +2767,10 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
bool neg = false;
bool more_rgb = false;
//gamut control : Lab values are in gamut
- Color::gamutLchonly(sincosval, Lprov1, Chprov1, wip, highlight, 0.15f, 0.96f, neg, more_rgb);
+ Color::gamutLchonly (sincosval, Lprov1, Chprov1, wip, highlight, 0.15f, 0.96f, neg, more_rgb);
#else
//gamut control : Lab values are in gamut
- Color::gamutLchonly(sincosval, Lprov1, Chprov1, wip, highlight, 0.15f, 0.96f);
+ Color::gamutLchonly (sincosval, Lprov1, Chprov1, wip, highlight, 0.15f, 0.96f);
#endif
lab->L[i][j] = Lprov1 * 327.68f;
@@ -2809,35 +2789,35 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
// process line buffers
int k;
vfloat x, y, z;
- vfloat c655d35 = F2V(655.35f);
+ vfloat c655d35 = F2V (655.35f);
- for(k = 0; k < bufferLength; k += 4) {
- Ciecam02::jch2xyz_ciecam02float( x, y, z,
- LVF(Jbuffer[k]), LVF(Cbuffer[k]), LVF(hbuffer[k]),
- F2V(xw2), F2V(yw2), F2V(zw2),
- F2V(f2), F2V(nc2), F2V(pow1n), F2V(nbbj), F2V(ncbj), F2V(flj), F2V(dj), F2V(awj), F2V(reccmcz));
+ for (k = 0; k < bufferLength; k += 4) {
+ Ciecam02::jch2xyz_ciecam02float ( x, y, z,
+ LVF (Jbuffer[k]), LVF (Cbuffer[k]), LVF (hbuffer[k]),
+ F2V (xw2), F2V (yw2), F2V (zw2),
+ F2V (f2), F2V (nc2), F2V (pow1n), F2V (nbbj), F2V (ncbj), F2V (flj), F2V (dj), F2V (awj), F2V (reccmcz));
x *= c655d35;
y *= c655d35;
z *= c655d35;
- STVF(xbuffer[k], x);
- STVF(ybuffer[k], y);
- STVF(zbuffer[k], z);
+ STVF (xbuffer[k], x);
+ STVF (ybuffer[k], y);
+ STVF (zbuffer[k], z);
}
// XYZ2Lab uses a lookup table. The function behind that lut is a cube root.
// SSE can't beat the speed of that lut, so it doesn't make sense to use SSE
- for(int j = 0; j < width; j++) {
+ for (int j = 0; j < width; j++) {
float Ll, aa, bb;
//convert xyz=>lab
- Color::XYZ2Lab(xbuffer[j], ybuffer[j], zbuffer[j], Ll, aa, bb);
+ Color::XYZ2Lab (xbuffer[j], ybuffer[j], zbuffer[j], Ll, aa, bb);
- if(gamu == 1) {
+ if (gamu == 1) {
float Lprov1, Chprov1;
Lprov1 = Ll / 327.68f;
- Chprov1 = sqrtf(SQR(aa) + SQR(bb)) / 327.68f;
+ Chprov1 = sqrtf (SQR (aa) + SQR (bb)) / 327.68f;
float2 sincosval;
- if(Chprov1 == 0.0f) {
+ if (Chprov1 == 0.0f) {
sincosval.y = 1.f;
sincosval.x = 0.0f;
} else {
@@ -2849,10 +2829,10 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
bool neg = false;
bool more_rgb = false;
//gamut control : Lab values are in gamut
- Color::gamutLchonly(sincosval, Lprov1, Chprov1, wip, highlight, 0.15f, 0.96f, neg, more_rgb);
+ Color::gamutLchonly (sincosval, Lprov1, Chprov1, wip, highlight, 0.15f, 0.96f, neg, more_rgb);
#else
//gamut control : Lab values are in gamut
- Color::gamutLchonly(sincosval, Lprov1, Chprov1, wip, highlight, 0.15f, 0.96f);
+ Color::gamutLchonly (sincosval, Lprov1, Chprov1, wip, highlight, 0.15f, 0.96f);
#endif
lab->L[i][j] = Lprov1 * 327.68f;
lab->a[i][j] = 327.68f * Chprov1 * sincosval.y;
@@ -2871,13 +2851,13 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int begh, int
} //end parallelization
//show CIECAM histograms
- if(ciedata) {
+ if (ciedata) {
//update histogram J and Q
//update histogram J
- hist16JCAM.compressTo(histLCAM);
+ hist16JCAM.compressTo (histLCAM);
//update color histogram M,s,C
- hist16_CCAM.compressTo(histCCAM);
+ hist16_CCAM.compressTo (histCCAM);
}
}
}
@@ -2899,20 +2879,20 @@ void ImProcFunctions::moyeqt (Imagefloat* working, float &moyS, float &eqty)
for (int i = 0; i < tHh; i++) {
for (int j = 0; j < tWw; j++) {
- float s = Color::rgb2s(CLIP(working->r(i, j)), CLIP(working->g(i, j)), CLIP(working->b(i, j)));
+ float s = Color::rgb2s (CLIP (working->r (i, j)), CLIP (working->g (i, j)), CLIP (working->b (i, j)));
moy += s;
- sqrs += SQR(s);
+ sqrs += SQR (s);
}
}
moy /= (tHh * tWw);
sqrs /= (tHh * tWw);
- eqty = sqrt(sqrs - SQR(moy));
+ eqty = sqrt (sqrs - SQR (moy));
moyS = moy;
}
static inline void
-filmlike_clip_rgb_tone(float *r, float *g, float *b, const float L)
+filmlike_clip_rgb_tone (float *r, float *g, float *b, const float L)
{
float r_ = *r > L ? L : *r;
float b_ = *b > L ? L : *b;
@@ -2923,18 +2903,18 @@ filmlike_clip_rgb_tone(float *r, float *g, float *b, const float L)
}
static void
-filmlike_clip(float *r, float *g, float *b)
+filmlike_clip (float *r, float *g, float *b)
{
// This is Adobe's hue-stable film-like curve with a diagonal, ie only used for clipping. Can probably be further optimized.
const float L = 65535.0;
if (*r >= *g) {
if (*g > *b) { // Case 1: r >= g > b
- filmlike_clip_rgb_tone(r, g, b, L);
+ filmlike_clip_rgb_tone (r, g, b, L);
} else if (*b > *r) { // Case 2: b > r >= g
- filmlike_clip_rgb_tone(b, r, g, L);
+ filmlike_clip_rgb_tone (b, r, g, L);
} else if (*b > *g) { // Case 3: r >= b > g
- filmlike_clip_rgb_tone(r, b, g, L);
+ filmlike_clip_rgb_tone (r, b, g, L);
} else { // Case 4: r >= g == b
*r = *r > L ? L : *r;
*g = *g > L ? L : *g;
@@ -2942,11 +2922,11 @@ filmlike_clip(float *r, float *g, float *b)
}
} else {
if (*r >= *b) { // Case 5: g > r >= b
- filmlike_clip_rgb_tone(g, r, b, L);
+ filmlike_clip_rgb_tone (g, r, b, L);
} else if (*b > *g) { // Case 6: b > g > r
- filmlike_clip_rgb_tone(b, g, r, L);
+ filmlike_clip_rgb_tone (b, g, r, L);
} else { // Case 7: g >= b > r
- filmlike_clip_rgb_tone(g, b, r, L);
+ filmlike_clip_rgb_tone (g, b, r, L);
}
}
}
@@ -2966,9 +2946,7 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
BENCHFUN
Imagefloat *tmpImage = nullptr;
- // NOTE: We're getting all 3 pointers here, but this function may not need them all, so one could optimize this
Imagefloat* editImgFloat = nullptr;
- LabImage* editLab = nullptr;
PlanarWhateverData* editWhatever = nullptr;
EditUniqueID editID = pipetteBuffer ? pipetteBuffer->getEditID() : EUID_None;
@@ -2979,7 +2957,6 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
break;
case (BT_LABIMAGE):
- editLab = pipetteBuffer->getLabBuffer();
break;
case (BT_SINGLEPLANE_FLOAT):
@@ -2988,7 +2965,7 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
}
}
- int h_th, s_th;
+ int h_th = 0, s_th = 0;
if (shmap) {
h_th = shmap->max_f - params->sh.htonalwidth * (shmap->max_f - shmap->avg) / 100;
@@ -3004,20 +2981,20 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
float toxyz[3][3] = {
{
- static_cast( wprof[0][0] / Color::D50x),
- static_cast( wprof[0][1] / Color::D50x),
- static_cast( wprof[0][2] / Color::D50x)
+ static_cast ( wprof[0][0] / Color::D50x),
+ static_cast ( wprof[0][1] / Color::D50x),
+ static_cast ( wprof[0][2] / Color::D50x)
}, {
- static_cast( wprof[1][0]),
- static_cast( wprof[1][1]),
- static_cast( wprof[1][2])
+ static_cast ( wprof[1][0]),
+ static_cast ( wprof[1][1]),
+ static_cast ( wprof[1][2])
}, {
- static_cast( wprof[2][0] / Color::D50z),
- static_cast( wprof[2][1] / Color::D50z),
- static_cast( wprof[2][2] / Color::D50z)
+ static_cast ( wprof[2][0] / Color::D50z),
+ static_cast ( wprof[2][1] / Color::D50z),
+ static_cast ( wprof[2][2] / Color::D50z)
}
};
- float maxFactorToxyz = max(toxyz[1][0], toxyz[1][1], toxyz[1][2]);
+ float maxFactorToxyz = max (toxyz[1][0], toxyz[1][1], toxyz[1][2]);
float equalR = maxFactorToxyz / toxyz[1][0];
float equalG = maxFactorToxyz / toxyz[1][1];
float equalB = maxFactorToxyz / toxyz[1][2];
@@ -3036,22 +3013,22 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
};
// For tonecurve histogram
- float lumimulf[3] = {static_cast(lumimul[0]), static_cast(lumimul[1]), static_cast(lumimul[2])};
+ float lumimulf[3] = {static_cast (lumimul[0]), static_cast (lumimul[1]), static_cast (lumimul[2])};
bool mixchannels = (params->chmixer.red[0] != 100 || params->chmixer.red[1] != 0 || params->chmixer.red[2] != 0 ||
params->chmixer.green[0] != 0 || params->chmixer.green[1] != 100 || params->chmixer.green[2] != 0 ||
params->chmixer.blue[0] != 0 || params->chmixer.blue[1] != 0 || params->chmixer.blue[2] != 100);
- FlatCurve* hCurve;
- FlatCurve* sCurve;
- FlatCurve* vCurve;
- FlatCurve* bwlCurve;
+ FlatCurve* hCurve = nullptr;
+ FlatCurve* sCurve = nullptr;
+ FlatCurve* vCurve = nullptr;
+ FlatCurve* bwlCurve = nullptr;
- FlatCurveType hCurveType = (FlatCurveType)params->hsvequalizer.hcurve.at(0);
- FlatCurveType sCurveType = (FlatCurveType)params->hsvequalizer.scurve.at(0);
- FlatCurveType vCurveType = (FlatCurveType)params->hsvequalizer.vcurve.at(0);
- FlatCurveType bwlCurveType = (FlatCurveType)params->blackwhite.luminanceCurve.at(0);
+ FlatCurveType hCurveType = (FlatCurveType)params->hsvequalizer.hcurve.at (0);
+ FlatCurveType sCurveType = (FlatCurveType)params->hsvequalizer.scurve.at (0);
+ FlatCurveType vCurveType = (FlatCurveType)params->hsvequalizer.vcurve.at (0);
+ FlatCurveType bwlCurveType = (FlatCurveType)params->blackwhite.luminanceCurve.at (0);
bool hCurveEnabled = hCurveType > FCT_Linear;
bool sCurveEnabled = sCurveType > FCT_Linear;
bool vCurveEnabled = vCurveType > FCT_Linear;
@@ -3059,7 +3036,7 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
// TODO: We should create a 'skip' value like for CurveFactory::complexsgnCurve (rtengine/curves.cc)
if (hCurveEnabled) {
- hCurve = new FlatCurve(params->hsvequalizer.hcurve);
+ hCurve = new FlatCurve (params->hsvequalizer.hcurve);
if (hCurve->isIdentity()) {
delete hCurve;
@@ -3069,7 +3046,7 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
}
if (sCurveEnabled) {
- sCurve = new FlatCurve(params->hsvequalizer.scurve);
+ sCurve = new FlatCurve (params->hsvequalizer.scurve);
if (sCurve->isIdentity()) {
delete sCurve;
@@ -3079,7 +3056,7 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
}
if (vCurveEnabled) {
- vCurve = new FlatCurve(params->hsvequalizer.vcurve);
+ vCurve = new FlatCurve (params->hsvequalizer.vcurve);
if (vCurve->isIdentity()) {
delete vCurve;
@@ -3089,7 +3066,7 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
}
if (bwlCurveEnabled) {
- bwlCurve = new FlatCurve(params->blackwhite.luminanceCurve);
+ bwlCurve = new FlatCurve (params->blackwhite.luminanceCurve);
if (bwlCurve->isIdentity()) {
delete bwlCurve;
@@ -3100,7 +3077,7 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
std::shared_ptr hald_clut;
bool clutAndWorkingProfilesAreSame = false;
- TMatrix xyz2clut, clut2xyz;
+ TMatrix xyz2clut = {}, clut2xyz = {};
#ifdef __SSE2__
vfloat v_work2xyz[3][3] ALIGNED16;
vfloat v_xyz2clut[3][3] ALIGNED16;
@@ -3109,23 +3086,23 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
#endif
if ( params->filmSimulation.enabled && !params->filmSimulation.clutFilename.empty() ) {
- hald_clut = CLUTStore::getInstance().getClut( params->filmSimulation.clutFilename );
+ hald_clut = CLUTStore::getInstance().getClut ( params->filmSimulation.clutFilename );
if ( hald_clut ) {
clutAndWorkingProfilesAreSame = hald_clut->getProfile() == params->icm.working;
if ( !clutAndWorkingProfilesAreSame ) {
- xyz2clut = ICCStore::getInstance()->workingSpaceInverseMatrix( hald_clut->getProfile() );
- clut2xyz = ICCStore::getInstance()->workingSpaceMatrix( hald_clut->getProfile() );
+ xyz2clut = ICCStore::getInstance()->workingSpaceInverseMatrix ( hald_clut->getProfile() );
+ clut2xyz = ICCStore::getInstance()->workingSpaceMatrix ( hald_clut->getProfile() );
#ifdef __SSE2__
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
- v_work2xyz[i][j] = F2V(wprof[i][j]);
- v_xyz2clut[i][j] = F2V(xyz2clut[i][j]);
- v_xyz2work[i][j] = F2V(wiprof[i][j]);
- v_clut2xyz[i][j] = F2V(clut2xyz[i][j]);
+ v_work2xyz[i][j] = F2V (wprof[i][j]);
+ v_xyz2clut[i][j] = F2V (xyz2clut[i][j]);
+ v_xyz2work[i][j] = F2V (wiprof[i][j]);
+ v_clut2xyz[i][j] = F2V (clut2xyz[i][j]);
}
}
@@ -3135,41 +3112,41 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
}
}
- const float film_simulation_strength = static_cast(params->filmSimulation.strength) / 100.0f;
+ const float film_simulation_strength = static_cast (params->filmSimulation.strength) / 100.0f;
const float exp_scale = pow (2.0, expcomp);
- const float comp = (max(0.0, expcomp) + 1.0) * hlcompr / 100.0;
- const float shoulder = ((65536.0 / max(1.0f, exp_scale)) * (hlcomprthresh / 200.0)) + 0.1;
+ const float comp = (max (0.0, expcomp) + 1.0) * hlcompr / 100.0;
+ const float shoulder = ((65536.0 / max (1.0f, exp_scale)) * (hlcomprthresh / 200.0)) + 0.1;
const float hlrange = 65536.0 - shoulder;
const bool isProPhoto = (params->icm.working == "ProPhoto");
// extracting datas from 'params' to avoid cache flush (to be confirmed)
ToneCurveParams::eTCModeId curveMode = params->toneCurve.curveMode;
ToneCurveParams::eTCModeId curveMode2 = params->toneCurve.curveMode2;
bool highlight = params->toneCurve.hrenabled;//Get the value if "highlight reconstruction" is activated
- bool hasToneCurve1 = bool(customToneCurve1);
- bool hasToneCurve2 = bool(customToneCurve2);
+ bool hasToneCurve1 = bool (customToneCurve1);
+ bool hasToneCurve2 = bool (customToneCurve2);
BlackWhiteParams::eTCModeId beforeCurveMode = params->blackwhite.beforeCurveMode;
BlackWhiteParams::eTCModeId afterCurveMode = params->blackwhite.afterCurveMode;
- bool hasToneCurvebw1 = bool(customToneCurvebw1);
- bool hasToneCurvebw2 = bool(customToneCurvebw2);
+ bool hasToneCurvebw1 = bool (customToneCurvebw1);
+ bool hasToneCurvebw2 = bool (customToneCurvebw2);
PerceptualToneCurveState ptc1ApplyState, ptc2ApplyState;
if (hasToneCurve1 && curveMode == ToneCurveParams::TC_MODE_PERCEPTUAL) {
- const PerceptualToneCurve& userToneCurve = static_cast(customToneCurve1);
- userToneCurve.initApplyState(ptc1ApplyState, params->icm.working);
+ const PerceptualToneCurve& userToneCurve = static_cast (customToneCurve1);
+ userToneCurve.initApplyState (ptc1ApplyState, params->icm.working);
}
if (hasToneCurve2 && curveMode2 == ToneCurveParams::TC_MODE_PERCEPTUAL) {
- const PerceptualToneCurve& userToneCurve = static_cast(customToneCurve2);
- userToneCurve.initApplyState(ptc2ApplyState, params->icm.working);
+ const PerceptualToneCurve& userToneCurve = static_cast (customToneCurve2);
+ userToneCurve.initApplyState (ptc2ApplyState, params->icm.working);
}
- bool hasColorToning = params->colorToning.enabled && bool(ctOpacityCurve) && bool(ctColorCurve);
+ bool hasColorToning = params->colorToning.enabled && bool (ctOpacityCurve) && bool (ctColorCurve);
// float satLimit = float(params->colorToning.satProtectionThreshold)/100.f*0.7f+0.3f;
// float satLimitOpacity = 1.f-(float(params->colorToning.saturatedOpacity)/100.f);
- float strProtect = (float(params->colorToning.strength) / 100.f);
+ float strProtect = (float (params->colorToning.strength) / 100.f);
/*
// Debug output - Color LUTf points
@@ -3201,52 +3178,52 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
}
*/
- float RedLow = (100.f + float(params->colorToning.redlow)) / 100.f; //printf("Rel=%f\n",RedLow);
- float GreenLow = (100.f + float(params->colorToning.greenlow)) / 100.f; //printf("Gre=%f\n",GreenLow);
- float BlueLow = (100.f + float(params->colorToning.bluelow)) / 100.f; //printf("Blu=%f\n",BlueLow);
- float RedMed = (100.f + float(params->colorToning.redmed)) / 100.f;
- float GreenMed = (100.f + float(params->colorToning.greenmed)) / 100.f;
- float BlueMed = (100.f + float(params->colorToning.bluemed)) / 100.f;
- float RedHigh = (100.f + float(params->colorToning.redhigh)) / 100.f; //printf("RedH=%f\n",RedHigh);
- float GreenHigh = (100.f + float(params->colorToning.greenhigh)) / 100.f;
- float BlueHigh = (100.f + float(params->colorToning.bluehigh)) / 100.f;
- float SatLow = float(params->colorToning.shadowsColSat.value[0]) / 100.f;
- float SatHigh = float(params->colorToning.hlColSat.value[0]) / 100.f;
+ float RedLow = (100.f + float (params->colorToning.redlow)) / 100.f; //printf("Rel=%f\n",RedLow);
+ float GreenLow = (100.f + float (params->colorToning.greenlow)) / 100.f; //printf("Gre=%f\n",GreenLow);
+ float BlueLow = (100.f + float (params->colorToning.bluelow)) / 100.f; //printf("Blu=%f\n",BlueLow);
+ float RedMed = (100.f + float (params->colorToning.redmed)) / 100.f;
+ float GreenMed = (100.f + float (params->colorToning.greenmed)) / 100.f;
+ float BlueMed = (100.f + float (params->colorToning.bluemed)) / 100.f;
+ float RedHigh = (100.f + float (params->colorToning.redhigh)) / 100.f; //printf("RedH=%f\n",RedHigh);
+ float GreenHigh = (100.f + float (params->colorToning.greenhigh)) / 100.f;
+ float BlueHigh = (100.f + float (params->colorToning.bluehigh)) / 100.f;
+ float SatLow = float (params->colorToning.shadowsColSat.value[0]) / 100.f;
+ float SatHigh = float (params->colorToning.hlColSat.value[0]) / 100.f;
- float Balan = float(params->colorToning.balance);
+ float Balan = float (params->colorToning.balance);
- float chMixRR = float(params->chmixer.red[0]);
- float chMixRG = float(params->chmixer.red[1]);
- float chMixRB = float(params->chmixer.red[2]);
- float chMixGR = float(params->chmixer.green[0]);
- float chMixGG = float(params->chmixer.green[1]);
- float chMixGB = float(params->chmixer.green[2]);
- float chMixBR = float(params->chmixer.blue[0]);
- float chMixBG = float(params->chmixer.blue[1]);
- float chMixBB = float(params->chmixer.blue[2]);
+ float chMixRR = float (params->chmixer.red[0]);
+ float chMixRG = float (params->chmixer.red[1]);
+ float chMixRB = float (params->chmixer.red[2]);
+ float chMixGR = float (params->chmixer.green[0]);
+ float chMixGG = float (params->chmixer.green[1]);
+ float chMixGB = float (params->chmixer.green[2]);
+ float chMixBR = float (params->chmixer.blue[0]);
+ float chMixBG = float (params->chmixer.blue[1]);
+ float chMixBB = float (params->chmixer.blue[2]);
int shHighlights = params->sh.highlights;
int shShadows = params->sh.shadows;
bool blackwhite = params->blackwhite.enabled;
bool complem = params->blackwhite.enabledcc;
- float bwr = float(params->blackwhite.mixerRed);
- float bwg = float(params->blackwhite.mixerGreen);
- float bwb = float(params->blackwhite.mixerBlue);
- float bwrgam = float(params->blackwhite.gammaRed);
- float bwggam = float(params->blackwhite.gammaGreen);
- float bwbgam = float(params->blackwhite.gammaBlue);
- float mixerOrange = float(params->blackwhite.mixerOrange);
- float mixerYellow = float(params->blackwhite.mixerYellow);
- float mixerCyan = float(params->blackwhite.mixerCyan);
- float mixerMagenta = float(params->blackwhite.mixerMagenta);
- float mixerPurple = float(params->blackwhite.mixerPurple);
+ float bwr = float (params->blackwhite.mixerRed);
+ float bwg = float (params->blackwhite.mixerGreen);
+ float bwb = float (params->blackwhite.mixerBlue);
+ float bwrgam = float (params->blackwhite.gammaRed);
+ float bwggam = float (params->blackwhite.gammaGreen);
+ float bwbgam = float (params->blackwhite.gammaBlue);
+ float mixerOrange = float (params->blackwhite.mixerOrange);
+ float mixerYellow = float (params->blackwhite.mixerYellow);
+ float mixerCyan = float (params->blackwhite.mixerCyan);
+ float mixerMagenta = float (params->blackwhite.mixerMagenta);
+ float mixerPurple = float (params->blackwhite.mixerPurple);
int algm = 0;
if (params->blackwhite.method == "Desaturation") {
algm = 0;
- } else if(params->blackwhite.method == "LumEqualizer") {
+ } else if (params->blackwhite.method == "LumEqualizer") {
algm = 1;
- } else if(params->blackwhite.method == "ChannelMixer") {
+ } else if (params->blackwhite.method == "ChannelMixer") {
algm = 2;
}
@@ -3260,15 +3237,15 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
double nb = 0;
bool computeMixerAuto = params->blackwhite.autoc && (autor < -5000.f);
- if(bwrgam < 0) {
+ if (bwrgam < 0) {
gamvalr = 100.f;
}
- if(bwggam < 0) {
+ if (bwggam < 0) {
gamvalg = 100.f;
}
- if(bwbgam < 0) {
+ if (bwbgam < 0) {
gamvalb = 100.f;
}
@@ -3284,19 +3261,16 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
bool hasgammabw = gammabwr != 1.f || gammabwg != 1.f || gammabwb != 1.f;
if (hasColorToning || blackwhite || (params->dirpyrequalizer.cbdlMethod == "bef" && params->dirpyrequalizer.enabled)) {
- tmpImage = new Imagefloat(working->getWidth(), working->getHeight());
+ tmpImage = new Imagefloat (working->getWidth(), working->getHeight());
}
- int W = working->getWidth();
- int H = working->getHeight();
-
// For tonecurve histogram
int toneCurveHistSize = histToneCurve ? histToneCurve.getSize() : 0;
- int histToneCurveCompression;
+ int histToneCurveCompression = 0;
- if(toneCurveHistSize > 0) {
+ if (toneCurveHistSize > 0) {
histToneCurve.clear();
- histToneCurveCompression = log2(65536 / toneCurveHistSize);
+ histToneCurveCompression = log2 (65536 / toneCurveHistSize);
}
@@ -3310,43 +3284,43 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
char *editIFloatBuffer = nullptr;
char *editWhateverBuffer = nullptr;
- buffer = (char *) malloc(3 * sizeof(float) * TS * TS + 20 * 64 + 63);
+ buffer = (char *) malloc (3 * sizeof (float) * TS * TS + 20 * 64 + 63);
char *data;
- data = (char*)( ( uintptr_t(buffer) + uintptr_t(63)) / 64 * 64);
+ data = (char*) ( ( uintptr_t (buffer) + uintptr_t (63)) / 64 * 64);
- float *rtemp = (float(*))data;
- float *gtemp = (float (*)) ((char*)rtemp + sizeof(float) * TS * TS + 4 * 64);
- float *btemp = (float (*)) ((char*)gtemp + sizeof(float) * TS * TS + 8 * 64);
+ float *rtemp = (float (*))data;
+ float *gtemp = (float (*)) ((char*)rtemp + sizeof (float) * TS * TS + 4 * 64);
+ float *btemp = (float (*)) ((char*)gtemp + sizeof (float) * TS * TS + 8 * 64);
int istart;
int jstart;
int tW;
int tH;
// Allocating buffer for the PipetteBuffer
- float *editIFloatTmpR, *editIFloatTmpG, *editIFloatTmpB, *editWhateverTmp;
+ float *editIFloatTmpR = nullptr, *editIFloatTmpG = nullptr, *editIFloatTmpB = nullptr, *editWhateverTmp = nullptr;
if (editImgFloat) {
- editIFloatBuffer = (char *) malloc(3 * sizeof(float) * TS * TS + 20 * 64 + 63);
- data = (char*)( ( uintptr_t(editIFloatBuffer) + uintptr_t(63)) / 64 * 64);
+ editIFloatBuffer = (char *) malloc (3 * sizeof (float) * TS * TS + 20 * 64 + 63);
+ data = (char*) ( ( uintptr_t (editIFloatBuffer) + uintptr_t (63)) / 64 * 64);
- editIFloatTmpR = (float(*))data;
- editIFloatTmpG = (float (*)) ((char*)editIFloatTmpR + sizeof(float) * TS * TS + 4 * 64);
- editIFloatTmpB = (float (*)) ((char*)editIFloatTmpG + sizeof(float) * TS * TS + 8 * 64);
+ editIFloatTmpR = (float (*))data;
+ editIFloatTmpG = (float (*)) ((char*)editIFloatTmpR + sizeof (float) * TS * TS + 4 * 64);
+ editIFloatTmpB = (float (*)) ((char*)editIFloatTmpG + sizeof (float) * TS * TS + 8 * 64);
}
if (editWhatever) {
- editWhateverBuffer = (char *) malloc(sizeof(float) * TS * TS + 20 * 64 + 63);
- data = (char*)( ( uintptr_t(editWhateverBuffer) + uintptr_t(63)) / 64 * 64);
+ editWhateverBuffer = (char *) malloc (sizeof (float) * TS * TS + 20 * 64 + 63);
+ data = (char*) ( ( uintptr_t (editWhateverBuffer) + uintptr_t (63)) / 64 * 64);
- editWhateverTmp = (float(*))data;
+ editWhateverTmp = (float (*))data;
}
float out_rgbx[4 * TS] ALIGNED16; // Line buffer for CLUT
LUTu histToneCurveThr;
- if(toneCurveHistSize > 0) {
- histToneCurveThr(toneCurveHistSize);
+ if (toneCurveHistSize > 0) {
+ histToneCurveThr (toneCurveHistSize);
histToneCurveThr.clear();
}
@@ -3354,19 +3328,19 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
#pragma omp for schedule(dynamic) collapse(2)
#endif
- for(int ii = 0; ii < working->getHeight(); ii += TS)
- for(int jj = 0; jj < working->getWidth(); jj += TS) {
+ for (int ii = 0; ii < working->getHeight(); ii += TS)
+ for (int jj = 0; jj < working->getWidth(); jj += TS) {
istart = ii;
jstart = jj;
- tH = min(ii + TS, working->getHeight());
- tW = min(jj + TS, working->getWidth());
+ tH = min (ii + TS, working->getHeight());
+ tW = min (jj + TS, working->getWidth());
for (int i = istart, ti = 0; i < tH; i++, ti++) {
for (int j = jstart, tj = 0; j < tW; j++, tj++) {
- rtemp[ti * TS + tj] = working->r(i, j);
- gtemp[ti * TS + tj] = working->g(i, j);
- btemp[ti * TS + tj] = working->b(i, j);
+ rtemp[ti * TS + tj] = working->r (i, j);
+ gtemp[ti * TS + tj] = working->g (i, j);
+ btemp[ti * TS + tj] = working->b (i, j);
}
}
@@ -3459,7 +3433,7 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
}
if (dcpProf) {
- dcpProf->step2ApplyTile(rtemp, gtemp, btemp, tW - jstart, tH - istart, TS, asIn);
+ dcpProf->step2ApplyTile (rtemp, gtemp, btemp, tW - jstart, tH - istart, TS, asIn);
}
for (int i = istart, ti = 0; i < tH; i++, ti++) {
@@ -3482,7 +3456,7 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
}
if (r > 65535 || g > 65535 || b > 65535) {
- filmlike_clip(&r, &g, &b);
+ filmlike_clip (&r, &g, &b);
}
rtemp[ti * TS + tj] = r;
@@ -3499,8 +3473,8 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
gtemp[ti * TS + tj] = tonecurve[ gtemp[ti * TS + tj] ];
btemp[ti * TS + tj] = tonecurve[ btemp[ti * TS + tj] ];
- if(histToneCurveThr) {
- int y = CLIP(lumimulf[0] * Color::gamma2curve[rtemp[ti * TS + tj]] + lumimulf[1] * Color::gamma2curve[gtemp[ti * TS + tj]] + lumimulf[2] * Color::gamma2curve[btemp[ti * TS + tj]]);
+ if (histToneCurveThr) {
+ int y = CLIP (lumimulf[0] * Color::gamma2curve[rtemp[ti * TS + tj]] + lumimulf[1] * Color::gamma2curve[gtemp[ti * TS + tj]] + lumimulf[2] * Color::gamma2curve[btemp[ti * TS + tj]]);
histToneCurveThr[y >> histToneCurveCompression]++;
}
}
@@ -3520,58 +3494,58 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
if (curveMode == ToneCurveParams::TC_MODE_STD) { // Standard
for (int i = istart, ti = 0; i < tH; i++, ti++) {
for (int j = jstart, tj = 0; j < tW; j++, tj++) {
- const StandardToneCurve& userToneCurve = static_cast(customToneCurve1);
- userToneCurve.Apply(rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
+ const StandardToneCurve& userToneCurve = static_cast (customToneCurve1);
+ userToneCurve.Apply (rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
}
}
} else if (curveMode == ToneCurveParams::TC_MODE_FILMLIKE) { // Adobe like
for (int i = istart, ti = 0; i < tH; i++, ti++) {
for (int j = jstart, tj = 0; j < tW; j++, tj++) {
- const AdobeToneCurve& userToneCurve = static_cast(customToneCurve1);
- userToneCurve.Apply(rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
+ const AdobeToneCurve& userToneCurve = static_cast (customToneCurve1);
+ userToneCurve.Apply (rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
}
}
} else if (curveMode == ToneCurveParams::TC_MODE_SATANDVALBLENDING) { // apply the curve on the saturation and value channels
for (int i = istart, ti = 0; i < tH; i++, ti++) {
for (int j = jstart, tj = 0; j < tW; j++, tj++) {
- const SatAndValueBlendingToneCurve& userToneCurve = static_cast(customToneCurve1);
- rtemp[ti * TS + tj] = CLIP(rtemp[ti * TS + tj]);
- gtemp[ti * TS + tj] = CLIP(gtemp[ti * TS + tj]);
- btemp[ti * TS + tj] = CLIP(btemp[ti * TS + tj]);
- userToneCurve.Apply(rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
+ const SatAndValueBlendingToneCurve& userToneCurve = static_cast (customToneCurve1);
+ rtemp[ti * TS + tj] = CLIP (rtemp[ti * TS + tj]);
+ gtemp[ti * TS + tj] = CLIP (gtemp[ti * TS + tj]);
+ btemp[ti * TS + tj] = CLIP (btemp[ti * TS + tj]);
+ userToneCurve.Apply (rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
}
}
} else if (curveMode == ToneCurveParams::TC_MODE_WEIGHTEDSTD) { // apply the curve to the rgb channels, weighted
- const WeightedStdToneCurve& userToneCurve = static_cast(customToneCurve1);
+ const WeightedStdToneCurve& userToneCurve = static_cast (customToneCurve1);
for (int i = istart, ti = 0; i < tH; i++, ti++) {
for (int j = jstart, tj = 0; j < tW; j++, tj++) {
- rtemp[ti * TS + tj] = CLIP(rtemp[ti * TS + tj]);
- gtemp[ti * TS + tj] = CLIP(gtemp[ti * TS + tj]);
- btemp[ti * TS + tj] = CLIP(btemp[ti * TS + tj]);
- userToneCurve.Apply(rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
+ rtemp[ti * TS + tj] = CLIP (rtemp[ti * TS + tj]);
+ gtemp[ti * TS + tj] = CLIP (gtemp[ti * TS + tj]);
+ btemp[ti * TS + tj] = CLIP (btemp[ti * TS + tj]);
+ userToneCurve.Apply (rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
}
}
} else if (curveMode == ToneCurveParams::TC_MODE_LUMINANCE) { // apply the curve to the luminance channel
- const LuminanceToneCurve& userToneCurve = static_cast(customToneCurve1);
+ const LuminanceToneCurve& userToneCurve = static_cast (customToneCurve1);
for (int i = istart, ti = 0; i < tH; i++, ti++) {
for (int j = jstart, tj = 0; j < tW; j++, tj++) {
- rtemp[ti * TS + tj] = CLIP(rtemp[ti * TS + tj]);
- gtemp[ti * TS + tj] = CLIP(gtemp[ti * TS + tj]);
- btemp[ti * TS + tj] = CLIP(btemp[ti * TS + tj]);
- userToneCurve.Apply(rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
+ rtemp[ti * TS + tj] = CLIP (rtemp[ti * TS + tj]);
+ gtemp[ti * TS + tj] = CLIP (gtemp[ti * TS + tj]);
+ btemp[ti * TS + tj] = CLIP (btemp[ti * TS + tj]);
+ userToneCurve.Apply (rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
}
}
} else if (curveMode == ToneCurveParams::TC_MODE_PERCEPTUAL) { // apply curve while keeping color appearance constant
- const PerceptualToneCurve& userToneCurve = static_cast(customToneCurve1);
+ const PerceptualToneCurve& userToneCurve = static_cast (customToneCurve1);
for (int i = istart, ti = 0; i < tH; i++, ti++) {
for (int j = jstart, tj = 0; j < tW; j++, tj++) {
- rtemp[ti * TS + tj] = CLIP(rtemp[ti * TS + tj]);
- gtemp[ti * TS + tj] = CLIP(gtemp[ti * TS + tj]);
- btemp[ti * TS + tj] = CLIP(btemp[ti * TS + tj]);
- userToneCurve.Apply(rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj], ptc1ApplyState);
+ rtemp[ti * TS + tj] = CLIP (rtemp[ti * TS + tj]);
+ gtemp[ti * TS + tj] = CLIP (gtemp[ti * TS + tj]);
+ btemp[ti * TS + tj] = CLIP (btemp[ti * TS + tj]);
+ userToneCurve.Apply (rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj], ptc1ApplyState);
}
}
}
@@ -3591,46 +3565,46 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
if (curveMode2 == ToneCurveParams::TC_MODE_STD) { // Standard
for (int i = istart, ti = 0; i < tH; i++, ti++) {
for (int j = jstart, tj = 0; j < tW; j++, tj++) {
- const StandardToneCurve& userToneCurve = static_cast(customToneCurve2);
- userToneCurve.Apply(rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
+ const StandardToneCurve& userToneCurve = static_cast (customToneCurve2);
+ userToneCurve.Apply (rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
}
}
} else if (curveMode2 == ToneCurveParams::TC_MODE_FILMLIKE) { // Adobe like
for (int i = istart, ti = 0; i < tH; i++, ti++) {
for (int j = jstart, tj = 0; j < tW; j++, tj++) {
- const AdobeToneCurve& userToneCurve = static_cast(customToneCurve2);
- userToneCurve.Apply(rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
+ const AdobeToneCurve& userToneCurve = static_cast (customToneCurve2);
+ userToneCurve.Apply (rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
}
}
} else if (curveMode2 == ToneCurveParams::TC_MODE_SATANDVALBLENDING) { // apply the curve on the saturation and value channels
for (int i = istart, ti = 0; i < tH; i++, ti++) {
for (int j = jstart, tj = 0; j < tW; j++, tj++) {
- const SatAndValueBlendingToneCurve& userToneCurve = static_cast(customToneCurve2);
- userToneCurve.Apply(rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
+ const SatAndValueBlendingToneCurve& userToneCurve = static_cast (customToneCurve2);
+ userToneCurve.Apply (rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
}
}
} else if (curveMode2 == ToneCurveParams::TC_MODE_WEIGHTEDSTD) { // apply the curve to the rgb channels, weighted
- const WeightedStdToneCurve& userToneCurve = static_cast(customToneCurve2);
+ const WeightedStdToneCurve& userToneCurve = static_cast (customToneCurve2);
for (int i = istart, ti = 0; i < tH; i++, ti++) {
for (int j = jstart, tj = 0; j < tW; j++, tj++) {
- userToneCurve.Apply(rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
+ userToneCurve.Apply (rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
}
}
} else if (curveMode2 == ToneCurveParams::TC_MODE_LUMINANCE) { // apply the curve to the luminance channel
- const LuminanceToneCurve& userToneCurve = static_cast(customToneCurve2);
+ const LuminanceToneCurve& userToneCurve = static_cast (customToneCurve2);
for (int i = istart, ti = 0; i < tH; i++, ti++) {
for (int j = jstart, tj = 0; j < tW; j++, tj++) {
- userToneCurve.Apply(rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
+ userToneCurve.Apply (rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
}
}
} else if (curveMode2 == ToneCurveParams::TC_MODE_PERCEPTUAL) { // apply curve while keeping color appearance constant
- const PerceptualToneCurve& userToneCurve = static_cast(customToneCurve2);
+ const PerceptualToneCurve& userToneCurve = static_cast (customToneCurve2);
for (int i = istart, ti = 0; i < tH; i++, ti++) {
for (int j = jstart, tj = 0; j < tW; j++, tj++) {
- userToneCurve.Apply(rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj], ptc2ApplyState);
+ userToneCurve.Apply (rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj], ptc2ApplyState);
}
}
}
@@ -3691,9 +3665,9 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
float y = toxyz[1][0] * r + toxyz[1][1] * g + toxyz[1][2] * b;
float z = toxyz[2][0] * r + toxyz[2][1] * g + toxyz[2][2] * b;
- float fx = x < MAXVALF ? Color::cachef[x] : 327.68f * std::cbrt(x / MAXVALF);
- float fy = y < MAXVALF ? Color::cachef[y] : 327.68f * std::cbrt(y / MAXVALF);
- float fz = z < MAXVALF ? Color::cachef[z] : 327.68f * std::cbrt(z / MAXVALF);
+ float fx = x < MAXVALF ? Color::cachef[x] : 327.68f * std::cbrt (x / MAXVALF);
+ float fy = y < MAXVALF ? Color::cachef[y] : 327.68f * std::cbrt (y / MAXVALF);
+ float fz = z < MAXVALF ? Color::cachef[z] : 327.68f * std::cbrt (z / MAXVALF);
float a_1 = 500.0f * (fx - fy);
float b_1 = 200.0f * (fy - fz);
@@ -3717,19 +3691,19 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
// Luminosity after
// only Luminance in Lab
float newy = toxyz[1][0] * r + toxyz[1][1] * g + toxyz[1][2] * b;
- float newfy = newy < MAXVALF ? Color::cachef[newy] : 327.68f * std::cbrt(newy / MAXVALF);
+ float newfy = newy < MAXVALF ? Color::cachef[newy] : 327.68f * std::cbrt (newy / MAXVALF);
float L_2 = 116.0f * newfy - 5242.88f;
//gamut control
- if(settings->rgbcurveslumamode_gamut) {
+ if (settings->rgbcurveslumamode_gamut) {
float Lpro = L_2 / 327.68f;
- float Chpro = sqrtf(SQR(a_1) + SQR(b_1)) / 327.68f;
+ float Chpro = sqrtf (SQR (a_1) + SQR (b_1)) / 327.68f;
float HH = NAN; // we set HH to NAN, because then it will be calculated in Color::gamutLchonly only if needed
// float HH = xatan2f(b_1, a_1);
// According to mathematical laws we can get the sin and cos of HH by simple operations even if we don't calculate HH
float2 sincosval;
- if(Chpro == 0.0f) {
+ if (Chpro == 0.0f) {
sincosval.y = 1.0f;
sincosval.x = 0.0f;
} else {
@@ -3741,17 +3715,17 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
bool neg = false;
bool more_rgb = false;
//gamut control : Lab values are in gamut
- Color::gamutLchonly(HH, sincosval, Lpro, Chpro, rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj], wip, highlight, 0.15f, 0.96f, neg, more_rgb);
+ Color::gamutLchonly (HH, sincosval, Lpro, Chpro, rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj], wip, highlight, 0.15f, 0.96f, neg, more_rgb);
#else
//gamut control : Lab values are in gamut
- Color::gamutLchonly(HH, sincosval, Lpro, Chpro, rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj], wip, highlight, 0.15f, 0.96f);
+ Color::gamutLchonly (HH, sincosval, Lpro, Chpro, rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj], wip, highlight, 0.15f, 0.96f);
#endif
//end of gamut control
} else {
float x_, y_, z_;
//calculate RGB with L_2 and old value of a and b
- Color::Lab2XYZ(L_2, a_1, b_1, x_, y_, z_) ;
- Color::xyz2rgb(x_, y_, z_, rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj], wip);
+ Color::Lab2XYZ (L_2, a_1, b_1, x_, y_, z_) ;
+ Color::xyz2rgb (x_, y_, z_, rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj], wip);
}
}
}
@@ -3762,7 +3736,7 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
for (int i = istart, ti = 0; i < tH; i++, ti++) {
for (int j = jstart, tj = 0; j < tW; j++, tj++) {
float h, s, v;
- Color::rgb2hsv(rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj], h, s, v);
+ Color::rgb2hsv (rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj], h, s, v);
editWhateverTmp[ti * TS + tj] = h;
}
}
@@ -3777,10 +3751,10 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
float g = gtemp[ti * TS + tj];
float b = btemp[ti * TS + tj];
float h, s, v;
- Color::rgb2hsv(r, g, b, h, s, v);
+ Color::rgb2hsv (r, g, b, h, s, v);
if (sat > 0) {
- s = (1.f - satby100) * s + satby100 * (1.f - SQR(SQR(1.f - min(s, 1.0f))));
+ s = (1.f - satby100) * s + satby100 * (1.f - SQR (SQR (1.f - min (s, 1.0f))));
if (s < 0.f) {
s = 0.f;
@@ -3791,7 +3765,7 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
//HSV equalizer
if (hCurveEnabled) {
- h = (hCurve->getVal(double(h)) - 0.5) * 2.f + h;
+ h = (hCurve->getVal (double (h)) - 0.5) * 2.f + h;
if (h > 1.0f) {
h -= 1.0f;
@@ -3802,10 +3776,10 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
if (sCurveEnabled) {
//shift saturation
- float satparam = (sCurve->getVal(double(h)) - 0.5) * 2;
+ float satparam = (sCurve->getVal (double (h)) - 0.5) * 2;
if (satparam > 0.00001f) {
- s = (1.f - satparam) * s + satparam * (1.f - SQR(1.f - min(s, 1.0f)));
+ s = (1.f - satparam) * s + satparam * (1.f - SQR (1.f - min (s, 1.0f)));
if (s < 0.f) {
s = 0.f;
@@ -3822,11 +3796,11 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
}
//shift value
- float valparam = vCurve->getVal((double)h) - 0.5f;
- valparam *= (1.f - SQR(SQR(1.f - min(s, 1.0f))));
+ float valparam = vCurve->getVal ((double)h) - 0.5f;
+ valparam *= (1.f - SQR (SQR (1.f - min (s, 1.0f))));
if (valparam > 0.00001f) {
- v = (1.f - valparam) * v + valparam * (1.f - SQR(1.f - min(v, 1.0f))); // SQR (SQR to increase action and avoid artefacts
+ v = (1.f - valparam) * v + valparam * (1.f - SQR (1.f - min (v, 1.0f))); // SQR (SQR to increase action and avoid artefacts
if (v < 0) {
v = 0;
@@ -3839,7 +3813,7 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
}
- Color::hsv2rgb(h, s, v, rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
+ Color::hsv2rgb (h, s, v, rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
}
}
}
@@ -3850,12 +3824,12 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
float r = rtemp[ti * TS + tj];
float g = gtemp[ti * TS + tj];
- if(r == 0.0f || g == 0.0f) {
+ if (r == 0.0f || g == 0.0f) {
float b = btemp[ti * TS + tj];
float h, s, v;
- Color::rgb2hsv(r, g, b, h, s, v);
+ Color::rgb2hsv (r, g, b, h, s, v);
s *= 0.99f;
- Color::hsv2rgb(h, s, v, rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
+ Color::hsv2rgb (h, s, v, rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
}
}
}
@@ -3867,7 +3841,7 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
float reducac = 0.4f;
int preser = 0;
- if(params->colorToning.lumamode) {
+ if (params->colorToning.lumamode) {
preser = 1;
}
@@ -3881,14 +3855,14 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
iplow = (float)ctColorCurve.low;
iphigh = (float)ctColorCurve.high;
//2 colours
- ctColorCurve.getVal(iphigh, xh, yh, zh);
- ctColorCurve.getVal(iplow, xl, yl, zl);
+ ctColorCurve.getVal (iphigh, xh, yh, zh);
+ ctColorCurve.getVal (iplow, xl, yl, zl);
- Color::xyz2rgb(xh, yh, zh, rh, gh, bh, wip);
- Color::xyz2rgb(xl, yl, zl, rl, gl, bl, wip);
+ Color::xyz2rgb (xh, yh, zh, rh, gh, bh, wip);
+ Color::xyz2rgb (xl, yl, zl, rl, gl, bl, wip);
//reteave rgb value with s and l =1
- retreavergb(rl, gl, bl);
- retreavergb(rh, gh, bh);
+ retreavergb (rl, gl, bl);
+ retreavergb (rh, gh, bh);
//printf("rl=%f gl=%f bl=%f\n",rl,gl,bl);
for (int i = istart, ti = 0; i < tH; i++, ti++) {
@@ -3928,7 +3902,7 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
int preser = 0;
//bool execbal = params->colorToning.method=="Splitbal";
- if(params->colorToning.lumamode) {
+ if (params->colorToning.lumamode) {
preser = 1;
}
@@ -3944,16 +3918,16 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
float lumafter = 0.299f * ro + 0.587f * go + 0.114f * bo;
float preserv = 1.f;
- if(preser == 1) {
+ if (preser == 1) {
preserv = lumbefore / lumafter;
}
ro *= preserv;
go *= preserv;
bo *= preserv;
- ro = CLIP(ro);
- go = CLIP(go);
- bo = CLIP(bo);
+ ro = CLIP (ro);
+ go = CLIP (go);
+ bo = CLIP (bo);
rtemp[ti * TS + tj] = ro;
gtemp[ti * TS + tj] = go;
btemp[ti * TS + tj] = bo;
@@ -3967,7 +3941,7 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
else if (params->colorToning.method == "Lab" && opautili) {
int algm = 0;
bool twocol = true;//true=500 color false=2 color
- int metchrom;
+ int metchrom = 0;
if (params->colorToning.twocolor == "Std" ) {
metchrom = 0;
@@ -3979,13 +3953,13 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
metchrom = 3;
}
- if(metchrom == 3) {
+ if (metchrom == 3) {
twocol = false;
}
- float iplow, iphigh;
+ float iplow = 0.f, iphigh = 0.f;
- if(!twocol) {
+ if (!twocol) {
iplow = (float)ctColorCurve.low;
iphigh = (float)ctColorCurve.high;
}
@@ -4012,13 +3986,13 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
float b = btemp[ti * TS + tj];
float ro, go, bo;
labtoning (r, g, b, ro, go, bo, algm, metchrom, twoc, satLimit, satLimitOpacity, ctColorCurve, ctOpacityCurve, clToningcurve, cl2Toningcurve, iplow, iphigh, wp, wip);
- rtemp[ti * TS + tj] = CLIP(ro); //I used CLIP because there is a little bug in gamutLchonly that return 65536.ii intead of 65535 ==> crash
- gtemp[ti * TS + tj] = CLIP(go);
- btemp[ti * TS + tj] = CLIP(bo);
+ rtemp[ti * TS + tj] = CLIP (ro); //I used CLIP because there is a little bug in gamutLchonly that return 65536.ii intead of 65535 ==> crash
+ gtemp[ti * TS + tj] = CLIP (go);
+ btemp[ti * TS + tj] = CLIP (bo);
}
}
}
- } else if (params->colorToning.method.substr(0, 3) == "RGB" && opautili) {
+ } else if (params->colorToning.method.substr (0, 3) == "RGB" && opautili) {
// color toning
for (int i = istart, ti = 0; i < tH; i++, ti++) {
for (int j = jstart, tj = 0; j < tW; j++, tj++) {
@@ -4029,28 +4003,28 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
// Luminance = (0.299f*r + 0.587f*g + 0.114f*b)
float h, s, l;
- Color::rgb2hsl(r, g, b, h, s, l);
+ Color::rgb2hsl (r, g, b, h, s, l);
- float l_ = Color::gamma_srgb(l * 65535.f) / 65535.f;
+ float l_ = Color::gamma_srgb (l * 65535.f) / 65535.f;
// get the opacity and tweak it to preserve saturated colors
float opacity;
- if(ctOpacityCurve) {
- opacity = (1.f - min(s / satLimit, 1.f) * (1.f - satLimitOpacity)) * ctOpacityCurve.lutOpacityCurve[l_ * 500.f];
+ if (ctOpacityCurve) {
+ opacity = (1.f - min (s / satLimit, 1.f) * (1.f - satLimitOpacity)) * ctOpacityCurve.lutOpacityCurve[l_ * 500.f];
}
- if(!ctOpacityCurve) {
+ if (!ctOpacityCurve) {
opacity = 0.f;
}
float r2, g2, b2;
- ctColorCurve.getVal(l_, r2, g2, b2); // get the color from the color curve
+ ctColorCurve.getVal (l_, r2, g2, b2); // get the color from the color curve
float h2, s2, l2;
- Color::rgb2hsl(r2, g2, b2, h2, s2, l2); // transform this new color to hsl
+ Color::rgb2hsl (r2, g2, b2, h2, s2, l2); // transform this new color to hsl
- Color::hsl2rgb(h2, s + ((1.f - s) * (1.f - l) * 0.7f), l, r2, g2, b2);
+ Color::hsl2rgb (h2, s + ((1.f - s) * (1.f - l) * 0.7f), l, r2, g2, b2);
rtemp[ti * TS + tj] = r + (r2 - r) * opacity; // merge the color to the old color, depending on the opacity
gtemp[ti * TS + tj] = g + (g2 - g) * opacity;
@@ -4074,53 +4048,53 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
for (int j = jstart, tj = 0; j < tW; j++, tj++) {
float X, Y, Z, L, aa, bb;
//rgb=>lab
- Color::rgbxyz(rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj], X, Y, Z, wp);
+ Color::rgbxyz (rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj], X, Y, Z, wp);
//convert Lab
- Color::XYZ2Lab(X, Y, Z, L, aa, bb);
+ Color::XYZ2Lab (X, Y, Z, L, aa, bb);
//end rgb=>lab
- float HH = xatan2f(bb, aa); // HH hue in -3.141 +3.141
+ float HH = xatan2f (bb, aa); // HH hue in -3.141 +3.141
- editWhateverTmp[ti * TS + tj] = float(Color::huelab_to_huehsv2(HH));
+ editWhateverTmp[ti * TS + tj] = float (Color::huelab_to_huehsv2 (HH));
}
}
}
//black and white
- if(blackwhite) {
+ if (blackwhite) {
if (hasToneCurvebw1) {
if (beforeCurveMode == BlackWhiteParams::TC_MODE_STD_BW) { // Standard
for (int i = istart, ti = 0; i < tH; i++, ti++) {
for (int j = jstart, tj = 0; j < tW; j++, tj++) {
- const StandardToneCurvebw& userToneCurvebw = static_cast(customToneCurvebw1);
- userToneCurvebw.Apply(rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
+ const StandardToneCurvebw& userToneCurvebw = static_cast (customToneCurvebw1);
+ userToneCurvebw.Apply (rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
}
}
} else if (beforeCurveMode == BlackWhiteParams::TC_MODE_FILMLIKE_BW) { // Adobe like
for (int i = istart, ti = 0; i < tH; i++, ti++) {
for (int j = jstart, tj = 0; j < tW; j++, tj++) {
- const AdobeToneCurvebw& userToneCurvebw = static_cast(customToneCurvebw1);
- userToneCurvebw.Apply(rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
+ const AdobeToneCurvebw& userToneCurvebw = static_cast (customToneCurvebw1);
+ userToneCurvebw.Apply (rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
}
}
} else if (beforeCurveMode == BlackWhiteParams::TC_MODE_SATANDVALBLENDING_BW) { // apply the curve on the saturation and value channels
for (int i = istart, ti = 0; i < tH; i++, ti++) {
for (int j = jstart, tj = 0; j < tW; j++, tj++) {
- const SatAndValueBlendingToneCurvebw& userToneCurvebw = static_cast(customToneCurvebw1);
- rtemp[ti * TS + tj] = CLIP(rtemp[ti * TS + tj]);
- gtemp[ti * TS + tj] = CLIP(gtemp[ti * TS + tj]);
- btemp[ti * TS + tj] = CLIP(btemp[ti * TS + tj]);
- userToneCurvebw.Apply(rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
+ const SatAndValueBlendingToneCurvebw& userToneCurvebw = static_cast (customToneCurvebw1);
+ rtemp[ti * TS + tj] = CLIP (rtemp[ti * TS + tj]);
+ gtemp[ti * TS + tj] = CLIP (gtemp[ti * TS + tj]);
+ btemp[ti * TS + tj] = CLIP (btemp[ti * TS + tj]);
+ userToneCurvebw.Apply (rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
}
}
} else if (beforeCurveMode == BlackWhiteParams::TC_MODE_WEIGHTEDSTD_BW) { // apply the curve to the rgb channels, weighted
for (int i = istart, ti = 0; i < tH; i++, ti++) {
for (int j = jstart, tj = 0; j < tW; j++, tj++) {
- const WeightedStdToneCurvebw& userToneCurvebw = static_cast(customToneCurvebw1);
- rtemp[ti * TS + tj] = CLIP(rtemp[ti * TS + tj]);
- gtemp[ti * TS + tj] = CLIP(gtemp[ti * TS + tj]);
- btemp[ti * TS + tj] = CLIP(btemp[ti * TS + tj]);
+ const WeightedStdToneCurvebw& userToneCurvebw = static_cast (customToneCurvebw1);
+ rtemp[ti * TS + tj] = CLIP (rtemp[ti * TS + tj]);
+ gtemp[ti * TS + tj] = CLIP (gtemp[ti * TS + tj]);
+ btemp[ti * TS + tj] = CLIP (btemp[ti * TS + tj]);
- userToneCurvebw.Apply(rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
+ userToneCurvebw.Apply (rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj]);
}
}
}
@@ -4176,15 +4150,15 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
for (int j = jstart, tj = 0; j < tW; j++, tj++) {
//rgb => xyz
float X, Y, Z;
- Color::rgbxyz(rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj], X, Y, Z, wp);
+ Color::rgbxyz (rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj], X, Y, Z, wp);
//xyz => Lab
float L, aa, bb;
- Color::XYZ2Lab(X, Y, Z, L, aa, bb);
- float CC = sqrtf(SQR(aa) + SQR(bb)) / 327.68f; //CC chromaticity in 0..180 or more
- float HH = xatan2f(bb, aa); // HH hue in -3.141 +3.141
+ Color::XYZ2Lab (X, Y, Z, L, aa, bb);
+ float CC = sqrtf (SQR (aa) + SQR (bb)) / 327.68f; //CC chromaticity in 0..180 or more
+ float HH = xatan2f (bb, aa); // HH hue in -3.141 +3.141
float2 sincosval;
- if(CC == 0.0f) {
+ if (CC == 0.0f) {
sincosval.y = 1.f;
sincosval.x = 0.0f;
} else {
@@ -4194,14 +4168,14 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
if (bwlCurveEnabled) {
L /= 32768.f;
- double hr = Color::huelab_to_huehsv2(HH);
- float valparam = float((bwlCurve->getVal(hr) - 0.5f) * 2.0f); //get l_r=f(H)
+ double hr = Color::huelab_to_huehsv2 (HH);
+ float valparam = float ((bwlCurve->getVal (hr) - 0.5f) * 2.0f); //get l_r=f(H)
float kcc = (CC / 70.f); //take Chroma into account...70 "middle" of chromaticity (arbitrary and simple), one can imagine other algorithme
//reduct action for low chroma and increase action for high chroma
valparam *= kcc;
- if(valparam > 0.f) {
- L = (1.f - valparam) * L + valparam * (1.f - SQR(SQR(SQR(SQR(1.f - min(L, 1.0f)))))); // SQR (SQR((SQR) to increase action in low light
+ if (valparam > 0.f) {
+ L = (1.f - valparam) * L + valparam * (1.f - SQR (SQR (SQR (SQR (1.f - min (L, 1.0f)))))); // SQR (SQR((SQR) to increase action in low light
} else {
L *= (1.f + valparam); //for negative
}
@@ -4215,16 +4189,16 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
bool neg = false;
bool more_rgb = false;
//gamut control : Lab values are in gamut
- Color::gamutLchonly(HH, sincosval, L, CC, RR, GG, BB, wip, highlight, 0.15f, 0.96f, neg, more_rgb);
+ Color::gamutLchonly (HH, sincosval, L, CC, RR, GG, BB, wip, highlight, 0.15f, 0.96f, neg, more_rgb);
#else
//gamut control : Lab values are in gamut
- Color::gamutLchonly(HH, sincosval, L, CC, RR, GG, BB, wip, highlight, 0.15f, 0.96f);
+ Color::gamutLchonly (HH, sincosval, L, CC, RR, GG, BB, wip, highlight, 0.15f, 0.96f);
#endif
L *= 327.68f;
//convert l => rgb
- Color::L2XYZ(L, X, Y, Z);
+ Color::L2XYZ (L, X, Y, Z);
float newRed; // We use the red channel for bw
- Color::xyz2r(X, Y, Z, newRed, wip);
+ Color::xyz2r (X, Y, Z, newRed, wip);
rtemp[ti * TS + tj] = gtemp[ti * TS + tj] = btemp[ti * TS + tj] = newRed;
#ifndef __SSE2__
@@ -4261,19 +4235,19 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
#ifdef __SSE2__
for (; j < tW - 3; j += 4, tj += 4) {
- vfloat sourceR = LVF(rtemp[ti * TS + tj]);
- vfloat sourceG = LVF(gtemp[ti * TS + tj]);
- vfloat sourceB = LVF(btemp[ti * TS + tj]);
+ vfloat sourceR = LVF (rtemp[ti * TS + tj]);
+ vfloat sourceG = LVF (gtemp[ti * TS + tj]);
+ vfloat sourceB = LVF (btemp[ti * TS + tj]);
vfloat x;
vfloat y;
vfloat z;
- Color::rgbxyz(sourceR, sourceG, sourceB, x, y, z, v_work2xyz);
- Color::xyz2rgb(x, y, z, sourceR, sourceG, sourceB, v_xyz2clut);
+ Color::rgbxyz (sourceR, sourceG, sourceB, x, y, z, v_work2xyz);
+ Color::xyz2rgb (x, y, z, sourceR, sourceG, sourceB, v_xyz2clut);
- STVF(rtemp[ti * TS + tj], sourceR);
- STVF(gtemp[ti * TS + tj], sourceG);
- STVF(btemp[ti * TS + tj], sourceB);
+ STVF (rtemp[ti * TS + tj], sourceR);
+ STVF (gtemp[ti * TS + tj], sourceG);
+ STVF (btemp[ti * TS + tj], sourceB);
}
#endif
@@ -4284,8 +4258,8 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
float &sourceB = btemp[ti * TS + tj];
float x, y, z;
- Color::rgbxyz( sourceR, sourceG, sourceB, x, y, z, wprof );
- Color::xyz2rgb(x, y, z, sourceR, sourceG, sourceB, xyz2clut);
+ Color::rgbxyz ( sourceR, sourceG, sourceB, x, y, z, wprof );
+ Color::xyz2rgb (x, y, z, sourceR, sourceG, sourceB, xyz2clut);
}
}
@@ -4295,15 +4269,15 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
float &sourceB = btemp[ti * TS + tj];
// Apply gamma sRGB (default RT)
- sourceR = Color::gamma_srgbclipped(sourceR);
- sourceG = Color::gamma_srgbclipped(sourceG);
- sourceB = Color::gamma_srgbclipped(sourceB);
+ sourceR = Color::gamma_srgbclipped (sourceR);
+ sourceG = Color::gamma_srgbclipped (sourceG);
+ sourceB = Color::gamma_srgbclipped (sourceB);
}
const std::size_t line_offset = ti * TS;
- hald_clut->getRGB(
+ hald_clut->getRGB (
film_simulation_strength,
- std::min(TS, tW - jstart),
+ std::min (TS, tW - jstart),
rtemp + line_offset,
gtemp + line_offset,
btemp + line_offset,
@@ -4316,9 +4290,9 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
float &sourceB = btemp[ti * TS + tj];
// Apply inverse gamma sRGB
- sourceR = Color::igamma_srgb(out_rgbx[tj * 4 + 0]);
- sourceG = Color::igamma_srgb(out_rgbx[tj * 4 + 1]);
- sourceB = Color::igamma_srgb(out_rgbx[tj * 4 + 2]);
+ sourceR = Color::igamma_srgb (out_rgbx[tj * 4 + 0]);
+ sourceG = Color::igamma_srgb (out_rgbx[tj * 4 + 1]);
+ sourceB = Color::igamma_srgb (out_rgbx[tj * 4 + 2]);
}
if (!clutAndWorkingProfilesAreSame) {
@@ -4329,19 +4303,19 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
#ifdef __SSE2__
for (; j < tW - 3; j += 4, tj += 4) {
- vfloat sourceR = LVF(rtemp[ti * TS + tj]);
- vfloat sourceG = LVF(gtemp[ti * TS + tj]);
- vfloat sourceB = LVF(btemp[ti * TS + tj]);
+ vfloat sourceR = LVF (rtemp[ti * TS + tj]);
+ vfloat sourceG = LVF (gtemp[ti * TS + tj]);
+ vfloat sourceB = LVF (btemp[ti * TS + tj]);
vfloat x;
vfloat y;
vfloat z;
- Color::rgbxyz(sourceR, sourceG, sourceB, x, y, z, v_clut2xyz);
- Color::xyz2rgb(x, y, z, sourceR, sourceG, sourceB, v_xyz2work);
+ Color::rgbxyz (sourceR, sourceG, sourceB, x, y, z, v_clut2xyz);
+ Color::xyz2rgb (x, y, z, sourceR, sourceG, sourceB, v_xyz2work);
- STVF(rtemp[ti * TS + tj], sourceR);
- STVF(gtemp[ti * TS + tj], sourceG);
- STVF(btemp[ti * TS + tj], sourceB);
+ STVF (rtemp[ti * TS + tj], sourceR);
+ STVF (gtemp[ti * TS + tj], sourceG);
+ STVF (btemp[ti * TS + tj], sourceB);
}
#endif
@@ -4352,8 +4326,8 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
float &sourceB = btemp[ti * TS + tj];
float x, y, z;
- Color::rgbxyz(sourceR, sourceG, sourceB, x, y, z, clut2xyz);
- Color::xyz2rgb( x, y, z, sourceR, sourceG, sourceB, wiprof );
+ Color::rgbxyz (sourceR, sourceG, sourceB, x, y, z, clut2xyz);
+ Color::xyz2rgb ( x, y, z, sourceR, sourceG, sourceB, wiprof );
}
}
}
@@ -4367,11 +4341,11 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
// filling the pipette buffer by the content of the temp pipette buffers
if (editImgFloat) {
- editImgFloat->r(i, j) = editIFloatTmpR[ti * TS + tj];
- editImgFloat->g(i, j) = editIFloatTmpG[ti * TS + tj];
- editImgFloat->b(i, j) = editIFloatTmpB[ti * TS + tj];
+ editImgFloat->r (i, j) = editIFloatTmpR[ti * TS + tj];
+ editImgFloat->g (i, j) = editIFloatTmpG[ti * TS + tj];
+ editImgFloat->b (i, j) = editIFloatTmpB[ti * TS + tj];
} else if (editWhatever) {
- editWhatever->v(i, j) = editWhateverTmp[ti * TS + tj];
+ editWhatever->v (i, j) = editWhateverTmp[ti * TS + tj];
}
float r = rtemp[ti * TS + tj];
@@ -4384,9 +4358,9 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
float fx, fy, fz;
- fx = (x < 65535.0f ? Color::cachef[x] : 327.68f * std::cbrt(x / MAXVALF));
- fy = (y < 65535.0f ? Color::cachef[y] : 327.68f * std::cbrt(y / MAXVALF));
- fz = (z < 65535.0f ? Color::cachef[z] : 327.68f * std::cbrt(z / MAXVALF));
+ fx = (x < 65535.0f ? Color::cachef[x] : 327.68f * std::cbrt (x / MAXVALF));
+ fy = (y < 65535.0f ? Color::cachef[y] : 327.68f * std::cbrt (y / MAXVALF));
+ fz = (z < 65535.0f ? Color::cachef[z] : 327.68f * std::cbrt (z / MAXVALF));
lab->L[i][j] = (116.0f * fy - 5242.88f); //5242.88=16.0*327.68;
lab->a[i][j] = (500.0f * (fx - fy) );
@@ -4415,22 +4389,22 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
for (int j = jstart, tj = 0; j < tW; j++, tj++) {
// filling the pipette buffer by the content of the temp pipette buffers
if (editImgFloat) {
- editImgFloat->r(i, j) = editIFloatTmpR[ti * TS + tj];
- editImgFloat->g(i, j) = editIFloatTmpG[ti * TS + tj];
- editImgFloat->b(i, j) = editIFloatTmpB[ti * TS + tj];
+ editImgFloat->r (i, j) = editIFloatTmpR[ti * TS + tj];
+ editImgFloat->g (i, j) = editIFloatTmpG[ti * TS + tj];
+ editImgFloat->b (i, j) = editIFloatTmpB[ti * TS + tj];
} else if (editWhatever) {
- editWhatever->v(i, j) = editWhateverTmp[ti * TS + tj];
+ editWhatever->v (i, j) = editWhateverTmp[ti * TS + tj];
}
- tmpImage->r(i, j) = rtemp[ti * TS + tj];
- tmpImage->g(i, j) = gtemp[ti * TS + tj];
- tmpImage->b(i, j) = btemp[ti * TS + tj];
+ tmpImage->r (i, j) = rtemp[ti * TS + tj];
+ tmpImage->g (i, j) = gtemp[ti * TS + tj];
+ tmpImage->b (i, j) = btemp[ti * TS + tj];
}
}
}
}
- free(buffer);
+ free (buffer);
if (editIFloatBuffer) {
free (editIFloatBuffer);
@@ -4443,7 +4417,7 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
#ifdef _OPENMP
#pragma omp critical
{
- if(toneCurveHistSize > 0) {
+ if (toneCurveHistSize > 0) {
histToneCurve += histToneCurveThr;
}
}
@@ -4465,9 +4439,9 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
for (int i = 0; i < tH; i++) {
for (int j = 0; j < tW; j++) {
- nr += tmpImage->r(i, j);
- ng += tmpImage->g(i, j);
- nb += tmpImage->b(i, j);
+ nr += tmpImage->r (i, j);
+ ng += tmpImage->g (i, j);
+ nb += tmpImage->b (i, j);
}
}
@@ -4476,9 +4450,9 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
double kng = srgb / ng;
double knb = srgb / nb;
double sk = knr + kng + knb;
- autor = (float)(100.0 * knr / sk);
- autog = (float)(100.0 * kng / sk);
- autob = (float)(100.0 * knb / sk);
+ autor = (float) (100.0 * knr / sk);
+ autog = (float) (100.0 * kng / sk);
+ autob = (float) (100.0 * knb / sk);
}
@@ -4495,9 +4469,9 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
}
float filcor;
- Color::computeBWMixerConstants(params->blackwhite.setting, params->blackwhite.filter, params->blackwhite.algo, filcor,
- bwr, bwg, bwb, mixerOrange, mixerYellow, mixerCyan, mixerPurple, mixerMagenta,
- params->blackwhite.autoc, complem, kcorec, rrm, ggm, bbm);
+ Color::computeBWMixerConstants (params->blackwhite.setting, params->blackwhite.filter, params->blackwhite.algo, filcor,
+ bwr, bwg, bwb, mixerOrange, mixerYellow, mixerCyan, mixerPurple, mixerMagenta,
+ params->blackwhite.autoc, complem, kcorec, rrm, ggm, bbm);
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic, 16)
@@ -4507,13 +4481,13 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
for (int j = 0; j < tW; j++) {
//mix channel
- tmpImage->r(i, j) = tmpImage->g(i, j) = tmpImage->b(i, j) = CLIP((bwr * tmpImage->r(i, j) + bwg * tmpImage->g(i, j) + bwb * tmpImage->b(i, j)) * kcorec);
+ tmpImage->r (i, j) = tmpImage->g (i, j) = tmpImage->b (i, j) = CLIP ((bwr * tmpImage->r (i, j) + bwg * tmpImage->g (i, j) + bwb * tmpImage->b (i, j)) * kcorec);
#ifndef __SSE2__
//gamma correction: pseudo TRC curve
if (hasgammabw) {
- Color::trcGammaBW (tmpImage->r(i, j), tmpImage->g(i, j), tmpImage->b(i, j), gammabwr, gammabwg, gammabwb);
+ Color::trcGammaBW (tmpImage->r (i, j), tmpImage->g (i, j), tmpImage->b (i, j), gammabwr, gammabwg, gammabwb);
}
#endif
@@ -4523,7 +4497,7 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
if (hasgammabw) {
//gamma correction: pseudo TRC curve
- Color::trcGammaBWRow (tmpImage->r(i), tmpImage->g(i), tmpImage->b(i), tW, gammabwr, gammabwg, gammabwb);
+ Color::trcGammaBWRow (tmpImage->r (i), tmpImage->g (i), tmpImage->b (i), tW, gammabwr, gammabwg, gammabwb);
}
#endif
@@ -4537,7 +4511,7 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
for (int i = 0; i < tH; i++) {
for (int j = 0; j < tW; j++) {
- editWhatever->v(i, j) = Color::gamma2curve[tmpImage->r(i, j)] / 65535.f; // assuming that r=g=b
+ editWhatever->v (i, j) = Color::gamma2curve[tmpImage->r (i, j)] / 65535.f; // assuming that r=g=b
}
}
}
@@ -4551,8 +4525,8 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
for (int i = 0; i < tH; i++) {
for (int j = 0; j < tW; j++) {
- const StandardToneCurvebw& userToneCurve = static_cast(customToneCurvebw2);
- userToneCurve.Apply(tmpImage->r(i, j), tmpImage->g(i, j), tmpImage->b(i, j));
+ const StandardToneCurvebw& userToneCurve = static_cast (customToneCurvebw2);
+ userToneCurve.Apply (tmpImage->r (i, j), tmpImage->g (i, j), tmpImage->b (i, j));
}
}
} else if (afterCurveMode == BlackWhiteParams::TC_MODE_WEIGHTEDSTD_BW) { // apply the curve to the rgb channels, weighted
@@ -4562,13 +4536,13 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
for (int i = 0; i < tH; i++) { //for ulterior usage if bw data modified
for (int j = 0; j < tW; j++) {
- const WeightedStdToneCurvebw& userToneCurve = static_cast(customToneCurvebw2);
+ const WeightedStdToneCurvebw& userToneCurve = static_cast (customToneCurvebw2);
- tmpImage->r(i, j) = CLIP(tmpImage->r(i, j));
- tmpImage->g(i, j) = CLIP(tmpImage->g(i, j));
- tmpImage->b(i, j) = CLIP(tmpImage->b(i, j));
+ tmpImage->r (i, j) = CLIP (tmpImage->r (i, j));
+ tmpImage->g (i, j) = CLIP (tmpImage->g (i, j));
+ tmpImage->b (i, j) = CLIP (tmpImage->b (i, j));
- userToneCurve.Apply(tmpImage->r(i, j), tmpImage->g(i, j), tmpImage->b(i, j));
+ userToneCurve.Apply (tmpImage->r (i, j), tmpImage->g (i, j), tmpImage->b (i, j));
}
}
}
@@ -4576,7 +4550,7 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
//colortoning with black and white
if (hasColorToning) {
- if(params->colorToning.method == "Splitco") {
+ if (params->colorToning.method == "Splitco") {
/*
#if 1
for (int i=istart,ti=0; icolorToning.lumamode) {
+ if (params->colorToning.lumamode) {
preser = 1;
}
@@ -4606,32 +4580,32 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
for (int i = 0; i < tH; i++) {
for (int j = 0; j < tW; j++) {
- float r = tmpImage->r(i, j);
- float g = tmpImage->g(i, j);
- float b = tmpImage->b(i, j);
+ float r = tmpImage->r (i, j);
+ float g = tmpImage->g (i, j);
+ float b = tmpImage->b (i, j);
float lumbefore = 0.299f * r + 0.587f * g + 0.114f * b;
- if(lumbefore < 65000.f && lumbefore > 500.f) { //reduct artifacts for highlights an extrem shadows
+ if (lumbefore < 65000.f && lumbefore > 500.f) { //reduct artifacts for highlights an extrem shadows
float ro, go, bo;
int mode = 1;
toningsmh (r, g, b, ro, go, bo, RedLow, GreenLow, BlueLow, RedMed, GreenMed, BlueMed, RedHigh, GreenHigh, BlueHigh, reducac, mode, preser, strProtect);
float lumafter = 0.299f * ro + 0.587f * go + 0.114f * bo;
float preserv = 1.f;
- if(preser == 1) {
+ if (preser == 1) {
preserv = lumbefore / lumafter;
}
ro *= preserv;
go *= preserv;
bo *= preserv;
- ro = CLIP(ro);
- go = CLIP(go);
- bo = CLIP(bo);
- tmpImage->r(i, j) = ro;
- tmpImage->g(i, j) = go;
- tmpImage->b(i, j) = bo;
+ ro = CLIP (ro);
+ go = CLIP (go);
+ bo = CLIP (bo);
+ tmpImage->r (i, j) = ro;
+ tmpImage->g (i, j) = go;
+ tmpImage->b (i, j) = bo;
}
}
}
@@ -4644,7 +4618,7 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
float reducac = 0.4f;
int preser = 0;
- if(params->colorToning.lumamode) {
+ if (params->colorToning.lumamode) {
preser = 1;
}
@@ -4659,31 +4633,31 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
iphigh = (float)ctColorCurve.high;
//2 colours
- ctColorCurve.getVal(iphigh, xh, yh, zh);
- ctColorCurve.getVal(iplow, xl, yl, zl);
+ ctColorCurve.getVal (iphigh, xh, yh, zh);
+ ctColorCurve.getVal (iplow, xl, yl, zl);
- Color::xyz2rgb(xh, yh, zh, rh, gh, bh, wip);
- Color::xyz2rgb(xl, yl, zl, rl, gl, bl, wip);
+ Color::xyz2rgb (xh, yh, zh, rh, gh, bh, wip);
+ Color::xyz2rgb (xl, yl, zl, rl, gl, bl, wip);
//retrieve rgb value with s and l =1
- retreavergb(rl, gl, bl);
- retreavergb(rh, gh, bh);
+ retreavergb (rl, gl, bl);
+ retreavergb (rh, gh, bh);
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic, 5)
#endif
for (int i = 0; i < tH; i++) {
for (int j = 0; j < tW; j++) {
- float r = tmpImage->r(i, j);
- float g = tmpImage->g(i, j);
- float b = tmpImage->b(i, j);
+ float r = tmpImage->r (i, j);
+ float g = tmpImage->g (i, j);
+ float b = tmpImage->b (i, j);
float ro, go, bo;
int mode = 1;
toning2col (r, g, b, ro, go, bo, iplow, iphigh, rl, gl, bl, rh, gh, bh, SatLow, SatHigh, balanS, balanH, reducac, mode, preser, strProtect);
- tmpImage->r(i, j) = ro;
- tmpImage->g(i, j) = go;
- tmpImage->b(i, j) = bo;
+ tmpImage->r (i, j) = ro;
+ tmpImage->g (i, j) = go;
+ tmpImage->b (i, j) = bo;
}
}
}
@@ -4692,7 +4666,7 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
else if (params->colorToning.method == "Lab" && opautili) {
int algm = 0;
bool twocol = true;
- int metchrom;
+ int metchrom = 0;
if (params->colorToning.twocolor == "Std" ) {
metchrom = 0;
@@ -4704,13 +4678,13 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
metchrom = 3;
}
- if(metchrom == 3) {
+ if (metchrom == 3) {
twocol = false;
}
- float iplow, iphigh;
+ float iplow = 0.f, iphigh = 0.f;
- if(!twocol) {
+ if (!twocol) {
iplow = (float)ctColorCurve.low;
iphigh = (float)ctColorCurve.high;
@@ -4718,7 +4692,7 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
int twoc = 0; //integer instead of bool to let more possible choice...other than 2 and 500.
- if(!twocol) {
+ if (!twocol) {
twoc = 0; // 2 colours
} else {
twoc = 1; // 500 colours
@@ -4726,32 +4700,32 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
if (params->colorToning.method == "Lab") {
algm = 1;
- } else if(params->colorToning.method == "Lch") {
+ } else if (params->colorToning.method == "Lch") {
algm = 2; //in case of
}
- if(algm <= 2) {
+ if (algm <= 2) {
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic, 5)
#endif
for (int i = 0; i < tH; i++) {
for (int j = 0; j < tW; j++) {
- float r = tmpImage->r(i, j);
- float g = tmpImage->g(i, j);
- float b = tmpImage->b(i, j);
+ float r = tmpImage->r (i, j);
+ float g = tmpImage->g (i, j);
+ float b = tmpImage->b (i, j);
float ro, bo, go;
labtoning (r, g, b, ro, go, bo, algm, metchrom, twoc, satLimit, satLimitOpacity, ctColorCurve, ctOpacityCurve, clToningcurve, cl2Toningcurve, iplow, iphigh, wp, wip);
- tmpImage->r(i, j) = CLIP(ro);
- tmpImage->g(i, j) = CLIP(go);
- tmpImage->b(i, j) = CLIP(bo);
+ tmpImage->r (i, j) = CLIP (ro);
+ tmpImage->g (i, j) = CLIP (go);
+ tmpImage->b (i, j) = CLIP (bo);
}
}
}
}
- else if (params->colorToning.method.substr(0, 3) == "RGB" && opautili) {
+ else if (params->colorToning.method.substr (0, 3) == "RGB" && opautili) {
// color toning
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic, 5)
@@ -4759,31 +4733,31 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
for (int i = 0; i < tH; i++) {
for (int j = 0; j < tW; j++) {
- float r = tmpImage->r(i, j);
- float g = tmpImage->g(i, j);
- float b = tmpImage->b(i, j);
+ float r = tmpImage->r (i, j);
+ float g = tmpImage->g (i, j);
+ float b = tmpImage->b (i, j);
// Luminance = (0.299f*r + 0.587f*g + 0.114f*b)
float h, s, l;
- Color::rgb2hsl(r, g, b, h, s, l);
+ Color::rgb2hsl (r, g, b, h, s, l);
- float l_ = Color::gamma_srgb(l * 65535.f) / 65535.f;
+ float l_ = Color::gamma_srgb (l * 65535.f) / 65535.f;
// get the opacity and tweak it to preserve saturated colors
float opacity = ctOpacityCurve.lutOpacityCurve[l_ * 500.f] / 4.f;
float r2, g2, b2;
- ctColorCurve.getVal(l_, r2, g2, b2); // get the color from the color curve
+ ctColorCurve.getVal (l_, r2, g2, b2); // get the color from the color curve
float h2, s2, l2;
- Color::rgb2hsl(r2, g2, b2, h2, s2, l2); // transform this new color to hsl
+ Color::rgb2hsl (r2, g2, b2, h2, s2, l2); // transform this new color to hsl
- Color::hsl2rgb(h2, s2, l, r2, g2, b2);
+ Color::hsl2rgb (h2, s2, l, r2, g2, b2);
- tmpImage->r(i, j) = r + (r2 - r) * opacity;
- tmpImage->g(i, j) = g + (g2 - g) * opacity;
- tmpImage->b(i, j) = b + (b2 - b) * opacity;
+ tmpImage->r (i, j) = r + (r2 - r) * opacity;
+ tmpImage->g (i, j) = g + (g2 - g) * opacity;
+ tmpImage->b (i, j) = b + (b2 - b) * opacity;
}
}
}
@@ -4818,9 +4792,9 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
for (int i = 0; i < tH; i++) {
for (int j = 0; j < tW; j++) {
- float r = tmpImage->r(i, j);
- float g = tmpImage->g(i, j);
- float b = tmpImage->b(i, j);
+ float r = tmpImage->r (i, j);
+ float g = tmpImage->g (i, j);
+ float b = tmpImage->b (i, j);
float x = toxyz[0][0] * r + toxyz[0][1] * g + toxyz[0][2] * b;
float y = toxyz[1][0] * r + toxyz[1][1] * g + toxyz[1][2] * b;
@@ -4828,9 +4802,9 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
float fx, fy, fz;
- fx = (x < MAXVALF ? Color::cachef[x] : 327.68f * std::cbrt(x / MAXVALF));
- fy = (y < MAXVALF ? Color::cachef[y] : 327.68f * std::cbrt(y / MAXVALF));
- fz = (z < MAXVALF ? Color::cachef[z] : 327.68f * std::cbrt(z / MAXVALF));
+ fx = (x < MAXVALF ? Color::cachef[x] : 327.68f * std::cbrt (x / MAXVALF));
+ fy = (y < MAXVALF ? Color::cachef[y] : 327.68f * std::cbrt (y / MAXVALF));
+ fz = (z < MAXVALF ? Color::cachef[z] : 327.68f * std::cbrt (z / MAXVALF));
lab->L[i][j] = 116.0f * fy - 5242.88f; //5242.88=16.0*327.68;
lab->a[i][j] = 500.0f * (fx - fy);
@@ -4866,31 +4840,31 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
**/
void ImProcFunctions::retreavergb (float &r, float &g, float &b)
{
- float mini = min(r, g, b);
- float maxi = max(r, g, b);
+ float mini = min (r, g, b);
+ float maxi = max (r, g, b);
float kkm = 65535.f / maxi;
- if(b == mini && r == maxi) {
+ if (b == mini && r == maxi) {
r = 65535.f;
g = kkm * (g - b);
b = 0.f;
- } else if(b == mini && g == maxi) {
+ } else if (b == mini && g == maxi) {
g = 65535.f;
r = kkm * (r - b);
b = 0.f;
- } else if(g == mini && r == maxi) {
+ } else if (g == mini && r == maxi) {
r = 65535.f;
b = kkm * (b - g);
g = 0.f;
- } else if(g == mini && b == maxi) {
+ } else if (g == mini && b == maxi) {
b = 65535.f;
r = kkm * (r - g);
g = 0.f;
- } else if(r == mini && b == maxi) {
+ } else if (r == mini && b == maxi) {
b = 65535.f;
g = kkm * (g - r);
r = 0.f;
- } else if(r == mini && g == maxi) {
+ } else if (r == mini && g == maxi) {
g = 65535.f;
b = kkm * (b - r);
r = 0.f;
@@ -4915,7 +4889,7 @@ void ImProcFunctions::secondeg_end (float reducac, float vinf, float &aa, float
float a3 = 1.f - v0 * v0;
float a4 = me * me - v0 * v0;
aa = (1.f + (zrd - 1.f) * (1 - v0) / a2) / (a4 * (1.f - v0) / a2 - a3);
- bb = -(1.f + a3 * aa) / (1.f - v0);
+ bb = - (1.f + a3 * aa) / (1.f - v0);
cc = - (aa + bb);
}
@@ -4964,7 +4938,7 @@ void ImProcFunctions::toningsmh (float r, float g, float b, float &ro, float &go
float GreenL = 1.f + (GreenLow - 1.f) * 0.4f;
float BlueL = 1.f + (BlueLow - 1.f) * bmu;
float h, s, v;
- Color::rgb2hsv(r, g, b, h, s, v);
+ Color::rgb2hsv (r, g, b, h, s, v);
float ksat = 1.f;
float ksatlow = 1.f;
// float s_0=0.55f;
@@ -4981,10 +4955,10 @@ void ImProcFunctions::toningsmh (float r, float g, float b, float &ro, float &go
float rlh = 2.2f; //1.1
float rlob = bmu; //for BW old mode
- if(mode == 0) { //color
- rlo *= pow_F(strProtect, 0.4f); //0.5 ==> 0.75
- rlh *= pow_F(strProtect, 0.4f);
- rlm *= pow_F(strProtect, 0.4f);
+ if (mode == 0) { //color
+ rlo *= pow_F (strProtect, 0.4f); //0.5 ==> 0.75
+ rlh *= pow_F (strProtect, 0.4f);
+ rlm *= pow_F (strProtect, 0.4f);
} else { //bw coefficient to preserve same results as before for satlimtopacity = 0.5 (default)
rlo = strProtect * 0.8f; //0.4
rlob = strProtect; //0.5
@@ -4992,7 +4966,7 @@ void ImProcFunctions::toningsmh (float r, float g, float b, float &ro, float &go
rlh = strProtect * 2.4f; //1.2
}
- if(mode == 0) {
+ if (mode == 0) {
rlob = rlo;
}
@@ -5002,10 +4976,10 @@ void ImProcFunctions::toningsmh (float r, float g, float b, float &ro, float &go
//fixed value of reducac=0.3
//secondeg_end (reducac, v0, aa, bb, cc);
- if(mode == 1) {
+ if (mode == 1) {
reducac = 0.5f; //black and white mode
- if(v > 0.15f) {
+ if (v > 0.15f) {
kl = (-1.f / 0.85f) * v + (1.f) / 0.85f; //Low light ==> decrease action after v=0.15
}
} else { //color
@@ -5013,56 +4987,56 @@ void ImProcFunctions::toningsmh (float r, float g, float b, float &ro, float &go
float aab, bbb;
secondeg_begin (0.7f, v0, aab, bbb);
- if(v > v0) {
+ if (v > v0) {
kl = aa * v * v + bb * v + cc; //verified ==> exact
} else if (mode == 0) {
kl = aab * v * v + bbb * v; //ksatlow=ksat;
}
}
- if(RedLow != 1.f) {
+ if (RedLow != 1.f) {
RedL = 1.f + (RedLow - 1.f) * kl * ksat * rlo; //0.4
- if(RedLow >= 1.f) {
+ if (RedLow >= 1.f) {
g -= 20000.f * (RedL - 1.f) * ksatlow;
b -= 20000.f * (RedL - 1.f) * ksatlow;
} else {
r += 20000.f * (RedL - 1.f) * ksatlow;
}
- r = CLIP(r);
- g = CLIP(g);
- b = CLIP(b);
+ r = CLIP (r);
+ g = CLIP (g);
+ b = CLIP (b);
}
- if(GreenLow != 1.f) {
+ if (GreenLow != 1.f) {
GreenL = 1.f + (GreenLow - 1.f) * kl * ksat * rlo; //0.4
- if(GreenLow >= 1.f) {
+ if (GreenLow >= 1.f) {
r -= 20000.f * (GreenL - 1.f) * ksatlow;
b -= 20000.f * (GreenL - 1.f) * ksatlow;
} else {
g += 20000.f * (GreenL - 1.f) * ksatlow;
}
- r = CLIP(r);
- b = CLIP(b);
- g = CLIP(g);
+ r = CLIP (r);
+ b = CLIP (b);
+ g = CLIP (g);
}
- if(BlueLow != 1.f) {
+ if (BlueLow != 1.f) {
BlueL = 1.f + (BlueLow - 1.f) * kl * ksat * rlob;
- if(BlueLow >= 1.f) {
+ if (BlueLow >= 1.f) {
r -= 20000.f * (BlueL - 1.f) * ksatlow;
g -= 20000.f * (BlueL - 1.f) * ksatlow;
} else {
b += 20000.f * (BlueL - 1.f) * ksatlow;
}
- r = CLIP(r);
- g = CLIP(g);
- b = CLIP(b);
+ r = CLIP (r);
+ g = CLIP (g);
+ b = CLIP (b);
}
// mid tones
@@ -5070,7 +5044,7 @@ void ImProcFunctions::toningsmh (float r, float g, float b, float &ro, float &go
float v0m = 0.5f; //max action
float v0mm = 0.5f; //max
- if(v < v0m) {
+ if (v < v0m) {
float aam, bbm;
float vend = v0m;
secondeg_begin (reducac, vend, aam, bbm);
@@ -5083,67 +5057,67 @@ void ImProcFunctions::toningsmh (float r, float g, float b, float &ro, float &go
float RedM = 1.f + (RedMed - 1.f) * rlm;
- if(RedMed != 1.f) {
+ if (RedMed != 1.f) {
RedM = 1.f + (RedMed - 1.f) * km * rlm;
- if(RedMed >= 1.f) {
+ if (RedMed >= 1.f) {
r += 20000.f * (RedM - 1.f);
g -= 10000.f * (RedM - 1.f);
b -= 10000.f * (RedM - 1.f);
- r = CLIP(r);
- g = CLIP(g);
- b = CLIP(b);
+ r = CLIP (r);
+ g = CLIP (g);
+ b = CLIP (b);
} else {
r += 10000.f * (RedM - 1.f);
g -= 20000.f * (RedM - 1.f);
b -= 20000.f * (RedM - 1.f);
- r = CLIP(r);
- g = CLIP(g);
- b = CLIP(b);
+ r = CLIP (r);
+ g = CLIP (g);
+ b = CLIP (b);
}
}
float GreenM = 1.f + (GreenMed - 1.f) * rlm;
- if(GreenMed != 1.f) {
+ if (GreenMed != 1.f) {
GreenM = 1.f + (GreenMed - 1.f) * km * rlm;
- if(GreenMed >= 1.f) {
+ if (GreenMed >= 1.f) {
r -= 10000.f * (GreenM - 1.f);
g += 20000.f * (GreenM - 1.f);
b -= 10000.f * (GreenM - 1.f);
- r = CLIP(r);
- g = CLIP(g);
- b = CLIP(b);
+ r = CLIP (r);
+ g = CLIP (g);
+ b = CLIP (b);
} else {
r -= 20000.f * (GreenM - 1.f);
g += 10000.f * (GreenM - 1.f);
b -= 20000.f * (GreenM - 1.f);
- r = CLIP(r);
- g = CLIP(g);
- b = CLIP(b);
+ r = CLIP (r);
+ g = CLIP (g);
+ b = CLIP (b);
}
}
float BlueM = 1.f + (BlueMed - 1.f) * rlm;
- if(BlueMed != 1.f) {
+ if (BlueMed != 1.f) {
BlueM = 1.f + (BlueMed - 1.f) * km * rlm;
- if(BlueMed >= 1.f) {
+ if (BlueMed >= 1.f) {
r -= 10000.f * (BlueM - 1.f);
g -= 10000.f * (BlueM - 1.f);
b += 20000.f * (BlueM - 1.f);
- r = CLIP(r);
- g = CLIP(g);
- b = CLIP(b);
+ r = CLIP (r);
+ g = CLIP (g);
+ b = CLIP (b);
} else {
r -= 20000.f * (BlueM - 1.f);
g -= 20000.f * (BlueM - 1.f);
b += 10000.f * (BlueM - 1.f);
- r = CLIP(r);
- g = CLIP(g);
- b = CLIP(b);
+ r = CLIP (r);
+ g = CLIP (g);
+ b = CLIP (b);
}
}
@@ -5156,7 +5130,7 @@ void ImProcFunctions::toningsmh (float r, float g, float b, float &ro, float &go
// float hmu=1.5f;
// if(mode==1) hmu=1.2f;//for BW old mode
- if(v > v00) {
+ if (v > v00) {
kh = (-1.f / (1.f - v00)) * v + (1.f) / (1.f - v00); //High tones
} else {
kh = aa0 * v * v + bb0 * v; //verification = good
@@ -5166,49 +5140,49 @@ void ImProcFunctions::toningsmh (float r, float g, float b, float &ro, float &go
float GreenH = 1.f + (GreenHigh - 1.f) * rlh;
float BlueH = 1.f + (BlueHigh - 1.f) * rlh; //1.2
- if(RedHigh != 1.f) {
+ if (RedHigh != 1.f) {
RedH = 1.f + (RedHigh - 1.f) * kh * rlh; //1.2
- if(RedHigh >= 1.f) {
+ if (RedHigh >= 1.f) {
r += 20000.f * (RedH - 1.f);
- r = CLIP(r);
+ r = CLIP (r);
} else {
g -= 20000.f * (RedH - 1.f);
b -= 20000.f * (RedH - 1.f);
}
- g = CLIP(g);
- b = CLIP(b);
+ g = CLIP (g);
+ b = CLIP (b);
}
- if(GreenHigh != 1.f) {
+ if (GreenHigh != 1.f) {
GreenH = 1.f + (GreenHigh - 1.f) * kh * rlh; //1.2
- if(GreenHigh >= 1.f) {
+ if (GreenHigh >= 1.f) {
g += 20000.f * (GreenH - 1.f);
- g = CLIP(g);
+ g = CLIP (g);
} else {
r -= 20000.f * (GreenH - 1.f);
b -= 20000.f * (GreenH - 1.f);
}
- r = CLIP(r);
- b = CLIP(b);
+ r = CLIP (r);
+ b = CLIP (b);
}
- if(BlueHigh != 1.f) {
+ if (BlueHigh != 1.f) {
BlueH = 1.f + (BlueHigh - 1.f) * kh * rlh; //1.2
- if(BlueHigh >= 1.f) {
+ if (BlueHigh >= 1.f) {
b += 20000.f * (BlueH - 1.f);
- b = CLIP(b);
+ b = CLIP (b);
} else {
r -= 20000.f * (BlueH - 1.f);
g -= 20000.f * (BlueH - 1.f);
}
- r = CLIP(r);
- g = CLIP(g);
+ r = CLIP (r);
+ g = CLIP (g);
}
ro = r;
@@ -5232,13 +5206,11 @@ void ImProcFunctions::toning2col (float r, float g, float b, float &ro, float &g
{
float lumbefore = 0.299f * r + 0.587f * g + 0.114f * b;
float h, s, l;
- Color::rgb2hsl(r, g, b, h, s, l);
+ Color::rgb2hsl (r, g, b, h, s, l);
float v;
- Color::rgb2hsv(r, g, b, h, s, v);
+ Color::rgb2hsv (r, g, b, h, s, v);
float ksat = 1.f;
float ksatlow = 1.f;
- float s_0 = 0.55f;
- float s_1 = 0.85f;
/*
if(mode==0) {//color
if(s < s_0) ksat=SQR((1.f/s_0)*s);
@@ -5248,18 +5220,18 @@ void ImProcFunctions::toning2col (float r, float g, float b, float &ro, float &g
float kl = 1.f;
float rlo = 1.f;
float rlh = 2.2f;
- rlo *= pow_F(strProtect, 0.4f); //0.5 ==> 0.75 transfered value for more action
- rlh *= pow_F(strProtect, 0.4f);
+ rlo *= pow_F (strProtect, 0.4f); //0.5 ==> 0.75 transfered value for more action
+ rlh *= pow_F (strProtect, 0.4f);
//low tones
//second degree
float aa, bb, cc;
//fixed value of reducac =0.4;
secondeg_end (reducac, iplow, aa, bb, cc);
- float aab, bbb, ccb;
+ float aab, bbb;
secondeg_begin (0.7f, iplow, aab, bbb);
- if(v > iplow) {
+ if (v > iplow) {
kl = aa * v * v + bb * v + cc;
} else if (mode == 0) {
kl = aab * v * v + bbb * v;
@@ -5271,43 +5243,43 @@ void ImProcFunctions::toning2col (float r, float g, float b, float &ro, float &g
float kgl = gl / (rl + gl + bl);
float kbl = bl / (rl + gl + bl);
- if(SatLow > 0.f) {
+ if (SatLow > 0.f) {
float kmgb;
- if(g < 20000.f || b < 20000.f || r < 20000.f) {
- kmgb = min(r, g, b); //I have tested ...0.85 compromise...
- kl *= pow((kmgb / 20000.f), 0.85f);
+ if (g < 20000.f || b < 20000.f || r < 20000.f) {
+ kmgb = min (r, g, b); //I have tested ...0.85 compromise...
+ kl *= pow ((kmgb / 20000.f), 0.85f);
}
RedL = 1.f + (SatLow * krl) * kl * ksat * rlo * balanS; //0.4
- if(krl > 0.f) {
+ if (krl > 0.f) {
g -= 20000.f * (RedL - 1.f) * ksatlow;
b -= 20000.f * (RedL - 1.f) * ksatlow;
}
- g = CLIP(g);
- b = CLIP(b);
+ g = CLIP (g);
+ b = CLIP (b);
GreenL = 1.f + (SatLow * kgl) * kl * ksat * rlo * balanS; //0.4
- if(kgl > 0.f) {
+ if (kgl > 0.f) {
r -= 20000.f * (GreenL - 1.f) * ksatlow;
b -= 20000.f * (GreenL - 1.f) * ksatlow;
}
- r = CLIP(r);
- b = CLIP(b);
+ r = CLIP (r);
+ b = CLIP (b);
BlueL = 1.f + (SatLow * kbl) * kl * ksat * rlo * balanS; //0.4
- if(kbl > 0.f) {
+ if (kbl > 0.f) {
r -= 20000.f * (BlueL - 1.f) * ksatlow;
g -= 20000.f * (BlueL - 1.f) * ksatlow;
}
- r = CLIP(r);
- g = CLIP(g);
+ r = CLIP (r);
+ g = CLIP (g);
}
//high tones
@@ -5316,7 +5288,7 @@ void ImProcFunctions::toning2col (float r, float g, float b, float &ro, float &g
//fixed value of reducac ==0.4;
secondeg_begin (reducac, iphigh, aa0, bb0);
- if(v > iphigh) {
+ if (v > iphigh) {
kh = (-1.f / (1.f - iphigh)) * v + (1.f) / (1.f - iphigh); //Low light ==> decrease action after iplow
} else {
kh = aa0 * v * v + bb0 * v;
@@ -5324,8 +5296,8 @@ void ImProcFunctions::toning2col (float r, float g, float b, float &ro, float &g
float kmgb;
- if(g > 45535.f || b > 45535.f || r > 45535.f) {
- kmgb = max(r, g, b);
+ if (g > 45535.f || b > 45535.f || r > 45535.f) {
+ kmgb = max (r, g, b);
float cora = 1.f / (45535.f - 65535.f);
float corb = 1.f - cora * 45535.f;
float cor = kmgb * cora + corb;
@@ -5342,41 +5314,41 @@ void ImProcFunctions::toning2col (float r, float g, float b, float &ro, float &g
float kgh = gh / (rh + gh + bh);
float kbh = bh / (rh + gh + bh);
- if(SatHigh > 0.f) {
+ if (SatHigh > 0.f) {
RedH = 1.f + (SatHigh * krh) * kh * rlh * balanH; //1.2
- if(krh > 0.f) {
+ if (krh > 0.f) {
r += 20000.f * (RedH - 1.f);
- r = CLIP(r);
+ r = CLIP (r);
}
- g = CLIP(g);
- b = CLIP(b);
+ g = CLIP (g);
+ b = CLIP (b);
GreenH = 1.f + (SatHigh * kgh) * kh * rlh * balanH; //1.2
- if(kgh > 0.f) {
+ if (kgh > 0.f) {
g += 20000.f * (GreenH - 1.f);
- g = CLIP(g);
+ g = CLIP (g);
}
- r = CLIP(r);
- b = CLIP(b);
+ r = CLIP (r);
+ b = CLIP (b);
BlueH = 1.f + (SatHigh * kbh) * kh * rlh * balanH; //1.2
- if(kbh > 0.f) {
+ if (kbh > 0.f) {
b += 20000.f * (BlueH - 1.f);
- b = CLIP(b);
+ b = CLIP (b);
}
- r = CLIP(r);
- g = CLIP(g);
+ r = CLIP (r);
+ g = CLIP (g);
}
float lumafter = 0.299f * r + 0.587f * g + 0.114f * b;
float preserv = 1.f;
- if(preser == 1) {
+ if (preser == 1) {
preserv = lumbefore / lumafter;
}
@@ -5387,9 +5359,9 @@ void ImProcFunctions::toning2col (float r, float g, float b, float &ro, float &g
ro *= preserv;
go *= preserv;
bo *= preserv;
- ro = CLIP(ro);
- go = CLIP(go);
- bo = CLIP(bo);
+ ro = CLIP (ro);
+ go = CLIP (go);
+ bo = CLIP (bo);
}
/**
@@ -5408,21 +5380,21 @@ void ImProcFunctions::labtoning (float r, float g, float b, float &ro, float &go
{
float realL;
float h, s, l;
- Color::rgb2hsl(r, g, b, h, s, l);
+ Color::rgb2hsl (r, g, b, h, s, l);
float x2, y2, z2;
float xl, yl, zl;
- if(twoc != 1) {
+ if (twoc != 1) {
l = (Color::gammatab_13_2[ l * 65535.f]) / 65535.f; //to compensate L from Lab
iphigh = (Color::gammatab_13_2[iphigh * 65535.f]) / 65535.f;
iplow = (Color::gammatab_13_2[ iplow * 65535.f]) / 65535.f;
}
- if(twoc == 1) {
- ctColorCurve.getVal(l, x2, y2, z2);
+ if (twoc == 1) {
+ ctColorCurve.getVal (l, x2, y2, z2);
} else {
- ctColorCurve.getVal(iphigh, x2, y2, z2);
- ctColorCurve.getVal(iplow, xl, yl, zl);
+ ctColorCurve.getVal (iphigh, x2, y2, z2);
+ ctColorCurve.getVal (iplow, xl, yl, zl);
}
realL = l;
@@ -5434,8 +5406,8 @@ void ImProcFunctions::labtoning (float r, float g, float b, float &ro, float &go
// get the opacity and tweak it to preserve saturated colors
//float l_ = Color::gamma_srgb(l*65535.f)/65535.f;
float opacity;
- opacity = (1.f - min(s / satLimit, 1.f) * (1.f - satLimitOpacity)) * ctOpacityCurve.lutOpacityCurve[l * 500.f];
- float opacity2 = (1.f - min(s / satLimit, 1.f) * (1.f - satLimitOpacity));
+ opacity = (1.f - min (s / satLimit, 1.f) * (1.f - satLimitOpacity)) * ctOpacityCurve.lutOpacityCurve[l * 500.f];
+ float opacity2 = (1.f - min (s / satLimit, 1.f) * (1.f - satLimitOpacity));
//float ro, go, bo;
bool chr = true;
@@ -5444,23 +5416,23 @@ void ImProcFunctions::labtoning (float r, float g, float b, float &ro, float &go
float chromat, luma;
if (clToningcurve[lm * 65535.f] / (lm * 65535.f) < 1.f) {
- chromat = (clToningcurve[(lm) * 65535.f] / (lm * 65535.f)) - 1.f; //special effect
+ chromat = (clToningcurve[ (lm) * 65535.f] / (lm * 65535.f)) - 1.f; //special effect
} else {
- chromat = 1.f - SQR(SQR((lm * 65535.f) / clToningcurve[(lm) * 65535.f])); //apply C=f(L) acts on 'a' and 'b'
+ chromat = 1.f - SQR (SQR ((lm * 65535.f) / clToningcurve[ (lm) * 65535.f])); //apply C=f(L) acts on 'a' and 'b'
}
if (cl2Toningcurve[lm * 65535.f] / (lm * 65535.f) < 1.f) {
- luma = (cl2Toningcurve[(lm) * 65535.f] / (lm * 65535.f)) - 1.f; //special effect
+ luma = (cl2Toningcurve[ (lm) * 65535.f] / (lm * 65535.f)) - 1.f; //special effect
} else {
- luma = 1.f - SQR(SQR((lm * 65535.f) / (cl2Toningcurve[(lm) * 65535.f]))); //apply C2=f(L) acts only on 'b'
+ luma = 1.f - SQR (SQR ((lm * 65535.f) / (cl2Toningcurve[ (lm) * 65535.f]))); //apply C2=f(L) acts only on 'b'
}
int todo = 1;
if (algm == 1) {
- Color::interpolateRGBColor(realL, iplow, iphigh, algm, opacity, twoc, metchrom, chr, lum, chromat, luma, r, g, b, xl, yl, zl, x2, y2, z2, todo, wp, wip, ro, go, bo);
+ Color::interpolateRGBColor (realL, iplow, iphigh, algm, opacity, twoc, metchrom, chr, lum, chromat, luma, r, g, b, xl, yl, zl, x2, y2, z2, todo, wp, wip, ro, go, bo);
} else {
- Color::interpolateRGBColor(realL, iplow, iphigh, algm, opacity2, twoc, metchrom, chr, lum, chromat, luma, r, g, b, xl, yl, zl, x2, y2, z2, todo, wp, wip, ro, go, bo);
+ Color::interpolateRGBColor (realL, iplow, iphigh, algm, opacity2, twoc, metchrom, chr, lum, chromat, luma, r, g, b, xl, yl, zl, x2, y2, z2, todo, wp, wip, ro, go, bo);
}
}
@@ -5490,9 +5462,6 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBu
// lhskcurve.dump("lh_curve");
//init Flatcurve for C=f(H)
- // NOTE: We're getting all 3 pointers here, but this function may not need them all, so one could optimize this
- Imagefloat* editImgFloat = nullptr;
- LabImage* editLab = nullptr;
PlanarWhateverData* editWhatever = nullptr;
EditUniqueID editID = EUID_None;
bool editPipette = false;
@@ -5505,11 +5474,9 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBu
switch (pipetteBuffer->getDataProvider()->getCurrSubscriber()->getPipetteBufferType()) {
case (BT_IMAGEFLOAT):
- editImgFloat = pipetteBuffer->getImgFloatBuffer();
break;
case (BT_LABIMAGE):
- editLab = pipetteBuffer->getLabBuffer();
break;
case (BT_SINGLEPLANE_FLOAT):
@@ -5523,7 +5490,7 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBu
bool chutili = false;
if (params->labCurve.chromaticity > -100) {
- chCurve = new FlatCurve(params->labCurve.chcurve);
+ chCurve = new FlatCurve (params->labCurve.chcurve);
if (!chCurve || chCurve->isIdentity()) {
if (chCurve) {
@@ -5540,7 +5507,7 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBu
bool lhutili = false;
if (params->labCurve.chromaticity > -100) {
- lhCurve = new FlatCurve(params->labCurve.lhcurve);
+ lhCurve = new FlatCurve (params->labCurve.lhcurve);
if (!lhCurve || lhCurve->isIdentity()) {
if (lhCurve) {
@@ -5557,7 +5524,7 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBu
bool hhutili = false;
if (params->labCurve.chromaticity > -100) {
- hhCurve = new FlatCurve(params->labCurve.hhcurve);
+ hhCurve = new FlatCurve (params->labCurve.hhcurve);
if (!hhCurve || hhCurve->isIdentity()) {
if (hhCurve) {
@@ -5575,10 +5542,10 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBu
LUTu hist16Llad;
//preparate for histograms CIECAM
- if(pW != 1) { //only with improccoordinator
- hist16Clad(65536);
+ if (pW != 1) { //only with improccoordinator
+ hist16Clad (65536);
hist16Clad.clear();
- hist16Llad(65536);
+ hist16Llad (65536);
hist16Llad.clear();
}
@@ -5632,38 +5599,38 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBu
float protect_red, protect_redh;
protect_red = protectRed;//default=60 chroma: one can put more or less if necessary...in 'option' 40...160
- if(protect_red < 20.0f) {
+ if (protect_red < 20.0f) {
protect_red = 20.0; // avoid too low value
}
- if(protect_red > 180.0f) {
+ if (protect_red > 180.0f) {
protect_red = 180.0; // avoid too high value
}
- protect_redh = float(protectRedH); //default=0.4 rad : one can put more or less if necessary...in 'option' 0.2 ..1.0
+ protect_redh = float (protectRedH); //default=0.4 rad : one can put more or less if necessary...in 'option' 0.2 ..1.0
- if(protect_redh < 0.1f) {
+ if (protect_redh < 0.1f) {
protect_redh = 0.1f; //avoid divide by 0 and negatives values
}
- if(protect_redh > 1.0f) {
+ if (protect_redh > 1.0f) {
protect_redh = 1.0f; //avoid too big values
}
float protect_redhcur = protectRedH;//default=0.4 rad : one can put more or less if necessary...in 'option' 0.2 ..1
- if(protect_redhcur < 0.1f) {
+ if (protect_redhcur < 0.1f) {
protect_redhcur = 0.1f; //avoid divide by 0 and negatives values:minimal protection for transition
}
- if(protect_redhcur > 3.5f) {
+ if (protect_redhcur > 3.5f) {
protect_redhcur = 3.5f; //avoid too big values
}
//increase saturation after denoise : ...approximation
float factnoise = 1.f;
- if(params->dirpyrDenoise.enabled) {
+ if (params->dirpyrDenoise.enabled) {
factnoise = (1.f + params->dirpyrDenoise.chroma / 500.f); //levels=5
// if(yyyy) factnoise=(1.f+params->dirpyrDenoise.chroma/100.f);//levels=7
}
@@ -5704,28 +5671,28 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBu
if (avoidColorShift)
// only if user activate Lab adjustments
- if(autili || butili || ccutili || cclutili || chutili || lhutili || hhutili || clcutili || utili || chromaticity) {
- Color::LabGamutMunsell(lold->L[i], lold->a[i], lold->b[i], W, /*corMunsell*/true, /*lumaMuns*/false, params->toneCurve.hrenabled, /*gamut*/true, wip, multiThread);
+ if (autili || butili || ccutili || cclutili || chutili || lhutili || hhutili || clcutili || utili || chromaticity) {
+ Color::LabGamutMunsell (lold->L[i], lold->a[i], lold->b[i], W, /*corMunsell*/true, /*lumaMuns*/false, params->toneCurve.hrenabled, /*gamut*/true, wip, multiThread);
}
#ifdef __SSE2__
// precalculate some values using SSE
- if(bwToning || (!autili && !butili)) {
- __m128 c327d68v = _mm_set1_ps(327.68f);
+ if (bwToning || (!autili && !butili)) {
+ __m128 c327d68v = _mm_set1_ps (327.68f);
__m128 av, bv;
int k;
for (k = 0; k < W - 3; k += 4) {
- av = LVFU(lold->a[i][k]);
- bv = LVFU(lold->b[i][k]);
- STVF(HHBuffer[k], xatan2f(bv, av));
- STVF(CCBuffer[k], _mm_sqrt_ps(SQRV(av) + SQRV(bv)) / c327d68v);
+ av = LVFU (lold->a[i][k]);
+ bv = LVFU (lold->b[i][k]);
+ STVF (HHBuffer[k], xatan2f (bv, av));
+ STVF (CCBuffer[k], _mm_sqrt_ps (SQRV (av) + SQRV (bv)) / c327d68v);
}
- for(; k < W; k++) {
- HHBuffer[k] = xatan2f(lold->b[i][k], lold->a[i][k]);
- CCBuffer[k] = sqrt(SQR(lold->a[i][k]) + SQR(lold->b[i][k])) / 327.68f;
+ for (; k < W; k++) {
+ HHBuffer[k] = xatan2f (lold->b[i][k], lold->a[i][k]);
+ CCBuffer[k] = sqrt (SQR (lold->a[i][k]) + SQR (lold->b[i][k])) / 327.68f;
}
}
@@ -5741,18 +5708,18 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBu
float memChprov;
float2 sincosval;
- if(bwToning) { // this values will be also set when bwToning is false some lines down
+ if (bwToning) { // this values will be also set when bwToning is false some lines down
#ifdef __SSE2__
// use precalculated values from above
HH = HHBuffer[j];
CC = CCBuffer[j];
#else
- HH = xatan2f(lold->b[i][j], lold->a[i][j]);
- CC = sqrt(SQR(lold->a[i][j]) + SQR(lold->b[i][j])) / 327.68f;
+ HH = xatan2f (lold->b[i][j], lold->a[i][j]);
+ CC = sqrt (SQR (lold->a[i][j]) + SQR (lold->b[i][j])) / 327.68f;
#endif
// According to mathematical laws we can get the sin and cos of HH by simple operations
- if(CC == 0.0f) {
+ if (CC == 0.0f) {
sincosval.y = 1.0f;
sincosval.x = 0.0f;
} else {
@@ -5766,20 +5733,20 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBu
}
if (editPipette && editID == EUID_Lab_LCurve) {
- editWhatever->v(i, j) = LIM01(Lin / 32768.0f); // Lab L pipette
+ editWhatever->v (i, j) = LIM01 (Lin / 32768.0f); // Lab L pipette
}
lnew->L[i][j] = curve[Lin];
float Lprov1 = (lnew->L[i][j]) / 327.68f;
- if(editPipette) {
+ if (editPipette) {
if (editID == EUID_Lab_aCurve) { // Lab a pipette
float chromapipa = lold->a[i][j] + (32768.f * 1.28f);
- editWhatever->v(i, j) = LIM01((chromapipa) / (65536.f * 1.28f));
+ editWhatever->v (i, j) = LIM01 ((chromapipa) / (65536.f * 1.28f));
} else if (editID == EUID_Lab_bCurve) { //Lab b pipette
float chromapipb = lold->b[i][j] + (32768.f * 1.28f);
- editWhatever->v(i, j) = LIM01((chromapipb) / (65536.f * 1.28f));
+ editWhatever->v (i, j) = LIM01 ((chromapipb) / (65536.f * 1.28f));
}
}
@@ -5787,35 +5754,35 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBu
atmp = lold->a[i][j];
- if(autili) {
+ if (autili) {
atmp = acurve[atmp + 32768.0f] - 32768.0f; // curves Lab a
}
btmp = lold->b[i][j];
- if(butili) {
+ if (butili) {
btmp = bcurve[btmp + 32768.0f] - 32768.0f; // curves Lab b
}
- if(!bwToning) { //take into account modification of 'a' and 'b'
+ if (!bwToning) { //take into account modification of 'a' and 'b'
#ifdef __SSE2__
- if(!autili && !butili) {
+ if (!autili && !butili) {
// use precalculated values from above
HH = HHBuffer[j];
CC = CCBuffer[j];
} else {
- CC = sqrt(SQR(atmp) + SQR(btmp)) / 327.68f;
- HH = xatan2f(btmp, atmp);
+ CC = sqrt (SQR (atmp) + SQR (btmp)) / 327.68f;
+ HH = xatan2f (btmp, atmp);
}
#else
- CC = sqrt(SQR(atmp) + SQR(btmp)) / 327.68f;
- HH = xatan2f(btmp, atmp);
+ CC = sqrt (SQR (atmp) + SQR (btmp)) / 327.68f;
+ HH = xatan2f (btmp, atmp);
#endif
// According to mathematical laws we can get the sin and cos of HH by simple operations
//float2 sincosval;
- if(CC == 0.f) {
+ if (CC == 0.f) {
sincosval.y = 1.f;
sincosval.x = 0.f;
} else {
@@ -5828,10 +5795,10 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBu
memChprov = Chprov;
} // now new values of lold with 'a' and 'b'
- if(editPipette)
+ if (editPipette)
if (editID == EUID_Lab_LHCurve || editID == EUID_Lab_CHCurve || editID == EUID_Lab_HHCurve) {//H pipette
- float valpar = Color::huelab_to_huehsv2(HH);
- editWhatever->v(i, j) = valpar;
+ float valpar = Color::huelab_to_huehsv2 (HH);
+ editWhatever->v (i, j) = valpar;
}
if (lhutili) { // L=f(H)
@@ -5840,7 +5807,7 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBu
l_r = Lprov1 / 100.f;
{
float khue = 1.9f; //in reserve in case of!
- float valparam = float((lhCurve->getVal(Color::huelab_to_huehsv2(HH)) - 0.5f)); //get l_r=f(H)
+ float valparam = float ((lhCurve->getVal (Color::huelab_to_huehsv2 (HH)) - 0.5f)); //get l_r=f(H)
float valparamneg;
valparamneg = valparam;
float kcc = (CC / amountchroma); //take Chroma into account...40 "middle low" of chromaticity (arbitrary and simple), one can imagine other algorithme
@@ -5848,8 +5815,8 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBu
valparam *= 2.f * kcc;
valparamneg *= kcc; //slightly different for negative
- if(valparam > 0.f) {
- l_r = (1.f - valparam) * l_r + valparam * (1.f - SQR(((SQR(1.f - min(l_r, 1.0f))))));
+ if (valparam > 0.f) {
+ l_r = (1.f - valparam) * l_r + valparam * (1.f - SQR (((SQR (1.f - min (l_r, 1.0f))))));
} else
//for negative
{
@@ -5859,7 +5826,7 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBu
Lprov1 = l_r * 100.f;
- float Chprov2 = sqrt(SQR(atmp) + SQR(btmp)) / 327.68f;
+ float Chprov2 = sqrt (SQR (atmp) + SQR (btmp)) / 327.68f;
//Gamut control especialy fot negative values slightly different of gamutlchonly
bool inRGB;
@@ -5872,14 +5839,14 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBu
float fx = (0.002f * aprov1) + fy;
float fz = fy - (0.005f * bprov1);
- float x_ = 65535.0f * Color::f2xyz(fx) * Color::D50x;
- float z_ = 65535.0f * Color::f2xyz(fz) * Color::D50z;
+ float x_ = 65535.0f * Color::f2xyz (fx) * Color::D50x;
+ float z_ = 65535.0f * Color::f2xyz (fz) * Color::D50z;
float y_ = (Lprov1 > Color::epskap) ? 65535.0 * fy * fy * fy : 65535.0 * Lprov1 / Color::kappa;
float R, G, B;
- Color::xyz2rgb(x_, y_, z_, R, G, B, wip);
+ Color::xyz2rgb (x_, y_, z_, R, G, B, wip);
if (R < 0.0f || G < 0.0f || B < 0.0f) {
- if(Lprov1 < 0.1f) {
+ if (Lprov1 < 0.1f) {
Lprov1 = 0.1f;
}
@@ -5901,8 +5868,8 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBu
// calculate C=f(H)
if (chutili) {
- double hr = Color::huelab_to_huehsv2(HH);
- float chparam = float((chCurve->getVal(hr) - 0.5f) * 2.0f); //get C=f(H)
+ double hr = Color::huelab_to_huehsv2 (HH);
+ float chparam = float ((chCurve->getVal (hr) - 0.5f) * 2.0f); //get C=f(H)
float chromaChfactor = 1.0f + chparam;
atmp *= chromaChfactor;//apply C=f(H)
btmp *= chromaChfactor;
@@ -5910,15 +5877,15 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBu
if (hhutili) { // H=f(H)
//hue Lab in -PI +PI
- float valparam = float((hhCurve->getVal(Color::huelab_to_huehsv2(HH)) - 0.5f) * 1.7f) + HH; //get H=f(H) 1.7 optimisation !
+ float valparam = float ((hhCurve->getVal (Color::huelab_to_huehsv2 (HH)) - 0.5f) * 1.7f) + HH; //get H=f(H) 1.7 optimisation !
HH = valparam;
- sincosval = xsincosf(HH);
+ sincosval = xsincosf (HH);
}
- if(!bwToning) {
+ if (!bwToning) {
float factorskin, factorsat, factorskinext;
- if(chromapro > 1.f) {
+ if (chromapro > 1.f) {
float scale = scaleConst;//reduction in normal zone
float scaleext = 1.f;//reduction in transition zone
Color::scalered ( rstprotection, chromapro, 0.0, HH, protect_redh, scale, scaleext);//1.0
@@ -5937,11 +5904,11 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBu
if (Lprov1 < 25.f) {
dred = 40.f;
- } else if(Lprov1 < 30.f) {
+ } else if (Lprov1 < 30.f) {
dred = 3.f * Lprov1 - 35.f;
- } else if(Lprov1 < 70.f) {
+ } else if (Lprov1 < 70.f) {
dred = 55.f;
- } else if(Lprov1 < 75.f) {
+ } else if (Lprov1 < 75.f) {
dred = -3.f * Lprov1 + 265.f;
} else {
dred = 40.f;
@@ -5955,7 +5922,7 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBu
btmp *= factorsat;
if (editPipette && editID == EUID_Lab_CLCurve) {
- editWhatever->v(i, j) = LIM01(LL / 100.f); // Lab C=f(L) pipette
+ editWhatever->v (i, j) = LIM01 (LL / 100.f); // Lab C=f(L) pipette
}
if (clut) { // begin C=f(L)
@@ -5968,31 +5935,31 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBu
float deltaHH;//HH value transition for C curve
protect_redcur = curf * protectRed; //default=60 chroma: one can put more or less if necessary...in 'option' 40...160==> curf =because curve is more progressive
- if(protect_redcur < 20.0f) {
+ if (protect_redcur < 20.0f) {
protect_redcur = 20.0; // avoid too low value
}
- if(protect_redcur > 180.0f) {
+ if (protect_redcur > 180.0f) {
protect_redcur = 180.0; // avoid too high value
}
- protect_redhcur = curf * float(protectRedH); //default=0.4 rad : one can put more or less if necessary...in 'option' 0.2 ..1.0 ==> curf =because curve is more progressive
+ protect_redhcur = curf * float (protectRedH); //default=0.4 rad : one can put more or less if necessary...in 'option' 0.2 ..1.0 ==> curf =because curve is more progressive
- if(protect_redhcur < 0.1f) {
+ if (protect_redhcur < 0.1f) {
protect_redhcur = 0.1f; //avoid divide by 0 and negatives values
}
- if(protect_redhcur > 1.0f) {
+ if (protect_redhcur > 1.0f) {
protect_redhcur = 1.0f; //avoid too big values
}
deltaHH = protect_redhcur; //transition hue
- if(chromaCfactor > 0.0) {
+ if (chromaCfactor > 0.0) {
Color::scalered ( rstprotection, chromaCfactor, 0.0, HH, deltaHH, scale, scaleext); //1.0
}
- if(chromaCfactor > 1.0) {
+ if (chromaCfactor > 1.0) {
interm = (chromaCfactor - 1.0f) * 100.0f;
factorskin = 1.0f + (interm * scale) / 100.0f;
factorskinext = 1.0f + (interm * scaleext) / 100.0f;
@@ -6014,13 +5981,13 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBu
// I have placed C=f(C) after all C treatments to assure maximum amplitude of "C"
if (editPipette && editID == EUID_Lab_CCurve) {
- float chromapip = sqrt(SQR(atmp) + SQR(btmp) + 0.001f);
- editWhatever->v(i, j) = LIM01((chromapip) / (48000.f));
+ float chromapip = sqrt (SQR (atmp) + SQR (btmp) + 0.001f);
+ editWhatever->v (i, j) = LIM01 ((chromapip) / (48000.f));
}//Lab C=f(C) pipette
if (ccut) {
float factorskin, factorsat, factor, factorskinext, interm;
- float chroma = sqrt(SQR(atmp) + SQR(btmp) + 0.001f);
+ float chroma = sqrt (SQR (atmp) + SQR (btmp) + 0.001f);
float chromaCfactor = (satcurve[chroma * adjustr]) / (chroma * adjustr); //apply C=f(C)
float curf = 0.7f; //empirical coeff because curve is more progressive
float scale = 100.0f / 100.1f; //reduction in normal zone for curve CC
@@ -6029,31 +5996,31 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBu
float deltaHH;//HH value transition for CC curve
protect_redcur = curf * protectRed; //default=60 chroma: one can put more or less if necessary...in 'option' 40...160==> curf =because curve is more progressive
- if(protect_redcur < 20.0f) {
+ if (protect_redcur < 20.0f) {
protect_redcur = 20.0; // avoid too low value
}
- if(protect_redcur > 180.0f) {
+ if (protect_redcur > 180.0f) {
protect_redcur = 180.0; // avoid too high value
}
- protect_redhcur = curf * float(protectRedH); //default=0.4 rad : one can put more or less if necessary...in 'option' 0.2 ..1.0 ==> curf =because curve is more progressive
+ protect_redhcur = curf * float (protectRedH); //default=0.4 rad : one can put more or less if necessary...in 'option' 0.2 ..1.0 ==> curf =because curve is more progressive
- if(protect_redhcur < 0.1f) {
+ if (protect_redhcur < 0.1f) {
protect_redhcur = 0.1f; //avoid divide by 0 and negatives values
}
- if(protect_redhcur > 1.0f) {
+ if (protect_redhcur > 1.0f) {
protect_redhcur = 1.0f; //avoid too big values
}
deltaHH = protect_redhcur; //transition hue
- if(chromaCfactor > 0.0) {
+ if (chromaCfactor > 0.0) {
Color::scalered ( rstprotection, chromaCfactor, 0.0, HH, deltaHH, scale, scaleext); //1.0
}
- if(chromaCfactor > 1.0) {
+ if (chromaCfactor > 1.0) {
interm = (chromaCfactor - 1.0f) * 100.0f;
factorskin = 1.0f + (interm * scale) / 100.0f;
factorskinext = 1.0f + (interm * scaleext) / 100.0f;
@@ -6076,14 +6043,14 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBu
// end chroma C=f(C)
//update histogram C
- if(pW != 1) { //only with improccoordinator
- int posp = (int)sqrt(atmp * atmp + btmp * btmp);
+ if (pW != 1) { //only with improccoordinator
+ int posp = (int)sqrt (atmp * atmp + btmp * btmp);
hist16Clad[posp]++;
}
if (editPipette && editID == EUID_Lab_LCCurve) {
- float chromapiplc = sqrt(SQR(atmp) + SQR(btmp) + 0.001f);
- editWhatever->v(i, j) = LIM01((chromapiplc) / (48000.f));
+ float chromapiplc = sqrt (SQR (atmp) + SQR (btmp) + 0.001f);
+ editWhatever->v (i, j) = LIM01 ((chromapiplc) / (48000.f));
}//Lab L=f(C) pipette
@@ -6101,43 +6068,43 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBu
float zz = 0.0f;
float yy = 0.0f;
- if(Chprov1 < chrmin) {
- yy = SQR(Chprov1 / chrmin) * xx;
+ if (Chprov1 < chrmin) {
+ yy = SQR (Chprov1 / chrmin) * xx;
} else {
yy = xx; //avoid artifact for low C
}
- if(!LCredsk) {
+ if (!LCredsk) {
skbeg = -3.1415;
skend = 3.14159;
skdeltaHH = 0.001f;
}
- if(HH > skbeg && HH < skend ) {
+ if (HH > skbeg && HH < skend ) {
zz = yy;
- } else if(HH > skbeg - skdeltaHH && HH <= skbeg) { //transition
+ } else if (HH > skbeg - skdeltaHH && HH <= skbeg) { //transition
aa = yy / skdeltaHH;
bb = -aa * (skbeg - skdeltaHH);
zz = aa * HH + bb;
- } else if(HH >= skend && HH < skend + skdeltaHH) { //transition
+ } else if (HH >= skend && HH < skend + skdeltaHH) { //transition
aa = -yy / skdeltaHH;
bb = -aa * (skend + skdeltaHH);
zz = aa * HH + bb;
}
- float chroma = sqrt(SQR(atmp) + SQR(btmp) + 0.001f);
+ float chroma = sqrt (SQR (atmp) + SQR (btmp) + 0.001f);
float Lc = (lhskcurve[chroma * adjustr]) / (chroma * adjustr); //apply L=f(C)
Lc = (Lc - 1.0f) * zz + 1.0f; //reduct action
Lprov1 *= Lc; //adjust luminance
}
//update histo LC
- if(pW != 1) { //only with improccoordinator
+ if (pW != 1) { //only with improccoordinator
int posl = Lprov1 * 327.68f;
hist16Llad[posl]++;
}
- Chprov1 = sqrt(SQR(atmp) + SQR(btmp)) / 327.68f;
+ Chprov1 = sqrt (SQR (atmp) + SQR (btmp)) / 327.68f;
// labCurve.bwtoning option allows to decouple modulation of a & b curves by saturation
// with bwtoning enabled the net effect of a & b curves is visible
@@ -6148,17 +6115,17 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBu
if (avoidColorShift) {
//gamutmap Lch ==> preserve Hue,but a little slower than gamutbdy for high values...and little faster for low values
- if(gamutLch) {
+ if (gamutLch) {
float R, G, B;
#ifdef _DEBUG
bool neg = false;
bool more_rgb = false;
//gamut control : Lab values are in gamut
- Color::gamutLchonly(HH, sincosval, Lprov1, Chprov1, R, G, B, wip, highlight, 0.15f, 0.96f, neg, more_rgb);
+ Color::gamutLchonly (HH, sincosval, Lprov1, Chprov1, R, G, B, wip, highlight, 0.15f, 0.96f, neg, more_rgb);
#else
//gamut control : Lab values are in gamut
- Color::gamutLchonly(HH, sincosval, Lprov1, Chprov1, R, G, B, wip, highlight, 0.15f, 0.96f);
+ Color::gamutLchonly (HH, sincosval, Lprov1, Chprov1, R, G, B, wip, highlight, 0.15f, 0.96f);
#endif
lnew->L[i][j] = Lprov1 * 327.68f;
// float2 sincosval = xsincosf(HH);
@@ -6168,9 +6135,9 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBu
//use gamutbdy
//Luv limiter
float Y, u, v;
- Color::Lab2Yuv(lnew->L[i][j], atmp, btmp, Y, u, v);
+ Color::Lab2Yuv (lnew->L[i][j], atmp, btmp, Y, u, v);
//Yuv2Lab includes gamut restriction map
- Color::Yuv2Lab(Y, u, v, lnew->L[i][j], lnew->a[i][j], lnew->b[i][j], wp);
+ Color::Yuv2Lab (Y, u, v, lnew->L[i][j], lnew->a[i][j], lnew->b[i][j], wp);
}
if (utili || autili || butili || ccut || clut || cclutili || chutili || lhutili || hhutili || clcutili || chromaticity) {
@@ -6178,16 +6145,16 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBu
float correctlum = 0.f;
Lprov1 = lnew->L[i][j] / 327.68f;
- Chprov = sqrt(SQR(lnew->a[i][j]) + SQR(lnew->b[i][j])) / 327.68f;
+ Chprov = sqrt (SQR (lnew->a[i][j]) + SQR (lnew->b[i][j])) / 327.68f;
#ifdef _DEBUG
- Color::AllMunsellLch(/*lumaMuns*/true, Lprov1, LL, HH, Chprov, memChprov, correctionHue, correctlum, MunsDebugInfo);
+ Color::AllMunsellLch (/*lumaMuns*/true, Lprov1, LL, HH, Chprov, memChprov, correctionHue, correctlum, MunsDebugInfo);
#else
- Color::AllMunsellLch(/*lumaMuns*/true, Lprov1, LL, HH, Chprov, memChprov, correctionHue, correctlum);
+ Color::AllMunsellLch (/*lumaMuns*/true, Lprov1, LL, HH, Chprov, memChprov, correctionHue, correctlum);
#endif
- if(correctionHue != 0.f || correctlum != 0.f) {
- if(fabs(correctionHue) < 0.015f) {
+ if (correctionHue != 0.f || correctlum != 0.f) {
+ if (fabs (correctionHue) < 0.015f) {
HH += correctlum; // correct only if correct Munsell chroma very little.
}
@@ -6197,7 +6164,7 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBu
else if(fabs(correctionHue) < 0.1f) HH+=0.35f*correctlum;
else if(fabs(correctionHue) < 0.015f) HH+=correctlum; // correct only if correct Munsell chroma very little.
*/
- sincosval = xsincosf(HH + correctionHue);
+ sincosval = xsincosf (HH + correctionHue);
}
lnew->a[i][j] = 327.68f * Chprov * sincosval.y; // apply Munsell
@@ -6206,7 +6173,7 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBu
} else {
// if(Lprov1 > maxlp) maxlp=Lprov1;
// if(Lprov1 < minlp) minlp=Lprov1;
- if(!bwToning) {
+ if (!bwToning) {
lnew->L[i][j] = Lprov1 * 327.68f;
// float2 sincosval = xsincosf(HH);
lnew->a[i][j] = 327.68f * Chprov1 * sincosval.y;
@@ -6221,20 +6188,20 @@ SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBu
}
} // end of parallelization
- if(pW != 1) { //only with improccoordinator
+ if (pW != 1) { //only with improccoordinator
//update histogram C with data chromaticity and not with CC curve
- hist16Clad.compressTo(histCCurve);
+ hist16Clad.compressTo (histCCurve);
//update histogram L with data luminance
- hist16Llad.compressTo(histLCurve);
+ hist16Llad.compressTo (histLCurve);
}
#ifdef _DEBUG
if (settings->verbose) {
t2e.set();
- printf("Color::AllMunsellLch (correction performed in %d usec):\n", t2e.etime(t1e));
- printf(" Munsell chrominance: MaxBP=%1.2frad MaxRY=%1.2frad MaxGY=%1.2frad MaxRP=%1.2frad dep=%u\n", MunsDebugInfo->maxdhue[0], MunsDebugInfo->maxdhue[1], MunsDebugInfo->maxdhue[2], MunsDebugInfo->maxdhue[3], MunsDebugInfo->depass);
- printf(" Munsell luminance : MaxBP=%1.2frad MaxRY=%1.2frad MaxGY=%1.2frad MaxRP=%1.2frad dep=%u\n", MunsDebugInfo->maxdhuelum[0], MunsDebugInfo->maxdhuelum[1], MunsDebugInfo->maxdhuelum[2], MunsDebugInfo->maxdhuelum[3], MunsDebugInfo->depassLum);
+ printf ("Color::AllMunsellLch (correction performed in %d usec):\n", t2e.etime (t1e));
+ printf (" Munsell chrominance: MaxBP=%1.2frad MaxRY=%1.2frad MaxGY=%1.2frad MaxRP=%1.2frad dep=%u\n", MunsDebugInfo->maxdhue[0], MunsDebugInfo->maxdhue[1], MunsDebugInfo->maxdhue[2], MunsDebugInfo->maxdhue[3], MunsDebugInfo->depass);
+ printf (" Munsell luminance : MaxBP=%1.2frad MaxRY=%1.2frad MaxGY=%1.2frad MaxRP=%1.2frad dep=%u\n", MunsDebugInfo->maxdhuelum[0], MunsDebugInfo->maxdhuelum[1], MunsDebugInfo->maxdhuelum[2], MunsDebugInfo->maxdhuelum[3], MunsDebugInfo->depassLum);
}
delete MunsDebugInfo;
@@ -6365,69 +6332,69 @@ void ImProcFunctions::defringe (LabImage* lab)
if (params->defringe.enabled && lab->W >= 8 && lab->H >= 8)
{
- PF_correct_RT(lab, lab, params->defringe.radius, params->defringe.threshold);
+ PF_correct_RT (lab, lab, params->defringe.radius, params->defringe.threshold);
}
}
void ImProcFunctions::defringecam (CieImage* ncie)
{
if (params->defringe.enabled && ncie->W >= 8 && ncie->H >= 8) {
- PF_correct_RTcam(ncie, ncie, params->defringe.radius, params->defringe.threshold);
+ PF_correct_RTcam (ncie, ncie, params->defringe.radius, params->defringe.threshold);
}
}
-void ImProcFunctions::badpixcam(CieImage* ncie, double rad, int thr, int mode, float b_l, float t_l, float t_r, float b_r, float skinprot, float chrom, int hotbad)
+void ImProcFunctions::badpixcam (CieImage* ncie, double rad, int thr, int mode, float b_l, float t_l, float t_r, float b_r, float skinprot, float chrom, int hotbad)
{
- if(ncie->W >= 8 && ncie->H >= 8) {
- Badpixelscam(ncie, ncie, rad, thr, mode, b_l, t_l, t_r, b_r, skinprot, chrom, hotbad);
+ if (ncie->W >= 8 && ncie->H >= 8) {
+ Badpixelscam (ncie, ncie, rad, thr, mode, b_l, t_l, t_r, b_r, skinprot, chrom, hotbad);
}
}
-void ImProcFunctions::badpixlab(LabImage* lab, double rad, int thr, int mode, float b_l, float t_l, float t_r, float b_r, float skinprot, float chrom)
+void ImProcFunctions::badpixlab (LabImage* lab, double rad, int thr, int mode, float b_l, float t_l, float t_r, float b_r, float skinprot, float chrom)
{
- if(lab->W >= 8 && lab->H >= 8) {
- BadpixelsLab(lab, lab, rad, thr, mode, b_l, t_l, t_r, b_r, skinprot, chrom);
+ if (lab->W >= 8 && lab->H >= 8) {
+ BadpixelsLab (lab, lab, rad, thr, mode, b_l, t_l, t_r, b_r, skinprot, chrom);
}
}
void ImProcFunctions::dirpyrequalizer (LabImage* lab, int scale)
{
if (params->dirpyrequalizer.enabled && lab->W >= 8 && lab->H >= 8) {
- float b_l = static_cast(params->dirpyrequalizer.hueskin.value[0]) / 100.0f;
- float t_l = static_cast(params->dirpyrequalizer.hueskin.value[1]) / 100.0f;
- float b_r = static_cast(params->dirpyrequalizer.hueskin.value[2]) / 100.0f;
- float t_r = static_cast(params->dirpyrequalizer.hueskin.value[3]) / 100.0f;
+ float b_l = static_cast (params->dirpyrequalizer.hueskin.value[0]) / 100.0f;
+ float t_l = static_cast (params->dirpyrequalizer.hueskin.value[1]) / 100.0f;
+ float b_r = static_cast (params->dirpyrequalizer.hueskin.value[2]) / 100.0f;
+ float t_r = static_cast (params->dirpyrequalizer.hueskin.value[3]) / 100.0f;
int choice = 0; //I have not disabled this statement in case of ! always 0
// if (params->dirpyrequalizer.algo=="FI") choice=0;
// else if(params->dirpyrequalizer.algo=="LA") choice=1;
float artifact = (float) settings->artifact_cbdl;
- if(artifact > 6.f) {
+ if (artifact > 6.f) {
artifact = 6.f;
}
- if(artifact < 0.f) {
+ if (artifact < 0.f) {
artifact = 1.f;
}
float chrom = 50.f;
- if(params->dirpyrequalizer.gamutlab) {
+ if (params->dirpyrequalizer.gamutlab) {
ImProcFunctions::badpixlab (lab, artifact, 5, 3, b_l, t_l, t_r, b_r, params->dirpyrequalizer.skinprotect, chrom); //for artifacts
}
//dirpyrLab_equalizer(lab, lab, params->dirpyrequalizer.mult);
- dirpyr_equalizer(lab->L, lab->L, lab->W, lab->H, lab->a, lab->b, lab->a, lab->b, params->dirpyrequalizer.mult, params->dirpyrequalizer.threshold, params->dirpyrequalizer.skinprotect, params->dirpyrequalizer.gamutlab, b_l, t_l, t_r, b_r, choice, scale);
+ dirpyr_equalizer (lab->L, lab->L, lab->W, lab->H, lab->a, lab->b, lab->a, lab->b, params->dirpyrequalizer.mult, params->dirpyrequalizer.threshold, params->dirpyrequalizer.skinprotect, params->dirpyrequalizer.gamutlab, b_l, t_l, t_r, b_r, choice, scale);
}
}
-void ImProcFunctions::EPDToneMapCIE(CieImage *ncie, float a_w, float c_, float w_h, int Wid, int Hei, int begh, int endh, float minQ, float maxQ, unsigned int Iterates, int skip)
+void ImProcFunctions::EPDToneMapCIE (CieImage *ncie, float a_w, float c_, float w_h, int Wid, int Hei, int begh, int endh, float minQ, float maxQ, unsigned int Iterates, int skip)
{
- if(!params->epd.enabled) {
+ if (!params->epd.enabled) {
return;
}
- if(params->wavelet.enabled && params->wavelet.tmrs != 0) {
+ if (params->wavelet.enabled && params->wavelet.tmrs != 0) {
return;
}
@@ -6436,19 +6403,18 @@ void ImProcFunctions::EPDToneMapCIE(CieImage *ncie, float a_w, float c_, float w
float sca = params->epd.scale;
float gamm = params->epd.gamma;
float rew = params->epd.reweightingIterates;
- unsigned int i, N = Wid * Hei;
float Qpro = ( 4.0 / c_) * ( a_w + 4.0 ) ; //estimate Q max if J=100.0
float *Qpr = ncie->Q_p[0];
if (settings->verbose) {
- printf("minQ=%f maxQ=%f Qpro=%f\n", minQ, maxQ, Qpro);
+ printf ("minQ=%f maxQ=%f Qpro=%f\n", minQ, maxQ, Qpro);
}
- if(maxQ > Qpro) {
+ if (maxQ > Qpro) {
Qpro = maxQ;
}
- EdgePreservingDecomposition epd(Wid, Hei);
+ EdgePreservingDecomposition epd (Wid, Hei);
#pragma omp parallel for
@@ -6457,24 +6423,24 @@ void ImProcFunctions::EPDToneMapCIE(CieImage *ncie, float a_w, float c_, float w
ncie->Q_p[i][j] = gamm * ncie->Q_p[i][j] / (Qpro);
}
- float Compression = expf(-stren); //This modification turns numbers symmetric around 0 into exponents.
+ float Compression = expf (-stren); //This modification turns numbers symmetric around 0 into exponents.
float DetailBoost = stren;
- if(stren < 0.0f) {
+ if (stren < 0.0f) {
DetailBoost = 0.0f; //Go with effect of exponent only if uncompressing.
}
//Auto select number of iterates. Note that p->EdgeStopping = 0 makes a Gaussian blur.
- if(Iterates == 0) {
- Iterates = (unsigned int)(edgest * 15.0);
+ if (Iterates == 0) {
+ Iterates = (unsigned int) (edgest * 15.0);
}
//Jacques Desmis : always Iterates=5 for compatibility images between preview and output
- epd.CompressDynamicRange(Qpr, (float)sca / skip, (float)edgest, Compression, DetailBoost, Iterates, rew, Qpr);
+ epd.CompressDynamicRange (Qpr, (float)sca / skip, (float)edgest, Compression, DetailBoost, Iterates, rew, Qpr);
//Restore past range, also desaturate a bit per Mantiuk's Color correction for tone mapping.
- float s = (1.0f + 38.7889f) * powf(Compression, 1.5856f) / (1.0f + 38.7889f * powf(Compression, 1.5856f));
+ float s = (1.0f + 38.7889f) * powf (Compression, 1.5856f) / (1.0f + 38.7889f * powf (Compression, 1.5856f));
#ifndef _DEBUG
#pragma omp parallel for schedule(dynamic,10)
#endif
@@ -6524,7 +6490,7 @@ void ImProcFunctions::EPDToneMapCIE(CieImage *ncie, float a_w, float c_, float w
*/
}
-void ImProcFunctions::EPDToneMaplocal(LabImage *lab, LabImage *tmp1, unsigned int Iterates, int skip)
+void ImProcFunctions::EPDToneMaplocal (LabImage *lab, LabImage *tmp1, unsigned int Iterates, int skip)
{
float stren = ((float)params->locallab.stren) / 100.f;
@@ -6538,8 +6504,8 @@ void ImProcFunctions::EPDToneMaplocal(LabImage *lab, LabImage *tmp1, unsigned in
float *b = lab->b[0];
unsigned int i, N = lab->W * lab->H;
int WW = lab->W ;
- int HH = lab->H ;
- EdgePreservingDecomposition epd(lab->W, lab->H);
+// int HH = lab->H ;
+ EdgePreservingDecomposition epd (lab->W, lab->H);
//Due to the taking of logarithms, L must be nonnegative. Further, scale to 0 to 1 using nominal range of L, 0 to 15 bit.
float minL = FLT_MAX;
@@ -6550,35 +6516,35 @@ void ImProcFunctions::EPDToneMaplocal(LabImage *lab, LabImage *tmp1, unsigned in
float lmaxL = 0.f;
#pragma omp for
- for(i = 0; i < N; i++) {
- if(L[i] < lminL) {
+ for (i = 0; i < N; i++) {
+ if (L[i] < lminL) {
lminL = L[i];
}
- if(L[i] > lmaxL) {
+ if (L[i] > lmaxL) {
lmaxL = L[i];
}
}
#pragma omp critical
- if(lminL < minL) {
+ if (lminL < minL) {
minL = lminL;
}
- if(lmaxL > maxL) {
+ if (lmaxL > maxL) {
maxL = lmaxL;
}
}
- if(minL > 0.0f) {
+ if (minL > 0.0f) {
minL = 0.0f; //Disable the shift if there are no negative numbers. I wish there were just no negative numbers to begin with.
}
#pragma omp parallel for
- for(i = 0; i < N; i++)
+ for (i = 0; i < N; i++)
//{L[i] = (L[i] - minL)/32767.0f;
{
L[i] = (L[i] - minL) / maxL;
@@ -6586,16 +6552,16 @@ void ImProcFunctions::EPDToneMaplocal(LabImage *lab, LabImage *tmp1, unsigned in
}
//Some interpretations.
- float Compression = expf(-stren); //This modification turns numbers symmetric around 0 into exponents.
+ float Compression = expf (-stren); //This modification turns numbers symmetric around 0 into exponents.
float DetailBoost = stren;
- if(stren < 0.0f) {
+ if (stren < 0.0f) {
DetailBoost = 0.0f; //Go with effect of exponent only if uncompressing.
}
//Auto select number of iterates. Note that p->EdgeStopping = 0 makes a Gaussian blur.
- if(Iterates == 0) {
- Iterates = (unsigned int)(edgest * 15.0f);
+ if (Iterates == 0) {
+ Iterates = (unsigned int) (edgest * 15.0f);
}
/* Debuggery. Saves L for toying with outside of RT.
@@ -6605,15 +6571,15 @@ void ImProcFunctions::EPDToneMaplocal(LabImage *lab, LabImage *tmp1, unsigned in
fwrite(L, N, sizeof(float), f);
fclose(f);*/
- epd.CompressDynamicRange(L, sca / float(skip), edgest, Compression, DetailBoost, Iterates, rew, L);
+ epd.CompressDynamicRange (L, sca / float (skip), edgest, Compression, DetailBoost, Iterates, rew, L);
//Restore past range, also desaturate a bit per Mantiuk's Color correction for tone mapping.
- float s = (1.0f + 38.7889f) * powf(Compression, 1.5856f) / (1.0f + 38.7889f * powf(Compression, 1.5856f));
+ float s = (1.0f + 38.7889f) * powf (Compression, 1.5856f) / (1.0f + 38.7889f * powf (Compression, 1.5856f));
#ifdef _OPENMP
#pragma omp parallel for // removed schedule(dynamic,10)
#endif
- for(int i = 0; i < N; i++) {
+ for (unsigned int i = 0; i < N; i++) {
int x = i / WW;
int y = i - x * WW;
@@ -6630,18 +6596,18 @@ void ImProcFunctions::EPDToneMaplocal(LabImage *lab, LabImage *tmp1, unsigned in
//Map tones by way of edge preserving decomposition. Is this the right way to include source?
//#include "EdgePreservingDecomposition.cc"
-void ImProcFunctions::EPDToneMap(LabImage *lab, unsigned int Iterates, int skip)
+void ImProcFunctions::EPDToneMap (LabImage *lab, unsigned int Iterates, int skip)
{
//Hasten access to the parameters.
// EPDParams *p = (EPDParams *)(¶ms->epd);
//Enabled? Leave now if not.
// if(!p->enabled) return;
- if(!params->epd.enabled) {
+ if (!params->epd.enabled) {
return;
}
- if(params->wavelet.enabled && params->wavelet.tmrs != 0) {
+ if (params->wavelet.enabled && params->wavelet.tmrs != 0) {
return;
}
@@ -6654,8 +6620,8 @@ void ImProcFunctions::EPDToneMap(LabImage *lab, unsigned int Iterates, int skip)
float *L = lab->L[0];
float *a = lab->a[0];
float *b = lab->b[0];
- unsigned int i, N = lab->W * lab->H;
- EdgePreservingDecomposition epd(lab->W, lab->H);
+ size_t N = lab->W * lab->H;
+ EdgePreservingDecomposition epd (lab->W, lab->H);
//Due to the taking of logarithms, L must be nonnegative. Further, scale to 0 to 1 using nominal range of L, 0 to 15 bit.
float minL = FLT_MAX;
@@ -6666,35 +6632,35 @@ void ImProcFunctions::EPDToneMap(LabImage *lab, unsigned int Iterates, int skip)
float lmaxL = 0.f;
#pragma omp for
- for(i = 0; i < N; i++) {
- if(L[i] < lminL) {
+ for (size_t i = 0; i < N; i++) {
+ if (L[i] < lminL) {
lminL = L[i];
}
- if(L[i] > lmaxL) {
+ if (L[i] > lmaxL) {
lmaxL = L[i];
}
}
#pragma omp critical
+ {
+ if (lminL < minL) {
+ minL = lminL;
+ }
- if(lminL < minL) {
- minL = lminL;
+ if (lmaxL > maxL) {
+ maxL = lmaxL;
+ }
}
-
- if(lmaxL > maxL) {
- maxL = lmaxL;
- }
-
}
- if(minL > 0.0f) {
+ if (minL > 0.0f) {
minL = 0.0f; //Disable the shift if there are no negative numbers. I wish there were just no negative numbers to begin with.
}
#pragma omp parallel for
- for(i = 0; i < N; i++)
+ for (size_t i = 0; i < N; ++i)
//{L[i] = (L[i] - minL)/32767.0f;
{
L[i] = (L[i] - minL) / maxL;
@@ -6702,16 +6668,16 @@ void ImProcFunctions::EPDToneMap(LabImage *lab, unsigned int Iterates, int skip)
}
//Some interpretations.
- float Compression = expf(-stren); //This modification turns numbers symmetric around 0 into exponents.
+ float Compression = expf (-stren); //This modification turns numbers symmetric around 0 into exponents.
float DetailBoost = stren;
- if(stren < 0.0f) {
+ if (stren < 0.0f) {
DetailBoost = 0.0f; //Go with effect of exponent only if uncompressing.
}
//Auto select number of iterates. Note that p->EdgeStopping = 0 makes a Gaussian blur.
- if(Iterates == 0) {
- Iterates = (unsigned int)(edgest * 15.0f);
+ if (Iterates == 0) {
+ Iterates = (unsigned int) (edgest * 15.0f);
}
/* Debuggery. Saves L for toying with outside of RT.
@@ -6721,15 +6687,15 @@ void ImProcFunctions::EPDToneMap(LabImage *lab, unsigned int Iterates, int skip)
fwrite(L, N, sizeof(float), f);
fclose(f);*/
- epd.CompressDynamicRange(L, sca / float(skip), edgest, Compression, DetailBoost, Iterates, rew, L);
+ epd.CompressDynamicRange (L, sca / float (skip), edgest, Compression, DetailBoost, Iterates, rew, L);
//Restore past range, also desaturate a bit per Mantiuk's Color correction for tone mapping.
- float s = (1.0f + 38.7889f) * powf(Compression, 1.5856f) / (1.0f + 38.7889f * powf(Compression, 1.5856f));
+ float s = (1.0f + 38.7889f) * powf (Compression, 1.5856f) / (1.0f + 38.7889f * powf (Compression, 1.5856f));
#ifdef _OPENMP
#pragma omp parallel for // removed schedule(dynamic,10)
#endif
- for(int ii = 0; ii < N; ii++) {
+ for (size_t ii = 0; ii < N; ++ii) {
a[ii] *= s;
b[ii] *= s;
L[ii] = L[ii] * maxL * (1.f / gamm) + minL;
@@ -6756,7 +6722,7 @@ void ImProcFunctions::getAutoExp (const LUTu &histogram, int histcompr, double
float ave = 0.f, hidev = 0.f, lodev = 0.f;
//find average luminance
- histogram.getSumAndAverage(sum, ave);
+ histogram.getSumAndAverage (sum, ave);
//find median of luminance
int median = 0, count = histogram[0];
@@ -6783,18 +6749,18 @@ void ImProcFunctions::getAutoExp (const LUTu &histogram, int histcompr, double
int i = 0;
- for (; i < min((int)ave, imax); i++) {
+ for (; i < min ((int)ave, imax); i++) {
if (count < 8) {
octile[count] += histogram[i];
if (octile[count] > sum / 8.f || (count == 7 && octile[count] > sum / 16.f)) {
- octile[count] = xlog(1. + (float)i) / log(2.f);
+ octile[count] = xlog (1. + (float)i) / log (2.f);
count++;// = min(count+1,7);
}
}
//lodev += SQR(ave-i)*histogram[i];
- lodev += (xlog(ave + 1.f) - xlog((float)i + 1.)) * histogram[i];
+ lodev += (xlog (ave + 1.f) - xlog ((float)i + 1.)) * histogram[i];
losum += histogram[i];
}
@@ -6803,13 +6769,13 @@ void ImProcFunctions::getAutoExp (const LUTu &histogram, int histcompr, double
octile[count] += histogram[i];
if (octile[count] > sum / 8.f || (count == 7 && octile[count] > sum / 16.f)) {
- octile[count] = xlog(1. + (float)i) / log(2.f);
+ octile[count] = xlog (1. + (float)i) / log (2.f);
count++;// = min(count+1,7);
}
}
//hidev += SQR(i-ave)*histogram[i];
- hidev += (xlog((float)i + 1.) - xlog(ave + 1.f)) * histogram[i];
+ hidev += (xlog ((float)i + 1.) - xlog (ave + 1.f)) * histogram[i];
hisum += histogram[i];
}
@@ -6824,15 +6790,15 @@ void ImProcFunctions::getAutoExp (const LUTu &histogram, int histcompr, double
return;
}
- lodev = (lodev / (log(2.f) * losum));
- hidev = (hidev / (log(2.f) * hisum));
+ lodev = (lodev / (log (2.f) * losum));
+ hidev = (hidev / (log (2.f) * hisum));
- if (octile[6] > log((float)imax + 1.f) / log2(2.f)) { //if very overxposed image
+ if (octile[6] > log ((float)imax + 1.f) / log2 (2.f)) { //if very overxposed image
octile[6] = 1.5f * octile[5] - 0.5f * octile[4];
overex = 2;
}
- if (octile[7] > log((float)imax + 1.f) / log2(2.f)) { //if overexposed
+ if (octile[7] > log ((float)imax + 1.f) / log2 (2.f)) { //if overexposed
octile[7] = 1.5f * octile[6] - 0.5f * octile[5];
overex = 1;
}
@@ -6845,7 +6811,7 @@ void ImProcFunctions::getAutoExp (const LUTu &histogram, int histcompr, double
oct7 = octile[7];
- for(int i = 1; i < 8; i++) {
+ for (int i = 1; i < 8; i++) {
if (octile[i] == 0.0f) {
octile[i] = octile[i - 1];
}
@@ -6854,7 +6820,7 @@ void ImProcFunctions::getAutoExp (const LUTu &histogram, int histcompr, double
// compute weighted average separation of octiles
// for future use in contrast setting
for (int i = 1; i < 6; i++) {
- ospread += (octile[i + 1] - octile[i]) / max(0.5f, (i > 2 ? (octile[i + 1] - octile[3]) : (octile[3] - octile[i])));
+ ospread += (octile[i + 1] - octile[i]) / max (0.5f, (i > 2 ? (octile[i + 1] - octile[3]) : (octile[3] - octile[i])));
}
ospread /= 5.f;
@@ -6871,7 +6837,7 @@ void ImProcFunctions::getAutoExp (const LUTu &histogram, int histcompr, double
// compute clipping points based on the original histograms (linear, without exp comp.)
- int clipped = 0;
+ unsigned int clipped = 0;
int rawmax = (imax) - 1;
while (histogram[rawmax] + clipped <= 0 && rawmax > 1) {
@@ -6880,17 +6846,15 @@ void ImProcFunctions::getAutoExp (const LUTu &histogram, int histcompr, double
}
//compute clipped white point
- int clippable = (int)(sum * clip / 100.f );
- int somm = sum;
+ unsigned int clippable = (int) (sum * clip / 100.f );
clipped = 0;
int whiteclip = (imax) - 1;
- while (whiteclip > 1 && histogram[whiteclip] + clipped <= clippable) {
+ while (whiteclip > 1 && (histogram[whiteclip] + clipped) <= clippable) {
clipped += histogram[whiteclip];
whiteclip--;
}
- int clipwh = clipped;
//compute clipped black point
clipped = 0;
int shc = 0;
@@ -6900,8 +6864,6 @@ void ImProcFunctions::getAutoExp (const LUTu &histogram, int histcompr, double
shc++;
}
- int clipbl = clipped;
-
//rescale to 65535 max
rawmax <<= histcompr;
whiteclip <<= histcompr;
@@ -6917,26 +6879,25 @@ void ImProcFunctions::getAutoExp (const LUTu &histogram, int histcompr, double
//compute exposure compensation as geometric mean of the amount that
//sets the mean or median at middle gray, and the amount that sets the estimated top
//of the histogram at or near clipping.
- float expo = log(midgray * scale / (ave - shc + midgray * shc));
//float expcomp1 = (log(/*(median/ave)*//*(hidev/lodev)*/midgray*scale/(ave-shc+midgray*shc))+log((hidev/lodev)))/log(2.f);
- float expcomp1 = (log(/*(median/ave)*//*(hidev/lodev)*/midgray * scale / (ave - shc + midgray * shc))) / log(2.f);
+ float expcomp1 = (log (/*(median/ave)*//*(hidev/lodev)*/midgray * scale / (ave - shc + midgray * shc))) / log (2.f);
float expcomp2;
- if(overex == 0) { // image is not overexposed
- expcomp2 = 0.5f * ( (15.5f - histcompr - (2.f * oct7 - oct6)) + log(scale / rawmax) / log(2.f) );
+ if (overex == 0) { // image is not overexposed
+ expcomp2 = 0.5f * ( (15.5f - histcompr - (2.f * oct7 - oct6)) + log (scale / rawmax) / log (2.f) );
} else {
- expcomp2 = 0.5f * ( (15.5f - histcompr - (2.f * octile[7] - octile[6])) + log(scale / rawmax) / log(2.f) );
+ expcomp2 = 0.5f * ( (15.5f - histcompr - (2.f * octile[7] - octile[6])) + log (scale / rawmax) / log (2.f) );
}
- if(fabs(expcomp1) - fabs(expcomp2) > 1.f) { //for great expcomp
- expcomp = (expcomp1 * fabs(expcomp2) + expcomp2 * fabs(expcomp1)) / (fabs(expcomp1) + fabs(expcomp2));
+ if (fabs (expcomp1) - fabs (expcomp2) > 1.f) { //for great expcomp
+ expcomp = (expcomp1 * fabs (expcomp2) + expcomp2 * fabs (expcomp1)) / (fabs (expcomp1) + fabs (expcomp2));
} else {
expcomp = 0.5 * (double)expcomp1 + 0.5 * (double) expcomp2; //for small expcomp
}
- float gain = exp((float)expcomp * log(2.f));
+ float gain = exp ((float)expcomp * log (2.f));
- float corr = sqrt(gain * scale / rawmax);
+ float corr = sqrt (gain * scale / rawmax);
black = (int) shc * corr;
@@ -6945,12 +6906,12 @@ void ImProcFunctions::getAutoExp (const LUTu &histogram, int histcompr, double
//this is a series approximation of the actual formula for comp,
//which is a transcendental equation
float comp = (gain * ((float)whiteclip) / scale - 1.f) * 2.3f; // 2.3 instead of 2 to increase slightly comp
- hlcompr = (int)(100.*comp / (max(0.0, expcomp) + 1.0));
- hlcompr = max(0, min(100, hlcompr));
+ hlcompr = (int) (100.*comp / (max (0.0, expcomp) + 1.0));
+ hlcompr = max (0, min (100, hlcompr));
//now find brightness if gain didn't bring ave to midgray using
//the envelope of the actual 'control cage' brightness curve for simplicity
- float midtmp = gain * sqrt(median * ave) / scale;
+ float midtmp = gain * sqrt (median * ave) / scale;
if (midtmp < 0.1f) {
bright = (midgray - midtmp) * 15.0 / (midtmp);
@@ -6958,13 +6919,13 @@ void ImProcFunctions::getAutoExp (const LUTu &histogram, int histcompr, double
bright = (midgray - midtmp) * 15.0 / (0.10833 - 0.0833 * midtmp);
}
- bright = 0.25 */*(median/ave)*(hidev/lodev)*/max(0, bright);
+ bright = 0.25 */*(median/ave)*(hidev/lodev)*/max (0, bright);
//compute contrast that spreads the average spacing of octiles
contr = (int) 50.0f * (1.1f - ospread);
- contr = max(0, min(100, contr));
+ contr = max (0, min (100, contr));
//take gamma into account
- double whiteclipg = (int)(CurveFactory::gamma2 (whiteclip * corr / 65536.0) * 65536.0);
+ double whiteclipg = (int) (CurveFactory::gamma2 (whiteclip * corr / 65536.0) * 65536.0);
float gavg = 0.;
@@ -6986,10 +6947,10 @@ void ImProcFunctions::getAutoExp (const LUTu &histogram, int histcompr, double
}
}
- whiteclipg = CurveFactory::igamma2 ((float)(whiteclipg / 65535.0)) * 65535.0; //need to inverse gamma transform to get correct exposure compensation parameter
+ whiteclipg = CurveFactory::igamma2 ((float) (whiteclipg / 65535.0)) * 65535.0; //need to inverse gamma transform to get correct exposure compensation parameter
//corection with gamma
- black = (int)((65535 * black) / whiteclipg);
+ black = (int) ((65535 * black) / whiteclipg);
//expcomp = log(65535.0 / (whiteclipg)) / log(2.0);
//diagnostics
@@ -7045,7 +7006,7 @@ void ImProcFunctions::getAutoExp (const LUTu &histogram, int histcompr, double
expcomp = 12.0;
}
- bright = max(-100, min(bright, 100));
+ bright = max (-100, min (bright, 100));
}
@@ -7108,7 +7069,7 @@ double ImProcFunctions::getAutoDistor (const Glib::ustring &fname, int thumb_si
double dist_amount;
int dist_result = calcDistortion (thumbGray, rawGray, width, h_thumb, 1, dist_amount);
- if(dist_result == -1) { // not enough features found, try increasing max. number of features by factor 4
+ if (dist_result == -1) { // not enough features found, try increasing max. number of features by factor 4
dist_result = calcDistortion (thumbGray, rawGray, width, h_thumb, 4, dist_amount);
}
@@ -7122,13 +7083,13 @@ double ImProcFunctions::getAutoDistor (const Glib::ustring &fname, int thumb_si
}
}
-void ImProcFunctions::rgb2lab(const Imagefloat &src, LabImage &dst, const Glib::ustring &workingSpace)
+void ImProcFunctions::rgb2lab (const Imagefloat &src, LabImage &dst, const Glib::ustring &workingSpace)
{
- TMatrix wprof = ICCStore::getInstance()->workingSpaceMatrix( workingSpace );
+ TMatrix wprof = ICCStore::getInstance()->workingSpaceMatrix ( workingSpace );
const float wp[3][3] = {
- {static_cast(wprof[0][0]), static_cast(wprof[0][1]), static_cast(wprof[0][2])},
- {static_cast(wprof[1][0]), static_cast(wprof[1][1]), static_cast(wprof[1][2])},
- {static_cast(wprof[2][0]), static_cast(wprof[2][1]), static_cast(wprof[2][2])}
+ {static_cast (wprof[0][0]), static_cast (wprof[0][1]), static_cast (wprof[0][2])},
+ {static_cast (wprof[1][0]), static_cast (wprof[1][1]), static_cast (wprof[1][2])},
+ {static_cast (wprof[2][0]), static_cast (wprof[2][1]), static_cast (wprof[2][2])}
};
const int W = src.getWidth();
@@ -7138,23 +7099,23 @@ void ImProcFunctions::rgb2lab(const Imagefloat &src, LabImage &dst, const Glib::
#pragma omp parallel for schedule(dynamic,16)
#endif
- for(int i = 0; i < H; i++) {
- for(int j = 0; j < W; j++) {
+ for (int i = 0; i < H; i++) {
+ for (int j = 0; j < W; j++) {
float X, Y, Z;
- Color::rgbxyz(src.r(i, j), src.g(i, j), src.b(i, j), X, Y, Z, wp);
+ Color::rgbxyz (src.r (i, j), src.g (i, j), src.b (i, j), X, Y, Z, wp);
//convert Lab
- Color::XYZ2Lab(X, Y, Z, dst.L[i][j], dst.a[i][j], dst.b[i][j]);
+ Color::XYZ2Lab (X, Y, Z, dst.L[i][j], dst.a[i][j], dst.b[i][j]);
}
}
}
-SSEFUNCTION void ImProcFunctions::lab2rgb(const LabImage &src, Imagefloat &dst, const Glib::ustring &workingSpace)
+SSEFUNCTION void ImProcFunctions::lab2rgb (const LabImage &src, Imagefloat &dst, const Glib::ustring &workingSpace)
{
- TMatrix wiprof = ICCStore::getInstance()->workingSpaceInverseMatrix( workingSpace );
+ TMatrix wiprof = ICCStore::getInstance()->workingSpaceInverseMatrix ( workingSpace );
const float wip[3][3] = {
- {static_cast(wiprof[0][0]), static_cast(wiprof[0][1]), static_cast(wiprof[0][2])},
- {static_cast(wiprof[1][0]), static_cast(wiprof[1][1]), static_cast(wiprof[1][2])},
- {static_cast(wiprof[2][0]), static_cast(wiprof[2][1]), static_cast(wiprof[2][2])}
+ {static_cast (wiprof[0][0]), static_cast (wiprof[0][1]), static_cast |