diff --git a/ChangeLog b/ChangeLog index c4966699..8cee8982 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,7 +3,7 @@ - turn off caching for im_copy()/vips_copy(), we use copy to stop sharing, and it's cheap so caching doesn't help anyway - auto rshift down to 8 bits on save, if necessary -- im_gaussnoise() redone as a class +- im_gaussnoise(), im_copy_file() redone as a class - add --angle option to dzsave 14/5/13 started 7.32.4 diff --git a/libvips/conversion/Makefile.am b/libvips/conversion/Makefile.am index 49a07131..4f801a41 100644 --- a/libvips/conversion/Makefile.am +++ b/libvips/conversion/Makefile.am @@ -26,7 +26,6 @@ libconversion_la_SOURCES = \ rot.c \ ifthenelse.c \ conver_dispatch.c \ - im_copy_file.c \ im_falsecolour.c \ im_msb.c \ im_grid.c \ diff --git a/libvips/conversion/copy.c b/libvips/conversion/copy.c index 7cb18d73..8faafc5d 100644 --- a/libvips/conversion/copy.c +++ b/libvips/conversion/copy.c @@ -459,3 +459,39 @@ vips_copy( VipsImage *in, VipsImage **out, ... ) return( result ); } + +/** + * vips_copy_file: + * @in: input image + * @out: output image + * + * A simple convenience function to copy an image to a file, then copy + * again to output. If the image is already a file, just copy straight + * through. + * + * The file is allocated with vips_image_new_temp_file(). + * The file is automatically deleted when @out is closed. + * + * See also: vips_copy(), vips_image_new_temp_file(). + * + * Returns: 0 on success, -1 on error + */ +int +vips_copy_file( VipsImage *in, VipsImage **out ) +{ + VipsImage *file; + + if( vips_image_isfile( in ) ) + return( vips_copy( in, out, NULL ) ); + + if( !(file = vips_image_new_temp_file( "%s.v" )) ) + return( -1 ); + if( vips_image_write( in, file ) || + vips_copy( file, out, NULL ) ) { + g_object_unref( file ); + return( -1 ); + } + g_object_unref( file ); + + return( 0 ); +} diff --git a/libvips/conversion/im_copy_file.c b/libvips/conversion/im_copy_file.c deleted file mode 100644 index 0bdf9953..00000000 --- a/libvips/conversion/im_copy_file.c +++ /dev/null @@ -1,90 +0,0 @@ -/* copy an image to a file and then copy that to the output ... a disc cache - * - * 16/10/09 - * - from im_system() - */ - -/* - - This file is part of VIPS. - - VIPS is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301 USA - - */ - -/* - - These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk - - */ - -#ifdef HAVE_CONFIG_H -#include -#endif /*HAVE_CONFIG_H*/ -#include - -#include -#include - -#ifdef HAVE_UNISTD_H -#include -#endif /*HAVE_UNISTD_H*/ -#include -#include -#include - -#include - -/** - * im_copy_file: - * @in: input image - * @out: output image - * - * Copy an image to a disc file, then copy again to output. If the image is - * already a disc file, just copy straight through. - * - * The disc file is allocated in the same way as im_system_image(). - * The file is automatically deleted when @out is closed. - * - * See also: im_copy(), im_system_image(). - * - * Returns: 0 on success, -1 on error - */ -int -im_copy_file( IMAGE *in, IMAGE *out ) -{ - if( !im_isfile( in ) ) { - IMAGE *disc; - - if( !(disc = im__open_temp( "%s.v" )) ) - return( -1 ); - if( im_add_close_callback( out, - (im_callback_fn) im_close, disc, NULL ) ) { - im_close( disc ); - return( -1 ); - } - - if( im_copy( in, disc ) || - im_copy( disc, out ) ) - return( -1 ); - } - else { - if( im_copy( in, out ) ) - return( -1 ); - } - - return( 0 ); -} diff --git a/libvips/deprecated/lazy.c b/libvips/deprecated/lazy.c index 69cab866..0980d169 100644 --- a/libvips/deprecated/lazy.c +++ b/libvips/deprecated/lazy.c @@ -144,7 +144,7 @@ lazy_real_image( Lazy *lazy ) !(vips_format_get_flags( lazy->format, lazy->filename ) & VIPS_FORMAT_PARTIAL) && VIPS_IMAGE_SIZEOF_IMAGE( lazy->image ) > disc_threshold() ) - if( !(real = vips_image_new_disc_temp( "%s.v" )) ) + if( !(real = vips_image_new_temp_file( "%s.v" )) ) return( NULL ); /* Otherwise, fall back to a "p". diff --git a/libvips/deprecated/vips7compat.c b/libvips/deprecated/vips7compat.c index 7c764c13..1e7569e4 100644 --- a/libvips/deprecated/vips7compat.c +++ b/libvips/deprecated/vips7compat.c @@ -3042,3 +3042,19 @@ vips__affine( VipsImage *in, VipsImage *out, VipsTransformation *trn ) return( im__affinei( in, out, vips_interpolate_bilinear_static(), trn ) ); } + +int +im_copy_file( IMAGE *in, IMAGE *out ) +{ + VipsImage *x; + + if( vips_copy_file( in, &x ) ) + return( -1 ); + if( im_copy( x, out ) ) { + g_object_unref( x ); + return( -1 ); + } + g_object_unref( x ); + + return( 0 ); +} diff --git a/libvips/foreign/foreign.c b/libvips/foreign/foreign.c index 22dd828d..b649defb 100644 --- a/libvips/foreign/foreign.c +++ b/libvips/foreign/foreign.c @@ -725,7 +725,7 @@ vips_foreign_load_temp( VipsForeignLoad *load ) printf( "vips_foreign_load_temp: disc temp\n" ); #endif /*DEBUG*/ - return( vips_image_new_disc_temp( "%s.v" ) ); + return( vips_image_new_temp_file( "%s.v" ) ); } #ifdef DEBUG diff --git a/libvips/include/vips/conversion.h b/libvips/include/vips/conversion.h index 1369f447..cb8b6419 100644 --- a/libvips/include/vips/conversion.h +++ b/libvips/include/vips/conversion.h @@ -168,6 +168,7 @@ int vips_sequential( VipsImage *in, VipsImage **out, ... ) __attribute__((sentinel)); int vips_cache( VipsImage *in, VipsImage **out, ... ) __attribute__((sentinel)); +int vips_copy_file( VipsImage *in, VipsImage **out ); int vips_embed( VipsImage *in, VipsImage **out, int x, int y, int width, int height, ... ) @@ -248,8 +249,6 @@ int vips_flatten( VipsImage *in, VipsImage **out, ... ) -int im_copy_file( VipsImage *in, VipsImage *out ); - int im_scale( VipsImage *in, VipsImage *out ); int im_msb( VipsImage *in, VipsImage *out ); int im_msb_band( VipsImage *in, VipsImage *out, int band ); diff --git a/libvips/include/vips/image.h b/libvips/include/vips/image.h index 8fa95637..81dc3cd5 100644 --- a/libvips/include/vips/image.h +++ b/libvips/include/vips/image.h @@ -509,7 +509,7 @@ VipsImage *vips_image_new_from_memory( void *buffer, VipsImage *vips_image_new_array( int xsize, int ysize ); void vips_image_set_delete_on_close( VipsImage *image, gboolean delete_on_close ); -VipsImage *vips_image_new_disc_temp( const char *format ); +VipsImage *vips_image_new_temp_file( const char *format ); int vips_image_write( VipsImage *image, VipsImage *out ); int vips_image_write_to_file( VipsImage *image, const char *filename ); diff --git a/libvips/include/vips/vips7compat.h b/libvips/include/vips/vips7compat.h index ec382b4e..4235d263 100644 --- a/libvips/include/vips/vips7compat.h +++ b/libvips/include/vips/vips7compat.h @@ -214,7 +214,7 @@ extern "C" { #define im_cp_desc_array vips_image_copy_fields_array #define im_image vips_image_new_from_memory #define im_binfile vips_image_new_from_file_raw -#define im__open_temp vips_image_new_disc_temp +#define im__open_temp vips_image_new_temp_file #define im__test_kill( I ) (vips_image_get_kill( I )) #define im__start_eval( I ) (vips_image_preeval( I ), vips_image_get_kill( I )) #define im__handle_eval( I, W, H ) \ @@ -688,6 +688,7 @@ int im_copy_set_meta( VipsImage *in, VipsImage *out, int im_copy_morph( VipsImage *in, VipsImage *out, int bands, VipsBandFormat format, VipsCoding coding ); int im_copy_swap( VipsImage *in, VipsImage *out ); +int im_copy_file( VipsImage *in, VipsImage *out ); int im_copy_native( VipsImage *in, VipsImage *out, gboolean is_msb_first ); int im_embed( VipsImage *in, VipsImage *out, int type, int x, int y, int width, int height ); diff --git a/libvips/iofuncs/image.c b/libvips/iofuncs/image.c index 4f9d4f79..2f06db84 100644 --- a/libvips/iofuncs/image.c +++ b/libvips/iofuncs/image.c @@ -1410,7 +1410,7 @@ vips_image_new( void ) * API and control the loading process yourself. See * #VipsForeign. * - * See im_system_image() for an explanation of how VIPS selects a + * See vips_image_new_temp_file() for an explanation of how VIPS selects a * location for the temporary file. * * The disc threshold can be set with the "--vips-disc-threshold" @@ -1662,7 +1662,7 @@ vips_image_new_array( int xsize, int ysize ) * * This function is clearly extremely dangerous, use with great caution. * - * See also: vips__temp_name(), vips_image_new_disc_temp(). + * See also: vips__temp_name(), vips_image_new_temp_file(). */ void vips_image_set_delete_on_close( VipsImage *image, gboolean delete_on_close ) @@ -1677,7 +1677,7 @@ vips_image_set_delete_on_close( VipsImage *image, gboolean delete_on_close ) } /** - * vips_image_new_disc_temp: + * vips_image_new_temp_file: * @format: format of file * * Make a "w" disc #VipsImage which will be automatically unlinked when it is @@ -1690,7 +1690,7 @@ vips_image_set_delete_on_close( VipsImage *image, gboolean delete_on_close ) * Returns: the new #VipsImage, or %NULL on error. */ VipsImage * -vips_image_new_disc_temp( const char *format ) +vips_image_new_temp_file( const char *format ) { char *name; VipsImage *image;