31 #define FREQ_BITS 14 // bits used by frequency counters
32 #define VALUE_BITS 18 // bits used to represent the values
33 #define TOP_VALUE ((1 << VALUE_BITS) - 1) // maximum value
34 #define FIRST_QTR (TOP_VALUE / 4 + 1) // first quarter of values maximum value
35 #define HALF (2 * FIRST_QTR) // first half of values maximum value
36 #define THIRD_QTR (3 * FIRST_QTR) // third quarter of values maximum value
38 #define LUT_BITS (FREQ_BITS - 8) // number of bits used to index lookup tables
39 #define LUT_SIZE (1 << LUT_BITS) // size of the lookup tables
40 #define LUT_BUFF 4 // number of buffered lookup tables
46 16384, 16066, 15748, 15431, 15114, 14799, 14485, 14173, 13861, 13552,
47 13243, 12939, 12635, 12336, 12038, 11745, 11452, 11161, 10870, 10586,
48 10303, 10027, 9751, 9483, 9215, 8953, 8692, 8440, 8189, 7946,
49 7704, 7472, 7240, 7008, 6776, 6554, 6333, 6122, 5912, 5711,
50 5512, 5320, 5128, 4947, 4766, 4595, 4425, 4264, 4104, 3946,
51 3788, 3640, 3493, 3355, 3218, 3090, 2963, 2842, 2721, 2609,
52 2498, 2395, 2292, 2196, 2100, 2004, 1908, 1820, 1732, 1651,
53 1570, 1497, 1424, 1355, 1287, 1223, 1161, 1100, 1044, 988,
54 938, 888, 839, 790, 746, 702, 662, 623, 588, 553,
55 520, 488, 459, 431, 405, 380, 357, 334, 311, 288,
56 268, 248, 230, 213, 197, 182, 168, 154, 142, 130,
57 119, 108, 99, 90, 81, 72, 64, 56, 49, 42,
58 36, 30, 25, 20, 15, 11, 7, 3, 0
61 16384, 16080, 15776, 15473, 15170, 14868, 14567, 14268, 13970, 13674,
62 13378, 13086, 12794, 12505, 12218, 11936, 11654, 11373, 11092, 10818,
63 10544, 10276, 10008, 9749, 9490, 9236, 8982, 8737, 8492, 8256,
64 8020, 7792, 7564, 7336, 7108, 6888, 6669, 6459, 6249, 6050,
65 5852, 5660, 5468, 5286, 5104, 4931, 4760, 4598, 4436, 4275,
66 4115, 3965, 3816, 3674, 3534, 3403, 3272, 3147, 3023, 2907,
67 2792, 2684, 2577, 2476, 2375, 2274, 2173, 2079, 1986, 1897,
68 1810, 1724, 1645, 1567, 1493, 1419, 1351, 1284, 1222, 1161,
69 1105, 1050, 995, 941, 891, 842, 797, 753, 713, 673,
70 636, 599, 566, 533, 503, 473, 446, 419, 392, 365,
71 340, 316, 294, 272, 253, 234, 216, 199, 184, 169,
72 155, 142, 130, 118, 106, 95, 85, 75, 66, 57,
73 49, 41, 34, 27, 21, 15, 10, 5, 0
76 16384, 16092, 15801, 15510, 15219, 14930, 14641, 14355, 14069, 13785,
77 13501, 13219, 12938, 12661, 12384, 12112, 11841, 11571, 11301, 11037,
78 10773, 10514, 10256, 10005, 9754, 9508, 9263, 9025, 8787, 8557,
79 8327, 8103, 7879, 7655, 7431, 7215, 7000, 6792, 6585, 6387,
80 6190, 5998, 5807, 5625, 5445, 5272, 5100, 4937, 4774, 4613,
81 4452, 4301, 4150, 4007, 3865, 3731, 3597, 3469, 3341, 3218,
82 3099, 2981, 2869, 2758, 2652, 2546, 2440, 2334, 2234, 2134,
83 2041, 1949, 1864, 1779, 1699, 1620, 1547, 1474, 1407, 1340,
84 1278, 1217, 1157, 1097, 1043, 989, 940, 891, 846, 801,
85 759, 718, 680, 643, 609, 575, 543, 511, 479, 447,
86 418, 389, 363, 337, 314, 291, 270, 249, 230, 212,
87 195, 179, 164, 149, 135, 121, 108, 96, 85, 74,
88 64, 54, 45, 36, 28, 20, 13, 6, 0
95 16384, 16104, 15825, 15546, 15268, 14991, 14714, 14439, 14164, 13891,
96 13620, 13350, 13081, 12815, 12549, 12287, 12025, 11765, 11505, 11250,
97 10996, 10746, 10497, 10254, 10011, 9772, 9534, 9303, 9072, 8848,
98 8624, 8406, 8188, 7970, 7752, 7539, 7327, 7123, 6919, 6724,
99 6529, 6339, 6150, 5970, 5790, 5618, 5446, 5282, 5119, 4957,
100 4795, 4642, 4490, 4345, 4201, 4065, 3929, 3798, 3669, 3547,
101 3425, 3310, 3196, 3086, 2976, 2866, 2756, 2650, 2545, 2447,
102 2350, 2260, 2170, 2085, 2000, 1921, 1843, 1770, 1698, 1632,
103 1566, 1501, 1436, 1376, 1316, 1261, 1207, 1157, 1108, 1061,
104 1015, 973, 931, 893, 855, 819, 783, 747, 711, 677,
105 644, 614, 584, 557, 530, 505, 480, 458, 436, 416,
106 396, 378, 360, 343, 326, 310, 295, 281, 267, 255,
107 243, 232, 221, 211, 201, 192, 183, 174, 166, 158,
108 150, 142, 134, 126, 119, 112, 106, 100, 95, 90,
109 85, 80, 76, 72, 69, 66, 63, 60, 57, 54,
110 51, 48, 46, 44, 42, 40, 38, 36, 34, 33,
111 32, 31, 30, 29, 28, 27, 26, 25, 24, 23,
112 22, 21, 20, 19, 18, 17, 16, 15, 14, 13,
113 12, 11, 10, 9, 8, 7, 6, 5, 4, 3,
117 16384, 16116, 15849, 15582, 15316, 15050, 14785, 14521, 14257, 13995,
118 13734, 13476, 13218, 12963, 12708, 12457, 12206, 11956, 11706, 11460,
119 11215, 10975, 10735, 10500, 10265, 10034, 9803, 9579, 9355, 9136,
120 8917, 8703, 8489, 8275, 8061, 7853, 7645, 7444, 7244, 7051,
121 6858, 6671, 6484, 6305, 6127, 5956, 5785, 5622, 5459, 5298,
122 5137, 4983, 4830, 4684, 4539, 4401, 4263, 4131, 3999, 3874,
123 3750, 3632, 3515, 3401, 3287, 3173, 3059, 2949, 2840, 2737,
124 2635, 2539, 2444, 2354, 2264, 2181, 2098, 2020, 1943, 1872,
125 1801, 1731, 1661, 1596, 1532, 1472, 1412, 1357, 1303, 1251,
126 1200, 1153, 1106, 1063, 1020, 979, 938, 897, 856, 818,
127 780, 746, 712, 681, 650, 621, 592, 566, 540, 517,
128 494, 473, 452, 431, 410, 391, 373, 356, 340, 325,
129 310, 296, 282, 270, 258, 247, 236, 225, 214, 203,
130 192, 182, 172, 162, 153, 144, 136, 128, 121, 114,
131 108, 102, 97, 92, 87, 82, 77, 73, 69, 65,
132 62, 59, 56, 53, 50, 47, 45, 43, 41, 39,
133 37, 35, 33, 31, 29, 27, 26, 25, 24, 23,
134 22, 21, 20, 19, 18, 17, 16, 15, 14, 13,
135 12, 11, 10, 9, 8, 7, 6, 5, 4, 3,
139 16384, 16128, 15872, 15617, 15362, 15107, 14853, 14600, 14347, 14096,
140 13846, 13597, 13350, 13105, 12860, 12618, 12376, 12135, 11894, 11657,
141 11421, 11189, 10957, 10730, 10503, 10279, 10056, 9838, 9620, 9407,
142 9195, 8987, 8779, 8571, 8363, 8159, 7955, 7758, 7561, 7371,
143 7182, 6997, 6812, 6635, 6459, 6289, 6120, 5957, 5795, 5634,
144 5473, 5319, 5165, 5018, 4871, 4732, 4593, 4458, 4324, 4197,
145 4071, 3951, 3831, 3714, 3597, 3480, 3363, 3250, 3138, 3032,
146 2927, 2828, 2729, 2635, 2541, 2453, 2366, 2284, 2202, 2126,
147 2050, 1975, 1900, 1830, 1761, 1697, 1633, 1574, 1515, 1459,
148 1403, 1351, 1300, 1252, 1205, 1160, 1115, 1070, 1025, 982,
149 939, 899, 860, 824, 789, 756, 723, 693, 663, 636,
150 609, 584, 559, 535, 511, 489, 467, 447, 427, 409,
151 391, 374, 358, 343, 328, 313, 300, 287, 274, 261,
152 248, 235, 223, 211, 200, 189, 179, 169, 160, 151,
153 143, 135, 128, 121, 115, 109, 103, 97, 92, 87,
154 82, 77, 73, 69, 65, 61, 58, 55, 52, 49,
155 46, 43, 40, 37, 35, 33, 31, 29, 27, 25,
156 23, 21, 20, 19, 18, 17, 16, 15, 14, 13,
157 12, 11, 10, 9, 8, 7, 6, 5, 4, 3,
161 16384, 16139, 15894, 15649, 15405, 15162, 14919, 14677, 14435, 14195,
162 13955, 13717, 13479, 13243, 13008, 12775, 12542, 12310, 12079, 11851,
163 11623, 11399, 11176, 10956, 10737, 10521, 10305, 10094, 9883, 9677,
164 9471, 9268, 9065, 8862, 8659, 8459, 8260, 8067, 7874, 7688,
165 7502, 7321, 7140, 6965, 6790, 6621, 6452, 6290, 6128, 5968,
166 5808, 5655, 5503, 5356, 5209, 5069, 4929, 4794, 4660, 4532,
167 4404, 4282, 4160, 4041, 3922, 3803, 3684, 3568, 3452, 3343,
168 3234, 3131, 3029, 2931, 2833, 2741, 2649, 2563, 2477, 2396,
169 2316, 2236, 2157, 2083, 2009, 1940, 1871, 1807, 1743, 1683,
170 1623, 1567, 1511, 1459, 1407, 1357, 1307, 1257, 1207, 1159,
171 1111, 1067, 1023, 983, 943, 905, 868, 834, 800, 769,
172 738, 709, 681, 653, 625, 600, 575, 552, 529, 508,
173 487, 466, 447, 428, 410, 392, 376, 360, 344, 328,
174 313, 298, 283, 268, 255, 242, 230, 218, 207, 196,
175 186, 176, 167, 158, 150, 142, 135, 128, 121, 114,
176 108, 102, 97, 92, 87, 82, 78, 74, 70, 66,
177 62, 58, 54, 50, 47, 44, 41, 38, 35, 32,
178 30, 28, 26, 24, 22, 20, 18, 16, 14, 13,
179 12, 11, 10, 9, 8, 7, 6, 5, 4, 3,
183 16384, 16149, 15915, 15681, 15447, 15214, 14981, 14749, 14517, 14286,
184 14055, 13827, 13599, 13373, 13147, 12923, 12699, 12476, 12253, 12034,
185 11815, 11599, 11383, 11171, 10959, 10750, 10541, 10337, 10133, 9933,
186 9733, 9536, 9339, 9142, 8945, 8751, 8557, 8369, 8181, 7998,
187 7816, 7638, 7460, 7288, 7116, 6950, 6785, 6625, 6465, 6306,
188 6147, 5995, 5843, 5697, 5551, 5411, 5271, 5135, 5000, 4871,
189 4742, 4618, 4495, 4374, 4253, 4132, 4011, 3893, 3775, 3663,
190 3552, 3446, 3340, 3239, 3138, 3043, 2948, 2858, 2768, 2684,
191 2600, 2516, 2433, 2355, 2278, 2205, 2133, 2065, 1997, 1932,
192 1867, 1807, 1747, 1690, 1634, 1580, 1526, 1472, 1418, 1366,
193 1314, 1266, 1218, 1174, 1130, 1088, 1047, 1009, 971, 936,
194 901, 868, 836, 804, 772, 743, 714, 685, 658, 631,
195 606, 582, 559, 536, 515, 494, 475, 456, 437, 418,
196 399, 380, 362, 344, 328, 312, 297, 283, 270, 257,
197 245, 233, 222, 211, 201, 191, 181, 172, 163, 155,
198 147, 139, 132, 125, 119, 113, 107, 101, 96, 91,
199 86, 81, 76, 71, 66, 62, 58, 54, 50, 46,
200 43, 40, 37, 34, 31, 28, 26, 24, 22, 20,
201 18, 16, 14, 12, 10, 8, 6, 5, 4, 3,
205 16384, 16159, 15934, 15709, 15485, 15261, 15038, 14816, 14594, 14373,
206 14152, 13933, 13714, 13497, 13280, 13065, 12850, 12636, 12422, 12211,
207 12000, 11791, 11583, 11378, 11173, 10971, 10769, 10571, 10373, 10179,
208 9985, 9793, 9601, 9409, 9217, 9029, 8842, 8658, 8475, 8297,
209 8120, 7946, 7773, 7604, 7435, 7271, 7108, 6950, 6792, 6634,
210 6477, 6326, 6175, 6029, 5883, 5742, 5602, 5466, 5330, 5199,
211 5068, 4943, 4818, 4696, 4574, 4452, 4330, 4211, 4093, 3979,
212 3866, 3759, 3652, 3549, 3446, 3348, 3250, 3157, 3065, 2977,
213 2889, 2802, 2716, 2634, 2553, 2476, 2399, 2326, 2254, 2185,
214 2117, 2052, 1987, 1926, 1866, 1808, 1750, 1692, 1634, 1578,
215 1522, 1470, 1418, 1369, 1321, 1275, 1229, 1187, 1145, 1105,
216 1066, 1027, 991, 955, 919, 883, 850, 817, 786, 756,
217 728, 700, 674, 648, 624, 600, 578, 556, 534, 512,
218 490, 468, 447, 426, 407, 388, 371, 354, 338, 322,
219 307, 293, 280, 267, 255, 243, 231, 219, 209, 199,
220 189, 179, 170, 161, 153, 145, 138, 131, 124, 117,
221 111, 105, 99, 93, 87, 81, 76, 71, 66, 61,
222 57, 53, 49, 45, 42, 39, 36, 33, 30, 27,
223 24, 21, 19, 17, 15, 13, 11, 9, 7, 5,
227 16384, 16169, 15954, 15739, 15524, 15310, 15096, 14883, 14670, 14458,
228 14246, 14035, 13824, 13614, 13405, 13198, 12991, 12785, 12579, 12376,
229 12173, 11972, 11772, 11574, 11377, 11182, 10987, 10795, 10603, 10414,
230 10226, 10040, 9854, 9668, 9482, 9299, 9116, 8937, 8759, 8585,
231 8411, 8241, 8071, 7906, 7741, 7580, 7419, 7263, 7107, 6952,
232 6797, 6647, 6497, 6353, 6209, 6070, 5931, 5796, 5661, 5531,
233 5401, 5275, 5150, 5027, 4904, 4781, 4658, 4538, 4419, 4304,
234 4190, 4081, 3972, 3867, 3762, 3662, 3562, 3467, 3372, 3281,
235 3191, 3101, 3012, 2928, 2844, 2764, 2684, 2608, 2533, 2460,
236 2387, 2318, 2250, 2185, 2121, 2059, 1997, 1935, 1873, 1813,
237 1754, 1698, 1642, 1588, 1535, 1483, 1433, 1384, 1338, 1292,
238 1249, 1206, 1165, 1125, 1085, 1045, 1008, 971, 937, 903,
239 871, 840, 810, 780, 752, 724, 698, 672, 647, 622,
240 597, 572, 548, 524, 502, 480, 460, 440, 421, 403,
241 386, 369, 353, 337, 323, 309, 295, 281, 268, 255,
242 243, 231, 220, 209, 199, 189, 180, 171, 163, 155,
243 147, 139, 131, 123, 116, 109, 102, 95, 89, 83,
244 77, 72, 67, 62, 57, 52, 48, 44, 40, 36,
245 32, 28, 25, 22, 19, 16, 13, 10, 8, 6,
249 16384, 16177, 15970, 15764, 15558, 15353, 15148, 14944, 14740, 14537,
250 14334, 14132, 13930, 13729, 13529, 13330, 13131, 12933, 12735, 12539,
251 12343, 12150, 11957, 11766, 11576, 11388, 11200, 11015, 10830, 10647,
252 10465, 10285, 10105, 9925, 9745, 9568, 9391, 9218, 9045, 8876,
253 8707, 8541, 8375, 8213, 8051, 7894, 7737, 7583, 7429, 7277,
254 7125, 6977, 6830, 6687, 6544, 6406, 6268, 6133, 5998, 5868,
255 5738, 5612, 5487, 5364, 5241, 5118, 4995, 4875, 4755, 4640,
256 4525, 4414, 4304, 4198, 4092, 3990, 3888, 3790, 3693, 3600,
257 3507, 3415, 3323, 3235, 3147, 3064, 2981, 2902, 2823, 2746,
258 2670, 2594, 2522, 2450, 2382, 2314, 2248, 2182, 2116, 2050,
259 1987, 1924, 1864, 1804, 1748, 1692, 1638, 1585, 1534, 1484,
260 1437, 1390, 1346, 1302, 1258, 1215, 1174, 1133, 1095, 1057,
261 1021, 986, 952, 918, 887, 856, 827, 798, 770, 742,
262 714, 686, 659, 632, 607, 582, 559, 536, 514, 492,
263 472, 452, 433, 415, 398, 381, 364, 348, 333, 318,
264 304, 290, 277, 264, 252, 240, 229, 218, 208, 198,
265 188, 178, 168, 158, 149, 140, 132, 124, 116, 108,
266 101, 94, 87, 81, 75, 69, 64, 59, 54, 49,
267 44, 39, 35, 31, 27, 23, 19, 15, 12, 9,
275 16384, 16187, 15990, 15793, 15597, 15401, 15205, 15009, 14813, 14618,
276 14423, 14230, 14037, 13845, 13653, 13463, 13273, 13083, 12894, 12706,
277 12518, 12332, 12146, 11962, 11778, 11597, 11416, 11237, 11059, 10882,
278 10706, 10532, 10358, 10184, 10010, 9838, 9666, 9497, 9328, 9163,
279 8999, 8837, 8675, 8517, 8359, 8205, 8051, 7901, 7751, 7602,
280 7453, 7308, 7163, 7022, 6882, 6745, 6609, 6476, 6343, 6214,
281 6085, 5960, 5835, 5712, 5589, 5466, 5343, 5223, 5103, 4987,
282 4872, 4761, 4650, 4542, 4435, 4332, 4229, 4130, 4031, 3936,
283 3841, 3747, 3653, 3563, 3473, 3387, 3302, 3220, 3138, 3059,
284 2980, 2905, 2830, 2759, 2688, 2619, 2550, 2481, 2412, 2345,
285 2278, 2215, 2152, 2092, 2032, 1974, 1917, 1863, 1809, 1758,
286 1707, 1659, 1611, 1564, 1517, 1473, 1429, 1387, 1346, 1307,
287 1268, 1230, 1193, 1158, 1123, 1090, 1058, 1026, 994, 962,
288 930, 899, 869, 841, 813, 786, 760, 735, 710, 687,
289 664, 643, 622, 602, 582, 562, 543, 525, 507, 490,
290 473, 457, 442, 427, 412, 398, 385, 373, 361, 349,
291 337, 325, 313, 301, 290, 279, 269, 259, 249, 240,
292 231, 222, 214, 206, 199, 192, 185, 178, 171, 165,
293 159, 153, 148, 143, 138, 133, 128, 123, 119, 115,
294 111, 107, 103, 99, 95, 91, 87, 83, 80, 77,
295 74, 71, 68, 65, 63, 61, 59, 57, 55, 53,
296 51, 49, 47, 45, 43, 41, 40, 39, 38, 37,
297 36, 35, 34, 33, 32, 31, 30, 29, 28, 27,
298 26, 25, 24, 23, 22, 21, 20, 19, 18, 17,
299 16, 15, 14, 13, 12, 11, 10, 9, 8, 7,
303 16384, 16195, 16006, 15817, 15629, 15441, 15253, 15065, 14878, 14692,
304 14506, 14321, 14136, 13952, 13768, 13585, 13402, 13219, 13037, 12857,
305 12677, 12499, 12321, 12144, 11967, 11792, 11617, 11444, 11271, 11100,
306 10930, 10762, 10594, 10426, 10258, 10091, 9925, 9761, 9598, 9438,
307 9278, 9120, 8963, 8809, 8655, 8504, 8354, 8207, 8060, 7914,
308 7769, 7627, 7485, 7347, 7209, 7074, 6939, 6807, 6676, 6548,
309 6420, 6296, 6172, 6050, 5928, 5806, 5684, 5564, 5444, 5328,
310 5212, 5100, 4988, 4879, 4771, 4667, 4563, 4462, 4362, 4265,
311 4169, 4073, 3978, 3886, 3795, 3707, 3619, 3535, 3451, 3369,
312 3288, 3210, 3133, 3059, 2985, 2913, 2841, 2769, 2697, 2627,
313 2557, 2490, 2424, 2360, 2297, 2237, 2177, 2119, 2062, 2007,
314 1953, 1901, 1849, 1798, 1748, 1700, 1652, 1607, 1562, 1519,
315 1476, 1435, 1394, 1355, 1317, 1281, 1245, 1210, 1175, 1140,
316 1105, 1071, 1037, 1005, 973, 943, 913, 885, 857, 830,
317 804, 779, 754, 731, 708, 685, 663, 642, 621, 601,
318 581, 563, 545, 528, 511, 495, 479, 463, 448, 433,
319 419, 405, 391, 377, 364, 351, 338, 326, 314, 302,
320 291, 280, 270, 260, 251, 242, 234, 226, 218, 210,
321 202, 195, 188, 181, 174, 168, 162, 156, 150, 144,
322 139, 134, 129, 124, 119, 114, 109, 104, 100, 96,
323 92, 88, 84, 80, 77, 74, 71, 68, 65, 62,
324 59, 56, 54, 52, 50, 48, 46, 44, 42, 40,
325 38, 36, 34, 33, 32, 31, 30, 29, 28, 27,
326 26, 25, 24, 23, 22, 21, 20, 19, 18, 17,
327 16, 15, 14, 13, 12, 11, 10, 9, 8, 7,
331 16384, 16203, 16022, 15842, 15662, 15482, 15302, 15122, 14942, 14763,
332 14584, 14406, 14228, 14051, 13874, 13698, 13522, 13347, 13172, 12998,
333 12824, 12652, 12480, 12310, 12140, 11971, 11803, 11637, 11471, 11307,
334 11143, 10980, 10817, 10654, 10491, 10330, 10169, 10011, 9853, 9697,
335 9542, 9389, 9236, 9086, 8936, 8789, 8642, 8498, 8355, 8212,
336 8070, 7931, 7792, 7656, 7520, 7388, 7256, 7126, 6996, 6870,
337 6744, 6621, 6498, 6377, 6256, 6135, 6014, 5895, 5776, 5660,
338 5545, 5433, 5321, 5212, 5104, 4999, 4895, 4793, 4692, 4594,
339 4496, 4400, 4304, 4211, 4118, 4028, 3939, 3853, 3767, 3684,
340 3601, 3521, 3441, 3364, 3287, 3212, 3137, 3062, 2987, 2915,
341 2843, 2773, 2704, 2638, 2572, 2508, 2445, 2384, 2324, 2266,
342 2208, 2153, 2098, 2044, 1990, 1939, 1888, 1839, 1791, 1745,
343 1699, 1655, 1611, 1569, 1527, 1487, 1448, 1409, 1370, 1331,
344 1292, 1255, 1218, 1183, 1148, 1115, 1082, 1051, 1020, 990,
345 960, 932, 904, 878, 852, 826, 801, 777, 753, 731,
346 709, 687, 666, 645, 625, 605, 586, 567, 550, 533,
347 516, 499, 482, 465, 449, 433, 418, 403, 389, 375,
348 362, 349, 337, 325, 314, 303, 293, 283, 273, 263,
349 254, 245, 236, 227, 219, 211, 204, 197, 190, 183,
350 177, 171, 165, 159, 153, 147, 141, 135, 130, 125,
351 120, 115, 110, 105, 101, 97, 93, 89, 85, 81,
352 77, 74, 71, 68, 65, 62, 59, 56, 53, 51,
353 49, 47, 45, 43, 41, 39, 37, 35, 33, 31,
354 29, 27, 25, 23, 22, 21, 20, 19, 18, 17,
355 16, 15, 14, 13, 12, 11, 10, 9, 8, 7,
359 16384, 16210, 16036, 15863, 15690, 15517, 15344, 15172, 15000, 14828,
360 14656, 14485, 14314, 14145, 13976, 13808, 13640, 13472, 13304, 13137,
361 12970, 12804, 12639, 12475, 12312, 12149, 11987, 11827, 11667, 11508,
362 11349, 11192, 11035, 10878, 10721, 10565, 10410, 10257, 10104, 9953,
363 9802, 9654, 9506, 9359, 9213, 9070, 8927, 8787, 8647, 8508,
364 8369, 8233, 8097, 7964, 7831, 7700, 7570, 7442, 7315, 7190,
365 7065, 6943, 6821, 6701, 6581, 6461, 6341, 6223, 6105, 5990,
366 5876, 5764, 5653, 5545, 5437, 5331, 5226, 5124, 5022, 4924,
367 4826, 4729, 4632, 4538, 4444, 4353, 4262, 4174, 4087, 4002,
368 3917, 3835, 3753, 3674, 3595, 3518, 3441, 3364, 3287, 3212,
369 3138, 3066, 2995, 2926, 2858, 2792, 2726, 2662, 2599, 2538,
370 2478, 2420, 2362, 2305, 2249, 2195, 2141, 2089, 2037, 1988,
371 1939, 1891, 1844, 1799, 1754, 1711, 1668, 1626, 1584, 1542,
372 1500, 1459, 1418, 1380, 1342, 1305, 1269, 1234, 1199, 1166,
373 1133, 1102, 1071, 1041, 1012, 983, 954, 926, 899, 872,
374 847, 822, 798, 774, 751, 728, 707, 686, 666, 646,
375 627, 608, 589, 570, 552, 534, 517, 500, 484, 468,
376 453, 438, 424, 410, 397, 384, 372, 360, 348, 336,
377 325, 314, 303, 293, 283, 273, 264, 255, 246, 237,
378 229, 221, 213, 205, 197, 189, 181, 174, 167, 160,
379 154, 148, 142, 136, 131, 126, 121, 116, 111, 106,
380 101, 97, 93, 89, 85, 81, 77, 73, 70, 67,
381 64, 61, 58, 55, 52, 49, 46, 43, 40, 37,
382 35, 33, 31, 29, 27, 25, 23, 21, 19, 17,
383 16, 15, 14, 13, 12, 11, 10, 9, 8, 7,
387 16384, 16218, 16052, 15886, 15720, 15554, 15389, 15224, 15059, 14895,
388 14731, 14567, 14403, 14240, 14077, 13915, 13753, 13591, 13429, 13269,
389 13109, 12950, 12791, 12633, 12476, 12320, 12164, 12009, 11854, 11701,
390 11548, 11396, 11244, 11092, 10940, 10790, 10640, 10492, 10344, 10198,
391 10052, 9908, 9764, 9622, 9481, 9342, 9203, 9066, 8929, 8793,
392 8657, 8524, 8391, 8261, 8131, 8003, 7875, 7749, 7624, 7502,
393 7380, 7260, 7140, 7022, 6904, 6786, 6668, 6551, 6435, 6322,
394 6209, 6099, 5989, 5881, 5773, 5668, 5563, 5461, 5359, 5260,
395 5161, 5063, 4965, 4871, 4777, 4686, 4595, 4506, 4417, 4331,
396 4245, 4162, 4079, 3999, 3919, 3841, 3763, 3685, 3607, 3530,
397 3454, 3380, 3307, 3236, 3166, 3097, 3029, 2963, 2897, 2834,
398 2771, 2710, 2650, 2591, 2532, 2475, 2418, 2363, 2309, 2257,
399 2205, 2155, 2105, 2057, 2009, 1963, 1918, 1873, 1828, 1783,
400 1738, 1694, 1650, 1607, 1565, 1524, 1484, 1445, 1407, 1369,
401 1333, 1297, 1263, 1229, 1197, 1165, 1134, 1103, 1073, 1043,
402 1015, 987, 960, 933, 907, 882, 858, 834, 811, 788,
403 766, 744, 722, 700, 679, 658, 638, 618, 599, 581,
404 563, 545, 528, 511, 495, 480, 465, 451, 437, 423,
405 410, 397, 384, 372, 360, 348, 337, 326, 315, 305,
406 295, 285, 275, 265, 255, 245, 236, 227, 219, 211,
407 203, 195, 188, 181, 174, 167, 161, 155, 149, 143,
408 137, 131, 126, 121, 116, 111, 106, 101, 97, 93,
409 89, 85, 81, 77, 73, 69, 65, 61, 58, 55,
410 52, 49, 46, 43, 40, 37, 34, 32, 30, 28,
411 26, 24, 22, 20, 18, 16, 14, 12, 10, 8,
419 cf_tables_2[1], cf_tables_2[2], cf_tables_2[3], cf_tables_2[4],
420 cf_tables_2[5], cf_tables_2[6], cf_tables_2[7],
cf_tables_3[0],
421 cf_tables_3[1], cf_tables_3[2], cf_tables_3[3], cf_tables_3[4]
430 for (sx = 0; sx < 16; sx++)
433 unsigned int symbol = 1 <<
delta;
435 while (
cf_table[sx][symbol] > target)
436 symbol += 1 <<
delta;
438 *lut++ = symbol >>
delta;
448 unsigned int i = av_clip(delta, 0,
LUT_BUFF - 1);
452 if (lut_status[i] != delta)
461 uint8_t **cf_lut,
int **cf_lut_status)
466 if (!*cf_lut || !*cf_lut_status) {
472 memset(*cf_lut_status, -1,
sizeof(**cf_lut_status) * LUT_BUFF);
489 unsigned int *l,
unsigned int *v)
506 int delta,
unsigned int sx,
507 unsigned int *
h,
unsigned int *l,
unsigned int *v,
508 uint8_t *cf_lut,
int *cf_lut_status)
514 unsigned int high = *
h;
515 unsigned int low = *l;
516 unsigned int value = *v;
521 for (i = 0; i < num; i++) {
522 unsigned int range = high - low + 1;
523 unsigned int target = (((value - low + 1) <<
FREQ_BITS) - 1) / range;
526 while (
cf_table[sx][symbol] > target)
527 symbol += 1 <<
delta;
529 symbol = (symbol >>
delta) - 1;
av_cold void ff_bgmc_end(uint8_t **cf_lut, int **cf_lut_status)
Release the lookup table arrays.
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
static uint8_t * bgmc_lut_getp(uint8_t *lut, int *lut_status, int delta)
Retune the index of a suitable lookup table for a given delta.
Block Gilbert-Moore decoder header.
Macro definitions for various function/variable attributes.
static const uint16_t cf_tables_1[3][129]
Cumulative frequency tables for block Gilbert-Moore coding.
void ff_bgmc_decode_init(GetBitContext *gb, unsigned int *h, unsigned int *l, unsigned int *v)
Initialize decoding and reads the first value.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
void ff_bgmc_decode_end(GetBitContext *gb)
Finish decoding.
static const uint16_t *const cf_table[16]
static const uint16_t cf_tables_3[5][257]
GLsizei GLboolean const GLfloat * value
void ff_bgmc_decode(GetBitContext *gb, unsigned int num, int32_t *dst, int delta, unsigned int sx, unsigned int *h, unsigned int *l, unsigned int *v, uint8_t *cf_lut, int *cf_lut_status)
Read and decode a block Gilbert-Moore coded symbol.
main external API structure.
static unsigned int get_bits1(GetBitContext *s)
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
static void bgmc_lut_fillp(uint8_t *lut, int *lut_status, int delta)
Initialize a given lookup table using a given delta.
static const uint16_t cf_tables_2[8][193]
av_cold int ff_bgmc_init(AVCodecContext *avctx, uint8_t **cf_lut, int **cf_lut_status)
Initialize the lookup table arrays.