Author: akv
Date: 2009-11-15 20:58:19 +0100 (Sun, 15 Nov 2009)
New Revision: 2740

Modified:
   trunk/librawstudio/rs-settings.c
   trunk/librawstudio/rs-settings.h
   trunk/plugins/lensfun/lensfun.c
   trunk/src/application.c
   trunk/src/rs-actions.c
   trunk/src/rs-cache.c
   trunk/src/rs-preview-widget.c
   trunk/src/rs-toolbox.c
Log:
Enabling basic vignetting - only using Lensfun Vignetting K2 value as suggested 
by Lensfun author.

Modified: trunk/librawstudio/rs-settings.c
===================================================================
--- trunk/librawstudio/rs-settings.c    2009-11-15 19:15:44 UTC (rev 2739)
+++ trunk/librawstudio/rs-settings.c    2009-11-15 19:58:19 UTC (rev 2740)
@@ -54,6 +54,7 @@
        PROP_DENOISE_CHROMA,
        PROP_TCA_KR,
        PROP_TCA_KB,
+       PROP_VIGNETTING_K2,
        PROP_CHANNELMIXER_RED,
        PROP_CHANNELMIXER_GREEN,
        PROP_CHANNELMIXER_BLUE
@@ -123,6 +124,11 @@
                        0.9, 1.1, 1.0, G_PARAM_READWRITE)
        );
        g_object_class_install_property(object_class,
+               PROP_VIGNETTING_K2, g_param_spec_float( /* FIXME: ? */
+                       "vignetting_k2", _("vignetting_k2"), _("vignetting_k2"),
+                       -1, 2, 0.0, G_PARAM_READWRITE)
+       );
+       g_object_class_install_property(object_class,
                PROP_CHANNELMIXER_RED, g_param_spec_float( /* FIXME: ? */
                        "channelmixer_red", _("Red"), _("Red"),
                        0.0, 300.0, 100.0, G_PARAM_READWRITE)
@@ -185,6 +191,7 @@
                CASE(DENOISE_CHROMA, denoise_chroma);
                CASE(TCA_KR, tca_kr);
                CASE(TCA_KB, tca_kb);
+               CASE(VIGNETTING_K2, vignetting_k2);
                CASE(CHANNELMIXER_RED, channelmixer_red);
                CASE(CHANNELMIXER_GREEN, channelmixer_green);
                CASE(CHANNELMIXER_BLUE, channelmixer_blue);
@@ -221,6 +228,7 @@
                CASE(DENOISE_CHROMA, denoise_chroma);
                CASE(TCA_KR, tca_kr);
                CASE(TCA_KB, tca_kb);
+               CASE(VIGNETTING_K2, vignetting_k2);
                CASE(CHANNELMIXER_RED, channelmixer_red);
                CASE(CHANNELMIXER_GREEN, channelmixer_green);
                CASE(CHANNELMIXER_BLUE, channelmixer_blue);
@@ -283,6 +291,9 @@
        if (mask & MASK_TCA_KB)
                rs_object_class_property_reset(settings, "tca_kb");
 
+       if (mask & MASK_VIGNETTING_K2)
+               rs_object_class_property_reset(settings, "vignetting_k2");
+
        if (mask & MASK_CHANNELMIXER_RED)
                rs_object_class_property_reset(settings, "channelmixer_red");
 
@@ -383,6 +394,7 @@
        SETTINGS_COPY(DENOISE_CHROMA, denoise_chroma);
        SETTINGS_COPY(TCA_KR, tca_kr);
        SETTINGS_COPY(TCA_KB, tca_kb);
+       SETTINGS_COPY(VIGNETTING_K2, vignetting_k2);
        SETTINGS_COPY(CHANNELMIXER_RED, channelmixer_red);
        SETTINGS_COPY(CHANNELMIXER_GREEN, channelmixer_green);
        SETTINGS_COPY(CHANNELMIXER_BLUE, channelmixer_blue);

Modified: trunk/librawstudio/rs-settings.h
===================================================================
--- trunk/librawstudio/rs-settings.h    2009-11-15 19:15:44 UTC (rev 2739)
+++ trunk/librawstudio/rs-settings.h    2009-11-15 19:58:19 UTC (rev 2740)
@@ -51,6 +51,8 @@
        MASK_CHANNELMIXER_GREEN = (1<<13),
        MASK_CHANNELMIXER_BLUE = (1<<14),
        MASK_CHANNELMIXER = MASK_CHANNELMIXER_RED | MASK_CHANNELMIXER_GREEN | 
MASK_CHANNELMIXER_BLUE,
+       MASK_VIGNETTING_K2  = (1<<15),
+       MASK_VIGNETTING     = MASK_VIGNETTING_K2,
        MASK_ALL            = 0x00ffffff,
 } RSSettingsMask;
 
