Improve symbol visibility (#2688)

* Improve symbol visibility

* Decorate required internal symbols with VIPS_API

* Remove a couple of stray header decls

* Incorporate review comment

- Ensure symbol visibility is also set on static libraries.
- Prefer to use `cc.has_function_attribute('visibility:hidden')`.

* Don't export internal deprecated symbols

* Move deprecated symbols to vips7compat.h

* `IM_FORMAT_H` -> `VIPS_FORMAT_H`

* Move `vips_window_ref` compat stub to `vips7compat.c`

* Disable deprecation warnings internally

* `vips_image_get_kill` -> `vips_image_iskilled`

* Ensure API compatibility

* Add missing include directives

* Move `vips__init` decl to vips7compat

* Move `vips__get_sizeof_vipsobject` to vips7compat

* Fix introspection build

* Fix 2 introspection warnings

* Ensure compatibility with vipsdisp

/usr/bin/ld: tilesource.o: in function `tile_source_new_from_source':
vipsdisp/tilesource.c:1627: undefined reference to `vips__region_no_ownership'
This commit is contained in:
Kleis Auke Wolthuizen 2022-04-16 11:58:55 +02:00 committed by GitHub
parent 0c3092fa94
commit 07edfe37b1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
72 changed files with 1825 additions and 123 deletions

View File

@ -36,7 +36,9 @@
/* Define VIPS_CPLUSPLUS_EXPORTS to build a DLL using MSVC.
*/
#ifdef _MSC_VER
#ifdef _VIPS_PUBLIC
# define VIPS_CPLUSPLUS_API _VIPS_PUBLIC
#elif defined(_MSC_VER)
# ifdef VIPS_CPLUSPLUS_EXPORTS
# define VIPS_CPLUSPLUS_API __declspec(dllexport)
# else

View File

@ -9,6 +9,7 @@ libvips_cpp_lib = library('vips-cpp',
dependencies: libvips_dep,
include_directories: libvips_cpp_includedir,
version: library_version,
gnu_symbol_visibility: 'hidden',
install: true,
)

View File

@ -55,6 +55,7 @@ arithmetic_lib = static_library('arithmetic',
arithmetic_sources,
arithmetic_headers,
dependencies: libvips_deps,
gnu_symbol_visibility: 'hidden',
)
libvips_components += arithmetic_lib

View File

@ -46,6 +46,7 @@ colour_lib = static_library('colour',
colour_sources,
colour_headers,
dependencies: libvips_deps,
gnu_symbol_visibility: 'hidden',
)
libvips_components += colour_lib

View File

@ -54,6 +54,7 @@ conversion_lib = static_library('conversion',
conversion_headers,
dependencies: libvips_deps,
c_args: [ '-Wno-unknown-pragmas' ],
gnu_symbol_visibility: 'hidden',
)
libvips_components += conversion_lib

View File

@ -28,6 +28,7 @@ convolution_lib = static_library('convolution',
convolution_sources,
convolution_headers,
dependencies: libvips_deps,
gnu_symbol_visibility: 'hidden',
)
libvips_components += convolution_lib

View File

@ -41,6 +41,7 @@ create_lib = static_library('create',
create_sources,
create_headers,
dependencies: libvips_deps,
gnu_symbol_visibility: 'hidden',
)
libvips_components += create_lib

View File

@ -95,6 +95,8 @@ libvips_sources += deprecated_sources
deprecated_lib = static_library('deprecated',
deprecated_sources,
dependencies: libvips_deps,
c_args: [ '-DVIPS_DISABLE_DEPRECATION_WARNINGS' ],
gnu_symbol_visibility: 'hidden',
)
libvips_components += deprecated_lib

View File

@ -5765,3 +5765,19 @@ vips__ink_to_vector( const char *domain, VipsImage *im, VipsPel *ink, int *n )
return( result );
}
/* Old API. Just a compat stub now.
*/
VipsWindow *
vips_window_ref( VipsImage *im, int top, int height )
{
return( NULL );
}
/* Deprecated.
*/
size_t
vips__get_sizeof_vipsobject( void )
{
return( sizeof( VipsObject ) );
}

View File

@ -21,6 +21,7 @@ draw_lib = static_library('draw',
draw_sources,
draw_headers,
dependencies: libvips_deps,
gnu_symbol_visibility: 'hidden',
)
libvips_components += draw_lib

View File

@ -127,6 +127,7 @@ foreign_lib = static_library('foreign',
foreign_sources,
foreign_headers,
dependencies: libvips_deps,
gnu_symbol_visibility: 'hidden',
)
libvips_components += foreign_lib

View File

@ -17,6 +17,7 @@ freqfilt_lib = static_library('freqfilt',
freqfilt_sources,
freqfilt_headers,
dependencies: libvips_deps,
gnu_symbol_visibility: 'hidden',
)
libvips_components += freqfilt_lib

View File

@ -26,6 +26,7 @@ histogram_lib = static_library('histogram',
histogram_sources,
histogram_headers,
dependencies: libvips_deps,
gnu_symbol_visibility: 'hidden',
)
libvips_components += histogram_lib

View File

