]> de.git.xonotic.org Git - xonotic/netradiant.git/blob - libs/jpeg6/jdhuff.cpp
remove RSA's md4.c, replace by DP's
[xonotic/netradiant.git] / libs / jpeg6 / jdhuff.cpp
1 /*
2  * jdhuff.c
3  *
4  * Copyright (C) 1991-1995, Thomas G. Lane.
5  * This file is part of the Independent JPEG Group's software.
6  * For conditions of distribution and use, see the accompanying README file.
7  *
8  * This file contains Huffman entropy decoding routines.
9  *
10  * Much of the complexity here has to do with supporting input suspension.
11  * If the data source module demands suspension, we want to be able to back
12  * up to the start of the current MCU.  To do this, we copy state variables
13  * into local working storage, and update them back to the permanent
14  * storage only upon successful completion of an MCU.
15  */
16
17 #define JPEG_INTERNALS
18 #include "jinclude.h"
19 #include "radiant_jpeglib.h"
20 #include "jdhuff.h"             /* Declarations shared with jdphuff.c */
21
22
23 /*
24  * Expanded entropy decoder object for Huffman decoding.
25  *
26  * The savable_state subrecord contains fields that change within an MCU,
27  * but must not be updated permanently until we complete the MCU.
28  */
29
30 typedef struct {
31   int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */
32 } savable_state;
33
34 /* This macro is to work around compilers with missing or broken
35  * structure assignment.  You'll need to fix this code if you have
36  * such a compiler and you change MAX_COMPS_IN_SCAN.
37  */
38
39 #ifndef NO_STRUCT_ASSIGN
40 #define ASSIGN_STATE(dest,src)  ((dest) = (src))
41 #else
42 #if MAX_COMPS_IN_SCAN == 4
43 #define ASSIGN_STATE(dest,src)  \
44         ((dest).last_dc_val[0] = (src).last_dc_val[0], \
45          (dest).last_dc_val[1] = (src).last_dc_val[1], \
46          (dest).last_dc_val[2] = (src).last_dc_val[2], \
47          (dest).last_dc_val[3] = (src).last_dc_val[3])
48 #endif
49 #endif
50
51
52 typedef struct {
53   struct jpeg_entropy_decoder pub; /* public fields */
54
55   /* These fields are loaded into local variables at start of each MCU.
56    * In case of suspension, we exit WITHOUT updating them.
57    */
58   bitread_perm_state bitstate;  /* Bit buffer at start of MCU */
59   savable_state saved;          /* Other state at start of MCU */
60
61   /* These fields are NOT loaded into local working state. */
62   unsigned int restarts_to_go;  /* MCUs left in this restart interval */
63
64   /* Pointers to derived tables (these workspaces have image lifespan) */
65   d_derived_tbl * dc_derived_tbls[NUM_HUFF_TBLS];
66   d_derived_tbl * ac_derived_tbls[NUM_HUFF_TBLS];
67 } huff_entropy_decoder;
68
69 typedef huff_entropy_decoder * huff_entropy_ptr;
70
71
72 /*
73  * Initialize for a Huffman-compressed scan.
74  */
75
76 METHODDEF void
77 start_pass_huff_decoder (j_decompress_ptr cinfo)
78 {
79   huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
80   int ci, dctbl, actbl;
81   jpeg_component_info * compptr;
82
83   /* Check that the scan parameters Ss, Se, Ah/Al are OK for sequential JPEG.
84    * This ought to be an error condition, but we make it a warning because
85    * there are some baseline files out there with all zeroes in these bytes.
86    */
87   if (cinfo->Ss != 0 || cinfo->Se != DCTSIZE2-1 ||
88       cinfo->Ah != 0 || cinfo->Al != 0)
89     WARNMS(cinfo, JWRN_NOT_SEQUENTIAL);
90
91   for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
92     compptr = cinfo->cur_comp_info[ci];
93     dctbl = compptr->dc_tbl_no;
94     actbl = compptr->ac_tbl_no;
95     /* Make sure requested tables are present */
96     if (dctbl < 0 || dctbl >= NUM_HUFF_TBLS ||
97         cinfo->dc_huff_tbl_ptrs[dctbl] == NULL)
98       ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, dctbl);
99     if (actbl < 0 || actbl >= NUM_HUFF_TBLS ||
100         cinfo->ac_huff_tbl_ptrs[actbl] == NULL)
101       ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, actbl);
102     /* Compute derived values for Huffman tables */
103     /* We may do this more than once for a table, but it's not expensive */
104     jpeg_make_d_derived_tbl(cinfo, cinfo->dc_huff_tbl_ptrs[dctbl],
105                             & entropy->dc_derived_tbls[dctbl]);
106     jpeg_make_d_derived_tbl(cinfo, cinfo->ac_huff_tbl_ptrs[actbl],
107                             & entropy->ac_derived_tbls[actbl]);
108     /* Initialize DC predictions to 0 */
109     entropy->saved.last_dc_val[ci] = 0;
110   }
111
112   /* Initialize bitread state variables */
113   entropy->bitstate.bits_left = 0;
114   entropy->bitstate.get_buffer = 0; /* unnecessary, but keeps Purify quiet */
115   entropy->bitstate.printed_eod = FALSE;
116
117   /* Initialize restart counter */
118   entropy->restarts_to_go = cinfo->restart_interval;
119 }
120
121
122 /*
123  * Compute the derived values for a Huffman table.
124  * Note this is also used by jdphuff.c.
125  */
126
127 GLOBAL void
128 jpeg_make_d_derived_tbl (j_decompress_ptr cinfo, JHUFF_TBL * htbl,
129                          d_derived_tbl ** pdtbl)
130 {
131   d_derived_tbl *dtbl;
132   int p, i, l, si;
133   int lookbits, ctr;
134   char huffsize[257];
135   unsigned int huffcode[257];
136   unsigned int code;
137
138   /* Allocate a workspace if we haven't already done so. */
139   if (*pdtbl == NULL)
140     *pdtbl = (d_derived_tbl *)
141       (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
142                                   SIZEOF(d_derived_tbl));
143   dtbl = *pdtbl;
144   dtbl->pub = htbl;             /* fill in back link */
145   
146   /* Figure C.1: make table of Huffman code length for each symbol */
147   /* Note that this is in code-length order. */
148
149   p = 0;
150   for (l = 1; l <= 16; l++) {
151     for (i = 1; i <= (int) htbl->bits[l]; i++)
152       huffsize[p++] = (char) l;
153   }
154   huffsize[p] = 0;
155   
156   /* Figure C.2: generate the codes themselves */
157   /* Note that this is in code-length order. */
158   
159   code = 0;
160   si = huffsize[0];
161   p = 0;
162   while (huffsize[p]) {
163     while (((int) huffsize[p]) == si) {
164       huffcode[p++] = code;
165       code++;
166     }
167     code <<= 1;
168     si++;
169   }
170
171   /* Figure F.15: generate decoding tables for bit-sequential decoding */
172
173   p = 0;
174   for (l = 1; l <= 16; l++) {
175     if (htbl->bits[l]) {
176       dtbl->valptr[l] = p; /* huffval[] index of 1st symbol of code length l */
177       dtbl->mincode[l] = huffcode[p]; /* minimum code of length l */
178       p += htbl->bits[l];
179       dtbl->maxcode[l] = huffcode[p-1]; /* maximum code of length l */
180     } else {
181       dtbl->maxcode[l] = -1;    /* -1 if no codes of this length */
182     }
183   }
184   dtbl->maxcode[17] = 0xFFFFFL; /* ensures jpeg_huff_decode terminates */
185
186   /* Compute lookahead tables to speed up decoding.
187    * First we set all the table entries to 0, indicating "too long";
188    * then we iterate through the Huffman codes that are short enough and
189    * fill in all the entries that correspond to bit sequences starting
190    * with that code.
191    */
192
193   MEMZERO(dtbl->look_nbits, SIZEOF(dtbl->look_nbits));
194
195   p = 0;
196   for (l = 1; l <= HUFF_LOOKAHEAD; l++) {
197     for (i = 1; i <= (int) htbl->bits[l]; i++, p++) {
198       /* l = current code's length, p = its index in huffcode[] & huffval[]. */
199       /* Generate left-justified code followed by all possible bit sequences */
200       lookbits = huffcode[p] << (HUFF_LOOKAHEAD-l);
201       for (ctr = 1 << (HUFF_LOOKAHEAD-l); ctr > 0; ctr--) {
202         dtbl->look_nbits[lookbits] = l;
203         dtbl->look_sym[lookbits] = htbl->huffval[p];
204         lookbits++;
205       }
206     }
207   }
208 }
209
210
211 /*
212  * Out-of-line code for bit fetching (shared with jdphuff.c).
213  * See jdhuff.h for info about usage.
214  * Note: current values of get_buffer and bits_left are passed as parameters,
215  * but are returned in the corresponding fields of the state struct.
216  *
217  * On most machines MIN_GET_BITS should be 25 to allow the full 32-bit width
218  * of get_buffer to be used.  (On machines with wider words, an even larger
219  * buffer could be used.)  However, on some machines 32-bit shifts are
220  * quite slow and take time proportional to the number of places shifted.
221  * (This is true with most PC compilers, for instance.)  In this case it may
222  * be a win to set MIN_GET_BITS to the minimum value of 15.  This reduces the
223  * average shift distance at the cost of more calls to jpeg_fill_bit_buffer.
224  */
225
226 #ifdef SLOW_SHIFT_32
227 #define MIN_GET_BITS  15        /* minimum allowable value */
228 #else
229 #define MIN_GET_BITS  (BIT_BUF_SIZE-7)
230 #endif
231
232
233 GLOBAL boolean
234 jpeg_fill_bit_buffer (bitread_working_state * state,
235                       register bit_buf_type get_buffer, register int bits_left,
236                       int nbits)
237 /* Load up the bit buffer to a depth of at least nbits */
238 {
239   /* Copy heavily used state fields into locals (hopefully registers) */
240   register const JOCTET * next_input_byte = state->next_input_byte;
241   register size_t bytes_in_buffer = state->bytes_in_buffer;
242   register int c;
243
244   /* Attempt to load at least MIN_GET_BITS bits into get_buffer. */
245   /* (It is assumed that no request will be for more than that many bits.) */
246
247   while (bits_left < MIN_GET_BITS) {
248     /* Attempt to read a byte */
249     if (state->unread_marker != 0)
250       goto no_more_data;        /* can't advance past a marker */
251
252     if (bytes_in_buffer == 0) {
253       if (! (*state->cinfo->src->fill_input_buffer) (state->cinfo))
254         return FALSE;
255       next_input_byte = state->cinfo->src->next_input_byte;
256       bytes_in_buffer = state->cinfo->src->bytes_in_buffer;
257     }
258     bytes_in_buffer--;
259     c = GETJOCTET(*next_input_byte++);
260
261     /* If it's 0xFF, check and discard stuffed zero byte */
262     if (c == 0xFF) {
263       do {
264         if (bytes_in_buffer == 0) {
265           if (! (*state->cinfo->src->fill_input_buffer) (state->cinfo))
266             return FALSE;
267           next_input_byte = state->cinfo->src->next_input_byte;
268           bytes_in_buffer = state->cinfo->src->bytes_in_buffer;
269         }
270         bytes_in_buffer--;
271         c = GETJOCTET(*next_input_byte++);
272       } while (c == 0xFF);
273
274       if (c == 0) {
275         /* Found FF/00, which represents an FF data byte */
276         c = 0xFF;
277       } else {
278         /* Oops, it's actually a marker indicating end of compressed data. */
279         /* Better put it back for use later */
280         state->unread_marker = c;
281
282       no_more_data:
283         /* There should be enough bits still left in the data segment; */
284         /* if so, just break out of the outer while loop. */
285         if (bits_left >= nbits)
286           break;
287         /* Uh-oh.  Report corrupted data to user and stuff zeroes into
288          * the data stream, so that we can produce some kind of image.
289          * Note that this code will be repeated for each byte demanded
290          * for the rest of the segment.  We use a nonvolatile flag to ensure
291          * that only one warning message appears.
292          */
293         if (! *(state->printed_eod_ptr)) {
294           WARNMS(state->cinfo, JWRN_HIT_MARKER);
295           *(state->printed_eod_ptr) = TRUE;
296         }
297         c = 0;                  /* insert a zero byte into bit buffer */
298       }
299     }
300
301     /* OK, load c into get_buffer */
302     get_buffer = (get_buffer << 8) | c;
303     bits_left += 8;
304   }
305
306   /* Unload the local registers */
307   state->next_input_byte = next_input_byte;
308   state->bytes_in_buffer = bytes_in_buffer;
309   state->get_buffer = get_buffer;
310   state->bits_left = bits_left;
311
312   return TRUE;
313 }
314
315
316 /*
317  * Out-of-line code for Huffman code decoding.
318  * See jdhuff.h for info about usage.
319  */
320
321 GLOBAL int
322 jpeg_huff_decode (bitread_working_state * state,
323                   register bit_buf_type get_buffer, register int bits_left,
324                   d_derived_tbl * htbl, int min_bits)
325 {
326   register int l = min_bits;
327   register INT32 code;
328
329   /* HUFF_DECODE has determined that the code is at least min_bits */
330   /* bits long, so fetch that many bits in one swoop. */
331
332   CHECK_BIT_BUFFER(*state, l, return -1);
333   code = GET_BITS(l);
334
335   /* Collect the rest of the Huffman code one bit at a time. */
336   /* This is per Figure F.16 in the JPEG spec. */
337
338   while (code > htbl->maxcode[l]) {
339     code <<= 1;
340     CHECK_BIT_BUFFER(*state, 1, return -1);
341     code |= GET_BITS(1);
342     l++;
343   }
344
345   /* Unload the local registers */
346   state->get_buffer = get_buffer;
347   state->bits_left = bits_left;
348
349   /* With garbage input we may reach the sentinel value l = 17. */
350
351   if (l > 16) {
352     WARNMS(state->cinfo, JWRN_HUFF_BAD_CODE);
353     return 0;                   /* fake a zero as the safest result */
354   }
355
356   return htbl->pub->huffval[ htbl->valptr[l] +
357                             ((int) (code - htbl->mincode[l])) ];
358 }
359
360
361 /*
362  * Figure F.12: extend sign bit.
363  * On some machines, a shift and add will be faster than a table lookup.
364  */
365
366 #ifdef AVOID_TABLES
367
368 #define HUFF_EXTEND(x,s)  ((x) < (1<<((s)-1)) ? (x) + (((-1)<<(s)) + 1) : (x))
369
370 #else
371
372 #define HUFF_EXTEND(x,s)  ((x) < extend_test[s] ? (x) + extend_offset[s] : (x))
373
374 static const int extend_test[16] =   /* entry n is 2**(n-1) */
375   { 0, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080,
376     0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000 };
377
378 static const int extend_offset[16] = /* entry n is (-1 << n) + 1 */
379   { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1,
380     ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1,
381     ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1,
382     ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 };
383
384 #endif /* AVOID_TABLES */
385
386
387 /*
388  * Check for a restart marker & resynchronize decoder.
389  * Returns FALSE if must suspend.
390  */
391
392 LOCAL boolean
393 process_restart (j_decompress_ptr cinfo)
394 {
395   huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
396   int ci;
397
398   /* Throw away any unused bits remaining in bit buffer; */
399   /* include any full bytes in next_marker's count of discarded bytes */
400   cinfo->marker->discarded_bytes += entropy->bitstate.bits_left / 8;
401   entropy->bitstate.bits_left = 0;
402
403   /* Advance past the RSTn marker */
404   if (! (*cinfo->marker->read_restart_marker) (cinfo))
405     return FALSE;
406
407   /* Re-initialize DC predictions to 0 */
408   for (ci = 0; ci < cinfo->comps_in_scan; ci++)
409     entropy->saved.last_dc_val[ci] = 0;
410
411   /* Reset restart counter */
412   entropy->restarts_to_go = cinfo->restart_interval;
413
414   /* Next segment can get another out-of-data warning */
415   entropy->bitstate.printed_eod = FALSE;
416
417   return TRUE;
418 }
419
420
421 /*
422  * Decode and return one MCU's worth of Huffman-compressed coefficients.
423  * The coefficients are reordered from zigzag order into natural array order,
424  * but are not dequantized.
425  *
426  * The i'th block of the MCU is stored into the block pointed to by
427  * MCU_data[i].  WE ASSUME THIS AREA HAS BEEN ZEROED BY THE CALLER.
428  * (Wholesale zeroing is usually a little faster than retail...)
429  *
430  * Returns FALSE if data source requested suspension.  In that case no
431  * changes have been made to permanent state.  (Exception: some output
432  * coefficients may already have been assigned.  This is harmless for
433  * this module, since we'll just re-assign them on the next call.)
434  */
435
436 METHODDEF boolean
437 decode_mcu (j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
438 {
439   huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
440   register int s, k, r;
441   int blkn, ci;
442   JBLOCKROW block;
443   BITREAD_STATE_VARS;
444   savable_state state;
445   d_derived_tbl * dctbl;
446   d_derived_tbl * actbl;
447   jpeg_component_info * compptr;
448
449   /* Process restart marker if needed; may have to suspend */
450   if (cinfo->restart_interval) {
451     if (entropy->restarts_to_go == 0)
452       if (! process_restart(cinfo))
453         return FALSE;
454   }
455
456   /* Load up working state */
457   BITREAD_LOAD_STATE(cinfo,entropy->bitstate);
458   ASSIGN_STATE(state, entropy->saved);
459
460   /* Outer loop handles each block in the MCU */
461
462   for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
463     block = MCU_data[blkn];
464     ci = cinfo->MCU_membership[blkn];
465     compptr = cinfo->cur_comp_info[ci];
466     dctbl = entropy->dc_derived_tbls[compptr->dc_tbl_no];
467     actbl = entropy->ac_derived_tbls[compptr->ac_tbl_no];
468
469     /* Decode a single block's worth of coefficients */
470
471     /* Section F.2.2.1: decode the DC coefficient difference */
472     HUFF_DECODE(s, br_state, dctbl, return FALSE, label1);
473     if (s) {
474       CHECK_BIT_BUFFER(br_state, s, return FALSE);
475       r = GET_BITS(s);
476       s = HUFF_EXTEND(r, s);
477     }
478
479     /* Shortcut if component's values are not interesting */
480     if (! compptr->component_needed)
481       goto skip_ACs;
482
483     /* Convert DC difference to actual value, update last_dc_val */
484     s += state.last_dc_val[ci];
485     state.last_dc_val[ci] = s;
486     /* Output the DC coefficient (assumes jpeg_natural_order[0] = 0) */
487     (*block)[0] = (JCOEF) s;
488
489     /* Do we need to decode the AC coefficients for this component? */
490     if (compptr->DCT_scaled_size > 1) {
491
492       /* Section F.2.2.2: decode the AC coefficients */
493       /* Since zeroes are skipped, output area must be cleared beforehand */
494       for (k = 1; k < DCTSIZE2; k++) {
495         HUFF_DECODE(s, br_state, actbl, return FALSE, label2);
496       
497         r = s >> 4;
498         s &= 15;
499       
500         if (s) {
501           k += r;
502           CHECK_BIT_BUFFER(br_state, s, return FALSE);
503           r = GET_BITS(s);
504           s = HUFF_EXTEND(r, s);
505           /* Output coefficient in natural (dezigzagged) order.
506            * Note: the extra entries in jpeg_natural_order[] will save us
507            * if k >= DCTSIZE2, which could happen if the data is corrupted.
508            */
509           (*block)[jpeg_natural_order[k]] = (JCOEF) s;
510         } else {
511           if (r != 15)
512             break;
513           k += 15;
514         }
515       }
516
517     } else {
518 skip_ACs:
519
520       /* Section F.2.2.2: decode the AC coefficients */
521       /* In this path we just discard the values */
522       for (k = 1; k < DCTSIZE2; k++) {
523         HUFF_DECODE(s, br_state, actbl, return FALSE, label3);
524       
525         r = s >> 4;
526         s &= 15;
527       
528         if (s) {
529           k += r;
530           CHECK_BIT_BUFFER(br_state, s, return FALSE);
531           DROP_BITS(s);
532         } else {
533           if (r != 15)
534             break;
535           k += 15;
536         }
537       }
538
539     }
540   }
541
542   /* Completed MCU, so update state */
543   BITREAD_SAVE_STATE(cinfo,entropy->bitstate);
544   ASSIGN_STATE(entropy->saved, state);
545
546   /* Account for restart interval (no-op if not using restarts) */
547   entropy->restarts_to_go--;
548
549   return TRUE;
550 }
551
552
553 /*
554  * Module initialization routine for Huffman entropy decoding.
555  */
556
557 GLOBAL void
558 jinit_huff_decoder (j_decompress_ptr cinfo)
559 {
560   huff_entropy_ptr entropy;
561   int i;
562
563   entropy = (huff_entropy_ptr)
564     (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
565                                 SIZEOF(huff_entropy_decoder));
566   cinfo->entropy = (struct jpeg_entropy_decoder *) entropy;
567   entropy->pub.start_pass = start_pass_huff_decoder;
568   entropy->pub.decode_mcu = decode_mcu;
569
570   /* Mark tables unallocated */
571   for (i = 0; i < NUM_HUFF_TBLS; i++) {
572     entropy->dc_derived_tbls[i] = entropy->ac_derived_tbls[i] = NULL;
573   }
574 }