[gegl/soc-2013-n-point-deformation] make shared NPD library
- From: Marek Dvoroznak <dvoromar src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gegl/soc-2013-n-point-deformation] make shared NPD library
- Date: Wed, 31 Jul 2013 18:02:34 +0000 (UTC)
commit 23aea3032c83f0c5e589d9851d61283008eb515a
Author: Marek Dvoroznak <dvoromar gmail com>
Date: Wed Jul 31 19:53:00 2013 +0200
make shared NPD library
configure.ac | 5 +--
gegl.pc.in | 2 +-
libs/npd/Makefile.am | 57 +++++++++++++++++++++---------
libs/npd/graphics.h | 4 +-
libs/npd/npd.h | 1 +
libs/npd/npd_common.c | 6 ++--
libs/npd/npd_common.h | 4 ++
operations/external/Makefile.am | 4 +-
operations/external/npd.c | 73 +++++++++++++++++++++++----------------
9 files changed, 98 insertions(+), 58 deletions(-)
---
diff --git a/configure.ac b/configure.ac
old mode 100644
new mode 100755
index 51af242..e7a31d1
--- a/configure.ac
+++ b/configure.ac
@@ -1044,8 +1044,8 @@ fi
##################
have_libnpd="yes (internal)"
-AC_SUBST(NPD_CFLAGS, "-I\$(top_srcdir)/libs/npd")
-AC_SUBST(NPD_LIBS, "-L\$(top_builddir)/libs/npd -lnpd")
+AC_SUBST(NPD_CFLAGS, "-I\$(top_srcdir)/libs")
+AC_SUBST(NPD_LIBS, "-L\$(top_builddir)/libs/npd -lgegl-npd-\$(GEGL_API_VERSION)")
#######################
# Check for other items
@@ -1198,5 +1198,4 @@ Optional dependencies:
EXIV: $have_exiv2
umfpack: $have_umfpack
poly2tri-c: $have_p2tc
- libnpd: $have_libnpd
]);
diff --git a/gegl.pc.in b/gegl.pc.in
index 614bb78..f4b70fc 100644
--- a/gegl.pc.in
+++ b/gegl.pc.in
@@ -8,5 +8,5 @@ Name: GEGL
Description: Generic Graphics Library
Version: @GEGL_REAL_VERSION@
Requires: @GLIB_PACKAGES@ babl
-Libs: -L${libdir} -l PACKAGE_NAME@- GEGL_API_VERSION@
+Libs: -L${libdir} -l PACKAGE_NAME@- GEGL_API_VERSION@ -l PACKAGE_NAME@-npd- GEGL_API_VERSION@
Cflags: -I${includedir}/@PACKAGE_NAME -@GEGL_API_VERSION@
diff --git a/libs/npd/Makefile.am b/libs/npd/Makefile.am
index 16ad543..a5ca9fc 100644
--- a/libs/npd/Makefile.am
+++ b/libs/npd/Makefile.am
@@ -1,17 +1,40 @@
-noinst_LTLIBRARIES = libnpd.la
-
-AM_CFLAGS = $(GLIB_CFLAGS) $(NPD_CFLAGS) -I$(top_builddir)/gegl -I$(top_srcdir)/gegl
-AM_LDFLAGS = $(GLIB_LIBS) $(NPD_LIBS)
-
-libnpd_la_SOURCES = \
- npd_common.h \
- npd_common.c \
- deformation.h \
- deformation.c \
- npd_math.h \
- npd_math.c \
- graphics.h \
- graphics.c \
- npd_gegl.h \
- npd_gegl.c \
- npd.h
+include $(top_srcdir)/operations/Makefile-common.am
+
+######################################################
+# A shared library for n-point image deformation API #
+######################################################
+
+GEGL_NPD_publicdir = $(includedir)/gegl-$(GEGL_API_VERSION)/npd
+
+GEGL_NPD_public_HEADERS = \
+ npd_common.h \
+ deformation.h \
+ npd_math.h \
+ graphics.h \
+ refine.h \
+ npd_gegl.h \
+ npd.h
+
+GEGL_NPD_SOURCES = \
+ $(GEGL_NPD_public_HEADERS) \
+ npd_common.c \
+ deformation.c \
+ npd_math.c \
+ graphics.c \
+ refine.c \
+ npd_gegl.c
+
+libgegl_npd_ GEGL_API_VERSION@_la_SOURCES = \
+ $(GEGL_NPD_public_HEADERS) \
+ $(GEGL_NPD_SOURCES)
+
+libgegl_npd_ GEGL_API_VERSION@_la_LDFLAGS = \
+ -avoid-version -export-dynamic $(no_undefined)
+
+libgegl_npd_ GEGL_API_VERSION@_la_CFLAGS = \
+ $(AM_CFLAGS)
+
+lib_LTLIBRARIES = libgegl-npd- GEGL_API_VERSION@.la
+
+libgegl_npd_ GEGL_API_VERSION@_la_LIBADD = \
+ $(libgegl)
diff --git a/libs/npd/graphics.h b/libs/npd/graphics.h
index d27cd5f..691ec4f 100644
--- a/libs/npd/graphics.h
+++ b/libs/npd/graphics.h
@@ -76,11 +76,11 @@ void npd_bilinear_color_interpolation (NPDColor *I0,
gfloat dx,
gfloat dy,
NPDColor *out);
-void npd_get_pixel_color (NPDImage *image,
+void (*npd_get_pixel_color) (NPDImage *image,
gint x,
gint y,
NPDColor *color);
-void npd_set_pixel_color (NPDImage *image,
+void (*npd_set_pixel_color) (NPDImage *image,
gint x,
gint y,
NPDColor *color);
diff --git a/libs/npd/npd.h b/libs/npd/npd.h
index ae70e59..e01fc4b 100644
--- a/libs/npd/npd.h
+++ b/libs/npd/npd.h
@@ -24,6 +24,7 @@
#include "graphics.h"
#include "deformation.h"
#include "npd_math.h"
+/*#include "refine.h"*/
#endif /* __NPD_H__ */
diff --git a/libs/npd/npd_common.c b/libs/npd/npd_common.c
index 1991491..0f1ad97 100644
--- a/libs/npd/npd_common.c
+++ b/libs/npd/npd_common.c
@@ -128,11 +128,11 @@ npd_remove_control_point (NPDModel *model,
for (i = 0; i < model->control_points->len; i++)
{
- cp = &g_array_index(model->control_points, NPDControlPoint, i);
+ cp = &g_array_index (model->control_points, NPDControlPoint, i);
if (cp == control_point)
{
- npd_set_control_point_weight(cp, 1.0);
+ npd_set_control_point_weight (cp, 1.0);
g_array_remove_index (model->control_points, i);
return;
}
@@ -193,7 +193,7 @@ npd_get_control_point_at (NPDModel *model,
}
}
- g_printf ("no control points\n");
+// g_printf ("no control points\n");
return NULL;
}
diff --git a/libs/npd/npd_common.h b/libs/npd/npd_common.h
index 5ccadad..4414cc5 100644
--- a/libs/npd/npd_common.h
+++ b/libs/npd/npd_common.h
@@ -92,6 +92,10 @@ typedef struct
NPDDisplay *display;
} NPDModel;
+#define npd_init(set_pixel, get_pixel)\
+npd_set_pixel_color = set_pixel;\
+npd_get_pixel_color = get_pixel
+
void npd_init_model (NPDModel *model);
void npd_destroy_hidden_model (NPDHiddenModel *model);
void npd_destroy_model (NPDModel *model);
diff --git a/operations/external/Makefile.am b/operations/external/Makefile.am
index e6aeeca..b7e561e 100644
--- a/operations/external/Makefile.am
+++ b/operations/external/Makefile.am
@@ -142,8 +142,8 @@ rgbe_save_la_LIBADD = $(op_libs) $(top_builddir)/libs/rgbe/librgbe.la
# Dependencies are in our source tree
ops += npd.la
npd_la_SOURCES = npd.c
-npd_la_CFLAGS = $(AM_CFLAGS) -I $(top_srcdir)/libs
-npd_la_LIBADD = $(op_libs) $(top_builddir)/libs/npd/libnpd.la
+npd_la_CFLAGS = $(AM_CFLAGS) $(NPD_CFLAGS)
+npd_la_LIBADD = $(op_libs) $(NPD_LIBS)
opdir = $(libdir)/gegl- GEGL_API_VERSION@
op_LTLIBRARIES = $(ops)
diff --git a/operations/external/npd.c b/operations/external/npd.c
index a8d5707..c589280 100644
--- a/operations/external/npd.c
+++ b/operations/external/npd.c
@@ -20,6 +20,8 @@
#include <glib/gi18n-lib.h>
#ifdef GEGL_CHANT_PROPERTIES
+gegl_chant_pointer (model, _("model"), _(""))
+gegl_chant_int (rigidity, _("rigidity"), 100, 20000, 0, _(""))
#else
#define GEGL_CHANT_TYPE_FILTER
@@ -53,12 +55,23 @@ typedef struct
void npd_create_image (NPDImage *image,
GeglBuffer *gegl_buffer,
const Babl *format);
+void
+npd_set_pixel_color_impl (NPDImage *image,
+ gint x,
+ gint y,
+ NPDColor *color);
+void
+npd_get_pixel_color_impl (NPDImage *image,
+ gint x,
+ gint y,
+ NPDColor *color);
+
void
-npd_set_pixel_color (NPDImage *image,
- gint x,
- gint y,
- NPDColor *color)
+npd_set_pixel_color_impl (NPDImage *image,
+ gint x,
+ gint y,
+ NPDColor *color)
{
gint position = 4 * (y * image->width + x);
gint max = 4 * image->width * image->height;
@@ -73,10 +86,10 @@ npd_set_pixel_color (NPDImage *image,
}
void
-npd_get_pixel_color (NPDImage *image,
- gint x,
- gint y,
- NPDColor *color)
+npd_get_pixel_color_impl (NPDImage *image,
+ gint x,
+ gint y,
+ NPDColor *color)
{
gint position = 4 * (y * image->width + x);
gint max = 4 * image->width * image->height;
@@ -177,47 +190,47 @@ process (GeglOperation *operation,
const Babl *format = babl_format ("RGBA u8");
NPDProperties *props = o->chant_data;
NPDModel *model = &props->model;
- NPDControlPoint *cp;
- NPDPoint coord, new_coord;
guchar *output_buffer;
if (props->first_run)
{
gint width, height;
- NPDImage input_image;
- NPDDisplay display;
+ NPDImage *input_image = g_new (NPDImage, 1);
+ NPDDisplay *display = g_new (NPDDisplay, 1);
+
+ npd_init (npd_set_pixel_color_impl, npd_get_pixel_color_impl);
- npd_create_image (&input_image, input, format);
- width = input_image.width;
- height = input_image.height;
+ npd_create_image (input_image, input, format);
+ width = input_image->width;
+ height = input_image->height;
output_buffer = g_new0 (guchar, gegl_buffer_get_pixel_count (input) * 4);
- display.image.width = width;
- display.image.height = height;
- display.image.buffer = output_buffer;
+ display->image.width = width;
+ display->image.height = height;
+ display->image.buffer = output_buffer;
- npd_create_model_from_image(model, &input_image, 20);
+ npd_create_model_from_image (model, input_image, 20);
npd_create_list_of_overlapping_points (model->hidden_model);
- model->display = &display;
+ model->display = display;
+
+ o->model = model;
+ NPDModel *m = o->model;
+
+ props->first_run = FALSE;
}
else
{
output_buffer = model->display->image.buffer;
}
- coord.x = 20; coord.y = 200;
- new_coord.x = 100; new_coord.y = 250;
-
- cp = npd_add_control_point (model, &coord);
- npd_set_point_coordinates (&cp->point, &new_coord);
-
- npd_deform_model (model, 1000);
+// npd_deform_model (model, o->rigidity);
+ npd_deform_model (model, 2000);
npd_draw_model (model, model->display);
-
- gegl_buffer_set (output, NULL, 0, format, output_buffer, GEGL_AUTO_ROWSTRIDE);
- return TRUE;
+ gegl_buffer_set (output, NULL, 0, format, output_buffer, GEGL_AUTO_ROWSTRIDE);
+
+ return TRUE;
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]