diff --git a/rtdata/languages/Catala b/rtdata/languages/Catala
index 4bc691a65..b464677d0 100644
--- a/rtdata/languages/Catala
+++ b/rtdata/languages/Catala
@@ -580,7 +580,7 @@ PREFERENCES_SINGLETABVERTAB;Mode simple treball, vistes verticals
PREFERENCES_SND_BATCHQUEUEDONE;Procs. de la cua fets
PREFERENCES_SND_HELP;Poseu el path o bé no res (res=silenci). A Windows useu "SystemDefault", "SystemAsterisk" etc. pels sons del sistema.
PREFERENCES_SND_LNGEDITPROCDONE;Process. d'editor fet
-PREFERENCES_SND_TRESHOLDSECS;després d'uns segons
+PREFERENCES_SND_THRESHOLDSECS;després d'uns segons
PREFERENCES_STARTUPIMDIR;Directori inicial de les imatges
PREFERENCES_TAB_BROWSER;Gestor de fitxers
PREFERENCES_TAB_COLORMGR;Gestió del color
@@ -1325,6 +1325,8 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness
!HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius
!HISTORY_MSG_METADATA_MODE;Metadata copy mode
+!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
+!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
@@ -1865,6 +1867,13 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!TP_PREPROCESS_DEADPIXFILT_TOOLTIP;Tries to suppress dead pixels.
!TP_PREPROCESS_HOTPIXFILT;Hot pixel filter
!TP_PREPROCESS_HOTPIXFILT_TOOLTIP;Tries to suppress hot pixels.
+!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
+!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
!TP_PRSHARPENING_LABEL;Post-Resize Sharpening
!TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions.
!TP_RAWCACORR_CASTR;Strength
diff --git a/rtdata/languages/Chinese (Simplified) b/rtdata/languages/Chinese (Simplified)
index b73ec1980..2c80e86b3 100644
--- a/rtdata/languages/Chinese (Simplified)
+++ b/rtdata/languages/Chinese (Simplified)
@@ -672,7 +672,7 @@ PREFERENCES_SMA;小 (250x287)
PREFERENCES_SND_BATCHQUEUEDONE;队列处理完成
PREFERENCES_SND_HELP;输入完整路径来指定声音文件, 或者留空表示无声 \nWindows系统声音可以使用 "SystemDefault", "SystemAsterisk" 等 Linux则可以使用 "complete", "window-attention" 等
PREFERENCES_SND_LNGEDITPROCDONE;编辑器处理完成
-PREFERENCES_SND_TRESHOLDSECS;几秒之后
+PREFERENCES_SND_THRESHOLDSECS;几秒之后
PREFERENCES_STARTUPIMDIR;启动时路径
PREFERENCES_STDAUT;标准
PREFERENCES_TAB_BROWSER;文件浏览器
@@ -1435,6 +1435,8 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness
!HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius
!HISTORY_MSG_METADATA_MODE;Metadata copy mode
+!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
+!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -1830,6 +1832,13 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!TP_PREPROCESS_GREENEQUIL;Green equilibration
!TP_PREPROCESS_HOTPIXFILT;Hot pixel filter
!TP_PREPROCESS_HOTPIXFILT_TOOLTIP;Tries to suppress hot pixels.
+!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
+!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
!TP_PRSHARPENING_LABEL;Post-Resize Sharpening
!TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions.
!TP_RAWCACORR_CASTR;Strength
diff --git a/rtdata/languages/Chinese (Traditional) b/rtdata/languages/Chinese (Traditional)
index 26629437d..0ee9312dd 100644
--- a/rtdata/languages/Chinese (Traditional)
+++ b/rtdata/languages/Chinese (Traditional)
@@ -987,6 +987,8 @@ TP_WBALANCE_TEMPERATURE;色溫
!HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness
!HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius
!HISTORY_MSG_METADATA_MODE;Metadata copy mode
+!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
+!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
@@ -1282,7 +1284,7 @@ TP_WBALANCE_TEMPERATURE;色溫
!PREFERENCES_SND_BATCHQUEUEDONE;Queue processing done
!PREFERENCES_SND_HELP;Enter a full file path to set a sound, or leave blank for no sound.\nFor system sounds on Windows use "SystemDefault", "SystemAsterisk" etc., and on Linux use "complete", "window-attention" etc.
!PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done
-!PREFERENCES_SND_TRESHOLDSECS;After seconds
+!PREFERENCES_SND_THRESHOLDSECS;After seconds
!PREFERENCES_STDAUT;Standard
!PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules
!PREFERENCES_TAB_PERFORMANCE;Performance & Quality
@@ -1778,7 +1780,14 @@ TP_WBALANCE_TEMPERATURE;色溫
!TP_PREPROCESS_HOTPIXFILT_TOOLTIP;Tries to suppress hot pixels.
!TP_PREPROCESS_LABEL;Preprocessing
!TP_PREPROCESS_LINEDENOISE;Line noise filter
+!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
!TP_PREPROCESS_NO_FOUND;None found
+!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
!TP_PRSHARPENING_LABEL;Post-Resize Sharpening
!TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions.
!TP_RAWCACORR_AUTO;Auto-correction
diff --git a/rtdata/languages/Czech b/rtdata/languages/Czech
index 66440ad06..1b84d41a8 100644
--- a/rtdata/languages/Czech
+++ b/rtdata/languages/Czech
@@ -1183,7 +1183,7 @@ PREFERENCES_SMA;Malá (250x287)
PREFERENCES_SND_BATCHQUEUEDONE;Zpracování fronty dokončeno
PREFERENCES_SND_HELP;Vložte cestu k souboru pro nastavení zvuku nebo ponechte prázdné (bez zvuku).\nVe Windows zadejte "SystemDefault", "SystemAsterisk" a podobně.\nNa Linuxu použijte "complete", "window-attention" a další.
PREFERENCES_SND_LNGEDITPROCDONE;Zpracování v editoru dokončeno
-PREFERENCES_SND_TRESHOLDSECS;Po sekundách
+PREFERENCES_SND_THRESHOLDSECS;Po sekundách
PREFERENCES_STARTUPIMDIR;Složka obrázků při spuštění
PREFERENCES_STDAUT;Běžný
PREFERENCES_TAB_BROWSER;Prohlížeč souborů
@@ -2244,3 +2244,16 @@ ZOOMPANEL_ZOOMFITSCREEN;Přizpůsobit celý obrázek obrazovce\nZkratka: Alt<
ZOOMPANEL_ZOOMIN;Přiblížit\nZkratka: +
ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: -
+!!!!!!!!!!!!!!!!!!!!!!!!!
+! Untranslated keys follow; remove the ! prefix after an entry is translated.
+!!!!!!!!!!!!!!!!!!!!!!!!!
+
+!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
+!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
+!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
diff --git a/rtdata/languages/Dansk b/rtdata/languages/Dansk
index 88c124dc5..f733bac21 100644
--- a/rtdata/languages/Dansk
+++ b/rtdata/languages/Dansk
@@ -983,6 +983,8 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness
!HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius
!HISTORY_MSG_METADATA_MODE;Metadata copy mode
+!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
+!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
@@ -1280,7 +1282,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!PREFERENCES_SND_BATCHQUEUEDONE;Queue processing done
!PREFERENCES_SND_HELP;Enter a full file path to set a sound, or leave blank for no sound.\nFor system sounds on Windows use "SystemDefault", "SystemAsterisk" etc., and on Linux use "complete", "window-attention" etc.
!PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done
-!PREFERENCES_SND_TRESHOLDSECS;After seconds
+!PREFERENCES_SND_THRESHOLDSECS;After seconds
!PREFERENCES_STDAUT;Standard
!PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules
!PREFERENCES_TAB_PERFORMANCE;Performance & Quality
@@ -1776,7 +1778,14 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!TP_PREPROCESS_HOTPIXFILT_TOOLTIP;Tries to suppress hot pixels.
!TP_PREPROCESS_LABEL;Preprocessing
!TP_PREPROCESS_LINEDENOISE;Line noise filter
+!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
!TP_PREPROCESS_NO_FOUND;None found
+!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
!TP_PRSHARPENING_LABEL;Post-Resize Sharpening
!TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions.
!TP_RAWCACORR_AUTO;Auto-correction
diff --git a/rtdata/languages/Deutsch b/rtdata/languages/Deutsch
index ddc6d0175..698f4a3d0 100644
--- a/rtdata/languages/Deutsch
+++ b/rtdata/languages/Deutsch
@@ -1198,7 +1198,7 @@ PREFERENCES_SMA;Klein (250x287)
PREFERENCES_SND_BATCHQUEUEDONE;Warteschlange abgearbeitet
PREFERENCES_SND_HELP;Geben Sie einen Pfad zu einer Sounddatei oder einen Systemklang ein.\n\nBeispiel Systemklänge:\nWindows: SystemDefault, SystemAsterisk ...\nLinux: complete, window-attention ...\n
PREFERENCES_SND_LNGEDITPROCDONE;Bearbeitung abgeschlossen
-PREFERENCES_SND_TRESHOLDSECS;Verzögerung in Sekunden
+PREFERENCES_SND_THRESHOLDSECS;Verzögerung in Sekunden
PREFERENCES_STARTUPIMDIR;Bildverzeichnis beim Programmstart
PREFERENCES_STDAUT;Standard
PREFERENCES_TAB_BROWSER;Dateiverwaltung
@@ -2261,3 +2261,16 @@ ZOOMPANEL_ZOOMFITSCREEN;An Bildschirm anpassen\nTaste: Alt + f
ZOOMPANEL_ZOOMIN;Hineinzoomen\nTaste: +
ZOOMPANEL_ZOOMOUT;Herauszoomen\nTaste: -
+!!!!!!!!!!!!!!!!!!!!!!!!!
+! Untranslated keys follow; remove the ! prefix after an entry is translated.
+!!!!!!!!!!!!!!!!!!!!!!!!!
+
+!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
+!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
+!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
diff --git a/rtdata/languages/English (UK) b/rtdata/languages/English (UK)
index e634937fa..b9d786e7d 100644
--- a/rtdata/languages/English (UK)
+++ b/rtdata/languages/English (UK)
@@ -816,6 +816,8 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness
!HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius
!HISTORY_MSG_METADATA_MODE;Metadata copy mode
+!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
+!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor
!HISTORY_NEWSNAPSHOT;Add
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
@@ -1209,7 +1211,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!PREFERENCES_SND_BATCHQUEUEDONE;Queue processing done
!PREFERENCES_SND_HELP;Enter a full file path to set a sound, or leave blank for no sound.\nFor system sounds on Windows use "SystemDefault", "SystemAsterisk" etc., and on Linux use "complete", "window-attention" etc.
!PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done
-!PREFERENCES_SND_TRESHOLDSECS;After seconds
+!PREFERENCES_SND_THRESHOLDSECS;After seconds
!PREFERENCES_STARTUPIMDIR;Image Directory at Startup
!PREFERENCES_STDAUT;Standard
!PREFERENCES_TAB_BROWSER;File Browser
@@ -1736,7 +1738,14 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!TP_PREPROCESS_HOTPIXFILT_TOOLTIP;Tries to suppress hot pixels.
!TP_PREPROCESS_LABEL;Preprocessing
!TP_PREPROCESS_LINEDENOISE;Line noise filter
+!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
!TP_PREPROCESS_NO_FOUND;None found
+!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
!TP_PRSHARPENING_LABEL;Post-Resize Sharpening
!TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions.
!TP_RAWCACORR_AUTO;Auto-correction
diff --git a/rtdata/languages/English (US) b/rtdata/languages/English (US)
index 2d2693de6..c5fce733d 100644
--- a/rtdata/languages/English (US)
+++ b/rtdata/languages/English (US)
@@ -732,6 +732,8 @@
!HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness
!HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius
!HISTORY_MSG_METADATA_MODE;Metadata copy mode
+!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
+!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor
!HISTORY_NEWSNAPSHOT;Add
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
@@ -1145,7 +1147,7 @@
!PREFERENCES_SND_BATCHQUEUEDONE;Queue processing done
!PREFERENCES_SND_HELP;Enter a full file path to set a sound, or leave blank for no sound.\nFor system sounds on Windows use "SystemDefault", "SystemAsterisk" etc., and on Linux use "complete", "window-attention" etc.
!PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done
-!PREFERENCES_SND_TRESHOLDSECS;After seconds
+!PREFERENCES_SND_THRESHOLDSECS;After seconds
!PREFERENCES_STARTUPIMDIR;Image Directory at Startup
!PREFERENCES_STDAUT;Standard
!PREFERENCES_TAB_BROWSER;File Browser
@@ -1725,7 +1727,14 @@
!TP_PREPROCESS_HOTPIXFILT_TOOLTIP;Tries to suppress hot pixels.
!TP_PREPROCESS_LABEL;Preprocessing
!TP_PREPROCESS_LINEDENOISE;Line noise filter
+!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
!TP_PREPROCESS_NO_FOUND;None found
+!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
!TP_PRSHARPENING_LABEL;Post-Resize Sharpening
!TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions.
!TP_RAWCACORR_AUTO;Auto-correction
diff --git a/rtdata/languages/Espanol b/rtdata/languages/Espanol
index dc78f321e..5be582205 100644
--- a/rtdata/languages/Espanol
+++ b/rtdata/languages/Espanol
@@ -840,7 +840,7 @@ PREFERENCES_SINGLETABVERTAB;Modo Editor de pestaña única, pestañas verticales
PREFERENCES_SND_BATCHQUEUEDONE;Trabajos en cola finalizados
PREFERENCES_SND_HELP;Introducir el path o dejar en blanco (sin sonido). En Windows, usar "SystemDefault", "SystemAsterisk" etc. para los sonidos del sistema\nEn Linux use "complete", "window-attention" etc. para los sonidos del sistema.
PREFERENCES_SND_LNGEDITPROCDONE;Procesado del editor terminado
-PREFERENCES_SND_TRESHOLDSECS;después de seg.
+PREFERENCES_SND_THRESHOLDSECS;después de seg.
PREFERENCES_STARTUPIMDIR;Carpeta de imágenes en el arranque
PREFERENCES_TAB_BROWSER;Explorador de archivos
PREFERENCES_TAB_COLORMGR;Gestión del color
@@ -1716,6 +1716,8 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: -
!HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness
!HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius
!HISTORY_MSG_METADATA_MODE;Metadata copy mode
+!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
+!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -1953,6 +1955,13 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: -
!TP_METADATA_STRIP;Strip all metadata
!TP_METADATA_TUNNEL;Copy unchanged
!TP_NEUTRAL;Reset
+!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
+!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
!TP_PRSHARPENING_LABEL;Post-Resize Sharpening
!TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions.
!TP_RAWCACORR_CASTR;Strength
diff --git a/rtdata/languages/Euskara b/rtdata/languages/Euskara
index a17262d45..bd2e1079d 100644
--- a/rtdata/languages/Euskara
+++ b/rtdata/languages/Euskara
@@ -983,6 +983,8 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness
!HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius
!HISTORY_MSG_METADATA_MODE;Metadata copy mode
+!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
+!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
@@ -1280,7 +1282,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!PREFERENCES_SND_BATCHQUEUEDONE;Queue processing done
!PREFERENCES_SND_HELP;Enter a full file path to set a sound, or leave blank for no sound.\nFor system sounds on Windows use "SystemDefault", "SystemAsterisk" etc., and on Linux use "complete", "window-attention" etc.
!PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done
-!PREFERENCES_SND_TRESHOLDSECS;After seconds
+!PREFERENCES_SND_THRESHOLDSECS;After seconds
!PREFERENCES_STDAUT;Standard
!PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules
!PREFERENCES_TAB_PERFORMANCE;Performance & Quality
@@ -1776,7 +1778,14 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!TP_PREPROCESS_HOTPIXFILT_TOOLTIP;Tries to suppress hot pixels.
!TP_PREPROCESS_LABEL;Preprocessing
!TP_PREPROCESS_LINEDENOISE;Line noise filter
+!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
!TP_PREPROCESS_NO_FOUND;None found
+!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
!TP_PRSHARPENING_LABEL;Post-Resize Sharpening
!TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions.
!TP_RAWCACORR_AUTO;Auto-correction
diff --git a/rtdata/languages/Francais b/rtdata/languages/Francais
index 3ea77ab78..45a29a40f 100644
--- a/rtdata/languages/Francais
+++ b/rtdata/languages/Francais
@@ -1145,7 +1145,7 @@ PREFERENCES_SMA;Petit (250x287)
PREFERENCES_SND_BATCHQUEUEDONE;File de traitement terminée
PREFERENCES_SND_HELP;Saisissez un chemin de fichier ou rien du tout (pour ne pas avoir de son). Pour Windows,\nsaisissez "SystemDefault", "SystemAsterisk" etc. pour utiliser les sons systèmes.
PREFERENCES_SND_LNGEDITPROCDONE;Traitement de la zone de prévisualisation terminé
-PREFERENCES_SND_TRESHOLDSECS;après (s)
+PREFERENCES_SND_THRESHOLDSECS;après (s)
PREFERENCES_STARTUPIMDIR;Répertoire Image au démarrage
PREFERENCES_STDAUT;Standard
PREFERENCES_TAB_BROWSER;Navigateur de fichiers
@@ -2209,3 +2209,16 @@ ZOOMPANEL_ZOOMFITSCREEN;Affiche l'image entière\nRaccourci: Alt-f
ZOOMPANEL_ZOOMIN;Zoom Avant\nRaccourci: +
ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: -
+!!!!!!!!!!!!!!!!!!!!!!!!!
+! Untranslated keys follow; remove the ! prefix after an entry is translated.
+!!!!!!!!!!!!!!!!!!!!!!!!!
+
+!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
+!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
+!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
diff --git a/rtdata/languages/Greek b/rtdata/languages/Greek
index cdb1b71a2..59acc55aa 100644
--- a/rtdata/languages/Greek
+++ b/rtdata/languages/Greek
@@ -982,6 +982,8 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness
!HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius
!HISTORY_MSG_METADATA_MODE;Metadata copy mode
+!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
+!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
@@ -1279,7 +1281,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!PREFERENCES_SND_BATCHQUEUEDONE;Queue processing done
!PREFERENCES_SND_HELP;Enter a full file path to set a sound, or leave blank for no sound.\nFor system sounds on Windows use "SystemDefault", "SystemAsterisk" etc., and on Linux use "complete", "window-attention" etc.
!PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done
-!PREFERENCES_SND_TRESHOLDSECS;After seconds
+!PREFERENCES_SND_THRESHOLDSECS;After seconds
!PREFERENCES_STDAUT;Standard
!PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules
!PREFERENCES_TAB_PERFORMANCE;Performance & Quality
@@ -1775,7 +1777,14 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!TP_PREPROCESS_HOTPIXFILT_TOOLTIP;Tries to suppress hot pixels.
!TP_PREPROCESS_LABEL;Preprocessing
!TP_PREPROCESS_LINEDENOISE;Line noise filter
+!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
!TP_PREPROCESS_NO_FOUND;None found
+!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
!TP_PRSHARPENING_LABEL;Post-Resize Sharpening
!TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions.
!TP_RAWCACORR_AUTO;Auto-correction
diff --git a/rtdata/languages/Hebrew b/rtdata/languages/Hebrew
index 5dc24ae51..b14c49281 100644
--- a/rtdata/languages/Hebrew
+++ b/rtdata/languages/Hebrew
@@ -983,6 +983,8 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness
!HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius
!HISTORY_MSG_METADATA_MODE;Metadata copy mode
+!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
+!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
@@ -1280,7 +1282,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!PREFERENCES_SND_BATCHQUEUEDONE;Queue processing done
!PREFERENCES_SND_HELP;Enter a full file path to set a sound, or leave blank for no sound.\nFor system sounds on Windows use "SystemDefault", "SystemAsterisk" etc., and on Linux use "complete", "window-attention" etc.
!PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done
-!PREFERENCES_SND_TRESHOLDSECS;After seconds
+!PREFERENCES_SND_THRESHOLDSECS;After seconds
!PREFERENCES_STDAUT;Standard
!PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules
!PREFERENCES_TAB_PERFORMANCE;Performance & Quality
@@ -1776,7 +1778,14 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!TP_PREPROCESS_HOTPIXFILT_TOOLTIP;Tries to suppress hot pixels.
!TP_PREPROCESS_LABEL;Preprocessing
!TP_PREPROCESS_LINEDENOISE;Line noise filter
+!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
!TP_PREPROCESS_NO_FOUND;None found
+!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
!TP_PRSHARPENING_LABEL;Post-Resize Sharpening
!TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions.
!TP_RAWCACORR_AUTO;Auto-correction
diff --git a/rtdata/languages/Italiano b/rtdata/languages/Italiano
index 4615a1c62..8a57cdea1 100644
--- a/rtdata/languages/Italiano
+++ b/rtdata/languages/Italiano
@@ -744,7 +744,7 @@ PREFERENCES_SINGLETABVERTAB;Modalità a Scheda Singola, schede verticali
PREFERENCES_SND_BATCHQUEUEDONE;Al termine dell'elaborazione della coda
PREFERENCES_SND_HELP;Inserire un percorso oppure nulla (per non avere suoni).\nSu Windows usa "SystemDefault", "SystemAsterisk" ecc. per i suoni di sistema.\nSu Linux usa "complete", "window-attention" ecc. per i suoni di sistema.
PREFERENCES_SND_LNGEDITPROCDONE;Al termine delle operazioni di modifica
-PREFERENCES_SND_TRESHOLDSECS;dopo un tempo in secondi
+PREFERENCES_SND_THRESHOLDSECS;dopo un tempo in secondi
PREFERENCES_STARTUPIMDIR;Cartella delle immagini all'avvio
PREFERENCES_TAB_BROWSER;Navigatore
PREFERENCES_TAB_COLORMGR;Gestione Colore
@@ -1591,6 +1591,8 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: -
!HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness
!HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius
!HISTORY_MSG_METADATA_MODE;Metadata copy mode
+!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
+!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -1883,6 +1885,13 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: -
!TP_PREPROCESS_DEADPIXFILT_TOOLTIP;Tries to suppress dead pixels.
!TP_PREPROCESS_HOTPIXFILT;Hot pixel filter
!TP_PREPROCESS_HOTPIXFILT_TOOLTIP;Tries to suppress hot pixels.
+!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
+!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
!TP_PRSHARPENING_LABEL;Post-Resize Sharpening
!TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions.
!TP_RAWCACORR_CASTR;Strength
diff --git a/rtdata/languages/Japanese b/rtdata/languages/Japanese
index bc6daac04..5dbe1ad54 100644
--- a/rtdata/languages/Japanese
+++ b/rtdata/languages/Japanese
@@ -996,7 +996,7 @@ PREFERENCES_SMA;小 (250x287)
PREFERENCES_SND_BATCHQUEUEDONE;キュー処理 終了
PREFERENCES_SND_HELP;ファイルパスを入力 または空欄(無音).\nWindowsはシステムサウンドの "SystemDefault", "SystemAsterisk"など..\nLinuxはシステムサウンドの "complete", "window-attention"などを使用します
PREFERENCES_SND_LNGEDITPROCDONE;編集処理 終了
-PREFERENCES_SND_TRESHOLDSECS;秒後
+PREFERENCES_SND_THRESHOLDSECS;秒後
PREFERENCES_STARTUPIMDIR;起動時の画像・ディレクトリ
PREFERENCES_STDAUT;標準
PREFERENCES_TAB_BROWSER;ファイルブラウザ
@@ -1962,6 +1962,8 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: -
!HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness
!HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius
!HISTORY_MSG_METADATA_MODE;Metadata copy mode
+!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
+!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -2094,6 +2096,13 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: -
!TP_METADATA_STRIP;Strip all metadata
!TP_METADATA_TUNNEL;Copy unchanged
!TP_NEUTRAL;Reset
+!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
+!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
!TP_RAWCACORR_CASTR;Strength
!TP_RAW_1PASSMEDIUM;1-Pass (Medium)
!TP_RAW_3PASSBEST;3-Pass (Best)
diff --git a/rtdata/languages/Latvian b/rtdata/languages/Latvian
index 057a6d699..9e08cfb9d 100644
--- a/rtdata/languages/Latvian
+++ b/rtdata/languages/Latvian
@@ -983,6 +983,8 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness
!HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius
!HISTORY_MSG_METADATA_MODE;Metadata copy mode
+!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
+!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
@@ -1280,7 +1282,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!PREFERENCES_SND_BATCHQUEUEDONE;Queue processing done
!PREFERENCES_SND_HELP;Enter a full file path to set a sound, or leave blank for no sound.\nFor system sounds on Windows use "SystemDefault", "SystemAsterisk" etc., and on Linux use "complete", "window-attention" etc.
!PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done
-!PREFERENCES_SND_TRESHOLDSECS;After seconds
+!PREFERENCES_SND_THRESHOLDSECS;After seconds
!PREFERENCES_STDAUT;Standard
!PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules
!PREFERENCES_TAB_PERFORMANCE;Performance & Quality
@@ -1776,7 +1778,14 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!TP_PREPROCESS_HOTPIXFILT_TOOLTIP;Tries to suppress hot pixels.
!TP_PREPROCESS_LABEL;Preprocessing
!TP_PREPROCESS_LINEDENOISE;Line noise filter
+!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
!TP_PREPROCESS_NO_FOUND;None found
+!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
!TP_PRSHARPENING_LABEL;Post-Resize Sharpening
!TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions.
!TP_RAWCACORR_AUTO;Auto-correction
diff --git a/rtdata/languages/Magyar b/rtdata/languages/Magyar
index c8cbc100f..e871044ce 100644
--- a/rtdata/languages/Magyar
+++ b/rtdata/languages/Magyar
@@ -563,7 +563,7 @@ PREFERENCES_SINGLETABVERTAB;Egyetlen fül mód, függőleges előnézeti képek
PREFERENCES_SND_BATCHQUEUEDONE;Feldolgozási sor végén
PREFERENCES_SND_HELP;Állomány elérése, vagy hagyd üresen (ekkor nincs hang). Windows-on használd a "SystemDefault", "SystemAsterisk", stb. stringeket a rendszerhangokhoz.
PREFERENCES_SND_LNGEDITPROCDONE;Amikor a képszerkesztés végződik
-PREFERENCES_SND_TRESHOLDSECS;másodperc után
+PREFERENCES_SND_THRESHOLDSECS;másodperc után
PREFERENCES_STARTUPIMDIR;Képek könyvtára induláskor
PREFERENCES_TAB_BROWSER;Fájl böngésző
PREFERENCES_TAB_COLORMGR;Színkezelés
@@ -1256,6 +1256,8 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness
!HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius
!HISTORY_MSG_METADATA_MODE;Metadata copy mode
+!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
+!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
@@ -1858,6 +1860,13 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!TP_PREPROCESS_DEADPIXFILT_TOOLTIP;Tries to suppress dead pixels.
!TP_PREPROCESS_HOTPIXFILT;Hot pixel filter
!TP_PREPROCESS_HOTPIXFILT_TOOLTIP;Tries to suppress hot pixels.
+!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
+!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
!TP_PRSHARPENING_LABEL;Post-Resize Sharpening
!TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions.
!TP_RAWCACORR_CASTR;Strength
diff --git a/rtdata/languages/Nederlands b/rtdata/languages/Nederlands
index 1f317a7fa..3a90ece7c 100644
--- a/rtdata/languages/Nederlands
+++ b/rtdata/languages/Nederlands
@@ -1092,7 +1092,7 @@ PREFERENCES_SMA;Klein (250x287)
PREFERENCES_SND_BATCHQUEUEDONE;Verwerkingsrij klaar
PREFERENCES_SND_HELP;Typ bestandsnaam (of niets: geen geluid).\nWindows: gebruik 'SystemDefault', 'SystemAsterisk', etc. voor systeemgeluiden.\nLinux: gebruik "complete", "window-attention" etc. voor systeemgeluiden
PREFERENCES_SND_LNGEDITPROCDONE;Bewerking klaar
-PREFERENCES_SND_TRESHOLDSECS;na seconden
+PREFERENCES_SND_THRESHOLDSECS;na seconden
PREFERENCES_STARTUPIMDIR;Standaardmap bij opstarten
PREFERENCES_STDAUT;Standaard
PREFERENCES_TAB_BROWSER;Bestandsnavigator
@@ -2154,6 +2154,8 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: -
!HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness
!HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius
!HISTORY_MSG_METADATA_MODE;Metadata copy mode
+!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
+!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor
!LENSPROFILE_CORRECTION_AUTOMATCH;Auto-matched correction parameters
!LENSPROFILE_CORRECTION_LCPFILE;LCP File
@@ -2219,6 +2221,13 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: -
!TP_METADATA_MODE;Metadata copy mode
!TP_METADATA_STRIP;Strip all metadata
!TP_METADATA_TUNNEL;Copy unchanged
+!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
+!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts.
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Equalize per channel
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Enabled: Equalize the RGB channels individually.\nDisabled: Use same equalization factor for all channels.
diff --git a/rtdata/languages/Norsk BM b/rtdata/languages/Norsk BM
index 7d8823afc..8164be831 100644
--- a/rtdata/languages/Norsk BM
+++ b/rtdata/languages/Norsk BM
@@ -982,6 +982,8 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness
!HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius
!HISTORY_MSG_METADATA_MODE;Metadata copy mode
+!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
+!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
@@ -1279,7 +1281,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!PREFERENCES_SND_BATCHQUEUEDONE;Queue processing done
!PREFERENCES_SND_HELP;Enter a full file path to set a sound, or leave blank for no sound.\nFor system sounds on Windows use "SystemDefault", "SystemAsterisk" etc., and on Linux use "complete", "window-attention" etc.
!PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done
-!PREFERENCES_SND_TRESHOLDSECS;After seconds
+!PREFERENCES_SND_THRESHOLDSECS;After seconds
!PREFERENCES_STDAUT;Standard
!PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules
!PREFERENCES_TAB_PERFORMANCE;Performance & Quality
@@ -1775,7 +1777,14 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!TP_PREPROCESS_HOTPIXFILT_TOOLTIP;Tries to suppress hot pixels.
!TP_PREPROCESS_LABEL;Preprocessing
!TP_PREPROCESS_LINEDENOISE;Line noise filter
+!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
!TP_PREPROCESS_NO_FOUND;None found
+!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
!TP_PRSHARPENING_LABEL;Post-Resize Sharpening
!TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions.
!TP_RAWCACORR_AUTO;Auto-correction
diff --git a/rtdata/languages/Polish b/rtdata/languages/Polish
index a4def66c5..2c54f6363 100644
--- a/rtdata/languages/Polish
+++ b/rtdata/languages/Polish
@@ -795,7 +795,7 @@ PREFERENCES_SINGLETABVERTAB;Tryb pojedynczej zakładki, pionowy układ
PREFERENCES_SND_BATCHQUEUEDONE;Zakończono przetwarzanie wsadowe
PREFERENCES_SND_HELP;Należy wprowadzić ścieżkę do pliku, bądź pozostawić niewypełnione (brak dźwięków).\nW systemie Windows można stosować "SystemDefault", "SystemAsterisk" itp. dla dźwięków systemowych.\nW systemie Linux można stosować "complete", "window-attention" etc. dla dzwięków systemowych.
PREFERENCES_SND_LNGEDITPROCDONE;Praca edytora wykonana
-PREFERENCES_SND_TRESHOLDSECS;po sekundach
+PREFERENCES_SND_THRESHOLDSECS;po sekundach
PREFERENCES_STARTUPIMDIR;Katalog startowy
PREFERENCES_TAB_BROWSER;Przeglądarka plików
PREFERENCES_TAB_COLORMGR;Zarządzanie kolorami
@@ -1673,6 +1673,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: -
!HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness
!HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius
!HISTORY_MSG_METADATA_MODE;Metadata copy mode
+!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
+!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -1900,6 +1902,13 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: -
!TP_METADATA_STRIP;Strip all metadata
!TP_METADATA_TUNNEL;Copy unchanged
!TP_NEUTRAL;Reset
+!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
+!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
!TP_PRSHARPENING_LABEL;Post-Resize Sharpening
!TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions.
!TP_RAWCACORR_CASTR;Strength
diff --git a/rtdata/languages/Polish (Latin Characters) b/rtdata/languages/Polish (Latin Characters)
index 5c5d31f72..8be5fa876 100644
--- a/rtdata/languages/Polish (Latin Characters)
+++ b/rtdata/languages/Polish (Latin Characters)
@@ -795,7 +795,7 @@ PREFERENCES_SINGLETABVERTAB;Tryb pojedynczej zakladki, pionowy uklad
PREFERENCES_SND_BATCHQUEUEDONE;Zakonczono przetwarzanie wsadowe
PREFERENCES_SND_HELP;Nalezy wprowadzic sciezke do pliku, badz pozostawic niewypelnione (brak dzwiekow).\nW systemie Windows mozna stosowac "SystemDefault", "SystemAsterisk" itp. dla dzwiekow systemowych.\nW systemie Linux mozna stosowac "complete", "window-attention" etc. dla dzwiekow systemowych.
PREFERENCES_SND_LNGEDITPROCDONE;Praca edytora wykonana
-PREFERENCES_SND_TRESHOLDSECS;po sekundach
+PREFERENCES_SND_THRESHOLDSECS;po sekundach
PREFERENCES_STARTUPIMDIR;Katalog startowy
PREFERENCES_TAB_BROWSER;Przegladarka plikow
PREFERENCES_TAB_COLORMGR;Zarzadzanie kolorami
@@ -1673,6 +1673,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: -
!HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness
!HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius
!HISTORY_MSG_METADATA_MODE;Metadata copy mode
+!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
+!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -1900,6 +1902,13 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: -
!TP_METADATA_STRIP;Strip all metadata
!TP_METADATA_TUNNEL;Copy unchanged
!TP_NEUTRAL;Reset
+!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
+!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
!TP_PRSHARPENING_LABEL;Post-Resize Sharpening
!TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions.
!TP_RAWCACORR_CASTR;Strength
diff --git a/rtdata/languages/Portugues (Brasil) b/rtdata/languages/Portugues (Brasil)
index ddbfc8c88..c738219e7 100644
--- a/rtdata/languages/Portugues (Brasil)
+++ b/rtdata/languages/Portugues (Brasil)
@@ -983,6 +983,8 @@ TP_WBALANCE_TEMPERATURE;Temperatura
!HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness
!HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius
!HISTORY_MSG_METADATA_MODE;Metadata copy mode
+!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
+!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
@@ -1280,7 +1282,7 @@ TP_WBALANCE_TEMPERATURE;Temperatura
!PREFERENCES_SND_BATCHQUEUEDONE;Queue processing done
!PREFERENCES_SND_HELP;Enter a full file path to set a sound, or leave blank for no sound.\nFor system sounds on Windows use "SystemDefault", "SystemAsterisk" etc., and on Linux use "complete", "window-attention" etc.
!PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done
-!PREFERENCES_SND_TRESHOLDSECS;After seconds
+!PREFERENCES_SND_THRESHOLDSECS;After seconds
!PREFERENCES_STDAUT;Standard
!PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules
!PREFERENCES_TAB_PERFORMANCE;Performance & Quality
@@ -1776,7 +1778,14 @@ TP_WBALANCE_TEMPERATURE;Temperatura
!TP_PREPROCESS_HOTPIXFILT_TOOLTIP;Tries to suppress hot pixels.
!TP_PREPROCESS_LABEL;Preprocessing
!TP_PREPROCESS_LINEDENOISE;Line noise filter
+!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
!TP_PREPROCESS_NO_FOUND;None found
+!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
!TP_PRSHARPENING_LABEL;Post-Resize Sharpening
!TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions.
!TP_RAWCACORR_AUTO;Auto-correction
diff --git a/rtdata/languages/Russian b/rtdata/languages/Russian
index c27a78270..f02957378 100644
--- a/rtdata/languages/Russian
+++ b/rtdata/languages/Russian
@@ -804,7 +804,7 @@ PREFERENCES_SINGLETABVERTAB;Одна вкладка редактирования
PREFERENCES_SND_BATCHQUEUEDONE;Пакетная обработка завершена
PREFERENCES_SND_HELP;Введите имя файла, либо оставьте поле пустым (без звука). \nДля использования системных звуков в Windows можно использовать "SystemDefault", "SystemAsterisk", в Linux "complete", "window-attention" и т.д.
PREFERENCES_SND_LNGEDITPROCDONE;Обработка в редакторе завершена
-PREFERENCES_SND_TRESHOLDSECS;после, секунд
+PREFERENCES_SND_THRESHOLDSECS;после, секунд
PREFERENCES_STARTUPIMDIR;Каталог изображений при запуске
PREFERENCES_TAB_BROWSER;Файловый браузер
PREFERENCES_TAB_COLORMGR;Управление цветом
@@ -1651,6 +1651,8 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: -
!HISTORY_MSG_486;Lens Correction - Camera
!HISTORY_MSG_487;Lens Correction - Lens
!HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
+!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
+!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
!IPTCPANEL_COPYRIGHT;Copyright notice
@@ -1913,6 +1915,13 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: -
!TP_PREPROCESS_DEADPIXFILT_TOOLTIP;Tries to suppress dead pixels.
!TP_PREPROCESS_HOTPIXFILT;Hot pixel filter
!TP_PREPROCESS_HOTPIXFILT_TOOLTIP;Tries to suppress hot pixels.
+!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
+!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
!TP_PRSHARPENING_LABEL;Post-Resize Sharpening
!TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions.
!TP_RAWCACORR_CASTR;Strength
diff --git a/rtdata/languages/Serbian (Cyrilic Characters) b/rtdata/languages/Serbian (Cyrilic Characters)
index 4c45633eb..3dd63cdd7 100644
--- a/rtdata/languages/Serbian (Cyrilic Characters)
+++ b/rtdata/languages/Serbian (Cyrilic Characters)
@@ -711,7 +711,7 @@ PREFERENCES_SINGLETABVERTAB;Режим у једном листу, вертик
PREFERENCES_SND_BATCHQUEUEDONE;Обрађене су заказане датотеке
PREFERENCES_SND_HELP;Унесите путању до датотеке или оставите празно уколико не желите звук. На Windows-у можете да користите „SystemDefault“, „SystemAsterisk“ за системске звуке.
PREFERENCES_SND_LNGEDITPROCDONE;Уредник је завршио обраду
-PREFERENCES_SND_TRESHOLDSECS;бр. секунди
+PREFERENCES_SND_THRESHOLDSECS;бр. секунди
PREFERENCES_STARTUPIMDIR;Директоријум по покретању
PREFERENCES_TAB_BROWSER;Преглед датотека
PREFERENCES_TAB_COLORMGR;Управљање бојама
@@ -1567,6 +1567,8 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness
!HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius
!HISTORY_MSG_METADATA_MODE;Metadata copy mode
+!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
+!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -1884,6 +1886,13 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!TP_PREPROCESS_DEADPIXFILT_TOOLTIP;Tries to suppress dead pixels.
!TP_PREPROCESS_HOTPIXFILT;Hot pixel filter
!TP_PREPROCESS_HOTPIXFILT_TOOLTIP;Tries to suppress hot pixels.
+!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
+!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
!TP_PRSHARPENING_LABEL;Post-Resize Sharpening
!TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions.
!TP_RAWCACORR_CASTR;Strength
diff --git a/rtdata/languages/Serbian (Latin Characters) b/rtdata/languages/Serbian (Latin Characters)
index 0552ba29a..a4646cd2e 100644
--- a/rtdata/languages/Serbian (Latin Characters)
+++ b/rtdata/languages/Serbian (Latin Characters)
@@ -711,7 +711,7 @@ PREFERENCES_SINGLETABVERTAB;Režim u jednom listu, vertikalni listovi
PREFERENCES_SND_BATCHQUEUEDONE;Obrađene su zakazane datoteke
PREFERENCES_SND_HELP;Unesite putanju do datoteke ili ostavite prazno ukoliko ne želite zvuk. Na Windows-u možete da koristite „SystemDefault“, „SystemAsterisk“ za sistemske zvuke.
PREFERENCES_SND_LNGEDITPROCDONE;Urednik je završio obradu
-PREFERENCES_SND_TRESHOLDSECS;br. sekundi
+PREFERENCES_SND_THRESHOLDSECS;br. sekundi
PREFERENCES_STARTUPIMDIR;Direktorijum po pokretanju
PREFERENCES_TAB_BROWSER;Pregled datoteka
PREFERENCES_TAB_COLORMGR;Upravljanje bojama
@@ -1567,6 +1567,8 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness
!HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius
!HISTORY_MSG_METADATA_MODE;Metadata copy mode
+!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
+!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -1884,6 +1886,13 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!TP_PREPROCESS_DEADPIXFILT_TOOLTIP;Tries to suppress dead pixels.
!TP_PREPROCESS_HOTPIXFILT;Hot pixel filter
!TP_PREPROCESS_HOTPIXFILT_TOOLTIP;Tries to suppress hot pixels.
+!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
+!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
!TP_PRSHARPENING_LABEL;Post-Resize Sharpening
!TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions.
!TP_RAWCACORR_CASTR;Strength
diff --git a/rtdata/languages/Slovak b/rtdata/languages/Slovak
index a8728cbc5..548c50de3 100644
--- a/rtdata/languages/Slovak
+++ b/rtdata/languages/Slovak
@@ -1045,6 +1045,8 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness
!HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius
!HISTORY_MSG_METADATA_MODE;Metadata copy mode
+!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
+!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
@@ -1323,7 +1325,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!PREFERENCES_SND_BATCHQUEUEDONE;Queue processing done
!PREFERENCES_SND_HELP;Enter a full file path to set a sound, or leave blank for no sound.\nFor system sounds on Windows use "SystemDefault", "SystemAsterisk" etc., and on Linux use "complete", "window-attention" etc.
!PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done
-!PREFERENCES_SND_TRESHOLDSECS;After seconds
+!PREFERENCES_SND_THRESHOLDSECS;After seconds
!PREFERENCES_STDAUT;Standard
!PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules
!PREFERENCES_TAB_PERFORMANCE;Performance & Quality
@@ -1791,7 +1793,14 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!TP_PREPROCESS_HOTPIXFILT;Hot pixel filter
!TP_PREPROCESS_HOTPIXFILT_TOOLTIP;Tries to suppress hot pixels.
!TP_PREPROCESS_LABEL;Preprocessing
+!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
!TP_PREPROCESS_NO_FOUND;None found
+!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
!TP_PRSHARPENING_LABEL;Post-Resize Sharpening
!TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions.
!TP_RAWCACORR_CABLUE;Blue
diff --git a/rtdata/languages/Suomi b/rtdata/languages/Suomi
index 00abac8a7..c7621a341 100644
--- a/rtdata/languages/Suomi
+++ b/rtdata/languages/Suomi
@@ -984,6 +984,8 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness
!HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius
!HISTORY_MSG_METADATA_MODE;Metadata copy mode
+!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
+!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
@@ -1281,7 +1283,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!PREFERENCES_SND_BATCHQUEUEDONE;Queue processing done
!PREFERENCES_SND_HELP;Enter a full file path to set a sound, or leave blank for no sound.\nFor system sounds on Windows use "SystemDefault", "SystemAsterisk" etc., and on Linux use "complete", "window-attention" etc.
!PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done
-!PREFERENCES_SND_TRESHOLDSECS;After seconds
+!PREFERENCES_SND_THRESHOLDSECS;After seconds
!PREFERENCES_STDAUT;Standard
!PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules
!PREFERENCES_TAB_PERFORMANCE;Performance & Quality
@@ -1776,7 +1778,14 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!TP_PREPROCESS_HOTPIXFILT_TOOLTIP;Tries to suppress hot pixels.
!TP_PREPROCESS_LABEL;Preprocessing
!TP_PREPROCESS_LINEDENOISE;Line noise filter
+!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
!TP_PREPROCESS_NO_FOUND;None found
+!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
!TP_PRSHARPENING_LABEL;Post-Resize Sharpening
!TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions.
!TP_RAWCACORR_AUTO;Auto-correction
diff --git a/rtdata/languages/Swedish b/rtdata/languages/Swedish
index 67572efba..ded3d8190 100644
--- a/rtdata/languages/Swedish
+++ b/rtdata/languages/Swedish
@@ -986,7 +986,7 @@ PREFERENCES_SMA;Liten (250x287)
PREFERENCES_SND_BATCHQUEUEDONE;Batchkön färdig
PREFERENCES_SND_HELP;Fyll i en sökväg till ett ljud.\nI Windows kan "SystemDefault", "SystemAsterisk" o.s.v. användas.\nPå Linuxbaserade system kan du prova med "complete", "windows-attention" o.s.v.
PREFERENCES_SND_LNGEDITPROCDONE;När behandlingen är klar
-PREFERENCES_SND_TRESHOLDSECS;Ljudet kommer efter så här många sekunder
+PREFERENCES_SND_THRESHOLDSECS;Ljudet kommer efter så här många sekunder
PREFERENCES_STARTUPIMDIR;Bildkatalog som visas vid uppstart
PREFERENCES_STDAUT;Standard
PREFERENCES_TAB_BROWSER;Filbläddrare
@@ -1953,6 +1953,8 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: -
!HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness
!HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius
!HISTORY_MSG_METADATA_MODE;Metadata copy mode
+!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
+!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -2086,6 +2088,13 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: -
!TP_METADATA_MODE;Metadata copy mode
!TP_METADATA_STRIP;Strip all metadata
!TP_METADATA_TUNNEL;Copy unchanged
+!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
+!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
!TP_RAW_1PASSMEDIUM;1-Pass (Medium)
!TP_RAW_3PASSBEST;3-Pass (Best)
!TP_RAW_AHD;AHD
diff --git a/rtdata/languages/Turkish b/rtdata/languages/Turkish
index 3f84afd6c..87395131d 100644
--- a/rtdata/languages/Turkish
+++ b/rtdata/languages/Turkish
@@ -983,6 +983,8 @@ TP_WBALANCE_TEMPERATURE;Isı
!HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness
!HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius
!HISTORY_MSG_METADATA_MODE;Metadata copy mode
+!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
+!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
@@ -1280,7 +1282,7 @@ TP_WBALANCE_TEMPERATURE;Isı
!PREFERENCES_SND_BATCHQUEUEDONE;Queue processing done
!PREFERENCES_SND_HELP;Enter a full file path to set a sound, or leave blank for no sound.\nFor system sounds on Windows use "SystemDefault", "SystemAsterisk" etc., and on Linux use "complete", "window-attention" etc.
!PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done
-!PREFERENCES_SND_TRESHOLDSECS;After seconds
+!PREFERENCES_SND_THRESHOLDSECS;After seconds
!PREFERENCES_STDAUT;Standard
!PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules
!PREFERENCES_TAB_PERFORMANCE;Performance & Quality
@@ -1775,7 +1777,14 @@ TP_WBALANCE_TEMPERATURE;Isı
!TP_PREPROCESS_HOTPIXFILT_TOOLTIP;Tries to suppress hot pixels.
!TP_PREPROCESS_LABEL;Preprocessing
!TP_PREPROCESS_LINEDENOISE;Line noise filter
+!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows
+!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
!TP_PREPROCESS_NO_FOUND;None found
+!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
!TP_PRSHARPENING_LABEL;Post-Resize Sharpening
!TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions.
!TP_RAWCACORR_AUTO;Auto-correction
diff --git a/rtdata/languages/default b/rtdata/languages/default
index 799091f40..0bc981b8d 100644
--- a/rtdata/languages/default
+++ b/rtdata/languages/default
@@ -854,6 +854,8 @@ HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast
HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness
HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius
HISTORY_MSG_METADATA_MODE;Metadata copy mode
+HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
+HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor
HISTORY_NEWSNAPSHOT;Add
HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
@@ -1283,7 +1285,7 @@ PREFERENCES_SMA;Small (250x287)
PREFERENCES_SND_BATCHQUEUEDONE;Queue processing done
PREFERENCES_SND_HELP;Enter a full file path to set a sound, or leave blank for no sound.\nFor system sounds on Windows use "SystemDefault", "SystemAsterisk" etc., and on Linux use "complete", "window-attention" etc.
PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done
-PREFERENCES_SND_TRESHOLDSECS;After seconds
+PREFERENCES_SND_THRESHOLDSECS;After seconds
PREFERENCES_STARTUPIMDIR;Image Directory at Startup
PREFERENCES_STDAUT;Standard
PREFERENCES_TAB_BROWSER;File Browser
@@ -1983,7 +1985,14 @@ TP_PREPROCESS_HOTPIXFILT;Hot pixel filter
TP_PREPROCESS_HOTPIXFILT_TOOLTIP;Tries to suppress hot pixels.
TP_PREPROCESS_LABEL;Preprocessing
TP_PREPROCESS_LINEDENOISE;Line noise filter
+TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
+TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
+TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
+TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows
+TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
TP_PREPROCESS_NO_FOUND;None found
+TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
TP_PRSHARPENING_LABEL;Post-Resize Sharpening
TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions.
TP_RAWCACORR_AUTO;Auto-correction
diff --git a/rtengine/CMakeLists.txt b/rtengine/CMakeLists.txt
index c30da357b..b3932bcef 100644
--- a/rtengine/CMakeLists.txt
+++ b/rtengine/CMakeLists.txt
@@ -119,6 +119,8 @@ set(RTENGINESOURCEFILES
tmo_fattal02.cc
iplocalcontrast.cc
histmatching.cc
+ pdaflinesfilter.cc
+ gamutwarning.cc
)
if(LENSFUN_HAS_LOAD_DIRECTORY)
diff --git a/rtengine/alignedbuffer.h b/rtengine/alignedbuffer.h
index 27a376c57..846c4c47d 100644
--- a/rtengine/alignedbuffer.h
+++ b/rtengine/alignedbuffer.h
@@ -66,7 +66,7 @@ public:
return allocatedSize == 0;
}
- /** @brief Allocate the the "size" amount of elements of "structSize" length each
+ /** @brief Allocate the "size" amount of elements of "structSize" length each
* @param size number of elements to allocate
* @param structSize if non null, will let you override the default struct's size (unit: byte)
* @return True is everything went fine, including freeing memory when size==0, false if the allocation failed
diff --git a/rtengine/camconst.cc b/rtengine/camconst.cc
index 469d18571..3d4342ed9 100644
--- a/rtengine/camconst.cc
+++ b/rtengine/camconst.cc
@@ -19,7 +19,7 @@ namespace rtengine
extern const Settings* settings;
-CameraConst::CameraConst()
+CameraConst::CameraConst() : pdafOffset(0)
{
memset(dcraw_matrix, 0, sizeof(dcraw_matrix));
memset(raw_crop, 0, sizeof(raw_crop));
@@ -310,6 +310,35 @@ CameraConst::parseEntry(void *cJSON_, const char *make_model)
}
}
+ ji = cJSON_GetObjectItem(js, "pdafPattern");
+
+ if (ji) {
+ if (ji->type != cJSON_Array) {
+ fprintf(stderr, "\"pdafPattern\" must be an array\n");
+ goto parse_error;
+ }
+
+ for (ji = ji->child; ji != nullptr; ji = ji->next) {
+ if (ji->type != cJSON_Number) {
+ fprintf(stderr, "\"pdafPattern\" array must contain numbers\n");
+ goto parse_error;
+ }
+
+ cc->pdafPattern.push_back(ji->valueint);
+ }
+ }
+
+ ji = cJSON_GetObjectItem(js, "pdafOffset");
+
+ if (ji) {
+ if (ji->type != cJSON_Number) {
+ fprintf(stderr, "\"pdafOffset\" must contain a number\n");
+ goto parse_error;
+ }
+
+ cc->pdafOffset = ji->valueint;
+ }
+
return cc;
parse_error:
@@ -345,6 +374,36 @@ CameraConst::get_dcrawMatrix()
return dcraw_matrix;
}
+bool
+CameraConst::has_pdafPattern()
+{
+ return pdafPattern.size() > 0;
+}
+
+std::vector
+CameraConst::get_pdafPattern()
+{
+ return pdafPattern;
+}
+
+void
+CameraConst::update_pdafPattern(const std::vector &other)
+{
+ if (other.empty()) {
+ return;
+ }
+ pdafPattern = other;
+}
+
+void
+CameraConst::update_pdafOffset(int other)
+{
+ if (other == 0) {
+ return;
+ }
+ pdafOffset = other;
+}
+
bool
CameraConst::has_rawCrop()
{
@@ -678,6 +737,8 @@ CameraConstantsStore::parse_camera_constants_file(Glib::ustring filename_)
// deleting all the existing levels, replaced by the new ones
existingcc->update_Levels(cc);
existingcc->update_Crop(cc);
+ existingcc->update_pdafPattern(cc->get_pdafPattern());
+ existingcc->update_pdafOffset(cc->get_pdafOffset());
if (settings->verbose) {
printf("Merging camera constants for \"%s\"\n", make_model.c_str());
diff --git a/rtengine/camconst.h b/rtengine/camconst.h
index 47c8d8bee..60e17201b 100644
--- a/rtengine/camconst.h
+++ b/rtengine/camconst.h
@@ -24,7 +24,8 @@ private:
int white_max;
std::map mLevels[2];
std::map mApertureScaling;
-
+ std::vector pdafPattern;
+ int pdafOffset;
CameraConst();
static bool parseLevels(CameraConst *cc, int bw, void *ji);
static bool parseApertureScaling(CameraConst *cc, void *ji);
@@ -33,8 +34,11 @@ private:
public:
static CameraConst *parseEntry(void *cJSON, const char *make_model);
bool has_dcrawMatrix(void);
+ bool has_pdafPattern(void);
void update_dcrawMatrix(const short *other);
const short *get_dcrawMatrix(void);
+ std::vector get_pdafPattern();
+ int get_pdafOffset() {return pdafOffset;}
bool has_rawCrop(void);
void get_rawCrop(int& left_margin, int& top_margin, int& width, int& height);
bool has_rawMask(int idx);
@@ -43,6 +47,8 @@ public:
int get_WhiteLevel(int idx, int iso_speed, float fnumber);
void update_Levels(const CameraConst *other);
void update_Crop(CameraConst *other);
+ void update_pdafPattern(const std::vector &other);
+ void update_pdafOffset(int other);
};
class CameraConstantsStore
diff --git a/rtengine/camconst.json b/rtengine/camconst.json
index 4a294fe03..cfe7412d8 100644
--- a/rtengine/camconst.json
+++ b/rtengine/camconst.json
@@ -82,6 +82,11 @@ Examples:
// It is useful after detecting the masked areas, to not fully use these areas but leave a border of 2-4 pixels
// instead, to take care of possible light leaks from the light sensing area to the optically black (masked)
// area or sensor imperfections at the outer borders.
+
+ // list of indices of the rows with on-sensor PDAF pixels, for cameras that have such features. The indices here form a pattern that is repeated for the whole height of the sensor. The values are relative to the "pdafOffset" value (see below)
+ "pdafPattern" : [ 0,12,36,54,72,90,114,126,144,162,180,204,216,240,252,270,294,306,324,342,366,384,396,414,432,450,474,492,504,522,540,564,576,594,606,630 ],
+ // index of the first row of the PDAF pattern in the sensor (0 is the topmost row). Allowed to be negative for convenience (this means that the first repetition of the pattern doesn't start from the first row)
+ "pdafOffset" : 3
},
{
@@ -1241,7 +1246,8 @@ Camera constants:
{ // Quality B
"make_model": "FUJIFILM X-A3",
"dcraw_matrix": [ 12407,-5222,-1086,-2971,11116,2120,-294,1029,5284 ], // DNGv9.8 D65
- "ranges": { "white": 4050 }
+ "raw_crop": [ 0, 0, 6016, 4014 ], // full raw 6016x4014
+ "ranges": { "white": 16100 }
},
{ // Quality B
@@ -2235,14 +2241,33 @@ Camera constants:
"make_model": "Sony ILCE-6000",
"dcraw_matrix": [ 5991,-1456,-455,-4764,12135,2980,-707,1425,6701 ], // adobe dcp d65
"raw_crop": [ 0, 0, 6024, 4024 ],
- "ranges": { "black": 512, "white": 16300 }
+ "ranges": { "black": 512, "white": 16300 },
+ // detected by hand, using the picture from https://www.dpreview.com/forums/thread/3923513
+ // P 11 P 23 P 17 P 17 P 17 P 23 P 11 P 17 P 17 P 17 P 23 P 11 P 23 P 11 P 17 P 23 P 11 P 17 P 17 P 23 P 17 P 11 P 17 P 17 P 17 P 23 P 17 P 11 P 17 P 17 P 23 P 11 P 17 P 11 P 23
+ "pdafPattern" : [ 0,12,36,54,72,90,114,126,144,162,180,204,216,240,252,270,294,306,324,342,366,384,396,414,432,450,474,492,504,522,540,564,576,594,606,630 ],
+ "pdafOffset" : 3
},
{ // Quality A
"make_model": [ "Sony ILCE-6300","Sony ILCE-6500" ],
"dcraw_matrix": [ 5973,-1695,-419,-3826,11797,2293,-639,1398,5789 ], // DNG_v9.8 D65
"raw_crop": [ 0, 0, 6024, 4024 ],
- "ranges": { "black": 512, "white": 16300 }
+ "ranges": { "black": 512, "white": 16300 },
+ // contributed by Horshak from https://www.dpreview.com/forums/post/60873077
+ "pdafPattern" : [ 0,12,36,54,72,90,114,126,144,162,180,204,216,240,252,270,294,306,324,342,366,384,396,414,432,450,474,492,504,522,540,564,576,594,606,630 ],
+ "pdafOffset" : 3
+ },
+
+ { // Quality C, only pdaf data
+ "make_model": "Sony ILCE-7M3",
+ // A7III, from https://www.dpreview.com/forums/post/60843139
+ // in the original post:
+ // P 5 P 17 P 11 P 11 P 17 P 11 P 5 P 11 P 11 P 11 P 17 P 11 P 5 P 11 P 11 P 17 P 5 P 11 P 17 P 5 P 17 P 5 P 11 P 11 P 11 P 17 P 5 P 11 P 11 P 11 P 5 P 17 P 5 P 17 P 11
+ //
+ // rotated to match the start of the frame
+ // P 11 P 11 P 11 P 17 P 11 P 5 P 11 P 11 P 17 P 5 P 11 P 17 P 5 P 17 P 5 P 11 P 11 P 11 P 17 P 5 P 11 P 11 P 11 P 5 P 17 P 5 P 17 P 11 P 5 P 17 P 11 P 11 P 17 P 11 P 5
+ "pdafPattern" : [ 0,12,24,36,54,66,72,84,96,114,120,132,150,156,174,180,192,204,216,234,240,252,264,276,282,300,306,324,336,342,360,372,384,402,414,420],
+ "pdafOffset" : 9
},
{ // Quality A, correction for frame width
@@ -2262,7 +2287,10 @@ Camera constants:
"make_model": [ "Sony ILCE-7RM2", "Sony DSC-RX1RM2" ],
"dcraw_matrix": [ 6629,-1900,-483,-4618,12349,2550,-622,1381,6514 ], // DNG_v9.1.1 D65
"raw_crop": [ 0, 0, -36, 0 ], // full raw frame 8000x5320 - 36 rightmost columns are garbage
- "ranges": { "black": 512, "white": 16300 }
+ "ranges": { "black": 512, "white": 16300 },
+ // PDAF info provided by Horshack with the rawshack tool (http://testcams.com/rawshack/)
+ "pdafPattern" : [ 0,24,36,60,84,120,132,156,192,204,240,252,276,300,324,360,372,396,420 ],
+ "pdafOffset" : 31
},
{ // Quality C, color matrix copied from ILCE-9, LongExposures 2-3sec only
@@ -2298,7 +2326,12 @@ Camera constants:
"make_model": "Sony ILCE-9",
"dcraw_matrix": [ 6389,-1703,-378,-4562,12265,2587,-670,1489,6550 ], // DNG_v9.12 D65
"raw_crop": [ 8, 8, 6008, 4008 ], // full raw frame 6048x4024 Dcraw auto identify 6024x4024, jpeg 12,12,6000x4000
- "ranges": { "black": 512, "white": 16300 }
+ "ranges": { "black": 512, "white": 16300 },
+ // the A9 is the same as the A7III, rotated of 1 position
+ // source: https://www.dpreview.com/forums/post/60857788
+ // P 11 P 11 P 11 P 17 P 11 P 5 P 11 P 11 P 17 P 5 P 11 P 17 P 5 P 17 P 5 P 11 P 11 P 11 P 17 P 5 P 11 P 11 P 11 P 5 P 17 P 5 P 17 P 11 P 5 P 17 P 11 P 11 P 17 P 11 P 5
+ "pdafPattern" : [ 0,12,24,36,54,66,72,84,96,114,120,132,150,156,174,180,192,204,216,234,240,252,264,276,282,300,306,324,336,342,360,372,384,402,414,420 ],
+ "pdafOffset" : -7
},
{ // Quality B, correction for frame width
diff --git a/rtengine/cfa_linedn_RT.cc b/rtengine/cfa_linedn_RT.cc
index 0f9e27634..2bb3649b6 100644
--- a/rtengine/cfa_linedn_RT.cc
+++ b/rtengine/cfa_linedn_RT.cc
@@ -39,7 +39,7 @@ using namespace rtengine;
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-void RawImageSource::CLASS cfa_linedn(float noise)
+void RawImageSource::CLASS cfa_linedn(float noise, bool horizontal, bool vertical, const CFALineDenoiseRowBlender &rowblender)
{
// local variables
int height = H, width = W;
@@ -68,11 +68,10 @@ void RawImageSource::CLASS cfa_linedn(float noise)
{
// allocate memory and assure the arrays don't have same 64 byte boundary to avoid L1 conflict misses
- float *cfain = (float*)malloc(4 * TS * TS * sizeof(float) + 3 * 16 * sizeof(float));
- float *cfablur = (cfain + (TS * TS) + 1 * 16);
- float *cfadiff = (cfain + (2 * TS * TS) + 2 * 16);
- float *cfadn = (cfain + (3 * TS * TS) + 3 * 16);
-
+ float *cfain = (float*)malloc(3 * TS * TS * sizeof(float) + 2 * 16 * sizeof(float));
+ float *cfadiff = (cfain + (1 * TS * TS) + 1 * 16);
+ float *cfadn = (cfain + (2 * TS * TS) + 2 * 16);
+ float cfablur[TS];
float linehvar[4], linevvar[4], noisefactor[4][8][2], coeffsq;
float dctblock[4][8][8];
@@ -130,19 +129,19 @@ void RawImageSource::CLASS cfa_linedn(float noise)
//gaussian blur of CFA data
for (int rr = 8; rr < numrows - 8; rr++) {
- for (int indx = rr * TS; indx < rr * TS + numcols; indx++) {
- cfablur[indx] = gauss[0] * cfain[indx];
+ for (int indx = rr * TS, indxb = 0; indx < rr * TS + numcols; indx++, indxb++) {
+ cfablur[indxb] = gauss[0] * cfain[indx];
for (int i = 1; i < 5; i++) {
- cfablur[indx] += gauss[i] * (cfain[indx - (2 * i) * TS] + cfain[indx + (2 * i) * TS]);
+ cfablur[indxb] += gauss[i] * (cfain[indx - (2 * i) * TS] + cfain[indx + (2 * i) * TS]);
}
}
- for (int indx = rr * TS + 8; indx < rr * TS + numcols - 8; indx++) {
- cfadn[indx] = gauss[0] * cfablur[indx];
+ for (int indx = rr * TS + 8, indxb = 8; indx < rr * TS + numcols - 8; indx++, indxb++) {
+ cfadn[indx] = gauss[0] * cfablur[indxb];
for (int i = 1; i < 5; i++) {
- cfadn[indx] += gauss[i] * (cfablur[indx - 2 * i] + cfablur[indx + 2 * i]);
+ cfadn[indx] += gauss[i] * (cfablur[indxb - 2 * i] + cfablur[indxb + 2 * i]);
}
cfadiff[indx] = cfain[indx] - cfadn[indx]; // hipass cfa data
@@ -183,14 +182,14 @@ void RawImageSource::CLASS cfa_linedn(float noise)
}
//horizontal lines
- if (noisevarm4 > (linehvar[0] + linehvar[1])) { //horizontal lines
+ if (horizontal && noisevarm4 > (linehvar[0] + linehvar[1])) { //horizontal lines
for (int i = 1; i < 8; i++) {
dctblock[0][0][i] *= 0.5f * (noisefactor[0][i][1] + noisefactor[1][i][1]); //or should we use MIN???
dctblock[1][0][i] *= 0.5f * (noisefactor[0][i][1] + noisefactor[1][i][1]); //or should we use MIN???
}
}
- if (noisevarm4 > (linehvar[2] + linehvar[3])) { //horizontal lines
+ if (horizontal && noisevarm4 > (linehvar[2] + linehvar[3])) { //horizontal lines
for (int i = 1; i < 8; i++) {
dctblock[2][0][i] *= 0.5f * (noisefactor[2][i][1] + noisefactor[3][i][1]); //or should we use MIN???
dctblock[3][0][i] *= 0.5f * (noisefactor[2][i][1] + noisefactor[3][i][1]); //or should we use MIN???
@@ -198,14 +197,14 @@ void RawImageSource::CLASS cfa_linedn(float noise)
}
//vertical lines
- if (noisevarm4 > (linevvar[0] + linevvar[2])) { //vertical lines
+ if (vertical && noisevarm4 > (linevvar[0] + linevvar[2])) { //vertical lines
for (int i = 1; i < 8; i++) {
dctblock[0][i][0] *= 0.5f * (noisefactor[0][i][0] + noisefactor[2][i][0]); //or should we use MIN???
dctblock[2][i][0] *= 0.5f * (noisefactor[0][i][0] + noisefactor[2][i][0]); //or should we use MIN???
}
}
- if (noisevarm4 > (linevvar[1] + linevvar[3])) { //vertical lines
+ if (vertical && noisevarm4 > (linevvar[1] + linevvar[3])) { //vertical lines
for (int i = 1; i < 8; i++) {
dctblock[1][i][0] *= 0.5f * (noisefactor[1][i][0] + noisefactor[3][i][0]); //or should we use MIN???
dctblock[3][i][0] *= 0.5f * (noisefactor[1][i][0] + noisefactor[3][i][0]); //or should we use MIN???
@@ -252,12 +251,17 @@ void RawImageSource::CLASS cfa_linedn(float noise)
free(cfain);
// copy temporary buffer back to image matrix
- #pragma omp for
+ #pragma omp for schedule(dynamic,16)
- for(int i = 0; i < height; i++)
- for(int j = 0; j < width; j++) {
- rawData[i][j] = RawDataTmp[i * width + j];
+ for(int i = 0; i < height; i++) {
+ float f = rowblender(i);
+ if (f > 0.f) {
+ float f2 = 1.f - f;
+ for(int j = 0; j < width; j++) {
+ rawData[i][j] = f * RawDataTmp[i * width + j] + f2 * rawData[i][j];
+ }
}
+ }
} // end of parallel processing
@@ -318,14 +322,14 @@ void RawImageSource::CLASS cfa_linedn(float noise)
/* Cn_kI = sqrt(2.0/n) * sin(pi/2*k/n) */
/* Wn_kR = cos(pi/2*k/n) */
/* Wn_kI = sin(pi/2*k/n) */
-#define C8_1R 0.49039264020161522456
-#define C8_1I 0.09754516100806413392
-#define C8_2R 0.46193976625564337806
-#define C8_2I 0.19134171618254488586
-#define C8_3R 0.41573480615127261854
-#define C8_3I 0.27778511650980111237
-#define C8_4R 0.35355339059327376220
-#define W8_4R 0.70710678118654752440
+#define C8_1R 0.49039264020161522456f
+#define C8_1I 0.09754516100806413392f
+#define C8_2R 0.46193976625564337806f
+#define C8_2I 0.19134171618254488586f
+#define C8_3R 0.41573480615127261854f
+#define C8_3I 0.27778511650980111237f
+#define C8_4R 0.35355339059327376220f
+#define W8_4R 0.70710678118654752440f
void RawImageSource::ddct8x8s(int isgn, float a[8][8])
diff --git a/rtengine/dcraw.c b/rtengine/dcraw.c
index 441f967da..e2e502b10 100644
--- a/rtengine/dcraw.c
+++ b/rtengine/dcraw.c
@@ -3826,7 +3826,7 @@ void CLASS remove_zeroes()
}
/*
- Seach from the current directory up to the root looking for
+ Search from the current directory up to the root looking for
a ".badpixels" file, and fix those pixels now.
*/
void CLASS bad_pixels (const char *cfname)
diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc
index e13daa69b..7d82b68a1 100644
--- a/rtengine/dcraw.cc
+++ b/rtengine/dcraw.cc
@@ -2362,7 +2362,6 @@ void CLASS sony_arq_load_raw()
int bits = 0;
while (1 << ++bits < maximum)
;
- ++bits;
bits = (1 << bits) - 1;
for (int row = 0; row < ((frame < 2) ? 1 : raw_height); row++) {
@@ -2376,8 +2375,8 @@ void CLASS sony_arq_load_raw()
read_shorts(samples, 4 * raw_width);
if (r < raw_height) {
int offset = 2 * (r & 1);
- for (int c = (frame >> 1) & 1; c < raw_width; ++c, offset = (offset + 4) ^ 1) {
- RAW(r, c) = samples[offset] & bits;
+ for (int c = (frame >> 1) & 1; c < raw_width; ++c, offset += 4) {
+ RAW(r, c) = samples[offset + (c & 1)] & bits;
}
}
}
@@ -9264,6 +9263,9 @@ canon_a5:
if (!strncmp(model,"X-A10",5)) {
width = raw_width = 4912;
height = raw_height = 3278;
+ } else if (!strncmp(model, "X-A3", 4) || !strncmp(model, "X-A5", 4)) {
+ width = raw_width = 6016;
+ height = raw_height = 4014;
}
top_margin = (raw_height - height) >> 2 << 1;
left_margin = (raw_width - width ) >> 2 << 1;
diff --git a/rtengine/dcraw.h b/rtengine/dcraw.h
index 5a2790801..9edc4196b 100644
--- a/rtengine/dcraw.h
+++ b/rtengine/dcraw.h
@@ -290,6 +290,7 @@ void fuji_decode_strip(const struct fuji_compressed_params* info_common, int cur
void fuji_compressed_load_raw();
void fuji_decode_loop(const struct fuji_compressed_params* common_info, int count, INT64* raw_block_offsets, unsigned *block_sizes);
void parse_fuji_compressed_header();
+void fuji_14bit_load_raw();
void pentax_load_raw();
void nikon_load_raw();
int nikon_is_compressed();
diff --git a/rtengine/fujicompressed.cc b/rtengine/fujicompressed.cc
index e00e037fc..45622eb7f 100644
--- a/rtengine/fujicompressed.cc
+++ b/rtengine/fujicompressed.cc
@@ -1034,3 +1034,89 @@ void CLASS parse_fuji_compressed_header()
data_offset += 16;
load_raw = &CLASS fuji_compressed_load_raw;
}
+
+
+//-----------------------------------------------------------------------------
+// Fuji 14-bit compressed code taken from LibRaw 0.19
+//
+// Copyright 2008-2018 LibRaw LLC (info@libraw.org)
+
+// LibRaw is free software; you can redistribute it and/or modify
+// it under the terms of the one of two licenses as you choose:
+
+// 1. GNU LESSER GENERAL PUBLIC LICENSE version 2.1
+// (See file LICENSE.LGPL provided in LibRaw distribution archive for details).
+
+// 2. COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
+// (See file LICENSE.CDDL provided in LibRaw distribution archive for details).
+//-----------------------------------------------------------------------------
+namespace {
+
+inline void unpack7bytesto4x16(unsigned char *src, unsigned short *dest)
+{
+ dest[0] = (src[0] << 6) | (src[1] >> 2);
+ dest[1] = ((src[1] & 0x3) << 12) | (src[2] << 4) | (src[3] >> 4);
+ dest[2] = (src[3] & 0xf) << 10 | (src[4] << 2) | (src[5] >> 6);
+ dest[3] = ((src[5] & 0x3f) << 8) | src[6];
+}
+
+inline void unpack28bytesto16x16ns(unsigned char *src, unsigned short *dest)
+{
+ dest[0] = (src[3] << 6) | (src[2] >> 2);
+ dest[1] = ((src[2] & 0x3) << 12) | (src[1] << 4) | (src[0] >> 4);
+ dest[2] = (src[0] & 0xf) << 10 | (src[7] << 2) | (src[6] >> 6);
+ dest[3] = ((src[6] & 0x3f) << 8) | src[5];
+ dest[4] = (src[4] << 6) | (src[11] >> 2);
+ dest[5] = ((src[11] & 0x3) << 12) | (src[10] << 4) | (src[9] >> 4);
+ dest[6] = (src[9] & 0xf) << 10 | (src[8] << 2) | (src[15] >> 6);
+ dest[7] = ((src[15] & 0x3f) << 8) | src[14];
+ dest[8] = (src[13] << 6) | (src[12] >> 2);
+ dest[9] = ((src[12] & 0x3) << 12) | (src[19] << 4) | (src[18] >> 4);
+ dest[10] = (src[18] & 0xf) << 10 | (src[17] << 2) | (src[16] >> 6);
+ dest[11] = ((src[16] & 0x3f) << 8) | src[23];
+ dest[12] = (src[22] << 6) | (src[21] >> 2);
+ dest[13] = ((src[21] & 0x3) << 12) | (src[20] << 4) | (src[27] >> 4);
+ dest[14] = (src[27] & 0xf) << 10 | (src[26] << 2) | (src[25] >> 6);
+ dest[15] = ((src[25] & 0x3f) << 8) | src[24];
+}
+
+#define swab32(x) \
+ ((unsigned int)((((unsigned int)(x) & (unsigned int)0x000000ffUL) << 24) | \
+ (((unsigned int)(x) & (unsigned int)0x0000ff00UL) << 8) | \
+ (((unsigned int)(x) & (unsigned int)0x00ff0000UL) >> 8) | \
+ (((unsigned int)(x) & (unsigned int)0xff000000UL) >> 24)))
+
+inline void swab32arr(unsigned *arr, unsigned len)
+{
+ for (unsigned i = 0; i < len; i++)
+ arr[i] = swab32(arr[i]);
+}
+#undef swab32
+
+} // namespace
+
+void CLASS fuji_14bit_load_raw()
+{
+ const unsigned linelen = raw_width * 7 / 4;
+ const unsigned pitch = raw_width;
+ unsigned char *buf = (unsigned char *)malloc(linelen);
+ merror(buf, "fuji_14bit_load_raw()");
+
+ for (int row = 0; row < raw_height; row++)
+ {
+ unsigned bytesread = fread(buf, 1, linelen, ifp);
+ unsigned short *dest = &raw_image[pitch * row];
+ if (bytesread % 28)
+ {
+ swab32arr((unsigned *)buf, bytesread / 4);
+ for (int sp = 0, dp = 0; dp < pitch - 3 && sp < linelen - 6 && sp < bytesread - 6; sp += 7, dp += 4)
+ unpack7bytesto4x16(buf + sp, dest + dp);
+ }
+ else
+ for (int sp = 0, dp = 0; dp < pitch - 15 && sp < linelen - 27 && sp < bytesread - 27; sp += 28, dp += 16)
+ unpack28bytesto16x16ns(buf + sp, dest + dp);
+ }
+ free(buf);
+}
+
+//-----------------------------------------------------------------------------
diff --git a/rtengine/gamutwarning.cc b/rtengine/gamutwarning.cc
new file mode 100644
index 000000000..87be430b2
--- /dev/null
+++ b/rtengine/gamutwarning.cc
@@ -0,0 +1,126 @@
+/* -*- C++ -*-
+ *
+ * This file is part of RawTherapee.
+ *
+ * Copyright (c) 2018 Alberto Griggio
+ *
+ * RawTherapee is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * RawTherapee is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with RawTherapee. If not, see .
+ */
+
+/**
+ * Adapted from PhotoFlow, Copyright (C) 2014 Ferrero Andrea
+ * also distributed under the GPL V3+
+ */
+
+#include "gamutwarning.h"
+#include
+
+namespace rtengine {
+
+GamutWarning::GamutWarning(cmsHPROFILE iprof, cmsHPROFILE gamutprof, RenderingIntent intent, bool gamutbpc):
+ lab2ref(nullptr),
+ lab2softproof(nullptr),
+ softproof2ref(nullptr)
+{
+ if (cmsIsMatrixShaper(gamutprof) && !cmsIsCLUT(gamutprof, intent, LCMS_USED_AS_OUTPUT)) {
+ cmsHPROFILE aces = ICCStore::getInstance()->getProfile("ACES");
+ if (aces) {
+ lab2ref = cmsCreateTransform(iprof, TYPE_Lab_FLT, aces, TYPE_RGB_FLT, INTENT_ABSOLUTE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE | cmsFLAGS_NOCACHE);
+ lab2softproof = cmsCreateTransform(iprof, TYPE_Lab_FLT, gamutprof, TYPE_RGB_FLT, INTENT_ABSOLUTE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE | cmsFLAGS_NOCACHE);
+ softproof2ref = cmsCreateTransform(gamutprof, TYPE_RGB_FLT, aces, TYPE_RGB_FLT, INTENT_ABSOLUTE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE | cmsFLAGS_NOCACHE | (gamutbpc ? cmsFLAGS_BLACKPOINTCOMPENSATION : 0));
+ }
+ } else {
+ lab2ref = nullptr;
+ lab2softproof = cmsCreateTransform(iprof, TYPE_Lab_FLT, gamutprof, TYPE_RGB_FLT, INTENT_ABSOLUTE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE | cmsFLAGS_NOCACHE);
+ softproof2ref = cmsCreateTransform(gamutprof, TYPE_RGB_FLT, iprof, TYPE_Lab_FLT, INTENT_ABSOLUTE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE | cmsFLAGS_NOCACHE | (gamutbpc ? cmsFLAGS_BLACKPOINTCOMPENSATION : 0));
+ }
+
+ if (!softproof2ref) {
+ if (lab2softproof) {
+ cmsDeleteTransform(lab2softproof);
+ lab2softproof = nullptr;
+ }
+ } else if (!lab2softproof) {
+ if (softproof2ref) {
+ cmsDeleteTransform(softproof2ref);
+ softproof2ref = nullptr;
+ }
+ }
+}
+
+
+GamutWarning::~GamutWarning()
+{
+ if (softproof2ref) {
+ cmsDeleteTransform(softproof2ref);
+ }
+ if (lab2ref) {
+ cmsDeleteTransform(lab2ref);
+ }
+ if (lab2softproof) {
+ cmsDeleteTransform(lab2softproof);
+ }
+}
+
+
+void GamutWarning::markLine(Image8 *image, int y, float *srcbuf, float *buf1, float *buf2)
+{
+ if (softproof2ref) {
+ const int width = image->getWidth();
+
+ float delta_max = lab2ref ? 0.0001f : 4.9999f;
+ cmsDoTransform(lab2softproof, srcbuf, buf2, width);
+ cmsDoTransform(softproof2ref, buf2, buf1, width);
+
+ float *proofdata = buf1;
+ float *refdata = srcbuf;
+
+ if (lab2ref) {
+ cmsDoTransform(lab2ref, srcbuf, buf2, width);
+ refdata = buf2;
+
+ int iy = 0;
+ for (int j = 0; j < width; ++j) {
+ float delta = max(std::abs(proofdata[iy] - refdata[iy]), std::abs(proofdata[iy+1] - refdata[iy+1]), std::abs(proofdata[iy+2] - refdata[iy+2]));
+ iy += 3;
+
+ if (delta > delta_max) {
+ mark(image, y, j);
+ }
+ }
+ } else {
+ int iy = 0;
+ for (int j = 0; j < width; ++j) {
+ cmsCIELab lab1 = { proofdata[iy], proofdata[iy+1], proofdata[iy+2] };
+ cmsCIELab lab2 = { refdata[iy], refdata[iy+1], refdata[iy+2] };
+ iy += 3;
+ float delta = cmsDeltaE(&lab1, &lab2);
+ if (delta > delta_max) {
+ mark(image, y, j);
+ }
+ }
+ }
+ }
+}
+
+
+inline void GamutWarning::mark(Image8 *image, int y, int x)
+{
+ image->r(y, x) = 0;
+ image->g(y, x) = 255;
+ image->b(y, x) = 255;
+}
+
+
+} // namespace rtengine
diff --git a/rtengine/gamutwarning.h b/rtengine/gamutwarning.h
new file mode 100644
index 000000000..be6d7b61b
--- /dev/null
+++ b/rtengine/gamutwarning.h
@@ -0,0 +1,48 @@
+/* -*- C++ -*-
+ *
+ * This file is part of RawTherapee.
+ *
+ * Copyright (c) 2018 Alberto Griggio
+ *
+ * RawTherapee is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * RawTherapee is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with RawTherapee. If not, see .
+ */
+
+/**
+ * Adapted from PhotoFlow, Copyright (C) 2014 Ferrero Andrea
+ * also distributed under the GPL V3+
+ */
+
+#pragma once
+
+#include "iccstore.h"
+#include "noncopyable.h"
+#include "image8.h"
+
+namespace rtengine {
+
+class GamutWarning: public NonCopyable {
+public:
+ GamutWarning(cmsHPROFILE iprof, cmsHPROFILE gamutprof, RenderingIntent intent, bool bpc);
+ ~GamutWarning();
+ void markLine(Image8 *image, int y, float *srcbuf, float *buf1, float *buf2);
+
+private:
+ void mark(Image8 *image, int i, int j);
+
+ cmsHTRANSFORM lab2ref;
+ cmsHTRANSFORM lab2softproof;
+ cmsHTRANSFORM softproof2ref;
+};
+
+} // namespace rtengine
diff --git a/rtengine/green_equil_RT.cc b/rtengine/green_equil_RT.cc
index 90c412871..934b7df4a 100644
--- a/rtengine/green_equil_RT.cc
+++ b/rtengine/green_equil_RT.cc
@@ -89,7 +89,7 @@ void RawImageSource::green_equilibrate_global(array2D &rawData)
}
//void green_equilibrate()//for dcraw implementation
-void RawImageSource::green_equilibrate(float thresh, array2D &rawData)
+void RawImageSource::green_equilibrate(const GreenEqulibrateThreshold &thresh, array2D &rawData)
{
// thresh = threshold for performing green equilibration; max percentage difference of G1 vs G2
// G1-G2 differences larger than this will be assumed to be Nyquist texture, and left untouched
@@ -119,7 +119,7 @@ void RawImageSource::green_equilibrate(float thresh, array2D &rawData)
}
constexpr float eps = 1.f; //tolerance to avoid dividing by zero
- const float thresh6 = 6 * thresh;
+ // const float thresh6 = 6 * thresh;
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
// Fill G interpolated values with border interpolation and input values
@@ -136,8 +136,8 @@ void RawImageSource::green_equilibrate(float thresh, array2D &rawData)
#ifdef __SSE2__
vfloat zd5v = F2V(0.5f);
vfloat onev = F2V(1.f);
- vfloat threshv = F2V(thresh);
- vfloat thresh6v = F2V(thresh6);
+ // vfloat threshv = F2V(thresh);
+ // vfloat thresh6v = F2V(thresh6);
vfloat epsv = F2V(eps);
#endif
#ifdef _OPENMP
@@ -165,7 +165,13 @@ void RawImageSource::green_equilibrate(float thresh, array2D &rawData)
vfloat c1 = (vabsf(o1_1 - o1_2) + vabsf(o1_1 - o1_3) + vabsf(o1_1 - o1_4) + vabsf(o1_2 - o1_3) + vabsf(o1_3 - o1_4) + vabsf(o1_2 - o1_4));
vfloat c2 = (vabsf(o2_1 - o2_2) + vabsf(o2_1 - o2_3) + vabsf(o2_1 - o2_4) + vabsf(o2_2 - o2_3) + vabsf(o2_3 - o2_4) + vabsf(o2_2 - o2_4));
- vmask mask1 = vmaskf_lt(c1 + c2, thresh6v * vabsf(d1 - d2));
+ vfloat tfv;
+ for (int k = 0; k < 4; ++k) {
+ tfv[k] = thresh(rr, cc + 2 * k);
+ }
+ vfloat tf6v = F2V(6.f) * tfv;
+
+ vmask mask1 = vmaskf_lt(c1 + c2, tf6v * vabsf(d1 - d2));
if (_mm_movemask_ps((vfloat)mask1)) { // if for any of the 4 pixels the condition is true, do the maths for all 4 pixels and mask the unused out at the end
//pixel interpolation
@@ -188,7 +194,7 @@ void RawImageSource::green_equilibrate(float thresh, array2D &rawData)
vfloat ginterp = (gse * wtse + gnw * wtnw + gne * wtne + gsw * wtsw) / (wtse + wtnw + wtne + wtsw);
- vfloat val = vself(vmaskf_lt(ginterp - gin, threshv * (ginterp + gin)), zd5v * (ginterp + gin), gin);
+ vfloat val = vself(vmaskf_lt(ginterp - gin, tfv * (ginterp + gin)), zd5v * (ginterp + gin), gin);
val = vself(mask1, val, gin);
STC2VFU(rawData[rr][cc], val);
}
@@ -213,7 +219,9 @@ void RawImageSource::green_equilibrate(float thresh, array2D &rawData)
float c1 = (fabs(o1_1 - o1_2) + fabs(o1_1 - o1_3) + fabs(o1_1 - o1_4) + fabs(o1_2 - o1_3) + fabs(o1_3 - o1_4) + fabs(o1_2 - o1_4));
float c2 = (fabs(o2_1 - o2_2) + fabs(o2_1 - o2_3) + fabs(o2_1 - o2_4) + fabs(o2_2 - o2_3) + fabs(o2_3 - o2_4) + fabs(o2_2 - o2_4));
- if (c1 + c2 < thresh6 * fabs(d1 - d2)) {
+ float tf = thresh(rr, cc);
+
+ if (c1 + c2 < 6 * tf * fabs(d1 - d2)) {
//pixel interpolation
float gin = cfa[rr][cc >> 1];
@@ -234,7 +242,7 @@ void RawImageSource::green_equilibrate(float thresh, array2D &rawData)
float ginterp = (gse * wtse + gnw * wtnw + gne * wtne + gsw * wtsw) / (wtse + wtnw + wtne + wtsw);
- if (ginterp - gin < thresh * (ginterp + gin)) {
+ if (ginterp - gin < tf * (ginterp + gin)) {
rawData[rr][cc] = 0.5f * (ginterp + gin);
}
}
diff --git a/rtengine/iccstore.h b/rtengine/iccstore.h
index bdb15d2c0..4604404fb 100644
--- a/rtengine/iccstore.h
+++ b/rtengine/iccstore.h
@@ -22,7 +22,7 @@
#include
#include
-#include
+#include
#include
diff --git a/rtengine/image16.cc b/rtengine/image16.cc
index 997d7d992..c545497e3 100644
--- a/rtengine/image16.cc
+++ b/rtengine/image16.cc
@@ -78,7 +78,7 @@ void Image16::getScanline (int row, unsigned char* buffer, int bps)
* void Image16::setScanline (int row, unsigned char* buffer, int bps, int minValue[3], int maxValue[3]);
* has not been implemented yet, because as of now, this method is called for IIOSF_FLOAT sample format only
*/
-void Image16::setScanline (int row, unsigned char* buffer, int bps, float *minValue, float *maxValue)
+void Image16::setScanline (int row, unsigned char* buffer, int bps, unsigned int numSamples, float *minValue, float *maxValue)
{
if (data == nullptr) {
@@ -92,12 +92,17 @@ void Image16::setScanline (int row, unsigned char* buffer, int bps, float *minVa
case (IIOSF_UNSIGNED_CHAR): {
int ix = 0;
- for (int i = 0; i < width; ++i) {
- r(row, i) = static_cast(buffer[ix++]) * 257;
- g(row, i) = static_cast(buffer[ix++]) * 257;
- b(row, i) = static_cast(buffer[ix++]) * 257;
+ if(numSamples == 1) {
+ for (int i = 0; i < width; ++i) {
+ r(row, i) = g(row, i) = b(row, i) = static_cast(buffer[ix++]) * 257;
+ }
+ } else {
+ for (int i = 0; i < width; ++i) {
+ r(row, i) = static_cast(buffer[ix++]) * 257;
+ g(row, i) = static_cast(buffer[ix++]) * 257;
+ b(row, i) = static_cast(buffer[ix++]) * 257;
+ }
}
-
break;
}
diff --git a/rtengine/image16.h b/rtengine/image16.h
index ee402d556..af5642638 100644
--- a/rtengine/image16.h
+++ b/rtengine/image16.h
@@ -56,7 +56,7 @@ public:
return 8 * sizeof(unsigned short);
}
virtual void getScanline (int row, unsigned char* buffer, int bps);
- virtual void setScanline (int row, unsigned char* buffer, int bps, float *minValue = nullptr, float *maxValue = nullptr);
+ virtual void setScanline (int row, unsigned char* buffer, int bps, unsigned int numSamples, float *minValue = nullptr, float *maxValue = nullptr);
// functions inherited from IImage16:
virtual MyMutex& getMutex ()
diff --git a/rtengine/image8.cc b/rtengine/image8.cc
index 86294236b..69066f2dd 100644
--- a/rtengine/image8.cc
+++ b/rtengine/image8.cc
@@ -55,7 +55,7 @@ void Image8::getScanline (int row, unsigned char* buffer, int bps)
}
}
-void Image8::setScanline (int row, unsigned char* buffer, int bps, float *minValue, float *maxValue)
+void Image8::setScanline (int row, unsigned char* buffer, int bps, unsigned int numSamples, float *minValue, float *maxValue)
{
if (data == nullptr) {
@@ -67,7 +67,13 @@ void Image8::setScanline (int row, unsigned char* buffer, int bps, float *minVal
switch (sampleFormat) {
case (IIOSF_UNSIGNED_CHAR):
- memcpy (data + row * width * 3u, buffer, width * 3);
+ if(numSamples == 1) {
+ for(size_t i = 0; i < static_cast(width); ++i) {
+ data[row * width * 3 + 3 * i] = data[row * width * 3 + 3 * i + 1] = data[row * width * 3 + 3 * i + 2] = buffer[i];
+ }
+ } else {
+ memcpy (data + row * width * 3u, buffer, width * 3);
+ }
break;
case (IIOSF_UNSIGNED_SHORT): {
diff --git a/rtengine/image8.h b/rtengine/image8.h
index c4651a07d..eafaa2d46 100644
--- a/rtengine/image8.h
+++ b/rtengine/image8.h
@@ -51,7 +51,7 @@ public:
return 8 * sizeof(unsigned char);
}
virtual void getScanline (int row, unsigned char* buffer, int bps);
- virtual void setScanline (int row, unsigned char* buffer, int bps, float *minValue = nullptr, float *maxValue = nullptr);
+ virtual void setScanline (int row, unsigned char* buffer, int bps, unsigned int numSamples, float *minValue = nullptr, float *maxValue = nullptr);
// functions inherited from IImage*:
virtual MyMutex& getMutex ()
diff --git a/rtengine/imagefloat.cc b/rtengine/imagefloat.cc
index 3b211d15e..f6cc252fa 100644
--- a/rtengine/imagefloat.cc
+++ b/rtengine/imagefloat.cc
@@ -44,7 +44,7 @@ Imagefloat::~Imagefloat ()
}
// Call this method to handle floating points input values of different size
-void Imagefloat::setScanline (int row, unsigned char* buffer, int bps, float *minValue, float *maxValue)
+void Imagefloat::setScanline (int row, unsigned char* buffer, int bps, unsigned int numSamples, float *minValue, float *maxValue)
{
if (data == nullptr) {
diff --git a/rtengine/imagefloat.h b/rtengine/imagefloat.h
index 753406d25..5246a2f6e 100644
--- a/rtengine/imagefloat.h
+++ b/rtengine/imagefloat.h
@@ -60,7 +60,7 @@ public:
return 8 * sizeof(float);
}
virtual void getScanline (int row, unsigned char* buffer, int bps);
- virtual void setScanline (int row, unsigned char* buffer, int bps, float *minValue = nullptr, float *maxValue = nullptr);
+ virtual void setScanline (int row, unsigned char* buffer, int bps, unsigned int numSamples, float *minValue = nullptr, float *maxValue = nullptr);
// functions inherited from IImagefloat:
virtual MyMutex& getMutex ()
diff --git a/rtengine/imageio.cc b/rtengine/imageio.cc
index 147edba53..1d07fbc84 100644
--- a/rtengine/imageio.cc
+++ b/rtengine/imageio.cc
@@ -523,7 +523,7 @@ int ImageIO::loadJPEGFromMemory (const char* buffer, int bufsize)
return IMIO_READERROR;
}
- setScanline (cinfo.output_scanline - 1, row, 8);
+ setScanline (cinfo.output_scanline - 1, row, 8, cinfo.num_components);
if (pl && !(cinfo.output_scanline % 100)) {
pl->setProgress ((double)(cinfo.output_scanline) / cinfo.output_height);
@@ -860,7 +860,7 @@ int ImageIO::loadTIFF (Glib::ustring fname)
}
}
- setScanline (row, linebuffer, bitspersample, nullptr, nullptr);
+ setScanline (row, linebuffer, bitspersample);
if (pl && !(row % 100)) {
pl->setProgress ((double)(row + 1) / height);
diff --git a/rtengine/imageio.h b/rtengine/imageio.h
index 4c0cd56c5..294a3d476 100644
--- a/rtengine/imageio.h
+++ b/rtengine/imageio.h
@@ -113,7 +113,7 @@ public:
virtual int getBPS () = 0;
virtual void getScanline (int row, unsigned char* buffer, int bps) {}
- virtual void setScanline (int row, unsigned char* buffer, int bps, float minValue[3] = nullptr, float maxValue[3] = nullptr) {}
+ virtual void setScanline (int row, unsigned char* buffer, int bps, unsigned int numSamples = 3, float minValue[3] = nullptr, float maxValue[3] = nullptr) {}
virtual bool readImage (Glib::ustring &fname, FILE *fh)
{
diff --git a/rtengine/improcfun.cc b/rtengine/improcfun.cc
index d47c407d6..a7f4bcc33 100644
--- a/rtengine/improcfun.cc
+++ b/rtengine/improcfun.cc
@@ -278,7 +278,6 @@ extern const Settings* settings;
ImProcFunctions::~ImProcFunctions()
{
-
if (monitorTransform) {
cmsDeleteTransform(monitorTransform);
}
@@ -289,12 +288,14 @@ void ImProcFunctions::setScale(double iscale)
scale = iscale;
}
+
void ImProcFunctions::updateColorProfiles(const Glib::ustring& monitorProfile, RenderingIntent monitorIntent, bool softProof, bool gamutCheck)
{
// set up monitor transform
if (monitorTransform) {
cmsDeleteTransform(monitorTransform);
}
+ gamutWarning.reset(nullptr);
monitorTransform = nullptr;
@@ -313,6 +314,9 @@ void ImProcFunctions::updateColorProfiles(const Glib::ustring& monitorProfile, R
cmsUInt32Number flags;
cmsHPROFILE iprof = cmsCreateLab4Profile(nullptr);
+ cmsHPROFILE gamutprof = nullptr;
+ cmsUInt32Number gamutbpc = 0;
+ RenderingIntent gamutintent = RI_RELATIVE;
bool softProofCreated = false;
@@ -339,9 +343,9 @@ void ImProcFunctions::updateColorProfiles(const Glib::ustring& monitorProfile, R
if (oprof) {
// NOCACHE is for thread safety, NOOPTIMIZE for precision
- if (gamutCheck) {
- flags |= cmsFLAGS_GAMUTCHECK;
- }
+ // if (gamutCheck) {
+ // flags |= cmsFLAGS_GAMUTCHECK;
+ // }
monitorTransform = cmsCreateProofingTransform(
iprof, TYPE_Lab_FLT,
@@ -354,18 +358,31 @@ void ImProcFunctions::updateColorProfiles(const Glib::ustring& monitorProfile, R
if (monitorTransform) {
softProofCreated = true;
}
+
+ if (gamutCheck) {
+ gamutprof = oprof;
+ if (params->icm.outputBPC) {
+ gamutbpc = cmsFLAGS_BLACKPOINTCOMPENSATION;
+ }
+ gamutintent = outIntent;
+ }
}
} else if (gamutCheck) {
- flags = cmsFLAGS_GAMUTCHECK | cmsFLAGS_NOOPTIMIZE | cmsFLAGS_NOCACHE;
+ // flags = cmsFLAGS_GAMUTCHECK | cmsFLAGS_NOOPTIMIZE | cmsFLAGS_NOCACHE;
+ // if (settings->monitorBPC) {
+ // flags |= cmsFLAGS_BLACKPOINTCOMPENSATION;
+ // }
+
+ // monitorTransform = cmsCreateProofingTransform(iprof, TYPE_Lab_FLT, monitor, TYPE_RGB_8, monitor, monitorIntent, monitorIntent, flags);
+
+ // if (monitorTransform) {
+ // softProofCreated = true;
+ // }
+ gamutprof = monitor;
if (settings->monitorBPC) {
- flags |= cmsFLAGS_BLACKPOINTCOMPENSATION;
- }
-
- monitorTransform = cmsCreateProofingTransform(iprof, TYPE_Lab_FLT, monitor, TYPE_RGB_8, monitor, monitorIntent, monitorIntent, flags);
-
- if (monitorTransform) {
- softProofCreated = true;
+ gamutbpc = cmsFLAGS_BLACKPOINTCOMPENSATION;
}
+ gamutintent = monitorIntent;
}
if (!softProofCreated) {
@@ -378,6 +395,10 @@ void ImProcFunctions::updateColorProfiles(const Glib::ustring& monitorProfile, R
monitorTransform = cmsCreateTransform(iprof, TYPE_Lab_FLT, monitor, TYPE_RGB_8, monitorIntent, flags);
}
+ if (gamutCheck && gamutprof) {
+ gamutWarning.reset(new GamutWarning(iprof, gamutprof, gamutintent, gamutbpc));
+ }
+
cmsCloseProfile(iprof);
}
}
@@ -5418,6 +5439,13 @@ void ImProcFunctions::luminanceCurve(LabImage* lold, LabImage* lnew, LUTf & curv
void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBuffer, int pW, LabImage* lold, LabImage* lnew, LUTf & acurve, LUTf & bcurve, LUTf & satcurve, LUTf & lhskcurve, LUTf & clcurve, LUTf & curve, bool utili, bool autili, bool butili, bool ccutili, bool cclutili, bool clcutili, LUTu &histCCurve, LUTu &histLCurve)
{
if (!params->labCurve.enabled) {
+ if (params->blackwhite.enabled && !params->colorToning.enabled) {
+ for (int i = 0; i < lnew->H; ++i) {
+ for (int j = 0; j < lnew->W; ++j) {
+ lnew->a[i][j] = lnew->b[i][j] = 0.f;
+ }
+ }
+ }
return;
}
diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h
index ba93e3498..ff914ca2c 100644
--- a/rtengine/improcfun.h
+++ b/rtengine/improcfun.h
@@ -36,6 +36,7 @@
#include "curves.h"
#include "cplx_wavelet_dec.h"
#include "pipettebuffer.h"
+#include "gamutwarning.h"
namespace rtengine
{
@@ -54,8 +55,7 @@ class ImProcFunctions
LabImage *spotbuffer;
cmsHTRANSFORM monitorTransform;
- cmsHTRANSFORM lab2outputTransform;
- cmsHTRANSFORM output2monitorTransform;
+ std::unique_ptr gamutWarning;
const ProcParams* params;
double scale;
@@ -207,7 +207,7 @@ public:
double lumimul[3];
ImProcFunctions(const ProcParams* iparams, bool imultiThread = true)
- : lastcutpast(false), lastcxbuf(0), lastcybuf(0), lastcount(0), spotbuffer(nullptr), monitorTransform(nullptr), lab2outputTransform(nullptr), output2monitorTransform(nullptr), params(iparams), scale(1), multiThread(imultiThread), lumimul{} {}
+ : monitorTransform (nullptr), params (iparams), scale (1), multiThread (imultiThread), lumimul{} {}
~ImProcFunctions();
bool needsLuminanceOnly()
{
diff --git a/rtengine/iplab2rgb.cc b/rtengine/iplab2rgb.cc
index 16eb4f50e..a8e35bd18 100644
--- a/rtengine/iplab2rgb.cc
+++ b/rtengine/iplab2rgb.cc
@@ -52,6 +52,14 @@ void ImProcFunctions::lab2monitorRgb (LabImage* lab, Image8* image)
#endif
{
AlignedBuffer pBuf(3 * lab->W);
+
+ AlignedBuffer gwBuf1;
+ AlignedBuffer gwBuf2;
+ if (gamutWarning) {
+ gwBuf1.resize(3 * lab->W);
+ gwBuf2.resize(3 * lab->W);
+ }
+
float *buffer = pBuf.data;
#ifdef _OPENMP
@@ -74,6 +82,10 @@ void ImProcFunctions::lab2monitorRgb (LabImage* lab, Image8* image)
}
cmsDoTransform (monitorTransform, buffer, data + ix, W);
+
+ if (gamutWarning) {
+ gamutWarning->markLine(image, i, buffer, gwBuf1.data, gwBuf2.data);
+ }
}
} // End of parallelization
} else {
diff --git a/rtengine/pdaflinesfilter.cc b/rtengine/pdaflinesfilter.cc
new file mode 100644
index 000000000..92fd68b41
--- /dev/null
+++ b/rtengine/pdaflinesfilter.cc
@@ -0,0 +1,302 @@
+/* -*- C++ -*-
+ *
+ * This file is part of RawTherapee.
+ *
+ * Copyright (c) 2018 Alberto Griggio
+ *
+ * RawTherapee is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * RawTherapee is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with RawTherapee. If not, see .
+ */
+
+#include "pdaflinesfilter.h"
+#include "settings.h"
+#include
+#include "camconst.h"
+
+namespace rtengine {
+
+extern const Settings *settings;
+
+
+namespace {
+
+class PDAFGreenEqulibrateThreshold: public RawImageSource::GreenEqulibrateThreshold {
+ static constexpr float BASE_THRESHOLD = 0.5f;
+ static constexpr int TILE_SIZE = 200;
+ static constexpr float AREA = TILE_SIZE * TILE_SIZE;
+ static constexpr int PIXEL_COUNT_FACTOR = 12;
+
+public:
+ PDAFGreenEqulibrateThreshold(int w, int h):
+ RawImageSource::GreenEqulibrateThreshold(BASE_THRESHOLD),
+ w_(w),
+ h_(h)
+ {
+ int ctiles = w_ / TILE_SIZE;
+ int rtiles = h_ / TILE_SIZE;
+ tiles_.resize(rtiles+1, std::vector(ctiles+1));
+ }
+
+ void processTiles()
+ {
+ for(size_t i = 0; i < tiles_.size(); ++i) {
+ for(size_t j = 0; j < tiles_[i].size(); ++j) {
+ tiles_[i][j] = tiles_[i][j] * PIXEL_COUNT_FACTOR / (AREA * AREA);
+ }
+ }
+ }
+
+ void increment(int row, int col)
+ {
+ auto &r = tiles_[row / TILE_SIZE];
+ ++r[col / TILE_SIZE];
+ }
+
+ float operator()(int row, int col) const
+ {
+ int y = row / TILE_SIZE;
+ int x = col / TILE_SIZE;
+
+ int cy = y * TILE_SIZE + TILE_SIZE/2;
+ int cx = x * TILE_SIZE + TILE_SIZE/2;
+
+ int x1 = col > cx ? x+1 : x-1;
+ int y1 = row > cy ? y+1 : y-1;
+
+ float fxy = tile_factor(y, x);
+ float f = 0.f;
+
+ if (x1 >= 0 && size_t(x1) < tiles_[y].size()) {
+ if (y1 >= 0 && size_t(y1) < tiles_.size()) {
+ // bilinear interpolation
+ float fx1y = tile_factor(y, x1);
+ float fx1y1 = tile_factor(y1, x1);
+ float fxy1 = tile_factor(y1, x);
+
+ // x direction
+ int d = std::abs(cx - col);
+ float f1 = fxy * (TILE_SIZE - d) + fx1y * float(d);
+ float f2 = fxy1 * (TILE_SIZE - d) + fx1y1 * float(d);
+ // y direction
+ d = std::abs(cy - row);
+ f = (f1 * (TILE_SIZE - d) + f2 * float(d));
+ } else {
+ float f2 = tile_factor(y, x1);
+ int d = std::abs(cx - col);
+ f = (fxy * float(TILE_SIZE - d) + f2 * float(d)) * TILE_SIZE;
+ }
+ } else if (y1 >= 0 && size_t(y1) < tiles_.size()) {
+ float f2 = tile_factor(y1, x);
+ int d = std::abs(cy - row);
+ f = (fxy * float(TILE_SIZE - d) + f2 * float(d)) * TILE_SIZE;
+ } else {
+ f = fxy * AREA;
+ }
+
+ return thresh_ * f;
+ }
+
+ void print() const
+ {
+ std::cout << "PDAFGreenEqulibrateThreshold:\n";
+ for (size_t row = 0; row < tiles_.size(); ++row) {
+ for (size_t col = 0; col < tiles_.size(); ++col) {
+ std::cout << " " << tile_factor(row, col);
+ }
+ std::cout << std::endl;
+ }
+ }
+
+private:
+ float tile_factor(int y, int x) const
+ {
+ return tiles_[y][x];
+ }
+
+ int w_;
+ int h_;
+ std::vector> tiles_;
+};
+
+
+class PDAFLineDenoiseRowFilter: public RawImageSource::CFALineDenoiseRowBlender {
+public:
+ PDAFLineDenoiseRowFilter(const std::vector &pattern, int offset):
+ pattern_(pattern),
+ offset_(offset)
+ {}
+
+ float operator()(int row) const
+ {
+ static constexpr float BORDER[] = { 1.f, 1.f, 0.8f, 0.5f, 0.2f };
+ static constexpr int BORDER_WIDTH = sizeof(BORDER)/sizeof(float) - 1;
+
+ if (!pattern_.empty()) {
+ int key = (row - offset_) % pattern_.back();
+ auto it = std::lower_bound(pattern_.begin(), pattern_.end(), key);
+
+ int b = *it;
+ int d = b - key;
+
+ if (it > pattern_.begin()) {
+ int b2 = *(it-1);
+ int d2 = key - b2;
+ float f = BORDER[std::min(std::min(d, d2), BORDER_WIDTH)];
+ return f;
+ } else {
+ float f = BORDER[std::min(d, BORDER_WIDTH)];
+ return f;
+ }
+ }
+ return 0.f;
+ }
+
+private:
+ std::vector pattern_;
+ int offset_;
+};
+
+} // namespace
+
+
+
+PDAFLinesFilter::PDAFLinesFilter(RawImage *ri):
+ ri_(ri),
+ W_(ri->get_width()),
+ H_(ri->get_height())
+{
+ gthresh_ = new PDAFGreenEqulibrateThreshold(W_, H_);
+
+ CameraConstantsStore* ccs = CameraConstantsStore::getInstance();
+ CameraConst *cc = ccs->get(ri_->get_maker().c_str(), ri_->get_model().c_str());
+
+ if (cc) {
+ pattern_ = cc->get_pdafPattern();
+ if(!pattern_.empty()) {
+ offset_ = cc->get_pdafOffset();
+ }
+ }
+}
+
+
+PDAFLinesFilter::~PDAFLinesFilter()
+{
+ delete gthresh_;
+}
+
+
+RawImageSource::GreenEqulibrateThreshold &PDAFLinesFilter::greenEqThreshold()
+{
+ return *gthresh_;
+}
+
+
+std::unique_ptr PDAFLinesFilter::lineDenoiseRowBlender()
+{
+ return std::unique_ptr(new PDAFLineDenoiseRowFilter(pattern_, offset_));
+}
+
+
+int PDAFLinesFilter::markLine(array2D &rawData, PixelsMap &bpMap, int y)
+{
+ rowmap_.clear();
+ rowmap_.resize((W_+1)/2, false);
+ int marked = 0;
+
+ for (int x = 1 + (ri_->FC(y, 0) & 1); x < W_-1; x += 2) {
+ const float
+ g0 = rawData[y][x],
+ g1 = rawData[y-1][x+1],
+ g2 = rawData[y+1][x+1],
+ g3 = rawData[y-1][x-1],
+ g4 = rawData[y+1][x-1];
+ if (g0 > max(g1, g2, g3, g4)) {
+ const float gu = g2 + g4;
+ const float gd = g1 + g3;
+ const float gM = max(gu, gd);
+ const float gm = min(gu, gd);
+ const float d = (gM - gm) / gM;
+ if (d < 0.2f && (1.f - (gm + gM)/(4.f * g0)) > std::min(d, 0.1f)) {
+ rowmap_[x/2] = true;
+ }
+ }
+ }
+
+ PDAFGreenEqulibrateThreshold *m = static_cast(gthresh_);
+
+ for (int x = 2 + (ri_->FC(y, 1) & 1); x < W_-2; x += 2) {
+ const int i = x/2;
+ if (rowmap_[i+1]) {
+ if (rowmap_[i]) {
+ if (rowmap_[i-1]) {
+ for (int xx = x-2; xx <= x+2; ++xx) {
+ if (!bpMap.get(xx, y)) {
+ bpMap.set(xx, y);
+ m->increment(y, xx);
+ ++marked;
+ }
+ }
+ }
+ } else {
+ x += 2;
+ }
+ } else {
+ x += 4;
+ }
+ }
+
+ return marked;
+}
+
+
+int PDAFLinesFilter::mark(array2D &rawData, PixelsMap &bpMap)
+{
+
+ if (pattern_.empty()) {
+ if (settings->verbose) {
+ std::cout << "no PDAF pattern known for " << ri_->get_maker() << " " << ri_->get_model() << std::endl;
+ }
+ return 0;
+ }
+
+ size_t idx = 0;
+ int off = offset_;
+
+ int found = 0;
+ for (int y = 1; y < H_-1; ++y) {
+ int yy = pattern_[idx] + off;
+ if (y == yy) {
+ int n = markLine(rawData, bpMap, y) + markLine(rawData, bpMap, y-1) + markLine(rawData, bpMap, y+1);
+ if (n) {
+ found += n;
+ if (settings->verbose) {
+ std::cout << "marked " << n << " pixels in PDAF line at " << y << std::endl;
+ }
+ }
+ } else if (y > yy) {
+ ++idx;
+ if (idx >= pattern_.size()) {
+ idx = 0;
+ off += pattern_.back();
+ }
+ }
+ }
+
+ if (settings->verbose) {
+ static_cast(gthresh_)->print();
+ }
+ static_cast(gthresh_)->processTiles();
+ return found;
+}
+
+} // namespace rtengine
diff --git a/rtengine/pdaflinesfilter.h b/rtengine/pdaflinesfilter.h
new file mode 100644
index 000000000..9837db5b6
--- /dev/null
+++ b/rtengine/pdaflinesfilter.h
@@ -0,0 +1,49 @@
+/* -*- C++ -*-
+ *
+ * This file is part of RawTherapee.
+ *
+ * Copyright (c) 2018 Alberto Griggio
+ *
+ * RawTherapee is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * RawTherapee is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with RawTherapee. If not, see .
+ */
+
+#pragma once
+
+#include "rawimagesource.h"
+#include
+
+namespace rtengine {
+
+class PDAFLinesFilter {
+public:
+ PDAFLinesFilter(RawImage *ri);
+ ~PDAFLinesFilter();
+
+ int mark(array2D &rawData, PixelsMap &bpMap);
+ RawImageSource::GreenEqulibrateThreshold &greenEqThreshold();
+ std::unique_ptr lineDenoiseRowBlender();
+
+private:
+ int markLine(array2D &rawData, PixelsMap &bpMap, int y);
+
+ RawImage *ri_;
+ int W_;
+ int H_;
+ std::vector pattern_;
+ int offset_;
+ std::vector rowmap_;
+ RawImageSource::GreenEqulibrateThreshold *gthresh_;
+};
+
+} // namespace rtengine
diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc
index 6bb8f3a5b..ed41d7ce2 100644
--- a/rtengine/procparams.cc
+++ b/rtengine/procparams.cc
@@ -2726,6 +2726,7 @@ RAWParams::BayerSensor::BayerSensor() :
black3(0.0),
twogreen(true),
linenoise(0),
+ linenoiseDirection(LineNoiseDirection::BOTH),
greenthresh(0),
dcb_iterations(2),
lmmse_iterations(2),
@@ -2760,7 +2761,8 @@ RAWParams::BayerSensor::BayerSensor() :
pixelShiftNonGreenCross(true),
pixelShiftNonGreenCross2(false),
pixelShiftNonGreenAmaze(false),
- dcb_enhance(true)
+ dcb_enhance(true),
+ pdafLinesFilter(false)
{
}
@@ -2776,6 +2778,7 @@ bool RAWParams::BayerSensor::operator ==(const BayerSensor& other) const
&& black3 == other.black3
&& twogreen == other.twogreen
&& linenoise == other.linenoise
+ && linenoiseDirection == other.linenoiseDirection
&& greenthresh == other.greenthresh
&& dcb_iterations == other.dcb_iterations
&& lmmse_iterations == other.lmmse_iterations
@@ -2810,7 +2813,8 @@ bool RAWParams::BayerSensor::operator ==(const BayerSensor& other) const
&& pixelShiftNonGreenCross == other.pixelShiftNonGreenCross
&& pixelShiftNonGreenCross2 == other.pixelShiftNonGreenCross2
&& pixelShiftNonGreenAmaze == other.pixelShiftNonGreenAmaze
- && dcb_enhance == other.dcb_enhance;
+ && dcb_enhance == other.dcb_enhance
+ && pdafLinesFilter == other.pdafLinesFilter;
}
bool RAWParams::BayerSensor::operator !=(const BayerSensor& other) const
@@ -3868,6 +3872,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || pedited->raw.bayersensor.exBlack3, "RAW Bayer", "PreBlack3", raw.bayersensor.black3, keyFile);
saveToKeyfile(!pedited || pedited->raw.bayersensor.exTwoGreen, "RAW Bayer", "PreTwoGreen", raw.bayersensor.twogreen, keyFile);
saveToKeyfile(!pedited || pedited->raw.bayersensor.linenoise, "RAW Bayer", "LineDenoise", raw.bayersensor.linenoise, keyFile);
+ saveToKeyfile(!pedited || pedited->raw.bayersensor.linenoise, "RAW Bayer", "LineDenoiseDirection", toUnderlying(raw.bayersensor.linenoiseDirection), keyFile);
saveToKeyfile(!pedited || pedited->raw.bayersensor.greenEq, "RAW Bayer", "GreenEqThreshold", raw.bayersensor.greenthresh, keyFile);
saveToKeyfile(!pedited || pedited->raw.bayersensor.dcbIterations, "RAW Bayer", "DCBIterations", raw.bayersensor.dcb_iterations, keyFile);
saveToKeyfile(!pedited || pedited->raw.bayersensor.dcbEnhance, "RAW Bayer", "DCBEnhance", raw.bayersensor.dcb_enhance, keyFile);
@@ -3903,6 +3908,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftNonGreenCross, "RAW Bayer", "pixelShiftNonGreenCross", raw.bayersensor.pixelShiftNonGreenCross, keyFile);
saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftNonGreenCross2, "RAW Bayer", "pixelShiftNonGreenCross2", raw.bayersensor.pixelShiftNonGreenCross2, keyFile);
saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftNonGreenAmaze, "RAW Bayer", "pixelShiftNonGreenAmaze", raw.bayersensor.pixelShiftNonGreenAmaze, keyFile);
+ saveToKeyfile(!pedited || pedited->raw.bayersensor.pdafLinesFilter, "RAW Bayer", "PDAFLinesFilter", raw.bayersensor.pdafLinesFilter, keyFile);
saveToKeyfile(!pedited || pedited->raw.xtranssensor.method, "RAW X-Trans", "Method", raw.xtranssensor.method, keyFile);
saveToKeyfile(!pedited || pedited->raw.xtranssensor.ccSteps, "RAW X-Trans", "CcSteps", raw.xtranssensor.ccSteps, keyFile);
saveToKeyfile(!pedited || pedited->raw.xtranssensor.exBlackRed, "RAW X-Trans", "PreBlackRed", raw.xtranssensor.blackred, keyFile);
@@ -5350,6 +5356,12 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "RAW Bayer", "PreBlack3", pedited, raw.bayersensor.black3, pedited->raw.bayersensor.exBlack3);
assignFromKeyfile(keyFile, "RAW Bayer", "PreTwoGreen", pedited, raw.bayersensor.twogreen, pedited->raw.bayersensor.exTwoGreen);
assignFromKeyfile(keyFile, "RAW Bayer", "LineDenoise", pedited, raw.bayersensor.linenoise, pedited->raw.bayersensor.linenoise);
+ if (keyFile.has_key("RAW Bayer", "LineDenoiseDirection")) {
+ raw.bayersensor.linenoiseDirection = RAWParams::BayerSensor::LineNoiseDirection(keyFile.get_integer("RAW Bayer", "LineDenoiseDirection"));
+ if (pedited) {
+ pedited->raw.bayersensor.linenoiseDirection = true;
+ }
+ }
assignFromKeyfile(keyFile, "RAW Bayer", "GreenEqThreshold", pedited, raw.bayersensor.greenthresh, pedited->raw.bayersensor.greenEq);
assignFromKeyfile(keyFile, "RAW Bayer", "DCBIterations", pedited, raw.bayersensor.dcb_iterations, pedited->raw.bayersensor.dcbIterations);
assignFromKeyfile(keyFile, "RAW Bayer", "DCBEnhance", pedited, raw.bayersensor.dcb_enhance, pedited->raw.bayersensor.dcbEnhance);
@@ -5400,6 +5412,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftNonGreenCross", pedited, raw.bayersensor.pixelShiftNonGreenCross, pedited->raw.bayersensor.pixelShiftNonGreenCross);
assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftNonGreenCross2", pedited, raw.bayersensor.pixelShiftNonGreenCross2, pedited->raw.bayersensor.pixelShiftNonGreenCross2);
assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftNonGreenAmaze", pedited, raw.bayersensor.pixelShiftNonGreenAmaze, pedited->raw.bayersensor.pixelShiftNonGreenAmaze);
+ assignFromKeyfile(keyFile, "RAW Bayer", "PDAFLinesFilter", pedited, raw.bayersensor.pdafLinesFilter, pedited->raw.bayersensor.pdafLinesFilter);
}
if (keyFile.has_group("RAW X-Trans")) {
diff --git a/rtengine/procparams.h b/rtengine/procparams.h
index 9ee0a49e2..1d2e087d5 100644
--- a/rtengine/procparams.h
+++ b/rtengine/procparams.h
@@ -1399,6 +1399,13 @@ struct RAWParams {
double black3;
bool twogreen;
int linenoise;
+ enum class LineNoiseDirection {
+ HORIZONTAL = 1,
+ VERTICAL,
+ BOTH,
+ PDAF_LINES = 5
+ };
+ LineNoiseDirection linenoiseDirection;
int greenthresh;
int dcb_iterations;
int lmmse_iterations;
@@ -1434,6 +1441,7 @@ struct RAWParams {
bool pixelShiftNonGreenCross2;
bool pixelShiftNonGreenAmaze;
bool dcb_enhance;
+ bool pdafLinesFilter;
BayerSensor();
diff --git a/rtengine/rawimage.cc b/rtengine/rawimage.cc
index 5857279b9..0706ebec7 100644
--- a/rtengine/rawimage.cc
+++ b/rtengine/rawimage.cc
@@ -333,10 +333,16 @@ skip_block:
pre_mul_[3] = pre_mul_[1] = (pre_mul_[3] + pre_mul_[1]) / 2;
}
- if (colors == 1)
+ if (colors == 1) {
+ // there are monochrome cameras with wrong matrix. We just replace with this one.
+ rgb_cam[0][0] = 1; rgb_cam[1][0] = 0; rgb_cam[2][0] = 0;
+ rgb_cam[0][1] = 0; rgb_cam[1][1] = 1; rgb_cam[2][1] = 0;
+ rgb_cam[0][2] = 0; rgb_cam[1][2] = 0; rgb_cam[2][2] = 1;
+
for (c = 1; c < 4; c++) {
cblack_[c] = cblack_[0];
}
+ }
bool multiple_whites = false;
int largest_white = this->get_white(0);
@@ -455,7 +461,11 @@ int RawImage::loadRaw(bool loadData, unsigned int imageNum, bool closeFile, Prog
}
if (!strcmp(make, "Fujifilm") && raw_height * raw_width * 2u != raw_size) {
- parse_fuji_compressed_header();
+ if (raw_width * raw_height * 7 / 4 == raw_size) {
+ load_raw = &RawImage::fuji_14bit_load_raw;
+ } else {
+ parse_fuji_compressed_header();
+ }
}
if (flip == 5) {
diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc
index 1b976d996..4dd4e043d 100644
--- a/rtengine/rawimagesource.cc
+++ b/rtengine/rawimagesource.cc
@@ -34,6 +34,7 @@
#include "rt_math.h"
#include "improcfun.h"
#include "rtlensfun.h"
+#include "pdaflinesfilter.h"
#ifdef _OPENMP
#include
#endif
@@ -1600,7 +1601,7 @@ int RawImageSource::load(const Glib::ustring &fname)
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++) {
- imatrices.rgb_cam[i][j] = ri->get_rgb_cam(i, j);
+ imatrices.rgb_cam[i][j] = ri->get_colors() == 1 ? (i == j) : ri->get_rgb_cam(i, j);
}
// compute inverse of the color transformation matrix
@@ -1931,6 +1932,32 @@ void RawImageSource::preprocess(const RAWParams &raw, const LensProfParams &lens
}
}
+ if (ri->getSensorType() == ST_BAYER && raw.bayersensor.pdafLinesFilter) {
+ PDAFLinesFilter f(ri);
+
+ if (!bitmapBads) {
+ bitmapBads = new PixelsMap(W, H);
+ }
+
+ int n = f.mark(rawData, *bitmapBads);
+ totBP += n;
+
+ if (n > 0) {
+ if (settings->verbose) {
+ printf("Marked %d hot pixels from PDAF lines\n", n);
+ }
+
+ auto &thresh = f.greenEqThreshold();
+ if (numFrames == 4) {
+ for (int i = 0; i < 4; ++i) {
+ green_equilibrate(thresh, *rawDataFrames[i]);
+ }
+ } else {
+ green_equilibrate(thresh, rawData);
+ }
+ }
+ }
+
// check if it is an olympus E camera or green equilibration is enabled. If yes, compute G channel pre-compensation factors
if (ri->getSensorType() == ST_BAYER && (raw.bayersensor.greenthresh || (((idata->getMake().size() >= 7 && idata->getMake().substr(0, 7) == "OLYMPUS" && idata->getModel()[0] == 'E') || (idata->getMake().size() >= 9 && idata->getMake().substr(0, 9) == "Panasonic")) && raw.bayersensor.method != RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::VNG4)))) {
// global correction
@@ -1949,12 +1976,14 @@ void RawImageSource::preprocess(const RAWParams &raw, const LensProfParams &lens
plistener->setProgress(0.0);
}
+ GreenEqulibrateThreshold thresh(0.01 * raw.bayersensor.greenthresh);
+
if (numFrames == 4) {
for (int i = 0; i < 4; ++i) {
- green_equilibrate(0.01 * raw.bayersensor.greenthresh, *rawDataFrames[i]);
+ green_equilibrate(thresh, *rawDataFrames[i]);
}
} else {
- green_equilibrate(0.01 * raw.bayersensor.greenthresh, rawData);
+ green_equilibrate(thresh, rawData);
}
}
@@ -1981,7 +2010,15 @@ void RawImageSource::preprocess(const RAWParams &raw, const LensProfParams &lens
plistener->setProgress(0.0);
}
- cfa_linedn(0.00002 * (raw.bayersensor.linenoise));
+ std::unique_ptr line_denoise_rowblender;
+ if (raw.bayersensor.linenoiseDirection == RAWParams::BayerSensor::LineNoiseDirection::PDAF_LINES) {
+ PDAFLinesFilter f(ri);
+ line_denoise_rowblender = f.lineDenoiseRowBlender();
+ } else {
+ line_denoise_rowblender.reset(new CFALineDenoiseRowBlender());
+ }
+
+ cfa_linedn(0.00002 * (raw.bayersensor.linenoise), int(raw.bayersensor.linenoiseDirection) & int(RAWParams::BayerSensor::LineNoiseDirection::VERTICAL), int(raw.bayersensor.linenoiseDirection) & int(RAWParams::BayerSensor::LineNoiseDirection::HORIZONTAL), *line_denoise_rowblender);
}
if ((raw.ca_autocorrect || fabs(raw.cared) > 0.001 || fabs(raw.cablue) > 0.001) && ri->getSensorType() == ST_BAYER) { // Auto CA correction disabled for X-Trans, for now...
diff --git a/rtengine/rawimagesource.h b/rtengine/rawimagesource.h
index 545248d2c..9b2213a2b 100644
--- a/rtengine/rawimagesource.h
+++ b/rtengine/rawimagesource.h
@@ -221,6 +221,21 @@ public:
return numFrames;
}
+ class GreenEqulibrateThreshold {
+ public:
+ explicit GreenEqulibrateThreshold(float thresh): thresh_(thresh) {}
+ virtual ~GreenEqulibrateThreshold() {}
+ virtual float operator()(int row, int column) const { return thresh_; }
+ protected:
+ const float thresh_;
+ };
+
+ class CFALineDenoiseRowBlender {
+ public:
+ virtual ~CFALineDenoiseRowBlender() {}
+ virtual float operator()(int row) const { return 1.f; }
+ };
+
protected:
typedef unsigned short ushort;
void processFalseColorCorrection(Imagefloat* i, const int steps);
@@ -242,10 +257,10 @@ protected:
int interpolateBadPixelsXtrans(PixelsMap &bitmapBads);
int findHotDeadPixels(PixelsMap &bpMap, float thresh, bool findHotPixels, bool findDeadPixels);
- void cfa_linedn(float linenoiselevel); //Emil's line denoise
+ void cfa_linedn (float linenoiselevel, bool horizontal, bool vertical, const CFALineDenoiseRowBlender &rowblender);//Emil's line denoise
void green_equilibrate_global(array2D &rawData);
- void green_equilibrate(float greenthresh, array2D &rawData); //Emil's green equilibration
+ void green_equilibrate (const GreenEqulibrateThreshold &greenthresh, array2D &rawData);//Emil's green equilibration
void nodemosaic(bool bw);
void eahd_demosaic();
diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc
index 790892b72..29f65b57a 100644
--- a/rtengine/simpleprocess.cc
+++ b/rtengine/simpleprocess.cc
@@ -2656,6 +2656,7 @@ private:
params.sharpening = params.prsharpening;
} else {
params.sharpening.radius *= scale_factor;
+ params.sharpening.deconvradius *= scale_factor;
}
params.impulseDenoise.thresh *= scale_factor;
@@ -2665,12 +2666,13 @@ private:
}
params.wavelet.strength *= scale_factor;
- params.dirpyrDenoise.luma *= scale_factor * scale_factor;
+ double noise_factor = (1.0 - scale_factor);
+ params.dirpyrDenoise.luma *= noise_factor; // * scale_factor;
//params.dirpyrDenoise.Ldetail += (100 - params.dirpyrDenoise.Ldetail) * scale_factor;
auto &lcurve = params.dirpyrDenoise.lcurve;
for (size_t i = 2; i < lcurve.size(); i += 4) {
- lcurve[i] *= min(scale_factor * scale_factor, 1.0);
+ lcurve[i] *= min(noise_factor /* * scale_factor*/, 1.0);
}
noiseLCurve.Set(lcurve);
@@ -2717,6 +2719,8 @@ private:
if (params.raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::PIXELSHIFT)) {
params.raw.bayersensor.method = procparams::RAWParams::BayerSensor::getMethodString(params.raw.bayersensor.pixelShiftLmmse ? procparams::RAWParams::BayerSensor::Method::LMMSE : procparams::RAWParams::BayerSensor::Method::AMAZE);
+ } else if (params.raw.bayersensor.method == procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::AMAZE)) {
+ params.raw.bayersensor.method = procparams::RAWParams::BayerSensor::getMethodString(procparams::RAWParams::BayerSensor::Method::RCD);
}
// Use Rcd instead of Amaze for fast export
diff --git a/rtgui/bayerpreprocess.cc b/rtgui/bayerpreprocess.cc
index 51a0cb62a..c43bdb4d8 100644
--- a/rtgui/bayerpreprocess.cc
+++ b/rtgui/bayerpreprocess.cc
@@ -18,6 +18,7 @@
*/
#include "bayerpreprocess.h"
#include "guiutils.h"
+#include "eventmapper.h"
#include
using namespace rtengine;
@@ -25,6 +26,10 @@ using namespace rtengine::procparams;
BayerPreProcess::BayerPreProcess () : FoldableToolPanel(this, "bayerpreprocess", M("TP_PREPROCESS_LABEL"), true)
{
+ auto m = ProcEventMapper::getInstance();
+ EvLineDenoiseDirection = m->newEvent(DARKFRAME, "HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION");
+ EvPDAFLinesFilter = m->newEvent(DARKFRAME, "HISTORY_MSG_PREPROCESS_PDAFLINESFILTER");
+
lineDenoise = Gtk::manage(new Adjuster (M("TP_PREPROCESS_LINEDENOISE"), 0, 1000, 1, 0));
lineDenoise->setAdjusterListener (this);
@@ -43,12 +48,32 @@ BayerPreProcess::BayerPreProcess () : FoldableToolPanel(this, "bayerpreprocess",
greenEqThreshold->show();
+ Gtk::HBox *hb = Gtk::manage(new Gtk::HBox());
+ hb->pack_start(*Gtk::manage(new Gtk::Label(M("TP_PREPROCESS_LINEDENOISE_DIRECTION") + ": ")), Gtk::PACK_SHRINK, 0);
+ lineDenoiseDirection = Gtk::manage(new MyComboBoxText());
+ lineDenoiseDirection->append(M("TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL"));
+ lineDenoiseDirection->append(M("TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL"));
+ lineDenoiseDirection->append(M("TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH"));
+ lineDenoiseDirection->append(M("TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES"));
+ lineDenoiseDirection->show();
+ lineDenoiseDirection->signal_changed().connect(sigc::mem_fun(*this, &BayerPreProcess::lineDenoiseDirectionChanged));
+
+ hb->pack_start(*lineDenoiseDirection);
+
pack_start( *lineDenoise, Gtk::PACK_SHRINK, 4);
+ pack_start(*hb, Gtk::PACK_SHRINK, 4);
pack_start( *Gtk::manage (new Gtk::HSeparator()));
pack_start( *greenEqThreshold, Gtk::PACK_SHRINK, 4);
+ pdafLinesFilter = Gtk::manage(new Gtk::CheckButton((M("TP_PREPROCESS_PDAFLINESFILTER"))));
+ pdafLinesFilter->set_tooltip_markup(M("TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP"));
+ pdafLinesFilter->show();
+ pdafLinesFilter->signal_toggled().connect(sigc::mem_fun(*this, &BayerPreProcess::pdafLinesFilterChanged), true);
+
+ pack_start(*Gtk::manage(new Gtk::HSeparator()));
+ pack_start(*pdafLinesFilter, Gtk::PACK_SHRINK, 4);
}
void BayerPreProcess::read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited)
@@ -58,10 +83,20 @@ void BayerPreProcess::read(const rtengine::procparams::ProcParams* pp, const Par
if(pedited ) {
lineDenoise->setEditedState( pedited->raw.bayersensor.linenoise ? Edited : UnEdited );
greenEqThreshold->setEditedState( pedited->raw.bayersensor.greenEq ? Edited : UnEdited );
+ if (!pedited->raw.bayersensor.linenoiseDirection) {
+ lineDenoiseDirection->set_active(3);
+ }
+ pdafLinesFilter->set_inconsistent(!pedited->raw.bayersensor.pdafLinesFilter);
}
lineDenoise->setValue (pp->raw.bayersensor.linenoise);
+ int d = int(pp->raw.bayersensor.linenoiseDirection)-1;
+ if (d == 4) {
+ --d;
+ }
+ lineDenoiseDirection->set_active(d);
greenEqThreshold->setValue (pp->raw.bayersensor.greenthresh);
+ pdafLinesFilter->set_active(pp->raw.bayersensor.pdafLinesFilter);
enableListener ();
}
@@ -69,11 +104,19 @@ void BayerPreProcess::read(const rtengine::procparams::ProcParams* pp, const Par
void BayerPreProcess::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pedited)
{
pp->raw.bayersensor.linenoise = lineDenoise->getIntValue();
+ int d = lineDenoiseDirection->get_active_row_number() + 1;
+ if (d == 4) {
+ ++d;
+ }
+ pp->raw.bayersensor.linenoiseDirection = RAWParams::BayerSensor::LineNoiseDirection(d);
pp->raw.bayersensor.greenthresh = greenEqThreshold->getIntValue();
+ pp->raw.bayersensor.pdafLinesFilter = pdafLinesFilter->get_active();
if (pedited) {
pedited->raw.bayersensor.linenoise = lineDenoise->getEditedState ();
pedited->raw.bayersensor.greenEq = greenEqThreshold->getEditedState ();
+ pedited->raw.bayersensor.linenoise = lineDenoiseDirection->get_active_row_number() != 3;
+ pedited->raw.bayersensor.pdafLinesFilter = !pdafLinesFilter->get_inconsistent();
}
}
@@ -96,6 +139,9 @@ void BayerPreProcess::setBatchMode(bool batchMode)
ToolPanel::setBatchMode (batchMode);
lineDenoise->showEditedCB ();
greenEqThreshold->showEditedCB ();
+ if (batchMode) {
+ lineDenoiseDirection->append(M("GENERAL_UNCHANGED"));
+ }
}
void BayerPreProcess::setDefaults(const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited)
@@ -125,3 +171,18 @@ void BayerPreProcess::trimValues (rtengine::procparams::ProcParams* pp)
lineDenoise->trimValue(pp->raw.bayersensor.linenoise);
greenEqThreshold->trimValue(pp->raw.bayersensor.greenthresh);
}
+
+
+void BayerPreProcess::lineDenoiseDirectionChanged()
+{
+ if (listener) {
+ listener->panelChanged(EvLineDenoiseDirection, lineDenoiseDirection->get_active_text());
+ }
+}
+
+void BayerPreProcess::pdafLinesFilterChanged()
+{
+ if (listener) {
+ listener->panelChanged(EvPDAFLinesFilter, pdafLinesFilter->get_active() ? M("GENERAL_ENABLED") : M("GENERAL_DISABLED"));
+ }
+}
diff --git a/rtgui/bayerpreprocess.h b/rtgui/bayerpreprocess.h
index 15b2ef7e5..c27e76e00 100644
--- a/rtgui/bayerpreprocess.h
+++ b/rtgui/bayerpreprocess.h
@@ -30,8 +30,13 @@ class BayerPreProcess : public ToolParamBlock, public AdjusterListener, public F
protected:
Adjuster* lineDenoise;
+ MyComboBoxText *lineDenoiseDirection;
Adjuster* greenEqThreshold;
+ Gtk::CheckButton *pdafLinesFilter;
+ rtengine::ProcEvent EvLineDenoiseDirection;
+ rtengine::ProcEvent EvPDAFLinesFilter;
+
public:
BayerPreProcess ();
@@ -45,6 +50,8 @@ public:
void hotDeadPixelChanged();
void setAdjusterBehavior (bool linedenoiseadd, bool greenequiladd);
void trimValues (rtengine::procparams::ProcParams* pp);
+ void lineDenoiseDirectionChanged();
+ void pdafLinesFilterChanged();
};
#endif
diff --git a/rtgui/cropwindow.cc b/rtgui/cropwindow.cc
index 2b20de001..08ea9d0f7 100644
--- a/rtgui/cropwindow.cc
+++ b/rtgui/cropwindow.cc
@@ -289,7 +289,7 @@ void CropWindow::scroll (int state, GdkScrollDirection direction, int x, int y)
if (direction == GDK_SCROLL_UP && !isMaxZoom()) {
zoomIn (true, newCenterX, newCenterY);
- } else if (!isMinZoom()) {
+ } else if (direction == GDK_SCROLL_DOWN && !isMinZoom()) {
zoomOut (true, newCenterX, newCenterY);
}
}
diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc
index a753278ef..4e7977ac0 100644
--- a/rtgui/paramsedited.cc
+++ b/rtgui/paramsedited.cc
@@ -550,6 +550,8 @@ void ParamsEdited::set(bool v)
raw.bayersensor.pixelShiftNonGreenAmaze = v;
raw.bayersensor.greenEq = v;
raw.bayersensor.linenoise = v;
+ raw.bayersensor.linenoiseDirection = v;
+ raw.bayersensor.pdafLinesFilter = v;
raw.xtranssensor.method = v;
raw.xtranssensor.ccSteps = v;
raw.xtranssensor.exBlackRed = v;
@@ -1228,6 +1230,8 @@ void ParamsEdited::initFrom(const std::vector&
raw.bayersensor.pixelShiftNonGreenAmaze = raw.bayersensor.pixelShiftNonGreenAmaze && p.raw.bayersensor.pixelShiftNonGreenAmaze == other.raw.bayersensor.pixelShiftNonGreenAmaze;
raw.bayersensor.greenEq = raw.bayersensor.greenEq && p.raw.bayersensor.greenthresh == other.raw.bayersensor.greenthresh;
raw.bayersensor.linenoise = raw.bayersensor.linenoise && p.raw.bayersensor.linenoise == other.raw.bayersensor.linenoise;
+ raw.bayersensor.linenoiseDirection = raw.bayersensor.linenoiseDirection && p.raw.bayersensor.linenoiseDirection == other.raw.bayersensor.linenoiseDirection;
+ raw.bayersensor.pdafLinesFilter = raw.bayersensor.pdafLinesFilter && p.raw.bayersensor.pdafLinesFilter == other.raw.bayersensor.pdafLinesFilter;
raw.xtranssensor.method = raw.xtranssensor.method && p.raw.xtranssensor.method == other.raw.xtranssensor.method;
raw.xtranssensor.ccSteps = raw.xtranssensor.ccSteps && p.raw.xtranssensor.ccSteps == other.raw.xtranssensor.ccSteps;
raw.xtranssensor.exBlackRed = raw.xtranssensor.exBlackRed && p.raw.xtranssensor.blackred == other.raw.xtranssensor.blackred;
@@ -3318,6 +3322,14 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.raw.bayersensor.linenoise = dontforceSet && options.baBehav[ADDSET_PREPROCESS_LINEDENOISE] ? toEdit.raw.bayersensor.linenoise + mods.raw.bayersensor.linenoise : mods.raw.bayersensor.linenoise;
}
+ if (raw.bayersensor.linenoiseDirection) {
+ toEdit.raw.bayersensor.linenoiseDirection = mods.raw.bayersensor.linenoiseDirection;
+ }
+
+ if (raw.bayersensor.pdafLinesFilter) {
+ toEdit.raw.bayersensor.pdafLinesFilter = mods.raw.bayersensor.pdafLinesFilter;
+ }
+
if (raw.xtranssensor.method) {
toEdit.raw.xtranssensor.method = mods.raw.xtranssensor.method;
}
@@ -3826,7 +3838,7 @@ bool RAWParamsEdited::BayerSensor::isUnchanged() const
&& pixelShiftMotion && pixelShiftMotionCorrection && pixelShiftMotionCorrectionMethod && pixelShiftStddevFactorGreen && pixelShiftStddevFactorRed && pixelShiftStddevFactorBlue && pixelShiftEperIso
&& pixelShiftNreadIso && pixelShiftPrnu && pixelShiftSigma && pixelShiftSum && pixelShiftRedBlueWeight && pixelShiftShowMotion && pixelShiftShowMotionMaskOnly
&& pixelShiftAutomatic && pixelShiftNonGreenHorizontal && pixelShiftNonGreenVertical && pixelShiftHoleFill && pixelShiftMedian && pixelShiftMedian3 && pixelShiftNonGreenCross && pixelShiftNonGreenCross2 && pixelShiftNonGreenAmaze && pixelShiftGreen && pixelShiftBlur && pixelShiftSmooth && pixelShiftExp0 && pixelShiftLmmse && pixelShiftOneGreen && pixelShiftEqualBright && pixelShiftEqualBrightChannel
- && linenoise && exBlack0 && exBlack1 && exBlack2 && exBlack3 && exTwoGreen;
+ && linenoise && linenoiseDirection && pdafLinesFilter && exBlack0 && exBlack1 && exBlack2 && exBlack3 && exTwoGreen;
}
bool RAWParamsEdited::XTransSensor::isUnchanged() const
diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h
index 861998326..b5008b3d7 100644
--- a/rtgui/paramsedited.h
+++ b/rtgui/paramsedited.h
@@ -882,6 +882,8 @@ public:
//bool allEnhance;
bool greenEq;
bool linenoise;
+ bool linenoiseDirection;
+ bool pdafLinesFilter;
bool isUnchanged() const;
};
diff --git a/rtgui/partialpastedlg.cc b/rtgui/partialpastedlg.cc
index 27a56e38e..4828e90dc 100644
--- a/rtgui/partialpastedlg.cc
+++ b/rtgui/partialpastedlg.cc
@@ -114,6 +114,7 @@ PartialPasteDlg::PartialPasteDlg (const Glib::ustring &title, Gtk::Window* paren
raw_greenthresh = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_PREPROCESS_GREENEQUIL")));
raw_hotpix_filt = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_PREPROCESS_HOTPIXFILT")));
raw_deadpix_filt = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_PREPROCESS_DEADPIXFILT")));
+ raw_pdaf_lines_filter = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_PREPROCESS_PDAFLINESFILTER")));
//---
raw_expos = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWEXPOS_LINEAR")));
raw_preser = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWEXPOS_PRESER")));
@@ -225,6 +226,7 @@ PartialPasteDlg::PartialPasteDlg (const Glib::ustring &title, Gtk::Window* paren
vboxes[7]->pack_start (*raw_greenthresh, Gtk::PACK_SHRINK, 2);
vboxes[7]->pack_start (*raw_hotpix_filt, Gtk::PACK_SHRINK, 2);
vboxes[7]->pack_start (*raw_deadpix_filt, Gtk::PACK_SHRINK, 2);
+ vboxes[7]->pack_start (*raw_pdaf_lines_filter, Gtk::PACK_SHRINK, 2);
vboxes[7]->pack_start (*Gtk::manage (new Gtk::HSeparator ()), Gtk::PACK_SHRINK, 0);
vboxes[7]->pack_start (*raw_expos, Gtk::PACK_SHRINK, 2);
vboxes[7]->pack_start (*raw_preser, Gtk::PACK_SHRINK, 2);
@@ -368,6 +370,7 @@ PartialPasteDlg::PartialPasteDlg (const Glib::ustring &title, Gtk::Window* paren
raw_greenthreshConn = raw_greenthresh->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
raw_hotpix_filtConn = raw_hotpix_filt->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
raw_deadpix_filtConn = raw_deadpix_filt->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
+ raw_pdaf_lines_filterConn = raw_pdaf_lines_filter->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
//---
raw_exposConn = raw_expos->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
raw_preserConn = raw_preser->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
@@ -441,6 +444,7 @@ void PartialPasteDlg::rawToggled ()
ConnectionBlocker raw_greenthreshBlocker(raw_greenthreshConn);
ConnectionBlocker raw_hotpix_filtBlocker(raw_hotpix_filtConn);
ConnectionBlocker raw_deadpix_filtBlocker(raw_deadpix_filtConn);
+ ConnectionBlocker raw_pdaf_lines_filterBlocker(raw_pdaf_lines_filterConn);
ConnectionBlocker raw_exposBlocker(raw_exposConn);
ConnectionBlocker raw_preserBlocker(raw_preserConn);
ConnectionBlocker raw_blackBlocker(raw_blackConn);
@@ -467,6 +471,7 @@ void PartialPasteDlg::rawToggled ()
raw_greenthresh->set_active (raw->get_active ());
raw_hotpix_filt->set_active (raw->get_active ());
raw_deadpix_filt->set_active (raw->get_active ());
+ raw_pdaf_lines_filter->set_active (raw->get_active ());
raw_expos->set_active (raw->get_active ());
raw_preser->set_active (raw->get_active ());
raw_black->set_active (raw->get_active ());
@@ -875,6 +880,7 @@ void PartialPasteDlg::applyPaste (rtengine::procparams::ProcParams* dstPP, Param
if (!raw_linenoise->get_active ()) {
filterPE.raw.bayersensor.linenoise = falsePE.raw.bayersensor.linenoise;
+ filterPE.raw.bayersensor.linenoiseDirection = falsePE.raw.bayersensor.linenoiseDirection;
}
if (!raw_greenthresh->get_active ()) {
@@ -910,6 +916,10 @@ void PartialPasteDlg::applyPaste (rtengine::procparams::ProcParams* dstPP, Param
filterPE.raw.hotdeadpix_thresh = falsePE.raw.hotdeadpix_thresh;
}
+ if (!raw_pdaf_lines_filter->get_active ()) {
+ filterPE.raw.bayersensor.pdafLinesFilter = falsePE.raw.bayersensor.pdafLinesFilter;
+ }
+
if (!df_file->get_active ()) {
filterPE.raw.darkFrame = falsePE.raw.darkFrame;
}
diff --git a/rtgui/partialpastedlg.h b/rtgui/partialpastedlg.h
index e270a1e6e..b404db156 100644
--- a/rtgui/partialpastedlg.h
+++ b/rtgui/partialpastedlg.h
@@ -106,6 +106,7 @@ public:
Gtk::CheckButton* raw_caredblue;
Gtk::CheckButton* raw_hotpix_filt;
Gtk::CheckButton* raw_deadpix_filt;
+ Gtk::CheckButton* raw_pdaf_lines_filter;
Gtk::CheckButton* raw_linenoise;
Gtk::CheckButton* raw_greenthresh;
Gtk::CheckButton* raw_method;
@@ -133,7 +134,7 @@ public:
sigc::connection coarserotConn, finerotConn, cropConn, resizeConn, prsharpeningConn, perspectiveConn, commonTransConn;
sigc::connection metadataConn, exifchConn, iptcConn, icmConn;
sigc::connection df_fileConn, df_AutoSelectConn, ff_fileConn, ff_AutoSelectConn, ff_BlurRadiusConn, ff_BlurTypeConn, ff_ClipControlConn;
- sigc::connection raw_caredblueConn, raw_ca_autocorrectConn, raw_hotpix_filtConn, raw_deadpix_filtConn, raw_linenoiseConn, raw_greenthreshConn, raw_ccStepsConn, raw_methodConn, raw_imagenumConn, raw_dcb_iterationsConn, raw_lmmse_iterationsConn, raw_pixelshiftConn, raw_dcb_enhanceConn, raw_exposConn, raw_preserConn, raw_blackConn;
+ sigc::connection raw_caredblueConn, raw_ca_autocorrectConn, raw_hotpix_filtConn, raw_deadpix_filtConn, raw_pdaf_lines_filterConn, raw_linenoiseConn, raw_greenthreshConn, raw_ccStepsConn, raw_methodConn, raw_imagenumConn, raw_dcb_iterationsConn, raw_lmmse_iterationsConn, raw_pixelshiftConn, raw_dcb_enhanceConn, raw_exposConn, raw_preserConn, raw_blackConn;
public:
PartialPasteDlg (const Glib::ustring &title, Gtk::Window* parent);
diff --git a/rtgui/preferences.cc b/rtgui/preferences.cc
index ad93ed7b1..c54d8f5b3 100644
--- a/rtgui/preferences.cc
+++ b/rtgui/preferences.cc
@@ -1537,7 +1537,7 @@ Gtk::Widget* Preferences::getSoundPanel()
txtSndLngEditProcDone = Gtk::manage(new Gtk::Entry());
pSndLngEditProcDone->pack_start(*txtSndLngEditProcDone, Gtk::PACK_EXPAND_WIDGET, 4);
- Gtk::Label* lSndLngEditProcDoneSecs = Gtk::manage(new Gtk::Label(M("PREFERENCES_SND_TRESHOLDSECS") + Glib::ustring(":")));
+ Gtk::Label* lSndLngEditProcDoneSecs = Gtk::manage (new Gtk::Label (M ("PREFERENCES_SND_THRESHOLDSECS") + Glib::ustring (":")));
pSndLngEditProcDone->pack_start(*lSndLngEditProcDoneSecs, Gtk::PACK_SHRINK, 12);
spbSndLngEditProcDoneSecs = Gtk::manage(new Gtk::SpinButton());
@@ -2230,7 +2230,7 @@ void Preferences::selectStartupDir()
Gtk::FileChooserDialog dialog(getToplevelWindow(this), M("PREFERENCES_DIRSELECTDLG"), Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER);
// dialog.set_transient_for(*this);
- //Add response buttons the the dialog:
+ //Add response buttons to the dialog:
dialog.add_button(M("GENERAL_CANCEL"), Gtk::RESPONSE_CANCEL);
dialog.add_button(M("GENERAL_OPEN"), Gtk::RESPONSE_OK);
diff --git a/rtgui/profilepanel.cc b/rtgui/profilepanel.cc
index d3550a02c..236161420 100644
--- a/rtgui/profilepanel.cc
+++ b/rtgui/profilepanel.cc
@@ -284,7 +284,7 @@ void ProfilePanel::save_clicked (GdkEventButton* event)
dialog.add_shortcut_folder(imagePath);
} catch (Glib::Error&) {}
- //Add response buttons the the dialog:
+ //Add response buttons to the dialog:
dialog.add_button(M("GENERAL_CANCEL"), Gtk::RESPONSE_CANCEL);
dialog.add_button(M("GENERAL_SAVE"), Gtk::RESPONSE_OK);
@@ -457,7 +457,7 @@ void ProfilePanel::load_clicked (GdkEventButton* event)
dialog.add_shortcut_folder(imagePath);
} catch (Glib::Error&) {}
- //Add response buttons the the dialog:
+ //Add response buttons to the dialog:
dialog.add_button(M("GENERAL_CANCEL"), Gtk::RESPONSE_CANCEL);
dialog.add_button(M("GENERAL_OPEN"), Gtk::RESPONSE_OK);
diff --git a/rtgui/thumbbrowserbase.cc b/rtgui/thumbbrowserbase.cc
index abb8ec68d..2d27550bc 100644
--- a/rtgui/thumbbrowserbase.cc
+++ b/rtgui/thumbbrowserbase.cc
@@ -71,20 +71,24 @@ void ThumbBrowserBase::scrollChanged ()
void ThumbBrowserBase::scroll (int direction)
{
// GUI already acquired when here
- if (arrangement == TB_Vertical) {
- vscroll.set_value (vscroll.get_value() + (direction == GDK_SCROLL_DOWN ? +1 : -1) * vscroll.get_adjustment()->get_step_increment());
- } else {
- hscroll.set_value (hscroll.get_value() + (direction == GDK_SCROLL_DOWN ? +1 : -1) * hscroll.get_adjustment()->get_step_increment());
+ if (direction == GDK_SCROLL_UP || direction == GDK_SCROLL_DOWN) {
+ if (arrangement == TB_Vertical) {
+ vscroll.set_value (vscroll.get_value() + (direction == GDK_SCROLL_DOWN ? +1 : -1) * vscroll.get_adjustment()->get_step_increment());
+ } else {
+ hscroll.set_value (hscroll.get_value() + (direction == GDK_SCROLL_DOWN ? +1 : -1) * hscroll.get_adjustment()->get_step_increment());
+ }
}
}
void ThumbBrowserBase::scrollPage (int direction)
{
// GUI already acquired when here
- if (arrangement == TB_Vertical) {
- vscroll.set_value (vscroll.get_value() + (direction == GDK_SCROLL_DOWN ? +1 : -1) * vscroll.get_adjustment()->get_page_increment());
- } else {
- hscroll.set_value (hscroll.get_value() + (direction == GDK_SCROLL_DOWN ? +1 : -1) * hscroll.get_adjustment()->get_page_increment());
+ if (direction == GDK_SCROLL_UP || direction == GDK_SCROLL_DOWN) {
+ if (arrangement == TB_Vertical) {
+ vscroll.set_value (vscroll.get_value() + (direction == GDK_SCROLL_DOWN ? +1 : -1) * vscroll.get_adjustment()->get_page_increment());
+ } else {
+ hscroll.set_value (hscroll.get_value() + (direction == GDK_SCROLL_DOWN ? +1 : -1) * hscroll.get_adjustment()->get_page_increment());
+ }
}
}