Update of /cvsroot/ufraw/ufraw
In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv1472
Modified Files:
ufraw.h ufraw_lens_ui.c ufraw_lensfun.cc ufraw_ufraw.c
ufraw_ui.h
Log Message:
Add ufLensGeometry and ufTargetLensGeometry UFObjects.
Index: ufraw.h
===================================================================
RCS file: /cvsroot/ufraw/ufraw/ufraw.h,v
retrieving revision 1.152
retrieving revision 1.153
diff -u -d -r1.152 -r1.153
--- ufraw.h 26 Feb 2010 07:01:04 -0000 1.152
+++ ufraw.h 27 Feb 2010 06:36:21 -0000 1.153
@@ -73,6 +73,8 @@
extern UFName ufVignetting;
extern UFName ufDistortion;
extern UFName ufModel;
+extern UFName ufLensGeometry;
+extern UFName ufTargetLensGeometry;
extern UFName ufRawImage;
extern UFName ufRawResources;
extern UFName ufCommandLine;
Index: ufraw_lensfun.cc
===================================================================
RCS file: /cvsroot/ufraw/ufraw/ufraw_lensfun.cc,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- ufraw_lensfun.cc 26 Feb 2010 07:01:04 -0000 1.3
+++ ufraw_lensfun.cc 27 Feb 2010 06:36:21 -0000 1.4
@@ -21,6 +21,10 @@
#include <math.h>
#ifdef HAVE_LENSFUN
+
+#define UF_LF_TRANSFORM ( \
+ LF_MODIFY_DISTORTION | LF_MODIFY_GEOMETRY | LF_MODIFY_SCALE)
+
namespace UFRaw {
class Lensfun : public UFGroup {
@@ -60,10 +64,10 @@
// The criteria is to have 2 or 3 significant digits.
int precision;
if (number > 10.0 && (int)(10*number)%10 != 0)
- // Support focal length such as 10.5mm fisheye.
- precision = MAX(-floor(log(number) / log(10) - 1.99), 0);
+ // Support focal length such as 10.5mm fisheye.
+ precision = MAX(-floor(log(number) / log(10) - 1.99), 0);
else
- precision = MAX(-floor(log(number) / log(10) - 0.99), 0);
+ precision = MAX(-floor(log(number) / log(10) - 0.99), 0);
snprintf(buffer, _buffer_size, "%.*f", precision, number);
return buffer;
}
@@ -95,9 +99,9 @@
*this << new UFString(ufPreset, _StringNumber(buffer, min));
int i = 0;
while (focalValues[i] < min && focalValues[i] != 0)
- i++;
+ i++;
if (Has(_StringNumber(buffer, focalValues[i])))
- i++; // Comparing string works better than comparing doubles.
+ i++; // Comparing strings works better than comparing doubles.
while (focalValues[i] < max && focalValues[i] != 0) {
*this << new UFString(ufPreset, _StringNumber(buffer,
focalValues[i]));
@@ -137,7 +141,7 @@
while (apertureValues[i] < min && apertureValues[i] != 0)
i++;
if (Has(_StringNumber(buffer, apertureValues[i])))
- i++; // Comparing string works better than comparing doubles.
+ i++; // Comparing strings works better than comparing doubles.
while (apertureValues[i] != 0) {
*this << new UFString(ufPreset, _StringNumber(buffer,
apertureValues[i]));
@@ -400,6 +404,39 @@
}
};
+extern "C" { UFName ufLensGeometry = "LensGeometry"; }
+class LensGeometry : public UFArray {
+public:
+ explicit LensGeometry(UFName name = ufLensGeometry) : UFArray(name,
+ lfLens::GetLensTypeDesc(LF_UNKNOWN, NULL)) {
+ for (lfLensType type = LF_UNKNOWN; ; type = lfLensType(type+1)) {
+ const char *typeName = lfLens::GetLensTypeDesc(type, NULL);
+ if (typeName == NULL)
+ break; // End of loop.
+ *this << new UFString("Type", typeName);
+ }
+ }
+ void OriginalValueChangedEvent() {
+ ufraw_data *uf = ufraw_image_get_data(this);
+ if (uf == NULL)
+ return;
+ Lensfun::Parent(*this).Transformation.Type = lfLensType(Index());
+ ufraw_invalidate_layer(uf, ufraw_transform_phase);
+ }
+};
+
+extern "C" { UFName ufTargetLensGeometry = "TargetLensGeometry"; }
+class TargetLensGeometry : public LensGeometry {
+public:
+ TargetLensGeometry() : LensGeometry(ufTargetLensGeometry) { }
+ void OriginalValueChangedEvent() {
+ ufraw_data *uf = ufraw_image_get_data(this);
+ if (uf == NULL)
+ return;
+ ufraw_invalidate_layer(uf, ufraw_transform_phase);
+ }
+};
+
extern "C" { UFName ufLensfun = "Lensfun"; }
Lensfun::Lensfun() : UFGroup(ufLensfun), FocalLengthValue(0.0),
ApertureValue(0.0), DistanceValue(0.0) {
@@ -410,6 +447,8 @@
<< new TCA
<< new Vignetting
<< new Distortion
+ << new LensGeometry
+ << new TargetLensGeometry
;
}
@@ -497,6 +536,56 @@
Lensfun.Init();
}
+void ufraw_convert_prepare_transform(ufraw_data *uf,
+ int width, int height, gboolean reverse, float scale)
+{
+ UFGroup &Image = *uf->conf->ufobject;
+ UFRaw::Lensfun &Lensfun = static_cast<UFRaw::Lensfun &>(Image[ufLensfun]);
+ conf_data *conf = uf->conf;
+ if (uf->modifier != NULL)
+ uf->modifier->Destroy();
+ uf->modifier = lfModifier::Create(&Lensfun.Transformation,
+ conf->camera->CropFactor, width, height);
+ if (uf->modifier == NULL)
+ return;
+
+ UFArray &targetLensGeometry = Lensfun[ufTargetLensGeometry];
+ uf->modFlags = uf->modifier->Initialize(&Lensfun.Transformation,
+ LF_PF_U16, Lensfun.FocalLengthValue, Lensfun.ApertureValue,
+ Lensfun.DistanceValue, scale,
+ lfLensType(targetLensGeometry.Index()),
+ UF_LF_TRANSFORM | LF_MODIFY_VIGNETTING, reverse);
+ if ((uf->modFlags & (UF_LF_TRANSFORM | LF_MODIFY_VIGNETTING)) == 0) {
+ uf->modifier->Destroy();
+ uf->modifier = NULL;
+ }
+}
+
+void ufraw_prepare_tca(ufraw_data *uf)
+{
+ UFGroup &Image = *uf->conf->ufobject;
+ UFRaw::Lensfun &Lensfun = static_cast<UFRaw::Lensfun &>(Image[ufLensfun]);
+ ufraw_image_data *img = &uf->Images[ufraw_raw_phase];
+
+ if (uf->TCAmodifier != NULL)
+ uf->TCAmodifier->Destroy();
+ uf->TCAmodifier = lfModifier::Create(&Lensfun.Transformation,
+ uf->conf->camera->CropFactor, img->width, img->height);
+ if (uf->TCAmodifier == NULL)
+ return;
+
+ UFArray &targetLensGeometry = Lensfun[ufTargetLensGeometry];
+ int modFlags = uf->TCAmodifier->Initialize(&Lensfun.Transformation,
+ LF_PF_U16, Lensfun.FocalLengthValue, Lensfun.ApertureValue,
+ Lensfun.DistanceValue, 1.0,
+ lfLensType(targetLensGeometry.Index()),
+ LF_MODIFY_TCA, false);
+ if ((modFlags & LF_MODIFY_TCA) == 0) {
+ uf->TCAmodifier->Destroy();
+ uf->TCAmodifier = NULL;
+ }
+}
+
}
} // namespace UFRaw
Index: ufraw_ui.h
===================================================================
RCS file: /cvsroot/ufraw/ufraw/ufraw_ui.h,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -d -r1.39 -r1.40
--- ufraw_ui.h 26 Feb 2010 07:01:04 -0000 1.39
+++ ufraw_ui.h 27 Feb 2010 06:36:21 -0000 1.40
@@ -126,10 +126,6 @@
GtkWidget *LensTCATable, *LensTCADesc;
/* The lens fix notebook vignetting page */
GtkWidget *LensVignettingTable, *LensVignettingDesc;
- /* The lens fix notebook geometry page */
- GtkWidget *LensGeometryTable, *LensFromGeometryDesc, *LensToGeometryDesc;
- /* The 'from' and 'to' geometry selectors */
- GtkWidget *LensFromGeometrySel, *LensToGeometrySel;
/* The hbox containing focal, aperture, distance combos */
GtkWidget *LensParamBox;
#endif /* HAVE_LENSFUN */
Index: ufraw_lens_ui.c
===================================================================
RCS file: /cvsroot/ufraw/ufraw/ufraw_lens_ui.c,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -d -r1.35 -r1.36
--- ufraw_lens_ui.c 26 Feb 2010 07:01:04 -0000 1.35
+++ ufraw_lens_ui.c 27 Feb 2010 06:36:21 -0000 1.36
@@ -170,15 +170,6 @@
0, gtk_get_current_event_time());
}
-/* Update all lens model-related controls to reflect current model */
-static void lens_update_controls(preview_data *data)
-{
- gtk_combo_box_set_active(GTK_COMBO_BOX(data->LensFromGeometrySel),
- CFG->lens->Type);
- gtk_combo_box_set_active(GTK_COMBO_BOX(data->LensToGeometrySel),
- CFG->cur_lens_type);
-}
-
static void combo_entry_new(UFObject *object, GtkWidget *box,
const char *labelText, const char *tooltip)
{
@@ -270,7 +261,6 @@
UFObject *lensfun = ufgroup_element(CFG->ufobject, ufLensfun);
ufraw_lensfun_interpolate(lensfun, lens);
lens_set(data);
- lens_update_controls(data);
}
static void lens_menu_fill(preview_data *data, const lfLens *const *lenslist)
@@ -552,7 +542,7 @@
/* --- Lens geometry page --- */
-static void geometry_model_changed(GtkComboBox *widget, preview_data *data)
+static void geometry_model_changed(GtkComboBox *widget, GtkLabel *label)
{
lfLensType type = gtk_combo_box_get_active(widget);
@@ -560,88 +550,57 @@
if (!lf_get_lens_type_desc(type, &details))
return; // should never happen
- lfLensType *target = (lfLensType *)g_object_get_data(G_OBJECT(widget),
- "LensType");
-
- *target = type;
-
- if (target == &CFG->cur_lens_type)
- gtk_label_set_text(GTK_LABEL(data->LensToGeometryDesc), details);
- else
- gtk_label_set_text(GTK_LABEL(data->LensFromGeometryDesc), details);
-
- ufraw_invalidate_layer(data->UF, ufraw_transform_phase);
- render_preview(data);
+ gtk_label_set_text(label, details);
}
-static void fill_geometry_page(preview_data *data, GtkWidget *page)
+static GtkWidget *fill_geometry_page(UFObject *ufobject)
{
- data->LensGeometryTable = gtk_table_new(10, 1, FALSE);
- gtk_box_pack_start(GTK_BOX(page),
- data->LensGeometryTable, TRUE, TRUE, 0);
+ UFObject *lensfun = ufgroup_element(ufobject, ufLensfun);
+ GtkTable *geometryTable = GTK_TABLE(gtk_table_new(10, 1, FALSE));
- /* Add the model combobox */
+ /* Lens geometry combobox */
GtkWidget *label = gtk_label_new(_("Lens geometry:"));
gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5);
- gtk_table_attach(GTK_TABLE(data->LensGeometryTable), label,
- 0, 1, 0, 1, GTK_FILL, 0, 5, 0);
- data->LensFromGeometrySel = gtk_combo_box_new_text();
- uf_widget_set_tooltip(data->LensFromGeometrySel,
+ gtk_table_attach(geometryTable, label, 0, 1, 0, 1, GTK_FILL, 0, 5, 0);
+ UFObject *lensGeometry = ufgroup_element(lensfun, ufLensGeometry);
+ GtkWidget *combo = ufarray_combo_box_new(lensGeometry);
+ uf_widget_set_tooltip(combo,
_("The geometry of the lens used to make the shot"));
- gtk_table_attach(GTK_TABLE(data->LensGeometryTable),
- data->LensFromGeometrySel, 1, 2, 0, 1,
+ gtk_table_attach(geometryTable, combo, 1, 2, 0, 1,
GTK_EXPAND | GTK_FILL, 0, 0, 0);
- data->LensFromGeometryDesc = gtk_label_new("");
- gtk_label_set_line_wrap(GTK_LABEL(data->LensFromGeometryDesc), TRUE);
- gtk_label_set_ellipsize(GTK_LABEL(data->LensFromGeometryDesc),
- PANGO_ELLIPSIZE_END);
- gtk_label_set_selectable(GTK_LABEL(data->LensFromGeometryDesc), TRUE);
- gtk_misc_set_alignment(GTK_MISC(data->LensFromGeometryDesc), 0.5, 0.5);
- gtk_table_attach(GTK_TABLE(data->LensGeometryTable),
- data->LensFromGeometryDesc, 0, 2, 1, 2,
+ GtkWidget *description = gtk_label_new("");
+ gtk_label_set_line_wrap(GTK_LABEL(description), TRUE);
+ gtk_label_set_ellipsize(GTK_LABEL(description), PANGO_ELLIPSIZE_END);
+ gtk_label_set_selectable(GTK_LABEL(description), TRUE);
+ gtk_misc_set_alignment(GTK_MISC(description), 0.5, 0.5);
+ gtk_table_attach(geometryTable, description, 0, 2, 1, 2,
GTK_EXPAND | GTK_FILL, 0, 0, 10);
+ g_signal_connect(G_OBJECT(combo), "changed",
+ G_CALLBACK(geometry_model_changed), description);
+ /* Target lens geometry combobox */
label = gtk_label_new(_("Target geometry:"));
gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5);
- gtk_table_attach(GTK_TABLE(data->LensGeometryTable), label,
- 0, 1, 2, 3, GTK_FILL, 0, 5, 0);
- data->LensToGeometrySel = gtk_combo_box_new_text();
- uf_widget_set_tooltip(data->LensToGeometrySel,
- _("The target geometry for output image"));
- gtk_table_attach(GTK_TABLE(data->LensGeometryTable),
- data->LensToGeometrySel, 1, 2, 2, 3,
+ gtk_table_attach(geometryTable, label, 0, 1, 2, 3, GTK_FILL, 0, 5, 0);
+ UFObject *targetLensGeometry =
+ ufgroup_element(lensfun, ufTargetLensGeometry);
+ combo = ufarray_combo_box_new(targetLensGeometry);
+ uf_widget_set_tooltip(combo, _("The target geometry for output image"));
+ gtk_table_attach(geometryTable, combo, 1, 2, 2, 3,
GTK_EXPAND | GTK_FILL, 0, 0, 0);
- data->LensToGeometryDesc = gtk_label_new("");
- gtk_label_set_line_wrap(GTK_LABEL(data->LensToGeometryDesc), TRUE);
- gtk_label_set_ellipsize(GTK_LABEL(data->LensToGeometryDesc),
- PANGO_ELLIPSIZE_END);
- gtk_label_set_selectable(GTK_LABEL(data->LensToGeometryDesc), TRUE);
- gtk_misc_set_alignment(GTK_MISC(data->LensToGeometryDesc), 0.5, 0.5);
- gtk_table_attach(GTK_TABLE(data->LensGeometryTable),
- data->LensToGeometryDesc, 0, 2, 3, 4,
+ description = gtk_label_new("");
+ gtk_label_set_line_wrap(GTK_LABEL(description), TRUE);
+ gtk_label_set_ellipsize(GTK_LABEL(description), PANGO_ELLIPSIZE_END);
+ gtk_label_set_selectable(GTK_LABEL(description), TRUE);
+ gtk_misc_set_alignment(GTK_MISC(description), 0.5, 0.5);
+ gtk_table_attach(geometryTable, description, 0, 2, 3, 4,
GTK_EXPAND | GTK_FILL, 0, 0, 10);
+ g_signal_connect(G_OBJECT(combo), "changed",
+ G_CALLBACK(geometry_model_changed), description);
- int i;
- for (i = 0; ; i++) {
- lfLensType type = LF_UNKNOWN + i;
- const char *type_name = lf_get_lens_type_desc(type, NULL);
- if (type_name == NULL)
- break;
- gtk_combo_box_append_text(GTK_COMBO_BOX(data->LensFromGeometrySel),
- type_name);
- gtk_combo_box_append_text(GTK_COMBO_BOX(data->LensToGeometrySel),
- type_name);
- }
- g_object_set_data(G_OBJECT(data->LensFromGeometrySel), "LensType",
- &CFG->lens->Type);
- g_signal_connect(G_OBJECT(data->LensFromGeometrySel), "changed",
- G_CALLBACK(geometry_model_changed), data);
- g_object_set_data(G_OBJECT(data->LensToGeometrySel), "LensType",
- &CFG->cur_lens_type);
- g_signal_connect(G_OBJECT(data->LensToGeometrySel), "changed",
- G_CALLBACK(geometry_model_changed), data);
+ return GTK_WIDGET(geometryTable);
}
/**
@@ -723,9 +682,8 @@
gtk_notebook_set_current_page(subnb, pageNum);
subpage = notebook_page_new(subnb, _("Lens geometry"), "geometry");
- fill_geometry_page(data, subpage);
-
- lens_update_controls(data);
+ gtk_box_pack_start(GTK_BOX(subpage), fill_geometry_page(CFG->ufobject),
+ TRUE, TRUE, 0);
}
#endif /* HAVE_LENSFUN */
Index: ufraw_ufraw.c
===================================================================
RCS file: /cvsroot/ufraw/ufraw/ufraw_ufraw.c,v
retrieving revision 1.246
retrieving revision 1.247
diff -u -d -r1.246 -r1.247
--- ufraw_ufraw.c 26 Feb 2010 07:01:04 -0000 1.246
+++ ufraw_ufraw.c 27 Feb 2010 06:36:21 -0000 1.247
@@ -30,9 +30,6 @@
void (*ufraw_progress)(int what, int ticks) = NULL;
#ifdef HAVE_LENSFUN
-/* What about LF_MODIFY_ALL? */
-#define UF_LF_ALL (LF_MODIFY_TCA | LF_MODIFY_VIGNETTING | \
- LF_MODIFY_DISTORTION | LF_MODIFY_GEOMETRY | LF_MODIFY_SCALE)
#define UF_LF_TRANSFORM ( \
LF_MODIFY_DISTORTION | LF_MODIFY_GEOMETRY | LF_MODIFY_SCALE)
void ufraw_lensfun_init(ufraw_data *uf);
@@ -40,7 +37,7 @@
ufraw_image_data *img, UFRectangle *area);
static void ufraw_convert_image_tca(ufraw_data *uf, ufraw_image_data *img,
ufraw_image_data *outimg, UFRectangle *area);
-static void ufraw_prepare_tca(ufraw_data *uf);
+void ufraw_prepare_tca(ufraw_data *uf);
#endif
static void ufraw_image_format(int *colors, int *bytes, ufraw_image_data *img,
const char *formats, const char *caller);
@@ -1348,47 +1345,18 @@
}
}
-static void ufraw_convert_prepare_transform(ufraw_data *uf,
- int width, int height, gboolean reverse, float scale)
-{
#ifdef HAVE_LENSFUN
- conf_data *conf = uf->conf;
- if (uf->modifier != NULL)
- lf_modifier_destroy(uf->modifier);
- uf->modifier = NULL;
-
- if (conf->camera == NULL || conf->lens == NULL)
- return;
-
- uf->modifier = lf_modifier_new(conf->lens, conf->camera->CropFactor,
- width, height);
- if (uf->modifier == NULL)
- return;
-
- uf->modFlags = lf_modifier_initialize(uf->modifier, conf->lens,
- LF_PF_U16, conf->focal_len, conf->aperture, conf->subject_distance,
- scale, conf->cur_lens_type,
- UF_LF_TRANSFORM | LF_MODIFY_VIGNETTING, reverse);
- if ((uf->modFlags & UF_LF_ALL) == 0) {
- lf_modifier_destroy(uf->modifier);
- uf->modifier = NULL;
- }
-#else /* HAVE_LENSFUN */
- (void)uf;
- (void)width;
- (void)height;
- (void)reverse;
- (void)scale;
-#endif /* HAVE_LENSFUN */
-}
+void ufraw_convert_prepare_transform(ufraw_data *uf,
+ int width, int height, gboolean reverse, float scale);
+#endif
static void ufraw_convert_prepare_transform_buffer(ufraw_data *uf,
ufraw_image_data *img, int width, int height)
{
const int iWidth = uf->initialWidth;
const int iHeight = uf->initialHeight;
- ufraw_convert_prepare_transform(uf, iWidth, iHeight, TRUE, 1.0);
#ifdef HAVE_LENSFUN
+ ufraw_convert_prepare_transform(uf, iWidth, iHeight, TRUE, 1.0);
if (uf->conf->rotationAngle == 0 &&
(uf->modifier == NULL || !(uf->modFlags & UF_LF_TRANSFORM)))
#else
@@ -1400,7 +1368,9 @@
img->width = width;
img->height = height;
// We still need the transform for vignetting
+#ifdef HAVE_LENSFUN
ufraw_convert_prepare_transform(uf, width, height, FALSE, 1.0);
+#endif
uf->rotatedWidth = iWidth;
uf->rotatedHeight = iHeight;
uf->autoCropWidth = iWidth;
@@ -1468,7 +1438,9 @@
int newWidth = uf->rotatedWidth * width / iWidth;
int newHeight = uf->rotatedHeight * height / iHeight;
ufraw_image_init(img, newWidth, newHeight, 8);
+#ifdef HAVE_LENSFUN
ufraw_convert_prepare_transform(uf, width, height, FALSE, scale);
+#endif
}
/*
@@ -1515,34 +1487,6 @@
}
}
-#ifdef HAVE_LENSFUN
-static void ufraw_prepare_tca(ufraw_data *uf)
-{
- ufraw_image_data *img = &uf->Images[ufraw_raw_phase];
-
- if (uf->TCAmodifier != NULL)
- lf_modifier_destroy(uf->TCAmodifier);
- uf->TCAmodifier = NULL;
-
- if (uf->conf->camera == NULL || uf->conf->lens == NULL)
- return;
-
- uf->TCAmodifier = lf_modifier_new(uf->conf->lens,
- uf->conf->camera->CropFactor, img->width, img->height);
- if (uf->TCAmodifier == NULL)
- return;
-
- int modFlags = lf_modifier_initialize(uf->TCAmodifier, uf->conf->lens,
- LF_PF_U16, uf->conf->focal_len, uf->conf->aperture,
- uf->conf->subject_distance, 1.0, uf->conf->cur_lens_type,
- LF_MODIFY_TCA, FALSE);
- if ((modFlags & LF_MODIFY_TCA) == 0) {
- lf_modifier_destroy(uf->TCAmodifier);
- uf->TCAmodifier = NULL;
- }
-}
-#endif
-
/*
* This function is very permissive in accepting NULL pointers but it does
* so to make it easy to call this function: consider it documentation with
------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
ufraw-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ufraw-cvs