[Rawstudio-commit] r3494 - trunk/src

Klaus Post klauspost at gmail.com
Thu Aug 19 19:07:25 CEST 2010


Author: post
Date: 2010-08-19 19:07:25 +0200 (Thu, 19 Aug 2010)
New Revision: 3494

Modified:
   trunk/src/application.c
   trunk/src/application.h
   trunk/src/rs-actions.c
Log:
For quick export, use already loaded image. Much faster, uses far less RAM.
Also fixed DCP profile/WB not being properly applied to Quick Export.

Modified: trunk/src/application.c
===================================================================
--- trunk/src/application.c	2010-08-18 16:00:50 UTC (rev 3493)
+++ trunk/src/application.c	2010-08-19 17:07:25 UTC (rev 3494)
@@ -161,75 +161,33 @@
 }
 
 gboolean
-rs_photo_save(RS_PHOTO *photo, RSOutput *output, gint width, gint height, gboolean keep_aspect, gdouble scale, gint snapshot)
+rs_photo_save(RS_PHOTO *photo, RSFilter *prior_to_resample, RSOutput *output, gint width, gint height, gboolean keep_aspect, gdouble scale, gint snapshot)
 {
 	gfloat actual_scale;
 
 	g_assert(RS_IS_PHOTO(photo));
+	g_assert(RS_IS_FILTER(prior_to_resample));
 	g_assert(RS_IS_OUTPUT(output));
 
-	RSFilter *finput = rs_filter_new("RSInputImage16", NULL);
-	RSFilter *fdemosaic = rs_filter_new("RSDemosaic", finput);
-	RSFilter *flensfun = rs_filter_new("RSLensfun", fdemosaic);
-	RSFilter *ftransform_input = rs_filter_new("RSColorspaceTransform", flensfun);
-	RSFilter *frotate = rs_filter_new("RSRotate",ftransform_input) ;
-	RSFilter *fcrop = rs_filter_new("RSCrop", frotate);
-	RSFilter *fresample= rs_filter_new("RSResample", fcrop);
+	RSFilter *fresample= rs_filter_new("RSResample", prior_to_resample);
 	RSFilter *fdcp = rs_filter_new("RSDcp", fresample);
 	RSFilter *fdenoise= rs_filter_new("RSDenoise", fdcp);
 	RSFilter *ftransform_display = rs_filter_new("RSColorspaceTransform", fdenoise);
 	RSFilter *fend = ftransform_display;
 
-	rs_filter_set_recursive(fend,
-		"image", photo->input_response,
-		"filename", photo->filename,
-		"angle", photo->angle,
-		"orientation", photo->orientation,
-		"rectangle", photo->crop,
-		"settings", photo->settings[snapshot],
-		NULL);
 	gint input_width;
-	rs_filter_get_size_simple(finput, RS_FILTER_REQUEST_QUICK, &input_width, NULL);
+	rs_filter_get_size_simple(prior_to_resample, RS_FILTER_REQUEST_QUICK, &input_width, NULL);
 	actual_scale = ((gdouble) width / (gdouble) input_width);
 	if (0 < width && 0 < height) /* We only wan't to set width and height if they are not -1 */
 		rs_filter_set_recursive(fend, "width", width, "height", height, NULL);
 
-	/* Look up lens */
-	RSMetadata *meta = rs_photo_get_metadata(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(fend,
-			"make", meta->make_ascii,
-			"model", meta->model_ascii,
-			"lens", lens,
-			"focal", (gfloat) meta->focallength,
-			"aperture", meta->aperture,
-			"tca_kr", photo->settings[snapshot]->tca_kr,
-			"tca_kb", photo->settings[snapshot]->tca_kb,
-			"vignetting", photo->settings[snapshot]->vignetting,
-			NULL);
-		g_object_unref(lens);
-	}
-
-	g_object_unref(meta);
-
-	/* Set input profile */
+	/* Set dcp profile */
 	RSDcpFile *dcp_profile  = rs_photo_get_dcp_profile(photo);
-	RSIccProfile *icc_profile  = rs_photo_get_icc_profile(photo);
-
 	if (dcp_profile != NULL)
 	{
-		g_object_set(fdcp, "profile", dcp_profile, NULL);
+		g_object_set(fdcp, "profile", dcp_profile, "use-profile", TRUE, NULL);
 	}
-	if (icc_profile != NULL)
-	{
-		RSColorSpace *icc_space = rs_color_space_icc_new_from_icc(icc_profile);
-		g_object_set(finput, "color-space", icc_space, NULL);
-	}
+	g_object_set(fdcp, "settings", photo->settings[snapshot], NULL);
 
 	/* actually save */
 	gboolean exported = rs_output_execute(output, fend);
@@ -240,13 +198,7 @@
 	/* Set the exported flag */
 	rs_store_set_flags(NULL, photo->filename, NULL, NULL, &photo->exported);
 
-	g_object_unref(finput);
-	g_object_unref(flensfun);
-	g_object_unref(ftransform_input);
 	g_object_unref(ftransform_display);
-	g_object_unref(fdemosaic);
-	g_object_unref(frotate);
-	g_object_unref(fcrop);
 	g_object_unref(fresample);
 	g_object_unref(fdenoise);
 	g_object_unref(fdcp);

Modified: trunk/src/application.h
===================================================================
--- trunk/src/application.h	2010-08-18 16:00:50 UTC (rev 3493)
+++ trunk/src/application.h	2010-08-19 17:07:25 UTC (rev 3494)
@@ -82,7 +82,7 @@
 	RSFilter *filter_end;
 } RS_BLOB;
 
-gboolean rs_photo_save(RS_PHOTO *photo, RSOutput *output,
+gboolean rs_photo_save(RS_PHOTO *photo, RSFilter *prior_to_resample, RSOutput *output,
 	gint width, gint height, gboolean keep_aspect, gdouble scale, gint snapshot);
 RS_BLOB *rs_new();
 void rs_free(RS_BLOB *rs);

Modified: trunk/src/rs-actions.c
===================================================================
--- trunk/src/rs-actions.c	2010-08-18 16:00:50 UTC (rev 3493)
+++ trunk/src/rs-actions.c	2010-08-19 17:07:25 UTC (rev 3494)
@@ -240,7 +240,7 @@
 		g_object_set(output, "filename", parsed_filename, NULL);
 		rs_output_set_from_conf(output, "quick-export");
 
-		if (rs_photo_save(rs->photo, output, -1, -1, FALSE, 1.0, rs->current_setting))
+		if (rs_photo_save(rs->photo, rs->filter_end, output, -1, -1, FALSE, 1.0, rs->current_setting))
 		{
 			gchar *status = g_strdup_printf("%s (%s)", _("File exported"), parsed_filename);
 			gui_status_notify(status);




More information about the Rawstudio-commit mailing list