Merge branch 'master' of github.com:jcupitt/libvips
Conflicts: TODO
This commit is contained in:
commit
6ad94da99c
3
TODO
3
TODO
@ -15,6 +15,9 @@
|
||||
non-instantiatable type '(null)'
|
||||
Trace/breakpoint trap (core dumped)
|
||||
|
||||
- colour difference does detach / reattach bands (badly), it should
|
||||
use the thing in the base class instead
|
||||
|
||||
- dECMC result differs from Lindbloom's result:
|
||||
|
||||
http://www.brucelindbloom.com/index.html?Eqn_DeltaE_CIE2000.html
|
||||
|
@ -153,21 +153,12 @@ vips_sum_init( VipsSum *sum )
|
||||
static int
|
||||
vips_sumv( VipsImage **in, VipsImage **out, int n, va_list ap )
|
||||
{
|
||||
VipsArea *area;
|
||||
VipsImage **array;
|
||||
int i;
|
||||
VipsArrayImage *array;
|
||||
int result;
|
||||
|
||||
area = vips_area_new_array_object( n );
|
||||
array = (VipsImage **) area->data;
|
||||
for( i = 0; i < n; i++ ) {
|
||||
array[i] = in[i];
|
||||
g_object_ref( array[i] );
|
||||
}
|
||||
|
||||
result = vips_call_split( "sum", ap, area, out );
|
||||
|
||||
vips_area_unref( area );
|
||||
array = vips_array_image_new( in, n );
|
||||
result = vips_call_split( "sum", ap, array, out );
|
||||
vips_area_unref( VIPS_AREA( array ) );
|
||||
|
||||
return( result );
|
||||
}
|
||||
|
@ -444,7 +444,7 @@ vips_colour_space_build( VipsObject *object )
|
||||
{
|
||||
VipsColour *colour = VIPS_COLOUR( object );
|
||||
VipsColourSpace *space = VIPS_COLOUR_SPACE( object );
|
||||
VipsImage **t = (VipsImage **) vips_object_local_array( object, 2 );
|
||||
VipsImage **t = (VipsImage **) vips_object_local_array( object, 1 );
|
||||
|
||||
/* We only process float.
|
||||
*/
|
||||
|
@ -187,21 +187,12 @@ vips_bandjoin_init( VipsBandjoin *bandjoin )
|
||||
static int
|
||||
vips_bandjoinv( VipsImage **in, VipsImage **out, int n, va_list ap )
|
||||
{
|
||||
VipsArea *area;
|
||||
VipsImage **array;
|
||||
int i;
|
||||
VipsArrayImage *array;
|
||||
int result;
|
||||
|
||||
area = vips_area_new_array_object( n );
|
||||
array = (VipsImage **) area->data;
|
||||
for( i = 0; i < n; i++ ) {
|
||||
array[i] = in[i];
|
||||
g_object_ref( array[i] );
|
||||
}
|
||||
|
||||
result = vips_call_split( "bandjoin", ap, area, out );
|
||||
|
||||
vips_area_unref( area );
|
||||
array = vips_array_image_new( in, n );
|
||||
result = vips_call_split( "bandjoin", ap, array, out );
|
||||
vips_area_unref( VIPS_AREA( array ) );
|
||||
|
||||
return( result );
|
||||
}
|
||||
|
@ -256,21 +256,12 @@ vips_bandrank_init( VipsBandrank *bandrank )
|
||||
static int
|
||||
vips_bandrankv( VipsImage **in, VipsImage **out, int n, va_list ap )
|
||||
{
|
||||
VipsArea *area;
|
||||
VipsImage **array;
|
||||
int i;
|
||||
VipsArrayImage *array;
|
||||
int result;
|
||||
|
||||
area = vips_area_new_array_object( n );
|
||||
array = (VipsImage **) area->data;
|
||||
for( i = 0; i < n; i++ ) {
|
||||
array[i] = in[i];
|
||||
g_object_ref( array[i] );
|
||||
}
|
||||
|
||||
result = vips_call_split( "bandrank", ap, area, out );
|
||||
|
||||
vips_area_unref( area );
|
||||
array = vips_array_image_new( in, n );
|
||||
result = vips_call_split( "bandrank", ap, array, out );
|
||||
vips_area_unref( VIPS_AREA( array ) );
|
||||
|
||||
return( result );
|
||||
}
|
||||
|
@ -465,7 +465,8 @@ int vips_system( const char *cmd_format, ... )
|
||||
|
||||
/* Defined in type.c, but declared here since they use VipsImage.
|
||||
*/
|
||||
VipsArrayImage *vips_array_image_new( const VipsImage **array, int n );
|
||||
VipsArrayImage *vips_array_image_new( VipsImage **array, int n );
|
||||
VipsArrayImage *vips_array_image_newv( int n, ... );
|
||||
VipsImage **vips_array_image_get( VipsArrayImage *array, int *n );
|
||||
VipsImage **vips_value_get_array_image( const GValue *value, int *n );
|
||||
int vips_value_set_array_image( GValue *value, VipsImage **array, int n );
|
||||
|
@ -196,6 +196,9 @@ typedef struct _VipsArrayImage {
|
||||
VipsArea area;
|
||||
} VipsArrayImage;
|
||||
|
||||
/* See image.h for vips_array_image_new() etc., they need to be declared after
|
||||
* VipsImage.
|
||||
*/
|
||||
GType vips_array_image_get_type( void );
|
||||
|
||||
void vips_value_set_area( GValue *value, VipsCallbackFn free_fn, void *data );
|
||||
|
@ -389,8 +389,8 @@ vips_leak( void )
|
||||
vips__type_leak();
|
||||
|
||||
#ifdef DEBUG
|
||||
#endif /*DEBUG*/
|
||||
vips_buffer_dump_all();
|
||||
#endif /*DEBUG*/
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -999,6 +999,10 @@ transform_g_string_array_image( const GValue *src_value, GValue *dest_value )
|
||||
* @n: number of images
|
||||
*
|
||||
* Allocate a new array of images and copy @array into it. Free with
|
||||
* vips_area_unref().
|
||||
*
|
||||
* The images will all be reffed by this function. They
|
||||
* will be automatically unreffed for you by
|
||||
* vips_area_unref().
|
||||
*
|
||||
* See also: #VipsArea.
|
||||
@ -1006,14 +1010,58 @@ transform_g_string_array_image( const GValue *src_value, GValue *dest_value )
|
||||
* Returns: (transfer full): A new #VipsArrayImage.
|
||||
*/
|
||||
VipsArrayImage *
|
||||
vips_array_image_new( const VipsImage **array, int n )
|
||||
vips_array_image_new( VipsImage **array, int n )
|
||||
{
|
||||
VipsArea *area;
|
||||
VipsImage *array_copy;
|
||||
VipsImage **array_copy;
|
||||
int i;
|
||||
|
||||
area = vips_area_new_array_object( n );
|
||||
area->type = VIPS_TYPE_IMAGE;
|
||||
|
||||
area = vips_area_new_array( G_TYPE_DOUBLE, sizeof( double ), n );
|
||||
array_copy = vips_area_get_data( area, NULL, NULL, NULL, NULL );
|
||||
memcpy( array_copy, array, n * sizeof( double ) );
|
||||
for( i = 0; i < n; i++ ) {
|
||||
array_copy[i] = (VipsImage *) array[i];
|
||||
g_object_ref( array_copy[i] );
|
||||
}
|
||||
|
||||
return( (VipsArrayImage *) area );
|
||||
}
|
||||
|
||||
/**
|
||||
* vips_array_image_newv:
|
||||
* @n: number of images
|
||||
* @...: list of #VipsImage arguments
|
||||
*
|
||||
* Allocate a new array of @n #VipsImage and copy @... into it. Free with
|
||||
* vips_area_unref().
|
||||
*
|
||||
* The images will all be reffed by this function. They
|
||||
* will be automatically unreffed for you by
|
||||
* vips_area_unref().
|
||||
*
|
||||
* See also: vips_array_image_new()
|
||||
*
|
||||
* Returns: (transfer full): A new #VipsArrayImage.
|
||||
*/
|
||||
VipsArrayImage *
|
||||
vips_array_image_newv( int n, ... )
|
||||
{
|
||||
va_list ap;
|
||||
VipsArea *area;
|
||||
VipsImage **array;
|
||||
int i;
|
||||
|
||||
area = vips_area_new_array_object( n );
|
||||
area->type = VIPS_TYPE_IMAGE;
|
||||
|
||||
array = vips_area_get_data( area, NULL, NULL, NULL, NULL );
|
||||
va_start( ap, n );
|
||||
for( i = 0; i < n; i++ ) {
|
||||
array[i] = va_arg( ap, VipsImage * );
|
||||
g_object_ref( array[i] );
|
||||
}
|
||||
va_end( ap );
|
||||
|
||||
return( (VipsArrayImage *) area );
|
||||
}
|
||||
|
9
python/soak.sh
Executable file
9
python/soak.sh
Executable file
@ -0,0 +1,9 @@
|
||||
#!/bin/bash
|
||||
|
||||
export G_DEBUG=fatal-warnings
|
||||
|
||||
while true; do
|
||||
if ! python test_colour.py TestColour.test_bug; then
|
||||
exit
|
||||
fi
|
||||
done
|
@ -107,6 +107,17 @@ class TestColour(unittest.TestCase):
|
||||
self.mono = self.colour.extract_band(1)
|
||||
self.all_images = [self.mono, self.colour]
|
||||
|
||||
def test_bug(self):
|
||||
# mid-grey in Lab ... put 42 in the extra band, it should be copied
|
||||
# unmodified
|
||||
test = Vips.Image.black(100, 100) + [50, 0, 0, 42]
|
||||
test = test.copy(interpretation = Vips.Interpretation.LAB)
|
||||
|
||||
# a long series should come in a circle
|
||||
im = test
|
||||
for col in [Vips.Interpretation.RGB16]:
|
||||
im = im.colourspace(col)
|
||||
|
||||
def test_colourspace(self):
|
||||
# mid-grey in Lab ... put 42 in the extra band, it should be copied
|
||||
# unmodified
|
||||
|
Loading…
Reference in New Issue
Block a user