@@ -69,6 +71,7 @@
        gfloat denoise_chroma;
        gfloat tca_kr;
        gfloat tca_kb;
+       gfloat vignetting_k2;
        gfloat channelmixer_red;
        gfloat channelmixer_green;
        gfloat channelmixer_blue;

Modified: trunk/plugins/lensfun/lensfun.c
===================================================================
--- trunk/plugins/lensfun/lensfun.c     2009-11-15 19:15:44 UTC (rev 2739)
+++ trunk/plugins/lensfun/lensfun.c     2009-11-15 19:58:19 UTC (rev 2740)
@@ -42,6 +42,9 @@
        gfloat aperture;
        gfloat tca_kr;
        gfloat tca_kb;
+       gfloat vignetting_k1;
+       gfloat vignetting_k2;
+       gfloat vignetting_k3;
 };
 
 struct _RSLensfunClass {
@@ -61,6 +64,9 @@
        PROP_APERTURE,
        PROP_TCA_KR,
        PROP_TCA_KB,
+       PROP_VIGNETTING_K1,
+       PROP_VIGNETTING_K2,
+       PROP_VIGNETTING_K3,
 };
 
 static void get_property (GObject *object, guint property_id, GValue *value, 
GParamSpec *pspec);
@@ -133,6 +139,21 @@
                        "tca_kb", "tca_kb", "tca_kb",
                        0.9, 1.1, 1.0, G_PARAM_READWRITE)
        );
+       g_object_class_install_property(object_class,
+               PROP_VIGNETTING_K1, g_param_spec_float(
+                       "vignetting_k1", "vignetting_k1", "vignetting_k1",
+                       -1, 2, 0.0, G_PARAM_READWRITE)
+       );
+       g_object_class_install_property(object_class,
+               PROP_VIGNETTING_K2, g_param_spec_float(
+                       "vignetting_k2", "vignetting_k2", "vignetting_k2",
+                       -1, 2, 0.0, G_PARAM_READWRITE)
+       );
+       g_object_class_install_property(object_class,
+               PROP_VIGNETTING_K3, g_param_spec_float(
+                       "vignetting_k3", "vignetting_k3", "vignetting_k3",
+                       -1, 2, 0.0, G_PARAM_READWRITE)
+       );
 
        filter_class->name = "Lensfun filter";
        filter_class->get_image = get_image;
@@ -150,6 +171,9 @@
        lensfun->aperture = 5.6;
        lensfun->tca_kr = 1.0;
        lensfun->tca_kb = 1.0;
+       lensfun->vignetting_k1 = 0.0;
+       lensfun->vignetting_k2 = 0.0;
+       lensfun->vignetting_k3 = 0.0;
 }
 
 static void
@@ -186,6 +210,15 @@
                case PROP_TCA_KB:
                        g_value_set_float(value, lensfun->tca_kb);
                        break;
+               case PROP_VIGNETTING_K1:
+                       g_value_set_float(value, lensfun->vignetting_k1);
+                       break;
+               case PROP_VIGNETTING_K2:
+                       g_value_set_float(value, lensfun->vignetting_k2);
+                       break;
+               case PROP_VIGNETTING_K3:
+                       g_value_set_float(value, lensfun->vignetting_k3);
+                       break;
                default:
                        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, 
pspec);
        }
