Fix TileOffsets for single tiles using deflate compression
The old code looks messed up, but I'm not sure... Fixes #6575
This commit is contained in:
parent
2ce5b827c5
commit
1a281725c9
@ -1131,9 +1131,13 @@ void CLASS lossless_dng_load_raw()
|
|||||||
struct jhead jh;
|
struct jhead jh;
|
||||||
ushort *rp;
|
ushort *rp;
|
||||||
|
|
||||||
|
size_t tilesWide = (raw_width + tile_width - 1) / tile_width;
|
||||||
|
size_t tilesHigh = (raw_height + tile_length - 1) / tile_length;
|
||||||
|
size_t tileCount = tilesWide * tilesHigh;
|
||||||
|
|
||||||
while (trow < raw_height) {
|
while (trow < raw_height) {
|
||||||
save = ftell(ifp);
|
save = ftell(ifp);
|
||||||
if (tile_length < INT_MAX)
|
if (tileCount > 1)
|
||||||
fseek (ifp, get4(), SEEK_SET);
|
fseek (ifp, get4(), SEEK_SET);
|
||||||
if (!ljpeg_start (&jh, 0)) break;
|
if (!ljpeg_start (&jh, 0)) break;
|
||||||
jwide = jh.wide;
|
jwide = jh.wide;
|
||||||
@ -6550,8 +6554,6 @@ int CLASS parse_tiff_ifd (int base)
|
|||||||
break;
|
break;
|
||||||
case 324: /* TileOffsets */
|
case 324: /* TileOffsets */
|
||||||
tiff_ifd[ifd].offset = len > 1 ? ftell(ifp) : get4();
|
tiff_ifd[ifd].offset = len > 1 ? ftell(ifp) : get4();
|
||||||
if (len == 1)
|
|
||||||
tiff_ifd[ifd].tile_width = tiff_ifd[ifd].tile_length = 0;
|
|
||||||
if (len == 4) {
|
if (len == 4) {
|
||||||
load_raw = &CLASS sinar_4shot_load_raw;
|
load_raw = &CLASS sinar_4shot_load_raw;
|
||||||
is_raw = 5;
|
is_raw = 5;
|
||||||
@ -10909,8 +10911,12 @@ void CLASS deflate_dng_load_raw() {
|
|||||||
size_t tileCount = tilesWide * tilesHigh;
|
size_t tileCount = tilesWide * tilesHigh;
|
||||||
//fprintf(stderr, "%dx%d tiles, %d total\n", tilesWide, tilesHigh, tileCount);
|
//fprintf(stderr, "%dx%d tiles, %d total\n", tilesWide, tilesHigh, tileCount);
|
||||||
size_t tileOffsets[tileCount];
|
size_t tileOffsets[tileCount];
|
||||||
for (size_t t = 0; t < tileCount; ++t) {
|
if (tileCount == 1) {
|
||||||
tileOffsets[t] = get4();
|
tileOffsets[0] = ifd->offset;
|
||||||
|
} else {
|
||||||
|
for (size_t t = 0; t < tileCount; ++t) {
|
||||||
|
tileOffsets[t] = get4();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
size_t tileBytes[tileCount];
|
size_t tileBytes[tileCount];
|
||||||
uLongf maxCompressed = 0;
|
uLongf maxCompressed = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user