2003.04.28 13:25 "old jpeg", by Diana Szleper

2003.04.28 15:39 "Re: old jpeg", by Andrey Kiselev

Is somebody can tell me with wich version of jpeg libraries, I can read tiff image encoded with old jpeg algo?

You need libjpeg version 6B from ftp://ftp.uu.net:/graphics/jpeg/. To be able to compile libtiff with OJPEG support this library must be patched:

*** jdhuff.c.orig       Mon Oct 20 17:51:10 1997
--- jdhuff.c    Sun Nov 11 17:33:58 2001
***************
*** 648,651 ****
--- 648,683 ----
    for (i = 0; i < NUM_HUFF_TBLS; i++) {
      entropy->dc_derived_tbls[i] = entropy->ac_derived_tbls[i] = NULL;
    }
  }
+
+ /*
+  * BEWARE OF KLUDGE:  This subroutine is a hack for decoding illegal JPEG-in-
+  *                    TIFF encapsulations produced by Microsoft's Wang Imaging
+  * for Windows application with the public-domain TIFF Library.  Based upon an
+  * examination of selected output files, this program apparently divides a JPEG
+  * bit-stream into consecutive horizontal TIFF "strips", such that the JPEG
+  * encoder's/decoder's DC coefficients for each image component are reset before
+  * each "strip".  Moreover, a "strip" is not necessarily encoded in a multiple
+  * of 8 bits, so one must sometimes discard 1-7 bits at the end of each "strip"
+  * for alignment to the next input-Byte storage boundary.  IJG JPEG Library
+  * decoder state is not normally exposed to client applications, so this sub-
+  * routine provides the TIFF Library with a "hook" to make these corrections.
+  * It should be called after "jpeg_start_decompress()" and before
+  * "jpeg_finish_decompress()", just before decoding each "strip" using
+  * "jpeg_read_raw_data()" or "jpeg_read_scanlines()".
+  *
+  * This kludge is not sanctioned or supported by the Independent JPEG Group, and
+  * future changes to the IJG JPEG Library might invalidate it.  Do not send bug
+  * reports about this code to IJG developers.  Instead, contact the author for
+  * advice: Scott B. Marovich <marovich@hpl.hp.com>, Hewlett-Packard Labs, 6/01.
+  */
+ GLOBAL(void)
+ jpeg_reset_huff_decode (register j_decompress_ptr cinfo)
+ { register huff_entropy_ptr entropy = (huff_entropy_ptr)cinfo->entropy;
+   register int ci = 0;
+
+   /* Discard encoded input bits, up to the next Byte boundary */
+   entropy->bitstate.bits_left &= ~7;
+   /* Re-initialize DC predictions to 0 */
+   do entropy->saved.last_dc_val[ci] = 0; while (++ci < cinfo->comps_in_scan);
+ }

Andrey V. Kiselev
Home phone: +7 812 5274898 ICQ# 26871517