Workaround for wrong sampling factors used in the Intergarph JPEG

compressed TIFF images as per bug:
http://bugzilla.remotesensing.org/show_bug.cgi?id=532
This commit is contained in:
Andrey Kiselev 2004-04-06 08:42:30 +00:00
parent 1cba436f59
commit 1f663d3a9b

View File

@ -1,4 +1,4 @@
/* $Header: /cvs/maptools/cvsroot/libtiff/libtiff/tif_jpeg.c,v 1.18 2004-01-29 08:51:56 dron Exp $ */ /* $Header: /cvs/maptools/cvsroot/libtiff/libtiff/tif_jpeg.c,v 1.19 2004-04-06 08:42:30 dron Exp $ */
/* /*
* Copyright (c) 1994-1997 Sam Leffler * Copyright (c) 1994-1997 Sam Leffler
@ -66,7 +66,7 @@ int TIFFFillTile(TIFF*, ttile_t);
*/ */
/* Define "boolean" as unsigned char, not int, per Windows custom. */ /* Define "boolean" as unsigned char, not int, per Windows custom. */
#if defined(__WIN32__) #if defined(WIN32)
# ifndef __RPCNDR_H__ /* don't conflict if rpcndr.h already read */ # ifndef __RPCNDR_H__ /* don't conflict if rpcndr.h already read */
typedef unsigned char boolean; typedef unsigned char boolean;
# endif # endif
@ -707,21 +707,31 @@ JPEGPreDecode(TIFF* tif, tsample_t s)
sp->cinfo.d.comp_info[0].v_samp_factor != sp->v_sampling) { sp->cinfo.d.comp_info[0].v_samp_factor != sp->v_sampling) {
TIFFWarning(module, TIFFWarning(module,
"Improper JPEG sampling factors %d,%d\n" "Improper JPEG sampling factors %d,%d\n"
"Apparently should be %d,%d, " "Apparently should be %d,%d.",
"decompressor will try reading with "
"sampling %d,%d",
sp->cinfo.d.comp_info[0].h_samp_factor, sp->cinfo.d.comp_info[0].h_samp_factor,
sp->cinfo.d.comp_info[0].v_samp_factor, sp->cinfo.d.comp_info[0].v_samp_factor,
sp->h_sampling, sp->h_sampling, sp->v_sampling);
sp->v_sampling,
/*
* XXX: Files written by the Intergraph software
* has different sampling factors stored in the
* TIFF tags and in the JPEG structures. We will
* try to deduce Intergraph files by the presense
* of the tag 33918.
*/
if (!_TIFFFindFieldInfo(tif, 33918, TIFF_ANY)) {
TIFFWarning(module,
"Decompressor will try reading with "
"sampling %d,%d.",
sp->cinfo.d.comp_info[0].h_samp_factor, sp->cinfo.d.comp_info[0].h_samp_factor,
sp->cinfo.d.comp_info[0].v_samp_factor ); sp->cinfo.d.comp_info[0].v_samp_factor);
sp->h_sampling = (uint16) sp->h_sampling = (uint16)
sp->cinfo.d.comp_info[0].h_samp_factor; sp->cinfo.d.comp_info[0].h_samp_factor;
sp->v_sampling = (uint16) sp->v_sampling = (uint16)
sp->cinfo.d.comp_info[0].v_samp_factor; sp->cinfo.d.comp_info[0].v_samp_factor;
} }
}
/* Rest should have sampling factors 1,1 */ /* Rest should have sampling factors 1,1 */
for (ci = 1; ci < sp->cinfo.d.num_components; ci++) { for (ci = 1; ci < sp->cinfo.d.num_components; ci++) {
if (sp->cinfo.d.comp_info[ci].h_samp_factor != 1 || if (sp->cinfo.d.comp_info[ci].h_samp_factor != 1 ||