| /* Function dispatch tables for other. |
| * |
| * J. Cupitt, 8/2/95 |
| */ |
| |
| /* |
| |
| 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 <config.h> |
| #endif /*HAVE_CONFIG_H*/ |
| #include <vips/intl.h> |
| |
| #include <stdio.h> |
| |
| #include <vips/vips.h> |
| |
| #ifdef WITH_DMALLOC |
| #include <dmalloc.h> |
| #endif /*WITH_DMALLOC*/ |
| |
| /** |
| * SECTION: other |
| * @short_description: miscellaneous operators |
| * @stability: Stable |
| * @include: vips/vips.h |
| * |
| * Various small things. |
| * |
| */ |
| |
| /* Args for im_eye. |
| */ |
| static im_arg_desc eye_args[] = { |
| IM_OUTPUT_IMAGE( "out" ), |
| IM_INPUT_INT( "xsize" ), |
| IM_INPUT_INT( "ysize" ), |
| IM_INPUT_DOUBLE( "factor" ) |
| }; |
| |
| /* Call im_eye via arg vector. |
| */ |
| static int |
| eye_vec( im_object *argv ) |
| { |
| int xsize = *((int *) argv[1]); |
| int ysize = *((int *) argv[2]); |
| double factor = *((double *) argv[3]); |
| |
| return( im_eye( argv[0], xsize, ysize, factor ) ); |
| } |
| |
| /* Description of im_eye. |
| */ |
| static im_function eye_desc = { |
| "im_eye", /* Name */ |
| "generate IM_BANDFMT_UCHAR [0,255] frequency/amplitude image", |
| 0, /* Flags */ |
| eye_vec, /* Dispatch function */ |
| IM_NUMBER( eye_args ), /* Size of arg list */ |
| eye_args /* Arg list */ |
| }; |
| |
| /* Call im_feye via arg vector. |
| */ |
| static int |
| feye_vec( im_object *argv ) |
| { |
| int xsize = *((int *) argv[1]); |
| int ysize = *((int *) argv[2]); |
| double factor = *((double *) argv[3]); |
| |
| return( im_feye( argv[0], xsize, ysize, factor ) ); |
| } |
| |
| /* Description of im_feye. |
| */ |
| static im_function feye_desc = { |
| "im_feye", /* Name */ |
| "generate IM_BANDFMT_FLOAT [-1,1] frequency/amplitude image", |
| 0, /* Flags */ |
| feye_vec, /* Dispatch function */ |
| IM_NUMBER( eye_args ), /* Size of arg list */ |
| eye_args /* Arg list */ |
| }; |
| |
| /* Args for im_zone. |
| */ |
| static im_arg_desc zone_args[] = { |
| IM_OUTPUT_IMAGE( "out" ), |
| IM_INPUT_INT( "size" ) |
| }; |
| |
| /* Call im_zone via arg vector. |
| */ |
| static int |
| zone_vec( im_object *argv ) |
| { |
| int size = *((int *) argv[1]); |
| |
| return( im_zone( argv[0], size ) ); |
| } |
| |
| /* Description of im_zone. |
| */ |
| static im_function zone_desc = { |
| "im_zone", /* Name */ |
| "generate IM_BANDFMT_UCHAR [0,255] zone plate image", /* Description */ |
| 0, /* Flags */ |
| zone_vec, /* Dispatch function */ |
| IM_NUMBER( zone_args ), /* Size of arg list */ |
| zone_args /* Arg list */ |
| }; |
| |
| /* Call im_fzone via arg vector. |
| */ |
| static int |
| fzone_vec( im_object *argv ) |
| { |
| int size = *((int *) argv[1]); |
| |
| return( im_fzone( argv[0], size ) ); |
| } |
| |
| /* Description of im_fzone. |
| */ |
| static im_function fzone_desc = { |
| "im_fzone", /* Name */ |
| "generate IM_BANDFMT_FLOAT [-1,1] zone plate image", /* Description */ |
| 0, /* Flags */ |
| fzone_vec, /* Dispatch function */ |
| IM_NUMBER( zone_args ), /* Size of arg list */ |
| zone_args /* Arg list */ |
| }; |
| |
| /* Args for im_benchmark. |
| */ |
| static im_arg_desc benchmark_args[] = { |
| IM_INPUT_IMAGE( "in" ), |
| IM_OUTPUT_IMAGE( "out" ) |
| }; |
| |
| /* Call im_benchmark via arg vector. |
| */ |
| static int |
| benchmark_vec( im_object *argv ) |
| { |
| return( im_benchmarkn( argv[0], argv[1], 1 ) ); |
| } |
| |
| /* Description of im_benchmark. |
| */ |
| static im_function benchmark_desc = { |
| "im_benchmark", /* Name */ |
| "do something complicated for testing", /* Description */ |
| IM_FN_PIO, /* Flags */ |
| benchmark_vec, /* Dispatch function */ |
| IM_NUMBER( benchmark_args ), /* Size of arg list */ |
| benchmark_args /* Arg list */ |
| }; |
| |
| /* Args for im_benchmark2. |
| */ |
| static im_arg_desc benchmark2_args[] = { |
| IM_INPUT_IMAGE( "in" ), |
| IM_OUTPUT_DOUBLE( "value" ) |
| }; |
| |
| /* Call im_benchmark2 via arg vector. |
| */ |
| static int |
| benchmark2_vec( im_object *argv ) |
| { |
| double f; |
| |
| if( im_benchmark2( argv[0], &f ) ) |
| return( -1 ); |
| |
| *((double *) argv[1]) = f; |
| |
| return( 0 ); |
| } |
| |
| /* Description of im_benchmark2. |
| */ |
| static im_function benchmark2_desc = { |
| "im_benchmark2", /* Name */ |
| "do something complicated for testing", /* Description */ |
| IM_FN_PIO, /* Flags */ |
| benchmark2_vec, /* Dispatch function */ |
| IM_NUMBER( benchmark2_args ), /* Size of arg list */ |
| benchmark2_args /* Arg list */ |
| }; |
| |
| /* Args for im_benchmarkn. |
| */ |
| static im_arg_desc benchmarkn_args[] = { |
| IM_INPUT_IMAGE( "in" ), |
| IM_OUTPUT_IMAGE( "out" ), |
| IM_INPUT_INT( "n" ) |
| }; |
| |
| /* Call im_benchmarkn via arg vector. |
| */ |
| static int |
| benchmarkn_vec( im_object *argv ) |
| { |
| int n = *((int *) argv[2]); |
| |
| return( im_benchmarkn( argv[0], argv[1], n ) ); |
| } |
| |
| /* Description of im_benchmarkn. |
| */ |
| static im_function benchmarkn_desc = { |
| "im_benchmarkn", /* Name */ |
| "do something complicated for testing", /* Description */ |
| IM_FN_PIO, /* Flags */ |
| benchmarkn_vec, /* Dispatch function */ |
| IM_NUMBER( benchmarkn_args ), /* Size of arg list */ |
| benchmarkn_args /* Arg list */ |
| }; |
| |
| /* Args for im_grey. |
| */ |
| static im_arg_desc grey_args[] = { |
| IM_OUTPUT_IMAGE( "out" ), |
| IM_INPUT_INT( "xsize" ), |
| IM_INPUT_INT( "ysize" ) |
| }; |
| |
| /* Call im_grey via arg vector. |
| */ |
| static int |
| grey_vec( im_object *argv ) |
| { |
| int xsize = *((int *) argv[1]); |
| int ysize = *((int *) argv[2]); |
| |
| return( im_grey( argv[0], xsize, ysize ) ); |
| } |
| |
| /* Description of im_grey. |
| */ |
| static im_function grey_desc = { |
| "im_grey", /* Name */ |
| "generate IM_BANDFMT_UCHAR [0,255] grey scale image", /* Description */ |
| 0, /* Flags */ |
| grey_vec, /* Dispatch function */ |
| IM_NUMBER( grey_args ), /* Size of arg list */ |
| grey_args /* Arg list */ |
| }; |
| |
| /* Call im_fgrey via arg vector. |
| */ |
| static int |
| fgrey_vec( im_object *argv ) |
| { |
| int xsize = *((int *) argv[1]); |
| int ysize = *((int *) argv[2]); |
| |
| return( im_fgrey( argv[0], xsize, ysize ) ); |
| } |
| |
| /* Description of im_fgrey. |
| */ |
| static im_function fgrey_desc = { |
| "im_fgrey", /* Name */ |
| "generate IM_BANDFMT_FLOAT [0,1] grey scale image", /* Description */ |
| 0, /* Flags */ |
| fgrey_vec, /* Dispatch function */ |
| IM_NUMBER( grey_args ), /* Size of arg list */ |
| grey_args /* Arg list */ |
| }; |
| |
| /* Call im_make_xy via arg vector. |
| */ |
| static int |
| make_xy_vec( im_object *argv ) |
| { |
| int xsize = *((int *) argv[1]); |
| int ysize = *((int *) argv[2]); |
| |
| return( im_make_xy( argv[0], xsize, ysize ) ); |
| } |
| |
| /* Description of im_make_xy. |
| */ |
| static im_function make_xy_desc = { |
| "im_make_xy", /* Name */ |
| "generate image with pixel value equal to coordinate", /* Description */ |
| 0, /* Flags */ |
| make_xy_vec, /* Dispatch function */ |
| IM_NUMBER( grey_args ), /* Size of arg list */ |
| grey_args /* Arg list */ |
| }; |
| |
| /* Package up all these functions. |
| */ |
| static im_function *other_list[] = { |
| &benchmark_desc, |
| &benchmark2_desc, |
| &benchmarkn_desc, |
| &eye_desc, |
| &grey_desc, |
| &feye_desc, |
| &fgrey_desc, |
| &fzone_desc, |
| &make_xy_desc, |
| &zone_desc |
| }; |
| |
| /* Package of functions. |
| */ |
| im_package im__other = { |
| "other", |
| IM_NUMBER( other_list ), |
| other_list |
| }; |