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() endif()
if(UNIX) if(UNIX)
install(FILES rawtherapee.appdata.xml DESTINATION "${APPDATADIR}") install(FILES com.rawtherapee.RawTherapee.appdata.xml DESTINATION "${APPDATADIR}")
endif() endif()
# check whether the used version of lensfun has lfDatabase::LoadDirectory # check whether the used version of lensfun has lfDatabase::LoadDirectory

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<component type="desktop"> <component type="desktop-application">
<id>rawtherapee.desktop</id> <id>com.rawtherapee.RawTherapee</id>
<name>RawTherapee</name> <name>RawTherapee</name>
<summary>An advanced raw photo development program</summary> <summary>An advanced raw photo development program</summary>
<summary xml:lang="cs">Program pro konverzi a zpracování digitálních raw fotografií</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="help">http://rawpedia.rawtherapee.com/</url>
<url type="homepage">http://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> <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> <screenshots>
<screenshot type="default"> <screenshot type="default">
<caption>HDR DNG of a misty morning in the countryside</caption> <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_122;Auto marc fosc
HISTORY_MSG_123;Fitxer de camp fosc HISTORY_MSG_123;Fitxer de camp fosc
HISTORY_MSG_124;Correc. expo. linear HISTORY_MSG_124;Correc. expo. linear
HISTORY_MSG_125;Correc. exposició preservant HL
HISTORY_MSG_126;Fitxer de camp pla HISTORY_MSG_126;Fitxer de camp pla
HISTORY_MSG_127;Auto-sel. camp pla HISTORY_MSG_127;Auto-sel. camp pla
HISTORY_MSG_128;Camp pla borrós - radi 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_RAWCACORR_AUTO;Auto-correcció AC
PARTIALPASTE_RAWEXPOS_BLACK;Nivell negre PARTIALPASTE_RAWEXPOS_BLACK;Nivell negre
PARTIALPASTE_RAWEXPOS_LINEAR;Factor de corr. linear de punt blanc PARTIALPASTE_RAWEXPOS_LINEAR;Factor de corr. linear de punt blanc
PARTIALPASTE_RAWEXPOS_PRESER;Corr. punt blanc preservant HL (EV)
PARTIALPASTE_RAWGROUP;Ajustos raw PARTIALPASTE_RAWGROUP;Ajustos raw
PARTIALPASTE_RAW_DCBENHANCE;Aplica pas de millora DCB PARTIALPASTE_RAW_DCBENHANCE;Aplica pas de millora DCB
PARTIALPASTE_RAW_DCBITERATIONS;Nombre d'iteracions DCB PARTIALPASTE_RAW_DCBITERATIONS;Nombre d'iteracions DCB
@ -798,7 +796,6 @@ TP_RAWCACORR_CABLUE;Blau
TP_RAWCACORR_CARED;Vermell TP_RAWCACORR_CARED;Vermell
TP_RAWEXPOS_BLACKS;Nivells negres TP_RAWEXPOS_BLACKS;Nivells negres
TP_RAWEXPOS_LINEAR;Punt blanc: factor de correcció linear 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_RAWEXPOS_TWOGREEN;Dos verds junts
TP_RAW_DCBENHANCE;Aplica pas de millora DCB TP_RAW_DCBENHANCE;Aplica pas de millora DCB
TP_RAW_DCBITERATIONS;Nombre d'iteracions DCB TP_RAW_DCBITERATIONS;Nombre d'iteracions DCB
@ -2008,7 +2005,8 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: <b>-</b>
!TP_RAW_HPHD;HPHD !TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV !TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image !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_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps !TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps
!TP_RAW_LMMSE_TOOLTIP;Adds gamma (step 1), median (steps 2-4) and refinement (steps 5-6) to reduce artifacts and improve the signal-to-noise ratio. !TP_RAW_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_RAWCACORR_CAREDBLUE;红蓝色散
PARTIALPASTE_RAWEXPOS_BLACK;黑色等级 PARTIALPASTE_RAWEXPOS_BLACK;黑色等级
PARTIALPASTE_RAWEXPOS_LINEAR;白点纠正 PARTIALPASTE_RAWEXPOS_LINEAR;白点纠正
PARTIALPASTE_RAWEXPOS_PRESER;高光补偿
PARTIALPASTE_RAWGROUP;Raw设置 PARTIALPASTE_RAWGROUP;Raw设置
PARTIALPASTE_RAW_DCBENHANCE;DCB 增强 PARTIALPASTE_RAW_DCBENHANCE;DCB 增强
PARTIALPASTE_RAW_DCBITERATIONS;DCB 反复 PARTIALPASTE_RAW_DCBITERATIONS;DCB 反复
@ -1055,7 +1054,6 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: <b>-</b>
!HISTORY_MSG_118;Raw CA correction - Blue !HISTORY_MSG_118;Raw CA correction - Blue
!HISTORY_MSG_120;Green equilibration !HISTORY_MSG_120;Green equilibration
!HISTORY_MSG_121;Raw CA Correction - Auto !HISTORY_MSG_121;Raw CA Correction - Auto
!HISTORY_MSG_125;Highlight preservation
!HISTORY_MSG_131;NR - Luma !HISTORY_MSG_131;NR - Luma
!HISTORY_MSG_132;NR - Chroma !HISTORY_MSG_132;NR - Chroma
!HISTORY_MSG_133;Output gamma !HISTORY_MSG_133;Output gamma
@ -1950,7 +1948,6 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: <b>-</b>
!TP_RAWEXPOS_BLACK_GREEN;Green !TP_RAWEXPOS_BLACK_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red !TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_LINEAR;White-point correction !TP_RAWEXPOS_LINEAR;White-point correction
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue !TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens !TP_RAWEXPOS_TWOGREEN;Link greens
!TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) !TP_RAW_1PASSMEDIUM;1-pass (Markesteijn)
@ -1980,7 +1977,8 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: <b>-</b>
!TP_RAW_HPHD;HPHD !TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV !TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image !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_LABEL;Demosaicing
!TP_RAW_LMMSE;LMMSE !TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps !TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps

View File

@ -631,7 +631,6 @@ TP_WBALANCE_TEMPERATURE;色溫
!HISTORY_MSG_122;Dark-Frame - Auto-selection !HISTORY_MSG_122;Dark-Frame - Auto-selection
!HISTORY_MSG_123;Dark-Frame - File !HISTORY_MSG_123;Dark-Frame - File
!HISTORY_MSG_124;White point correction !HISTORY_MSG_124;White point correction
!HISTORY_MSG_125;Highlight preservation
!HISTORY_MSG_126;Flat-Field - File !HISTORY_MSG_126;Flat-Field - File
!HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_127;Flat-Field - Auto-selection
!HISTORY_MSG_128;Flat-Field - Blur radius !HISTORY_MSG_128;Flat-Field - Blur radius
@ -1206,7 +1205,6 @@ TP_WBALANCE_TEMPERATURE;色溫
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue !PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels !PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction !PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
!PARTIALPASTE_RAWGROUP;Raw Settings !PARTIALPASTE_RAWGROUP;Raw Settings
!PARTIALPASTE_RAW_BORDER;Raw border !PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement !PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement
@ -1898,7 +1896,6 @@ TP_WBALANCE_TEMPERATURE;色溫
!TP_RAWEXPOS_BLACK_GREEN;Green !TP_RAWEXPOS_BLACK_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red !TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_LINEAR;White-point correction !TP_RAWEXPOS_LINEAR;White-point correction
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue !TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens !TP_RAWEXPOS_TWOGREEN;Link greens
!TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) !TP_RAW_1PASSMEDIUM;1-pass (Markesteijn)
@ -1928,7 +1925,8 @@ TP_WBALANCE_TEMPERATURE;色溫
!TP_RAW_HPHD;HPHD !TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV !TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image !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_LABEL;Demosaicing
!TP_RAW_LMMSE;LMMSE !TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps !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_122;Tmavé snímky - Automatický výběr
HISTORY_MSG_123;Tmavé snímky - Soubor HISTORY_MSG_123;Tmavé snímky - Soubor
HISTORY_MSG_124;Korekce bílého bodu HISTORY_MSG_124;Korekce bílého bodu
HISTORY_MSG_125;Zachování světel
HISTORY_MSG_126;Flat Field - Soubor HISTORY_MSG_126;Flat Field - Soubor
HISTORY_MSG_127;Flat Field - Automatický výběr HISTORY_MSG_127;Flat Field - Automatický výběr
HISTORY_MSG_128;Flat Field - Poloměr rozostření 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_RAWCACORR_CAREDBLUE;CA červená a modrá
PARTIALPASTE_RAWEXPOS_BLACK;Úrovně černé PARTIALPASTE_RAWEXPOS_BLACK;Úrovně černé
PARTIALPASTE_RAWEXPOS_LINEAR;Korekce bílého bodu PARTIALPASTE_RAWEXPOS_LINEAR;Korekce bílého bodu
PARTIALPASTE_RAWEXPOS_PRESER;Zachování světel
PARTIALPASTE_RAWGROUP;Nastavení Raw PARTIALPASTE_RAWGROUP;Nastavení Raw
PARTIALPASTE_RAW_BORDER;Okraj Raw PARTIALPASTE_RAW_BORDER;Okraj Raw
PARTIALPASTE_RAW_DCBENHANCE;Vylepšení DCB PARTIALPASTE_RAW_DCBENHANCE;Vylepšení DCB
@ -1882,7 +1880,6 @@ TP_RAWEXPOS_BLACK_BLUE;Modrá
TP_RAWEXPOS_BLACK_GREEN;Zelená TP_RAWEXPOS_BLACK_GREEN;Zelená
TP_RAWEXPOS_BLACK_RED;Červená TP_RAWEXPOS_BLACK_RED;Červená
TP_RAWEXPOS_LINEAR;Korekce bílého bodu TP_RAWEXPOS_LINEAR;Korekce bílého bodu
TP_RAWEXPOS_PRESER;Zachování světel
TP_RAWEXPOS_RGB;Červená, telená, modrá TP_RAWEXPOS_RGB;Červená, telená, modrá
TP_RAWEXPOS_TWOGREEN;Spojit zelené TP_RAWEXPOS_TWOGREEN;Spojit zelené
TP_RAW_1PASSMEDIUM;Jeden průchod (Markesteijn) 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 !HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius
!MAIN_TAB_FAVORITES;Favorites !MAIN_TAB_FAVORITES;Favorites
!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: <b>Alt-u</b> !MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: <b>Alt-u</b>
!TP_RAW_IMAGENUM_SN;SN mode
!TP_SHARPENING_BLUR;Blur radius !TP_SHARPENING_BLUR;Blur radius

View File

@ -626,7 +626,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!HISTORY_MSG_122;Dark-Frame - Auto-selection !HISTORY_MSG_122;Dark-Frame - Auto-selection
!HISTORY_MSG_123;Dark-Frame - File !HISTORY_MSG_123;Dark-Frame - File
!HISTORY_MSG_124;White point correction !HISTORY_MSG_124;White point correction
!HISTORY_MSG_125;Highlight preservation
!HISTORY_MSG_126;Flat-Field - File !HISTORY_MSG_126;Flat-Field - File
!HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_127;Flat-Field - Auto-selection
!HISTORY_MSG_128;Flat-Field - Blur radius !HISTORY_MSG_128;Flat-Field - Blur radius
@ -1203,7 +1202,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue !PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels !PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction !PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
!PARTIALPASTE_RAWGROUP;Raw Settings !PARTIALPASTE_RAWGROUP;Raw Settings
!PARTIALPASTE_RAW_BORDER;Raw border !PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement !PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement
@ -1895,7 +1893,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!TP_RAWEXPOS_BLACK_GREEN;Green !TP_RAWEXPOS_BLACK_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red !TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_LINEAR;White-point correction !TP_RAWEXPOS_LINEAR;White-point correction
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue !TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens !TP_RAWEXPOS_TWOGREEN;Link greens
!TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) !TP_RAW_1PASSMEDIUM;1-pass (Markesteijn)
@ -1923,7 +1920,8 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!TP_RAW_HPHD;HPHD !TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV !TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image !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_LABEL;Demosaicing
!TP_RAW_LMMSE;LMMSE !TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps !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_122;(Dunkelbild)\nAutomatische Auswahl
HISTORY_MSG_123;(Dunkelbild) - Datei HISTORY_MSG_123;(Dunkelbild) - Datei
HISTORY_MSG_124;(Weißpunkt)\nKorrekturfaktor HISTORY_MSG_124;(Weißpunkt)\nKorrekturfaktor
HISTORY_MSG_125;(Belichtungskorrektur)\nLichter schützen
HISTORY_MSG_126;(Weißbild) - Datei HISTORY_MSG_126;(Weißbild) - Datei
HISTORY_MSG_127;(Weißbild)\nAutomatische Auswahl HISTORY_MSG_127;(Weißbild)\nAutomatische Auswahl
HISTORY_MSG_128;(Weißbild)\nUnschärferadius 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_RAWCACORR_COLORSHIFT;(Sensor-Matrix)\nChromatische Aberration\nFarbverschiebungen\nvermeiden
HISTORY_MSG_RAW_BORDER;(Sensor-Matrix)\nFarbinterpolation\nBildrand HISTORY_MSG_RAW_BORDER;(Sensor-Matrix)\nFarbinterpolation\nBildrand
HISTORY_MSG_RESIZE_ALLOWUPSCALING;(Skalieren)\nHochskalieren zulassen HISTORY_MSG_RESIZE_ALLOWUPSCALING;(Skalieren)\nHochskalieren zulassen
HISTORY_MSG_SHARPENING_BLUR;(Schärfung)\nWeichzeichnerradius
HISTORY_MSG_SHARPENING_CONTRAST;(Schärfung)\nKontrastschwelle HISTORY_MSG_SHARPENING_CONTRAST;(Schärfung)\nKontrastschwelle
HISTORY_MSG_SH_COLORSPACE;Farbraum HISTORY_MSG_SH_COLORSPACE;Farbraum
HISTORY_MSG_SOFTLIGHT_ENABLED;(Weiches Licht) HISTORY_MSG_SOFTLIGHT_ENABLED;(Weiches Licht)
@ -992,6 +992,8 @@ MAIN_TAB_EXIF;Exif
MAIN_TAB_EXPORT; Exportieren MAIN_TAB_EXPORT; Exportieren
MAIN_TAB_EXPOSURE;Belichtung MAIN_TAB_EXPOSURE;Belichtung
MAIN_TAB_EXPOSURE_TOOLTIP;Taste: <b>Alt</b> + <b>e</b> 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_FILTER; Filter
MAIN_TAB_INSPECT; Prüfen MAIN_TAB_INSPECT; Prüfen
MAIN_TAB_IPTC;IPTC MAIN_TAB_IPTC;IPTC
@ -1095,7 +1097,6 @@ PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;Chromatische Aberration: Farbverschiebung
PARTIALPASTE_RAWCACORR_CAREDBLUE;Chromatische Aberration: Rot & Blau PARTIALPASTE_RAWCACORR_CAREDBLUE;Chromatische Aberration: Rot & Blau
PARTIALPASTE_RAWEXPOS_BLACK;Weißpunkt: Schwarzpegel PARTIALPASTE_RAWEXPOS_BLACK;Weißpunkt: Schwarzpegel
PARTIALPASTE_RAWEXPOS_LINEAR;Weißpunkt: Korrekturfaktor PARTIALPASTE_RAWEXPOS_LINEAR;Weißpunkt: Korrekturfaktor
PARTIALPASTE_RAWEXPOS_PRESER;Weißpunkt: Lichter schützen (EV)
PARTIALPASTE_RAWGROUP;RAW PARTIALPASTE_RAWGROUP;RAW
PARTIALPASTE_RAW_BORDER;Farbinterpolation: Bildrand PARTIALPASTE_RAW_BORDER;Farbinterpolation: Bildrand
PARTIALPASTE_RAW_DCBENHANCE;Farbinterpolation: DCB-Verbesserung PARTIALPASTE_RAW_DCBENHANCE;Farbinterpolation: DCB-Verbesserung
@ -1928,7 +1929,6 @@ TP_RAWEXPOS_BLACK_BLUE;Blau
TP_RAWEXPOS_BLACK_GREEN;Grün TP_RAWEXPOS_BLACK_GREEN;Grün
TP_RAWEXPOS_BLACK_RED;Rot TP_RAWEXPOS_BLACK_RED;Rot
TP_RAWEXPOS_LINEAR;Korrekturfaktor TP_RAWEXPOS_LINEAR;Korrekturfaktor
TP_RAWEXPOS_PRESER;Weißpunkt: Lichter schützen
TP_RAWEXPOS_RGB;Rot, Grün, Blau TP_RAWEXPOS_RGB;Rot, Grün, Blau
TP_RAWEXPOS_TWOGREEN;Grün-Werte automatisch angleichen TP_RAWEXPOS_TWOGREEN;Grün-Werte automatisch angleichen
TP_RAW_1PASSMEDIUM;1-Pass (Markesteijn) TP_RAW_1PASSMEDIUM;1-Pass (Markesteijn)
@ -2139,6 +2139,7 @@ TP_SHARPENEDGE_LABEL;Kantenschärfung
TP_SHARPENEDGE_PASSES;Iterationen TP_SHARPENEDGE_PASSES;Iterationen
TP_SHARPENEDGE_THREE;Nur Luminanz TP_SHARPENEDGE_THREE;Nur Luminanz
TP_SHARPENING_AMOUNT;Intensität TP_SHARPENING_AMOUNT;Intensität
TP_SHARPENING_BLUR;Weichzeichnerradius
TP_SHARPENING_CONTRAST;Kontrastschwelle TP_SHARPENING_CONTRAST;Kontrastschwelle
TP_SHARPENING_EDRADIUS;Radius TP_SHARPENING_EDRADIUS;Radius
TP_SHARPENING_EDTOLERANCE;Kantentoleranz 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. ! Untranslated keys follow; remove the ! prefix after an entry is translated.
!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!
HISTORY_MSG_SHARPENING_BLUR;(Schärfung)\nWeichzeichnerradius !TP_RAW_IMAGENUM_SN;SN mode
MAIN_TAB_FAVORITES;Favoriten
MAIN_TAB_FAVORITES_TOOLTIP;Taste: <b>Alt</b> + <b>u</b>
TP_SHARPENING_BLUR;Weichzeichnerradius

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_122;Dark-Frame - Auto-selection
!HISTORY_MSG_123;Dark-Frame - File !HISTORY_MSG_123;Dark-Frame - File
!HISTORY_MSG_124;White point correction !HISTORY_MSG_124;White point correction
!HISTORY_MSG_125;Highlight preservation
!HISTORY_MSG_126;Flat-Field - File !HISTORY_MSG_126;Flat-Field - File
!HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_127;Flat-Field - Auto-selection
!HISTORY_MSG_128;Flat-Field - Blur radius !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_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels !PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction !PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
!PARTIALPASTE_RAWGROUP;Raw Settings !PARTIALPASTE_RAWGROUP;Raw Settings
!PARTIALPASTE_RAW_BORDER;Raw border !PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement !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_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red !TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_LINEAR;White-point correction !TP_RAWEXPOS_LINEAR;White-point correction
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue !TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens !TP_RAWEXPOS_TWOGREEN;Link greens
!TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) !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_HPHD;HPHD
!TP_RAW_IGV;IGV !TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image !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_LABEL;Demosaicing
!TP_RAW_LMMSE;LMMSE !TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps !TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps

