fix read of plane-separate, large-strip tiff
TIFFReadScanline() is too fiddly to use on plane-separate, large-strip images ... ban it! see https://github.com/jcupitt/libvips/issues/855
This commit is contained in:
parent
24c07cfde2
commit
94daa18884
@ -1,6 +1,7 @@
|
|||||||
5/1/18 started 8.6.2
|
5/1/18 started 8.6.2
|
||||||
- vips_sink_screen() keeps a ref to the input image ... stops a rare race
|
- vips_sink_screen() keeps a ref to the input image ... stops a rare race
|
||||||
- fix a minor accidental ABI break in 8.6.0 -> 8.6.1 [remicollet]
|
- fix a minor accidental ABI break in 8.6.0 -> 8.6.1 [remicollet]
|
||||||
|
- fix read of plane-separate TIFFs with large strips [remicollet]
|
||||||
|
|
||||||
10/12/17 started 8.6.1
|
10/12/17 started 8.6.1
|
||||||
- fix mmap window new/free cycling
|
- fix mmap window new/free cycling
|
||||||
|
@ -1435,7 +1435,8 @@ rtiff_fill_region_aligned( VipsRegion *out, void *seq, void *a, void *b )
|
|||||||
/* Loop over the output region painting in tiles from the file.
|
/* Loop over the output region painting in tiles from the file.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
rtiff_fill_region( VipsRegion *out, void *seq, void *a, void *b, gboolean *stop )
|
rtiff_fill_region( VipsRegion *out,
|
||||||
|
void *seq, void *a, void *b, gboolean *stop )
|
||||||
{
|
{
|
||||||
tdata_t *buf = (tdata_t *) seq;
|
tdata_t *buf = (tdata_t *) seq;
|
||||||
Rtiff *rtiff = (Rtiff *) a;
|
Rtiff *rtiff = (Rtiff *) a;
|
||||||
@ -2107,8 +2108,12 @@ rtiff_header_read( Rtiff *rtiff, RtiffHeader *header )
|
|||||||
*
|
*
|
||||||
* If this image has a strip size of over 128 lines, fall back
|
* If this image has a strip size of over 128 lines, fall back
|
||||||
* to TIFFReadScanline(), otherwise use TIFFReadEncodedStrip().
|
* to TIFFReadScanline(), otherwise use TIFFReadEncodedStrip().
|
||||||
|
*
|
||||||
|
* Don't do this in plane-separate mode. TIFFReadScanline() is
|
||||||
|
* too fiddly to use in this case.
|
||||||
*/
|
*/
|
||||||
if( header->rows_per_strip > 128 ) {
|
if( header->rows_per_strip > 128 &&
|
||||||
|
!header->separate ) {
|
||||||
header->rows_per_strip = 1;
|
header->rows_per_strip = 1;
|
||||||
header->strip_size = TIFFScanlineSize( rtiff->tiff );
|
header->strip_size = TIFFScanlineSize( rtiff->tiff );
|
||||||
header->number_of_strips = header->height;
|
header->number_of_strips = header->height;
|
||||||
|
Loading…
Reference in New Issue
Block a user