Upgrade to libvips v8.11.0-rc1

This commit is contained in:
Lovell Fuller 2021-06-07 21:13:40 +01:00
parent 7467fa8b50
commit cbaec198a5
9 changed files with 278 additions and 89 deletions

View File

@ -1,5 +1,11 @@
# Changelog # Changelog
## v0.28 - *circle*
Requires libvips v8.11.0
### v0.29.0 - TBD
## v0.28 - *bijou* ## v0.28 - *bijou*
Requires libvips v8.10.6 Requires libvips v8.10.6

View File

@ -147,7 +147,7 @@
}, },
"license": "Apache-2.0", "license": "Apache-2.0",
"config": { "config": {
"libvips": "8.10.6", "libvips": "8.11.0-rc1",
"runtime": "napi", "runtime": "napi",
"target": 3 "target": 3
}, },

View File

@ -25,9 +25,9 @@
// Verify platform and compiler compatibility // Verify platform and compiler compatibility
#if (VIPS_MAJOR_VERSION < 8) || \ #if (VIPS_MAJOR_VERSION < 8) || \
(VIPS_MAJOR_VERSION == 8 && VIPS_MINOR_VERSION < 10) || \ (VIPS_MAJOR_VERSION == 8 && VIPS_MINOR_VERSION < 11) || \
(VIPS_MAJOR_VERSION == 8 && VIPS_MINOR_VERSION == 10 && VIPS_MICRO_VERSION < 6) (VIPS_MAJOR_VERSION == 8 && VIPS_MINOR_VERSION == 11 && VIPS_MICRO_VERSION < 0)
#error "libvips version 8.10.6+ is required - please see https://sharp.pixelplumbing.com/install" #error "libvips version 8.11.0+ is required - please see https://sharp.pixelplumbing.com/install"
#endif #endif
#if ((!defined(__clang__)) && defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 6))) #if ((!defined(__clang__)) && defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 6)))

View File

@ -110,19 +110,6 @@ VSource::new_from_options( const char *options )
return( out ); return( out );
} }
VOption *
VOption::set( const char *name, const VSource value )
{
Pair *pair = new Pair( name );
pair->input = true;
g_value_init( &pair->value, VIPS_TYPE_SOURCE );
g_value_set_object( &pair->value, value.get_source() );
options.push_back( pair );
return( this );
}
VTarget VTarget
VTarget::new_to_descriptor( int descriptor ) VTarget::new_to_descriptor( int descriptor )
{ {
@ -162,17 +149,4 @@ VTarget::new_to_memory()
return( out ); return( out );
} }
VOption *
VOption::set( const char *name, const VTarget value )
{
Pair *pair = new Pair( name );
pair->input = true;
g_value_init( &pair->value, VIPS_TYPE_TARGET );
g_value_set_object( &pair->value, value.get_target() );
options.push_back( pair );
return( this );
}
VIPS_NAMESPACE_END VIPS_NAMESPACE_END

View File

