[Rawstudio-commit] r2746 - trunk/plugins/lensfun

Anders Kvist anders at kvistmail.dk
Mon Nov 16 17:31:42 CET 2009


Author: akv
Date: 2009-11-16 17:31:42 +0100 (Mon, 16 Nov 2009)
New Revision: 2746

Modified:
   trunk/plugins/lensfun/lensfun.c
Log:
Only initializing camera and lens on first request to get_image() - marking as dirty when new camera/lens is set.

Modified: trunk/plugins/lensfun/lensfun.c
===================================================================
--- trunk/plugins/lensfun/lensfun.c	2009-11-16 16:20:02 UTC (rev 2745)
+++ trunk/plugins/lensfun/lensfun.c	2009-11-16 16:31:42 UTC (rev 2746)
@@ -47,6 +47,11 @@
 	gfloat vignetting_k1;
 	gfloat vignetting_k2;
 	gfloat vignetting_k3;
+
+	const lfLens *selected_lens;
+	const lfCamera *selected_camera;
+
+	gboolean DIRTY;
 };
 
 struct _RSLensfunClass {
@@ -240,15 +245,18 @@
 		case PROP_MAKE:
 			g_free(lensfun->make);
 			lensfun->make = g_value_dup_string(value);
+			lensfun->DIRTY = TRUE;
 			break;
 		case PROP_MODEL:
 			g_free(lensfun->model);
 			lensfun->model = g_value_dup_string(value);
+			lensfun->DIRTY = TRUE;
 			break;
 		case PROP_LENS:
 			if (lensfun->lens)
 				g_object_unref(lensfun->lens);
 			lensfun->lens = g_value_dup_object(value);
+			lensfun->DIRTY = TRUE;
 			break;
 		case PROP_FOCAL:
 			lensfun->focal = g_value_get_float(value);
@@ -359,69 +367,80 @@
 		return response;
 	}
 
-	const lfCamera **cameras = NULL;
-	if (lensfun->make && lensfun->model)
-		cameras = lf_db_find_cameras(lensfun->ldb, lensfun->make, lensfun->model);
-
-	if (!cameras)
+	if(lensfun->DIRTY)
 	{
-		g_debug("camera not found (make: \"%s\" model: \"%s\")", lensfun->make, lensfun->model);
-		rs_filter_response_set_image(response, input);
-		g_object_unref(input);
-		return response;
-	}
 
-	for (i = 0; cameras [i]; i++)
-	{
-		g_print ("Camera: %s / %s %s%s%s\n",
-		lf_mlstr_get (cameras [i]->Maker),
-		lf_mlstr_get (cameras [i]->Model),
-		cameras [i]->Variant ? "(" : "",
-		cameras [i]->Variant ? lf_mlstr_get (cameras [i]->Variant) : "",
-		cameras [i]->Variant ? ")" : "");
-		g_print ("\tMount: %s\n", lf_db_mount_name (lensfun->ldb, cameras [i]->Mount));
-		g_print ("\tCrop factor: %g\n", cameras [i]->CropFactor);
-	}
+		const lfCamera **cameras = NULL;
+		if (lensfun->make && lensfun->model)
+			cameras = lf_db_find_cameras(lensfun->ldb, lensfun->make, lensfun->model);
 
-	const lfLens **lenses;
+		if (!cameras)
+		{
+			g_debug("camera not found (make: \"%s\" model: \"%s\")", lensfun->make, lensfun->model);
+			rs_filter_response_set_image(response, input);
+			g_object_unref(input);
+			return response;
+		}
 
-	if (lensfun->lens)
-	{
-		model = rs_lens_get_lensfun_model(lensfun->lens);
-		if (!model)
-			model = rs_lens_get_description(lensfun->lens);
-		make = rs_lens_get_lensfun_make(lensfun->lens);
-	}
+		for (i = 0; cameras [i]; i++)
+		{
+			g_print ("Camera: %s / %s %s%s%s\n",
+				 lf_mlstr_get (cameras [i]->Maker),
+				 lf_mlstr_get (cameras [i]->Model),
+				 cameras [i]->Variant ? "(" : "",
+				 cameras [i]->Variant ? lf_mlstr_get (cameras [i]->Variant) : "",
+				 cameras [i]->Variant ? ")" : "");
+			g_print ("\tMount: %s\n", lf_db_mount_name (lensfun->ldb, cameras [i]->Mount));
+			g_print ("\tCrop factor: %g\n", cameras [i]->CropFactor);
+		}
 
-	lenses = lf_db_find_lenses_hd(lensfun->ldb, cameras[0], make, model, 0);
-	if (!lenses)
-	{
-		g_debug("lens not found (make: \"%s\" model: \"%s\")", lensfun->lens_make, model);
-		rs_filter_response_set_image(response, input);
-		g_object_unref(input);
-		return response;
-	}
+		/* FIXME: selecting first camera */
+		lensfun->selected_camera = cameras [0];
+		lf_free (cameras);
 
