Merge branch 'dev' into hidpi-icons

This commit is contained in:
Hombre 2019-02-25 22:37:00 +01:00
commit bd175ec8d1
104 changed files with 1550 additions and 1131 deletions

View File

@ -517,7 +517,7 @@ if(WIN32)
endif()
if(UNIX)
install(FILES rawtherapee.appdata.xml DESTINATION "${APPDATADIR}")
install(FILES com.rawtherapee.RawTherapee.appdata.xml DESTINATION "${APPDATADIR}")
endif()
# check whether the used version of lensfun has lfDatabase::LoadDirectory

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<component type="desktop">
<id>rawtherapee.desktop</id>
<component type="desktop-application">
<id>com.rawtherapee.RawTherapee</id>
<name>RawTherapee</name>
<summary>An advanced raw photo development program</summary>
<summary xml:lang="cs">Program pro konverzi a zpracování digitálních raw fotografií</summary>
@ -33,6 +33,14 @@
<url type="help">http://rawpedia.rawtherapee.com/</url>
<url type="homepage">http://rawtherapee.com/</url>
<url type="translate">https://discuss.pixls.us/t/localization-how-to-translate-rawtherapee-and-rawpedia/2594</url>
<launchable type="desktop-id">rawtherapee.desktop</launchable>
<releases>
<release version="5.5" date="2018-12-17" type="stable"></release>
</releases>
<provides>
<binary>rawtherapee</binary>
<binary>rawtherapee-cli</binary>
</provides>
<screenshots>
<screenshot type="default">
<caption>HDR DNG of a misty morning in the countryside</caption>

View File

@ -302,7 +302,6 @@ HISTORY_MSG_121;Raw auto CA
HISTORY_MSG_122;Auto marc fosc
HISTORY_MSG_123;Fitxer de camp fosc
HISTORY_MSG_124;Correc. expo. linear
HISTORY_MSG_125;Correc. exposició preservant HL
HISTORY_MSG_126;Fitxer de camp pla
HISTORY_MSG_127;Auto-sel. camp pla
HISTORY_MSG_128;Camp pla borrós - radi
@ -470,7 +469,6 @@ PARTIALPASTE_PREPROCESS_LINEDENOISE;Filtre línia de soroll
PARTIALPASTE_RAWCACORR_AUTO;Auto-correcció AC
PARTIALPASTE_RAWEXPOS_BLACK;Nivell negre
PARTIALPASTE_RAWEXPOS_LINEAR;Factor de corr. linear de punt blanc
PARTIALPASTE_RAWEXPOS_PRESER;Corr. punt blanc preservant HL (EV)
PARTIALPASTE_RAWGROUP;Ajustos raw
PARTIALPASTE_RAW_DCBENHANCE;Aplica pas de millora DCB
PARTIALPASTE_RAW_DCBITERATIONS;Nombre d'iteracions DCB
@ -798,7 +796,6 @@ TP_RAWCACORR_CABLUE;Blau
TP_RAWCACORR_CARED;Vermell
TP_RAWEXPOS_BLACKS;Nivells negres
TP_RAWEXPOS_LINEAR;Punt blanc: factor de correcció linear
TP_RAWEXPOS_PRESER;Punt blanc: correc. clars preservant (EV)
TP_RAWEXPOS_TWOGREEN;Dos verds junts
TP_RAW_DCBENHANCE;Aplica pas de millora DCB
TP_RAW_DCBITERATIONS;Nombre d'iteracions DCB
@ -2008,7 +2005,8 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: <b>-</b>
!TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
!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_IMAGENUM_SN;SN mode
!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\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_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps
!TP_RAW_LMMSE_TOOLTIP;Adds gamma (step 1), median (steps 2-4) and refinement (steps 5-6) to reduce artifacts and improve the signal-to-noise ratio.

View File

@ -463,7 +463,6 @@ PARTIALPASTE_RAWCACORR_AUTO;CA自动更正
PARTIALPASTE_RAWCACORR_CAREDBLUE;红蓝色散
PARTIALPASTE_RAWEXPOS_BLACK;黑色等级
PARTIALPASTE_RAWEXPOS_LINEAR;白点纠正
PARTIALPASTE_RAWEXPOS_PRESER;高光补偿
PARTIALPASTE_RAWGROUP;Raw设置
PARTIALPASTE_RAW_DCBENHANCE;DCB 增强
PARTIALPASTE_RAW_DCBITERATIONS;DCB 反复
@ -1055,7 +1054,6 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: <b>-</b>
!HISTORY_MSG_118;Raw CA correction - Blue
!HISTORY_MSG_120;Green equilibration
!HISTORY_MSG_121;Raw CA Correction - Auto
!HISTORY_MSG_125;Highlight preservation
!HISTORY_MSG_131;NR - Luma
!HISTORY_MSG_132;NR - Chroma
!HISTORY_MSG_133;Output gamma
@ -1950,7 +1948,6 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: <b>-</b>
!TP_RAWEXPOS_BLACK_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_LINEAR;White-point correction
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens
!TP_RAW_1PASSMEDIUM;1-pass (Markesteijn)
@ -1980,7 +1977,8 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: <b>-</b>
!TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
!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_IMAGENUM_SN;SN mode
!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\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_LABEL;Demosaicing
!TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps

View File

@ -631,7 +631,6 @@ TP_WBALANCE_TEMPERATURE;色溫
!HISTORY_MSG_122;Dark-Frame - Auto-selection
!HISTORY_MSG_123;Dark-Frame - File
!HISTORY_MSG_124;White point correction
!HISTORY_MSG_125;Highlight preservation
!HISTORY_MSG_126;Flat-Field - File
!HISTORY_MSG_127;Flat-Field - Auto-selection
!HISTORY_MSG_128;Flat-Field - Blur radius
@ -1206,7 +1205,6 @@ TP_WBALANCE_TEMPERATURE;色溫
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
!PARTIALPASTE_RAWGROUP;Raw Settings
!PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement
@ -1898,7 +1896,6 @@ TP_WBALANCE_TEMPERATURE;色溫
!TP_RAWEXPOS_BLACK_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_LINEAR;White-point correction
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens
!TP_RAW_1PASSMEDIUM;1-pass (Markesteijn)
@ -1928,7 +1925,8 @@ TP_WBALANCE_TEMPERATURE;色溫
!TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
!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_IMAGENUM_SN;SN mode
!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\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_LABEL;Demosaicing
!TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps

View File

@ -421,7 +421,6 @@ HISTORY_MSG_121;Raw korekce CA - automatická
HISTORY_MSG_122;Tmavé snímky - Automatický výběr
HISTORY_MSG_123;Tmavé snímky - Soubor
HISTORY_MSG_124;Korekce bílého bodu
HISTORY_MSG_125;Zachování světel
HISTORY_MSG_126;Flat Field - Soubor
HISTORY_MSG_127;Flat Field - Automatický výběr
HISTORY_MSG_128;Flat Field - Poloměr rozostření
@ -1056,7 +1055,6 @@ PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA zabránit posunu barev
PARTIALPASTE_RAWCACORR_CAREDBLUE;CA červená a modrá
PARTIALPASTE_RAWEXPOS_BLACK;Úrovně černé
PARTIALPASTE_RAWEXPOS_LINEAR;Korekce bílého bodu
PARTIALPASTE_RAWEXPOS_PRESER;Zachování světel
PARTIALPASTE_RAWGROUP;Nastavení Raw
PARTIALPASTE_RAW_BORDER;Okraj Raw
PARTIALPASTE_RAW_DCBENHANCE;Vylepšení DCB
@ -1882,7 +1880,6 @@ TP_RAWEXPOS_BLACK_BLUE;Modrá
TP_RAWEXPOS_BLACK_GREEN;Zelená
TP_RAWEXPOS_BLACK_RED;Červená
TP_RAWEXPOS_LINEAR;Korekce bílého bodu
TP_RAWEXPOS_PRESER;Zachování světel
TP_RAWEXPOS_RGB;Červená, telená, modrá
TP_RAWEXPOS_TWOGREEN;Spojit zelené
TP_RAW_1PASSMEDIUM;Jeden průchod (Markesteijn)
@ -2351,4 +2348,5 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: <b>-</b>
!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius
!MAIN_TAB_FAVORITES;Favorites
!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: <b>Alt-u</b>
!TP_RAW_IMAGENUM_SN;SN mode
!TP_SHARPENING_BLUR;Blur radius

View File

@ -626,7 +626,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!HISTORY_MSG_122;Dark-Frame - Auto-selection
!HISTORY_MSG_123;Dark-Frame - File
!HISTORY_MSG_124;White point correction
!HISTORY_MSG_125;Highlight preservation
!HISTORY_MSG_126;Flat-Field - File
!HISTORY_MSG_127;Flat-Field - Auto-selection
!HISTORY_MSG_128;Flat-Field - Blur radius
@ -1203,7 +1202,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
!PARTIALPASTE_RAWGROUP;Raw Settings
!PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement
@ -1895,7 +1893,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!TP_RAWEXPOS_BLACK_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_LINEAR;White-point correction
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens
!TP_RAW_1PASSMEDIUM;1-pass (Markesteijn)
@ -1923,7 +1920,8 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
!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_IMAGENUM_SN;SN mode
!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\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_LABEL;Demosaicing
!TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps

View File

@ -457,7 +457,6 @@ HISTORY_MSG_121;(Sensor-Matrix)\nChromatische Aberration\nAutomatische Korrektur
HISTORY_MSG_122;(Dunkelbild)\nAutomatische Auswahl
HISTORY_MSG_123;(Dunkelbild) - Datei
HISTORY_MSG_124;(Weißpunkt)\nKorrekturfaktor
HISTORY_MSG_125;(Belichtungskorrektur)\nLichter schützen
HISTORY_MSG_126;(Weißbild) - Datei
HISTORY_MSG_127;(Weißbild)\nAutomatische Auswahl
HISTORY_MSG_128;(Weißbild)\nUnschärferadius
@ -852,6 +851,7 @@ HISTORY_MSG_RAWCACORR_AUTOIT;(Sensor-Matrix)\nChromatische Aberration\nIteration
HISTORY_MSG_RAWCACORR_COLORSHIFT;(Sensor-Matrix)\nChromatische Aberration\nFarbverschiebungen\nvermeiden
HISTORY_MSG_RAW_BORDER;(Sensor-Matrix)\nFarbinterpolation\nBildrand
HISTORY_MSG_RESIZE_ALLOWUPSCALING;(Skalieren)\nHochskalieren zulassen
HISTORY_MSG_SHARPENING_BLUR;(Schärfung)\nWeichzeichnerradius
HISTORY_MSG_SHARPENING_CONTRAST;(Schärfung)\nKontrastschwelle
HISTORY_MSG_SH_COLORSPACE;Farbraum
HISTORY_MSG_SOFTLIGHT_ENABLED;(Weiches Licht)
@ -992,6 +992,8 @@ MAIN_TAB_EXIF;Exif
MAIN_TAB_EXPORT; Exportieren
MAIN_TAB_EXPOSURE;Belichtung
MAIN_TAB_EXPOSURE_TOOLTIP;Taste: <b>Alt</b> + <b>e</b>
MAIN_TAB_FAVORITES;Favoriten
MAIN_TAB_FAVORITES_TOOLTIP;Taste: <b>Alt</b> + <b>u</b>
MAIN_TAB_FILTER; Filter
MAIN_TAB_INSPECT; Prüfen
MAIN_TAB_IPTC;IPTC
@ -1095,7 +1097,6 @@ PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;Chromatische Aberration: Farbverschiebung
PARTIALPASTE_RAWCACORR_CAREDBLUE;Chromatische Aberration: Rot & Blau
PARTIALPASTE_RAWEXPOS_BLACK;Weißpunkt: Schwarzpegel
PARTIALPASTE_RAWEXPOS_LINEAR;Weißpunkt: Korrekturfaktor
PARTIALPASTE_RAWEXPOS_PRESER;Weißpunkt: Lichter schützen (EV)
PARTIALPASTE_RAWGROUP;RAW
PARTIALPASTE_RAW_BORDER;Farbinterpolation: Bildrand
PARTIALPASTE_RAW_DCBENHANCE;Farbinterpolation: DCB-Verbesserung
@ -1928,7 +1929,6 @@ TP_RAWEXPOS_BLACK_BLUE;Blau
TP_RAWEXPOS_BLACK_GREEN;Grün
TP_RAWEXPOS_BLACK_RED;Rot
TP_RAWEXPOS_LINEAR;Korrekturfaktor
TP_RAWEXPOS_PRESER;Weißpunkt: Lichter schützen
TP_RAWEXPOS_RGB;Rot, Grün, Blau
TP_RAWEXPOS_TWOGREEN;Grün-Werte automatisch angleichen
TP_RAW_1PASSMEDIUM;1-Pass (Markesteijn)
@ -2139,6 +2139,7 @@ TP_SHARPENEDGE_LABEL;Kantenschärfung
TP_SHARPENEDGE_PASSES;Iterationen
TP_SHARPENEDGE_THREE;Nur Luminanz
TP_SHARPENING_AMOUNT;Intensität
TP_SHARPENING_BLUR;Weichzeichnerradius
TP_SHARPENING_CONTRAST;Kontrastschwelle
TP_SHARPENING_EDRADIUS;Radius
TP_SHARPENING_EDTOLERANCE;Kantentoleranz
@ -2413,7 +2414,4 @@ ZOOMPANEL_ZOOMOUT;Herauszoomen\nTaste: <b>-</b>
! Untranslated keys follow; remove the ! prefix after an entry is translated.
!!!!!!!!!!!!!!!!!!!!!!!!!
HISTORY_MSG_SHARPENING_BLUR;(Schärfung)\nWeichzeichnerradius
MAIN_TAB_FAVORITES;Favoriten
MAIN_TAB_FAVORITES_TOOLTIP;Taste: <b>Alt</b> + <b>u</b>
TP_SHARPENING_BLUR;Weichzeichnerradius
!TP_RAW_IMAGENUM_SN;SN mode

View File

@ -489,7 +489,6 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!HISTORY_MSG_122;Dark-Frame - Auto-selection
!HISTORY_MSG_123;Dark-Frame - File
!HISTORY_MSG_124;White point correction
!HISTORY_MSG_125;Highlight preservation
!HISTORY_MSG_126;Flat-Field - File
!HISTORY_MSG_127;Flat-Field - Auto-selection
!HISTORY_MSG_128;Flat-Field - Blur radius
@ -1098,7 +1097,6 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
!PARTIALPASTE_RAWGROUP;Raw Settings
!PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement
@ -1858,7 +1856,6 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!TP_RAWEXPOS_BLACK_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_LINEAR;White-point correction
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens
!TP_RAW_1PASSMEDIUM;1-pass (Markesteijn)
@ -1887,7 +1884,8 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
!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_IMAGENUM_SN;SN mode
!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\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_LABEL;Demosaicing
!TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps

View File

@ -381,7 +381,6 @@
!HISTORY_MSG_122;Dark-Frame - Auto-selection
!HISTORY_MSG_123;Dark-Frame - File
!HISTORY_MSG_124;White point correction
!HISTORY_MSG_125;Highlight preservation
!HISTORY_MSG_126;Flat-Field - File
!HISTORY_MSG_127;Flat-Field - Auto-selection
!HISTORY_MSG_128;Flat-Field - Blur radius
@ -1019,7 +1018,6 @@
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
!PARTIALPASTE_RAWGROUP;Raw Settings
!PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement
@ -1845,7 +1843,6 @@
!TP_RAWEXPOS_BLACK_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_LINEAR;White-point correction
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens
!TP_RAW_1PASSMEDIUM;1-pass (Markesteijn)
@ -1875,7 +1872,8 @@
!TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
!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_IMAGENUM_SN;SN mode
!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\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_LABEL;Demosaicing
!TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps

View File

@ -440,7 +440,6 @@ HISTORY_MSG_121;Corrección automática AC
HISTORY_MSG_122;Auto selección de arch. de Toma Negra
HISTORY_MSG_123;Archivo de Toma Negra
HISTORY_MSG_124;Corrección de punto blanco
HISTORY_MSG_125;Preservar Luces Altas
HISTORY_MSG_126;Archivo de campo plano
HISTORY_MSG_127;Auto selección archivo de campo plano
HISTORY_MSG_128;Radio de difuminado de campo plano
@ -1081,7 +1080,6 @@ PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA evitar el cambio de color
PARTIALPASTE_RAWCACORR_CAREDBLUE;CA Rojo & Azul
PARTIALPASTE_RAWEXPOS_BLACK;Nivel de negro
PARTIALPASTE_RAWEXPOS_LINEAR;Corrección de punto blanco
PARTIALPASTE_RAWEXPOS_PRESER;Preservar Luces Altas
PARTIALPASTE_RAWGROUP;Ajustes Raw
PARTIALPASTE_RAW_BORDER;Raw margen/borde
PARTIALPASTE_RAW_DCBENHANCE;Aplicar paso de mejora DCB
@ -1972,7 +1970,6 @@ TP_RAWEXPOS_BLACK_BLUE;Azul
TP_RAWEXPOS_BLACK_GREEN;Verde
TP_RAWEXPOS_BLACK_RED;Rojo
TP_RAWEXPOS_LINEAR;Corrección de punto blanco
TP_RAWEXPOS_PRESER;Preservación de Luces Altas
TP_RAWEXPOS_RGB;Rojo, Verde, Azul
TP_RAWEXPOS_TWOGREEN;Vincular verdes
TP_RAW_1PASSMEDIUM;1-pasaje (medio)
@ -2462,4 +2459,5 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: <b>-</b>
!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius
!MAIN_TAB_FAVORITES;Favorites
!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: <b>Alt-u</b>
!TP_RAW_IMAGENUM_SN;SN mode
!TP_SHARPENING_BLUR;Blur radius

View File

@ -627,7 +627,6 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!HISTORY_MSG_122;Dark-Frame - Auto-selection
!HISTORY_MSG_123;Dark-Frame - File
!HISTORY_MSG_124;White point correction
!HISTORY_MSG_125;Highlight preservation
!HISTORY_MSG_126;Flat-Field - File
!HISTORY_MSG_127;Flat-Field - Auto-selection
!HISTORY_MSG_128;Flat-Field - Blur radius
@ -1204,7 +1203,6 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
!PARTIALPASTE_RAWGROUP;Raw Settings
!PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement
@ -1896,7 +1894,6 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!TP_RAWEXPOS_BLACK_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_LINEAR;White-point correction
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens
!TP_RAW_1PASSMEDIUM;1-pass (Markesteijn)
@ -1924,7 +1921,8 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
!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_IMAGENUM_SN;SN mode
!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\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_LABEL;Demosaicing
!TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps

View File

@ -379,7 +379,6 @@ HISTORY_MSG_121;A.C. Raw - Auto
HISTORY_MSG_122;Sélection auto de trame noire
HISTORY_MSG_123;Fichier de trame noire
HISTORY_MSG_124;Correct. du point blanc
HISTORY_MSG_125;Préservation des HL
HISTORY_MSG_126;Champ Uniforme - Fichier
HISTORY_MSG_127;Champ Uniforme - Sélection auto
HISTORY_MSG_128;Champ Uniforme - Rayon
@ -1018,7 +1017,6 @@ PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;A.C. Raw - Éviter les dérives couleurs
PARTIALPASTE_RAWCACORR_CAREDBLUE;A.C. Raw - Rouge et bleu
PARTIALPASTE_RAWEXPOS_BLACK;Niveaux de noir
PARTIALPASTE_RAWEXPOS_LINEAR;Correction du point blanc
PARTIALPASTE_RAWEXPOS_PRESER;Préservation des hautes humières
PARTIALPASTE_RAWGROUP;Réglages RAW
PARTIALPASTE_RAW_BORDER;Bord Raw
PARTIALPASTE_RAW_DCBENHANCE;Amélioration de DCB
@ -1852,7 +1850,6 @@ TP_RAWEXPOS_BLACK_BLUE;Bleu
TP_RAWEXPOS_BLACK_GREEN;Vert
TP_RAWEXPOS_BLACK_RED;Rouge
TP_RAWEXPOS_LINEAR;Corr. du Point Blanc
TP_RAWEXPOS_PRESER;Préservation des HL
TP_RAWEXPOS_RGB;Rouge, Vert, Bleu
TP_RAWEXPOS_TWOGREEN;Lier les verts
TP_RAW_1PASSMEDIUM;1-Passe (Medium)
@ -2340,4 +2337,5 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: <b>-</b>
!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius
!MAIN_TAB_FAVORITES;Favorites
!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: <b>Alt-u</b>
!TP_RAW_IMAGENUM_SN;SN mode
!TP_SHARPENING_BLUR;Blur radius

View File

@ -626,7 +626,6 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!HISTORY_MSG_122;Dark-Frame - Auto-selection
!HISTORY_MSG_123;Dark-Frame - File
!HISTORY_MSG_124;White point correction
!HISTORY_MSG_125;Highlight preservation
!HISTORY_MSG_126;Flat-Field - File
!HISTORY_MSG_127;Flat-Field - Auto-selection
!HISTORY_MSG_128;Flat-Field - Blur radius
@ -1203,7 +1202,6 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
!PARTIALPASTE_RAWGROUP;Raw Settings
!PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement
@ -1895,7 +1893,6 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!TP_RAWEXPOS_BLACK_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_LINEAR;White-point correction
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens
!TP_RAW_1PASSMEDIUM;1-pass (Markesteijn)
@ -1923,7 +1920,8 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
!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_IMAGENUM_SN;SN mode
!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\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_LABEL;Demosaicing
!TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps

View File

@ -627,7 +627,6 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!HISTORY_MSG_122;Dark-Frame - Auto-selection
!HISTORY_MSG_123;Dark-Frame - File
!HISTORY_MSG_124;White point correction
!HISTORY_MSG_125;Highlight preservation
!HISTORY_MSG_126;Flat-Field - File
!HISTORY_MSG_127;Flat-Field - Auto-selection
!HISTORY_MSG_128;Flat-Field - Blur radius
@ -1204,7 +1203,6 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
!PARTIALPASTE_RAWGROUP;Raw Settings
!PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement
@ -1896,7 +1894,6 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!TP_RAWEXPOS_BLACK_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_LINEAR;White-point correction
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens
!TP_RAW_1PASSMEDIUM;1-pass (Markesteijn)
@ -1924,7 +1921,8 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
!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_IMAGENUM_SN;SN mode
!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\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_LABEL;Demosaicing
!TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps

View File

@ -332,7 +332,6 @@ HISTORY_MSG_121;AC automatica (Raw)
HISTORY_MSG_122;Dark Frame - Automatico
HISTORY_MSG_123;Dark Frame - File
HISTORY_MSG_124;Correzione Punto di Bianco
HISTORY_MSG_125;Protezione AlteLuci
HISTORY_MSG_126;Flat Field - File
HISTORY_MSG_127;Flat Field - Automatico
HISTORY_MSG_128;Flat Field - Raggio di Sfocamento
@ -600,7 +599,6 @@ PARTIALPASTE_PREPROCESS_LINEDENOISE;Filtro per rumore a bande
PARTIALPASTE_RAWCACORR_AUTO;Autocorrezione AC
PARTIALPASTE_RAWEXPOS_BLACK;Punto del Nero
PARTIALPASTE_RAWEXPOS_LINEAR;Correzione Punto del Bianco
PARTIALPASTE_RAWEXPOS_PRESER;Conservazione Alteluci
PARTIALPASTE_RAWGROUP;Impostazioni del Raw
PARTIALPASTE_RAW_DCBENHANCE;Miglioramento DCB
PARTIALPASTE_RAW_DCBITERATIONS;Numero di iterazioni DCB
@ -1135,7 +1133,6 @@ TP_RAWCACORR_CABLUE;Blu
TP_RAWCACORR_CARED;Rosso
TP_RAWEXPOS_BLACKS;Livelli del nero
TP_RAWEXPOS_LINEAR;Punto del Bianco - Correzione
TP_RAWEXPOS_PRESER;Punto del Bianco - Protezione Alteluci
TP_RAWEXPOS_TWOGREEN;Valori del verde uniti
TP_RAW_DCBENHANCE;Miglioramento DCB
TP_RAW_DCBITERATIONS;Numero di iterazioni DCB
@ -2023,7 +2020,8 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: <b>-</b>
!TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
!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_IMAGENUM_SN;SN mode
!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\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_LMMSE;LMMSE
!TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern)

View File

@ -116,7 +116,7 @@ EXPORT_BYPASS;迂回させる機能
EXPORT_BYPASS_ALL;全て選択 / 全て解除
EXPORT_BYPASS_DEFRINGE;フリンジ低減を迂回
EXPORT_BYPASS_DIRPYRDENOISE;ノイズ低減を迂回
EXPORT_BYPASS_DIRPYREQUALIZER;ディテール・レベルのコントラストを迂回
EXPORT_BYPASS_DIRPYREQUALIZER;詳細レベルによるコントラスト調整を迂回
EXPORT_BYPASS_EQUALIZER;ウェーブレットのレベルを迂回
EXPORT_BYPASS_RAW_CA;[raw] 色収差補正を迂回
EXPORT_BYPASS_RAW_CCSTEPS;[raw] 偽色抑制を迂回
@ -127,8 +127,8 @@ EXPORT_BYPASS_RAW_FF;[raw] フラットフィールドを迂回
EXPORT_BYPASS_RAW_GREENTHRESH;[raw] グリーン平衡化を迂回
EXPORT_BYPASS_RAW_LINENOISE;[raw] ラインノイズ フィルタを迂回
EXPORT_BYPASS_RAW_LMMSE_ITERATIONS;[raw] LMMSE 拡張処理を迂回
EXPORT_BYPASS_SHARPENEDGE;エッジ・シャープを迂回
EXPORT_BYPASS_SHARPENING;シャープを迂回
EXPORT_BYPASS_SHARPENEDGE;エッジ・シャープニングを迂回
EXPORT_BYPASS_SHARPENING;シャープニングを迂回
EXPORT_BYPASS_SHARPENMICRO;マイクロコントラストを迂回
EXPORT_BYPASS_SH_HQ;シャドウ/ハイライト(高画質)を迂回
EXPORT_FASTEXPORTOPTIONS;<b>高速書き出しオプション</b>
@ -307,16 +307,16 @@ HISTORY_MSG_16;輝度 黒レベル
HISTORY_MSG_17;輝度 ハイライト圧縮
HISTORY_MSG_18;輝度 シャドウ圧縮
HISTORY_MSG_19;L*a*b* - L*カーブ
HISTORY_MSG_20;シャープ
HISTORY_MSG_21;シャープ 半径
HISTORY_MSG_22;シャープ 適用量
HISTORY_MSG_23;シャープ しきい値
HISTORY_MSG_24;シャープ エッジのみ
HISTORY_MSG_25;シャープ エッジ検出 半径
HISTORY_MSG_26;シャープ エッジ許容
HISTORY_MSG_27;シャープ ハロ抑制
HISTORY_MSG_20;シャープニング
HISTORY_MSG_21;シャープニング 半径
HISTORY_MSG_22;シャープニング 適用量
HISTORY_MSG_23;シャープニング しきい値
HISTORY_MSG_24;シャープニング エッジのみ
HISTORY_MSG_25;シャープニング エッジ検出 半径
HISTORY_MSG_26;シャープニング エッジ許容
HISTORY_MSG_27;シャープニング ハロ抑制
HISTORY_MSG_28;ハロ抑制 適用量
HISTORY_MSG_29;シャープ 方式
HISTORY_MSG_29;シャープニング 方式
HISTORY_MSG_30;デコンボリューション 半径
HISTORY_MSG_31;デコンボリューション 適用量
HISTORY_MSG_32;デコンボリューション 減衰
@ -380,8 +380,8 @@ HISTORY_MSG_89;ノイズ低減
HISTORY_MSG_90;輝度ノイズの低減
HISTORY_MSG_91;色ノイズの低減
HISTORY_MSG_92;ノイズ低減のガンマ
HISTORY_MSG_93;ディテールのコントラスト係数
HISTORY_MSG_94;ディテールのコントラスト
HISTORY_MSG_93;詳細レベルコントラスト係数
HISTORY_MSG_94;詳細レベルコントラスト
HISTORY_MSG_95;L*a*b* - 色度
HISTORY_MSG_96;L*a*b* - a*カーブ
HISTORY_MSG_97;L*a*b* - b*カーブ
@ -412,7 +412,6 @@ HISTORY_MSG_121;raw 色収差 自動
HISTORY_MSG_122;ダークフレーム 自動
HISTORY_MSG_123;ダークフレーム ファイル
HISTORY_MSG_124;リニア露光補正
HISTORY_MSG_125;露光補正 HLを保持
HISTORY_MSG_126;フラットフィールド ファイル
HISTORY_MSG_127;フラットフィールド 自動選択
HISTORY_MSG_128;フラットフィールド・ぼかし半径
@ -429,12 +428,12 @@ HISTORY_MSG_138;黒レベル レッド
HISTORY_MSG_139;黒レベル ブルー
HISTORY_MSG_140;黒レベル グリーン 2
HISTORY_MSG_141;黒レベル グリーン 連動
HISTORY_MSG_142;エッジ シャープ - 反復
HISTORY_MSG_143;エッジ シャープ - 適用量
HISTORY_MSG_142;エッジ シャープニング - 反復
HISTORY_MSG_143;エッジ シャープニング - 適用量
HISTORY_MSG_144;マイクロコントラスト - 適用量
HISTORY_MSG_145;マイクロコントラスト - 均等
HISTORY_MSG_146;エッジ シャープ
HISTORY_MSG_147;エッジ シャープ - 輝度のみ
HISTORY_MSG_146;エッジ シャープニング
HISTORY_MSG_147;エッジ シャープニング - 輝度のみ
HISTORY_MSG_148;マイクロコントラスト
HISTORY_MSG_149;マイクロコントラスト - 3×3 マトリクス
HISTORY_MSG_150;デモザイク後にアーティファクトとノイズを軽減
@ -535,7 +534,7 @@ HISTORY_MSG_245;ビネットフィルター 中央
HISTORY_MSG_246;L*a*b* CL カーブ
HISTORY_MSG_247;L*a*b* LH カーブ
HISTORY_MSG_248;L*a*b* HH カーブ
HISTORY_MSG_249;ディテールレベルのコントラスト - しきい値
HISTORY_MSG_249;詳細レベルによるコントラスト調整 - しきい値
HISTORY_MSG_250;ノイズ低減 - 強化
HISTORY_MSG_251;白黒 - アルゴリズム
HISTORY_MSG_252;CbDL 肌色の目標/保護
@ -549,15 +548,15 @@ HISTORY_MSG_259;カラートーン調整 - 不透明度のカーブ
HISTORY_MSG_260;カラートーン調整 - a*(b*)の不透明度
HISTORY_MSG_261;カラートーン調整 - 方法
HISTORY_MSG_262;カラートーン調整 - b*の不透明度
HISTORY_MSG_263;カラートーン調整 - シャドウのレッド
HISTORY_MSG_264;カラートーン調整 - シャドウのグリーン
HISTORY_MSG_265;カラートーン調整 - シャドウのブルー
HISTORY_MSG_263;カラートーン調整 - シャドウのレッド
HISTORY_MSG_264;カラートーン調整 - シャドウのグリーン
HISTORY_MSG_265;カラートーン調整 - シャドウのブルー
HISTORY_MSG_266;カラートーン調整 - 中間トーンのレッド
HISTORY_MSG_267;カラートーン調整 - 中間トーンのグリーン
HISTORY_MSG_268;カラートーン調整 - 中間トーンのブルー
HISTORY_MSG_269;カラートーン調整 - ハイライトのレッド
HISTORY_MSG_270;カラートーン調整 - ハイライトのグリーン
HISTORY_MSG_271;カラートーン調整 - ハイライトのブルー
HISTORY_MSG_269;カラートーン調整 - ハイライトのレッド
HISTORY_MSG_270;カラートーン調整 - ハイライトのグリーン
HISTORY_MSG_271;カラートーン調整 - ハイライトのブルー
HISTORY_MSG_272;カラートーン調整 - バランス
HISTORY_MSG_273;カラートーン調整 - SMHでカラーバランス
HISTORY_MSG_274;カラートーン調整 - シャドウの彩度
@ -599,7 +598,7 @@ HISTORY_MSG_309;W- ES ディテール
HISTORY_MSG_310;W- 残差 青空の目標/保護
HISTORY_MSG_311;W- ウェーブレットのレベル
HISTORY_MSG_312;W- 残差 シャドウのしきい値
HISTORY_MSG_313;W- 色度 明色/純色
HISTORY_MSG_313;W- 色度 明色/純色
HISTORY_MSG_314;W- 色域 アーティファクトの軽減
HISTORY_MSG_315;W- 残差 コントラスト
HISTORY_MSG_316;W- 色域 肌色の目標/保護
@ -610,7 +609,7 @@ HISTORY_MSG_320;W- コントラスト シャドウ範囲
HISTORY_MSG_321;W- コントラスト シャドウレベル
HISTORY_MSG_322;W- 色域 色ずれの回避
HISTORY_MSG_323;W- ES ローカルコントラスト
HISTORY_MSG_324;W- 色度 明
HISTORY_MSG_324;W- 色度 明
HISTORY_MSG_325;W- 色度 純色
HISTORY_MSG_326;W- 色度 方法
HISTORY_MSG_327;W- コントラスト 適用先
@ -657,7 +656,7 @@ HISTORY_MSG_367;W- ES ローカルコントラストカーブ
HISTORY_MSG_368;W- 最終 コントラストバランス
HISTORY_MSG_369;W- 最終 バランスの方法
HISTORY_MSG_370;W- 最終 ローカルコントラストカーブ
HISTORY_MSG_371;リサイズ後のシャープPRS
HISTORY_MSG_371;リサイズ後のシャープニングPRS
HISTORY_MSG_372;PRS アンシャープマスク - 半径
HISTORY_MSG_373;PRS アンシャープマスク - 適用量
HISTORY_MSG_374;PRS アンシャープマスク - しきい値
@ -726,7 +725,7 @@ HISTORY_MSG_436;レティネックス - M - 半径
HISTORY_MSG_437;レティネックス - M - 方式
HISTORY_MSG_438;レティネックス - M - イコライザ
HISTORY_MSG_439;レティネックス - プロセス
HISTORY_MSG_440;ディテールのコントラスト - 適用
HISTORY_MSG_440;詳細レベルコントラスト - 適用
HISTORY_MSG_441;レティネックス - 透過率の増加
HISTORY_MSG_442;レティネックス - スケール
HISTORY_MSG_443;出力のブラックポイント補正
@ -759,7 +758,7 @@ HISTORY_MSG_485;レンズ補正
HISTORY_MSG_486;レンズ補正 - カメラ
HISTORY_MSG_487;レンズ補正 - レンズ
HISTORY_MSG_488;ダイナミックレンジ圧縮
HISTORY_MSG_489;DRC - ディテール
HISTORY_MSG_489;DRC - CbDL
HISTORY_MSG_490;DRC - 量
HISTORY_MSG_491;ホワイトバランス
HISTORY_MSG_492;RGBカーブ
@ -807,7 +806,8 @@ HISTORY_MSG_RAWCACORR_AUTOIT;Rawの色収差補正 - 繰り返し
HISTORY_MSG_RAWCACORR_COLORSHIFT;Rawの色収差補正 - 色ずれを回避
HISTORY_MSG_RAW_BORDER;Rawの境界
HISTORY_MSG_RESIZE_ALLOWUPSCALING;リサイズ - アップスケーリングを可能にする
HISTORY_MSG_SHARPENING_CONTRAST;シャープ化 - コントラストのしきい値
HISTORY_MSG_SHARPENING_BLUR;シャープニング - ぼかしの半径
HISTORY_MSG_SHARPENING_CONTRAST;シャープニング - コントラストのしきい値
HISTORY_MSG_SH_COLORSPACE;S/H - 色空間
HISTORY_MSG_SOFTLIGHT_ENABLED;ソフトライト
HISTORY_MSG_SOFTLIGHT_STRENGTH;ソフトライト - 強さ
@ -940,13 +940,15 @@ MAIN_TAB_ADVANCED;高度な機能
MAIN_TAB_ADVANCED_TOOLTIP;ショートカット: <b>Alt-w</b>
MAIN_TAB_COLOR;カラー
MAIN_TAB_COLOR_TOOLTIP;ショートカット: <b>Alt-c</b>
MAIN_TAB_DETAIL;ディテール
MAIN_TAB_DETAIL;CbDL
MAIN_TAB_DETAIL_TOOLTIP;ショートカット: <b>Alt-d</b>
MAIN_TAB_DEVELOP;一括編集
MAIN_TAB_EXIF;Exif
MAIN_TAB_EXPORT;高速書き出し
MAIN_TAB_EXPOSURE;露光
MAIN_TAB_EXPOSURE_TOOLTIP;ショートカット: <b>Alt-e</b>
MAIN_TAB_FAVORITES;お気に入り
MAIN_TAB_FAVORITES_TOOLTIP;ショートカット: <b>Alt-u</b>
MAIN_TAB_FILTER;絞り込み
MAIN_TAB_INSPECT;カメラ出しJPEG
MAIN_TAB_IPTC;IPTC
@ -969,7 +971,7 @@ MAIN_TOOLTIP_PREVIEWFOCUSMASK;<b>フォーカス・マスク</b>表示\nショ
MAIN_TOOLTIP_PREVIEWG;<b>グリーン チャンネル</b>表示\nショートカット: <b>g</b>
MAIN_TOOLTIP_PREVIEWL;<b>輝度</b>表示\nショートカット: <b>v</b>\n\n0.299*R + 0.587*G + 0.114*B
MAIN_TOOLTIP_PREVIEWR;<b>レッド チャンネル</b>表示\nショートカット: <b>r</b>
MAIN_TOOLTIP_PREVIEWSHARPMASK;プレビューで見る<b>シャープ機能のコントラストマスク</b>\nショートカット <b>p</b>\n\nこの機能が使えるのはシャープ機能が有効で、画像が100以上に拡大されている場合だけ
MAIN_TOOLTIP_PREVIEWSHARPMASK;プレビューで見る<b>シャープニング機能のコントラストマスク</b>\nショートカット <b>p</b>\n\nこの機能が使えるのはシャープニング機能が有効で、画像が100以上に拡大されている場合だけ
MAIN_TOOLTIP_QINFO;画像の情報\nショートカット: <b>i</b>
MAIN_TOOLTIP_SHOWHIDELP1;表示/非表示 左パネル\nショートカット: <b>l</b>
MAIN_TOOLTIP_SHOWHIDERP1;表示/非表示 右パネル\nショートカット: <b>Alt-l</b>
@ -1011,7 +1013,7 @@ PARTIALPASTE_DEHAZE;霞除去
PARTIALPASTE_DETAILGROUP;ディテールの設定
PARTIALPASTE_DIALOGLABEL;処理プロファイルの部分ペースト
PARTIALPASTE_DIRPYRDENOISE;ノイズ低減
PARTIALPASTE_DIRPYREQUALIZER;ディテール・レベルのコントラスト
PARTIALPASTE_DIRPYREQUALIZER;詳細レベルによるコントラスト調整
PARTIALPASTE_DISTORTION;歪曲補正
PARTIALPASTE_EPD;トーンマッピング
PARTIALPASTE_EQUALIZER;ウェーブレット
@ -1042,13 +1044,12 @@ PARTIALPASTE_PREPROCESS_GREENEQUIL;グリーン 平衡化
PARTIALPASTE_PREPROCESS_HOTPIXFILT;ホットピクセルフィルターを適用
PARTIALPASTE_PREPROCESS_LINEDENOISE;ラインノイズ フィルタ
PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF ラインフィルタ
PARTIALPASTE_PRSHARPENING;リサイズ後のシャープ
PARTIALPASTE_PRSHARPENING;リサイズ後のシャープニング
PARTIALPASTE_RAWCACORR_AUTO;自動色収差補正
PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA 色ずれを回避
PARTIALPASTE_RAWCACORR_CAREDBLUE;色収差 レッドとブルー
PARTIALPASTE_RAWEXPOS_BLACK;黒レベル
PARTIALPASTE_RAWEXPOS_LINEAR;raw ホワイトポイント リニア補正係数
PARTIALPASTE_RAWEXPOS_PRESER;raw ホワイトポイント ハイライトを保持したまま補正 (EV)
PARTIALPASTE_RAWGROUP;raw 設定
PARTIALPASTE_RAW_BORDER;Rawの境界
PARTIALPASTE_RAW_DCBENHANCE;DCB 拡張処理適用
@ -1064,7 +1065,7 @@ PARTIALPASTE_RGBCURVES;RGB カーブ
PARTIALPASTE_ROTATION;回転
PARTIALPASTE_SHADOWSHIGHLIGHTS;シャドウ/ハイライト
PARTIALPASTE_SHARPENEDGE;エッジ
PARTIALPASTE_SHARPENING;シャープ (USM/RL)
PARTIALPASTE_SHARPENING;シャープニング (USM/RL)
PARTIALPASTE_SHARPENMICRO;マイクロコントラスト
PARTIALPASTE_SOFTLIGHT;ソフトな明るさ
PARTIALPASTE_TM_FATTAL;ダイナミックレンジ圧縮
@ -1411,7 +1412,7 @@ TP_CACORRECTION_RED;レッド
TP_CBDL_AFT;白黒適用の後
TP_CBDL_BEF;白黒適用の前
TP_CBDL_METHOD;処理の順番
TP_CBDL_METHOD_TOOLTIP;ディテールレベルのコントラストの処理を白黒処理の前に行うか、後に行うか選びます。前を選んだ場合は同機能の作業色空間はRGBとなり、後を選んだ場合はL*a*b*となります。
TP_CBDL_METHOD_TOOLTIP;詳細レベルによるコントラスト調整の処理を白黒処理の前に行うか、後に行うか選びます。前を選んだ場合は同機能の作業色空間はRGBとなり、後を選んだ場合はL*a*b*となります。
TP_CHMIXER_BLUE;ブルー
TP_CHMIXER_GREEN;グリーン
TP_CHMIXER_LABEL;チャンネルミキサー
@ -1639,7 +1640,7 @@ TP_DIRPYREQUALIZER_ALGO_TOOLTIP;ファイン:撮影の肌色に近い部分に
TP_DIRPYREQUALIZER_ARTIF;アーティファクトを軽減
TP_DIRPYREQUALIZER_HUESKIN;肌色の色相
TP_DIRPYREQUALIZER_HUESKIN_TOOLTIP;このカーブは上部ほど、アルゴリズムが効率良く働くことを示しています。\n下部ほど、色相の遷移が見られる部分です。\nコントロールポイントを左右に大きく動かす必要が生じたり、アーティファクトが生じたりする場合は、<b>ホワイトバランスが妥当ではない</b>時です。\n他の色への影響を避けるには、調整範囲を少し減らします
TP_DIRPYREQUALIZER_LABEL;ディテールレベルのコントラスト
TP_DIRPYREQUALIZER_LABEL;詳細レベルによるコントラスト調整
TP_DIRPYREQUALIZER_LUMACOARSEST;粗い
TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;コントラスト-
TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;コントラスト+
@ -1857,8 +1858,8 @@ TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;垂直方向
TP_PREPROCESS_NO_FOUND;未検出
TP_PREPROCESS_PDAFLINESFILTER;PDAFラインフィルタ
TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Sonyのミラーレスカメラの一部では、PDAFイメージセンサが原因で、ゴーストが出るバックライトの画像でストライプイズが発生することがあり、これを軽減します。
TP_PRSHARPENING_LABEL;リサイズ後のシャープ
TP_PRSHARPENING_TOOLTIP;リサイズ後の画像をシャープします。但し、リサイズの方式がランチョスの場合に限ります。プレビュー画面でこの機能の効果を見ることは出来ません。使用法に関してはRawPediaを参照して下さい。
TP_PRSHARPENING_LABEL;リサイズ後のシャープニング
TP_PRSHARPENING_TOOLTIP;リサイズ後の画像をシャープニングします。但し、リサイズの方式がランチョスの場合に限ります。プレビュー画面でこの機能の効果を見ることは出来ません。使用法に関してはRawPediaを参照して下さい。
TP_RAWCACORR_AUTO;自動補正
TP_RAWCACORR_AUTOIT;繰り返し
TP_RAWCACORR_AUTOIT_TOOLTIP;”自動補正”が有効になっている場合にこの設定が可能です。\n自動補正の作用は控えめなため、全ての色収差が常に補正されるとは限りません。\n残りの色収差を補正するためには、自動色収差補正の繰り返しを最大5回行います。\n繰り返すたびに、直前の繰り返しで残った色収差を軽減しますが、その分処理時間は増えます。
@ -1875,7 +1876,6 @@ TP_RAWEXPOS_BLACK_BLUE;ブルー
TP_RAWEXPOS_BLACK_GREEN;グリーン
TP_RAWEXPOS_BLACK_RED;レッド
TP_RAWEXPOS_LINEAR;ホワイトポイント補正
TP_RAWEXPOS_PRESER;ハイライトを保持
TP_RAWEXPOS_RGB;レッド、グリーン、ブルー
TP_RAWEXPOS_TWOGREEN;2つのグリーンを連動
TP_RAW_1PASSMEDIUM;1-パス (Markesteijn)
@ -2067,14 +2067,15 @@ TP_SHARPENEDGE_LABEL;エッジ
TP_SHARPENEDGE_PASSES;反復
TP_SHARPENEDGE_THREE;輝度のみ
TP_SHARPENING_AMOUNT;適用量
TP_SHARPENING_BLUR;ぼかしの半径
TP_SHARPENING_CONTRAST;コントラストのしきい値
TP_SHARPENING_EDRADIUS;半径
TP_SHARPENING_EDTOLERANCE;エッジ許容
TP_SHARPENING_HALOCONTROL;ハロ抑制
TP_SHARPENING_HCAMOUNT;適用量
TP_SHARPENING_LABEL;シャープ
TP_SHARPENING_LABEL;シャープニング
TP_SHARPENING_METHOD;方式
TP_SHARPENING_ONLYEDGES;エッジのみシャープ
TP_SHARPENING_ONLYEDGES;エッジのみシャープニング
TP_SHARPENING_RADIUS;半径
TP_SHARPENING_RLD;RL デコンボリューション
TP_SHARPENING_RLD_AMOUNT;適用量
@ -2198,7 +2199,7 @@ TP_WAVELET_EDGREINF_TOOLTIP;最初のレベルに対する作用を強めたり
TP_WAVELET_EDGTHRESH;ディテール
TP_WAVELET_EDGTHRESH_TOOLTIP;低いレベルと他のレベルの区分を変更します。しきい値を高くするほど、低いレベルに作用の重点が置かれます。注意:マイナス値の設定は高いレベルに重点が置かれ、アーティファクトが発生することがあります。
TP_WAVELET_EDRAD;半径
TP_WAVELET_EDRAD_TOOLTIP;この機能の半径は、他のシャープ機能の半径とは大きく異なります。複雑な関数を使って各レベルの値を比較します。そのため、半径がゼロでも何らかの効果があります
TP_WAVELET_EDRAD_TOOLTIP;この機能の半径は、他のシャープニング機能の半径とは大きく異なります。複雑な関数を使って各レベルの値を比較します。そのため、半径がゼロでも何らかの効果があります
TP_WAVELET_EDSL;しきい値スライダー
TP_WAVELET_EDTYPE;ローカルコントラストの方式
TP_WAVELET_EDVAL;強さ
@ -2341,7 +2342,4 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: <b>-</b>
! Untranslated keys follow; remove the ! prefix after an entry is translated.
!!!!!!!!!!!!!!!!!!!!!!!!!
!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius
!MAIN_TAB_FAVORITES;Favorites
!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: <b>Alt-u</b>
!TP_SHARPENING_BLUR;Blur radius
!TP_RAW_IMAGENUM_SN;SN mode

