diff --git a/rtdata/languages/Francais b/rtdata/languages/Francais
index 9b852f7fd..f3a0dc0d5 100644
--- a/rtdata/languages/Francais
+++ b/rtdata/languages/Francais
@@ -503,6 +503,9 @@ HISTORY_MSG_289;Champ Uniforme - Ctrl Auto de l'Écrêtage
HISTORY_MSG_290;Niveau de noir - Rouge
HISTORY_MSG_291;Niveau de noir - Vert
HISTORY_MSG_292;Niveau de noir - Bleu
+HISTORY_MSG_293;Simulation de Film
+HISTORY_MSG_294;Simulation de Film - Force
+HISTORY_MSG_295;Simulation de Film - Film
HISTORY_NEWSNAPSHOT;Ajouter
HISTORY_NEWSNAPSHOT_TOOLTIP;Raccourci: Alt-s
HISTORY_SNAPSHOTS;Captures
@@ -1497,6 +1500,12 @@ ZOOMPANEL_ZOOM100;Zoom à 100%\nRaccourci: z
ZOOMPANEL_ZOOMFITSCREEN;Ajuster à la fenêtre\nRaccourci: f
ZOOMPANEL_ZOOMIN;Zoom Avant\nRaccourci: +
ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: -
+TP_FILMSIMULATION_LABEL;Simulation de Film
+TP_FILMSIMULATION_STRENGTH;Force
+PARTIALPASTER_FILMSIMULATION;Simulation de Film
+TP_FILMSIMULATION_ZEROCLUTSFOUND;Veuillez préciser le dossier contenant les fichiers HaldCLUT dans les Préférences
+PREFERENCES_FILMSIMULATION;Simulation de Film
+PREFERENCES_CLUTSDIR;Dossier HaldCLUT
!!!!!!!!!!!!!!!!!!!!!!!!!
! Untranslated keys follow; remove the ! prefix after an entry is translated.
diff --git a/rtdata/languages/default b/rtdata/languages/default
index ab1184d72..9e14fe764 100644
--- a/rtdata/languages/default
+++ b/rtdata/languages/default
@@ -513,6 +513,9 @@ HISTORY_MSG_289;Flat Field Automatic Clip Control
HISTORY_MSG_290;Black Level - Red
HISTORY_MSG_291;Black Level - Green
HISTORY_MSG_292;Black Level - Blue
+HISTORY_MSG_293;Film Simulation
+HISTORY_MSG_294;Film Simulation - Strength
+HISTORY_MSG_295;Film Simulation - Film
HISTORY_NEWSNAPSHOT;Add
HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
HISTORY_SNAPSHOTS;Snapshots
@@ -1543,3 +1546,9 @@ ZOOMPANEL_ZOOM100;Zoom to 100%\nShortcut: z
ZOOMPANEL_ZOOMFITSCREEN;Fit to screen\nShortcut: f
ZOOMPANEL_ZOOMIN;Zoom In\nShortcut: +
ZOOMPANEL_ZOOMOUT;Zoom Out\nShortcut: -
+TP_FILMSIMULATION_LABEL;Film Simulation
+TP_FILMSIMULATION_STRENGTH;Strength
+PARTIALPASTER_FILMSIMULATION;Film Simulation
+TP_FILMSIMULATION_ZEROCLUTSFOUND;Set HaldCLUT directory in Preferences
+PREFERENCES_FILMSIMULATION;Film Simulation
+PREFERENCES_CLUTSDIR;HaldCLUT directory
\ No newline at end of file
diff --git a/rtdata/profiles/BW/BW 1.pp3 b/rtdata/profiles/BW/BW 1.pp3
index 22ec48fd5..3dce4a89d 100644
--- a/rtdata/profiles/BW/BW 1.pp3
+++ b/rtdata/profiles/BW/BW 1.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=true
@@ -15,7 +15,7 @@ HighlightComprThreshold=33
ShadowCompr=50
CurveMode=Standard
CurveMode2=Standard
-Curve=1;0;0;0.040000000000000001;0.029999999999999999;0.17684498029510265;0.21732319394192093;0.70232558139534862;0.74883720930232545;1;1;
+Curve=1;0;0;0.04;0.03;0.17684498029510265;0.21732319394192093;0.70232558139534862;0.74883720930232545;1;1;
Curve2=0;
[HLRecovery]
@@ -112,7 +112,7 @@ Curve3=0;
[EPD]
Enabled=false
Strength=0.25
-EdgeStopping=1.3999999999999999
+EdgeStopping=1.4
Scale=1
ReweightingIterates=0
@@ -140,6 +140,9 @@ Strength=0.6
Feather=50
Roundness=50
+[Film Simulation]
+Enabled=false
+
[HSV Equalizer]
HCurve=0;
SCurve=0;
@@ -151,3 +154,6 @@ rCurve=0;
gCurve=0;
bCurve=0;
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/BW/BW 2.pp3 b/rtdata/profiles/BW/BW 2.pp3
index 1e9400898..d47dadc62 100644
--- a/rtdata/profiles/BW/BW 2.pp3
+++ b/rtdata/profiles/BW/BW 2.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=true
@@ -112,7 +112,7 @@ Curve3=0;
[EPD]
Enabled=false
Strength=0.25
-EdgeStopping=1.3999999999999999
+EdgeStopping=1.4
Scale=1
ReweightingIterates=0
@@ -145,9 +145,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=0;
gCurve=0;
bCurve=0;
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/BW/BW 3.pp3 b/rtdata/profiles/BW/BW 3.pp3
index 56f8e68ff..027b111ff 100644
--- a/rtdata/profiles/BW/BW 3.pp3
+++ b/rtdata/profiles/BW/BW 3.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=true
@@ -112,7 +112,7 @@ Curve3=0;
[EPD]
Enabled=false
Strength=0.25
-EdgeStopping=1.3999999999999999
+EdgeStopping=1.4
Scale=1
ReweightingIterates=0
@@ -140,6 +140,9 @@ Strength=0.6
Feather=50
Roundness=50
+[Film Simulation]
+Enabled=false
+
[HSV Equalizer]
HCurve=0;
SCurve=0;
@@ -151,3 +154,6 @@ rCurve=0;
gCurve=0;
bCurve=0;
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/BW/BW 4.pp3 b/rtdata/profiles/BW/BW 4.pp3
index c3cf60b09..8ef154def 100644
--- a/rtdata/profiles/BW/BW 4.pp3
+++ b/rtdata/profiles/BW/BW 4.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=true
@@ -112,7 +112,7 @@ Curve3=0;
[EPD]
Enabled=false
Strength=0.25
-EdgeStopping=1.3999999999999999
+EdgeStopping=1.4
Scale=1
ReweightingIterates=0
@@ -145,9 +145,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=0;
gCurve=0;
bCurve=0;
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Default ISO High.pp3 b/rtdata/profiles/Default ISO High.pp3
index dd35a50e6..af4ef0244 100644
--- a/rtdata/profiles/Default ISO High.pp3
+++ b/rtdata/profiles/Default ISO High.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=true
@@ -64,11 +64,11 @@ ClCurve=0;
[Sharpening]
Enabled=false
Method=usm
-Radius=0.80000000000000004
+Radius=0.8
Amount=125
Threshold=20;80;2000;1200;
OnlyEdges=false
-EdgedetectionRadius=1.8999999999999999
+EdgedetectionRadius=1.9
EdgeTolerance=1800
HalocontrolEnabled=false
HalocontrolAmount=85
@@ -132,7 +132,7 @@ Gamma=1.7
[EPD]
Enabled=false
Strength=0.25
-EdgeStopping=1.3999999999999999
+EdgeStopping=1.4
Scale=1
ReweightingIterates=0
@@ -165,12 +165,18 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=0;
gCurve=0;
bCurve=0;
+[ColorToning]
+Enabled=false
+
[RAW]
CA=true
HotDeadPixels=true
diff --git a/rtdata/profiles/Default ISO Medium.pp3 b/rtdata/profiles/Default ISO Medium.pp3
index d35745762..f76504d4c 100644
--- a/rtdata/profiles/Default ISO Medium.pp3
+++ b/rtdata/profiles/Default ISO Medium.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=true
@@ -64,11 +64,11 @@ ClCurve=0;
[Sharpening]
Enabled=true
Method=usm
-Radius=0.80000000000000004
+Radius=0.8
Amount=150
Threshold=20;80;2000;1200;
OnlyEdges=false
-EdgedetectionRadius=1.8999999999999999
+EdgedetectionRadius=1.9
EdgeTolerance=1800
HalocontrolEnabled=false
HalocontrolAmount=85
@@ -132,7 +132,7 @@ Gamma=1.7
[EPD]
Enabled=false
Strength=0.25
-EdgeStopping=1.3999999999999999
+EdgeStopping=1.4
Scale=1
ReweightingIterates=0
@@ -165,12 +165,18 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=0;
gCurve=0;
bCurve=0;
+[ColorToning]
+Enabled=false
+
[RAW]
CA=true
HotDeadPixels=true
diff --git a/rtdata/profiles/Default.pp3 b/rtdata/profiles/Default.pp3
index 6dbc7a6f7..87d7c99a8 100644
--- a/rtdata/profiles/Default.pp3
+++ b/rtdata/profiles/Default.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=true
@@ -68,7 +68,7 @@ Radius=0.5
Amount=250
Threshold=20;80;2000;1200;
OnlyEdges=false
-EdgedetectionRadius=1.8999999999999999
+EdgedetectionRadius=1.9
EdgeTolerance=1800
HalocontrolEnabled=false
HalocontrolAmount=85
@@ -132,7 +132,7 @@ Gamma=1.7
[EPD]
Enabled=false
Strength=0.25
-EdgeStopping=1.3999999999999999
+EdgeStopping=1.4
Scale=1
ReweightingIterates=0
@@ -165,12 +165,18 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=0;
gCurve=0;
bCurve=0;
+[ColorToning]
+Enabled=false
+
[RAW]
CA=true
HotDeadPixels=false
diff --git a/rtdata/profiles/Faded/Faded Amber 1 TM Bright.pp3 b/rtdata/profiles/Faded/Faded Amber 1 TM Bright.pp3
index 25a3553a6..7ade2d0bc 100644
--- a/rtdata/profiles/Faded/Faded Amber 1 TM Bright.pp3
+++ b/rtdata/profiles/Faded/Faded Amber 1 TM Bright.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -75,6 +75,9 @@ ReweightingIterates=0
[Shadows & Highlights]
Enabled=false
+[Film Simulation]
+Enabled=false
+
[HSV Equalizer]
HCurve=0;
SCurve=0;
@@ -85,3 +88,7 @@ LumaMode=false
rCurve=3;0;0;0.047430830039525626;0.21343873517786571;1;1;
gCurve=3;0;0;1;1;
bCurve=3;0;0;0.22924901185770752;0.031620553359683806;1;1;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Faded/Faded Amber 1 TM.pp3 b/rtdata/profiles/Faded/Faded Amber 1 TM.pp3
index 7ed6b967a..8f12fd64d 100644
--- a/rtdata/profiles/Faded/Faded Amber 1 TM.pp3
+++ b/rtdata/profiles/Faded/Faded Amber 1 TM.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -80,8 +80,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=3;0;0;0.047430830039525626;0.21343873517786571;1;1;
gCurve=3;0;0;1;1;
bCurve=3;0;0;0.22924901185770752;0.031620553359683806;1;1;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Faded/Faded Amber 1.pp3 b/rtdata/profiles/Faded/Faded Amber 1.pp3
index d90098dd9..5a2cd82e2 100644
--- a/rtdata/profiles/Faded/Faded Amber 1.pp3
+++ b/rtdata/profiles/Faded/Faded Amber 1.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -75,6 +75,9 @@ ReweightingIterates=0
[Shadows & Highlights]
Enabled=false
+[Film Simulation]
+Enabled=false
+
[HSV Equalizer]
HCurve=0;
SCurve=0;
@@ -85,3 +88,7 @@ LumaMode=false
rCurve=3;0;0;0.047430830039525626;0.21343873517786571;1;1;
gCurve=3;0;0;1;1;
bCurve=3;0;0;0.22924901185770752;0.031620553359683806;1;1;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Faded/Faded Blue 1 TM Bright.pp3 b/rtdata/profiles/Faded/Faded Blue 1 TM Bright.pp3
index 8cd869961..82162bc08 100644
--- a/rtdata/profiles/Faded/Faded Blue 1 TM Bright.pp3
+++ b/rtdata/profiles/Faded/Faded Blue 1 TM Bright.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -75,6 +75,9 @@ ReweightingIterates=0
[Shadows & Highlights]
Enabled=false
+[Film Simulation]
+Enabled=false
+
[HSV Equalizer]
HCurve=0;
SCurve=0;
@@ -85,3 +88,7 @@ LumaMode=false
rCurve=3;0;0;0.24505928853754988;0.055335968379447285;1;1;
gCurve=3;0;0;0.1146245059288528;0.023715415019764076;1;1;
bCurve=3;0;0;0.086956521739130363;0.21739130434782611;0.9446640316205519;0.69960474308300313;1;1;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Faded/Faded Blue 1 TM.pp3 b/rtdata/profiles/Faded/Faded Blue 1 TM.pp3
index 69e65028e..9d6158618 100644
--- a/rtdata/profiles/Faded/Faded Blue 1 TM.pp3
+++ b/rtdata/profiles/Faded/Faded Blue 1 TM.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -75,6 +75,9 @@ ReweightingIterates=0
[Shadows & Highlights]
Enabled=false
+[Film Simulation]
+Enabled=false
+
[HSV Equalizer]
HCurve=0;
SCurve=0;
@@ -85,3 +88,7 @@ LumaMode=false
rCurve=3;0;0;0.24505928853754988;0.055335968379447285;1;1;
gCurve=3;0;0;0.1146245059288528;0.023715415019764076;1;1;
bCurve=3;0;0;0.086956521739130363;0.21739130434782611;0.9446640316205519;0.69960474308300313;1;1;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Faded/Faded Blue 1.pp3 b/rtdata/profiles/Faded/Faded Blue 1.pp3
index ec36fb7e3..17c9747b5 100644
--- a/rtdata/profiles/Faded/Faded Blue 1.pp3
+++ b/rtdata/profiles/Faded/Faded Blue 1.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -80,8 +80,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=3;0;0;0.24505928853754988;0.055335968379447285;1;1;
gCurve=3;0;0;0.1146245059288528;0.023715415019764076;1;1;
bCurve=3;0;0;0.086956521739130363;0.21739130434782611;0.9446640316205519;0.69960474308300313;1;1;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Faded/Faded Blue Pink TM.pp3 b/rtdata/profiles/Faded/Faded Blue Pink TM.pp3
index df0653315..15e22f329 100644
--- a/rtdata/profiles/Faded/Faded Blue Pink TM.pp3
+++ b/rtdata/profiles/Faded/Faded Blue Pink TM.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -80,8 +80,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=3;0;0;0.24505928853754988;0.055335968379447285;0.81034482758620685;0.94827586206896552;1;1;
gCurve=3;0;0;0.1146245059288528;0.023715415019764076;1;1;
bCurve=3;0;0;0.086956521739130363;0.21739130434782611;0.9446640316205519;0.69960474308300313;1;1;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Faded/Faded Blue Pink.pp3 b/rtdata/profiles/Faded/Faded Blue Pink.pp3
index f61733589..0d229a570 100644
--- a/rtdata/profiles/Faded/Faded Blue Pink.pp3
+++ b/rtdata/profiles/Faded/Faded Blue Pink.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -80,8 +80,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=3;0;0;0.24505928853754988;0.055335968379447285;0.81034482758620685;0.94827586206896552;1;1;
gCurve=3;0;0;0.1146245059288528;0.023715415019764076;1;1;
bCurve=3;0;0;0.086956521739130363;0.21739130434782611;0.9446640316205519;0.69960474308300313;1;1;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Faded/Faded Chocolate 1 TM Bright.pp3 b/rtdata/profiles/Faded/Faded Chocolate 1 TM Bright.pp3
index 11175d3fb..3b53cd7e0 100644
--- a/rtdata/profiles/Faded/Faded Chocolate 1 TM Bright.pp3
+++ b/rtdata/profiles/Faded/Faded Chocolate 1 TM Bright.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -84,8 +84,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=3;0;0;0.16206896551724165;0.079310344827586171;1;1;
gCurve=3;0;0;0.1655172413793104;0.034482758620689787;1;1;
bCurve=3;0;0;0.55827995093362426;0.31529235382308862;0.91699604743083007;0.76284584980237169;1;1;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Faded/Faded Chocolate 2 TM Bright.pp3 b/rtdata/profiles/Faded/Faded Chocolate 2 TM Bright.pp3
index b71f344c8..259fca94b 100644
--- a/rtdata/profiles/Faded/Faded Chocolate 2 TM Bright.pp3
+++ b/rtdata/profiles/Faded/Faded Chocolate 2 TM Bright.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -80,8 +80,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=3;0;0;0.16206896551724165;0.079310344827586171;1;1;
gCurve=3;0;0;0.1655172413793104;0.034482758620689787;1;1;
bCurve=3;0;0;0.55827995093362426;0.31529235382308862;0.91699604743083007;0.76284584980237169;1;1;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Faded/Faded Golden 1.pp3 b/rtdata/profiles/Faded/Faded Golden 1.pp3
index 699e1fb61..cf8cd6162 100644
--- a/rtdata/profiles/Faded/Faded Golden 1.pp3
+++ b/rtdata/profiles/Faded/Faded Golden 1.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -84,8 +84,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=3;0;0;0.086956521739130432;0.090909090909090856;1;1;
gCurve=3;0;0;0.20266764462192638;0.12923950395936107;1;1;
bCurve=1;0;0;0.25296442687747034;0.22529644268774709;0.8656126482213431;0.80632411067193566;1;1;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Faded/Faded Golden 2.pp3 b/rtdata/profiles/Faded/Faded Golden 2.pp3
index 78619557e..31bb3b11f 100644
--- a/rtdata/profiles/Faded/Faded Golden 2.pp3
+++ b/rtdata/profiles/Faded/Faded Golden 2.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -84,8 +84,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=3;0;0;0.086956521739130432;0.090909090909090856;0.94466403162055268;0.89328063241106692;1;1;
gCurve=3;0;0;0.20266764462192638;0.12923950395936107;0.90118577075098805;0.88537549407114613;1;1;
bCurve=1;0;0;0.25296442687747034;0.22529644268774709;0.8656126482213431;0.80632411067193566;1;1;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Faded/Faded Green 1 TM Bright.pp3 b/rtdata/profiles/Faded/Faded Green 1 TM Bright.pp3
index 3633783a9..333774463 100644
--- a/rtdata/profiles/Faded/Faded Green 1 TM Bright.pp3
+++ b/rtdata/profiles/Faded/Faded Green 1 TM Bright.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -80,8 +80,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=0;
gCurve=0;
bCurve=0;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Faded/Faded Green 1 TM.pp3 b/rtdata/profiles/Faded/Faded Green 1 TM.pp3
index b7c24ef44..8bdd42855 100644
--- a/rtdata/profiles/Faded/Faded Green 1 TM.pp3
+++ b/rtdata/profiles/Faded/Faded Green 1 TM.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -80,8 +80,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=0;
gCurve=0;
bCurve=0;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Faded/Faded Green 1.pp3 b/rtdata/profiles/Faded/Faded Green 1.pp3
index 88e95ccfd..4c594d5b1 100644
--- a/rtdata/profiles/Faded/Faded Green 1.pp3
+++ b/rtdata/profiles/Faded/Faded Green 1.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -84,8 +84,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=0;
gCurve=0;
bCurve=0;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Faded/Faded Green 2.pp3 b/rtdata/profiles/Faded/Faded Green 2.pp3
index d974b003e..41de3ccbe 100644
--- a/rtdata/profiles/Faded/Faded Green 2.pp3
+++ b/rtdata/profiles/Faded/Faded Green 2.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -84,8 +84,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=3;0;0;0.083003952569169981;0.075098814229249022;0.74703557312252944;0.81422924901185822;1;1;
gCurve=3;0;0;0.32806324110671931;0.43083003952569182;1;1;
bCurve=3;0;0;0.040612308653546869;0.12528693478940064;0.85375494071146218;0.9130434782608694;1;1;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Faded/Faded Green 3.pp3 b/rtdata/profiles/Faded/Faded Green 3.pp3
index b4e4c792c..227896ee8 100644
--- a/rtdata/profiles/Faded/Faded Green 3.pp3
+++ b/rtdata/profiles/Faded/Faded Green 3.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -80,8 +80,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=3;0;0;0.24505928853754988;0.055335968379447285;0.81034482758620685;0.94827586206896552;1;1;
gCurve=3;0;0;0.1146245059288528;0.023715415019764076;1;1;
bCurve=3;0;0;0.086956521739130363;0.21739130434782611;0.9446640316205519;0.69960474308300313;1;1;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Faded/Faded Neutral TM.pp3 b/rtdata/profiles/Faded/Faded Neutral TM.pp3
index e39a6502a..36cdbcae0 100644
--- a/rtdata/profiles/Faded/Faded Neutral TM.pp3
+++ b/rtdata/profiles/Faded/Faded Neutral TM.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -80,8 +80,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=3;0;0;1;1;
gCurve=3;0;0;1;1;
bCurve=3;0;0;1;1;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Faded/Faded Neutral.pp3 b/rtdata/profiles/Faded/Faded Neutral.pp3
index 08d70126f..45937d3b7 100644
--- a/rtdata/profiles/Faded/Faded Neutral.pp3
+++ b/rtdata/profiles/Faded/Faded Neutral.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -80,8 +80,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=3;0;0;1;1;
gCurve=3;0;0;1;1;
bCurve=3;0;0;1;1;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Faded/Faded Purple 1 TM Bright.pp3 b/rtdata/profiles/Faded/Faded Purple 1 TM Bright.pp3
index 7829a6ee1..48687bf50 100644
--- a/rtdata/profiles/Faded/Faded Purple 1 TM Bright.pp3
+++ b/rtdata/profiles/Faded/Faded Purple 1 TM Bright.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -80,8 +80,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=3;0;0;0.15517241379310354;0.075862068965517254;1;1;
gCurve=3;0;0;0.13793103448275862;0.055172413793103607;1;1;
bCurve=3;0;0;0.051383399209486022;0.17391304347826081;0.91699604743083007;0.76284584980237169;1;1;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Faded/Faded Purple 1 TM.pp3 b/rtdata/profiles/Faded/Faded Purple 1 TM.pp3
index 8906bbe4a..647225420 100644
--- a/rtdata/profiles/Faded/Faded Purple 1 TM.pp3
+++ b/rtdata/profiles/Faded/Faded Purple 1 TM.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -84,8 +84,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=3;0;0;0.15517241379310354;0.075862068965517254;1;1;
gCurve=3;0;0;0.13793103448275862;0.055172413793103607;1;1;
bCurve=3;0;0;0.051383399209486022;0.17391304347826081;0.91699604743083007;0.76284584980237169;1;1;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Faded/Faded Purple 1.pp3 b/rtdata/profiles/Faded/Faded Purple 1.pp3
index f496cd4ee..10d318c98 100644
--- a/rtdata/profiles/Faded/Faded Purple 1.pp3
+++ b/rtdata/profiles/Faded/Faded Purple 1.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -84,8 +84,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=3;0;0;0.15517241379310354;0.075862068965517254;1;1;
gCurve=3;0;0;0.13793103448275862;0.055172413793103607;1;1;
bCurve=3;0;0;0.051383399209486022;0.17391304347826081;0.91699604743083007;0.76284584980237169;1;1;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Faded/Faded Purple 2 TM.pp3 b/rtdata/profiles/Faded/Faded Purple 2 TM.pp3
index d49edb003..a5c2833cd 100644
--- a/rtdata/profiles/Faded/Faded Purple 2 TM.pp3
+++ b/rtdata/profiles/Faded/Faded Purple 2 TM.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -84,8 +84,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
-rCurve=3;0;0;0.15517241379310354;0.075862068965517254;0.69999999999999973;0.90000000000000013;1;1;
+rCurve=3;0;0;0.15517241379310354;0.075862068965517254;0.7;0.9;1;1;
gCurve=3;0;0;0.13793103448275862;0.055172413793103607;0.69655172413793076;0.90689655172413808;1;1;
bCurve=3;0;0;0.051383399209486022;0.17391304347826081;0.91699604743083007;0.76284584980237169;1;1;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Faded/Faded Purple 2.pp3 b/rtdata/profiles/Faded/Faded Purple 2.pp3
index e164e0671..57deef59f 100644
--- a/rtdata/profiles/Faded/Faded Purple 2.pp3
+++ b/rtdata/profiles/Faded/Faded Purple 2.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -84,8 +84,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=3;0;0;0.15517241379310354;0.075862068965517254;0.69999999999999973;0.90000000000000013;1;1;
gCurve=3;0;0;0.13793103448275862;0.055172413793103607;0.69655172413793076;0.90689655172413808;1;1;
bCurve=3;0;0;0.051383399209486022;0.17391304347826081;0.91699604743083007;0.76284584980237169;1;1;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Faded/Faded Teal Orange TM Bright.pp3 b/rtdata/profiles/Faded/Faded Teal Orange TM Bright.pp3
index 27cdf8efc..4c3d6592a 100644
--- a/rtdata/profiles/Faded/Faded Teal Orange TM Bright.pp3
+++ b/rtdata/profiles/Faded/Faded Teal Orange TM Bright.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -77,11 +77,18 @@ Enabled=false
[HSV Equalizer]
HCurve=0;
-SCurve=1;0.073578595317725717;0.69732441471571893;0.34999999999999998;0.34999999999999998;0.33333333333333331;0.5;0.34999999999999998;0.34999999999999998;0.5;0.5;0.34999999999999998;0.34999999999999998;0.66666666666666663;0.5;0.34999999999999998;0.34999999999999998;0.83333333333333326;0.5;0.34999999999999998;0.34999999999999998;
+SCurve=1;0.073578595317725717;0.69732441471571893;0.35;0.35;0.33333333333333331;0.5;0.35;0.35;0.5;0.5;0.35;0.35;0.66666666666666663;0.5;0.35;0.35;0.83333333333333326;0.5;0.35;0.35;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=3;0;0;0.18620689655172415;0.044827586206896544;0.85517241379310338;0.91379310344827591;1;1;
gCurve=3;0;0;0.13224137931034488;0.048793103448275733;0.95172413793103461;0.8655172413793103;1;1;
bCurve=3;0;0;0.12758620689655173;0.075862068965517226;0.90344827586206922;0.78620689655172393;1;1;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Faded/Faded Teal Orange TM.pp3 b/rtdata/profiles/Faded/Faded Teal Orange TM.pp3
index 1eb84fc5e..096bfbeac 100644
--- a/rtdata/profiles/Faded/Faded Teal Orange TM.pp3
+++ b/rtdata/profiles/Faded/Faded Teal Orange TM.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -77,11 +77,18 @@ Enabled=false
[HSV Equalizer]
HCurve=0;
-SCurve=1;0.073578595317725717;0.69732441471571893;0.34999999999999998;0.34999999999999998;0.33333333333333331;0.5;0.34999999999999998;0.34999999999999998;0.5;0.5;0.34999999999999998;0.34999999999999998;0.66666666666666663;0.5;0.34999999999999998;0.34999999999999998;0.83333333333333326;0.5;0.34999999999999998;0.34999999999999998;
+SCurve=1;0.073578595317725717;0.69732441471571893;0.35;0.35;0.33333333333333331;0.5;0.35;0.35;0.5;0.5;0.35;0.35;0.66666666666666663;0.5;0.35;0.35;0.83333333333333326;0.5;0.35;0.35;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=3;0;0;0.18620689655172415;0.044827586206896544;0.85517241379310338;0.91379310344827591;1;1;
gCurve=3;0;0;0.13224137931034488;0.048793103448275733;0.95172413793103461;0.8655172413793103;1;1;
bCurve=3;0;0;0.12758620689655173;0.075862068965517226;0.90344827586206922;0.78620689655172393;1;1;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Faded/Faded Teal Orange.pp3 b/rtdata/profiles/Faded/Faded Teal Orange.pp3
index 0e9ccca66..6a0a2d65d 100644
--- a/rtdata/profiles/Faded/Faded Teal Orange.pp3
+++ b/rtdata/profiles/Faded/Faded Teal Orange.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -77,11 +77,18 @@ Enabled=false
[HSV Equalizer]
HCurve=0;
-SCurve=1;0.073578595317725717;0.69732441471571893;0.34999999999999998;0.34999999999999998;0.33333333333333331;0.5;0.34999999999999998;0.34999999999999998;0.5;0.5;0.34999999999999998;0.34999999999999998;0.66666666666666663;0.5;0.34999999999999998;0.34999999999999998;0.83333333333333326;0.5;0.34999999999999998;0.34999999999999998;
+SCurve=1;0.073578595317725717;0.69732441471571893;0.35;0.35;0.33333333333333331;0.5;0.35;0.35;0.5;0.5;0.35;0.35;0.66666666666666663;0.5;0.35;0.35;0.83333333333333326;0.5;0.35;0.35;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=3;0;0;0.18620689655172415;0.044827586206896544;0.85517241379310338;0.91379310344827591;1;1;
gCurve=3;0;0;0.13224137931034488;0.048793103448275733;0.95172413793103461;0.8655172413793103;1;1;
bCurve=3;0;0;0.12758620689655173;0.075862068965517226;0.90344827586206922;0.78620689655172393;1;1;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Faded/Faded Warm 1 TM Bright.pp3 b/rtdata/profiles/Faded/Faded Warm 1 TM Bright.pp3
index b351dae0f..3ab9d32e9 100644
--- a/rtdata/profiles/Faded/Faded Warm 1 TM Bright.pp3
+++ b/rtdata/profiles/Faded/Faded Warm 1 TM Bright.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -84,8 +84,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=3;0;0;0.051383399209486022;0.17391304347826081;1;1;
gCurve=3;0;0;1;1;
bCurve=3;0;0;0.051383399209486022;0.17391304347826081;0.91699604743083007;0.76284584980237169;1;1;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Faded/Faded Warm 1 TM.pp3 b/rtdata/profiles/Faded/Faded Warm 1 TM.pp3
index 01febd92d..bc405daa3 100644
--- a/rtdata/profiles/Faded/Faded Warm 1 TM.pp3
+++ b/rtdata/profiles/Faded/Faded Warm 1 TM.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -84,8 +84,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=3;0;0;0.051383399209486022;0.17391304347826081;1;1;
gCurve=3;0;0;1;1;
bCurve=3;0;0;0.051383399209486022;0.17391304347826081;0.91699604743083007;0.76284584980237169;1;1;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Faded/Faded Warm 1.pp3 b/rtdata/profiles/Faded/Faded Warm 1.pp3
index 6b8210ae1..a96b0a4b1 100644
--- a/rtdata/profiles/Faded/Faded Warm 1.pp3
+++ b/rtdata/profiles/Faded/Faded Warm 1.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -84,8 +84,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=3;0;0;0.051383399209486022;0.17391304347826081;1;1;
gCurve=3;0;0;1;1;
bCurve=3;0;0;0.051383399209486022;0.17391304347826081;0.91699604743083007;0.76284584980237169;1;1;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Faded/Faded Warm 2.pp3 b/rtdata/profiles/Faded/Faded Warm 2.pp3
index 1f8194182..ec7a07f9f 100644
--- a/rtdata/profiles/Faded/Faded Warm 2.pp3
+++ b/rtdata/profiles/Faded/Faded Warm 2.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -80,8 +80,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=3;0;0;0.051383399209486022;0.17391304347826081;1;1;
gCurve=3;0;0;1;1;
bCurve=3;0;0;0.051383399209486022;0.17391304347826081;0.91699604743083007;0.76284584980237169;1;1;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Faded/Faded Warm 3.pp3 b/rtdata/profiles/Faded/Faded Warm 3.pp3
index ab787676c..bd88bae97 100644
--- a/rtdata/profiles/Faded/Faded Warm 3.pp3
+++ b/rtdata/profiles/Faded/Faded Warm 3.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -80,8 +80,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=3;0;0;0.051383399209486022;0.17391304347826081;1;1;
gCurve=3;0;0;1;1;
bCurve=3;0;0;0.051383399209486022;0.17391304347826081;0.57312252964427013;0.95652173913043359;1;1;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Generic/Deep Shadows.pp3 b/rtdata/profiles/Generic/Deep Shadows.pp3
index e7aba345d..06dad68e6 100644
--- a/rtdata/profiles/Generic/Deep Shadows.pp3
+++ b/rtdata/profiles/Generic/Deep Shadows.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -112,7 +112,7 @@ Curve3=0;
[EPD]
Enabled=false
Strength=0.25
-EdgeStopping=1.3999999999999999
+EdgeStopping=1.4
Scale=1
ReweightingIterates=0
@@ -145,9 +145,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=0;
gCurve=0;
bCurve=0;
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Generic/Equilibrated.pp3 b/rtdata/profiles/Generic/Equilibrated.pp3
index b42576962..bcb437bb6 100644
--- a/rtdata/profiles/Generic/Equilibrated.pp3
+++ b/rtdata/profiles/Generic/Equilibrated.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -112,7 +112,7 @@ Curve3=0;
[EPD]
Enabled=false
Strength=0.25
-EdgeStopping=1.3999999999999999
+EdgeStopping=1.4
Scale=1
ReweightingIterates=0
@@ -145,9 +145,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=0;
gCurve=0;
bCurve=0;
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Generic/High-Key.pp3 b/rtdata/profiles/Generic/High-Key.pp3
index 169ce7226..0b32f7b44 100644
--- a/rtdata/profiles/Generic/High-Key.pp3
+++ b/rtdata/profiles/Generic/High-Key.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=true
@@ -112,7 +112,7 @@ Curve3=0;
[EPD]
Enabled=false
Strength=0.25
-EdgeStopping=1.3999999999999999
+EdgeStopping=1.4
Scale=1
ReweightingIterates=0
@@ -145,9 +145,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=0;
gCurve=0;
bCurve=0;
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Generic/Natural 1.pp3 b/rtdata/profiles/Generic/Natural 1.pp3
index 5c4a399a2..84ec545d7 100644
--- a/rtdata/profiles/Generic/Natural 1.pp3
+++ b/rtdata/profiles/Generic/Natural 1.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=true
@@ -15,7 +15,7 @@ HighlightComprThreshold=33
ShadowCompr=50
CurveMode=Standard
CurveMode2=Standard
-Curve=1;0;0;0.040000000000000001;0.029999999999999999;0.17684498029510265;0.21732319394192093;0.70232558139534862;0.74883720930232545;1;1;
+Curve=1;0;0;0.04;0.03;0.17684498029510265;0.21732319394192093;0.70232558139534862;0.74883720930232545;1;1;
Curve2=0;
[HLRecovery]
@@ -112,7 +112,7 @@ Curve3=0;
[EPD]
Enabled=false
Strength=0.25
-EdgeStopping=1.3999999999999999
+EdgeStopping=1.4
Scale=1
ReweightingIterates=0
@@ -145,9 +145,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=0;
gCurve=0;
bCurve=0;
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Generic/Natural 2.pp3 b/rtdata/profiles/Generic/Natural 2.pp3
index 6bb41b2b5..5f9820490 100644
--- a/rtdata/profiles/Generic/Natural 2.pp3
+++ b/rtdata/profiles/Generic/Natural 2.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=true
@@ -112,7 +112,7 @@ Curve3=0;
[EPD]
Enabled=false
Strength=0.25
-EdgeStopping=1.3999999999999999
+EdgeStopping=1.4
Scale=1
ReweightingIterates=0
@@ -145,9 +145,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=0;
gCurve=0;
bCurve=0;
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Generic/Punchy 1.pp3 b/rtdata/profiles/Generic/Punchy 1.pp3
index 1940202b7..ab7ff740f 100644
--- a/rtdata/profiles/Generic/Punchy 1.pp3
+++ b/rtdata/profiles/Generic/Punchy 1.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=true
@@ -112,7 +112,7 @@ Curve3=0;
[EPD]
Enabled=false
Strength=0.25
-EdgeStopping=1.3999999999999999
+EdgeStopping=1.4
Scale=1
ReweightingIterates=0
@@ -145,9 +145,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=0;
gCurve=0;
bCurve=0;
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Generic/Punchy 2.pp3 b/rtdata/profiles/Generic/Punchy 2.pp3
index 0415c5fb9..6f1bbc6ca 100644
--- a/rtdata/profiles/Generic/Punchy 2.pp3
+++ b/rtdata/profiles/Generic/Punchy 2.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=true
@@ -112,7 +112,7 @@ Curve3=0;
[EPD]
Enabled=false
Strength=0.25
-EdgeStopping=1.3999999999999999
+EdgeStopping=1.4
Scale=1
ReweightingIterates=0
@@ -145,9 +145,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=0;
gCurve=0;
bCurve=0;
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Pop/Pop 1.pp3 b/rtdata/profiles/Pop/Pop 1.pp3
index cd27dd686..4c0832d2a 100644
--- a/rtdata/profiles/Pop/Pop 1.pp3
+++ b/rtdata/profiles/Pop/Pop 1.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -15,7 +15,7 @@ HighlightComprThreshold=0
ShadowCompr=50
CurveMode=FilmLike
CurveMode2=Standard
-Curve=3;0;0;0.084000000000000005;0;0.187;0.188;0.442;0.57599999999999996;1;1;
+Curve=3;0;0;0.084;0;0.187;0.188;0.442;0.576;1;1;
Curve2=0;
[HLRecovery]
@@ -58,7 +58,7 @@ Chromaticity=0
AvoidColorShift=false
RedAndSkinTonesProtection=0
LCredsk=true
-LCurve=3;0;0;0.5;0.40000000000000002;1;1;
+LCurve=3;0;0;0.5;0.4;1;1;
aCurve=0;
bCurve=0;
ccCurve=0;
@@ -106,14 +106,14 @@ CurveMode=Brightness
CurveMode2=Lightness
CurveMode3=Colorfullness
Curve=0;
-Curve2=3;0;0;0.14999999999999999;0;0.67000000000000004;0.91000000000000003;1;1;
-Curve3=3;0;0;0.080000000000000002;0.02;0.29999999999999999;0.5;1;1;
+Curve2=3;0;0;0.15;0;0.67;0.91;1;1;
+Curve3=3;0;0;0.08;0.02;0.3;0.5;1;1;
[EPD]
Enabled=true
Strength=0.25
-EdgeStopping=2.3999999999999999
-Scale=0.10000000000000001
+EdgeStopping=2.4
+Scale=0.1
ReweightingIterates=0
[Shadows & Highlights]
@@ -145,9 +145,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
+[ColorToning]
+Enabled=false
+
[RAW]
CA=true
HotDeadPixels=true
diff --git a/rtdata/profiles/Pop/Pop 2 L.pp3 b/rtdata/profiles/Pop/Pop 2 L.pp3
index 501f97a9f..0abb65b1e 100644
--- a/rtdata/profiles/Pop/Pop 2 L.pp3
+++ b/rtdata/profiles/Pop/Pop 2 L.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -15,7 +15,7 @@ HighlightComprThreshold=0
ShadowCompr=50
CurveMode=FilmLike
CurveMode2=Standard
-Curve=3;0;0;0.17899999999999999;0;0.38400000000000001;0.502;1;1;
+Curve=3;0;0;0.179;0;0.384;0.502;1;1;
Curve2=0;
[HLRecovery]
@@ -58,7 +58,7 @@ Chromaticity=0
AvoidColorShift=false
RedAndSkinTonesProtection=0
LCredsk=true
-LCurve=3;0;0;0.12;0.29999999999999999;0.5;0.46000000000000002;1;1;
+LCurve=3;0;0;0.12;0.3;0.5;0.46;1;1;
aCurve=0;
bCurve=0;
ccCurve=0;
@@ -106,14 +106,14 @@ CurveMode=Brightness
CurveMode2=Lightness
CurveMode3=Colorfullness
Curve=0;
-Curve2=3;0;0;0.14999999999999999;0;0.67000000000000004;0.91000000000000003;1;1;
-Curve3=3;0;0;0.080000000000000002;0.02;0.29999999999999999;0.5;1;1;
+Curve2=3;0;0;0.15;0;0.67;0.91;1;1;
+Curve3=3;0;0;0.08;0.02;0.3;0.5;1;1;
[EPD]
Enabled=true
Strength=0.25
-EdgeStopping=2.3999999999999999
-Scale=0.10000000000000001
+EdgeStopping=2.4
+Scale=0.1
ReweightingIterates=0
[Shadows & Highlights]
@@ -145,9 +145,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
+[ColorToning]
+Enabled=false
+
[RAW]
CA=true
HotDeadPixels=true
diff --git a/rtdata/profiles/Pop/Pop 3 Skin.pp3 b/rtdata/profiles/Pop/Pop 3 Skin.pp3
index 9ca9bf43a..286d54b43 100644
--- a/rtdata/profiles/Pop/Pop 3 Skin.pp3
+++ b/rtdata/profiles/Pop/Pop 3 Skin.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -15,7 +15,7 @@ HighlightComprThreshold=0
ShadowCompr=50
CurveMode=SatAndValueBlending
CurveMode2=Standard
-Curve=3;0;0;0.084000000000000005;0;0.187;0.188;0.442;0.57599999999999996;1;1;
+Curve=3;0;0;0.084;0;0.187;0.188;0.442;0.576;1;1;
Curve2=0;
[HLRecovery]
@@ -58,7 +58,7 @@ Chromaticity=0
AvoidColorShift=false
RedAndSkinTonesProtection=0
LCredsk=true
-LCurve=3;0;0;0.5;0.40000000000000002;1;1;
+LCurve=3;0;0;0.5;0.4;1;1;
aCurve=0;
bCurve=0;
ccCurve=0;
@@ -106,14 +106,14 @@ CurveMode=Brightness
CurveMode2=Lightness
CurveMode3=Colorfullness
Curve=0;
-Curve2=3;0;0;0.14999999999999999;0;0.67000000000000004;0.91000000000000003;1;1;
-Curve3=3;0;0;0.080000000000000002;0.02;0.38;0.72999999999999998;1;1;
+Curve2=3;0;0;0.15;0;0.67;0.91;1;1;
+Curve3=3;0;0;0.08;0.02;0.38;0.73;1;1;
[EPD]
Enabled=true
Strength=0.25
-EdgeStopping=2.3999999999999999
-Scale=0.10000000000000001
+EdgeStopping=2.4
+Scale=0.1
ReweightingIterates=0
[Shadows & Highlights]
@@ -145,9 +145,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
+[ColorToning]
+Enabled=false
+
[RAW]
CA=true
HotDeadPixels=true
diff --git a/rtdata/profiles/Pop/Pop 4 BW.pp3 b/rtdata/profiles/Pop/Pop 4 BW.pp3
index 00029081c..d881fe822 100644
--- a/rtdata/profiles/Pop/Pop 4 BW.pp3
+++ b/rtdata/profiles/Pop/Pop 4 BW.pp3
@@ -1,11 +1,11 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
Clip=0.02
-Compensation=0.66000000000000003
+Compensation=0.66
Brightness=0
Contrast=0
Saturation=0
@@ -15,7 +15,7 @@ HighlightComprThreshold=0
ShadowCompr=50
CurveMode=SatAndValueBlending
CurveMode2=Standard
-Curve=3;0;0;0.084000000000000005;0;0.187;0.188;0.58699999999999997;0.74199999999999999;1;1;
+Curve=3;0;0;0.084;0;0.187;0.188;0.587;0.742;1;1;
Curve2=0;
[HLRecovery]
@@ -58,7 +58,7 @@ Chromaticity=0
AvoidColorShift=false
RedAndSkinTonesProtection=0
LCredsk=true
-LCurve=3;0;0;0.21199999999999999;0.11899999999999999;0.67400000000000004;0.77300000000000002;1;1;
+LCurve=3;0;0;0.212;0.119;0.674;0.773;1;1;
aCurve=0;
bCurve=0;
ccCurve=0;
@@ -96,7 +96,7 @@ J-Contrast=0
Q-Contrast=0
H-Hue=0
RSTProtection=0
-AdaptScene=164.32900000000001
+AdaptScene=164.329
AutoAdapscen=true
SurrSource=false
Gamut=true
@@ -105,15 +105,15 @@ Tonecie=true
CurveMode=Lightness
CurveMode2=Lightness
CurveMode3=Colorfullness
-Curve=3;0;0;0.14999999999999999;0;0.54500000000000004;1;1;1;
+Curve=3;0;0;0.15;0;0.545;1;1;1;
Curve2=0;
Curve3=0;
[EPD]
Enabled=true
Strength=0.25
-EdgeStopping=2.3999999999999999
-Scale=0.10000000000000001
+EdgeStopping=2.4
+Scale=0.1
ReweightingIterates=0
[Shadows & Highlights]
@@ -145,9 +145,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
+[ColorToning]
+Enabled=false
+
[RAW]
CA=true
HotDeadPixels=true
diff --git a/rtdata/profiles/Portrait/Portrait Lejto.pp3 b/rtdata/profiles/Portrait/Portrait Lejto.pp3
index 5460fe5c5..92d7a0a89 100644
--- a/rtdata/profiles/Portrait/Portrait Lejto.pp3
+++ b/rtdata/profiles/Portrait/Portrait Lejto.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -112,7 +112,7 @@ Curve3=0;
[EPD]
Enabled=false
Strength=0.25
-EdgeStopping=1.3999999999999999
+EdgeStopping=1.4
Scale=1
ReweightingIterates=0
@@ -145,9 +145,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=0;
gCurve=0;
bCurve=0;
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Portrait/Portrait Smooth.pp3 b/rtdata/profiles/Portrait/Portrait Smooth.pp3
index e23693302..6de19439e 100644
--- a/rtdata/profiles/Portrait/Portrait Smooth.pp3
+++ b/rtdata/profiles/Portrait/Portrait Smooth.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -58,10 +58,10 @@ Chromaticity=0
AvoidColorShift=false
RedAndSkinTonesProtection=50
LCredsk=true
-LCurve=3;0;0;0.042700000000000002;0.014;0.16200000000000001;0.16200000000000001;0.54700000000000004;0.93300000000000005;1;1;
+LCurve=3;0;0;0.0427;0.014;0.162;0.162;0.547;0.933;1;1;
aCurve=0;
bCurve=0;
-ccCurve=1;0;0;0.254;0.29999999999999999;1;1;
+ccCurve=1;0;0;0.254;0.3;1;1;
chCurve=0;
lhCurve=0;
hhCurve=0;
@@ -111,8 +111,8 @@ Curve3=0;
[EPD]
Enabled=false
-Strength=0.29999999999999999
-EdgeStopping=1.3999999999999999
+Strength=0.3
+EdgeStopping=1.4
Scale=1
ReweightingIterates=0
@@ -141,9 +141,12 @@ Feather=50
Roundness=50
[HSV Equalizer]
-HCurve=1;0;0.5;0.34999999999999998;0.34999999999999998;0.16400000000000001;0.48999999999999999;0.34999999999999998;0.34999999999999998;0.33300000000000002;0.5;0.34999999999999998;0.34999999999999998;0.5;0.5;0.34999999999999998;0.34999999999999998;0.66600000000000004;0.5;0.34999999999999998;0.34999999999999998;0.83299999999999996;0.5;0.34999999999999998;0.34999999999999998;
+HCurve=1;0;0.5;0.35;0.35;0.164;0.49;0.35;0.35;0.333;0.5;0.35;0.35;0.5;0.5;0.35;0.35;0.666;0.5;0.35;0.35;0.833;0.5;0.35;0.35;
SCurve=0;
-VCurve=1;0;0.5;0.34999999999999998;0.34999999999999998;0.16600000000000001;0.5;0.34999999999999998;0.34999999999999998;0.33300000000000002;0.5;0.34999999999999998;0.34999999999999998;0.5;0.5;0.34999999999999998;0.34999999999999998;0.66600000000000004;0.5;0.34999999999999998;0.34999999999999998;0.83299999999999996;0.5;0.34999999999999998;0.34999999999999998;
+VCurve=1;0;0.5;0.35;0.35;0.166;0.5;0.35;0.35;0.333;0.5;0.35;0.35;0.5;0.5;0.35;0.35;0.666;0.5;0.35;0.35;0.833;0.5;0.35;0.35;
+
+[Film Simulation]
+Enabled=false
[RGB Curves]
LumaMode=false
@@ -151,3 +154,6 @@ rCurve=1;0;0;0.25;0.25;0.5;0.5;0.75;0.75;1;1;
gCurve=1;0;0;0.25;0.25;0.5;0.5;0.75;0.75;1;1;
bCurve=1;0;0;0.25;0.25;0.5;0.5;0.75;0.75;1;1;
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Skintones/Skintones - Natural TM.pp3 b/rtdata/profiles/Skintones/Skintones - Natural TM.pp3
index f692db268..ce3eb1b0c 100644
--- a/rtdata/profiles/Skintones/Skintones - Natural TM.pp3
+++ b/rtdata/profiles/Skintones/Skintones - Natural TM.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -123,7 +123,7 @@ Gamma=1.7
[EPD]
Enabled=true
Strength=0.25
-EdgeStopping=1.3999999999999999
+EdgeStopping=1.4
Scale=0.25
ReweightingIterates=0
@@ -156,8 +156,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=0;
gCurve=0;
bCurve=0;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Skintones/Skintones - Natural.pp3 b/rtdata/profiles/Skintones/Skintones - Natural.pp3
index f6c2769a5..415b5d189 100644
--- a/rtdata/profiles/Skintones/Skintones - Natural.pp3
+++ b/rtdata/profiles/Skintones/Skintones - Natural.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -123,7 +123,7 @@ Gamma=1.7
[EPD]
Enabled=false
Strength=0.25
-EdgeStopping=1.3999999999999999
+EdgeStopping=1.4
Scale=0.25
ReweightingIterates=0
@@ -156,8 +156,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=0;
gCurve=0;
bCurve=0;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Skintones/Skintones - Pale TM Bright.pp3 b/rtdata/profiles/Skintones/Skintones - Pale TM Bright.pp3
index 28a1db08c..879d2f933 100644
--- a/rtdata/profiles/Skintones/Skintones - Pale TM Bright.pp3
+++ b/rtdata/profiles/Skintones/Skintones - Pale TM Bright.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -123,7 +123,7 @@ Gamma=1.7
[EPD]
Enabled=true
Strength=0.25
-EdgeStopping=1.3999999999999999
+EdgeStopping=1.4
Scale=0.25
ReweightingIterates=0
@@ -156,8 +156,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=0;
gCurve=0;
bCurve=0;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Skintones/Skintones - Pale TM.pp3 b/rtdata/profiles/Skintones/Skintones - Pale TM.pp3
index 825c177b5..d022f261b 100644
--- a/rtdata/profiles/Skintones/Skintones - Pale TM.pp3
+++ b/rtdata/profiles/Skintones/Skintones - Pale TM.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -123,7 +123,7 @@ Gamma=1.7
[EPD]
Enabled=true
Strength=0.25
-EdgeStopping=1.3999999999999999
+EdgeStopping=1.4
Scale=0.25
ReweightingIterates=0
@@ -156,8 +156,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=0;
gCurve=0;
bCurve=0;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Skintones/Skintones - Pale.pp3 b/rtdata/profiles/Skintones/Skintones - Pale.pp3
index 3387ec173..88675ff03 100644
--- a/rtdata/profiles/Skintones/Skintones - Pale.pp3
+++ b/rtdata/profiles/Skintones/Skintones - Pale.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -123,7 +123,7 @@ Gamma=1.7
[EPD]
Enabled=false
Strength=0.25
-EdgeStopping=1.3999999999999999
+EdgeStopping=1.4
Scale=1
ReweightingIterates=0
@@ -156,8 +156,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=0;
gCurve=0;
bCurve=0;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Skintones/Skintones - Soft Texture.pp3 b/rtdata/profiles/Skintones/Skintones - Soft Texture.pp3
index 21841dce3..d2b66d55e 100644
--- a/rtdata/profiles/Skintones/Skintones - Soft Texture.pp3
+++ b/rtdata/profiles/Skintones/Skintones - Soft Texture.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -123,7 +123,7 @@ Gamma=1.7
[EPD]
Enabled=false
Strength=0.25
-EdgeStopping=1.3999999999999999
+EdgeStopping=1.4
Scale=1
ReweightingIterates=0
@@ -156,8 +156,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=true
rCurve=3;0;0;0.058419243986254393;0.28522336769759427;0.46735395189003465;0.890034364261168;1;1;
gCurve=3;0;0;0.96563573883161546;0.66323024054982871;1;1;
bCurve=0;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Skintones/Skintones - Strong Texture.pp3 b/rtdata/profiles/Skintones/Skintones - Strong Texture.pp3
index 86e0fdc73..546aad561 100644
--- a/rtdata/profiles/Skintones/Skintones - Strong Texture.pp3
+++ b/rtdata/profiles/Skintones/Skintones - Strong Texture.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -123,7 +123,7 @@ Gamma=1.7
[EPD]
Enabled=false
Strength=0.25
-EdgeStopping=1.3999999999999999
+EdgeStopping=1.4
Scale=1
ReweightingIterates=0
@@ -156,8 +156,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=true
rCurve=3;0;0;0.29209621993127149;0.054982817869415793;0.90034364261168398;0.46391752577319617;1;1;
gCurve=3;0;0;0.67697594501718261;0.95532646048109982;1;1;
bCurve=0;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Skintones/Skintones - Studio TM.pp3 b/rtdata/profiles/Skintones/Skintones - Studio TM.pp3
index 870b84f4b..c1ff332b1 100644
--- a/rtdata/profiles/Skintones/Skintones - Studio TM.pp3
+++ b/rtdata/profiles/Skintones/Skintones - Studio TM.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -122,8 +122,8 @@ Gamma=1.7
[EPD]
Enabled=true
-Strength=0.14999999999999999
-EdgeStopping=1.3999999999999999
+Strength=0.15
+EdgeStopping=1.4
Scale=0.25
ReweightingIterates=0
@@ -156,8 +156,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=0;
gCurve=0;
bCurve=0;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Skintones/Skintones - Studio.pp3 b/rtdata/profiles/Skintones/Skintones - Studio.pp3
index 7ee7ca690..1a5167efa 100644
--- a/rtdata/profiles/Skintones/Skintones - Studio.pp3
+++ b/rtdata/profiles/Skintones/Skintones - Studio.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -122,8 +122,8 @@ Gamma=1.7
[EPD]
Enabled=false
-Strength=0.14999999999999999
-EdgeStopping=1.3999999999999999
+Strength=0.15
+EdgeStopping=1.4
Scale=0.25
ReweightingIterates=0
@@ -156,8 +156,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=0;
gCurve=0;
bCurve=0;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Skintones/Skintones - StudioBase 1 TM.pp3 b/rtdata/profiles/Skintones/Skintones - StudioBase 1 TM.pp3
index 3d45cedde..cee28958f 100644
--- a/rtdata/profiles/Skintones/Skintones - StudioBase 1 TM.pp3
+++ b/rtdata/profiles/Skintones/Skintones - StudioBase 1 TM.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -122,8 +122,8 @@ Gamma=1.7
[EPD]
Enabled=true
-Strength=0.14999999999999999
-EdgeStopping=1.3999999999999999
+Strength=0.15
+EdgeStopping=1.4
Scale=0.25
ReweightingIterates=0
@@ -156,8 +156,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=0;
gCurve=0;
bCurve=0;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtdata/profiles/Skintones/Skintones - StudioBase 1.pp3 b/rtdata/profiles/Skintones/Skintones - StudioBase 1.pp3
index 38740fd61..27429b629 100644
--- a/rtdata/profiles/Skintones/Skintones - StudioBase 1.pp3
+++ b/rtdata/profiles/Skintones/Skintones - StudioBase 1.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=4.0.12
-Version=319
+AppVersion=4.1.50
+Version=321
[Exposure]
Auto=false
@@ -122,8 +122,8 @@ Gamma=1.7
[EPD]
Enabled=false
-Strength=0.14999999999999999
-EdgeStopping=1.3999999999999999
+Strength=0.15
+EdgeStopping=1.4
Scale=0.25
ReweightingIterates=0
@@ -156,8 +156,15 @@ HCurve=0;
SCurve=0;
VCurve=0;
+[Film Simulation]
+Enabled=false
+
[RGB Curves]
LumaMode=false
rCurve=0;
gCurve=0;
bCurve=0;
+
+[ColorToning]
+Enabled=false
+
diff --git a/rtengine/CMakeLists.txt b/rtengine/CMakeLists.txt
index 1dbe2dcb5..05bd4312c 100644
--- a/rtengine/CMakeLists.txt
+++ b/rtengine/CMakeLists.txt
@@ -22,6 +22,7 @@ set (RTENGINESOURCEFILES safegtk.cc colortemp.cc curves.cc flatcurves.cc diagona
cJSON.c camconst.cc
klt/convolve.cc klt/error.cc klt/klt.cc klt/klt_util.cc klt/pnmio.cc klt/pyramid.cc klt/selectGoodFeatures.cc
klt/storeFeatures.cc klt/trackFeatures.cc klt/writeFeatures.cc
+ clutstore.cc
)
include_directories (BEFORE "${CMAKE_CURRENT_BINARY_DIR}")
diff --git a/rtengine/clutstore.cc b/rtengine/clutstore.cc
new file mode 100644
index 000000000..2604b2e2d
--- /dev/null
+++ b/rtengine/clutstore.cc
@@ -0,0 +1,400 @@
+#include "clutstore.h"
+#include "rt_math.h"
+#include "stdimagesource.h"
+#include "safegtk.h"
+
+rtengine::CLUTStore clutStore;
+
+using namespace rtengine;
+
+const float MAXVAL8 = 255.;
+
+CLUTStore::CLUTStore()
+: m_refCount( 0 )
+{
+}
+
+CLUT* CLUTStore::getClut( Glib::ustring filename )
+{
+ //MyMutex::MyLock lock(m_mutex); // copypasted from iccstore
+ CLUT *result = 0;
+ if ( !m_lastHaldClut.isValid() || m_lastFilename != filename )
+ {
+ takeUpClut();
+ m_lastHaldClut.load( filename );
+ }
+ if ( m_lastHaldClut.isValid() )
+ {
+ result = &m_lastHaldClut;
+ m_lastFilename = filename;
+ ++m_refCount;
+ }
+ else
+ {
+ m_mutex.unlock();
+ }
+ return result;
+}
+
+void CLUTStore::takeUpClut()
+{
+ m_mutex.lock();
+}
+
+void CLUTStore::releaseClut( CLUT *clut )
+{
+ if ( clut && --m_refCount == 0 )
+ {
+ m_mutex.unlock();
+ }
+}
+
+void CLUTStore::clearCache()
+{
+ m_lastHaldClut.clear();
+ m_lastFilename.clear();
+}
+
+void rtengine::splitClutFilename( Glib::ustring filename, Glib::ustring &name, Glib::ustring &extension, Glib::ustring &profileName )
+{
+ filename = Glib::path_get_basename( filename );
+ name = filename;
+ //remove dirs
+ size_t lastSlashPos = filename.find_last_of( "/" );
+ if ( lastSlashPos == Glib::ustring::npos )
+ {
+ lastSlashPos = filename.find_last_of( "\\" );
+ }
+
+ size_t lastDotPos = filename.find_last_of( '.' );
+ if ( lastDotPos != Glib::ustring::npos )
+ {
+ name = filename.substr( 0, lastDotPos );
+ extension = filename.substr( lastDotPos + 1, Glib::ustring::npos );
+ }
+ profileName = "sRGB"; // sRGB by default
+ static std::vector workingProfiles = rtengine::getWorkingProfiles();
+ for ( std::vector::iterator it = workingProfiles.begin();
+ it != workingProfiles.end();
+ ++it )
+ {
+ Glib::ustring ¤tProfile = *it;
+ if ( std::search( name.rbegin(), name.rend(), currentProfile.rbegin(), currentProfile.rend() ) == name.rbegin() )
+ {
+ profileName = currentProfile;
+ name = name.substr( 0, name.size() - currentProfile.size() );
+ break;
+ }
+ }
+}
+
+//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+HaldCLUT::HaldCLUT()
+: m_clutImage( 0 ),
+ m_level (0),
+ m_profile( "sRGB" )
+{}
+
+HaldCLUT::~HaldCLUT()
+{
+}
+
+void HaldCLUT::clear()
+{
+ if ( m_clutImage )
+ {
+ m_clutImage->free();
+ m_clutImage = 0;
+ }
+ m_filename.clear();
+}
+
+void HaldCLUT::load( Glib::ustring filename )
+{
+ if ( m_filename != filename )
+ {
+ clear();
+ m_clutImage = loadFile( filename, "", m_level );
+ Glib::ustring name, ext;
+ splitClutFilename( filename, name, ext, m_profile );
+ if ( m_clutImage )
+ {
+ m_filename = filename;
+ }
+ }
+}
+
+Glib::ustring HaldCLUT::profile() const
+{
+ return m_profile;
+}
+
+Imagefloat* HaldCLUT::loadFile( Glib::ustring filename, Glib::ustring workingColorSpace, int &outLevel )
+{
+ Imagefloat *result = 0;
+ StdImageSource imgSrc;
+ if ( !safe_file_test( filename, Glib::FILE_TEST_EXISTS ) || imgSrc.load(filename) )
+ {
+ return result;
+ }
+
+ int fw, fh;
+ imgSrc.getFullSize (fw, fh, TR_NONE);
+
+ bool valid = false;
+ //test on Hald format, copypasted from http://www.quelsolaar.com/technology/clut.html
+ if ( fw == fh )
+ {
+ outLevel = 1;
+ for(; outLevel * outLevel * outLevel < fw; outLevel++);
+ if( !( outLevel * outLevel * outLevel > fw ) )
+ {
+ valid = true;
+ }
+ }
+
+ if ( valid )
+ {
+ ColorTemp currWB = imgSrc.getWB();
+ Imagefloat* baseImg = new Imagefloat (fw, fh);
+ PreviewProps pp (0, 0, fw, fh, 1);
+
+ procparams::ColorManagementParams icm;
+ icm.working = workingColorSpace;
+
+ imgSrc.getImage (currWB, TR_NONE, baseImg, pp, procparams::ToneCurveParams(), icm, procparams::RAWParams());
+ if ( !workingColorSpace.empty() )
+ {
+ imgSrc.convertColorSpace(baseImg, icm, currWB, procparams::RAWParams());
+ }
+ result = baseImg;
+ }
+ return result;
+}
+
+void HaldCLUT::loadClut( Imagefloat *img, RawClut &outClut )
+{
+ img->normalizeFloatTo1();
+ int y_size = img->getH();
+ int x_size = img->getW();
+ outClut.resize( x_size * y_size * 3 );
+ int clutIdx = 0;
+ //int level = m_level * m_level; (unused)
+ for(int y = 0; y < y_size; y++)
+ {
+ for(int x = 0; x < x_size; x++)
+ {
+ outClut[ clutIdx * 3 ] = img->r( y, x ) * MAXVAL8;
+ outClut[ clutIdx * 3 + 1 ] = img->g( y, x ) * MAXVAL8;
+ outClut[ clutIdx * 3 + 2 ] = img->b( y, x ) * MAXVAL8;
+
+ ++clutIdx;
+ }
+ }
+}
+
+Imagefloat* HaldCLUT::generateIdentImage( int level )
+{
+ int imageWidth = level * level * level;
+ Imagefloat *resultImg = new Imagefloat( imageWidth, imageWidth );
+
+ int cubeSideSize = level * level;
+ float step = MAXVALF / (cubeSideSize - 1);
+ int pos = 0;
+ for( int b = 0; b < cubeSideSize; ++b )
+ {
+ for ( int g = 0; g < cubeSideSize; ++g )
+ {
+ for ( int r = 0; r < cubeSideSize; ++r )
+ {
+ int x = pos / imageWidth;
+ int y = pos % imageWidth;
+ resultImg->r( x, y ) = step * r;
+ resultImg->g( x, y ) = step * g;
+ resultImg->b( x, y ) = step * b;
+ ++pos;
+ }
+ }
+ }
+ return resultImg;
+}
+
+
+bool HaldCLUT::isValid() const
+{
+ return m_clutImage != 0;
+}
+
+void HaldCLUT::getRGB( float rr, float gg, float bb, float &outR, float &outG, float &outB ) const
+{
+ rr /= MAXVALF;
+ gg /= MAXVALF;
+ bb /= MAXVALF;
+ correct( *m_clutImage, m_level, rr, gg, bb, outR, outG, outB );
+}
+
+inline float valF( unsigned char val )
+{
+ return float( val ) / MAXVAL8;
+}
+
+// copypasted from http://www.quelsolaar.com/technology/clut.html
+void HaldCLUT::correct( const HaldCLUT::RawClut& clut, int level, float rr, float gg, float bb, float &outR, float &outG, float &outB )
+{
+ int color, red, green, blue, i, j;
+ float tmp[6], r, g, b;
+ level = level * level;
+
+ red = rr * (float)(level - 1);
+ if(red > level - 2)
+ red = (float)level - 2;
+ if(red < 0)
+ red = 0;
+
+ green = gg * (float)(level - 1);
+ if(green > level - 2)
+ green = (float)level - 2;
+ if(green < 0)
+ green = 0;
+
+ blue = bb * (float)(level - 1);
+ if(blue > level - 2)
+ blue = (float)level - 2;
+ if(blue < 0)
+ blue = 0;
+
+ r = rr * (float)(level - 1) - red;
+ g = gg * (float)(level - 1) - green;
+ b = bb * (float)(level - 1) - blue;
+
+ color = red + green * level + blue * level * level;
+
+ i = color * 3;
+ j = (color + 1) * 3;
+
+ tmp[0] = valF( clut[i++] ) * (1 - r) + valF( clut[j++] ) * r;
+ tmp[1] = valF( clut[i++] ) * (1 - r) + valF( clut[j++] ) * r;
+ tmp[2] = valF( clut[i] ) * (1 - r) + valF( clut[j] ) * r;
+
+ i = (color + level) * 3;
+ j = (color + level + 1) * 3;
+
+ tmp[3] = valF( clut[i++] ) * (1 - r) + valF( clut[j++] ) * r;
+ tmp[4] = valF( clut[i++] ) * (1 - r) + valF( clut[j++] ) * r;
+ tmp[5] = valF( clut[i] ) * (1 - r) + valF( clut[j] ) * r;
+
+ outR = tmp[0] * (1 - g) + tmp[3] * g;
+ outG = tmp[1] * (1 - g) + tmp[4] * g;
+ outB = tmp[2] * (1 - g) + tmp[5] * g;
+
+ i = (color + level * level) * 3;
+ j = (color + level * level + 1) * 3;
+
+ tmp[0] = valF( clut[i++] ) * (1 - r) + valF( clut[j++] ) * r;
+ tmp[1] = valF( clut[i++] ) * (1 - r) + valF( clut[j++] ) * r;
+ tmp[2] = valF( clut[i] ) * (1 - r) + valF( clut[j] ) * r;
+
+ i = (color + level + level * level) * 3;
+ j = (color + level + level * level + 1) * 3;
+
+ tmp[3] = valF( clut[i++] ) * (1 - r) + valF( clut[j++] ) * r;
+ tmp[4] = valF( clut[i++] ) * (1 - r) + valF( clut[j++] ) * r;
+ tmp[5] = valF( clut[i] ) * (1 - r) + valF( clut[j] ) * r;
+
+ tmp[0] = tmp[0] * (1 - g) + tmp[3] * g;
+ tmp[1] = tmp[1] * (1 - g) + tmp[4] * g;
+ tmp[2] = tmp[2] * (1 - g) + tmp[5] * g;
+
+ outR = outR * (1 - b) + tmp[0] * b;
+ outG = outG * (1 - b) + tmp[1] * b;
+ outB = outB * (1 - b) + tmp[2] * b;
+}
+
+inline void pos2xy( int pos, int imageSideSize, int &outX, int &outY )
+{
+ outX = pos / imageSideSize;
+ outY = pos % imageSideSize;
+}
+
+void HaldCLUT::correct( Imagefloat &clutImage, int level, float rr, float gg, float bb, float &outR, float &outG, float &outB )
+{
+ int color, red, green, blue, i, j;
+ float tmp[6], r, g, b;
+ level = level * level;
+ int imageSideSize = clutImage.getW();
+
+ red = rr * (float)(level - 1);
+ if(red > level - 2)
+ red = (float)level - 2;
+ if(red < 0)
+ red = 0;
+
+ green = gg * (float)(level - 1);
+ if(green > level - 2)
+ green = (float)level - 2;
+ if(green < 0)
+ green = 0;
+
+ blue = bb * (float)(level - 1);
+ if(blue > level - 2)
+ blue = (float)level - 2;
+ if(blue < 0)
+ blue = 0;
+
+ r = rr * (float)(level - 1) - red;
+ g = gg * (float)(level - 1) - green;
+ b = bb * (float)(level - 1) - blue;
+
+ color = red + green * level + blue * level * level;
+
+
+ i = color;
+ j = color + 1;
+ int xi, yi, xj, yj;
+ pos2xy( i, imageSideSize, xi, yi );
+ pos2xy( j, imageSideSize, xj, yj );
+
+ tmp[0] = clutImage.r( xi, yi ) * (1 - r) + clutImage.r( xj, yj ) * r;
+ tmp[1] = clutImage.g( xi, yi ) * (1 - r) + clutImage.g( xj, yj ) * r;
+ tmp[2] = clutImage.b( xi, yi ) * (1 - r) + clutImage.b( xj, yj ) * r;
+
+ i = color + level;
+ j = color + level + 1;
+ pos2xy( i, imageSideSize, xi, yi );
+ pos2xy( j, imageSideSize, xj, yj );
+
+ tmp[3] = clutImage.r( xi, yi ) * (1 - r) + clutImage.r( xj, yj ) * r;
+ tmp[4] = clutImage.g( xi, yi ) * (1 - r) + clutImage.g( xj, yj ) * r;
+ tmp[5] = clutImage.b( xi, yi ) * (1 - r) + clutImage.b( xj, yj ) * r;
+
+ outR = tmp[0] * (1 - g) + tmp[3] * g;
+ outG = tmp[1] * (1 - g) + tmp[4] * g;
+ outB = tmp[2] * (1 - g) + tmp[5] * g;
+
+ i = color + level * level;
+ j = color + level * level + 1;
+ pos2xy( i, imageSideSize, xi, yi );
+ pos2xy( j, imageSideSize, xj, yj );
+
+ tmp[0] = clutImage.r( xi, yi ) * (1 - r) + clutImage.r( xj, yj ) * r;
+ tmp[1] = clutImage.g( xi, yi ) * (1 - r) + clutImage.g( xj, yj ) * r;
+ tmp[2] = clutImage.b( xi, yi ) * (1 - r) + clutImage.b( xj, yj ) * r;
+
+ i = color + level + level * level;
+ j = color + level + level * level + 1;
+ pos2xy( i, imageSideSize, xi, yi );
+ pos2xy( j, imageSideSize, xj, yj );
+
+ tmp[3] = clutImage.r( xi, yi ) * (1 - r) + clutImage.r( xj, yj ) * r;
+ tmp[4] = clutImage.g( xi, yi ) * (1 - r) + clutImage.g( xj, yj ) * r;
+ tmp[5] = clutImage.b( xi, yi ) * (1 - r) + clutImage.b( xj, yj ) * r;
+
+ tmp[0] = tmp[0] * (1 - g) + tmp[3] * g;
+ tmp[1] = tmp[1] * (1 - g) + tmp[4] * g;
+ tmp[2] = tmp[2] * (1 - g) + tmp[5] * g;
+
+ outR = outR * (1 - b) + tmp[0] * b;
+ outG = outG * (1 - b) + tmp[1] * b;
+ outB = outB * (1 - b) + tmp[2] * b;
+}
diff --git a/rtengine/clutstore.h b/rtengine/clutstore.h
new file mode 100644
index 000000000..3fc08b582
--- /dev/null
+++ b/rtengine/clutstore.h
@@ -0,0 +1,93 @@
+#ifndef CLUT_STORE_INCLUDED
+#define CLUT_STORE_INCLUDED
+
+#include
+#include "../rtgui/threadutils.h"
+#include "imagefloat.h"
+#include
+
+namespace rtengine {
+
+// simple CLUT interface
+class CLUT
+{
+public:
+ virtual void getRGB( float r, float g, float b, float &outR, float &outG, float &outB ) const = 0;
+ virtual Glib::ustring profile() const = 0;
+protected:
+ virtual ~CLUT() {};
+};
+
+class HaldCLUT : public CLUT
+{
+public:
+ HaldCLUT();
+ ~HaldCLUT();
+ void load( Glib::ustring filename );
+ bool isValid() const;
+ void clear();
+
+ void getRGB( float r, float g, float b, float &outR, float &outG, float &outB ) const;
+ Glib::ustring profile() const;
+
+ typedef std::vector RawClut; // using 8 bit for reduce memory usage
+ static void correct( const RawClut&, int level, float r, float g, float b, float &outR, float &outG, float &outB );
+ static void correct( Imagefloat &clutImage, int level, float rr, float gg, float bb, float &outR, float &outG, float &outB );
+ static Imagefloat* generateIdentImage( int level );
+ static Imagefloat* loadFile( Glib::ustring filename, Glib::ustring workingColorSpace, int &outLevel );
+
+private:
+
+ void loadClut( Imagefloat *img, RawClut &outClut );
+
+ Imagefloat *m_clutImage;
+ int m_level;
+ Glib::ustring m_filename;
+ Glib::ustring m_profile;
+};
+
+// CLUT cache
+class CLUTStore
+{
+public:
+ CLUTStore();
+ CLUT* getClut( Glib::ustring filename );
+ void takeUpClut();
+ void releaseClut( CLUT *clut );
+ void clearCache();
+
+private:
+ int m_refCount;
+ MyMutex m_mutex;
+
+ HaldCLUT m_lastHaldClut;
+ Glib::ustring m_lastFilename;
+};
+
+void splitClutFilename( Glib::ustring filename, Glib::ustring &name, Glib::ustring &extension, Glib::ustring &profileName );
+
+}; //namespace rtengine
+
+extern rtengine::CLUTStore clutStore;
+
+namespace rtengine {
+
+//support class for automate call of clutStore.releaseClut()
+class ClutPtr
+{
+public:
+ ClutPtr() : m_point( 0 ) {}
+ explicit ClutPtr(CLUT *p) : m_point( p ) {}
+ ~ClutPtr() { clutStore.releaseClut( m_point ); }
+ CLUT* operator-> () const { return m_point; }
+ operator bool() const { return m_point != 0; }
+ void set( CLUT *p ) { m_point = p; }
+
+private:
+ ClutPtr& operator=(ClutPtr const& cp ) {} // ... a return value is expected here
+ CLUT *m_point;
+};
+
+}; //namespace rtengine
+
+#endif
diff --git a/rtengine/improcfun.cc b/rtengine/improcfun.cc
index b738cd916..dbe60762a 100644
--- a/rtengine/improcfun.cc
+++ b/rtengine/improcfun.cc
@@ -40,6 +40,8 @@
#include "rt_math.h"
#include "EdgePreservingDecomposition.h"
#include "improccoordinator.h"
+#include "clutstore.h"
+
#ifdef _OPENMP
#include
#endif
@@ -2258,6 +2260,28 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, EditBuffer *e
}
}
+ ClutPtr colorLUT;
+ bool clutAndWorkingProfilesAreSame = false;
+ TMatrix work2xyz, xyz2clut, clut2xyz, xyz2work;
+ if ( params->filmSimulation.enabled && !params->filmSimulation.clutFilename.empty() )
+ {
+ colorLUT.set( clutStore.getClut( params->filmSimulation.clutFilename ) );
+ if ( colorLUT )
+ {
+ clutAndWorkingProfilesAreSame = colorLUT->profile() == params->icm.working;
+ if ( !clutAndWorkingProfilesAreSame )
+ {
+ work2xyz = iccStore->workingSpaceMatrix( params->icm.working );
+ xyz2clut = iccStore->workingSpaceInverseMatrix( colorLUT->profile() );
+ xyz2work = iccStore->workingSpaceInverseMatrix( params->icm.working );
+ clut2xyz = iccStore->workingSpaceMatrix( colorLUT->profile() );
+ }
+ }
+ }
+
+ double filmSimCorrectedStrength = double(params->filmSimulation.strength)/100.;
+ double filmSimSourceStrength = double(100-params->filmSimulation.strength)/100.;
+
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;
@@ -3046,6 +3070,48 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, EditBuffer *e
}
}
+ //Film Simulations
+ if ( colorLUT )
+ {
+ for (int i=istart,ti=0; i( Color::gamma_srgb( sourceR ) );
+ sourceG = CLIP( Color::gamma_srgb( sourceG ) );
+ sourceB = CLIP( Color::gamma_srgb( sourceB ) );
+
+ float r, g, b;
+ colorLUT->getRGB( sourceR, sourceG, sourceB, r, g, b );
+ // apply strength
+ sourceR = r * filmSimCorrectedStrength + sourceR * filmSimSourceStrength;
+ sourceG = g * filmSimCorrectedStrength + sourceG * filmSimSourceStrength;
+ sourceB = b * filmSimCorrectedStrength + sourceB * filmSimSourceStrength;
+ // apply inverse gamma sRGB
+ sourceR = Color::igamma_srgb( sourceR );
+ sourceG = Color::igamma_srgb( sourceG );
+ sourceB = Color::igamma_srgb( sourceB );
+
+ if (!clutAndWorkingProfilesAreSame) {
+ //convert from clut to working profile
+ float x, y, z;
+ Color::rgbxyz( sourceR, sourceG, sourceB, x, y, z, clut2xyz );
+ Color::xyz2rgb( x, y, z, sourceR, sourceG, sourceB, xyz2work );
+ }
+
+ }
+ }
+ }
+
//black and white
if(blackwhite){
if (hasToneCurvebw1) {
@@ -4845,7 +4911,6 @@ void ImProcFunctions::chromiLuminanceCurve (EditBuffer *editBuffer, int pW, LabI
// t2e.set();
// printf("Chromil took %d �sec\n",t2e.etime(t1e));
-
}
diff --git a/rtengine/procevents.h b/rtengine/procevents.h
index 18acfdbc1..74f5d8751 100644
--- a/rtengine/procevents.h
+++ b/rtengine/procevents.h
@@ -317,6 +317,9 @@ enum ProcEvent {
EvPreProcessExpBlackRed=289,
EvPreProcessExpBlackGreen=290,
EvPreProcessExpBlackBlue=291,
+ EvFilmSimulationEnabled=292,
+ EvFilmSimulationStrength=293,
+ EvFilmSimulationFilename=294,
NUMOFEVENTS
};
}
diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc
index 3047aadb4..1e1ff50ff 100644
--- a/rtengine/procparams.cc
+++ b/rtengine/procparams.cc
@@ -756,6 +756,9 @@ void ProcParams::setDefaults () {
hsvequalizer.scurve.push_back (FCT_Linear);
hsvequalizer.vcurve.clear ();
hsvequalizer.vcurve.push_back (FCT_Linear);
+
+ filmSimulation.setDefaults();
+
raw.bayersensor.method = RAWParams::BayerSensor::methodstring[RAWParams::BayerSensor::amaze];
raw.bayersensor.ccSteps = 0;
raw.bayersensor.dcb_iterations = 2;
@@ -1360,6 +1363,11 @@ int ProcParams::save (Glib::ustring fname, Glib::ustring fname2, bool fnameAbsol
keyFile.set_double_list("HSV Equalizer", "VCurve", vcurve);
}
+ //save film simulation parameters
+ if ( !pedited || pedited->filmSimulation.enabled ) keyFile.set_boolean( "Film Simulation", "Enabled", filmSimulation.enabled );
+ if ( !pedited || pedited->filmSimulation.clutFilename ) keyFile.set_string ( "Film Simulation", "ClutFilename", filmSimulation.clutFilename );
+ if ( !pedited || pedited->filmSimulation.strength ) keyFile.set_integer( "Film Simulation", "Strength", filmSimulation.strength );
+
if (!pedited || pedited->rgbCurves.lumamode) keyFile.set_boolean ("RGB Curves", "LumaMode", rgbCurves.lumamode);
@@ -2059,6 +2067,20 @@ if (keyFile.has_group ("Directional Pyramid Equalizer")) {
}
}
+ // load CLUT parameters
+if ( keyFile.has_group( "Film Simulation" ) )
+{
+ if ( keyFile.has_key( "Film Simulation", "Enabled" ) ) { filmSimulation.enabled = keyFile.get_boolean( "Film Simulation", "Enabled" ); if ( pedited ) pedited->filmSimulation.enabled = true; }
+ if ( keyFile.has_key( "Film Simulation", "ClutFilename" ) ) { filmSimulation.clutFilename = keyFile.get_string( "Film Simulation", "ClutFilename" ); if ( pedited ) pedited->filmSimulation.clutFilename = true; }
+ if ( keyFile.has_key( "Film Simulation", "Strength" ) ) {
+ if (ppVersion < 321)
+ filmSimulation.strength = int(keyFile.get_double( "Film Simulation", "Strength" )*100 + 0.1);
+ else
+ filmSimulation.strength = keyFile.get_integer( "Film Simulation", "Strength" );
+ if ( pedited ) pedited->filmSimulation.strength = true;
+ }
+}
+
// load HSV equalizer parameters
if (keyFile.has_group ("HSV Equalizer")) {
if (ppVersion>=300) {
@@ -2514,6 +2536,9 @@ bool ProcParams::operator== (const ProcParams& other) {
&& hsvequalizer.hcurve == other.hsvequalizer.hcurve
&& hsvequalizer.scurve == other.hsvequalizer.scurve
&& hsvequalizer.vcurve == other.hsvequalizer.vcurve
+ && filmSimulation.enabled == other.filmSimulation.enabled
+ && filmSimulation.clutFilename == other.filmSimulation.clutFilename
+ && filmSimulation.strength == other.filmSimulation.strength
&& rgbCurves.rcurve == other.rgbCurves.rcurve
&& rgbCurves.gcurve == other.rgbCurves.gcurve
&& rgbCurves.bcurve == other.rgbCurves.bcurve
diff --git a/rtengine/procparams.h b/rtengine/procparams.h
index ec8438397..6c376bfd0 100644
--- a/rtengine/procparams.h
+++ b/rtengine/procparams.h
@@ -841,6 +841,27 @@ class HSVEqualizerParams {
std::vector vcurve;
};
+
+/**
+ * Film simualtion params
+ */
+struct FilmSimulationParams {
+ bool enabled;
+ Glib::ustring clutFilename;
+ int strength;
+
+ FilmSimulationParams() {
+ setDefaults();
+ }
+
+ void setDefaults() {
+ enabled = false;
+ clutFilename = Glib::ustring();
+ strength = 100;
+ }
+};
+
+
/**
* Parameters for RAW demosaicing, common to all sensor type
*/
@@ -962,6 +983,7 @@ class ProcParams {
RAWParams raw; ///< RAW parameters before demosaicing
DirPyrEqualizerParams dirpyrequalizer; ///< directional pyramid equalizer parameters
HSVEqualizerParams hsvequalizer; ///< hsv equalizer parameters
+ FilmSimulationParams filmSimulation; ///< film simulation parameters
char rank; ///< Custom image quality ranking
char colorlabel; ///< Custom color label
bool inTrash; ///< Marks deleted image
diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc
index 53ce32d94..0ab3e989c 100644
--- a/rtengine/refreshmap.cc
+++ b/rtengine/refreshmap.cc
@@ -314,6 +314,9 @@ FLATFIELD, // EvFlatFieldAutoClipControl
DARKFRAME, // EvPreProcessExpBlackRed
DARKFRAME, // EvPreProcessExpBlackGreen
DARKFRAME, // EvPreProcessExpBlackBlue
+RGBCURVE, //EvFilmSimulationEnabled
+RGBCURVE, //EvFilmSimulationStrength
+RGBCURVE, //EvFilmSimulationFilename
diff --git a/rtgui/CMakeLists.txt b/rtgui/CMakeLists.txt
index 8ceec7d5d..559e1ea0a 100644
--- a/rtgui/CMakeLists.txt
+++ b/rtgui/CMakeLists.txt
@@ -29,7 +29,8 @@ set (BASESOURCEFILES
sensorbayer.cc sensorxtrans.cc preprocess.cc bayerpreprocess.cc bayerprocess.cc bayerrawexposure.cc xtransprocess.cc xtransrawexposure.cc
darkframe.cc flatfield.cc rawcacorrection.cc rawexposure.cc
dirpyrequalizer.cc hsvequalizer.cc defringe.cc
- popupcommon.cc popupbutton.cc popuptogglebutton.cc sharpenedge.cc sharpenmicro.cc colorappearance.cc)
+ popupcommon.cc popupbutton.cc popuptogglebutton.cc sharpenedge.cc sharpenmicro.cc colorappearance.cc
+ filmsimulation.cc)
include_directories (BEFORE "${CMAKE_CURRENT_BINARY_DIR}")
diff --git a/rtgui/addsetids.h b/rtgui/addsetids.h
index 4133cb24f..06b1d2c4f 100644
--- a/rtgui/addsetids.h
+++ b/rtgui/addsetids.h
@@ -84,8 +84,9 @@
#define ADDSET_COLORTONING_STRPROTECT 76
#define ADDSET_DIRPYRDN_PASSES 77
#define ADDSET_RAWFFCLIPCONTROL 78
+#define ADDSET_FILMSIMULATION_STRENGTH 79
// When adding items, make sure to update ADDSET_PARAM_NUM
-#define ADDSET_PARAM_NUM 79 // THIS IS USED AS A DELIMITER!!
+#define ADDSET_PARAM_NUM 80 // THIS IS USED AS A DELIMITER!!
#endif
diff --git a/rtgui/batchtoolpanelcoord.cc b/rtgui/batchtoolpanelcoord.cc
index a4318d74f..f2e0d5162 100644
--- a/rtgui/batchtoolpanelcoord.cc
+++ b/rtgui/batchtoolpanelcoord.cc
@@ -144,16 +144,17 @@ void BatchToolPanelCoordinator::initSession () {
chmixer->setAdjusterBehavior (false);
blackwhite->setAdjusterBehavior (false,false);
colortoning->setAdjusterBehavior (false, false, false, false, false);
+ filmSimulation->setAdjusterBehavior(false);
shadowshighlights->setAdjusterBehavior (false, false, false);
dirpyrequalizer->setAdjusterBehavior (false, false, false);
dirpyrdenoise->setAdjusterBehavior (false, false,false,false,false,false, false);
bayerpreprocess->setAdjusterBehavior (false, false);
rawcacorrection->setAdjusterBehavior (false);
- flatfield->setAdjusterBehavior(false);
- rawexposure->setAdjusterBehavior (false, false);
- bayerrawexposure->setAdjusterBehavior (false);
- xtransrawexposure->setAdjusterBehavior (false);
+ flatfield->setAdjusterBehavior(false);
+ rawexposure->setAdjusterBehavior (false, false);
+ bayerrawexposure->setAdjusterBehavior (false);
+ xtransrawexposure->setAdjusterBehavior (false);
}
else {
@@ -177,19 +178,20 @@ void BatchToolPanelCoordinator::initSession () {
sharpenMicro->setAdjusterBehavior (options.baBehav[ADDSET_SHARPENMICRO_AMOUNT],options.baBehav[ADDSET_SHARPENMICRO_UNIFORMITY]);
icm->setAdjusterBehavior (options.baBehav[ADDSET_FREE_OUPUT_GAMMA],options.baBehav[ADDSET_FREE_OUTPUT_SLOPE]);
colortoning->setAdjusterBehavior (options.baBehav[ADDSET_COLORTONING_SPLIT], options.baBehav[ADDSET_COLORTONING_SATTHRESHOLD], options.baBehav[ADDSET_COLORTONING_SATOPACITY], options.baBehav[ADDSET_COLORTONING_STRPROTECT], options.baBehav[ADDSET_COLORTONING_BALANCE]);
+ filmSimulation->setAdjusterBehavior(options.baBehav[ADDSET_FILMSIMULATION_STRENGTH]);
chmixer->setAdjusterBehavior (options.baBehav[ADDSET_CHMIXER] );
blackwhite->setAdjusterBehavior (options.baBehav[ADDSET_BLACKWHITE_HUES],options.baBehav[ADDSET_BLACKWHITE_GAMMA]);
shadowshighlights->setAdjusterBehavior (options.baBehav[ADDSET_SH_HIGHLIGHTS], options.baBehav[ADDSET_SH_SHADOWS], options.baBehav[ADDSET_SH_LOCALCONTRAST]);
dirpyrequalizer->setAdjusterBehavior (options.baBehav[ADDSET_DIRPYREQ], options.baBehav[ADDSET_DIRPYREQ_THRESHOLD], options.baBehav[ADDSET_DIRPYREQ_SKINPROTECT]);
dirpyrdenoise->setAdjusterBehavior (options.baBehav[ADDSET_DIRPYRDN_LUMA],options.baBehav[ADDSET_DIRPYRDN_LUMDET],options.baBehav[ADDSET_DIRPYRDN_CHROMA],options.baBehav[ADDSET_DIRPYRDN_CHROMARED],options.baBehav[ADDSET_DIRPYRDN_CHROMABLUE], options.baBehav[ADDSET_DIRPYRDN_GAMMA], options.baBehav[ADDSET_DIRPYRDN_PASSES]);
- bayerpreprocess->setAdjusterBehavior (options.baBehav[ADDSET_PREPROCESS_LINEDENOISE], options.baBehav[ADDSET_PREPROCESS_GREENEQUIL]);
+ bayerpreprocess->setAdjusterBehavior (options.baBehav[ADDSET_PREPROCESS_LINEDENOISE], options.baBehav[ADDSET_PREPROCESS_GREENEQUIL]);
rawcacorrection->setAdjusterBehavior (options.baBehav[ADDSET_RAWCACORR]);
- flatfield->setAdjusterBehavior(options.baBehav[ADDSET_RAWFFCLIPCONTROL]);
- rawexposure->setAdjusterBehavior (options.baBehav[ADDSET_RAWEXPOS_LINEAR], options.baBehav[ADDSET_RAWEXPOS_PRESER]);
- bayerrawexposure->setAdjusterBehavior (options.baBehav[ADDSET_RAWEXPOS_BLACKS]);
+ flatfield->setAdjusterBehavior(options.baBehav[ADDSET_RAWFFCLIPCONTROL]);
+ rawexposure->setAdjusterBehavior (options.baBehav[ADDSET_RAWEXPOS_LINEAR], options.baBehav[ADDSET_RAWEXPOS_PRESER]);
+ bayerrawexposure->setAdjusterBehavior (options.baBehav[ADDSET_RAWEXPOS_BLACKS]);
xtransrawexposure->setAdjusterBehavior (options.baBehav[ADDSET_RAWEXPOS_BLACKS]);
-
+
if (options.baBehav[ADDSET_TC_EXPCOMP]) pparams.toneCurve.expcomp = 0;
if (options.baBehav[ADDSET_TC_HLCOMPAMOUNT]) pparams.toneCurve.hlcompr = 0;
if (options.baBehav[ADDSET_TC_HLCOMPTHRESH]) pparams.toneCurve.hlcomprthresh = 0;
@@ -257,6 +259,8 @@ void BatchToolPanelCoordinator::initSession () {
if (options.baBehav[ADDSET_COLORTONING_BALANCE]) pparams.colorToning.balance = 0;
if (options.baBehav[ADDSET_COLORTONING_STRPROTECT]) pparams.colorToning.strengthprotection = 0;
+ if (options.baBehav[ADDSET_FILMSIMULATION_STRENGTH]) pparams.filmSimulation.strength = 0;
+
if (options.baBehav[ADDSET_ROTATE_DEGREE]) pparams.rotate.degree = 0;
if (options.baBehav[ADDSET_DIST_AMOUNT]) pparams.distortion.amount = 0;
if (options.baBehav[ADDSET_PERSPECTIVE]) pparams.perspective.horizontal = pparams.perspective.vertical = 0;
diff --git a/rtgui/filmsimulation.cc b/rtgui/filmsimulation.cc
new file mode 100644
index 000000000..9fbedd45c
--- /dev/null
+++ b/rtgui/filmsimulation.cc
@@ -0,0 +1,290 @@
+#include "filmsimulation.h"
+#include "options.h"
+#include "../rtengine/clutstore.h"
+#include "../rtengine/safegtk.h"
+
+using namespace rtengine;
+using namespace rtengine::procparams;
+
+typedef std::vector Strings;
+
+FilmSimulation::FilmSimulation()
+: FoldableToolPanel( this ),
+ m_lastEnabled( false )
+{
+ m_enabled = Gtk::manage ( new Gtk::CheckButton( M("GENERAL_ENABLED") ) );
+ m_enabled->set_active( false );
+
+ pack_start( *m_enabled, Gtk::PACK_SHRINK, 0 );
+
+ m_enabled->show();
+ m_enabledConn = m_enabled->signal_toggled().connect( sigc::mem_fun( *this, &FilmSimulation::onEnabledToggled ) );
+
+ pack_start( *Gtk::manage ( new Gtk::HSeparator() ) );
+
+ m_clutComboBox = Gtk::manage( new ClutComboBox() );
+ int foundClutsCount = m_clutComboBox->fillFromDir( options.clutsDir );
+ if ( foundClutsCount == 0 )
+ {
+ pack_start( *Gtk::manage( new Gtk::Label( M("TP_FILMSIMULATION_ZEROCLUTSFOUND") ) ) );
+ }
+ m_clutComboBoxConn = m_clutComboBox->signal_changed().connect( sigc::mem_fun( *this, &FilmSimulation::onClutSelected ) );
+ pack_start( *m_clutComboBox );
+
+ m_strength = Gtk::manage( new Adjuster( M("TP_FILMSIMULATION_STRENGTH"), 0., 100, 1., 100 ) );
+ m_strength->setAdjusterListener( this );
+
+ pack_start( *m_strength, Gtk::PACK_SHRINK, 0 );
+
+}
+
+void FilmSimulation::onClutSelected()
+{
+ Glib::ustring currentClutFilename = m_clutComboBox->getSelectedClut();
+
+ if ( m_enabled->get_active() && !currentClutFilename.empty() && listener && currentClutFilename != m_oldClutFilename )
+ {
+ Glib::ustring clutName, dummy;
+ splitClutFilename( currentClutFilename, clutName, dummy, dummy );
+ listener->panelChanged( EvFilmSimulationFilename, clutName );
+
+ m_oldClutFilename = currentClutFilename;
+ }
+}
+
+void FilmSimulation::onEnabledToggled()
+{
+ if (multiImage)
+ {
+ if (m_enabled->get_inconsistent()) {
+ m_enabled->set_inconsistent (false);
+ m_enabledConn.block (true);
+ m_enabled->set_active (false);
+ m_enabledConn.block (false);
+ }
+ else if (m_lastEnabled)
+ m_enabled->set_inconsistent (true);
+
+ m_lastEnabled = m_enabled->get_active ();
+ }
+
+ if ( listener )
+ {
+ if (m_enabled->get_inconsistent())
+ listener->panelChanged (EvFilmSimulationEnabled, M("GENERAL_UNCHANGED"));
+ else if ( m_enabled->get_active() )
+ listener->panelChanged (EvFilmSimulationEnabled, M("GENERAL_ENABLED"));
+ else
+ listener->panelChanged (EvFilmSimulationEnabled, M("GENERAL_DISABLED"));
+ }
+}
+
+void FilmSimulation::adjusterChanged( Adjuster* a, double newval )
+{
+ if (listener && (multiImage||m_enabled->get_active()) )
+ {
+ Glib::ustring value = a->getTextValue();
+ listener->panelChanged ( EvFilmSimulationStrength, value );
+ }
+}
+
+void FilmSimulation::setBatchMode( bool batchMode )
+{
+ ToolPanel::setBatchMode( batchMode );
+ m_clutComboBox->addUnchangedEntry();
+}
+
+void FilmSimulation::read( const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited )
+{
+ //copypasted from lensprofile.cc & sharpening.cc
+ disableListener();
+ updateDisable( true );
+
+ m_enabled->set_active( pp->filmSimulation.enabled );
+ if ( !pp->filmSimulation.clutFilename.empty() )
+ m_clutComboBox->setSelectedClut( pp->filmSimulation.clutFilename );
+ m_strength->setValue( pp->filmSimulation.strength );
+
+ if (pedited)
+ {
+ m_enabled->set_inconsistent (multiImage && !pedited->filmSimulation.enabled);
+ m_strength->setEditedState (pedited->filmSimulation.strength ? Edited : UnEdited);
+ if ( !pedited->filmSimulation.clutFilename )
+ m_clutComboBox->setSelectedClut("NULL");
+ }
+ if ( !m_enabled->get_inconsistent() && !pp->filmSimulation.enabled )
+ {
+ clutStore.clearCache();
+ }
+
+ updateDisable( false );
+ enableListener();
+}
+
+void FilmSimulation::updateDisable( bool value )
+{
+ m_enabledConn.block( value );
+ m_clutComboBoxConn.block( value );
+}
+
+void FilmSimulation::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pedited )
+{
+ if ( pedited )
+ {
+ pedited->filmSimulation.enabled = !m_enabled->get_inconsistent();
+ pedited->filmSimulation.strength = m_strength->getEditedState ();
+ pedited->filmSimulation.clutFilename = m_clutComboBox->getSelectedClut() != "NULL";
+ }
+
+ pp->filmSimulation.enabled = m_enabled->get_active();
+ Glib::ustring clutFName = m_clutComboBox->getSelectedClut();
+ if ( clutFName != "NULL" ) // We do not want to set "NULL" in clutFilename, even if "unedited"
+ pp->filmSimulation.clutFilename = clutFName;
+ pp->filmSimulation.strength = m_strength->getValue();
+}
+
+void FilmSimulation::setAdjusterBehavior( bool strength )
+{
+ m_strength->setAddMode( strength );
+}
+
+void FilmSimulation::trimValues( rtengine::procparams::ProcParams* pp )
+{
+ pp->filmSimulation.strength = m_strength->trimValue( pp->filmSimulation.strength );
+}
+
+//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+ClutComboBox::ClutColumns::ClutColumns()
+{
+ add( label );
+ add( clutFilename );
+}
+
+int ClutComboBox::fillFromDir( Glib::ustring path )
+{
+ int result = 0;
+ if ( !path.empty() )
+ {
+ m_model.clear();
+ m_model = Gtk::TreeStore::create( m_columns );
+ set_model( m_model );
+ result = parseDir( path, 0 );
+ pack_start( m_columns.label, false );
+ }
+ return result;
+}
+
+Gtk::TreeIter appendToModel( Glib::RefPtr model, Gtk::TreeModel::Row *parent )
+{
+ Gtk::TreeIter result;
+ if ( parent )
+ {
+ result = model->append( parent->children() );
+
+ }
+ else
+ {
+ result = model->append();
+ }
+ return result;
+}
+
+int ClutComboBox::parseDir( Glib::ustring path, Gtk::TreeModel::Row *parentRow )
+{
+ int result = 0;
+ if ( path.empty() || !safe_file_test( path, Glib::FILE_TEST_EXISTS ) || !safe_file_test ( path, Glib::FILE_TEST_IS_DIR ) )
+ return result;
+
+ Glib::Dir* dir = new Glib::Dir( path );
+
+ Strings names;
+
+ for( Glib::DirIterator it = dir->begin(); it != dir->end(); ++it )
+ {
+ Glib::ustring current = *it;
+ if ( current != "." && current != ".." )
+ {
+ names.push_back( current );
+ }
+ }
+
+ std::sort( names.begin(), names.end() );
+
+ for ( Strings::iterator it = names.begin(); it != names.end(); ++it )
+ {
+ Glib::ustring current = *it;
+ Glib::ustring fullname = Glib::build_filename( path, current );
+ if ( safe_file_test( fullname, Glib::FILE_TEST_IS_DIR ) )
+ {
+
+ Gtk::TreeModel::Row newFolderMenu = *appendToModel( m_model, parentRow );
+ newFolderMenu[ m_columns.label ] = current;
+ result += parseDir( fullname, &newFolderMenu );
+ }
+ else
+ {
+ Glib::ustring name, extension, profileName;
+ splitClutFilename( current, name, extension, profileName );
+ if ( extension == "tif" ||
+ extension == "TIF" ||
+ extension == "png" ||
+ extension == "PNG" )
+ {
+ Gtk::TreeModel::Row newClut = *appendToModel( m_model, parentRow );
+ newClut[ m_columns.label ] = name;
+ newClut[ m_columns.clutFilename ] = fullname;
+ ++result;
+ }
+ }
+ }
+ return result;
+}
+
+Glib::ustring ClutComboBox::getSelectedClut()
+{
+ Glib::ustring result;
+ Gtk::TreeModel::iterator current = get_active();
+ Gtk::TreeModel::Row row = *current;
+ if ( row )
+ {
+ result = row[ m_columns.clutFilename ];
+ }
+ return result;
+}
+
+void ClutComboBox::setSelectedClut( Glib::ustring filename )
+{
+ if ( !filename.empty() )
+ {
+ Gtk::TreeIter found = findRowByClutFilename( m_model->children(), filename );
+ if ( found )
+ {
+ set_active( found );
+ }
+ }
+}
+
+Gtk::TreeIter ClutComboBox::findRowByClutFilename( Gtk::TreeModel::Children childs, Glib::ustring filename )
+{
+ Gtk::TreeIter result = childs.end();
+ for( Gtk::TreeModel::Children::iterator it = childs.begin(); !result && it != childs.end(); ++it )
+ {
+ Gtk::TreeModel::Row row = *it;
+ if ( row[ m_columns.clutFilename ] == filename )
+ {
+ result = it;
+ }
+ else
+ {
+ result = findRowByClutFilename( it->children(), filename );
+ }
+ }
+ return result;
+}
+
+void ClutComboBox::addUnchangedEntry() {
+ Gtk::TreeModel::Row row = *(m_model->append());
+ row[m_columns.label] = M("GENERAL_UNCHANGED");
+ row[m_columns.clutFilename] = "NULL";
+}
diff --git a/rtgui/filmsimulation.h b/rtgui/filmsimulation.h
new file mode 100644
index 000000000..17368395f
--- /dev/null
+++ b/rtgui/filmsimulation.h
@@ -0,0 +1,64 @@
+#ifndef FILM_SIMULATION_INCLUDED
+#define FILM_SIMULATION_INCLUDED
+
+#include
+#include
+#include
+#include "toolpanel.h"
+#include "guiutils.h"
+#include "adjuster.h"
+
+class ClutComboBox : public MyComboBox
+{
+public:
+ int fillFromDir( Glib::ustring path );
+ Glib::ustring getSelectedClut();
+ void setSelectedClut( Glib::ustring filename );
+ void addUnchangedEntry();
+
+private:
+ class ClutColumns : public Gtk::TreeModel::ColumnRecord
+ {
+ public:
+ Gtk::TreeModelColumn label;
+ Gtk::TreeModelColumn clutFilename;
+ ClutColumns();
+ };
+
+ int parseDir( Glib::ustring path, Gtk::TreeModel::Row *parentRow );
+ Gtk::TreeIter findRowByClutFilename( Gtk::TreeModel::Children childs, Glib::ustring filename );
+
+ Glib::RefPtr m_model;
+ ClutColumns m_columns;
+};
+
+class FilmSimulation : public ToolParamBlock, public AdjusterListener, public FoldableToolPanel
+{
+public:
+ FilmSimulation();
+
+ void adjusterChanged( Adjuster* a, double newval );
+ void setBatchMode( bool batchMode );
+ void read( const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = NULL );
+ void write( rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = NULL );
+ void setAdjusterBehavior( bool strength );
+ void trimValues( rtengine::procparams::ProcParams* pp );
+
+private:
+ void onClutSelected();
+ void onEnabledToggled();
+
+ void updateDisable( bool value );
+
+ Gtk::CheckButton* m_enabled;
+ bool m_lastEnabled;
+ sigc::connection m_enabledConn;
+
+ ClutComboBox *m_clutComboBox;
+ sigc::connection m_clutComboBoxConn;
+ Glib::ustring m_oldClutFilename;
+
+ Adjuster *m_strength;
+};
+
+#endif
diff --git a/rtgui/options.cc b/rtgui/options.cc
index ea7a1ac1c..4e9962e26 100644
--- a/rtgui/options.cc
+++ b/rtgui/options.cc
@@ -396,6 +396,8 @@ void Options::setDefaults () {
fastexport_resize_width = 900;
fastexport_resize_height = 900;
+ clutsDir = "./cluts";
+
cutOverlayBrush = std::vector (4);
cutOverlayBrush[3] = 0.667; // :-p
@@ -490,6 +492,7 @@ void Options::setDefaults () {
0, // ADDSET_COLORTONING_SPLIT
0, //ADDSET_DIRPYRDN_PASSES
0, // ADDSET_RAWFFCLIPCONTROL
+ 0, // ADDSET_FILMSIMULATION_STRENGTH
};
baBehav = std::vector (babehav, babehav+ADDSET_PARAM_NUM);
@@ -792,6 +795,8 @@ if (keyFile.has_group ("Color Management")) {
if( keyFile.has_key ("Color Management", "ProtectRed")) rtSettings.protectred = keyFile.get_integer("Color Management", "ProtectRed");
if( keyFile.has_key ("Color Management", "ProtectRedH")) rtSettings.protectredh = keyFile.get_double("Color Management", "ProtectRedH");
if( keyFile.has_key ("Color Management", "Amountchroma")) rtSettings.amchroma = keyFile.get_integer("Color Management", "Amountchroma");
+
+ if( keyFile.has_key ("Color Management", "ClutsDirectory")) clutsDir = keyFile.get_string("Color Management", "ClutsDirectory");
// if( keyFile.has_key ("Color Management", "Ciebadpixgauss")) rtSettings.ciebadpixgauss = keyFile.get_boolean("Color Management", "Ciebadpixgauss");
}
@@ -1092,6 +1097,7 @@ int Options::saveToFile (Glib::ustring fname) {
keyFile.set_double ("Color Management", "CBDLlevel123", rtSettings.level123_cbdl);
// keyFile.set_double ("Color Management", "Colortoningab", rtSettings.colortoningab);
// keyFile.set_double ("Color Management", "Decaction", rtSettings.decaction);
+ keyFile.set_string ("Color Management", "ClutsDirectory", clutsDir);
Glib::ArrayHandle bab = baBehav;
diff --git a/rtgui/options.h b/rtgui/options.h
index 7af267d43..c552b1e74 100644
--- a/rtgui/options.h
+++ b/rtgui/options.h
@@ -210,6 +210,8 @@ class Options {
bool UseIconNoText;
int whiteBalanceSpotSize;
+ Glib::ustring clutsDir;
+
// Performance options
int rgbDenoiseThreadLimit; // maximum number of threads for the denoising tool ; 0 = use the maximum available
diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc
index 1f9640c15..07b0722fa 100644
--- a/rtgui/paramsedited.cc
+++ b/rtgui/paramsedited.cc
@@ -340,6 +340,10 @@ void ParamsEdited::set (bool v) {
hsvequalizer.hcurve = v;
hsvequalizer.scurve = v;
hsvequalizer.vcurve = v;
+ filmSimulation.enabled = v;
+ filmSimulation.clutFilename = v;
+ filmSimulation.strength = v;
+
exif = v;
iptc = v;
}
@@ -666,6 +670,9 @@ void ParamsEdited::initFrom (const std::vector
hsvequalizer.hcurve = hsvequalizer.hcurve && p.hsvequalizer.hcurve == other.hsvequalizer.hcurve;
hsvequalizer.scurve = hsvequalizer.scurve && p.hsvequalizer.scurve == other.hsvequalizer.scurve;
hsvequalizer.vcurve = hsvequalizer.vcurve && p.hsvequalizer.vcurve == other.hsvequalizer.vcurve;
+ filmSimulation.enabled = filmSimulation.enabled && p.filmSimulation.enabled == other.filmSimulation.enabled;
+ filmSimulation.clutFilename = filmSimulation.clutFilename && p.filmSimulation.clutFilename == other.filmSimulation.clutFilename;
+ filmSimulation.strength = filmSimulation.strength && p.filmSimulation.strength == other.filmSimulation.strength;
// How the hell can we handle that???
// exif = exif && p.exif==other.exif
@@ -1001,6 +1008,11 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten
if (hsvequalizer.scurve) toEdit.hsvequalizer.scurve = mods.hsvequalizer.scurve;
if (hsvequalizer.vcurve) toEdit.hsvequalizer.vcurve = mods.hsvequalizer.vcurve;
+ if (filmSimulation.enabled) toEdit.filmSimulation.enabled = mods.filmSimulation.enabled;
+ if (filmSimulation.clutFilename) toEdit.filmSimulation.clutFilename = mods.filmSimulation.clutFilename;
+ if (filmSimulation.strength) toEdit.filmSimulation.strength = dontforceSet && options.baBehav[ADDSET_FILMSIMULATION_STRENGTH] ? toEdit.filmSimulation.strength + mods.filmSimulation.strength : mods.filmSimulation.strength;
+
+
// Exif changes are added to the existing ones
if (exif)
for (procparams::ExifPairs::const_iterator i=mods.exif.begin(); i!=mods.exif.end(); i++) {
diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h
index 84bbdbb2d..b86fce969 100644
--- a/rtgui/paramsedited.h
+++ b/rtgui/paramsedited.h
@@ -487,6 +487,13 @@ class HSVEqualizerParamsEdited {
bool vcurve;
};
+class FilmSimulationParamsEdited {
+public:
+ bool enabled;
+ bool clutFilename;
+ bool strength;
+};
+
class RAWParamsEdited {
public:
@@ -585,6 +592,7 @@ class ParamsEdited {
RAWParamsEdited raw;
DirPyrEqualizerParamsEdited dirpyrequalizer;
HSVEqualizerParamsEdited hsvequalizer;
+ FilmSimulationParamsEdited filmSimulation;
bool exif;
bool iptc;
diff --git a/rtgui/partialpastedlg.cc b/rtgui/partialpastedlg.cc
index c4a6cddb9..c4e35af9e 100644
--- a/rtgui/partialpastedlg.cc
+++ b/rtgui/partialpastedlg.cc
@@ -66,6 +66,7 @@ PartialPasteDlg::PartialPasteDlg (Glib::ustring title) {
blackwhite = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_CHANNELMIXERBW")));
dirpyrden = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DIRPYRDENOISE")));
hsveq = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_HSVEQUALIZER")));
+ filmSimulation = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTER_FILMSIMULATION")) );
rgbcurves = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RGBCURVES")));
colortoning = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_COLORTONING")));
@@ -151,6 +152,7 @@ PartialPasteDlg::PartialPasteDlg (Glib::ustring title) {
vboxes[2]->pack_start (*chmixer, Gtk::PACK_SHRINK, 2);
vboxes[2]->pack_start (*blackwhite, Gtk::PACK_SHRINK, 2);
vboxes[2]->pack_start (*hsveq, Gtk::PACK_SHRINK, 2);
+ vboxes[2]->pack_start (*filmSimulation, Gtk::PACK_SHRINK, 2);
vboxes[2]->pack_start (*rgbcurves, Gtk::PACK_SHRINK, 2);
vboxes[2]->pack_start (*colortoning, Gtk::PACK_SHRINK, 2);
@@ -271,6 +273,7 @@ PartialPasteDlg::PartialPasteDlg (Glib::ustring title) {
chmixerConn = chmixer->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true));
chmixerbwConn = blackwhite->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true));
hsveqConn = hsveq->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true));
+ filmSimulationConn = filmSimulation->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true));
rgbcurvesConn = rgbcurves->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true));
colortoningConn = colortoning->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true));
@@ -505,6 +508,7 @@ void PartialPasteDlg::colorToggled () {
chmixerConn.block (true);
chmixerbwConn.block (true);
hsveqConn.block (true);
+ filmSimulationConn.block (true);
rgbcurvesConn.block (true);
colortoningConn.block (true);
gamcsconn.block (true);
@@ -514,6 +518,7 @@ void PartialPasteDlg::colorToggled () {
chmixer->set_active (color->get_active ());
blackwhite->set_active (color->get_active ());
hsveq->set_active (color->get_active ());
+ filmSimulation->set_active (color->get_active ());
rgbcurves->set_active (color->get_active ());
colortoning->set_active(color->get_active ());
icm->set_active (color->get_active ());
@@ -522,6 +527,7 @@ void PartialPasteDlg::colorToggled () {
chmixerbwConn.block (false);
chmixerConn.block (false);
hsveqConn.block (false);
+ filmSimulationConn.block (false);
rgbcurvesConn.block (false);
colortoningConn.block (false);
gamcsconn.block (false);
@@ -638,6 +644,7 @@ void PartialPasteDlg::applyPaste (rtengine::procparams::ProcParams* dstPP, Param
if (!chmixer->get_active ()) filterPE.chmixer = falsePE.chmixer;
if (!blackwhite->get_active ()) filterPE.blackwhite = falsePE.blackwhite;
if (!hsveq->get_active ()) filterPE.hsvequalizer = falsePE.hsvequalizer;
+ if (!filmSimulation->get_active ()) filterPE.filmSimulation = falsePE.filmSimulation;
if (!rgbcurves->get_active ()) filterPE.rgbCurves = falsePE.rgbCurves;
if (!colortoning->get_active ()) filterPE.colorToning = falsePE.colorToning;
if (!icm->get_active ()) filterPE.icm = falsePE.icm;
diff --git a/rtgui/partialpastedlg.h b/rtgui/partialpastedlg.h
index 1c1d66156..64750523a 100644
--- a/rtgui/partialpastedlg.h
+++ b/rtgui/partialpastedlg.h
@@ -62,6 +62,7 @@ class PartialPasteDlg : public Gtk::Dialog {
Gtk::CheckButton* chmixer;
Gtk::CheckButton* blackwhite;
Gtk::CheckButton* hsveq;
+ Gtk::CheckButton* filmSimulation;
Gtk::CheckButton* rgbcurves;
Gtk::CheckButton* colortoning;
// Gtk::CheckButton* icm;
@@ -115,7 +116,7 @@ class PartialPasteDlg : public Gtk::Dialog {
sigc::connection wbConn, exposureConn, shConn, pcvignetteConn, gradientConn, labcurveConn, colorappearanceConn;
sigc::connection sharpenConn, gradsharpenConn, microcontrastConn, impdenConn, dirpyrdenConn, waveqConn, defringeConn, epdConn, dirpyreqConn;
- sigc::connection vibranceConn, chmixerConn, hsveqConn, rgbcurvesConn, chmixerbwConn, colortoningConn;
+ sigc::connection vibranceConn, chmixerConn, hsveqConn, rgbcurvesConn, chmixerbwConn, colortoningConn, filmSimulationConn;
sigc::connection distortionConn, cacorrConn, vignettingConn, lcpConn;
sigc::connection coarserotConn, finerotConn, cropConn, resizeConn, perspectiveConn, commonTransConn;
sigc::connection exifchConn, iptcConn, icmConn, gamcsconn;
diff --git a/rtgui/ppversion.h b/rtgui/ppversion.h
index ea50fcbaa..7e4148f05 100644
--- a/rtgui/ppversion.h
+++ b/rtgui/ppversion.h
@@ -2,38 +2,38 @@
#define _PPVERSION_
// This number has to be incremented whenever the PP3 file format is modified or the behaviour of a tool changes
-#define PPVERSION 320
+#define PPVERSION 321
#define PPVERSION_AEXP 301 //value of PPVERSION when auto exposure algorithm was modified
/*
Log of version changes
- 320 2014-07-02
- New [RAW Bayer] and [RAW X-Trans] sections, with some parameters transfered from [RAW] to [RAW Bayer]
- 316 2014-03-29
- [ColorToning] new tool for color toning
+ 321 2014-08-17
+ [Film Simulation] new tool using HALDCLUT files
+ 320 2014-07-02 (yes, same version number... this is an error due to a wrong version number set in comment of previous change)
+ New [RAW Bayer] and [RAW X-Trans] sections, with some parameters transfered from [RAW] to [RAW Bayer]
+ 320 2014-03-29
+ [ColorToning] new tool for color toning
319 2014-02-11
- Hue skin for Contrast by detail levels
+ Hue skin for Contrast by detail levels
318 2014-02-10
- Vignetting Correction bug makes hard transitions for positive Amount values, Issue 2241
+ Vignetting Correction bug makes hard transitions for positive Amount values, Issue 2241
317 2014-01-19
- changes to behaviour of LC curve, Issue 2209
+ changes to behaviour of LC curve, Issue 2209
315 2013-12-12
- add LH et HH curve to lab mode
+ add LH et HH curve to lab mode
313 2013-11-19
- addd CL curve to lab mode
+ add CL curve to lab mode
312 2013-11-08
- added numerous changes to [channel mixer]
+ added numerous changes to [channel mixer]
311 2013-11-07
- [Gradient] new tool (gradient/graduated filter
- [PCVignette] new tool (vignette filter)
-
+ [Gradient] new tool (gradient/graduated filter
+ [PCVignette] new tool (vignette filter)
310 2013-09-16
- Defringing /Threshold - changed calculation, issue 1801
-
+ Defringing /Threshold - changed calculation, issue 1801
307 2013-03-16
- [Perspective] Horizontal and Vertical changed from int to double
- added [Directional Pyramid Denoising] Method, Redchro, Bluechro
- added [RGB Curves] LumaMode
+ [Perspective] Horizontal and Vertical changed from int to double
+ added [Directional Pyramid Denoising] Method, Redchro, Bluechro
+ added [RGB Curves] LumaMode
*/
#endif
diff --git a/rtgui/preferences.cc b/rtgui/preferences.cc
index de14f7a0f..c58da0df9 100644
--- a/rtgui/preferences.cc
+++ b/rtgui/preferences.cc
@@ -242,6 +242,10 @@ Gtk::Widget* Preferences::getBatchProcPanel () {
appendBehavList (mi, M("TP_BWMIX_MIXC"), ADDSET_BLACKWHITE_HUES, false);
appendBehavList (mi, M("TP_BWMIX_GAMMA"), ADDSET_BLACKWHITE_GAMMA, false);
+ mi = behModel->append ();
+ mi->set_value( behavColumns.label, M("TP_FILMSIMULATION_LABEL") );
+ appendBehavList( mi, M( "TP_FILMSIMULATION_STRENGTH" ), ADDSET_FILMSIMULATION_STRENGTH, true );
+
mi = behModel->append ();
mi->set_value (behavColumns.label, M("TP_COLORTONING_LABEL"));
appendBehavList (mi, M("TP_COLORTONING_SPLITCOCO"),ADDSET_COLORTONING_SPLIT , true);
@@ -462,6 +466,19 @@ Gtk::Widget* Preferences::getProcParamsPanel () {
//ffconn = flatFieldDir->signal_file_set().connect ( sigc::mem_fun(*this, &Preferences::flatFieldChanged), true);
ffconn = flatFieldDir->signal_current_folder_changed().connect ( sigc::mem_fun(*this, &Preferences::flatFieldChanged), true);
+ //Cluts Dir
+ Gtk::Frame* clutsDirFrame = Gtk::manage (new Gtk::Frame (M("PREFERENCES_FILMSIMULATION")) );
+ Gtk::HBox* clutsDirBox = Gtk::manage (new Gtk::HBox ());
+ clutsDir = Gtk::manage(new Gtk::FileChooserButton(M("PREFERENCES_CLUTSDIR"), Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER));
+ Gtk::Label *clutsDirLabel = Gtk::manage(new Gtk::Label(M("PREFERENCES_CLUTSDIR") + ":"));
+ Gtk::Label* clutsRestartNeeded = Gtk::manage( new Gtk::Label (Glib::ustring(" (") + M("PREFERENCES_APPLNEXTSTARTUP") + ")") );
+ clutsDirBox->pack_start( *clutsDirLabel, Gtk::PACK_SHRINK, 4 );
+ clutsDirBox->pack_start( *clutsDir );
+ clutsDirBox->pack_start( *clutsRestartNeeded, Gtk::PACK_SHRINK, 4 );
+ clutsDirBox->set_border_width( 4 );
+ clutsDirFrame->add( *clutsDirBox );
+ mvbpp->pack_start( *clutsDirFrame, Gtk::PACK_SHRINK, 4 );
+
Gtk::Frame* fmd = Gtk::manage (new Gtk::Frame (M("PREFERENCES_METADATA")));
Gtk::VBox* vbmd = Gtk::manage (new Gtk::VBox ());
ckbTunnelMetaData = Gtk::manage (new Gtk::CheckButton (M("PREFERENCES_TUNNELMETADATA")));
@@ -1222,6 +1239,8 @@ void Preferences::storePreferences () {
moptions.rtSettings.darkFramesPath = darkFrameDir->get_filename();
moptions.rtSettings.flatFieldsPath = flatFieldDir->get_filename();
+ moptions.clutsDir = clutsDir->get_filename();
+
moptions.baBehav.resize (ADDSET_PARAM_NUM);
for (Gtk::TreeIter sections=behModel->children().begin(); sections!=behModel->children().end(); sections++)
for (Gtk::TreeIter adjs=sections->children().begin(); adjs!=sections->children().end(); adjs++)
@@ -1384,6 +1403,8 @@ void Preferences::fillPreferences () {
flatFieldDir->set_current_folder( moptions.rtSettings.flatFieldsPath );
flatFieldChanged ();
+ clutsDir->set_current_folder( moptions.clutsDir );
+
addc.block (true);
setc.block (true);
if (moptions.baBehav.size() == ADDSET_PARAM_NUM) {
diff --git a/rtgui/preferences.h b/rtgui/preferences.h
index 47f888bdb..bbebda595 100644
--- a/rtgui/preferences.h
+++ b/rtgui/preferences.h
@@ -72,6 +72,7 @@ class Preferences : public Gtk::Dialog, public ProfileStoreListener {
Gtk::RadioButton* edOther;
Gtk::FileChooserButton* darkFrameDir;
Gtk::FileChooserButton* flatFieldDir;
+ Gtk::FileChooserButton* clutsDir;
Gtk::Label *dfLabel;
Gtk::Label *ffLabel;
diff --git a/rtgui/toolpanelcoord.cc b/rtgui/toolpanelcoord.cc
index 67f25ab27..fe1b39240 100644
--- a/rtgui/toolpanelcoord.cc
+++ b/rtgui/toolpanelcoord.cc
@@ -73,6 +73,7 @@ ToolPanelCoordinator::ToolPanelCoordinator () : ipc(NULL) {
iptcpanel = Gtk::manage (new IPTCPanel ());
dirpyrequalizer = Gtk::manage (new DirPyrEqualizer ());
hsvequalizer = Gtk::manage (new HSVEqualizer ());
+ filmSimulation = Gtk::manage (new FilmSimulation ());
sensorbayer = Gtk::manage (new SensorBayer ());
sensorxtrans = Gtk::manage (new SensorXTrans ());
bayerprocess = Gtk::manage (new BayerProcess ());
@@ -105,6 +106,7 @@ ToolPanelCoordinator::ToolPanelCoordinator () : ipc(NULL) {
addPanel (detailsPanel, sharpenEdge, M("TP_SHARPENEDGE_LABEL"), true); toolPanels.push_back (sharpenEdge);
addPanel (detailsPanel, sharpenMicro, M("TP_SHARPENMICRO_LABEL"), true); toolPanels.push_back (sharpenMicro);
addPanel (colorPanel, hsvequalizer, M("TP_HSVEQUALIZER_LABEL")); toolPanels.push_back (hsvequalizer);
+ addPanel (colorPanel, filmSimulation, M("TP_FILMSIMULATION_LABEL")); toolPanels.push_back (filmSimulation);
addPanel (colorPanel, rgbcurves, M("TP_RGBCURVES_LABEL")); toolPanels.push_back (rgbcurves);
addPanel (colorPanel, colortoning, M("TP_COLORTONING_LABEL")); toolPanels.push_back (colortoning);
addPanel (exposurePanel, epd, M("TP_EPD_LABEL"), true); toolPanels.push_back (epd);
diff --git a/rtgui/toolpanelcoord.h b/rtgui/toolpanelcoord.h
index cb0adcfdf..eadcc3ce0 100644
--- a/rtgui/toolpanelcoord.h
+++ b/rtgui/toolpanelcoord.h
@@ -75,6 +75,7 @@
#include "sharpenedge.h"
#include "rgbcurves.h"
#include "colortoning.h"
+#include "filmsimulation.h"
class ImageEditorCoordinator;
@@ -124,6 +125,7 @@ class ToolPanelCoordinator : public ToolPanelListener,
ColorToning* colortoning;
DirPyrEqualizer* dirpyrequalizer;
HSVEqualizer* hsvequalizer;
+ FilmSimulation *filmSimulation;
SensorBayer * sensorbayer;
SensorXTrans * sensorxtrans;
BayerProcess* bayerprocess;
|