View File

@ -381,7 +381,6 @@
!HISTORY_MSG_122;Dark-Frame - Auto-selection !HISTORY_MSG_122;Dark-Frame - Auto-selection
!HISTORY_MSG_123;Dark-Frame - File !HISTORY_MSG_123;Dark-Frame - File
!HISTORY_MSG_124;White point correction !HISTORY_MSG_124;White point correction
!HISTORY_MSG_125;Highlight preservation
!HISTORY_MSG_126;Flat-Field - File !HISTORY_MSG_126;Flat-Field - File
!HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_127;Flat-Field - Auto-selection
!HISTORY_MSG_128;Flat-Field - Blur radius !HISTORY_MSG_128;Flat-Field - Blur radius
@ -1019,7 +1018,6 @@
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue !PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels !PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction !PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
!PARTIALPASTE_RAWGROUP;Raw Settings !PARTIALPASTE_RAWGROUP;Raw Settings
!PARTIALPASTE_RAW_BORDER;Raw border !PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement !PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement
@ -1845,7 +1843,6 @@
!TP_RAWEXPOS_BLACK_GREEN;Green !TP_RAWEXPOS_BLACK_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red !TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_LINEAR;White-point correction !TP_RAWEXPOS_LINEAR;White-point correction
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue !TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens !TP_RAWEXPOS_TWOGREEN;Link greens
!TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) !TP_RAW_1PASSMEDIUM;1-pass (Markesteijn)
@ -1875,7 +1872,8 @@
!TP_RAW_HPHD;HPHD !TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV !TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image !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_LABEL;Demosaicing
!TP_RAW_LMMSE;LMMSE !TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps !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_122;Auto selección de arch. de Toma Negra
HISTORY_MSG_123;Archivo de Toma Negra HISTORY_MSG_123;Archivo de Toma Negra
HISTORY_MSG_124;Corrección de punto blanco HISTORY_MSG_124;Corrección de punto blanco
HISTORY_MSG_125;Preservar Luces Altas
HISTORY_MSG_126;Archivo de campo plano HISTORY_MSG_126;Archivo de campo plano
HISTORY_MSG_127;Auto selección archivo de campo plano HISTORY_MSG_127;Auto selección archivo de campo plano
HISTORY_MSG_128;Radio de difuminado 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_RAWCACORR_CAREDBLUE;CA Rojo & Azul
PARTIALPASTE_RAWEXPOS_BLACK;Nivel de negro PARTIALPASTE_RAWEXPOS_BLACK;Nivel de negro
PARTIALPASTE_RAWEXPOS_LINEAR;Corrección de punto blanco PARTIALPASTE_RAWEXPOS_LINEAR;Corrección de punto blanco
PARTIALPASTE_RAWEXPOS_PRESER;Preservar Luces Altas
PARTIALPASTE_RAWGROUP;Ajustes Raw PARTIALPASTE_RAWGROUP;Ajustes Raw
PARTIALPASTE_RAW_BORDER;Raw margen/borde PARTIALPASTE_RAW_BORDER;Raw margen/borde
PARTIALPASTE_RAW_DCBENHANCE;Aplicar paso de mejora DCB 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_GREEN;Verde
TP_RAWEXPOS_BLACK_RED;Rojo TP_RAWEXPOS_BLACK_RED;Rojo
TP_RAWEXPOS_LINEAR;Corrección de punto blanco TP_RAWEXPOS_LINEAR;Corrección de punto blanco
TP_RAWEXPOS_PRESER;Preservación de Luces Altas
TP_RAWEXPOS_RGB;Rojo, Verde, Azul TP_RAWEXPOS_RGB;Rojo, Verde, Azul
TP_RAWEXPOS_TWOGREEN;Vincular verdes TP_RAWEXPOS_TWOGREEN;Vincular verdes
TP_RAW_1PASSMEDIUM;1-pasaje (medio) 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 !HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius
!MAIN_TAB_FAVORITES;Favorites !MAIN_TAB_FAVORITES;Favorites
!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: <b>Alt-u</b> !MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: <b>Alt-u</b>
!TP_RAW_IMAGENUM_SN;SN mode
!TP_SHARPENING_BLUR;Blur radius !TP_SHARPENING_BLUR;Blur radius

View File

@ -627,7 +627,6 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!HISTORY_MSG_122;Dark-Frame - Auto-selection !HISTORY_MSG_122;Dark-Frame - Auto-selection
!HISTORY_MSG_123;Dark-Frame - File !HISTORY_MSG_123;Dark-Frame - File
!HISTORY_MSG_124;White point correction !HISTORY_MSG_124;White point correction
!HISTORY_MSG_125;Highlight preservation
!HISTORY_MSG_126;Flat-Field - File !HISTORY_MSG_126;Flat-Field - File
!HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_127;Flat-Field - Auto-selection
!HISTORY_MSG_128;Flat-Field - Blur radius !HISTORY_MSG_128;Flat-Field - Blur radius
@ -1204,7 +1203,6 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue !PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels !PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction !PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
!PARTIALPASTE_RAWGROUP;Raw Settings !PARTIALPASTE_RAWGROUP;Raw Settings
!PARTIALPASTE_RAW_BORDER;Raw border !PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement !PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement
@ -1896,7 +1894,6 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!TP_RAWEXPOS_BLACK_GREEN;Green !TP_RAWEXPOS_BLACK_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red !TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_LINEAR;White-point correction !TP_RAWEXPOS_LINEAR;White-point correction
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue !TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens !TP_RAWEXPOS_TWOGREEN;Link greens
!TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) !TP_RAW_1PASSMEDIUM;1-pass (Markesteijn)
@ -1924,7 +1921,8 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!TP_RAW_HPHD;HPHD !TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV !TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image !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_LABEL;Demosaicing
!TP_RAW_LMMSE;LMMSE !TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps !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_122;Sélection auto de trame noire
HISTORY_MSG_123;Fichier de trame noire HISTORY_MSG_123;Fichier de trame noire
HISTORY_MSG_124;Correct. du point blanc HISTORY_MSG_124;Correct. du point blanc
HISTORY_MSG_125;Préservation des HL
HISTORY_MSG_126;Champ Uniforme - Fichier HISTORY_MSG_126;Champ Uniforme - Fichier
HISTORY_MSG_127;Champ Uniforme - Sélection auto HISTORY_MSG_127;Champ Uniforme - Sélection auto
HISTORY_MSG_128;Champ Uniforme - Rayon 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_RAWCACORR_CAREDBLUE;A.C. Raw - Rouge et bleu
PARTIALPASTE_RAWEXPOS_BLACK;Niveaux de noir PARTIALPASTE_RAWEXPOS_BLACK;Niveaux de noir
PARTIALPASTE_RAWEXPOS_LINEAR;Correction du point blanc PARTIALPASTE_RAWEXPOS_LINEAR;Correction du point blanc
PARTIALPASTE_RAWEXPOS_PRESER;Préservation des hautes humières
PARTIALPASTE_RAWGROUP;Réglages RAW PARTIALPASTE_RAWGROUP;Réglages RAW
PARTIALPASTE_RAW_BORDER;Bord Raw PARTIALPASTE_RAW_BORDER;Bord Raw
PARTIALPASTE_RAW_DCBENHANCE;Amélioration de DCB PARTIALPASTE_RAW_DCBENHANCE;Amélioration de DCB
@ -1852,7 +1850,6 @@ TP_RAWEXPOS_BLACK_BLUE;Bleu
TP_RAWEXPOS_BLACK_GREEN;Vert TP_RAWEXPOS_BLACK_GREEN;Vert
TP_RAWEXPOS_BLACK_RED;Rouge TP_RAWEXPOS_BLACK_RED;Rouge
TP_RAWEXPOS_LINEAR;Corr. du Point Blanc TP_RAWEXPOS_LINEAR;Corr. du Point Blanc
TP_RAWEXPOS_PRESER;Préservation des HL
TP_RAWEXPOS_RGB;Rouge, Vert, Bleu TP_RAWEXPOS_RGB;Rouge, Vert, Bleu
TP_RAWEXPOS_TWOGREEN;Lier les verts TP_RAWEXPOS_TWOGREEN;Lier les verts
TP_RAW_1PASSMEDIUM;1-Passe (Medium) 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 !HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius
!MAIN_TAB_FAVORITES;Favorites !MAIN_TAB_FAVORITES;Favorites
!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: <b>Alt-u</b> !MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: <b>Alt-u</b>
!TP_RAW_IMAGENUM_SN;SN mode
!TP_SHARPENING_BLUR;Blur radius !TP_SHARPENING_BLUR;Blur radius

View File

@ -626,7 +626,6 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!HISTORY_MSG_122;Dark-Frame - Auto-selection !HISTORY_MSG_122;Dark-Frame - Auto-selection
!HISTORY_MSG_123;Dark-Frame - File !HISTORY_MSG_123;Dark-Frame - File
!HISTORY_MSG_124;White point correction !HISTORY_MSG_124;White point correction
!HISTORY_MSG_125;Highlight preservation
!HISTORY_MSG_126;Flat-Field - File !HISTORY_MSG_126;Flat-Field - File
!HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_127;Flat-Field - Auto-selection
!HISTORY_MSG_128;Flat-Field - Blur radius !HISTORY_MSG_128;Flat-Field - Blur radius
@ -1203,7 +1202,6 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue !PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels !PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction !PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
!PARTIALPASTE_RAWGROUP;Raw Settings !PARTIALPASTE_RAWGROUP;Raw Settings
!PARTIALPASTE_RAW_BORDER;Raw border !PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement !PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement
@ -1895,7 +1893,6 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!TP_RAWEXPOS_BLACK_GREEN;Green !TP_RAWEXPOS_BLACK_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red !TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_LINEAR;White-point correction !TP_RAWEXPOS_LINEAR;White-point correction
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue !TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens !TP_RAWEXPOS_TWOGREEN;Link greens
!TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) !TP_RAW_1PASSMEDIUM;1-pass (Markesteijn)
@ -1923,7 +1920,8 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!TP_RAW_HPHD;HPHD !TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV !TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image !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_LABEL;Demosaicing
!TP_RAW_LMMSE;LMMSE !TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps !TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps

View File

@ -627,7 +627,6 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!HISTORY_MSG_122;Dark-Frame - Auto-selection !HISTORY_MSG_122;Dark-Frame - Auto-selection
!HISTORY_MSG_123;Dark-Frame - File !HISTORY_MSG_123;Dark-Frame - File
!HISTORY_MSG_124;White point correction !HISTORY_MSG_124;White point correction
!HISTORY_MSG_125;Highlight preservation
!HISTORY_MSG_126;Flat-Field - File !HISTORY_MSG_126;Flat-Field - File
!HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_127;Flat-Field - Auto-selection
!HISTORY_MSG_128;Flat-Field - Blur radius !HISTORY_MSG_128;Flat-Field - Blur radius
@ -1204,7 +1203,6 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue !PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels !PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction !PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
!PARTIALPASTE_RAWGROUP;Raw Settings !PARTIALPASTE_RAWGROUP;Raw Settings
!PARTIALPASTE_RAW_BORDER;Raw border !PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement !PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement
@ -1896,7 +1894,6 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!TP_RAWEXPOS_BLACK_GREEN;Green !TP_RAWEXPOS_BLACK_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red !TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_LINEAR;White-point correction !TP_RAWEXPOS_LINEAR;White-point correction
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue !TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens !TP_RAWEXPOS_TWOGREEN;Link greens
!TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) !TP_RAW_1PASSMEDIUM;1-pass (Markesteijn)
@ -1924,7 +1921,8 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!TP_RAW_HPHD;HPHD !TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV !TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image !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_LABEL;Demosaicing
!TP_RAW_LMMSE;LMMSE !TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps !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_122;Dark Frame - Automatico
HISTORY_MSG_123;Dark Frame - File HISTORY_MSG_123;Dark Frame - File
HISTORY_MSG_124;Correzione Punto di Bianco HISTORY_MSG_124;Correzione Punto di Bianco
HISTORY_MSG_125;Protezione AlteLuci
HISTORY_MSG_126;Flat Field - File HISTORY_MSG_126;Flat Field - File
HISTORY_MSG_127;Flat Field - Automatico HISTORY_MSG_127;Flat Field - Automatico
HISTORY_MSG_128;Flat Field - Raggio di Sfocamento 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_RAWCACORR_AUTO;Autocorrezione AC
PARTIALPASTE_RAWEXPOS_BLACK;Punto del Nero PARTIALPASTE_RAWEXPOS_BLACK;Punto del Nero
PARTIALPASTE_RAWEXPOS_LINEAR;Correzione Punto del Bianco PARTIALPASTE_RAWEXPOS_LINEAR;Correzione Punto del Bianco
PARTIALPASTE_RAWEXPOS_PRESER;Conservazione Alteluci
PARTIALPASTE_RAWGROUP;Impostazioni del Raw PARTIALPASTE_RAWGROUP;Impostazioni del Raw
PARTIALPASTE_RAW_DCBENHANCE;Miglioramento DCB PARTIALPASTE_RAW_DCBENHANCE;Miglioramento DCB
PARTIALPASTE_RAW_DCBITERATIONS;Numero di iterazioni DCB PARTIALPASTE_RAW_DCBITERATIONS;Numero di iterazioni DCB
@ -1135,7 +1133,6 @@ TP_RAWCACORR_CABLUE;Blu
TP_RAWCACORR_CARED;Rosso TP_RAWCACORR_CARED;Rosso
TP_RAWEXPOS_BLACKS;Livelli del nero TP_RAWEXPOS_BLACKS;Livelli del nero
TP_RAWEXPOS_LINEAR;Punto del Bianco - Correzione TP_RAWEXPOS_LINEAR;Punto del Bianco - Correzione
TP_RAWEXPOS_PRESER;Punto del Bianco - Protezione Alteluci
TP_RAWEXPOS_TWOGREEN;Valori del verde uniti TP_RAWEXPOS_TWOGREEN;Valori del verde uniti
TP_RAW_DCBENHANCE;Miglioramento DCB TP_RAW_DCBENHANCE;Miglioramento DCB
TP_RAW_DCBITERATIONS;Numero di iterazioni DCB TP_RAW_DCBITERATIONS;Numero di iterazioni DCB
@ -2023,7 +2020,8 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: <b>-</b>
!TP_RAW_HPHD;HPHD !TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV !TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image !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_LMMSE;LMMSE
!TP_RAW_MONO;Mono !TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern) !TP_RAW_NONE;None (Shows sensor pattern)

View File

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

View File