@@ -225,6 +258,18 @@
                        lensfun->tca_kb = g_value_get_float(value);
                        rs_filter_changed(RS_FILTER(lensfun), 
RS_FILTER_CHANGED_PIXELDATA);
                        break;
+               case PROP_VIGNETTING_K1:
+                       lensfun->vignetting_k1 = g_value_get_float(value);
+                       rs_filter_changed(RS_FILTER(lensfun), 
RS_FILTER_CHANGED_PIXELDATA);
+                       break;
+               case PROP_VIGNETTING_K2:
+                       lensfun->vignetting_k2 = g_value_get_float(value);
+                       rs_filter_changed(RS_FILTER(lensfun), 
RS_FILTER_CHANGED_PIXELDATA);
+                       break;
+               case PROP_VIGNETTING_K3:
+                       lensfun->vignetting_k3 = g_value_get_float(value);
+                       rs_filter_changed(RS_FILTER(lensfun), 
RS_FILTER_CHANGED_PIXELDATA);
+                       break;
                default:
                        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, 
pspec);
        }
@@ -387,15 +432,29 @@
                        lf_get_tca_model_desc (tca.Model, &details, &params);
                        tca.Terms[0] = lensfun->tca_kr;
                        tca.Terms[1] = lensfun->tca_kb;
-                       lf_lens_add_calib_tca((lfLens *) lens, (lfLensCalibTCA 
*) &tca.Model);
+                       lf_lens_add_calib_tca((lfLens *) lens, (lfLensCalibTCA 
*) &tca);
                }
 
+               if (lensfun->vignetting_k2 != 0.0 )
+               {
+                       /* Set vignetting */
+                       lfLensCalibVignetting vignetting;
+                       vignetting.Model = LF_VIGNETTING_MODEL_PA;
+                       vignetting.Distance = 1.0;
+                       vignetting.Focal = lensfun->focal;
+                       vignetting.Aperture = lensfun->aperture;
+                       vignetting.Terms[0] = lensfun->vignetting_k1;
+                       vignetting.Terms[1] = lensfun->vignetting_k2;
+                       vignetting.Terms[2] = lensfun->vignetting_k3;
+                       lf_lens_add_calib_vignetting((lfLens *) lens, 
&vignetting);
+               }
+
                lfModifier *mod = lf_modifier_new (lens, 
cameras[0]->CropFactor, input->w, input->h);
                effective_flags = lf_modifier_initialize (mod, lens,
                        LF_PF_U16, /* lfPixelFormat */
                        lensfun->focal, /* focal */
                        lensfun->aperture, /* aperture */
-                       0.0, /* distance */
+                       1.0, /* distance */
                        1.0, /* scale */
                        LF_UNKNOWN, /* lfLensType targeom, */ /* FIXME: ? */
                        LF_MODIFY_ALL, /* flags */ /* FIXME: ? */
@@ -418,6 +477,15 @@
                g_debug("Effective flags:%s", flags->str);
                g_string_free(flags, TRUE);
 
+               /* Do lensfun vignetting */
+               if (effective_flags & LF_MODIFY_VIGNETTING)
+               {
+                       lf_modifier_apply_color_modification (
+                               mod, input->pixels, 0.0, 0.0, input->w, 
input->h,
+                               LF_CR_4 (RED, GREEN, BLUE, UNKNOWN),
+                               input->rowstride*2);
+               }
+                       
                if (effective_flags > 0)
                {
                        guint y_offset, y_per_thread, threaded_h;

Modified: trunk/src/application.c
===================================================================
--- trunk/src/application.c     2009-11-15 19:15:44 UTC (rev 2739)
+++ trunk/src/application.c     2009-11-15 19:58:19 UTC (rev 2740)
@@ -87,6 +87,7 @@
                                "aperture", meta->aperture,
                                "tca_kr", 
rs->photo->settings[rs->current_setting]->tca_kr,
                                "tca_kb", 
rs->photo->settings[rs->current_setting]->tca_kb,
+                               "vignetting_k2", 
rs->photo->settings[rs->current_setting]->vignetting_k2,
                                NULL);
                        g_object_unref(lens);
                }

