remove @fail machinery from openslideload
since openslide load errors are fatal ... see
bb0a6643f9 (commitcomment-19838911)
This commit is contained in:
parent
92c549e995
commit
e213a9ded6
@ -8,7 +8,7 @@
|
|||||||
- added vips_thumbnail() / vips_thumbnail_buffer()
|
- added vips_thumbnail() / vips_thumbnail_buffer()
|
||||||
- better >4gb detect for zip dzsave output [Felix Bünemann]
|
- better >4gb detect for zip dzsave output [Felix Bünemann]
|
||||||
- all loaders have a @fail option, meaning fail on first warning, though it
|
- all loaders have a @fail option, meaning fail on first warning, though it
|
||||||
only does anything for jpg, csv, openslide
|
only does anything for jpg and csv
|
||||||
- add vips_image_get_fields() to help bindings
|
- add vips_image_get_fields() to help bindings
|
||||||
|
|
||||||
11/11/16 started 8.4.4
|
11/11/16 started 8.4.4
|
||||||
|
@ -47,8 +47,6 @@
|
|||||||
* - do argb -> rgba for associated as well
|
* - do argb -> rgba for associated as well
|
||||||
* 27/1/15
|
* 27/1/15
|
||||||
* - unpremultiplication speedups for fully opaque/transparent pixels
|
* - unpremultiplication speedups for fully opaque/transparent pixels
|
||||||
* 11/7/16
|
|
||||||
* - just warn on tile read error
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -115,10 +113,6 @@ typedef struct {
|
|||||||
*/
|
*/
|
||||||
int tile_width;
|
int tile_width;
|
||||||
int tile_height;
|
int tile_height;
|
||||||
|
|
||||||
/* Quit on warning.
|
|
||||||
*/
|
|
||||||
gboolean fail;
|
|
||||||
} ReadSlide;
|
} ReadSlide;
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -227,7 +221,7 @@ get_bounds( openslide_t *osr, VipsRect *rect )
|
|||||||
|
|
||||||
static ReadSlide *
|
static ReadSlide *
|
||||||
readslide_new( const char *filename, VipsImage *out,
|
readslide_new( const char *filename, VipsImage *out,
|
||||||
int level, gboolean autocrop, const char *associated, gboolean fail )
|
int level, gboolean autocrop, const char *associated )
|
||||||
{
|
{
|
||||||
ReadSlide *rslide;
|
ReadSlide *rslide;
|
||||||
int64_t w, h;
|
int64_t w, h;
|
||||||
@ -395,9 +389,9 @@ readslide_new( const char *filename, VipsImage *out,
|
|||||||
|
|
||||||
int
|
int
|
||||||
vips__openslide_read_header( const char *filename, VipsImage *out,
|
vips__openslide_read_header( const char *filename, VipsImage *out,
|
||||||
int level, gboolean autocrop, char *associated, gboolean fail )
|
int level, gboolean autocrop, char *associated )
|
||||||
{
|
{
|
||||||
if( !readslide_new( filename, out, level, autocrop, associated, fail ) )
|
if( !readslide_new( filename, out, level, autocrop, associated ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
|
|
||||||
return( 0 );
|
return( 0 );
|
||||||
@ -477,14 +471,17 @@ vips__openslide_generate( VipsRegion *out,
|
|||||||
rslide->level,
|
rslide->level,
|
||||||
r->width, r->height );
|
r->width, r->height );
|
||||||
|
|
||||||
/* Only warn on error: we don't want to make the whole image unreadable
|
/* openslide errors are terminal. To support
|
||||||
* because of one broken tile.
|
* @fail we'd have to close the openslide_t and reopen, perhaps
|
||||||
|
* somehow marking this tile as unreadable.
|
||||||
|
*
|
||||||
|
* See
|
||||||
|
* https://github.com/jcupitt/libvips/commit/bb0a6643f94e69294e36d2b253f9bdd60c8c40ed#commitcomment-19838911
|
||||||
*/
|
*/
|
||||||
error = openslide_get_error( rslide->osr );
|
error = openslide_get_error( rslide->osr );
|
||||||
if( error ) {
|
if( error ) {
|
||||||
vips_warn( "openslide2vips",
|
vips_error( "openslide2vips",
|
||||||
_( "reading region: %s" ), error );
|
_( "reading region: %s" ), error );
|
||||||
if( rslide->fail )
|
|
||||||
return( -1 );
|
return( -1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -497,7 +494,7 @@ vips__openslide_generate( VipsRegion *out,
|
|||||||
|
|
||||||
int
|
int
|
||||||
vips__openslide_read( const char *filename, VipsImage *out,
|
vips__openslide_read( const char *filename, VipsImage *out,
|
||||||
int level, gboolean autocrop, gboolean fail )
|
int level, gboolean autocrop )
|
||||||
{
|
{
|
||||||
ReadSlide *rslide;
|
ReadSlide *rslide;
|
||||||
VipsImage *raw;
|
VipsImage *raw;
|
||||||
@ -510,7 +507,7 @@ vips__openslide_read( const char *filename, VipsImage *out,
|
|||||||
vips_object_local( out, raw );
|
vips_object_local( out, raw );
|
||||||
|
|
||||||
if( !(rslide = readslide_new( filename, raw,
|
if( !(rslide = readslide_new( filename, raw,
|
||||||
level, autocrop, NULL, fail )) )
|
level, autocrop, NULL )) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
|
|
||||||
if( vips_image_generate( raw,
|
if( vips_image_generate( raw,
|
||||||
@ -539,7 +536,7 @@ vips__openslide_read( const char *filename, VipsImage *out,
|
|||||||
|
|
||||||
int
|
int
|
||||||
vips__openslide_read_associated( const char *filename, VipsImage *out,
|
vips__openslide_read_associated( const char *filename, VipsImage *out,
|
||||||
const char *associated, gboolean fail )
|
const char *associated )
|
||||||
{
|
{
|
||||||
ReadSlide *rslide;
|
ReadSlide *rslide;
|
||||||
VipsImage *raw;
|
VipsImage *raw;
|
||||||
@ -554,8 +551,7 @@ vips__openslide_read_associated( const char *filename, VipsImage *out,
|
|||||||
raw = vips_image_new_memory();
|
raw = vips_image_new_memory();
|
||||||
vips_object_local( out, raw );
|
vips_object_local( out, raw );
|
||||||
|
|
||||||
if( !(rslide = readslide_new( filename, raw,
|
if( !(rslide = readslide_new( filename, raw, 0, FALSE, associated )) ||
|
||||||
0, FALSE, associated, fail )) ||
|
|
||||||
vips_image_write_prepare( raw ) )
|
vips_image_write_prepare( raw ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
buf = (uint32_t *) VIPS_IMAGE_ADDR( raw, 0, 0 );
|
buf = (uint32_t *) VIPS_IMAGE_ADDR( raw, 0, 0 );
|
||||||
|
@ -114,7 +114,7 @@ vips_foreign_load_openslide_header( VipsForeignLoad *load )
|
|||||||
|
|
||||||
if( vips__openslide_read_header( openslide->filename, load->out,
|
if( vips__openslide_read_header( openslide->filename, load->out,
|
||||||
openslide->level, openslide->autocrop,
|
openslide->level, openslide->autocrop,
|
||||||
openslide->associated, load->fail ) )
|
openslide->associated ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
|
|
||||||
VIPS_SETSTR( load->out->filename, openslide->filename );
|
VIPS_SETSTR( load->out->filename, openslide->filename );
|
||||||
@ -129,13 +129,12 @@ vips_foreign_load_openslide_load( VipsForeignLoad *load )
|
|||||||
|
|
||||||
if( !openslide->associated ) {
|
if( !openslide->associated ) {
|
||||||
if( vips__openslide_read( openslide->filename, load->real,
|
if( vips__openslide_read( openslide->filename, load->real,
|
||||||
openslide->level, openslide->autocrop, load->fail ) )
|
openslide->level, openslide->autocrop ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if( vips__openslide_read_associated(
|
if( vips__openslide_read_associated( openslide->filename,
|
||||||
openslide->filename, load->real,
|
load->real, openslide->associated ) )
|
||||||
openslide->associated, load->fail ) )
|
|
||||||
return( -1 );
|
return( -1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -231,7 +230,6 @@ vips_foreign_load_openslide_init( VipsForeignLoadOpenslide *openslide )
|
|||||||
* * @level: load this level
|
* * @level: load this level
|
||||||
* * @associated: load this associated image
|
* * @associated: load this associated image
|
||||||
* * @autocrop: crop to image bounds
|
* * @autocrop: crop to image bounds
|
||||||
* * @fail: %gboolean, fail on warnings
|
|
||||||
*
|
*
|
||||||
* Read a virtual slide supported by the OpenSlide library into a VIPS image.
|
* Read a virtual slide supported by the OpenSlide library into a VIPS image.
|
||||||
* OpenSlide supports images in Aperio, Hamamatsu, MIRAX, Sakura, Trestle,
|
* OpenSlide supports images in Aperio, Hamamatsu, MIRAX, Sakura, Trestle,
|
||||||
@ -251,8 +249,6 @@ vips_foreign_load_openslide_init( VipsForeignLoadOpenslide *openslide )
|
|||||||
*
|
*
|
||||||
* The output of this operator is always RGBA.
|
* The output of this operator is always RGBA.
|
||||||
*
|
*
|
||||||
* Setting @fail to %TRUE makes the reader fail on any warnings.
|
|
||||||
*
|
|
||||||
* See also: vips_image_new_from_file().
|
* See also: vips_image_new_from_file().
|
||||||
*
|
*
|
||||||
* Returns: 0 on success, -1 on error.
|
* Returns: 0 on success, -1 on error.
|
||||||
|
@ -217,11 +217,11 @@ int vips__webp_write_buffer( VipsImage *out, void **buf, size_t *len,
|
|||||||
|
|
||||||
int vips__openslide_isslide( const char *filename );
|
int vips__openslide_isslide( const char *filename );
|
||||||
int vips__openslide_read_header( const char *filename, VipsImage *out,
|
int vips__openslide_read_header( const char *filename, VipsImage *out,
|
||||||
int level, gboolean autocrop, char *associated, gboolean fail );
|
int level, gboolean autocrop, char *associated );
|
||||||
int vips__openslide_read( const char *filename, VipsImage *out,
|
int vips__openslide_read( const char *filename, VipsImage *out,
|
||||||
int level, gboolean autocrop, gboolean fail );
|
int level, gboolean autocrop );
|
||||||
int vips__openslide_read_associated( const char *filename, VipsImage *out,
|
int vips__openslide_read_associated( const char *filename, VipsImage *out,
|
||||||
const char *associated, gboolean fail );
|
const char *associated );
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user