cache the image before write for fits
write must be strictly top-to-bottom for :seq to work
This commit is contained in:
parent
8e2d83e815
commit
50c98c39d1
@ -1,6 +1,7 @@
|
|||||||
30/6/14 started 7.40.3
|
30/6/14 started 7.40.3
|
||||||
- fix interlaced thumbnails in vipsthumbnail, thanks lovell
|
- fix interlaced thumbnails in vipsthumbnail, thanks lovell
|
||||||
- fix use of "header" in benchmark/, thanks David
|
- fix use of "header" in benchmark/, thanks David
|
||||||
|
- fits save now caches the image before write, so it's top-to-bottom
|
||||||
|
|
||||||
25/6/14 started 7.40.2
|
25/6/14 started 7.40.2
|
||||||
- dzsave write to zip stops at 4gb, thanks bgilbert
|
- dzsave write to zip stops at 4gb, thanks bgilbert
|
||||||
|
2
TODO
2
TODO
@ -1,5 +1,3 @@
|
|||||||
- fits needs to cache before write
|
|
||||||
|
|
||||||
- threadpool recyling might be useful for dzsave?
|
- threadpool recyling might be useful for dzsave?
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
*
|
*
|
||||||
* 2/12/11
|
* 2/12/11
|
||||||
* - wrap a class around the fits writer
|
* - wrap a class around the fits writer
|
||||||
|
* 2/7/14
|
||||||
|
* - cache the image before write so we are sequential
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -70,19 +72,26 @@ vips_foreign_save_fits_build( VipsObject *object )
|
|||||||
{
|
{
|
||||||
VipsForeignSave *save = (VipsForeignSave *) object;
|
VipsForeignSave *save = (VipsForeignSave *) object;
|
||||||
VipsForeignSaveFits *fits = (VipsForeignSaveFits *) object;
|
VipsForeignSaveFits *fits = (VipsForeignSaveFits *) object;
|
||||||
VipsImage *t;
|
VipsImage **t = (VipsImage **)
|
||||||
|
vips_object_local_array( VIPS_OBJECT( fits ), 2 );
|
||||||
|
|
||||||
if( VIPS_OBJECT_CLASS( vips_foreign_save_fits_parent_class )->
|
if( VIPS_OBJECT_CLASS( vips_foreign_save_fits_parent_class )->
|
||||||
build( object ) )
|
build( object ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
|
|
||||||
if( vips_flip( save->ready, &t, VIPS_DIRECTION_VERTICAL, NULL ) )
|
/* FITS is written bottom-to-top, so we must flip.
|
||||||
|
*
|
||||||
|
* But all vips readers must work top-to-bottom (or vips_copy()'s seq
|
||||||
|
* hint won't work) so we must cache the input image.
|
||||||
|
*
|
||||||
|
* We cache to RAM, but perhaps we should use something like
|
||||||
|
* vips_get_disc_threshold() and copy to a tempfile.
|
||||||
|
*/
|
||||||
|
t[0] = vips_image_new_memory();
|
||||||
|
if( vips_image_write( save->ready, t[0] ) ||
|
||||||
|
vips_flip( t[0], &t[1], VIPS_DIRECTION_VERTICAL, NULL ) ||
|
||||||
|
vips__fits_write( t[1], fits->filename ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
if( vips__fits_write( t, fits->filename ) ) {
|
|
||||||
g_object_unref( t );
|
|
||||||
return( -1 );
|
|
||||||
}
|
|
||||||
g_object_unref( t );
|
|
||||||
|
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user