remove setbuf
... and start on sink*().
This commit is contained in:
parent
7257c5426a
commit
be134f4b82
@ -17,7 +17,6 @@ libiofuncs_la_SOURCES = \
|
|||||||
im_histlin.c \
|
im_histlin.c \
|
||||||
im_mapfile.c \
|
im_mapfile.c \
|
||||||
im_prepare.c \
|
im_prepare.c \
|
||||||
im_setbuf.c \
|
|
||||||
im_setupout.c \
|
im_setupout.c \
|
||||||
im_guess_prefix.c \
|
im_guess_prefix.c \
|
||||||
sinkmemory.c \
|
sinkmemory.c \
|
||||||
|
@ -1,13 +1,4 @@
|
|||||||
/* @(#) Function which copies IMAGE descriptor image2 to image1;
|
/* copy iamge descriptors
|
||||||
* @(#) data, fd and filename are not copied
|
|
||||||
* @(#) used to make programs simpler by copying most parameters
|
|
||||||
* @(#)
|
|
||||||
* @(#) int
|
|
||||||
* @(#) im_cp_desc( image1, image2 )
|
|
||||||
* @(#) IMAGE *image1, *image2;
|
|
||||||
* @(#)
|
|
||||||
* @(#) Returns 0 on success or -1 on fail.
|
|
||||||
* @(#)
|
|
||||||
*
|
*
|
||||||
* Copyright: Nicos Dessipris
|
* Copyright: Nicos Dessipris
|
||||||
* Written on: 09/02/1990
|
* Written on: 09/02/1990
|
||||||
|
@ -143,6 +143,14 @@ im__link_mapp( IMAGE *im, VSListMap2Fn fn, int *serial, void *a, void *b )
|
|||||||
(VSListMap4Fn) im__link_mapp, fn, serial, a, b ) );
|
(VSListMap4Fn) im__link_mapp, fn, serial, a, b ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void *
|
||||||
|
im__link_map_cb( VipsImage *image, GSList **images )
|
||||||
|
{
|
||||||
|
*images = g_slist_prepend( *images, image );
|
||||||
|
|
||||||
|
return( NULL );
|
||||||
|
}
|
||||||
|
|
||||||
/* Apply a function to an image and all downstream images, direct and indirect.
|
/* Apply a function to an image and all downstream images, direct and indirect.
|
||||||
*/
|
*/
|
||||||
void *
|
void *
|
||||||
@ -150,21 +158,29 @@ im__link_map( IMAGE *im, VSListMap2Fn fn, void *a, void *b )
|
|||||||
{
|
{
|
||||||
static int serial = 0;
|
static int serial = 0;
|
||||||
|
|
||||||
/* Invalidate callbacks might do anything, including removing images
|
GSList *images;
|
||||||
|
GSList *p;
|
||||||
|
void *result;
|
||||||
|
|
||||||
|
/* The function might do anything, including removing images
|
||||||
* or invalidating other images, so we can't trigger them from within
|
* or invalidating other images, so we can't trigger them from within
|
||||||
* the image loop. Instead we collect a list of image to invalidate
|
* the image loop. Instead we collect a list of images, ref them,
|
||||||
* and trigger them all in one go, checking that they are not
|
* run the functions, and unref.
|
||||||
* invalidated.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* im__link_mapp() needs to make the list, ref all the images, call
|
|
||||||
* the callbacks, then unref and free the list.
|
|
||||||
*/
|
|
||||||
|
|
||||||
FIXME
|
|
||||||
|
|
||||||
serial += 1;
|
serial += 1;
|
||||||
return( im__link_mapp( im, fn, &serial, a, b ) );
|
images = NULL;
|
||||||
|
im__link_mapp( im,
|
||||||
|
(VSListMap2Fn) im__link_map_cb, &serial, &images, NULL );
|
||||||
|
|
||||||
|
for( p = images; p; p = p->next )
|
||||||
|
g_object_ref( p->data );
|
||||||
|
result = im_slist_map2( images, fn, a, b );
|
||||||
|
for( p = images; p; p = p->next )
|
||||||
|
g_object_unref( p->data );
|
||||||
|
g_slist_free( images );
|
||||||
|
|
||||||
|
return( result );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Given two im_demand_type, return the most restrictive.
|
/* Given two im_demand_type, return the most restrictive.
|
||||||
|
@ -1,74 +0,0 @@
|
|||||||
/* @(#) im_setbuf: initialise a buffer IMAGE
|
|
||||||
* @(#) Initialise the data pointer of the image descriptor to an arbitrary
|
|
||||||
* @(#) non NULL value and copies the file_name onto the filename of the
|
|
||||||
* @(#) image structure.
|
|
||||||
* @(#)
|
|
||||||
* @(#) Right call:
|
|
||||||
* @(#) IMAGE *im_setbuf(file_name)
|
|
||||||
* @(#) char *file_name;
|
|
||||||
* @(#)
|
|
||||||
*
|
|
||||||
* Copyright: Nicos Dessipris
|
|
||||||
* Written on: 13/02/1990
|
|
||||||
* Modified on : 25/04/1990 KM, 20/03/1991 ND
|
|
||||||
* 16/4/93 J.Cupitt
|
|
||||||
* - support for type field added
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include <config.h>
|
|
||||||
#endif /*HAVE_CONFIG_H*/
|
|
||||||
#include <vips/intl.h>
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include <vips/vips.h>
|
|
||||||
#include <vips/internal.h>
|
|
||||||
|
|
||||||
#ifdef WITH_DMALLOC
|
|
||||||
#include <dmalloc.h>
|
|
||||||
#endif /*WITH_DMALLOC*/
|
|
||||||
|
|
||||||
IMAGE *
|
|
||||||
im_setbuf( const char *file_name )
|
|
||||||
{
|
|
||||||
IMAGE *im;
|
|
||||||
|
|
||||||
if( !(im = im_init( file_name )) )
|
|
||||||
return( NULL );
|
|
||||||
im->dtype = IM_SETBUF;
|
|
||||||
|
|
||||||
/* Set demand style. Allow the most permissive sort.
|
|
||||||
*/
|
|
||||||
im->dhint = IM_ANY;
|
|
||||||
|
|
||||||
return( im );
|
|
||||||
}
|
|
@ -91,7 +91,7 @@ im_setupout( IMAGE *im )
|
|||||||
g_assert( !im_image_sanity( im ) );
|
g_assert( !im_image_sanity( im ) );
|
||||||
|
|
||||||
if( im->Xsize <= 0 || im->Ysize <= 0 || im->Bands <= 0 ) {
|
if( im->Xsize <= 0 || im->Ysize <= 0 || im->Bands <= 0 ) {
|
||||||
im_error( "im_setupout",
|
vips_error( "im_setupout",
|
||||||
"%s", _( "bad dimensions" ) );
|
"%s", _( "bad dimensions" ) );
|
||||||
return( -1 );
|
return( -1 );
|
||||||
}
|
}
|
||||||
@ -101,7 +101,7 @@ im_setupout( IMAGE *im )
|
|||||||
*/
|
*/
|
||||||
im->Bbits = im_bits_of_fmt( im->BandFmt );
|
im->Bbits = im_bits_of_fmt( im->BandFmt );
|
||||||
|
|
||||||
if( im->dtype == IM_PARTIAL ) {
|
if( im->dtype == VIPS_IMAGE_PARTIAL ) {
|
||||||
/* Make it into a im_setbuf() image.
|
/* Make it into a im_setbuf() image.
|
||||||
*/
|
*/
|
||||||
#ifdef DEBUG_IO
|
#ifdef DEBUG_IO
|
||||||
@ -109,33 +109,33 @@ im_setupout( IMAGE *im )
|
|||||||
im->filename );
|
im->filename );
|
||||||
#endif /*DEBUG_IO*/
|
#endif /*DEBUG_IO*/
|
||||||
|
|
||||||
im->dtype = IM_SETBUF;
|
im->dtype = VIPS_IMAGE_SETBUF;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch( im->dtype ) {
|
switch( im->dtype ) {
|
||||||
case IM_MMAPINRW:
|
case VIPS_IMAGE_MMAPINRW:
|
||||||
case IM_SETBUF_FOREIGN:
|
case VIPS_IMAGE_SETBUF_FOREIGN:
|
||||||
/* No action.
|
/* No action.
|
||||||
*/
|
*/
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IM_SETBUF:
|
case VIPS_IMAGE_SETBUF:
|
||||||
/* Allocate memory.
|
/* Allocate memory.
|
||||||
*/
|
*/
|
||||||
if( im->data ) {
|
if( im->data ) {
|
||||||
/* Sanity failure!
|
/* Sanity failure!
|
||||||
*/
|
*/
|
||||||
im_error( "im_setupout",
|
vips_error( "im_setupout",
|
||||||
"%s", _( "called twice!" ) );
|
"%s", _( "called twice!" ) );
|
||||||
return( -1 );
|
return( -1 );
|
||||||
}
|
}
|
||||||
if( !(im->data = im_malloc( NULL,
|
if( !(im->data = im_malloc( NULL,
|
||||||
IM_IMAGE_SIZEOF_LINE( im ) * im->Ysize )) )
|
VIPS_IMAGE_SIZEOF_LINE( im ) * im->Ysize )) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IM_OPENOUT:
|
case VIPS_IMAGE_OPENOUT:
|
||||||
{
|
{
|
||||||
/* Don't use im->sizeof_header here, but we know we're
|
/* Don't use im->sizeof_header here, but we know we're
|
||||||
* writing a VIPS image anyway.
|
* writing a VIPS image anyway.
|
||||||
@ -143,7 +143,7 @@ im_setupout( IMAGE *im )
|
|||||||
unsigned char header[IM_SIZEOF_HEADER];
|
unsigned char header[IM_SIZEOF_HEADER];
|
||||||
|
|
||||||
if( (im->fd = open( im->filename, MODE, 0666 )) < 0 ) {
|
if( (im->fd = open( im->filename, MODE, 0666 )) < 0 ) {
|
||||||
im_error( "im_setupout",
|
vips_error( "im_setupout",
|
||||||
_( "unable to write to \"%s\"" ),
|
_( "unable to write to \"%s\"" ),
|
||||||
im->filename );
|
im->filename );
|
||||||
return( -1 );
|
return( -1 );
|
||||||
@ -156,7 +156,7 @@ im_setupout( IMAGE *im )
|
|||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
im_error( "im_setupout",
|
vips_error( "im_setupout",
|
||||||
"%s", _( "bad image descriptor" ) );
|
"%s", _( "bad image descriptor" ) );
|
||||||
return( -1 );
|
return( -1 );
|
||||||
}
|
}
|
||||||
|
@ -75,7 +75,7 @@ typedef struct _Sink {
|
|||||||
static void
|
static void
|
||||||
sink_free( Sink *sink )
|
sink_free( Sink *sink )
|
||||||
{
|
{
|
||||||
IM_FREEF( im_region_free, sink->all );
|
VIPS_FREEF( im_region_free, sink->all );
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -208,7 +208,7 @@ tile_free( Tile *tile )
|
|||||||
{
|
{
|
||||||
VIPS_DEBUG_MSG_AMBER( "tile_free\n" );
|
VIPS_DEBUG_MSG_AMBER( "tile_free\n" );
|
||||||
|
|
||||||
IM_FREEF( im_region_free, tile->region );
|
VIPS_FREEF( im_region_free, tile->region );
|
||||||
im_free( tile );
|
im_free( tile );
|
||||||
|
|
||||||
return( NULL );
|
return( NULL );
|
||||||
@ -236,10 +236,10 @@ render_free( Render *render )
|
|||||||
g_mutex_free( render->lock );
|
g_mutex_free( render->lock );
|
||||||
|
|
||||||
im_slist_map2( render->all, (VSListMap2Fn) tile_free, NULL, NULL );
|
im_slist_map2( render->all, (VSListMap2Fn) tile_free, NULL, NULL );
|
||||||
IM_FREEF( g_slist_free, render->all );
|
VIPS_FREEF( g_slist_free, render->all );
|
||||||
render->ntiles = 0;
|
render->ntiles = 0;
|
||||||
IM_FREEF( g_slist_free, render->dirty );
|
VIPS_FREEF( g_slist_free, render->dirty );
|
||||||
IM_FREEF( g_hash_table_destroy, render->tiles );
|
VIPS_FREEF( g_hash_table_destroy, render->tiles );
|
||||||
|
|
||||||
im_free( render );
|
im_free( render );
|
||||||
|
|
||||||
@ -536,7 +536,7 @@ render_thread_create( void )
|
|||||||
render_thread_main, NULL,
|
render_thread_main, NULL,
|
||||||
IM__DEFAULT_STACK_SIZE, TRUE, FALSE,
|
IM__DEFAULT_STACK_SIZE, TRUE, FALSE,
|
||||||
G_THREAD_PRIORITY_NORMAL, NULL )) ) {
|
G_THREAD_PRIORITY_NORMAL, NULL )) ) {
|
||||||
im_error( "im_render",
|
vips_error( "im_render",
|
||||||
"%s", _( "unable to create thread" ) );
|
"%s", _( "unable to create thread" ) );
|
||||||
return( -1 );
|
return( -1 );
|
||||||
}
|
}
|
||||||
@ -594,7 +594,7 @@ render_new( VipsImage *in, VipsImage *out, VipsImage *mask,
|
|||||||
/* Don't use auto-free for render, we do our own lifetime management
|
/* Don't use auto-free for render, we do our own lifetime management
|
||||||
* with _ref() and _unref().
|
* with _ref() and _unref().
|
||||||
*/
|
*/
|
||||||
if( !(render = IM_NEW( NULL, Render )) )
|
if( !(render = VIPS_NEW( NULL, Render )) )
|
||||||
return( NULL );
|
return( NULL );
|
||||||
|
|
||||||
render->ref_count = 1;
|
render->ref_count = 1;
|
||||||
@ -622,19 +622,12 @@ render_new( VipsImage *in, VipsImage *out, VipsImage *mask,
|
|||||||
|
|
||||||
/* Both out and mask must close before we can free the render.
|
/* Both out and mask must close before we can free the render.
|
||||||
*/
|
*/
|
||||||
|
g_signal_connect( out, "close",
|
||||||
if( im_add_close_callback( out,
|
G_CALLBACK( render_close_cb ), render );
|
||||||
(im_callback_fn) render_close_cb, render, NULL ) ) {
|
|
||||||
(void) render_unref( render );
|
|
||||||
return( NULL );
|
|
||||||
}
|
|
||||||
|
|
||||||
if( mask ) {
|
if( mask ) {
|
||||||
if( im_add_close_callback( mask,
|
g_signal_connect( mask, "close",
|
||||||
(im_callback_fn) render_close_cb, render, NULL ) ) {
|
G_CALLBACK( render_close_cb ), render );
|
||||||
(void) render_unref( render );
|
|
||||||
return( NULL );
|
|
||||||
}
|
|
||||||
render_ref( render );
|
render_ref( render );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -659,7 +652,7 @@ tile_new( Render *render )
|
|||||||
/* Don't use auto-free: we need to make sure we free the tile after
|
/* Don't use auto-free: we need to make sure we free the tile after
|
||||||
* Render.
|
* Render.
|
||||||
*/
|
*/
|
||||||
if( !(tile = IM_NEW( NULL, Tile )) )
|
if( !(tile = VIPS_NEW( NULL, Tile )) )
|
||||||
return( NULL );
|
return( NULL );
|
||||||
|
|
||||||
tile->render = render;
|
tile->render = render;
|
||||||
@ -884,7 +877,7 @@ tile_copy( Tile *tile, REGION *to )
|
|||||||
* zero.
|
* zero.
|
||||||
*/
|
*/
|
||||||
if( tile->painted && !tile->region->invalid ) {
|
if( tile->painted && !tile->region->invalid ) {
|
||||||
int len = IM_IMAGE_SIZEOF_PEL( to->im ) * ovlap.width;
|
int len = VIPS_IMAGE_SIZEOF_PEL( to->im ) * ovlap.width;
|
||||||
|
|
||||||
VIPS_DEBUG_MSG( "tile_copy: "
|
VIPS_DEBUG_MSG( "tile_copy: "
|
||||||
"copying calculated pixels for %p %dx%d\n",
|
"copying calculated pixels for %p %dx%d\n",
|
||||||
@ -1087,24 +1080,25 @@ vips_sink_screen( VipsImage *in, VipsImage *out, VipsImage *mask,
|
|||||||
|
|
||||||
if( tile_width <= 0 || tile_height <= 0 ||
|
if( tile_width <= 0 || tile_height <= 0 ||
|
||||||
max_tiles < -1 ) {
|
max_tiles < -1 ) {
|
||||||
im_error( "vips_sink_screen", "%s", _( "bad parameters" ) );
|
vips_error( "vips_sink_screen", "%s", _( "bad parameters" ) );
|
||||||
return( -1 );
|
return( -1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( im_piocheck( in, out ) ||
|
if( im_piocheck( in, out ) ||
|
||||||
im_cp_desc( out, in ) ||
|
im_cp_desc( out, in ) ||
|
||||||
im_demand_hint( out, IM_SMALLTILE, in, NULL ) )
|
im_demand_hint( out, VIPS_DEMAND_STYLE_SMALLTILE, in, NULL ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
if( mask ) {
|
if( mask ) {
|
||||||
if( im_poutcheck( mask ) ||
|
if( im_poutcheck( mask ) ||
|
||||||
im_cp_desc( mask, in ) ||
|
im_cp_desc( mask, in ) ||
|
||||||
im_demand_hint( mask, IM_SMALLTILE, in, NULL ) )
|
im_demand_hint( mask,
|
||||||
|
VIPS_DEMAND_STYLE_SMALLTILE, in, NULL ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
|
|
||||||
mask->Bands = 1;
|
mask->Bands = 1;
|
||||||
mask->BandFmt = IM_BANDFMT_UCHAR;
|
mask->BandFmt = VIPS_FORMAT_UCHAR;
|
||||||
mask->Type = IM_TYPE_B_W;
|
mask->Type = VIPS_INTERPRETATION_B_W;
|
||||||
mask->Coding = IM_CODING_NONE;
|
mask->Coding = VIPS_CODING_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !(render = render_new( in, out, mask,
|
if( !(render = render_new( in, out, mask,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user