Author: post
Date: 2010-01-19 20:13:42 +0100 (Tue, 19 Jan 2010)
New Revision: 3038

Modified:
   branches/rawstudio-ng-color/src/rs-save-dialog.c
   branches/rawstudio-ng-color/src/rs-save-dialog.h
Log:
Update "Export As..." to use new filter chain.

Modified: branches/rawstudio-ng-color/src/rs-save-dialog.c
===================================================================
--- branches/rawstudio-ng-color/src/rs-save-dialog.c    2010-01-19 19:11:25 UTC 
(rev 3037)
+++ branches/rawstudio-ng-color/src/rs-save-dialog.c    2010-01-19 19:13:42 UTC 
(rev 3038)
@@ -48,13 +48,16 @@
 
                gui_confbox_destroy(dialog->type_box);
 
-               g_object_unref(dialog->filter_input);
-               g_object_unref(dialog->filter_demosaic);
-               g_object_unref(dialog->filter_rotate);
-               g_object_unref(dialog->filter_crop);
-               g_object_unref(dialog->filter_resample);
-               g_object_unref(dialog->filter_denoise);
-               g_object_unref(dialog->filter_basic_render);
+               g_object_unref(dialog->finput);
+               g_object_unref(dialog->fdemosaic);
+               g_object_unref(dialog->flensfun);
+               g_object_unref(dialog->ftransform_input);
+               g_object_unref(dialog->frotate);
+               g_object_unref(dialog->fcrop);
+               g_object_unref(dialog->fresample);
+               g_object_unref(dialog->fdcp);
+               g_object_unref(dialog->fdenoise);
+               g_object_unref(dialog->ftransform_display);
 
                if (dialog->photo)
                        g_object_unref(dialog->photo);
@@ -146,18 +149,20 @@
        gui_confbox_load_conf(dialog->type_box, "RSJpegfile");
 
        /* Setup our filter chain for saving */
-       dialog->filter_input = rs_filter_new("RSInputImage16", NULL);
-       dialog->filter_demosaic = rs_filter_new("RSDemosaic", 
dialog->filter_input);
-       dialog->filter_rotate = rs_filter_new("RSRotate", 
dialog->filter_demosaic);
-       dialog->filter_crop = rs_filter_new("RSCrop", dialog->filter_rotate);
-       dialog->filter_resample = rs_filter_new("RSResample", 
dialog->filter_crop);
-       dialog->filter_denoise = rs_filter_new("RSDenoise", 
dialog->filter_resample);
-       dialog->filter_basic_render = rs_filter_new("RSBasicRender", 
dialog->filter_denoise);
-       dialog->filter_end = dialog->filter_basic_render;
+       dialog->finput = rs_filter_new("RSInputImage16", NULL);
+       dialog->fdemosaic = rs_filter_new("RSDemosaic", dialog->finput);
+       dialog->flensfun = rs_filter_new("RSLensfun", dialog->fdemosaic);
+       dialog->ftransform_input = rs_filter_new("RSColorspaceTransform", 
dialog->flensfun);
+       dialog->frotate = rs_filter_new("RSRotate",dialog->ftransform_input) ;
+       dialog->fcrop = rs_filter_new("RSCrop", dialog->frotate);
+       dialog->fresample= rs_filter_new("RSResample", dialog->fcrop);
+       dialog->fdcp = rs_filter_new("RSDcp", dialog->fresample);
+       dialog->fdenoise= rs_filter_new("RSDenoise", dialog->fdcp);
+       dialog->ftransform_display = rs_filter_new("RSColorspaceTransform", 
dialog->fdenoise);
+       dialog->fend = dialog->ftransform_display;
 
        RSIccProfile *profile;
        gchar *filename;
-
        /* Set input ICC profile */
        profile = NULL;
        filename = rs_conf_get_cms_profile(CMS_PROFILE_INPUT);
@@ -168,8 +173,8 @@
        }
        if (!profile)
                profile = rs_icc_profile_new_from_file(PACKAGE_DATA_DIR "/" 
PACKAGE "/profiles/generic_camera_profile.icc");
-       g_object_set(dialog->filter_input, "icc-profile", profile, NULL);
-       g_object_unref(profile);
+//     g_object_set(dialog->filter_input, "icc-profile", profile, NULL);
+//     g_object_unref(profile);
 
        /* Set output ICC profile */
        profile = NULL;
@@ -181,7 +186,7 @@
        }
        if (!profile)
                profile = rs_icc_profile_new_from_file(PACKAGE_DATA_DIR "/" 
PACKAGE "/profiles/sRGB.icc");
-       g_object_set(dialog->filter_basic_render, "icc-profile", profile, NULL);
+//     g_object_set(dialog->filter_basic_render, "icc-profile", profile, NULL);
        g_object_unref(profile);
 }
 
