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_AUTOSTARTHINT;Démarrer automatiquement le traitement à l'arrivée d'une nouvelle tâche
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
CURVEEDITOR_AXIS_IN;E:
CURVEEDITOR_AXIS_LEFT_TAN;TG:
@ -228,6 +229,7 @@ GENERAL_OK;OK
GENERAL_OPEN;Ouvrir
GENERAL_PORTRAIT;Portrait
GENERAL_SAVE;Enregistrer
GENERAL_SLIDER;Curseur
GENERAL_UNCHANGED;(Inchangé)
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.
@ -415,6 +417,7 @@ HISTORY_MSG_169;Courbe 'CT'
HISTORY_MSG_170;Vib. - Courbe
HISTORY_MSG_171;Courbe '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_175;CAM02 - Adaptation CAT02
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_201;Réd. de bruit - Chrom. R,V
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_205;CAM02 Pixels chauds/morts
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_254;CpND - Teinte chair
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_258;Virage Partiel - Couleur
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_295;Simulation de Film - Film
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_299;Réd. de bruit - Courbe de chrominance
HISTORY_MSG_300;-
@ -712,6 +718,17 @@ HISTORY_MSG_487;Corr. d'Obj. - Objectif
HISTORY_MSG_488;Compression tonale HDR
HISTORY_MSG_489;CT HDR - Seuil
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_TOOLTIP;Raccourci: <b>Alt-s</b>
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_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_TAB_ADVANCED;Avancé
MAIN_TAB_ADVANCED_TOOLTIP;Raccourci: <b>Alt-w</b>
MAIN_TAB_COLOR;Couleur
MAIN_TAB_COLOR_TOOLTIP;Raccourci:<b>Alt-c</b>
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
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.
PARTIALPASTE_ADVANCEDGROUP;Réglages Avancés
PARTIALPASTE_BASICGROUP;Réglages de base
PARTIALPASTE_CACORRECTION;Aberration chromatique
PARTIALPASTE_CHANNELMIXER;Mixage des canaux
@ -889,6 +909,8 @@ PARTIALPASTE_IPTCINFO;Infos IPTC
PARTIALPASTE_LABCURVE;Courbes Lab
PARTIALPASTE_LENSGROUP;Réglages de l'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_PCVIGNETTE;Filtre Vignettage
PARTIALPASTE_PERSPECTIVE;Perspective
@ -955,6 +977,12 @@ PREFERENCES_CLUTSCACHE;Cache HaldCLUT
PREFERENCES_CLUTSCACHE_LABEL;Nombre maximum de chache CLUT
PREFERENCES_CLUTSDIR;Dossier HaldCLUT
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_ABOVE;Au-dessus
PREFERENCES_CURVEBBOXPOS_BELOW;En-dessous
@ -986,6 +1014,7 @@ PREFERENCES_DIRLAST;Dernier dossier visité
PREFERENCES_DIROTHER;Autre
PREFERENCES_DIRSELECTDLG;Choix du dossier Image au lancement...
PREFERENCES_DIRSOFTWARE;Dossier d'installation
PREFERENCES_EDITORCMDLINE;Ligne de commande personnelle
PREFERENCES_EDITORLAYOUT;Disposition de l'éditeur
PREFERENCES_EXPAUT;Expert
PREFERENCES_EXTERNALEDITOR;Éditeur externe
@ -1381,6 +1410,7 @@ TP_COLORTONING_HIGHLIGHT;Hautes lumières
TP_COLORTONING_HUE;Teinte
TP_COLORTONING_LAB;Mixage Lab
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_LUMA;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_BLUEYELLOW;Chrominance - Bleu-Jaune
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_MANUAL;Manuel
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_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_LABEL;Réduction de Bruit
TP_DIRPYRDENOISE_LUMINANCE_CONTROL;Contrôle de luminance
TP_DIRPYRDENOISE_LUMINANCE_CURVE;Courbe 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_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_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_SATURATION;Saturation
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_USEDIST;Corr. de la distortion
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_TIP;Réinitialise les valeurs de l'exposition à des valeurs neutres
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_PIXELSHIFTNONGREENVERTICAL;Vérifier rouge/bleu vertical
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_PIXELSHIFTREDBLUEWEIGHT;Poid Rouge&Bleu
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_PIXELSHIFTSTDDEVFACTORGREEN;Facteur DevStd Vert
TP_RAW_PIXELSHIFTSTDDEVFACTORRED;Facteur DevStd Rouge
TP_RAW_RCD;RCD
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_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_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_RADIUS;Local Contrast - Radius
HISTORY_MSG_METADATA_MODE;Metadata copy mode
HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Anchor
HISTORY_NEWSNAPSHOT;Add
HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: <b>Alt-s</b>
HISTORY_SNAPSHOT;Snapshot
@ -1035,7 +1036,8 @@ PARTIALPASTE_LOCALLAB;Local L*a*b*
PARTIALPASTE_LOCGROUP;Local
PARTIALPASTE_LENSPROFILE;Profiled lens correction
PARTIALPASTE_LOCALCONTRAST;Local contrast
PARTIALPASTE_METAGROUP;Metadata
PARTIALPASTE_METADATA;Metadata mode
PARTIALPASTE_METAGROUP;Metadata settings
PARTIALPASTE_PCVIGNETTE;Vignette filter
PARTIALPASTE_PERSPECTIVE;Perspective
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_UNIFORMITY;Uniformity
TP_TM_FATTAL_AMOUNT;Amount
TP_TM_FATTAL_ANCHOR;Anchor
TP_TM_FATTAL_LABEL;HDR Tone Mapping
TP_TM_FATTAL_THRESHOLD;Threshold
TP_VIBRANCE_AVOIDCOLORSHIFT;Avoid color shift

View File

