tif_lzw.c
上传用户:looem2003
上传日期:2014-07-20
资源大小:13733k
文件大小:29k
源码类别:

打印编程

开发平台:

Visual C++

  1. /* $Id: tif_lzw.c,v 1.28 2006/03/16 12:38:24 dron Exp $ */
  2. /*
  3.  * Copyright (c) 1988-1997 Sam Leffler
  4.  * Copyright (c) 1991-1997 Silicon Graphics, Inc.
  5.  *
  6.  * Permission to use, copy, modify, distribute, and sell this software and 
  7.  * its documentation for any purpose is hereby granted without fee, provided
  8.  * that (i) the above copyright notices and this permission notice appear in
  9.  * all copies of the software and related documentation, and (ii) the names of
  10.  * Sam Leffler and Silicon Graphics may not be used in any advertising or
  11.  * publicity relating to the software without the specific, prior written
  12.  * permission of Sam Leffler and Silicon Graphics.
  13.  * 
  14.  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
  15.  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
  16.  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
  17.  * 
  18.  * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
  19.  * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
  20.  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  21.  * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
  22.  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
  23.  * OF THIS SOFTWARE.
  24.  */
  25. #include "tiffiop.h"
  26. #ifdef LZW_SUPPORT
  27. /*
  28.  * TIFF Library.
  29.  * Rev 5.0 Lempel-Ziv & Welch Compression Support
  30.  *
  31.  * This code is derived from the compress program whose code is
  32.  * derived from software contributed to Berkeley by James A. Woods,
  33.  * derived from original work by Spencer Thomas and Joseph Orost.
  34.  *
  35.  * The original Berkeley copyright notice appears below in its entirety.
  36.  */
  37. #include "tif_predict.h"
  38. #include <stdio.h>
  39. /*
  40.  * NB: The 5.0 spec describes a different algorithm than Aldus
  41.  *     implements.  Specifically, Aldus does code length transitions
  42.  *     one code earlier than should be done (for real LZW).
  43.  *     Earlier versions of this library implemented the correct
  44.  *     LZW algorithm, but emitted codes in a bit order opposite
  45.  *     to the TIFF spec.  Thus, to maintain compatibility w/ Aldus
  46.  *     we interpret MSB-LSB ordered codes to be images written w/
  47.  *     old versions of this library, but otherwise adhere to the
  48.  *     Aldus "off by one" algorithm.
  49.  *
  50.  * Future revisions to the TIFF spec are expected to "clarify this issue".
  51.  */
  52. #define LZW_COMPAT /* include backwards compatibility code */
  53. /*
  54.  * Each strip of data is supposed to be terminated by a CODE_EOI.
  55.  * If the following #define is included, the decoder will also
  56.  * check for end-of-strip w/o seeing this code.  This makes the
  57.  * library more robust, but also slower.
  58.  */
  59. #define LZW_CHECKEOS /* include checks for strips w/o EOI code */
  60. #define MAXCODE(n) ((1L<<(n))-1)
  61. /*
  62.  * The TIFF spec specifies that encoded bit
  63.  * strings range from 9 to 12 bits.
  64.  */
  65. #define BITS_MIN 9 /* start with 9 bits */
  66. #define BITS_MAX 12 /* max of 12 bit strings */
  67. /* predefined codes */
  68. #define CODE_CLEAR 256 /* code to clear string table */
  69. #define CODE_EOI 257 /* end-of-information code */
  70. #define CODE_FIRST 258 /* first free code entry */
  71. #define CODE_MAX MAXCODE(BITS_MAX)
  72. #define HSIZE 9001L /* 91% occupancy */
  73. #define HSHIFT (13-8)
  74. #ifdef LZW_COMPAT
  75. /* NB: +1024 is for compatibility with old files */
  76. #define CSIZE (MAXCODE(BITS_MAX)+1024L)
  77. #else
  78. #define CSIZE (MAXCODE(BITS_MAX)+1L)
  79. #endif
  80. /*
  81.  * State block for each open TIFF file using LZW
  82.  * compression/decompression.  Note that the predictor
  83.  * state block must be first in this data structure.
  84.  */
  85. typedef struct {
  86. TIFFPredictorState predict; /* predictor super class */
  87. unsigned short nbits; /* # of bits/code */
  88. unsigned short maxcode; /* maximum code for lzw_nbits */
  89. unsigned short free_ent; /* next free entry in hash table */
  90. long nextdata; /* next bits of i/o */
  91. long nextbits; /* # of valid bits in lzw_nextdata */
  92.         int             rw_mode;        /* preserve rw_mode from init */
  93. } LZWBaseState;
  94. #define lzw_nbits base.nbits
  95. #define lzw_maxcode base.maxcode
  96. #define lzw_free_ent base.free_ent
  97. #define lzw_nextdata base.nextdata
  98. #define lzw_nextbits base.nextbits
  99. /*
  100.  * Encoding-specific state.
  101.  */
  102. typedef uint16 hcode_t; /* codes fit in 16 bits */
  103. typedef struct {
  104. long hash;
  105. hcode_t code;
  106. } hash_t;
  107. /*
  108.  * Decoding-specific state.
  109.  */
  110. typedef struct code_ent {
  111. struct code_ent *next;
  112. unsigned short length; /* string len, including this token */
  113. unsigned char value; /* data value */
  114. unsigned char firstchar; /* first token of string */
  115. } code_t;
  116. typedef int (*decodeFunc)(TIFF*, tidata_t, tsize_t, tsample_t);
  117. typedef struct {
  118. LZWBaseState base;
  119. /* Decoding specific data */
  120. long dec_nbitsmask; /* lzw_nbits 1 bits, right adjusted */
  121. long dec_restart; /* restart count */
  122. #ifdef LZW_CHECKEOS
  123. long dec_bitsleft; /* available bits in raw data */
  124. #endif
  125. decodeFunc dec_decode; /* regular or backwards compatible */
  126. code_t* dec_codep; /* current recognized code */
  127. code_t* dec_oldcodep; /* previously recognized code */
  128. code_t* dec_free_entp; /* next free entry */
  129. code_t* dec_maxcodep; /* max available entry */
  130. code_t* dec_codetab; /* kept separate for small machines */
  131. /* Encoding specific data */
  132. int enc_oldcode; /* last code encountered */
  133. long enc_checkpoint; /* point at which to clear table */
  134. #define CHECK_GAP 10000 /* enc_ratio check interval */
  135. long enc_ratio; /* current compression ratio */
  136. long enc_incount; /* (input) data bytes encoded */
  137. long enc_outcount; /* encoded (output) bytes */
  138. tidata_t enc_rawlimit; /* bound on tif_rawdata buffer */
  139. hash_t* enc_hashtab; /* kept separate for small machines */
  140. } LZWCodecState;
  141. #define LZWState(tif) ((LZWBaseState*) (tif)->tif_data)
  142. #define DecoderState(tif) ((LZWCodecState*) LZWState(tif))
  143. #define EncoderState(tif) ((LZWCodecState*) LZWState(tif))
  144. static int LZWDecode(TIFF*, tidata_t, tsize_t, tsample_t);
  145. #ifdef LZW_COMPAT
  146. static int LZWDecodeCompat(TIFF*, tidata_t, tsize_t, tsample_t);
  147. #endif
  148. static  void cl_hash(LZWCodecState*);
  149. /*
  150.  * LZW Decoder.
  151.  */
  152. #ifdef LZW_CHECKEOS
  153. /*
  154.  * This check shouldn't be necessary because each
  155.  * strip is suppose to be terminated with CODE_EOI.
  156.  */
  157. #define NextCode(_tif, _sp, _bp, _code, _get) {
  158. if ((_sp)->dec_bitsleft < nbits) {
  159. TIFFWarningExt(_tif->tif_clientdata, _tif->tif_name,
  160.     "LZWDecode: Strip %d not terminated with EOI code", 
  161.     _tif->tif_curstrip);
  162. _code = CODE_EOI;
  163. } else {
  164. _get(_sp,_bp,_code);
  165. (_sp)->dec_bitsleft -= nbits;
  166. }
  167. }
  168. #else
  169. #define NextCode(tif, sp, bp, code, get) get(sp, bp, code)
  170. #endif
  171. static int
  172. LZWSetupDecode(TIFF* tif)
  173. {
  174. LZWCodecState* sp = DecoderState(tif);
  175. static const char module[] = " LZWSetupDecode";
  176. int code;
  177.         if( sp == NULL )
  178.         {
  179.             /*
  180.              * Allocate state block so tag methods have storage to record 
  181.  * values.
  182.              */
  183.             tif->tif_data = (tidata_t) _TIFFmalloc(sizeof(LZWCodecState));
  184.             if (tif->tif_data == NULL)
  185.             {
  186. TIFFErrorExt(tif->tif_clientdata, "LZWPreDecode", "No space for LZW state block");
  187.                 return (0);
  188.             }
  189.             DecoderState(tif)->dec_codetab = NULL;
  190.             DecoderState(tif)->dec_decode = NULL;
  191.             
  192.             /*
  193.              * Setup predictor setup.
  194.              */
  195.             (void) TIFFPredictorInit(tif);
  196.             sp = DecoderState(tif);
  197.         }
  198.             
  199. assert(sp != NULL);
  200. if (sp->dec_codetab == NULL) {
  201. sp->dec_codetab = (code_t*)_TIFFmalloc(CSIZE*sizeof (code_t));
  202. if (sp->dec_codetab == NULL) {
  203. TIFFErrorExt(tif->tif_clientdata, module, "No space for LZW code table");
  204. return (0);
  205. }
  206. /*
  207.  * Pre-load the table.
  208.  */
  209.                 code = 255;
  210.                 do {
  211.                     sp->dec_codetab[code].value = code;
  212.                     sp->dec_codetab[code].firstchar = code;
  213.                     sp->dec_codetab[code].length = 1;
  214.                     sp->dec_codetab[code].next = NULL;
  215.                 } while (code--);
  216. }
  217. return (1);
  218. }
  219. /*
  220.  * Setup state for decoding a strip.
  221.  */
  222. static int
  223. LZWPreDecode(TIFF* tif, tsample_t s)
  224. {
  225. LZWCodecState *sp = DecoderState(tif);
  226. (void) s;
  227. assert(sp != NULL);
  228. /*
  229.  * Check for old bit-reversed codes.
  230.  */
  231. if (tif->tif_rawdata[0] == 0 && (tif->tif_rawdata[1] & 0x1)) {
  232. #ifdef LZW_COMPAT
  233. if (!sp->dec_decode) {
  234. TIFFWarningExt(tif->tif_clientdata, tif->tif_name,
  235.     "Old-style LZW codes, convert file");
  236. /*
  237.  * Override default decoding methods with
  238.  * ones that deal with the old coding.
  239.  * Otherwise the predictor versions set
  240.  * above will call the compatibility routines
  241.  * through the dec_decode method.
  242.  */
  243. tif->tif_decoderow = LZWDecodeCompat;
  244. tif->tif_decodestrip = LZWDecodeCompat;
  245. tif->tif_decodetile = LZWDecodeCompat;
  246. /*
  247.  * If doing horizontal differencing, must
  248.  * re-setup the predictor logic since we
  249.  * switched the basic decoder methods...
  250.  */
  251. (*tif->tif_setupdecode)(tif);
  252. sp->dec_decode = LZWDecodeCompat;
  253. }
  254. sp->lzw_maxcode = MAXCODE(BITS_MIN);
  255. #else /* !LZW_COMPAT */
  256. if (!sp->dec_decode) {
  257. TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
  258.     "Old-style LZW codes not supported");
  259. sp->dec_decode = LZWDecode;
  260. }
  261. return (0);
  262. #endif/* !LZW_COMPAT */
  263. } else {
  264. sp->lzw_maxcode = MAXCODE(BITS_MIN)-1;
  265. sp->dec_decode = LZWDecode;
  266. }
  267. sp->lzw_nbits = BITS_MIN;
  268. sp->lzw_nextbits = 0;
  269. sp->lzw_nextdata = 0;
  270. sp->dec_restart = 0;
  271. sp->dec_nbitsmask = MAXCODE(BITS_MIN);
  272. #ifdef LZW_CHECKEOS
  273. sp->dec_bitsleft = tif->tif_rawcc << 3;
  274. #endif
  275. sp->dec_free_entp = sp->dec_codetab + CODE_FIRST;
  276. /*
  277.  * Zero entries that are not yet filled in.  We do
  278.  * this to guard against bogus input data that causes
  279.  * us to index into undefined entries.  If you can
  280.  * come up with a way to safely bounds-check input codes
  281.  * while decoding then you can remove this operation.
  282.  */
  283. _TIFFmemset(sp->dec_free_entp, 0, (CSIZE-CODE_FIRST)*sizeof (code_t));
  284. sp->dec_oldcodep = &sp->dec_codetab[-1];
  285. sp->dec_maxcodep = &sp->dec_codetab[sp->dec_nbitsmask-1];
  286. return (1);
  287. }
  288. /*
  289.  * Decode a "hunk of data".
  290.  */
  291. #define GetNextCode(sp, bp, code) {
  292. nextdata = (nextdata<<8) | *(bp)++;
  293. nextbits += 8;
  294. if (nextbits < nbits) {
  295. nextdata = (nextdata<<8) | *(bp)++;
  296. nextbits += 8;
  297. }
  298. code = (hcode_t)((nextdata >> (nextbits-nbits)) & nbitsmask);
  299. nextbits -= nbits;
  300. }
  301. static void
  302. codeLoop(TIFF* tif)
  303. {
  304. TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
  305.     "LZWDecode: Bogus encoding, loop in the code table; scanline %d",
  306.     tif->tif_row);
  307. }
  308. static int
  309. LZWDecode(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s)
  310. {
  311. LZWCodecState *sp = DecoderState(tif);
  312. char *op = (char*) op0;
  313. long occ = (long) occ0;
  314. char *tp;
  315. unsigned char *bp;
  316. hcode_t code;
  317. int len;
  318. long nbits, nextbits, nextdata, nbitsmask;
  319. code_t *codep, *free_entp, *maxcodep, *oldcodep;
  320. (void) s;
  321. assert(sp != NULL);
  322. /*
  323.  * Restart interrupted output operation.
  324.  */
  325. if (sp->dec_restart) {
  326. long residue;
  327. codep = sp->dec_codep;
  328. residue = codep->length - sp->dec_restart;
  329. if (residue > occ) {
  330. /*
  331.  * Residue from previous decode is sufficient
  332.  * to satisfy decode request.  Skip to the
  333.  * start of the decoded string, place decoded
  334.  * values in the output buffer, and return.
  335.  */
  336. sp->dec_restart += occ;
  337. do {
  338. codep = codep->next;
  339. } while (--residue > occ && codep);
  340. if (codep) {
  341. tp = op + occ;
  342. do {
  343. *--tp = codep->value;
  344. codep = codep->next;
  345. } while (--occ && codep);
  346. }
  347. return (1);
  348. }
  349. /*
  350.  * Residue satisfies only part of the decode request.
  351.  */
  352. op += residue, occ -= residue;
  353. tp = op;
  354. do {
  355. int t;
  356. --tp;
  357. t = codep->value;
  358. codep = codep->next;
  359. *tp = t;
  360. } while (--residue && codep);
  361. sp->dec_restart = 0;
  362. }
  363. bp = (unsigned char *)tif->tif_rawcp;
  364. nbits = sp->lzw_nbits;
  365. nextdata = sp->lzw_nextdata;
  366. nextbits = sp->lzw_nextbits;
  367. nbitsmask = sp->dec_nbitsmask;
  368. oldcodep = sp->dec_oldcodep;
  369. free_entp = sp->dec_free_entp;
  370. maxcodep = sp->dec_maxcodep;
  371. while (occ > 0) {
  372. NextCode(tif, sp, bp, code, GetNextCode);
  373. if (code == CODE_EOI)
  374. break;
  375. if (code == CODE_CLEAR) {
  376. free_entp = sp->dec_codetab + CODE_FIRST;
  377. nbits = BITS_MIN;
  378. nbitsmask = MAXCODE(BITS_MIN);
  379. maxcodep = sp->dec_codetab + nbitsmask-1;
  380. NextCode(tif, sp, bp, code, GetNextCode);
  381. if (code == CODE_EOI)
  382. break;
  383. *op++ = (char)code, occ--;
  384. oldcodep = sp->dec_codetab + code;
  385. continue;
  386. }
  387. codep = sp->dec_codetab + code;
  388. /*
  389.    * Add the new entry to the code table.
  390.    */
  391. if (free_entp < &sp->dec_codetab[0] ||
  392. free_entp >= &sp->dec_codetab[CSIZE]) {
  393. TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
  394. "LZWDecode: Corrupted LZW table at scanline %d",
  395. tif->tif_row);
  396. return (0);
  397. }
  398. free_entp->next = oldcodep;
  399. if (free_entp->next < &sp->dec_codetab[0] ||
  400. free_entp->next >= &sp->dec_codetab[CSIZE]) {
  401. TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
  402. "LZWDecode: Corrupted LZW table at scanline %d",
  403. tif->tif_row);
  404. return (0);
  405. }
  406. free_entp->firstchar = free_entp->next->firstchar;
  407. free_entp->length = free_entp->next->length+1;
  408. free_entp->value = (codep < free_entp) ?
  409.     codep->firstchar : free_entp->firstchar;
  410. if (++free_entp > maxcodep) {
  411. if (++nbits > BITS_MAX) /* should not happen */
  412. nbits = BITS_MAX;
  413. nbitsmask = MAXCODE(nbits);
  414. maxcodep = sp->dec_codetab + nbitsmask-1;
  415. }
  416. oldcodep = codep;
  417. if (code >= 256) {
  418. /*
  419.    * Code maps to a string, copy string
  420.  * value to output (written in reverse).
  421.    */
  422. if(codep->length == 0) {
  423. TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
  424.          "LZWDecode: Wrong length of decoded string: "
  425.     "data probably corrupted at scanline %d",
  426.     tif->tif_row);
  427.     return (0);
  428. }
  429. if (codep->length > occ) {
  430. /*
  431.  * String is too long for decode buffer,
  432.  * locate portion that will fit, copy to
  433.  * the decode buffer, and setup restart
  434.  * logic for the next decoding call.
  435.  */
  436. sp->dec_codep = codep;
  437. do {
  438. codep = codep->next;
  439. } while (codep && codep->length > occ);
  440. if (codep) {
  441. sp->dec_restart = occ;
  442. tp = op + occ;
  443. do  {
  444. *--tp = codep->value;
  445. codep = codep->next;
  446. }  while (--occ && codep);
  447. if (codep)
  448. codeLoop(tif);
  449. }
  450. break;
  451. }
  452. len = codep->length;
  453. tp = op + len;
  454. do {
  455. int t;
  456. --tp;
  457. t = codep->value;
  458. codep = codep->next;
  459. *tp = t;
  460. } while (codep && tp > op);
  461. if (codep) {
  462.     codeLoop(tif);
  463.     break;
  464. }
  465. op += len, occ -= len;
  466. } else
  467. *op++ = (char)code, occ--;
  468. }
  469. tif->tif_rawcp = (tidata_t) bp;
  470. sp->lzw_nbits = (unsigned short) nbits;
  471. sp->lzw_nextdata = nextdata;
  472. sp->lzw_nextbits = nextbits;
  473. sp->dec_nbitsmask = nbitsmask;
  474. sp->dec_oldcodep = oldcodep;
  475. sp->dec_free_entp = free_entp;
  476. sp->dec_maxcodep = maxcodep;
  477. if (occ > 0) {
  478. TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
  479. "LZWDecode: Not enough data at scanline %d (short %d bytes)",
  480.     tif->tif_row, occ);
  481. return (0);
  482. }
  483. return (1);
  484. }
  485. #ifdef LZW_COMPAT
  486. /*
  487.  * Decode a "hunk of data" for old images.
  488.  */
  489. #define GetNextCodeCompat(sp, bp, code) {
  490. nextdata |= (unsigned long) *(bp)++ << nextbits;
  491. nextbits += 8;
  492. if (nextbits < nbits) {
  493. nextdata |= (unsigned long) *(bp)++ << nextbits;
  494. nextbits += 8;
  495. }
  496. code = (hcode_t)(nextdata & nbitsmask);
  497. nextdata >>= nbits;
  498. nextbits -= nbits;
  499. }
  500. static int
  501. LZWDecodeCompat(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s)
  502. {
  503. LZWCodecState *sp = DecoderState(tif);
  504. char *op = (char*) op0;
  505. long occ = (long) occ0;
  506. char *tp;
  507. unsigned char *bp;
  508. int code, nbits;
  509. long nextbits, nextdata, nbitsmask;
  510. code_t *codep, *free_entp, *maxcodep, *oldcodep;
  511. (void) s;
  512. assert(sp != NULL);
  513. /*
  514.  * Restart interrupted output operation.
  515.  */
  516. if (sp->dec_restart) {
  517. long residue;
  518. codep = sp->dec_codep;
  519. residue = codep->length - sp->dec_restart;
  520. if (residue > occ) {
  521. /*
  522.  * Residue from previous decode is sufficient
  523.  * to satisfy decode request.  Skip to the
  524.  * start of the decoded string, place decoded
  525.  * values in the output buffer, and return.
  526.  */
  527. sp->dec_restart += occ;
  528. do {
  529. codep = codep->next;
  530. } while (--residue > occ);
  531. tp = op + occ;
  532. do {
  533. *--tp = codep->value;
  534. codep = codep->next;
  535. } while (--occ);
  536. return (1);
  537. }
  538. /*
  539.  * Residue satisfies only part of the decode request.
  540.  */
  541. op += residue, occ -= residue;
  542. tp = op;
  543. do {
  544. *--tp = codep->value;
  545. codep = codep->next;
  546. } while (--residue);
  547. sp->dec_restart = 0;
  548. }
  549. bp = (unsigned char *)tif->tif_rawcp;
  550. nbits = sp->lzw_nbits;
  551. nextdata = sp->lzw_nextdata;
  552. nextbits = sp->lzw_nextbits;
  553. nbitsmask = sp->dec_nbitsmask;
  554. oldcodep = sp->dec_oldcodep;
  555. free_entp = sp->dec_free_entp;
  556. maxcodep = sp->dec_maxcodep;
  557. while (occ > 0) {
  558. NextCode(tif, sp, bp, code, GetNextCodeCompat);
  559. if (code == CODE_EOI)
  560. break;
  561. if (code == CODE_CLEAR) {
  562. free_entp = sp->dec_codetab + CODE_FIRST;
  563. nbits = BITS_MIN;
  564. nbitsmask = MAXCODE(BITS_MIN);
  565. maxcodep = sp->dec_codetab + nbitsmask;
  566. NextCode(tif, sp, bp, code, GetNextCodeCompat);
  567. if (code == CODE_EOI)
  568. break;
  569. *op++ = code, occ--;
  570. oldcodep = sp->dec_codetab + code;
  571. continue;
  572. }
  573. codep = sp->dec_codetab + code;
  574. /*
  575.    * Add the new entry to the code table.
  576.    */
  577. if (free_entp < &sp->dec_codetab[0] ||
  578. free_entp >= &sp->dec_codetab[CSIZE]) {
  579. TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
  580. "LZWDecodeCompat: Corrupted LZW table at scanline %d",
  581. tif->tif_row);
  582. return (0);
  583. }
  584. free_entp->next = oldcodep;
  585. if (free_entp->next < &sp->dec_codetab[0] ||
  586. free_entp->next >= &sp->dec_codetab[CSIZE]) {
  587. TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
  588. "LZWDecodeCompat: Corrupted LZW table at scanline %d",
  589. tif->tif_row);
  590. return (0);
  591. }
  592. free_entp->firstchar = free_entp->next->firstchar;
  593. free_entp->length = free_entp->next->length+1;
  594. free_entp->value = (codep < free_entp) ?
  595.     codep->firstchar : free_entp->firstchar;
  596. if (++free_entp > maxcodep) {
  597. if (++nbits > BITS_MAX) /* should not happen */
  598. nbits = BITS_MAX;
  599. nbitsmask = MAXCODE(nbits);
  600. maxcodep = sp->dec_codetab + nbitsmask;
  601. }
  602. oldcodep = codep;
  603. if (code >= 256) {
  604. /*
  605.    * Code maps to a string, copy string
  606.  * value to output (written in reverse).
  607.    */
  608. if(codep->length == 0) {
  609. TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
  610.          "LZWDecodeCompat: Wrong length of decoded "
  611.     "string: data probably corrupted at scanline %d",
  612.     tif->tif_row);
  613.     return (0);
  614. }
  615. if (codep->length > occ) {
  616. /*
  617.  * String is too long for decode buffer,
  618.  * locate portion that will fit, copy to
  619.  * the decode buffer, and setup restart
  620.  * logic for the next decoding call.
  621.  */
  622. sp->dec_codep = codep;
  623. do {
  624. codep = codep->next;
  625. } while (codep->length > occ);
  626. sp->dec_restart = occ;
  627. tp = op + occ;
  628. do  {
  629. *--tp = codep->value;
  630. codep = codep->next;
  631. }  while (--occ);
  632. break;
  633. }
  634. op += codep->length, occ -= codep->length;
  635. tp = op;
  636. do {
  637. *--tp = codep->value;
  638. } while( (codep = codep->next) != NULL);
  639. } else
  640. *op++ = code, occ--;
  641. }
  642. tif->tif_rawcp = (tidata_t) bp;
  643. sp->lzw_nbits = nbits;
  644. sp->lzw_nextdata = nextdata;
  645. sp->lzw_nextbits = nextbits;
  646. sp->dec_nbitsmask = nbitsmask;
  647. sp->dec_oldcodep = oldcodep;
  648. sp->dec_free_entp = free_entp;
  649. sp->dec_maxcodep = maxcodep;
  650. if (occ > 0) {
  651. TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
  652.     "LZWDecodeCompat: Not enough data at scanline %d (short %d bytes)",
  653.     tif->tif_row, occ);
  654. return (0);
  655. }
  656. return (1);
  657. }
  658. #endif /* LZW_COMPAT */
  659. /*
  660.  * LZW Encoding.
  661.  */
  662. static int
  663. LZWSetupEncode(TIFF* tif)
  664. {
  665. LZWCodecState* sp = EncoderState(tif);
  666. static const char module[] = "LZWSetupEncode";
  667. assert(sp != NULL);
  668. sp->enc_hashtab = (hash_t*) _TIFFmalloc(HSIZE*sizeof (hash_t));
  669. if (sp->enc_hashtab == NULL) {
  670. TIFFErrorExt(tif->tif_clientdata, module, "No space for LZW hash table");
  671. return (0);
  672. }
  673. return (1);
  674. }
  675. /*
  676.  * Reset encoding state at the start of a strip.
  677.  */
  678. static int
  679. LZWPreEncode(TIFF* tif, tsample_t s)
  680. {
  681. LZWCodecState *sp = EncoderState(tif);
  682. (void) s;
  683. assert(sp != NULL);
  684. sp->lzw_nbits = BITS_MIN;
  685. sp->lzw_maxcode = MAXCODE(BITS_MIN);
  686. sp->lzw_free_ent = CODE_FIRST;
  687. sp->lzw_nextbits = 0;
  688. sp->lzw_nextdata = 0;
  689. sp->enc_checkpoint = CHECK_GAP;
  690. sp->enc_ratio = 0;
  691. sp->enc_incount = 0;
  692. sp->enc_outcount = 0;
  693. /*
  694.  * The 4 here insures there is space for 2 max-sized
  695.  * codes in LZWEncode and LZWPostDecode.
  696.  */
  697. sp->enc_rawlimit = tif->tif_rawdata + tif->tif_rawdatasize-1 - 4;
  698. cl_hash(sp); /* clear hash table */
  699. sp->enc_oldcode = (hcode_t) -1; /* generates CODE_CLEAR in LZWEncode */
  700. return (1);
  701. }
  702. #define CALCRATIO(sp, rat) {
  703. if (incount > 0x007fffff) { /* NB: shift will overflow */
  704. rat = outcount >> 8;
  705. rat = (rat == 0 ? 0x7fffffff : incount/rat);
  706. } else
  707. rat = (incount<<8) / outcount;
  708. }
  709. #define PutNextCode(op, c) {
  710. nextdata = (nextdata << nbits) | c;
  711. nextbits += nbits;
  712. *op++ = (unsigned char)(nextdata >> (nextbits-8));
  713. nextbits -= 8;
  714. if (nextbits >= 8) {
  715. *op++ = (unsigned char)(nextdata >> (nextbits-8));
  716. nextbits -= 8;
  717. }
  718. outcount += nbits;
  719. }
  720. /*
  721.  * Encode a chunk of pixels.
  722.  *
  723.  * Uses an open addressing double hashing (no chaining) on the 
  724.  * prefix code/next character combination.  We do a variant of
  725.  * Knuth's algorithm D (vol. 3, sec. 6.4) along with G. Knott's
  726.  * relatively-prime secondary probe.  Here, the modular division
  727.  * first probe is gives way to a faster exclusive-or manipulation. 
  728.  * Also do block compression with an adaptive reset, whereby the
  729.  * code table is cleared when the compression ratio decreases,
  730.  * but after the table fills.  The variable-length output codes
  731.  * are re-sized at this point, and a CODE_CLEAR is generated
  732.  * for the decoder. 
  733.  */
  734. static int
  735. LZWEncode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s)
  736. {
  737. register LZWCodecState *sp = EncoderState(tif);
  738. register long fcode;
  739. register hash_t *hp;
  740. register int h, c;
  741. hcode_t ent;
  742. long disp;
  743. long incount, outcount, checkpoint;
  744. long nextdata, nextbits;
  745. int free_ent, maxcode, nbits;
  746. tidata_t op, limit;
  747. (void) s;
  748. if (sp == NULL)
  749. return (0);
  750. /*
  751.  * Load local state.
  752.  */
  753. incount = sp->enc_incount;
  754. outcount = sp->enc_outcount;
  755. checkpoint = sp->enc_checkpoint;
  756. nextdata = sp->lzw_nextdata;
  757. nextbits = sp->lzw_nextbits;
  758. free_ent = sp->lzw_free_ent;
  759. maxcode = sp->lzw_maxcode;
  760. nbits = sp->lzw_nbits;
  761. op = tif->tif_rawcp;
  762. limit = sp->enc_rawlimit;
  763. ent = sp->enc_oldcode;
  764. if (ent == (hcode_t) -1 && cc > 0) {
  765. /*
  766.  * NB: This is safe because it can only happen
  767.  *     at the start of a strip where we know there
  768.  *     is space in the data buffer.
  769.  */
  770. PutNextCode(op, CODE_CLEAR);
  771. ent = *bp++; cc--; incount++;
  772. }
  773. while (cc > 0) {
  774. c = *bp++; cc--; incount++;
  775. fcode = ((long)c << BITS_MAX) + ent;
  776. h = (c << HSHIFT) ^ ent; /* xor hashing */
  777. #ifdef _WINDOWS
  778. /*
  779.  * Check hash index for an overflow.
  780.  */
  781. if (h >= HSIZE)
  782. h -= HSIZE;
  783. #endif
  784. hp = &sp->enc_hashtab[h];
  785. if (hp->hash == fcode) {
  786. ent = hp->code;
  787. continue;
  788. }
  789. if (hp->hash >= 0) {
  790. /*
  791.  * Primary hash failed, check secondary hash.
  792.  */
  793. disp = HSIZE - h;
  794. if (h == 0)
  795. disp = 1;
  796. do {
  797. /*
  798.  * Avoid pointer arithmetic 'cuz of
  799.  * wraparound problems with segments.
  800.  */
  801. if ((h -= disp) < 0)
  802. h += HSIZE;
  803. hp = &sp->enc_hashtab[h];
  804. if (hp->hash == fcode) {
  805. ent = hp->code;
  806. goto hit;
  807. }
  808. } while (hp->hash >= 0);
  809. }
  810. /*
  811.  * New entry, emit code and add to table.
  812.  */
  813. /*
  814.  * Verify there is space in the buffer for the code
  815.  * and any potential Clear code that might be emitted
  816.  * below.  The value of limit is setup so that there
  817.  * are at least 4 bytes free--room for 2 codes.
  818.  */
  819. if (op > limit) {
  820. tif->tif_rawcc = (tsize_t)(op - tif->tif_rawdata);
  821. TIFFFlushData1(tif);
  822. op = tif->tif_rawdata;
  823. }
  824. PutNextCode(op, ent);
  825. ent = c;
  826. hp->code = free_ent++;
  827. hp->hash = fcode;
  828. if (free_ent == CODE_MAX-1) {
  829. /* table is full, emit clear code and reset */
  830. cl_hash(sp);
  831. sp->enc_ratio = 0;
  832. incount = 0;
  833. outcount = 0;
  834. free_ent = CODE_FIRST;
  835. PutNextCode(op, CODE_CLEAR);
  836. nbits = BITS_MIN;
  837. maxcode = MAXCODE(BITS_MIN);
  838. } else {
  839. /*
  840.  * If the next entry is going to be too big for
  841.  * the code size, then increase it, if possible.
  842.  */
  843. if (free_ent > maxcode) {
  844. nbits++;
  845. assert(nbits <= BITS_MAX);
  846. maxcode = (int) MAXCODE(nbits);
  847. } else if (incount >= checkpoint) {
  848. long rat;
  849. /*
  850.  * Check compression ratio and, if things seem
  851.  * to be slipping, clear the hash table and
  852.  * reset state.  The compression ratio is a
  853.  * 24+8-bit fractional number.
  854.  */
  855. checkpoint = incount+CHECK_GAP;
  856. CALCRATIO(sp, rat);
  857. if (rat <= sp->enc_ratio) {
  858. cl_hash(sp);
  859. sp->enc_ratio = 0;
  860. incount = 0;
  861. outcount = 0;
  862. free_ent = CODE_FIRST;
  863. PutNextCode(op, CODE_CLEAR);
  864. nbits = BITS_MIN;
  865. maxcode = MAXCODE(BITS_MIN);
  866. } else
  867. sp->enc_ratio = rat;
  868. }
  869. }
  870. hit:
  871. ;
  872. }
  873. /*
  874.  * Restore global state.
  875.  */
  876. sp->enc_incount = incount;
  877. sp->enc_outcount = outcount;
  878. sp->enc_checkpoint = checkpoint;
  879. sp->enc_oldcode = ent;
  880. sp->lzw_nextdata = nextdata;
  881. sp->lzw_nextbits = nextbits;
  882. sp->lzw_free_ent = free_ent;
  883. sp->lzw_maxcode = maxcode;
  884. sp->lzw_nbits = nbits;
  885. tif->tif_rawcp = op;
  886. return (1);
  887. }
  888. /*
  889.  * Finish off an encoded strip by flushing the last
  890.  * string and tacking on an End Of Information code.
  891.  */
  892. static int
  893. LZWPostEncode(TIFF* tif)
  894. {
  895. register LZWCodecState *sp = EncoderState(tif);
  896. tidata_t op = tif->tif_rawcp;
  897. long nextbits = sp->lzw_nextbits;
  898. long nextdata = sp->lzw_nextdata;
  899. long outcount = sp->enc_outcount;
  900. int nbits = sp->lzw_nbits;
  901. if (op > sp->enc_rawlimit) {
  902. tif->tif_rawcc = (tsize_t)(op - tif->tif_rawdata);
  903. TIFFFlushData1(tif);
  904. op = tif->tif_rawdata;
  905. }
  906. if (sp->enc_oldcode != (hcode_t) -1) {
  907. PutNextCode(op, sp->enc_oldcode);
  908. sp->enc_oldcode = (hcode_t) -1;
  909. }
  910. PutNextCode(op, CODE_EOI);
  911. if (nextbits > 0) 
  912. *op++ = (unsigned char)(nextdata << (8-nextbits));
  913. tif->tif_rawcc = (tsize_t)(op - tif->tif_rawdata);
  914. return (1);
  915. }
  916. /*
  917.  * Reset encoding hash table.
  918.  */
  919. static void
  920. cl_hash(LZWCodecState* sp)
  921. {
  922. register hash_t *hp = &sp->enc_hashtab[HSIZE-1];
  923. register long i = HSIZE-8;
  924.   do {
  925. i -= 8;
  926. hp[-7].hash = -1;
  927. hp[-6].hash = -1;
  928. hp[-5].hash = -1;
  929. hp[-4].hash = -1;
  930. hp[-3].hash = -1;
  931. hp[-2].hash = -1;
  932. hp[-1].hash = -1;
  933. hp[ 0].hash = -1;
  934. hp -= 8;
  935. } while (i >= 0);
  936.      for (i += 8; i > 0; i--, hp--)
  937. hp->hash = -1;
  938. }
  939. static void
  940. LZWCleanup(TIFF* tif)
  941. {
  942. (void)TIFFPredictorCleanup(tif);
  943. assert(tif->tif_data != 0);
  944. if (DecoderState(tif)->dec_codetab)
  945. _TIFFfree(DecoderState(tif)->dec_codetab);
  946. if (EncoderState(tif)->enc_hashtab)
  947. _TIFFfree(EncoderState(tif)->enc_hashtab);
  948. _TIFFfree(tif->tif_data);
  949. tif->tif_data = NULL;
  950. _TIFFSetDefaultCompressionState(tif);
  951. }
  952. int
  953. TIFFInitLZW(TIFF* tif, int scheme)
  954. {
  955. assert(scheme == COMPRESSION_LZW);
  956. /*
  957.  * Allocate state block so tag methods have storage to record values.
  958.  */
  959. tif->tif_data = (tidata_t) _TIFFmalloc(sizeof (LZWCodecState));
  960. if (tif->tif_data == NULL)
  961. goto bad;
  962. DecoderState(tif)->dec_codetab = NULL;
  963. DecoderState(tif)->dec_decode = NULL;
  964. EncoderState(tif)->enc_hashtab = NULL;
  965.         LZWState(tif)->rw_mode = tif->tif_mode;
  966. /*
  967.  * Install codec methods.
  968.  */
  969. tif->tif_setupdecode = LZWSetupDecode;
  970. tif->tif_predecode = LZWPreDecode;
  971. tif->tif_decoderow = LZWDecode;
  972. tif->tif_decodestrip = LZWDecode;
  973. tif->tif_decodetile = LZWDecode;
  974. tif->tif_setupencode = LZWSetupEncode;
  975. tif->tif_preencode = LZWPreEncode;
  976. tif->tif_postencode = LZWPostEncode;
  977. tif->tif_encoderow = LZWEncode;
  978. tif->tif_encodestrip = LZWEncode;
  979. tif->tif_encodetile = LZWEncode;
  980. tif->tif_cleanup = LZWCleanup;
  981. /*
  982.  * Setup predictor setup.
  983.  */
  984. (void) TIFFPredictorInit(tif);
  985. return (1);
  986. bad:
  987. TIFFErrorExt(tif->tif_clientdata, "TIFFInitLZW", 
  988.      "No space for LZW state block");
  989. return (0);
  990. }
  991. /*
  992.  * Copyright (c) 1985, 1986 The Regents of the University of California.
  993.  * All rights reserved.
  994.  *
  995.  * This code is derived from software contributed to Berkeley by
  996.  * James A. Woods, derived from original work by Spencer Thomas
  997.  * and Joseph Orost.
  998.  *
  999.  * Redistribution and use in source and binary forms are permitted
  1000.  * provided that the above copyright notice and this paragraph are
  1001.  * duplicated in all such forms and that any documentation,
  1002.  * advertising materials, and other materials related to such
  1003.  * distribution and use acknowledge that the software was developed
  1004.  * by the University of California, Berkeley.  The name of the
  1005.  * University may not be used to endorse or promote products derived
  1006.  * from this software without specific prior written permission.
  1007.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  1008.  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  1009.  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1010.  */
  1011. #endif /* LZW_SUPPORT */
  1012. /* vim: set ts=8 sts=8 sw=8 noet: */