@ -51,6 +51,12 @@
VIPS_NAMESPACE_START VIPS_NAMESPACE_START
/**
* \namespace vips
*
* General docs for the vips namespace.
*/
std::vector<double> std::vector<double>
to_vectorv( int n, ... ) to_vectorv( int n, ... )
{ {
@ -140,6 +146,20 @@ VOption::set( const char *name, int value )
return( this ); return( this );
} }
// input guint64
VOption *
VOption::set( const char *name, guint64 value )
{
Pair *pair = new Pair( name );
pair->input = true;
g_value_init( &pair->value, G_TYPE_UINT64 );
g_value_set_uint64( &pair->value, value );
options.push_back( pair );
return( this );
}
// input double // input double
VOption * VOption *
VOption::set( const char *name, double value ) VOption::set( const char *name, double value )
@ -167,39 +187,17 @@ VOption::set( const char *name, const char *value )
return( this ); return( this );
} }
// input image // input vips object (image, source, target, etc. etc.)
VOption * VOption *
VOption::set( const char *name, const VImage value ) VOption::set( const char *name, const VObject value )
{ {
Pair *pair = new Pair( name ); Pair *pair = new Pair( name );
VipsObject *object = value.get_object();
GType type = G_OBJECT_TYPE( object );
pair->input = true; pair->input = true;
g_value_init( &pair->value, VIPS_TYPE_IMAGE ); g_value_init( &pair->value, type );
g_value_set_object( &pair->value, value.get_image() ); g_value_set_object( &pair->value, object );
options.push_back( pair );
return( this );
}
// input double array
VOption *
VOption::set( const char *name, std::vector<double> value )
{
Pair *pair = new Pair( name );
double *array;
unsigned int i;
pair->input = true;
g_value_init( &pair->value, VIPS_TYPE_ARRAY_DOUBLE );
vips_value_set_array_double( &pair->value, NULL,
static_cast< int >( value.size() ) );
array = vips_value_get_array_double( &pair->value, NULL );
for( i = 0; i < value.size(); i++ )
array[i] = value[i];
options.push_back( pair ); options.push_back( pair );
return( this ); return( this );
@ -229,6 +227,30 @@ VOption::set( const char *name, std::vector<int> value )
return( this ); return( this );
} }
// input double array
VOption *
VOption::set( const char *name, std::vector<double> value )
{
Pair *pair = new Pair( name );
double *array;
unsigned int i;
pair->input = true;
g_value_init( &pair->value, VIPS_TYPE_ARRAY_DOUBLE );
vips_value_set_array_double( &pair->value, NULL,
static_cast< int >( value.size() ) );
array = vips_value_get_array_double( &pair->value, NULL );
for( i = 0; i < value.size(); i++ )
array[i] = value[i];
options.push_back( pair );
return( this );
}
// input image array // input image array
VOption * VOption *
VOption::set( const char *name, std::vector<VImage> value ) VOption::set( const char *name, std::vector<VImage> value )
@ -619,6 +641,22 @@ VImage::new_from_source( VSource source, const char *option_string,
return( out ); return( out );
} }
VImage
VImage::new_from_memory_steal( void *data, size_t size,
int width, int height, int bands, VipsBandFormat format )
{
VipsImage *image;
if( !(image = vips_image_new_from_memory( data, size,
width, height, bands, format )) )
throw( VError() );
g_signal_connect( image, "postclose",
G_CALLBACK( vips_image_free_buffer ), data);
return( VImage( image ) );
}
VImage VImage
VImage::new_matrix( int width, int height ) VImage::new_matrix( int width, int height )
{ {

View File

@ -60,17 +60,4 @@ VInterpolate::new_from_name( const char *name, VOption *options )
return( out ); return( out );
} }
VOption *
VOption::set( const char *name, const VInterpolate value )
{
Pair *pair = new Pair( name );
pair->input = true;
g_value_init( &pair->value, VIPS_TYPE_INTERPOLATE );
g_value_set_object( &pair->value, value.get_interpolate() );
options.push_back( pair );
return( this );
}
VIPS_NAMESPACE_END VIPS_NAMESPACE_END

View File

