merge with dev

This commit is contained in:
Desmis 2018-01-26 18:00:33 +01:00
commit 4a29e34e20
51 changed files with 591 additions and 377 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 494 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 455 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 494 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 455 B

View File

@ -9,6 +9,7 @@ ADJUSTER_RESET_TO_DEFAULT;Réglages par défaut
BATCHQUEUE_AUTOSTART;Démarrage auto BATCHQUEUE_AUTOSTART;Démarrage auto
BATCHQUEUE_AUTOSTARTHINT;Démarrer automatiquement le traitement à l'arrivée d'une nouvelle tâche BATCHQUEUE_AUTOSTARTHINT;Démarrer automatiquement le traitement à l'arrivée d'une nouvelle tâche
BATCHQUEUE_DESTFILENAME;Chemin et nom de fichier BATCHQUEUE_DESTFILENAME;Chemin et nom de fichier
BATCHQUEUE_STARTSTOPHINT;Démarre ou arrête le traitement des images dans la file.\n\nRaccourci: <b>Ctrl</b>+<b>s</b>
BATCH_PROCESSING;Traitement par lot BATCH_PROCESSING;Traitement par lot
CURVEEDITOR_AXIS_IN;E: CURVEEDITOR_AXIS_IN;E:
CURVEEDITOR_AXIS_LEFT_TAN;TG: CURVEEDITOR_AXIS_LEFT_TAN;TG:
@ -228,6 +229,7 @@ GENERAL_OK;OK
GENERAL_OPEN;Ouvrir GENERAL_OPEN;Ouvrir
GENERAL_PORTRAIT;Portrait GENERAL_PORTRAIT;Portrait
GENERAL_SAVE;Enregistrer GENERAL_SAVE;Enregistrer
GENERAL_SLIDER;Curseur
GENERAL_UNCHANGED;(Inchangé) GENERAL_UNCHANGED;(Inchangé)
GENERAL_WARNING;Attention GENERAL_WARNING;Attention
GIMP_PLUGIN_INFO;Bienvenue dans le plugin RawTherapee de GIMP!\nUne fois l'édition terminée, fermez simplement la fenêtre principale de RawTherapee et l'image sera importée automatiquement dans GIMP. GIMP_PLUGIN_INFO;Bienvenue dans le plugin RawTherapee de GIMP!\nUne fois l'édition terminée, fermez simplement la fenêtre principale de RawTherapee et l'image sera importée automatiquement dans GIMP.
@ -415,6 +417,7 @@ HISTORY_MSG_169;Courbe 'CT'
HISTORY_MSG_170;Vib. - Courbe HISTORY_MSG_170;Vib. - Courbe
HISTORY_MSG_171;Courbe 'LC' HISTORY_MSG_171;Courbe 'LC'
HISTORY_MSG_172;Lab - Restreindre 'LC' HISTORY_MSG_172;Lab - Restreindre 'LC'
HISTORY_MSG_173;Réd. de bruit - Récupération des détails
HISTORY_MSG_174;Modèle d'Apparence de la Couleur 2002 HISTORY_MSG_174;Modèle d'Apparence de la Couleur 2002
HISTORY_MSG_175;CAM02 - Adaptation CAT02 HISTORY_MSG_175;CAM02 - Adaptation CAT02
HISTORY_MSG_176;CAM02 - Environ. de visionnage HISTORY_MSG_176;CAM02 - Environ. de visionnage
@ -444,6 +447,7 @@ HISTORY_MSG_199;CAM02 - Histogrammes de sortie
HISTORY_MSG_200;CAM02 - Compression tonale HISTORY_MSG_200;CAM02 - Compression tonale
HISTORY_MSG_201;Réd. de bruit - Chrom. R,V HISTORY_MSG_201;Réd. de bruit - Chrom. R,V
HISTORY_MSG_202;Réd. de bruit - Chrom. B,J HISTORY_MSG_202;Réd. de bruit - Chrom. B,J
HISTORY_MSG_203;Réd. de bruit - Espace couleur
HISTORY_MSG_204;Niveau d'amélioration LMMSE HISTORY_MSG_204;Niveau d'amélioration LMMSE
HISTORY_MSG_205;CAM02 Pixels chauds/morts HISTORY_MSG_205;CAM02 Pixels chauds/morts
HISTORY_MSG_206;CAT02 - Luminosité de la scène auto HISTORY_MSG_206;CAT02 - Luminosité de la scène auto
@ -495,6 +499,7 @@ HISTORY_MSG_252;CpND - Tons chair
HISTORY_MSG_253;CpND - Réduction des artéfactes HISTORY_MSG_253;CpND - Réduction des artéfactes
HISTORY_MSG_254;CpND - Teinte chair HISTORY_MSG_254;CpND - Teinte chair
HISTORY_MSG_255;Réd. de bruit - Filtre médian HISTORY_MSG_255;Réd. de bruit - Filtre médian
HISTORY_MSG_256;Réd. de bruit - Médian - Type
HISTORY_MSG_257;Virage Partiel HISTORY_MSG_257;Virage Partiel
HISTORY_MSG_258;Virage Partiel - Couleur HISTORY_MSG_258;Virage Partiel - Couleur
HISTORY_MSG_259;Virage Partiel - Opacité HISTORY_MSG_259;Virage Partiel - Opacité
@ -535,6 +540,7 @@ HISTORY_MSG_293;Simulation de Film
HISTORY_MSG_294;Simulation de Film - Force HISTORY_MSG_294;Simulation de Film - Force
HISTORY_MSG_295;Simulation de Film - Film HISTORY_MSG_295;Simulation de Film - Film
HISTORY_MSG_296;Réd. de bruit - Courbe de luminance HISTORY_MSG_296;Réd. de bruit - Courbe de luminance
HISTORY_MSG_297;Réd. de bruit - Mode
HISTORY_MSG_298;Filtre de pixel mort HISTORY_MSG_298;Filtre de pixel mort
HISTORY_MSG_299;Réd. de bruit - Courbe de chrominance HISTORY_MSG_299;Réd. de bruit - Courbe de chrominance
HISTORY_MSG_300;- HISTORY_MSG_300;-
@ -712,6 +718,17 @@ HISTORY_MSG_487;Corr. d'Obj. - Objectif
HISTORY_MSG_488;Compression tonale HDR HISTORY_MSG_488;Compression tonale HDR
HISTORY_MSG_489;CT HDR - Seuil HISTORY_MSG_489;CT HDR - Seuil
HISTORY_MSG_490;CT HDR - Quantité HISTORY_MSG_490;CT HDR - Quantité
HISTORY_MSG_491;Balances des Blancs
HISTORY_MSG_492;Courbes RVB
HISTORY_MSG_493;Ajustements L*a*b*
HISTORY_MSG_COLORTONING_LABGRID_VALUE;Virage Partiel - Correction couleur
HISTORY_MSG_HISTMATCHING;Calcul Courbe Tonale svt Aperçu
HISTORY_MSG_LOCALCONTRAST_AMOUNT;Contraste Local - Quantité
HISTORY_MSG_LOCALCONTRAST_DARKNESS;Contraste Local - Ombres
HISTORY_MSG_LOCALCONTRAST_ENABLED;Contraste Local
HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Contraste Local - H.L.
HISTORY_MSG_LOCALCONTRAST_RADIUS;Contraste Local - Rayon
HISTORY_MSG_METADATA_MODE;Mode de copie des métadonnées
HISTORY_NEWSNAPSHOT;Ajouter HISTORY_NEWSNAPSHOT;Ajouter
HISTORY_NEWSNAPSHOT_TOOLTIP;Raccourci: <b>Alt-s</b> HISTORY_NEWSNAPSHOT_TOOLTIP;Raccourci: <b>Alt-s</b>
HISTORY_SNAPSHOT;Capture HISTORY_SNAPSHOT;Capture
@ -797,6 +814,8 @@ MAIN_MSG_QOVERWRITE;Voulez-vous l'écraser?
MAIN_MSG_SETPATHFIRST;Vous devez d'abord choisir un dossier cible dans Préférences\npour pouvoir utiliser cette fonction! MAIN_MSG_SETPATHFIRST;Vous devez d'abord choisir un dossier cible dans Préférences\npour pouvoir utiliser cette fonction!
MAIN_MSG_TOOMANYOPENEDITORS;Too many open editors.\nPlease close an editor to continue. MAIN_MSG_TOOMANYOPENEDITORS;Too many open editors.\nPlease close an editor to continue.
MAIN_MSG_WRITEFAILED;Échec de l'enregistrement du fichier\n\n<b>"%1"</b>\n\nAssurez-vous que le dossier existe et qu'il est permis d'y écrire. MAIN_MSG_WRITEFAILED;Échec de l'enregistrement du fichier\n\n<b>"%1"</b>\n\nAssurez-vous que le dossier existe et qu'il est permis d'y écrire.
MAIN_TAB_ADVANCED;Avancé
MAIN_TAB_ADVANCED_TOOLTIP;Raccourci: <b>Alt-w</b>
MAIN_TAB_COLOR;Couleur MAIN_TAB_COLOR;Couleur
MAIN_TAB_COLOR_TOOLTIP;Raccourci:<b>Alt-c</b> MAIN_TAB_COLOR_TOOLTIP;Raccourci:<b>Alt-c</b>
MAIN_TAB_DETAIL;Détail MAIN_TAB_DETAIL;Détail
@ -851,6 +870,7 @@ NAVIGATOR_XY_FULL;Largeur = %1, Hauteur = %2
NAVIGATOR_XY_NA;x = n/d, y = n/d NAVIGATOR_XY_NA;x = n/d, y = n/d
OPTIONS_DEFIMG_MISSING;Le profil par défaut pour les <b>images standards</b> n'a pas été trouvé ou n'a pas été réglé.\n\nVérifiez également le dossier de vos profils, il peut être manquant ou endommagé\n\nLes valeurs internes pas défaut seront utilisées. OPTIONS_DEFIMG_MISSING;Le profil par défaut pour les <b>images standards</b> n'a pas été trouvé ou n'a pas été réglé.\n\nVérifiez également le dossier de vos profils, il peut être manquant ou endommagé\n\nLes valeurs internes pas défaut seront utilisées.
OPTIONS_DEFRAW_MISSING;Le profil par défaut pour les <b>images Raw</b> n'a pas été trouvé ou n'a pas été réglé.\n\nVérifiez également le dossier de vos profils, il peut être manquant ou endommagé\n\nLes valeurs internes pas défaut seront utilisées. OPTIONS_DEFRAW_MISSING;Le profil par défaut pour les <b>images Raw</b> n'a pas été trouvé ou n'a pas été réglé.\n\nVérifiez également le dossier de vos profils, il peut être manquant ou endommagé\n\nLes valeurs internes pas défaut seront utilisées.
PARTIALPASTE_ADVANCEDGROUP;Réglages Avancés
PARTIALPASTE_BASICGROUP;Réglages de base PARTIALPASTE_BASICGROUP;Réglages de base
PARTIALPASTE_CACORRECTION;Aberration chromatique PARTIALPASTE_CACORRECTION;Aberration chromatique
PARTIALPASTE_CHANNELMIXER;Mixage des canaux PARTIALPASTE_CHANNELMIXER;Mixage des canaux
@ -889,6 +909,8 @@ PARTIALPASTE_IPTCINFO;Infos IPTC
PARTIALPASTE_LABCURVE;Courbes Lab PARTIALPASTE_LABCURVE;Courbes Lab
PARTIALPASTE_LENSGROUP;Réglages de l'objectif PARTIALPASTE_LENSGROUP;Réglages de l'objectif
PARTIALPASTE_LENSPROFILE;Profil de correction d'Objectif PARTIALPASTE_LENSPROFILE;Profil de correction d'Objectif
PARTIALPASTE_LOCALCONTRAST;Contraste local
PARTIALPASTE_METADATA;Mode des Metadonnées
PARTIALPASTE_METAGROUP;Réglages des Métadonnées PARTIALPASTE_METAGROUP;Réglages des Métadonnées
PARTIALPASTE_PCVIGNETTE;Filtre Vignettage PARTIALPASTE_PCVIGNETTE;Filtre Vignettage
PARTIALPASTE_PERSPECTIVE;Perspective PARTIALPASTE_PERSPECTIVE;Perspective
@ -955,6 +977,12 @@ PREFERENCES_CLUTSCACHE;Cache HaldCLUT
PREFERENCES_CLUTSCACHE_LABEL;Nombre maximum de chache CLUT PREFERENCES_CLUTSCACHE_LABEL;Nombre maximum de chache CLUT
PREFERENCES_CLUTSDIR;Dossier HaldCLUT PREFERENCES_CLUTSDIR;Dossier HaldCLUT
PREFERENCES_CMMBPC;Compensation du point noir PREFERENCES_CMMBPC;Compensation du point noir
PREFERENCES_CROP;Édition du recadrage
PREFERENCES_CROP_AUTO_FIT;Zommer automatiquement sur la zone recadrée
PREFERENCES_CROP_GUIDES;Guides affichés en dehors de l'édition du recadrage
PREFERENCES_CROP_GUIDES_FRAME;Cadre
PREFERENCES_CROP_GUIDES_FULL;Original
PREFERENCES_CROP_GUIDES_NONE;Aucun
PREFERENCES_CURVEBBOXPOS;Position des boutons copier/coller des courbes PREFERENCES_CURVEBBOXPOS;Position des boutons copier/coller des courbes
PREFERENCES_CURVEBBOXPOS_ABOVE;Au-dessus PREFERENCES_CURVEBBOXPOS_ABOVE;Au-dessus
PREFERENCES_CURVEBBOXPOS_BELOW;En-dessous PREFERENCES_CURVEBBOXPOS_BELOW;En-dessous
@ -986,6 +1014,7 @@ PREFERENCES_DIRLAST;Dernier dossier visité
PREFERENCES_DIROTHER;Autre PREFERENCES_DIROTHER;Autre
PREFERENCES_DIRSELECTDLG;Choix du dossier Image au lancement... PREFERENCES_DIRSELECTDLG;Choix du dossier Image au lancement...
PREFERENCES_DIRSOFTWARE;Dossier d'installation PREFERENCES_DIRSOFTWARE;Dossier d'installation
PREFERENCES_EDITORCMDLINE;Ligne de commande personnelle
PREFERENCES_EDITORLAYOUT;Disposition de l'éditeur PREFERENCES_EDITORLAYOUT;Disposition de l'éditeur
PREFERENCES_EXPAUT;Expert PREFERENCES_EXPAUT;Expert
PREFERENCES_EXTERNALEDITOR;Éditeur externe PREFERENCES_EXTERNALEDITOR;Éditeur externe
@ -1381,6 +1410,7 @@ TP_COLORTONING_HIGHLIGHT;Hautes lumières
TP_COLORTONING_HUE;Teinte TP_COLORTONING_HUE;Teinte
TP_COLORTONING_LAB;Mixage Lab TP_COLORTONING_LAB;Mixage Lab
TP_COLORTONING_LABEL;Virage Partiel TP_COLORTONING_LABEL;Virage Partiel
TP_COLORTONING_LABGRID;Grille de correction L*a*b*
TP_COLORTONING_LABGRID_VALUES;HL: a=%1 b=%2\nO: a=%3 b=%4 TP_COLORTONING_LABGRID_VALUES;HL: a=%1 b=%2\nO: a=%3 b=%4
TP_COLORTONING_LUMA;Luminance TP_COLORTONING_LUMA;Luminance
TP_COLORTONING_LUMAMODE;Préserver la luminance TP_COLORTONING_LUMAMODE;Préserver la luminance
@ -1435,6 +1465,7 @@ TP_DIRPYRDENOISE_CHROMINANCE_AUTOGLOBAL;Global automatique
TP_DIRPYRDENOISE_CHROMINANCE_AUTOGLOBAL_TOOLTIP;Essaie d'évaluer le bruit chroma\nFaites attention, cela calcul une moyenne, et est très subjectif ! TP_DIRPYRDENOISE_CHROMINANCE_AUTOGLOBAL_TOOLTIP;Essaie d'évaluer le bruit chroma\nFaites attention, cela calcul une moyenne, et est très subjectif !
TP_DIRPYRDENOISE_CHROMINANCE_BLUEYELLOW;Chrominance - Bleu-Jaune TP_DIRPYRDENOISE_CHROMINANCE_BLUEYELLOW;Chrominance - Bleu-Jaune
TP_DIRPYRDENOISE_CHROMINANCE_CURVE;Courbe de chrominance TP_DIRPYRDENOISE_CHROMINANCE_CURVE;Courbe de chrominance
TP_DIRPYRDENOISE_CHROMINANCE_CURVE_TOOLTIP;Augmente (multiplie) la valeur de tous les curseurs de chrominance.\nCette courbe vous permet d'ajuster la force de la réduction de bruit chromatique en fonction de la chromaticité, par exemple pour augmenter l'action dans les zones faiblement saturées et pour la diminuer dans celles très saturées.
TP_DIRPYRDENOISE_CHROMINANCE_FRAME;Chrominance TP_DIRPYRDENOISE_CHROMINANCE_FRAME;Chrominance
TP_DIRPYRDENOISE_CHROMINANCE_MANUAL;Manuel TP_DIRPYRDENOISE_CHROMINANCE_MANUAL;Manuel
TP_DIRPYRDENOISE_CHROMINANCE_MASTER;Chrominance - Maître TP_DIRPYRDENOISE_CHROMINANCE_MASTER;Chrominance - Maître
@ -1451,6 +1482,7 @@ TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_TILEINFO;Taille des tuiles =%1, Centre: Tx=
TP_DIRPYRDENOISE_CHROMINANCE_REDGREEN;Chrominance - Rouge-Vert TP_DIRPYRDENOISE_CHROMINANCE_REDGREEN;Chrominance - Rouge-Vert
TP_DIRPYRDENOISE_ENH;Mode amélioré TP_DIRPYRDENOISE_ENH;Mode amélioré
TP_DIRPYRDENOISE_ENH_TOOLTIP;Augmente la qualité du débruitage, mais augmente le temps de traitement d'environ 20% TP_DIRPYRDENOISE_ENH_TOOLTIP;Augmente la qualité du débruitage, mais augmente le temps de traitement d'environ 20%
TP_DIRPYRDENOISE_LABEL;Réduction de Bruit
TP_DIRPYRDENOISE_LUMINANCE_CONTROL;Contrôle de luminance TP_DIRPYRDENOISE_LUMINANCE_CONTROL;Contrôle de luminance
TP_DIRPYRDENOISE_LUMINANCE_CURVE;Courbe de luminance TP_DIRPYRDENOISE_LUMINANCE_CURVE;Courbe de luminance
TP_DIRPYRDENOISE_LUMINANCE_DETAIL;Niveau de détails de Luminance TP_DIRPYRDENOISE_LUMINANCE_DETAIL;Niveau de détails de Luminance
@ -1526,6 +1558,8 @@ TP_EXPOSURE_CURVEEDITOR1;Courbe Tonale 1
TP_EXPOSURE_CURVEEDITOR2;Courbe Tonale 2 TP_EXPOSURE_CURVEEDITOR2;Courbe Tonale 2
TP_EXPOSURE_CURVEEDITOR2_TOOLTIP;Référez-vous à la section suivante du manuel pour en savoir plus sur les manières d'obtenir les meilleurs résultats avec l'option de double courbe:\nThe Toolbox > Exposure Tab > Exposure Panel > Tone Curve TP_EXPOSURE_CURVEEDITOR2_TOOLTIP;Référez-vous à la section suivante du manuel pour en savoir plus sur les manières d'obtenir les meilleurs résultats avec l'option de double courbe:\nThe Toolbox > Exposure Tab > Exposure Panel > Tone Curve
TP_EXPOSURE_EXPCOMP;Compensation d'exposition TP_EXPOSURE_EXPCOMP;Compensation d'exposition
TP_EXPOSURE_HISTMATCHING;Calcul Courbe Tonale svt Aperçu
TP_EXPOSURE_HISTMATCHING_TOOLTIP;Ajuste automatiquement les curseurs et courbes (excepté la compensation d'exposition) pour obtenir l'aspect de l'aperçu JPEG inclus.
TP_EXPOSURE_LABEL;Exposition TP_EXPOSURE_LABEL;Exposition
TP_EXPOSURE_SATURATION;Saturation TP_EXPOSURE_SATURATION;Saturation
TP_EXPOSURE_TCMODE_FILMLIKE;Similaire Film TP_EXPOSURE_TCMODE_FILMLIKE;Similaire Film
@ -1662,6 +1696,15 @@ TP_LENSPROFILE_LABEL;Profil de correction d'objectif
TP_LENSPROFILE_USECA;Corr. de l'aber. chromatique TP_LENSPROFILE_USECA;Corr. de l'aber. chromatique
TP_LENSPROFILE_USEDIST;Corr. de la distortion TP_LENSPROFILE_USEDIST;Corr. de la distortion
TP_LENSPROFILE_USEVIGN;Corr. du vignettage TP_LENSPROFILE_USEVIGN;Corr. du vignettage
TP_LOCALCONTRAST_AMOUNT;Quantité
TP_LOCALCONTRAST_DARKNESS;Niveau des ombres
TP_LOCALCONTRAST_LABEL;Contraste Local
TP_LOCALCONTRAST_LIGHTNESS;Niveau des hautes-lumières
TP_LOCALCONTRAST_RADIUS;Rayon
TP_METADATA_EDIT;Appliquer les modifications
TP_METADATA_MODE;Mode de copie des métadonnées
TP_METADATA_STRIP;Retirer toutes les métadonnées
TP_METADATA_TUNNEL;Copier à l'identique
TP_NEUTRAL;Réinit. TP_NEUTRAL;Réinit.
TP_NEUTRAL_TIP;Réinitialise les valeurs de l'exposition à des valeurs neutres TP_NEUTRAL_TIP;Réinitialise les valeurs de l'exposition à des valeurs neutres
TP_PCVIGNETTE_FEATHER;Étendue TP_PCVIGNETTE_FEATHER;Étendue
@ -1761,6 +1804,8 @@ TP_RAW_PIXELSHIFTNONGREENCROSS2;Vérifier vert AMaZE
TP_RAW_PIXELSHIFTNONGREENHORIZONTAL;Vérifier rouge/bleu horizontal TP_RAW_PIXELSHIFTNONGREENHORIZONTAL;Vérifier rouge/bleu horizontal
TP_RAW_PIXELSHIFTNONGREENVERTICAL;Vérifier rouge/bleu vertical TP_RAW_PIXELSHIFTNONGREENVERTICAL;Vérifier rouge/bleu vertical
TP_RAW_PIXELSHIFTNREADISO;Lire TP_RAW_PIXELSHIFTNREADISO;Lire
TP_RAW_PIXELSHIFTONEGREEN;Utiliser un seul canal vert
TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;Utilise un seul canal vert au lieu de faire la moyennes des deux canaux verts pour détecter les régions sans mouvement.
TP_RAW_PIXELSHIFTPRNU;PRNU (%) TP_RAW_PIXELSHIFTPRNU;PRNU (%)
TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Poid Rouge&Bleu TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Poid Rouge&Bleu
TP_RAW_PIXELSHIFTSHOWMOTION;Voir le masque de mouvement TP_RAW_PIXELSHIFTSHOWMOTION;Voir le masque de mouvement
@ -1774,6 +1819,7 @@ TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Adouci les transitions entre les zones avec mouv
TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;Facteur DevStd Bleu TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;Facteur DevStd Bleu
TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;Facteur DevStd Vert TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;Facteur DevStd Vert
TP_RAW_PIXELSHIFTSTDDEVFACTORRED;Facteur DevStd Rouge TP_RAW_PIXELSHIFTSTDDEVFACTORRED;Facteur DevStd Rouge
TP_RAW_RCD;RCD
TP_RAW_SENSOR_BAYER_LABEL;Capteur à matrice de Bayer TP_RAW_SENSOR_BAYER_LABEL;Capteur à matrice de Bayer
TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-passes donne les meilleurs résultats (recommendé pour les images de faible ISO).\n1-passe est presque indifférentiable de 3-passes pour les images à haut ISO et est plus rapide. TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-passes donne les meilleurs résultats (recommendé pour les images de faible ISO).\n1-passe est presque indifférentiable de 3-passes pour les images à haut ISO et est plus rapide.
TP_RAW_SENSOR_XTRANS_LABEL;Capteur à matrice X-Trans TP_RAW_SENSOR_XTRANS_LABEL;Capteur à matrice X-Trans
@ -2160,44 +2206,3 @@ ZOOMPANEL_ZOOMFITSCREEN;Affiche l'image entière\nRaccourci: <b>f</b>
ZOOMPANEL_ZOOMIN;Zoom Avant\nRaccourci: <b>+</b> ZOOMPANEL_ZOOMIN;Zoom Avant\nRaccourci: <b>+</b>
ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: <b>-</b> ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: <b>-</b>
!!!!!!!!!!!!!!!!!!!!!!!!!
! Untranslated keys follow; remove the ! prefix after an entry is translated.
!!!!!!!!!!!!!!!!!!!!!!!!!
!BATCHQUEUE_STARTSTOPHINT;Start or stop processing the images in the queue.\n\nShortcut: <b>Ctrl</b>+<b>s</b>
!GENERAL_SLIDER;Slider
!HISTORY_MSG_173;NR - Detail recovery
!HISTORY_MSG_203;NR - Color space
!HISTORY_MSG_256;NR - Median - Type
!HISTORY_MSG_297;NR - Mode
!HISTORY_MSG_491;White Balance
!HISTORY_MSG_492;RGB Curves
!HISTORY_MSG_493;L*a*b* Adjustments
!HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount
!HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness
!HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast
!HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness
!HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius
!HISTORY_MSG_METADATA_MODE;Metadata copy mode
!PARTIALPASTE_LOCALCONTRAST;Local contrast
!PREFERENCES_CROP;Crop editing
!PREFERENCES_CROP_AUTO_FIT;Automatically zoom to fit the crop area
!PREFERENCES_CROP_GUIDES;Guides shown when not editing the crop
!PREFERENCES_CROP_GUIDES_FRAME;Frame
!PREFERENCES_CROP_GUIDES_FULL;Original
!PREFERENCES_CROP_GUIDES_NONE;None
!PREFERENCES_EDITORCMDLINE;Custom command line
!TP_DIRPYRDENOISE_CHROMINANCE_CURVE_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation.
!TP_DIRPYRDENOISE_LABEL;Noise Reduction
!TP_LOCALCONTRAST_AMOUNT;Amount
!TP_LOCALCONTRAST_DARKNESS;Darkness level
!TP_LOCALCONTRAST_LABEL;Local Contrast
!TP_LOCALCONTRAST_LIGHTNESS;Lightness level
!TP_LOCALCONTRAST_RADIUS;Radius
!TP_METADATA_EDIT;Apply modifications
!TP_METADATA_MODE;Metadata copy mode
!TP_METADATA_STRIP;Strip all metadata
!TP_METADATA_TUNNEL;Copy unchanged
!TP_RAW_PIXELSHIFTONEGREEN;Use one green instead of average
!TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;Use one green instead of averaging two greens for regions without motion.
!TP_RAW_RCD;RCD

View File

@ -852,6 +852,7 @@ HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast
HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness
HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius
HISTORY_MSG_METADATA_MODE;Metadata copy mode HISTORY_MSG_METADATA_MODE;Metadata copy mode
HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor
HISTORY_NEWSNAPSHOT;Add HISTORY_NEWSNAPSHOT;Add
HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: <b>Alt-s</b> HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: <b>Alt-s</b>
HISTORY_SNAPSHOT;Snapshot HISTORY_SNAPSHOT;Snapshot
@ -1035,7 +1036,8 @@ PARTIALPASTE_LOCALLAB;Local L*a*b*
PARTIALPASTE_LOCGROUP;Local PARTIALPASTE_LOCGROUP;Local
PARTIALPASTE_LENSPROFILE;Profiled lens correction PARTIALPASTE_LENSPROFILE;Profiled lens correction
PARTIALPASTE_LOCALCONTRAST;Local contrast PARTIALPASTE_LOCALCONTRAST;Local contrast
PARTIALPASTE_METAGROUP;Metadata PARTIALPASTE_METADATA;Metadata mode
PARTIALPASTE_METAGROUP;Metadata settings
PARTIALPASTE_PCVIGNETTE;Vignette filter PARTIALPASTE_PCVIGNETTE;Vignette filter
PARTIALPASTE_PERSPECTIVE;Perspective PARTIALPASTE_PERSPECTIVE;Perspective
PARTIALPASTE_PREPROCESS_DEADPIXFILT;Dead pixel filter PARTIALPASTE_PREPROCESS_DEADPIXFILT;Dead pixel filter
@ -2210,6 +2212,7 @@ TP_SHARPENMICRO_LABEL;Microcontrast
TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5 TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5
TP_SHARPENMICRO_UNIFORMITY;Uniformity TP_SHARPENMICRO_UNIFORMITY;Uniformity
TP_TM_FATTAL_AMOUNT;Amount TP_TM_FATTAL_AMOUNT;Amount
TP_TM_FATTAL_ANCHOR;Anchor
TP_TM_FATTAL_LABEL;HDR Tone Mapping TP_TM_FATTAL_LABEL;HDR Tone Mapping
TP_TM_FATTAL_THRESHOLD;Threshold TP_TM_FATTAL_THRESHOLD;Threshold
TP_VIBRANCE_AVOIDCOLORSHIFT;Avoid color shift TP_VIBRANCE_AVOIDCOLORSHIFT;Avoid color shift

View File

@ -291,7 +291,7 @@ bool MultiDiagonalSymmetricMatrix::LazySetEntry(float value, int row, int column
return true; return true;
} }
SSEFUNCTION void MultiDiagonalSymmetricMatrix::VectorProduct(float* RESTRICT Product, float* RESTRICT x) void MultiDiagonalSymmetricMatrix::VectorProduct(float* RESTRICT Product, float* RESTRICT x)
{ {
int srm = StartRows[m - 1]; int srm = StartRows[m - 1];
@ -693,7 +693,7 @@ EdgePreservingDecomposition::~EdgePreservingDecomposition()
delete A; delete A;
} }
SSEFUNCTION float *EdgePreservingDecomposition::CreateBlur(float *Source, float Scale, float EdgeStopping, int Iterates, float *Blur, bool UseBlurForEdgeStop) float *EdgePreservingDecomposition::CreateBlur(float *Source, float Scale, float EdgeStopping, int Iterates, float *Blur, bool UseBlurForEdgeStop)
{ {
if(Blur == nullptr) if(Blur == nullptr)
@ -884,7 +884,7 @@ float *EdgePreservingDecomposition::CreateIteratedBlur(float *Source, float Scal
return Blur; return Blur;
} }
SSEFUNCTION void EdgePreservingDecomposition::CompressDynamicRange(float *Source, float Scale, float EdgeStopping, float CompressionExponent, float DetailBoost, int Iterates, int Reweightings) void EdgePreservingDecomposition::CompressDynamicRange(float *Source, float Scale, float EdgeStopping, float CompressionExponent, float DetailBoost, int Iterates, int Reweightings)
{ {
if(w < 300 && h < 300) { // set number of Reweightings to zero for small images (thumbnails). We could try to find a better solution here. if(w < 300 && h < 300) { // set number of Reweightings to zero for small images (thumbnails). We could try to find a better solution here.
Reweightings = 0; Reweightings = 0;

View File

@ -474,7 +474,7 @@ void ImProcFunctions::Tile_calc(int tilesize, int overlap, int kall, int imwidth
int denoiseNestedLevels = 1; int denoiseNestedLevels = 1;
enum nrquality {QUALITY_STANDARD, QUALITY_HIGH}; enum nrquality {QUALITY_STANDARD, QUALITY_HIGH};
SSEFUNCTION void ImProcFunctions::RGB_denoise(int kall, Imagefloat * src, Imagefloat * dst, Imagefloat * calclum, float * ch_M, float *max_r, float *max_b, bool isRAW, const procparams::DirPyrDenoiseParams & dnparams, const double expcomp, const NoiseCurve & noiseLCurve, const NoiseCurve & noiseCCurve, float &nresi, float &highresi) void ImProcFunctions::RGB_denoise(int kall, Imagefloat * src, Imagefloat * dst, Imagefloat * calclum, float * ch_M, float *max_r, float *max_b, bool isRAW, const procparams::DirPyrDenoiseParams & dnparams, const double expcomp, const NoiseCurve & noiseLCurve, const NoiseCurve & noiseCCurve, float &nresi, float &highresi)
{ {
BENCHFUN BENCHFUN
//#ifdef _DEBUG //#ifdef _DEBUG
@ -783,7 +783,7 @@ BENCHFUN
numthreads = MIN(numthreads, options.rgbDenoiseThreadLimit); numthreads = MIN(numthreads, options.rgbDenoiseThreadLimit);
} }
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
denoiseNestedLevels = omp_get_max_threads() / numthreads; denoiseNestedLevels = omp_get_max_threads() / numthreads;
bool oldNested = omp_get_nested(); bool oldNested = omp_get_nested();
@ -916,7 +916,7 @@ BENCHFUN
if (!denoiseMethodRgb) { //lab mode if (!denoiseMethodRgb) { //lab mode
//modification Jacques feb 2013 and july 2014 //modification Jacques feb 2013 and july 2014
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel for num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1) #pragma omp parallel for num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1)
#endif #endif
@ -964,7 +964,7 @@ BENCHFUN
} }
} }
} else {//RGB mode } else {//RGB mode
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel for num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1) #pragma omp parallel for num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1)
#endif #endif
@ -999,7 +999,7 @@ BENCHFUN
} }
} }
} else {//image is not raw; use Lab parametrization } else {//image is not raw; use Lab parametrization
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel for num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1) #pragma omp parallel for num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1)
#endif #endif
@ -1159,7 +1159,7 @@ BENCHFUN
if (!memoryAllocationFailed) { if (!memoryAllocationFailed) {
// precalculate madL, because it's used in adecomp and bdecomp // precalculate madL, because it's used in adecomp and bdecomp
int maxlvl = Ldecomp->maxlevel(); int maxlvl = Ldecomp->maxlevel();
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel for schedule(dynamic) collapse(2) num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1) #pragma omp parallel for schedule(dynamic) collapse(2) num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1)
#endif #endif
@ -1285,7 +1285,7 @@ BENCHFUN
if (!memoryAllocationFailed) { if (!memoryAllocationFailed) {
// copy labdn->L to Lin before it gets modified by reconstruction // copy labdn->L to Lin before it gets modified by reconstruction
Lin = new array2D<float>(width, height); Lin = new array2D<float>(width, height);
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel for num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1) #pragma omp parallel for num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1)
#endif #endif
@ -1338,14 +1338,14 @@ BENCHFUN
} }
} }
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
int masterThread = omp_get_thread_num(); int masterThread = omp_get_thread_num();
#endif #endif
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1) #pragma omp parallel num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1)
#endif #endif
{ {
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
int subThread = masterThread * denoiseNestedLevels + omp_get_thread_num(); int subThread = masterThread * denoiseNestedLevels + omp_get_thread_num();
#else #else
int subThread = 0; int subThread = 0;
@ -1355,7 +1355,7 @@ BENCHFUN
float *fLblox = fLbloxArray[subThread]; float *fLblox = fLbloxArray[subThread];
float pBuf[width + TS + 2 * blkrad * offset] ALIGNED16; float pBuf[width + TS + 2 * blkrad * offset] ALIGNED16;
float nbrwt[TS * TS] ALIGNED64; float nbrwt[TS * TS] ALIGNED64;
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp for #pragma omp for
#endif #endif
@ -1455,7 +1455,7 @@ BENCHFUN
} }
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel for num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1) #pragma omp parallel for num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1)
#endif #endif
@ -1592,7 +1592,7 @@ BENCHFUN
realred /= 100.f; realred /= 100.f;
realblue /= 100.f; realblue /= 100.f;
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16) num_threads(denoiseNestedLevels) #pragma omp parallel for schedule(dynamic,16) num_threads(denoiseNestedLevels)
#endif #endif
@ -1642,7 +1642,7 @@ BENCHFUN
} }
} }
} else {//RGB mode } else {//RGB mode
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel for num_threads(denoiseNestedLevels) #pragma omp parallel for num_threads(denoiseNestedLevels)
#endif #endif
@ -1682,7 +1682,7 @@ BENCHFUN
} }
} else { } else {
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel for num_threads(denoiseNestedLevels) #pragma omp parallel for num_threads(denoiseNestedLevels)
#endif #endif
@ -1749,7 +1749,7 @@ BENCHFUN
} }
} }
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
omp_set_nested(oldNested); omp_set_nested(oldNested);
#endif #endif
@ -2044,7 +2044,7 @@ BENCHFUN
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
SSEFUNCTION void ImProcFunctions::RGBtile_denoise(float * fLblox, int hblproc, float noisevar_Ldetail, float * nbrwt, float * blurbuffer) //for DCT void ImProcFunctions::RGBtile_denoise(float * fLblox, int hblproc, float noisevar_Ldetail, float * nbrwt, float * blurbuffer) //for DCT
{ {
int blkstart = hblproc * TS * TS; int blkstart = hblproc * TS * TS;
boxabsblur(fLblox + blkstart, nbrwt, 3, 3, TS, TS, blurbuffer); //blur neighbor weights for more robust estimation //for DCT boxabsblur(fLblox + blkstart, nbrwt, 3, 3, TS, TS, blurbuffer); //blur neighbor weights for more robust estimation //for DCT
@ -2254,7 +2254,7 @@ void ImProcFunctions::Noise_residualAB(wavelet_decomposition &WaveletCoeffs_ab,
chmaxresid = maxresid; chmaxresid = maxresid;
} }
SSEFUNCTION bool ImProcFunctions::WaveletDenoiseAll_BiShrinkL(wavelet_decomposition &WaveletCoeffs_L, float *noisevarlum, float madL[8][3], float * vari, int edge, int denoiseNestedLevels) bool ImProcFunctions::WaveletDenoiseAll_BiShrinkL(wavelet_decomposition &WaveletCoeffs_L, float *noisevarlum, float madL[8][3], float * vari, int edge, int denoiseNestedLevels)
{ {
int maxlvl = min(WaveletCoeffs_L.maxlevel(), 5); int maxlvl = min(WaveletCoeffs_L.maxlevel(), 5);
const float eps = 0.01f; const float eps = 0.01f;
@ -2281,7 +2281,7 @@ SSEFUNCTION bool ImProcFunctions::WaveletDenoiseAll_BiShrinkL(wavelet_decomposit
} }
bool memoryAllocationFailed = false; bool memoryAllocationFailed = false;
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1) #pragma omp parallel num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1)
#endif #endif
{ {
@ -2297,7 +2297,7 @@ SSEFUNCTION bool ImProcFunctions::WaveletDenoiseAll_BiShrinkL(wavelet_decomposit
if (!memoryAllocationFailed) { if (!memoryAllocationFailed) {
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp for schedule(dynamic) collapse(2) #pragma omp for schedule(dynamic) collapse(2)
#endif #endif
@ -2439,7 +2439,7 @@ SSEFUNCTION bool ImProcFunctions::WaveletDenoiseAll_BiShrinkL(wavelet_decomposit
} }
SSEFUNCTION bool ImProcFunctions::WaveletDenoiseAll_BiShrinkAB(wavelet_decomposition &WaveletCoeffs_L, wavelet_decomposition &WaveletCoeffs_ab, float *noisevarchrom, float madL[8][3], float *variC, int local, float noisevar_ab, const bool useNoiseCCurve, bool autoch, bool denoiseMethodRgb, int denoiseNestedLevels) bool ImProcFunctions::WaveletDenoiseAll_BiShrinkAB(wavelet_decomposition &WaveletCoeffs_L, wavelet_decomposition &WaveletCoeffs_ab, float *noisevarchrom, float madL[8][3], float *variC, int local, float noisevar_ab, const bool useNoiseCCurve, bool autoch, bool denoiseMethodRgb, int denoiseNestedLevels)
{ {
int maxlvl = WaveletCoeffs_L.maxlevel(); int maxlvl = WaveletCoeffs_L.maxlevel();
@ -2471,7 +2471,7 @@ SSEFUNCTION bool ImProcFunctions::WaveletDenoiseAll_BiShrinkAB(wavelet_decomposi
} }
bool memoryAllocationFailed = false; bool memoryAllocationFailed = false;
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1) #pragma omp parallel num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1)
#endif #endif
{ {
@ -2487,7 +2487,7 @@ SSEFUNCTION bool ImProcFunctions::WaveletDenoiseAll_BiShrinkAB(wavelet_decomposi
if (!memoryAllocationFailed) { if (!memoryAllocationFailed) {
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp for schedule(dynamic) collapse(2) #pragma omp for schedule(dynamic) collapse(2)
#endif #endif
@ -2506,7 +2506,7 @@ SSEFUNCTION bool ImProcFunctions::WaveletDenoiseAll_BiShrinkAB(wavelet_decomposi
} }
} }
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp for schedule(dynamic) collapse(2) #pragma omp for schedule(dynamic) collapse(2)
#endif #endif
@ -2639,7 +2639,7 @@ bool ImProcFunctions::WaveletDenoiseAllL(wavelet_decomposition &WaveletCoeffs_L,
} }
bool memoryAllocationFailed = false; bool memoryAllocationFailed = false;
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1) #pragma omp parallel num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1)
#endif #endif
{ {
@ -2654,7 +2654,7 @@ bool ImProcFunctions::WaveletDenoiseAllL(wavelet_decomposition &WaveletCoeffs_L,
} }
if (!memoryAllocationFailed) { if (!memoryAllocationFailed) {
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp for schedule(dynamic) collapse(2) #pragma omp for schedule(dynamic) collapse(2)
#endif #endif
@ -2703,7 +2703,7 @@ bool ImProcFunctions::WaveletDenoiseAllAB(wavelet_decomposition &WaveletCoeffs_L
} }
bool memoryAllocationFailed = false; bool memoryAllocationFailed = false;
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1) #pragma omp parallel num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1)
#endif #endif
{ {
@ -2717,7 +2717,7 @@ bool ImProcFunctions::WaveletDenoiseAllAB(wavelet_decomposition &WaveletCoeffs_L
} }
if (!memoryAllocationFailed) { if (!memoryAllocationFailed) {
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp for schedule(dynamic) collapse(2) #pragma omp for schedule(dynamic) collapse(2)
#endif #endif
@ -2741,7 +2741,7 @@ bool ImProcFunctions::WaveletDenoiseAllAB(wavelet_decomposition &WaveletCoeffs_L
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
SSEFUNCTION void ImProcFunctions::ShrinkAllL(wavelet_decomposition &WaveletCoeffs_L, float **buffer, int level, int dir, void ImProcFunctions::ShrinkAllL(wavelet_decomposition &WaveletCoeffs_L, float **buffer, int level, int dir,
float *noisevarlum, float * madL, float * vari, int edge) float *noisevarlum, float * madL, float * vari, int edge)
{ {
@ -2881,7 +2881,7 @@ SSEFUNCTION void ImProcFunctions::ShrinkAllL(wavelet_decomposition &WaveletCoeff
} }
SSEFUNCTION void ImProcFunctions::ShrinkAllAB(wavelet_decomposition & WaveletCoeffs_L, wavelet_decomposition & WaveletCoeffs_ab, float **buffer, int level, int dir, void ImProcFunctions::ShrinkAllAB(wavelet_decomposition & WaveletCoeffs_L, wavelet_decomposition & WaveletCoeffs_ab, float **buffer, int level, int dir,
float * noisevarchrom, float noisevar_ab, const bool useNoiseCCurve, bool autoch, float * noisevarchrom, float noisevar_ab, const bool useNoiseCCurve, bool autoch,
bool denoiseMethodRgb, float * madL, float * variC, int local, float * madaab, bool madCalculated) bool denoiseMethodRgb, float * madL, float * variC, int local, float * madaab, bool madCalculated)
@ -3020,7 +3020,7 @@ SSEFUNCTION void ImProcFunctions::ShrinkAllAB(wavelet_decomposition & WaveletCoe
delete [] nvc; delete [] nvc;
} }
SSEFUNCTION void ImProcFunctions::ShrinkAll_info(float ** WavCoeffs_a, float ** WavCoeffs_b, void ImProcFunctions::ShrinkAll_info(float ** WavCoeffs_a, float ** WavCoeffs_b,
int W_ab, int H_ab, float **noisevarlum, float **noisevarchrom, float **noisevarhue, float & chaut, int &Nb, float & redaut, float & blueaut, int W_ab, int H_ab, float **noisevarlum, float **noisevarchrom, float **noisevarhue, float & chaut, int &Nb, float & redaut, float & blueaut,
float & maxredaut, float & maxblueaut, float & minredaut, float & minblueaut, int schoice, int lvl, float & chromina, float & sigma, float & lumema, float & sigma_L, float & redyel, float & skinc, float & nsknc, float & maxredaut, float & maxblueaut, float & minredaut, float & minblueaut, int schoice, int lvl, float & chromina, float & sigma, float & lumema, float & sigma_L, float & redyel, float & skinc, float & nsknc,
float & maxchred, float & maxchblue, float & minchred, float & minchblue, int &nb, float & chau, float & chred, float & chblue, bool denoiseMethodRgb) float & maxchred, float & maxchblue, float & minchred, float & minchblue, int &nb, float & chau, float & chred, float & chblue, bool denoiseMethodRgb)
@ -3160,7 +3160,7 @@ void ImProcFunctions::WaveletDenoiseAll_info(int levwav, wavelet_decomposition &
} }
} }
SSEFUNCTION void ImProcFunctions::RGB_denoise_infoGamCurve(const procparams::DirPyrDenoiseParams & dnparams, bool isRAW, LUTf & gamcurve, float & gam, float & gamthresh, float & gamslope) void ImProcFunctions::RGB_denoise_infoGamCurve(const procparams::DirPyrDenoiseParams & dnparams, bool isRAW, LUTf &gamcurve, float &gam, float &gamthresh, float &gamslope)
{ {
gam = dnparams.gamma; gam = dnparams.gamma;
gamthresh = 0.001f; gamthresh = 0.001f;
@ -3325,7 +3325,7 @@ void ImProcFunctions::calcautodn_info(float & chaut, float & delta, int Nb, int
} }
SSEFUNCTION void ImProcFunctions::RGB_denoise_info(Imagefloat * src, Imagefloat * provicalc, const bool isRAW, LUTf & gamcurve, float gam, float gamthresh, float gamslope, const procparams::DirPyrDenoiseParams & dnparams, const double expcomp, float & chaut, int &Nb, float & redaut, float & blueaut, float & maxredaut, float & maxblueaut, float & minredaut, float & minblueaut, float & chromina, float & sigma, float & lumema, float & sigma_L, float & redyel, float & skinc, float & nsknc, bool multiThread) void ImProcFunctions::RGB_denoise_info(Imagefloat * src, Imagefloat * provicalc, const bool isRAW, LUTf &gamcurve, float gam, float gamthresh, float gamslope, const procparams::DirPyrDenoiseParams & dnparams, const double expcomp, float &chaut, int &Nb, float &redaut, float &blueaut, float &maxredaut, float &maxblueaut, float &minredaut, float &minblueaut, float &chromina, float &sigma, float &lumema, float &sigma_L, float &redyel, float &skinc, float &nsknc, bool multiThread)
{ {
if ((settings->leveldnautsimpl == 1 && dnparams.Cmethod == "MAN") || (settings->leveldnautsimpl == 0 && dnparams.C2method == "MANU")) { if ((settings->leveldnautsimpl == 1 && dnparams.Cmethod == "MAN") || (settings->leveldnautsimpl == 0 && dnparams.C2method == "MANU")) {
//nothing to do //nothing to do
@ -3364,7 +3364,7 @@ SSEFUNCTION void ImProcFunctions::RGB_denoise_info(Imagefloat * src, Imagefloat
bcalc[i] = new float[wid]; bcalc[i] = new float[wid];
} }
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel for if (multiThread) #pragma omp parallel for if (multiThread)
#endif #endif
@ -3487,7 +3487,7 @@ SSEFUNCTION void ImProcFunctions::RGB_denoise_info(Imagefloat * src, Imagefloat
//fill tile from image; convert RGB to "luma/chroma" //fill tile from image; convert RGB to "luma/chroma"
if (isRAW) {//image is raw; use channel differences for chroma channels if (isRAW) {//image is raw; use channel differences for chroma channels
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel for if (multiThread) #pragma omp parallel for if (multiThread)
#endif #endif
@ -3540,7 +3540,7 @@ SSEFUNCTION void ImProcFunctions::RGB_denoise_info(Imagefloat * src, Imagefloat
#endif #endif
} }
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel for if (multiThread) #pragma omp parallel for if (multiThread)
#endif #endif
@ -3558,7 +3558,7 @@ SSEFUNCTION void ImProcFunctions::RGB_denoise_info(Imagefloat * src, Imagefloat
if (!denoiseMethodRgb) { //lab mode, modification Jacques feb 2013 and july 2014 if (!denoiseMethodRgb) { //lab mode, modification Jacques feb 2013 and july 2014
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel for if (multiThread) #pragma omp parallel for if (multiThread)
#endif #endif
@ -3695,17 +3695,17 @@ SSEFUNCTION void ImProcFunctions::RGB_denoise_info(Imagefloat * src, Imagefloat
} }
const int levwav = 5; const int levwav = 5;
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel sections if (multiThread) #pragma omp parallel sections if (multiThread)
#endif #endif
{ {
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp section #pragma omp section
#endif #endif
{ {
adecomp = new wavelet_decomposition(labdn->data + datalen, labdn->W, labdn->H, levwav, 1); adecomp = new wavelet_decomposition(labdn->data + datalen, labdn->W, labdn->H, levwav, 1);
} }
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp section #pragma omp section
#endif #endif
{ {

View File

@ -104,7 +104,7 @@ protected:
unsigned int upperBound; // always equals size-1, parameter created for performance reason unsigned int upperBound; // always equals size-1, parameter created for performance reason
private: private:
unsigned int owner; unsigned int owner;
#if defined( __SSE2__ ) && defined( __x86_64__ ) #ifdef __SSE2__
vfloat maxsv ALIGNED16; vfloat maxsv ALIGNED16;
vfloat sizev ALIGNED16; vfloat sizev ALIGNED16;
vint sizeiv ALIGNED16; vint sizeiv ALIGNED16;
@ -136,7 +136,7 @@ public:
maxs = size - 2; maxs = size - 2;
maxsf = (float)maxs; maxsf = (float)maxs;
maxIndexFloat = ((float)upperBound) - 1e-5; maxIndexFloat = ((float)upperBound) - 1e-5;
#if defined( __SSE2__ ) && defined( __x86_64__ ) #ifdef __SSE2__
maxsv = F2V( maxs ); maxsv = F2V( maxs );
sizeiv = _mm_set1_epi32( (int)(size - 1) ); sizeiv = _mm_set1_epi32( (int)(size - 1) );
sizev = F2V( size - 1 ); sizev = F2V( size - 1 );
@ -167,7 +167,7 @@ public:
maxs = size - 2; maxs = size - 2;
maxsf = (float)maxs; maxsf = (float)maxs;
maxIndexFloat = ((float)upperBound) - 1e-5; maxIndexFloat = ((float)upperBound) - 1e-5;
#if defined( __SSE2__ ) && defined( __x86_64__ ) #ifdef __SSE2__
maxsv = F2V( maxs ); maxsv = F2V( maxs );
sizeiv = _mm_set1_epi32( (int)(size - 1) ); sizeiv = _mm_set1_epi32( (int)(size - 1) );
sizev = F2V( size - 1 ); sizev = F2V( size - 1 );
@ -178,7 +178,7 @@ public:
{ {
data = nullptr; data = nullptr;
reset(); reset();
#if defined( __SSE2__ ) && defined( __x86_64__ ) #ifdef __SSE2__
maxsv = ZEROV; maxsv = ZEROV;
sizev = ZEROV; sizev = ZEROV;
sizeiv = _mm_setzero_si128(); sizeiv = _mm_setzero_si128();
@ -243,7 +243,7 @@ public:
this->maxs = this->size - 2; this->maxs = this->size - 2;
this->maxsf = (float)this->maxs; this->maxsf = (float)this->maxs;
this->maxIndexFloat = ((float)this->upperBound) - 1e-5; this->maxIndexFloat = ((float)this->upperBound) - 1e-5;
#if defined( __SSE2__ ) && defined( __x86_64__ ) #ifdef __SSE2__
this->maxsv = F2V( this->size - 2); this->maxsv = F2V( this->size - 2);
this->sizeiv = _mm_set1_epi32( (int)(this->size - 1) ); this->sizeiv = _mm_set1_epi32( (int)(this->size - 1) );
this->sizev = F2V( this->size - 1 ); this->sizev = F2V( this->size - 1 );
@ -258,7 +258,7 @@ public:
LUT<T> & operator+=(LUT<T> &rhs) LUT<T> & operator+=(LUT<T> &rhs)
{ {
if (rhs.size == this->size) { if (rhs.size == this->size) {
#ifdef _RT_NESTED_OPENMP // temporary solution to fix Issue #3324 #ifdef _OPENMP
#pragma omp simd #pragma omp simd
#endif #endif
@ -274,7 +274,7 @@ public:
template<typename U = T, typename = typename std::enable_if<std::is_same<U, float>::value>::type> template<typename U = T, typename = typename std::enable_if<std::is_same<U, float>::value>::type>
LUT<float> & operator*=(float factor) LUT<float> & operator*=(float factor)
{ {
#ifdef _RT_NESTED_OPENMP // temporary solution to fix Issue #3324 #ifdef _OPENMP
#pragma omp simd #pragma omp simd
#endif #endif
@ -289,7 +289,7 @@ public:
template<typename U = T, typename = typename std::enable_if<std::is_same<U, float>::value>::type> template<typename U = T, typename = typename std::enable_if<std::is_same<U, float>::value>::type>
LUT<float> & operator/=(float divisor) LUT<float> & operator/=(float divisor)
{ {
#ifdef _RT_NESTED_OPENMP // temporary solution to fix Issue #3324 #ifdef _OPENMP
#pragma omp simd #pragma omp simd
#endif #endif
@ -307,7 +307,7 @@ public:
return data[ rtengine::LIM<int>(index, 0, upperBound) ]; return data[ rtengine::LIM<int>(index, 0, upperBound) ];
} }
#if defined( __SSE2__ ) && defined( __x86_64__ ) #ifdef __SSE2__
// NOTE: This function requires LUTs which clips only at lower bound // NOTE: This function requires LUTs which clips only at lower bound
@ -698,7 +698,7 @@ public:
maxs = size - 2; maxs = size - 2;
maxsf = (float)maxs; maxsf = (float)maxs;
maxIndexFloat = ((float)upperBound) - 1e-5; maxIndexFloat = ((float)upperBound) - 1e-5;
#if defined( __SSE2__ ) && defined( __x86_64__ ) #ifdef __SSE2__
maxsv = F2V( size - 2); maxsv = F2V( size - 2);
sizeiv = _mm_set1_epi32( (int)(size - 1) ); sizeiv = _mm_set1_epi32( (int)(size - 1) );
sizev = F2V( size - 1 ); sizev = F2V( size - 1 );

View File

@ -43,7 +43,7 @@ namespace rtengine
{ {
extern const Settings* settings; extern const Settings* settings;
SSEFUNCTION void ImProcFunctions::PF_correct_RT(LabImage * src, LabImage * dst, double radius, int thresh) void ImProcFunctions::PF_correct_RT(LabImage * src, LabImage * dst, double radius, int thresh)
{ {
const int halfwin = ceil(2 * radius) + 1; const int halfwin = ceil(2 * radius) + 1;
@ -285,7 +285,7 @@ SSEFUNCTION void ImProcFunctions::PF_correct_RT(LabImage * src, LabImage * dst,
free(fringe); free(fringe);
} }
SSEFUNCTION void ImProcFunctions::PF_correct_RTcam(CieImage * src, CieImage * dst, double radius, int thresh) void ImProcFunctions::PF_correct_RTcam(CieImage * src, CieImage * dst, double radius, int thresh)
{ {
const int halfwin = ceil(2 * radius) + 1; const int halfwin = ceil(2 * radius) + 1;
@ -655,7 +655,7 @@ SSEFUNCTION void ImProcFunctions::PF_correct_RTcam(CieImage * src, CieImage * ds
free(fringe); free(fringe);
} }
SSEFUNCTION void ImProcFunctions::Badpixelscam(CieImage * src, CieImage * dst, double radius, int thresh, int mode, float skinprot, float chrom, int hotbad) void ImProcFunctions::Badpixelscam(CieImage * src, CieImage * dst, double radius, int thresh, int mode, float skinprot, float chrom, int hotbad)
{ {
const int halfwin = ceil(2 * radius) + 1; const int halfwin = ceil(2 * radius) + 1;
MyTime t1, t2; MyTime t1, t2;
@ -1263,7 +1263,7 @@ SSEFUNCTION void ImProcFunctions::Badpixelscam(CieImage * src, CieImage * dst, d
} }
SSEFUNCTION void ImProcFunctions::BadpixelsLab(LabImage * src, LabImage * dst, double radius, int thresh, int mode, float skinprot, float chrom) void ImProcFunctions::BadpixelsLab(LabImage * src, LabImage * dst, double radius, int thresh, int mode, float skinprot, float chrom)
{ {
const int halfwin = ceil(2 * radius) + 1; const int halfwin = ceil(2 * radius) + 1;
MyTime t1, t2; MyTime t1, t2;

View File

@ -38,7 +38,7 @@
namespace rtengine namespace rtengine
{ {
SSEFUNCTION void RawImageSource::amaze_demosaic_RT(int winx, int winy, int winw, int winh, array2D<float> &rawData, array2D<float> &red, array2D<float> &green, array2D<float> &blue) void RawImageSource::amaze_demosaic_RT(int winx, int winy, int winw, int winh, array2D<float> &rawData, array2D<float> &red, array2D<float> &green, array2D<float> &blue)
{ {
BENCHFUN BENCHFUN

View File

@ -121,7 +121,7 @@ template<class T, class A> void boxblur (T** src, A** dst, int radx, int rady, i
} }
template<class T, class A> SSEFUNCTION void boxblur (T** src, A** dst, T* buffer, int radx, int rady, int W, int H) template<class T, class A> void boxblur (T** src, A** dst, T* buffer, int radx, int rady, int W, int H)
{ {
//box blur image; box range = (radx,rady) //box blur image; box range = (radx,rady)
@ -309,7 +309,7 @@ template<class T, class A> SSEFUNCTION void boxblur (T** src, A** dst, T* buffer
} }
template<class T, class A> SSEFUNCTION void boxblur (T* src, A* dst, A* buffer, int radx, int rady, int W, int H) template<class T, class A> void boxblur (T* src, A* dst, A* buffer, int radx, int rady, int W, int H)
{ {
//box blur image; box range = (radx,rady) i.e. box size is (2*radx+1)x(2*rady+1) //box blur image; box range = (radx,rady) i.e. box size is (2*radx+1)x(2*rady+1)
@ -496,7 +496,7 @@ template<class T, class A> SSEFUNCTION void boxblur (T* src, A* dst, A* buffer,
} }
template<class T, class A> SSEFUNCTION void boxabsblur (T* src, A* dst, int radx, int rady, int W, int H, float * temp) template<class T, class A> void boxabsblur (T* src, A* dst, int radx, int rady, int W, int H, float * temp)
{ {
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

View File

@ -1742,7 +1742,7 @@ void Color::Lab2XYZ(vfloat L, vfloat a, vfloat b, vfloat &x, vfloat &y, vfloat &
void Color::RGB2Lab(float *R, float *G, float *B, float *L, float *a, float *b, const float wp[3][3], int width) void Color::RGB2Lab(float *R, float *G, float *B, float *L, float *a, float *b, const float wp[3][3], int width)
{ {
#if defined( __SSE2__ ) && defined( __x86_64__ ) #ifdef __SSE2__
vfloat maxvalfv = F2V(MAXVALF); vfloat maxvalfv = F2V(MAXVALF);
vfloat c116v = F2V(116.f); vfloat c116v = F2V(116.f);
vfloat c5242d88v = F2V(5242.88f); vfloat c5242d88v = F2V(5242.88f);
@ -1750,7 +1750,7 @@ void Color::RGB2Lab(float *R, float *G, float *B, float *L, float *a, float *b,
vfloat c200v = F2V(200.f); vfloat c200v = F2V(200.f);
#endif #endif
int i = 0; int i = 0;
#if defined( __SSE2__ ) && defined( __x86_64__ ) #ifdef __SSE2__
for (; i < width - 3; i += 4) { for (; i < width - 3; i += 4) {
const vfloat rv = LVFU(R[i]); const vfloat rv = LVFU(R[i]);
@ -2627,7 +2627,7 @@ void Color::gamutLchonly(float2 sincosval, float &Lprov1, float &Chprov1, const
* const double wip[3][3]: matrix for working profile * const double wip[3][3]: matrix for working profile
* bool multiThread : parallelize the loop * bool multiThread : parallelize the loop
*/ */
SSEFUNCTION void Color::LabGamutMunsell(float *labL, float *laba, float *labb, const int N, bool corMunsell, bool lumaMuns, bool isHLEnabled, bool gamut, const double wip[3][3]) void Color::LabGamutMunsell(float *labL, float *laba, float *labb, const int N, bool corMunsell, bool lumaMuns, bool isHLEnabled, bool gamut, const double wip[3][3])
{ {
#ifdef _DEBUG #ifdef _DEBUG
MyTime t1e, t2e; MyTime t1e, t2e;

View File

@ -244,7 +244,7 @@ template<typename T> void wavelet_level<T>::SynthesisFilterHaarHorizontal (const
* Applies a Haar filter * Applies a Haar filter
* *
*/ */
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel for num_threads(numThreads) if(numThreads>1) #pragma omp parallel for num_threads(numThreads) if(numThreads>1)
#endif #endif
@ -266,11 +266,11 @@ template<typename T> void wavelet_level<T>::SynthesisFilterHaarVertical (const T
* Applies a Haar filter * Applies a Haar filter
* *
*/ */
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel num_threads(numThreads) if(numThreads>1) #pragma omp parallel num_threads(numThreads) if(numThreads>1)
#endif #endif
{ {
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp for nowait #pragma omp for nowait
#endif #endif
@ -281,7 +281,7 @@ template<typename T> void wavelet_level<T>::SynthesisFilterHaarVertical (const T
} }
} }
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp for #pragma omp for
#endif #endif
@ -328,7 +328,7 @@ void wavelet_level<T>::AnalysisFilterSubsampHorizontal (T * RESTRICT srcbuffer,
} }
#ifdef __SSE2__ #ifdef __SSE2__
template<typename T> SSEFUNCTION void wavelet_level<T>::AnalysisFilterSubsampVertical (T * RESTRICT srcbuffer, T * RESTRICT dstLo, T * RESTRICT dstHi, float (* RESTRICT filterLo)[4], float (* RESTRICT filterHi)[4], template<typename T> void wavelet_level<T>::AnalysisFilterSubsampVertical (T * RESTRICT srcbuffer, T * RESTRICT dstLo, T * RESTRICT dstHi, float (* RESTRICT filterLo)[4], float (* RESTRICT filterHi)[4],
const int taps, const int offset, const int width, const int height, const int row) const int taps, const int offset, const int width, const int height, const int row)
{ {
@ -455,7 +455,7 @@ template<typename T> void wavelet_level<T>::SynthesisFilterSubsampHorizontal (T
// calculate coefficients // calculate coefficients
int shift = skip * (taps - offset - 1); //align filter with data int shift = skip * (taps - offset - 1); //align filter with data
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel for num_threads(numThreads) if(numThreads>1) #pragma omp parallel for num_threads(numThreads) if(numThreads>1)
#endif #endif
@ -506,7 +506,7 @@ template<typename T> void wavelet_level<T>::SynthesisFilterSubsampHorizontal (T
} }
#ifdef __SSE2__ #ifdef __SSE2__
template<typename T> SSEFUNCTION void wavelet_level<T>::SynthesisFilterSubsampVertical (T * RESTRICT srcLo, T * RESTRICT srcHi, T * RESTRICT dst, float (* RESTRICT filterLo)[4], float (* RESTRICT filterHi)[4], const int taps, const int offset, const int width, const int srcheight, const int dstheight, const float blend) template<typename T> void wavelet_level<T>::SynthesisFilterSubsampVertical (T * RESTRICT srcLo, T * RESTRICT srcHi, T * RESTRICT dst, float (* RESTRICT filterLo)[4], float (* RESTRICT filterHi)[4], const int taps, const int offset, const int width, const int srcheight, const int dstheight, const float blend)
{ {
/* Basic convolution code /* Basic convolution code
@ -521,7 +521,7 @@ template<typename T> SSEFUNCTION void wavelet_level<T>::SynthesisFilterSubsampVe
__m128 fourv = _mm_set1_ps(4.f); __m128 fourv = _mm_set1_ps(4.f);
__m128 srcFactorv = _mm_set1_ps(srcFactor); __m128 srcFactorv = _mm_set1_ps(srcFactor);
__m128 dstFactorv = _mm_set1_ps(blend); __m128 dstFactorv = _mm_set1_ps(blend);
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel for num_threads(numThreads) if(numThreads>1) #pragma omp parallel for num_threads(numThreads) if(numThreads>1)
#endif #endif
@ -594,7 +594,7 @@ template<typename T> void wavelet_level<T>::SynthesisFilterSubsampVertical (T *
// calculate coefficients // calculate coefficients
int shift = skip * (taps - offset - 1); //align filter with data int shift = skip * (taps - offset - 1); //align filter with data
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel for num_threads(numThreads) if(numThreads>1) #pragma omp parallel for num_threads(numThreads) if(numThreads>1)
#endif #endif
@ -630,7 +630,7 @@ template<typename T> void wavelet_level<T>::SynthesisFilterSubsampVertical (T *
#endif #endif
#ifdef __SSE2__ #ifdef __SSE2__
template<typename T> template<typename E> SSEFUNCTION void wavelet_level<T>::decompose_level(E *src, E *dst, float *filterV, float *filterH, int taps, int offset) template<typename T> template<typename E> void wavelet_level<T>::decompose_level(E *src, E *dst, float *filterV, float *filterH, int taps, int offset)
{ {
/* filter along rows and columns */ /* filter along rows and columns */
@ -644,7 +644,7 @@ template<typename T> template<typename E> SSEFUNCTION void wavelet_level<T>::dec
} }
} }
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel num_threads(numThreads) if(numThreads>1) #pragma omp parallel num_threads(numThreads) if(numThreads>1)
#endif #endif
{ {
@ -652,7 +652,7 @@ template<typename T> template<typename E> SSEFUNCTION void wavelet_level<T>::dec
T tmpHi[m_w] ALIGNED64; T tmpHi[m_w] ALIGNED64;
if(subsamp_out) { if(subsamp_out) {
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp for #pragma omp for
#endif #endif
@ -662,7 +662,7 @@ template<typename T> template<typename E> SSEFUNCTION void wavelet_level<T>::dec
AnalysisFilterSubsampHorizontal (tmpHi, wavcoeffs[2], wavcoeffs[3], filterH, filterH + taps, taps, offset, m_w, m_w2, row / 2); AnalysisFilterSubsampHorizontal (tmpHi, wavcoeffs[2], wavcoeffs[3], filterH, filterH + taps, taps, offset, m_w, m_w2, row / 2);
} }
} else { } else {
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp for #pragma omp for
#endif #endif
@ -678,7 +678,7 @@ template<typename T> template<typename E> SSEFUNCTION void wavelet_level<T>::dec
template<typename T> template<typename E> void wavelet_level<T>::decompose_level(E *src, E *dst, float *filterV, float *filterH, int taps, int offset) template<typename T> template<typename E> void wavelet_level<T>::decompose_level(E *src, E *dst, float *filterV, float *filterH, int taps, int offset)
{ {
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel num_threads(numThreads) if(numThreads>1) #pragma omp parallel num_threads(numThreads) if(numThreads>1)
#endif #endif
{ {
@ -687,7 +687,7 @@ template<typename T> template<typename E> void wavelet_level<T>::decompose_level
/* filter along rows and columns */ /* filter along rows and columns */
if(subsamp_out) if(subsamp_out)
{ {
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp for #pragma omp for
#endif #endif
@ -697,7 +697,7 @@ template<typename T> template<typename E> void wavelet_level<T>::decompose_level
AnalysisFilterSubsampHorizontal (tmpHi, wavcoeffs[2], wavcoeffs[3], filterH, filterH + taps, taps, offset, m_w, m_w2, row / 2); AnalysisFilterSubsampHorizontal (tmpHi, wavcoeffs[2], wavcoeffs[3], filterH, filterH + taps, taps, offset, m_w, m_w2, row / 2);
} }
} else { } else {
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp for #pragma omp for
#endif #endif
@ -714,7 +714,7 @@ template<typename T> template<typename E> void wavelet_level<T>::decompose_level
#ifdef __SSE2__ #ifdef __SSE2__
template<typename T> template<typename E> SSEFUNCTION void wavelet_level<T>::reconstruct_level(E* tmpLo, E* tmpHi, E * src, E *dst, float *filterV, float *filterH, int taps, int offset, const float blend) template<typename T> template<typename E> void wavelet_level<T>::reconstruct_level(E* tmpLo, E* tmpHi, E * src, E *dst, float *filterV, float *filterH, int taps, int offset, const float blend)
{ {
if(memoryAllocationFailed) { if(memoryAllocationFailed) {
return; return;

View File

@ -734,7 +734,7 @@ void CurveFactory::complexsgnCurve(bool & autili, bool & butili, bool & ccutili
} }
SSEFUNCTION void CurveFactory::complexCurve(double ecomp, double black, double hlcompr, double hlcomprthresh, void CurveFactory::complexCurve (double ecomp, double black, double hlcompr, double hlcomprthresh,
double shcompr, double br, double contr, double shcompr, double br, double contr,
const std::vector<double>& curvePoints, const std::vector<double>& curvePoints,
const std::vector<double>& curvePoints2, const std::vector<double>& curvePoints2,
@ -1016,7 +1016,7 @@ SSEFUNCTION void CurveFactory::complexCurve(double ecomp, double black, double h
SSEFUNCTION void CurveFactory::complexCurvelocal(double ecomp, double black, double hlcompr, double hlcomprthresh, void CurveFactory::complexCurvelocal(double ecomp, double black, double hlcompr, double hlcomprthresh,
double shcompr, double br, double contr, double shcompr, double br, double contr,
LUTu & histogram, LUTu & histogram,
LUTf & hlCurve, LUTf & shCurve, LUTf & outCurve, LUTf & hlCurve, LUTf & shCurve, LUTf & outCurve,

View File

@ -981,7 +981,7 @@ class WeightedStdToneCurve : public ToneCurve
{ {
private: private:
float Triangle(float refX, float refY, float X2) const; float Triangle(float refX, float refY, float X2) const;
#if defined( __SSE2__ ) && defined( __x86_64__ ) #ifdef __SSE2__
vfloat Triangle(vfloat refX, vfloat refY, vfloat X2) const; vfloat Triangle(vfloat refX, vfloat refY, vfloat X2) const;
#endif #endif
public: public:
@ -1059,7 +1059,7 @@ inline void StandardToneCurve::BatchApply(
// If we get to the end before getting to an aligned address, just return. // If we get to the end before getting to an aligned address, just return.
// (Or, for non-SSE mode, if we get to the end.) // (Or, for non-SSE mode, if we get to the end.)
return; return;
#if defined( __SSE2__ ) && defined( __x86_64__ ) #ifdef __SSE2__
} else if (reinterpret_cast<uintptr_t>(&r[i]) % 16 == 0) { } else if (reinterpret_cast<uintptr_t>(&r[i]) % 16 == 0) {
// Otherwise, we get to the first aligned address; go to the SSE part. // Otherwise, we get to the first aligned address; go to the SSE part.
break; break;
@ -1072,7 +1072,7 @@ inline void StandardToneCurve::BatchApply(
i++; i++;
} }
#if defined( __SSE2__ ) && defined( __x86_64__ ) #ifdef __SSE2__
for (; i + 3 < end; i += 4) { for (; i + 3 < end; i += 4) {
__m128 r_val = LVF(r[i]); __m128 r_val = LVF(r[i]);
@ -1166,7 +1166,7 @@ inline float WeightedStdToneCurve::Triangle(float a, float a1, float b) const
return a1; return a1;
} }
#if defined( __SSE2__ ) && defined( __x86_64__ ) #ifdef __SSE2__
inline vfloat WeightedStdToneCurve::Triangle(vfloat a, vfloat a1, vfloat b) const inline vfloat WeightedStdToneCurve::Triangle(vfloat a, vfloat a1, vfloat b) const
{ {
vfloat a2 = a1 - a; vfloat a2 = a1 - a;
@ -1220,7 +1220,7 @@ inline void WeightedStdToneCurve::BatchApply(const size_t start, const size_t en
// If we get to the end before getting to an aligned address, just return. // If we get to the end before getting to an aligned address, just return.
// (Or, for non-SSE mode, if we get to the end.) // (Or, for non-SSE mode, if we get to the end.)
return; return;
#if defined( __SSE2__ ) && defined( __x86_64__ ) #ifdef __SSE2__
} else if (reinterpret_cast<uintptr_t>(&r[i]) % 16 == 0) { } else if (reinterpret_cast<uintptr_t>(&r[i]) % 16 == 0) {
// Otherwise, we get to the first aligned address; go to the SSE part. // Otherwise, we get to the first aligned address; go to the SSE part.
break; break;
@ -1230,7 +1230,7 @@ inline void WeightedStdToneCurve::BatchApply(const size_t start, const size_t en
i++; i++;
} }
#if defined( __SSE2__ ) && defined( __x86_64__ ) #ifdef __SSE2__
const vfloat c65535v = F2V(65535.f); const vfloat c65535v = F2V(65535.f);
const vfloat zd5v = F2V(0.5f); const vfloat zd5v = F2V(0.5f);
const vfloat zd25v = F2V(0.25f); const vfloat zd25v = F2V(0.25f);

View File

@ -1314,7 +1314,7 @@ void RawImageSource::jdl_interpolate_omp() // from "Lassus"
// Adapted to RawTherapee by Jacques Desmis 3/2013 // Adapted to RawTherapee by Jacques Desmis 3/2013
// Improved speed and reduced memory consumption by Ingo Weyrich 2/2015 // Improved speed and reduced memory consumption by Ingo Weyrich 2/2015
//TODO Tiles to reduce memory consumption //TODO Tiles to reduce memory consumption
SSEFUNCTION void RawImageSource::lmmse_interpolate_omp(int winw, int winh, array2D<float> &rawData, array2D<float> &red, array2D<float> &green, array2D<float> &blue, int iterations) void RawImageSource::lmmse_interpolate_omp(int winw, int winh, array2D<float> &rawData, array2D<float> &red, array2D<float> &green, array2D<float> &blue, int iterations)
{ {
const int width = winw, height = winh; const int width = winw, height = winh;
const int ba = 10; const int ba = 10;
@ -1946,7 +1946,7 @@ SSEFUNCTION void RawImageSource::lmmse_interpolate_omp(int winw, int winh, array
// SSE version by Ingo Weyrich 5/2013 // SSE version by Ingo Weyrich 5/2013
#ifdef __SSE2__ #ifdef __SSE2__
#define CLIPV(a) LIMV(a,zerov,c65535v) #define CLIPV(a) LIMV(a,zerov,c65535v)
SSEFUNCTION void RawImageSource::igv_interpolate(int winw, int winh) void RawImageSource::igv_interpolate(int winw, int winh)
{ {
static const float eps = 1e-5f, epssq = 1e-5f; //mod epssq -10f =>-5f Jacques 3/2013 to prevent artifact (divide by zero) static const float eps = 1e-5f, epssq = 1e-5f; //mod epssq -10f =>-5f Jacques 3/2013 to prevent artifact (divide by zero)
@ -2873,7 +2873,7 @@ void RawImageSource::nodemosaic(bool bw)
#ifdef __SSE2__ #ifdef __SSE2__
#define CLIPV(a) LIMV(a,ZEROV,c65535v) #define CLIPV(a) LIMV(a,ZEROV,c65535v)
#endif #endif
SSEFUNCTION void RawImageSource::refinement(int PassCount) void RawImageSource::refinement(int PassCount)
{ {
MyTime t1e, t2e; MyTime t1e, t2e;
t1e.set(); t1e.set();
@ -3870,7 +3870,7 @@ void RawImageSource::cielab (const float (*rgb)[3], float* l, float* a, float *b
return; return;
} }
#if defined( __SSE2__ ) && defined( __x86_64__ ) #ifdef __SSE2__
vfloat zd5v = F2V(0.5f); vfloat zd5v = F2V(0.5f);
vfloat c116v = F2V(116.f); vfloat c116v = F2V(116.f);
vfloat c16v = F2V(16.f); vfloat c16v = F2V(16.f);
@ -3887,7 +3887,7 @@ void RawImageSource::cielab (const float (*rgb)[3], float* l, float* a, float *b
for(int i = 0; i < height; i++) { for(int i = 0; i < height; i++) {
int j = 0; int j = 0;
#if defined( __SSE2__ ) && defined( __x86_64__ ) // vectorized LUT access is restricted to __x86_64__ => we have to use the same restriction #ifdef __SSE2__
for(; j < labWidth - 3; j += 4) { for(; j < labWidth - 3; j += 4) {
vfloat redv, greenv, bluev; vfloat redv, greenv, bluev;

View File

@ -42,7 +42,7 @@ extern const Settings* settings;
//sequence of scales //sequence of scales
SSEFUNCTION void ImProcFunctions :: dirpyr_equalizer(float ** src, float ** dst, int srcwidth, int srcheight, float ** l_a, float ** l_b, const double * mult, const double dirpyrThreshold, const double skinprot, float b_l, float t_l, float t_r, int scaleprev) void ImProcFunctions :: dirpyr_equalizer(float ** src, float ** dst, int srcwidth, int srcheight, float ** l_a, float ** l_b, const double * mult, const double dirpyrThreshold, const double skinprot, float b_l, float t_l, float t_r, int scaleprev)
{ {
int lastlevel = maxlevel; int lastlevel = maxlevel;
@ -247,7 +247,7 @@ SSEFUNCTION void ImProcFunctions :: dirpyr_equalizer(float ** src, float ** dst,
} }
SSEFUNCTION void ImProcFunctions :: cbdl_local_temp(float ** src, float ** dst, float ** loctemp, int srcwidth, int srcheight, const float * mult, float kchro, const double dirpyrThreshold, const double skinprot, const bool gamutlab, float b_l, float t_l, float t_r, float b_r, int choice, int scaleprev) void ImProcFunctions::cbdl_local_temp(float ** src, float ** dst, float ** loctemp, int srcwidth, int srcheight, const float * mult, float kchro, const double dirpyrThreshold, const double skinprot, const bool gamutlab, float b_l, float t_l, float t_r, float b_r, int choice, int scaleprev)
{ {
int lastlevel = maxlevelloc; int lastlevel = maxlevelloc;
@ -506,7 +506,7 @@ void ImProcFunctions :: dirpyr_equalizercam(CieImage *ncie, float ** src, float
} }
} }
SSEFUNCTION void ImProcFunctions::dirpyr_channel(float ** data_fine, float ** data_coarse, int width, int height, int level, int scale) void ImProcFunctions::dirpyr_channel(float ** data_fine, float ** data_coarse, int width, int height, int level, int scale)
{ {
// scale is spacing of directional averaging weights // scale is spacing of directional averaging weights
// calculate weights, compute directionally weighted average // calculate weights, compute directionally weighted average

View File

@ -52,7 +52,7 @@ LUTf RawImageSource::initInvGrad()
#endif #endif
//LUTf RawImageSource::invGrad = RawImageSource::initInvGrad(); //LUTf RawImageSource::invGrad = RawImageSource::initInvGrad();
SSEFUNCTION void RawImageSource::fast_demosaic() void RawImageSource::fast_demosaic()
{ {
double progress = 0.0; double progress = 0.0;

View File

@ -229,7 +229,7 @@ template<class T> void gaussHorizontal3 (T** src, T** dst, int W, int H, const f
} }
#ifdef __SSE2__ #ifdef __SSE2__
template<class T> SSEFUNCTION void gaussVertical3 (T** src, T** dst, int W, int H, const float c0, const float c1) template<class T> void gaussVertical3 (T** src, T** dst, int W, int H, const float c0, const float c1)
{ {
vfloat Tv = F2V(0.f), Tm1v, Tp1v; vfloat Tv = F2V(0.f), Tm1v, Tp1v;
vfloat Tv1 = F2V(0.f), Tm1v1, Tp1v1; vfloat Tv1 = F2V(0.f), Tm1v1, Tp1v1;
@ -314,7 +314,7 @@ template<class T> void gaussVertical3 (T** src, T** dst, int W, int H, const flo
#ifdef __SSE2__ #ifdef __SSE2__
// fast gaussian approximation if the support window is large // fast gaussian approximation if the support window is large
template<class T> SSEFUNCTION void gaussHorizontalSse (T** src, T** dst, const int W, const int H, const float sigma) template<class T> void gaussHorizontalSse (T** src, T** dst, const int W, const int H, const float sigma)
{ {
double b1, b2, b3, B, M[3][3]; double b1, b2, b3, B, M[3][3];
calculateYvVFactors<double>(sigma, b1, b2, b3, B, M); calculateYvVFactors<double>(sigma, b1, b2, b3, B, M);
@ -474,7 +474,7 @@ template<class T> void gaussHorizontal (T** src, T** dst, const int W, const int
} }
#ifdef __SSE2__ #ifdef __SSE2__
template<class T> SSEFUNCTION void gaussVerticalSse (T** src, T** dst, const int W, const int H, const float sigma) template<class T> void gaussVerticalSse (T** src, T** dst, const int W, const int H, const float sigma)
{ {
double b1, b2, b3, B, M[3][3]; double b1, b2, b3, B, M[3][3];
calculateYvVFactors<double>(sigma, b1, b2, b3, B, M); calculateYvVFactors<double>(sigma, b1, b2, b3, B, M);
@ -617,7 +617,7 @@ template<class T> SSEFUNCTION void gaussVerticalSse (T** src, T** dst, const int
#endif #endif
#ifdef __SSE2__ #ifdef __SSE2__
template<class T> SSEFUNCTION void gaussVerticalSsemult (T** RESTRICT src, T** RESTRICT dst, const int W, const int H, const float sigma) template<class T> void gaussVerticalSsemult (T** RESTRICT src, T** RESTRICT dst, const int W, const int H, const float sigma)
{ {
double b1, b2, b3, B, M[3][3]; double b1, b2, b3, B, M[3][3];
calculateYvVFactors<double>(sigma, b1, b2, b3, B, M); calculateYvVFactors<double>(sigma, b1, b2, b3, B, M);
@ -758,7 +758,7 @@ template<class T> SSEFUNCTION void gaussVerticalSsemult (T** RESTRICT src, T** R
} }
} }
template<class T> SSEFUNCTION void gaussVerticalSsediv (T** RESTRICT src, T** RESTRICT dst, T** divBuffer, const int W, const int H, const float sigma) template<class T> void gaussVerticalSsediv (T** RESTRICT src, T** RESTRICT dst, T** divBuffer, const int W, const int H, const float sigma)
{ {
double b1, b2, b3, B, M[3][3]; double b1, b2, b3, B, M[3][3];
calculateYvVFactors<double>(sigma, b1, b2, b3, B, M); calculateYvVFactors<double>(sigma, b1, b2, b3, B, M);

View File

@ -29,29 +29,13 @@ typedef __m128 vfloat;
typedef __m128i vint2; typedef __m128i vint2;
// //
#ifdef __GNUC__
#if (!defined(WIN32) || defined( __x86_64__ ))
#define LVF(x) _mm_load_ps((float*)&x) #define LVF(x) _mm_load_ps((float*)&x)
#define LVFU(x) _mm_loadu_ps(&x) #define LVFU(x) _mm_loadu_ps(&x)
#define STVF(x,y) _mm_store_ps(&x,y) #define STVF(x,y) _mm_store_ps(&x,y)
#define STVFU(x,y) _mm_storeu_ps(&x,y) #define STVFU(x,y) _mm_storeu_ps(&x,y)
#define LVI(x) _mm_load_si128((__m128i*)&x) #define LVI(x) _mm_load_si128((__m128i*)&x)
#else // there is a bug in gcc 4.7.x when using openmp and aligned memory and -O3, also need to map the aligned functions to unaligned functions for WIN32 builds
#define LVF(x) _mm_loadu_ps((float*)&x)
#define LVFU(x) _mm_loadu_ps(&x)
#define STVF(x,y) _mm_storeu_ps(&x,y)
#define STVFU(x,y) _mm_storeu_ps(&x,y)
#define LVI(x) _mm_loadu_si128((__m128i*)&x)
#endif
#else
#define LVF(x) _mm_load_ps((float*)&x)
#define LVFU(x) _mm_loadu_ps(&x)
#define STVF(x,y) _mm_store_ps(&x,y)
#define STVFU(x,y) _mm_storeu_ps(&x,y)
#define LVI(x) _mm_load_si128((__m128i*)&x)
#endif
#if defined(__x86_64__) && defined(__AVX__) #ifdef __AVX__
#define PERMUTEPS(a,mask) _mm_permute_ps(a,mask) #define PERMUTEPS(a,mask) _mm_permute_ps(a,mask)
#else #else
#define PERMUTEPS(a,mask) _mm_shuffle_ps(a,a,mask) #define PERMUTEPS(a,mask) _mm_shuffle_ps(a,a,mask)
@ -67,7 +51,7 @@ static INLINE vfloat LC2VFU(float &a)
// Store a vector of 4 floats in a[0],a[2],a[4] and a[6] // Store a vector of 4 floats in a[0],a[2],a[4] and a[6]
#if defined(__x86_64__) && defined(__SSE4_1__) #ifdef __SSE4_1__
// SSE4.1 => use _mm_blend_ps instead of _mm_set_epi32 and vself // SSE4.1 => use _mm_blend_ps instead of _mm_set_epi32 and vself
#define STC2VFU(a,v) {\ #define STC2VFU(a,v) {\
__m128 TST1V = _mm_loadu_ps(&a);\ __m128 TST1V = _mm_loadu_ps(&a);\

View File

@ -35,7 +35,7 @@ extern const Settings* settings;
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
SSEFUNCTION void RawImageSource::boxblur2(float** src, float** dst, float** temp, int H, int W, int box ) void RawImageSource::boxblur2(float** src, float** dst, float** temp, int H, int W, int box )
{ {
//box blur image channel; box size = 2*box+1 //box blur image channel; box size = 2*box+1
//horizontal blur //horizontal blur

View File

@ -55,7 +55,7 @@ using namespace rtengine;
void shadowToneCurve(const LUTf &shtonecurve, float *rtemp, float *gtemp, float *btemp, int istart, int tH, int jstart, int tW, int tileSize) void shadowToneCurve(const LUTf &shtonecurve, float *rtemp, float *gtemp, float *btemp, int istart, int tH, int jstart, int tW, int tileSize)
{ {
#if defined( __SSE2__ ) && defined( __x86_64__ ) #ifdef __SSE2__
vfloat cr = F2V(0.299f); vfloat cr = F2V(0.299f);
vfloat cg = F2V(0.587f); vfloat cg = F2V(0.587f);
vfloat cb = F2V(0.114f); vfloat cb = F2V(0.114f);
@ -63,7 +63,7 @@ void shadowToneCurve(const LUTf &shtonecurve, float *rtemp, float *gtemp, float
for (int i = istart, ti = 0; i < tH; i++, ti++) { for (int i = istart, ti = 0; i < tH; i++, ti++) {
int j = jstart, tj = 0; int j = jstart, tj = 0;
#if defined( __SSE2__ ) && defined( __x86_64__ ) #ifdef __SSE2__
for (; j < tW - 3; j += 4, tj += 4) { for (; j < tW - 3; j += 4, tj += 4) {
@ -100,14 +100,14 @@ void shadowToneCurve(const LUTf &shtonecurve, float *rtemp, float *gtemp, float
void highlightToneCurve(const LUTf &hltonecurve, float *rtemp, float *gtemp, float *btemp, int istart, int tH, int jstart, int tW, int tileSize, float exp_scale, float comp, float hlrange) void highlightToneCurve(const LUTf &hltonecurve, float *rtemp, float *gtemp, float *btemp, int istart, int tH, int jstart, int tW, int tileSize, float exp_scale, float comp, float hlrange)
{ {
#if defined( __SSE2__ ) && defined( __x86_64__ ) #ifdef __SSE2__
vfloat threev = F2V(3.f); vfloat threev = F2V(3.f);
vfloat maxvalfv = F2V(MAXVALF); vfloat maxvalfv = F2V(MAXVALF);
#endif #endif
for (int i = istart, ti = 0; i < tH; i++, ti++) { for (int i = istart, ti = 0; i < tH; i++, ti++) {
int j = jstart, tj = 0; int j = jstart, tj = 0;
#if defined( __SSE2__ ) && defined( __x86_64__ ) #ifdef __SSE2__
for (; j < tW - 3; j += 4, tj += 4) { for (; j < tW - 3; j += 4, tj += 4) {
@ -169,7 +169,7 @@ void proPhotoBlue(float *rtemp, float *gtemp, float *btemp, int istart, int tH,
// this is a hack to avoid the blue=>black bug (Issue 2141) // this is a hack to avoid the blue=>black bug (Issue 2141)
for (int i = istart, ti = 0; i < tH; i++, ti++) { for (int i = istart, ti = 0; i < tH; i++, ti++) {
int j = jstart, tj = 0; int j = jstart, tj = 0;
#if defined( __SSE2__ ) && defined( __x86_64__ ) #ifdef __SSE2__
for (; j < tW - 3; j += 4, tj += 4) { for (; j < tW - 3; j += 4, tj += 4) {
vfloat rv = LVF(rtemp[ti * tileSize + tj]); vfloat rv = LVF(rtemp[ti * tileSize + tj]);
@ -3791,7 +3791,7 @@ void ImProcFunctions::rgbProc(Imagefloat* working, LabImage* lab, PipetteBuffer
} else { } else {
for (int i = istart, ti = 0; i < tH; i++, ti++) { for (int i = istart, ti = 0; i < tH; i++, ti++) {
int j = jstart, tj = 0; int j = jstart, tj = 0;
#if defined( __SSE2__ ) && defined( __x86_64__ ) #ifdef __SSE2__
for (; j < tW - 3; j += 4, tj += 4) { for (; j < tW - 3; j += 4, tj += 4) {
//brightness/contrast //brightness/contrast
@ -5423,7 +5423,7 @@ void ImProcFunctions::luminanceCurve(LabImage* lold, LabImage* lnew, LUTf & curv
SSEFUNCTION void ImProcFunctions::chromiLuminanceCurve(PipetteBuffer *pipetteBuffer, int pW, LabImage* lold, LabImage* lnew, LUTf & acurve, LUTf & bcurve, LUTf & satcurve, LUTf & lhskcurve, LUTf & clcurve, LUTf & curve, bool utili, bool autili, bool butili, bool ccutili, bool cclutili, bool clcutili, LUTu &histCCurve, LUTu &histLCurve) void ImProcFunctions::chromiLuminanceCurve (PipetteBuffer *pipetteBuffer, int pW, LabImage* lold, LabImage* lnew, LUTf & acurve, LUTf & bcurve, LUTf & satcurve, LUTf & lhskcurve, LUTf & clcurve, LUTf & curve, bool utili, bool autili, bool butili, bool ccutili, bool cclutili, bool clcutili, LUTu &histCCurve, LUTu &histLCurve)
{ {
if (!params->labCurve.enabled) { if (!params->labCurve.enabled) {
return; return;
@ -7078,7 +7078,7 @@ void ImProcFunctions::rgb2lab(const Imagefloat &src, LabImage &dst, const Glib::
} }
} }
SSEFUNCTION void ImProcFunctions::lab2rgb(const LabImage &src, Imagefloat &dst, const Glib::ustring &workingSpace) void ImProcFunctions::lab2rgb (const LabImage &src, Imagefloat &dst, const Glib::ustring &workingSpace)
{ {
TMatrix wiprof = ICCStore::getInstance()->workingSpaceInverseMatrix(workingSpace); TMatrix wiprof = ICCStore::getInstance()->workingSpaceInverseMatrix(workingSpace);
const float wip[3][3] = { const float wip[3][3] = {

View File

@ -31,7 +31,7 @@ using namespace std;
namespace rtengine namespace rtengine
{ {
SSEFUNCTION void ImProcFunctions::impulse_nr (LabImage* lab, double thresh) void ImProcFunctions::impulse_nr (LabImage* lab, double thresh)
{ {
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
// impulse noise removal // impulse noise removal
@ -260,7 +260,7 @@ SSEFUNCTION void ImProcFunctions::impulse_nr (LabImage* lab, double thresh)
} }
SSEFUNCTION void ImProcFunctions::impulse_nrcam (CieImage* ncie, double thresh, float **buffers[3]) void ImProcFunctions::impulse_nrcam (CieImage* ncie, double thresh, float **buffers[3])
{ {
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
// impulse noise removal // impulse noise removal

View File

@ -62,7 +62,7 @@ void ImProcFunctions::localContrast(LabImage *lab)
bufval *= (bufval > 0.f) ? light : dark; bufval *= (bufval > 0.f) ? light : dark;
} }
lab->L[y][x] += bufval; lab->L[y][x] = std::max(0.0001f, lab->L[y][x] + bufval);
} }
} }
} }

View File

@ -178,7 +178,7 @@ void ImProcFunctions::Lanczos (const Imagefloat* src, Imagefloat* dst, float sca
} }
SSEFUNCTION void ImProcFunctions::Lanczos (const LabImage* src, LabImage* dst, float scale) void ImProcFunctions::Lanczos (const LabImage* src, LabImage* dst, float scale)
{ {
const float delta = 1.0f / scale; const float delta = 1.0f / scale;
const float a = 3.0f; const float a = 3.0f;

View File

@ -34,7 +34,7 @@ namespace rtengine
#define ABS(a) ((a)<0?-(a):(a)) #define ABS(a) ((a)<0?-(a):(a))
extern const Settings* settings; extern const Settings* settings;
SSEFUNCTION void ImProcFunctions::dcdamping (float** aI, float** aO, float damping, int W, int H) void ImProcFunctions::dcdamping (float** aI, float** aO, float damping, int W, int H)
{ {
const float dampingFac = -2.0 / (damping * damping); const float dampingFac = -2.0 / (damping * damping);

View File

@ -140,7 +140,7 @@ struct cont_params {
int wavNestedLevels = 1; int wavNestedLevels = 1;
SSEFUNCTION void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const procparams::WaveletParams & waparams, const WavCurve & wavCLVCcurve, const WavOpacityCurveRG & waOpacityCurveRG, const WavOpacityCurveBY & waOpacityCurveBY, const WavOpacityCurveW & waOpacityCurveW, const WavOpacityCurveWL & waOpacityCurveWL, LUTf &wavclCurve, int skip) void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const procparams::WaveletParams & waparams, const WavCurve & wavCLVCcurve, const WavOpacityCurveRG & waOpacityCurveRG, const WavOpacityCurveBY & waOpacityCurveBY, const WavOpacityCurveW & waOpacityCurveW, const WavOpacityCurveWL & waOpacityCurveWL, LUTf &wavclCurve, int skip)
{ {
#ifdef _DEBUG #ifdef _DEBUG
@ -644,7 +644,7 @@ SSEFUNCTION void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int
numthreads = MIN (numthreads, maxnumberofthreadsforwavelet); numthreads = MIN (numthreads, maxnumberofthreadsforwavelet);
} }
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
wavNestedLevels = omp_get_max_threads() / numthreads; wavNestedLevels = omp_get_max_threads() / numthreads;
bool oldNested = omp_get_nested(); bool oldNested = omp_get_nested();
@ -719,7 +719,7 @@ SSEFUNCTION void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int
Lold = lab->L; Lold = lab->L;
} }
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel for num_threads(wavNestedLevels) if(wavNestedLevels>1) #pragma omp parallel for num_threads(wavNestedLevels) if(wavNestedLevels>1)
#endif #endif
@ -783,7 +783,7 @@ SSEFUNCTION void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int
} }
} }
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel for num_threads(wavNestedLevels) if(wavNestedLevels>1) #pragma omp parallel for num_threads(wavNestedLevels) if(wavNestedLevels>1)
#endif #endif
@ -867,7 +867,7 @@ SSEFUNCTION void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int
if (!Ldecomp->memoryAllocationFailed) { if (!Ldecomp->memoryAllocationFailed) {
float madL[8][3]; float madL[8][3];
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel for schedule(dynamic) collapse(2) num_threads(wavNestedLevels) if(wavNestedLevels>1) #pragma omp parallel for schedule(dynamic) collapse(2) num_threads(wavNestedLevels) if(wavNestedLevels>1)
#endif #endif
@ -1075,7 +1075,7 @@ SSEFUNCTION void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int
bool highlight = params->toneCurve.hrenabled; bool highlight = params->toneCurve.hrenabled;
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16) num_threads(wavNestedLevels) if(wavNestedLevels>1) #pragma omp parallel for schedule(dynamic,16) num_threads(wavNestedLevels) if(wavNestedLevels>1)
#endif #endif
@ -1245,7 +1245,7 @@ SSEFUNCTION void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int
delete [] varchro; delete [] varchro;
} }
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
omp_set_nested (oldNested); omp_set_nested (oldNested);
#endif #endif
@ -1275,12 +1275,12 @@ void ImProcFunctions::Aver ( float * RESTRICT DataList, int datalen, float &ave
float thres = 5.f;//different fom zero to take into account only data large enough float thres = 5.f;//different fom zero to take into account only data large enough
max = 0.f; max = 0.f;
min = 0.f; min = 0.f;
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel num_threads(wavNestedLevels) if(wavNestedLevels>1) #pragma omp parallel num_threads(wavNestedLevels) if(wavNestedLevels>1)
#endif #endif
{ {
float lmax = 0.f, lmin = 0.f; float lmax = 0.f, lmin = 0.f;
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp for reduction(+:averaP,averaN,countP,countN) nowait #pragma omp for reduction(+:averaP,averaN,countP,countN) nowait
#endif #endif
@ -1304,7 +1304,7 @@ void ImProcFunctions::Aver ( float * RESTRICT DataList, int datalen, float &ave
} }
} }
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp critical #pragma omp critical
#endif #endif
{ {
@ -1334,7 +1334,7 @@ void ImProcFunctions::Sigma ( float * RESTRICT DataList, int datalen, float ave
float variP = 0.f, variN = 0.f; float variP = 0.f, variN = 0.f;
float thres = 5.f;//different fom zero to take into account only data large enough float thres = 5.f;//different fom zero to take into account only data large enough
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel for reduction(+:variP,variN,countP,countN) num_threads(wavNestedLevels) if(wavNestedLevels>1) #pragma omp parallel for reduction(+:variP,variN,countP,countN) num_threads(wavNestedLevels) if(wavNestedLevels>1)
#endif #endif
@ -1433,7 +1433,7 @@ float *ImProcFunctions::ContrastDR(float *Source, int W_L, int H_L, float *Contr
} }
memcpy (Contrast, Source, n * sizeof (float)); memcpy (Contrast, Source, n * sizeof (float));
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel for #pragma omp parallel for
#endif #endif
@ -1444,19 +1444,19 @@ float *ImProcFunctions::ContrastDR(float *Source, int W_L, int H_L, float *Contr
return Contrast; return Contrast;
} }
SSEFUNCTION float *ImProcFunctions::CompressDR(float *Source, int W_L, int H_L, float Compression, float DetailBoost, float *Compressed) float *ImProcFunctions::CompressDR(float *Source, int W_L, int H_L, float Compression, float DetailBoost, float *Compressed)
{ {
const float eps = 0.000001f; const float eps = 0.000001f;
int n = W_L * H_L; int n = W_L * H_L;
#ifdef __SSE2__ #ifdef __SSE2__
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel #pragma omp parallel
#endif #endif
{ {
__m128 epsv = _mm_set1_ps ( eps ); __m128 epsv = _mm_set1_ps ( eps );
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp for #pragma omp for
#endif #endif
@ -1470,7 +1470,7 @@ SSEFUNCTION float *ImProcFunctions::CompressDR(float *Source, int W_L, int H_L,
} }
#else #else
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel for #pragma omp parallel for
#endif #endif
@ -1507,7 +1507,7 @@ SSEFUNCTION float *ImProcFunctions::CompressDR(float *Source, int W_L, int H_L,
} }
#ifdef __SSE2__ #ifdef __SSE2__
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel #pragma omp parallel
#endif #endif
{ {
@ -1515,7 +1515,7 @@ SSEFUNCTION float *ImProcFunctions::CompressDR(float *Source, int W_L, int H_L,
__m128 epsv = _mm_set1_ps ( eps ); __m128 epsv = _mm_set1_ps ( eps );
__m128 DetailBoostv = _mm_set1_ps ( DetailBoost ); __m128 DetailBoostv = _mm_set1_ps ( DetailBoost );
__m128 tempv = _mm_set1_ps ( temp ); __m128 tempv = _mm_set1_ps ( temp );
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp for #pragma omp for
#endif #endif
@ -1536,7 +1536,7 @@ SSEFUNCTION float *ImProcFunctions::CompressDR(float *Source, int W_L, int H_L,
} }
#else #else
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel for #pragma omp parallel for
#endif #endif
@ -1571,7 +1571,7 @@ void ImProcFunctions::ContrastResid(float * WavCoeffs_L0, struct cont_params &cp
min0 = 0.0f; min0 = 0.0f;
} }
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel for #pragma omp parallel for
#endif #endif
@ -1591,7 +1591,7 @@ void ImProcFunctions::ContrastResid(float * WavCoeffs_L0, struct cont_params &cp
CompressDR(WavCoeffs_L0, W_L, H_L, Compression, DetailBoost, WavCoeffs_L0); CompressDR(WavCoeffs_L0, W_L, H_L, Compression, DetailBoost, WavCoeffs_L0);
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel for // removed schedule(dynamic,10) #pragma omp parallel for // removed schedule(dynamic,10)
#endif #endif
@ -1623,7 +1623,7 @@ void ImProcFunctions::EPDToneMapResid (float * WavCoeffs_L0, unsigned int Itera
} }
// max0=32768.f; // max0=32768.f;
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel for #pragma omp parallel for
#endif #endif
@ -1648,7 +1648,7 @@ void ImProcFunctions::EPDToneMapResid (float * WavCoeffs_L0, unsigned int Itera
epd2.CompressDynamicRange(WavCoeffs_L0, (float)sca / skip, edgest, Compression, DetailBoost, Iterates, rew); epd2.CompressDynamicRange(WavCoeffs_L0, (float)sca / skip, edgest, Compression, DetailBoost, Iterates, rew);
//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.
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel for // removed schedule(dynamic,10) #pragma omp parallel for // removed schedule(dynamic,10)
#endif #endif
@ -1691,7 +1691,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float *
float min0 = FLT_MAX; float min0 = FLT_MAX;
if (contrast != 0.f || (cp.tonemap && cp.resena)) { // contrast = 0.f means that all will be multiplied by 1.f, so we can skip this step if (contrast != 0.f || (cp.tonemap && cp.resena)) { // contrast = 0.f means that all will be multiplied by 1.f, so we can skip this step
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel for reduction(+:avedbl) num_threads(wavNestedLevels) if(wavNestedLevels>1) #pragma omp parallel for reduction(+:avedbl) num_threads(wavNestedLevels) if(wavNestedLevels>1)
#endif #endif
@ -1699,14 +1699,14 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float *
avedbl += WavCoeffs_L0[i]; avedbl += WavCoeffs_L0[i];
} }
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel num_threads(wavNestedLevels) if(wavNestedLevels>1) #pragma omp parallel num_threads(wavNestedLevels) if(wavNestedLevels>1)
#endif #endif
{ {
float lminL = FLT_MAX; float lminL = FLT_MAX;
float lmaxL = 0.f; float lmaxL = 0.f;
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp for #pragma omp for
#endif #endif
@ -1721,7 +1721,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float *
} }
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp critical #pragma omp critical
#endif #endif
{ {
@ -1781,13 +1781,13 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float *
koeLi[j][i] = 0.f; koeLi[j][i] = 0.f;
} }
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel num_threads(wavNestedLevels) if(wavNestedLevels>1) #pragma omp parallel num_threads(wavNestedLevels) if(wavNestedLevels>1)
#endif #endif
{ {
if (contrast != 0.f && cp.resena) { // contrast = 0.f means that all will be multiplied by 1.f, so we can skip this step if (contrast != 0.f && cp.resena) { // contrast = 0.f means that all will be multiplied by 1.f, so we can skip this step
{ {
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp for #pragma omp for
#endif #endif
@ -1816,18 +1816,18 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float *
if (cp.tonemap && cp.contmet == 1 && cp.resena) { if (cp.tonemap && cp.contmet == 1 && cp.resena) {
float maxp = max0 * 256.f; float maxp = max0 * 256.f;
float minp = min0 * 256.f; float minp = min0 * 256.f;
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp single #pragma omp single
#endif #endif
ContrastResid(WavCoeffs_L0, cp, W_L, H_L, maxp, minp); ContrastResid(WavCoeffs_L0, cp, W_L, H_L, maxp, minp);
} }
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp barrier #pragma omp barrier
#endif #endif
if ((cp.conres != 0.f || cp.conresH != 0.f) && cp.resena) { // cp.conres = 0.f and cp.comresH = 0.f means that all will be multiplied by 1.f, so we can skip this step if ((cp.conres != 0.f || cp.conresH != 0.f) && cp.resena) { // cp.conres = 0.f and cp.comresH = 0.f means that all will be multiplied by 1.f, so we can skip this step
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp for nowait #pragma omp for nowait
#endif #endif
@ -1889,7 +1889,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float *
tmC[i] = &tmCBuffer[i * W_L]; tmC[i] = &tmCBuffer[i * W_L];
} }
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp for schedule(dynamic) collapse(2) #pragma omp for schedule(dynamic) collapse(2)
#endif #endif
@ -1909,7 +1909,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float *
float aamp = 1.f + cp.eddetthrHi / 100.f; float aamp = 1.f + cp.eddetthrHi / 100.f;
for (int lvl = 0; lvl < 4; lvl++) { for (int lvl = 0; lvl < 4; lvl++) {
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp for schedule(dynamic,16) #pragma omp for schedule(dynamic,16)
#endif #endif
@ -2012,7 +2012,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float *
// end // end
} }
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp for schedule(dynamic) collapse(2) #pragma omp for schedule(dynamic) collapse(2)
#endif #endif
@ -2047,7 +2047,7 @@ void ImProcFunctions::WaveletAandBAllAB(wavelet_decomposition &WaveletCoeffs_a,
float * WavCoeffs_a0 = WaveletCoeffs_a.coeff0; float * WavCoeffs_a0 = WaveletCoeffs_a.coeff0;
float * WavCoeffs_b0 = WaveletCoeffs_b.coeff0; float * WavCoeffs_b0 = WaveletCoeffs_b.coeff0;
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel num_threads(wavNestedLevels) if(wavNestedLevels>1) #pragma omp parallel num_threads(wavNestedLevels) if(wavNestedLevels>1)
#endif #endif
{ {
@ -2055,7 +2055,7 @@ void ImProcFunctions::WaveletAandBAllAB(wavelet_decomposition &WaveletCoeffs_a,
float huebuffer[W_L] ALIGNED64; float huebuffer[W_L] ALIGNED64;
float chrbuffer[W_L] ALIGNED64; float chrbuffer[W_L] ALIGNED64;
#endif // __SSE2__ #endif // __SSE2__
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp for schedule(dynamic,16) #pragma omp for schedule(dynamic,16)
#endif #endif
@ -2115,13 +2115,13 @@ void ImProcFunctions::WaveletcontAllAB (LabImage * labco, float ** varhue, float
float * WavCoeffs_ab0 = WaveletCoeffs_ab.coeff0; float * WavCoeffs_ab0 = WaveletCoeffs_ab.coeff0;
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel num_threads(wavNestedLevels) if(wavNestedLevels>1) #pragma omp parallel num_threads(wavNestedLevels) if(wavNestedLevels>1)
#endif #endif
{ {
if (cp.chrores != 0.f && cp.resena) { // cp.chrores == 0.f means all will be multiplied by 1.f, so we can skip the processing of residual if (cp.chrores != 0.f && cp.resena) { // cp.chrores == 0.f means all will be multiplied by 1.f, so we can skip the processing of residual
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp for nowait #pragma omp for nowait
#endif #endif
@ -2174,7 +2174,7 @@ void ImProcFunctions::WaveletcontAllAB (LabImage * labco, float ** varhue, float
if (cp.cbena && cp.resena) { //if user select Toning and color balance if (cp.cbena && cp.resena) { //if user select Toning and color balance
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp for nowait #pragma omp for nowait
#endif #endif
@ -2229,7 +2229,7 @@ void ImProcFunctions::WaveletcontAllAB (LabImage * labco, float ** varhue, float
} }
} }
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp for schedule(dynamic) collapse(2) #pragma omp for schedule(dynamic) collapse(2)
#endif #endif
@ -2424,7 +2424,7 @@ void ImProcFunctions::finalContAllL (float ** WavCoeffs_L, float * WavCoeffs_L0,
float bsig = 0.5f - asig * mean[level]; float bsig = 0.5f - asig * mean[level];
float amean = 0.5f / mean[level]; float amean = 0.5f / mean[level];
#ifdef _RT_NESTED_OPENMP #ifdef _OPENMP
#pragma omp parallel for schedule(dynamic, W_L * 16) num_threads(wavNestedLevels) if(wavNestedLevels>1) #pragma omp parallel for schedule(dynamic, W_L * 16) num_threads(wavNestedLevels) if(wavNestedLevels>1)
#endif #endif

View File

@ -1131,7 +1131,7 @@ void rtengine::LCPMapper::correctCA(double& x, double& y, int cx, int cy, int ch
y -= cy; y -= cy;
} }
SSEFUNCTION void rtengine::LCPMapper::processVignetteLine(int width, int y, float* line) const void rtengine::LCPMapper::processVignetteLine(int width, int y, float* line) const
{ {
// No need for swapXY, since vignette is in RAW and always before rotation // No need for swapXY, since vignette is in RAW and always before rotation
float yd = ((float)y - mc.y0) * mc.rfy; float yd = ((float)y - mc.y0) * mc.rfy;
@ -1169,7 +1169,7 @@ SSEFUNCTION void rtengine::LCPMapper::processVignetteLine(int width, int y, floa
} }
} }
SSEFUNCTION void rtengine::LCPMapper::processVignetteLine3Channels(int width, int y, float* line) const void rtengine::LCPMapper::processVignetteLine3Channels(int width, int y, float* line) const
{ {
// No need for swapXY, since vignette is in RAW and always before rotation // No need for swapXY, since vignette is in RAW and always before rotation
float yd = ((float)y - mc.y0) * mc.rfy; float yd = ((float)y - mc.y0) * mc.rfy;

View File

@ -26,44 +26,19 @@
#ifdef __SSE2__ #ifdef __SSE2__
#include "sleefsseavx.c" #include "sleefsseavx.c"
#ifdef __GNUC__
#if defined(WIN32) && !defined( __x86_64__ )
// needed for actual versions of GCC with 32-Bit Windows
#define SSEFUNCTION __attribute__((force_align_arg_pointer))
#else
#define SSEFUNCTION
#endif
#else
#define SSEFUNCTION
#endif
#else
#ifdef __SSE__
#ifdef __GNUC__
#if defined(WIN32) && !defined( __x86_64__ )
// needed for actual versions of GCC with 32-Bit Windows
#define SSEFUNCTION __attribute__((force_align_arg_pointer))
#else
#define SSEFUNCTION
#endif
#else
#define SSEFUNCTION
#endif
#else
#define SSEFUNCTION
#endif
#endif #endif
#ifdef __GNUC__ #ifdef __GNUC__
#define RESTRICT __restrict__ #define RESTRICT __restrict__
#define LIKELY(x) __builtin_expect (!!(x), 1) #if __SIZEOF_POINTER__ == 4 && __GNUC__ >= 7 // there seems to be a bug with __builtin_expect on 32bit systems when using gcc >= 7
#define UNLIKELY(x) __builtin_expect (!!(x), 0) #define LIKELY(x) (x)
#if (!defined(WIN32) || defined( __x86_64__ )) #define UNLIKELY(x) (x)
#define ALIGNED64 __attribute__ ((aligned (64))) #else
#define ALIGNED16 __attribute__ ((aligned (16))) #define LIKELY(x) __builtin_expect (!!(x), 1)
#else // there is a bug in gcc 4.7.x when using openmp and aligned memory and -O3, also needed for WIN32 builds #define UNLIKELY(x) __builtin_expect (!!(x), 0)
#define ALIGNED64
#define ALIGNED16
#endif #endif
#define ALIGNED64 __attribute__ ((aligned (64)))
#define ALIGNED16 __attribute__ ((aligned (16)))
#else #else
#define RESTRICT #define RESTRICT
#define LIKELY(x) (x) #define LIKELY(x) (x)
@ -71,7 +46,4 @@
#define ALIGNED64 #define ALIGNED64
#define ALIGNED16 #define ALIGNED16
#endif #endif
#if defined _OPENMP
#define _RT_NESTED_OPENMP
#endif
#endif #endif

View File

@ -1468,7 +1468,8 @@ bool EPDParams::operator !=(const EPDParams& other) const
FattalToneMappingParams::FattalToneMappingParams() : FattalToneMappingParams::FattalToneMappingParams() :
enabled(false), enabled(false),
threshold(0), threshold(0),
amount(30) amount(30),
anchor(50)
{ {
} }
@ -1477,7 +1478,8 @@ bool FattalToneMappingParams::operator ==(const FattalToneMappingParams& other)
return return
enabled == other.enabled enabled == other.enabled
&& threshold == other.threshold && threshold == other.threshold
&& amount == other.amount; && amount == other.amount
&& anchor == other.anchor;
} }
bool FattalToneMappingParams::operator !=(const FattalToneMappingParams& other) const bool FattalToneMappingParams::operator !=(const FattalToneMappingParams& other) const
@ -3426,6 +3428,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || pedited->fattal.enabled, "FattalToneMapping", "Enabled", fattal.enabled, keyFile); saveToKeyfile(!pedited || pedited->fattal.enabled, "FattalToneMapping", "Enabled", fattal.enabled, keyFile);
saveToKeyfile(!pedited || pedited->fattal.threshold, "FattalToneMapping", "Threshold", fattal.threshold, keyFile); saveToKeyfile(!pedited || pedited->fattal.threshold, "FattalToneMapping", "Threshold", fattal.threshold, keyFile);
saveToKeyfile(!pedited || pedited->fattal.amount, "FattalToneMapping", "Amount", fattal.amount, keyFile); saveToKeyfile(!pedited || pedited->fattal.amount, "FattalToneMapping", "Amount", fattal.amount, keyFile);
saveToKeyfile(!pedited || pedited->fattal.anchor, "FattalToneMapping", "Anchor", fattal.anchor, keyFile);
// Shadows & highlights // Shadows & highlights
saveToKeyfile(!pedited || pedited->sh.enabled, "Shadows & Highlights", "Enabled", sh.enabled, keyFile); saveToKeyfile(!pedited || pedited->sh.enabled, "Shadows & Highlights", "Enabled", sh.enabled, keyFile);
@ -3890,7 +3893,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftSmooth, "RAW Bayer", "pixelShiftSmoothFactor", raw.bayersensor.pixelShiftSmoothFactor, keyFile); saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftSmooth, "RAW Bayer", "pixelShiftSmoothFactor", raw.bayersensor.pixelShiftSmoothFactor, keyFile);
saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftExp0, "RAW Bayer", "pixelShiftExp0", raw.bayersensor.pixelShiftExp0, keyFile); saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftExp0, "RAW Bayer", "pixelShiftExp0", raw.bayersensor.pixelShiftExp0, keyFile);
saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftLmmse, "RAW Bayer", "pixelShiftLmmse", raw.bayersensor.pixelShiftLmmse, keyFile); saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftLmmse, "RAW Bayer", "pixelShiftLmmse", raw.bayersensor.pixelShiftLmmse, keyFile);
saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftOneGreen, "RAW Bayer", "pixelShiftOneGreen", raw.bayersensor.pixelShiftOneGreen, keyFile); // saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftOneGreen, "RAW Bayer", "pixelShiftOneGreen", raw.bayersensor.pixelShiftOneGreen, keyFile);
saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftEqualBright, "RAW Bayer", "pixelShiftEqualBright", raw.bayersensor.pixelShiftEqualBright, keyFile); saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftEqualBright, "RAW Bayer", "pixelShiftEqualBright", raw.bayersensor.pixelShiftEqualBright, keyFile);
saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftEqualBrightChannel, "RAW Bayer", "pixelShiftEqualBrightChannel", raw.bayersensor.pixelShiftEqualBrightChannel, keyFile); saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftEqualBrightChannel, "RAW Bayer", "pixelShiftEqualBrightChannel", raw.bayersensor.pixelShiftEqualBrightChannel, keyFile);
saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftNonGreenCross, "RAW Bayer", "pixelShiftNonGreenCross", raw.bayersensor.pixelShiftNonGreenCross, keyFile); saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftNonGreenCross, "RAW Bayer", "pixelShiftNonGreenCross", raw.bayersensor.pixelShiftNonGreenCross, keyFile);
@ -4446,6 +4449,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "FattalToneMapping", "Enabled", pedited, fattal.enabled, pedited->fattal.enabled); assignFromKeyfile(keyFile, "FattalToneMapping", "Enabled", pedited, fattal.enabled, pedited->fattal.enabled);
assignFromKeyfile(keyFile, "FattalToneMapping", "Threshold", pedited, fattal.threshold, pedited->fattal.threshold); assignFromKeyfile(keyFile, "FattalToneMapping", "Threshold", pedited, fattal.threshold, pedited->fattal.threshold);
assignFromKeyfile(keyFile, "FattalToneMapping", "Amount", pedited, fattal.amount, pedited->fattal.amount); assignFromKeyfile(keyFile, "FattalToneMapping", "Amount", pedited, fattal.amount, pedited->fattal.amount);
assignFromKeyfile(keyFile, "FattalToneMapping", "Anchor", pedited, fattal.anchor, pedited->fattal.anchor);
} }
if (keyFile.has_group("Shadows & Highlights")) { if (keyFile.has_group("Shadows & Highlights")) {
@ -5377,7 +5381,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftSmoothFactor", pedited, raw.bayersensor.pixelShiftSmoothFactor, pedited->raw.bayersensor.pixelShiftSmooth); assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftSmoothFactor", pedited, raw.bayersensor.pixelShiftSmoothFactor, pedited->raw.bayersensor.pixelShiftSmooth);
assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftExp0", pedited, raw.bayersensor.pixelShiftExp0, pedited->raw.bayersensor.pixelShiftExp0); assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftExp0", pedited, raw.bayersensor.pixelShiftExp0, pedited->raw.bayersensor.pixelShiftExp0);
assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftLmmse", pedited, raw.bayersensor.pixelShiftLmmse, pedited->raw.bayersensor.pixelShiftLmmse); assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftLmmse", pedited, raw.bayersensor.pixelShiftLmmse, pedited->raw.bayersensor.pixelShiftLmmse);
assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftOneGreen", pedited, raw.bayersensor.pixelShiftOneGreen, pedited->raw.bayersensor.pixelShiftOneGreen); // assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftOneGreen", pedited, raw.bayersensor.pixelShiftOneGreen, pedited->raw.bayersensor.pixelShiftOneGreen);
assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftEqualBright", pedited, raw.bayersensor.pixelShiftEqualBright, pedited->raw.bayersensor.pixelShiftEqualBright); assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftEqualBright", pedited, raw.bayersensor.pixelShiftEqualBright, pedited->raw.bayersensor.pixelShiftEqualBright);
assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftEqualBrightChannel", pedited, raw.bayersensor.pixelShiftEqualBrightChannel, pedited->raw.bayersensor.pixelShiftEqualBrightChannel); assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftEqualBrightChannel", pedited, raw.bayersensor.pixelShiftEqualBrightChannel, pedited->raw.bayersensor.pixelShiftEqualBrightChannel);
assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftNonGreenCross", pedited, raw.bayersensor.pixelShiftNonGreenCross, pedited->raw.bayersensor.pixelShiftNonGreenCross); assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftNonGreenCross", pedited, raw.bayersensor.pixelShiftNonGreenCross, pedited->raw.bayersensor.pixelShiftNonGreenCross);

View File

@ -733,6 +733,7 @@ struct FattalToneMappingParams {
bool enabled; bool enabled;
int threshold; int threshold;
int amount; int amount;
int anchor;
FattalToneMappingParams(); FattalToneMappingParams();

View File

@ -1343,7 +1343,7 @@ int RawImageSource::interpolateBadPixelsXtrans(PixelsMap &bitmapBads)
* (Taken from Emil Martinec idea) * (Taken from Emil Martinec idea)
* (Optimized by Ingo Weyrich 2013 and 2015) * (Optimized by Ingo Weyrich 2013 and 2015)
*/ */
SSEFUNCTION int RawImageSource::findHotDeadPixels(PixelsMap &bpMap, float thresh, bool findHotPixels, bool findDeadPixels) int RawImageSource::findHotDeadPixels( PixelsMap &bpMap, float thresh, bool findHotPixels, bool findDeadPixels )
{ {
float varthresh = (20.0 * (thresh / 100.0) + 1.0) / 24.f; float varthresh = (20.0 * (thresh / 100.0) + 1.0) / 24.f;
@ -3181,7 +3181,7 @@ void RawImageSource::copyOriginalPixels(const RAWParams &raw, RawImage *src, Raw
} }
} }
SSEFUNCTION void RawImageSource::cfaboxblur(RawImage *riFlatFile, float* cfablur, const int boxH, const int boxW) void RawImageSource::cfaboxblur(RawImage *riFlatFile, float* cfablur, const int boxH, const int boxW)
{ {
if (boxW == 0 && boxH == 0) { // nothing to blur if (boxW == 0 && boxH == 0) { // nothing to blur

View File

@ -358,7 +358,7 @@ void SHMap::forceStat (float max_, float min_, float avg_)
avg = avg_; avg = avg_;
} }
SSEFUNCTION void SHMap::dirpyr_shmap(float ** data_fine, float ** data_coarse, int width, int height, LUTf & rangefn, int level, int scale) void SHMap::dirpyr_shmap(float ** data_fine, float ** data_coarse, int width, int height, LUTf & rangefn, int level, int scale)
{ {
//scale is spacing of directional averaging weights //scale is spacing of directional averaging weights
@ -375,7 +375,7 @@ SSEFUNCTION void SHMap::dirpyr_shmap(float ** data_fine, float ** data_coarse, i
#pragma omp parallel #pragma omp parallel
#endif #endif
{ {
#if defined( __SSE2__ ) && defined( __x86_64__ ) #ifdef __SSE2__
vfloat dirwtv, valv, normv, dftemp1v, dftemp2v; vfloat dirwtv, valv, normv, dftemp1v, dftemp2v;
#endif // __SSE2__ #endif // __SSE2__
int j; int j;
@ -402,7 +402,7 @@ SSEFUNCTION void SHMap::dirpyr_shmap(float ** data_fine, float ** data_coarse, i
data_coarse[i][j] = val / norm; // low pass filter data_coarse[i][j] = val / norm; // low pass filter
} }
#if defined( __SSE2__ ) && defined( __x86_64__ ) #ifdef __SSE2__
int inbrMin = max(i - scalewin, i % scale); int inbrMin = max(i - scalewin, i % scale);
for(; j < (width - scalewin) - 3; j += 4) { for(; j < (width - scalewin) - 3; j += 4) {
@ -482,7 +482,7 @@ SSEFUNCTION void SHMap::dirpyr_shmap(float ** data_fine, float ** data_coarse, i
#pragma omp parallel #pragma omp parallel
#endif #endif
{ {
#if defined( __SSE2__ ) && defined( __x86_64__ ) #ifdef __SSE2__
vfloat dirwtv, valv, normv, dftemp1v, dftemp2v; vfloat dirwtv, valv, normv, dftemp1v, dftemp2v;
float domkerv[5][5][4] ALIGNED16 = {{{1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}}, {{1, 1, 1, 1}, {2, 2, 2, 2}, {2, 2, 2, 2}, {2, 2, 2, 2}, {1, 1, 1, 1}}, {{1, 1, 1, 1}, {2, 2, 2, 2}, {2, 2, 2, 2}, {2, 2, 2, 2}, {1, 1, 1, 1}}, {{1, 1, 1, 1}, {2, 2, 2, 2}, {2, 2, 2, 2}, {2, 2, 2, 2}, {1, 1, 1, 1}}, {{1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}}}; float domkerv[5][5][4] ALIGNED16 = {{{1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}}, {{1, 1, 1, 1}, {2, 2, 2, 2}, {2, 2, 2, 2}, {2, 2, 2, 2}, {1, 1, 1, 1}}, {{1, 1, 1, 1}, {2, 2, 2, 2}, {2, 2, 2, 2}, {2, 2, 2, 2}, {1, 1, 1, 1}}, {{1, 1, 1, 1}, {2, 2, 2, 2}, {2, 2, 2, 2}, {2, 2, 2, 2}, {1, 1, 1, 1}}, {{1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}}};
@ -510,7 +510,7 @@ SSEFUNCTION void SHMap::dirpyr_shmap(float ** data_fine, float ** data_coarse, i
data_coarse[i][j] = val / norm; // low pass filter data_coarse[i][j] = val / norm; // low pass filter
} }
#if defined( __SSE2__ ) && defined( __x86_64__ ) #ifdef __SSE2__
for(; j < width - scalewin - 3; j += 4) { for(; j < width - scalewin - 3; j += 4) {
valv = _mm_setzero_ps(); valv = _mm_setzero_ps();

View File

@ -906,7 +906,7 @@ typedef struct {
static INLINE vfloat vabsf(vfloat f) { return (vfloat)vandnotm((vmask)vcast_vf_f(-0.0f), (vmask)f); } static INLINE vfloat vabsf(vfloat f) { return (vfloat)vandnotm((vmask)vcast_vf_f(-0.0f), (vmask)f); }
static INLINE vfloat vnegf(vfloat f) { return (vfloat)vxorm((vmask)f, (vmask)vcast_vf_f(-0.0f)); } static INLINE vfloat vnegf(vfloat f) { return (vfloat)vxorm((vmask)f, (vmask)vcast_vf_f(-0.0f)); }
#if defined( __SSE4_1__ ) && defined( __x86_64__ ) #ifdef __SSE4_1__
// only one instruction when using SSE4.1 // only one instruction when using SSE4.1
static INLINE vfloat vself(vmask mask, vfloat x, vfloat y) { static INLINE vfloat vself(vmask mask, vfloat x, vfloat y) {
return _mm_blendv_ps(y,x,(vfloat)mask); return _mm_blendv_ps(y,x,(vfloat)mask);

View File

@ -1104,7 +1104,8 @@ void ImProcFunctions::ToneMapFattal02 (Imagefloat *rgb)
} }
float oldMedian; float oldMedian;
findMinMaxPercentile (Yr.data(), Yr.getRows() * Yr.getCols(), 0.5f, oldMedian, 0.5f, oldMedian, multiThread); const float percentile = float(LIM(1, params->fattal.anchor, 100)) / 100.f;
findMinMaxPercentile (Yr.data(), Yr.getRows() * Yr.getCols(), percentile, oldMedian, percentile, oldMedian, multiThread);
// median filter on the deep shadows, to avoid boosting noise // median filter on the deep shadows, to avoid boosting noise
// because w2 >= w and h2 >= h, we can use the L buffer as temporary buffer for Median_Denoise() // because w2 >= w and h2 >= h, we can use the L buffer as temporary buffer for Median_Denoise()
int w2 = find_fast_dim (w) + 1; int w2 = find_fast_dim (w) + 1;
@ -1146,7 +1147,7 @@ void ImProcFunctions::ToneMapFattal02 (Imagefloat *rgb)
const float wr = float(w2) / float(w); const float wr = float(w2) / float(w);
float newMedian; float newMedian;
findMinMaxPercentile (L.data(), L.getRows() * L.getCols(), 0.5f, newMedian, 0.5f, newMedian, multiThread); findMinMaxPercentile (L.data(), L.getRows() * L.getCols(), percentile, newMedian, percentile, newMedian, multiThread);
const float scale = (oldMedian == 0.f || newMedian == 0.f) ? 65535.f : (oldMedian / newMedian); // avoid Nan const float scale = (oldMedian == 0.f || newMedian == 0.f) ? 65535.f : (oldMedian / newMedian); // avoid Nan
#ifdef _OPENMP #ifdef _OPENMP

View File

@ -127,12 +127,13 @@ enum {
ADDSET_EPD_EDGESTOPPING, ADDSET_EPD_EDGESTOPPING,
ADDSET_EPD_SCALE, ADDSET_EPD_SCALE,
ADDSET_EPD_REWEIGHTINGITERATES, ADDSET_EPD_REWEIGHTINGITERATES,
ADDSET_FATTAL_ALPHA, ADDSET_FATTAL_THRESHOLD,
ADDSET_FATTAL_BETA, ADDSET_FATTAL_AMOUNT,
ADDSET_LOCALCONTRAST_RADIUS, ADDSET_LOCALCONTRAST_RADIUS,
ADDSET_LOCALCONTRAST_AMOUNT, ADDSET_LOCALCONTRAST_AMOUNT,
ADDSET_LOCALCONTRAST_DARKNESS, ADDSET_LOCALCONTRAST_DARKNESS,
ADDSET_LOCALCONTRAST_LIGHTNESS, ADDSET_LOCALCONTRAST_LIGHTNESS,
ADDSET_FATTAL_ANCHOR,
ADDSET_PARAM_NUM // THIS IS USED AS A DELIMITER!! ADDSET_PARAM_NUM // THIS IS USED AS A DELIMITER!!
}; };

View File

@ -153,7 +153,7 @@ void BatchToolPanelCoordinator::initSession ()
sharpenMicro->setAdjusterBehavior (false, false); sharpenMicro->setAdjusterBehavior (false, false);
icm->setAdjusterBehavior (false, false); icm->setAdjusterBehavior (false, false);
epd->setAdjusterBehavior (false, false, false, false, false); epd->setAdjusterBehavior (false, false, false, false, false);
fattal->setAdjusterBehavior (false, false); fattal->setAdjusterBehavior (false, false, false);
chmixer->setAdjusterBehavior (false); chmixer->setAdjusterBehavior (false);
blackwhite->setAdjusterBehavior (false, false); blackwhite->setAdjusterBehavior (false, false);
@ -194,7 +194,7 @@ void BatchToolPanelCoordinator::initSession ()
sharpening->setAdjusterBehavior (options.baBehav[ADDSET_SHARP_RADIUS], options.baBehav[ADDSET_SHARP_AMOUNT], options.baBehav[ADDSET_SHARP_DAMPING], options.baBehav[ADDSET_SHARP_ITER], options.baBehav[ADDSET_SHARP_EDGETOL], options.baBehav[ADDSET_SHARP_HALOCTRL]); sharpening->setAdjusterBehavior (options.baBehav[ADDSET_SHARP_RADIUS], options.baBehav[ADDSET_SHARP_AMOUNT], options.baBehav[ADDSET_SHARP_DAMPING], options.baBehav[ADDSET_SHARP_ITER], options.baBehav[ADDSET_SHARP_EDGETOL], options.baBehav[ADDSET_SHARP_HALOCTRL]);
prsharpening->setAdjusterBehavior (options.baBehav[ADDSET_SHARP_RADIUS], options.baBehav[ADDSET_SHARP_AMOUNT], options.baBehav[ADDSET_SHARP_DAMPING], options.baBehav[ADDSET_SHARP_ITER], options.baBehav[ADDSET_SHARP_EDGETOL], options.baBehav[ADDSET_SHARP_HALOCTRL]); prsharpening->setAdjusterBehavior (options.baBehav[ADDSET_SHARP_RADIUS], options.baBehav[ADDSET_SHARP_AMOUNT], options.baBehav[ADDSET_SHARP_DAMPING], options.baBehav[ADDSET_SHARP_ITER], options.baBehav[ADDSET_SHARP_EDGETOL], options.baBehav[ADDSET_SHARP_HALOCTRL]);
epd->setAdjusterBehavior (options.baBehav[ADDSET_EPD_STRENGTH], options.baBehav[ADDSET_EPD_GAMMA], options.baBehav[ADDSET_EPD_EDGESTOPPING], options.baBehav[ADDSET_EPD_SCALE], options.baBehav[ADDSET_EPD_REWEIGHTINGITERATES]); epd->setAdjusterBehavior (options.baBehav[ADDSET_EPD_STRENGTH], options.baBehav[ADDSET_EPD_GAMMA], options.baBehav[ADDSET_EPD_EDGESTOPPING], options.baBehav[ADDSET_EPD_SCALE], options.baBehav[ADDSET_EPD_REWEIGHTINGITERATES]);
fattal->setAdjusterBehavior (options.baBehav[ADDSET_FATTAL_ALPHA], options.baBehav[ADDSET_FATTAL_BETA]); fattal->setAdjusterBehavior (options.baBehav[ADDSET_FATTAL_AMOUNT], options.baBehav[ADDSET_FATTAL_THRESHOLD], options.baBehav[ADDSET_FATTAL_ANCHOR]);
localContrast->setAdjusterBehavior(options.baBehav[ADDSET_LOCALCONTRAST_RADIUS], options.baBehav[ADDSET_LOCALCONTRAST_AMOUNT], options.baBehav[ADDSET_LOCALCONTRAST_DARKNESS], options.baBehav[ADDSET_LOCALCONTRAST_LIGHTNESS]); localContrast->setAdjusterBehavior(options.baBehav[ADDSET_LOCALCONTRAST_RADIUS], options.baBehav[ADDSET_LOCALCONTRAST_AMOUNT], options.baBehav[ADDSET_LOCALCONTRAST_DARKNESS], options.baBehav[ADDSET_LOCALCONTRAST_LIGHTNESS]);
sharpenEdge->setAdjusterBehavior (options.baBehav[ADDSET_SHARPENEDGE_AMOUNT], options.baBehav[ADDSET_SHARPENEDGE_PASS]); sharpenEdge->setAdjusterBehavior (options.baBehav[ADDSET_SHARPENEDGE_AMOUNT], options.baBehav[ADDSET_SHARPENEDGE_PASS]);

View File

@ -73,14 +73,8 @@ void BatchQueueEntryUpdater::process (guint8* oimg, int ow, int oh, int newh, BQ
stopped = false; stopped = false;
tostop = false; tostop = false;
#if __GNUC__ == 4 && __GNUC_MINOR__ == 8 && defined( WIN32 ) && defined(__x86_64__)
#undef THREAD_PRIORITY_NORMAL
// See Issue 2384 comment #3
thread = Glib::Thread::create(sigc::mem_fun(*this, &BatchQueueEntryUpdater::processThread), (unsigned long int)0, true, true, Glib::THREAD_PRIORITY_NORMAL);
#else
#undef THREAD_PRIORITY_LOW #undef THREAD_PRIORITY_LOW
thread = Glib::Thread::create(sigc::mem_fun(*this, &BatchQueueEntryUpdater::processThread), (unsigned long int)0, true, true, Glib::THREAD_PRIORITY_LOW); thread = Glib::Thread::create(sigc::mem_fun(*this, &BatchQueueEntryUpdater::processThread), (unsigned long int)0, true, true, Glib::THREAD_PRIORITY_LOW);
#endif
} }
} }

View File

@ -1074,7 +1074,7 @@ void EditorPanel::open (Thumbnail* tmb, rtengine::InitialImage* isrc)
// normal redraw don't work, so this is the hard way // normal redraw don't work, so this is the hard way
// Disabled this with Issue 2435 because it seems to work fine now // Disabled this with Issue 2435 because it seems to work fine now
// if (!options.tabbedUI && iareapanel->imageArea->mainCropWindow->getZoomFitVal() == 1.0) { // if (!options.tabbedUI && iareapanel->imageArea->mainCropWindow->getZoomFitVal() == 1.0) {
// iareapanel->imageArea->mainCropWindow->cropHandler.update(); iareapanel->imageArea->mainCropWindow->cropHandler.update();
// } // }
} else { } else {
Gtk::Allocation alloc; Gtk::Allocation alloc;

View File

@ -18,6 +18,7 @@
* along with RawTherapee. If not, see <http://www.gnu.org/licenses/>. * along with RawTherapee. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include "fattaltonemap.h" #include "fattaltonemap.h"
#include "eventmapper.h"
#include <iomanip> #include <iomanip>
#include <cmath> #include <cmath>
@ -26,32 +27,43 @@ using namespace rtengine::procparams;
FattalToneMapping::FattalToneMapping(): FoldableToolPanel(this, "fattal", M("TP_TM_FATTAL_LABEL"), true, true) FattalToneMapping::FattalToneMapping(): FoldableToolPanel(this, "fattal", M("TP_TM_FATTAL_LABEL"), true, true)
{ {
auto m = ProcEventMapper::getInstance();
EvTMFattalAnchor = m->newEvent(HDR, "HISTORY_MSG_TM_FATTAL_ANCHOR");
amount = Gtk::manage(new Adjuster (M("TP_TM_FATTAL_AMOUNT"), 1., 100., 1., 30.)); amount = Gtk::manage(new Adjuster (M("TP_TM_FATTAL_AMOUNT"), 1., 100., 1., 30.));
threshold = Gtk::manage(new Adjuster (M("TP_TM_FATTAL_THRESHOLD"), -100., 100., 1., 0.0)); threshold = Gtk::manage(new Adjuster (M("TP_TM_FATTAL_THRESHOLD"), -100., 100., 1., 0.0));
Gtk::Image *al = Gtk::manage(new RTImage("adj-black.png"));
Gtk::Image *ar = Gtk::manage(new RTImage("adj-white.png"));
anchor = Gtk::manage(new Adjuster(M("TP_TM_FATTAL_ANCHOR"), 1, 100, 1, 50, al, ar));
amount->setAdjusterListener(this); amount->setAdjusterListener(this);
threshold->setAdjusterListener(this); threshold->setAdjusterListener(this);
anchor->setAdjusterListener(this);
amount->show(); amount->show();
threshold->show(); threshold->show();
anchor->show();
pack_start(*amount); pack_start(*amount);
pack_start(*threshold); pack_start(*threshold);
pack_start(*anchor);
} }
void FattalToneMapping::read(const ProcParams *pp, const ParamsEdited *pedited) void FattalToneMapping::read(const ProcParams *pp, const ParamsEdited *pedited)
{ {
disableListener(); disableListener();
if(pedited) { if (pedited) {
threshold->setEditedState(pedited->fattal.threshold ? Edited : UnEdited); threshold->setEditedState(pedited->fattal.threshold ? Edited : UnEdited);
amount->setEditedState(pedited->fattal.amount ? Edited : UnEdited); amount->setEditedState(pedited->fattal.amount ? Edited : UnEdited);
anchor->setEditedState(pedited->fattal.anchor ? Edited : UnEdited);
set_inconsistent(multiImage && !pedited->fattal.enabled); set_inconsistent(multiImage && !pedited->fattal.enabled);
} }
setEnabled(pp->fattal.enabled); setEnabled(pp->fattal.enabled);
threshold->setValue(pp->fattal.threshold); threshold->setValue(pp->fattal.threshold);
amount->setValue(pp->fattal.amount); amount->setValue(pp->fattal.amount);
anchor->setValue(pp->fattal.anchor);
enableListener(); enableListener();
} }
@ -60,11 +72,13 @@ void FattalToneMapping::write(ProcParams *pp, ParamsEdited *pedited)
{ {
pp->fattal.threshold = threshold->getValue(); pp->fattal.threshold = threshold->getValue();
pp->fattal.amount = amount->getValue(); pp->fattal.amount = amount->getValue();
pp->fattal.anchor = anchor->getValue();
pp->fattal.enabled = getEnabled(); pp->fattal.enabled = getEnabled();
if(pedited) { if(pedited) {
pedited->fattal.threshold = threshold->getEditedState(); pedited->fattal.threshold = threshold->getEditedState();
pedited->fattal.amount = amount->getEditedState(); pedited->fattal.amount = amount->getEditedState();
pedited->fattal.anchor = anchor->getEditedState();
pedited->fattal.enabled = !get_inconsistent(); pedited->fattal.enabled = !get_inconsistent();
} }
} }
@ -73,13 +87,16 @@ void FattalToneMapping::setDefaults(const ProcParams *defParams, const ParamsEdi
{ {
threshold->setDefault(defParams->fattal.threshold); threshold->setDefault(defParams->fattal.threshold);
amount->setDefault(defParams->fattal.amount); amount->setDefault(defParams->fattal.amount);
anchor->setDefault(defParams->fattal.anchor);
if(pedited) { if(pedited) {
threshold->setDefaultEditedState(pedited->fattal.threshold ? Edited : UnEdited); threshold->setDefaultEditedState(pedited->fattal.threshold ? Edited : UnEdited);
amount->setDefaultEditedState(pedited->fattal.amount ? Edited : UnEdited); amount->setDefaultEditedState(pedited->fattal.amount ? Edited : UnEdited);
anchor->setDefaultEditedState(pedited->fattal.anchor ? Edited : UnEdited);
} else { } else {
threshold->setDefaultEditedState(Irrelevant); threshold->setDefaultEditedState(Irrelevant);
amount->setDefaultEditedState(Irrelevant); amount->setDefaultEditedState(Irrelevant);
anchor->setDefaultEditedState(Irrelevant);
} }
} }
@ -90,6 +107,8 @@ void FattalToneMapping::adjusterChanged(Adjuster* a, double newval)
listener->panelChanged(EvTMFattalThreshold, a->getTextValue()); listener->panelChanged(EvTMFattalThreshold, a->getTextValue());
} else if(a == amount) { } else if(a == amount) {
listener->panelChanged(EvTMFattalAmount, a->getTextValue()); listener->panelChanged(EvTMFattalAmount, a->getTextValue());
} else if(a == anchor) {
listener->panelChanged(EvTMFattalAnchor, a->getTextValue());
} }
} }
} }
@ -113,11 +132,13 @@ void FattalToneMapping::setBatchMode(bool batchMode)
threshold->showEditedCB(); threshold->showEditedCB();
amount->showEditedCB(); amount->showEditedCB();
anchor->showEditedCB();
} }
void FattalToneMapping::setAdjusterBehavior (bool alphaAdd, bool betaAdd) void FattalToneMapping::setAdjusterBehavior(bool amountAdd, bool thresholdAdd, bool anchorAdd)
{ {
threshold->setAddMode(alphaAdd); amount->setAddMode(amountAdd);
amount->setAddMode(betaAdd); threshold->setAddMode(thresholdAdd);
anchor->setAddMode(anchorAdd);
} }

View File

@ -28,7 +28,10 @@ class FattalToneMapping: public ToolParamBlock, public AdjusterListener, public
protected: protected:
Adjuster *threshold; Adjuster *threshold;
Adjuster *amount; Adjuster *amount;
Adjuster *anchor;
rtengine::ProcEvent EvTMFattalAnchor;
public: public:
FattalToneMapping(); FattalToneMapping();
@ -40,7 +43,6 @@ public:
void adjusterChanged (Adjuster* a, double newval); void adjusterChanged (Adjuster* a, double newval);
void enabledChanged (); void enabledChanged ();
void setAdjusterBehavior (bool alphaAdd, bool betaAdd); void setAdjusterBehavior(bool amountAdd, bool thresholdAdd, bool anchorAdd);
}; };

View File

@ -944,7 +944,7 @@ void HistogramArea::update (LUTu &histRed, LUTu &histGreen, LUTu &histBlue, LUTu
idle_register.add(func, haih); idle_register.add(func, haih);
} }
SSEFUNCTION void HistogramArea::updateBackBuffer () void HistogramArea::updateBackBuffer ()
{ {
if (!get_realized ()) { if (!get_realized ()) {

View File

@ -280,6 +280,7 @@ void ParamsEdited::set(bool v)
fattal.enabled = v; fattal.enabled = v;
fattal.threshold = v; fattal.threshold = v;
fattal.amount = v; fattal.amount = v;
fattal.anchor = v;
sh.enabled = v; sh.enabled = v;
sh.hq = v; sh.hq = v;
sh.highlights = v; sh.highlights = v;
@ -957,6 +958,7 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
fattal.enabled = fattal.enabled && p.fattal.enabled == other.fattal.enabled; fattal.enabled = fattal.enabled && p.fattal.enabled == other.fattal.enabled;
fattal.threshold = fattal.threshold && p.fattal.threshold == other.fattal.threshold; fattal.threshold = fattal.threshold && p.fattal.threshold == other.fattal.threshold;
fattal.amount = fattal.amount && p.fattal.amount == other.fattal.amount; fattal.amount = fattal.amount && p.fattal.amount == other.fattal.amount;
fattal.anchor = fattal.anchor && p.fattal.anchor == other.fattal.anchor;
sh.enabled = sh.enabled && p.sh.enabled == other.sh.enabled; sh.enabled = sh.enabled && p.sh.enabled == other.sh.enabled;
sh.hq = sh.hq && p.sh.hq == other.sh.hq; sh.hq = sh.hq && p.sh.hq == other.sh.hq;
@ -2303,6 +2305,9 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
if (fattal.amount) { if (fattal.amount) {
toEdit.fattal.amount = mods.fattal.amount; toEdit.fattal.amount = mods.fattal.amount;
}
if (fattal.anchor) {
toEdit.fattal.anchor = mods.fattal.anchor;
} }
if (sh.enabled) { if (sh.enabled) {

View File

@ -389,6 +389,7 @@ public:
bool enabled; bool enabled;
bool threshold; bool threshold;
bool amount; bool amount;
bool anchor;
}; };

View File

@ -43,56 +43,53 @@ PartialPasteDlg::PartialPasteDlg (const Glib::ustring &title, Gtk::Window* paren
meta ->set_name ("PartialPasteHeader"); meta ->set_name ("PartialPasteHeader");
raw = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_RAWGROUP"))); raw = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_RAWGROUP")));
raw ->set_name ("PartialPasteHeader"); raw ->set_name ("PartialPasteHeader");
advanced = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_ADVANCEDGROUP"))); advanced = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_ADVANCEDGROUP")));
advanced ->set_name("PartialPasteHeader"); advanced ->set_name("PartialPasteHeader");
loc = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_LOCGROUP"))); loc = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_LOCGROUP")));
loc ->set_name ("PartialPasteHeader"); loc ->set_name ("PartialPasteHeader");
// options in basic: // Basic Settings:
wb = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_WHITEBALANCE"))); wb = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_WHITEBALANCE")));
exposure = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_EXPOSURE"))); exposure = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_EXPOSURE")));
localcontrast = Gtk::manage(new Gtk::CheckButton(M("PARTIALPASTE_LOCALCONTRAST"))); localcontrast = Gtk::manage(new Gtk::CheckButton(M("PARTIALPASTE_LOCALCONTRAST")));
sh = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_SHADOWSHIGHLIGHTS"))); sh = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_SHADOWSHIGHLIGHTS")));
epd = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_EPD"))); epd = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_EPD")));
fattal = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_TM_FATTAL"))); fattal = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_TM_FATTAL")));
retinex = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RETINEX")));
pcvignette = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_PCVIGNETTE"))); pcvignette = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_PCVIGNETTE")));
gradient = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_GRADIENT"))); gradient = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_GRADIENT")));
labcurve = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_LABCURVE"))); labcurve = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_LABCURVE")));
colorappearance = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_COLORAPP")));
// options in detail: // Detail Settings:
sharpen = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_SHARPENING"))); sharpen = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_SHARPENING")));
sharpenedge = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_SHARPENEDGE"))); sharpenedge = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_SHARPENEDGE")));
sharpenmicro = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_SHARPENMICRO"))); sharpenmicro = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_SHARPENMICRO")));
impden = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_IMPULSEDENOISE"))); impden = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_IMPULSEDENOISE")));
dirpyreq = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_DIRPYREQUALIZER"))); dirpyrden = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DIRPYRDENOISE")));
defringe = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_DEFRINGE"))); defringe = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_DEFRINGE")));
dirpyreq = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DIRPYREQUALIZER")));
// options in wavelet: // Advanced Settings:
wavelet = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_EQUALIZER"))); //TODO - rename to wavelet retinex = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RETINEX")));
// options in loc: colorappearance = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_COLORAPP")));
// locallab = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_LOCALLAB"))); wavelet = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_EQUALIZER")));
// options in color: // Color-Related Settings
icm = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_ICMSETTINGS"))); icm = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_ICMSETTINGS")));
//gam = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_ICMGAMMA")));
vibrance = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_VIBRANCE"))); vibrance = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_VIBRANCE")));
chmixer = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_CHANNELMIXER"))); chmixer = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_CHANNELMIXER")));
blackwhite = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_CHANNELMIXERBW"))); blackwhite = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_CHANNELMIXERBW")));
dirpyrden = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_DIRPYRDENOISE")));
hsveq = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_HSVEQUALIZER"))); hsveq = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_HSVEQUALIZER")));
filmSimulation = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_FILMSIMULATION")) ); filmSimulation = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_FILMSIMULATION")) );
rgbcurves = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_RGBCURVES"))); rgbcurves = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_RGBCURVES")));
colortoning = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_COLORTONING"))); colortoning = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_COLORTONING")));
// options in lens: // Lens-Related Settings
distortion = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_DISTORTION"))); distortion = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_DISTORTION")));
cacorr = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_CACORRECTION"))); cacorr = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_CACORRECTION")));
vignetting = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_VIGNETTING"))); vignetting = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_VIGNETTING")));
lcp = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_LENSPROFILE"))); lcp = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_LENSPROFILE")));
// options in composition: // Composition Settings:
coarserot = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_COARSETRANS"))); coarserot = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_COARSETRANS")));
finerot = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_ROTATION"))); finerot = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_ROTATION")));
crop = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_CROP"))); crop = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_CROP")));
@ -101,36 +98,40 @@ PartialPasteDlg::PartialPasteDlg (const Glib::ustring &title, Gtk::Window* paren
perspective = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_PERSPECTIVE"))); perspective = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_PERSPECTIVE")));
commonTrans = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_COMMONTRANSFORMPARAMS"))); commonTrans = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_COMMONTRANSFORMPARAMS")));
// options in meta: // Metadata:
metadata = Gtk::manage(new Gtk::CheckButton(M("PARTIALPASTE_METADATA")));
exifch = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_EXIFCHANGES"))); exifch = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_EXIFCHANGES")));
iptc = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_IPTCINFO"))); iptc = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_IPTCINFO")));
// options in raw: // Raw Settings:
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_ca_autocorrect = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_RAWCACORR_AUTO")));
raw_caredblue = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_RAWCACORR_CAREDBLUE")));
raw_hotpix_filt = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_PREPROCESS_HOTPIXFILT")));
raw_deadpix_filt = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_PREPROCESS_DEADPIXFILT")));
raw_linenoise = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_PREPROCESS_LINEDENOISE")));
raw_greenthresh = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_PREPROCESS_GREENEQUIL")));
raw_method = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_RAW_DMETHOD"))); raw_method = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_RAW_DMETHOD")));
raw_imagenum = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_RAW_IMAGENUM"))); raw_imagenum = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_RAW_IMAGENUM")));
raw_pixelshift = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_RAW_PIXELSHIFT"))); raw_pixelshift = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_RAW_PIXELSHIFT")));
raw_ccSteps = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_RAW_FALSECOLOR"))); raw_ccSteps = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_RAW_FALSECOLOR")));
raw_dcb_iterations = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_RAW_DCBITERATIONS"))); raw_dcb_iterations = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_RAW_DCBITERATIONS")));
raw_dcb_enhance = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_RAW_DCBENHANCE"))); raw_dcb_enhance = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_RAW_DCBENHANCE")));
//raw_all_enhance = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAW_ALLENHANCE")));
raw_lmmse_iterations = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_RAW_LMMSEITERATIONS"))); raw_lmmse_iterations = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_RAW_LMMSEITERATIONS")));
//---
raw_linenoise = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_PREPROCESS_LINEDENOISE")));
raw_greenthresh = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_PREPROCESS_GREENEQUIL")));
raw_hotpix_filt = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_PREPROCESS_HOTPIXFILT")));
raw_deadpix_filt = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_PREPROCESS_DEADPIXFILT")));
//---
raw_expos = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWEXPOS_LINEAR")));
raw_preser = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWEXPOS_PRESER")));
raw_black = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWEXPOS_BLACK")));
//---
df_file = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_DARKFRAMEFILE"))); df_file = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_DARKFRAMEFILE")));
df_AutoSelect = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_DARKFRAMEAUTOSELECT"))); df_AutoSelect = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_DARKFRAMEAUTOSELECT")));
//---
ff_file = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_FLATFIELDFILE"))); ff_file = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_FLATFIELDFILE")));
ff_AutoSelect = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_FLATFIELDAUTOSELECT"))); ff_AutoSelect = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_FLATFIELDAUTOSELECT")));
ff_BlurRadius = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_FLATFIELDBLURRADIUS")));
ff_BlurType = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_FLATFIELDBLURTYPE"))); ff_BlurType = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_FLATFIELDBLURTYPE")));
ff_BlurRadius = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_FLATFIELDBLURRADIUS")));
ff_ClipControl = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_FLATFIELDCLIPCONTROL"))); ff_ClipControl = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_FLATFIELDCLIPCONTROL")));
//---
raw_ca_autocorrect = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWCACORR_AUTO")));
raw_caredblue = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWCACORR_CAREDBLUE")));
Gtk::VBox* vboxes[9]; Gtk::VBox* vboxes[9];
Gtk::HSeparator* hseps[9]; Gtk::HSeparator* hseps[9];
@ -171,7 +172,6 @@ PartialPasteDlg::PartialPasteDlg (const Glib::ustring &title, Gtk::Window* paren
vboxes[2]->pack_start (*color, Gtk::PACK_SHRINK, 2); vboxes[2]->pack_start (*color, Gtk::PACK_SHRINK, 2);
vboxes[2]->pack_start (*hseps[2], Gtk::PACK_SHRINK, 2); vboxes[2]->pack_start (*hseps[2], Gtk::PACK_SHRINK, 2);
vboxes[2]->pack_start (*icm, Gtk::PACK_SHRINK, 2); vboxes[2]->pack_start (*icm, Gtk::PACK_SHRINK, 2);
//vboxes[2]->pack_start (*gam, Gtk::PACK_SHRINK, 2);
vboxes[2]->pack_start (*vibrance, Gtk::PACK_SHRINK, 2); vboxes[2]->pack_start (*vibrance, Gtk::PACK_SHRINK, 2);
vboxes[2]->pack_start (*chmixer, Gtk::PACK_SHRINK, 2); vboxes[2]->pack_start (*chmixer, Gtk::PACK_SHRINK, 2);
vboxes[2]->pack_start (*blackwhite, Gtk::PACK_SHRINK, 2); vboxes[2]->pack_start (*blackwhite, Gtk::PACK_SHRINK, 2);
@ -199,17 +199,24 @@ PartialPasteDlg::PartialPasteDlg (const Glib::ustring &title, Gtk::Window* paren
vboxes[4]->pack_start (*perspective, Gtk::PACK_SHRINK, 2); vboxes[4]->pack_start (*perspective, Gtk::PACK_SHRINK, 2);
vboxes[4]->pack_start (*commonTrans, Gtk::PACK_SHRINK, 2); vboxes[4]->pack_start (*commonTrans, Gtk::PACK_SHRINK, 2);
//WAVELET //ADVANCED
vboxes[5]->pack_start (*advanced, Gtk::PACK_SHRINK, 2); vboxes[5]->pack_start (*advanced, Gtk::PACK_SHRINK, 2);
vboxes[5]->pack_start (*hseps[5], Gtk::PACK_SHRINK, 2); vboxes[5]->pack_start (*hseps[5], Gtk::PACK_SHRINK, 2);
vboxes[5]->pack_start (*retinex, Gtk::PACK_SHRINK, 2); vboxes[5]->pack_start (*retinex, Gtk::PACK_SHRINK, 2);
vboxes[5]->pack_start (*colorappearance, Gtk::PACK_SHRINK, 2); vboxes[5]->pack_start (*colorappearance, Gtk::PACK_SHRINK, 2);
vboxes[5]->pack_start (*wavelet, Gtk::PACK_SHRINK, 2); vboxes[5]->pack_start (*wavelet, Gtk::PACK_SHRINK, 2);
//LOC //META
vboxes[6]->pack_start (*loc, Gtk::PACK_SHRINK, 2); vboxes[6]->pack_start (*meta, Gtk::PACK_SHRINK, 2);
vboxes[6]->pack_start (*hseps[6], Gtk::PACK_SHRINK, 2); vboxes[6]->pack_start (*hseps[6], Gtk::PACK_SHRINK, 2);
// vboxes[6]->pack_start (*locallab, Gtk::PACK_SHRINK, 2); vboxes[6]->pack_start(*metadata, Gtk::PACK_SHRINK, 2);
vboxes[6]->pack_start (*exifch, Gtk::PACK_SHRINK, 2);
vboxes[6]->pack_start (*iptc, Gtk::PACK_SHRINK, 2);
vboxes[7]->pack_start (*raw_pixelshift, Gtk::PACK_SHRINK, 2);
vboxes[7]->pack_start (*raw_ccSteps, Gtk::PACK_SHRINK, 2);
vboxes[7]->pack_start (*raw_dcb_iterations, Gtk::PACK_SHRINK, 2);
vboxes[7]->pack_start (*raw_dcb_enhance, Gtk::PACK_SHRINK, 2);
vboxes[7]->pack_start (*raw_lmmse_iterations, Gtk::PACK_SHRINK, 2);
//RAW //RAW
vboxes[7]->pack_start (*raw, Gtk::PACK_SHRINK, 2); vboxes[7]->pack_start (*raw, Gtk::PACK_SHRINK, 2);
@ -221,7 +228,6 @@ PartialPasteDlg::PartialPasteDlg (const Glib::ustring &title, Gtk::Window* paren
vboxes[7]->pack_start (*raw_dcb_iterations, Gtk::PACK_SHRINK, 2); vboxes[7]->pack_start (*raw_dcb_iterations, Gtk::PACK_SHRINK, 2);
vboxes[7]->pack_start (*raw_dcb_enhance, Gtk::PACK_SHRINK, 2); vboxes[7]->pack_start (*raw_dcb_enhance, Gtk::PACK_SHRINK, 2);
vboxes[7]->pack_start (*raw_lmmse_iterations, Gtk::PACK_SHRINK, 2); vboxes[7]->pack_start (*raw_lmmse_iterations, Gtk::PACK_SHRINK, 2);
//vboxes[6]->pack_start (*raw_all_enhance, 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_linenoise, Gtk::PACK_SHRINK, 2); vboxes[7]->pack_start (*raw_linenoise, Gtk::PACK_SHRINK, 2);
vboxes[7]->pack_start (*raw_greenthresh, Gtk::PACK_SHRINK, 2); vboxes[7]->pack_start (*raw_greenthresh, Gtk::PACK_SHRINK, 2);
@ -244,12 +250,6 @@ PartialPasteDlg::PartialPasteDlg (const Glib::ustring &title, Gtk::Window* paren
vboxes[7]->pack_start (*raw_ca_autocorrect, Gtk::PACK_SHRINK, 2); vboxes[7]->pack_start (*raw_ca_autocorrect, Gtk::PACK_SHRINK, 2);
vboxes[7]->pack_start (*raw_caredblue, Gtk::PACK_SHRINK, 2); vboxes[7]->pack_start (*raw_caredblue, Gtk::PACK_SHRINK, 2);
//META
vboxes[8]->pack_start (*meta, Gtk::PACK_SHRINK, 2);
vboxes[8]->pack_start (*hseps[8], Gtk::PACK_SHRINK, 2);
vboxes[8]->pack_start (*exifch, Gtk::PACK_SHRINK, 2);
vboxes[8]->pack_start (*iptc, Gtk::PACK_SHRINK, 2);
Gtk::VBox* vbCol1 = Gtk::manage (new Gtk::VBox ()); Gtk::VBox* vbCol1 = Gtk::manage (new Gtk::VBox ());
Gtk::VBox* vbCol2 = Gtk::manage (new Gtk::VBox ()); Gtk::VBox* vbCol2 = Gtk::manage (new Gtk::VBox ());
Gtk::VBox* vbCol3 = Gtk::manage (new Gtk::VBox ()); Gtk::VBox* vbCol3 = Gtk::manage (new Gtk::VBox ());
@ -262,14 +262,14 @@ PartialPasteDlg::PartialPasteDlg (const Glib::ustring &title, Gtk::Window* paren
vbCol2->pack_start (*vboxes[i], Gtk::PACK_SHRINK, 2); vbCol2->pack_start (*vboxes[i], Gtk::PACK_SHRINK, 2);
} }
for (int i = 7; i < 9; i++) { for (int i = 7; i < 8; i++) {
vbCol3->pack_start (*vboxes[i], Gtk::PACK_SHRINK, 2); vbCol3->pack_start (*vboxes[i], Gtk::PACK_SHRINK, 2);
} }
Gtk::VBox* vbtop = Gtk::manage (new Gtk::VBox ()); Gtk::VBox* vbtop = Gtk::manage (new Gtk::VBox ());
vbtop->pack_start (*everything, Gtk::PACK_SHRINK, 2); vbtop->pack_start (*everything, Gtk::PACK_SHRINK, 2);
Gtk::Dialog::get_content_area()->pack_start (*vbtop, Gtk::PACK_SHRINK, 2); // TODO replace with get_content_area() with GTK upgrade Gtk::Dialog::get_content_area()->pack_start (*vbtop, Gtk::PACK_SHRINK, 2);
Gtk::HBox* hbmain = Gtk::manage (new Gtk::HBox ()); Gtk::HBox* hbmain = Gtk::manage (new Gtk::HBox ());
hbmain->pack_start (*vbCol1); hbmain->pack_start (*vbCol1);
@ -291,7 +291,7 @@ PartialPasteDlg::PartialPasteDlg (const Glib::ustring &title, Gtk::Window* paren
scrolledwindow->add (*hbmain); scrolledwindow->add (*hbmain);
Gtk::Dialog::get_content_area()->pack_start (*scrolledwindow, Gtk::PACK_EXPAND_WIDGET, 2);// TODO replace with get_content_area() with GTK upgrade Gtk::Dialog::get_content_area()->pack_start (*scrolledwindow, Gtk::PACK_EXPAND_WIDGET, 2);
hbmain->show(); hbmain->show();
scrolledwindow->show (); scrolledwindow->show ();
@ -306,34 +306,36 @@ PartialPasteDlg::PartialPasteDlg (const Glib::ustring &title, Gtk::Window* paren
compositionConn = composition->signal_toggled().connect (sigc::mem_fun(*this, &PartialPasteDlg::compositionToggled)); compositionConn = composition->signal_toggled().connect (sigc::mem_fun(*this, &PartialPasteDlg::compositionToggled));
metaConn = meta->signal_toggled().connect (sigc::mem_fun(*this, &PartialPasteDlg::metaToggled)); metaConn = meta->signal_toggled().connect (sigc::mem_fun(*this, &PartialPasteDlg::metaToggled));
rawConn = raw->signal_toggled().connect (sigc::mem_fun(*this, &PartialPasteDlg::rawToggled)); rawConn = raw->signal_toggled().connect (sigc::mem_fun(*this, &PartialPasteDlg::rawToggled));
advancedConn = advanced->signal_toggled().connect (sigc::mem_fun(*this, &PartialPasteDlg::advancedToggled)); advancedConn = advanced->signal_toggled().connect (sigc::mem_fun(*this, &PartialPasteDlg::advancedToggled));
// locConn = loc->signal_toggled().connect (sigc::mem_fun (*this, &PartialPasteDlg::locToggled)); // locConn = loc->signal_toggled().connect (sigc::mem_fun (*this, &PartialPasteDlg::locToggled));
// Basic Settings
wbConn = wb->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true)); wbConn = wb->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true));
exposureConn = exposure->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true)); exposureConn = exposure->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true));
localcontrastConn = localcontrast->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true)); localcontrastConn = localcontrast->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true));
shConn = sh->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true)); shConn = sh->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true));
epdConn = epd->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true)); epdConn = epd->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true));
fattalConn = fattal->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true)); fattalConn = fattal->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true));
retinexConn = retinex->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true));
pcvignetteConn = pcvignette->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true)); pcvignetteConn = pcvignette->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true));
gradientConn = gradient->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true)); gradientConn = gradient->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true));
labcurveConn = labcurve->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true)); labcurveConn = labcurve->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true));
colorappearanceConn = colorappearance->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true));
// Detail Settings:
sharpenConn = sharpen->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true)); sharpenConn = sharpen->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true));
gradsharpenConn = sharpenedge->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true)); gradsharpenConn = sharpenedge->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true));
microcontrastConn = sharpenmicro->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true)); microcontrastConn = sharpenmicro->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true));
impdenConn = impden->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true)); impdenConn = impden->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true));
dirpyrdenConn = dirpyrden->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true)); dirpyrdenConn = dirpyrden->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true));
dirpyreqConn = dirpyreq->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true));
defringeConn = defringe->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true)); defringeConn = defringe->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true));
// locallabConn = locallab->signal_toggled().connect (sigc::bind (sigc::mem_fun (*basic, &Gtk::CheckButton::set_inconsistent), true)); dirpyreqConn = dirpyreq->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true));
// Advanced Settings:
retinexConn = retinex->signal_toggled().connect (sigc::bind (sigc::mem_fun(*advanced, &Gtk::CheckButton::set_inconsistent), true));
colorappearanceConn = colorappearance->signal_toggled().connect (sigc::bind (sigc::mem_fun(*advanced, &Gtk::CheckButton::set_inconsistent), true));
waveletConn = wavelet->signal_toggled().connect (sigc::bind (sigc::mem_fun(*advanced, &Gtk::CheckButton::set_inconsistent), true)); waveletConn = wavelet->signal_toggled().connect (sigc::bind (sigc::mem_fun(*advanced, &Gtk::CheckButton::set_inconsistent), true));
// Color-related Settings:
icmConn = icm->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true)); icmConn = icm->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true));
//gamcsconn = gam->signal_toggled().connect (sigc::bind (sigc::mem_fun(*color, &Gtk::CheckButton::set_inconsistent), true));
vibranceConn = vibrance->signal_toggled().connect (sigc::bind (sigc::mem_fun (*color, &Gtk::CheckButton::set_inconsistent), true)); vibranceConn = vibrance->signal_toggled().connect (sigc::bind (sigc::mem_fun (*color, &Gtk::CheckButton::set_inconsistent), true));
chmixerConn = chmixer->signal_toggled().connect (sigc::bind (sigc::mem_fun (*color, &Gtk::CheckButton::set_inconsistent), true)); chmixerConn = chmixer->signal_toggled().connect (sigc::bind (sigc::mem_fun (*color, &Gtk::CheckButton::set_inconsistent), true));
chmixerbwConn = blackwhite->signal_toggled().connect (sigc::bind (sigc::mem_fun (*color, &Gtk::CheckButton::set_inconsistent), true)); chmixerbwConn = blackwhite->signal_toggled().connect (sigc::bind (sigc::mem_fun (*color, &Gtk::CheckButton::set_inconsistent), true));
@ -342,11 +344,13 @@ PartialPasteDlg::PartialPasteDlg (const Glib::ustring &title, Gtk::Window* paren
rgbcurvesConn = rgbcurves->signal_toggled().connect (sigc::bind (sigc::mem_fun (*color, &Gtk::CheckButton::set_inconsistent), true)); rgbcurvesConn = rgbcurves->signal_toggled().connect (sigc::bind (sigc::mem_fun (*color, &Gtk::CheckButton::set_inconsistent), true));
colortoningConn = colortoning->signal_toggled().connect (sigc::bind (sigc::mem_fun (*color, &Gtk::CheckButton::set_inconsistent), true)); colortoningConn = colortoning->signal_toggled().connect (sigc::bind (sigc::mem_fun (*color, &Gtk::CheckButton::set_inconsistent), true));
// Lens-Related Settings:
distortionConn = distortion->signal_toggled().connect (sigc::bind (sigc::mem_fun (*lens, &Gtk::CheckButton::set_inconsistent), true)); distortionConn = distortion->signal_toggled().connect (sigc::bind (sigc::mem_fun (*lens, &Gtk::CheckButton::set_inconsistent), true));
cacorrConn = cacorr->signal_toggled().connect (sigc::bind (sigc::mem_fun (*lens, &Gtk::CheckButton::set_inconsistent), true)); cacorrConn = cacorr->signal_toggled().connect (sigc::bind (sigc::mem_fun (*lens, &Gtk::CheckButton::set_inconsistent), true));
vignettingConn = vignetting->signal_toggled().connect (sigc::bind (sigc::mem_fun (*lens, &Gtk::CheckButton::set_inconsistent), true)); vignettingConn = vignetting->signal_toggled().connect (sigc::bind (sigc::mem_fun (*lens, &Gtk::CheckButton::set_inconsistent), true));
lcpConn = lcp->signal_toggled().connect (sigc::bind (sigc::mem_fun (*lens, &Gtk::CheckButton::set_inconsistent), true)); lcpConn = lcp->signal_toggled().connect (sigc::bind (sigc::mem_fun (*lens, &Gtk::CheckButton::set_inconsistent), true));
// Composition Settings:
coarserotConn = coarserot->signal_toggled().connect (sigc::bind (sigc::mem_fun (*composition, &Gtk::CheckButton::set_inconsistent), true)); coarserotConn = coarserot->signal_toggled().connect (sigc::bind (sigc::mem_fun (*composition, &Gtk::CheckButton::set_inconsistent), true));
finerotConn = finerot->signal_toggled().connect (sigc::bind (sigc::mem_fun (*composition, &Gtk::CheckButton::set_inconsistent), true)); finerotConn = finerot->signal_toggled().connect (sigc::bind (sigc::mem_fun (*composition, &Gtk::CheckButton::set_inconsistent), true));
cropConn = crop->signal_toggled().connect (sigc::bind (sigc::mem_fun (*composition, &Gtk::CheckButton::set_inconsistent), true)); cropConn = crop->signal_toggled().connect (sigc::bind (sigc::mem_fun (*composition, &Gtk::CheckButton::set_inconsistent), true));
@ -355,34 +359,40 @@ PartialPasteDlg::PartialPasteDlg (const Glib::ustring &title, Gtk::Window* paren
perspectiveConn = perspective->signal_toggled().connect (sigc::bind (sigc::mem_fun (*composition, &Gtk::CheckButton::set_inconsistent), true)); perspectiveConn = perspective->signal_toggled().connect (sigc::bind (sigc::mem_fun (*composition, &Gtk::CheckButton::set_inconsistent), true));
commonTransConn = commonTrans->signal_toggled().connect (sigc::bind (sigc::mem_fun (*composition, &Gtk::CheckButton::set_inconsistent), true)); commonTransConn = commonTrans->signal_toggled().connect (sigc::bind (sigc::mem_fun (*composition, &Gtk::CheckButton::set_inconsistent), true));
// Metadata:
metadataConn = metadata->signal_toggled().connect(sigc::bind (sigc::mem_fun(*meta, &Gtk::CheckButton::set_inconsistent), true));
exifchConn = exifch->signal_toggled().connect (sigc::bind (sigc::mem_fun (*meta, &Gtk::CheckButton::set_inconsistent), true)); exifchConn = exifch->signal_toggled().connect (sigc::bind (sigc::mem_fun (*meta, &Gtk::CheckButton::set_inconsistent), true));
iptcConn = iptc->signal_toggled().connect (sigc::bind (sigc::mem_fun (*meta, &Gtk::CheckButton::set_inconsistent), true)); iptcConn = iptc->signal_toggled().connect (sigc::bind (sigc::mem_fun (*meta, &Gtk::CheckButton::set_inconsistent), true));
// Raw Settings:
raw_methodConn = raw_method->signal_toggled().connect (sigc::bind (sigc::mem_fun (*raw, &Gtk::CheckButton::set_inconsistent), true)); raw_methodConn = raw_method->signal_toggled().connect (sigc::bind (sigc::mem_fun (*raw, &Gtk::CheckButton::set_inconsistent), true));
raw_imagenumConn = raw_imagenum->signal_toggled().connect (sigc::bind (sigc::mem_fun (*raw, &Gtk::CheckButton::set_inconsistent), true)); raw_imagenumConn = raw_imagenum->signal_toggled().connect (sigc::bind (sigc::mem_fun (*raw, &Gtk::CheckButton::set_inconsistent), true));
raw_pixelshiftConn = raw_pixelshift->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
raw_ccStepsConn = raw_ccSteps->signal_toggled().connect (sigc::bind (sigc::mem_fun (*raw, &Gtk::CheckButton::set_inconsistent), true)); raw_ccStepsConn = raw_ccSteps->signal_toggled().connect (sigc::bind (sigc::mem_fun (*raw, &Gtk::CheckButton::set_inconsistent), true));
raw_dcb_iterationsConn = raw_dcb_iterations->signal_toggled().connect (sigc::bind (sigc::mem_fun (*raw, &Gtk::CheckButton::set_inconsistent), true)); raw_dcb_iterationsConn = raw_dcb_iterations->signal_toggled().connect (sigc::bind (sigc::mem_fun (*raw, &Gtk::CheckButton::set_inconsistent), true));
raw_dcb_enhanceConn = raw_dcb_enhance->signal_toggled().connect (sigc::bind (sigc::mem_fun (*raw, &Gtk::CheckButton::set_inconsistent), true)); raw_dcb_enhanceConn = raw_dcb_enhance->signal_toggled().connect (sigc::bind (sigc::mem_fun (*raw, &Gtk::CheckButton::set_inconsistent), true));
//raw_all_enhanceConn = raw_all_enhance->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
raw_lmmse_iterationsConn = raw_lmmse_iterations->signal_toggled().connect (sigc::bind (sigc::mem_fun (*raw, &Gtk::CheckButton::set_inconsistent), true)); raw_lmmse_iterationsConn = raw_lmmse_iterations->signal_toggled().connect (sigc::bind (sigc::mem_fun (*raw, &Gtk::CheckButton::set_inconsistent), true));
raw_pixelshiftConn = raw_pixelshift->signal_toggled().connect (sigc::bind (sigc::mem_fun (*raw, &Gtk::CheckButton::set_inconsistent), true)); //---
raw_linenoiseConn = raw_linenoise->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
raw_greenthreshConn = raw_greenthresh->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
raw_hotpix_filtConn = raw_hotpix_filt->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
raw_deadpix_filtConn = raw_deadpix_filt->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
//---
raw_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_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));
raw_ca_autocorrectConn = raw_ca_autocorrect->signal_toggled().connect (sigc::bind (sigc::mem_fun (*raw, &Gtk::CheckButton::set_inconsistent), true)); //---
raw_caredblueConn = raw_caredblue->signal_toggled().connect (sigc::bind (sigc::mem_fun (*raw, &Gtk::CheckButton::set_inconsistent), true));
raw_hotpix_filtConn = raw_hotpix_filt->signal_toggled().connect (sigc::bind (sigc::mem_fun (*raw, &Gtk::CheckButton::set_inconsistent), true));
raw_deadpix_filtConn = raw_deadpix_filt->signal_toggled().connect (sigc::bind (sigc::mem_fun (*raw, &Gtk::CheckButton::set_inconsistent), true));
raw_linenoiseConn = raw_linenoise->signal_toggled().connect (sigc::bind (sigc::mem_fun (*raw, &Gtk::CheckButton::set_inconsistent), true));
raw_greenthreshConn = raw_greenthresh->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));
df_AutoSelectConn = df_AutoSelect->signal_toggled().connect (sigc::bind (sigc::mem_fun (*raw, &Gtk::CheckButton::set_inconsistent), true)); df_AutoSelectConn = df_AutoSelect->signal_toggled().connect (sigc::bind (sigc::mem_fun (*raw, &Gtk::CheckButton::set_inconsistent), true));
//---
ff_fileConn = ff_file->signal_toggled().connect (sigc::bind (sigc::mem_fun (*raw, &Gtk::CheckButton::set_inconsistent), true)); ff_fileConn = ff_file->signal_toggled().connect (sigc::bind (sigc::mem_fun (*raw, &Gtk::CheckButton::set_inconsistent), true));
ff_AutoSelectConn = ff_AutoSelect->signal_toggled().connect (sigc::bind (sigc::mem_fun (*raw, &Gtk::CheckButton::set_inconsistent), true)); ff_AutoSelectConn = ff_AutoSelect->signal_toggled().connect (sigc::bind (sigc::mem_fun (*raw, &Gtk::CheckButton::set_inconsistent), true));
ff_BlurRadiusConn = ff_BlurRadius->signal_toggled().connect (sigc::bind (sigc::mem_fun (*raw, &Gtk::CheckButton::set_inconsistent), true));
ff_BlurTypeConn = ff_BlurType->signal_toggled().connect (sigc::bind (sigc::mem_fun (*raw, &Gtk::CheckButton::set_inconsistent), true)); ff_BlurTypeConn = ff_BlurType->signal_toggled().connect (sigc::bind (sigc::mem_fun (*raw, &Gtk::CheckButton::set_inconsistent), true));
ff_BlurRadiusConn = ff_BlurRadius->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
ff_ClipControlConn = ff_ClipControl->signal_toggled().connect (sigc::bind (sigc::mem_fun (*raw, &Gtk::CheckButton::set_inconsistent), true)); ff_ClipControlConn = ff_ClipControl->signal_toggled().connect (sigc::bind (sigc::mem_fun (*raw, &Gtk::CheckButton::set_inconsistent), true));
//---
raw_ca_autocorrectConn = raw_ca_autocorrect->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
raw_caredblueConn = raw_caredblue->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
add_button (M ("GENERAL_OK"), Gtk::RESPONSE_OK); add_button (M ("GENERAL_OK"), Gtk::RESPONSE_OK);
add_button (M ("GENERAL_CANCEL"), Gtk::RESPONSE_CANCEL); add_button (M ("GENERAL_CANCEL"), Gtk::RESPONSE_CANCEL);
@ -434,55 +444,53 @@ void PartialPasteDlg::rawToggled ()
ConnectionBlocker raw_methodBlocker(raw_methodConn); ConnectionBlocker raw_methodBlocker(raw_methodConn);
ConnectionBlocker raw_imagenumBlocker(raw_imagenumConn); ConnectionBlocker raw_imagenumBlocker(raw_imagenumConn);
ConnectionBlocker raw_pixelshiftBlocker(raw_pixelshiftConn);
ConnectionBlocker raw_ccStepsBlocker(raw_ccStepsConn); ConnectionBlocker raw_ccStepsBlocker(raw_ccStepsConn);
ConnectionBlocker raw_dcb_iterationsBlocker(raw_dcb_iterationsConn); ConnectionBlocker raw_dcb_iterationsBlocker(raw_dcb_iterationsConn);
ConnectionBlocker raw_dcb_enhanceBlocker(raw_dcb_enhanceConn); ConnectionBlocker raw_dcb_enhanceBlocker(raw_dcb_enhanceConn);
//ConnectionBlocker raw_all_enhanceConnBlocker(raw_all_enhanceConnConn);
ConnectionBlocker raw_lmmse_iterationsBlocker(raw_lmmse_iterationsConn); ConnectionBlocker raw_lmmse_iterationsBlocker(raw_lmmse_iterationsConn);
ConnectionBlocker raw_pixelshiftBlocker(raw_pixelshiftConn); ConnectionBlocker raw_linenoiseBlocker(raw_linenoiseConn);
ConnectionBlocker raw_greenthreshBlocker(raw_greenthreshConn);
ConnectionBlocker raw_hotpix_filtBlocker(raw_hotpix_filtConn);
ConnectionBlocker raw_deadpix_filtBlocker(raw_deadpix_filtConn);
ConnectionBlocker raw_exposBlocker(raw_exposConn); ConnectionBlocker raw_exposBlocker(raw_exposConn);
ConnectionBlocker raw_preserBlocker(raw_preserConn); ConnectionBlocker raw_preserBlocker(raw_preserConn);
ConnectionBlocker raw_blackBlocker(raw_blackConn); ConnectionBlocker raw_blackBlocker(raw_blackConn);
ConnectionBlocker raw_ca_autocorrectBlocker(raw_ca_autocorrectConn);
ConnectionBlocker raw_caredblueBlocker(raw_caredblueConn);
ConnectionBlocker raw_hotpix_filtBlocker(raw_hotpix_filtConn);
ConnectionBlocker raw_deadpix_filtBlocker(raw_deadpix_filtConn);
ConnectionBlocker raw_linenoiseBlocker(raw_linenoiseConn);
ConnectionBlocker raw_greenthreshBlocker(raw_greenthreshConn);
ConnectionBlocker df_fileBlocker(df_fileConn); ConnectionBlocker df_fileBlocker(df_fileConn);
ConnectionBlocker df_AutoSelectBlocker(df_AutoSelectConn); ConnectionBlocker df_AutoSelectBlocker(df_AutoSelectConn);
ConnectionBlocker ff_fileBlocker(ff_fileConn); ConnectionBlocker ff_fileBlocker(ff_fileConn);
ConnectionBlocker ff_AutoSelectBlocker(ff_AutoSelectConn); ConnectionBlocker ff_AutoSelectBlocker(ff_AutoSelectConn);
ConnectionBlocker ff_BlurRadiusBlocker(ff_BlurRadiusConn);
ConnectionBlocker ff_BlurTypeBlocker(ff_BlurTypeConn); ConnectionBlocker ff_BlurTypeBlocker(ff_BlurTypeConn);
ConnectionBlocker ff_BlurRadiusBlocker(ff_BlurRadiusConn);
ConnectionBlocker ff_ClipControlBlocker(ff_ClipControlConn); ConnectionBlocker ff_ClipControlBlocker(ff_ClipControlConn);
ConnectionBlocker raw_ca_autocorrectBlocker(raw_ca_autocorrectConn);
ConnectionBlocker raw_caredblueBlocker(raw_caredblueConn);
raw->set_inconsistent (false); raw->set_inconsistent (false);
raw_method->set_active (raw->get_active ()); raw_method->set_active (raw->get_active ());
raw_imagenum->set_active (raw->get_active ()); raw_imagenum->set_active (raw->get_active ());
raw_pixelshift->set_active (raw->get_active ());
raw_ccSteps->set_active (raw->get_active ()); raw_ccSteps->set_active (raw->get_active ());
raw_dcb_iterations->set_active (raw->get_active ()); raw_dcb_iterations->set_active (raw->get_active ());
raw_dcb_enhance->set_active (raw->get_active ()); raw_dcb_enhance->set_active (raw->get_active ());
raw_lmmse_iterations->set_active (raw->get_active ()); raw_lmmse_iterations->set_active (raw->get_active ());
raw_pixelshift->set_active (raw->get_active ()); raw_linenoise->set_active (raw->get_active ());
//raw_all_enhance->set_active (raw->get_active ()); raw_greenthresh->set_active (raw->get_active ());
raw_hotpix_filt->set_active (raw->get_active ());
raw_deadpix_filt->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_preser->set_active (raw->get_active ());
raw_black->set_active (raw->get_active ()); raw_black->set_active (raw->get_active ());
raw_ca_autocorrect->set_active (raw->get_active ());
raw_caredblue->set_active (raw->get_active ());
raw_hotpix_filt->set_active (raw->get_active ());
raw_deadpix_filt->set_active (raw->get_active ());
raw_linenoise->set_active (raw->get_active ());
raw_greenthresh->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 ());
ff_file->set_active (raw->get_active ()); ff_file->set_active (raw->get_active ());
ff_AutoSelect->set_active (raw->get_active ()); ff_AutoSelect->set_active (raw->get_active ());
ff_BlurRadius->set_active (raw->get_active ());
ff_BlurType->set_active (raw->get_active ()); ff_BlurType->set_active (raw->get_active ());
ff_BlurRadius->set_active (raw->get_active ());
ff_ClipControl->set_active (raw->get_active ()); ff_ClipControl->set_active (raw->get_active ());
raw_ca_autocorrect->set_active (raw->get_active ());
raw_caredblue->set_active (raw->get_active ());
} }
void PartialPasteDlg::basicToggled () void PartialPasteDlg::basicToggled ()
@ -554,14 +562,15 @@ void PartialPasteDlg::detailToggled ()
void PartialPasteDlg::advancedToggled () void PartialPasteDlg::advancedToggled ()
{ {
ConnectionBlocker waveletBlocker(waveletConn);
ConnectionBlocker retinexBlocker(retinexConn); ConnectionBlocker retinexBlocker(retinexConn);
ConnectionBlocker colorappearanceBlocker(colorappearanceConn); ConnectionBlocker colorappearanceBlocker(colorappearanceConn);
ConnectionBlocker waveletBlocker(waveletConn);
advanced->set_inconsistent (false); advanced->set_inconsistent (false);
retinex->set_active (advanced->get_active ());
colorappearance->set_active (advanced->get_active ());
wavelet->set_active (advanced->get_active ()); wavelet->set_active (advanced->get_active ());
retinex->set_active (basic->get_active ());
colorappearance->set_active (basic->get_active ());
} }
/* /*
void PartialPasteDlg::locToggled () void PartialPasteDlg::locToggled ()
@ -585,14 +594,12 @@ void PartialPasteDlg::colorToggled ()
ConnectionBlocker chmixerbwBlocker(chmixerbwConn); ConnectionBlocker chmixerbwBlocker(chmixerbwConn);
ConnectionBlocker hsveqBlocker(hsveqConn); ConnectionBlocker hsveqBlocker(hsveqConn);
ConnectionBlocker filmSimulationBlocker(filmSimulationConn); ConnectionBlocker filmSimulationBlocker(filmSimulationConn);
//ConnectionBlocker gamcsconnBlocker(gamcsconnConn);
ConnectionBlocker rgbcurvesBlocker(rgbcurvesConn); ConnectionBlocker rgbcurvesBlocker(rgbcurvesConn);
ConnectionBlocker colortoningBlocker(colortoningConn); ConnectionBlocker colortoningBlocker(colortoningConn);
color->set_inconsistent (false); color->set_inconsistent (false);
icm->set_active (color->get_active ()); icm->set_active (color->get_active ());
//gam->set_active (color->get_active ());
vibrance->set_active (color->get_active ()); vibrance->set_active (color->get_active ());
chmixer->set_active (color->get_active ()); chmixer->set_active (color->get_active ());
blackwhite->set_active (color->get_active ()); blackwhite->set_active (color->get_active ());
@ -643,11 +650,13 @@ void PartialPasteDlg::compositionToggled ()
void PartialPasteDlg::metaToggled () void PartialPasteDlg::metaToggled ()
{ {
ConnectionBlocker metadataBlocker(metadataConn);
ConnectionBlocker exifchBlocker(exifchConn); ConnectionBlocker exifchBlocker(exifchConn);
ConnectionBlocker iptcBlocker(iptcConn); ConnectionBlocker iptcBlocker(iptcConn);
meta->set_inconsistent (false); meta->set_inconsistent (false);
metadata->set_active(meta->get_active());
exifch->set_active (meta->get_active ()); exifch->set_active (meta->get_active ());
iptc->set_active (meta->get_active ()); iptc->set_active (meta->get_active ());
} }
@ -828,6 +837,10 @@ void PartialPasteDlg::applyPaste (rtengine::procparams::ProcParams* dstPP, Param
filterPE.commonTrans = falsePE.commonTrans; filterPE.commonTrans = falsePE.commonTrans;
} }
if (!metadata->get_active()) {
filterPE.metadata = falsePE.metadata;
}
if (!exifch->get_active ()) { if (!exifch->get_active ()) {
filterPE.exif = falsePE.exif; filterPE.exif = falsePE.exif;
} }

View File

@ -97,6 +97,7 @@ public:
Gtk::CheckButton* commonTrans; Gtk::CheckButton* commonTrans;
// options in meta: // options in meta:
Gtk::CheckButton *metadata;
Gtk::CheckButton* exifch; Gtk::CheckButton* exifch;
Gtk::CheckButton* iptc; Gtk::CheckButton* iptc;
@ -134,7 +135,7 @@ public:
sigc::connection vibranceConn, chmixerConn, hsveqConn, rgbcurvesConn, chmixerbwConn, colortoningConn, filmSimulationConn; sigc::connection vibranceConn, chmixerConn, hsveqConn, rgbcurvesConn, chmixerbwConn, colortoningConn, filmSimulationConn;
sigc::connection distortionConn, cacorrConn, vignettingConn, lcpConn; sigc::connection distortionConn, cacorrConn, vignettingConn, lcpConn;
sigc::connection coarserotConn, finerotConn, cropConn, resizeConn, prsharpeningConn, perspectiveConn, commonTransConn; sigc::connection coarserotConn, finerotConn, cropConn, resizeConn, prsharpeningConn, perspectiveConn, commonTransConn;
sigc::connection 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_hotpix_filtConn, raw_deadpix_filtConn, raw_linenoiseConn, raw_greenthreshConn, raw_ccStepsConn, raw_methodConn, raw_imagenumConn, raw_dcb_iterationsConn, raw_lmmse_iterationsConn, raw_pixelshiftConn, raw_dcb_enhanceConn, raw_exposConn, raw_preserConn, raw_blackConn; sigc::connection raw_caredblueConn, raw_ca_autocorrectConn, raw_hotpix_filtConn, raw_deadpix_filtConn, raw_linenoiseConn, raw_greenthreshConn, raw_ccStepsConn, raw_methodConn, raw_imagenumConn, raw_dcb_iterationsConn, raw_lmmse_iterationsConn, raw_pixelshiftConn, raw_dcb_enhanceConn, raw_exposConn, raw_preserConn, raw_blackConn;

View File

@ -205,8 +205,9 @@ Gtk::Widget* Preferences::getBatchProcPanel()
mi = behModel->append(); mi = behModel->append();
mi->set_value(behavColumns.label, M("TP_TM_FATTAL_LABEL")); mi->set_value(behavColumns.label, M("TP_TM_FATTAL_LABEL"));
appendBehavList(mi, M("TP_TM_FATTAL_THRESHOLD"), ADDSET_FATTAL_ALPHA, false); appendBehavList (mi, M ("TP_TM_FATTAL_AMOUNT"), ADDSET_FATTAL_AMOUNT, false);
appendBehavList(mi, M("TP_TM_FATTAL_AMOUNT"), ADDSET_FATTAL_BETA, false); appendBehavList (mi, M ("TP_TM_FATTAL_THRESHOLD"), ADDSET_FATTAL_THRESHOLD, false);
appendBehavList (mi, M ("TP_TM_FATTAL_ANCHOR"), ADDSET_FATTAL_ANCHOR, false);
mi = behModel->append(); mi = behModel->append();
mi->set_value(behavColumns.label, M("TP_RETINEX_LABEL")); mi->set_value(behavColumns.label, M("TP_RETINEX_LABEL"));

View File

@ -29,4 +29,4 @@ How to easily work with new icons
2- Creates a .file for each .svg (change "w22" and "actions" as needed, explained above): 2- Creates a .file for each .svg (change "w22" and "actions" as needed, explained above):
for f in *.svg; do printf "%s\n" "${f%%.*}.png,w22,actions" > "${f%%.*}.file"; done for f in *.svg; do printf "%s\n" "${f%%.*}.png,w22,actions" > "${f%%.*}.file"; done
3- Makes the PNG icons (you need to run the script from it's containing dir): 3- Makes the PNG icons (you need to run the script from it's containing dir):
cd ~/rawtherapee/tools/source_icons/script && ./make_all_icon_theme.bash /path/to/new/svg/icons/ /tmp/png cd ~/programs/code-rawtherapee/tools/source_icons/script && ./make_all_icon_theme.bash /path/to/new/svg/icons/ /tmp/png

View File

@ -0,0 +1,102 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="10"
height="10"
viewBox="0 0 2.6458333 2.6458334"
version="1.1"
id="svg3944"
inkscape:export-filename="/tmp/1.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
inkscape:version="0.92.1 r"
sodipodi:docname="adj-black.svg">
<title
id="title5085">Icons for the &quot;Expert&quot; tab in RawTherapee</title>
<defs
id="defs3938" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="81.6"
inkscape:cx="5"
inkscape:cy="5"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1023"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:snap-bbox="false"
inkscape:bbox-paths="true"
inkscape:snap-bbox-edge-midpoints="true"
inkscape:snap-global="true"
inkscape:object-nodes="true">
<inkscape:grid
type="xygrid"
id="grid3946"
originx="0.26458333"
originy="0.26458333" />
</sodipodi:namedview>
<metadata
id="metadata3941">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Icons for the &quot;Expert&quot; tab in RawTherapee</dc:title>
<dc:creator>
<cc:Agent>
<dc:title>Morgan Hardwood</dc:title>
</cc:Agent>
</dc:creator>
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#Notice" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#Attribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-294.35415)">
<circle
style="opacity:0.7;fill:#0b0707;fill-opacity:1;stroke:none;stroke-width:0.26458329;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path5452"
cx="1.3229166"
cy="295.67706"
r="1.3229166" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@ -0,0 +1,103 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="10"
height="10"
viewBox="0 0 2.6458333 2.6458334"
version="1.1"
id="svg3944"
inkscape:export-filename="/tmp/adj-white.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
inkscape:version="0.92.1 r"
sodipodi:docname="adj-white.svg">
<title
id="title5085">Icons for the &quot;Expert&quot; tab in RawTherapee</title>
<defs
id="defs3938" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="81.6"
inkscape:cx="4.9877451"
inkscape:cy="5"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1023"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:snap-bbox="true"
inkscape:bbox-paths="true"
inkscape:snap-bbox-edge-midpoints="true"
inkscape:snap-global="true"
inkscape:object-nodes="true"
inkscape:bbox-nodes="true">
<inkscape:grid
type="xygrid"
id="grid3946"
originx="0.26458333"
originy="0.26458333" />
</sodipodi:namedview>
<metadata
id="metadata3941">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Icons for the &quot;Expert&quot; tab in RawTherapee</dc:title>
<dc:creator>
<cc:Agent>
<dc:title>Morgan Hardwood</dc:title>
</cc:Agent>
</dc:creator>
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#Notice" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#Attribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-294.35415)">
<circle
style="opacity:0.7;fill:#fffcfc;fill-opacity:1;stroke:none;stroke-width:0.26458329;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path5452"
cx="1.3229166"
cy="295.67706"
r="1.3229166" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB