Subversion Repositories Kolibri OS

Rev

Go to most recent revision | 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 */