vips_image_write() only refs input when it has to
when you write to a non-partial image, you create a sink ... so vips_image_write() only needs to ref the input when writing to partials this change makes it much easier to (for example) combine many images in bounded space, see for example: https://gist.github.com/jcupitt/c516325ebef7601b5da610af5619c9b2
This commit is contained in:
parent
3ed174e9cb
commit
1909b31bd6
@ -17,6 +17,8 @@
|
|||||||
- free pixel buffers on image close as well as thread exit ... stops main
|
- free pixel buffers on image close as well as thread exit ... stops main
|
||||||
thread buffers clogging up the system
|
thread buffers clogging up the system
|
||||||
- dzsave can write compressed zips [Felix Bünemann]
|
- dzsave can write compressed zips [Felix Bünemann]
|
||||||
|
- vips_image_write() only refs the input when it has to ... makes it easier to
|
||||||
|
combine many images in bounded memory
|
||||||
|
|
||||||
18/5/16 started 8.3.2
|
18/5/16 started 8.3.2
|
||||||
- more robust vips image reading
|
- more robust vips image reading
|
||||||
|
@ -8,6 +8,8 @@
|
|||||||
* - add vips_image_copy_memory()
|
* - add vips_image_copy_memory()
|
||||||
* 25/11/15
|
* 25/11/15
|
||||||
* - add vips_image_new_from_memory_copy()
|
* - add vips_image_new_from_memory_copy()
|
||||||
|
* 10/6/16
|
||||||
|
* - vips_image_write() does not ref input for non-partial images
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -2448,17 +2450,22 @@ vips_image_write( VipsImage *image, VipsImage *out )
|
|||||||
VIPS_DEMAND_STYLE_THINSTRIP, image, NULL ) )
|
VIPS_DEMAND_STYLE_THINSTRIP, image, NULL ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
|
|
||||||
/* We generate from @image partially, so we need to keep it about as
|
|
||||||
* long as @out is about.
|
|
||||||
*/
|
|
||||||
g_object_ref( image );
|
|
||||||
vips_object_local( out, image );
|
|
||||||
|
|
||||||
if( vips_image_generate( out,
|
if( vips_image_generate( out,
|
||||||
vips_start_one, vips_image_write_gen, vips_stop_one,
|
vips_start_one, vips_image_write_gen, vips_stop_one,
|
||||||
image, NULL ) )
|
image, NULL ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
|
|
||||||
|
/* If @out is a partial image, we need to make sure that @image stays
|
||||||
|
* alive as long as @out is alive.
|
||||||
|
*
|
||||||
|
* If it's not partial, perhaps a file we write to, or a memory image,
|
||||||
|
* it's fine for @image to go away.
|
||||||
|
*/
|
||||||
|
if( vips_image_ispartial( out ) ) {
|
||||||
|
g_object_ref( image );
|
||||||
|
vips_object_local( out, image );
|
||||||
|
}
|
||||||
|
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user