View File

@ -627,7 +627,6 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!HISTORY_MSG_122;Dark-Frame - Auto-selection
!HISTORY_MSG_123;Dark-Frame - File
!HISTORY_MSG_124;White point correction
!HISTORY_MSG_125;Highlight preservation
!HISTORY_MSG_126;Flat-Field - File
!HISTORY_MSG_127;Flat-Field - Auto-selection
!HISTORY_MSG_128;Flat-Field - Blur radius
@ -1204,7 +1203,6 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
!PARTIALPASTE_RAWGROUP;Raw Settings
!PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement
@ -1896,7 +1894,6 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!TP_RAWEXPOS_BLACK_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_LINEAR;White-point correction
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens
!TP_RAW_1PASSMEDIUM;1-pass (Markesteijn)
@ -1924,7 +1921,8 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
!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_IMAGENUM_SN;SN mode
!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\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_LABEL;Demosaicing
!TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps

View File

@ -295,7 +295,6 @@ HISTORY_MSG_121;Auto CA
HISTORY_MSG_122;Auto ref. feketekép (dark frame)
HISTORY_MSG_123;Ref. feketekép állománya
HISTORY_MSG_124;Lineáris exp. korrekció
HISTORY_MSG_125;Exp. korrekció csúcsfények megőrzésével
HISTORY_MSG_126;Flat Field állomány
HISTORY_MSG_127;Flat Field automatikus kivál.
HISTORY_MSG_128;Flat Field elmosás sugara
@ -454,7 +453,6 @@ PARTIALPASTE_PREPROCESS_LINEDENOISE;Soronkénti zajszűrés
PARTIALPASTE_RAWCACORR_AUTO;CA autokorrekció
PARTIALPASTE_RAWEXPOS_BLACK;Feketeszint
PARTIALPASTE_RAWEXPOS_LINEAR;Raw fehérszint lineáris korrekciós faktor (FÉ)
PARTIALPASTE_RAWEXPOS_PRESER;Raw fehérszint csúcsfény-megőrző faktor (FÉ)
PARTIALPASTE_RAWGROUP;Raw beállítások
PARTIALPASTE_RAW_DCBENHANCE;DCB javítási lépés alkalmazása
PARTIALPASTE_RAW_DCBITERATIONS;DCB iterációk száma
@ -729,7 +727,6 @@ TP_RAWCACORR_CABLUE;Kék
TP_RAWCACORR_CARED;Vörös
TP_RAWEXPOS_BLACKS;Feketeszintek
TP_RAWEXPOS_LINEAR;Fehérszint: lineáris korrelációs faktor
TP_RAWEXPOS_PRESER;Fehérszint: csúcsfény-megőrző korrekció (FÉ)
TP_RAWEXPOS_TWOGREEN;Zöldek együtt
TP_RAW_DCBENHANCE;DCB helyesbítő lépés alkalmazása
TP_RAW_DCBITERATIONS;DCB iterációk száma
@ -2000,7 +1997,8 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés <b>-</b>
!TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
!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_IMAGENUM_SN;SN mode
!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\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_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps
!TP_RAW_LMMSE_TOOLTIP;Adds gamma (step 1), median (steps 2-4) and refinement (steps 5-6) to reduce artifacts and improve the signal-to-noise ratio.

View File

@ -376,7 +376,6 @@ HISTORY_MSG_121;RAW CA-correctie - Auto
HISTORY_MSG_122;Donkerframe - Autom. selectie
HISTORY_MSG_123;Donkerframe - Bestand
HISTORY_MSG_124;Witpunt correctie
HISTORY_MSG_125;Hoge lichten behouden
HISTORY_MSG_126;Vlakveld - Bestand
HISTORY_MSG_127;Vlakveld - Autom. selectie
HISTORY_MSG_128;Vlakveld - Verzachten straal
@ -881,7 +880,6 @@ PARTIALPASTE_RAWCACORR_AUTO;Autom. C/A-correctie
PARTIALPASTE_RAWCACORR_CAREDBLUE;CA rood & blauw
PARTIALPASTE_RAWEXPOS_BLACK;Zwartniveau
PARTIALPASTE_RAWEXPOS_LINEAR;Raw witpunt- lineaire corr. factor
PARTIALPASTE_RAWEXPOS_PRESER;Raw witpunt- herstel hoge lichten (EV)
PARTIALPASTE_RAWGROUP;Raw-instellingen
PARTIALPASTE_RAW_DCBENHANCE;Pas DCB-verbetering toe
PARTIALPASTE_RAW_DCBITERATIONS;aantal DCB-herhalingen
@ -1593,7 +1591,6 @@ TP_RAWEXPOS_BLACK_BLUE;Blauw
TP_RAWEXPOS_BLACK_GREEN;Groen
TP_RAWEXPOS_BLACK_RED;Rood
TP_RAWEXPOS_LINEAR;Witpunt Correctie
TP_RAWEXPOS_PRESER;Herstel hoge lichten
TP_RAWEXPOS_RGB;Rood, Groen, Blauw
TP_RAWEXPOS_TWOGREEN;Koppel Groen 1 en 2
TP_RAW_1PASSMEDIUM;1 keer (Gemiddeld)
@ -2331,7 +2328,8 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: <b>-</b>
!TP_RAW_DUALDEMOSAICAUTOCONTRAST;Auto threshold
!TP_RAW_DUALDEMOSAICAUTOCONTRAST_TOOLTIP;If the checkbox is checked (recommended), RawTherapee calculates an optimum value based on flat regions in the image.\nIf there is no flat region in the image or the image is too noisy, the value will be set to 0.\nTo set the value manually, uncheck the checkbox first (reasonable values depend on the image).
!TP_RAW_DUALDEMOSAICCONTRAST;Contrast threshold
!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_IMAGENUM_SN;SN mode
!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\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_PIXELSHIFTDMETHOD;Demosaic method for motion
!TP_RAW_PIXELSHIFTEPERISO;Sensitivity
!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images.

View File

@ -626,7 +626,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!HISTORY_MSG_122;Dark-Frame - Auto-selection
!HISTORY_MSG_123;Dark-Frame - File
!HISTORY_MSG_124;White point correction
!HISTORY_MSG_125;Highlight preservation
!HISTORY_MSG_126;Flat-Field - File
!HISTORY_MSG_127;Flat-Field - Auto-selection
!HISTORY_MSG_128;Flat-Field - Blur radius
@ -1203,7 +1202,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
!PARTIALPASTE_RAWGROUP;Raw Settings
!PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement
@ -1895,7 +1893,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!TP_RAWEXPOS_BLACK_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_LINEAR;White-point correction
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens
!TP_RAW_1PASSMEDIUM;1-pass (Markesteijn)
@ -1923,7 +1920,8 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
!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_IMAGENUM_SN;SN mode
!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\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_LABEL;Demosaicing
!TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps

View File

@ -336,7 +336,6 @@ HISTORY_MSG_121;Autokorekcja aberracji chromatycznej
HISTORY_MSG_122;Czarna klatka - Auto-wybór
HISTORY_MSG_123;Czarna klatka - Wybór
HISTORY_MSG_124;Korekcja punktu bieli
HISTORY_MSG_125;Zachowanie prześwietleń
HISTORY_MSG_126;Puste pole - Wybór
HISTORY_MSG_127;Puste pole - Auto-wybór
HISTORY_MSG_128;Puste pole - Promień rozmycia
@ -649,7 +648,6 @@ PARTIALPASTE_PREPROCESS_LINEDENOISE;Redukcja szumów liniowych
PARTIALPASTE_RAWCACORR_AUTO;Autokorekcja aberracji chr.
PARTIALPASTE_RAWEXPOS_BLACK;Poziomy czerni
PARTIALPASTE_RAWEXPOS_LINEAR;Korekcja punktu bieli
PARTIALPASTE_RAWEXPOS_PRESER;Zachowanie prześwietleń
PARTIALPASTE_RAWGROUP;Ustawienia raw
PARTIALPASTE_RAW_DCBENHANCE;Zastosuj poprawę DCB
PARTIALPASTE_RAW_DCBITERATIONS;Liczba powtórzeń DCB
@ -1252,7 +1250,6 @@ TP_RAWEXPOS_BLACK_BLUE;Niebieski
TP_RAWEXPOS_BLACK_GREEN;Zielony
TP_RAWEXPOS_BLACK_RED;Czerwony
TP_RAWEXPOS_LINEAR;Liniowy współczynnik korekcji
TP_RAWEXPOS_PRESER;Zachowanie prześwietleń
TP_RAWEXPOS_RGB;Czerwony, Zielony, Niebieski
TP_RAWEXPOS_TWOGREEN;Połącz obie zielenie
TP_RAW_DCBENHANCE;Zastosuj poprawę DCB
@ -2032,7 +2029,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: <b>-</b>
!TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
!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_IMAGENUM_SN;SN mode
!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\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_LMMSE;LMMSE
!TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern)

View File

@ -336,7 +336,6 @@ HISTORY_MSG_121;Autokorekcja aberracji chromatycznej
HISTORY_MSG_122;Czarna klatka - Auto-wybor
HISTORY_MSG_123;Czarna klatka - Wybor
HISTORY_MSG_124;Korekcja punktu bieli
HISTORY_MSG_125;Zachowanie przeswietlen
HISTORY_MSG_126;Puste pole - Wybor
HISTORY_MSG_127;Puste pole - Auto-wybor
HISTORY_MSG_128;Puste pole - Promien rozmycia
@ -649,7 +648,6 @@ PARTIALPASTE_PREPROCESS_LINEDENOISE;Redukcja szumow liniowych
PARTIALPASTE_RAWCACORR_AUTO;Autokorekcja aberracji chr.
PARTIALPASTE_RAWEXPOS_BLACK;Poziomy czerni
PARTIALPASTE_RAWEXPOS_LINEAR;Korekcja punktu bieli
PARTIALPASTE_RAWEXPOS_PRESER;Zachowanie przeswietlen
PARTIALPASTE_RAWGROUP;Ustawienia raw
PARTIALPASTE_RAW_DCBENHANCE;Zastosuj poprawe DCB
PARTIALPASTE_RAW_DCBITERATIONS;Liczba powtorzen DCB
@ -1252,7 +1250,6 @@ TP_RAWEXPOS_BLACK_BLUE;Niebieski
TP_RAWEXPOS_BLACK_GREEN;Zielony
TP_RAWEXPOS_BLACK_RED;Czerwony
TP_RAWEXPOS_LINEAR;Liniowy wspolczynnik korekcji
TP_RAWEXPOS_PRESER;Zachowanie przeswietlen
TP_RAWEXPOS_RGB;Czerwony, Zielony, Niebieski
TP_RAWEXPOS_TWOGREEN;Polacz obie zielenie
TP_RAW_DCBENHANCE;Zastosuj poprawe DCB
@ -2032,7 +2029,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: <b>-</b>
!TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
!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_IMAGENUM_SN;SN mode
!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\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_LMMSE;LMMSE
!TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern)

View File

@ -370,7 +370,6 @@ HISTORY_MSG_121;Raw CA Correção - Automática
HISTORY_MSG_122;Quadro Escuro - Seleção Automática
HISTORY_MSG_123;Quadro Escuro - Arquivo
HISTORY_MSG_124;Correção de ponto branco
HISTORY_MSG_125;Preservação da nitidez
HISTORY_MSG_126;Flat-Field - Arquivo
HISTORY_MSG_127;Flat-Field - Seleção automática
HISTORY_MSG_128;Flat-Field - Raio de desfoque
@ -982,7 +981,6 @@ PARTIALPASTE_RAWCACORR_AUTO;Auto correção CA
PARTIALPASTE_RAWCACORR_CAREDBLUE;vermelho & azul CA
PARTIALPASTE_RAWEXPOS_BLACK;Níveis de preto
PARTIALPASTE_RAWEXPOS_LINEAR;Correção de ponto branco
PARTIALPASTE_RAWEXPOS_PRESER;preservação do realce
PARTIALPASTE_RAWGROUP;Configurações Raw
PARTIALPASTE_RAW_BORDER;Borda raw
PARTIALPASTE_RAW_DCBENHANCE;Aprimoramento DCB
@ -1758,7 +1756,6 @@ TP_RAWEXPOS_BLACK_BLUE;Azul
TP_RAWEXPOS_BLACK_GREEN;Verde
TP_RAWEXPOS_BLACK_RED;Vermelho
TP_RAWEXPOS_LINEAR;Correção de ponto branco
TP_RAWEXPOS_PRESER;Preservação do realce
TP_RAWEXPOS_RGB;Vermelho, Verde, Azul
TP_RAWEXPOS_TWOGREEN;Ligações verdes
TP_RAW_1PASSMEDIUM;1-Passar (Medio)
@ -2313,6 +2310,7 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: <b>-</b>
!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift
!TP_RAW_DUALDEMOSAICAUTOCONTRAST;Auto threshold
!TP_RAW_DUALDEMOSAICAUTOCONTRAST_TOOLTIP;If the checkbox is checked (recommended), RawTherapee calculates an optimum value based on flat regions in the image.\nIf there is no flat region in the image or the image is too noisy, the value will be set to 0.\nTo set the value manually, uncheck the checkbox first (reasonable values depend on the image).
!TP_RAW_IMAGENUM_SN;SN mode
!TP_RETINEX_CONTEDIT_MAP;Equalizer
!TP_RETINEX_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain.
!TP_RETINEX_MAP;Method

View File

@ -368,7 +368,6 @@ HISTORY_MSG_121;(raw) Авто ХА
HISTORY_MSG_122;Авто темновой кадр
HISTORY_MSG_123;Файл темнового кадра
HISTORY_MSG_124;Коррекция баланса белого
HISTORY_MSG_125;Сохранение пересветов
HISTORY_MSG_126;Файл плоского поля
HISTORY_MSG_127;Автовыбор плоского поля
HISTORY_MSG_128;Радиус размытия плоского поля
@ -704,7 +703,6 @@ PARTIALPASTE_PREPROCESS_LINEDENOISE;Фильтр полосообразного
PARTIALPASTE_RAWCACORR_AUTO;Автоматическая коррекция ХА
PARTIALPASTE_RAWEXPOS_BLACK;Уровень черного
PARTIALPASTE_RAWEXPOS_LINEAR;Коррекция точки белого
PARTIALPASTE_RAWEXPOS_PRESER;Сохранение пересветов
PARTIALPASTE_RAWGROUP;Настройки Raw
PARTIALPASTE_RAW_DCBENHANCE;Применить расширенный DCB
PARTIALPASTE_RAW_DCBITERATIONS;Количество проходов DCB
@ -1322,7 +1320,6 @@ TP_RAWEXPOS_BLACK_BLUE;Синий
TP_RAWEXPOS_BLACK_GREEN;Зелёный
TP_RAWEXPOS_BLACK_RED;Красный
TP_RAWEXPOS_LINEAR;Коррекция точки белого
TP_RAWEXPOS_PRESER;Сохранение пересветов
TP_RAWEXPOS_RGB;Красный, Зелёный, Синий
TP_RAWEXPOS_TWOGREEN;Два зеленых совместно
TP_RAW_AHD;AHD
@ -2054,7 +2051,8 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: <b>-</b>
!TP_RAW_DUALDEMOSAICAUTOCONTRAST_TOOLTIP;If the checkbox is checked (recommended), RawTherapee calculates an optimum value based on flat regions in the image.\nIf there is no flat region in the image or the image is too noisy, the value will be set to 0.\nTo set the value manually, uncheck the checkbox first (reasonable values depend on the image).
!TP_RAW_DUALDEMOSAICCONTRAST;Contrast threshold
!TP_RAW_IMAGENUM;Sub-image
!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_IMAGENUM_SN;SN mode
!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\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_PIXELSHIFTBLUR;Blur motion mask
!TP_RAW_PIXELSHIFTDMETHOD;Demosaic method for motion
!TP_RAW_PIXELSHIFTEPERISO;Sensitivity

View File

@ -312,7 +312,6 @@ HISTORY_MSG_121;Сам исправи аберације
HISTORY_MSG_122;Сам примени тамни кадар
HISTORY_MSG_123;Датотека за тамни кадар
HISTORY_MSG_124;Линеарна исправка експ.
HISTORY_MSG_125;Поправка експ. уз очување светлог
HISTORY_MSG_126;Датотека са равним пољем
HISTORY_MSG_127;Сам изабери равно поље
HISTORY_MSG_128;Полупречник равног поља
@ -570,7 +569,6 @@ PARTIALPASTE_PREPROCESS_LINEDENOISE;Линијски филтер шума
PARTIALPASTE_RAWCACORR_AUTO;Ауто хроматске аберације
PARTIALPASTE_RAWEXPOS_BLACK;Ниво црне
PARTIALPASTE_RAWEXPOS_LINEAR;Линеарни фактор исправке RAW беле тачке
PARTIALPASTE_RAWEXPOS_PRESER;Raw тачка беле уз очување светлих делова
PARTIALPASTE_RAWGROUP;Raw подешавања
PARTIALPASTE_RAW_DCBENHANCE;Примени корак ДЦБ побољшања
PARTIALPASTE_RAW_DCBITERATIONS;Број ДЦБ понављања
@ -1092,7 +1090,6 @@ TP_RAWCACORR_CABLUE;Плава
TP_RAWCACORR_CARED;Црвена
TP_RAWEXPOS_BLACKS;Ниво црне
TP_RAWEXPOS_LINEAR;Линеарни фактор корекције
TP_RAWEXPOS_PRESER;Очување светлих делова
TP_RAWEXPOS_TWOGREEN;Обе зелене
TP_RAW_DCBENHANCE;Примени ДЦБ побољшање
TP_RAW_DCBITERATIONS;Број ДЦБ пролаза
@ -2024,7 +2021,8 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике <b>-</b>
!TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
!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_IMAGENUM_SN;SN mode
!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\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_LMMSE;LMMSE
!TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern)

View File

@ -312,7 +312,6 @@ HISTORY_MSG_121;Sam ispravi aberacije
HISTORY_MSG_122;Sam primeni tamni kadar
HISTORY_MSG_123;Datoteka za tamni kadar
HISTORY_MSG_124;Linearna ispravka eksp.
HISTORY_MSG_125;Popravka eksp. uz očuvanje svetlog
HISTORY_MSG_126;Datoteka sa ravnim poljem
HISTORY_MSG_127;Sam izaberi ravno polje
HISTORY_MSG_128;Poluprečnik ravnog polja
@ -570,7 +569,6 @@ PARTIALPASTE_PREPROCESS_LINEDENOISE;Linijski filter šuma
PARTIALPASTE_RAWCACORR_AUTO;Auto hromatske aberacije
PARTIALPASTE_RAWEXPOS_BLACK;Nivo crne
PARTIALPASTE_RAWEXPOS_LINEAR;Linearni faktor ispravke RAW bele tačke
PARTIALPASTE_RAWEXPOS_PRESER;Raw tačka bele uz očuvanje svetlih delova
PARTIALPASTE_RAWGROUP;Raw podešavanja
PARTIALPASTE_RAW_DCBENHANCE;Primeni korak DCB poboljšanja
PARTIALPASTE_RAW_DCBITERATIONS;Broj DCB ponavljanja
@ -1092,7 +1090,6 @@ TP_RAWCACORR_CABLUE;Plava
TP_RAWCACORR_CARED;Crvena
TP_RAWEXPOS_BLACKS;Nivo crne
TP_RAWEXPOS_LINEAR;Linearni faktor korekcije
TP_RAWEXPOS_PRESER;Očuvanje svetlih delova
TP_RAWEXPOS_TWOGREEN;Obe zelene
TP_RAW_DCBENHANCE;Primeni DCB poboljšanje
TP_RAW_DCBITERATIONS;Broj DCB prolaza
@ -2024,7 +2021,8 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike <b>-</b>
!TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
!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_IMAGENUM_SN;SN mode
!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\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_LMMSE;LMMSE
!TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern)

View File

@ -688,7 +688,6 @@ ZOOMPANEL_ZOOMOUT;Oddialiť <b>-</b>
!HISTORY_MSG_122;Dark-Frame - Auto-selection
!HISTORY_MSG_123;Dark-Frame - File
!HISTORY_MSG_124;White point correction
!HISTORY_MSG_125;Highlight preservation
!HISTORY_MSG_126;Flat-Field - File
!HISTORY_MSG_127;Flat-Field - Auto-selection
!HISTORY_MSG_128;Flat-Field - Blur radius
@ -1256,7 +1255,6 @@ ZOOMPANEL_ZOOMOUT;Oddialiť <b>-</b>
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
!PARTIALPASTE_RAWGROUP;Raw Settings
!PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement
@ -1910,7 +1908,6 @@ ZOOMPANEL_ZOOMOUT;Oddialiť <b>-</b>
!TP_RAWEXPOS_BLACK_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_LINEAR;White-point correction
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens
!TP_RAW_1PASSMEDIUM;1-pass (Markesteijn)
@ -1936,7 +1933,8 @@ ZOOMPANEL_ZOOMOUT;Oddialiť <b>-</b>
!TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
!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_IMAGENUM_SN;SN mode
!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\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_LABEL;Demosaicing
!TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps

View File

@ -628,7 +628,6 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!HISTORY_MSG_122;Dark-Frame - Auto-selection
!HISTORY_MSG_123;Dark-Frame - File
!HISTORY_MSG_124;White point correction
!HISTORY_MSG_125;Highlight preservation
!HISTORY_MSG_126;Flat-Field - File
!HISTORY_MSG_127;Flat-Field - Auto-selection
!HISTORY_MSG_128;Flat-Field - Blur radius
@ -1205,7 +1204,6 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
!PARTIALPASTE_RAWGROUP;Raw Settings
!PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement
@ -1896,7 +1894,6 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!TP_RAWEXPOS_BLACK_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_LINEAR;White-point correction
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens
!TP_RAW_1PASSMEDIUM;1-pass (Markesteijn)
@ -1924,7 +1921,8 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
!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_IMAGENUM_SN;SN mode
!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\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_LABEL;Demosaicing
!TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps

View File

@ -346,7 +346,6 @@ HISTORY_MSG_121;Automat. CA-reducering
HISTORY_MSG_122;Automat. svartbildsval
HISTORY_MSG_123;Svartbildsfil
HISTORY_MSG_124;Vitpunktskorrigering
HISTORY_MSG_125;Högdagerbevarande
HISTORY_MSG_126;Plattfältsfil
HISTORY_MSG_127;Automatiskt val av plattfält
HISTORY_MSG_128;Oskärperadie för plattfält
@ -788,7 +787,6 @@ PARTIALPASTE_PRSHARPENING;Skärpning efter storleksändring
PARTIALPASTE_RAWCACORR_AUTO;Reducera kromatiska abberationer automatiskt
PARTIALPASTE_RAWEXPOS_BLACK;Svärta
PARTIALPASTE_RAWEXPOS_LINEAR;Vitpunktskorrigering
PARTIALPASTE_RAWEXPOS_PRESER;Korrigering av högdagrar
PARTIALPASTE_RAWGROUP;Råbildsinställningar
PARTIALPASTE_RAW_DCBENHANCE;DCB-förbättringssteg
PARTIALPASTE_RAW_DCBITERATIONS;Antal DCB-iterationer
@ -1458,7 +1456,6 @@ TP_RAWEXPOS_BLACK_BLUE;Blå
TP_RAWEXPOS_BLACK_GREEN;Grön
TP_RAWEXPOS_BLACK_RED;Röd
TP_RAWEXPOS_LINEAR;Vitpunktskorrigering
TP_RAWEXPOS_PRESER;Bevara högdagrar
TP_RAWEXPOS_RGB;Röd, grön, blå
TP_RAWEXPOS_TWOGREEN;Två gröna tillsammans
TP_RAW_DCBENHANCE;DCB-förbättringssteg
@ -2213,7 +2210,8 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: <b>-</b>
!TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
!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_IMAGENUM_SN;SN mode
!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\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_LMMSE;LMMSE
!TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern)

View File

@ -627,7 +627,6 @@ TP_WBALANCE_TEMPERATURE;Isı
!HISTORY_MSG_122;Dark-Frame - Auto-selection
!HISTORY_MSG_123;Dark-Frame - File
!HISTORY_MSG_124;White point correction
!HISTORY_MSG_125;Highlight preservation
!HISTORY_MSG_126;Flat-Field - File
!HISTORY_MSG_127;Flat-Field - Auto-selection
!HISTORY_MSG_128;Flat-Field - Blur radius
@ -1204,7 +1203,6 @@ TP_WBALANCE_TEMPERATURE;Isı
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
!PARTIALPASTE_RAWGROUP;Raw Settings
!PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement
@ -1895,7 +1893,6 @@ TP_WBALANCE_TEMPERATURE;Isı
!TP_RAWEXPOS_BLACK_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_LINEAR;White-point correction
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens
!TP_RAW_1PASSMEDIUM;1-pass (Markesteijn)
@ -1923,7 +1920,8 @@ TP_WBALANCE_TEMPERATURE;Isı
!TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image
!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_IMAGENUM_SN;SN mode
!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\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_LABEL;Demosaicing
!TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps

View File