@ -63,18 +63,27 @@ typedef struct {
*(channel select) */
} IMAGE_BOX;
VIPS_DEPRECATED
int im_extract( IMAGE *, IMAGE *, IMAGE_BOX * );
VIPS_DEPRECATED
DOUBLEMASK *im_measure( IMAGE *im, IMAGE_BOX *box, int h, int v,
int *sel, int nsel, const char *name );
VIPS_DEPRECATED
gboolean im_isuint( IMAGE *im );
VIPS_DEPRECATED
gboolean im_isint( IMAGE *im );
VIPS_DEPRECATED
gboolean im_isfloat( IMAGE *im );
VIPS_DEPRECATED
gboolean im_isscalar( IMAGE *im );
VIPS_DEPRECATED
gboolean im_iscomplex( IMAGE *im );
VIPS_DEPRECATED
int im_c2ps( IMAGE *in, IMAGE *out );
VIPS_DEPRECATED
int im_clip( IMAGE *in, IMAGE *out );
#define MASK_IDEAL_HIGHPASS IM_MASK_IDEAL_HIGHPASS
@ -111,7 +120,9 @@ typedef enum {
IM_ARCH_MSB_FIRST
} im_arch_type;
VIPS_DEPRECATED
gboolean im_isnative( im_arch_type arch );
VIPS_DEPRECATED
int im_copy_from( IMAGE *in, IMAGE *out, im_arch_type architecture );
/* Backwards compatibility macros.
@ -121,16 +132,22 @@ int im_copy_from( IMAGE *in, IMAGE *out, im_arch_type architecture );
/* Deprecated API.
*/
VIPS_DEPRECATED_FOR(vips_error)
void im_errormsg( const char *fmt, ... )
__attribute__((format(printf, 1, 2)));
VIPS_DEPRECATED_FOR(vips_verror)
void im_verrormsg( const char *fmt, va_list ap );
VIPS_DEPRECATED_FOR(vips_error_system)
void im_errormsg_system( int err, const char *fmt, ... )
__attribute__((format(printf, 2, 3)));
VIPS_DEPRECATED_FOR(g_info)
void im_diagnostics( const char *fmt, ... )
__attribute__((format(printf, 1, 2)));
VIPS_DEPRECATED_FOR(g_warning)
void im_warning( const char *fmt, ... )
__attribute__((format(printf, 1, 2)));
VIPS_DEPRECATED
int im_iterate( VipsImage *im,
VipsStartFn start, im_generate_fn generate, VipsStopFn stop,
void *a, void *b
@ -138,45 +155,67 @@ int im_iterate( VipsImage *im,
/* Async rendering.
*/
VIPS_DEPRECATED_FOR(vips_sink_screen)
int im_render_priority( VipsImage *in, VipsImage *out, VipsImage *mask,
int width, int height, int max,
int priority,
void (*notify)( VipsImage *, VipsRect *, void * ), void *client );
VIPS_DEPRECATED_FOR(vips_sink_screen)
int im_cache( VipsImage *in, VipsImage *out, int width, int height, int max );
/* Deprecated operations.
*/
VIPS_DEPRECATED
int im_cmulnorm( IMAGE *in1, IMAGE *in2, IMAGE *out );
VIPS_DEPRECATED
int im_fav4( IMAGE **, IMAGE * );
VIPS_DEPRECATED
int im_gadd( double, IMAGE *, double, IMAGE *, double, IMAGE *);
VIPS_DEPRECATED
int im_litecor( IMAGE *, IMAGE *, IMAGE *, int, double );
VIPS_DEPRECATED_FOR(vips_sink_screen)
int im_render_fade( IMAGE *in, IMAGE *out, IMAGE *mask,
int width, int height, int max,
int fps, int steps,
int priority,
void (*notify)( IMAGE *, VipsRect *, void * ), void *client );
VIPS_DEPRECATED_FOR(vips_sink_screen)
int im_render( IMAGE *in, IMAGE *out, IMAGE *mask,
int width, int height, int max,
void (*notify)( IMAGE *, VipsRect *, void * ), void *client );
VIPS_DEPRECATED
int im_cooc_matrix( IMAGE *im, IMAGE *m,
int xp, int yp, int xs, int ys, int dx, int dy, int flag );
VIPS_DEPRECATED
int im_cooc_asm( IMAGE *m, double *asmoment );
VIPS_DEPRECATED
int im_cooc_contrast( IMAGE *m, double *contrast );
VIPS_DEPRECATED
int im_cooc_correlation( IMAGE *m, double *correlation );
VIPS_DEPRECATED
int im_cooc_entropy( IMAGE *m, double *entropy );
VIPS_DEPRECATED
int im_glds_matrix( IMAGE *im, IMAGE *m,
int xpos, int ypos, int xsize, int ysize, int dx, int dy );
VIPS_DEPRECATED
int im_glds_asm( IMAGE *m, double *asmoment );
VIPS_DEPRECATED
int im_glds_contrast( IMAGE *m, double *contrast );
VIPS_DEPRECATED
int im_glds_entropy( IMAGE *m, double *entropy );
VIPS_DEPRECATED
int im_glds_mean( IMAGE *m, double *mean );
VIPS_DEPRECATED
int im_dif_std(IMAGE *im, int xpos, int ypos, int xsize, int ysize, int dx, int dy, double *pmean, double *pstd);
VIPS_DEPRECATED
int im_simcontr( IMAGE *out, int xsize, int ysize );
VIPS_DEPRECATED
int im_spatres( IMAGE *in, IMAGE *out, int step );
VIPS_DEPRECATED
int im_stretch3( IMAGE *in, IMAGE *out, double dx, double dy );
/* Renamed operations.
@ -184,118 +223,184 @@ int im_stretch3( IMAGE *in, IMAGE *out, double dx, double dy );
/* arithmetic
*/
VIPS_DEPRECATED_FOR(vips_remainder_const)
int im_remainderconst_vec( IMAGE *in, IMAGE *out, int n, double *c );
/* boolean
*/
VIPS_DEPRECATED_FOR(vips_andimage_const1)
int im_andconst( IMAGE *, IMAGE *, double );
VIPS_DEPRECATED_FOR(vips_andimage_const)
int im_and_vec( IMAGE *, IMAGE *, int, double * );
VIPS_DEPRECATED_FOR(vips_orimage_const1)
int im_orconst( IMAGE *, IMAGE *, double );
VIPS_DEPRECATED_FOR(vips_orimage_const)
int im_or_vec( IMAGE *, IMAGE *, int, double * );
VIPS_DEPRECATED_FOR(vips_eorimage_const1)
int im_eorconst( IMAGE *, IMAGE *, double );
VIPS_DEPRECATED_FOR(vips_eorimage_const)
int im_eor_vec( IMAGE *, IMAGE *, int, double * );
/* mosaicing
*/
VIPS_DEPRECATED_FOR(vips_affine)
int im_affine( IMAGE *in, IMAGE *out,
double a, double b, double c, double d, double dx, double dy,
int ox, int oy, int ow, int oh );
VIPS_DEPRECATED_FOR(vips_similarity)
int im_similarity( IMAGE *in, IMAGE *out,
double a, double b, double dx, double dy );
VIPS_DEPRECATED_FOR(vips_similarity)
int im_similarity_area( IMAGE *in, IMAGE *out,
double a, double b, double dx, double dy,
int ox, int oy, int ow, int oh );
/* colour
*/
VIPS_DEPRECATED_FOR(vips_icc_export)
int im_icc_export( IMAGE *in, IMAGE *out,
const char *output_profile_filename, int intent );
/* conversion
*/
VIPS_DEPRECATED_FOR(vips_cast)
int im_clip2dcm( IMAGE *in, IMAGE *out );
VIPS_DEPRECATED_FOR(vips_cast)
int im_clip2cm( IMAGE *in, IMAGE *out );
VIPS_DEPRECATED_FOR(vips_cast)
int im_clip2us( IMAGE *in, IMAGE *out );
VIPS_DEPRECATED_FOR(vips_cast)
int im_clip2ui( IMAGE *in, IMAGE *out );
VIPS_DEPRECATED_FOR(vips_cast)
int im_clip2s( IMAGE *in, IMAGE *out );
VIPS_DEPRECATED_FOR(vips_cast)
int im_clip2i( IMAGE *in, IMAGE *out );
VIPS_DEPRECATED_FOR(vips_cast)
int im_clip2d( IMAGE *in, IMAGE *out );
VIPS_DEPRECATED_FOR(vips_cast)
int im_clip2f( IMAGE *in, IMAGE *out );
VIPS_DEPRECATED_FOR(vips_cast)
int im_clip2c( IMAGE *in, IMAGE *out );
VIPS_DEPRECATED
int im_slice( IMAGE *in, IMAGE *out, double, double );
VIPS_DEPRECATED
int im_thresh( IMAGE *in, IMAGE *out, double );
VIPS_DEPRECATED_FOR(printf)
int im_print( const char *message );
VIPS_DEPRECATED
int im_convsub( IMAGE *in, IMAGE *out, INTMASK *mask, int xskip, int yskip );
VIPS_DEPRECATED
int im_bernd( const char *tiffname, int x, int y, int w, int h );
VIPS_DEPRECATED
int im_resize_linear( IMAGE *, IMAGE *, int, int );
VIPS_DEPRECATED_FOR(vips_convf)
int im_convf( IMAGE *in, IMAGE *out, DOUBLEMASK *mask );
VIPS_DEPRECATED_FOR(vips_convsep)
int im_convsepf( IMAGE *in, IMAGE *out, DOUBLEMASK *mask );
VIPS_DEPRECATED
int im_conv_raw( IMAGE *in, IMAGE *out, INTMASK *mask );
VIPS_DEPRECATED
int im_convf_raw( IMAGE *in, IMAGE *out, DOUBLEMASK *mask );
VIPS_DEPRECATED
int im_convsep_raw( IMAGE *in, IMAGE *out, INTMASK *mask );
VIPS_DEPRECATED
int im_convsepf_raw( IMAGE *in, IMAGE *out, DOUBLEMASK *mask );
VIPS_DEPRECATED
int im_fastcor_raw( IMAGE *in, IMAGE *ref, IMAGE *out );
VIPS_DEPRECATED
int im_spcor_raw( IMAGE *in, IMAGE *ref, IMAGE *out );
VIPS_DEPRECATED
int im_gradcor_raw( IMAGE *in, IMAGE *ref, IMAGE *out );
VIPS_DEPRECATED
int im_contrast_surface_raw( IMAGE *in, IMAGE *out,
int half_win_size, int spacing );
VIPS_DEPRECATED_FOR(vips_stdif)
int im_stdif_raw( IMAGE *in, IMAGE *out,
double a, double m0, double b, double s0, int xwin, int ywin );
VIPS_DEPRECATED_FOR(vips_hist_local)
int im_lhisteq_raw( IMAGE *in, IMAGE *out, int xwin, int ywin );
VIPS_DEPRECATED_FOR(vips_morph)
int im_erode_raw( IMAGE *in, IMAGE *out, INTMASK *m );
VIPS_DEPRECATED_FOR(vips_morph)
int im_dilate_raw( IMAGE *in, IMAGE *out, INTMASK *m );
VIPS_DEPRECATED
int im_rank_raw( IMAGE *in, IMAGE *out, int xsize, int ysize, int order );
/* inplace
*/
VIPS_DEPRECATED_FOR(vips_draw_circle)
int im_circle( IMAGE *im, int cx, int cy, int radius, int intensity );
VIPS_DEPRECATED_FOR(vips_draw_line1)
int im_line( IMAGE *, int, int, int, int, int );
VIPS_DEPRECATED_FOR(vips_labelregions)
int im_segment( IMAGE *test, IMAGE *mask, int *segments );
VIPS_DEPRECATED_FOR(vips_draw_rect)
int im_paintrect( IMAGE *im, VipsRect *r, PEL *ink );
VIPS_DEPRECATED_FOR(vips_draw_image)
int im_insertplace( IMAGE *main, IMAGE *sub, int x, int y );
VIPS_DEPRECATED_FOR(vips_draw_flood)
int im_flood_copy( IMAGE *in, IMAGE *out, int x, int y, PEL *ink );
VIPS_DEPRECATED_FOR(vips_draw_flood)
int im_flood_blob_copy( IMAGE *in, IMAGE *out, int x, int y, PEL *ink );
VIPS_DEPRECATED_FOR(vips_draw_flood)
int im_flood_other_copy( IMAGE *test, IMAGE *mark, IMAGE *out,
int x, int y, int serial );
VIPS_DEPRECATED_FOR(vips_draw_flood)
int im_flood( IMAGE *im, int x, int y, PEL *ink, VipsRect *dout );
VIPS_DEPRECATED_FOR(vips_draw_flood)
int im_flood_blob( IMAGE *im, int x, int y, PEL *ink, VipsRect *dout );
VIPS_DEPRECATED_FOR(vips_draw_flood)
int im_flood_other( IMAGE *test, IMAGE *mark,
int x, int y, int serial, VipsRect *dout );
VIPS_DEPRECATED_FOR(vips_draw_line)
int im_fastline( IMAGE *im, int x1, int y1, int x2, int y2, PEL *pel );
VIPS_DEPRECATED_FOR(vips_draw_line)
int im_fastlineuser( IMAGE *im,
int x1, int y1, int x2, int y2,
VipsPlotFn fn, void *client1, void *client2, void *client3 );
VIPS_DEPRECATED_FOR(vips_draw_mask)
int im_plotmask( IMAGE *im, int ix, int iy, PEL *ink, PEL *mask, VipsRect *r );
VIPS_DEPRECATED_FOR(vips_getpoint)
int im_readpoint( IMAGE *im, int x, int y, PEL *pel );
VIPS_DEPRECATED_FOR(vips_draw_point)
int im_plotpoint( IMAGE *im, int x, int y, PEL *pel );
VIPS_DEPRECATED_FOR(vips_draw_smudge)
int im_smudge( IMAGE *image, int ix, int iy, VipsRect *r );
VIPS_DEPRECATED
int im_smear( IMAGE *im, int ix, int iy, VipsRect *r );
VIPS_DEPRECATED_FOR(g_warning)
void vips_warn( const char *domain, const char *fmt, ... )
__attribute__((format(printf, 2, 3)));
VIPS_DEPRECATED_FOR(g_warning)
void vips_vwarn( const char *domain, const char *fmt, va_list ap );
VIPS_DEPRECATED
void vips_info_set( gboolean info );
VIPS_DEPRECATED_FOR(g_info)
void vips_info( const char *domain, const char *fmt, ... )
__attribute__((format(printf, 2, 3)));
VIPS_DEPRECATED_FOR(g_info)
void vips_vinfo( const char *domain, const char *fmt, va_list ap );
VIPS_DEPRECATED_FOR(vips_autorot)
VipsAngle vips_autorot_get_angle( VipsImage *image );
/* iofuncs
*/
VIPS_DEPRECATED_FOR(g_free)
int vips_free( void *buf );
#ifdef __cplusplus

View File

@ -191,266 +191,376 @@ typedef enum {
VIPS_OPERATION_COMPLEXGET_LAST
} VipsOperationComplexget;
VIPS_API
int vips_add( VipsImage *left, VipsImage *right, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_sum( VipsImage **in, VipsImage **out, int n, ... )
__attribute__((sentinel));
VIPS_API
int vips_subtract( VipsImage *in1, VipsImage *in2, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_multiply( VipsImage *left, VipsImage *right, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_divide( VipsImage *left, VipsImage *right, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_linear( VipsImage *in, VipsImage **out,
const double *a, const double *b, int n, ... )
__attribute__((sentinel));
VIPS_API
int vips_linear1( VipsImage *in, VipsImage **out, double a, double b, ... )
__attribute__((sentinel));
VIPS_API
int vips_remainder( VipsImage *left, VipsImage *right, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_remainder_const( VipsImage *in, VipsImage **out,
const double *c, int n, ... )
__attribute__((sentinel));
VIPS_API
int vips_remainder_const1( VipsImage *in, VipsImage **out,
double c, ... )
__attribute__((sentinel));
VIPS_API
int vips_invert( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_abs( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_sign( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_round( VipsImage *in, VipsImage **out, VipsOperationRound round, ... )
__attribute__((sentinel));
VIPS_API
int vips_floor( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_ceil( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_rint( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_math( VipsImage *in, VipsImage **out,
VipsOperationMath math, ... )
__attribute__((sentinel));
VIPS_API
int vips_sin( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_cos( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_tan( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_asin( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_acos( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_atan( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_exp( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_exp10( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_log( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_log10( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_sinh( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_cosh( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_tanh( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_asinh( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_acosh( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_atanh( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_complex( VipsImage *in, VipsImage **out,
VipsOperationComplex cmplx, ... )
__attribute__((sentinel));
VIPS_API
int vips_polar( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_rect( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_conj( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_complex2( VipsImage *left, VipsImage *right, VipsImage **out,
VipsOperationComplex2 cmplx, ... )
__attribute__((sentinel));
VIPS_API
int vips_cross_phase( VipsImage *left, VipsImage *right, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_complexget( VipsImage *in, VipsImage **out,
VipsOperationComplexget get, ... )
__attribute__((sentinel));
VIPS_API
int vips_real( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_imag( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_complexform( VipsImage *left, VipsImage *right, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_relational( VipsImage *left, VipsImage *right, VipsImage **out,
VipsOperationRelational relational, ... )
__attribute__((sentinel));
VIPS_API
int vips_equal( VipsImage *left, VipsImage *right, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_notequal( VipsImage *left, VipsImage *right, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_less( VipsImage *left, VipsImage *right, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_lesseq( VipsImage *left, VipsImage *right, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_more( VipsImage *left, VipsImage *right, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_moreeq( VipsImage *left, VipsImage *right, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_relational_const( VipsImage *in, VipsImage **out,
VipsOperationRelational relational, const double *c, int n, ... )
__attribute__((sentinel));
VIPS_API
int vips_equal_const( VipsImage *in, VipsImage **out,
const double *c, int n, ... )
__attribute__((sentinel));
VIPS_API
int vips_notequal_const( VipsImage *in, VipsImage **out,
const double *c, int n, ... )
__attribute__((sentinel));
VIPS_API
int vips_less_const( VipsImage *in, VipsImage **out,
const double *c, int n, ... )
__attribute__((sentinel));
VIPS_API
int vips_lesseq_const( VipsImage *in, VipsImage **out,
const double *c, int n, ... )
__attribute__((sentinel));
VIPS_API
int vips_more_const( VipsImage *in, VipsImage **out,
const double *c, int n, ... )
__attribute__((sentinel));
VIPS_API
int vips_moreeq_const( VipsImage *in, VipsImage **out,
const double *c, int n, ... )
__attribute__((sentinel));
VIPS_API
int vips_relational_const1( VipsImage *in, VipsImage **out,
VipsOperationRelational relational, double c, ... )
__attribute__((sentinel));
VIPS_API
int vips_equal_const1( VipsImage *in, VipsImage **out, double c, ... )
__attribute__((sentinel));
VIPS_API
int vips_notequal_const1( VipsImage *in, VipsImage **out, double c, ... )
__attribute__((sentinel));
VIPS_API
int vips_less_const1( VipsImage *in, VipsImage **out, double c, ... )
__attribute__((sentinel));
VIPS_API
int vips_lesseq_const1( VipsImage *in, VipsImage **out, double c, ... )
__attribute__((sentinel));
VIPS_API
int vips_more_const1( VipsImage *in, VipsImage **out, double c, ... )
__attribute__((sentinel));
VIPS_API
int vips_moreeq_const1( VipsImage *in, VipsImage **out, double c, ... )
__attribute__((sentinel));
VIPS_API
int vips_boolean( VipsImage *left, VipsImage *right, VipsImage **out,
VipsOperationBoolean boolean, ... )
__attribute__((sentinel));
VIPS_API
int vips_andimage( VipsImage *left, VipsImage *right, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_orimage( VipsImage *left, VipsImage *right, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_eorimage( VipsImage *left, VipsImage *right, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_lshift( VipsImage *left, VipsImage *right, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_rshift( VipsImage *left, VipsImage *right, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_boolean_const( VipsImage *in, VipsImage **out,
VipsOperationBoolean boolean, const double *c, int n, ... )
__attribute__((sentinel));
VIPS_API
int vips_andimage_const( VipsImage *in, VipsImage **out,
const double *c, int n, ... )
__attribute__((sentinel));
VIPS_API
int vips_orimage_const( VipsImage *in, VipsImage **out,
const double *c, int n, ... )
__attribute__((sentinel));
VIPS_API
int vips_eorimage_const( VipsImage *in, VipsImage **out,
const double *c, int n, ... )
__attribute__((sentinel));
VIPS_API
int vips_lshift_const( VipsImage *in, VipsImage **out,
const double *c, int n, ... )
__attribute__((sentinel));
VIPS_API
int vips_rshift_const( VipsImage *in, VipsImage **out,
const double *c, int n, ... )
__attribute__((sentinel));
VIPS_API
int vips_boolean_const1( VipsImage *in, VipsImage **out,
VipsOperationBoolean boolean, double c, ... )
__attribute__((sentinel));
VIPS_API
int vips_andimage_const1( VipsImage *in, VipsImage **out, double c, ... )
__attribute__((sentinel));
VIPS_API
int vips_orimage_const1( VipsImage *in, VipsImage **out, double c, ... )
__attribute__((sentinel));
VIPS_API
int vips_eorimage_const1( VipsImage *in, VipsImage **out, double c, ... )
__attribute__((sentinel));
VIPS_API
int vips_lshift_const1( VipsImage *in, VipsImage **out, double c, ... )
__attribute__((sentinel));
VIPS_API
int vips_rshift_const1( VipsImage *in, VipsImage **out, double c, ... )
__attribute__((sentinel));
VIPS_API
int vips_math2( VipsImage *left, VipsImage *right, VipsImage **out,
VipsOperationMath2 math2, ... )
__attribute__((sentinel));
VIPS_API
int vips_pow( VipsImage *left, VipsImage *right, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_wop( VipsImage *left, VipsImage *right, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_atan2( VipsImage *left, VipsImage *right, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_math2_const( VipsImage *in, VipsImage **out,
VipsOperationMath2 math2, const double *c, int n, ... )
__attribute__((sentinel));
VIPS_API
int vips_pow_const( VipsImage *in, VipsImage **out,
const double *c, int n, ... )
__attribute__((sentinel));
VIPS_API
int vips_wop_const( VipsImage *in, VipsImage **out,
const double *c, int n, ... )
__attribute__((sentinel));
VIPS_API
int vips_atan2_const( VipsImage *in, VipsImage **out,
const double *c, int n, ... )
__attribute__((sentinel));
VIPS_API
int vips_math2_const1( VipsImage *in, VipsImage **out,
VipsOperationMath2 math2, double c, ... )
__attribute__((sentinel));
VIPS_API
int vips_pow_const1( VipsImage *in, VipsImage **out, double c, ... )
__attribute__((sentinel));
VIPS_API
int vips_wop_const1( VipsImage *in, VipsImage **out, double c, ... )
__attribute__((sentinel));
VIPS_API
int vips_atan2_const1( VipsImage *in, VipsImage **out, double c, ... )
__attribute__((sentinel));
VIPS_API
int vips_avg( VipsImage *in, double *out, ... )
__attribute__((sentinel));
VIPS_API
int vips_deviate( VipsImage *in, double *out, ... )
__attribute__((sentinel));
VIPS_API
int vips_min( VipsImage *in, double *out, ... )
__attribute__((sentinel));
VIPS_API
int vips_max( VipsImage *in, double *out, ... )
__attribute__((sentinel));
VIPS_API
int vips_stats( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_measure( VipsImage *in, VipsImage **out, int h, int v, ... )
__attribute__((sentinel));
VIPS_API
int vips_find_trim( VipsImage *in,
int *left, int *top, int *width, int *height, ... )
__attribute__((sentinel));
VIPS_API
int vips_getpoint( VipsImage *in, double **vector, int *n, int x, int y, ... )
__attribute__((sentinel));
VIPS_API
int vips_hist_find( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_hist_find_ndim( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_hist_find_indexed( VipsImage *in, VipsImage *index,
VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_hough_line( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_hough_circle( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_project( VipsImage *in, VipsImage **columns, VipsImage **rows, ... )
__attribute__((sentinel));
VIPS_API
int vips_profile( VipsImage *in, VipsImage **columns, VipsImage **rows, ... )
__attribute__((sentinel));

View File

@ -34,6 +34,28 @@
#ifndef VIPS_BASIC_H
#define VIPS_BASIC_H
/* Defined in config.h
*/
#ifdef _VIPS_PUBLIC
# define VIPS_API _VIPS_PUBLIC extern
#else
# define VIPS_API extern
#endif
/* VIPS_DISABLE_DEPRECATION_WARNINGS:
*
* Disable deprecation warnings from VIPS API.
*
* Must be defined before including `vips/vips.h`.
*/
#ifdef VIPS_DISABLE_DEPRECATION_WARNINGS
# define VIPS_DEPRECATED VIPS_API
# define VIPS_DEPRECATED_FOR(f) VIPS_API
#else
# define VIPS_DEPRECATED G_DEPRECATED VIPS_API
# define VIPS_DEPRECATED_FOR(f) G_DEPRECATED_FOR(f) VIPS_API
#endif
#ifdef __cplusplus
extern "C" {
#endif /*__cplusplus*/
@ -68,13 +90,17 @@ typedef enum {
/* Just for testing.
*/
VIPS_API
char *vips_path_filename7( const char *path );
VIPS_API
char *vips_path_mode7( const char *path );
struct _VipsImage;
typedef struct _VipsImage VipsImage;
struct _VipsRegion;
typedef struct _VipsRegion VipsRegion;
struct _VipsBuf;
typedef struct _VipsBuf VipsBuf;
struct _VipsSource;
typedef struct _VipsSource VipsSource;
struct _VipsTarget;

View File

@ -33,6 +33,7 @@
#include <glib.h>
#include <glib-object.h>
#include <vips/basic.h>
#ifdef __cplusplus
extern "C" {
@ -43,7 +44,7 @@ extern "C" {
* writes.
*/
typedef struct _VipsBuf {
struct _VipsBuf {
/* All fields are private.
*/
/*< private >*/
@ -53,37 +54,61 @@ typedef struct _VipsBuf {
gboolean full; /* String has filled, block writes */
int lasti; /* For read-recent */
gboolean dynamic; /* We own the string with malloc() */
} VipsBuf;
};
#define VIPS_BUF_STATIC( TEXT ) \
{ &TEXT[0], sizeof( TEXT ), 0, FALSE, 0, FALSE }
/* Init and append to one of the above.
*/
VIPS_API
void vips_buf_rewind( VipsBuf *buf );
VIPS_API
void vips_buf_destroy( VipsBuf *buf );
VIPS_API
void vips_buf_init( VipsBuf *buf );
VIPS_API
void vips_buf_set_static( VipsBuf *buf, char *base, int mx );
VIPS_API
void vips_buf_set_dynamic( VipsBuf *buf, int mx );
VIPS_API
void vips_buf_init_static( VipsBuf *buf, char *base, int mx );
VIPS_API
void vips_buf_init_dynamic( VipsBuf *buf, int mx );
VIPS_API
gboolean vips_buf_appendns( VipsBuf *buf, const char *str, int sz );
VIPS_API
gboolean vips_buf_appends( VipsBuf *buf, const char *str );
VIPS_API
gboolean vips_buf_appendf( VipsBuf *buf, const char *fmt, ... )
__attribute__((format(printf, 2, 3)));
VIPS_API
gboolean vips_buf_vappendf( VipsBuf *buf, const char *fmt, va_list ap );
VIPS_API
gboolean vips_buf_appendc( VipsBuf *buf, char ch );
VIPS_API
gboolean vips_buf_appendsc( VipsBuf *buf, gboolean quote, const char *str );
VIPS_API
gboolean vips_buf_appendgv( VipsBuf *buf, GValue *value );
VIPS_API
gboolean vips_buf_append_size( VipsBuf *buf, size_t n );
VIPS_API
gboolean vips_buf_removec( VipsBuf *buf, char ch );
VIPS_API
gboolean vips_buf_change( VipsBuf *buf, const char *o, const char *n );
VIPS_API
gboolean vips_buf_is_empty( VipsBuf *buf );
VIPS_API
gboolean vips_buf_is_full( VipsBuf *buf );
VIPS_API
const char *vips_buf_all( VipsBuf *buf );
VIPS_API
const char *vips_buf_firstline( VipsBuf *buf );
VIPS_API
gboolean vips_buf_appendg( VipsBuf *buf, double g );
VIPS_API
gboolean vips_buf_appendd( VipsBuf *buf, int d );
VIPS_API
int vips_buf_len( VipsBuf *buf );
#ifdef __cplusplus

View File

@ -107,131 +107,195 @@ typedef enum {
VIPS_PCS_LAST
} VipsPCS;
VIPS_API
gboolean vips_colourspace_issupported( const VipsImage *image );
VIPS_API
int vips_colourspace( VipsImage *in, VipsImage **out,
VipsInterpretation space, ... )
__attribute__((sentinel));
VIPS_API
int vips_LabQ2sRGB( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_rad2float( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_float2rad( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_LabS2LabQ( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_LabQ2LabS( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_LabQ2Lab( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_Lab2LabQ( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_LCh2Lab( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_Lab2LCh( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_Yxy2Lab( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_CMC2XYZ( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_Lab2XYZ( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_XYZ2Lab( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_XYZ2scRGB( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_scRGB2sRGB( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_scRGB2BW( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_sRGB2scRGB( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_scRGB2XYZ( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_HSV2sRGB( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_sRGB2HSV( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_LCh2CMC( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_CMC2LCh( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_XYZ2Yxy( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_Yxy2XYZ( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_LabS2Lab( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_Lab2LabS( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_CMYK2XYZ( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_XYZ2CMYK( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_profile_load( const char *name, VipsBlob **profile, ... )
__attribute__((sentinel));
VIPS_API
int vips_icc_present( void );
VIPS_API
int vips_icc_transform( VipsImage *in, VipsImage **out,
const char *output_profile, ... )
__attribute__((sentinel));
VIPS_API
int vips_icc_import( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_icc_export( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_icc_ac2rc( VipsImage *in, VipsImage **out,
const char *profile_filename );
VIPS_API
gboolean vips_icc_is_compatible_profile( VipsImage *image,
const void *data, size_t data_length );
VIPS_API
int vips_dE76( VipsImage *left, VipsImage *right, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_dE00( VipsImage *left, VipsImage *right, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_dECMC( VipsImage *left, VipsImage *right, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
void vips_col_Lab2XYZ( float L, float a, float b,
float *X, float *Y, float *Z );
VIPS_API
void vips_col_XYZ2Lab( float X, float Y, float Z,
float *L, float *a, float *b );
VIPS_API
double vips_col_ab2h( double a, double b );
VIPS_API
void vips_col_ab2Ch( float a, float b, float *C, float *h );
VIPS_API
void vips_col_Ch2ab( float C, float h, float *a, float *b );
VIPS_API
float vips_col_L2Lcmc( float L );
VIPS_API
float vips_col_C2Ccmc( float C );
VIPS_API
float vips_col_Ch2hcmc( float C, float h );
VIPS_API
void vips_col_make_tables_CMC( void );
VIPS_API
float vips_col_Lcmc2L( float Lcmc );
VIPS_API
float vips_col_Ccmc2C( float Ccmc );
VIPS_API
float vips_col_Chcmc2h( float C, float hcmc );
VIPS_API
int vips_col_sRGB2scRGB_8( int r, int g, int b, float *R, float *G, float *B );
VIPS_API
int vips_col_sRGB2scRGB_16( int r, int g, int b, float *R, float *G, float *B );
VIPS_API
int vips_col_sRGB2scRGB_8_noclip( int r, int g, int b,
float *R, float *G, float *B );
VIPS_API
int vips_col_sRGB2scRGB_16_noclip( int r, int g, int b,
float *R, float *G, float *B );
VIPS_API
int vips_col_scRGB2XYZ( float R, float G, float B,
float *X, float *Y, float *Z );
VIPS_API
int vips_col_XYZ2scRGB( float X, float Y, float Z,
float *R, float *G, float *B );
VIPS_API
int vips_col_scRGB2sRGB_8( float R, float G, float B,
int *r, int *g, int *b, int *og );
VIPS_API
int vips_col_scRGB2sRGB_16( float R, float G, float B,
int *r, int *g, int *b, int *og );
VIPS_API
int vips_col_scRGB2BW_16( float R, float G, float B, int *g, int *og );
VIPS_API
int vips_col_scRGB2BW_8( float R, float G, float B, int *g, int *og );
VIPS_API
float vips_pythagoras( float L1, float a1, float b1,
float L2, float a2, float b2 );
VIPS_API
float vips_col_dE00(
float L1, float a1, float b1, float L2, float a2, float b2 );

View File

@ -90,11 +90,15 @@ typedef struct _VipsConnectionClass {
} VipsConnectionClass;
VIPS_API
GType vips_connection_get_type( void );
VIPS_API
const char *vips_connection_filename( VipsConnection *connection );
VIPS_API
const char *vips_connection_nick( VipsConnection *connection );
VIPS_API
void vips_pipe_read_limit_set( gint64 limit );
#define VIPS_TYPE_SOURCE (vips_source_get_type())
@ -211,27 +215,46 @@ typedef struct _VipsSourceClass {
} VipsSourceClass;
VIPS_API
GType vips_source_get_type( void );
VIPS_API
VipsSource *vips_source_new_from_descriptor( int descriptor );
VIPS_API
VipsSource *vips_source_new_from_file( const char *filename );
VIPS_API
VipsSource *vips_source_new_from_blob( VipsBlob *blob );
VIPS_API
VipsSource *vips_source_new_from_memory( const void *data, size_t size );
VIPS_API
VipsSource *vips_source_new_from_options( const char *options );
VIPS_API
void vips_source_minimise( VipsSource *source );
VIPS_API
int vips_source_unminimise( VipsSource *source );
VIPS_API
int vips_source_decode( VipsSource *source );
VIPS_API
gint64 vips_source_read( VipsSource *source, void *data, size_t length );
VIPS_API
gboolean vips_source_is_mappable( VipsSource *source );
VIPS_API
gboolean vips_source_is_file( VipsSource *source );
VIPS_API
const void *vips_source_map( VipsSource *source, size_t *length );
VIPS_API
VipsBlob *vips_source_map_blob( VipsSource *source );
VIPS_API
gint64 vips_source_seek( VipsSource *source, gint64 offset, int whence );
VIPS_API
int vips_source_rewind( VipsSource *source );
VIPS_API
gint64 vips_source_sniff_at_most( VipsSource *source,
unsigned char **data, size_t length );
VIPS_API
unsigned char *vips_source_sniff( VipsSource *source, size_t length );
VIPS_API
gint64 vips_source_length( VipsSource *source );
#define VIPS_TYPE_SOURCE_CUSTOM (vips_source_custom_get_type())
@ -269,7 +292,9 @@ typedef struct _VipsSourceCustomClass {
} VipsSourceCustomClass;
VIPS_API
GType vips_source_custom_get_type( void );
VIPS_API
VipsSourceCustom *vips_source_custom_new( void );
/* A GInputStream that wraps a VipsSource. This lets us eg.
@ -307,6 +332,7 @@ typedef struct _VipsGInputStreamClass {
} VipsGInputStreamClass;
VIPS_API
GInputStream *vips_g_input_stream_new_from_source( VipsSource *source );
/* A VipsSource that wraps a GInputStream. This lets us eg. load PNGs from
@ -347,6 +373,7 @@ typedef struct _VipsSourceGInputStreamClass {
} VipsSourceGInputStreamClass;
VIPS_API
VipsSourceGInputStream *vips_source_g_input_stream_new( GInputStream *stream );
#define VIPS_TYPE_TARGET (vips_target_get_type())
@ -416,25 +443,37 @@ typedef struct _VipsTargetClass {
} VipsTargetClass;
VIPS_API
GType vips_target_get_type( void );
VIPS_API
VipsTarget *vips_target_new_to_descriptor( int descriptor );
VIPS_API
VipsTarget *vips_target_new_to_file( const char *filename );
VIPS_API
VipsTarget *vips_target_new_to_memory( void );
VIPS_API
int vips_target_write( VipsTarget *target, const void *data, size_t length );
VIPS_API
void vips_target_finish( VipsTarget *target );
VIPS_API
unsigned char *vips_target_steal( VipsTarget *target, size_t *length );
VIPS_API
char *vips_target_steal_text( VipsTarget *target );
VIPS_API
int vips_target_putc( VipsTarget *target, int ch );
#define VIPS_TARGET_PUTC( S, C ) ( \
(S)->write_point < VIPS_TARGET_BUFFER_SIZE ? \
((S)->output_buffer[(S)->write_point++] = (C), 0) : \
vips_target_putc( (S), (C) ) \
)
VIPS_API
int vips_target_writes( VipsTarget *target, const char *str );
VIPS_API
int vips_target_writef( VipsTarget *target, const char *fmt, ... )
__attribute__((format(printf, 2, 3)));
VIPS_API
int vips_target_write_amp( VipsTarget *target, const char *str );
#define VIPS_TYPE_TARGET_CUSTOM (vips_target_custom_get_type())
@ -473,7 +512,9 @@ typedef struct _VipsTargetCustomClass {
} VipsTargetCustomClass;
VIPS_API
GType vips_target_custom_get_type( void );
VIPS_API
VipsTargetCustom *vips_target_custom_new( void );
#ifdef __cplusplus

View File

@ -134,153 +134,219 @@ typedef enum {
VIPS_BLEND_MODE_LAST
} VipsBlendMode;
VIPS_API
int vips_copy( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_tilecache( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_linecache( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_sequential( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_cache( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_copy_file( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_embed( VipsImage *in, VipsImage **out,
int x, int y, int width, int height, ... )
__attribute__((sentinel));
VIPS_API
int vips_gravity( VipsImage *in, VipsImage **out,
VipsCompassDirection direction, int width, int height, ... )
__attribute__((sentinel));
VIPS_API
int vips_flip( VipsImage *in, VipsImage **out, VipsDirection direction, ... )
__attribute__((sentinel));
VIPS_API
int vips_insert( VipsImage *main, VipsImage *sub, VipsImage **out,
int x, int y, ... )
__attribute__((sentinel));
VIPS_API
int vips_join( VipsImage *in1, VipsImage *in2, VipsImage **out,
VipsDirection direction, ... )
__attribute__((sentinel));
VIPS_API
int vips_arrayjoin( VipsImage **in, VipsImage **out, int n, ... )
__attribute__((sentinel));
VIPS_API
int vips_extract_area( VipsImage *in, VipsImage **out,
int left, int top, int width, int height, ... )
__attribute__((sentinel));
VIPS_API
int vips_crop( VipsImage *in, VipsImage **out,
int left, int top, int width, int height, ... )
__attribute__((sentinel));
VIPS_API
int vips_smartcrop( VipsImage *in, VipsImage **out, int width, int height, ... )
__attribute__((sentinel));
VIPS_API
int vips_extract_band( VipsImage *in, VipsImage **out, int band, ... )
__attribute__((sentinel));
VIPS_API
int vips_replicate( VipsImage *in, VipsImage **out, int across, int down, ... )
__attribute__((sentinel));
VIPS_API
int vips_grid( VipsImage *in, VipsImage **out,
int tile_height, int across, int down, ... )
__attribute__((sentinel));
VIPS_API
int vips_transpose3d( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_wrap( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_rot( VipsImage *in, VipsImage **out, VipsAngle angle, ... )
__attribute__((sentinel));
VIPS_API
int vips_rot90( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_rot180( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_rot270( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_rot45( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
void vips_autorot_remove_angle( VipsImage *image );
VIPS_API
int vips_autorot( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_zoom( VipsImage *in, VipsImage **out, int xfac, int yfac, ... )
__attribute__((sentinel));
VIPS_API
int vips_subsample( VipsImage *in, VipsImage **out, int xfac, int yfac, ... )
__attribute__((sentinel));
VIPS_API
int vips_cast( VipsImage *in, VipsImage **out, VipsBandFormat format, ... )
__attribute__((sentinel));
VIPS_API
int vips_cast_uchar( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_cast_char( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_cast_ushort( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_cast_short( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_cast_uint( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_cast_int( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_cast_float( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_cast_double( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_cast_complex( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_cast_dpcomplex( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_scale( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_msb( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_byteswap( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_bandjoin( VipsImage **in, VipsImage **out, int n, ... )
__attribute__((sentinel));
VIPS_API
int vips_bandjoin2( VipsImage *in1, VipsImage *in2, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_bandjoin_const( VipsImage *in, VipsImage **out, double *c, int n, ... )
__attribute__((sentinel));
VIPS_API
int vips_bandjoin_const1( VipsImage *in, VipsImage **out, double c, ... )
__attribute__((sentinel));
VIPS_API
int vips_bandrank( VipsImage **in, VipsImage **out, int n, ... )
__attribute__((sentinel));
VIPS_API
int vips_bandfold( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_bandunfold( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_bandbool( VipsImage *in, VipsImage **out,
VipsOperationBoolean boolean, ... )
__attribute__((sentinel));
VIPS_API
int vips_bandand( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_bandor( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_bandeor( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_bandmean( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_recomb( VipsImage *in, VipsImage **out, VipsImage *m, ... )
__attribute__((sentinel));
VIPS_API
int vips_ifthenelse( VipsImage *cond, VipsImage *in1, VipsImage *in2,
VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_switch( VipsImage **tests, VipsImage **out, int n, ... )
__attribute__((sentinel));
VIPS_API
int vips_flatten( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_addalpha( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_premultiply( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_unpremultiply( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_composite( VipsImage **in, VipsImage **out, int n, int *mode, ... )
__attribute__((sentinel));
VIPS_API
int vips_composite2( VipsImage *base, VipsImage *overlay, VipsImage **out,
VipsBlendMode mode, ... )
__attribute__((sentinel));
VIPS_API
int vips_falsecolour( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_gamma( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));

View File

@ -45,33 +45,46 @@ typedef enum {
VIPS_COMBINE_LAST
} VipsCombine;
VIPS_API
int vips_conv( VipsImage *in, VipsImage **out, VipsImage *mask, ... )
__attribute__((sentinel));
VIPS_API
int vips_convf( VipsImage *in, VipsImage **out, VipsImage *mask, ... )
__attribute__((sentinel));
VIPS_API
int vips_convi( VipsImage *in, VipsImage **out, VipsImage *mask, ... )
__attribute__((sentinel));
VIPS_API
int vips_conva( VipsImage *in, VipsImage **out, VipsImage *mask, ... )
__attribute__((sentinel));
VIPS_API
int vips_convsep( VipsImage *in, VipsImage **out, VipsImage *mask, ... )
__attribute__((sentinel));
VIPS_API
int vips_convasep( VipsImage *in, VipsImage **out, VipsImage *mask, ... )
__attribute__((sentinel));
VIPS_API
int vips_compass( VipsImage *in, VipsImage **out, VipsImage *mask, ... )
__attribute__((sentinel));
VIPS_API
int vips_gaussblur( VipsImage *in, VipsImage **out, double sigma, ... )
__attribute__((sentinel));
VIPS_API
int vips_sharpen( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_spcor( VipsImage *in, VipsImage *ref, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_fastcor( VipsImage *in, VipsImage *ref, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_sobel( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_canny( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));

View File

@ -38,84 +38,111 @@
extern "C" {
#endif /*__cplusplus*/
VIPS_API
int vips_black( VipsImage **out, int width, int height, ... )
__attribute__((sentinel));
VIPS_API
int vips_xyz( VipsImage **out, int width, int height, ... )
__attribute__((sentinel));
VIPS_API
int vips_grey( VipsImage **out, int width, int height, ... )
__attribute__((sentinel));
VIPS_API
int vips_gaussmat( VipsImage **out, double sigma, double min_ampl, ... )
__attribute__((sentinel));
VIPS_API
int vips_logmat( VipsImage **out, double sigma, double min_ampl, ... )
__attribute__((sentinel));
VIPS_API
int vips_text( VipsImage **out, const char *text, ... )
__attribute__((sentinel));
VIPS_API
int vips_gaussnoise( VipsImage **out, int width, int height, ... )
__attribute__((sentinel));
VIPS_API
int vips_eye( VipsImage **out, int width, int height, ... )
__attribute__((sentinel));
VIPS_API
int vips_sines( VipsImage **out, int width, int height, ... )
__attribute__((sentinel));
VIPS_API
int vips_zone( VipsImage **out, int width, int height, ... )
__attribute__((sentinel));
VIPS_API
int vips_identity( VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_buildlut( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_invertlut( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_tonelut( VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_mask_ideal( VipsImage **out, int width, int height,
double frequency_cutoff, ... )
__attribute__((sentinel));
VIPS_API
int vips_mask_ideal_ring( VipsImage **out, int width, int height,
double frequency_cutoff, double ringwidth, ... )
__attribute__((sentinel));
VIPS_API
int vips_mask_ideal_band( VipsImage **out, int width, int height,
double frequency_cutoff_x, double frequency_cutoff_y,
double radius, ... )
__attribute__((sentinel));
VIPS_API
int vips_mask_butterworth( VipsImage **out, int width, int height,
double order,
double frequency_cutoff, double amplitude_cutoff, ... )
__attribute__((sentinel));
VIPS_API
int vips_mask_butterworth_ring( VipsImage **out, int width, int height,
double order,
double frequency_cutoff, double amplitude_cutoff,
double ringwidth, ... )
__attribute__((sentinel));
VIPS_API
int vips_mask_butterworth_band( VipsImage **out, int width, int height,
double order,
double frequency_cutoff_x, double frequency_cutoff_y, double radius,
double amplitude_cutoff, ... )
__attribute__((sentinel));
VIPS_API
int vips_mask_gaussian( VipsImage **out, int width, int height,
double frequency_cutoff, double amplitude_cutoff, ... )
__attribute__((sentinel));
VIPS_API
int vips_mask_gaussian_ring( VipsImage **out, int width, int height,
double frequency_cutoff, double amplitude_cutoff,
double ringwidth, ... )
__attribute__((sentinel));
VIPS_API
int vips_mask_gaussian_band( VipsImage **out, int width, int height,
double frequency_cutoff_x, double frequency_cutoff_y, double radius,
double amplitude_cutoff, ... )
__attribute__((sentinel));
VIPS_API
int vips_mask_fractal( VipsImage **out, int width, int height,
double fractal_dimension, ... )
__attribute__((sentinel));
VIPS_API
int vips_fractsurf( VipsImage **out,
int width, int height, double fractal_dimension, ... )
__attribute__((sentinel));
VIPS_API
int vips_worley( VipsImage **out, int width, int height, ... )
__attribute__((sentinel));
VIPS_API
int vips_perlin( VipsImage **out, int width, int height, ... )
__attribute__((sentinel));

View File

@ -61,23 +61,39 @@ typedef struct _VipsDbuf {
} VipsDbuf;
VIPS_API
void vips_dbuf_destroy( VipsDbuf *dbuf );
VIPS_API
void vips_dbuf_init( VipsDbuf *dbuf );
VIPS_API
gboolean vips_dbuf_minimum_size( VipsDbuf *dbuf, size_t size );
VIPS_API
gboolean vips_dbuf_allocate( VipsDbuf *dbuf, size_t size );
VIPS_API
size_t vips_dbuf_read( VipsDbuf *dbuf, unsigned char *data, size_t size );
VIPS_API
unsigned char *vips_dbuf_get_write( VipsDbuf *dbuf, size_t *size );
VIPS_API
gboolean vips_dbuf_write( VipsDbuf *dbuf,
const unsigned char *data, size_t size );
VIPS_API
gboolean vips_dbuf_writef( VipsDbuf *dbuf, const char *fmt, ... )
__attribute__((format(printf, 2, 3)));
VIPS_API
gboolean vips_dbuf_write_amp( VipsDbuf *dbuf, const char *str );
VIPS_API
void vips_dbuf_reset( VipsDbuf *dbuf );
VIPS_API
void vips_dbuf_destroy( VipsDbuf *dbuf );
VIPS_API
gboolean vips_dbuf_seek( VipsDbuf *dbuf, off_t offset, int whence );
VIPS_API
void vips_dbuf_truncate( VipsDbuf *dbuf );
VIPS_API
off_t vips_dbuf_tell( VipsDbuf *dbuf );
VIPS_API
unsigned char *vips_dbuf_string( VipsDbuf *dbuf, size_t *size );
VIPS_API
unsigned char *vips_dbuf_steal( VipsDbuf *dbuf, size_t *size );
#endif /*VIPS_DBUF_H*/

View File

@ -266,33 +266,44 @@ int im__gprint( im_object obj ); /* GValue */
/* Add a plug-in package.
*/
VIPS_DEPRECATED
im_package *im_load_plugin( const char *name );
VIPS_DEPRECATED
int im_load_plugins( const char *fmt, ... )
__attribute__((format(printf, 1, 2)));
/* Close all plug-ins.
*/
VIPS_DEPRECATED
int im_close_plugins( void );
/* Loop over all loaded packages.
*/
VIPS_DEPRECATED
void *im_map_packages( VipsSListMap2Fn fn, void *a );
/* Convenience functions for finding packages, functions, etc.
*/
VIPS_DEPRECATED
im_function *im_find_function( const char *name );
VIPS_DEPRECATED
im_package *im_find_package( const char *name );
VIPS_DEPRECATED
im_package *im_package_of_function( const char *name );
/* Allocate space for, and free im_object argument lists.
*/
VIPS_DEPRECATED
int im_free_vargv( im_function *fn, im_object *vargv );
VIPS_DEPRECATED
int im_allocate_vargv( im_function *fn, im_object *vargv );
/* Run a VIPS command by name.
*/
VIPS_DEPRECATED
int im_run_command( char *name, int argc, char **argv );
VIPS_DEPRECATED
int vips__input_interpolate_init( im_object *obj, char *str );
#ifdef __cplusplus

View File

@ -48,46 +48,60 @@ typedef enum {
VIPS_COMBINE_MODE_LAST
} VipsCombineMode;
VIPS_API
int vips_draw_rect( VipsImage *image,
double *ink, int n, int left, int top, int width, int height, ... )
__attribute__((sentinel));
VIPS_API
int vips_draw_rect1( VipsImage *image,
double ink, int left, int top, int width, int height, ... )
__attribute__((sentinel));
VIPS_API
int vips_draw_point( VipsImage *image, double *ink, int n, int x, int y, ... )
__attribute__((sentinel));
VIPS_API
int vips_draw_point1( VipsImage *image, double ink, int x, int y, ... )
__attribute__((sentinel));
VIPS_API
int vips_draw_image( VipsImage *image, VipsImage *sub, int x, int y, ... )
__attribute__((sentinel));
VIPS_API
int vips_draw_mask( VipsImage *image,
double *ink, int n, VipsImage *mask, int x, int y, ... )
__attribute__((sentinel));
VIPS_API
int vips_draw_mask1( VipsImage *image,
double ink, VipsImage *mask, int x, int y, ... )
__attribute__((sentinel));
VIPS_API
int vips_draw_line( VipsImage *image,
double *ink, int n, int x1, int y1, int x2, int y2, ... )
__attribute__((sentinel));
VIPS_API
int vips_draw_line1( VipsImage *image,
double ink, int x1, int y1, int x2, int y2, ... )
__attribute__((sentinel));
VIPS_API
int vips_draw_circle( VipsImage *image,
double *ink, int n, int cx, int cy, int radius, ... )
__attribute__((sentinel));
VIPS_API
int vips_draw_circle1( VipsImage *image,
double ink, int cx, int cy, int radius, ... )
__attribute__((sentinel));
VIPS_API
int vips_draw_flood( VipsImage *image, double *ink, int n, int x, int y, ... )
__attribute__((sentinel));
VIPS_API
int vips_draw_flood1( VipsImage *image, double ink, int x, int y, ... )
__attribute__((sentinel));
VIPS_API
int vips_draw_smudge( VipsImage *image,
int left, int top, int width, int height, ... )
__attribute__((sentinel));

View File

@ -11,6 +11,7 @@ G_BEGIN_DECLS
/*** END file-production ***/
/*** BEGIN value-header ***/
VIPS_API
GType @enum_name@_get_type (void) G_GNUC_CONST;
#define VIPS_TYPE_@ENUMSHORT@ (@enum_name@_get_type())
/*** END value-header ***/

View File

@ -1,6 +1,9 @@
/*** BEGIN file-header ***/
/* auto-generated enums for vips introspection */
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif /*HAVE_CONFIG_H*/
#include <vips/vips.h>
/*** END file-header ***/

View File

@ -11,6 +11,7 @@ G_BEGIN_DECLS
/*** END file-production ***/
/*** BEGIN value-header ***/
VIPS_API
GType @enum_name@_get_type (void) G_GNUC_CONST;
#define VIPS_TYPE_@ENUMSHORT@ (@enum_name@_get_type())
/*** END value-header ***/

View File

@ -35,59 +35,103 @@
extern "C" {
#endif /*__cplusplus*/
VIPS_API
const char *vips_error_buffer( void );
VIPS_API
char *vips_error_buffer_copy( void );
VIPS_API
void vips_error_clear( void );
VIPS_API
void vips_error_freeze( void );
VIPS_API
void vips_error_thaw( void );
VIPS_API
void vips_error( const char *domain, const char *fmt, ... )
__attribute__((format(printf, 2, 3)));
VIPS_API
void vips_verror( const char *domain, const char *fmt, va_list ap );
VIPS_API
void vips_error_system( int err, const char *domain, const char *fmt, ... )
__attribute__((format(printf, 3, 4)));
VIPS_API
void vips_verror_system( int err, const char *domain,
const char *fmt, va_list ap );
VIPS_API
void vips_error_g( GError **error );
VIPS_API
void vips_g_error( GError **error );
VIPS_API
void vips_error_exit( const char *fmt, ... )
__attribute__((noreturn, format(printf, 1, 2)));
VIPS_API
int vips_check_uncoded( const char *domain, VipsImage *im );
VIPS_API
int vips_check_coding( const char *domain, VipsImage *im, VipsCoding coding );
VIPS_API
int vips_check_coding_known( const char *domain, VipsImage *im );
VIPS_API
int vips_check_coding_noneorlabq( const char *domain, VipsImage *im );
VIPS_API
int vips_check_coding_same( const char *domain, VipsImage *im1, VipsImage *im2 );
VIPS_API
int vips_check_mono( const char *domain, VipsImage *im );
VIPS_API
int vips_check_bands( const char *domain, VipsImage *im, int bands );
VIPS_API
int vips_check_bands_1or3( const char *domain, VipsImage *im );
VIPS_API
int vips_check_bands_atleast( const char *domain, VipsImage *im, int bands );
VIPS_API
int vips_check_bands_1orn( const char *domain, VipsImage *im1, VipsImage *im2 );
VIPS_API
int vips_check_bands_1orn_unary( const char *domain, VipsImage *im, int n );
VIPS_API
int vips_check_bands_same( const char *domain, VipsImage *im1, VipsImage *im2 );
VIPS_API
int vips_check_bandno( const char *domain, VipsImage *im, int bandno );
VIPS_API
int vips_check_int( const char *domain, VipsImage *im );
VIPS_API
int vips_check_uint( const char *domain, VipsImage *im );
VIPS_API
int vips_check_uintorf( const char *domain, VipsImage *im );
VIPS_API
int vips_check_noncomplex( const char *domain, VipsImage *im );
VIPS_API
int vips_check_complex( const char *domain, VipsImage *im );
VIPS_API
int vips_check_twocomponents( const char *domain, VipsImage *im );
VIPS_API
int vips_check_format( const char *domain, VipsImage *im, VipsBandFormat fmt );
VIPS_API
int vips_check_u8or16( const char *domain, VipsImage *im );
VIPS_API
int vips_check_8or16( const char *domain, VipsImage *im );
VIPS_API
int vips_check_u8or16orf( const char *domain, VipsImage *im );
VIPS_API
int vips_check_format_same( const char *domain, VipsImage *im1, VipsImage *im2 );
VIPS_API
int vips_check_size_same( const char *domain, VipsImage *im1, VipsImage *im2 );
VIPS_API
int vips_check_oddsquare( const char *domain, VipsImage *im );
VIPS_API
int vips_check_vector_length( const char *domain, int n, int len );
VIPS_API
int vips_check_vector( const char *domain, int n, VipsImage *im );
VIPS_API
int vips_check_hist( const char *domain, VipsImage *im );
VIPS_API
int vips_check_matrix( const char *domain, VipsImage *im, VipsImage **out );
VIPS_API
int vips_check_separable( const char *domain, VipsImage *im );
VIPS_API
int vips_check_precision_intfloat( const char *domain,
VipsPrecision precision );

View File

@ -84,11 +84,13 @@ typedef struct _VipsForeignClass {
/* Don't put spaces around void here, it breaks gtk-doc.
*/
VIPS_API
GType vips_foreign_get_type(void);
/* Map over and find formats. This uses type introspection to loop over
* subclasses of VipsForeign.
*/
VIPS_API
void *vips_foreign_map( const char *base,
VipsSListMap2Fn fn, void *a, void *b );
@ -263,19 +265,28 @@ typedef struct _VipsForeignLoadClass {
/* Don't put spaces around void here, it breaks gtk-doc.
*/
VIPS_API
GType vips_foreign_load_get_type(void);
VIPS_API
const char *vips_foreign_find_load( const char *filename );
VIPS_API
const char *vips_foreign_find_load_buffer( const void *data, size_t size );
VIPS_API
const char *vips_foreign_find_load_source( VipsSource *source );
VIPS_API
VipsForeignFlags vips_foreign_flags( const char *loader, const char *filename );
VIPS_API
gboolean vips_foreign_is_a( const char *loader, const char *filename );
VIPS_API
gboolean vips_foreign_is_a_buffer( const char *loader,
const void *data, size_t size );
VIPS_API
gboolean vips_foreign_is_a_source( const char *loader,
VipsSource *source );
VIPS_API
void vips_foreign_load_invalidate( VipsImage *image );
#define VIPS_TYPE_FOREIGN_SAVE (vips_foreign_save_get_type())
@ -376,24 +387,35 @@ typedef struct _VipsForeignSaveClass {
/* Don't put spaces around void here, it breaks gtk-doc.
*/
VIPS_API
GType vips_foreign_save_get_type(void);
VIPS_API
const char *vips_foreign_find_save( const char *filename );
VIPS_API
gchar **vips_foreign_get_suffixes( void );
VIPS_API
const char *vips_foreign_find_save_buffer( const char *suffix );
VIPS_API
const char *vips_foreign_find_save_target( const char *suffix );
VIPS_API
int vips_vipsload( const char *filename, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_vipsload_source( VipsSource *source, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_vipssave( VipsImage *in, const char *filename, ... )
__attribute__((sentinel));
VIPS_API
int vips_vipssave_target( VipsImage *in, VipsTarget *target, ... )
__attribute__((sentinel));
VIPS_API
int vips_openslideload( const char *filename, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_openslideload_source( VipsSource *source, VipsImage **out, ... )
__attribute__((sentinel));
@ -429,19 +451,26 @@ typedef enum {
VIPS_FOREIGN_JPEG_SUBSAMPLE_LAST
} VipsForeignJpegSubsample;
VIPS_API
int vips_jpegload( const char *filename, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_jpegload_buffer( void *buf, size_t len, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_jpegload_source( VipsSource *source, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_jpegsave_target( VipsImage *in, VipsTarget *target, ... )
__attribute__((sentinel));
VIPS_API
int vips_jpegsave( VipsImage *in, const char *filename, ... )
__attribute__((sentinel));
VIPS_API
int vips_jpegsave_buffer( VipsImage *in, void **buf, size_t *len, ... )
__attribute__((sentinel));
VIPS_API
int vips_jpegsave_mime( VipsImage *in, ... )
__attribute__((sentinel));
@ -466,19 +495,26 @@ typedef enum {
VIPS_FOREIGN_WEBP_PRESET_LAST
} VipsForeignWebpPreset;
VIPS_API
int vips_webpload_source( VipsSource *source, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_webpload( const char *filename, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_webpload_buffer( void *buf, size_t len, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_webpsave_target( VipsImage *in, VipsTarget *target, ... )
__attribute__((sentinel));
VIPS_API
int vips_webpsave( VipsImage *in, const char *filename, ... )
__attribute__((sentinel));
VIPS_API
int vips_webpsave_buffer( VipsImage *in, void **buf, size_t *len, ... )
__attribute__((sentinel));
VIPS_API
int vips_webpsave_mime( VipsImage *in, ... )
__attribute__((sentinel));
@ -546,62 +582,87 @@ typedef enum {
VIPS_FOREIGN_TIFF_RESUNIT_LAST
} VipsForeignTiffResunit;
VIPS_API
int vips_tiffload( const char *filename, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_tiffload_buffer( void *buf, size_t len, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_tiffload_source( VipsSource *source, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_tiffsave( VipsImage *in, const char *filename, ... )
__attribute__((sentinel));
VIPS_API
int vips_tiffsave_buffer( VipsImage *in, void **buf, size_t *len, ... )
__attribute__((sentinel));
VIPS_API
int vips_openexrload( const char *filename, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_fitsload( const char *filename, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_fitssave( VipsImage *in, const char *filename, ... )
__attribute__((sentinel));
VIPS_API
int vips_analyzeload( const char *filename, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_rawload( const char *filename, VipsImage **out,
int width, int height, int bands, ... )
__attribute__((sentinel));
VIPS_API
int vips_rawsave( VipsImage *in, const char *filename, ... )
__attribute__((sentinel));
VIPS_API
int vips_rawsave_fd( VipsImage *in, int fd, ... )
__attribute__((sentinel));
VIPS_API
int vips_csvload( const char *filename, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_csvload_source( VipsSource *source, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_csvsave( VipsImage *in, const char *filename, ... )
__attribute__((sentinel));
VIPS_API
int vips_csvsave_target( VipsImage *in, VipsTarget *target, ... )
__attribute__((sentinel));
VIPS_API
int vips_matrixload( const char *filename, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_matrixload_source( VipsSource *source, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_matrixsave( VipsImage *in, const char *filename, ... )
__attribute__((sentinel));
VIPS_API
int vips_matrixsave_target( VipsImage *in, VipsTarget *target, ... )
__attribute__((sentinel));
VIPS_API
int vips_matrixprint( VipsImage *in, ... )
__attribute__((sentinel));
VIPS_API
int vips_magickload( const char *filename, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_magickload_buffer( void *buf, size_t len, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_magicksave( VipsImage *in, const char *filename, ... )
__attribute__((sentinel));
VIPS_API
int vips_magicksave_buffer( VipsImage *in, void **buf, size_t *len, ... )
__attribute__((sentinel));
@ -626,16 +687,22 @@ typedef enum /*< flags >*/ {
VIPS_FOREIGN_PNG_FILTER_ALL = 0xF8
} VipsForeignPngFilter;
VIPS_API
int vips_pngload_source( VipsSource *source, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_pngload( const char *filename, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_pngload_buffer( void *buf, size_t len, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_pngsave_target( VipsImage *in, VipsTarget *target, ... )
__attribute__((sentinel));
VIPS_API
int vips_pngsave( VipsImage *in, const char *filename, ... )
__attribute__((sentinel));
VIPS_API
int vips_pngsave_buffer( VipsImage *in, void **buf, size_t *len, ... )
__attribute__((sentinel));
@ -664,104 +731,149 @@ typedef enum {
VIPS_FOREIGN_PPM_FORMAT_LAST
} VipsForeignPpmFormat;
VIPS_API
int vips_ppmload( const char *filename, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_ppmload_source( VipsSource *source, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_ppmsave( VipsImage *in, const char *filename, ... )
__attribute__((sentinel));
VIPS_API
int vips_ppmsave_target( VipsImage *in, VipsTarget *target, ... )
__attribute__((sentinel));
VIPS_API
int vips_matload( const char *filename, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_radload_source( VipsSource *source, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_radload( const char *filename, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_radload_buffer( void *buf, size_t len, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_radsave( VipsImage *in, const char *filename, ... )
__attribute__((sentinel));
VIPS_API
int vips_radsave_buffer( VipsImage *in, void **buf, size_t *len, ... )
__attribute__((sentinel));
VIPS_API
int vips_radsave_target( VipsImage *in, VipsTarget *target, ... )
__attribute__((sentinel));
VIPS_API
int vips_pdfload( const char *filename, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_pdfload_buffer( void *buf, size_t len, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_pdfload_source( VipsSource *source, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_svgload( const char *filename, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_svgload_buffer( void *buf, size_t len, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_svgload_string( const char *str, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_svgload_source( VipsSource *source, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_gifload( const char *filename, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_gifload_buffer( void *buf, size_t len, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_gifload_source( VipsSource *source, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_gifsave( VipsImage *in, const char *filename, ... )
__attribute__((sentinel));
VIPS_API
int vips_gifsave_buffer( VipsImage *in, void **buf, size_t *len, ... )
__attribute__((sentinel));
VIPS_API
int vips_gifsave_target( VipsImage *in, VipsTarget *target, ... )
__attribute__((sentinel));
VIPS_API
int vips_heifload( const char *filename, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_heifload_buffer( void *buf, size_t len, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_heifload_source( VipsSource *source, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_heifsave( VipsImage *in, const char *filename, ... )
__attribute__((sentinel));
VIPS_API
int vips_heifsave_buffer( VipsImage *in, void **buf, size_t *len, ... )
__attribute__((sentinel));
VIPS_API
int vips_heifsave_target( VipsImage *in, VipsTarget *target, ... )
__attribute__((sentinel));
VIPS_API
int vips_niftiload( const char *filename, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_niftiload_source( VipsSource *source, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_niftisave( VipsImage *in, const char *filename, ... )
__attribute__((sentinel));
VIPS_API
int vips_jp2kload( const char *filename, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_jp2kload_buffer( void *buf, size_t len, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_jp2kload_source( VipsSource *source, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_jp2ksave( VipsImage *in, const char *filename, ... )
__attribute__((sentinel));
VIPS_API
int vips_jp2ksave_buffer( VipsImage *in, void **buf, size_t *len, ... )
__attribute__((sentinel));
VIPS_API
int vips_jp2ksave_target( VipsImage *in, VipsTarget *target, ... )
__attribute__((sentinel));
VIPS_API
int vips_jxlload_source( VipsSource *source, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_jxlload_buffer( void *buf, size_t len, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_jxlload( const char *filename, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_jxlsave( VipsImage *in, const char *filename, ... )
__attribute__((sentinel));
VIPS_API
int vips_jxlsave_buffer( VipsImage *in, void **buf, size_t *len, ... )
__attribute__((sentinel));
VIPS_API
int vips_jxlsave_target( VipsImage *in, VipsTarget *target, ... )
__attribute__((sentinel));
@ -814,8 +926,10 @@ typedef enum {
VIPS_FOREIGN_DZ_CONTAINER_LAST
} VipsForeignDzContainer;
VIPS_API
int vips_dzsave( VipsImage *in, const char *name, ... )
__attribute__((sentinel));
VIPS_API
int vips_dzsave_buffer( VipsImage *in, void **buf, size_t *len, ... )
__attribute__((sentinel));

View File

@ -29,8 +29,8 @@
*/
#ifndef IM_FORMAT_H
#define IM_FORMAT_H
#ifndef VIPS_FORMAT_H
#define VIPS_FORMAT_H
#ifdef __cplusplus
extern "C" {
@ -104,76 +104,32 @@ typedef struct _VipsFormatClass {
const char **suffs;
} VipsFormatClass;
VIPS_API
GType vips_format_get_type( void );
/* Map over and find formats. This uses type introspection to loop over
* subclasses of VipsFormat.
*/
VIPS_API
void *vips_format_map( VipsSListMap2Fn fn, void *a, void *b );
VIPS_API
VipsFormatClass *vips_format_for_file( const char *filename );
VIPS_API
VipsFormatClass *vips_format_for_name( const char *filename );
VIPS_API
VipsFormatFlags vips_format_get_flags( VipsFormatClass *format,
const char *filename );
/* Read/write an image convenience functions.
*/
VIPS_API
int vips_format_read( const char *filename, VipsImage *out );
VIPS_API
int vips_format_write( VipsImage *in, const char *filename );
/* Low-level read/write operations.
*/
int im_jpeg2vips( const char *filename, VipsImage *out );
int im_bufjpeg2vips( void *buf, size_t len,
VipsImage *out, gboolean header_only );
int im_vips2jpeg( VipsImage *in, const char *filename );
int im_vips2mimejpeg( VipsImage *in, int qfac );
int im_vips2bufjpeg( VipsImage *in, VipsImage *out,
int qfac, char **obuf, int *olen );
int im_tiff2vips( const char *filename, VipsImage *out );
int im_vips2tiff( VipsImage *in, const char *filename );
int im_tile_cache( VipsImage *in, VipsImage *out,
int tile_width, int tile_height, int max_tiles );
int im_magick2vips( const char *filename, VipsImage *out );
int im_bufmagick2vips( void *buf, size_t len,
VipsImage *out, gboolean header_only );
int im_exr2vips( const char *filename, VipsImage *out );
int im_ppm2vips( const char *filename, VipsImage *out );
int im_vips2ppm( VipsImage *in, const char *filename );
int im_analyze2vips( const char *filename, VipsImage *out );
int im_csv2vips( const char *filename, VipsImage *out );
int im_vips2csv( VipsImage *in, const char *filename );
int im_png2vips( const char *filename, VipsImage *out );
int im_vips2png( VipsImage *in, const char *filename );
int im_vips2bufpng( VipsImage *in, VipsImage *out,
int compression, int interlace, char **obuf, size_t *olen );
int im_webp2vips( const char *filename, VipsImage *out );
int im_vips2webp( VipsImage *in, const char *filename );
int im_raw2vips( const char *filename, VipsImage *out,
int width, int height, int bpp, int offset );
int im_vips2raw( VipsImage *in, int fd );
int im_mat2vips( const char *filename, VipsImage *out );
int im_rad2vips( const char *filename, VipsImage *out );
int im_vips2rad( VipsImage *in, const char *filename );
int im_fits2vips( const char *filename, VipsImage *out );
int im_vips2fits( VipsImage *in, const char *filename );
int im_vips2dz( VipsImage *in, const char *filename );
#ifdef __cplusplus
}
#endif /*__cplusplus*/
#endif /*IM_FORMAT_H*/
#endif /*VIPS_FORMAT_H*/

View File

@ -38,17 +38,22 @@
extern "C" {
#endif /*__cplusplus*/
VIPS_API
int vips_fwfft( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_invfft( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_freqmult( VipsImage *in, VipsImage *mask, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_spectrum( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_phasecor( VipsImage *in1, VipsImage *in2, VipsImage **out, ... )
__attribute__((sentinel));

View File

@ -63,6 +63,7 @@ G_STMT_START { \
extern gboolean vips__thread_profile;
VIPS_API
void vips_profile_set( gboolean profile );
void vips__thread_profile_attach( const char *thread_name );

View File

@ -38,38 +38,50 @@ extern "C" {
#endif /*__cplusplus*/
typedef int (*VipsRegionWrite)( VipsRegion *region, VipsRect *area, void *a );
VIPS_API
int vips_sink_disc( VipsImage *im, VipsRegionWrite write_fn, void *a );
VIPS_API
int vips_sink( VipsImage *im,
VipsStartFn start_fn, VipsGenerateFn generate_fn, VipsStopFn stop_fn,
void *a, void *b );
VIPS_API
int vips_sink_tile( VipsImage *im,
int tile_width, int tile_height,
VipsStartFn start_fn, VipsGenerateFn generate_fn, VipsStopFn stop_fn,
void *a, void *b );
typedef void (*VipsSinkNotify)( VipsImage *im, VipsRect *rect, void *a );
VIPS_API
int vips_sink_screen( VipsImage *in, VipsImage *out, VipsImage *mask,
int tile_width, int tile_height, int max_tiles,
int priority,
VipsSinkNotify notify_fn, void *a );
VIPS_API
int vips_sink_memory( VipsImage *im );
VIPS_API
void *vips_start_one( VipsImage *out, void *a, void *b );
VIPS_API
int vips_stop_one( void *seq, void *a, void *b );
VIPS_API
void *vips_start_many( VipsImage *out, void *a, void *b );
VIPS_API
int vips_stop_many( void *seq, void *a, void *b );
VIPS_API
VipsImage **vips_allocate_input_array( VipsImage *out, ... )
__attribute__((sentinel));
VIPS_API
int vips_image_generate( VipsImage *image,
VipsStartFn start_fn, VipsGenerateFn generate_fn, VipsStopFn stop_fn,
void *a, void *b
);
void *a, void *b );
VIPS_API
int vips_image_pipeline_array( VipsImage *image,
VipsDemandStyle hint, VipsImage **in );
VIPS_API
int vips_image_pipelinev( VipsImage *image, VipsDemandStyle hint, ... )
__attribute__((sentinel));

View File

@ -157,89 +157,143 @@ extern "C" {
*/
#define VIPS_META_N_SUBIFDS "n-subifds"
VIPS_API
guint64 vips_format_sizeof( VipsBandFormat format );
VIPS_API
guint64 vips_format_sizeof_unsafe( VipsBandFormat format );
VIPS_API
int vips_image_get_width( const VipsImage *image );
VIPS_API
int vips_image_get_height( const VipsImage *image );
VIPS_API
int vips_image_get_bands( const VipsImage *image );
VIPS_API
VipsBandFormat vips_image_get_format( const VipsImage *image );
VIPS_API
double vips_image_get_format_max( VipsBandFormat format );
VIPS_API
VipsBandFormat vips_image_guess_format( const VipsImage *image );
VIPS_API
VipsCoding vips_image_get_coding( const VipsImage *image );
VIPS_API
VipsInterpretation vips_image_get_interpretation( const VipsImage *image );
VIPS_API
VipsInterpretation vips_image_guess_interpretation( const VipsImage *image );
VIPS_API
double vips_image_get_xres( const VipsImage *image );
VIPS_API
double vips_image_get_yres( const VipsImage *image );
VIPS_API
int vips_image_get_xoffset( const VipsImage *image );
VIPS_API
int vips_image_get_yoffset( const VipsImage *image );
VIPS_API
const char *vips_image_get_filename( const VipsImage *image );
VIPS_API
const char *vips_image_get_mode( const VipsImage *image );
VIPS_API
double vips_image_get_scale( const VipsImage *image );
VIPS_API
double vips_image_get_offset( const VipsImage *image );
VIPS_API
int vips_image_get_page_height( VipsImage *image );
VIPS_API
int vips_image_get_n_pages( VipsImage *image );
VIPS_API
int vips_image_get_n_subifds( VipsImage *image );
VIPS_API
int vips_image_get_orientation( VipsImage *image );
VIPS_API
gboolean vips_image_get_orientation_swap( VipsImage *image );
VIPS_API
const void *vips_image_get_data( VipsImage *image );
VIPS_API
void vips_image_init_fields( VipsImage *image,
int xsize, int ysize, int bands,
VipsBandFormat format, VipsCoding coding,
VipsInterpretation interpretation,
double xres, double yres );
VIPS_API
void vips_image_set( VipsImage *image, const char *name, GValue *value );
VIPS_API
int vips_image_get( const VipsImage *image,
const char *name, GValue *value_copy );
VIPS_API
int vips_image_get_as_string( const VipsImage *image,
const char *name, char **out );
VIPS_API
GType vips_image_get_typeof( const VipsImage *image, const char *name );
VIPS_API
gboolean vips_image_remove( VipsImage *image, const char *name );
typedef void *(*VipsImageMapFn)( VipsImage *image,
const char *name, GValue *value, void *a );
VIPS_API
void *vips_image_map( VipsImage *image, VipsImageMapFn fn, void *a );
VIPS_API
gchar **vips_image_get_fields( VipsImage *image );
VIPS_API
void vips_image_set_area( VipsImage *image,
const char *name, VipsCallbackFn free_fn, void *data );
VIPS_API
int vips_image_get_area( const VipsImage *image,
const char *name, const void **data );
VIPS_API
void vips_image_set_blob( VipsImage *image,
const char *name,
VipsCallbackFn free_fn, const void *data, size_t length );
VIPS_API
void vips_image_set_blob_copy( VipsImage *image,
const char *name, const void *data, size_t length );
VIPS_API
int vips_image_get_blob( const VipsImage *image,
const char *name, const void **data, size_t *length );
VIPS_API
int vips_image_get_int( const VipsImage *image, const char *name, int *out );
VIPS_API
void vips_image_set_int( VipsImage *image, const char *name, int i );
VIPS_API
int vips_image_get_double( const VipsImage *image,
const char *name, double *out );
VIPS_API
void vips_image_set_double( VipsImage *image, const char *name, double d );
VIPS_API
int vips_image_get_string( const VipsImage *image,
const char *name, const char **out );
VIPS_API
void vips_image_set_string( VipsImage *image,
const char *name, const char *str );
VIPS_API
void vips_image_print_field( const VipsImage *image, const char *name );
VIPS_API
int vips_image_get_image( const VipsImage *image,
const char *name, VipsImage **out );
VIPS_API
void vips_image_set_image( VipsImage *image, const char *name, VipsImage *im );
VIPS_API
void vips_image_set_array_int( VipsImage *image, const char *name,
const int *array, int n );
VIPS_API
int vips_image_get_array_int( VipsImage *image, const char *name,
int **out, int *n );
VIPS_API
int vips_image_get_array_double( VipsImage *image, const char *name,
double **out, int *n );
VIPS_API
void vips_image_set_array_double( VipsImage *image, const char *name,
const double *array, int n );
VIPS_API
int vips_image_history_printf( VipsImage *image, const char *format, ... )
__attribute__((format(printf, 2, 3)));
VIPS_API
int vips_image_history_args( VipsImage *image,
const char *name, int argc, char *argv[] );
VIPS_API
const char *vips_image_get_history( VipsImage *image );
#ifdef __cplusplus

View File

@ -38,30 +38,42 @@
extern "C" {
#endif /*__cplusplus*/
VIPS_API
int vips_maplut( VipsImage *in, VipsImage **out, VipsImage *lut, ... )
__attribute__((sentinel));
VIPS_API
int vips_percent( VipsImage *in, double percent, int *threshold, ... )
__attribute__((sentinel));
VIPS_API
int vips_stdif( VipsImage *in, VipsImage **out, int width, int height, ... )
__attribute__((sentinel));
VIPS_API
int vips_hist_cum( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_hist_norm( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_hist_equal( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_hist_plot( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_hist_match( VipsImage *in, VipsImage *ref, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_hist_local( VipsImage *in, VipsImage **out,
int width, int height, ... )
__attribute__((sentinel));
VIPS_API
int vips_hist_ismonotonic( VipsImage *in, gboolean *out, ... )
__attribute__((sentinel));
VIPS_API
int vips_hist_entropy( VipsImage *in, double *out, ... )
__attribute__((sentinel));
VIPS_API
int vips_case( VipsImage *index, VipsImage **cases, VipsImage **out, int n,
... )
__attribute__((sentinel));

View File

@ -364,6 +364,7 @@ typedef struct _VipsImageClass {
/* Don't put spaces around void here, it breaks gtk-doc.
*/
VIPS_API
GType vips_image_get_type(void);
/* Has to be guint64 and not size_t/off_t since we have to be able to address
@ -426,111 +427,175 @@ GType vips_image_get_type(void);
((double *) VIPS_IMAGE_ADDR( I, X, Y ))
#endif /*VIPS_DEBUG*/
VIPS_API
void vips_progress_set( gboolean progress );
VIPS_API
void vips_image_invalidate_all( VipsImage *image );
VIPS_API
void vips_image_minimise_all( VipsImage *image );
VIPS_API
gboolean vips_image_is_sequential( VipsImage *image );
VIPS_API
void vips_image_set_progress( VipsImage *image, gboolean progress );
VIPS_API
gboolean vips_image_iskilled( VipsImage *image );
VIPS_API
void vips_image_set_kill( VipsImage *image, gboolean kill );
VIPS_API
char *vips_filename_get_filename( const char *vips_filename );
VIPS_API
char *vips_filename_get_options( const char *vips_filename );
VIPS_API
VipsImage *vips_image_new( void );
VIPS_API
VipsImage *vips_image_new_memory( void );
VIPS_API
VipsImage *vips_image_memory( void );
VIPS_API
VipsImage *vips_image_new_from_file( const char *name, ... )
__attribute__((sentinel));
VIPS_API
VipsImage *vips_image_new_from_file_RW( const char *filename );
VIPS_API
VipsImage *vips_image_new_from_file_raw( const char *filename,
int xsize, int ysize, int bands, guint64 offset );
VIPS_API
VipsImage *vips_image_new_from_memory( const void *data, size_t size,
int width, int height, int bands, VipsBandFormat format );
VIPS_API
VipsImage *vips_image_new_from_memory_copy( const void *data, size_t size,
int width, int height, int bands, VipsBandFormat format );
VIPS_API
VipsImage *vips_image_new_from_buffer( const void *buf, size_t len,
const char *option_string, ... )
__attribute__((sentinel));
VIPS_API
VipsImage *vips_image_new_from_source( VipsSource *source,
const char *option_string, ... ) __attribute__((sentinel));
VIPS_API
VipsImage *vips_image_new_matrix( int width, int height );
VIPS_API
VipsImage *vips_image_new_matrixv( int width, int height, ... );
VIPS_API
VipsImage *vips_image_new_matrix_from_array( int width, int height,
const double *array, int size );
VIPS_API
VipsImage *vips_image_matrix_from_array( int width, int height,
const double *array, int size );
VIPS_API
VipsImage *vips_image_new_from_image( VipsImage *image,
const double *c, int n );
VIPS_API
VipsImage *vips_image_new_from_image1( VipsImage *image, double c );
VIPS_API
void vips_image_set_delete_on_close( VipsImage *image,
gboolean delete_on_close );
VIPS_API
guint64 vips_get_disc_threshold( void );
VIPS_API
VipsImage *vips_image_new_temp_file( const char *format );
VIPS_API
int vips_image_write( VipsImage *image, VipsImage *out );
VIPS_API
int vips_image_write_to_file( VipsImage *image, const char *name, ... )
__attribute__((sentinel));
VIPS_API
int vips_image_write_to_buffer( VipsImage *in,
const char *suffix, void **buf, size_t *size, ... )
__attribute__((sentinel));
VIPS_API
int vips_image_write_to_target( VipsImage *in,
const char *suffix, VipsTarget *target, ... )
__attribute__((sentinel));
VIPS_API
void *vips_image_write_to_memory( VipsImage *in, size_t *size );
VIPS_API
int vips_image_decode_predict( VipsImage *in,
int *bands, VipsBandFormat *format );
VIPS_API
int vips_image_decode( VipsImage *in, VipsImage **out );
VIPS_API
int vips_image_encode( VipsImage *in, VipsImage **out, VipsCoding coding );
VIPS_API
gboolean vips_image_isMSBfirst( VipsImage *image );
VIPS_API
gboolean vips_image_isfile( VipsImage *image );
VIPS_API
gboolean vips_image_ispartial( VipsImage *image );
VIPS_API
gboolean vips_image_hasalpha( VipsImage *image );
VIPS_API
VipsImage *vips_image_copy_memory( VipsImage *image );
VIPS_API
int vips_image_wio_input( VipsImage *image );
VIPS_API
int vips_image_pio_input( VipsImage *image );
VIPS_API
int vips_image_pio_output( VipsImage *image );
VIPS_API
int vips_image_inplace( VipsImage *image );
VIPS_API
int vips_image_write_prepare( VipsImage *image );
VIPS_API
int vips_image_write_line( VipsImage *image, int ypos, VipsPel *linebuffer );
VIPS_API
gboolean vips_band_format_isint( VipsBandFormat format );
VIPS_API
gboolean vips_band_format_isuint( VipsBandFormat format );
VIPS_API
gboolean vips_band_format_is8bit( VipsBandFormat format );
VIPS_API
gboolean vips_band_format_isfloat( VipsBandFormat format );
VIPS_API
gboolean vips_band_format_iscomplex( VipsBandFormat format );
VIPS_API
int vips_system( const char *cmd_format, ... )
__attribute__((sentinel));
/* Defined in type.c but declared here, since they use VipsImage.
*/
VIPS_API
VipsArrayImage *vips_array_image_new( VipsImage **array, int n );
VIPS_API
VipsArrayImage *vips_array_image_newv( int n, ... );
VIPS_API
VipsArrayImage *vips_array_image_new_from_string( const char *string,
VipsAccess flags );
VIPS_API
VipsArrayImage *vips_array_image_empty( void );
VIPS_API
VipsArrayImage *vips_array_image_append( VipsArrayImage *array,
VipsImage *image );
VIPS_API
VipsImage **vips_array_image_get( VipsArrayImage *array, int *n );
VIPS_API
VipsImage **vips_value_get_array_image( const GValue *value, int *n );
VIPS_API
void vips_value_set_array_image( GValue *value, int n );
/* Defined in reorder.c, but really a function on image.
*/
VIPS_API
int vips_reorder_prepare_many( VipsImage *image,
VipsRegion **regions, VipsRect *r );
VIPS_API
void vips_reorder_margin_hint( VipsImage *image, int margin );
VIPS_API
void vips_image_free_buffer( VipsImage *image, void *buffer );
#ifdef __cplusplus

View File

@ -93,7 +93,13 @@ typedef struct _VipsMeta {
GValue value; /* copy of value */
} VipsMeta;
/* TODO(kleisauke): VIPS_API is required by the magick module.
*/
VIPS_API
int vips__exif_parse( VipsImage *image );
/* TODO(kleisauke): VIPS_API is required by the heif module.
*/
VIPS_API
int vips__exif_update( VipsImage *image );
void vips_check_init( void );
@ -151,7 +157,19 @@ int vips__object_leak( void );
*/
int vips__open_image_read( const char *filename );
int vips__open_image_write( const char *filename, gboolean temp );
/* im_image_open_input() needs to have this visible.
*/
#if VIPS_ENABLE_DEPRECATED
VIPS_API
#endif
int vips_image_open_input( VipsImage *image );
/* im_image_open_output() needs to have this visible.
*/
#if VIPS_ENABLE_DEPRECATED
VIPS_API
#endif
int vips_image_open_output( VipsImage *image );
void vips__link_break_all( VipsImage *im );
@ -161,9 +179,27 @@ void *vips__link_map( VipsImage *image, gboolean upstream,
gboolean vips__mmap_supported( int fd );
void *vips__mmap( int fd, int writeable, size_t length, gint64 offset );
int vips__munmap( const void *start, size_t length );
int vips_mapfile( VipsImage * );
int vips_mapfilerw( VipsImage * );
int vips_remapfilerw( VipsImage * );
/* im_mapfile() needs to have this visible.
*/
#if VIPS_ENABLE_DEPRECATED
VIPS_API
#endif
int vips_mapfile( VipsImage *image );
/* im_mapfilerw() needs to have this visible.
*/
#if VIPS_ENABLE_DEPRECATED
VIPS_API
#endif
int vips_mapfilerw( VipsImage *image );
/* im_remapfilerw() needs to have this visible.
*/
#if VIPS_ENABLE_DEPRECATED
VIPS_API
#endif
int vips_remapfilerw( VipsImage *image );
void vips__buffer_init( void );
void vips__buffer_shutdown( void );
@ -172,11 +208,26 @@ void vips__copy_4byte( int swap, unsigned char *to, unsigned char *from );
void vips__copy_2byte( gboolean swap, unsigned char *to, unsigned char *from );
guint32 vips__file_magic( const char *filename );
/* TODO(kleisauke): VIPS_API is required by vipsheader.
*/
VIPS_API
int vips__has_extension_block( VipsImage *im );
/* TODO(kleisauke): VIPS_API is required by vipsheader.
*/
VIPS_API
void *vips__read_extension_block( VipsImage *im, int *size );
/* TODO(kleisauke): VIPS_API is required by vipsedit.
*/
VIPS_API
int vips__write_extension_block( VipsImage *im, void *buf, int size );
int vips__writehist( VipsImage *image );
/* TODO(kleisauke): VIPS_API is required by vipsedit.
*/
VIPS_API
int vips__read_header_bytes( VipsImage *im, unsigned char *from );
/* TODO(kleisauke): VIPS_API is required by vipsedit.
*/
VIPS_API
int vips__write_header_bytes( VipsImage *im, unsigned char *to );
int vips__image_meta_copy( VipsImage *dst, const VipsImage *src );
@ -186,6 +237,12 @@ int vips_image_written( VipsImage *image );
void vips_image_preeval( VipsImage *image );
void vips_image_eval( VipsImage *image, guint64 processed );
void vips_image_posteval( VipsImage *image );
/* im_openout() needs to have this visible.
*/
#if VIPS_ENABLE_DEPRECATED
VIPS_API
#endif
VipsImage *vips_image_new_mode( const char *filename, const char *mode );
int vips__formatalike_vec( VipsImage **in, VipsImage **out, int n );
@ -206,6 +263,9 @@ int vips__bandalike( const char *domain,
VipsPel *vips__vector_to_pels( const char *domain,
int bands, VipsBandFormat format, VipsCoding coding,
double *real, double *imag, int n );
/* TODO(kleisauke): VIPS_API is required by the poppler module.
*/
VIPS_API
VipsPel *vips__vector_to_ink( const char *domain,
VipsImage *im, double *real, double *imag, int n );
@ -248,6 +308,9 @@ void vips_mosaicing_operation_init( void );
void vips_cimg_operation_init( void );
guint64 vips__parse_size( const char *size_string );
/* TODO(kleisauke): VIPS_API is required by vipsthumbnail.
*/
VIPS_API
int vips__substitute( char *buf, size_t len, char *sub );
int vips_check_coding_labq( const char *domain, VipsImage *im );
@ -258,6 +321,9 @@ int vips__byteswap_bool( VipsImage *in, VipsImage **out, gboolean swap );
char *vips__xml_properties( VipsImage *image );
/* TODO(kleisauke): VIPS_API is required by the poppler module.
*/
VIPS_API
void vips__premultiplied_bgra2rgba( guint32 * restrict p, int n );
void vips__bgra2rgba( guint32 * restrict p, int n );
void vips__Lab2LabQ_vec( VipsPel *out, float *in, int width );

View File

@ -94,11 +94,16 @@ typedef struct _VipsInterpolateClass {
/* Don't put spaces around void here, it breaks gtk-doc.
*/
VIPS_API
GType vips_interpolate_get_type(void);
VIPS_API
void vips_interpolate( VipsInterpolate *interpolate,
void *out, VipsRegion *in, double x, double y );
VIPS_API
VipsInterpolateMethod vips_interpolate_get_method( VipsInterpolate *interpolate );
VIPS_API
int vips_interpolate_get_window_size( VipsInterpolate *interpolate );
VIPS_API
int vips_interpolate_get_window_offset( VipsInterpolate *interpolate );
/* How many bits of precision we keep for transformations, ie. how many
@ -117,12 +122,15 @@ int vips_interpolate_get_window_offset( VipsInterpolate *interpolate );
/* Convenience: return static interpolators, no need to unref.
*/
VIPS_API
VipsInterpolate *vips_interpolate_nearest_static( void );
VIPS_API
VipsInterpolate *vips_interpolate_bilinear_static( void );
/* Convenience: make an interpolator from a nickname. g_object_unref() when
* you're done with it.
*/
VIPS_API
VipsInterpolate *vips_interpolate_new( const char *nickname );
#ifdef __cplusplus

View File

@ -61,60 +61,99 @@ typedef struct im__DOUBLEMASK {
#define IM_MASK( M, X, Y ) ((M)->coeff[(X) + (Y) * (M)->xsize])
VIPS_DEPRECATED
INTMASK *im_create_imask( const char *filename, int xsize, int ysize );
VIPS_DEPRECATED
INTMASK *im_create_imaskv( const char *filename, int xsize, int ysize, ... );
VIPS_DEPRECATED
DOUBLEMASK *im_create_dmask( const char *filename, int xsize, int ysize );
VIPS_DEPRECATED
DOUBLEMASK *im_create_dmaskv( const char *filename, int xsize, int ysize, ... );
VIPS_DEPRECATED
INTMASK *im_read_imask( const char *filename );
VIPS_DEPRECATED
DOUBLEMASK *im_read_dmask( const char *filename );
VIPS_DEPRECATED
void im_print_imask( INTMASK *in );
VIPS_DEPRECATED
void im_print_dmask( DOUBLEMASK *in );
VIPS_DEPRECATED
int im_write_imask( INTMASK *in );
VIPS_DEPRECATED
int im_write_dmask( DOUBLEMASK *in );
VIPS_DEPRECATED
int im_write_imask_name( INTMASK *in, const char *filename );
VIPS_DEPRECATED
int im_write_dmask_name( DOUBLEMASK *in, const char *filename );
VIPS_DEPRECATED
int im_free_imask( INTMASK *in );
VIPS_DEPRECATED
int im_free_dmask( DOUBLEMASK *in );
VIPS_DEPRECATED
INTMASK *im_log_imask( const char *filename, double sigma, double min_ampl );
VIPS_DEPRECATED
DOUBLEMASK *im_log_dmask( const char *filename, double sigma, double min_ampl );
VIPS_DEPRECATED
INTMASK *im_gauss_imask( const char *filename, double sigma, double min_ampl );
VIPS_DEPRECATED
INTMASK *im_gauss_imask_sep( const char *filename,
double sigma, double min_ampl );
VIPS_DEPRECATED
DOUBLEMASK *im_gauss_dmask( const char *filename,
double sigma, double min_ampl );
VIPS_DEPRECATED
DOUBLEMASK *im_gauss_dmask_sep( const char *filename,
double sigma, double min_ampl );
VIPS_DEPRECATED
INTMASK *im_dup_imask( INTMASK *in, const char *filename );
VIPS_DEPRECATED
DOUBLEMASK *im_dup_dmask( DOUBLEMASK *in, const char *filename );
VIPS_DEPRECATED
INTMASK *im_scale_dmask( DOUBLEMASK *in, const char *filename );
VIPS_DEPRECATED
void im_norm_dmask( DOUBLEMASK *mask );
VIPS_DEPRECATED
DOUBLEMASK *im_imask2dmask( INTMASK *in, const char *filename );
VIPS_DEPRECATED
INTMASK *im_dmask2imask( DOUBLEMASK *in, const char *filename );
VIPS_DEPRECATED
INTMASK *im_rotate_imask90( INTMASK *in, const char *filename );
VIPS_DEPRECATED
INTMASK *im_rotate_imask45( INTMASK *in, const char *filename );
VIPS_DEPRECATED
DOUBLEMASK *im_rotate_dmask90( DOUBLEMASK *in, const char *filename );
VIPS_DEPRECATED
DOUBLEMASK *im_rotate_dmask45( DOUBLEMASK *in, const char *filename );
VIPS_DEPRECATED
DOUBLEMASK *im_mattrn( DOUBLEMASK *in, const char *filename );
VIPS_DEPRECATED
DOUBLEMASK *im_matcat( DOUBLEMASK *top, DOUBLEMASK *bottom,
const char *filename );
VIPS_DEPRECATED
DOUBLEMASK *im_matmul( DOUBLEMASK *in1, DOUBLEMASK *in2, const char *filename );
VIPS_DEPRECATED
DOUBLEMASK *im_lu_decomp( const DOUBLEMASK *mat, const char *filename );
VIPS_DEPRECATED
int im_lu_solve( const DOUBLEMASK *lu, double *vec );
VIPS_DEPRECATED
DOUBLEMASK *im_matinv( const DOUBLEMASK *mat, const char *filename );
VIPS_DEPRECATED
int im_matinv_inplace( DOUBLEMASK *mat );
VIPS_DEPRECATED
DOUBLEMASK *im_local_dmask( struct _VipsImage *out, DOUBLEMASK *mask );
VIPS_DEPRECATED
INTMASK *im_local_imask( struct _VipsImage *out, INTMASK *mask );
#ifdef __cplusplus

View File

@ -64,21 +64,31 @@ G_STMT_START { \
#define VIPS_ARRAY( OBJ, N, T ) \
((T *) vips_malloc( VIPS_OBJECT( OBJ ), (N) * sizeof( T )))
VIPS_API
void *vips_malloc( VipsObject *object, size_t size );
VIPS_API
char *vips_strdup( VipsObject *object, const char *str );
VIPS_API
void vips_tracked_free( void *s );
VIPS_API
void *vips_tracked_malloc( size_t size );
VIPS_API
size_t vips_tracked_get_mem( void );
VIPS_API
size_t vips_tracked_get_mem_highwater( void );
VIPS_API
int vips_tracked_get_allocs( void );
VIPS_API
int vips_tracked_open( const char *pathname, int flags, int mode );
VIPS_API
int vips_tracked_close( int fd );
VIPS_API
int vips_tracked_get_files( void );
#ifdef __cplusplus
}
#endif /*__cplusplus*/
#endif /*IM_MEMORY_H*/
#endif /*VIPS_MEMORY_H*/

View File

@ -44,19 +44,25 @@ typedef enum {
VIPS_OPERATION_MORPHOLOGY_LAST
} VipsOperationMorphology;
VIPS_API
int vips_morph( VipsImage *in, VipsImage **out, VipsImage *mask,
VipsOperationMorphology morph, ... )
__attribute__((sentinel));
VIPS_API
int vips_rank( VipsImage *in, VipsImage **out,
int width, int height, int index, ... )
__attribute__((sentinel));
VIPS_API
int vips_median( VipsImage *in, VipsImage **out, int size, ... )
__attribute__((sentinel));
VIPS_API
int vips_countlines( VipsImage *in, double *nolines,
VipsDirection direction, ... )
__attribute__((sentinel));
VIPS_API
int vips_labelregions( VipsImage *in, VipsImage **mask, ... )
__attribute__((sentinel));
VIPS_API
int vips_fill_nearest( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));

View File

@ -38,30 +38,37 @@
extern "C" {
#endif /*__cplusplus*/
VIPS_API
int vips_merge( VipsImage *ref, VipsImage *sec, VipsImage **out,
VipsDirection direction, int dx, int dy, ... )
__attribute__((sentinel));
VIPS_API
int vips_mosaic( VipsImage *ref, VipsImage *sec, VipsImage **out,
VipsDirection direction, int xref, int yref, int xsec, int ysec, ... )
__attribute__((sentinel));
VIPS_API
int vips_mosaic1( VipsImage *ref, VipsImage *sec, VipsImage **out,
VipsDirection direction,
int xr1, int yr1, int xs1, int ys1,
int xr2, int yr2, int xs2, int ys2, ... )
__attribute__((sentinel));
VIPS_API
int vips_match( VipsImage *ref, VipsImage *sec, VipsImage **out,
int xr1, int yr1, int xs1, int ys1,
int xr2, int yr2, int xs2, int ys2, ... )
__attribute__((sentinel));
VIPS_API
int vips_globalbalance( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_remosaic( VipsImage *in, VipsImage **out,
const char *old_str, const char *new_str, ... )
__attribute__((sentinel));
VIPS_API
int vips_matrixinvert( VipsImage *m, VipsImage **out, ... )
__attribute__((sentinel));

View File

@ -302,29 +302,38 @@ typedef struct _VipsArgumentInstance {
*/
typedef GHashTable VipsArgumentTable;
VIPS_API
int vips_argument_get_id( void );
void vips__object_set_member( VipsObject *object, GParamSpec *pspec,
GObject **member, GObject *argument );
typedef void *(*VipsArgumentMapFn)( VipsObject *object, GParamSpec *pspec,
VipsArgumentClass *argument_class,
VipsArgumentInstance *argument_instance, void *a, void *b );
VIPS_API
void *vips_argument_map( VipsObject *object,
VipsArgumentMapFn fn, void *a, void *b );
VIPS_API
int vips_object_get_args( VipsObject *object,
const char ***names, int **flags, int *n_args );
typedef void *(*VipsArgumentClassMapFn)( VipsObjectClass *object_class,
GParamSpec *pspec,
VipsArgumentClass *argument_class, void *a, void *b );
VIPS_API
void *vips_argument_class_map( VipsObjectClass *object_class,
VipsArgumentClassMapFn fn, void *a, void *b );
VIPS_API
gboolean vips_argument_class_needsstring( VipsArgumentClass *argument_class );
VIPS_API
int vips_object_get_argument( VipsObject *object, const char *name,
GParamSpec **pspec,
VipsArgumentClass **argument_class,
VipsArgumentInstance **argument_instance );
VIPS_API
gboolean vips_object_argument_isset( VipsObject *object, const char *name );
VIPS_API
VipsArgumentFlags vips_object_get_argument_flags( VipsObject *object,
const char *name );
VIPS_API
int vips_object_get_argument_priority( VipsObject *object, const char *name );
/* We have to loop over an objects args in several places, and we can't always
@ -568,83 +577,124 @@ struct _VipsObjectClass {
void (*_vips_reserved4)( void );
};
VIPS_API
gboolean vips_value_is_null( GParamSpec *psoec, const GValue *value );
VIPS_API
void vips_object_set_property( GObject *gobject,
guint property_id, const GValue *value, GParamSpec *pspec );
VIPS_API
void vips_object_get_property( GObject *gobject,
guint property_id, GValue *value, GParamSpec *pspec );
VIPS_API
void vips_object_preclose( VipsObject *object );
VIPS_API
int vips_object_build( VipsObject *object );
VIPS_API
void vips_object_summary_class( VipsObjectClass *klass, VipsBuf *buf );
VIPS_API
void vips_object_summary( VipsObject *object, VipsBuf *buf );
VIPS_API
void vips_object_dump( VipsObject *object, VipsBuf *buf );
VIPS_API
void vips_object_print_summary_class( VipsObjectClass *klass );
VIPS_API
void vips_object_print_summary( VipsObject *object );
VIPS_API
void vips_object_print_dump( VipsObject *object );
VIPS_API
void vips_object_print_name( VipsObject *object );
VIPS_API
gboolean vips_object_sanity( VipsObject *object );
/* Don't put spaces around void here, it breaks gtk-doc.
*/
VIPS_API
GType vips_object_get_type(void);
VIPS_API
void vips_object_class_install_argument( VipsObjectClass *cls,
GParamSpec *pspec, VipsArgumentFlags flags,
int priority, guint offset );
VIPS_API
int vips_object_set_argument_from_string( VipsObject *object,
const char *name, const char *value );
VIPS_API
gboolean vips_object_argument_needsstring( VipsObject *object,
const char *name );
VIPS_API
int vips_object_get_argument_to_string( VipsObject *object,
const char *name, const char *arg );
VIPS_API
int vips_object_set_required( VipsObject *object, const char *value );
typedef void *(*VipsObjectSetArguments)( VipsObject *object, void *a, void *b );
VIPS_API
VipsObject *vips_object_new( GType type,
VipsObjectSetArguments set, void *a, void *b );
VIPS_API
int vips_object_set_valist( VipsObject *object, va_list ap );
VIPS_API
int vips_object_set( VipsObject *object, ... )
__attribute__((sentinel));
VIPS_API
int vips_object_set_from_string( VipsObject *object, const char *string );
VIPS_API
VipsObject *vips_object_new_from_string( VipsObjectClass *object_class,
const char *p );
VIPS_API
void vips_object_to_string( VipsObject *object, VipsBuf *buf );
VIPS_API
void *vips_object_map( VipsSListMap2Fn fn, void *a, void *b );
typedef void *(*VipsTypeMapFn)( GType type, void *a );
typedef void *(*VipsTypeMap2Fn)( GType type, void *a, void *b );
typedef void *(*VipsClassMapFn)( VipsObjectClass *cls, void *a );
VIPS_API
void *vips_type_map( GType base, VipsTypeMap2Fn fn, void *a, void *b );
VIPS_API
void *vips_type_map_all( GType base, VipsTypeMapFn fn, void *a );
VIPS_API
int vips_type_depth( GType type );
VIPS_API
GType vips_type_find( const char *basename, const char *nickname );
VIPS_API
const char *vips_nickname_find( GType type );
VIPS_API
void *vips_class_map_all( GType type, VipsClassMapFn fn, void *a );
VIPS_API
const VipsObjectClass *vips_class_find( const char *basename,
const char *nickname );
VIPS_API
VipsObject **vips_object_local_array( VipsObject *parent, int n );
VIPS_API
void vips_object_local_cb( VipsObject *vobject, GObject *gobject );
#define vips_object_local( V, G ) \
(g_signal_connect( V, "close", G_CALLBACK( vips_object_local_cb ), G ))
VIPS_API
void vips_object_set_static( VipsObject *object, gboolean static_object );
VIPS_API
void vips_object_print_all( void );
VIPS_API
void vips_object_sanity_all( void );
VIPS_API
void vips_object_rewind( VipsObject *object );
VIPS_API
void vips_object_unref_outputs( VipsObject *object );
VIPS_API
const char *vips_object_get_description( VipsObject *object );
#ifdef __cplusplus

View File

@ -102,47 +102,77 @@ typedef struct _VipsOperationClass {
/* Don't put spaces around void here, it breaks gtk-doc.
*/
VIPS_API
GType vips_operation_get_type(void);
VIPS_API
VipsOperationFlags vips_operation_get_flags( VipsOperation *operation );
VIPS_API
void vips_operation_class_print_usage( VipsOperationClass *operation_class );
VIPS_API
void vips_operation_invalidate( VipsOperation *operation );
VIPS_API
int vips_operation_call_valist( VipsOperation *operation, va_list ap );
VIPS_API
VipsOperation *vips_operation_new( const char *name );
VIPS_API
int vips_call_required_optional( VipsOperation **operation,
va_list required, va_list optional );
VIPS_API
int vips_call( const char *operation_name, ... )
__attribute__((sentinel));
VIPS_API
int vips_call_split( const char *operation_name, va_list optional, ... );
VIPS_API
int vips_call_split_option_string( const char *operation_name,
const char *option_string, va_list optional, ... );
VIPS_API
void vips_call_options( GOptionGroup *group, VipsOperation *operation );
VIPS_API
int vips_call_argv( VipsOperation *operation, int argc, char **argv );
VIPS_API
void vips_cache_drop_all( void );
VIPS_API
VipsOperation *vips_cache_operation_lookup( VipsOperation *operation );
VIPS_API
void vips_cache_operation_add( VipsOperation *operation );
VIPS_API
int vips_cache_operation_buildp( VipsOperation **operation );
VIPS_API
VipsOperation *vips_cache_operation_build( VipsOperation *operation );
VIPS_API
void vips_cache_print( void );
VIPS_API
void vips_cache_set_max( int max );
VIPS_API
void vips_cache_set_max_mem( size_t max_mem );
VIPS_API
int vips_cache_get_max( void );
VIPS_API
int vips_cache_get_size( void );
VIPS_API
size_t vips_cache_get_max_mem( void );
VIPS_API
int vips_cache_get_max_files( void );
VIPS_API
void vips_cache_set_max_files( int max_files );
VIPS_API
void vips_cache_set_dump( gboolean dump );
VIPS_API
void vips_cache_set_trace( gboolean trace );
/* Part of threadpool, really, but we want these in a header that gets scanned
* for our typelib.
*/
VIPS_API
void vips_concurrency_set( int concurrency );
VIPS_API
int vips_concurrency_get( void );
VIPS_API
void vips_operation_block_set( const char *name, gboolean state );
#ifdef __cplusplus

View File

@ -71,7 +71,9 @@ typedef struct {
size_t length; /* Size of window */
} VipsWindow;
VIPS_API
int vips_window_unref( VipsWindow *window );
VIPS_API
void vips_window_print( VipsWindow *window );
/* Per-thread buffer state. Held in a GPrivate.
@ -114,14 +116,22 @@ typedef struct _VipsBuffer {
size_t bsize; /* Size of private malloc() */
} VipsBuffer;
VIPS_API
void vips_buffer_dump_all( void );
VIPS_API
void vips_buffer_done( VipsBuffer *buffer );
VIPS_API
void vips_buffer_undone( VipsBuffer *buffer );
VIPS_API
void vips_buffer_unref( VipsBuffer *buffer );
VIPS_API
VipsBuffer *vips_buffer_new( struct _VipsImage *im, VipsRect *area );
VIPS_API
VipsBuffer *vips_buffer_ref( struct _VipsImage *im, VipsRect *area );
VIPS_API
VipsBuffer *vips_buffer_unref_ref( VipsBuffer *buffer,
struct _VipsImage *im, VipsRect *area );
VIPS_API
void vips_buffer_print( VipsBuffer *buffer );
void vips__render_shutdown( void );
@ -155,33 +165,48 @@ typedef enum _RegionType {
struct _VipsRegion;
void vips__region_take_ownership( struct _VipsRegion *reg );
void vips__region_check_ownership( struct _VipsRegion *reg );
/* TODO(kleisauke): VIPS_API is required by vipsdisp.
*/
VIPS_API
void vips__region_no_ownership( struct _VipsRegion *reg );
typedef int (*VipsRegionFillFn)( struct _VipsRegion *, void * );
VIPS_API
int vips_region_fill( struct _VipsRegion *reg,
const VipsRect *r, VipsRegionFillFn fn, void *a );
int vips__image_wio_output( struct _VipsImage *image );
int vips__image_pio_output( struct _VipsImage *image );
/* VIPS_ARGUMENT_FOR_ALL() needs to have this visible.
*/
VIPS_API
VipsArgumentInstance *vips__argument_get_instance(
VipsArgumentClass *argument_class,
VipsObject *object);
VipsArgument *vips__argument_table_lookup( VipsArgumentTable *table,
GParamSpec *pspec);
/* im_demand_hint_array() needs to have this visible.
*/
#if VIPS_ENABLE_DEPRECATED
VIPS_API
#endif
void vips__demand_hint_array( struct _VipsImage *image,
int hint, struct _VipsImage **in );
/* im_cp_desc_array() needs to have this visible.
*/
#if VIPS_ENABLE_DEPRECATED
VIPS_API
#endif
int vips__image_copy_fields_array( struct _VipsImage *out,
struct _VipsImage *in[] );
void vips__region_count_pixels( struct _VipsRegion *region, const char *nickname );
VIPS_API
void vips_region_dump_all( void );
/* Deprecated.
*/
int vips__init( const char *argv0 );
size_t vips__get_sizeof_vipsobject( void );
VIPS_API
int vips_region_prepare_many( struct _VipsRegion **reg, const VipsRect *r );
/* Handy for debugging.
@ -190,7 +215,8 @@ int vips__view_image( struct _VipsImage *image );
/* Pre 8.7 libvipses used this for allocating argument ids.
*/
extern int _vips__argument_id;
VIPS_API
int _vips__argument_id;
void vips__meta_init( void );

View File

@ -50,17 +50,27 @@ typedef struct _VipsRect {
#define VIPS_RECT_HCENTRE(R) ((R)->left + (R)->width / 2)
#define VIPS_RECT_VCENTRE(R) ((R)->top + (R)->height / 2)
VIPS_API
gboolean vips_rect_isempty( const VipsRect *r );
VIPS_API
gboolean vips_rect_includespoint( const VipsRect *r, int x, int y );
VIPS_API
gboolean vips_rect_includesrect( const VipsRect *r1, const VipsRect *r2 );
VIPS_API
gboolean vips_rect_equalsrect( const VipsRect *r1, const VipsRect *r2 );
VIPS_API
gboolean vips_rect_overlapsrect( const VipsRect *r1, const VipsRect *r2 );
VIPS_API
void vips_rect_marginadjust( VipsRect *r, int n );
VIPS_API
void vips_rect_intersectrect( const VipsRect *r1, const VipsRect *r2,
VipsRect *out );
VIPS_API
void vips_rect_unionrect( const VipsRect *r1, const VipsRect *r2,
VipsRect *out );
VIPS_API
VipsRect *vips_rect_dup( const VipsRect *r );
VIPS_API
void vips_rect_normalise( VipsRect *r );
#ifdef __cplusplus

View File

@ -130,37 +130,56 @@ typedef struct _VipsRegionClass {
/* Don't put spaces around void here, it breaks gtk-doc.
*/
VIPS_API
GType vips_region_get_type(void);
VIPS_API
VipsRegion *vips_region_new( VipsImage *image );
VIPS_API
int vips_region_buffer( VipsRegion *reg, const VipsRect *r );
VIPS_API
int vips_region_image( VipsRegion *reg, const VipsRect *r );
VIPS_API
int vips_region_region( VipsRegion *reg, VipsRegion *dest,
const VipsRect *r, int x, int y );
VIPS_API
int vips_region_equalsregion( VipsRegion *reg1, VipsRegion *reg2 );
VIPS_API
int vips_region_position( VipsRegion *reg, int x, int y );
VIPS_API
void vips_region_paint( VipsRegion *reg, const VipsRect *r, int value );
VIPS_API
void vips_region_paint_pel( VipsRegion *reg,
const VipsRect *r, const VipsPel *ink );
VIPS_API
void vips_region_black( VipsRegion *reg );
VIPS_API
void vips_region_copy( VipsRegion *reg, VipsRegion *dest,
const VipsRect *r, int x, int y );
VIPS_API
int vips_region_shrink_method( VipsRegion *from, VipsRegion *to,
const VipsRect *target, VipsRegionShrink method );
VIPS_API
int vips_region_shrink( VipsRegion *from, VipsRegion *to,
const VipsRect *target );
VIPS_API
int vips_region_prepare( VipsRegion *reg, const VipsRect *r );
VIPS_API
int vips_region_prepare_to( VipsRegion *reg,
VipsRegion *dest, const VipsRect *r, int x, int y );
VIPS_API
VipsPel *vips_region_fetch( VipsRegion *region,
int left, int top, int width, int height, size_t *len );
VIPS_API
int vips_region_width( VipsRegion *region );
VIPS_API
int vips_region_height( VipsRegion *region );
VIPS_API
void vips_region_invalidate( VipsRegion *reg );
/* Use this to count pixels passing through key points. Handy for spotting bad

View File

@ -56,47 +56,63 @@ typedef enum {
VIPS_SIZE_LAST
} VipsSize;
VIPS_API
int vips_shrink( VipsImage *in, VipsImage **out,
double hshrink, double vshrink, ... )
__attribute__((sentinel));
VIPS_API
int vips_shrinkh( VipsImage *in, VipsImage **out, int hshrink, ... )
__attribute__((sentinel));
VIPS_API
int vips_shrinkv( VipsImage *in, VipsImage **out, int vshrink, ... )
__attribute__((sentinel));
VIPS_API
int vips_reduce( VipsImage *in, VipsImage **out,
double hshrink, double vshrink, ... )
__attribute__((sentinel));
VIPS_API
int vips_reduceh( VipsImage *in, VipsImage **out, double hshrink, ... )
__attribute__((sentinel));
VIPS_API
int vips_reducev( VipsImage *in, VipsImage **out, double vshrink, ... )
__attribute__((sentinel));
VIPS_API
int vips_thumbnail( const char *filename, VipsImage **out, int width, ... )
__attribute__((sentinel));
VIPS_API
int vips_thumbnail_buffer( void *buf, size_t len, VipsImage **out,
int width, ... )
__attribute__((sentinel));
VIPS_API
int vips_thumbnail_image( VipsImage *in, VipsImage **out, int width, ... )
__attribute__((sentinel));
VIPS_API
int vips_thumbnail_source( VipsSource *source, VipsImage **out,
int width, ... )
__attribute__((sentinel));
VIPS_API
int vips_similarity( VipsImage *in, VipsImage **out, ... )
__attribute__((sentinel));
VIPS_API
int vips_rotate( VipsImage *in, VipsImage **out, double angle, ... )
__attribute__((sentinel));
VIPS_API
int vips_affine( VipsImage *in, VipsImage **out,
double a, double b, double c, double d, ... )
__attribute__((sentinel));
VIPS_API
int vips_resize( VipsImage *in, VipsImage **out, double scale, ... )
__attribute__((sentinel));
VIPS_API
int vips_mapim( VipsImage *in, VipsImage **out, VipsImage *index, ... )
__attribute__((sentinel));
VIPS_API
int vips_quadratic( VipsImage *in, VipsImage **out, VipsImage *coeff, ... )
__attribute__((sentinel));

View File

@ -95,24 +95,30 @@ typedef struct _VipsSbufClass {
} VipsSbufClass;
VIPS_API
GType vips_sbuf_get_type( void );
VIPS_API
VipsSbuf *vips_sbuf_new_from_source( VipsSource *source );
VIPS_API
void vips_sbuf_unbuffer( VipsSbuf *sbuf );
VIPS_API
int vips_sbuf_getc( VipsSbuf *sbuf );
#define VIPS_SBUF_GETC( S ) ( \
(S)->read_point < (S)->chars_in_buffer ? \
(S)->input_buffer[(S)->read_point++] : \
vips_sbuf_getc( S ) \
)
VIPS_API
void vips_sbuf_ungetc( VipsSbuf *sbuf );
#define VIPS_SBUF_UNGETC( S ) { \
if( (S)->read_point > 0 ) \
(S)->read_point -= 1; \
}
VIPS_API
int vips_sbuf_require( VipsSbuf *sbuf, int require );
#define VIPS_SBUF_REQUIRE( S, R ) ( \
(S)->read_point + (R) <= (S)->chars_in_buffer ? \
@ -122,9 +128,13 @@ int vips_sbuf_require( VipsSbuf *sbuf, int require );
#define VIPS_SBUF_PEEK( S ) ((S)->input_buffer + (S)->read_point)
#define VIPS_SBUF_FETCH( S ) ((S)->input_buffer[(S)->read_point++])
VIPS_API
const char *vips_sbuf_get_line( VipsSbuf *sbuf );
VIPS_API
char *vips_sbuf_get_line_copy( VipsSbuf *sbuf );
VIPS_API
const char *vips_sbuf_get_non_whitespace( VipsSbuf *sbuf );
VIPS_API
int vips_sbuf_skip_whitespace( VipsSbuf *sbuf );
#ifdef __cplusplus

View File

@ -55,11 +55,17 @@ typedef struct {
GCond *cond;
} VipsSemaphore;
VIPS_API
int vips_semaphore_up( VipsSemaphore *s );
VIPS_API
int vips_semaphore_down( VipsSemaphore *s );
VIPS_API
int vips_semaphore_upn( VipsSemaphore *s, int n );
VIPS_API
int vips_semaphore_downn( VipsSemaphore *s, int n );
VIPS_API
void vips_semaphore_destroy( VipsSemaphore *s );
VIPS_API
void vips_semaphore_init( VipsSemaphore *s, int v, char *name );
#ifdef __cplusplus

View File

@ -39,19 +39,26 @@ extern "C" {
/* We need wrappers over g_mutex_new(), it was replaced by g_mutex_init() in
* glib 2.32+
*/
VIPS_API
GMutex *vips_g_mutex_new( void );
VIPS_API
void vips_g_mutex_free( GMutex * );
/* Same for GCond.
*/
VIPS_API
GCond *vips_g_cond_new( void );
VIPS_API
void vips_g_cond_free( GCond * );
/* ... and for GThread.
*/
VIPS_API
GThread *vips_g_thread_new( const char *, GThreadFunc, gpointer );
VIPS_API
void *vips_g_thread_join( GThread *thread );
VIPS_API
gboolean vips_thread_isworker( void );
#ifdef __cplusplus

View File

@ -110,12 +110,15 @@ typedef struct _VipsThreadStateClass {
} VipsThreadStateClass;
VIPS_API
void *vips_thread_state_set( VipsObject *object, void *a, void *b );
/* Don't put spaces around void here, it breaks gtk-doc.
*/
VIPS_API
GType vips_thread_state_get_type(void);
VIPS_API
VipsThreadState *vips_thread_state_new( VipsImage *im, void *a );
/* Constructor for per-thread state.
@ -139,12 +142,14 @@ typedef int (*VipsThreadpoolWorkFn)( VipsThreadState *state, void *a );
*/
typedef int (*VipsThreadpoolProgressFn)( void *a );
VIPS_API
int vips_threadpool_run( VipsImage *im,
VipsThreadStartFn start,
VipsThreadpoolAllocateFn allocate,
VipsThreadpoolWorkFn work,
VipsThreadpoolProgressFn progress,
void *a );
VIPS_API
void vips_get_tile_size( VipsImage *im,
int *tile_width, int *tile_height, int *n_lines );

View File

@ -50,7 +50,9 @@ typedef struct _VipsThing {
* The #GType for a #VipsThing.
*/
#define VIPS_TYPE_THING (vips_thing_get_type())
VIPS_API
GType vips_thing_get_type(void);
VIPS_API
VipsThing *vips_thing_new( int i );
/* A ref-counted area of memory. Can hold arrays of things as well.
@ -91,13 +93,20 @@ typedef struct _VipsArea {
size_t sizeof_type;
} VipsArea;
VIPS_API
VipsArea *vips_area_copy( VipsArea *area );
VIPS_API
int vips_area_free_cb( void *mem, VipsArea *area );
VIPS_API
void vips_area_unref( VipsArea *area );
VIPS_API
VipsArea *vips_area_new( VipsCallbackFn free_fn, void *data );
VIPS_API
VipsArea *vips_area_new_array( GType type, size_t sizeof_type, int n );
VIPS_API
VipsArea *vips_area_new_array_object( int n );
VIPS_API
void *vips_area_get_data( VipsArea *area,
size_t *length, int *n, GType *type, size_t *sizeof_type );
@ -125,6 +134,7 @@ void *vips_area_get_data( VipsArea *area,
*/
#define VIPS_TYPE_AREA (vips_area_get_type())
#define VIPS_AREA( X ) ((VipsArea *) (X))
VIPS_API
GType vips_area_get_type(void);
/**
@ -133,6 +143,7 @@ GType vips_area_get_type(void);
* The #GType for a #VipsSaveString.
*/
#define VIPS_TYPE_SAVE_STRING (vips_save_string_get_type())
VIPS_API
GType vips_save_string_get_type(void);
/**
@ -146,8 +157,11 @@ typedef struct _VipsRefString {
VipsArea area;
} VipsRefString;
VIPS_API
VipsRefString *vips_ref_string_new( const char *str );
VIPS_API
const char *vips_ref_string_get( VipsRefString *refstr, size_t *length );
VIPS_API
GType vips_ref_string_get_type(void);
/**
@ -161,12 +175,17 @@ typedef struct _VipsBlob {
VipsArea area;
} VipsBlob;
VIPS_API
VipsBlob *vips_blob_new( VipsCallbackFn free_fn,
const void *data, size_t length );
VIPS_API
VipsBlob *vips_blob_copy( const void *data, size_t length );
VIPS_API
const void *vips_blob_get( VipsBlob *blob, size_t *length );
VIPS_API
void vips_blob_set( VipsBlob *blob,
VipsCallbackFn free_fn, const void *data, size_t length );
VIPS_API
GType vips_blob_get_type(void);
/**
@ -180,9 +199,13 @@ typedef struct _VipsArrayDouble {
VipsArea area;
} VipsArrayDouble;
VIPS_API
VipsArrayDouble *vips_array_double_new( const double *array, int n );
VIPS_API
VipsArrayDouble *vips_array_double_newv( int n, ... );
VIPS_API
double *vips_array_double_get( VipsArrayDouble *array, int *n );
VIPS_API
GType vips_array_double_get_type(void);
/**
@ -196,9 +219,13 @@ typedef struct _VipsArrayInt {
VipsArea area;
} VipsArrayInt;
VIPS_API
VipsArrayInt *vips_array_int_new( const int *array, int n );
VIPS_API
VipsArrayInt *vips_array_int_newv( int n, ... );
VIPS_API
int *vips_array_int_get( VipsArrayInt *array, int *n );
VIPS_API
GType vips_array_int_get_type(void);
/**
@ -215,36 +242,55 @@ typedef struct _VipsArrayImage {
/* See image.h for vips_array_image_new() etc., they need to be declared after
* VipsImage.
*/
VIPS_API
GType vips_array_image_get_type(void);
VIPS_API
void vips_value_set_area( GValue *value, VipsCallbackFn free_fn, void *data );
VIPS_API
void *vips_value_get_area( const GValue *value, size_t *length );
VIPS_API
const char *vips_value_get_save_string( const GValue *value );
VIPS_API
void vips_value_set_save_string( GValue *value, const char *str );
VIPS_API
void vips_value_set_save_stringf( GValue *value, const char *fmt, ... )
__attribute__((format(printf, 2, 3)));
VIPS_API
const char *vips_value_get_ref_string( const GValue *value, size_t *length );
VIPS_API
void vips_value_set_ref_string( GValue *value, const char *str );
VIPS_API
void *vips_value_get_blob( const GValue *value, size_t *length );
VIPS_API
void vips_value_set_blob( GValue *value,
VipsCallbackFn free_fn, const void *data, size_t length );
VIPS_API
void vips_value_set_blob_free( GValue *value, void *data, size_t length );
VIPS_API
void vips_value_set_array( GValue *value,
int n, GType type, size_t sizeof_type );
VIPS_API
void *vips_value_get_array( const GValue *value,
int *n, GType *type, size_t *sizeof_type );
VIPS_API
double *vips_value_get_array_double( const GValue *value, int *n );
VIPS_API
void vips_value_set_array_double( GValue *value, const double *array, int n );
VIPS_API
int *vips_value_get_array_int( const GValue *value, int *n );
VIPS_API
void vips_value_set_array_int( GValue *value, const int *array, int n );
VIPS_API
GObject **vips_value_get_array_object( const GValue *value, int *n );
VIPS_API
void vips_value_set_array_object( GValue *value, int n );
/* See also image.h, that has vips_array_image_get(), vips_array_image_new(),

View File

@ -215,43 +215,72 @@ G_STMT_START { \
*/
#define VIPS_PATH_MAX (4096)
VIPS_API
const char *vips_enum_string( GType enm, int value );
VIPS_API
const char *vips_enum_nick( GType enm, int value );
VIPS_API
int vips_enum_from_nick( const char *domain, GType type, const char *str );
VIPS_API
int vips_flags_from_nick( const char *domain, GType type, const char *nick );
VIPS_API
gboolean vips_slist_equal( GSList *l1, GSList *l2 );
VIPS_API
void *vips_slist_map2( GSList *list, VipsSListMap2Fn fn, void *a, void *b );
VIPS_API
void *vips_slist_map2_rev( GSList *list, VipsSListMap2Fn fn, void *a, void *b );
VIPS_API
void *vips_slist_map4( GSList *list,
VipsSListMap4Fn fn, void *a, void *b, void *c, void *d );
VIPS_API
void *vips_slist_fold2( GSList *list, void *start,
VipsSListFold2Fn fn, void *a, void *b );
VIPS_API
GSList *vips_slist_filter( GSList *list, VipsSListMap2Fn fn, void *a, void *b );
VIPS_API
void vips_slist_free_all( GSList *list );
VIPS_API
void *vips_map_equal( void *a, void *b );
VIPS_API
void *vips_hash_table_map( GHashTable *hash,
VipsSListMap2Fn fn, void *a, void *b );
VIPS_API
char *vips_strncpy( char *dest, const char *src, int n );
VIPS_API
char *vips_strrstr( const char *haystack, const char *needle );
VIPS_API
gboolean vips_ispostfix( const char *a, const char *b );
VIPS_API
gboolean vips_iscasepostfix( const char *a, const char *b );
VIPS_API
gboolean vips_isprefix( const char *a, const char *b );
VIPS_API
char *vips_break_token( char *str, const char *brk );
void vips__chomp( char *str );
VIPS_API
int vips_vsnprintf( char *str, size_t size, const char *format, va_list ap );
VIPS_API
int vips_snprintf( char *str, size_t size, const char *format, ... )
__attribute__((format(printf, 3, 4)));
VIPS_API
int vips_filename_suffix_match( const char *path, const char *suffixes[] );
VIPS_API
gint64 vips_file_length( int fd );
/* TODO(kleisauke): VIPS_API is required by vipsedit.
*/
VIPS_API
int vips__write( int fd, const void *buf, size_t count );
/* TODO(kleisauke): VIPS_API is required by test_connections.
*/
VIPS_API
int vips__open( const char *filename, int flags, int mode );
int vips__open_read( const char *filename );
FILE *vips__fopen( const char *filename, const char *mode );
@ -260,10 +289,16 @@ FILE *vips__file_open_read( const char *filename,
const char *fallback_dir, gboolean text_mode );
FILE *vips__file_open_write( const char *filename,
gboolean text_mode );
/* TODO(kleisauke): VIPS_API is required by vipsedit.
*/
VIPS_API
char *vips__file_read( FILE *fp, const char *name, size_t *length_out );
char *vips__file_read_name( const char *name, const char *fallback_dir,
size_t *length_out );
int vips__file_write( void *data, size_t size, size_t nmemb, FILE *stream );
/* TODO(kleisauke): VIPS_API is required by the magick module.
*/
VIPS_API
gint64 vips__get_bytes( const char *filename,
unsigned char buf[], gint64 len );
int vips__fgetc( FILE *fp );
@ -275,16 +310,24 @@ GSList *vips__gslist_gvalue_merge( GSList *a, const GSList *b );
char *vips__gslist_gvalue_get( const GSList *list );
gint64 vips__seek_no_error( int fd, gint64 pos, int whence );
/* TODO(kleisauke): VIPS_API is required by vipsedit.
*/
VIPS_API
gint64 vips__seek( int fd, gint64 pos, int whence );
int vips__ftruncate( int fd, gint64 pos );
VIPS_API
int vips_existsf( const char *name, ... )
__attribute__((format(printf, 1, 2)));
VIPS_API
int vips_isdirf( const char *name, ... )
__attribute__((format(printf, 1, 2)));
VIPS_API
int vips_mkdirf( const char *name, ... )
__attribute__((format(printf, 1, 2)));
VIPS_API
int vips_rmdirf( const char *name, ... )
__attribute__((format(printf, 1, 2)));
VIPS_API
int vips_rename( const char *old_name, const char *new_name );
/**
@ -323,17 +366,26 @@ const char *vips__token_segment( const char *p, VipsToken *token,
const char *vips__token_segment_need( const char *p, VipsToken need_token,
char *string, int size );
const char *vips__find_rightmost_brackets( const char *p );
/* TODO(kleisauke): VIPS_API is required by libvips-cpp and vipsheader.
*/
VIPS_API
void vips__filename_split8( const char *name,
char *filename, char *option_string );
VIPS_API
int vips_ispoweroftwo( int p );
VIPS_API
int vips_amiMSBfirst( void );
/* TODO(kleisauke): VIPS_API is required by jpegsave_file_fuzzer.
*/
VIPS_API
char *vips__temp_name( const char *format );
void vips__change_suffix( const char *name, char *out, int mx,
const char *new_suff, const char **olds, int nolds );
VIPS_API
char *vips_realpath( const char *path );
guint32 vips__random( guint32 seed );
@ -344,6 +396,7 @@ const char *vips__windows_prefix( void );
char *vips__get_iso8601( void );
VIPS_API
int vips_strtod( const char *str, double *out );
#ifdef __cplusplus

View File

@ -116,41 +116,64 @@ typedef struct {
*/
extern gboolean vips__vector_enabled;
VIPS_API
void vips_vector_init( void );
VIPS_API
gboolean vips_vector_isenabled( void );
VIPS_API
void vips_vector_set_enabled( gboolean enabled );
VIPS_API
void vips_vector_free( VipsVector *vector );
VIPS_API
VipsVector *vips_vector_new( const char *name, int dsize );
VIPS_API
void vips_vector_constant( VipsVector *vector,
char *name, int value, int size );
VIPS_API
void vips_vector_source_scanline( VipsVector *vector,
char *name, int line, int size );
VIPS_API
int vips_vector_source_name( VipsVector *vector, const char *name, int size );
VIPS_API
void vips_vector_temporary( VipsVector *vector, const char *name, int size );
VIPS_API
int vips_vector_parameter( VipsVector *vector, const char *name, int size );
VIPS_API
int vips_vector_destination( VipsVector *vector, const char *name, int size );
VIPS_API
void vips_vector_asm2( VipsVector *vector,
const char *op, const char *a, const char *b );
VIPS_API
void vips_vector_asm3( VipsVector *vector,
const char *op, const char *a, const char *b, const char *c );
VIPS_API
gboolean vips_vector_full( VipsVector *vector );
VIPS_API
gboolean vips_vector_compile( VipsVector *vector );
VIPS_API
void vips_vector_print( VipsVector *vector );
VIPS_API
void vips_executor_set_program( VipsExecutor *executor,
VipsVector *vector, int n );
VIPS_API
void vips_executor_set_scanline( VipsExecutor *executor,
VipsRegion *ir, int x, int y );
VIPS_API
void vips_executor_set_destination( VipsExecutor *executor, void *value );
VIPS_API
void vips_executor_set_parameter( VipsExecutor *executor, int var, int value );
VIPS_API
void vips_executor_set_array( VipsExecutor *executor, int var, void *value );
VIPS_API
void vips_executor_run( VipsExecutor *executor );
VIPS_API
void vips_vector_to_fixed_point( double *in, int *out, int n, int scale );
#ifdef __cplusplus

View File

@ -38,9 +38,11 @@
extern "C" {
#endif /*__cplusplus*/
VIPS_DEPRECATED
int im_video_v4l1( VipsImage *im, const char *device,
int channel, int brightness, int colour, int contrast, int hue,
int ngrabs );
VIPS_DEPRECATED
int im_video_test( VipsImage *im, int brightness, int error );
#ifdef __cplusplus

View File

@ -173,22 +173,34 @@ extern "C" {
-1 ) : \
vips_init( ARGV0 ))
VIPS_API
int vips_init( const char *argv0 );
VIPS_API
const char *vips_get_argv0( void );
VIPS_API
const char *vips_get_prgname( void );
VIPS_API
void vips_shutdown( void );
VIPS_API
void vips_thread_shutdown( void );
VIPS_API
void vips_add_option_entries( GOptionGroup *option_group );
VIPS_API
void vips_leak_set( gboolean leak );
VIPS_API
void vips_block_untrusted_set( gboolean state );
VIPS_API
const char *vips_version_string( void );
VIPS_API
int vips_version( int flag );
VIPS_API
const char *vips_guess_prefix( const char *argv0, const char *env_name );
VIPS_API
const char *vips_guess_libdir( const char *argv0, const char *env_name );
#ifdef __cplusplus

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,9 @@
/*** BEGIN file-header ***/
/* auto-generated enums for vips introspection */
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif /*HAVE_CONFIG_H*/
#include <vips/vips.h>
/*** END file-header ***/

View File

@ -81,10 +81,17 @@
#include <stdlib.h>
#include <string.h>
#define VIPS_DISABLE_DEPRECATION_WARNINGS
#include <vips/vips.h>
#include <vips/internal.h>
#include <vips/debug.h>
/* For the vips__image_sizeof_bandformat declaration.
*/
#if ENABLE_DEPRECATED
#include <vips/vips7compat.h>
#endif
/**
* SECTION: header
* @short_description: get, set and walk image headers

View File

@ -104,6 +104,7 @@
#pragma GCC diagnostic pop
#endif /*HAVE_GSF*/
#define VIPS_DISABLE_DEPRECATION_WARNINGS
#include <vips/vips.h>
#include <vips/thread.h>
#include <vips/internal.h>
@ -1303,14 +1304,6 @@ vips_leak_set( gboolean leak )
vips__leak = leak;
}
/* Deprecated.
*/
size_t
vips__get_sizeof_vipsobject( void )
{
return( sizeof( VipsObject ) );
}
static void *
vips_block_untrusted_set_operation( VipsOperationClass *class, gboolean *state )
{

View File

@ -79,6 +79,7 @@
#endif /*HAVE_UNISTD_H*/
#include <vips/vips.h>
#include <vips/internal.h>
#ifdef G_OS_WIN32
#ifndef S_ISREG

View File

@ -55,6 +55,7 @@ iofuncs_lib = static_library('iofuncs',
iofuncs_headers,
vipsmarshal,
dependencies: libvips_deps,
gnu_symbol_visibility: 'hidden',
)
libvips_components += iofuncs_lib

View File

@ -698,7 +698,8 @@ vips_blob_get( VipsBlob *blob, size_t *length )
length, NULL, NULL, NULL ) );
}
/* vips_blob_set:
/**
* vips_blob_set:
* @blob: #VipsBlob to set
* @free_fn: (scope async) (allow-none): @data will be freed with this function
* @data: (array length=length) (element-type guint8) (transfer full): data to store

View File

@ -343,14 +343,6 @@ vips_window_find( VipsImage *im, int top, int height )
return( window );
}
/* Old API. Just a compat stub now.
*/
VipsWindow *
vips_window_ref( VipsImage *im, int top, int height )
{
return( NULL );
}
/* Update a window to make it enclose top/height.
*/
VipsWindow *

View File

@ -23,6 +23,7 @@ libvips_lib = library('vips',
link_whole: libvips_components,
dependencies: libvips_deps,
version: library_version,
gnu_symbol_visibility: 'hidden',
install: true,
)
@ -72,7 +73,7 @@ endif
# Keep the autotools convention for shared module suffix because GModule
# depends on it: https://gitlab.gnome.org/GNOME/glib/issues/1413
module_suffix = []
if ['darwin', 'ios'].contains(host_machine.system())
if ['darwin', 'ios'].contains(host_os)
module_suffix = 'so'
endif

View File

@ -17,6 +17,7 @@ morphology_lib = static_library('morphology',
morphology_sources,
morphology_headers,
dependencies: libvips_deps,
gnu_symbol_visibility: 'hidden',
)
libvips_components += morphology_lib

View File

@ -31,6 +31,7 @@ mosaicing_lib = static_library('mosaicing',
mosaicing_sources,
mosaicing_headers,
dependencies: libvips_deps,
gnu_symbol_visibility: 'hidden',
)
libvips_components += mosaicing_lib

View File

@ -31,6 +31,7 @@ resample_lib = static_library('resample',
resample_sources,
resample_headers,
dependencies: libvips_deps,
gnu_symbol_visibility: 'hidden',
)
libvips_components += resample_lib

View File

@ -50,6 +50,7 @@ if get_option('debug')
add_project_arguments('-DDEBUG_LEAK', language : ['cpp', 'c'])
endif
host_os = host_machine.system()
cc = meson.get_compiler('c')
cpp = meson.get_compiler('cpp')
@ -91,6 +92,18 @@ if modules_enabled
cfg_var.set('ENABLE_MODULES', '1')
endif
# Detect and set symbol visibility
if get_option('default_library') == 'shared' and (host_os == 'windows' or host_os == 'cygwin')
cfg_var.set('DLL_EXPORT', true)
if cc.get_id() == 'msvc' or cc.get_id() == 'clang-cl'
cfg_var.set('_VIPS_PUBLIC', '__declspec(dllexport)')
elif cc.has_function_attribute('visibility:hidden')
cfg_var.set('_VIPS_PUBLIC', '__attribute__((visibility("default"))) __declspec(dllexport)')
endif
elif cc.has_function_attribute('visibility:hidden')
cfg_var.set('_VIPS_PUBLIC', '__attribute__((visibility("default")))')
endif
# we also need to be able to mix vector and scalar arithmetic
vector_arithmetic_check = '''
typedef float v4f __attribute__((vector_size(4 * sizeof(float)),aligned(16)));
@ -535,10 +548,9 @@ else
endif
cfg_var.set('HAVE_BIND_TEXTDOMAIN_CODESET', have_bind_textdomain_codeset)
target_system = target_machine.system()
if target_system == 'darwin'
if host_os == 'darwin'
profile_dir = '/Library/ColorSync/Profiles'
elif target_system == 'windows'
elif host_os == 'windows'
# need double escapes since this will get pasted into a #define in a C
# header ... the C:\Windows is usually overwritten with the result of
# GetWindowsDirectoryW()

View File

@ -94,6 +94,7 @@
#include <ctype.h>
#include <locale.h>
#define VIPS_DISABLE_DEPRECATION_WARNINGS
#include <vips/vips.h>
#include <vips/internal.h>