@ -627,7 +627,6 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!HISTORY_MSG_122;Dark-Frame - Auto-selection !HISTORY_MSG_122;Dark-Frame - Auto-selection
!HISTORY_MSG_123;Dark-Frame - File !HISTORY_MSG_123;Dark-Frame - File
!HISTORY_MSG_124;White point correction !HISTORY_MSG_124;White point correction
!HISTORY_MSG_125;Highlight preservation
!HISTORY_MSG_126;Flat-Field - File !HISTORY_MSG_126;Flat-Field - File
!HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_127;Flat-Field - Auto-selection
!HISTORY_MSG_128;Flat-Field - Blur radius !HISTORY_MSG_128;Flat-Field - Blur radius
@ -1204,7 +1203,6 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue !PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels !PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction !PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
!PARTIALPASTE_RAWGROUP;Raw Settings !PARTIALPASTE_RAWGROUP;Raw Settings
!PARTIALPASTE_RAW_BORDER;Raw border !PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement !PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement
@ -1896,7 +1894,6 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!TP_RAWEXPOS_BLACK_GREEN;Green !TP_RAWEXPOS_BLACK_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red !TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_LINEAR;White-point correction !TP_RAWEXPOS_LINEAR;White-point correction
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue !TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens !TP_RAWEXPOS_TWOGREEN;Link greens
!TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) !TP_RAW_1PASSMEDIUM;1-pass (Markesteijn)
@ -1924,7 +1921,8 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!TP_RAW_HPHD;HPHD !TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV !TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image !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_LABEL;Demosaicing
!TP_RAW_LMMSE;LMMSE !TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps !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_122;Auto ref. feketekép (dark frame)
HISTORY_MSG_123;Ref. feketekép állománya HISTORY_MSG_123;Ref. feketekép állománya
HISTORY_MSG_124;Lineáris exp. korrekció 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_126;Flat Field állomány
HISTORY_MSG_127;Flat Field automatikus kivál. HISTORY_MSG_127;Flat Field automatikus kivál.
HISTORY_MSG_128;Flat Field elmosás sugara 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_RAWCACORR_AUTO;CA autokorrekció
PARTIALPASTE_RAWEXPOS_BLACK;Feketeszint PARTIALPASTE_RAWEXPOS_BLACK;Feketeszint
PARTIALPASTE_RAWEXPOS_LINEAR;Raw fehérszint lineáris korrekciós faktor (FÉ) 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_RAWGROUP;Raw beállítások
PARTIALPASTE_RAW_DCBENHANCE;DCB javítási lépés alkalmazása PARTIALPASTE_RAW_DCBENHANCE;DCB javítási lépés alkalmazása
PARTIALPASTE_RAW_DCBITERATIONS;DCB iterációk száma 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_RAWCACORR_CARED;Vörös
TP_RAWEXPOS_BLACKS;Feketeszintek TP_RAWEXPOS_BLACKS;Feketeszintek
TP_RAWEXPOS_LINEAR;Fehérszint: lineáris korrelációs faktor 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_RAWEXPOS_TWOGREEN;Zöldek együtt
TP_RAW_DCBENHANCE;DCB helyesbítő lépés alkalmazása TP_RAW_DCBENHANCE;DCB helyesbítő lépés alkalmazása
TP_RAW_DCBITERATIONS;DCB iterációk száma 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_HPHD;HPHD
!TP_RAW_IGV;IGV !TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image !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_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps !TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps
!TP_RAW_LMMSE_TOOLTIP;Adds gamma (step 1), median (steps 2-4) and refinement (steps 5-6) to reduce artifacts and improve the signal-to-noise ratio. !TP_RAW_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_122;Donkerframe - Autom. selectie
HISTORY_MSG_123;Donkerframe - Bestand HISTORY_MSG_123;Donkerframe - Bestand
HISTORY_MSG_124;Witpunt correctie HISTORY_MSG_124;Witpunt correctie
HISTORY_MSG_125;Hoge lichten behouden
HISTORY_MSG_126;Vlakveld - Bestand HISTORY_MSG_126;Vlakveld - Bestand
HISTORY_MSG_127;Vlakveld - Autom. selectie HISTORY_MSG_127;Vlakveld - Autom. selectie
HISTORY_MSG_128;Vlakveld - Verzachten straal HISTORY_MSG_128;Vlakveld - Verzachten straal
@ -881,7 +880,6 @@ PARTIALPASTE_RAWCACORR_AUTO;Autom. C/A-correctie
PARTIALPASTE_RAWCACORR_CAREDBLUE;CA rood & blauw PARTIALPASTE_RAWCACORR_CAREDBLUE;CA rood & blauw
PARTIALPASTE_RAWEXPOS_BLACK;Zwartniveau PARTIALPASTE_RAWEXPOS_BLACK;Zwartniveau
PARTIALPASTE_RAWEXPOS_LINEAR;Raw witpunt- lineaire corr. factor PARTIALPASTE_RAWEXPOS_LINEAR;Raw witpunt- lineaire corr. factor
PARTIALPASTE_RAWEXPOS_PRESER;Raw witpunt- herstel hoge lichten (EV)
PARTIALPASTE_RAWGROUP;Raw-instellingen PARTIALPASTE_RAWGROUP;Raw-instellingen
PARTIALPASTE_RAW_DCBENHANCE;Pas DCB-verbetering toe PARTIALPASTE_RAW_DCBENHANCE;Pas DCB-verbetering toe
PARTIALPASTE_RAW_DCBITERATIONS;aantal DCB-herhalingen PARTIALPASTE_RAW_DCBITERATIONS;aantal DCB-herhalingen
@ -1593,7 +1591,6 @@ TP_RAWEXPOS_BLACK_BLUE;Blauw
TP_RAWEXPOS_BLACK_GREEN;Groen TP_RAWEXPOS_BLACK_GREEN;Groen
TP_RAWEXPOS_BLACK_RED;Rood TP_RAWEXPOS_BLACK_RED;Rood
TP_RAWEXPOS_LINEAR;Witpunt Correctie TP_RAWEXPOS_LINEAR;Witpunt Correctie
TP_RAWEXPOS_PRESER;Herstel hoge lichten
TP_RAWEXPOS_RGB;Rood, Groen, Blauw TP_RAWEXPOS_RGB;Rood, Groen, Blauw
TP_RAWEXPOS_TWOGREEN;Koppel Groen 1 en 2 TP_RAWEXPOS_TWOGREEN;Koppel Groen 1 en 2
TP_RAW_1PASSMEDIUM;1 keer (Gemiddeld) 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;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_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_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_PIXELSHIFTDMETHOD;Demosaic method for motion
!TP_RAW_PIXELSHIFTEPERISO;Sensitivity !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. !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_122;Dark-Frame - Auto-selection
!HISTORY_MSG_123;Dark-Frame - File !HISTORY_MSG_123;Dark-Frame - File
!HISTORY_MSG_124;White point correction !HISTORY_MSG_124;White point correction
!HISTORY_MSG_125;Highlight preservation
!HISTORY_MSG_126;Flat-Field - File !HISTORY_MSG_126;Flat-Field - File
!HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_127;Flat-Field - Auto-selection
!HISTORY_MSG_128;Flat-Field - Blur radius !HISTORY_MSG_128;Flat-Field - Blur radius
@ -1203,7 +1202,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue !PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels !PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction !PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
!PARTIALPASTE_RAWGROUP;Raw Settings !PARTIALPASTE_RAWGROUP;Raw Settings
!PARTIALPASTE_RAW_BORDER;Raw border !PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement !PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement
@ -1895,7 +1893,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!TP_RAWEXPOS_BLACK_GREEN;Green !TP_RAWEXPOS_BLACK_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red !TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_LINEAR;White-point correction !TP_RAWEXPOS_LINEAR;White-point correction
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue !TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens !TP_RAWEXPOS_TWOGREEN;Link greens
!TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) !TP_RAW_1PASSMEDIUM;1-pass (Markesteijn)
@ -1923,7 +1920,8 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!TP_RAW_HPHD;HPHD !TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV !TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image !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_LABEL;Demosaicing
!TP_RAW_LMMSE;LMMSE !TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps !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_122;Czarna klatka - Auto-wybór
HISTORY_MSG_123;Czarna klatka - Wybór HISTORY_MSG_123;Czarna klatka - Wybór
HISTORY_MSG_124;Korekcja punktu bieli HISTORY_MSG_124;Korekcja punktu bieli
HISTORY_MSG_125;Zachowanie prześwietleń
HISTORY_MSG_126;Puste pole - Wybór HISTORY_MSG_126;Puste pole - Wybór
HISTORY_MSG_127;Puste pole - Auto-wybór HISTORY_MSG_127;Puste pole - Auto-wybór
HISTORY_MSG_128;Puste pole - Promień rozmycia 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_RAWCACORR_AUTO;Autokorekcja aberracji chr.
PARTIALPASTE_RAWEXPOS_BLACK;Poziomy czerni PARTIALPASTE_RAWEXPOS_BLACK;Poziomy czerni
PARTIALPASTE_RAWEXPOS_LINEAR;Korekcja punktu bieli PARTIALPASTE_RAWEXPOS_LINEAR;Korekcja punktu bieli
PARTIALPASTE_RAWEXPOS_PRESER;Zachowanie prześwietleń
PARTIALPASTE_RAWGROUP;Ustawienia raw PARTIALPASTE_RAWGROUP;Ustawienia raw
PARTIALPASTE_RAW_DCBENHANCE;Zastosuj poprawę DCB PARTIALPASTE_RAW_DCBENHANCE;Zastosuj poprawę DCB
PARTIALPASTE_RAW_DCBITERATIONS;Liczba powtórzeń 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_GREEN;Zielony
TP_RAWEXPOS_BLACK_RED;Czerwony TP_RAWEXPOS_BLACK_RED;Czerwony
TP_RAWEXPOS_LINEAR;Liniowy współczynnik korekcji TP_RAWEXPOS_LINEAR;Liniowy współczynnik korekcji
TP_RAWEXPOS_PRESER;Zachowanie prześwietleń
TP_RAWEXPOS_RGB;Czerwony, Zielony, Niebieski TP_RAWEXPOS_RGB;Czerwony, Zielony, Niebieski
TP_RAWEXPOS_TWOGREEN;Połącz obie zielenie TP_RAWEXPOS_TWOGREEN;Połącz obie zielenie
TP_RAW_DCBENHANCE;Zastosuj poprawę DCB TP_RAW_DCBENHANCE;Zastosuj poprawę DCB
@ -2032,7 +2029,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: <b>-</b>
!TP_RAW_HPHD;HPHD !TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV !TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image !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_LMMSE;LMMSE
!TP_RAW_MONO;Mono !TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern) !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_122;Czarna klatka - Auto-wybor
HISTORY_MSG_123;Czarna klatka - Wybor HISTORY_MSG_123;Czarna klatka - Wybor
HISTORY_MSG_124;Korekcja punktu bieli HISTORY_MSG_124;Korekcja punktu bieli
HISTORY_MSG_125;Zachowanie przeswietlen
HISTORY_MSG_126;Puste pole - Wybor HISTORY_MSG_126;Puste pole - Wybor
HISTORY_MSG_127;Puste pole - Auto-wybor HISTORY_MSG_127;Puste pole - Auto-wybor
HISTORY_MSG_128;Puste pole - Promien rozmycia HISTORY_MSG_128;Puste pole - Promien rozmycia
@ -649,7 +648,6 @@ PARTIALPASTE_PREPROCESS_LINEDENOISE;Redukcja szumow liniowych
PARTIALPASTE_RAWCACORR_AUTO;Autokorekcja aberracji chr. PARTIALPASTE_RAWCACORR_AUTO;Autokorekcja aberracji chr.
PARTIALPASTE_RAWEXPOS_BLACK;Poziomy czerni PARTIALPASTE_RAWEXPOS_BLACK;Poziomy czerni
PARTIALPASTE_RAWEXPOS_LINEAR;Korekcja punktu bieli PARTIALPASTE_RAWEXPOS_LINEAR;Korekcja punktu bieli
PARTIALPASTE_RAWEXPOS_PRESER;Zachowanie przeswietlen
PARTIALPASTE_RAWGROUP;Ustawienia raw PARTIALPASTE_RAWGROUP;Ustawienia raw
PARTIALPASTE_RAW_DCBENHANCE;Zastosuj poprawe DCB PARTIALPASTE_RAW_DCBENHANCE;Zastosuj poprawe DCB
PARTIALPASTE_RAW_DCBITERATIONS;Liczba powtorzen DCB PARTIALPASTE_RAW_DCBITERATIONS;Liczba powtorzen DCB
@ -1252,7 +1250,6 @@ TP_RAWEXPOS_BLACK_BLUE;Niebieski
TP_RAWEXPOS_BLACK_GREEN;Zielony TP_RAWEXPOS_BLACK_GREEN;Zielony
TP_RAWEXPOS_BLACK_RED;Czerwony TP_RAWEXPOS_BLACK_RED;Czerwony
TP_RAWEXPOS_LINEAR;Liniowy wspolczynnik korekcji TP_RAWEXPOS_LINEAR;Liniowy wspolczynnik korekcji
TP_RAWEXPOS_PRESER;Zachowanie przeswietlen
TP_RAWEXPOS_RGB;Czerwony, Zielony, Niebieski TP_RAWEXPOS_RGB;Czerwony, Zielony, Niebieski
TP_RAWEXPOS_TWOGREEN;Polacz obie zielenie TP_RAWEXPOS_TWOGREEN;Polacz obie zielenie
TP_RAW_DCBENHANCE;Zastosuj poprawe DCB TP_RAW_DCBENHANCE;Zastosuj poprawe DCB
@ -2032,7 +2029,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: <b>-</b>
!TP_RAW_HPHD;HPHD !TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV !TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image !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_LMMSE;LMMSE
!TP_RAW_MONO;Mono !TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern) !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_122;Quadro Escuro - Seleção Automática
HISTORY_MSG_123;Quadro Escuro - Arquivo HISTORY_MSG_123;Quadro Escuro - Arquivo
HISTORY_MSG_124;Correção de ponto branco HISTORY_MSG_124;Correção de ponto branco
HISTORY_MSG_125;Preservação da nitidez
HISTORY_MSG_126;Flat-Field - Arquivo HISTORY_MSG_126;Flat-Field - Arquivo
HISTORY_MSG_127;Flat-Field - Seleção automática HISTORY_MSG_127;Flat-Field - Seleção automática
HISTORY_MSG_128;Flat-Field - Raio de desfoque 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_RAWCACORR_CAREDBLUE;vermelho & azul CA
PARTIALPASTE_RAWEXPOS_BLACK;Níveis de preto PARTIALPASTE_RAWEXPOS_BLACK;Níveis de preto
PARTIALPASTE_RAWEXPOS_LINEAR;Correção de ponto branco PARTIALPASTE_RAWEXPOS_LINEAR;Correção de ponto branco
PARTIALPASTE_RAWEXPOS_PRESER;preservação do realce
PARTIALPASTE_RAWGROUP;Configurações Raw PARTIALPASTE_RAWGROUP;Configurações Raw
PARTIALPASTE_RAW_BORDER;Borda raw PARTIALPASTE_RAW_BORDER;Borda raw
PARTIALPASTE_RAW_DCBENHANCE;Aprimoramento DCB PARTIALPASTE_RAW_DCBENHANCE;Aprimoramento DCB
@ -1758,7 +1756,6 @@ TP_RAWEXPOS_BLACK_BLUE;Azul
TP_RAWEXPOS_BLACK_GREEN;Verde TP_RAWEXPOS_BLACK_GREEN;Verde
TP_RAWEXPOS_BLACK_RED;Vermelho TP_RAWEXPOS_BLACK_RED;Vermelho
TP_RAWEXPOS_LINEAR;Correção de ponto branco TP_RAWEXPOS_LINEAR;Correção de ponto branco
TP_RAWEXPOS_PRESER;Preservação do realce
TP_RAWEXPOS_RGB;Vermelho, Verde, Azul TP_RAWEXPOS_RGB;Vermelho, Verde, Azul
TP_RAWEXPOS_TWOGREEN;Ligações verdes TP_RAWEXPOS_TWOGREEN;Ligações verdes
TP_RAW_1PASSMEDIUM;1-Passar (Medio) TP_RAW_1PASSMEDIUM;1-Passar (Medio)
@ -2313,6 +2310,7 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: <b>-</b>
!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift !TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift
!TP_RAW_DUALDEMOSAICAUTOCONTRAST;Auto threshold !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_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_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_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 !TP_RETINEX_MAP;Method

View File

@ -368,7 +368,6 @@ HISTORY_MSG_121;(raw) Авто ХА
HISTORY_MSG_122;Авто темновой кадр HISTORY_MSG_122;Авто темновой кадр
HISTORY_MSG_123;Файл темнового кадра HISTORY_MSG_123;Файл темнового кадра
HISTORY_MSG_124;Коррекция баланса белого HISTORY_MSG_124;Коррекция баланса белого
HISTORY_MSG_125;Сохранение пересветов
HISTORY_MSG_126;Файл плоского поля HISTORY_MSG_126;Файл плоского поля
HISTORY_MSG_127;Автовыбор плоского поля HISTORY_MSG_127;Автовыбор плоского поля
HISTORY_MSG_128;Радиус размытия плоского поля HISTORY_MSG_128;Радиус размытия плоского поля
@ -704,7 +703,6 @@ PARTIALPASTE_PREPROCESS_LINEDENOISE;Фильтр полосообразного
PARTIALPASTE_RAWCACORR_AUTO;Автоматическая коррекция ХА PARTIALPASTE_RAWCACORR_AUTO;Автоматическая коррекция ХА
PARTIALPASTE_RAWEXPOS_BLACK;Уровень черного PARTIALPASTE_RAWEXPOS_BLACK;Уровень черного
PARTIALPASTE_RAWEXPOS_LINEAR;Коррекция точки белого PARTIALPASTE_RAWEXPOS_LINEAR;Коррекция точки белого
PARTIALPASTE_RAWEXPOS_PRESER;Сохранение пересветов
PARTIALPASTE_RAWGROUP;Настройки Raw PARTIALPASTE_RAWGROUP;Настройки Raw
PARTIALPASTE_RAW_DCBENHANCE;Применить расширенный DCB PARTIALPASTE_RAW_DCBENHANCE;Применить расширенный DCB
PARTIALPASTE_RAW_DCBITERATIONS;Количество проходов DCB PARTIALPASTE_RAW_DCBITERATIONS;Количество проходов DCB
@ -1322,7 +1320,6 @@ TP_RAWEXPOS_BLACK_BLUE;Синий
TP_RAWEXPOS_BLACK_GREEN;Зелёный TP_RAWEXPOS_BLACK_GREEN;Зелёный
TP_RAWEXPOS_BLACK_RED;Красный TP_RAWEXPOS_BLACK_RED;Красный
TP_RAWEXPOS_LINEAR;Коррекция точки белого TP_RAWEXPOS_LINEAR;Коррекция точки белого
TP_RAWEXPOS_PRESER;Сохранение пересветов
TP_RAWEXPOS_RGB;Красный, Зелёный, Синий TP_RAWEXPOS_RGB;Красный, Зелёный, Синий
TP_RAWEXPOS_TWOGREEN;Два зеленых совместно TP_RAWEXPOS_TWOGREEN;Два зеленых совместно
TP_RAW_AHD;AHD 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_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_DUALDEMOSAICCONTRAST;Contrast threshold
!TP_RAW_IMAGENUM;Sub-image !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_PIXELSHIFTBLUR;Blur motion mask
!TP_RAW_PIXELSHIFTDMETHOD;Demosaic method for motion !TP_RAW_PIXELSHIFTDMETHOD;Demosaic method for motion
!TP_RAW_PIXELSHIFTEPERISO;Sensitivity !TP_RAW_PIXELSHIFTEPERISO;Sensitivity

View File