Modified: trunk/src/rs-actions.c
===================================================================
--- trunk/src/rs-actions.c      2009-11-15 19:15:44 UTC (rev 2739)
+++ trunk/src/rs-actions.c      2009-11-15 19:58:19 UTC (rev 2740)
@@ -338,7 +338,7 @@
        gint mask = 0xffffff; /* Should be RSSettingsMask, is gint to satisfy 
rs_conf_get_integer() */
 
        GtkWidget *dialog, *cb_box;
-       GtkWidget *cb_exposure, *cb_saturation, *cb_hue, *cb_contrast, 
*cb_whitebalance, *cb_curve, *cb_sharpen, *cb_denoise_luma, *cb_denoise_chroma, 
*cb_channelmixer, *cb_tca;
+       GtkWidget *cb_exposure, *cb_saturation, *cb_hue, *cb_contrast, 
*cb_whitebalance, *cb_curve, *cb_sharpen, *cb_denoise_luma, *cb_denoise_chroma, 
*cb_channelmixer, *cb_tca, *cb_vignetting;
 
        if (rs->settings_buffer)
        {
@@ -353,6 +353,7 @@
                cb_denoise_chroma = gtk_check_button_new_with_label (_("Color 
denoise"));
                cb_channelmixer = gtk_check_button_new_with_label (_("Channel 
mixer"));
                cb_tca = gtk_check_button_new_with_label (_("TCA"));
+               cb_vignetting = gtk_check_button_new_with_label 
(_("Vignetting"));
                cb_curve = gtk_check_button_new_with_label (_("Curve"));
 
                rs_conf_get_integer(CONF_PASTE_MASK, &mask);
@@ -377,6 +378,8 @@
                        
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_channelmixer), TRUE);
                if (mask & MASK_TCA)
                        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_tca), 
TRUE);
+               if (mask & MASK_VIGNETTING)
+                       
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_vignetting), TRUE);
                if (mask & MASK_CURVE)
                        
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_curve), TRUE);
 
@@ -392,6 +395,7 @@
                gtk_box_pack_start (GTK_BOX (cb_box), cb_denoise_chroma, FALSE, 
TRUE, 0);
                gtk_box_pack_start (GTK_BOX (cb_box), cb_channelmixer, FALSE, 
TRUE, 0);
                gtk_box_pack_start (GTK_BOX (cb_box), cb_tca, FALSE, TRUE, 0);
+               gtk_box_pack_start (GTK_BOX (cb_box), cb_vignetting, FALSE, 
TRUE, 0);
                gtk_box_pack_start (GTK_BOX (cb_box), cb_curve, FALSE, TRUE, 0);
 
                dialog = gui_dialog_make_from_widget(GTK_STOCK_DIALOG_QUESTION, 
_("Select settings to paste"), cb_box);
@@ -425,6 +429,8 @@
                                mask |= MASK_CHANNELMIXER;
                        if (GTK_TOGGLE_BUTTON(cb_tca)->active)
                                mask |= MASK_TCA;
+                       if (GTK_TOGGLE_BUTTON(cb_vignetting)->active)
+                               mask |= MASK_VIGNETTING;
                        if (GTK_TOGGLE_BUTTON(cb_curve)->active)
                                mask |= MASK_CURVE;
                        rs_conf_set_integer(CONF_PASTE_MASK, mask);

Modified: trunk/src/rs-cache.c
===================================================================
--- trunk/src/rs-cache.c        2009-11-15 19:15:44 UTC (rev 2739)
+++ trunk/src/rs-cache.c        2009-11-15 19:58:19 UTC (rev 2740)
@@ -126,6 +126,9 @@
                if (mask & MASK_TCA_KB)
                        xmlTextWriterWriteFormatElement(writer, BAD_CAST 
"tca_kb", "%f",
                                photo->settings[id]->tca_kb);