@ -380,7 +380,6 @@ HISTORY_MSG_121;Raw CA Correction - Auto
HISTORY_MSG_122;Dark-Frame - Auto-selection
HISTORY_MSG_123;Dark-Frame - File
HISTORY_MSG_124;White point correction
HISTORY_MSG_125;Highlight preservation
HISTORY_MSG_126;Flat-Field - File
HISTORY_MSG_127;Flat-Field - Auto-selection
HISTORY_MSG_128;Flat-Field - Blur radius
@ -1018,7 +1017,6 @@ PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift
PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
PARTIALPASTE_RAWEXPOS_BLACK;Black levels
PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
PARTIALPASTE_RAWGROUP;Raw Settings
PARTIALPASTE_RAW_BORDER;Raw border
PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement
@ -1844,7 +1842,6 @@ TP_RAWEXPOS_BLACK_BLUE;Blue
TP_RAWEXPOS_BLACK_GREEN;Green
TP_RAWEXPOS_BLACK_RED;Red
TP_RAWEXPOS_LINEAR;White-point correction
TP_RAWEXPOS_PRESER;Highlight preservation
TP_RAWEXPOS_RGB;Red, Green, Blue
TP_RAWEXPOS_TWOGREEN;Link greens
TP_RAW_1PASSMEDIUM;1-pass (Markesteijn)
@ -1874,7 +1871,8 @@ TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, bu
TP_RAW_HPHD;HPHD
TP_RAW_IGV;IGV
TP_RAW_IMAGENUM;Sub-image
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_IMAGENUM_SN;SN mode
TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel, Fuji EXR).\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_LABEL;Demosaicing
TP_RAW_LMMSE;LMMSE
TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps

View File

@ -2,7 +2,7 @@
This file is part of RawTherapee.
Copyright (c) 2016-2018 TooWaBoo
Version 3.00
Version 3.02
RawTherapee is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -957,10 +957,9 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
padding-right: 0.25em;
}
#RightNotebook > stack > :nth-child(1) > * > box,
#RightNotebook > stack > :nth-child(4) > * > box {
padding: 0.5em;
border: 0.083333333333333333em solid @bg-entry-border;
#RightNotebook > stack > scrolledwindow > viewport {
padding: 0 0.5em;
border: 0.083333333333333333em solid @bg-dark-grey;
}
#PrefNotebook > header {
@ -1061,7 +1060,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
min-width: 0;
padding: 0;
}
#FileBrowserQueryToolbar {
#FileBrowserQueryToolbar > viewport > box {
margin: 0 0 0.416666666666666666em 0;
min-height: 0;
min-width: 0;
@ -1646,7 +1645,7 @@ messagedialog .dialog-action-area button:not(:only-child):nth-child(2) {
min-width: 1.666666666666666666em;/*x*/
margin: 0;
border-radius: 0 0.2em 0.2em 0;
box-shadow: inset 0 0.1em rgba(0, 0, 0, 0.1), inset -0.1em -0.1em rgba(230, 230, 230, 0.09);
box-shadow: inset 0 0.1em rgba(0, 0, 0, 0.1), inset -0.1em -0.1em rgba(230, 230, 230, 0.07);
border: 0.083333333333333333em solid @bg-entry-border;
background-color: @bg-scale-entry;
padding: 0;
@ -1866,19 +1865,17 @@ spinbutton {
min-height: 1.666666666666666666em;/*x*/
min-width: 0;
border-radius: 0.2em;
box-shadow: inset 0.1em 0.1em rgba(0, 0, 0, 0.1), inset -0.1em -0.1em rgba(230, 230, 230, 0.09);
box-shadow: inset 0.1em 0.1em rgba(0, 0, 0, 0.1), inset -0.1em -0.1em rgba(230, 230, 230, 0.07);
border: 0.083333333333333333em solid @bg-entry-border;
background-color: @bg-scale-entry;
}
#FileBrowserQueryToolbar entry,
#FileBrowserIconToolbar entry {
min-height: 1.666666666666666666em;/*x*/
min-width: 0;
margin: 0;
border-right: none;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
box-shadow: inset 0.1em 0.1em rgba(0, 0, 0, 0.1), inset 0 -0.1em rgba(230, 230, 230, 0.09);
box-shadow: inset 0.1em 0.1em rgba(0, 0, 0, 0.1), inset 0 -0.1em rgba(230, 230, 230, 0.07);
}
#FileBrowserIconToolbar box > entry {

View File