@ -312,7 +312,6 @@ HISTORY_MSG_121;Сам исправи аберације
HISTORY_MSG_122;Сам примени тамни кадар HISTORY_MSG_122;Сам примени тамни кадар
HISTORY_MSG_123;Датотека за тамни кадар HISTORY_MSG_123;Датотека за тамни кадар
HISTORY_MSG_124;Линеарна исправка експ. HISTORY_MSG_124;Линеарна исправка експ.
HISTORY_MSG_125;Поправка експ. уз очување светлог
HISTORY_MSG_126;Датотека са равним пољем HISTORY_MSG_126;Датотека са равним пољем
HISTORY_MSG_127;Сам изабери равно поље HISTORY_MSG_127;Сам изабери равно поље
HISTORY_MSG_128;Полупречник равног поља HISTORY_MSG_128;Полупречник равног поља
@ -570,7 +569,6 @@ PARTIALPASTE_PREPROCESS_LINEDENOISE;Линијски филтер шума
PARTIALPASTE_RAWCACORR_AUTO;Ауто хроматске аберације PARTIALPASTE_RAWCACORR_AUTO;Ауто хроматске аберације
PARTIALPASTE_RAWEXPOS_BLACK;Ниво црне PARTIALPASTE_RAWEXPOS_BLACK;Ниво црне
PARTIALPASTE_RAWEXPOS_LINEAR;Линеарни фактор исправке RAW беле тачке PARTIALPASTE_RAWEXPOS_LINEAR;Линеарни фактор исправке RAW беле тачке
PARTIALPASTE_RAWEXPOS_PRESER;Raw тачка беле уз очување светлих делова
PARTIALPASTE_RAWGROUP;Raw подешавања PARTIALPASTE_RAWGROUP;Raw подешавања
PARTIALPASTE_RAW_DCBENHANCE;Примени корак ДЦБ побољшања PARTIALPASTE_RAW_DCBENHANCE;Примени корак ДЦБ побољшања
PARTIALPASTE_RAW_DCBITERATIONS;Број ДЦБ понављања PARTIALPASTE_RAW_DCBITERATIONS;Број ДЦБ понављања
@ -1092,7 +1090,6 @@ TP_RAWCACORR_CABLUE;Плава
TP_RAWCACORR_CARED;Црвена TP_RAWCACORR_CARED;Црвена
TP_RAWEXPOS_BLACKS;Ниво црне TP_RAWEXPOS_BLACKS;Ниво црне
TP_RAWEXPOS_LINEAR;Линеарни фактор корекције TP_RAWEXPOS_LINEAR;Линеарни фактор корекције
TP_RAWEXPOS_PRESER;Очување светлих делова
TP_RAWEXPOS_TWOGREEN;Обе зелене TP_RAWEXPOS_TWOGREEN;Обе зелене
TP_RAW_DCBENHANCE;Примени ДЦБ побољшање TP_RAW_DCBENHANCE;Примени ДЦБ побољшање
TP_RAW_DCBITERATIONS;Број ДЦБ пролаза TP_RAW_DCBITERATIONS;Број ДЦБ пролаза
@ -2024,7 +2021,8 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике <b>-</b>
!TP_RAW_HPHD;HPHD !TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV !TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image !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_LMMSE;LMMSE
!TP_RAW_MONO;Mono !TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern) !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_122;Sam primeni tamni kadar
HISTORY_MSG_123;Datoteka za tamni kadar HISTORY_MSG_123;Datoteka za tamni kadar
HISTORY_MSG_124;Linearna ispravka eksp. HISTORY_MSG_124;Linearna ispravka eksp.
HISTORY_MSG_125;Popravka eksp. uz očuvanje svetlog
HISTORY_MSG_126;Datoteka sa ravnim poljem HISTORY_MSG_126;Datoteka sa ravnim poljem
HISTORY_MSG_127;Sam izaberi ravno polje HISTORY_MSG_127;Sam izaberi ravno polje
HISTORY_MSG_128;Poluprečnik ravnog polja HISTORY_MSG_128;Poluprečnik ravnog polja
@ -570,7 +569,6 @@ PARTIALPASTE_PREPROCESS_LINEDENOISE;Linijski filter šuma
PARTIALPASTE_RAWCACORR_AUTO;Auto hromatske aberacije PARTIALPASTE_RAWCACORR_AUTO;Auto hromatske aberacije
PARTIALPASTE_RAWEXPOS_BLACK;Nivo crne PARTIALPASTE_RAWEXPOS_BLACK;Nivo crne
PARTIALPASTE_RAWEXPOS_LINEAR;Linearni faktor ispravke RAW bele tačke 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_RAWGROUP;Raw podešavanja
PARTIALPASTE_RAW_DCBENHANCE;Primeni korak DCB poboljšanja PARTIALPASTE_RAW_DCBENHANCE;Primeni korak DCB poboljšanja
PARTIALPASTE_RAW_DCBITERATIONS;Broj DCB ponavljanja PARTIALPASTE_RAW_DCBITERATIONS;Broj DCB ponavljanja
@ -1092,7 +1090,6 @@ TP_RAWCACORR_CABLUE;Plava
TP_RAWCACORR_CARED;Crvena TP_RAWCACORR_CARED;Crvena
TP_RAWEXPOS_BLACKS;Nivo crne TP_RAWEXPOS_BLACKS;Nivo crne
TP_RAWEXPOS_LINEAR;Linearni faktor korekcije TP_RAWEXPOS_LINEAR;Linearni faktor korekcije
TP_RAWEXPOS_PRESER;Očuvanje svetlih delova
TP_RAWEXPOS_TWOGREEN;Obe zelene TP_RAWEXPOS_TWOGREEN;Obe zelene
TP_RAW_DCBENHANCE;Primeni DCB poboljšanje TP_RAW_DCBENHANCE;Primeni DCB poboljšanje
TP_RAW_DCBITERATIONS;Broj DCB prolaza TP_RAW_DCBITERATIONS;Broj DCB prolaza
@ -2024,7 +2021,8 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike <b>-</b>
!TP_RAW_HPHD;HPHD !TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV !TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image !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_LMMSE;LMMSE
!TP_RAW_MONO;Mono !TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern) !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_122;Dark-Frame - Auto-selection
!HISTORY_MSG_123;Dark-Frame - File !HISTORY_MSG_123;Dark-Frame - File
!HISTORY_MSG_124;White point correction !HISTORY_MSG_124;White point correction
!HISTORY_MSG_125;Highlight preservation
!HISTORY_MSG_126;Flat-Field - File !HISTORY_MSG_126;Flat-Field - File
!HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_127;Flat-Field - Auto-selection
!HISTORY_MSG_128;Flat-Field - Blur radius !HISTORY_MSG_128;Flat-Field - Blur radius
@ -1256,7 +1255,6 @@ ZOOMPANEL_ZOOMOUT;Oddialiť <b>-</b>
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue !PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels !PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction !PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
!PARTIALPASTE_RAWGROUP;Raw Settings !PARTIALPASTE_RAWGROUP;Raw Settings
!PARTIALPASTE_RAW_BORDER;Raw border !PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement !PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement
@ -1910,7 +1908,6 @@ ZOOMPANEL_ZOOMOUT;Oddialiť <b>-</b>
!TP_RAWEXPOS_BLACK_GREEN;Green !TP_RAWEXPOS_BLACK_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red !TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_LINEAR;White-point correction !TP_RAWEXPOS_LINEAR;White-point correction
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue !TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens !TP_RAWEXPOS_TWOGREEN;Link greens
!TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) !TP_RAW_1PASSMEDIUM;1-pass (Markesteijn)
@ -1936,7 +1933,8 @@ ZOOMPANEL_ZOOMOUT;Oddialiť <b>-</b>
!TP_RAW_HPHD;HPHD !TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV !TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image !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_LABEL;Demosaicing
!TP_RAW_LMMSE;LMMSE !TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps !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_122;Dark-Frame - Auto-selection
!HISTORY_MSG_123;Dark-Frame - File !HISTORY_MSG_123;Dark-Frame - File
!HISTORY_MSG_124;White point correction !HISTORY_MSG_124;White point correction
!HISTORY_MSG_125;Highlight preservation
!HISTORY_MSG_126;Flat-Field - File !HISTORY_MSG_126;Flat-Field - File
!HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_127;Flat-Field - Auto-selection
!HISTORY_MSG_128;Flat-Field - Blur radius !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_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels !PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction !PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
!PARTIALPASTE_RAWGROUP;Raw Settings !PARTIALPASTE_RAWGROUP;Raw Settings
!PARTIALPASTE_RAW_BORDER;Raw border !PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement !PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement
@ -1896,7 +1894,6 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!TP_RAWEXPOS_BLACK_GREEN;Green !TP_RAWEXPOS_BLACK_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red !TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_LINEAR;White-point correction !TP_RAWEXPOS_LINEAR;White-point correction
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue !TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens !TP_RAWEXPOS_TWOGREEN;Link greens
!TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) !TP_RAW_1PASSMEDIUM;1-pass (Markesteijn)
@ -1924,7 +1921,8 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!TP_RAW_HPHD;HPHD !TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV !TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image !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_LABEL;Demosaicing
!TP_RAW_LMMSE;LMMSE !TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps !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_122;Automat. svartbildsval
HISTORY_MSG_123;Svartbildsfil HISTORY_MSG_123;Svartbildsfil
HISTORY_MSG_124;Vitpunktskorrigering HISTORY_MSG_124;Vitpunktskorrigering
HISTORY_MSG_125;Högdagerbevarande
HISTORY_MSG_126;Plattfältsfil HISTORY_MSG_126;Plattfältsfil
HISTORY_MSG_127;Automatiskt val av plattfält HISTORY_MSG_127;Automatiskt val av plattfält
HISTORY_MSG_128;Oskärperadie för 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_RAWCACORR_AUTO;Reducera kromatiska abberationer automatiskt
PARTIALPASTE_RAWEXPOS_BLACK;Svärta PARTIALPASTE_RAWEXPOS_BLACK;Svärta
PARTIALPASTE_RAWEXPOS_LINEAR;Vitpunktskorrigering PARTIALPASTE_RAWEXPOS_LINEAR;Vitpunktskorrigering
PARTIALPASTE_RAWEXPOS_PRESER;Korrigering av högdagrar
PARTIALPASTE_RAWGROUP;Råbildsinställningar PARTIALPASTE_RAWGROUP;Råbildsinställningar
PARTIALPASTE_RAW_DCBENHANCE;DCB-förbättringssteg PARTIALPASTE_RAW_DCBENHANCE;DCB-förbättringssteg
PARTIALPASTE_RAW_DCBITERATIONS;Antal DCB-iterationer PARTIALPASTE_RAW_DCBITERATIONS;Antal DCB-iterationer
@ -1458,7 +1456,6 @@ TP_RAWEXPOS_BLACK_BLUE;Blå
TP_RAWEXPOS_BLACK_GREEN;Grön TP_RAWEXPOS_BLACK_GREEN;Grön
TP_RAWEXPOS_BLACK_RED;Röd TP_RAWEXPOS_BLACK_RED;Röd
TP_RAWEXPOS_LINEAR;Vitpunktskorrigering TP_RAWEXPOS_LINEAR;Vitpunktskorrigering
TP_RAWEXPOS_PRESER;Bevara högdagrar
TP_RAWEXPOS_RGB;Röd, grön, blå TP_RAWEXPOS_RGB;Röd, grön, blå
TP_RAWEXPOS_TWOGREEN;Två gröna tillsammans TP_RAWEXPOS_TWOGREEN;Två gröna tillsammans
TP_RAW_DCBENHANCE;DCB-förbättringssteg TP_RAW_DCBENHANCE;DCB-förbättringssteg
@ -2213,7 +2210,8 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: <b>-</b>
!TP_RAW_HPHD;HPHD !TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV !TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image !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_LMMSE;LMMSE
!TP_RAW_MONO;Mono !TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern) !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_122;Dark-Frame - Auto-selection
!HISTORY_MSG_123;Dark-Frame - File !HISTORY_MSG_123;Dark-Frame - File
!HISTORY_MSG_124;White point correction !HISTORY_MSG_124;White point correction
!HISTORY_MSG_125;Highlight preservation
!HISTORY_MSG_126;Flat-Field - File !HISTORY_MSG_126;Flat-Field - File
!HISTORY_MSG_127;Flat-Field - Auto-selection !HISTORY_MSG_127;Flat-Field - Auto-selection
!HISTORY_MSG_128;Flat-Field - Blur radius !HISTORY_MSG_128;Flat-Field - Blur radius
@ -1204,7 +1203,6 @@ TP_WBALANCE_TEMPERATURE;Isı
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue !PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels !PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction !PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
!PARTIALPASTE_RAWGROUP;Raw Settings !PARTIALPASTE_RAWGROUP;Raw Settings
!PARTIALPASTE_RAW_BORDER;Raw border !PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement !PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement
@ -1895,7 +1893,6 @@ TP_WBALANCE_TEMPERATURE;Isı
!TP_RAWEXPOS_BLACK_GREEN;Green !TP_RAWEXPOS_BLACK_GREEN;Green
!TP_RAWEXPOS_BLACK_RED;Red !TP_RAWEXPOS_BLACK_RED;Red
!TP_RAWEXPOS_LINEAR;White-point correction !TP_RAWEXPOS_LINEAR;White-point correction
!TP_RAWEXPOS_PRESER;Highlight preservation
!TP_RAWEXPOS_RGB;Red, Green, Blue !TP_RAWEXPOS_RGB;Red, Green, Blue
!TP_RAWEXPOS_TWOGREEN;Link greens !TP_RAWEXPOS_TWOGREEN;Link greens
!TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) !TP_RAW_1PASSMEDIUM;1-pass (Markesteijn)
@ -1923,7 +1920,8 @@ TP_WBALANCE_TEMPERATURE;Isı
!TP_RAW_HPHD;HPHD !TP_RAW_HPHD;HPHD
!TP_RAW_IGV;IGV !TP_RAW_IGV;IGV
!TP_RAW_IMAGENUM;Sub-image !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_LABEL;Demosaicing
!TP_RAW_LMMSE;LMMSE !TP_RAW_LMMSE;LMMSE
!TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps !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_122;Dark-Frame - Auto-selection
HISTORY_MSG_123;Dark-Frame - File HISTORY_MSG_123;Dark-Frame - File
HISTORY_MSG_124;White point correction HISTORY_MSG_124;White point correction
HISTORY_MSG_125;Highlight preservation
HISTORY_MSG_126;Flat-Field - File HISTORY_MSG_126;Flat-Field - File
HISTORY_MSG_127;Flat-Field - Auto-selection HISTORY_MSG_127;Flat-Field - Auto-selection
HISTORY_MSG_128;Flat-Field - Blur radius 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_RAWCACORR_CAREDBLUE;CA red & blue
PARTIALPASTE_RAWEXPOS_BLACK;Black levels PARTIALPASTE_RAWEXPOS_BLACK;Black levels
PARTIALPASTE_RAWEXPOS_LINEAR;White point correction PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
PARTIALPASTE_RAWGROUP;Raw Settings PARTIALPASTE_RAWGROUP;Raw Settings
PARTIALPASTE_RAW_BORDER;Raw border PARTIALPASTE_RAW_BORDER;Raw border
PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement PARTIALPASTE_RAW_DCBENHANCE;DCB enhancement
@ -1844,7 +1842,6 @@ TP_RAWEXPOS_BLACK_BLUE;Blue
TP_RAWEXPOS_BLACK_GREEN;Green TP_RAWEXPOS_BLACK_GREEN;Green
TP_RAWEXPOS_BLACK_RED;Red TP_RAWEXPOS_BLACK_RED;Red
TP_RAWEXPOS_LINEAR;White-point correction TP_RAWEXPOS_LINEAR;White-point correction
TP_RAWEXPOS_PRESER;Highlight preservation
TP_RAWEXPOS_RGB;Red, Green, Blue TP_RAWEXPOS_RGB;Red, Green, Blue
TP_RAWEXPOS_TWOGREEN;Link greens TP_RAWEXPOS_TWOGREEN;Link greens
TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) 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_HPHD;HPHD
TP_RAW_IGV;IGV TP_RAW_IGV;IGV
TP_RAW_IMAGENUM;Sub-image 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_LABEL;Demosaicing
TP_RAW_LMMSE;LMMSE TP_RAW_LMMSE;LMMSE
TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps TP_RAW_LMMSEITERATIONS;LMMSE enhancement steps

View File

