1//========================================================================
2//
3// Stream-CCITT.h
4//
5// Tables for CCITT Fax decoding.
6//
7// Copyright 1996-2003 Glyph & Cog, LLC
8//
9//========================================================================
10
11//========================================================================
12//
13// Modified under the Poppler project - http://poppler.freedesktop.org
14//
15// All changes made under the Poppler project to this file are licensed
16// under GPL version 2 or later
17//
18// Copyright (C) 2008 Albert Astals Cid <aacid@kde.org>
19//
20// To see a description of the changes please see the Changelog file that
21// came with your tarball or type make ChangeLog if you are building from git
22//
23//========================================================================
24
25#ifndef STREAM_CCITT_H
26#define STREAM_CCITT_H
27
28struct CCITTCode
29{
30 short bits;
31 short n;
32};
33
34#define ccittEOL -2
35
36//------------------------------------------------------------------------
37// 2D codes
38//------------------------------------------------------------------------
39
40#define twoDimPass 0
41#define twoDimHoriz 1
42#define twoDimVert0 2
43#define twoDimVertR1 3
44#define twoDimVertL1 4
45#define twoDimVertR2 5
46#define twoDimVertL2 6
47#define twoDimVertR3 7
48#define twoDimVertL3 8
49
50// 1-7 bit codes
51static const CCITTCode twoDimTab1[128] = { { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, // 000000x
52 { .bits: 7, twoDimVertL3 }, // 0000010
53 { .bits: 7, twoDimVertR3 }, // 0000011
54 { .bits: 6, twoDimVertL2 }, { .bits: 6, twoDimVertL2 }, // 000010x
55 { .bits: 6, twoDimVertR2 }, { .bits: 6, twoDimVertR2 }, // 000011x
56 { .bits: 4, twoDimPass }, { .bits: 4, twoDimPass }, // 0001xxx
57 { .bits: 4, twoDimPass }, { .bits: 4, twoDimPass }, { .bits: 4, twoDimPass }, { .bits: 4, twoDimPass }, { .bits: 4, twoDimPass }, { .bits: 4, twoDimPass }, { .bits: 3, twoDimHoriz }, { .bits: 3, twoDimHoriz }, // 001xxxx
58 { .bits: 3, twoDimHoriz }, { .bits: 3, twoDimHoriz }, { .bits: 3, twoDimHoriz }, { .bits: 3, twoDimHoriz }, { .bits: 3, twoDimHoriz }, { .bits: 3, twoDimHoriz }, { .bits: 3, twoDimHoriz }, { .bits: 3, twoDimHoriz }, { .bits: 3, twoDimHoriz },
59 { .bits: 3, twoDimHoriz }, { .bits: 3, twoDimHoriz }, { .bits: 3, twoDimHoriz }, { .bits: 3, twoDimHoriz }, { .bits: 3, twoDimHoriz }, { .bits: 3, twoDimVertL1 }, { .bits: 3, twoDimVertL1 }, // 010xxxx
60 { .bits: 3, twoDimVertL1 }, { .bits: 3, twoDimVertL1 }, { .bits: 3, twoDimVertL1 }, { .bits: 3, twoDimVertL1 }, { .bits: 3, twoDimVertL1 }, { .bits: 3, twoDimVertL1 }, { .bits: 3, twoDimVertL1 }, { .bits: 3, twoDimVertL1 }, { .bits: 3, twoDimVertL1 },
61 { .bits: 3, twoDimVertL1 }, { .bits: 3, twoDimVertL1 }, { .bits: 3, twoDimVertL1 }, { .bits: 3, twoDimVertL1 }, { .bits: 3, twoDimVertL1 }, { .bits: 3, twoDimVertR1 }, { .bits: 3, twoDimVertR1 }, // 011xxxx
62 { .bits: 3, twoDimVertR1 }, { .bits: 3, twoDimVertR1 }, { .bits: 3, twoDimVertR1 }, { .bits: 3, twoDimVertR1 }, { .bits: 3, twoDimVertR1 }, { .bits: 3, twoDimVertR1 }, { .bits: 3, twoDimVertR1 }, { .bits: 3, twoDimVertR1 }, { .bits: 3, twoDimVertR1 },
63 { .bits: 3, twoDimVertR1 }, { .bits: 3, twoDimVertR1 }, { .bits: 3, twoDimVertR1 }, { .bits: 3, twoDimVertR1 }, { .bits: 3, twoDimVertR1 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, // 1xxxxxx
64 { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 },
65 { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 },
66 { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 },
67 { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 },
68 { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 },
69 { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 },
70 { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 }, { .bits: 1, twoDimVert0 } };
71
72//------------------------------------------------------------------------
73// white run lengths
74//------------------------------------------------------------------------
75
76// 11-12 bit codes (upper 7 bits are 0)
77static const CCITTCode whiteTab1[32] = {
78 { .bits: -1, .n: -1 }, // 00000
79 { .bits: 12, ccittEOL }, // 00001
80 { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, // 0001x
81 { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, // 001xx
82 { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, // 010xx
83 { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, // 011xx
84 { .bits: 11, .n: 1792 }, { .bits: 11, .n: 1792 }, // 1000x
85 { .bits: 12, .n: 1984 }, // 10010
86 { .bits: 12, .n: 2048 }, // 10011
87 { .bits: 12, .n: 2112 }, // 10100
88 { .bits: 12, .n: 2176 }, // 10101
89 { .bits: 12, .n: 2240 }, // 10110
90 { .bits: 12, .n: 2304 }, // 10111
91 { .bits: 11, .n: 1856 }, { .bits: 11, .n: 1856 }, // 1100x
92 { .bits: 11, .n: 1920 }, { .bits: 11, .n: 1920 }, // 1101x
93 { .bits: 12, .n: 2368 }, // 11100
94 { .bits: 12, .n: 2432 }, // 11101
95 { .bits: 12, .n: 2496 }, // 11110
96 { .bits: 12, .n: 2560 } // 11111
97};
98
99// 1-9 bit codes
100static const CCITTCode whiteTab2[512] = {
101 { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, // 0000000xx
102 { .bits: 8, .n: 29 }, { .bits: 8, .n: 29 }, // 00000010x
103 { .bits: 8, .n: 30 }, { .bits: 8, .n: 30 }, // 00000011x
104 { .bits: 8, .n: 45 }, { .bits: 8, .n: 45 }, // 00000100x
105 { .bits: 8, .n: 46 }, { .bits: 8, .n: 46 }, // 00000101x
106 { .bits: 7, .n: 22 }, { .bits: 7, .n: 22 }, { .bits: 7, .n: 22 }, { .bits: 7, .n: 22 }, // 0000011xx
107 { .bits: 7, .n: 23 }, { .bits: 7, .n: 23 }, { .bits: 7, .n: 23 }, { .bits: 7, .n: 23 }, // 0000100xx
108 { .bits: 8, .n: 47 }, { .bits: 8, .n: 47 }, // 00001010x
109 { .bits: 8, .n: 48 }, { .bits: 8, .n: 48 }, // 00001011x
110 { .bits: 6, .n: 13 }, { .bits: 6, .n: 13 }, { .bits: 6, .n: 13 }, { .bits: 6, .n: 13 }, // 000011xxx
111 { .bits: 6, .n: 13 }, { .bits: 6, .n: 13 }, { .bits: 6, .n: 13 }, { .bits: 6, .n: 13 }, { .bits: 7, .n: 20 }, { .bits: 7, .n: 20 }, { .bits: 7, .n: 20 }, { .bits: 7, .n: 20 }, // 0001000xx
112 { .bits: 8, .n: 33 }, { .bits: 8, .n: 33 }, // 00010010x
113 { .bits: 8, .n: 34 }, { .bits: 8, .n: 34 }, // 00010011x
114 { .bits: 8, .n: 35 }, { .bits: 8, .n: 35 }, // 00010100x
115 { .bits: 8, .n: 36 }, { .bits: 8, .n: 36 }, // 00010101x
116 { .bits: 8, .n: 37 }, { .bits: 8, .n: 37 }, // 00010110x
117 { .bits: 8, .n: 38 }, { .bits: 8, .n: 38 }, // 00010111x
118 { .bits: 7, .n: 19 }, { .bits: 7, .n: 19 }, { .bits: 7, .n: 19 }, { .bits: 7, .n: 19 }, // 0001100xx
119 { .bits: 8, .n: 31 }, { .bits: 8, .n: 31 }, // 00011010x
120 { .bits: 8, .n: 32 }, { .bits: 8, .n: 32 }, // 00011011x
121 { .bits: 6, .n: 1 }, { .bits: 6, .n: 1 }, { .bits: 6, .n: 1 }, { .bits: 6, .n: 1 }, // 000111xxx
122 { .bits: 6, .n: 1 }, { .bits: 6, .n: 1 }, { .bits: 6, .n: 1 }, { .bits: 6, .n: 1 }, { .bits: 6, .n: 12 }, { .bits: 6, .n: 12 }, { .bits: 6, .n: 12 }, { .bits: 6, .n: 12 }, // 001000xxx
123 { .bits: 6, .n: 12 }, { .bits: 6, .n: 12 }, { .bits: 6, .n: 12 }, { .bits: 6, .n: 12 }, { .bits: 8, .n: 53 }, { .bits: 8, .n: 53 }, // 00100100x
124 { .bits: 8, .n: 54 }, { .bits: 8, .n: 54 }, // 00100101x
125 { .bits: 7, .n: 26 }, { .bits: 7, .n: 26 }, { .bits: 7, .n: 26 }, { .bits: 7, .n: 26 }, // 0010011xx
126 { .bits: 8, .n: 39 }, { .bits: 8, .n: 39 }, // 00101000x
127 { .bits: 8, .n: 40 }, { .bits: 8, .n: 40 }, // 00101001x
128 { .bits: 8, .n: 41 }, { .bits: 8, .n: 41 }, // 00101010x
129 { .bits: 8, .n: 42 }, { .bits: 8, .n: 42 }, // 00101011x
130 { .bits: 8, .n: 43 }, { .bits: 8, .n: 43 }, // 00101100x
131 { .bits: 8, .n: 44 }, { .bits: 8, .n: 44 }, // 00101101x
132 { .bits: 7, .n: 21 }, { .bits: 7, .n: 21 }, { .bits: 7, .n: 21 }, { .bits: 7, .n: 21 }, // 0010111xx
133 { .bits: 7, .n: 28 }, { .bits: 7, .n: 28 }, { .bits: 7, .n: 28 }, { .bits: 7, .n: 28 }, // 0011000xx
134 { .bits: 8, .n: 61 }, { .bits: 8, .n: 61 }, // 00110010x
135 { .bits: 8, .n: 62 }, { .bits: 8, .n: 62 }, // 00110011x
136 { .bits: 8, .n: 63 }, { .bits: 8, .n: 63 }, // 00110100x
137 { .bits: 8, .n: 0 }, { .bits: 8, .n: 0 }, // 00110101x
138 { .bits: 8, .n: 320 }, { .bits: 8, .n: 320 }, // 00110110x
139 { .bits: 8, .n: 384 }, { .bits: 8, .n: 384 }, // 00110111x
140 { .bits: 5, .n: 10 }, { .bits: 5, .n: 10 }, { .bits: 5, .n: 10 }, { .bits: 5, .n: 10 }, // 00111xxxx
141 { .bits: 5, .n: 10 }, { .bits: 5, .n: 10 }, { .bits: 5, .n: 10 }, { .bits: 5, .n: 10 }, { .bits: 5, .n: 10 }, { .bits: 5, .n: 10 }, { .bits: 5, .n: 10 }, { .bits: 5, .n: 10 }, { .bits: 5, .n: 10 }, { .bits: 5, .n: 10 }, { .bits: 5, .n: 10 }, { .bits: 5, .n: 10 }, { .bits: 5, .n: 11 }, { .bits: 5, .n: 11 }, { .bits: 5, .n: 11 }, { .bits: 5, .n: 11 }, // 01000xxxx
142 { .bits: 5, .n: 11 }, { .bits: 5, .n: 11 }, { .bits: 5, .n: 11 }, { .bits: 5, .n: 11 }, { .bits: 5, .n: 11 }, { .bits: 5, .n: 11 }, { .bits: 5, .n: 11 }, { .bits: 5, .n: 11 }, { .bits: 5, .n: 11 }, { .bits: 5, .n: 11 }, { .bits: 5, .n: 11 }, { .bits: 5, .n: 11 }, { .bits: 7, .n: 27 }, { .bits: 7, .n: 27 }, { .bits: 7, .n: 27 }, { .bits: 7, .n: 27 }, // 0100100xx
143 { .bits: 8, .n: 59 }, { .bits: 8, .n: 59 }, // 01001010x
144 { .bits: 8, .n: 60 }, { .bits: 8, .n: 60 }, // 01001011x
145 { .bits: 9, .n: 1472 }, // 010011000
146 { .bits: 9, .n: 1536 }, // 010011001
147 { .bits: 9, .n: 1600 }, // 010011010
148 { .bits: 9, .n: 1728 }, // 010011011
149 { .bits: 7, .n: 18 }, { .bits: 7, .n: 18 }, { .bits: 7, .n: 18 }, { .bits: 7, .n: 18 }, // 0100111xx
150 { .bits: 7, .n: 24 }, { .bits: 7, .n: 24 }, { .bits: 7, .n: 24 }, { .bits: 7, .n: 24 }, // 0101000xx
151 { .bits: 8, .n: 49 }, { .bits: 8, .n: 49 }, // 01010010x
152 { .bits: 8, .n: 50 }, { .bits: 8, .n: 50 }, // 01010011x
153 { .bits: 8, .n: 51 }, { .bits: 8, .n: 51 }, // 01010100x
154 { .bits: 8, .n: 52 }, { .bits: 8, .n: 52 }, // 01010101x
155 { .bits: 7, .n: 25 }, { .bits: 7, .n: 25 }, { .bits: 7, .n: 25 }, { .bits: 7, .n: 25 }, // 0101011xx
156 { .bits: 8, .n: 55 }, { .bits: 8, .n: 55 }, // 01011000x
157 { .bits: 8, .n: 56 }, { .bits: 8, .n: 56 }, // 01011001x
158 { .bits: 8, .n: 57 }, { .bits: 8, .n: 57 }, // 01011010x
159 { .bits: 8, .n: 58 }, { .bits: 8, .n: 58 }, // 01011011x
160 { .bits: 6, .n: 192 }, { .bits: 6, .n: 192 }, { .bits: 6, .n: 192 }, { .bits: 6, .n: 192 }, // 010111xxx
161 { .bits: 6, .n: 192 }, { .bits: 6, .n: 192 }, { .bits: 6, .n: 192 }, { .bits: 6, .n: 192 }, { .bits: 6, .n: 1664 }, { .bits: 6, .n: 1664 }, { .bits: 6, .n: 1664 }, { .bits: 6, .n: 1664 }, // 011000xxx
162 { .bits: 6, .n: 1664 }, { .bits: 6, .n: 1664 }, { .bits: 6, .n: 1664 }, { .bits: 6, .n: 1664 }, { .bits: 8, .n: 448 }, { .bits: 8, .n: 448 }, // 01100100x
163 { .bits: 8, .n: 512 }, { .bits: 8, .n: 512 }, // 01100101x
164 { .bits: 9, .n: 704 }, // 011001100
165 { .bits: 9, .n: 768 }, // 011001101
166 { .bits: 8, .n: 640 }, { .bits: 8, .n: 640 }, // 01100111x
167 { .bits: 8, .n: 576 }, { .bits: 8, .n: 576 }, // 01101000x
168 { .bits: 9, .n: 832 }, // 011010010
169 { .bits: 9, .n: 896 }, // 011010011
170 { .bits: 9, .n: 960 }, // 011010100
171 { .bits: 9, .n: 1024 }, // 011010101
172 { .bits: 9, .n: 1088 }, // 011010110
173 { .bits: 9, .n: 1152 }, // 011010111
174 { .bits: 9, .n: 1216 }, // 011011000
175 { .bits: 9, .n: 1280 }, // 011011001
176 { .bits: 9, .n: 1344 }, // 011011010
177 { .bits: 9, .n: 1408 }, // 011011011
178 { .bits: 7, .n: 256 }, { .bits: 7, .n: 256 }, { .bits: 7, .n: 256 }, { .bits: 7, .n: 256 }, // 0110111xx
179 { .bits: 4, .n: 2 }, { .bits: 4, .n: 2 }, { .bits: 4, .n: 2 }, { .bits: 4, .n: 2 }, // 0111xxxxx
180 { .bits: 4, .n: 2 }, { .bits: 4, .n: 2 }, { .bits: 4, .n: 2 }, { .bits: 4, .n: 2 }, { .bits: 4, .n: 2 }, { .bits: 4, .n: 2 }, { .bits: 4, .n: 2 }, { .bits: 4, .n: 2 }, { .bits: 4, .n: 2 }, { .bits: 4, .n: 2 }, { .bits: 4, .n: 2 }, { .bits: 4, .n: 2 }, { .bits: 4, .n: 2 }, { .bits: 4, .n: 2 }, { .bits: 4, .n: 2 }, { .bits: 4, .n: 2 },
181 { .bits: 4, .n: 2 }, { .bits: 4, .n: 2 }, { .bits: 4, .n: 2 }, { .bits: 4, .n: 2 }, { .bits: 4, .n: 2 }, { .bits: 4, .n: 2 }, { .bits: 4, .n: 2 }, { .bits: 4, .n: 2 }, { .bits: 4, .n: 2 }, { .bits: 4, .n: 2 }, { .bits: 4, .n: 2 }, { .bits: 4, .n: 2 }, { .bits: 4, .n: 3 }, { .bits: 4, .n: 3 }, { .bits: 4, .n: 3 }, { .bits: 4, .n: 3 }, // 1000xxxxx
182 { .bits: 4, .n: 3 }, { .bits: 4, .n: 3 }, { .bits: 4, .n: 3 }, { .bits: 4, .n: 3 }, { .bits: 4, .n: 3 }, { .bits: 4, .n: 3 }, { .bits: 4, .n: 3 }, { .bits: 4, .n: 3 }, { .bits: 4, .n: 3 }, { .bits: 4, .n: 3 }, { .bits: 4, .n: 3 }, { .bits: 4, .n: 3 }, { .bits: 4, .n: 3 }, { .bits: 4, .n: 3 }, { .bits: 4, .n: 3 }, { .bits: 4, .n: 3 },
183 { .bits: 4, .n: 3 }, { .bits: 4, .n: 3 }, { .bits: 4, .n: 3 }, { .bits: 4, .n: 3 }, { .bits: 4, .n: 3 }, { .bits: 4, .n: 3 }, { .bits: 4, .n: 3 }, { .bits: 4, .n: 3 }, { .bits: 4, .n: 3 }, { .bits: 4, .n: 3 }, { .bits: 4, .n: 3 }, { .bits: 4, .n: 3 }, { .bits: 5, .n: 128 }, { .bits: 5, .n: 128 }, { .bits: 5, .n: 128 }, { .bits: 5, .n: 128 }, // 10010xxxx
184 { .bits: 5, .n: 128 }, { .bits: 5, .n: 128 }, { .bits: 5, .n: 128 }, { .bits: 5, .n: 128 }, { .bits: 5, .n: 128 }, { .bits: 5, .n: 128 }, { .bits: 5, .n: 128 }, { .bits: 5, .n: 128 }, { .bits: 5, .n: 128 }, { .bits: 5, .n: 128 }, { .bits: 5, .n: 128 }, { .bits: 5, .n: 128 }, { .bits: 5, .n: 8 }, { .bits: 5, .n: 8 }, { .bits: 5, .n: 8 }, { .bits: 5, .n: 8 }, // 10011xxxx
185 { .bits: 5, .n: 8 }, { .bits: 5, .n: 8 }, { .bits: 5, .n: 8 }, { .bits: 5, .n: 8 }, { .bits: 5, .n: 8 }, { .bits: 5, .n: 8 }, { .bits: 5, .n: 8 }, { .bits: 5, .n: 8 }, { .bits: 5, .n: 8 }, { .bits: 5, .n: 8 }, { .bits: 5, .n: 8 }, { .bits: 5, .n: 8 }, { .bits: 5, .n: 9 }, { .bits: 5, .n: 9 }, { .bits: 5, .n: 9 }, { .bits: 5, .n: 9 }, // 10100xxxx
186 { .bits: 5, .n: 9 }, { .bits: 5, .n: 9 }, { .bits: 5, .n: 9 }, { .bits: 5, .n: 9 }, { .bits: 5, .n: 9 }, { .bits: 5, .n: 9 }, { .bits: 5, .n: 9 }, { .bits: 5, .n: 9 }, { .bits: 5, .n: 9 }, { .bits: 5, .n: 9 }, { .bits: 5, .n: 9 }, { .bits: 5, .n: 9 }, { .bits: 6, .n: 16 }, { .bits: 6, .n: 16 }, { .bits: 6, .n: 16 }, { .bits: 6, .n: 16 }, // 101010xxx
187 { .bits: 6, .n: 16 }, { .bits: 6, .n: 16 }, { .bits: 6, .n: 16 }, { .bits: 6, .n: 16 }, { .bits: 6, .n: 17 }, { .bits: 6, .n: 17 }, { .bits: 6, .n: 17 }, { .bits: 6, .n: 17 }, // 101011xxx
188 { .bits: 6, .n: 17 }, { .bits: 6, .n: 17 }, { .bits: 6, .n: 17 }, { .bits: 6, .n: 17 }, { .bits: 4, .n: 4 }, { .bits: 4, .n: 4 }, { .bits: 4, .n: 4 }, { .bits: 4, .n: 4 }, // 1011xxxxx
189 { .bits: 4, .n: 4 }, { .bits: 4, .n: 4 }, { .bits: 4, .n: 4 }, { .bits: 4, .n: 4 }, { .bits: 4, .n: 4 }, { .bits: 4, .n: 4 }, { .bits: 4, .n: 4 }, { .bits: 4, .n: 4 }, { .bits: 4, .n: 4 }, { .bits: 4, .n: 4 }, { .bits: 4, .n: 4 }, { .bits: 4, .n: 4 }, { .bits: 4, .n: 4 }, { .bits: 4, .n: 4 }, { .bits: 4, .n: 4 }, { .bits: 4, .n: 4 },
190 { .bits: 4, .n: 4 }, { .bits: 4, .n: 4 }, { .bits: 4, .n: 4 }, { .bits: 4, .n: 4 }, { .bits: 4, .n: 4 }, { .bits: 4, .n: 4 }, { .bits: 4, .n: 4 }, { .bits: 4, .n: 4 }, { .bits: 4, .n: 4 }, { .bits: 4, .n: 4 }, { .bits: 4, .n: 4 }, { .bits: 4, .n: 4 }, { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 }, // 1100xxxxx
191 { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 },
192 { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 }, { .bits: 6, .n: 14 }, { .bits: 6, .n: 14 }, { .bits: 6, .n: 14 }, { .bits: 6, .n: 14 }, // 110100xxx
193 { .bits: 6, .n: 14 }, { .bits: 6, .n: 14 }, { .bits: 6, .n: 14 }, { .bits: 6, .n: 14 }, { .bits: 6, .n: 15 }, { .bits: 6, .n: 15 }, { .bits: 6, .n: 15 }, { .bits: 6, .n: 15 }, // 110101xxx
194 { .bits: 6, .n: 15 }, { .bits: 6, .n: 15 }, { .bits: 6, .n: 15 }, { .bits: 6, .n: 15 }, { .bits: 5, .n: 64 }, { .bits: 5, .n: 64 }, { .bits: 5, .n: 64 }, { .bits: 5, .n: 64 }, // 11011xxxx
195 { .bits: 5, .n: 64 }, { .bits: 5, .n: 64 }, { .bits: 5, .n: 64 }, { .bits: 5, .n: 64 }, { .bits: 5, .n: 64 }, { .bits: 5, .n: 64 }, { .bits: 5, .n: 64 }, { .bits: 5, .n: 64 }, { .bits: 5, .n: 64 }, { .bits: 5, .n: 64 }, { .bits: 5, .n: 64 }, { .bits: 5, .n: 64 }, { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 }, // 1110xxxxx
196 { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 },
197 { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 }, { .bits: 4, .n: 7 }, { .bits: 4, .n: 7 }, { .bits: 4, .n: 7 }, { .bits: 4, .n: 7 }, // 1111xxxxx
198 { .bits: 4, .n: 7 }, { .bits: 4, .n: 7 }, { .bits: 4, .n: 7 }, { .bits: 4, .n: 7 }, { .bits: 4, .n: 7 }, { .bits: 4, .n: 7 }, { .bits: 4, .n: 7 }, { .bits: 4, .n: 7 }, { .bits: 4, .n: 7 }, { .bits: 4, .n: 7 }, { .bits: 4, .n: 7 }, { .bits: 4, .n: 7 }, { .bits: 4, .n: 7 }, { .bits: 4, .n: 7 }, { .bits: 4, .n: 7 }, { .bits: 4, .n: 7 },
199 { .bits: 4, .n: 7 }, { .bits: 4, .n: 7 }, { .bits: 4, .n: 7 }, { .bits: 4, .n: 7 }, { .bits: 4, .n: 7 }, { .bits: 4, .n: 7 }, { .bits: 4, .n: 7 }, { .bits: 4, .n: 7 }, { .bits: 4, .n: 7 }, { .bits: 4, .n: 7 }, { .bits: 4, .n: 7 }, { .bits: 4, .n: 7 }
200};
201
202//------------------------------------------------------------------------
203// black run lengths
204//------------------------------------------------------------------------
205
206// 10-13 bit codes (upper 6 bits are 0)
207static const CCITTCode blackTab1[128] = { { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, // 000000000000x
208 { .bits: 12, ccittEOL }, { .bits: 12, ccittEOL }, // 000000000001x
209 { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, // 00000000001xx
210 { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, // 00000000010xx
211 { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, // 00000000011xx
212 { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, // 00000000100xx
213 { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, // 00000000101xx
214 { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, // 00000000110xx
215 { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, // 00000000111xx
216 { .bits: 11, .n: 1792 }, { .bits: 11, .n: 1792 }, { .bits: 11, .n: 1792 }, { .bits: 11, .n: 1792 }, // 00000001000xx
217 { .bits: 12, .n: 1984 }, { .bits: 12, .n: 1984 }, // 000000010010x
218 { .bits: 12, .n: 2048 }, { .bits: 12, .n: 2048 }, // 000000010011x
219 { .bits: 12, .n: 2112 }, { .bits: 12, .n: 2112 }, // 000000010100x
220 { .bits: 12, .n: 2176 }, { .bits: 12, .n: 2176 }, // 000000010101x
221 { .bits: 12, .n: 2240 }, { .bits: 12, .n: 2240 }, // 000000010110x
222 { .bits: 12, .n: 2304 }, { .bits: 12, .n: 2304 }, // 000000010111x
223 { .bits: 11, .n: 1856 }, { .bits: 11, .n: 1856 }, { .bits: 11, .n: 1856 }, { .bits: 11, .n: 1856 }, // 00000001100xx
224 { .bits: 11, .n: 1920 }, { .bits: 11, .n: 1920 }, { .bits: 11, .n: 1920 }, { .bits: 11, .n: 1920 }, // 00000001101xx
225 { .bits: 12, .n: 2368 }, { .bits: 12, .n: 2368 }, // 000000011100x
226 { .bits: 12, .n: 2432 }, { .bits: 12, .n: 2432 }, // 000000011101x
227 { .bits: 12, .n: 2496 }, { .bits: 12, .n: 2496 }, // 000000011110x
228 { .bits: 12, .n: 2560 }, { .bits: 12, .n: 2560 }, // 000000011111x
229 { .bits: 10, .n: 18 }, { .bits: 10, .n: 18 }, { .bits: 10, .n: 18 }, { .bits: 10, .n: 18 }, // 0000001000xxx
230 { .bits: 10, .n: 18 }, { .bits: 10, .n: 18 }, { .bits: 10, .n: 18 }, { .bits: 10, .n: 18 }, { .bits: 12, .n: 52 }, { .bits: 12, .n: 52 }, // 000000100100x
231 { .bits: 13, .n: 640 }, // 0000001001010
232 { .bits: 13, .n: 704 }, // 0000001001011
233 { .bits: 13, .n: 768 }, // 0000001001100
234 { .bits: 13, .n: 832 }, // 0000001001101
235 { .bits: 12, .n: 55 }, { .bits: 12, .n: 55 }, // 000000100111x
236 { .bits: 12, .n: 56 }, { .bits: 12, .n: 56 }, // 000000101000x
237 { .bits: 13, .n: 1280 }, // 0000001010010
238 { .bits: 13, .n: 1344 }, // 0000001010011
239 { .bits: 13, .n: 1408 }, // 0000001010100
240 { .bits: 13, .n: 1472 }, // 0000001010101
241 { .bits: 12, .n: 59 }, { .bits: 12, .n: 59 }, // 000000101011x
242 { .bits: 12, .n: 60 }, { .bits: 12, .n: 60 }, // 000000101100x
243 { .bits: 13, .n: 1536 }, // 0000001011010
244 { .bits: 13, .n: 1600 }, // 0000001011011
245 { .bits: 11, .n: 24 }, { .bits: 11, .n: 24 }, { .bits: 11, .n: 24 }, { .bits: 11, .n: 24 }, // 00000010111xx
246 { .bits: 11, .n: 25 }, { .bits: 11, .n: 25 }, { .bits: 11, .n: 25 }, { .bits: 11, .n: 25 }, // 00000011000xx
247 { .bits: 13, .n: 1664 }, // 0000001100100
248 { .bits: 13, .n: 1728 }, // 0000001100101
249 { .bits: 12, .n: 320 }, { .bits: 12, .n: 320 }, // 000000110011x
250 { .bits: 12, .n: 384 }, { .bits: 12, .n: 384 }, // 000000110100x
251 { .bits: 12, .n: 448 }, { .bits: 12, .n: 448 }, // 000000110101x
252 { .bits: 13, .n: 512 }, // 0000001101100
253 { .bits: 13, .n: 576 }, // 0000001101101
254 { .bits: 12, .n: 53 }, { .bits: 12, .n: 53 }, // 000000110111x
255 { .bits: 12, .n: 54 }, { .bits: 12, .n: 54 }, // 000000111000x
256 { .bits: 13, .n: 896 }, // 0000001110010
257 { .bits: 13, .n: 960 }, // 0000001110011
258 { .bits: 13, .n: 1024 }, // 0000001110100
259 { .bits: 13, .n: 1088 }, // 0000001110101
260 { .bits: 13, .n: 1152 }, // 0000001110110
261 { .bits: 13, .n: 1216 }, // 0000001110111
262 { .bits: 10, .n: 64 }, { .bits: 10, .n: 64 }, { .bits: 10, .n: 64 }, { .bits: 10, .n: 64 }, // 0000001111xxx
263 { .bits: 10, .n: 64 }, { .bits: 10, .n: 64 }, { .bits: 10, .n: 64 }, { .bits: 10, .n: 64 } };
264
265// 7-12 bit codes (upper 4 bits are 0)
266static const CCITTCode blackTab2[192] = {
267 { .bits: 8, .n: 13 }, { .bits: 8, .n: 13 }, { .bits: 8, .n: 13 }, { .bits: 8, .n: 13 }, // 00000100xxxx
268 { .bits: 8, .n: 13 }, { .bits: 8, .n: 13 }, { .bits: 8, .n: 13 }, { .bits: 8, .n: 13 }, { .bits: 8, .n: 13 }, { .bits: 8, .n: 13 }, { .bits: 8, .n: 13 }, { .bits: 8, .n: 13 }, { .bits: 8, .n: 13 }, { .bits: 8, .n: 13 }, { .bits: 8, .n: 13 }, { .bits: 8, .n: 13 }, { .bits: 11, .n: 23 }, { .bits: 11, .n: 23 }, // 00000101000x
269 { .bits: 12, .n: 50 }, // 000001010010
270 { .bits: 12, .n: 51 }, // 000001010011
271 { .bits: 12, .n: 44 }, // 000001010100
272 { .bits: 12, .n: 45 }, // 000001010101
273 { .bits: 12, .n: 46 }, // 000001010110
274 { .bits: 12, .n: 47 }, // 000001010111
275 { .bits: 12, .n: 57 }, // 000001011000
276 { .bits: 12, .n: 58 }, // 000001011001
277 { .bits: 12, .n: 61 }, // 000001011010
278 { .bits: 12, .n: 256 }, // 000001011011
279 { .bits: 10, .n: 16 }, { .bits: 10, .n: 16 }, { .bits: 10, .n: 16 }, { .bits: 10, .n: 16 }, // 0000010111xx
280 { .bits: 10, .n: 17 }, { .bits: 10, .n: 17 }, { .bits: 10, .n: 17 }, { .bits: 10, .n: 17 }, // 0000011000xx
281 { .bits: 12, .n: 48 }, // 000001100100
282 { .bits: 12, .n: 49 }, // 000001100101
283 { .bits: 12, .n: 62 }, // 000001100110
284 { .bits: 12, .n: 63 }, // 000001100111
285 { .bits: 12, .n: 30 }, // 000001101000
286 { .bits: 12, .n: 31 }, // 000001101001
287 { .bits: 12, .n: 32 }, // 000001101010
288 { .bits: 12, .n: 33 }, // 000001101011
289 { .bits: 12, .n: 40 }, // 000001101100
290 { .bits: 12, .n: 41 }, // 000001101101
291 { .bits: 11, .n: 22 }, { .bits: 11, .n: 22 }, // 00000110111x
292 { .bits: 8, .n: 14 }, { .bits: 8, .n: 14 }, { .bits: 8, .n: 14 }, { .bits: 8, .n: 14 }, // 00000111xxxx
293 { .bits: 8, .n: 14 }, { .bits: 8, .n: 14 }, { .bits: 8, .n: 14 }, { .bits: 8, .n: 14 }, { .bits: 8, .n: 14 }, { .bits: 8, .n: 14 }, { .bits: 8, .n: 14 }, { .bits: 8, .n: 14 }, { .bits: 8, .n: 14 }, { .bits: 8, .n: 14 }, { .bits: 8, .n: 14 }, { .bits: 8, .n: 14 }, { .bits: 7, .n: 10 }, { .bits: 7, .n: 10 }, { .bits: 7, .n: 10 }, { .bits: 7, .n: 10 }, // 0000100xxxxx
294 { .bits: 7, .n: 10 }, { .bits: 7, .n: 10 }, { .bits: 7, .n: 10 }, { .bits: 7, .n: 10 }, { .bits: 7, .n: 10 }, { .bits: 7, .n: 10 }, { .bits: 7, .n: 10 }, { .bits: 7, .n: 10 }, { .bits: 7, .n: 10 }, { .bits: 7, .n: 10 }, { .bits: 7, .n: 10 }, { .bits: 7, .n: 10 }, { .bits: 7, .n: 10 }, { .bits: 7, .n: 10 }, { .bits: 7, .n: 10 }, { .bits: 7, .n: 10 },
295 { .bits: 7, .n: 10 }, { .bits: 7, .n: 10 }, { .bits: 7, .n: 10 }, { .bits: 7, .n: 10 }, { .bits: 7, .n: 10 }, { .bits: 7, .n: 10 }, { .bits: 7, .n: 10 }, { .bits: 7, .n: 10 }, { .bits: 7, .n: 10 }, { .bits: 7, .n: 10 }, { .bits: 7, .n: 10 }, { .bits: 7, .n: 10 }, { .bits: 7, .n: 11 }, { .bits: 7, .n: 11 }, { .bits: 7, .n: 11 }, { .bits: 7, .n: 11 }, // 0000101xxxxx
296 { .bits: 7, .n: 11 }, { .bits: 7, .n: 11 }, { .bits: 7, .n: 11 }, { .bits: 7, .n: 11 }, { .bits: 7, .n: 11 }, { .bits: 7, .n: 11 }, { .bits: 7, .n: 11 }, { .bits: 7, .n: 11 }, { .bits: 7, .n: 11 }, { .bits: 7, .n: 11 }, { .bits: 7, .n: 11 }, { .bits: 7, .n: 11 }, { .bits: 7, .n: 11 }, { .bits: 7, .n: 11 }, { .bits: 7, .n: 11 }, { .bits: 7, .n: 11 },
297 { .bits: 7, .n: 11 }, { .bits: 7, .n: 11 }, { .bits: 7, .n: 11 }, { .bits: 7, .n: 11 }, { .bits: 7, .n: 11 }, { .bits: 7, .n: 11 }, { .bits: 7, .n: 11 }, { .bits: 7, .n: 11 }, { .bits: 7, .n: 11 }, { .bits: 7, .n: 11 }, { .bits: 7, .n: 11 }, { .bits: 7, .n: 11 }, { .bits: 9, .n: 15 }, { .bits: 9, .n: 15 }, { .bits: 9, .n: 15 }, { .bits: 9, .n: 15 }, // 000011000xxx
298 { .bits: 9, .n: 15 }, { .bits: 9, .n: 15 }, { .bits: 9, .n: 15 }, { .bits: 9, .n: 15 }, { .bits: 12, .n: 128 }, // 000011001000
299 { .bits: 12, .n: 192 }, // 000011001001
300 { .bits: 12, .n: 26 }, // 000011001010
301 { .bits: 12, .n: 27 }, // 000011001011
302 { .bits: 12, .n: 28 }, // 000011001100
303 { .bits: 12, .n: 29 }, // 000011001101
304 { .bits: 11, .n: 19 }, { .bits: 11, .n: 19 }, // 00001100111x
305 { .bits: 11, .n: 20 }, { .bits: 11, .n: 20 }, // 00001101000x
306 { .bits: 12, .n: 34 }, // 000011010010
307 { .bits: 12, .n: 35 }, // 000011010011
308 { .bits: 12, .n: 36 }, // 000011010100
309 { .bits: 12, .n: 37 }, // 000011010101
310 { .bits: 12, .n: 38 }, // 000011010110
311 { .bits: 12, .n: 39 }, // 000011010111
312 { .bits: 11, .n: 21 }, { .bits: 11, .n: 21 }, // 00001101100x
313 { .bits: 12, .n: 42 }, // 000011011010
314 { .bits: 12, .n: 43 }, // 000011011011
315 { .bits: 10, .n: 0 }, { .bits: 10, .n: 0 }, { .bits: 10, .n: 0 }, { .bits: 10, .n: 0 }, // 0000110111xx
316 { .bits: 7, .n: 12 }, { .bits: 7, .n: 12 }, { .bits: 7, .n: 12 }, { .bits: 7, .n: 12 }, // 0000111xxxxx
317 { .bits: 7, .n: 12 }, { .bits: 7, .n: 12 }, { .bits: 7, .n: 12 }, { .bits: 7, .n: 12 }, { .bits: 7, .n: 12 }, { .bits: 7, .n: 12 }, { .bits: 7, .n: 12 }, { .bits: 7, .n: 12 }, { .bits: 7, .n: 12 }, { .bits: 7, .n: 12 }, { .bits: 7, .n: 12 }, { .bits: 7, .n: 12 }, { .bits: 7, .n: 12 }, { .bits: 7, .n: 12 }, { .bits: 7, .n: 12 }, { .bits: 7, .n: 12 },
318 { .bits: 7, .n: 12 }, { .bits: 7, .n: 12 }, { .bits: 7, .n: 12 }, { .bits: 7, .n: 12 }, { .bits: 7, .n: 12 }, { .bits: 7, .n: 12 }, { .bits: 7, .n: 12 }, { .bits: 7, .n: 12 }, { .bits: 7, .n: 12 }, { .bits: 7, .n: 12 }, { .bits: 7, .n: 12 }, { .bits: 7, .n: 12 }
319};
320
321// 2-6 bit codes
322static const CCITTCode blackTab3[64] = { { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, { .bits: -1, .n: -1 }, // 0000xx
323 { .bits: 6, .n: 9 }, // 000100
324 { .bits: 6, .n: 8 }, // 000101
325 { .bits: 5, .n: 7 }, { .bits: 5, .n: 7 }, // 00011x
326 { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 }, { .bits: 4, .n: 6 }, // 0010xx
327 { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 }, { .bits: 4, .n: 5 }, // 0011xx
328 { .bits: 3, .n: 1 }, { .bits: 3, .n: 1 }, { .bits: 3, .n: 1 }, { .bits: 3, .n: 1 }, // 010xxx
329 { .bits: 3, .n: 1 }, { .bits: 3, .n: 1 }, { .bits: 3, .n: 1 }, { .bits: 3, .n: 1 }, { .bits: 3, .n: 4 }, { .bits: 3, .n: 4 }, { .bits: 3, .n: 4 }, { .bits: 3, .n: 4 }, // 011xxx
330 { .bits: 3, .n: 4 }, { .bits: 3, .n: 4 }, { .bits: 3, .n: 4 }, { .bits: 3, .n: 4 }, { .bits: 2, .n: 3 }, { .bits: 2, .n: 3 }, { .bits: 2, .n: 3 }, { .bits: 2, .n: 3 }, // 10xxxx
331 { .bits: 2, .n: 3 }, { .bits: 2, .n: 3 }, { .bits: 2, .n: 3 }, { .bits: 2, .n: 3 }, { .bits: 2, .n: 3 }, { .bits: 2, .n: 3 }, { .bits: 2, .n: 3 }, { .bits: 2, .n: 3 }, { .bits: 2, .n: 3 }, { .bits: 2, .n: 3 }, { .bits: 2, .n: 3 }, { .bits: 2, .n: 3 }, { .bits: 2, .n: 2 }, { .bits: 2, .n: 2 }, { .bits: 2, .n: 2 }, { .bits: 2, .n: 2 }, // 11xxxx
332 { .bits: 2, .n: 2 }, { .bits: 2, .n: 2 }, { .bits: 2, .n: 2 }, { .bits: 2, .n: 2 }, { .bits: 2, .n: 2 }, { .bits: 2, .n: 2 }, { .bits: 2, .n: 2 }, { .bits: 2, .n: 2 }, { .bits: 2, .n: 2 }, { .bits: 2, .n: 2 }, { .bits: 2, .n: 2 }, { .bits: 2, .n: 2 } };
333
334#endif
335

source code of poppler/poppler/Stream-CCITT.h