Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4680 | right-hear | 1 | /* |
2 | jbig2dec |
||
3 | |||
4 | Copyright (C) 2001-2005 Artifex Software, Inc. |
||
5 | |||
6 | This software is distributed under license and may not |
||
7 | be copied, modified or distributed except as expressly |
||
8 | authorized under the terms of the license contained in |
||
9 | the file LICENSE in this distribution. |
||
10 | |||
11 | For further licensing information refer to http://artifex.com/ or |
||
12 | contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, |
||
13 | San Rafael, CA 94903, U.S.A., +1(415)492-9861. |
||
14 | */ |
||
15 | |||
16 | #ifndef JBIG2_HUFFMAN_H |
||
17 | #define JBIG2_HUFFMAN_H |
||
18 | |||
19 | /* Huffman coder interface */ |
||
20 | |||
21 | typedef struct _Jbig2HuffmanEntry Jbig2HuffmanEntry; |
||
22 | typedef struct _Jbig2HuffmanState Jbig2HuffmanState; |
||
23 | typedef struct _Jbig2HuffmanTable Jbig2HuffmanTable; |
||
24 | typedef struct _Jbig2HuffmanParams Jbig2HuffmanParams; |
||
25 | |||
26 | struct _Jbig2HuffmanEntry { |
||
27 | union { |
||
28 | int32_t RANGELOW; |
||
29 | Jbig2HuffmanTable *ext_table; |
||
30 | } u; |
||
31 | byte PREFLEN; |
||
32 | byte RANGELEN; |
||
33 | byte flags; |
||
34 | }; |
||
35 | |||
36 | struct _Jbig2HuffmanTable { |
||
37 | int log_table_size; |
||
38 | Jbig2HuffmanEntry *entries; |
||
39 | }; |
||
40 | |||
41 | typedef struct _Jbig2HuffmanLine Jbig2HuffmanLine; |
||
42 | |||
43 | struct _Jbig2HuffmanLine { |
||
44 | int PREFLEN; |
||
45 | int RANGELEN; |
||
46 | int RANGELOW; |
||
47 | }; |
||
48 | |||
49 | struct _Jbig2HuffmanParams { |
||
50 | bool HTOOB; |
||
51 | int n_lines; |
||
52 | const Jbig2HuffmanLine *lines; |
||
53 | }; |
||
54 | |||
55 | Jbig2HuffmanState * |
||
56 | jbig2_huffman_new (Jbig2Ctx *ctx, Jbig2WordStream *ws); |
||
57 | |||
58 | void |
||
59 | jbig2_huffman_free (Jbig2Ctx *ctx, Jbig2HuffmanState *hs); |
||
60 | |||
61 | void |
||
62 | jbig2_huffman_skip(Jbig2HuffmanState *hs); |
||
63 | |||
64 | void jbig2_huffman_advance(Jbig2HuffmanState *hs, int offset); |
||
65 | |||
66 | int |
||
67 | jbig2_huffman_offset(Jbig2HuffmanState *hs); |
||
68 | |||
69 | int32_t |
||
70 | jbig2_huffman_get (Jbig2HuffmanState *hs, |
||
71 | const Jbig2HuffmanTable *table, bool *oob); |
||
72 | |||
73 | int32_t |
||
74 | jbig2_huffman_get_bits (Jbig2HuffmanState *hs, const int bits); |
||
75 | |||
76 | #ifdef JBIG2_DEBUG |
||
77 | void jbig2_dump_huffman_state(Jbig2HuffmanState *hs); |
||
78 | void jbig2_dump_huffman_binary(Jbig2HuffmanState *hs); |
||
79 | #endif |
||
80 | |||
81 | Jbig2HuffmanTable * |
||
82 | jbig2_build_huffman_table (Jbig2Ctx *ctx, const Jbig2HuffmanParams *params); |
||
83 | |||
84 | void |
||
85 | jbig2_release_huffman_table (Jbig2Ctx *ctx, Jbig2HuffmanTable *table); |
||
86 | |||
87 | /* standard Huffman templates defined by the specification */ |
||
88 | extern const Jbig2HuffmanParams jbig2_huffman_params_A; /* Table B.1 */ |
||
89 | extern const Jbig2HuffmanParams jbig2_huffman_params_B; /* Table B.2 */ |
||
90 | extern const Jbig2HuffmanParams jbig2_huffman_params_C; /* Table B.3 */ |
||
91 | extern const Jbig2HuffmanParams jbig2_huffman_params_D; /* Table B.4 */ |
||
92 | extern const Jbig2HuffmanParams jbig2_huffman_params_E; /* Table B.5 */ |
||
93 | extern const Jbig2HuffmanParams jbig2_huffman_params_F; /* Table B.6 */ |
||
94 | extern const Jbig2HuffmanParams jbig2_huffman_params_G; /* Table B.7 */ |
||
95 | extern const Jbig2HuffmanParams jbig2_huffman_params_H; /* Table B.8 */ |
||
96 | extern const Jbig2HuffmanParams jbig2_huffman_params_I; /* Table B.9 */ |
||
97 | extern const Jbig2HuffmanParams jbig2_huffman_params_J; /* Table B.10 */ |
||
98 | extern const Jbig2HuffmanParams jbig2_huffman_params_K; /* Table B.11 */ |
||
99 | extern const Jbig2HuffmanParams jbig2_huffman_params_L; /* Table B.12 */ |
||
100 | extern const Jbig2HuffmanParams jbig2_huffman_params_M; /* Table B.13 */ |
||
101 | extern const Jbig2HuffmanParams jbig2_huffman_params_N; /* Table B.14 */ |
||
102 | extern const Jbig2HuffmanParams jbig2_huffman_params_O; /* Table B.15 */ |
||
103 | |||
104 | |||
105 | #endif /* JBIG2_HUFFMAN_H */ |