1f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org/* 2f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * jchuff.h 3f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * 4f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * Copyright (C) 1991-1997, Thomas G. Lane. 5f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * This file is part of the Independent JPEG Group's software. 6f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * For conditions of distribution and use, see the accompanying README file. 7f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * 8f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * This file contains declarations for Huffman entropy encoding routines 9f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * that are shared between the sequential encoder (jchuff.c) and the 10f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * progressive encoder (jcphuff.c). No other modules need to see these. 11f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org */ 12f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 13f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org/* The legal range of a DCT coefficient is 14f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * -1024 .. +1023 for 8-bit data; 15f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * -16384 .. +16383 for 12-bit data. 16f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * Hence the magnitude should always fit in 10 or 14 bits respectively. 17f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org */ 18f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 19f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#if BITS_IN_JSAMPLE == 8 20f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#define MAX_COEF_BITS 10 21f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#else 22f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#define MAX_COEF_BITS 14 23f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#endif 24f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 25f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org/* Derived data constructed for each Huffman table */ 26f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 27f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgtypedef struct { 28f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org unsigned int ehufco[256]; /* code for each symbol */ 29f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org char ehufsi[256]; /* length of code for each symbol */ 30f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* If no code has been allocated for a symbol S, ehufsi[S] contains 0 */ 31f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} c_derived_tbl; 32f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 33f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org/* Short forms of external names for systems with brain-damaged linkers. */ 34f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 35f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#ifdef NEED_SHORT_EXTERNAL_NAMES 36f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#define jpeg_make_c_derived_tbl jMkCDerived 37f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#define jpeg_gen_optimal_table jGenOptTbl 38f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#endif /* NEED_SHORT_EXTERNAL_NAMES */ 39f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 40f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org/* Expand a Huffman table definition into the derived format */ 41f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgEXTERN(void) jpeg_make_c_derived_tbl 42f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JPP((j_compress_ptr cinfo, boolean isDC, int tblno, 43f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org c_derived_tbl ** pdtbl)); 44f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 45f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org/* Generate an optimal table definition given the specified counts */ 46f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgEXTERN(void) jpeg_gen_optimal_table 47f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org JPP((j_compress_ptr cinfo, JHUFF_TBL * htbl, long freq[])); 48