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