Merge branch '8.6'

This commit is contained in:
John Cupitt 2018-01-05 16:29:56 +00:00
commit 925667f8d3
5 changed files with 43 additions and 19 deletions

View File

@ -1,8 +1,11 @@
23/12/17 started 8.7.0
- add magicksave, save image with libMagick [dlemstra]
5/1/18 started 8.6.2
- vips_sink_screen() keeps a ref to the input image ... stops a rare race
10/12/17 started 8.6.1
- stop window new/free cycling .. faster zoom out on some large images in nip2
- fix mmap window new/free cycling
- fix some compiler warnings
- remove the 64-image limit on bandary operations
- better version date [bmwiedemann]
@ -10,6 +13,8 @@
- fix a memleak on error during jpeg buffer write [lovell]
- fix misspelling of IPTC as IPCT [lovell]
- seq could be set on small images opened in random-access mode [aferrero2707]
- fix small memleak in dzsave [lovell]
- small speedup for rgb->g [lovell]
15/4/17 started 8.6.0
- supports fits images with leading non-image HDUs, thanks benepo

View File

@ -350,24 +350,19 @@ vips_col_scRGB2BW( int range, int *lut, float R, float G, float B,
int Yi;
float v;
/* RGB can be Nan, Inf etc. Throw those values out, they will break
* our clipping.
*
* Don't use isnormal(), it is false for 0.0 and for subnormal
* numbers.
/* The usual ratio. We do this in linear space before we gamma.
*/
if( VIPS_ISNAN( R ) || VIPS_ISINF( R ) ||
VIPS_ISNAN( G ) || VIPS_ISINF( G ) ||
VIPS_ISNAN( B ) || VIPS_ISINF( B ) ) {
Y = 0.2 * R + 0.7 * G + 0.1 * B;
/* Y can be Nan, Inf etc. Throw those values out, they will break
* our clipping.
*/
if( VIPS_ISNAN( Y ) || VIPS_ISINF( Y ) ) {
*g = 0;
return( -1 );
}
/* The usual ratio. We do this in linear space before we gamma.
*/
Y = 0.2 * R + 0.7 * G + 0.1 * B;
/* Look up with a float index: interpolate between the nearest two
* points.
*

View File

@ -74,7 +74,8 @@
* 18/8/17
* - shut down the output earlier to flush zip output
* 24/11/17
* - output overlap-only tiles on edges, for better deepzoom spec
* - output overlap-only tiles on edges for better deepzoom spec
* compliance
*/
/*
@ -179,7 +180,7 @@
*/
typedef struct _VipsGsfDirectory {
struct _VipsGsfDirectory *parent;
const char *name;
char *name;
/* List of child directories, if any.
*/
@ -222,7 +223,7 @@ vips_gsf_tree_close( VipsGsfDirectory *tree )
return( tree );
}
g_object_unref( tree->out );
VIPS_UNREF( tree->out );
}
if( tree->container ) {
@ -233,9 +234,13 @@ vips_gsf_tree_close( VipsGsfDirectory *tree )
return( tree );
}
g_object_unref( tree->container );
VIPS_UNREF( tree->container );
}
VIPS_FREEF( g_slist_free, tree->children );
VIPS_FREE( tree->name );
VIPS_FREE( tree );
return( NULL );
}

View File

@ -516,6 +516,7 @@ vips_leak( void )
fprintf( stderr, "%s", vips_buf_all( &buf ) );
vips__print_renders();
#ifdef DEBUG
vips_buffer_dump_all();

View File

@ -234,6 +234,8 @@ render_free( Render *render )
VIPS_FREEF( g_slist_free, render->dirty );
VIPS_FREEF( g_hash_table_destroy, render->tiles );
VIPS_UNREF( render->in );
vips_free( render );
#ifdef VIPS_DEBUG_AMBER
@ -608,6 +610,10 @@ render_new( VipsImage *in, VipsImage *out, VipsImage *mask,
if( !(render = VIPS_NEW( NULL, Render )) )
return( NULL );
/* render must hold a ref to in. This is dropped in render_free().
*/
g_object_ref( in );
render->ref_count = 1;
render->ref_count_lock = vips_g_mutex_new();
@ -1126,7 +1132,19 @@ void
vips__print_renders( void )
{
#ifdef VIPS_DEBUG_AMBER
printf( "%d active renders\n", render_num_renders );
if( render_num_renders > 0 )
printf( "%d active renders\n", render_num_renders );
#endif /*VIPS_DEBUG_AMBER*/
printf( "%d dirty renders\n", g_slist_length( render_dirty_all ) );
if( render_dirty_lock ) {
int n_dirty;
g_mutex_lock( render_dirty_lock );
n_dirty = g_slist_length( render_dirty_all );
if( n_dirty > 0 )
printf( "%d dirty renders\n", n_dirty );
g_mutex_unlock( render_dirty_lock );
}
}