-	for (i = 0; lenses [i]; i++)
-	{
-		g_print ("Lens: %s / %s\n",
-			 lf_mlstr_get (lenses [i]->Maker),
-			 lf_mlstr_get (lenses [i]->Model));
-		g_print ("\tCrop factor: %g\n", lenses [i]->CropFactor);
-		g_print ("\tFocal: %g-%g\n", lenses [i]->MinFocal, lenses [i]->MaxFocal);
-		g_print ("\tAperture: %g-%g\n", lenses [i]->MinAperture, lenses [i]->MaxAperture);
-		g_print ("\tCenter: %g,%g\n", lenses [i]->CenterX, lenses [i]->CenterY);
-		g_print ("\tCCI: %g/%g/%g\n", lenses [i]->RedCCI, lenses [i]->GreenCCI, lenses [i]->BlueCCI);
-		if (lenses [i]->Mounts)
-			for (j = 0; lenses [i]->Mounts [j]; j++)
-				g_print ("\tMount: %s\n", lf_db_mount_name (lensfun->ldb, lenses [i]->Mounts [j]));
+		const lfLens **lenses;
+
+		if (lensfun->lens)
+		{
+			model = rs_lens_get_lensfun_model(lensfun->lens);
+			if (!model)
+				model = rs_lens_get_description(lensfun->lens);
+			make = rs_lens_get_lensfun_make(lensfun->lens);
+		}
+
+		lenses = lf_db_find_lenses_hd(lensfun->ldb, cameras[0], make, model, 0);
+		if (!lenses)
+		{
+			g_debug("lens not found (make: \"%s\" model: \"%s\")", lensfun->lens_make, model);
+			rs_filter_response_set_image(response, input);
+			g_object_unref(input);
+			return response;
+		}
+
+		for (i = 0; lenses [i]; i++)
+		{
+			g_print ("Lens: %s / %s\n",
+				 lf_mlstr_get (lenses [i]->Maker),
+				 lf_mlstr_get (lenses [i]->Model));
+			g_print ("\tCrop factor: %g\n", lenses [i]->CropFactor);
+			g_print ("\tFocal: %g-%g\n", lenses [i]->MinFocal, lenses [i]->MaxFocal);
+			g_print ("\tAperture: %g-%g\n", lenses [i]->MinAperture, lenses [i]->MaxAperture);
+			g_print ("\tCenter: %g,%g\n", lenses [i]->CenterX, lenses [i]->CenterY);
+			g_print ("\tCCI: %g/%g/%g\n", lenses [i]->RedCCI, lenses [i]->GreenCCI, lenses [i]->BlueCCI);
+			if (lenses [i]->Mounts)
+				for (j = 0; lenses [i]->Mounts [j]; j++)
+					g_print ("\tMount: %s\n", lf_db_mount_name (lensfun->ldb, lenses [i]->Mounts [j]));
+		}
+
+		/* FIXME: selecting first lens */
+		lensfun->selected_lens = lenses [0];
+		lf_free (lenses);
+
+		lensfun->DIRTY = FALSE;
 	}
 
-	const lfLens *lens = lenses [0];
-	lf_free (lenses);
-
 	/* Procedd if we got everything */
-	if (lf_lens_check((lfLens *) lens))
+	if (lf_lens_check((lfLens *) lensfun->selected_lens))
 	{
 		gint effective_flags;
 
@@ -435,7 +454,7 @@
 			lf_get_tca_model_desc (tca.Model, &details, &params);
 			tca.Terms[0] = (lensfun->tca_kr/100)+1;
 			tca.Terms[1] = (lensfun->tca_kb/100)+1;
-			lf_lens_add_calib_tca((lfLens *) lens, (lfLensCalibTCA *) &tca);
+			lf_lens_add_calib_tca((lfLens *) lensfun->selected_lens, (lfLensCalibTCA *) &tca);
 		}
 
 		if (lensfun->vignetting_k2 != 0.0 )
@@ -452,11 +471,11 @@
 			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);
+			lf_lens_add_calib_vignetting((lfLens *) lensfun->selected_lens, &vignetting);
 		}
 
-		lfModifier *mod = lf_modifier_new (lens, cameras[0]->CropFactor, input->w, input->h);
-		effective_flags = lf_modifier_initialize (mod, lens,
+		lfModifier *mod = lf_modifier_new (lensfun->selected_lens, lensfun->selected_camera->CropFactor, input->w, input->h);
+		effective_flags = lf_modifier_initialize (mod, lensfun->selected_lens,
 			LF_PF_U16, /* lfPixelFormat */
 			lensfun->focal, /* focal */
 			lensfun->aperture, /* aperture */




More information about the Rawstudio-commit mailing list