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