"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "libvips/foreign/vipsload.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).

vipsload.c  (vips-8.10.6):vipsload.c  (vips-8.11.0)
skipping to change at line 51 skipping to change at line 51
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <vips/vips.h> #include <vips/vips.h>
#include <vips/internal.h> #include <vips/internal.h>
typedef struct _VipsForeignLoadVips { typedef struct _VipsForeignLoadVips {
VipsForeignLoad parent_object; VipsForeignLoad parent_object;
char *filename; /* Source to load from (set by subclasses).
*/
VipsSource *source;
} VipsForeignLoadVips; } VipsForeignLoadVips;
typedef VipsForeignLoadClass VipsForeignLoadVipsClass; typedef VipsForeignLoadClass VipsForeignLoadVipsClass;
G_DEFINE_TYPE( VipsForeignLoadVips, vips_foreign_load_vips, G_DEFINE_ABSTRACT_TYPE( VipsForeignLoadVips, vips_foreign_load_vips,
VIPS_TYPE_FOREIGN_LOAD ); VIPS_TYPE_FOREIGN_LOAD );
static gboolean static void
vips_foreign_load_vips_is_a( const char *filename ) vips_foreign_load_vips_dispose( GObject *gobject )
{ {
return( vips__file_magic( filename ) ); VipsForeignLoadVips *vips = (VipsForeignLoadVips *) gobject;
VIPS_UNREF( vips->source );
G_OBJECT_CLASS( vips_foreign_load_vips_parent_class )->
dispose( gobject );
} }
static VipsForeignFlags static VipsForeignFlags
vips_foreign_load_vips_get_flags_filename( const char *filename ) vips_foreign_load_vips_get_flags_source( VipsSource *source )
{ {
unsigned char *data;
VipsForeignFlags flags; VipsForeignFlags flags;
flags = VIPS_FOREIGN_PARTIAL; flags = VIPS_FOREIGN_PARTIAL;
if( vips__file_magic( filename ) == VIPS_MAGIC_SPARC ) if( vips_source_sniff_at_most( source, &data, 4 ) == 4 &&
*((guint32 *) data) == VIPS_MAGIC_SPARC )
flags |= VIPS_FOREIGN_BIGENDIAN; flags |= VIPS_FOREIGN_BIGENDIAN;
return( flags ); return( flags );
} }
static VipsForeignFlags static VipsForeignFlags
vips_foreign_load_vips_get_flags( VipsForeignLoad *load ) vips_foreign_load_vips_get_flags( VipsForeignLoad *load )
{ {
VipsForeignLoadVips *vips = (VipsForeignLoadVips *) load; VipsForeignLoadVips *vips = (VipsForeignLoadVips *) load;
return( vips_foreign_load_vips_get_flags_filename( vips->filename ) ); return( vips_foreign_load_vips_get_flags_source( vips->source ) );
}
static VipsForeignFlags
vips_foreign_load_vips_get_flags_filename( const char *filename )
{
VipsSource *source;
VipsForeignFlags flags;
if( !(source = vips_source_new_from_file( filename )) )
return( 0 );
flags = vips_foreign_load_vips_get_flags_source( source );
VIPS_UNREF( source );
return( flags );
} }
static int static int
vips_foreign_load_vips_header( VipsForeignLoad *load ) vips_foreign_load_vips_header( VipsForeignLoad *load )
{ {
VipsForeignLoadVips *vips = (VipsForeignLoadVips *) load; VipsForeignLoadVips *vips = (VipsForeignLoadVips *) load;
VipsImage *out;
VipsImage *out2;
if( !(out2 = vips_image_new_mode( vips->filename, "r" )) ) const char *filename;
VipsImage *image;
VipsImage *x;
if( (filename =
vips_connection_filename( VIPS_CONNECTION( vips->source ) )) ) {
if( !(image = vips_image_new_mode( filename, "r" )) )
return( -1 );
}
else {
VipsObjectClass *class = VIPS_OBJECT_GET_CLASS( load );
/* We could add load vips from memory, fd, via mmap etc. here.
* We should perhaps move iofuncs/vips.c into this file.
*
* For now, just fail unless there's a filename associated
* with this source.
*/
vips_error( class->nickname,
"%s", _( "no filename associated with source" ) );
return( -1 ); return( -1 );
}
/* Remove the @out that's there now. /* What a hack. Remove the @out that's there now and replace it with
* our image.
*/ */
g_object_get( load, "out", &out, NULL ); g_object_get( load, "out", &x, NULL );
g_object_unref( out ); g_object_unref( x );
g_object_unref( out ); g_object_unref( x );
g_object_set( load, "out", out2, NULL ); g_object_set( load, "out", image, NULL );
return( 0 ); return( 0 );
} }
const char *vips__suffs[] = { ".v", ".vips", NULL };
static void static void
vips_foreign_load_vips_class_init( VipsForeignLoadVipsClass *class ) vips_foreign_load_vips_class_init( VipsForeignLoadVipsClass *class )
{ {
GObjectClass *gobject_class = G_OBJECT_CLASS( class ); GObjectClass *gobject_class = G_OBJECT_CLASS( class );
VipsObjectClass *object_class = (VipsObjectClass *) class; VipsObjectClass *object_class = (VipsObjectClass *) class;
VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class;
VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
gobject_class->set_property = vips_object_set_property; gobject_class->dispose = vips_foreign_load_vips_dispose;
gobject_class->get_property = vips_object_get_property;
object_class->nickname = "vipsload";
object_class->description = _( "load vips from file" );
foreign_class->suffs = vips__suffs; object_class->nickname = "vipsload_base";
object_class->description = _( "load vips base class" );
/* We are fast at is_a(), so high priority. /* We are fast at is_a(), so high priority.
*/ */
foreign_class->priority = 200; foreign_class->priority = 200;
load_class->is_a = vips_foreign_load_vips_is_a;
load_class->get_flags = vips_foreign_load_vips_get_flags; load_class->get_flags = vips_foreign_load_vips_get_flags;
load_class->get_flags_filename = load_class->get_flags_filename =
vips_foreign_load_vips_get_flags_filename; vips_foreign_load_vips_get_flags_filename;
load_class->header = vips_foreign_load_vips_header; load_class->header = vips_foreign_load_vips_header;
load_class->load = NULL; load_class->load = NULL;
}
static void
vips_foreign_load_vips_init( VipsForeignLoadVips *vips )
{
}
typedef struct _VipsForeignLoadVipsFile {
VipsForeignLoadVips parent_object;
char *filename;
} VipsForeignLoadVipsFile;
typedef VipsForeignLoadVipsClass VipsForeignLoadVipsFileClass;
G_DEFINE_TYPE( VipsForeignLoadVipsFile, vips_foreign_load_vips_file,
vips_foreign_load_vips_get_type() );
static int
vips_foreign_load_vips_file_build( VipsObject *object )
{
VipsForeignLoadVips *vips = (VipsForeignLoadVips *) object;
VipsForeignLoadVipsFile *file = (VipsForeignLoadVipsFile *) object;
if( file->filename &&
!(vips->source = vips_source_new_from_file( file->filename )) )
return( -1 );
if( VIPS_OBJECT_CLASS( vips_foreign_load_vips_file_parent_class )->
build( object ) )
return( -1 );
return( 0 );
}
const char *vips__suffs[] = { ".v", ".vips", NULL };
static gboolean
vips_foreign_load_vips_file_is_a( const char *filename )
{
return( vips__file_magic( filename ) );
}
static void
vips_foreign_load_vips_file_class_init( VipsForeignLoadVipsClass *class )
{
GObjectClass *gobject_class = G_OBJECT_CLASS( class );
VipsObjectClass *object_class = (VipsObjectClass *) class;
VipsForeignClass *foreign_class = (VipsForeignClass *) class;
VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
gobject_class->set_property = vips_object_set_property;
gobject_class->get_property = vips_object_get_property;
object_class->nickname = "vipsload";
object_class->description = _( "load vips from file" );
object_class->build = vips_foreign_load_vips_file_build;
foreign_class->suffs = vips__suffs;
load_class->is_a = vips_foreign_load_vips_file_is_a;
VIPS_ARG_STRING( class, "filename", 1, VIPS_ARG_STRING( class, "filename", 1,
_( "Filename" ), _( "Filename" ),
_( "Filename to load from" ), _( "Filename to load from" ),
VIPS_ARGUMENT_REQUIRED_INPUT, VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsForeignLoadVips, filename ), G_STRUCT_OFFSET( VipsForeignLoadVipsFile, filename ),
NULL ); NULL );
} }
static void static void
vips_foreign_load_vips_init( VipsForeignLoadVips *vips ) vips_foreign_load_vips_file_init( VipsForeignLoadVipsFile *file )
{
}
typedef struct _VipsForeignLoadVipsSource {
VipsForeignLoadVips parent_object;
VipsSource *source;
} VipsForeignLoadVipsSource;
typedef VipsForeignLoadVipsClass VipsForeignLoadVipsSourceClass;
G_DEFINE_TYPE( VipsForeignLoadVipsSource, vips_foreign_load_vips_source,
vips_foreign_load_vips_get_type() );
static int
vips_foreign_load_vips_source_build( VipsObject *object )
{
VipsForeignLoadVips *vips = (VipsForeignLoadVips *) object;
VipsForeignLoadVipsSource *source =
(VipsForeignLoadVipsSource *) object;
if( source->source ) {
vips->source = source->source;
g_object_ref( vips->source );
}
if( VIPS_OBJECT_CLASS( vips_foreign_load_vips_source_parent_class )->
build( object ) )
return( -1 );
return( 0 );
}
static gboolean
vips_foreign_load_vips_source_is_a_source( VipsSource *source )
{
const char *filename;
return( (filename =
vips_connection_filename( VIPS_CONNECTION( source ) )) &&
vips__file_magic( filename ) );
}
static void
vips_foreign_load_vips_source_class_init( VipsForeignLoadVipsClass *class )
{
GObjectClass *gobject_class = G_OBJECT_CLASS( class );
VipsObjectClass *object_class = (VipsObjectClass *) class;
VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
gobject_class->set_property = vips_object_set_property;
gobject_class->get_property = vips_object_get_property;
object_class->nickname = "vipsload_source";
object_class->description = _( "load vips from source" );
object_class->build = vips_foreign_load_vips_source_build;
load_class->is_a_source =
vips_foreign_load_vips_source_is_a_source;
VIPS_ARG_OBJECT( class, "source", 1,
_( "Source" ),
_( "Source to load from" ),
VIPS_ARGUMENT_REQUIRED_INPUT,
G_STRUCT_OFFSET( VipsForeignLoadVipsSource, source ),
VIPS_TYPE_SOURCE );
}
static void
vips_foreign_load_vips_source_init( VipsForeignLoadVipsSource *source )
{ {
} }
/** /**
* vips_vipsload: * vips_vipsload:
* @filename: file to load * @filename: file to load
* @out: (out): decompressed image * @out: (out): decompressed image
* @...: %NULL-terminated list of optional named arguments * @...: %NULL-terminated list of optional named arguments
* *
* Read in a vips image. * Read in a vips image.
skipping to change at line 174 skipping to change at line 345
{ {
va_list ap; va_list ap;
int result; int result;
va_start( ap, out ); va_start( ap, out );
result = vips_call_split( "vipsload", ap, filename, out ); result = vips_call_split( "vipsload", ap, filename, out );
va_end( ap ); va_end( ap );
return( result ); return( result );
} }
/**
* vips_vipsload_source:
* @source: source to load from
* @out: (out): decompressed image
* @...: %NULL-terminated list of optional named arguments
*
* Exactly as vips_vipsload(), but read from a source.
*
* Returns: 0 on success, -1 on error.
*/
int
vips_vipsload_source( VipsSource *source, VipsImage **out, ... )
{
va_list ap;
int result;
va_start( ap, out );
result = vips_call_split( "vipsload_source", ap, source, out );
va_end( ap );
return( result );
}
 End of changes. 22 change blocks. 
27 lines changed or deleted 198 lines changed or added

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