@ -1,5 +1,5 @@
// bodies for vips operations // bodies for vips operations
// Sun 5 Jul 22:36:37 BST 2020 // Wed May 12 11:30:00 AM CEST 2021
// this file is generated automatically, do not edit! // this file is generated automatically, do not edit!
VImage VImage::CMC2LCh( VOption *options ) const VImage VImage::CMC2LCh( VOption *options ) const
@ -1065,6 +1065,18 @@ VImage VImage::fitsload( const char *filename, VOption *options )
return( out ); return( out );
} }
VImage VImage::fitsload_source( VSource source, VOption *options )
{
VImage out;
call( "fitsload_source",
(options ? options : VImage::option())->
set( "out", &out )->
set( "source", source ) );
return( out );
}
void VImage::fitssave( const char *filename, VOption *options ) const void VImage::fitssave( const char *filename, VOption *options ) const
{ {
call( "fitssave", call( "fitssave",
@ -1656,6 +1668,70 @@ VImage VImage::join( VImage in2, VipsDirection direction, VOption *options ) con
return( out ); return( out );
} }
VImage VImage::jp2kload( const char *filename, VOption *options )
{
VImage out;
call( "jp2kload",
(options ? options : VImage::option())->
set( "out", &out )->
set( "filename", filename ) );
return( out );
}
VImage VImage::jp2kload_buffer( VipsBlob *buffer, VOption *options )
{
VImage out;
call( "jp2kload_buffer",
(options ? options : VImage::option())->
set( "out", &out )->
set( "buffer", buffer ) );
return( out );
}
VImage VImage::jp2kload_source( VSource source, VOption *options )
{
VImage out;
call( "jp2kload_source",
(options ? options : VImage::option())->
set( "out", &out )->
set( "source", source ) );
return( out );
}
void VImage::jp2ksave( const char *filename, VOption *options ) const
{
call( "jp2ksave",
(options ? options : VImage::option())->
set( "in", *this )->
set( "filename", filename ) );
}
VipsBlob *VImage::jp2ksave_buffer( VOption *options ) const
{
VipsBlob *buffer;
call( "jp2ksave_buffer",
(options ? options : VImage::option())->
set( "in", *this )->
set( "buffer", &buffer ) );
return( buffer );
}
void VImage::jp2ksave_target( VTarget target, VOption *options ) const
{
call( "jp2ksave_target",
(options ? options : VImage::option())->
set( "in", *this )->
set( "target", target ) );
}
VImage VImage::jpegload( const char *filename, VOption *options ) VImage VImage::jpegload( const char *filename, VOption *options )
{ {
VImage out; VImage out;
@ -1727,6 +1803,70 @@ void VImage::jpegsave_target( VTarget target, VOption *options ) const
set( "target", target ) ); set( "target", target ) );
} }
VImage VImage::jxlload( const char *filename, VOption *options )
{
VImage out;
call( "jxlload",
(options ? options : VImage::option())->
set( "out", &out )->
set( "filename", filename ) );
return( out );
}
VImage VImage::jxlload_buffer( VipsBlob *buffer, VOption *options )
{
VImage out;
call( "jxlload_buffer",
(options ? options : VImage::option())->
set( "out", &out )->
set( "buffer", buffer ) );
return( out );
}
VImage VImage::jxlload_source( VSource source, VOption *options )
{
VImage out;
call( "jxlload_source",
(options ? options : VImage::option())->
set( "out", &out )->
set( "source", source ) );
return( out );
}
void VImage::jxlsave( const char *filename, VOption *options ) const
{
call( "jxlsave",
(options ? options : VImage::option())->
set( "in", *this )->
set( "filename", filename ) );
}
VipsBlob *VImage::jxlsave_buffer( VOption *options ) const
{
VipsBlob *buffer;
call( "jxlsave_buffer",
(options ? options : VImage::option())->
set( "in", *this )->
set( "buffer", &buffer ) );
return( buffer );
}
void VImage::jxlsave_target( VTarget target, VOption *options ) const
{
call( "jxlsave_target",
(options ? options : VImage::option())->
set( "in", *this )->
set( "target", target ) );
}
VImage VImage::labelregions( VOption *options ) const VImage VImage::labelregions( VOption *options ) const
{ {
VImage mask; VImage mask;
@ -2284,6 +2424,18 @@ VImage VImage::niftiload( const char *filename, VOption *options )
return( out ); return( out );
} }
VImage VImage::niftiload_source( VSource source, VOption *options )
{
VImage out;
call( "niftiload_source",
(options ? options : VImage::option())->
set( "out", &out )->
set( "source", source ) );
return( out );
}
void VImage::niftisave( const char *filename, VOption *options ) const void VImage::niftisave( const char *filename, VOption *options ) const
{ {
call( "niftisave", call( "niftisave",
@ -2316,6 +2468,18 @@ VImage VImage::openslideload( const char *filename, VOption *options )
return( out ); return( out );
} }
VImage VImage::openslideload_source( VSource source, VOption *options )
{
VImage out;
call( "openslideload_source",
(options ? options : VImage::option())->
set( "out", &out )->
set( "source", source ) );
return( out );
}
VImage VImage::pdfload( const char *filename, VOption *options ) VImage VImage::pdfload( const char *filename, VOption *options )
{ {
VImage out; VImage out;
@ -3388,6 +3552,18 @@ VImage VImage::vipsload( const char *filename, VOption *options )
return( out ); return( out );
} }
VImage VImage::vipsload_source( VSource source, VOption *options )
{
VImage out;
call( "vipsload_source",
(options ? options : VImage::option())->
set( "out", &out )->
set( "source", source ) );
return( out );
}
void VImage::vipssave( const char *filename, VOption *options ) const void VImage::vipssave( const char *filename, VOption *options ) const
{ {
call( "vipssave", call( "vipssave",
@ -3396,6 +3572,14 @@ void VImage::vipssave( const char *filename, VOption *options ) const
set( "filename", filename ) ); set( "filename", filename ) );
} }
void VImage::vipssave_target( VTarget target, VOption *options ) const
{
call( "vipssave_target",
(options ? options : VImage::option())->
set( "in", *this )->
set( "target", target ) );
}
VImage VImage::webpload( const char *filename, VOption *options ) VImage VImage::webpload( const char *filename, VOption *options )
{ {
VImage out; VImage out;

View File

@ -247,7 +247,7 @@ describe('Image metadata', function () {
assert.strictEqual('undefined', typeof metadata.size); assert.strictEqual('undefined', typeof metadata.size);
assert.strictEqual(800, metadata.width); assert.strictEqual(800, metadata.width);
assert.strictEqual(533, metadata.height); assert.strictEqual(533, metadata.height);
assert.strictEqual(true, [3, 4].includes(metadata.channels)); // libvips 8.11.0 = 4 assert.strictEqual(4, metadata.channels);
assert.strictEqual('uchar', metadata.depth); assert.strictEqual('uchar', metadata.depth);
assert.strictEqual('undefined', typeof metadata.density); assert.strictEqual('undefined', typeof metadata.density);
assert.strictEqual('undefined', typeof metadata.chromaSubsampling); assert.strictEqual('undefined', typeof metadata.chromaSubsampling);
@ -266,7 +266,7 @@ describe('Image metadata', function () {
assert.strictEqual('undefined', typeof metadata.size); assert.strictEqual('undefined', typeof metadata.size);
assert.strictEqual(2, metadata.width); assert.strictEqual(2, metadata.width);
assert.strictEqual(1, metadata.height); assert.strictEqual(1, metadata.height);
assert.strictEqual(true, [2, 4].includes(metadata.channels)); // libvips 8.11.0 = 4 assert.strictEqual(4, metadata.channels);
assert.strictEqual('uchar', metadata.depth); assert.strictEqual('uchar', metadata.depth);
assert.strictEqual('undefined', typeof metadata.density); assert.strictEqual('undefined', typeof metadata.density);
assert.strictEqual('undefined', typeof metadata.chromaSubsampling); assert.strictEqual('undefined', typeof metadata.chromaSubsampling);
@ -320,7 +320,7 @@ describe('Image metadata', function () {
assert.strictEqual(isProgressive, false); assert.strictEqual(isProgressive, false);
assert.strictEqual(pages, 10); assert.strictEqual(pages, 10);
assert.strictEqual(pageHeight, 285); assert.strictEqual(pageHeight, 285);
assert.strictEqual(true, [2, 3].includes(loop)); // libvips 8.11.0 = 2 assert.strictEqual(loop, 2);
assert.deepStrictEqual(delay, [...Array(9).fill(3000), 15000]); assert.deepStrictEqual(delay, [...Array(9).fill(3000), 15000]);
assert.strictEqual(hasProfile, false); assert.strictEqual(hasProfile, false);
assert.strictEqual(hasAlpha, true); assert.strictEqual(hasAlpha, true);

View File

@ -423,20 +423,20 @@ describe('Image Stats', function () {
assert.strictEqual(true, isInRange(stats.channels[0].maxY, 0, 1)); assert.strictEqual(true, isInRange(stats.channels[0].maxY, 0, 1));
// alpha channel // alpha channel
assert.strictEqual(0, stats.channels[1].min); assert.strictEqual(0, stats.channels[3].min);
assert.strictEqual(255, stats.channels[1].max); assert.strictEqual(255, stats.channels[3].max);
assert.strictEqual(true, isInAcceptableRange(stats.channels[1].sum, 255)); assert.strictEqual(true, isInAcceptableRange(stats.channels[3].sum, 255));
assert.strictEqual(true, isInAcceptableRange(stats.channels[1].squaresSum, 65025)); assert.strictEqual(true, isInAcceptableRange(stats.channels[3].squaresSum, 65025));
assert.strictEqual(true, isInAcceptableRange(stats.channels[1].mean, 127.5)); assert.strictEqual(true, isInAcceptableRange(stats.channels[3].mean, 127.5));
assert.strictEqual(true, isInAcceptableRange(stats.channels[1].stdev, 180.31222920256963)); assert.strictEqual(true, isInAcceptableRange(stats.channels[3].stdev, 180.31222920256963));
assert.strictEqual(true, isInteger(stats.channels[1].minX)); assert.strictEqual(true, isInteger(stats.channels[3].minX));
assert.strictEqual(true, isInRange(stats.channels[1].minX, 0, 2)); assert.strictEqual(true, isInRange(stats.channels[3].minX, 0, 2));
assert.strictEqual(true, isInteger(stats.channels[1].minY)); assert.strictEqual(true, isInteger(stats.channels[3].minY));
assert.strictEqual(true, isInRange(stats.channels[1].minY, 0, 1)); assert.strictEqual(true, isInRange(stats.channels[3].minY, 0, 1));
assert.strictEqual(true, isInteger(stats.channels[1].maxX)); assert.strictEqual(true, isInteger(stats.channels[3].maxX));
assert.strictEqual(true, isInRange(stats.channels[1].maxX, 0, 2)); assert.strictEqual(true, isInRange(stats.channels[3].maxX, 0, 2));
assert.strictEqual(true, isInteger(stats.channels[1].maxY)); assert.strictEqual(true, isInteger(stats.channels[3].maxY));
assert.strictEqual(true, isInRange(stats.channels[1].maxY, 0, 1)); assert.strictEqual(true, isInRange(stats.channels[3].maxY, 0, 1));
done(); done();
}); });