"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "libvips/foreign/foreign.c" between
vips-8.10.6.tar.gz and vips-8.11.0.tar.gz

About: VIPS is a free image processing system (see also the GUI nip2).

foreign.c  (vips-8.10.6):foreign.c  (vips-8.11.0)
skipping to change at line 384 skipping to change at line 384
{ {
} }
/* To iterate over supported files we build a temp list of subclasses of /* To iterate over supported files we build a temp list of subclasses of
* VipsForeign, sort by priority, iterate, and free. * VipsForeign, sort by priority, iterate, and free.
*/ */
static void * static void *
file_add_class( VipsForeignClass *class, GSList **files ) file_add_class( VipsForeignClass *class, GSList **files )
{ {
/* Append so we don't reverse the list of files. Sort will not reorder /* We exclude "rawload" as it has a different API.
* items of equal priority.
*/ */
*files = g_slist_append( *files, class ); if( !vips_isprefix( "rawload", VIPS_OBJECT_CLASS( class )->nickname ) )
/* Append so we don't reverse the list of files. Sort will
* not reorder items of equal priority.
*/
*files = g_slist_append( *files, class );
return( NULL ); return( NULL );
} }
static gint static gint
file_compare( VipsForeignClass *a, VipsForeignClass *b, void *user_data ) file_compare( VipsForeignClass *a, VipsForeignClass *b, void *user_data )
{ {
return( b->priority - a->priority ); return( b->priority - a->priority );
} }
skipping to change at line 427 skipping to change at line 430
vips_foreign_map( const char *base, VipsSListMap2Fn fn, void *a, void *b ) vips_foreign_map( const char *base, VipsSListMap2Fn fn, void *a, void *b )
{ {
GSList *files; GSList *files;
void *result; void *result;
files = NULL; files = NULL;
(void) vips_class_map_all( g_type_from_name( base ), (void) vips_class_map_all( g_type_from_name( base ),
(VipsClassMapFn) file_add_class, (void *) &files ); (VipsClassMapFn) file_add_class, (void *) &files );
files = g_slist_sort( files, (GCompareFunc) file_compare ); files = g_slist_sort( files, (GCompareFunc) file_compare );
#ifdef DEBUG
{
GSList *p;
printf( "vips_foreign_map: search order\n" );
for( p = files; p; p = p->next ) {
VipsForeignClass *class = (VipsForeignClass *) p->data;
printf( "\t%s\n", VIPS_OBJECT_CLASS( class )->nickname );
}
}
#endif /*DEBUG*/
result = vips_slist_map2( files, fn, a, b ); result = vips_slist_map2( files, fn, a, b );
g_slist_free( files ); g_slist_free( files );
return( result ); return( result );
} }
/* Abstract base class for image load. /* Abstract base class for image load.
*/ */
G_DEFINE_ABSTRACT_TYPE( VipsForeignLoad, vips_foreign_load, VIPS_TYPE_FOREIGN ); G_DEFINE_ABSTRACT_TYPE( VipsForeignLoad, vips_foreign_load, VIPS_TYPE_FOREIGN );
skipping to change at line 487 skipping to change at line 503
/* Can this VipsForeign open this file? /* Can this VipsForeign open this file?
*/ */
static void * static void *
vips_foreign_find_load_sub( VipsForeignLoadClass *load_class, vips_foreign_find_load_sub( VipsForeignLoadClass *load_class,
const char *filename, void *b ) const char *filename, void *b )
{ {
VipsObjectClass *object_class = VIPS_OBJECT_CLASS( load_class ); VipsObjectClass *object_class = VIPS_OBJECT_CLASS( load_class );
VipsForeignClass *class = VIPS_FOREIGN_CLASS( load_class ); VipsForeignClass *class = VIPS_FOREIGN_CLASS( load_class );
/* Ignore the buffer and source loaders.
*/
if( vips_ispostfix( object_class->nickname, "_buffer" ) ||
vips_ispostfix( object_class->nickname, "_source" ) )
return( NULL );
#ifdef DEBUG #ifdef DEBUG
printf( "vips_foreign_find_load_sub: %s\n", printf( "vips_foreign_find_load_sub: %s\n",
VIPS_OBJECT_CLASS( class )->nickname ); VIPS_OBJECT_CLASS( class )->nickname );
#endif /*DEBUG*/ #endif /*DEBUG*/
if( load_class->is_a && /* Try to sniff the filetype from the first few bytes, if we can,
!vips_ispostfix( object_class->nickname, "_buffer" ) && * otherwise fall back to checking the filename suffix.
!vips_ispostfix( object_class->nickname, "_source" ) ) { */
if( load_class->is_a ) {
if( load_class->is_a( filename ) ) if( load_class->is_a( filename ) )
return( load_class ); return( load_class );
#ifdef DEBUG #ifdef DEBUG
printf( "vips_foreign_find_load_sub: is_a failed\n" ); printf( "vips_foreign_find_load_sub: is_a failed\n" );
#endif /*DEBUG*/ #endif /*DEBUG*/
} }
else if( class->suffs && else if( class->suffs ) {
vips_filename_suffix_match( filename, class->suffs ) ) if( vips_filename_suffix_match( filename, class->suffs ) )
return( load_class ); return( load_class );
else {
#ifdef DEBUG
printf( "vips_foreign_find_load_sub: suffix match failed\n" );
#endif /*DEBUG*/
} }
else
g_warning( "loader %s has no is_a method and no suffix list",
object_class->nickname );
return( NULL ); return( NULL );
} }
/** /**
* vips_foreign_find_load: * vips_foreign_find_load:
* @filename: file to find a loader for * @filename: file to find a loader for
* *
* Searches for an operation you could use to load @filename. Any trailing * Searches for an operation you could use to load @filename. Any trailing
* options on @filename are stripped and ignored. * options on @filename are stripped and ignored.
skipping to change at line 597 skipping to change at line 619
} }
/* Can this VipsForeign open this buffer? /* Can this VipsForeign open this buffer?
*/ */
static void * static void *
vips_foreign_find_load_buffer_sub( VipsForeignLoadClass *load_class, vips_foreign_find_load_buffer_sub( VipsForeignLoadClass *load_class,
const void **buf, size_t *len ) const void **buf, size_t *len )
{ {
VipsObjectClass *object_class = VIPS_OBJECT_CLASS( load_class ); VipsObjectClass *object_class = VIPS_OBJECT_CLASS( load_class );
if( load_class->is_a_buffer && /* Skip non-buffer loaders.
vips_ispostfix( object_class->nickname, "_buffer" ) && */
load_class->is_a_buffer( *buf, *len ) ) if( !vips_ispostfix( object_class->nickname, "_buffer" ) )
return( load_class ); return( NULL );
if( load_class->is_a_buffer ) {
if( load_class->is_a_buffer( *buf, *len ) )
return( load_class );
}
else
g_warning( "loader %s has no is_a_buffer method",
object_class->nickname );
return( NULL ); return( NULL );
} }
/** /**
* vips_foreign_find_load_buffer: * vips_foreign_find_load_buffer:
* @data: (array length=size) (element-type guint8) (transfer none): start of * @data: (array length=size) (element-type guint8) (transfer none): start of
* memory buffer * memory buffer
* @size: (type gsize): number of bytes in @data * @size: (type gsize): number of bytes in @data
* *
skipping to change at line 647 skipping to change at line 677
/* Can this VipsForeign open this source? /* Can this VipsForeign open this source?
*/ */
static void * static void *
vips_foreign_find_load_source_sub( void *item, void *a, void *b ) vips_foreign_find_load_source_sub( void *item, void *a, void *b )
{ {
VipsObjectClass *object_class = VIPS_OBJECT_CLASS( item ); VipsObjectClass *object_class = VIPS_OBJECT_CLASS( item );
VipsForeignLoadClass *load_class = VIPS_FOREIGN_LOAD_CLASS( item ); VipsForeignLoadClass *load_class = VIPS_FOREIGN_LOAD_CLASS( item );
VipsSource *source = VIPS_SOURCE( a ); VipsSource *source = VIPS_SOURCE( a );
if( load_class->is_a_source && /* Skip non-source loaders.
vips_ispostfix( object_class->nickname, "_source" ) ) { */
/* We may have done a read() rather than a sniff() in one of if( !vips_ispostfix( object_class->nickname, "_source" ) )
return( NULL );
if( load_class->is_a_source ) {
/* We may have done a _read() rather than a _sniff() in one of
* the is_a testers. Always rewind. * the is_a testers. Always rewind.
*/ */
(void) vips_source_rewind( source ); (void) vips_source_rewind( source );
if( load_class->is_a_source( source ) ) if( load_class->is_a_source( source ) )
return( load_class ); return( load_class );
} }
else
g_warning( "loader %s has no is_a_source method",
object_class->nickname );
return( NULL ); return( NULL );
} }
/** /**
* vips_foreign_find_load_source: * vips_foreign_find_load_source:
* @source: source to load from * @source: source to load from
* *
* Searches for an operation you could use to load a source. To see the * Searches for an operation you could use to load a source. To see the
* range of source loaders supported by your vips, try something like: * range of source loaders supported by your vips, try something like:
skipping to change at line 1361 skipping to change at line 1398
"input_profile", "cmyk", "input_profile", "cmyk",
NULL ) ) { NULL ) ) {
g_object_unref( in ); g_object_unref( in );
return( -1 ); return( -1 );
} }
g_object_unref( in ); g_object_unref( in );
in = out; in = out;
} }
/* If this is something other than CMYK or RAD, eg. maybe a LAB image, /* If this is something other than CMYK or RAD, and it's not already
* we need to transform to RGB. * an RGB image, eg. maybe a LAB image, we need to transform
* to RGB.
*/ */
if( !coding[VIPS_CODING_RAD] && if( !coding[VIPS_CODING_RAD] &&
in->Bands >= 3 && in->Bands >= 3 &&
in->Type != VIPS_INTERPRETATION_CMYK && in->Type != VIPS_INTERPRETATION_CMYK &&
in->Type != VIPS_INTERPRETATION_sRGB &&
in->Type != VIPS_INTERPRETATION_RGB16 &&
in->Type != VIPS_INTERPRETATION_scRGB &&
vips_colourspace_issupported( in ) && vips_colourspace_issupported( in ) &&
(saveable == VIPS_SAVEABLE_RGB || (saveable == VIPS_SAVEABLE_RGB ||
saveable == VIPS_SAVEABLE_RGBA || saveable == VIPS_SAVEABLE_RGBA ||
saveable == VIPS_SAVEABLE_RGBA_ONLY || saveable == VIPS_SAVEABLE_RGBA_ONLY ||
saveable == VIPS_SAVEABLE_RGB_CMYK) ) { saveable == VIPS_SAVEABLE_RGB_CMYK) ) {
VipsImage *out; VipsImage *out;
VipsInterpretation interpretation; VipsInterpretation interpretation;
/* Do we make RGB or RGB16? We don't want to squash a 16-bit /* Do we make RGB or RGB16? We don't want to squash a 16-bit
* RGB down to 8 bits if the saver supports 16. * RGB down to 8 bits if the saver supports 16.
skipping to change at line 1392 skipping to change at line 1433
if( vips_colourspace( in, &out, interpretation, NULL ) ) { if( vips_colourspace( in, &out, interpretation, NULL ) ) {
g_object_unref( in ); g_object_unref( in );
return( -1 ); return( -1 );
} }
g_object_unref( in ); g_object_unref( in );
in = out; in = out;
} }
/* VIPS_SAVEABLE_RGBA_ONLY does not support 1 or 2 bands ... convert /* VIPS_SAVEABLE_RGBA_ONLY does not support mono types ... convert
* to sRGB. * to sRGB.
*/ */
if( !coding[VIPS_CODING_RAD] && if( !coding[VIPS_CODING_RAD] &&
in->Bands < 3 && in->Bands < 3 &&
vips_colourspace_issupported( in ) && vips_colourspace_issupported( in ) &&
saveable == VIPS_SAVEABLE_RGBA_ONLY ) { saveable == VIPS_SAVEABLE_RGBA_ONLY ) {
VipsImage *out; VipsImage *out;
VipsInterpretation interpretation; VipsInterpretation interpretation;
/* Do we make RGB or RGB16? We don't want to squash a 16-bit /* Do we make RGB or RGB16? We don't want to squash a 16-bit
skipping to change at line 1772 skipping to change at line 1813
/* Can we write this filename with this class? /* Can we write this filename with this class?
*/ */
static void * static void *
vips_foreign_find_save_sub( VipsForeignSaveClass *save_class, vips_foreign_find_save_sub( VipsForeignSaveClass *save_class,
const char *filename, void *b ) const char *filename, void *b )
{ {
VipsObjectClass *object_class = VIPS_OBJECT_CLASS( save_class ); VipsObjectClass *object_class = VIPS_OBJECT_CLASS( save_class );
VipsForeignClass *class = VIPS_FOREIGN_CLASS( save_class ); VipsForeignClass *class = VIPS_FOREIGN_CLASS( save_class );
/* All concrete savers needs suffs, since we use the suff to pick the const char **p;
/* All savers needs suffs defined since we use the suff to pick the
* saver. * saver.
*/ */
if( !G_TYPE_IS_ABSTRACT( G_TYPE_FROM_CLASS( class ) ) && if( !class->suffs )
!class->suffs )
g_warning( "no suffix defined for %s", object_class->nickname ); g_warning( "no suffix defined for %s", object_class->nickname );
if( !G_TYPE_IS_ABSTRACT( G_TYPE_FROM_CLASS( class ) ) && /* Skip non-file savers.
class->suffs && */
!vips_ispostfix( object_class->nickname, "_buffer" ) && if( vips_ispostfix( object_class->nickname, "_buffer" ) ||
!vips_ispostfix( object_class->nickname, "_target" ) && vips_ispostfix( object_class->nickname, "_target" ) )
vips_filename_suffix_match( filename, class->suffs ) ) return( NULL );
return( save_class );
/* vips_foreign_find_save() has already removed any options from the
* end of the filename, so we can test directly against the suffix.
*/
for( p = class->suffs; *p; p++ )
if( vips_iscasepostfix( filename, *p ) )
return( save_class );
return( NULL ); return( NULL );
} }
/** /**
* vips_foreign_find_save: * vips_foreign_find_save:
* @filename: name to find a saver for * @filename: name to find a saver for
* *
* Searches for an operation you could use to write to @filename. * Searches for an operation you could use to write to @filename.
* Any trailing options on @filename are stripped and ignored. * Any trailing options on @filename are stripped and ignored.
skipping to change at line 2035 skipping to change at line 2083
(void *) suffix, NULL )) ) { (void *) suffix, NULL )) ) {
vips_error( "VipsForeignSave", vips_error( "VipsForeignSave",
_( "\"%s\" is not a known buffer format" ), name ); _( "\"%s\" is not a known buffer format" ), name );
return( NULL ); return( NULL );
} }
return( G_OBJECT_CLASS_NAME( save_class ) ); return( G_OBJECT_CLASS_NAME( save_class ) );
} }
/* C API wrappers for loadable modules go here.
*/
/**
* vips_heifload:
* @filename: file to load
* @out: (out): decompressed image
* @...: %NULL-terminated list of optional named arguments
*
* Optional arguments:
*
* * @page: %gint, page (top-level image number) to read
* * @n: %gint, load this many pages
* * @thumbnail: %gboolean, fetch thumbnail instead of image
*
* Read a HEIF image file into a VIPS image.
*
* Use @page to select a page to render, numbering from zero. If neither @n
* nor @page are set, @page defaults to the primary page, otherwise to 0.
*
* Use @n to select the number of pages to render. The default is 1. Pages are
* rendered in a vertical column. Set to -1 to mean "until the end of the
* document". Use vips_grid() to reorganise pages.
*
* HEIF images have a primary image. The metadata item `heif-primary` gives
* the page number of the primary.
*
* If @thumbnail is %TRUE, then fetch a stored thumbnail rather than the
* image.
*
* See also: vips_image_new_from_file().
*
* Returns: 0 on success, -1 on error.
*/
int
vips_heifload( const char *filename, VipsImage **out, ... )
{
va_list ap;
int result;
va_start( ap, out );
result = vips_call_split( "heifload", ap, filename, out );
va_end( ap );
return( result );
}
/**
* vips_heifload_buffer:
* @buf: (array length=len) (element-type guint8): memory area to load
* @len: (type gsize): size of memory area
* @out: (out): image to write
* @...: %NULL-terminated list of optional named arguments
*
* Optional arguments:
*
* * @page: %gint, page (top-level image number) to read
* * @n: %gint, load this many pages
* * @thumbnail: %gboolean, fetch thumbnail instead of image
*
* Read a HEIF image file into a VIPS image.
* Exactly as vips_heifload(), but read from a memory buffer.
*
* You must not free the buffer while @out is active. The
* #VipsObject::postclose signal on @out is a good place to free.
*
* See also: vips_heifload().
*
* Returns: 0 on success, -1 on error.
*/
int
vips_heifload_buffer( void *buf, size_t len, VipsImage **out, ... )
{
va_list ap;
VipsBlob *blob;
int result;
/* We don't take a copy of the data or free it.
*/
blob = vips_blob_new( NULL, buf, len );
va_start( ap, out );
result = vips_call_split( "heifload_buffer", ap, blob, out );
va_end( ap );
vips_area_unref( VIPS_AREA( blob ) );
return( result );
}
/**
* vips_heifload_source:
* @source: source to load from
* @out: (out): image to write
* @...: %NULL-terminated list of optional named arguments
*
* Optional arguments:
*
* * @page: %gint, page (top-level image number) to read
* * @n: %gint, load this many pages
* * @thumbnail: %gboolean, fetch thumbnail instead of image
*
* Exactly as vips_heifload(), but read from a source.
*
* See also: vips_heifload().
*
* Returns: 0 on success, -1 on error.
*/
int
vips_heifload_source( VipsSource *source, VipsImage **out, ... )
{
va_list ap;
int result;
va_start( ap, out );
result = vips_call_split( "heifload_source", ap, source, out );
va_end( ap );
return( result );
}
/**
* vips_heifsave: (method)
* @in: image to save
* @filename: file to write to
* @...: %NULL-terminated list of optional named arguments
*
* Optional arguments:
*
* * @Q: %gint, quality factor
* * @lossless: %gboolean, enable lossless encoding
* * @compression: #VipsForeignHeifCompression, write with this compression
* * @speed: %gint, encoding speed
* * @subsample_mode: #VipsForeignSubsample, chroma subsampling mode
*
* Write a VIPS image to a file in HEIF format.
*
* Use @Q to set the compression factor. Default 50, which seems to be roughly
* what the iphone uses. Q 30 gives about the same quality as JPEG Q 75.
*
* Set @lossless %TRUE to switch to lossless compression.
*
* Use @compression to set the encoder e.g. HEVC, AVC, AV1. It defaults to AV1
* if the target filename ends with ".avif", otherwise HEVC.
*
* Use @speed to control the CPU effort spent improving compression.
* This is currently only applicable to AV1 encoders. Defaults to 5, 0 is
* slowest, 9 is fastest.
*
* Chroma subsampling is normally automatically disabled for Q >= 90. You can
* force the subsampling mode with @subsample_mode.
*
* See also: vips_image_write_to_file(), vips_heifload().
*
* Returns: 0 on success, -1 on error.
*/
int
vips_heifsave( VipsImage *in, const char *filename, ... )
{
va_list ap;
int result;
va_start( ap, filename );
result = vips_call_split( "heifsave", ap, in, filename );
va_end( ap );
return( result );
}
/**
* vips_heifsave_buffer: (method)
* @in: image to save
* @buf: (array length=len) (element-type guint8): return output buffer here
* @len: (type gsize): return output length here
* @...: %NULL-terminated list of optional named arguments
*
* Optional arguments:
*
* * @Q: %gint, quality factor
* * @lossless: %gboolean, enable lossless encoding
* * @compression: #VipsForeignHeifCompression, write with this compression
* * @speed: %gint, encoding speed
* * @subsample_mode: #VipsForeignSubsample, chroma subsampling mode
*
* As vips_heifsave(), but save to a memory buffer.
*
* The address of the buffer is returned in @obuf, the length of the buffer in
* @olen. You are responsible for freeing the buffer with g_free() when you
* are done with it.
*
* See also: vips_heifsave(), vips_image_write_to_file().
*
* Returns: 0 on success, -1 on error.
*/
int
vips_heifsave_buffer( VipsImage *in, void **buf, size_t *len, ... )
{
va_list ap;
VipsArea *area;
int result;
area = NULL;
va_start( ap, len );
result = vips_call_split( "heifsave_buffer", ap, in, &area );
va_end( ap );
if( !result &&
area ) {
if( buf ) {
*buf = area->data;
area->free_fn = NULL;
}
if( len )
*len = area->length;
vips_area_unref( area );
}
return( result );
}
/**
* vips_heifsave_target: (method)
* @in: image to save
* @target: save image to this target
* @...: %NULL-terminated list of optional named arguments
*
* Optional arguments:
*
* * @Q: %gint, quality factor
* * @lossless: %gboolean, enable lossless encoding
* * @compression: #VipsForeignHeifCompression, write with this compression
* * @speed: %gint, encoding speed
* * @subsample_mode: #VipsForeignSubsample, chroma subsampling mode
*
* As vips_heifsave(), but save to a target.
*
* See also: vips_heifsave(), vips_image_write_to_target().
*
* Returns: 0 on success, -1 on error.
*/
int
vips_heifsave_target( VipsImage *in, VipsTarget *target, ... )
{
va_list ap;
int result;
va_start( ap, target );
result = vips_call_split( "heifsave_target", ap, in, target );
va_end( ap );
return( result );
}
/**
* vips_jxlload:
* @filename: file to load
* @out: (out): decompressed image
* @...: %NULL-terminated list of optional named arguments
*
* Read a JPEG-XL image.
*
* The JPEG-XL loader and saver are experimental features and may change
* in future libvips versions.
*
* See also: vips_image_new_from_file().
*
* Returns: 0 on success, -1 on error.
*/
int
vips_jxlload( const char *filename, VipsImage **out, ... )
{
va_list ap;
int result;
va_start( ap, out );
result = vips_call_split( "jxlload", ap, filename, out );
va_end( ap );
return( result );
}
/**
* vips_jxlload_buffer:
* @buf: (array length=len) (element-type guint8): memory area to load
* @len: (type gsize): size of memory area
* @out: (out): image to write
* @...: %NULL-terminated list of optional named arguments
*
* Exactly as vips_jxlload(), but read from a buffer.
*
* Returns: 0 on success, -1 on error.
*/
int
vips_jxlload_buffer( void *buf, size_t len, VipsImage **out, ... )
{
va_list ap;
VipsBlob *blob;
int result;
/* We don't take a copy of the data or free it.
*/
blob = vips_blob_new( NULL, buf, len );
va_start( ap, out );
result = vips_call_split( "jxlload_buffer", ap, blob, out );
va_end( ap );
vips_area_unref( VIPS_AREA( blob ) );
return( result );
}
/**
* vips_jxlload_source:
* @source: source to load from
* @out: (out): decompressed image
* @...: %NULL-terminated list of optional named arguments
*
* Exactly as vips_jxlload(), but read from a source.
*
* Returns: 0 on success, -1 on error.
*/
int
vips_jxlload_source( VipsSource *source, VipsImage **out, ... )
{
va_list ap;
int result;
va_start( ap, out );
result = vips_call_split( "jxlload_source", ap, source, out );
va_end( ap );
return( result );
}
/**
* vips_jxlsave: (method)
* @in: image to save
* @filename: file to write to
* @...: %NULL-terminated list of optional named arguments
*
* Optional arguments:
*
* * @tier: %gint, decode speed tier
* * @distance: %gdouble, maximum encoding error
* * @effort: %gint, encoding effort
* * @lossless: %gboolean, enables lossless compression
* * @Q: %gint, quality setting
*
* Write a VIPS image to a file in JPEG-XL format.
*
* The JPEG-XL loader and saver are experimental features and may change
* in future libvips versions.
*
* @tier sets the overall decode speed the encoder will target. Minimum is 0
* (highest quality), and maximum is 4 (lowest quality). Default is 0.
*
* @distance sets the target maximum encoding error. Minimum is 0
* (highest quality), and maximum is 15 (lowest quality). Default is 1.0
* (visually lossless).
*
* As a convenience, you can also use @Q to set @distance. @Q uses
* approximately the same scale as regular JPEG.
*
* Set @lossless to enable lossless compresion.
*
* Returns: 0 on success, -1 on error.
*/
int
vips_jxlsave( VipsImage *in, const char *filename, ... )
{
va_list ap;
int result;
va_start( ap, filename );
result = vips_call_split( "jxlsave", ap, in, filename );
va_end( ap );
return( result );
}
/**
* vips_jxlsave_buffer: (method)
* @in: image to save
* @buf: (array length=len) (element-type guint8): return output buffer here
* @len: (type gsize): return output length here
* @...: %NULL-terminated list of optional named arguments
*
* Optional arguments:
*
* * @tier: %gint, decode speed tier
* * @distance: %gdouble, maximum encoding error
* * @effort: %gint, encoding effort
* * @lossless: %gboolean, enables lossless compression
* * @Q: %gint, quality setting
*
* As vips_jxlsave(), but save to a memory buffer.
*
* See also: vips_jxlsave(), vips_image_write_to_target().
*
* Returns: 0 on success, -1 on error.
*/
int
vips_jxlsave_buffer( VipsImage *in, void **buf, size_t *len, ... )
{
va_list ap;
VipsArea *area;
int result;
area = NULL;
va_start( ap, len );
result = vips_call_split( "jxlsave_buffer", ap, in, &area );
va_end( ap );
if( !result &&
area ) {
if( buf ) {
*buf = area->data;
area->free_fn = NULL;
}
if( len )
*len = area->length;
vips_area_unref( area );
}
return( result );
}
/**
* vips_jxlsave_target: (method)
* @in: image to save
* @target: save image to this target
* @...: %NULL-terminated list of optional named arguments
*
* Optional arguments:
*
* * @tier: %gint, decode speed tier
* * @distance: %gdouble, maximum encoding error
* * @effort: %gint, encoding effort
* * @lossless: %gboolean, enables lossless compression
* * @Q: %gint, quality setting
*
* As vips_jxlsave(), but save to a target.
*
* See also: vips_jxlsave(), vips_image_write_to_target().
*
* Returns: 0 on success, -1 on error.
*/
int
vips_jxlsave_target( VipsImage *in, VipsTarget *target, ... )
{
va_list ap;
int result;
va_start( ap, target );
result = vips_call_split( "jxlsave_target", ap, in, target );
va_end( ap );
return( result );
}
/**
* vips_pdfload:
* @filename: file to load
* @out: (out): output image
* @...: %NULL-terminated list of optional named arguments
*
* Optional arguments:
*
* * @page: %gint, load this page, numbered from zero
* * @n: %gint, load this many pages
* * @dpi: %gdouble, render at this DPI
* * @scale: %gdouble, scale render by this factor
* * @background: #VipsArrayDouble background colour
*
* Render a PDF file into a VIPS image.
*
* The output image is always RGBA --- CMYK PDFs will be
* converted. If you need CMYK bitmaps, you should use vips_magickload()
* instead.
*
* Use @page to select a page to render, numbering from zero.
*
* Use @n to select the number of pages to render. The default is 1. Pages are
* rendered in a vertical column, with each individual page aligned to the
* left. Set to -1 to mean "until the end of the document". Use vips_grid()
* to change page layout.
*
* Use @dpi to set the rendering resolution. The default is 72. Additionally,
* you can scale by setting @scale. If you set both, they combine.
*
* Use @background to set the background RGBA colour. The default is 255
* (solid white), use eg. 0 for a transparent background.
*
* The operation fills a number of header fields with metadata, for example
* "pdf-author". They may be useful.
*
* This function only reads the image header and does not render any pixel
* data. Rendering occurs when pixels are accessed.
*
* See also: vips_image_new_from_file(), vips_magickload().
*
* Returns: 0 on success, -1 on error.
*/
int
vips_pdfload( const char *filename, VipsImage **out, ... )
{
va_list ap;
int result;
va_start( ap, out );
result = vips_call_split( "pdfload", ap, filename, out );
va_end( ap );
return( result );
}
/**
* vips_pdfload_buffer:
* @buf: (array length=len) (element-type guint8): memory area to load
* @len: (type gsize): size of memory area
* @out: (out): image to write
* @...: %NULL-terminated list of optional named arguments
*
* Optional arguments:
*
* * @page: %gint, load this page, numbered from zero
* * @n: %gint, load this many pages
* * @dpi: %gdouble, render at this DPI
* * @scale: %gdouble, scale render by this factor
* * @background: #VipsArrayDouble background colour
*
* Read a PDF-formatted memory buffer into a VIPS image. Exactly as
* vips_pdfload(), but read from memory.
*
* You must not free the buffer while @out is active. The
* #VipsObject::postclose signal on @out is a good place to free.
*
* See also: vips_pdfload().
*
* Returns: 0 on success, -1 on error.
*/
int
vips_pdfload_buffer( void *buf, size_t len, VipsImage **out, ... )
{
va_list ap;
VipsBlob *blob;
int result;
/* We don't take a copy of the data or free it.
*/
blob = vips_blob_new( NULL, buf, len );
va_start( ap, out );
result = vips_call_split( "pdfload_buffer", ap, blob, out );
va_end( ap );
vips_area_unref( VIPS_AREA( blob ) );
return( result );
}
/**
* vips_pdfload_source:
* @source: source to load from
* @out: (out): image to write
* @...: %NULL-terminated list of optional named arguments
*
* Optional arguments:
*
* * @page: %gint, load this page, numbered from zero
* * @n: %gint, load this many pages
* * @dpi: %gdouble, render at this DPI
* * @scale: %gdouble, scale render by this factor
* * @background: #VipsArrayDouble background colour
*
* Exactly as vips_pdfload(), but read from a source.
*
* See also: vips_pdfload()
*
* Returns: 0 on success, -1 on error.
*/
int
vips_pdfload_source( VipsSource *source, VipsImage **out, ... )
{
va_list ap;
int result;
va_start( ap, out );
result = vips_call_split( "pdfload_source", ap, source, out );
va_end( ap );
return( result );
}
/**
* vips_openslideload:
* @filename: file to load
* @out: (out): decompressed image
* @...: %NULL-terminated list of optional named arguments
*
* Optional arguments:
*
* * @level: %gint, load this level
* * @associated: %gchararray, load this associated image
* * @attach_associated: %gboolean, attach all associated images as metadata
* * @autocrop: %gboolean, crop to image bounds
*
* Read a virtual slide supported by the OpenSlide library into a VIPS image.
* OpenSlide supports images in Aperio, Hamamatsu, MIRAX, Sakura, Trestle,
* and Ventana formats.
*
* To facilitate zooming, virtual slide formats include multiple scaled-down
* versions of the high-resolution image. These are typically called
* "levels". By default, vips_openslideload() reads the highest-resolution
* level (level 0). Set @level to the level number you want.
*
* In addition to the slide image itself, virtual slide formats sometimes
* include additional images, such as a scan of the slide's barcode.
* OpenSlide calls these "associated images". To read an associated image,
* set @associated to the image's name.
* A slide's associated images are listed in the
* "slide-associated-images" metadata item.
*
* If you set @attach_associated, then all associated images are attached as
* metadata items. Use vips_image_get_image() on @out to retrieve them. Images
* are attached as "openslide-associated-XXXXX", where XXXXX is the name of the
* associated image.
*
* The output of this operator is always RGBA.
*
* See also: vips_image_new_from_file().
*
* Returns: 0 on success, -1 on error.
*/
int
vips_openslideload( const char *filename, VipsImage **out, ... )
{
va_list ap;
int result;
va_start( ap, out );
result = vips_call_split( "openslideload", ap, filename, out );
va_end( ap );
return( result );
}
/**
* vips_openslideload_source:
* @source: source to load from
* @out: (out): decompressed image
* @...: %NULL-terminated list of optional named arguments
*
* Optional arguments:
*
* * @level: %gint, load this level
* * @associated: %gchararray, load this associated image
* * @attach_associated: %gboolean, attach all associated images as metadata
* * @autocrop: %gboolean, crop to image bounds
*
* Exactly as vips_openslideload(), but read from a source.
*
* Returns: 0 on success, -1 on error.
*/
int
vips_openslideload_source( VipsSource *source, VipsImage **out, ... )
{
va_list ap;
int result;
va_start( ap, out );
result = vips_call_split( "openslideload_source", ap, source, out );
va_end( ap );
return( result );
}
/* Called from iofuncs to init all operations in this dir. Use a plugin system /* Called from iofuncs to init all operations in this dir. Use a plugin system
* instead? * instead?
*/ */
void void
vips_foreign_operation_init( void ) vips_foreign_operation_init( void )
{ {
extern GType vips_foreign_load_rad_file_get_type( void ); extern GType vips_foreign_load_rad_file_get_type( void );
extern GType vips_foreign_load_rad_buffer_get_type( void ); extern GType vips_foreign_load_rad_buffer_get_type( void );
extern GType vips_foreign_load_rad_source_get_type( void ); extern GType vips_foreign_load_rad_source_get_type( void );
extern GType vips_foreign_save_rad_file_get_type( void ); extern GType vips_foreign_save_rad_file_get_type( void );
skipping to change at line 2073 skipping to change at line 2803
extern GType vips_foreign_load_csv_source_get_type( void ); extern GType vips_foreign_load_csv_source_get_type( void );
extern GType vips_foreign_save_csv_file_get_type( void ); extern GType vips_foreign_save_csv_file_get_type( void );
extern GType vips_foreign_save_csv_target_get_type( void ); extern GType vips_foreign_save_csv_target_get_type( void );
extern GType vips_foreign_load_matrix_file_get_type( void ); extern GType vips_foreign_load_matrix_file_get_type( void );
extern GType vips_foreign_load_matrix_source_get_type( void ); extern GType vips_foreign_load_matrix_source_get_type( void );
extern GType vips_foreign_save_matrix_file_get_type( void ); extern GType vips_foreign_save_matrix_file_get_type( void );
extern GType vips_foreign_save_matrix_target_get_type( void ); extern GType vips_foreign_save_matrix_target_get_type( void );
extern GType vips_foreign_print_matrix_get_type( void ); extern GType vips_foreign_print_matrix_get_type( void );
extern GType vips_foreign_load_fits_get_type( void ); extern GType vips_foreign_load_fits_file_get_type( void );
extern GType vips_foreign_load_fits_source_get_type( void );
extern GType vips_foreign_save_fits_get_type( void ); extern GType vips_foreign_save_fits_get_type( void );
extern GType vips_foreign_load_analyze_get_type( void ); extern GType vips_foreign_load_analyze_get_type( void );
extern GType vips_foreign_load_openexr_get_type( void ); extern GType vips_foreign_load_openexr_get_type( void );
extern GType vips_foreign_load_openslide_get_type( void ); extern GType vips_foreign_load_openslide_file_get_type( void );
extern GType vips_foreign_load_openslide_source_get_type( void );
extern GType vips_foreign_load_vips_file_get_type( void );
extern GType vips_foreign_load_vips_source_get_type( void );
extern GType vips_foreign_save_vips_file_get_type( void );
extern GType vips_foreign_save_vips_target_get_type( void );
extern GType vips_foreign_load_jpeg_file_get_type( void ); extern GType vips_foreign_load_jpeg_file_get_type( void );
extern GType vips_foreign_load_jpeg_buffer_get_type( void ); extern GType vips_foreign_load_jpeg_buffer_get_type( void );
extern GType vips_foreign_load_jpeg_source_get_type( void ); extern GType vips_foreign_load_jpeg_source_get_type( void );
extern GType vips_foreign_save_jpeg_file_get_type( void ); extern GType vips_foreign_save_jpeg_file_get_type( void );
extern GType vips_foreign_save_jpeg_buffer_get_type( void ); extern GType vips_foreign_save_jpeg_buffer_get_type( void );
extern GType vips_foreign_save_jpeg_target_get_type( void ); extern GType vips_foreign_save_jpeg_target_get_type( void );
extern GType vips_foreign_save_jpeg_mime_get_type( void ); extern GType vips_foreign_save_jpeg_mime_get_type( void );
extern GType vips_foreign_load_tiff_file_get_type( void ); extern GType vips_foreign_load_tiff_file_get_type( void );
extern GType vips_foreign_load_tiff_buffer_get_type( void ); extern GType vips_foreign_load_tiff_buffer_get_type( void );
extern GType vips_foreign_load_tiff_source_get_type( void ); extern GType vips_foreign_load_tiff_source_get_type( void );
extern GType vips_foreign_save_tiff_file_get_type( void ); extern GType vips_foreign_save_tiff_file_get_type( void );
extern GType vips_foreign_save_tiff_buffer_get_type( void ); extern GType vips_foreign_save_tiff_buffer_get_type( void );
extern GType vips_foreign_load_vips_get_type( void );
extern GType vips_foreign_save_vips_get_type( void );
extern GType vips_foreign_load_raw_get_type( void ); extern GType vips_foreign_load_raw_get_type( void );
extern GType vips_foreign_save_raw_get_type( void ); extern GType vips_foreign_save_raw_get_type( void );
extern GType vips_foreign_save_raw_fd_get_type( void ); extern GType vips_foreign_save_raw_fd_get_type( void );
extern GType vips_foreign_load_magick_file_get_type( void ); extern GType vips_foreign_load_magick_file_get_type( void );
extern GType vips_foreign_load_magick_buffer_get_type( void ); extern GType vips_foreign_load_magick_buffer_get_type( void );
extern GType vips_foreign_load_magick7_file_get_type( void ); extern GType vips_foreign_load_magick7_file_get_type( void );
extern GType vips_foreign_load_magick7_buffer_get_type( void ); extern GType vips_foreign_load_magick7_buffer_get_type( void );
extern GType vips_foreign_save_magick_file_get_type( void ); extern GType vips_foreign_save_magick_file_get_type( void );
extern GType vips_foreign_save_magick_buffer_get_type( void ); extern GType vips_foreign_save_magick_buffer_get_type( void );
skipping to change at line 2128 skipping to change at line 2862
extern GType vips_foreign_save_webp_target_get_type( void ); extern GType vips_foreign_save_webp_target_get_type( void );
extern GType vips_foreign_load_pdf_file_get_type( void ); extern GType vips_foreign_load_pdf_file_get_type( void );
extern GType vips_foreign_load_pdf_buffer_get_type( void ); extern GType vips_foreign_load_pdf_buffer_get_type( void );
extern GType vips_foreign_load_pdf_source_get_type( void ); extern GType vips_foreign_load_pdf_source_get_type( void );
extern GType vips_foreign_load_svg_file_get_type( void ); extern GType vips_foreign_load_svg_file_get_type( void );
extern GType vips_foreign_load_svg_buffer_get_type( void ); extern GType vips_foreign_load_svg_buffer_get_type( void );
extern GType vips_foreign_load_svg_source_get_type( void ); extern GType vips_foreign_load_svg_source_get_type( void );
extern GType vips_foreign_load_jp2k_file_get_type( void );
extern GType vips_foreign_load_jp2k_buffer_get_type( void );
extern GType vips_foreign_load_jp2k_source_get_type( void );
extern GType vips_foreign_save_jp2k_file_get_type( void );
extern GType vips_foreign_save_jp2k_buffer_get_type( void );
extern GType vips_foreign_save_jp2k_target_get_type( void );
extern GType vips_foreign_load_jxl_file_get_type( void );
extern GType vips_foreign_load_jxl_buffer_get_type( void );
extern GType vips_foreign_load_jxl_source_get_type( void );
extern GType vips_foreign_save_jxl_file_get_type( void );
extern GType vips_foreign_save_jxl_buffer_get_type( void );
extern GType vips_foreign_save_jxl_target_get_type( void );
extern GType vips_foreign_load_heif_file_get_type( void ); extern GType vips_foreign_load_heif_file_get_type( void );
extern GType vips_foreign_load_heif_buffer_get_type( void ); extern GType vips_foreign_load_heif_buffer_get_type( void );
extern GType vips_foreign_load_heif_source_get_type( void ); extern GType vips_foreign_load_heif_source_get_type( void );
extern GType vips_foreign_save_heif_file_get_type( void ); extern GType vips_foreign_save_heif_file_get_type( void );
extern GType vips_foreign_save_heif_buffer_get_type( void ); extern GType vips_foreign_save_heif_buffer_get_type( void );
extern GType vips_foreign_save_heif_target_get_type( void ); extern GType vips_foreign_save_heif_target_get_type( void );
extern GType vips_foreign_load_nifti_get_type( void ); extern GType vips_foreign_load_nifti_file_get_type( void );
extern GType vips_foreign_load_nifti_source_get_type( void );
extern GType vips_foreign_save_nifti_get_type( void ); extern GType vips_foreign_save_nifti_get_type( void );
extern GType vips_foreign_load_gif_file_get_type( void ); extern GType vips_foreign_load_nsgif_file_get_type( void );
extern GType vips_foreign_load_gif_buffer_get_type( void ); extern GType vips_foreign_load_nsgif_buffer_get_type( void );
extern GType vips_foreign_load_gif_source_get_type( void ); extern GType vips_foreign_load_nsgif_source_get_type( void );
vips_foreign_load_csv_file_get_type(); vips_foreign_load_csv_file_get_type();
vips_foreign_load_csv_source_get_type(); vips_foreign_load_csv_source_get_type();
vips_foreign_save_csv_file_get_type(); vips_foreign_save_csv_file_get_type();
vips_foreign_save_csv_target_get_type(); vips_foreign_save_csv_target_get_type();
vips_foreign_load_matrix_file_get_type(); vips_foreign_load_matrix_file_get_type();
vips_foreign_load_matrix_source_get_type(); vips_foreign_load_matrix_source_get_type();
vips_foreign_save_matrix_file_get_type(); vips_foreign_save_matrix_file_get_type();
vips_foreign_save_matrix_target_get_type(); vips_foreign_save_matrix_target_get_type();
vips_foreign_print_matrix_get_type(); vips_foreign_print_matrix_get_type();
vips_foreign_load_raw_get_type(); vips_foreign_load_raw_get_type();
vips_foreign_save_raw_get_type(); vips_foreign_save_raw_get_type();
vips_foreign_save_raw_fd_get_type(); vips_foreign_save_raw_fd_get_type();
vips_foreign_load_vips_get_type();
vips_foreign_save_vips_get_type(); vips_foreign_load_vips_file_get_type();
vips_foreign_load_vips_source_get_type();
vips_foreign_save_vips_file_get_type();
vips_foreign_save_vips_target_get_type();
#ifdef HAVE_ANALYZE #ifdef HAVE_ANALYZE
vips_foreign_load_analyze_get_type(); vips_foreign_load_analyze_get_type();
#endif /*HAVE_ANALYZE*/ #endif /*HAVE_ANALYZE*/
#ifdef HAVE_PPM #ifdef HAVE_PPM
vips_foreign_load_ppm_file_get_type(); vips_foreign_load_ppm_file_get_type();
vips_foreign_load_ppm_source_get_type(); vips_foreign_load_ppm_source_get_type();
vips_foreign_save_ppm_file_get_type(); vips_foreign_save_ppm_file_get_type();
vips_foreign_save_ppm_target_get_type(); vips_foreign_save_ppm_target_get_type();
skipping to change at line 2177 skipping to change at line 2931
#ifdef HAVE_RADIANCE #ifdef HAVE_RADIANCE
vips_foreign_load_rad_file_get_type(); vips_foreign_load_rad_file_get_type();
vips_foreign_load_rad_buffer_get_type(); vips_foreign_load_rad_buffer_get_type();
vips_foreign_load_rad_source_get_type(); vips_foreign_load_rad_source_get_type();
vips_foreign_save_rad_file_get_type(); vips_foreign_save_rad_file_get_type();
vips_foreign_save_rad_buffer_get_type(); vips_foreign_save_rad_buffer_get_type();
vips_foreign_save_rad_target_get_type(); vips_foreign_save_rad_target_get_type();
#endif /*HAVE_RADIANCE*/ #endif /*HAVE_RADIANCE*/
#if defined(HAVE_POPPLER) #if defined(HAVE_POPPLER) && !defined(POPPLER_MODULE)
vips_foreign_load_pdf_file_get_type(); vips_foreign_load_pdf_file_get_type();
vips_foreign_load_pdf_buffer_get_type(); vips_foreign_load_pdf_buffer_get_type();
vips_foreign_load_pdf_source_get_type(); vips_foreign_load_pdf_source_get_type();
#endif /*HAVE_POPPLER*/ #endif /*defined(HAVE_POPPLER) && !defined(POPPLER_MODULE)*/
#ifdef HAVE_PDFIUM #ifdef HAVE_PDFIUM
vips_foreign_load_pdf_file_get_type(); vips_foreign_load_pdf_file_get_type();
vips_foreign_load_pdf_buffer_get_type(); vips_foreign_load_pdf_buffer_get_type();
vips_foreign_load_pdf_source_get_type();
#endif /*HAVE_PDFIUM*/ #endif /*HAVE_PDFIUM*/
#ifdef HAVE_RSVG #ifdef HAVE_RSVG
vips_foreign_load_svg_file_get_type(); vips_foreign_load_svg_file_get_type();
vips_foreign_load_svg_buffer_get_type(); vips_foreign_load_svg_buffer_get_type();
vips_foreign_load_svg_source_get_type(); vips_foreign_load_svg_source_get_type();
#endif /*HAVE_RSVG*/ #endif /*HAVE_RSVG*/
#ifdef HAVE_GIFLIB #if defined(HAVE_LIBJXL) && !defined(LIBJXL_MODULE)
vips_foreign_load_gif_file_get_type(); vips_foreign_load_jxl_file_get_type();
vips_foreign_load_gif_buffer_get_type(); vips_foreign_load_jxl_buffer_get_type();
vips_foreign_load_gif_source_get_type(); vips_foreign_load_jxl_source_get_type();
#endif /*HAVE_GIFLIB*/ vips_foreign_save_jxl_file_get_type();
vips_foreign_save_jxl_buffer_get_type();
vips_foreign_save_jxl_target_get_type();
#endif /*defined(HAVE_LIBJXL) && !defined(LIBJXL_MODULE)*/
#ifdef HAVE_LIBOPENJP2
vips_foreign_load_jp2k_file_get_type();
vips_foreign_load_jp2k_buffer_get_type();
vips_foreign_load_jp2k_source_get_type();
vips_foreign_save_jp2k_file_get_type();
vips_foreign_save_jp2k_buffer_get_type();
vips_foreign_save_jp2k_target_get_type();
#endif /*HAVE_LIBOPENJP2*/
#ifdef HAVE_NSGIF
vips_foreign_load_nsgif_file_get_type();
vips_foreign_load_nsgif_buffer_get_type();
vips_foreign_load_nsgif_source_get_type();
#endif /*HAVE_NSGIF*/
#ifdef HAVE_GSF #ifdef HAVE_GSF
vips_foreign_save_dz_file_get_type(); vips_foreign_save_dz_file_get_type();
vips_foreign_save_dz_buffer_get_type(); vips_foreign_save_dz_buffer_get_type();
#endif /*HAVE_GSF*/ #endif /*HAVE_GSF*/
#ifdef HAVE_PNG #ifdef HAVE_PNG
vips_foreign_load_png_file_get_type(); vips_foreign_load_png_file_get_type();
vips_foreign_load_png_buffer_get_type(); vips_foreign_load_png_buffer_get_type();
vips_foreign_load_png_source_get_type(); vips_foreign_load_png_source_get_type();
skipping to change at line 2251 skipping to change at line 3024
#endif /*HAVE_LIBWEBP*/ #endif /*HAVE_LIBWEBP*/
#ifdef HAVE_TIFF #ifdef HAVE_TIFF
vips_foreign_load_tiff_file_get_type(); vips_foreign_load_tiff_file_get_type();
vips_foreign_load_tiff_buffer_get_type(); vips_foreign_load_tiff_buffer_get_type();
vips_foreign_load_tiff_source_get_type(); vips_foreign_load_tiff_source_get_type();
vips_foreign_save_tiff_file_get_type(); vips_foreign_save_tiff_file_get_type();
vips_foreign_save_tiff_buffer_get_type(); vips_foreign_save_tiff_buffer_get_type();
#endif /*HAVE_TIFF*/ #endif /*HAVE_TIFF*/
#ifdef HAVE_OPENSLIDE #if defined(HAVE_OPENSLIDE) && !defined(OPENSLIDE_MODULE)
vips_foreign_load_openslide_get_type(); vips_foreign_load_openslide_file_get_type();
#endif /*HAVE_OPENSLIDE*/ vips_foreign_load_openslide_source_get_type();
#endif /*defined(HAVE_OPENSLIDE) && !defined(OPENSLIDE_MODULE)*/
#ifdef ENABLE_MAGICKLOAD #if defined(ENABLE_MAGICKLOAD) && !defined(MAGICK_MODULE)
#ifdef HAVE_MAGICK6 #ifdef HAVE_MAGICK6
vips_foreign_load_magick_file_get_type(); vips_foreign_load_magick_file_get_type();
vips_foreign_load_magick_buffer_get_type(); vips_foreign_load_magick_buffer_get_type();
#endif /*HAVE_MAGICK6*/ #endif /*HAVE_MAGICK6*/
#ifdef HAVE_MAGICK7 #ifdef HAVE_MAGICK7
vips_foreign_load_magick7_file_get_type(); vips_foreign_load_magick7_file_get_type();
vips_foreign_load_magick7_buffer_get_type(); vips_foreign_load_magick7_buffer_get_type();
#endif /*HAVE_MAGICK7*/ #endif /*HAVE_MAGICK7*/
#endif /*ENABLE_MAGICKLOAD*/ #endif /*defined(ENABLE_MAGICKLOAD) && !defined(MAGICK_MODULE)*/
#ifdef ENABLE_MAGICKSAVE #if defined(ENABLE_MAGICKSAVE) && !defined(MAGICK_MODULE)
vips_foreign_save_magick_file_get_type(); vips_foreign_save_magick_file_get_type();
vips_foreign_save_magick_buffer_get_type(); vips_foreign_save_magick_buffer_get_type();
#endif /*ENABLE_MAGICKSAVE*/ #endif /*defined(ENABLE_MAGICKSAVE) && !defined(MAGICK_MODULE)*/
#ifdef HAVE_CFITSIO #ifdef HAVE_CFITSIO
vips_foreign_load_fits_get_type(); vips_foreign_load_fits_file_get_type();
vips_foreign_load_fits_source_get_type();
vips_foreign_save_fits_get_type(); vips_foreign_save_fits_get_type();
#endif /*HAVE_CFITSIO*/ #endif /*HAVE_CFITSIO*/
#ifdef HAVE_OPENEXR #ifdef HAVE_OPENEXR
vips_foreign_load_openexr_get_type(); vips_foreign_load_openexr_get_type();
#endif /*HAVE_OPENEXR*/ #endif /*HAVE_OPENEXR*/
#ifdef HAVE_NIFTI #ifdef HAVE_NIFTI
vips_foreign_load_nifti_get_type(); vips_foreign_load_nifti_file_get_type();
vips_foreign_load_nifti_source_get_type();
vips_foreign_save_nifti_get_type(); vips_foreign_save_nifti_get_type();
#endif /*HAVE_NIFTI*/ #endif /*HAVE_NIFTI*/
#ifdef HAVE_HEIF_DECODER #if defined(HAVE_HEIF_DECODER) && !defined(HEIF_MODULE)
vips_foreign_load_heif_file_get_type(); vips_foreign_load_heif_file_get_type();
vips_foreign_load_heif_buffer_get_type(); vips_foreign_load_heif_buffer_get_type();
vips_foreign_load_heif_source_get_type(); vips_foreign_load_heif_source_get_type();
#endif /*HAVE_HEIF_DECODER*/ #endif /*defined(HAVE_HEIF_DECODER) && !defined(HEIF_MODULE)*/
#ifdef HAVE_HEIF_ENCODER #if defined(HAVE_HEIF_ENCODER) && !defined(HEIF_MODULE)
vips_foreign_save_heif_file_get_type(); vips_foreign_save_heif_file_get_type();
vips_foreign_save_heif_buffer_get_type(); vips_foreign_save_heif_buffer_get_type();
vips_foreign_save_heif_target_get_type(); vips_foreign_save_heif_target_get_type();
#endif /*HAVE_HEIF_ENCODER*/ #endif /*defined(HAVE_HEIF_ENCODER) && !defined(HEIF_MODULE)*/
vips__foreign_load_operation = vips__foreign_load_operation =
g_quark_from_static_string( "vips-foreign-load-operation" ); g_quark_from_static_string( "vips-foreign-load-operation" );
} }
 End of changes. 42 change blocks. 
63 lines changed or deleted 839 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)