From 830c303adace8a46cf664e96afaf30939ed08301 Mon Sep 17 00:00:00 2001 From: John Cupitt Date: Wed, 23 Jan 2008 17:16:30 +0000 Subject: [PATCH] stuff --- ChangeLog | 1 + TODO | 2 + libsrc/arithmetic/arith_dispatch.c | 6 +- libsrc/arithmetic/im_abs.c | 19 ++--- libsrc/iofuncs/Makefile.am | 1 - libsrc/iofuncs/im_wrapmany.c | 60 +++++++++++++- libsrc/iofuncs/im_wrapone.c | 124 ----------------------------- python/vipsCC/VImage.i | 12 +-- 8 files changed, 79 insertions(+), 146 deletions(-) delete mode 100644 libsrc/iofuncs/im_wrapone.c diff --git a/ChangeLog b/ChangeLog index 73281c1e..75a0062f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,7 @@ 12/12/07 started 7.13.3 - added "include " to VImage.cc to help gcc 4.3 - started moving the python binding to dynamic wrapping +- added im_wrap(), im_wraptwo(), im_phasecor_fft(), im_cross_phase() (Tom) 31/10/07 started 7.13.2 - build cimg on windows fixes diff --git a/TODO b/TODO index 367cdfe6..011b561d 100644 --- a/TODO +++ b/TODO @@ -1,3 +1,5 @@ +- HAVE_HYPOT could define a hypot() macro? + - write our own python extension to call a vips operation by name result = vips_call ("name", args) diff --git a/libsrc/arithmetic/arith_dispatch.c b/libsrc/arithmetic/arith_dispatch.c index d5c8e731..c2e56762 100644 --- a/libsrc/arithmetic/arith_dispatch.c +++ b/libsrc/arithmetic/arith_dispatch.c @@ -1260,9 +1260,9 @@ linreg_vec( im_object *argv ) static im_function linreg_desc = { "im_linreg", /* Name */ N_( "pixelwise linear regression" ), - IM_FN_PIO | IM_FN_PTOP, /* Flags */ + IM_FN_PIO | IM_FN_PTOP, /* Flags */ linreg_vec, /* Dispatch function */ - IM_NUMBER( linreg_args ), /* Size of arg list */ + IM_NUMBER( linreg_args ), /* Size of arg list */ linreg_args /* Arg list */ }; @@ -1280,7 +1280,7 @@ static im_function cross_phase_desc = { "im_cross_phase", /* Name */ N_( "phase of cross power spectrum of two complex images" ), /* Description */ IM_FN_PIO | IM_FN_PTOP, /* Flags */ - cross_phase_vec, /* Dispatch function */ + cross_phase_vec, /* Dispatch function */ IM_NUMBER( two_in_one_out ), /* Size of arg list */ two_in_one_out /* Arg list */ }; diff --git a/libsrc/arithmetic/im_abs.c b/libsrc/arithmetic/im_abs.c index e015e3ff..ca31ab97 100644 --- a/libsrc/arithmetic/im_abs.c +++ b/libsrc/arithmetic/im_abs.c @@ -108,13 +108,15 @@ #ifdef HAVE_HYPOT -#define complexabs(TYPE) { \ - TYPE *p = (TYPE *) in; \ - TYPE *q = (TYPE *) out; \ - TYPE *q_stop = q + sz; \ - \ - while( q < q_stop ) \ - *q++= hypot( *p++, *p++ ); \ +#define complexabs(TYPE) { \ + TYPE *p = (TYPE *) in; \ + TYPE *q = (TYPE *) out; \ + int i; \ + \ + for( i = 0; i < sz; i++ ) { \ + q[i] = hypot( p[0], p[1] ); \ + p += 2; \ + } \ } #else /*HAVE_HYPOT*/ @@ -147,8 +149,7 @@ */ static void abs_gen( PEL *in, PEL *out, int width, IMAGE *im ) -{ - int x; +{ int sz = width * im->Bands; /* Abs all input types. diff --git a/libsrc/iofuncs/Makefile.am b/libsrc/iofuncs/Makefile.am index 4b305e0a..2d819af7 100644 --- a/libsrc/iofuncs/Makefile.am +++ b/libsrc/iofuncs/Makefile.am @@ -44,7 +44,6 @@ libiofuncs_la_SOURCES = \ im_guess_prefix.c \ im_wbuffer.c \ im_wrapmany.c \ - im_wrapone.c \ im_wraptwo.c \ im_writeline.c \ memory.c \ diff --git a/libsrc/iofuncs/im_wrapmany.c b/libsrc/iofuncs/im_wrapmany.c index 296b36d8..039722d9 100644 --- a/libsrc/iofuncs/im_wrapmany.c +++ b/libsrc/iofuncs/im_wrapmany.c @@ -22,6 +22,8 @@ * array * 28/7/97 JC * - amazing error ... only worked if ir and or had same valid + * 23/1/08 + * - do im_wrapone() in terms of this */ /* @@ -67,7 +69,7 @@ typedef struct { im_wrapmany_fn fn; /* Function we call */ void *a, *b; /* User values for function */ -} UserBundle; +} Bundle; /* Maximum number of input images -- why not? */ @@ -79,7 +81,7 @@ static int process_region( REGION *or, void *seq, void *a, void *b ) { REGION **ir = (REGION **) seq; - UserBundle *bun = (UserBundle *) b; + Bundle *bun = (Bundle *) b; PEL *p[IM_MAX_INPUT_IMAGES], *q; int i, y; @@ -153,7 +155,7 @@ dupims( IMAGE *out, IMAGE **in ) int im_wrapmany( IMAGE **in, IMAGE *out, im_wrapmany_fn fn, void *a, void *b ) { - UserBundle *bun = IM_NEW( out, UserBundle ); + Bundle *bun = IM_NEW( out, Bundle ); int i, n; /* Count input images. @@ -203,3 +205,55 @@ im_wrapmany( IMAGE **in, IMAGE *out, im_wrapmany_fn fn, void *a, void *b ) return( 0 ); } + +static void +wrapone_gen( void **ins, void *out, int width, Bundle *bun, void *dummy ) +{ + ((im_wrapone_fn) (bun->fn)) (ins[0], out, width, bun->a, bun->b ); +} + +int +im_wrapone( IMAGE *in, IMAGE *out, im_wrapone_fn fn, void *a, void *b ) +{ + Bundle *bun = IM_NEW( out, Bundle ); + IMAGE *invec[2]; + + /* Heh, yuk. We cast back above. + */ + bun->fn = (im_wrapmany_fn) fn; + bun->a = a; + bun->b = b; + invec[0] = in; invec[1] = NULL; + + return( im_wrapmany( invec, out, + (im_wrapmany_fn) wrapone_gen, bun, NULL ) ); +} + +/* + + commented out for now ... replace im_wraptwo with this? + +static void +wraptwo_gen( void **ins, void *out, int width, Bundle *bun, void *dummy ) +{ + ((im_wraptwo_fn) (bun->fn)) (ins[0], ins[1], or, + width, bun->a, bun->b ); +} + +int +im_wraptwo( IMAGE *in1, IMAGE *in2, IMAGE *out, + im_wraptwo_fn fn, void *a, void *b ) +{ + Bundle *bun = IM_NEW( out, Bundle ); + IMAGE *invec[3]; + + bun->fn = (im_wrapmany_fn) fn; + bun->a = a; + bun->b = b; + invec[0] = in1; invec[1] = in2; invec[2] = NULL; + + return( im_wrapmany( invec, out, + (im_wrapmany_fn) wraptwo_gen, bun, NULL ) ); +} + + */ diff --git a/libsrc/iofuncs/im_wrapone.c b/libsrc/iofuncs/im_wrapone.c deleted file mode 100644 index e5141f69..00000000 --- a/libsrc/iofuncs/im_wrapone.c +++ /dev/null @@ -1,124 +0,0 @@ -/* As im_wrapmany, but just allow one input and one output. - * - * The types become: - * - * int im_wrapone( IMAGE *in, IMAGE *out, - * im_wrapone_fn fn, void *a, void *b ) - * - * where im_wrapone_fn has type: - * - * process_buffer( void *in, void *out, int n, - * void *a, void *b ) - * 28/7/97 JC - * - amazing error ... failed if or and ir were different sizes - */ - -/* - - This file is part of VIPS. - - VIPS is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - */ - -/* - - These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk - - */ - -#ifdef HAVE_CONFIG_H -#include -#endif /*HAVE_CONFIG_H*/ -#include - -#include -#include - -#include - -#ifdef WITH_DMALLOC -#include -#endif /*WITH_DMALLOC*/ - -typedef struct { - im_wrapone_fn fn; /* Function we call */ - void *a, *b; /* User values for function */ -} UserBundle; - -/* Build or->valid a line at a time from ir. - */ -static int -process_region( REGION *or, void *seq, void *a, void *b ) -{ - REGION *ir = (REGION *) seq; - UserBundle *bun = (UserBundle *) b; - - PEL *p, *q; - int y; - - /* Prepare input region and make buffer pointers. - */ - if( im_prepare( ir, &or->valid ) ) - return( -1 ); - p = (PEL *) IM_REGION_ADDR( ir, or->valid.left, or->valid.top ); - q = (PEL *) IM_REGION_ADDR( or, or->valid.left, or->valid.top ); - - /* Convert linewise. - */ - for( y = 0; y < or->valid.height; y++ ) { - bun->fn( p, q, or->valid.width, bun->a, bun->b ); - p += IM_REGION_LSKIP( ir ); - q += IM_REGION_LSKIP( or ); - } - - return( 0 ); -} - -/* Wrap up as a partial. - */ -int -im_wrapone( IMAGE *in, IMAGE *out, im_wrapone_fn fn, void *a, void *b ) -{ - UserBundle *bun = IM_NEW( out, UserBundle ); - - /* Save args. - */ - if( !bun ) - return( -1 ); - bun->fn = fn; - bun->a = a; - bun->b = b; - - /* Check descriptors. - */ - if( im_piocheck( in, out ) ) - return( -1 ); - - /* Hint demand style. Being a buffer processor, we are happiest with - * thin strips. - */ - if( im_demand_hint( out, IM_THINSTRIP, in, NULL ) ) - return( -1 ); - - /* Generate! - */ - if( im_generate( out, - im_start_one, process_region, im_stop_one, - in, bun ) ) - return( -1 ); - - return( 0 ); -} diff --git a/python/vipsCC/VImage.i b/python/vipsCC/VImage.i index 9e1f10f7..f070d325 100644 --- a/python/vipsCC/VImage.i +++ b/python/vipsCC/VImage.i @@ -68,8 +68,8 @@ class VImage (VImage_core): print "VImage getattr: ", name if (is_a_valid_method (name)): return VImage_method (name) - else - raise AttributeError + else: + raise AttributeError ("unknown method %s" % name) %} /* Helper code for vips_init(). @@ -104,7 +104,7 @@ args_print (Args *args) printf ("args_print: argc = %d\n", args->argc); // +1 so we print the trailing NULL too for (i = 0; i < args->argc + 1; i++) - printf( "\t%2d)\t%s\n", i, args->argv[i]); + printf ("\t%2d)\t%s\n", i, args->argv[i]); } #endif /*DEBUG*/ @@ -170,7 +170,7 @@ vips_fatal (const char *msg) char buf[256]; im_snprintf (buf, 256, "%s\n%s", msg, im_error_buffer()); - im_error_clear(); + im_error_clear (); Py_FatalError (buf); } @@ -205,9 +205,9 @@ vips_fatal (const char *msg) &args->argc, &args->argv, &error)) { g_option_context_free (context); args_free (args); - im_error( "vipsmodule", "%s", error->message); + im_error ("vipsmodule", "%s", error->message); g_error_free (error); - vips_fatal ("can't initialise module vips_core"); + vips_fatal ("can't initialise module vips"); } g_option_context_free (context);