@@ -198,7 +203,7 @@
        g_assert(RS_IS_PHOTO(photo));
 
        /* This should be enough to calculate "original" size */
-       rs_filter_set_recursive(dialog->filter_end, 
+       rs_filter_set_recursive(dialog->fend, 
                "image", photo->input,
                "angle", photo->angle,
                "orientation", photo->orientation,
@@ -210,8 +215,8 @@
                g_object_unref(dialog->photo);
        dialog->photo = g_object_ref(photo);
 
-       dialog->w_original = rs_filter_get_width(dialog->filter_crop);
-       dialog->h_original = rs_filter_get_height(dialog->filter_crop);
+       dialog->w_original = rs_filter_get_width(dialog->fcrop);
+       dialog->h_original = rs_filter_get_height(dialog->fcrop);
 
        gtk_spin_button_set_value(dialog->w_spin, dialog->w_original);
        gtk_spin_button_set_value(dialog->h_spin, dialog->h_original);
@@ -248,16 +253,46 @@
        rs_job_update_description(slot, description);
        g_free(description);
 
-       actual_scale = ((gdouble) dialog->save_width / (gdouble) 
rs_filter_get_width(dialog->filter_crop));
+       actual_scale = ((gdouble) dialog->save_width / (gdouble) 
rs_filter_get_width(dialog->fcrop));
 
-       rs_filter_set_recursive(dialog->filter_end,
+       /* Set DCP profile */
+       RSDcpFile *dcp_profile  = rs_photo_get_dcp_profile(dialog->photo);
+       if (dcp_profile != NULL)
+       {
+               g_object_set(dialog->fdcp, "profile", dcp_profile, NULL);
+       }
+
+       /* Look up lens */
+       RSMetadata *meta = rs_photo_get_metadata(dialog->photo);
+       RSLensDb *lens_db = rs_lens_db_get_default();
+       RSLens *lens = rs_lens_db_lookup_from_metadata(lens_db, meta);
+
+       /* Apply lens information to RSLensfun */
+       if (lens)
+       {
+               rs_filter_set_recursive(dialog->fend,
+                       "make", meta->make_ascii,
+                       "model", meta->model_ascii,
+                       "lens", lens,
+                       "focal", (gfloat) meta->focallength,
+                       "aperture", meta->aperture,
+                       "tca_kr", 
dialog->photo->settings[dialog->snapshot]->tca_kr,
+                       "tca_kb", 
dialog->photo->settings[dialog->snapshot]->tca_kb,
+                       "vignetting_k2", 
dialog->photo->settings[dialog->snapshot]->vignetting_k2,
+                       NULL);
+               g_object_unref(lens);
+       }
+
+       g_object_unref(meta);
+
+       rs_filter_set_recursive(dialog->fend,
                "width", dialog->save_width,
                "height", dialog->save_height,
                "settings", dialog->photo->settings[dialog->snapshot],
                NULL);
-
+       
        g_object_set(dialog->output, "filename", 
gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog->chooser)), NULL);
-       rs_output_execute(dialog->output, dialog->filter_basic_render);
+       rs_output_execute(dialog->output, dialog->fend);
        rs_job_update_progress(slot, 0.75);
 
        gdk_threads_enter();

Modified: branches/rawstudio-ng-color/src/rs-save-dialog.h
===================================================================
--- branches/rawstudio-ng-color/src/rs-save-dialog.h    2010-01-19 19:11:25 UTC 
(rev 3037)
+++ branches/rawstudio-ng-color/src/rs-save-dialog.h    2010-01-19 19:13:42 UTC 
(rev 3038)
@@ -53,16 +53,18 @@
        gint save_height;
 
        gboolean dispose_has_run;
+       RSFilter *finput;
+       RSFilter *fdemosaic;
+       RSFilter *flensfun;
+       RSFilter *ftransform_input;
+       RSFilter *frotate;
+       RSFilter *fcrop;
+       RSFilter *fresample;
+       RSFilter *fdcp;
+       RSFilter *fdenoise;
+       RSFilter *ftransform_display;
+       RSFilter *fend;
 
-       RSFilter *filter_input;
-       RSFilter *filter_demosaic;
-       RSFilter *filter_rotate;
-       RSFilter *filter_crop;
-       RSFilter *filter_resample;
-       RSFilter *filter_denoise;
-       RSFilter *filter_basic_render;
-       RSFilter *filter_end;
-
        RS_PHOTO *photo;
        gint snapshot;
 } RSSaveDialog;


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

Reply via email to