@ -2,7 +2,7 @@
This file is part of RawTherapee. This file is part of RawTherapee.
Copyright (c) 2016-2018 TooWaBoo Copyright (c) 2016-2018 TooWaBoo
Version 3.00 Version 3.02
RawTherapee is free software: you can redistribute it and/or modify RawTherapee is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by 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; padding-right: 0.25em;
} }
#RightNotebook > stack > :nth-child(1) > * > box, #RightNotebook > stack > scrolledwindow > viewport {
#RightNotebook > stack > :nth-child(4) > * > box { padding: 0 0.5em;
padding: 0.5em; border: 0.083333333333333333em solid @bg-dark-grey;
border: 0.083333333333333333em solid @bg-entry-border;
} }
#PrefNotebook > header { #PrefNotebook > header {
@ -1061,7 +1060,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
min-width: 0; min-width: 0;
padding: 0; padding: 0;
} }
#FileBrowserQueryToolbar { #FileBrowserQueryToolbar > viewport > box {
margin: 0 0 0.416666666666666666em 0; margin: 0 0 0.416666666666666666em 0;
min-height: 0; min-height: 0;
min-width: 0; min-width: 0;
@ -1646,7 +1645,7 @@ messagedialog .dialog-action-area button:not(:only-child):nth-child(2) {
min-width: 1.666666666666666666em;/*x*/ min-width: 1.666666666666666666em;/*x*/
margin: 0; margin: 0;
border-radius: 0 0.2em 0.2em 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; border: 0.083333333333333333em solid @bg-entry-border;
background-color: @bg-scale-entry; background-color: @bg-scale-entry;
padding: 0; padding: 0;
@ -1866,19 +1865,17 @@ spinbutton {
min-height: 1.666666666666666666em;/*x*/ min-height: 1.666666666666666666em;/*x*/
min-width: 0; min-width: 0;
border-radius: 0.2em; 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; border: 0.083333333333333333em solid @bg-entry-border;
background-color: @bg-scale-entry; background-color: @bg-scale-entry;
} }
#FileBrowserQueryToolbar entry, #FileBrowserQueryToolbar entry,
#FileBrowserIconToolbar entry { #FileBrowserIconToolbar entry {
min-height: 1.666666666666666666em;/*x*/
min-width: 0;
margin: 0; margin: 0;
border-right: none; border-right: none;
border-top-right-radius: 0; border-top-right-radius: 0;
border-bottom-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 { #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); 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); oldraw = new array2D<float>((W + 1- 2 * cb) / 2, H- 2 * cb);
// copy raw values before ca correction // copy raw values before ca correction
#ifdef _OPENMP
#pragma omp parallel for #pragma omp parallel for
#endif
for (int i = cb; i < H - cb; ++i) { for (int i = cb; i < H - cb; ++i) {
for (int j = cb + (FC(i, 0) & 1); j < W - cb; j += 2) { for (int j = cb + (FC(i, 0) & 1); j < W - cb; j += 2) {
(*oldraw)[i - cb][(j - cb) / 2] = rawData[i][j]; (*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 constexpr float eps = 1e-5f, eps2 = 1e-10f; //tolerance to avoid dividing by zero
#ifdef _OPENMP
#pragma omp parallel #pragma omp parallel
#endif
{ {
int progresscounter = 0; int progresscounter = 0;
@ -274,7 +278,9 @@ float* RawImageSource::CA_correct_RT(
float blocksqavethr[2][2] = {}; float blocksqavethr[2][2] = {};
float blockdenomthr[2][2] = {}; float blockdenomthr[2][2] = {};
#ifdef _OPENMP
#pragma omp for collapse(2) schedule(dynamic) nowait #pragma omp for collapse(2) schedule(dynamic) nowait
#endif
for (int top = -border ; top < height; top += ts - border2) { for (int top = -border ; top < height; top += ts - border2) {
for (int left = -border; left < width - (W & 1); left += ts - border2) { for (int left = -border; left < width - (W & 1); left += ts - border2) {
memset(bufferThr, 0, buffersize); memset(bufferThr, 0, buffersize);
@ -647,7 +653,9 @@ float* RawImageSource::CA_correct_RT(
progresscounter++; progresscounter++;
if (progresscounter % 8 == 0) { if (progresscounter % 8 == 0) {
#ifdef _OPENMP
#pragma omp critical (cadetectpass1) #pragma omp critical (cadetectpass1)
#endif
{ {
progress += 4.0 * SQR(ts - border2) / (iterations * height * width); progress += 4.0 * SQR(ts - border2) / (iterations * height * width);
progress = std::min(progress, 1.0); progress = std::min(progress, 1.0);
@ -658,7 +666,9 @@ float* RawImageSource::CA_correct_RT(
} }
} }
//end of diagnostic pass //end of diagnostic pass
#ifdef _OPENMP
#pragma omp critical (cadetectpass2) #pragma omp critical (cadetectpass2)
#endif
{ {
for (int dir = 0; dir < 2; dir++) { for (int dir = 0; dir < 2; dir++) {
for (int c = 0; c < 2; c++) { for (int c = 0; c < 2; c++) {
@ -668,9 +678,13 @@ float* RawImageSource::CA_correct_RT(
} }
} }
} }
#ifdef _OPENMP
#pragma omp barrier #pragma omp barrier
#endif
#ifdef _OPENMP
#pragma omp single #pragma omp single
#endif
{ {
for (int dir = 0; dir < 2; dir++) for (int dir = 0; dir < 2; dir++)
for (int c = 0; c < 2; c++) { 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 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 //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 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) #pragma omp for schedule(dynamic) collapse(2)
#endif
for (int top = -border; top < height; top += ts - border2) { for (int top = -border; top < height; top += ts - border2) {
for (int left = -border; left < width - (W & 1); left += ts - border2) { for (int left = -border; left < width - (W & 1); left += ts - border2) {
memset(bufferThr, 0, buffersizePassTwo); memset(bufferThr, 0, buffersizePassTwo);
@ -1197,7 +1213,9 @@ float* RawImageSource::CA_correct_RT(
progresscounter++; progresscounter++;
if (progresscounter % 8 == 0) if (progresscounter % 8 == 0)
#ifdef _OPENMP
#pragma omp critical (cacorrect) #pragma omp critical (cacorrect)
#endif
{ {
progress += 4.0 * SQR(ts - border2) / (iterations * height * width); progress += 4.0 * SQR(ts - border2) / (iterations * height * width);
progress = std::min(progress, 1.0); progress = std::min(progress, 1.0);
@ -1208,7 +1226,9 @@ float* RawImageSource::CA_correct_RT(
} }
// copy temporary image matrix back to image matrix // copy temporary image matrix back to image matrix
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
for (int row = cb; row < height - cb; row++) { for (int row = cb; row < height - cb; row++) {
int col = cb + (FC(row, 0) & 1); 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. // 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 // Then we apply the resulting factors per pixel on the result of raw ca correction
#ifdef _OPENMP
#pragma omp parallel #pragma omp parallel
#endif
{ {
#ifdef __SSE2__ #ifdef __SSE2__
const vfloat onev = F2V(1.f); const vfloat onev = F2V(1.f);
const vfloat twov = F2V(2.f); const vfloat twov = F2V(2.f);
const vfloat zd5v = F2V(0.5f); const vfloat zd5v = F2V(0.5f);
#endif #endif
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
for (int i = 0; i < H - 2 * cb; ++i) { for (int i = 0; i < H - 2 * cb; ++i) {
const int firstCol = FC(i, 0) & 1; const int firstCol = FC(i, 0) & 1;
const int colour = FC(i, firstCol); const int colour = FC(i, firstCol);
@ -1260,7 +1284,9 @@ float* RawImageSource::CA_correct_RT(
} }
} }
#ifdef _OPENMP
#pragma omp single #pragma omp single
#endif
{ {
if (H % 2) { if (H % 2) {
// odd height => factors are not set in last row => use values of preceding row // 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); gaussianBlur(*blueFactor, *blueFactor, (W + 1 - 2 * cb) / 2, (H + 1 - 2 * cb) / 2, 30.0);
// apply correction factors to avoid (reduce) colour shift // apply correction factors to avoid (reduce) colour shift
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
for (int i = 0; i < H - 2 * cb; ++i) { for (int i = 0; i < H - 2 * cb; ++i) {
const int firstCol = FC(i, 0) & 1; const int firstCol = FC(i, 0) & 1;
const int colour = FC(i, firstCol); const int colour = FC(i, firstCol);

View File

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

View File

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

View File

@ -1838,11 +1838,15 @@ BENCHFUN
for (int iteration = 1; iteration <= dnparams.passes; ++iteration) { for (int iteration = 1; iteration <= dnparams.passes; ++iteration) {
#ifdef _OPENMP
#pragma omp parallel #pragma omp parallel
#endif
{ {
if (methmed < 2) if (methmed < 2)
{ {
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
for (int i = 1; i < hei - 1; ++i) { for (int i = 1; i < hei - 1; ++i) {
if (methmed == 0) { if (methmed == 0) {
@ -1857,7 +1861,9 @@ BENCHFUN
} }
} else } else
{ {
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
for (int i = 2; i < hei - 2; ++i) { for (int i = 2; i < hei - 2; ++i) {
if (methmed == 3) { if (methmed == 3) {
@ -1901,7 +1907,9 @@ BENCHFUN
if (methmed < 2) if (methmed < 2)
{ {
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
for (int i = 1; i < hei - 1; ++i) { for (int i = 1; i < hei - 1; ++i) {
if (methmed == 0) { if (methmed == 0) {
@ -1916,7 +1924,9 @@ BENCHFUN
} }
} else } else
{ {
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
for (int i = 2; i < hei - 2; ++i) { for (int i = 2; i < hei - 2; ++i) {
if (methmed == 3) { if (methmed == 3) {
@ -1961,7 +1971,9 @@ BENCHFUN
if (methmed < 2) if (methmed < 2)
{ {
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
for (int i = 1; i < hei - 1; ++i) { for (int i = 1; i < hei - 1; ++i) {
if (methmed == 0) { if (methmed == 0) {
@ -1976,7 +1988,9 @@ BENCHFUN
} }
} else } else
{ {
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
for (int i = 2; i < hei - 2; ++i) { for (int i = 2; i < hei - 2; ++i) {
if (methmed == 3) { 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) BL_BEGIN(318, 1)
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
BL_OPER3(1, 7, 7, 55) BL_OPER3(1, 7, 7, 55)
BL_FREE BL_FREE
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
BL_END(1) 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) BL_BEGIN(768, 1)
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
BL_OPER3(1, 4, 4, 16) BL_OPER3(1, 4, 4, 16)
BL_FREE BL_FREE
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
BL_END(1) 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) BL_BEGIN(366, 2)
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
BL_OPER5(0, 0, 1, 0, 8, 21, 1, 21, 59) BL_OPER5(0, 0, 1, 0, 8, 21, 1, 21, 59)
BL_FREE BL_FREE
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
BL_END(2) 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) BL_BEGIN(753, 2)
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
BL_OPER5(0, 0, 1, 0, 5, 10, 1, 10, 23) BL_OPER5(0, 0, 1, 0, 5, 10, 1, 10, 23)
BL_FREE BL_FREE
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
BL_END(2) 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) BL_BEGIN(595, 2)
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
BL_OPER5(0, 1, 2, 1, 6, 12, 2, 12, 22) BL_OPER5(0, 1, 2, 1, 6, 12, 2, 12, 22)
BL_FREE BL_FREE
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
BL_END(2) 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) BL_BEGIN(910, 2)
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
BL_OPER5(0, 1, 2, 1, 4, 7, 2, 7, 12) BL_OPER5(0, 1, 2, 1, 4, 7, 2, 7, 12)
BL_FREE BL_FREE
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
BL_END(2) 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) BL_BEGIN(209, 3)
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
BL_OPER7(0, 0, 1, 1, 0, 2, 5, 8, 1, 5, 18, 27, 1, 8, 27, 41) BL_OPER7(0, 0, 1, 1, 0, 2, 5, 8, 1, 5, 18, 27, 1, 8, 27, 41)
BL_FREE BL_FREE
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
BL_END(3) 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) BL_BEGIN(322, 3)
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
BL_OPER7(0, 0, 1, 1, 0, 1, 4, 6, 1, 4, 11, 16, 1, 6, 16, 23) BL_OPER7(0, 0, 1, 1, 0, 1, 4, 6, 1, 4, 11, 16, 1, 6, 16, 23)
BL_FREE BL_FREE
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
BL_END(3) 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) BL_BEGIN(336, 3)
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
BL_OPER7(0, 0, 1, 1, 0, 2, 4, 6, 1, 4, 11, 14, 1, 6, 14, 19) BL_OPER7(0, 0, 1, 1, 0, 2, 4, 6, 1, 4, 11, 14, 1, 6, 14, 19)
BL_FREE BL_FREE
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
BL_END(3) 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) BL_BEGIN(195, 3)
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
BL_OPER7(0, 1, 2, 3, 1, 4, 8, 10, 2, 8, 17, 21, 3, 10, 21, 28) BL_OPER7(0, 1, 2, 3, 1, 4, 8, 10, 2, 8, 17, 21, 3, 10, 21, 28)
BL_FREE BL_FREE
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
BL_END(3) 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) BL_BEGIN(132, 4)
#ifdef _OPENMP
#pragma omp for #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_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 BL_FREE
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
BL_END(4) 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) BL_BEGIN(180, 4)
#ifdef _OPENMP
#pragma omp for #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_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 BL_FREE
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
BL_END(4) 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) BL_BEGIN(195, 4)
#ifdef _OPENMP
#pragma omp for #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_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 BL_FREE
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
BL_END(4) 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) BL_BEGIN(151, 4)
#ifdef _OPENMP
#pragma omp for #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_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 BL_FREE
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
BL_END(4) 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) BL_BEGIN(151, 4)
#ifdef _OPENMP
#pragma omp for #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_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 BL_FREE
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
BL_END(4) 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) BL_BEGIN(116, 5)
#ifdef _OPENMP
#pragma omp for #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_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 BL_FREE
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
BL_END(5) 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) BL_BEGIN(127, 5)
#ifdef _OPENMP
#pragma omp for #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_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 BL_FREE
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
BL_END(5) 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) BL_BEGIN(109, 5)
#ifdef _OPENMP
#pragma omp for #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_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 BL_FREE
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
BL_END(5) 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) BL_BEGIN(132, 5)
#ifdef _OPENMP
#pragma omp for #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_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 BL_FREE
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
BL_END(5) 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) BL_BEGIN(156, 5)
#ifdef _OPENMP
#pragma omp for #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_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 BL_FREE
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
BL_END(5) 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) BL_BEGIN(173, 5)
#ifdef _OPENMP
#pragma omp for #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_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 BL_FREE
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
BL_END(5) BL_END(5)
} }

View File

@ -2244,9 +2244,8 @@ Camera constants:
"make_model": "Sigma SD14", "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": [ 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 //"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 "ranges": { "black": 15, "white": 7000 },
"raw_crop": [ 0, 0, -0, -0 ] "raw_crop": [ 18, 12, 2652, 1768 ]
//"raw_crop": [ 18, 12, 2652, 1768 ]
}, },
{ // Quality C, correction for frame width { // 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; float noisevarm4 = 4.0f * noisevar;
volatile double progress = 0.0; volatile double progress = 0.0;
float* RawDataTmp = (float*)malloc( width * height * sizeof(float)); float* RawDataTmp = (float*)malloc( width * height * sizeof(float));
#ifdef _OPENMP
#pragma omp parallel #pragma omp parallel
#endif
{ {
// allocate memory and assure the arrays don't have same 64 byte boundary to avoid L1 conflict misses // 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 linehvar[4], linevvar[4], noisefactor[4][8][2], coeffsq;
float dctblock[4][8][8]; float dctblock[4][8][8];
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
for(int i = 0; i < height; i++) for(int i = 0; i < height; i++)
for(int j = 0; j < width; j++) { 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 // Main algorithm: Tile loop
#ifdef _OPENMP
#pragma omp for schedule(dynamic) collapse(2) #pragma omp for schedule(dynamic) collapse(2)
#endif
for (int top = 0; top < height - 16; top += TS - 32) for (int top = 0; top < height - 16; top += TS - 32)
for (int left = 0; left < width - 16; left += 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); free(cfain);
// copy temporary buffer back to image matrix // copy temporary buffer back to image matrix
#ifdef _OPENMP
#pragma omp for schedule(dynamic,16) #pragma omp for schedule(dynamic,16)
#endif
for(int i = 0; i < height; i++) { for(int i = 0; i < height; i++) {
float f = rowblender(i); float f = rowblender(i);

View File

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

View File

@ -159,6 +159,13 @@ protected:
std::string RT_software; std::string RT_software;
double RT_baseline_exposure; 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]; float cam_mul[4], pre_mul[4], cmatrix[3][4], rgb_cam[3][4];
int histogram[4][0x2000]; int histogram[4][0x2000];
@ -395,13 +402,15 @@ void nokia_load_raw();
class pana_bits_t{ class pana_bits_t{
public: public:
pana_bits_t(IMFILE *i, unsigned &u): ifp(i), load_flags(u), vbits(0) {} pana_bits_t(IMFILE *i, unsigned &u, unsigned enc):
unsigned operator()(int nbits); ifp(i), load_flags(u), vbits(0), encoding(enc) {}
unsigned operator()(int nbits, unsigned *bytes=nullptr);
private: private:
IMFILE *ifp; IMFILE *ifp;
unsigned &load_flags; unsigned &load_flags;
uchar buf[0x4000]; uchar buf[0x4000];
int vbits; int vbits;
unsigned encoding;
}; };
void canon_rmf_load_raw(); 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 <cassert>
#include "rawimagesource.h" #include "rawimagesource.h"
#include "rawimagesource_i.h"
#include "jaggedarray.h"
#include "rawimage.h" #include "rawimage.h"
#include "mytime.h" #include "mytime.h"
#include "iccmatrices.h"
#include "iccstore.h"
#include "image8.h" #include "image8.h"
#include "curves.h"
#include "dfmanager.h"
#include "slicer.h"
#include "rt_math.h" #include "rt_math.h"
#include "color.h" #include "color.h"
#include "../rtgui/multilangmgr.h" #include "../rtgui/multilangmgr.h"
@ -37,7 +30,7 @@
#include "sleef.c" #include "sleef.c"
#include "opthelper.h" #include "opthelper.h"
#include "median.h" #include "median.h"
//#define BENCHMARK #define BENCHMARK
#include "StopWatch.h" #include "StopWatch.h"
#ifdef _OPENMP #ifdef _OPENMP
#include <omp.h> #include <omp.h>
@ -60,271 +53,6 @@ extern const Settings* settings;
#define x00625(a) xdivf(a, 4) #define x00625(a) xdivf(a, 4)
#define x0125(a) xdivf(a, 3) #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 #undef fc
#define fc(row,col) \ #define fc(row,col) \
(ri->get_filters() >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3) (ri->get_filters() >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3)
@ -660,7 +388,7 @@ void RawImageSource::jdl_interpolate_omp() // from "Lassus"
} }
#ifdef _OPENMP #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 #endif
{ {
#ifdef _OPENMP #ifdef _OPENMP
@ -1431,7 +1159,7 @@ void RawImageSource::igv_interpolate(int winw, int winh)
} }
#ifdef _OPENMP #ifdef _OPENMP
#pragma omp parallel default(none) shared(rgb,vdif,hdif,chr) #pragma omp parallel shared(rgb,vdif,hdif,chr)
#endif #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; __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; const int v1 = 1 * width, v2 = 2 * width, v3 = 3 * width, v4 = 4 * width, v5 = 5 * width, v6 = 6 * width;
float* rgb[3]; float* rgb[3];
float* chr[2]; float* chr[2];
float (*rgbarray), *vdif, *hdif, (*chrarray); float *rgbarray, *vdif, *hdif, *chrarray;
rgbarray = (float (*)) calloc(width * height * 3, sizeof( float)); rgbarray = (float (*)) calloc(width * height * 3, sizeof( float));
rgb[0] = rgbarray; rgb[0] = rgbarray;
@ -1820,7 +1548,7 @@ void RawImageSource::igv_interpolate(int winw, int winh)
} }
#ifdef _OPENMP #ifdef _OPENMP
#pragma omp parallel default(none) shared(rgb,vdif,hdif,chr) #pragma omp parallel shared(rgb,vdif,hdif,chr)
#endif #endif
{ {
@ -2061,7 +1789,9 @@ void RawImageSource::nodemosaic(bool bw)
red(W, H); red(W, H);
green(W, H); green(W, H);
blue(W, H); blue(W, H);
#ifdef _OPENMP
#pragma omp parallel for #pragma omp parallel for
#endif
for (int i = 0; i < H; i++) { for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) { 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 ) { if( df->getSensorType() == ST_BAYER || df->getSensorType() == ST_FUJI_XTRANS ) {
std::vector<badPix> badPixelsTemp; std::vector<badPix> badPixelsTemp;
#ifdef _OPENMP
#pragma omp parallel #pragma omp parallel
#endif
{ {
std::vector<badPix> badPixelsThread; std::vector<badPix> badPixelsThread;
#ifdef _OPENMP
#pragma omp for nowait #pragma omp for nowait
#endif
for( int row = 2; row < df->get_height() - 2; row++) for( int row = 2; row < df->get_height() - 2; row++)
for( int col = 2; col < df->get_width() - 2; col++) { for( int col = 2; col < df->get_width() - 2; col++) {
@ -235,7 +239,9 @@ void dfInfo::updateBadPixelList( RawImage *df )
} }
} }
#ifdef _OPENMP
#pragma omp critical #pragma omp critical
#endif
badPixelsTemp.insert(badPixelsTemp.end(), badPixelsThread.begin(), badPixelsThread.end()); badPixelsTemp.insert(badPixelsTemp.end(), badPixelsThread.begin(), badPixelsThread.end());
} }
badPixels.insert(badPixels.end(), badPixelsTemp.begin(), badPixelsTemp.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 __SSE2__
#ifdef _OPENMP
#pragma omp parallel for #pragma omp parallel for
#endif
for(int i = 0; i < srcheight; i++) { for(int i = 0; i < srcheight; i++) {
int j; int j;
@ -158,7 +160,9 @@ void ImProcFunctions :: dirpyr_equalizer(float ** src, float ** dst, int srcwidt
} }
#else #else
#ifdef _OPENMP
#pragma omp parallel for #pragma omp parallel for
#endif
for(int i = 0; i < srcheight; i++) { for(int i = 0; i < srcheight; i++) {
for(int j = 0; j < srcwidth; j++) { for(int j = 0; j < srcwidth; j++) {
@ -174,10 +178,14 @@ void ImProcFunctions :: dirpyr_equalizer(float ** src, float ** dst, int srcwidt
} }
#ifdef __SSE2__ #ifdef __SSE2__
#ifdef _OPENMP
#pragma omp parallel #pragma omp parallel
#endif
{ {
__m128 div = _mm_set1_ps(327.68f); __m128 div = _mm_set1_ps(327.68f);
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
for(int i = 0; i < srcheight; i++) { for(int i = 0; i < srcheight; i++) {
int j; int j;
@ -192,7 +200,9 @@ void ImProcFunctions :: dirpyr_equalizer(float ** src, float ** dst, int srcwidt
} }
} }
#else #else
#ifdef _OPENMP
#pragma omp parallel for #pragma omp parallel for
#endif
for(int i = 0; i < srcheight; i++) { for(int i = 0; i < srcheight; i++) {
for(int j = 0; j < srcwidth; j++) { for(int j = 0; j < srcwidth; j++) {
@ -228,7 +238,9 @@ void ImProcFunctions :: dirpyr_equalizer(float ** src, float ** dst, int srcwidt
delete [] tmpHue; delete [] tmpHue;
} }
#ifdef _OPENMP
#pragma omp parallel for #pragma omp parallel for
#endif
for (int i = 0; i < srcheight; i++) for (int i = 0; i < srcheight; i++)
for (int j = 0; j < srcwidth; j++) { 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 } { 0.019334, 0.119193, 0.950227 }
}; };
#ifdef _OPENMP
#pragma omp parallel #pragma omp parallel
#endif
{ {
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
for(int i = 0; i < winh; ++i) { for(int i = 0; i < winh; ++i) {
Color::RGB2L(red[i], green[i], blue[i], L[i], xyz_rgb, winw); 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; contrast = contrastf * 100.f;
// the following is split into 3 loops intentionally to avoid cache conflicts on CPUs with only 4-way cache // 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 #pragma omp parallel for
#endif
for(int i = 0; i < winh; ++i) { for(int i = 0; i < winh; ++i) {
for(int j = 0; j < winw; ++j) { for(int j = 0; j < winw; ++j) {
red[i][j] = intp(blend[i][j], red[i][j], redTmp[i][j]); red[i][j] = intp(blend[i][j], red[i][j], redTmp[i][j]);
} }
} }
#ifdef _OPENMP
#pragma omp parallel for #pragma omp parallel for
#endif
for(int i = 0; i < winh; ++i) { for(int i = 0; i < winh; ++i) {
for(int j = 0; j < winw; ++j) { for(int j = 0; j < winw; ++j) {
green[i][j] = intp(blend[i][j], green[i][j], greenTmp[i][j]); green[i][j] = intp(blend[i][j], green[i][j], greenTmp[i][j]);
} }
} }
#ifdef _OPENMP
#pragma omp parallel for #pragma omp parallel for
#endif
for(int i = 0; i < winh; ++i) { for(int i = 0; i < winh; ++i) {
for(int j = 0; j < winw; ++j) { for(int j = 0; j < winw; ++j) {
blue[i][j] = intp(blend[i][j], blue[i][j], blueTmp[i][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 // Interpolate R and B
#ifdef _OPENMP
#pragma omp parallel for #pragma omp parallel for
#endif
for (int i = 0; i < H; i++) { for (int i = 0; i < H; i++) {
if (i == 0) { 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); 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);
@ -443,4 +445,4 @@ void RawImageSource::eahd_demosaic ()
} }
} }
} }

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) 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 W = src.width();
const int H = src.height(); 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; const array2D<float> &p = src;
array2D<float> &q = dst; 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 = const auto f_subsample =
[=](array2D<float> &d, const array2D<float> &s) -> void [=](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 auto f_upsample = f_subsample;
const int w = W / subsampling; const size_t w = W / subsampling;
const int h = H / 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> I1(w, h);
array2D<float> p1(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); apply(SUBMUL, b, a, meanI, meanp);
DEBUG_DUMP(b); DEBUG_DUMP(b);
meanI.free(); // frees w * h * 4 byte
meanp.free(); // frees w * h * 4 byte
array2D<float> &meana = a; array2D<float> &meana = a;
f_mean(meana, a, r1); f_mean(meana, a, r1);
DEBUG_DUMP(meana); DEBUG_DUMP(meana);
@ -211,11 +218,13 @@ void guidedFilter(const array2D<float> &guide, const array2D<float> &src, array2
f_mean(meanb, b, r1); f_mean(meanb, b, r1);
DEBUG_DUMP(meanb); DEBUG_DUMP(meanb);
blur_buf.resize(0); // frees w * h * 4 byte
array2D<float> meanA(W, H); array2D<float> meanA(W, H);
f_upsample(meanA, meana); f_upsample(meanA, meana);
DEBUG_DUMP(meanA); DEBUG_DUMP(meanA);
array2D<float> meanB(W, H); array2D<float> &meanB = q;
f_upsample(meanB, meanb); f_upsample(meanB, meanb);
DEBUG_DUMP(meanB); DEBUG_DUMP(meanB);

View File

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

View File

@ -16,6 +16,7 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with RawTherapee. If not, see <http://www.gnu.org/licenses/>. * along with RawTherapee. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include <functional>
#include <strings.h> #include <strings.h>
#include <glib/gstdio.h> #include <glib/gstdio.h>
#include <tiff.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) FramesMetaData* FramesMetaData::fromFile (const Glib::ustring& fname, std::unique_ptr<RawMetaDataLocation> rml, bool firstFrameOnly)
@ -900,74 +917,196 @@ procparams::IPTCPairs FramesData::getIPTCData (unsigned int frame) const
} }
} }
bool FramesData::hasExif (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,
bool FramesData::hasIPTC (unsigned int frame) const frame,
{ [](const FrameData& frame_data)
return frames.empty() || frame >= frames.size() ? false : frames.at(frame)->hasIPTC (); {
return frame_data.hasExif();
}
);
} }
tm FramesData::getDateTime (unsigned int frame) const bool FramesData::hasIPTC(unsigned int frame) const
{ {
if (frames.empty() || frame >= frames.size() ) { return getFromFrame<bool>(
return {}; frames,
} else { frame,
return frames.at(frame)->getDateTime (); [](const FrameData& frame_data)
} {
return frame_data.hasIPTC();
}
);
} }
tm FramesData::getDateTime(unsigned int frame) const
{
return getFromFrame<tm>(
frames,
frame,
[](const FrameData& frame_data)
{
return frame_data.getDateTime();
}
);
}
time_t FramesData::getDateTimeAsTS(unsigned int frame) const 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
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
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
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
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
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
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
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
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
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
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
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
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 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; int x1, x2, y1, y2;
params.crop.mapToResized(width, height, scale, x1, x2, y1, y2); params.crop.mapToResized(width, height, scale, x1, x2, y1, y2);
#ifdef _OPENMP
#pragma omp parallel #pragma omp parallel
#endif
{ {
LUTu histThr(65536); LUTu histThr(65536);
histThr.clear(); histThr.clear();
#ifdef _OPENMP
#pragma omp for nowait #pragma omp for nowait
#endif
for (int y = y1; y < y2; y++) { for (int y = y1; y < y2; y++) {
for (int x = x1; x < x2; x++) { 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 #pragma omp critical
#endif
{ {
for(int i = 0; i <= 0xffff; i++) { for(int i = 0; i <= 0xffff; i++) {
hist[i] += histThr[i]; hist[i] += histThr[i];
@ -495,7 +499,6 @@ void Imagefloat::ExecCMSTransform(cmsHTRANSFORM hTransform)
*(p++) = *(pR++); *(p++) = *(pR++);
*(p++) = *(pG++); *(p++) = *(pG++);
*(p++) = *(pB++); *(p++) = *(pB++);
} }
cmsDoTransform (hTransform, pBuf.data, pBuf.data, width); cmsDoTransform (hTransform, pBuf.data, pBuf.data, width);

View File

@ -1048,9 +1048,13 @@ void ImProcCoordinator::updateLRGBHistograms()
int x1, y1, x2, y2; int x1, y1, x2, y2;
params.crop.mapToResized(pW, pH, scale, x1, x2, y1, y2); params.crop.mapToResized(pW, pH, scale, x1, x2, y1, y2);
#ifdef _OPENMP
#pragma omp parallel sections #pragma omp parallel sections
#endif
{ {
#ifdef _OPENMP
#pragma omp section #pragma omp section
#endif
{ {
histChroma.clear(); 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 histChroma[(int)(sqrtf(SQR(nprevl->a[i][j]) + SQR(nprevl->b[i][j])) / 188.f)]++; //188 = 48000/256
} }
} }
#ifdef _OPENMP
#pragma omp section #pragma omp section
#endif
{ {
histLuma.clear(); histLuma.clear();
@ -1070,7 +1076,9 @@ void ImProcCoordinator::updateLRGBHistograms()
histLuma[(int)(nprevl->L[i][j] / 128.f)]++; histLuma[(int)(nprevl->L[i][j] / 128.f)]++;
} }
} }
#ifdef _OPENMP
#pragma omp section #pragma omp section
#endif
{ {
histRed.clear(); histRed.clear();
histGreen.clear(); histGreen.clear();
@ -1302,7 +1310,9 @@ void ImProcCoordinator::saveInputICCReference(const Glib::ustring& fname, bool a
int cy = params.crop.y; int cy = params.crop.y;
int cw = params.crop.w; int cw = params.crop.w;
int ch = params.crop.h; int ch = params.crop.h;
#ifdef _OPENMP
#pragma omp parallel for #pragma omp parallel for
#endif
for (int i = cy; i < cy + ch; i++) { for (int i = cy; i < cy + ch; i++) {
for (int j = cx; j < cx + cw; j++) { 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 // image may contain out of range samples, clip them to avoid wrap-arounds
#ifdef _OPENMP
#pragma omp parallel for #pragma omp parallel for
#endif
for (int i = 0; i < im->getHeight(); i++) { for (int i = 0; i < im->getHeight(); i++) {
for (int j = 0; j < im->getWidth(); j++) { 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(); hist16Qthr.clear();
} }
#ifdef _OPENMP
#pragma omp for reduction(+:sum) #pragma omp for reduction(+:sum)
#endif
for (int i = 0; i < height; i++) 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... //can be used in case of...
} }
#ifdef _OPENMP
#pragma omp critical #pragma omp critical
#endif
{ {
if (needJ) { if (needJ) {
hist16J += hist16Jthr; 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 int bufferLength = ((width + 3) / 4) * 4; // bufferLength has to be a multiple of 4
#endif #endif
#ifndef _DEBUG #ifndef _DEBUG
#ifdef _OPENMP
#pragma omp parallel #pragma omp parallel
#endif
#endif #endif
{ {
float minQThr = 10000.f; float minQThr = 10000.f;
@ -1010,7 +1016,9 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw
float sbuffer[bufferLength] ALIGNED16; float sbuffer[bufferLength] ALIGNED16;
#endif #endif
#ifndef _DEBUG #ifndef _DEBUG
#ifdef _OPENMP
#pragma omp for schedule(dynamic, 16) #pragma omp for schedule(dynamic, 16)
#endif
#endif #endif
for (int i = 0; i < height; i++) { for (int i = 0; i < height; i++) {
@ -1618,7 +1626,9 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw
#endif #endif
} }
#ifdef _OPENMP
#pragma omp critical #pragma omp critical
#endif
{ {
if (minQThr < minQ) { if (minQThr < minQ) {
minQ = minQThr; minQ = minQThr;
@ -1731,11 +1741,15 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw
#ifndef _DEBUG #ifndef _DEBUG
#ifdef _OPENMP
#pragma omp parallel #pragma omp parallel
#endif
#endif #endif
{ {
#ifndef _DEBUG #ifndef _DEBUG
#ifdef _OPENMP
#pragma omp for schedule(dynamic, 10) #pragma omp for schedule(dynamic, 10)
#endif
#endif #endif
for (int i = 0; i < height; i++) // update CieImages with new values after sharpening, defringe, contrast by detail level 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; const float co_e = (pow_F (f_l, 0.25f)) + eps;
#ifndef _DEBUG #ifndef _DEBUG
#ifdef _OPENMP
#pragma omp parallel #pragma omp parallel
#endif
#endif #endif
{ {
#ifdef __SSE2__ #ifdef __SSE2__
@ -1782,7 +1798,9 @@ void ImProcFunctions::ciecam_02float (CieImage* ncie, float adap, int pW, int pw
#endif #endif
#ifndef _DEBUG #ifndef _DEBUG
#ifdef _OPENMP
#pragma omp for schedule(dynamic, 10) #pragma omp for schedule(dynamic, 10)
#endif
#endif #endif
for (int i = 0; i < height; i++) { // update CIECAM with new values after tone-mapping 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 W = lold->W;
int H = lold->H; int H = lold->H;
#ifdef _OPENMP
#pragma omp parallel for if (multiThread) #pragma omp parallel for if (multiThread)
#endif
for (int i = 0; i < H; i++) for (int i = 0; i < H; i++)
for (int j = 0; j < W; j++) { for (int j = 0; j < W; j++) {
@ -4269,17 +4289,8 @@ void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBuffer, int pW
} }
LUTu hist16Clad; const float histLFactor = pW != 1 ? histLCurve.getSize() / 100.f : 1.f;
LUTu hist16Llad; const float histCFactor = pW != 1 ? histCCurve.getSize() / 48000.f : 1.f;
//preparate for histograms CIECAM
if (pW != 1) { //only with improccoordinator
hist16Clad (65536);
hist16Clad.clear();
hist16Llad (65536);
hist16Llad.clear();
}
#ifdef _DEBUG #ifdef _DEBUG
MyTime t1e, t2e; MyTime t1e, t2e;
@ -4386,17 +4397,21 @@ void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBuffer, int pW
{wprof[2][0], wprof[2][1], wprof[2][2]} {wprof[2][0], wprof[2][1], wprof[2][2]}
}; };
#ifdef _OPENMP
#ifdef _DEBUG #ifdef _DEBUG
#pragma omp parallel default(shared) firstprivate(lold, lnew, MunsDebugInfo, pW) if (multiThread) #pragma omp parallel default(shared) firstprivate(lold, lnew, MunsDebugInfo, pW) if (multiThread)
#else #else
#pragma omp parallel if (multiThread) #pragma omp parallel if (multiThread)
#endif
#endif #endif
{ {
#ifdef __SSE2__ #ifdef __SSE2__
float HHBuffer[W] ALIGNED16; float HHBuffer[W] ALIGNED16;
float CCBuffer[W] ALIGNED16; float CCBuffer[W] ALIGNED16;
#endif #endif
#ifdef _OPENMP
#pragma omp for schedule(dynamic, 16) #pragma omp for schedule(dynamic, 16)
#endif
for (int i = 0; i < H; i++) { for (int i = 0; i < H; i++) {
if (avoidColorShift) if (avoidColorShift)
@ -4775,8 +4790,7 @@ void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBuffer, int pW
//update histogram C //update histogram C
if (pW != 1) { //only with improccoordinator if (pW != 1) { //only with improccoordinator
int posp = (int)sqrt (atmp * atmp + btmp * btmp); histCCurve[histCFactor * sqrt(atmp * atmp + btmp * btmp)]++;
hist16Clad[posp]++;
} }
if (editPipette && editID == EUID_Lab_LCCurve) { if (editPipette && editID == EUID_Lab_LCCurve) {
@ -4831,8 +4845,7 @@ void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBuffer, int pW
//update histo LC //update histo LC
if (pW != 1) { //only with improccoordinator if (pW != 1) { //only with improccoordinator
int posl = Lprov1 * 327.68f; histLCurve[Lprov1 * histLFactor]++;
hist16Llad[posl]++;
} }
Chprov1 = sqrt (SQR (atmp) + SQR (btmp)) / 327.68f; Chprov1 = sqrt (SQR (atmp) + SQR (btmp)) / 327.68f;
@ -4919,13 +4932,6 @@ void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBuffer, int pW
} }
} // end of parallelization } // 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 #ifdef _DEBUG
if (settings->verbose) { if (settings->verbose) {
@ -5136,7 +5142,9 @@ void ImProcFunctions::EPDToneMapCIE (CieImage *ncie, float a_w, float c_, int Wi
EdgePreservingDecomposition epd (Wid, Hei); EdgePreservingDecomposition epd (Wid, Hei);
#ifdef _OPENMP
#pragma omp parallel for #pragma omp parallel for
#endif
for (int i = 0; i < Hei; i++) for (int i = 0; i < Hei; i++)
for (int j = 0; j < Wid; j++) { 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. //Restore past range, also desaturate a bit per Mantiuk's Color correction for tone mapping.
float s = (1.0f + 38.7889f) * powf (Compression, 1.5856f) / (1.0f + 38.7889f * powf (Compression, 1.5856f)); float s = (1.0f + 38.7889f) * powf (Compression, 1.5856f) / (1.0f + 38.7889f * powf (Compression, 1.5856f));
#ifndef _DEBUG #ifndef _DEBUG
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,10) #pragma omp parallel for schedule(dynamic,10)
#endif
#endif #endif
for (int i = 0; i < Hei; i++) 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. //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 minL = FLT_MAX;
float maxL = 0.f; float maxL = 0.f;
#ifdef _OPENMP
#pragma omp parallel #pragma omp parallel
#endif
{ {
float lminL = FLT_MAX; float lminL = FLT_MAX;
float lmaxL = 0.f; float lmaxL = 0.f;
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
for (size_t i = 0; i < N; i++) { for (size_t i = 0; i < N; i++) {
if (L[i] < lminL) { if (L[i] < lminL) {
@ -5259,7 +5273,9 @@ void ImProcFunctions::EPDToneMap (LabImage *lab, unsigned int Iterates, int skip
} }
} }
#ifdef _OPENMP
#pragma omp critical #pragma omp critical
#endif
{ {
if (lminL < minL) { if (lminL < minL) {
minL = lminL; minL = lminL;
@ -5279,7 +5295,9 @@ void ImProcFunctions::EPDToneMap (LabImage *lab, unsigned int Iterates, int skip
maxL = 1.f; maxL = 1.f;
} }
#ifdef _OPENMP
#pragma omp parallel for #pragma omp parallel for
#endif
for (size_t i = 0; i < N; ++i) for (size_t i = 0; i < N; ++i)
//{L[i] = (L[i] - minL)/32767.0f; //{L[i] = (L[i] - minL)/32767.0f;
@ -5340,7 +5358,7 @@ void ImProcFunctions::getAutoExp (const LUTu &histogram, int histcompr, double
histogram.getSumAndAverage (sum, ave); histogram.getSumAndAverage (sum, ave);
//find median of luminance //find median of luminance
int median = 0, count = histogram[0]; size_t median = 0, count = histogram[0];
while (count < sum / 2) { while (count < sum / 2) {
median++; median++;

View File

@ -58,23 +58,20 @@ namespace {
#endif #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 W = R.width();
const int H = R.height(); const int H = R.height();
int npatches = 0;
#ifdef _OPENMP #ifdef _OPENMP
#pragma omp parallel for if (multithread) #pragma omp parallel for if (multithread)
#endif #endif
for (int y = 0; y < H; y += patchsize) { for (int y = 0; y < H; y += patchsize) {
int pH = min(y+patchsize, H); const int pH = min(y + patchsize, H);
for (int x = 0; x < W; x += patchsize, ++npatches) { for (int x = 0; x < W; x += patchsize) {
float val = RT_INFINITY_F; 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) { for (int yy = y; yy < pH; ++yy) {
float yval = RT_INFINITY_F;
for (int xx = x; xx < pW; ++xx) { for (int xx = x; xx < pW; ++xx) {
float r = R[yy][xx]; float r = R[yy][xx];
float g = G[yy][xx]; float g = G[yy][xx];
@ -84,20 +81,19 @@ int get_dark_channel(const array2D<float> &R, const array2D<float> &G, const arr
g /= ambient[1]; g /= ambient[1];
b /= ambient[2]; b /= ambient[2];
} }
yval = min(yval, r, g, b); val = min(val, r, g, b);
} }
val = min(val, yval);
} }
if (clip) { if (clip) {
val = LIM01(val); val = LIM01(val);
} }
for (int yy = y; yy < pH; ++yy) { for (int yy = y; yy < pH; ++yy) {
std::fill(dst[yy]+x, dst[yy]+pW, val); std::fill(dst[yy] + x, dst[yy] + pW, val);
} }
} }
} }
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; std::priority_queue<float> p;
for (int y = 0; y < H; y += patchsize) { for (int y = 0; y < H; y += patchsize) {
for (int x = 0; x < W; x += 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]); p.push(dark[y][x]);
} }
} }
@ -221,7 +217,7 @@ void ImProcFunctions::dehaze(Imagefloat *img)
const int W = img->getWidth(); const int W = img->getWidth();
const int H = img->getHeight(); 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) { if (options.rtSettings.verbose) {
std::cout << "dehaze: strength = " << strength << std::endl; 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); float mt = max(t[y][x], t0, tl + teps, tu + teps);
if (params->dehaze.showDepthMap) { 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 { } else {
float r = (rgb[0] - ambient[0]) / mt + ambient[0]; float r = (rgb[0] - ambient[0]) / mt + ambient[0];
float g = (rgb[1] - ambient[1]) / mt + ambient[1]; 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 float sc = min (scale, 1.0f);
const int support = static_cast<int> (2.0f * a / sc) + 1; const int support = static_cast<int> (2.0f * a / sc) + 1;
#ifdef _OPENMP
#pragma omp parallel #pragma omp parallel
#endif
{ {
// storage for precomputed parameters for horisontal interpolation // storage for precomputed parameters for horisontal interpolation
float * wwh = new float[support * dst->getWidth()]; 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 // Phase 2: do actual interpolation
#ifdef _OPENMP
#pragma omp for #pragma omp for
#endif
for (int i = 0; i < dst->getHeight(); i++) { 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); 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];; 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); bool darkening = (params->vignetting.amount <= 0.0);
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16) if (multiThread) #pragma omp parallel for schedule(dynamic,16) if (multiThread)
#endif
for (int y = 0; y < transformed->getHeight(); y++) { for (int y = 0; y < transformed->getHeight(); y++) {
double vig_y_d = applyVignetting ? (double) (y + cy) - vig_h2 : 0.0; 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 #endif
// main cycle // main cycle
bool darkening = (params->vignetting.amount <= 0.0); bool darkening = (params->vignetting.amount <= 0.0);
#ifdef _OPENMP
#pragma omp parallel for if (multiThread) #pragma omp parallel for if (multiThread)
#endif
for (int y = 0; y < transformed->getHeight(); y++) { for (int y = 0; y < transformed->getHeight(); y++) {
for (int x = 0; x < transformed->getWidth(); x++) { 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[1] = transformed->g.ptrs;
chTrans[2] = transformed->b.ptrs; chTrans[2] = transformed->b.ptrs;
#ifdef _OPENMP
#pragma omp parallel for if (multiThread) #pragma omp parallel for if (multiThread)
#endif
for (int y = 0; y < transformed->getHeight(); y++) { for (int y = 0; y < transformed->getHeight(); y++) {
for (int x = 0; x < transformed->getWidth(); x++) { for (int x = 0; x < transformed->getWidth(); x++) {

View File

@ -40,8 +40,6 @@ namespace rtengine
using namespace procparams; using namespace procparams;
extern const Settings* settings;
void fillCurveArrayVib (DiagonalCurve* diagCurve, LUTf &outCurve) 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])} {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) #pragma omp parallel if (multiThread)
#endif
{ {
#ifdef __SSE2__ #ifdef __SSE2__
@ -179,7 +179,9 @@ void ImProcFunctions::vibrance (LabImage* lab)
#endif #endif
float sathue[5], sathue2[4]; // adjust sat in function of hue float sathue[5], sathue2[4]; // adjust sat in function of hue
#ifdef _OPENMP
#pragma omp for schedule(dynamic, 16) #pragma omp for schedule(dynamic, 16)
#endif
for (int i = 0; i < height; i++) { for (int i = 0; i < height; i++) {
#ifdef __SSE2__ #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; 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]; L = new float*[h];
a = new float*[h]; a = new float*[h];
@ -73,19 +73,19 @@ void LabImage::allocLab(int w, int h)
data = new float [w * h * 3]; data = new float [w * h * 3];
float * index = data; float * index = data;
for (int i = 0; i < h; i++) { for (size_t i = 0; i < h; i++) {
L[i] = index + i * w; L[i] = index + i * w;
} }
index += w * h; index += w * h;
for (int i = 0; i < h; i++) { for (size_t i = 0; i < h; i++) {
a[i] = index + i * w; a[i] = index + i * w;
} }
index += w * h; index += w * h;
for (int i = 0; i < h; i++) { for (size_t i = 0; i < h; i++) {
b[i] = index + i * w; b[i] = index + i * w;
} }
} }

View File

@ -25,7 +25,7 @@ namespace rtengine
class LabImage class LabImage
{ {
private: private:
void allocLab(int w, int h); void allocLab(size_t w, size_t h);
public: public:
int W, H; 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); void* data = mmap(nullptr, stat_buffer.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
if ( data == MAP_FAILED ) { if ( data == MAP_FAILED ) {
printf("no mmap\n"); printf("no mmap %s\n", fname);
close(fd); close(fd);
return nullptr; 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 = Cairo::ImageSurface::create(Cairo::FORMAT_RGB24, w, h);
previewImage->flush(); previewImage->flush();
#ifdef _OPENMP
#pragma omp parallel for #pragma omp parallel for
#endif
for (unsigned int i = 0; i < (unsigned int)(h); ++i) { for (unsigned int i = 0; i < (unsigned int)(h); ++i) {
const unsigned char *src = data + i * w * 3; const unsigned char *src = data + i * w * 3;
unsigned char *dst = previewImage->get_data() + i * w * 4; 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); rawImage.getImage (wb, TR_NONE, &image, pp, params.toneCurve, params.raw);
rtengine::Image8 output(fw, fh); rtengine::Image8 output(fw, fh);
rawImage.convertColorSpace(&image, params.icm, wb); rawImage.convertColorSpace(&image, params.icm, wb);
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic, 10) #pragma omp parallel for schedule(dynamic, 10)
#endif
for (int i = 0; i < fh; ++i) for (int i = 0; i < fh; ++i)
for (int j = 0; j < fw; ++j) { for (int j = 0; j < fw; ++j) {
image.r(i, j) = Color::gamma2curve[image.r(i, 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 = Cairo::ImageSurface::create(Cairo::FORMAT_RGB24, w, h);
previewImage->flush(); previewImage->flush();
#pragma omp parallel for #ifdef _OPENMP
#pragma omp parallel for
#endif
for (unsigned int i = 0; i < (unsigned int)(h); i++) { for (unsigned int i = 0; i < (unsigned int)(h); i++) {
const unsigned char *src = data + i * w * 3; const unsigned char *src = data + i * w * 3;
unsigned char *dst = previewImage->get_data() + i * w * 4; unsigned char *dst = previewImage->get_data() + i * w * 4;

View File

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

View File

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

View File

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

View File

@ -428,7 +428,6 @@ RawImageSource::RawImageSource ()
, plistener(nullptr) , plistener(nullptr)
, scale_mul{} , scale_mul{}
, c_black{} , c_black{}
, c_white{}
, cblacksom{} , cblacksom{}
, ref_pre_mul{} , ref_pre_mul{}
, refwb_red(0.0) , 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)) 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)); || (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()); 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; rm = new_scale_mul[0] / scale_mul[0] * gain;
gm = new_scale_mul[1] / scale_mul[1] * 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"); camProfile = ICCStore::getInstance()->createFromMatrix (imatrices.xyz_cam, false, "Camera");
inverse33 (imatrices.xyz_cam, imatrices.cam_xyz); 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 // First we get the "as shot" ("Camera") white balance and store it
float pre_mul[4]; float pre_mul[4];
// FIXME: get_colorsCoeff not so much used nowadays, when we have calculate_scale_mul() function here // 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]); 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 { } else {
copyOriginalPixels(raw, ri, rid, rif, rawData); 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) { if(prepareDenoise && dirpyrdenoiseExpComp == INFINITY) {
LUTu aehist; LUTu aehist;
int aehistcompr; int aehistcompr;
@ -3407,7 +3410,9 @@ void RawImageSource::cfaboxblur(RawImage *riFlatFile, float* cfablur, int boxH,
} }
#ifdef _OPENMP
#pragma omp single #pragma omp single
#endif
for (int col = W - (W % 8); col < W; col++) { for (int col = W - (W % 8); col < W; col++) {
int len = boxH / 2 + 1; 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 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 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]); //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(); histGreenRaw.clear();
histBlueRaw.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 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 multScale = maxWhite <= 1.f ? 1.f / 255.f : 255.f;
const float mult[4] = { multScale / (ri->get_white(0) - cblacksom[0]), const float mult[4] = { multScale / (c_white[0] - cblacksom[0]),
multScale / (ri->get_white(1) - cblacksom[1]), multScale / (c_white[1] - cblacksom[1]),
multScale / (ri->get_white(2) - cblacksom[2]), multScale / (c_white[2] - cblacksom[2]),
multScale / (ri->get_white(3) - cblacksom[3]) 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); 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; std::vector<double> histMatchingCache;
ColorManagementParams histMatchingParams; 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 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 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); void transformRect (const PreviewProps &pp, int tran, int &sx1, int &sy1, int &width, int &height, int &fw);
@ -204,8 +201,13 @@ public:
static void init (); static void init ();
static void cleanup (); static void cleanup ();
void setCurrentFrame(unsigned int frameNum) override { void setCurrentFrame(unsigned int frameNum) override {
currFrame = std::min(numFrames - 1, frameNum); if (numFrames == 2 && frameNum == 2) { // special case for averaging of two frames
ri = riFrames[currFrame]; currFrame = frameNum;
ri = riFrames[0];
} else {
currFrame = std::min(numFrames - 1, frameNum);
ri = riFrames[currFrame];
}
} }
int getFrameCount() override {return numFrames;} int getFrameCount() override {return numFrames;}
int getFlatFieldAutoClipValue() override {return flatFieldAutoClipValue;} int getFlatFieldAutoClipValue() override {return flatFieldAutoClipValue;}
@ -250,7 +252,6 @@ protected:
bool freeBuffer bool freeBuffer
); );
void ddct8x8s(int isgn, float a[8][8]); 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 interpolateBadPixelsBayer( PixelsMap &bitmapBads, array2D<float> &rawData );
int interpolateBadPixelsNColours( PixelsMap &bitmapBads, const int colours ); int interpolateBadPixelsNColours( PixelsMap &bitmapBads, const int colours );

View File

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

View File

@ -30,7 +30,7 @@ namespace rtengine
extern const Settings* settings; 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]; map = new float*[H];

View File

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

View File

@ -335,13 +335,17 @@ private:
LUTf gamcurve (65536, 0); LUTf gamcurve (65536, 0);
float gam, gamthresh, gamslope; float gam, gamthresh, gamslope;
ipf.RGB_denoise_infoGamCurve (params.dirpyrDenoise, imgsrc->isRAW(), gamcurve, gam, gamthresh, gamslope); ipf.RGB_denoise_infoGamCurve (params.dirpyrDenoise, imgsrc->isRAW(), gamcurve, gam, gamthresh, gamslope);
#ifdef _OPENMP
#pragma omp parallel #pragma omp parallel
#endif
{ {
Imagefloat *origCropPart;//init auto noise Imagefloat *origCropPart;//init auto noise
origCropPart = new Imagefloat (crW, crH);//allocate memory origCropPart = new Imagefloat (crW, crH);//allocate memory
Imagefloat *provicalc = new Imagefloat ((crW + 1) / 2, (crH + 1) / 2); //for denoise curves Imagefloat *provicalc = new Imagefloat ((crW + 1) / 2, (crH + 1) / 2); //for denoise curves
int skipP = 1; int skipP = 1;
#ifdef _OPENMP
#pragma omp for schedule(dynamic) collapse(2) nowait #pragma omp for schedule(dynamic) collapse(2) nowait
#endif
for (int wcr = 0; wcr < numtiles_W; wcr++) { for (int wcr = 0; wcr < numtiles_W; wcr++) {
for (int hcr = 0; hcr < numtiles_H; hcr++) { for (int hcr = 0; hcr < numtiles_H; hcr++) {
@ -557,13 +561,17 @@ private:
coordH[0] = begH; coordH[0] = begH;
coordH[1] = fh / 2 - crH / 2; coordH[1] = fh / 2 - crH / 2;
coordH[2] = fh - crH - begH; coordH[2] = fh - crH - begH;
#ifdef _OPENMP
#pragma omp parallel #pragma omp parallel
#endif
{ {
Imagefloat *origCropPart;//init auto noise Imagefloat *origCropPart;//init auto noise
origCropPart = new Imagefloat (crW, crH);//allocate memory origCropPart = new Imagefloat (crW, crH);//allocate memory
Imagefloat *provicalc = new Imagefloat ((crW + 1) / 2, (crH + 1) / 2); //for denoise curves Imagefloat *provicalc = new Imagefloat ((crW + 1) / 2, (crH + 1) / 2); //for denoise curves
#ifdef _OPENMP
#pragma omp for schedule(dynamic) collapse(2) nowait #pragma omp for schedule(dynamic) collapse(2) nowait
#endif
for (int wcr = 0; wcr <= 2; wcr++) { for (int wcr = 0; wcr <= 2; wcr++) {
for (int hcr = 0; hcr <= 2; hcr++) { for (int hcr = 0; hcr <= 2; hcr++) {
@ -807,7 +815,9 @@ private:
if (denoiseParams.enabled && (noiseLCurve || noiseCCurve )) { if (denoiseParams.enabled && (noiseLCurve || noiseCCurve )) {
// we only need image reduced to 1/4 here // we only need image reduced to 1/4 here
calclum = new Imagefloat ((fw + 1) / 2, (fh + 1) / 2); //for luminance denoise curve calclum = new Imagefloat ((fw + 1) / 2, (fh + 1) / 2); //for luminance denoise curve
#ifdef _OPENMP
#pragma omp parallel for #pragma omp parallel for
#endif
for (int ii = 0; ii < fh; ii += 2) { for (int ii = 0; ii < fh; ii += 2) {
for (int jj = 0; jj < fw; jj += 2) { for (int jj = 0; jj < fw; jj += 2) {
@ -1031,7 +1041,9 @@ private:
hist16thr[ (int) ((labView->L[i][j]))]++; hist16thr[ (int) ((labView->L[i][j]))]++;
} }
#ifdef _OPENMP
#pragma omp critical #pragma omp critical
#endif
{ {
hist16 += hist16thr; 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); 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 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); Array2Df T (width, height);
//--- X blur //--- X blur
#ifdef _OPENMP
#pragma omp parallel for shared(I, T) if(multithread) #pragma omp parallel for shared(I, T) if(multithread)
#endif
for ( int y = 0 ; y < height ; y++ ) { for ( int y = 0 ; y < height ; y++ ) {
for ( int x = 1 ; x < width - 1 ; x++ ) { for ( int x = 1 ; x < width - 1 ; x++ ) {
@ -202,7 +204,9 @@ void gaussianBlur (const Array2Df& I, Array2Df& L, bool multithread)
} }
//--- Y blur //--- Y blur
#ifdef _OPENMP
#pragma omp parallel for if(multithread) #pragma omp parallel for if(multithread)
#endif
for ( int x = 0 ; x < width - 7 ; x += 8 ) { for ( int x = 0 ; x < width - 7 ; x += 8 ) {
for ( int y = 1 ; y < height - 1 ; y++ ) { 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 ); const float divider = pow ( 2.0f, k + 1 );
double avgGrad = 0.0; // use double precision for large summations double avgGrad = 0.0; // use double precision for large summations
#ifdef _OPENMP
#pragma omp parallel for reduction(+:avgGrad) if(multithread) #pragma omp parallel for reduction(+:avgGrad) if(multithread)
#endif
for ( int y = 0 ; y < height ; y++ ) { for ( int y = 0 ; y < height ; y++ ) {
int n = (y == 0 ? 0 : y - 1); int n = (y == 0 ? 0 : y - 1);
@ -354,7 +360,9 @@ void calculateFiMatrix (Array2Df* FI, Array2Df* gradients[],
fi[nlevels - 1] = new Array2Df (width, height); fi[nlevels - 1] = new Array2Df (width, height);
#ifdef _OPENMP
#pragma omp parallel for shared(fi) if(multithread) #pragma omp parallel for shared(fi) if(multithread)
#endif
for ( int k = 0 ; k < width * height ; k++ ) { for ( int k = 0 ; k < width * height ; k++ ) {
(*fi[nlevels - 1]) (k) = 1.0f; (*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 // only apply gradients to levels>=detail_level but at least to the coarsest
if ((k >= detail_level || k == nlevels - 1) && beta != 1.f) { if ((k >= detail_level || k == nlevels - 1) && beta != 1.f) {
//DEBUG_STR << "calculateFiMatrix: apply gradient to level " << k << endl; //DEBUG_STR << "calculateFiMatrix: apply gradient to level " << k << endl;
#ifdef _OPENMP
#pragma omp parallel for shared(fi,avgGrad) if(multithread) #pragma omp parallel for shared(fi,avgGrad) if(multithread)
#endif
for ( int y = 0; y < height; y++ ) { for ( int y = 0; y < height; y++ ) {
for ( int x = 0; x < width; x++ ) { for ( int x = 0; x < width; x++ ) {
float grad = ((*gradients[k]) (x, y) < 1e-4f) ? 1e-4 : (*gradients[k]) (x, y); 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 minLum = Y (0, 0);
float maxLum = Y (0, 0); float maxLum = Y (0, 0);
#ifdef _OPENMP
#pragma omp parallel for reduction(max:maxLum) if(multithread) #pragma omp parallel for reduction(max:maxLum) if(multithread)
#endif
for ( int i = 0 ; i < size ; i++ ) { for ( int i = 0 ; i < size ; i++ ) {
maxLum = std::max (maxLum, Y (i)); maxLum = std::max (maxLum, Y (i));
@ -464,13 +476,17 @@ void tmo_fattal02 (size_t width,
Array2Df* H = new Array2Df (width, height); Array2Df* H = new Array2Df (width, height);
float temp = 100.f / maxLum; float temp = 100.f / maxLum;
float eps = 1e-4f; float eps = 1e-4f;
#ifdef _OPENMP
#pragma omp parallel if(multithread) #pragma omp parallel if(multithread)
#endif
{ {
#ifdef __SSE2__ #ifdef __SSE2__
vfloat epsv = F2V (eps); vfloat epsv = F2V (eps);
vfloat tempv = F2V (temp); vfloat tempv = F2V (temp);
#endif #endif
#ifdef _OPENMP
#pragma omp for schedule(dynamic,16) #pragma omp for schedule(dynamic,16)
#endif
for (size_t i = 0 ; i < height ; ++i) { for (size_t i = 0 ; i < height ; ++i) {
size_t j = 0; 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 // 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 // side accordingly (basically fft solver assumes U(-1) = U(1), whereas zero
// Neumann conditions assume U(-1)=U(0)), see also divergence calculation // Neumann conditions assume U(-1)=U(0)), see also divergence calculation
#ifdef _OPENMP
#pragma omp parallel for if(multithread) #pragma omp parallel for if(multithread)
#endif
for ( size_t y = 0 ; y < height ; y++ ) { for ( size_t y = 0 ; y < height ; y++ ) {
// sets index+1 based on the boundary assumption H(N+1)=H(N-1) // 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; delete H;
// calculate divergence // calculate divergence
#ifdef _OPENMP
#pragma omp parallel for if(multithread) #pragma omp parallel for if(multithread)
#endif
for ( size_t y = 0; y < height; ++y ) { for ( size_t y = 0; y < height; ++y ) {
for ( size_t x = 0; x < width; ++x ) { for ( size_t x = 0; x < width; ++x ) {
@ -626,12 +646,16 @@ void tmo_fattal02 (size_t width,
delete Gx; delete Gx;
delete FI; delete FI;
#ifdef _OPENMP
#pragma omp parallel if(multithread) #pragma omp parallel if(multithread)
#endif
{ {
#ifdef __SSE2__ #ifdef __SSE2__
vfloat gammav = F2V (gamma); vfloat gammav = F2V (gamma);
#endif #endif
#ifdef _OPENMP
#pragma omp for schedule(dynamic,16) #pragma omp for schedule(dynamic,16)
#endif
for (size_t i = 0 ; i < height ; i++) { for (size_t i = 0 ; i < height ; i++) {
size_t j = 0; 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 // the discrete cosine transform is not exactly the transform needed
// need to scale input values to get the right transformation // need to scale input values to get the right transformation
#ifdef _OPENMP
#pragma omp parallel for if(multithread) #pragma omp parallel for if(multithread)
#endif
for (int y = 1 ; y < height - 1 ; y++ ) for (int y = 1 ; y < height - 1 ; y++ )
for (int x = 1 ; x < width - 1 ; x++ ) { 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 // need to scale the output matrix to get the right transform
float factor = (1.0f / ((height - 1) * (width - 1))); float factor = (1.0f / ((height - 1) * (width - 1)));
#ifdef _OPENMP
#pragma omp parallel for if(multithread) #pragma omp parallel for if(multithread)
#endif
for (int y = 0 ; y < height ; y++ ) for (int y = 0 ; y < height ; y++ )
for (int x = 0 ; x < width ; x++ ) { 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> l1 = get_lambda (height);
std::vector<double> l2 = get_lambda (width); std::vector<double> l2 = get_lambda (width);
#ifdef _OPENMP
#pragma omp parallel for if(multithread) #pragma omp parallel for if(multithread)
#endif
for (int y = 0 ; y < height ; y++ ) { for (int y = 0 ; y < height ; y++ ) {
for (int x = 0 ; x < width ; x++ ) { 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)) // (not really needed but good for numerics as we later take exp(U))
//DEBUG_STR << "solve_pde_fft: removing constant from solution" << std::endl; //DEBUG_STR << "solve_pde_fft: removing constant from solution" << std::endl;
float max = 0.f; float max = 0.f;
#ifdef _OPENMP
#pragma omp parallel for reduction(max:max) if(multithread) #pragma omp parallel for reduction(max:max) if(multithread)
#endif
for (int i = 0; i < width * height; i++) { for (int i = 0; i < width * height; i++) {
max = std::max (max, (*U) (i)); max = std::max (max, (*U) (i));
} }
#ifdef _OPENMP
#pragma omp parallel for if(multithread) #pragma omp parallel for if(multithread)
#endif
for (int i = 0; i < width * height; i++) { for (int i = 0; i < width * height; i++) {
(*U) (i) -= max; (*U) (i) -= max;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -42,7 +42,6 @@ enum {
ADDSET_PREPROCESS_LINEDENOISE, ADDSET_PREPROCESS_LINEDENOISE,
ADDSET_RAWCACORR, ADDSET_RAWCACORR,
ADDSET_RAWEXPOS_LINEAR, ADDSET_RAWEXPOS_LINEAR,
ADDSET_RAWEXPOS_PRESER,
ADDSET_RAWEXPOS_BLACKS, ADDSET_RAWEXPOS_BLACKS,
ADDSET_SHARPENEDGE_AMOUNT, ADDSET_SHARPENEDGE_AMOUNT,
ADDSET_SHARPENMICRO_AMOUNT, ADDSET_SHARPENMICRO_AMOUNT,
@ -134,13 +133,13 @@ enum {
ADDSET_FATTAL_ANCHOR, ADDSET_FATTAL_ANCHOR,
ADDSET_SHARPENMICRO_CONTRAST, ADDSET_SHARPENMICRO_CONTRAST,
ADDSET_SHARP_CONTRAST, ADDSET_SHARP_CONTRAST,
ADDSET_BAYER_FALSE_COLOR_SUPPRESSION, ADDSET_BAYER_FALSE_COLOR_SUPPRESSION,
ADDSET_BAYER_ITER, ADDSET_BAYER_ITER,
ADDSET_BAYER_PS_SMOOTH, ADDSET_BAYER_PS_SMOOTH,
ADDSET_BAYER_PS_EPERISO, ADDSET_BAYER_PS_EPERISO,
ADDSET_BAYER_PS_SIGMA, ADDSET_BAYER_PS_SIGMA,
ADDSET_BAYER_DUALDEMOZCONTRAST, ADDSET_BAYER_DUALDEMOZCONTRAST,
ADDSET_XTRANS_FALSE_COLOR_SUPPRESSION, ADDSET_XTRANS_FALSE_COLOR_SUPPRESSION,
ADDSET_SOFTLIGHT_STRENGTH, ADDSET_SOFTLIGHT_STRENGTH,
ADDSET_DEHAZE_STRENGTH, ADDSET_DEHAZE_STRENGTH,

View File

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

View File

@ -172,7 +172,7 @@ void BatchToolPanelCoordinator::initSession ()
bayerpreprocess->setAdjusterBehavior (false, false); bayerpreprocess->setAdjusterBehavior (false, false);
rawcacorrection->setAdjusterBehavior (false); rawcacorrection->setAdjusterBehavior (false);
flatfield->setAdjusterBehavior(false); flatfield->setAdjusterBehavior(false);
rawexposure->setAdjusterBehavior (false, false); rawexposure->setAdjusterBehavior (false);
bayerrawexposure->setAdjusterBehavior (false); bayerrawexposure->setAdjusterBehavior (false);
xtransrawexposure->setAdjusterBehavior (false); xtransrawexposure->setAdjusterBehavior (false);
} else { } else {
@ -220,7 +220,7 @@ void BatchToolPanelCoordinator::initSession ()
bayerpreprocess->setAdjusterBehavior (options.baBehav[ADDSET_PREPROCESS_LINEDENOISE], options.baBehav[ADDSET_PREPROCESS_GREENEQUIL]); bayerpreprocess->setAdjusterBehavior (options.baBehav[ADDSET_PREPROCESS_LINEDENOISE], options.baBehav[ADDSET_PREPROCESS_GREENEQUIL]);
rawcacorrection->setAdjusterBehavior (options.baBehav[ADDSET_RAWCACORR]); rawcacorrection->setAdjusterBehavior (options.baBehav[ADDSET_RAWCACORR]);
flatfield->setAdjusterBehavior(options.baBehav[ADDSET_RAWFFCLIPCONTROL]); 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]); bayerrawexposure->setAdjusterBehavior (options.baBehav[ADDSET_RAWEXPOS_BLACKS]);
xtransrawexposure->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_DIRPYRDN_GAMMA]) { pparams.dirpyrDenoise.gamma = 0; }
if (options.baBehav[ADDSET_RAWCACORR]) { pparams.raw.cablue = pparams.raw.cared = 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_LINEAR]) { pparams.raw.expos = 0; }
if (options.baBehav[ADDSET_RAWEXPOS_PRESER]) { pparams.raw.preser = 0; }
if (options.baBehav[ADDSET_RAWEXPOS_BLACKS]) { if (options.baBehav[ADDSET_RAWEXPOS_BLACKS]) {
pparams.raw.bayersensor.black0 = pparams.raw.bayersensor.black1 = pparams.raw.bayersensor.black2 = pparams.raw.bayersensor.black3 = 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; 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; entry << i;
imageNumber->append(entry.str()); 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) { if (n == 1) {
imageNumberBox->hide(); imageNumberBox->hide();
} else { } 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]); // pmlistener->pointerMoved (true, mx, my, pix[0], pix[1], pix[2]);
int imwidth = cropHandler.cropPixbuftrue->get_width(); int imwidth = cropHandler.cropPixbuftrue->get_width();
int imheight = cropHandler.cropPixbuftrue->get_height(); int imheight = cropHandler.cropPixbuftrue->get_height();
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) { 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;
rtengine::StagedImageProcessor* ipc = iarea->getImProcCoordinator(); rtengine::StagedImageProcessor* ipc = iarea->getImProcCoordinator();
if(ipc) { if(ipc) {
procparams::ProcParams params; procparams::ProcParams params;
@ -1493,7 +1493,9 @@ void CropWindow::expose (Cairo::RefPtr<Cairo::Context> cr)
} }
} }
#ifdef _OPENMP
#pragma omp critical #pragma omp critical
#endif
{ {
if(maxthrstdDev_L2 > maxstdDev_L2) { if(maxthrstdDev_L2 > maxstdDev_L2) {
maxstdDev_L2 = maxthrstdDev_L2; maxstdDev_L2 = maxthrstdDev_L2;

View File

@ -56,7 +56,7 @@ DiagonalCurveEditorSubGroup::DiagonalCurveEditorSubGroup (CurveEditorGroup* prt,
customCurve = Gtk::manage (new MyDiagonalCurve ()); customCurve = Gtk::manage (new MyDiagonalCurve ());
customCurve->setType (DCT_Spline); customCurve->setType (DCT_Spline);
Gtk::Grid* customCurveBox= Gtk::manage (new Gtk::Grid ()); Gtk::Grid* customCurveBox= Gtk::manage (new Gtk::Grid ());
customCurveBox->get_style_context()->add_class("curve-curvebox"); customCurveBox->get_style_context()->add_class("curve-curvebox");
customCurveBox->add(*customCurve); customCurveBox->add(*customCurve);
@ -148,7 +148,7 @@ DiagonalCurveEditorSubGroup::DiagonalCurveEditorSubGroup (CurveEditorGroup* prt,
NURBSCurve = Gtk::manage (new MyDiagonalCurve ()); NURBSCurve = Gtk::manage (new MyDiagonalCurve ());
NURBSCurve->setType (DCT_NURBS); NURBSCurve->setType (DCT_NURBS);
Gtk::Grid* NURBSCurveBox= Gtk::manage (new Gtk::Grid ()); Gtk::Grid* NURBSCurveBox= Gtk::manage (new Gtk::Grid ());
NURBSCurveBox->get_style_context()->add_class("curve-curvebox"); NURBSCurveBox->get_style_context()->add_class("curve-curvebox");
NURBSCurveBox->add(*NURBSCurve); NURBSCurveBox->add(*NURBSCurve);
@ -240,7 +240,7 @@ DiagonalCurveEditorSubGroup::DiagonalCurveEditorSubGroup (CurveEditorGroup* prt,
paramCurve = Gtk::manage (new MyDiagonalCurve ()); paramCurve = Gtk::manage (new MyDiagonalCurve ());
paramCurve->setType (DCT_Parametric); paramCurve->setType (DCT_Parametric);
Gtk::Grid* paramCurveBox= Gtk::manage (new Gtk::Grid ()); Gtk::Grid* paramCurveBox= Gtk::manage (new Gtk::Grid ());
paramCurveBox->get_style_context()->add_class("curve-curvebox"); paramCurveBox->get_style_context()->add_class("curve-curvebox");
paramCurveBox->add(*paramCurve); paramCurveBox->add(*paramCurve);
@ -669,9 +669,7 @@ void DiagonalCurveEditorSubGroup::switchGUI()
} else { } else {
// dCurve ave a ColorProvider or a background gradient defined, so we create/update the object // dCurve ave a ColorProvider or a background gradient defined, so we create/update the object
if (!leftBar) { if (!leftBar) {
leftBar = new ColoredBar(RTO_Bottom2Top); leftBar = new ColoredBar(RTO_Bottom2Top);
} }
if (barColorProvider) { if (barColorProvider) {
@ -1201,7 +1199,7 @@ bool DiagonalCurveEditorSubGroup::curveReset(CurveEditor *ce)
customCurve->reset (dce->customResetCurve, dce->getIdentityValue()); customCurve->reset (dce->customResetCurve, dce->getIdentityValue());
return true; return true;
case (DCT_CatumullRom) : case (DCT_CatumullRom) :
customCurve->reset (dce->catmullRomResetCurve, dce->getIdentityValue()); customCurve->reset (dce->catmullRomResetCurve, dce->getIdentityValue());
return true; return true;

View File

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

View File

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

View File

@ -651,7 +651,7 @@ bool HistogramRGBArea::on_button_press_event (GdkEventButton* event)
void HistogramRGBArea::factorChanged (double newFactor) void HistogramRGBArea::factorChanged (double newFactor)
{ {
factor = newFactor; factor = newFactor;
} }
// //

View File

@ -453,7 +453,6 @@ void ParamsEdited::set(bool v)
raw.ff_AutoClipControl = v; raw.ff_AutoClipControl = v;
raw.ff_clipControl = v; raw.ff_clipControl = v;
raw.exPos = v; raw.exPos = v;
raw.exPreser = v;
wavelet.enabled = v; wavelet.enabled = v;
wavelet.strength = v; wavelet.strength = v;
wavelet.balance = 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_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.ff_clipControl = raw.ff_clipControl && p.raw.ff_clipControl == other.raw.ff_clipControl;
raw.exPos = raw.exPos && p.raw.expos == other.raw.expos; 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.enabled = wavelet.enabled && p.wavelet.enabled == other.wavelet.enabled;
wavelet.strength = wavelet.strength && p.wavelet.strength == other.wavelet.strength; wavelet.strength = wavelet.strength && p.wavelet.strength == other.wavelet.strength;
wavelet.balance = wavelet.balance && p.wavelet.balance == other.wavelet.balance; 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; 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) { if (raw.hotPixelFilter) {
toEdit.raw.hotPixelFilter = mods.raw.hotPixelFilter; toEdit.raw.hotPixelFilter = mods.raw.hotPixelFilter;
} }
@ -3200,7 +3194,7 @@ bool RAWParamsEdited::XTransSensor::isUnchanged() const
bool RAWParamsEdited::isUnchanged() const bool RAWParamsEdited::isUnchanged() const
{ {
return bayersensor.isUnchanged() && xtranssensor.isUnchanged() && ca_autocorrect && ca_avoidcolourshift && caautoiterations && cared && cablue && hotPixelFilter && deadPixelFilter && hotdeadpix_thresh && darkFrame 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 bool LensProfParamsEdited::isUnchanged() const

View File

@ -818,7 +818,6 @@ public:
bool ff_AutoClipControl; bool ff_AutoClipControl;
bool ff_clipControl; bool ff_clipControl;
bool exPos; bool exPos;
bool exPreser;
bool isUnchanged() const; 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_pdaf_lines_filter = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_PREPROCESS_PDAFLINESFILTER")));
//--- //---
raw_expos = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWEXPOS_LINEAR"))); 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"))); raw_black = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWEXPOS_BLACK")));
//--- //---
df_file = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DARKFRAMEFILE"))); 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 (*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 (*Gtk::manage (new Gtk::HSeparator ()), Gtk::PACK_SHRINK, 0);
vboxes[7]->pack_start (*raw_expos, Gtk::PACK_SHRINK, 2); 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 (*raw_black, Gtk::PACK_SHRINK, 2);
vboxes[7]->pack_start (*Gtk::manage (new Gtk::HSeparator ()), Gtk::PACK_SHRINK, 0); vboxes[7]->pack_start (*Gtk::manage (new Gtk::HSeparator ()), Gtk::PACK_SHRINK, 0);
vboxes[7]->pack_start (*df_file, Gtk::PACK_SHRINK, 2); 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_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_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)); 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)); 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_deadpix_filtBlocker(raw_deadpix_filtConn);
ConnectionBlocker raw_pdaf_lines_filterBlocker(raw_pdaf_lines_filterConn); ConnectionBlocker raw_pdaf_lines_filterBlocker(raw_pdaf_lines_filterConn);
ConnectionBlocker raw_exposBlocker(raw_exposConn); ConnectionBlocker raw_exposBlocker(raw_exposConn);
ConnectionBlocker raw_preserBlocker(raw_preserConn);
ConnectionBlocker raw_blackBlocker(raw_blackConn); ConnectionBlocker raw_blackBlocker(raw_blackConn);
ConnectionBlocker df_fileBlocker(df_fileConn); ConnectionBlocker df_fileBlocker(df_fileConn);
ConnectionBlocker df_AutoSelectBlocker(df_AutoSelectConn); ConnectionBlocker df_AutoSelectBlocker(df_AutoSelectConn);
@ -488,7 +484,6 @@ void PartialPasteDlg::rawToggled ()
raw_deadpix_filt->set_active (raw->get_active ()); raw_deadpix_filt->set_active (raw->get_active ());
raw_pdaf_lines_filter->set_active (raw->get_active ()); raw_pdaf_lines_filter->set_active (raw->get_active ());
raw_expos->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 ()); raw_black->set_active (raw->get_active ());
df_file->set_active (raw->get_active ()); df_file->set_active (raw->get_active ());
df_AutoSelect->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; filterPE.raw.exPos = falsePE.raw.exPos;
} }
if (!raw_preser->get_active ()) {
filterPE.raw.exPreser = falsePE.raw.exPreser;
}
if (!raw_ca_autocorrect->get_active ()) { if (!raw_ca_autocorrect->get_active ()) {
filterPE.raw.ca_autocorrect = falsePE.raw.ca_autocorrect; filterPE.raw.ca_autocorrect = falsePE.raw.ca_autocorrect;
filterPE.raw.caautoiterations = falsePE.raw.caautoiterations; filterPE.raw.caautoiterations = falsePE.raw.caautoiterations;

View File

@ -102,7 +102,6 @@ public:
// options in raw: // options in raw:
Gtk::CheckButton* raw_expos; Gtk::CheckButton* raw_expos;
Gtk::CheckButton* raw_preser;
Gtk::CheckButton* raw_black; Gtk::CheckButton* raw_black;
Gtk::CheckButton* raw_ca_autocorrect; Gtk::CheckButton* raw_ca_autocorrect;
Gtk::CheckButton* raw_caredblue; Gtk::CheckButton* raw_caredblue;
@ -138,7 +137,7 @@ public:
sigc::connection coarserotConn, finerotConn, cropConn, resizeConn, prsharpeningConn, perspectiveConn, commonTransConn; sigc::connection coarserotConn, finerotConn, cropConn, resizeConn, prsharpeningConn, perspectiveConn, commonTransConn;
sigc::connection metadataConn, exifchConn, iptcConn, icmConn; sigc::connection metadataConn, exifchConn, iptcConn, icmConn;
sigc::connection df_fileConn, df_AutoSelectConn, ff_fileConn, ff_AutoSelectConn, ff_BlurRadiusConn, ff_BlurTypeConn, ff_ClipControlConn; 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: public:
PartialPasteDlg (const Glib::ustring &title, Gtk::Window* parent); PartialPasteDlg (const Glib::ustring &title, Gtk::Window* parent);

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