| Index: jdhuff.h
|
| diff --git a/jdhuff.h b/jdhuff.h
|
| index 027177b328cda99e363242787fc866a0d966d690..3f15d71a8140a98f5b9c008c6eb9a6bed996c96d 100644
|
| --- a/jdhuff.h
|
| +++ b/jdhuff.h
|
| @@ -3,33 +3,28 @@
|
| *
|
| * This file was part of the Independent JPEG Group's software:
|
| * Copyright (C) 1991-1997, Thomas G. Lane.
|
| - * Modifications:
|
| - * Copyright (C) 2010-2011, D. R. Commander.
|
| - * For conditions of distribution and use, see the accompanying README file.
|
| + * libjpeg-turbo Modifications:
|
| + * Copyright (C) 2010-2011, 2015-2016, D. R. Commander.
|
| + * For conditions of distribution and use, see the accompanying README.ijg
|
| + * file.
|
| *
|
| * This file contains declarations for Huffman entropy decoding routines
|
| * that are shared between the sequential decoder (jdhuff.c) and the
|
| * progressive decoder (jdphuff.c). No other modules need to see these.
|
| */
|
|
|
| -/* Short forms of external names for systems with brain-damaged linkers. */
|
| -
|
| -#ifdef NEED_SHORT_EXTERNAL_NAMES
|
| -#define jpeg_make_d_derived_tbl jMkDDerived
|
| -#define jpeg_fill_bit_buffer jFilBitBuf
|
| -#define jpeg_huff_decode jHufDecode
|
| -#endif /* NEED_SHORT_EXTERNAL_NAMES */
|
| +#include "jconfigint.h"
|
|
|
|
|
| /* Derived data constructed for each Huffman table */
|
|
|
| -#define HUFF_LOOKAHEAD 8 /* # of bits of lookahead */
|
| +#define HUFF_LOOKAHEAD 8 /* # of bits of lookahead */
|
|
|
| typedef struct {
|
| /* Basic tables: (element [0] of each array is unused) */
|
| - INT32 maxcode[18]; /* largest code of length k (-1 if none) */
|
| + JLONG maxcode[18]; /* largest code of length k (-1 if none) */
|
| /* (maxcode[17] is a sentinel to ensure jpeg_huff_decode terminates) */
|
| - INT32 valoffset[18]; /* huffval[] offset for codes of length k */
|
| + JLONG valoffset[18]; /* huffval[] offset for codes of length k */
|
| /* valoffset[k] = huffval[] index of 1st symbol of code length k, less
|
| * the smallest code of length k; so given a code of length k, the
|
| * corresponding symbol is huffval[code + valoffset[k]]
|
| @@ -53,8 +48,8 @@ typedef struct {
|
|
|
| /* Expand a Huffman table definition into the derived format */
|
| EXTERN(void) jpeg_make_d_derived_tbl
|
| - JPP((j_decompress_ptr cinfo, boolean isDC, int tblno,
|
| - d_derived_tbl ** pdtbl));
|
| + (j_decompress_ptr cinfo, boolean isDC, int tblno,
|
| + d_derived_tbl ** pdtbl);
|
|
|
|
|
| /*
|
| @@ -75,15 +70,19 @@ EXTERN(void) jpeg_make_d_derived_tbl
|
| * necessary.
|
| */
|
|
|
| -#if __WORDSIZE == 64 || defined(_WIN64)
|
| +#if !defined(_WIN32) && !defined(SIZEOF_SIZE_T)
|
| +#error Cannot determine word size
|
| +#endif
|
| +
|
| +#if SIZEOF_SIZE_T==8 || defined(_WIN64)
|
|
|
| -typedef size_t bit_buf_type; /* type of bit-extraction buffer */
|
| -#define BIT_BUF_SIZE 64 /* size of buffer in bits */
|
| +typedef size_t bit_buf_type; /* type of bit-extraction buffer */
|
| +#define BIT_BUF_SIZE 64 /* size of buffer in bits */
|
|
|
| #else
|
|
|
| -typedef INT32 bit_buf_type; /* type of bit-extraction buffer */
|
| -#define BIT_BUF_SIZE 32 /* size of buffer in bits */
|
| +typedef unsigned long bit_buf_type; /* type of bit-extraction buffer */
|
| +#define BIT_BUF_SIZE 32 /* size of buffer in bits */
|
|
|
| #endif
|
|
|
| @@ -94,43 +93,43 @@ typedef INT32 bit_buf_type; /* type of bit-extraction buffer */
|
| * because not all machines measure sizeof in 8-bit bytes.
|
| */
|
|
|
| -typedef struct { /* Bitreading state saved across MCUs */
|
| - bit_buf_type get_buffer; /* current bit-extraction buffer */
|
| - int bits_left; /* # of unused bits in it */
|
| +typedef struct { /* Bitreading state saved across MCUs */
|
| + bit_buf_type get_buffer; /* current bit-extraction buffer */
|
| + int bits_left; /* # of unused bits in it */
|
| } bitread_perm_state;
|
|
|
| -typedef struct { /* Bitreading working state within an MCU */
|
| +typedef struct { /* Bitreading working state within an MCU */
|
| /* Current data source location */
|
| /* We need a copy, rather than munging the original, in case of suspension */
|
| - const JOCTET * next_input_byte; /* => next byte to read from source */
|
| - size_t bytes_in_buffer; /* # of bytes remaining in source buffer */
|
| + const JOCTET *next_input_byte; /* => next byte to read from source */
|
| + size_t bytes_in_buffer; /* # of bytes remaining in source buffer */
|
| /* Bit input buffer --- note these values are kept in register variables,
|
| * not in this struct, inside the inner loops.
|
| */
|
| - bit_buf_type get_buffer; /* current bit-extraction buffer */
|
| - int bits_left; /* # of unused bits in it */
|
| + bit_buf_type get_buffer; /* current bit-extraction buffer */
|
| + int bits_left; /* # of unused bits in it */
|
| /* Pointer needed by jpeg_fill_bit_buffer. */
|
| - j_decompress_ptr cinfo; /* back link to decompress master record */
|
| + j_decompress_ptr cinfo; /* back link to decompress master record */
|
| } bitread_working_state;
|
|
|
| /* Macros to declare and load/save bitread local variables. */
|
| #define BITREAD_STATE_VARS \
|
| - register bit_buf_type get_buffer; \
|
| - register int bits_left; \
|
| - bitread_working_state br_state
|
| + register bit_buf_type get_buffer; \
|
| + register int bits_left; \
|
| + bitread_working_state br_state
|
|
|
| #define BITREAD_LOAD_STATE(cinfop,permstate) \
|
| - br_state.cinfo = cinfop; \
|
| - br_state.next_input_byte = cinfop->src->next_input_byte; \
|
| - br_state.bytes_in_buffer = cinfop->src->bytes_in_buffer; \
|
| - get_buffer = permstate.get_buffer; \
|
| - bits_left = permstate.bits_left;
|
| + br_state.cinfo = cinfop; \
|
| + br_state.next_input_byte = cinfop->src->next_input_byte; \
|
| + br_state.bytes_in_buffer = cinfop->src->bytes_in_buffer; \
|
| + get_buffer = permstate.get_buffer; \
|
| + bits_left = permstate.bits_left;
|
|
|
| #define BITREAD_SAVE_STATE(cinfop,permstate) \
|
| - cinfop->src->next_input_byte = br_state.next_input_byte; \
|
| - cinfop->src->bytes_in_buffer = br_state.bytes_in_buffer; \
|
| - permstate.get_buffer = get_buffer; \
|
| - permstate.bits_left = bits_left
|
| + cinfop->src->next_input_byte = br_state.next_input_byte; \
|
| + cinfop->src->bytes_in_buffer = br_state.bytes_in_buffer; \
|
| + permstate.get_buffer = get_buffer; \
|
| + permstate.bits_left = bits_left
|
|
|
| /*
|
| * These macros provide the in-line portion of bit fetching.
|
| @@ -138,37 +137,37 @@ typedef struct { /* Bitreading working state within an MCU */
|
| * before using GET_BITS, PEEK_BITS, or DROP_BITS.
|
| * The variables get_buffer and bits_left are assumed to be locals,
|
| * but the state struct might not be (jpeg_huff_decode needs this).
|
| - * CHECK_BIT_BUFFER(state,n,action);
|
| - * Ensure there are N bits in get_buffer; if suspend, take action.
|
| + * CHECK_BIT_BUFFER(state,n,action);
|
| + * Ensure there are N bits in get_buffer; if suspend, take action.
|
| * val = GET_BITS(n);
|
| - * Fetch next N bits.
|
| + * Fetch next N bits.
|
| * val = PEEK_BITS(n);
|
| - * Fetch next N bits without removing them from the buffer.
|
| - * DROP_BITS(n);
|
| - * Discard next N bits.
|
| + * Fetch next N bits without removing them from the buffer.
|
| + * DROP_BITS(n);
|
| + * Discard next N bits.
|
| * The value N should be a simple variable, not an expression, because it
|
| * is evaluated multiple times.
|
| */
|
|
|
| #define CHECK_BIT_BUFFER(state,nbits,action) \
|
| - { if (bits_left < (nbits)) { \
|
| - if (! jpeg_fill_bit_buffer(&(state),get_buffer,bits_left,nbits)) \
|
| - { action; } \
|
| - get_buffer = (state).get_buffer; bits_left = (state).bits_left; } }
|
| + { if (bits_left < (nbits)) { \
|
| + if (! jpeg_fill_bit_buffer(&(state),get_buffer,bits_left,nbits)) \
|
| + { action; } \
|
| + get_buffer = (state).get_buffer; bits_left = (state).bits_left; } }
|
|
|
| #define GET_BITS(nbits) \
|
| - (((int) (get_buffer >> (bits_left -= (nbits)))) & ((1<<(nbits))-1))
|
| + (((int) (get_buffer >> (bits_left -= (nbits)))) & ((1<<(nbits))-1))
|
|
|
| #define PEEK_BITS(nbits) \
|
| - (((int) (get_buffer >> (bits_left - (nbits)))) & ((1<<(nbits))-1))
|
| + (((int) (get_buffer >> (bits_left - (nbits)))) & ((1<<(nbits))-1))
|
|
|
| #define DROP_BITS(nbits) \
|
| - (bits_left -= (nbits))
|
| + (bits_left -= (nbits))
|
|
|
| /* Load up the bit buffer to a depth of at least nbits */
|
| EXTERN(boolean) jpeg_fill_bit_buffer
|
| - JPP((bitread_working_state * state, register bit_buf_type get_buffer,
|
| - register int bits_left, int nbits));
|
| + (bitread_working_state *state, register bit_buf_type get_buffer,
|
| + register int bits_left, int nbits);
|
|
|
|
|
| /*
|
| @@ -204,7 +203,7 @@ EXTERN(boolean) jpeg_fill_bit_buffer
|
| } else { \
|
| slowlabel: \
|
| if ((result=jpeg_huff_decode(&state,get_buffer,bits_left,htbl,nb)) < 0) \
|
| - { failaction; } \
|
| + { failaction; } \
|
| get_buffer = state.get_buffer; bits_left = state.bits_left; \
|
| } \
|
| }
|
| @@ -233,5 +232,5 @@ slowlabel: \
|
|
|
| /* Out-of-line case for Huffman code fetching */
|
| EXTERN(int) jpeg_huff_decode
|
| - JPP((bitread_working_state * state, register bit_buf_type get_buffer,
|
| - register int bits_left, d_derived_tbl * htbl, int min_bits));
|
| + (bitread_working_state *state, register bit_buf_type get_buffer,
|
| + register int bits_left, d_derived_tbl *htbl, int min_bits);
|
|
|