+               if (mask & MASK_VIGNETTING_K2)
+                       xmlTextWriterWriteFormatElement(writer, BAD_CAST 
"vignetting_k2", "%f",
+                               photo->settings[id]->vignetting_k2);
                if (mask & MASK_CURVE && photo->settings[id]->curve_nknots > 0)
                {
                        xmlTextWriterStartElement(writer, BAD_CAST "curve");
@@ -243,6 +246,13 @@
                        rss->tca_kb =  rs_atof((gchar *) val);
                        xmlFree(val);
                }
+               else if ((!xmlStrcmp(cur->name, BAD_CAST "vignetting_k2")))
+               {
+                       mask |= MASK_VIGNETTING_K2;
+                       val = xmlNodeListGetString(doc, cur->xmlChildrenNode, 
1);
+                       rss->vignetting_k2 =  rs_atof((gchar *) val);
+                       xmlFree(val);
+               }
                else if ((!xmlStrcmp(cur->name, BAD_CAST "curve")))
                {
                        gchar **vals;

Modified: trunk/src/rs-preview-widget.c
===================================================================
--- trunk/src/rs-preview-widget.c       2009-11-15 19:15:44 UTC (rev 2739)
+++ trunk/src/rs-preview-widget.c       2009-11-15 19:58:19 UTC (rev 2740)
@@ -2202,6 +2202,12 @@
                                
g_object_get(preview->photo->settings[preview->snapshot[view]], "tca_kb", &f, 
NULL);
                                g_object_set(preview->filter_lensfun[view], 
"tca_kb", (gfloat) f, NULL);
                        }
+                       if (mask & MASK_VIGNETTING_K2)
+                       {
+                               gfloat f = 1.0;
+                               
g_object_get(preview->photo->settings[preview->snapshot[view]], 
"vignetting_k2", &f, NULL);
+                               g_object_set(preview->filter_lensfun[view], 
"vignetting_k2", (gfloat) f, NULL);
+                       }
                }
        }
 }

Modified: trunk/src/rs-toolbox.c
===================================================================
--- trunk/src/rs-toolbox.c      2009-11-15 19:15:44 UTC (rev 2739)
+++ trunk/src/rs-toolbox.c      2009-11-15 19:58:19 UTC (rev 2740)
@@ -59,11 +59,12 @@
 };
 #define NCHANNELMIXER (3)
 