@ -151,7 +151,9 @@ float* RawImageSource::CA_correct_RT(
blueFactor = new array2D<float>((W + 1 - 2 * cb) / 2, (H + 1 - 2 * cb) / 2);
oldraw = new array2D<float>((W + 1- 2 * cb) / 2, H- 2 * cb);
// copy raw values before ca correction
#ifdef _OPENMP
#pragma omp parallel for
#endif
for (int i = cb; i < H - cb; ++i) {
for (int j = cb + (FC(i, 0) & 1); j < W - cb; j += 2) {
(*oldraw)[i - cb][(j - cb) / 2] = rawData[i][j];
@ -220,7 +222,9 @@ float* RawImageSource::CA_correct_RT(
constexpr float eps = 1e-5f, eps2 = 1e-10f; //tolerance to avoid dividing by zero
#ifdef _OPENMP
#pragma omp parallel
#endif
{
int progresscounter = 0;
@ -274,7 +278,9 @@ float* RawImageSource::CA_correct_RT(
float blocksqavethr[2][2] = {};
float blockdenomthr[2][2] = {};
#ifdef _OPENMP
#pragma omp for collapse(2) schedule(dynamic) nowait
#endif
for (int top = -border ; top < height; top += ts - border2) {
for (int left = -border; left < width - (W & 1); left += ts - border2) {
memset(bufferThr, 0, buffersize);
@ -647,7 +653,9 @@ float* RawImageSource::CA_correct_RT(
progresscounter++;
if (progresscounter % 8 == 0) {
#ifdef _OPENMP
#pragma omp critical (cadetectpass1)
#endif
{
progress += 4.0 * SQR(ts - border2) / (iterations * height * width);
progress = std::min(progress, 1.0);
@ -658,7 +666,9 @@ float* RawImageSource::CA_correct_RT(
}
}
//end of diagnostic pass
#ifdef _OPENMP
#pragma omp critical (cadetectpass2)
#endif
{
for (int dir = 0; dir < 2; dir++) {
for (int c = 0; c < 2; c++) {
@ -668,9 +678,13 @@ float* RawImageSource::CA_correct_RT(
}
}
}
#ifdef _OPENMP
#pragma omp barrier
#endif
#ifdef _OPENMP
#pragma omp single
#endif
{
for (int dir = 0; dir < 2; dir++)
for (int c = 0; c < 2; c++) {
@ -806,7 +820,9 @@ float* RawImageSource::CA_correct_RT(
float* grbdiff = (float (*)) (data + 2 * sizeof(float) * ts * ts + 3 * 64); // there is no overlap in buffer usage => share
//green interpolated to optical sample points for R/B
float* gshift = (float (*)) (data + 2 * sizeof(float) * ts * ts + sizeof(float) * ts * tsh + 4 * 64); // there is no overlap in buffer usage => share
#ifdef _OPENMP
#pragma omp for schedule(dynamic) collapse(2)
#endif
for (int top = -border; top < height; top += ts - border2) {
for (int left = -border; left < width - (W & 1); left += ts - border2) {
memset(bufferThr, 0, buffersizePassTwo);
@ -1197,7 +1213,9 @@ float* RawImageSource::CA_correct_RT(
progresscounter++;
if (progresscounter % 8 == 0)
#ifdef _OPENMP
#pragma omp critical (cacorrect)
#endif
{
progress += 4.0 * SQR(ts - border2) / (iterations * height * width);
progress = std::min(progress, 1.0);
@ -1208,7 +1226,9 @@ float* RawImageSource::CA_correct_RT(
}
// copy temporary image matrix back to image matrix
#ifdef _OPENMP
#pragma omp for
#endif
for (int row = cb; row < height - cb; row++) {
int col = cb + (FC(row, 0) & 1);
@ -1232,14 +1252,18 @@ float* RawImageSource::CA_correct_RT(
// of red and blue channel and apply a gaussian blur to them.
// Then we apply the resulting factors per pixel on the result of raw ca correction
#ifdef _OPENMP
#pragma omp parallel
#endif
{
#ifdef __SSE2__
const vfloat onev = F2V(1.f);
const vfloat twov = F2V(2.f);
const vfloat zd5v = F2V(0.5f);
#endif
#ifdef _OPENMP
#pragma omp for
#endif
for (int i = 0; i < H - 2 * cb; ++i) {
const int firstCol = FC(i, 0) & 1;
const int colour = FC(i, firstCol);
@ -1260,7 +1284,9 @@ float* RawImageSource::CA_correct_RT(
}
}
#ifdef _OPENMP
#pragma omp single
#endif
{
if (H % 2) {
// odd height => factors are not set in last row => use values of preceding row
@ -1287,7 +1313,9 @@ float* RawImageSource::CA_correct_RT(
gaussianBlur(*blueFactor, *blueFactor, (W + 1 - 2 * cb) / 2, (H + 1 - 2 * cb) / 2, 30.0);
// apply correction factors to avoid (reduce) colour shift
#ifdef _OPENMP
#pragma omp for
#endif
for (int i = 0; i < H - 2 * cb; ++i) {
const int firstCol = FC(i, 0) & 1;
const int colour = FC(i, firstCol);

View File

@ -58,13 +58,13 @@ set(RTENGINESOURCEFILES
dual_demosaic_RT.cc
dynamicprofile.cc
eahd_demosaic.cc
expo_before_b.cc
fast_demo.cc
ffmanager.cc
flatcurves.cc
gauss.cc
green_equil_RT.cc
hilite_recon.cc
hphd_demosaic_RT.cc
iccjpeg.cc
iccstore.cc
iimage.cc

View File

@ -324,7 +324,9 @@ void MultiDiagonalSymmetricMatrix::VectorProduct(float* RESTRICT Product, float*
}
#endif
#ifdef _OPENMP
#pragma omp single
#endif
{
#ifdef __SSE2__
@ -892,12 +894,12 @@ void EdgePreservingDecomposition::CompressDynamicRange(float *Source, float Scal
#endif
for(int ii = 0; ii < n - 3; ii += 4) {
_mm_storeu_ps( &Source[ii], xlogf(LVFU(Source[ii]) + epsv));
_mm_storeu_ps( &Source[ii], xlogf(vmaxf(LVFU(Source[ii]), ZEROV) + epsv));
}
}
for(int ii = n - (n % 4); ii < n; ii++) {
Source[ii] = xlogf(Source[ii] + eps);
Source[ii] = xlogf(std::max(Source[ii], 0.f) + eps);
}
#else
@ -906,7 +908,7 @@ void EdgePreservingDecomposition::CompressDynamicRange(float *Source, float Scal
#endif
for(int ii = 0; ii < n; ii++) {
Source[ii] = xlogf(Source[ii] + eps);
Source[ii] = xlogf(std::max(Source[ii], 0.f) + eps);
}
#endif

View File

@ -1838,11 +1838,15 @@ BENCHFUN
for (int iteration = 1; iteration <= dnparams.passes; ++iteration) {
#ifdef _OPENMP
#pragma omp parallel
#endif
{
if (methmed < 2)
{
#ifdef _OPENMP
#pragma omp for
#endif
for (int i = 1; i < hei - 1; ++i) {
if (methmed == 0) {
@ -1857,7 +1861,9 @@ BENCHFUN
}
} else
{
#ifdef _OPENMP
#pragma omp for
#endif
for (int i = 2; i < hei - 2; ++i) {
if (methmed == 3) {
@ -1901,7 +1907,9 @@ BENCHFUN
if (methmed < 2)
{
#ifdef _OPENMP
#pragma omp for
#endif
for (int i = 1; i < hei - 1; ++i) {
if (methmed == 0) {
@ -1916,7 +1924,9 @@ BENCHFUN
}
} else
{
#ifdef _OPENMP
#pragma omp for
#endif
for (int i = 2; i < hei - 2; ++i) {
if (methmed == 3) {
@ -1961,7 +1971,9 @@ BENCHFUN
if (methmed < 2)
{
#ifdef _OPENMP
#pragma omp for
#endif
for (int i = 1; i < hei - 1; ++i) {
if (methmed == 0) {
@ -1976,7 +1988,9 @@ BENCHFUN
}
} else
{
#ifdef _OPENMP
#pragma omp for
#endif
for (int i = 2; i < hei - 2; ++i) {
if (methmed == 3) {

View File

@ -152,10 +152,14 @@ template<class T, class A> void bilateral05 (T** src, T** dst, T** buffer, int W
{
BL_BEGIN(318, 1)
#ifdef _OPENMP
#pragma omp for
#endif
BL_OPER3(1, 7, 7, 55)
BL_FREE
#ifdef _OPENMP
#pragma omp for
#endif
BL_END(1)
}
@ -164,10 +168,14 @@ template<class T, class A> void bilateral06 (T** src, T** dst, T** buffer, int W
{
BL_BEGIN(768, 1)
#ifdef _OPENMP
#pragma omp for
#endif
BL_OPER3(1, 4, 4, 16)
BL_FREE
#ifdef _OPENMP
#pragma omp for
#endif
BL_END(1)
}
@ -176,10 +184,14 @@ template<class T, class A> void bilateral07 (T** src, T** dst, T** buffer, int W
{
BL_BEGIN(366, 2)
#ifdef _OPENMP
#pragma omp for
#endif
BL_OPER5(0, 0, 1, 0, 8, 21, 1, 21, 59)
BL_FREE
#ifdef _OPENMP
#pragma omp for
#endif
BL_END(2)
}
@ -188,10 +200,14 @@ template<class T, class A> void bilateral08 (T** src, T** dst, T** buffer, int W
{
BL_BEGIN(753, 2)
#ifdef _OPENMP
#pragma omp for
#endif
BL_OPER5(0, 0, 1, 0, 5, 10, 1, 10, 23)
BL_FREE
#ifdef _OPENMP
#pragma omp for
#endif
BL_END(2)
}
@ -200,10 +216,14 @@ template<class T, class A> void bilateral09 (T** src, T** dst, T** buffer, int W
{
BL_BEGIN(595, 2)
#ifdef _OPENMP
#pragma omp for
#endif
BL_OPER5(0, 1, 2, 1, 6, 12, 2, 12, 22)
BL_FREE
#ifdef _OPENMP
#pragma omp for
#endif
BL_END(2)
}
@ -212,10 +232,14 @@ template<class T, class A> void bilateral10 (T** src, T** dst, T** buffer, int W
{
BL_BEGIN(910, 2)
#ifdef _OPENMP
#pragma omp for
#endif
BL_OPER5(0, 1, 2, 1, 4, 7, 2, 7, 12)
BL_FREE
#ifdef _OPENMP
#pragma omp for
#endif
BL_END(2)
}
@ -224,10 +248,14 @@ template<class T, class A> void bilateral11 (T** src, T** dst, T** buffer, int W
{
BL_BEGIN(209, 3)
#ifdef _OPENMP
#pragma omp for
#endif
BL_OPER7(0, 0, 1, 1, 0, 2, 5, 8, 1, 5, 18, 27, 1, 8, 27, 41)
BL_FREE
#ifdef _OPENMP
#pragma omp for
#endif
BL_END(3)
}
@ -236,10 +264,14 @@ template<class T, class A> void bilateral12 (T** src, T** dst, T** buffer, int W
{
BL_BEGIN(322, 3)
#ifdef _OPENMP
#pragma omp for
#endif
BL_OPER7(0, 0, 1, 1, 0, 1, 4, 6, 1, 4, 11, 16, 1, 6, 16, 23)
BL_FREE
#ifdef _OPENMP
#pragma omp for
#endif
BL_END(3)
}
@ -248,10 +280,14 @@ template<class T, class A> void bilateral13 (T** src, T** dst, T** buffer, int W
{
BL_BEGIN(336, 3)
#ifdef _OPENMP
#pragma omp for
#endif
BL_OPER7(0, 0, 1, 1, 0, 2, 4, 6, 1, 4, 11, 14, 1, 6, 14, 19)
BL_FREE
#ifdef _OPENMP
#pragma omp for
#endif
BL_END(3)
}
@ -260,10 +296,14 @@ template<class T, class A> void bilateral14 (T** src, T** dst, T** buffer, int W
{
BL_BEGIN(195, 3)
#ifdef _OPENMP
#pragma omp for
#endif
BL_OPER7(0, 1, 2, 3, 1, 4, 8, 10, 2, 8, 17, 21, 3, 10, 21, 28)
BL_FREE
#ifdef _OPENMP
#pragma omp for
#endif
BL_END(3)
}
@ -272,10 +312,14 @@ template<class T, class A> void bilateral15 (T** src, T** dst, T** buffer, int W
{
BL_BEGIN(132, 4)
#ifdef _OPENMP
#pragma omp for
#endif
BL_OPER9(0, 0, 0, 1, 1, 0, 1, 2, 4, 5, 0, 2, 6, 12, 14, 1, 4, 12, 22, 28, 1, 5, 14, 28, 35)
BL_FREE
#ifdef _OPENMP
#pragma omp for
#endif
BL_END(4)
}
@ -284,10 +328,14 @@ template<class T, class A> void bilateral16 (T** src, T** dst, T** buffer, int W
{
BL_BEGIN(180, 4)
#ifdef _OPENMP
#pragma omp for
#endif
BL_OPER9(0, 0, 0, 1, 1, 0, 1, 2, 3, 4, 0, 2, 5, 9, 10, 1, 3, 9, 15, 19, 1, 4, 10, 19, 23)
BL_FREE
#ifdef _OPENMP
#pragma omp for
#endif
BL_END(4)
}
@ -296,10 +344,14 @@ template<class T, class A> void bilateral17 (T** src, T** dst, T** buffer, int W
{
BL_BEGIN(195, 4)
#ifdef _OPENMP
#pragma omp for
#endif
BL_OPER9(0, 0, 1, 1, 1, 0, 1, 2, 3, 4, 1, 2, 5, 8, 9, 1, 3, 8, 13, 16, 1, 4, 9, 16, 19)
BL_FREE
#ifdef _OPENMP
#pragma omp for
#endif
BL_END(4)
}
@ -308,10 +360,14 @@ template<class T, class A> void bilateral18 (T** src, T** dst, T** buffer, int W
{
BL_BEGIN(151, 4)
#ifdef _OPENMP
#pragma omp for
#endif
BL_OPER9(0, 0, 1, 2, 2, 0, 1, 3, 5, 5, 1, 3, 6, 10, 12, 2, 5, 10, 16, 19, 2, 5, 12, 19, 22)
BL_FREE
#ifdef _OPENMP
#pragma omp for
#endif
BL_END(4)
}
@ -320,10 +376,14 @@ template<class T, class A> void bilateral19 (T** src, T** dst, T** buffer, int W
{
BL_BEGIN(151, 4)
#ifdef _OPENMP
#pragma omp for
#endif
BL_OPER9(0, 0, 1, 2, 2, 0, 1, 3, 4, 5, 1, 3, 5, 8, 9, 2, 4, 8, 12, 14, 2, 5, 9, 14, 16)
BL_FREE
#ifdef _OPENMP
#pragma omp for
#endif
BL_END(4)
}
@ -332,10 +392,14 @@ template<class T, class A> void bilateral20 (T** src, T** dst, T** buffer, int W
{
BL_BEGIN(116, 5)
#ifdef _OPENMP
#pragma omp for
#endif
BL_OPER11(0, 0, 0, 1, 1, 1, 0, 0, 1, 2, 3, 3, 0, 1, 2, 4, 7, 7, 1, 2, 4, 8, 12, 14, 1, 3, 7, 12, 18, 20, 1, 3, 7, 14, 20, 23)
BL_FREE
#ifdef _OPENMP
#pragma omp for
#endif
BL_END(5)
}
@ -344,10 +408,14 @@ template<class T, class A> void bilateral21 (T** src, T** dst, T** buffer, int W
{
BL_BEGIN(127, 5)
#ifdef _OPENMP
#pragma omp for
#endif
BL_OPER11(0, 0, 0, 1, 1, 1, 0, 0, 1, 2, 3, 3, 0, 1, 2, 4, 6, 7, 1, 2, 4, 8, 11, 12, 1, 3, 6, 11, 15, 17, 1, 3, 7, 12, 17, 19)
BL_FREE
#ifdef _OPENMP
#pragma omp for
#endif
BL_END(5)
}
@ -356,10 +424,14 @@ template<class T, class A> void bilateral22 (T** src, T** dst, T** buffer, int W
{
BL_BEGIN(109, 5)
#ifdef _OPENMP
#pragma omp for
#endif
BL_OPER11(0, 0, 0, 1, 1, 2, 0, 1, 2, 3, 3, 4, 1, 2, 3, 5, 7, 8, 1, 3, 5, 9, 12, 13, 1, 3, 7, 12, 16, 18, 2, 4, 8, 13, 18, 20)
BL_FREE
#ifdef _OPENMP
#pragma omp for
#endif
BL_END(5)
}
@ -368,10 +440,14 @@ template<class T, class A> void bilateral23 (T** src, T** dst, T** buffer, int W
{
BL_BEGIN(132, 5)
#ifdef _OPENMP
#pragma omp for
#endif
BL_OPER11(0, 0, 1, 1, 1, 1, 0, 1, 1, 2, 3, 3, 1, 1, 3, 5, 6, 7, 1, 2, 5, 7, 10, 11, 1, 3, 6, 10, 13, 14, 1, 3, 7, 11, 14, 16)
BL_FREE
#ifdef _OPENMP
#pragma omp for
#endif
BL_END(5)
}
@ -380,10 +456,14 @@ template<class T, class A> void bilateral24 (T** src, T** dst, T** buffer, int W
{
BL_BEGIN(156, 5)
#ifdef _OPENMP
#pragma omp for
#endif
BL_OPER11(0, 0, 1, 1, 1, 1, 0, 1, 1, 2, 3, 3, 1, 1, 3, 4, 5, 6, 1, 2, 4, 6, 8, 9, 1, 3, 5, 8, 10, 11, 1, 3, 6, 9, 11, 12)
BL_FREE
#ifdef _OPENMP
#pragma omp for
#endif
BL_END(5)
}
@ -392,10 +472,14 @@ template<class T, class A> void bilateral25 (T** src, T** dst, T** buffer, int W
{
BL_BEGIN(173, 5)
#ifdef _OPENMP
#pragma omp for
#endif
BL_OPER11(0, 0, 1, 1, 1, 1, 0, 1, 1, 2, 3, 3, 1, 1, 2, 4, 5, 5, 1, 2, 4, 5, 7, 7, 1, 3, 5, 7, 9, 9, 1, 3, 5, 7, 9, 10)
BL_FREE
#ifdef _OPENMP
#pragma omp for
#endif
BL_END(5)
}

View File

@ -2244,9 +2244,8 @@ Camera constants:
"make_model": "Sigma SD14",
"dcraw_matrix": [ 16411,-4764,-2383,8110,2603,-645,3135,3878,1984 ], // experimental inverted icc wp12 - build with BL=15
//"dcraw_matrix": [ 13804,-4156,-1896,6917,1909,-431,2768,2989,1741 ], // experimental inverted icc wp10 - build with BL=15
"ranges": { "black": 0, "white": 16383 }, // peripheral black stripes give BL around 37
"raw_crop": [ 0, 0, -0, -0 ]
//"raw_crop": [ 18, 12, 2652, 1768 ]
"ranges": { "black": 15, "white": 7000 },
"raw_crop": [ 18, 12, 2652, 1768 ]
},
{ // Quality C, correction for frame width

View File

@ -64,7 +64,9 @@ void RawImageSource::CLASS cfa_linedn(float noise, bool horizontal, bool vertica
float noisevarm4 = 4.0f * noisevar;
volatile double progress = 0.0;
float* RawDataTmp = (float*)malloc( width * height * sizeof(float));
#ifdef _OPENMP
#pragma omp parallel
#endif
{
// allocate memory and assure the arrays don't have same 64 byte boundary to avoid L1 conflict misses
@ -76,7 +78,9 @@ void RawImageSource::CLASS cfa_linedn(float noise, bool horizontal, bool vertica
float linehvar[4], linevvar[4], noisefactor[4][8][2], coeffsq;
float dctblock[4][8][8];
#ifdef _OPENMP
#pragma omp for
#endif
for(int i = 0; i < height; i++)
for(int j = 0; j < width; j++) {
@ -84,7 +88,9 @@ void RawImageSource::CLASS cfa_linedn(float noise, bool horizontal, bool vertica
}
// Main algorithm: Tile loop
#ifdef _OPENMP
#pragma omp for schedule(dynamic) collapse(2)
#endif
for (int top = 0; top < height - 16; top += TS - 32)
for (int left = 0; left < width - 16; left += TS - 32) {
@ -251,7 +257,9 @@ void RawImageSource::CLASS cfa_linedn(float noise, bool horizontal, bool vertica
free(cfain);
// copy temporary buffer back to image matrix
#ifdef _OPENMP
#pragma omp for schedule(dynamic,16)
#endif
for(int i = 0; i < height; i++) {
float f = rowblender(i);

View File

@ -1695,7 +1695,9 @@ void CLASS phase_one_correct()
curve[i] = LIM(num+i,0,65535);
}
apply: /* apply to whole image */
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16)
#endif
for (int row=0; row < raw_height; row++) {
for (int col = (tag & 1)*ph1.split_col; col < raw_width; col++) {
RAW(row,col) = curve[RAW(row,col)];
@ -1770,7 +1772,9 @@ void CLASS phase_one_correct()
cx[17] = cf[17] = ((unsigned) ref[15] * 65535) / lc[qr][qc][15];
cx[18] = cf[18] = 65535;
cubic_spline(cx, cf, 19);
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16)
#endif
for (int row = (qr ? ph1.split_row : 0); row < (qr ? raw_height : ph1.split_row); row++)
for (int col = (qc ? ph1.split_col : 0); col < (qc ? raw_width : ph1.split_col); col++)
RAW(row,col) = curve[RAW(row,col)];
@ -1787,7 +1791,9 @@ void CLASS phase_one_correct()
qmult[1][0] = 1.0 + getreal(11);
get4(); get4(); get4();
qmult[1][1] = 1.0 + getreal(11);
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16)
#endif
for (int row=0; row < raw_height; row++) {
for (int col=0; col < raw_width; col++) {
int i = qmult[row >= ph1.split_row][col >= ph1.split_col] * RAW(row,col);
@ -2329,7 +2335,9 @@ void CLASS hasselblad_correct()
}
// apply flatfield
#ifdef _OPENMP
#pragma omp parallel for
#endif
for (int row = 0; row < raw_height; row++) {
int ffs, cur_ffr, i, c;
if (row < row_offset) {
@ -2664,28 +2672,76 @@ void CLASS canon_rmf_load_raw()
maximum = curve[0x3ff];
}
unsigned CLASS pana_bits_t::operator() (int nbits)
unsigned CLASS pana_bits_t::operator() (int nbits, unsigned *bytes)
{
/*RT static uchar buf[0x4000]; */
/*RT static int vbits;*/
int byte;
if (!nbits) return vbits=0;
if (!nbits && !bytes) return vbits=0;
if (!vbits) {
fread (buf+load_flags, 1, 0x4000-load_flags, ifp);
fread (buf, 1, load_flags, ifp);
}
if (encoding == 5) {
for (byte = 0; byte < 16; byte++)
{
bytes[byte] = buf[vbits++];
vbits &= 0x3FFF;
}
return 0;
} else {
vbits = (vbits - nbits) & 0x1ffff;
byte = vbits >> 3 ^ 0x3ff0;
return (buf[byte] | buf[byte+1] << 8) >> (vbits & 7) & ~(-1 << nbits);
}
}
void CLASS panasonic_load_raw()
{
pana_bits_t pana_bits(ifp,load_flags);
pana_bits_t pana_bits(ifp,load_flags, RT_pana_info.encoding);
int row, col, i, j, sh=0, pred[2], nonz[2];
unsigned bytes[16] = {};
ushort *raw_block_data;
pana_bits(0);
pana_bits(0, 0);
int enc_blck_size = RT_pana_info.bpp == 12 ? 10 : 9;
if (RT_pana_info.encoding == 5) {
for (row = 0; row < raw_height; row++)
{
raw_block_data = raw_image + row * raw_width;
for (col = 0; col < raw_width; col += enc_blck_size) {
pana_bits(0, bytes);
if (RT_pana_info.bpp == 12) {
raw_block_data[col] = ((bytes[1] & 0xF) << 8) + bytes[0];
raw_block_data[col + 1] = 16 * bytes[2] + (bytes[1] >> 4);
raw_block_data[col + 2] = ((bytes[4] & 0xF) << 8) + bytes[3];
raw_block_data[col + 3] = 16 * bytes[5] + (bytes[4] >> 4);
raw_block_data[col + 4] = ((bytes[7] & 0xF) << 8) + bytes[6];
raw_block_data[col + 5] = 16 * bytes[8] + (bytes[7] >> 4);
raw_block_data[col + 6] = ((bytes[10] & 0xF) << 8) + bytes[9];
raw_block_data[col + 7] = 16 * bytes[11] + (bytes[10] >> 4);
raw_block_data[col + 8] = ((bytes[13] & 0xF) << 8) + bytes[12];
raw_block_data[col + 9] = 16 * bytes[14] + (bytes[13] >> 4);
}
else if (RT_pana_info.bpp == 14) {
raw_block_data[col] = bytes[0] + ((bytes[1] & 0x3F) << 8);
raw_block_data[col + 1] = (bytes[1] >> 6) + 4 * (bytes[2]) +
((bytes[3] & 0xF) << 10);
raw_block_data[col + 2] = (bytes[3] >> 4) + 16 * (bytes[4]) +
((bytes[5] & 3) << 12);
raw_block_data[col + 3] = ((bytes[5] & 0xFC) >> 2) + (bytes[6] << 6);
raw_block_data[col + 4] = bytes[7] + ((bytes[8] & 0x3F) << 8);
raw_block_data[col + 5] = (bytes[8] >> 6) + 4 * bytes[9] + ((bytes[10] & 0xF) << 10);
raw_block_data[col + 6] = (bytes[10] >> 4) + 16 * bytes[11] + ((bytes[12] & 3) << 12);
raw_block_data[col + 7] = ((bytes[12] & 0xFC) >> 2) + (bytes[13] << 6);
raw_block_data[col + 8] = bytes[14] + ((bytes[15] & 0x3F) << 8);
}
}
}
} else {
for (row=0; row < height; row++)
for (col=0; col < raw_width; col++) {
if ((i = col % 14) == 0)
@ -2702,6 +2758,7 @@ void CLASS panasonic_load_raw()
if ((RAW(row,col) = pred[col & 1]) > 4098 && col < width) derror();
}
}
}
void CLASS olympus_load_raw()
{
@ -4470,7 +4527,9 @@ void CLASS crop_masked_pixels()
}
}
} else {
#ifdef _OPENMP
#pragma omp parallel for
#endif
for (int row=0; row < height; row++)
for (int col=0; col < width; col++)
BAYER2(row,col) = RAW(row+top_margin,col+left_margin);
@ -6071,6 +6130,7 @@ int CLASS parse_tiff_ifd (int base)
unsigned *buf, sony_offset=0, sony_length=0, sony_key=0;
struct jhead jh;
/*RT*/ IMFILE *sfp;
/*RT*/ int pana_raw = 0;
if (tiff_nifds >= sizeof tiff_ifd / sizeof tiff_ifd[0])
return 1;
@ -6086,10 +6146,16 @@ int CLASS parse_tiff_ifd (int base)
while (entries--) {
tiff_get (base, &tag, &type, &len, &save);
switch (tag) {
case 1: if (len == 4) pana_raw = get4(); break;
case 5: width = get2(); break;
case 6: height = get2(); break;
case 7: width += get2(); break;
case 9: if ((i = get2())) filters = i; break;
case 10:
if (pana_raw && len == 1 && type == 3) {
RT_pana_info.bpp = get2();
}
break;
case 17: case 18:
if (type == 3 && len == 1)
cam_mul[(tag-17)*2] = get2() / 256.0;
@ -6109,6 +6175,12 @@ int CLASS parse_tiff_ifd (int base)
fseek (ifp, 12, SEEK_CUR);
FORC3 cam_mul[c] = get2();
break;
case 45:
if (pana_raw && len == 1 && type == 3)
{
RT_pana_info.encoding = get2();
}
break;
case 46:
if (type != 7 || fgetc(ifp) != 0xff || fgetc(ifp) != 0xd8) break;
thumb_offset = ftell(ifp) - 2;
@ -6794,13 +6866,15 @@ void CLASS apply_tiff()
} else if ((raw_width * 2 * tiff_bps / 16 + 8) * raw_height == tiff_ifd[raw].bytes) {
// 14 bit uncompressed from Nikon Z7, still wrong
// each line has 8 padding byte.
row_padding = 8;
load_raw = &CLASS packed_load_raw;
//row_padding = 8;
//load_raw = &CLASS packed_load_raw;
load_raw = &CLASS nikon_14bit_load_raw;
} else if ((raw_width * 2 * tiff_bps / 16 + 12) * raw_height == tiff_ifd[raw].bytes) {
// 14 bit uncompressed from Nikon Z6, still wrong
// each line has 12 padding byte.
row_padding = 12;
load_raw = &CLASS packed_load_raw;
// row_padding = 12;
// load_raw = &CLASS packed_load_raw;
load_raw = &CLASS nikon_14bit_load_raw;
} else
load_raw = &CLASS nikon_load_raw; break;
case 65535:
@ -10602,6 +10676,48 @@ struct tiff_hdr {
#include "fujicompressed.cc"
//-----------------------------------------------------------------------------
/* Taken from LibRaw
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_nikon(unsigned char *src, unsigned short *dest)
{
dest[3] = (src[6] << 6) | (src[5] >> 2);
dest[2] = ((src[5] & 0x3) << 12) | (src[4] << 4) | (src[3] >> 4);
dest[1] = (src[3] & 0xf) << 10 | (src[2] << 2) | (src[1] >> 6);
dest[0] = ((src[1] & 0x3f) << 8) | src[0];
}
} // namespace
void CLASS nikon_14bit_load_raw()
{
const unsigned linelen = (unsigned)(ceilf((float)(raw_width * 7 / 4) / 16.0)) * 16; // 14512; // S.raw_width * 7 / 4;
const unsigned pitch = raw_width; //S.raw_pitch ? S.raw_pitch / 2 : S.raw_width;
unsigned char *buf = (unsigned char *)malloc(linelen);
merror(buf, "nikon_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];
//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_nikon(buf + sp, dest + dp);
}
free(buf);
}
//-----------------------------------------------------------------------------
/* RT: Delete from here */
/*RT*/#undef SQR
/*RT*/#undef MAX

View File

@ -159,6 +159,13 @@ protected:
std::string RT_software;
double RT_baseline_exposure;
struct PanasonicRW2Info {
ushort bpp;
ushort encoding;
PanasonicRW2Info(): bpp(0), encoding(0) {}
};
PanasonicRW2Info RT_pana_info;
float cam_mul[4], pre_mul[4], cmatrix[3][4], rgb_cam[3][4];
int histogram[4][0x2000];
@ -395,13 +402,15 @@ void nokia_load_raw();
class pana_bits_t{
public:
pana_bits_t(IMFILE *i, unsigned &u): ifp(i), load_flags(u), vbits(0) {}
unsigned operator()(int nbits);
pana_bits_t(IMFILE *i, unsigned &u, unsigned enc):
ifp(i), load_flags(u), vbits(0), encoding(enc) {}
unsigned operator()(int nbits, unsigned *bytes=nullptr);
private:
IMFILE *ifp;
unsigned &load_flags;
uchar buf[0x4000];
int vbits;
unsigned encoding;
};
void canon_rmf_load_raw();
@ -517,6 +526,8 @@ void shiftXtransMatrix( const int offsy, const int offsx) {
}
}
void nikon_14bit_load_raw(); // ported from LibRaw
};

View File

@ -20,16 +20,9 @@
#include <cassert>
#include "rawimagesource.h"
#include "rawimagesource_i.h"
#include "jaggedarray.h"
#include "rawimage.h"
#include "mytime.h"
#include "iccmatrices.h"
#include "iccstore.h"
#include "image8.h"
#include "curves.h"
#include "dfmanager.h"
#include "slicer.h"
#include "rt_math.h"
#include "color.h"
#include "../rtgui/multilangmgr.h"
@ -37,7 +30,7 @@
#include "sleef.c"
#include "opthelper.h"
#include "median.h"
//#define BENCHMARK
#define BENCHMARK
#include "StopWatch.h"
#ifdef _OPENMP
#include <omp.h>
@ -60,271 +53,6 @@ extern const Settings* settings;
#define x00625(a) xdivf(a, 4)
#define x0125(a) xdivf(a, 3)
void RawImageSource::hphd_vertical (float** hpmap, int col_from, int col_to)
{
float* temp = new float[max(W, H)];
float* avg = new float[max(W, H)];
float* dev = new float[max(W, H)];
memset (temp, 0, max(W, H)*sizeof(float));
memset (avg, 0, max(W, H)*sizeof(float));
memset (dev, 0, max(W, H)*sizeof(float));
for (int k = col_from; k < col_to; k++) {
for (int i = 5; i < H - 5; i++) {
temp[i] = (rawData[i - 5][k] - 8 * rawData[i - 4][k] + 27 * rawData[i - 3][k] - 48 * rawData[i - 2][k] + 42 * rawData[i - 1][k] -
(rawData[i + 5][k] - 8 * rawData[i + 4][k] + 27 * rawData[i + 3][k] - 48 * rawData[i + 2][k] + 42 * rawData[i + 1][k])) / 100.0;
temp[i] = ABS(temp[i]);
}
for (int j = 4; j < H - 4; j++) {
float avgL = (temp[j - 4] + temp[j - 3] + temp[j - 2] + temp[j - 1] + temp[j] + temp[j + 1] + temp[j + 2] + temp[j + 3] + temp[j + 4]) / 9.0;
avg[j] = avgL;
float devL = ((temp[j - 4] - avgL) * (temp[j - 4] - avgL) + (temp[j - 3] - avgL) * (temp[j - 3] - avgL) + (temp[j - 2] - avgL) * (temp[j - 2] - avgL) + (temp[j - 1] - avgL) * (temp[j - 1] - avgL) + (temp[j] - avgL) * (temp[j] - avgL) + (temp[j + 1] - avgL) * (temp[j + 1] - avgL) + (temp[j + 2] - avgL) * (temp[j + 2] - avgL) + (temp[j + 3] - avgL) * (temp[j + 3] - avgL) + (temp[j + 4] - avgL) * (temp[j + 4] - avgL)) / 9.0;
if (devL < 0.001) {
devL = 0.001;
}
dev[j] = devL;
}
for (int j = 5; j < H - 5; j++) {
float avgL = avg[j - 1];
float avgR = avg[j + 1];
float devL = dev[j - 1];
float devR = dev[j + 1];
hpmap[j][k] = avgL + (avgR - avgL) * devL / (devL + devR);
}
}
delete [] temp;
delete [] avg;
delete [] dev;
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
void RawImageSource::hphd_horizontal (float** hpmap, int row_from, int row_to)
{
float* temp = new float[max(W, H)];
float* avg = new float[max(W, H)];
float* dev = new float[max(W, H)];
memset (temp, 0, max(W, H)*sizeof(float));
memset (avg, 0, max(W, H)*sizeof(float));
memset (dev, 0, max(W, H)*sizeof(float));
for (int i = row_from; i < row_to; i++) {
for (int j = 5; j < W - 5; j++) {
temp[j] = (rawData[i][j - 5] - 8 * rawData[i][j - 4] + 27 * rawData[i][j - 3] - 48 * rawData[i][j - 2] + 42 * rawData[i][j - 1] -
(rawData[i][j + 5] - 8 * rawData[i][j + 4] + 27 * rawData[i][j + 3] - 48 * rawData[i][j + 2] + 42 * rawData[i][j + 1])) / 100;
temp[j] = ABS(temp[j]);
}
for (int j = 4; j < W - 4; j++) {
float avgL = (temp[j - 4] + temp[j - 3] + temp[j - 2] + temp[j - 1] + temp[j] + temp[j + 1] + temp[j + 2] + temp[j + 3] + temp[j + 4]) / 9.0;
avg[j] = avgL;
float devL = ((temp[j - 4] - avgL) * (temp[j - 4] - avgL) + (temp[j - 3] - avgL) * (temp[j - 3] - avgL) + (temp[j - 2] - avgL) * (temp[j - 2] - avgL) + (temp[j - 1] - avgL) * (temp[j - 1] - avgL) + (temp[j] - avgL) * (temp[j] - avgL) + (temp[j + 1] - avgL) * (temp[j + 1] - avgL) + (temp[j + 2] - avgL) * (temp[j + 2] - avgL) + (temp[j + 3] - avgL) * (temp[j + 3] - avgL) + (temp[j + 4] - avgL) * (temp[j + 4] - avgL)) / 9.0;
if (devL < 0.001) {
devL = 0.001;
}
dev[j] = devL;
}
for (int j = 5; j < W - 5; j++) {
float avgL = avg[j - 1];
float avgR = avg[j + 1];
float devL = dev[j - 1];
float devR = dev[j + 1];
float hpv = avgL + (avgR - avgL) * devL / (devL + devR);
if (hpmap[i][j] < 0.8 * hpv) {
hpmap[i][j] = 2;
} else if (hpv < 0.8 * hpmap[i][j]) {
hpmap[i][j] = 1;
} else {
hpmap[i][j] = 0;
}
}
}
delete [] temp;
delete [] avg;
delete [] dev;
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
void RawImageSource::hphd_green (float** hpmap)
{
#ifdef _OPENMP
#pragma omp parallel for
#endif
for (int i = 3; i < H - 3; i++) {
for (int j = 3; j < W - 3; j++) {
if (ri->ISGREEN(i, j)) {
green[i][j] = rawData[i][j];
} else {
if (hpmap[i][j] == 1) {
int g2 = rawData[i][j + 1] + ((rawData[i][j] - rawData[i][j + 2]) / 2);
int g4 = rawData[i][j - 1] + ((rawData[i][j] - rawData[i][j - 2]) / 2);
int dx = rawData[i][j + 1] - rawData[i][j - 1];
int d1 = rawData[i][j + 3] - rawData[i][j + 1];
int d2 = rawData[i][j + 2] - rawData[i][j];
int d3 = (rawData[i - 1][j + 2] - rawData[i - 1][j]) / 2;
int d4 = (rawData[i + 1][j + 2] - rawData[i + 1][j]) / 2;
double e2 = 1.0 / (1.0 + ABS(dx) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4));
d1 = rawData[i][j - 3] - rawData[i][j - 1];
d2 = rawData[i][j - 2] - rawData[i][j];
d3 = (rawData[i - 1][j - 2] - rawData[i - 1][j]) / 2;
d4 = (rawData[i + 1][j - 2] - rawData[i + 1][j]) / 2;
double e4 = 1.0 / (1.0 + ABS(dx) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4));
green[i][j] = (e2 * g2 + e4 * g4) / (e2 + e4);
} else if (hpmap[i][j] == 2) {
int g1 = rawData[i - 1][j] + ((rawData[i][j] - rawData[i - 2][j]) / 2);
int g3 = rawData[i + 1][j] + ((rawData[i][j] - rawData[i + 2][j]) / 2);
int dy = rawData[i + 1][j] - rawData[i - 1][j];
int d1 = rawData[i - 1][j] - rawData[i - 3][j];
int d2 = rawData[i][j] - rawData[i - 2][j];
int d3 = (rawData[i][j - 1] - rawData[i - 2][j - 1]) / 2;
int d4 = (rawData[i][j + 1] - rawData[i - 2][j + 1]) / 2;
double e1 = 1.0 / (1.0 + ABS(dy) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4));
d1 = rawData[i + 1][j] - rawData[i + 3][j];
d2 = rawData[i][j] - rawData[i + 2][j];
d3 = (rawData[i][j - 1] - rawData[i + 2][j - 1]) / 2;
d4 = (rawData[i][j + 1] - rawData[i + 2][j + 1]) / 2;
double e3 = 1.0 / (1.0 + ABS(dy) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4));
green[i][j] = (e1 * g1 + e3 * g3) / (e1 + e3);
} else {
int g1 = rawData[i - 1][j] + ((rawData[i][j] - rawData[i - 2][j]) / 2);
int g2 = rawData[i][j + 1] + ((rawData[i][j] - rawData[i][j + 2]) / 2);
int g3 = rawData[i + 1][j] + ((rawData[i][j] - rawData[i + 2][j]) / 2);
int g4 = rawData[i][j - 1] + ((rawData[i][j] - rawData[i][j - 2]) / 2);
int dx = rawData[i][j + 1] - rawData[i][j - 1];
int dy = rawData[i + 1][j] - rawData[i - 1][j];
int d1 = rawData[i - 1][j] - rawData[i - 3][j];
int d2 = rawData[i][j] - rawData[i - 2][j];
int d3 = (rawData[i][j - 1] - rawData[i - 2][j - 1]) / 2;
int d4 = (rawData[i][j + 1] - rawData[i - 2][j + 1]) / 2;
double e1 = 1.0 / (1.0 + ABS(dy) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4));
d1 = rawData[i][j + 3] - rawData[i][j + 1];
d2 = rawData[i][j + 2] - rawData[i][j];
d3 = (rawData[i - 1][j + 2] - rawData[i - 1][j]) / 2;
d4 = (rawData[i + 1][j + 2] - rawData[i + 1][j]) / 2;
double e2 = 1.0 / (1.0 + ABS(dx) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4));
d1 = rawData[i + 1][j] - rawData[i + 3][j];
d2 = rawData[i][j] - rawData[i + 2][j];
d3 = (rawData[i][j - 1] - rawData[i + 2][j - 1]) / 2;
d4 = (rawData[i][j + 1] - rawData[i + 2][j + 1]) / 2;
double e3 = 1.0 / (1.0 + ABS(dy) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4));
d1 = rawData[i][j - 3] - rawData[i][j - 1];
d2 = rawData[i][j - 2] - rawData[i][j];
d3 = (rawData[i - 1][j - 2] - rawData[i - 1][j]) / 2;
d4 = (rawData[i + 1][j - 2] - rawData[i + 1][j]) / 2;
double e4 = 1.0 / (1.0 + ABS(dx) + ABS(d1) + ABS(d2) + ABS(d3) + ABS(d4));
green[i][j] = (e1 * g1 + e2 * g2 + e3 * g3 + e4 * g4) / (e1 + e2 + e3 + e4);
}
}
}
}
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
void RawImageSource::hphd_demosaic ()
{
if (plistener) {
plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::HPHD)));
plistener->setProgress (0.0);
}
JaggedArray<float> hpmap (W, H, true);
#ifdef _OPENMP
#pragma omp parallel
{
int tid = omp_get_thread_num();
int nthreads = omp_get_num_threads();
int blk = W / nthreads;
if (tid < nthreads - 1) {
hphd_vertical (hpmap, tid * blk, (tid + 1)*blk);
} else {
hphd_vertical (hpmap, tid * blk, W);
}
}
#else
hphd_vertical (hpmap, 0, W);
#endif
if (plistener) {
plistener->setProgress (0.33);
}
#ifdef _OPENMP
#pragma omp parallel
{
int tid = omp_get_thread_num();
int nthreads = omp_get_num_threads();
int blk = H / nthreads;
if (tid < nthreads - 1) {
hphd_horizontal (hpmap, tid * blk, (tid + 1)*blk);
} else {
hphd_horizontal (hpmap, tid * blk, H);
}
}
#else
hphd_horizontal (hpmap, 0, H);
#endif
hphd_green (hpmap);
if (plistener) {
plistener->setProgress (0.66);
}
for (int i = 0; i < H; i++) {
if (i == 0) {
interpolate_row_rb_mul_pp (rawData, red[i], blue[i], nullptr, green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1);
} else if (i == H - 1) {
interpolate_row_rb_mul_pp (rawData, red[i], blue[i], green[i - 1], green[i], nullptr, i, 1.0, 1.0, 1.0, 0, W, 1);
} else {
interpolate_row_rb_mul_pp (rawData, red[i], blue[i], green[i - 1], green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1);
}
}
border_interpolate2(W, H, 4, rawData, red, green, blue);
if (plistener) {
plistener->setProgress (1.0);
}
}
#undef fc
#define fc(row,col) \
(ri->get_filters() >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3)
@ -660,7 +388,7 @@ void RawImageSource::jdl_interpolate_omp() // from "Lassus"
}
#ifdef _OPENMP
#pragma omp parallel default(none) shared(image,width,height,u,w,v,y,x,z,dif,chr) private(row,col,f,g,indx,c,d,i)
#pragma omp parallel shared(image,width,height,u,w,v,y,x,z,dif,chr) private(row,col,f,g,indx,c,d,i)
#endif
{
#ifdef _OPENMP
@ -1431,7 +1159,7 @@ void RawImageSource::igv_interpolate(int winw, int winh)
}
#ifdef _OPENMP
#pragma omp parallel default(none) shared(rgb,vdif,hdif,chr)
#pragma omp parallel shared(rgb,vdif,hdif,chr)
#endif
{
__m128 ngv, egv, wgv, sgv, nvv, evv, wvv, svv, nwgv, negv, swgv, segv, nwvv, nevv, swvv, sevv, tempv, temp1v, temp2v, temp3v, temp4v, temp5v, temp6v, temp7v, temp8v;
@ -1800,7 +1528,7 @@ void RawImageSource::igv_interpolate(int winw, int winh)
const int v1 = 1 * width, v2 = 2 * width, v3 = 3 * width, v4 = 4 * width, v5 = 5 * width, v6 = 6 * width;
float* rgb[3];
float* chr[2];
float (*rgbarray), *vdif, *hdif, (*chrarray);
float *rgbarray, *vdif, *hdif, *chrarray;
rgbarray = (float (*)) calloc(width * height * 3, sizeof( float));
rgb[0] = rgbarray;
@ -1820,7 +1548,7 @@ void RawImageSource::igv_interpolate(int winw, int winh)
}
#ifdef _OPENMP
#pragma omp parallel default(none) shared(rgb,vdif,hdif,chr)
#pragma omp parallel shared(rgb,vdif,hdif,chr)
#endif
{
@ -2061,7 +1789,9 @@ void RawImageSource::nodemosaic(bool bw)
red(W, H);
green(W, H);
blue(W, H);
#ifdef _OPENMP
#pragma omp parallel for
#endif
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {

View File

@ -219,10 +219,14 @@ void dfInfo::updateBadPixelList( RawImage *df )
if( df->getSensorType() == ST_BAYER || df->getSensorType() == ST_FUJI_XTRANS ) {
std::vector<badPix> badPixelsTemp;
#ifdef _OPENMP
#pragma omp parallel
#endif
{
std::vector<badPix> badPixelsThread;
#ifdef _OPENMP
#pragma omp for nowait
#endif
for( int row = 2; row < df->get_height() - 2; row++)
for( int col = 2; col < df->get_width() - 2; col++) {
@ -235,7 +239,9 @@ void dfInfo::updateBadPixelList( RawImage *df )
}
}
#ifdef _OPENMP
#pragma omp critical
#endif
badPixelsTemp.insert(badPixelsTemp.end(), badPixelsThread.begin(), badPixelsThread.end());
}
badPixels.insert(badPixels.end(), badPixelsTemp.begin(), badPixelsTemp.end());

View File

@ -143,7 +143,9 @@ void ImProcFunctions :: dirpyr_equalizer(float ** src, float ** dst, int srcwidt
}
#ifdef __SSE2__
#ifdef _OPENMP
#pragma omp parallel for
#endif
for(int i = 0; i < srcheight; i++) {
int j;
@ -158,7 +160,9 @@ void ImProcFunctions :: dirpyr_equalizer(float ** src, float ** dst, int srcwidt
}
#else
#ifdef _OPENMP
#pragma omp parallel for
#endif
for(int i = 0; i < srcheight; i++) {
for(int j = 0; j < srcwidth; j++) {
@ -174,10 +178,14 @@ void ImProcFunctions :: dirpyr_equalizer(float ** src, float ** dst, int srcwidt
}
#ifdef __SSE2__
#ifdef _OPENMP
#pragma omp parallel
#endif
{
__m128 div = _mm_set1_ps(327.68f);
#ifdef _OPENMP
#pragma omp for
#endif
for(int i = 0; i < srcheight; i++) {
int j;
@ -192,7 +200,9 @@ void ImProcFunctions :: dirpyr_equalizer(float ** src, float ** dst, int srcwidt
}
}
#else
#ifdef _OPENMP
#pragma omp parallel for
#endif
for(int i = 0; i < srcheight; i++) {
for(int j = 0; j < srcwidth; j++) {
@ -228,7 +238,9 @@ void ImProcFunctions :: dirpyr_equalizer(float ** src, float ** dst, int srcwidt
delete [] tmpHue;
}
#ifdef _OPENMP
#pragma omp parallel for
#endif
for (int i = 0; i < srcheight; i++)
for (int j = 0; j < srcwidth; j++) {

View File

@ -91,9 +91,13 @@ void RawImageSource::dual_demosaic_RT(bool isBayer, const RAWParams &raw, int wi
{ 0.019334, 0.119193, 0.950227 }
};
#ifdef _OPENMP
#pragma omp parallel
#endif
{
#ifdef _OPENMP
#pragma omp for
#endif
for(int i = 0; i < winh; ++i) {
Color::RGB2L(red[i], green[i], blue[i], L[i], xyz_rgb, winw);
}
@ -106,19 +110,25 @@ void RawImageSource::dual_demosaic_RT(bool isBayer, const RAWParams &raw, int wi
contrast = contrastf * 100.f;
// the following is split into 3 loops intentionally to avoid cache conflicts on CPUs with only 4-way cache
#ifdef _OPENMP
#pragma omp parallel for
#endif
for(int i = 0; i < winh; ++i) {
for(int j = 0; j < winw; ++j) {
red[i][j] = intp(blend[i][j], red[i][j], redTmp[i][j]);
}
}
#ifdef _OPENMP
#pragma omp parallel for
#endif
for(int i = 0; i < winh; ++i) {
for(int j = 0; j < winw; ++j) {
green[i][j] = intp(blend[i][j], green[i][j], greenTmp[i][j]);
}
}
#ifdef _OPENMP
#pragma omp parallel for
#endif
for(int i = 0; i < winh; ++i) {
for(int j = 0; j < winw; ++j) {
blue[i][j] = intp(blend[i][j], blue[i][j], blueTmp[i][j]);

View File

@ -431,7 +431,9 @@ void RawImageSource::eahd_demosaic ()
}
// Interpolate R and B
#ifdef _OPENMP
#pragma omp parallel for
#endif
for (int i = 0; i < H; i++) {
if (i == 0) {
interpolate_row_rb_mul_pp (rawData, red[i], blue[i], nullptr, green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1);

View File

@ -1,171 +0,0 @@
////////////////////////////////////////////////////////////////
//
// //exposure correction before interpolation
//
// code dated: December 27, 2010
//
// Expo_before.cc 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.
//
// This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
//
////////////////////////////////////////////////////////////////
// Jacques Desmis <jdesmis@gmail.com>
// use fast-demo(provisional) from Emil Martinec
// inspired from work Guillermo Luijk and Manuel LLorens(Perfectraw)
// Ingo Weyrich (2014-07-07)
// optimized the highlight protection case
// needs 2*width*height*sizeof(float) byte less memory than before
// needs about 60% less processing time than before
//
// This function uses parameters:
// exposure (linear): 2^(-8..0..8): currently 0.5 +3
// preserve (log) : 0..8 : currently 0.1 1
#include "rtengine.h"
#include "rawimagesource.h"
#include "mytime.h"
#include "rt_math.h"
namespace rtengine
{
extern const Settings* settings;
void RawImageSource::processRawWhitepoint(float expos, float preser, array2D<float> &rawData)
{
MyTime t1e, t2e;
if (settings->verbose) {
t1e.set();
}
int width = W, height = H;
// exposure correction inspired from G.Luijk
for (int c = 0; c < 4; c++) {
chmax[c] *= expos;
}
if (fabs(preser) < 0.001f) {
// No highlight protection - simple mutiplication
if (ri->getSensorType() == ST_BAYER || ri->getSensorType() == ST_FUJI_XTRANS)
#pragma omp parallel for
for (int row = 0; row < height; row++)
for (int col = 0; col < width; col++) {
rawData[row][col] *= expos;
}
else
#pragma omp parallel for
for (int row = 0; row < height; row++)
for (int col = 0; col < width; col++) {
rawData[row][col * 3] *= expos;
rawData[row][col * 3 + 1] *= expos;
rawData[row][col * 3 + 2] *= expos;
}
} else {
if (ri->getSensorType() == ST_BAYER || ri->getSensorType() == ST_FUJI_XTRANS) {
// Demosaic to allow calculation of luminosity.
if(ri->getSensorType() == ST_BAYER) {
fast_demosaic();
} else {
fast_xtrans_interpolate(rawData, red, green, blue);
}
}
// Find maximum to adjust LUTs. New float engines clips only at the very end
float maxValFloat = 0.f;
#pragma omp parallel
{
float maxValFloatThr = 0.f;
if (ri->getSensorType() == ST_BAYER || ri->getSensorType() == ST_FUJI_XTRANS)
#pragma omp for schedule(dynamic,16) nowait
for(int row = 0; row < height; row++)
for (int col = 0; col < width; col++) {
if (rawData[row][col] > maxValFloatThr) {
maxValFloatThr = rawData[row][col];
}
}
else
#pragma omp for schedule(dynamic,16) nowait
for(int row = 0; row < height; row++)
for (int col = 0; col < width; col++) {
for (int c = 0; c < 3; c++)
if (rawData[row][col * 3 + c] > maxValFloatThr) {
maxValFloatThr = rawData[row][col * 3 + c];
}
}
#pragma omp critical
{
if(maxValFloatThr > maxValFloat) {
maxValFloat = maxValFloatThr;
}
}
}
// Exposure correction with highlight preservation
int maxVal = maxValFloat;
LUTf lut(maxVal + 1);
float K;
if(expos > 1) {
// Positive exposure
K = (float) maxVal / expos * exp(-preser * log(2.0));
for (int j = max(1, (int)K); j <= maxVal; j++) {
lut[(int)j] = (((float)maxVal - K * expos) / ((float)maxVal - K) * (j - maxVal) + (float) maxVal) / j;
}
} else {
// Negative exposure
float EV = log(expos) / log(2.0); // Convert exp. linear to EV
K = (float)maxVal * exp(-preser * log(2.0));
for (int j = 0; j <= maxVal; j++) {
lut[(int)j] = exp(EV * ((float)maxVal - j) / ((float)maxVal - K) * log(2.0));
}
}
if (ri->getSensorType() == ST_BAYER || ri->getSensorType() == ST_FUJI_XTRANS)
#pragma omp parallel for schedule(dynamic,16)
for(int row = 0; row < height; row++)
for(int col = 0; col < width; col++) {
float lumi = 0.299f * red[row][col] + 0.587f * green[row][col] + 0.114f * blue[row][col];
rawData[row][col] *= lumi < K ? expos : lut[lumi];
}
else
#pragma omp parallel for
for(int row = 0; row < height; row++)
for(int col = 0; col < width; col++) {
float lumi = 0.299f * rawData[row][col * 3] + 0.587f * rawData[row][col * 3 + 1] + 0.114f * rawData[row][col * 3 + 2];
float fac = lumi < K ? expos : lut[lumi];
for (int c = 0; c < 3; c++) {
rawData[row][col * 3 + c] *= fac;
}
}
}
if (settings->verbose) {
t2e.set();
printf("Exposure before %d usec\n", t2e.etime(t1e));
}
}
} //namespace

View File

@ -78,6 +78,7 @@ int calculate_subsampling(int w, int h, int r)
void guidedFilter(const array2D<float> &guide, const array2D<float> &src, array2D<float> &dst, int r, float epsilon, bool multithread, int subsampling)
{
const int W = src.width();
const int H = src.height();
@ -135,16 +136,6 @@ void guidedFilter(const array2D<float> &guide, const array2D<float> &src, array2
const array2D<float> &p = src;
array2D<float> &q = dst;
AlignedBuffer<float> blur_buf(I.width() * I.height());
const auto f_mean =
[&](array2D<float> &d, array2D<float> &s, int rad) -> void
{
rad = LIM(rad, 0, (min(s.width(), s.height()) - 1) / 2 - 1);
float **src = s;
float **dst = d;
boxblur<float, float>(src, dst, blur_buf.data, rad, rad, s.width(), s.height());
};
const auto f_subsample =
[=](array2D<float> &d, const array2D<float> &s) -> void
{
@ -153,8 +144,21 @@ void guidedFilter(const array2D<float> &guide, const array2D<float> &src, array2
const auto f_upsample = f_subsample;
const int w = W / subsampling;
const int h = H / subsampling;
const size_t w = W / subsampling;
const size_t h = H / subsampling;
AlignedBuffer<float> blur_buf(w * h);
const auto f_mean =
[&](array2D<float> &d, array2D<float> &s, int rad) -> void
{
rad = LIM(rad, 0, (min(s.width(), s.height()) - 1) / 2 - 1);
float **src = s;
float **dst = d;
#ifdef _OPENMP
#pragma omp parallel if (multithread)
#endif
boxblur<float, float>(src, dst, blur_buf.data, rad, rad, s.width(), s.height());
};
array2D<float> I1(w, h);
array2D<float> p1(w, h);
@ -203,6 +207,9 @@ void guidedFilter(const array2D<float> &guide, const array2D<float> &src, array2
apply(SUBMUL, b, a, meanI, meanp);
DEBUG_DUMP(b);
meanI.free(); // frees w * h * 4 byte
meanp.free(); // frees w * h * 4 byte
array2D<float> &meana = a;
f_mean(meana, a, r1);
DEBUG_DUMP(meana);
@ -211,11 +218,13 @@ void guidedFilter(const array2D<float> &guide, const array2D<float> &src, array2
f_mean(meanb, b, r1);
DEBUG_DUMP(meanb);
blur_buf.resize(0); // frees w * h * 4 byte
array2D<float> meanA(W, H);
f_upsample(meanA, meana);
DEBUG_DUMP(meanA);
array2D<float> meanB(W, H);
array2D<float> &meanB = q;
f_upsample(meanB, meanb);
DEBUG_DUMP(meanB);

View File

@ -336,7 +336,9 @@ void RawImageSource::boxblur_resamp(float **src, float **dst, float ** temp, int
}
// process remaining columns
#ifdef _OPENMP
#pragma omp single
#endif
{
//vertical blur

View File

@ -0,0 +1,364 @@
/*
* This file is part of RawTherapee.
*
* Copyright (c) 2004-2019 Gabor Horvath <hgabor@rawtherapee.com>
*
* 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 <http://www.gnu.org/licenses/>.
*/
#include <cmath>
#include "rawimagesource.h"
#include "rawimagesource_i.h"
#include "jaggedarray.h"
#include "rawimage.h"
#include "rt_math.h"
#include "../rtgui/multilangmgr.h"
#include "opthelper.h"
//#define BENCHMARK
#include "StopWatch.h"
#ifdef _OPENMP
#include <omp.h>
#endif
using namespace std;
using namespace rtengine;
namespace {
void hphd_vertical(const array2D<float> &rawData, float** hpmap, int col_from, int col_to, int H)
{
// process 'numCols' columns for better usage of L1 cpu cache (especially faster for large values of H)
constexpr int numCols = 8;
JaggedArray<float> temp(numCols, H, true);
JaggedArray<float> avg(numCols, H, true);
JaggedArray<float> dev(numCols, H, true);
int k = col_from;
#ifdef __SSE2__
const vfloat ninev = F2V(9.f);
const vfloat epsv = F2V(0.001f);
#endif
for (; k < col_to - 7; k += numCols) {
for (int i = 5; i < H - 5; i++) {
#ifdef _OPENMP
#pragma omp simd
#endif
for(int h = 0; h < numCols; ++h) {
temp[i][h] = std::fabs((rawData[i - 5][k + h] - rawData[i + 5][k + h]) - 8 * (rawData[i - 4][k + h] - rawData[i + 4][k + h]) + 27 * (rawData[i - 3][k + h] - rawData[i + 3][k + h]) - 48 * (rawData[i - 2][k + h] - rawData[i + 2][k + h]) + 42 * (rawData[i - 1][k + h] - rawData[i + 1][k + h]));
}
}
for (int j = 4; j < H - 4; j++) {
#ifdef __SSE2__
// faster than #pragma omp simd...
const vfloat avgL1 = ((LVFU(temp[j - 4][0]) + LVFU(temp[j - 3][0])) + (LVFU(temp[j - 2][0]) + LVFU(temp[j - 1][0])) + (LVFU(temp[j][0]) + LVFU(temp[j + 1][0])) + (LVFU(temp[j + 2][0]) + LVFU(temp[j + 3][0])) + LVFU(temp[j + 4][0])) / ninev;
STVFU(avg[j][0], avgL1);
STVFU(dev[j][0], vmaxf(epsv, (SQRV(LVFU(temp[j - 4][0]) - avgL1) + SQRV(LVFU(temp[j - 3][0]) - avgL1)) + (SQRV(LVFU(temp[j - 2][0]) - avgL1) + SQRV(LVFU(temp[j - 1][0]) - avgL1)) + (SQRV(LVFU(temp[j][0]) - avgL1) + SQRV(LVFU(temp[j + 1][0]) - avgL1)) + (SQRV(LVFU(temp[j + 2][0]) - avgL1) + SQRV(LVFU(temp[j + 3][0]) - avgL1)) + SQRV(LVFU(temp[j + 4][0]) - avgL1)));
const vfloat avgL2 = ((LVFU(temp[j - 4][4]) + LVFU(temp[j - 3][4])) + (LVFU(temp[j - 2][4]) + LVFU(temp[j - 1][4])) + (LVFU(temp[j][4]) + LVFU(temp[j + 1][4])) + (LVFU(temp[j + 2][4]) + LVFU(temp[j + 3][4])) + LVFU(temp[j + 4][4])) / ninev;
STVFU(avg[j][4], avgL2);
STVFU(dev[j][4], vmaxf(epsv, (SQRV(LVFU(temp[j - 4][4]) - avgL2) + SQRV(LVFU(temp[j - 3][4]) - avgL2)) + (SQRV(LVFU(temp[j - 2][4]) - avgL2) + SQRV(LVFU(temp[j - 1][4]) - avgL2)) + (SQRV(LVFU(temp[j][4]) - avgL2) + SQRV(LVFU(temp[j + 1][4]) - avgL2)) + (SQRV(LVFU(temp[j + 2][4]) - avgL2) + SQRV(LVFU(temp[j + 3][4]) - avgL2)) + SQRV(LVFU(temp[j + 4][4]) - avgL2)));
#else
#ifdef _OPENMP
#pragma omp simd
#endif
for(int h = 0; h < numCols; ++h) {
const float avgL = ((temp[j - 4][h] + temp[j - 3][h]) + (temp[j - 2][h] + temp[j - 1][h]) + (temp[j][h] + temp[j + 1][h]) + (temp[j + 2][h] + temp[j + 3][h]) + temp[j + 4][h]) / 9.f;
avg[j][h] = avgL;
dev[j][h] = std::max(0.001f, (SQR(temp[j - 4][h] - avgL) + SQR(temp[j - 3][h] - avgL)) + (SQR(temp[j - 2][h] - avgL) + SQR(temp[j - 1][h] - avgL)) + (SQR(temp[j][h] - avgL) + SQR(temp[j + 1][h] - avgL)) + (SQR(temp[j + 2][h] - avgL) + SQR(temp[j + 3][h] - avgL)) + SQR(temp[j + 4][h] - avgL));
}
#endif
}
for (int j = 5; j < H - 5; j++) {
#ifdef _OPENMP
#pragma omp simd
#endif
for(int h = 0; h < numCols; ++h) {
const float avgL = avg[j - 1][h];
const float avgR = avg[j + 1][h];
const float devL = dev[j - 1][h];
const float devR = dev[j + 1][h];
hpmap[j][k + h] = avgL + (avgR - avgL) * devL / (devL + devR);
}
}
}
for (; k < col_to; k++) {
for (int i = 5; i < H - 5; i++) {
temp[i][0] = std::fabs((rawData[i - 5][k] - rawData[i + 5][k]) - 8 * (rawData[i - 4][k] - rawData[i + 4][k]) + 27 * (rawData[i - 3][k] - rawData[i + 3][k]) - 48 * (rawData[i - 2][k] - rawData[i + 2][k]) + 42 * (rawData[i - 1][k] -rawData[i + 1][k]));
}
for (int j = 4; j < H - 4; j++) {
const float avgL = (temp[j - 4][0] + temp[j - 3][0] + temp[j - 2][0] + temp[j - 1][0] + temp[j][0] + temp[j + 1][0] + temp[j + 2][0] + temp[j + 3][0] + temp[j + 4][0]) / 9.f;
avg[j][0] = avgL;
dev[j][0] = std::max(0.001f, SQR(temp[j - 4][0] - avgL) + SQR(temp[j - 3][0] - avgL) + SQR(temp[j - 2][0] - avgL) + SQR(temp[j - 1][0] - avgL) + SQR(temp[j][0] - avgL) + SQR(temp[j + 1][0] - avgL) + SQR(temp[j + 2][0] - avgL) + SQR(temp[j + 3][0] - avgL) + SQR(temp[j + 4][0] - avgL));
}
for (int j = 5; j < H - 5; j++) {
const float avgL = avg[j - 1][0];
const float avgR = avg[j + 1][0];
const float devL = dev[j - 1][0];
const float devR = dev[j + 1][0];
hpmap[j][k] = avgL + (avgR - avgL) * devL / (devL + devR);
}
}
}
void hphd_horizontal(const array2D<float> &rawData, float** hpmap, int row_from, int row_to, int W)
{
float* temp = new float[W];
float* avg = new float[W];
float* dev = new float[W];
memset(temp, 0, W * sizeof(float));
memset(avg, 0, W * sizeof(float));
memset(dev, 0, W * sizeof(float));
#ifdef __SSE2__
const vfloat onev = F2V(1.f);
const vfloat twov = F2V(2.f);
const vfloat zd8v = F2V(0.8f);
#endif
for (int i = row_from; i < row_to; i++) {
#ifdef _OPENMP
#pragma omp simd
#endif
for (int j = 5; j < W - 5; j++) {
temp[j] = std::fabs((rawData[i][j - 5] - rawData[i][j + 5]) - 8 * (rawData[i][j - 4] - rawData[i][j + 4]) + 27 * (rawData[i][j - 3] - rawData[i][j + 3]) - 48 * (rawData[i][j - 2] - rawData[i][j + 2]) + 42 * (rawData[i][j - 1] - rawData[i][j + 1]));
}
#ifdef _OPENMP
#pragma omp simd
#endif
for (int j = 4; j < W - 4; j++) {
const float avgL = ((temp[j - 4] + temp[j - 3]) + (temp[j - 2] + temp[j - 1]) + (temp[j] + temp[j + 1]) + (temp[j + 2] + temp[j + 3]) + temp[j + 4]) / 9.f;
avg[j] = avgL;
dev[j] = std::max(0.001f, (SQR(temp[j - 4] - avgL) + SQR(temp[j - 3] - avgL)) + (SQR(temp[j - 2] - avgL) + SQR(temp[j - 1] - avgL)) + (SQR(temp[j] - avgL) + SQR(temp[j + 1] - avgL)) + (SQR(temp[j + 2] - avgL) + SQR(temp[j + 3] - avgL)) + SQR(temp[j + 4] - avgL));
}
int j = 5;
#ifdef __SSE2__
// faster than #pragma omp simd
for (; j < W - 8; j+=4) {
const vfloat avgL = LVFU(avg[j - 1]);
const vfloat avgR = LVFU(avg[j + 1]);
const vfloat devL = LVFU(dev[j - 1]);
const vfloat devR = LVFU(dev[j + 1]);
const vfloat hpv = avgL + (avgR - avgL) * devL / (devL + devR);
const vfloat hpmapoldv = LVFU(hpmap[i][j]);
const vfloat hpmapv = vselfzero(vmaskf_lt(hpmapoldv, zd8v * hpv), twov);
STVFU(hpmap[i][j], vself(vmaskf_lt(hpv, zd8v * hpmapoldv), onev, hpmapv));
}
#endif
for (; j < W - 5; j++) {
const float avgL = avg[j - 1];
const float avgR = avg[j + 1];
const float devL = dev[j - 1];
const float devR = dev[j + 1];
const float hpv = avgL + (avgR - avgL) * devL / (devL + devR);
if (hpmap[i][j] < 0.8f * hpv) {
hpmap[i][j] = 2;
} else if (hpv < 0.8f * hpmap[i][j]) {
hpmap[i][j] = 1;
} else {
hpmap[i][j] = 0;
}
}
}
delete [] temp;
delete [] avg;
delete [] dev;
}
void hphd_green(const RawImage *ri, const array2D<float> &rawData, float** hpmap, int W, int H, array2D<float> &green)
{
constexpr float eps = 0.001f;
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic, 16)
#endif
for (int i = 3; i < H - 3; i++) {
for (int j = 3; j < W - 3; j++) {
if (ri->ISGREEN(i, j)) {
green[i][j] = rawData[i][j];
} else {
if (hpmap[i][j] == 1) {
const float g2 = rawData[i][j + 1] - rawData[i][j + 2] * 0.5f;
const float g4 = rawData[i][j - 1] - rawData[i][j - 2] * 0.5f;
const float dx = eps + std::fabs(rawData[i][j + 1] - rawData[i][j - 1]);
float d1 = rawData[i][j + 3] - rawData[i][j + 1];
float d2 = rawData[i][j + 2] - rawData[i][j];
float d3 = rawData[i - 1][j + 2] - rawData[i - 1][j];
float d4 = rawData[i + 1][j + 2] - rawData[i + 1][j];
const float e2 = 1.f / (dx + (std::fabs(d1) + std::fabs(d2)) + (std::fabs(d3) + std::fabs(d4)) * 0.5f);
d1 = rawData[i][j - 3] - rawData[i][j - 1];
d2 = rawData[i][j - 2] - rawData[i][j];
d3 = rawData[i - 1][j - 2] - rawData[i - 1][j];
d4 = rawData[i + 1][j - 2] - rawData[i + 1][j];
const float e4 = 1.f / (dx + (std::fabs(d1) + std::fabs(d2)) + (std::fabs(d3) + std::fabs(d4)) * 0.5f);
green[i][j] = rawData[i][j] * 0.5f + (e2 * g2 + e4 * g4) / (e2 + e4);
} else if (hpmap[i][j] == 2) {
const float g1 = rawData[i - 1][j] - rawData[i - 2][j] * 0.5f;
const float g3 = rawData[i + 1][j] - rawData[i + 2][j] * 0.5f;
const float dy = eps + std::fabs(rawData[i + 1][j] - rawData[i - 1][j]);
float d1 = rawData[i - 1][j] - rawData[i - 3][j];
float d2 = rawData[i][j] - rawData[i - 2][j];
float d3 = rawData[i][j - 1] - rawData[i - 2][j - 1];
float d4 = rawData[i][j + 1] - rawData[i - 2][j + 1];
const float e1 = 1.f / (dy + (std::fabs(d1) + std::fabs(d2)) + (std::fabs(d3) + std::fabs(d4)) * 0.5f);
d1 = rawData[i + 1][j] - rawData[i + 3][j];
d2 = rawData[i][j] - rawData[i + 2][j];
d3 = rawData[i][j - 1] - rawData[i + 2][j - 1];
d4 = rawData[i][j + 1] - rawData[i + 2][j + 1];
const float e3 = 1.f / (dy + (std::fabs(d1) + std::fabs(d2)) + (std::fabs(d3) + std::fabs(d4)) * 0.5f);
green[i][j] = rawData[i][j] * 0.5f + (e1 * g1 + e3 * g3) / (e1 + e3);
} else {
const float g1 = rawData[i - 1][j] - rawData[i - 2][j] * 0.5f;
const float g2 = rawData[i][j + 1] - rawData[i][j + 2] * 0.5f;
const float g3 = rawData[i + 1][j] - rawData[i + 2][j] * 0.5f;
const float g4 = rawData[i][j - 1] - rawData[i][j - 2] * 0.5f;
const float dx = eps + std::fabs(rawData[i][j + 1] - rawData[i][j - 1]);
const float dy = eps + std::fabs(rawData[i + 1][j] - rawData[i - 1][j]);
float d1 = rawData[i - 1][j] - rawData[i - 3][j];
float d2 = rawData[i][j] - rawData[i - 2][j];
float d3 = rawData[i][j - 1] - rawData[i - 2][j - 1];
float d4 = rawData[i][j + 1] - rawData[i - 2][j + 1];
const float e1 = 1.f / (dy + (std::fabs(d1) + std::fabs(d2)) + (std::fabs(d3) + std::fabs(d4)) * 0.5f);
d1 = rawData[i][j + 3] - rawData[i][j + 1];
d2 = rawData[i][j + 2] - rawData[i][j];
d3 = rawData[i - 1][j + 2] - rawData[i - 1][j];
d4 = rawData[i + 1][j + 2] - rawData[i + 1][j];
const float e2 = 1.f / (dx + (std::fabs(d1) + std::fabs(d2)) + (std::fabs(d3) + std::fabs(d4)) * 0.5f);
d1 = rawData[i + 1][j] - rawData[i + 3][j];
d2 = rawData[i][j] - rawData[i + 2][j];
d3 = rawData[i][j - 1] - rawData[i + 2][j - 1];
d4 = rawData[i][j + 1] - rawData[i + 2][j + 1];
const float e3 = 1.f / (dy + (std::fabs(d1) + std::fabs(d2)) + (std::fabs(d3) + std::fabs(d4)) * 0.5f);
d1 = rawData[i][j - 3] - rawData[i][j - 1];
d2 = rawData[i][j - 2] - rawData[i][j];
d3 = rawData[i - 1][j - 2] - rawData[i - 1][j];
d4 = rawData[i + 1][j - 2] - rawData[i + 1][j];
const float e4 = 1.f / (dx + (std::fabs(d1) + std::fabs(d2)) + (std::fabs(d3) + std::fabs(d4)) * 0.5f);
green[i][j] = rawData[i][j] * 0.5f + ((e1 * g1 + e2 * g2) + (e3 * g3 + e4 * g4)) / (e1 + e2 + e3 + e4);
}
}
}
}
}
}
namespace rtengine
{
void RawImageSource::hphd_demosaic ()
{
BENCHFUN
if (plistener) {
plistener->setProgressStr(Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::HPHD)));
plistener->setProgress(0.0);
}
JaggedArray<float> hpmap(W, H, true);
#ifdef _OPENMP
#pragma omp parallel
{
int tid = omp_get_thread_num();
int nthreads = omp_get_num_threads();
int blk = W / nthreads;
if (tid < nthreads - 1) {
hphd_vertical(rawData, hpmap, tid * blk, (tid + 1)*blk, H);
} else {
hphd_vertical(rawData, hpmap, tid * blk, W, H);
}
}
#else
hphd_vertical(rawData, hpmap, 0, W, H);
#endif
if (plistener) {
plistener->setProgress(0.35);
}
#ifdef _OPENMP
#pragma omp parallel
{
int tid = omp_get_thread_num();
int nthreads = omp_get_num_threads();
int blk = H / nthreads;
if (tid < nthreads - 1) {
hphd_horizontal(rawData, hpmap, tid * blk, (tid + 1)*blk, W);
} else {
hphd_horizontal(rawData, hpmap, tid * blk, H, W);
}
}
#else
hphd_horizontal(rawData, hpmap, 0, H, W);
#endif
if (plistener) {
plistener->setProgress(0.43);
}
hphd_green(ri, rawData, hpmap, W, H, green);
if (plistener) {
plistener->setProgress(0.65);
}
#ifdef _OPENMP
#pragma omp parallel for
#endif
for (int i = 4; i < H - 4; i++) {
interpolate_row_rb_mul_pp(rawData, red[i], blue[i], green[i - 1], green[i], green[i + 1], i, 1.0, 1.0, 1.0, 0, W, 1);
}
border_interpolate2(W, H, 4, rawData, red, green, blue);
if (plistener) {
plistener->setProgress(1.0);
}
}
} /* namespace */

View File

@ -139,7 +139,7 @@ protected:
AlignedBuffer<T*> ab;
public:
#if CHECK_BOUNDS
int width_, height_;
size_t width_, height_;
#endif
T** ptrs;
@ -149,7 +149,7 @@ public:
PlanarPtr() : ptrs (nullptr) {}
#endif
bool resize(int newSize)
bool resize(size_t newSize)
{
if (ab.resize(newSize)) {
ptrs = ab.data;
@ -167,7 +167,7 @@ public:
ptrs = tmpsPtrs;
#if CHECK_BOUNDS
int tmp = other.width_;
size_t tmp = other.width_;
other.width_ = width_;
width_ = tmp;
tmp = other.height_;
@ -176,7 +176,7 @@ public:
#endif
}
T*& operator() (unsigned row)
T*& operator() (size_t row)
{
#if CHECK_BOUNDS
assert (row < height_);
@ -184,7 +184,7 @@ public:
return ptrs[row];
}
// Will send back the start of a row, starting with a red, green or blue value
T* operator() (unsigned row) const
T* operator() (size_t row) const
{
#if CHECK_BOUNDS
assert (row < height_);
@ -192,14 +192,14 @@ public:
return ptrs[row];
}
// Will send back a value at a given row, col position
T& operator() (unsigned row, unsigned col)
T& operator() (size_t row, size_t col)
{
#if CHECK_BOUNDS
assert (row < height_ && col < width_);
#endif
return ptrs[row][col];
}
const T operator() (unsigned row, unsigned col) const
const T operator() (size_t row, size_t col) const
{
#if CHECK_BOUNDS
assert (row < height_ && col < width_);
@ -215,7 +215,7 @@ class PlanarWhateverData : virtual public ImageDatas
private:
AlignedBuffer<T> abData;
int rowstride; // Plan size, in bytes (all padding bytes included)
size_t rowstride; // Plan size, in bytes (all padding bytes included)
public:
T* data;
@ -228,7 +228,7 @@ public:
}
// Send back the row stride. WARNING: unit = byte, not element!
int getRowStride () const
size_t getRowStride () const
{
return rowstride;
}
@ -259,7 +259,6 @@ public:
* Can be safely used to reallocate an existing image */
void allocate (int W, int H) override
{
if (W == width && H == height) {
return;
}
@ -591,8 +590,8 @@ class PlanarRGBData : virtual public ImageDatas
private:
AlignedBuffer<T> abData;
int rowstride; // Plan size, in bytes (all padding bytes included)
int planestride; // Row length, in bytes (padding bytes included)
size_t rowstride; // Plan size, in bytes (all padding bytes included)
size_t planestride; // Row length, in bytes (padding bytes included)
protected:
T* data;
@ -602,18 +601,18 @@ public:
PlanarPtr<T> b;
PlanarRGBData() : rowstride(0), planestride(0), data (nullptr) {}
PlanarRGBData(int w, int h) : rowstride(0), planestride(0), data (nullptr)
PlanarRGBData(size_t w, size_t h) : rowstride(0), planestride(0), data (nullptr)
{
allocate(w, h);
}
// Send back the row stride. WARNING: unit = byte, not element!
int getRowStride () const
size_t getRowStride () const
{
return rowstride;
}
// Send back the plane stride. WARNING: unit = byte, not element!
int getPlaneStride () const
size_t getPlaneStride () const
{
return planestride;
}
@ -710,7 +709,7 @@ public:
char *bluestart = (char*)(data) + 2 * planestride;
for (int i = 0; i < height; ++i) {
int k = i * rowstride;
size_t k = i * rowstride;
r(i) = (T*)(redstart + k);
g(i) = (T*)(greenstart + k);
b(i) = (T*)(bluestart + k);
@ -1180,10 +1179,10 @@ class ChunkyPtr
{
private:
T* ptr;
int width;
ssize_t width;
public:
#if CHECK_BOUNDS
int width_, height_;
size_t width_, height_;
#endif
#if CHECK_BOUNDS
@ -1191,7 +1190,7 @@ public:
#else
ChunkyPtr() : ptr (nullptr), width(-1) {}
#endif
void init(T* base, int w = -1)
void init(T* base, ssize_t w = -1)
{
ptr = base;
width = w;
@ -1202,12 +1201,12 @@ public:
other.ptr = ptr;
ptr = tmpsPtr;
int tmpWidth = other.width;
ssize_t tmpWidth = other.width;
other.width = width;
width = tmpWidth;
#if CHECK_BOUNDS
int tmp = other.width_;
size_t tmp = other.width_;
other.width_ = width_;
width_ = tmp;
tmp = other.height_;
@ -1218,7 +1217,7 @@ public:
}
// Will send back the start of a row, starting with a red, green or blue value
T* operator() (unsigned row) const
T* operator() (size_t row) const
{
#if CHECK_BOUNDS
assert (row < height_);
@ -1226,14 +1225,14 @@ public:
return &ptr[3 * (row * width)];
}
// Will send back a value at a given row, col position
T& operator() (unsigned row, unsigned col)
T& operator() (size_t row, size_t col)
{
#if CHECK_BOUNDS
assert (row < height_ && col < width_);
#endif
return ptr[3 * (row * width + col)];
}
const T operator() (unsigned row, unsigned col) const
const T operator() (size_t row, size_t col) const
{
#if CHECK_BOUNDS
assert (row < height_ && col < width_);
@ -1315,7 +1314,7 @@ public:
b.height_ = height;
#endif
abData.resize(width * height * 3u);
abData.resize((size_t)width * (size_t)height * (size_t)3);
if (!abData.isEmpty()) {
data = abData.data;

View File

@ -69,7 +69,7 @@ void Image8::setScanline (int row, unsigned char* buffer, int bps, unsigned int
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);
memcpy (data + (uint64_t)row * (uint64_t)width * (uint64_t)3u, buffer, width * 3);
}
break;

View File

@ -16,6 +16,7 @@
* You should have received a copy of the GNU General Public License
* along with RawTherapee. If not, see <http://www.gnu.org/licenses/>.
*/
#include <functional>
#include <strings.h>
#include <glib/gstdio.h>
#include <tiff.h>
@ -43,6 +44,22 @@ Glib::ustring to_utf8 (const std::string& str)
}
}
template<typename T>
T getFromFrame(
const std::vector<std::unique_ptr<FrameData>>& frames,
std::size_t frame,
const std::function<T (const FrameData&)>& function
)
{
if (frame < frames.size()) {
return function(*frames[frame]);
}
if (!frames.empty()) {
return function(*frames[0]);
}
return {};
}
}
FramesMetaData* FramesMetaData::fromFile (const Glib::ustring& fname, std::unique_ptr<RawMetaDataLocation> rml, bool firstFrameOnly)
@ -902,72 +919,194 @@ procparams::IPTCPairs FramesData::getIPTCData (unsigned int frame) const
bool FramesData::hasExif(unsigned int frame) const
{
return frames.empty() || frame >= frames.size() ? false : frames.at(frame)->hasExif ();
return getFromFrame<bool>(
frames,
frame,
[](const FrameData& frame_data)
{
return frame_data.hasExif();
}
);
}
bool FramesData::hasIPTC(unsigned int frame) const
{
return frames.empty() || frame >= frames.size() ? false : frames.at(frame)->hasIPTC ();
return getFromFrame<bool>(
frames,
frame,
[](const FrameData& frame_data)
{
return frame_data.hasIPTC();
}
);
}
tm FramesData::getDateTime(unsigned int frame) const
{
if (frames.empty() || frame >= frames.size() ) {
return {};
} else {
return frames.at(frame)->getDateTime ();
return getFromFrame<tm>(
frames,
frame,
[](const FrameData& frame_data)
{
return frame_data.getDateTime();
}
);
}
time_t FramesData::getDateTimeAsTS(unsigned int frame) const
{
return frames.empty() || frame >= frames.size() ? 0 : frames.at(frame)->getDateTimeAsTS ();
return getFromFrame<time_t>(
frames,
frame,
[](const FrameData& frame_data)
{
return frame_data.getDateTimeAsTS();
}
);
}
int FramesData::getISOSpeed(unsigned int frame) const
{
return frames.empty() || frame >= frames.size() ? 0 : frames.at(frame)->getISOSpeed ();
return getFromFrame<int>(
frames,
frame,
[](const FrameData& frame_data)
{
return frame_data.getISOSpeed();
}
);
}
double FramesData::getFNumber(unsigned int frame) const
{
return frames.empty() || frame >= frames.size() ? 0. : frames.at(frame)->getFNumber ();
return getFromFrame<double>(
frames,
frame,
[](const FrameData& frame_data)
{
return frame_data.getFNumber();
}
);
}
double FramesData::getFocalLen(unsigned int frame) const
{
return frames.empty() || frame >= frames.size() ? 0. : frames.at(frame)->getFocalLen ();
return getFromFrame<double>(
frames,
frame,
[](const FrameData& frame_data)
{
return frame_data.getFocalLen();
}
);
}
double FramesData::getFocalLen35mm(unsigned int frame) const
{
return frames.empty() || frame >= frames.size() ? 0. : frames.at(frame)->getFocalLen35mm ();
return getFromFrame<double>(
frames,
frame,
[](const FrameData& frame_data)
{
return frame_data.getFocalLen35mm();
}
);
}
float FramesData::getFocusDist(unsigned int frame) const
{
return frames.empty() || frame >= frames.size() ? 0.f : frames.at(frame)->getFocusDist ();
return getFromFrame<float>(
frames,
frame,
[](const FrameData& frame_data)
{
return frame_data.getFocusDist();
}
);
}
double FramesData::getShutterSpeed(unsigned int frame) const
{
return frames.empty() || frame >= frames.size() ? 0. : frames.at(frame)->getShutterSpeed ();
return getFromFrame<double>(
frames,
frame,
[](const FrameData& frame_data)
{
return frame_data.getShutterSpeed();
}
);
}
double FramesData::getExpComp(unsigned int frame) const
{
return frames.empty() || frame >= frames.size() ? 0. : frames.at(frame)->getExpComp ();
return getFromFrame<double>(
frames,
frame,
[](const FrameData& frame_data)
{
return frame_data.getExpComp();
}
);
}
std::string FramesData::getMake(unsigned int frame) const
{
return frames.empty() || frame >= frames.size() ? std::string() : frames.at(frame)->getMake ();
return getFromFrame<std::string>(
frames,
frame,
[](const FrameData& frame_data)
{
return frame_data.getMake();
}
);
}
std::string FramesData::getModel(unsigned int frame) const
{
return frames.empty() || frame >= frames.size() ? std::string() : frames.at(frame)->getModel ();
return getFromFrame<std::string>(
frames,
frame,
[](const FrameData& frame_data)
{
return frame_data.getModel();
}
);
}
std::string FramesData::getLens(unsigned int frame) const
{
return frames.empty() || frame >= frames.size() ? std::string() : frames.at(frame)->getLens ();
return getFromFrame<std::string>(
frames,
frame,
[](const FrameData& frame_data)
{
return frame_data.getLens();
}
);
}
std::string FramesData::getSerialNumber(unsigned int frame) const
{
return frames.empty() || frame >= frames.size() ? std::string() : frames.at(frame)->getSerialNumber ();
return getFromFrame<std::string>(
frames,
frame,
[](const FrameData& frame_data)
{
return frame_data.getSerialNumber();
}
);
}
std::string FramesData::getOrientation(unsigned int frame) const
{
return frames.empty() || frame >= frames.size() ? std::string() : frames.at(frame)->getOrientation ();
return getFromFrame<std::string>(
frames,
frame,
[](const FrameData& frame_data)
{
return frame_data.getOrientation();
}
);
}

View File

@ -108,8 +108,6 @@ void Imagefloat::setScanline (int row, unsigned char* buffer, int bps, unsigned
}
namespace rtengine { extern void filmlike_clip(float *r, float *g, float *b); }
void Imagefloat::getScanline (int row, unsigned char* buffer, int bps, bool isFloat) const
{
@ -441,11 +439,15 @@ void Imagefloat::calcCroppedHistogram(const ProcParams &params, float scale, LUT
int x1, x2, y1, y2;
params.crop.mapToResized(width, height, scale, x1, x2, y1, y2);
#ifdef _OPENMP
#pragma omp parallel
#endif
{
LUTu histThr(65536);
histThr.clear();
#ifdef _OPENMP
#pragma omp for nowait
#endif
for (int y = y1; y < y2; y++) {
for (int x = x1; x < x2; x++) {
@ -461,7 +463,9 @@ void Imagefloat::calcCroppedHistogram(const ProcParams &params, float scale, LUT
}
}
#ifdef _OPENMP
#pragma omp critical
#endif
{
for(int i = 0; i <= 0xffff; i++) {
hist[i] += histThr[i];
@ -495,7 +499,6 @@ void Imagefloat::ExecCMSTransform(cmsHTRANSFORM hTransform)
*(p++) = *(pR++);
*(p++) = *(pG++);
*(p++) = *(pB++);
}
cmsDoTransform (hTransform, pBuf.data, pBuf.data, width);

View File

@ -1048,9 +1048,13 @@ void ImProcCoordinator::updateLRGBHistograms()
int x1, y1, x2, y2;
params.crop.mapToResized(pW, pH, scale, x1, x2, y1, y2);
#ifdef _OPENMP
#pragma omp parallel sections
#endif
{
#ifdef _OPENMP
#pragma omp section
#endif
{
histChroma.clear();
@ -1060,7 +1064,9 @@ void ImProcCoordinator::updateLRGBHistograms()
histChroma[(int)(sqrtf(SQR(nprevl->a[i][j]) + SQR(nprevl->b[i][j])) / 188.f)]++; //188 = 48000/256
}
}
#ifdef _OPENMP
#pragma omp section
#endif
{
histLuma.clear();
@ -1070,7 +1076,9 @@ void ImProcCoordinator::updateLRGBHistograms()
histLuma[(int)(nprevl->L[i][j] / 128.f)]++;
}
}
#ifdef _OPENMP
#pragma omp section
#endif
{
histRed.clear();
histGreen.clear();
@ -1302,7 +1310,9 @@ void ImProcCoordinator::saveInputICCReference(const Glib::ustring& fname, bool a
int cy = params.crop.y;
int cw = params.crop.w;
int ch = params.crop.h;
#ifdef _OPENMP
#pragma omp parallel for
#endif
for (int i = cy; i < cy + ch; i++) {
for (int j = cx; j < cx + cw; j++) {
@ -1317,7 +1327,9 @@ void ImProcCoordinator::saveInputICCReference(const Glib::ustring& fname, bool a
}
// image may contain out of range samples, clip them to avoid wrap-arounds
#ifdef _OPENMP
#pragma omp parallel for
#endif
for (int i = 0; i < im->getHeight(); i++) {
for (int j = 0; j < im->getWidth(); j++) {

View File

@ -777,7 +777,9 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw
hist16Qthr.clear();
}
#ifdef _OPENMP
#pragma omp for reduction(+:sum)
#endif
for (int i = 0; i < height; i++)
@ -846,7 +848,9 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw
//can be used in case of...
}
#ifdef _OPENMP
#pragma omp critical
#endif
{
if (needJ) {
hist16J += hist16Jthr;
@ -995,7 +999,9 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw
int bufferLength = ((width + 3) / 4) * 4; // bufferLength has to be a multiple of 4
#endif
#ifndef _DEBUG
#ifdef _OPENMP
#pragma omp parallel
#endif
#endif
{
float minQThr = 10000.f;
@ -1010,7 +1016,9 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw
float sbuffer[bufferLength] ALIGNED16;
#endif
#ifndef _DEBUG
#ifdef _OPENMP
#pragma omp for schedule(dynamic, 16)
#endif
#endif
for (int i = 0; i < height; i++) {
@ -1618,7 +1626,9 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw
#endif
}
#ifdef _OPENMP
#pragma omp critical
#endif
{
if (minQThr < minQ) {
minQ = minQThr;
@ -1731,11 +1741,15 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw
#ifndef _DEBUG
#ifdef _OPENMP
#pragma omp parallel
#endif
#endif
{
#ifndef _DEBUG
#ifdef _OPENMP
#pragma omp for schedule(dynamic, 10)
#endif
#endif
for (int i = 0; i < height; i++) // update CieImages with new values after sharpening, defringe, contrast by detail level
@ -1768,7 +1782,9 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw
const float co_e = (pow_F (f_l, 0.25f)) + eps;
#ifndef _DEBUG
#ifdef _OPENMP
#pragma omp parallel
#endif
#endif
{
#ifdef __SSE2__
@ -1782,7 +1798,9 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw
#endif
#ifndef _DEBUG
#ifdef _OPENMP
#pragma omp for schedule(dynamic, 10)
#endif
#endif
for (int i = 0; i < height; i++) { // update CIECAM with new values after tone-mapping
@ -4120,7 +4138,9 @@ void ImProcFunctions::luminanceCurve (LabImage* lold, LabImage* lnew, LUTf & cur
int W = lold->W;
int H = lold->H;
#ifdef _OPENMP
#pragma omp parallel for if (multiThread)
#endif
for (int i = 0; i < H; i++)
for (int j = 0; j < W; j++) {
@ -4269,17 +4289,8 @@ void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBuffer, int pW
}
LUTu hist16Clad;
LUTu hist16Llad;
//preparate for histograms CIECAM
if (pW != 1) { //only with improccoordinator
hist16Clad (65536);
hist16Clad.clear();
hist16Llad (65536);
hist16Llad.clear();
}
const float histLFactor = pW != 1 ? histLCurve.getSize() / 100.f : 1.f;
const float histCFactor = pW != 1 ? histCCurve.getSize() / 48000.f : 1.f;
#ifdef _DEBUG
MyTime t1e, t2e;
@ -4386,17 +4397,21 @@ void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBuffer, int pW
{wprof[2][0], wprof[2][1], wprof[2][2]}
};
#ifdef _OPENMP
#ifdef _DEBUG
#pragma omp parallel default(shared) firstprivate(lold, lnew, MunsDebugInfo, pW) if (multiThread)
#else
#pragma omp parallel if (multiThread)
#endif
#endif
{
#ifdef __SSE2__
float HHBuffer[W] ALIGNED16;
float CCBuffer[W] ALIGNED16;
#endif
#ifdef _OPENMP
#pragma omp for schedule(dynamic, 16)
#endif
for (int i = 0; i < H; i++) {
if (avoidColorShift)
@ -4775,8 +4790,7 @@ void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBuffer, int pW
//update histogram C
if (pW != 1) { //only with improccoordinator
int posp = (int)sqrt (atmp * atmp + btmp * btmp);
hist16Clad[posp]++;
histCCurve[histCFactor * sqrt(atmp * atmp + btmp * btmp)]++;
}
if (editPipette && editID == EUID_Lab_LCCurve) {
@ -4831,8 +4845,7 @@ void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBuffer, int pW
//update histo LC
if (pW != 1) { //only with improccoordinator
int posl = Lprov1 * 327.68f;
hist16Llad[posl]++;
histLCurve[Lprov1 * histLFactor]++;
}
Chprov1 = sqrt (SQR (atmp) + SQR (btmp)) / 327.68f;
@ -4919,13 +4932,6 @@ void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBuffer, int pW
}
} // end of parallelization
if (pW != 1) { //only with improccoordinator
//update histogram C with data chromaticity and not with CC curve
hist16Clad.compressTo (histCCurve);
//update histogram L with data luminance
hist16Llad.compressTo (histLCurve);
}
#ifdef _DEBUG
if (settings->verbose) {
@ -5136,7 +5142,9 @@ void ImProcFunctions::EPDToneMapCIE (CieImage *ncie, float a_w, float c_, int Wi
EdgePreservingDecomposition epd (Wid, Hei);
#ifdef _OPENMP
#pragma omp parallel for
#endif
for (int i = 0; i < Hei; i++)
for (int j = 0; j < Wid; j++) {
@ -5162,7 +5170,9 @@ void ImProcFunctions::EPDToneMapCIE (CieImage *ncie, float a_w, float c_, int Wi
//Restore past range, also desaturate a bit per Mantiuk's Color correction for tone mapping.
float s = (1.0f + 38.7889f) * powf (Compression, 1.5856f) / (1.0f + 38.7889f * powf (Compression, 1.5856f));
#ifndef _DEBUG
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,10)
#endif
#endif
for (int i = 0; i < Hei; i++)
@ -5243,11 +5253,15 @@ void ImProcFunctions::EPDToneMap (LabImage *lab, unsigned int Iterates, int skip
//Due to the taking of logarithms, L must be nonnegative. Further, scale to 0 to 1 using nominal range of L, 0 to 15 bit.
float minL = FLT_MAX;
float maxL = 0.f;
#ifdef _OPENMP
#pragma omp parallel
#endif
{
float lminL = FLT_MAX;
float lmaxL = 0.f;
#ifdef _OPENMP
#pragma omp for
#endif
for (size_t i = 0; i < N; i++) {
if (L[i] < lminL) {
@ -5259,7 +5273,9 @@ void ImProcFunctions::EPDToneMap (LabImage *lab, unsigned int Iterates, int skip
}
}
#ifdef _OPENMP
#pragma omp critical
#endif
{
if (lminL < minL) {
minL = lminL;
@ -5279,7 +5295,9 @@ void ImProcFunctions::EPDToneMap (LabImage *lab, unsigned int Iterates, int skip
maxL = 1.f;
}
#ifdef _OPENMP
#pragma omp parallel for
#endif
for (size_t i = 0; i < N; ++i)
//{L[i] = (L[i] - minL)/32767.0f;
@ -5340,7 +5358,7 @@ void ImProcFunctions::getAutoExp (const LUTu &histogram, int histcompr, double
histogram.getSumAndAverage (sum, ave);
//find median of luminance
int median = 0, count = histogram[0];
size_t median = 0, count = histogram[0];
while (count < sum / 2) {
median++;

View File

@ -58,23 +58,20 @@ namespace {
#endif
int get_dark_channel(const array2D<float> &R, const array2D<float> &G, const array2D<float> &B, array2D<float> &dst, int patchsize, float *ambient, bool clip, bool multithread)
int get_dark_channel(const array2D<float> &R, const array2D<float> &G, const array2D<float> &B, array2D<float> &dst, int patchsize, const float ambient[3], bool clip, bool multithread)
{
const int W = R.width();
const int H = R.height();
int npatches = 0;
#ifdef _OPENMP
#pragma omp parallel for if (multithread)
#endif
for (int y = 0; y < H; y += patchsize) {
int pH = min(y+patchsize, H);
for (int x = 0; x < W; x += patchsize, ++npatches) {
const int pH = min(y + patchsize, H);
for (int x = 0; x < W; x += patchsize) {
float val = RT_INFINITY_F;
int pW = min(x+patchsize, W);
const int pW = min(x + patchsize, W);
for (int yy = y; yy < pH; ++yy) {
float yval = RT_INFINITY_F;
for (int xx = x; xx < pW; ++xx) {
float r = R[yy][xx];
float g = G[yy][xx];
@ -84,9 +81,8 @@ int get_dark_channel(const array2D<float> &R, const array2D<float> &G, const arr
g /= ambient[1];
b /= ambient[2];
}
yval = min(yval, r, g, b);
val = min(val, r, g, b);
}
val = min(val, yval);
}
if (clip) {
val = LIM01(val);
@ -97,7 +93,7 @@ int get_dark_channel(const array2D<float> &R, const array2D<float> &G, const arr
}
}
return npatches;
return (W / patchsize + ((W % patchsize) > 0)) * (H / patchsize + ((H % patchsize) > 0));
}
@ -121,7 +117,7 @@ float estimate_ambient_light(const array2D<float> &R, const array2D<float> &G, c
std::priority_queue<float> p;
for (int y = 0; y < H; y += patchsize) {
for (int x = 0; x < W; x += patchsize) {
if (!OOG(dark[y][x], 1.f)) {
if (!OOG(dark[y][x], 1.f - 1e-5f)) {
p.push(dark[y][x]);
}
}
@ -221,7 +217,7 @@ void ImProcFunctions::dehaze(Imagefloat *img)
const int W = img->getWidth();
const int H = img->getHeight();
float strength = LIM01(float(params->dehaze.strength) / 100.f * 0.9f);
const float strength = LIM01(float(params->dehaze.strength) / 100.f * 0.9f);
if (options.rtSettings.verbose) {
std::cout << "dehaze: strength = " << strength << std::endl;
@ -311,7 +307,7 @@ void ImProcFunctions::dehaze(Imagefloat *img)
}
float mt = max(t[y][x], t0, tl + teps, tu + teps);
if (params->dehaze.showDepthMap) {
img->r(y, x) = img->g(y, x) = img->b(y, x) = 1.f - mt;
img->r(y, x) = img->g(y, x) = img->b(y, x) = LIM01(1.f - mt);
} else {
float r = (rgb[0] - ambient[0]) / mt + ambient[0];
float g = (rgb[1] - ambient[1]) / mt + ambient[1];

View File

@ -54,7 +54,9 @@ void ImProcFunctions::Lanczos (const Imagefloat* src, Imagefloat* dst, float sca
const float sc = min (scale, 1.0f);
const int support = static_cast<int> (2.0f * a / sc) + 1;
#ifdef _OPENMP
#pragma omp parallel
#endif
{
// storage for precomputed parameters for horisontal interpolation
float * wwh = new float[support * dst->getWidth()];
@ -97,7 +99,9 @@ void ImProcFunctions::Lanczos (const Imagefloat* src, Imagefloat* dst, float sca
}
// Phase 2: do actual interpolation
#ifdef _OPENMP
#pragma omp for
#endif
for (int i = 0; i < dst->getHeight(); i++) {

View File

@ -393,7 +393,7 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, float **e
pond /= log(elogt);
}
auto shmap = ((mapmet == 2 || mapmet == 3 || mapmet == 4) && it == 1) ? new SHMap (W_L, H_L, true) : nullptr;
auto shmap = ((mapmet == 2 || mapmet == 3 || mapmet == 4) && it == 1) ? new SHMap (W_L, H_L) : nullptr;
float *buffer = new float[W_L * H_L];;

View File

@ -705,7 +705,9 @@ void ImProcFunctions::transformLuminanceOnly (Imagefloat* original, Imagefloat*
}
bool darkening = (params->vignetting.amount <= 0.0);
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16) if (multiThread)
#endif
for (int y = 0; y < transformed->getHeight(); y++) {
double vig_y_d = applyVignetting ? (double) (y + cy) - vig_h2 : 0.0;
@ -817,7 +819,9 @@ void ImProcFunctions::transformGeneral(bool highQuality, Imagefloat *original, I
#endif
// main cycle
bool darkening = (params->vignetting.amount <= 0.0);
#ifdef _OPENMP
#pragma omp parallel for if (multiThread)
#endif
for (int y = 0; y < transformed->getHeight(); y++) {
for (int x = 0; x < transformed->getWidth(); x++) {
@ -964,7 +968,9 @@ void ImProcFunctions::transformLCPCAOnly(Imagefloat *original, Imagefloat *trans
chTrans[1] = transformed->g.ptrs;
chTrans[2] = transformed->b.ptrs;
#ifdef _OPENMP
#pragma omp parallel for if (multiThread)
#endif
for (int y = 0; y < transformed->getHeight(); y++) {
for (int x = 0; x < transformed->getWidth(); x++) {

View File

@ -40,8 +40,6 @@ namespace rtengine
using namespace procparams;
extern const Settings* settings;
void fillCurveArrayVib (DiagonalCurve* diagCurve, LUTf &outCurve)
{
@ -170,7 +168,9 @@ void ImProcFunctions::vibrance (LabImage* lab)
{static_cast<float>(wiprof[2][0]), static_cast<float>(wiprof[2][1]), static_cast<float>(wiprof[2][2])}
};
#ifdef _OPENMP
#pragma omp parallel if (multiThread)
#endif
{
#ifdef __SSE2__
@ -179,7 +179,9 @@ void ImProcFunctions::vibrance (LabImage* lab)
#endif
float sathue[5], sathue2[4]; // adjust sat in function of hue
#ifdef _OPENMP
#pragma omp for schedule(dynamic, 16)
#endif
for (int i = 0; i < height; i++) {
#ifdef __SSE2__

View File

@ -64,7 +64,7 @@ void LabImage::getPipetteData (float &v1, float &v2, float &v3, int posX, int po
v3 = n ? accumulator_b / float(n) : 0.f;
}
void LabImage::allocLab(int w, int h)
void LabImage::allocLab(size_t w, size_t h)
{
L = new float*[h];
a = new float*[h];
@ -73,19 +73,19 @@ void LabImage::allocLab(int w, int h)
data = new float [w * h * 3];
float * index = data;
for (int i = 0; i < h; i++) {
for (size_t i = 0; i < h; i++) {
L[i] = index + i * w;
}
index += w * h;
for (int i = 0; i < h; i++) {
for (size_t i = 0; i < h; i++) {
a[i] = index + i * w;
}
index += w * h;
for (int i = 0; i < h; i++) {
for (size_t i = 0; i < h; i++) {
b[i] = index + i * w;
}
}

View File

@ -25,7 +25,7 @@ namespace rtengine
class LabImage
{
private:
void allocLab(int w, int h);
void allocLab(size_t w, size_t h);
public:
int W, H;

View File

@ -107,7 +107,7 @@ IMFILE* fopen (const char* fname)
void* data = mmap(nullptr, stat_buffer.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
if ( data == MAP_FAILED ) {
printf("no mmap\n");
printf("no mmap %s\n", fname);
close(fd);
return nullptr;
}

View File

@ -77,7 +77,9 @@ PreviewImage::PreviewImage (const Glib::ustring &fname, const Glib::ustring &ext
previewImage = Cairo::ImageSurface::create(Cairo::FORMAT_RGB24, w, h);
previewImage->flush();
#ifdef _OPENMP
#pragma omp parallel for
#endif
for (unsigned int i = 0; i < (unsigned int)(h); ++i) {
const unsigned char *src = data + i * w * 3;
unsigned char *dst = previewImage->get_data() + i * w * 4;
@ -119,7 +121,9 @@ PreviewImage::PreviewImage (const Glib::ustring &fname, const Glib::ustring &ext
rawImage.getImage (wb, TR_NONE, &image, pp, params.toneCurve, params.raw);
rtengine::Image8 output(fw, fh);
rawImage.convertColorSpace(&image, params.icm, wb);
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic, 10)
#endif
for (int i = 0; i < fh; ++i)
for (int j = 0; j < fw; ++j) {
image.r(i, j) = Color::gamma2curve[image.r(i, j)];
@ -139,7 +143,9 @@ PreviewImage::PreviewImage (const Glib::ustring &fname, const Glib::ustring &ext
previewImage = Cairo::ImageSurface::create(Cairo::FORMAT_RGB24, w, h);
previewImage->flush();
#ifdef _OPENMP
#pragma omp parallel for
#endif
for (unsigned int i = 0; i < (unsigned int)(h); i++) {
const unsigned char *src = data + i * w * 3;
unsigned char *dst = previewImage->get_data() + i * w * 4;

View File

@ -70,10 +70,10 @@ enum ProcEventCode {
EvToneCurveMode1 = 40,
EvToneCurve2 = 41,
EvToneCurveMode2 = 42,
EvLDNRadius = 43, // obsolete
EvLDNEdgeTolerance = 44, // obsolete
EvCDNEnabled = 45, // obsolete
EvBlendCMSMatrix = 46, // obsolete
obsolete_43 = 43, // obsolete
obsolete_44 = 44, // obsolete
obsolete_45 = 45, // obsolete
obsolete_46 = 46, // obsolete
EvDCPToneCurve = 47,
EvDCPIlluminant = 48,
EvSHEnabled = 49,
@ -93,7 +93,7 @@ enum ProcEventCode {
EvCrop = 63,
EvCACorr = 64,
EvHREnabled = 65,
EvHRAmount = 66, //obsolete
obsolete_66 = 66, //obsolete
EvHRMethod = 67,
EvWProfile = 68,
EvOProfile = 69,
@ -138,7 +138,7 @@ enum ProcEventCode {
EvResizeBoundingBox = 108,
EvResizeAppliesTo = 109,
EvLAvoidColorShift = 110,
EvLSatLimiter = 111, // obsolete
obsolete_111 = 111, // obsolete
EvLRSTProtection = 112,
EvDemosaicDCBIter = 113,
EvDemosaicFalseColorIter = 114,
@ -151,7 +151,7 @@ enum ProcEventCode {
EvPreProcessAutoDF = 121,
EvPreProcessDFFile = 122,
EvPreProcessExpCorrLinear = 123,
EvPreProcessExpCorrPH = 124,
obsolete_124 = 124, // obsolete
EvFlatFieldFile = 125,
EvFlatFieldAutoSelect = 126,
EvFlatFieldBlurRadius = 127,

View File

@ -2665,7 +2665,6 @@ RAWParams::RAWParams() :
cared(0.0),
cablue(0.0),
expos(1.0),
preser(0.0),
hotPixelFilter(false),
deadPixelFilter(false),
hotdeadpix_thresh(100)
@ -2691,7 +2690,6 @@ bool RAWParams::operator ==(const RAWParams& other) const
&& cared == other.cared
&& cablue == other.cablue
&& expos == other.expos
&& preser == other.preser
&& hotPixelFilter == other.hotPixelFilter
&& deadPixelFilter == other.deadPixelFilter
&& hotdeadpix_thresh == other.hotdeadpix_thresh;
@ -3561,7 +3559,6 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
// Raw exposition
saveToKeyfile(!pedited || pedited->raw.exPos, "RAW", "PreExposure", raw.expos, keyFile);
saveToKeyfile(!pedited || pedited->raw.exPreser, "RAW", "PrePreserv", raw.preser, keyFile);
// MetaData
saveToKeyfile(!pedited || pedited->metadata.mode, "MetaData", "Mode", metadata.mode, keyFile);
@ -4991,7 +4988,6 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "RAW", "DeadPixelFilter", pedited, raw.deadPixelFilter, pedited->raw.deadPixelFilter);
assignFromKeyfile(keyFile, "RAW", "HotDeadPixelThresh", pedited, raw.hotdeadpix_thresh, pedited->raw.hotdeadpix_thresh);
assignFromKeyfile(keyFile, "RAW", "PreExposure", pedited, raw.expos, pedited->raw.exPos);
assignFromKeyfile(keyFile, "RAW", "PrePreserv", pedited, raw.preser, pedited->raw.exPreser);
if (ppVersion < 320) {
assignFromKeyfile(keyFile, "RAW", "Method", pedited, raw.bayersensor.method, pedited->raw.bayersensor.method);

View File

@ -1411,7 +1411,6 @@ struct RAWParams {
// exposure before interpolation
double expos;
double preser;
bool hotPixelFilter;
bool deadPixelFilter;

View File

@ -127,7 +127,9 @@ void RawImage::get_colorsCoeff( float *pre_mul_, float *scale_mul_, float *cblac
dsum[FC(1, 0) + 4] += (int)(((W + 1) / 2) * (H / 2));
dsum[FC(1, 1) + 4] += (int)((W / 2) * (H / 2));
#ifdef _OPENMP
#pragma omp parallel private(val)
#endif
{
double dsumthr[8];
memset(dsumthr, 0, sizeof dsumthr);
@ -142,7 +144,9 @@ void RawImage::get_colorsCoeff( float *pre_mul_, float *scale_mul_, float *cblac
}
float *tempdata = data[0];
#ifdef _OPENMP
#pragma omp for nowait
#endif
for (size_t row = 0; row < H; row += 8) {
size_t ymax = row + 8 < H ? row + 8 : H;
@ -176,7 +180,9 @@ skip_block2:
}
}
#ifdef _OPENMP
#pragma omp critical
#endif
{
for (int c = 0; c < 4; c++) {
dsum[c] += dsumthr[c];
@ -194,7 +200,9 @@ skip_block2:
}
} else if(isXtrans()) {
#ifdef _OPENMP
#pragma omp parallel
#endif
{
double dsumthr[8];
memset(dsumthr, 0, sizeof dsumthr);
@ -209,7 +217,9 @@ skip_block2:
whitefloat[c] = this->get_white(c) - whiteThreshold;
}
#ifdef _OPENMP
#pragma omp for nowait
#endif
for (size_t row = 0; row < H; row += 8)
for (size_t col = 0; col < W ; col += 8)
@ -239,7 +249,9 @@ skip_block3:
;
}
#ifdef _OPENMP
#pragma omp critical
#endif
{
for (int c = 0; c < 8; c++)
{
@ -716,7 +728,9 @@ float** RawImage::compress_image(unsigned int frameNum, bool freeImage)
// copy pixel raw data: the compressed format earns space
if( float_raw_image ) {
#ifdef _OPENMP
#pragma omp parallel for
#endif
for (int row = 0; row < height; row++)
for (int col = 0; col < width; col++) {
@ -726,21 +740,27 @@ float** RawImage::compress_image(unsigned int frameNum, bool freeImage)
delete [] float_raw_image;
float_raw_image = nullptr;
} else if (filters != 0 && !isXtrans()) {
#ifdef _OPENMP
#pragma omp parallel for
#endif
for (int row = 0; row < height; row++)
for (int col = 0; col < width; col++) {
this->data[row][col] = image[row * width + col][FC(row, col)];
}
} else if (isXtrans()) {
#ifdef _OPENMP
#pragma omp parallel for
#endif
for (int row = 0; row < height; row++)
for (int col = 0; col < width; col++) {
this->data[row][col] = image[row * width + col][XTRANSFC(row, col)];
}
} else if (colors == 1) {
#ifdef _OPENMP
#pragma omp parallel for
#endif
for (int row = 0; row < height; row++)
for (int col = 0; col < width; col++) {
@ -751,7 +771,9 @@ float** RawImage::compress_image(unsigned int frameNum, bool freeImage)
height -= top_margin;
width -= left_margin;
}
#ifdef _OPENMP
#pragma omp parallel for
#endif
for (int row = 0; row < height; row++)
for (int col = 0; col < width; col++) {

View File

@ -428,7 +428,6 @@ RawImageSource::RawImageSource ()
, plistener(nullptr)
, scale_mul{}
, c_black{}
, c_white{}
, cblacksom{}
, ref_pre_mul{}
, refwb_red(0.0)
@ -637,6 +636,11 @@ void RawImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* ima
bool isMono = (ri->getSensorType() == ST_FUJI_XTRANS && raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::MONO))
|| (ri->getSensorType() == ST_BAYER && raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::MONO));
for (int i = 0; i < 4; ++i) {
c_white[i] = (ri->get_white(i) - cblacksom[i]) / raw.expos + cblacksom[i];
}
float gain = calculate_scale_mul(new_scale_mul, new_pre_mul, c_white, cblacksom, isMono, ri->get_colors());
rm = new_scale_mul[0] / scale_mul[0] * gain;
gm = new_scale_mul[1] / scale_mul[1] * gain;
@ -1616,10 +1620,6 @@ int RawImageSource::load (const Glib::ustring &fname, bool firstFrameOnly)
camProfile = ICCStore::getInstance()->createFromMatrix (imatrices.xyz_cam, false, "Camera");
inverse33 (imatrices.xyz_cam, imatrices.cam_xyz);
for (int c = 0; c < 4; c++) {
c_white[c] = ri->get_white(c);
}
// First we get the "as shot" ("Camera") white balance and store it
float pre_mul[4];
// FIXME: get_colorsCoeff not so much used nowadays, when we have calculate_scale_mul() function here
@ -1793,6 +1793,19 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le
copyOriginalPixels(raw, riFrames[i], rid, rif, *rawDataFrames[i]);
}
}
} else if (numFrames == 2 && currFrame == 2) { // average the frames
if(!rawDataBuffer[0]) {
rawDataBuffer[0] = new array2D<float>;
}
rawDataFrames[1] = rawDataBuffer[0];
copyOriginalPixels(raw, riFrames[1], rid, rif, *rawDataFrames[1]);
copyOriginalPixels(raw, ri, rid, rif, rawData);
for (int i = 0; i < H; ++i) {
for (int j = 0; j < W; ++j) {
rawData[i][j] = (rawData[i][j] + (*rawDataFrames[1])[i][j]) * 0.5f;
}
}
} else {
copyOriginalPixels(raw, ri, rid, rif, rawData);
}
@ -2028,16 +2041,6 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le
}
}
if ( raw.expos != 1 ) {
if(numFrames == 4) {
for(int i = 0; i < 4; ++i) {
processRawWhitepoint(raw.expos, raw.preser, *rawDataFrames[i]);
}
} else {
processRawWhitepoint(raw.expos, raw.preser, rawData);
}
}
if(prepareDenoise && dirpyrdenoiseExpComp == INFINITY) {
LUTu aehist;
int aehistcompr;
@ -3407,7 +3410,9 @@ void RawImageSource::cfaboxblur(RawImage *riFlatFile, float* cfablur, int boxH,
}
#ifdef _OPENMP
#pragma omp single
#endif
for (int col = W - (W % 8); col < W; col++) {
int len = boxH / 2 + 1;
@ -3517,6 +3522,10 @@ void RawImageSource::scaleColors(int winx, int winy, int winw, int winh, const R
cblacksom[i] = max( c_black[i] + black_lev[i], 0.0f ); // adjust black level
}
for (int i = 0; i < 4; ++i) {
c_white[i] = (ri->get_white(i) - cblacksom[i]) / raw.expos + cblacksom[i];
}
initialGain = calculate_scale_mul(scale_mul, ref_pre_mul, c_white, cblacksom, isMono, ri->get_colors()); // recalculate scale colors with adjusted levels
//fprintf(stderr, "recalc: %f [%f %f %f %f]\n", initialGain, scale_mul[0], scale_mul[1], scale_mul[2], scale_mul[3]);
@ -4721,13 +4730,13 @@ void RawImageSource::getRAWHistogram (LUTu & histRedRaw, LUTu & histGreenRaw, LU
histGreenRaw.clear();
histBlueRaw.clear();
const float maxWhite = rtengine::max(ri->get_white(0), ri->get_white(1), ri->get_white(2), ri->get_white(3));
const float maxWhite = rtengine::max(c_white[0], c_white[1], c_white[2], c_white[3]);
const float scale = maxWhite <= 1.f ? 65535.f : 1.f; // special case for float raw images in [0.0;1.0] range
const float multScale = maxWhite <= 1.f ? 1.f / 255.f : 255.f;
const float mult[4] = { multScale / (ri->get_white(0) - cblacksom[0]),
multScale / (ri->get_white(1) - cblacksom[1]),
multScale / (ri->get_white(2) - cblacksom[2]),
multScale / (ri->get_white(3) - cblacksom[3])
const float mult[4] = { multScale / (c_white[0] - cblacksom[0]),
multScale / (c_white[1] - cblacksom[1]),
multScale / (c_white[2] - cblacksom[2]),
multScale / (c_white[3] - cblacksom[3])
};
const bool fourColours = ri->getSensorType() == ST_BAYER && ((mult[1] != mult[3] || cblacksom[1] != cblacksom[3]) || FC(0, 0) == 3 || FC(0, 1) == 3 || FC(1, 0) == 3 || FC(1, 1) == 3);

View File

@ -93,9 +93,6 @@ protected:
std::vector<double> histMatchingCache;
ColorManagementParams histMatchingParams;
void hphd_vertical (float** hpmap, int col_from, int col_to);
void hphd_horizontal (float** hpmap, int row_from, int row_to);
void hphd_green (float** hpmap);
void processFalseColorCorrectionThread (Imagefloat* im, array2D<float> &rbconv_Y, array2D<float> &rbconv_I, array2D<float> &rbconv_Q, array2D<float> &rbout_I, array2D<float> &rbout_Q, const int row_from, const int row_to);
void hlRecovery (const std::string &method, float* red, float* green, float* blue, int width, float* hlmax);
void transformRect (const PreviewProps &pp, int tran, int &sx1, int &sy1, int &width, int &height, int &fw);
@ -204,9 +201,14 @@ public:
static void init ();
static void cleanup ();
void setCurrentFrame(unsigned int frameNum) override {
if (numFrames == 2 && frameNum == 2) { // special case for averaging of two frames
currFrame = frameNum;
ri = riFrames[0];
} else {
currFrame = std::min(numFrames - 1, frameNum);
ri = riFrames[currFrame];
}
}
int getFrameCount() override {return numFrames;}
int getFlatFieldAutoClipValue() override {return flatFieldAutoClipValue;}
@ -250,7 +252,6 @@ protected:
bool freeBuffer
);
void ddct8x8s(int isgn, float a[8][8]);
void processRawWhitepoint (float expos, float preser, array2D<float> &rawData); // exposure before interpolation
int interpolateBadPixelsBayer( PixelsMap &bitmapBads, array2D<float> &rawData );
int interpolateBadPixelsNColours( PixelsMap &bitmapBads, const int colours );

View File

@ -151,7 +151,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
DARKFRAME, // EvPreProcessAutoDF
DARKFRAME, // EvPreProcessDFFile
DARKFRAME, // EvPreProcessExpCorrLinear
DARKFRAME, // EvPreProcessExpCorrPH
0, // --unused--
FLATFIELD, // EvFlatFieldFile,
FLATFIELD, // EvFlatFieldAutoSelect,
FLATFIELD, // EvFlatFieldBlurRadius,

View File

@ -30,7 +30,7 @@ namespace rtengine
extern const Settings* settings;
SHMap::SHMap (int w, int h, bool multiThread) : max_f(0.f), min_f(0.f), avg(0.f), W(w), H(h), multiThread(multiThread)
SHMap::SHMap (int w, int h) : max_f(0.f), min_f(0.f), avg(0.f), W(w), H(h)
{
map = new float*[H];

View File

@ -34,7 +34,7 @@ public:
float** map;
float max_f, min_f, avg;
SHMap (int w, int h, bool multiThread);
SHMap (int w, int h);
~SHMap ();
void update (Imagefloat* img, double radius, double lumi[3], bool hq, int skip);
@ -43,7 +43,6 @@ public:
private:
int W, H;
bool multiThread;
void fillLuminance( Imagefloat * img, float **luminance, double lumi[3] );
void fillLuminanceL( float ** L, float **luminance );

View File

@ -335,13 +335,17 @@ private:
LUTf gamcurve (65536, 0);
float gam, gamthresh, gamslope;
ipf.RGB_denoise_infoGamCurve (params.dirpyrDenoise, imgsrc->isRAW(), gamcurve, gam, gamthresh, gamslope);
#ifdef _OPENMP
#pragma omp parallel
#endif
{
Imagefloat *origCropPart;//init auto noise
origCropPart = new Imagefloat (crW, crH);//allocate memory
Imagefloat *provicalc = new Imagefloat ((crW + 1) / 2, (crH + 1) / 2); //for denoise curves
int skipP = 1;
#ifdef _OPENMP
#pragma omp for schedule(dynamic) collapse(2) nowait
#endif
for (int wcr = 0; wcr < numtiles_W; wcr++) {
for (int hcr = 0; hcr < numtiles_H; hcr++) {
@ -557,13 +561,17 @@ private:
coordH[0] = begH;
coordH[1] = fh / 2 - crH / 2;
coordH[2] = fh - crH - begH;
#ifdef _OPENMP
#pragma omp parallel
#endif
{
Imagefloat *origCropPart;//init auto noise
origCropPart = new Imagefloat (crW, crH);//allocate memory
Imagefloat *provicalc = new Imagefloat ((crW + 1) / 2, (crH + 1) / 2); //for denoise curves
#ifdef _OPENMP
#pragma omp for schedule(dynamic) collapse(2) nowait
#endif
for (int wcr = 0; wcr <= 2; wcr++) {
for (int hcr = 0; hcr <= 2; hcr++) {
@ -807,7 +815,9 @@ private:
if (denoiseParams.enabled && (noiseLCurve || noiseCCurve )) {
// we only need image reduced to 1/4 here
calclum = new Imagefloat ((fw + 1) / 2, (fh + 1) / 2); //for luminance denoise curve
#ifdef _OPENMP
#pragma omp parallel for
#endif
for (int ii = 0; ii < fh; ii += 2) {
for (int jj = 0; jj < fw; jj += 2) {
@ -1031,7 +1041,9 @@ private:
hist16thr[ (int) ((labView->L[i][j]))]++;
}
#ifdef _OPENMP
#pragma omp critical
#endif
{
hist16 += hist16thr;
}

View File

@ -338,5 +338,10 @@ ColorTemp StdImageSource::getSpotWB (std::vector<Coord2D> &red, std::vector<Coor
return ColorTemp (reds / rn * img_r, greens / gn * img_g, blues / bn * img_b, equal);
}
void StdImageSource::flushRGB() {
img->allocate(0, 0);
};
}

View File

@ -101,6 +101,7 @@ public:
void getRawValues(int x, int y, int rotate, int &R, int &G, int &B) override { R = G = B = 0;}
void flushRGB () override;
};
}

View File

@ -187,7 +187,9 @@ void gaussianBlur (const Array2Df& I, Array2Df& L, bool multithread)
Array2Df T (width, height);
//--- X blur
#ifdef _OPENMP
#pragma omp parallel for shared(I, T) if(multithread)
#endif
for ( int y = 0 ; y < height ; y++ ) {
for ( int x = 1 ; x < width - 1 ; x++ ) {
@ -202,7 +204,9 @@ void gaussianBlur (const Array2Df& I, Array2Df& L, bool multithread)
}
//--- Y blur
#ifdef _OPENMP
#pragma omp parallel for if(multithread)
#endif
for ( int x = 0 ; x < width - 7 ; x += 8 ) {
for ( int y = 1 ; y < height - 1 ; y++ ) {
@ -279,7 +283,9 @@ float calculateGradients (Array2Df* H, Array2Df* G, int k, bool multithread)
const float divider = pow ( 2.0f, k + 1 );
double avgGrad = 0.0; // use double precision for large summations
#ifdef _OPENMP
#pragma omp parallel for reduction(+:avgGrad) if(multithread)
#endif
for ( int y = 0 ; y < height ; y++ ) {
int n = (y == 0 ? 0 : y - 1);
@ -354,7 +360,9 @@ void calculateFiMatrix (Array2Df* FI, Array2Df* gradients[],
fi[nlevels - 1] = new Array2Df (width, height);
#ifdef _OPENMP
#pragma omp parallel for shared(fi) if(multithread)
#endif
for ( int k = 0 ; k < width * height ; k++ ) {
(*fi[nlevels - 1]) (k) = 1.0f;
}
@ -366,7 +374,9 @@ void calculateFiMatrix (Array2Df* FI, Array2Df* gradients[],
// only apply gradients to levels>=detail_level but at least to the coarsest
if ((k >= detail_level || k == nlevels - 1) && beta != 1.f) {
//DEBUG_STR << "calculateFiMatrix: apply gradient to level " << k << endl;
#ifdef _OPENMP
#pragma omp parallel for shared(fi,avgGrad) if(multithread)
#endif
for ( int y = 0; y < height; y++ ) {
for ( int x = 0; x < width; x++ ) {
float grad = ((*gradients[k]) (x, y) < 1e-4f) ? 1e-4 : (*gradients[k]) (x, y);
@ -455,7 +465,9 @@ void tmo_fattal02 (size_t width,
// float minLum = Y (0, 0);
float maxLum = Y (0, 0);
#ifdef _OPENMP
#pragma omp parallel for reduction(max:maxLum) if(multithread)
#endif
for ( int i = 0 ; i < size ; i++ ) {
maxLum = std::max (maxLum, Y (i));
@ -464,13 +476,17 @@ void tmo_fattal02 (size_t width,
Array2Df* H = new Array2Df (width, height);
float temp = 100.f / maxLum;
float eps = 1e-4f;
#ifdef _OPENMP
#pragma omp parallel if(multithread)
#endif
{
#ifdef __SSE2__
vfloat epsv = F2V (eps);
vfloat tempv = F2V (temp);
#endif
#ifdef _OPENMP
#pragma omp for schedule(dynamic,16)
#endif
for (size_t i = 0 ; i < height ; ++i) {
size_t j = 0;
@ -573,7 +589,9 @@ void tmo_fattal02 (size_t width,
// boundary conditions, so we need to adjust the assembly of the right hand
// side accordingly (basically fft solver assumes U(-1) = U(1), whereas zero
// Neumann conditions assume U(-1)=U(0)), see also divergence calculation
#ifdef _OPENMP
#pragma omp parallel for if(multithread)
#endif
for ( size_t y = 0 ; y < height ; y++ ) {
// sets index+1 based on the boundary assumption H(N+1)=H(N-1)
@ -591,7 +609,9 @@ void tmo_fattal02 (size_t width,
delete H;
// calculate divergence
#ifdef _OPENMP
#pragma omp parallel for if(multithread)
#endif
for ( size_t y = 0; y < height; ++y ) {
for ( size_t x = 0; x < width; ++x ) {
@ -626,12 +646,16 @@ void tmo_fattal02 (size_t width,
delete Gx;
delete FI;
#ifdef _OPENMP
#pragma omp parallel if(multithread)
#endif
{
#ifdef __SSE2__
vfloat gammav = F2V (gamma);
#endif
#ifdef _OPENMP
#pragma omp for schedule(dynamic,16)
#endif
for (size_t i = 0 ; i < height ; i++) {
size_t j = 0;
@ -706,7 +730,9 @@ void transform_ev2normal (Array2Df *A, Array2Df *T, bool multithread)
// the discrete cosine transform is not exactly the transform needed
// need to scale input values to get the right transformation
#ifdef _OPENMP
#pragma omp parallel for if(multithread)
#endif
for (int y = 1 ; y < height - 1 ; y++ )
for (int x = 1 ; x < width - 1 ; x++ ) {
@ -757,7 +783,9 @@ void transform_normal2ev (Array2Df *A, Array2Df *T, bool multithread)
// need to scale the output matrix to get the right transform
float factor = (1.0f / ((height - 1) * (width - 1)));
#ifdef _OPENMP
#pragma omp parallel for if(multithread)
#endif
for (int y = 0 ; y < height ; y++ )
for (int x = 0 ; x < width ; x++ ) {
@ -876,7 +904,9 @@ void solve_pde_fft (Array2Df *F, Array2Df *U, Array2Df *buf, bool multithread)/*
std::vector<double> l1 = get_lambda (height);
std::vector<double> l2 = get_lambda (width);
#ifdef _OPENMP
#pragma omp parallel for if(multithread)
#endif
for (int y = 0 ; y < height ; y++ ) {
for (int x = 0 ; x < width ; x++ ) {
@ -896,13 +926,17 @@ void solve_pde_fft (Array2Df *F, Array2Df *U, Array2Df *buf, bool multithread)/*
// (not really needed but good for numerics as we later take exp(U))
//DEBUG_STR << "solve_pde_fft: removing constant from solution" << std::endl;
float max = 0.f;
#ifdef _OPENMP
#pragma omp parallel for reduction(max:max) if(multithread)
#endif
for (int i = 0; i < width * height; i++) {
max = std::max (max, (*U) (i));
}
#ifdef _OPENMP
#pragma omp parallel for if(multithread)
#endif
for (int i = 0; i < width * height; i++) {
(*U) (i) -= max;

View File

@ -78,7 +78,7 @@ public:
};
CAApertureInterpreter caApertureInterpreter;
class CAMacroModeInterpreter : public ChoiceInterpreter
class CAMacroModeInterpreter : public ChoiceInterpreter<>
{
public:
CAMacroModeInterpreter()
@ -107,7 +107,7 @@ public:
};
CASelfTimerInterpreter caSelfTimerInterpreter;
class CAQualityInterpreter : public ChoiceInterpreter
class CAQualityInterpreter : public ChoiceInterpreter<>
{
public:
CAQualityInterpreter()
@ -121,7 +121,7 @@ public:
};
CAQualityInterpreter caQualityInterpreter;
class CAFlashModeInterpreter : public ChoiceInterpreter
class CAFlashModeInterpreter : public ChoiceInterpreter<>
{
public:
CAFlashModeInterpreter()
@ -138,7 +138,7 @@ public:
};
CAFlashModeInterpreter caFlashModeInterpreter;
class CAContinuousDriveInterpreter : public ChoiceInterpreter
class CAContinuousDriveInterpreter : public ChoiceInterpreter<>
{
public:
CAContinuousDriveInterpreter()
@ -156,7 +156,7 @@ public:
};
CAContinuousDriveInterpreter caContinuousDriveInterpreter;
class CAFocusModeInterpreter : public ChoiceInterpreter
class CAFocusModeInterpreter : public ChoiceInterpreter<>
{
public:
CAFocusModeInterpreter()
@ -176,7 +176,7 @@ public:
};
CAFocusModeInterpreter caFocusModeInterpreter;
class CARecordModeInterpreter : public ChoiceInterpreter
class CARecordModeInterpreter : public ChoiceInterpreter<>
{
public:
CARecordModeInterpreter()
@ -194,7 +194,7 @@ public:
};
CARecordModeInterpreter caRecordModeInterpreter;
class CAImageSizeInterpreter : public ChoiceInterpreter
class CAImageSizeInterpreter : public ChoiceInterpreter<>
{
public:
CAImageSizeInterpreter ()
@ -220,7 +220,7 @@ public:
};
CAImageSizeInterpreter caImageSizeInterpreter;
class CAEasyModeInterpreter : public ChoiceInterpreter
class CAEasyModeInterpreter : public ChoiceInterpreter<>
{
public:
CAEasyModeInterpreter ()
@ -300,7 +300,7 @@ public:
};
CAEasyModeInterpreter caEasyModeInterpreter;
class CADigitalZoomInterpreter : public ChoiceInterpreter
class CADigitalZoomInterpreter : public ChoiceInterpreter<>
{
public:
CADigitalZoomInterpreter()
@ -313,7 +313,7 @@ public:
};
CADigitalZoomInterpreter caDigitalZoomInterpreter;
class CAMeteringModeInterpreter : public ChoiceInterpreter
class CAMeteringModeInterpreter : public ChoiceInterpreter<>
{
public:
CAMeteringModeInterpreter()
@ -328,7 +328,7 @@ public:
};
CAMeteringModeInterpreter caMeteringModeInterpreter;
class CAFocusRangeInterpreter : public ChoiceInterpreter
class CAFocusRangeInterpreter : public ChoiceInterpreter<>
{
public:
CAFocusRangeInterpreter()
@ -348,7 +348,7 @@ public:
};
CAFocusRangeInterpreter caFocusRangeInterpreter;
class CAAFPointInterpreter : public ChoiceInterpreter
class CAAFPointInterpreter : public ChoiceInterpreter<>
{
public:
CAAFPointInterpreter()
@ -365,7 +365,7 @@ public:
};
CAAFPointInterpreter caAFPointInterpreter;
class CAExposureModeInterpreter : public ChoiceInterpreter
class CAExposureModeInterpreter : public ChoiceInterpreter<>
{
public:
CAExposureModeInterpreter()
@ -431,7 +431,7 @@ public:
};
CAFlashBitsInterpreter caFlashBitsInterpreter;
class CAFocusContinuousInterpreter : public ChoiceInterpreter
class CAFocusContinuousInterpreter : public ChoiceInterpreter<>
{
public:
CAFocusContinuousInterpreter()
@ -443,7 +443,7 @@ public:
};
CAFocusContinuousInterpreter caFocusContinuousInterpreter;
class CAAESettingsInterpreter : public ChoiceInterpreter
class CAAESettingsInterpreter : public ChoiceInterpreter<>
{
public:
CAAESettingsInterpreter()
@ -457,7 +457,7 @@ public:
};
CAAESettingsInterpreter caAESettingsInterpreter;
class CAStabilizationInterpreter : public ChoiceInterpreter
class CAStabilizationInterpreter : public ChoiceInterpreter<>
{
public:
CAStabilizationInterpreter()
@ -476,7 +476,7 @@ public:
};
CAStabilizationInterpreter caStabilizationInterpreter;
class CASpotMeteringInterpreter : public ChoiceInterpreter
class CASpotMeteringInterpreter : public ChoiceInterpreter<>
{
public:
CASpotMeteringInterpreter()
@ -487,7 +487,7 @@ public:
};
CASpotMeteringInterpreter caSpotMeteringInterpreter;
class CAPhotoEffectInterpreter : public ChoiceInterpreter
class CAPhotoEffectInterpreter : public ChoiceInterpreter<>
{
public:
CAPhotoEffectInterpreter()
@ -504,7 +504,7 @@ public:
};
CAPhotoEffectInterpreter caPhotoEffectInterpreter;
class CAManualFlashInterpreter : public ChoiceInterpreter
class CAManualFlashInterpreter : public ChoiceInterpreter<>
{
public:
CAManualFlashInterpreter()
@ -518,7 +518,7 @@ public:
};
CAManualFlashInterpreter caManualFlashInterpreter;
class CARAWQualityInterpreter : public ChoiceInterpreter
class CARAWQualityInterpreter : public ChoiceInterpreter<>
{
public:
CARAWQualityInterpreter()
@ -900,7 +900,8 @@ public:
{495, "Sigma 24-70mm F2.8 DG OS HSM | A"},
{496, "Canon EF 200-400mm f/4L IS USM"},
{499, "Canon EF 200-400mm f/4L IS USM + 1.4x"},
{502, "Canon EF 28mm f/2.8 IS USM"},
{502, "Canon EF 28mm f/2.8 IS USM or Tamron Lens"},
{502, "Tamron 35mm f/1.8 Di VC USD (F012)"},
{503, "Canon EF 24mm f/2.8 IS USM"},
{504, "Canon EF 24-70mm f/4L IS USM"},
{505, "Canon EF 35mm f/2 IS USM"},
@ -1093,7 +1094,7 @@ public:
};
CALensInterpreter caLensInterpreter;
class CAFocalTypeInterpreter : public ChoiceInterpreter
class CAFocalTypeInterpreter : public ChoiceInterpreter<>
{
public:
CAFocalTypeInterpreter()
@ -1182,7 +1183,7 @@ public:
};
CABaseISOInterpreter caBaseISOInterpreter;
class CAToneCurveInterpreter : public ChoiceInterpreter
class CAToneCurveInterpreter : public ChoiceInterpreter<>
{
public:
CAToneCurveInterpreter()
@ -1194,7 +1195,7 @@ public:
};
CAToneCurveInterpreter caToneCurveInterpreter;
class CASharpnessFrequencyInterpreter : public ChoiceInterpreter
class CASharpnessFrequencyInterpreter : public ChoiceInterpreter<>
{
public:
CASharpnessFrequencyInterpreter()
@ -1209,7 +1210,7 @@ public:
};
CASharpnessFrequencyInterpreter caSharpnessFrequencyInterpreter;
class CAWhiteBalanceInterpreter : public ChoiceInterpreter
class CAWhiteBalanceInterpreter : public ChoiceInterpreter<>
{
public:
CAWhiteBalanceInterpreter()
@ -1240,7 +1241,7 @@ public:
};
CAWhiteBalanceInterpreter caWhiteBalanceInterpreter;
class CAPictureStyleInterpreter : public ChoiceInterpreter
class CAPictureStyleInterpreter : public ChoiceInterpreter<>
{
public:
CAPictureStyleInterpreter()
@ -1271,7 +1272,7 @@ public:
};
CAPictureStyleInterpreter caPictureStyleInterpreter;
class CASlowShutterInterpreter : public ChoiceInterpreter
class CASlowShutterInterpreter : public ChoiceInterpreter<>
{
public:
CASlowShutterInterpreter()
@ -1302,7 +1303,7 @@ public:
};
CAFlashGuideNumberInterpreter caFlashGuideNumberInterpreter;
class CAAFPointsInFocusInterpreter : public ChoiceInterpreter
class CAAFPointsInFocusInterpreter : public ChoiceInterpreter<>
{
public:
CAAFPointsInFocusInterpreter()
@ -1319,7 +1320,7 @@ public:
};
CAAFPointsInFocusInterpreter caAFPointsInFocusInterpreter;
class CAAutoExposureBracketingInterpreter : public ChoiceInterpreter
class CAAutoExposureBracketingInterpreter : public ChoiceInterpreter<int>
{
public:
CAAutoExposureBracketingInterpreter()
@ -1333,7 +1334,7 @@ public:
};
CAAutoExposureBracketingInterpreter caAutoExposureBracketingInterpreter;
class CAControModeInterpreter : public ChoiceInterpreter
class CAControModeInterpreter : public ChoiceInterpreter<>
{
public:
CAControModeInterpreter()
@ -1369,7 +1370,7 @@ public:
};
CAMeasuredEVInterpreter caMeasuredEVInterpreter;
class CACameraTypeInterpreter : public ChoiceInterpreter
class CACameraTypeInterpreter : public ChoiceInterpreter<>
{
public:
CACameraTypeInterpreter()
@ -1382,7 +1383,7 @@ public:
};
CACameraTypeInterpreter caCameraTypeInterpreter;
class CAAutoRotateInterpreter : public ChoiceInterpreter
class CAAutoRotateInterpreter : public ChoiceInterpreter<int>
{
public:
CAAutoRotateInterpreter()
@ -1396,7 +1397,7 @@ public:
};
CAAutoRotateInterpreter caAutoRotateInterpreter;
class CABracketModeInterpreter : public ChoiceInterpreter
class CABracketModeInterpreter : public ChoiceInterpreter<>
{
public:
CABracketModeInterpreter()
@ -1410,7 +1411,7 @@ public:
};
CABracketModeInterpreter caBracketModeInterpreter;
class CARAWJpegQualityInterpreter : public ChoiceInterpreter
class CARAWJpegQualityInterpreter : public ChoiceInterpreter<>
{
public:
CARAWJpegQualityInterpreter()
@ -1426,7 +1427,7 @@ public:
};
CARAWJpegQualityInterpreter caRAWJpegQualityInterpreter;
class CAJpegSizeInterpreter : public ChoiceInterpreter
class CAJpegSizeInterpreter : public ChoiceInterpreter<>
{
public:
CAJpegSizeInterpreter()
@ -1452,7 +1453,7 @@ public:
};
CAJpegSizeInterpreter caJpegSizeInterpreter;
class CAWBBracketModeInterpreter : public ChoiceInterpreter
class CAWBBracketModeInterpreter : public ChoiceInterpreter<>
{
public:
CAWBBracketModeInterpreter()
@ -1464,7 +1465,7 @@ public:
};
CAWBBracketModeInterpreter caWBBracketModeInterpreter;
class CAFilterEffectInterpreter : public ChoiceInterpreter
class CAFilterEffectInterpreter : public ChoiceInterpreter<>
{
public:
CAFilterEffectInterpreter()
@ -1478,7 +1479,7 @@ public:
};
CAFilterEffectInterpreter caFilterEffectInterpreter;
class CAToningEffectInterpreter : public ChoiceInterpreter
class CAToningEffectInterpreter : public ChoiceInterpreter<>
{
public:
CAToningEffectInterpreter()
@ -1506,7 +1507,7 @@ public:
CAFileNumberInterpreter caFileNumberInterpreter;
// CanonModelID
class CAModelIDInterpreter : public ChoiceInterpreter
class CAModelIDInterpreter : public ChoiceInterpreter<>
{
public:
CAModelIDInterpreter ()
@ -1842,7 +1843,7 @@ public:
};
CAModelIDInterpreter caModelIDInterpreter;
class CAPanoramaDirectionInterpreter : public ChoiceInterpreter
class CAPanoramaDirectionInterpreter : public ChoiceInterpreter<>
{
public:
CAPanoramaDirectionInterpreter()
@ -1856,7 +1857,7 @@ public:
};
CAPanoramaDirectionInterpreter caPanoramaDirectionInterpreter;
class CAAspectRatioInterpreter : public ChoiceInterpreter
class CAAspectRatioInterpreter : public ChoiceInterpreter<>
{
public:
CAAspectRatioInterpreter()

View File

@ -24,7 +24,7 @@
namespace rtexif
{
class FAOnOffInterpreter : public ChoiceInterpreter
class FAOnOffInterpreter : public ChoiceInterpreter<>
{
public:
FAOnOffInterpreter ()
@ -35,7 +35,7 @@ public:
};
FAOnOffInterpreter faOnOffInterpreter;
class FASharpnessInterpreter : public ChoiceInterpreter
class FASharpnessInterpreter : public ChoiceInterpreter<>
{
public:
FASharpnessInterpreter ()
@ -53,7 +53,7 @@ public:
};
FASharpnessInterpreter faSharpnessInterpreter;
class FAWhiteBalanceInterpreter : public ChoiceInterpreter
class FAWhiteBalanceInterpreter : public ChoiceInterpreter<>
{
public:
FAWhiteBalanceInterpreter ()
@ -79,7 +79,7 @@ public:
};
FAWhiteBalanceInterpreter faWhiteBalanceInterpreter;
class FASaturationInterpreter : public ChoiceInterpreter
class FASaturationInterpreter : public ChoiceInterpreter<>
{
public:
FASaturationInterpreter ()
@ -104,7 +104,7 @@ public:
};
FASaturationInterpreter faSaturationInterpreter;
class FAContrastInterpreter : public ChoiceInterpreter
class FAContrastInterpreter : public ChoiceInterpreter<>
{
public:
FAContrastInterpreter ()
@ -119,7 +119,7 @@ public:
};
FAContrastInterpreter faContrastInterpreter;
class FAContrast2Interpreter : public ChoiceInterpreter
class FAContrast2Interpreter : public ChoiceInterpreter<>
{
public:
FAContrast2Interpreter ()
@ -131,7 +131,7 @@ public:
};
FAContrast2Interpreter faContrast2Interpreter;
class FANoiseReductionInterpreter : public ChoiceInterpreter
class FANoiseReductionInterpreter : public ChoiceInterpreter<>
{
public:
FANoiseReductionInterpreter ()
@ -143,7 +143,7 @@ public:
};
FANoiseReductionInterpreter faNoiseReductionInterpreter;
class FAFlashInterpreter : public ChoiceInterpreter
class FAFlashInterpreter : public ChoiceInterpreter<>
{
public:
// FujiFlashMode
@ -158,7 +158,7 @@ public:
};
FAFlashInterpreter faFlashInterpreter;
class FAFocusModeInterpreter : public ChoiceInterpreter
class FAFocusModeInterpreter : public ChoiceInterpreter<>
{
public:
FAFocusModeInterpreter ()
@ -169,7 +169,7 @@ public:
};
FAFocusModeInterpreter faFocusModeInterpreter;
class FAColorModeInterpreter : public ChoiceInterpreter
class FAColorModeInterpreter : public ChoiceInterpreter<>
{
public:
FAColorModeInterpreter ()
@ -181,7 +181,7 @@ public:
};
FAColorModeInterpreter faColorModeInterpreter;
class FADynamicRangeInterpreter : public ChoiceInterpreter
class FADynamicRangeInterpreter : public ChoiceInterpreter<>
{
public:
FADynamicRangeInterpreter ()
@ -192,7 +192,7 @@ public:
};
FADynamicRangeInterpreter faDynamicRangeInterpreter;
class FAFilmModeInterpreter : public ChoiceInterpreter
class FAFilmModeInterpreter : public ChoiceInterpreter<>
{
public:
FAFilmModeInterpreter ()
@ -212,7 +212,7 @@ public:
};
FAFilmModeInterpreter faFilmModeInterpreter;
class FADRSettingInterpreter : public ChoiceInterpreter
class FADRSettingInterpreter : public ChoiceInterpreter<>
{
public:
// DynamicRangeSetting
@ -228,7 +228,7 @@ public:
};
FADRSettingInterpreter faDRSettingInterpreter;
class FAPictureModeInterpreter : public ChoiceInterpreter
class FAPictureModeInterpreter : public ChoiceInterpreter<>
{
public:
FAPictureModeInterpreter ()

View File

@ -155,7 +155,7 @@ public:
};
NALensTypeInterpreter naLensTypeInterpreter;
class NAFlashModeInterpreter : public ChoiceInterpreter
class NAFlashModeInterpreter : public ChoiceInterpreter<>
{
public:
NAFlashModeInterpreter ()
@ -170,7 +170,7 @@ public:
};
NAFlashModeInterpreter naFlashModeInterpreter;
class NAHiISONRInterpreter : public ChoiceInterpreter
class NAHiISONRInterpreter : public ChoiceInterpreter<>
{
public:
// HighISONoiseReduction
@ -999,6 +999,7 @@ const std::map<std::string, std::string> NALensDataInterpreter::lenses = {
{"A1 40 18 37 2C 34 A3 06", "AF-S DX Nikkor 10-24mm f/3.5-4.5G ED"},
{"A1 41 19 31 2C 2C 4B 06", "Sigma 10-20mm f/3.5 EX DC HSM"},
{"A1 54 55 55 0C 0C BC 06", "AF-S Nikkor 58mm f/1.4G"},
{"A2 38 5C 8E 34 40 CD 86", "AF-P DX Nikkor 70-300mm f/4.5-6.3G VR"},
{"A2 40 2D 53 2C 3C BD 0E", "AF-S DX Nikkor 18-55mm f/3.5-5.6G VR II"},
{"A2 48 5C 80 24 24 A4 0E", "AF-S Nikkor 70-200mm f/2.8G ED VR II"},
{"A3 38 5C 8E 34 40 CE 0E", "AF-P DX Nikkor 70-300mm f/4.5-6.3G ED"},
@ -1075,11 +1076,13 @@ const std::map<std::string, std::string> NALensDataInterpreter::lenses = {
{"C8 54 62 62 0C 0C 4B 46", "Sigma 85mm f/1.4 DG HSM | A"},
{"C9 48 37 5C 24 24 4B 4E", "Sigma 24-70mm f/2.8 DG OS HSM | A"},
{"CA 48 27 3E 24 24 DF 4E", "Tamron SP 15-30mm f/2.8 Di VC USD G2 (A041)"},
{"CB 3C 2B 44 24 31 DF 46", "Tamron 17-35mm f/2.8-4 Di OSD (A037)"},
{"CC 4C 50 68 14 14 4B 06", "Sigma 50-100mm f/1.8 DC HSM | A"},
{"CD 3D 2D 70 2E 3C 4B 0E", "Sigma 18-125mm f/3.8-5.6 DC OS HSM"},
{"CE 34 76 A0 38 40 4B 0E", "Sigma 150-500mm f/5-6.3 DG OS APO HSM"},
{"CE 47 37 5C 25 25 DF 4E", "Tamron SP 24-70mm f/2.8 Di VC USD G2 (A032)"},
{"CF 38 6E 98 34 3C 4B 0E", "Sigma APO 120-400mm f/4.5-5.6 DG OS HSM"},
{"CF 47 5C 8E 31 3D DF 0E", "Tamron SP 70-300mm f/4-5.6 Di VC USD (A030)"},
{"DC 48 19 19 24 24 4B 06", "Sigma 10mm f/2.8 EX DC HSM Fisheye"},
{"DE 54 50 50 0C 0C 4B 06", "Sigma 50mm f/1.4 EX DG HSM"},
{"E0 3C 5C 8E 30 3C 4B 06", "Sigma 70-300mm f/4-5.6 APO DG Macro HSM"},

View File

@ -214,7 +214,7 @@ public:
};
OLLensTypeInterpreter olLensTypeInterpreter;
class OLFlashTypeInterpreter : public ChoiceInterpreter
class OLFlashTypeInterpreter : public ChoiceInterpreter<>
{
public:
OLFlashTypeInterpreter ()
@ -226,7 +226,7 @@ public:
};
OLFlashTypeInterpreter olFlashTypeInterpreter;
class OLExposureModeInterpreter : public ChoiceInterpreter
class OLExposureModeInterpreter : public ChoiceInterpreter<>
{
public:
OLExposureModeInterpreter ()
@ -240,7 +240,7 @@ public:
};
OLExposureModeInterpreter olExposureModeInterpreter;
class OLMeteringModeInterpreter : public ChoiceInterpreter
class OLMeteringModeInterpreter : public ChoiceInterpreter<>
{
public:
OLMeteringModeInterpreter ()
@ -255,7 +255,7 @@ public:
};
OLMeteringModeInterpreter olMeteringModeInterpreter;
class OLFocusModeInterpreter : public ChoiceInterpreter
class OLFocusModeInterpreter : public ChoiceInterpreter<>
{
public:
OLFocusModeInterpreter ()
@ -270,7 +270,7 @@ public:
};
OLFocusModeInterpreter olFocusModeInterpreter;
class OLWhitebalance2Interpreter : public ChoiceInterpreter
class OLWhitebalance2Interpreter : public ChoiceInterpreter<>
{
public:
OLWhitebalance2Interpreter ()
@ -302,7 +302,7 @@ public:
};
OLWhitebalance2Interpreter olWhitebalance2Interpreter;
class OLSceneModeInterpreter : public ChoiceInterpreter
class OLSceneModeInterpreter : public ChoiceInterpreter<>
{
public:
OLSceneModeInterpreter ()
@ -368,7 +368,7 @@ public:
};
OLSceneModeInterpreter olSceneModeInterpreter;
class OLPictureModeBWFilterInterpreter : public ChoiceInterpreter
class OLPictureModeBWFilterInterpreter : public ChoiceInterpreter<>
{
public:
OLPictureModeBWFilterInterpreter ()
@ -383,7 +383,7 @@ public:
};
OLPictureModeBWFilterInterpreter olPictureModeBWFilterInterpreter;
class OLPictureModeToneInterpreter : public ChoiceInterpreter
class OLPictureModeToneInterpreter : public ChoiceInterpreter<>
{
public:
OLPictureModeToneInterpreter ()
@ -398,7 +398,7 @@ public:
};
OLPictureModeToneInterpreter olPictureModeToneInterpreter;
class OLImageQuality2Interpreter : public ChoiceInterpreter
class OLImageQuality2Interpreter : public ChoiceInterpreter<>
{
public:
OLImageQuality2Interpreter ()
@ -412,7 +412,7 @@ public:
};
OLImageQuality2Interpreter olImageQuality2Interpreter;
class OLDevEngineInterpreter : public ChoiceInterpreter
class OLDevEngineInterpreter : public ChoiceInterpreter<>
{
public:
// RawDevEngine
@ -426,7 +426,7 @@ public:
};
OLDevEngineInterpreter olDevEngineInterpreter;
class OLPictureModeInterpreter : public ChoiceInterpreter
class OLPictureModeInterpreter : public ChoiceInterpreter<>
{
public:
OLPictureModeInterpreter ()
@ -449,7 +449,7 @@ public:
};
OLPictureModeInterpreter olPictureModeInterpreter;
class OLColorSpaceInterpreter : public ChoiceInterpreter
class OLColorSpaceInterpreter : public ChoiceInterpreter<>
{
public:
OLColorSpaceInterpreter ()
@ -522,7 +522,7 @@ public:
};
OLNoiseReductionInterpreter olNoiseReductionInterpreter;
class OLFlashModelInterpreter : public ChoiceInterpreter
class OLFlashModelInterpreter : public ChoiceInterpreter<>
{
public:
OLFlashModelInterpreter ()

View File

@ -31,7 +31,7 @@ namespace rtexif
{
class PAQualityInterpreter : public ChoiceInterpreter
class PAQualityInterpreter : public ChoiceInterpreter<>
{
public:
PAQualityInterpreter ()
@ -50,7 +50,7 @@ public:
};
PAQualityInterpreter paQualityInterpreter;
class PAOnOffInterpreter : public ChoiceInterpreter
class PAOnOffInterpreter : public ChoiceInterpreter<>
{
public:
PAOnOffInterpreter ()
@ -61,7 +61,7 @@ public:
};
PAOnOffInterpreter paOnOffInterpreter;
class PAShakeReductionInterpreter : public ChoiceInterpreter
class PAShakeReductionInterpreter : public ChoiceInterpreter<>
{
public:
PAShakeReductionInterpreter ()
@ -80,7 +80,7 @@ public:
};
PAShakeReductionInterpreter paShakeReductionInterpreter;
class PAShakeReduction2Interpreter : public ChoiceInterpreter
class PAShakeReduction2Interpreter : public ChoiceInterpreter<>
{
public:
// ShakeReduction
@ -100,7 +100,7 @@ public:
};
PAShakeReduction2Interpreter paShakeReduction2Interpreter;
class PAPictureModeInterpreter : public ChoiceInterpreter
class PAPictureModeInterpreter : public ChoiceInterpreter<>
{
public:
PAPictureModeInterpreter ()
@ -164,7 +164,7 @@ public:
};
PAPictureModeInterpreter paPictureModeInterpreter;
class PASceneModeInterpreter : public ChoiceInterpreter
class PASceneModeInterpreter : public ChoiceInterpreter<>
{
public:
PASceneModeInterpreter ()
@ -196,7 +196,7 @@ public:
};
PASceneModeInterpreter paSceneModeInterpreter;
class PAAEProgramModeInterpreter : public ChoiceInterpreter
class PAAEProgramModeInterpreter : public ChoiceInterpreter<>
{
public:
PAAEProgramModeInterpreter ()
@ -235,7 +235,7 @@ public:
};
PAAEProgramModeInterpreter paAEProgramModeInterpreter;
class PAFlashModeInterpreter : public ChoiceInterpreter
class PAFlashModeInterpreter : public ChoiceInterpreter<>
{
public:
PAFlashModeInterpreter ()
@ -259,7 +259,7 @@ public:
};
PAFlashModeInterpreter paFlashModeInterpreter;
class PAFocusModeInterpreter : public ChoiceInterpreter
class PAFocusModeInterpreter : public ChoiceInterpreter<>
{
public:
PAFocusModeInterpreter ()
@ -283,7 +283,7 @@ public:
};
PAFocusModeInterpreter paFocusModeInterpreter;
class PAAFPointInterpreter : public ChoiceInterpreter
class PAAFPointInterpreter : public ChoiceInterpreter<>
{
public:
// AFPointSelected
@ -310,7 +310,7 @@ public:
};
PAAFPointInterpreter paAFPointInterpreter;
class PAAFFocusInterpreter : public ChoiceInterpreter
class PAAFFocusInterpreter : public ChoiceInterpreter<>
{
public:
// AFPointsInFocus
@ -331,7 +331,7 @@ public:
};
PAAFFocusInterpreter paAFFocusInterpreter;
class PAISOInterpreter : public ChoiceInterpreter
class PAISOInterpreter : public ChoiceInterpreter<>
{
public:
PAISOInterpreter ()
@ -430,7 +430,7 @@ public:
};
PAFNumberInterpreter paFNumberInterpreter;
class PAMeteringModeInterpreter : public ChoiceInterpreter
class PAMeteringModeInterpreter : public ChoiceInterpreter<>
{
public:
PAMeteringModeInterpreter ()
@ -442,7 +442,7 @@ public:
};
PAMeteringModeInterpreter paMeteringModeInterpreter;
class PAWhiteBalanceInterpreter : public ChoiceInterpreter
class PAWhiteBalanceInterpreter : public ChoiceInterpreter<>
{
public:
PAWhiteBalanceInterpreter ()
@ -468,7 +468,7 @@ public:
};
PAWhiteBalanceInterpreter paWhiteBalanceInterpreter;
class PAWhiteBalanceModeInterpreter : public ChoiceInterpreter
class PAWhiteBalanceModeInterpreter : public ChoiceInterpreter<>
{
public:
PAWhiteBalanceModeInterpreter ()
@ -487,7 +487,7 @@ public:
};
PAWhiteBalanceModeInterpreter paWhiteBalanceModeInterpreter;
class PASaturationInterpreter : public ChoiceInterpreter
class PASaturationInterpreter : public ChoiceInterpreter<>
{
public:
PASaturationInterpreter ()
@ -506,7 +506,7 @@ public:
};
PASaturationInterpreter paSaturationInterpreter;
class PAContrastInterpreter : public ChoiceInterpreter
class PAContrastInterpreter : public ChoiceInterpreter<>
{
public:
PAContrastInterpreter ()
@ -525,7 +525,7 @@ public:
};
PAContrastInterpreter paContrastInterpreter;
class PASharpnessInterpreter : public ChoiceInterpreter
class PASharpnessInterpreter : public ChoiceInterpreter<>
{
public:
PASharpnessInterpreter ()
@ -543,7 +543,7 @@ public:
};
PASharpnessInterpreter paSharpnessInterpreter;
class PAPictureModeInterpreter2: public ChoiceInterpreter
class PAPictureModeInterpreter2: public ChoiceInterpreter<>
{
public:
PAPictureModeInterpreter2()
@ -613,7 +613,7 @@ public:
std::string toString (Tag* t) override
{
int c = 256 * t->toInt (0, BYTE) + t->toInt (1, BYTE);
std::map<int, std::string>::iterator r = choices.find (c);
const ChoicesIterator r = choices.find (c);
if (r != choices.end()) {
std::ostringstream s;
@ -635,7 +635,7 @@ public:
};
PAPictureModeInterpreter2 paPictureModeInterpreter2;
class PADriveModeInterpreter : public ChoiceInterpreter
class PADriveModeInterpreter : public ChoiceInterpreter<>
{
std::map<int, std::string> choices1;
std::map<int, std::string> choices2;
@ -671,7 +671,7 @@ public:
}
std::string toString (Tag* t) override
{
std::map<int, std::string>::iterator r = choices.find (t->toInt (0, BYTE));
const ChoicesIterator r = choices.find (t->toInt (0, BYTE));
std::map<int, std::string>::iterator r1 = choices1.find (t->toInt (1, BYTE));
std::map<int, std::string>::iterator r2 = choices2.find (t->toInt (2, BYTE));
std::map<int, std::string>::iterator r3 = choices3.find (t->toInt (3, BYTE));
@ -685,7 +685,7 @@ public:
};
PADriveModeInterpreter paDriveModeInterpreter;
class PAColorSpaceInterpreter: public ChoiceInterpreter
class PAColorSpaceInterpreter: public ChoiceInterpreter<>
{
public:
PAColorSpaceInterpreter()
@ -1079,7 +1079,7 @@ public:
};
PASRResultInterpreter paSRResultInterpreter;
class PAHighISONoiseInterpreter: public ChoiceInterpreter
class PAHighISONoiseInterpreter: public ChoiceInterpreter<>
{
public:
// HighISONoiseReduction
@ -1095,7 +1095,7 @@ public:
};
PAHighISONoiseInterpreter paHighISONoiseInterpreter;
class PAMonochromeFilterEffectInterpreter: public ChoiceInterpreter
class PAMonochromeFilterEffectInterpreter: public ChoiceInterpreter<>
{
public:
PAMonochromeFilterEffectInterpreter()
@ -1113,7 +1113,7 @@ public:
};
PAMonochromeFilterEffectInterpreter paMonochromeFilterEffectInterpreter;
class PAMonochromeToningInterpreter: public ChoiceInterpreter
class PAMonochromeToningInterpreter: public ChoiceInterpreter<>
{
public:
PAMonochromeToningInterpreter()
@ -1132,7 +1132,7 @@ public:
};
PAMonochromeToningInterpreter paMonochromeToningInterpreter;
class PAShadowCorrectionInterpreter: public ChoiceInterpreter
class PAShadowCorrectionInterpreter: public ChoiceInterpreter<>
{
public:
PAShadowCorrectionInterpreter()
@ -1156,7 +1156,7 @@ public:
idx = t->toInt (0, BYTE) << 8 | t->toInt (1, BYTE);
}
std::map<int, std::string>::iterator r = choices.find (idx);
const ChoicesIterator r = choices.find (idx);
std::ostringstream s;
s << ((r != choices.end()) ? r->second : "n/a");
return s.str();
@ -1164,7 +1164,7 @@ public:
};
PAShadowCorrectionInterpreter paShadowCorrectionInterpreter;
class PAISOAutoParametersInterpreter: public ChoiceInterpreter
class PAISOAutoParametersInterpreter: public ChoiceInterpreter<>
{
public:
PAISOAutoParametersInterpreter()
@ -1175,7 +1175,7 @@ public:
}
std::string toString (Tag* t) override
{
std::map<int, std::string>::iterator r = choices.find (t->toInt (0, BYTE));
const ChoicesIterator r = choices.find (t->toInt (0, BYTE));
std::ostringstream s;
s << ((r != choices.end()) ? r->second : "n/a");
return s.str();
@ -1183,7 +1183,7 @@ public:
};
PAISOAutoParametersInterpreter paISOAutoParametersInterpreter;
class PABleachBypassToningInterpreter: public ChoiceInterpreter
class PABleachBypassToningInterpreter: public ChoiceInterpreter<>
{
public:
PABleachBypassToningInterpreter()
@ -1201,7 +1201,7 @@ public:
};
PABleachBypassToningInterpreter paBleachBypassToningInterpreter;
class PABlurControlInterpreter: public ChoiceInterpreter
class PABlurControlInterpreter: public ChoiceInterpreter<>
{
public:
PABlurControlInterpreter()
@ -1213,7 +1213,7 @@ public:
}
std::string toString (Tag* t) override
{
std::map<int, std::string>::iterator r = choices.find (t->toInt (0, BYTE));
const ChoicesIterator r = choices.find (t->toInt (0, BYTE));
std::ostringstream s;
s << ((r != choices.end()) ? r->second : "n/a");
return s.str();
@ -1221,7 +1221,7 @@ public:
};
PABlurControlInterpreter paBlurControlInterpreter;
class PAHDRInterpreter: public ChoiceInterpreter
class PAHDRInterpreter: public ChoiceInterpreter<>
{
std::map<int, std::string> choices1;
std::map<int, std::string> choices2;
@ -1245,7 +1245,7 @@ public:
}
std::string toString (Tag* t) override
{
std::map<int, std::string>::iterator r = choices.find (t->toInt (0, BYTE));
const ChoicesIterator r = choices.find (t->toInt (0, BYTE));
std::map<int, std::string>::iterator r1 = choices1.find (t->toInt (1, BYTE));
std::map<int, std::string>::iterator r2 = choices2.find (t->toInt (2, BYTE));
std::ostringstream s;
@ -1257,7 +1257,7 @@ public:
};
PAHDRInterpreter paHDRInterpreter;
class PACrossProcessInterpreter: public ChoiceInterpreter
class PACrossProcessInterpreter: public ChoiceInterpreter<>
{
public:
PACrossProcessInterpreter()
@ -1274,7 +1274,7 @@ public:
};
PACrossProcessInterpreter paCrossProcessInterpreter;
class PAPowerSourceInterpreter: public ChoiceInterpreter
class PAPowerSourceInterpreter: public ChoiceInterpreter<>
{
public:
PAPowerSourceInterpreter()
@ -1592,7 +1592,7 @@ public:
};
PANominalMaxApertureInterpreter paNominalMaxApertureInterpreter;
class PAFlashStatusInterpreter: public ChoiceInterpreter
class PAFlashStatusInterpreter: public ChoiceInterpreter<>
{
public:
PAFlashStatusInterpreter()
@ -1608,7 +1608,7 @@ public:
};
PAFlashStatusInterpreter paFlashStatusInterpreter;
class PAInternalFlashModeInterpreter: public ChoiceInterpreter
class PAInternalFlashModeInterpreter: public ChoiceInterpreter<>
{
public:
PAInternalFlashModeInterpreter()
@ -1638,7 +1638,7 @@ public:
};
PAInternalFlashModeInterpreter paInternalFlashModeInterpreter;
class PAExternalFlashModeInterpreter: public ChoiceInterpreter
class PAExternalFlashModeInterpreter: public ChoiceInterpreter<>
{
public:
PAExternalFlashModeInterpreter()
@ -1658,7 +1658,7 @@ public:
};
PAExternalFlashModeInterpreter paExternalFlashModeInterpreter;
class PAExternalFlashExposureCompInterpreter: public ChoiceInterpreter
class PAExternalFlashExposureCompInterpreter: public ChoiceInterpreter<>
{
public:
PAExternalFlashExposureCompInterpreter()
@ -1678,7 +1678,7 @@ public:
};
PAExternalFlashExposureCompInterpreter paExternalFlashExposureCompInterpreter;
class PAExternalFlashBounceInterpreter: public ChoiceInterpreter
class PAExternalFlashBounceInterpreter: public ChoiceInterpreter<>
{
public:
PAExternalFlashBounceInterpreter()
@ -1761,7 +1761,7 @@ public:
};
PAApertureRingUseInterpreter paApertureRingUseInterpreter;
class PAFlashOptionInterpreter: public ChoiceInterpreter
class PAFlashOptionInterpreter: public ChoiceInterpreter<>
{
public:
PAFlashOptionInterpreter()
@ -1778,7 +1778,7 @@ public:
}
std::string toString (Tag* t) override
{
std::map<int, std::string>::iterator r = choices.find (t->toInt (0, BYTE) >> 4);
const ChoicesIterator r = choices.find (t->toInt (0, BYTE) >> 4);
if (r != choices.end()) {
return r->second;
@ -1813,7 +1813,7 @@ public:
};
PAMeteringMode2Interpreter paMeteringMode2Interpreter;
class PAExposureBracketStepSizeInterpreter: public ChoiceInterpreter
class PAExposureBracketStepSizeInterpreter: public ChoiceInterpreter<>
{
public:
PAExposureBracketStepSizeInterpreter()
@ -1830,7 +1830,7 @@ public:
};
PAExposureBracketStepSizeInterpreter paExposureBracketStepSizeInterpreter;
class PAPictureMode2Interpreter: public ChoiceInterpreter
class PAPictureMode2Interpreter: public ChoiceInterpreter<>
{
public:
PAPictureMode2Interpreter()

View File

@ -19,15 +19,16 @@
#ifndef _MEXIF3_
#define _MEXIF3_
#include <cstdio>
#include <vector>
#include <map>
#include <string>
#include <sstream>
#include <iomanip>
#include <cstdlib>
#include <cmath>
#include <cstdint>
#include <cstdio>
#include <cstdlib>
#include <iomanip>
#include <map>
#include <memory>
#include <sstream>
#include <string>
#include <vector>
#include <glibmm.h>
@ -482,22 +483,26 @@ public:
};
extern Interpreter stdInterpreter;
template<typename T = std::uint32_t>
class ChoiceInterpreter : public Interpreter
{
protected:
std::map<int, std::string> choices;
using Choices = std::map<T, std::string>;
using ChoicesIterator = typename Choices::const_iterator;
Choices choices;
public:
ChoiceInterpreter () {};
std::string toString (Tag* t) override
{
std::map<int, std::string>::iterator r = choices.find (t->toInt());
const typename std::map<T, std::string>::const_iterator r = choices.find(t->toInt());
if (r != choices.end()) {
return r->second;
} else {
char buffer[1024];
t->toString(buffer);
return std::string (buffer);
return buffer;
}
}
};

View File

@ -25,7 +25,7 @@
namespace rtexif
{
class SANoYesInterpreter : public ChoiceInterpreter
class SANoYesInterpreter : public ChoiceInterpreter<>
{
public:
SANoYesInterpreter ()
@ -36,7 +36,7 @@ public:
};
SANoYesInterpreter saNoYesInterpreter;
class SAOnOffInterpreter : public ChoiceInterpreter
class SAOnOffInterpreter : public ChoiceInterpreter<>
{
public:
SAOnOffInterpreter ()
@ -48,7 +48,7 @@ public:
};
SAOnOffInterpreter saOnOffInterpreter;
class SAOnOffInterpreter2 : public ChoiceInterpreter
class SAOnOffInterpreter2 : public ChoiceInterpreter<>
{
public:
SAOnOffInterpreter2 ()
@ -59,7 +59,7 @@ public:
};
SAOnOffInterpreter2 saOnOffInterpreter2;
class SAOnOffInterpreter3 : public ChoiceInterpreter
class SAOnOffInterpreter3 : public ChoiceInterpreter<>
{
public:
SAOnOffInterpreter3 ()
@ -71,7 +71,7 @@ public:
};
SAOnOffInterpreter3 saOnOffInterpreter3;
class SAOnOffInterpreter4 : public ChoiceInterpreter
class SAOnOffInterpreter4 : public ChoiceInterpreter<>
{
public:
SAOnOffInterpreter4 ()
@ -84,7 +84,7 @@ public:
};
SAOnOffInterpreter4 saOnOffInterpreter4;
class SAOnOffInterpreter5 : public ChoiceInterpreter
class SAOnOffInterpreter5 : public ChoiceInterpreter<>
{
public:
SAOnOffInterpreter5 ()
@ -95,7 +95,7 @@ public:
};
SAOnOffInterpreter5 saOnOffInterpreter5;
class SAHighISONoiseReduction : public ChoiceInterpreter
class SAHighISONoiseReduction : public ChoiceInterpreter<>
{
public:
SAHighISONoiseReduction ()
@ -110,7 +110,7 @@ public:
};
SAHighISONoiseReduction saHighISONoiseReduction;
class SAHighISONoiseReduction2 : public ChoiceInterpreter
class SAHighISONoiseReduction2 : public ChoiceInterpreter<>
{
public:
SAHighISONoiseReduction2 ()
@ -124,7 +124,7 @@ public:
};
SAHighISONoiseReduction2 saHighISONoiseReduction2;
class SAHighISONoiseReduction3 : public ChoiceInterpreter
class SAHighISONoiseReduction3 : public ChoiceInterpreter<>
{
public:
SAHighISONoiseReduction3 ()
@ -137,7 +137,7 @@ public:
};
SAHighISONoiseReduction3 saHighISONoiseReduction3;
class SAHighISONoiseReduction4 : public ChoiceInterpreter
class SAHighISONoiseReduction4 : public ChoiceInterpreter<>
{
public:
SAHighISONoiseReduction4 ()
@ -150,7 +150,7 @@ public:
};
SAHighISONoiseReduction4 saHighISONoiseReduction4;
class SAHighISONoiseReduction5 : public ChoiceInterpreter
class SAHighISONoiseReduction5 : public ChoiceInterpreter<>
{
public:
SAHighISONoiseReduction5 ()
@ -161,7 +161,7 @@ public:
};
SAHighISONoiseReduction5 saHighISONoiseReduction5;
class SASmileShutterMode : public ChoiceInterpreter
class SASmileShutterMode : public ChoiceInterpreter<>
{
public:
SASmileShutterMode ()
@ -173,7 +173,7 @@ public:
};
SASmileShutterMode saSmileShutterMode;
class SAHDRLevel : public ChoiceInterpreter
class SAHDRLevel : public ChoiceInterpreter<>
{
public:
SAHDRLevel ()
@ -191,7 +191,7 @@ public:
};
SAHDRLevel saHDRLevel;
class SAViewingMode : public ChoiceInterpreter
class SAViewingMode : public ChoiceInterpreter<>
{
public:
SAViewingMode ()
@ -204,7 +204,7 @@ public:
};
SAViewingMode saViewingMode;
class SAFlashAction : public ChoiceInterpreter
class SAFlashAction : public ChoiceInterpreter<>
{
public:
SAFlashAction ()
@ -215,7 +215,7 @@ public:
};
SAFlashAction saFlashAction;
class SALiveViewFocusMode : public ChoiceInterpreter
class SALiveViewFocusMode : public ChoiceInterpreter<>
{
public:
SALiveViewFocusMode ()
@ -227,7 +227,7 @@ public:
};
SALiveViewFocusMode saLiveViewFocusMode;
class SALensMount : public ChoiceInterpreter
class SALensMount : public ChoiceInterpreter<>
{
public:
SALensMount ()
@ -239,7 +239,7 @@ public:
};
SALensMount saLensMount;
class SASweepPanoramaSize : public ChoiceInterpreter
class SASweepPanoramaSize : public ChoiceInterpreter<>
{
public:
SASweepPanoramaSize ()
@ -250,7 +250,7 @@ public:
};
SASweepPanoramaSize saSweepPanoramaSize;
class SASweepPanoramaDirection : public ChoiceInterpreter
class SASweepPanoramaDirection : public ChoiceInterpreter<>
{
public:
SASweepPanoramaDirection ()
@ -263,7 +263,7 @@ public:
};
SASweepPanoramaDirection saSweepPanoramaDirection;
class SALiveViewAFSetting : public ChoiceInterpreter
class SALiveViewAFSetting : public ChoiceInterpreter<>
{
public:
SALiveViewAFSetting ()
@ -275,7 +275,7 @@ public:
};
SALiveViewAFSetting saLiveViewAFSetting;
class SAPanoramaSize3D : public ChoiceInterpreter
class SAPanoramaSize3D : public ChoiceInterpreter<>
{
public:
SAPanoramaSize3D ()
@ -288,7 +288,7 @@ public:
};
SAPanoramaSize3D saPanoramaSize3D;
class SALiveViewMetering : public ChoiceInterpreter
class SALiveViewMetering : public ChoiceInterpreter<>
{
public:
SALiveViewMetering ()
@ -300,7 +300,7 @@ public:
};
SALiveViewMetering saLiveViewMetering;
class SAWhiteBalanceInterpreter: public ChoiceInterpreter
class SAWhiteBalanceInterpreter: public ChoiceInterpreter<>
{
public:
SAWhiteBalanceInterpreter()
@ -319,7 +319,7 @@ public:
};
SAWhiteBalanceInterpreter saWhiteBalanceInterpreter;
class SAWhiteBalanceSettingInterpreter: public ChoiceInterpreter
class SAWhiteBalanceSettingInterpreter: public ChoiceInterpreter<>
{
public:
SAWhiteBalanceSettingInterpreter()
@ -379,7 +379,7 @@ public:
};
SAWhiteBalanceSettingInterpreter saWhiteBalanceSettingInterpreter;
class SASceneModeInterpreter : public ChoiceInterpreter
class SASceneModeInterpreter : public ChoiceInterpreter<>
{
public:
SASceneModeInterpreter ()
@ -413,7 +413,7 @@ public:
};
SASceneModeInterpreter saSceneModeInterpreter;
class SAZoneMatchingInterpreter : public ChoiceInterpreter
class SAZoneMatchingInterpreter : public ChoiceInterpreter<>
{
public:
SAZoneMatchingInterpreter ()
@ -425,7 +425,7 @@ public:
};
SAZoneMatchingInterpreter saZoneMatchingInterpreter;
class SADynamicRangeOptimizerInterpreter : public ChoiceInterpreter
class SADynamicRangeOptimizerInterpreter : public ChoiceInterpreter<>
{
public:
SADynamicRangeOptimizerInterpreter ()
@ -448,7 +448,7 @@ public:
};
SADynamicRangeOptimizerInterpreter saDynamicRangeOptimizerInterpreter;
class SAColorModeInterpreter : public ChoiceInterpreter
class SAColorModeInterpreter : public ChoiceInterpreter<>
{
public:
SAColorModeInterpreter ()
@ -477,7 +477,7 @@ public:
};
SAColorModeInterpreter saColorModeInterpreter;
class SAExposureModeInterpreter : public ChoiceInterpreter
class SAExposureModeInterpreter : public ChoiceInterpreter<>
{
public:
SAExposureModeInterpreter ()
@ -517,7 +517,7 @@ public:
};
SAExposureModeInterpreter saExposureModeInterpreter;
class SAQualityInterpreter : public ChoiceInterpreter
class SAQualityInterpreter : public ChoiceInterpreter<>
{
public:
SAQualityInterpreter ()
@ -528,7 +528,7 @@ public:
};
SAQualityInterpreter saQualityInterpreter;
class SAAntiBlurInterpreter : public ChoiceInterpreter
class SAAntiBlurInterpreter : public ChoiceInterpreter<>
{
public:
SAAntiBlurInterpreter ()
@ -895,6 +895,9 @@ public:
{6553, "Sigma 30mm f/1.4 DC DN | C"},
{6553, "Sigma 85mm f/1.4 DG HSM | A"},
{6553, "Sigma 16mm f/1.4 DC DN | C"},
{6553, "Sigma 105mm f/1.4 DG HSM | A"},
{6553, "Sigma 56mm f/1.4 DC DN | C"},
{6553, "Sigma 70-200mm f/2.8 DG OS HSM | S"},
{6553, "Sigma 70mm f/2.8 DG MACRO | A"},
{6553, "Tamron 18-200mm f/3.5-6.3 Di III VC"},
{6553, "Tamron 28-75mm f/2.8 Di III RXD"},
@ -905,6 +908,7 @@ public:
{6553, "Voigtlander MACRO APO-LANTHAR 65mm f/2 Aspherical"},
{6553, "Voigtlander NOKTON 40mm f/1.2 Aspherical"},
{6553, "Voigtlander NOKTON classic 35mm f/1.4"},
{6553, "Voigtlander MACRO APO-LANTHAR 110mm f/2.5"},
{6553, "Voigtlander COLOR-SKOPAR 21mm f/3.5 Aspherical"},
{6553, "Zeiss Touit 12mm f/2.8"},
{6553, "Zeiss Touit 32mm f/1.8"},
@ -1116,6 +1120,9 @@ public:
{65535, "Sigma 30mm f/1.4 DC DN | C"},
{65535, "Sigma 85mm f/1.4 DG HSM | A"},
{65535, "Sigma 16mm f/1.4 DC DN | C"},
{65535, "Sigma 105mm f/1.4 DG HSM | A"},
{65535, "Sigma 56mm f/1.4 DC DN | C"},
{65535, "Sigma 70-200mm f/2.8 DG OS HSM | S"},
{65535, "Sigma 70mm f/2.8 DG MACRO | A"},
{65535, "Tamron 18-200mm f/3.5-6.3 Di III VC"},
{65535, "Tamron 28-75mm f/2.8 Di III RXD"},
@ -1126,6 +1133,7 @@ public:
{65535, "Voigtlander MACRO APO-LANTHAR 65mm f/2 Aspherical"},
{65535, "Voigtlander NOKTON 40mm f/1.2 Aspherical"},
{65535, "Voigtlander NOKTON classic 35mm f/1.4"},
{65535, "Voigtlander MACRO APO-LANTHAR 110mm f/2.5"},
{65535, "Voigtlander COLOR-SKOPAR 21mm f/3.5 Aspherical"},
{65535, "Zeiss Touit 12mm f/2.8"},
{65535, "Zeiss Touit 32mm f/1.8"},
@ -1146,7 +1154,7 @@ public:
{65535, "Samyang 500mm Mirror f/8.0"},
{65535, "Pentacon Auto 135mm f/2.8"},
{65535, "Pentacon Auto 29mm f/2.8"},
{65535, "Helios 44-2 58mm f/2.0"}
{65535, "Helios 44-2 58mm f/2.0"},
};
}
@ -1269,13 +1277,13 @@ public:
choices.insert (p_t (49236, "Zeiss Loxia 25mm f/2.4"));
choices.insert (p_t (49457, "Tamron 28-75mm f/2.8 Di III RXD"));
choices.insert (p_t (50480, "Sigma 30mm f/1.4 DC DN | C"));
choices.insert (p_t (50481, "Sigma 50mm f/1.4 DG HSM | A + MC-11"));
choices.insert (p_t (50481, "Sigma 50mm f/1.4 DG HSM | A"));
choices.insert (p_t (50482, "Sigma 18-300mm f/3.5-6.3 DC MACRO OS HSM | C + MC-11"));
choices.insert (p_t (50483, "Sigma 18-35mm f/1.8 DC HSM | A + MC-11"));
choices.insert (p_t (50484, "Sigma 24-35mm f/2 DG HSM | A + MC-11"));
choices.insert (p_t (50486, "Sigma 150-600mm f/5-6.3 DG OS HSM | C + MC-11"));
choices.insert (p_t (50487, "Sigma 20mm f/1.4 DG HSM | A + MC-11"));
choices.insert (p_t (50488, "Sigma 35mm f/1.4 DG HSM | A + MC-11"));
choices.insert (p_t (50488, "Sigma 35mm f/1.4 DG HSM | A"));
choices.insert (p_t (50489, "Sigma 150-600mm f/5-6.3 DG OS HSM | S + MC-11"));
choices.insert (p_t (50490, "Sigma 120-300mm f/2.8 DG OS HSM | S + MC-11"));
choices.insert (p_t (50492, "Sigma 24-105mm f/4 DG OS HSM | A + MC-11"));
@ -1284,6 +1292,9 @@ public:
choices.insert (p_t (50499, "Sigma 85mm f/1.4 DG HSM | A"));
choices.insert (p_t (50501, "Sigma 100-400mm f/5-6.3 DG OS HSM | C + MC-11"));
choices.insert (p_t (50503, "Sigma 16mm f/1.4 DC DN | C"));
choices.insert (p_t (50507, "Sigma 105mm f/1.4 DG HSM | A"));
choices.insert (p_t (50508, "Sigma 56mm f/1.4 DC DN | C"));
choices.insert (p_t (50512, "Sigma 70-200mm f/2.8 DG OS HSM | S"));
choices.insert (p_t (50513, "Sigma 70mm f/2.8 DG MACRO | A"));
choices.insert (p_t (50992, "Voigtlander SUPER WIDE-HELIAR 15mm f/4.5 III"));
choices.insert (p_t (50993, "Voigtlander HELIAR-HYPER WIDE 10mm f/5.6"));
@ -1291,6 +1302,7 @@ public:
choices.insert (p_t (50995, "Voigtlander MACRO APO-LANTHAR 65mm f/2 Aspherical"));
choices.insert (p_t (50996, "Voigtlander NOKTON 40mm f/1.2 Aspherical"));
choices.insert (p_t (50997, "Voigtlander NOKTON classic 35mm f/1.4"));
choices.insert (p_t (50998, "Voigtlander MACRO APO-LANTHAR 110mm f/2.5"));
choices.insert (p_t (50999, "Voigtlander COLOR-SKOPAR 21mm f/3.5 Aspherical"));
choices.insert (p_t (51505, "Samyang AF 14mm f/2.8 FE or Samyang AF 35mm f/2.8 FE"));
choices.insert (p_t (51505, "Samyang AF 35mm f/2.8 FE"));
@ -1331,7 +1343,7 @@ public:
};
SALensID2Interpreter saLensID2Interpreter;
class MATeleconverterInterpreter : public ChoiceInterpreter
class MATeleconverterInterpreter : public ChoiceInterpreter<>
{
public:
MATeleconverterInterpreter ()
@ -1349,7 +1361,7 @@ public:
};
MATeleconverterInterpreter maTeleconverterInterpreter;
class MAQualityInterpreter : public ChoiceInterpreter
class MAQualityInterpreter : public ChoiceInterpreter<>
{
public:
MAQualityInterpreter ()
@ -1367,7 +1379,7 @@ public:
};
MAQualityInterpreter maQualityInterpreter;
class MAImageSizeInterpreter : public ChoiceInterpreter
class MAImageSizeInterpreter : public ChoiceInterpreter<>
{
public:
MAImageSizeInterpreter ()
@ -1382,7 +1394,7 @@ public:
};
MAImageSizeInterpreter maImageSizeInterpreter;
class SAQualityInterpreter2 : public ChoiceInterpreter
class SAQualityInterpreter2 : public ChoiceInterpreter<>
{
public:
SAQualityInterpreter2 ()
@ -1398,7 +1410,7 @@ public:
};
SAQualityInterpreter2 saQualityInterpreter2;
class SAQualityInterpreter3 : public ChoiceInterpreter
class SAQualityInterpreter3 : public ChoiceInterpreter<>
{
public:
SAQualityInterpreter3 ()
@ -1411,7 +1423,7 @@ public:
};
SAQualityInterpreter3 saQualityInterpreter3;
class SADriveMode : public ChoiceInterpreter
class SADriveMode : public ChoiceInterpreter<>
{
public:
SADriveMode ()
@ -1433,7 +1445,7 @@ public:
};
SADriveMode saDriveMode;
class SADriveMode2 : public ChoiceInterpreter
class SADriveMode2 : public ChoiceInterpreter<>
{
public:
SADriveMode2 ()
@ -1449,7 +1461,7 @@ public:
};
SADriveMode2 saDriveMode2;
class SADriveMode3 : public ChoiceInterpreter
class SADriveMode3 : public ChoiceInterpreter<>
{
public:
SADriveMode3 ()
@ -1475,7 +1487,7 @@ public:
};
SADriveMode3 saDriveMode3;
class SAFocusMode: public ChoiceInterpreter
class SAFocusMode: public ChoiceInterpreter<>
{
public:
SAFocusMode ()
@ -1490,7 +1502,7 @@ public:
};
SAFocusMode saFocusMode;
class SAFocusMode2: public ChoiceInterpreter
class SAFocusMode2: public ChoiceInterpreter<>
{
public:
SAFocusMode2 ()
@ -1504,7 +1516,7 @@ public:
};
SAFocusMode2 saFocusMode2;
class SAFocusModeSetting3: public ChoiceInterpreter
class SAFocusModeSetting3: public ChoiceInterpreter<>
{
public:
SAFocusModeSetting3 ()
@ -1519,7 +1531,7 @@ public:
};
SAFocusModeSetting3 saFocusModeSetting3;
class SAAFMode: public ChoiceInterpreter
class SAAFMode: public ChoiceInterpreter<>
{
public:
SAAFMode()
@ -1537,7 +1549,7 @@ public:
};
SAAFMode saAFMode;
class SAAFAreaMode: public ChoiceInterpreter
class SAAFAreaMode: public ChoiceInterpreter<>
{
public:
SAAFAreaMode ()
@ -1549,7 +1561,7 @@ public:
};
SAAFAreaMode saAFAreaMode;
class SAAFAreaMode2: public ChoiceInterpreter
class SAAFAreaMode2: public ChoiceInterpreter<>
{
public:
SAAFAreaMode2 ()
@ -1562,7 +1574,7 @@ public:
};
SAAFAreaMode2 saAFAreaMode2;
class SAAFPointSelected: public ChoiceInterpreter
class SAAFPointSelected: public ChoiceInterpreter<>
{
public:
SAAFPointSelected ()
@ -1582,7 +1594,7 @@ public:
};
SAAFPointSelected saAFPointSelected;
class SACameraInfoAFPointSelected: public ChoiceInterpreter
class SACameraInfoAFPointSelected: public ChoiceInterpreter<>
{
public:
SACameraInfoAFPointSelected ()
@ -1607,7 +1619,7 @@ public:
};
SACameraInfoAFPointSelected saCameraInfoAFPointSelected;
class SACameraInfoAFPoint: public ChoiceInterpreter
class SACameraInfoAFPoint: public ChoiceInterpreter<>
{
public:
SACameraInfoAFPoint ()
@ -1635,7 +1647,7 @@ public:
};
SACameraInfoAFPoint saCameraInfoAFPoint;
class SAAFPointSelected2: public ChoiceInterpreter
class SAAFPointSelected2: public ChoiceInterpreter<>
{
public:
SAAFPointSelected2 ()
@ -1653,7 +1665,7 @@ public:
};
SAAFPointSelected2 saAFPointSelected2;
class SAMeteringMode0_3: public ChoiceInterpreter
class SAMeteringMode0_3: public ChoiceInterpreter<>
{
public:
SAMeteringMode0_3 ()
@ -1665,7 +1677,7 @@ public:
};
SAMeteringMode0_3 saMeteringMode0_3;
class SAMeteringMode1_3: public ChoiceInterpreter
class SAMeteringMode1_3: public ChoiceInterpreter<>
{
public:
SAMeteringMode1_3 ()
@ -1677,7 +1689,7 @@ public:
};
SAMeteringMode1_3 saMeteringMode1_3;
class SAMeteringMode1_4: public ChoiceInterpreter
class SAMeteringMode1_4: public ChoiceInterpreter<>
{
public:
SAMeteringMode1_4 ()
@ -1689,7 +1701,7 @@ public:
};
SAMeteringMode1_4 saMeteringMode1_4;
class SADynamicRangeOptimizerMode: public ChoiceInterpreter
class SADynamicRangeOptimizerMode: public ChoiceInterpreter<>
{
public:
SADynamicRangeOptimizerMode ()
@ -1703,7 +1715,7 @@ public:
};
SADynamicRangeOptimizerMode saDynamicRangeOptimizerMode;
class SADynamicRangeOptimizerSetting: public ChoiceInterpreter
class SADynamicRangeOptimizerSetting: public ChoiceInterpreter<>
{
public:
SADynamicRangeOptimizerSetting ()
@ -1715,7 +1727,7 @@ public:
};
SADynamicRangeOptimizerSetting saDynamicRangeOptimizerSetting;
class SACreativeStyle: public ChoiceInterpreter
class SACreativeStyle: public ChoiceInterpreter<>
{
public:
SACreativeStyle ()
@ -1738,7 +1750,7 @@ public:
};
SACreativeStyle saCreativeStyle;
class SACreativeStyle2: public ChoiceInterpreter
class SACreativeStyle2: public ChoiceInterpreter<>
{
public:
SACreativeStyle2 ()
@ -1754,7 +1766,7 @@ public:
};
SACreativeStyle2 saCreativeStyle2;
class SACreativeStyleSetting: public ChoiceInterpreter
class SACreativeStyleSetting: public ChoiceInterpreter<>
{
public:
SACreativeStyleSetting ()
@ -1769,7 +1781,7 @@ public:
};
SACreativeStyleSetting saCreativeStyleSetting;
class SAFlashControl: public ChoiceInterpreter
class SAFlashControl: public ChoiceInterpreter<>
{
public:
SAFlashControl ()
@ -1780,7 +1792,7 @@ public:
};
SAFlashControl saFlashControl;
class SAFlashMode: public ChoiceInterpreter
class SAFlashMode: public ChoiceInterpreter<>
{
public:
SAFlashMode ()
@ -1791,7 +1803,7 @@ public:
};
SAFlashMode saFlashMode;
class SAFlashMode2: public ChoiceInterpreter
class SAFlashMode2: public ChoiceInterpreter<>
{
public:
SAFlashMode2 ()
@ -1806,7 +1818,7 @@ public:
};
SAFlashMode2 saFlashMode2;
class SAExposureProgram: public ChoiceInterpreter
class SAExposureProgram: public ChoiceInterpreter<>
{
public:
SAExposureProgram ()
@ -1829,7 +1841,7 @@ public:
};
SAExposureProgram saExposureProgram;
class SAExposureProgram2: public ChoiceInterpreter
class SAExposureProgram2: public ChoiceInterpreter<>
{
public:
SAExposureProgram2 ()
@ -1870,7 +1882,7 @@ public:
};
SAExposureProgram2 saExposureProgram2;
class SARotation: public ChoiceInterpreter
class SARotation: public ChoiceInterpreter<>
{
public:
SARotation ()
@ -1883,7 +1895,7 @@ public:
};
SARotation saRotation;
class SASonyImageSize: public ChoiceInterpreter
class SASonyImageSize: public ChoiceInterpreter<>
{
public:
SASonyImageSize ()
@ -1895,7 +1907,7 @@ public:
};
SASonyImageSize saSonyImageSize;
class SASonyImageSize3: public ChoiceInterpreter
class SASonyImageSize3: public ChoiceInterpreter<>
{
public:
SASonyImageSize3 ()
@ -1910,7 +1922,7 @@ public:
};
SASonyImageSize3 saSonyImageSize3;
class SAAspectRatio: public ChoiceInterpreter
class SAAspectRatio: public ChoiceInterpreter<>
{
public:
SAAspectRatio ()
@ -1921,7 +1933,7 @@ public:
};
SAAspectRatio saAspectRatio;
class SAAspectRatio2: public ChoiceInterpreter
class SAAspectRatio2: public ChoiceInterpreter<>
{
public:
SAAspectRatio2 ()
@ -1932,7 +1944,7 @@ public:
};
SAAspectRatio2 saAspectRatio2;
class SAExposureLevelIncrements: public ChoiceInterpreter
class SAExposureLevelIncrements: public ChoiceInterpreter<>
{
public:
SAExposureLevelIncrements ()
@ -1943,7 +1955,7 @@ public:
};
SAExposureLevelIncrements saExposureLevelIncrements;
class SAAFIlluminator: public ChoiceInterpreter
class SAAFIlluminator: public ChoiceInterpreter<>
{
public:
SAAFIlluminator ()
@ -1955,7 +1967,7 @@ public:
};
SAAFIlluminator saAFIlluminator;
class SAColorSpace1_2: public ChoiceInterpreter
class SAColorSpace1_2: public ChoiceInterpreter<>
{
public:
SAColorSpace1_2 ()
@ -1966,7 +1978,7 @@ public:
};
SAColorSpace1_2 saColorSpace1_2;
class SAColorSpace0_5: public ChoiceInterpreter
class SAColorSpace0_5: public ChoiceInterpreter<>
{
public:
SAColorSpace0_5 ()
@ -1978,7 +1990,7 @@ public:
};
SAColorSpace0_5 saColorSpace0_5;
class SAColorSpace5_6: public ChoiceInterpreter
class SAColorSpace5_6: public ChoiceInterpreter<>
{
public:
SAColorSpace5_6 ()
@ -1989,7 +2001,7 @@ public:
};
SAColorSpace5_6 saColorSpace5_6;
class SAReleaseModeInterpreter: public ChoiceInterpreter
class SAReleaseModeInterpreter: public ChoiceInterpreter<>
{
public:
SAReleaseModeInterpreter ()
@ -2004,7 +2016,7 @@ public:
};
SAReleaseModeInterpreter saReleaseModeInterpreter;
class SAImageStyleInterpreter: public ChoiceInterpreter
class SAImageStyleInterpreter: public ChoiceInterpreter<>
{
public:
SAImageStyleInterpreter ()
@ -2028,7 +2040,7 @@ public:
};
SAImageStyleInterpreter saImageStyleInterpreter;
class SAPictureEffectInterpreter: public ChoiceInterpreter
class SAPictureEffectInterpreter: public ChoiceInterpreter<>
{
public:
SAPictureEffectInterpreter()
@ -2073,7 +2085,7 @@ public:
};
SAPictureEffectInterpreter saPictureEffectInterpreter;
class SACameraInfoFocusStatusInterpreter : public ChoiceInterpreter
class SACameraInfoFocusStatusInterpreter : public ChoiceInterpreter<>
{
public:
SACameraInfoFocusStatusInterpreter()

View File

@ -28,7 +28,7 @@
namespace rtexif
{
class ColorSpaceInterpreter : public ChoiceInterpreter
class ColorSpaceInterpreter : public ChoiceInterpreter<>
{
public:
@ -41,7 +41,7 @@ public:
};
ColorSpaceInterpreter colorSpaceInterpreter;
class PreviewColorSpaceInterpreter : public ChoiceInterpreter
class PreviewColorSpaceInterpreter : public ChoiceInterpreter<>
{
public:
@ -56,7 +56,7 @@ public:
};
PreviewColorSpaceInterpreter previewColorSpaceInterpreter;
class LinearSRGBInterpreter : public ChoiceInterpreter
class LinearSRGBInterpreter : public ChoiceInterpreter<>
{
public:
@ -68,7 +68,7 @@ public:
};
LinearSRGBInterpreter linearSRGBInterpreter;
class DefaultBlackRenderInterpreter : public ChoiceInterpreter
class DefaultBlackRenderInterpreter : public ChoiceInterpreter<>
{
public:
@ -80,7 +80,7 @@ public:
};
DefaultBlackRenderInterpreter defaultBlackRenderInterpreter;
class ExposureProgramInterpreter : public ChoiceInterpreter
class ExposureProgramInterpreter : public ChoiceInterpreter<>
{
public:
@ -99,7 +99,7 @@ public:
};
ExposureProgramInterpreter exposureProgramInterpreter;
class MeteringModeInterpreter : public ChoiceInterpreter
class MeteringModeInterpreter : public ChoiceInterpreter<>
{
public:
@ -117,7 +117,7 @@ public:
};
MeteringModeInterpreter meteringModeInterpreter;
class ExposureModeInterpreter : public ChoiceInterpreter
class ExposureModeInterpreter : public ChoiceInterpreter<>
{
public:
@ -130,7 +130,7 @@ public:
};
ExposureModeInterpreter exposureModeInterpreter;
class WhiteBalanceInterpreter : public ChoiceInterpreter
class WhiteBalanceInterpreter : public ChoiceInterpreter<>
{
public:
@ -142,7 +142,7 @@ public:
};
WhiteBalanceInterpreter whiteBalanceInterpreter;
class SceneCaptureInterpreter : public ChoiceInterpreter
class SceneCaptureInterpreter : public ChoiceInterpreter<>
{
public:
@ -156,7 +156,7 @@ public:
};
SceneCaptureInterpreter sceneCaptureInterpreter;
class GainControlInterpreter : public ChoiceInterpreter
class GainControlInterpreter : public ChoiceInterpreter<>
{
public:
@ -171,7 +171,7 @@ public:
};
GainControlInterpreter gainControlInterpreter;
class ContrastInterpreter : public ChoiceInterpreter
class ContrastInterpreter : public ChoiceInterpreter<>
{
public:
@ -184,7 +184,7 @@ public:
};
ContrastInterpreter contrastInterpreter;
class SharpnessInterpreter : public ChoiceInterpreter
class SharpnessInterpreter : public ChoiceInterpreter<>
{
public:
@ -197,7 +197,7 @@ public:
};
SharpnessInterpreter sharpnessInterpreter;
class SaturationInterpreter : public ChoiceInterpreter
class SaturationInterpreter : public ChoiceInterpreter<>
{
public:
@ -210,7 +210,7 @@ public:
};
SaturationInterpreter saturationInterpreter;
class FlashInterpreter : public ChoiceInterpreter
class FlashInterpreter : public ChoiceInterpreter<>
{
public:
@ -242,7 +242,7 @@ public:
};
FlashInterpreter flashInterpreter;
class LightSourceInterpreter : public ChoiceInterpreter
class LightSourceInterpreter : public ChoiceInterpreter<>
{
public:
@ -273,7 +273,7 @@ public:
};
LightSourceInterpreter lightSourceInterpreter;
class CompressionInterpreter : public ChoiceInterpreter
class CompressionInterpreter : public ChoiceInterpreter<>
{
public:
@ -285,7 +285,7 @@ public:
};
CompressionInterpreter compressionInterpreter;
class PhotometricInterpreter : public ChoiceInterpreter
class PhotometricInterpreter : public ChoiceInterpreter<>
{
public:
@ -297,7 +297,7 @@ public:
};
PhotometricInterpreter photometricInterpreter;
class ProfileEmbedPolicyInterpreter : public ChoiceInterpreter
class ProfileEmbedPolicyInterpreter : public ChoiceInterpreter<>
{
public:
@ -311,7 +311,7 @@ public:
};
ProfileEmbedPolicyInterpreter profileEmbedPolicyInterpreter;
class PlanarConfigInterpreter : public ChoiceInterpreter
class PlanarConfigInterpreter : public ChoiceInterpreter<>
{
public:
@ -591,7 +591,7 @@ public:
};
CFAInterpreter cfaInterpreter;
class OrientationInterpreter : public ChoiceInterpreter
class OrientationInterpreter : public ChoiceInterpreter<>
{
public:
OrientationInterpreter ()
@ -610,7 +610,7 @@ public:
};
OrientationInterpreter orientationInterpreter;
class UnitsInterpreter : public ChoiceInterpreter
class UnitsInterpreter : public ChoiceInterpreter<>
{
public:
UnitsInterpreter()

View File

@ -42,7 +42,6 @@ enum {
ADDSET_PREPROCESS_LINEDENOISE,
ADDSET_RAWCACORR,
ADDSET_RAWEXPOS_LINEAR,
ADDSET_RAWEXPOS_PRESER,
ADDSET_RAWEXPOS_BLACKS,
ADDSET_SHARPENEDGE_AMOUNT,
ADDSET_SHARPENMICRO_AMOUNT,

View File

@ -99,6 +99,8 @@ private:
bool saveBatchQueue ();
void notifyListener ();
using ThumbBrowserBase::redrawNeeded;
BatchQueueEntry* processing; // holds the currently processed image
FileCatalog* fileCatalog;
int sequence; // holds the current sequence index

View File

@ -172,7 +172,7 @@ void BatchToolPanelCoordinator::initSession ()
bayerpreprocess->setAdjusterBehavior (false, false);
rawcacorrection->setAdjusterBehavior (false);
flatfield->setAdjusterBehavior(false);
rawexposure->setAdjusterBehavior (false, false);
rawexposure->setAdjusterBehavior (false);
bayerrawexposure->setAdjusterBehavior (false);
xtransrawexposure->setAdjusterBehavior (false);
} else {
@ -220,7 +220,7 @@ void BatchToolPanelCoordinator::initSession ()
bayerpreprocess->setAdjusterBehavior (options.baBehav[ADDSET_PREPROCESS_LINEDENOISE], options.baBehav[ADDSET_PREPROCESS_GREENEQUIL]);
rawcacorrection->setAdjusterBehavior (options.baBehav[ADDSET_RAWCACORR]);
flatfield->setAdjusterBehavior(options.baBehav[ADDSET_RAWFFCLIPCONTROL]);
rawexposure->setAdjusterBehavior (options.baBehav[ADDSET_RAWEXPOS_LINEAR], options.baBehav[ADDSET_RAWEXPOS_PRESER]);
rawexposure->setAdjusterBehavior (options.baBehav[ADDSET_RAWEXPOS_LINEAR]);
bayerrawexposure->setAdjusterBehavior (options.baBehav[ADDSET_RAWEXPOS_BLACKS]);
xtransrawexposure->setAdjusterBehavior (options.baBehav[ADDSET_RAWEXPOS_BLACKS]);
@ -352,7 +352,6 @@ void BatchToolPanelCoordinator::initSession ()
if (options.baBehav[ADDSET_DIRPYRDN_GAMMA]) { pparams.dirpyrDenoise.gamma = 0; }
if (options.baBehav[ADDSET_RAWCACORR]) { pparams.raw.cablue = pparams.raw.cared = 0; }
if (options.baBehav[ADDSET_RAWEXPOS_LINEAR]) { pparams.raw.expos = 0; }
if (options.baBehav[ADDSET_RAWEXPOS_PRESER]) { pparams.raw.preser = 0; }
if (options.baBehav[ADDSET_RAWEXPOS_BLACKS]) {
pparams.raw.bayersensor.black0 = pparams.raw.bayersensor.black1 = pparams.raw.bayersensor.black2 = pparams.raw.bayersensor.black3 =
pparams.raw.xtranssensor.blackred = pparams.raw.xtranssensor.blackgreen = pparams.raw.xtranssensor.blackblue = 0;

View File

@ -730,7 +730,10 @@ void BayerProcess::FrameCountChanged(int n, int frameNum)
entry << i;
imageNumber->append(entry.str());
}
imageNumber->set_active(std::min(frameNum, n - 1));
if (n == 2) {
imageNumber->append(M("TP_RAW_IMAGENUM_SN"));
}
imageNumber->set_active(std::min(frameNum, n == 2 ? n : n - 1));
if (n == 1) {
imageNumberBox->hide();
} else {

View File

@ -1055,13 +1055,13 @@ void CropWindow::pointerMoved (int bstate, int x, int y)
// pmlistener->pointerMoved (true, mx, my, pix[0], pix[1], pix[2]);
int imwidth = cropHandler.cropPixbuftrue->get_width();
int imheight = cropHandler.cropPixbuftrue->get_height();
guint8* pix = cropHandler.cropPixbuftrue->get_pixels() + vy * cropHandler.cropPixbuftrue->get_rowstride() + vx * 3;
if (vx < imwidth && vy < imheight) {
guint8* pix = cropHandler.cropPixbuftrue->get_pixels() + vy * cropHandler.cropPixbuftrue->get_rowstride() + vx * 3;
int rval = pix[0];
int gval = pix[1];
int bval = pix[2];
bool isRaw = false;
if (vx < imwidth && vy < imheight) {
rtengine::StagedImageProcessor* ipc = iarea->getImProcCoordinator();
if(ipc) {
procparams::ProcParams params;
@ -1493,7 +1493,9 @@ void CropWindow::expose (Cairo::RefPtr<Cairo::Context> cr)
}
}
#ifdef _OPENMP
#pragma omp critical
#endif
{
if(maxthrstdDev_L2 > maxstdDev_L2) {
maxstdDev_L2 = maxthrstdDev_L2;

View File

@ -670,8 +670,6 @@ void DiagonalCurveEditorSubGroup::switchGUI()
// dCurve ave a ColorProvider or a background gradient defined, so we create/update the object
if (!leftBar) {
leftBar = new ColoredBar(RTO_Bottom2Top);
}
if (barColorProvider) {

View File

@ -61,6 +61,8 @@ class FileBrowser : public ThumbBrowserBase,
private:
typedef sigc::signal<void> type_trash_changed;
using ThumbBrowserBase::redrawNeeded;
IdleRegister idle_register;
unsigned int session_id_;

View File

@ -195,6 +195,8 @@ private:
ExpanderBox* expBox; /// Frame that includes the child and control its visibility
Gtk::EventBox *imageEvBox; /// Enable/Disable or Open/Close arrow event box
using Gtk::Container::add;
/// Triggered on opened/closed event
bool on_toggle(GdkEventButton* event);
/// Triggered on enabled/disabled change -> will emit a toggle event to the connected objects

View File

@ -453,7 +453,6 @@ void ParamsEdited::set(bool v)
raw.ff_AutoClipControl = v;
raw.ff_clipControl = v;
raw.exPos = v;
raw.exPreser = v;
wavelet.enabled = v;
wavelet.strength = v;
wavelet.balance = v;
@ -1020,7 +1019,6 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
raw.ff_AutoClipControl = raw.ff_AutoClipControl && p.raw.ff_AutoClipControl == other.raw.ff_AutoClipControl;
raw.ff_clipControl = raw.ff_clipControl && p.raw.ff_clipControl == other.raw.ff_clipControl;
raw.exPos = raw.exPos && p.raw.expos == other.raw.expos;
raw.exPreser = raw.exPreser && p.raw.preser == other.raw.preser;
wavelet.enabled = wavelet.enabled && p.wavelet.enabled == other.wavelet.enabled;
wavelet.strength = wavelet.strength && p.wavelet.strength == other.wavelet.strength;
wavelet.balance = wavelet.balance && p.wavelet.balance == other.wavelet.balance;
@ -2694,10 +2692,6 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.raw.expos = dontforceSet && options.baBehav[ADDSET_RAWEXPOS_LINEAR] ? toEdit.raw.expos + mods.raw.expos : mods.raw.expos;
}
if (raw.exPreser) {
toEdit.raw.preser = dontforceSet && options.baBehav[ADDSET_RAWEXPOS_PRESER] ? toEdit.raw.preser + mods.raw.preser : mods.raw.preser;
}
if (raw.hotPixelFilter) {
toEdit.raw.hotPixelFilter = mods.raw.hotPixelFilter;
}
@ -3200,7 +3194,7 @@ bool RAWParamsEdited::XTransSensor::isUnchanged() const
bool RAWParamsEdited::isUnchanged() const
{
return bayersensor.isUnchanged() && xtranssensor.isUnchanged() && ca_autocorrect && ca_avoidcolourshift && caautoiterations && cared && cablue && hotPixelFilter && deadPixelFilter && hotdeadpix_thresh && darkFrame
&& df_autoselect && ff_file && ff_AutoSelect && ff_BlurRadius && ff_BlurType && exPos && exPreser && ff_AutoClipControl && ff_clipControl;
&& df_autoselect && ff_file && ff_AutoSelect && ff_BlurRadius && ff_BlurType && exPos && ff_AutoClipControl && ff_clipControl;
}
bool LensProfParamsEdited::isUnchanged() const

View File

@ -818,7 +818,6 @@ public:
bool ff_AutoClipControl;
bool ff_clipControl;
bool exPos;
bool exPreser;
bool isUnchanged() const;
};

View File

@ -120,7 +120,6 @@ PartialPasteDlg::PartialPasteDlg (const Glib::ustring &title, Gtk::Window* paren
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")));
raw_black = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWEXPOS_BLACK")));
//---
df_file = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DARKFRAMEFILE")));
@ -236,7 +235,6 @@ PartialPasteDlg::PartialPasteDlg (const Glib::ustring &title, Gtk::Window* paren
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);
vboxes[7]->pack_start (*raw_black, Gtk::PACK_SHRINK, 2);
vboxes[7]->pack_start (*Gtk::manage (new Gtk::HSeparator ()), Gtk::PACK_SHRINK, 0);
vboxes[7]->pack_start (*df_file, Gtk::PACK_SHRINK, 2);
@ -384,7 +382,6 @@ PartialPasteDlg::PartialPasteDlg (const Glib::ustring &title, Gtk::Window* paren
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));
raw_blackConn = raw_black->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
//---
df_fileConn = df_file->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
@ -459,7 +456,6 @@ void PartialPasteDlg::rawToggled ()
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);
ConnectionBlocker df_fileBlocker(df_fileConn);
ConnectionBlocker df_AutoSelectBlocker(df_AutoSelectConn);
@ -488,7 +484,6 @@ void PartialPasteDlg::rawToggled ()
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 ());
df_file->set_active (raw->get_active ());
df_AutoSelect->set_active (raw->get_active ());
@ -911,10 +906,6 @@ void PartialPasteDlg::applyPaste (rtengine::procparams::ProcParams* dstPP, Param
filterPE.raw.exPos = falsePE.raw.exPos;
}
if (!raw_preser->get_active ()) {
filterPE.raw.exPreser = falsePE.raw.exPreser;
}
if (!raw_ca_autocorrect->get_active ()) {
filterPE.raw.ca_autocorrect = falsePE.raw.ca_autocorrect;
filterPE.raw.caautoiterations = falsePE.raw.caautoiterations;

View File

@ -102,7 +102,6 @@ public:
// options in raw:
Gtk::CheckButton* raw_expos;
Gtk::CheckButton* raw_preser;
Gtk::CheckButton* raw_black;
Gtk::CheckButton* raw_ca_autocorrect;
Gtk::CheckButton* raw_caredblue;
@ -138,7 +137,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_ca_avoid_colourshiftconn, raw_hotpix_filtConn, raw_deadpix_filtConn, raw_pdaf_lines_filterConn, raw_linenoiseConn, raw_greenthreshConn, raw_ccStepsConn, raw_methodConn, raw_borderConn, 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_ca_avoid_colourshiftconn, raw_hotpix_filtConn, raw_deadpix_filtConn, raw_pdaf_lines_filterConn, raw_linenoiseConn, raw_greenthreshConn, raw_ccStepsConn, raw_methodConn, raw_borderConn, raw_imagenumConn, raw_dcb_iterationsConn, raw_lmmse_iterationsConn, raw_pixelshiftConn, raw_dcb_enhanceConn, raw_exposConn, raw_blackConn;
public:
PartialPasteDlg (const Glib::ustring &title, Gtk::Window* parent);

View File

@ -403,7 +403,6 @@ Gtk::Widget* Preferences::getBatchProcPanel ()
mi = behModel->append ();
mi->set_value (behavColumns.label, M ("TP_EXPOS_WHITEPOINT_LABEL"));
appendBehavList (mi, M ("TP_RAWEXPOS_LINEAR"), ADDSET_RAWEXPOS_LINEAR, false);
appendBehavList (mi, M ("TP_RAWEXPOS_PRESER"), ADDSET_RAWEXPOS_PRESER, false);
mi = behModel->append ();
mi->set_value (behavColumns.label, M ("TP_RAWEXPOS_BLACKS"));

Some files were not shown because too many files have changed in this diff Show More