/* Function dispatch tables for freq_filt. * * J. Cupitt, 23/2/95 * 22/4/97 JC * - oops, im_freqflt() was wrong */ /* 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 #include #ifdef WITH_DMALLOC #include #endif /*WITH_DMALLOC*/ /* One image in, one out. */ static im_arg_desc one_in_one_out[] = { IM_INPUT_IMAGE( "in" ), IM_OUTPUT_IMAGE( "out" ) }; /* Args to im_create_fmask(). */ static im_arg_desc create_fmask_args[] = { IM_OUTPUT_IMAGE( "out" ), IM_INPUT_INT( "width" ), IM_INPUT_INT( "height" ), IM_INPUT_INT( "type" ), IM_INPUT_DOUBLE( "p1" ), IM_INPUT_DOUBLE( "p2" ), IM_INPUT_DOUBLE( "p3" ), IM_INPUT_DOUBLE( "p4" ), IM_INPUT_DOUBLE( "p5" ) }; /* Call im_create_fmask via arg vector. */ static int create_fmask_vec( im_object *argv ) { int width = *((int *) argv[1]); int height = *((int *) argv[2]); int type = *((int *) argv[3]); double p1 = *((double *) argv[4]); double p2 = *((double *) argv[5]); double p3 = *((double *) argv[6]); double p4 = *((double *) argv[7]); double p5 = *((double *) argv[8]); return( im_create_fmask( argv[0], width, height, type, p1, p2, p3, p4, p5 ) ); } /* Description of im_create_fmask. */ static im_function create_fmask_desc = { "im_create_fmask", /* Name */ "create frequency domain filter mask", 0, /* Flags */ create_fmask_vec, /* Dispatch function */ IM_NUMBER( create_fmask_args ), /* Size of arg list */ create_fmask_args /* Arg list */ }; /* Args to im_flt_image_freq(). */ static im_arg_desc flt_image_freq_args[] = { IM_INPUT_IMAGE( "in" ), IM_OUTPUT_IMAGE( "out" ), IM_INPUT_INT( "type" ), IM_INPUT_DOUBLE( "p1" ), IM_INPUT_DOUBLE( "p2" ), IM_INPUT_DOUBLE( "p3" ), IM_INPUT_DOUBLE( "p4" ), IM_INPUT_DOUBLE( "p5" ) }; /* Call im_flt_image_freq via arg vector. */ static int flt_image_freq_vec( im_object *argv ) { int type = *((int *) argv[2]); double p1 = *((double *) argv[3]); double p2 = *((double *) argv[4]); double p3 = *((double *) argv[5]); double p4 = *((double *) argv[6]); double p5 = *((double *) argv[7]); return( im_flt_image_freq( argv[0], argv[1], type, p1, p2, p3, p4, p5 ) ); } /* Description of im_flt_image_freq. */ static im_function flt_image_freq_desc = { "im_flt_image_freq", /* Name */ "frequency domain filter image", 0, /* Flags */ flt_image_freq_vec, /* Dispatch function */ IM_NUMBER( flt_image_freq_args ), /* Size of arg list */ flt_image_freq_args /* Arg list */ }; /* Args to im_fractsurf(). */ static im_arg_desc fractsurf_args[] = { IM_OUTPUT_IMAGE( "out" ), IM_INPUT_INT( "size" ), IM_INPUT_DOUBLE( "dimension" ) }; /* Call im_fractsurf via arg vector. */ static int fractsurf_vec( im_object *argv ) { int size = *((int *) argv[1]); double dim = *((double *) argv[2]); return( im_fractsurf( argv[0], size, dim ) ); } /* Description of im_fractsurf. */ static im_function fractsurf_desc = { "im_fractsurf", /* Name */ "generate a fractal surface of given dimension", IM_FN_TRANSFORM, /* Flags */ fractsurf_vec, /* Dispatch function */ IM_NUMBER( fractsurf_args ), /* Size of arg list */ fractsurf_args /* Arg list */ }; /* Args to im_freqflt(). */ static im_arg_desc freqflt_args[] = { IM_INPUT_IMAGE( "in" ), IM_INPUT_IMAGE( "mask" ), IM_OUTPUT_IMAGE( "out" ) }; /* Call im_freqflt via arg vector. */ static int freqflt_vec( im_object *argv ) { return( im_freqflt( argv[0], argv[1], argv[2] ) ); } /* Description of im_freqflt. */ static im_function freqflt_desc = { "im_freqflt", /* Name */ "frequency-domain filter of in with mask", IM_FN_TRANSFORM, /* Flags */ freqflt_vec, /* Dispatch function */ IM_NUMBER( freqflt_args ), /* Size of arg list */ freqflt_args /* Arg list */ }; /* Call im_disp_ps via arg vector. */ static int disp_ps_vec( im_object *argv ) { return( im_disp_ps( argv[0], argv[1] ) ); } /* Description of im_disp_ps. */ static im_function disp_ps_desc = { "im_disp_ps", /* Name */ "make displayable power spectrum", IM_FN_TRANSFORM, /* Flags */ disp_ps_vec, /* Dispatch function */ IM_NUMBER( one_in_one_out ), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_rotquad via arg vector. */ static int rotquad_vec( im_object *argv ) { return( im_rotquad( argv[0], argv[1] ) ); } /* Description of im_rotquad. */ static im_function rotquad_desc = { "im_rotquad", /* Name */ "rotate image quadrants to move origin to centre", IM_FN_TRANSFORM, /* Flags */ rotquad_vec, /* Dispatch function */ IM_NUMBER( one_in_one_out ), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_fwfft via arg vector. */ static int fwfft_vec( im_object *argv ) { return( im_fwfft( argv[0], argv[1] ) ); } /* Description of im_fwfft. */ static im_function fwfft_desc = { "im_fwfft", /* Name */ "forward fast-fourier transform", IM_FN_TRANSFORM, /* Flags */ fwfft_vec, /* Dispatch function */ IM_NUMBER( one_in_one_out ), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_invfft via arg vector. */ static int invfft_vec( im_object *argv ) { return( im_invfft( argv[0], argv[1] ) ); } /* Description of im_invfft. */ static im_function invfft_desc = { "im_invfft", /* Name */ "inverse fast-fourier transform", IM_FN_TRANSFORM, /* Flags */ invfft_vec, /* Dispatch function */ IM_NUMBER( one_in_one_out ), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_invfftr via arg vector. */ static int invfftr_vec( im_object *argv ) { return( im_invfftr( argv[0], argv[1] ) ); } /* Description of im_invfftr. */ static im_function invfftr_desc = { "im_invfftr", /* Name */ "real part of inverse fast-fourier transform", IM_FN_TRANSFORM, /* Flags */ invfftr_vec, /* Dispatch function */ IM_NUMBER( one_in_one_out ), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Package up all these functions. */ static im_function *freq_list[] = { &create_fmask_desc, &disp_ps_desc, &flt_image_freq_desc, &fractsurf_desc, &freqflt_desc, &fwfft_desc, &rotquad_desc, &invfft_desc, &invfftr_desc }; /* Package of functions. */ im_package im__freq_filt = { "freq_filt", IM_NUMBER( freq_list ), freq_list };