-const static BasicSettings tca[] = {
-       { "tca_kr",         0.00001 },
-       { "tca_kb",         0.00001 },
+const static BasicSettings lens[] = {
+       { "tca_kr",         0.001 },
+       { "tca_kb",         0.001 },
+       { "vignetting_k2",  0.01 },
 };
-#define NTCA (2)
+#define NLENS (3)
 
 struct _RSToolbox {
        GtkScrolledWindow parent;
@@ -71,7 +72,7 @@
        GtkBox *toolbox;
        GtkRange *ranges[3][NBASICS];
        GtkRange *channelmixer[3][NCHANNELMIXER];
-       GtkRange *tca[3][NTCA];
+       GtkRange *lens[3][NLENS];
        RSSettings *settings[3];
        GtkWidget *curve[3];
 
@@ -622,20 +623,20 @@
 new_snapshot_page(RSToolbox *toolbox, const gint snapshot)
 {
        GtkWidget *vbox = gtk_vbox_new(FALSE, 1);
-       GtkTable *table, *channelmixertable, *tcatable;
+       GtkTable *table, *channelmixertable, *lenstable;
        gint row;
 
        table = GTK_TABLE(gtk_table_new(NBASICS, 5, FALSE));
        channelmixertable = GTK_TABLE(gtk_table_new(NCHANNELMIXER, 5, FALSE));
-       tcatable = GTK_TABLE(gtk_table_new(NTCA, 5, FALSE));
+       lenstable = GTK_TABLE(gtk_table_new(NLENS, 5, FALSE));
 
        /* Add basic sliders */
        for(row=0;row<NBASICS;row++)
                toolbox->ranges[snapshot][row] = basic_slider(toolbox, 
snapshot, table, row, &basic[row]);
        for(row=0;row<NCHANNELMIXER;row++)
                toolbox->channelmixer[snapshot][row] = basic_slider(toolbox, 
snapshot, channelmixertable, row, &channelmixer[row]);
-       for(row=0;row<NTCA;row++)
-               toolbox->tca[snapshot][row] = basic_slider(toolbox, snapshot, 
tcatable, row, &tca[row]);
+       for(row=0;row<NLENS;row++)
+               toolbox->lens[snapshot][row] = basic_slider(toolbox, snapshot, 
lenstable, row, &lens[row]);
 
        /* Add curve editor */
        toolbox->curve[snapshot] = rs_curve_widget_new();
@@ -646,7 +647,7 @@
        /* Pack everything nice */
        gtk_box_pack_start(GTK_BOX(vbox), gui_box(_("Basic"), 
GTK_WIDGET(table), "show_basic", TRUE), FALSE, FALSE, 0);
        gtk_box_pack_start(GTK_BOX(vbox), gui_box(_("Channel Mixer"), 
GTK_WIDGET(channelmixertable), "show_channelmixer", TRUE), FALSE, FALSE, 0);
-       gtk_box_pack_start(GTK_BOX(vbox), gui_box(_("TCA"), 
GTK_WIDGET(tcatable), "show_tca", TRUE), FALSE, FALSE, 0);
+       gtk_box_pack_start(GTK_BOX(vbox), gui_box(_("Lens corrections"), 
GTK_WIDGET(lenstable), "show_lens", TRUE), FALSE, FALSE, 0);
        gtk_box_pack_start(GTK_BOX(vbox), gui_box(_("Curve"), 
toolbox->curve[snapshot], "show_curve", TRUE), FALSE, FALSE, 0);
 
        return vbox;
@@ -772,9 +773,9 @@
                {
                        
gtk_widget_set_sensitive(GTK_WIDGET(toolbox->channelmixer[snapshot][i]), FALSE);
                }
-               for(i=0;i<NTCA;i++)
+               for(i=0;i<NLENS;i++)
                {
-                       
gtk_widget_set_sensitive(GTK_WIDGET(toolbox->tca[snapshot][i]), FALSE);
+                       
gtk_widget_set_sensitive(GTK_WIDGET(toolbox->lens[snapshot][i]), FALSE);
                }
                
rs_curve_widget_reset(RS_CURVE_WIDGET(toolbox->curve[snapshot]));
                
rs_curve_widget_add_knot(RS_CURVE_WIDGET(toolbox->curve[snapshot]), 0.0,0.0);
@@ -809,13 +810,13 @@
                                
gtk_range_set_value(toolbox->channelmixer[snapshot][i], value);
                        }
 
-               /* Update tca */
-               for(i=0;i<NTCA;i++)
+               /* Update lens */
+               for(i=0;i<NLENS;i++)
                        if (mask)
                        {
                                gfloat value;
-                               
g_object_get(toolbox->photo->settings[snapshot], tca[i].property_name, &value, 
NULL);
-                               gtk_range_set_value(toolbox->tca[snapshot][i], 
value);
+                               
g_object_get(toolbox->photo->settings[snapshot], lens[i].property_name, &value, 
NULL);
+                               gtk_range_set_value(toolbox->lens[snapshot][i], 
value);
                        }
 
                /* Update curve */
@@ -862,8 +863,8 @@
                                
gtk_widget_set_sensitive(GTK_WIDGET(toolbox->ranges[snapshot][i]), TRUE);
                        for(i=0;i<NCHANNELMIXER;i++)
                                
gtk_widget_set_sensitive(GTK_WIDGET(toolbox->channelmixer[snapshot][i]), TRUE);
-                       for(i=0;i<NTCA;i++)
-                               
gtk_widget_set_sensitive(GTK_WIDGET(toolbox->tca[snapshot][i]), TRUE);
+                       for(i=0;i<NLENS;i++)
+                               
gtk_widget_set_sensitive(GTK_WIDGET(toolbox->lens[snapshot][i]), TRUE);
                }
                photo_spatial_changed(toolbox->photo, toolbox);
        }


_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit

Reply via email to