예제 #1
0
static void
vips_buffer_free( VipsBuffer *buffer )
{
	vips_tracked_free( buffer->buf );
	buffer->bsize = 0;
	g_free( buffer );

#ifdef DEBUG
	g_mutex_lock( vips__global_lock );

	g_assert( g_slist_find( vips__buffer_all, buffer ) );
	vips__buffer_all = g_slist_remove( vips__buffer_all, buffer );

	g_mutex_unlock( vips__global_lock );
#endif /*DEBUG*/
}
예제 #2
0
파일: buffer.c 프로젝트: achanda101/libvips
void
vips_buffer_unref( VipsBuffer *buffer )
{
#ifdef DEBUG
	printf( "** vips_buffer_unref: left = %d, top = %d, "
		"width = %d, height = %d (%p)\n",
		buffer->area.left, buffer->area.top, 
		buffer->area.width, buffer->area.height, 
		buffer );
#endif /*DEBUG*/

	g_assert( buffer->ref_count > 0 );

	buffer->ref_count -= 1;

	if( buffer->ref_count == 0 ) {
#ifdef DEBUG
		if( !buffer->done )
			printf( "vips_buffer_unref: buffer was not done\n" );
#endif /*DEBUG*/

		vips_buffer_undone( buffer );

		buffer->im = NULL;
		vips_tracked_free( buffer->buf );
		buffer->bsize = 0;
		g_free( buffer );

#ifdef DEBUG
		g_mutex_lock( vips__global_lock );
		g_assert( g_slist_find( vips__buffers_all, buffer ) );
		vips__buffers_all = g_slist_remove( vips__buffers_all, buffer );
		printf( "%d buffers in vips\n", 
			g_slist_length( vips__buffers_all ) );
		g_mutex_unlock( vips__global_lock );
#endif /*DEBUG*/
	}
}
예제 #3
0
파일: buffer.c 프로젝트: achanda101/libvips
static int
buffer_move( VipsBuffer *buffer, VipsRect *area )
{
	VipsImage *im = buffer->im;
	size_t new_bsize;

	g_assert( buffer->ref_count == 1 );

	buffer->area = *area;
	vips_buffer_undone( buffer );
	g_assert( !buffer->done );

	new_bsize = (size_t) VIPS_IMAGE_SIZEOF_PEL( im ) * 
		area->width * area->height;
	if( buffer->bsize < new_bsize ) {
		buffer->bsize = new_bsize;
		vips_tracked_free( buffer->buf );
		if( !(buffer->buf = vips_tracked_malloc( buffer->bsize )) ) 
			return( -1 );
	}

	return( 0 );
}