@ -291,7 +291,7 @@ bool MultiDiagonalSymmetricMatrix::LazySetEntry(float value, int row, int column
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];
@ -693,7 +693,7 @@ EdgePreservingDecomposition::~EdgePreservingDecomposition()
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)
@ -884,7 +884,7 @@ float *EdgePreservingDecomposition::CreateIteratedBlur(float *Source, float Scal
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.
Reweightings = 0;

View File

@ -474,7 +474,7 @@ void ImProcFunctions::Tile_calc(int tilesize, int overlap, int kall, int imwidth
int denoiseNestedLevels = 1;
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
//#ifdef _DEBUG
@ -783,7 +783,7 @@ BENCHFUN
numthreads = MIN(numthreads, options.rgbDenoiseThreadLimit);
}
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
denoiseNestedLevels = omp_get_max_threads() / numthreads;
bool oldNested = omp_get_nested();
@ -916,7 +916,7 @@ BENCHFUN
if (!denoiseMethodRgb) { //lab mode
//modification Jacques feb 2013 and july 2014
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel for num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1)
#endif
@ -964,7 +964,7 @@ BENCHFUN
}
}
} else {//RGB mode
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel for num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1)
#endif
@ -999,7 +999,7 @@ BENCHFUN
}
}
} else {//image is not raw; use Lab parametrization
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel for num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1)
#endif
@ -1159,7 +1159,7 @@ BENCHFUN
if (!memoryAllocationFailed) {
// precalculate madL, because it's used in adecomp and bdecomp
int maxlvl = Ldecomp->maxlevel();
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic) collapse(2) num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1)
#endif
@ -1285,7 +1285,7 @@ BENCHFUN
if (!memoryAllocationFailed) {
// copy labdn->L to Lin before it gets modified by reconstruction
Lin = new array2D<float>(width, height);
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel for num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1)
#endif
@ -1338,14 +1338,14 @@ BENCHFUN
}
}
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
int masterThread = omp_get_thread_num();
#endif
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1)
#endif
{
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
int subThread = masterThread * denoiseNestedLevels + omp_get_thread_num();
#else
int subThread = 0;
@ -1355,7 +1355,7 @@ BENCHFUN
float *fLblox = fLbloxArray[subThread];
float pBuf[width + TS + 2 * blkrad * offset] ALIGNED16;
float nbrwt[TS * TS] ALIGNED64;
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp for
#endif
@ -1455,7 +1455,7 @@ BENCHFUN
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel for num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1)
#endif
@ -1592,7 +1592,7 @@ BENCHFUN
realred /= 100.f;
realblue /= 100.f;
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16) num_threads(denoiseNestedLevels)
#endif
@ -1642,7 +1642,7 @@ BENCHFUN
}
}
} else {//RGB mode
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel for num_threads(denoiseNestedLevels)
#endif
@ -1682,7 +1682,7 @@ BENCHFUN
}
} else {
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel for num_threads(denoiseNestedLevels)
#endif
@ -1749,7 +1749,7 @@ BENCHFUN
}
}
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
omp_set_nested(oldNested);
#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;
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;
}
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);
const float eps = 0.01f;
@ -2281,7 +2281,7 @@ SSEFUNCTION bool ImProcFunctions::WaveletDenoiseAll_BiShrinkL(wavelet_decomposit
}
bool memoryAllocationFailed = false;
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1)
#endif
{
@ -2297,7 +2297,7 @@ SSEFUNCTION bool ImProcFunctions::WaveletDenoiseAll_BiShrinkL(wavelet_decomposit
if (!memoryAllocationFailed) {
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp for schedule(dynamic) collapse(2)
#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();
@ -2471,7 +2471,7 @@ SSEFUNCTION bool ImProcFunctions::WaveletDenoiseAll_BiShrinkAB(wavelet_decomposi
}
bool memoryAllocationFailed = false;
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1)
#endif
{
@ -2487,7 +2487,7 @@ SSEFUNCTION bool ImProcFunctions::WaveletDenoiseAll_BiShrinkAB(wavelet_decomposi
if (!memoryAllocationFailed) {
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp for schedule(dynamic) collapse(2)
#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)
#endif
@ -2639,7 +2639,7 @@ bool ImProcFunctions::WaveletDenoiseAllL(wavelet_decomposition &WaveletCoeffs_L,
}
bool memoryAllocationFailed = false;
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1)
#endif
{
@ -2654,7 +2654,7 @@ bool ImProcFunctions::WaveletDenoiseAllL(wavelet_decomposition &WaveletCoeffs_L,
}
if (!memoryAllocationFailed) {
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp for schedule(dynamic) collapse(2)
#endif
@ -2703,7 +2703,7 @@ bool ImProcFunctions::WaveletDenoiseAllAB(wavelet_decomposition &WaveletCoeffs_L
}
bool memoryAllocationFailed = false;
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel num_threads(denoiseNestedLevels) if (denoiseNestedLevels>1)
#endif
{
@ -2717,7 +2717,7 @@ bool ImProcFunctions::WaveletDenoiseAllAB(wavelet_decomposition &WaveletCoeffs_L
}
if (!memoryAllocationFailed) {
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp for schedule(dynamic) collapse(2)
#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)
{
@ -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,
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;
}
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,
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)
@ -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;
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")) {
//nothing to do
@ -3364,7 +3364,7 @@ SSEFUNCTION void ImProcFunctions::RGB_denoise_info(Imagefloat * src, Imagefloat
bcalc[i] = new float[wid];
}
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel for if (multiThread)
#endif
@ -3487,7 +3487,7 @@ SSEFUNCTION void ImProcFunctions::RGB_denoise_info(Imagefloat * src, Imagefloat
//fill tile from image; convert RGB to "luma/chroma"
if (isRAW) {//image is raw; use channel differences for chroma channels
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel for if (multiThread)
#endif
@ -3540,7 +3540,7 @@ SSEFUNCTION void ImProcFunctions::RGB_denoise_info(Imagefloat * src, Imagefloat
#endif
}
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel for if (multiThread)
#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
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel for if (multiThread)
#endif
@ -3695,17 +3695,17 @@ SSEFUNCTION void ImProcFunctions::RGB_denoise_info(Imagefloat * src, Imagefloat
}
const int levwav = 5;
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel sections if (multiThread)
#endif
{
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp section
#endif
{
adecomp = new wavelet_decomposition(labdn->data + datalen, labdn->W, labdn->H, levwav, 1);
}
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp section
#endif
{

View File

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

View File

@ -43,7 +43,7 @@ namespace rtengine
{
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;
@ -285,7 +285,7 @@ SSEFUNCTION void ImProcFunctions::PF_correct_RT(LabImage * src, LabImage * dst,
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;
@ -655,7 +655,7 @@ SSEFUNCTION void ImProcFunctions::PF_correct_RTcam(CieImage * src, CieImage * ds
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;
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;
MyTime t1, t2;

View File

@ -38,7 +38,7 @@
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

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)
@ -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)
@ -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)
{
#if defined( __SSE2__ ) && defined( __x86_64__ )
#ifdef __SSE2__
vfloat maxvalfv = F2V(MAXVALF);
vfloat c116v = F2V(116.f);
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);
#endif
int i = 0;
#if defined( __SSE2__ ) && defined( __x86_64__ )
#ifdef __SSE2__
for (; i < width - 3; i += 4) {
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
* 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
MyTime t1e, t2e;

View File

@ -244,7 +244,7 @@ template<typename T> void wavelet_level<T>::SynthesisFilterHaarHorizontal (const
* Applies a Haar filter
*
*/
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel for num_threads(numThreads) if(numThreads>1)
#endif
@ -266,11 +266,11 @@ template<typename T> void wavelet_level<T>::SynthesisFilterHaarVertical (const T
* Applies a Haar filter
*
*/
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel num_threads(numThreads) if(numThreads>1)
#endif
{
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp for nowait
#endif
@ -281,7 +281,7 @@ template<typename T> void wavelet_level<T>::SynthesisFilterHaarVertical (const T
}
}
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp for
#endif
@ -328,7 +328,7 @@ void wavelet_level<T>::AnalysisFilterSubsampHorizontal (T * RESTRICT srcbuffer,
}
#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)
{
@ -455,7 +455,7 @@ template<typename T> void wavelet_level<T>::SynthesisFilterSubsampHorizontal (T
// calculate coefficients
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)
#endif
@ -506,7 +506,7 @@ template<typename T> void wavelet_level<T>::SynthesisFilterSubsampHorizontal (T
}
#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
@ -521,7 +521,7 @@ template<typename T> SSEFUNCTION void wavelet_level<T>::SynthesisFilterSubsampVe
__m128 fourv = _mm_set1_ps(4.f);
__m128 srcFactorv = _mm_set1_ps(srcFactor);
__m128 dstFactorv = _mm_set1_ps(blend);
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel for num_threads(numThreads) if(numThreads>1)
#endif
@ -594,7 +594,7 @@ template<typename T> void wavelet_level<T>::SynthesisFilterSubsampVertical (T *
// calculate coefficients
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)
#endif
@ -630,7 +630,7 @@ template<typename T> void wavelet_level<T>::SynthesisFilterSubsampVertical (T *
#endif
#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 */
@ -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)
#endif
{
@ -652,7 +652,7 @@ template<typename T> template<typename E> SSEFUNCTION void wavelet_level<T>::dec
T tmpHi[m_w] ALIGNED64;
if(subsamp_out) {
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp for
#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);
}
} else {
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp for
#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)
{
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel num_threads(numThreads) if(numThreads>1)
#endif
{
@ -687,7 +687,7 @@ template<typename T> template<typename E> void wavelet_level<T>::decompose_level
/* filter along rows and columns */
if(subsamp_out)
{
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp for
#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);
}
} else {
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp for
#endif
@ -714,7 +714,7 @@ template<typename T> template<typename E> void wavelet_level<T>::decompose_level
#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) {
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,
const std::vector<double>& curvePoints,
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,
LUTu & histogram,
LUTf & hlCurve, LUTf & shCurve, LUTf & outCurve,

View File

@ -981,7 +981,7 @@ class WeightedStdToneCurve : public ToneCurve
{
private:
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;
#endif
public:
@ -1059,7 +1059,7 @@ inline void StandardToneCurve::BatchApply(
// 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.)
return;
#if defined( __SSE2__ ) && defined( __x86_64__ )
#ifdef __SSE2__
} else if (reinterpret_cast<uintptr_t>(&r[i]) % 16 == 0) {
// Otherwise, we get to the first aligned address; go to the SSE part.
break;
@ -1072,7 +1072,7 @@ inline void StandardToneCurve::BatchApply(
i++;
}
#if defined( __SSE2__ ) && defined( __x86_64__ )
#ifdef __SSE2__
for (; i + 3 < end; i += 4) {
__m128 r_val = LVF(r[i]);
@ -1166,7 +1166,7 @@ inline float WeightedStdToneCurve::Triangle(float a, float a1, float b) const
return a1;
}
#if defined( __SSE2__ ) && defined( __x86_64__ )
#ifdef __SSE2__
inline vfloat WeightedStdToneCurve::Triangle(vfloat a, vfloat a1, vfloat b) const
{
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.
// (Or, for non-SSE mode, if we get to the end.)
return;
#if defined( __SSE2__ ) && defined( __x86_64__ )
#ifdef __SSE2__
} else if (reinterpret_cast<uintptr_t>(&r[i]) % 16 == 0) {
// Otherwise, we get to the first aligned address; go to the SSE part.
break;
@ -1230,7 +1230,7 @@ inline void WeightedStdToneCurve::BatchApply(const size_t start, const size_t en
i++;
}
#if defined( __SSE2__ ) && defined( __x86_64__ )
#ifdef __SSE2__
const vfloat c65535v = F2V(65535.f);
const vfloat zd5v = F2V(0.5f);
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
// Improved speed and reduced memory consumption by Ingo Weyrich 2/2015
//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 ba = 10;
@ -1946,7 +1946,7 @@ SSEFUNCTION void RawImageSource::lmmse_interpolate_omp(int winw, int winh, array
// SSE version by Ingo Weyrich 5/2013
#ifdef __SSE2__
#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)
@ -2873,7 +2873,7 @@ void RawImageSource::nodemosaic(bool bw)
#ifdef __SSE2__
#define CLIPV(a) LIMV(a,ZEROV,c65535v)
#endif
SSEFUNCTION void RawImageSource::refinement(int PassCount)
void RawImageSource::refinement(int PassCount)
{
MyTime t1e, t2e;
t1e.set();
@ -3870,7 +3870,7 @@ void RawImageSource::cielab (const float (*rgb)[3], float* l, float* a, float *b
return;
}
#if defined( __SSE2__ ) && defined( __x86_64__ )
#ifdef __SSE2__
vfloat zd5v = F2V(0.5f);
vfloat c116v = F2V(116.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++) {
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) {
vfloat redv, greenv, bluev;

View File

@ -42,7 +42,7 @@ extern const Settings* settings;
//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;
@ -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;
@ -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
// calculate weights, compute directionally weighted average

View File

@ -52,7 +52,7 @@ LUTf RawImageSource::initInvGrad()
#endif
//LUTf RawImageSource::invGrad = RawImageSource::initInvGrad();
SSEFUNCTION void RawImageSource::fast_demosaic()
void RawImageSource::fast_demosaic()
{
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__
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 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__
// 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];
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__
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];
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
#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];
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];
calculateYvVFactors<double>(sigma, b1, b2, b3, B, M);

View File

@ -29,29 +29,13 @@ typedef __m128 vfloat;
typedef __m128i vint2;
//
#ifdef __GNUC__
#if (!defined(WIN32) || defined( __x86_64__ ))
#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)
#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)
#else
#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]
#if defined(__x86_64__) && defined(__SSE4_1__)
#ifdef __SSE4_1__
// SSE4.1 => use _mm_blend_ps instead of _mm_set_epi32 and vself
#define STC2VFU(a,v) {\
__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
//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)
{
#if defined( __SSE2__ ) && defined( __x86_64__ )
#ifdef __SSE2__
vfloat cr = F2V(0.299f);
vfloat cg = F2V(0.587f);
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++) {
int j = jstart, tj = 0;
#if defined( __SSE2__ ) && defined( __x86_64__ )
#ifdef __SSE2__
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)
{
#if defined( __SSE2__ ) && defined( __x86_64__ )
#ifdef __SSE2__
vfloat threev = F2V(3.f);
vfloat maxvalfv = F2V(MAXVALF);
#endif
for (int i = istart, ti = 0; i < tH; i++, ti++) {
int j = jstart, tj = 0;
#if defined( __SSE2__ ) && defined( __x86_64__ )
#ifdef __SSE2__
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)
for (int i = istart, ti = 0; i < tH; i++, ti++) {
int j = jstart, tj = 0;
#if defined( __SSE2__ ) && defined( __x86_64__ )
#ifdef __SSE2__
for (; j < tW - 3; j += 4, tj += 4) {
vfloat rv = LVF(rtemp[ti * tileSize + tj]);
@ -3791,7 +3791,7 @@ void ImProcFunctions::rgbProc(Imagefloat* working, LabImage* lab, PipetteBuffer
} else {
for (int i = istart, ti = 0; i < tH; i++, ti++) {
int j = jstart, tj = 0;
#if defined( __SSE2__ ) && defined( __x86_64__ )
#ifdef __SSE2__
for (; j < tW - 3; j += 4, tj += 4) {
//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) {
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);
const float wip[3][3] = {

View File

@ -31,7 +31,7 @@ using namespace std;
namespace rtengine
{
SSEFUNCTION void ImProcFunctions::impulse_nr (LabImage* lab, double thresh)
void ImProcFunctions::impulse_nr (LabImage* lab, double thresh)
{
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
// 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

View File

@ -62,7 +62,7 @@ void ImProcFunctions::localContrast(LabImage *lab)
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 a = 3.0f;

View File

@ -34,7 +34,7 @@ namespace rtengine
#define ABS(a) ((a)<0?-(a):(a))
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);

View File

@ -140,7 +140,7 @@ struct cont_params {
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
@ -644,7 +644,7 @@ SSEFUNCTION void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int
numthreads = MIN (numthreads, maxnumberofthreadsforwavelet);
}
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
wavNestedLevels = omp_get_max_threads() / numthreads;
bool oldNested = omp_get_nested();
@ -719,7 +719,7 @@ SSEFUNCTION void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int
Lold = lab->L;
}
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel for num_threads(wavNestedLevels) if(wavNestedLevels>1)
#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)
#endif
@ -867,7 +867,7 @@ SSEFUNCTION void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int
if (!Ldecomp->memoryAllocationFailed) {
float madL[8][3];
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic) collapse(2) num_threads(wavNestedLevels) if(wavNestedLevels>1)
#endif
@ -1075,7 +1075,7 @@ SSEFUNCTION void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int
bool highlight = params->toneCurve.hrenabled;
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16) num_threads(wavNestedLevels) if(wavNestedLevels>1)
#endif
@ -1245,7 +1245,7 @@ SSEFUNCTION void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int
delete [] varchro;
}
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
omp_set_nested (oldNested);
#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
max = 0.f;
min = 0.f;
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel num_threads(wavNestedLevels) if(wavNestedLevels>1)
#endif
{
float lmax = 0.f, lmin = 0.f;
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp for reduction(+:averaP,averaN,countP,countN) nowait
#endif
@ -1304,7 +1304,7 @@ void ImProcFunctions::Aver ( float * RESTRICT DataList, int datalen, float &ave
}
}
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp critical
#endif
{
@ -1334,7 +1334,7 @@ void ImProcFunctions::Sigma ( float * RESTRICT DataList, int datalen, float ave
float variP = 0.f, variN = 0.f;
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)
#endif
@ -1433,7 +1433,7 @@ float *ImProcFunctions::ContrastDR(float *Source, int W_L, int H_L, float *Contr
}
memcpy (Contrast, Source, n * sizeof (float));
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel for
#endif
@ -1444,19 +1444,19 @@ float *ImProcFunctions::ContrastDR(float *Source, int W_L, int H_L, float *Contr
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;
int n = W_L * H_L;
#ifdef __SSE2__
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel
#endif
{
__m128 epsv = _mm_set1_ps ( eps );
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp for
#endif
@ -1470,7 +1470,7 @@ SSEFUNCTION float *ImProcFunctions::CompressDR(float *Source, int W_L, int H_L,
}
#else
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel for
#endif
@ -1507,7 +1507,7 @@ SSEFUNCTION float *ImProcFunctions::CompressDR(float *Source, int W_L, int H_L,
}
#ifdef __SSE2__
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel
#endif
{
@ -1515,7 +1515,7 @@ SSEFUNCTION float *ImProcFunctions::CompressDR(float *Source, int W_L, int H_L,
__m128 epsv = _mm_set1_ps ( eps );
__m128 DetailBoostv = _mm_set1_ps ( DetailBoost );
__m128 tempv = _mm_set1_ps ( temp );
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp for
#endif
@ -1536,7 +1536,7 @@ SSEFUNCTION float *ImProcFunctions::CompressDR(float *Source, int W_L, int H_L,
}
#else
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel for
#endif
@ -1571,7 +1571,7 @@ void ImProcFunctions::ContrastResid(float * WavCoeffs_L0, struct cont_params &cp
min0 = 0.0f;
}
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel for
#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);
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel for // removed schedule(dynamic,10)
#endif
@ -1623,7 +1623,7 @@ void ImProcFunctions::EPDToneMapResid (float * WavCoeffs_L0, unsigned int Itera
}
// max0=32768.f;
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel for
#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);
//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)
#endif
@ -1691,7 +1691,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float *
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
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel for reduction(+:avedbl) num_threads(wavNestedLevels) if(wavNestedLevels>1)
#endif
@ -1699,14 +1699,14 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float *
avedbl += WavCoeffs_L0[i];
}
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel num_threads(wavNestedLevels) if(wavNestedLevels>1)
#endif
{
float lminL = FLT_MAX;
float lmaxL = 0.f;
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp for
#endif
@ -1721,7 +1721,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float *
}
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp critical
#endif
{
@ -1781,13 +1781,13 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float *
koeLi[j][i] = 0.f;
}
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel num_threads(wavNestedLevels) if(wavNestedLevels>1)
#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
{
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp for
#endif
@ -1816,18 +1816,18 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float *
if (cp.tonemap && cp.contmet == 1 && cp.resena) {
float maxp = max0 * 256.f;
float minp = min0 * 256.f;
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp single
#endif
ContrastResid(WavCoeffs_L0, cp, W_L, H_L, maxp, minp);
}
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp barrier
#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
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp for nowait
#endif
@ -1889,7 +1889,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float *
tmC[i] = &tmCBuffer[i * W_L];
}
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp for schedule(dynamic) collapse(2)
#endif
@ -1909,7 +1909,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float *
float aamp = 1.f + cp.eddetthrHi / 100.f;
for (int lvl = 0; lvl < 4; lvl++) {
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp for schedule(dynamic,16)
#endif
@ -2012,7 +2012,7 @@ void ImProcFunctions::WaveletcontAllL(LabImage * labco, float ** varhue, float *
// end
}
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp for schedule(dynamic) collapse(2)
#endif
@ -2047,7 +2047,7 @@ void ImProcFunctions::WaveletAandBAllAB(wavelet_decomposition &WaveletCoeffs_a,
float * WavCoeffs_a0 = WaveletCoeffs_a.coeff0;
float * WavCoeffs_b0 = WaveletCoeffs_b.coeff0;
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel num_threads(wavNestedLevels) if(wavNestedLevels>1)
#endif
{
@ -2055,7 +2055,7 @@ void ImProcFunctions::WaveletAandBAllAB(wavelet_decomposition &WaveletCoeffs_a,
float huebuffer[W_L] ALIGNED64;
float chrbuffer[W_L] ALIGNED64;
#endif // __SSE2__
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp for schedule(dynamic,16)
#endif
@ -2115,13 +2115,13 @@ void ImProcFunctions::WaveletcontAllAB (LabImage * labco, float ** varhue, float
float * WavCoeffs_ab0 = WaveletCoeffs_ab.coeff0;
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp parallel num_threads(wavNestedLevels) if(wavNestedLevels>1)
#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
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp for nowait
#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
#ifdef _RT_NESTED_OPENMP
#ifdef _OPENMP
#pragma omp for nowait
#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)
#endif
@ -2424,7 +2424,7 @@ void ImProcFunctions::finalContAllL (float ** WavCoeffs_L, float * WavCoeffs_L0,
float bsig = 0.5f - asig * 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)
#endif

View File

@ -1131,7 +1131,7 @@ void rtengine::LCPMapper::correctCA(double& x, double& y, int cx, int cy, int ch
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
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
float yd = ((float)y - mc.y0) * mc.rfy;

View File

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

View File

@ -1468,7 +1468,8 @@ bool EPDParams::operator !=(const EPDParams& other) const
FattalToneMappingParams::FattalToneMappingParams() :
enabled(false),
threshold(0),
amount(30)
amount(30),
anchor(50)
{
}
@ -1477,7 +1478,8 @@ bool FattalToneMappingParams::operator ==(const FattalToneMappingParams& other)
return
enabled == other.enabled
&& threshold == other.threshold
&& amount == other.amount;
&& amount == other.amount
&& anchor == other.anchor;
}
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.threshold, "FattalToneMapping", "Threshold", fattal.threshold, keyFile);
saveToKeyfile(!pedited || pedited->fattal.amount, "FattalToneMapping", "Amount", fattal.amount, keyFile);
saveToKeyfile(!pedited || pedited->fattal.anchor, "FattalToneMapping", "Anchor", fattal.anchor, keyFile);
// Shadows & highlights
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.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.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.pixelShiftEqualBrightChannel, "RAW Bayer", "pixelShiftEqualBrightChannel", raw.bayersensor.pixelShiftEqualBrightChannel, 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", "Threshold", pedited, fattal.threshold, pedited->fattal.threshold);
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")) {
@ -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", "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", "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", "pixelShiftEqualBrightChannel", pedited, raw.bayersensor.pixelShiftEqualBrightChannel, pedited->raw.bayersensor.pixelShiftEqualBrightChannel);
assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftNonGreenCross", pedited, raw.bayersensor.pixelShiftNonGreenCross, pedited->raw.bayersensor.pixelShiftNonGreenCross);

View File

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

View File

@ -1343,7 +1343,7 @@ int RawImageSource::interpolateBadPixelsXtrans(PixelsMap &bitmapBads)
* (Taken from Emil Martinec idea)
* (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;
@ -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

View File

@ -358,7 +358,7 @@ void SHMap::forceStat (float max_, float min_, float 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
@ -375,7 +375,7 @@ SSEFUNCTION void SHMap::dirpyr_shmap(float ** data_fine, float ** data_coarse, i
#pragma omp parallel
#endif
{
#if defined( __SSE2__ ) && defined( __x86_64__ )
#ifdef __SSE2__
vfloat dirwtv, valv, normv, dftemp1v, dftemp2v;
#endif // __SSE2__
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
}
#if defined( __SSE2__ ) && defined( __x86_64__ )
#ifdef __SSE2__
int inbrMin = max(i - scalewin, i % scale);
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
#endif
{
#if defined( __SSE2__ ) && defined( __x86_64__ )
#ifdef __SSE2__
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}}};
@ -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
}
#if defined( __SSE2__ ) && defined( __x86_64__ )
#ifdef __SSE2__
for(; j < width - scalewin - 3; j += 4) {
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 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
static INLINE vfloat vself(vmask mask, vfloat x, vfloat y) {
return _mm_blendv_ps(y,x,(vfloat)mask);

View File

@ -1104,7 +1104,8 @@ void ImProcFunctions::ToneMapFattal02 (Imagefloat *rgb)
}
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
// 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;
@ -1146,7 +1147,7 @@ void ImProcFunctions::ToneMapFattal02 (Imagefloat *rgb)
const float wr = float(w2) / float(w);
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
#ifdef _OPENMP

View File

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

View File

@ -153,7 +153,7 @@ void BatchToolPanelCoordinator::initSession ()
sharpenMicro->setAdjusterBehavior (false, false);
icm->setAdjusterBehavior (false, false);
epd->setAdjusterBehavior (false, false, false, false, false);
fattal->setAdjusterBehavior (false, false);
fattal->setAdjusterBehavior (false, false, false);
chmixer->setAdjusterBehavior (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]);
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]);
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]);
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;
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
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
// Disabled this with Issue 2435 because it seems to work fine now
// if (!options.tabbedUI && iareapanel->imageArea->mainCropWindow->getZoomFitVal() == 1.0) {
// iareapanel->imageArea->mainCropWindow->cropHandler.update();
iareapanel->imageArea->mainCropWindow->cropHandler.update();
// }
} else {
Gtk::Allocation alloc;

View File

@ -18,6 +18,7 @@
* along with RawTherapee. If not, see <http://www.gnu.org/licenses/>.
*/
#include "fattaltonemap.h"
#include "eventmapper.h"
#include <iomanip>
#include <cmath>
@ -26,17 +27,26 @@ using namespace rtengine::procparams;
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.));
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);
threshold->setAdjusterListener(this);
anchor->setAdjusterListener(this);
amount->show();
threshold->show();
anchor->show();
pack_start(*amount);
pack_start(*threshold);
pack_start(*anchor);
}
void FattalToneMapping::read(const ProcParams *pp, const ParamsEdited *pedited)
@ -46,12 +56,14 @@ void FattalToneMapping::read(const ProcParams *pp, const ParamsEdited *pedited)
if (pedited) {
threshold->setEditedState(pedited->fattal.threshold ? Edited : UnEdited);
amount->setEditedState(pedited->fattal.amount ? Edited : UnEdited);
anchor->setEditedState(pedited->fattal.anchor ? Edited : UnEdited);
set_inconsistent(multiImage && !pedited->fattal.enabled);
}
setEnabled(pp->fattal.enabled);
threshold->setValue(pp->fattal.threshold);
amount->setValue(pp->fattal.amount);
anchor->setValue(pp->fattal.anchor);
enableListener();
}
@ -60,11 +72,13 @@ void FattalToneMapping::write(ProcParams *pp, ParamsEdited *pedited)
{
pp->fattal.threshold = threshold->getValue();
pp->fattal.amount = amount->getValue();
pp->fattal.anchor = anchor->getValue();
pp->fattal.enabled = getEnabled();
if(pedited) {
pedited->fattal.threshold = threshold->getEditedState();
pedited->fattal.amount = amount->getEditedState();
pedited->fattal.anchor = anchor->getEditedState();
pedited->fattal.enabled = !get_inconsistent();
}
}
@ -73,13 +87,16 @@ void FattalToneMapping::setDefaults(const ProcParams *defParams, const ParamsEdi
{
threshold->setDefault(defParams->fattal.threshold);
amount->setDefault(defParams->fattal.amount);
anchor->setDefault(defParams->fattal.anchor);
if(pedited) {
threshold->setDefaultEditedState(pedited->fattal.threshold ? Edited : UnEdited);
amount->setDefaultEditedState(pedited->fattal.amount ? Edited : UnEdited);
anchor->setDefaultEditedState(pedited->fattal.anchor ? Edited : UnEdited);
} else {
threshold->setDefaultEditedState(Irrelevant);
amount->setDefaultEditedState(Irrelevant);
anchor->setDefaultEditedState(Irrelevant);
}
}
@ -90,6 +107,8 @@ void FattalToneMapping::adjusterChanged(Adjuster* a, double newval)
listener->panelChanged(EvTMFattalThreshold, a->getTextValue());
} else if(a == amount) {
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();
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(betaAdd);
amount->setAddMode(amountAdd);
threshold->setAddMode(thresholdAdd);
anchor->setAddMode(anchorAdd);
}

View File

@ -28,6 +28,9 @@ class FattalToneMapping: public ToolParamBlock, public AdjusterListener, public
protected:
Adjuster *threshold;
Adjuster *amount;
Adjuster *anchor;
rtengine::ProcEvent EvTMFattalAnchor;
public:
@ -40,7 +43,6 @@ public:
void adjusterChanged (Adjuster* a, double newval);
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);
}
SSEFUNCTION void HistogramArea::updateBackBuffer ()
void HistogramArea::updateBackBuffer ()
{
if (!get_realized ()) {

View File

@ -280,6 +280,7 @@ void ParamsEdited::set(bool v)
fattal.enabled = v;
fattal.threshold = v;
fattal.amount = v;
fattal.anchor = v;
sh.enabled = v;
sh.hq = 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.threshold = fattal.threshold && p.fattal.threshold == other.fattal.threshold;
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.hq = sh.hq && p.sh.hq == other.sh.hq;
@ -2304,6 +2306,9 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
if (fattal.amount) {
toEdit.fattal.amount = mods.fattal.amount;
}
if (fattal.anchor) {
toEdit.fattal.anchor = mods.fattal.anchor;
}
if (sh.enabled) {
toEdit.sh.enabled = mods.sh.enabled;

View File

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

View File

@ -48,51 +48,48 @@ PartialPasteDlg::PartialPasteDlg (const Glib::ustring &title, Gtk::Window* paren
loc = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_LOCGROUP")));
loc ->set_name ("PartialPasteHeader");
// options in basic:
// Basic Settings:
wb = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_WHITEBALANCE")));
exposure = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_EXPOSURE")));
localcontrast = Gtk::manage(new Gtk::CheckButton(M("PARTIALPASTE_LOCALCONTRAST")));
sh = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_SHADOWSHIGHLIGHTS")));
epd = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_EPD")));
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")));
gradient = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_GRADIENT")));
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")));
sharpenedge = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_SHARPENEDGE")));
sharpenmicro = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_SHARPENMICRO")));
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")));
dirpyreq = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DIRPYREQUALIZER")));
// options in wavelet:
wavelet = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_EQUALIZER"))); //TODO - rename to wavelet
// options in loc:
// locallab = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_LOCALLAB")));
// Advanced Settings:
retinex = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RETINEX")));
colorappearance = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_COLORAPP")));
wavelet = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_EQUALIZER")));
// options in color:
// Color-Related Settings
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")));
chmixer = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_CHANNELMIXER")));
blackwhite = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_CHANNELMIXERBW")));
dirpyrden = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_DIRPYRDENOISE")));
hsveq = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_HSVEQUALIZER")));
filmSimulation = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_FILMSIMULATION")) );
rgbcurves = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_RGBCURVES")));
colortoning = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_COLORTONING")));
// options in lens:
// Lens-Related Settings
distortion = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_DISTORTION")));
cacorr = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_CACORRECTION")));
vignetting = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_VIGNETTING")));
lcp = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_LENSPROFILE")));
// options in composition:
// Composition Settings:
coarserot = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_COARSETRANS")));
finerot = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_ROTATION")));
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")));
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")));
iptc = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_IPTCINFO")));
// options in raw:
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 Settings:
raw_method = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_RAW_DMETHOD")));
raw_imagenum = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_RAW_IMAGENUM")));
raw_pixelshift = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_RAW_PIXELSHIFT")));
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_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_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_AutoSelect = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_DARKFRAMEAUTOSELECT")));
//---
ff_file = Gtk::manage (new Gtk::CheckButton (M ("PARTIALPASTE_FLATFIELDFILE")));
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_BlurRadius = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_FLATFIELDBLURRADIUS")));
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::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 (*hseps[2], 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 (*chmixer, 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 (*commonTrans, Gtk::PACK_SHRINK, 2);
//WAVELET
//ADVANCED
vboxes[5]->pack_start (*advanced, 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 (*colorappearance, Gtk::PACK_SHRINK, 2);
vboxes[5]->pack_start (*wavelet, Gtk::PACK_SHRINK, 2);
//LOC
vboxes[6]->pack_start (*loc, Gtk::PACK_SHRINK, 2);
//META
vboxes[6]->pack_start (*meta, 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
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_enhance, 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 (*raw_linenoise, 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_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* vbCol2 = 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);
}
for (int i = 7; i < 9; i++) {
for (int i = 7; i < 8; i++) {
vbCol3->pack_start (*vboxes[i], Gtk::PACK_SHRINK, 2);
}
Gtk::VBox* vbtop = Gtk::manage (new Gtk::VBox ());
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 ());
hbmain->pack_start (*vbCol1);
@ -291,7 +291,7 @@ PartialPasteDlg::PartialPasteDlg (const Glib::ustring &title, Gtk::Window* paren
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();
scrolledwindow->show ();
@ -309,31 +309,33 @@ PartialPasteDlg::PartialPasteDlg (const Glib::ustring &title, Gtk::Window* paren
advancedConn = advanced->signal_toggled().connect (sigc::mem_fun(*this, &PartialPasteDlg::advancedToggled));
// 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));
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));
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));
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));
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));
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));
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));
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));
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));
// 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));
// Color-related Settings:
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));
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));
@ -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));
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));
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));
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));
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));
@ -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));
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));
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_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_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_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_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_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_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_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_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_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));
//---
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_CANCEL"), Gtk::RESPONSE_CANCEL);
@ -434,55 +444,53 @@ void PartialPasteDlg::rawToggled ()
ConnectionBlocker raw_methodBlocker(raw_methodConn);
ConnectionBlocker raw_imagenumBlocker(raw_imagenumConn);
ConnectionBlocker raw_pixelshiftBlocker(raw_pixelshiftConn);
ConnectionBlocker raw_ccStepsBlocker(raw_ccStepsConn);
ConnectionBlocker raw_dcb_iterationsBlocker(raw_dcb_iterationsConn);
ConnectionBlocker raw_dcb_enhanceBlocker(raw_dcb_enhanceConn);
//ConnectionBlocker raw_all_enhanceConnBlocker(raw_all_enhanceConnConn);
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_preserBlocker(raw_preserConn);
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_AutoSelectBlocker(df_AutoSelectConn);
ConnectionBlocker ff_fileBlocker(ff_fileConn);
ConnectionBlocker ff_AutoSelectBlocker(ff_AutoSelectConn);
ConnectionBlocker ff_BlurRadiusBlocker(ff_BlurRadiusConn);
ConnectionBlocker ff_BlurTypeBlocker(ff_BlurTypeConn);
ConnectionBlocker ff_BlurRadiusBlocker(ff_BlurRadiusConn);
ConnectionBlocker ff_ClipControlBlocker(ff_ClipControlConn);
ConnectionBlocker raw_ca_autocorrectBlocker(raw_ca_autocorrectConn);
ConnectionBlocker raw_caredblueBlocker(raw_caredblueConn);
raw->set_inconsistent (false);
raw_method->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_dcb_iterations->set_active (raw->get_active ());
raw_dcb_enhance->set_active (raw->get_active ());
raw_lmmse_iterations->set_active (raw->get_active ());
raw_pixelshift->set_active (raw->get_active ());
//raw_all_enhance->set_active (raw->get_active ());
raw_linenoise->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_preser->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_AutoSelect->set_active (raw->get_active ());
ff_file->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_BlurRadius->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 ()
@ -554,14 +562,15 @@ void PartialPasteDlg::detailToggled ()
void PartialPasteDlg::advancedToggled ()
{
ConnectionBlocker waveletBlocker(waveletConn);
ConnectionBlocker retinexBlocker(retinexConn);
ConnectionBlocker colorappearanceBlocker(colorappearanceConn);
ConnectionBlocker waveletBlocker(waveletConn);
advanced->set_inconsistent (false);
retinex->set_active (advanced->get_active ());
colorappearance->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 ()
@ -585,14 +594,12 @@ void PartialPasteDlg::colorToggled ()
ConnectionBlocker chmixerbwBlocker(chmixerbwConn);
ConnectionBlocker hsveqBlocker(hsveqConn);
ConnectionBlocker filmSimulationBlocker(filmSimulationConn);
//ConnectionBlocker gamcsconnBlocker(gamcsconnConn);
ConnectionBlocker rgbcurvesBlocker(rgbcurvesConn);
ConnectionBlocker colortoningBlocker(colortoningConn);
color->set_inconsistent (false);
icm->set_active (color->get_active ());
//gam->set_active (color->get_active ());
vibrance->set_active (color->get_active ());
chmixer->set_active (color->get_active ());
blackwhite->set_active (color->get_active ());
@ -643,11 +650,13 @@ void PartialPasteDlg::compositionToggled ()
void PartialPasteDlg::metaToggled ()
{
ConnectionBlocker metadataBlocker(metadataConn);
ConnectionBlocker exifchBlocker(exifchConn);
ConnectionBlocker iptcBlocker(iptcConn);
meta->set_inconsistent (false);
metadata->set_active(meta->get_active());
exifch->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;
}
if (!metadata->get_active()) {
filterPE.metadata = falsePE.metadata;
}
if (!exifch->get_active ()) {
filterPE.exif = falsePE.exif;
}

View File

@ -97,6 +97,7 @@ public:
Gtk::CheckButton* commonTrans;
// options in meta:
Gtk::CheckButton *metadata;
Gtk::CheckButton* exifch;
Gtk::CheckButton* iptc;
@ -134,7 +135,7 @@ public:
sigc::connection vibranceConn, chmixerConn, hsveqConn, rgbcurvesConn, chmixerbwConn, colortoningConn, filmSimulationConn;
sigc::connection distortionConn, cacorrConn, vignettingConn, lcpConn;
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 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->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_BETA, false);
appendBehavList (mi, M ("TP_TM_FATTAL_AMOUNT"), ADDSET_FATTAL_AMOUNT, 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->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):
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):
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